@flogeez/angular-tiptap-editor 3.5.2 → 3.5.4
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 +21 -0
- package/esm2022/lib/components/bubble-menus/link/ate-link-bubble-menu.component.mjs +22 -2
- package/esm2022/lib/components/editor/angular-tiptap-editor.component.mjs +15 -2
- package/esm2022/lib/extensions/ate-link-shortcut.extension.mjs +50 -0
- package/esm2022/lib/extensions/ate-pasted-image.extension.mjs +156 -0
- package/esm2022/lib/models/ate-image.model.mjs +1 -1
- package/esm2022/lib/services/ate-editor-commands.service.mjs +7 -1
- package/esm2022/lib/services/ate-image.service.mjs +63 -36
- package/esm2022/public-api.mjs +4 -1
- package/fesm2022/flogeez-angular-tiptap-editor.mjs +303 -37
- package/fesm2022/flogeez-angular-tiptap-editor.mjs.map +1 -1
- package/lib/components/bubble-menus/link/ate-link-bubble-menu.component.d.ts +1 -0
- package/lib/components/editor/angular-tiptap-editor.component.d.ts +4 -2
- package/lib/extensions/ate-link-shortcut.extension.d.ts +15 -0
- package/lib/extensions/ate-pasted-image.extension.d.ts +33 -0
- package/lib/models/ate-image.model.d.ts +9 -0
- package/lib/services/ate-editor-commands.service.d.ts +2 -0
- package/lib/services/ate-image.service.d.ts +7 -0
- package/package.json +1 -1
- package/public-api.d.ts +2 -0
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { Extension } from "@tiptap/core";
|
|
2
|
+
import { Plugin, PluginKey } from "@tiptap/pm/state";
|
|
3
|
+
/** Matches the bare `Mod+K` chord (`Cmd+K` on macOS, `Ctrl+K` elsewhere) */
|
|
4
|
+
export function isLinkShortcut(event) {
|
|
5
|
+
return ((event.metaKey || event.ctrlKey) &&
|
|
6
|
+
!event.shiftKey &&
|
|
7
|
+
!event.altKey &&
|
|
8
|
+
event.key.toLowerCase() === "k");
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* `Mod+K` opens the link editor when text is selected or the cursor is on a link.
|
|
12
|
+
* With an empty selection outside a link the event is left alone, so host-level `Mod+K`
|
|
13
|
+
* shortcuts (search, command palettes) keep working.
|
|
14
|
+
*/
|
|
15
|
+
export const AteLinkShortcut = Extension.create({
|
|
16
|
+
name: "ateLinkShortcut",
|
|
17
|
+
addOptions() {
|
|
18
|
+
return {
|
|
19
|
+
canOpen: () => true,
|
|
20
|
+
open: () => undefined,
|
|
21
|
+
};
|
|
22
|
+
},
|
|
23
|
+
addProseMirrorPlugins() {
|
|
24
|
+
const editor = this.editor;
|
|
25
|
+
const options = this.options;
|
|
26
|
+
return [
|
|
27
|
+
new Plugin({
|
|
28
|
+
key: new PluginKey("ateLinkShortcut"),
|
|
29
|
+
props: {
|
|
30
|
+
handleKeyDown: (view, event) => {
|
|
31
|
+
if (!isLinkShortcut(event) || !view.editable) {
|
|
32
|
+
return false;
|
|
33
|
+
}
|
|
34
|
+
if (view.state.selection.empty && !editor.isActive("link")) {
|
|
35
|
+
return false;
|
|
36
|
+
}
|
|
37
|
+
if (!options.canOpen()) {
|
|
38
|
+
return false;
|
|
39
|
+
}
|
|
40
|
+
event.preventDefault();
|
|
41
|
+
event.stopPropagation();
|
|
42
|
+
options.open(editor);
|
|
43
|
+
return true;
|
|
44
|
+
},
|
|
45
|
+
},
|
|
46
|
+
}),
|
|
47
|
+
];
|
|
48
|
+
},
|
|
49
|
+
});
|
|
50
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXRlLWxpbmstc2hvcnRjdXQuZXh0ZW5zaW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci10aXB0YXAtZWRpdG9yL3NyYy9saWIvZXh0ZW5zaW9ucy9hdGUtbGluay1zaG9ydGN1dC5leHRlbnNpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFVLFNBQVMsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUNqRCxPQUFPLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBU3JELDRFQUE0RTtBQUM1RSxNQUFNLFVBQVUsY0FBYyxDQUFDLEtBQW9CO0lBQ2pELE9BQU8sQ0FDTCxDQUFDLEtBQUssQ0FBQyxPQUFPLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQztRQUNoQyxDQUFDLEtBQUssQ0FBQyxRQUFRO1FBQ2YsQ0FBQyxLQUFLLENBQUMsTUFBTTtRQUNiLEtBQUssQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLEtBQUssR0FBRyxDQUNoQyxDQUFDO0FBQ0osQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBeUI7SUFDdEUsSUFBSSxFQUFFLGlCQUFpQjtJQUV2QixVQUFVO1FBQ1IsT0FBTztZQUNMLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJO1lBQ25CLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxTQUFTO1NBQ3RCLENBQUM7SUFDSixDQUFDO0lBRUQscUJBQXFCO1FBQ25CLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDM0IsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztRQUU3QixPQUFPO1lBQ0wsSUFBSSxNQUFNLENBQUM7Z0JBQ1QsR0FBRyxFQUFFLElBQUksU0FBUyxDQUFDLGlCQUFpQixDQUFDO2dCQUNyQyxLQUFLLEVBQUU7b0JBQ0wsYUFBYSxFQUFFLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFO3dCQUM3QixJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDOzRCQUM3QyxPQUFPLEtBQUssQ0FBQzt3QkFDZixDQUFDO3dCQUNELElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsS0FBSyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDOzRCQUMzRCxPQUFPLEtBQUssQ0FBQzt3QkFDZixDQUFDO3dCQUNELElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQzs0QkFDdkIsT0FBTyxLQUFLLENBQUM7d0JBQ2YsQ0FBQzt3QkFDRCxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7d0JBQ3ZCLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQzt3QkFDeEIsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQzt3QkFDckIsT0FBTyxJQUFJLENBQUM7b0JBQ2QsQ0FBQztpQkFDRjthQUNGLENBQUM7U0FDSCxDQUFDO0lBQ0osQ0FBQztDQUNGLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVkaXRvciwgRXh0ZW5zaW9uIH0gZnJvbSBcIkB0aXB0YXAvY29yZVwiO1xuaW1wb3J0IHsgUGx1Z2luLCBQbHVnaW5LZXkgfSBmcm9tIFwiQHRpcHRhcC9wbS9zdGF0ZVwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEF0ZUxpbmtTaG9ydGN1dE9wdGlvbnMge1xuICAvKiogV2hldGhlciBhIGxpbmsgY2FuIGJlIHNldCBvciBlZGl0ZWQgYXQgdGhlIGN1cnJlbnQgc2VsZWN0aW9uICovXG4gIGNhbk9wZW46ICgpID0+IGJvb2xlYW47XG4gIC8qKiBPcGVucyB0aGUgbGluayBlZGl0b3IgKi9cbiAgb3BlbjogKGVkaXRvcjogRWRpdG9yKSA9PiB2b2lkO1xufVxuXG4vKiogTWF0Y2hlcyB0aGUgYmFyZSBgTW9kK0tgIGNob3JkIChgQ21kK0tgIG9uIG1hY09TLCBgQ3RybCtLYCBlbHNld2hlcmUpICovXG5leHBvcnQgZnVuY3Rpb24gaXNMaW5rU2hvcnRjdXQoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiBib29sZWFuIHtcbiAgcmV0dXJuIChcbiAgICAoZXZlbnQubWV0YUtleSB8fCBldmVudC5jdHJsS2V5KSAmJlxuICAgICFldmVudC5zaGlmdEtleSAmJlxuICAgICFldmVudC5hbHRLZXkgJiZcbiAgICBldmVudC5rZXkudG9Mb3dlckNhc2UoKSA9PT0gXCJrXCJcbiAgKTtcbn1cblxuLyoqXG4gKiBgTW9kK0tgIG9wZW5zIHRoZSBsaW5rIGVkaXRvciB3aGVuIHRleHQgaXMgc2VsZWN0ZWQgb3IgdGhlIGN1cnNvciBpcyBvbiBhIGxpbmsuXG4gKiBXaXRoIGFuIGVtcHR5IHNlbGVjdGlvbiBvdXRzaWRlIGEgbGluayB0aGUgZXZlbnQgaXMgbGVmdCBhbG9uZSwgc28gaG9zdC1sZXZlbCBgTW9kK0tgXG4gKiBzaG9ydGN1dHMgKHNlYXJjaCwgY29tbWFuZCBwYWxldHRlcykga2VlcCB3b3JraW5nLlxuICovXG5leHBvcnQgY29uc3QgQXRlTGlua1Nob3J0Y3V0ID0gRXh0ZW5zaW9uLmNyZWF0ZTxBdGVMaW5rU2hvcnRjdXRPcHRpb25zPih7XG4gIG5hbWU6IFwiYXRlTGlua1Nob3J0Y3V0XCIsXG5cbiAgYWRkT3B0aW9ucygpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY2FuT3BlbjogKCkgPT4gdHJ1ZSxcbiAgICAgIG9wZW46ICgpID0+IHVuZGVmaW5lZCxcbiAgICB9O1xuICB9LFxuXG4gIGFkZFByb3NlTWlycm9yUGx1Z2lucygpIHtcbiAgICBjb25zdCBlZGl0b3IgPSB0aGlzLmVkaXRvcjtcbiAgICBjb25zdCBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xuXG4gICAgcmV0dXJuIFtcbiAgICAgIG5ldyBQbHVnaW4oe1xuICAgICAgICBrZXk6IG5ldyBQbHVnaW5LZXkoXCJhdGVMaW5rU2hvcnRjdXRcIiksXG4gICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgaGFuZGxlS2V5RG93bjogKHZpZXcsIGV2ZW50KSA9PiB7XG4gICAgICAgICAgICBpZiAoIWlzTGlua1Nob3J0Y3V0KGV2ZW50KSB8fCAhdmlldy5lZGl0YWJsZSkge1xuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodmlldy5zdGF0ZS5zZWxlY3Rpb24uZW1wdHkgJiYgIWVkaXRvci5pc0FjdGl2ZShcImxpbmtcIikpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFvcHRpb25zLmNhbk9wZW4oKSkge1xuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICBvcHRpb25zLm9wZW4oZWRpdG9yKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9KSxcbiAgICBdO1xuICB9LFxufSk7XG4iXX0=
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
import { Extension } from "@tiptap/core";
|
|
2
|
+
import { Fragment, Slice } from "@tiptap/pm/model";
|
|
3
|
+
import { Plugin, PluginKey } from "@tiptap/pm/state";
|
|
4
|
+
const IMAGE_NODE_NAMES = new Set(["resizableImage", "image"]);
|
|
5
|
+
const REMOTE_SRC = /^(https?:)?\/\//i;
|
|
6
|
+
const INLINE_SRC = /^data:(image\/[\w.+-]+);base64,(.*)$/is;
|
|
7
|
+
const PASTED_IMAGE_BASENAME = "pasted-image";
|
|
8
|
+
/**
|
|
9
|
+
* Classifies the `src` of an image found in pasted HTML.
|
|
10
|
+
* `unreachable` sources (e.g. `attachment:`, `file:`, `cid:`, foreign `blob:`) cannot be fetched by the page.
|
|
11
|
+
*/
|
|
12
|
+
export function classifyPastedImageSrc(src, origin = typeof location !== "undefined" ? location.origin : "") {
|
|
13
|
+
if (!src) {
|
|
14
|
+
return "unreachable";
|
|
15
|
+
}
|
|
16
|
+
if (REMOTE_SRC.test(src) || (src.startsWith("/") && !src.startsWith("//"))) {
|
|
17
|
+
return "remote";
|
|
18
|
+
}
|
|
19
|
+
if (origin && src.startsWith(`blob:${origin}/`)) {
|
|
20
|
+
return "remote";
|
|
21
|
+
}
|
|
22
|
+
return INLINE_SRC.test(src) ? "inline" : "unreachable";
|
|
23
|
+
}
|
|
24
|
+
/** Decodes a base64 image data URI into a `File`, or returns `null` when it is malformed */
|
|
25
|
+
export function dataUriToFile(src) {
|
|
26
|
+
const match = INLINE_SRC.exec(src);
|
|
27
|
+
if (!match) {
|
|
28
|
+
return null;
|
|
29
|
+
}
|
|
30
|
+
const mimeType = match[1].toLowerCase();
|
|
31
|
+
try {
|
|
32
|
+
const binary = atob(match[2].replace(/\s/g, ""));
|
|
33
|
+
const bytes = Uint8Array.from(binary, char => char.codePointAt(0) ?? 0);
|
|
34
|
+
const extension = mimeType.split("/")[1].split("+")[0];
|
|
35
|
+
return new File([bytes], `${PASTED_IMAGE_BASENAME}.${extension}`, { type: mimeType });
|
|
36
|
+
}
|
|
37
|
+
catch {
|
|
38
|
+
return null;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
function isImageNode(node) {
|
|
42
|
+
return IMAGE_NODE_NAMES.has(node.type.name);
|
|
43
|
+
}
|
|
44
|
+
/** Removes unreachable images from a pasted slice and lists the base64 sources it keeps */
|
|
45
|
+
export function sanitizePastedImages(slice) {
|
|
46
|
+
const inlineSources = new Set();
|
|
47
|
+
const droppedSources = [];
|
|
48
|
+
const sanitize = (fragment) => {
|
|
49
|
+
const kept = [];
|
|
50
|
+
fragment.forEach(child => {
|
|
51
|
+
if (isImageNode(child)) {
|
|
52
|
+
const src = child.attrs["src"];
|
|
53
|
+
const source = classifyPastedImageSrc(src);
|
|
54
|
+
if (source === "unreachable") {
|
|
55
|
+
droppedSources.push(src ?? "");
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
if (source === "inline" && src) {
|
|
59
|
+
inlineSources.add(src);
|
|
60
|
+
}
|
|
61
|
+
kept.push(child);
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
kept.push(child.isLeaf ? child : child.copy(sanitize(child.content)));
|
|
65
|
+
});
|
|
66
|
+
return Fragment.fromArray(kept);
|
|
67
|
+
};
|
|
68
|
+
const content = sanitize(slice.content);
|
|
69
|
+
if (!droppedSources.length) {
|
|
70
|
+
return { slice, inlineSources: [...inlineSources], droppedSources };
|
|
71
|
+
}
|
|
72
|
+
const openStart = content.firstChild === slice.content.firstChild ? slice.openStart : 0;
|
|
73
|
+
const openEnd = content.lastChild === slice.content.lastChild ? slice.openEnd : 0;
|
|
74
|
+
return {
|
|
75
|
+
slice: new Slice(content, openStart, openEnd),
|
|
76
|
+
inlineSources: [...inlineSources],
|
|
77
|
+
droppedSources,
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
function replaceImageSrc(editor, previousSrc, nextSrc) {
|
|
81
|
+
if (editor.isDestroyed) {
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
const { state } = editor;
|
|
85
|
+
const matches = [];
|
|
86
|
+
state.doc.descendants((node, pos) => {
|
|
87
|
+
if (isImageNode(node) && node.attrs["src"] === previousSrc) {
|
|
88
|
+
matches.push({ pos, node });
|
|
89
|
+
}
|
|
90
|
+
});
|
|
91
|
+
if (!matches.length) {
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
const tr = state.tr;
|
|
95
|
+
for (const { pos, node } of [...matches].reverse()) {
|
|
96
|
+
if (nextSrc) {
|
|
97
|
+
tr.setNodeMarkup(pos, undefined, { ...node.attrs, src: nextSrc });
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
tr.delete(pos, pos + node.nodeSize);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
editor.view.dispatch(tr);
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Cleans images coming from pasted HTML (e.g. Notion, Google Docs, Office):
|
|
107
|
+
* - drops images whose source the page cannot load, instead of inserting broken images;
|
|
108
|
+
* - sends base64 images through the upload handler (when one is configured) and swaps in the hosted URL.
|
|
109
|
+
*
|
|
110
|
+
* File-based clipboard images keep going through the regular paste upload flow.
|
|
111
|
+
*/
|
|
112
|
+
export const AtePastedImage = Extension.create({
|
|
113
|
+
name: "atePastedImage",
|
|
114
|
+
addOptions() {
|
|
115
|
+
return {
|
|
116
|
+
shouldRehost: () => false,
|
|
117
|
+
rehost: () => Promise.reject(new Error("No upload handler configured")),
|
|
118
|
+
onRejected: () => undefined,
|
|
119
|
+
};
|
|
120
|
+
},
|
|
121
|
+
addProseMirrorPlugins() {
|
|
122
|
+
const editor = this.editor;
|
|
123
|
+
const options = this.options;
|
|
124
|
+
const rehost = (src) => {
|
|
125
|
+
const file = dataUriToFile(src);
|
|
126
|
+
if (!file) {
|
|
127
|
+
replaceImageSrc(editor, src, null);
|
|
128
|
+
options.onRejected({ reason: "unreachable", src });
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
options
|
|
132
|
+
.rehost(file)
|
|
133
|
+
.then(url => replaceImageSrc(editor, src, url))
|
|
134
|
+
.catch(() => {
|
|
135
|
+
replaceImageSrc(editor, src, null);
|
|
136
|
+
options.onRejected({ reason: "upload-failed", src });
|
|
137
|
+
});
|
|
138
|
+
};
|
|
139
|
+
return [
|
|
140
|
+
new Plugin({
|
|
141
|
+
key: new PluginKey("atePastedImage"),
|
|
142
|
+
props: {
|
|
143
|
+
transformPasted: slice => {
|
|
144
|
+
const { slice: sanitized, inlineSources, droppedSources } = sanitizePastedImages(slice);
|
|
145
|
+
droppedSources.forEach(src => options.onRejected({ reason: "unreachable", src }));
|
|
146
|
+
if (inlineSources.length && options.shouldRehost()) {
|
|
147
|
+
queueMicrotask(() => inlineSources.forEach(rehost));
|
|
148
|
+
}
|
|
149
|
+
return sanitized;
|
|
150
|
+
},
|
|
151
|
+
},
|
|
152
|
+
}),
|
|
153
|
+
];
|
|
154
|
+
},
|
|
155
|
+
});
|
|
156
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXRlLXBhc3RlZC1pbWFnZS5leHRlbnNpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLXRpcHRhcC1lZGl0b3Ivc3JjL2xpYi9leHRlbnNpb25zL2F0ZS1wYXN0ZWQtaW1hZ2UuZXh0ZW5zaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBVSxTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDakQsT0FBTyxFQUFFLFFBQVEsRUFBMkIsS0FBSyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDNUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUdyRCxNQUFNLGdCQUFnQixHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsZ0JBQWdCLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztBQUM5RCxNQUFNLFVBQVUsR0FBRyxrQkFBa0IsQ0FBQztBQUN0QyxNQUFNLFVBQVUsR0FBRyx3Q0FBd0MsQ0FBQztBQUM1RCxNQUFNLHFCQUFxQixHQUFHLGNBQWMsQ0FBQztBQWE3Qzs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsc0JBQXNCLENBQ3BDLEdBQThCLEVBQzlCLFNBQWlCLE9BQU8sUUFBUSxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRTtJQUV2RSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDVCxPQUFPLGFBQWEsQ0FBQztJQUN2QixDQUFDO0lBQ0QsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQzNFLE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFDRCxJQUFJLE1BQU0sSUFBSSxH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RSxHQUFHLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxDQUFDO3dCQUN4RixjQUFjLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxhQUFhLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO3dCQUNsRixJQUFJLGFBQWEsQ0FBQyxNQUFNLElBQUksT0FBTyxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUM7NEJBQ25ELGNBQWMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7d0JBQ3RELENBQUM7d0JBQ0QsT0FBTyxTQUFTLENBQUM7b0JBQ25CLENBQUM7aUJBQ0Y7YUFDRixDQUFDO1NBQ0gsQ0FBQztJQUNKLENBQUM7Q0FDRixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFZGl0b3IsIEV4dGVuc2lvbiB9IGZyb20gXCJAdGlwdGFwL2NvcmVcIjtcbmltcG9ydCB7IEZyYWdtZW50LCBOb2RlIGFzIFByb3NlTWlycm9yTm9kZSwgU2xpY2UgfSBmcm9tIFwiQHRpcHRhcC9wbS9tb2RlbFwiO1xuaW1wb3J0IHsgUGx1Z2luLCBQbHVnaW5LZXkgfSBmcm9tIFwiQHRpcHRhcC9wbS9zdGF0ZVwiO1xuaW1wb3J0IHsgQXRlUGFzdGVkSW1hZ2VSZWplY3Rpb24gfSBmcm9tIFwiLi4vbW9kZWxzL2F0ZS1pbWFnZS5tb2RlbFwiO1xuXG5jb25zdCBJTUFHRV9OT0RFX05BTUVTID0gbmV3IFNldChbXCJyZXNpemFibGVJbWFnZVwiLCBcImltYWdlXCJdKTtcbmNvbnN0IFJFTU9URV9TUkMgPSAvXihodHRwcz86KT9cXC9cXC8vaTtcbmNvbnN0IElOTElORV9TUkMgPSAvXmRhdGE6KGltYWdlXFwvW1xcdy4rLV0rKTtiYXNlNjQsKC4qKSQvaXM7XG5jb25zdCBQQVNURURfSU1BR0VfQkFTRU5BTUUgPSBcInBhc3RlZC1pbWFnZVwiO1xuXG5leHBvcnQgdHlwZSBBdGVQYXN0ZWRJbWFnZVNvdXJjZSA9IFwicmVtb3RlXCIgfCBcImlubGluZVwiIHwgXCJ1bnJlYWNoYWJsZVwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEF0ZVBhc3RlZEltYWdlT3B0aW9ucyB7XG4gIC8qKiBXaGV0aGVyIHBhc3RlZCBiYXNlNjQgaW1hZ2VzIHNob3VsZCBiZSBzZW50IHRvIHRoZSB1cGxvYWQgaGFuZGxlciAqL1xuICBzaG91bGRSZWhvc3Q6ICgpID0+IGJvb2xlYW47XG4gIC8qKiBVcGxvYWRzIGEgcGFzdGVkIGJhc2U2NCBpbWFnZSBhbmQgcmVzb2x2ZXMgdG8gaXRzIGhvc3RlZCBVUkwgKi9cbiAgcmVob3N0OiAoZmlsZTogRmlsZSkgPT4gUHJvbWlzZTxzdHJpbmc+O1xuICAvKiogQ2FsbGVkIGZvciBldmVyeSBwYXN0ZWQgaW1hZ2UgdGhhdCBjb3VsZCBub3QgYmUga2VwdCAqL1xuICBvblJlamVjdGVkOiAocmVqZWN0aW9uOiBBdGVQYXN0ZWRJbWFnZVJlamVjdGlvbikgPT4gdm9pZDtcbn1cblxuLyoqXG4gKiBDbGFzc2lmaWVzIHRoZSBgc3JjYCBvZiBhbiBpbWFnZSBmb3VuZCBpbiBwYXN0ZWQgSFRNTC5cbiAqIGB1bnJlYWNoYWJsZWAgc291cmNlcyAoZS5nLiBgYXR0YWNobWVudDpgLCBgZmlsZTpgLCBgY2lkOmAsIGZvcmVpZ24gYGJsb2I6YCkgY2Fubm90IGJlIGZldGNoZWQgYnkgdGhlIHBhZ2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjbGFzc2lmeVBhc3RlZEltYWdlU3JjKFxuICBzcmM6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQsXG4gIG9yaWdpbjogc3RyaW5nID0gdHlwZW9mIGxvY2F0aW9uICE9PSBcInVuZGVmaW5lZFwiID8gbG9jYXRpb24ub3JpZ2luIDogXCJcIlxuKTogQXRlUGFzdGVkSW1hZ2VTb3VyY2Uge1xuICBpZiAoIXNyYykge1xuICAgIHJldHVybiBcInVucmVhY2hhYmxlXCI7XG4gIH1cbiAgaWYgKFJFTU9URV9TUkMudGVzdChzcmMpIHx8IChzcmMuc3RhcnRzV2l0aChcIi9cIikgJiYgIXNyYy5zdGFydHNXaXRoKFwiLy9cIikpKSB7XG4gICAgcmV0dXJuIFwicmVtb3RlXCI7XG4gIH1cbiAgaWYgKG9yaWdpbiAmJiBzcmMuc3RhcnRzV2l0aChgYmxvYjoke29yaWdpbn0vYCkpIHtcbiAgICByZXR1cm4gXCJyZW1vdGVcIjtcbiAgfVxuICByZXR1cm4gSU5MSU5FX1NSQy50ZXN0KHNyYykgPyBcImlubGluZVwiIDogXCJ1bnJlYWNoYWJsZVwiO1xufVxuXG4vKiogRGVjb2RlcyBhIGJhc2U2NCBpbWFnZSBkYXRhIFVSSSBpbnRvIGEgYEZpbGVgLCBvciByZXR1cm5zIGBudWxsYCB3aGVuIGl0IGlzIG1hbGZvcm1lZCAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRhdGFVcmlUb0ZpbGUoc3JjOiBzdHJpbmcpOiBGaWxlIHwgbnVsbCB7XG4gIGNvbnN0IG1hdGNoID0gSU5MSU5FX1NSQy5leGVjKHNyYyk7XG4gIGlmICghbWF0Y2gpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBjb25zdCBtaW1lVHlwZSA9IG1hdGNoWzFdLnRvTG93ZXJDYXNlKCk7XG4gIHRyeSB7XG4gICAgY29uc3QgYmluYXJ5ID0gYXRvYihtYXRjaFsyXS5yZXBsYWNlKC9cXHMvZywgXCJcIikpO1xuICAgIGNvbnN0IGJ5dGVzID0gVWludDhBcnJheS5mcm9tKGJpbmFyeSwgY2hhciA9PiBjaGFyLmNvZGVQb2ludEF0KDApID8/IDApO1xuICAgIGNvbnN0IGV4dGVuc2lvbiA9IG1pbWVUeXBlLnNwbGl0KFwiL1wiKVsxXS5zcGxpdChcIitcIilbMF07XG4gICAgcmV0dXJuIG5ldyBGaWxlKFtieXRlc10sIGAke1BBU1RFRF9JTUFHRV9CQVNFTkFNRX0uJHtleHRlbnNpb259YCwgeyB0eXBlOiBtaW1lVHlwZSB9KTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNJbWFnZU5vZGUobm9kZTogUHJvc2VNaXJyb3JOb2RlKTogYm9vbGVhbiB7XG4gIHJldHVybiBJTUFHRV9OT0RFX05BTUVTLmhhcyhub2RlLnR5cGUubmFtZSk7XG59XG5cbi8qKiBSZW1vdmVzIHVucmVhY2hhYmxlIGltYWdlcyBmcm9tIGEgcGFzdGVkIHNsaWNlIGFuZCBsaXN0cyB0aGUgYmFzZTY0IHNvdXJjZXMgaXQga2VlcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiBzYW5pdGl6ZVBhc3RlZEltYWdlcyhzbGljZTogU2xpY2UpOiB7XG4gIHNsaWNlOiBTbGljZTtcbiAgaW5saW5lU291cmNlczogc3RyaW5nW107XG4gIGRyb3BwZWRTb3VyY2VzOiBzdHJpbmdbXTtcbn0ge1xuICBjb25zdCBpbmxpbmVTb3VyY2VzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIGNvbnN0IGRyb3BwZWRTb3VyY2VzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIGNvbnN0IHNhbml0aXplID0gKGZyYWdtZW50OiBGcmFnbWVudCk6IEZyYWdtZW50ID0+IHtcbiAgICBjb25zdCBrZXB0OiBQcm9zZU1pcnJvck5vZGVbXSA9IFtdO1xuICAgIGZyYWdtZW50LmZvckVhY2goY2hpbGQgPT4ge1xuICAgICAgaWYgKGlzSW1hZ2VOb2RlKGNoaWxkKSkge1xuICAgICAgICBjb25zdCBzcmMgPSBjaGlsZC5hdHRyc1tcInNyY1wiXSBhcyBzdHJpbmcgfCBudWxsO1xuICAgICAgICBjb25zdCBzb3VyY2UgPSBjbGFzc2lmeVBhc3RlZEltYWdlU3JjKHNyYyk7XG4gICAgICAgIGlmIChzb3VyY2UgPT09IFwidW5yZWFjaGFibGVcIikge1xuICAgICAgICAgIGRyb3BwZWRTb3VyY2VzLnB1c2goc3JjID8/IFwiXCIpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc291cmNlID09PSBcImlubGluZVwiICYmIHNyYykge1xuICAgICAgICAgIGlubGluZVNvdXJjZXMuYWRkKHNyYyk7XG4gICAgICAgIH1cbiAgICAgICAga2VwdC5wdXNoKGNoaWxkKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAga2VwdC5wdXNoKGNoaWxkLmlzTGVhZiA/IGNoaWxkIDogY2hpbGQuY29weShzYW5pdGl6ZShjaGlsZC5jb250ZW50KSkpO1xuICAgIH0pO1xuICAgIHJldHVybiBGcmFnbWVudC5mcm9tQXJyYXkoa2VwdCk7XG4gIH07XG5cbiAgY29uc3QgY29udGVudCA9IHNhbml0aXplKHNsaWNlLmNvbnRlbnQpO1xuICBpZiAoIWRyb3BwZWRTb3VyY2VzLmxlbmd0aCkge1xuICAgIHJldHVybiB7IHNsaWNlLCBpbmxpbmVTb3VyY2VzOiBbLi4uaW5saW5lU291cmNlc10sIGRyb3BwZWRTb3VyY2VzIH07XG4gIH1cbiAgY29uc3Qgb3BlblN0YXJ0ID0gY29udGVudC5maXJzdENoaWxkID09PSBzbGljZS5jb250ZW50LmZpcnN0Q2hpbGQgPyBzbGljZS5vcGVuU3RhcnQgOiAwO1xuICBjb25zdCBvcGVuRW5kID0gY29udGVudC5sYXN0Q2hpbGQgPT09IHNsaWNlLmNvbnRlbnQubGFzdENoaWxkID8gc2xpY2Uub3BlbkVuZCA6IDA7XG4gIHJldHVybiB7XG4gICAgc2xpY2U6IG5ldyBTbGljZShjb250ZW50LCBvcGVuU3RhcnQsIG9wZW5FbmQpLFxuICAgIGlubGluZVNvdXJjZXM6IFsuLi5pbmxpbmVTb3VyY2VzXSxcbiAgICBkcm9wcGVkU291cmNlcyxcbiAgfTtcbn1cblxuZnVuY3Rpb24gcmVwbGFjZUltYWdlU3JjKGVkaXRvcjogRWRpdG9yLCBwcmV2aW91c1NyYzogc3RyaW5nLCBuZXh0U3JjOiBzdHJpbmcgfCBudWxsKTogdm9pZCB7XG4gIGlmIChlZGl0b3IuaXNEZXN0cm95ZWQpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgeyBzdGF0ZSB9ID0gZWRpdG9yO1xuICBjb25zdCBtYXRjaGVzOiB7IHBvczogbnVtYmVyOyBub2RlOiBQcm9zZU1pcnJvck5vZGUgfVtdID0gW107XG4gIHN0YXRlLmRvYy5kZXNjZW5kYW50cygobm9kZSwgcG9zKSA9PiB7XG4gICAgaWYgKGlzSW1hZ2VOb2RlKG5vZGUpICYmIG5vZGUuYXR0cnNbXCJzcmNcIl0gPT09IHByZXZpb3VzU3JjKSB7XG4gICAgICBtYXRjaGVzLnB1c2goeyBwb3MsIG5vZGUgfSk7XG4gICAgfVxuICB9KTtcbiAgaWYgKCFtYXRjaGVzLmxlbmd0aCkge1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCB0ciA9IHN0YXRlLnRyO1xuICBmb3IgKGNvbnN0IHsgcG9zLCBub2RlIH0gb2YgWy4uLm1hdGNoZXNdLnJldmVyc2UoKSkge1xuICAgIGlmIChuZXh0U3JjKSB7XG4gICAgICB0ci5zZXROb2RlTWFya3VwKHBvcywgdW5kZWZpbmVkLCB7IC4uLm5vZGUuYXR0cnMsIHNyYzogbmV4dFNyYyB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdHIuZGVsZXRlKHBvcywgcG9zICsgbm9kZS5ub2RlU2l6ZSk7XG4gICAgfVxuICB9XG4gIGVkaXRvci52aWV3LmRpc3BhdGNoKHRyKTtcbn1cblxuLyoqXG4gKiBDbGVhbnMgaW1hZ2VzIGNvbWluZyBmcm9tIHBhc3RlZCBIVE1MIChlLmcuIE5vdGlvbiwgR29vZ2xlIERvY3MsIE9mZmljZSk6XG4gKiAtIGRyb3BzIGltYWdlcyB3aG9zZSBzb3VyY2UgdGhlIHBhZ2UgY2Fubm90IGxvYWQsIGluc3RlYWQgb2YgaW5zZXJ0aW5nIGJyb2tlbiBpbWFnZXM7XG4gKiAtIHNlbmRzIGJhc2U2NCBpbWFnZXMgdGhyb3VnaCB0aGUgdXBsb2FkIGhhbmRsZXIgKHdoZW4gb25lIGlzIGNvbmZpZ3VyZWQpIGFuZCBzd2FwcyBpbiB0aGUgaG9zdGVkIFVSTC5cbiAqXG4gKiBGaWxlLWJhc2VkIGNsaXBib2FyZCBpbWFnZXMga2VlcCBnb2luZyB0aHJvdWdoIHRoZSByZWd1bGFyIHBhc3RlIHVwbG9hZCBmbG93LlxuICovXG5leHBvcnQgY29uc3QgQXRlUGFzdGVkSW1hZ2UgPSBFeHRlbnNpb24uY3JlYXRlPEF0ZVBhc3RlZEltYWdlT3B0aW9ucz4oe1xuICBuYW1lOiBcImF0ZVBhc3RlZEltYWdlXCIsXG5cbiAgYWRkT3B0aW9ucygpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc2hvdWxkUmVob3N0OiAoKSA9PiBmYWxzZSxcbiAgICAgIHJlaG9zdDogKCkgPT4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiTm8gdXBsb2FkIGhhbmRsZXIgY29uZmlndXJlZFwiKSksXG4gICAgICBvblJlamVjdGVkOiAoKSA9PiB1bmRlZmluZWQsXG4gICAgfTtcbiAgfSxcblxuICBhZGRQcm9zZU1pcnJvclBsdWdpbnMoKSB7XG4gICAgY29uc3QgZWRpdG9yID0gdGhpcy5lZGl0b3I7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcblxuICAgIGNvbnN0IHJlaG9zdCA9IChzcmM6IHN0cmluZyk6IHZvaWQgPT4ge1xuICAgICAgY29uc3QgZmlsZSA9IGRhdGFVcmlUb0ZpbGUoc3JjKTtcbiAgICAgIGlmICghZmlsZSkge1xuICAgICAgICByZXBsYWNlSW1hZ2VTcmMoZWRpdG9yLCBzcmMsIG51bGwpO1xuICAgICAgICBvcHRpb25zLm9uUmVqZWN0ZWQoeyByZWFzb246IFwidW5yZWFjaGFibGVcIiwgc3JjIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBvcHRpb25zXG4gICAgICAgIC5yZWhvc3QoZmlsZSlcbiAgICAgICAgLnRoZW4odXJsID0+IHJlcGxhY2VJbWFnZVNyYyhlZGl0b3IsIHNyYywgdXJsKSlcbiAgICAgICAgLmNhdGNoKCgpID0+IHtcbiAgICAgICAgICByZXBsYWNlSW1hZ2VTcmMoZWRpdG9yLCBzcmMsIG51bGwpO1xuICAgICAgICAgIG9wdGlvbnMub25SZWplY3RlZCh7IHJlYXNvbjogXCJ1cGxvYWQtZmFpbGVkXCIsIHNyYyB9KTtcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIHJldHVybiBbXG4gICAgICBuZXcgUGx1Z2luKHtcbiAgICAgICAga2V5OiBuZXcgUGx1Z2luS2V5KFwiYXRlUGFzdGVkSW1hZ2VcIiksXG4gICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgdHJhbnNmb3JtUGFzdGVkOiBzbGljZSA9PiB7XG4gICAgICAgICAgICBjb25zdCB7IHNsaWNlOiBzYW5pdGl6ZWQsIGlubGluZVNvdXJjZXMsIGRyb3BwZWRTb3VyY2VzIH0gPSBzYW5pdGl6ZVBhc3RlZEltYWdlcyhzbGljZSk7XG4gICAgICAgICAgICBkcm9wcGVkU291cmNlcy5mb3JFYWNoKHNyYyA9PiBvcHRpb25zLm9uUmVqZWN0ZWQoeyByZWFzb246IFwidW5yZWFjaGFibGVcIiwgc3JjIH0pKTtcbiAgICAgICAgICAgIGlmIChpbmxpbmVTb3VyY2VzLmxlbmd0aCAmJiBvcHRpb25zLnNob3VsZFJlaG9zdCgpKSB7XG4gICAgICAgICAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IGlubGluZVNvdXJjZXMuZm9yRWFjaChyZWhvc3QpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBzYW5pdGl6ZWQ7XG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0pLFxuICAgIF07XG4gIH0sXG59KTtcbiJdfQ==
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXRlLWltYWdlLm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci10aXB0YXAtZWRpdG9yL3NyYy9saWIvbW9kZWxzL2F0ZS1pbWFnZS5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gXCJyeGpzXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXRlSW1hZ2VEYXRhIHtcbiAgc3JjOiBzdHJpbmc7XG4gIGFsdD86IHN0cmluZztcbiAgdGl0bGU/OiBzdHJpbmc7XG4gIHdpZHRoPzogbnVtYmVyO1xuICBoZWlnaHQ/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXRlSW1hZ2VVcGxvYWRSZXN1bHQge1xuICBzcmM6IHN0cmluZztcbiAgbmFtZTogc3RyaW5nO1xuICBzaXplOiBudW1iZXI7XG4gIHR5cGU6IHN0cmluZztcbiAgd2lkdGg/
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXRlLWltYWdlLm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci10aXB0YXAtZWRpdG9yL3NyYy9saWIvbW9kZWxzL2F0ZS1pbWFnZS5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gXCJyeGpzXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXRlSW1hZ2VEYXRhIHtcbiAgc3JjOiBzdHJpbmc7XG4gIGFsdD86IHN0cmluZztcbiAgdGl0bGU/OiBzdHJpbmc7XG4gIHdpZHRoPzogbnVtYmVyO1xuICBoZWlnaHQ/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXRlSW1hZ2VVcGxvYWRSZXN1bHQge1xuICBzcmM6IHN0cmluZztcbiAgbmFtZTogc3RyaW5nO1xuICBzaXplOiBudW1iZXI7XG4gIHR5cGU6IHN0cmluZztcbiAgd2lkdGg/OiBudW1iZXI7XG4gIGhlaWdodD86IG51bWJlcjtcbiAgb3JpZ2luYWxTaXplPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIEVtaXR0ZWQgd2hlbiBhbiBpbWFnZSBmb3VuZCBpbiBwYXN0ZWQgSFRNTCBjYW5ub3QgYmUga2VwdC5cbiAqIC0gYHVucmVhY2hhYmxlYDogdGhlIHBhZ2UgY2Fubm90IGxvYWQgaXRzIHNvdXJjZSAoZS5nLiBgYXR0YWNobWVudDpgLCBgZmlsZTpgLCBgY2lkOmAsIGZvcmVpZ24gYGJsb2I6YCwgbWFsZm9ybWVkIGJhc2U2NClcbiAqIC0gYHVwbG9hZC1mYWlsZWRgOiBhIHBhc3RlZCBiYXNlNjQgaW1hZ2Ugd2FzIHJlamVjdGVkIGJ5IHZhbGlkYXRpb24gb3IgYnkgdGhlIHVwbG9hZCBoYW5kbGVyXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXRlUGFzdGVkSW1hZ2VSZWplY3Rpb24ge1xuICByZWFzb246IFwidW5yZWFjaGFibGVcIiB8IFwidXBsb2FkLWZhaWxlZFwiO1xuICBzcmM6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBdGVSZXNpemVPcHRpb25zIHtcbiAgd2lkdGg/OiBudW1iZXI7XG4gIGhlaWdodD86IG51bWJlcjtcbiAgbWFpbnRhaW5Bc3BlY3RSYXRpbz86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXRlSW1hZ2VVcGxvYWRPcHRpb25zIHtcbiAgcXVhbGl0eT86IG51bWJlcjtcbiAgbWF4V2lkdGg/OiBudW1iZXI7XG4gIG1heEhlaWdodD86IG51bWJlcjtcbiAgbWF4U2l6ZT86IG51bWJlcjsgLy8gaW4gYnl0ZXNcbiAgYWxsb3dlZFR5cGVzPzogc3RyaW5nW107XG59XG5cbi8qKlxuICogQ29udGV4dCBwYXNzZWQgdG8gdGhlIGltYWdlIHVwbG9hZCBoYW5kbGVyIGNvbnRhaW5pbmcgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGltYWdlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXRlSW1hZ2VVcGxvYWRDb250ZXh0IHtcbiAgLyoqIE9yaWdpbmFsIGZpbGUgYmVpbmcgdXBsb2FkZWQgKi9cbiAgZmlsZTogRmlsZTtcbiAgLyoqIFdpZHRoIG9mIHRoZSBwcm9jZXNzZWQgaW1hZ2UgKi9cbiAgd2lkdGg6IG51bWJlcjtcbiAgLyoqIEhlaWdodCBvZiB0aGUgcHJvY2Vzc2VkIGltYWdlICovXG4gIGhlaWdodDogbnVtYmVyO1xuICAvKiogTUlNRSB0eXBlIG9mIHRoZSBpbWFnZSAqL1xuICB0eXBlOiBzdHJpbmc7XG4gIC8qKiBCYXNlNjQgZGF0YSBVUkwgb2YgdGhlIHByb2Nlc3NlZCBpbWFnZSAoYWZ0ZXIgY29tcHJlc3Npb24vcmVzaXplKSAqL1xuICBiYXNlNjQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBSZXN1bHQgZXhwZWN0ZWQgZnJvbSBhIGN1c3RvbSBpbWFnZSB1cGxvYWQgaGFuZGxlci5cbiAqIE11c3QgY29udGFpbiBhdCBsZWFzdCB0aGUgYHNyY2AgcHJvcGVydHkgd2l0aCB0aGUgaW1hZ2UgVVJMLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEF0ZUltYWdlVXBsb2FkSGFuZGxlclJlc3VsdCB7XG4gIC8qKiBVUkwgb2YgdGhlIHVwbG9hZGVkIGltYWdlIChjYW4gYmUgYSByZW1vdGUgVVJMIG9yIGFueSBzdHJpbmcpICovXG4gIHNyYzogc3RyaW5nO1xuICAvKiogT3B0aW9uYWwgY3VzdG9tIGFsdCB0ZXh0ICovXG4gIGFsdD86IHN0cmluZztcbiAgLyoqIE9wdGlvbmFsIGN1c3RvbSB0aXRsZSAqL1xuICB0aXRsZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBDdXN0b20gaGFuZGxlciBmdW5jdGlvbiBmb3IgaW1hZ2UgdXBsb2Fkcy5cbiAqIEFsbG93cyB1c2VycyB0byBpbXBsZW1lbnQgdGhlaXIgb3duIGltYWdlIHN0b3JhZ2UgbG9naWMgKGUuZy4sIHVwbG9hZCB0byBTMywgQ2xvdWRpbmFyeSwgZXRjLilcbiAqXG4gKiBDYW4gcmV0dXJuIGVpdGhlciBhIFByb21pc2Ugb3IgYW4gT2JzZXJ2YWJsZSAoQW5ndWxhci1mcmllbmRseSkuXG4gKlxuICogQHBhcmFtIGNvbnRleHQgLSBDb250ZXh0IGNvbnRhaW5pbmcgdGhlIGltYWdlIGZpbGUgYW5kIG1ldGFkYXRhXG4gKiBAcmV0dXJucyBQcm9taXNlIG9yIE9ic2VydmFibGUgcmVzb2x2aW5nIHRvIEltYWdlVXBsb2FkSGFuZGxlclJlc3VsdFxuICpcbiAqIEBleGFtcGxlIFVzaW5nIFByb21pc2UgKGFzeW5jL2F3YWl0KVxuICogYGBgdHlwZXNjcmlwdFxuICogdXBsb2FkSGFuZGxlcjogSW1hZ2VVcGxvYWRIYW5kbGVyID0gYXN5bmMgKGN0eCkgPT4ge1xuICogICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICogICBmb3JtRGF0YS5hcHBlbmQoJ2ltYWdlJywgY3R4LmZpbGUpO1xuICogICBjb25zdCByZXN1bHQgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbSh0aGlzLmh0dHAucG9zdDx7dXJsOiBzdHJpbmd9PignL2FwaS91cGxvYWQnLCBmb3JtRGF0YSkpO1xuICogICByZXR1cm4geyBzcmM6IHJlc3VsdC51cmwgfTtcbiAqIH07XG4gKiBgYGBcbiAqXG4gKiBAZXhhbXBsZSBVc2luZyBPYnNlcnZhYmxlIChBbmd1bGFyIEh0dHBDbGllbnQpXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiB1cGxvYWRIYW5kbGVyOiBJbWFnZVVwbG9hZEhhbmRsZXIgPSAoY3R4KSA9PiB7XG4gKiAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gKiAgIGZvcm1EYXRhLmFwcGVuZCgnaW1hZ2UnLCBjdHguZmlsZSk7XG4gKiAgIHJldHVybiB0aGlzLmh0dHAucG9zdDx7dXJsOiBzdHJpbmd9PignL2FwaS91cGxvYWQnLCBmb3JtRGF0YSkucGlwZShcbiAqICAgICBtYXAocmVzdWx0ID0+ICh7IHNyYzogcmVzdWx0LnVybCB9KSlcbiAqICAgKTtcbiAqIH07XG4gKiBgYGBcbiAqL1xuZXhwb3J0IHR5cGUgQXRlSW1hZ2VVcGxvYWRIYW5kbGVyID0gKFxuICBjb250ZXh0OiBBdGVJbWFnZVVwbG9hZENvbnRleHRcbikgPT4gUHJvbWlzZTxBdGVJbWFnZVVwbG9hZEhhbmRsZXJSZXN1bHQ+IHwgT2JzZXJ2YWJsZTxBdGVJbWFnZVVwbG9hZEhhbmRsZXJSZXN1bHQ+O1xuXG4vKipcbiAqIEludGVyZmFjZSBkZWRpY2F0ZWQgdG8gaW1hZ2UgdXBsb2FkIGNvbmZpZ3VyYXRpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXRlSW1hZ2VVcGxvYWRDb25maWcge1xuICAvKiogQ2FsbGJhY2sgZnVuY3Rpb24gdG8gaGFuZGxlIHVwbG9hZCAoUHJvbWlzZSBvciBPYnNlcnZhYmxlKSAqL1xuICBoYW5kbGVyPzogQXRlSW1hZ2VVcGxvYWRIYW5kbGVyO1xuICAvKiogQ29tcHJlc3Npb24gcXVhbGl0eSAoMCB0byAxKSAqL1xuICBxdWFsaXR5PzogbnVtYmVyO1xuICAvKiogTWF4aW11bSBhbGxvd2VkIHdpZHRoIGluIHBpeGVscyAqL1xuICBtYXhXaWR0aD86IG51bWJlcjtcbiAgLyoqIE1heGltdW0gYWxsb3dlZCBoZWlnaHQgaW4gcGl4ZWxzICovXG4gIG1heEhlaWdodD86IG51bWJlcjtcbiAgLyoqIE1heGltdW0gYWxsb3dlZCBzaXplIGluIE1CICovXG4gIG1heFNpemU/OiBudW1iZXI7XG4gIC8qKiBBY2NlcHRlZCBmaWxlIHR5cGVzIChlLmcuLCBbJ2ltYWdlL2pwZWcnLCAnaW1hZ2UvcG5nJ10pICovXG4gIGFsbG93ZWRUeXBlcz86IHN0cmluZ1tdO1xufVxuIl19
|
|
@@ -501,10 +501,16 @@ export class AteEditorCommandsService {
|
|
|
501
501
|
handleImagePaste(editor, event, options) {
|
|
502
502
|
return this.imageService.handlePaste(editor, event, options);
|
|
503
503
|
}
|
|
504
|
+
rehostImage(file, options) {
|
|
505
|
+
return this.imageService.rehostImage(file, options);
|
|
506
|
+
}
|
|
507
|
+
get hasUploadHandler() {
|
|
508
|
+
return this.imageService.uploadHandler !== null;
|
|
509
|
+
}
|
|
504
510
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AteEditorCommandsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
505
511
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AteEditorCommandsService }); }
|
|
506
512
|
}
|
|
507
513
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AteEditorCommandsService, decorators: [{
|
|
508
514
|
type: Injectable
|
|
509
515
|
}] });
|
|
510
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXRlLWVkaXRvci1jb21tYW5kcy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci10aXB0YXAtZWRpdG9yL3NyYy9saWIvc2VydmljZXMvYXRlLWVkaXRvci1jb21tYW5kcy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDbkUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxnQkFBZ0IsRUFBcUMsTUFBTSxzQkFBc0IsQ0FBQztBQUMzRixPQUFPLEVBQTBCLHdCQUF3QixFQUFFLE1BQU0sa0NBQWtDLENBQUM7O0FBUXBHLE1BQU0sT0FBTyx3QkFBd0I7SUFEckM7UUFFVSxpQkFBWSxHQUFHLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUN2QyxtQkFBYyxHQUFHLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBQy9DLFlBQU8sR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDakMsY0FBUyxHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQzVCLGlCQUFZLEdBQUcsTUFBTSxDQUF5Qix3QkFBd0IsRUFBRTtZQUN2RixLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQ2QsNkJBQTZCO2dCQUM3QixJQUFJLENBQUMsQ0FBQyxTQUFTLEtBQUssQ0FBQyxDQUFDLFNBQVMsSUFBSSxDQUFDLENBQUMsVUFBVSxLQUFLLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztvQkFDakUsT0FBTyxLQUFLLENBQUM7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QUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNoRSxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLE9BQU8sQ0FBQyxLQUFLLENBQUMsd0JBQXdCLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDL0MsTUFBTSxLQUFLLENBQUM7UUFDZCxDQUFDO0lBQ0gsQ0FBQztJQUVELEtBQUssQ0FBQyxXQUFXLENBQUMsTUFBYyxFQUFFLElBQVUsRUFBRSxPQUErQjtRQUMzRSxJQUFJLENBQUM7WUFDSCxNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsb0JBQW9CLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztRQUN0RSxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLE9BQU8sQ0FBQyxLQUFLLENBQUMsd0JBQXdCLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDL0MsTUFBTSxLQUFLLENBQUM7UUFDZCxDQUFDO0lBQ0gsQ0FBQztJQUVELGFBQWEsQ0FBQyxNQUFjO1FBQzFCLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFRCxlQUFlLENBQUMsTUFBYyxFQUFFLEtBQWdCLEVBQUUsT0FBK0I7UUFDL0UsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFFRCxnQkFBZ0IsQ0FDZCxNQUFjLEVBQ2QsS0FBcUIsRUFDckIsT0FBK0I7UUFFL0IsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQy9ELENBQUM7K0dBM2tCVSx3QkFBd0I7bUhBQXhCLHdCQUF3Qjs7NEZBQXhCLHdCQUF3QjtrQkFEcEMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIGluamVjdCwgc2lnbmFsIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IEVkaXRvciB9IGZyb20gXCJAdGlwdGFwL2NvcmVcIjtcbmltcG9ydCB7IEF0ZUltYWdlU2VydmljZSB9IGZyb20gXCIuL2F0ZS1pbWFnZS5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBBdGVDb2xvclBpY2tlclNlcnZpY2UgfSBmcm9tIFwiLi9hdGUtY29sb3ItcGlja2VyLnNlcnZpY2VcIjtcbmltcG9ydCB7IEF0ZUxpbmtTZXJ2aWNlIH0gZnJvbSBcIi4vYXRlLWxpbmsuc2VydmljZVwiO1xuaW1wb3J0IHsgQXRlRXhwb3J0U2VydmljZSwgQXRlRXhwb3J0Rm9ybWF0LCBBdGVFeHBvcnRPcHRpb25zIH0gZnJvbSBcIi4vYXRlLWV4cG9ydC5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBBdGVFZGl0b3JTdGF0ZVNuYXBzaG90LCBBVEVfSU5JVElBTF9FRElUT1JfU1RBVEUgfSBmcm9tIFwiLi4vbW9kZWxzL2F0ZS1lZGl0b3Itc3RhdGUubW9kZWxcIjtcbmltcG9ydCB7XG4gIEF0ZUltYWdlVXBsb2FkSGFuZGxlcixcbiAgQXRlSW1hZ2VVcGxvYWRPcHRpb25zLFxuICBBdGVJbWFnZVVwbG9hZFJlc3VsdCxcbn0gZnJvbSBcIi4uL21vZGVscy9hdGUtaW1hZ2UubW9kZWxcIjtcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEF0ZUVkaXRvckNvbW1hbmRzU2VydmljZSB7XG4gIHByaXZhdGUgaW1hZ2VTZXJ2aWNlID0gaW5qZWN0KEF0ZUltYWdlU2VydmljZSk7XG4gIHByaXZhdGUgY29sb3JQaWNrZXJTdmMgPSBpbmplY3QoQXRlQ29sb3JQaWNrZXJTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBsaW5rU3ZjID0gaW5qZWN0KEF0ZUxpbmtTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBleHBvcnRTdmMgPSBpbmplY3QoQXRlRXhwb3J0U2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2VkaXRvclN0YXRlID0gc2lnbmFsPEF0ZUVkaXRvclN0YXRlU25hcHNob3Q+KEFURV9JTklUSUFMX0VESVRPUl9TVEFURSwge1xuICAgIGVxdWFsOiAoYSwgYikgPT4ge1xuICAgICAgLy8gMS4gUHJpbWl0aXZlIGdsb2JhbCBzdGF0ZXNcbiAgICAgIGlmIChhLmlzRm9jdXNlZCAhPT0gYi5pc0ZvY3VzZWQgfHwgYS5pc0VkaXRhYmxlICE9PSBiLmlzRWRpdGFibGUpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICAvLyAyLiBEZXRhaWxlZCBzZWxlY3Rpb24gY29tcGFyaXNvblxuICAgICAgaWYgKFxuICAgICAgICBhLnNlbGVjdGlvbi5mcm9tICE9PSBiLnNlbGVjdGlvbi5mcm9tIHx8XG4gICAgICAgIGEuc2VsZWN0aW9uLnRvICE9PSBiLnNlbGVjdGlvbi50byB8fFxuICAgICAgICBhLnNlbGVjdGlvbi50eXBlICE9PSBiLnNlbGVjdGlvbi50eXBlIHx8XG4gICAgICAgIGEuc2VsZWN0aW9uLmVtcHR5ICE9PSBiLnNlbGVjdGlvbi5lbXB0eSB8fFxuICAgICAgICBhLnNlbGVjdGlvbi5pc1NpbmdsZUNlbGwgIT09IGIuc2VsZWN0aW9uLmlzU2luZ2xlQ2VsbFxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgLy8gSGVscGVyIGZvciBvYmplY3QgY29tcGFyaXNvblxuICAgICAgY29uc3QgaXNSZWNvcmRFcXVhbCA9IChvYmpBOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgb2JqQjogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pID0+IHtcbiAgICAgICAgY29uc3Qga2V5c0EgPSBPYmplY3Qua2V5cyhvYmpBKTtcbiAgICAgICAgY29uc3Qga2V5c0IgPSBPYmplY3Qua2V5cyhvYmpCKTtcbiAgICAgICAgaWYgKGtleXNBLmxlbmd0aCAhPT0ga2V5c0IubGVuZ3RoKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBrZXlzQS5ldmVyeShrZXkgPT4gb2JqQVtrZXldID09PSBvYmpCW2tleV0pO1xuICAgICAgfTtcblxuICAgICAgLy8gMy4gQ29tcGFyZSBzdWItc3RhdGVzIChtYXJrcywgY2FuLCBub2RlcylcbiAgICAgIGlmICghaXNSZWNvcmRFcXVhbChhLm1hcmtzLCBiLm1hcmtzKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAoIWlzUmVjb3JkRXF1YWwoYS5jYW4sIGIuY2FuKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAoIWlzUmVjb3JkRXF1YWwoYS5ub2RlcywgYi5ub2RlcykpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICAvLyA0LiBDb21wYXJlIGN1c3RvbSBleHRlbnNpb24gc3RhdGVzXG4gICAgICBpZiAoIWlzUmVjb3JkRXF1YWwoYS5jdXN0b20sIGIuY3VzdG9tKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0sXG4gIH0pO1xuXG4gIC8qKiBFeHBvc2VkIGVkaXRvciBzdGF0ZSBhcyBhIHJlYWRvbmx5IHNpZ25hbCAqL1xuICByZWFkb25seSBlZGl0b3JTdGF0ZSA9IHRoaXMuX2VkaXRvclN0YXRlLmFzUmVhZG9ubHkoKTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBUb29sYmFyIEludGVyYWN0aW9uIFN0YXRlXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqIFNpZ25hbCB0byB0cmFjayB3aGVuIHRoZSB0b29sYmFyIGlzIGJlaW5nIGhvdmVyZWQvaW50ZXJhY3RlZCB3aXRoICovXG4gIHByaXZhdGUgcmVhZG9ubHkgX2lzVG9vbGJhckludGVyYWN0aW5nID0gc2lnbmFsKGZhbHNlKTtcbiAgcmVhZG9ubHkgaXNUb29sYmFySW50ZXJhY3RpbmcgPSB0aGlzLl9pc1Rvb2xiYXJJbnRlcmFjdGluZy5hc1JlYWRvbmx5KCk7XG5cbiAgLyoqIFNldCB0b29sYmFyIGludGVyYWN0aW9uIHN0YXRlIChjYWxsZWQgYnkgZWRpdG9yIGNvbXBvbmVudCkgKi9cbiAgc2V0VG9vbGJhckludGVyYWN0aW5nKHZhbHVlOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5faXNUb29sYmFySW50ZXJhY3Rpbmcuc2V0KHZhbHVlKTtcbiAgfVxuXG4gIC8vIEFjY2VzcyB0byBJbWFnZVNlcnZpY2Ugc3RhdGVzIGFzIHJlYWRvbmx5IHNpZ25hbHMgZm9yIFVJIGJpbmRpbmdcbiAgcmVhZG9ubHkgaXNVcGxvYWRpbmcgPSB0aGlzLmltYWdlU2VydmljZS5pc1VwbG9hZGluZy5hc1JlYWRvbmx5KCk7XG4gIHJlYWRvbmx5IHVwbG9hZFByb2dyZXNzID0gdGhpcy5pbWFnZVNlcnZpY2UudXBsb2FkUHJvZ3Jlc3MuYXNSZWFkb25seSgpO1xuICByZWFkb25seSB1cGxvYWRNZXNzYWdlID0gdGhpcy5pbWFnZVNlcnZpY2UudXBsb2FkTWVzc2FnZS5hc1JlYWRvbmx5KCk7XG5cbiAgc2V0IG9uSW1hZ2VVcGxvYWRlZChjYWxsYmFjazogKChyZXN1bHQ6IEF0ZUltYWdlVXBsb2FkUmVzdWx0KSA9PiB2b2lkKSB8IG51bGwpIHtcbiAgICB0aGlzLmltYWdlU2VydmljZS5vbkltYWdlVXBsb2FkZWRDYWxsYmFjayA9IGNhbGxiYWNrIHx8IHVuZGVmaW5lZDtcbiAgfVxuICBzZXQgdXBsb2FkSGFuZGxlcihoYW5kbGVyOiBBdGVJbWFnZVVwbG9hZEhhbmRsZXIgfCBudWxsKSB7XG4gICAgdGhpcy5pbWFnZVNlcnZpY2UudXBsb2FkSGFuZGxlciA9IGhhbmRsZXI7XG4gIH1cblxuICAvKiogVXBkYXRlIHN0YXRlIChjYWxsZWQgYnkgVGlwdGFwU3RhdGVFeHRlbnNpb24pICovXG4gIHVwZGF0ZVN0YXRlKHN0YXRlOiBBdGVFZGl0b3JTdGF0ZVNuYXBzaG90KSB7XG4gICAgdGhpcy5fZWRpdG9yU3RhdGUuc2V0KHN0YXRlKTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIExpbmsgU3RhdGUgKHByb3hpZWQgZnJvbSBMaW5rU2VydmljZSlcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAvKiogU2lnbmFsIHRvIHRvZ2dsZSBsaW5rIGVkaXQgbW9kZSBmcm9tIFVJIChUb29sYmFyKSAtIEltbWVkaWF0ZSByZXNwb25zZSAqL1xuICByZWFkb25seSBsaW5rRWRpdE1vZGUgPSB0aGlzLmxpbmtTdmMuZWRpdE1vZGUuYXNSZWFkb25seSgpO1xuXG4gIC8qKiBSZWZlcmVuY2UgdG8gdGhlIGVsZW1lbnQgdGhhdCB0cmlnZ2VyZWQgdGhlIGxpbmsgbWVudSAoZm9yIGFuY2hvcmluZykgKi9cbiAgcmVhZG9ubHkgbGlua01lbnVUcmlnZ2VyID0gdGhpcy5saW5rU3ZjLm1lbnVUcmlnZ2VyLmFzUmVhZG9ubHkoKTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBDb2xvciBQaWNrZXIgU3RhdGUgKHByb3hpZWQgZnJvbSBDb2xvclBpY2tlclNlcnZpY2UpXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqIFNpZ25hbCB0byB0b2dnbGUgY29sb3IgcGlja2VyIG1vZGUgZnJvbSBVSSAodGV4dCBvciBoaWdobGlnaHQpICovXG4gIHJlYWRvbmx5IGNvbG9yRWRpdE1vZGUgPSB0aGlzLmNvbG9yUGlja2VyU3ZjLmVkaXRNb2RlLmFzUmVhZG9ubHkoKTtcblxuICAvKiogUmVmZXJlbmNlIHRvIHRoZSBlbGVtZW50IHRoYXQgdHJpZ2dlcmVkIHRoZSBjb2xvciBtZW51IChmb3IgYW5jaG9yaW5nKSAqL1xuICByZWFkb25seSBjb2xvck1lbnVUcmlnZ2VyID0gdGhpcy5jb2xvclBpY2tlclN2Yy5tZW51VHJpZ2dlci5hc1JlYWRvbmx5KCk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gTGluayBFZGl0IE1ldGhvZHMgKGRlbGVnYXRlZCB0byBMaW5rU2VydmljZSlcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBDb21tYW5kIEV4ZWN1dGlvblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKiBHZW5lcmljIG1ldGhvZCB0byBleGVjdXRlIGFueSBjb21tYW5kIGJ5IG5hbWUgKi9cbiAgZXhlY3V0ZShlZGl0b3I6IEVkaXRvciwgY29tbWFuZDogc3RyaW5nLCAuLi5hcmdzOiB1bmtub3duW10pOiB2b2lkIHtcbiAgICBpZiAoIWVkaXRvcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHN3aXRjaCAoY29tbWFuZCkge1xuICAgICAgY2FzZSBcInRvZ2dsZUJvbGRcIjpcbiAgICAgICAgdGhpcy50b2dnbGVCb2xkKGVkaXRvcik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcInRvZ2dsZUl0YWxpY1wiOlxuICAgICAgICB0aGlzLnRvZ2dsZUl0YWxpYyhlZGl0b3IpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJ0b2dnbGVTdHJpa2VcIjpcbiAgICAgICAgdGhpcy50b2dnbGVTdHJpa2UoZWRpdG9yKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwidG9nZ2xlQ29kZVwiOlxuICAgICAgICB0aGlzLnRvZ2dsZUNvZGUoZWRpdG9yKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwidG9nZ2xlQ29kZUJsb2NrXCI6XG4gICAgICAgIHRoaXMudG9nZ2xlQ29kZUJsb2NrKGVkaXRvcik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcInRvZ2dsZVVuZGVybGluZVwiOlxuICAgICAgICB0aGlzLnRvZ2dsZVVuZGVybGluZShlZGl0b3IpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJ0b2dnbGVTdXBlcnNjcmlwdFwiOlxuICAgICAgICB0aGlzLnRvZ2dsZVN1cGVyc2NyaXB0KGVkaXRvcik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcInRvZ2dsZVN1YnNjcmlwdFwiOlxuICAgICAgICB0aGlzLnRvZ2dsZVN1YnNjcmlwdChlZGl0b3IpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJ0b2dnbGVIZWFkaW5nXCI6XG4gICAgICAgIHRoaXMudG9nZ2xlSGVhZGluZyhlZGl0b3IsIGFyZ3NbMF0gYXMgMSB8IDIgfCAzKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwidG9nZ2xlQnVsbGV0TGlzdFwiOlxuICAgICAgICB0aGlzLnRvZ2dsZUJ1bGxldExpc3QoZWRpdG9yKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwidG9nZ2xlT3JkZXJlZExpc3RcIjpcbiAgICAgICAgdGhpcy50b2dnbGVPcmRlcmVkTGlzdChlZGl0b3IpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJ0b2dnbGVCbG9ja3F1b3RlXCI6XG4gICAgICAgIHRoaXMudG9nZ2xlQmxvY2txdW90ZShlZGl0b3IpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJzZXRUZXh0QWxpZ25cIjpcbiAgICAgICAgdGhpcy5zZXRUZXh0QWxpZ24oZWRpdG9yLCBhcmdzWzBdIGFzIFwibGVmdFwiIHwgXCJjZW50ZXJcIiB8IFwicmlnaHRcIiB8IFwianVzdGlmeVwiKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwidG9nZ2xlTGlua1wiOlxuICAgICAgICB0aGlzLmxpbmtTdmMudG9nZ2xlKGVkaXRvciwgYXJnc1swXSBhcyBFdmVudCB8IHVuZGVmaW5lZCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcInVuc2V0TGlua1wiOlxuICAgICAgICB0aGlzLmxpbmtTdmMudW5zZXRMaW5rKGVkaXRvcik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcInRvZ2dsZUNvbG9yUGlja2VyXCI6XG4gICAgICAgIHRoaXMuY29sb3JQaWNrZXJTdmMudG9nZ2xlKGVkaXRvciwgYXJnc1swXSBhcyBcInRleHRcIiB8IFwiaGlnaGxpZ2h0XCIsIGFyZ3NbMV0gYXMgRXZlbnQpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJpbnNlcnRIb3Jpem9udGFsUnVsZVwiOlxuICAgICAgICB0aGlzLmluc2VydEhvcml6b250YWxSdWxlKGVkaXRvcik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcImluc2VydEltYWdlXCI6XG4gICAgICAgIHRoaXMuaW5zZXJ0SW1hZ2UoZWRpdG9yLCBhcmdzWzBdIGFzIEF0ZUltYWdlVXBsb2FkT3B0aW9ucyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcInVwbG9hZEltYWdlXCI6XG4gICAgICAgIHRoaXMudXBsb2FkSW1hZ2UoZWRpdG9yLCBhcmdzWzBdIGFzIEZpbGUsIGFyZ3NbMV0gYXMgQXRlSW1hZ2VVcGxvYWRPcHRpb25zIHwgdW5kZWZpbmVkKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwidG9nZ2xlSGlnaGxpZ2h0XCI6XG4gICAgICAgIHRoaXMudG9nZ2xlSGlnaGxpZ2h0KGVkaXRvciwgYXJnc1swXSBhcyBzdHJpbmcpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJ1bmRvXCI6XG4gICAgICAgIHRoaXMudW5kbyhlZGl0b3IpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJyZWRvXCI6XG4gICAgICAgIHRoaXMucmVkbyhlZGl0b3IpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJpbnNlcnRUYWJsZVwiOlxuICAgICAgICB0aGlzLmluc2VydFRhYmxlKGVkaXRvciwgYXJnc1swXSBhcyBudW1iZXIgfCB1bmRlZmluZWQsIGFyZ3NbMV0gYXMgbnVtYmVyIHwgdW5kZWZpbmVkKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiYWRkQ29sdW1uQmVmb3JlXCI6XG4gICAgICAgIHRoaXMuYWRkQ29sdW1uQmVmb3JlKGVkaXRvcik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcImFkZENvbHVtbkFmdGVyXCI6XG4gICAgICAgIHRoaXMuYWRkQ29sdW1uQWZ0ZXIoZWRpdG9yKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiZGVsZXRlQ29sdW1uXCI6XG4gICAgICAgIHRoaXMuZGVsZXRlQ29sdW1uKGVkaXRvcik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcImFkZFJvd0JlZm9yZVwiOlxuICAgICAgICB0aGlzLmFkZFJvd0JlZm9yZShlZGl0b3IpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJhZGRSb3dBZnRlclwiOlxuICAgICAgICB0aGlzLmFkZFJvd0FmdGVyKGVkaXRvcik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcImRlbGV0ZVJvd1wiOlxuICAgICAgICB0aGlzLmRlbGV0ZVJvdyhlZGl0b3IpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJkZWxldGVUYWJsZVwiOlxuICAgICAgICB0aGlzLmRlbGV0ZVRhYmxlKGVkaXRvcik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcIm1lcmdlQ2VsbHNcIjpcbiAgICAgICAgdGhpcy5tZXJnZUNlbGxzKGVkaXRvcik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcInNwbGl0Q2VsbFwiOlxuICAgICAgICB0aGlzLnNwbGl0Q2VsbChlZGl0b3IpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJ0b2dnbGVIZWFkZXJDb2x1bW5cIjpcbiAgICAgICAgdGhpcy50b2dnbGVIZWFkZXJDb2x1bW4oZWRpdG9yKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwidG9nZ2xlSGVhZGVyUm93XCI6XG4gICAgICAgIHRoaXMudG9nZ2xlSGVhZGVyUm93KGVkaXRvcik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcImFwcGx5Q29sb3JcIjpcbiAgICAgICAgdGhpcy5jb2xvclBpY2tlclN2Yy5hcHBseUNvbG9yKFxuICAgICAgICAgIGVkaXRvcixcbiAgICAgICAgICBhcmdzWzBdIGFzIHN0cmluZyxcbiAgICAgICAgICBhcmdzWzFdIGFzIGJvb2xlYW4gfCB1bmRlZmluZWQsXG4gICAgICAgICAgYXJnc1syXSBhcyBib29sZWFuIHwgdW5kZWZpbmVkXG4gICAgICAgICk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcImFwcGx5SGlnaGxpZ2h0XCI6XG4gICAgICAgIHRoaXMuY29sb3JQaWNrZXJTdmMuYXBwbHlIaWdobGlnaHQoXG4gICAgICAgICAgZWRpdG9yLFxuICAgICAgICAgIGFyZ3NbMF0gYXMgc3RyaW5nLFxuICAgICAgICAgIGFyZ3NbMV0gYXMgYm9vbGVhbiB8IHVuZGVmaW5lZCxcbiAgICAgICAgICBhcmdzWzJdIGFzIGJvb2xlYW4gfCB1bmRlZmluZWRcbiAgICAgICAgKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwidW5zZXRDb2xvclwiOlxuICAgICAgICB0aGlzLmNvbG9yUGlja2VyU3ZjLnVuc2V0Q29sb3IoZWRpdG9yLCBhcmdzWzBdIGFzIGJvb2xlYW4pO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJ1bnNldEhpZ2hsaWdodFwiOlxuICAgICAgICB0aGlzLmNvbG9yUGlja2VyU3ZjLnVuc2V0SGlnaGxpZ2h0KGVkaXRvciwgYXJnc1swXSBhcyBib29sZWFuKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgXCJjbGVhckNvbnRlbnRcIjpcbiAgICAgICAgdGhpcy5jbGVhckNvbnRlbnQoZWRpdG9yKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgXCJleHBvcnRBc1wiOlxuICAgICAgICB2b2lkIHRoaXMuZXhwb3J0QXMoXG4gICAgICAgICAgZWRpdG9yLFxuICAgICAgICAgIGFyZ3NbMF0gYXMgQXRlRXhwb3J0Rm9ybWF0LFxuICAgICAgICAgIGFyZ3NbMV0gYXMgXCJjbGlwYm9hcmRcIiB8IFwiZG93bmxvYWRcIixcbiAgICAgICAgICBhcmdzWzJdIGFzIEF0ZUV4cG9ydE9wdGlvbnMgfCB1bmRlZmluZWRcbiAgICAgICAgKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgLy8gLS0tIEZvcm1hdHRpbmcgQ29tbWFuZHMgLS0tXG5cbiAgdG9nZ2xlQm9sZChlZGl0b3I6IEVkaXRvcik6IHZvaWQge1xuICAgIGlmICghZWRpdG9yKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGVkaXRvci5jaGFpbigpLmZvY3VzKCkudG9nZ2xlQm9sZCgpLnJ1bigpO1xuICB9XG5cbiAgdG9nZ2xlSXRhbGljKGVkaXRvcjogRWRpdG9yKTogdm9pZCB7XG4gICAgaWYgKCFlZGl0b3IpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZWRpdG9yLmNoYWluKCkuZm9jdXMoKS50b2dnbGVJdGFsaWMoKS5ydW4oKTtcbiAgfVxuXG4gIHRvZ2dsZVN0cmlrZShlZGl0b3I6IEVkaXRvcik6IHZvaWQge1xuICAgIGlmICghZWRpdG9yKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGVkaXRvci5jaGFpbigpLmZvY3VzKCkudG9nZ2xlU3RyaWtlKCkucnVuKCk7XG4gIH1cblxuICB0b2dnbGVDb2RlKGVkaXRvcjogRWRpdG9yKTogdm9pZCB7XG4gICAgaWYgKCFlZGl0b3IpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZWRpdG9yLmNoYWluKCkuZm9jdXMoKS50b2dnbGVDb2RlKCkucnVuKCk7XG4gIH1cblxuICB0b2dnbGVDb2RlQmxvY2soZWRpdG9yOiBFZGl0b3IpOiB2b2lkIHtcbiAgICBpZiAoIWVkaXRvcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBlZGl0b3IuY2hhaW4oKS5mb2N1cygpLnRvZ2dsZUNvZGVCbG9jaygpLnJ1bigpO1xuICB9XG5cbiAgdG9nZ2xlVW5kZXJsaW5lKGVkaXRvcjogRWRpdG9yKTogdm9pZCB7XG4gICAgaWYgKCFlZGl0b3IpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZWRpdG9yLmNoYWluKCkuZm9jdXMoKS50b2dnbGVVbmRlcmxpbmUoKS5ydW4oKTtcbiAgfVxuXG4gIHRvZ2dsZVN1cGVyc2NyaXB0KGVkaXRvcjogRWRpdG9yKTogdm9pZCB7XG4gICAgaWYgKCFlZGl0b3IpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZWRpdG9yLmNoYWluKCkuZm9jdXMoKS50b2dnbGVTdXBlcnNjcmlwdCgpLnJ1bigpO1xuICB9XG5cbiAgdG9nZ2xlU3Vic2NyaXB0KGVkaXRvcjogRWRpdG9yKTogdm9pZCB7XG4gICAgaWYgKCFlZGl0b3IpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZWRpdG9yLmNoYWluKCkuZm9jdXMoKS50b2dnbGVTdWJzY3JpcHQoKS5ydW4oKTtcbiAgfVxuXG4gIHRvZ2dsZUhlYWRpbmcoZWRpdG9yOiBFZGl0b3IsIGxldmVsOiAxIHwgMiB8IDMpOiB2b2lkIHtcbiAgICBpZiAoIWVkaXRvcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBlZGl0b3IuY2hhaW4oKS5mb2N1cygpLnRvZ2dsZUhlYWRpbmcoeyBsZXZlbCB9KS5ydW4oKTtcbiAgfVxuXG4gIHRvZ2dsZUhpZ2hsaWdodChlZGl0b3I6IEVkaXRvciwgY29sb3I/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoIWVkaXRvcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoY29sb3IpIHtcbiAgICAgIGVkaXRvci5jaGFpbigpLmZvY3VzKCkuc2V0SGlnaGxpZ2h0KHsgY29sb3IgfSkucnVuKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVkaXRvci5jaGFpbigpLmZvY3VzKCkudG9nZ2xlSGlnaGxpZ2h0KCkucnVuKCk7XG4gICAgfVxuICB9XG5cbiAgLy8gLS0tIFN0cnVjdHVyZSBDb21tYW5kcyAtLS1cblxuICB0b2dnbGVCdWxsZXRMaXN0KGVkaXRvcjogRWRpdG9yKTogdm9pZCB7XG4gICAgaWYgKCFlZGl0b3IpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZWRpdG9yLmNoYWluKCkuZm9jdXMoKS50b2dnbGVCdWxsZXRMaXN0KCkucnVuKCk7XG4gIH1cblxuICB0b2dnbGVPcmRlcmVkTGlzdChlZGl0b3I6IEVkaXRvcik6IHZvaWQge1xuICAgIGlmICghZWRpdG9yKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGVkaXRvci5jaGFpbigpLmZvY3VzKCkudG9nZ2xlT3JkZXJlZExpc3QoKS5ydW4oKTtcbiAgfVxuXG4gIHRvZ2dsZUJsb2NrcXVvdGUoZWRpdG9yOiBFZGl0b3IpOiB2b2lkIHtcbiAgICBpZiAoIWVkaXRvcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBlZGl0b3IuY2hhaW4oKS5mb2N1cygpLnRvZ2dsZUJsb2NrcXVvdGUoKS5ydW4oKTtcbiAgfVxuXG4gIHNldFRleHRBbGlnbihlZGl0b3I6IEVkaXRvciwgYWxpZ25tZW50OiBcImxlZnRcIiB8IFwiY2VudGVyXCIgfCBcInJpZ2h0XCIgfCBcImp1c3RpZnlcIik6IHZvaWQge1xuICAgIGlmICghZWRpdG9yKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGVkaXRvci5jaGFpbigpLmZvY3VzKCkuc2V0VGV4dEFsaWduKGFsaWdubWVudCkucnVuKCk7XG4gIH1cblxuICBpbnNlcnRIb3Jpem9udGFsUnVsZShlZGl0b3I6IEVkaXRvcik6IHZvaWQge1xuICAgIGlmICghZWRpdG9yKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGVkaXRvci5jaGFpbigpLmZvY3VzKCkuc2V0SG9yaXpvbnRhbFJ1bGUoKS5ydW4oKTtcbiAgfVxuXG4gIC8vIC0tLSBIaXN0b3J5IENvbW1hbmRzIC0tLVxuXG4gIHVuZG8oZWRpdG9yOiBFZGl0b3IpOiB2b2lkIHtcbiAgICBpZiAoIWVkaXRvcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBlZGl0b3IuY2hhaW4oKS5mb2N1cygpLnVuZG8oKS5ydW4oKTtcbiAgfVxuXG4gIHJlZG8oZWRpdG9yOiBFZGl0b3IpOiB2b2lkIHtcbiAgICBpZiAoIWVkaXRvcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBlZGl0b3IuY2hhaW4oKS5mb2N1cygpLnJlZG8oKS5ydW4oKTtcbiAgfVxuXG4gIC8vIC0tLSBUYWJsZSBDb21tYW5kcyAtLS1cblxuICBpbnNlcnRUYWJsZShlZGl0b3I6IEVkaXRvciwgcm93cyA9IDMsIGNvbHMgPSAzKTogdm9pZCB7XG4gICAgaWYgKCFlZGl0b3IpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZWRpdG9yLmNoYWluKCkuZm9jdXMoKS5pbnNlcnRUYWJsZSh7IHJvd3MsIGNvbHMgfSkucnVuKCk7XG4gIH1cblxuICBhZGRDb2x1bW5CZWZvcmUoZWRpdG9yOiBFZGl0b3IpOiB2b2lkIHtcbiAgICBpZiAoIWVkaXRvcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBlZGl0b3IuY2hhaW4oKS5mb2N1cygpLmFkZENvbHVtbkJlZm9yZSgpLnJ1bigpO1xuICB9XG5cbiAgYWRkQ29sdW1uQWZ0ZXIoZWRpdG9yOiBFZGl0b3IpOiB2b2lkIHtcbiAgICBpZiAoIWVkaXRvcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBlZGl0b3IuY2hhaW4oKS5mb2N1cygpLmFkZENvbHVtbkFmdGVyKCkucnVuKCk7XG4gIH1cblxuICBkZWxldGVDb2x1bW4oZWRpdG9yOiBFZGl0b3IpOiB2b2lkIHtcbiAgICBpZiAoIWVkaXRvcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBlZGl0b3IuY2hhaW4oKS5mb2N1cygpLmRlbGV0ZUNvbHVtbigpLnJ1bigpO1xuICB9XG5cbiAgYWRkUm93QmVmb3JlKGVkaXRvcjogRWRpdG9yKTogdm9pZCB7XG4gICAgaWYgKCFlZGl0b3IpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZWRpdG9yLmNoYWluKCkuZm9jdXMoKS5hZGRSb3dCZWZvcmUoKS5ydW4oKTtcbiAgfVxuXG4gIGFkZFJvd0FmdGVyKGVkaXRvcjogRWRpdG9yKTogdm9pZCB7XG4gICAgaWYgKCFlZGl0b3IpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZWRpdG9yLmNoYWluKCkuZm9jdXMoKS5hZGRSb3dBZnRlcigpLnJ1bigpO1xuICB9XG5cbiAgZGVsZXRlUm93KGVkaXRvcjogRWRpdG9yKTogdm9pZCB7XG4gICAgaWYgKCFlZGl0b3IpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZWRpdG9yLmNoYWluKCkuZm9jdXMoKS5kZWxldGVSb3coKS5ydW4oKTtcbiAgfVxuXG4gIGRlbGV0ZVRhYmxlKGVkaXRvcjogRWRpdG9yKTogdm9pZCB7XG4gICAgaWYgKCFlZGl0b3IpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZWRpdG9yLmNoYWluKCkuZm9jdXMoKS5kZWxldGVUYWJsZSgpLnJ1bigpO1xuICB9XG5cbiAgbWVyZ2VDZWxscyhlZGl0b3I6IEVkaXRvcik6IHZvaWQge1xuICAgIGlmICghZWRpdG9yKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGVkaXRvci5jaGFpbigpLmZvY3VzKCkubWVyZ2VDZWxscygpLnJ1bigpO1xuICB9XG5cbiAgc3BsaXRDZWxsKGVkaXRvcjogRWRpdG9yKTogdm9pZCB7XG4gICAgaWYgKCFlZGl0b3IpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZWRpdG9yLmNoYWluKCkuZm9jdXMoKS5zcGxpdENlbGwoKS5ydW4oKTtcbiAgfVxuXG4gIHRvZ2dsZUhlYWRlckNvbHVtbihlZGl0b3I6IEVkaXRvcik6IHZvaWQge1xuICAgIGlmICghZWRpdG9yKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGVkaXRvci5jaGFpbigpLmZvY3VzKCkudG9nZ2xlSGVhZGVyQ29sdW1uKCkucnVuKCk7XG4gIH1cblxuICB0b2dnbGVIZWFkZXJSb3coZWRpdG9yOiBFZGl0b3IpOiB2b2lkIHtcbiAgICBpZiAoIWVkaXRvcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBlZGl0b3IuY2hhaW4oKS5mb2N1cygpLnRvZ2dsZUhlYWRlclJvdygpLnJ1bigpO1xuICB9XG5cbiAgLy8gLS0tIFV0aWxpdHkgQ29tbWFuZHMgLS0tXG5cbiAgY2xlYXJDb250ZW50KGVkaXRvcjogRWRpdG9yKTogdm9pZCB7XG4gICAgaWYgKCFlZGl0b3IpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZWRpdG9yLmNvbW1hbmRzLmNsZWFyQ29udGVudCh0cnVlKTtcbiAgfVxuXG4gIC8vIC0tLSBFeHBvcnQgQ29tbWFuZHMgLS0tXG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGVkaXRvciBjb250ZW50IGluIHRoZSBnaXZlbiBmb3JtYXQuXG4gICAqIEBwYXJhbSBmb3JtYXQgJ2h0bWwnIHwgJ21hcmtkb3duJyB8ICd0ZXh0J1xuICAgKi9cbiAgZ2V0Q29udGVudChlZGl0b3I6IEVkaXRvciwgZm9ybWF0OiBBdGVFeHBvcnRGb3JtYXQpOiBzdHJpbmcge1xuICAgIGlmICghZWRpdG9yKSB7XG4gICAgICByZXR1cm4gXCJcIjtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZXhwb3J0U3ZjLmdldENvbnRlbnQoZWRpdG9yLCBmb3JtYXQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4cG9ydHMgdGhlIGVkaXRvciBjb250ZW50LlxuICAgKiBAcGFyYW0gZm9ybWF0ICAnaHRtbCcgfCAnbWFya2Rvd24nIHwgJ3RleHQnXG4gICAqIEBwYXJhbSBtZXRob2QgICdjbGlwYm9hcmQnIHwgJ2Rvd25sb2FkJ1xuICAgKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25hbCBmaWxlbmFtZSBmb3IgZG93bmxvYWRcbiAgICovXG4gIGFzeW5jIGV4cG9ydEFzKFxuICAgIGVkaXRvcjogRWRpdG9yLFxuICAgIGZvcm1hdDogQXRlRXhwb3J0Rm9ybWF0LFxuICAgIG1ldGhvZDogXCJjbGlwYm9hcmRcIiB8IFwiZG93bmxvYWRcIixcbiAgICBvcHRpb25zPzogQXRlRXhwb3J0T3B0aW9uc1xuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIWVkaXRvcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAobWV0aG9kID09PSBcImNsaXBib2FyZFwiKSB7XG4gICAgICBhd2FpdCB0aGlzLmV4cG9ydFN2Yy5leHBvcnRUb0NsaXBib2FyZChlZGl0b3IsIGZvcm1hdCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZXhwb3J0U3ZjLmV4cG9ydFRvRmlsZShlZGl0b3IsIGZvcm1hdCwgb3B0aW9ucyk7XG4gICAgfVxuICB9XG5cbiAgZm9jdXMoZWRpdG9yOiBFZGl0b3IpOiB2b2lkIHtcbiAgICBpZiAoIWVkaXRvcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBlZGl0b3IuY2hhaW4oKS5mb2N1cygpLnJ1bigpO1xuICB9XG5cbiAgYmx1cihlZGl0b3I6IEVkaXRvcik6IHZvaWQge1xuICAgIGlmICghZWRpdG9yKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGVkaXRvci5jaGFpbigpLmJsdXIoKS5ydW4oKTtcbiAgfVxuXG4gIHNldENvbnRlbnQoZWRpdG9yOiBFZGl0b3IsIGNvbnRlbnQ6IHN0cmluZywgZW1pdFVwZGF0ZSA9IHRydWUpOiB2b2lkIHtcbiAgICBpZiAoIWVkaXRvcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBlZGl0b3IuY29tbWFuZHMuc2V0Q29udGVudChjb250ZW50LCB7IGVtaXRVcGRhdGUgfSk7XG4gIH1cblxuICBzZXRFZGl0YWJsZShlZGl0b3I6IEVkaXRvciwgZWRpdGFibGU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBpZiAoIWVkaXRvcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBlZGl0b3Iuc2V0RWRpdGFibGUoZWRpdGFibGUpO1xuICB9XG5cbiAgaW5zZXJ0Q29udGVudChlZGl0b3I6IEVkaXRvciwgY29udGVudDogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKCFlZGl0b3IpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZWRpdG9yLmNoYWluKCkuZm9jdXMoKS5pbnNlcnRDb250ZW50KGNvbnRlbnQpLnJ1bigpO1xuICB9XG5cbiAgYXN5bmMgaW5zZXJ0SW1hZ2UoZWRpdG9yOiBFZGl0b3IsIG9wdGlvbnM/OiBBdGVJbWFnZVVwbG9hZE9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5pbWFnZVNlcnZpY2Uuc2VsZWN0QW5kVXBsb2FkSW1hZ2UoZWRpdG9yLCBvcHRpb25zKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcihcIkVycm9yIGluc2VydGluZyBpbWFnZTpcIiwgZXJyb3IpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgdXBsb2FkSW1hZ2UoZWRpdG9yOiBFZGl0b3IsIGZpbGU6IEZpbGUsIG9wdGlvbnM/OiBBdGVJbWFnZVVwbG9hZE9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5pbWFnZVNlcnZpY2UudXBsb2FkQW5kSW5zZXJ0SW1hZ2UoZWRpdG9yLCBmaWxlLCBvcHRpb25zKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcihcIkVycm9yIHVwbG9hZGluZyBpbWFnZTpcIiwgZXJyb3IpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG5cbiAgZG93bmxvYWRJbWFnZShlZGl0b3I6IEVkaXRvcik6IHZvaWQge1xuICAgIHRoaXMuaW1hZ2VTZXJ2aWNlLmRvd25sb2FkSW1hZ2UoZWRpdG9yKTtcbiAgfVxuXG4gIGhhbmRsZUltYWdlRHJvcChlZGl0b3I6IEVkaXRvciwgZXZlbnQ6IERyYWdFdmVudCwgb3B0aW9ucz86IEF0ZUltYWdlVXBsb2FkT3B0aW9ucyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmltYWdlU2VydmljZS5oYW5kbGVEcm9wKGVkaXRvciwgZXZlbnQsIG9wdGlvbnMpO1xuICB9XG5cbiAgaGFuZGxlSW1hZ2VQYXN0ZShcbiAgICBlZGl0b3I6IEVkaXRvcixcbiAgICBldmVudDogQ2xpcGJvYXJkRXZlbnQsXG4gICAgb3B0aW9ucz86IEF0ZUltYWdlVXBsb2FkT3B0aW9uc1xuICApOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pbWFnZVNlcnZpY2UuaGFuZGxlUGFzdGUoZWRpdG9yLCBldmVudCwgb3B0aW9ucyk7XG4gIH1cbn1cbiJdfQ==
|
|
516
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXRlLWVkaXRvci1jb21tYW5kcy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci10aXB0YXAtZWRpdG9yL3NyYy9saWIvc2VydmljZXMvYXRlLWVkaXRvci1jb21tYW5kcy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDbkUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxnQkFBZ0IsRUFBcUMsTUFBTSxzQkFBc0IsQ0FBQztBQUMzRixPQUFPLEVBQTBCLHdCQUF3QixFQUFFLE1BQU0sa0NBQWtDLENBQUM7O0FBUXBHLE1BQU0sT0FBTyx3QkFBd0I7SUFEckM7UUFFVSxpQkFBWSxHQUFHLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUN2QyxtQkFBYyxHQUFHLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBQy9DLFlBQU8sR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDakMsY0FBUyxHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQzVCLGlCQUFZLEdBQUcsTUFBTSxDQUF5Qix3QkFBd0IsRUFBRTtZQUN2RixLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQ2QsNkJBQTZCO2dCQUM3QixJQUFJLENBQUMsQ0FBQyxTQUFTLEtBQUssQ0FBQyxDQUFDLFNBQVMsSUFBSSxDQUFDLENBQUMsVUFBVSxLQUFLLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztvQkFDakUsT0FBTyxLQUFLLENBQUM7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QUNsQixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxLQUFLLElBQUksQ0FBQztJQUNsRCxDQUFDOytHQW5sQlUsd0JBQXdCO21IQUF4Qix3QkFBd0I7OzRGQUF4Qix3QkFBd0I7a0JBRHBDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBpbmplY3QsIHNpZ25hbCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBFZGl0b3IgfSBmcm9tIFwiQHRpcHRhcC9jb3JlXCI7XG5pbXBvcnQgeyBBdGVJbWFnZVNlcnZpY2UgfSBmcm9tIFwiLi9hdGUtaW1hZ2Uuc2VydmljZVwiO1xuaW1wb3J0IHsgQXRlQ29sb3JQaWNrZXJTZXJ2aWNlIH0gZnJvbSBcIi4vYXRlLWNvbG9yLXBpY2tlci5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBBdGVMaW5rU2VydmljZSB9IGZyb20gXCIuL2F0ZS1saW5rLnNlcnZpY2VcIjtcbmltcG9ydCB7IEF0ZUV4cG9ydFNlcnZpY2UsIEF0ZUV4cG9ydEZvcm1hdCwgQXRlRXhwb3J0T3B0aW9ucyB9IGZyb20gXCIuL2F0ZS1leHBvcnQuc2VydmljZVwiO1xuaW1wb3J0IHsgQXRlRWRpdG9yU3RhdGVTbmFwc2hvdCwgQVRFX0lOSVRJQUxfRURJVE9SX1NUQVRFIH0gZnJvbSBcIi4uL21vZGVscy9hdGUtZWRpdG9yLXN0YXRlLm1vZGVsXCI7XG5pbXBvcnQge1xuICBBdGVJbWFnZVVwbG9hZEhhbmRsZXIsXG4gIEF0ZUltYWdlVXBsb2FkT3B0aW9ucyxcbiAgQXRlSW1hZ2VVcGxvYWRSZXN1bHQsXG59IGZyb20gXCIuLi9tb2RlbHMvYXRlLWltYWdlLm1vZGVsXCI7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBBdGVFZGl0b3JDb21tYW5kc1NlcnZpY2Uge1xuICBwcml2YXRlIGltYWdlU2VydmljZSA9IGluamVjdChBdGVJbWFnZVNlcnZpY2UpO1xuICBwcml2YXRlIGNvbG9yUGlja2VyU3ZjID0gaW5qZWN0KEF0ZUNvbG9yUGlja2VyU2VydmljZSk7XG4gIHByaXZhdGUgbGlua1N2YyA9IGluamVjdChBdGVMaW5rU2VydmljZSk7XG4gIHByaXZhdGUgZXhwb3J0U3ZjID0gaW5qZWN0KEF0ZUV4cG9ydFNlcnZpY2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9lZGl0b3JTdGF0ZSA9IHNpZ25hbDxBdGVFZGl0b3JTdGF0ZVNuYXBzaG90PihBVEVfSU5JVElBTF9FRElUT1JfU1RBVEUsIHtcbiAgICBlcXVhbDogKGEsIGIpID0+IHtcbiAgICAgIC8vIDEuIFByaW1pdGl2ZSBnbG9iYWwgc3RhdGVzXG4gICAgICBpZiAoYS5pc0ZvY3VzZWQgIT09IGIuaXNGb2N1c2VkIHx8IGEuaXNFZGl0YWJsZSAhPT0gYi5pc0VkaXRhYmxlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgLy8gMi4gRGV0YWlsZWQgc2VsZWN0aW9uIGNvbXBhcmlzb25cbiAgICAgIGlmIChcbiAgICAgICAgYS5zZWxlY3Rpb24uZnJvbSAhPT0gYi5zZWxlY3Rpb24uZnJvbSB8fFxuICAgICAgICBhLnNlbGVjdGlvbi50byAhPT0gYi5zZWxlY3Rpb24udG8gfHxcbiAgICAgICAgYS5zZWxlY3Rpb24udHlwZSAhPT0gYi5zZWxlY3Rpb24udHlwZSB8fFxuICAgICAgICBhLnNlbGVjdGlvbi5lbXB0eSAhPT0gYi5zZWxlY3Rpb24uZW1wdHkgfHxcbiAgICAgICAgYS5zZWxlY3Rpb24uaXNTaW5nbGVDZWxsICE9PSBiLnNlbGVjdGlvbi5pc1NpbmdsZUNlbGxcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIC8vIEhlbHBlciBmb3Igb2JqZWN0IGNvbXBhcmlzb25cbiAgICAgIGNvbnN0IGlzUmVjb3JkRXF1YWwgPSAob2JqQTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIG9iakI6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSA9PiB7XG4gICAgICAgIGNvbnN0IGtleXNBID0gT2JqZWN0LmtleXMob2JqQSk7XG4gICAgICAgIGNvbnN0IGtleXNCID0gT2JqZWN0LmtleXMob2JqQik7XG4gICAgICAgIGlmIChrZXlzQS5sZW5ndGggIT09IGtleXNCLmxlbmd0aCkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ga2V5c0EuZXZlcnkoa2V5ID0+IG9iakFba2V5XSA9PT0gb2JqQltrZXldKTtcbiAgICAgIH07XG5cbiAgICAgIC8vIDMuIENvbXBhcmUgc3ViLXN0YXRlcyAobWFya3MsIGNhbiwgbm9kZXMpXG4gICAgICBpZiAoIWlzUmVjb3JkRXF1YWwoYS5tYXJrcywgYi5tYXJrcykpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKCFpc1JlY29yZEVxdWFsKGEuY2FuLCBiLmNhbikpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKCFpc1JlY29yZEVxdWFsKGEubm9kZXMsIGIubm9kZXMpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgLy8gNC4gQ29tcGFyZSBjdXN0b20gZXh0ZW5zaW9uIHN0YXRlc1xuICAgICAgaWYgKCFpc1JlY29yZEVxdWFsKGEuY3VzdG9tLCBiLmN1c3RvbSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9LFxuICB9KTtcblxuICAvKiogRXhwb3NlZCBlZGl0b3Igc3RhdGUgYXMgYSByZWFkb25seSBzaWduYWwgKi9cbiAgcmVhZG9ubHkgZWRpdG9yU3RhdGUgPSB0aGlzLl9lZGl0b3JTdGF0ZS5hc1JlYWRvbmx5KCk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gVG9vbGJhciBJbnRlcmFjdGlvbiBTdGF0ZVxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKiBTaWduYWwgdG8gdHJhY2sgd2hlbiB0aGUgdG9vbGJhciBpcyBiZWluZyBob3ZlcmVkL2ludGVyYWN0ZWQgd2l0aCAqL1xuICBwcml2YXRlIHJlYWRvbmx5IF9pc1Rvb2xiYXJJbnRlcmFjdGluZyA9IHNpZ25hbChmYWxzZSk7XG4gIHJlYWRvbmx5IGlzVG9vbGJhckludGVyYWN0aW5nID0gdGhpcy5faXNUb29sYmFySW50ZXJhY3RpbmcuYXNSZWFkb25seSgpO1xuXG4gIC8qKiBTZXQgdG9vbGJhciBpbnRlcmFjdGlvbiBzdGF0ZSAoY2FsbGVkIGJ5IGVkaXRvciBjb21wb25lbnQpICovXG4gIHNldFRvb2xiYXJJbnRlcmFjdGluZyh2YWx1ZTogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuX2lzVG9vbGJhckludGVyYWN0aW5nLnNldCh2YWx1ZSk7XG4gIH1cblxuICAvLyBBY2Nlc3MgdG8gSW1hZ2VTZXJ2aWNlIHN0YXRlcyBhcyByZWFkb25seSBzaWduYWxzIGZvciBVSSBiaW5kaW5nXG4gIHJlYWRvbmx5IGlzVXBsb2FkaW5nID0gdGhpcy5pbWFnZVNlcnZpY2UuaXNVcGxvYWRpbmcuYXNSZWFkb25seSgpO1xuICByZWFkb25seSB1cGxvYWRQcm9ncmVzcyA9IHRoaXMuaW1hZ2VTZXJ2aWNlLnVwbG9hZFByb2dyZXNzLmFzUmVhZG9ubHkoKTtcbiAgcmVhZG9ubHkgdXBsb2FkTWVzc2FnZSA9IHRoaXMuaW1hZ2VTZXJ2aWNlLnVwbG9hZE1lc3NhZ2UuYXNSZWFkb25seSgpO1xuXG4gIHNldCBvbkltYWdlVXBsb2FkZWQoY2FsbGJhY2s6ICgocmVzdWx0OiBBdGVJbWFnZVVwbG9hZFJlc3VsdCkgPT4gdm9pZCkgfCBudWxsKSB7XG4gICAgdGhpcy5pbWFnZVNlcnZpY2Uub25JbWFnZVVwbG9hZGVkQ2FsbGJhY2sgPSBjYWxsYmFjayB8fCB1bmRlZmluZWQ7XG4gIH1cbiAgc2V0IHVwbG9hZEhhbmRsZXIoaGFuZGxlcjogQXRlSW1hZ2VVcGxvYWRIYW5kbGVyIHwgbnVsbCkge1xuICAgIHRoaXMuaW1hZ2VTZXJ2aWNlLnVwbG9hZEhhbmRsZXIgPSBoYW5kbGVyO1xuICB9XG5cbiAgLyoqIFVwZGF0ZSBzdGF0ZSAoY2FsbGVkIGJ5IFRpcHRhcFN0YXRlRXh0ZW5zaW9uKSAqL1xuICB1cGRhdGVTdGF0ZShzdGF0ZTogQXRlRWRpdG9yU3RhdGVTbmFwc2hvdCkge1xuICAgIHRoaXMuX2VkaXRvclN0YXRlLnNldChzdGF0ZSk7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBMaW5rIFN0YXRlIChwcm94aWVkIGZyb20gTGlua1NlcnZpY2UpXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqIFNpZ25hbCB0byB0b2dnbGUgbGluayBlZGl0IG1vZGUgZnJvbSBVSSAoVG9vbGJhcikgLSBJbW1lZGlhdGUgcmVzcG9uc2UgKi9cbiAgcmVhZG9ubHkgbGlua0VkaXRNb2RlID0gdGhpcy5saW5rU3ZjLmVkaXRNb2RlLmFzUmVhZG9ubHkoKTtcblxuICAvKiogUmVmZXJlbmNlIHRvIHRoZSBlbGVtZW50IHRoYXQgdHJpZ2dlcmVkIHRoZSBsaW5rIG1lbnUgKGZvciBhbmNob3JpbmcpICovXG4gIHJlYWRvbmx5IGxpbmtNZW51VHJpZ2dlciA9IHRoaXMubGlua1N2Yy5tZW51VHJpZ2dlci5hc1JlYWRvbmx5KCk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gQ29sb3IgUGlja2VyIFN0YXRlIChwcm94aWVkIGZyb20gQ29sb3JQaWNrZXJTZXJ2aWNlKVxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKiBTaWduYWwgdG8gdG9nZ2xlIGNvbG9yIHBpY2tlciBtb2RlIGZyb20gVUkgKHRleHQgb3IgaGlnaGxpZ2h0KSAqL1xuICByZWFkb25seSBjb2xvckVkaXRNb2RlID0gdGhpcy5jb2xvclBpY2tlclN2Yy5lZGl0TW9kZS5hc1JlYWRvbmx5KCk7XG5cbiAgLyoqIFJlZmVyZW5jZSB0byB0aGUgZWxlbWVudCB0aGF0IHRyaWdnZXJlZCB0aGUgY29sb3IgbWVudSAoZm9yIGFuY2hvcmluZykgKi9cbiAgcmVhZG9ubHkgY29sb3JNZW51VHJpZ2dlciA9IHRoaXMuY29sb3JQaWNrZXJTdmMubWVudVRyaWdnZXIuYXNSZWFkb25seSgpO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIExpbmsgRWRpdCBNZXRob2RzIChkZWxlZ2F0ZWQgdG8gTGlua1NlcnZpY2UpXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gQ29tbWFuZCBFeGVjdXRpb25cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAvKiogR2VuZXJpYyBtZXRob2QgdG8gZXhlY3V0ZSBhbnkgY29tbWFuZCBieSBuYW1lICovXG4gIGV4ZWN1dGUoZWRpdG9yOiBFZGl0b3IsIGNvbW1hbmQ6IHN0cmluZywgLi4uYXJnczogdW5rbm93bltdKTogdm9pZCB7XG4gICAgaWYgKCFlZGl0b3IpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKGNvbW1hbmQpIHtcbiAgICAgIGNhc2UgXCJ0b2dnbGVCb2xkXCI6XG4gICAgICAgIHRoaXMudG9nZ2xlQm9sZChlZGl0b3IpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJ0b2dnbGVJdGFsaWNcIjpcbiAgICAgICAgdGhpcy50b2dnbGVJdGFsaWMoZWRpdG9yKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwidG9nZ2xlU3RyaWtlXCI6XG4gICAgICAgIHRoaXMudG9nZ2xlU3RyaWtlKGVkaXRvcik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcInRvZ2dsZUNvZGVcIjpcbiAgICAgICAgdGhpcy50b2dnbGVDb2RlKGVkaXRvcik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcInRvZ2dsZUNvZGVCbG9ja1wiOlxuICAgICAgICB0aGlzLnRvZ2dsZUNvZGVCbG9jayhlZGl0b3IpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJ0b2dnbGVVbmRlcmxpbmVcIjpcbiAgICAgICAgdGhpcy50b2dnbGVVbmRlcmxpbmUoZWRpdG9yKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwidG9nZ2xlU3VwZXJzY3JpcHRcIjpcbiAgICAgICAgdGhpcy50b2dnbGVTdXBlcnNjcmlwdChlZGl0b3IpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJ0b2dnbGVTdWJzY3JpcHRcIjpcbiAgICAgICAgdGhpcy50b2dnbGVTdWJzY3JpcHQoZWRpdG9yKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwidG9nZ2xlSGVhZGluZ1wiOlxuICAgICAgICB0aGlzLnRvZ2dsZUhlYWRpbmcoZWRpdG9yLCBhcmdzWzBdIGFzIDEgfCAyIHwgMyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcInRvZ2dsZUJ1bGxldExpc3RcIjpcbiAgICAgICAgdGhpcy50b2dnbGVCdWxsZXRMaXN0KGVkaXRvcik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcInRvZ2dsZU9yZGVyZWRMaXN0XCI6XG4gICAgICAgIHRoaXMudG9nZ2xlT3JkZXJlZExpc3QoZWRpdG9yKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwidG9nZ2xlQmxvY2txdW90ZVwiOlxuICAgICAgICB0aGlzLnRvZ2dsZUJsb2NrcXVvdGUoZWRpdG9yKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwic2V0VGV4dEFsaWduXCI6XG4gICAgICAgIHRoaXMuc2V0VGV4dEFsaWduKGVkaXRvciwgYXJnc1swXSBhcyBcImxlZnRcIiB8IFwiY2VudGVyXCIgfCBcInJpZ2h0XCIgfCBcImp1c3RpZnlcIik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcInRvZ2dsZUxpbmtcIjpcbiAgICAgICAgdGhpcy5saW5rU3ZjLnRvZ2dsZShlZGl0b3IsIGFyZ3NbMF0gYXMgRXZlbnQgfCB1bmRlZmluZWQpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJ1bnNldExpbmtcIjpcbiAgICAgICAgdGhpcy5saW5rU3ZjLnVuc2V0TGluayhlZGl0b3IpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJ0b2dnbGVDb2xvclBpY2tlclwiOlxuICAgICAgICB0aGlzLmNvbG9yUGlja2VyU3ZjLnRvZ2dsZShlZGl0b3IsIGFyZ3NbMF0gYXMgXCJ0ZXh0XCIgfCBcImhpZ2hsaWdodFwiLCBhcmdzWzFdIGFzIEV2ZW50KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiaW5zZXJ0SG9yaXpvbnRhbFJ1bGVcIjpcbiAgICAgICAgdGhpcy5pbnNlcnRIb3Jpem9udGFsUnVsZShlZGl0b3IpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJpbnNlcnRJbWFnZVwiOlxuICAgICAgICB0aGlzLmluc2VydEltYWdlKGVkaXRvciwgYXJnc1swXSBhcyBBdGVJbWFnZVVwbG9hZE9wdGlvbnMpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJ1cGxvYWRJbWFnZVwiOlxuICAgICAgICB0aGlzLnVwbG9hZEltYWdlKGVkaXRvciwgYXJnc1swXSBhcyBGaWxlLCBhcmdzWzFdIGFzIEF0ZUltYWdlVXBsb2FkT3B0aW9ucyB8IHVuZGVmaW5lZCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcInRvZ2dsZUhpZ2hsaWdodFwiOlxuICAgICAgICB0aGlzLnRvZ2dsZUhpZ2hsaWdodChlZGl0b3IsIGFyZ3NbMF0gYXMgc3RyaW5nKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwidW5kb1wiOlxuICAgICAgICB0aGlzLnVuZG8oZWRpdG9yKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwicmVkb1wiOlxuICAgICAgICB0aGlzLnJlZG8oZWRpdG9yKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiaW5zZXJ0VGFibGVcIjpcbiAgICAgICAgdGhpcy5pbnNlcnRUYWJsZShlZGl0b3IsIGFyZ3NbMF0gYXMgbnVtYmVyIHwgdW5kZWZpbmVkLCBhcmdzWzFdIGFzIG51bWJlciB8IHVuZGVmaW5lZCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcImFkZENvbHVtbkJlZm9yZVwiOlxuICAgICAgICB0aGlzLmFkZENvbHVtbkJlZm9yZShlZGl0b3IpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJhZGRDb2x1bW5BZnRlclwiOlxuICAgICAgICB0aGlzLmFkZENvbHVtbkFmdGVyKGVkaXRvcik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcImRlbGV0ZUNvbHVtblwiOlxuICAgICAgICB0aGlzLmRlbGV0ZUNvbHVtbihlZGl0b3IpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJhZGRSb3dCZWZvcmVcIjpcbiAgICAgICAgdGhpcy5hZGRSb3dCZWZvcmUoZWRpdG9yKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiYWRkUm93QWZ0ZXJcIjpcbiAgICAgICAgdGhpcy5hZGRSb3dBZnRlcihlZGl0b3IpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJkZWxldGVSb3dcIjpcbiAgICAgICAgdGhpcy5kZWxldGVSb3coZWRpdG9yKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiZGVsZXRlVGFibGVcIjpcbiAgICAgICAgdGhpcy5kZWxldGVUYWJsZShlZGl0b3IpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJtZXJnZUNlbGxzXCI6XG4gICAgICAgIHRoaXMubWVyZ2VDZWxscyhlZGl0b3IpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJzcGxpdENlbGxcIjpcbiAgICAgICAgdGhpcy5zcGxpdENlbGwoZWRpdG9yKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwidG9nZ2xlSGVhZGVyQ29sdW1uXCI6XG4gICAgICAgIHRoaXMudG9nZ2xlSGVhZGVyQ29sdW1uKGVkaXRvcik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcInRvZ2dsZUhlYWRlclJvd1wiOlxuICAgICAgICB0aGlzLnRvZ2dsZUhlYWRlclJvdyhlZGl0b3IpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJhcHBseUNvbG9yXCI6XG4gICAgICAgIHRoaXMuY29sb3JQaWNrZXJTdmMuYXBwbHlDb2xvcihcbiAgICAgICAgICBlZGl0b3IsXG4gICAgICAgICAgYXJnc1swXSBhcyBzdHJpbmcsXG4gICAgICAgICAgYXJnc1sxXSBhcyBib29sZWFuIHwgdW5kZWZpbmVkLFxuICAgICAgICAgIGFyZ3NbMl0gYXMgYm9vbGVhbiB8IHVuZGVmaW5lZFxuICAgICAgICApO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJhcHBseUhpZ2hsaWdodFwiOlxuICAgICAgICB0aGlzLmNvbG9yUGlja2VyU3ZjLmFwcGx5SGlnaGxpZ2h0KFxuICAgICAgICAgIGVkaXRvcixcbiAgICAgICAgICBhcmdzWzBdIGFzIHN0cmluZyxcbiAgICAgICAgICBhcmdzWzFdIGFzIGJvb2xlYW4gfCB1bmRlZmluZWQsXG4gICAgICAgICAgYXJnc1syXSBhcyBib29sZWFuIHwgdW5kZWZpbmVkXG4gICAgICAgICk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcInVuc2V0Q29sb3JcIjpcbiAgICAgICAgdGhpcy5jb2xvclBpY2tlclN2Yy51bnNldENvbG9yKGVkaXRvciwgYXJnc1swXSBhcyBib29sZWFuKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwidW5zZXRIaWdobGlnaHRcIjpcbiAgICAgICAgdGhpcy5jb2xvclBpY2tlclN2Yy51bnNldEhpZ2hsaWdodChlZGl0b3IsIGFyZ3NbMF0gYXMgYm9vbGVhbik7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFwiY2xlYXJDb250ZW50XCI6XG4gICAgICAgIHRoaXMuY2xlYXJDb250ZW50KGVkaXRvcik7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFwiZXhwb3J0QXNcIjpcbiAgICAgICAgdm9pZCB0aGlzLmV4cG9ydEFzKFxuICAgICAgICAgIGVkaXRvcixcbiAgICAgICAgICBhcmdzWzBdIGFzIEF0ZUV4cG9ydEZvcm1hdCxcbiAgICAgICAgICBhcmdzWzFdIGFzIFwiY2xpcGJvYXJkXCIgfCBcImRvd25sb2FkXCIsXG4gICAgICAgICAgYXJnc1syXSBhcyBBdGVFeHBvcnRPcHRpb25zIHwgdW5kZWZpbmVkXG4gICAgICAgICk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIC8vIC0tLSBGb3JtYXR0aW5nIENvbW1hbmRzIC0tLVxuXG4gIHRvZ2dsZUJvbGQoZWRpdG9yOiBFZGl0b3IpOiB2b2lkIHtcbiAgICBpZiAoIWVkaXRvcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBlZGl0b3IuY2hhaW4oKS5mb2N1cygpLnRvZ2dsZUJvbGQoKS5ydW4oKTtcbiAgfVxuXG4gIHRvZ2dsZUl0YWxpYyhlZGl0b3I6IEVkaXRvcik6IHZvaWQge1xuICAgIGlmICghZWRpdG9yKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGVkaXRvci5jaGFpbigpLmZvY3VzKCkudG9nZ2xlSXRhbGljKCkucnVuKCk7XG4gIH1cblxuICB0b2dnbGVTdHJpa2UoZWRpdG9yOiBFZGl0b3IpOiB2b2lkIHtcbiAgICBpZiAoIWVkaXRvcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBlZGl0b3IuY2hhaW4oKS5mb2N1cygpLnRvZ2dsZVN0cmlrZSgpLnJ1bigpO1xuICB9XG5cbiAgdG9nZ2xlQ29kZShlZGl0b3I6IEVkaXRvcik6IHZvaWQge1xuICAgIGlmICghZWRpdG9yKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGVkaXRvci5jaGFpbigpLmZvY3VzKCkudG9nZ2xlQ29kZSgpLnJ1bigpO1xuICB9XG5cbiAgdG9nZ2xlQ29kZUJsb2NrKGVkaXRvcjogRWRpdG9yKTogdm9pZCB7XG4gICAgaWYgKCFlZGl0b3IpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZWRpdG9yLmNoYWluKCkuZm9jdXMoKS50b2dnbGVDb2RlQmxvY2soKS5ydW4oKTtcbiAgfVxuXG4gIHRvZ2dsZVVuZGVybGluZShlZGl0b3I6IEVkaXRvcik6IHZvaWQge1xuICAgIGlmICghZWRpdG9yKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGVkaXRvci5jaGFpbigpLmZvY3VzKCkudG9nZ2xlVW5kZXJsaW5lKCkucnVuKCk7XG4gIH1cblxuICB0b2dnbGVTdXBlcnNjcmlwdChlZGl0b3I6IEVkaXRvcik6IHZvaWQge1xuICAgIGlmICghZWRpdG9yKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGVkaXRvci5jaGFpbigpLmZvY3VzKCkudG9nZ2xlU3VwZXJzY3JpcHQoKS5ydW4oKTtcbiAgfVxuXG4gIHRvZ2dsZVN1YnNjcmlwdChlZGl0b3I6IEVkaXRvcik6IHZvaWQge1xuICAgIGlmICghZWRpdG9yKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGVkaXRvci5jaGFpbigpLmZvY3VzKCkudG9nZ2xlU3Vic2NyaXB0KCkucnVuKCk7XG4gIH1cblxuICB0b2dnbGVIZWFkaW5nKGVkaXRvcjogRWRpdG9yLCBsZXZlbDogMSB8IDIgfCAzKTogdm9pZCB7XG4gICAgaWYgKCFlZGl0b3IpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZWRpdG9yLmNoYWluKCkuZm9jdXMoKS50b2dnbGVIZWFkaW5nKHsgbGV2ZWwgfSkucnVuKCk7XG4gIH1cblxuICB0b2dnbGVIaWdobGlnaHQoZWRpdG9yOiBFZGl0b3IsIGNvbG9yPzogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKCFlZGl0b3IpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGNvbG9yKSB7XG4gICAgICBlZGl0b3IuY2hhaW4oKS5mb2N1cygpLnNldEhpZ2hsaWdodCh7IGNvbG9yIH0pLnJ1bigpO1xuICAgIH0gZWxzZSB7XG4gICAgICBlZGl0b3IuY2hhaW4oKS5mb2N1cygpLnRvZ2dsZUhpZ2hsaWdodCgpLnJ1bigpO1xuICAgIH1cbiAgfVxuXG4gIC8vIC0tLSBTdHJ1Y3R1cmUgQ29tbWFuZHMgLS0tXG5cbiAgdG9nZ2xlQnVsbGV0TGlzdChlZGl0b3I6IEVkaXRvcik6IHZvaWQge1xuICAgIGlmICghZWRpdG9yKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGVkaXRvci5jaGFpbigpLmZvY3VzKCkudG9nZ2xlQnVsbGV0TGlzdCgpLnJ1bigpO1xuICB9XG5cbiAgdG9nZ2xlT3JkZXJlZExpc3QoZWRpdG9yOiBFZGl0b3IpOiB2b2lkIHtcbiAgICBpZiAoIWVkaXRvcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBlZGl0b3IuY2hhaW4oKS5mb2N1cygpLnRvZ2dsZU9yZGVyZWRMaXN0KCkucnVuKCk7XG4gIH1cblxuICB0b2dnbGVCbG9ja3F1b3RlKGVkaXRvcjogRWRpdG9yKTogdm9pZCB7XG4gICAgaWYgKCFlZGl0b3IpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZWRpdG9yLmNoYWluKCkuZm9jdXMoKS50b2dnbGVCbG9ja3F1b3RlKCkucnVuKCk7XG4gIH1cblxuICBzZXRUZXh0QWxpZ24oZWRpdG9yOiBFZGl0b3IsIGFsaWdubWVudDogXCJsZWZ0XCIgfCBcImNlbnRlclwiIHwgXCJyaWdodFwiIHwgXCJqdXN0aWZ5XCIpOiB2b2lkIHtcbiAgICBpZiAoIWVkaXRvcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBlZGl0b3IuY2hhaW4oKS5mb2N1cygpLnNldFRleHRBbGlnbihhbGlnbm1lbnQpLnJ1bigpO1xuICB9XG5cbiAgaW5zZXJ0SG9yaXpvbnRhbFJ1bGUoZWRpdG9yOiBFZGl0b3IpOiB2b2lkIHtcbiAgICBpZiAoIWVkaXRvcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBlZGl0b3IuY2hhaW4oKS5mb2N1cygpLnNldEhvcml6b250YWxSdWxlKCkucnVuKCk7XG4gIH1cblxuICAvLyAtLS0gSGlzdG9yeSBDb21tYW5kcyAtLS1cblxuICB1bmRvKGVkaXRvcjogRWRpdG9yKTogdm9pZCB7XG4gICAgaWYgKCFlZGl0b3IpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZWRpdG9yLmNoYWluKCkuZm9jdXMoKS51bmRvKCkucnVuKCk7XG4gIH1cblxuICByZWRvKGVkaXRvcjogRWRpdG9yKTogdm9pZCB7XG4gICAgaWYgKCFlZGl0b3IpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZWRpdG9yLmNoYWluKCkuZm9jdXMoKS5yZWRvKCkucnVuKCk7XG4gIH1cblxuICAvLyAtLS0gVGFibGUgQ29tbWFuZHMgLS0tXG5cbiAgaW5zZXJ0VGFibGUoZWRpdG9yOiBFZGl0b3IsIHJvd3MgPSAzLCBjb2xzID0gMyk6IHZvaWQge1xuICAgIGlmICghZWRpdG9yKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGVkaXRvci5jaGFpbigpLmZvY3VzKCkuaW5zZXJ0VGFibGUoeyByb3dzLCBjb2xzIH0pLnJ1bigpO1xuICB9XG5cbiAgYWRkQ29sdW1uQmVmb3JlKGVkaXRvcjogRWRpdG9yKTogdm9pZCB7XG4gICAgaWYgKCFlZGl0b3IpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZWRpdG9yLmNoYWluKCkuZm9jdXMoKS5hZGRDb2x1bW5CZWZvcmUoKS5ydW4oKTtcbiAgfVxuXG4gIGFkZENvbHVtbkFmdGVyKGVkaXRvcjogRWRpdG9yKTogdm9pZCB7XG4gICAgaWYgKCFlZGl0b3IpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZWRpdG9yLmNoYWluKCkuZm9jdXMoKS5hZGRDb2x1bW5BZnRlcigpLnJ1bigpO1xuICB9XG5cbiAgZGVsZXRlQ29sdW1uKGVkaXRvcjogRWRpdG9yKTogdm9pZCB7XG4gICAgaWYgKCFlZGl0b3IpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZWRpdG9yLmNoYWluKCkuZm9jdXMoKS5kZWxldGVDb2x1bW4oKS5ydW4oKTtcbiAgfVxuXG4gIGFkZFJvd0JlZm9yZShlZGl0b3I6IEVkaXRvcik6IHZvaWQge1xuICAgIGlmICghZWRpdG9yKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGVkaXRvci5jaGFpbigpLmZvY3VzKCkuYWRkUm93QmVmb3JlKCkucnVuKCk7XG4gIH1cblxuICBhZGRSb3dBZnRlcihlZGl0b3I6IEVkaXRvcik6IHZvaWQge1xuICAgIGlmICghZWRpdG9yKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGVkaXRvci5jaGFpbigpLmZvY3VzKCkuYWRkUm93QWZ0ZXIoKS5ydW4oKTtcbiAgfVxuXG4gIGRlbGV0ZVJvdyhlZGl0b3I6IEVkaXRvcik6IHZvaWQge1xuICAgIGlmICghZWRpdG9yKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGVkaXRvci5jaGFpbigpLmZvY3VzKCkuZGVsZXRlUm93KCkucnVuKCk7XG4gIH1cblxuICBkZWxldGVUYWJsZShlZGl0b3I6IEVkaXRvcik6IHZvaWQge1xuICAgIGlmICghZWRpdG9yKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGVkaXRvci5jaGFpbigpLmZvY3VzKCkuZGVsZXRlVGFibGUoKS5ydW4oKTtcbiAgfVxuXG4gIG1lcmdlQ2VsbHMoZWRpdG9yOiBFZGl0b3IpOiB2b2lkIHtcbiAgICBpZiAoIWVkaXRvcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBlZGl0b3IuY2hhaW4oKS5mb2N1cygpLm1lcmdlQ2VsbHMoKS5ydW4oKTtcbiAgfVxuXG4gIHNwbGl0Q2VsbChlZGl0b3I6IEVkaXRvcik6IHZvaWQge1xuICAgIGlmICghZWRpdG9yKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGVkaXRvci5jaGFpbigpLmZvY3VzKCkuc3BsaXRDZWxsKCkucnVuKCk7XG4gIH1cblxuICB0b2dnbGVIZWFkZXJDb2x1bW4oZWRpdG9yOiBFZGl0b3IpOiB2b2lkIHtcbiAgICBpZiAoIWVkaXRvcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBlZGl0b3IuY2hhaW4oKS5mb2N1cygpLnRvZ2dsZUhlYWRlckNvbHVtbigpLnJ1bigpO1xuICB9XG5cbiAgdG9nZ2xlSGVhZGVyUm93KGVkaXRvcjogRWRpdG9yKTogdm9pZCB7XG4gICAgaWYgKCFlZGl0b3IpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZWRpdG9yLmNoYWluKCkuZm9jdXMoKS50b2dnbGVIZWFkZXJSb3coKS5ydW4oKTtcbiAgfVxuXG4gIC8vIC0tLSBVdGlsaXR5IENvbW1hbmRzIC0tLVxuXG4gIGNsZWFyQ29udGVudChlZGl0b3I6IEVkaXRvcik6IHZvaWQge1xuICAgIGlmICghZWRpdG9yKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGVkaXRvci5jb21tYW5kcy5jbGVhckNvbnRlbnQodHJ1ZSk7XG4gIH1cblxuICAvLyAtLS0gRXhwb3J0IENvbW1hbmRzIC0tLVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBlZGl0b3IgY29udGVudCBpbiB0aGUgZ2l2ZW4gZm9ybWF0LlxuICAgKiBAcGFyYW0gZm9ybWF0ICdodG1sJyB8ICdtYXJrZG93bicgfCAndGV4dCdcbiAgICovXG4gIGdldENvbnRlbnQoZWRpdG9yOiBFZGl0b3IsIGZvcm1hdDogQXRlRXhwb3J0Rm9ybWF0KTogc3RyaW5nIHtcbiAgICBpZiAoIWVkaXRvcikge1xuICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmV4cG9ydFN2Yy5nZXRDb250ZW50KGVkaXRvciwgZm9ybWF0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHBvcnRzIHRoZSBlZGl0b3IgY29udGVudC5cbiAgICogQHBhcmFtIGZvcm1hdCAgJ2h0bWwnIHwgJ21hcmtkb3duJyB8ICd0ZXh0J1xuICAgKiBAcGFyYW0gbWV0aG9kICAnY2xpcGJvYXJkJyB8ICdkb3dubG9hZCdcbiAgICogQHBhcmFtIG9wdGlvbnMgT3B0aW9uYWwgZmlsZW5hbWUgZm9yIGRvd25sb2FkXG4gICAqL1xuICBhc3luYyBleHBvcnRBcyhcbiAgICBlZGl0b3I6IEVkaXRvcixcbiAgICBmb3JtYXQ6IEF0ZUV4cG9ydEZvcm1hdCxcbiAgICBtZXRob2Q6IFwiY2xpcGJvYXJkXCIgfCBcImRvd25sb2FkXCIsXG4gICAgb3B0aW9ucz86IEF0ZUV4cG9ydE9wdGlvbnNcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCFlZGl0b3IpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKG1ldGhvZCA9PT0gXCJjbGlwYm9hcmRcIikge1xuICAgICAgYXdhaXQgdGhpcy5leHBvcnRTdmMuZXhwb3J0VG9DbGlwYm9hcmQoZWRpdG9yLCBmb3JtYXQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmV4cG9ydFN2Yy5leHBvcnRUb0ZpbGUoZWRpdG9yLCBmb3JtYXQsIG9wdGlvbnMpO1xuICAgIH1cbiAgfVxuXG4gIGZvY3VzKGVkaXRvcjogRWRpdG9yKTogdm9pZCB7XG4gICAgaWYgKCFlZGl0b3IpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZWRpdG9yLmNoYWluKCkuZm9jdXMoKS5ydW4oKTtcbiAgfVxuXG4gIGJsdXIoZWRpdG9yOiBFZGl0b3IpOiB2b2lkIHtcbiAgICBpZiAoIWVkaXRvcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBlZGl0b3IuY2hhaW4oKS5ibHVyKCkucnVuKCk7XG4gIH1cblxuICBzZXRDb250ZW50KGVkaXRvcjogRWRpdG9yLCBjb250ZW50OiBzdHJpbmcsIGVtaXRVcGRhdGUgPSB0cnVlKTogdm9pZCB7XG4gICAgaWYgKCFlZGl0b3IpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZWRpdG9yLmNvbW1hbmRzLnNldENvbnRlbnQoY29udGVudCwgeyBlbWl0VXBkYXRlIH0pO1xuICB9XG5cbiAgc2V0RWRpdGFibGUoZWRpdG9yOiBFZGl0b3IsIGVkaXRhYmxlOiBib29sZWFuKTogdm9pZCB7XG4gICAgaWYgKCFlZGl0b3IpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZWRpdG9yLnNldEVkaXRhYmxlKGVkaXRhYmxlKTtcbiAgfVxuXG4gIGluc2VydENvbnRlbnQoZWRpdG9yOiBFZGl0b3IsIGNvbnRlbnQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICghZWRpdG9yKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGVkaXRvci5jaGFpbigpLmZvY3VzKCkuaW5zZXJ0Q29udGVudChjb250ZW50KS5ydW4oKTtcbiAgfVxuXG4gIGFzeW5jIGluc2VydEltYWdlKGVkaXRvcjogRWRpdG9yLCBvcHRpb25zPzogQXRlSW1hZ2VVcGxvYWRPcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuaW1hZ2VTZXJ2aWNlLnNlbGVjdEFuZFVwbG9hZEltYWdlKGVkaXRvciwgb3B0aW9ucyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvciBpbnNlcnRpbmcgaW1hZ2U6XCIsIGVycm9yKTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHVwbG9hZEltYWdlKGVkaXRvcjogRWRpdG9yLCBmaWxlOiBGaWxlLCBvcHRpb25zPzogQXRlSW1hZ2VVcGxvYWRPcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuaW1hZ2VTZXJ2aWNlLnVwbG9hZEFuZEluc2VydEltYWdlKGVkaXRvciwgZmlsZSwgb3B0aW9ucyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvciB1cGxvYWRpbmcgaW1hZ2U6XCIsIGVycm9yKTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuXG4gIGRvd25sb2FkSW1hZ2UoZWRpdG9yOiBFZGl0b3IpOiB2b2lkIHtcbiAgICB0aGlzLmltYWdlU2VydmljZS5kb3dubG9hZEltYWdlKGVkaXRvcik7XG4gIH1cblxuICBoYW5kbGVJbWFnZURyb3AoZWRpdG9yOiBFZGl0b3IsIGV2ZW50OiBEcmFnRXZlbnQsIG9wdGlvbnM/OiBBdGVJbWFnZVVwbG9hZE9wdGlvbnMpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pbWFnZVNlcnZpY2UuaGFuZGxlRHJvcChlZGl0b3IsIGV2ZW50LCBvcHRpb25zKTtcbiAgfVxuXG4gIGhhbmRsZUltYWdlUGFzdGUoXG4gICAgZWRpdG9yOiBFZGl0b3IsXG4gICAgZXZlbnQ6IENsaXBib2FyZEV2ZW50LFxuICAgIG9wdGlvbnM/OiBBdGVJbWFnZVVwbG9hZE9wdGlvbnNcbiAgKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaW1hZ2VTZXJ2aWNlLmhhbmRsZVBhc3RlKGVkaXRvciwgZXZlbnQsIG9wdGlvbnMpO1xuICB9XG5cbiAgcmVob3N0SW1hZ2UoZmlsZTogRmlsZSwgb3B0aW9ucz86IEF0ZUltYWdlVXBsb2FkT3B0aW9ucyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuaW1hZ2VTZXJ2aWNlLnJlaG9zdEltYWdlKGZpbGUsIG9wdGlvbnMpO1xuICB9XG5cbiAgZ2V0IGhhc1VwbG9hZEhhbmRsZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaW1hZ2VTZXJ2aWNlLnVwbG9hZEhhbmRsZXIgIT09IG51bGw7XG4gIH1cbn1cbiJdfQ==
|