obsidian-dev-utils 82.0.0-beta.8 → 82.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +37 -14
- package/dist/dev/main.js +30870 -0
- package/dist/dev/manifest.json +9 -0
- package/dist/lib/cjs/library.cjs +2 -2
- package/dist/lib/cjs/obsidian/components/rename-delete-handler-component.cjs +1 -1
- package/dist/lib/cjs/obsidian/components/rename-delete-handler-component.d.cts +1 -1
- package/dist/lib/cjs/obsidian/editor-lock.cjs +172 -16
- package/dist/lib/cjs/obsidian/editor-lock.d.cts +30 -1
- package/dist/lib/cjs/obsidian/file-manager.cjs +1 -1
- package/dist/lib/cjs/obsidian/file-manager.d.cts +2 -2
- package/dist/lib/cjs/obsidian/i18n/locales/en.cjs +5 -2
- package/dist/lib/cjs/obsidian/i18n/locales/en.d.cts +3 -0
- package/dist/lib/cjs/obsidian/i18n/locales/translations-map.d.cts +3 -0
- package/dist/lib/cjs/obsidian/markdown-code-block-processor.cjs +1 -1
- package/dist/lib/cjs/obsidian/markdown-code-block-processor.d.cts +3 -3
- package/dist/lib/cjs/obsidian/modals/minimizable-modal.cjs +3 -1
- package/dist/lib/cjs/obsidian/vault.cjs +1 -1
- package/dist/lib/cjs/obsidian/vault.d.cts +1 -1
- package/dist/lib/esm/library.mjs +2 -2
- package/dist/lib/esm/obsidian/components/rename-delete-handler-component.d.mts +1 -1
- package/dist/lib/esm/obsidian/components/rename-delete-handler-component.mjs +1 -1
- package/dist/lib/esm/obsidian/editor-lock.d.mts +30 -1
- package/dist/lib/esm/obsidian/editor-lock.mjs +174 -17
- package/dist/lib/esm/obsidian/file-manager.d.mts +2 -2
- package/dist/lib/esm/obsidian/file-manager.mjs +1 -1
- package/dist/lib/esm/obsidian/i18n/locales/en.d.mts +3 -0
- package/dist/lib/esm/obsidian/i18n/locales/en.mjs +5 -2
- package/dist/lib/esm/obsidian/i18n/locales/translations-map.d.mts +3 -0
- package/dist/lib/esm/obsidian/markdown-code-block-processor.d.mts +3 -3
- package/dist/lib/esm/obsidian/markdown-code-block-processor.mjs +1 -1
- package/dist/lib/esm/obsidian/modals/minimizable-modal.mjs +3 -1
- package/dist/lib/esm/obsidian/vault.d.mts +1 -1
- package/dist/lib/esm/obsidian/vault.mjs +1 -1
- package/dist/styles.css +12 -2
- package/package.json +9 -9
|
@@ -24,50 +24,67 @@ if you want to view the source, please visit the github repository of this plugi
|
|
|
24
24
|
import { ViewType } from "@obsidian-typings/obsidian-public-latest/implementations";
|
|
25
25
|
import {
|
|
26
26
|
MarkdownView,
|
|
27
|
+
Menu,
|
|
27
28
|
setIcon,
|
|
28
|
-
setTooltip
|
|
29
|
+
setTooltip,
|
|
30
|
+
TFile
|
|
29
31
|
} from "obsidian";
|
|
32
|
+
import { convertAsyncToSync } from "../async.mjs";
|
|
30
33
|
import {
|
|
31
34
|
CallbackDisposable,
|
|
32
35
|
MultipleDisposeBehavior
|
|
33
36
|
} from "../disposable.mjs";
|
|
34
37
|
import { noop } from "../function.mjs";
|
|
38
|
+
import { appendCodeBlock } from "../html-element.mjs";
|
|
35
39
|
import { getObsidianDevUtilsState } from "../obsidian-dev-utils-state.mjs";
|
|
36
40
|
import { assertNonNullable } from "../type-guards.mjs";
|
|
37
41
|
import { ComponentEx } from "./components/component-ex.mjs";
|
|
38
42
|
import { toggleEditorReadOnly } from "./editor.mjs";
|
|
39
43
|
import { getPath } from "./file-system.mjs";
|
|
40
44
|
import { t } from "./i18n/i18n.mjs";
|
|
45
|
+
import { confirm } from "./modals/confirm.mjs";
|
|
41
46
|
import { getPluginId } from "./plugin/plugin-id.mjs";
|
|
47
|
+
const BEEP_DURATION_SECONDS = 0.08;
|
|
48
|
+
const BEEP_FREQUENCY_HZ = 660;
|
|
49
|
+
const BEEP_GAIN = 0.05;
|
|
50
|
+
const BEEP_THROTTLE_MILLISECONDS = 200;
|
|
42
51
|
const EDITOR_LOCK_STATE_KEY = "editorLock";
|
|
43
52
|
const LOCK_ICON_ID = "lock";
|
|
44
53
|
const LOCK_INDICATOR_CSS_CLASS = "obsidian-dev-utils-lock-indicator";
|
|
54
|
+
const LOCK_INDICATOR_FLASH_CSS_CLASS = "obsidian-dev-utils-lock-indicator-flash";
|
|
45
55
|
const STATUS_BAR_ITEM_CSS_CLASS = "status-bar-item";
|
|
46
56
|
const STATUS_BAR_CSS_SELECTOR = ".status-bar";
|
|
57
|
+
const UNLOCK_ICON_ID = "unlock";
|
|
47
58
|
class EditorLockEventsComponent extends ComponentEx {
|
|
48
|
-
constructor(app, onChange) {
|
|
49
|
-
super();
|
|
50
|
-
this.app = app;
|
|
51
|
-
this.onChange = onChange;
|
|
52
|
-
}
|
|
53
59
|
app;
|
|
54
60
|
onChange;
|
|
61
|
+
onFileMenu;
|
|
62
|
+
constructor(params) {
|
|
63
|
+
super();
|
|
64
|
+
this.app = params.app;
|
|
65
|
+
this.onChange = params.onChange;
|
|
66
|
+
this.onFileMenu = params.onFileMenu;
|
|
67
|
+
}
|
|
55
68
|
onload() {
|
|
56
69
|
super.onload();
|
|
57
70
|
this.registerEvent(this.app.workspace.on("active-leaf-change", this.onChange));
|
|
58
71
|
this.registerEvent(this.app.workspace.on("layout-change", this.onChange));
|
|
59
72
|
this.registerEvent(this.app.workspace.on("file-open", this.onChange));
|
|
73
|
+
this.registerEvent(this.app.workspace.on("file-menu", this.onFileMenu));
|
|
60
74
|
}
|
|
61
75
|
}
|
|
62
76
|
class EditorPathLockManager {
|
|
77
|
+
abortControllersByPath = /* @__PURE__ */ new Map();
|
|
78
|
+
audioContext = null;
|
|
63
79
|
eventsComponent;
|
|
64
80
|
indicatorsByView = /* @__PURE__ */ new Map();
|
|
81
|
+
lastBeepMilliseconds = 0;
|
|
65
82
|
lockCountByPluginIdByPath = /* @__PURE__ */ new Map();
|
|
66
83
|
statusBarItemEl = null;
|
|
67
84
|
isLocked(app, pathOrFile) {
|
|
68
85
|
return this.isPathLocked(getPath(app, pathOrFile));
|
|
69
86
|
}
|
|
70
|
-
lock(app, pathOrFile, pluginId) {
|
|
87
|
+
lock(app, pathOrFile, pluginId, abortController) {
|
|
71
88
|
const path = getPath(app, pathOrFile);
|
|
72
89
|
let lockCountByPluginId = this.lockCountByPluginIdByPath.get(path);
|
|
73
90
|
if (!lockCountByPluginId) {
|
|
@@ -75,15 +92,49 @@ class EditorPathLockManager {
|
|
|
75
92
|
this.lockCountByPluginIdByPath.set(path, lockCountByPluginId);
|
|
76
93
|
}
|
|
77
94
|
lockCountByPluginId.set(pluginId, (lockCountByPluginId.get(pluginId) ?? 0) + 1);
|
|
95
|
+
if (abortController) {
|
|
96
|
+
let abortControllers = this.abortControllersByPath.get(path);
|
|
97
|
+
if (!abortControllers) {
|
|
98
|
+
abortControllers = /* @__PURE__ */ new Set();
|
|
99
|
+
this.abortControllersByPath.set(path, abortControllers);
|
|
100
|
+
}
|
|
101
|
+
abortControllers.add(abortController);
|
|
102
|
+
}
|
|
78
103
|
this.ensureSubscribed(app);
|
|
79
104
|
this.reconcile(app);
|
|
80
105
|
return new CallbackDisposable({
|
|
81
106
|
callback: () => {
|
|
107
|
+
if (abortController) {
|
|
108
|
+
const abortControllers = this.abortControllersByPath.get(path);
|
|
109
|
+
assertNonNullable(abortControllers);
|
|
110
|
+
abortControllers.delete(abortController);
|
|
111
|
+
if (abortControllers.size === 0) {
|
|
112
|
+
this.abortControllersByPath.delete(path);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
82
115
|
this.unlockPath(app, path, pluginId);
|
|
83
116
|
},
|
|
84
117
|
multipleDisposeBehavior: MultipleDisposeBehavior.Ignore
|
|
85
118
|
});
|
|
86
119
|
}
|
|
120
|
+
/**
|
|
121
|
+
* Aborts every {@link AbortController} currently registered for the note at the given path, which
|
|
122
|
+
* cancels the operations holding the lock. Each operation releases its own lock in its `finally`
|
|
123
|
+
* when it observes the abort, so this does not unlock the path directly. A no-op when no controller
|
|
124
|
+
* is registered for the path.
|
|
125
|
+
*
|
|
126
|
+
* @param app - The Obsidian app instance.
|
|
127
|
+
* @param pathOrFile - The path or file of the note to request an unlock for.
|
|
128
|
+
*/
|
|
129
|
+
requestUnlock(app, pathOrFile) {
|
|
130
|
+
const abortControllers = this.abortControllersByPath.get(getPath(app, pathOrFile));
|
|
131
|
+
if (!abortControllers) {
|
|
132
|
+
return;
|
|
133
|
+
}
|
|
134
|
+
for (const controller of abortControllers) {
|
|
135
|
+
controller.abort();
|
|
136
|
+
}
|
|
137
|
+
}
|
|
87
138
|
unlock(app, pathOrFile, pluginId) {
|
|
88
139
|
this.unlockPath(app, getPath(app, pathOrFile), pluginId);
|
|
89
140
|
}
|
|
@@ -95,17 +146,63 @@ class EditorPathLockManager {
|
|
|
95
146
|
}
|
|
96
147
|
this.reconcileAndCleanup(app);
|
|
97
148
|
}
|
|
98
|
-
|
|
149
|
+
addUnlockMenuItem(app, menu, path) {
|
|
150
|
+
menu.addItem((item) => {
|
|
151
|
+
item.setTitle(t(($) => $.obsidianDevUtils.editorLock.unlockMenuItem)).setIcon(UNLOCK_ICON_ID).onClick(convertAsyncToSync(async () => {
|
|
152
|
+
const isConfirmed = await confirm({
|
|
153
|
+
app,
|
|
154
|
+
message: this.unlockConfirmMessage(app, path),
|
|
155
|
+
title: t(($) => $.obsidianDevUtils.editorLock.unlockConfirmTitle)
|
|
156
|
+
});
|
|
157
|
+
if (isConfirmed) {
|
|
158
|
+
this.requestUnlock(app, path);
|
|
159
|
+
}
|
|
160
|
+
}));
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
beep() {
|
|
164
|
+
const nowMilliseconds = Date.now();
|
|
165
|
+
if (nowMilliseconds - this.lastBeepMilliseconds < BEEP_THROTTLE_MILLISECONDS) {
|
|
166
|
+
return;
|
|
167
|
+
}
|
|
168
|
+
this.lastBeepMilliseconds = nowMilliseconds;
|
|
169
|
+
const AudioContextClass = window.AudioContext;
|
|
170
|
+
if (!AudioContextClass) {
|
|
171
|
+
return;
|
|
172
|
+
}
|
|
173
|
+
this.audioContext ??= new AudioContextClass();
|
|
174
|
+
const audioContext = this.audioContext;
|
|
175
|
+
const oscillator = audioContext.createOscillator();
|
|
176
|
+
const gainNode = audioContext.createGain();
|
|
177
|
+
oscillator.type = "sine";
|
|
178
|
+
oscillator.frequency.value = BEEP_FREQUENCY_HZ;
|
|
179
|
+
gainNode.gain.value = BEEP_GAIN;
|
|
180
|
+
oscillator.connect(gainNode);
|
|
181
|
+
gainNode.connect(audioContext.destination);
|
|
182
|
+
oscillator.start();
|
|
183
|
+
oscillator.stop(audioContext.currentTime + BEEP_DURATION_SECONDS);
|
|
184
|
+
}
|
|
185
|
+
createIndicators(app, view, path, tooltip) {
|
|
99
186
|
const actionIconEl = view.addAction(LOCK_ICON_ID, tooltip, noop);
|
|
187
|
+
this.registerUnlockMenu(app, actionIconEl, () => path);
|
|
100
188
|
let tabIconEl = null;
|
|
101
189
|
const tabStatusContainerEl = view.leaf.tabHeaderStatusContainerEl;
|
|
102
190
|
if (tabStatusContainerEl) {
|
|
103
191
|
tabIconEl = tabStatusContainerEl.createSpan({ cls: LOCK_INDICATOR_CSS_CLASS });
|
|
104
192
|
setIcon(tabIconEl, LOCK_ICON_ID);
|
|
105
193
|
setTooltip(tabIconEl, tooltip);
|
|
194
|
+
this.registerUnlockMenu(app, tabIconEl, () => path);
|
|
106
195
|
}
|
|
196
|
+
const onTypeAttempt = () => {
|
|
197
|
+
this.flashIndicators(view);
|
|
198
|
+
this.beep();
|
|
199
|
+
};
|
|
200
|
+
view.contentEl.addEventListener("beforeinput", onTypeAttempt);
|
|
107
201
|
return {
|
|
108
202
|
actionIconEl,
|
|
203
|
+
disposeTypeListener: () => {
|
|
204
|
+
view.contentEl.removeEventListener("beforeinput", onTypeAttempt);
|
|
205
|
+
},
|
|
109
206
|
tabIconEl
|
|
110
207
|
};
|
|
111
208
|
}
|
|
@@ -113,20 +210,50 @@ class EditorPathLockManager {
|
|
|
113
210
|
if (this.eventsComponent) {
|
|
114
211
|
return;
|
|
115
212
|
}
|
|
116
|
-
this.eventsComponent = new EditorLockEventsComponent(
|
|
117
|
-
|
|
213
|
+
this.eventsComponent = new EditorLockEventsComponent({
|
|
214
|
+
app,
|
|
215
|
+
onChange: () => {
|
|
216
|
+
this.reconcile(app);
|
|
217
|
+
},
|
|
218
|
+
onFileMenu: (menu, file) => {
|
|
219
|
+
this.handleFileMenu(app, menu, file);
|
|
220
|
+
}
|
|
118
221
|
});
|
|
119
222
|
this.eventsComponent.load();
|
|
120
223
|
}
|
|
224
|
+
flashElement(el) {
|
|
225
|
+
el.removeClass(LOCK_INDICATOR_FLASH_CSS_CLASS);
|
|
226
|
+
el.getBoundingClientRect();
|
|
227
|
+
el.addClass(LOCK_INDICATOR_FLASH_CSS_CLASS);
|
|
228
|
+
}
|
|
229
|
+
flashIndicators(view) {
|
|
230
|
+
const indicators = this.indicatorsByView.get(view);
|
|
231
|
+
for (const el of [indicators?.actionIconEl, indicators?.tabIconEl, this.statusBarItemEl]) {
|
|
232
|
+
if (el) {
|
|
233
|
+
this.flashElement(el);
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
handleFileMenu(app, menu, file) {
|
|
238
|
+
if (!(file instanceof TFile)) {
|
|
239
|
+
return;
|
|
240
|
+
}
|
|
241
|
+
if (!this.isPathLocked(file.path)) {
|
|
242
|
+
return;
|
|
243
|
+
}
|
|
244
|
+
this.addUnlockMenuItem(app, menu, file.path);
|
|
245
|
+
}
|
|
121
246
|
isPathLocked(path) {
|
|
122
247
|
return (this.lockCountByPluginIdByPath.get(path)?.size ?? 0) > 0;
|
|
123
248
|
}
|
|
124
|
-
|
|
249
|
+
lockingPluginNames(app, path) {
|
|
125
250
|
const lockCountByPluginId = this.lockCountByPluginIdByPath.get(path);
|
|
126
251
|
assertNonNullable(lockCountByPluginId);
|
|
252
|
+
return Array.from(lockCountByPluginId.keys()).map((pluginId) => app.plugins.manifests[pluginId]?.name ?? pluginId);
|
|
253
|
+
}
|
|
254
|
+
lockTooltip(app, path) {
|
|
127
255
|
const header = t(($) => $.obsidianDevUtils.editorLock.lockedByTooltip);
|
|
128
|
-
|
|
129
|
-
return [header, ...pluginNames].join("\n");
|
|
256
|
+
return [header, ...this.lockingPluginNames(app, path)].join("\n");
|
|
130
257
|
}
|
|
131
258
|
reconcile(app) {
|
|
132
259
|
const viewsToLock = /* @__PURE__ */ new Set();
|
|
@@ -147,13 +274,14 @@ class EditorPathLockManager {
|
|
|
147
274
|
if (indicators) {
|
|
148
275
|
this.updateIndicatorTooltips(indicators, tooltip);
|
|
149
276
|
} else {
|
|
150
|
-
this.indicatorsByView.set(view, this.createIndicators(view, tooltip));
|
|
277
|
+
this.indicatorsByView.set(view, this.createIndicators(app, view, path, tooltip));
|
|
151
278
|
}
|
|
152
279
|
}
|
|
153
280
|
}
|
|
154
281
|
for (const [view, indicators] of this.indicatorsByView) {
|
|
155
282
|
if (!viewsToLock.has(view)) {
|
|
156
283
|
toggleEditorReadOnly(view.editor, false);
|
|
284
|
+
indicators.disposeTypeListener();
|
|
157
285
|
indicators.actionIconEl.remove();
|
|
158
286
|
indicators.tabIconEl?.remove();
|
|
159
287
|
this.indicatorsByView.delete(view);
|
|
@@ -168,6 +296,27 @@ class EditorPathLockManager {
|
|
|
168
296
|
this.eventsComponent = void 0;
|
|
169
297
|
}
|
|
170
298
|
}
|
|
299
|
+
registerUnlockMenu(app, el, getContextPath) {
|
|
300
|
+
el.addEventListener("contextmenu", (evt) => {
|
|
301
|
+
evt.preventDefault();
|
|
302
|
+
const path = getContextPath();
|
|
303
|
+
if (path === void 0) {
|
|
304
|
+
return;
|
|
305
|
+
}
|
|
306
|
+
const menu = new Menu();
|
|
307
|
+
this.addUnlockMenuItem(app, menu, path);
|
|
308
|
+
menu.showAtMouseEvent(evt);
|
|
309
|
+
});
|
|
310
|
+
}
|
|
311
|
+
unlockConfirmMessage(app, path) {
|
|
312
|
+
const fragment = createFragment();
|
|
313
|
+
fragment.appendText(t(($) => $.obsidianDevUtils.editorLock.unlockConfirmMessage));
|
|
314
|
+
for (const name of this.lockingPluginNames(app, path)) {
|
|
315
|
+
fragment.createEl("br");
|
|
316
|
+
appendCodeBlock(fragment, name);
|
|
317
|
+
}
|
|
318
|
+
return fragment;
|
|
319
|
+
}
|
|
171
320
|
unlockPath(app, path, pluginId) {
|
|
172
321
|
const lockCountByPluginId = this.lockCountByPluginIdByPath.get(path);
|
|
173
322
|
if (!lockCountByPluginId) {
|
|
@@ -209,6 +358,7 @@ class EditorPathLockManager {
|
|
|
209
358
|
}
|
|
210
359
|
this.statusBarItemEl = statusBarEl.createDiv({ cls: [STATUS_BAR_ITEM_CSS_CLASS, LOCK_INDICATOR_CSS_CLASS] });
|
|
211
360
|
setIcon(this.statusBarItemEl, LOCK_ICON_ID);
|
|
361
|
+
this.registerUnlockMenu(app, this.statusBarItemEl, () => app.workspace.getActiveViewOfType(MarkdownView)?.file?.path);
|
|
212
362
|
}
|
|
213
363
|
setTooltip(this.statusBarItemEl, this.lockTooltip(app, activePath));
|
|
214
364
|
}
|
|
@@ -244,10 +394,13 @@ class EditorLockComponent extends ComponentEx {
|
|
|
244
394
|
* with a dispose of the returned {@link Disposable} (ideally via `using`) or {@link unlockForPath}.
|
|
245
395
|
*
|
|
246
396
|
* @param pathOrFile - The path or file of the note to lock.
|
|
397
|
+
* @param options - Optional locking options. Pass an
|
|
398
|
+
* {@link EditorLockComponentLockForPathOptions.abortController} to make the lock cancelable via the
|
|
399
|
+
* indicator's right-click "unlock" menu or {@link requestEditorUnlockForPath}.
|
|
247
400
|
* @returns A {@link Disposable} that releases this lock when disposed. Disposing more than once is a no-op.
|
|
248
401
|
*/
|
|
249
|
-
lockForPath(pathOrFile) {
|
|
250
|
-
return getManager().lock(this.app, pathOrFile, this.pluginId);
|
|
402
|
+
lockForPath(pathOrFile, options) {
|
|
403
|
+
return getManager().lock(this.app, pathOrFile, this.pluginId, options?.abortController);
|
|
251
404
|
}
|
|
252
405
|
/**
|
|
253
406
|
* Releases every lock still held by this plugin when the component (and thus the plugin) unloads,
|
|
@@ -272,6 +425,9 @@ function isEditorLockedForPath(app, pathOrFile) {
|
|
|
272
425
|
function lockEditorForPath(app, pathOrFile) {
|
|
273
426
|
return getManager().lock(app, pathOrFile, getPluginId());
|
|
274
427
|
}
|
|
428
|
+
function requestEditorUnlockForPath(app, pathOrFile) {
|
|
429
|
+
getManager().requestUnlock(app, pathOrFile);
|
|
430
|
+
}
|
|
275
431
|
function unlockEditorForPath(app, pathOrFile) {
|
|
276
432
|
getManager().unlock(app, pathOrFile, getPluginId());
|
|
277
433
|
}
|
|
@@ -282,6 +438,7 @@ export {
|
|
|
282
438
|
EditorLockComponent,
|
|
283
439
|
isEditorLockedForPath,
|
|
284
440
|
lockEditorForPath,
|
|
441
|
+
requestEditorUnlockForPath,
|
|
285
442
|
unlockEditorForPath
|
|
286
443
|
};
|
|
287
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL2VkaXRvci1sb2NrLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogTm90ZS1zY29wZWQsIHJlZmVyZW5jZS1jb3VudGVkIGVkaXRvciBsb2NraW5nLlxuICpcbiAqIFdoZXJlIHtAbGluayB0b2dnbGVFZGl0b3JSZWFkT25seX0gZnJvbSBgLi9lZGl0b3IudHNgIHRvZ2dsZXMgdGhlIHJlYWQtb25seSBzdGF0ZSBvZiBhIHNpbmdsZVxuICoge0BsaW5rIEVkaXRvcn0gaW5zdGFuY2UsIHRoZSBoZWxwZXJzIGhlcmUgbG9jayBhIG5vdGUgYnkgaXRzICoqcGF0aCoqOiB3aGlsZSBhIHBhdGggaXNcbiAqIGxvY2tlZCwgZXZlcnkgY3VycmVudCBhbmQgZnV0dXJlIHtAbGluayBNYXJrZG93blZpZXd9IG9mIHRoYXQgbm90ZSAoaW4gYW55IHdpbmRvdywgaW5jbHVkaW5nXG4gKiBwb3BvdXRzKSBpcyBtYWRlIHJlYWQtb25seSBhbmQgc2hvd3MgYSBsb2NrIGluZGljYXRvciBpbiBpdHMgdGFiIGhlYWRlciwgaXRzIHZpZXcgYWN0aW9uIGJhciwgYW5kXG4gKiB0aGUgc3RhdHVzIGJhciAod2hpbGUgdGhlIG5vdGUgaXMgYWN0aXZlKS4gTG9ja3MgYXJlIHJlZmVyZW5jZS1jb3VudGVkIHBlciBsb2NraW5nIHBsdWdpbiwgc29cbiAqIG5lc3RlZCBvciBjb25jdXJyZW50IG9wZXJhdGlvbnMgb24gdGhlIHNhbWUgbm90ZSBhcmUgc2FmZSBcdTIwMTQgdGhlIG5vdGUgaXMgdW5sb2NrZWQgb25seSB3aGVuIHRoZVxuICogbGFzdCBsb2NrIGlzIHJlbGVhc2VkIFx1MjAxNCBhbmQgdGhlIGluZGljYXRvcnMnIHRvb2x0aXAgbGlzdHMgd2hpY2ggcGx1Z2lucyBjdXJyZW50bHkgaG9sZCBhIGxvY2suXG4gKlxuICogVGhlIGFjcXVpcmVycyByZXR1cm4gYSB7QGxpbmsgRGlzcG9zYWJsZX0sIHNvIHRoZSBwcmVmZXJyZWQgY2FsbCBzdHlsZSBpcyBhIGB1c2luZ2AgZGVjbGFyYXRpb25cbiAqIHRoYXQgcmVsZWFzZXMgYXV0b21hdGljYWxseSBhdCBzY29wZSBleGl0IChpbmNsdWRpbmcgb24gdGhyb3cpOlxuICpcbiAqIGBgYHRzXG4gKiB1c2luZyBfbG9jayA9IGxvY2tFZGl0b3JGb3JQYXRoKGFwcCwgcGF0aCk7XG4gKiAvLyAuLi4gbG9uZy1ydW5uaW5nIHdvcmsgKHByb2Nlc3MsIHByb2Nlc3NGcm9udE1hdHRlciwgbWVyZ2Uvc3BsaXQpIC4uLlxuICogLy8gYXV0by11bmxvY2tlZCBhdCBzY29wZSBleGl0XG4gKiBgYGBcbiAqXG4gKiBUaGUgZXhwbGljaXQge0BsaW5rIHVubG9ja0VkaXRvckZvclBhdGh9IHBhaXIgcmVtYWlucyBhdmFpbGFibGUgZm9yIG5vbi1gdXNpbmdgIGNhbGwgc2l0ZXMuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBBcHAgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB7IFZpZXdUeXBlIH0gZnJvbSAnQG9ic2lkaWFuLXR5cGluZ3Mvb2JzaWRpYW4tcHVibGljLWxhdGVzdC9pbXBsZW1lbnRhdGlvbnMnO1xuaW1wb3J0IHtcbiAgTWFya2Rvd25WaWV3LFxuICBzZXRJY29uLFxuICBzZXRUb29sdGlwXG59IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBQYXRoT3JGaWxlIH0gZnJvbSAnLi9maWxlLXN5c3RlbS50cyc7XG5cbmltcG9ydCB7XG4gIENhbGxiYWNrRGlzcG9zYWJsZSxcbiAgTXVsdGlwbGVEaXNwb3NlQmVoYXZpb3Jcbn0gZnJvbSAnLi4vZGlzcG9zYWJsZS50cyc7XG5pbXBvcnQgeyBub29wIH0gZnJvbSAnLi4vZnVuY3Rpb24udHMnO1xuaW1wb3J0IHsgZ2V0T2JzaWRpYW5EZXZVdGlsc1N0YXRlIH0gZnJvbSAnLi4vb2JzaWRpYW4tZGV2LXV0aWxzLXN0YXRlLnRzJztcbmltcG9ydCB7IGFzc2VydE5vbk51bGxhYmxlIH0gZnJvbSAnLi4vdHlwZS1ndWFyZHMudHMnO1xuaW1wb3J0IHsgQ29tcG9uZW50RXggfSBmcm9tICcuL2NvbXBvbmVudHMvY29tcG9uZW50LWV4LnRzJztcbmltcG9ydCB7IHRvZ2dsZUVkaXRvclJlYWRPbmx5IH0gZnJvbSAnLi9lZGl0b3IudHMnO1xuaW1wb3J0IHsgZ2V0UGF0aCB9IGZyb20gJy4vZmlsZS1zeXN0ZW0udHMnO1xuaW1wb3J0IHsgdCB9IGZyb20gJy4vaTE4bi9pMThuLnRzJztcbmltcG9ydCB7IGdldFBsdWdpbklkIH0gZnJvbSAnLi9wbHVnaW4vcGx1Z2luLWlkLnRzJztcblxuY29uc3QgRURJVE9SX0xPQ0tfU1RBVEVfS0VZID0gJ2VkaXRvckxvY2snO1xuY29uc3QgTE9DS19JQ09OX0lEID0gJ2xvY2snO1xuY29uc3QgTE9DS19JTkRJQ0FUT1JfQ1NTX0NMQVNTID0gJ29ic2lkaWFuLWRldi11dGlscy1sb2NrLWluZGljYXRvcic7XG5jb25zdCBTVEFUVVNfQkFSX0lURU1fQ1NTX0NMQVNTID0gJ3N0YXR1cy1iYXItaXRlbSc7XG5jb25zdCBTVEFUVVNfQkFSX0NTU19TRUxFQ1RPUiA9ICcuc3RhdHVzLWJhcic7XG5cbmludGVyZmFjZSBMb2NrSW5kaWNhdG9ycyB7XG4gIHJlYWRvbmx5IGFjdGlvbkljb25FbDogSFRNTEVsZW1lbnQ7XG4gIHJlYWRvbmx5IHRhYkljb25FbDogSFRNTEVsZW1lbnQgfCBudWxsO1xufVxuXG4vKipcbiAqIFN1YnNjcmliZXMgdG8gdGhlIHdvcmtzcGFjZSBldmVudHMgdGhhdCBzaG91bGQgdHJpZ2dlciBhIGxvY2sgcmVjb25jaWxlLiBJbXBsZW1lbnRlZCBhcyBhXG4gKiB7QGxpbmsgQ29tcG9uZW50RXh9IHNvIHRoZSBzdWJzY3JpcHRpb25zIGFyZSByZWdpc3RlcmVkIG9uIGBsb2FkKClgIGFuZCBhdXRvbWF0aWNhbGx5IHJlbW92ZWQgb25cbiAqIGB1bmxvYWQoKWAsIGluc3RlYWQgb2YgYmVpbmcgdHJhY2tlZCBhbmQgdG9ybiBkb3duIGJ5IGhhbmQuXG4gKi9cbmNsYXNzIEVkaXRvckxvY2tFdmVudHNDb21wb25lbnQgZXh0ZW5kcyBDb21wb25lbnRFeCB7XG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGFwcDogQXBwLCBwcml2YXRlIHJlYWRvbmx5IG9uQ2hhbmdlOiAoKSA9PiB2b2lkKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIHB1YmxpYyBvdmVycmlkZSBvbmxvYWQoKTogdm9pZCB7XG4gICAgc3VwZXIub25sb2FkKCk7XG4gICAgdGhpcy5yZWdpc3RlckV2ZW50KHRoaXMuYXBwLndvcmtzcGFjZS5vbignYWN0aXZlLWxlYWYtY2hhbmdlJywgdGhpcy5vbkNoYW5nZSkpO1xuICAgIHRoaXMucmVnaXN0ZXJFdmVudCh0aGlzLmFwcC53b3Jrc3BhY2Uub24oJ2xheW91dC1jaGFuZ2UnLCB0aGlzLm9uQ2hhbmdlKSk7XG4gICAgLy8gU2FtZS1sZWFmIG5hdmlnYXRpb24gdG8gYW5vdGhlciBub3RlIGZpcmVzIG5vIGxlYWYvbGF5b3V0IGNoYW5nZTsgd2l0aG91dCB0aGlzIGl0IHN0YXlzIHJlYWQtb25seS5cbiAgICB0aGlzLnJlZ2lzdGVyRXZlbnQodGhpcy5hcHAud29ya3NwYWNlLm9uKCdmaWxlLW9wZW4nLCB0aGlzLm9uQ2hhbmdlKSk7XG4gIH1cbn1cblxuLyoqXG4gKiBUcmFja3MgcmVmZXJlbmNlLWNvdW50ZWQsIHBhdGgtc2NvcGVkIGVkaXRvciBsb2NrcyBhbmQga2VlcHMgZXZlcnkgb3BlbiB7QGxpbmsgTWFya2Rvd25WaWV3fSBpblxuICogc3luYyB3aXRoIHRoZSBsb2NrZWQtcGF0aCBzZXQuIEEgc2luZ2xlIGluc3RhbmNlIGxpdmVzIG9uIHRoZSBzaGFyZWQgYG9ic2lkaWFuLWRldi11dGlsc2Agc3RhdGUuXG4gKiBGb3IgZWFjaCBsb2NrZWQgcGF0aCB0aGUgbG9jayBjb3VudCBpcyB0cmFja2VkIHBlciBsb2NraW5nIHBsdWdpbiwgc28gdGhlIGluZGljYXRvcnMgY2FuIHJlcG9ydFxuICogd2hpY2ggcGx1Z2lucyBjdXJyZW50bHkgaG9sZCBhIGxvY2suXG4gKi9cbmNsYXNzIEVkaXRvclBhdGhMb2NrTWFuYWdlciB7XG4gIHByaXZhdGUgZXZlbnRzQ29tcG9uZW50OiBFZGl0b3JMb2NrRXZlbnRzQ29tcG9uZW50IHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIHJlYWRvbmx5IGluZGljYXRvcnNCeVZpZXcgPSBuZXcgTWFwPE1hcmtkb3duVmlldywgTG9ja0luZGljYXRvcnM+KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgbG9ja0NvdW50QnlQbHVnaW5JZEJ5UGF0aCA9IG5ldyBNYXA8c3RyaW5nLCBNYXA8c3RyaW5nLCBudW1iZXI+PigpO1xuICBwcml2YXRlIHN0YXR1c0Jhckl0ZW1FbDogSFRNTEVsZW1lbnQgfCBudWxsID0gbnVsbDtcblxuICBwdWJsaWMgaXNMb2NrZWQoYXBwOiBBcHAsIHBhdGhPckZpbGU6IFBhdGhPckZpbGUpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc1BhdGhMb2NrZWQoZ2V0UGF0aChhcHAsIHBhdGhPckZpbGUpKTtcbiAgfVxuXG4gIHB1YmxpYyBsb2NrKGFwcDogQXBwLCBwYXRoT3JGaWxlOiBQYXRoT3JGaWxlLCBwbHVnaW5JZDogc3RyaW5nKTogRGlzcG9zYWJsZSB7XG4gICAgY29uc3QgcGF0aCA9IGdldFBhdGgoYXBwLCBwYXRoT3JGaWxlKTtcbiAgICBsZXQgbG9ja0NvdW50QnlQbHVnaW5JZCA9IHRoaXMubG9ja0NvdW50QnlQbHVnaW5JZEJ5UGF0aC5nZXQocGF0aCk7XG4gICAgaWYgKCFsb2NrQ291bnRCeVBsdWdpbklkKSB7XG4gICAgICBsb2NrQ291bnRCeVBsdWdpbklkID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcbiAgICAgIHRoaXMubG9ja0NvdW50QnlQbHVnaW5JZEJ5UGF0aC5zZXQocGF0aCwgbG9ja0NvdW50QnlQbHVnaW5JZCk7XG4gICAgfVxuICAgIGxvY2tDb3VudEJ5UGx1Z2luSWQuc2V0KHBsdWdpbklkLCAobG9ja0NvdW50QnlQbHVnaW5JZC5nZXQocGx1Z2luSWQpID8/IDApICsgMSk7XG4gICAgdGhpcy5lbnN1cmVTdWJzY3JpYmVkKGFwcCk7XG4gICAgdGhpcy5yZWNvbmNpbGUoYXBwKTtcblxuICAgIHJldHVybiBuZXcgQ2FsbGJhY2tEaXNwb3NhYmxlKHtcbiAgICAgIGNhbGxiYWNrOiAoKTogdm9pZCA9PiB7XG4gICAgICAgIHRoaXMudW5sb2NrUGF0aChhcHAsIHBhdGgsIHBsdWdpbklkKTtcbiAgICAgIH0sXG4gICAgICBtdWx0aXBsZURpc3Bvc2VCZWhhdmlvcjogTXVsdGlwbGVEaXNwb3NlQmVoYXZpb3IuSWdub3JlXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgdW5sb2NrKGFwcDogQXBwLCBwYXRoT3JGaWxlOiBQYXRoT3JGaWxlLCBwbHVnaW5JZDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy51bmxvY2tQYXRoKGFwcCwgZ2V0UGF0aChhcHAsIHBhdGhPckZpbGUpLCBwbHVnaW5JZCk7XG4gIH1cblxuICBwdWJsaWMgdW5sb2NrQWxsRm9yUGx1Z2luKGFwcDogQXBwLCBwbHVnaW5JZDogc3RyaW5nKTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBbcGF0aCwgbG9ja0NvdW50QnlQbHVnaW5JZF0gb2YgdGhpcy5sb2NrQ291bnRCeVBsdWdpbklkQnlQYXRoKSB7XG4gICAgICBpZiAobG9ja0NvdW50QnlQbHVnaW5JZC5kZWxldGUocGx1Z2luSWQpICYmIGxvY2tDb3VudEJ5UGx1Z2luSWQuc2l6ZSA9PT0gMCkge1xuICAgICAgICB0aGlzLmxvY2tDb3VudEJ5UGx1Z2luSWRCeVBhdGguZGVsZXRlKHBhdGgpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnJlY29uY2lsZUFuZENsZWFudXAoYXBwKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlSW5kaWNhdG9ycyh2aWV3OiBNYXJrZG93blZpZXcsIHRvb2x0aXA6IHN0cmluZyk6IExvY2tJbmRpY2F0b3JzIHtcbiAgICBjb25zdCBhY3Rpb25JY29uRWwgPSB2aWV3LmFkZEFjdGlvbihMT0NLX0lDT05fSUQsIHRvb2x0aXAsIG5vb3ApO1xuXG4gICAgbGV0IHRhYkljb25FbDogSFRNTEVsZW1lbnQgfCBudWxsID0gbnVsbDtcbiAgICBjb25zdCB0YWJTdGF0dXNDb250YWluZXJFbCA9IHZpZXcubGVhZi50YWJIZWFkZXJTdGF0dXNDb250YWluZXJFbDtcbiAgICBpZiAodGFiU3RhdHVzQ29udGFpbmVyRWwpIHtcbiAgICAgIHRhYkljb25FbCA9IHRhYlN0YXR1c0NvbnRhaW5lckVsLmNyZWF0ZVNwYW4oeyBjbHM6IExPQ0tfSU5ESUNBVE9SX0NTU19DTEFTUyB9KTtcbiAgICAgIHNldEljb24odGFiSWNvbkVsLCBMT0NLX0lDT05fSUQpO1xuICAgICAgc2V0VG9vbHRpcCh0YWJJY29uRWwsIHRvb2x0aXApO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBhY3Rpb25JY29uRWwsXG4gICAgICB0YWJJY29uRWxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBlbnN1cmVTdWJzY3JpYmVkKGFwcDogQXBwKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZXZlbnRzQ29tcG9uZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuZXZlbnRzQ29tcG9uZW50ID0gbmV3IEVkaXRvckxvY2tFdmVudHNDb21wb25lbnQoYXBwLCAoKSA9PiB7XG4gICAgICB0aGlzLnJlY29uY2lsZShhcHApO1xuICAgIH0pO1xuICAgIHRoaXMuZXZlbnRzQ29tcG9uZW50LmxvYWQoKTtcbiAgfVxuXG4gIHByaXZhdGUgaXNQYXRoTG9ja2VkKHBhdGg6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAodGhpcy5sb2NrQ291bnRCeVBsdWdpbklkQnlQYXRoLmdldChwYXRoKT8uc2l6ZSA/PyAwKSA+IDA7XG4gIH1cblxuICBwcml2YXRlIGxvY2tUb29sdGlwKGFwcDogQXBwLCBwYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IGxvY2tDb3VudEJ5UGx1Z2luSWQgPSB0aGlzLmxvY2tDb3VudEJ5UGx1Z2luSWRCeVBhdGguZ2V0KHBhdGgpO1xuICAgIC8vIGBsb2NrVG9vbHRpcGAgaXMgb25seSBldmVyIGNhbGxlZCBmb3IgYSBsb2NrZWQgcGF0aCwgc28gdGhlIHBlci1wbHVnaW4gbWFwIGlzIGFsd2F5cyBwcmVzZW50LlxuICAgIGFzc2VydE5vbk51bGxhYmxlKGxvY2tDb3VudEJ5UGx1Z2luSWQpO1xuICAgIGNvbnN0IGhlYWRlciA9IHQoKCQpID0+ICQub2JzaWRpYW5EZXZVdGlscy5lZGl0b3JMb2NrLmxvY2tlZEJ5VG9vbHRpcCk7XG4gICAgY29uc3QgcGx1Z2luTmFtZXMgPSBBcnJheS5mcm9tKGxvY2tDb3VudEJ5UGx1Z2luSWQua2V5cygpKS5tYXAoKHBsdWdpbklkKSA9PiBhcHAucGx1Z2lucy5tYW5pZmVzdHNbcGx1Z2luSWRdPy5uYW1lID8/IHBsdWdpbklkKTtcbiAgICAvLyBBIHJ1bnRpbWUtbGVuZ3RoIGxpc3Qgb2YgcGx1Z2luIG5hbWVzLCBvbmUgcGVyIGxpbmUgdW5kZXIgdGhlIGhlYWRlci5cbiAgICByZXR1cm4gW2hlYWRlciwgLi4ucGx1Z2luTmFtZXNdLmpvaW4oJ1xcbicpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWNvbmNpbGUoYXBwOiBBcHApOiB2b2lkIHtcbiAgICBjb25zdCB2aWV3c1RvTG9jayA9IG5ldyBTZXQ8TWFya2Rvd25WaWV3PigpO1xuICAgIGZvciAoY29uc3QgbGVhZiBvZiBhcHAud29ya3NwYWNlLmdldExlYXZlc09mVHlwZShWaWV3VHlwZS5NYXJrZG93bikpIHtcbiAgICAgIGNvbnN0IHZpZXcgPSBsZWFmLnZpZXc7XG4gICAgICBpZiAoISh2aWV3IGluc3RhbmNlb2YgTWFya2Rvd25WaWV3KSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcGF0aCA9IHZpZXcuZmlsZT8ucGF0aDtcbiAgICAgIGlmIChwYXRoID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmlzUGF0aExvY2tlZChwYXRoKSkge1xuICAgICAgICB2aWV3c1RvTG9jay5hZGQodmlldyk7XG4gICAgICAgIGNvbnN0IHRvb2x0aXAgPSB0aGlzLmxvY2tUb29sdGlwKGFwcCwgcGF0aCk7XG4gICAgICAgIC8vIFJlLWFwcGx5IHRoZSByZWFkLW9ubHkgdG9nZ2xlIG9uIGV2ZXJ5IHJlY29uY2lsZSwgbm90IG9ubHkgdGhlIGZpcnN0IHRpbWUgYSB2aWV3IGlzIHRyYWNrZWQuXG4gICAgICAgIC8vIFRoZSB0b2dnbGUgaXMgaWRlbXBvdGVudCwgc28gcmUtYXBwbHlpbmcgdG8gYW4gYWxyZWFkeS1sb2NrZWQgdmlldyBpcyBjaGVhcC5cbiAgICAgICAgLy8gQSB2aWV3IG9wZW5lZCBhZnRlciB0aGUgbG9jayBpcyByZWNvbmNpbGVkIHN5bmNocm9ub3VzbHksIGJlZm9yZSBpdHMgQ29kZU1pcnJvciBpcyByZWFkeS5cbiAgICAgICAgLy8gSXRzIGZpcnN0IHRvZ2dsZSBpcyB0aGVyZWZvcmUgYSBuby1vcDsgcmUtYXBwbHlpbmcgbWFrZXMgdGhlIGxvY2sgdGFrZSBob2xkIG9uY2UgaXQgc2V0dGxlcy5cbiAgICAgICAgdG9nZ2xlRWRpdG9yUmVhZE9ubHkodmlldy5lZGl0b3IsIHRydWUpO1xuICAgICAgICBjb25zdCBpbmRpY2F0b3JzID0gdGhpcy5pbmRpY2F0b3JzQnlWaWV3LmdldCh2aWV3KTtcbiAgICAgICAgaWYgKGluZGljYXRvcnMpIHtcbiAgICAgICAgICB0aGlzLnVwZGF0ZUluZGljYXRvclRvb2x0aXBzKGluZGljYXRvcnMsIHRvb2x0aXApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuaW5kaWNhdG9yc0J5Vmlldy5zZXQodmlldywgdGhpcy5jcmVhdGVJbmRpY2F0b3JzKHZpZXcsIHRvb2x0aXApKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAoY29uc3QgW3ZpZXcsIGluZGljYXRvcnNdIG9mIHRoaXMuaW5kaWNhdG9yc0J5Vmlldykge1xuICAgICAgaWYgKCF2aWV3c1RvTG9jay5oYXModmlldykpIHtcbiAgICAgICAgdG9nZ2xlRWRpdG9yUmVhZE9ubHkodmlldy5lZGl0b3IsIGZhbHNlKTtcbiAgICAgICAgaW5kaWNhdG9ycy5hY3Rpb25JY29uRWwucmVtb3ZlKCk7XG4gICAgICAgIGluZGljYXRvcnMudGFiSWNvbkVsPy5yZW1vdmUoKTtcbiAgICAgICAgdGhpcy5pbmRpY2F0b3JzQnlWaWV3LmRlbGV0ZSh2aWV3KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnVwZGF0ZVN0YXR1c0JhcihhcHApO1xuICB9XG5cbiAgcHJpdmF0ZSByZWNvbmNpbGVBbmRDbGVhbnVwKGFwcDogQXBwKTogdm9pZCB7XG4gICAgdGhpcy5yZWNvbmNpbGUoYXBwKTtcbiAgICBpZiAodGhpcy5sb2NrQ291bnRCeVBsdWdpbklkQnlQYXRoLnNpemUgPT09IDApIHtcbiAgICAgIHRoaXMuZXZlbnRzQ29tcG9uZW50Py51bmxvYWQoKTtcbiAgICAgIHRoaXMuZXZlbnRzQ29tcG9uZW50ID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdW5sb2NrUGF0aChhcHA6IEFwcCwgcGF0aDogc3RyaW5nLCBwbHVnaW5JZDogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgbG9ja0NvdW50QnlQbHVnaW5JZCA9IHRoaXMubG9ja0NvdW50QnlQbHVnaW5JZEJ5UGF0aC5nZXQocGF0aCk7XG4gICAgaWYgKCFsb2NrQ291bnRCeVBsdWdpbklkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY291bnQgPSBsb2NrQ291bnRCeVBsdWdpbklkLmdldChwbHVnaW5JZCkgPz8gMDtcbiAgICBpZiAoY291bnQgPD0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChjb3VudCA9PT0gMSkge1xuICAgICAgbG9ja0NvdW50QnlQbHVnaW5JZC5kZWxldGUocGx1Z2luSWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsb2NrQ291bnRCeVBsdWdpbklkLnNldChwbHVnaW5JZCwgY291bnQgLSAxKTtcbiAgICB9XG5cbiAgICBpZiAobG9ja0NvdW50QnlQbHVnaW5JZC5zaXplID09PSAwKSB7XG4gICAgICB0aGlzLmxvY2tDb3VudEJ5UGx1Z2luSWRCeVBhdGguZGVsZXRlKHBhdGgpO1xuICAgIH1cblxuICAgIHRoaXMucmVjb25jaWxlQW5kQ2xlYW51cChhcHApO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVJbmRpY2F0b3JUb29sdGlwcyhpbmRpY2F0b3JzOiBMb2NrSW5kaWNhdG9ycywgdG9vbHRpcDogc3RyaW5nKTogdm9pZCB7XG4gICAgc2V0VG9vbHRpcChpbmRpY2F0b3JzLmFjdGlvbkljb25FbCwgdG9vbHRpcCk7XG4gICAgaWYgKGluZGljYXRvcnMudGFiSWNvbkVsKSB7XG4gICAgICBzZXRUb29sdGlwKGluZGljYXRvcnMudGFiSWNvbkVsLCB0b29sdGlwKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVN0YXR1c0JhcihhcHA6IEFwcCk6IHZvaWQge1xuICAgIGNvbnN0IGFjdGl2ZVZpZXcgPSBhcHAud29ya3NwYWNlLmdldEFjdGl2ZVZpZXdPZlR5cGUoTWFya2Rvd25WaWV3KTtcbiAgICBjb25zdCBhY3RpdmVQYXRoID0gYWN0aXZlVmlldz8uZmlsZT8ucGF0aDtcbiAgICBjb25zdCBpc0FjdGl2ZUxvY2tlZCA9IGFjdGl2ZVBhdGggIT09IHVuZGVmaW5lZCAmJiB0aGlzLmlzUGF0aExvY2tlZChhY3RpdmVQYXRoKTtcblxuICAgIGlmICghaXNBY3RpdmVMb2NrZWQgfHwgIWFjdGl2ZVZpZXcpIHtcbiAgICAgIHRoaXMuc3RhdHVzQmFySXRlbUVsPy5yZW1vdmUoKTtcbiAgICAgIHRoaXMuc3RhdHVzQmFySXRlbUVsID0gbnVsbDtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuc3RhdHVzQmFySXRlbUVsKSB7XG4gICAgICBjb25zdCBzdGF0dXNCYXJFbCA9IGFjdGl2ZVZpZXcuY29udGFpbmVyRWwub3duZXJEb2N1bWVudC5ib2R5LnF1ZXJ5U2VsZWN0b3I8SFRNTEVsZW1lbnQ+KFNUQVRVU19CQVJfQ1NTX1NFTEVDVE9SKTtcbiAgICAgIGlmICghc3RhdHVzQmFyRWwpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5zdGF0dXNCYXJJdGVtRWwgPSBzdGF0dXNCYXJFbC5jcmVhdGVEaXYoeyBjbHM6IFtTVEFUVVNfQkFSX0lURU1fQ1NTX0NMQVNTLCBMT0NLX0lORElDQVRPUl9DU1NfQ0xBU1NdIH0pO1xuICAgICAgc2V0SWNvbih0aGlzLnN0YXR1c0Jhckl0ZW1FbCwgTE9DS19JQ09OX0lEKTtcbiAgICB9XG5cbiAgICBzZXRUb29sdGlwKHRoaXMuc3RhdHVzQmFySXRlbUVsLCB0aGlzLmxvY2tUb29sdGlwKGFwcCwgYWN0aXZlUGF0aCkpO1xuICB9XG59XG5cbi8qKlxuICogQSBwZXItcGx1Z2luIGhhbmRsZSBmb3Igbm90ZS1zY29wZWQgZWRpdG9yIGxvY2tpbmcuIEFkZCBpdCBhcyBhIGNoaWxkIG9mIHlvdXIgcGx1Z2luXG4gKiAoYHRoaXMuYWRkQ2hpbGQobmV3IEVkaXRvckxvY2tDb21wb25lbnQodGhpcy5hcHApKWApIHNvIHRoYXQgYW55IGxvY2tzIGl0IHN0aWxsIGhvbGRzIGFyZSByZWxlYXNlZFxuICogYXV0b21hdGljYWxseSB3aGVuIHRoZSBwbHVnaW4gdW5sb2FkcyBcdTIwMTQgYSBub3RlIGNhbiBuZXZlciBiZSBsZWZ0IHN0dWNrIHJlYWQtb25seSBiZWNhdXNlIHRoZVxuICogcGx1Z2luIHRoYXQgbG9ja2VkIGl0IHdhcyBkaXNhYmxlZCBvciByZWxvYWRlZCBtaWQtb3BlcmF0aW9uLlxuICpcbiAqIExvY2tzIGFyZSByZWZlcmVuY2UtY291bnRlZCBhbmQgYXR0cmlidXRlZCB0byB0aGlzIHBsdWdpbiwgc28gdGhlIGxvY2sgaW5kaWNhdG9ycycgdG9vbHRpcCBuYW1lc1xuICogaXQgYW1vbmcgdGhlIHBsdWdpbnMgY3VycmVudGx5IGhvbGRpbmcgYSBsb2NrLlxuICovXG5leHBvcnQgY2xhc3MgRWRpdG9yTG9ja0NvbXBvbmVudCBleHRlbmRzIENvbXBvbmVudEV4IHtcbiAgcHJpdmF0ZSByZWFkb25seSBhcHA6IEFwcDtcbiAgcHJpdmF0ZSByZWFkb25seSBwbHVnaW5JZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIGVkaXRvci1sb2NrIGhhbmRsZSBvd25lZCBieSBhIHBsdWdpbi5cbiAgICpcbiAgICogQHBhcmFtIGFwcCAtIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gICAqIEBwYXJhbSBwbHVnaW5JZCAtIFRoZSBpZCBvZiB0aGUgb3duaW5nIHBsdWdpbi4gRGVmYXVsdHMgdG8gdGhlIGN1cnJlbnQgcGx1Z2luIGNvbnRleHQncyBpZDsgcGFzc1xuICAgKiBpdCBleHBsaWNpdGx5IChlLmcuIGZyb20gYSBwbHVnaW4ncyBgbWFuaWZlc3QuaWRgKSB3aGVuIGNvbnN0cnVjdGluZyBiZWZvcmUgdGhlIHBsdWdpbiBjb250ZXh0IGlzXG4gICAqIGluaXRpYWxpemVkLCBzdWNoIGFzIGluc2lkZSBgUGx1Z2luQmFzZS5vbmxvYWRgLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKGFwcDogQXBwLCBwbHVnaW5JZDogc3RyaW5nID0gZ2V0UGx1Z2luSWQoKSkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5hcHAgPSBhcHA7XG4gICAgdGhpcy5wbHVnaW5JZCA9IHBsdWdpbklkO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyB3aGV0aGVyIHRoZSBub3RlIGF0IHRoZSBnaXZlbiBwYXRoIGlzIGN1cnJlbnRseSBsb2NrZWQgYnkgYW55IHBsdWdpbi5cbiAgICpcbiAgICogQHBhcmFtIHBhdGhPckZpbGUgLSBUaGUgcGF0aCBvciBmaWxlIG9mIHRoZSBub3RlIHRvIGNoZWNrLlxuICAgKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIG5vdGUgaGFzIGF0IGxlYXN0IG9uZSBhY3RpdmUgbG9jaywgYGZhbHNlYCBvdGhlcndpc2UuXG4gICAqL1xuICBwdWJsaWMgaXNMb2NrZWRGb3JQYXRoKHBhdGhPckZpbGU6IFBhdGhPckZpbGUpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZ2V0TWFuYWdlcigpLmlzTG9ja2VkKHRoaXMuYXBwLCBwYXRoT3JGaWxlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2NrcyB0aGUgbm90ZSBhdCB0aGUgZ2l2ZW4gcGF0aCBvbiBiZWhhbGYgb2YgdGhpcyBwbHVnaW4sIG1ha2luZyBpdCByZWFkLW9ubHkgaW4gZXZlcnkgY3VycmVudFxuICAgKiBhbmQgZnV0dXJlIHtAbGluayBNYXJrZG93blZpZXd9IHVudGlsIHRoZSBsb2NrIGlzIHJlbGVhc2VkLiBSZWZlcmVuY2UtY291bnRlZDogYmFsYW5jZSBlYWNoIGNhbGxcbiAgICogd2l0aCBhIGRpc3Bvc2Ugb2YgdGhlIHJldHVybmVkIHtAbGluayBEaXNwb3NhYmxlfSAoaWRlYWxseSB2aWEgYHVzaW5nYCkgb3Ige0BsaW5rIHVubG9ja0ZvclBhdGh9LlxuICAgKlxuICAgKiBAcGFyYW0gcGF0aE9yRmlsZSAtIFRoZSBwYXRoIG9yIGZpbGUgb2YgdGhlIG5vdGUgdG8gbG9jay5cbiAgICogQHJldHVybnMgQSB7QGxpbmsgRGlzcG9zYWJsZX0gdGhhdCByZWxlYXNlcyB0aGlzIGxvY2sgd2hlbiBkaXNwb3NlZC4gRGlzcG9zaW5nIG1vcmUgdGhhbiBvbmNlIGlzIGEgbm8tb3AuXG4gICAqL1xuICBwdWJsaWMgbG9ja0ZvclBhdGgocGF0aE9yRmlsZTogUGF0aE9yRmlsZSk6IERpc3Bvc2FibGUge1xuICAgIHJldHVybiBnZXRNYW5hZ2VyKCkubG9jayh0aGlzLmFwcCwgcGF0aE9yRmlsZSwgdGhpcy5wbHVnaW5JZCk7XG4gIH1cblxuICAvKipcbiAgICogUmVsZWFzZXMgZXZlcnkgbG9jayBzdGlsbCBoZWxkIGJ5IHRoaXMgcGx1Z2luIHdoZW4gdGhlIGNvbXBvbmVudCAoYW5kIHRodXMgdGhlIHBsdWdpbikgdW5sb2FkcyxcbiAgICogc28gbm8gbm90ZSBpcyBsZWZ0IHN0dWNrIHJlYWQtb25seSBieSBhbiBvcGVyYXRpb24gdGhhdCBuZXZlciBjb21wbGV0ZWQuXG4gICAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgb251bmxvYWQoKTogdm9pZCB7XG4gICAgZ2V0TWFuYWdlcigpLnVubG9ja0FsbEZvclBsdWdpbih0aGlzLmFwcCwgdGhpcy5wbHVnaW5JZCk7XG4gICAgc3VwZXIub251bmxvYWQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWxlYXNlcyBvbmUgbG9jayBwcmV2aW91c2x5IGFjcXVpcmVkIGZvciB0aGUgbm90ZSBhdCB0aGUgZ2l2ZW4gcGF0aCB2aWEge0BsaW5rIGxvY2tGb3JQYXRofS5cbiAgICpcbiAgICogQHBhcmFtIHBhdGhPckZpbGUgLSBUaGUgcGF0aCBvciBmaWxlIG9mIHRoZSBub3RlIHRvIHVubG9jay5cbiAgICovXG4gIHB1YmxpYyB1bmxvY2tGb3JQYXRoKHBhdGhPckZpbGU6IFBhdGhPckZpbGUpOiB2b2lkIHtcbiAgICBnZXRNYW5hZ2VyKCkudW5sb2NrKHRoaXMuYXBwLCBwYXRoT3JGaWxlLCB0aGlzLnBsdWdpbklkKTtcbiAgfVxufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSBub3RlIGF0IHRoZSBnaXZlbiBwYXRoIGlzIGN1cnJlbnRseSBsb2NrZWQuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gKiBAcGFyYW0gcGF0aE9yRmlsZSAtIFRoZSBwYXRoIG9yIGZpbGUgb2YgdGhlIG5vdGUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIG5vdGUgaGFzIGF0IGxlYXN0IG9uZSBhY3RpdmUgbG9jaywgYGZhbHNlYCBvdGhlcndpc2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0VkaXRvckxvY2tlZEZvclBhdGgoYXBwOiBBcHAsIHBhdGhPckZpbGU6IFBhdGhPckZpbGUpOiBib29sZWFuIHtcbiAgcmV0dXJuIGdldE1hbmFnZXIoKS5pc0xvY2tlZChhcHAsIHBhdGhPckZpbGUpO1xufVxuXG4vKipcbiAqIExvY2tzIHRoZSBub3RlIGF0IHRoZSBnaXZlbiBwYXRoLCBtYWtpbmcgaXQgcmVhZC1vbmx5IGluIGV2ZXJ5IGN1cnJlbnQgYW5kIGZ1dHVyZVxuICoge0BsaW5rIE1hcmtkb3duVmlld30gdW50aWwgdGhlIGxvY2sgaXMgcmVsZWFzZWQsIGFuZCBzaG93aW5nIGEgbG9jayBpbmRpY2F0b3IgaW4gdGhlIHRhYiBoZWFkZXIsXG4gKiB2aWV3IGFjdGlvbiBiYXIsIGFuZCAod2hpbGUgYWN0aXZlKSB0aGUgc3RhdHVzIGJhci4gVGhlIGluZGljYXRvcnMnIHRvb2x0aXAgbGlzdHMgdGhlIHBsdWdpbnNcbiAqIHRoYXQgY3VycmVudGx5IGhvbGQgYSBsb2NrIG9uIHRoZSBub3RlLlxuICpcbiAqIFRoZSBsb2NrIGlzIHJlZmVyZW5jZS1jb3VudGVkIHBlciBjYWxsaW5nIHBsdWdpbjogZWFjaCBjYWxsIG11c3QgYmUgYmFsYW5jZWQgYnkgZXhhY3RseSBvbmVcbiAqIHJlbGVhc2UgKGVpdGhlciBkaXNwb3NpbmcgdGhlIHJldHVybmVkIHtAbGluayBEaXNwb3NhYmxlfSBcdTIwMTQgaWRlYWxseSB2aWEgYSBgdXNpbmdgIGRlY2xhcmF0aW9uIFx1MjAxNCBvclxuICogYSBtYXRjaGluZyB7QGxpbmsgdW5sb2NrRWRpdG9yRm9yUGF0aH0gY2FsbCkuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gKiBAcGFyYW0gcGF0aE9yRmlsZSAtIFRoZSBwYXRoIG9yIGZpbGUgb2YgdGhlIG5vdGUgdG8gbG9jay5cbiAqIEByZXR1cm5zIEEge0BsaW5rIERpc3Bvc2FibGV9IHRoYXQgcmVsZWFzZXMgdGhpcyBsb2NrIHdoZW4gZGlzcG9zZWQuIERpc3Bvc2luZyBtb3JlIHRoYW4gb25jZSBpcyBhIG5vLW9wLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbG9ja0VkaXRvckZvclBhdGgoYXBwOiBBcHAsIHBhdGhPckZpbGU6IFBhdGhPckZpbGUpOiBEaXNwb3NhYmxlIHtcbiAgcmV0dXJuIGdldE1hbmFnZXIoKS5sb2NrKGFwcCwgcGF0aE9yRmlsZSwgZ2V0UGx1Z2luSWQoKSk7XG59XG5cbi8qKlxuICogUmVsZWFzZXMgb25lIGxvY2sgcHJldmlvdXNseSBhY3F1aXJlZCBmb3IgdGhlIG5vdGUgYXQgdGhlIGdpdmVuIHBhdGggdmlhIHtAbGluayBsb2NrRWRpdG9yRm9yUGF0aH0uXG4gKlxuICogV2hlbiB0aGUgbGFzdCBsb2NrIGlzIHJlbGVhc2VkIHRoZSBub3RlIGJlY29tZXMgZnVsbHkgZWRpdGFibGUgYWdhaW4gYW5kIGl0cyBsb2NrIGluZGljYXRvcnMgYXJlXG4gKiByZW1vdmVkLiBDYWxsaW5nIHRoaXMgd2hlbiB0aGUgbm90ZSBpcyBub3QgbG9ja2VkIGlzIGEgbm8tb3AuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gKiBAcGFyYW0gcGF0aE9yRmlsZSAtIFRoZSBwYXRoIG9yIGZpbGUgb2YgdGhlIG5vdGUgdG8gdW5sb2NrLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdW5sb2NrRWRpdG9yRm9yUGF0aChhcHA6IEFwcCwgcGF0aE9yRmlsZTogUGF0aE9yRmlsZSk6IHZvaWQge1xuICBnZXRNYW5hZ2VyKCkudW5sb2NrKGFwcCwgcGF0aE9yRmlsZSwgZ2V0UGx1Z2luSWQoKSk7XG59XG5cbmZ1bmN0aW9uIGdldE1hbmFnZXIoKTogRWRpdG9yUGF0aExvY2tNYW5hZ2VyIHtcbiAgcmV0dXJuIGdldE9ic2lkaWFuRGV2VXRpbHNTdGF0ZTxFZGl0b3JQYXRoTG9ja01hbmFnZXI+KEVESVRPUl9MT0NLX1NUQVRFX0tFWSwgbmV3IEVkaXRvclBhdGhMb2NrTWFuYWdlcigpKS52YWx1ZTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7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
|
|
444
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL2VkaXRvci1sb2NrLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogTm90ZS1zY29wZWQsIHJlZmVyZW5jZS1jb3VudGVkIGVkaXRvciBsb2NraW5nLlxuICpcbiAqIFdoZXJlIHtAbGluayB0b2dnbGVFZGl0b3JSZWFkT25seX0gZnJvbSBgLi9lZGl0b3IudHNgIHRvZ2dsZXMgdGhlIHJlYWQtb25seSBzdGF0ZSBvZiBhIHNpbmdsZVxuICoge0BsaW5rIEVkaXRvcn0gaW5zdGFuY2UsIHRoZSBoZWxwZXJzIGhlcmUgbG9jayBhIG5vdGUgYnkgaXRzICoqcGF0aCoqOiB3aGlsZSBhIHBhdGggaXNcbiAqIGxvY2tlZCwgZXZlcnkgY3VycmVudCBhbmQgZnV0dXJlIHtAbGluayBNYXJrZG93blZpZXd9IG9mIHRoYXQgbm90ZSAoaW4gYW55IHdpbmRvdywgaW5jbHVkaW5nXG4gKiBwb3BvdXRzKSBpcyBtYWRlIHJlYWQtb25seSBhbmQgc2hvd3MgYSBsb2NrIGluZGljYXRvciBpbiBpdHMgdGFiIGhlYWRlciwgaXRzIHZpZXcgYWN0aW9uIGJhciwgYW5kXG4gKiB0aGUgc3RhdHVzIGJhciAod2hpbGUgdGhlIG5vdGUgaXMgYWN0aXZlKS4gTG9ja3MgYXJlIHJlZmVyZW5jZS1jb3VudGVkIHBlciBsb2NraW5nIHBsdWdpbiwgc29cbiAqIG5lc3RlZCBvciBjb25jdXJyZW50IG9wZXJhdGlvbnMgb24gdGhlIHNhbWUgbm90ZSBhcmUgc2FmZSBcdTIwMTQgdGhlIG5vdGUgaXMgdW5sb2NrZWQgb25seSB3aGVuIHRoZVxuICogbGFzdCBsb2NrIGlzIHJlbGVhc2VkIFx1MjAxNCBhbmQgdGhlIGluZGljYXRvcnMnIHRvb2x0aXAgbGlzdHMgd2hpY2ggcGx1Z2lucyBjdXJyZW50bHkgaG9sZCBhIGxvY2suXG4gKlxuICogVGhlIGFjcXVpcmVycyByZXR1cm4gYSB7QGxpbmsgRGlzcG9zYWJsZX0sIHNvIHRoZSBwcmVmZXJyZWQgY2FsbCBzdHlsZSBpcyBhIGB1c2luZ2AgZGVjbGFyYXRpb25cbiAqIHRoYXQgcmVsZWFzZXMgYXV0b21hdGljYWxseSBhdCBzY29wZSBleGl0IChpbmNsdWRpbmcgb24gdGhyb3cpOlxuICpcbiAqIGBgYHRzXG4gKiB1c2luZyBfbG9jayA9IGxvY2tFZGl0b3JGb3JQYXRoKGFwcCwgcGF0aCk7XG4gKiAvLyAuLi4gbG9uZy1ydW5uaW5nIHdvcmsgKHByb2Nlc3MsIHByb2Nlc3NGcm9udE1hdHRlciwgbWVyZ2Uvc3BsaXQpIC4uLlxuICogLy8gYXV0by11bmxvY2tlZCBhdCBzY29wZSBleGl0XG4gKiBgYGBcbiAqXG4gKiBUaGUgZXhwbGljaXQge0BsaW5rIHVubG9ja0VkaXRvckZvclBhdGh9IHBhaXIgcmVtYWlucyBhdmFpbGFibGUgZm9yIG5vbi1gdXNpbmdgIGNhbGwgc2l0ZXMuXG4gKi9cblxuaW1wb3J0IHR5cGUge1xuICBBcHAsXG4gIFRBYnN0cmFjdEZpbGVcbn0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgeyBWaWV3VHlwZSB9IGZyb20gJ0BvYnNpZGlhbi10eXBpbmdzL29ic2lkaWFuLXB1YmxpYy1sYXRlc3QvaW1wbGVtZW50YXRpb25zJztcbmltcG9ydCB7XG4gIE1hcmtkb3duVmlldyxcbiAgTWVudSxcbiAgc2V0SWNvbixcbiAgc2V0VG9vbHRpcCxcbiAgVEZpbGVcbn0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IFBhdGhPckZpbGUgfSBmcm9tICcuL2ZpbGUtc3lzdGVtLnRzJztcblxuaW1wb3J0IHsgY29udmVydEFzeW5jVG9TeW5jIH0gZnJvbSAnLi4vYXN5bmMudHMnO1xuaW1wb3J0IHtcbiAgQ2FsbGJhY2tEaXNwb3NhYmxlLFxuICBNdWx0aXBsZURpc3Bvc2VCZWhhdmlvclxufSBmcm9tICcuLi9kaXNwb3NhYmxlLnRzJztcbmltcG9ydCB7IG5vb3AgfSBmcm9tICcuLi9mdW5jdGlvbi50cyc7XG5pbXBvcnQgeyBhcHBlbmRDb2RlQmxvY2sgfSBmcm9tICcuLi9odG1sLWVsZW1lbnQudHMnO1xuaW1wb3J0IHsgZ2V0T2JzaWRpYW5EZXZVdGlsc1N0YXRlIH0gZnJvbSAnLi4vb2JzaWRpYW4tZGV2LXV0aWxzLXN0YXRlLnRzJztcbmltcG9ydCB7IGFzc2VydE5vbk51bGxhYmxlIH0gZnJvbSAnLi4vdHlwZS1ndWFyZHMudHMnO1xuaW1wb3J0IHsgQ29tcG9uZW50RXggfSBmcm9tICcuL2NvbXBvbmVudHMvY29tcG9uZW50LWV4LnRzJztcbmltcG9ydCB7IHRvZ2dsZUVkaXRvclJlYWRPbmx5IH0gZnJvbSAnLi9lZGl0b3IudHMnO1xuaW1wb3J0IHsgZ2V0UGF0aCB9IGZyb20gJy4vZmlsZS1zeXN0ZW0udHMnO1xuaW1wb3J0IHsgdCB9IGZyb20gJy4vaTE4bi9pMThuLnRzJztcbmltcG9ydCB7IGNvbmZpcm0gfSBmcm9tICcuL21vZGFscy9jb25maXJtLnRzJztcbmltcG9ydCB7IGdldFBsdWdpbklkIH0gZnJvbSAnLi9wbHVnaW4vcGx1Z2luLWlkLnRzJztcblxuY29uc3QgQkVFUF9EVVJBVElPTl9TRUNPTkRTID0gMC4wODtcbmNvbnN0IEJFRVBfRlJFUVVFTkNZX0haID0gNjYwO1xuY29uc3QgQkVFUF9HQUlOID0gMC4wNTtcbmNvbnN0IEJFRVBfVEhST1RUTEVfTUlMTElTRUNPTkRTID0gMjAwO1xuY29uc3QgRURJVE9SX0xPQ0tfU1RBVEVfS0VZID0gJ2VkaXRvckxvY2snO1xuY29uc3QgTE9DS19JQ09OX0lEID0gJ2xvY2snO1xuY29uc3QgTE9DS19JTkRJQ0FUT1JfQ1NTX0NMQVNTID0gJ29ic2lkaWFuLWRldi11dGlscy1sb2NrLWluZGljYXRvcic7XG5jb25zdCBMT0NLX0lORElDQVRPUl9GTEFTSF9DU1NfQ0xBU1MgPSAnb2JzaWRpYW4tZGV2LXV0aWxzLWxvY2staW5kaWNhdG9yLWZsYXNoJztcbmNvbnN0IFNUQVRVU19CQVJfSVRFTV9DU1NfQ0xBU1MgPSAnc3RhdHVzLWJhci1pdGVtJztcbmNvbnN0IFNUQVRVU19CQVJfQ1NTX1NFTEVDVE9SID0gJy5zdGF0dXMtYmFyJztcbmNvbnN0IFVOTE9DS19JQ09OX0lEID0gJ3VubG9jayc7XG5cbi8qKlxuICogT3B0aW9ucyBmb3Ige0BsaW5rIEVkaXRvckxvY2tDb21wb25lbnQubG9ja0ZvclBhdGh9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVkaXRvckxvY2tDb21wb25lbnRMb2NrRm9yUGF0aE9wdGlvbnMge1xuICAvKipcbiAgICogQW4gb3B0aW9uYWwge0BsaW5rIEFib3J0Q29udHJvbGxlcn0gYXNzb2NpYXRlZCB3aXRoIHRoZSBsb2NrLiBXaGVuIHRoZSBsb2NrIGluZGljYXRvciBpc1xuICAgKiByaWdodC1jbGlja2VkIGFuZCB0aGUgdXNlciBjb25maXJtcyBhbiB1bmxvY2sgKG9yIHtAbGluayByZXF1ZXN0RWRpdG9yVW5sb2NrRm9yUGF0aH0gaXMgY2FsbGVkIGZvclxuICAgKiB0aGUgcGF0aCksIHRoaXMgY29udHJvbGxlciBpcyBhYm9ydGVkIHNvIHRoZSBvcGVyYXRpb24gaG9sZGluZyB0aGUgbG9jayBjYW4gY2FuY2VsIGl0c2VsZiBhbmRcbiAgICogcmVsZWFzZSB0aGUgbG9jayBpbiBpdHMgb3duIGNsZWFudXAuXG4gICAqL1xuICByZWFkb25seSBhYm9ydENvbnRyb2xsZXI/OiBBYm9ydENvbnRyb2xsZXI7XG59XG5cbi8qKlxuICogQ29uc3RydWN0b3IgcGFyYW1ldGVycyBmb3Ige0BsaW5rIEVkaXRvckxvY2tFdmVudHNDb21wb25lbnR9LlxuICovXG5pbnRlcmZhY2UgRWRpdG9yTG9ja0V2ZW50c0NvbXBvbmVudENvbnN0cnVjdG9yUGFyYW1zIHtcbiAgcmVhZG9ubHkgYXBwOiBBcHA7XG4gIG9uQ2hhbmdlKHRoaXM6IHZvaWQpOiB2b2lkO1xuICBvbkZpbGVNZW51KHRoaXM6IHZvaWQsIG1lbnU6IE1lbnUsIGZpbGU6IFRBYnN0cmFjdEZpbGUpOiB2b2lkO1xufVxuXG5pbnRlcmZhY2UgTG9ja0luZGljYXRvcnMge1xuICByZWFkb25seSBhY3Rpb25JY29uRWw6IEhUTUxFbGVtZW50O1xuICBkaXNwb3NlVHlwZUxpc3RlbmVyKCk6IHZvaWQ7XG4gIHJlYWRvbmx5IHRhYkljb25FbDogSFRNTEVsZW1lbnQgfCBudWxsO1xufVxuXG4vKipcbiAqIFN1YnNjcmliZXMgdG8gdGhlIHdvcmtzcGFjZSBldmVudHMgdGhhdCBzaG91bGQgdHJpZ2dlciBhIGxvY2sgcmVjb25jaWxlIChhbmQgdGhlIGZpbGUgY29udGV4dC1tZW51XG4gKiBldmVudCB0aGF0IG9mZmVycyBhbiBcIlVubG9ja1wiIGl0ZW0pLiBJbXBsZW1lbnRlZCBhcyBhIHtAbGluayBDb21wb25lbnRFeH0gc28gdGhlIHN1YnNjcmlwdGlvbnMgYXJlXG4gKiByZWdpc3RlcmVkIG9uIGBsb2FkKClgIGFuZCBhdXRvbWF0aWNhbGx5IHJlbW92ZWQgb24gYHVubG9hZCgpYCwgaW5zdGVhZCBvZiBiZWluZyB0cmFja2VkIGJ5IGhhbmQuXG4gKi9cbmNsYXNzIEVkaXRvckxvY2tFdmVudHNDb21wb25lbnQgZXh0ZW5kcyBDb21wb25lbnRFeCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgYXBwOiBBcHA7XG4gIHByaXZhdGUgcmVhZG9ubHkgb25DaGFuZ2U6ICgpID0+IHZvaWQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgb25GaWxlTWVudTogKG1lbnU6IE1lbnUsIGZpbGU6IFRBYnN0cmFjdEZpbGUpID0+IHZvaWQ7XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKHBhcmFtczogRWRpdG9yTG9ja0V2ZW50c0NvbXBvbmVudENvbnN0cnVjdG9yUGFyYW1zKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmFwcCA9IHBhcmFtcy5hcHA7XG4gICAgdGhpcy5vbkNoYW5nZSA9IHBhcmFtcy5vbkNoYW5nZTtcbiAgICB0aGlzLm9uRmlsZU1lbnUgPSBwYXJhbXMub25GaWxlTWVudTtcbiAgfVxuXG4gIHB1YmxpYyBvdmVycmlkZSBvbmxvYWQoKTogdm9pZCB7XG4gICAgc3VwZXIub25sb2FkKCk7XG4gICAgdGhpcy5yZWdpc3RlckV2ZW50KHRoaXMuYXBwLndvcmtzcGFjZS5vbignYWN0aXZlLWxlYWYtY2hhbmdlJywgdGhpcy5vbkNoYW5nZSkpO1xuICAgIHRoaXMucmVnaXN0ZXJFdmVudCh0aGlzLmFwcC53b3Jrc3BhY2Uub24oJ2xheW91dC1jaGFuZ2UnLCB0aGlzLm9uQ2hhbmdlKSk7XG4gICAgLy8gU2FtZS1sZWFmIG5hdmlnYXRpb24gdG8gYW5vdGhlciBub3RlIGZpcmVzIG5vIGxlYWYvbGF5b3V0IGNoYW5nZTsgd2l0aG91dCB0aGlzIGl0IHN0YXlzIHJlYWQtb25seS5cbiAgICB0aGlzLnJlZ2lzdGVyRXZlbnQodGhpcy5hcHAud29ya3NwYWNlLm9uKCdmaWxlLW9wZW4nLCB0aGlzLm9uQ2hhbmdlKSk7XG4gICAgLy8gQWRkcyBhbiBcIlVubG9ja1wiIGl0ZW0gdG8gYSBsb2NrZWQgbm90ZSdzIHRhYi9maWxlIGNvbnRleHQgbWVudSAoYWxvbmdzaWRlIHRoZSBpbmRpY2F0b3IgbWVudXMpLlxuICAgIHRoaXMucmVnaXN0ZXJFdmVudCh0aGlzLmFwcC53b3Jrc3BhY2Uub24oJ2ZpbGUtbWVudScsIHRoaXMub25GaWxlTWVudSkpO1xuICB9XG59XG5cbi8qKlxuICogVHJhY2tzIHJlZmVyZW5jZS1jb3VudGVkLCBwYXRoLXNjb3BlZCBlZGl0b3IgbG9ja3MgYW5kIGtlZXBzIGV2ZXJ5IG9wZW4ge0BsaW5rIE1hcmtkb3duVmlld30gaW5cbiAqIHN5bmMgd2l0aCB0aGUgbG9ja2VkLXBhdGggc2V0LiBBIHNpbmdsZSBpbnN0YW5jZSBsaXZlcyBvbiB0aGUgc2hhcmVkIGBvYnNpZGlhbi1kZXYtdXRpbHNgIHN0YXRlLlxuICogRm9yIGVhY2ggbG9ja2VkIHBhdGggdGhlIGxvY2sgY291bnQgaXMgdHJhY2tlZCBwZXIgbG9ja2luZyBwbHVnaW4sIHNvIHRoZSBpbmRpY2F0b3JzIGNhbiByZXBvcnRcbiAqIHdoaWNoIHBsdWdpbnMgY3VycmVudGx5IGhvbGQgYSBsb2NrLlxuICovXG5jbGFzcyBFZGl0b3JQYXRoTG9ja01hbmFnZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IGFib3J0Q29udHJvbGxlcnNCeVBhdGggPSBuZXcgTWFwPHN0cmluZywgU2V0PEFib3J0Q29udHJvbGxlcj4+KCk7XG4gIHByaXZhdGUgYXVkaW9Db250ZXh0OiBBdWRpb0NvbnRleHQgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBldmVudHNDb21wb25lbnQ6IEVkaXRvckxvY2tFdmVudHNDb21wb25lbnQgfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgaW5kaWNhdG9yc0J5VmlldyA9IG5ldyBNYXA8TWFya2Rvd25WaWV3LCBMb2NrSW5kaWNhdG9ycz4oKTtcbiAgcHJpdmF0ZSBsYXN0QmVlcE1pbGxpc2Vjb25kcyA9IDA7XG4gIHByaXZhdGUgcmVhZG9ubHkgbG9ja0NvdW50QnlQbHVnaW5JZEJ5UGF0aCA9IG5ldyBNYXA8c3RyaW5nLCBNYXA8c3RyaW5nLCBudW1iZXI+PigpO1xuICBwcml2YXRlIHN0YXR1c0Jhckl0ZW1FbDogSFRNTEVsZW1lbnQgfCBudWxsID0gbnVsbDtcblxuICBwdWJsaWMgaXNMb2NrZWQoYXBwOiBBcHAsIHBhdGhPckZpbGU6IFBhdGhPckZpbGUpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc1BhdGhMb2NrZWQoZ2V0UGF0aChhcHAsIHBhdGhPckZpbGUpKTtcbiAgfVxuXG4gIHB1YmxpYyBsb2NrKGFwcDogQXBwLCBwYXRoT3JGaWxlOiBQYXRoT3JGaWxlLCBwbHVnaW5JZDogc3RyaW5nLCBhYm9ydENvbnRyb2xsZXI/OiBBYm9ydENvbnRyb2xsZXIpOiBEaXNwb3NhYmxlIHtcbiAgICBjb25zdCBwYXRoID0gZ2V0UGF0aChhcHAsIHBhdGhPckZpbGUpO1xuICAgIGxldCBsb2NrQ291bnRCeVBsdWdpbklkID0gdGhpcy5sb2NrQ291bnRCeVBsdWdpbklkQnlQYXRoLmdldChwYXRoKTtcbiAgICBpZiAoIWxvY2tDb3VudEJ5UGx1Z2luSWQpIHtcbiAgICAgIGxvY2tDb3VudEJ5UGx1Z2luSWQgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xuICAgICAgdGhpcy5sb2NrQ291bnRCeVBsdWdpbklkQnlQYXRoLnNldChwYXRoLCBsb2NrQ291bnRCeVBsdWdpbklkKTtcbiAgICB9XG4gICAgbG9ja0NvdW50QnlQbHVnaW5JZC5zZXQocGx1Z2luSWQsIChsb2NrQ291bnRCeVBsdWdpbklkLmdldChwbHVnaW5JZCkgPz8gMCkgKyAxKTtcbiAgICBpZiAoYWJvcnRDb250cm9sbGVyKSB7XG4gICAgICBsZXQgYWJvcnRDb250cm9sbGVycyA9IHRoaXMuYWJvcnRDb250cm9sbGVyc0J5UGF0aC5nZXQocGF0aCk7XG4gICAgICBpZiAoIWFib3J0Q29udHJvbGxlcnMpIHtcbiAgICAgICAgYWJvcnRDb250cm9sbGVycyA9IG5ldyBTZXQ8QWJvcnRDb250cm9sbGVyPigpO1xuICAgICAgICB0aGlzLmFib3J0Q29udHJvbGxlcnNCeVBhdGguc2V0KHBhdGgsIGFib3J0Q29udHJvbGxlcnMpO1xuICAgICAgfVxuICAgICAgYWJvcnRDb250cm9sbGVycy5hZGQoYWJvcnRDb250cm9sbGVyKTtcbiAgICB9XG4gICAgdGhpcy5lbnN1cmVTdWJzY3JpYmVkKGFwcCk7XG4gICAgdGhpcy5yZWNvbmNpbGUoYXBwKTtcblxuICAgIHJldHVybiBuZXcgQ2FsbGJhY2tEaXNwb3NhYmxlKHtcbiAgICAgIGNhbGxiYWNrOiAoKTogdm9pZCA9PiB7XG4gICAgICAgIGlmIChhYm9ydENvbnRyb2xsZXIpIHtcbiAgICAgICAgICBjb25zdCBhYm9ydENvbnRyb2xsZXJzID0gdGhpcy5hYm9ydENvbnRyb2xsZXJzQnlQYXRoLmdldChwYXRoKTtcbiAgICAgICAgICAvLyBUaGUgc2V0IHdhcyBjcmVhdGVkIHdoZW4gdGhpcyBsb2NrIGFkZGVkIGl0cyBjb250cm9sbGVyIGFuZCBpcyBvbmx5IHJlbW92ZWQgaGVyZS5cbiAgICAgICAgICAvLyBJdCBpcyB0aGVyZWZvcmUgYWx3YXlzIHByZXNlbnQgd2hpbGUgdGhpcyAoc2luZ2xlLXJ1bikgZGlzcG9zYWJsZSBjYWxsYmFjayBleGVjdXRlcy5cbiAgICAgICAgICBhc3NlcnROb25OdWxsYWJsZShhYm9ydENvbnRyb2xsZXJzKTtcbiAgICAgICAgICBhYm9ydENvbnRyb2xsZXJzLmRlbGV0ZShhYm9ydENvbnRyb2xsZXIpO1xuICAgICAgICAgIGlmIChhYm9ydENvbnRyb2xsZXJzLnNpemUgPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMuYWJvcnRDb250cm9sbGVyc0J5UGF0aC5kZWxldGUocGF0aCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMudW5sb2NrUGF0aChhcHAsIHBhdGgsIHBsdWdpbklkKTtcbiAgICAgIH0sXG4gICAgICBtdWx0aXBsZURpc3Bvc2VCZWhhdmlvcjogTXVsdGlwbGVEaXNwb3NlQmVoYXZpb3IuSWdub3JlXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQWJvcnRzIGV2ZXJ5IHtAbGluayBBYm9ydENvbnRyb2xsZXJ9IGN1cnJlbnRseSByZWdpc3RlcmVkIGZvciB0aGUgbm90ZSBhdCB0aGUgZ2l2ZW4gcGF0aCwgd2hpY2hcbiAgICogY2FuY2VscyB0aGUgb3BlcmF0aW9ucyBob2xkaW5nIHRoZSBsb2NrLiBFYWNoIG9wZXJhdGlvbiByZWxlYXNlcyBpdHMgb3duIGxvY2sgaW4gaXRzIGBmaW5hbGx5YFxuICAgKiB3aGVuIGl0IG9ic2VydmVzIHRoZSBhYm9ydCwgc28gdGhpcyBkb2VzIG5vdCB1bmxvY2sgdGhlIHBhdGggZGlyZWN0bHkuIEEgbm8tb3Agd2hlbiBubyBjb250cm9sbGVyXG4gICAqIGlzIHJlZ2lzdGVyZWQgZm9yIHRoZSBwYXRoLlxuICAgKlxuICAgKiBAcGFyYW0gYXBwIC0gVGhlIE9ic2lkaWFuIGFwcCBpbnN0YW5jZS5cbiAgICogQHBhcmFtIHBhdGhPckZpbGUgLSBUaGUgcGF0aCBvciBmaWxlIG9mIHRoZSBub3RlIHRvIHJlcXVlc3QgYW4gdW5sb2NrIGZvci5cbiAgICovXG4gIHB1YmxpYyByZXF1ZXN0VW5sb2NrKGFwcDogQXBwLCBwYXRoT3JGaWxlOiBQYXRoT3JGaWxlKTogdm9pZCB7XG4gICAgY29uc3QgYWJvcnRDb250cm9sbGVycyA9IHRoaXMuYWJvcnRDb250cm9sbGVyc0J5UGF0aC5nZXQoZ2V0UGF0aChhcHAsIHBhdGhPckZpbGUpKTtcbiAgICBpZiAoIWFib3J0Q29udHJvbGxlcnMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZm9yIChjb25zdCBjb250cm9sbGVyIG9mIGFib3J0Q29udHJvbGxlcnMpIHtcbiAgICAgIGNvbnRyb2xsZXIuYWJvcnQoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgdW5sb2NrKGFwcDogQXBwLCBwYXRoT3JGaWxlOiBQYXRoT3JGaWxlLCBwbHVnaW5JZDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy51bmxvY2tQYXRoKGFwcCwgZ2V0UGF0aChhcHAsIHBhdGhPckZpbGUpLCBwbHVnaW5JZCk7XG4gIH1cblxuICBwdWJsaWMgdW5sb2NrQWxsRm9yUGx1Z2luKGFwcDogQXBwLCBwbHVnaW5JZDogc3RyaW5nKTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBbcGF0aCwgbG9ja0NvdW50QnlQbHVnaW5JZF0gb2YgdGhpcy5sb2NrQ291bnRCeVBsdWdpbklkQnlQYXRoKSB7XG4gICAgICBpZiAobG9ja0NvdW50QnlQbHVnaW5JZC5kZWxldGUocGx1Z2luSWQpICYmIGxvY2tDb3VudEJ5UGx1Z2luSWQuc2l6ZSA9PT0gMCkge1xuICAgICAgICB0aGlzLmxvY2tDb3VudEJ5UGx1Z2luSWRCeVBhdGguZGVsZXRlKHBhdGgpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnJlY29uY2lsZUFuZENsZWFudXAoYXBwKTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkVW5sb2NrTWVudUl0ZW0oYXBwOiBBcHAsIG1lbnU6IE1lbnUsIHBhdGg6IHN0cmluZyk6IHZvaWQge1xuICAgIG1lbnUuYWRkSXRlbSgoaXRlbSkgPT4ge1xuICAgICAgaXRlbVxuICAgICAgICAuc2V0VGl0bGUodCgoJCkgPT4gJC5vYnNpZGlhbkRldlV0aWxzLmVkaXRvckxvY2sudW5sb2NrTWVudUl0ZW0pKVxuICAgICAgICAuc2V0SWNvbihVTkxPQ0tfSUNPTl9JRClcbiAgICAgICAgLm9uQ2xpY2soY29udmVydEFzeW5jVG9TeW5jKGFzeW5jICgpID0+IHtcbiAgICAgICAgICBjb25zdCBpc0NvbmZpcm1lZCA9IGF3YWl0IGNvbmZpcm0oe1xuICAgICAgICAgICAgYXBwLFxuICAgICAgICAgICAgbWVzc2FnZTogdGhpcy51bmxvY2tDb25maXJtTWVzc2FnZShhcHAsIHBhdGgpLFxuICAgICAgICAgICAgdGl0bGU6IHQoKCQpID0+ICQub2JzaWRpYW5EZXZVdGlscy5lZGl0b3JMb2NrLnVubG9ja0NvbmZpcm1UaXRsZSlcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBpZiAoaXNDb25maXJtZWQpIHtcbiAgICAgICAgICAgIHRoaXMucmVxdWVzdFVubG9jayhhcHAsIHBhdGgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSkpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBiZWVwKCk6IHZvaWQge1xuICAgIC8vIFRocm90dGxlIHNvIGEgYnVyc3Qgb2Yga2V5c3Ryb2tlcyBkb2VzIG5vdCBzdGFjayBvdmVybGFwcGluZyB0b25lcyBpbnRvIGEgYnV6ei5cbiAgICBjb25zdCBub3dNaWxsaXNlY29uZHMgPSBEYXRlLm5vdygpO1xuICAgIGlmIChub3dNaWxsaXNlY29uZHMgLSB0aGlzLmxhc3RCZWVwTWlsbGlzZWNvbmRzIDwgQkVFUF9USFJPVFRMRV9NSUxMSVNFQ09ORFMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5sYXN0QmVlcE1pbGxpc2Vjb25kcyA9IG5vd01pbGxpc2Vjb25kcztcblxuICAgIC8vIGBsaWIuZG9tYCB0eXBlcyBgQXVkaW9Db250ZXh0YCBhcyBhbHdheXMgcHJlc2VudCwgYnV0IGl0IGlzIGFic2VudCBpbiBzb21lIHJ1bnRpbWVzXG4gICAgLy8gKGUuZy4gdGhlIGpzZG9tIHRlc3QgZW52aXJvbm1lbnQpLCBzbyB0aGlzIGd1YXJkIGlzIHJlYWwsIG5vdCByZWR1bmRhbnQuXG4gICAgY29uc3QgQXVkaW9Db250ZXh0Q2xhc3MgPSB3aW5kb3cuQXVkaW9Db250ZXh0O1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5uZWNlc3NhcnktY29uZGl0aW9uIC0tIHNlZSB0aGUgY29tbWVudCBhYm92ZS5cbiAgICBpZiAoIUF1ZGlvQ29udGV4dENsYXNzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuYXVkaW9Db250ZXh0ID8/PSBuZXcgQXVkaW9Db250ZXh0Q2xhc3MoKTtcbiAgICBjb25zdCBhdWRpb0NvbnRleHQgPSB0aGlzLmF1ZGlvQ29udGV4dDtcbiAgICBjb25zdCBvc2NpbGxhdG9yID0gYXVkaW9Db250ZXh0LmNyZWF0ZU9zY2lsbGF0b3IoKTtcbiAgICBjb25zdCBnYWluTm9kZSA9IGF1ZGlvQ29udGV4dC5jcmVhdGVHYWluKCk7XG4gICAgb3NjaWxsYXRvci50eXBlID0gJ3NpbmUnO1xuICAgIG9zY2lsbGF0b3IuZnJlcXVlbmN5LnZhbHVlID0gQkVFUF9GUkVRVUVOQ1lfSFo7XG4gICAgZ2Fpbk5vZGUuZ2Fpbi52YWx1ZSA9IEJFRVBfR0FJTjtcbiAgICBvc2NpbGxhdG9yLmNvbm5lY3QoZ2Fpbk5vZGUpO1xuICAgIGdhaW5Ob2RlLmNvbm5lY3QoYXVkaW9Db250ZXh0LmRlc3RpbmF0aW9uKTtcbiAgICBvc2NpbGxhdG9yLnN0YXJ0KCk7XG4gICAgb3NjaWxsYXRvci5zdG9wKGF1ZGlvQ29udGV4dC5jdXJyZW50VGltZSArIEJFRVBfRFVSQVRJT05fU0VDT05EUyk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUluZGljYXRvcnMoYXBwOiBBcHAsIHZpZXc6IE1hcmtkb3duVmlldywgcGF0aDogc3RyaW5nLCB0b29sdGlwOiBzdHJpbmcpOiBMb2NrSW5kaWNhdG9ycyB7XG4gICAgY29uc3QgYWN0aW9uSWNvbkVsID0gdmlldy5hZGRBY3Rpb24oTE9DS19JQ09OX0lELCB0b29sdGlwLCBub29wKTtcbiAgICB0aGlzLnJlZ2lzdGVyVW5sb2NrTWVudShhcHAsIGFjdGlvbkljb25FbCwgKCkgPT4gcGF0aCk7XG5cbiAgICBsZXQgdGFiSWNvbkVsOiBIVE1MRWxlbWVudCB8IG51bGwgPSBudWxsO1xuICAgIGNvbnN0IHRhYlN0YXR1c0NvbnRhaW5lckVsID0gdmlldy5sZWFmLnRhYkhlYWRlclN0YXR1c0NvbnRhaW5lckVsO1xuICAgIGlmICh0YWJTdGF0dXNDb250YWluZXJFbCkge1xuICAgICAgdGFiSWNvbkVsID0gdGFiU3RhdHVzQ29udGFpbmVyRWwuY3JlYXRlU3Bhbih7IGNsczogTE9DS19JTkRJQ0FUT1JfQ1NTX0NMQVNTIH0pO1xuICAgICAgc2V0SWNvbih0YWJJY29uRWwsIExPQ0tfSUNPTl9JRCk7XG4gICAgICBzZXRUb29sdGlwKHRhYkljb25FbCwgdG9vbHRpcCk7XG4gICAgICB0aGlzLnJlZ2lzdGVyVW5sb2NrTWVudShhcHAsIHRhYkljb25FbCwgKCkgPT4gcGF0aCk7XG4gICAgfVxuXG4gICAgLy8gQSBsb2NrZWQgdmlldyBpcyByZWFkLW9ubHkgYnV0IHN0aWxsIGVkaXRhYmxlLWZvY3VzYWJsZSwgc28gYSBrZXlzdHJva2UgZmlyZXMgYGJlZm9yZWlucHV0YC5cbiAgICAvLyBPbiB0aGF0IHJlamVjdGVkIGF0dGVtcHQsIGZsYXNoIHRoZSBpbmRpY2F0b3JzIGFuZCBiZWVwIHNvIGl0J3MgY2xlYXIgdGhlIG5vdGUgaXMgbG9ja2VkLlxuICAgIC8vIFRoZSBsaXN0ZW5lciBpcyByZW1vdmVkIG9uIHVubG9jay5cbiAgICBjb25zdCBvblR5cGVBdHRlbXB0ID0gKCk6IHZvaWQgPT4ge1xuICAgICAgdGhpcy5mbGFzaEluZGljYXRvcnModmlldyk7XG4gICAgICB0aGlzLmJlZXAoKTtcbiAgICB9O1xuICAgIHZpZXcuY29udGVudEVsLmFkZEV2ZW50TGlzdGVuZXIoJ2JlZm9yZWlucHV0Jywgb25UeXBlQXR0ZW1wdCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgYWN0aW9uSWNvbkVsLFxuICAgICAgZGlzcG9zZVR5cGVMaXN0ZW5lcjogKCk6IHZvaWQgPT4ge1xuICAgICAgICB2aWV3LmNvbnRlbnRFbC5yZW1vdmVFdmVudExpc3RlbmVyKCdiZWZvcmVpbnB1dCcsIG9uVHlwZUF0dGVtcHQpO1xuICAgICAgfSxcbiAgICAgIHRhYkljb25FbFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGVuc3VyZVN1YnNjcmliZWQoYXBwOiBBcHApOiB2b2lkIHtcbiAgICBpZiAodGhpcy5ldmVudHNDb21wb25lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5ldmVudHNDb21wb25lbnQgPSBuZXcgRWRpdG9yTG9ja0V2ZW50c0NvbXBvbmVudCh7XG4gICAgICBhcHAsXG4gICAgICBvbkNoYW5nZTogKCk6IHZvaWQgPT4ge1xuICAgICAgICB0aGlzLnJlY29uY2lsZShhcHApO1xuICAgICAgfSxcbiAgICAgIG9uRmlsZU1lbnU6IChtZW51LCBmaWxlKTogdm9pZCA9PiB7XG4gICAgICAgIHRoaXMuaGFuZGxlRmlsZU1lbnUoYXBwLCBtZW51LCBmaWxlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLmV2ZW50c0NvbXBvbmVudC5sb2FkKCk7XG4gIH1cblxuICBwcml2YXRlIGZsYXNoRWxlbWVudChlbDogSFRNTEVsZW1lbnQpOiB2b2lkIHtcbiAgICBlbC5yZW1vdmVDbGFzcyhMT0NLX0lORElDQVRPUl9GTEFTSF9DU1NfQ0xBU1MpO1xuICAgIC8vIFJlYWQgbGF5b3V0IHRvIGZvcmNlIGEgcmVmbG93IHNvIHRoZSBmbGFzaCBhbmltYXRpb24gcmVzdGFydHMgb24gZXZlcnkgcmVqZWN0ZWQga2V5c3Ryb2tlLlxuICAgIGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGVsLmFkZENsYXNzKExPQ0tfSU5ESUNBVE9SX0ZMQVNIX0NTU19DTEFTUyk7XG4gIH1cblxuICBwcml2YXRlIGZsYXNoSW5kaWNhdG9ycyh2aWV3OiBNYXJrZG93blZpZXcpOiB2b2lkIHtcbiAgICBjb25zdCBpbmRpY2F0b3JzID0gdGhpcy5pbmRpY2F0b3JzQnlWaWV3LmdldCh2aWV3KTtcbiAgICBmb3IgKGNvbnN0IGVsIG9mIFtpbmRpY2F0b3JzPy5hY3Rpb25JY29uRWwsIGluZGljYXRvcnM/LnRhYkljb25FbCwgdGhpcy5zdGF0dXNCYXJJdGVtRWxdKSB7XG4gICAgICBpZiAoZWwpIHtcbiAgICAgICAgdGhpcy5mbGFzaEVsZW1lbnQoZWwpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlRmlsZU1lbnUoYXBwOiBBcHAsIG1lbnU6IE1lbnUsIGZpbGU6IFRBYnN0cmFjdEZpbGUpOiB2b2lkIHtcbiAgICBpZiAoIShmaWxlIGluc3RhbmNlb2YgVEZpbGUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghdGhpcy5pc1BhdGhMb2NrZWQoZmlsZS5wYXRoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmFkZFVubG9ja01lbnVJdGVtKGFwcCwgbWVudSwgZmlsZS5wYXRoKTtcbiAgfVxuXG4gIHByaXZhdGUgaXNQYXRoTG9ja2VkKHBhdGg6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAodGhpcy5sb2NrQ291bnRCeVBsdWdpbklkQnlQYXRoLmdldChwYXRoKT8uc2l6ZSA/PyAwKSA+IDA7XG4gIH1cblxuICBwcml2YXRlIGxvY2tpbmdQbHVnaW5OYW1lcyhhcHA6IEFwcCwgcGF0aDogc3RyaW5nKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IGxvY2tDb3VudEJ5UGx1Z2luSWQgPSB0aGlzLmxvY2tDb3VudEJ5UGx1Z2luSWRCeVBhdGguZ2V0KHBhdGgpO1xuICAgIC8vIGBsb2NraW5nUGx1Z2luTmFtZXNgIGlzIG9ubHkgZXZlciBjYWxsZWQgZm9yIGEgbG9ja2VkIHBhdGgsIHNvIHRoZSBwZXItcGx1Z2luIG1hcCBpcyBhbHdheXMgcHJlc2VudC5cbiAgICBhc3NlcnROb25OdWxsYWJsZShsb2NrQ291bnRCeVBsdWdpbklkKTtcbiAgICByZXR1cm4gQXJyYXkuZnJvbShsb2NrQ291bnRCeVBsdWdpbklkLmtleXMoKSkubWFwKChwbHVnaW5JZCkgPT4gYXBwLnBsdWdpbnMubWFuaWZlc3RzW3BsdWdpbklkXT8ubmFtZSA/PyBwbHVnaW5JZCk7XG4gIH1cblxuICBwcml2YXRlIGxvY2tUb29sdGlwKGFwcDogQXBwLCBwYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IGhlYWRlciA9IHQoKCQpID0+ICQub2JzaWRpYW5EZXZVdGlscy5lZGl0b3JMb2NrLmxvY2tlZEJ5VG9vbHRpcCk7XG4gICAgLy8gQSBydW50aW1lLWxlbmd0aCBsaXN0IG9mIHBsdWdpbiBuYW1lcywgb25lIHBlciBsaW5lIHVuZGVyIHRoZSBoZWFkZXIuXG4gICAgcmV0dXJuIFtoZWFkZXIsIC4uLnRoaXMubG9ja2luZ1BsdWdpbk5hbWVzKGFwcCwgcGF0aCldLmpvaW4oJ1xcbicpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWNvbmNpbGUoYXBwOiBBcHApOiB2b2lkIHtcbiAgICBjb25zdCB2aWV3c1RvTG9jayA9IG5ldyBTZXQ8TWFya2Rvd25WaWV3PigpO1xuICAgIGZvciAoY29uc3QgbGVhZiBvZiBhcHAud29ya3NwYWNlLmdldExlYXZlc09mVHlwZShWaWV3VHlwZS5NYXJrZG93bikpIHtcbiAgICAgIGNvbnN0IHZpZXcgPSBsZWFmLnZpZXc7XG4gICAgICBpZiAoISh2aWV3IGluc3RhbmNlb2YgTWFya2Rvd25WaWV3KSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcGF0aCA9IHZpZXcuZmlsZT8ucGF0aDtcbiAgICAgIGlmIChwYXRoID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmlzUGF0aExvY2tlZChwYXRoKSkge1xuICAgICAgICB2aWV3c1RvTG9jay5hZGQodmlldyk7XG4gICAgICAgIGNvbnN0IHRvb2x0aXAgPSB0aGlzLmxvY2tUb29sdGlwKGFwcCwgcGF0aCk7XG4gICAgICAgIC8vIFJlLWFwcGx5IHRoZSByZWFkLW9ubHkgdG9nZ2xlIG9uIGV2ZXJ5IHJlY29uY2lsZSwgbm90IG9ubHkgdGhlIGZpcnN0IHRpbWUgYSB2aWV3IGlzIHRyYWNrZWQuXG4gICAgICAgIC8vIFRoZSB0b2dnbGUgaXMgaWRlbXBvdGVudCwgc28gcmUtYXBwbHlpbmcgdG8gYW4gYWxyZWFkeS1sb2NrZWQgdmlldyBpcyBjaGVhcC5cbiAgICAgICAgLy8gQSB2aWV3IG9wZW5lZCBhZnRlciB0aGUgbG9jayBpcyByZWNvbmNpbGVkIHN5bmNocm9ub3VzbHksIGJlZm9yZSBpdHMgQ29kZU1pcnJvciBpcyByZWFkeS5cbiAgICAgICAgLy8gSXRzIGZpcnN0IHRvZ2dsZSBpcyB0aGVyZWZvcmUgYSBuby1vcDsgcmUtYXBwbHlpbmcgbWFrZXMgdGhlIGxvY2sgdGFrZSBob2xkIG9uY2UgaXQgc2V0dGxlcy5cbiAgICAgICAgdG9nZ2xlRWRpdG9yUmVhZE9ubHkodmlldy5lZGl0b3IsIHRydWUpO1xuICAgICAgICBjb25zdCBpbmRpY2F0b3JzID0gdGhpcy5pbmRpY2F0b3JzQnlWaWV3LmdldCh2aWV3KTtcbiAgICAgICAgaWYgKGluZGljYXRvcnMpIHtcbiAgICAgICAgICB0aGlzLnVwZGF0ZUluZGljYXRvclRvb2x0aXBzKGluZGljYXRvcnMsIHRvb2x0aXApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuaW5kaWNhdG9yc0J5Vmlldy5zZXQodmlldywgdGhpcy5jcmVhdGVJbmRpY2F0b3JzKGFwcCwgdmlldywgcGF0aCwgdG9vbHRpcCkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBbdmlldywgaW5kaWNhdG9yc10gb2YgdGhpcy5pbmRpY2F0b3JzQnlWaWV3KSB7XG4gICAgICBpZiAoIXZpZXdzVG9Mb2NrLmhhcyh2aWV3KSkge1xuICAgICAgICB0b2dnbGVFZGl0b3JSZWFkT25seSh2aWV3LmVkaXRvciwgZmFsc2UpO1xuICAgICAgICBpbmRpY2F0b3JzLmRpc3Bvc2VUeXBlTGlzdGVuZXIoKTtcbiAgICAgICAgaW5kaWNhdG9ycy5hY3Rpb25JY29uRWwucmVtb3ZlKCk7XG4gICAgICAgIGluZGljYXRvcnMudGFiSWNvbkVsPy5yZW1vdmUoKTtcbiAgICAgICAgdGhpcy5pbmRpY2F0b3JzQnlWaWV3LmRlbGV0ZSh2aWV3KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnVwZGF0ZVN0YXR1c0JhcihhcHApO1xuICB9XG5cbiAgcHJpdmF0ZSByZWNvbmNpbGVBbmRDbGVhbnVwKGFwcDogQXBwKTogdm9pZCB7XG4gICAgdGhpcy5yZWNvbmNpbGUoYXBwKTtcbiAgICBpZiAodGhpcy5sb2NrQ291bnRCeVBsdWdpbklkQnlQYXRoLnNpemUgPT09IDApIHtcbiAgICAgIHRoaXMuZXZlbnRzQ29tcG9uZW50Py51bmxvYWQoKTtcbiAgICAgIHRoaXMuZXZlbnRzQ29tcG9uZW50ID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVnaXN0ZXJVbmxvY2tNZW51KGFwcDogQXBwLCBlbDogSFRNTEVsZW1lbnQsIGdldENvbnRleHRQYXRoOiAoKSA9PiBzdHJpbmcgfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgICAvLyBBIHBsYWluIGxpc3RlbmVyIGRpZXMgd2l0aCB0aGUgZWxlbWVudCB3aGVuIGl0IGlzIGAucmVtb3ZlKClgZCBvbiB1bmxvY2ssIHNvIGl0IG5ldmVyIGxlYWtzLlxuICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoJ2NvbnRleHRtZW51JywgKGV2dCkgPT4ge1xuICAgICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBjb25zdCBwYXRoID0gZ2V0Q29udGV4dFBhdGgoKTtcbiAgICAgIGlmIChwYXRoID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgbWVudSA9IG5ldyBNZW51KCk7XG4gICAgICB0aGlzLmFkZFVubG9ja01lbnVJdGVtKGFwcCwgbWVudSwgcGF0aCk7XG4gICAgICBtZW51LnNob3dBdE1vdXNlRXZlbnQoZXZ0KTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgdW5sb2NrQ29uZmlybU1lc3NhZ2UoYXBwOiBBcHAsIHBhdGg6IHN0cmluZyk6IERvY3VtZW50RnJhZ21lbnQge1xuICAgIGNvbnN0IGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnQoKTtcbiAgICBmcmFnbWVudC5hcHBlbmRUZXh0KHQoKCQpID0+ICQub2JzaWRpYW5EZXZVdGlscy5lZGl0b3JMb2NrLnVubG9ja0NvbmZpcm1NZXNzYWdlKSk7XG4gICAgLy8gQSBydW50aW1lLWxlbmd0aCBsaXN0IG9mIHRoZSBwbHVnaW5zIGN1cnJlbnRseSBob2xkaW5nIGEgbG9jaywgZWFjaCBhcyBhIGNvZGUgYmxvY2sgb24gaXRzIG93biBsaW5lLlxuICAgIGZvciAoY29uc3QgbmFtZSBvZiB0aGlzLmxvY2tpbmdQbHVnaW5OYW1lcyhhcHAsIHBhdGgpKSB7XG4gICAgICBmcmFnbWVudC5jcmVhdGVFbCgnYnInKTtcbiAgICAgIGFwcGVuZENvZGVCbG9jayhmcmFnbWVudCwgbmFtZSk7XG4gICAgfVxuICAgIHJldHVybiBmcmFnbWVudDtcbiAgfVxuXG4gIHByaXZhdGUgdW5sb2NrUGF0aChhcHA6IEFwcCwgcGF0aDogc3RyaW5nLCBwbHVnaW5JZDogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgbG9ja0NvdW50QnlQbHVnaW5JZCA9IHRoaXMubG9ja0NvdW50QnlQbHVnaW5JZEJ5UGF0aC5nZXQocGF0aCk7XG4gICAgaWYgKCFsb2NrQ291bnRCeVBsdWdpbklkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY291bnQgPSBsb2NrQ291bnRCeVBsdWdpbklkLmdldChwbHVnaW5JZCkgPz8gMDtcbiAgICBpZiAoY291bnQgPD0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChjb3VudCA9PT0gMSkge1xuICAgICAgbG9ja0NvdW50QnlQbHVnaW5JZC5kZWxldGUocGx1Z2luSWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsb2NrQ291bnRCeVBsdWdpbklkLnNldChwbHVnaW5JZCwgY291bnQgLSAxKTtcbiAgICB9XG5cbiAgICBpZiAobG9ja0NvdW50QnlQbHVnaW5JZC5zaXplID09PSAwKSB7XG4gICAgICB0aGlzLmxvY2tDb3VudEJ5UGx1Z2luSWRCeVBhdGguZGVsZXRlKHBhdGgpO1xuICAgIH1cblxuICAgIHRoaXMucmVjb25jaWxlQW5kQ2xlYW51cChhcHApO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVJbmRpY2F0b3JUb29sdGlwcyhpbmRpY2F0b3JzOiBMb2NrSW5kaWNhdG9ycywgdG9vbHRpcDogc3RyaW5nKTogdm9pZCB7XG4gICAgc2V0VG9vbHRpcChpbmRpY2F0b3JzLmFjdGlvbkljb25FbCwgdG9vbHRpcCk7XG4gICAgaWYgKGluZGljYXRvcnMudGFiSWNvbkVsKSB7XG4gICAgICBzZXRUb29sdGlwKGluZGljYXRvcnMudGFiSWNvbkVsLCB0b29sdGlwKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVN0YXR1c0JhcihhcHA6IEFwcCk6IHZvaWQge1xuICAgIGNvbnN0IGFjdGl2ZVZpZXcgPSBhcHAud29ya3NwYWNlLmdldEFjdGl2ZVZpZXdPZlR5cGUoTWFya2Rvd25WaWV3KTtcbiAgICBjb25zdCBhY3RpdmVQYXRoID0gYWN0aXZlVmlldz8uZmlsZT8ucGF0aDtcbiAgICBjb25zdCBpc0FjdGl2ZUxvY2tlZCA9IGFjdGl2ZVBhdGggIT09IHVuZGVmaW5lZCAmJiB0aGlzLmlzUGF0aExvY2tlZChhY3RpdmVQYXRoKTtcblxuICAgIGlmICghaXNBY3RpdmVMb2NrZWQgfHwgIWFjdGl2ZVZpZXcpIHtcbiAgICAgIHRoaXMuc3RhdHVzQmFySXRlbUVsPy5yZW1vdmUoKTtcbiAgICAgIHRoaXMuc3RhdHVzQmFySXRlbUVsID0gbnVsbDtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuc3RhdHVzQmFySXRlbUVsKSB7XG4gICAgICBjb25zdCBzdGF0dXNCYXJFbCA9IGFjdGl2ZVZpZXcuY29udGFpbmVyRWwub3duZXJEb2N1bWVudC5ib2R5LnF1ZXJ5U2VsZWN0b3I8SFRNTEVsZW1lbnQ+KFNUQVRVU19CQVJfQ1NTX1NFTEVDVE9SKTtcbiAgICAgIGlmICghc3RhdHVzQmFyRWwpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5zdGF0dXNCYXJJdGVtRWwgPSBzdGF0dXNCYXJFbC5jcmVhdGVEaXYoeyBjbHM6IFtTVEFUVVNfQkFSX0lURU1fQ1NTX0NMQVNTLCBMT0NLX0lORElDQVRPUl9DU1NfQ0xBU1NdIH0pO1xuICAgICAgc2V0SWNvbih0aGlzLnN0YXR1c0Jhckl0ZW1FbCwgTE9DS19JQ09OX0lEKTtcbiAgICAgIC8vIFRoZSBzaW5nbGUgc3RhdHVzLWJhciBpdGVtIGlzIHJldXNlZCBhY3Jvc3MgYWN0aXZlLW5vdGUgc3dpdGNoZXMuXG4gICAgICAvLyBJdCBtdXN0IHJlc29sdmUgdGhlIGN1cnJlbnRseSBhY3RpdmUgbm90ZSdzIHBhdGggYXQgY2xpY2sgdGltZSByYXRoZXIgdGhhbiBjYXB0dXJpbmcgb25lIHBhdGguXG4gICAgICB0aGlzLnJlZ2lzdGVyVW5sb2NrTWVudShhcHAsIHRoaXMuc3RhdHVzQmFySXRlbUVsLCAoKSA9PiBhcHAud29ya3NwYWNlLmdldEFjdGl2ZVZpZXdPZlR5cGUoTWFya2Rvd25WaWV3KT8uZmlsZT8ucGF0aCk7XG4gICAgfVxuXG4gICAgc2V0VG9vbHRpcCh0aGlzLnN0YXR1c0Jhckl0ZW1FbCwgdGhpcy5sb2NrVG9vbHRpcChhcHAsIGFjdGl2ZVBhdGgpKTtcbiAgfVxufVxuXG4vKipcbiAqIEEgcGVyLXBsdWdpbiBoYW5kbGUgZm9yIG5vdGUtc2NvcGVkIGVkaXRvciBsb2NraW5nLiBBZGQgaXQgYXMgYSBjaGlsZCBvZiB5b3VyIHBsdWdpblxuICogKGB0aGlzLmFkZENoaWxkKG5ldyBFZGl0b3JMb2NrQ29tcG9uZW50KHRoaXMuYXBwKSlgKSBzbyB0aGF0IGFueSBsb2NrcyBpdCBzdGlsbCBob2xkcyBhcmUgcmVsZWFzZWRcbiAqIGF1dG9tYXRpY2FsbHkgd2hlbiB0aGUgcGx1Z2luIHVubG9hZHMgXHUyMDE0IGEgbm90ZSBjYW4gbmV2ZXIgYmUgbGVmdCBzdHVjayByZWFkLW9ubHkgYmVjYXVzZSB0aGVcbiAqIHBsdWdpbiB0aGF0IGxvY2tlZCBpdCB3YXMgZGlzYWJsZWQgb3IgcmVsb2FkZWQgbWlkLW9wZXJhdGlvbi5cbiAqXG4gKiBMb2NrcyBhcmUgcmVmZXJlbmNlLWNvdW50ZWQgYW5kIGF0dHJpYnV0ZWQgdG8gdGhpcyBwbHVnaW4sIHNvIHRoZSBsb2NrIGluZGljYXRvcnMnIHRvb2x0aXAgbmFtZXNcbiAqIGl0IGFtb25nIHRoZSBwbHVnaW5zIGN1cnJlbnRseSBob2xkaW5nIGEgbG9jay5cbiAqL1xuZXhwb3J0IGNsYXNzIEVkaXRvckxvY2tDb21wb25lbnQgZXh0ZW5kcyBDb21wb25lbnRFeCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgYXBwOiBBcHA7XG4gIHByaXZhdGUgcmVhZG9ubHkgcGx1Z2luSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogQ3JlYXRlcyBhbiBlZGl0b3ItbG9jayBoYW5kbGUgb3duZWQgYnkgYSBwbHVnaW4uXG4gICAqXG4gICAqIEBwYXJhbSBhcHAgLSBUaGUgT2JzaWRpYW4gYXBwIGluc3RhbmNlLlxuICAgKiBAcGFyYW0gcGx1Z2luSWQgLSBUaGUgaWQgb2YgdGhlIG93bmluZyBwbHVnaW4uIERlZmF1bHRzIHRvIHRoZSBjdXJyZW50IHBsdWdpbiBjb250ZXh0J3MgaWQ7IHBhc3NcbiAgICogaXQgZXhwbGljaXRseSAoZS5nLiBmcm9tIGEgcGx1Z2luJ3MgYG1hbmlmZXN0LmlkYCkgd2hlbiBjb25zdHJ1Y3RpbmcgYmVmb3JlIHRoZSBwbHVnaW4gY29udGV4dCBpc1xuICAgKiBpbml0aWFsaXplZCwgc3VjaCBhcyBpbnNpZGUgYFBsdWdpbkJhc2Uub25sb2FkYC5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihhcHA6IEFwcCwgcGx1Z2luSWQ6IHN0cmluZyA9IGdldFBsdWdpbklkKCkpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuYXBwID0gYXBwO1xuICAgIHRoaXMucGx1Z2luSWQgPSBwbHVnaW5JZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3Mgd2hldGhlciB0aGUgbm90ZSBhdCB0aGUgZ2l2ZW4gcGF0aCBpcyBjdXJyZW50bHkgbG9ja2VkIGJ5IGFueSBwbHVnaW4uXG4gICAqXG4gICAqIEBwYXJhbSBwYXRoT3JGaWxlIC0gVGhlIHBhdGggb3IgZmlsZSBvZiB0aGUgbm90ZSB0byBjaGVjay5cbiAgICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBub3RlIGhhcyBhdCBsZWFzdCBvbmUgYWN0aXZlIGxvY2ssIGBmYWxzZWAgb3RoZXJ3aXNlLlxuICAgKi9cbiAgcHVibGljIGlzTG9ja2VkRm9yUGF0aChwYXRoT3JGaWxlOiBQYXRoT3JGaWxlKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGdldE1hbmFnZXIoKS5pc0xvY2tlZCh0aGlzLmFwcCwgcGF0aE9yRmlsZSk7XG4gIH1cblxuICAvKipcbiAgICogTG9ja3MgdGhlIG5vdGUgYXQgdGhlIGdpdmVuIHBhdGggb24gYmVoYWxmIG9mIHRoaXMgcGx1Z2luLCBtYWtpbmcgaXQgcmVhZC1vbmx5IGluIGV2ZXJ5IGN1cnJlbnRcbiAgICogYW5kIGZ1dHVyZSB7QGxpbmsgTWFya2Rvd25WaWV3fSB1bnRpbCB0aGUgbG9jayBpcyByZWxlYXNlZC4gUmVmZXJlbmNlLWNvdW50ZWQ6IGJhbGFuY2UgZWFjaCBjYWxsXG4gICAqIHdpdGggYSBkaXNwb3NlIG9mIHRoZSByZXR1cm5lZCB7QGxpbmsgRGlzcG9zYWJsZX0gKGlkZWFsbHkgdmlhIGB1c2luZ2ApIG9yIHtAbGluayB1bmxvY2tGb3JQYXRofS5cbiAgICpcbiAgICogQHBhcmFtIHBhdGhPckZpbGUgLSBUaGUgcGF0aCBvciBmaWxlIG9mIHRoZSBub3RlIHRvIGxvY2suXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9uYWwgbG9ja2luZyBvcHRpb25zLiBQYXNzIGFuXG4gICAqIHtAbGluayBFZGl0b3JMb2NrQ29tcG9uZW50TG9ja0ZvclBhdGhPcHRpb25zLmFib3J0Q29udHJvbGxlcn0gdG8gbWFrZSB0aGUgbG9jayBjYW5jZWxhYmxlIHZpYSB0aGVcbiAgICogaW5kaWNhdG9yJ3MgcmlnaHQtY2xpY2sgXCJ1bmxvY2tcIiBtZW51IG9yIHtAbGluayByZXF1ZXN0RWRpdG9yVW5sb2NrRm9yUGF0aH0uXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIERpc3Bvc2FibGV9IHRoYXQgcmVsZWFzZXMgdGhpcyBsb2NrIHdoZW4gZGlzcG9zZWQuIERpc3Bvc2luZyBtb3JlIHRoYW4gb25jZSBpcyBhIG5vLW9wLlxuICAgKi9cbiAgcHVibGljIGxvY2tGb3JQYXRoKHBhdGhPckZpbGU6IFBhdGhPckZpbGUsIG9wdGlvbnM/OiBFZGl0b3JMb2NrQ29tcG9uZW50TG9ja0ZvclBhdGhPcHRpb25zKTogRGlzcG9zYWJsZSB7XG4gICAgcmV0dXJuIGdldE1hbmFnZXIoKS5sb2NrKHRoaXMuYXBwLCBwYXRoT3JGaWxlLCB0aGlzLnBsdWdpbklkLCBvcHRpb25zPy5hYm9ydENvbnRyb2xsZXIpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbGVhc2VzIGV2ZXJ5IGxvY2sgc3RpbGwgaGVsZCBieSB0aGlzIHBsdWdpbiB3aGVuIHRoZSBjb21wb25lbnQgKGFuZCB0aHVzIHRoZSBwbHVnaW4pIHVubG9hZHMsXG4gICAqIHNvIG5vIG5vdGUgaXMgbGVmdCBzdHVjayByZWFkLW9ubHkgYnkgYW4gb3BlcmF0aW9uIHRoYXQgbmV2ZXIgY29tcGxldGVkLlxuICAgKi9cbiAgcHVibGljIG92ZXJyaWRlIG9udW5sb2FkKCk6IHZvaWQge1xuICAgIGdldE1hbmFnZXIoKS51bmxvY2tBbGxGb3JQbHVnaW4odGhpcy5hcHAsIHRoaXMucGx1Z2luSWQpO1xuICAgIHN1cGVyLm9udW5sb2FkKCk7XG4gIH1cblxuICAvKipcbiAgICogUmVsZWFzZXMgb25lIGxvY2sgcHJldmlvdXNseSBhY3F1aXJlZCBmb3IgdGhlIG5vdGUgYXQgdGhlIGdpdmVuIHBhdGggdmlhIHtAbGluayBsb2NrRm9yUGF0aH0uXG4gICAqXG4gICAqIEBwYXJhbSBwYXRoT3JGaWxlIC0gVGhlIHBhdGggb3IgZmlsZSBvZiB0aGUgbm90ZSB0byB1bmxvY2suXG4gICAqL1xuICBwdWJsaWMgdW5sb2NrRm9yUGF0aChwYXRoT3JGaWxlOiBQYXRoT3JGaWxlKTogdm9pZCB7XG4gICAgZ2V0TWFuYWdlcigpLnVubG9jayh0aGlzLmFwcCwgcGF0aE9yRmlsZSwgdGhpcy5wbHVnaW5JZCk7XG4gIH1cbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgbm90ZSBhdCB0aGUgZ2l2ZW4gcGF0aCBpcyBjdXJyZW50bHkgbG9ja2VkLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgT2JzaWRpYW4gYXBwIGluc3RhbmNlLlxuICogQHBhcmFtIHBhdGhPckZpbGUgLSBUaGUgcGF0aCBvciBmaWxlIG9mIHRoZSBub3RlIHRvIGNoZWNrLlxuICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBub3RlIGhhcyBhdCBsZWFzdCBvbmUgYWN0aXZlIGxvY2ssIGBmYWxzZWAgb3RoZXJ3aXNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNFZGl0b3JMb2NrZWRGb3JQYXRoKGFwcDogQXBwLCBwYXRoT3JGaWxlOiBQYXRoT3JGaWxlKTogYm9vbGVhbiB7XG4gIHJldHVybiBnZXRNYW5hZ2VyKCkuaXNMb2NrZWQoYXBwLCBwYXRoT3JGaWxlKTtcbn1cblxuLyoqXG4gKiBMb2NrcyB0aGUgbm90ZSBhdCB0aGUgZ2l2ZW4gcGF0aCwgbWFraW5nIGl0IHJlYWQtb25seSBpbiBldmVyeSBjdXJyZW50IGFuZCBmdXR1cmVcbiAqIHtAbGluayBNYXJrZG93blZpZXd9IHVudGlsIHRoZSBsb2NrIGlzIHJlbGVhc2VkLCBhbmQgc2hvd2luZyBhIGxvY2sgaW5kaWNhdG9yIGluIHRoZSB0YWIgaGVhZGVyLFxuICogdmlldyBhY3Rpb24gYmFyLCBhbmQgKHdoaWxlIGFjdGl2ZSkgdGhlIHN0YXR1cyBiYXIuIFRoZSBpbmRpY2F0b3JzJyB0b29sdGlwIGxpc3RzIHRoZSBwbHVnaW5zXG4gKiB0aGF0IGN1cnJlbnRseSBob2xkIGEgbG9jayBvbiB0aGUgbm90ZS5cbiAqXG4gKiBUaGUgbG9jayBpcyByZWZlcmVuY2UtY291bnRlZCBwZXIgY2FsbGluZyBwbHVnaW46IGVhY2ggY2FsbCBtdXN0IGJlIGJhbGFuY2VkIGJ5IGV4YWN0bHkgb25lXG4gKiByZWxlYXNlIChlaXRoZXIgZGlzcG9zaW5nIHRoZSByZXR1cm5lZCB7QGxpbmsgRGlzcG9zYWJsZX0gXHUyMDE0IGlkZWFsbHkgdmlhIGEgYHVzaW5nYCBkZWNsYXJhdGlvbiBcdTIwMTQgb3JcbiAqIGEgbWF0Y2hpbmcge0BsaW5rIHVubG9ja0VkaXRvckZvclBhdGh9IGNhbGwpLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgT2JzaWRpYW4gYXBwIGluc3RhbmNlLlxuICogQHBhcmFtIHBhdGhPckZpbGUgLSBUaGUgcGF0aCBvciBmaWxlIG9mIHRoZSBub3RlIHRvIGxvY2suXG4gKiBAcmV0dXJucyBBIHtAbGluayBEaXNwb3NhYmxlfSB0aGF0IHJlbGVhc2VzIHRoaXMgbG9jayB3aGVuIGRpc3Bvc2VkLiBEaXNwb3NpbmcgbW9yZSB0aGFuIG9uY2UgaXMgYSBuby1vcC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvY2tFZGl0b3JGb3JQYXRoKGFwcDogQXBwLCBwYXRoT3JGaWxlOiBQYXRoT3JGaWxlKTogRGlzcG9zYWJsZSB7XG4gIHJldHVybiBnZXRNYW5hZ2VyKCkubG9jayhhcHAsIHBhdGhPckZpbGUsIGdldFBsdWdpbklkKCkpO1xufVxuXG4vKipcbiAqIFJlcXVlc3RzIGFuIHVubG9jayBvZiB0aGUgbm90ZSBhdCB0aGUgZ2l2ZW4gcGF0aCBieSBhYm9ydGluZyBldmVyeSB7QGxpbmsgQWJvcnRDb250cm9sbGVyfSB0aGF0IHdhc1xuICogYXNzb2NpYXRlZCB3aXRoIGEgbG9jayBvbiBpdCAodmlhIHtAbGluayBFZGl0b3JMb2NrQ29tcG9uZW50LmxvY2tGb3JQYXRofSdzXG4gKiB7QGxpbmsgRWRpdG9yTG9ja0NvbXBvbmVudExvY2tGb3JQYXRoT3B0aW9ucy5hYm9ydENvbnRyb2xsZXJ9KS4gVGhlIG9wZXJhdGlvbnMgaG9sZGluZyB0aGUgbG9ja1xuICogb2JzZXJ2ZSB0aGUgYWJvcnQgYW5kIHJlbGVhc2UgdGhlaXIgb3duIGxvY2tzLiBBIG5vLW9wIHdoZW4gbm8gYWJvcnRhYmxlIGxvY2sgaXMgcmVnaXN0ZXJlZCBmb3IgdGhlXG4gKiBwYXRoLlxuICpcbiAqIFRoaXMgbGV0cyBhIGNvbnN1bWluZyBwbHVnaW4gd2lyZSBpdHMgb3duIFwidW5sb2NrIGFjdGl2ZSBub3RlXCIgY29tbWFuZCB3aXRob3V0IHJlYWNoaW5nIGludG8gdGhlXG4gKiBsb2NrIG1hbmFnZXIgZGlyZWN0bHkuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gKiBAcGFyYW0gcGF0aE9yRmlsZSAtIFRoZSBwYXRoIG9yIGZpbGUgb2YgdGhlIG5vdGUgdG8gcmVxdWVzdCBhbiB1bmxvY2sgZm9yLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVxdWVzdEVkaXRvclVubG9ja0ZvclBhdGgoYXBwOiBBcHAsIHBhdGhPckZpbGU6IFBhdGhPckZpbGUpOiB2b2lkIHtcbiAgZ2V0TWFuYWdlcigpLnJlcXVlc3RVbmxvY2soYXBwLCBwYXRoT3JGaWxlKTtcbn1cblxuLyoqXG4gKiBSZWxlYXNlcyBvbmUgbG9jayBwcmV2aW91c2x5IGFjcXVpcmVkIGZvciB0aGUgbm90ZSBhdCB0aGUgZ2l2ZW4gcGF0aCB2aWEge0BsaW5rIGxvY2tFZGl0b3JGb3JQYXRofS5cbiAqXG4gKiBXaGVuIHRoZSBsYXN0IGxvY2sgaXMgcmVsZWFzZWQgdGhlIG5vdGUgYmVjb21lcyBmdWxseSBlZGl0YWJsZSBhZ2FpbiBhbmQgaXRzIGxvY2sgaW5kaWNhdG9ycyBhcmVcbiAqIHJlbW92ZWQuIENhbGxpbmcgdGhpcyB3aGVuIHRoZSBub3RlIGlzIG5vdCBsb2NrZWQgaXMgYSBuby1vcC5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIE9ic2lkaWFuIGFwcCBpbnN0YW5jZS5cbiAqIEBwYXJhbSBwYXRoT3JGaWxlIC0gVGhlIHBhdGggb3IgZmlsZSBvZiB0aGUgbm90ZSB0byB1bmxvY2suXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1bmxvY2tFZGl0b3JGb3JQYXRoKGFwcDogQXBwLCBwYXRoT3JGaWxlOiBQYXRoT3JGaWxlKTogdm9pZCB7XG4gIGdldE1hbmFnZXIoKS51bmxvY2soYXBwLCBwYXRoT3JGaWxlLCBnZXRQbHVnaW5JZCgpKTtcbn1cblxuZnVuY3Rpb24gZ2V0TWFuYWdlcigpOiBFZGl0b3JQYXRoTG9ja01hbmFnZXIge1xuICByZXR1cm4gZ2V0T2JzaWRpYW5EZXZVdGlsc1N0YXRlPEVkaXRvclBhdGhMb2NrTWFuYWdlcj4oRURJVE9SX0xPQ0tfU1RBVEVfS0VZLCBuZXcgRWRpdG9yUGF0aExvY2tNYW5hZ2VyKCkpLnZhbHVlO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUE4QkEsU0FBUyxnQkFBZ0I7QUFDekI7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFJUCxTQUFTLDBCQUEwQjtBQUNuQztBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQLFNBQVMsWUFBWTtBQUNyQixTQUFTLHVCQUF1QjtBQUNoQyxTQUFTLGdDQUFnQztBQUN6QyxTQUFTLHlCQUF5QjtBQUNsQyxTQUFTLG1CQUFtQjtBQUM1QixTQUFT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
|
|
@@ -26,7 +26,7 @@ export interface AddAliasParams {
|
|
|
26
26
|
/**
|
|
27
27
|
* The editor-lock component used to lock the note while it is being modified.
|
|
28
28
|
*/
|
|
29
|
-
readonly editorLockComponent: EditorLockComponent |
|
|
29
|
+
readonly editorLockComponent: EditorLockComponent | null;
|
|
30
30
|
/**
|
|
31
31
|
* The path or TFile object representing the note.
|
|
32
32
|
*/
|
|
@@ -47,7 +47,7 @@ export interface DeleteAliasParams {
|
|
|
47
47
|
/**
|
|
48
48
|
* The editor-lock component used to lock the note while it is being modified.
|
|
49
49
|
*/
|
|
50
|
-
readonly editorLockComponent: EditorLockComponent |
|
|
50
|
+
readonly editorLockComponent: EditorLockComponent | null;
|
|
51
51
|
/**
|
|
52
52
|
* The path or TFile object representing the note.
|
|
53
53
|
*/
|
|
@@ -127,4 +127,4 @@ export {
|
|
|
127
127
|
deleteAlias,
|
|
128
128
|
processFrontmatter
|
|
129
129
|
};
|
|
130
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL2ZpbGUtbWFuYWdlci50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIENvbnRhaW5zIHV0aWxpdHkgZnVuY3Rpb25zIGZvciBtYW5hZ2luZyBmaWxlcyBpbiBPYnNpZGlhbi5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEFwcCB9IGZyb20gJ29ic2lkaWFuJztcbmltcG9ydCB0eXBlIHsgUHJvbWlzYWJsZSB9IGZyb20gJ3R5cGUtZmVzdCc7XG5cbmltcG9ydCB0eXBlIHsgTWF5YmVSZXR1cm4gfSBmcm9tICcuLi90eXBlLnRzJztcbmltcG9ydCB0eXBlIHsgRWRpdG9yTG9ja0NvbXBvbmVudCB9IGZyb20gJy4vZWRpdG9yLWxvY2sudHMnO1xuaW1wb3J0IHR5cGUgeyBQYXRoT3JGaWxlIH0gZnJvbSAnLi9maWxlLXN5c3RlbS50cyc7XG5pbXBvcnQgdHlwZSB7IENvbWJpbmVkRnJvbnRtYXR0ZXIgfSBmcm9tICcuL2Zyb250bWF0dGVyLnRzJztcbmltcG9ydCB0eXBlIHtcbiAgUHJvY2Vzc09wdGlvbnMsXG4gIFByb2Nlc3NQYXJhbXNcbn0gZnJvbSAnLi92YXVsdC50cyc7XG5cbmltcG9ydCB7XG4gIGRlZXBFcXVhbCxcbiAgbm9ybWFsaXplT3B0aW9uYWxQcm9wZXJ0aWVzXG59IGZyb20gJy4uL29iamVjdC11dGlscy50cyc7XG5pbXBvcnQge1xuICBnZXRGaWxlLFxuICBnZXRQYXRoLFxuICBpc01hcmtkb3duRmlsZVxufSBmcm9tICcuL2ZpbGUtc3lzdGVtLnRzJztcbmltcG9ydCB7XG4gIHBhcnNlRnJvbnRtYXR0ZXIsXG4gIHNldEZyb250bWF0dGVyXG59IGZyb20gJy4vZnJvbnRtYXR0ZXIudHMnO1xuaW1wb3J0IHsgcHJvY2VzcyB9IGZyb20gJy4vdmF1bHQudHMnO1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBhZGRBbGlhc30uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQWRkQWxpYXNQYXJhbXMge1xuICAvKipcbiAgICogVGhlIGFsaWFzIHRvIGFkZC5cbiAgICovXG4gIHJlYWRvbmx5IGFsaWFzPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgT2JzaWRpYW4gYXBwIGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBwOiBBcHA7XG5cbiAgLyoqXG4gICAqIFRoZSBlZGl0b3ItbG9jayBjb21wb25lbnQgdXNlZCB0byBsb2NrIHRoZSBub3RlIHdoaWxlIGl0IGlzIGJlaW5nIG1vZGlmaWVkLlxuICAgKi9cbiAgcmVhZG9ubHkgZWRpdG9yTG9ja0NvbXBvbmVudDogRWRpdG9yTG9ja0NvbXBvbmVudCB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogVGhlIHBhdGggb3IgVEZpbGUgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgbm90ZS5cbiAgICovXG4gIHJlYWRvbmx5IHBhdGhPckZpbGU6IFBhdGhPckZpbGU7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGRlbGV0ZUFsaWFzfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEZWxldGVBbGlhc1BhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgYWxpYXMgdG8gZGVsZXRlLlxuICAgKi9cbiAgcmVhZG9ubHkgYWxpYXM/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gICAqL1xuICByZWFkb25seSBhcHA6IEFwcDtcblxuICAvKipcbiAgICogVGhlIGVkaXRvci1sb2NrIGNvbXBvbmVudCB1c2VkIHRvIGxvY2sgdGhlIG5vdGUgd2hpbGUgaXQgaXMgYmVpbmcgbW9kaWZpZWQuXG4gICAqL1xuICByZWFkb25seSBlZGl0b3JMb2NrQ29tcG9uZW50OiBFZGl0b3JMb2NrQ29tcG9uZW50IHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBUaGUgcGF0aCBvciBURmlsZSBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBub3RlLlxuICAgKi9cbiAgcmVhZG9ubHkgcGF0aE9yRmlsZTogUGF0aE9yRmlsZTtcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciB7QGxpbmsgcHJvY2Vzc0Zyb250bWF0dGVyfS5cbiAqL1xuZXhwb3J0IHR5cGUgUHJvY2Vzc0Zyb250bWF0dGVyT3B0aW9ucyA9IFByb2Nlc3NPcHRpb25zO1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBwcm9jZXNzRnJvbnRtYXR0ZXJ9LlxuICpcbiAqIEB0eXBlUGFyYW0gQ3VzdG9tRnJvbnRtYXR0ZXIgLSBUaGUgdHlwZSBvZiBjdXN0b20gZnJvbnQgbWF0dGVyLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFByb2Nlc3NGcm9udG1hdHRlclBhcmFtczxDdXN0b21Gcm9udG1hdHRlciA9IHVua25vd24+IGV4dGVuZHMgUHJvY2Vzc0Zyb250bWF0dGVyT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgT2JzaWRpYW4gYXBwIGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBwOiBBcHA7XG5cbiAgLyoqXG4gICAqIEEgZnVuY3Rpb24gdGhhdCBtb2RpZmllcyB0aGUgZnJvbnQgbWF0dGVyLlxuICAgKlxuICAgKiBAcGFyYW0gZnJvbnRtYXR0ZXIgLSBUaGUgZnJvbnQgbWF0dGVyIHRvIG1vZGlmeS5cbiAgICogQHBhcmFtIGFib3J0U2lnbmFsIC0gVGhlIGFib3J0IHNpZ25hbCB0byBsaXN0ZW4gdG8uXG4gICAqIEByZXR1cm5zIEEgdmFsdWUgdGhhdCBtYXkgYmUgYG51bGxgIHRvIGFib3J0IHRoZSBwcm9jZXNzLlxuICAgKi9cbiAgZnJvbnRtYXR0ZXJGbih0aGlzOiB2b2lkLCBmcm9udG1hdHRlcjogQ29tYmluZWRGcm9udG1hdHRlcjxDdXN0b21Gcm9udG1hdHRlcj4sIGFib3J0U2lnbmFsOiBBYm9ydFNpZ25hbCk6IFByb21pc2FibGU8TWF5YmVSZXR1cm48bnVsbD4+O1xuXG4gIC8qKlxuICAgKiBUaGUgcGF0aCBvciBURmlsZSBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBub3RlLlxuICAgKi9cbiAgcmVhZG9ubHkgcGF0aE9yRmlsZTogUGF0aE9yRmlsZTtcbn1cblxuLyoqXG4gKiBBZGRzIGFuIGFsaWFzIHRvIHRoZSBmcm9udCBtYXR0ZXIgb2YgYSBnaXZlbiBmaWxlIGlmIGl0IGRvZXMgbm90IGFscmVhZHkgZXhpc3QuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciBhZGRpbmcgdGhlIGFsaWFzLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBhbGlhcyBoYXMgYmVlbiBhZGRlZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFkZEFsaWFzKHBhcmFtczogQWRkQWxpYXNQYXJhbXMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3Qge1xuICAgIGFsaWFzLFxuICAgIGFwcCxcbiAgICBlZGl0b3JMb2NrQ29tcG9uZW50LFxuICAgIHBhdGhPckZpbGVcbiAgfSA9IHBhcmFtcztcbiAgaWYgKCFhbGlhcykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGZpbGUgPSBnZXRGaWxlKHsgYXBwLCBwYXRoT3JGaWxlIH0pO1xuXG4gIGlmICghaXNNYXJrZG93bkZpbGUoZmlsZSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEZpbGUgJHtmaWxlLnBhdGh9IGlzIG5vdCBhIG1hcmtkb3duIGZpbGUuYCk7XG4gIH1cblxuICBpZiAoYWxpYXMgPT09IGZpbGUuYmFzZW5hbWUgfHwgYWxpYXMgPT09IGZpbGUubmFtZSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGF3YWl0IHByb2Nlc3NGcm9udG1hdHRlcih7XG4gICAgYXBwLFxuICAgIGVkaXRvckxvY2tDb21wb25lbnQsXG4gICAgZnJvbnRtYXR0ZXJGbjogKGZyb250bWF0dGVyKSA9PiB7XG4gICAgICBmcm9udG1hdHRlci5hbGlhc2VzID8/PSBbXTtcblxuICAgICAgaWYgKCFmcm9udG1hdHRlci5hbGlhc2VzLmluY2x1ZGVzKGFsaWFzKSkge1xuICAgICAgICBmcm9udG1hdHRlci5hbGlhc2VzLnB1c2goYWxpYXMpO1xuICAgICAgfVxuICAgIH0sXG4gICAgcGF0aE9yRmlsZVxuICB9KTtcbn1cblxuLyoqXG4gKiBEZWxldGVzIGFuIGFsaWFzIGZyb20gdGhlIGZyb250IG1hdHRlciBvZiBhIGdpdmVuIGZpbGUgaWYgaXQgZXhpc3RzLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgZGVsZXRpbmcgdGhlIGFsaWFzLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBhbGlhcyBoYXMgYmVlbiBkZWxldGVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZGVsZXRlQWxpYXMocGFyYW1zOiBEZWxldGVBbGlhc1BhcmFtcyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB7XG4gICAgYWxpYXMsXG4gICAgYXBwLFxuICAgIGVkaXRvckxvY2tDb21wb25lbnQsXG4gICAgcGF0aE9yRmlsZVxuICB9ID0gcGFyYW1zO1xuICBpZiAoIWFsaWFzKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKCFpc01hcmtkb3duRmlsZShwYXRoT3JGaWxlKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgRmlsZSAke2dldFBhdGgoYXBwLCBwYXRoT3JGaWxlKX0gaXMgbm90IGEgbWFya2Rvd24gZmlsZS5gKTtcbiAgfVxuXG4gIGF3YWl0IHByb2Nlc3NGcm9udG1hdHRlcih7XG4gICAgYXBwLFxuICAgIGVkaXRvckxvY2tDb21wb25lbnQsXG4gICAgZnJvbnRtYXR0ZXJGbjogKGZyb250bWF0dGVyKSA9PiB7XG4gICAgICBpZiAoIWZyb250bWF0dGVyLmFsaWFzZXMpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBmcm9udG1hdHRlci5hbGlhc2VzID0gZnJvbnRtYXR0ZXIuYWxpYXNlcy5maWx0ZXIoKGEpID0+IGEgIT09IGFsaWFzKTtcblxuICAgICAgaWYgKGZyb250bWF0dGVyLmFsaWFzZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGRlbGV0ZSBmcm9udG1hdHRlci5hbGlhc2VzO1xuICAgICAgfVxuICAgIH0sXG4gICAgcGF0aE9yRmlsZVxuICB9KTtcbn1cblxuLyoqXG4gKiBQcm9jZXNzZXMgdGhlIGZyb250IG1hdHRlciBvZiBhIGdpdmVuIGZpbGUsIGFsbG93aW5nIG1vZGlmaWNhdGlvbnMgdmlhIGEgcHJvdmlkZWQgZnVuY3Rpb24uXG4gKlxuICogQHR5cGVQYXJhbSBDdXN0b21Gcm9udG1hdHRlciAtIFRoZSB0eXBlIG9mIGN1c3RvbSBmcm9udCBtYXR0ZXIuXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHByb2Nlc3NpbmcgdGhlIGZyb250IG1hdHRlci5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgZnJvbnQgbWF0dGVyIGhhcyBiZWVuIHByb2Nlc3NlZCBhbmQgc2F2ZWQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcm9jZXNzRnJvbnRtYXR0ZXI8Q3VzdG9tRnJvbnRtYXR0ZXIgPSB1bmtub3duPihwYXJhbXM6IFByb2Nlc3NGcm9udG1hdHRlclBhcmFtczxDdXN0b21Gcm9udG1hdHRlcj4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3Qge1xuICAgIGFwcCxcbiAgICBmcm9udG1hdHRlckZuLFxuICAgIHBhdGhPckZpbGUsXG4gICAgLi4ub3B0aW9uc1xuICB9ID0gcGFyYW1zO1xuICBpZiAoIWlzTWFya2Rvd25GaWxlKHBhdGhPckZpbGUpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBGaWxlICR7Z2V0UGF0aChhcHAsIHBhdGhPckZpbGUpfSBpcyBub3QgYSBtYXJrZG93biBmaWxlLmApO1xuICB9XG5cbiAgYXdhaXQgcHJvY2Vzcyhub3JtYWxpemVPcHRpb25hbFByb3BlcnRpZXM8UHJvY2Vzc1BhcmFtcz4oe1xuICAgIGFwcCxcbiAgICBhc3luYyBuZXdDb250ZW50UHJvdmlkZXIoeyBhYm9ydFNpZ25hbCwgY29udGVudCB9KSB7XG4gICAgICBhYm9ydFNpZ25hbC50aHJvd0lmQWJvcnRlZCgpO1xuXG4gICAgICBjb25zdCBvbGRGcm9udG1hdHRlciA9IHBhcnNlRnJvbnRtYXR0ZXI8Q3VzdG9tRnJvbnRtYXR0ZXI+KGNvbnRlbnQpO1xuICAgICAgY29uc3QgbmV3RnJvbnRtYXR0ZXIgPSBwYXJzZUZyb250bWF0dGVyPEN1c3RvbUZyb250bWF0dGVyPihjb250ZW50KTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGZyb250bWF0dGVyRm4obmV3RnJvbnRtYXR0ZXIsIGFib3J0U2lnbmFsKTtcbiAgICAgIGFib3J0U2lnbmFsLnRocm93SWZBYm9ydGVkKCk7XG5cbiAgICAgIGlmIChyZXN1bHQgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIGlmIChkZWVwRXF1YWwob2xkRnJvbnRtYXR0ZXIsIG5ld0Zyb250bWF0dGVyKSkge1xuICAgICAgICByZXR1cm4gY29udGVudDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHNldEZyb250bWF0dGVyKGNvbnRlbnQsIG5ld0Zyb250bWF0dGVyKTtcbiAgICB9LFxuICAgIHBhdGhPckZpbGUsXG4gICAgLi4ub3B0aW9uc1xuICB9KSk7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWtCQTtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1AsU0FBUyxlQUFlO0FBeUZ4QixlQUFzQixTQUFTLFFBQXVDO0FBQ3BFLFFBQU07QUFBQSxJQUNKO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsRUFDRixJQUFJO0FBQ0osTUFBSSxDQUFDLE9BQU87QUFDVjtBQUFBLEVBQ0Y7QUFFQSxRQUFNLE9BQU8sUUFBUSxFQUFFLEtBQUssV0FBVyxDQUFDO0FBRXhDLE1BQUksQ0FBQyxlQUFlLElBQUksR0FBRztBQUN6QixVQUFNLElBQUksTUFBTSxRQUFRLEtBQUssSUFBSSwwQkFBMEI7QUFBQSxFQUM3RDtBQUVBLE1BQUksVUFBVSxLQUFLLFlBQVksVUFBVSxLQUFLLE1BQU07QUFDbEQ7QUFBQSxFQUNGO0FBRUEsUUFBTSxtQkFBbUI7QUFBQSxJQUN2QjtBQUFBLElBQ0E7QUFBQSxJQUNBLGVBQWUsQ0FBQyxnQkFBZ0I7QUFDOUIsa0JBQVksWUFBWSxDQUFDO0FBRXpCLFVBQUksQ0FBQyxZQUFZLFFBQVEsU0FBUyxLQUFLLEdBQUc7QUFDeEMsb0JBQVksUUFBUSxLQUFLLEtBQUs7QUFBQSxNQUNoQztBQUFBLElBQ0Y7QUFBQSxJQUNBO0FBQUEsRUFDRixDQUFDO0FBQ0g7QUFRQSxlQUFzQixZQUFZLFFBQTBDO0FBQzFFLFFBQU07QUFBQSxJQUNKO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsRUFDRixJQUFJO0FBQ0osTUFBSSxDQUFDLE9BQU87QUFDVjtBQUFBLEVBQ0Y7QUFFQSxNQUFJLENBQUMsZUFBZSxVQUFVLEdBQUc7QUFDL0IsVUFBTSxJQUFJLE1BQU0sUUFBUSxRQUFRLEtBQUssVUFBVSxDQUFDLDBCQUEwQjtBQUFBLEVBQzVFO0FBRUEsUUFBTSxtQkFBbUI7QUFBQSxJQUN2QjtBQUFBLElBQ0E7QUFBQSxJQUNBLGVBQWUsQ0FBQyxnQkFBZ0I7QUFDOUIsVUFBSSxDQUFDLFlBQVksU0FBUztBQUN4QjtBQUFBLE1BQ0Y7QUFFQSxrQkFBWSxVQUFVLFlBQVksUUFBUSxPQUFPLENBQUMsTUFBTSxNQUFNLEtBQUs7QUFFbkUsVUFBSSxZQUFZLFFBQVEsV0FBVyxHQUFHO0FBQ3BDLGVBQU8sWUFBWTtBQUFBLE1BQ3JCO0FBQUEsSUFDRjtBQUFBLElBQ0E7QUFBQSxFQUNGLENBQUM7QUFDSDtBQVNBLGVBQXNCLG1CQUFnRCxRQUFvRTtBQUN4SSxRQUFNO0FBQUEsSUFDSjtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQSxHQUFHO0FBQUEsRUFDTCxJQUFJO0FBQ0osTUFBSSxDQUFDLGVBQWUsVUFBVSxHQUFHO0FBQy9CLFVBQU0sSUFBSSxNQUFNLFFBQVEsUUFBUSxLQUFLLFVBQVUsQ0FBQywwQkFBMEI7QUFBQSxFQUM1RTtBQUVBLFFBQU0sUUFBUSw0QkFBMkM7QUFBQSxJQUN2RDtBQUFBLElBQ0EsTUFBTSxtQkFBbUIsRUFBRSxhQUFhLFFBQVEsR0FBRztBQUNqRCxrQkFBWSxlQUFlO0FBRTNCLFlBQU0saUJBQWlCLGlCQUFvQyxPQUFPO0FBQ2xFLFlBQU0saUJBQWlCLGlCQUFvQyxPQUFPO0FBQ2xFLFlBQU0sU0FBUyxNQUFNLGNBQWMsZ0JBQWdCLFdBQVc7QUFDOUQsa0JBQVksZUFBZTtBQUUzQixVQUFJLFdBQVcsTUFBTTtBQUNuQixlQUFPO0FBQUEsTUFDVDtBQUVBLFVBQUksVUFBVSxnQkFBZ0IsY0FBYyxHQUFHO0FBQzdDLGVBQU87QUFBQSxNQUNUO0FBRUEsYUFBTyxlQUFlLFNBQVMsY0FBYztBQUFBLElBQy9DO0FBQUEsSUFDQTtBQUFBLElBQ0EsR0FBRztBQUFBLEVBQ0wsQ0FBQyxDQUFDO0FBQ0o7IiwKICAibmFtZXMiOiBbXQp9Cg==
|
|
130
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL2ZpbGUtbWFuYWdlci50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIENvbnRhaW5zIHV0aWxpdHkgZnVuY3Rpb25zIGZvciBtYW5hZ2luZyBmaWxlcyBpbiBPYnNpZGlhbi5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEFwcCB9IGZyb20gJ29ic2lkaWFuJztcbmltcG9ydCB0eXBlIHsgUHJvbWlzYWJsZSB9IGZyb20gJ3R5cGUtZmVzdCc7XG5cbmltcG9ydCB0eXBlIHsgTWF5YmVSZXR1cm4gfSBmcm9tICcuLi90eXBlLnRzJztcbmltcG9ydCB0eXBlIHsgRWRpdG9yTG9ja0NvbXBvbmVudCB9IGZyb20gJy4vZWRpdG9yLWxvY2sudHMnO1xuaW1wb3J0IHR5cGUgeyBQYXRoT3JGaWxlIH0gZnJvbSAnLi9maWxlLXN5c3RlbS50cyc7XG5pbXBvcnQgdHlwZSB7IENvbWJpbmVkRnJvbnRtYXR0ZXIgfSBmcm9tICcuL2Zyb250bWF0dGVyLnRzJztcbmltcG9ydCB0eXBlIHtcbiAgUHJvY2Vzc09wdGlvbnMsXG4gIFByb2Nlc3NQYXJhbXNcbn0gZnJvbSAnLi92YXVsdC50cyc7XG5cbmltcG9ydCB7XG4gIGRlZXBFcXVhbCxcbiAgbm9ybWFsaXplT3B0aW9uYWxQcm9wZXJ0aWVzXG59IGZyb20gJy4uL29iamVjdC11dGlscy50cyc7XG5pbXBvcnQge1xuICBnZXRGaWxlLFxuICBnZXRQYXRoLFxuICBpc01hcmtkb3duRmlsZVxufSBmcm9tICcuL2ZpbGUtc3lzdGVtLnRzJztcbmltcG9ydCB7XG4gIHBhcnNlRnJvbnRtYXR0ZXIsXG4gIHNldEZyb250bWF0dGVyXG59IGZyb20gJy4vZnJvbnRtYXR0ZXIudHMnO1xuaW1wb3J0IHsgcHJvY2VzcyB9IGZyb20gJy4vdmF1bHQudHMnO1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBhZGRBbGlhc30uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQWRkQWxpYXNQYXJhbXMge1xuICAvKipcbiAgICogVGhlIGFsaWFzIHRvIGFkZC5cbiAgICovXG4gIHJlYWRvbmx5IGFsaWFzPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgT2JzaWRpYW4gYXBwIGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBwOiBBcHA7XG5cbiAgLyoqXG4gICAqIFRoZSBlZGl0b3ItbG9jayBjb21wb25lbnQgdXNlZCB0byBsb2NrIHRoZSBub3RlIHdoaWxlIGl0IGlzIGJlaW5nIG1vZGlmaWVkLlxuICAgKi9cbiAgcmVhZG9ubHkgZWRpdG9yTG9ja0NvbXBvbmVudDogRWRpdG9yTG9ja0NvbXBvbmVudCB8IG51bGw7XG5cbiAgLyoqXG4gICAqIFRoZSBwYXRoIG9yIFRGaWxlIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIG5vdGUuXG4gICAqL1xuICByZWFkb25seSBwYXRoT3JGaWxlOiBQYXRoT3JGaWxlO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBkZWxldGVBbGlhc30uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGVsZXRlQWxpYXNQYXJhbXMge1xuICAvKipcbiAgICogVGhlIGFsaWFzIHRvIGRlbGV0ZS5cbiAgICovXG4gIHJlYWRvbmx5IGFsaWFzPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgT2JzaWRpYW4gYXBwIGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBwOiBBcHA7XG5cbiAgLyoqXG4gICAqIFRoZSBlZGl0b3ItbG9jayBjb21wb25lbnQgdXNlZCB0byBsb2NrIHRoZSBub3RlIHdoaWxlIGl0IGlzIGJlaW5nIG1vZGlmaWVkLlxuICAgKi9cbiAgcmVhZG9ubHkgZWRpdG9yTG9ja0NvbXBvbmVudDogRWRpdG9yTG9ja0NvbXBvbmVudCB8IG51bGw7XG5cbiAgLyoqXG4gICAqIFRoZSBwYXRoIG9yIFRGaWxlIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIG5vdGUuXG4gICAqL1xuICByZWFkb25seSBwYXRoT3JGaWxlOiBQYXRoT3JGaWxlO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHtAbGluayBwcm9jZXNzRnJvbnRtYXR0ZXJ9LlxuICovXG5leHBvcnQgdHlwZSBQcm9jZXNzRnJvbnRtYXR0ZXJPcHRpb25zID0gUHJvY2Vzc09wdGlvbnM7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIHByb2Nlc3NGcm9udG1hdHRlcn0uXG4gKlxuICogQHR5cGVQYXJhbSBDdXN0b21Gcm9udG1hdHRlciAtIFRoZSB0eXBlIG9mIGN1c3RvbSBmcm9udCBtYXR0ZXIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHJvY2Vzc0Zyb250bWF0dGVyUGFyYW1zPEN1c3RvbUZyb250bWF0dGVyID0gdW5rbm93bj4gZXh0ZW5kcyBQcm9jZXNzRnJvbnRtYXR0ZXJPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gICAqL1xuICByZWFkb25seSBhcHA6IEFwcDtcblxuICAvKipcbiAgICogQSBmdW5jdGlvbiB0aGF0IG1vZGlmaWVzIHRoZSBmcm9udCBtYXR0ZXIuXG4gICAqXG4gICAqIEBwYXJhbSBmcm9udG1hdHRlciAtIFRoZSBmcm9udCBtYXR0ZXIgdG8gbW9kaWZ5LlxuICAgKiBAcGFyYW0gYWJvcnRTaWduYWwgLSBUaGUgYWJvcnQgc2lnbmFsIHRvIGxpc3RlbiB0by5cbiAgICogQHJldHVybnMgQSB2YWx1ZSB0aGF0IG1heSBiZSBgbnVsbGAgdG8gYWJvcnQgdGhlIHByb2Nlc3MuXG4gICAqL1xuICBmcm9udG1hdHRlckZuKHRoaXM6IHZvaWQsIGZyb250bWF0dGVyOiBDb21iaW5lZEZyb250bWF0dGVyPEN1c3RvbUZyb250bWF0dGVyPiwgYWJvcnRTaWduYWw6IEFib3J0U2lnbmFsKTogUHJvbWlzYWJsZTxNYXliZVJldHVybjxudWxsPj47XG5cbiAgLyoqXG4gICAqIFRoZSBwYXRoIG9yIFRGaWxlIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIG5vdGUuXG4gICAqL1xuICByZWFkb25seSBwYXRoT3JGaWxlOiBQYXRoT3JGaWxlO1xufVxuXG4vKipcbiAqIEFkZHMgYW4gYWxpYXMgdG8gdGhlIGZyb250IG1hdHRlciBvZiBhIGdpdmVuIGZpbGUgaWYgaXQgZG9lcyBub3QgYWxyZWFkeSBleGlzdC5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIGFkZGluZyB0aGUgYWxpYXMuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGFsaWFzIGhhcyBiZWVuIGFkZGVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYWRkQWxpYXMocGFyYW1zOiBBZGRBbGlhc1BhcmFtcyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB7XG4gICAgYWxpYXMsXG4gICAgYXBwLFxuICAgIGVkaXRvckxvY2tDb21wb25lbnQsXG4gICAgcGF0aE9yRmlsZVxuICB9ID0gcGFyYW1zO1xuICBpZiAoIWFsaWFzKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgZmlsZSA9IGdldEZpbGUoeyBhcHAsIHBhdGhPckZpbGUgfSk7XG5cbiAgaWYgKCFpc01hcmtkb3duRmlsZShmaWxlKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgRmlsZSAke2ZpbGUucGF0aH0gaXMgbm90IGEgbWFya2Rvd24gZmlsZS5gKTtcbiAgfVxuXG4gIGlmIChhbGlhcyA9PT0gZmlsZS5iYXNlbmFtZSB8fCBhbGlhcyA9PT0gZmlsZS5uYW1lKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgYXdhaXQgcHJvY2Vzc0Zyb250bWF0dGVyKHtcbiAgICBhcHAsXG4gICAgZWRpdG9yTG9ja0NvbXBvbmVudCxcbiAgICBmcm9udG1hdHRlckZuOiAoZnJvbnRtYXR0ZXIpID0+IHtcbiAgICAgIGZyb250bWF0dGVyLmFsaWFzZXMgPz89IFtdO1xuXG4gICAgICBpZiAoIWZyb250bWF0dGVyLmFsaWFzZXMuaW5jbHVkZXMoYWxpYXMpKSB7XG4gICAgICAgIGZyb250bWF0dGVyLmFsaWFzZXMucHVzaChhbGlhcyk7XG4gICAgICB9XG4gICAgfSxcbiAgICBwYXRoT3JGaWxlXG4gIH0pO1xufVxuXG4vKipcbiAqIERlbGV0ZXMgYW4gYWxpYXMgZnJvbSB0aGUgZnJvbnQgbWF0dGVyIG9mIGEgZ2l2ZW4gZmlsZSBpZiBpdCBleGlzdHMuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciBkZWxldGluZyB0aGUgYWxpYXMuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGFsaWFzIGhhcyBiZWVuIGRlbGV0ZWQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkZWxldGVBbGlhcyhwYXJhbXM6IERlbGV0ZUFsaWFzUGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHtcbiAgICBhbGlhcyxcbiAgICBhcHAsXG4gICAgZWRpdG9yTG9ja0NvbXBvbmVudCxcbiAgICBwYXRoT3JGaWxlXG4gIH0gPSBwYXJhbXM7XG4gIGlmICghYWxpYXMpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoIWlzTWFya2Rvd25GaWxlKHBhdGhPckZpbGUpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBGaWxlICR7Z2V0UGF0aChhcHAsIHBhdGhPckZpbGUpfSBpcyBub3QgYSBtYXJrZG93biBmaWxlLmApO1xuICB9XG5cbiAgYXdhaXQgcHJvY2Vzc0Zyb250bWF0dGVyKHtcbiAgICBhcHAsXG4gICAgZWRpdG9yTG9ja0NvbXBvbmVudCxcbiAgICBmcm9udG1hdHRlckZuOiAoZnJvbnRtYXR0ZXIpID0+IHtcbiAgICAgIGlmICghZnJvbnRtYXR0ZXIuYWxpYXNlcykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGZyb250bWF0dGVyLmFsaWFzZXMgPSBmcm9udG1hdHRlci5hbGlhc2VzLmZpbHRlcigoYSkgPT4gYSAhPT0gYWxpYXMpO1xuXG4gICAgICBpZiAoZnJvbnRtYXR0ZXIuYWxpYXNlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgZGVsZXRlIGZyb250bWF0dGVyLmFsaWFzZXM7XG4gICAgICB9XG4gICAgfSxcbiAgICBwYXRoT3JGaWxlXG4gIH0pO1xufVxuXG4vKipcbiAqIFByb2Nlc3NlcyB0aGUgZnJvbnQgbWF0dGVyIG9mIGEgZ2l2ZW4gZmlsZSwgYWxsb3dpbmcgbW9kaWZpY2F0aW9ucyB2aWEgYSBwcm92aWRlZCBmdW5jdGlvbi5cbiAqXG4gKiBAdHlwZVBhcmFtIEN1c3RvbUZyb250bWF0dGVyIC0gVGhlIHR5cGUgb2YgY3VzdG9tIGZyb250IG1hdHRlci5cbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgcHJvY2Vzc2luZyB0aGUgZnJvbnQgbWF0dGVyLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBmcm9udCBtYXR0ZXIgaGFzIGJlZW4gcHJvY2Vzc2VkIGFuZCBzYXZlZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByb2Nlc3NGcm9udG1hdHRlcjxDdXN0b21Gcm9udG1hdHRlciA9IHVua25vd24+KHBhcmFtczogUHJvY2Vzc0Zyb250bWF0dGVyUGFyYW1zPEN1c3RvbUZyb250bWF0dGVyPik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB7XG4gICAgYXBwLFxuICAgIGZyb250bWF0dGVyRm4sXG4gICAgcGF0aE9yRmlsZSxcbiAgICAuLi5vcHRpb25zXG4gIH0gPSBwYXJhbXM7XG4gIGlmICghaXNNYXJrZG93bkZpbGUocGF0aE9yRmlsZSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEZpbGUgJHtnZXRQYXRoKGFwcCwgcGF0aE9yRmlsZSl9IGlzIG5vdCBhIG1hcmtkb3duIGZpbGUuYCk7XG4gIH1cblxuICBhd2FpdCBwcm9jZXNzKG5vcm1hbGl6ZU9wdGlvbmFsUHJvcGVydGllczxQcm9jZXNzUGFyYW1zPih7XG4gICAgYXBwLFxuICAgIGFzeW5jIG5ld0NvbnRlbnRQcm92aWRlcih7IGFib3J0U2lnbmFsLCBjb250ZW50IH0pIHtcbiAgICAgIGFib3J0U2lnbmFsLnRocm93SWZBYm9ydGVkKCk7XG5cbiAgICAgIGNvbnN0IG9sZEZyb250bWF0dGVyID0gcGFyc2VGcm9udG1hdHRlcjxDdXN0b21Gcm9udG1hdHRlcj4oY29udGVudCk7XG4gICAgICBjb25zdCBuZXdGcm9udG1hdHRlciA9IHBhcnNlRnJvbnRtYXR0ZXI8Q3VzdG9tRnJvbnRtYXR0ZXI+KGNvbnRlbnQpO1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZnJvbnRtYXR0ZXJGbihuZXdGcm9udG1hdHRlciwgYWJvcnRTaWduYWwpO1xuICAgICAgYWJvcnRTaWduYWwudGhyb3dJZkFib3J0ZWQoKTtcblxuICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgaWYgKGRlZXBFcXVhbChvbGRGcm9udG1hdHRlciwgbmV3RnJvbnRtYXR0ZXIpKSB7XG4gICAgICAgIHJldHVybiBjb250ZW50O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gc2V0RnJvbnRtYXR0ZXIoY29udGVudCwgbmV3RnJvbnRtYXR0ZXIpO1xuICAgIH0sXG4gICAgcGF0aE9yRmlsZSxcbiAgICAuLi5vcHRpb25zXG4gIH0pKTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBa0JBO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1A7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1A7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUCxTQUFTLGVBQWU7QUF5RnhCLGVBQXNCLFNBQVMsUUFBdUM7QUFDcEUsUUFBTTtBQUFBLElBQ0o7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxFQUNGLElBQUk7QUFDSixNQUFJLENBQUMsT0FBTztBQUNWO0FBQUEsRUFDRjtBQUVBLFFBQU0sT0FBTyxRQUFRLEVBQUUsS0FBSyxXQUFXLENBQUM7QUFFeEMsTUFBSSxDQUFDLGVBQWUsSUFBSSxHQUFHO0FBQ3pCLFVBQU0sSUFBSSxNQUFNLFFBQVEsS0FBSyxJQUFJLDBCQUEwQjtBQUFBLEVBQzdEO0FBRUEsTUFBSSxVQUFVLEtBQUssWUFBWSxVQUFVLEtBQUssTUFBTTtBQUNsRDtBQUFBLEVBQ0Y7QUFFQSxRQUFNLG1CQUFtQjtBQUFBLElBQ3ZCO0FBQUEsSUFDQTtBQUFBLElBQ0EsZUFBZSxDQUFDLGdCQUFnQjtBQUM5QixrQkFBWSxZQUFZLENBQUM7QUFFekIsVUFBSSxDQUFDLFlBQVksUUFBUSxTQUFTLEtBQUssR0FBRztBQUN4QyxvQkFBWSxRQUFRLEtBQUssS0FBSztBQUFBLE1BQ2hDO0FBQUEsSUFDRjtBQUFBLElBQ0E7QUFBQSxFQUNGLENBQUM7QUFDSDtBQVFBLGVBQXNCLFlBQVksUUFBMEM7QUFDMUUsUUFBTTtBQUFBLElBQ0o7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxFQUNGLElBQUk7QUFDSixNQUFJLENBQUMsT0FBTztBQUNWO0FBQUEsRUFDRjtBQUVBLE1BQUksQ0FBQyxlQUFlLFVBQVUsR0FBRztBQUMvQixVQUFNLElBQUksTUFBTSxRQUFRLFFBQVEsS0FBSyxVQUFVLENBQUMsMEJBQTBCO0FBQUEsRUFDNUU7QUFFQSxRQUFNLG1CQUFtQjtBQUFBLElBQ3ZCO0FBQUEsSUFDQTtBQUFBLElBQ0EsZUFBZSxDQUFDLGdCQUFnQjtBQUM5QixVQUFJLENBQUMsWUFBWSxTQUFTO0FBQ3hCO0FBQUEsTUFDRjtBQUVBLGtCQUFZLFVBQVUsWUFBWSxRQUFRLE9BQU8sQ0FBQyxNQUFNLE1BQU0sS0FBSztBQUVuRSxVQUFJLFlBQVksUUFBUSxXQUFXLEdBQUc7QUFDcEMsZUFBTyxZQUFZO0FBQUEsTUFDckI7QUFBQSxJQUNGO0FBQUEsSUFDQTtBQUFBLEVBQ0YsQ0FBQztBQUNIO0FBU0EsZUFBc0IsbUJBQWdELFFBQW9FO0FBQ3hJLFFBQU07QUFBQSxJQUNKO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBLEdBQUc7QUFBQSxFQUNMLElBQUk7QUFDSixNQUFJLENBQUMsZUFBZSxVQUFVLEdBQUc7QUFDL0IsVUFBTSxJQUFJLE1BQU0sUUFBUSxRQUFRLEtBQUssVUFBVSxDQUFDLDBCQUEwQjtBQUFBLEVBQzVFO0FBRUEsUUFBTSxRQUFRLDRCQUEyQztBQUFBLElBQ3ZEO0FBQUEsSUFDQSxNQUFNLG1CQUFtQixFQUFFLGFBQWEsUUFBUSxHQUFHO0FBQ2pELGtCQUFZLGVBQWU7QUFFM0IsWUFBTSxpQkFBaUIsaUJBQW9DLE9BQU87QUFDbEUsWUFBTSxpQkFBaUIsaUJBQW9DLE9BQU87QUFDbEUsWUFBTSxTQUFTLE1BQU0sY0FBYyxnQkFBZ0IsV0FBVztBQUM5RCxrQkFBWSxlQUFlO0FBRTNCLFVBQUksV0FBVyxNQUFNO0FBQ25CLGVBQU87QUFBQSxNQUNUO0FBRUEsVUFBSSxVQUFVLGdCQUFnQixjQUFjLEdBQUc7QUFDN0MsZUFBTztBQUFBLE1BQ1Q7QUFFQSxhQUFPLGVBQWUsU0FBUyxjQUFjO0FBQUEsSUFDL0M7QUFBQSxJQUNBO0FBQUEsSUFDQSxHQUFHO0FBQUEsRUFDTCxDQUFDLENBQUM7QUFDSjsiLAogICJuYW1lcyI6IFtdCn0K
|
|
@@ -31,6 +31,9 @@ export declare const en: {
|
|
|
31
31
|
readonly editorLock: {
|
|
32
32
|
readonly lockedByTooltip: "Locked by";
|
|
33
33
|
readonly lockedNoteTooltip: "This note is locked while an operation is in progress.";
|
|
34
|
+
readonly unlockConfirmMessage: "This will cancel the operation(s) currently holding a lock on this note and may leave the vault in an inconsistent state. The note is locked by:";
|
|
35
|
+
readonly unlockConfirmTitle: "Unlock note?";
|
|
36
|
+
readonly unlockMenuItem: "Unlock";
|
|
34
37
|
};
|
|
35
38
|
readonly metadataCache: {
|
|
36
39
|
readonly getBacklinksForFilePath: "Get backlinks for {{filePath}}";
|
|
@@ -44,7 +44,10 @@ const en = {
|
|
|
44
44
|
},
|
|
45
45
|
editorLock: {
|
|
46
46
|
lockedByTooltip: "Locked by",
|
|
47
|
-
lockedNoteTooltip: "This note is locked while an operation is in progress."
|
|
47
|
+
lockedNoteTooltip: "This note is locked while an operation is in progress.",
|
|
48
|
+
unlockConfirmMessage: "This will cancel the operation(s) currently holding a lock on this note and may leave the vault in an inconsistent state. The note is locked by:",
|
|
49
|
+
unlockConfirmTitle: "Unlock note?",
|
|
50
|
+
unlockMenuItem: "Unlock"
|
|
48
51
|
},
|
|
49
52
|
metadataCache: {
|
|
50
53
|
getBacklinksForFilePath: "Get backlinks for {{filePath}}"
|
|
@@ -70,4 +73,4 @@ const en = {
|
|
|
70
73
|
export {
|
|
71
74
|
en
|
|
72
75
|
};
|
|
73
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
76
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL2kxOG4vbG9jYWxlcy9lbi50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFRoaXMgZmlsZSBkZWZpbmVzIHRoZSBFbmdsaXNoIHRyYW5zbGF0aW9ucyBmb3IgdGhlIGBpMThuYCBtb2R1bGUuXG4gKi9cblxuLyoqXG4gKiBUaGUgRW5nbGlzaCB0cmFuc2xhdGlvbnMuXG4gKi9cbmV4cG9ydCBjb25zdCBlbiA9IHtcbiAgb2JzaWRpYW5EZXZVdGlsczoge1xuICAgIGFzeW5jV2l0aE5vdGljZToge1xuICAgICAgbWlsbGlzZWNvbmRzOiAnbWlsbGlzZWNvbmRzLi4uJyxcbiAgICAgIG9wZXJhdGlvbjogJ09wZXJhdGlvbicsXG4gICAgICBydW5uaW5nRm9yOiAnUnVubmluZyBmb3InLFxuICAgICAgdGVybWluYXRlT3BlcmF0aW9uOiAnWW91IGNhbiB0ZXJtaW5hdGUgdGhlIG9wZXJhdGlvbiBieSBjbGlja2luZyB0aGUgYnV0dG9uIGJlbG93LCBidXQgYmUgYXdhcmUgaXQgbWlnaHQgbGVhdmUgdGhlIHZhdWx0IGluIGFuIGluY29uc2lzdGVudCBzdGF0ZS4nLFxuICAgICAgdGltZWRPdXQ6ICdUaGUgb3BlcmF0aW9uIHRpbWVkIG91dCBhZnRlciB7e2R1cmF0aW9uLCBudW1iZXJ9fSBtaWxsaXNlY29uZHMuJ1xuICAgIH0sXG4gICAgYnV0dG9uczoge1xuICAgICAgY2FuY2VsOiAnQ2FuY2VsJyxcbiAgICAgIG9rOiAnT0snXG4gICAgfSxcbiAgICBjYWxsb3V0OiB7XG4gICAgICBsb2FkQ29udGVudDogJ0xvYWQgY29udGVudCBmb3IgY2FsbG91dCdcbiAgICB9LFxuICAgIGRhdGF2aWV3OiB7XG4gICAgICBpdGVtc1BlclBhZ2U6ICdJdGVtcyBwZXIgcGFnZTonLFxuICAgICAganVtcFRvUGFnZTogJ0p1bXAgdG8gcGFnZTonLFxuICAgICAgcGFnZUhlYWRlcjogJ1BhZ2Uge3twYWdlTnVtYmVyLCBudW1iZXJ9fSBvZiB7e3RvdGFsUGFnZXMsIG51bWJlcn19LCBUb3RhbCBpdGVtczoge3t0b3RhbEl0ZW1zLCBudW1iZXJ9fSdcbiAgICB9LFxuICAgIGVkaXRvckxvY2s6IHtcbiAgICAgIGxvY2tlZEJ5VG9vbHRpcDogJ0xvY2tlZCBieScsXG4gICAgICBsb2NrZWROb3RlVG9vbHRpcDogJ1RoaXMgbm90ZSBpcyBsb2NrZWQgd2hpbGUgYW4gb3BlcmF0aW9uIGlzIGluIHByb2dyZXNzLicsXG4gICAgICB1bmxvY2tDb25maXJtTWVzc2FnZTogJ1RoaXMgd2lsbCBjYW5jZWwgdGhlIG9wZXJhdGlvbihzKSBjdXJyZW50bHkgaG9sZGluZyBhIGxvY2sgb24gdGhpcyBub3RlIGFuZCBtYXkgbGVhdmUgdGhlIHZhdWx0IGluIGFuIGluY29uc2lzdGVudCBzdGF0ZS4gVGhlIG5vdGUgaXMgbG9ja2VkIGJ5OicsXG4gICAgICB1bmxvY2tDb25maXJtVGl0bGU6ICdVbmxvY2sgbm90ZT8nLFxuICAgICAgdW5sb2NrTWVudUl0ZW06ICdVbmxvY2snXG4gICAgfSxcbiAgICBtZXRhZGF0YUNhY2hlOiB7XG4gICAgICBnZXRCYWNrbGlua3NGb3JGaWxlUGF0aDogJ0dldCBiYWNrbGlua3MgZm9yIHt7ZmlsZVBhdGh9fSdcbiAgICB9LFxuICAgIG5vdGljZXM6IHtcbiAgICAgIGF0dGFjaG1lbnRJc1N0aWxsVXNlZDogJ0F0dGFjaG1lbnQge3thdHRhY2htZW50UGF0aH19IGlzIHN0aWxsIHVzZWQgYnkgb3RoZXIgbm90ZXMuIEl0IHdpbGwgbm90IGJlIGRlbGV0ZWQuJyxcbiAgICAgIHVuaGFuZGxlZEVycm9yOiAnQW4gdW5oYW5kbGVkIGVycm9yIG9jY3VycmVkLiBQbGVhc2UgY2hlY2sgdGhlIGNvbnNvbGUgZm9yIG1vcmUgaW5mb3JtYXRpb24uJ1xuICAgIH0sXG4gICAgcXVldWU6IHtcbiAgICAgIGZsdXNoUXVldWU6ICdGbHVzaCBxdWV1ZSdcbiAgICB9LFxuICAgIHJlbmFtZURlbGV0ZUhhbmRsZXI6IHtcbiAgICAgIGhhbmRsZURlbGV0ZTogJ0hhbmRsZSBkZWxldGU6IHt7ZmlsZVBhdGh9fScsXG4gICAgICBoYW5kbGVPcnBoYW5lZFJlbmFtZXM6ICdIYW5kbGUgb3JwaGFuZWQgcmVuYW1lcycsXG4gICAgICBoYW5kbGVSZW5hbWU6ICdIYW5kbGUgcmVuYW1lOiB7e29sZFBhdGh9fSAtPiB7e25ld1BhdGh9fScsXG4gICAgICB1cGRhdGVkTGlua3M6ICdVcGRhdGVkIHt7bGlua3NDb3VudCwgbnVtYmVyfX0gbGlua3MgaW4ge3tmaWxlc0NvdW50LCBudW1iZXJ9fSBmaWxlcy4nXG4gICAgfSxcbiAgICB2YXVsdDoge1xuICAgICAgcHJvY2Vzc0ZpbGU6ICdQcm9jZXNzIGZpbGUge3tmaWxlUGF0aH19J1xuICAgIH1cbiAgfVxufSBhcyBjb25zdDtcbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBU08sTUFBTSxLQUFLO0FBQUEsRUFDaEIsa0JBQWtCO0FBQUEsSUFDaEIsaUJBQWlCO0FBQUEsTUFDZixjQUFjO0FBQUEsTUFDZCxXQUFXO0FBQUEsTUFDWCxZQUFZO0FBQUEsTUFDWixvQkFBb0I7QUFBQSxNQUNwQixVQUFVO0FBQUEsSUFDWjtBQUFBLElBQ0EsU0FBUztBQUFBLE1BQ1AsUUFBUTtBQUFBLE1BQ1IsSUFBSTtBQUFBLElBQ047QUFBQSxJQUNBLFNBQVM7QUFBQSxNQUNQLGFBQWE7QUFBQSxJQUNmO0FBQUEsSUFDQSxVQUFVO0FBQUEsTUFDUixjQUFjO0FBQUEsTUFDZCxZQUFZO0FBQUEsTUFDWixZQUFZO0FBQUEsSUFDZDtBQUFBLElBQ0EsWUFBWTtBQUFBLE1BQ1YsaUJBQWlCO0FBQUEsTUFDakIsbUJBQW1CO0FBQUEsTUFDbkIsc0JBQXNCO0FBQUEsTUFDdEIsb0JBQW9CO0FBQUEsTUFDcEIsZ0JBQWdCO0FBQUEsSUFDbEI7QUFBQSxJQUNBLGVBQWU7QUFBQSxNQUNiLHlCQUF5QjtBQUFBLElBQzNCO0FBQUEsSUFDQSxTQUFTO0FBQUEsTUFDUCx1QkFBdUI7QUFBQSxNQUN2QixnQkFBZ0I7QUFBQSxJQUNsQjtBQUFBLElBQ0EsT0FBTztBQUFBLE1BQ0wsWUFBWTtBQUFBLElBQ2Q7QUFBQSxJQUNBLHFCQUFxQjtBQUFBLE1BQ25CLGNBQWM7QUFBQSxNQUNkLHVCQUF1QjtBQUFBLE1BQ3ZCLGNBQWM7QUFBQSxNQUNkLGNBQWM7QUFBQSxJQUNoQjtBQUFBLElBQ0EsT0FBTztBQUFBLE1BQ0wsYUFBYTtBQUFBLElBQ2Y7QUFBQSxFQUNGO0FBQ0Y7IiwKICAibmFtZXMiOiBbXQp9Cg==
|
|
@@ -34,6 +34,9 @@ declare const translationsMapImpl: {
|
|
|
34
34
|
readonly editorLock: {
|
|
35
35
|
readonly lockedByTooltip: "Locked by";
|
|
36
36
|
readonly lockedNoteTooltip: "This note is locked while an operation is in progress.";
|
|
37
|
+
readonly unlockConfirmMessage: "This will cancel the operation(s) currently holding a lock on this note and may leave the vault in an inconsistent state. The note is locked by:";
|
|
38
|
+
readonly unlockConfirmTitle: "Unlock note?";
|
|
39
|
+
readonly unlockMenuItem: "Unlock";
|
|
37
40
|
};
|
|
38
41
|
readonly metadataCache: {
|
|
39
42
|
readonly getBacklinksForFilePath: "Get backlinks for {{filePath}}";
|