@mnaoumov/obsidian-lib 10.4.1 → 10.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (118) hide show
  1. package/README.md +6 -0
  2. package/codemirror/incremental-parse-state-field/package.json +6 -0
  3. package/codemirror/markdown-editor-views/package.json +6 -0
  4. package/codemirror/range-set/package.json +6 -0
  5. package/command-handlers/open-bug-report-command-handler/package.json +6 -0
  6. package/components/embeddable-markdown-editor-component/package.json +6 -0
  7. package/components/reconfigurable-editor-extension-component/package.json +6 -0
  8. package/dist/lib/cjs/__merged.cjs +54 -1
  9. package/dist/lib/cjs/__merged.d.cts +14 -3
  10. package/dist/lib/cjs/attachment-path.cjs +3 -2
  11. package/dist/lib/cjs/backlink-index.cjs +44 -8
  12. package/dist/lib/cjs/backlink-index.d.cts +23 -0
  13. package/dist/lib/cjs/bug-report.cjs +241 -0
  14. package/dist/lib/cjs/bug-report.d.cts +161 -0
  15. package/dist/lib/cjs/bulk-operation-progress.cjs +16 -1
  16. package/dist/lib/cjs/bulk-operation-progress.d.cts +22 -0
  17. package/dist/lib/cjs/case-insensitive-file-index.cjs +9 -1
  18. package/dist/lib/cjs/codemirror/incremental-parse-state-field.cjs +162 -0
  19. package/dist/lib/cjs/codemirror/incremental-parse-state-field.d.cts +37 -0
  20. package/dist/lib/cjs/codemirror/index.cjs +10 -1
  21. package/dist/lib/cjs/codemirror/index.d.cts +3 -0
  22. package/dist/lib/cjs/codemirror/markdown-editor-views.cjs +142 -0
  23. package/dist/lib/cjs/codemirror/markdown-editor-views.d.cts +34 -0
  24. package/dist/lib/cjs/codemirror/range-set.cjs +106 -0
  25. package/dist/lib/cjs/codemirror/range-set.d.cts +35 -0
  26. package/dist/lib/cjs/command-handlers/index.cjs +4 -1
  27. package/dist/lib/cjs/command-handlers/index.d.cts +1 -0
  28. package/dist/lib/cjs/command-handlers/open-bug-report-command-handler.cjs +139 -0
  29. package/dist/lib/cjs/command-handlers/open-bug-report-command-handler.d.cts +53 -0
  30. package/dist/lib/cjs/command-handlers/open-settings-command-handler.cjs +6 -3
  31. package/dist/lib/cjs/community-plugins.cjs +19 -2
  32. package/dist/lib/cjs/community-plugins.d.cts +14 -0
  33. package/dist/lib/cjs/components/bulk-operation-commit-component.cjs +5 -2
  34. package/dist/lib/cjs/components/embeddable-markdown-editor-component.cjs +374 -0
  35. package/dist/lib/cjs/components/embeddable-markdown-editor-component.d.cts +221 -0
  36. package/dist/lib/cjs/components/index.cjs +7 -1
  37. package/dist/lib/cjs/components/index.d.cts +2 -0
  38. package/dist/lib/cjs/components/plugin-gate-component.cjs +6 -3
  39. package/dist/lib/cjs/components/reconfigurable-editor-extension-component.cjs +200 -0
  40. package/dist/lib/cjs/components/reconfigurable-editor-extension-component.d.cts +96 -0
  41. package/dist/lib/cjs/components/rename-delete-handler-component.cjs +105 -2
  42. package/dist/lib/cjs/desktop-bulk-operation-git.cjs +38 -13
  43. package/dist/lib/cjs/desktop-bulk-operation-git.d.cts +21 -1
  44. package/dist/lib/cjs/desktop-operating-system.cjs +101 -0
  45. package/dist/lib/cjs/desktop-operating-system.d.cts +15 -0
  46. package/dist/lib/cjs/generated-during-build.cjs +1 -1
  47. package/dist/lib/cjs/i18n/locales/en.cjs +2 -1
  48. package/dist/lib/cjs/i18n/locales/en.d.cts +1 -0
  49. package/dist/lib/cjs/i18n/locales/translations-map.d.cts +1 -0
  50. package/dist/lib/cjs/index.cjs +16 -1
  51. package/dist/lib/cjs/index.d.cts +5 -0
  52. package/dist/lib/cjs/menu.cjs +118 -0
  53. package/dist/lib/cjs/menu.d.cts +65 -0
  54. package/dist/lib/cjs/mobile-app-info.cjs +167 -0
  55. package/dist/lib/cjs/mobile-app-info.d.cts +32 -0
  56. package/dist/lib/cjs/modals/modal.cjs +8 -5
  57. package/dist/lib/cjs/modals/modal.d.cts +4 -0
  58. package/dist/lib/cjs/obsidian-settings.cjs +2 -2
  59. package/dist/lib/cjs/plugin/plugin.cjs +5 -2
  60. package/dist/lib/cjs/plugin/plugin.d.cts +2 -0
  61. package/dist/lib/cjs/settings-modal.cjs +103 -0
  62. package/dist/lib/cjs/settings-modal.d.cts +33 -0
  63. package/dist/lib/esm/__merged.d.mts +14 -3
  64. package/dist/lib/esm/__merged.mjs +50 -2
  65. package/dist/lib/esm/attachment-path.mjs +3 -2
  66. package/dist/lib/esm/backlink-index.d.mts +23 -0
  67. package/dist/lib/esm/backlink-index.mjs +42 -7
  68. package/dist/lib/esm/bug-report.d.mts +161 -0
  69. package/dist/lib/esm/bug-report.mjs +141 -0
  70. package/dist/lib/esm/bulk-operation-progress.d.mts +22 -0
  71. package/dist/lib/esm/bulk-operation-progress.mjs +14 -1
  72. package/dist/lib/esm/case-insensitive-file-index.mjs +9 -1
  73. package/dist/lib/esm/codemirror/incremental-parse-state-field.d.mts +37 -0
  74. package/dist/lib/esm/codemirror/incremental-parse-state-field.mjs +74 -0
  75. package/dist/lib/esm/codemirror/index.d.mts +3 -0
  76. package/dist/lib/esm/codemirror/index.mjs +7 -1
  77. package/dist/lib/esm/codemirror/markdown-editor-views.d.mts +34 -0
  78. package/dist/lib/esm/codemirror/markdown-editor-views.mjs +53 -0
  79. package/dist/lib/esm/codemirror/range-set.d.mts +35 -0
  80. package/dist/lib/esm/codemirror/range-set.mjs +18 -0
  81. package/dist/lib/esm/command-handlers/index.d.mts +1 -0
  82. package/dist/lib/esm/command-handlers/index.mjs +3 -1
  83. package/dist/lib/esm/command-handlers/open-bug-report-command-handler.d.mts +53 -0
  84. package/dist/lib/esm/command-handlers/open-bug-report-command-handler.mjs +51 -0
  85. package/dist/lib/esm/command-handlers/open-settings-command-handler.mjs +6 -3
  86. package/dist/lib/esm/community-plugins.d.mts +14 -0
  87. package/dist/lib/esm/community-plugins.mjs +18 -2
  88. package/dist/lib/esm/components/bulk-operation-commit-component.mjs +5 -2
  89. package/dist/lib/esm/components/embeddable-markdown-editor-component.d.mts +221 -0
  90. package/dist/lib/esm/components/embeddable-markdown-editor-component.mjs +293 -0
  91. package/dist/lib/esm/components/index.d.mts +2 -0
  92. package/dist/lib/esm/components/index.mjs +5 -1
  93. package/dist/lib/esm/components/plugin-gate-component.mjs +6 -3
  94. package/dist/lib/esm/components/reconfigurable-editor-extension-component.d.mts +96 -0
  95. package/dist/lib/esm/components/reconfigurable-editor-extension-component.mjs +112 -0
  96. package/dist/lib/esm/components/rename-delete-handler-component.mjs +105 -2
  97. package/dist/lib/esm/desktop-bulk-operation-git.d.mts +21 -1
  98. package/dist/lib/esm/desktop-bulk-operation-git.mjs +38 -13
  99. package/dist/lib/esm/desktop-operating-system.d.mts +15 -0
  100. package/dist/lib/esm/desktop-operating-system.mjs +16 -0
  101. package/dist/lib/esm/generated-during-build.mjs +1 -1
  102. package/dist/lib/esm/i18n/locales/en.d.mts +1 -0
  103. package/dist/lib/esm/i18n/locales/en.mjs +2 -1
  104. package/dist/lib/esm/i18n/locales/translations-map.d.mts +1 -0
  105. package/dist/lib/esm/index.d.mts +5 -0
  106. package/dist/lib/esm/index.mjs +11 -1
  107. package/dist/lib/esm/menu.d.mts +65 -0
  108. package/dist/lib/esm/menu.mjs +30 -0
  109. package/dist/lib/esm/mobile-app-info.d.mts +32 -0
  110. package/dist/lib/esm/mobile-app-info.mjs +84 -0
  111. package/dist/lib/esm/modals/modal.d.mts +4 -0
  112. package/dist/lib/esm/modals/modal.mjs +8 -5
  113. package/dist/lib/esm/obsidian-settings.mjs +6 -3
  114. package/dist/lib/esm/plugin/plugin.d.mts +2 -0
  115. package/dist/lib/esm/plugin/plugin.mjs +5 -2
  116. package/dist/lib/esm/settings-modal.d.mts +33 -0
  117. package/dist/lib/esm/settings-modal.mjs +15 -0
  118. package/package.json +9 -8
@@ -0,0 +1,167 @@
1
+ /*
2
+ THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
3
+ if you want to view the source, please visit the github repository of this plugin
4
+ */
5
+ (function () {
6
+ function ensureBrowserProcess() {
7
+ const browserProcess = {
8
+ browser: true,
9
+ cwd() {
10
+ return "/";
11
+ },
12
+ env: {},
13
+ platform: "android"
14
+ };
15
+ const existingProcess = globalThis.process;
16
+ if (!existingProcess) {
17
+ globalThis.process = browserProcess;
18
+ return;
19
+ }
20
+ if (existingProcess.versions?.node) {
21
+ return;
22
+ }
23
+ const existingProcessRecord = existingProcess;
24
+ for (const [key, value] of Object.entries(browserProcess)) {
25
+ existingProcessRecord[key] ??= value;
26
+ }
27
+ existingProcessRecord["browser"] = true;
28
+ }
29
+
30
+ ensureBrowserProcess();
31
+ })();
32
+ (function patchObsidianRequire() {
33
+ const originalRequire = require;
34
+ if (!originalRequire || originalRequire.__isPatched) {
35
+ return;
36
+ }
37
+ require = Object.assign(
38
+ (id) => requirePatched(id),
39
+ originalRequire,
40
+ {
41
+ __isPatched: true
42
+ }
43
+ );
44
+ function extractDefault($module) {
45
+ return $module && $module.__esModule && "default" in $module ? $module.default : $module;
46
+ }
47
+ const OBSIDIAN_BUILT_IN_MODULE_NAMES = /* @__PURE__ */ new Set([
48
+ "@codemirror/autocomplete",
49
+ "@codemirror/collab",
50
+ "@codemirror/commands",
51
+ "@codemirror/language",
52
+ "@codemirror/lint",
53
+ "@codemirror/search",
54
+ "@codemirror/state",
55
+ "@codemirror/text",
56
+ "@codemirror/view",
57
+ "@lezer/common",
58
+ "@lezer/highlight",
59
+ "@lezer/lr",
60
+ "obsidian"
61
+ ]);
62
+ const DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES = /* @__PURE__ */ new Set([
63
+ "@codemirror/closebrackets",
64
+ "@codemirror/comment",
65
+ "@codemirror/fold",
66
+ "@codemirror/gutter",
67
+ "@codemirror/highlight",
68
+ "@codemirror/history",
69
+ "@codemirror/matchbrackets",
70
+ "@codemirror/panel",
71
+ "@codemirror/rangeset",
72
+ "@codemirror/rectangular-selection",
73
+ "@codemirror/stream-parser",
74
+ "@codemirror/tooltip"
75
+ ]);
76
+ function requirePatched(id) {
77
+ if (OBSIDIAN_BUILT_IN_MODULE_NAMES.has(id) || DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES.has(id)) {
78
+ return originalRequire?.(id);
79
+ }
80
+ const app = globalThis.app;
81
+ if (app?.isMobile) {
82
+ if (id === "process" || id === "node:process") {
83
+ console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Fake process object is returned instead.`);
84
+ return process;
85
+ }
86
+ } else {
87
+ const $module = originalRequire?.(id);
88
+ if ($module) {
89
+ return extractDefault($module);
90
+ }
91
+ }
92
+ console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Empty object is returned instead.`);
93
+ return {};
94
+ }
95
+ })();
96
+
97
+ "use strict";
98
+ var __defProp = Object.defineProperty;
99
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
100
+ var __getOwnPropNames = Object.getOwnPropertyNames;
101
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
102
+ var __export = (target, all) => {
103
+ for (var name in all)
104
+ __defProp(target, name, { get: all[name], enumerable: true });
105
+ };
106
+ var __copyProps = (to, from, except, desc) => {
107
+ if (from && typeof from === "object" || typeof from === "function") {
108
+ for (let key of __getOwnPropNames(from))
109
+ if (!__hasOwnProp.call(to, key) && key !== except)
110
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
111
+ }
112
+ return to;
113
+ };
114
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
115
+ var mobile_app_info_exports = {};
116
+ __export(mobile_app_info_exports, {
117
+ getMobileAppInfo: () => getMobileAppInfo
118
+ });
119
+ module.exports = __toCommonJS(mobile_app_info_exports);
120
+ var import_type_guards = require('@mnaoumov/typescript-lib/type-guards');
121
+ const isAppInfo = (0, import_type_guards.objectTypeGuard)({
122
+ build: (0, import_type_guards.optionalTypeGuard)(import_type_guards.isString),
123
+ version: import_type_guards.isString
124
+ });
125
+ const isCapacitorBridge = (0, import_type_guards.objectTypeGuard)({
126
+ nativePromise: (0, import_type_guards.functionTypeGuard)()
127
+ });
128
+ const isDeviceInfo = (0, import_type_guards.objectTypeGuard)({
129
+ manufacturer: (0, import_type_guards.optionalTypeGuard)(import_type_guards.isString),
130
+ model: (0, import_type_guards.optionalTypeGuard)(import_type_guards.isString),
131
+ osVersion: import_type_guards.isString,
132
+ platform: import_type_guards.isString
133
+ });
134
+ async function getMobileAppInfo() {
135
+ const capacitor = window.Capacitor;
136
+ if (!isCapacitorBridge(capacitor)) {
137
+ return null;
138
+ }
139
+ const [appInfo, deviceInfo] = await Promise.all([
140
+ callGetInfo(capacitor, "App"),
141
+ callGetInfo(capacitor, "Device")
142
+ ]);
143
+ return {
144
+ installerVersion: isAppInfo(appInfo) ? formatAppInfo(appInfo) : null,
145
+ operatingSystem: isDeviceInfo(deviceInfo) ? formatDeviceInfo(deviceInfo) : null
146
+ };
147
+ }
148
+ async function callGetInfo(capacitor, pluginName) {
149
+ try {
150
+ return await capacitor.nativePromise(pluginName, "getInfo");
151
+ } catch {
152
+ return null;
153
+ }
154
+ }
155
+ function formatAppInfo(appInfo) {
156
+ return appInfo.build ? `${appInfo.version} (${appInfo.build})` : appInfo.version;
157
+ }
158
+ function formatDeviceInfo(deviceInfo) {
159
+ const operatingSystem = `${deviceInfo.platform} ${deviceInfo.osVersion}`;
160
+ const model = [deviceInfo.manufacturer, deviceInfo.model].filter(Boolean).join(" ");
161
+ return model ? `${operatingSystem} (${model})` : operatingSystem;
162
+ }
163
+ // Annotate the CommonJS export names for ESM import in node:
164
+ 0 && (module.exports = {
165
+ getMobileAppInfo
166
+ });
167
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9tb2JpbGUtYXBwLWluZm8udHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFJlYWRzIHRoZSBPYnNpZGlhbiBtb2JpbGUgYXBwJ3MgYnVpbGQgYW5kIHRoZSBkZXZpY2UncyBvcGVyYXRpbmcgc3lzdGVtLCBmb3IgYSBidWcgcmVwb3J0LlxuICpcbiAqIE1vYmlsZSBvbmx5OiBpdCBjYWxscyB0aGUgQ2FwYWNpdG9yIGJyaWRnZSdzIGBuYXRpdmVQcm9taXNlYCwgd2hpY2ggT2JzaWRpYW4ncyBvd24gY29kZSB1c2VzIGJ1dCB3aGljaFxuICogbm8gcHVibGljIHR5cGluZyBkZWNsYXJlcywgc28gdGhlIHNoYXBlcyBhcmUgZGVjbGFyZWQgaGVyZSwgbmFycm93ZWQgdG8gdGhlIG1lbWJlcnMgcmVhZCwgYW5kIGNoZWNrZWRcbiAqIGF0IHJ1biB0aW1lLiBPbiBhbnkgb3RoZXIgcnVudGltZSB7QGxpbmsgZ2V0TW9iaWxlQXBwSW5mb30gcmVzb2x2ZXMgdG8gYG51bGxgLiBSZWFjaCBpdCB0aHJvdWdoXG4gKiB7QGxpbmsgLi9idWctcmVwb3J0LnRzIHwgYnVnLXJlcG9ydH0uXG4gKi9cblxuaW1wb3J0IHtcbiAgZnVuY3Rpb25UeXBlR3VhcmQsXG4gIGlzU3RyaW5nLFxuICBvYmplY3RUeXBlR3VhcmQsXG4gIG9wdGlvbmFsVHlwZUd1YXJkXG59IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi90eXBlLWd1YXJkcyc7XG5cbi8qKlxuICogV2hhdCB0aGUgbW9iaWxlIGFwcCBhbmQgaXRzIGRldmljZSByZXBvcnQgYWJvdXQgdGhlbXNlbHZlcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNb2JpbGVBcHBJbmZvIHtcbiAgLyoqXG4gICAqIFRoZSBpbnN0YWxsZWQgYXBwJ3MgdmVyc2lvbiBhbmQgYnVpbGQsIHN1Y2ggYXMgYDEuMTUuMCAoMjkxKWAsIG9yIGBudWxsYCB3aGVuIHRoZSBhcHAgZGlkIG5vdCBzYXkuXG4gICAqL1xuICByZWFkb25seSBpbnN0YWxsZXJWZXJzaW9uOiBudWxsIHwgc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZGV2aWNlJ3Mgb3BlcmF0aW5nIHN5c3RlbSwgdmVyc2lvbiBhbmQgbW9kZWwsIHN1Y2ggYXMgYGFuZHJvaWQgMTUgKEdvb2dsZSBQaXhlbCA4KWAsIG9yIGBudWxsYFxuICAgKiB3aGVuIHRoZSBkZXZpY2UgZGlkIG5vdCBzYXkuXG4gICAqL1xuICByZWFkb25seSBvcGVyYXRpbmdTeXN0ZW06IG51bGwgfCBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBBcHBJbmZvIHtcbiAgcmVhZG9ubHkgYnVpbGQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHJlYWRvbmx5IHZlcnNpb246IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIENhcGFjaXRvckJyaWRnZSB7XG4gIHJlYWRvbmx5IG5hdGl2ZVByb21pc2U6IChwbHVnaW5OYW1lOiBzdHJpbmcsIG1ldGhvZE5hbWU6IHN0cmluZykgPT4gUHJvbWlzZTx1bmtub3duPjtcbn1cblxuaW50ZXJmYWNlIERldmljZUluZm8ge1xuICByZWFkb25seSBtYW51ZmFjdHVyZXI/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHJlYWRvbmx5IG1vZGVsPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICByZWFkb25seSBvc1ZlcnNpb246IHN0cmluZztcbiAgcmVhZG9ubHkgcGxhdGZvcm06IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIFdpbmRvd1dpdGhDYXBhY2l0b3Ige1xuICByZWFkb25seSBDYXBhY2l0b3I/OiB1bmtub3duO1xufVxuXG5jb25zdCBpc0FwcEluZm8gPSBvYmplY3RUeXBlR3VhcmQ8QXBwSW5mbz4oe1xuICBidWlsZDogb3B0aW9uYWxUeXBlR3VhcmQoaXNTdHJpbmcpLFxuICB2ZXJzaW9uOiBpc1N0cmluZ1xufSk7XG5cbmNvbnN0IGlzQ2FwYWNpdG9yQnJpZGdlID0gb2JqZWN0VHlwZUd1YXJkPENhcGFjaXRvckJyaWRnZT4oe1xuICBuYXRpdmVQcm9taXNlOiBmdW5jdGlvblR5cGVHdWFyZDxDYXBhY2l0b3JCcmlkZ2VbJ25hdGl2ZVByb21pc2UnXT4oKVxufSk7XG5cbmNvbnN0IGlzRGV2aWNlSW5mbyA9IG9iamVjdFR5cGVHdWFyZDxEZXZpY2VJbmZvPih7XG4gIG1hbnVmYWN0dXJlcjogb3B0aW9uYWxUeXBlR3VhcmQoaXNTdHJpbmcpLFxuICBtb2RlbDogb3B0aW9uYWxUeXBlR3VhcmQoaXNTdHJpbmcpLFxuICBvc1ZlcnNpb246IGlzU3RyaW5nLFxuICBwbGF0Zm9ybTogaXNTdHJpbmdcbn0pO1xuXG4vKipcbiAqIEdldHMgd2hhdCB0aGUgbW9iaWxlIGFwcCBhbmQgaXRzIGRldmljZSByZXBvcnQgYWJvdXQgdGhlbXNlbHZlcy5cbiAqXG4gKiBAcmV0dXJucyBUaGUgYXBwJ3MgdmVyc2lvbiBhbmQgdGhlIGRldmljZSdzIG9wZXJhdGluZyBzeXN0ZW0sIG9yIGBudWxsYCB3aGVyZSB0aGVyZSBpcyBubyBDYXBhY2l0b3JcbiAqICAgYnJpZGdlLiBFYWNoIGZpZWxkIGlzIGBudWxsYCB3aGVuIGl0cyBjYWxsIGZhaWxzIG9yIGFuc3dlcnMgaW4gYW4gdW5leHBlY3RlZCBzaGFwZS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldE1vYmlsZUFwcEluZm8oKTogUHJvbWlzZTxNb2JpbGVBcHBJbmZvIHwgbnVsbD4ge1xuICBjb25zdCBjYXBhY2l0b3IgPSAod2luZG93IGFzIFdpbmRvd1dpdGhDYXBhY2l0b3IpLkNhcGFjaXRvcjtcbiAgaWYgKCFpc0NhcGFjaXRvckJyaWRnZShjYXBhY2l0b3IpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBbYXBwSW5mbywgZGV2aWNlSW5mb10gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgY2FsbEdldEluZm8oY2FwYWNpdG9yLCAnQXBwJyksXG4gICAgY2FsbEdldEluZm8oY2FwYWNpdG9yLCAnRGV2aWNlJylcbiAgXSk7XG5cbiAgcmV0dXJuIHtcbiAgICBpbnN0YWxsZXJWZXJzaW9uOiBpc0FwcEluZm8oYXBwSW5mbykgPyBmb3JtYXRBcHBJbmZvKGFwcEluZm8pIDogbnVsbCxcbiAgICBvcGVyYXRpbmdTeXN0ZW06IGlzRGV2aWNlSW5mbyhkZXZpY2VJbmZvKSA/IGZvcm1hdERldmljZUluZm8oZGV2aWNlSW5mbykgOiBudWxsXG4gIH07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNhbGxHZXRJbmZvKGNhcGFjaXRvcjogQ2FwYWNpdG9yQnJpZGdlLCBwbHVnaW5OYW1lOiBzdHJpbmcpOiBQcm9taXNlPHVua25vd24+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgY2FwYWNpdG9yLm5hdGl2ZVByb21pc2UocGx1Z2luTmFtZSwgJ2dldEluZm8nKTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuZnVuY3Rpb24gZm9ybWF0QXBwSW5mbyhhcHBJbmZvOiBBcHBJbmZvKTogc3RyaW5nIHtcbiAgcmV0dXJuIGFwcEluZm8uYnVpbGQgPyBgJHthcHBJbmZvLnZlcnNpb259ICgke2FwcEluZm8uYnVpbGR9KWAgOiBhcHBJbmZvLnZlcnNpb247XG59XG5cbmZ1bmN0aW9uIGZvcm1hdERldmljZUluZm8oZGV2aWNlSW5mbzogRGV2aWNlSW5mbyk6IHN0cmluZyB7XG4gIGNvbnN0IG9wZXJhdGluZ1N5c3RlbSA9IGAke2RldmljZUluZm8ucGxhdGZvcm19ICR7ZGV2aWNlSW5mby5vc1ZlcnNpb259YDtcbiAgY29uc3QgbW9kZWwgPSBbZGV2aWNlSW5mby5tYW51ZmFjdHVyZXIsIGRldmljZUluZm8ubW9kZWxdLmZpbHRlcihCb29sZWFuKS5qb2luKCcgJyk7XG4gIHJldHVybiBtb2RlbCA/IGAke29wZXJhdGluZ1N5c3RlbX0gKCR7bW9kZWx9KWAgOiBvcGVyYXRpbmdTeXN0ZW07XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFXQSx5QkFLTztBQXNDUCxNQUFNLGdCQUFZLG9DQUF5QjtBQUFBLEVBQ3pDLFdBQU8sc0NBQWtCLDJCQUFRO0FBQUEsRUFDakMsU0FBUztBQUNYLENBQUM7QUFFRCxNQUFNLHdCQUFvQixvQ0FBaUM7QUFBQSxFQUN6RCxtQkFBZSxzQ0FBb0Q7QUFDckUsQ0FBQztBQUVELE1BQU0sbUJBQWUsb0NBQTRCO0FBQUEsRUFDL0Msa0JBQWMsc0NBQWtCLDJCQUFRO0FBQUEsRUFDeEMsV0FBTyxzQ0FBa0IsMkJBQVE7QUFBQSxFQUNqQyxXQUFXO0FBQUEsRUFDWCxVQUFVO0FBQ1osQ0FBQztBQVFELGVBQXNCLG1CQUFrRDtBQUN0RSxRQUFNLFlBQWEsT0FBK0I7QUFDbEQsTUFBSSxDQUFDLGtCQUFrQixTQUFTLEdBQUc7QUFDakMsV0FBTztBQUFBLEVBQ1Q7QUFFQSxRQUFNLENBQUMsU0FBUyxVQUFVLElBQUksTUFBTSxRQUFRLElBQUk7QUFBQSxJQUM5QyxZQUFZLFdBQVcsS0FBSztBQUFBLElBQzVCLFlBQVksV0FBVyxRQUFRO0FBQUEsRUFDakMsQ0FBQztBQUVELFNBQU87QUFBQSxJQUNMLGtCQUFrQixVQUFVLE9BQU8sSUFBSSxjQUFjLE9BQU8sSUFBSTtBQUFBLElBQ2hFLGlCQUFpQixhQUFhLFVBQVUsSUFBSSxpQkFBaUIsVUFBVSxJQUFJO0FBQUEsRUFDN0U7QUFDRjtBQUVBLGVBQWUsWUFBWSxXQUE0QixZQUFzQztBQUMzRixNQUFJO0FBQ0YsV0FBTyxNQUFNLFVBQVUsY0FBYyxZQUFZLFNBQVM7QUFBQSxFQUM1RCxRQUFRO0FBQ04sV0FBTztBQUFBLEVBQ1Q7QUFDRjtBQUVBLFNBQVMsY0FBYyxTQUEwQjtBQUMvQyxTQUFPLFFBQVEsUUFBUSxHQUFHLFFBQVEsT0FBTyxLQUFLLFFBQVEsS0FBSyxNQUFNLFFBQVE7QUFDM0U7QUFFQSxTQUFTLGlCQUFpQixZQUFnQztBQUN4RCxRQUFNLGtCQUFrQixHQUFHLFdBQVcsUUFBUSxJQUFJLFdBQVcsU0FBUztBQUN0RSxRQUFNLFFBQVEsQ0FBQyxXQUFXLGNBQWMsV0FBVyxLQUFLLEVBQUUsT0FBTyxPQUFPLEVBQUUsS0FBSyxHQUFHO0FBQ2xGLFNBQU8sUUFBUSxHQUFHLGVBQWUsS0FBSyxLQUFLLE1BQU07QUFDbkQ7IiwibmFtZXMiOltdfQ==
@@ -0,0 +1,32 @@
1
+ /// <reference path="./library-references.d.cts" />
2
+ /**
3
+ * @file
4
+ *
5
+ * Reads the Obsidian mobile app's build and the device's operating system, for a bug report.
6
+ *
7
+ * Mobile only: it calls the Capacitor bridge's `nativePromise`, which Obsidian's own code uses but which
8
+ * no public typing declares, so the shapes are declared here, narrowed to the members read, and checked
9
+ * at run time. On any other runtime {@link getMobileAppInfo} resolves to `null`. Reach it through
10
+ * {@link ./bug-report.ts | bug-report}.
11
+ */
12
+ /**
13
+ * What the mobile app and its device report about themselves.
14
+ */
15
+ export interface MobileAppInfo {
16
+ /**
17
+ * The installed app's version and build, such as `1.15.0 (291)`, or `null` when the app did not say.
18
+ */
19
+ readonly installerVersion: null | string;
20
+ /**
21
+ * The device's operating system, version and model, such as `android 15 (Google Pixel 8)`, or `null`
22
+ * when the device did not say.
23
+ */
24
+ readonly operatingSystem: null | string;
25
+ }
26
+ /**
27
+ * Gets what the mobile app and its device report about themselves.
28
+ *
29
+ * @returns The app's version and the device's operating system, or `null` where there is no Capacitor
30
+ * bridge. Each field is `null` when its call fails or answers in an unexpected shape.
31
+ */
32
+ export declare function getMobileAppInfo(): Promise<MobileAppInfo | null>;
@@ -119,6 +119,7 @@ __export(modal_exports, {
119
119
  });
120
120
  module.exports = __toCommonJS(modal_exports);
121
121
  var import_obsidian = require('obsidian');
122
+ var import_bulk_operation_progress = require('../bulk-operation-progress.cjs');
122
123
  var import_plugin_context = require('../plugin/plugin-context.cjs');
123
124
  class ModalBase extends import_obsidian.Modal {
124
125
  /**
@@ -145,14 +146,16 @@ class ModalBase extends import_obsidian.Modal {
145
146
  }
146
147
  }
147
148
  async function showModal(modalCreator) {
148
- return await new Promise((resolve) => {
149
- const modal = modalCreator(resolve);
150
- modal.open();
151
- });
149
+ return await (0, import_bulk_operation_progress.holdBulkOperationWhile)(
150
+ new Promise((resolve) => {
151
+ const modal = modalCreator(resolve);
152
+ modal.open();
153
+ })
154
+ );
152
155
  }
153
156
  // Annotate the CommonJS export names for ESM import in node:
154
157
  0 && (module.exports = {
155
158
  ModalBase,
156
159
  showModal
157
160
  });
158
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9tb2RhbHMvbW9kYWwudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFRoaXMgbW9kdWxlIGV4cG9ydHMgYSBiYXNlIGNsYXNzIGZvciBkaXNwbGF5aW5nIG1vZGFscyBpbiBPYnNpZGlhbi5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IFByb21pc2VSZXNvbHZlIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2FzeW5jJztcbmltcG9ydCB0eXBlIHsgQXBwIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgeyBNb2RhbCB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHsgYWRkUGx1Z2luQ3NzQ2xhc3NlcyB9IGZyb20gJy4uL3BsdWdpbi9wbHVnaW4tY29udGV4dC50cyc7XG5cbi8qKlxuICogVGhlIHBhcmFtZXRlcnMgZm9yIGNvbnN0cnVjdGluZyBhIHtAbGluayBNb2RhbEJhc2V9LlxuICpcbiAqIEB0eXBlUGFyYW0gVmFsdWUgLSBUaGUgdHlwZSBvZiB0aGUgdmFsdWUgcmVzb2x2ZWQgYnkgdGhlIG1vZGFsLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1vZGFsQmFzZUNvbnN0cnVjdG9yUGFyYW1zPFZhbHVlPiBleHRlbmRzIE1vZGFsUGFyYW1zQmFzZSB7XG4gIC8qKlxuICAgKiBBIGZ1bmN0aW9uIHRvIHJlc29sdmUgdGhlIHZhbHVlIG9mIHRoZSBtb2RhbC5cbiAgICovXG4gIHJlYWRvbmx5IHByb21pc2VSZXNvbHZlOiBQcm9taXNlUmVzb2x2ZTxWYWx1ZT47XG59XG5cbi8qKlxuICogQmFzZSBvcHRpb25zIGZvciBhIG1vZGFsLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1vZGFsUGFyYW1zQmFzZSB7XG4gIC8qKlxuICAgKiBBbiBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gICAqL1xuICByZWFkb25seSBhcHA6IEFwcDtcblxuICAvKipcbiAgICogQSBDU1MgY2xhc3MgdG8gYXBwbHkgdG8gdGhlIG1vZGFsLlxuICAgKi9cbiAgcmVhZG9ubHkgY3NzQ2xhc3Nlcz86IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIEEgYmFzZSBjbGFzcyBmb3IgZGlzcGxheWluZyBtb2RhbHMgaW4gT2JzaWRpYW4uXG4gKlxuICogQHR5cGVQYXJhbSBWYWx1ZSAtIFRoZSB0eXBlIG9mIHRoZSB2YWx1ZSByZXNvbHZlZCBieSB0aGUgbW9kYWwuXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBNb2RhbEJhc2U8VmFsdWU+IGV4dGVuZHMgTW9kYWwge1xuICAvKipcbiAgICogQSBmdW5jdGlvbiB0byByZXNvbHZlIHRoZSB2YWx1ZSBvZiB0aGUgbW9kYWwuXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgcHJvbWlzZVJlc29sdmU6IFByb21pc2VSZXNvbHZlPFZhbHVlPjtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBtb2RhbC5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBvcHRpb25zLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHBhcmFtczogTW9kYWxCYXNlQ29uc3RydWN0b3JQYXJhbXM8VmFsdWU+KSB7XG4gICAgc3VwZXIocGFyYW1zLmFwcCk7XG4gICAgdGhpcy5wcm9taXNlUmVzb2x2ZSA9IHBhcmFtcy5wcm9taXNlUmVzb2x2ZTtcbiAgICB0aGlzLmFkZENzc0NsYXNzZXMocGFyYW1zLmNzc0NsYXNzZXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgQ1NTIGNsYXNzZXMgdG8gdGhlIG1vZGFsJ3MgY29udGFpbmVyIGVsZW1lbnQuXG4gICAqXG4gICAqIEBwYXJhbSBjc3NDbGFzc2VzIC0gVGhlIENTUyBjbGFzc2VzIHRvIGFkZC5cbiAgICovXG4gIHByb3RlY3RlZCBhZGRDc3NDbGFzc2VzKGNzc0NsYXNzZXM/OiBzdHJpbmcgfCBzdHJpbmdbXSk6IHZvaWQge1xuICAgIGFkZFBsdWdpbkNzc0NsYXNzZXModGhpcy5jb250YWluZXJFbCwgY3NzQ2xhc3Nlcyk7XG4gIH1cbn1cblxuLyoqXG4gKiBEaXNwbGF5cyBhIG1vZGFsIGluIE9ic2lkaWFuLlxuICpcbiAqIEB0eXBlUGFyYW0gVmFsdWUgLSBUaGUgdHlwZSBvZiB0aGUgdmFsdWUgcmVzb2x2ZWQgYnkgdGhlIG1vZGFsLlxuICogQHBhcmFtIG1vZGFsQ3JlYXRvciAtIEEgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgbW9kYWwuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIG1vZGFsIGlzIGNsb3NlZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNob3dNb2RhbDxWYWx1ZT4obW9kYWxDcmVhdG9yOiAocmVzb2x2ZTogUHJvbWlzZVJlc29sdmU8VmFsdWU+KSA9PiBNb2RhbCk6IFByb21pc2U8VmFsdWU+IHtcbiAgcmV0dXJuIGF3YWl0IG5ldyBQcm9taXNlPFZhbHVlPigocmVzb2x2ZSkgPT4ge1xuICAgIGNvbnN0IG1vZGFsID0gbW9kYWxDcmVhdG9yKHJlc29sdmUpO1xuICAgIG1vZGFsLm9wZW4oKTtcbiAgfSk7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQVNBLHNCQUFzQjtBQUV0Qiw0QkFBb0M7QUFrQzdCLE1BQWUsa0JBQXlCLHNCQUFNO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFJaEM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFPWixZQUFZLFFBQTJDO0FBQzVELFVBQU0sT0FBTyxHQUFHO0FBQ2hCLFNBQUssaUJBQWlCLE9BQU87QUFDN0IsU0FBSyxjQUFjLE9BQU8sVUFBVTtBQUFBLEVBQ3RDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBT1UsY0FBYyxZQUFzQztBQUM1RCxtREFBb0IsS0FBSyxhQUFhLFVBQVU7QUFBQSxFQUNsRDtBQUNGO0FBU0EsZUFBc0IsVUFBaUIsY0FBeUU7QUFDOUcsU0FBTyxNQUFNLElBQUksUUFBZSxDQUFDLFlBQVk7QUFDM0MsVUFBTSxRQUFRLGFBQWEsT0FBTztBQUNsQyxVQUFNLEtBQUs7QUFBQSxFQUNiLENBQUM7QUFDSDsiLCJuYW1lcyI6W119
161
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9tb2RhbHMvbW9kYWwudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFRoaXMgbW9kdWxlIGV4cG9ydHMgYSBiYXNlIGNsYXNzIGZvciBkaXNwbGF5aW5nIG1vZGFscyBpbiBPYnNpZGlhbi5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IFByb21pc2VSZXNvbHZlIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2FzeW5jJztcbmltcG9ydCB0eXBlIHsgQXBwIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgeyBNb2RhbCB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHsgaG9sZEJ1bGtPcGVyYXRpb25XaGlsZSB9IGZyb20gJy4uL2J1bGstb3BlcmF0aW9uLXByb2dyZXNzLnRzJztcbmltcG9ydCB7IGFkZFBsdWdpbkNzc0NsYXNzZXMgfSBmcm9tICcuLi9wbHVnaW4vcGx1Z2luLWNvbnRleHQudHMnO1xuXG4vKipcbiAqIFRoZSBwYXJhbWV0ZXJzIGZvciBjb25zdHJ1Y3RpbmcgYSB7QGxpbmsgTW9kYWxCYXNlfS5cbiAqXG4gKiBAdHlwZVBhcmFtIFZhbHVlIC0gVGhlIHR5cGUgb2YgdGhlIHZhbHVlIHJlc29sdmVkIGJ5IHRoZSBtb2RhbC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNb2RhbEJhc2VDb25zdHJ1Y3RvclBhcmFtczxWYWx1ZT4gZXh0ZW5kcyBNb2RhbFBhcmFtc0Jhc2Uge1xuICAvKipcbiAgICogQSBmdW5jdGlvbiB0byByZXNvbHZlIHRoZSB2YWx1ZSBvZiB0aGUgbW9kYWwuXG4gICAqL1xuICByZWFkb25seSBwcm9taXNlUmVzb2x2ZTogUHJvbWlzZVJlc29sdmU8VmFsdWU+O1xufVxuXG4vKipcbiAqIEJhc2Ugb3B0aW9ucyBmb3IgYSBtb2RhbC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNb2RhbFBhcmFtc0Jhc2Uge1xuICAvKipcbiAgICogQW4gT2JzaWRpYW4gYXBwIGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBwOiBBcHA7XG5cbiAgLyoqXG4gICAqIEEgQ1NTIGNsYXNzIHRvIGFwcGx5IHRvIHRoZSBtb2RhbC5cbiAgICovXG4gIHJlYWRvbmx5IGNzc0NsYXNzZXM/OiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBBIGJhc2UgY2xhc3MgZm9yIGRpc3BsYXlpbmcgbW9kYWxzIGluIE9ic2lkaWFuLlxuICpcbiAqIEB0eXBlUGFyYW0gVmFsdWUgLSBUaGUgdHlwZSBvZiB0aGUgdmFsdWUgcmVzb2x2ZWQgYnkgdGhlIG1vZGFsLlxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgTW9kYWxCYXNlPFZhbHVlPiBleHRlbmRzIE1vZGFsIHtcbiAgLyoqXG4gICAqIEEgZnVuY3Rpb24gdG8gcmVzb2x2ZSB0aGUgdmFsdWUgb2YgdGhlIG1vZGFsLlxuICAgKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHByb21pc2VSZXNvbHZlOiBQcm9taXNlUmVzb2x2ZTxWYWx1ZT47XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgbW9kYWwuXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgb3B0aW9ucy5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihwYXJhbXM6IE1vZGFsQmFzZUNvbnN0cnVjdG9yUGFyYW1zPFZhbHVlPikge1xuICAgIHN1cGVyKHBhcmFtcy5hcHApO1xuICAgIHRoaXMucHJvbWlzZVJlc29sdmUgPSBwYXJhbXMucHJvbWlzZVJlc29sdmU7XG4gICAgdGhpcy5hZGRDc3NDbGFzc2VzKHBhcmFtcy5jc3NDbGFzc2VzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIENTUyBjbGFzc2VzIHRvIHRoZSBtb2RhbCdzIGNvbnRhaW5lciBlbGVtZW50LlxuICAgKlxuICAgKiBAcGFyYW0gY3NzQ2xhc3NlcyAtIFRoZSBDU1MgY2xhc3NlcyB0byBhZGQuXG4gICAqL1xuICBwcm90ZWN0ZWQgYWRkQ3NzQ2xhc3Nlcyhjc3NDbGFzc2VzPzogc3RyaW5nIHwgc3RyaW5nW10pOiB2b2lkIHtcbiAgICBhZGRQbHVnaW5Dc3NDbGFzc2VzKHRoaXMuY29udGFpbmVyRWwsIGNzc0NsYXNzZXMpO1xuICB9XG59XG5cbi8qKlxuICogRGlzcGxheXMgYSBtb2RhbCBpbiBPYnNpZGlhbi5cbiAqXG4gKiBAdHlwZVBhcmFtIFZhbHVlIC0gVGhlIHR5cGUgb2YgdGhlIHZhbHVlIHJlc29sdmVkIGJ5IHRoZSBtb2RhbC5cbiAqIEBwYXJhbSBtb2RhbENyZWF0b3IgLSBBIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIG1vZGFsLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBtb2RhbCBpcyBjbG9zZWQuXG4gKlxuICogQHJlbWFya3NcbiAqIFdoaWxlIHRoZSBtb2RhbCBpcyBvcGVuLCBhIGJ1bGsgb3BlcmF0aW9uIHRoYXQgYXdhaXRzIGl0IGtlZXBzIGl0cyBsZWFzZSBsb2NrIGZyZXNoLCB0aHJvdWdoXG4gKiBgaG9sZEJ1bGtPcGVyYXRpb25XaGlsZWAuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzaG93TW9kYWw8VmFsdWU+KG1vZGFsQ3JlYXRvcjogKHJlc29sdmU6IFByb21pc2VSZXNvbHZlPFZhbHVlPikgPT4gTW9kYWwpOiBQcm9taXNlPFZhbHVlPiB7XG4gIHJldHVybiBhd2FpdCBob2xkQnVsa09wZXJhdGlvbldoaWxlKFxuICAgIG5ldyBQcm9taXNlPFZhbHVlPigocmVzb2x2ZSkgPT4ge1xuICAgICAgY29uc3QgbW9kYWwgPSBtb2RhbENyZWF0b3IocmVzb2x2ZSk7XG4gICAgICBtb2RhbC5vcGVuKCk7XG4gICAgfSlcbiAgKTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBU0Esc0JBQXNCO0FBRXRCLHFDQUF1QztBQUN2Qyw0QkFBb0M7QUFrQzdCLE1BQWUsa0JBQXlCLHNCQUFNO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFJaEM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFPWixZQUFZLFFBQTJDO0FBQzVELFVBQU0sT0FBTyxHQUFHO0FBQ2hCLFNBQUssaUJBQWlCLE9BQU87QUFDN0IsU0FBSyxjQUFjLE9BQU8sVUFBVTtBQUFBLEVBQ3RDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBT1UsY0FBYyxZQUFzQztBQUM1RCxtREFBb0IsS0FBSyxhQUFhLFVBQVU7QUFBQSxFQUNsRDtBQUNGO0FBYUEsZUFBc0IsVUFBaUIsY0FBeUU7QUFDOUcsU0FBTyxVQUFNO0FBQUEsSUFDWCxJQUFJLFFBQWUsQ0FBQyxZQUFZO0FBQzlCLFlBQU0sUUFBUSxhQUFhLE9BQU87QUFDbEMsWUFBTSxLQUFLO0FBQUEsSUFDYixDQUFDO0FBQUEsRUFDSDtBQUNGOyIsIm5hbWVzIjpbXX0=
@@ -60,5 +60,9 @@ export declare abstract class ModalBase<Value> extends Modal {
60
60
  * @typeParam Value - The type of the value resolved by the modal.
61
61
  * @param modalCreator - A function that creates a modal.
62
62
  * @returns A {@link Promise} that resolves when the modal is closed.
63
+ *
64
+ * @remarks
65
+ * While the modal is open, a bulk operation that awaits it keeps its lease lock fresh, through
66
+ * `holdBulkOperationWhile`.
63
67
  */
64
68
  export declare function showModal<Value>(modalCreator: (resolve: PromiseResolve<Value>) => Modal): Promise<Value>;
@@ -129,7 +129,7 @@ var SpellcheckMode = /* @__PURE__ */ ((SpellcheckMode2) => {
129
129
  return SpellcheckMode2;
130
130
  })(SpellcheckMode || {});
131
131
  function getNewLinkFormat(app) {
132
- return app.vault.getConfig("newLinkFormat");
132
+ return (0, import_type_guards.ensureNonNullable)(app.vault.getConfig("newLinkFormat"));
133
133
  }
134
134
  function isSpellcheckEnabled(app) {
135
135
  return Boolean(app.vault.getConfig("spellcheck"));
@@ -161,4 +161,4 @@ function shouldUseWikilinks(app) {
161
161
  isSpellcheckEnabledForMode,
162
162
  shouldUseWikilinks
163
163
  });
164
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9vYnNpZGlhbi1zZXR0aW5ncy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlXG4gKlxuICogVGhpcyBtb2R1bGUgcHJvdmlkZXMgdXRpbGl0eSBmdW5jdGlvbnMgZm9yIHdvcmtpbmcgd2l0aCBPYnNpZGlhbiBzZXR0aW5ncy5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEFwcCB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHsgYXNzZXJ0TmV2ZXIgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvdHlwZS1ndWFyZHMnO1xuXG4vKipcbiAqIEEgd2F5IGFuIGlucHV0IGRlY2lkZXMgd2hldGhlciBpdCBpcyBzcGVsbC1jaGVja2VkLlxuICpcbiAqIFRoZSBgc3BlbGxjaGVja2AgYXR0cmlidXRlIGlzIHRoZSB3aG9sZSBtZWNoYW5pc206IE9ic2lkaWFuIG5ldmVyIGNhbGxzIEVsZWN0cm9uJ3NcbiAqIGBzZXRTcGVsbENoZWNrZXJFbmFibGVkYCwgaXQgb25seSBzZXRzIHRoZSBhdHRyaWJ1dGUgcGVyIGVsZW1lbnQuIFNvIGBBbHdheXNPbmAgcmVhbGx5IGRvZXMgc3BlbGwtY2hlY2tcbiAqIHdpdGggYEVkaXRvciA+IFNwZWxsY2hlY2tgIG9mZiwgYW5kIHdoYXQgaXQgaW52b2tlcyBpcyBDaHJvbWl1bSdzIGJ1aWx0LWluIGNoZWNrZXIuXG4gKi9cbmV4cG9ydCBlbnVtIFNwZWxsY2hlY2tNb2RlIHtcbiAgLyoqXG4gICAqIEFsd2F5cyBzcGVsbC1jaGVjayB0aGUgaW5wdXQsIHdoYXRldmVyIGBFZGl0b3IgPiBTcGVsbGNoZWNrYCBzYXlzLlxuICAgKi9cbiAgQWx3YXlzT24gPSAnQWx3YXlzT24nLFxuXG4gIC8qKlxuICAgKiBGb2xsb3cgYEVkaXRvciA+IFNwZWxsY2hlY2tgLCB0aGUgd2F5IE9ic2lkaWFuJ3Mgb3duIG5hbWUtZW50cnkgc3VyZmFjZXMgZG8g4oCUIHRoZSBpbmxpbmUgbm90ZSB0aXRsZSxcbiAgICogdGhlIGZpbGUgZXhwbG9yZXIncyBpbmxpbmUgcmVuYW1lLCB0aGUgcHJvcGVydGllcyBmaWVsZHMuXG4gICAqL1xuICBGb2xsb3dPYnNpZGlhblNldHRpbmcgPSAnRm9sbG93T2JzaWRpYW5TZXR0aW5nJyxcblxuICAvKipcbiAgICogTmV2ZXIgc3BlbGwtY2hlY2sgdGhlIGlucHV0LCB3aGF0ZXZlciBgRWRpdG9yID4gU3BlbGxjaGVja2Agc2F5cy5cbiAgICovXG4gIE9mZiA9ICdPZmYnXG59XG5cbi8qKlxuICogQSBmb3JtYXQgb2YgdGhlIG5ldyBsaW5rLlxuICovXG5leHBvcnQgdHlwZSBOZXdMaW5rRm9ybWF0ID0gJ2Fic29sdXRlJyB8ICdyZWxhdGl2ZScgfCAnc2hvcnRlc3QnO1xuXG4vKipcbiAqIFJldHJpZXZlcyB3aGV0aGVyIHRvIHVzZSByZWxhdGl2ZSBsaW5rcyBiYXNlZCBvbiB0aGUgT2JzaWRpYW4gc2V0dGluZ3MuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gKiBAcmV0dXJucyBXaGV0aGVyIHRvIHVzZSByZWxhdGl2ZSBsaW5rcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE5ld0xpbmtGb3JtYXQoYXBwOiBBcHApOiBOZXdMaW5rRm9ybWF0IHtcbiAgcmV0dXJuIGFwcC52YXVsdC5nZXRDb25maWcoJ25ld0xpbmtGb3JtYXQnKSBhcyBOZXdMaW5rRm9ybWF0O1xufVxuXG4vKipcbiAqIFJldHJpZXZlcyB3aGV0aGVyIHRoZSBzcGVsbGNoZWNrIGlzIGVuYWJsZWQgYmFzZWQgb24gdGhlIE9ic2lkaWFuIHNldHRpbmdzLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgT2JzaWRpYW4gYXBwIGluc3RhbmNlLlxuICogQHJldHVybnMgV2hldGhlciB0aGUgc3BlbGxjaGVjayBpcyBlbmFibGVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNTcGVsbGNoZWNrRW5hYmxlZChhcHA6IEFwcCk6IGJvb2xlYW4ge1xuICByZXR1cm4gQm9vbGVhbihhcHAudmF1bHQuZ2V0Q29uZmlnKCdzcGVsbGNoZWNrJykpO1xufVxuXG4vKipcbiAqIFJlc29sdmVzIGEge0BsaW5rIFNwZWxsY2hlY2tNb2RlfSBhZ2FpbnN0IHRoZSBPYnNpZGlhbiBzZXR0aW5ncy5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIE9ic2lkaWFuIGFwcCBpbnN0YW5jZS5cbiAqIEBwYXJhbSBzcGVsbGNoZWNrTW9kZSAtIFRoZSBtb2RlIHRvIHJlc29sdmUuXG4gKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBpbnB1dCBzaG91bGQgYmUgc3BlbGwtY2hlY2tlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzU3BlbGxjaGVja0VuYWJsZWRGb3JNb2RlKGFwcDogQXBwLCBzcGVsbGNoZWNrTW9kZTogU3BlbGxjaGVja01vZGUpOiBib29sZWFuIHtcbiAgc3dpdGNoIChzcGVsbGNoZWNrTW9kZSkge1xuICAgIGNhc2UgU3BlbGxjaGVja01vZGUuQWx3YXlzT246IHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBjYXNlIFNwZWxsY2hlY2tNb2RlLkZvbGxvd09ic2lkaWFuU2V0dGluZzoge1xuICAgICAgcmV0dXJuIGlzU3BlbGxjaGVja0VuYWJsZWQoYXBwKTtcbiAgICB9XG4gICAgY2FzZSBTcGVsbGNoZWNrTW9kZS5PZmY6IHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgZGVmYXVsdDoge1xuICAgICAgYXNzZXJ0TmV2ZXIoc3BlbGxjaGVja01vZGUpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFJldHJpZXZlcyB3aGV0aGVyIHRvIHVzZSB3aWtpbGlua3MgYmFzZWQgb24gdGhlIE9ic2lkaWFuIHNldHRpbmdzLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgT2JzaWRpYW4gYXBwIGluc3RhbmNlLlxuICogQHJldHVybnMgV2hldGhlciB0byB1c2Ugd2lraWxpbmtzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2hvdWxkVXNlV2lraWxpbmtzKGFwcDogQXBwKTogYm9vbGVhbiB7XG4gIHJldHVybiAhYXBwLnZhdWx0LmdldENvbmZpZygndXNlTWFya2Rvd25MaW5rcycpO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFRQSx5QkFBNEI7QUFTckIsSUFBSyxpQkFBTCxrQkFBS0Esb0JBQUw7QUFJTCxFQUFBQSxnQkFBQSxjQUFXO0FBTVgsRUFBQUEsZ0JBQUEsMkJBQXdCO0FBS3hCLEVBQUFBLGdCQUFBLFNBQU07QUFmSSxTQUFBQTtBQUFBLEdBQUE7QUE2QkwsU0FBUyxpQkFBaUIsS0FBeUI7QUFDeEQsU0FBTyxJQUFJLE1BQU0sVUFBVSxlQUFlO0FBQzVDO0FBUU8sU0FBUyxvQkFBb0IsS0FBbUI7QUFDckQsU0FBTyxRQUFRLElBQUksTUFBTSxVQUFVLFlBQVksQ0FBQztBQUNsRDtBQVNPLFNBQVMsMkJBQTJCLEtBQVUsZ0JBQXlDO0FBQzVGLFVBQVEsZ0JBQWdCO0FBQUEsSUFDdEIsS0FBSywyQkFBeUI7QUFDNUIsYUFBTztBQUFBLElBQ1Q7QUFBQSxJQUNBLEtBQUsscURBQXNDO0FBQ3pDLGFBQU8sb0JBQW9CLEdBQUc7QUFBQSxJQUNoQztBQUFBLElBQ0EsS0FBSyxpQkFBb0I7QUFDdkIsYUFBTztBQUFBLElBQ1Q7QUFBQSxJQUNBLFNBQVM7QUFDUCwwQ0FBWSxjQUFjO0FBQUEsSUFDNUI7QUFBQSxFQUNGO0FBQ0Y7QUFRTyxTQUFTLG1CQUFtQixLQUFtQjtBQUNwRCxTQUFPLENBQUMsSUFBSSxNQUFNLFVBQVUsa0JBQWtCO0FBQ2hEOyIsIm5hbWVzIjpbIlNwZWxsY2hlY2tNb2RlIl19
164
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9vYnNpZGlhbi1zZXR0aW5ncy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlXG4gKlxuICogVGhpcyBtb2R1bGUgcHJvdmlkZXMgdXRpbGl0eSBmdW5jdGlvbnMgZm9yIHdvcmtpbmcgd2l0aCBPYnNpZGlhbiBzZXR0aW5ncy5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEFwcCB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHtcbiAgYXNzZXJ0TmV2ZXIsXG4gIGVuc3VyZU5vbk51bGxhYmxlXG59IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi90eXBlLWd1YXJkcyc7XG5cbi8qKlxuICogQSB3YXkgYW4gaW5wdXQgZGVjaWRlcyB3aGV0aGVyIGl0IGlzIHNwZWxsLWNoZWNrZWQuXG4gKlxuICogVGhlIGBzcGVsbGNoZWNrYCBhdHRyaWJ1dGUgaXMgdGhlIHdob2xlIG1lY2hhbmlzbTogT2JzaWRpYW4gbmV2ZXIgY2FsbHMgRWxlY3Ryb24nc1xuICogYHNldFNwZWxsQ2hlY2tlckVuYWJsZWRgLCBpdCBvbmx5IHNldHMgdGhlIGF0dHJpYnV0ZSBwZXIgZWxlbWVudC4gU28gYEFsd2F5c09uYCByZWFsbHkgZG9lcyBzcGVsbC1jaGVja1xuICogd2l0aCBgRWRpdG9yID4gU3BlbGxjaGVja2Agb2ZmLCBhbmQgd2hhdCBpdCBpbnZva2VzIGlzIENocm9taXVtJ3MgYnVpbHQtaW4gY2hlY2tlci5cbiAqL1xuZXhwb3J0IGVudW0gU3BlbGxjaGVja01vZGUge1xuICAvKipcbiAgICogQWx3YXlzIHNwZWxsLWNoZWNrIHRoZSBpbnB1dCwgd2hhdGV2ZXIgYEVkaXRvciA+IFNwZWxsY2hlY2tgIHNheXMuXG4gICAqL1xuICBBbHdheXNPbiA9ICdBbHdheXNPbicsXG5cbiAgLyoqXG4gICAqIEZvbGxvdyBgRWRpdG9yID4gU3BlbGxjaGVja2AsIHRoZSB3YXkgT2JzaWRpYW4ncyBvd24gbmFtZS1lbnRyeSBzdXJmYWNlcyBkbyDigJQgdGhlIGlubGluZSBub3RlIHRpdGxlLFxuICAgKiB0aGUgZmlsZSBleHBsb3JlcidzIGlubGluZSByZW5hbWUsIHRoZSBwcm9wZXJ0aWVzIGZpZWxkcy5cbiAgICovXG4gIEZvbGxvd09ic2lkaWFuU2V0dGluZyA9ICdGb2xsb3dPYnNpZGlhblNldHRpbmcnLFxuXG4gIC8qKlxuICAgKiBOZXZlciBzcGVsbC1jaGVjayB0aGUgaW5wdXQsIHdoYXRldmVyIGBFZGl0b3IgPiBTcGVsbGNoZWNrYCBzYXlzLlxuICAgKi9cbiAgT2ZmID0gJ09mZidcbn1cblxuLyoqXG4gKiBBIGZvcm1hdCBvZiB0aGUgbmV3IGxpbmsuXG4gKi9cbmV4cG9ydCB0eXBlIE5ld0xpbmtGb3JtYXQgPSAnYWJzb2x1dGUnIHwgJ3JlbGF0aXZlJyB8ICdzaG9ydGVzdCc7XG5cbi8qKlxuICogUmV0cmlldmVzIHdoZXRoZXIgdG8gdXNlIHJlbGF0aXZlIGxpbmtzIGJhc2VkIG9uIHRoZSBPYnNpZGlhbiBzZXR0aW5ncy5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIE9ic2lkaWFuIGFwcCBpbnN0YW5jZS5cbiAqIEByZXR1cm5zIFdoZXRoZXIgdG8gdXNlIHJlbGF0aXZlIGxpbmtzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TmV3TGlua0Zvcm1hdChhcHA6IEFwcCk6IE5ld0xpbmtGb3JtYXQge1xuICAvLyBgZ2V0Q29uZmlnYCBmYWxscyBiYWNrIHRvIE9ic2lkaWFuJ3MgZGVmYXVsdCBmb3IgYSBrZXkgdGhlIHVzZXIgbmV2ZXIgc2V0LCBzbyBpdCBhbHdheXMgaGFzIGEgdmFsdWUuXG4gIHJldHVybiBlbnN1cmVOb25OdWxsYWJsZShhcHAudmF1bHQuZ2V0Q29uZmlnKCduZXdMaW5rRm9ybWF0JykpO1xufVxuXG4vKipcbiAqIFJldHJpZXZlcyB3aGV0aGVyIHRoZSBzcGVsbGNoZWNrIGlzIGVuYWJsZWQgYmFzZWQgb24gdGhlIE9ic2lkaWFuIHNldHRpbmdzLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgT2JzaWRpYW4gYXBwIGluc3RhbmNlLlxuICogQHJldHVybnMgV2hldGhlciB0aGUgc3BlbGxjaGVjayBpcyBlbmFibGVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNTcGVsbGNoZWNrRW5hYmxlZChhcHA6IEFwcCk6IGJvb2xlYW4ge1xuICByZXR1cm4gQm9vbGVhbihhcHAudmF1bHQuZ2V0Q29uZmlnKCdzcGVsbGNoZWNrJykpO1xufVxuXG4vKipcbiAqIFJlc29sdmVzIGEge0BsaW5rIFNwZWxsY2hlY2tNb2RlfSBhZ2FpbnN0IHRoZSBPYnNpZGlhbiBzZXR0aW5ncy5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIE9ic2lkaWFuIGFwcCBpbnN0YW5jZS5cbiAqIEBwYXJhbSBzcGVsbGNoZWNrTW9kZSAtIFRoZSBtb2RlIHRvIHJlc29sdmUuXG4gKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBpbnB1dCBzaG91bGQgYmUgc3BlbGwtY2hlY2tlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzU3BlbGxjaGVja0VuYWJsZWRGb3JNb2RlKGFwcDogQXBwLCBzcGVsbGNoZWNrTW9kZTogU3BlbGxjaGVja01vZGUpOiBib29sZWFuIHtcbiAgc3dpdGNoIChzcGVsbGNoZWNrTW9kZSkge1xuICAgIGNhc2UgU3BlbGxjaGVja01vZGUuQWx3YXlzT246IHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBjYXNlIFNwZWxsY2hlY2tNb2RlLkZvbGxvd09ic2lkaWFuU2V0dGluZzoge1xuICAgICAgcmV0dXJuIGlzU3BlbGxjaGVja0VuYWJsZWQoYXBwKTtcbiAgICB9XG4gICAgY2FzZSBTcGVsbGNoZWNrTW9kZS5PZmY6IHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgZGVmYXVsdDoge1xuICAgICAgYXNzZXJ0TmV2ZXIoc3BlbGxjaGVja01vZGUpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFJldHJpZXZlcyB3aGV0aGVyIHRvIHVzZSB3aWtpbGlua3MgYmFzZWQgb24gdGhlIE9ic2lkaWFuIHNldHRpbmdzLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgT2JzaWRpYW4gYXBwIGluc3RhbmNlLlxuICogQHJldHVybnMgV2hldGhlciB0byB1c2Ugd2lraWxpbmtzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2hvdWxkVXNlV2lraWxpbmtzKGFwcDogQXBwKTogYm9vbGVhbiB7XG4gIHJldHVybiAhYXBwLnZhdWx0LmdldENvbmZpZygndXNlTWFya2Rvd25MaW5rcycpO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFRQSx5QkFHTztBQVNBLElBQUssaUJBQUwsa0JBQUtBLG9CQUFMO0FBSUwsRUFBQUEsZ0JBQUEsY0FBVztBQU1YLEVBQUFBLGdCQUFBLDJCQUF3QjtBQUt4QixFQUFBQSxnQkFBQSxTQUFNO0FBZkksU0FBQUE7QUFBQSxHQUFBO0FBNkJMLFNBQVMsaUJBQWlCLEtBQXlCO0FBRXhELGFBQU8sc0NBQWtCLElBQUksTUFBTSxVQUFVLGVBQWUsQ0FBQztBQUMvRDtBQVFPLFNBQVMsb0JBQW9CLEtBQW1CO0FBQ3JELFNBQU8sUUFBUSxJQUFJLE1BQU0sVUFBVSxZQUFZLENBQUM7QUFDbEQ7QUFTTyxTQUFTLDJCQUEyQixLQUFVLGdCQUF5QztBQUM1RixVQUFRLGdCQUFnQjtBQUFBLElBQ3RCLEtBQUssMkJBQXlCO0FBQzVCLGFBQU87QUFBQSxJQUNUO0FBQUEsSUFDQSxLQUFLLHFEQUFzQztBQUN6QyxhQUFPLG9CQUFvQixHQUFHO0FBQUEsSUFDaEM7QUFBQSxJQUNBLEtBQUssaUJBQW9CO0FBQ3ZCLGFBQU87QUFBQSxJQUNUO0FBQUEsSUFDQSxTQUFTO0FBQ1AsMENBQVksY0FBYztBQUFBLElBQzVCO0FBQUEsRUFDRjtBQUNGO0FBUU8sU0FBUyxtQkFBbUIsS0FBbUI7QUFDcEQsU0FBTyxDQUFDLElBQUksTUFBTSxVQUFVLGtCQUFrQjtBQUNoRDsiLCJuYW1lcyI6WyJTcGVsbGNoZWNrTW9kZSJdfQ==
@@ -128,6 +128,7 @@ var import_active_file_provider = require('../active-file-provider.cjs');
128
128
  var import_command_handler_component = require('../command-handlers/command-handler-component.cjs');
129
129
  var import_unlock_active_note_command_handler = require('../command-handlers/unlock-active-note-command-handler.cjs');
130
130
  var import_command_registrar = require('../command-registrar.cjs');
131
+ var import_community_plugins = require('../community-plugins.cjs');
131
132
  var import_abort_signal_component = require('../components/abort-signal-component.cjs');
132
133
  var import_async_error_handler_component = require('../components/async-error-handler-component.cjs');
133
134
  var import_component_ex = require('../components/component-ex.cjs');
@@ -668,7 +669,9 @@ async function reloadPlugin(plugin) {
668
669
  const plugins = plugin.app.plugins;
669
670
  const pluginId = plugin.manifest.id;
670
671
  await plugins.disablePlugin(pluginId);
671
- await plugins.enablePlugin(pluginId);
672
+ if (!await plugins.enablePlugin(pluginId)) {
673
+ throw new import_community_plugins.PluginEnableRefusedError(pluginId);
674
+ }
672
675
  }
673
676
  async function showErrorAndDisablePlugin(plugin, message) {
674
677
  const pluginNoticeComponent = new import_plugin_notice_component.PluginNoticeComponent({
@@ -685,4 +688,4 @@ async function showErrorAndDisablePlugin(plugin, message) {
685
688
  reloadPlugin,
686
689
  showErrorAndDisablePlugin
687
690
  });
688
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9wbHVnaW4vcGx1Z2luLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBCYXNlIGNsYXNzIGZvciBPYnNpZGlhbiBwbHVnaW5zIHVzaW5nIGEgY29tcG9uZW50LWJhc2VkIGFyY2hpdGVjdHVyZS5cbiAqXG4gKiBQbHVnaW5CYXNlIHJlZ2lzdGVycyB1bml2ZXJzYWwgY29tcG9uZW50cyAoY29udGV4dCwgaTE4biwgZXJyb3IgaGFuZGxpbmcsIGFib3J0IHNpZ25hbCwgbGlmZWN5Y2xlIGV2ZW50cywgZGVidWcpLlxuICovXG5cbmltcG9ydCB0eXBlIHtcbiAgQ29tcG9uZW50LFxuICBJY29uTmFtZVxufSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgdHlwZSB7IFByb21pc2FibGUgfSBmcm9tICd0eXBlLWZlc3QnO1xuXG5pbXBvcnQgeyBtaXhpbkFzeW5jRXZlbnRzIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2FzeW5jLWV2ZW50cyc7XG5pbXBvcnQgeyBwcmludEVycm9yIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2Vycm9yJztcbmltcG9ydCB7IG5vb3BBc3luYyB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9mdW5jdGlvbic7XG5pbXBvcnQgeyBlbnN1cmVOb25OdWxsYWJsZSB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi90eXBlLWd1YXJkcyc7XG5pbXBvcnQgeyBQbHVnaW4gfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHtcbiAgUGx1Z2luQ29uZmxpY3QsXG4gIFBsdWdpbkRlcGVuZGVuY3lcbn0gZnJvbSAnLi4vY29tcG9uZW50cy9wbHVnaW4tZ2F0ZS1jb21wb25lbnQudHMnO1xuaW1wb3J0IHR5cGUgeyBUcmFuc2xhdGlvbnNNYXAgfSBmcm9tICcuLi9pMThuL2kxOG4udHMnO1xuaW1wb3J0IHR5cGUgeyBQbHVnaW5BcGlEZWNsYXJhdGlvbiB9IGZyb20gJy4vcGx1Z2luLWFwaS50cyc7XG5pbXBvcnQgdHlwZSB7XG4gIFBsdWdpbkV2ZW50TWFwLFxuICBQbHVnaW5FdmVudFNvdXJjZVxufSBmcm9tICcuL3BsdWdpbi1ldmVudC1zb3VyY2UudHMnO1xuaW1wb3J0IHR5cGUgeyBQbHVnaW5MaWZlY3ljbGVFdmVudFBheWxvYWQgfSBmcm9tICcuL3BsdWdpbi1saWZlY3ljbGUtZXZlbnRzLnRzJztcblxuaW1wb3J0IHsgQXBwQWN0aXZlRmlsZVByb3ZpZGVyIH0gZnJvbSAnLi4vYWN0aXZlLWZpbGUtcHJvdmlkZXIudHMnO1xuaW1wb3J0IHsgQ29tbWFuZEhhbmRsZXJDb21wb25lbnQgfSBmcm9tICcuLi9jb21tYW5kLWhhbmRsZXJzL2NvbW1hbmQtaGFuZGxlci1jb21wb25lbnQudHMnO1xuaW1wb3J0IHsgVW5sb2NrQWN0aXZlTm90ZUNvbW1hbmRIYW5kbGVyIH0gZnJvbSAnLi4vY29tbWFuZC1oYW5kbGVycy91bmxvY2stYWN0aXZlLW5vdGUtY29tbWFuZC1oYW5kbGVyLnRzJztcbmltcG9ydCB7IFBsdWdpbkNvbW1hbmRSZWdpc3RyYXIgfSBmcm9tICcuLi9jb21tYW5kLXJlZ2lzdHJhci50cyc7XG5pbXBvcnQgeyBBYm9ydFNpZ25hbENvbXBvbmVudCB9IGZyb20gJy4uL2NvbXBvbmVudHMvYWJvcnQtc2lnbmFsLWNvbXBvbmVudC50cyc7XG5pbXBvcnQgeyBBc3luY0Vycm9ySGFuZGxlckNvbXBvbmVudCB9IGZyb20gJy4uL2NvbXBvbmVudHMvYXN5bmMtZXJyb3ItaGFuZGxlci1jb21wb25lbnQudHMnO1xuaW1wb3J0IHsgQ29tcG9uZW50RXggfSBmcm9tICcuLi9jb21wb25lbnRzL2NvbXBvbmVudC1leC50cyc7XG5pbXBvcnQgeyBDb25zb2xlRGVidWdDb21wb25lbnQgfSBmcm9tICcuLi9jb21wb25lbnRzL2NvbnNvbGUtZGVidWctY29tcG9uZW50LnRzJztcbmltcG9ydCB7IE1lbnVFdmVudFJlZ2lzdHJhckNvbXBvbmVudCB9IGZyb20gJy4uL2NvbXBvbmVudHMvbWVudS1ldmVudC1yZWdpc3RyYXItY29tcG9uZW50LnRzJztcbmltcG9ydCB7IE5vdGVib29rTmF2aWdhdG9yTWVudUV2ZW50UmVnaXN0cmFyQ29tcG9uZW50IH0gZnJvbSAnLi4vY29tcG9uZW50cy9ub3RlYm9vay1uYXZpZ2F0b3ItbWVudS1ldmVudC1yZWdpc3RyYXItY29tcG9uZW50LnRzJztcbmltcG9ydCB7IFBsdWdpbkNvbnRleHRDb21wb25lbnQgfSBmcm9tICcuLi9jb21wb25lbnRzL3BsdWdpbi1jb250ZXh0LWNvbXBvbmVudC50cyc7XG5pbXBvcnQgeyBQbHVnaW5HYXRlQ29tcG9uZW50IH0gZnJvbSAnLi4vY29tcG9uZW50cy9wbHVnaW4tZ2F0ZS1jb21wb25lbnQudHMnO1xuaW1wb3J0IHsgUGx1Z2luTm90aWNlQ29tcG9uZW50IH0gZnJvbSAnLi4vY29tcG9uZW50cy9wbHVnaW4tbm90aWNlLWNvbXBvbmVudC50cyc7XG5pbXBvcnQgeyBQbHVnaW5TZXR0aW5nc0NvbXBvbmVudEJhc2UgfSBmcm9tICcuLi9jb21wb25lbnRzL3BsdWdpbi1zZXR0aW5ncy1jb21wb25lbnQudHMnO1xuaW1wb3J0IHsgUGx1Z2luRGF0YUhhbmRsZXIgfSBmcm9tICcuLi9kYXRhLWhhbmRsZXIudHMnO1xuaW1wb3J0IHsgaW5pdEkxOE4gfSBmcm9tICcuLi9pMThuL2kxOG4udHMnO1xuaW1wb3J0IHsgZGVmYXVsdFRyYW5zbGF0aW9uc01hcCB9IGZyb20gJy4uL2kxOG4vbG9jYWxlcy90cmFuc2xhdGlvbnMtbWFwLnRzJztcbmltcG9ydCB7IFJlc291cmNlTG9ja0NvbXBvbmVudCB9IGZyb20gJy4uL3Jlc291cmNlLWxvY2sudHMnO1xuaW1wb3J0IHsgcHVibGlzaFBsdWdpbkFwaSB9IGZyb20gJy4vcGx1Z2luLWFwaS50cyc7XG5pbXBvcnQgeyBQbHVnaW5FdmVudFNvdXJjZUltcGwgfSBmcm9tICcuL3BsdWdpbi1ldmVudC1zb3VyY2UudHMnO1xuaW1wb3J0IHtcbiAgUExVR0lOX0xPQURFRF9FVkVOVF9OQU1FLFxuICBQTFVHSU5fVU5MT0FERURfRVZFTlRfTkFNRSxcbiAgdHJpZ2dlclBsdWdpbkxpZmVjeWNsZUV2ZW50XG59IGZyb20gJy4vcGx1Z2luLWxpZmVjeWNsZS1ldmVudHMudHMnO1xuXG4vKipcbiAqIFRoZSB1bml2ZXJzYWwgY29tcG9uZW50cyBvd25lZCBieSB7QGxpbmsgUGx1Z2luQmFzZX0sIGtleWVkIGJ5IHRoZSBuYW1lIG9mIHRoZSBhY2Nlc3NvciBleHBvc2luZ1xuICogZWFjaCBvbmUuIEV2ZXJ5IG1lbWJlciBpcyBvcHRpb25hbCBiZWNhdXNlIGEgY29tcG9uZW50IG9ubHkgZXhpc3RzIG9uY2Uge0BsaW5rIFBsdWdpbkJhc2Uub25sb2FkfVxuICogaGFzIGNyZWF0ZWQgaXQuXG4gKi9cbmludGVyZmFjZSBQbHVnaW5CYXNlQ29tcG9uZW50cyB7XG4gIHJlYWRvbmx5IGFib3J0U2lnbmFsQ29tcG9uZW50PzogQWJvcnRTaWduYWxDb21wb25lbnQ7XG4gIHJlYWRvbmx5IGFzeW5jRXJyb3JIYW5kbGVyQ29tcG9uZW50PzogQXN5bmNFcnJvckhhbmRsZXJDb21wb25lbnQ7XG4gIHJlYWRvbmx5IGNvbW1hbmRIYW5kbGVyQ29tcG9uZW50PzogQ29tbWFuZEhhbmRsZXJDb21wb25lbnQ7XG4gIHJlYWRvbmx5IGNvbnNvbGVEZWJ1Z0NvbXBvbmVudD86IENvbnNvbGVEZWJ1Z0NvbXBvbmVudDtcbiAgcmVhZG9ubHkgcGx1Z2luQ29udGV4dENvbXBvbmVudD86IFBsdWdpbkNvbnRleHRDb21wb25lbnQ7XG4gIHJlYWRvbmx5IHBsdWdpbkdhdGVDb21wb25lbnQ/OiBQbHVnaW5HYXRlQ29tcG9uZW50O1xuICByZWFkb25seSBwbHVnaW5Ob3RpY2VDb21wb25lbnQ/OiBQbHVnaW5Ob3RpY2VDb21wb25lbnQ7XG4gIHJlYWRvbmx5IHBsdWdpblNldHRpbmdzQ29tcG9uZW50PzogUGx1Z2luU2V0dGluZ3NDb21wb25lbnRCYXNlPG9iamVjdD47XG4gIHJlYWRvbmx5IHJlc291cmNlTG9ja0NvbXBvbmVudD86IFJlc291cmNlTG9ja0NvbXBvbmVudDtcbn1cblxuLyoqXG4gKiBCYXNlIGNsYXNzIGZvciBjcmVhdGluZyBPYnNpZGlhbiBwbHVnaW5zIHdpdGggYSBjb21wb25lbnQtYmFzZWQgYXJjaGl0ZWN0dXJlLlxuICpcbiAqIFJlZ2lzdGVycyB1bml2ZXJzYWwgY29tcG9uZW50cyBhdXRvbWF0aWNhbGx5LiBTdWJjbGFzc2VzIGFkZCBvciByZXBsYWNlIGNvbXBvbmVudHNcbiAqIHZpYSB7QGxpbmsgcmVtb3ZlQ2hpbGR9IC8ge0BsaW5rIGFkZENoaWxkfS5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFBsdWdpbkJhc2UgZXh0ZW5kcyBtaXhpbkFzeW5jRXZlbnRzPFBsdWdpbkV2ZW50TWFwPigpKFBsdWdpbikgaW1wbGVtZW50cyBQbHVnaW5FdmVudFNvdXJjZSB7XG4gIC8qKlxuICAgKiBHZXRzIGFib3J0IHNpZ25hbCBjb21wb25lbnQuXG4gICAqXG4gICAqIEByZXR1cm5zIGFib3J0IHNpZ25hbCBjb21wb25lbnQuXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0IGFib3J0U2lnbmFsQ29tcG9uZW50KCk6IEFib3J0U2lnbmFsQ29tcG9uZW50IHtcbiAgICByZXR1cm4gZW5zdXJlTm9uTnVsbGFibGUodGhpcy5jb21wb25lbnRzLmFib3J0U2lnbmFsQ29tcG9uZW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIGFib3J0IHNpZ25hbCBjb21wb25lbnQuXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSAtIEFib3J0IHNpZ25hbCBjb21wb25lbnQuXG4gICAqL1xuICBwcm90ZWN0ZWQgc2V0IGFib3J0U2lnbmFsQ29tcG9uZW50KHZhbHVlOiBBYm9ydFNpZ25hbENvbXBvbmVudCkge1xuICAgIHRoaXMuc2V0Q29tcG9uZW50KCdhYm9ydFNpZ25hbENvbXBvbmVudCcsIHZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGFzeW5jIGVycm9yIGhhbmRsZXIgY29tcG9uZW50LlxuICAgKlxuICAgKiBAcmV0dXJucyBhc3luYyBlcnJvciBoYW5kbGVyIGNvbXBvbmVudC5cbiAgICovXG4gIHByb3RlY3RlZCBnZXQgYXN5bmNFcnJvckhhbmRsZXJDb21wb25lbnQoKTogQXN5bmNFcnJvckhhbmRsZXJDb21wb25lbnQge1xuICAgIHJldHVybiBlbnN1cmVOb25OdWxsYWJsZSh0aGlzLmNvbXBvbmVudHMuYXN5bmNFcnJvckhhbmRsZXJDb21wb25lbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgYXN5bmMgZXJyb3IgaGFuZGxlciBjb21wb25lbnQuXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSAtIEFzeW5jIGVycm9yIGhhbmRsZXIgY29tcG9uZW50LlxuICAgKi9cbiAgcHJvdGVjdGVkIHNldCBhc3luY0Vycm9ySGFuZGxlckNvbXBvbmVudCh2YWx1ZTogQXN5bmNFcnJvckhhbmRsZXJDb21wb25lbnQpIHtcbiAgICB0aGlzLnNldENvbXBvbmVudCgnYXN5bmNFcnJvckhhbmRsZXJDb21wb25lbnQnLCB2YWx1ZSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgc2hhcmVkIGNvbW1hbmQgaGFuZGxlciBjb21wb25lbnQuIFJlZ2lzdGVyIGEgcGx1Z2luJ3MgY29tbWFuZHMgb24gaXQgdmlhXG4gICAqIHtAbGluayBDb21tYW5kSGFuZGxlckNvbXBvbmVudC5yZWdpc3RlckNvbW1hbmRIYW5kbGVyc30gcmF0aGVyIHRoYW4gY29uc3RydWN0aW5nIHlvdXIgb3duXG4gICAqIHtAbGluayBDb21tYW5kSGFuZGxlckNvbXBvbmVudH0g4oCUIHRoZSBhcHAtYmFja2VkIGFjdGl2ZS1maWxlIHByb3ZpZGVyLCBjb21tYW5kIHJlZ2lzdHJhciwgbWVudVxuICAgKiBldmVudCByZWdpc3RyYXIsIGFuZCBwbHVnaW4gbmFtZSBhcmUgYWxyZWFkeSB3aXJlZC5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIGNvbW1hbmQgaGFuZGxlciBjb21wb25lbnQuXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0IGNvbW1hbmRIYW5kbGVyQ29tcG9uZW50KCk6IENvbW1hbmRIYW5kbGVyQ29tcG9uZW50IHtcbiAgICByZXR1cm4gZW5zdXJlTm9uTnVsbGFibGUodGhpcy5jb21wb25lbnRzLmNvbW1hbmRIYW5kbGVyQ29tcG9uZW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBjb21tYW5kIGhhbmRsZXIgY29tcG9uZW50LlxuICAgKlxuICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgY29tbWFuZCBoYW5kbGVyIGNvbXBvbmVudC5cbiAgICovXG4gIHByb3RlY3RlZCBzZXQgY29tbWFuZEhhbmRsZXJDb21wb25lbnQodmFsdWU6IENvbW1hbmRIYW5kbGVyQ29tcG9uZW50KSB7XG4gICAgdGhpcy5zZXRDb21wb25lbnQoJ2NvbW1hbmRIYW5kbGVyQ29tcG9uZW50JywgdmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgY29uc29sZSBkZWJ1ZyBjb21wb25lbnQuXG4gICAqXG4gICAqIEByZXR1cm5zIGNvbnNvbGUgZGVidWcgY29tcG9uZW50LlxuICAgKi9cbiAgcHJvdGVjdGVkIGdldCBjb25zb2xlRGVidWdDb21wb25lbnQoKTogQ29uc29sZURlYnVnQ29tcG9uZW50IHtcbiAgICByZXR1cm4gZW5zdXJlTm9uTnVsbGFibGUodGhpcy5jb21wb25lbnRzLmNvbnNvbGVEZWJ1Z0NvbXBvbmVudCk7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyBjb25zb2xlIGRlYnVnIGNvbXBvbmVudC5cbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIC0gQ29uc29sZSBkZWJ1ZyBjb21wb25lbnQuXG4gICAqL1xuICBwcm90ZWN0ZWQgc2V0IGNvbnNvbGVEZWJ1Z0NvbXBvbmVudCh2YWx1ZTogQ29uc29sZURlYnVnQ29tcG9uZW50KSB7XG4gICAgdGhpcy5zZXRDb21wb25lbnQoJ2NvbnNvbGVEZWJ1Z0NvbXBvbmVudCcsIHZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHBsdWdpbiBjb250ZXh0IGNvbXBvbmVudCAocGx1Z2luIElELCBkZWJ1ZyBjb250cm9sbGVyLCBsaWJyYXJ5IHN0eWxlcykuXG4gICAqXG4gICAqIEByZXR1cm5zIHBsdWdpbiBjb250ZXh0IGNvbXBvbmVudC5cbiAgICovXG4gIHByb3RlY3RlZCBnZXQgcGx1Z2luQ29udGV4dENvbXBvbmVudCgpOiBQbHVnaW5Db250ZXh0Q29tcG9uZW50IHtcbiAgICByZXR1cm4gZW5zdXJlTm9uTnVsbGFibGUodGhpcy5jb21wb25lbnRzLnBsdWdpbkNvbnRleHRDb21wb25lbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgcGx1Z2luIGNvbnRleHQgY29tcG9uZW50LlxuICAgKlxuICAgKiBAcGFyYW0gdmFsdWUgLSBQbHVnaW4gY29udGV4dCBjb21wb25lbnQuXG4gICAqL1xuICBwcm90ZWN0ZWQgc2V0IHBsdWdpbkNvbnRleHRDb21wb25lbnQodmFsdWU6IFBsdWdpbkNvbnRleHRDb21wb25lbnQpIHtcbiAgICB0aGlzLnNldENvbXBvbmVudCgncGx1Z2luQ29udGV4dENvbXBvbmVudCcsIHZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBnYXRlIGhvbGRpbmcgdGhlIHBsdWdpbidzIGZlYXR1cmUgc3VyZmFjZSB1cCBvciBkb3duLlxuICAgKlxuICAgKiBSZWFjaCBmb3IgaXQgZnJvbSBhIHNldHRpbmdzIHRhYiB0byByZW5kZXIgdGhlIG92ZXJsYXAgYmFubmVyIGZvciBhXG4gICAqIHtAbGluayBjb21wb25lbnRzL3BsdWdpbi1nYXRlLWNvbXBvbmVudCFQbHVnaW5Db25mbGljdFNldmVyaXR5Lldhcm59IGNvbmZsaWN0IOKAlCB0aGUgb25lXG4gICAqIGJhbm5lciB0aGUgbGlicmFyeSBjYW5ub3QgcGxhY2UgaXRzZWxmLCBiZWNhdXNlIGEgcnVubmluZyBwbHVnaW4gYnVpbGRzIGl0cyBvd24gc2V0dGluZ3MgdGFiLlxuICAgKlxuICAgKiBSZWFkYWJsZSB0aHJvdWdob3V0IHtAbGluayBvbmxvYWRJbXBsfSwgaW5jbHVkaW5nIGl0cyBzeW5jaHJvbm91cyBwcmVmaXgsIHdoaWNoIGlzIHdoZXJlIGEgc2V0dGluZ3NcbiAgICogdGFiIGlzIGJ1aWx0LiBUaGF0IGlzIGRlbGliZXJhdGUgcmF0aGVyIHRoYW4gaW5jaWRlbnRhbDogYWRkaW5nIHRoZSBnYXRlIGlzIHdoYXQgcnVuc1xuICAgKiB7QGxpbmsgb25sb2FkSW1wbH0sIHNvIHtAbGluayBvbmxvYWR9IGFzc2lnbnMgdGhpcyBmaWVsZCBiZWZvcmUgYWRkaW5nIGl0LlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgcGx1Z2luIGdhdGUgY29tcG9uZW50LlxuICAgKi9cbiAgcHJvdGVjdGVkIGdldCBwbHVnaW5HYXRlQ29tcG9uZW50KCk6IFBsdWdpbkdhdGVDb21wb25lbnQge1xuICAgIHJldHVybiBlbnN1cmVOb25OdWxsYWJsZSh0aGlzLmNvbXBvbmVudHMucGx1Z2luR2F0ZUNvbXBvbmVudCk7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgcGx1Z2luIGdhdGUgY29tcG9uZW50LlxuICAgKlxuICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgcGx1Z2luIGdhdGUgY29tcG9uZW50LlxuICAgKi9cbiAgcHJvdGVjdGVkIHNldCBwbHVnaW5HYXRlQ29tcG9uZW50KHZhbHVlOiBQbHVnaW5HYXRlQ29tcG9uZW50KSB7XG4gICAgdGhpcy5zZXRDb21wb25lbnQoJ3BsdWdpbkdhdGVDb21wb25lbnQnLCB2YWx1ZSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyBwbHVnaW4gbm90aWNlIGNvbXBvbmVudC5cbiAgICpcbiAgICogQHJldHVybnMgcGx1Z2luIG5vdGljZSBjb21wb25lbnQuXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0IHBsdWdpbk5vdGljZUNvbXBvbmVudCgpOiBQbHVnaW5Ob3RpY2VDb21wb25lbnQge1xuICAgIHJldHVybiBlbnN1cmVOb25OdWxsYWJsZSh0aGlzLmNvbXBvbmVudHMucGx1Z2luTm90aWNlQ29tcG9uZW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHBsdWdpbiBub3RpY2UgY29tcG9uZW50LlxuICAgKlxuICAgKiBAcGFyYW0gdmFsdWUgLSBQbHVnaW4gbm90aWNlIGNvbXBvbmVudC5cbiAgICovXG4gIHByb3RlY3RlZCBzZXQgcGx1Z2luTm90aWNlQ29tcG9uZW50KHZhbHVlOiBQbHVnaW5Ob3RpY2VDb21wb25lbnQpIHtcbiAgICB0aGlzLnNldENvbXBvbmVudCgncGx1Z2luTm90aWNlQ29tcG9uZW50JywgdmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgcGx1Z2luIHNldHRpbmdzIGNvbXBvbmVudC5cbiAgICpcbiAgICogQHJldHVybnMgcGx1Z2luIHNldHRpbmdzIGNvbXBvbmVudC5cbiAgICovXG4gIHByb3RlY3RlZCBnZXQgcGx1Z2luU2V0dGluZ3NDb21wb25lbnQoKTogUGx1Z2luU2V0dGluZ3NDb21wb25lbnRCYXNlPG9iamVjdD4ge1xuICAgIHJldHVybiBlbnN1cmVOb25OdWxsYWJsZSh0aGlzLmNvbXBvbmVudHMucGx1Z2luU2V0dGluZ3NDb21wb25lbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgcGx1Z2luIHNldHRpbmdzIGNvbXBvbmVudC5cbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIC0gUGx1Z2luIHNldHRpbmdzIGNvbXBvbmVudC5cbiAgICovXG4gIHByb3RlY3RlZCBzZXQgcGx1Z2luU2V0dGluZ3NDb21wb25lbnQodmFsdWU6IFBsdWdpblNldHRpbmdzQ29tcG9uZW50QmFzZTxvYmplY3Q+KSB7XG4gICAgdGhpcy5zZXRDb21wb25lbnQoJ3BsdWdpblNldHRpbmdzQ29tcG9uZW50JywgdmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGVkaXRvciBsb2NrIGNvbXBvbmVudCwgdXNlZCB0byBsb2NrIG5vdGVzIHJlYWQtb25seSBkdXJpbmcgbG9uZyBvcGVyYXRpb25zLiBPd25lZCBieVxuICAgKiB0aGUgcGx1Z2luLCBzbyBpdHMgbG9ja3MgYXJlIHJlbGVhc2VkIGF1dG9tYXRpY2FsbHkgd2hlbiB0aGUgcGx1Z2luIHVubG9hZHMuXG4gICAqXG4gICAqIEByZXR1cm5zIEVkaXRvciBsb2NrIGNvbXBvbmVudC5cbiAgICovXG4gIHByb3RlY3RlZCBnZXQgcmVzb3VyY2VMb2NrQ29tcG9uZW50KCk6IFJlc291cmNlTG9ja0NvbXBvbmVudCB7XG4gICAgcmV0dXJuIGVuc3VyZU5vbk51bGxhYmxlKHRoaXMuY29tcG9uZW50cy5yZXNvdXJjZUxvY2tDb21wb25lbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGVkaXRvciBsb2NrIGNvbXBvbmVudC5cbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIC0gRWRpdG9yIGxvY2sgY29tcG9uZW50LlxuICAgKi9cbiAgcHJvdGVjdGVkIHNldCByZXNvdXJjZUxvY2tDb21wb25lbnQodmFsdWU6IFJlc291cmNlTG9ja0NvbXBvbmVudCkge1xuICAgIHRoaXMuc2V0Q29tcG9uZW50KCdyZXNvdXJjZUxvY2tDb21wb25lbnQnLCB2YWx1ZSk7XG4gIH1cblxuICBwcml2YXRlIHJlYWRvbmx5IGNvbXBvbmVudHM6IFBsdWdpbkJhc2VDb21wb25lbnRzID0ge307XG5cbiAgLy8gRXZlcnl0aGluZyB0aGUgU1VCQ0xBU1Mgb3duczogd2hhdCBgb25sb2FkSW1wbGAgYWRkcywgYW5kIHdoYXQgaXQgYWRkcyBsYXRlci5cbiAgLy9cbiAgLy8gQSBzZWNvbmQgd3JhcHBlciByYXRoZXIgdGhhbiBvbmUsIGJlY2F1c2UgdGhlIHR3byB0aWVycyBoYXZlIG9wcG9zaXRlIGxpZmV0aW1lcy4gVGhlIHVuaXZlcnNhbFxuICAvLyBjb21wb25lbnRzIGhhdmUgdG8gT1VUTElWRSBhIGxvc3QgZGVwZW5kZW5jeSDigJQgdGhleSBhcmUgd2hhdCBzaG93cyB0aGUgbm90aWNlIG5hbWluZyB0aGUgcGx1Z2luIHRoYXRcbiAgLy8gd2VudCBhd2F5IGFuZCByZW5kZXJzIHRoZSBidXR0b24gdGhhdCBicmluZ3MgaXQgYmFjayDigJQgd2hpbGUgdGhlIHN1YmNsYXNzJ3Mgc3VyZmFjZSBpcyBleGFjdGx5IHdoYXRcbiAgLy8gbXVzdCBzdG9wIHJ1bm5pbmcuIFVubG9hZGluZyBvbmUgd3JhcHBlciBob2xkaW5nIGJvdGggd291bGQgc2lsZW5jZSB0aGUgcGx1Z2luIGF0IHRoZSBtb21lbnQgaXQgbW9zdFxuICAvLyBuZWVkcyB0byBzcGVhay5cbiAgLy9cbiAgLy8gQWx3YXlzIHByZXNlbnQsIG5ldmVyIG51bGwsIGFuZCBSRVBMQUNFRCByYXRoZXIgdGhhbiBlbXB0aWVkIHdoZW4gdGhlIHN1cmZhY2UgaXMgdG9ybiBkb3duLiBUaGF0IGtlZXBzXG4gIC8vIGBhZGRDaGlsZGAgY2FsbGFibGUgYXQgZXZlcnkgcG9pbnQgaW4gdGhlIHBsdWdpbidzIGxpZmUsIGV4YWN0bHkgYXMgaXQgd2FzIGJlZm9yZSB0aGUgdGllcnMgZXhpc3RlZDpcbiAgLy8gQSBjaGlsZCBhZGRlZCBiZWZvcmUgdGhlIGdhdGUgb3BlbnMgaXMgcXVldWVkIGFuZCBsb2FkZWQgd2hlbiBpdCBkb2VzLCB3aGljaCBpcyB3aGF0IGBDb21wb25lbnRFeGBcbiAgLy8gYWxyZWFkeSBkb2VzIGZvciBhbnkgY2hpbGQgYWRkZWQgdG8gYSBub3QteWV0LWxvYWRlZCBjb21wb25lbnQuXG4gIHByaXZhdGUgZ2F0ZWRXcmFwcGVyQ29tcG9uZW50ID0gbmV3IENvbXBvbmVudEV4KCk7XG5cbiAgLy8gVGhlIHBheWxvYWQgYnJvYWRjYXN0IHdoZW4gdGhpcyBwbHVnaW4gZmluaXNoZWQgbG9hZGluZywga2VwdCBzbyB0aGUgbWF0Y2hpbmcgdW5sb2FkZWQgYnJvYWRjYXN0XG4gIC8vIGRlc2NyaWJlcyB0aGUgc2FtZSBwbHVnaW4gd2l0aG91dCByZS1kZXJpdmluZyBpdCBmcm9tIGEgc3VyZmFjZSB0aGF0IGhhcyBzaW5jZSBiZWVuIHRvcm4gZG93bi4gTnVsbFxuICAvLyB3aGVuZXZlciBubyBsb2FkZWQgYnJvYWRjYXN0IGlzIG91dHN0YW5kaW5nLCB3aGljaCBpcyB3aGF0IGtlZXBzIHRoZSB0d28gZXZlbnRzIHBhaXJlZC5cbiAgcHJpdmF0ZSBsaWZlY3ljbGVFdmVudFBheWxvYWQ6IG51bGwgfCBQbHVnaW5MaWZlY3ljbGVFdmVudFBheWxvYWQgPSBudWxsO1xuXG4gIC8vIFRoZSBsaWJyYXJ5J3Mgb3duIGNvbXBvbmVudHMsIHdoaWNoIG91dGxpdmUgYW55IGRlcGVuZGVuY3kuXG4gIHByaXZhdGUgcmVhZG9ubHkgdW5pdmVyc2FsV3JhcHBlckNvbXBvbmVudCA9IG5ldyBDb21wb25lbnRFeCgpO1xuXG4gIC8qKlxuICAgKiBBZGRzIGEgY2hpbGQgY29tcG9uZW50LlxuICAgKlxuICAgKiBUaGUgY2hpbGQgaXMgYWRkZWQgdG8gdGhlIGludGVybmFsIHdyYXBwZXIgaG9sZGluZyB0aGUgc3ViY2xhc3MncyBvd24gc3VyZmFjZSwgd2hpY2gge0BsaW5rIG9ubG9hZH1cbiAgICogY3JlYXRlcyBhbmQgbG9hZHMgYmVmb3JlIGNhbGxpbmcge0BsaW5rIG9ubG9hZEltcGx9LiBTbyBhIGNoaWxkIGFkZGVkIGR1cmluZyB7QGxpbmsgb25sb2FkSW1wbH0gaXNcbiAgICogbG9hZGVkIGltbWVkaWF0ZWx5LCBjaGlsZHJlbi1maXJzdCwgYW5kIGlzIHVzYWJsZSBieSB0aGUgdGltZSB0aGlzIG1ldGhvZCByZXR1cm5zLlxuICAgKlxuICAgKiBUaGF0IHdyYXBwZXIgaXMgdG9ybiBkb3duIGFuZCByZWJ1aWx0IHdoZW5ldmVyIHRoZSBnYXRlIGNsb3NlcyBhbmQgb3BlbnMgYWdhaW4g4oCUIGEgZGVwZW5kZW5jeSBkZWNsYXJlZFxuICAgKiBieSB7QGxpbmsgZ2V0UGx1Z2luRGVwZW5kZW5jaWVzfSBnb2luZyBhd2F5IGFuZCBjb21pbmcgYmFjaywgb3IgYSBjb25mbGljdCBkZWNsYXJlZCBieVxuICAgKiB7QGxpbmsgZ2V0UGx1Z2luQ29uZmxpY3RzfSBhcHBlYXJpbmcgYW5kIGJlaW5nIHJlc29sdmVkIOKAlCBzbyBhIGNoaWxkIGFkZGVkIGhlcmUgbGl2ZXMgZXhhY3RseSBhcyBsb25nXG4gICAqIGFzIHRoZSBwbHVnaW4ncyBmZWF0dXJlIHN1cmZhY2UgZG9lcy4gQWRkaW5nIG9uZSB3aGlsZSB0aGUgc3VyZmFjZSBpcyBkb3duIGlzIHN0aWxsIGxlZ2l0aW1hdGUg4oCUIGl0IGlzXG4gICAqIHF1ZXVlZCBhbmQgbG9hZGVkIHdoZW4gdGhlIHN1cmZhY2UgbmV4dCBjb21lcyB1cCwgdGhlIHdheSB7QGxpbmsgQ29tcG9uZW50RXguYWRkQ2hpbGR9IGFscmVhZHkgcXVldWVzXG4gICAqIGEgY2hpbGQgYWRkZWQgdG8gYSBub3QteWV0LWxvYWRlZCBjb21wb25lbnQuXG4gICAqXG4gICAqIFRoaXMgaXMgdGhlIFNVQkNMQVNTJ3MgZG9vciwgYW5kIHRoZSBvbmx5IG9uZSBpdCBoYXM6IHRoZSB1bml2ZXJzYWwgY29tcG9uZW50cyB7QGxpbmsgb25sb2FkfSByZWdpc3RlcnNcbiAgICogdGFrZSBhIHByaXZhdGUgcm91dGUgb250byBhIGRpZmZlcmVudCB3cmFwcGVyLiBTbyBhbnl0aGluZyBvYnNlcnZpbmcgdGhpcyBtZXRob2Qg4oCUIGEgdGVzdCBjb3VudGluZyBpdHNcbiAgICogY2FsbHMsIGEgcGF0Y2ggd3JhcHBpbmcgaXQg4oCUIHNlZXMgZXhhY3RseSB0aGUgY2hpbGRyZW4gdGhlIHN1YmNsYXNzIGFkZGVkLCBhbmQgbm9uZSBvZiB0aGUgbGlicmFyeSdzLlxuICAgKiBCZWZvcmUgdGhlIHR3byB0aWVycyBleGlzdGVkIG9uZSBkb29yIGNhcnJpZWQgYm90aCwgYW5kIGEgY29uc3VtZXIgY291bnRpbmcgdGhlIHRvdGFsIGlzIHRoZSBvbmUgdGhpbmdcbiAgICogdGhlIHNwbGl0IGNvdWxkIG5vdCBrZWVwIHdvcmtpbmcuXG4gICAqXG4gICAqIEB0eXBlUGFyYW0gVENvbXBvbmVudCAtIFRoZSB0eXBlIG9mIGNvbXBvbmVudCB0byBhZGQuXG4gICAqIEBwYXJhbSBjb21wb25lbnQgLSBUaGUgY29tcG9uZW50IGluc3RhbmNlIHRvIGFkZC5cbiAgICogQHJldHVybnMgVGhlIGFkZGVkIGNvbXBvbmVudC5cbiAgICovXG4gIHB1YmxpYyBvdmVycmlkZSBhZGRDaGlsZDxUQ29tcG9uZW50IGV4dGVuZHMgQ29tcG9uZW50Pihjb21wb25lbnQ6IFRDb21wb25lbnQpOiBUQ29tcG9uZW50IHtcbiAgICByZXR1cm4gdGhpcy5nYXRlZFdyYXBwZXJDb21wb25lbnQuYWRkQ2hpbGQoY29tcG9uZW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsZWQgd2hlbiB0aGUgZXh0ZXJuYWwgc2V0dGluZ3MgY2hhbmdlLlxuICAgKlxuICAgKiBPdmVycmlkZSBpbiBzdWJjbGFzcyBpZiBuZWVkZWQuIE1ha2Ugc3VyZSB0byBjYWxsIGBhd2FpdCBzdXBlci5vbkV4dGVybmFsU2V0dGluZ3NDaGFuZ2UoKWAgZmlyc3QuXG4gICAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgYXN5bmMgb25FeHRlcm5hbFNldHRpbmdzQ2hhbmdlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHN1cGVyLm9uRXh0ZXJuYWxTZXR0aW5nc0NoYW5nZT8uKCk7XG4gICAgYXdhaXQgdGhpcy50cmlnZ2VyQXN5bmMoJ2V4dGVybmFsU2V0dGluZ3NDaGFuZ2UnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsZWQgd2hlbiB0aGUgcGx1Z2luIGlzIGxvYWRlZC5cbiAgICpcbiAgICogT3JjaGVzdHJhdGVzIGxvYWRpbmc6IHJlZ2lzdGVycyB0aGUgdW5pdmVyc2FsIGNvbXBvbmVudHMsIGxldHMgdGhlIHN1YmNsYXNzIHdpcmUgaXRzIG93blxuICAgKiBjb21wb25lbnRzIHZpYSB7QGxpbmsgb25sb2FkSW1wbH0sIHRoZW4gYXdhaXRzIHRoZSBhc3luYyB0YWlsIG9mIGV2ZXJ5IGxvYWQuXG4gICAqIEVhY2ggY29tcG9uZW50IGxvYWRzIGFzIGl0IGlzIGFkZGVkLCBjaGlsZHJlbi1maXJzdC5cbiAgICpcbiAgICogRG8gTk9UIG92ZXJyaWRlIHRoaXMgbWV0aG9kLiBPdmVycmlkZSB7QGxpbmsgb25sb2FkSW1wbH0gaW5zdGVhZC5cbiAgICovXG4gIHB1YmxpYyBvdmVycmlkZSBhc3luYyBvbmxvYWQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIFRoZSB3cmFwcGVyIGlzIGF0dGFjaGVkIGFuZCBsb2FkZWQgYmVmb3JlIGFueXRoaW5nIGlzIHdpcmVkIHVwLCBzbyBldmVyeSBgYWRkQ2hpbGRgIGJlbG93XG4gICAgICAvLyBsb2FkcyBpdHMgY2hpbGQgc3RyYWlnaHQgYXdheSByYXRoZXIgdGhhbiBxdWV1aW5nIGl0LlxuICAgICAgLy8gVGhhdCBpcyB3aGF0IGxldHMgYSBjb21tYW5kIGhhbmRsZXIgcmVnaXN0ZXIgaXRzIG1lbnUgZXZlbnRzIGZyb20gYG9uUmVnaXN0ZXJlZGAsIHdoaWNoXG4gICAgICAvLyBgcmVnaXN0ZXJDb21tYW5kSGFuZGxlcnNgIGF3YWl0cyBhbmQgd2hpY2ggYSByZWdpc3RyYXIgcmVmdXNlcyB3aGlsZSB1bmxvYWRlZC5cbiAgICAgIC8vIEF0dGFjaGluZyBpdCB1cCBmcm9udCBhbHNvIHJlZ2lzdGVycyB0aGUgd3JhcHBlciBmb3IgdGVhcmRvd24gYmVmb3JlIGFueXRoaW5nIGNhbiB0aHJvdy5cbiAgICAgIC8vIFRoZSBsb2FkIGlzIGV4cGxpY2l0IHJhdGhlciB0aGFuIGxlZnQgdG8gYGFkZENoaWxkYCwgd2hpY2ggbG9hZHMgdGhlIGNoaWxkIG9ubHkgd2hlbiB0aGVcbiAgICAgIC8vIHBsdWdpbiBpdHNlbGYgaXMgbG9hZGVkIOKAlCB0cnVlIHdoZW4gT2JzaWRpYW4gY2FsbHMgYGxvYWQoKWAsIGJ1dCBub3Qgd2hlbiBhIGNhbGxlciBpbnZva2VzXG4gICAgICAvLyBgb25sb2FkKClgIGRpcmVjdGx5LlxuICAgICAgc3VwZXIuYWRkQ2hpbGQodGhpcy51bml2ZXJzYWxXcmFwcGVyQ29tcG9uZW50KTtcbiAgICAgIHRoaXMudW5pdmVyc2FsV3JhcHBlckNvbXBvbmVudC5sb2FkKCk7XG5cbiAgICAgIGF3YWl0IGluaXRJMThOKHRoaXMuY3JlYXRlVHJhbnNsYXRpb25zTWFwKCkpO1xuICAgICAgdGhpcy5wbHVnaW5Db250ZXh0Q29tcG9uZW50ID0gdGhpcy5hZGRVbml2ZXJzYWxDaGlsZChcbiAgICAgICAgbmV3IFBsdWdpbkNvbnRleHRDb21wb25lbnQoe1xuICAgICAgICAgIGFwcDogdGhpcy5hcHAsXG4gICAgICAgICAgcGx1Z2luSWQ6IHRoaXMubWFuaWZlc3QuaWRcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgICB0aGlzLnBsdWdpbk5vdGljZUNvbXBvbmVudCA9IHRoaXMuYWRkVW5pdmVyc2FsQ2hpbGQoXG4gICAgICAgIG5ldyBQbHVnaW5Ob3RpY2VDb21wb25lbnQoe1xuICAgICAgICAgIGFwcDogdGhpcy5hcHAsXG4gICAgICAgICAgcGx1Z2luTmFtZTogdGhpcy5tYW5pZmVzdC5uYW1lXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgICAgdGhpcy5hc3luY0Vycm9ySGFuZGxlckNvbXBvbmVudCA9IHRoaXMuYWRkVW5pdmVyc2FsQ2hpbGQobmV3IEFzeW5jRXJyb3JIYW5kbGVyQ29tcG9uZW50KHRoaXMucGx1Z2luTm90aWNlQ29tcG9uZW50KSk7XG4gICAgICB0aGlzLmFib3J0U2lnbmFsQ29tcG9uZW50ID0gdGhpcy5hZGRVbml2ZXJzYWxDaGlsZChuZXcgQWJvcnRTaWduYWxDb21wb25lbnQodGhpcy5tYW5pZmVzdC5pZCkpO1xuICAgICAgdGhpcy5jb25zb2xlRGVidWdDb21wb25lbnQgPSB0aGlzLmFkZFVuaXZlcnNhbENoaWxkKG5ldyBDb25zb2xlRGVidWdDb21wb25lbnQodGhpcy5tYW5pZmVzdC5pZCkpO1xuICAgICAgdGhpcy5yZXNvdXJjZUxvY2tDb21wb25lbnQgPSB0aGlzLmFkZFVuaXZlcnNhbENoaWxkKG5ldyBSZXNvdXJjZUxvY2tDb21wb25lbnQodGhpcy5hcHAsIHRoaXMubWFuaWZlc3QuaWQpKTtcbiAgICAgIC8vIGBOb3RlYm9vayBOYXZpZ2F0b3JgIGRyYXdzIGl0cyBvd24gZmlsZSB0cmVlIGFuZCBuZXZlciByYWlzZXMgT2JzaWRpYW4ncyBgZmlsZS1tZW51YCAvXG4gICAgICAvLyBgZmlsZXMtbWVudWAgZXZlbnRzLCBzbyBldmVyeSBwbHVnaW4ncyBjb250ZXh0LW1lbnUgaXRlbXMgd291bGQgdmFuaXNoIGZvciBhbnlvbmUgYnJvd3NpbmdcbiAgICAgIC8vIHRocm91Z2ggaXQuIFdpcmVkIGhlcmUgcmF0aGVyIHRoYW4gcGVyLXBsdWdpbjogdGhlIGJyaWRnZSBzdGF5cyBkb3JtYW50IHdoZW4gTm90ZWJvb2tcbiAgICAgIC8vIE5hdmlnYXRvciBpcyBub3QgaW5zdGFsbGVkLCBhbmQgYSBwbHVnaW4gd2l0aCBubyBmaWxlL2ZvbGRlciBoYW5kbGVycyBjb250cmlidXRlcyBub3RoaW5nLlxuICAgICAgY29uc3Qgbm90ZWJvb2tOYXZpZ2F0b3JNZW51RXZlbnRSZWdpc3RyYXJDb21wb25lbnQgPSB0aGlzLmFkZFVuaXZlcnNhbENoaWxkKFxuICAgICAgICBuZXcgTm90ZWJvb2tOYXZpZ2F0b3JNZW51RXZlbnRSZWdpc3RyYXJDb21wb25lbnQoe1xuICAgICAgICAgIGFwcDogdGhpcy5hcHAsXG4gICAgICAgICAgcGx1Z2luTmFtZTogdGhpcy5tYW5pZmVzdC5uYW1lLFxuICAgICAgICAgIHN1Ym1lbnVJY29uOiB0aGlzLmdldE5vdGVib29rTmF2aWdhdG9yTWVudVN1Ym1lbnVJY29uKClcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgICB0aGlzLmNvbW1hbmRIYW5kbGVyQ29tcG9uZW50ID0gdGhpcy5hZGRVbml2ZXJzYWxDaGlsZChcbiAgICAgICAgbmV3IENvbW1hbmRIYW5kbGVyQ29tcG9uZW50KHtcbiAgICAgICAgICBhY3RpdmVGaWxlUHJvdmlkZXI6IG5ldyBBcHBBY3RpdmVGaWxlUHJvdmlkZXIodGhpcy5hcHApLFxuICAgICAgICAgIGFkZGl0aW9uYWxNZW51RXZlbnRSZWdpc3RyYXJzOiBbbm90ZWJvb2tOYXZpZ2F0b3JNZW51RXZlbnRSZWdpc3RyYXJDb21wb25lbnRdLFxuICAgICAgICAgIC8vIFRoZSBjb21wb25lbnQgaXMgdW5pdmVyc2FsOyB0aGUgY29tbWFuZHMgcmVnaXN0ZXJlZCBUSFJPVUdIIGl0IGFyZSBub3QuIEEgc3ViY2xhc3MgcmVnaXN0ZXJzXG4gICAgICAgICAgLy8gaXRzIG93biBmcm9tIGBvbmxvYWRJbXBsYCwgY2xvc2luZyBvdmVyIGNvbGxhYm9yYXRvcnMgdGhhdCBiZWxvbmcgdG8gdGhlIGZlYXR1cmUgc3VyZmFjZSDigJQgc29cbiAgICAgICAgICAvLyB0aG9zZSBjb21tYW5kcyBtdXN0IGdvIGRvd24gd2l0aCB0aGUgc3VyZmFjZSB3aGVuIHRoZSBnYXRlIGNsb3Nlcywgb3IgdGhleSBzaXQgaW4gdGhlIHBhbGV0dGVcbiAgICAgICAgICAvLyBjYWxsaW5nIGludG8gdG9ybi1kb3duIG9iamVjdHMsIGFuZCBhcmUgcmVnaXN0ZXJlZCBhIHNlY29uZCB0aW1lIHdoZW4gdGhlIGdhdGUgcmVvcGVucyBhbmRcbiAgICAgICAgICAvLyBgb25sb2FkSW1wbGAgcnVucyBhZ2Fpbi5cbiAgICAgICAgICAvLyBSZXNvbHZlZCBvbiBldmVyeSBjYWxsIHJhdGhlciB0aGFuIGNhcHR1cmVkIGhlcmUsIGJlY2F1c2UgYHVubG9hZEZlYXR1cmVTdXJmYWNlYCBSRVBMQUNFUyB0aGVcbiAgICAgICAgICAvLyB3cmFwcGVyIGluc3RlYWQgb2YgZW1wdHlpbmcgaXQ6IGVhY2ggY3ljbGUncyBjb21tYW5kcyBiZWxvbmcgdG8gdGhhdCBjeWNsZSdzIHdyYXBwZXIuXG4gICAgICAgICAgY29tbWFuZExpZmV0aW1lT3duZXJQcm92aWRlcjogKCk6IENvbXBvbmVudEV4ID0+IHRoaXMuZ2F0ZWRXcmFwcGVyQ29tcG9uZW50LFxuICAgICAgICAgIGNvbW1hbmRSZWdpc3RyYXI6IG5ldyBQbHVnaW5Db21tYW5kUmVnaXN0cmFyKHRoaXMpLFxuICAgICAgICAgIG1lbnVFdmVudFJlZ2lzdHJhcjogdGhpcy5hZGRVbml2ZXJzYWxDaGlsZChuZXcgTWVudUV2ZW50UmVnaXN0cmFyQ29tcG9uZW50KHRoaXMuYXBwKSksXG4gICAgICAgICAgcGx1Z2luTmFtZTogdGhpcy5tYW5pZmVzdC5uYW1lXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgICAgLy8gQWx3YXlzIGF2YWlsYWJsZTsgdGhlIGNvbW1hbmQncyBvd24gYGNhbkV4ZWN1dGVgIGhpZGVzIGl0IHVubGVzcyB0aGUgYWN0aXZlIG5vdGUgaXMgbG9ja2VkLlxuICAgICAgLy8gVGhlIG9uZSBjb21tYW5kIHRoYXQgbmFtZXMgaXRzIG93bmVyIGV4cGxpY2l0bHksIG9wdGluZyBPVVQgb2YgdGhlIHN1cmZhY2Utc2NvcGVkIGRlZmF1bHQgYWJvdmU6XG4gICAgICAvLyBJdCBpcyB0aGUgcmVzY3VlIGZvciBhIG5vdGUgbGVmdCBsb2NrZWQsIGl0IGNsb3NlcyBvdmVyIG5vdGhpbmcgYnV0IHRoZSB1bml2ZXJzYWwgcmVzb3VyY2UtbG9ja1xuICAgICAgLy8gY29tcG9uZW50LCBhbmQgYSBibG9ja2VkIHBsdWdpbiBpcyBleGFjdGx5IHdoZW4gYSB1c2VyIG1heSBuZWVkIGl0LlxuICAgICAgYXdhaXQgdGhpcy5jb21tYW5kSGFuZGxlckNvbXBvbmVudC5yZWdpc3RlckNvbW1hbmRIYW5kbGVycygoKSA9PiBbXG4gICAgICAgIG5ldyBVbmxvY2tBY3RpdmVOb3RlQ29tbWFuZEhhbmRsZXIoe1xuICAgICAgICAgIGFwcDogdGhpcy5hcHAsXG4gICAgICAgICAgcmVzb3VyY2VMb2NrQ29tcG9uZW50OiB0aGlzLnJlc291cmNlTG9ja0NvbXBvbmVudFxuICAgICAgICB9KVxuICAgICAgXSwgeyBsaWZldGltZU93bmVyOiB0aGlzLmNvbW1hbmRIYW5kbGVyQ29tcG9uZW50IH0pO1xuXG4gICAgICB0aGlzLnBsdWdpblNldHRpbmdzQ29tcG9uZW50ID0gdGhpcy5hZGRVbml2ZXJzYWxDaGlsZChcbiAgICAgICAgbmV3IFBsdWdpblNldHRpbmdzQ29tcG9uZW50QmFzZTxvYmplY3Q+KHtcbiAgICAgICAgICBkYXRhSGFuZGxlcjogbmV3IFBsdWdpbkRhdGFIYW5kbGVyKHRoaXMpLFxuICAgICAgICAgIHBsdWdpbkV2ZW50U291cmNlOiBuZXcgUGx1Z2luRXZlbnRTb3VyY2VJbXBsKHRoaXMpLFxuICAgICAgICAgIHBsdWdpblNldHRpbmdzQ2xhc3M6IE9iamVjdFxuICAgICAgICB9KVxuICAgICAgKTtcblxuICAgICAgLy8gVGhlIGdhdGUuIEl0IGxvYWRzIHRoZSBmZWF0dXJlIHN1cmZhY2UgaXRzZWxmIG9uY2UgZXZlcnkgZGVjbGFyZWQgZGVwZW5kZW5jeSBpcyBzYXRpc2ZpZWQgYW5kIG5vXG4gICAgICAvLyBkZWNsYXJlZCBjb25mbGljdCBob2xkcyDigJQgd2hpY2ggZm9yIGEgcGx1Z2luIGRlY2xhcmluZyBuZWl0aGVyIGlzIGltbWVkaWF0ZWx5LCBzeW5jaHJvbm91c2x5LFxuICAgICAgLy8gYmVmb3JlIHRoaXMgbGluZSByZXR1cm5zIOKAlCBhbmQgdW5sb2FkcyBpdCBhZ2FpbiBpZiBhIGRlcGVuZGVuY3kgaXMgbGF0ZXIgZGlzYWJsZWQgb3IgdW5pbnN0YWxsZWQsXG4gICAgICAvLyBvciBhIGNvbmZsaWN0aW5nIHBsdWdpbiBpcyBlbmFibGVkLiBBIHBsdWdpbiB0aGF0IGlzIGJsb2NrZWQgdGhlcmVmb3JlIHJlYWNoZXMgYGxvYWRXaXRoUHJvbWlzZXNgXG4gICAgICAvLyBiZWxvdyBoYXZpbmcgcmVnaXN0ZXJlZCBub3RoaW5nIG9mIGl0cyBvd24sIHdpdGggb25seSB0aGUgdW5pdmVyc2FsIGNvbXBvbmVudHMgYWJvdmUgcnVubmluZyB0b1xuICAgICAgLy8gZXhwbGFpbiB3aHkgYW5kIHRvIG9mZmVyIHRoZSByZXBhaXIuXG4gICAgICAvLyBBc3NpZ25lZCBCRUZPUkUgdGhlIGFkZCwgdW5saWtlIGV2ZXJ5IHVuaXZlcnNhbCBjb21wb25lbnQgYWJvdmUsIGFuZCB0aGF0IG9yZGVyIGlzIHRoZSB3aG9sZVxuICAgICAgLy8gcG9pbnQuIEFkZGluZyB0aGlzIG9uZSBpcyB3aGF0IHJ1bnMgYG9ubG9hZEltcGxgLCBwZXIgdGhlIHBhcmFncmFwaCBhYm92ZSwgc28gdGhlIGFzc2lnbm1lbnRcbiAgICAgIC8vIHN0YXRlbWVudCBoYXMgbm90IHJldHVybmVkIHlldCB3aGlsZSB0aGUgc3ViY2xhc3MgaXMgcnVubmluZyDigJQgYW5kIGEgc2V0dGluZ3MgdGFiIGJ1aWx0IHRoZXJlXG4gICAgICAvLyByZWFkcyBgdGhpcy5wbHVnaW5HYXRlQ29tcG9uZW50YCB0byByZW5kZXIgdGhlIGBXYXJuYCBiYW5uZXIuIEFzc2lnbmluZyBhZnRlciB0aGUgYWRkIHdvdWxkXG4gICAgICAvLyBtYWtlIHRoYXQgcmVhZCB0aHJvdyBgVmFsdWUgaXMgdW5kZWZpbmVkYCBvdXQgb2YgdGhlIGdldHRlciwgd2hpY2ggaXMgYW4gb3BhcXVlIHdheSB0byBzYXlcbiAgICAgIC8vIFwidG9vIGVhcmx5XCIuIE5vdGhpbmcgYWJvdXQgY2hpbGQtYWRkIG9yZGVyIG1vdmVzOiB0aGUgc2VxdWVuY2Ugb2YgYGFkZFVuaXZlcnNhbENoaWxkYCBjYWxscyBpc1xuICAgICAgLy8gdW5jaGFuZ2VkLCBhbmQgYHNldENvbXBvbmVudGAgaXMgYSBwbGFpbiBzdG9yZS5cbiAgICAgIGNvbnN0IHBsdWdpbkdhdGVDb21wb25lbnQgPSBuZXcgUGx1Z2luR2F0ZUNvbXBvbmVudCh7XG4gICAgICAgIGNvbmZsaWN0czogdGhpcy5nZXRQbHVnaW5Db25mbGljdHMoKSxcbiAgICAgICAgZGVwZW5kZW5jaWVzOiB0aGlzLmdldFBsdWdpbkRlcGVuZGVuY2llcygpLFxuICAgICAgICBsb2FkRmVhdHVyZVN1cmZhY2U6ICgpOiBQcm9taXNlPHZvaWQ+ID0+IHRoaXMubG9hZEZlYXR1cmVTdXJmYWNlKCksXG4gICAgICAgIHBsdWdpbjogdGhpcyxcbiAgICAgICAgcGx1Z2luTm90aWNlQ29tcG9uZW50OiB0aGlzLnBsdWdpbk5vdGljZUNvbXBvbmVudCxcbiAgICAgICAgdW5sb2FkRmVhdHVyZVN1cmZhY2U6ICgpOiB2b2lkID0+IHtcbiAgICAgICAgICB0aGlzLnVubG9hZEZlYXR1cmVTdXJmYWNlKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgdGhpcy5wbHVnaW5HYXRlQ29tcG9uZW50ID0gcGx1Z2luR2F0ZUNvbXBvbmVudDtcbiAgICAgIHRoaXMuYWRkVW5pdmVyc2FsQ2hpbGQocGx1Z2luR2F0ZUNvbXBvbmVudCk7XG5cbiAgICAgIC8vIEV2ZXJ5IGNoaWxkIGhhcyBhbHJlYWR5IGxvYWRlZCBhcyBpdCB3YXMgYWRkZWQ7IHRoaXMgYXdhaXRzIHRoZWlyIGFjY3VtdWxhdGVkIGFzeW5jIHRhaWxzIGFuZFxuICAgICAgLy8gcmVwb3J0cyBhbnkgZmFpbHVyZSBhcyBhIHNpbmdsZSBgQWdncmVnYXRlRXJyb3JgLlxuICAgICAgYXdhaXQgdGhpcy51bml2ZXJzYWxXcmFwcGVyQ29tcG9uZW50LmxvYWRXaXRoUHJvbWlzZXMoKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcHJpbnRFcnJvcihuZXcgRXJyb3IoYEVycm9yIGxvYWRpbmcgcGx1Z2luICR7dGhpcy5tYW5pZmVzdC5uYW1lfSAoJHt0aGlzLm1hbmlmZXN0LmlkfSlgLCB7IGNhdXNlOiBlcnJvciB9KSk7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2FsbGVkIHdoZW4gdGhlIHBsdWdpbiBpcyB1bmxvYWRlZC5cbiAgICpcbiAgICogQW5ub3VuY2VzIHRoZSBkZXBhcnR1cmUgb24gYGFwcC53b3Jrc3BhY2VgIHNvIGFueXRoaW5nIGRlcGVuZGluZyBvbiB0aGlzIHBsdWdpbiBsZWFybnMgb2YgaXQgYXQgdGhlXG4gICAqIG1vbWVudCBpdCBoYXBwZW5zLCByYXRoZXIgdGhhbiBkaXNjb3ZlcmluZyBpdCBsYXRlciB0aHJvdWdoIGJlaGF2aW9yIHRoYXQgcXVpZXRseSBzdG9wcGVkLlxuICAgKlxuICAgKiBEbyBOT1Qgb3ZlcnJpZGUgdGhpcyBtZXRob2Q7IHB1dCB0ZWFyZG93biBvbiBhIGNvbXBvbmVudCBpbnN0ZWFkLCB3aGljaCB1bmxvYWRzIHdpdGggdGhlIHBsdWdpbi5cbiAgICovXG4gIHB1YmxpYyBvdmVycmlkZSBvbnVubG9hZCgpOiB2b2lkIHtcbiAgICB0aGlzLmJyb2FkY2FzdFVubG9hZGVkKCk7XG4gICAgc3VwZXIub251bmxvYWQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIGEgY2hpbGQgY29tcG9uZW50LlxuICAgKlxuICAgKiBAdHlwZVBhcmFtIFRDb21wb25lbnQgLSBUaGUgdHlwZSBvZiBjb21wb25lbnQgdG8gcmVtb3ZlLlxuICAgKiBAcGFyYW0gY29tcG9uZW50IC0gVGhlIGNvbXBvbmVudCBpbnN0YW5jZSB0byByZW1vdmUuXG4gICAqIEByZXR1cm5zIFRoZSByZW1vdmVkIGNvbXBvbmVudC5cbiAgICovXG4gIHB1YmxpYyBvdmVycmlkZSByZW1vdmVDaGlsZDxUQ29tcG9uZW50IGV4dGVuZHMgQ29tcG9uZW50Pihjb21wb25lbnQ6IFRDb21wb25lbnQpOiBUQ29tcG9uZW50IHtcbiAgICAvLyBSb3V0ZWQgYnkgb3duZXJzaGlwIHJhdGhlciB0aGFuIGJ5IHdoaWNoIHRpZXIgYGFkZENoaWxkYCB3b3VsZCBoYXZlIGNob3NlbiwgYmVjYXVzZSB0aGUgdHdvIGRvIG5vdFxuICAgIC8vIGFsd2F5cyBhZ3JlZTogYSB1bml2ZXJzYWwgY29tcG9uZW50IGlzIHBhcmVudGVkIGRpcmVjdGx5IG9uIHRoZSB1bml2ZXJzYWwgd3JhcHBlciwgeWV0IGEgc3ViY2xhc3NcbiAgICAvLyByZXBsYWNpbmcgb25lIGdvZXMgdGhyb3VnaCB0aGUgc2FtZSBwdWJsaWMgYHJlbW92ZUNoaWxkYCBhcyBpdCB3b3VsZCBmb3IgaXRzIG93biBjaGlsZHJlbi5cbiAgICByZXR1cm4gdGhpcy5nYXRlZFdyYXBwZXJDb21wb25lbnQuaGFzQ2hpbGQoY29tcG9uZW50KSA/IHRoaXMuZ2F0ZWRXcmFwcGVyQ29tcG9uZW50LnJlbW92ZUNoaWxkKGNvbXBvbmVudCkgOiB0aGlzLnVuaXZlcnNhbFdyYXBwZXJDb21wb25lbnQucmVtb3ZlQ2hpbGQoY29tcG9uZW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm92aWRlcyB0aGUgdHJhbnNsYXRpb25zIG1hcCB1c2VkIHRvIGluaXRpYWxpemUgaTE4biBkdXJpbmcge0BsaW5rIG9ubG9hZH0uXG4gICAqXG4gICAqIE92ZXJyaWRlIGluIHN1YmNsYXNzIHRvIHN1cHBseSBwbHVnaW4tc3BlY2lmaWMgdHJhbnNsYXRpb25zLiBUaGUgZGVmYXVsdCByZXR1cm5zIHRoZSBidWlsdC1pblxuICAgKiBgQG1uYW91bW92L29ic2lkaWFuLWxpYmAgdHJhbnNsYXRpb25zLlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgdHJhbnNsYXRpb25zIG1hcC5cbiAgICovXG4gIHByb3RlY3RlZCBjcmVhdGVUcmFuc2xhdGlvbnNNYXAoKTogVHJhbnNsYXRpb25zTWFwIHtcbiAgICByZXR1cm4gZGVmYXVsdFRyYW5zbGF0aW9uc01hcDtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm92aWRlcyB0aGUgaWNvbiBzaG93biBvbiB0aGUgcGx1Z2luJ3MgcGFyZW50IGVudHJ5IGluIGBOb3RlYm9vayBOYXZpZ2F0b3JgJ3MgY29udGV4dCBtZW51cy5cbiAgICpcbiAgICogT3ZlcnJpZGUgaW4gc3ViY2xhc3MgdG8gYnJhbmQgdGhhdCBlbnRyeTsgdGhlIGRlZmF1bHQgbGVhdmVzIGl0IHdpdGhvdXQgYW4gaWNvbi4gVGhlIGVudHJ5IGlzXG4gICAqIHRpdGxlZCB3aXRoIHRoZSBwbHVnaW4gbmFtZSBhbmQgaXMgYWRkZWQgYXV0b21hdGljYWxseSDigJQgc2VlXG4gICAqIHtAbGluayBOb3RlYm9va05hdmlnYXRvck1lbnVFdmVudFJlZ2lzdHJhckNvbXBvbmVudH0uXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSBpY29uLCBvciBgJydgIGZvciBubyBpY29uLlxuICAgKi9cbiAgcHJvdGVjdGVkIGdldE5vdGVib29rTmF2aWdhdG9yTWVudVN1Ym1lbnVJY29uKCk6IEljb25OYW1lIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICAvKipcbiAgICogUHJvdmlkZXMgdGhlIEFQSXMgdGhpcyBwbHVnaW4gZXhwb3NlcyB0byBvdGhlciBwbHVnaW5zLlxuICAgKlxuICAgKiBPdmVycmlkZSBpbiBzdWJjbGFzcyB0byBwdWJsaXNoIG9uZS4gVGhlIGRlZmF1bHQgcHVibGlzaGVzIG5vbmUuIENhbGxlZCBhZnRlciB7QGxpbmsgb25sb2FkSW1wbH0sIHNvIGFcbiAgICogZGVjbGFyYXRpb24gbWF5IHJlZmVyZW5jZSBhbnl0aGluZyBpdCBjcmVhdGVkOyB0aGUgcmV0dXJuZWQgZGVjbGFyYXRpb25zIGFyZSBwdWJsaXNoZWQgdGhyb3VnaFxuICAgKiBgcHVibGlzaFBsdWdpbkFwaWAgYW5kIHJldm9rZWQgd2hlbiB0aGUgcGx1Z2luJ3MgZmVhdHVyZSBzdXJmYWNlIHVubG9hZHMuXG4gICAqXG4gICAqIFJldHVybmluZyBhIExJU1QgcmF0aGVyIHRoYW4gYSBzaW5nbGUgQVBJIGlzIGRlbGliZXJhdGU6IHRoZSByZWdpc3RyeSBzdXBwb3J0cyBzZXZlcmFsIGNvbnRyYWN0XG4gICAqIHZlcnNpb25zIHB1Ymxpc2hlZCBzaWRlIGJ5IHNpZGUsIHdoaWNoIGlzIGhvdyBhIHByb3ZpZGVyIHNoaXBzIGEgYnJlYWtpbmcgYDIuMC4wYCB3aXRob3V0IHN0cmFuZGluZ1xuICAgKiBjb25zdW1lcnMgc3RpbGwgcGlubmVkIHRvIGBeMWAuXG4gICAqXG4gICAqIEV2ZXJ5IGRlY2xhcmF0aW9uIGhlcmUgaXMgcHVibGlzaGVkIEJFRk9SRSB0aGUgYG9ic2lkaWFuLWxpYjpwbHVnaW4tbG9hZGVkYCBicm9hZGNhc3QsIHdoaWNoIGlzXG4gICAqIHdoYXQgbGV0cyBhIGxpc3RlbmVyIGNhbGwgdGhlc2UgQVBJcyB0aGUgbW9tZW50IGl0IGhlYXJzIHRoYXQgZXZlbnQuXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSBBUEkgZGVjbGFyYXRpb25zLlxuICAgKi9cbiAgcHJvdGVjdGVkIGdldFBsdWdpbkFwaXMoKTogUGx1Z2luQXBpRGVjbGFyYXRpb25bXSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgLyoqXG4gICAqIFByb3ZpZGVzIHRoZSBwbHVnaW5zIHRoaXMgb25lIHJlZnVzZXMsIG9yIHdhcm5zIGFib3V0LCBydW5uaW5nIGJlc2lkZS5cbiAgICpcbiAgICogT3ZlcnJpZGUgaW4gc3ViY2xhc3MgdG8gZGVjbGFyZSBhbiBvdmVybGFwLiBUaGUgZGVmYXVsdCBkZWNsYXJlcyBub25lLlxuICAgKlxuICAgKiBBIGBCbG9ja2AgY29uZmxpY3QgaXMgdGhlIG1pcnJvciBpbWFnZSBvZiBhIGRlcGVuZGVuY3k6IHdoaWxlIGEgY29uZmxpY3RpbmcgcGx1Z2luIGlzIGVuYWJsZWQgYXQgYVxuICAgKiBjb25mbGljdGluZyB2ZXJzaW9uLCB7QGxpbmsgb25sb2FkSW1wbH0gZG9lcyBub3QgcnVuIGF0IGFsbCBhbmQgdGhlIHBsdWdpbiByZWdpc3RlcnMgbm90aGluZy4gRGVjbGFyZVxuICAgKiBpdCB3aGVuIGJvdGggcGx1Z2lucyBhY3Rpbmcgb24gdGhlIHNhbWUgb3BlcmF0aW9uIGRhbWFnZXMgdGhlIHZhdWx0IOKAlCB0aGVyZSBpcyBubyByZWxpYWJsZSB3YXkgdG8gd2luXG4gICAqIHRoYXQgcmFjZSwgYmVjYXVzZSB3aGljaGV2ZXIgcGx1Z2luIGxvYWRlZCBmaXJzdCBrZWVwcyBhIGhhbmQgb24gdGhlIHdoZWVsLCBzbyByZWZ1c2luZyBkZXRlcm1pbmlzdGljYWxseVxuICAgKiBiZWF0cyBjb21wZXRpbmcgdW5wcmVkaWN0YWJseS4gQSBgV2FybmAgY29uZmxpY3QgZGVjbGFyZXMgYW4gb3ZlcmxhcCB0aGF0IGlzIG1lcmVseSBhbm5veWluZywgc3VjaCBhcyBhXG4gICAqIGR1cGxpY2F0ZWQgY29tbWFuZDogYm90aCBwbHVnaW5zIGtlZXAgcnVubmluZyBhbmQgdGhlIHVzZXIgaXMgdG9sZC5cbiAgICpcbiAgICogVW5saWtlIGEgZGVwZW5kZW5jeSwgYSBjb25mbGljdGluZyBwbHVnaW4gbmVlZCBub3QgcHVibGlzaCBhbnl0aGluZyDigJQgaXQgaXMgZGV0ZWN0ZWQgYnkgcmVhZGluZyBpdHNcbiAgICogaW5zdGFsbGVkIHZlcnNpb24sIHdoaWNoIGlzIHRoZSBvbmx5IHRoaW5nIGFib3V0IGFub3RoZXIgcGx1Z2luIHRoYXQgcmVhZHMgdGhlIHNhbWUgcmVnYXJkbGVzcyBvZiBsb2FkXG4gICAqIG9yZGVyLlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgZGVjbGFyZWQgY29uZmxpY3RzLlxuICAgKi9cbiAgcHJvdGVjdGVkIGdldFBsdWdpbkNvbmZsaWN0cygpOiBQbHVnaW5Db25mbGljdFtdIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICAvKipcbiAgICogUHJvdmlkZXMgdGhlIHBsdWdpbnMgdGhpcyBvbmUgY2Fubm90IHdvcmsgd2l0aG91dC5cbiAgICpcbiAgICogT3ZlcnJpZGUgaW4gc3ViY2xhc3MgdG8gZGVjbGFyZSBhIG1hbmRhdG9yeSBkZXBlbmRlbmN5LiBUaGUgZGVmYXVsdCBkZWNsYXJlcyBub25lLCBhbmQgc3VjaCBhIHBsdWdpblxuICAgKiBsb2FkcyBleGFjdGx5IGFzIGl0IGFsd2F5cyBoYXMuXG4gICAqXG4gICAqIEEgZGVjbGFyZWQgZGVwZW5kZW5jeSBpcyBNQU5EQVRPUlksIHVubGlrZSB0aGUgb2ZmZXIgYFBsdWdpblN1Z2dlc3Rpb25Db21wb25lbnRgIG1ha2VzOiB3aGlsZSBvbmUgaXNcbiAgICogbWlzc2luZywgZGlzYWJsZWQsIG9yIHRvbyBvbGQsIHtAbGluayBvbmxvYWRJbXBsfSBkb2VzIG5vdCBydW4gYXQgYWxsIGFuZCB0aGUgcGx1Z2luIHJlZ2lzdGVycyBub3RoaW5nXG4gICAqIOKAlCBubyBjb21tYW5kcywgbm8gaGFuZGxlcnMsIG5vIHBhdGNoZXMuIEl0IHN0YXlzIGVuYWJsZWQgaW4gT2JzaWRpYW4ncyBsaXN0IHJhdGhlciB0aGFuIGRpc2FibGluZ1xuICAgKiBpdHNlbGYsIGJlY2F1c2UgdGhlIGVuYWJsZWQgc2V0IGlzIHRoZSB1c2VyJ3MgdG8gY2hhbmdlLCBhbmQgaXQgZXhwbGFpbnMgaXRzZWxmIHRocm91Z2ggYSBub3RpY2UgYW5kIGFcbiAgICogc2V0dGluZ3MgYmFubmVyIHRoYXQgaW5zdGFsbHMgdGhlIG1pc3NpbmcgcGx1Z2luIGluIG9uZSBjbGljay4gVGhlIGxvYWQgY29tcGxldGVzIHRoZSBtb21lbnQgdGhlXG4gICAqIGRlcGVuZGVuY3kgYXJyaXZlcywgd2l0aCBubyByZXN0YXJ0LlxuICAgKlxuICAgKiBBIGRlcGVuZGVuY3kgbXVzdCBwdWJsaXNoIGFuIEFQSSB0aHJvdWdoIGBwdWJsaXNoUGx1Z2luQXBpYCwgd2hpY2ggaXMgd2hhdCBtYWtlcyBpdHMgcHJlc2VuY2UsXG4gICAqIGFic2VuY2UsIHZlcnNpb24gYW5kIGRlcGFydHVyZSBhbGwgb2JzZXJ2YWJsZSB0aHJvdWdoIG9uZSBtZWNoYW5pc20uIEEgcGx1Z2luIHdpdGggbm90aGluZyB0byBleHBvc2VcbiAgICogY2FuIHB1Ymxpc2ggYW4gZW1wdHkgQVBJIHB1cmVseSBzbyBpdCBjYW4gYmUgZGVwZW5kZWQgdXBvbi5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIGRlY2xhcmVkIGRlcGVuZGVuY2llcy5cbiAgICovXG4gIHByb3RlY3RlZCBnZXRQbHVnaW5EZXBlbmRlbmNpZXMoKTogUGx1Z2luRGVwZW5kZW5jeVtdIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICAvKipcbiAgICogQ2FsbGVkIGR1cmluZyB7QGxpbmsgb25sb2FkfSB0byB3aXJlIHBsdWdpbi1zcGVjaWZpYyBjaGlsZCBjb21wb25lbnRzLlxuICAgKlxuICAgKiBPdmVycmlkZSBpbiBzdWJjbGFzcyB0byBhZGQgY2hpbGQgY29tcG9uZW50cyB2aWEge0BsaW5rIGFkZENoaWxkfS4gVGhlIHVuaXZlcnNhbCBjb21wb25lbnRzIGFyZVxuICAgKiBhdmFpbGFibGUgaGVyZS4gQ2hpbGRyZW4gYXJlIGxvYWRlZCBzZXF1ZW50aWFsbHkgaW4gdGhlIG9yZGVyIHRoZXkgYXJlIGFkZGVkIChjaGlsZHJlbi1maXJzdCkuXG4gICAqXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgc3ViY2xhc3MgbG9hZCBsb2dpYyBpcyBjb21wbGV0ZS5cbiAgICovXG4gIHByb3RlY3RlZCBvbmxvYWRJbXBsKCk6IFByb21pc2FibGU8dm9pZD4ge1xuICAgIHJldHVybiBub29wQXN5bmMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdG9yZXMgYSB1bml2ZXJzYWwgY29tcG9uZW50LCB1bmxvYWRpbmcgd2hpY2hldmVyIGNvbXBvbmVudCB0aGUga2V5IGhlbGQgYmVmb3JlLlxuICAgKlxuICAgKiBLZXllZCBieSBuYW1lIHJhdGhlciB0aGFuIGhhbmRlZCB0aGUgcHJldmlvdXMgdmFsdWUgYmVjYXVzZSBga2V5b2YgdGhpc2AgZXhjbHVkZXMgcHJpdmF0ZVxuICAgKiBtZW1iZXJzLCBzbyB0aGUgY29tcG9uZW50cyBsaXZlIGluIGEgc2luZ2xlIHtAbGluayBQbHVnaW5CYXNlQ29tcG9uZW50c30gYmFnIHdob3NlIGtleXMgQVJFXG4gICAqIGluZGV4YWJsZS5cbiAgICpcbiAgICogQHR5cGVQYXJhbSBUS2V5IC0gVGhlIGtleSBvZiB0aGUgY29tcG9uZW50IHRvIHN0b3JlLlxuICAgKiBAcGFyYW0ga2V5IC0gVGhlIGtleSBvZiB0aGUgY29tcG9uZW50IHRvIHN0b3JlLlxuICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgY29tcG9uZW50IHRvIHN0b3JlLlxuICAgKi9cbiAgLyoqXG4gICAqIEFkZHMgYSBjb21wb25lbnQgdG8gdGhlIHVuaXZlcnNhbCB0aWVyLCB3aGljaCBvdXRsaXZlcyBhbnkgZGVwZW5kZW5jeS5cbiAgICpcbiAgICogUHJpdmF0ZSBvbiBwdXJwb3NlOiBvbmx5IHRoaXMgY2xhc3MgZGVjaWRlcyB3aGF0IGlzIHVuaXZlcnNhbC4gQSBzdWJjbGFzcyBhZGRpbmcgb25lIG9mIGl0cyBvd24gZ29lc1xuICAgKiB0aHJvdWdoIHtAbGluayBhZGRDaGlsZH0gYW5kIGxhbmRzIGluIHRoZSBnYXRlZCB0aWVyLCB3aGVyZSBpdCBiZWxvbmdzLlxuICAgKlxuICAgKiBAdHlwZVBhcmFtIFRDb21wb25lbnQgLSBUaGUgdHlwZSBvZiBjb21wb25lbnQgdG8gYWRkLlxuICAgKiBAcGFyYW0gY29tcG9uZW50IC0gVGhlIGNvbXBvbmVudCBpbnN0YW5jZSB0byBhZGQuXG4gICAqIEByZXR1cm5zIFRoZSBhZGRlZCBjb21wb25lbnQuXG4gICAqL1xuICBwcml2YXRlIGFkZFVuaXZlcnNhbENoaWxkPFRDb21wb25lbnQgZXh0ZW5kcyBDb21wb25lbnQ+KGNvbXBvbmVudDogVENvbXBvbmVudCk6IFRDb21wb25lbnQge1xuICAgIHJldHVybiB0aGlzLnVuaXZlcnNhbFdyYXBwZXJDb21wb25lbnQuYWRkQ2hpbGQoY29tcG9uZW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBbm5vdW5jZXMgb24gYGFwcC53b3Jrc3BhY2VgIHRoYXQgdGhpcyBwbHVnaW4gaXMgbG9hZGVkIGFuZCBpdHMgQVBJcyBhcmUgY2FsbGFibGUuXG4gICAqL1xuICBwcml2YXRlIGJyb2FkY2FzdExvYWRlZCgpOiB2b2lkIHtcbiAgICB0aGlzLmxpZmVjeWNsZUV2ZW50UGF5bG9hZCA9IHtcbiAgICAgIGFwaVZlcnNpb25zOiB0aGlzLmdldFBsdWdpbkFwaXMoKS5tYXAoKGRlY2xhcmF0aW9uKSA9PiBkZWNsYXJhdGlvbi5hcGlWZXJzaW9uKSxcbiAgICAgIGRlcGVuZGVuY3lQbHVnaW5JZHM6IHRoaXMuZ2V0UGx1Z2luRGVwZW5kZW5jaWVzKCkubWFwKChkZXBlbmRlbmN5KSA9PiBkZXBlbmRlbmN5LnBsdWdpbklkKSxcbiAgICAgIHBsdWdpbklkOiB0aGlzLm1hbmlmZXN0LmlkLFxuICAgICAgcGx1Z2luTmFtZTogdGhpcy5tYW5pZmVzdC5uYW1lLFxuICAgICAgcGx1Z2luVmVyc2lvbjogdGhpcy5tYW5pZmVzdC52ZXJzaW9uXG4gICAgfTtcblxuICAgIHRyaWdnZXJQbHVnaW5MaWZlY3ljbGVFdmVudCh7XG4gICAgICBhcHA6IHRoaXMuYXBwLFxuICAgICAgbmFtZTogUExVR0lOX0xPQURFRF9FVkVOVF9OQU1FLFxuICAgICAgcGF5bG9hZDogdGhpcy5saWZlY3ljbGVFdmVudFBheWxvYWRcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBbm5vdW5jZXMgb24gYGFwcC53b3Jrc3BhY2VgIHRoYXQgdGhpcyBwbHVnaW4ncyBzdXJmYWNlIGhhcyBnb25lIGF3YXkuXG4gICAqXG4gICAqIFNpbGVudCB1bmxlc3MgYSBsb2FkZWQgYnJvYWRjYXN0IGlzIG91dHN0YW5kaW5nLCBzbyB0aGUgdHdvIGV2ZW50cyBzdGF5IHBhaXJlZDogYSBwbHVnaW4gdGhhdCBuZXZlclxuICAgKiBnb3QgcGFzdCBpdHMgZGVwZW5kZW5jeSBnYXRlIG5ldmVyIGFubm91bmNlZCBpdHNlbGYsIGFuZCBtdXN0IG5vdCBhbm5vdW5jZSBhIGRlcGFydHVyZSBlaXRoZXIuXG4gICAqL1xuICBwcml2YXRlIGJyb2FkY2FzdFVubG9hZGVkKCk6IHZvaWQge1xuICAgIGNvbnN0IHBheWxvYWQgPSB0aGlzLmxpZmVjeWNsZUV2ZW50UGF5bG9hZDtcbiAgICBpZiAoIXBheWxvYWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmxpZmVjeWNsZUV2ZW50UGF5bG9hZCA9IG51bGw7XG4gICAgdHJpZ2dlclBsdWdpbkxpZmVjeWNsZUV2ZW50KHtcbiAgICAgIGFwcDogdGhpcy5hcHAsXG4gICAgICBuYW1lOiBQTFVHSU5fVU5MT0FERURfRVZFTlRfTkFNRSxcbiAgICAgIHBheWxvYWRcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZHMgYW5kIGxvYWRzIHRoZSBzdWJjbGFzcydzIGZlYXR1cmUgc3VyZmFjZSwgdGhlbiBwdWJsaXNoZXMgaXRzIEFQSXMgYW5kIGFubm91bmNlcyBpdHNlbGYuXG4gICAqXG4gICAqIE5PVCBpZGVtcG90ZW50LCBkZWxpYmVyYXRlbHkuIGBQbHVnaW5HYXRlQ29tcG9uZW50YCBvd25zIHRoZSB1cC9kb3duIHN0YXRlIG1hY2hpbmUgYW5kIGNhbGxzXG4gICAqIHRoaXMgb25seSBvbiBhIHJlYWwgdHJhbnNpdGlvbjsgYSBzZWNvbmQgZ3VhcmQgaGVyZSB3b3VsZCBiZSBhIHNlY29uZCBjb3B5IG9mIHRoYXQgc3RhdGUsIHdoaWNoIGlzIHRoZVxuICAgKiBraW5kIG9mIGR1cGxpY2F0ZSB0aGF0IGRyaWZ0cy5cbiAgICpcbiAgICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyBvbmNlIHRoZSBzdXJmYWNlIGlzIGxvYWRlZCBhbmQgdGhlIGJyb2FkY2FzdCBoYXMgYmVlbiBtYWRlLlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBsb2FkRmVhdHVyZVN1cmZhY2UoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gTG9hZGVkIGV4cGxpY2l0bHkgZm9yIHRoZSBzYW1lIHJlYXNvbiB0aGUgdW5pdmVyc2FsIHdyYXBwZXIgaXM6IGBhZGRDaGlsZGAgbG9hZHMgYSBjaGlsZCBvbmx5IG9uY2VcbiAgICAvLyBpdHMgcGFyZW50IGlzIGxvYWRlZCwgYW5kIHRoZSBzdXJmYWNlIGhhcyB0byBiZSBsaXZlIGJlZm9yZSBgb25sb2FkSW1wbGAgc3RhcnRzIGFkZGluZyB0byBpdC5cbiAgICBjb25zdCBnYXRlZFdyYXBwZXJDb21wb25lbnQgPSB0aGlzLmdhdGVkV3JhcHBlckNvbXBvbmVudDtcbiAgICB0aGlzLnVuaXZlcnNhbFdyYXBwZXJDb21wb25lbnQuYWRkQ2hpbGQoZ2F0ZWRXcmFwcGVyQ29tcG9uZW50KTtcbiAgICBnYXRlZFdyYXBwZXJDb21wb25lbnQubG9hZCgpO1xuXG4gICAgYXdhaXQgdGhpcy5vbmxvYWRJbXBsKCk7XG4gICAgYXdhaXQgZ2F0ZWRXcmFwcGVyQ29tcG9uZW50LmxvYWRXaXRoUHJvbWlzZXMoKTtcblxuICAgIGZvciAoY29uc3QgZGVjbGFyYXRpb24gb2YgdGhpcy5nZXRQbHVnaW5BcGlzKCkpIHtcbiAgICAgIHB1Ymxpc2hQbHVnaW5BcGkoe1xuICAgICAgICAuLi5kZWNsYXJhdGlvbixcbiAgICAgICAgLy8gUmV2b2tlZCB3aXRoIHRoZSBTVVJGQUNFLCBub3Qgd2l0aCB0aGUgcGx1Z2luOiBhIHBsdWdpbiB3aG9zZSBkZXBlbmRlbmN5IGdvZXMgYXdheSBrZWVwcyBydW5uaW5nXG4gICAgICAgIC8vIGl0cyB1bml2ZXJzYWwgY29tcG9uZW50cywgYW5kIGEgY29uc3VtZXIgbXVzdCBub3QgYmUgbGVmdCBob2xkaW5nIGEgaGFuZGxlIGludG8gdGhlIGhhbGYgb2YgaXRcbiAgICAgICAgLy8gdGhhdCB3YXMganVzdCB0b3JuIGRvd24uXG4gICAgICAgIGNvbXBvbmVudDogZ2F0ZWRXcmFwcGVyQ29tcG9uZW50LFxuICAgICAgICBwbHVnaW46IHRoaXNcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMuYnJvYWRjYXN0TG9hZGVkKCk7XG4gIH1cblxuICBwcml2YXRlIHNldENvbXBvbmVudDxUS2V5IGV4dGVuZHMga2V5b2YgUGx1Z2luQmFzZUNvbXBvbmVudHM+KGtleTogVEtleSwgdmFsdWU6IE5vbk51bGxhYmxlPFBsdWdpbkJhc2VDb21wb25lbnRzW1RLZXldPik6IHZvaWQge1xuICAgIGNvbnN0IG9sZENvbXBvbmVudCA9IHRoaXMuY29tcG9uZW50c1trZXldO1xuICAgIGlmIChvbGRDb21wb25lbnQpIHtcbiAgICAgIHRoaXMucmVtb3ZlQ2hpbGQob2xkQ29tcG9uZW50KTtcbiAgICB9XG4gICAgdGhpcy5jb21wb25lbnRzW2tleV0gPSB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUZWFycyB0aGUgc3ViY2xhc3MncyBmZWF0dXJlIHN1cmZhY2UgZG93biwgbGVhdmluZyB0aGUgdW5pdmVyc2FsIGNvbXBvbmVudHMgcnVubmluZy5cbiAgICovXG4gIHByaXZhdGUgdW5sb2FkRmVhdHVyZVN1cmZhY2UoKTogdm9pZCB7XG4gICAgY29uc3QgZ2F0ZWRXcmFwcGVyQ29tcG9uZW50ID0gdGhpcy5nYXRlZFdyYXBwZXJDb21wb25lbnQ7XG5cbiAgICAvLyBSZXBsYWNlZCBCRUZPUkUgdGhlIG9sZCBvbmUgaXMgdW5sb2FkZWQsIHNvIGFueXRoaW5nIHRoYXQgcmVzdW1lcyBtaWQtdGVhcmRvd24gYW5kIGNhbGxzIGBhZGRDaGlsZGBcbiAgICAvLyBwYXJrcyBpdHMgY2hpbGQgb24gdGhlIGZyZXNoIHN1cmZhY2UgcmF0aGVyIHRoYW4gb24gdGhlIG9uZSBiZWluZyB0b3JuIGRvd24g4oCUIHdoZXJlIGBDb21wb25lbnRFeGBcbiAgICAvLyB3b3VsZCByZWZ1c2UgaXQgb3V0cmlnaHQsIHNpbmNlIGl0IHJlZnVzZXMgY2hpbGRyZW4gYWRkZWQgdG8gYW4gYWxyZWFkeS11bmxvYWRlZCBjb21wb25lbnQuXG4gICAgdGhpcy5nYXRlZFdyYXBwZXJDb21wb25lbnQgPSBuZXcgQ29tcG9uZW50RXgoKTtcbiAgICB0aGlzLnVuaXZlcnNhbFdyYXBwZXJDb21wb25lbnQucmVtb3ZlQ2hpbGQoZ2F0ZWRXcmFwcGVyQ29tcG9uZW50KTtcblxuICAgIHRoaXMuYnJvYWRjYXN0VW5sb2FkZWQoKTtcbiAgfVxufVxuXG4vKipcbiAqIFJlbG9hZHMgdGhlIHNwZWNpZmllZCBwbHVnaW4gYnkgZGlzYWJsaW5nIGFuZCB0aGVuIHJlLWVuYWJsaW5nIGl0LlxuICpcbiAqIEBwYXJhbSBwbHVnaW4gLSBUaGUgcGx1Z2luIHRvIHJlbG9hZC5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgcGx1Z2luIGlzIHJlbG9hZGVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVsb2FkUGx1Z2luKHBsdWdpbjogUGx1Z2luKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHBsdWdpbnMgPSBwbHVnaW4uYXBwLnBsdWdpbnM7XG4gIGNvbnN0IHBsdWdpbklkID0gcGx1Z2luLm1hbmlmZXN0LmlkO1xuICBhd2FpdCBwbHVnaW5zLmRpc2FibGVQbHVnaW4ocGx1Z2luSWQpO1xuICBhd2FpdCBwbHVnaW5zLmVuYWJsZVBsdWdpbihwbHVnaW5JZCk7XG59XG5cbi8qKlxuICogRGlzcGxheXMgYW4gZXJyb3IgbWVzc2FnZSBhcyBhIG5vdGljZSwgbG9ncyBpdCB0byB0aGUgY29uc29sZSwgYW5kIGRpc2FibGVzIHRoZSBzcGVjaWZpZWQgcGx1Z2luLlxuICpcbiAqIEBwYXJhbSBwbHVnaW4gLSBUaGUgcGx1Z2luIHRvIGRpc2FibGUuXG4gKiBAcGFyYW0gbWVzc2FnZSAtIFRoZSBlcnJvciBtZXNzYWdlIHRvIGRpc3BsYXkgYW5kIGxvZy5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgcGx1Z2luIGlzIGRpc2FibGVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2hvd0Vycm9yQW5kRGlzYWJsZVBsdWdpbihwbHVnaW46IFBsdWdpbiwgbWVzc2FnZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHBsdWdpbk5vdGljZUNvbXBvbmVudCA9IG5ldyBQbHVnaW5Ob3RpY2VDb21wb25lbnQoe1xuICAgIGFwcDogcGx1Z2luLmFwcCxcbiAgICBwbHVnaW5OYW1lOiBwbHVnaW4ubWFuaWZlc3QubmFtZVxuICB9KTtcbiAgcGx1Z2luTm90aWNlQ29tcG9uZW50LnNob3dOb3RpY2UobWVzc2FnZSk7XG4gIHByaW50RXJyb3IobmV3IEVycm9yKG1lc3NhZ2UpKTtcbiAgYXdhaXQgcGx1Z2luLmFwcC5wbHVnaW5zLmRpc2FibGVQbHVnaW4ocGx1Z2luLm1hbmlmZXN0LmlkKTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFjQSwwQkFBaUM7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
691
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9wbHVnaW4vcGx1Z2luLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBCYXNlIGNsYXNzIGZvciBPYnNpZGlhbiBwbHVnaW5zIHVzaW5nIGEgY29tcG9uZW50LWJhc2VkIGFyY2hpdGVjdHVyZS5cbiAqXG4gKiBQbHVnaW5CYXNlIHJlZ2lzdGVycyB1bml2ZXJzYWwgY29tcG9uZW50cyAoY29udGV4dCwgaTE4biwgZXJyb3IgaGFuZGxpbmcsIGFib3J0IHNpZ25hbCwgbGlmZWN5Y2xlIGV2ZW50cywgZGVidWcpLlxuICovXG5cbmltcG9ydCB0eXBlIHtcbiAgQ29tcG9uZW50LFxuICBJY29uTmFtZVxufSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgdHlwZSB7IFByb21pc2FibGUgfSBmcm9tICd0eXBlLWZlc3QnO1xuXG5pbXBvcnQgeyBtaXhpbkFzeW5jRXZlbnRzIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2FzeW5jLWV2ZW50cyc7XG5pbXBvcnQgeyBwcmludEVycm9yIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2Vycm9yJztcbmltcG9ydCB7IG5vb3BBc3luYyB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9mdW5jdGlvbic7XG5pbXBvcnQgeyBlbnN1cmVOb25OdWxsYWJsZSB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi90eXBlLWd1YXJkcyc7XG5pbXBvcnQgeyBQbHVnaW4gfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHtcbiAgUGx1Z2luQ29uZmxpY3QsXG4gIFBsdWdpbkRlcGVuZGVuY3lcbn0gZnJvbSAnLi4vY29tcG9uZW50cy9wbHVnaW4tZ2F0ZS1jb21wb25lbnQudHMnO1xuaW1wb3J0IHR5cGUgeyBUcmFuc2xhdGlvbnNNYXAgfSBmcm9tICcuLi9pMThuL2kxOG4udHMnO1xuaW1wb3J0IHR5cGUgeyBQbHVnaW5BcGlEZWNsYXJhdGlvbiB9IGZyb20gJy4vcGx1Z2luLWFwaS50cyc7XG5pbXBvcnQgdHlwZSB7XG4gIFBsdWdpbkV2ZW50TWFwLFxuICBQbHVnaW5FdmVudFNvdXJjZVxufSBmcm9tICcuL3BsdWdpbi1ldmVudC1zb3VyY2UudHMnO1xuaW1wb3J0IHR5cGUgeyBQbHVnaW5MaWZlY3ljbGVFdmVudFBheWxvYWQgfSBmcm9tICcuL3BsdWdpbi1saWZlY3ljbGUtZXZlbnRzLnRzJztcblxuaW1wb3J0IHsgQXBwQWN0aXZlRmlsZVByb3ZpZGVyIH0gZnJvbSAnLi4vYWN0aXZlLWZpbGUtcHJvdmlkZXIudHMnO1xuaW1wb3J0IHsgQ29tbWFuZEhhbmRsZXJDb21wb25lbnQgfSBmcm9tICcuLi9jb21tYW5kLWhhbmRsZXJzL2NvbW1hbmQtaGFuZGxlci1jb21wb25lbnQudHMnO1xuaW1wb3J0IHsgVW5sb2NrQWN0aXZlTm90ZUNvbW1hbmRIYW5kbGVyIH0gZnJvbSAnLi4vY29tbWFuZC1oYW5kbGVycy91bmxvY2stYWN0aXZlLW5vdGUtY29tbWFuZC1oYW5kbGVyLnRzJztcbmltcG9ydCB7IFBsdWdpbkNvbW1hbmRSZWdpc3RyYXIgfSBmcm9tICcuLi9jb21tYW5kLXJlZ2lzdHJhci50cyc7XG5pbXBvcnQgeyBQbHVnaW5FbmFibGVSZWZ1c2VkRXJyb3IgfSBmcm9tICcuLi9jb21tdW5pdHktcGx1Z2lucy50cyc7XG5pbXBvcnQgeyBBYm9ydFNpZ25hbENvbXBvbmVudCB9IGZyb20gJy4uL2NvbXBvbmVudHMvYWJvcnQtc2lnbmFsLWNvbXBvbmVudC50cyc7XG5pbXBvcnQgeyBBc3luY0Vycm9ySGFuZGxlckNvbXBvbmVudCB9IGZyb20gJy4uL2NvbXBvbmVudHMvYXN5bmMtZXJyb3ItaGFuZGxlci1jb21wb25lbnQudHMnO1xuaW1wb3J0IHsgQ29tcG9uZW50RXggfSBmcm9tICcuLi9jb21wb25lbnRzL2NvbXBvbmVudC1leC50cyc7XG5pbXBvcnQgeyBDb25zb2xlRGVidWdDb21wb25lbnQgfSBmcm9tICcuLi9jb21wb25lbnRzL2NvbnNvbGUtZGVidWctY29tcG9uZW50LnRzJztcbmltcG9ydCB7IE1lbnVFdmVudFJlZ2lzdHJhckNvbXBvbmVudCB9IGZyb20gJy4uL2NvbXBvbmVudHMvbWVudS1ldmVudC1yZWdpc3RyYXItY29tcG9uZW50LnRzJztcbmltcG9ydCB7IE5vdGVib29rTmF2aWdhdG9yTWVudUV2ZW50UmVnaXN0cmFyQ29tcG9uZW50IH0gZnJvbSAnLi4vY29tcG9uZW50cy9ub3RlYm9vay1uYXZpZ2F0b3ItbWVudS1ldmVudC1yZWdpc3RyYXItY29tcG9uZW50LnRzJztcbmltcG9ydCB7IFBsdWdpbkNvbnRleHRDb21wb25lbnQgfSBmcm9tICcuLi9jb21wb25lbnRzL3BsdWdpbi1jb250ZXh0LWNvbXBvbmVudC50cyc7XG5pbXBvcnQgeyBQbHVnaW5HYXRlQ29tcG9uZW50IH0gZnJvbSAnLi4vY29tcG9uZW50cy9wbHVnaW4tZ2F0ZS1jb21wb25lbnQudHMnO1xuaW1wb3J0IHsgUGx1Z2luTm90aWNlQ29tcG9uZW50IH0gZnJvbSAnLi4vY29tcG9uZW50cy9wbHVnaW4tbm90aWNlLWNvbXBvbmVudC50cyc7XG5pbXBvcnQgeyBQbHVnaW5TZXR0aW5nc0NvbXBvbmVudEJhc2UgfSBmcm9tICcuLi9jb21wb25lbnRzL3BsdWdpbi1zZXR0aW5ncy1jb21wb25lbnQudHMnO1xuaW1wb3J0IHsgUGx1Z2luRGF0YUhhbmRsZXIgfSBmcm9tICcuLi9kYXRhLWhhbmRsZXIudHMnO1xuaW1wb3J0IHsgaW5pdEkxOE4gfSBmcm9tICcuLi9pMThuL2kxOG4udHMnO1xuaW1wb3J0IHsgZGVmYXVsdFRyYW5zbGF0aW9uc01hcCB9IGZyb20gJy4uL2kxOG4vbG9jYWxlcy90cmFuc2xhdGlvbnMtbWFwLnRzJztcbmltcG9ydCB7IFJlc291cmNlTG9ja0NvbXBvbmVudCB9IGZyb20gJy4uL3Jlc291cmNlLWxvY2sudHMnO1xuaW1wb3J0IHsgcHVibGlzaFBsdWdpbkFwaSB9IGZyb20gJy4vcGx1Z2luLWFwaS50cyc7XG5pbXBvcnQgeyBQbHVnaW5FdmVudFNvdXJjZUltcGwgfSBmcm9tICcuL3BsdWdpbi1ldmVudC1zb3VyY2UudHMnO1xuaW1wb3J0IHtcbiAgUExVR0lOX0xPQURFRF9FVkVOVF9OQU1FLFxuICBQTFVHSU5fVU5MT0FERURfRVZFTlRfTkFNRSxcbiAgdHJpZ2dlclBsdWdpbkxpZmVjeWNsZUV2ZW50XG59IGZyb20gJy4vcGx1Z2luLWxpZmVjeWNsZS1ldmVudHMudHMnO1xuXG4vKipcbiAqIFRoZSB1bml2ZXJzYWwgY29tcG9uZW50cyBvd25lZCBieSB7QGxpbmsgUGx1Z2luQmFzZX0sIGtleWVkIGJ5IHRoZSBuYW1lIG9mIHRoZSBhY2Nlc3NvciBleHBvc2luZ1xuICogZWFjaCBvbmUuIEV2ZXJ5IG1lbWJlciBpcyBvcHRpb25hbCBiZWNhdXNlIGEgY29tcG9uZW50IG9ubHkgZXhpc3RzIG9uY2Uge0BsaW5rIFBsdWdpbkJhc2Uub25sb2FkfVxuICogaGFzIGNyZWF0ZWQgaXQuXG4gKi9cbmludGVyZmFjZSBQbHVnaW5CYXNlQ29tcG9uZW50cyB7XG4gIHJlYWRvbmx5IGFib3J0U2lnbmFsQ29tcG9uZW50PzogQWJvcnRTaWduYWxDb21wb25lbnQ7XG4gIHJlYWRvbmx5IGFzeW5jRXJyb3JIYW5kbGVyQ29tcG9uZW50PzogQXN5bmNFcnJvckhhbmRsZXJDb21wb25lbnQ7XG4gIHJlYWRvbmx5IGNvbW1hbmRIYW5kbGVyQ29tcG9uZW50PzogQ29tbWFuZEhhbmRsZXJDb21wb25lbnQ7XG4gIHJlYWRvbmx5IGNvbnNvbGVEZWJ1Z0NvbXBvbmVudD86IENvbnNvbGVEZWJ1Z0NvbXBvbmVudDtcbiAgcmVhZG9ubHkgcGx1Z2luQ29udGV4dENvbXBvbmVudD86IFBsdWdpbkNvbnRleHRDb21wb25lbnQ7XG4gIHJlYWRvbmx5IHBsdWdpbkdhdGVDb21wb25lbnQ/OiBQbHVnaW5HYXRlQ29tcG9uZW50O1xuICByZWFkb25seSBwbHVnaW5Ob3RpY2VDb21wb25lbnQ/OiBQbHVnaW5Ob3RpY2VDb21wb25lbnQ7XG4gIHJlYWRvbmx5IHBsdWdpblNldHRpbmdzQ29tcG9uZW50PzogUGx1Z2luU2V0dGluZ3NDb21wb25lbnRCYXNlPG9iamVjdD47XG4gIHJlYWRvbmx5IHJlc291cmNlTG9ja0NvbXBvbmVudD86IFJlc291cmNlTG9ja0NvbXBvbmVudDtcbn1cblxuLyoqXG4gKiBCYXNlIGNsYXNzIGZvciBjcmVhdGluZyBPYnNpZGlhbiBwbHVnaW5zIHdpdGggYSBjb21wb25lbnQtYmFzZWQgYXJjaGl0ZWN0dXJlLlxuICpcbiAqIFJlZ2lzdGVycyB1bml2ZXJzYWwgY29tcG9uZW50cyBhdXRvbWF0aWNhbGx5LiBTdWJjbGFzc2VzIGFkZCBvciByZXBsYWNlIGNvbXBvbmVudHNcbiAqIHZpYSB7QGxpbmsgcmVtb3ZlQ2hpbGR9IC8ge0BsaW5rIGFkZENoaWxkfS5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFBsdWdpbkJhc2UgZXh0ZW5kcyBtaXhpbkFzeW5jRXZlbnRzPFBsdWdpbkV2ZW50TWFwPigpKFBsdWdpbikgaW1wbGVtZW50cyBQbHVnaW5FdmVudFNvdXJjZSB7XG4gIC8qKlxuICAgKiBHZXRzIGFib3J0IHNpZ25hbCBjb21wb25lbnQuXG4gICAqXG4gICAqIEByZXR1cm5zIGFib3J0IHNpZ25hbCBjb21wb25lbnQuXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0IGFib3J0U2lnbmFsQ29tcG9uZW50KCk6IEFib3J0U2lnbmFsQ29tcG9uZW50IHtcbiAgICByZXR1cm4gZW5zdXJlTm9uTnVsbGFibGUodGhpcy5jb21wb25lbnRzLmFib3J0U2lnbmFsQ29tcG9uZW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIGFib3J0IHNpZ25hbCBjb21wb25lbnQuXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSAtIEFib3J0IHNpZ25hbCBjb21wb25lbnQuXG4gICAqL1xuICBwcm90ZWN0ZWQgc2V0IGFib3J0U2lnbmFsQ29tcG9uZW50KHZhbHVlOiBBYm9ydFNpZ25hbENvbXBvbmVudCkge1xuICAgIHRoaXMuc2V0Q29tcG9uZW50KCdhYm9ydFNpZ25hbENvbXBvbmVudCcsIHZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGFzeW5jIGVycm9yIGhhbmRsZXIgY29tcG9uZW50LlxuICAgKlxuICAgKiBAcmV0dXJucyBhc3luYyBlcnJvciBoYW5kbGVyIGNvbXBvbmVudC5cbiAgICovXG4gIHByb3RlY3RlZCBnZXQgYXN5bmNFcnJvckhhbmRsZXJDb21wb25lbnQoKTogQXN5bmNFcnJvckhhbmRsZXJDb21wb25lbnQge1xuICAgIHJldHVybiBlbnN1cmVOb25OdWxsYWJsZSh0aGlzLmNvbXBvbmVudHMuYXN5bmNFcnJvckhhbmRsZXJDb21wb25lbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgYXN5bmMgZXJyb3IgaGFuZGxlciBjb21wb25lbnQuXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSAtIEFzeW5jIGVycm9yIGhhbmRsZXIgY29tcG9uZW50LlxuICAgKi9cbiAgcHJvdGVjdGVkIHNldCBhc3luY0Vycm9ySGFuZGxlckNvbXBvbmVudCh2YWx1ZTogQXN5bmNFcnJvckhhbmRsZXJDb21wb25lbnQpIHtcbiAgICB0aGlzLnNldENvbXBvbmVudCgnYXN5bmNFcnJvckhhbmRsZXJDb21wb25lbnQnLCB2YWx1ZSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgc2hhcmVkIGNvbW1hbmQgaGFuZGxlciBjb21wb25lbnQuIFJlZ2lzdGVyIGEgcGx1Z2luJ3MgY29tbWFuZHMgb24gaXQgdmlhXG4gICAqIHtAbGluayBDb21tYW5kSGFuZGxlckNvbXBvbmVudC5yZWdpc3RlckNvbW1hbmRIYW5kbGVyc30gcmF0aGVyIHRoYW4gY29uc3RydWN0aW5nIHlvdXIgb3duXG4gICAqIHtAbGluayBDb21tYW5kSGFuZGxlckNvbXBvbmVudH0g4oCUIHRoZSBhcHAtYmFja2VkIGFjdGl2ZS1maWxlIHByb3ZpZGVyLCBjb21tYW5kIHJlZ2lzdHJhciwgbWVudVxuICAgKiBldmVudCByZWdpc3RyYXIsIGFuZCBwbHVnaW4gbmFtZSBhcmUgYWxyZWFkeSB3aXJlZC5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIGNvbW1hbmQgaGFuZGxlciBjb21wb25lbnQuXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0IGNvbW1hbmRIYW5kbGVyQ29tcG9uZW50KCk6IENvbW1hbmRIYW5kbGVyQ29tcG9uZW50IHtcbiAgICByZXR1cm4gZW5zdXJlTm9uTnVsbGFibGUodGhpcy5jb21wb25lbnRzLmNvbW1hbmRIYW5kbGVyQ29tcG9uZW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBjb21tYW5kIGhhbmRsZXIgY29tcG9uZW50LlxuICAgKlxuICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgY29tbWFuZCBoYW5kbGVyIGNvbXBvbmVudC5cbiAgICovXG4gIHByb3RlY3RlZCBzZXQgY29tbWFuZEhhbmRsZXJDb21wb25lbnQodmFsdWU6IENvbW1hbmRIYW5kbGVyQ29tcG9uZW50KSB7XG4gICAgdGhpcy5zZXRDb21wb25lbnQoJ2NvbW1hbmRIYW5kbGVyQ29tcG9uZW50JywgdmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgY29uc29sZSBkZWJ1ZyBjb21wb25lbnQuXG4gICAqXG4gICAqIEByZXR1cm5zIGNvbnNvbGUgZGVidWcgY29tcG9uZW50LlxuICAgKi9cbiAgcHJvdGVjdGVkIGdldCBjb25zb2xlRGVidWdDb21wb25lbnQoKTogQ29uc29sZURlYnVnQ29tcG9uZW50IHtcbiAgICByZXR1cm4gZW5zdXJlTm9uTnVsbGFibGUodGhpcy5jb21wb25lbnRzLmNvbnNvbGVEZWJ1Z0NvbXBvbmVudCk7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyBjb25zb2xlIGRlYnVnIGNvbXBvbmVudC5cbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIC0gQ29uc29sZSBkZWJ1ZyBjb21wb25lbnQuXG4gICAqL1xuICBwcm90ZWN0ZWQgc2V0IGNvbnNvbGVEZWJ1Z0NvbXBvbmVudCh2YWx1ZTogQ29uc29sZURlYnVnQ29tcG9uZW50KSB7XG4gICAgdGhpcy5zZXRDb21wb25lbnQoJ2NvbnNvbGVEZWJ1Z0NvbXBvbmVudCcsIHZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHBsdWdpbiBjb250ZXh0IGNvbXBvbmVudCAocGx1Z2luIElELCBkZWJ1ZyBjb250cm9sbGVyLCBsaWJyYXJ5IHN0eWxlcykuXG4gICAqXG4gICAqIEByZXR1cm5zIHBsdWdpbiBjb250ZXh0IGNvbXBvbmVudC5cbiAgICovXG4gIHByb3RlY3RlZCBnZXQgcGx1Z2luQ29udGV4dENvbXBvbmVudCgpOiBQbHVnaW5Db250ZXh0Q29tcG9uZW50IHtcbiAgICByZXR1cm4gZW5zdXJlTm9uTnVsbGFibGUodGhpcy5jb21wb25lbnRzLnBsdWdpbkNvbnRleHRDb21wb25lbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgcGx1Z2luIGNvbnRleHQgY29tcG9uZW50LlxuICAgKlxuICAgKiBAcGFyYW0gdmFsdWUgLSBQbHVnaW4gY29udGV4dCBjb21wb25lbnQuXG4gICAqL1xuICBwcm90ZWN0ZWQgc2V0IHBsdWdpbkNvbnRleHRDb21wb25lbnQodmFsdWU6IFBsdWdpbkNvbnRleHRDb21wb25lbnQpIHtcbiAgICB0aGlzLnNldENvbXBvbmVudCgncGx1Z2luQ29udGV4dENvbXBvbmVudCcsIHZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBnYXRlIGhvbGRpbmcgdGhlIHBsdWdpbidzIGZlYXR1cmUgc3VyZmFjZSB1cCBvciBkb3duLlxuICAgKlxuICAgKiBSZWFjaCBmb3IgaXQgZnJvbSBhIHNldHRpbmdzIHRhYiB0byByZW5kZXIgdGhlIG92ZXJsYXAgYmFubmVyIGZvciBhXG4gICAqIHtAbGluayBjb21wb25lbnRzL3BsdWdpbi1nYXRlLWNvbXBvbmVudCFQbHVnaW5Db25mbGljdFNldmVyaXR5Lldhcm59IGNvbmZsaWN0IOKAlCB0aGUgb25lXG4gICAqIGJhbm5lciB0aGUgbGlicmFyeSBjYW5ub3QgcGxhY2UgaXRzZWxmLCBiZWNhdXNlIGEgcnVubmluZyBwbHVnaW4gYnVpbGRzIGl0cyBvd24gc2V0dGluZ3MgdGFiLlxuICAgKlxuICAgKiBSZWFkYWJsZSB0aHJvdWdob3V0IHtAbGluayBvbmxvYWRJbXBsfSwgaW5jbHVkaW5nIGl0cyBzeW5jaHJvbm91cyBwcmVmaXgsIHdoaWNoIGlzIHdoZXJlIGEgc2V0dGluZ3NcbiAgICogdGFiIGlzIGJ1aWx0LiBUaGF0IGlzIGRlbGliZXJhdGUgcmF0aGVyIHRoYW4gaW5jaWRlbnRhbDogYWRkaW5nIHRoZSBnYXRlIGlzIHdoYXQgcnVuc1xuICAgKiB7QGxpbmsgb25sb2FkSW1wbH0sIHNvIHtAbGluayBvbmxvYWR9IGFzc2lnbnMgdGhpcyBmaWVsZCBiZWZvcmUgYWRkaW5nIGl0LlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgcGx1Z2luIGdhdGUgY29tcG9uZW50LlxuICAgKi9cbiAgcHJvdGVjdGVkIGdldCBwbHVnaW5HYXRlQ29tcG9uZW50KCk6IFBsdWdpbkdhdGVDb21wb25lbnQge1xuICAgIHJldHVybiBlbnN1cmVOb25OdWxsYWJsZSh0aGlzLmNvbXBvbmVudHMucGx1Z2luR2F0ZUNvbXBvbmVudCk7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgcGx1Z2luIGdhdGUgY29tcG9uZW50LlxuICAgKlxuICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgcGx1Z2luIGdhdGUgY29tcG9uZW50LlxuICAgKi9cbiAgcHJvdGVjdGVkIHNldCBwbHVnaW5HYXRlQ29tcG9uZW50KHZhbHVlOiBQbHVnaW5HYXRlQ29tcG9uZW50KSB7XG4gICAgdGhpcy5zZXRDb21wb25lbnQoJ3BsdWdpbkdhdGVDb21wb25lbnQnLCB2YWx1ZSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyBwbHVnaW4gbm90aWNlIGNvbXBvbmVudC5cbiAgICpcbiAgICogQHJldHVybnMgcGx1Z2luIG5vdGljZSBjb21wb25lbnQuXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0IHBsdWdpbk5vdGljZUNvbXBvbmVudCgpOiBQbHVnaW5Ob3RpY2VDb21wb25lbnQge1xuICAgIHJldHVybiBlbnN1cmVOb25OdWxsYWJsZSh0aGlzLmNvbXBvbmVudHMucGx1Z2luTm90aWNlQ29tcG9uZW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHBsdWdpbiBub3RpY2UgY29tcG9uZW50LlxuICAgKlxuICAgKiBAcGFyYW0gdmFsdWUgLSBQbHVnaW4gbm90aWNlIGNvbXBvbmVudC5cbiAgICovXG4gIHByb3RlY3RlZCBzZXQgcGx1Z2luTm90aWNlQ29tcG9uZW50KHZhbHVlOiBQbHVnaW5Ob3RpY2VDb21wb25lbnQpIHtcbiAgICB0aGlzLnNldENvbXBvbmVudCgncGx1Z2luTm90aWNlQ29tcG9uZW50JywgdmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgcGx1Z2luIHNldHRpbmdzIGNvbXBvbmVudC5cbiAgICpcbiAgICogQHJldHVybnMgcGx1Z2luIHNldHRpbmdzIGNvbXBvbmVudC5cbiAgICovXG4gIHByb3RlY3RlZCBnZXQgcGx1Z2luU2V0dGluZ3NDb21wb25lbnQoKTogUGx1Z2luU2V0dGluZ3NDb21wb25lbnRCYXNlPG9iamVjdD4ge1xuICAgIHJldHVybiBlbnN1cmVOb25OdWxsYWJsZSh0aGlzLmNvbXBvbmVudHMucGx1Z2luU2V0dGluZ3NDb21wb25lbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgcGx1Z2luIHNldHRpbmdzIGNvbXBvbmVudC5cbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIC0gUGx1Z2luIHNldHRpbmdzIGNvbXBvbmVudC5cbiAgICovXG4gIHByb3RlY3RlZCBzZXQgcGx1Z2luU2V0dGluZ3NDb21wb25lbnQodmFsdWU6IFBsdWdpblNldHRpbmdzQ29tcG9uZW50QmFzZTxvYmplY3Q+KSB7XG4gICAgdGhpcy5zZXRDb21wb25lbnQoJ3BsdWdpblNldHRpbmdzQ29tcG9uZW50JywgdmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGVkaXRvciBsb2NrIGNvbXBvbmVudCwgdXNlZCB0byBsb2NrIG5vdGVzIHJlYWQtb25seSBkdXJpbmcgbG9uZyBvcGVyYXRpb25zLiBPd25lZCBieVxuICAgKiB0aGUgcGx1Z2luLCBzbyBpdHMgbG9ja3MgYXJlIHJlbGVhc2VkIGF1dG9tYXRpY2FsbHkgd2hlbiB0aGUgcGx1Z2luIHVubG9hZHMuXG4gICAqXG4gICAqIEByZXR1cm5zIEVkaXRvciBsb2NrIGNvbXBvbmVudC5cbiAgICovXG4gIHByb3RlY3RlZCBnZXQgcmVzb3VyY2VMb2NrQ29tcG9uZW50KCk6IFJlc291cmNlTG9ja0NvbXBvbmVudCB7XG4gICAgcmV0dXJuIGVuc3VyZU5vbk51bGxhYmxlKHRoaXMuY29tcG9uZW50cy5yZXNvdXJjZUxvY2tDb21wb25lbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGVkaXRvciBsb2NrIGNvbXBvbmVudC5cbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIC0gRWRpdG9yIGxvY2sgY29tcG9uZW50LlxuICAgKi9cbiAgcHJvdGVjdGVkIHNldCByZXNvdXJjZUxvY2tDb21wb25lbnQodmFsdWU6IFJlc291cmNlTG9ja0NvbXBvbmVudCkge1xuICAgIHRoaXMuc2V0Q29tcG9uZW50KCdyZXNvdXJjZUxvY2tDb21wb25lbnQnLCB2YWx1ZSk7XG4gIH1cblxuICBwcml2YXRlIHJlYWRvbmx5IGNvbXBvbmVudHM6IFBsdWdpbkJhc2VDb21wb25lbnRzID0ge307XG5cbiAgLy8gRXZlcnl0aGluZyB0aGUgU1VCQ0xBU1Mgb3duczogd2hhdCBgb25sb2FkSW1wbGAgYWRkcywgYW5kIHdoYXQgaXQgYWRkcyBsYXRlci5cbiAgLy9cbiAgLy8gQSBzZWNvbmQgd3JhcHBlciByYXRoZXIgdGhhbiBvbmUsIGJlY2F1c2UgdGhlIHR3byB0aWVycyBoYXZlIG9wcG9zaXRlIGxpZmV0aW1lcy4gVGhlIHVuaXZlcnNhbFxuICAvLyBjb21wb25lbnRzIGhhdmUgdG8gT1VUTElWRSBhIGxvc3QgZGVwZW5kZW5jeSDigJQgdGhleSBhcmUgd2hhdCBzaG93cyB0aGUgbm90aWNlIG5hbWluZyB0aGUgcGx1Z2luIHRoYXRcbiAgLy8gd2VudCBhd2F5IGFuZCByZW5kZXJzIHRoZSBidXR0b24gdGhhdCBicmluZ3MgaXQgYmFjayDigJQgd2hpbGUgdGhlIHN1YmNsYXNzJ3Mgc3VyZmFjZSBpcyBleGFjdGx5IHdoYXRcbiAgLy8gbXVzdCBzdG9wIHJ1bm5pbmcuIFVubG9hZGluZyBvbmUgd3JhcHBlciBob2xkaW5nIGJvdGggd291bGQgc2lsZW5jZSB0aGUgcGx1Z2luIGF0IHRoZSBtb21lbnQgaXQgbW9zdFxuICAvLyBuZWVkcyB0byBzcGVhay5cbiAgLy9cbiAgLy8gQWx3YXlzIHByZXNlbnQsIG5ldmVyIG51bGwsIGFuZCBSRVBMQUNFRCByYXRoZXIgdGhhbiBlbXB0aWVkIHdoZW4gdGhlIHN1cmZhY2UgaXMgdG9ybiBkb3duLiBUaGF0IGtlZXBzXG4gIC8vIGBhZGRDaGlsZGAgY2FsbGFibGUgYXQgZXZlcnkgcG9pbnQgaW4gdGhlIHBsdWdpbidzIGxpZmUsIGV4YWN0bHkgYXMgaXQgd2FzIGJlZm9yZSB0aGUgdGllcnMgZXhpc3RlZDpcbiAgLy8gQSBjaGlsZCBhZGRlZCBiZWZvcmUgdGhlIGdhdGUgb3BlbnMgaXMgcXVldWVkIGFuZCBsb2FkZWQgd2hlbiBpdCBkb2VzLCB3aGljaCBpcyB3aGF0IGBDb21wb25lbnRFeGBcbiAgLy8gYWxyZWFkeSBkb2VzIGZvciBhbnkgY2hpbGQgYWRkZWQgdG8gYSBub3QteWV0LWxvYWRlZCBjb21wb25lbnQuXG4gIHByaXZhdGUgZ2F0ZWRXcmFwcGVyQ29tcG9uZW50ID0gbmV3IENvbXBvbmVudEV4KCk7XG5cbiAgLy8gVGhlIHBheWxvYWQgYnJvYWRjYXN0IHdoZW4gdGhpcyBwbHVnaW4gZmluaXNoZWQgbG9hZGluZywga2VwdCBzbyB0aGUgbWF0Y2hpbmcgdW5sb2FkZWQgYnJvYWRjYXN0XG4gIC8vIGRlc2NyaWJlcyB0aGUgc2FtZSBwbHVnaW4gd2l0aG91dCByZS1kZXJpdmluZyBpdCBmcm9tIGEgc3VyZmFjZSB0aGF0IGhhcyBzaW5jZSBiZWVuIHRvcm4gZG93bi4gTnVsbFxuICAvLyB3aGVuZXZlciBubyBsb2FkZWQgYnJvYWRjYXN0IGlzIG91dHN0YW5kaW5nLCB3aGljaCBpcyB3aGF0IGtlZXBzIHRoZSB0d28gZXZlbnRzIHBhaXJlZC5cbiAgcHJpdmF0ZSBsaWZlY3ljbGVFdmVudFBheWxvYWQ6IG51bGwgfCBQbHVnaW5MaWZlY3ljbGVFdmVudFBheWxvYWQgPSBudWxsO1xuXG4gIC8vIFRoZSBsaWJyYXJ5J3Mgb3duIGNvbXBvbmVudHMsIHdoaWNoIG91dGxpdmUgYW55IGRlcGVuZGVuY3kuXG4gIHByaXZhdGUgcmVhZG9ubHkgdW5pdmVyc2FsV3JhcHBlckNvbXBvbmVudCA9IG5ldyBDb21wb25lbnRFeCgpO1xuXG4gIC8qKlxuICAgKiBBZGRzIGEgY2hpbGQgY29tcG9uZW50LlxuICAgKlxuICAgKiBUaGUgY2hpbGQgaXMgYWRkZWQgdG8gdGhlIGludGVybmFsIHdyYXBwZXIgaG9sZGluZyB0aGUgc3ViY2xhc3MncyBvd24gc3VyZmFjZSwgd2hpY2gge0BsaW5rIG9ubG9hZH1cbiAgICogY3JlYXRlcyBhbmQgbG9hZHMgYmVmb3JlIGNhbGxpbmcge0BsaW5rIG9ubG9hZEltcGx9LiBTbyBhIGNoaWxkIGFkZGVkIGR1cmluZyB7QGxpbmsgb25sb2FkSW1wbH0gaXNcbiAgICogbG9hZGVkIGltbWVkaWF0ZWx5LCBjaGlsZHJlbi1maXJzdCwgYW5kIGlzIHVzYWJsZSBieSB0aGUgdGltZSB0aGlzIG1ldGhvZCByZXR1cm5zLlxuICAgKlxuICAgKiBUaGF0IHdyYXBwZXIgaXMgdG9ybiBkb3duIGFuZCByZWJ1aWx0IHdoZW5ldmVyIHRoZSBnYXRlIGNsb3NlcyBhbmQgb3BlbnMgYWdhaW4g4oCUIGEgZGVwZW5kZW5jeSBkZWNsYXJlZFxuICAgKiBieSB7QGxpbmsgZ2V0UGx1Z2luRGVwZW5kZW5jaWVzfSBnb2luZyBhd2F5IGFuZCBjb21pbmcgYmFjaywgb3IgYSBjb25mbGljdCBkZWNsYXJlZCBieVxuICAgKiB7QGxpbmsgZ2V0UGx1Z2luQ29uZmxpY3RzfSBhcHBlYXJpbmcgYW5kIGJlaW5nIHJlc29sdmVkIOKAlCBzbyBhIGNoaWxkIGFkZGVkIGhlcmUgbGl2ZXMgZXhhY3RseSBhcyBsb25nXG4gICAqIGFzIHRoZSBwbHVnaW4ncyBmZWF0dXJlIHN1cmZhY2UgZG9lcy4gQWRkaW5nIG9uZSB3aGlsZSB0aGUgc3VyZmFjZSBpcyBkb3duIGlzIHN0aWxsIGxlZ2l0aW1hdGUg4oCUIGl0IGlzXG4gICAqIHF1ZXVlZCBhbmQgbG9hZGVkIHdoZW4gdGhlIHN1cmZhY2UgbmV4dCBjb21lcyB1cCwgdGhlIHdheSB7QGxpbmsgQ29tcG9uZW50RXguYWRkQ2hpbGR9IGFscmVhZHkgcXVldWVzXG4gICAqIGEgY2hpbGQgYWRkZWQgdG8gYSBub3QteWV0LWxvYWRlZCBjb21wb25lbnQuXG4gICAqXG4gICAqIFRoaXMgaXMgdGhlIFNVQkNMQVNTJ3MgZG9vciwgYW5kIHRoZSBvbmx5IG9uZSBpdCBoYXM6IHRoZSB1bml2ZXJzYWwgY29tcG9uZW50cyB7QGxpbmsgb25sb2FkfSByZWdpc3RlcnNcbiAgICogdGFrZSBhIHByaXZhdGUgcm91dGUgb250byBhIGRpZmZlcmVudCB3cmFwcGVyLiBTbyBhbnl0aGluZyBvYnNlcnZpbmcgdGhpcyBtZXRob2Qg4oCUIGEgdGVzdCBjb3VudGluZyBpdHNcbiAgICogY2FsbHMsIGEgcGF0Y2ggd3JhcHBpbmcgaXQg4oCUIHNlZXMgZXhhY3RseSB0aGUgY2hpbGRyZW4gdGhlIHN1YmNsYXNzIGFkZGVkLCBhbmQgbm9uZSBvZiB0aGUgbGlicmFyeSdzLlxuICAgKiBCZWZvcmUgdGhlIHR3byB0aWVycyBleGlzdGVkIG9uZSBkb29yIGNhcnJpZWQgYm90aCwgYW5kIGEgY29uc3VtZXIgY291bnRpbmcgdGhlIHRvdGFsIGlzIHRoZSBvbmUgdGhpbmdcbiAgICogdGhlIHNwbGl0IGNvdWxkIG5vdCBrZWVwIHdvcmtpbmcuXG4gICAqXG4gICAqIEB0eXBlUGFyYW0gVENvbXBvbmVudCAtIFRoZSB0eXBlIG9mIGNvbXBvbmVudCB0byBhZGQuXG4gICAqIEBwYXJhbSBjb21wb25lbnQgLSBUaGUgY29tcG9uZW50IGluc3RhbmNlIHRvIGFkZC5cbiAgICogQHJldHVybnMgVGhlIGFkZGVkIGNvbXBvbmVudC5cbiAgICovXG4gIHB1YmxpYyBvdmVycmlkZSBhZGRDaGlsZDxUQ29tcG9uZW50IGV4dGVuZHMgQ29tcG9uZW50Pihjb21wb25lbnQ6IFRDb21wb25lbnQpOiBUQ29tcG9uZW50IHtcbiAgICByZXR1cm4gdGhpcy5nYXRlZFdyYXBwZXJDb21wb25lbnQuYWRkQ2hpbGQoY29tcG9uZW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsZWQgd2hlbiB0aGUgZXh0ZXJuYWwgc2V0dGluZ3MgY2hhbmdlLlxuICAgKlxuICAgKiBPdmVycmlkZSBpbiBzdWJjbGFzcyBpZiBuZWVkZWQuIE1ha2Ugc3VyZSB0byBjYWxsIGBhd2FpdCBzdXBlci5vbkV4dGVybmFsU2V0dGluZ3NDaGFuZ2UoKWAgZmlyc3QuXG4gICAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgYXN5bmMgb25FeHRlcm5hbFNldHRpbmdzQ2hhbmdlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHN1cGVyLm9uRXh0ZXJuYWxTZXR0aW5nc0NoYW5nZT8uKCk7XG4gICAgYXdhaXQgdGhpcy50cmlnZ2VyQXN5bmMoJ2V4dGVybmFsU2V0dGluZ3NDaGFuZ2UnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsZWQgd2hlbiB0aGUgcGx1Z2luIGlzIGxvYWRlZC5cbiAgICpcbiAgICogT3JjaGVzdHJhdGVzIGxvYWRpbmc6IHJlZ2lzdGVycyB0aGUgdW5pdmVyc2FsIGNvbXBvbmVudHMsIGxldHMgdGhlIHN1YmNsYXNzIHdpcmUgaXRzIG93blxuICAgKiBjb21wb25lbnRzIHZpYSB7QGxpbmsgb25sb2FkSW1wbH0sIHRoZW4gYXdhaXRzIHRoZSBhc3luYyB0YWlsIG9mIGV2ZXJ5IGxvYWQuXG4gICAqIEVhY2ggY29tcG9uZW50IGxvYWRzIGFzIGl0IGlzIGFkZGVkLCBjaGlsZHJlbi1maXJzdC5cbiAgICpcbiAgICogRG8gTk9UIG92ZXJyaWRlIHRoaXMgbWV0aG9kLiBPdmVycmlkZSB7QGxpbmsgb25sb2FkSW1wbH0gaW5zdGVhZC5cbiAgICovXG4gIHB1YmxpYyBvdmVycmlkZSBhc3luYyBvbmxvYWQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIFRoZSB3cmFwcGVyIGlzIGF0dGFjaGVkIGFuZCBsb2FkZWQgYmVmb3JlIGFueXRoaW5nIGlzIHdpcmVkIHVwLCBzbyBldmVyeSBgYWRkQ2hpbGRgIGJlbG93XG4gICAgICAvLyBsb2FkcyBpdHMgY2hpbGQgc3RyYWlnaHQgYXdheSByYXRoZXIgdGhhbiBxdWV1aW5nIGl0LlxuICAgICAgLy8gVGhhdCBpcyB3aGF0IGxldHMgYSBjb21tYW5kIGhhbmRsZXIgcmVnaXN0ZXIgaXRzIG1lbnUgZXZlbnRzIGZyb20gYG9uUmVnaXN0ZXJlZGAsIHdoaWNoXG4gICAgICAvLyBgcmVnaXN0ZXJDb21tYW5kSGFuZGxlcnNgIGF3YWl0cyBhbmQgd2hpY2ggYSByZWdpc3RyYXIgcmVmdXNlcyB3aGlsZSB1bmxvYWRlZC5cbiAgICAgIC8vIEF0dGFjaGluZyBpdCB1cCBmcm9udCBhbHNvIHJlZ2lzdGVycyB0aGUgd3JhcHBlciBmb3IgdGVhcmRvd24gYmVmb3JlIGFueXRoaW5nIGNhbiB0aHJvdy5cbiAgICAgIC8vIFRoZSBsb2FkIGlzIGV4cGxpY2l0IHJhdGhlciB0aGFuIGxlZnQgdG8gYGFkZENoaWxkYCwgd2hpY2ggbG9hZHMgdGhlIGNoaWxkIG9ubHkgd2hlbiB0aGVcbiAgICAgIC8vIHBsdWdpbiBpdHNlbGYgaXMgbG9hZGVkIOKAlCB0cnVlIHdoZW4gT2JzaWRpYW4gY2FsbHMgYGxvYWQoKWAsIGJ1dCBub3Qgd2hlbiBhIGNhbGxlciBpbnZva2VzXG4gICAgICAvLyBgb25sb2FkKClgIGRpcmVjdGx5LlxuICAgICAgc3VwZXIuYWRkQ2hpbGQodGhpcy51bml2ZXJzYWxXcmFwcGVyQ29tcG9uZW50KTtcbiAgICAgIHRoaXMudW5pdmVyc2FsV3JhcHBlckNvbXBvbmVudC5sb2FkKCk7XG5cbiAgICAgIGF3YWl0IGluaXRJMThOKHRoaXMuY3JlYXRlVHJhbnNsYXRpb25zTWFwKCkpO1xuICAgICAgdGhpcy5wbHVnaW5Db250ZXh0Q29tcG9uZW50ID0gdGhpcy5hZGRVbml2ZXJzYWxDaGlsZChcbiAgICAgICAgbmV3IFBsdWdpbkNvbnRleHRDb21wb25lbnQoe1xuICAgICAgICAgIGFwcDogdGhpcy5hcHAsXG4gICAgICAgICAgcGx1Z2luSWQ6IHRoaXMubWFuaWZlc3QuaWRcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgICB0aGlzLnBsdWdpbk5vdGljZUNvbXBvbmVudCA9IHRoaXMuYWRkVW5pdmVyc2FsQ2hpbGQoXG4gICAgICAgIG5ldyBQbHVnaW5Ob3RpY2VDb21wb25lbnQoe1xuICAgICAgICAgIGFwcDogdGhpcy5hcHAsXG4gICAgICAgICAgcGx1Z2luTmFtZTogdGhpcy5tYW5pZmVzdC5uYW1lXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgICAgdGhpcy5hc3luY0Vycm9ySGFuZGxlckNvbXBvbmVudCA9IHRoaXMuYWRkVW5pdmVyc2FsQ2hpbGQobmV3IEFzeW5jRXJyb3JIYW5kbGVyQ29tcG9uZW50KHRoaXMucGx1Z2luTm90aWNlQ29tcG9uZW50KSk7XG4gICAgICB0aGlzLmFib3J0U2lnbmFsQ29tcG9uZW50ID0gdGhpcy5hZGRVbml2ZXJzYWxDaGlsZChuZXcgQWJvcnRTaWduYWxDb21wb25lbnQodGhpcy5tYW5pZmVzdC5pZCkpO1xuICAgICAgdGhpcy5jb25zb2xlRGVidWdDb21wb25lbnQgPSB0aGlzLmFkZFVuaXZlcnNhbENoaWxkKG5ldyBDb25zb2xlRGVidWdDb21wb25lbnQodGhpcy5tYW5pZmVzdC5pZCkpO1xuICAgICAgdGhpcy5yZXNvdXJjZUxvY2tDb21wb25lbnQgPSB0aGlzLmFkZFVuaXZlcnNhbENoaWxkKG5ldyBSZXNvdXJjZUxvY2tDb21wb25lbnQodGhpcy5hcHAsIHRoaXMubWFuaWZlc3QuaWQpKTtcbiAgICAgIC8vIGBOb3RlYm9vayBOYXZpZ2F0b3JgIGRyYXdzIGl0cyBvd24gZmlsZSB0cmVlIGFuZCBuZXZlciByYWlzZXMgT2JzaWRpYW4ncyBgZmlsZS1tZW51YCAvXG4gICAgICAvLyBgZmlsZXMtbWVudWAgZXZlbnRzLCBzbyBldmVyeSBwbHVnaW4ncyBjb250ZXh0LW1lbnUgaXRlbXMgd291bGQgdmFuaXNoIGZvciBhbnlvbmUgYnJvd3NpbmdcbiAgICAgIC8vIHRocm91Z2ggaXQuIFdpcmVkIGhlcmUgcmF0aGVyIHRoYW4gcGVyLXBsdWdpbjogdGhlIGJyaWRnZSBzdGF5cyBkb3JtYW50IHdoZW4gTm90ZWJvb2tcbiAgICAgIC8vIE5hdmlnYXRvciBpcyBub3QgaW5zdGFsbGVkLCBhbmQgYSBwbHVnaW4gd2l0aCBubyBmaWxlL2ZvbGRlciBoYW5kbGVycyBjb250cmlidXRlcyBub3RoaW5nLlxuICAgICAgY29uc3Qgbm90ZWJvb2tOYXZpZ2F0b3JNZW51RXZlbnRSZWdpc3RyYXJDb21wb25lbnQgPSB0aGlzLmFkZFVuaXZlcnNhbENoaWxkKFxuICAgICAgICBuZXcgTm90ZWJvb2tOYXZpZ2F0b3JNZW51RXZlbnRSZWdpc3RyYXJDb21wb25lbnQoe1xuICAgICAgICAgIGFwcDogdGhpcy5hcHAsXG4gICAgICAgICAgcGx1Z2luTmFtZTogdGhpcy5tYW5pZmVzdC5uYW1lLFxuICAgICAgICAgIHN1Ym1lbnVJY29uOiB0aGlzLmdldE5vdGVib29rTmF2aWdhdG9yTWVudVN1Ym1lbnVJY29uKClcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgICB0aGlzLmNvbW1hbmRIYW5kbGVyQ29tcG9uZW50ID0gdGhpcy5hZGRVbml2ZXJzYWxDaGlsZChcbiAgICAgICAgbmV3IENvbW1hbmRIYW5kbGVyQ29tcG9uZW50KHtcbiAgICAgICAgICBhY3RpdmVGaWxlUHJvdmlkZXI6IG5ldyBBcHBBY3RpdmVGaWxlUHJvdmlkZXIodGhpcy5hcHApLFxuICAgICAgICAgIGFkZGl0aW9uYWxNZW51RXZlbnRSZWdpc3RyYXJzOiBbbm90ZWJvb2tOYXZpZ2F0b3JNZW51RXZlbnRSZWdpc3RyYXJDb21wb25lbnRdLFxuICAgICAgICAgIC8vIFRoZSBjb21wb25lbnQgaXMgdW5pdmVyc2FsOyB0aGUgY29tbWFuZHMgcmVnaXN0ZXJlZCBUSFJPVUdIIGl0IGFyZSBub3QuIEEgc3ViY2xhc3MgcmVnaXN0ZXJzXG4gICAgICAgICAgLy8gaXRzIG93biBmcm9tIGBvbmxvYWRJbXBsYCwgY2xvc2luZyBvdmVyIGNvbGxhYm9yYXRvcnMgdGhhdCBiZWxvbmcgdG8gdGhlIGZlYXR1cmUgc3VyZmFjZSDigJQgc29cbiAgICAgICAgICAvLyB0aG9zZSBjb21tYW5kcyBtdXN0IGdvIGRvd24gd2l0aCB0aGUgc3VyZmFjZSB3aGVuIHRoZSBnYXRlIGNsb3Nlcywgb3IgdGhleSBzaXQgaW4gdGhlIHBhbGV0dGVcbiAgICAgICAgICAvLyBjYWxsaW5nIGludG8gdG9ybi1kb3duIG9iamVjdHMsIGFuZCBhcmUgcmVnaXN0ZXJlZCBhIHNlY29uZCB0aW1lIHdoZW4gdGhlIGdhdGUgcmVvcGVucyBhbmRcbiAgICAgICAgICAvLyBgb25sb2FkSW1wbGAgcnVucyBhZ2Fpbi5cbiAgICAgICAgICAvLyBSZXNvbHZlZCBvbiBldmVyeSBjYWxsIHJhdGhlciB0aGFuIGNhcHR1cmVkIGhlcmUsIGJlY2F1c2UgYHVubG9hZEZlYXR1cmVTdXJmYWNlYCBSRVBMQUNFUyB0aGVcbiAgICAgICAgICAvLyB3cmFwcGVyIGluc3RlYWQgb2YgZW1wdHlpbmcgaXQ6IGVhY2ggY3ljbGUncyBjb21tYW5kcyBiZWxvbmcgdG8gdGhhdCBjeWNsZSdzIHdyYXBwZXIuXG4gICAgICAgICAgY29tbWFuZExpZmV0aW1lT3duZXJQcm92aWRlcjogKCk6IENvbXBvbmVudEV4ID0+IHRoaXMuZ2F0ZWRXcmFwcGVyQ29tcG9uZW50LFxuICAgICAgICAgIGNvbW1hbmRSZWdpc3RyYXI6IG5ldyBQbHVnaW5Db21tYW5kUmVnaXN0cmFyKHRoaXMpLFxuICAgICAgICAgIG1lbnVFdmVudFJlZ2lzdHJhcjogdGhpcy5hZGRVbml2ZXJzYWxDaGlsZChuZXcgTWVudUV2ZW50UmVnaXN0cmFyQ29tcG9uZW50KHRoaXMuYXBwKSksXG4gICAgICAgICAgcGx1Z2luTmFtZTogdGhpcy5tYW5pZmVzdC5uYW1lXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgICAgLy8gQWx3YXlzIGF2YWlsYWJsZTsgdGhlIGNvbW1hbmQncyBvd24gYGNhbkV4ZWN1dGVgIGhpZGVzIGl0IHVubGVzcyB0aGUgYWN0aXZlIG5vdGUgaXMgbG9ja2VkLlxuICAgICAgLy8gVGhlIG9uZSBjb21tYW5kIHRoYXQgbmFtZXMgaXRzIG93bmVyIGV4cGxpY2l0bHksIG9wdGluZyBPVVQgb2YgdGhlIHN1cmZhY2Utc2NvcGVkIGRlZmF1bHQgYWJvdmU6XG4gICAgICAvLyBJdCBpcyB0aGUgcmVzY3VlIGZvciBhIG5vdGUgbGVmdCBsb2NrZWQsIGl0IGNsb3NlcyBvdmVyIG5vdGhpbmcgYnV0IHRoZSB1bml2ZXJzYWwgcmVzb3VyY2UtbG9ja1xuICAgICAgLy8gY29tcG9uZW50LCBhbmQgYSBibG9ja2VkIHBsdWdpbiBpcyBleGFjdGx5IHdoZW4gYSB1c2VyIG1heSBuZWVkIGl0LlxuICAgICAgYXdhaXQgdGhpcy5jb21tYW5kSGFuZGxlckNvbXBvbmVudC5yZWdpc3RlckNvbW1hbmRIYW5kbGVycygoKSA9PiBbXG4gICAgICAgIG5ldyBVbmxvY2tBY3RpdmVOb3RlQ29tbWFuZEhhbmRsZXIoe1xuICAgICAgICAgIGFwcDogdGhpcy5hcHAsXG4gICAgICAgICAgcmVzb3VyY2VMb2NrQ29tcG9uZW50OiB0aGlzLnJlc291cmNlTG9ja0NvbXBvbmVudFxuICAgICAgICB9KVxuICAgICAgXSwgeyBsaWZldGltZU93bmVyOiB0aGlzLmNvbW1hbmRIYW5kbGVyQ29tcG9uZW50IH0pO1xuXG4gICAgICB0aGlzLnBsdWdpblNldHRpbmdzQ29tcG9uZW50ID0gdGhpcy5hZGRVbml2ZXJzYWxDaGlsZChcbiAgICAgICAgbmV3IFBsdWdpblNldHRpbmdzQ29tcG9uZW50QmFzZTxvYmplY3Q+KHtcbiAgICAgICAgICBkYXRhSGFuZGxlcjogbmV3IFBsdWdpbkRhdGFIYW5kbGVyKHRoaXMpLFxuICAgICAgICAgIHBsdWdpbkV2ZW50U291cmNlOiBuZXcgUGx1Z2luRXZlbnRTb3VyY2VJbXBsKHRoaXMpLFxuICAgICAgICAgIHBsdWdpblNldHRpbmdzQ2xhc3M6IE9iamVjdFxuICAgICAgICB9KVxuICAgICAgKTtcblxuICAgICAgLy8gVGhlIGdhdGUuIEl0IGxvYWRzIHRoZSBmZWF0dXJlIHN1cmZhY2UgaXRzZWxmIG9uY2UgZXZlcnkgZGVjbGFyZWQgZGVwZW5kZW5jeSBpcyBzYXRpc2ZpZWQgYW5kIG5vXG4gICAgICAvLyBkZWNsYXJlZCBjb25mbGljdCBob2xkcyDigJQgd2hpY2ggZm9yIGEgcGx1Z2luIGRlY2xhcmluZyBuZWl0aGVyIGlzIGltbWVkaWF0ZWx5LCBzeW5jaHJvbm91c2x5LFxuICAgICAgLy8gYmVmb3JlIHRoaXMgbGluZSByZXR1cm5zIOKAlCBhbmQgdW5sb2FkcyBpdCBhZ2FpbiBpZiBhIGRlcGVuZGVuY3kgaXMgbGF0ZXIgZGlzYWJsZWQgb3IgdW5pbnN0YWxsZWQsXG4gICAgICAvLyBvciBhIGNvbmZsaWN0aW5nIHBsdWdpbiBpcyBlbmFibGVkLiBBIHBsdWdpbiB0aGF0IGlzIGJsb2NrZWQgdGhlcmVmb3JlIHJlYWNoZXMgYGxvYWRXaXRoUHJvbWlzZXNgXG4gICAgICAvLyBiZWxvdyBoYXZpbmcgcmVnaXN0ZXJlZCBub3RoaW5nIG9mIGl0cyBvd24sIHdpdGggb25seSB0aGUgdW5pdmVyc2FsIGNvbXBvbmVudHMgYWJvdmUgcnVubmluZyB0b1xuICAgICAgLy8gZXhwbGFpbiB3aHkgYW5kIHRvIG9mZmVyIHRoZSByZXBhaXIuXG4gICAgICAvLyBBc3NpZ25lZCBCRUZPUkUgdGhlIGFkZCwgdW5saWtlIGV2ZXJ5IHVuaXZlcnNhbCBjb21wb25lbnQgYWJvdmUsIGFuZCB0aGF0IG9yZGVyIGlzIHRoZSB3aG9sZVxuICAgICAgLy8gcG9pbnQuIEFkZGluZyB0aGlzIG9uZSBpcyB3aGF0IHJ1bnMgYG9ubG9hZEltcGxgLCBwZXIgdGhlIHBhcmFncmFwaCBhYm92ZSwgc28gdGhlIGFzc2lnbm1lbnRcbiAgICAgIC8vIHN0YXRlbWVudCBoYXMgbm90IHJldHVybmVkIHlldCB3aGlsZSB0aGUgc3ViY2xhc3MgaXMgcnVubmluZyDigJQgYW5kIGEgc2V0dGluZ3MgdGFiIGJ1aWx0IHRoZXJlXG4gICAgICAvLyByZWFkcyBgdGhpcy5wbHVnaW5HYXRlQ29tcG9uZW50YCB0byByZW5kZXIgdGhlIGBXYXJuYCBiYW5uZXIuIEFzc2lnbmluZyBhZnRlciB0aGUgYWRkIHdvdWxkXG4gICAgICAvLyBtYWtlIHRoYXQgcmVhZCB0aHJvdyBgVmFsdWUgaXMgdW5kZWZpbmVkYCBvdXQgb2YgdGhlIGdldHRlciwgd2hpY2ggaXMgYW4gb3BhcXVlIHdheSB0byBzYXlcbiAgICAgIC8vIFwidG9vIGVhcmx5XCIuIE5vdGhpbmcgYWJvdXQgY2hpbGQtYWRkIG9yZGVyIG1vdmVzOiB0aGUgc2VxdWVuY2Ugb2YgYGFkZFVuaXZlcnNhbENoaWxkYCBjYWxscyBpc1xuICAgICAgLy8gdW5jaGFuZ2VkLCBhbmQgYHNldENvbXBvbmVudGAgaXMgYSBwbGFpbiBzdG9yZS5cbiAgICAgIGNvbnN0IHBsdWdpbkdhdGVDb21wb25lbnQgPSBuZXcgUGx1Z2luR2F0ZUNvbXBvbmVudCh7XG4gICAgICAgIGNvbmZsaWN0czogdGhpcy5nZXRQbHVnaW5Db25mbGljdHMoKSxcbiAgICAgICAgZGVwZW5kZW5jaWVzOiB0aGlzLmdldFBsdWdpbkRlcGVuZGVuY2llcygpLFxuICAgICAgICBsb2FkRmVhdHVyZVN1cmZhY2U6ICgpOiBQcm9taXNlPHZvaWQ+ID0+IHRoaXMubG9hZEZlYXR1cmVTdXJmYWNlKCksXG4gICAgICAgIHBsdWdpbjogdGhpcyxcbiAgICAgICAgcGx1Z2luTm90aWNlQ29tcG9uZW50OiB0aGlzLnBsdWdpbk5vdGljZUNvbXBvbmVudCxcbiAgICAgICAgdW5sb2FkRmVhdHVyZVN1cmZhY2U6ICgpOiB2b2lkID0+IHtcbiAgICAgICAgICB0aGlzLnVubG9hZEZlYXR1cmVTdXJmYWNlKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgdGhpcy5wbHVnaW5HYXRlQ29tcG9uZW50ID0gcGx1Z2luR2F0ZUNvbXBvbmVudDtcbiAgICAgIHRoaXMuYWRkVW5pdmVyc2FsQ2hpbGQocGx1Z2luR2F0ZUNvbXBvbmVudCk7XG5cbiAgICAgIC8vIEV2ZXJ5IGNoaWxkIGhhcyBhbHJlYWR5IGxvYWRlZCBhcyBpdCB3YXMgYWRkZWQ7IHRoaXMgYXdhaXRzIHRoZWlyIGFjY3VtdWxhdGVkIGFzeW5jIHRhaWxzIGFuZFxuICAgICAgLy8gcmVwb3J0cyBhbnkgZmFpbHVyZSBhcyBhIHNpbmdsZSBgQWdncmVnYXRlRXJyb3JgLlxuICAgICAgYXdhaXQgdGhpcy51bml2ZXJzYWxXcmFwcGVyQ29tcG9uZW50LmxvYWRXaXRoUHJvbWlzZXMoKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcHJpbnRFcnJvcihuZXcgRXJyb3IoYEVycm9yIGxvYWRpbmcgcGx1Z2luICR7dGhpcy5tYW5pZmVzdC5uYW1lfSAoJHt0aGlzLm1hbmlmZXN0LmlkfSlgLCB7IGNhdXNlOiBlcnJvciB9KSk7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2FsbGVkIHdoZW4gdGhlIHBsdWdpbiBpcyB1bmxvYWRlZC5cbiAgICpcbiAgICogQW5ub3VuY2VzIHRoZSBkZXBhcnR1cmUgb24gYGFwcC53b3Jrc3BhY2VgIHNvIGFueXRoaW5nIGRlcGVuZGluZyBvbiB0aGlzIHBsdWdpbiBsZWFybnMgb2YgaXQgYXQgdGhlXG4gICAqIG1vbWVudCBpdCBoYXBwZW5zLCByYXRoZXIgdGhhbiBkaXNjb3ZlcmluZyBpdCBsYXRlciB0aHJvdWdoIGJlaGF2aW9yIHRoYXQgcXVpZXRseSBzdG9wcGVkLlxuICAgKlxuICAgKiBEbyBOT1Qgb3ZlcnJpZGUgdGhpcyBtZXRob2Q7IHB1dCB0ZWFyZG93biBvbiBhIGNvbXBvbmVudCBpbnN0ZWFkLCB3aGljaCB1bmxvYWRzIHdpdGggdGhlIHBsdWdpbi5cbiAgICovXG4gIHB1YmxpYyBvdmVycmlkZSBvbnVubG9hZCgpOiB2b2lkIHtcbiAgICB0aGlzLmJyb2FkY2FzdFVubG9hZGVkKCk7XG4gICAgc3VwZXIub251bmxvYWQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIGEgY2hpbGQgY29tcG9uZW50LlxuICAgKlxuICAgKiBAdHlwZVBhcmFtIFRDb21wb25lbnQgLSBUaGUgdHlwZSBvZiBjb21wb25lbnQgdG8gcmVtb3ZlLlxuICAgKiBAcGFyYW0gY29tcG9uZW50IC0gVGhlIGNvbXBvbmVudCBpbnN0YW5jZSB0byByZW1vdmUuXG4gICAqIEByZXR1cm5zIFRoZSByZW1vdmVkIGNvbXBvbmVudC5cbiAgICovXG4gIHB1YmxpYyBvdmVycmlkZSByZW1vdmVDaGlsZDxUQ29tcG9uZW50IGV4dGVuZHMgQ29tcG9uZW50Pihjb21wb25lbnQ6IFRDb21wb25lbnQpOiBUQ29tcG9uZW50IHtcbiAgICAvLyBSb3V0ZWQgYnkgb3duZXJzaGlwIHJhdGhlciB0aGFuIGJ5IHdoaWNoIHRpZXIgYGFkZENoaWxkYCB3b3VsZCBoYXZlIGNob3NlbiwgYmVjYXVzZSB0aGUgdHdvIGRvIG5vdFxuICAgIC8vIGFsd2F5cyBhZ3JlZTogYSB1bml2ZXJzYWwgY29tcG9uZW50IGlzIHBhcmVudGVkIGRpcmVjdGx5IG9uIHRoZSB1bml2ZXJzYWwgd3JhcHBlciwgeWV0IGEgc3ViY2xhc3NcbiAgICAvLyByZXBsYWNpbmcgb25lIGdvZXMgdGhyb3VnaCB0aGUgc2FtZSBwdWJsaWMgYHJlbW92ZUNoaWxkYCBhcyBpdCB3b3VsZCBmb3IgaXRzIG93biBjaGlsZHJlbi5cbiAgICByZXR1cm4gdGhpcy5nYXRlZFdyYXBwZXJDb21wb25lbnQuaGFzQ2hpbGQoY29tcG9uZW50KSA/IHRoaXMuZ2F0ZWRXcmFwcGVyQ29tcG9uZW50LnJlbW92ZUNoaWxkKGNvbXBvbmVudCkgOiB0aGlzLnVuaXZlcnNhbFdyYXBwZXJDb21wb25lbnQucmVtb3ZlQ2hpbGQoY29tcG9uZW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm92aWRlcyB0aGUgdHJhbnNsYXRpb25zIG1hcCB1c2VkIHRvIGluaXRpYWxpemUgaTE4biBkdXJpbmcge0BsaW5rIG9ubG9hZH0uXG4gICAqXG4gICAqIE92ZXJyaWRlIGluIHN1YmNsYXNzIHRvIHN1cHBseSBwbHVnaW4tc3BlY2lmaWMgdHJhbnNsYXRpb25zLiBUaGUgZGVmYXVsdCByZXR1cm5zIHRoZSBidWlsdC1pblxuICAgKiBgQG1uYW91bW92L29ic2lkaWFuLWxpYmAgdHJhbnNsYXRpb25zLlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgdHJhbnNsYXRpb25zIG1hcC5cbiAgICovXG4gIHByb3RlY3RlZCBjcmVhdGVUcmFuc2xhdGlvbnNNYXAoKTogVHJhbnNsYXRpb25zTWFwIHtcbiAgICByZXR1cm4gZGVmYXVsdFRyYW5zbGF0aW9uc01hcDtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm92aWRlcyB0aGUgaWNvbiBzaG93biBvbiB0aGUgcGx1Z2luJ3MgcGFyZW50IGVudHJ5IGluIGBOb3RlYm9vayBOYXZpZ2F0b3JgJ3MgY29udGV4dCBtZW51cy5cbiAgICpcbiAgICogT3ZlcnJpZGUgaW4gc3ViY2xhc3MgdG8gYnJhbmQgdGhhdCBlbnRyeTsgdGhlIGRlZmF1bHQgbGVhdmVzIGl0IHdpdGhvdXQgYW4gaWNvbi4gVGhlIGVudHJ5IGlzXG4gICAqIHRpdGxlZCB3aXRoIHRoZSBwbHVnaW4gbmFtZSBhbmQgaXMgYWRkZWQgYXV0b21hdGljYWxseSDigJQgc2VlXG4gICAqIHtAbGluayBOb3RlYm9va05hdmlnYXRvck1lbnVFdmVudFJlZ2lzdHJhckNvbXBvbmVudH0uXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSBpY29uLCBvciBgJydgIGZvciBubyBpY29uLlxuICAgKi9cbiAgcHJvdGVjdGVkIGdldE5vdGVib29rTmF2aWdhdG9yTWVudVN1Ym1lbnVJY29uKCk6IEljb25OYW1lIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICAvKipcbiAgICogUHJvdmlkZXMgdGhlIEFQSXMgdGhpcyBwbHVnaW4gZXhwb3NlcyB0byBvdGhlciBwbHVnaW5zLlxuICAgKlxuICAgKiBPdmVycmlkZSBpbiBzdWJjbGFzcyB0byBwdWJsaXNoIG9uZS4gVGhlIGRlZmF1bHQgcHVibGlzaGVzIG5vbmUuIENhbGxlZCBhZnRlciB7QGxpbmsgb25sb2FkSW1wbH0sIHNvIGFcbiAgICogZGVjbGFyYXRpb24gbWF5IHJlZmVyZW5jZSBhbnl0aGluZyBpdCBjcmVhdGVkOyB0aGUgcmV0dXJuZWQgZGVjbGFyYXRpb25zIGFyZSBwdWJsaXNoZWQgdGhyb3VnaFxuICAgKiBgcHVibGlzaFBsdWdpbkFwaWAgYW5kIHJldm9rZWQgd2hlbiB0aGUgcGx1Z2luJ3MgZmVhdHVyZSBzdXJmYWNlIHVubG9hZHMuXG4gICAqXG4gICAqIFJldHVybmluZyBhIExJU1QgcmF0aGVyIHRoYW4gYSBzaW5nbGUgQVBJIGlzIGRlbGliZXJhdGU6IHRoZSByZWdpc3RyeSBzdXBwb3J0cyBzZXZlcmFsIGNvbnRyYWN0XG4gICAqIHZlcnNpb25zIHB1Ymxpc2hlZCBzaWRlIGJ5IHNpZGUsIHdoaWNoIGlzIGhvdyBhIHByb3ZpZGVyIHNoaXBzIGEgYnJlYWtpbmcgYDIuMC4wYCB3aXRob3V0IHN0cmFuZGluZ1xuICAgKiBjb25zdW1lcnMgc3RpbGwgcGlubmVkIHRvIGBeMWAuXG4gICAqXG4gICAqIEV2ZXJ5IGRlY2xhcmF0aW9uIGhlcmUgaXMgcHVibGlzaGVkIEJFRk9SRSB0aGUgYG9ic2lkaWFuLWxpYjpwbHVnaW4tbG9hZGVkYCBicm9hZGNhc3QsIHdoaWNoIGlzXG4gICAqIHdoYXQgbGV0cyBhIGxpc3RlbmVyIGNhbGwgdGhlc2UgQVBJcyB0aGUgbW9tZW50IGl0IGhlYXJzIHRoYXQgZXZlbnQuXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSBBUEkgZGVjbGFyYXRpb25zLlxuICAgKi9cbiAgcHJvdGVjdGVkIGdldFBsdWdpbkFwaXMoKTogUGx1Z2luQXBpRGVjbGFyYXRpb25bXSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgLyoqXG4gICAqIFByb3ZpZGVzIHRoZSBwbHVnaW5zIHRoaXMgb25lIHJlZnVzZXMsIG9yIHdhcm5zIGFib3V0LCBydW5uaW5nIGJlc2lkZS5cbiAgICpcbiAgICogT3ZlcnJpZGUgaW4gc3ViY2xhc3MgdG8gZGVjbGFyZSBhbiBvdmVybGFwLiBUaGUgZGVmYXVsdCBkZWNsYXJlcyBub25lLlxuICAgKlxuICAgKiBBIGBCbG9ja2AgY29uZmxpY3QgaXMgdGhlIG1pcnJvciBpbWFnZSBvZiBhIGRlcGVuZGVuY3k6IHdoaWxlIGEgY29uZmxpY3RpbmcgcGx1Z2luIGlzIGVuYWJsZWQgYXQgYVxuICAgKiBjb25mbGljdGluZyB2ZXJzaW9uLCB7QGxpbmsgb25sb2FkSW1wbH0gZG9lcyBub3QgcnVuIGF0IGFsbCBhbmQgdGhlIHBsdWdpbiByZWdpc3RlcnMgbm90aGluZy4gRGVjbGFyZVxuICAgKiBpdCB3aGVuIGJvdGggcGx1Z2lucyBhY3Rpbmcgb24gdGhlIHNhbWUgb3BlcmF0aW9uIGRhbWFnZXMgdGhlIHZhdWx0IOKAlCB0aGVyZSBpcyBubyByZWxpYWJsZSB3YXkgdG8gd2luXG4gICAqIHRoYXQgcmFjZSwgYmVjYXVzZSB3aGljaGV2ZXIgcGx1Z2luIGxvYWRlZCBmaXJzdCBrZWVwcyBhIGhhbmQgb24gdGhlIHdoZWVsLCBzbyByZWZ1c2luZyBkZXRlcm1pbmlzdGljYWxseVxuICAgKiBiZWF0cyBjb21wZXRpbmcgdW5wcmVkaWN0YWJseS4gQSBgV2FybmAgY29uZmxpY3QgZGVjbGFyZXMgYW4gb3ZlcmxhcCB0aGF0IGlzIG1lcmVseSBhbm5veWluZywgc3VjaCBhcyBhXG4gICAqIGR1cGxpY2F0ZWQgY29tbWFuZDogYm90aCBwbHVnaW5zIGtlZXAgcnVubmluZyBhbmQgdGhlIHVzZXIgaXMgdG9sZC5cbiAgICpcbiAgICogVW5saWtlIGEgZGVwZW5kZW5jeSwgYSBjb25mbGljdGluZyBwbHVnaW4gbmVlZCBub3QgcHVibGlzaCBhbnl0aGluZyDigJQgaXQgaXMgZGV0ZWN0ZWQgYnkgcmVhZGluZyBpdHNcbiAgICogaW5zdGFsbGVkIHZlcnNpb24sIHdoaWNoIGlzIHRoZSBvbmx5IHRoaW5nIGFib3V0IGFub3RoZXIgcGx1Z2luIHRoYXQgcmVhZHMgdGhlIHNhbWUgcmVnYXJkbGVzcyBvZiBsb2FkXG4gICAqIG9yZGVyLlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgZGVjbGFyZWQgY29uZmxpY3RzLlxuICAgKi9cbiAgcHJvdGVjdGVkIGdldFBsdWdpbkNvbmZsaWN0cygpOiBQbHVnaW5Db25mbGljdFtdIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICAvKipcbiAgICogUHJvdmlkZXMgdGhlIHBsdWdpbnMgdGhpcyBvbmUgY2Fubm90IHdvcmsgd2l0aG91dC5cbiAgICpcbiAgICogT3ZlcnJpZGUgaW4gc3ViY2xhc3MgdG8gZGVjbGFyZSBhIG1hbmRhdG9yeSBkZXBlbmRlbmN5LiBUaGUgZGVmYXVsdCBkZWNsYXJlcyBub25lLCBhbmQgc3VjaCBhIHBsdWdpblxuICAgKiBsb2FkcyBleGFjdGx5IGFzIGl0IGFsd2F5cyBoYXMuXG4gICAqXG4gICAqIEEgZGVjbGFyZWQgZGVwZW5kZW5jeSBpcyBNQU5EQVRPUlksIHVubGlrZSB0aGUgb2ZmZXIgYFBsdWdpblN1Z2dlc3Rpb25Db21wb25lbnRgIG1ha2VzOiB3aGlsZSBvbmUgaXNcbiAgICogbWlzc2luZywgZGlzYWJsZWQsIG9yIHRvbyBvbGQsIHtAbGluayBvbmxvYWRJbXBsfSBkb2VzIG5vdCBydW4gYXQgYWxsIGFuZCB0aGUgcGx1Z2luIHJlZ2lzdGVycyBub3RoaW5nXG4gICAqIOKAlCBubyBjb21tYW5kcywgbm8gaGFuZGxlcnMsIG5vIHBhdGNoZXMuIEl0IHN0YXlzIGVuYWJsZWQgaW4gT2JzaWRpYW4ncyBsaXN0IHJhdGhlciB0aGFuIGRpc2FibGluZ1xuICAgKiBpdHNlbGYsIGJlY2F1c2UgdGhlIGVuYWJsZWQgc2V0IGlzIHRoZSB1c2VyJ3MgdG8gY2hhbmdlLCBhbmQgaXQgZXhwbGFpbnMgaXRzZWxmIHRocm91Z2ggYSBub3RpY2UgYW5kIGFcbiAgICogc2V0dGluZ3MgYmFubmVyIHRoYXQgaW5zdGFsbHMgdGhlIG1pc3NpbmcgcGx1Z2luIGluIG9uZSBjbGljay4gVGhlIGxvYWQgY29tcGxldGVzIHRoZSBtb21lbnQgdGhlXG4gICAqIGRlcGVuZGVuY3kgYXJyaXZlcywgd2l0aCBubyByZXN0YXJ0LlxuICAgKlxuICAgKiBBIGRlcGVuZGVuY3kgbXVzdCBwdWJsaXNoIGFuIEFQSSB0aHJvdWdoIGBwdWJsaXNoUGx1Z2luQXBpYCwgd2hpY2ggaXMgd2hhdCBtYWtlcyBpdHMgcHJlc2VuY2UsXG4gICAqIGFic2VuY2UsIHZlcnNpb24gYW5kIGRlcGFydHVyZSBhbGwgb2JzZXJ2YWJsZSB0aHJvdWdoIG9uZSBtZWNoYW5pc20uIEEgcGx1Z2luIHdpdGggbm90aGluZyB0byBleHBvc2VcbiAgICogY2FuIHB1Ymxpc2ggYW4gZW1wdHkgQVBJIHB1cmVseSBzbyBpdCBjYW4gYmUgZGVwZW5kZWQgdXBvbi5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIGRlY2xhcmVkIGRlcGVuZGVuY2llcy5cbiAgICovXG4gIHByb3RlY3RlZCBnZXRQbHVnaW5EZXBlbmRlbmNpZXMoKTogUGx1Z2luRGVwZW5kZW5jeVtdIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICAvKipcbiAgICogQ2FsbGVkIGR1cmluZyB7QGxpbmsgb25sb2FkfSB0byB3aXJlIHBsdWdpbi1zcGVjaWZpYyBjaGlsZCBjb21wb25lbnRzLlxuICAgKlxuICAgKiBPdmVycmlkZSBpbiBzdWJjbGFzcyB0byBhZGQgY2hpbGQgY29tcG9uZW50cyB2aWEge0BsaW5rIGFkZENoaWxkfS4gVGhlIHVuaXZlcnNhbCBjb21wb25lbnRzIGFyZVxuICAgKiBhdmFpbGFibGUgaGVyZS4gQ2hpbGRyZW4gYXJlIGxvYWRlZCBzZXF1ZW50aWFsbHkgaW4gdGhlIG9yZGVyIHRoZXkgYXJlIGFkZGVkIChjaGlsZHJlbi1maXJzdCkuXG4gICAqXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgc3ViY2xhc3MgbG9hZCBsb2dpYyBpcyBjb21wbGV0ZS5cbiAgICovXG4gIHByb3RlY3RlZCBvbmxvYWRJbXBsKCk6IFByb21pc2FibGU8dm9pZD4ge1xuICAgIHJldHVybiBub29wQXN5bmMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdG9yZXMgYSB1bml2ZXJzYWwgY29tcG9uZW50LCB1bmxvYWRpbmcgd2hpY2hldmVyIGNvbXBvbmVudCB0aGUga2V5IGhlbGQgYmVmb3JlLlxuICAgKlxuICAgKiBLZXllZCBieSBuYW1lIHJhdGhlciB0aGFuIGhhbmRlZCB0aGUgcHJldmlvdXMgdmFsdWUgYmVjYXVzZSBga2V5b2YgdGhpc2AgZXhjbHVkZXMgcHJpdmF0ZVxuICAgKiBtZW1iZXJzLCBzbyB0aGUgY29tcG9uZW50cyBsaXZlIGluIGEgc2luZ2xlIHtAbGluayBQbHVnaW5CYXNlQ29tcG9uZW50c30gYmFnIHdob3NlIGtleXMgQVJFXG4gICAqIGluZGV4YWJsZS5cbiAgICpcbiAgICogQHR5cGVQYXJhbSBUS2V5IC0gVGhlIGtleSBvZiB0aGUgY29tcG9uZW50IHRvIHN0b3JlLlxuICAgKiBAcGFyYW0ga2V5IC0gVGhlIGtleSBvZiB0aGUgY29tcG9uZW50IHRvIHN0b3JlLlxuICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgY29tcG9uZW50IHRvIHN0b3JlLlxuICAgKi9cbiAgLyoqXG4gICAqIEFkZHMgYSBjb21wb25lbnQgdG8gdGhlIHVuaXZlcnNhbCB0aWVyLCB3aGljaCBvdXRsaXZlcyBhbnkgZGVwZW5kZW5jeS5cbiAgICpcbiAgICogUHJpdmF0ZSBvbiBwdXJwb3NlOiBvbmx5IHRoaXMgY2xhc3MgZGVjaWRlcyB3aGF0IGlzIHVuaXZlcnNhbC4gQSBzdWJjbGFzcyBhZGRpbmcgb25lIG9mIGl0cyBvd24gZ29lc1xuICAgKiB0aHJvdWdoIHtAbGluayBhZGRDaGlsZH0gYW5kIGxhbmRzIGluIHRoZSBnYXRlZCB0aWVyLCB3aGVyZSBpdCBiZWxvbmdzLlxuICAgKlxuICAgKiBAdHlwZVBhcmFtIFRDb21wb25lbnQgLSBUaGUgdHlwZSBvZiBjb21wb25lbnQgdG8gYWRkLlxuICAgKiBAcGFyYW0gY29tcG9uZW50IC0gVGhlIGNvbXBvbmVudCBpbnN0YW5jZSB0byBhZGQuXG4gICAqIEByZXR1cm5zIFRoZSBhZGRlZCBjb21wb25lbnQuXG4gICAqL1xuICBwcml2YXRlIGFkZFVuaXZlcnNhbENoaWxkPFRDb21wb25lbnQgZXh0ZW5kcyBDb21wb25lbnQ+KGNvbXBvbmVudDogVENvbXBvbmVudCk6IFRDb21wb25lbnQge1xuICAgIHJldHVybiB0aGlzLnVuaXZlcnNhbFdyYXBwZXJDb21wb25lbnQuYWRkQ2hpbGQoY29tcG9uZW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBbm5vdW5jZXMgb24gYGFwcC53b3Jrc3BhY2VgIHRoYXQgdGhpcyBwbHVnaW4gaXMgbG9hZGVkIGFuZCBpdHMgQVBJcyBhcmUgY2FsbGFibGUuXG4gICAqL1xuICBwcml2YXRlIGJyb2FkY2FzdExvYWRlZCgpOiB2b2lkIHtcbiAgICB0aGlzLmxpZmVjeWNsZUV2ZW50UGF5bG9hZCA9IHtcbiAgICAgIGFwaVZlcnNpb25zOiB0aGlzLmdldFBsdWdpbkFwaXMoKS5tYXAoKGRlY2xhcmF0aW9uKSA9PiBkZWNsYXJhdGlvbi5hcGlWZXJzaW9uKSxcbiAgICAgIGRlcGVuZGVuY3lQbHVnaW5JZHM6IHRoaXMuZ2V0UGx1Z2luRGVwZW5kZW5jaWVzKCkubWFwKChkZXBlbmRlbmN5KSA9PiBkZXBlbmRlbmN5LnBsdWdpbklkKSxcbiAgICAgIHBsdWdpbklkOiB0aGlzLm1hbmlmZXN0LmlkLFxuICAgICAgcGx1Z2luTmFtZTogdGhpcy5tYW5pZmVzdC5uYW1lLFxuICAgICAgcGx1Z2luVmVyc2lvbjogdGhpcy5tYW5pZmVzdC52ZXJzaW9uXG4gICAgfTtcblxuICAgIHRyaWdnZXJQbHVnaW5MaWZlY3ljbGVFdmVudCh7XG4gICAgICBhcHA6IHRoaXMuYXBwLFxuICAgICAgbmFtZTogUExVR0lOX0xPQURFRF9FVkVOVF9OQU1FLFxuICAgICAgcGF5bG9hZDogdGhpcy5saWZlY3ljbGVFdmVudFBheWxvYWRcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBbm5vdW5jZXMgb24gYGFwcC53b3Jrc3BhY2VgIHRoYXQgdGhpcyBwbHVnaW4ncyBzdXJmYWNlIGhhcyBnb25lIGF3YXkuXG4gICAqXG4gICAqIFNpbGVudCB1bmxlc3MgYSBsb2FkZWQgYnJvYWRjYXN0IGlzIG91dHN0YW5kaW5nLCBzbyB0aGUgdHdvIGV2ZW50cyBzdGF5IHBhaXJlZDogYSBwbHVnaW4gdGhhdCBuZXZlclxuICAgKiBnb3QgcGFzdCBpdHMgZGVwZW5kZW5jeSBnYXRlIG5ldmVyIGFubm91bmNlZCBpdHNlbGYsIGFuZCBtdXN0IG5vdCBhbm5vdW5jZSBhIGRlcGFydHVyZSBlaXRoZXIuXG4gICAqL1xuICBwcml2YXRlIGJyb2FkY2FzdFVubG9hZGVkKCk6IHZvaWQge1xuICAgIGNvbnN0IHBheWxvYWQgPSB0aGlzLmxpZmVjeWNsZUV2ZW50UGF5bG9hZDtcbiAgICBpZiAoIXBheWxvYWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmxpZmVjeWNsZUV2ZW50UGF5bG9hZCA9IG51bGw7XG4gICAgdHJpZ2dlclBsdWdpbkxpZmVjeWNsZUV2ZW50KHtcbiAgICAgIGFwcDogdGhpcy5hcHAsXG4gICAgICBuYW1lOiBQTFVHSU5fVU5MT0FERURfRVZFTlRfTkFNRSxcbiAgICAgIHBheWxvYWRcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZHMgYW5kIGxvYWRzIHRoZSBzdWJjbGFzcydzIGZlYXR1cmUgc3VyZmFjZSwgdGhlbiBwdWJsaXNoZXMgaXRzIEFQSXMgYW5kIGFubm91bmNlcyBpdHNlbGYuXG4gICAqXG4gICAqIE5PVCBpZGVtcG90ZW50LCBkZWxpYmVyYXRlbHkuIGBQbHVnaW5HYXRlQ29tcG9uZW50YCBvd25zIHRoZSB1cC9kb3duIHN0YXRlIG1hY2hpbmUgYW5kIGNhbGxzXG4gICAqIHRoaXMgb25seSBvbiBhIHJlYWwgdHJhbnNpdGlvbjsgYSBzZWNvbmQgZ3VhcmQgaGVyZSB3b3VsZCBiZSBhIHNlY29uZCBjb3B5IG9mIHRoYXQgc3RhdGUsIHdoaWNoIGlzIHRoZVxuICAgKiBraW5kIG9mIGR1cGxpY2F0ZSB0aGF0IGRyaWZ0cy5cbiAgICpcbiAgICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyBvbmNlIHRoZSBzdXJmYWNlIGlzIGxvYWRlZCBhbmQgdGhlIGJyb2FkY2FzdCBoYXMgYmVlbiBtYWRlLlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBsb2FkRmVhdHVyZVN1cmZhY2UoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gTG9hZGVkIGV4cGxpY2l0bHkgZm9yIHRoZSBzYW1lIHJlYXNvbiB0aGUgdW5pdmVyc2FsIHdyYXBwZXIgaXM6IGBhZGRDaGlsZGAgbG9hZHMgYSBjaGlsZCBvbmx5IG9uY2VcbiAgICAvLyBpdHMgcGFyZW50IGlzIGxvYWRlZCwgYW5kIHRoZSBzdXJmYWNlIGhhcyB0byBiZSBsaXZlIGJlZm9yZSBgb25sb2FkSW1wbGAgc3RhcnRzIGFkZGluZyB0byBpdC5cbiAgICBjb25zdCBnYXRlZFdyYXBwZXJDb21wb25lbnQgPSB0aGlzLmdhdGVkV3JhcHBlckNvbXBvbmVudDtcbiAgICB0aGlzLnVuaXZlcnNhbFdyYXBwZXJDb21wb25lbnQuYWRkQ2hpbGQoZ2F0ZWRXcmFwcGVyQ29tcG9uZW50KTtcbiAgICBnYXRlZFdyYXBwZXJDb21wb25lbnQubG9hZCgpO1xuXG4gICAgYXdhaXQgdGhpcy5vbmxvYWRJbXBsKCk7XG4gICAgYXdhaXQgZ2F0ZWRXcmFwcGVyQ29tcG9uZW50LmxvYWRXaXRoUHJvbWlzZXMoKTtcblxuICAgIGZvciAoY29uc3QgZGVjbGFyYXRpb24gb2YgdGhpcy5nZXRQbHVnaW5BcGlzKCkpIHtcbiAgICAgIHB1Ymxpc2hQbHVnaW5BcGkoe1xuICAgICAgICAuLi5kZWNsYXJhdGlvbixcbiAgICAgICAgLy8gUmV2b2tlZCB3aXRoIHRoZSBTVVJGQUNFLCBub3Qgd2l0aCB0aGUgcGx1Z2luOiBhIHBsdWdpbiB3aG9zZSBkZXBlbmRlbmN5IGdvZXMgYXdheSBrZWVwcyBydW5uaW5nXG4gICAgICAgIC8vIGl0cyB1bml2ZXJzYWwgY29tcG9uZW50cywgYW5kIGEgY29uc3VtZXIgbXVzdCBub3QgYmUgbGVmdCBob2xkaW5nIGEgaGFuZGxlIGludG8gdGhlIGhhbGYgb2YgaXRcbiAgICAgICAgLy8gdGhhdCB3YXMganVzdCB0b3JuIGRvd24uXG4gICAgICAgIGNvbXBvbmVudDogZ2F0ZWRXcmFwcGVyQ29tcG9uZW50LFxuICAgICAgICBwbHVnaW46IHRoaXNcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMuYnJvYWRjYXN0TG9hZGVkKCk7XG4gIH1cblxuICBwcml2YXRlIHNldENvbXBvbmVudDxUS2V5IGV4dGVuZHMga2V5b2YgUGx1Z2luQmFzZUNvbXBvbmVudHM+KGtleTogVEtleSwgdmFsdWU6IE5vbk51bGxhYmxlPFBsdWdpbkJhc2VDb21wb25lbnRzW1RLZXldPik6IHZvaWQge1xuICAgIGNvbnN0IG9sZENvbXBvbmVudCA9IHRoaXMuY29tcG9uZW50c1trZXldO1xuICAgIGlmIChvbGRDb21wb25lbnQpIHtcbiAgICAgIHRoaXMucmVtb3ZlQ2hpbGQob2xkQ29tcG9uZW50KTtcbiAgICB9XG4gICAgdGhpcy5jb21wb25lbnRzW2tleV0gPSB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUZWFycyB0aGUgc3ViY2xhc3MncyBmZWF0dXJlIHN1cmZhY2UgZG93biwgbGVhdmluZyB0aGUgdW5pdmVyc2FsIGNvbXBvbmVudHMgcnVubmluZy5cbiAgICovXG4gIHByaXZhdGUgdW5sb2FkRmVhdHVyZVN1cmZhY2UoKTogdm9pZCB7XG4gICAgY29uc3QgZ2F0ZWRXcmFwcGVyQ29tcG9uZW50ID0gdGhpcy5nYXRlZFdyYXBwZXJDb21wb25lbnQ7XG5cbiAgICAvLyBSZXBsYWNlZCBCRUZPUkUgdGhlIG9sZCBvbmUgaXMgdW5sb2FkZWQsIHNvIGFueXRoaW5nIHRoYXQgcmVzdW1lcyBtaWQtdGVhcmRvd24gYW5kIGNhbGxzIGBhZGRDaGlsZGBcbiAgICAvLyBwYXJrcyBpdHMgY2hpbGQgb24gdGhlIGZyZXNoIHN1cmZhY2UgcmF0aGVyIHRoYW4gb24gdGhlIG9uZSBiZWluZyB0b3JuIGRvd24g4oCUIHdoZXJlIGBDb21wb25lbnRFeGBcbiAgICAvLyB3b3VsZCByZWZ1c2UgaXQgb3V0cmlnaHQsIHNpbmNlIGl0IHJlZnVzZXMgY2hpbGRyZW4gYWRkZWQgdG8gYW4gYWxyZWFkeS11bmxvYWRlZCBjb21wb25lbnQuXG4gICAgdGhpcy5nYXRlZFdyYXBwZXJDb21wb25lbnQgPSBuZXcgQ29tcG9uZW50RXgoKTtcbiAgICB0aGlzLnVuaXZlcnNhbFdyYXBwZXJDb21wb25lbnQucmVtb3ZlQ2hpbGQoZ2F0ZWRXcmFwcGVyQ29tcG9uZW50KTtcblxuICAgIHRoaXMuYnJvYWRjYXN0VW5sb2FkZWQoKTtcbiAgfVxufVxuXG4vKipcbiAqIFJlbG9hZHMgdGhlIHNwZWNpZmllZCBwbHVnaW4gYnkgZGlzYWJsaW5nIGFuZCB0aGVuIHJlLWVuYWJsaW5nIGl0LlxuICpcbiAqIEBwYXJhbSBwbHVnaW4gLSBUaGUgcGx1Z2luIHRvIHJlbG9hZC5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgcGx1Z2luIGlzIHJlbG9hZGVkLlxuICogQHRocm93cyB7QGxpbmsgUGx1Z2luRW5hYmxlUmVmdXNlZEVycm9yfSBJZiBPYnNpZGlhbiByZWZ1c2VkIHRvIGVuYWJsZSB0aGUgcGx1Z2luIGFnYWluLCB3aGljaCBsZWF2ZXMgaXRcbiAqIGRpc2FibGVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVsb2FkUGx1Z2luKHBsdWdpbjogUGx1Z2luKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHBsdWdpbnMgPSBwbHVnaW4uYXBwLnBsdWdpbnM7XG4gIGNvbnN0IHBsdWdpbklkID0gcGx1Z2luLm1hbmlmZXN0LmlkO1xuICBhd2FpdCBwbHVnaW5zLmRpc2FibGVQbHVnaW4ocGx1Z2luSWQpO1xuICBpZiAoIWF3YWl0IHBsdWdpbnMuZW5hYmxlUGx1Z2luKHBsdWdpbklkKSkge1xuICAgIHRocm93IG5ldyBQbHVnaW5FbmFibGVSZWZ1c2VkRXJyb3IocGx1Z2luSWQpO1xuICB9XG59XG5cbi8qKlxuICogRGlzcGxheXMgYW4gZXJyb3IgbWVzc2FnZSBhcyBhIG5vdGljZSwgbG9ncyBpdCB0byB0aGUgY29uc29sZSwgYW5kIGRpc2FibGVzIHRoZSBzcGVjaWZpZWQgcGx1Z2luLlxuICpcbiAqIEBwYXJhbSBwbHVnaW4gLSBUaGUgcGx1Z2luIHRvIGRpc2FibGUuXG4gKiBAcGFyYW0gbWVzc2FnZSAtIFRoZSBlcnJvciBtZXNzYWdlIHRvIGRpc3BsYXkgYW5kIGxvZy5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgcGx1Z2luIGlzIGRpc2FibGVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2hvd0Vycm9yQW5kRGlzYWJsZVBsdWdpbihwbHVnaW46IFBsdWdpbiwgbWVzc2FnZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHBsdWdpbk5vdGljZUNvbXBvbmVudCA9IG5ldyBQbHVnaW5Ob3RpY2VDb21wb25lbnQoe1xuICAgIGFwcDogcGx1Z2luLmFwcCxcbiAgICBwbHVnaW5OYW1lOiBwbHVnaW4ubWFuaWZlc3QubmFtZVxuICB9KTtcbiAgcGx1Z2luTm90aWNlQ29tcG9uZW50LnNob3dOb3RpY2UobWVzc2FnZSk7XG4gIHByaW50RXJyb3IobmV3IEVycm9yKG1lc3NhZ2UpKTtcbiAgYXdhaXQgcGx1Z2luLmFwcC5wbHVnaW5zLmRpc2FibGVQbHVnaW4ocGx1Z2luLm1hbmlmZXN0LmlkKTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFjQSwwQkFBaUM7QUFDakMsbUJBQTJCO0FBQzNCLHNCQUEwQjtBQUMxQix5QkFBa0M7QUFDbEMsc0JBQXVCO0FBY3ZCLGtDQUFzQztBQUN0Qyx1Q0FBd0M7QUFDeEMsZ0RBQStDO0FBQy9DLCtCQUF1QztBQUN2QywrQkFBeUM7QUFDekMsb0NBQXFDO0FBQ3JDLDJDQUEyQztBQUMzQywwQkFBNEI7QUFDNUIscUNBQXNDO0FBQ3RDLDRDQUE0QztBQUM1QywrREFBNkQ7QUFDN0Qsc0NBQXVDO0FBQ3ZDLG1DQUFvQztBQUNwQyxxQ0FBc0M7QUFDdEMsdUNBQTRDO0FBQzVDLDBCQUFrQztBQUNsQyxrQkFBeUI7QUFDekIsOEJBQXVDO0FBQ3ZDLDJCQUFzQztBQUN0Qyx3QkFBaUM7QUFDakMsaUNBQXNDO0FBQ3RDLHFDQUlPO0FBeUJBLE1BQWUsdUJBQW1CLHNDQUFpQyxFQUFFLHNCQUFNLEVBQStCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBTS9HLElBQWMsdUJBQTZDO0FBQ3pELGVBQU8sc0NBQWtCLEtBQUssV0FBVyxvQkFBb0I7QUFBQSxFQUMvRDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU9BLElBQWMscUJBQXFCLE9BQTZCO0FBQzlELFNBQUssYUFBYSx3QkFBd0IsS0FBSztBQUFBLEVBQ2pEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBT0EsSUFBYyw2QkFBeUQ7QUFDckUsZUFBTyxzQ0FBa0IsS0FBSyxXQUFXLDBCQUEwQjtBQUFBLEVBQ3JFO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBT0EsSUFBYywyQkFBMkIsT0FBbUM7QUFDMUUsU0FBSyxhQUFhLDhCQUE4QixLQUFLO0FBQUEsRUFDdkQ7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFVQSxJQUFjLDBCQUFtRDtBQUMvRCxlQUFPLHNDQUFrQixLQUFLLFdBQVcsdUJBQXVCO0FBQUEsRUFDbEU7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFPQSxJQUFjLHdCQUF3QixPQUFnQztBQUNwRSxTQUFLLGFBQWEsMkJBQTJCLEtBQUs7QUFBQSxFQUNwRDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU9BLElBQWMsd0JBQStDO0FBQzNELGVBQU8sc0NBQWtCLEtBQUssV0FBVyxxQkFBcUI7QUFBQSxFQUNoRTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU9BLElBQWMsc0JBQXNCLE9BQThCO0FBQ2hFLFNBQUssYUFBYSx5QkFBeUIsS0FBSztBQUFBLEVBQ2xEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBT0EsSUFBYyx5QkFBaUQ7QUFDN0QsZUFBTyxzQ0FBa0IsS0FBSyxXQUFXLHNCQUFzQjtBQUFBLEVBQ2pFO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBT0EsSUFBYyx1QkFBdUIsT0FBK0I7QUFDbEUsU0FBSyxhQUFhLDBCQUEwQixLQUFLO0FBQUEsRUFDbkQ7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBZUEsSUFBYyxzQkFBMkM7QUFDdkQsZUFBTyxzQ0FBa0IsS0FBSyxXQUFXLG1CQUFtQjtBQUFBLEVBQzlEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBT0EsSUFBYyxvQkFBb0IsT0FBNEI7QUFDNUQsU0FBSyxhQUFhLHVCQUF1QixLQUFLO0FBQUEsRUFDaEQ7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFPQSxJQUFjLHdCQUErQztBQUMzRCxlQUFPLHNDQUFrQixLQUFLLFdBQVcscUJBQXFCO0FBQUEsRUFDaEU7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFPQSxJQUFjLHNCQUFzQixPQUE4QjtBQUNoRSxTQUFLLGFBQWEseUJBQXlCLEtBQUs7QUFBQSxFQUNsRDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU9BLElBQWMsMEJBQStEO0FBQzNFLGVBQU8sc0NBQWtCLEtBQUssV0FBVyx1QkFBdUI7QUFBQSxFQUNsRTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU9BLElBQWMsd0JBQXdCLE9BQTRDO0FBQ2hGLFNBQUssYUFBYSwyQkFBMkIsS0FBSztBQUFBLEVBQ3BEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFRQSxJQUFjLHdCQUErQztBQUMzRCxlQUFPLHNDQUFrQixLQUFLLFdBQVcscUJBQXFCO0FBQUEsRUFDaEU7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFPQSxJQUFjLHNCQUFzQixPQUE4QjtBQUNoRSxTQUFLLGFBQWEseUJBQXlCLEtBQUs7QUFBQSxFQUNsRDtBQUFBLEVBRWlCLGFBQW1DLENBQUM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQWM3Qyx3QkFBd0IsSUFBSSxnQ0FBWTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBS3hDLHdCQUE0RDtBQUFBO0FBQUEsRUFHbkQsNEJBQTRCLElBQUksZ0NBQVk7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQTBCN0MsU0FBdUMsV0FBbUM7QUFDeEYsV0FBTyxLQUFLLHNCQUFzQixTQUFTLFNBQVM7QUFBQSxFQUN0RDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU9BLE1BQXNCLDJCQUEwQztBQUM5RCxVQUFNLE1BQU0sMkJBQTJCO0FBQ3ZDLFVBQU0sS0FBSyxhQUFhLHdCQUF3QjtBQUFBLEVBQ2xEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFXQSxNQUFzQixTQUF3QjtBQUM1QyxRQUFJO0FBU0YsWUFBTSxTQUFTLEtBQUsseUJBQXlCO0FBQzdDLFdBQUssMEJBQTBCLEtBQUs7QUFFcEMsZ0JBQU0sc0JBQVMsS0FBSyxzQkFBc0IsQ0FBQztBQUMzQyxXQUFLLHlCQUF5QixLQUFLO0FBQUEsUUFDakMsSUFBSSx1REFBdUI7QUFBQSxVQUN6QixLQUFLLEtBQUs7QUFBQSxVQUNWLFVBQVUsS0FBSyxTQUFTO0FBQUEsUUFDMUIsQ0FBQztBQUFBLE1BQ0g7QUFDQSxXQUFLLHdCQUF3QixLQUFLO0FBQUEsUUFDaEMsSUFBSSxxREFBc0I7QUFBQSxVQUN4QixLQUFLLEtBQUs7QUFBQSxVQUNWLFlBQVksS0FBSyxTQUFTO0FBQUEsUUFDNUIsQ0FBQztBQUFBLE1BQ0g7QUFDQSxXQUFLLDZCQUE2QixLQUFLLGtCQUFrQixJQUFJLGdFQUEyQixLQUFLLHFCQUFxQixDQUFDO0FBQ25ILFdBQUssdUJBQXVCLEtBQUssa0JBQWtCLElBQUksbURBQXFCLEtBQUssU0FBUyxFQUFFLENBQUM7QUFDN0YsV0FBSyx3QkFBd0IsS0FBSyxrQkFBa0IsSUFBSSxxREFBc0IsS0FBSyxTQUFTLEVBQUUsQ0FBQztBQUMvRixXQUFLLHdCQUF3QixLQUFLLGtCQUFrQixJQUFJLDJDQUFzQixLQUFLLEtBQUssS0FBSyxTQUFTLEVBQUUsQ0FBQztBQUt6RyxZQUFNLCtDQUErQyxLQUFLO0FBQUEsUUFDeEQsSUFBSSxzR0FBNkM7QUFBQSxVQUMvQyxLQUFLLEtBQUs7QUFBQSxVQUNWLFlBQVksS0FBSyxTQUFTO0FBQUEsVUFDMUIsYUFBYSxLQUFLLG9DQUFvQztBQUFBLFFBQ3hELENBQUM7QUFBQSxNQUNIO0FBQ0EsV0FBSywwQkFBMEIsS0FBSztBQUFBLFFBQ2xDLElBQUkseURBQXdCO0FBQUEsVUFDMUIsb0JBQW9CLElBQUksa0RBQXNCLEtBQUssR0FBRztBQUFBLFVBQ3RELCtCQUErQixDQUFDLDRDQUE0QztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsVUFRNUUsOEJBQThCLE1BQW1CLEtBQUs7QUFBQSxVQUN0RCxrQkFBa0IsSUFBSSxnREFBdUIsSUFBSTtBQUFBLFVBQ2pELG9CQUFvQixLQUFLLGtCQUFrQixJQUFJLGtFQUE0QixLQUFLLEdBQUcsQ0FBQztBQUFBLFVBQ3BGLFlBQVksS0FBSyxTQUFTO0FBQUEsUUFDNUIsQ0FBQztBQUFBLE1BQ0g7QUFLQSxZQUFNLEtBQUssd0JBQXdCLHdCQUF3QixNQUFNO0FBQUEsUUFDL0QsSUFBSSx5RUFBK0I7QUFBQSxVQUNqQyxLQUFLLEtBQUs7QUFBQSxVQUNWLHVCQUF1QixLQUFLO0FBQUEsUUFDOUIsQ0FBQztBQUFBLE1BQ0gsR0FBRyxFQUFFLGVBQWUsS0FBSyx3QkFBd0IsQ0FBQztBQUVsRCxXQUFLLDBCQUEwQixLQUFLO0FBQUEsUUFDbEMsSUFBSSw2REFBb0M7QUFBQSxVQUN0QyxhQUFhLElBQUksc0NBQWtCLElBQUk7QUFBQSxVQUN2QyxtQkFBbUIsSUFBSSxpREFBc0IsSUFBSTtBQUFBLFVBQ2pELHFCQUFxQjtBQUFBLFFBQ3ZCLENBQUM7QUFBQSxNQUNIO0FBZUEsWUFBTSxzQkFBc0IsSUFBSSxpREFBb0I7QUFBQSxRQUNsRCxXQUFXLEtBQUssbUJBQW1CO0FBQUEsUUFDbkMsY0FBYyxLQUFLLHNCQUFzQjtBQUFBLFFBQ3pDLG9CQUFvQixNQUFxQixLQUFLLG1CQUFtQjtBQUFBLFFBQ2pFLFFBQVE7QUFBQSxRQUNSLHVCQUF1QixLQUFLO0FBQUEsUUFDNUIsc0JBQXNCLE1BQVk7QUFDaEMsZUFBSyxxQkFBcUI7QUFBQSxRQUM1QjtBQUFBLE1BQ0YsQ0FBQztBQUNELFdBQUssc0JBQXNCO0FBQzNCLFdBQUssa0JBQWtCLG1CQUFtQjtBQUkxQyxZQUFNLEtBQUssMEJBQTBCLGlCQUFpQjtBQUFBLElBQ3hELFNBQVMsT0FBTztBQUNkLG1DQUFXLElBQUksTUFBTSx3QkFBd0IsS0FBSyxTQUFTLElBQUksS0FBSyxLQUFLLFNBQVMsRUFBRSxLQUFLLEVBQUUsT0FBTyxNQUFNLENBQUMsQ0FBQztBQUMxRyxZQUFNO0FBQUEsSUFDUjtBQUFBLEVBQ0Y7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFVZ0IsV0FBaUI7QUFDL0IsU0FBSyxrQkFBa0I7QUFDdkIsVUFBTSxTQUFTO0FBQUEsRUFDakI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBU2dCLFlBQTBDLFdBQW1DO0FBSTNGLFdBQU8sS0FBSyxzQkFBc0IsU0FBUyxTQUFTLElBQUksS0FBSyxzQkFBc0IsWUFBWSxTQUFTLElBQUksS0FBSywwQkFBMEIsWUFBWSxTQUFTO0FBQUEsRUFDbEs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFVVSx3QkFBeUM7QUFDakQsV0FBTztBQUFBLEVBQ1Q7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVdVLHNDQUFnRDtBQUN4RCxXQUFPO0FBQUEsRUFDVDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFrQlUsZ0JBQXdDO0FBQ2hELFdBQU8sQ0FBQztBQUFBLEVBQ1Y7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQW9CVSxxQkFBdUM7QUFDL0MsV0FBTyxDQUFDO0FBQUEsRUFDVjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFxQlUsd0JBQTRDO0FBQ3BELFdBQU8sQ0FBQztBQUFBLEVBQ1Y7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFVVSxhQUErQjtBQUN2QyxlQUFPLDJCQUFVO0FBQUEsRUFDbkI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQXVCUSxrQkFBZ0QsV0FBbUM7QUFDekYsV0FBTyxLQUFLLDBCQUEwQixTQUFTLFNBQVM7QUFBQSxFQUMxRDtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBS1Esa0JBQXdCO0FBQzlCLFNBQUssd0JBQXdCO0FBQUEsTUFDM0IsYUFBYSxLQUFLLGNBQWMsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLFlBQVksVUFBVTtBQUFBLE1BQzdFLHFCQUFxQixLQUFLLHNCQUFzQixFQUFFLElBQUksQ0FBQyxlQUFlLFdBQVcsUUFBUTtBQUFBLE1BQ3pGLFVBQVUsS0FBSyxTQUFTO0FBQUEsTUFDeEIsWUFBWSxLQUFLLFNBQVM7QUFBQSxNQUMxQixlQUFlLEtBQUssU0FBUztBQUFBLElBQy9CO0FBRUEsb0VBQTRCO0FBQUEsTUFDMUIsS0FBSyxLQUFLO0FBQUEsTUFDVixNQUFNO0FBQUEsTUFDTixTQUFTLEtBQUs7QUFBQSxJQUNoQixDQUFDO0FBQUEsRUFDSDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBUVEsb0JBQTBCO0FBQ2hDLFVBQU0sVUFBVSxLQUFLO0FBQ3JCLFFBQUksQ0FBQyxTQUFTO0FBQ1o7QUFBQSxJQUNGO0FBRUEsU0FBSyx3QkFBd0I7QUFDN0Isb0VBQTRCO0FBQUEsTUFDMUIsS0FBSyxLQUFLO0FBQUEsTUFDVixNQUFNO0FBQUEsTUFDTjtBQUFBLElBQ0YsQ0FBQztBQUFBLEVBQ0g7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVdBLE1BQWMscUJBQW9DO0FBR2hELFVBQU0sd0JBQXdCLEtBQUs7QUFDbkMsU0FBSywwQkFBMEIsU0FBUyxxQkFBcUI7QUFDN0QsMEJBQXNCLEtBQUs7QUFFM0IsVUFBTSxLQUFLLFdBQVc7QUFDdEIsVUFBTSxzQkFBc0IsaUJBQWlCO0FBRTdDLGVBQVcsZUFBZSxLQUFLLGNBQWMsR0FBRztBQUM5Qyw4Q0FBaUI7QUFBQSxRQUNmLEdBQUc7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQUlILFdBQVc7QUFBQSxRQUNYLFFBQVE7QUFBQSxNQUNWLENBQUM7QUFBQSxJQUNIO0FBRUEsU0FBSyxnQkFBZ0I7QUFBQSxFQUN2QjtBQUFBLEVBRVEsYUFBc0QsS0FBVyxPQUFzRDtBQUM3SCxVQUFNLGVBQWUsS0FBSyxXQUFXLEdBQUc7QUFDeEMsUUFBSSxjQUFjO0FBQ2hCLFdBQUssWUFBWSxZQUFZO0FBQUEsSUFDL0I7QUFDQSxTQUFLLFdBQVcsR0FBRyxJQUFJO0FBQUEsRUFDekI7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQUtRLHVCQUE2QjtBQUNuQyxVQUFNLHdCQUF3QixLQUFLO0FBS25DLFNBQUssd0JBQXdCLElBQUksZ0NBQVk7QUFDN0MsU0FBSywwQkFBMEIsWUFBWSxxQkFBcUI7QUFFaEUsU0FBSyxrQkFBa0I7QUFBQSxFQUN6QjtBQUNGO0FBVUEsZUFBc0IsYUFBYSxRQUErQjtBQUNoRSxRQUFNLFVBQVUsT0FBTyxJQUFJO0FBQzNCLFFBQU0sV0FBVyxPQUFPLFNBQVM7QUFDakMsUUFBTSxRQUFRLGNBQWMsUUFBUTtBQUNwQyxNQUFJLENBQUMsTUFBTSxRQUFRLGFBQWEsUUFBUSxHQUFHO0FBQ3pDLFVBQU0sSUFBSSxrREFBeUIsUUFBUTtBQUFBLEVBQzdDO0FBQ0Y7QUFTQSxlQUFzQiwwQkFBMEIsUUFBZ0IsU0FBZ0M7QUFDOUYsUUFBTSx3QkFBd0IsSUFBSSxxREFBc0I7QUFBQSxJQUN0RCxLQUFLLE9BQU87QUFBQSxJQUNaLFlBQVksT0FBTyxTQUFTO0FBQUEsRUFDOUIsQ0FBQztBQUNELHdCQUFzQixXQUFXLE9BQU87QUFDeEMsK0JBQVcsSUFBSSxNQUFNLE9BQU8sQ0FBQztBQUM3QixRQUFNLE9BQU8sSUFBSSxRQUFRLGNBQWMsT0FBTyxTQUFTLEVBQUU7QUFDM0Q7IiwibmFtZXMiOltdfQ==
@@ -350,6 +350,8 @@ export declare abstract class PluginBase extends PluginBase_base implements Plug
350
350
  *
351
351
  * @param plugin - The plugin to reload.
352
352
  * @returns A {@link Promise} that resolves when the plugin is reloaded.
353
+ * @throws {@link PluginEnableRefusedError} If Obsidian refused to enable the plugin again, which leaves it
354
+ * disabled.
353
355
  */
354
356
  export declare function reloadPlugin(plugin: Plugin): Promise<void>;
355
357
  /**