@plait/core 0.55.1 → 0.56.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -23,26 +23,6 @@ export function createRect(rectangle, options) {
23
23
  export const setStrokeLinecap = (g, value) => {
24
24
  g.setAttribute('stroke-linecap', value);
25
25
  };
26
- export const setAngleForG = (g, centerPoint, angle) => {
27
- if (angle === 0) {
28
- g.removeAttribute('transform');
29
- return;
30
- }
31
- var centerX = centerPoint[0];
32
- var centerY = centerPoint[1];
33
- let cosTheta = Math.cos(angle);
34
- let sinTheta = Math.sin(angle);
35
- let transformMatrix = [
36
- cosTheta,
37
- sinTheta,
38
- -sinTheta,
39
- cosTheta,
40
- centerX * (1 - cosTheta) + centerY * sinTheta,
41
- centerY * (1 - cosTheta) - centerX * sinTheta
42
- ];
43
- let matrix = 'matrix(' + transformMatrix.join(',') + ')';
44
- g.setAttribute('transform', `${matrix}`);
45
- };
46
26
  export const setPathStrokeLinecap = (g, value) => {
47
27
  g.querySelectorAll('path').forEach(path => {
48
28
  path.setAttribute('stroke-linecap', value);
@@ -89,4 +69,4 @@ export const isSecondaryPointer = (event) => {
89
69
  export const isMainPointer = (event) => {
90
70
  return event.button === POINTER_BUTTON.MAIN;
91
71
  };
92
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29yZS9zcmMvdXRpbHMvZG9tL2NvbW1vbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFHakQsTUFBTSxDQUFDLE1BQU0sRUFBRSxHQUFHLDRCQUE0QixDQUFDO0FBRS9DLE1BQU0sVUFBVSxPQUFPO0lBQ25CLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxlQUFlLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQy9DLE9BQU8sSUFBSSxDQUFDO0FBQ2hCLENBQUM7QUFFRCxNQUFNLFVBQVUsVUFBVTtJQUN0QixNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsZUFBZSxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNsRCxPQUFPLElBQUksQ0FBQztBQUNoQixDQUFDO0FBRUQsTUFBTSxVQUFVLFVBQVUsQ0FBQyxTQUEwQixFQUFFLE9BQWlCO0lBQ3BFLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxlQUFlLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2xELElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLEdBQUcsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDekMsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsR0FBRyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUN6QyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxHQUFHLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQ2pELElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLEdBQUcsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDbkQsS0FBSyxJQUFJLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUN0QixN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QUFDSCxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsQ0FBQyxLQUFVLEVBQW9CLEVBQUU7SUFDekQsT0FBTyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDLFFBQVEsS0FBSyxDQUFDLENBQUM7QUFDcEQsQ0FBQyxDQUFDO0FBRUY7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUcsQ0FBQyxLQUFVLEVBQWlCLEVBQUU7SUFDbkQsT0FBTyxLQUFLLFlBQVksTUFBTSxDQUFDLElBQUksQ0FBQztBQUN4QyxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSx3QkFBd0IsR0FBRyxDQUFDLE1BQTBCLEVBQUUsRUFBRTtJQUNuRSxJQUFJLFlBQVksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1FBQ3ZCLElBQUksTUFBTSxDQUFDLE9BQU8sS0FBSyxPQUFPLElBQUksTUFBTSxDQUFDLE9BQU8sS0FBSyxVQUFVLEVBQUUsQ0FBQztZQUM5RCxPQUFPLElBQUksQ0FBQztRQUNoQixDQUFDO0lBQ0wsQ0FBQztJQUNELE9BQU8sS0FBSyxDQUFDO0FBQ2pCLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLENBQUMsS0FBaUIsRUFBRSxFQUFFO0lBQ3BELE9BQU8sS0FBSyxDQUFDLE1BQU0sS0FBSyxjQUFjLENBQUMsU0FBUyxDQUFDO0FBQ3JELENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxDQUFDLEtBQWlCLEVBQUUsRUFBRTtJQUMvQyxPQUFPLEtBQUssQ0FBQyxNQUFNLEtBQUssY0FBYyxDQUFDLElBQUksQ0FBQztBQUNoRCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPcHRpb25zIH0gZnJvbSAncm91Z2hqcy9iaW4vY29yZSc7XG5pbXBvcnQgeyBQT0lOVEVSX0JVVFRPTiB9IGZyb20gJy4uLy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBQb2ludCwgUmVjdGFuZ2xlQ2xpZW50IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5cbmV4cG9ydCBjb25zdCBOUyA9ICdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVHKCkge1xuICAgIGNvbnN0IG5ld0cgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoTlMsICdnJyk7XG4gICAgcmV0dXJuIG5ld0c7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVQYXRoKCkge1xuICAgIGNvbnN0IG5ld0cgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoTlMsICdwYXRoJyk7XG4gICAgcmV0dXJuIG5ld0c7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVSZWN0KHJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50LCBvcHRpb25zPzogT3B0aW9ucykge1xuICAgIGNvbnN0IHJlY3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoTlMsICdyZWN0Jyk7XG4gICAgcmVjdC5zZXRBdHRyaWJ1dGUoJ3gnLCBgJHtyZWN0YW5nbGUueH1gKTtcbiAgICByZWN0LnNldEF0dHJpYnV0ZSgneScsIGAke3JlY3RhbmdsZS55fWApO1xuICAgIHJlY3Quc2V0QXR0cmlidXRlKCd3aWR0aCcsIGAke3JlY3RhbmdsZS53aWR0aH1gKTtcbiAgICByZWN0LnNldEF0dHJpYnV0ZSgnaGVpZ2h0JywgYCR7cmVjdGFuZ2xlLmhlaWdodH1gKTtcbiAgICBmb3IgKGxldCBrZXkgaW4gb3B0aW9ucykge1xuICAgICAgICBjb25zdCBvcHRpb25LZXkgPSBrZXkgYXMga2V5b2YgT3B0aW9ucztcbiAgICAgICAgcmVjdC5zZXRBdHRyaWJ1dGUoa2V5LCBgJHtvcHRpb25zW29wdGlvbktleV19YCk7XG4gICAgfVxuICAgIHJldHVybiByZWN0O1xufVxuXG5leHBvcnQgY29uc3Qgc2V0U3Ryb2tlTGluZWNhcCA9IChnOiBTVkdHRWxlbWVudCwgdmFsdWU6ICdyb3VuZCcgfCAnc3F1YXJlJykgPT4ge1xuICAgIGcuc2V0QXR0cmlidXRlKCdzdHJva2UtbGluZWNhcCcsIHZhbHVlKTtcbn07XG5cbmV4cG9ydCBjb25zdCBzZXRBbmdsZUZvckcgPSAoZzogU1ZHR0VsZW1lbnQsIGNlbnRlclBvaW50OiBQb2ludCwgYW5nbGU6IG51bWJlcikgPT4ge1xuICAgIGlmIChhbmdsZSA9PT0gMCkge1xuICAgICAgICBnLnJlbW92ZUF0dHJpYnV0ZSgndHJhbnNmb3JtJyk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIGNlbnRlclggPSBjZW50ZXJQb2ludFswXTtcbiAgICB2YXIgY2VudGVyWSA9IGNlbnRlclBvaW50WzFdO1xuXG4gICAgbGV0IGNvc1RoZXRhID0gTWF0aC5jb3MoYW5nbGUpO1xuICAgIGxldCBzaW5UaGV0YSA9IE1hdGguc2luKGFuZ2xlKTtcblxuICAgIGxldCB0cmFuc2Zvcm1NYXRyaXggPSBbXG4gICAgICAgIGNvc1RoZXRhLFxuICAgICAgICBzaW5UaGV0YSxcbiAgICAgICAgLXNpblRoZXRhLFxuICAgICAgICBjb3NUaGV0YSxcbiAgICAgICAgY2VudGVyWCAqICgxIC0gY29zVGhldGEpICsgY2VudGVyWSAqIHNpblRoZXRhLFxuICAgICAgICBjZW50ZXJZICogKDEgLSBjb3NUaGV0YSkgLSBjZW50ZXJYICogc2luVGhldGFcbiAgICBdO1xuXG4gICAgbGV0IG1hdHJpeCA9ICdtYXRyaXgoJyArIHRyYW5zZm9ybU1hdHJpeC5qb2luKCcsJykgKyAnKSc7XG4gICAgZy5zZXRBdHRyaWJ1dGUoJ3RyYW5zZm9ybScsIGAke21hdHJpeH1gKTtcbn07XG5cbmV4cG9ydCBjb25zdCBzZXRQYXRoU3Ryb2tlTGluZWNhcCA9IChnOiBTVkdHRWxlbWVudCwgdmFsdWU6ICdyb3VuZCcgfCAnc3F1YXJlJykgPT4ge1xuICAgIGcucXVlcnlTZWxlY3RvckFsbCgncGF0aCcpLmZvckVhY2gocGF0aCA9PiB7XG4gICAgICAgIHBhdGguc2V0QXR0cmlidXRlKCdzdHJva2UtbGluZWNhcCcsIHZhbHVlKTtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVNYXNrKCkge1xuICAgIHJldHVybiBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoTlMsICdtYXNrJyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTVkcoKSB7XG4gICAgY29uc3Qgc3ZnID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKE5TLCAnc3ZnJyk7XG4gICAgcmV0dXJuIHN2Zztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVRleHQoeDogbnVtYmVyLCB5OiBudW1iZXIsIGZpbGw6IHN0cmluZywgdGV4dENvbnRlbnQ6IHN0cmluZykge1xuICAgIHZhciB0ZXh0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKE5TLCAndGV4dCcpO1xuICAgIHRleHQuc2V0QXR0cmlidXRlKCd4JywgYCR7eH1gKTtcbiAgICB0ZXh0LnNldEF0dHJpYnV0ZSgneScsIGAke3l9YCk7XG4gICAgdGV4dC5zZXRBdHRyaWJ1dGUoJ2ZpbGwnLCBmaWxsKTtcbiAgICB0ZXh0LnRleHRDb250ZW50ID0gdGV4dENvbnRlbnQ7XG4gICAgcmV0dXJuIHRleHQ7XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgYSBET00gbm9kZSBpcyBhbiBlbGVtZW50IG5vZGUuXG4gKi9cbmV4cG9ydCBjb25zdCBpc0RPTUVsZW1lbnQgPSAodmFsdWU6IGFueSk6IHZhbHVlIGlzIEVsZW1lbnQgPT4ge1xuICAgIHJldHVybiBpc0RPTU5vZGUodmFsdWUpICYmIHZhbHVlLm5vZGVUeXBlID09PSAxO1xufTtcblxuLyoqXG4gKiBDaGVjayBpZiBhIHZhbHVlIGlzIGEgRE9NIG5vZGUuXG4gKi9cbmV4cG9ydCBjb25zdCBpc0RPTU5vZGUgPSAodmFsdWU6IGFueSk6IHZhbHVlIGlzIE5vZGUgPT4ge1xuICAgIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIHdpbmRvdy5Ob2RlO1xufTtcblxuZXhwb3J0IGNvbnN0IGhhc0lucHV0T3JUZXh0YXJlYVRhcmdldCA9ICh0YXJnZXQ6IEV2ZW50VGFyZ2V0IHwgbnVsbCkgPT4ge1xuICAgIGlmIChpc0RPTUVsZW1lbnQodGFyZ2V0KSkge1xuICAgICAgICBpZiAodGFyZ2V0LnRhZ05hbWUgPT09ICdJTlBVVCcgfHwgdGFyZ2V0LnRhZ05hbWUgPT09ICdURVhUQVJFQScpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc1NlY29uZGFyeVBvaW50ZXIgPSAoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICByZXR1cm4gZXZlbnQuYnV0dG9uID09PSBQT0lOVEVSX0JVVFRPTi5TRUNPTkRBUlk7XG59O1xuXG5leHBvcnQgY29uc3QgaXNNYWluUG9pbnRlciA9IChldmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgIHJldHVybiBldmVudC5idXR0b24gPT09IFBPSU5URVJfQlVUVE9OLk1BSU47XG59O1xuIl19
72
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29yZS9zcmMvdXRpbHMvZG9tL2NvbW1vbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFHakQsTUFBTSxDQUFDLE1BQU0sRUFBRSxHQUFHLDRCQUE0QixDQUFDO0FBRS9DLE1BQU0sVUFBVSxPQUFPO0lBQ25CLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxlQUFlLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQy9DLE9BQU8sSUFBSSxDQUFDO0FBQ2hCLENBQUM7QUFFRCxNQUFNLFVBQVUsVUFBVTtJQUN0QixNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsZUFBZSxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNsRCxPQUFPLElBQUksQ0FBQztBQUNoQixDQUFDO0FBRUQsTUFBTSxVQUFVLFVBQVUsQ0FBQyxTQUEwQixFQUFFLE9BQWlCO0lBQ3BFLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxlQUFlLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2xELElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLEdBQUcsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDekMsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsR0FBRyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUN6QyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxHQUFHLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQ2pELElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLEdBQUcsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDbkQsS0FBSyxJQUFJLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUN0QixN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QUFDaEQsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT3B0aW9ucyB9IGZyb20gJ3JvdWdoanMvYmluL2NvcmUnO1xuaW1wb3J0IHsgUE9JTlRFUl9CVVRUT04gfSBmcm9tICcuLi8uLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgUmVjdGFuZ2xlQ2xpZW50IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5cbmV4cG9ydCBjb25zdCBOUyA9ICdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVHKCkge1xuICAgIGNvbnN0IG5ld0cgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoTlMsICdnJyk7XG4gICAgcmV0dXJuIG5ld0c7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVQYXRoKCkge1xuICAgIGNvbnN0IG5ld0cgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoTlMsICdwYXRoJyk7XG4gICAgcmV0dXJuIG5ld0c7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVSZWN0KHJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50LCBvcHRpb25zPzogT3B0aW9ucykge1xuICAgIGNvbnN0IHJlY3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoTlMsICdyZWN0Jyk7XG4gICAgcmVjdC5zZXRBdHRyaWJ1dGUoJ3gnLCBgJHtyZWN0YW5nbGUueH1gKTtcbiAgICByZWN0LnNldEF0dHJpYnV0ZSgneScsIGAke3JlY3RhbmdsZS55fWApO1xuICAgIHJlY3Quc2V0QXR0cmlidXRlKCd3aWR0aCcsIGAke3JlY3RhbmdsZS53aWR0aH1gKTtcbiAgICByZWN0LnNldEF0dHJpYnV0ZSgnaGVpZ2h0JywgYCR7cmVjdGFuZ2xlLmhlaWdodH1gKTtcbiAgICBmb3IgKGxldCBrZXkgaW4gb3B0aW9ucykge1xuICAgICAgICBjb25zdCBvcHRpb25LZXkgPSBrZXkgYXMga2V5b2YgT3B0aW9ucztcbiAgICAgICAgcmVjdC5zZXRBdHRyaWJ1dGUoa2V5LCBgJHtvcHRpb25zW29wdGlvbktleV19YCk7XG4gICAgfVxuICAgIHJldHVybiByZWN0O1xufVxuXG5leHBvcnQgY29uc3Qgc2V0U3Ryb2tlTGluZWNhcCA9IChnOiBTVkdHRWxlbWVudCwgdmFsdWU6ICdyb3VuZCcgfCAnc3F1YXJlJykgPT4ge1xuICAgIGcuc2V0QXR0cmlidXRlKCdzdHJva2UtbGluZWNhcCcsIHZhbHVlKTtcbn07XG5cbmV4cG9ydCBjb25zdCBzZXRQYXRoU3Ryb2tlTGluZWNhcCA9IChnOiBTVkdHRWxlbWVudCwgdmFsdWU6ICdyb3VuZCcgfCAnc3F1YXJlJykgPT4ge1xuICAgIGcucXVlcnlTZWxlY3RvckFsbCgncGF0aCcpLmZvckVhY2gocGF0aCA9PiB7XG4gICAgICAgIHBhdGguc2V0QXR0cmlidXRlKCdzdHJva2UtbGluZWNhcCcsIHZhbHVlKTtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVNYXNrKCkge1xuICAgIHJldHVybiBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoTlMsICdtYXNrJyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTVkcoKSB7XG4gICAgY29uc3Qgc3ZnID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKE5TLCAnc3ZnJyk7XG4gICAgcmV0dXJuIHN2Zztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVRleHQoeDogbnVtYmVyLCB5OiBudW1iZXIsIGZpbGw6IHN0cmluZywgdGV4dENvbnRlbnQ6IHN0cmluZykge1xuICAgIHZhciB0ZXh0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKE5TLCAndGV4dCcpO1xuICAgIHRleHQuc2V0QXR0cmlidXRlKCd4JywgYCR7eH1gKTtcbiAgICB0ZXh0LnNldEF0dHJpYnV0ZSgneScsIGAke3l9YCk7XG4gICAgdGV4dC5zZXRBdHRyaWJ1dGUoJ2ZpbGwnLCBmaWxsKTtcbiAgICB0ZXh0LnRleHRDb250ZW50ID0gdGV4dENvbnRlbnQ7XG4gICAgcmV0dXJuIHRleHQ7XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgYSBET00gbm9kZSBpcyBhbiBlbGVtZW50IG5vZGUuXG4gKi9cbmV4cG9ydCBjb25zdCBpc0RPTUVsZW1lbnQgPSAodmFsdWU6IGFueSk6IHZhbHVlIGlzIEVsZW1lbnQgPT4ge1xuICAgIHJldHVybiBpc0RPTU5vZGUodmFsdWUpICYmIHZhbHVlLm5vZGVUeXBlID09PSAxO1xufTtcblxuLyoqXG4gKiBDaGVjayBpZiBhIHZhbHVlIGlzIGEgRE9NIG5vZGUuXG4gKi9cbmV4cG9ydCBjb25zdCBpc0RPTU5vZGUgPSAodmFsdWU6IGFueSk6IHZhbHVlIGlzIE5vZGUgPT4ge1xuICAgIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIHdpbmRvdy5Ob2RlO1xufTtcblxuZXhwb3J0IGNvbnN0IGhhc0lucHV0T3JUZXh0YXJlYVRhcmdldCA9ICh0YXJnZXQ6IEV2ZW50VGFyZ2V0IHwgbnVsbCkgPT4ge1xuICAgIGlmIChpc0RPTUVsZW1lbnQodGFyZ2V0KSkge1xuICAgICAgICBpZiAodGFyZ2V0LnRhZ05hbWUgPT09ICdJTlBVVCcgfHwgdGFyZ2V0LnRhZ05hbWUgPT09ICdURVhUQVJFQScpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc1NlY29uZGFyeVBvaW50ZXIgPSAoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICByZXR1cm4gZXZlbnQuYnV0dG9uID09PSBQT0lOVEVSX0JVVFRPTi5TRUNPTkRBUlk7XG59O1xuXG5leHBvcnQgY29uc3QgaXNNYWluUG9pbnRlciA9IChldmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgIHJldHVybiBldmVudC5idXR0b24gPT09IFBPSU5URVJfQlVUVE9OLk1BSU47XG59O1xuIl19
@@ -11,16 +11,16 @@ export const setFragment = (board, type, clipboardData) => {
11
11
  const clipboardContext = board.buildFragment(null, rectangle, type);
12
12
  clipboardContext && setClipboardData(clipboardData, clipboardContext);
13
13
  };
14
- export const duplicateElements = (board, elements) => {
15
- const selectedElements = elements || getSelectedElements(board);
16
- const rectangle = getRectangleByElements(board, selectedElements, false);
17
- const clipboardContext = board.buildFragment(null, rectangle, 'copy');
14
+ export const duplicateElements = (board, elements, point) => {
15
+ const targetElements = elements?.length ? elements : getSelectedElements(board);
16
+ const targetRectangle = getRectangleByElements(board, targetElements, false);
17
+ const clipboardContext = board.buildFragment(null, targetRectangle, 'copy', targetElements);
18
18
  const stringifiedContext = clipboardContext && JSON.stringify(clipboardContext);
19
19
  const clonedContext = stringifiedContext && JSON.parse(stringifiedContext);
20
20
  clonedContext &&
21
21
  board.insertFragment({
22
22
  ...clonedContext,
23
23
  text: undefined
24
- }, [rectangle.x + rectangle.width / 2, rectangle.y + rectangle.height / 2]);
24
+ }, point || [targetRectangle.x + targetRectangle.width / 2, targetRectangle.y + targetRectangle.height / 2]);
25
25
  };
26
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJhZ21lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL3NyYy91dGlscy9mcmFnbWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDbkQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFekQsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLENBQUMsS0FBaUIsRUFBRSxFQUFFO0lBQ2hELE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM5QyxLQUFLLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ25DLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBRyxDQUFDLEtBQWlCLEVBQUUsSUFBb0IsRUFBRSxhQUFrQyxFQUFFLEVBQUU7SUFDdkcsTUFBTSxnQkFBZ0IsR0FBRyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNwRCxNQUFNLFNBQVMsR0FBRyxzQkFBc0IsQ0FBQyxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDekUsTUFBTSxnQkFBZ0IsR0FBRyxLQUFLLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDcEUsZ0JBQWdCLElBQUksZ0JBQWdCLENBQUMsYUFBYSxFQUFFLGdCQUFnQixDQUFDLENBQUM7QUFDMUUsQ0FBQyxDQUFDO0FBR0YsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxLQUFpQixFQUFFLFFBQXlCLEVBQUUsRUFBRTtJQUM5RSxNQUFNLGdCQUFnQixHQUFHLFFBQVEsSUFBSSxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNoRSxNQUFNLFNBQVMsR0FBRyxzQkFBc0IsQ0FBQyxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDekUsTUFBTSxnQkFBZ0IsR0FBRyxLQUFLLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDdEUsTUFBTSxrQkFBa0IsR0FBRyxnQkFBZ0IsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDaEYsTUFBTSxhQUFhLEdBQUcsa0JBQWtCLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0lBQzNFLGFBQWE7UUFDVCxLQUFLLENBQUMsY0FBYyxDQUNoQjtZQUNJLEdBQUcsYUFBYTtZQUNoQixJQUFJLEVBQUUsU0FBUztTQUNsQixFQUNELENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsS0FBSyxHQUFHLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQzFFLENBQUM7QUFDVixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQbGFpdEJvYXJkLCBQbGFpdEVsZW1lbnQgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IHNldENsaXBib2FyZERhdGEgfSBmcm9tICcuL2NsaXBib2FyZC9jbGlwYm9hcmQnO1xuaW1wb3J0IHsgZ2V0UmVjdGFuZ2xlQnlFbGVtZW50cyB9IGZyb20gJy4vZWxlbWVudCc7XG5pbXBvcnQgeyBnZXRTZWxlY3RlZEVsZW1lbnRzIH0gZnJvbSAnLi9zZWxlY3RlZC1lbGVtZW50JztcblxuZXhwb3J0IGNvbnN0IGRlbGV0ZUZyYWdtZW50ID0gKGJvYXJkOiBQbGFpdEJvYXJkKSA9PiB7XG4gICAgY29uc3QgZWxlbWVudHMgPSBib2FyZC5nZXREZWxldGVkRnJhZ21lbnQoW10pO1xuICAgIGJvYXJkLmRlbGV0ZUZyYWdtZW50KGVsZW1lbnRzKTtcbn07XG5cbmV4cG9ydCBjb25zdCBzZXRGcmFnbWVudCA9IChib2FyZDogUGxhaXRCb2FyZCwgdHlwZTogJ2NvcHknIHwgJ2N1dCcsIGNsaXBib2FyZERhdGE6IERhdGFUcmFuc2ZlciB8IG51bGwpID0+IHtcbiAgICBjb25zdCBzZWxlY3RlZEVsZW1lbnRzID0gZ2V0U2VsZWN0ZWRFbGVtZW50cyhib2FyZCk7XG4gICAgY29uc3QgcmVjdGFuZ2xlID0gZ2V0UmVjdGFuZ2xlQnlFbGVtZW50cyhib2FyZCwgc2VsZWN0ZWRFbGVtZW50cywgZmFsc2UpO1xuICAgIGNvbnN0IGNsaXBib2FyZENvbnRleHQgPSBib2FyZC5idWlsZEZyYWdtZW50KG51bGwsIHJlY3RhbmdsZSwgdHlwZSk7XG4gICAgY2xpcGJvYXJkQ29udGV4dCAmJiBzZXRDbGlwYm9hcmREYXRhKGNsaXBib2FyZERhdGEsIGNsaXBib2FyZENvbnRleHQpO1xufTtcblxuXG5leHBvcnQgY29uc3QgZHVwbGljYXRlRWxlbWVudHMgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIGVsZW1lbnRzPzogUGxhaXRFbGVtZW50W10pID0+IHtcbiAgICBjb25zdCBzZWxlY3RlZEVsZW1lbnRzID0gZWxlbWVudHMgfHwgZ2V0U2VsZWN0ZWRFbGVtZW50cyhib2FyZCk7XG4gICAgY29uc3QgcmVjdGFuZ2xlID0gZ2V0UmVjdGFuZ2xlQnlFbGVtZW50cyhib2FyZCwgc2VsZWN0ZWRFbGVtZW50cywgZmFsc2UpO1xuICAgIGNvbnN0IGNsaXBib2FyZENvbnRleHQgPSBib2FyZC5idWlsZEZyYWdtZW50KG51bGwsIHJlY3RhbmdsZSwgJ2NvcHknKTtcbiAgICBjb25zdCBzdHJpbmdpZmllZENvbnRleHQgPSBjbGlwYm9hcmRDb250ZXh0ICYmIEpTT04uc3RyaW5naWZ5KGNsaXBib2FyZENvbnRleHQpO1xuICAgIGNvbnN0IGNsb25lZENvbnRleHQgPSBzdHJpbmdpZmllZENvbnRleHQgJiYgSlNPTi5wYXJzZShzdHJpbmdpZmllZENvbnRleHQpO1xuICAgIGNsb25lZENvbnRleHQgJiZcbiAgICAgICAgYm9hcmQuaW5zZXJ0RnJhZ21lbnQoXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLi4uY2xvbmVkQ29udGV4dCxcbiAgICAgICAgICAgICAgICB0ZXh0OiB1bmRlZmluZWRcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBbcmVjdGFuZ2xlLnggKyByZWN0YW5nbGUud2lkdGggLyAyLCByZWN0YW5nbGUueSArIHJlY3RhbmdsZS5oZWlnaHQgLyAyXVxuICAgICAgICApO1xufTtcbiJdfQ==
26
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJhZ21lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL3NyYy91dGlscy9mcmFnbWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDbkQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFekQsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLENBQUMsS0FBaUIsRUFBRSxFQUFFO0lBQ2hELE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM5QyxLQUFLLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ25DLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBRyxDQUFDLEtBQWlCLEVBQUUsSUFBb0IsRUFBRSxhQUFrQyxFQUFFLEVBQUU7SUFDdkcsTUFBTSxnQkFBZ0IsR0FBRyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNwRCxNQUFNLFNBQVMsR0FBRyxzQkFBc0IsQ0FBQyxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDekUsTUFBTSxnQkFBZ0IsR0FBRyxLQUFLLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDcEUsZ0JBQWdCLElBQUksZ0JBQWdCLENBQUMsYUFBYSxFQUFFLGdCQUFnQixDQUFDLENBQUM7QUFDMUUsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxLQUFpQixFQUFFLFFBQXlCLEVBQUUsS0FBYSxFQUFFLEVBQUU7SUFDN0YsTUFBTSxjQUFjLEdBQUcsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNoRixNQUFNLGVBQWUsR0FBRyxzQkFBc0IsQ0FBQyxLQUFLLEVBQUUsY0FBYyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQzdFLE1BQU0sZ0JBQWdCLEdBQUcsS0FBSyxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsZUFBZSxFQUFFLE1BQU0sRUFBRSxjQUFjLENBQUMsQ0FBQztJQUM1RixNQUFNLGtCQUFrQixHQUFHLGdCQUFnQixJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUNoRixNQUFNLGFBQWEsR0FBRyxrQkFBa0IsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLGtCQUFrQixDQUFDLENBQUM7SUFDM0UsYUFBYTtRQUNULEtBQUssQ0FBQyxjQUFjLENBQ2hCO1lBQ0ksR0FBRyxhQUFhO1lBQ2hCLElBQUksRUFBRSxTQUFTO1NBQ2xCLEVBQ0QsS0FBSyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsR0FBRyxlQUFlLENBQUMsS0FBSyxHQUFHLENBQUMsRUFBRSxlQUFlLENBQUMsQ0FBQyxHQUFHLGVBQWUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQzNHLENBQUM7QUFDVixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQbGFpdEJvYXJkLCBQbGFpdEVsZW1lbnQsIFBvaW50LCBSZWN0YW5nbGVDbGllbnQgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IHNldENsaXBib2FyZERhdGEgfSBmcm9tICcuL2NsaXBib2FyZC9jbGlwYm9hcmQnO1xuaW1wb3J0IHsgZ2V0UmVjdGFuZ2xlQnlFbGVtZW50cyB9IGZyb20gJy4vZWxlbWVudCc7XG5pbXBvcnQgeyBnZXRTZWxlY3RlZEVsZW1lbnRzIH0gZnJvbSAnLi9zZWxlY3RlZC1lbGVtZW50JztcblxuZXhwb3J0IGNvbnN0IGRlbGV0ZUZyYWdtZW50ID0gKGJvYXJkOiBQbGFpdEJvYXJkKSA9PiB7XG4gICAgY29uc3QgZWxlbWVudHMgPSBib2FyZC5nZXREZWxldGVkRnJhZ21lbnQoW10pO1xuICAgIGJvYXJkLmRlbGV0ZUZyYWdtZW50KGVsZW1lbnRzKTtcbn07XG5cbmV4cG9ydCBjb25zdCBzZXRGcmFnbWVudCA9IChib2FyZDogUGxhaXRCb2FyZCwgdHlwZTogJ2NvcHknIHwgJ2N1dCcsIGNsaXBib2FyZERhdGE6IERhdGFUcmFuc2ZlciB8IG51bGwpID0+IHtcbiAgICBjb25zdCBzZWxlY3RlZEVsZW1lbnRzID0gZ2V0U2VsZWN0ZWRFbGVtZW50cyhib2FyZCk7XG4gICAgY29uc3QgcmVjdGFuZ2xlID0gZ2V0UmVjdGFuZ2xlQnlFbGVtZW50cyhib2FyZCwgc2VsZWN0ZWRFbGVtZW50cywgZmFsc2UpO1xuICAgIGNvbnN0IGNsaXBib2FyZENvbnRleHQgPSBib2FyZC5idWlsZEZyYWdtZW50KG51bGwsIHJlY3RhbmdsZSwgdHlwZSk7XG4gICAgY2xpcGJvYXJkQ29udGV4dCAmJiBzZXRDbGlwYm9hcmREYXRhKGNsaXBib2FyZERhdGEsIGNsaXBib2FyZENvbnRleHQpO1xufTtcblxuZXhwb3J0IGNvbnN0IGR1cGxpY2F0ZUVsZW1lbnRzID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBlbGVtZW50cz86IFBsYWl0RWxlbWVudFtdLCBwb2ludD86IFBvaW50KSA9PiB7XG4gICAgY29uc3QgdGFyZ2V0RWxlbWVudHMgPSBlbGVtZW50cz8ubGVuZ3RoID8gZWxlbWVudHMgOiBnZXRTZWxlY3RlZEVsZW1lbnRzKGJvYXJkKTtcbiAgICBjb25zdCB0YXJnZXRSZWN0YW5nbGUgPSBnZXRSZWN0YW5nbGVCeUVsZW1lbnRzKGJvYXJkLCB0YXJnZXRFbGVtZW50cywgZmFsc2UpO1xuICAgIGNvbnN0IGNsaXBib2FyZENvbnRleHQgPSBib2FyZC5idWlsZEZyYWdtZW50KG51bGwsIHRhcmdldFJlY3RhbmdsZSwgJ2NvcHknLCB0YXJnZXRFbGVtZW50cyk7XG4gICAgY29uc3Qgc3RyaW5naWZpZWRDb250ZXh0ID0gY2xpcGJvYXJkQ29udGV4dCAmJiBKU09OLnN0cmluZ2lmeShjbGlwYm9hcmRDb250ZXh0KTtcbiAgICBjb25zdCBjbG9uZWRDb250ZXh0ID0gc3RyaW5naWZpZWRDb250ZXh0ICYmIEpTT04ucGFyc2Uoc3RyaW5naWZpZWRDb250ZXh0KTtcbiAgICBjbG9uZWRDb250ZXh0ICYmXG4gICAgICAgIGJvYXJkLmluc2VydEZyYWdtZW50KFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC4uLmNsb25lZENvbnRleHQsXG4gICAgICAgICAgICAgICAgdGV4dDogdW5kZWZpbmVkXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcG9pbnQgfHwgW3RhcmdldFJlY3RhbmdsZS54ICsgdGFyZ2V0UmVjdGFuZ2xlLndpZHRoIC8gMiwgdGFyZ2V0UmVjdGFuZ2xlLnkgKyB0YXJnZXRSZWN0YW5nbGUuaGVpZ2h0IC8gMl1cbiAgICAgICAgKTtcbn07XG4iXX0=
@@ -1,7 +1,7 @@
1
1
  import { ACTIVE_STROKE_WIDTH } from '../constants';
2
2
  import { PlaitGroupElement, RectangleClient, SELECTION_BORDER_COLOR } from '../interfaces';
3
- import { getSelectionAngle } from './angle';
4
- import { createG, setAngleForG } from './dom';
3
+ import { getSelectionAngle, setAngleForG } from './angle';
4
+ import { createG } from './dom';
5
5
  import { drawRectangle } from './drawing/rectangle';
6
6
  import { getRectangleByElements } from './element';
7
7
  import { idCreator } from './id-creator';
@@ -45,14 +45,14 @@ export const getRectangleByGroup = (board, group, recursion) => {
45
45
  const elementsInGroup = getAllElementsInGroup(board, group, recursion);
46
46
  return getRectangleByElements(board, elementsInGroup, false);
47
47
  };
48
- export const getGroupByElement = (board, element, recursion, source) => {
49
- const group = (source || board.children).find(item => item.id === element?.groupId);
48
+ export const getGroupByElement = (board, element, recursion, originElements) => {
49
+ const group = (originElements || board.children).find(item => item.id === element?.groupId);
50
50
  if (!group) {
51
51
  return recursion ? [] : null;
52
52
  }
53
53
  if (recursion) {
54
54
  const groups = [group];
55
- const grandGroups = getGroupByElement(board, group, recursion, source);
55
+ const grandGroups = getGroupByElement(board, group, recursion, originElements);
56
56
  if (grandGroups.length) {
57
57
  groups.push(...grandGroups);
58
58
  }
@@ -79,14 +79,14 @@ export const getElementsInGroupByElement = (board, element) => {
79
79
  }
80
80
  };
81
81
  export const isSelectedElementOrGroup = (board, element, elements) => {
82
- const selectedElements = elements || getSelectedElements(board);
82
+ const selectedElements = elements?.length ? elements : getSelectedElements(board);
83
83
  if (PlaitGroupElement.isGroup(element)) {
84
84
  return isSelectedAllElementsInGroup(board, element, elements);
85
85
  }
86
86
  return selectedElements.map(item => item.id).includes(element.id);
87
87
  };
88
88
  export const isSelectedAllElementsInGroup = (board, group, elements) => {
89
- const selectedElements = elements || getSelectedElements(board);
89
+ const selectedElements = elements?.length ? elements : getSelectedElements(board);
90
90
  const elementsInGroup = getElementsInGroup(board, group, true);
91
91
  return elementsInGroup.every(item => selectedElements.map(element => element.id).includes(item.id));
92
92
  };
@@ -99,8 +99,8 @@ export const filterSelectedGroups = (board, groups, elements) => {
99
99
  });
100
100
  return selectedGroups;
101
101
  };
102
- export const getSelectedGroups = (board, elements) => {
103
- const highestSelectedGroups = getHighestSelectedGroups(board, elements);
102
+ export const getSelectedGroups = (board, elements, originElements) => {
103
+ const highestSelectedGroups = getHighestSelectedGroups(board, elements, originElements);
104
104
  const groups = [];
105
105
  highestSelectedGroups.forEach(item => {
106
106
  groups.push(item);
@@ -109,20 +109,20 @@ export const getSelectedGroups = (board, elements) => {
109
109
  });
110
110
  return groups;
111
111
  };
112
- export const getHighestSelectedGroup = (board, element, elements) => {
113
- const hitElementGroups = getGroupByElement(board, element, true, elements);
112
+ export const getHighestSelectedGroup = (board, element, elements, originElements) => {
113
+ const hitElementGroups = getGroupByElement(board, element, true, originElements);
114
114
  const selectedGroups = filterSelectedGroups(board, hitElementGroups, elements);
115
115
  if (selectedGroups.length) {
116
116
  return selectedGroups[selectedGroups.length - 1];
117
117
  }
118
118
  return null;
119
119
  };
120
- export const getHighestSelectedGroups = (board, elements) => {
120
+ export const getHighestSelectedGroups = (board, elements, originElements) => {
121
121
  let result = [];
122
- const selectedElements = elements || getSelectedElements(board);
122
+ const selectedElements = elements?.length ? elements : getSelectedElements(board);
123
123
  selectedElements.forEach(item => {
124
124
  if (item.groupId) {
125
- const group = getHighestSelectedGroup(board, item, elements);
125
+ const group = getHighestSelectedGroup(board, item, elements, originElements);
126
126
  if (group && !result.includes(group)) {
127
127
  result.push(group);
128
128
  }
@@ -132,7 +132,7 @@ export const getHighestSelectedGroups = (board, elements) => {
132
132
  };
133
133
  export const getSelectedIsolatedElements = (board, elements) => {
134
134
  let result = [];
135
- const selectedElements = elements || getSelectedElements(board);
135
+ const selectedElements = elements?.length ? elements : getSelectedElements(board);
136
136
  selectedElements
137
137
  .filter(item => !PlaitGroupElement.isGroup(item))
138
138
  .forEach(item => {
@@ -207,9 +207,9 @@ export const canAddGroup = (board, elements) => {
207
207
  }
208
208
  return false;
209
209
  };
210
- export const canRemoveGroup = (board, elements) => {
211
- const selectedGroups = getHighestSelectedGroups(board, elements);
212
- const selectedElements = elements || getSelectedElements(board);
210
+ export const canRemoveGroup = (board, elements, originElements) => {
211
+ const selectedGroups = getHighestSelectedGroups(board, elements, originElements);
212
+ const selectedElements = elements?.length ? elements : getSelectedElements(board);
213
213
  return selectedElements.length > 0 && selectedGroups.length > 0;
214
214
  };
215
215
  export const getEditingGroup = (board, element) => {
@@ -236,4 +236,4 @@ export const moveElementsToNewPathAfterAddGroup = (board, selectedElements, newP
236
236
  };
237
237
  }));
238
238
  };
239
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JvdXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL3NyYy91dGlscy9ncm91cC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDbkQsT0FBTyxFQUE4QyxpQkFBaUIsRUFBRSxlQUFlLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkksT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQzVDLE9BQU8sRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBQzlDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDbkQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN6QyxPQUFPLEVBQXlCLG1CQUFtQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDaEYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ2hELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUM3QyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDakQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLFlBQVksQ0FBQztBQUUxQyxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLEtBQWlCLEVBQUUsS0FBaUIsRUFBRSxTQUFtQixFQUFFLFlBQXNCLEVBQUUsRUFBRTtJQUNwSCxJQUFJLE1BQU0sR0FBbUIsRUFBRSxDQUFDO0lBQ2hDLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUUsS0FBc0IsQ0FBQyxPQUFPLEtBQUssS0FBSyxDQUFDLEVBQUUs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QUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBQ1RJVkVfU1RST0tFX1dJRFRIIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IFBhdGgsIFBsYWl0Qm9hcmQsIFBsYWl0RWxlbWVudCwgUGxhaXRHcm91cCwgUGxhaXRHcm91cEVsZW1lbnQsIFJlY3RhbmdsZUNsaWVudCwgU0VMRUNUSU9OX0JPUkRFUl9DT0xPUiB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgZ2V0U2VsZWN0aW9uQW5nbGUgfSBmcm9tICcuL2FuZ2xlJztcbmltcG9ydCB7IGNyZWF0ZUcsIHNldEFuZ2xlRm9yRyB9IGZyb20gJy4vZG9tJztcbmltcG9ydCB7IGRyYXdSZWN0YW5nbGUgfSBmcm9tICcuL2RyYXdpbmcvcmVjdGFuZ2xlJztcbmltcG9ydCB7IGdldFJlY3RhbmdsZUJ5RWxlbWVudHMgfSBmcm9tICcuL2VsZW1lbnQnO1xuaW1wb3J0IHsgaWRDcmVhdG9yIH0gZnJvbSAnLi9pZC1jcmVhdG9yJztcbmltcG9ydCB7IGNhY2hlU2VsZWN0ZWRFbGVtZW50cywgZ2V0U2VsZWN0ZWRFbGVtZW50cyB9IGZyb20gJy4vc2VsZWN0ZWQtZWxlbWVudCc7XG5pbXBvcnQgeyBpc1NlbGVjdGlvbk1vdmluZyB9IGZyb20gJy4vc2VsZWN0aW9uJztcbmltcG9ydCB7IGRlcHRoRmlyc3RSZWN1cnNpb24gfSBmcm9tICcuL3RyZWUnO1xuaW1wb3J0IHsgbW92ZUVsZW1lbnRzVG9OZXdQYXRoIH0gZnJvbSAnLi9jb21tb24nO1xuaW1wb3J0IHsgc29ydEVsZW1lbnRzIH0gZnJvbSAnLi9wb3NpdGlvbic7XG5cbmV4cG9ydCBjb25zdCBnZXRFbGVtZW50c0luR3JvdXAgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIGdyb3VwOiBQbGFpdEdyb3VwLCByZWN1cnNpb24/OiBib29sZWFuLCBpbmNsdWRlR3JvdXA/OiBib29sZWFuKSA9PiB7XG4gICAgbGV0IHJlc3VsdDogUGxhaXRFbGVtZW50W10gPSBbXTtcbiAgICBjb25zdCBlbGVtZW50cyA9IGJvYXJkLmNoaWxkcmVuLmZpbHRlcih2YWx1ZSA9PiAodmFsdWUgYXMgUGxhaXRFbGVtZW50KS5ncm91cElkID09PSBncm91cC5pZCkgYXMgUGxhaXRFbGVtZW50W107XG4gICAgaWYgKHJlY3Vyc2lvbikge1xuICAgICAgICBlbGVtZW50cy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgICAgaWYgKFBsYWl0R3JvdXBFbGVtZW50LmlzR3JvdXAoaXRlbSkpIHtcbiAgICAgICAgICAgICAgICBpZiAoaW5jbHVkZUdyb3VwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaCguLi5nZXRFbGVtZW50c0luR3JvdXAoYm9hcmQsIGl0ZW0sIHJlY3Vyc2lvbiwgaW5jbHVkZUdyb3VwKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXN1bHQgPSBpbmNsdWRlR3JvdXAgPyBlbGVtZW50cyA6IChlbGVtZW50cy5maWx0ZXIoaXRlbSA9PiAhUGxhaXRHcm91cEVsZW1lbnQuaXNHcm91cChpdGVtKSkgYXMgUGxhaXRFbGVtZW50W10pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEFsbEVsZW1lbnRzSW5Hcm91cCA9IChib2FyZDogUGxhaXRCb2FyZCwgZ3JvdXA6IFBsYWl0R3JvdXAsIHJlY3Vyc2lvbj86IGJvb2xlYW4sIGluY2x1ZGVHcm91cD86IGJvb2xlYW4pID0+IHtcbiAgICBjb25zdCBlbGVtZW50c0luR3JvdXAgPSBnZXRFbGVtZW50c0luR3JvdXAoYm9hcmQsIGdyb3VwLCByZWN1cnNpb24sIGluY2x1ZGVHcm91cCk7XG4gICAgY29uc3QgcmVzdWx0OiBQbGFpdEVsZW1lbnRbXSA9IFtdO1xuICAgIGVsZW1lbnRzSW5Hcm91cC5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgICBkZXB0aEZpcnN0UmVjdXJzaW9uKFxuICAgICAgICAgICAgZWxlbWVudCxcbiAgICAgICAgICAgIG5vZGUgPT4ge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKG5vZGUpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICgpID0+IHRydWVcbiAgICAgICAgKTtcbiAgICB9KTtcbiAgICByZXR1cm4gcmVzdWx0O1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFJlY3RhbmdsZUJ5R3JvdXAgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIGdyb3VwOiBQbGFpdEdyb3VwLCByZWN1cnNpb24/OiBib29sZWFuKSA9PiB7XG4gICAgY29uc3QgZWxlbWVudHNJbkdyb3VwID0gZ2V0QWxsRWxlbWVudHNJbkdyb3VwKGJvYXJkLCBncm91cCwgcmVjdXJzaW9uKSBhcyBQbGFpdEVsZW1lbnRbXTtcbiAgICByZXR1cm4gZ2V0UmVjdGFuZ2xlQnlFbGVtZW50cyhib2FyZCwgZWxlbWVudHNJbkdyb3VwLCBmYWxzZSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0R3JvdXBCeUVsZW1lbnQgPSAoXG4gICAgYm9hcmQ6IFBsYWl0Qm9hcmQsXG4gICAgZWxlbWVudDogUGxhaXRFbGVtZW50LFxuICAgIHJlY3Vyc2lvbj86IGJvb2xlYW4sXG4gICAgc291cmNlPzogUGxhaXRFbGVtZW50W11cbik6IFBsYWl0R3JvdXAgfCBQbGFpdEdyb3VwW10gfCBudWxsID0+IHtcbiAgICBjb25zdCBncm91cCA9IChzb3VyY2UgfHwgYm9hcmQuY2hpbGRyZW4pLmZpbmQoaXRlbSA9PiBpdGVtLmlkID09PSBlbGVtZW50Py5ncm91cElkKTtcbiAgICBpZiAoIWdyb3VwKSB7XG4gICAgICAgIHJldHVybiByZWN1cnNpb24gPyBbXSA6IG51bGw7XG4gICAgfVxuICAgIGlmIChyZWN1cnNpb24pIHtcbiAgICAgICAgY29uc3QgZ3JvdXBzID0gW2dyb3VwXTtcbiAgICAgICAgY29uc3QgZ3JhbmRHcm91cHMgPSBnZXRHcm91cEJ5RWxlbWVudChib2FyZCwgZ3JvdXAsIHJlY3Vyc2lvbiwgc291cmNlKSBhcyBQbGFpdEdyb3VwW107XG4gICAgICAgIGlmIChncmFuZEdyb3Vwcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGdyb3Vwcy5wdXNoKC4uLmdyYW5kR3JvdXBzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZ3JvdXBzIGFzIFBsYWl0R3JvdXBbXTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZ3JvdXAgYXMgUGxhaXRHcm91cDtcbiAgICB9XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0SGlnaGVzdEdyb3VwID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBlbGVtZW50OiBQbGFpdEVsZW1lbnQpID0+IHtcbiAgICBjb25zdCBoaXRFbGVtZW50R3JvdXBzID0gZ2V0R3JvdXBCeUVsZW1lbnQoYm9hcmQsIGVsZW1lbnQsIHRydWUpIGFzIFBsYWl0R3JvdXBbXTtcbiAgICBpZiAoaGl0RWxlbWVudEdyb3Vwcy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIGhpdEVsZW1lbnRHcm91cHNbaGl0RWxlbWVudEdyb3Vwcy5sZW5ndGggLSAxXTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0RWxlbWVudHNJbkdyb3VwQnlFbGVtZW50ID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBlbGVtZW50OiBQbGFpdEVsZW1lbnQpID0+IHtcbiAgICBjb25zdCBoaWdoZXN0R3JvdXAgPSBnZXRIaWdoZXN0R3JvdXAoYm9hcmQsIGVsZW1lbnQpO1xuICAgIGlmIChoaWdoZXN0R3JvdXApIHtcbiAgICAgICAgcmV0dXJuIGdldEFsbEVsZW1lbnRzSW5Hcm91cChib2FyZCwgaGlnaGVzdEdyb3VwLCB0cnVlKSBhcyBQbGFpdEdyb3VwW107XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFtlbGVtZW50XTtcbiAgICB9XG59O1xuXG5leHBvcnQgY29uc3QgaXNTZWxlY3RlZEVsZW1lbnRPckdyb3VwID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBlbGVtZW50OiBQbGFpdEVsZW1lbnQsIGVsZW1lbnRzPzogUGxhaXRFbGVtZW50W10pID0+IHtcbiAgICBjb25zdCBzZWxlY3RlZEVsZW1lbnRzID0gZWxlbWVudHMgfHwgZ2V0U2VsZWN0ZWRFbGVtZW50cyhib2FyZCk7XG4gICAgaWYgKFBsYWl0R3JvdXBFbGVtZW50LmlzR3JvdXAoZWxlbWVudCkpIHtcbiAgICAgICAgcmV0dXJuIGlzU2VsZWN0ZWRBbGxFbGVtZW50c0luR3JvdXAoYm9hcmQsIGVsZW1lbnQsIGVsZW1lbnRzKTtcbiAgICB9XG4gICAgcmV0dXJuIHNlbGVjdGVkRWxlbWVudHMubWFwKGl0ZW0gPT4gaXRlbS5pZCkuaW5jbHVkZXMoZWxlbWVudC5pZCk7XG59O1xuXG5leHBvcnQgY29uc3QgaXNTZWxlY3RlZEFsbEVsZW1lbnRzSW5Hcm91cCA9IChib2FyZDogUGxhaXRCb2FyZCwgZ3JvdXA6IFBsYWl0R3JvdXAsIGVsZW1lbnRzPzogUGxhaXRFbGVtZW50W10pID0+IHtcbiAgICBjb25zdCBzZWxlY3RlZEVsZW1lbnRzID0gZWxlbWVudHMgfHwgZ2V0U2VsZWN0ZWRFbGVtZW50cyhib2FyZCk7XG4gICAgY29uc3QgZWxlbWVudHNJbkdyb3VwID0gZ2V0RWxlbWVudHNJbkdyb3VwKGJvYXJkLCBncm91cCwgdHJ1ZSk7XG4gICAgcmV0dXJuIGVsZW1lbnRzSW5Hcm91cC5ldmVyeShpdGVtID0+IHNlbGVjdGVkRWxlbWVudHMubWFwKGVsZW1lbnQgPT4gZWxlbWVudC5pZCkuaW5jbHVkZXMoaXRlbS5pZCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGZpbHRlclNlbGVjdGVkR3JvdXBzID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBncm91cHM6IFBsYWl0R3JvdXBbXSwgZWxlbWVudHM/OiBQbGFpdEVsZW1lbnRbXSk6IFBsYWl0R3JvdXBbXSA9PiB7XG4gICAgY29uc3Qgc2VsZWN0ZWRHcm91cHM6IFBsYWl0R3JvdXBbXSA9IFtdO1xuICAgIGdyb3Vwcy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICBpZiAoaXNTZWxlY3RlZEVsZW1lbnRPckdyb3VwKGJvYXJkLCBpdGVtLCBlbGVtZW50cykpIHtcbiAgICAgICAgICAgIHNlbGVjdGVkR3JvdXBzLnB1c2goaXRlbSk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gc2VsZWN0ZWRHcm91cHM7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0U2VsZWN0ZWRHcm91cHMgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIGVsZW1lbnRzPzogUGxhaXRFbGVtZW50W10pOiBQbGFpdEdyb3VwW10gPT4ge1xuICAgIGNvbnN0IGhpZ2hlc3RTZWxlY3RlZEdyb3VwcyA9IGdldEhpZ2hlc3RTZWxlY3RlZEdyb3Vwcyhib2FyZCwgZWxlbWVudHMpO1xuICAgIGNvbnN0IGdyb3VwczogUGxhaXRHcm91cFtdID0gW107XG4gICAgaGlnaGVzdFNlbGVjdGVkR3JvdXBzLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgIGdyb3Vwcy5wdXNoKGl0ZW0pO1xuICAgICAgICBjb25zdCBlbGVtZW50c0luR3JvdXAgPSBnZXRFbGVtZW50c0luR3JvdXAoYm9hcmQsIGl0ZW0sIHRydWUsIHRydWUpO1xuICAgICAgICBncm91cHMucHVzaCguLi4oZWxlbWVudHNJbkdyb3VwLmZpbHRlcihpdGVtID0+IFBsYWl0R3JvdXBFbGVtZW50LmlzR3JvdXAoaXRlbSkpIGFzIFBsYWl0R3JvdXBbXSkpO1xuICAgIH0pO1xuICAgIHJldHVybiBncm91cHM7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0SGlnaGVzdFNlbGVjdGVkR3JvdXAgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIGVsZW1lbnQ6IFBsYWl0RWxlbWVudCwgZWxlbWVudHM/OiBQbGFpdEVsZW1lbnRbXSk6IFBsYWl0R3JvdXAgfCBudWxsID0+IHtcbiAgICBjb25zdCBoaXRFbGVtZW50R3JvdXBzID0gZ2V0R3JvdXBCeUVsZW1lbnQoYm9hcmQsIGVsZW1lbnQsIHRydWUsIGVsZW1lbnRzKSBhcyBQbGFpdEdyb3VwW107XG4gICAgY29uc3Qgc2VsZWN0ZWRHcm91cHMgPSBmaWx0ZXJTZWxlY3RlZEdyb3Vwcyhib2FyZCwgaGl0RWxlbWVudEdyb3VwcywgZWxlbWVudHMpO1xuICAgIGlmIChzZWxlY3RlZEdyb3Vwcy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIHNlbGVjdGVkR3JvdXBzW3NlbGVjdGVkR3JvdXBzLmxlbmd0aCAtIDFdO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRIaWdoZXN0U2VsZWN0ZWRHcm91cHMgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIGVsZW1lbnRzPzogUGxhaXRFbGVtZW50W10pOiBQbGFpdEdyb3VwW10gPT4ge1xuICAgIGxldCByZXN1bHQ6IFBsYWl0R3JvdXBbXSA9IFtdO1xuICAgIGNvbnN0IHNlbGVjdGVkRWxlbWVudHMgPSBlbGVtZW50cyB8fCBnZXRTZWxlY3RlZEVsZW1lbnRzKGJvYXJkKTtcbiAgICBzZWxlY3RlZEVsZW1lbnRzLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgIGlmIChpdGVtLmdyb3VwSWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGdyb3VwID0gZ2V0SGlnaGVzdFNlbGVjdGVkR3JvdXAoYm9hcmQsIGl0ZW0sIGVsZW1lbnRzKTtcbiAgICAgICAgICAgIGlmIChncm91cCAmJiAhcmVzdWx0LmluY2x1ZGVzKGdyb3VwKSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGdyb3VwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0U2VsZWN0ZWRJc29sYXRlZEVsZW1lbnRzID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBlbGVtZW50cz86IFBsYWl0RWxlbWVudFtdKSA9PiB7XG4gICAgbGV0IHJlc3VsdDogUGxhaXRFbGVtZW50W10gPSBbXTtcbiAgICBjb25zdCBzZWxlY3RlZEVsZW1lbnRzID0gZWxlbWVudHMgfHwgZ2V0U2VsZWN0ZWRFbGVtZW50cyhib2FyZCk7XG4gICAgc2VsZWN0ZWRFbGVtZW50c1xuICAgICAgICAuZmlsdGVyKGl0ZW0gPT4gIVBsYWl0R3JvdXBFbGVtZW50LmlzR3JvdXAoaXRlbSkpXG4gICAgICAgIC5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgICAgaWYgKCFpdGVtLmdyb3VwSWQpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaChpdGVtKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZ3JvdXAgPSBnZXRIaWdoZXN0U2VsZWN0ZWRHcm91cChib2FyZCwgaXRlbSwgZWxlbWVudHMpO1xuICAgICAgICAgICAgICAgIGlmICghZ3JvdXApIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goaXRlbSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICByZXR1cm4gcmVzdWx0O1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFNlbGVjdGVkSXNvbGF0ZWRFbGVtZW50c0NhbkFkZFRvR3JvdXAgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIGVsZW1lbnRzPzogUGxhaXRFbGVtZW50W10pID0+IHtcbiAgICBjb25zdCBzZWxlY3RlZElzb2xhdGVkRWxlbWVudHMgPSBnZXRTZWxlY3RlZElzb2xhdGVkRWxlbWVudHMoYm9hcmQsIGVsZW1lbnRzKTtcbiAgICByZXR1cm4gc2VsZWN0ZWRJc29sYXRlZEVsZW1lbnRzLmZpbHRlcihpdGVtID0+IGJvYXJkLmNhbkFkZFRvR3JvdXAoaXRlbSkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEhpZ2hlc3RTZWxlY3RlZEVsZW1lbnRzID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBlbGVtZW50cz86IFBsYWl0RWxlbWVudFtdKSA9PiB7XG4gICAgcmV0dXJuIFsuLi5nZXRIaWdoZXN0U2VsZWN0ZWRHcm91cHMoYm9hcmQsIGVsZW1lbnRzKSwgLi4uZ2V0U2VsZWN0ZWRJc29sYXRlZEVsZW1lbnRzKGJvYXJkLCBlbGVtZW50cyldO1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZUdyb3VwUmVjdGFuZ2xlRyA9IChib2FyZDogUGxhaXRCb2FyZCwgZWxlbWVudHM6IFBsYWl0RWxlbWVudFtdKTogU1ZHR0VsZW1lbnQgfCBudWxsID0+IHtcbiAgICBjb25zdCBzZWxlY3RlZEVsZW1lbnRJZHMgPSBnZXRTZWxlY3RlZEVsZW1lbnRzKGJvYXJkKS5tYXAoaXRlbSA9PiBpdGVtLmlkKTtcbiAgICBsZXQgZ3JvdXBSZWN0YW5nbGVHOiBTVkdHRWxlbWVudCB8IG51bGwgPSBudWxsO1xuICAgIGNvbnN0IGlzTW92aW5nID0gaXNTZWxlY3Rpb25Nb3ZpbmcoYm9hcmQpO1xuXG4gICAgZWxlbWVudHMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgY29uc3QgaXNSZW5kZXIgPSAoIXNlbGVjdGVkRWxlbWVudElkcy5pbmNsdWRlcyhpdGVtLmlkKSAmJiAhaXNNb3ZpbmcpIHx8IGlzTW92aW5nO1xuICAgICAgICBpZiAoaXRlbS5ncm91cElkICYmIGlzUmVuZGVyKSB7XG4gICAgICAgICAgICBpZiAoIWdyb3VwUmVjdGFuZ2xlRykge1xuICAgICAgICAgICAgICAgIGdyb3VwUmVjdGFuZ2xlRyA9IGNyZWF0ZUcoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRzID0gZ2V0RWxlbWVudHNJbkdyb3VwQnlFbGVtZW50KGJvYXJkLCBpdGVtKTtcbiAgICAgICAgICAgIGNvbnN0IHJlY3RhbmdsZSA9IGdldFJlY3RhbmdsZUJ5RWxlbWVudHMoYm9hcmQsIGVsZW1lbnRzLCBmYWxzZSk7XG4gICAgICAgICAgICBjb25zdCByZWN0YW5nbGVHID0gZHJhd1JlY3RhbmdsZShib2FyZCwgcmVjdGFuZ2xlLCB7XG4gICAgICAgICAgICAgICAgc3Ryb2tlOiBTRUxFQ1RJT05fQk9SREVSX0NPTE9SLFxuICAgICAgICAgICAgICAgIHN0cm9rZVdpZHRoOiBBQ1RJVkVfU1RST0tFX1dJRFRILFxuICAgICAgICAgICAgICAgIHN0cm9rZUxpbmVEYXNoOiBbNV1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3QgYW5nbGUgPSBnZXRTZWxlY3Rpb25BbmdsZShlbGVtZW50cyk7XG4gICAgICAgICAgICBpZiAoYW5nbGUpIHtcbiAgICAgICAgICAgICAgICBzZXRBbmdsZUZvckcocmVjdGFuZ2xlRywgUmVjdGFuZ2xlQ2xpZW50LmdldENlbnRlclBvaW50KHJlY3RhbmdsZSksIGFuZ2xlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGdyb3VwUmVjdGFuZ2xlRy5hcHBlbmQocmVjdGFuZ2xlRyk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gZ3JvdXBSZWN0YW5nbGVHO1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZUdyb3VwID0gKGdyb3VwSWQ/OiBzdHJpbmcpOiBQbGFpdEdyb3VwID0+IHtcbiAgICByZXR1cm4gZ3JvdXBJZFxuICAgICAgICA/IHtcbiAgICAgICAgICAgICAgaWQ6IGlkQ3JlYXRvcigpLFxuICAgICAgICAgICAgICB0eXBlOiAnZ3JvdXAnLFxuICAgICAgICAgICAgICBncm91cElkXG4gICAgICAgICAgfVxuICAgICAgICA6IHtcbiAgICAgICAgICAgICAgaWQ6IGlkQ3JlYXRvcigpLFxuICAgICAgICAgICAgICB0eXBlOiAnZ3JvdXAnXG4gICAgICAgICAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBub25Hcm91cEluSGlnaGVzdFNlbGVjdGVkRWxlbWVudHMgPSAoZWxlbWVudHM6IFBsYWl0RWxlbWVudFtdKSA9PiB7XG4gICAgcmV0dXJuIGVsZW1lbnRzLmV2ZXJ5KGl0ZW0gPT4gIWl0ZW0uZ3JvdXBJZCk7XG59O1xuXG5leHBvcnQgY29uc3QgaGFzU2VsZWN0ZWRFbGVtZW50c0luU2FtZUdyb3VwID0gKGVsZW1lbnRzOiBQbGFpdEVsZW1lbnRbXSkgPT4ge1xuICAgIHJldHVybiBlbGVtZW50cy5ldmVyeShpdGVtID0+IGl0ZW0uZ3JvdXBJZCAmJiBpdGVtLmdyb3VwSWQgPT09IGVsZW1lbnRzWzBdLmdyb3VwSWQpO1xufTtcblxuZXhwb3J0IGNvbnN0IGNhbkFkZEdyb3VwID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBlbGVtZW50cz86IFBsYWl0RWxlbWVudFtdKSA9PiB7XG4gICAgY29uc3QgaGlnaGVzdFNlbGVjdGVkRWxlbWVudHMgPSBnZXRIaWdoZXN0U2VsZWN0ZWRFbGVtZW50cyhib2FyZCwgZWxlbWVudHMpO1xuICAgIGNvbnN0IHJvb3RFbGVtZW50cyA9IGhpZ2hlc3RTZWxlY3RlZEVsZW1lbnRzLmZpbHRlcihpdGVtID0+IGJvYXJkLmNhbkFkZFRvR3JvdXAoaXRlbSkpO1xuICAgIGlmIChyb290RWxlbWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgICByZXR1cm4gbm9uR3JvdXBJbkhpZ2hlc3RTZWxlY3RlZEVsZW1lbnRzKHJvb3RFbGVtZW50cykgfHwgaGFzU2VsZWN0ZWRFbGVtZW50c0luU2FtZUdyb3VwKHJvb3RFbGVtZW50cyk7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn07XG5cbmV4cG9ydCBjb25zdCBjYW5SZW1vdmVHcm91cCA9IChib2FyZDogUGxhaXRCb2FyZCwgZWxlbWVudHM/OiBQbGFpdEVsZW1lbnRbXSkgPT4ge1xuICAgIGNvbnN0IHNlbGVjdGVkR3JvdXBzID0gZ2V0SGlnaGVzdFNlbGVjdGVkR3JvdXBzKGJvYXJkLCBlbGVtZW50cyk7XG4gICAgY29uc3Qgc2VsZWN0ZWRFbGVtZW50cyA9IGVsZW1lbnRzIHx8IGdldFNlbGVjdGVkRWxlbWVudHMoYm9hcmQpO1xuICAgIHJldHVybiBzZWxlY3RlZEVsZW1lbnRzLmxlbmd0aCA+IDAgJiYgc2VsZWN0ZWRHcm91cHMubGVuZ3RoID4gMDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRFZGl0aW5nR3JvdXAgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIGVsZW1lbnQ6IFBsYWl0RWxlbWVudCkgPT4ge1xuICAgIGNvbnN0IGdyb3VwcyA9IGdldEdyb3VwQnlFbGVtZW50KGJvYXJkLCBlbGVtZW50LCB0cnVlKSBhcyBQbGFpdEdyb3VwW107XG4gICAgbGV0IGVkaXRpbmdHcm91cCA9IG51bGw7XG4gICAgaWYgKGdyb3Vwcz8ubGVuZ3RoKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZ3JvdXBzPy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKCFpc1NlbGVjdGVkQWxsRWxlbWVudHNJbkdyb3VwKGJvYXJkLCBncm91cHNbaV0pKSB7XG4gICAgICAgICAgICAgICAgZWRpdGluZ0dyb3VwID0gZ3JvdXBzW2ldO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBlZGl0aW5nR3JvdXA7XG59O1xuXG5leHBvcnQgY29uc3QgbW92ZUVsZW1lbnRzVG9OZXdQYXRoQWZ0ZXJBZGRHcm91cCA9IChib2FyZDogUGxhaXRCb2FyZCwgc2VsZWN0ZWRFbGVtZW50czogUGxhaXRFbGVtZW50W10sIG5ld1BhdGg6IFBhdGgpID0+IHtcbiAgICBjb25zdCBtb3ZlRWxlbWVudHMgPSBbLi4uc2VsZWN0ZWRFbGVtZW50c107XG4gICAgc29ydEVsZW1lbnRzKGJvYXJkLCBtb3ZlRWxlbWVudHMpO1xuICAgIG1vdmVFbGVtZW50cy5wb3AoKTtcbiAgICBtb3ZlRWxlbWVudHNUb05ld1BhdGgoXG4gICAgICAgIGJvYXJkLFxuICAgICAgICBtb3ZlRWxlbWVudHMubWFwKGVsZW1lbnQgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBlbGVtZW50LFxuICAgICAgICAgICAgICAgIG5ld1BhdGhcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pXG4gICAgKTtcbn07XG4iXX0=
239
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JvdXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL3NyYy91dGlscy9ncm91cC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDbkQsT0FBTyxFQUE4QyxpQkFBaUIsRUFBRSxlQUFlLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkksT0FBTyxFQUFFLGlCQUFpQixFQUFFLFlBQVksRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUMxRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBQ2hDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDbkQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN6QyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDaEQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUNqRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBRTFDLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLENBQUMsS0FBaUIsRUFBRSxLQUFpQixFQUFFLFNBQW1CLEVBQUUsWUFBc0IsRUFBRSxFQUFFO0lBQ3BILElBQUksTUFBTSxHQUFtQixFQUFFLENBQUM7SUFDaEMsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBRSxLQUFzQixDQUFDLE9BQU8sS0FBSyxLQUFLLENBQUMsRUFBRSxD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RUFBRSxPQUFhLEVBQUUsRUFBRTtJQUNySCxNQUFNLFlBQVksR0FBRyxDQUFDLEdBQUcsZ0JBQWdCLENBQUMsQ0FBQztJQUMzQyxZQUFZLENBQUMsS0FBSyxFQUFFLFlBQVksQ0FBQyxDQUFDO0lBQ2xDLFlBQVksQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUNuQixxQkFBcUIsQ0FDakIsS0FBSyxFQUNMLFlBQVksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUU7UUFDdkIsT0FBTztZQUNILE9BQU87WUFDUCxPQUFPO1NBQ1YsQ0FBQztJQUNOLENBQUMsQ0FBQyxDQUNMLENBQUM7QUFDTixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBQ1RJVkVfU1RST0tFX1dJRFRIIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IFBhdGgsIFBsYWl0Qm9hcmQsIFBsYWl0RWxlbWVudCwgUGxhaXRHcm91cCwgUGxhaXRHcm91cEVsZW1lbnQsIFJlY3RhbmdsZUNsaWVudCwgU0VMRUNUSU9OX0JPUkRFUl9DT0xPUiB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgZ2V0U2VsZWN0aW9uQW5nbGUsIHNldEFuZ2xlRm9yRyB9IGZyb20gJy4vYW5nbGUnO1xuaW1wb3J0IHsgY3JlYXRlRyB9IGZyb20gJy4vZG9tJztcbmltcG9ydCB7IGRyYXdSZWN0YW5nbGUgfSBmcm9tICcuL2RyYXdpbmcvcmVjdGFuZ2xlJztcbmltcG9ydCB7IGdldFJlY3RhbmdsZUJ5RWxlbWVudHMgfSBmcm9tICcuL2VsZW1lbnQnO1xuaW1wb3J0IHsgaWRDcmVhdG9yIH0gZnJvbSAnLi9pZC1jcmVhdG9yJztcbmltcG9ydCB7IGdldFNlbGVjdGVkRWxlbWVudHMgfSBmcm9tICcuL3NlbGVjdGVkLWVsZW1lbnQnO1xuaW1wb3J0IHsgaXNTZWxlY3Rpb25Nb3ZpbmcgfSBmcm9tICcuL3NlbGVjdGlvbic7XG5pbXBvcnQgeyBkZXB0aEZpcnN0UmVjdXJzaW9uIH0gZnJvbSAnLi90cmVlJztcbmltcG9ydCB7IG1vdmVFbGVtZW50c1RvTmV3UGF0aCB9IGZyb20gJy4vY29tbW9uJztcbmltcG9ydCB7IHNvcnRFbGVtZW50cyB9IGZyb20gJy4vcG9zaXRpb24nO1xuXG5leHBvcnQgY29uc3QgZ2V0RWxlbWVudHNJbkdyb3VwID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBncm91cDogUGxhaXRHcm91cCwgcmVjdXJzaW9uPzogYm9vbGVhbiwgaW5jbHVkZUdyb3VwPzogYm9vbGVhbikgPT4ge1xuICAgIGxldCByZXN1bHQ6IFBsYWl0RWxlbWVudFtdID0gW107XG4gICAgY29uc3QgZWxlbWVudHMgPSBib2FyZC5jaGlsZHJlbi5maWx0ZXIodmFsdWUgPT4gKHZhbHVlIGFzIFBsYWl0RWxlbWVudCkuZ3JvdXBJZCA9PT0gZ3JvdXAuaWQpIGFzIFBsYWl0RWxlbWVudFtdO1xuICAgIGlmIChyZWN1cnNpb24pIHtcbiAgICAgICAgZWxlbWVudHMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICAgIGlmIChQbGFpdEdyb3VwRWxlbWVudC5pc0dyb3VwKGl0ZW0pKSB7XG4gICAgICAgICAgICAgICAgaWYgKGluY2x1ZGVHcm91cCkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChpdGVtKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goLi4uZ2V0RWxlbWVudHNJbkdyb3VwKGJvYXJkLCBpdGVtLCByZWN1cnNpb24sIGluY2x1ZGVHcm91cCkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaChpdGVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdWx0ID0gaW5jbHVkZUdyb3VwID8gZWxlbWVudHMgOiAoZWxlbWVudHMuZmlsdGVyKGl0ZW0gPT4gIVBsYWl0R3JvdXBFbGVtZW50LmlzR3JvdXAoaXRlbSkpIGFzIFBsYWl0RWxlbWVudFtdKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRBbGxFbGVtZW50c0luR3JvdXAgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIGdyb3VwOiBQbGFpdEdyb3VwLCByZWN1cnNpb24/OiBib29sZWFuLCBpbmNsdWRlR3JvdXA/OiBib29sZWFuKSA9PiB7XG4gICAgY29uc3QgZWxlbWVudHNJbkdyb3VwID0gZ2V0RWxlbWVudHNJbkdyb3VwKGJvYXJkLCBncm91cCwgcmVjdXJzaW9uLCBpbmNsdWRlR3JvdXApO1xuICAgIGNvbnN0IHJlc3VsdDogUGxhaXRFbGVtZW50W10gPSBbXTtcbiAgICBlbGVtZW50c0luR3JvdXAuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgICAgZGVwdGhGaXJzdFJlY3Vyc2lvbihcbiAgICAgICAgICAgIGVsZW1lbnQsXG4gICAgICAgICAgICBub2RlID0+IHtcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaChub2RlKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAoKSA9PiB0cnVlXG4gICAgICAgICk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRSZWN0YW5nbGVCeUdyb3VwID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBncm91cDogUGxhaXRHcm91cCwgcmVjdXJzaW9uPzogYm9vbGVhbikgPT4ge1xuICAgIGNvbnN0IGVsZW1lbnRzSW5Hcm91cCA9IGdldEFsbEVsZW1lbnRzSW5Hcm91cChib2FyZCwgZ3JvdXAsIHJlY3Vyc2lvbikgYXMgUGxhaXRFbGVtZW50W107XG4gICAgcmV0dXJuIGdldFJlY3RhbmdsZUJ5RWxlbWVudHMoYm9hcmQsIGVsZW1lbnRzSW5Hcm91cCwgZmFsc2UpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEdyb3VwQnlFbGVtZW50ID0gKFxuICAgIGJvYXJkOiBQbGFpdEJvYXJkLFxuICAgIGVsZW1lbnQ6IFBsYWl0RWxlbWVudCxcbiAgICByZWN1cnNpb24/OiBib29sZWFuLFxuICAgIG9yaWdpbkVsZW1lbnRzPzogUGxhaXRFbGVtZW50W11cbik6IFBsYWl0R3JvdXAgfCBQbGFpdEdyb3VwW10gfCBudWxsID0+IHtcbiAgICBjb25zdCBncm91cCA9IChvcmlnaW5FbGVtZW50cyB8fCBib2FyZC5jaGlsZHJlbikuZmluZChpdGVtID0+IGl0ZW0uaWQgPT09IGVsZW1lbnQ/Lmdyb3VwSWQpO1xuICAgIGlmICghZ3JvdXApIHtcbiAgICAgICAgcmV0dXJuIHJlY3Vyc2lvbiA/IFtdIDogbnVsbDtcbiAgICB9XG4gICAgaWYgKHJlY3Vyc2lvbikge1xuICAgICAgICBjb25zdCBncm91cHMgPSBbZ3JvdXBdO1xuICAgICAgICBjb25zdCBncmFuZEdyb3VwcyA9IGdldEdyb3VwQnlFbGVtZW50KGJvYXJkLCBncm91cCwgcmVjdXJzaW9uLCBvcmlnaW5FbGVtZW50cykgYXMgUGxhaXRHcm91cFtdO1xuICAgICAgICBpZiAoZ3JhbmRHcm91cHMubGVuZ3RoKSB7XG4gICAgICAgICAgICBncm91cHMucHVzaCguLi5ncmFuZEdyb3Vwcyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGdyb3VwcyBhcyBQbGFpdEdyb3VwW107XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGdyb3VwIGFzIFBsYWl0R3JvdXA7XG4gICAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGdldEhpZ2hlc3RHcm91cCA9IChib2FyZDogUGxhaXRCb2FyZCwgZWxlbWVudDogUGxhaXRFbGVtZW50KSA9PiB7XG4gICAgY29uc3QgaGl0RWxlbWVudEdyb3VwcyA9IGdldEdyb3VwQnlFbGVtZW50KGJvYXJkLCBlbGVtZW50LCB0cnVlKSBhcyBQbGFpdEdyb3VwW107XG4gICAgaWYgKGhpdEVsZW1lbnRHcm91cHMubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBoaXRFbGVtZW50R3JvdXBzW2hpdEVsZW1lbnRHcm91cHMubGVuZ3RoIC0gMV07XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEVsZW1lbnRzSW5Hcm91cEJ5RWxlbWVudCA9IChib2FyZDogUGxhaXRCb2FyZCwgZWxlbWVudDogUGxhaXRFbGVtZW50KSA9PiB7XG4gICAgY29uc3QgaGlnaGVzdEdyb3VwID0gZ2V0SGlnaGVzdEdyb3VwKGJvYXJkLCBlbGVtZW50KTtcbiAgICBpZiAoaGlnaGVzdEdyb3VwKSB7XG4gICAgICAgIHJldHVybiBnZXRBbGxFbGVtZW50c0luR3JvdXAoYm9hcmQsIGhpZ2hlc3RHcm91cCwgdHJ1ZSkgYXMgUGxhaXRHcm91cFtdO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBbZWxlbWVudF07XG4gICAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGlzU2VsZWN0ZWRFbGVtZW50T3JHcm91cCA9IChib2FyZDogUGxhaXRCb2FyZCwgZWxlbWVudDogUGxhaXRFbGVtZW50LCBlbGVtZW50cz86IFBsYWl0RWxlbWVudFtdKSA9PiB7XG4gICAgY29uc3Qgc2VsZWN0ZWRFbGVtZW50cyA9IGVsZW1lbnRzPy5sZW5ndGggPyBlbGVtZW50cyA6IGdldFNlbGVjdGVkRWxlbWVudHMoYm9hcmQpO1xuICAgIGlmIChQbGFpdEdyb3VwRWxlbWVudC5pc0dyb3VwKGVsZW1lbnQpKSB7XG4gICAgICAgIHJldHVybiBpc1NlbGVjdGVkQWxsRWxlbWVudHNJbkdyb3VwKGJvYXJkLCBlbGVtZW50LCBlbGVtZW50cyk7XG4gICAgfVxuICAgIHJldHVybiBzZWxlY3RlZEVsZW1lbnRzLm1hcChpdGVtID0+IGl0ZW0uaWQpLmluY2x1ZGVzKGVsZW1lbnQuaWQpO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzU2VsZWN0ZWRBbGxFbGVtZW50c0luR3JvdXAgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIGdyb3VwOiBQbGFpdEdyb3VwLCBlbGVtZW50cz86IFBsYWl0RWxlbWVudFtdKSA9PiB7XG4gICAgY29uc3Qgc2VsZWN0ZWRFbGVtZW50cyA9IGVsZW1lbnRzPy5sZW5ndGggPyBlbGVtZW50cyA6IGdldFNlbGVjdGVkRWxlbWVudHMoYm9hcmQpO1xuICAgIGNvbnN0IGVsZW1lbnRzSW5Hcm91cCA9IGdldEVsZW1lbnRzSW5Hcm91cChib2FyZCwgZ3JvdXAsIHRydWUpO1xuICAgIHJldHVybiBlbGVtZW50c0luR3JvdXAuZXZlcnkoaXRlbSA9PiBzZWxlY3RlZEVsZW1lbnRzLm1hcChlbGVtZW50ID0+IGVsZW1lbnQuaWQpLmluY2x1ZGVzKGl0ZW0uaWQpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBmaWx0ZXJTZWxlY3RlZEdyb3VwcyA9IChib2FyZDogUGxhaXRCb2FyZCwgZ3JvdXBzOiBQbGFpdEdyb3VwW10sIGVsZW1lbnRzPzogUGxhaXRFbGVtZW50W10pOiBQbGFpdEdyb3VwW10gPT4ge1xuICAgIGNvbnN0IHNlbGVjdGVkR3JvdXBzOiBQbGFpdEdyb3VwW10gPSBbXTtcbiAgICBncm91cHMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgaWYgKGlzU2VsZWN0ZWRFbGVtZW50T3JHcm91cChib2FyZCwgaXRlbSwgZWxlbWVudHMpKSB7XG4gICAgICAgICAgICBzZWxlY3RlZEdyb3Vwcy5wdXNoKGl0ZW0pO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHNlbGVjdGVkR3JvdXBzO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFNlbGVjdGVkR3JvdXBzID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBlbGVtZW50cz86IFBsYWl0RWxlbWVudFtdLCBvcmlnaW5FbGVtZW50cz86IFBsYWl0RWxlbWVudFtdKTogUGxhaXRHcm91cFtdID0+IHtcbiAgICBjb25zdCBoaWdoZXN0U2VsZWN0ZWRHcm91cHMgPSBnZXRIaWdoZXN0U2VsZWN0ZWRHcm91cHMoYm9hcmQsIGVsZW1lbnRzLCBvcmlnaW5FbGVtZW50cyk7XG4gICAgY29uc3QgZ3JvdXBzOiBQbGFpdEdyb3VwW10gPSBbXTtcbiAgICBoaWdoZXN0U2VsZWN0ZWRHcm91cHMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgZ3JvdXBzLnB1c2goaXRlbSk7XG4gICAgICAgIGNvbnN0IGVsZW1lbnRzSW5Hcm91cCA9IGdldEVsZW1lbnRzSW5Hcm91cChib2FyZCwgaXRlbSwgdHJ1ZSwgdHJ1ZSk7XG4gICAgICAgIGdyb3Vwcy5wdXNoKC4uLihlbGVtZW50c0luR3JvdXAuZmlsdGVyKGl0ZW0gPT4gUGxhaXRHcm91cEVsZW1lbnQuaXNHcm91cChpdGVtKSkgYXMgUGxhaXRHcm91cFtdKSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGdyb3Vwcztcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRIaWdoZXN0U2VsZWN0ZWRHcm91cCA9IChcbiAgICBib2FyZDogUGxhaXRCb2FyZCxcbiAgICBlbGVtZW50OiBQbGFpdEVsZW1lbnQsXG4gICAgZWxlbWVudHM/OiBQbGFpdEVsZW1lbnRbXSxcbiAgICBvcmlnaW5FbGVtZW50cz86IFBsYWl0RWxlbWVudFtdXG4pOiBQbGFpdEdyb3VwIHwgbnVsbCA9PiB7XG4gICAgY29uc3QgaGl0RWxlbWVudEdyb3VwcyA9IGdldEdyb3VwQnlFbGVtZW50KGJvYXJkLCBlbGVtZW50LCB0cnVlLCBvcmlnaW5FbGVtZW50cykgYXMgUGxhaXRHcm91cFtdO1xuICAgIGNvbnN0IHNlbGVjdGVkR3JvdXBzID0gZmlsdGVyU2VsZWN0ZWRHcm91cHMoYm9hcmQsIGhpdEVsZW1lbnRHcm91cHMsIGVsZW1lbnRzKTtcbiAgICBpZiAoc2VsZWN0ZWRHcm91cHMubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBzZWxlY3RlZEdyb3Vwc1tzZWxlY3RlZEdyb3Vwcy5sZW5ndGggLSAxXTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0SGlnaGVzdFNlbGVjdGVkR3JvdXBzID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBlbGVtZW50cz86IFBsYWl0RWxlbWVudFtdLCBvcmlnaW5FbGVtZW50cz86IFBsYWl0RWxlbWVudFtdKTogUGxhaXRHcm91cFtdID0+IHtcbiAgICBsZXQgcmVzdWx0OiBQbGFpdEdyb3VwW10gPSBbXTtcbiAgICBjb25zdCBzZWxlY3RlZEVsZW1lbnRzID0gZWxlbWVudHM/Lmxlbmd0aCA/IGVsZW1lbnRzIDogZ2V0U2VsZWN0ZWRFbGVtZW50cyhib2FyZCk7XG4gICAgc2VsZWN0ZWRFbGVtZW50cy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICBpZiAoaXRlbS5ncm91cElkKSB7XG4gICAgICAgICAgICBjb25zdCBncm91cCA9IGdldEhpZ2hlc3RTZWxlY3RlZEdyb3VwKGJvYXJkLCBpdGVtLCBlbGVtZW50cywgb3JpZ2luRWxlbWVudHMpO1xuICAgICAgICAgICAgaWYgKGdyb3VwICYmICFyZXN1bHQuaW5jbHVkZXMoZ3JvdXApKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goZ3JvdXApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRTZWxlY3RlZElzb2xhdGVkRWxlbWVudHMgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIGVsZW1lbnRzPzogUGxhaXRFbGVtZW50W10pID0+IHtcbiAgICBsZXQgcmVzdWx0OiBQbGFpdEVsZW1lbnRbXSA9IFtdO1xuICAgIGNvbnN0IHNlbGVjdGVkRWxlbWVudHMgPSBlbGVtZW50cz8ubGVuZ3RoID8gZWxlbWVudHMgOiBnZXRTZWxlY3RlZEVsZW1lbnRzKGJvYXJkKTtcbiAgICBzZWxlY3RlZEVsZW1lbnRzXG4gICAgICAgIC5maWx0ZXIoaXRlbSA9PiAhUGxhaXRHcm91cEVsZW1lbnQuaXNHcm91cChpdGVtKSlcbiAgICAgICAgLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICBpZiAoIWl0ZW0uZ3JvdXBJZCkge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBncm91cCA9IGdldEhpZ2hlc3RTZWxlY3RlZEdyb3VwKGJvYXJkLCBpdGVtLCBlbGVtZW50cyk7XG4gICAgICAgICAgICAgICAgaWYgKCFncm91cCkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChpdGVtKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0U2VsZWN0ZWRJc29sYXRlZEVsZW1lbnRzQ2FuQWRkVG9Hcm91cCA9IChib2FyZDogUGxhaXRCb2FyZCwgZWxlbWVudHM/OiBQbGFpdEVsZW1lbnRbXSkgPT4ge1xuICAgIGNvbnN0IHNlbGVjdGVkSXNvbGF0ZWRFbGVtZW50cyA9IGdldFNlbGVjdGVkSXNvbGF0ZWRFbGVtZW50cyhib2FyZCwgZWxlbWVudHMpO1xuICAgIHJldHVybiBzZWxlY3RlZElzb2xhdGVkRWxlbWVudHMuZmlsdGVyKGl0ZW0gPT4gYm9hcmQuY2FuQWRkVG9Hcm91cChpdGVtKSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0SGlnaGVzdFNlbGVjdGVkRWxlbWVudHMgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIGVsZW1lbnRzPzogUGxhaXRFbGVtZW50W10pID0+IHtcbiAgICByZXR1cm4gWy4uLmdldEhpZ2hlc3RTZWxlY3RlZEdyb3Vwcyhib2FyZCwgZWxlbWVudHMpLCAuLi5nZXRTZWxlY3RlZElzb2xhdGVkRWxlbWVudHMoYm9hcmQsIGVsZW1lbnRzKV07XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlR3JvdXBSZWN0YW5nbGVHID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBlbGVtZW50czogUGxhaXRFbGVtZW50W10pOiBTVkdHRWxlbWVudCB8IG51bGwgPT4ge1xuICAgIGNvbnN0IHNlbGVjdGVkRWxlbWVudElkcyA9IGdldFNlbGVjdGVkRWxlbWVudHMoYm9hcmQpLm1hcChpdGVtID0+IGl0ZW0uaWQpO1xuICAgIGxldCBncm91cFJlY3RhbmdsZUc6IFNWR0dFbGVtZW50IHwgbnVsbCA9IG51bGw7XG4gICAgY29uc3QgaXNNb3ZpbmcgPSBpc1NlbGVjdGlvbk1vdmluZyhib2FyZCk7XG5cbiAgICBlbGVtZW50cy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICBjb25zdCBpc1JlbmRlciA9ICghc2VsZWN0ZWRFbGVtZW50SWRzLmluY2x1ZGVzKGl0ZW0uaWQpICYmICFpc01vdmluZykgfHwgaXNNb3Zpbmc7XG4gICAgICAgIGlmIChpdGVtLmdyb3VwSWQgJiYgaXNSZW5kZXIpIHtcbiAgICAgICAgICAgIGlmICghZ3JvdXBSZWN0YW5nbGVHKSB7XG4gICAgICAgICAgICAgICAgZ3JvdXBSZWN0YW5nbGVHID0gY3JlYXRlRygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZWxlbWVudHMgPSBnZXRFbGVtZW50c0luR3JvdXBCeUVsZW1lbnQoYm9hcmQsIGl0ZW0pO1xuICAgICAgICAgICAgY29uc3QgcmVjdGFuZ2xlID0gZ2V0UmVjdGFuZ2xlQnlFbGVtZW50cyhib2FyZCwgZWxlbWVudHMsIGZhbHNlKTtcbiAgICAgICAgICAgIGNvbnN0IHJlY3RhbmdsZUcgPSBkcmF3UmVjdGFuZ2xlKGJvYXJkLCByZWN0YW5nbGUsIHtcbiAgICAgICAgICAgICAgICBzdHJva2U6IFNFTEVDVElPTl9CT1JERVJfQ09MT1IsXG4gICAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IEFDVElWRV9TVFJPS0VfV0lEVEgsXG4gICAgICAgICAgICAgICAgc3Ryb2tlTGluZURhc2g6IFs1XVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCBhbmdsZSA9IGdldFNlbGVjdGlvbkFuZ2xlKGVsZW1lbnRzKTtcbiAgICAgICAgICAgIGlmIChhbmdsZSkge1xuICAgICAgICAgICAgICAgIHNldEFuZ2xlRm9yRyhyZWN0YW5nbGVHLCBSZWN0YW5nbGVDbGllbnQuZ2V0Q2VudGVyUG9pbnQocmVjdGFuZ2xlKSwgYW5nbGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZ3JvdXBSZWN0YW5nbGVHLmFwcGVuZChyZWN0YW5nbGVHKTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBncm91cFJlY3RhbmdsZUc7XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlR3JvdXAgPSAoZ3JvdXBJZD86IHN0cmluZyk6IFBsYWl0R3JvdXAgPT4ge1xuICAgIHJldHVybiBncm91cElkXG4gICAgICAgID8ge1xuICAgICAgICAgICAgICBpZDogaWRDcmVhdG9yKCksXG4gICAgICAgICAgICAgIHR5cGU6ICdncm91cCcsXG4gICAgICAgICAgICAgIGdyb3VwSWRcbiAgICAgICAgICB9XG4gICAgICAgIDoge1xuICAgICAgICAgICAgICBpZDogaWRDcmVhdG9yKCksXG4gICAgICAgICAgICAgIHR5cGU6ICdncm91cCdcbiAgICAgICAgICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IG5vbkdyb3VwSW5IaWdoZXN0U2VsZWN0ZWRFbGVtZW50cyA9IChlbGVtZW50czogUGxhaXRFbGVtZW50W10pID0+IHtcbiAgICByZXR1cm4gZWxlbWVudHMuZXZlcnkoaXRlbSA9PiAhaXRlbS5ncm91cElkKTtcbn07XG5cbmV4cG9ydCBjb25zdCBoYXNTZWxlY3RlZEVsZW1lbnRzSW5TYW1lR3JvdXAgPSAoZWxlbWVudHM6IFBsYWl0RWxlbWVudFtdKSA9PiB7XG4gICAgcmV0dXJuIGVsZW1lbnRzLmV2ZXJ5KGl0ZW0gPT4gaXRlbS5ncm91cElkICYmIGl0ZW0uZ3JvdXBJZCA9PT0gZWxlbWVudHNbMF0uZ3JvdXBJZCk7XG59O1xuXG5leHBvcnQgY29uc3QgY2FuQWRkR3JvdXAgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIGVsZW1lbnRzPzogUGxhaXRFbGVtZW50W10pID0+IHtcbiAgICBjb25zdCBoaWdoZXN0U2VsZWN0ZWRFbGVtZW50cyA9IGdldEhpZ2hlc3RTZWxlY3RlZEVsZW1lbnRzKGJvYXJkLCBlbGVtZW50cyk7XG4gICAgY29uc3Qgcm9vdEVsZW1lbnRzID0gaGlnaGVzdFNlbGVjdGVkRWxlbWVudHMuZmlsdGVyKGl0ZW0gPT4gYm9hcmQuY2FuQWRkVG9Hcm91cChpdGVtKSk7XG4gICAgaWYgKHJvb3RFbGVtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgIHJldHVybiBub25Hcm91cEluSGlnaGVzdFNlbGVjdGVkRWxlbWVudHMocm9vdEVsZW1lbnRzKSB8fCBoYXNTZWxlY3RlZEVsZW1lbnRzSW5TYW1lR3JvdXAocm9vdEVsZW1lbnRzKTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuZXhwb3J0IGNvbnN0IGNhblJlbW92ZUdyb3VwID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBlbGVtZW50cz86IFBsYWl0RWxlbWVudFtdLCBvcmlnaW5FbGVtZW50cz86IFBsYWl0RWxlbWVudFtdKSA9PiB7XG4gICAgY29uc3Qgc2VsZWN0ZWRHcm91cHMgPSBnZXRIaWdoZXN0U2VsZWN0ZWRHcm91cHMoYm9hcmQsIGVsZW1lbnRzLCBvcmlnaW5FbGVtZW50cyk7XG4gICAgY29uc3Qgc2VsZWN0ZWRFbGVtZW50cyA9IGVsZW1lbnRzPy5sZW5ndGggPyBlbGVtZW50cyA6IGdldFNlbGVjdGVkRWxlbWVudHMoYm9hcmQpO1xuICAgIHJldHVybiBzZWxlY3RlZEVsZW1lbnRzLmxlbmd0aCA+IDAgJiYgc2VsZWN0ZWRHcm91cHMubGVuZ3RoID4gMDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRFZGl0aW5nR3JvdXAgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIGVsZW1lbnQ6IFBsYWl0RWxlbWVudCkgPT4ge1xuICAgIGNvbnN0IGdyb3VwcyA9IGdldEdyb3VwQnlFbGVtZW50KGJvYXJkLCBlbGVtZW50LCB0cnVlKSBhcyBQbGFpdEdyb3VwW107XG4gICAgbGV0IGVkaXRpbmdHcm91cCA9IG51bGw7XG4gICAgaWYgKGdyb3Vwcz8ubGVuZ3RoKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZ3JvdXBzPy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKCFpc1NlbGVjdGVkQWxsRWxlbWVudHNJbkdyb3VwKGJvYXJkLCBncm91cHNbaV0pKSB7XG4gICAgICAgICAgICAgICAgZWRpdGluZ0dyb3VwID0gZ3JvdXBzW2ldO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBlZGl0aW5nR3JvdXA7XG59O1xuXG5leHBvcnQgY29uc3QgbW92ZUVsZW1lbnRzVG9OZXdQYXRoQWZ0ZXJBZGRHcm91cCA9IChib2FyZDogUGxhaXRCb2FyZCwgc2VsZWN0ZWRFbGVtZW50czogUGxhaXRFbGVtZW50W10sIG5ld1BhdGg6IFBhdGgpID0+IHtcbiAgICBjb25zdCBtb3ZlRWxlbWVudHMgPSBbLi4uc2VsZWN0ZWRFbGVtZW50c107XG4gICAgc29ydEVsZW1lbnRzKGJvYXJkLCBtb3ZlRWxlbWVudHMpO1xuICAgIG1vdmVFbGVtZW50cy5wb3AoKTtcbiAgICBtb3ZlRWxlbWVudHNUb05ld1BhdGgoXG4gICAgICAgIGJvYXJkLFxuICAgICAgICBtb3ZlRWxlbWVudHMubWFwKGVsZW1lbnQgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBlbGVtZW50LFxuICAgICAgICAgICAgICAgIG5ld1BhdGhcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pXG4gICAgKTtcbn07XG4iXX0=
@@ -87,6 +87,41 @@ export function getNearestPointBetweenPointAndSegments(point, points, isClose =
87
87
  }
88
88
  return result;
89
89
  }
90
+ export function getNearestPointBetweenPointAndEllipse(point, center, rx, ry, rotation = 0) {
91
+ const rectangleClient = {
92
+ x: center[0] - rx,
93
+ y: center[1] - ry,
94
+ height: ry * 2,
95
+ width: rx * 2
96
+ };
97
+ // https://stackoverflow.com/a/46007540/232122
98
+ const px = Math.abs(point[0] - rectangleClient.x - rectangleClient.width / 2);
99
+ const py = Math.abs(point[1] - rectangleClient.y - rectangleClient.height / 2);
100
+ let tx = 0.707;
101
+ let ty = 0.707;
102
+ const a = Math.abs(rectangleClient.width) / 2;
103
+ const b = Math.abs(rectangleClient.height) / 2;
104
+ [0, 1, 2, 3].forEach(x => {
105
+ const xx = a * tx;
106
+ const yy = b * ty;
107
+ const ex = ((a * a - b * b) * tx ** 3) / a;
108
+ const ey = ((b * b - a * a) * ty ** 3) / b;
109
+ const rx = xx - ex;
110
+ const ry = yy - ey;
111
+ const qx = px - ex;
112
+ const qy = py - ey;
113
+ const r = Math.hypot(ry, rx);
114
+ const q = Math.hypot(qy, qx);
115
+ tx = Math.min(1, Math.max(0, ((qx * r) / q + ex) / a));
116
+ ty = Math.min(1, Math.max(0, ((qy * r) / q + ey) / b));
117
+ const t = Math.hypot(ty, tx);
118
+ tx /= t;
119
+ ty /= t;
120
+ });
121
+ const signX = point[0] > center[0] ? 1 : -1;
122
+ const signY = point[1] > center[1] ? 1 : -1;
123
+ return [center[0] + a * tx * signX, center[1] + b * ty * signY];
124
+ }
90
125
  export function rotate(x1, y1, x2, y2, angle) {
91
126
  // 𝑎′𝑥=(𝑎𝑥−𝑐𝑥)cos𝜃−(𝑎𝑦−𝑐𝑦)sin𝜃+𝑐𝑥
92
127
  // 𝑎′𝑦=(𝑎𝑥−𝑐𝑥)sin𝜃+(𝑎𝑦−𝑐𝑦)cos𝜃+𝑐𝑦.
@@ -313,4 +348,4 @@ export function getCrossingPointsBetweenEllipseAndSegment(startPoint, endPoint,
313
348
  // Solve for points.
314
349
  .map(t => [startPoint[0] + (endPoint[0] - startPoint[0]) * t + cx, startPoint[1] + (endPoint[1] - startPoint[1]) * t + cy]));
315
350
  }
316
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0aC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvcmUvc3JjL3V0aWxzL21hdGgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRWpFLDZDQUE2QztBQUM3QyxNQUFNLFVBQVUsOEJBQThCLENBQUMsQ0FBUyxFQUFFLENBQVMsRUFBRSxFQUFVLEVBQUUsRUFBVSxFQUFFLEVBQVUsRUFBRSxFQUFVO0lBQy9HLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDakIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUNqQixNQUFNLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ2xCLE1BQU0sQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFFbEIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzFCLE1BQU0sU0FBUyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNoQyxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNmLElBQUksU0FBUyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ2xCLDJCQUEyQjtRQUMzQixLQUFLLEdBQUcsR0FBRyxHQUFHLFNBQVMsQ0FBQztJQUM1QixDQUFDO0lBRUQsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ1gsSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDWixFQUFFLEdBQUcsRUFBRSxDQUFDO1FBQ1IsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUNaLENBQUM7U0FBTSxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUNuQixFQUFFLEdBQUcsRUFBRSxDQUFDO1FBQ1IsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUNaLENBQUM7U0FBTSxDQUFDO1FBQ0osRUFBRSxHQUFHLEVBQUUsR0FBRyxLQUFLLEdBQUcsQ0FBQyxDQUFDO1FBQ3BCLEVBQUUsR0FBRyxFQUFFLEdBQUcsS0FBSyxHQUFHLENBQUMsQ0FBQztJQUN4QixDQUFDO0lBRUQsTUFBTSxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUNsQixNQUFNLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQ2xCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDOUIsQ0FBQztBQUVELE1BQU0sVUFBVSxxQ0FBcUMsQ0FBQyxLQUFZLEVBQUUsVUFBMEI7SUFDMUYsTUFBTSxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUNkLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQ1osRUFBRSxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFDckIsRUFBRSxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFDckIsRUFBRSxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFDckIsRUFBRSxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMxQixNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQ2pCLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDakIsTUFBTSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUNsQixNQUFNLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBRWxCLE1BQU0sR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMxQixNQUFNLFNBQVMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDaEMsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDZixJQUFJLFNBQVMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUNsQiwyQkFBMkI7UUFDM0IsS0FBSyxHQUFHLEdBQUcsR0FBRyxTQUFTLENBQUM7SUFDNUIsQ0FBQztJQUVELElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNYLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ1osRUFBRSxHQUFHLEVBQUUsQ0FBQztRQUNSLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDWixDQUFDO1NBQU0sSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDbkIsRUFBRSxHQUFHLEVBQUUsQ0FBQztRQUNSLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDWixDQUFDO1NBQU0sQ0FBQztRQUNKLEVBQUUsR0FBRyxFQUFFLEdBQUcsS0FBSyxHQUFHLENBQUMsQ0FBQztRQUNwQixFQUFFLEdBQUcsRUFBRSxHQUFHLEtBQUssR0FBRyxDQUFDLENBQUM7SUFDeEIsQ0FBQztJQUVELE9BQU8sQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFVLENBQUM7QUFDN0IsQ0FBQztBQUVELE1BQU0sVUFBVSwrQkFBK0IsQ0FBQyxNQUFlLEVBQUUsS0FBWTtJQUN6RSxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO0lBQzFCLElBQUksUUFBUSxHQUFHLFFBQVEsQ0FBQztJQUN4QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQy9CLE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNwQixNQUFNLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3pCLE1BQU0sZUFBZSxHQUFHLDhCQUE4QixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDckcsSUFBSSxlQUFlLEdBQUcsUUFBUSxFQUFFLENBQUM7WUFDN0IsUUFBUSxHQUFHLGVBQWUsQ0FBQztRQUMvQixDQUFDO0lBQ0wsQ0FBQztJQUNELE9BQU8sUUFBUSxDQUFDO0FBQ3BCLENBQUM7QUFFRCxNQUFNLFVBQVUsc0NBQXNDLENBQUMsS0FBWSxFQUFFLE1BQWUsRUFBRSxVQUFtQixJQUFJO0lBQ3pHLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7SUFDMUIsSUFBSSxRQUFRLEdBQUcsUUFBUSxDQUFDO0lBQ3hCLElBQUksTUFBTSxHQUFVLEtBQUssQ0FBQztJQUUxQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDM0IsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3BCLElBQUksQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPO1lBQUUsU0FBUztRQUN4QyxNQUFNLEVBQUUsR0FBRyxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3JELE1BQU0sZUFBZSxHQUFHLDhCQUE4QixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDckcsSUFBSSxlQUFlLEdBQUcsUUFBUSxFQUFFLENBQUM7WUFDN0IsUUFBUSxHQUFHLGVBQWUsQ0FBQztZQUMzQixNQUFNLEdBQUcscUNBQXFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDbkUsQ0FBQztJQUNMLENBQUM7SUFDRCxPQUFPLE1BQU0sQ0FBQztBQUNsQixDQUFDO0FBRUQsTUFBTSxVQUFVLE1BQU0sQ0FBQyxFQUFVLEVBQUUsRUFBVSxFQUFFLEVBQVUsRUFBRSxFQUFVLEVBQUUsS0FBYTtJQUNoRiwrQ0FBK0M7SUFDL0MsZ0RBQWdEO0lBQ2hELGtIQUFrSDtJQUNsSCxPQUFPLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7QUFDNUksQ0FBQztBQUVELE1BQU0sVUFBVSw0QkFBNEIsQ0FBQyxFQUFVLEVBQUUsRUFBVSxFQUFFLEVBQVUsRUFBRSxFQUFVO0lBQ3ZGLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDbkIsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUNuQixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQzlCLENBQUM7QUFFRCx1SEFBdUg7QUFDdkgsTUFBTSxVQUFVLGdDQUFnQyxDQUFDLENBQVMsRUFBRSxDQUFTLEVBQUUsSUFBcUI7SUFDeEYsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUM1RCxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQzdELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztBQUN4QyxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLENBQUMsQ0FBUSxFQUFFLENBQVEsRUFBRSxDQUFRLEVBQUUsQ0FBUSxFQUFXLEVBQUU7SUFDN0UsTUFBTSxZQUFZLEdBQUcsQ0FBQyxFQUFTLEVBQUUsRUFBUyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFN0UsTUFBTSxFQUFFLEdBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM3QyxNQUFNLEVBQUUsR0FBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzdDLE1BQU0sRUFBRSxHQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFD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LENBQUM7SUFDM0IsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEUsSUFBSSxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUMzQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQ2xDLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDeEMsRUFBRSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNmLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ25CLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBRXpDLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4RSxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxD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LElBQUksVUFBVSxDQUFDLENBQUMsQ0FBQyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDM0YsT0FBTyxFQUFFLENBQUM7SUFDZCxDQUFDO0lBRUQsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDdkIsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFFdkIsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNwQixVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3BCLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDbEIsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUVsQixzQ0FBc0M7SUFDdEMsSUFBSSxDQUFDLEdBQ0QsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFO1FBQ3pFLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQzlFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUN0SSxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBRWxHLHFGQUFxRjtJQUNyRixJQUFJLE9BQU8sR0FBYSxFQUFFLENBQUM7SUFFM0IsOEJBQThCO0lBQzlCLElBQUksWUFBWSxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7SUFFckMsSUFBSSxZQUFZLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDckIscUJBQXFCO1FBQ3JCLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzdCLENBQUM7U0FBTSxJQUFJLFlBQVksR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUMxQixzQkFBc0I7UUFDdEIsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDckQsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDekQsQ0FBQztJQUNELE9BQU8sQ0FDSCxPQUFPO1FBQ0gsaURBQWlEO1NBQ2hELE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsWUFBWSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDakQsb0JBQW9CO1NBQ25CLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUNsSSxDQUFDO0FBQ04sQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBvaW50IH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBSZWN0YW5nbGVDbGllbnQgfSBmcm9tICcuLi9pbnRlcmZhY2VzL3JlY3RhbmdsZS1jbGllbnQnO1xuXG4vLyBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvNjg1MzkyNi8yMzIxMjJcbmV4cG9ydCBmdW5jdGlvbiBkaXN0YW5jZUJldHdlZW5Qb2ludEFuZFNlZ21lbnQoeDogbnVtYmVyLCB5OiBudW1iZXIsIHgxOiBudW1iZXIsIHkxOiBudW1iZXIsIHgyOiBudW1iZXIsIHkyOiBudW1iZXIpIHtcbiAgICBjb25zdCBBID0geCAtIHgxO1xuICAgIGNvbnN0IEIgPSB5IC0geTE7XG4gICAgY29uc3QgQyA9IHgyIC0geDE7XG4gICAgY29uc3QgRCA9IHkyIC0geTE7XG5cbiAgICBjb25zdCBkb3QgPSBBICogQyArIEIgKiBEO1xuICAgIGNvbnN0IGxlblNxdWFyZSA9IEMgKiBDICsgRCAqIEQ7XG4gICAgbGV0IHBhcmFtID0gLTE7XG4gICAgaWYgKGxlblNxdWFyZSAhPT0gMCkge1xuICAgICAgICAvLyBpbiBjYXNlIG9mIDAgbGVuZ3RoIGxpbmVcbiAgICAgICAgcGFyYW0gPSBkb3QgLyBsZW5TcXVhcmU7XG4gICAgfVxuXG4gICAgbGV0IHh4LCB5eTtcbiAgICBpZiAocGFyYW0gPCAwKSB7XG4gICAgICAgIHh4ID0geDE7XG4gICAgICAgIHl5ID0geTE7XG4gICAgfSBlbHNlIGlmIChwYXJhbSA+IDEpIHtcbiAgICAgICAgeHggPSB4MjtcbiAgICAgICAgeXkgPSB5MjtcbiAgICB9IGVsc2Uge1xuICAgICAgICB4eCA9IHgxICsgcGFyYW0gKiBDO1xuICAgICAgICB5eSA9IHkxICsgcGFyYW0gKiBEO1xuICAgIH1cblxuICAgIGNvbnN0IGR4ID0geCAtIHh4O1xuICAgIGNvbnN0IGR5ID0geSAtIHl5O1xuICAgIHJldHVybiBNYXRoLmh5cG90KGR4LCBkeSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXROZWFyZXN0UG9pbnRCZXR3ZWVuUG9pbnRBbmRTZWdtZW50KHBvaW50OiBQb2ludCwgbGluZVBvaW50czogW1BvaW50LCBQb2ludF0pIHtcbiAgICBjb25zdCB4ID0gcG9pbnRbMF0sXG4gICAgICAgIHkgPSBwb2ludFsxXSxcbiAgICAgICAgeDEgPSBsaW5lUG9pbnRzWzBdWzBdLFxuICAgICAgICB5MSA9IGxpbmVQb2ludHNbMF1bMV0sXG4gICAgICAgIHgyID0gbGluZVBvaW50c1sxXVswXSxcbiAgICAgICAgeTIgPSBsaW5lUG9pbnRzWzFdWzFdO1xuICAgIGNvbnN0IEEgPSB4IC0geDE7XG4gICAgY29uc3QgQiA9IHkgLSB5MTtcbiAgICBjb25zdCBDID0geDIgLSB4MTtcbiAgICBjb25zdCBEID0geTIgLSB5MTtcblxuICAgIGNvbnN0IGRvdCA9IEEgKiBDICsgQiAqIEQ7XG4gICAgY29uc3QgbGVuU3F1YXJlID0gQyAqIEMgKyBEICogRDtcbiAgICBsZXQgcGFyYW0gPSAtMTtcbiAgICBpZiAobGVuU3F1YXJlICE9PSAwKSB7XG4gICAgICAgIC8vIGluIGNhc2Ugb2YgMCBsZW5ndGggbGluZVxuICAgICAgICBwYXJhbSA9IGRvdCAvIGxlblNxdWFyZTtcbiAgICB9XG5cbiAgICBsZXQgeHgsIHl5O1xuICAgIGlmIChwYXJhbSA8IDApIHtcbiAgICAgICAgeHggPSB4MTtcbiAgICAgICAgeXkgPSB5MTtcbiAgICB9IGVsc2UgaWYgKHBhcmFtID4gMSkge1xuICAgICAgICB4eCA9IHgyO1xuICAgICAgICB5eSA9IHkyO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHh4ID0geDEgKyBwYXJhbSAqIEM7XG4gICAgICAgIHl5ID0geTEgKyBwYXJhbSAqIEQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIFt4eCwgeXldIGFzIFBvaW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGlzdGFuY2VCZXR3ZWVuUG9pbnRBbmRTZWdtZW50cyhwb2ludHM6IFBvaW50W10sIHBvaW50OiBQb2ludCkge1xuICAgIGNvbnN0IGxlbiA9IHBvaW50cy5sZW5ndGg7XG4gICAgbGV0IGRpc3RhbmNlID0gSW5maW5pdHk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW4gLSAxOyBpKyspIHtcbiAgICAgICAgY29uc3QgcCA9IHBvaW50c1tpXTtcbiAgICAgICAgY29uc3QgcDIgPSBwb2ludHNbaSArIDFdO1xuICAgICAgICBjb25zdCBjdXJyZW50RGlzdGFuY2UgPSBkaXN0YW5jZUJldHdlZW5Qb2ludEFuZFNlZ21lbnQocG9pbnRbMF0sIHBvaW50WzFdLCBwWzBdLCBwWzFdLCBwMlswXSwgcDJbMV0pO1xuICAgICAgICBpZiAoY3VycmVudERpc3RhbmNlIDwgZGlzdGFuY2UpIHtcbiAgICAgICAgICAgIGRpc3RhbmNlID0gY3VycmVudERpc3RhbmNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBkaXN0YW5jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldE5lYXJlc3RQb2ludEJldHdlZW5Qb2ludEFuZFNlZ21lbnRzKHBvaW50OiBQb2ludCwgcG9pbnRzOiBQb2ludFtdLCBpc0Nsb3NlOiBCb29sZWFuID0gdHJ1ZSkge1xuICAgIGNvbnN0IGxlbiA9IHBvaW50cy5sZW5ndGg7XG4gICAgbGV0IGRpc3RhbmNlID0gSW5maW5pdHk7XG4gICAgbGV0IHJlc3VsdDogUG9pbnQgPSBwb2ludDtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgY29uc3QgcCA9IHBvaW50c1tpXTtcbiAgICAgICAgaWYgKGkgPT09IGxlbiAtIDEgJiYgIWlzQ2xvc2UpIGNvbnRpbnVlO1xuICAgICAgICBjb25zdCBwMiA9IGkgPT09IGxlbiAtIDEgPyBwb2ludHNbMF0gOiBwb2ludHNbaSArIDFdO1xuICAgICAgICBjb25zdCBjdXJyZW50RGlzdGFuY2UgPSBkaXN0YW5jZUJldHdlZW5Qb2ludEFuZFNlZ21lbnQocG9pbnRbMF0sIHBvaW50WzFdLCBwWzBdLCBwWzFdLCBwMlswXSwgcDJbMV0pO1xuICAgICAgICBpZiAoY3VycmVudERpc3RhbmNlIDwgZGlzdGFuY2UpIHtcbiAgICAgICAgICAgIGRpc3RhbmNlID0gY3VycmVudERpc3RhbmNlO1xuICAgICAgICAgICAgcmVzdWx0ID0gZ2V0TmVhcmVzdFBvaW50QmV0d2VlblBvaW50QW5kU2VnbWVudChwb2ludCwgW3AsIHAyXSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJvdGF0ZSh4MTogbnVtYmVyLCB5MTogbnVtYmVyLCB4MjogbnVtYmVyLCB5MjogbnVtYmVyLCBhbmdsZTogbnVtYmVyKSB7XG4gICAgLy8g8J2RjuKAsvCdkaU9KPCdkY7wnZGl4oiS8J2RkPCdkaUpY29z8J2cg+KIkijwnZGO8J2RpuKIkvCdkZDwnZGmKXNpbvCdnIMr8J2RkPCdkaVcbiAgICAvLyDwnZGO4oCy8J2Rpj0o8J2RjvCdkaXiiJLwnZGQ8J2RpSlzaW7wnZyDKyjwnZGO8J2RpuKIkvCdkZDwnZGmKWNvc/CdnIMr8J2RkPCdkaYuXG4gICAgLy8gaHR0cHM6Ly9tYXRoLnN0YWNrZXhjaGFuZ2UuY29tL3F1ZXN0aW9ucy8yMjA0NTIwL2hvdy1kby1pLXJvdGF0ZS1hLWxpbmUtc2VnbWVudC1pbi1hLXNwZWNpZmljLXBvaW50LW9uLXRoZS1saW5lXG4gICAgcmV0dXJuIFsoeDEgLSB4MikgKiBNYXRoLmNvcyhhbmdsZSkgLSAoeTEgLSB5MikgKiBNYXRoLnNpbihhbmdsZSkgKyB4MiwgKHgxIC0geDIpICogTWF0aC5zaW4oYW5nbGUpICsgKHkxIC0geTIpICogTWF0aC5jb3MoYW5nbGUpICsgeTJdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGlzdGFuY2VCZXR3ZWVuUG9pbnRBbmRQb2ludCh4MTogbnVtYmVyLCB5MTogbnVtYmVyLCB4MjogbnVtYmVyLCB5MjogbnVtYmVyKSB7XG4gICAgY29uc3QgZHggPSB4MSAtIHgyO1xuICAgIGNvbnN0IGR5ID0geTEgLSB5MjtcbiAgICByZXR1cm4gTWF0aC5oeXBvdChkeCwgZHkpO1xufVxuXG4vLyBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy81MjU0ODM4L2NhbGN1bGF0aW5nLWRpc3RhbmNlLWJldHdlZW4tYS1wb2ludC1hbmQtYS1yZWN0YW5ndWxhci1ib3gtbmVhcmVzdC1wb2ludFxuZXhwb3J0IGZ1bmN0aW9uIGRpc3RhbmNlQmV0d2VlblBvaW50QW5kUmVjdGFuZ2xlKHg6IG51bWJlciwgeTogbnVtYmVyLCByZWN0OiBSZWN0YW5nbGVDbGllbnQpIHtcbiAgICB2YXIgZHggPSBNYXRoLm1heChyZWN0LnggLSB4LCAwLCB4IC0gKHJlY3QueCArIHJlY3Qud2lkdGgpKTtcbiAgICB2YXIgZHkgPSBNYXRoLm1heChyZWN0LnkgLSB5LCAwLCB5IC0gKHJlY3QueSArIHJlY3QuaGVpZ2h0KSk7XG4gICAgcmV0dXJuIE1hdGguc3FydChkeCAqIGR4ICsgZHkgKiBkeSk7XG59XG5cbmV4cG9ydCBjb25zdCBpc0xpbmVIaXRMaW5lID0gKGE6IFBvaW50LCBiOiBQb2ludCwgYzogUG9pbnQsIGQ6IFBvaW50KTogYm9vbGVhbiA9PiB7XG4gICAgY29uc3QgY3Jvc3NQcm9kdWN0ID0gKHYxOiBQb2ludCwgdjI6IFBvaW50KSA9PiB2MVswXSAqIHYyWzFdIC0gdjFbMV0gKiB2MlswXTtcblxuICAgIGNvbnN0IGFiOiBQb2ludCA9IFtiWzBdIC0gYVswXSwgYlsxXSAtIGFbMV1dO1xuICAgIGNvbnN0IGFjOiBQb2ludCA9IFtjWzBdIC0gYVswXSwgY1sxXSAtIGFbMV1dO1xuICAgIGNvbnN0IGFkOiBQb2ludCA9IFtkWzBdIC0gYVswXSwgZFsxXSAtIGFbMV1dO1xuXG4gICAgY29uc3QgY2E6IFBvaW50ID0gW2FbMF0gLSBjWzBdLCBhWzFdIC0gY1sxXV07XG4gICAgY29uc3QgY2I6IFBvaW50ID0gW2JbMF0gLSBjWzBdLCBiWzFdIC0gY1sxXV07XG4gICAgY29uc3QgY2Q6IFBvaW50ID0gW2RbMF0gLSBjWzBdLCBkWzFdIC0gY1sxXV07XG5cbiAgICByZXR1cm4gY3Jvc3NQcm9kdWN0KGFiLCBhYykgKiBjcm9zc1Byb2R1Y3QoYWIsIGFkKSA8PSAwICYmIGNyb3NzUHJvZHVjdChjZCwgY2EpICogY3Jvc3NQcm9kdWN0KGNkLCBjYikgPD0gMDtcbn07XG5cbmV4cG9ydCBjb25zdCBpc1BvbHlsaW5lSGl0UmVjdGFuZ2xlID0gKHBvaW50czogUG9pbnRbXSwgcmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQsIGlzQ2xvc2U6IGJvb2xlYW4gPSB0cnVlKSA9PiB7XG4gICAgY29uc3QgcmVjdGFuZ2xlUG9pbnRzID0gUmVjdGFuZ2xlQ2xpZW50LmdldENvcm5lclBvaW50cyhyZWN0YW5nbGUpO1xuICAgIGNvbnN0IGxlbiA9IHBvaW50cy5sZW5ndGg7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBpZiAoaSA9PT0gbGVuIC0gMSAmJiAhaXNDbG9zZSkgY29udGludWU7XG4gICAgICAgIGNvbnN0IHAxID0gcG9pbnRzW2ldO1xuICAgICAgICBjb25zdCBwMiA9IHBvaW50c1soaSArIDEpICUgbGVuXTtcbiAgICAgICAgY29uc3QgaXNIaXQgPVxuICAgICAgICAgICAgaXNMaW5lSGl0TGluZShwMSwgcDIsIHJlY3RhbmdsZVBvaW50c1swXSwgcmVjdGFuZ2xlUG9pbnRzWzFdKSB8fFxuICAgICAgICAgICAgaXNMaW5lSGl0TGluZShwMSwgcDIsIHJlY3RhbmdsZVBvaW50c1sxXSwgcmVjdGFuZ2xlUG9pbnRzWzJdKSB8fFxuICAgICAgICAgICAgaXNMaW5lSGl0TGluZShwMSwgcDIsIHJlY3RhbmdsZVBvaW50c1syXSwgcmVjdGFuZ2xlUG9pbnRzWzNdKSB8fFxuICAgICAgICAgICAgaXNMaW5lSGl0TGluZShwMSwgcDIsIHJlY3RhbmdsZVBvaW50c1szXSwgcmVjdGFuZ2xlUG9pbnRzWzBdKTtcbiAgICAgICAgaWYgKGlzSGl0IHx8IGlzUG9pbnRJblBvbHlnb24ocDEsIHJlY3RhbmdsZVBvaW50cykgfHwgaXNQb2ludEluUG9seWdvbihwMiwgcmVjdGFuZ2xlUG9pbnRzKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG59O1xuXG4vL2h0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzIyNTIxOTgyL2NoZWNrLWlmLXBvaW50LWlzLWluc2lkZS1hLXBvbHlnb25cbmV4cG9ydCBjb25zdCBpc1BvaW50SW5Qb2x5Z29uID0gKHBvaW50OiBQb2ludCwgcG9pbnRzOiBQb2ludFtdKSA9PiB7XG4gICAgLy8gcmF5LWNhc3RpbmcgYWxnb3JpdGhtIGJhc2VkIG9uXG4gICAgLy8gaHR0cHM6Ly93cmYuZWNzZS5ycGkuZWR1L1Jlc2VhcmNoL1Nob3J0X05vdGVzL3BucG9seS5odG1sXG5cbiAgICBjb25zdCB4ID0gcG9pbnRbMF0sXG4gICAgICAgIHkgPSBwb2ludFsxXTtcblxuICAgIGxldCBpbnNpZGUgPSBmYWxzZTtcbiAgICBmb3IgKHZhciBpID0gMCwgaiA9IHBvaW50cy5sZW5ndGggLSAxOyBpIDwgcG9pbnRzLmxlbmd0aDsgaiA9IGkrKykge1xuICAgICAgICBsZXQgeGkgPSBwb2ludHNbaV1bMF0sXG4gICAgICAgICAgICB5aSA9IHBvaW50c1tpXVsxXTtcbiAgICAgICAgbGV0IHhqID0gcG9pbnRzW2pdWzBdLFxuICAgICAgICAgICAgeWogPSBwb2ludHNbal1bMV07XG5cbiAgICAgICAgbGV0IGludGVyc2VjdCA9IHlpID4geSAhPSB5aiA+IHkgJiYgeCA8ICgoeGogLSB4aSkgKiAoeSAtIHlpKSkgLyAoeWogLSB5aSkgKyB4aTtcbiAgICAgICAgaWYgKGludGVyc2VjdCkgaW5zaWRlID0gIWluc2lkZTtcbiAgICB9XG4gICAgcmV0dXJuIGluc2lkZTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc1BvaW50SW5FbGxpcHNlID0gKHBvaW50OiBQb2ludCwgY2VudGVyOiBQb2ludCwgcng6IG51bWJlciwgcnk6IG51bWJlciwgYW5nbGUgPSAwKSA9PiB7XG4gICAgY29uc3QgY29zQW5nbGUgPSBNYXRoLmNvcyhhbmdsZSk7XG4gICAgY29uc3Qgc2luQW5nbGUgPSBNYXRoLnNpbihhbmdsZSk7XG4gICAgY29uc3QgeDEgPSAocG9pbnRbMF0gLSBjZW50ZXJbMF0pICogY29zQW5nbGUgKyAocG9pbnRbMV0gLSBjZW50ZXJbMV0pICogc2luQW5nbGU7XG4gICAgY29uc3QgeTEgPSAocG9pbnRbMV0gLSBjZW50ZXJbMV0pICogY29zQW5nbGUgLSAocG9pbnRbMF0gLSBjZW50ZXJbMF0pICogc2luQW5nbGU7XG5cbiAgICByZXR1cm4gKHgxICogeDEpIC8gKHJ4ICogcngpICsgKHkxICogeTEpIC8gKHJ5ICogcnkpIDw9IDE7XG59O1xuXG5leHBvcnQgY29uc3QgaXNQb2ludEluUm91bmRSZWN0YW5nbGUgPSAocG9pbnQ6IFBvaW50LCByZWN0YW5nbGU6IFJlY3RhbmdsZUNsaWVudCwgcmFkaXVzOiBudW1iZXIsIGFuZ2xlID0gMCkgPT4ge1xuICAgIGNvbnN0IHsgeDogcmVjdFgsIHk6IHJlY3RZLCB3aWR0aCwgaGVpZ2h0IH0gPSByZWN0YW5nbGU7XG4gICAgY29uc3QgaXNJblJlY3RhbmdsZSA9IHBvaW50WzBdID49IHJlY3RYICYmIHBvaW50WzBdIDw9IHJlY3RYICsgd2lkdGggJiYgcG9pbnRbMV0gPj0gcmVjdFkgJiYgcG9pbnRbMV0gPD0gcmVjdFkgKyBoZWlnaHQ7XG4gICAgY29uc3QgaGFuZGxlTGVmdFRvcCA9XG4gICAgICAgIHBvaW50WzBdID49IHJlY3RYICYmXG4gICAgICAgIHBvaW50WzBdIDw9IHJlY3RYICsgcmFkaXVzICYmXG4gICAgICAgIHBvaW50WzFdID49IHJlY3RZICYmXG4gICAgICAgIHBvaW50WzFdIDw9IHJlY3RZICsgcmFkaXVzICYmXG4gICAgICAgIE1hdGguaHlwb3QocG9pbnRbMF0gLSAocmVjdFggKyByYWRpdXMpLCBwb2ludFsxXSAtIChyZWN0WSArIHJhZGl1cykpID4gcmFkaXVzO1xuICAgIGNvbnN0IGhhbmRsZUxlZnRCb3R0b20gPVxuICAgICAgICBwb2ludFswXSA+PSByZWN0WCAmJlxuICAgICAgICBwb2ludFswXSA8PSByZWN0WCArIHJhZGl1cyAmJlxuICAgICAgICBwb2ludFsxXSA+PSByZWN0WSArIGhlaWdodCAmJlxuICAgICAgICBwb2ludFsxXSA8PSByZWN0WSArIGhlaWdodCAtIHJhZGl1cyAmJlxuICAgICAgICBNYXRoLmh5cG90KHBvaW50WzBdIC0gKHJlY3RYICsgcmFkaXVzKSwgcG9pbnRbMV0gLSAocmVjdFkgKyBoZWlnaHQgLSByYWRpdXMpKSA+IHJhZGl1cztcbiAgICBjb25zdCBoYW5kbGVSaWdodFRvcCA9XG4gICAgICAgIHBvaW50WzBdID49IHJlY3RYICsgd2lkdGggLSByYWRpdXMgJiZcbiAgICAgICAgcG9pbnRbMF0gPD0gcmVjdFggKyB3aWR0aCAmJlxuICAgICAgICBwb2ludFsxXSA+PSByZWN0WSAmJlxuICAgICAgICBwb2ludFsxXSA8PSByZWN0WSArIHJhZGl1cyAmJlxuICAgICAgICBNYXRoLmh5cG90KHBvaW50WzBdIC0gKHJlY3RYICsgd2lkdGggLSByYWRpdXMpLCBwb2ludFsxXSAtIChyZWN0WSArIHJhZGl1cykpID4gcmFkaXVzO1xuICAgIGNvbnN0IGhhbmRsZVJpZ2h0Qm90dG9tID1cbiAgICAgICAgcG9pbnRbMF0gPj0gcmVjdFggKyB3aWR0aCAtIHJhZGl1cyAmJlxuICAgICAgICBwb2ludFswXSA8PSByZWN0WCArIHdpZHRoICYmXG4gICAgICAgIHBvaW50WzFdID49IHJlY3RZICsgaGVpZ2h0IC0gcmFkaXVzICYmXG4gICAgICAgIHBvaW50WzFdIDw9IHJlY3RZICsgaGVpZ2h0ICYmXG4gICAgICAgIE1hdGguaHlwb3QocG9pbnRbMF0gLSAocmVjdFggKyB3aWR0aCAtIHJhZGl1cyksIHBvaW50WzFdIC0gKHJlY3RZICsgaGVpZ2h0IC0gcmFkaXVzKSkgPiByYWRpdXM7XG4gICAgY29uc3QgaXNJbkNvcm5lciA9IGhhbmRsZUxlZnRUb3AgfHwgaGFuZGxlTGVmdEJvdHRvbSB8fCBoYW5kbGVSaWdodFRvcCB8fCBoYW5kbGVSaWdodEJvdHRvbTtcblxuICAgIHJldHVybiBpc0luUmVjdGFuZ2xlICYmICFpc0luQ29ybmVyO1xufTtcblxuLy8gaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vbmljaG9sYXN3bWluL2MyNjYxZWIxMWNhZDU2NzFkODE2XG5leHBvcnQgY29uc3QgY2F0bXVsbFJvbUZpdHRpbmcgPSBmdW5jdGlvbihwb2ludHM6IFBvaW50W10pIHtcbiAgICBjb25zdCBhbHBoYSA9IDAuNTtcbiAgICBsZXQgcDAsIHAxLCBwMiwgcDMsIGJwMSwgYnAyLCBkMSwgZDIsIGQzLCBBLCBCLCBOLCBNO1xuICAgIHZhciBkM3Bvd0EsIGQycG93QSwgZDNwb3cyQSwgZDJwb3cyQSwgZDFwb3cyQSwgZDFwb3dBO1xuICAgIGNvbnN0IHJlc3VsdDogUG9pbnRbXSA9IFtdO1xuICAgIHJlc3VsdC5wdXNoKFtNYXRoLnJvdW5kKHBvaW50c1swXVswXSksIE1hdGgucm91bmQocG9pbnRzWzBdWzFdKV0pO1xuICAgIHZhciBsZW5ndGggPSBwb2ludHMubGVuZ3RoO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICAgIHAwID0gaSA9PSAwID8gcG9pbnRzWzBdIDogcG9pbnRzW2kgLSAxXTtcbiAgICAgICAgcDEgPSBwb2ludHNbaV07XG4gICAgICAgIHAyID0gcG9pbnRzW2kgKyAxXTtcbiAgICAgICAgcDMgPSBpICsgMiA8IGxlbmd0aCA/IHBvaW50c1tpICsgMl0gOiBwMjtcblxuICAgICAgICBkMSA9IE1hdGguc3FydChNYXRoLnBvdyhwMFswXSAtIHAxWzBdLCAyKSArIE1hdGgucG93KHAwWzFdIC0gcDFbMV0sIDIpKTtcbiAgICAgICAgZDIgPSBNYXRoLnNxcnQoTWF0aC5wb3cocDFbMF0gLSBwMlswXSwgMikgKyBNYXRoLnBvdyhwMVsxXSAtIHAyWzFdLCAyKSk7XG4gICAgICAgIGQzID0gTWF0aC5zcXJ0KE1hdGgucG93KHAyWzBdIC0gcDNbMF0sIDIpICsgTWF0aC5wb3cocDJbMV0gLSBwM1sxXSwgMikpO1xuXG4gICAgICAgIC8vIENhdG11bGwtUm9tIHRvIEN1YmljIEJlemllciBjb252ZXJzaW9uIG1hdHJpeFxuICAgICAgICAvLyBBID0gMmQxXjJhICsgM2QxXmEgKiBkMl5hICsgZDNeMmFcbiAgICAgICAgLy8gQiA9IDJkM14yYSArIDNkM15hICogZDJeYSArIGQyXjJhXG4gICAgICAgIC8vIFsgICAwICAgICAgICAgICAgIDEgICAgICAgICAgICAwICAgICAgICAgIDAgICAgICAgICAgXVxuICAgICAgICAvLyBbICAgLWQyXjJhIC9OICAgICBBL04gICAgICAgICAgZDFeMmEgL04gICAwICAgICAgICAgIF1cbiAgICAgICAgLy8gWyAgIDAgICAgICAgICAgICAgZDNeMmEgL00gICAgIEIvTSAgICAgICAgLWQyXjJhIC9NICBdXG4gICAgICAgIC8vIFsgICAwICAgICAgICAgICAgIDAgICAgICAgICAgICAxICAgICAgICAgIDAgICAgICAgICAgXVxuXG4gICAgICAgIGQzcG93QSA9IE1hdGgucG93KGQzLCBhbHBoYSk7XG4gICAgICAgIGQzcG93MkEgPSBNYXRoLnBvdyhkMywgMiAqIGFscGhhKTtcbiAgICAgICAgZDJwb3dBID0gTWF0aC5wb3coZDIsIGFscGhhKTtcbiAgICAgICAgZDJwb3cyQSA9IE1hdGgucG93KGQyLCAyICogYWxwaGEpO1xuICAgICAgICBkMXBvd0EgPSBNYXRoLnBvdyhkMSwgYWxwaGEpO1xuICAgICAgICBkMXBvdzJBID0gTWF0aC5wb3coZDEsIDIgKiBhbHBoYSk7XG5cbiAgICAgICAgQSA9IDIgKiBkMXBvdzJBICsgMyAqIGQxcG93QSAqIGQycG93QSArIGQycG93MkE7XG4gICAgICAgIEIgPSAyICogZDNwb3cyQSArIDMgKiBkM3Bvd0EgKiBkMnBvd0EgKyBkMnBvdzJBO1xuICAgICAgICBOID0gMyAqIGQxcG93QSAqIChkMXBvd0EgKyBkMnBvd0EpO1xuICAgICAgICBpZiAoTiA+IDApIHtcbiAgICAgICAgICAgIE4gPSAxIC8gTjtcbiAgICAgICAgfVxuICAgICAgICBNID0gMyAqIGQzcG93QSAqIChkM3Bvd0EgKyBkMnBvd0EpO1xuICAgICAgICBpZiAoTSA+IDApIHtcbiAgICAgICAgICAgIE0gPSAxIC8gTTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJwMSA9IFsoLWQycG93MkEgKiBwMFswXSArIEEgKiBwMVswXSArIGQxcG93MkEgKiBwMlswXSkgKiBOLCAoLWQycG93MkEgKiBwMFsxXSArIEEgKiBwMVsxXSArIGQxcG93MkEgKiBwMlsxXSkgKiBOXTtcbiAgICAgICAgYnAyID0gWyhkM3BvdzJBICogcDFbMF0gKyBCICogcDJbMF0gLSBkMnBvdzJBICogcDNbMF0pICogTSwgKGQzcG93MkEgKiBwMVsxXSArIEIgKiBwMlsxXSAtIGQycG93MkEgKiBwM1sxXSkgKiBNXTtcblxuICAgICAgICBpZiAoYnAxWzBdID09IDAgJiYgYnAxWzFdID09IDApIHtcbiAgICAgICAgICAgIGJwMSA9IHAxO1xuICAgICAgICB9XG4gICAgICAgIGlmIChicDJbMF0gPT0gMCAmJiBicDJbMV0gPT0gMCkge1xuICAgICAgICAgICAgYnAyID0gcDI7XG4gICAgICAgIH1cblxuICAgICAgICByZXN1bHQucHVzaChicDEgYXMgUG9pbnQsIGJwMiBhcyBQb2ludCwgcDIgYXMgUG9pbnQpO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG59O1xuXG4vKipcbiAqIHRoZSByZXN1bHQgb2Ygc2xvcGUgaXMgYmFzZWQgb24gQ2FydGVzaWFuIGNvb3JkaW5hdGUgc3lzdGVtXG4gKiB4LCB5IGFyZSBiYXNlZCBvbiB0aGUgcG9zaXRpb24gaW4gdGhlIENhcnRlc2lhbiBjb29yZGluYXRlIHN5c3RlbVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RWxsaXBzZVRhbmdlbnRTbG9wZSh4OiBudW1iZXIsIHk6IG51bWJlciwgYTogbnVtYmVyLCBiOiBudW1iZXIpIHtcbiAgICBpZiAoTWF0aC5hYnMoeSkgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHggPiAwID8gLUluZmluaXR5IDogSW5maW5pdHk7XG4gICAgfVxuICAgIGNvbnN0IGsgPSAoLWIgKiBiICogeCkgLyAoYSAqIGEgKiB5KTtcbiAgICByZXR1cm4gaztcbn1cblxuLyoqXG4gKiB4LCB5IGFyZSBiYXNlZCBvbiB0aGUgcG9zaXRpb24gaW4gdGhlIENhcnRlc2lhbiBjb29yZGluYXRlIHN5c3RlbVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VmVjdG9yRnJvbVBvaW50QW5kU2xvcGUoeDogbnVtYmVyLCB5OiBudW1iZXIsIHNsb3BlOiBudW1iZXIpIHtcbiAgICBpZiAoc2xvcGUgPT09IEluZmluaXR5KSB7XG4gICAgICAgIHJldHVybiBbMCwgLTFdIGFzIFBvaW50O1xuICAgIH0gZWxzZSBpZiAoc2xvcGUgPT09IC1JbmZpbml0eSkge1xuICAgICAgICByZXR1cm4gWzAsIDFdIGFzIFBvaW50O1xuICAgIH1cbiAgICBsZXQgdmVjdG9yID0gWzEsIC1zbG9wZV0gYXMgUG9pbnQ7XG4gICAgaWYgKHkgPCAwKSB7XG4gICAgICAgIHZlY3RvciA9IFstdmVjdG9yWzBdLCAtdmVjdG9yWzFdXTtcbiAgICB9XG4gICAgcmV0dXJuIHZlY3RvciBhcyBQb2ludDtcbn1cblxuLyoqXG4gKiBUaGUgRE9NIGxpa2VzIHZhbHVlcyB0byBiZSBmaXhlZCB0byAzIGRlY2ltYWwgcGxhY2VzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0RvbVByZWNpc2lvbih2OiBudW1iZXIpIHtcbiAgICByZXR1cm4gK3YudG9GaXhlZCg0KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvRml4ZWQodjogbnVtYmVyKSB7XG4gICAgcmV0dXJuICt2LnRvRml4ZWQoMik7XG59XG5cbi8qKlxuICogV2hldGhlciB0d28gbnVtYmVycyBudW1iZXJzIGEgYW5kIGIgYXJlIGFwcHJveGltYXRlbHkgZXF1YWwuXG4gKlxuICogQHBhcmFtIGEgLSBUaGUgZmlyc3QgcG9pbnQuXG4gKiBAcGFyYW0gYiAtIFRoZSBzZWNvbmQgcG9pbnQuXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhcHByb3hpbWF0ZWx5KGE6IG51bWJlciwgYjogbnVtYmVyLCBwcmVjaXNpb24gPSAwLjAwMDAwMSkge1xuICAgIHJldHVybiBNYXRoLmFicyhhIC0gYikgPD0gcHJlY2lzaW9uO1xufVxuXG4vLyBodHRwczovL21lZGl1bS5jb20vQHN0ZXZlcnVpei9maW5kLXRoZS1wb2ludHMtd2hlcmUtYS1saW5lLXNlZ21lbnQtaW50ZXJjZXB0cy1hbi1hbmdsZWQtZWxsaXBzZS1pbi1qYXZhc2NyaXB0LXR5cGVzY3JpcHQtZTQ1MTUyNGJlZWNlXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3Jvc3NpbmdQb2ludHNCZXR3ZWVuRWxsaXBzZUFuZFNlZ21lbnQoXG4gICAgc3RhcnRQb2ludDogUG9pbnQsXG4gICAgZW5kUG9pbnQ6IFBvaW50LFxuICAgIGN4OiBudW1iZXIsXG4gICAgY3k6IG51bWJlcixcbiAgICByeDogbnVtYmVyLFxuICAgIHJ5OiBudW1iZXIsXG4gICAgc2VnbWVudF9vbmx5ID0gdHJ1ZVxuKSB7XG4gICAgLy8gSWYgdGhlIGVsbGlwc2Ugb3IgbGluZSBzZWdtZW50IGFyZSBlbXB0eSwgcmV0dXJuIG5vIHRWYWx1ZXMuXG4gICAgaWYgKHJ4ID09PSAwIHx8IHJ5ID09PSAwIHx8IChzdGFydFBvaW50WzBdID09PSBlbmRQb2ludFswXSAmJiBzdGFydFBvaW50WzFdID09PSBlbmRQb2ludFsxXSkpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIHJ4ID0gcnggPCAwID8gcnggOiAtcng7XG4gICAgcnkgPSByeSA8IDAgPyByeSA6IC1yeTtcblxuICAgIHN0YXJ0UG9pbnRbMF0gLT0gY3g7XG4gICAgc3RhcnRQb2ludFsxXSAtPSBjeTtcbiAgICBlbmRQb2ludFswXSAtPSBjeDtcbiAgICBlbmRQb2ludFsxXSAtPSBjeTtcblxuICAgIC8vIENhbGN1bGF0ZSB0aGUgcXVhZHJhdGljIHBhcmFtZXRlcnMuXG4gICAgdmFyIEEgPVxuICAgICAgICAoKGVuZFBvaW50WzBdIC0gc3RhcnRQb2ludFswXSkgKiAoZW5kUG9pbnRbMF0gLSBzdGFydFBvaW50WzBdKSkgLyByeCAvIHJ4ICtcbiAgICAgICAgKChlbmRQb2ludFsxXSAtIHN0YXJ0UG9pbnRbMV0pICogKGVuZFBvaW50WzFdIC0gc3RhcnRQb2ludFsxXSkpIC8gcnkgLyByeTtcbiAgICB2YXIgQiA9ICgyICogc3RhcnRQb2ludFswXSAqIChlbmRQb2ludFswXSAtIHN0YXJ0UG9pbnRbMF0pKSAvIHJ4IC8gcnggKyAoMiAqIHN0YXJ0UG9pbnRbMV0gKiAoZW5kUG9pbnRbMV0gLSBzdGFydFBvaW50WzFdKSkgLyByeSAvIHJ5O1xuICAgIHZhciBDID0gKHN0YXJ0UG9pbnRbMF0gKiBzdGFydFBvaW50WzBdKSAvIHJ4IC8gcnggKyAoc3RhcnRQb2ludFsxXSAqIHN0YXJ0UG9pbnRbMV0pIC8gcnkgLyByeSAtIDE7XG5cbiAgICAvLyBNYWtlIGEgbGlzdCBvZiB0IHZhbHVlcyAobm9ybWFsaXplZCBwb2ludHMgb24gdGhlIGxpbmUgd2hlcmUgaW50ZXJzZWN0aW9ucyBvY2N1cikuXG4gICAgdmFyIHRWYWx1ZXM6IG51bWJlcltdID0gW107XG5cbiAgICAvLyBDYWxjdWxhdGUgdGhlIGRpc2NyaW1pbmFudC5cbiAgICB2YXIgZGlzY3JpbWluYW50ID0gQiAqIEIgLSA0ICogQSAqIEM7XG5cbiAgICBpZiAoZGlzY3JpbWluYW50ID09PSAwKSB7XG4gICAgICAgIC8vIE9uZSByZWFsIHNvbHV0aW9uLlxuICAgICAgICB0VmFsdWVzLnB1c2goLUIgLyAyIC8gQSk7XG4gICAgfSBlbHNlIGlmIChkaXNjcmltaW5hbnQgPiAwKSB7XG4gICAgICAgIC8vIFR3byByZWFsIHNvbHV0aW9ucy5cbiAgICAgICAgdFZhbHVlcy5wdXNoKCgtQiArIE1hdGguc3FydChkaXNjcmltaW5hbnQpKSAvIDIgLyBBKTtcbiAgICAgICAgdFZhbHVlcy5wdXNoKCgtQiAtIE1hdGguc3FydChkaXNjcmltaW5hbnQpKSAvIDIgLyBBKTtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgICAgdFZhbHVlc1xuICAgICAgICAgICAgLy8gRmlsdGVyIHRvIG9ubHkgcG9pbnRzIHRoYXQgYXJlIG9uIHRoZSBzZWdtZW50LlxuICAgICAgICAgICAgLmZpbHRlcih0ID0+ICFzZWdtZW50X29ubHkgfHwgKHQgPj0gMCAmJiB0IDw9IDEpKVxuICAgICAgICAgICAgLy8gU29sdmUgZm9yIHBvaW50cy5cbiAgICAgICAgICAgIC5tYXAodCA9PiBbc3RhcnRQb2ludFswXSArIChlbmRQb2ludFswXSAtIHN0YXJ0UG9pbnRbMF0pICogdCArIGN4LCBzdGFydFBvaW50WzFdICsgKGVuZFBvaW50WzFdIC0gc3RhcnRQb2ludFsxXSkgKiB0ICsgY3ldKVxuICAgICk7XG59XG4iXX0=
351
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0aC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvcmUvc3JjL3V0aWxzL21hdGgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRWpFLDZDQUE2QztBQUM3QyxNQUFNLFVBQVUsOEJBQThCLENBQUMsQ0FBUyxFQUFFLENBQVMsRUFBRSxFQUFVLEVBQUUsRUFBVSxFQUFFLEVBQVUsRUFBRSxFQUFVO0lBQy9HLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDakIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUNqQixNQUFNLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ2xCLE1BQU0sQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFFbEIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzFCLE1BQU0sU0FBUyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNoQyxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNmLElBQUksU0FBUyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ2xCLDJCQUEyQjtRQUMzQixLQUFLLEdBQUcsR0FBRyxHQUFHLFNBQVMsQ0FBQztJQUM1QixDQUFDO0lBRUQsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ1gsSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDWixFQUFFLEdBQUcsRUFBRSxDQUFDO1FBQ1IsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUNaLENBQUM7U0FBTSxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUNuQixFQUFFLEdBQUcsRUFBRSxDQUFDO1FBQ1IsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUNaLENB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RUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFO1FBQ3JCLE1BQU0sRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDbEIsTUFBTSxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUVsQixNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMzQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUUzQyxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO1FBQ25CLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7UUFFbkIsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztRQUNuQixNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO1FBRW5CLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzdCLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRTdCLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3ZELEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFB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Q0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFN0UsTUFBTSxFQUFFLEdBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM3QyxNQUFNLEVBQUUsR0FBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzdDLE1BQU0sRUFBRSxHQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFN0MsTUFBTSxFQUFFLEdBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM3QyxNQUFNLEVBQUUsR0FBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzdDLE1BQU0sRUFBRSxHQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFN0MsT0FBTyxZQUFZLENBQUMsRUFB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Q0FBQyxFQUFFLENBQUM7UUFDckIscUJBQXFCO1FBQ3JCLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzdCLENBQUM7U0FBTSxJQUFJLFlBQVksR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUMxQixzQkFBc0I7UUFDdEIsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDckQsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDekQsQ0FBQztJQUNELE9BQU8sQ0FDSCxPQUFPO1FBQ0gsaURBQWlEO1NBQ2hELE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsWUFBWSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDakQsb0JBQW9CO1NBQ25CLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUNsSSxDQUFDO0FBQ04sQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBvaW50IH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBSZWN0YW5nbGVDbGllbnQgfSBmcm9tICcuLi9pbnRlcmZhY2VzL3JlY3RhbmdsZS1jbGllbnQnO1xuXG4vLyBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvNjg1MzkyNi8yMzIxMjJcbmV4cG9ydCBmdW5jdGlvbiBkaXN0YW5jZUJldHdlZW5Qb2ludEFuZFNlZ21lbnQoeDogbnVtYmVyLCB5OiBudW1iZXIsIHgxOiBudW1iZXIsIHkxOiBudW1iZXIsIHgyOiBudW1iZXIsIHkyOiBudW1iZXIpIHtcbiAgICBjb25zdCBBID0geCAtIHgxO1xuICAgIGNvbnN0IEIgPSB5IC0geTE7XG4gICAgY29uc3QgQyA9IHgyIC0geDE7XG4gICAgY29uc3QgRCA9IHkyIC0geTE7XG5cbiAgICBjb25zdCBkb3QgPSBBICogQyArIEIgKiBEO1xuICAgIGNvbnN0IGxlblNxdWFyZSA9IEMgKiBDICsgRCAqIEQ7XG4gICAgbGV0IHBhcmFtID0gLTE7XG4gICAgaWYgKGxlblNxdWFyZSAhPT0gMCkge1xuICAgICAgICAvLyBpbiBjYXNlIG9mIDAgbGVuZ3RoIGxpbmVcbiAgICAgICAgcGFyYW0gPSBkb3QgLyBsZW5TcXVhcmU7XG4gICAgfVxuXG4gICAgbGV0IHh4LCB5eTtcbiAgICBpZiAocGFyYW0gPCAwKSB7XG4gICAgICAgIHh4ID0geDE7XG4gICAgICAgIHl5ID0geTE7XG4gICAgfSBlbHNlIGlmIChwYXJhbSA+IDEpIHtcbiAgICAgICAgeHggPSB4MjtcbiAgICAgICAgeXkgPSB5MjtcbiAgICB9IGVsc2Uge1xuICAgICAgICB4eCA9IHgxICsgcGFyYW0gKiBDO1xuICAgICAgICB5eSA9IHkxICsgcGFyYW0gKiBEO1xuICAgIH1cblxuICAgIGNvbnN0IGR4ID0geCAtIHh4O1xuICAgIGNvbnN0IGR5ID0geSAtIHl5O1xuICAgIHJldHVybiBNYXRoLmh5cG90KGR4LCBkeSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXROZWFyZXN0UG9pbnRCZXR3ZWVuUG9pbnRBbmRTZWdtZW50KHBvaW50OiBQb2ludCwgbGluZVBvaW50czogW1BvaW50LCBQb2ludF0pIHtcbiAgICBjb25zdCB4ID0gcG9pbnRbMF0sXG4gICAgICAgIHkgPSBwb2ludFsxXSxcbiAgICAgICAgeDEgPSBsaW5lUG9pbnRzWzBdWzBdLFxuICAgICAgICB5MSA9IGxpbmVQb2ludHNbMF1bMV0sXG4gICAgICAgIHgyID0gbGluZVBvaW50c1sxXVswXSxcbiAgICAgICAgeTIgPSBsaW5lUG9pbnRzWzFdWzFdO1xuICAgIGNvbnN0IEEgPSB4IC0geDE7XG4gICAgY29uc3QgQiA9IHkgLSB5MTtcbiAgICBjb25zdCBDID0geDIgLSB4MTtcbiAgICBjb25zdCBEID0geTIgLSB5MTtcblxuICAgIGNvbnN0IGRvdCA9IEEgKiBDICsgQiAqIEQ7XG4gICAgY29uc3QgbGVuU3F1YXJlID0gQyAqIEMgKyBEICogRDtcbiAgICBsZXQgcGFyYW0gPSAtMTtcbiAgICBpZiAobGVuU3F1YXJlICE9PSAwKSB7XG4gICAgICAgIC8vIGluIGNhc2Ugb2YgMCBsZW5ndGggbGluZVxuICAgICAgICBwYXJhbSA9IGRvdCAvIGxlblNxdWFyZTtcbiAgICB9XG5cbiAgICBsZXQgeHgsIHl5O1xuICAgIGlmIChwYXJhbSA8IDApIHtcbiAgICAgICAgeHggPSB4MTtcbiAgICAgICAgeXkgPSB5MTtcbiAgICB9IGVsc2UgaWYgKHBhcmFtID4gMSkge1xuICAgICAgICB4eCA9IHgyO1xuICAgICAgICB5eSA9IHkyO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHh4ID0geDEgKyBwYXJhbSAqIEM7XG4gICAgICAgIHl5ID0geTEgKyBwYXJhbSAqIEQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIFt4eCwgeXldIGFzIFBvaW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGlzdGFuY2VCZXR3ZWVuUG9pbnRBbmRTZWdtZW50cyhwb2ludHM6IFBvaW50W10sIHBvaW50OiBQb2ludCkge1xuICAgIGNvbnN0IGxlbiA9IHBvaW50cy5sZW5ndGg7XG4gICAgbGV0IGRpc3RhbmNlID0gSW5maW5pdHk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW4gLSAxOyBpKyspIHtcbiAgICAgICAgY29uc3QgcCA9IHBvaW50c1tpXTtcbiAgICAgICAgY29uc3QgcDIgPSBwb2ludHNbaSArIDFdO1xuICAgICAgICBjb25zdCBjdXJyZW50RGlzdGFuY2UgPSBkaXN0YW5jZUJldHdlZW5Qb2ludEFuZFNlZ21lbnQocG9pbnRbMF0sIHBvaW50WzFdLCBwWzBdLCBwWzFdLCBwMlswXSwgcDJbMV0pO1xuICAgICAgICBpZiAoY3VycmVudERpc3RhbmNlIDwgZGlzdGFuY2UpIHtcbiAgICAgICAgICAgIGRpc3RhbmNlID0gY3VycmVudERpc3RhbmNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBkaXN0YW5jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldE5lYXJlc3RQb2ludEJldHdlZW5Qb2ludEFuZFNlZ21lbnRzKHBvaW50OiBQb2ludCwgcG9pbnRzOiBQb2ludFtdLCBpc0Nsb3NlOiBCb29sZWFuID0gdHJ1ZSkge1xuICAgIGNvbnN0IGxlbiA9IHBvaW50cy5sZW5ndGg7XG4gICAgbGV0IGRpc3RhbmNlID0gSW5maW5pdHk7XG4gICAgbGV0IHJlc3VsdDogUG9pbnQgPSBwb2ludDtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgY29uc3QgcCA9IHBvaW50c1tpXTtcbiAgICAgICAgaWYgKGkgPT09IGxlbiAtIDEgJiYgIWlzQ2xvc2UpIGNvbnRpbnVlO1xuICAgICAgICBjb25zdCBwMiA9IGkgPT09IGxlbiAtIDEgPyBwb2ludHNbMF0gOiBwb2ludHNbaSArIDFdO1xuICAgICAgICBjb25zdCBjdXJyZW50RGlzdGFuY2UgPSBkaXN0YW5jZUJldHdlZW5Qb2ludEFuZFNlZ21lbnQocG9pbnRbMF0sIHBvaW50WzFdLCBwWzBdLCBwWzFdLCBwMlswXSwgcDJbMV0pO1xuICAgICAgICBpZiAoY3VycmVudERpc3RhbmNlIDwgZGlzdGFuY2UpIHtcbiAgICAgICAgICAgIGRpc3RhbmNlID0gY3VycmVudERpc3RhbmNlO1xuICAgICAgICAgICAgcmVzdWx0ID0gZ2V0TmVhcmVzdFBvaW50QmV0d2VlblBvaW50QW5kU2VnbWVudChwb2ludCwgW3AsIHAyXSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldE5lYXJlc3RQb2ludEJldHdlZW5Qb2ludEFuZEVsbGlwc2UocG9pbnQ6IFBvaW50LCBjZW50ZXI6IFBvaW50LCByeDogbnVtYmVyLCByeTogbnVtYmVyLCByb3RhdGlvbjogbnVtYmVyID0gMCk6IFBvaW50IHtcbiAgICBjb25zdCByZWN0YW5nbGVDbGllbnQgPSB7XG4gICAgICAgIHg6IGNlbnRlclswXSAtIHJ4LFxuICAgICAgICB5OiBjZW50ZXJbMV0gLSByeSxcbiAgICAgICAgaGVpZ2h0OiByeSAqIDIsXG4gICAgICAgIHdpZHRoOiByeCAqIDJcbiAgICB9O1xuICAgIC8vIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS80NjAwNzU0MC8yMzIxMjJcbiAgICBjb25zdCBweCA9IE1hdGguYWJzKHBvaW50WzBdIC0gcmVjdGFuZ2xlQ2xpZW50LnggLSByZWN0YW5nbGVDbGllbnQud2lkdGggLyAyKTtcbiAgICBjb25zdCBweSA9IE1hdGguYWJzKHBvaW50WzFdIC0gcmVjdGFuZ2xlQ2xpZW50LnkgLSByZWN0YW5nbGVDbGllbnQuaGVpZ2h0IC8gMik7XG5cbiAgICBsZXQgdHggPSAwLjcwNztcbiAgICBsZXQgdHkgPSAwLjcwNztcblxuICAgIGNvbnN0IGEgPSBNYXRoLmFicyhyZWN0YW5nbGVDbGllbnQud2lkdGgpIC8gMjtcbiAgICBjb25zdCBiID0gTWF0aC5hYnMocmVjdGFuZ2xlQ2xpZW50LmhlaWdodCkgLyAyO1xuXG4gICAgWzAsIDEsIDIsIDNdLmZvckVhY2goeCA9PiB7XG4gICAgICAgIGNvbnN0IHh4ID0gYSAqIHR4O1xuICAgICAgICBjb25zdCB5eSA9IGIgKiB0eTtcblxuICAgICAgICBjb25zdCBleCA9ICgoYSAqIGEgLSBiICogYikgKiB0eCAqKiAzKSAvIGE7XG4gICAgICAgIGNvbnN0IGV5ID0gKChiICogYiAtIGEgKiBhKSAqIHR5ICoqIDMpIC8gYjtcblxuICAgICAgICBjb25zdCByeCA9IHh4IC0gZXg7XG4gICAgICAgIGNvbnN0IHJ5ID0geXkgLSBleTtcblxuICAgICAgICBjb25zdCBxeCA9IHB4IC0gZXg7XG4gICAgICAgIGNvbnN0IHF5ID0gcHkgLSBleTtcblxuICAgICAgICBjb25zdCByID0gTWF0aC5oeXBvdChyeSwgcngpO1xuICAgICAgICBjb25zdCBxID0gTWF0aC5oeXBvdChxeSwgcXgpO1xuXG4gICAgICAgIHR4ID0gTWF0aC5taW4oMSwgTWF0aC5tYXgoMCwgKChxeCAqIHIpIC8gcSArIGV4KSAvIGEpKTtcbiAgICAgICAgdHkgPSBNYXRoLm1pbigxLCBNYXRoLm1heCgwLCAoKHF5ICogcikgLyBxICsgZXkpIC8gYikpO1xuICAgICAgICBjb25zdCB0ID0gTWF0aC5oeXBvdCh0eSwgdHgpO1xuICAgICAgICB0eCAvPSB0O1xuICAgICAgICB0eSAvPSB0O1xuICAgIH0pO1xuICAgIGNvbnN0IHNpZ25YID0gcG9pbnRbMF0gPiBjZW50ZXJbMF0gPyAxIDogLTE7XG4gICAgY29uc3Qgc2lnblkgPSBwb2ludFsxXSA+IGNlbnRlclsxXSA/IDEgOiAtMTtcblxuICAgIHJldHVybiBbY2VudGVyWzBdICsgYSAqIHR4ICogc2lnblgsIGNlbnRlclsxXSArIGIgKiB0eSAqIHNpZ25ZXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJvdGF0ZSh4MTogbnVtYmVyLCB5MTogbnVtYmVyLCB4MjogbnVtYmVyLCB5MjogbnVtYmVyLCBhbmdsZTogbnVtYmVyKSB7XG4gICAgLy8g8J2RjuKAsvCdkaU9KPCdkY7wnZGl4oiS8J2RkPCdkaUpY29z8J2cg+KIkijwnZGO8J2RpuKIkvCdkZDwnZGmKXNpbvCdnIMr8J2RkPCdkaVcbiAgICAvLyDwnZGO4oCy8J2Rpj0o8J2RjvCdkaXiiJLwnZGQ8J2RpSlzaW7wnZyDKyjwnZGO8J2RpuKIkvCdkZDwnZGmKWNvc/CdnIMr8J2RkPCdkaYuXG4gICAgLy8gaHR0cHM6Ly9tYXRoLnN0YWNrZXhjaGFuZ2UuY29tL3F1ZXN0aW9ucy8yMjA0NTIwL2hvdy1kby1pLXJvdGF0ZS1hLWxpbmUtc2VnbWVudC1pbi1hLXNwZWNpZmljLXBvaW50LW9uLXRoZS1saW5lXG4gICAgcmV0dXJuIFsoeDEgLSB4MikgKiBNYXRoLmNvcyhhbmdsZSkgLSAoeTEgLSB5MikgKiBNYXRoLnNpbihhbmdsZSkgKyB4MiwgKHgxIC0geDIpICogTWF0aC5zaW4oYW5nbGUpICsgKHkxIC0geTIpICogTWF0aC5jb3MoYW5nbGUpICsgeTJdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGlzdGFuY2VCZXR3ZWVuUG9pbnRBbmRQb2ludCh4MTogbnVtYmVyLCB5MTogbnVtYmVyLCB4MjogbnVtYmVyLCB5MjogbnVtYmVyKSB7XG4gICAgY29uc3QgZHggPSB4MSAtIHgyO1xuICAgIGNvbnN0IGR5ID0geTEgLSB5MjtcbiAgICByZXR1cm4gTWF0aC5oeXBvdChkeCwgZHkpO1xufVxuXG4vLyBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy81MjU0ODM4L2NhbGN1bGF0aW5nLWRpc3RhbmNlLWJldHdlZW4tYS1wb2ludC1hbmQtYS1yZWN0YW5ndWxhci1ib3gtbmVhcmVzdC1wb2ludFxuZXhwb3J0IGZ1bmN0aW9uIGRpc3RhbmNlQmV0d2VlblBvaW50QW5kUmVjdGFuZ2xlKHg6IG51bWJlciwgeTogbnVtYmVyLCByZWN0OiBSZWN0YW5nbGVDbGllbnQpIHtcbiAgICB2YXIgZHggPSBNYXRoLm1heChyZWN0LnggLSB4LCAwLCB4IC0gKHJlY3QueCArIHJlY3Qud2lkdGgpKTtcbiAgICB2YXIgZHkgPSBNYXRoLm1heChyZWN0LnkgLSB5LCAwLCB5IC0gKHJlY3QueSArIHJlY3QuaGVpZ2h0KSk7XG4gICAgcmV0dXJuIE1hdGguc3FydChkeCAqIGR4ICsgZHkgKiBkeSk7XG59XG5cbmV4cG9ydCBjb25zdCBpc0xpbmVIaXRMaW5lID0gKGE6IFBvaW50LCBiOiBQb2ludCwgYzogUG9pbnQsIGQ6IFBvaW50KTogYm9vbGVhbiA9PiB7XG4gICAgY29uc3QgY3Jvc3NQcm9kdWN0ID0gKHYxOiBQb2ludCwgdjI6IFBvaW50KSA9PiB2MVswXSAqIHYyWzFdIC0gdjFbMV0gKiB2MlswXTtcblxuICAgIGNvbnN0IGFiOiBQb2ludCA9IFtiWzBdIC0gYVswXSwgYlsxXSAtIGFbMV1dO1xuICAgIGNvbnN0IGFjOiBQb2ludCA9IFtjWzBdIC0gYVswXSwgY1sxXSAtIGFbMV1dO1xuICAgIGNvbnN0IGFkOiBQb2ludCA9IFtkWzBdIC0gYVswXSwgZFsxXSAtIGFbMV1dO1xuXG4gICAgY29uc3QgY2E6IFBvaW50ID0gW2FbMF0gLSBjWzBdLCBhWzFdIC0gY1sxXV07XG4gICAgY29uc3QgY2I6IFBvaW50ID0gW2JbMF0gLSBjWzBdLCBiWzFdIC0gY1sxXV07XG4gICAgY29uc3QgY2Q6IFBvaW50ID0gW2RbMF0gLSBjWzBdLCBkWzFdIC0gY1sxXV07XG5cbiAgICByZXR1cm4gY3Jvc3NQcm9kdWN0KGFiLCBhYykgKiBjcm9zc1Byb2R1Y3QoYWIsIGFkKSA8PSAwICYmIGNyb3NzUHJvZHVjdChjZCwgY2EpICogY3Jvc3NQcm9kdWN0KGNkLCBjYikgPD0gMDtcbn07XG5cbmV4cG9ydCBjb25zdCBpc1BvbHlsaW5lSGl0UmVjdGFuZ2xlID0gKHBvaW50czogUG9pbnRbXSwgcmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQsIGlzQ2xvc2U6IGJvb2xlYW4gPSB0cnVlKSA9PiB7XG4gICAgY29uc3QgcmVjdGFuZ2xlUG9pbnRzID0gUmVjdGFuZ2xlQ2xpZW50LmdldENvcm5lclBvaW50cyhyZWN0YW5nbGUpO1xuICAgIGNvbnN0IGxlbiA9IHBvaW50cy5sZW5ndGg7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBpZiAoaSA9PT0gbGVuIC0gMSAmJiAhaXNDbG9zZSkgY29udGludWU7XG4gICAgICAgIGNvbnN0IHAxID0gcG9pbnRzW2ldO1xuICAgICAgICBjb25zdCBwMiA9IHBvaW50c1soaSArIDEpICUgbGVuXTtcbiAgICAgICAgY29uc3QgaXNIaXQgPVxuICAgICAgICAgICAgaXNMaW5lSGl0TGluZShwMSwgcDIsIHJlY3RhbmdsZVBvaW50c1swXSwgcmVjdGFuZ2xlUG9pbnRzWzFdKSB8fFxuICAgICAgICAgICAgaXNMaW5lSGl0TGluZShwMSwgcDIsIHJlY3RhbmdsZVBvaW50c1sxXSwgcmVjdGFuZ2xlUG9pbnRzWzJdKSB8fFxuICAgICAgICAgICAgaXNMaW5lSGl0TGluZShwMSwgcDIsIHJlY3RhbmdsZVBvaW50c1syXSwgcmVjdGFuZ2xlUG9pbnRzWzNdKSB8fFxuICAgICAgICAgICAgaXNMaW5lSGl0TGluZShwMSwgcDIsIHJlY3RhbmdsZVBvaW50c1szXSwgcmVjdGFuZ2xlUG9pbnRzWzBdKTtcbiAgICAgICAgaWYgKGlzSGl0IHx8IGlzUG9pbnRJblBvbHlnb24ocDEsIHJlY3RhbmdsZVBvaW50cykgfHwgaXNQb2ludEluUG9seWdvbihwMiwgcmVjdGFuZ2xlUG9pbnRzKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG59O1xuXG4vL2h0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzIyNTIxOTgyL2NoZWNrLWlmLXBvaW50LWlzLWluc2lkZS1hLXBvbHlnb25cbmV4cG9ydCBjb25zdCBpc1BvaW50SW5Qb2x5Z29uID0gKHBvaW50OiBQb2ludCwgcG9pbnRzOiBQb2ludFtdKSA9PiB7XG4gICAgLy8gcmF5LWNhc3RpbmcgYWxnb3JpdGhtIGJhc2VkIG9uXG4gICAgLy8gaHR0cHM6Ly93cmYuZWNzZS5ycGkuZWR1L1Jlc2VhcmNoL1Nob3J0X05vdGVzL3BucG9seS5odG1sXG5cbiAgICBjb25zdCB4ID0gcG9pbnRbMF0sXG4gICAgICAgIHkgPSBwb2ludFsxXTtcblxuICAgIGxldCBpbnNpZGUgPSBmYWxzZTtcbiAgICBmb3IgKHZhciBpID0gMCwgaiA9IHBvaW50cy5sZW5ndGggLSAxOyBpIDwgcG9pbnRzLmxlbmd0aDsgaiA9IGkrKykge1xuICAgICAgICBsZXQgeGkgPSBwb2ludHNbaV1bMF0sXG4gICAgICAgICAgICB5aSA9IHBvaW50c1tpXVsxXTtcbiAgICAgICAgbGV0IHhqID0gcG9pbnRzW2pdWzBdLFxuICAgICAgICAgICAgeWogPSBwb2ludHNbal1bMV07XG5cbiAgICAgICAgbGV0IGludGVyc2VjdCA9IHlpID4geSAhPSB5aiA+IHkgJiYgeCA8ICgoeGogLSB4aSkgKiAoeSAtIHlpKSkgLyAoeWogLSB5aSkgKyB4aTtcbiAgICAgICAgaWYgKGludGVyc2VjdCkgaW5zaWRlID0gIWluc2lkZTtcbiAgICB9XG4gICAgcmV0dXJuIGluc2lkZTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc1BvaW50SW5FbGxpcHNlID0gKHBvaW50OiBQb2ludCwgY2VudGVyOiBQb2ludCwgcng6IG51bWJlciwgcnk6IG51bWJlciwgYW5nbGUgPSAwKSA9PiB7XG4gICAgY29uc3QgY29zQW5nbGUgPSBNYXRoLmNvcyhhbmdsZSk7XG4gICAgY29uc3Qgc2luQW5nbGUgPSBNYXRoLnNpbihhbmdsZSk7XG4gICAgY29uc3QgeDEgPSAocG9pbnRbMF0gLSBjZW50ZXJbMF0pICogY29zQW5nbGUgKyAocG9pbnRbMV0gLSBjZW50ZXJbMV0pICogc2luQW5nbGU7XG4gICAgY29uc3QgeTEgPSAocG9pbnRbMV0gLSBjZW50ZXJbMV0pICogY29zQW5nbGUgLSAocG9pbnRbMF0gLSBjZW50ZXJbMF0pICogc2luQW5nbGU7XG5cbiAgICByZXR1cm4gKHgxICogeDEpIC8gKHJ4ICogcngpICsgKHkxICogeTEpIC8gKHJ5ICogcnkpIDw9IDE7XG59O1xuXG5leHBvcnQgY29uc3QgaXNQb2ludEluUm91bmRSZWN0YW5nbGUgPSAocG9pbnQ6IFBvaW50LCByZWN0YW5nbGU6IFJlY3RhbmdsZUNsaWVudCwgcmFkaXVzOiBudW1iZXIsIGFuZ2xlID0gMCkgPT4ge1xuICAgIGNvbnN0IHsgeDogcmVjdFgsIHk6IHJlY3RZLCB3aWR0aCwgaGVpZ2h0IH0gPSByZWN0YW5nbGU7XG4gICAgY29uc3QgaXNJblJlY3RhbmdsZSA9IHBvaW50WzBdID49IHJlY3RYICYmIHBvaW50WzBdIDw9IHJlY3RYICsgd2lkdGggJiYgcG9pbnRbMV0gPj0gcmVjdFkgJiYgcG9pbnRbMV0gPD0gcmVjdFkgKyBoZWlnaHQ7XG4gICAgY29uc3QgaGFuZGxlTGVmdFRvcCA9XG4gICAgICAgIHBvaW50WzBdID49IHJlY3RYICYmXG4gICAgICAgIHBvaW50WzBdIDw9IHJlY3RYICsgcmFkaXVzICYmXG4gICAgICAgIHBvaW50WzFdID49IHJlY3RZICYmXG4gICAgICAgIHBvaW50WzFdIDw9IHJlY3RZICsgcmFkaXVzICYmXG4gICAgICAgIE1hdGguaHlwb3QocG9pbnRbMF0gLSAocmVjdFggKyByYWRpdXMpLCBwb2ludFsxXSAtIChyZWN0WSArIHJhZGl1cykpID4gcmFkaXVzO1xuICAgIGNvbnN0IGhhbmRsZUxlZnRCb3R0b20gPVxuICAgICAgICBwb2ludFswXSA+PSByZWN0WCAmJlxuICAgICAgICBwb2ludFswXSA8PSByZWN0WCArIHJhZGl1cyAmJlxuICAgICAgICBwb2ludFsxXSA+PSByZWN0WSArIGhlaWdodCAmJlxuICAgICAgICBwb2ludFsxXSA8PSByZWN0WSArIGhlaWdodCAtIHJhZGl1cyAmJlxuICAgICAgICBNYXRoLmh5cG90KHBvaW50WzBdIC0gKHJlY3RYICsgcmFkaXVzKSwgcG9pbnRbMV0gLSAocmVjdFkgKyBoZWlnaHQgLSByYWRpdXMpKSA+IHJhZGl1cztcbiAgICBjb25zdCBoYW5kbGVSaWdodFRvcCA9XG4gICAgICAgIHBvaW50WzBdID49IHJlY3RYICsgd2lkdGggLSByYWRpdXMgJiZcbiAgICAgICAgcG9pbnRbMF0gPD0gcmVjdFggKyB3aWR0aCAmJlxuICAgICAgICBwb2ludFsxXSA+PSByZWN0WSAmJlxuICAgICAgICBwb2ludFsxXSA8PSByZWN0WSArIHJhZGl1cyAmJlxuICAgICAgICBNYXRoLmh5cG90KHBvaW50WzBdIC0gKHJlY3RYICsgd2lkdGggLSByYWRpdXMpLCBwb2ludFsxXSAtIChyZWN0WSArIHJhZGl1cykpID4gcmFkaXVzO1xuICAgIGNvbnN0IGhhbmRsZVJpZ2h0Qm90dG9tID1cbiAgICAgICAgcG9pbnRbMF0gPj0gcmVjdFggKyB3aWR0aCAtIHJhZGl1cyAmJlxuICAgICAgICBwb2ludFswXSA8PSByZWN0WCArIHdpZHRoICYmXG4gICAgICAgIHBvaW50WzFdID49IHJlY3RZICsgaGVpZ2h0IC0gcmFkaXVzICYmXG4gICAgICAgIHBvaW50WzFdIDw9IHJlY3RZICsgaGVpZ2h0ICYmXG4gICAgICAgIE1hdGguaHlwb3QocG9pbnRbMF0gLSAocmVjdFggKyB3aWR0aCAtIHJhZGl1cyksIHBvaW50WzFdIC0gKHJlY3RZICsgaGVpZ2h0IC0gcmFkaXVzKSkgPiByYWRpdXM7XG4gICAgY29uc3QgaXNJbkNvcm5lciA9IGhhbmRsZUxlZnRUb3AgfHwgaGFuZGxlTGVmdEJvdHRvbSB8fCBoYW5kbGVSaWdodFRvcCB8fCBoYW5kbGVSaWdodEJvdHRvbTtcblxuICAgIHJldHVybiBpc0luUmVjdGFuZ2xlICYmICFpc0luQ29ybmVyO1xufTtcblxuLy8gaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vbmljaG9sYXN3bWluL2MyNjYxZWIxMWNhZDU2NzFkODE2XG5leHBvcnQgY29uc3QgY2F0bXVsbFJvbUZpdHRpbmcgPSBmdW5jdGlvbihwb2ludHM6IFBvaW50W10pIHtcbiAgICBjb25zdCBhbHBoYSA9IDAuNTtcbiAgICBsZXQgcDAsIHAxLCBwMiwgcDMsIGJwMSwgYnAyLCBkMSwgZDIsIGQzLCBBLCBCLCBOLCBNO1xuICAgIHZhciBkM3Bvd0EsIGQycG93QSwgZDNwb3cyQSwgZDJwb3cyQSwgZDFwb3cyQSwgZDFwb3dBO1xuICAgIGNvbnN0IHJlc3VsdDogUG9pbnRbXSA9IFtdO1xuICAgIHJlc3VsdC5wdXNoKFtNYXRoLnJvdW5kKHBvaW50c1swXVswXSksIE1hdGgucm91bmQocG9pbnRzWzBdWzFdKV0pO1xuICAgIHZhciBsZW5ndGggPSBwb2ludHMubGVuZ3RoO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICAgIHAwID0gaSA9PSAwID8gcG9pbnRzWzBdIDogcG9pbnRzW2kgLSAxXTtcbiAgICAgICAgcDEgPSBwb2ludHNbaV07XG4gICAgICAgIHAyID0gcG9pbnRzW2kgKyAxXTtcbiAgICAgICAgcDMgPSBpICsgMiA8IGxlbmd0aCA/IHBvaW50c1tpICsgMl0gOiBwMjtcblxuICAgICAgICBkMSA9IE1hdGguc3FydChNYXRoLnBvdyhwMFswXSAtIHAxWzBdLCAyKSArIE1hdGgucG93KHAwWzFdIC0gcDFbMV0sIDIpKTtcbiAgICAgICAgZDIgPSBNYXRoLnNxcnQoTWF0aC5wb3cocDFbMF0gLSBwMlswXSwgMikgKyBNYXRoLnBvdyhwMVsxXSAtIHAyWzFdLCAyKSk7XG4gICAgICAgIGQzID0gTWF0aC5zcXJ0KE1hdGgucG93KHAyWzBdIC0gcDNbMF0sIDIpICsgTWF0aC5wb3cocDJbMV0gLSBwM1sxXSwgMikpO1xuXG4gICAgICAgIC8vIENhdG11bGwtUm9tIHRvIEN1YmljIEJlemllciBjb252ZXJzaW9uIG1hdHJpeFxuICAgICAgICAvLyBBID0gMmQxXjJhICsgM2QxXmEgKiBkMl5hICsgZDNeMmFcbiAgICAgICAgLy8gQiA9IDJkM14yYSArIDNkM15hICogZDJeYSArIGQyXjJhXG4gICAgICAgIC8vIFsgICAwICAgICAgICAgICAgIDEgICAgICAgICAgICAwICAgICAgICAgIDAgICAgICAgICAgXVxuICAgICAgICAvLyBbICAgLWQyXjJhIC9OICAgICBBL04gICAgICAgICAgZDFeMmEgL04gICAwICAgICAgICAgIF1cbiAgICAgICAgLy8gWyAgIDAgICAgICAgICAgICAgZDNeMmEgL00gICAgIEIvTSAgICAgICAgLWQyXjJhIC9NICBdXG4gICAgICAgIC8vIFsgICAwICAgICAgICAgICAgIDAgICAgICAgICAgICAxICAgICAgICAgIDAgICAgICAgICAgXVxuXG4gICAgICAgIGQzcG93QSA9IE1hdGgucG93KGQzLCBhbHBoYSk7XG4gICAgICAgIGQzcG93MkEgPSBNYXRoLnBvdyhkMywgMiAqIGFscGhhKTtcbiAgICAgICAgZDJwb3dBID0gTWF0aC5wb3coZDIsIGFscGhhKTtcbiAgICAgICAgZDJwb3cyQSA9IE1hdGgucG93KGQyLCAyICogYWxwaGEpO1xuICAgICAgICBkMXBvd0EgPSBNYXRoLnBvdyhkMSwgYWxwaGEpO1xuICAgICAgICBkMXBvdzJBID0gTWF0aC5wb3coZDEsIDIgKiBhbHBoYSk7XG5cbiAgICAgICAgQSA9IDIgKiBkMXBvdzJBICsgMyAqIGQxcG93QSAqIGQycG93QSArIGQycG93MkE7XG4gICAgICAgIEIgPSAyICogZDNwb3cyQSArIDMgKiBkM3Bvd0EgKiBkMnBvd0EgKyBkMnBvdzJBO1xuICAgICAgICBOID0gMyAqIGQxcG93QSAqIChkMXBvd0EgKyBkMnBvd0EpO1xuICAgICAgICBpZiAoTiA+IDApIHtcbiAgICAgICAgICAgIE4gPSAxIC8gTjtcbiAgICAgICAgfVxuICAgICAgICBNID0gMyAqIGQzcG93QSAqIChkM3Bvd0EgKyBkMnBvd0EpO1xuICAgICAgICBpZiAoTSA+IDApIHtcbiAgICAgICAgICAgIE0gPSAxIC8gTTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJwMSA9IFsoLWQycG93MkEgKiBwMFswXSArIEEgKiBwMVswXSArIGQxcG93MkEgKiBwMlswXSkgKiBOLCAoLWQycG93MkEgKiBwMFsxXSArIEEgKiBwMVsxXSArIGQxcG93MkEgKiBwMlsxXSkgKiBOXTtcbiAgICAgICAgYnAyID0gWyhkM3BvdzJBICogcDFbMF0gKyBCICogcDJbMF0gLSBkMnBvdzJBICogcDNbMF0pICogTSwgKGQzcG93MkEgKiBwMVsxXSArIEIgKiBwMlsxXSAtIGQycG93MkEgKiBwM1sxXSkgKiBNXTtcblxuICAgICAgICBpZiAoYnAxWzBdID09IDAgJiYgYnAxWzFdID09IDApIHtcbiAgICAgICAgICAgIGJwMSA9IHAxO1xuICAgICAgICB9XG4gICAgICAgIGlmIChicDJbMF0gPT0gMCAmJiBicDJbMV0gPT0gMCkge1xuICAgICAgICAgICAgYnAyID0gcDI7XG4gICAgICAgIH1cblxuICAgICAgICByZXN1bHQucHVzaChicDEgYXMgUG9pbnQsIGJwMiBhcyBQb2ludCwgcDIgYXMgUG9pbnQpO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG59O1xuXG4vKipcbiAqIHRoZSByZXN1bHQgb2Ygc2xvcGUgaXMgYmFzZWQgb24gQ2FydGVzaWFuIGNvb3JkaW5hdGUgc3lzdGVtXG4gKiB4LCB5IGFyZSBiYXNlZCBvbiB0aGUgcG9zaXRpb24gaW4gdGhlIENhcnRlc2lhbiBjb29yZGluYXRlIHN5c3RlbVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RWxsaXBzZVRhbmdlbnRTbG9wZSh4OiBudW1iZXIsIHk6IG51bWJlciwgYTogbnVtYmVyLCBiOiBudW1iZXIpIHtcbiAgICBpZiAoTWF0aC5hYnMoeSkgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHggPiAwID8gLUluZmluaXR5IDogSW5maW5pdHk7XG4gICAgfVxuICAgIGNvbnN0IGsgPSAoLWIgKiBiICogeCkgLyAoYSAqIGEgKiB5KTtcbiAgICByZXR1cm4gaztcbn1cblxuLyoqXG4gKiB4LCB5IGFyZSBiYXNlZCBvbiB0aGUgcG9zaXRpb24gaW4gdGhlIENhcnRlc2lhbiBjb29yZGluYXRlIHN5c3RlbVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VmVjdG9yRnJvbVBvaW50QW5kU2xvcGUoeDogbnVtYmVyLCB5OiBudW1iZXIsIHNsb3BlOiBudW1iZXIpIHtcbiAgICBpZiAoc2xvcGUgPT09IEluZmluaXR5KSB7XG4gICAgICAgIHJldHVybiBbMCwgLTFdIGFzIFBvaW50O1xuICAgIH0gZWxzZSBpZiAoc2xvcGUgPT09IC1JbmZpbml0eSkge1xuICAgICAgICByZXR1cm4gWzAsIDFdIGFzIFBvaW50O1xuICAgIH1cbiAgICBsZXQgdmVjdG9yID0gWzEsIC1zbG9wZV0gYXMgUG9pbnQ7XG4gICAgaWYgKHkgPCAwKSB7XG4gICAgICAgIHZlY3RvciA9IFstdmVjdG9yWzBdLCAtdmVjdG9yWzFdXTtcbiAgICB9XG4gICAgcmV0dXJuIHZlY3RvciBhcyBQb2ludDtcbn1cblxuLyoqXG4gKiBUaGUgRE9NIGxpa2VzIHZhbHVlcyB0byBiZSBmaXhlZCB0byAzIGRlY2ltYWwgcGxhY2VzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0RvbVByZWNpc2lvbih2OiBudW1iZXIpIHtcbiAgICByZXR1cm4gK3YudG9GaXhlZCg0KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvRml4ZWQodjogbnVtYmVyKSB7XG4gICAgcmV0dXJuICt2LnRvRml4ZWQoMik7XG59XG5cbi8qKlxuICogV2hldGhlciB0d28gbnVtYmVycyBudW1iZXJzIGEgYW5kIGIgYXJlIGFwcHJveGltYXRlbHkgZXF1YWwuXG4gKlxuICogQHBhcmFtIGEgLSBUaGUgZmlyc3QgcG9pbnQuXG4gKiBAcGFyYW0gYiAtIFRoZSBzZWNvbmQgcG9pbnQuXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhcHByb3hpbWF0ZWx5KGE6IG51bWJlciwgYjogbnVtYmVyLCBwcmVjaXNpb24gPSAwLjAwMDAwMSkge1xuICAgIHJldHVybiBNYXRoLmFicyhhIC0gYikgPD0gcHJlY2lzaW9uO1xufVxuXG4vLyBodHRwczovL21lZGl1bS5jb20vQHN0ZXZlcnVpei9maW5kLXRoZS1wb2ludHMtd2hlcmUtYS1saW5lLXNlZ21lbnQtaW50ZXJjZXB0cy1hbi1hbmdsZWQtZWxsaXBzZS1pbi1qYXZhc2NyaXB0LXR5cGVzY3JpcHQtZTQ1MTUyNGJlZWNlXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3Jvc3NpbmdQb2ludHNCZXR3ZWVuRWxsaXBzZUFuZFNlZ21lbnQoXG4gICAgc3RhcnRQb2ludDogUG9pbnQsXG4gICAgZW5kUG9pbnQ6IFBvaW50LFxuICAgIGN4OiBudW1iZXIsXG4gICAgY3k6IG51bWJlcixcbiAgICByeDogbnVtYmVyLFxuICAgIHJ5OiBudW1iZXIsXG4gICAgc2VnbWVudF9vbmx5ID0gdHJ1ZVxuKSB7XG4gICAgLy8gSWYgdGhlIGVsbGlwc2Ugb3IgbGluZSBzZWdtZW50IGFyZSBlbXB0eSwgcmV0dXJuIG5vIHRWYWx1ZXMuXG4gICAgaWYgKHJ4ID09PSAwIHx8IHJ5ID09PSAwIHx8IChzdGFydFBvaW50WzBdID09PSBlbmRQb2ludFswXSAmJiBzdGFydFBvaW50WzFdID09PSBlbmRQb2ludFsxXSkpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIHJ4ID0gcnggPCAwID8gcnggOiAtcng7XG4gICAgcnkgPSByeSA8IDAgPyByeSA6IC1yeTtcblxuICAgIHN0YXJ0UG9pbnRbMF0gLT0gY3g7XG4gICAgc3RhcnRQb2ludFsxXSAtPSBjeTtcbiAgICBlbmRQb2ludFswXSAtPSBjeDtcbiAgICBlbmRQb2ludFsxXSAtPSBjeTtcblxuICAgIC8vIENhbGN1bGF0ZSB0aGUgcXVhZHJhdGljIHBhcmFtZXRlcnMuXG4gICAgdmFyIEEgPVxuICAgICAgICAoKGVuZFBvaW50WzBdIC0gc3RhcnRQb2ludFswXSkgKiAoZW5kUG9pbnRbMF0gLSBzdGFydFBvaW50WzBdKSkgLyByeCAvIHJ4ICtcbiAgICAgICAgKChlbmRQb2ludFsxXSAtIHN0YXJ0UG9pbnRbMV0pICogKGVuZFBvaW50WzFdIC0gc3RhcnRQb2ludFsxXSkpIC8gcnkgLyByeTtcbiAgICB2YXIgQiA9ICgyICogc3RhcnRQb2ludFswXSAqIChlbmRQb2ludFswXSAtIHN0YXJ0UG9pbnRbMF0pKSAvIHJ4IC8gcnggKyAoMiAqIHN0YXJ0UG9pbnRbMV0gKiAoZW5kUG9pbnRbMV0gLSBzdGFydFBvaW50WzFdKSkgLyByeSAvIHJ5O1xuICAgIHZhciBDID0gKHN0YXJ0UG9pbnRbMF0gKiBzdGFydFBvaW50WzBdKSAvIHJ4IC8gcnggKyAoc3RhcnRQb2ludFsxXSAqIHN0YXJ0UG9pbnRbMV0pIC8gcnkgLyByeSAtIDE7XG5cbiAgICAvLyBNYWtlIGEgbGlzdCBvZiB0IHZhbHVlcyAobm9ybWFsaXplZCBwb2ludHMgb24gdGhlIGxpbmUgd2hlcmUgaW50ZXJzZWN0aW9ucyBvY2N1cikuXG4gICAgdmFyIHRWYWx1ZXM6IG51bWJlcltdID0gW107XG5cbiAgICAvLyBDYWxjdWxhdGUgdGhlIGRpc2NyaW1pbmFudC5cbiAgICB2YXIgZGlzY3JpbWluYW50ID0gQiAqIEIgLSA0ICogQSAqIEM7XG5cbiAgICBpZiAoZGlzY3JpbWluYW50ID09PSAwKSB7XG4gICAgICAgIC8vIE9uZSByZWFsIHNvbHV0aW9uLlxuICAgICAgICB0VmFsdWVzLnB1c2goLUIgLyAyIC8gQSk7XG4gICAgfSBlbHNlIGlmIChkaXNjcmltaW5hbnQgPiAwKSB7XG4gICAgICAgIC8vIFR3byByZWFsIHNvbHV0aW9ucy5cbiAgICAgICAgdFZhbHVlcy5wdXNoKCgtQiArIE1hdGguc3FydChkaXNjcmltaW5hbnQpKSAvIDIgLyBBKTtcbiAgICAgICAgdFZhbHVlcy5wdXNoKCgtQiAtIE1hdGguc3FydChkaXNjcmltaW5hbnQpKSAvIDIgLyBBKTtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgICAgdFZhbHVlc1xuICAgICAgICAgICAgLy8gRmlsdGVyIHRvIG9ubHkgcG9pbnRzIHRoYXQgYXJlIG9uIHRoZSBzZWdtZW50LlxuICAgICAgICAgICAgLmZpbHRlcih0ID0+ICFzZWdtZW50X29ubHkgfHwgKHQgPj0gMCAmJiB0IDw9IDEpKVxuICAgICAgICAgICAgLy8gU29sdmUgZm9yIHBvaW50cy5cbiAgICAgICAgICAgIC5tYXAodCA9PiBbc3RhcnRQb2ludFswXSArIChlbmRQb2ludFswXSAtIHN0YXJ0UG9pbnRbMF0pICogdCArIGN4LCBzdGFydFBvaW50WzFdICsgKGVuZFBvaW50WzFdIC0gc3RhcnRQb2ludFsxXSkgKiB0ICsgY3ldKVxuICAgICk7XG59XG4iXX0=