obsidian-dev-utils 87.3.1 → 88.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/dev/main.js +37670 -0
  3. package/dist/dev/manifest.json +9 -0
  4. package/dist/lib/cjs/__merged.cjs +6 -1
  5. package/dist/lib/cjs/__merged.d.cts +2 -1
  6. package/dist/lib/cjs/generated-during-build.cjs +1 -1
  7. package/dist/lib/cjs/obsidian/async-with-notice.cjs +11 -7
  8. package/dist/lib/cjs/obsidian/async-with-notice.d.cts +6 -4
  9. package/dist/lib/cjs/obsidian/canvas.cjs +190 -0
  10. package/dist/lib/cjs/obsidian/canvas.d.cts +28 -0
  11. package/dist/lib/cjs/obsidian/components/component-ex.cjs +28 -1
  12. package/dist/lib/cjs/obsidian/components/component-ex.d.cts +23 -0
  13. package/dist/lib/cjs/obsidian/components/layout-ready-component.cjs +16 -3
  14. package/dist/lib/cjs/obsidian/components/rename-delete-handler-component.cjs +13 -39
  15. package/dist/lib/cjs/obsidian/components/rename-delete-handler-component.d.cts +2 -18
  16. package/dist/lib/cjs/obsidian/file-manager.cjs +3 -1
  17. package/dist/lib/cjs/obsidian/index.cjs +4 -1
  18. package/dist/lib/cjs/obsidian/index.d.cts +1 -0
  19. package/dist/lib/cjs/obsidian/markdown-code-block-processor.cjs +4 -1
  20. package/dist/lib/cjs/obsidian/metadata-cache.cjs +2 -3
  21. package/dist/lib/cjs/obsidian/queue.cjs +2 -3
  22. package/dist/lib/cjs/obsidian/vault-transaction.cjs +3 -1
  23. package/dist/lib/cjs/obsidian/vault.cjs +34 -3
  24. package/dist/lib/cjs/obsidian/vault.d.cts +47 -0
  25. package/dist/lib/esm/__merged.d.mts +2 -1
  26. package/dist/lib/esm/__merged.mjs +5 -1
  27. package/dist/lib/esm/generated-during-build.mjs +1 -1
  28. package/dist/lib/esm/obsidian/async-with-notice.d.mts +6 -4
  29. package/dist/lib/esm/obsidian/async-with-notice.mjs +11 -7
  30. package/dist/lib/esm/obsidian/canvas.d.mts +28 -0
  31. package/dist/lib/esm/obsidian/canvas.mjs +85 -0
  32. package/dist/lib/esm/obsidian/components/component-ex.d.mts +23 -0
  33. package/dist/lib/esm/obsidian/components/component-ex.mjs +28 -1
  34. package/dist/lib/esm/obsidian/components/layout-ready-component.mjs +16 -3
  35. package/dist/lib/esm/obsidian/components/rename-delete-handler-component.d.mts +2 -18
  36. package/dist/lib/esm/obsidian/components/rename-delete-handler-component.mjs +14 -40
  37. package/dist/lib/esm/obsidian/file-manager.mjs +3 -1
  38. package/dist/lib/esm/obsidian/index.d.mts +1 -0
  39. package/dist/lib/esm/obsidian/index.mjs +3 -1
  40. package/dist/lib/esm/obsidian/markdown-code-block-processor.mjs +4 -1
  41. package/dist/lib/esm/obsidian/metadata-cache.mjs +2 -3
  42. package/dist/lib/esm/obsidian/queue.mjs +2 -3
  43. package/dist/lib/esm/obsidian/vault-transaction.mjs +3 -1
  44. package/dist/lib/esm/obsidian/vault.d.mts +47 -0
  45. package/dist/lib/esm/obsidian/vault.mjs +32 -3
  46. package/obsidian/canvas/package.json +6 -0
  47. package/package.json +1 -1
@@ -0,0 +1,190 @@
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
+
6
+ (function initCjs() {
7
+ // eslint-disable-next-line obsidianmd/no-global-this -- Actively use globalThis.
8
+ const globalThisRecord = globalThis;
9
+ globalThisRecord['__name'] ??= name;
10
+ const originalRequire = require;
11
+ if (originalRequire && !originalRequire.__isPatched) {
12
+ // eslint-disable-next-line no-global-assign, no-implicit-globals -- We need to patch the `require()` function.
13
+ require = Object.assign(
14
+ (id) => requirePatched(id),
15
+ originalRequire,
16
+ {
17
+ __isPatched: true
18
+ }
19
+ );
20
+ }
21
+
22
+ const newFuncs = {
23
+ __extractDefault() {
24
+ return extractDefault;
25
+ },
26
+ process() {
27
+ const browserProcess = {
28
+ browser: true,
29
+ cwd() {
30
+ return '/';
31
+ },
32
+ env: {},
33
+ platform: 'android'
34
+ };
35
+ return browserProcess;
36
+ }
37
+ };
38
+
39
+ for (const key of Object.keys(newFuncs)) {
40
+ globalThisRecord[key] ??= newFuncs[key]?.();
41
+ }
42
+
43
+ function name(obj) {
44
+ return obj;
45
+ }
46
+
47
+ function extractDefault(module) {
48
+ return module && module.__esModule && 'default' in module ? module.default : module;
49
+ }
50
+
51
+ const OBSIDIAN_BUILT_IN_MODULE_NAMES = [
52
+ 'obsidian',
53
+ '@codemirror/autocomplete',
54
+ '@codemirror/collab',
55
+ '@codemirror/commands',
56
+ '@codemirror/language',
57
+ '@codemirror/lint',
58
+ '@codemirror/search',
59
+ '@codemirror/state',
60
+ '@codemirror/text',
61
+ '@codemirror/view',
62
+ '@lezer/common',
63
+ '@lezer/lr',
64
+ '@lezer/highlight'];
65
+
66
+
67
+ const DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES = [
68
+ '@codemirror/closebrackets',
69
+ '@codemirror/comment',
70
+ '@codemirror/fold',
71
+ '@codemirror/gutter',
72
+ '@codemirror/highlight',
73
+ '@codemirror/history',
74
+ '@codemirror/matchbrackets',
75
+ '@codemirror/panel',
76
+ '@codemirror/rangeset',
77
+ '@codemirror/rectangular-selection',
78
+ '@codemirror/stream-parser',
79
+ '@codemirror/tooltip'];
80
+
81
+
82
+ function requirePatched(id) {
83
+ if (OBSIDIAN_BUILT_IN_MODULE_NAMES.includes(id) || DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES.includes(id)) {
84
+ return originalRequire?.(id);
85
+ }
86
+
87
+ // eslint-disable-next-line @typescript-eslint/no-deprecated, obsidianmd/no-global-this -- Need access to app. Actively use globalThis.
88
+ if (globalThis.app.isMobile) {
89
+ if (id === 'process' || id === 'node:process') {
90
+ // eslint-disable-next-line no-console -- Valid usage.
91
+ console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Fake process object is returned instead.`);
92
+ // eslint-disable-next-line obsidianmd/no-global-this -- Actively use globalThis.
93
+ return globalThis.process;
94
+ }
95
+ } else {
96
+ const module = originalRequire?.(id);
97
+ if (module) {
98
+ return extractDefault(module);
99
+ }
100
+ }
101
+
102
+ // eslint-disable-next-line no-console -- Valid usage.
103
+ console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Empty object is returned instead.`);
104
+ return {};
105
+ }
106
+ })();
107
+
108
+ "use strict";
109
+ var __defProp = Object.defineProperty;
110
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
111
+ var __getOwnPropNames = Object.getOwnPropertyNames;
112
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
113
+ var __export = (target, all) => {
114
+ for (var name in all)
115
+ __defProp(target, name, { get: all[name], enumerable: true });
116
+ };
117
+ var __copyProps = (to, from, except, desc) => {
118
+ if (from && typeof from === "object" || typeof from === "function") {
119
+ for (let key of __getOwnPropNames(from))
120
+ if (!__hasOwnProp.call(to, key) && key !== except)
121
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
122
+ }
123
+ return to;
124
+ };
125
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
126
+ var canvas_exports = {};
127
+ __export(canvas_exports, {
128
+ getCanvasReferences: () => getCanvasReferences
129
+ });
130
+ module.exports = __toCommonJS(canvas_exports);
131
+ var import_metadata_cache = require('./metadata-cache.cjs');
132
+ var import_vault = require('./vault.cjs');
133
+ async function getCanvasReferences(app, pathOrFile) {
134
+ const content = await (0, import_vault.readSafe)(app, pathOrFile);
135
+ if (content === null) {
136
+ return [];
137
+ }
138
+ let partialCanvasData;
139
+ try {
140
+ partialCanvasData = JSON.parse(content);
141
+ } catch {
142
+ return [];
143
+ }
144
+ const canvasData = partialCanvasData?.nodes ? partialCanvasData : {
145
+ edges: [],
146
+ nodes: []
147
+ };
148
+ const references = [];
149
+ for (const [nodeIndex, node] of canvasData.nodes.entries()) {
150
+ switch (node.type) {
151
+ case "file": {
152
+ const canvasFileNodeReference = {
153
+ isCanvas: true,
154
+ key: `nodes.${String(nodeIndex)}.file`,
155
+ link: node.file,
156
+ nodeIndex,
157
+ original: node.file,
158
+ type: "file"
159
+ };
160
+ references.push(canvasFileNodeReference);
161
+ break;
162
+ }
163
+ case "text": {
164
+ const metadata = await (0, import_metadata_cache.parseMetadata)(app, node.text);
165
+ const links = (0, import_metadata_cache.getLinks)({ cache: metadata });
166
+ for (const [linkIndex, link] of links.entries()) {
167
+ const canvasTextNodeReference = {
168
+ isCanvas: true,
169
+ key: `nodes.${String(nodeIndex)}.text.${String(linkIndex)}`,
170
+ link: link.link,
171
+ nodeIndex,
172
+ original: link.original,
173
+ originalReference: link,
174
+ type: "text"
175
+ };
176
+ references.push(canvasTextNodeReference);
177
+ }
178
+ break;
179
+ }
180
+ default:
181
+ break;
182
+ }
183
+ }
184
+ return references;
185
+ }
186
+ // Annotate the CommonJS export names for ESM import in node:
187
+ 0 && (module.exports = {
188
+ getCanvasReferences
189
+ });
190
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL2NhbnZhcy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIENvbnRhaW5zIGEgdXRpbGl0eSBmdW5jdGlvbiBmb3IgZXh0cmFjdGluZyByZWZlcmVuY2VzIGZyb20gYSBjYW52YXMgKGAuY2FudmFzYCkgZmlsZS5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEFwcCB9IGZyb20gJ29ic2lkaWFuJztcbmltcG9ydCB0eXBlIHsgQ2FudmFzRGF0YSB9IGZyb20gJ29ic2lkaWFuL2NhbnZhcy5kLnRzJztcblxuaW1wb3J0IHR5cGUgeyBQYXRoT3JGaWxlIH0gZnJvbSAnLi9maWxlLXN5c3RlbS50cyc7XG5pbXBvcnQgdHlwZSB7XG4gIENhbnZhc0ZpbGVOb2RlUmVmZXJlbmNlLFxuICBDYW52YXNSZWZlcmVuY2UsXG4gIENhbnZhc1RleHROb2RlUmVmZXJlbmNlXG59IGZyb20gJy4vcmVmZXJlbmNlLnRzJztcblxuaW1wb3J0IHtcbiAgZ2V0TGlua3MsXG4gIHBhcnNlTWV0YWRhdGFcbn0gZnJvbSAnLi9tZXRhZGF0YS1jYWNoZS50cyc7XG5pbXBvcnQgeyByZWFkU2FmZSB9IGZyb20gJy4vdmF1bHQudHMnO1xuXG4vKipcbiAqIEV4dHJhY3RzIHRoZSBvdXRnb2luZyByZWZlcmVuY2VzIG9mIGEgY2FudmFzIChgLmNhbnZhc2ApIGZpbGUuXG4gKlxuICogT2JzaWRpYW4gZG9lcyBub3QgaW5kZXggY2FudmFzIGxpbmtzIGludG8gdGhlIHBlci1maWxlIG1ldGFkYXRhIGNhY2hlLCBzbyBhIGNhbnZhcyBmaWxlJ3NcbiAqIHtAbGluayBodHRwczovL2RvY3Mub2JzaWRpYW4ubWQvUmVmZXJlbmNlL1R5cGVTY3JpcHQrQVBJL0NhY2hlZE1ldGFkYXRhIHwgQ2FjaGVkTWV0YWRhdGF9IGlzIGVtcHR5IGFuZCB0aGVcbiAqIHVzdWFsIGNhY2hlLWJhc2VkIHJlYWRlcnMgcmV0dXJuIG5vdGhpbmcgZm9yIGl0LiBUaGlzIGhlbHBlciByZWFkcyB0aGUgY2FudmFzIEpTT04gZGlyZWN0bHkgYW5kIHJldHVybnNcbiAqIGJvdGggaXRzIGZpbGUtbm9kZSBsaW5rcyBhbmQgaXRzIHRleHQtbm9kZSBlbWJlZHMgYXMge0BsaW5rIENhbnZhc1JlZmVyZW5jZX1zLlxuICpcbiAqIFRoZSByZXR1cm5lZCByZWZlcmVuY2VzIGNhcnJ5IHRoZSBgbm9kZUluZGV4YC9gdHlwZWAgKGFuZCwgZm9yIHRleHQgbm9kZXMsIHRoZSBgb3JpZ2luYWxSZWZlcmVuY2VgKSB0aGF0XG4gKiB0aGUgY2FudmFzLWF3YXJlIHdyaXRlIHBhdGggbmVlZHMsIHNvIGEgY29uc3VtZXIgY2FuIG1vdmUgYSBjYW52YXMtcmVmZXJlbmNlZCBhdHRhY2htZW50IGFuZCByZXdyaXRlIHRoZVxuICogY2FudmFzIGJ5IGNvbXBvc2luZyBgcmVmZXJlbmNlVG9GaWxlQ2hhbmdlYCAoZnJvbSBgLi9yZWZlcmVuY2UudHNgKSB3aXRoIGBhcHBseUZpbGVDaGFuZ2VzYCAoZnJvbVxuICogYC4vZmlsZS1jaGFuZ2UudHNgKS5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIE9ic2lkaWFuIGFwcCBpbnN0YW5jZS5cbiAqIEBwYXJhbSBwYXRoT3JGaWxlIC0gVGhlIGNhbnZhcyBmaWxlIChvciBpdHMgcGF0aCkgdG8gZXh0cmFjdCByZWZlcmVuY2VzIGZyb20uXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHRvIHRoZSBjYW52YXMgcmVmZXJlbmNlcywgb3IgYW4gZW1wdHkgYXJyYXkgd2hlbiB0aGUgZmlsZSBpc1xuICogbWlzc2luZyBvciBpdHMgY29udGVudCBpcyBub3QgdmFsaWQgY2FudmFzIEpTT04uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRDYW52YXNSZWZlcmVuY2VzKGFwcDogQXBwLCBwYXRoT3JGaWxlOiBQYXRoT3JGaWxlKTogUHJvbWlzZTxDYW52YXNSZWZlcmVuY2VbXT4ge1xuICBjb25zdCBjb250ZW50ID0gYXdhaXQgcmVhZFNhZmUoYXBwLCBwYXRoT3JGaWxlKTtcbiAgaWYgKGNvbnRlbnQgPT09IG51bGwpIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICBsZXQgcGFydGlhbENhbnZhc0RhdGE6IG51bGwgfCBQYXJ0aWFsPENhbnZhc0RhdGE+O1xuICB0cnkge1xuICAgIHBhcnRpYWxDYW52YXNEYXRhID0gSlNPTi5wYXJzZShjb250ZW50KSBhcyBudWxsIHwgUGFydGlhbDxDYW52YXNEYXRhPjtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgY29uc3QgY2FudmFzRGF0YSA9IHBhcnRpYWxDYW52YXNEYXRhPy5ub2Rlc1xuICAgID8gcGFydGlhbENhbnZhc0RhdGEgYXMgQ2FudmFzRGF0YVxuICAgIDoge1xuICAgICAgZWRnZXM6IFtdLFxuICAgICAgbm9kZXM6IFtdXG4gICAgfTtcblxuICBjb25zdCByZWZlcmVuY2VzOiBDYW52YXNSZWZlcmVuY2VbXSA9IFtdO1xuXG4gIGZvciAoY29uc3QgW25vZGVJbmRleCwgbm9kZV0gb2YgY2FudmFzRGF0YS5ub2Rlcy5lbnRyaWVzKCkpIHtcbiAgICBzd2l0Y2ggKG5vZGUudHlwZSkge1xuICAgICAgY2FzZSAnZmlsZSc6IHtcbiAgICAgICAgY29uc3QgY2FudmFzRmlsZU5vZGVSZWZlcmVuY2U6IENhbnZhc0ZpbGVOb2RlUmVmZXJlbmNlID0ge1xuICAgICAgICAgIGlzQ2FudmFzOiB0cnVlLFxuICAgICAgICAgIGtleTogYG5vZGVzLiR7U3RyaW5nKG5vZGVJbmRleCl9LmZpbGVgLFxuICAgICAgICAgIGxpbms6IG5vZGUuZmlsZSxcbiAgICAgICAgICBub2RlSW5kZXgsXG4gICAgICAgICAgb3JpZ2luYWw6IG5vZGUuZmlsZSxcbiAgICAgICAgICB0eXBlOiAnZmlsZSdcbiAgICAgICAgfTtcbiAgICAgICAgcmVmZXJlbmNlcy5wdXNoKGNhbnZhc0ZpbGVOb2RlUmVmZXJlbmNlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICd0ZXh0Jzoge1xuICAgICAgICBjb25zdCBtZXRhZGF0YSA9IGF3YWl0IHBhcnNlTWV0YWRhdGEoYXBwLCBub2RlLnRleHQpO1xuICAgICAgICBjb25zdCBsaW5rcyA9IGdldExpbmtzKHsgY2FjaGU6IG1ldGFkYXRhIH0pO1xuICAgICAgICBmb3IgKGNvbnN0IFtsaW5rSW5kZXgsIGxpbmtdIG9mIGxpbmtzLmVudHJpZXMoKSkge1xuICAgICAgICAgIGNvbnN0IGNhbnZhc1RleHROb2RlUmVmZXJlbmNlOiBDYW52YXNUZXh0Tm9kZVJlZmVyZW5jZSA9IHtcbiAgICAgICAgICAgIGlzQ2FudmFzOiB0cnVlLFxuICAgICAgICAgICAga2V5OiBgbm9kZXMuJHtTdHJpbmcobm9kZUluZGV4KX0udGV4dC4ke1N0cmluZyhsaW5rSW5kZXgpfWAsXG4gICAgICAgICAgICBsaW5rOiBsaW5rLmxpbmssXG4gICAgICAgICAgICBub2RlSW5kZXgsXG4gICAgICAgICAgICBvcmlnaW5hbDogbGluay5vcmlnaW5hbCxcbiAgICAgICAgICAgIG9yaWdpbmFsUmVmZXJlbmNlOiBsaW5rLFxuICAgICAgICAgICAgdHlwZTogJ3RleHQnXG4gICAgICAgICAgfTtcbiAgICAgICAgICByZWZlcmVuY2VzLnB1c2goY2FudmFzVGV4dE5vZGVSZWZlcmVuY2UpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlZmVyZW5jZXM7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFnQkEsNEJBR087QUFDUCxtQkFBeUI7QUFvQnpCLGVBQXNCLG9CQUFvQixLQUFVLFlBQW9EO0FBQ3RHLFFBQU0sVUFBVSxVQUFNLHVCQUFTLEtBQUssVUFBVTtBQUM5QyxNQUFJLFlBQVksTUFBTTtBQUNwQixXQUFPLENBQUM7QUFBQSxFQUNWO0FBRUEsTUFBSTtBQUNKLE1BQUk7QUFDRix3QkFBb0IsS0FBSyxNQUFNLE9BQU87QUFBQSxFQUN4QyxRQUFRO0FBQ04sV0FBTyxDQUFDO0FBQUEsRUFDVjtBQUVBLFFBQU0sYUFBYSxtQkFBbUIsUUFDbEMsb0JBQ0E7QUFBQSxJQUNBLE9BQU8sQ0FBQztBQUFBLElBQ1IsT0FBTyxDQUFDO0FBQUEsRUFDVjtBQUVGLFFBQU0sYUFBZ0MsQ0FBQztBQUV2QyxhQUFXLENBQUMsV0FBVyxJQUFJLEtBQUssV0FBVyxNQUFNLFFBQVEsR0FBRztBQUMxRCxZQUFRLEtBQUssTUFBTTtBQUFBLE1BQ2pCLEtBQUssUUFBUTtBQUNYLGNBQU0sMEJBQW1EO0FBQUEsVUFDdkQsVUFBVTtBQUFBLFVBQ1YsS0FBSyxTQUFTLE9BQU8sU0FBUyxDQUFDO0FBQUEsVUFDL0IsTUFBTSxLQUFLO0FBQUEsVUFDWDtBQUFBLFVBQ0EsVUFBVSxLQUFLO0FBQUEsVUFDZixNQUFNO0FBQUEsUUFDUjtBQUNBLG1CQUFXLEtBQUssdUJBQXVCO0FBQ3ZDO0FBQUEsTUFDRjtBQUFBLE1BQ0EsS0FBSyxRQUFRO0FBQ1gsY0FBTSxXQUFXLFVBQU0scUNBQWMsS0FBSyxLQUFLLElBQUk7QUFDbkQsY0FBTSxZQUFRLGdDQUFTLEVBQUUsT0FBTyxTQUFTLENBQUM7QUFDMUMsbUJBQVcsQ0FBQyxXQUFXLElBQUksS0FBSyxNQUFNLFFBQVEsR0FBRztBQUMvQyxnQkFBTSwwQkFBbUQ7QUFBQSxZQUN2RCxVQUFVO0FBQUEsWUFDVixLQUFLLFNBQVMsT0FBTyxTQUFTLENBQUMsU0FBUyxPQUFPLFNBQVMsQ0FBQztBQUFBLFlBQ3pELE1BQU0sS0FBSztBQUFBLFlBQ1g7QUFBQSxZQUNBLFVBQVUsS0FBSztBQUFBLFlBQ2YsbUJBQW1CO0FBQUEsWUFDbkIsTUFBTTtBQUFBLFVBQ1I7QUFDQSxxQkFBVyxLQUFLLHVCQUF1QjtBQUFBLFFBQ3pDO0FBQ0E7QUFBQSxNQUNGO0FBQUEsTUFDQTtBQUNFO0FBQUEsSUFDSjtBQUFBLEVBQ0Y7QUFFQSxTQUFPO0FBQ1Q7IiwKICAibmFtZXMiOiBbXQp9Cg==
@@ -0,0 +1,28 @@
1
+ /// <reference path="../library.d.cts" />
2
+ /**
3
+ * @file
4
+ *
5
+ * Contains a utility function for extracting references from a canvas (`.canvas`) file.
6
+ */
7
+ import type { App } from 'obsidian' with { 'resolution-mode': 'import' };
8
+ import type { PathOrFile } from './file-system.cjs';
9
+ import type { CanvasReference } from './reference.cjs';
10
+ /**
11
+ * Extracts the outgoing references of a canvas (`.canvas`) file.
12
+ *
13
+ * Obsidian does not index canvas links into the per-file metadata cache, so a canvas file's
14
+ * {@link https://docs.obsidian.md/Reference/TypeScript+API/CachedMetadata | CachedMetadata} is empty and the
15
+ * usual cache-based readers return nothing for it. This helper reads the canvas JSON directly and returns
16
+ * both its file-node links and its text-node embeds as {@link CanvasReference}s.
17
+ *
18
+ * The returned references carry the `nodeIndex`/`type` (and, for text nodes, the `originalReference`) that
19
+ * the canvas-aware write path needs, so a consumer can move a canvas-referenced attachment and rewrite the
20
+ * canvas by composing `referenceToFileChange` (from `./reference.ts`) with `applyFileChanges` (from
21
+ * `./file-change.ts`).
22
+ *
23
+ * @param app - The Obsidian app instance.
24
+ * @param pathOrFile - The canvas file (or its path) to extract references from.
25
+ * @returns A {@link Promise} that resolves to the canvas references, or an empty array when the file is
26
+ * missing or its content is not valid canvas JSON.
27
+ */
28
+ export declare function getCanvasReferences(app: App, pathOrFile: PathOrFile): Promise<CanvasReference[]>;
@@ -261,6 +261,33 @@ class ComponentEx extends import_obsidian.Component {
261
261
  throw new Error("Component is not loaded");
262
262
  }
263
263
  }
264
+ /**
265
+ * Returns the component's in-flight load {@link Promise} (its {@link onloadAsync} plus children), or `null` when
266
+ * nothing is loading — either the component loaded fully synchronously or its async load has already settled.
267
+ *
268
+ * Lets a caller scheduled while the component is still loading await the async load tail before acting, instead of
269
+ * racing it. The motivating case is a layout-ready handler (see `LayoutReadyComponent`) that fires because the
270
+ * component was loaded after the workspace layout was already ready: {@link Component.onload} has run (so `_loaded`
271
+ * is set) but {@link onloadAsync} may not have finished.
272
+ *
273
+ * @returns The in-flight load promise, or `null` if no load is in flight.
274
+ */
275
+ getInFlightLoadPromise() {
276
+ return this.loadPromise;
277
+ }
278
+ /**
279
+ * Returns whether the most recent load recorded any failure.
280
+ *
281
+ * Reflects the outcome of the last {@link load} / {@link loadWithPromises}: `true` when {@link onloadAsync} or any
282
+ * child's load threw (synchronously or asynchronously). Unlike {@link loadWithPromises}, reading this does NOT
283
+ * re-raise the collected errors — it lets a bystander (e.g. a layout-ready handler awaiting the in-flight load) tell
284
+ * whether the load succeeded without adopting a failure that the load's owner is already responsible for.
285
+ *
286
+ * @returns `true` if the last load recorded at least one error, otherwise `false`.
287
+ */
288
+ hasLoadErrors() {
289
+ return this.loadErrors.length > 0;
290
+ }
264
291
  /**
265
292
  * Sequences an already-started load step into the load promise.
266
293
  *
@@ -372,4 +399,4 @@ class ComponentEx extends import_obsidian.Component {
372
399
  0 && (module.exports = {
373
400
  ComponentEx
374
401
  });
375
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL2NvbXBvbmVudHMvY29tcG9uZW50LWV4LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogRXh0ZW5kZWQgQ29tcG9uZW50XG4gKi9cblxuaW1wb3J0IHR5cGUgeyBQcm9taXNhYmxlIH0gZnJvbSAndHlwZS1mZXN0JztcblxuaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgeyBFcnJvcldyYXBwZXIgfSBmcm9tICcuLi8uLi9lcnJvci50cyc7XG5pbXBvcnQge1xuICBub29wLFxuICBub29wQXN5bmNTaW5nbGV0b25Qcm9taXNlXG59IGZyb20gJy4uLy4uL2Z1bmN0aW9uLnRzJztcblxuLyoqXG4gKiBFeHRlbmRlZCBDb21wb25lbnRcbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG9ic2lkaWFuLWRldi11dGlscy9yZXF1aXJlLWNvbXBvbmVudC1zdWZmaXggLS0gRXh0ZW5kZWQgYmFzZSBjbGFzcy5cbmV4cG9ydCBjbGFzcyBDb21wb25lbnRFeCBleHRlbmRzIENvbXBvbmVudCBpbXBsZW1lbnRzIERpc3Bvc2FibGUge1xuICBwcml2YXRlIHJlYWRvbmx5IGNoaWxkcmVuU2V0ID0gbmV3IFNldDxDb21wb25lbnQ+KCk7XG4gIHByaXZhdGUgbG9hZEVycm9yczogRXJyb3JbXSA9IFtdO1xuICBwcml2YXRlIGxvYWRQcm9taXNlOiBudWxsIHwgUHJvbWlzZTx2b2lkPiA9IG51bGw7XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBjaGlsZCBjb21wb25lbnQuXG4gICAqXG4gICAqIE1pcnJvcnMgdGhlIG5hdGl2ZSBgQ29tcG9uZW50LmFkZENoaWxkYCBjb250cmFjdDogaWYgdGhpcyBjb21wb25lbnQgaXMgYWxyZWFkeSBsb2FkZWQsIHRoZSBjaGlsZCBpcyBsb2FkZWRcbiAgICogaW1tZWRpYXRlbHksIHNvIGBjaGlsZC5fbG9hZGVkYCBpcyBzZXQgYmVmb3JlIHRoaXMgbWV0aG9kIHJldHVybnMgZXZlbiB3aGVuIHRoaXMgY29tcG9uZW50IGhhcyBhc3luYyBsb2FkIGxvZ2ljLlxuICAgKiBUaGUgY2hpbGQncyBhc3luYyB0YWlsIChpZiBhbnkpIGlzIHNlcXVlbmNlZCBpbnRvIHRoZSBsb2FkIHByb21pc2Ugc28gYSBsYXRlciB7QGxpbmsgbG9hZFdpdGhQcm9taXNlc30gY2FsbCBhd2FpdHMgaXQuXG4gICAqXG4gICAqIEB0eXBlUGFyYW0gVENvbXBvbmVudCAtIFRoZSB0eXBlIG9mIGNvbXBvbmVudCB0byBhZGQuXG4gICAqIEBwYXJhbSBjb21wb25lbnQgLSBUaGUgY29tcG9uZW50IGluc3RhbmNlIHRvIGFkZC5cbiAgICogQHJldHVybnMgVGhlIGFkZGVkIGNvbXBvbmVudC5cbiAgICovXG4gIHB1YmxpYyBvdmVycmlkZSBhZGRDaGlsZDxUQ29tcG9uZW50IGV4dGVuZHMgQ29tcG9uZW50Pihjb21wb25lbnQ6IFRDb21wb25lbnQpOiBUQ29tcG9uZW50IHtcbiAgICB0aGlzLl9jaGlsZHJlbi5wdXNoKGNvbXBvbmVudCk7XG4gICAgdGhpcy5jaGlsZHJlblNldC5hZGQoY29tcG9uZW50KTtcblxuICAgIGlmICh0aGlzLl9sb2FkZWQpIHtcbiAgICAgIHRoaXMuYXBwZW5kRWFnZXJMb2FkU3RlcCh0aGlzLmV4dHJhY3RMb2FkUHJvbWlzYWJsZShjb21wb25lbnQpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29tcG9uZW50O1xuICB9XG5cbiAgLyoqXG4gICAqIExvYWRzIHRoZSBjb21wb25lbnQuXG4gICAqXG4gICAqIEByZXR1cm5zIERlc3BpdGUgdGhlIGRlY2xhcmVkIGB2b2lkYCByZXR1cm4gdHlwZSwgdGhpcyBtZXRob2QgcmV0dXJucyBhIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGNvbXBvbmVudCBpcyBsb2FkZWQgb3IgYG51bGxgIGlmIHRoZSBjb21wb25lbnQgaXMgZnVsbHkgc3luY2hyb25vdXMuXG4gICAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgbG9hZCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fbG9hZGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fbG9hZGVkID0gdHJ1ZTtcbiAgICB0aGlzLnJlc2V0TG9hZFN0YXRlKCk7XG5cbiAgICB0aGlzLm9ubG9hZCgpO1xuXG4gICAgY29uc3Qgb25sb2FkQXN5bmNQcm9taXNlID0gdGhpcy5vbmxvYWRBc3luYygpO1xuICAgIGlmIChvbmxvYWRBc3luY1Byb21pc2UgIT09IG5vb3BBc3luY1NpbmdsZXRvblByb21pc2UpIHtcbiAgICAgIHRoaXMuYXBwZW5kRWFnZXJMb2FkU3RlcChvbmxvYWRBc3luY1Byb21pc2UpO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgY2hpbGQgb2YgdGhpcy5fY2hpbGRyZW4uc2xpY2UoKSkge1xuICAgICAgdGhpcy5hcHBlbmRTZXF1ZW50aWFsTG9hZFN0ZXAoKCkgPT4gdGhpcy5leHRyYWN0TG9hZFByb21pc2FibGUoY2hpbGQpKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5sb2FkUHJvbWlzZSkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1pbnZhbGlkLXZvaWQtdHlwZSwgbm8tcmVzdHJpY3RlZC1zeW50YXggLS0gV2UgbmVlZCB0byBieXBhc3MgdHlwZSBzeXN0ZW0gdG8gcmV0dXJuIGBQcm9taXNlPHZvaWQ+YC5cbiAgICAgIHJldHVybiB0aGlzLmxvYWRQcm9taXNlIGFzIHVua25vd24gYXMgdm9pZDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTG9hZHMgdGhlIGNvbXBvbmVudCB3aXRoIHByb21pc2VzLlxuICAgKlxuICAgKiBVbmxpa2Uge0BsaW5rIGxvYWR9LCB0aGlzIG1ldGhvZCBuZXZlciByZWplY3RzIHdpdGggYW4gaW5kaXZpZHVhbCBlcnJvcjogZXZlcnkgZmFpbHVyZSByYWlzZWQgYnkge0BsaW5rIG9ubG9hZEFzeW5jfVxuICAgKiBvciBhIGNoaWxkJ3MgbG9hZCBpcyBjb2xsZWN0ZWQsIGFuZCBvbmNlIGV2ZXJ5dGhpbmcgc2V0dGxlcyB0aGUgcmV0dXJuZWQge0BsaW5rIFByb21pc2V9IHJlamVjdHMgd2l0aCBhIHNpbmdsZVxuICAgKiB7QGxpbmsgQWdncmVnYXRlRXJyb3J9IGhvbGRpbmcgYWxsIG9mIHRoZW0uIE5vbi1gRXJyb3JgIHRocm93YWJsZXMgYXJlIG5vcm1hbGl6ZWQgdmlhIHtAbGluayBFcnJvcldyYXBwZXIuY3JlYXRlfS5cbiAgICpcbiAgICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBjb21wb25lbnQgYW5kIGl0cyBjaGlsZHJlbiBmaW5pc2ggbG9hZGluZywgcmVqZWN0cyB3aXRoIGFuIHtAbGluayBBZ2dyZWdhdGVFcnJvcn0gaWYgYW55IGxvYWQgc3RlcCBmYWlsZWQsIG9yIGBudWxsYCBpZiB0aGUgY29tcG9uZW50IGFuZCBpdHMgY2hpbGRyZW4gZG9uJ3QgdXNlIGBhc3luY2AgbG9naWMgYW5kIG5vbmUgZmFpbGVkIHN5bmNocm9ub3VzbHkuXG4gICAqL1xuICBwdWJsaWMgbG9hZFdpdGhQcm9taXNlcygpOiBudWxsIHwgUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5sb2FkKCk7XG5cbiAgICBjb25zdCBsb2FkUHJvbWlzZSA9IHRoaXMubG9hZFByb21pc2U7XG4gICAgaWYgKCFsb2FkUHJvbWlzZSkge1xuICAgICAgaWYgKHRoaXMubG9hZEVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgQWdncmVnYXRlRXJyb3IodGhpcy5sb2FkRXJyb3JzKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gbG9hZFByb21pc2UudGhlbigoKSA9PiB7XG4gICAgICBpZiAodGhpcy5sb2FkRXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEFnZ3JlZ2F0ZUVycm9yKHRoaXMubG9hZEVycm9ycyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQXN5bmNocm9ub3VzbHkgbG9hZHMgdGhlIGNvbXBvbmVudC5cbiAgICpcbiAgICogT3ZlcnJpZGUgdG8gYWRkIGFzeW5jIGxvYWQgbG9naWMsIHdoaWNoIGlzIGV4ZWN1dGVkIGFmdGVyIHtAbGluayBDb21wb25lbnQub25sb2FkfS5cbiAgICpcbiAgICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBjb21wb25lbnQgaXMgbG9hZGVkLlxuICAgKi9cbiAgcHVibGljIG9ubG9hZEFzeW5jKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBub29wQXN5bmNTaW5nbGV0b25Qcm9taXNlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVycyBhIHtAbGluayBEaXNwb3NhYmxlfSBzbyBpdCBpcyBkaXNwb3NlZCB3aGVuIHRoaXMgY29tcG9uZW50IHVubG9hZHMsIGFuZCByZXR1cm5zIGl0IHVuY2hhbmdlZC5cbiAgICpcbiAgICogVGhlIHJlY3VycmluZyBcInRpZSBhIGRpc3Bvc2FibGUgdG8gdGhlIGNvbXBvbmVudCdzIGxpZmVjeWNsZSwgdGhlbiBrZWVwIHVzaW5nIGl0XCIgaWRpb206IHRoZSBkaXNwb3NhYmxlIGlzXG4gICAqIGRpc3Bvc2VkIG9uIHtAbGluayBDb21wb25lbnQudW5sb2FkfSAob3IgZWFybGllciwgaWYgdGhlIGNhbGxlciBkaXNwb3NlcyBpdCBkaXJlY3RseSBcdTIwMTQgZGlzcG9zZSBpcyBleHBlY3RlZCB0b1xuICAgKiBiZSBpZGVtcG90ZW50KS4gR3VhcmQgd2l0aCB7QGxpbmsgZW5zdXJlTG9hZGVkfSBhdCB0aGUgY2FsbCBzaXRlIHdoZW4gcmVnaXN0ZXJpbmcgYmVmb3JlIGxvYWQgd291bGQgYmUgdW5zYWZlLlxuICAgKlxuICAgKiBAdHlwZVBhcmFtIFREaXNwb3NhYmxlIC0gVGhlIHR5cGUgb2YgdGhlIGRpc3Bvc2FibGUuXG4gICAqIEBwYXJhbSBkaXNwb3NhYmxlIC0gVGhlIGRpc3Bvc2FibGUgdG8gcmVnaXN0ZXIuXG4gICAqIEByZXR1cm5zIFRoZSBzYW1lIGRpc3Bvc2FibGUsIGZvciBjaGFpbmluZy5cbiAgICovXG4gIHB1YmxpYyByZWdpc3RlckRpc3Bvc2FibGU8VERpc3Bvc2FibGUgZXh0ZW5kcyBEaXNwb3NhYmxlPihkaXNwb3NhYmxlOiBURGlzcG9zYWJsZSk6IFREaXNwb3NhYmxlIHtcbiAgICB0aGlzLnJlZ2lzdGVyKCgpID0+IHtcbiAgICAgIGRpc3Bvc2FibGVbU3ltYm9sLmRpc3Bvc2VdKCk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGRpc3Bvc2FibGU7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyBhIGNoaWxkIGNvbXBvbmVudC5cbiAgICpcbiAgICogQHR5cGVQYXJhbSBUQ29tcG9uZW50IC0gVGhlIHR5cGUgb2YgY29tcG9uZW50IHRvIHJlbW92ZS5cbiAgICogQHBhcmFtIGNvbXBvbmVudCAtIFRoZSBjb21wb25lbnQgaW5zdGFuY2UgdG8gcmVtb3ZlLlxuICAgKiBAcmV0dXJucyBUaGUgcmVtb3ZlZCBjb21wb25lbnQuXG4gICAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgcmVtb3ZlQ2hpbGQ8VENvbXBvbmVudCBleHRlbmRzIENvbXBvbmVudD4oY29tcG9uZW50OiBUQ29tcG9uZW50KTogVENvbXBvbmVudCB7XG4gICAgc3VwZXIucmVtb3ZlQ2hpbGQoY29tcG9uZW50KTtcbiAgICB0aGlzLmNoaWxkcmVuU2V0LmRlbGV0ZShjb21wb25lbnQpO1xuICAgIHJldHVybiBjb21wb25lbnQ7XG4gIH1cblxuICAvKipcbiAgICogRGlzcG9zZXMgb2YgdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIHB1YmxpYyBbU3ltYm9sLmRpc3Bvc2VdKCk6IHZvaWQge1xuICAgIHRoaXMudW5sb2FkKCk7XG4gIH1cblxuICAvKipcbiAgICogRW5zdXJlcyB0aGUgY29tcG9uZW50IGlzIGxvYWRlZCwgdGhyb3dpbmcgaWYgaXQgaXMgbm90LlxuICAgKlxuICAgKiBVc2UgdGhpcyB0byBndWFyZCBwdWJsaWMgbWV0aG9kcyB0aGF0IHJlZ2lzdGVyIHRlYXJkb3duLWJlYXJpbmcgcmVzb3VyY2VzICh2aWEge0BsaW5rIENvbXBvbmVudC5yZWdpc3Rlcn0sXG4gICAqIHtAbGluayBDb21wb25lbnQucmVnaXN0ZXJFdmVudH0sIHtAbGluayBDb21wb25lbnQucmVnaXN0ZXJEb21FdmVudH0sIGV0Yy4pLiBSZWdpc3RlcmluZyBiZWZvcmUgbG9hZCBpcyB1bnNhZmU6XG4gICAqIHtAbGluayBDb21wb25lbnQudW5sb2FkfSBpcyBhIG5vLW9wIHdoaWxlIHRoZSBjb21wb25lbnQgaXMgbm90IGxvYWRlZCwgc28gYW55IHRlYXJkb3duIHJlZ2lzdGVyZWQgYmVmb3JlaGFuZCB3b3VsZFxuICAgKiBuZXZlciBydW4gaWYgdGhlIGNvbXBvbmVudCBpcyB1bmxvYWRlZCB3aXRob3V0IGZpcnN0IGJlaW5nIGxvYWRlZC5cbiAgICpcbiAgICogQHRocm93cyBBbiB7QGxpbmsgRXJyb3J9IGlmIHRoZSBjb21wb25lbnQgaXMgbm90IGxvYWRlZC5cbiAgICovXG4gIHByb3RlY3RlZCBlbnN1cmVMb2FkZWQoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl9sb2FkZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ29tcG9uZW50IGlzIG5vdCBsb2FkZWQnKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2VxdWVuY2VzIGFuIGFscmVhZHktc3RhcnRlZCBsb2FkIHN0ZXAgaW50byB0aGUgbG9hZCBwcm9taXNlLlxuICAgKlxuICAgKiBUaGUgc3RlcCBpcyBwcmVzdW1lZCB0byBoYXZlIHN0YXJ0ZWQgc3luY2hyb25vdXNseSAoc28gYW55IGBfbG9hZGVkYCBmbGFnIGl0IHNldHMgaXMgYWxyZWFkeSB2aXNpYmxlKTsgb25seSB0aGVcbiAgICogYXdhaXRpbmcgb2YgaXRzIGFzeW5jIHRhaWwgaXMgc2VxdWVuY2VkIGhlcmUuXG4gICAqXG4gICAqIEBwYXJhbSBsb2FkUHJvbWlzYWJsZSAtIFRoZSByZXN1bHQgb2YgYW4gYWxyZWFkeS1zdGFydGVkIGxvYWQgc3RlcC5cbiAgICovXG4gIHByaXZhdGUgYXBwZW5kRWFnZXJMb2FkU3RlcChsb2FkUHJvbWlzYWJsZTogbnVsbCB8IFByb21pc2FibGU8dm9pZD4pOiB2b2lkIHtcbiAgICBjb25zdCBjYXB0dXJlZCA9IHRoaXMuY2FwdHVyZVNldHRsZWQobG9hZFByb21pc2FibGUpO1xuICAgIGlmICghY2FwdHVyZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBwcmV2aW91cyA9IHRoaXMubG9hZFByb21pc2U7XG4gICAgdGhpcy5zZXRMb2FkUHJvbWlzZShwcmV2aW91cyA/IHByZXZpb3VzLnRoZW4oKCkgPT4gY2FwdHVyZWQpIDogY2FwdHVyZWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlcXVlbmNlcyBhIGRlZmVycmVkIGxvYWQgc3RlcCBpbnRvIHRoZSBsb2FkIHByb21pc2UsIHJ1bm5pbmcgaXQgb25seSBhZnRlciBwcmV2aW91c2x5LWFwcGVuZGVkIHN0ZXBzIHNldHRsZS5cbiAgICpcbiAgICogQHBhcmFtIGxvYWRQcm9taXNhYmxlRm4gLSBBIGZ1bmN0aW9uIHRoYXQgc3RhcnRzIHRoZSBsb2FkIHN0ZXAgYW5kIHJldHVybnMgaXRzIHJlc3VsdC5cbiAgICovXG4gIHByaXZhdGUgYXBwZW5kU2VxdWVudGlhbExvYWRTdGVwKGxvYWRQcm9taXNhYmxlRm46ICgpID0+IG51bGwgfCBQcm9taXNhYmxlPHZvaWQ+KTogdm9pZCB7XG4gICAgY29uc3QgcHJldmlvdXMgPSB0aGlzLmxvYWRQcm9taXNlO1xuICAgIGlmIChwcmV2aW91cykge1xuICAgICAgdGhpcy5zZXRMb2FkUHJvbWlzZShwcmV2aW91cy50aGVuKCgpID0+IHRoaXMucnVuQW5kQ2FwdHVyZShsb2FkUHJvbWlzYWJsZUZuKSkpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGNhcHR1cmVkID0gdGhpcy5jYXB0dXJlU3luYyhsb2FkUHJvbWlzYWJsZUZuKTtcbiAgICBpZiAoY2FwdHVyZWQpIHtcbiAgICAgIHRoaXMuc2V0TG9hZFByb21pc2UoY2FwdHVyZWQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZWNvcmRzIGEgbG9hZCBmYWlsdXJlLlxuICAgKlxuICAgKiBBIGZhaWx1cmUgcmFpc2VkIGJ5IGEgY2hpbGQge0BsaW5rIENvbXBvbmVudEV4fSBpcyBpdHNlbGYgYW4ge0BsaW5rIEFnZ3JlZ2F0ZUVycm9yfTsgaXQgaXMgcmVjb3JkZWQgYXMtaXMgc28gdGhlXG4gICAqIGdyb3VwaW5nIGJ5IGNoaWxkIGNvbXBvbmVudCBpcyBwcmVzZXJ2ZWQgKG93biBmYWlsdXJlcyBzdGF5IGZsYXQsIGNoaWxkLXN1YnRyZWUgZmFpbHVyZXMgc3RheSBuZXN0ZWQpLlxuICAgKlxuICAgKiBAcGFyYW0gZXJyb3IgLSBUaGUgdGhyb3duIHZhbHVlIHRvIHJlY29yZC5cbiAgICovXG4gIHByaXZhdGUgY2FwdHVyZUVycm9yKGVycm9yOiB1bmtub3duKTogdm9pZCB7XG4gICAgdGhpcy5sb2FkRXJyb3JzLnB1c2goRXJyb3JXcmFwcGVyLmNyZWF0ZShlcnJvcikpO1xuICB9XG5cbiAgLyoqXG4gICAqIFdyYXBzIGFuIGFscmVhZHktc3RhcnRlZCBsb2FkIHJlc3VsdCBzbyBpdCBuZXZlciByZWplY3RzOiBhbnkgZmFpbHVyZSBpcyByZWNvcmRlZCBpbnRvIGBsb2FkRXJyb3JzYC5cbiAgICpcbiAgICogQHBhcmFtIGxvYWRQcm9taXNhYmxlIC0gVGhlIGxvYWQgcmVzdWx0IHRvIG9ic2VydmUuXG4gICAqIEByZXR1cm5zIEEgbmV2ZXItcmVqZWN0aW5nIHtAbGluayBQcm9taXNlfSwgb3IgYG51bGxgIGlmIHRoZSByZXN1bHQgaXMgZnVsbHkgc3luY2hyb25vdXMuXG4gICAqL1xuICBwcml2YXRlIGNhcHR1cmVTZXR0bGVkKGxvYWRQcm9taXNhYmxlOiBudWxsIHwgUHJvbWlzYWJsZTx2b2lkPik6IG51bGwgfCBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAobG9hZFByb21pc2FibGUgPT09IG51bGwgfHwgbG9hZFByb21pc2FibGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShsb2FkUHJvbWlzYWJsZSkudGhlbihub29wLCAoZXJyb3I6IHVua25vd24pID0+IHtcbiAgICAgIHRoaXMuY2FwdHVyZUVycm9yKGVycm9yKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIGEgbG9hZCBzdGVwIHN5bmNocm9ub3VzbHksIHJlY29yZGluZyBhIHN5bmNocm9ub3VzIHRocm93LCBhbmQgd3JhcHMgYW55IGFzeW5jIHRhaWwgc28gaXQgbmV2ZXIgcmVqZWN0cy5cbiAgICpcbiAgICogQHBhcmFtIGxvYWRQcm9taXNhYmxlRm4gLSBBIGZ1bmN0aW9uIHRoYXQgc3RhcnRzIHRoZSBsb2FkIHN0ZXAgYW5kIHJldHVybnMgaXRzIHJlc3VsdC5cbiAgICogQHJldHVybnMgQSBuZXZlci1yZWplY3Rpbmcge0BsaW5rIFByb21pc2V9LCBvciBgbnVsbGAgaWYgdGhlIHN0ZXAgaXMgZnVsbHkgc3luY2hyb25vdXMuXG4gICAqL1xuICBwcml2YXRlIGNhcHR1cmVTeW5jKGxvYWRQcm9taXNhYmxlRm46ICgpID0+IG51bGwgfCBQcm9taXNhYmxlPHZvaWQ+KTogbnVsbCB8IFByb21pc2U8dm9pZD4ge1xuICAgIGxldCBsb2FkUHJvbWlzYWJsZTogbnVsbCB8IFByb21pc2FibGU8dm9pZD47XG4gICAgdHJ5IHtcbiAgICAgIGxvYWRQcm9taXNhYmxlID0gbG9hZFByb21pc2FibGVGbigpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aGlzLmNhcHR1cmVFcnJvcihlcnJvcik7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5jYXB0dXJlU2V0dGxlZChsb2FkUHJvbWlzYWJsZSk7XG4gIH1cblxuICBwcml2YXRlIGV4dHJhY3RMb2FkUHJvbWlzYWJsZShjb21wb25lbnQ6IENvbXBvbmVudCk6IG51bGwgfCBQcm9taXNhYmxlPHZvaWQ+IHtcbiAgICBpZiAoIXRoaXMuY2hpbGRyZW5TZXQuaGFzKGNvbXBvbmVudCkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBpZiAoY29tcG9uZW50IGluc3RhbmNlb2YgQ29tcG9uZW50RXgpIHtcbiAgICAgIHJldHVybiBjb21wb25lbnQubG9hZFdpdGhQcm9taXNlcygpO1xuICAgIH1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWNvbmZ1c2luZy12b2lkLWV4cHJlc3Npb24sIEB0eXBlc2NyaXB0LWVzbGludC9uby11bm5lY2Vzc2FyeS10eXBlLWFzc2VydGlvbiAtLSBJdCBjYW4gYmUgYFByb21pc2U8dm9pZD5gIGluIHJ1bnRpbWUuIFdhbnQgZXhwbGljaXRseSBjYXN0IHRvIHNob3cgd2Uga25vdyBpdCBtYXkgYmUgcHJvbWlzZSwgZGVzcGl0ZSB0aGUgZGVjbGFyZWQgdHlwZSBgdm9pZGAuXG4gICAgcmV0dXJuIGNvbXBvbmVudC5sb2FkKCkgYXMgUHJvbWlzYWJsZTx2b2lkPjtcbiAgfVxuXG4gIHByaXZhdGUgcmVzZXRMb2FkU3RhdGUoKTogdm9pZCB7XG4gICAgdGhpcy5sb2FkRXJyb3JzID0gW107XG4gICAgdGhpcy5sb2FkUHJvbWlzZSA9IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogUnVucyBhIGRlZmVycmVkIGxvYWQgc3RlcCwgcmVjb3JkaW5nIGEgc3luY2hyb25vdXMgdGhyb3cgb3IgYW4gYXN5bmMgcmVqZWN0aW9uIHdpdGhvdXQgZXZlciByZS10aHJvd2luZy5cbiAgICpcbiAgICogQHBhcmFtIGxvYWRQcm9taXNhYmxlRm4gLSBBIGZ1bmN0aW9uIHRoYXQgc3RhcnRzIHRoZSBsb2FkIHN0ZXAgYW5kIHJldHVybnMgaXRzIHJlc3VsdC5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgcnVuQW5kQ2FwdHVyZShsb2FkUHJvbWlzYWJsZUZuOiAoKSA9PiBudWxsIHwgUHJvbWlzYWJsZTx2b2lkPik6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCAobG9hZFByb21pc2FibGVGbigpID8/IHVuZGVmaW5lZCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRoaXMuY2FwdHVyZUVycm9yKGVycm9yKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldExvYWRQcm9taXNlKGxvYWRQcm9taXNlOiBQcm9taXNlPHZvaWQ+KTogdm9pZCB7XG4gICAgY29uc3QgbG9hZFByb21pc2VXaXRoUmVzZXQ6IFByb21pc2U8dm9pZD4gPSBsb2FkUHJvbWlzZS50aGVuKCgpID0+IHtcbiAgICAgIGlmICh0aGlzLmxvYWRQcm9taXNlID09PSBsb2FkUHJvbWlzZVdpdGhSZXNldCkge1xuICAgICAgICB0aGlzLmxvYWRQcm9taXNlID0gbnVsbDtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLmxvYWRQcm9taXNlID0gbG9hZFByb21pc2VXaXRoUmVzZXQ7XG4gIH1cbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQVFBLHNCQUEwQjtBQUUxQixtQkFBNkI7QUFDN0Isc0JBR087QUFNQSxNQUFNLG9CQUFvQiwwQkFBZ0M7QUFBQSxFQUM5QyxjQUFjLG9CQUFJLElBQWU7QUFBQSxFQUMxQyxhQUFzQixDQUFDO0FBQUEsRUFDdkIsY0FBb0M7QUFBQTtBQUFBO0FB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
402
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL2NvbXBvbmVudHMvY29tcG9uZW50LWV4LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogRXh0ZW5kZWQgQ29tcG9uZW50XG4gKi9cblxuaW1wb3J0IHR5cGUgeyBQcm9taXNhYmxlIH0gZnJvbSAndHlwZS1mZXN0JztcblxuaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgeyBFcnJvcldyYXBwZXIgfSBmcm9tICcuLi8uLi9lcnJvci50cyc7XG5pbXBvcnQge1xuICBub29wLFxuICBub29wQXN5bmNTaW5nbGV0b25Qcm9taXNlXG59IGZyb20gJy4uLy4uL2Z1bmN0aW9uLnRzJztcblxuLyoqXG4gKiBFeHRlbmRlZCBDb21wb25lbnRcbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG9ic2lkaWFuLWRldi11dGlscy9yZXF1aXJlLWNvbXBvbmVudC1zdWZmaXggLS0gRXh0ZW5kZWQgYmFzZSBjbGFzcy5cbmV4cG9ydCBjbGFzcyBDb21wb25lbnRFeCBleHRlbmRzIENvbXBvbmVudCBpbXBsZW1lbnRzIERpc3Bvc2FibGUge1xuICBwcml2YXRlIHJlYWRvbmx5IGNoaWxkcmVuU2V0ID0gbmV3IFNldDxDb21wb25lbnQ+KCk7XG4gIHByaXZhdGUgbG9hZEVycm9yczogRXJyb3JbXSA9IFtdO1xuICBwcml2YXRlIGxvYWRQcm9taXNlOiBudWxsIHwgUHJvbWlzZTx2b2lkPiA9IG51bGw7XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBjaGlsZCBjb21wb25lbnQuXG4gICAqXG4gICAqIE1pcnJvcnMgdGhlIG5hdGl2ZSBgQ29tcG9uZW50LmFkZENoaWxkYCBjb250cmFjdDogaWYgdGhpcyBjb21wb25lbnQgaXMgYWxyZWFkeSBsb2FkZWQsIHRoZSBjaGlsZCBpcyBsb2FkZWRcbiAgICogaW1tZWRpYXRlbHksIHNvIGBjaGlsZC5fbG9hZGVkYCBpcyBzZXQgYmVmb3JlIHRoaXMgbWV0aG9kIHJldHVybnMgZXZlbiB3aGVuIHRoaXMgY29tcG9uZW50IGhhcyBhc3luYyBsb2FkIGxvZ2ljLlxuICAgKiBUaGUgY2hpbGQncyBhc3luYyB0YWlsIChpZiBhbnkpIGlzIHNlcXVlbmNlZCBpbnRvIHRoZSBsb2FkIHByb21pc2Ugc28gYSBsYXRlciB7QGxpbmsgbG9hZFdpdGhQcm9taXNlc30gY2FsbCBhd2FpdHMgaXQuXG4gICAqXG4gICAqIEB0eXBlUGFyYW0gVENvbXBvbmVudCAtIFRoZSB0eXBlIG9mIGNvbXBvbmVudCB0byBhZGQuXG4gICAqIEBwYXJhbSBjb21wb25lbnQgLSBUaGUgY29tcG9uZW50IGluc3RhbmNlIHRvIGFkZC5cbiAgICogQHJldHVybnMgVGhlIGFkZGVkIGNvbXBvbmVudC5cbiAgICovXG4gIHB1YmxpYyBvdmVycmlkZSBhZGRDaGlsZDxUQ29tcG9uZW50IGV4dGVuZHMgQ29tcG9uZW50Pihjb21wb25lbnQ6IFRDb21wb25lbnQpOiBUQ29tcG9uZW50IHtcbiAgICB0aGlzLl9jaGlsZHJlbi5wdXNoKGNvbXBvbmVudCk7XG4gICAgdGhpcy5jaGlsZHJlblNldC5hZGQoY29tcG9uZW50KTtcblxuICAgIGlmICh0aGlzLl9sb2FkZWQpIHtcbiAgICAgIHRoaXMuYXBwZW5kRWFnZXJMb2FkU3RlcCh0aGlzLmV4dHJhY3RMb2FkUHJvbWlzYWJsZShjb21wb25lbnQpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29tcG9uZW50O1xuICB9XG5cbiAgLyoqXG4gICAqIExvYWRzIHRoZSBjb21wb25lbnQuXG4gICAqXG4gICAqIEByZXR1cm5zIERlc3BpdGUgdGhlIGRlY2xhcmVkIGB2b2lkYCByZXR1cm4gdHlwZSwgdGhpcyBtZXRob2QgcmV0dXJucyBhIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGNvbXBvbmVudCBpcyBsb2FkZWQgb3IgYG51bGxgIGlmIHRoZSBjb21wb25lbnQgaXMgZnVsbHkgc3luY2hyb25vdXMuXG4gICAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgbG9hZCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fbG9hZGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fbG9hZGVkID0gdHJ1ZTtcbiAgICB0aGlzLnJlc2V0TG9hZFN0YXRlKCk7XG5cbiAgICB0aGlzLm9ubG9hZCgpO1xuXG4gICAgY29uc3Qgb25sb2FkQXN5bmNQcm9taXNlID0gdGhpcy5vbmxvYWRBc3luYygpO1xuICAgIGlmIChvbmxvYWRBc3luY1Byb21pc2UgIT09IG5vb3BBc3luY1NpbmdsZXRvblByb21pc2UpIHtcbiAgICAgIHRoaXMuYXBwZW5kRWFnZXJMb2FkU3RlcChvbmxvYWRBc3luY1Byb21pc2UpO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgY2hpbGQgb2YgdGhpcy5fY2hpbGRyZW4uc2xpY2UoKSkge1xuICAgICAgdGhpcy5hcHBlbmRTZXF1ZW50aWFsTG9hZFN0ZXAoKCkgPT4gdGhpcy5leHRyYWN0TG9hZFByb21pc2FibGUoY2hpbGQpKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5sb2FkUHJvbWlzZSkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1pbnZhbGlkLXZvaWQtdHlwZSwgbm8tcmVzdHJpY3RlZC1zeW50YXggLS0gV2UgbmVlZCB0byBieXBhc3MgdHlwZSBzeXN0ZW0gdG8gcmV0dXJuIGBQcm9taXNlPHZvaWQ+YC5cbiAgICAgIHJldHVybiB0aGlzLmxvYWRQcm9taXNlIGFzIHVua25vd24gYXMgdm9pZDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTG9hZHMgdGhlIGNvbXBvbmVudCB3aXRoIHByb21pc2VzLlxuICAgKlxuICAgKiBVbmxpa2Uge0BsaW5rIGxvYWR9LCB0aGlzIG1ldGhvZCBuZXZlciByZWplY3RzIHdpdGggYW4gaW5kaXZpZHVhbCBlcnJvcjogZXZlcnkgZmFpbHVyZSByYWlzZWQgYnkge0BsaW5rIG9ubG9hZEFzeW5jfVxuICAgKiBvciBhIGNoaWxkJ3MgbG9hZCBpcyBjb2xsZWN0ZWQsIGFuZCBvbmNlIGV2ZXJ5dGhpbmcgc2V0dGxlcyB0aGUgcmV0dXJuZWQge0BsaW5rIFByb21pc2V9IHJlamVjdHMgd2l0aCBhIHNpbmdsZVxuICAgKiB7QGxpbmsgQWdncmVnYXRlRXJyb3J9IGhvbGRpbmcgYWxsIG9mIHRoZW0uIE5vbi1gRXJyb3JgIHRocm93YWJsZXMgYXJlIG5vcm1hbGl6ZWQgdmlhIHtAbGluayBFcnJvcldyYXBwZXIuY3JlYXRlfS5cbiAgICpcbiAgICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBjb21wb25lbnQgYW5kIGl0cyBjaGlsZHJlbiBmaW5pc2ggbG9hZGluZywgcmVqZWN0cyB3aXRoIGFuIHtAbGluayBBZ2dyZWdhdGVFcnJvcn0gaWYgYW55IGxvYWQgc3RlcCBmYWlsZWQsIG9yIGBudWxsYCBpZiB0aGUgY29tcG9uZW50IGFuZCBpdHMgY2hpbGRyZW4gZG9uJ3QgdXNlIGBhc3luY2AgbG9naWMgYW5kIG5vbmUgZmFpbGVkIHN5bmNocm9ub3VzbHkuXG4gICAqL1xuICBwdWJsaWMgbG9hZFdpdGhQcm9taXNlcygpOiBudWxsIHwgUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5sb2FkKCk7XG5cbiAgICBjb25zdCBsb2FkUHJvbWlzZSA9IHRoaXMubG9hZFByb21pc2U7XG4gICAgaWYgKCFsb2FkUHJvbWlzZSkge1xuICAgICAgaWYgKHRoaXMubG9hZEVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgQWdncmVnYXRlRXJyb3IodGhpcy5sb2FkRXJyb3JzKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gbG9hZFByb21pc2UudGhlbigoKSA9PiB7XG4gICAgICBpZiAodGhpcy5sb2FkRXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEFnZ3JlZ2F0ZUVycm9yKHRoaXMubG9hZEVycm9ycyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQXN5bmNocm9ub3VzbHkgbG9hZHMgdGhlIGNvbXBvbmVudC5cbiAgICpcbiAgICogT3ZlcnJpZGUgdG8gYWRkIGFzeW5jIGxvYWQgbG9naWMsIHdoaWNoIGlzIGV4ZWN1dGVkIGFmdGVyIHtAbGluayBDb21wb25lbnQub25sb2FkfS5cbiAgICpcbiAgICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBjb21wb25lbnQgaXMgbG9hZGVkLlxuICAgKi9cbiAgcHVibGljIG9ubG9hZEFzeW5jKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBub29wQXN5bmNTaW5nbGV0b25Qcm9taXNlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVycyBhIHtAbGluayBEaXNwb3NhYmxlfSBzbyBpdCBpcyBkaXNwb3NlZCB3aGVuIHRoaXMgY29tcG9uZW50IHVubG9hZHMsIGFuZCByZXR1cm5zIGl0IHVuY2hhbmdlZC5cbiAgICpcbiAgICogVGhlIHJlY3VycmluZyBcInRpZSBhIGRpc3Bvc2FibGUgdG8gdGhlIGNvbXBvbmVudCdzIGxpZmVjeWNsZSwgdGhlbiBrZWVwIHVzaW5nIGl0XCIgaWRpb206IHRoZSBkaXNwb3NhYmxlIGlzXG4gICAqIGRpc3Bvc2VkIG9uIHtAbGluayBDb21wb25lbnQudW5sb2FkfSAob3IgZWFybGllciwgaWYgdGhlIGNhbGxlciBkaXNwb3NlcyBpdCBkaXJlY3RseSBcdTIwMTQgZGlzcG9zZSBpcyBleHBlY3RlZCB0b1xuICAgKiBiZSBpZGVtcG90ZW50KS4gR3VhcmQgd2l0aCB7QGxpbmsgZW5zdXJlTG9hZGVkfSBhdCB0aGUgY2FsbCBzaXRlIHdoZW4gcmVnaXN0ZXJpbmcgYmVmb3JlIGxvYWQgd291bGQgYmUgdW5zYWZlLlxuICAgKlxuICAgKiBAdHlwZVBhcmFtIFREaXNwb3NhYmxlIC0gVGhlIHR5cGUgb2YgdGhlIGRpc3Bvc2FibGUuXG4gICAqIEBwYXJhbSBkaXNwb3NhYmxlIC0gVGhlIGRpc3Bvc2FibGUgdG8gcmVnaXN0ZXIuXG4gICAqIEByZXR1cm5zIFRoZSBzYW1lIGRpc3Bvc2FibGUsIGZvciBjaGFpbmluZy5cbiAgICovXG4gIHB1YmxpYyByZWdpc3RlckRpc3Bvc2FibGU8VERpc3Bvc2FibGUgZXh0ZW5kcyBEaXNwb3NhYmxlPihkaXNwb3NhYmxlOiBURGlzcG9zYWJsZSk6IFREaXNwb3NhYmxlIHtcbiAgICB0aGlzLnJlZ2lzdGVyKCgpID0+IHtcbiAgICAgIGRpc3Bvc2FibGVbU3ltYm9sLmRpc3Bvc2VdKCk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGRpc3Bvc2FibGU7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyBhIGNoaWxkIGNvbXBvbmVudC5cbiAgICpcbiAgICogQHR5cGVQYXJhbSBUQ29tcG9uZW50IC0gVGhlIHR5cGUgb2YgY29tcG9uZW50IHRvIHJlbW92ZS5cbiAgICogQHBhcmFtIGNvbXBvbmVudCAtIFRoZSBjb21wb25lbnQgaW5zdGFuY2UgdG8gcmVtb3ZlLlxuICAgKiBAcmV0dXJucyBUaGUgcmVtb3ZlZCBjb21wb25lbnQuXG4gICAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgcmVtb3ZlQ2hpbGQ8VENvbXBvbmVudCBleHRlbmRzIENvbXBvbmVudD4oY29tcG9uZW50OiBUQ29tcG9uZW50KTogVENvbXBvbmVudCB7XG4gICAgc3VwZXIucmVtb3ZlQ2hpbGQoY29tcG9uZW50KTtcbiAgICB0aGlzLmNoaWxkcmVuU2V0LmRlbGV0ZShjb21wb25lbnQpO1xuICAgIHJldHVybiBjb21wb25lbnQ7XG4gIH1cblxuICAvKipcbiAgICogRGlzcG9zZXMgb2YgdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIHB1YmxpYyBbU3ltYm9sLmRpc3Bvc2VdKCk6IHZvaWQge1xuICAgIHRoaXMudW5sb2FkKCk7XG4gIH1cblxuICAvKipcbiAgICogRW5zdXJlcyB0aGUgY29tcG9uZW50IGlzIGxvYWRlZCwgdGhyb3dpbmcgaWYgaXQgaXMgbm90LlxuICAgKlxuICAgKiBVc2UgdGhpcyB0byBndWFyZCBwdWJsaWMgbWV0aG9kcyB0aGF0IHJlZ2lzdGVyIHRlYXJkb3duLWJlYXJpbmcgcmVzb3VyY2VzICh2aWEge0BsaW5rIENvbXBvbmVudC5yZWdpc3Rlcn0sXG4gICAqIHtAbGluayBDb21wb25lbnQucmVnaXN0ZXJFdmVudH0sIHtAbGluayBDb21wb25lbnQucmVnaXN0ZXJEb21FdmVudH0sIGV0Yy4pLiBSZWdpc3RlcmluZyBiZWZvcmUgbG9hZCBpcyB1bnNhZmU6XG4gICAqIHtAbGluayBDb21wb25lbnQudW5sb2FkfSBpcyBhIG5vLW9wIHdoaWxlIHRoZSBjb21wb25lbnQgaXMgbm90IGxvYWRlZCwgc28gYW55IHRlYXJkb3duIHJlZ2lzdGVyZWQgYmVmb3JlaGFuZCB3b3VsZFxuICAgKiBuZXZlciBydW4gaWYgdGhlIGNvbXBvbmVudCBpcyB1bmxvYWRlZCB3aXRob3V0IGZpcnN0IGJlaW5nIGxvYWRlZC5cbiAgICpcbiAgICogQHRocm93cyBBbiB7QGxpbmsgRXJyb3J9IGlmIHRoZSBjb21wb25lbnQgaXMgbm90IGxvYWRlZC5cbiAgICovXG4gIHByb3RlY3RlZCBlbnN1cmVMb2FkZWQoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl9sb2FkZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ29tcG9uZW50IGlzIG5vdCBsb2FkZWQnKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgY29tcG9uZW50J3MgaW4tZmxpZ2h0IGxvYWQge0BsaW5rIFByb21pc2V9IChpdHMge0BsaW5rIG9ubG9hZEFzeW5jfSBwbHVzIGNoaWxkcmVuKSwgb3IgYG51bGxgIHdoZW5cbiAgICogbm90aGluZyBpcyBsb2FkaW5nIFx1MjAxNCBlaXRoZXIgdGhlIGNvbXBvbmVudCBsb2FkZWQgZnVsbHkgc3luY2hyb25vdXNseSBvciBpdHMgYXN5bmMgbG9hZCBoYXMgYWxyZWFkeSBzZXR0bGVkLlxuICAgKlxuICAgKiBMZXRzIGEgY2FsbGVyIHNjaGVkdWxlZCB3aGlsZSB0aGUgY29tcG9uZW50IGlzIHN0aWxsIGxvYWRpbmcgYXdhaXQgdGhlIGFzeW5jIGxvYWQgdGFpbCBiZWZvcmUgYWN0aW5nLCBpbnN0ZWFkIG9mXG4gICAqIHJhY2luZyBpdC4gVGhlIG1vdGl2YXRpbmcgY2FzZSBpcyBhIGxheW91dC1yZWFkeSBoYW5kbGVyIChzZWUgYExheW91dFJlYWR5Q29tcG9uZW50YCkgdGhhdCBmaXJlcyBiZWNhdXNlIHRoZVxuICAgKiBjb21wb25lbnQgd2FzIGxvYWRlZCBhZnRlciB0aGUgd29ya3NwYWNlIGxheW91dCB3YXMgYWxyZWFkeSByZWFkeToge0BsaW5rIENvbXBvbmVudC5vbmxvYWR9IGhhcyBydW4gKHNvIGBfbG9hZGVkYFxuICAgKiBpcyBzZXQpIGJ1dCB7QGxpbmsgb25sb2FkQXN5bmN9IG1heSBub3QgaGF2ZSBmaW5pc2hlZC5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIGluLWZsaWdodCBsb2FkIHByb21pc2UsIG9yIGBudWxsYCBpZiBubyBsb2FkIGlzIGluIGZsaWdodC5cbiAgICovXG4gIHByb3RlY3RlZCBnZXRJbkZsaWdodExvYWRQcm9taXNlKCk6IG51bGwgfCBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5sb2FkUHJvbWlzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIG1vc3QgcmVjZW50IGxvYWQgcmVjb3JkZWQgYW55IGZhaWx1cmUuXG4gICAqXG4gICAqIFJlZmxlY3RzIHRoZSBvdXRjb21lIG9mIHRoZSBsYXN0IHtAbGluayBsb2FkfSAvIHtAbGluayBsb2FkV2l0aFByb21pc2VzfTogYHRydWVgIHdoZW4ge0BsaW5rIG9ubG9hZEFzeW5jfSBvciBhbnlcbiAgICogY2hpbGQncyBsb2FkIHRocmV3IChzeW5jaHJvbm91c2x5IG9yIGFzeW5jaHJvbm91c2x5KS4gVW5saWtlIHtAbGluayBsb2FkV2l0aFByb21pc2VzfSwgcmVhZGluZyB0aGlzIGRvZXMgTk9UXG4gICAqIHJlLXJhaXNlIHRoZSBjb2xsZWN0ZWQgZXJyb3JzIFx1MjAxNCBpdCBsZXRzIGEgYnlzdGFuZGVyIChlLmcuIGEgbGF5b3V0LXJlYWR5IGhhbmRsZXIgYXdhaXRpbmcgdGhlIGluLWZsaWdodCBsb2FkKSB0ZWxsXG4gICAqIHdoZXRoZXIgdGhlIGxvYWQgc3VjY2VlZGVkIHdpdGhvdXQgYWRvcHRpbmcgYSBmYWlsdXJlIHRoYXQgdGhlIGxvYWQncyBvd25lciBpcyBhbHJlYWR5IHJlc3BvbnNpYmxlIGZvci5cbiAgICpcbiAgICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBsYXN0IGxvYWQgcmVjb3JkZWQgYXQgbGVhc3Qgb25lIGVycm9yLCBvdGhlcndpc2UgYGZhbHNlYC5cbiAgICovXG4gIHByb3RlY3RlZCBoYXNMb2FkRXJyb3JzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmxvYWRFcnJvcnMubGVuZ3RoID4gMDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXF1ZW5jZXMgYW4gYWxyZWFkeS1zdGFydGVkIGxvYWQgc3RlcCBpbnRvIHRoZSBsb2FkIHByb21pc2UuXG4gICAqXG4gICAqIFRoZSBzdGVwIGlzIHByZXN1bWVkIHRvIGhhdmUgc3RhcnRlZCBzeW5jaHJvbm91c2x5IChzbyBhbnkgYF9sb2FkZWRgIGZsYWcgaXQgc2V0cyBpcyBhbHJlYWR5IHZpc2libGUpOyBvbmx5IHRoZVxuICAgKiBhd2FpdGluZyBvZiBpdHMgYXN5bmMgdGFpbCBpcyBzZXF1ZW5jZWQgaGVyZS5cbiAgICpcbiAgICogQHBhcmFtIGxvYWRQcm9taXNhYmxlIC0gVGhlIHJlc3VsdCBvZiBhbiBhbHJlYWR5LXN0YXJ0ZWQgbG9hZCBzdGVwLlxuICAgKi9cbiAgcHJpdmF0ZSBhcHBlbmRFYWdlckxvYWRTdGVwKGxvYWRQcm9taXNhYmxlOiBudWxsIHwgUHJvbWlzYWJsZTx2b2lkPik6IHZvaWQge1xuICAgIGNvbnN0IGNhcHR1cmVkID0gdGhpcy5jYXB0dXJlU2V0dGxlZChsb2FkUHJvbWlzYWJsZSk7XG4gICAgaWYgKCFjYXB0dXJlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHByZXZpb3VzID0gdGhpcy5sb2FkUHJvbWlzZTtcbiAgICB0aGlzLnNldExvYWRQcm9taXNlKHByZXZpb3VzID8gcHJldmlvdXMudGhlbigoKSA9PiBjYXB0dXJlZCkgOiBjYXB0dXJlZCk7XG4gIH1cblxuICAvKipcbiAgICogU2VxdWVuY2VzIGEgZGVmZXJyZWQgbG9hZCBzdGVwIGludG8gdGhlIGxvYWQgcHJvbWlzZSwgcnVubmluZyBpdCBvbmx5IGFmdGVyIHByZXZpb3VzbHktYXBwZW5kZWQgc3RlcHMgc2V0dGxlLlxuICAgKlxuICAgKiBAcGFyYW0gbG9hZFByb21pc2FibGVGbiAtIEEgZnVuY3Rpb24gdGhhdCBzdGFydHMgdGhlIGxvYWQgc3RlcCBhbmQgcmV0dXJucyBpdHMgcmVzdWx0LlxuICAgKi9cbiAgcHJpdmF0ZSBhcHBlbmRTZXF1ZW50aWFsTG9hZFN0ZXAobG9hZFByb21pc2FibGVGbjogKCkgPT4gbnVsbCB8IFByb21pc2FibGU8dm9pZD4pOiB2b2lkIHtcbiAgICBjb25zdCBwcmV2aW91cyA9IHRoaXMubG9hZFByb21pc2U7XG4gICAgaWYgKHByZXZpb3VzKSB7XG4gICAgICB0aGlzLnNldExvYWRQcm9taXNlKHByZXZpb3VzLnRoZW4oKCkgPT4gdGhpcy5ydW5BbmRDYXB0dXJlKGxvYWRQcm9taXNhYmxlRm4pKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY2FwdHVyZWQgPSB0aGlzLmNhcHR1cmVTeW5jKGxvYWRQcm9taXNhYmxlRm4pO1xuICAgIGlmIChjYXB0dXJlZCkge1xuICAgICAgdGhpcy5zZXRMb2FkUHJvbWlzZShjYXB0dXJlZCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlY29yZHMgYSBsb2FkIGZhaWx1cmUuXG4gICAqXG4gICAqIEEgZmFpbHVyZSByYWlzZWQgYnkgYSBjaGlsZCB7QGxpbmsgQ29tcG9uZW50RXh9IGlzIGl0c2VsZiBhbiB7QGxpbmsgQWdncmVnYXRlRXJyb3J9OyBpdCBpcyByZWNvcmRlZCBhcy1pcyBzbyB0aGVcbiAgICogZ3JvdXBpbmcgYnkgY2hpbGQgY29tcG9uZW50IGlzIHByZXNlcnZlZCAob3duIGZhaWx1cmVzIHN0YXkgZmxhdCwgY2hpbGQtc3VidHJlZSBmYWlsdXJlcyBzdGF5IG5lc3RlZCkuXG4gICAqXG4gICAqIEBwYXJhbSBlcnJvciAtIFRoZSB0aHJvd24gdmFsdWUgdG8gcmVjb3JkLlxuICAgKi9cbiAgcHJpdmF0ZSBjYXB0dXJlRXJyb3IoZXJyb3I6IHVua25vd24pOiB2b2lkIHtcbiAgICB0aGlzLmxvYWRFcnJvcnMucHVzaChFcnJvcldyYXBwZXIuY3JlYXRlKGVycm9yKSk7XG4gIH1cblxuICAvKipcbiAgICogV3JhcHMgYW4gYWxyZWFkeS1zdGFydGVkIGxvYWQgcmVzdWx0IHNvIGl0IG5ldmVyIHJlamVjdHM6IGFueSBmYWlsdXJlIGlzIHJlY29yZGVkIGludG8gYGxvYWRFcnJvcnNgLlxuICAgKlxuICAgKiBAcGFyYW0gbG9hZFByb21pc2FibGUgLSBUaGUgbG9hZCByZXN1bHQgdG8gb2JzZXJ2ZS5cbiAgICogQHJldHVybnMgQSBuZXZlci1yZWplY3Rpbmcge0BsaW5rIFByb21pc2V9LCBvciBgbnVsbGAgaWYgdGhlIHJlc3VsdCBpcyBmdWxseSBzeW5jaHJvbm91cy5cbiAgICovXG4gIHByaXZhdGUgY2FwdHVyZVNldHRsZWQobG9hZFByb21pc2FibGU6IG51bGwgfCBQcm9taXNhYmxlPHZvaWQ+KTogbnVsbCB8IFByb21pc2U8dm9pZD4ge1xuICAgIGlmIChsb2FkUHJvbWlzYWJsZSA9PT0gbnVsbCB8fCBsb2FkUHJvbWlzYWJsZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGxvYWRQcm9taXNhYmxlKS50aGVuKG5vb3AsIChlcnJvcjogdW5rbm93bikgPT4ge1xuICAgICAgdGhpcy5jYXB0dXJlRXJyb3IoZXJyb3IpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgYSBsb2FkIHN0ZXAgc3luY2hyb25vdXNseSwgcmVjb3JkaW5nIGEgc3luY2hyb25vdXMgdGhyb3csIGFuZCB3cmFwcyBhbnkgYXN5bmMgdGFpbCBzbyBpdCBuZXZlciByZWplY3RzLlxuICAgKlxuICAgKiBAcGFyYW0gbG9hZFByb21pc2FibGVGbiAtIEEgZnVuY3Rpb24gdGhhdCBzdGFydHMgdGhlIGxvYWQgc3RlcCBhbmQgcmV0dXJucyBpdHMgcmVzdWx0LlxuICAgKiBAcmV0dXJucyBBIG5ldmVyLXJlamVjdGluZyB7QGxpbmsgUHJvbWlzZX0sIG9yIGBudWxsYCBpZiB0aGUgc3RlcCBpcyBmdWxseSBzeW5jaHJvbm91cy5cbiAgICovXG4gIHByaXZhdGUgY2FwdHVyZVN5bmMobG9hZFByb21pc2FibGVGbjogKCkgPT4gbnVsbCB8IFByb21pc2FibGU8dm9pZD4pOiBudWxsIHwgUHJvbWlzZTx2b2lkPiB7XG4gICAgbGV0IGxvYWRQcm9taXNhYmxlOiBudWxsIHwgUHJvbWlzYWJsZTx2b2lkPjtcbiAgICB0cnkge1xuICAgICAgbG9hZFByb21pc2FibGUgPSBsb2FkUHJvbWlzYWJsZUZuKCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRoaXMuY2FwdHVyZUVycm9yKGVycm9yKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmNhcHR1cmVTZXR0bGVkKGxvYWRQcm9taXNhYmxlKTtcbiAgfVxuXG4gIHByaXZhdGUgZXh0cmFjdExvYWRQcm9taXNhYmxlKGNvbXBvbmVudDogQ29tcG9uZW50KTogbnVsbCB8IFByb21pc2FibGU8dm9pZD4ge1xuICAgIGlmICghdGhpcy5jaGlsZHJlblNldC5oYXMoY29tcG9uZW50KSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGlmIChjb21wb25lbnQgaW5zdGFuY2VvZiBDb21wb25lbnRFeCkge1xuICAgICAgcmV0dXJuIGNvbXBvbmVudC5sb2FkV2l0aFByb21pc2VzKCk7XG4gICAgfVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tY29uZnVzaW5nLXZvaWQtZXhwcmVzc2lvbiwgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVubmVjZXNzYXJ5LXR5cGUtYXNzZXJ0aW9uIC0tIEl0IGNhbiBiZSBgUHJvbWlzZTx2b2lkPmAgaW4gcnVudGltZS4gV2FudCBleHBsaWNpdGx5IGNhc3QgdG8gc2hvdyB3ZSBrbm93IGl0IG1heSBiZSBwcm9taXNlLCBkZXNwaXRlIHRoZSBkZWNsYXJlZCB0eXBlIGB2b2lkYC5cbiAgICByZXR1cm4gY29tcG9uZW50LmxvYWQoKSBhcyBQcm9taXNhYmxlPHZvaWQ+O1xuICB9XG5cbiAgcHJpdmF0ZSByZXNldExvYWRTdGF0ZSgpOiB2b2lkIHtcbiAgICB0aGlzLmxvYWRFcnJvcnMgPSBbXTtcbiAgICB0aGlzLmxvYWRQcm9taXNlID0gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIGEgZGVmZXJyZWQgbG9hZCBzdGVwLCByZWNvcmRpbmcgYSBzeW5jaHJvbm91cyB0aHJvdyBvciBhbiBhc3luYyByZWplY3Rpb24gd2l0aG91dCBldmVyIHJlLXRocm93aW5nLlxuICAgKlxuICAgKiBAcGFyYW0gbG9hZFByb21pc2FibGVGbiAtIEEgZnVuY3Rpb24gdGhhdCBzdGFydHMgdGhlIGxvYWQgc3RlcCBhbmQgcmV0dXJucyBpdHMgcmVzdWx0LlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBydW5BbmRDYXB0dXJlKGxvYWRQcm9taXNhYmxlRm46ICgpID0+IG51bGwgfCBQcm9taXNhYmxlPHZvaWQ+KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IChsb2FkUHJvbWlzYWJsZUZuKCkgPz8gdW5kZWZpbmVkKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhpcy5jYXB0dXJlRXJyb3IoZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2V0TG9hZFByb21pc2UobG9hZFByb21pc2U6IFByb21pc2U8dm9pZD4pOiB2b2lkIHtcbiAgICBjb25zdCBsb2FkUHJvbWlzZVdpdGhSZXNldDogUHJvbWlzZTx2b2lkPiA9IGxvYWRQcm9taXNlLnRoZW4oKCkgPT4ge1xuICAgICAgaWYgKHRoaXMubG9hZFByb21pc2UgPT09IGxvYWRQcm9taXNlV2l0aFJlc2V0KSB7XG4gICAgICAgIHRoaXMubG9hZFByb21pc2UgPSBudWxsO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMubG9hZFByb21pc2UgPSBsb2FkUHJvbWlzZVdpdGhSZXNldDtcbiAgfVxufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBUUEsc0JBQTBCO0FBRTFCLG1CQUE2QjtBQUM3QixzQkFHTztBQU1BLE1BQU0sb0JBQW9CLDBCQUFnQztBQUFBLEVBQzlDLGNBQWMsb0JBQUksSUFBZTtBQUFBLEVBQzFDLGFBQXNCLENBQUM7QUFBQSxFQUN2QixjQUFvQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQWE1QixTQUF1QyxXQUFtQztBQUN4RixTQUFLLFVBQVUsS0FBSyxTQUFTO0FBQzdCLFNBQUssWUFBWSxJQUFJLFNBQVM7QUFFOUIsUUFBSSxLQUFLLFNBQVM7QUFDaEIsV0FBSyxvQkFBb0IsS0FBSyxzQkFBc0IsU0FBUyxDQUFDO0FBQUEsSUFDaEU7QUFFQSxXQUFPO0FBQUEsRUFDVDtB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
@@ -83,6 +83,29 @@ export declare class ComponentEx extends Component implements Disposable {
83
83
  * @throws An {@link Error} if the component is not loaded.
84
84
  */
85
85
  protected ensureLoaded(): void;
86
+ /**
87
+ * Returns the component's in-flight load {@link Promise} (its {@link onloadAsync} plus children), or `null` when
88
+ * nothing is loading — either the component loaded fully synchronously or its async load has already settled.
89
+ *
90
+ * Lets a caller scheduled while the component is still loading await the async load tail before acting, instead of
91
+ * racing it. The motivating case is a layout-ready handler (see `LayoutReadyComponent`) that fires because the
92
+ * component was loaded after the workspace layout was already ready: {@link Component.onload} has run (so `_loaded`
93
+ * is set) but {@link onloadAsync} may not have finished.
94
+ *
95
+ * @returns The in-flight load promise, or `null` if no load is in flight.
96
+ */
97
+ protected getInFlightLoadPromise(): null | Promise<void>;
98
+ /**
99
+ * Returns whether the most recent load recorded any failure.
100
+ *
101
+ * Reflects the outcome of the last {@link load} / {@link loadWithPromises}: `true` when {@link onloadAsync} or any
102
+ * child's load threw (synchronously or asynchronously). Unlike {@link loadWithPromises}, reading this does NOT
103
+ * re-raise the collected errors — it lets a bystander (e.g. a layout-ready handler awaiting the in-flight load) tell
104
+ * whether the load succeeded without adopting a failure that the load's owner is already responsible for.
105
+ *
106
+ * @returns `true` if the last load recorded at least one error, otherwise `false`.
107
+ */
108
+ protected hasLoadErrors(): boolean;
86
109
  /**
87
110
  * Sequences an already-started load step into the load promise.
88
111
  *
@@ -149,9 +149,22 @@ class LayoutReadyComponent extends import_component_ex.ComponentEx {
149
149
  onload() {
150
150
  this.app.workspace.onLayoutReady(() => {
151
151
  window.setTimeout(() => {
152
- if (this._loaded) {
153
- (0, import_async.invokeAsyncSafely)(this.onLayoutReady.bind(this));
152
+ if (!this._loaded) {
153
+ return;
154
154
  }
155
+ const inFlightLoadPromise = this.getInFlightLoadPromise();
156
+ if (!inFlightLoadPromise) {
157
+ if (!this.hasLoadErrors()) {
158
+ (0, import_async.invokeAsyncSafely)(this.onLayoutReady.bind(this));
159
+ }
160
+ return;
161
+ }
162
+ (0, import_async.invokeAsyncSafely)(async () => {
163
+ await inFlightLoadPromise;
164
+ if (this._loaded && !this.hasLoadErrors()) {
165
+ await this.onLayoutReady();
166
+ }
167
+ });
155
168
  }, 0);
156
169
  });
157
170
  }
@@ -188,4 +201,4 @@ class CallbackLayoutReadyComponent extends LayoutReadyComponent {
188
201
  CallbackLayoutReadyComponent,
189
202
  LayoutReadyComponent
190
203
  });
191
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL2NvbXBvbmVudHMvbGF5b3V0LXJlYWR5LWNvbXBvbmVudC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIEludGVyZmFjZSBmb3IgY29tcG9uZW50cyB0aGF0IG5lZWQgdG8gcGVyZm9ybSB3b3JrIHdoZW4gdGhlIHdvcmtzcGFjZSBsYXlvdXQgaXMgcmVhZHkuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBBcHAgfSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgdHlwZSB7IFByb21pc2FibGUgfSBmcm9tICd0eXBlLWZlc3QnO1xuXG5pbXBvcnQgeyBpbnZva2VBc3luY1NhZmVseSB9IGZyb20gJy4uLy4uL2FzeW5jLnRzJztcbmltcG9ydCB7IG5vb3AgfSBmcm9tICcuLi8uLi9mdW5jdGlvbi50cyc7XG5pbXBvcnQgeyBDb21wb25lbnRFeCB9IGZyb20gJy4vY29tcG9uZW50LWV4LnRzJztcblxuLyoqXG4gKiBBIGNvbXBvbmVudCB0aGF0IGV4ZWN1dGVzIGEgY2FsbGJhY2sgZnVuY3Rpb24gd2hlbiB0aGUgT2JzaWRpYW4gbGF5b3V0IGJlY29tZXMgcmVhZHkuXG4gKi9cbmV4cG9ydCBjbGFzcyBMYXlvdXRSZWFkeUNvbXBvbmVudCBleHRlbmRzIENvbXBvbmVudEV4IHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgTGF5b3V0UmVhZHlDb21wb25lbnQgaW5zdGFuY2UuXG4gICAqXG4gICAqIEBwYXJhbSBhcHAgLSBUaGUgT2JzaWRpYW4gQXBwIGluc3RhbmNlLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHByb3RlY3RlZCByZWFkb25seSBhcHA6IEFwcCkge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICAvKipcbiAgICogTG9hZHMgdGhlIGNvbXBvbmVudCBhbmQgcmVnaXN0ZXJzIHRoZSBsYXlvdXQgcmVhZHkgaGFuZGxlci5cbiAgICovXG4gIHB1YmxpYyBvdmVycmlkZSBvbmxvYWQoKTogdm9pZCB7XG4gICAgdGhpcy5hcHAud29ya3NwYWNlLm9uTGF5b3V0UmVhZHkoKCkgPT4ge1xuICAgICAgd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5fbG9hZGVkKSB7XG4gICAgICAgICAgaW52b2tlQXN5bmNTYWZlbHkodGhpcy5vbkxheW91dFJlYWR5LmJpbmQodGhpcykpO1xuICAgICAgICB9XG4gICAgICB9LCAwKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeGVjdXRlcyB3aGVuIHRoZSBPYnNpZGlhbiBsYXlvdXQgYmVjb21lcyByZWFkeS5cbiAgICovXG4gIHByb3RlY3RlZCBvbkxheW91dFJlYWR5KCk6IFByb21pc2FibGU8dm9pZD4ge1xuICAgIG5vb3AoKTtcbiAgfVxufVxuXG4vKipcbiAqIEEge0BsaW5rIExheW91dFJlYWR5Q29tcG9uZW50fSBzdWJjbGFzcyB0aGF0IGludm9rZXMgYSBwcm92aWRlZCBjYWxsYmFjayBmdW5jdGlvbiB3aGVuIHRoZSBsYXlvdXQgYmVjb21lcyByZWFkeS5cbiAqL1xuZXhwb3J0IGNsYXNzIENhbGxiYWNrTGF5b3V0UmVhZHlDb21wb25lbnQgZXh0ZW5kcyBMYXlvdXRSZWFkeUNvbXBvbmVudCB7XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IENhbGxiYWNrTGF5b3V0UmVhZHlDb21wb25lbnQgaW5zdGFuY2UuXG4gICAqXG4gICAqIEBwYXJhbSBhcHAgLSBUaGUgT2JzaWRpYW4gQXBwIGluc3RhbmNlLlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIHdoZW4gbGF5b3V0IGlzIHJlYWR5LlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKGFwcDogQXBwLCBwcm90ZWN0ZWQgcmVhZG9ubHkgY2FsbGJhY2s6ICgpID0+IFByb21pc2FibGU8dm9pZD4pIHtcbiAgICBzdXBlcihhcHApO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4ZWN1dGVzIHdoZW4gdGhlIE9ic2lkaWFuIGxheW91dCBiZWNvbWVzIHJlYWR5LlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgcmVzdWx0IG9mIGludm9raW5nIHRoZSBjYWxsYmFjay5cbiAgICovXG4gIHByb3RlY3RlZCBvdmVycmlkZSBvbkxheW91dFJlYWR5KCk6IFByb21pc2FibGU8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLmNhbGxiYWNrKCk7XG4gIH1cbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBU0EsbUJBQWtDO0FBQ2xDLHNCQUFxQjtBQUNyQiwwQkFBNEI7QUFLckIsTUFBTSw2QkFBNkIsZ0NBQVk7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFNN0MsWUFBK0IsS0FBVTtBQUM5QyxVQUFNO0FBRDhCO0FBQUEsRUFFdEM7QUFBQSxFQUZzQztBQUFBO0FBQUE7QUFBQTtBQUFBLEVBT3RCLFNBQWU7QUFDN0IsU0FBSyxJQUFJLFVBQVUsY0FBYyxNQUFNO0FBQ3JDLGFBQU8sV0FBVyxNQUFNO0FBQ3RCLFlBQUksS0FBSyxTQUFTO0FBQ2hCLDhDQUFrQixLQUFLLGNBQWMsS0FBSyxJQUFJLENBQUM7QUFBQSxRQUNqRDtBQUFBLE1BQ0YsR0FBRyxDQUFDO0FBQUEsSUFDTixDQUFDO0FBQUEsRUFDSDtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBS1UsZ0JBQWtDO0FBQzFDLDhCQUFLO0FBQUEsRUFDUDtBQUNGO0FBS08sTUFBTSxxQ0FBcUMscUJBQXFCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFPOUQsWUFBWSxLQUE2QixVQUFrQztBQUNoRixVQUFNLEdBQUc7QUFEcUM7QUFBQSxFQUVoRDtBQUFBLEVBRmdEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBUzdCLGdCQUFrQztBQUNuRCxXQUFPLEtBQUssU0FBUztBQUFBLEVBQ3ZCO0FBQ0Y7IiwKICAibmFtZXMiOiBbXQp9Cg==
204
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL2NvbXBvbmVudHMvbGF5b3V0LXJlYWR5LWNvbXBvbmVudC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIEludGVyZmFjZSBmb3IgY29tcG9uZW50cyB0aGF0IG5lZWQgdG8gcGVyZm9ybSB3b3JrIHdoZW4gdGhlIHdvcmtzcGFjZSBsYXlvdXQgaXMgcmVhZHkuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBBcHAgfSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgdHlwZSB7IFByb21pc2FibGUgfSBmcm9tICd0eXBlLWZlc3QnO1xuXG5pbXBvcnQgeyBpbnZva2VBc3luY1NhZmVseSB9IGZyb20gJy4uLy4uL2FzeW5jLnRzJztcbmltcG9ydCB7IG5vb3AgfSBmcm9tICcuLi8uLi9mdW5jdGlvbi50cyc7XG5pbXBvcnQgeyBDb21wb25lbnRFeCB9IGZyb20gJy4vY29tcG9uZW50LWV4LnRzJztcblxuLyoqXG4gKiBBIGNvbXBvbmVudCB0aGF0IGV4ZWN1dGVzIGEgY2FsbGJhY2sgZnVuY3Rpb24gd2hlbiB0aGUgT2JzaWRpYW4gbGF5b3V0IGJlY29tZXMgcmVhZHkuXG4gKi9cbmV4cG9ydCBjbGFzcyBMYXlvdXRSZWFkeUNvbXBvbmVudCBleHRlbmRzIENvbXBvbmVudEV4IHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgTGF5b3V0UmVhZHlDb21wb25lbnQgaW5zdGFuY2UuXG4gICAqXG4gICAqIEBwYXJhbSBhcHAgLSBUaGUgT2JzaWRpYW4gQXBwIGluc3RhbmNlLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHByb3RlY3RlZCByZWFkb25seSBhcHA6IEFwcCkge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICAvKipcbiAgICogTG9hZHMgdGhlIGNvbXBvbmVudCBhbmQgcmVnaXN0ZXJzIHRoZSBsYXlvdXQgcmVhZHkgaGFuZGxlci5cbiAgICovXG4gIHB1YmxpYyBvdmVycmlkZSBvbmxvYWQoKTogdm9pZCB7XG4gICAgdGhpcy5hcHAud29ya3NwYWNlLm9uTGF5b3V0UmVhZHkoKCkgPT4ge1xuICAgICAgd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBpZiAoIXRoaXMuX2xvYWRlZCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGluRmxpZ2h0TG9hZFByb21pc2UgPSB0aGlzLmdldEluRmxpZ2h0TG9hZFByb21pc2UoKTtcbiAgICAgICAgaWYgKCFpbkZsaWdodExvYWRQcm9taXNlKSB7XG4gICAgICAgICAgLy8gQSBmYWlsZWQgbG9hZCAoZS5nLiBhIHN5bmNocm9ub3VzbHktdGhyb3dpbmcgY2hpbGQsIG9yIGFuIGFzeW5jIGxvYWQgdGhhdCBhbHJlYWR5IHNldHRsZWQgd2l0aCBhblxuICAgICAgICAgIC8vIEVycm9yKSBsZWF2ZXMgbm8gaW4tZmxpZ2h0IHByb21pc2UgYnV0IGEgcmVjb3JkZWQgZmFpbHVyZS4gU2tpcCBgb25MYXlvdXRSZWFkeWAgXHUyMDE0IGEgZmFpbGVkIGxvYWQgaXNcbiAgICAgICAgICAvLyBFeGFjdGx5IHRoZSBoYWxmLWluaXRpYWxpemVkIHN0YXRlIGl0IG11c3Qgbm90IG9ic2VydmUuXG4gICAgICAgICAgaWYgKCF0aGlzLmhhc0xvYWRFcnJvcnMoKSkge1xuICAgICAgICAgICAgaW52b2tlQXN5bmNTYWZlbHkodGhpcy5vbkxheW91dFJlYWR5LmJpbmQodGhpcykpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBMb2FkZWQgYWZ0ZXIgdGhlIGxheW91dCB3YXMgYWxyZWFkeSByZWFkeTogYG9ubG9hZGAgaGFzIHJ1biBidXQgdGhlIGFzeW5jIGxvYWQgKGBvbmxvYWRBc3luY2AgYW5kXG4gICAgICAgIC8vIENoaWxkcmVuKSBtYXkgc3RpbGwgYmUgaW4gZmxpZ2h0LiBXYWl0IGZvciBpdCBiZWZvcmUgcnVubmluZyBgb25MYXlvdXRSZWFkeWAsIG90aGVyd2lzZSB0aGUgaGFuZGxlclxuICAgICAgICAvLyBSYWNlcyB0aGUgbG9hZCBhbmQgY2FuIG9ic2VydmUgaGFsZi1pbml0aWFsaXplZCBzdGF0ZSAoZS5nLiBhIHN0YXJ0dXAgc2NyaXB0IHRoYXQgaGFzIG5vdCBmaW5pc2hlZFxuICAgICAgICAvLyBMb2FkaW5nIHlldCkuIFNraXAgaWYgdGhlIGNvbXBvbmVudCB3YXMgdW5sb2FkZWQgZHVyaW5nIHRoZSB3YWl0LCBvciBpZiB0aGUgbG9hZCB1bHRpbWF0ZWx5IGZhaWxlZC5cbiAgICAgICAgaW52b2tlQXN5bmNTYWZlbHkoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGF3YWl0IGluRmxpZ2h0TG9hZFByb21pc2U7XG4gICAgICAgICAgaWYgKHRoaXMuX2xvYWRlZCAmJiAhdGhpcy5oYXNMb2FkRXJyb3JzKCkpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMub25MYXlvdXRSZWFkeSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9LCAwKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeGVjdXRlcyB3aGVuIHRoZSBPYnNpZGlhbiBsYXlvdXQgYmVjb21lcyByZWFkeS5cbiAgICovXG4gIHByb3RlY3RlZCBvbkxheW91dFJlYWR5KCk6IFByb21pc2FibGU8dm9pZD4ge1xuICAgIG5vb3AoKTtcbiAgfVxufVxuXG4vKipcbiAqIEEge0BsaW5rIExheW91dFJlYWR5Q29tcG9uZW50fSBzdWJjbGFzcyB0aGF0IGludm9rZXMgYSBwcm92aWRlZCBjYWxsYmFjayBmdW5jdGlvbiB3aGVuIHRoZSBsYXlvdXQgYmVjb21lcyByZWFkeS5cbiAqL1xuZXhwb3J0IGNsYXNzIENhbGxiYWNrTGF5b3V0UmVhZHlDb21wb25lbnQgZXh0ZW5kcyBMYXlvdXRSZWFkeUNvbXBvbmVudCB7XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IENhbGxiYWNrTGF5b3V0UmVhZHlDb21wb25lbnQgaW5zdGFuY2UuXG4gICAqXG4gICAqIEBwYXJhbSBhcHAgLSBUaGUgT2JzaWRpYW4gQXBwIGluc3RhbmNlLlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIHdoZW4gbGF5b3V0IGlzIHJlYWR5LlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKGFwcDogQXBwLCBwcm90ZWN0ZWQgcmVhZG9ubHkgY2FsbGJhY2s6ICgpID0+IFByb21pc2FibGU8dm9pZD4pIHtcbiAgICBzdXBlcihhcHApO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4ZWN1dGVzIHdoZW4gdGhlIE9ic2lkaWFuIGxheW91dCBiZWNvbWVzIHJlYWR5LlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgcmVzdWx0IG9mIGludm9raW5nIHRoZSBjYWxsYmFjay5cbiAgICovXG4gIHByb3RlY3RlZCBvdmVycmlkZSBvbkxheW91dFJlYWR5KCk6IFByb21pc2FibGU8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLmNhbGxiYWNrKCk7XG4gIH1cbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBU0EsbUJBQWtDO0FBQ2xDLHNCQUFxQjtBQUNyQiwwQkFBNEI7QUFLckIsTUFBTSw2QkFBNkIsZ0NBQVk7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFNN0MsWUFBK0IsS0FBVTtBQUM5QyxVQUFNO0FBRDhCO0FBQUEsRUFFdEM7QUFBQSxFQUZzQztBQUFBO0FBQUE7QUFBQTtBQUFBLEVBT3RCLFNBQWU7QUFDN0IsU0FBSyxJQUFJLFVBQVUsY0FBYyxNQUFNO0FBQ3JDLGFBQU8sV0FBVyxNQUFNO0FBQ3RCLFlBQUksQ0FBQyxLQUFLLFNBQVM7QUFDakI7QUFBQSxRQUNGO0FBRUEsY0FBTSxzQkFBc0IsS0FBSyx1QkFBdUI7QUFDeEQsWUFBSSxDQUFDLHFCQUFxQjtBQUl4QixjQUFJLENBQUMsS0FBSyxjQUFjLEdBQUc7QUFDekIsZ0RBQWtCLEtBQUssY0FBYyxLQUFLLElBQUksQ0FBQztBQUFBLFVBQ2pEO0FBQ0E7QUFBQSxRQUNGO0FBTUEsNENBQWtCLFlBQVk7QUFDNUIsZ0JBQU07QUFDTixjQUFJLEtBQUssV0FBVyxDQUFDLEtBQUssY0FBYyxHQUFHO0FBQ3pDLGtCQUFNLEtBQUssY0FBYztBQUFBLFVBQzNCO0FBQUEsUUFDRixDQUFDO0FBQUEsTUFDSCxHQUFHLENBQUM7QUFBQSxJQUNOLENBQUM7QUFBQSxFQUNIO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFLVSxnQkFBa0M7QUFDMUMsOEJBQUs7QUFBQSxFQUNQO0FBQ0Y7QUFLTyxNQUFNLHFDQUFxQyxxQkFBcUI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU85RCxZQUFZLEtBQTZCLFVBQWtDO0FBQ2hGLFVBQU0sR0FBRztBQURxQztBQUFBLEVBRWhEO0FBQUEsRUFGZ0Q7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFTN0IsZ0JBQWtDO0FBQ25ELFdBQU8sS0FBSyxTQUFTO0FBQUEsRUFDdkI7QUFDRjsiLAogICJuYW1lcyI6IFtdCn0K