@plait/mind 0.2.0-next.3 → 0.2.0-next.5
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/draw/indented-link.d.ts +2 -2
- package/draw/link/logic-link.d.ts +2 -2
- package/draw/link.d.ts +2 -2
- package/esm2020/draw/indented-link.mjs +7 -6
- package/esm2020/draw/link/logic-link.mjs +7 -6
- package/esm2020/draw/link.mjs +8 -7
- package/esm2020/draw/shape.mjs +3 -3
- package/esm2020/drawer/quick-insert.drawer.mjs +9 -8
- package/esm2020/interfaces/element.mjs +13 -2
- package/esm2020/node.component.mjs +6 -6
- package/esm2020/plugins/emoji/emoji-base.component.mjs +4 -2
- package/esm2020/plugins/emoji/emoji.drawer.mjs +2 -1
- package/esm2020/plugins/with-abstract.mjs +2 -2
- package/esm2020/plugins/with-dnd.mjs +2 -2
- package/esm2020/plugins/with-mind.mjs +3 -2
- package/esm2020/transforms/layout.mjs +8 -2
- package/esm2020/utils/abstract/common.mjs +49 -15
- package/esm2020/utils/abstract/resize.mjs +2 -2
- package/esm2020/utils/clipboard.mjs +10 -3
- package/esm2020/utils/draw-placeholder.mjs +20 -20
- package/esm2020/utils/index.mjs +2 -2
- package/esm2020/utils/mind.mjs +30 -21
- package/esm2020/utils/node-style/branch.mjs +28 -0
- package/esm2020/utils/node-style/index.mjs +3 -0
- package/esm2020/utils/node-style/node.mjs +22 -0
- package/esm2020/utils/path.mjs +3 -3
- package/fesm2015/plait-mind.mjs +1449 -1377
- package/fesm2015/plait-mind.mjs.map +1 -1
- package/fesm2020/plait-mind.mjs +1451 -1379
- package/fesm2020/plait-mind.mjs.map +1 -1
- package/interfaces/element.d.ts +3 -2
- package/package.json +1 -1
- package/plugins/emoji/emoji-base.component.d.ts +3 -1
- package/utils/abstract/common.d.ts +6 -1
- package/utils/abstract/resize.d.ts +1 -1
- package/utils/draw-placeholder.d.ts +8 -8
- package/utils/index.d.ts +1 -1
- package/utils/mind.d.ts +2 -1
- package/utils/node-style/branch.d.ts +7 -0
- package/utils/node-style/index.d.ts +2 -0
- package/utils/node-style/node.d.ts +3 -0
- package/esm2020/utils/colors.mjs +0 -41
- package/utils/colors.d.ts +0 -4
package/esm2020/utils/mind.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { MindLayoutType } from '@plait/layouts';
|
|
2
2
|
import { addSelectedElement, clearSelectedElement, idCreator, isNullOrUndefined, PlaitBoard, PlaitElement, Transforms } from '@plait/core';
|
|
3
3
|
import { Node } from 'slate';
|
|
4
4
|
import { MindNodeShape, NODE_MIN_WIDTH, ROOT_TOPIC_FONT_SIZE, TOPIC_DEFAULT_MAX_WORD_COUNT } from '../constants/node';
|
|
@@ -7,6 +7,7 @@ import { MindElement } from '../interfaces/element';
|
|
|
7
7
|
import { getRootLayout } from './layout';
|
|
8
8
|
import { TEXT_DEFAULT_HEIGHT, getSizeByText, ROOT_DEFAULT_HEIGHT } from '@plait/richtext';
|
|
9
9
|
import { enterNodeEditing } from './node';
|
|
10
|
+
import { getBehindAbstracts, getCorrespondingAbstract } from './abstract/common';
|
|
10
11
|
export function findParentElement(element) {
|
|
11
12
|
const component = PlaitElement.getComponent(element);
|
|
12
13
|
if (component && component.parent) {
|
|
@@ -82,6 +83,12 @@ export const transformRootToNode = (board, node) => {
|
|
|
82
83
|
}
|
|
83
84
|
return newNode;
|
|
84
85
|
};
|
|
86
|
+
export const transformAbstractToNode = (node) => {
|
|
87
|
+
const newNode = { ...node };
|
|
88
|
+
delete newNode.start;
|
|
89
|
+
delete newNode.end;
|
|
90
|
+
return newNode;
|
|
91
|
+
};
|
|
85
92
|
export const transformNodeToRoot = (board, node) => {
|
|
86
93
|
const newElement = { ...node };
|
|
87
94
|
let text = Node.string(newElement.data.topic);
|
|
@@ -178,8 +185,8 @@ export const createMindElement = (text, width, height, options) => {
|
|
|
178
185
|
if (options.layout) {
|
|
179
186
|
newElement.layout = options.layout;
|
|
180
187
|
}
|
|
181
|
-
if (options.
|
|
182
|
-
newElement.
|
|
188
|
+
if (options.branchColor) {
|
|
189
|
+
newElement.branchColor = options.branchColor;
|
|
183
190
|
}
|
|
184
191
|
return newElement;
|
|
185
192
|
};
|
|
@@ -193,12 +200,6 @@ export const insertMindElement = (board, inheritNode, path) => {
|
|
|
193
200
|
}
|
|
194
201
|
shape = inheritNode.shape;
|
|
195
202
|
const newElement = createMindElement('', NODE_MIN_WIDTH, TEXT_DEFAULT_HEIGHT, { fill, strokeColor, strokeWidth, shape });
|
|
196
|
-
const index = path[path.length - 1];
|
|
197
|
-
const abstractNode = inheritNode.children.find(child => AbstractNode.isAbstract(child) && index > child.start && index <= child.end + 1);
|
|
198
|
-
if (abstractNode) {
|
|
199
|
-
const path = PlaitBoard.findPath(board, abstractNode);
|
|
200
|
-
Transforms.setNode(board, { end: abstractNode.end + 1 }, path);
|
|
201
|
-
}
|
|
202
203
|
Transforms.insertNode(board, newElement, path);
|
|
203
204
|
clearSelectedElement(board);
|
|
204
205
|
addSelectedElement(board, newElement);
|
|
@@ -220,21 +221,29 @@ export const deleteSelectedELements = (board, selectedElements) => {
|
|
|
220
221
|
const accumulativeProperties = new WeakMap();
|
|
221
222
|
deletableElements.forEach(node => {
|
|
222
223
|
if (!PlaitMind.isMind(node)) {
|
|
223
|
-
const
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
const abstractNode = abstract;
|
|
228
|
-
if (index >= abstractNode.start && index <= abstractNode.end) {
|
|
229
|
-
let newProperties = accumulativeProperties.get(abstractNode);
|
|
224
|
+
const behindAbstracts = getBehindAbstracts(node).filter(abstract => !deletableElements.includes(abstract));
|
|
225
|
+
if (behindAbstracts.length) {
|
|
226
|
+
behindAbstracts.forEach(abstract => {
|
|
227
|
+
let newProperties = accumulativeProperties.get(abstract);
|
|
230
228
|
if (!newProperties) {
|
|
231
|
-
newProperties = { start:
|
|
232
|
-
accumulativeProperties.set(
|
|
233
|
-
relativeAbstracts.push(
|
|
229
|
+
newProperties = { start: abstract.start, end: abstract.end };
|
|
230
|
+
accumulativeProperties.set(abstract, newProperties);
|
|
231
|
+
relativeAbstracts.push(abstract);
|
|
234
232
|
}
|
|
233
|
+
newProperties.start = newProperties.start - 1;
|
|
235
234
|
newProperties.end = newProperties.end - 1;
|
|
235
|
+
});
|
|
236
|
+
}
|
|
237
|
+
const correspondingAbstract = getCorrespondingAbstract(node);
|
|
238
|
+
if (correspondingAbstract && !deletableElements.includes(correspondingAbstract)) {
|
|
239
|
+
let newProperties = accumulativeProperties.get(correspondingAbstract);
|
|
240
|
+
if (!newProperties) {
|
|
241
|
+
newProperties = { start: correspondingAbstract.start, end: correspondingAbstract.end };
|
|
242
|
+
accumulativeProperties.set(correspondingAbstract, newProperties);
|
|
243
|
+
relativeAbstracts.push(correspondingAbstract);
|
|
236
244
|
}
|
|
237
|
-
|
|
245
|
+
newProperties.end = newProperties.end - 1;
|
|
246
|
+
}
|
|
238
247
|
}
|
|
239
248
|
});
|
|
240
249
|
const abstractHandles = relativeAbstracts.map(value => {
|
|
@@ -280,4 +289,4 @@ export const divideElementByParent = (elements) => {
|
|
|
280
289
|
}
|
|
281
290
|
return { parentElements, abstractIncludedGroups };
|
|
282
291
|
};
|
|
283
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWluZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL21pbmQvc3JjL3V0aWxzL21pbmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxjQUFjLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5RCxPQUFPLEVBQ0gsa0JBQWtCLEVBQ2xCLG9CQUFvQixFQUNwQixTQUFTLEVBQ1QsaUJBQWlCLEVBRWpCLFVBQVUsRUFDVixZQUFZLEVBRVosVUFBVSxFQUNiLE1BQU0sYUFBYSxDQUFDO0FBQ3JCLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFDN0IsT0FBTyxFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQUUsb0JBQW9CLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUN0SCxPQUFPLEVBQVksU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3BELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxhQUFhLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMxRixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFHMUMsTUFBTSxVQUFVLGlCQUFpQixDQUFDLE9BQW9CO0lBQ2xELE1BQU0sU0FBUyxHQUFHLFlBQVksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFzQixDQUFDO0lBQzFFLElBQUksU0FBUyxJQUFJLFNBQVMsQ0FBQyxNQUFNLEVBQUU7UUFDL0IsT0FBTyxTQUFTLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztLQUNsQztJQUNELE9BQU8sU0FBUyxDQUFDO0FBQ3JCLENBQUM7QUFFRCxNQUFNLFVBQVUsYUFBYSxDQUFDLE9BQW9CO0lBQzlDLElBQUksTUFBTSxD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QUFDO1lBQzVCLHNCQUFzQixDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDOUM7YUFBTTtZQUNILHNCQUFzQixDQUFDLFdBQVcsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUN6RDtLQUNKO0lBQ0QsT0FBTyxFQUFFLGNBQWMsRUFBRSxzQkFBc0IsRUFBRSxDQUFDO0FBQ3RELENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFic3RyYWN0Tm9kZSwgTWluZExheW91dFR5cGUgfSBmcm9tICdAcGxhaXQvbGF5b3V0cyc7XG5pbXBvcnQge1xuICAgIGFkZFNlbGVjdGVkRWxlbWVudCxcbiAgICBjbGVhclNlbGVjdGVkRWxlbWVudCxcbiAgICBpZENyZWF0b3IsXG4gICAgaXNOdWxsT3JVbmRlZmluZWQsXG4gICAgUGF0aCxcbiAgICBQbGFpdEJvYXJkLFxuICAgIFBsYWl0RWxlbWVudCxcbiAgICBQb2ludCxcbiAgICBUcmFuc2Zvcm1zXG59IGZyb20gJ0BwbGFpdC9jb3JlJztcbmltcG9ydCB7IE5vZGUgfSBmcm9tICdzbGF0ZSc7XG5pbXBvcnQgeyBNaW5kTm9kZVNoYXBlLCBOT0RFX01JTl9XSURUSCwgUk9PVF9UT1BJQ19GT05UX1NJWkUsIFRPUElDX0RFRkFVTFRfTUFYX1dPUkRfQ09VTlQgfSBmcm9tICcuLi9jb25zdGFudHMvbm9kZSc7XG5pbXBvcnQgeyBNaW5kTm9kZSwgUGxhaXRNaW5kIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBNaW5kRWxlbWVudCB9IGZyb20gJy4uL2ludGVyZmFjZXMvZWxlbWVudCc7XG5pbXBvcnQgeyBnZXRSb290TGF5b3V0IH0gZnJvbSAnLi9sYXlvdXQnO1xuaW1wb3J0IHsgVEVYVF9ERUZBVUxUX0hFSUdIVCwgZ2V0U2l6ZUJ5VGV4dCwgUk9PVF9ERUZBVUxUX0hFSUdIVCB9IGZyb20gJ0BwbGFpdC9yaWNodGV4dCc7XG5pbXBvcnQgeyBlbnRlck5vZGVFZGl0aW5nIH0gZnJvbSAnLi9ub2RlJztcbmltcG9ydCB7IE1pbmROb2RlQ29tcG9uZW50IH0gZnJvbSAnLi4vbm9kZS5jb21wb25lbnQnO1xuXG5leHBvcnQgZnVuY3Rpb24gZmluZFBhcmVudEVsZW1lbnQoZWxlbWVudDogTWluZEVsZW1lbnQpOiBNaW5kRWxlbWVudCB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgY29tcG9uZW50ID0gUGxhaXRFbGVtZW50LmdldENvbXBvbmVudChlbGVtZW50KSBhcyBNaW5kTm9kZUNvbXBvbmVudDtcbiAgICBpZiAoY29tcG9uZW50ICYmIGNvbXBvbmVudC5wYXJlbnQpIHtcbiAgICAgICAgcmV0dXJuIGNvbXBvbmVudC5wYXJlbnQub3JpZ2luO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZmluZFVwRWxlbWVudChlbGVtZW50OiBNaW5kRWxlbWVudCk6IHsgcm9vdDogTWluZEVsZW1lbnQ7IGJyYW5jaD86IE1pbmRFbGVtZW50IH0ge1xuICAgIGxldCBicmFuY2g7XG4gICAgbGV0IHJvb3QgPSBlbGVtZW50O1xuICAgIGxldCBwYXJlbnQgPSBmaW5kUGFyZW50RWxlbWVudChlbGVtZW50KTtcbiAgICB3aGlsZSAocGFyZW50KSB7XG4gICAgICAgIGJyYW5jaCA9IHJvb3Q7XG4gICAgICAgIHJvb3QgPSBwYXJlbnQ7XG4gICAgICAgIHBhcmVudCA9IGZpbmRQYXJlbnRFbGVtZW50KHBhcmVudCk7XG4gICAgfVxuICAgIHJldHVybiB7IHJvb3QsIGJyYW5jaCB9O1xufVxuXG5leHBvcnQgY29uc3QgZ2V0Q2hpbGRyZW5Db3VudCA9IChlbGVtZW50OiBNaW5kRWxlbWVudCkgPT4ge1xuICAgIGNvbnN0IGNvdW50OiBudW1iZXIgPSBlbGVtZW50LmNoaWxkcmVuLnJlZHVjZSgocDogbnVtYmVyLCBjOiBNaW5kRWxlbWVudCkgPT4ge1xuICAgICAgICByZXR1cm4gcCArIGdldENoaWxkcmVuQ291bnQoYyk7XG4gICAgfSwgMCk7XG4gICAgcmV0dXJuIGNvdW50ICsgZWxlbWVudC5jaGlsZHJlbi5sZW5ndGg7XG59O1xuXG5leHBvcnQgY29uc3QgaXNDaGlsZEVsZW1lbnQgPSAob3JpZ2luOiBNaW5kRWxlbWVudCwgY2hpbGQ6IE1pbmRFbGVtZW50KSA9PiB7XG4gICAgbGV0IHBhcmVudCA9IGZpbmRQYXJlbnRFbGVtZW50KGNoaWxkKTtcbiAgICB3aGlsZSAocGFyZW50KSB7XG4gICAgICAgIGlmIChwYXJlbnQgPT09IG9yaWdpbikge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcGFyZW50ID0gZmluZFBhcmVudEVsZW1lbnQocGFyZW50KTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuZXhwb3J0IGNvbnN0IGZpbHRlckNoaWxkRWxlbWVudCA9IChlbGVtZW50czogTWluZEVsZW1lbnRbXSkgPT4ge1xuICAgIGxldCByZXN1bHQ6IE1pbmRFbGVtZW50W10gPSBbXTtcbiAgICBlbGVtZW50cy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgICBjb25zdCBpc0NoaWxkID0gZWxlbWVudHMuc29tZShub2RlID0+IHtcbiAgICAgICAgICAgIHJldHVybiBpc0NoaWxkRWxlbWVudChub2RlLCBlbGVtZW50KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKCFpc0NoaWxkKSB7XG4gICAgICAgICAgICByZXN1bHQucHVzaChlbGVtZW50KTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xuXG5leHBvcnQgY29uc3QgaXNDaGlsZFJpZ2h0ID0gKG5vZGU6IE1pbmROb2RlLCBjaGlsZDogTWluZE5vZGUpID0+IHtcbiAgICByZXR1cm4gbm9kZS54IDwgY2hpbGQueDtcbn07XG5cbmV4cG9ydCBjb25zdCBpc0NoaWxkVXAgPSAobm9kZTogTWluZE5vZGUsIGNoaWxkOiBNaW5kTm9kZSkgPT4ge1xuICAgIHJldHVybiBub2RlLnkgPiBjaGlsZC55O1xufTtcblxuZXhwb3J0IGNvbnN0IGNvcHlOZXdOb2RlID0gKG5vZGU6IE1pbmRFbGVtZW50KSA9PiB7XG4gICAgY29uc3QgbmV3Tm9kZTogTWluZEVsZW1lbnQgPSB7IC4uLm5vZGUgfTtcbiAgICBuZXdOb2RlLmlkID0gaWRDcmVhdG9yKCk7XG4gICAgbmV3Tm9kZS5jaGlsZHJlbiA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBjaGlsZE5vZGUgb2Ygbm9kZS5jaGlsZHJlbikge1xuICAgICAgICBuZXdOb2RlLmNoaWxkcmVuLnB1c2goY29weU5ld05vZGUoY2hpbGROb2RlKSk7XG4gICAgfVxuICAgIHJldHVybiBuZXdOb2RlO1xufTtcblxuZXhwb3J0IGNvbnN0IHRyYW5zZm9ybVJvb3RUb05vZGUgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIG5vZGU6IE1pbmRFbGVtZW50KSA9PiB7XG4gICAgY29uc3QgbmV3Tm9kZTogTWluZEVsZW1lbnQgPSB7IC4uLm5vZGUgfTtcbiAgICBkZWxldGUgbmV3Tm9kZS5pc1Jvb3Q7XG4gICAgZGVsZXRlIG5ld05vZGUucmlnaHROb2RlQ291bnQ7XG4gICAgZGVsZXRlIG5ld05vZGUudHlwZTtcblxuICAgIGNvbnN0IHRleHQgPSBOb2RlLnN0cmluZyhub2RlLmRhdGEudG9waWMuY2hpbGRyZW5bMF0pIHx8ICcgJztcbiAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQgfSA9IGdldFNpemVCeVRleHQodGV4dCwgUGxhaXRCb2FyZC5nZXRWaWV3cG9ydENvbnRhaW5lcihib2FyZCksIFRPUElDX0RFRkFVTFRfTUFYX1dPUkRfQ09VTlQpO1xuXG4gICAgbmV3Tm9kZS53aWR0aCA9IE1hdGgubWF4KHdpZHRoLCBOT0RFX01JTl9XSURUSCk7XG4gICAgbmV3Tm9kZS5oZWlnaHQgPSBoZWlnaHQ7XG5cbiAgICBpZiAobmV3Tm9kZS5sYXlvdXQgPT09IE1pbmRMYXlvdXRUeXBlLnN0YW5kYXJkKSB7XG4gICAgICAgIGRlbGV0ZSBuZXdOb2RlLmxheW91dDtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3Tm9kZTtcbn07XG5cbmV4cG9ydCBjb25zdCB0cmFuc2Zvcm1Ob2RlVG9Sb290ID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBub2RlOiBNaW5kRWxlbWVudCk6IE1pbmRFbGVtZW50ID0+IHtcbiAgICBjb25zdCBuZXdFbGVtZW50ID0geyAuLi5ub2RlIH07XG4gICAgbGV0IHRleHQgPSBOb2RlLnN0cmluZyhuZXdFbGVtZW50LmRhdGEudG9waWMpO1xuXG4gICAgaWYgKCF0ZXh0KSB7XG4gICAgICAgIHRleHQgPSAn5oCd57u05a+85Zu+JztcbiAgICAgICAgbmV3RWxlbWVudC5kYXRhLnRvcGljID0geyBjaGlsZHJlbjogW3sgdGV4dCB9XSB9O1xuICAgIH1cblxuICAgIGRlbGV0ZSBuZXdFbGVtZW50Py5zdHJva2VDb2xvcjtcbiAgICBkZWxldGUgbmV3RWxlbWVudD8uZmlsbDtcbiAgICBkZWxldGUgbmV3RWxlbWVudD8uc2hhcGU7XG4gICAgZGVsZXRlIG5ld0VsZW1lbnQ/LnN0cm9rZVdpZHRoO1xuXG4gICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0IH0gPSBnZXRTaXplQnlUZXh0KFxuICAgICAgICB0ZXh0LFxuICAgICAgICBQbGFpdEJvYXJkLmdldFZpZXdwb3J0Q29udGFpbmVyKGJvYXJkKSxcbiAgICAgICAgVE9QSUNfREVGQVVMVF9NQVhfV09SRF9DT1VOVCxcbiAgICAgICAgUk9PVF9UT1BJQ19GT05UX1NJWkVcbiAgICApO1xuICAgIG5ld0VsZW1lbnQud2lkdGggPSBNYXRoLm1heCh3aWR0aCwgTk9ERV9NSU5fV0lEVEgpO1xuICAgIG5ld0VsZW1lbnQuaGVpZ2h0ID0gaGVpZ2h0O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgLi4ubmV3RWxlbWVudCxcbiAgICAgICAgbGF5b3V0OiBuZXdFbGVtZW50LmxheW91dCA/PyBNaW5kTGF5b3V0VHlwZS5yaWdodCxcbiAgICAgICAgaXNDb2xsYXBzZWQ6IGZhbHNlLFxuICAgICAgICBpc1Jvb3Q6IHRydWUsXG4gICAgICAgIHR5cGU6ICdtaW5kbWFwJ1xuICAgIH07XG59O1xuXG5leHBvcnQgY29uc3QgZXh0cmFjdE5vZGVzVGV4dCA9IChub2RlOiBNaW5kRWxlbWVudCkgPT4ge1xuICAgIGxldCBzdHIgPSAnJztcbiAgICBpZiAobm9kZSkge1xuICAgICAgICBzdHIgKz0gTm9kZS5zdHJpbmcobm9kZS5kYXRhLnRvcGljLmNoaWxkcmVuWzBdKSArICcgJztcbiAgICAgICAgZm9yIChjb25zdCBjaGlsZE5vZGUgb2Ygbm9kZS5jaGlsZHJlbikge1xuICAgICAgICAgICAgc3RyICs9IGV4dHJhY3ROb2Rlc1RleHQoY2hpbGROb2RlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gc3RyO1xufTtcblxuZXhwb3J0IGNvbnN0IGNoYW5nZVJpZ2h0Tm9kZUNvdW50ID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBwYXJlbnRQYXRoOiBQYXRoLCBjaGFuZ2VOdW1iZXI6IG51bWJlcikgPT4ge1xuICAgIGNvbnN0IF9yaWdodE5vZGVDb3VudCA9IGJvYXJkLmNoaWxkcmVuW3BhcmVudFBhdGhbMF1dLnJpZ2h0Tm9kZUNvdW50O1xuICAgIFRyYW5zZm9ybXMuc2V0Tm9kZShcbiAgICAgICAgYm9hcmQsXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJpZ2h0Tm9kZUNvdW50OlxuICAgICAgICAgICAgICAgIGNoYW5nZU51bWJlciA+PSAwXG4gICAgICAgICAgICAgICAgICAgID8gX3JpZ2h0Tm9kZUNvdW50ISArIGNoYW5nZU51bWJlclxuICAgICAgICAgICAgICAgICAgICA6IF9yaWdodE5vZGVDb3VudCEgKyBjaGFuZ2VOdW1iZXIgPCAwXG4gICAgICAgICAgICAgICAgICAgID8gMFxuICAgICAgICAgICAgICAgICAgICA6IF9yaWdodE5vZGVDb3VudCEgKyBjaGFuZ2VOdW1iZXJcbiAgICAgICAgfSxcbiAgICAgICAgcGFyZW50UGF0aFxuICAgICk7XG59O1xuXG5leHBvcnQgY29uc3Qgc2hvdWxkQ2hhbmdlUmlnaHROb2RlQ291bnQgPSAoc2VsZWN0ZWRFbGVtZW50OiBNaW5kRWxlbWVudCkgPT4ge1xuICAgIGNvbnN0IHBhcmVudEVsZW1lbnQgPSBmaW5kUGFyZW50RWxlbWVudChzZWxlY3RlZEVsZW1lbnQpO1xuICAgIGlmIChwYXJlbnRFbGVtZW50KSB7XG4gICAgICAgIGNvbnN0IG5vZGVJbmRleDogbnVtYmVyID0gcGFyZW50RWxlbWVudC5jaGlsZHJlbi5maW5kSW5kZXgoaXRlbSA9PiBpdGVtLmlkID09PSBzZWxlY3RlZEVsZW1lbnQuaWQpO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICBwYXJlbnRFbGVtZW50LmlzUm9vdCAmJlxuICAgICAgICAgICAgZ2V0Um9vdExheW91dChwYXJlbnRFbGVtZW50KSA9PT0gTWluZExheW91dFR5cGUuc3RhbmRhcmQgJiZcbiAgICAgICAgICAgIHBhcmVudEVsZW1lbnQucmlnaHROb2RlQ291bnQgJiZcbiAgICAgICAgICAgIG5vZGVJbmRleCA8PSBwYXJlbnRFbGVtZW50LnJpZ2h0Tm9kZUNvdW50IC0gMVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVEZWZhdWx0TWluZE1hcEVsZW1lbnQgPSAocG9pbnQ6IFBvaW50LCByaWdodE5vZGVDb3VudDogbnVtYmVyLCBsYXlvdXQ6IE1pbmRMYXlvdXRUeXBlKSA9PiB7XG4gICAgY29uc3Qgcm9vdCA9IGNyZWF0ZU1pbmRFbGVtZW50KCfmgJ3nu7Tlr7zlm74nLCA3MiwgUk9PVF9ERUZBVUxUX0hFSUdIVCwgeyBzaGFwZTogTWluZE5vZGVTaGFwZS5yb3VuZFJlY3RhbmdsZSwgbGF5b3V0IH0pO1xuICAgIHJvb3QucmlnaHROb2RlQ291bnQgPSByaWdodE5vZGVDb3VudDtcbiAgICByb290LmlzUm9vdCA9IHRydWU7XG4gICAgcm9vdC50eXBlID0gJ21pbmRtYXAnO1xuICAgIHJvb3QucG9pbnRzID0gW3BvaW50XTtcbiAgICBjb25zdCBjaGlsZHJlbiA9IFsxLCAxLCAxXS5tYXAoKCkgPT4ge1xuICAgICAgICByZXR1cm4gY3JlYXRlTWluZEVsZW1lbnQoJ+aWsOW7uuiKgueCuScsIDU2LCBURVhUX0RFRkFVTFRfSEVJR0hULCB7IHNoYXBlOiBNaW5kTm9kZVNoYXBlLnJvdW5kUmVjdGFuZ2xlIH0pO1xuICAgIH0pO1xuICAgIHJvb3QuY2hpbGRyZW4gPSBjaGlsZHJlbjtcbiAgICByZXR1cm4gcm9vdDtcbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVNaW5kRWxlbWVudCA9IChcbiAgICB0ZXh0OiBzdHJpbmcsXG4gICAgd2lkdGg6IG51bWJlcixcbiAgICBoZWlnaHQ6IG51bWJlcixcbiAgICBvcHRpb25zOiB7XG4gICAgICAgIGZpbGw/OiBzdHJpbmc7XG4gICAgICAgIHN0cm9rZUNvbG9yPzogc3RyaW5nO1xuICAgICAgICBzdHJva2VXaWR0aD86IG51bWJlcjtcbiAgICAgICAgc2hhcGU/OiBNaW5kTm9kZVNoYXBlO1xuICAgICAgICBsYXlvdXQ/OiBNaW5kTGF5b3V0VHlwZTtcbiAgICAgICAgbGlua0xpbmVDb2xvcj86IHN0cmluZztcbiAgICB9XG4pID0+IHtcbiAgICBjb25zdCBuZXdFbGVtZW50OiBNaW5kRWxlbWVudCA9IHtcbiAgICAgICAgaWQ6IGlkQ3JlYXRvcigpLFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICB0b3BpYzogeyBjaGlsZHJlbjogW3sgdGV4dCB9XSB9XG4gICAgICAgIH0sXG4gICAgICAgIGNoaWxkcmVuOiBbXSxcbiAgICAgICAgd2lkdGgsXG4gICAgICAgIGhlaWdodCxcbiAgICAgICAgZmlsbDogb3B0aW9ucy5maWxsLFxuICAgICAgICBzdHJva2VDb2xvcjogb3B0aW9ucy5zdHJva2VDb2xvcixcbiAgICAgICAgc3Ryb2tlV2lkdGg6IG9wdGlvbnMuc3Ryb2tlV2lkdGgsXG4gICAgICAgIHNoYXBlOiBvcHRpb25zLnNoYXBlXG4gICAgfTtcbiAgICBpZiAob3B0aW9ucy5maWxsKSB7XG4gICAgICAgIG5ld0VsZW1lbnQuZmlsbCA9IG9wdGlvbnMuZmlsbDtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMuc3Ryb2tlQ29sb3IpIHtcbiAgICAgICAgbmV3RWxlbWVudC5zdHJva2VDb2xvciA9IG9wdGlvbnMuc3Ryb2tlQ29sb3I7XG4gICAgfVxuICAgIGlmICghaXNOdWxsT3JVbmRlZmluZWQob3B0aW9ucy5zdHJva2VXaWR0aCkpIHtcbiAgICAgICAgbmV3RWxlbWVudC5zdHJva2VXaWR0aCA9IG9wdGlvbnMuc3Ryb2tlV2lkdGg7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLnNoYXBlKSB7XG4gICAgICAgIG5ld0VsZW1lbnQuc2hhcGUgPSBvcHRpb25zLnNoYXBlO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5sYXlvdXQpIHtcbiAgICAgICAgbmV3RWxlbWVudC5sYXlvdXQgPSBvcHRpb25zLmxheW91dDtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMubGlua0xpbmVDb2xvcikge1xuICAgICAgICBuZXdFbGVtZW50LmxpbmtMaW5lQ29sb3IgPSBvcHRpb25zLmxpbmtMaW5lQ29sb3I7XG4gICAgfVxuICAgIHJldHVybiBuZXdFbGVtZW50O1xufTtcblxuLy8gbGF5b3V0TGV2ZWwg55So5p2l6KGo56S65o+S5YWl5YWE5byf6IqC54K56L+Y5piv5a2Q6IqC54K5XG5leHBvcnQgY29uc3QgaW5zZXJ0TWluZEVsZW1lbnQgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIGluaGVyaXROb2RlOiBNaW5kRWxlbWVudCwgcGF0aDogUGF0aCkgPT4ge1xuICAgIGxldCBmaWxsLFxuICAgICAgICBzdHJva2VDb2xvcixcbiAgICAgICAgc3Ryb2tlV2lkdGgsXG4gICAgICAgIHNoYXBlID0gTWluZE5vZGVTaGFwZS5yb3VuZFJlY3RhbmdsZTtcbiAgICBpZiAoIWluaGVyaXROb2RlLmlzUm9vdCkge1xuICAgICAgICBmaWxsID0gaW5oZXJpdE5vZGUuZmlsbDtcbiAgICAgICAgc3Ryb2tlQ29sb3IgPSBpbmhlcml0Tm9kZS5zdHJva2VDb2xvcjtcbiAgICAgICAgc3Ryb2tlV2lkdGggPSBpbmhlcml0Tm9kZS5zdHJva2VXaWR0aDtcbiAgICB9XG5cbiAgICBzaGFwZSA9IGluaGVyaXROb2RlLnNoYXBlIGFzIE1pbmROb2RlU2hhcGU7XG5cbiAgICBjb25zdCBuZXdFbGVtZW50ID0gY3JlYXRlTWluZEVsZW1lbnQoJycsIE5PREVfTUlOX1dJRFRILCBURVhUX0RFRkFVTFRfSEVJR0hULCB7IGZpbGwsIHN0cm9rZUNvbG9yLCBzdHJva2VXaWR0aCwgc2hhcGUgfSk7XG5cbiAgICBjb25zdCBpbmRleCA9IHBhdGhbcGF0aC5sZW5ndGggLSAxXTtcbiAgICBjb25zdCBhYnN0cmFjdE5vZGUgPSBpbmhlcml0Tm9kZS5jaGlsZHJlbi5maW5kKFxuICAgICAgICBjaGlsZCA9PiBBYnN0cmFjdE5vZGUuaXNBYnN0cmFjdChjaGlsZCkgJiYgaW5kZXggPiBjaGlsZC5zdGFydCAmJiBpbmRleCA8PSBjaGlsZC5lbmQgKyAxXG4gICAgKTtcbiAgICBpZiAoYWJzdHJhY3ROb2RlKSB7XG4gICAgICAgIGNvbnN0IHBhdGggPSBQbGFpdEJvYXJkLmZpbmRQYXRoKGJvYXJkLCBhYnN0cmFjdE5vZGUgYXMgTWluZEVsZW1lbnQpO1xuICAgICAgICBUcmFuc2Zvcm1zLnNldE5vZGUoYm9hcmQsIHsgZW5kOiAoYWJzdHJhY3ROb2RlIGFzIEFic3RyYWN0Tm9kZSkuZW5kICsgMSB9LCBwYXRoKTtcbiAgICB9XG4gICAgVHJhbnNmb3Jtcy5pbnNlcnROb2RlKGJvYXJkLCBuZXdFbGVtZW50LCBwYXRoKTtcbiAgICBjbGVhclNlbGVjdGVkRWxlbWVudChib2FyZCk7XG4gICAgYWRkU2VsZWN0ZWRFbGVtZW50KGJvYXJkLCBuZXdFbGVtZW50KTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgZW50ZXJOb2RlRWRpdGluZyhuZXdFbGVtZW50KTtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBmaW5kTGFzdENoaWxkID0gKGNoaWxkOiBNaW5kTm9kZSkgPT4ge1xuICAgIGxldCByZXN1bHQgPSBjaGlsZDtcbiAgICB3aGlsZSAocmVzdWx0LmNoaWxkcmVuLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICByZXN1bHQgPSByZXN1bHQuY2hpbGRyZW5bcmVzdWx0LmNoaWxkcmVuLmxlbmd0aCAtIDFdO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufTtcblxuZXhwb3J0IGNvbnN0IGRlbGV0ZVNlbGVjdGVkRUxlbWVudHMgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIHNlbGVjdGVkRWxlbWVudHM6IE1pbmRFbGVtZW50W10pID0+IHtcbiAgICAvL+e/u+i9rO+8jOS7juS4i+WIsOS4iuS/ruaUue+8jOmYsuatouaJvuS4jeWIsCBwYXRoXG4gICAgY29uc3QgZGVsZXRhYmxlRWxlbWVudHMgPSBmaWx0ZXJDaGlsZEVsZW1lbnQoc2VsZWN0ZWRFbGVtZW50cykucmV2ZXJzZSgpO1xuXG4gICAgY29uc3QgcmVsYXRpdmVBYnN0cmFjdHM6IEFic3RyYWN0Tm9kZVtdID0gW107XG4gICAgY29uc3QgYWNjdW11bGF0aXZlUHJvcGVydGllcyA9IG5ldyBXZWFrTWFwPEFic3RyYWN0Tm9kZSwgeyBzdGFydDogbnVtYmVyOyBlbmQ6IG51bWJlciB9PigpO1xuXG4gICAgZGVsZXRhYmxlRWxlbWVudHMuZm9yRWFjaChub2RlID0+IHtcbiAgICAgICAgaWYgKCFQbGFpdE1pbmQuaXNNaW5kKG5vZGUpKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJlbnRFbGVtZW50ID0gTWluZEVsZW1lbnQuZ2V0UGFyZW50KG5vZGUpO1xuICAgICAgICAgICAgY29uc3QgaW5kZXggPSBwYXJlbnRFbGVtZW50LmNoaWxkcmVuLmluZGV4T2Yobm9kZSk7XG4gICAgICAgICAgICBjb25zdCBhYnN0cmFjdHMgPSBwYXJlbnRFbGVtZW50LmNoaWxkcmVuLmZpbHRlcih2YWx1ZSA9PiBBYnN0cmFjdE5vZGUuaXNBYnN0cmFjdCh2YWx1ZSkpO1xuICAgICAgICAgICAgYWJzdHJhY3RzLmZvckVhY2goYWJzdHJhY3QgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFic3RyYWN0Tm9kZSA9IGFic3RyYWN0IGFzIEFic3RyYWN0Tm9kZTtcbiAgICAgICAgICAgICAgICBpZiAoaW5kZXggPj0gYWJzdHJhY3ROb2RlLnN0YXJ0ICYmIGluZGV4IDw9IGFic3RyYWN0Tm9kZS5lbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IG5ld1Byb3BlcnRpZXMgPSBhY2N1bXVsYXRpdmVQcm9wZXJ0aWVzLmdldChhYnN0cmFjdE5vZGUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIW5ld1Byb3BlcnRpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld1Byb3BlcnRpZXMgPSB7IHN0YXJ0OiBhYnN0cmFjdE5vZGUuc3RhcnQsIGVuZDogYWJzdHJhY3ROb2RlLmVuZCB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgYWNjdW11bGF0aXZlUHJvcGVydGllcy5zZXQoYWJzdHJhY3ROb2RlLCBuZXdQcm9wZXJ0aWVzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbGF0aXZlQWJzdHJhY3RzLnB1c2goYWJzdHJhY3ROb2RlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBuZXdQcm9wZXJ0aWVzLmVuZCA9IG5ld1Byb3BlcnRpZXMuZW5kIC0gMTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgY29uc3QgYWJzdHJhY3RIYW5kbGVzID0gcmVsYXRpdmVBYnN0cmFjdHMubWFwKHZhbHVlID0+IHtcbiAgICAgICAgY29uc3QgbmV3UHJvcGVydGllcyA9IGFjY3VtdWxhdGl2ZVByb3BlcnRpZXMuZ2V0KHZhbHVlKTtcbiAgICAgICAgaWYgKG5ld1Byb3BlcnRpZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHBhdGggPSBQbGFpdEJvYXJkLmZpbmRQYXRoKGJvYXJkLCB2YWx1ZSBhcyBNaW5kRWxlbWVudCk7XG4gICAgICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChuZXdQcm9wZXJ0aWVzLnN0YXJ0ID4gbmV3UHJvcGVydGllcy5lbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgVHJhbnNmb3Jtcy5yZW1vdmVOb2RlKGJvYXJkLCBwYXRoKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBUcmFuc2Zvcm1zLnNldE5vZGUoYm9hcmQsIG5ld1Byb3BlcnRpZXMsIHBhdGgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICgpID0+IHt9O1xuICAgIH0pO1xuXG4gICAgY29uc3QgZGVsZXRhYmxlSGFuZGxlcyA9IGRlbGV0YWJsZUVsZW1lbnRzLm1hcChub2RlID0+IHtcbiAgICAgICAgY29uc3QgcGF0aCA9IFBsYWl0Qm9hcmQuZmluZFBhdGgoYm9hcmQsIG5vZGUpO1xuICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHNob3VsZENoYW5nZVJpZ2h0Tm9kZUNvdW50KG5vZGUpKSB7XG4gICAgICAgICAgICAgICAgY2hhbmdlUmlnaHROb2RlQ291bnQoYm9hcmQsIHBhdGguc2xpY2UoMCwgcGF0aC5sZW5ndGggLSAxKSwgLTEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgVHJhbnNmb3Jtcy5yZW1vdmVOb2RlKGJvYXJkLCBwYXRoKTtcbiAgICAgICAgfTtcbiAgICB9KTtcblxuICAgIGFic3RyYWN0SGFuZGxlcy5mb3JFYWNoKGFjdGlvbiA9PiBhY3Rpb24oKSk7XG4gICAgZGVsZXRhYmxlSGFuZGxlcy5mb3JFYWNoKGFjdGlvbiA9PiBhY3Rpb24oKSk7XG59O1xuXG5leHBvcnQgY29uc3QgZGl2aWRlRWxlbWVudEJ5UGFyZW50ID0gKGVsZW1lbnRzOiBNaW5kRWxlbWVudFtdKSA9PiB7XG4gICAgY29uc3QgYWJzdHJhY3RJbmNsdWRlZEdyb3VwcyA9IFtdO1xuICAgIGNvbnN0IHBhcmVudEVsZW1lbnRzOiBNaW5kRWxlbWVudFtdID0gW107XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHBhcmVudCA9IE1pbmRFbGVtZW50LmdldFBhcmVudChlbGVtZW50c1tpXSk7XG4gICAgICAgIGNvbnN0IHBhcmVudEluZGV4ID0gcGFyZW50RWxlbWVudHMuaW5kZXhPZihwYXJlbnQpO1xuICAgICAgICBpZiAocGFyZW50SW5kZXggPT09IC0xKSB7XG4gICAgICAgICAgICBwYXJlbnRFbGVtZW50cy5wdXNoKHBhcmVudCk7XG4gICAgICAgICAgICBhYnN0cmFjdEluY2x1ZGVkR3JvdXBzLnB1c2goW2VsZW1lbnRzW2ldXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhYnN0cmFjdEluY2x1ZGVkR3JvdXBzW3BhcmVudEluZGV4XS5wdXNoKGVsZW1lbnRzW2ldKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4geyBwYXJlbnRFbGVtZW50cywgYWJzdHJhY3RJbmNsdWRlZEdyb3VwcyB9O1xufTtcbiJdfQ==
|
|
292
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWluZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL21pbmQvc3JjL3V0aWxzL21pbmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFnQixjQUFjLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5RCxPQUFPLEVBQ0gsa0JBQWtCLEVBQ2xCLG9CQUFvQixFQUNwQixTQUFTLEVBQ1QsaUJBQWlCLEVBRWpCLFVBQVUsRUFDVixZQUFZLEVBRVosVUFBVSxFQUNiLE1BQU0sYUFBYSxDQUFDO0FBQ3JCLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFDN0IsT0FBTyxFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQUUsb0JBQW9CLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUN0SCxPQUFPLEVBQVksU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3BELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxhQUFhLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMxRixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFFMUMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLHdCQUF3QixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFakYsTUFBTSxVQUFVLGlCQUFpQixDQUFDLE9BQW9CO0lBQ2xELE1BQU0sU0FBUyxHQUFHLFlBQVksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFzQixDQUFDO0lBQzFFLElBQUksU0FBUyxJQUFJLFNBQVMsQ0FBQyxNQUFNLEVBQUU7UUFDL0IsT0FBTyxTQUFTLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztLQUNsQztJQUNELE9BQU8sU0FBUyxDQUFDO0FBQ3JCLENBQUM7QUFFRCxNQUFNLFVBQVUsYUFBYSxDQUFDLE9BQW9CO0lBQzlDLElBQUksTUFBTSxDQUFDO0lBQ1gsSUFBSSxJQUFJLEdBQUcsT0FBTyxDQUFDO0lBQ25CLElBQUksTUFBTSxHQUFHLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3hDLE9BQU8sTUFBTSxFQUFFO1FBQ1gsTUFBTSxHQUFHLElBQUksQ0FBQztRQUNkLElBQUksR0FBRyxNQUFNLENBQUM7UUFDZCxNQUFNLEdBQUcsaUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUM7S0FDdEM7SUFDRCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDO0FBQzVCLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLE9BQW9CLEVBQUUsRUFBRTtJQUNyRCxNQUFNLEtBQUssR0FBVyxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQVMsRUFBRSxDQUFjLEVBQUUsRUFBRTtRQUN4RSxPQUFPLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNuQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDTixPQUFPLEtBQUssR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQztBQUMzQyxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsQ0FBQyxNQUFtQixFQUFFLEtBQWtCLEVBQUUsRUFBRTtJQUN0RSxJQUFJLE1BQU0sR0FBRyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN0QyxPQUFPLE1BQU0sRUFBRTtRQUNYLElBQUksTUFBTSxLQUFLLE1BQU0sRUFBRTtZQUNuQixPQUFPLElBQUksQ0FBQztTQUNmO1FBQ0QsTUFBTSxHQUFHLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0tBQ3RDO0lBQ0QsT0FBTyxLQUFLLENBQUM7QUFDakIsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyxRQUF1QixFQUFFLEVBQUU7SUFDMUQsSUFBSSxNQUFNLEdBQWtCLEVBQUUsQ0FBQztJQUMvQixRQUFRLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1FBQ3ZCLE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDakMsT0FBTyxjQUFjLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3pDLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNWLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDeEI7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUNILE9BQU8sTUFBTSxDQUFDO0FBQ2xCLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxDQUFDLElBQWMsRUFBRSxLQUFlLEVBQUUsRUFBRTtJQUM1RCxPQUFPLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUM1QixDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUcsQ0FBQyxJQUFjLEVBQUUsS0FBZSxFQUFFLEVBQUU7SUFDekQsT0FBTyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDNUIsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHLENBQUMsSUFBaUIsRUFBRSxFQUFFO0lBQzdDLE1BQU0sT0FBTyxHQUFnQixFQUFFLEdBQUcsSUFBSSxFQUFFLENBQUM7SUFDekMsT0FBTyxDQUFDLEVBQUUsR0FBRyxTQUFTLEVBQUUsQ0FBQztJQUN6QixPQUFPLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztJQUV0QixLQUFLLE1BQU0sU0FBUyxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7UUFDbkMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7S0FDakQ7SUFDRCxPQUFPLE9BQU8sQ0FBQztBQUNuQixDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxDQUFDLEtBQWlCLEVBQUUsSUFBaUIsRUFBRSxFQUFFO0lBQ3hFLE1BQU0sT0FBTyxHQUFnQixFQUFFLEdBQUcsSUFBSSxFQUFFLENBQUM7SUFDekMsT0FBTyxPQUFPLENBQUMsTUFBTSxDQUFDO0lBQ3RCLE9BQU8sT0FBTyxDQUFDLGNBQWMsQ0FBQztJQUM5QixPQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUM7SUFFcEIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUM7SUFDN0QsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsR0FBRyxhQUFhLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsRUFBRSw0QkFBNEIsQ0FBQyxDQUFDO0lBRXBILE9BQU8sQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsY0FBYyxDQUFDLENBQUM7SUFDaEQsT0FBTyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7SUFFeEIsSUFBSSxPQUFPLENBQUMsTUFBTSxLQUFLLGNBQWMsQ0FBQyxRQUFRLEVBQUU7UUFDNUMsT0FBTyxPQUFPLENBQUMsTUFBTSxDQUFDO0tBQ3pCO0lBRUQsT0FBTyxPQUFPLENBQUM7QUFDbkIsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sdUJBQXVCLEdBQUcsQ0FBQyxJQUFpQixFQUFFLEVBQUU7SUFDekQsTUFBTSxPQUFPLEdBQWdCLEVBQUUsR0FBRyxJQUFJLEVBQUUsQ0FBQztJQUN6QyxPQUFPLE9BQU8sQ0FBQyxLQUFLLENBQUM7SUFDckIsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDO0lBRW5CLE9BQU8sT0FBTyxDQUFDO0FBQ25CLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLENBQUMsS0FBaUIsRUFBRSxJQUFpQixFQUFlLEVBQUU7SUFDckYsTUFBTSxVQUFVLEdBQUcsRUFBRSxHQUFHLElBQUksRUFBRSxDQUFDO0lBQy9CLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUU5QyxJQUFJLENBQUMsSUFBSSxFQUFFO1FBQ1AsSUFBSSxHQUFHLE1BQU0sQ0FBQztRQUNkLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsUUFBUSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUM7S0FDcEQ7SUFFRCxPQUFPLFVBQVUsRUFBRSxXQUFXLENBQUM7SUFDL0IsT0FBTyxVQUFVLEVBQUUsSUFBSSxDQUFDO0lBQ3hCLE9BQU8sVUFBVSxFQUFFLEtBQUssQ0FBQztJQUN6QixPQUFPLFVBQVUsRUFBRSxXQUFXLENBQUM7SUFFL0IsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsR0FBRyxhQUFhLENBQ25DLElBQUksRUFDSixVQUFVLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDLEVBQ3RDLDRCQUE0QixFQUM1QixvQkFBb0IsQ0FDdkIsQ0FBQztJQUNGLFVBQVUsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsY0FBYyxDQUFDLENBQUM7SUFDbkQsVUFBVSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7SUFFM0IsT0FBTztRQUNILEdBQUcsVUFBVTtRQUNiLE1BQU0sRUFBRSxVQUFVLENBQUMsTUFBTSxJQUFJLGNBQWMsQ0FBQyxLQUFLO1FBQ2pELFdBQVcsRUFBRSxLQUFLO1FBQ2xCLE1BQU0sRUFBRSxJQUFJO1FBQ1osSUFBSSxFQUFFLFNBQVM7S0FDbEIsQ0FBQztBQUNOLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLENBQUMsSUFBaUIsRUFBRSxFQUFFO0lBQ2xELElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQztJQUNiLElBQUksSUFBSSxFQUFFO1FBQ04sR0FBRyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO1FBQ3RELEtBQUssTUFBTSxTQUFTLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNuQyxHQUFHLElBQUksZ0JBQWdCLENBQUMsU0FBUyxDQUFDLENBQUM7U0FDdEM7S0FDSjtJQUNELE9BQU8sR0FBRyxDQUFDO0FBQ2YsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxLQUFpQixFQUFFLFVBQWdCLEVBQUUsWUFBb0IsRUFBRSxFQUFFO0lBQzlGLE1BQU0sZUFBZSxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDO0lBQ3JFLFVBQVUsQ0FBQyxPQUFPLENBQ2QsS0FBSyxFQUNMO1FBQ0ksY0FBYyxFQUNWLFlBQVksSUFBSSxDQUFDO1lBQ2IsQ0FBQyxDQUFDLGVBQWdCLEdBQUcsWUFBWTtZQUNqQyxDQUFDLENBQUMsZUFBZ0IsR0FBRyxZQUFZLEdBQUcsQ0FBQztnQkFDckMsQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsQ0FBQyxDQUFDLGVBQWdCLEdBQUcsWUFBWTtLQUM1QyxFQUNELFVBQVUsQ0FDYixDQUFDO0FBQ04sQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sMEJBQTBCLEdBQUcsQ0FBQyxlQUE0QixFQUFFLEVBQUU7SUFDdkUsTUFBTSxhQUFhLEdBQUcsaUJBQWlCLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDekQsSUFBSSxhQUFhLEVBQUU7UUFDZixNQUFNLFNBQVMsR0FBVyxhQUFhLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssZUFBZSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ25HLElBQ0ksYUFBYSxDQUFDLE1BQU07WUFDcEIsYUFBYSxDQUFDLGFBQWEsQ0FBQyxLQUFLLGNBQWMsQ0FBQyxRQUFRO1lBQ3hELGFBQWEsQ0FBQyxjQUFjO1lBQzVCLFNBQVMsSUFBSSxhQUFhLENBQUMsY0FBYyxHQUFHLENBQUMsRUFDL0M7WUFDRSxPQUFPLElBQUksQ0FBQztTQUNmO0tBQ0o7SUFDRCxPQUFPLEtBQUssQ0FBQztBQUNqQixDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSwyQkFBMkIsR0FBRyxDQUFDLEtBQVksRUFBRSxjQUFzQixFQUFFLE1BQXNCLEVBQUUsRUFBRTtJQUN4RyxNQUFNLElBQUksR0FBRyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsRUFBRSxFQUFFLG1CQUFtQixFQUFFLEVBQUUsS0FBSyxFQUFFLGFBQWEsQ0FBQyxjQUFjLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUNqSCxJQUFJLENBQUMsY0FBYyxHQUFHLGNBQWMsQ0FBQztJQUNyQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztJQUNuQixJQUFJLENBQUMsSUFBSSxHQUFHLFNBQVMsQ0FBQztJQUN0QixJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdEIsTUFBTSxRQUFRLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUU7UUFDaEMsT0FBTyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsRUFBRSxFQUFFLG1CQUFtQixFQUFFLEVBQUUsS0FBSyxFQUFFLGFBQWEsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZHLENBQUMsQ0FBQyxDQUFDO0lBQ0gsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7SUFDekIsT0FBTyxJQUFJLENBQUM7QUFDaEIsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsQ0FDN0IsSUFBWSxFQUNaLEtBQWEsRUFDYixNQUFjLEVBQ2QsT0FPQyxFQUNILEVBQUU7SUFDQSxNQUFNLFVBQVUsR0FBZ0I7UUFDNUIsRUFBRSxFQUFFLFNBQVMsRUFBRTtRQUNmLElBQUksRUFBRTtZQUNGLEtBQUssRUFBRSxFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRTtTQUNsQztRQUNELFFBQVEsRUFBRSxFQUFFO1FBQ1osS0FBSztRQUNMLE1BQU07UUFDTixJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUk7UUFDbEIsV0FBVyxFQUFFLE9BQU8sQ0FBQyxXQUFXO1FBQ2hDLFdBQVcsRUFBRSxPQUFPLENBQUMsV0FBVztRQUNoQyxLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUs7S0FDdkIsQ0FBQztJQUNGLElBQUksT0FBTyxDQUFDLElBQUksRUFBRTtRQUNkLFVBQVUsQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQztLQUNsQztJQUNELElBQUksT0FBTyxDQUFDLFdBQVcsRUFBRTtRQUNyQixVQUFVLENBQUMsV0FBVyxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUM7S0FDaEQ7SUFDRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxFQUFFO1FBQ3pDLFVBQVUsQ0FBQyxXQUFXLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQztLQUNoRDtJQUNELElBQUksT0FBTyxDQUFDLEtBQUssRUFBRTtRQUNmLFVBQVUsQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQztLQUNwQztJQUNELElBQUksT0FBTyxDQUFDLE1BQU0sRUFBRTtRQUNoQixVQUFVLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUM7S0FDdEM7SUFDRCxJQUFJLE9BQU8sQ0FBQyxXQUFXLEVBQUU7UUFDckIsVUFBVSxDQUFDLFdBQVcsR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDO0tBQ2hEO0lBQ0QsT0FBTyxVQUFVLENBQUM7QUFDdEIsQ0FBQyxDQUFDO0FBRUYsOEJBQThCO0FBQzlCLE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLENBQUMsS0FBaUIsRUFBRSxXQUF3QixFQUFFLElBQVUsRUFBRSxFQUFFO0lBQ3pGLElBQUksSUFBSSxFQUNKLFdBQVcsRUFDWCxXQUFXLEVBQ1gsS0FBSyxHQUFHLGFBQWEsQ0FBQyxjQUFjLENBQUM7SUFDekMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUU7UUFDckIsSUFBSSxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUM7UUFDeEIsV0FBVyxHQUFHLFdBQVcsQ0FBQyxXQUFXLENBQUM7UUFDdEMsV0FBVyxHQUFHLFdBQVcsQ0FBQyxXQUFXLENBQUM7S0FDekM7SUFFRCxLQUFLLEdBQUcsV0FBVyxDQUFDLEtBQXNCLENBQUM7SUFFM0MsTUFBTSxVQUFVLEdBQUcsaUJBQWlCLENBQUMsRUFBRSxFQUFFLGNBQWMsRUFBRSxtQkFBbUIsRUFBRSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7SUFFekgsVUFBVSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQy9DLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzVCLGtCQUFrQixDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQztJQUN0QyxVQUFVLENBQUMsR0FBRyxFQUFFO1FBQ1osZ0JBQWdCLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDakMsQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsQ0FBQyxLQUFlLEVBQUUsRUFBRTtJQUM3QyxJQUFJLE1BQU0sR0FBRyxLQUFLLENBQUM7SUFDbkIsT0FBTyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7UUFDakMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7S0FDeEQ7SUFDRCxPQUFPLE1BQU0sQ0FBQztBQUNsQixDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxDQUFDLEtBQWlCLEVBQUUsZ0JBQStCLEVBQUUsRUFBRTtJQUN6RixzQkFBc0I7SUFDdEIsTUFBTSxpQkFBaUIsR0FBRyxrQkFBa0IsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ3pFLE1BQU0saUJBQWlCLEdBQWtCLEVBQUUsQ0FBQztJQUM1QyxNQUFNLHNCQUFzQixHQUFHLElBQUksT0FBTyxFQUErQyxDQUFDO0lBRTFGLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtRQUM3QixJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUN6QixNQUFNLGVBQWUsR0FBRyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1lBQzNHLElBQUksZUFBZSxDQUFDLE1BQU0sRUFBRTtnQkFDeEIsZUFBZSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRTtvQkFDL0IsSUFBSSxhQUFhLEdBQUcsc0JBQXNCLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO29CQUN6RCxJQUFJLENBQUMsYUFBYSxFQUFFO3dCQUNoQixhQUFhLEdBQUcsRUFBRSxLQUFLLEVBQUUsUUFBUSxDQUFDLEtBQU0sRUFBRSxHQUFHLEVBQUUsUUFBUSxDQUFDLEdBQUksRUFBRSxDQUFDO3dCQUMvRCxzQkFBc0IsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLGFBQWEsQ0FBQyxDQUFDO3dCQUNwRCxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7cUJBQ3BDO29CQUNELGFBQWEsQ0FBQyxLQUFLLEdBQUcsYUFBYSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7b0JBQzlDLGFBQWEsQ0FBQyxHQUFHLEdBQUcsYUFBYSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7Z0JBQzlDLENBQUMsQ0FBQyxDQUFDO2FBQ047WUFFRCxNQUFNLHFCQUFxQixHQUFHLHdCQUF3QixDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzdELElBQUkscUJBQXFCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMscUJBQXFCLENBQUMsRUFBRTtnQkFDN0UsSUFBSSxhQUFhLEdBQUcsc0JBQXNCLENBQUMsR0FBRyxDQUFDLHFCQUFxQixDQUFDLENBQUM7Z0JBQ3RFLElBQUksQ0FBQyxhQUFhLEVBQUU7b0JBQ2hCLGFBQWEsR0FBRyxFQUFFLEtBQUssRUFBRSxxQkFBcUIsQ0FBQyxLQUFNLEVBQUUsR0FBRyxFQUFFLHFCQUFxQixDQUFDLEdBQUksRUFBRSxDQUFDO29CQUN6RixzQkFBc0IsQ0FBQyxHQUFHLENBQUMscUJBQXFCLEVBQUUsYUFBYSxDQUFDLENBQUM7b0JBQ2pFLGlCQUFpQixDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO2lCQUNqRDtnQkFDRCxhQUFhLENBQUMsR0FBRyxHQUFHLGFBQWEsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO2FBQzdDO1NBQ0o7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILE1BQU0sZUFBZSxHQUFHLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRTtRQUNsRCxNQUFNLGFBQWEsR0FBRyxzQkFBc0IsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDeEQsSUFBSSxhQUFhLEVBQUU7WUFDZixNQUFNLElBQUksR0FBRyxVQUFVLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxLQUFvQixDQUFDLENBQUM7WUFDOUQsT0FBTyxHQUFHLEVBQUU7Z0JBQ1IsSUFBSSxhQUFhLENBQUMsS0FBSyxHQUFHLGFBQWEsQ0FBQyxHQUFHLEVBQUU7b0JBQ3pDLFVBQVUsQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO2lCQUN0QztxQkFBTTtvQkFDSCxVQUFVLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxhQUFhLEVBQUUsSUFBSSxDQUFDLENBQUM7aUJBQ2xEO1lBQ0wsQ0FBQyxDQUFDO1NBQ0w7UUFDRCxPQUFPLEdBQUcsRUFBRSxHQUFFLENBQUMsQ0FBQztJQUNwQixDQUFDLENBQUMsQ0FBQztJQUVILE1BQU0sZ0JBQWdCLEdBQUcsaUJBQWlCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFO1FBQ2xELE1BQU0sSUFBSSxHQUFHLFVBQVUsQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzlDLE9BQU8sR0FBRyxFQUFFO1lBQ1IsSUFBSSwwQkFBMEIsQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDbEMsb0JBQW9CLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNuRTtZQUNELFVBQVUsQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3ZDLENBQUMsQ0FBQztJQUNOLENBQUMsQ0FBQyxDQUFDO0lBRUgsZUFBZSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDNUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztBQUNqRCxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRyxDQUFDLFFBQXVCLEVBQUUsRUFBRTtJQUM3RCxNQUFNLHNCQUFzQixHQUFHLEVBQUUsQ0FBQztJQUNsQyxNQUFNLGNBQWMsR0FBa0IsRUFBRSxDQUFDO0lBRXpDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ3RDLE1BQU0sTUFBTSxHQUFHLFdBQVcsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEQsTUFBTSxXQUFXLEdBQUcsY0FBYyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNuRCxJQUFJLFdBQVcsS0FBSyxDQUFDLENBQUMsRUFBRTtZQUNwQixjQUFjLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzVCLHNCQUFzQixDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDOUM7YUFBTTtZQUNILHNCQUFzQixDQUFDLFdBQVcsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUN6RDtLQUNKO0lBQ0QsT0FBTyxFQUFFLGNBQWMsRUFBRSxzQkFBc0IsRUFBRSxDQUFDO0FBQ3RELENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFic3RyYWN0Tm9kZSwgTWluZExheW91dFR5cGUgfSBmcm9tICdAcGxhaXQvbGF5b3V0cyc7XG5pbXBvcnQge1xuICAgIGFkZFNlbGVjdGVkRWxlbWVudCxcbiAgICBjbGVhclNlbGVjdGVkRWxlbWVudCxcbiAgICBpZENyZWF0b3IsXG4gICAgaXNOdWxsT3JVbmRlZmluZWQsXG4gICAgUGF0aCxcbiAgICBQbGFpdEJvYXJkLFxuICAgIFBsYWl0RWxlbWVudCxcbiAgICBQb2ludCxcbiAgICBUcmFuc2Zvcm1zXG59IGZyb20gJ0BwbGFpdC9jb3JlJztcbmltcG9ydCB7IE5vZGUgfSBmcm9tICdzbGF0ZSc7XG5pbXBvcnQgeyBNaW5kTm9kZVNoYXBlLCBOT0RFX01JTl9XSURUSCwgUk9PVF9UT1BJQ19GT05UX1NJWkUsIFRPUElDX0RFRkFVTFRfTUFYX1dPUkRfQ09VTlQgfSBmcm9tICcuLi9jb25zdGFudHMvbm9kZSc7XG5pbXBvcnQgeyBNaW5kTm9kZSwgUGxhaXRNaW5kIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBNaW5kRWxlbWVudCB9IGZyb20gJy4uL2ludGVyZmFjZXMvZWxlbWVudCc7XG5pbXBvcnQgeyBnZXRSb290TGF5b3V0IH0gZnJvbSAnLi9sYXlvdXQnO1xuaW1wb3J0IHsgVEVYVF9ERUZBVUxUX0hFSUdIVCwgZ2V0U2l6ZUJ5VGV4dCwgUk9PVF9ERUZBVUxUX0hFSUdIVCB9IGZyb20gJ0BwbGFpdC9yaWNodGV4dCc7XG5pbXBvcnQgeyBlbnRlck5vZGVFZGl0aW5nIH0gZnJvbSAnLi9ub2RlJztcbmltcG9ydCB7IE1pbmROb2RlQ29tcG9uZW50IH0gZnJvbSAnLi4vbm9kZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgZ2V0QmVoaW5kQWJzdHJhY3RzLCBnZXRDb3JyZXNwb25kaW5nQWJzdHJhY3QgfSBmcm9tICcuL2Fic3RyYWN0L2NvbW1vbic7XG5cbmV4cG9ydCBmdW5jdGlvbiBmaW5kUGFyZW50RWxlbWVudChlbGVtZW50OiBNaW5kRWxlbWVudCk6IE1pbmRFbGVtZW50IHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBjb21wb25lbnQgPSBQbGFpdEVsZW1lbnQuZ2V0Q29tcG9uZW50KGVsZW1lbnQpIGFzIE1pbmROb2RlQ29tcG9uZW50O1xuICAgIGlmIChjb21wb25lbnQgJiYgY29tcG9uZW50LnBhcmVudCkge1xuICAgICAgICByZXR1cm4gY29tcG9uZW50LnBhcmVudC5vcmlnaW47XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaW5kVXBFbGVtZW50KGVsZW1lbnQ6IE1pbmRFbGVtZW50KTogeyByb290OiBNaW5kRWxlbWVudDsgYnJhbmNoPzogTWluZEVsZW1lbnQgfSB7XG4gICAgbGV0IGJyYW5jaDtcbiAgICBsZXQgcm9vdCA9IGVsZW1lbnQ7XG4gICAgbGV0IHBhcmVudCA9IGZpbmRQYXJlbnRFbGVtZW50KGVsZW1lbnQpO1xuICAgIHdoaWxlIChwYXJlbnQpIHtcbiAgICAgICAgYnJhbmNoID0gcm9vdDtcbiAgICAgICAgcm9vdCA9IHBhcmVudDtcbiAgICAgICAgcGFyZW50ID0gZmluZFBhcmVudEVsZW1lbnQocGFyZW50KTtcbiAgICB9XG4gICAgcmV0dXJuIHsgcm9vdCwgYnJhbmNoIH07XG59XG5cbmV4cG9ydCBjb25zdCBnZXRDaGlsZHJlbkNvdW50ID0gKGVsZW1lbnQ6IE1pbmRFbGVtZW50KSA9PiB7XG4gICAgY29uc3QgY291bnQ6IG51bWJlciA9IGVsZW1lbnQuY2hpbGRyZW4ucmVkdWNlKChwOiBudW1iZXIsIGM6IE1pbmRFbGVtZW50KSA9PiB7XG4gICAgICAgIHJldHVybiBwICsgZ2V0Q2hpbGRyZW5Db3VudChjKTtcbiAgICB9LCAwKTtcbiAgICByZXR1cm4gY291bnQgKyBlbGVtZW50LmNoaWxkcmVuLmxlbmd0aDtcbn07XG5cbmV4cG9ydCBjb25zdCBpc0NoaWxkRWxlbWVudCA9IChvcmlnaW46IE1pbmRFbGVtZW50LCBjaGlsZDogTWluZEVsZW1lbnQpID0+IHtcbiAgICBsZXQgcGFyZW50ID0gZmluZFBhcmVudEVsZW1lbnQoY2hpbGQpO1xuICAgIHdoaWxlIChwYXJlbnQpIHtcbiAgICAgICAgaWYgKHBhcmVudCA9PT0gb3JpZ2luKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBwYXJlbnQgPSBmaW5kUGFyZW50RWxlbWVudChwYXJlbnQpO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59O1xuXG5leHBvcnQgY29uc3QgZmlsdGVyQ2hpbGRFbGVtZW50ID0gKGVsZW1lbnRzOiBNaW5kRWxlbWVudFtdKSA9PiB7XG4gICAgbGV0IHJlc3VsdDogTWluZEVsZW1lbnRbXSA9IFtdO1xuICAgIGVsZW1lbnRzLmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICAgIGNvbnN0IGlzQ2hpbGQgPSBlbGVtZW50cy5zb21lKG5vZGUgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGlzQ2hpbGRFbGVtZW50KG5vZGUsIGVsZW1lbnQpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoIWlzQ2hpbGQpIHtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKGVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbmV4cG9ydCBjb25zdCBpc0NoaWxkUmlnaHQgPSAobm9kZTogTWluZE5vZGUsIGNoaWxkOiBNaW5kTm9kZSkgPT4ge1xuICAgIHJldHVybiBub2RlLnggPCBjaGlsZC54O1xufTtcblxuZXhwb3J0IGNvbnN0IGlzQ2hpbGRVcCA9IChub2RlOiBNaW5kTm9kZSwgY2hpbGQ6IE1pbmROb2RlKSA9PiB7XG4gICAgcmV0dXJuIG5vZGUueSA+IGNoaWxkLnk7XG59O1xuXG5leHBvcnQgY29uc3QgY29weU5ld05vZGUgPSAobm9kZTogTWluZEVsZW1lbnQpID0+IHtcbiAgICBjb25zdCBuZXdOb2RlOiBNaW5kRWxlbWVudCA9IHsgLi4ubm9kZSB9O1xuICAgIG5ld05vZGUuaWQgPSBpZENyZWF0b3IoKTtcbiAgICBuZXdOb2RlLmNoaWxkcmVuID0gW107XG5cbiAgICBmb3IgKGNvbnN0IGNoaWxkTm9kZSBvZiBub2RlLmNoaWxkcmVuKSB7XG4gICAgICAgIG5ld05vZGUuY2hpbGRyZW4ucHVzaChjb3B5TmV3Tm9kZShjaGlsZE5vZGUpKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ld05vZGU7XG59O1xuXG5leHBvcnQgY29uc3QgdHJhbnNmb3JtUm9vdFRvTm9kZSA9IChib2FyZDogUGxhaXRCb2FyZCwgbm9kZTogTWluZEVsZW1lbnQpID0+IHtcbiAgICBjb25zdCBuZXdOb2RlOiBNaW5kRWxlbWVudCA9IHsgLi4ubm9kZSB9O1xuICAgIGRlbGV0ZSBuZXdOb2RlLmlzUm9vdDtcbiAgICBkZWxldGUgbmV3Tm9kZS5yaWdodE5vZGVDb3VudDtcbiAgICBkZWxldGUgbmV3Tm9kZS50eXBlO1xuXG4gICAgY29uc3QgdGV4dCA9IE5vZGUuc3RyaW5nKG5vZGUuZGF0YS50b3BpYy5jaGlsZHJlblswXSkgfHwgJyAnO1xuICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gZ2V0U2l6ZUJ5VGV4dCh0ZXh0LCBQbGFpdEJvYXJkLmdldFZpZXdwb3J0Q29udGFpbmVyKGJvYXJkKSwgVE9QSUNfREVGQVVMVF9NQVhfV09SRF9DT1VOVCk7XG5cbiAgICBuZXdOb2RlLndpZHRoID0gTWF0aC5tYXgod2lkdGgsIE5PREVfTUlOX1dJRFRIKTtcbiAgICBuZXdOb2RlLmhlaWdodCA9IGhlaWdodDtcblxuICAgIGlmIChuZXdOb2RlLmxheW91dCA9PT0gTWluZExheW91dFR5cGUuc3RhbmRhcmQpIHtcbiAgICAgICAgZGVsZXRlIG5ld05vZGUubGF5b3V0O1xuICAgIH1cblxuICAgIHJldHVybiBuZXdOb2RlO1xufTtcblxuZXhwb3J0IGNvbnN0IHRyYW5zZm9ybUFic3RyYWN0VG9Ob2RlID0gKG5vZGU6IE1pbmRFbGVtZW50KSA9PiB7XG4gICAgY29uc3QgbmV3Tm9kZTogTWluZEVsZW1lbnQgPSB7IC4uLm5vZGUgfTtcbiAgICBkZWxldGUgbmV3Tm9kZS5zdGFydDtcbiAgICBkZWxldGUgbmV3Tm9kZS5lbmQ7XG5cbiAgICByZXR1cm4gbmV3Tm9kZTtcbn07XG5cbmV4cG9ydCBjb25zdCB0cmFuc2Zvcm1Ob2RlVG9Sb290ID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBub2RlOiBNaW5kRWxlbWVudCk6IE1pbmRFbGVtZW50ID0+IHtcbiAgICBjb25zdCBuZXdFbGVtZW50ID0geyAuLi5ub2RlIH07XG4gICAgbGV0IHRleHQgPSBOb2RlLnN0cmluZyhuZXdFbGVtZW50LmRhdGEudG9waWMpO1xuXG4gICAgaWYgKCF0ZXh0KSB7XG4gICAgICAgIHRleHQgPSAn5oCd57u05a+85Zu+JztcbiAgICAgICAgbmV3RWxlbWVudC5kYXRhLnRvcGljID0geyBjaGlsZHJlbjogW3sgdGV4dCB9XSB9O1xuICAgIH1cblxuICAgIGRlbGV0ZSBuZXdFbGVtZW50Py5zdHJva2VDb2xvcjtcbiAgICBkZWxldGUgbmV3RWxlbWVudD8uZmlsbDtcbiAgICBkZWxldGUgbmV3RWxlbWVudD8uc2hhcGU7XG4gICAgZGVsZXRlIG5ld0VsZW1lbnQ/LnN0cm9rZVdpZHRoO1xuXG4gICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0IH0gPSBnZXRTaXplQnlUZXh0KFxuICAgICAgICB0ZXh0LFxuICAgICAgICBQbGFpdEJvYXJkLmdldFZpZXdwb3J0Q29udGFpbmVyKGJvYXJkKSxcbiAgICAgICAgVE9QSUNfREVGQVVMVF9NQVhfV09SRF9DT1VOVCxcbiAgICAgICAgUk9PVF9UT1BJQ19GT05UX1NJWkVcbiAgICApO1xuICAgIG5ld0VsZW1lbnQud2lkdGggPSBNYXRoLm1heCh3aWR0aCwgTk9ERV9NSU5fV0lEVEgpO1xuICAgIG5ld0VsZW1lbnQuaGVpZ2h0ID0gaGVpZ2h0O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgLi4ubmV3RWxlbWVudCxcbiAgICAgICAgbGF5b3V0OiBuZXdFbGVtZW50LmxheW91dCA/PyBNaW5kTGF5b3V0VHlwZS5yaWdodCxcbiAgICAgICAgaXNDb2xsYXBzZWQ6IGZhbHNlLFxuICAgICAgICBpc1Jvb3Q6IHRydWUsXG4gICAgICAgIHR5cGU6ICdtaW5kbWFwJ1xuICAgIH07XG59O1xuXG5leHBvcnQgY29uc3QgZXh0cmFjdE5vZGVzVGV4dCA9IChub2RlOiBNaW5kRWxlbWVudCkgPT4ge1xuICAgIGxldCBzdHIgPSAnJztcbiAgICBpZiAobm9kZSkge1xuICAgICAgICBzdHIgKz0gTm9kZS5zdHJpbmcobm9kZS5kYXRhLnRvcGljLmNoaWxkcmVuWzBdKSArICcgJztcbiAgICAgICAgZm9yIChjb25zdCBjaGlsZE5vZGUgb2Ygbm9kZS5jaGlsZHJlbikge1xuICAgICAgICAgICAgc3RyICs9IGV4dHJhY3ROb2Rlc1RleHQoY2hpbGROb2RlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gc3RyO1xufTtcblxuZXhwb3J0IGNvbnN0IGNoYW5nZVJpZ2h0Tm9kZUNvdW50ID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBwYXJlbnRQYXRoOiBQYXRoLCBjaGFuZ2VOdW1iZXI6IG51bWJlcikgPT4ge1xuICAgIGNvbnN0IF9yaWdodE5vZGVDb3VudCA9IGJvYXJkLmNoaWxkcmVuW3BhcmVudFBhdGhbMF1dLnJpZ2h0Tm9kZUNvdW50O1xuICAgIFRyYW5zZm9ybXMuc2V0Tm9kZShcbiAgICAgICAgYm9hcmQsXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJpZ2h0Tm9kZUNvdW50OlxuICAgICAgICAgICAgICAgIGNoYW5nZU51bWJlciA+PSAwXG4gICAgICAgICAgICAgICAgICAgID8gX3JpZ2h0Tm9kZUNvdW50ISArIGNoYW5nZU51bWJlclxuICAgICAgICAgICAgICAgICAgICA6IF9yaWdodE5vZGVDb3VudCEgKyBjaGFuZ2VOdW1iZXIgPCAwXG4gICAgICAgICAgICAgICAgICAgID8gMFxuICAgICAgICAgICAgICAgICAgICA6IF9yaWdodE5vZGVDb3VudCEgKyBjaGFuZ2VOdW1iZXJcbiAgICAgICAgfSxcbiAgICAgICAgcGFyZW50UGF0aFxuICAgICk7XG59O1xuXG5leHBvcnQgY29uc3Qgc2hvdWxkQ2hhbmdlUmlnaHROb2RlQ291bnQgPSAoc2VsZWN0ZWRFbGVtZW50OiBNaW5kRWxlbWVudCkgPT4ge1xuICAgIGNvbnN0IHBhcmVudEVsZW1lbnQgPSBmaW5kUGFyZW50RWxlbWVudChzZWxlY3RlZEVsZW1lbnQpO1xuICAgIGlmIChwYXJlbnRFbGVtZW50KSB7XG4gICAgICAgIGNvbnN0IG5vZGVJbmRleDogbnVtYmVyID0gcGFyZW50RWxlbWVudC5jaGlsZHJlbi5maW5kSW5kZXgoaXRlbSA9PiBpdGVtLmlkID09PSBzZWxlY3RlZEVsZW1lbnQuaWQpO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICBwYXJlbnRFbGVtZW50LmlzUm9vdCAmJlxuICAgICAgICAgICAgZ2V0Um9vdExheW91dChwYXJlbnRFbGVtZW50KSA9PT0gTWluZExheW91dFR5cGUuc3RhbmRhcmQgJiZcbiAgICAgICAgICAgIHBhcmVudEVsZW1lbnQucmlnaHROb2RlQ291bnQgJiZcbiAgICAgICAgICAgIG5vZGVJbmRleCA8PSBwYXJlbnRFbGVtZW50LnJpZ2h0Tm9kZUNvdW50IC0gMVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVEZWZhdWx0TWluZE1hcEVsZW1lbnQgPSAocG9pbnQ6IFBvaW50LCByaWdodE5vZGVDb3VudDogbnVtYmVyLCBsYXlvdXQ6IE1pbmRMYXlvdXRUeXBlKSA9PiB7XG4gICAgY29uc3Qgcm9vdCA9IGNyZWF0ZU1pbmRFbGVtZW50KCfmgJ3nu7Tlr7zlm74nLCA3MiwgUk9PVF9ERUZBVUxUX0hFSUdIVCwgeyBzaGFwZTogTWluZE5vZGVTaGFwZS5yb3VuZFJlY3RhbmdsZSwgbGF5b3V0IH0pO1xuICAgIHJvb3QucmlnaHROb2RlQ291bnQgPSByaWdodE5vZGVDb3VudDtcbiAgICByb290LmlzUm9vdCA9IHRydWU7XG4gICAgcm9vdC50eXBlID0gJ21pbmRtYXAnO1xuICAgIHJvb3QucG9pbnRzID0gW3BvaW50XTtcbiAgICBjb25zdCBjaGlsZHJlbiA9IFsxLCAxLCAxXS5tYXAoKCkgPT4ge1xuICAgICAgICByZXR1cm4gY3JlYXRlTWluZEVsZW1lbnQoJ+aWsOW7uuiKgueCuScsIDU2LCBURVhUX0RFRkFVTFRfSEVJR0hULCB7IHNoYXBlOiBNaW5kTm9kZVNoYXBlLnJvdW5kUmVjdGFuZ2xlIH0pO1xuICAgIH0pO1xuICAgIHJvb3QuY2hpbGRyZW4gPSBjaGlsZHJlbjtcbiAgICByZXR1cm4gcm9vdDtcbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVNaW5kRWxlbWVudCA9IChcbiAgICB0ZXh0OiBzdHJpbmcsXG4gICAgd2lkdGg6IG51bWJlcixcbiAgICBoZWlnaHQ6IG51bWJlcixcbiAgICBvcHRpb25zOiB7XG4gICAgICAgIGZpbGw/OiBzdHJpbmc7XG4gICAgICAgIHN0cm9rZUNvbG9yPzogc3RyaW5nO1xuICAgICAgICBzdHJva2VXaWR0aD86IG51bWJlcjtcbiAgICAgICAgc2hhcGU/OiBNaW5kTm9kZVNoYXBlO1xuICAgICAgICBsYXlvdXQ/OiBNaW5kTGF5b3V0VHlwZTtcbiAgICAgICAgYnJhbmNoQ29sb3I/OiBzdHJpbmc7XG4gICAgfVxuKSA9PiB7XG4gICAgY29uc3QgbmV3RWxlbWVudDogTWluZEVsZW1lbnQgPSB7XG4gICAgICAgIGlkOiBpZENyZWF0b3IoKSxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgdG9waWM6IHsgY2hpbGRyZW46IFt7IHRleHQgfV0gfVxuICAgICAgICB9LFxuICAgICAgICBjaGlsZHJlbjogW10sXG4gICAgICAgIHdpZHRoLFxuICAgICAgICBoZWlnaHQsXG4gICAgICAgIGZpbGw6IG9wdGlvbnMuZmlsbCxcbiAgICAgICAgc3Ryb2tlQ29sb3I6IG9wdGlvbnMuc3Ryb2tlQ29sb3IsXG4gICAgICAgIHN0cm9rZVdpZHRoOiBvcHRpb25zLnN0cm9rZVdpZHRoLFxuICAgICAgICBzaGFwZTogb3B0aW9ucy5zaGFwZVxuICAgIH07XG4gICAgaWYgKG9wdGlvbnMuZmlsbCkge1xuICAgICAgICBuZXdFbGVtZW50LmZpbGwgPSBvcHRpb25zLmZpbGw7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLnN0cm9rZUNvbG9yKSB7XG4gICAgICAgIG5ld0VsZW1lbnQuc3Ryb2tlQ29sb3IgPSBvcHRpb25zLnN0cm9rZUNvbG9yO1xuICAgIH1cbiAgICBpZiAoIWlzTnVsbE9yVW5kZWZpbmVkKG9wdGlvbnMuc3Ryb2tlV2lkdGgpKSB7XG4gICAgICAgIG5ld0VsZW1lbnQuc3Ryb2tlV2lkdGggPSBvcHRpb25zLnN0cm9rZVdpZHRoO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5zaGFwZSkge1xuICAgICAgICBuZXdFbGVtZW50LnNoYXBlID0gb3B0aW9ucy5zaGFwZTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMubGF5b3V0KSB7XG4gICAgICAgIG5ld0VsZW1lbnQubGF5b3V0ID0gb3B0aW9ucy5sYXlvdXQ7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLmJyYW5jaENvbG9yKSB7XG4gICAgICAgIG5ld0VsZW1lbnQuYnJhbmNoQ29sb3IgPSBvcHRpb25zLmJyYW5jaENvbG9yO1xuICAgIH1cbiAgICByZXR1cm4gbmV3RWxlbWVudDtcbn07XG5cbi8vIGxheW91dExldmVsIOeUqOadpeihqOekuuaPkuWFpeWFhOW8n+iKgueCuei/mOaYr+WtkOiKgueCuVxuZXhwb3J0IGNvbnN0IGluc2VydE1pbmRFbGVtZW50ID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBpbmhlcml0Tm9kZTogTWluZEVsZW1lbnQsIHBhdGg6IFBhdGgpID0+IHtcbiAgICBsZXQgZmlsbCxcbiAgICAgICAgc3Ryb2tlQ29sb3IsXG4gICAgICAgIHN0cm9rZVdpZHRoLFxuICAgICAgICBzaGFwZSA9IE1pbmROb2RlU2hhcGUucm91bmRSZWN0YW5nbGU7XG4gICAgaWYgKCFpbmhlcml0Tm9kZS5pc1Jvb3QpIHtcbiAgICAgICAgZmlsbCA9IGluaGVyaXROb2RlLmZpbGw7XG4gICAgICAgIHN0cm9rZUNvbG9yID0gaW5oZXJpdE5vZGUuc3Ryb2tlQ29sb3I7XG4gICAgICAgIHN0cm9rZVdpZHRoID0gaW5oZXJpdE5vZGUuc3Ryb2tlV2lkdGg7XG4gICAgfVxuXG4gICAgc2hhcGUgPSBpbmhlcml0Tm9kZS5zaGFwZSBhcyBNaW5kTm9kZVNoYXBlO1xuXG4gICAgY29uc3QgbmV3RWxlbWVudCA9IGNyZWF0ZU1pbmRFbGVtZW50KCcnLCBOT0RFX01JTl9XSURUSCwgVEVYVF9ERUZBVUxUX0hFSUdIVCwgeyBmaWxsLCBzdHJva2VDb2xvciwgc3Ryb2tlV2lkdGgsIHNoYXBlIH0pO1xuXG4gICAgVHJhbnNmb3Jtcy5pbnNlcnROb2RlKGJvYXJkLCBuZXdFbGVtZW50LCBwYXRoKTtcbiAgICBjbGVhclNlbGVjdGVkRWxlbWVudChib2FyZCk7XG4gICAgYWRkU2VsZWN0ZWRFbGVtZW50KGJvYXJkLCBuZXdFbGVtZW50KTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgZW50ZXJOb2RlRWRpdGluZyhuZXdFbGVtZW50KTtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBmaW5kTGFzdENoaWxkID0gKGNoaWxkOiBNaW5kTm9kZSkgPT4ge1xuICAgIGxldCByZXN1bHQgPSBjaGlsZDtcbiAgICB3aGlsZSAocmVzdWx0LmNoaWxkcmVuLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICByZXN1bHQgPSByZXN1bHQuY2hpbGRyZW5bcmVzdWx0LmNoaWxkcmVuLmxlbmd0aCAtIDFdO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufTtcblxuZXhwb3J0IGNvbnN0IGRlbGV0ZVNlbGVjdGVkRUxlbWVudHMgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIHNlbGVjdGVkRWxlbWVudHM6IE1pbmRFbGVtZW50W10pID0+IHtcbiAgICAvL+e/u+i9rO+8jOS7juS4i+WIsOS4iuS/ruaUue+8jOmYsuatouaJvuS4jeWIsCBwYXRoXG4gICAgY29uc3QgZGVsZXRhYmxlRWxlbWVudHMgPSBmaWx0ZXJDaGlsZEVsZW1lbnQoc2VsZWN0ZWRFbGVtZW50cykucmV2ZXJzZSgpO1xuICAgIGNvbnN0IHJlbGF0aXZlQWJzdHJhY3RzOiBNaW5kRWxlbWVudFtdID0gW107XG4gICAgY29uc3QgYWNjdW11bGF0aXZlUHJvcGVydGllcyA9IG5ldyBXZWFrTWFwPE1pbmRFbGVtZW50LCB7IHN0YXJ0OiBudW1iZXI7IGVuZDogbnVtYmVyIH0+KCk7XG5cbiAgICBkZWxldGFibGVFbGVtZW50cy5mb3JFYWNoKG5vZGUgPT4ge1xuICAgICAgICBpZiAoIVBsYWl0TWluZC5pc01pbmQobm9kZSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGJlaGluZEFic3RyYWN0cyA9IGdldEJlaGluZEFic3RyYWN0cyhub2RlKS5maWx0ZXIoYWJzdHJhY3QgPT4gIWRlbGV0YWJsZUVsZW1lbnRzLmluY2x1ZGVzKGFic3RyYWN0KSk7XG4gICAgICAgICAgICBpZiAoYmVoaW5kQWJzdHJhY3RzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGJlaGluZEFic3RyYWN0cy5mb3JFYWNoKGFic3RyYWN0ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IG5ld1Byb3BlcnRpZXMgPSBhY2N1bXVsYXRpdmVQcm9wZXJ0aWVzLmdldChhYnN0cmFjdCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghbmV3UHJvcGVydGllcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV3UHJvcGVydGllcyA9IHsgc3RhcnQ6IGFic3RyYWN0LnN0YXJ0ISwgZW5kOiBhYnN0cmFjdC5lbmQhIH07XG4gICAgICAgICAgICAgICAgICAgICAgICBhY2N1bXVsYXRpdmVQcm9wZXJ0aWVzLnNldChhYnN0cmFjdCwgbmV3UHJvcGVydGllcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWxhdGl2ZUFic3RyYWN0cy5wdXNoKGFic3RyYWN0KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBuZXdQcm9wZXJ0aWVzLnN0YXJ0ID0gbmV3UHJvcGVydGllcy5zdGFydCAtIDE7XG4gICAgICAgICAgICAgICAgICAgIG5ld1Byb3BlcnRpZXMuZW5kID0gbmV3UHJvcGVydGllcy5lbmQgLSAxO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBjb3JyZXNwb25kaW5nQWJzdHJhY3QgPSBnZXRDb3JyZXNwb25kaW5nQWJzdHJhY3Qobm9kZSk7XG4gICAgICAgICAgICBpZiAoY29ycmVzcG9uZGluZ0Fic3RyYWN0ICYmICFkZWxldGFibGVFbGVtZW50cy5pbmNsdWRlcyhjb3JyZXNwb25kaW5nQWJzdHJhY3QpKSB7XG4gICAgICAgICAgICAgICAgbGV0IG5ld1Byb3BlcnRpZXMgPSBhY2N1bXVsYXRpdmVQcm9wZXJ0aWVzLmdldChjb3JyZXNwb25kaW5nQWJzdHJhY3QpO1xuICAgICAgICAgICAgICAgIGlmICghbmV3UHJvcGVydGllcykge1xuICAgICAgICAgICAgICAgICAgICBuZXdQcm9wZXJ0aWVzID0geyBzdGFydDogY29ycmVzcG9uZGluZ0Fic3RyYWN0LnN0YXJ0ISwgZW5kOiBjb3JyZXNwb25kaW5nQWJzdHJhY3QuZW5kISB9O1xuICAgICAgICAgICAgICAgICAgICBhY2N1bXVsYXRpdmVQcm9wZXJ0aWVzLnNldChjb3JyZXNwb25kaW5nQWJzdHJhY3QsIG5ld1Byb3BlcnRpZXMpO1xuICAgICAgICAgICAgICAgICAgICByZWxhdGl2ZUFic3RyYWN0cy5wdXNoKGNvcnJlc3BvbmRpbmdBYnN0cmFjdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG5ld1Byb3BlcnRpZXMuZW5kID0gbmV3UHJvcGVydGllcy5lbmQgLSAxO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICBjb25zdCBhYnN0cmFjdEhhbmRsZXMgPSByZWxhdGl2ZUFic3RyYWN0cy5tYXAodmFsdWUgPT4ge1xuICAgICAgICBjb25zdCBuZXdQcm9wZXJ0aWVzID0gYWNjdW11bGF0aXZlUHJvcGVydGllcy5nZXQodmFsdWUpO1xuICAgICAgICBpZiAobmV3UHJvcGVydGllcykge1xuICAgICAgICAgICAgY29uc3QgcGF0aCA9IFBsYWl0Qm9hcmQuZmluZFBhdGgoYm9hcmQsIHZhbHVlIGFzIE1pbmRFbGVtZW50KTtcbiAgICAgICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKG5ld1Byb3BlcnRpZXMuc3RhcnQgPiBuZXdQcm9wZXJ0aWVzLmVuZCkge1xuICAgICAgICAgICAgICAgICAgICBUcmFuc2Zvcm1zLnJlbW92ZU5vZGUoYm9hcmQsIHBhdGgpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybXMuc2V0Tm9kZShib2FyZCwgbmV3UHJvcGVydGllcywgcGF0aCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKCkgPT4ge307XG4gICAgfSk7XG5cbiAgICBjb25zdCBkZWxldGFibGVIYW5kbGVzID0gZGVsZXRhYmxlRWxlbWVudHMubWFwKG5vZGUgPT4ge1xuICAgICAgICBjb25zdCBwYXRoID0gUGxhaXRCb2FyZC5maW5kUGF0aChib2FyZCwgbm9kZSk7XG4gICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoc2hvdWxkQ2hhbmdlUmlnaHROb2RlQ291bnQobm9kZSkpIHtcbiAgICAgICAgICAgICAgICBjaGFuZ2VSaWdodE5vZGVDb3VudChib2FyZCwgcGF0aC5zbGljZSgwLCBwYXRoLmxlbmd0aCAtIDEpLCAtMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBUcmFuc2Zvcm1zLnJlbW92ZU5vZGUoYm9hcmQsIHBhdGgpO1xuICAgICAgICB9O1xuICAgIH0pO1xuXG4gICAgYWJzdHJhY3RIYW5kbGVzLmZvckVhY2goYWN0aW9uID0+IGFjdGlvbigpKTtcbiAgICBkZWxldGFibGVIYW5kbGVzLmZvckVhY2goYWN0aW9uID0+IGFjdGlvbigpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBkaXZpZGVFbGVtZW50QnlQYXJlbnQgPSAoZWxlbWVudHM6IE1pbmRFbGVtZW50W10pID0+IHtcbiAgICBjb25zdCBhYnN0cmFjdEluY2x1ZGVkR3JvdXBzID0gW107XG4gICAgY29uc3QgcGFyZW50RWxlbWVudHM6IE1pbmRFbGVtZW50W10gPSBbXTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgcGFyZW50ID0gTWluZEVsZW1lbnQuZ2V0UGFyZW50KGVsZW1lbnRzW2ldKTtcbiAgICAgICAgY29uc3QgcGFyZW50SW5kZXggPSBwYXJlbnRFbGVtZW50cy5pbmRleE9mKHBhcmVudCk7XG4gICAgICAgIGlmIChwYXJlbnRJbmRleCA9PT0gLTEpIHtcbiAgICAgICAgICAgIHBhcmVudEVsZW1lbnRzLnB1c2gocGFyZW50KTtcbiAgICAgICAgICAgIGFic3RyYWN0SW5jbHVkZWRHcm91cHMucHVzaChbZWxlbWVudHNbaV1dKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGFic3RyYWN0SW5jbHVkZWRHcm91cHNbcGFyZW50SW5kZXhdLnB1c2goZWxlbWVudHNbaV0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7IHBhcmVudEVsZW1lbnRzLCBhYnN0cmFjdEluY2x1ZGVkR3JvdXBzIH07XG59O1xuIl19
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { MindElement } from '../../interfaces/element';
|
|
2
|
+
import { COLORS } from '../../constants/node';
|
|
3
|
+
export const getBranchColorByMindElement = (board, element) => {
|
|
4
|
+
const ancestors = MindElement.getAncestors(board, element);
|
|
5
|
+
ancestors.unshift(element);
|
|
6
|
+
const ancestor = ancestors.find(value => value.branchColor);
|
|
7
|
+
if (ancestor && ancestor.branchColor) {
|
|
8
|
+
return ancestor.branchColor;
|
|
9
|
+
}
|
|
10
|
+
const root = ancestors[ancestors.length - 1];
|
|
11
|
+
const branch = ancestors[ancestors.length - 2];
|
|
12
|
+
if (branch) {
|
|
13
|
+
const index = root.children.indexOf(branch);
|
|
14
|
+
const length = COLORS.length;
|
|
15
|
+
const remainder = index % length;
|
|
16
|
+
return COLORS[remainder];
|
|
17
|
+
}
|
|
18
|
+
else {
|
|
19
|
+
throw new Error('root element should not have branch color');
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
export const getNextBranchColor = (root) => {
|
|
23
|
+
const index = root.children.length;
|
|
24
|
+
const length = COLORS.length;
|
|
25
|
+
const remainder = index % length;
|
|
26
|
+
return COLORS[remainder];
|
|
27
|
+
};
|
|
28
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJhbmNoLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvbWluZC9zcmMvdXRpbHMvbm9kZS1zdHlsZS9icmFuY2gudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBSUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUU5QyxNQUFNLENBQUMsTUFBTSwyQkFBMkIsR0FBRyxDQUFDLEtBQWlCLEVBQUUsT0FBb0IsRUFBRSxFQUFFO0lBQ25GLE1BQU0sU0FBUyxHQUFHLFdBQVcsQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBa0IsQ0FBQztJQUM1RSxTQUFTLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzNCLE1BQU0sUUFBUSxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDNUQsSUFBSSxRQUFRLElBQUksUUFBUSxDQUFDLFdBQVcsRUFBRTtRQUNsQyxPQUFPLFFBQVEsQ0FBQyxXQUFXLENBQUM7S0FDL0I7SUFFRCxNQUFNLElBQUksR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztJQUM3QyxNQUFNLE1BQU0sR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMvQyxJQUFJLE1BQU0sRUFBRTtRQUNSLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzVDLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7UUFDN0IsTUFBTSxTQUFTLEdBQUcsS0FBSyxHQUFHLE1BQU0sQ0FBQztRQUNqQyxPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztLQUM1QjtTQUFNO1FBQ0gsTUFBTSxJQUFJLEtBQUssQ0FBQywyQ0FBMkMsQ0FBQyxDQUFDO0tBQ2hFO0FBQ0wsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyxJQUFpQixFQUFFLEVBQUU7SUFDcEQsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUM7SUFDbkMsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUM3QixNQUFNLFNBQVMsR0FBRyxLQUFLLEdBQUcsTUFBTSxDQUFDO0lBQ2pDLE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQzdCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUHJvY2Vzc2luZyBvZiBicmFuY2ggY29sb3IsIHdpZHRoLCBzdHlsZSwgZXRjLiBvZiB0aGUgbWluZCBub2RlXG4gKi9cbmltcG9ydCB7IFBsYWl0Qm9hcmQsIFBsYWl0Tm9kZSB9IGZyb20gJ0BwbGFpdC9jb3JlJztcbmltcG9ydCB7IE1pbmRFbGVtZW50IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9lbGVtZW50JztcbmltcG9ydCB7IENPTE9SUyB9IGZyb20gJy4uLy4uL2NvbnN0YW50cy9ub2RlJztcblxuZXhwb3J0IGNvbnN0IGdldEJyYW5jaENvbG9yQnlNaW5kRWxlbWVudCA9IChib2FyZDogUGxhaXRCb2FyZCwgZWxlbWVudDogTWluZEVsZW1lbnQpID0+IHtcbiAgICBjb25zdCBhbmNlc3RvcnMgPSBNaW5kRWxlbWVudC5nZXRBbmNlc3RvcnMoYm9hcmQsIGVsZW1lbnQpIGFzIE1pbmRFbGVtZW50W107XG4gICAgYW5jZXN0b3JzLnVuc2hpZnQoZWxlbWVudCk7XG4gICAgY29uc3QgYW5jZXN0b3IgPSBhbmNlc3RvcnMuZmluZCh2YWx1ZSA9PiB2YWx1ZS5icmFuY2hDb2xvcik7XG4gICAgaWYgKGFuY2VzdG9yICYmIGFuY2VzdG9yLmJyYW5jaENvbG9yKSB7XG4gICAgICAgIHJldHVybiBhbmNlc3Rvci5icmFuY2hDb2xvcjtcbiAgICB9XG5cbiAgICBjb25zdCByb290ID0gYW5jZXN0b3JzW2FuY2VzdG9ycy5sZW5ndGggLSAxXTtcbiAgICBjb25zdCBicmFuY2ggPSBhbmNlc3RvcnNbYW5jZXN0b3JzLmxlbmd0aCAtIDJdO1xuICAgIGlmIChicmFuY2gpIHtcbiAgICAgICAgY29uc3QgaW5kZXggPSByb290LmNoaWxkcmVuLmluZGV4T2YoYnJhbmNoKTtcbiAgICAgICAgY29uc3QgbGVuZ3RoID0gQ09MT1JTLmxlbmd0aDtcbiAgICAgICAgY29uc3QgcmVtYWluZGVyID0gaW5kZXggJSBsZW5ndGg7XG4gICAgICAgIHJldHVybiBDT0xPUlNbcmVtYWluZGVyXTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3Jvb3QgZWxlbWVudCBzaG91bGQgbm90IGhhdmUgYnJhbmNoIGNvbG9yJyk7XG4gICAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGdldE5leHRCcmFuY2hDb2xvciA9IChyb290OiBNaW5kRWxlbWVudCkgPT4ge1xuICAgIGNvbnN0IGluZGV4ID0gcm9vdC5jaGlsZHJlbi5sZW5ndGg7XG4gICAgY29uc3QgbGVuZ3RoID0gQ09MT1JTLmxlbmd0aDtcbiAgICBjb25zdCByZW1haW5kZXIgPSBpbmRleCAlIGxlbmd0aDtcbiAgICByZXR1cm4gQ09MT1JTW3JlbWFpbmRlcl07XG59O1xuIl19
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export * from './branch';
|
|
2
|
+
export * from './node';
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9taW5kL3NyYy91dGlscy9ub2RlLXN0eWxlL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsVUFBVSxDQUFDO0FBQ3pCLGNBQWMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9icmFuY2gnO1xuZXhwb3J0ICogZnJvbSAnLi9ub2RlJztcbiJdfQ==
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { MindElement } from '../../interfaces/element';
|
|
2
|
+
import { COLORS, ROOT_NODE_STROKE } from '../../constants/node';
|
|
3
|
+
export const getStrokeByMindElement = (board, element) => {
|
|
4
|
+
const ancestors = MindElement.getAncestors(board, element);
|
|
5
|
+
ancestors.unshift(element);
|
|
6
|
+
const ancestor = ancestors.find(value => value.strokeColor);
|
|
7
|
+
if (ancestor && ancestor.strokeColor) {
|
|
8
|
+
return ancestor.strokeColor;
|
|
9
|
+
}
|
|
10
|
+
const root = ancestors[ancestors.length - 1];
|
|
11
|
+
const branch = ancestors[ancestors.length - 2];
|
|
12
|
+
if (branch) {
|
|
13
|
+
const index = root.children.indexOf(branch);
|
|
14
|
+
const length = COLORS.length;
|
|
15
|
+
const remainder = index % length;
|
|
16
|
+
return COLORS[remainder];
|
|
17
|
+
}
|
|
18
|
+
else {
|
|
19
|
+
return ROOT_NODE_STROKE;
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL21pbmQvc3JjL3V0aWxzL25vZGUtc3R5bGUvbm9kZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDdkQsT0FBTyxFQUFFLE1BQU0sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRWhFLE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFHLENBQUMsS0FBaUIsRUFBRSxPQUFvQixFQUFFLEVBQUU7SUFDOUUsTUFBTSxTQUFTLEdBQUcsV0FBVyxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFrQixDQUFDO0lBQzVFLFNBQVMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDM0IsTUFBTSxRQUFRLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUM1RCxJQUFJLFFBQVEsSUFBSSxRQUFRLENBQUMsV0FBVyxFQUFFO1FBQ2xDLE9BQU8sUUFBUSxDQUFDLFdBQVcsQ0FBQztLQUMvQjtJQUVELE1BQU0sSUFBSSxHQUFHLFNBQVMsQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzdDLE1BQU0sTUFBTSxHQUFHLFNBQVMsQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQy9DLElBQUksTUFBTSxFQUFFO1FBQ1IsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDNUMsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztRQUM3QixNQUFNLFNBQVMsR0FBRyxLQUFLLEdBQUcsTUFBTSxDQUFDO1FBQ2pDLE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0tBQzVCO1NBQU07UUFDSCxPQUFPLGdCQUFnQixDQUFDO0tBQzNCO0FBQ0wsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGxhaXRCb2FyZCB9IGZyb20gJ0BwbGFpdC9jb3JlJztcbmltcG9ydCB7IE1pbmRFbGVtZW50IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9lbGVtZW50JztcbmltcG9ydCB7IENPTE9SUywgUk9PVF9OT0RFX1NUUk9LRSB9IGZyb20gJy4uLy4uL2NvbnN0YW50cy9ub2RlJztcblxuZXhwb3J0IGNvbnN0IGdldFN0cm9rZUJ5TWluZEVsZW1lbnQgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIGVsZW1lbnQ6IE1pbmRFbGVtZW50KSA9PiB7XG4gICAgY29uc3QgYW5jZXN0b3JzID0gTWluZEVsZW1lbnQuZ2V0QW5jZXN0b3JzKGJvYXJkLCBlbGVtZW50KSBhcyBNaW5kRWxlbWVudFtdO1xuICAgIGFuY2VzdG9ycy51bnNoaWZ0KGVsZW1lbnQpO1xuICAgIGNvbnN0IGFuY2VzdG9yID0gYW5jZXN0b3JzLmZpbmQodmFsdWUgPT4gdmFsdWUuc3Ryb2tlQ29sb3IpO1xuICAgIGlmIChhbmNlc3RvciAmJiBhbmNlc3Rvci5zdHJva2VDb2xvcikge1xuICAgICAgICByZXR1cm4gYW5jZXN0b3Iuc3Ryb2tlQ29sb3I7XG4gICAgfVxuXG4gICAgY29uc3Qgcm9vdCA9IGFuY2VzdG9yc1thbmNlc3RvcnMubGVuZ3RoIC0gMV07XG4gICAgY29uc3QgYnJhbmNoID0gYW5jZXN0b3JzW2FuY2VzdG9ycy5sZW5ndGggLSAyXTtcbiAgICBpZiAoYnJhbmNoKSB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gcm9vdC5jaGlsZHJlbi5pbmRleE9mKGJyYW5jaCk7XG4gICAgICAgIGNvbnN0IGxlbmd0aCA9IENPTE9SUy5sZW5ndGg7XG4gICAgICAgIGNvbnN0IHJlbWFpbmRlciA9IGluZGV4ICUgbGVuZ3RoO1xuICAgICAgICByZXR1cm4gQ09MT1JTW3JlbWFpbmRlcl07XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFJPT1RfTk9ERV9TVFJPS0U7XG4gICAgfVxufTtcbiJdfQ==
|
package/esm2020/utils/path.mjs
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { PlaitBoard } from '@plait/core';
|
|
2
|
+
import { AbstractNode } from '@plait/layouts';
|
|
2
3
|
import { Path } from 'slate';
|
|
3
4
|
export function findNewChildNodePath(board, element) {
|
|
4
|
-
|
|
5
|
-
return path.concat((element.children || []).length);
|
|
5
|
+
return PlaitBoard.findPath(board, element).concat((element.children || []).filter(child => !AbstractNode.isAbstract(child)).length);
|
|
6
6
|
}
|
|
7
7
|
export function findNewSiblingNodePath(board, element) {
|
|
8
8
|
const path = PlaitBoard.findPath(board, element);
|
|
9
9
|
return Path.next(path);
|
|
10
10
|
}
|
|
11
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
11
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF0aC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL21pbmQvc3JjL3V0aWxzL3BhdGgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBZ0IsTUFBTSxhQUFhLENBQUM7QUFDdkQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFFN0IsTUFBTSxVQUFVLG9CQUFvQixDQUFDLEtBQWlCLEVBQUUsT0FBcUI7SUFDekUsT0FBTyxVQUFVLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3hJLENBQUM7QUFFRCxNQUFNLFVBQVUsc0JBQXNCLENBQUMsS0FBaUIsRUFBRSxPQUFxQjtJQUMzRSxNQUFNLElBQUksR0FBRyxVQUFVLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNqRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDM0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBsYWl0Qm9hcmQsIFBsYWl0RWxlbWVudCB9IGZyb20gJ0BwbGFpdC9jb3JlJztcbmltcG9ydCB7IEFic3RyYWN0Tm9kZSB9IGZyb20gJ0BwbGFpdC9sYXlvdXRzJztcbmltcG9ydCB7IFBhdGggfSBmcm9tICdzbGF0ZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBmaW5kTmV3Q2hpbGROb2RlUGF0aChib2FyZDogUGxhaXRCb2FyZCwgZWxlbWVudDogUGxhaXRFbGVtZW50KSB7XG4gICAgcmV0dXJuIFBsYWl0Qm9hcmQuZmluZFBhdGgoYm9hcmQsIGVsZW1lbnQpLmNvbmNhdCgoZWxlbWVudC5jaGlsZHJlbiB8fCBbXSkuZmlsdGVyKGNoaWxkID0+ICFBYnN0cmFjdE5vZGUuaXNBYnN0cmFjdChjaGlsZCkpLmxlbmd0aCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaW5kTmV3U2libGluZ05vZGVQYXRoKGJvYXJkOiBQbGFpdEJvYXJkLCBlbGVtZW50OiBQbGFpdEVsZW1lbnQpIHtcbiAgICBjb25zdCBwYXRoID0gUGxhaXRCb2FyZC5maW5kUGF0aChib2FyZCwgZWxlbWVudCk7XG4gICAgcmV0dXJuIFBhdGgubmV4dChwYXRoKTtcbn1cbiJdfQ==
|