@libs-ui/services-diagram-draw 0.2.356-37 → 0.2.356-41

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.
@@ -3,7 +3,7 @@ import { MoLibDiagramCalculatorBranchUtil } from './calculator-branch.util';
3
3
  import { buildFlatElement } from './diagram.util';
4
4
  export class MoLibDiagramCalculatorCoordinatesUtil {
5
5
  static setXYElements(elements, config, positionX) {
6
- if (!elements || !elements.length) {
6
+ if (!elements?.length) {
7
7
  return;
8
8
  }
9
9
  elements.forEach((currentElement, index) => {
@@ -19,7 +19,7 @@ export class MoLibDiagramCalculatorCoordinatesUtil {
19
19
  const top = currentElement.specific_y ?? 0;
20
20
  const left = (currentElement.specific_x ?? 0) + (currentElement.specific_width ?? 0) / 2;
21
21
  let lineBetweenElements = (currentElement.specific_height ?? 0) + checkElementGetHeight(currentElement.nodeOtherConfig);
22
- if (currentElement.branches && currentElement.branches.length) {
22
+ if (currentElement.branches?.length) {
23
23
  lineBetweenElements = (currentElement.specific_height ?? 0) + canvasConfigReadonly().ELEMENT_MARGIN_DEFAULT_BRANCH;
24
24
  }
25
25
  const maxY = (currentElement.specific_y ?? 0) + (currentElement.specific_height ?? 0) + 200;
@@ -28,7 +28,7 @@ export class MoLibDiagramCalculatorCoordinatesUtil {
28
28
  configSvg.heightSvg = maxY > configSvg.heightSvg ? maxY : configSvg.heightSvg;
29
29
  configSvg.widthSvg = maxXLeft > configSvg.widthSvg ? maxXLeft : configSvg.widthSvg;
30
30
  checkMaxLeft(config, currentElement.specific_x, currentElement.branches?.[0].positionMaxLeft);
31
- if (!currentElement.branches || !currentElement.branches.length) {
31
+ if (!currentElement.branches?.length) {
32
32
  // các element không có nhánh mới vẽ đường thẳng
33
33
  const drawFormToHeightExit = (currentElement.subCodeOfElement || currentElement.code) === canvasConfigReadonly().TYPE_ELEMENT_EXIT ? (currentElement.specific_height ?? 0) / 2 : lineBetweenElements;
34
34
  currentElement.attributeSvgD = `M ${left} ${top} l 0 ${drawFormToHeightExit}`;
@@ -74,12 +74,12 @@ export class MoLibDiagramCalculatorCoordinatesUtil {
74
74
  MoLibDiagramCalculatorBranchUtil.drawStraightLine(left, lineFormElementToBranching, top, brachMiddle, maxHeightBranch.height, config);
75
75
  }
76
76
  let hasNextSameParentElementNext = false;
77
- const aboveHalfReverse = aboveHalf.reverse();
77
+ const aboveHalfReverse = aboveHalf.slice().reverse();
78
78
  aboveHalfReverse.forEach((branch, indexBranch) => {
79
79
  if (!hasNextSameParentElementNext) {
80
80
  const flatElementOnBranch = [];
81
81
  buildFlatElement(branch.elements, flatElementOnBranch);
82
- hasNextSameParentElementNext = !flatElementOnBranch || !flatElementOnBranch.length ? true : flatElementOnBranch.find((item) => item.next_id === currentElement.next_id) ? true : false;
82
+ hasNextSameParentElementNext = !flatElementOnBranch?.length || !!flatElementOnBranch.find((item) => item.next_id === currentElement.next_id);
83
83
  }
84
84
  branch.onTheSide = 'above';
85
85
  const maxWidthBranch = { width: 0, aboveWidth: 0, underWidth: 0 }; // tính chiều ngang để cách nhánh trên or dưới
@@ -104,7 +104,7 @@ export class MoLibDiagramCalculatorCoordinatesUtil {
104
104
  if (!hasNextSameParentElementNext) {
105
105
  const flatElementOnBranch = [];
106
106
  buildFlatElement(branch.elements, flatElementOnBranch);
107
- hasNextSameParentElementNext = !flatElementOnBranch || !flatElementOnBranch.length ? true : flatElementOnBranch.find((item) => item.next_id === currentElement.next_id) ? true : false;
107
+ hasNextSameParentElementNext = !flatElementOnBranch?.length || !!flatElementOnBranch.find((item) => item.next_id === currentElement.next_id);
108
108
  }
109
109
  branch.onTheSide = 'under';
110
110
  const maxWidthBranch = { width: 0, aboveWidth: 0, underWidth: 0 }; // tính chiều cao để cách nhánh trên or dưới
@@ -153,7 +153,7 @@ export class MoLibDiagramCalculatorCoordinatesUtil {
153
153
  branch.nodeOtherConfig.translateY = branch.nodeOtherConfig.specific_y;
154
154
  }
155
155
  // Recursively set positions cho elements trong branch
156
- if (branch.elements && branch.elements.length > 0) {
156
+ if (branch.elements?.length > 0) {
157
157
  this.setTranslatePositions(branch.elements);
158
158
  }
159
159
  });
@@ -161,11 +161,11 @@ export class MoLibDiagramCalculatorCoordinatesUtil {
161
161
  });
162
162
  }
163
163
  static calculatorMaxBranchHeight(element, maxHeightBranch) {
164
- if (!element.branches || !element.branches.length) {
164
+ if (!element.branches?.length) {
165
165
  return;
166
166
  }
167
167
  element.branches.forEach((branch) => {
168
- if (!branch.elements || !branch.elements.length) {
168
+ if (!branch.elements?.length) {
169
169
  const lineBranchNoHasElement = canvasConfigReadonly().ELEMENT_WIDTH_DEFAULT_BRANCH_WHEN_NOT_ELEMENT;
170
170
  maxHeightBranch.height = lineBranchNoHasElement > maxHeightBranch.height ? lineBranchNoHasElement : maxHeightBranch.height;
171
171
  return;
@@ -179,9 +179,9 @@ export class MoLibDiagramCalculatorCoordinatesUtil {
179
179
  }
180
180
  static plusHeightElementInBranch(elements, total) {
181
181
  elements.forEach((element) => {
182
- const margin = !element.branches || !element.branches.length ? checkElementGetHeight(element.nodeOtherConfig) : canvasConfigReadonly().ELEMENT_MARGIN_DEFAULT_BRANCH;
182
+ const margin = !element.branches?.length ? checkElementGetHeight(element.nodeOtherConfig) : canvasConfigReadonly().ELEMENT_MARGIN_DEFAULT_BRANCH;
183
183
  total.height += (element.specific_height ?? 0) + margin;
184
- if (!element.branches || !element.branches.length) {
184
+ if (!element.branches?.length) {
185
185
  return;
186
186
  }
187
187
  total.height += 64; // từ chiều đường thẳng ngang xuống đến nhánh đầu tiên
@@ -191,7 +191,7 @@ export class MoLibDiagramCalculatorCoordinatesUtil {
191
191
  element.branches.forEach((branch) => {
192
192
  const heightInBranch = { height: 0 };
193
193
  heightInBranch.height += canvasConfigReadonly().ELEMENT_MARGIN_DEFAULT_BRANCH_TO_ELEMENT_FIRST + 20; // đường cong kết thúc nhánh + 10px đường cong
194
- if (!branch.elements || !branch.elements.length) {
194
+ if (!branch.elements?.length) {
195
195
  heightInBranch.height += canvasConfigReadonly().ELEMENT_WIDTH_DEFAULT_BRANCH_WHEN_NOT_ELEMENT;
196
196
  if (theMostElementsInBranch.height < heightInBranch.height) {
197
197
  theMostElementsInBranch.height = heightInBranch.height;
@@ -207,7 +207,7 @@ export class MoLibDiagramCalculatorCoordinatesUtil {
207
207
  });
208
208
  }
209
209
  static calculatorWidthBranch(elements, maxWidth, log) {
210
- if (!elements || !elements.length) {
210
+ if (!elements?.length) {
211
211
  const width = canvasConfigReadonly().DEFAULT_BRANCH_WHEN_NO_ELEMENT;
212
212
  maxWidth.width = width;
213
213
  maxWidth.aboveWidth = width / 2;
@@ -216,7 +216,7 @@ export class MoLibDiagramCalculatorCoordinatesUtil {
216
216
  }
217
217
  const maxWidthInElements = { width: 0, aboveWidth: 0, underWidth: 0 };
218
218
  elements.forEach((element) => {
219
- if (!element.branches || !element.branches.length) {
219
+ if (!element.branches?.length) {
220
220
  // tính chiều cao của từng element 1, vì chiều cao của từng thằng có thể khác nhau
221
221
  if ((element.specific_width ?? 0) < maxWidthInElements.width) {
222
222
  return;
@@ -332,4 +332,4 @@ export const checkMaxTop = (config, specific_y, positionMaxTop) => {
332
332
  }
333
333
  config.positionMaxTop = numberTranslatePosition;
334
334
  };
335
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsY3VsYXRvci1lbGVtZW50LnV0aWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL3NlcnZpY2VzL2RpYWdyYW0tZHJhdy9zcmMvdXRpbHMvY2FsY3VsYXRvci1lbGVtZW50LnV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFHL0QsT0FBTyxFQUFFLGdDQUFnQyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDNUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFbEQsTUFBTSxPQUFPLHFDQUFxQztJQUNoRCxNQUFNLENBQUMsYUFBYSxDQUFDLFFBQWdDLEVBQUUsTUFBNkIsRUFBRSxTQUFrQjtRQUN0RyxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2xDLE9BQU87UUFDVCxDQUFDO1FBQ0QsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLGNBQWMsRUFBRSxLQUFLLEVBQUUsRUFBRTtZQUN6QyxjQUFjLENBQUMsVUFBVSxHQUFHLENBQUMsY0FBYyxDQUFDLFVBQVUsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLFNBQVMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUNoRixNQUFNLFVBQVUsR0FBRyxRQUFRLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBRXZDLElBQUksVUFBVSxFQUFFLENBQUM7Z0JBQ2YsY0FBYyxDQUFDLFVBQVUsR0FBRyxDQUFDLFVBQVUsQ0FBQyxVQUFVLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsY0FBYyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxjQUFjLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUMzSSxjQUFjLENBQUMsVUFBVSxHQUFH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YyxHQUFHLHVCQUF1QixFQUFFLENBQUM7UUFDL0QsdUJBQXVCLEdBQUcsY0FBYyxDQUFDO0lBQzNDLENBQUM7SUFDRCxJQUFJLHVCQUF1QixLQUFLLE1BQU0sQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN0RCxPQUFPO0lBQ1QsQ0FBQztJQUNELE1BQU0sQ0FBQyxjQUFjLEdBQUcsdUJBQXVCLENBQUM7QUFDbEQsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY2FudmFzQ29uZmlnUmVhZG9ubHkgfSBmcm9tICcuLi9kaWFncmFtLWRyYXcuc2VydmljZSc7XG5pbXBvcnQgeyBJRGF0YURpYWdyYW1Db25maWdTdmcgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2Nvb3JkaW5hdGVzLmludGVyZmFjZSc7XG5pbXBvcnQgeyBJRGlhZ3JhbUVsZW1lbnQsIElEaWFncmFtRWxlbWVudEJyYW5jaCB9IGZyb20gJy4uL2ludGVyZmFjZXMvZGlhZ3JhbS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgTW9MaWJEaWFncmFtQ2FsY3VsYXRvckJyYW5jaFV0aWwgfSBmcm9tICcuL2NhbGN1bGF0b3ItYnJhbmNoLnV0aWwnO1xuaW1wb3J0IHsgYnVpbGRGbGF0RWxlbWVudCB9IGZyb20gJy4vZGlhZ3JhbS51dGlsJztcblxuZXhwb3J0IGNsYXNzIE1vTGliRGlhZ3JhbUNhbGN1bGF0b3JDb29yZGluYXRlc1V0aWwge1xuICBzdGF0aWMgc2V0WFlFbGVtZW50cyhlbGVtZW50czogQXJyYXk8SURpYWdyYW1FbGVtZW50PiwgY29uZmlnOiBJRGF0YURpYWdyYW1Db25maWdTdmcsIHBvc2l0aW9uWD86IG51bWJlcikge1xuICAgIGlmICghZWxlbWVudHMgfHwgIWVsZW1lbnRzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBlbGVtZW50cy5mb3JFYWNoKChjdXJyZW50RWxlbWVudCwgaW5kZXgpID0+IHtcbiAgICAgIGN1cnJlbnRFbGVtZW50LnNwZWNpZmljX3ggPSAoY3VycmVudEVsZW1lbnQuc3BlY2lmaWNfeCA/PyAwKSArIChwb3NpdGlvblggPz8gMCk7XG4gICAgICBjb25zdCBwcmVFbGVtZW50ID0gZWxlbWVudHNbaW5kZXggLSAxXTtcblxuICAgICAgaWYgKHByZUVsZW1lbnQpIHtcbiAgICAgICAgY3VycmVudEVsZW1lbnQuc3BlY2lmaWNfeCA9IChwcmVFbGVtZW50LnNwZWNpZmljX3ggPz8gMCkgKyAocHJlRWxlbWVudC5zcGVjaWZpY193aWR0aCA/PyAwKSAvIDIgLSAoY3VycmVudEVsZW1lbnQuc3BlY2lmaWNfd2lkdGggPz8gMCkgLyAyO1xuICAgICAgICBjdXJyZW50RWxlbWVudC5zcGVjaWZpY195ID0gKHByZUVsZW1lbnQuc3BlY2lmaWNfeSA/PyAwKSArIChwcmVFbGVtZW50LnNwZWNpZmljX2hlaWdodCA/PyAwKSArIGNoZWNrRWxlbWVudEdldEhlaWdodChwcmVFbGVtZW50Lm5vZGVPdGhlckNvbmZpZyk7XG4gICAgICAgIGlmIChwcmVFbGVtZW50LnBvc2l0aW9uX2VuZF9icmFuY2gpIHtcbiAgICAgICAgICBjdXJyZW50RWxlbWVudC5zcGVjaWZpY195ID0gcHJlRWxlbWVudC5wb3NpdGlvbl9lbmRfYnJhbmNoO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHRvcCA9IGN1cnJlbnRFbGVtZW50LnNwZWNpZmljX3kgPz8gMDtcbiAgICAgIGNvbnN0IGxlZnQgPSAoY3VycmVudEVsZW1lbnQuc3BlY2lmaWNfeCA/PyAwKSArIChjdXJyZW50RWxlbWVudC5zcGVjaWZpY193aWR0aCA/PyAwKSAvIDI7XG4gICAgICBsZXQgbGluZUJldHdlZW5FbGVtZW50cyA9IChjdXJyZW50RWxlbWVudC5zcGVjaWZpY19oZWlnaHQgPz8gMCkgKyBjaGVja0VsZW1lbnRHZXRIZWlnaHQoY3VycmVudEVsZW1lbnQubm9kZU90aGVyQ29uZmlnKTtcblxuICAgICAgaWYgKGN1cnJlbnRFbGVtZW50LmJyYW5jaGVzICYmIGN1cnJlbnRFbGVtZW50LmJyYW5jaGVzLmxlbmd0aCkge1xuICAgICAgICBsaW5lQmV0d2VlbkVsZW1lbnRzID0gKGN1cnJlbnRFbGVtZW50LnNwZWNpZmljX2hlaWdodCA/PyAwKSArIGNhbnZhc0NvbmZpZ1JlYWRvbmx5KCkuRUxFTUVOVF9NQVJHSU5fREVGQVVMVF9CUkFOQ0g7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG1heFkgPSAoY3VycmVudEVsZW1lbnQuc3BlY2lmaWNfeSA/PyAwKSArIChjdXJyZW50RWxlbWVudC5zcGVjaWZpY19oZWlnaHQgPz8gMCkgKyAyMDA7XG4gICAgICBjb25zdCBtYXhYTGVmdCA9IChjdXJyZW50RWxlbWVudC5zcGVjaWZpY194ID8/IDApICsgKGN1cnJlbnRFbGVtZW50LnNwZWNpZmljX3dpZHRoID8/IDApICsgMTAwO1xuXG4gICAgICBjb25zdCBjb25maWdTdmcgPSBjb25maWcud2lkdGhIZWlnaHRTdmdDYW52YXM7XG5cbiAgICAgIGNvbmZpZ1N2Zy5oZWlnaHRTdmcgPSBtYXhZID4gY29uZmlnU3ZnLmhlaWdodFN2ZyA/IG1heFkgOiBjb25maWdTdmcuaGVpZ2h0U3ZnO1xuICAgICAgY29uZmlnU3ZnLndpZHRoU3ZnID0gbWF4WExlZnQgPiBjb25maWdTdmcud2lkdGhTdmcgPyBtYXhYTGVmdCA6IGNvbmZpZ1N2Zy53aWR0aFN2ZztcblxuICAgICAgY2hlY2tNYXhMZWZ0KGNvbmZpZywgY3VycmVudEVsZW1lbnQuc3BlY2lmaWNfeCwgY3VycmVudEVsZW1lbnQuYnJhbmNoZXM/LlswXS5wb3NpdGlvbk1heExlZnQpO1xuICAgICAgaWYgKCFjdXJyZW50RWxlbWVudC5icmFuY2hlcyB8fCAhY3VycmVudEVsZW1lbnQuYnJhbmNoZXMubGVuZ3RoKSB7XG4gICAgICAgIC8vIGPDoWMgZWxlbWVudCBraMO0bmcgY8OzIG5ow6FuaCBt4bubaSB24bq9IMSRxrDhu51uZyB0aOG6s25nXG4gICAgICAgIGNvbnN0IGRyYXdGb3JtVG9IZWlnaHRFeGl0ID0gKGN1cnJlbnRFbGVtZW50LnN1YkNvZGVPZkVsZW1lbnQgfHwgY3VycmVudEVsZW1lbnQuY29kZSkgPT09IGNhbnZhc0NvbmZpZ1JlYWRvbmx5KCkuVFlQRV9FTEVNRU5UX0VYSVQgPyAoY3VycmVudEVsZW1lbnQuc3BlY2lmaWNfaGVpZ2h0ID8/IDApIC8gMiA6IGxpbmVCZXR3ZWVuRWxlbWVudHM7XG5cbiAgICAgICAgY3VycmVudEVsZW1lbnQuYXR0cmlidXRlU3ZnRCA9IGBNICR7bGVmdH0gJHt0b3B9IGwgMCAke2RyYXdGb3JtVG9IZWlnaHRFeGl0fWA7XG4gICAgICAgIGN1cnJlbnRFbGVtZW50LnBvc2l0aW9uX2VuZCA9IHRvcCArIGxpbmVCZXR3ZWVuRWxlbWVudHM7XG5cbiAgICAgICAgaWYgKGN1cnJlbnRFbGVtZW50Lm5vZGVPdGhlckNvbmZpZykge1xuICAgICAgICAgIGNvbnN0IHdhaXRIZWlnaHQgPSBnZXRIZWlnaHRXYWl0Q29uZmlnKGN1cnJlbnRFbGVtZW50Lm5vZGVPdGhlckNvbmZpZyk7XG4gICAgICAgICAgY29uc3QgZGlzdGFuY2VFbGVtZW50VG9XYWl0ID0gKGN1cnJlbnRFbGVtZW50LnNwZWNpZmljX2hlaWdodCA/PyAwKSArIGNhbnZhc0NvbmZpZ1JlYWRvbmx5KCkuRElTVEFOQ0VfVE9fV0FJVDtcbiAgICAgICAgICBjb25zdCB0b3BTdGFydExpbmUyID0gdG9wICsgZGlzdGFuY2VFbGVtZW50VG9XYWl0ICsgd2FpdEhlaWdodDtcblxuICAgICAgICAgIGN1cnJlbnRFbGVtZW50LmF0dHJpYnV0ZVN2Z0QgPSBgTSAke2xlZnR9ICR7dG9wfSBsIDAgJHtkaXN0YW5jZUVsZW1lbnRUb1dhaXR9YDtcbiAgICAgICAgICBjdXJyZW50RWxlbWVudC5wb3NpdGlvbl9lbmQgPSB0b3BTdGFydExpbmUyICsgbGluZUJldHdlZW5FbGVtZW50cztcblxuICAgICAgICAgIGN1cnJlbnRFbGVtZW50Lm5vZGVPdGhlckNvbmZpZy5zcGVjaWZpY195ID0gdG9wICsgZGlzdGFuY2VFbGVtZW50VG9XYWl0O1xuICAgICAgICAgIGN1cnJlbnRFbGVtZW50Lm5vZGVPdGhlckNvbmZpZy5zcGVjaWZpY194ID0gbGVmdDtcbiAgICAgICAgICBkZWxldGUgY3VycmVudEVsZW1lbnQubm9kZU90aGVyQ29uZmlnLmF0dHJpYnV0ZVN2Z0Q7XG4gICAgICAgICAgaWYgKGN1cnJlbnRFbGVtZW50LnN1YkNvZGVPZkVsZW1lbnQgIT09IGNhbnZhc0NvbmZpZ1JlYWRvbmx5KCkuVFlQRV9FTEVNRU5UX0VYSVQpIHtcbiAgICAgICAgICAgIGN1cnJlbnRFbGVtZW50Lm5vZGVPdGhlckNvbmZpZy5hdHRyaWJ1dGVTdmdEID0gYE0gJHtsZWZ0fSAke3RvcFN0YXJ0TGluZTJ9IGwgMCAke2NhbnZhc0NvbmZpZ1JlYWRvbmx5KCkuV0FJVF9UT19FTEVNRU5UfWA7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBzdGFydCBjw6FjIGVsZW1lbnQgY8OzIG5ow6FuaFxuICAgICAgY29uc3QgaGFsZiA9IE1hdGguY2VpbChjdXJyZW50RWxlbWVudC5icmFuY2hlcy5sZW5ndGggLyAyKTtcbiAgICAgIGNvbnN0IGFib3ZlSGFsZiA9IGN1cnJlbnRFbGVtZW50LmJyYW5jaGVzLnNsaWNlKDAsIGhhbGYpO1xuICAgICAgY29uc3QgdW5kZXJIYWxmID0gY3VycmVudEVsZW1lbnQuYnJhbmNoZXMuc2xpY2UoaGFsZik7XG4gICAgICBsZXQgYnJhY2hNaWRkbGU6IElEaWFncmFtRWxlbWVudEJyYW5jaCB8IHVuZGVmaW5lZDtcblxuICAgICAgaWYgKGFib3ZlSGFsZi5sZW5ndGggIT09IHVuZGVySGFsZi5sZW5ndGgpIHtcbiAgICAgICAgYnJhY2hNaWRkbGUgPSBhYm92ZUhhbGYucG9wKCk7XG4gICAgICB9XG5cbiAgICAgIC8vIFTDjU5IIENISeG7gFUgQ2FvIFThu5BJIMSQQSBD4bumQSBOSMOBTkhcbiAgICAgIGNvbnN0IG1heEhlaWdodEJyYW5jaCA9IHtcbiAgICAgICAgaGVpZ2h0OiAwLFxuICAgICAgfTtcblxuICAgICAgTW9MaWJEaWFncmFtQ2FsY3VsYXRvckNvb3JkaW5hdGVzVXRpbC5jYWxjdWxhdG9yTWF4QnJhbmNoSGVpZ2h0KGN1cnJlbnRFbGVtZW50LCBtYXhIZWlnaHRCcmFuY2gpO1xuICAgICAgY3VycmVudEVsZW1lbnQubWF4SGVpZ2h0QnJhbmNoID0gbWF4SGVpZ2h0QnJhbmNoLmhlaWdodDtcbiAgICAgIGNvbnN0IG1heFdpZHRoQnJhY2hNaWRkbGUgPSB7IHdpZHRoOiAwLCBhYm92ZVdpZHRoOiAwLCB1bmRlcldpZHRoOiAwIH07XG4gICAgICBjb25zdCBsaW5lRm9ybUVsZW1lbnRUb0JyYW5jaGluZyA9IChjdXJyZW50RWxlbWVudC5zcGVjaWZpY19oZWlnaHQgPz8gMCkgKyBjYW52YXNDb25maWdSZWFkb25seSgpLkVMRU1FTlRfTUFSR0lOX0RFRkFVTFRfQlJBTkNIO1xuXG4gICAgICBpZiAoYnJhY2hNaWRkbGUpIHtcbiAgICAgICAgdGhpcy5jYWxjdWxhdG9yV2lkdGhCcmFuY2goYnJhY2hNaWRkbGUuZWxlbWVudHMsIG1heFdpZHRoQnJhY2hNaWRkbGUpO1xuICAgICAgICBicmFjaE1pZGRsZS53aWR0aEJyYW5jaCA9IHtcbiAgICAgICAgICB3aWR0aDogbWF4V2lkdGhCcmFjaE1pZGRsZS53aWR0aCxcbiAgICAgICAgICBhYm92ZTogbWF4V2lkdGhCcmFjaE1pZGRsZS5hYm92ZVdpZHRoLFxuICAgICAgICAgIHVuZGVyOiBtYXhXaWR0aEJyYWNoTWlkZGxlLnVuZGVyV2lkdGgsXG4gICAgICAgIH07XG4gICAgICAgIE1vTGliRGlhZ3JhbUNhbGN1bGF0b3JCcmFuY2hVdGlsLmRyYXdTdHJhaWdodExpbmUobGVmdCwgbGluZUZvcm1FbGVtZW50VG9CcmFuY2hpbmcsIHRvcCwgYnJhY2hNaWRkbGUsIG1heEhlaWdodEJyYW5jaC5oZWlnaHQsIGNvbmZpZyk7XG4gICAgICB9XG5cbiAgICAgIGxldCBoYXNOZXh0U2FtZVBhcmVudEVsZW1lbnROZXh0ID0gZmFsc2U7XG4gICAgICBjb25zdCBhYm92ZUhhbGZSZXZlcnNlID0gYWJvdmVIYWxmLnJldmVyc2UoKTtcblxuICAgICAgYWJvdmVIYWxmUmV2ZXJzZS5mb3JFYWNoKChicmFuY2gsIGluZGV4QnJhbmNoKSA9PiB7XG4gICAgICAgIGlmICghaGFzTmV4dFNhbWVQYXJlbnRFbGVtZW50TmV4dCkge1xuICAgICAgICAgIGNvbnN0IGZsYXRFbGVtZW50T25CcmFuY2g6IElEaWFncmFtRWxlbWVudFtdID0gW107XG5cbiAgICAgICAgICBidWlsZEZsYXRFbGVtZW50KGJyYW5jaC5lbGVtZW50cywgZmxhdEVsZW1lbnRPbkJyYW5jaCk7XG5cbiAgICAgICAgICBoYXNOZXh0U2FtZVBhcmVudEVsZW1lbnROZXh0ID0gIWZsYXRFbGVtZW50T25CcmFuY2ggfHwgIWZsYXRFbGVtZW50T25CcmFuY2gubGVuZ3RoID8gdHJ1ZSA6IGZsYXRFbGVtZW50T25CcmFuY2guZmluZCgoaXRlbSkgPT4gaXRlbS5uZXh0X2lkID09PSBjdXJyZW50RWxlbWVudC5uZXh0X2lkKSA/IHRydWUgOiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyYW5jaC5vblRoZVNpZGUgPSAnYWJvdmUnO1xuICAgICAgICBjb25zdCBtYXhXaWR0aEJyYW5jaCA9IHsgd2lkdGg6IDAsIGFib3ZlV2lkdGg6IDAsIHVuZGVyV2lkdGg6IDAgfTsgLy8gdMOtbmggY2hp4buBdSBuZ2FuZyDEkeG7gyBjw6FjaCBuaMOhbmggdHLDqm4gb3IgZMaw4bubaVxuXG4gICAgICAgIHRoaXMuY2FsY3VsYXRvcldpZHRoQnJhbmNoKGJyYW5jaC5lbGVtZW50cywgbWF4V2lkdGhCcmFuY2gpO1xuICAgICAgICBicmFuY2gud2lkdGhCcmFuY2ggPSB7XG4gICAgICAgICAgd2lkdGg6IG1heFdpZHRoQnJhbmNoLndpZHRoLFxuICAgICAgICAgIGFib3ZlOiBtYXhXaWR0aEJyYW5jaC5hYm92ZVdpZHRoLFxuICAgICAgICAgIHVuZGVyOiBtYXhXaWR0aEJyYW5jaC51bmRlcldpZHRoLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBicmFuY2hQcmUgPSBhYm92ZUhhbGZSZXZlcnNlW2luZGV4QnJhbmNoIC0gMV07XG5cbiAgICAgICAgbGV0IGxpbmVCZXR3ZWVuQnJhbmNoID0gbWF4V2lkdGhCcmFuY2gudW5kZXJXaWR0aCArIGNhbnZhc0NvbmZpZ1JlYWRvbmx5KCkuRUxFTUVOVF9NQVJHSU5fQkVUV0VFTl9CUkFOQ0hfREVGQVVMVCAvIDI7XG5cbiAgICAgICAgaWYgKGJyYW5jaFByZSkge1xuICAgICAgICAgIGxpbmVCZXR3ZWVuQnJhbmNoICs9IChicmFuY2hQcmUud2lkdGhCcmFuY2g/LndpZHRoID8/IDApICsgY2FudmFzQ29uZmlnUmVhZG9ubHkoKS5FTEVNRU5UX01BUkdJTl9CRVRXRUVOX0JSQU5DSF9ERUZBVUxUO1xuICAgICAgICB9XG4gICAgICAgIGlmIChicmFjaE1pZGRsZSkge1xuICAgICAgICAgIGxpbmVCZXR3ZWVuQnJhbmNoICs9IChicmFjaE1pZGRsZS53aWR0aEJyYW5jaD8uYWJvdmUgPz8gMCkgKyBjYW52YXNDb25maWdSZWFkb25seSgpLkVMRU1FTlRfTUFSR0lOX0JFVFdFRU5fQlJBTkNIX0RFRkFVTFQgLyAyO1xuICAgICAgICB9XG4gICAgICAgIC8vIG5ow6FuaCB0csOhaVxuXG4gICAgICAgIE1vTGliRGlhZ3JhbUNhbGN1bGF0b3JCcmFuY2hVdGlsLmxlZnRMaW5lKGxlZnQsIGxpbmVGb3JtRWxlbWVudFRvQnJhbmNoaW5nLCB0b3AsIGxpbmVCZXR3ZWVuQnJhbmNoLCBicmFuY2gsIG1heEhlaWdodEJyYW5jaC5oZWlnaHQsIGN1cnJlbnRFbGVtZW50LCBjb25maWcpO1xuICAgICAgfSk7XG5cbiAgICAgIHVuZGVySGFsZi5mb3JFYWNoKChicmFuY2gsIGluZGV4QnJhbmNoKSA9PiB7XG4gICAgICAgIGlmICghaGFzTmV4dFNhbWVQYXJlbnRFbGVtZW50TmV4dCkge1xuICAgICAgICAgIGNvbnN0IGZsYXRFbGVtZW50T25CcmFuY2g6IElEaWFncmFtRWxlbWVudFtdID0gW107XG5cbiAgICAgICAgICBidWlsZEZsYXRFbGVtZW50KGJyYW5jaC5lbGVtZW50cywgZmxhdEVsZW1lbnRPbkJyYW5jaCk7XG5cbiAgICAgICAgICBoYXNOZXh0U2FtZVBhcmVudEVsZW1lbnROZXh0ID0gIWZsYXRFbGVtZW50T25CcmFuY2ggfHwgIWZsYXRFbGVtZW50T25CcmFuY2gubGVuZ3RoID8gdHJ1ZSA6IGZsYXRFbGVtZW50T25CcmFuY2guZmluZCgoaXRlbSkgPT4gaXRlbS5uZXh0X2lkID09PSBjdXJyZW50RWxlbWVudC5uZXh0X2lkKSA/IHRydWUgOiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBicmFuY2gub25UaGVTaWRlID0gJ3VuZGVyJztcbiAgICAgICAgY29uc3QgbWF4V2lkdGhCcmFuY2ggPSB7IHdpZHRoOiAwLCBhYm92ZVdpZHRoOiAwLCB1bmRlcldpZHRoOiAwIH07IC8vIHTDrW5oIGNoaeG7gXUgY2FvIMSR4buDIGPDoWNoIG5ow6FuaCB0csOqbiBvciBkxrDhu5tpXG5cbiAgICAgICAgdGhpcy5jYWxjdWxhdG9yV2lkdGhCcmFuY2goYnJhbmNoLmVsZW1lbnRzLCBtYXhXaWR0aEJyYW5jaCk7XG4gICAgICAgIGJyYW5jaC53aWR0aEJyYW5jaCA9IHtcbiAgICAgICAgICB3aWR0aDogbWF4V2lkdGhCcmFuY2gud2lkdGgsXG4gICAgICAgICAgYWJvdmU6IG1heFdpZHRoQnJhbmNoLmFib3ZlV2lkdGgsXG4gICAgICAgICAgdW5kZXI6IG1heFdpZHRoQnJhbmNoLnVuZGVyV2lkdGgsXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGJyYW5jaFByZSA9IHVuZGVySGFsZltpbmRleEJyYW5jaCAtIDFdO1xuICAgICAgICBsZXQgbGluZUJldHdlZW5CcmFuY2ggPSBtYXhXaWR0aEJyYW5jaC5hYm92ZVdpZHRoICsgY2FudmFzQ29uZmlnUmVhZG9ubHkoKS5FTEVNRU5UX01BUkdJTl9CRVRXRUVOX0JSQU5DSF9ERUZBVUxUIC8gMjtcblxuICAgICAgICBpZiAoYnJhbmNoUHJlKSB7XG4gICAgICAgICAgbGluZUJldHdlZW5CcmFuY2ggKz0gKGJyYW5jaFByZS53aWR0aEJyYW5jaD8ud2lkdGggPz8gMCkgKyBjYW52YXNDb25maWdSZWFkb25seSgpLkVMRU1FTlRfTUFSR0lOX0JFVFdFRU5fQlJBTkNIX0RFRkFVTFQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGJyYWNoTWlkZGxlKSB7XG4gICAgICAgICAgbGluZUJldHdlZW5CcmFuY2ggKz0gKGJyYWNoTWlkZGxlLndpZHRoQnJhbmNoPy51bmRlciA/PyAwKSArIGNhbnZhc0NvbmZpZ1JlYWRvbmx5KCkuRUxFTUVOVF9NQVJHSU5fQkVUV0VFTl9CUkFOQ0hfREVGQVVMVCAvIDI7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBuaMOhbmggcGjhuqNpXG4gICAgICAgIE1vTGliRGlhZ3JhbUNhbGN1bGF0b3JCcmFuY2hVdGlsLnJpZ2h0TGluZShsZWZ0LCBsaW5lRm9ybUVsZW1lbnRUb0JyYW5jaGluZywgdG9wLCBsaW5lQmV0d2VlbkJyYW5jaCwgYnJhbmNoLCBtYXhIZWlnaHRCcmFuY2guaGVpZ2h0LCBjdXJyZW50RWxlbWVudCwgY29uZmlnKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgLy8gU2V0IHRyYW5zbGF0ZVggdsOgIHRyYW5zbGF0ZVkgxJHhu4MgY8OzIHRo4buDIHJlbmRlciBub2Rlc1xuICAgIHRoaXMuc2V0VHJhbnNsYXRlUG9zaXRpb25zKGVsZW1lbnRzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdHJhbnNsYXRlWCB2w6AgdHJhbnNsYXRlWSB04burIHNwZWNpZmljX3ggdsOgIHNwZWNpZmljX3kgY2hvIHThuqV0IGPhuqMgZWxlbWVudHMgKGJhbyBn4buTbSBicmFuY2hlcylcbiAgICovXG4gIHByaXZhdGUgc3RhdGljIHNldFRyYW5zbGF0ZVBvc2l0aW9ucyhlbGVtZW50czogQXJyYXk8SURpYWdyYW1FbGVtZW50Pikge1xuICAgIGVsZW1lbnRzLmZvckVhY2goKGVsZW1lbnQpID0+IHtcbiAgICAgIC8vIFNldCBwb3NpdGlvbiBjaG8gZWxlbWVudCBjaMOtbmhcbiAgICAgIGVsZW1lbnQudHJhbnNsYXRlWCA9IGVsZW1lbnQuc3BlY2lmaWNfeDtcbiAgICAgIGVsZW1lbnQudHJhbnNsYXRlWSA9IGVsZW1lbnQuc3BlY2lmaWNfeTtcblxuICAgICAgLy8gU2V0IHBvc2l0aW9uIGNobyBub2RlT3RoZXJDb25maWcgbuG6v3UgY8OzXG4gICAgICBpZiAoZWxlbWVudC5ub2RlT3RoZXJDb25maWcpIHtcbiAgICAgICAgY29uc3Qgb2Zmc2V0WCA9IChlbGVtZW50Lm5vZGVPdGhlckNvbmZpZy5zcGVjaWZpY193aWR0aCA/PyAwKSAvIDI7XG5cbiAgICAgICAgZWxlbWVudC5ub2RlT3RoZXJDb25maWcudHJhbnNsYXRlWCA9IChlbGVtZW50Lm5vZGVPdGhlckNvbmZpZy5zcGVjaWZpY194ID8/IDApIC0gb2Zmc2V0WDtcbiAgICAgICAgZWxlbWVudC5ub2RlT3RoZXJDb25maWcudHJhbnNsYXRlWSA9IGVsZW1lbnQubm9kZU90aGVyQ29uZmlnLnNwZWNpZmljX3k7XG4gICAgICB9XG5cbiAgICAgIC8vIFJlY3Vyc2l2ZWx5IHNldCBwb3NpdGlvbnMgY2hvIGVsZW1lbnRzIHRyb25nIGJyYW5jaGVzXG4gICAgICBpZiAoZWxlbWVudC5icmFuY2hlcyAmJiBlbGVtZW50LmJyYW5jaGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgZWxlbWVudC5icmFuY2hlcy5mb3JFYWNoKChicmFuY2gpID0+IHtcbiAgICAgICAgICAvLyBTZXQgcG9zaXRpb24gY2hvIGJyYW5jaCBub2RlT3RoZXJDb25maWcgbuG6v3UgY8OzXG4gICAgICAgICAgaWYgKGJyYW5jaC5ub2RlT3RoZXJDb25maWcpIHtcbiAgICAgICAgICAgIGNvbnN0IG9mZnNldFggPSAoYnJhbmNoLm5vZGVPdGhlckNvbmZpZy5zcGVjaWZpY193aWR0aCA/PyAwKSAvIDI7XG4gICAgICAgICAgICBicmFuY2gubm9kZU90aGVyQ29uZmlnLnRyYW5zbGF0ZVggPSAoYnJhbmNoLm5vZGVPdGhlckNvbmZpZy5zcGVjaWZpY194ID8/IDApIC0gb2Zmc2V0WDtcbiAgICAgICAgICAgIGJyYW5jaC5ub2RlT3RoZXJDb25maWcudHJhbnNsYXRlWSA9IGJyYW5jaC5ub2RlT3RoZXJDb25maWcuc3BlY2lmaWNfeTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBSZWN1cnNpdmVseSBzZXQgcG9zaXRpb25zIGNobyBlbGVtZW50cyB0cm9uZyBicmFuY2hcbiAgICAgICAgICBpZiAoYnJhbmNoLmVsZW1lbnRzICYmIGJyYW5jaC5lbGVtZW50cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLnNldFRyYW5zbGF0ZVBvc2l0aW9ucyhicmFuY2guZWxlbWVudHMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgY2FsY3VsYXRvck1heEJyYW5jaEhlaWdodChlbGVtZW50OiBJRGlhZ3JhbUVsZW1lbnQsIG1heEhlaWdodEJyYW5jaDogeyBoZWlnaHQ6IG51bWJlciB9KSB7XG4gICAgaWYgKCFlbGVtZW50LmJyYW5jaGVzIHx8ICFlbGVtZW50LmJyYW5jaGVzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGVsZW1lbnQuYnJhbmNoZXMuZm9yRWFjaCgoYnJhbmNoKSA9PiB7XG4gICAgICBpZiAoIWJyYW5jaC5lbGVtZW50cyB8fCAhYnJhbmNoLmVsZW1lbnRzLmxlbmd0aCkge1xuICAgICAgICBjb25zdCBsaW5lQnJhbmNoTm9IYXNFbGVtZW50ID0gY2FudmFzQ29uZmlnUmVhZG9ubHkoKS5FTEVNRU5UX1dJRFRIX0RFRkFVTFRfQlJBTkNIX1dIRU5fTk9UX0VMRU1FTlQ7XG5cbiAgICAgICAgbWF4SGVpZ2h0QnJhbmNoLmhlaWdodCA9IGxpbmVCcmFuY2hOb0hhc0VsZW1lbnQgPiBtYXhIZWlnaHRCcmFuY2guaGVpZ2h0ID8gbGluZUJyYW5jaE5vSGFzRWxlbWVudCA6IG1heEhlaWdodEJyYW5jaC5oZWlnaHQ7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB0b3RhbCA9IHtcbiAgICAgICAgaGVpZ2h0OiAwLFxuICAgICAgfTtcblxuICAgICAgdGhpcy5wbHVzSGVpZ2h0RWxlbWVudEluQnJhbmNoKGJyYW5jaC5lbGVtZW50cywgdG90YWwpO1xuICAgICAgbWF4SGVpZ2h0QnJhbmNoLmhlaWdodCA9IHRvdGFsLmhlaWdodCA+IG1heEhlaWdodEJyYW5jaC5oZWlnaHQgPyB0b3RhbC5oZWlnaHQgOiBtYXhIZWlnaHRCcmFuY2guaGVpZ2h0O1xuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIHBsdXNIZWlnaHRFbGVtZW50SW5CcmFuY2goZWxlbWVudHM6IElEaWFncmFtRWxlbWVudFtdLCB0b3RhbDogeyBoZWlnaHQ6IG51bWJlciB9KSB7XG4gICAgZWxlbWVudHMuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xuICAgICAgY29uc3QgbWFyZ2luID0gIWVsZW1lbnQuYnJhbmNoZXMgfHwgIWVsZW1lbnQuYnJhbmNoZXMubGVuZ3RoID8gY2hlY2tFbGVtZW50R2V0SGVpZ2h0KGVsZW1lbnQubm9kZU90aGVyQ29uZmlnKSA6IGNhbnZhc0NvbmZpZ1JlYWRvbmx5KCkuRUxFTUVOVF9NQVJHSU5fREVGQVVMVF9CUkFOQ0g7XG5cbiAgICAgIHRvdGFsLmhlaWdodCArPSAoZWxlbWVudC5zcGVjaWZpY19oZWlnaHQgPz8gMCkgKyBtYXJnaW47XG4gICAgICBpZiAoIWVsZW1lbnQuYnJhbmNoZXMgfHwgIWVsZW1lbnQuYnJhbmNoZXMubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRvdGFsLmhlaWdodCArPSA2NDsgLy8gdOG7qyBjaGnhu4F1IMSRxrDhu51uZyB0aOG6s25nIG5nYW5nIHh14buRbmcgxJHhur9uIG5ow6FuaCDEkeG6p3UgdGnDqm5cbiAgICAgIGNvbnN0IHRoZU1vc3RFbGVtZW50c0luQnJhbmNoID0ge1xuICAgICAgICBoZWlnaHQ6IDAsXG4gICAgICB9O1xuXG4gICAgICBlbGVtZW50LmJyYW5jaGVzLmZvckVhY2goKGJyYW5jaCkgPT4ge1xuICAgICAgICBjb25zdCBoZWlnaHRJbkJyYW5jaCA9IHsgaGVpZ2h0OiAwIH07XG5cbiAgICAgICAgaGVpZ2h0SW5CcmFuY2guaGVpZ2h0ICs9IGNhbnZhc0NvbmZpZ1JlYWRvbmx5KCkuRUxFTUVOVF9NQVJHSU5fREVGQVVMVF9CUkFOQ0hfVE9fRUxFTUVOVF9GSVJTVCArIDIwOyAvLyDEkcaw4budbmcgY29uZyBr4bq/dCB0aMO6YyBuaMOhbmggKyAxMHB4IMSRxrDhu51uZyBjb25nXG4gICAgICAgIGlmICghYnJhbmNoLmVsZW1lbnRzIHx8ICFicmFuY2guZWxlbWVudHMubGVuZ3RoKSB7XG4gICAgICAgICAgaGVpZ2h0SW5CcmFuY2guaGVpZ2h0ICs9IGNhbnZhc0NvbmZpZ1JlYWRvbmx5KCkuRUxFTUVOVF9XSURUSF9ERUZBVUxUX0JSQU5DSF9XSEVOX05PVF9FTEVNRU5UO1xuXG4gICAgICAgICAgaWYgKHRoZU1vc3RFbGVtZW50c0luQnJhbmNoLmhlaWdodCA8IGhlaWdodEluQnJhbmNoLmhlaWdodCkge1xuICAgICAgICAgICAgdGhlTW9zdEVsZW1lbnRzSW5CcmFuY2guaGVpZ2h0ID0gaGVpZ2h0SW5CcmFuY2guaGVpZ2h0O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnBsdXNIZWlnaHRFbGVtZW50SW5CcmFuY2goYnJhbmNoLmVsZW1lbnRzLCBoZWlnaHRJbkJyYW5jaCk7XG4gICAgICAgIGlmICh0aGVNb3N0RWxlbWVudHNJbkJyYW5jaC5oZWlnaHQgPCBoZWlnaHRJbkJyYW5jaC5oZWlnaHQpIHtcbiAgICAgICAgICB0aGVNb3N0RWxlbWVudHNJbkJyYW5jaC5oZWlnaHQgPSBoZWlnaHRJbkJyYW5jaC5oZWlnaHQ7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICB0b3RhbC5oZWlnaHQgKz0gdGhlTW9zdEVsZW1lbnRzSW5CcmFuY2guaGVpZ2h0O1xuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIGNhbGN1bGF0b3JXaWR0aEJyYW5jaChlbGVtZW50czogSURpYWdyYW1FbGVtZW50W10gfCB1bmRlZmluZWQsIG1heFdpZHRoOiB7IHdpZHRoOiBudW1iZXI7IGFib3ZlV2lkdGg6IG51bWJlcjsgdW5kZXJXaWR0aDogbnVtYmVyIH0sIGxvZz86IGJvb2xlYW4pIHtcbiAgICBpZiAoIWVsZW1lbnRzIHx8ICFlbGVtZW50cy5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IHdpZHRoID0gY2FudmFzQ29uZmlnUmVhZG9ubHkoKS5ERUZBVUxUX0JSQU5DSF9XSEVOX05PX0VMRU1FTlQ7XG5cbiAgICAgIG1heFdpZHRoLndpZHRoID0gd2lkdGg7XG4gICAgICBtYXhXaWR0aC5hYm92ZVdpZHRoID0gd2lkdGggLyAyO1xuICAgICAgbWF4V2lkdGgudW5kZXJXaWR0aCA9IHdpZHRoIC8gMjtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IG1heFdpZHRoSW5FbGVtZW50cyA9IHsgd2lkdGg6IDAsIGFib3ZlV2lkdGg6IDAsIHVuZGVyV2lkdGg6IDAgfTtcblxuICAgIGVsZW1lbnRzLmZvckVhY2goKGVsZW1lbnQpID0+IHtcbiAgICAgIGlmICghZWxlbWVudC5icmFuY2hlcyB8fCAhZWxlbWVudC5icmFuY2hlcy5sZW5ndGgpIHtcbiAgICAgICAgLy8gdMOtbmggY2hp4buBdSBjYW8gY+G7p2EgdOG7q25nIGVsZW1lbnQgMSwgdsOsIGNoaeG7gXUgY2FvIGPhu6dhIHThu6tuZyB0aOG6sW5nIGPDsyB0aOG7gyBraMOhYyBuaGF1XG4gICAgICAgIGlmICgoZWxlbWVudC5zcGVjaWZpY193aWR0aCA/PyAwKSA8IG1heFdpZHRoSW5FbGVtZW50cy53aWR0aCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB3aWR0aCA9IGVsZW1lbnQuc3BlY2lmaWNfd2lkdGggPz8gMDtcblxuICAgICAgICBtYXhXaWR0aEluRWxlbWVudHMud2lkdGggPSB3aWR0aDtcbiAgICAgICAgbWF4V2lkdGhJbkVsZW1lbnRzLmFib3ZlV2lkdGggPSB3aWR0aCAvIDI7XG4gICAgICAgIG1heFdpZHRoSW5FbGVtZW50cy51bmRlcldpZHRoID0gd2lkdGggLyAyO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHdpZHRoRWxlbWVudEluY2x1ZGVCcmFuY2ggPSB7IHdpZHRoOiAwLCBhYm92ZVdpZHRoOiAwLCB1bmRlcldpZHRoOiAwIH07XG4gICAgICBjb25zdCB3aWR0aCA9IGVsZW1lbnQuc3BlY2lmaWNfd2lkdGggPz8gMDtcblxuICAgICAgaWYgKHdpZHRoID4gd2lkdGhFbGVtZW50SW5jbHVkZUJyYW5jaC53aWR0aCkge1xuICAgICAgICB3aWR0aEVsZW1lbnRJbmNsdWRlQnJhbmNoLndpZHRoID0gd2lkdGg7XG4gICAgICAgIHdpZHRoRWxlbWVudEluY2x1ZGVCcmFuY2guYWJvdmVXaWR0aCA9IHdpZHRoIC8gMjtcbiAgICAgICAgd2lkdGhFbGVtZW50SW5jbHVkZUJyYW5jaC51bmRlcldpZHRoID0gd2lkdGggLyAyO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBoYWxmID0gTWF0aC5jZWlsKGVsZW1lbnQuYnJhbmNoZXMubGVuZ3RoIC8gMik7XG4gICAgICBjb25zdCBhYm92ZUhhbGYgPSBlbGVtZW50LmJyYW5jaGVzLnNsaWNlKDAsIGhhbGYpO1xuICAgICAgY29uc3QgdW5kZXJIYWxmID0gZWxlbWVudC5icmFuY2hlcy5zbGljZShoYWxmKTtcbiAgICAgIGxldCBicmFjaE1pZGRsZTtcblxuICAgICAgaWYgKGFib3ZlSGFsZi5sZW5ndGggIT09IHVuZGVySGFsZi5sZW5ndGgpIHtcbiAgICAgICAgYnJhY2hNaWRkbGUgPSBhYm92ZUhhbGYucG9wKCk7XG4gICAgICB9XG4gICAgICBpZiAoYnJhY2hNaWRkbGUpIHtcbiAgICAgICAgYnJhY2hNaWRkbGUub25UaGVTaWRlID0gJ2NlbnRlcic7XG4gICAgICB9XG4gICAgICBhYm92ZUhhbGYuZm9yRWFjaCgoYnJhbmNoKSA9PiAoYnJhbmNoLm9uVGhlU2lkZSA9ICdhYm92ZScpKTtcbiAgICAgIHVuZGVySGFsZi5mb3JFYWNoKChicmFuY2gpID0+IChicmFuY2gub25UaGVTaWRlID0gJ3VuZGVyJykpO1xuXG4gICAgICAvLyB0w61uaCBjaGnhu4F1IGNhbyBj4bunYSB04burbmcgbmjDoW5oIDEsIHLhu5NpIHTDrW5oIHThu5VuZyA9PiBzbyBzw6FuaCB24bubaSBjaGnhu4F1IGNhbyB4ZW0gZWxlbWVudCBjw7MgbmjDoW5oIG7DoG8gY2FvIG5o4bqldCB0aMOsIGzhuqV5XG4gICAgICBjb25zdCB3aWR0aEJyYW5jaCA9IHsgd2lkdGg6IDAsIGFib3ZlV2lkdGg6IDAsIHVuZGVyV2lkdGg6IDAgfTtcblxuICAgICAgZWxlbWVudC5icmFuY2hlcy5mb3JFYWNoKChicmFuY2gpID0+IHtcbiAgICAgICAgY29uc3Qgd2lkdGggPSB7IHdpZHRoOiAwLCBhYm92ZVdpZHRoOiAwLCB1bmRlcldpZHRoOiAwIH07IC8vIHTDrW5oIGNoaeG7gXUgY2FvIGPhu6dhIHThu6tuZyBuaMOhbmggMVxuXG4gICAgICAgIHRoaXMuY2FsY3VsYXRvcldpZHRoQnJhbmNoKGJyYW5jaC5lbGVtZW50cywgd2lkdGgsIGxvZyk7XG4gICAgICAgIHN3aXRjaCAoYnJhbmNoLm9uVGhlU2lkZSkge1xuICAgICAgICAgIGNhc2UgJ2Fib3ZlJzpcbiAgICAgICAgICAgIHdpZHRoQnJhbmNoLmFib3ZlV2lkdGggKz0gd2lkdGgud2lkdGg7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgJ3VuZGVyJzpcbiAgICAgICAgICAgIHdpZHRoQnJhbmNoLnVuZGVyV2lkdGggKz0gd2lkdGgud2lkdGg7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgJ2NlbnRlcic6XG4gICAgICAgICAgICB3aWR0aEJyYW5jaC5hYm92ZVdpZHRoICs9IHdpZHRoLmFib3ZlV2lkdGg7XG4gICAgICAgICAgICB3aWR0aEJyYW5jaC51bmRlcldpZHRoICs9IHdpZHRoLnVuZGVyV2lkdGg7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IG1hcmdpbkJldHdlZW5CcmFuY2ggPSAoZWxlbWVudC5icmFuY2hlcy5sZW5ndGggLSAxKSAqIGNhbnZhc0NvbmZpZ1JlYWRvbmx5KCkuRUxFTUVOVF9NQVJHSU5fQkVUV0VFTl9CUkFOQ0hfREVGQVVMVDtcblxuICAgICAgd2lkdGhCcmFuY2guYWJvdmVXaWR0aCArPSBtYXJnaW5CZXR3ZWVuQnJhbmNoIC8gMjtcbiAgICAgIHdpZHRoQnJhbmNoLnVuZGVyV2lkdGggKz0gbWFyZ2luQmV0d2VlbkJyYW5jaCAvIDI7XG4gICAgICBjb25zdCBtYXhBYm92ZVdpZHRoID0gTWF0aC5tYXgod2lkdGhFbGVtZW50SW5jbHVkZUJyYW5jaC5hYm92ZVdpZHRoLCB3aWR0aEJyYW5jaC5hYm92ZVdpZHRoKTtcbiAgICAgIGNvbnN0IG1heFVuZGVyV2lkdGggPSBNYXRoLm1heCh3aWR0aEVsZW1lbnRJbmNsdWRlQnJhbmNoLnVuZGVyV2lkdGgsIHdpZHRoQnJhbmNoLnVuZGVyV2lkdGgpO1xuXG4gICAgICBpZiAobWF4V2lkdGhJbkVsZW1lbnRzLmFib3ZlV2lkdGggPCBtYXhBYm92ZVdpZHRoKSB7XG4gICAgICAgIG1heFdpZHRoSW5FbGVtZW50cy5hYm92ZVdpZHRoID0gbWF4QWJvdmVXaWR0aDtcbiAgICAgIH1cbiAgICAgIGlmIChtYXhXaWR0aEluRWxlbWVudHMudW5kZXJXaWR0aCA8IG1heFVuZGVyV2lkdGgpIHtcbiAgICAgICAgbWF4V2lkdGhJbkVsZW1lbnRzLnVuZGVyV2lkdGggPSBtYXhVbmRlcldpZHRoO1xuICAgICAgfVxuXG4gICAgICBtYXhXaWR0aEluRWxlbWVudHMud2lkdGggPSBtYXhXaWR0aEluRWxlbWVudHMuYWJvdmVXaWR0aCArIG1heFdpZHRoSW5FbGVtZW50cy51bmRlcldpZHRoO1xuICAgIH0pO1xuXG4gICAgbWF4V2lkdGgud2lkdGggKz0gbWF4V2lkdGhJbkVsZW1lbnRzLmFib3ZlV2lkdGggKyBtYXhXaWR0aEluRWxlbWVudHMudW5kZXJXaWR0aDtcbiAgICBtYXhXaWR0aC5hYm92ZVdpZHRoICs9IG1heFdpZHRoSW5FbGVtZW50cy5hYm92ZVdpZHRoO1xuICAgIG1heFdpZHRoLnVuZGVyV2lkdGggKz0gbWF4V2lkdGhJbkVsZW1lbnRzLnVuZGVyV2lkdGg7XG4gIH1cbn1cblxuY29uc3QgY2hlY2tFbGVtZW50R2V0SGVpZ2h0ID0gKGhhc1dhaXRDb25maWc/OiBJRGlhZ3JhbUVsZW1lbnQpID0+IHtcbiAgaWYgKGhhc1dhaXRDb25maWcpIHtcbiAgICByZXR1cm4gY2FudmFzQ29uZmlnUmVhZG9ubHkoKS5ESVNUQU5DRV9UT19XQUlUICsgZ2V0SGVpZ2h0V2FpdENvbmZpZyhoYXNXYWl0Q29uZmlnKSArIGNhbnZhc0NvbmZpZ1JlYWRvbmx5KCkuV0FJVF9UT19FTEVNRU5UO1xuICB9XG5cbiAgcmV0dXJuIGNhbnZhc0NvbmZpZ1JlYWRvbmx5KCkuRUxFTUVOVF9NQVJHSU5fREVGQVVMVDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXREaXN0YW5jZUZyb21CcmFuY2hUb0ZpcnN0QmxvY2sgPSAoaGFzV2FpdENvbmZpZz86IElEaWFncmFtRWxlbWVudCkgPT4ge1xuICBpZiAoaGFzV2FpdENvbmZpZykge1xuICAgIHJldHVybiBjYW52YXNDb25maWdSZWFkb25seSgpLkRJU1RBTkNFX1RPX1dBSVQgKyBnZXRIZWlnaHRXYWl0Q29uZmlnKGhhc1dhaXRDb25maWcpICsgY2FudmFzQ29uZmlnUmVhZG9ubHkoKS5XQUlUX1RPX0VMRU1FTlQ7XG4gIH1cblxuICByZXR1cm4gY2FudmFzQ29uZmlnUmVhZG9ubHkoKS5FTEVNRU5UX01BUkdJTl9ERUZBVUxUX0JSQU5DSF9UT19FTEVNRU5UX0ZJUlNUO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEhlaWdodFdhaXRDb25maWcgPSAoaGFzV2FpdENvbmZpZz86IElEaWFncmFtRWxlbWVudCkgPT4ge1xuICBpZiAoaGFzV2FpdENvbmZpZykge1xuICAgIHJldHVybiAoaGFzV2FpdENvbmZpZy5zcGVjaWZpY19oZWlnaHQgPz8gY2FudmFzQ29uZmlnUmVhZG9ubHkoKS5FTEVNRU5UX1dBSVRfREVGQVVMVCkgKyBjYW52YXNDb25maWdSZWFkb25seSgpLkRJU1RBTkNFX1dBSVRfVE9fTkVYVF9MSU5FO1xuICB9XG5cbiAgcmV0dXJuIGNhbnZhc0NvbmZpZ1JlYWRvbmx5KCkuRUxFTUVOVF9XQUlUX0RFRkFVTFQgKyBjYW52YXNDb25maWdSZWFkb25seSgpLkRJU1RBTkNFX1dBSVRfVE9fTkVYVF9MSU5FO1xufTtcblxuZXhwb3J0IGNvbnN0IGNoZWNrTWF4TGVmdCA9IChjb25maWc6IElEYXRhRGlhZ3JhbUNvbmZpZ1N2Zywgc3BlY2lmaWNfeDogbnVtYmVyIHwgdW5kZWZpbmVkLCBwb3NpdGlvbk1heExlZnQ6IG51bWJlciB8IHVuZGVmaW5lZCkgPT4ge1xuICBsZXQgbnVtYmVyVHJhbnNsYXRlUG9zaXRpb24gPSBjb25maWcucG9zaXRpb25NYXhMZWZ0O1xuXG4gIGlmIChudW1iZXJUcmFuc2xhdGVQb3NpdGlvbiA9PT0gMCAmJiBzcGVjaWZpY194ICYmIHNwZWNpZmljX3ggPiAwICYmIHNwZWNpZmljX3ggPCA1MCkge1xuICAgIG51bWJlclRyYW5zbGF0ZVBvc2l0aW9uID0gLTUwO1xuICB9XG5cbiAgaWYgKHNwZWNpZmljX3ggJiYgc3BlY2lmaWNfeCA8IG51bWJlclRyYW5zbGF0ZVBvc2l0aW9uKSB7XG4gICAgbnVtYmVyVHJhbnNsYXRlUG9zaXRpb24gPSBzcGVjaWZpY194O1xuICB9XG5cbiAgaWYgKHBvc2l0aW9uTWF4TGVmdCAmJiBwb3NpdGlvbk1heExlZnQgPCBudW1iZXJUcmFuc2xhdGVQb3NpdGlvbikge1xuICAgIG51bWJlclRyYW5zbGF0ZVBvc2l0aW9uID0gcG9zaXRpb25NYXhMZWZ0O1xuICB9XG4gIGlmIChudW1iZXJUcmFuc2xhdGVQb3NpdGlvbiA9PT0gY29uZmlnLnBvc2l0aW9uTWF4TGVmdCkge1xuICAgIHJldHVybjtcbiAgfVxuICBjb25maWcucG9zaXRpb25NYXhMZWZ0ID0gbnVtYmVyVHJhbnNsYXRlUG9zaXRpb247XG59O1xuXG5leHBvcnQgY29uc3QgY2hlY2tNYXhUb3AgPSAoY29uZmlnOiBJRGF0YURpYWdyYW1Db25maWdTdmcsIHNwZWNpZmljX3k6IG51bWJlciB8IHVuZGVmaW5lZCwgcG9zaXRpb25NYXhUb3A6IG51bWJlciB8IHVuZGVmaW5lZCkgPT4ge1xuICBsZXQgbnVtYmVyVHJhbnNsYXRlUG9zaXRpb24gPSBjb25maWcucG9zaXRpb25NYXhUb3A7XG5cbiAgaWYgKG51bWJlclRyYW5zbGF0ZVBvc2l0aW9uID09PSAwICYmIHNwZWNpZmljX3kgJiYgc3BlY2lmaWNfeSA+IDAgJiYgc3BlY2lmaWNfeSA8IDEwMCkge1xuICAgIG51bWJlclRyYW5zbGF0ZVBvc2l0aW9uID0gc3BlY2lmaWNfeSAtIDEyMDtcbiAgfVxuXG4gIGlmIChzcGVjaWZpY195ICYmIHNwZWNpZmljX3kgPCBudW1iZXJUcmFuc2xhdGVQb3NpdGlvbikge1xuICAgIG51bWJlclRyYW5zbGF0ZVBvc2l0aW9uID0gc3BlY2lmaWNfeTtcbiAgfVxuXG4gIGlmIChwb3NpdGlvbk1heFRvcCAmJiBwb3NpdGlvbk1heFRvcCA8IG51bWJlclRyYW5zbGF0ZVBvc2l0aW9uKSB7XG4gICAgbnVtYmVyVHJhbnNsYXRlUG9zaXRpb24gPSBwb3NpdGlvbk1heFRvcDtcbiAgfVxuICBpZiAobnVtYmVyVHJhbnNsYXRlUG9zaXRpb24gPT09IGNvbmZpZy5wb3NpdGlvbk1heFRvcCkge1xuICAgIHJldHVybjtcbiAgfVxuICBjb25maWcucG9zaXRpb25NYXhUb3AgPSBudW1iZXJUcmFuc2xhdGVQb3NpdGlvbjtcbn07XG4iXX0=
335
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsY3VsYXRvci1lbGVtZW50LnV0aWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL3NlcnZpY2VzL2RpYWdyYW0tZHJhdy9zcmMvdXRpbHMvY2FsY3VsYXRvci1lbGVtZW50LnV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFHL0QsT0FBTyxFQUFFLGdDQUFnQyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDNUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFbEQsTUFBTSxPQUFPLHFDQUFxQztJQUNoRCxNQUFNLENBQUMsYUFBYSxDQUFDLFFBQWdDLEVBQUUsTUFBNkIsRUFBRSxTQUFrQjtRQUN0RyxJQUFJLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxDQUFDO1lBQ3RCLE9BQU87UUFDVCxDQUFDO1FBQ0QsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLGNBQWMsRUFBRSxLQUFLLEVBQUUsRUFBRTtZQUN6QyxjQUFjLENBQUMsVUFBVSxHQUFHLENBQUMsY0FBYyxDQUFDLFVBQVUsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLFNBQVMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUNoRixNQUFNLFVBQVUsR0FBRyxRQUFRLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBRXZDLElBQUksVUFBVSxFQUFFLENBQUM7Z0JBQ2YsY0FBYyxDQUFDLFVBQVUsR0FBRyxDQUFDLFVBQVUsQ0FBQyxVQUFVLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsY0FBYyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxjQUFjLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUMzSSxjQUFjLENBQUMsVUFBVSxHQUFHLENBQUMsVUFBVSxDQUFD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dUJBQXVCLEdBQUcsZUFBZSxDQUFDO0lBQzVDLENBQUM7SUFDRCxJQUFJLHVCQUF1QixLQUFLLE1BQU0sQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN2RCxPQUFPO0lBQ1QsQ0FBQztJQUNELE1BQU0sQ0FBQyxlQUFlLEdBQUcsdUJBQXVCLENBQUM7QUFDbkQsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHLENBQUMsTUFBNkIsRUFBRSxVQUE4QixFQUFFLGNBQWtDLEVBQUUsRUFBRTtJQUMvSCxJQUFJLHVCQUF1QixHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUM7SUFFcEQsSUFBSSx1QkFBdUIsS0FBSyxDQUFDLElBQUksVUFBVSxJQUFJLFVBQVUsR0FBRyxDQUFDLElBQUksVUFBVSxHQUFHLEdBQUcsRUFBRSxDQUFDO1FBQ3RGLHVCQUF1QixHQUFHLFVBQVUsR0FBRyxHQUFHLENBQUM7SUFDN0MsQ0FBQztJQUVELElBQUksVUFBVSxJQUFJLFVBQVUsR0FBRyx1QkFBdUIsRUFBRSxDQUFDO1FBQ3ZELHVCQUF1QixHQUFHLFVBQVUsQ0FBQztJQUN2QyxDQUFDO0lBRUQsSUFBSSxjQUFjLElBQUksY0FBYyxHQUFHLHVCQUF1QixFQUFFLENBQUM7UUFDL0QsdUJBQXVCLEdBQUcsY0FBYyxDQUFDO0lBQzNDLENBQUM7SUFDRCxJQUFJLHVCQUF1QixLQUFLLE1BQU0sQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN0RCxPQUFPO0lBQ1QsQ0FBQztJQUNELE1BQU0sQ0FBQyxjQUFjLEdBQUcsdUJBQXVCLENBQUM7QUFDbEQsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY2FudmFzQ29uZmlnUmVhZG9ubHkgfSBmcm9tICcuLi9kaWFncmFtLWRyYXcuc2VydmljZSc7XG5pbXBvcnQgeyBJRGF0YURpYWdyYW1Db25maWdTdmcgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2Nvb3JkaW5hdGVzLmludGVyZmFjZSc7XG5pbXBvcnQgeyBJRGlhZ3JhbUVsZW1lbnQsIElEaWFncmFtRWxlbWVudEJyYW5jaCB9IGZyb20gJy4uL2ludGVyZmFjZXMvZGlhZ3JhbS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgTW9MaWJEaWFncmFtQ2FsY3VsYXRvckJyYW5jaFV0aWwgfSBmcm9tICcuL2NhbGN1bGF0b3ItYnJhbmNoLnV0aWwnO1xuaW1wb3J0IHsgYnVpbGRGbGF0RWxlbWVudCB9IGZyb20gJy4vZGlhZ3JhbS51dGlsJztcblxuZXhwb3J0IGNsYXNzIE1vTGliRGlhZ3JhbUNhbGN1bGF0b3JDb29yZGluYXRlc1V0aWwge1xuICBzdGF0aWMgc2V0WFlFbGVtZW50cyhlbGVtZW50czogQXJyYXk8SURpYWdyYW1FbGVtZW50PiwgY29uZmlnOiBJRGF0YURpYWdyYW1Db25maWdTdmcsIHBvc2l0aW9uWD86IG51bWJlcikge1xuICAgIGlmICghZWxlbWVudHM/Lmxlbmd0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBlbGVtZW50cy5mb3JFYWNoKChjdXJyZW50RWxlbWVudCwgaW5kZXgpID0+IHtcbiAgICAgIGN1cnJlbnRFbGVtZW50LnNwZWNpZmljX3ggPSAoY3VycmVudEVsZW1lbnQuc3BlY2lmaWNfeCA/PyAwKSArIChwb3NpdGlvblggPz8gMCk7XG4gICAgICBjb25zdCBwcmVFbGVtZW50ID0gZWxlbWVudHNbaW5kZXggLSAxXTtcblxuICAgICAgaWYgKHByZUVsZW1lbnQpIHtcbiAgICAgICAgY3VycmVudEVsZW1lbnQuc3BlY2lmaWNfeCA9IChwcmVFbGVtZW50LnNwZWNpZmljX3ggPz8gMCkgKyAocHJlRWxlbWVudC5zcGVjaWZpY193aWR0aCA/PyAwKSAvIDIgLSAoY3VycmVudEVsZW1lbnQuc3BlY2lmaWNfd2lkdGggPz8gMCkgLyAyO1xuICAgICAgICBjdXJyZW50RWxlbWVudC5zcGVjaWZpY195ID0gKHByZUVsZW1lbnQuc3BlY2lmaWNfeSA/PyAwKSArIChwcmVFbGVtZW50LnNwZWNpZmljX2hlaWdodCA/PyAwKSArIGNoZWNrRWxlbWVudEdldEhlaWdodChwcmVFbGVtZW50Lm5vZGVPdGhlckNvbmZpZyk7XG4gICAgICAgIGlmIChwcmVFbGVtZW50LnBvc2l0aW9uX2VuZF9icmFuY2gpIHtcbiAgICAgICAgICBjdXJyZW50RWxlbWVudC5zcGVjaWZpY195ID0gcHJlRWxlbWVudC5wb3NpdGlvbl9lbmRfYnJhbmNoO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHRvcCA9IGN1cnJlbnRFbGVtZW50LnNwZWNpZmljX3kgPz8gMDtcbiAgICAgIGNvbnN0IGxlZnQgPSAoY3VycmVudEVsZW1lbnQuc3BlY2lmaWNfeCA/PyAwKSArIChjdXJyZW50RWxlbWVudC5zcGVjaWZpY193aWR0aCA/PyAwKSAvIDI7XG4gICAgICBsZXQgbGluZUJldHdlZW5FbGVtZW50cyA9IChjdXJyZW50RWxlbWVudC5zcGVjaWZpY19oZWlnaHQgPz8gMCkgKyBjaGVja0VsZW1lbnRHZXRIZWlnaHQoY3VycmVudEVsZW1lbnQubm9kZU90aGVyQ29uZmlnKTtcblxuICAgICAgaWYgKGN1cnJlbnRFbGVtZW50LmJyYW5jaGVzPy5sZW5ndGgpIHtcbiAgICAgICAgbGluZUJldHdlZW5FbGVtZW50cyA9IChjdXJyZW50RWxlbWVudC5zcGVjaWZpY19oZWlnaHQgPz8gMCkgKyBjYW52YXNDb25maWdSZWFkb25seSgpLkVMRU1FTlRfTUFSR0lOX0RFRkFVTFRfQlJBTkNIO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBtYXhZID0gKGN1cnJlbnRFbGVtZW50LnNwZWNpZmljX3kgPz8gMCkgKyAoY3VycmVudEVsZW1lbnQuc3BlY2lmaWNfaGVpZ2h0ID8/IDApICsgMjAwO1xuICAgICAgY29uc3QgbWF4WExlZnQgPSAoY3VycmVudEVsZW1lbnQuc3BlY2lmaWNfeCA/PyAwKSArIChjdXJyZW50RWxlbWVudC5zcGVjaWZpY193aWR0aCA/PyAwKSArIDEwMDtcblxuICAgICAgY29uc3QgY29uZmlnU3ZnID0gY29uZmlnLndpZHRoSGVpZ2h0U3ZnQ2FudmFzO1xuXG4gICAgICBjb25maWdTdmcuaGVpZ2h0U3ZnID0gbWF4WSA+IGNvbmZpZ1N2Zy5oZWlnaHRTdmcgPyBtYXhZIDogY29uZmlnU3ZnLmhlaWdodFN2ZztcbiAgICAgIGNvbmZpZ1N2Zy53aWR0aFN2ZyA9IG1heFhMZWZ0ID4gY29uZmlnU3ZnLndpZHRoU3ZnID8gbWF4WExlZnQgOiBjb25maWdTdmcud2lkdGhTdmc7XG5cbiAgICAgIGNoZWNrTWF4TGVmdChjb25maWcsIGN1cnJlbnRFbGVtZW50LnNwZWNpZmljX3gsIGN1cnJlbnRFbGVtZW50LmJyYW5jaGVzPy5bMF0ucG9zaXRpb25NYXhMZWZ0KTtcbiAgICAgIGlmICghY3VycmVudEVsZW1lbnQuYnJhbmNoZXM/Lmxlbmd0aCkge1xuICAgICAgICAvLyBjw6FjIGVsZW1lbnQga2jDtG5nIGPDsyBuaMOhbmggbeG7m2kgduG6vSDEkcaw4budbmcgdGjhurNuZ1xuICAgICAgICBjb25zdCBkcmF3Rm9ybVRvSGVpZ2h0RXhpdCA9IChjdXJyZW50RWxlbWVudC5zdWJDb2RlT2ZFbGVtZW50IHx8IGN1cnJlbnRFbGVtZW50LmNvZGUpID09PSBjYW52YXNDb25maWdSZWFkb25seSgpLlRZUEVfRUxFTUVOVF9FWElUID8gKGN1cnJlbnRFbGVtZW50LnNwZWNpZmljX2hlaWdodCA/PyAwKSAvIDIgOiBsaW5lQmV0d2VlbkVsZW1lbnRzO1xuXG4gICAgICAgIGN1cnJlbnRFbGVtZW50LmF0dHJpYnV0ZVN2Z0QgPSBgTSAke2xlZnR9ICR7dG9wfSBsIDAgJHtkcmF3Rm9ybVRvSGVpZ2h0RXhpdH1gO1xuICAgICAgICBjdXJyZW50RWxlbWVudC5wb3NpdGlvbl9lbmQgPSB0b3AgKyBsaW5lQmV0d2VlbkVsZW1lbnRzO1xuXG4gICAgICAgIGlmIChjdXJyZW50RWxlbWVudC5ub2RlT3RoZXJDb25maWcpIHtcbiAgICAgICAgICBjb25zdCB3YWl0SGVpZ2h0ID0gZ2V0SGVpZ2h0V2FpdENvbmZpZyhjdXJyZW50RWxlbWVudC5ub2RlT3RoZXJDb25maWcpO1xuICAgICAgICAgIGNvbnN0IGRpc3RhbmNlRWxlbWVudFRvV2FpdCA9IChjdXJyZW50RWxlbWVudC5zcGVjaWZpY19oZWlnaHQgPz8gMCkgKyBjYW52YXNDb25maWdSZWFkb25seSgpLkRJU1RBTkNFX1RPX1dBSVQ7XG4gICAgICAgICAgY29uc3QgdG9wU3RhcnRMaW5lMiA9IHRvcCArIGRpc3RhbmNlRWxlbWVudFRvV2FpdCArIHdhaXRIZWlnaHQ7XG5cbiAgICAgICAgICBjdXJyZW50RWxlbWVudC5hdHRyaWJ1dGVTdmdEID0gYE0gJHtsZWZ0fSAke3RvcH0gbCAwICR7ZGlzdGFuY2VFbGVtZW50VG9XYWl0fWA7XG4gICAgICAgICAgY3VycmVudEVsZW1lbnQucG9zaXRpb25fZW5kID0gdG9wU3RhcnRMaW5lMiArIGxpbmVCZXR3ZWVuRWxlbWVudHM7XG5cbiAgICAgICAgICBjdXJyZW50RWxlbWVudC5ub2RlT3RoZXJDb25maWcuc3BlY2lmaWNfeSA9IHRvcCArIGRpc3RhbmNlRWxlbWVudFRvV2FpdDtcbiAgICAgICAgICBjdXJyZW50RWxlbWVudC5ub2RlT3RoZXJDb25maWcuc3BlY2lmaWNfeCA9IGxlZnQ7XG4gICAgICAgICAgZGVsZXRlIGN1cnJlbnRFbGVtZW50Lm5vZGVPdGhlckNvbmZpZy5hdHRyaWJ1dGVTdmdEO1xuICAgICAgICAgIGlmIChjdXJyZW50RWxlbWVudC5zdWJDb2RlT2ZFbGVtZW50ICE9PSBjYW52YXNDb25maWdSZWFkb25seSgpLlRZUEVfRUxFTUVOVF9FWElUKSB7XG4gICAgICAgICAgICBjdXJyZW50RWxlbWVudC5ub2RlT3RoZXJDb25maWcuYXR0cmlidXRlU3ZnRCA9IGBNICR7bGVmdH0gJHt0b3BTdGFydExpbmUyfSBsIDAgJHtjYW52YXNDb25maWdSZWFkb25seSgpLldBSVRfVE9fRUxFTUVOVH1gO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gc3RhcnQgY8OhYyBlbGVtZW50IGPDsyBuaMOhbmhcbiAgICAgIGNvbnN0IGhhbGYgPSBNYXRoLmNlaWwoY3VycmVudEVsZW1lbnQuYnJhbmNoZXMubGVuZ3RoIC8gMik7XG4gICAgICBjb25zdCBhYm92ZUhhbGYgPSBjdXJyZW50RWxlbWVudC5icmFuY2hlcy5zbGljZSgwLCBoYWxmKTtcbiAgICAgIGNvbnN0IHVuZGVySGFsZiA9IGN1cnJlbnRFbGVtZW50LmJyYW5jaGVzLnNsaWNlKGhhbGYpO1xuICAgICAgbGV0IGJyYWNoTWlkZGxlOiBJRGlhZ3JhbUVsZW1lbnRCcmFuY2ggfCB1bmRlZmluZWQ7XG5cbiAgICAgIGlmIChhYm92ZUhhbGYubGVuZ3RoICE9PSB1bmRlckhhbGYubGVuZ3RoKSB7XG4gICAgICAgIGJyYWNoTWlkZGxlID0gYWJvdmVIYWxmLnBvcCgpO1xuICAgICAgfVxuXG4gICAgICAvLyBUw41OSCBDSEnhu4BVIENhbyBU4buQSSDEkEEgQ+G7pkEgTkjDgU5IXG4gICAgICBjb25zdCBtYXhIZWlnaHRCcmFuY2ggPSB7XG4gICAgICAgIGhlaWdodDogMCxcbiAgICAgIH07XG5cbiAgICAgIE1vTGliRGlhZ3JhbUNhbGN1bGF0b3JDb29yZGluYXRlc1V0aWwuY2FsY3VsYXRvck1heEJyYW5jaEhlaWdodChjdXJyZW50RWxlbWVudCwgbWF4SGVpZ2h0QnJhbmNoKTtcbiAgICAgIGN1cnJlbnRFbGVtZW50Lm1heEhlaWdodEJyYW5jaCA9IG1heEhlaWdodEJyYW5jaC5oZWlnaHQ7XG4gICAgICBjb25zdCBtYXhXaWR0aEJyYWNoTWlkZGxlID0geyB3aWR0aDogMCwgYWJvdmVXaWR0aDogMCwgdW5kZXJXaWR0aDogMCB9O1xuICAgICAgY29uc3QgbGluZUZvcm1FbGVtZW50VG9CcmFuY2hpbmcgPSAoY3VycmVudEVsZW1lbnQuc3BlY2lmaWNfaGVpZ2h0ID8/IDApICsgY2FudmFzQ29uZmlnUmVhZG9ubHkoKS5FTEVNRU5UX01BUkdJTl9ERUZBVUxUX0JSQU5DSDtcblxuICAgICAgaWYgKGJyYWNoTWlkZGxlKSB7XG4gICAgICAgIHRoaXMuY2FsY3VsYXRvcldpZHRoQnJhbmNoKGJyYWNoTWlkZGxlLmVsZW1lbnRzLCBtYXhXaWR0aEJyYWNoTWlkZGxlKTtcbiAgICAgICAgYnJhY2hNaWRkbGUud2lkdGhCcmFuY2ggPSB7XG4gICAgICAgICAgd2lkdGg6IG1heFdpZHRoQnJhY2hNaWRkbGUud2lkdGgsXG4gICAgICAgICAgYWJvdmU6IG1heFdpZHRoQnJhY2hNaWRkbGUuYWJvdmVXaWR0aCxcbiAgICAgICAgICB1bmRlcjogbWF4V2lkdGhCcmFjaE1pZGRsZS51bmRlcldpZHRoLFxuICAgICAgICB9O1xuICAgICAgICBNb0xpYkRpYWdyYW1DYWxjdWxhdG9yQnJhbmNoVXRpbC5kcmF3U3RyYWlnaHRMaW5lKGxlZnQsIGxpbmVGb3JtRWxlbWVudFRvQnJhbmNoaW5nLCB0b3AsIGJyYWNoTWlkZGxlLCBtYXhIZWlnaHRCcmFuY2guaGVpZ2h0LCBjb25maWcpO1xuICAgICAgfVxuXG4gICAgICBsZXQgaGFzTmV4dFNhbWVQYXJlbnRFbGVtZW50TmV4dCA9IGZhbHNlO1xuICAgICAgY29uc3QgYWJvdmVIYWxmUmV2ZXJzZSA9IGFib3ZlSGFsZi5zbGljZSgpLnJldmVyc2UoKTtcblxuICAgICAgYWJvdmVIYWxmUmV2ZXJzZS5mb3JFYWNoKChicmFuY2gsIGluZGV4QnJhbmNoKSA9PiB7XG4gICAgICAgIGlmICghaGFzTmV4dFNhbWVQYXJlbnRFbGVtZW50TmV4dCkge1xuICAgICAgICAgIGNvbnN0IGZsYXRFbGVtZW50T25CcmFuY2g6IElEaWFncmFtRWxlbWVudFtdID0gW107XG5cbiAgICAgICAgICBidWlsZEZsYXRFbGVtZW50KGJyYW5jaC5lbGVtZW50cywgZmxhdEVsZW1lbnRPbkJyYW5jaCk7XG5cbiAgICAgICAgICBoYXNOZXh0U2FtZVBhcmVudEVsZW1lbnROZXh0ID0gIWZsYXRFbGVtZW50T25CcmFuY2g/Lmxlbmd0aCB8fCAhIWZsYXRFbGVtZW50T25CcmFuY2guZmluZCgoaXRlbSkgPT4gaXRlbS5uZXh0X2lkID09PSBjdXJyZW50RWxlbWVudC5uZXh0X2lkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyYW5jaC5vblRoZVNpZGUgPSAnYWJvdmUnO1xuICAgICAgICBjb25zdCBtYXhXaWR0aEJyYW5jaCA9IHsgd2lkdGg6IDAsIGFib3ZlV2lkdGg6IDAsIHVuZGVyV2lkdGg6IDAgfTsgLy8gdMOtbmggY2hp4buBdSBuZ2FuZyDEkeG7gyBjw6FjaCBuaMOhbmggdHLDqm4gb3IgZMaw4bubaVxuXG4gICAgICAgIHRoaXMuY2FsY3VsYXRvcldpZHRoQnJhbmNoKGJyYW5jaC5lbGVtZW50cywgbWF4V2lkdGhCcmFuY2gpO1xuICAgICAgICBicmFuY2gud2lkdGhCcmFuY2ggPSB7XG4gICAgICAgICAgd2lkdGg6IG1heFdpZHRoQnJhbmNoLndpZHRoLFxuICAgICAgICAgIGFib3ZlOiBtYXhXaWR0aEJyYW5jaC5hYm92ZVdpZHRoLFxuICAgICAgICAgIHVuZGVyOiBtYXhXaWR0aEJyYW5jaC51bmRlcldpZHRoLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBicmFuY2hQcmUgPSBhYm92ZUhhbGZSZXZlcnNlW2luZGV4QnJhbmNoIC0gMV07XG5cbiAgICAgICAgbGV0IGxpbmVCZXR3ZWVuQnJhbmNoID0gbWF4V2lkdGhCcmFuY2gudW5kZXJXaWR0aCArIGNhbnZhc0NvbmZpZ1JlYWRvbmx5KCkuRUxFTUVOVF9NQVJHSU5fQkVUV0VFTl9CUkFOQ0hfREVGQVVMVCAvIDI7XG5cbiAgICAgICAgaWYgKGJyYW5jaFByZSkge1xuICAgICAgICAgIGxpbmVCZXR3ZWVuQnJhbmNoICs9IChicmFuY2hQcmUud2lkdGhCcmFuY2g/LndpZHRoID8/IDApICsgY2FudmFzQ29uZmlnUmVhZG9ubHkoKS5FTEVNRU5UX01BUkdJTl9CRVRXRUVOX0JSQU5DSF9ERUZBVUxUO1xuICAgICAgICB9XG4gICAgICAgIGlmIChicmFjaE1pZGRsZSkge1xuICAgICAgICAgIGxpbmVCZXR3ZWVuQnJhbmNoICs9IChicmFjaE1pZGRsZS53aWR0aEJyYW5jaD8uYWJvdmUgPz8gMCkgKyBjYW52YXNDb25maWdSZWFkb25seSgpLkVMRU1FTlRfTUFSR0lOX0JFVFdFRU5fQlJBTkNIX0RFRkFVTFQgLyAyO1xuICAgICAgICB9XG4gICAgICAgIC8vIG5ow6FuaCB0csOhaVxuXG4gICAgICAgIE1vTGliRGlhZ3JhbUNhbGN1bGF0b3JCcmFuY2hVdGlsLmxlZnRMaW5lKGxlZnQsIGxpbmVGb3JtRWxlbWVudFRvQnJhbmNoaW5nLCB0b3AsIGxpbmVCZXR3ZWVuQnJhbmNoLCBicmFuY2gsIG1heEhlaWdodEJyYW5jaC5oZWlnaHQsIGN1cnJlbnRFbGVtZW50LCBjb25maWcpO1xuICAgICAgfSk7XG5cbiAgICAgIHVuZGVySGFsZi5mb3JFYWNoKChicmFuY2gsIGluZGV4QnJhbmNoKSA9PiB7XG4gICAgICAgIGlmICghaGFzTmV4dFNhbWVQYXJlbnRFbGVtZW50TmV4dCkge1xuICAgICAgICAgIGNvbnN0IGZsYXRFbGVtZW50T25CcmFuY2g6IElEaWFncmFtRWxlbWVudFtdID0gW107XG5cbiAgICAgICAgICBidWlsZEZsYXRFbGVtZW50KGJyYW5jaC5lbGVtZW50cywgZmxhdEVsZW1lbnRPbkJyYW5jaCk7XG5cbiAgICAgICAgICBoYXNOZXh0U2FtZVBhcmVudEVsZW1lbnROZXh0ID0gIWZsYXRFbGVtZW50T25CcmFuY2g/Lmxlbmd0aCB8fCAhIWZsYXRFbGVtZW50T25CcmFuY2guZmluZCgoaXRlbSkgPT4gaXRlbS5uZXh0X2lkID09PSBjdXJyZW50RWxlbWVudC5uZXh0X2lkKTtcbiAgICAgICAgfVxuICAgICAgICBicmFuY2gub25UaGVTaWRlID0gJ3VuZGVyJztcbiAgICAgICAgY29uc3QgbWF4V2lkdGhCcmFuY2ggPSB7IHdpZHRoOiAwLCBhYm92ZVdpZHRoOiAwLCB1bmRlcldpZHRoOiAwIH07IC8vIHTDrW5oIGNoaeG7gXUgY2FvIMSR4buDIGPDoWNoIG5ow6FuaCB0csOqbiBvciBkxrDhu5tpXG5cbiAgICAgICAgdGhpcy5jYWxjdWxhdG9yV2lkdGhCcmFuY2goYnJhbmNoLmVsZW1lbnRzLCBtYXhXaWR0aEJyYW5jaCk7XG4gICAgICAgIGJyYW5jaC53aWR0aEJyYW5jaCA9IHtcbiAgICAgICAgICB3aWR0aDogbWF4V2lkdGhCcmFuY2gud2lkdGgsXG4gICAgICAgICAgYWJvdmU6IG1heFdpZHRoQnJhbmNoLmFib3ZlV2lkdGgsXG4gICAgICAgICAgdW5kZXI6IG1heFdpZHRoQnJhbmNoLnVuZGVyV2lkdGgsXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGJyYW5jaFByZSA9IHVuZGVySGFsZltpbmRleEJyYW5jaCAtIDFdO1xuICAgICAgICBsZXQgbGluZUJldHdlZW5CcmFuY2ggPSBtYXhXaWR0aEJyYW5jaC5hYm92ZVdpZHRoICsgY2FudmFzQ29uZmlnUmVhZG9ubHkoKS5FTEVNRU5UX01BUkdJTl9CRVRXRUVOX0JSQU5DSF9ERUZBVUxUIC8gMjtcblxuICAgICAgICBpZiAoYnJhbmNoUHJlKSB7XG4gICAgICAgICAgbGluZUJldHdlZW5CcmFuY2ggKz0gKGJyYW5jaFByZS53aWR0aEJyYW5jaD8ud2lkdGggPz8gMCkgKyBjYW52YXNDb25maWdSZWFkb25seSgpLkVMRU1FTlRfTUFSR0lOX0JFVFdFRU5fQlJBTkNIX0RFRkFVTFQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGJyYWNoTWlkZGxlKSB7XG4gICAgICAgICAgbGluZUJldHdlZW5CcmFuY2ggKz0gKGJyYWNoTWlkZGxlLndpZHRoQnJhbmNoPy51bmRlciA/PyAwKSArIGNhbnZhc0NvbmZpZ1JlYWRvbmx5KCkuRUxFTUVOVF9NQVJHSU5fQkVUV0VFTl9CUkFOQ0hfREVGQVVMVCAvIDI7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBuaMOhbmggcGjhuqNpXG4gICAgICAgIE1vTGliRGlhZ3JhbUNhbGN1bGF0b3JCcmFuY2hVdGlsLnJpZ2h0TGluZShsZWZ0LCBsaW5lRm9ybUVsZW1lbnRUb0JyYW5jaGluZywgdG9wLCBsaW5lQmV0d2VlbkJyYW5jaCwgYnJhbmNoLCBtYXhIZWlnaHRCcmFuY2guaGVpZ2h0LCBjdXJyZW50RWxlbWVudCwgY29uZmlnKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgLy8gU2V0IHRyYW5zbGF0ZVggdsOgIHRyYW5zbGF0ZVkgxJHhu4MgY8OzIHRo4buDIHJlbmRlciBub2Rlc1xuICAgIHRoaXMuc2V0VHJhbnNsYXRlUG9zaXRpb25zKGVsZW1lbnRzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdHJhbnNsYXRlWCB2w6AgdHJhbnNsYXRlWSB04burIHNwZWNpZmljX3ggdsOgIHNwZWNpZmljX3kgY2hvIHThuqV0IGPhuqMgZWxlbWVudHMgKGJhbyBn4buTbSBicmFuY2hlcylcbiAgICovXG4gIHByaXZhdGUgc3RhdGljIHNldFRyYW5zbGF0ZVBvc2l0aW9ucyhlbGVtZW50czogQXJyYXk8SURpYWdyYW1FbGVtZW50Pikge1xuICAgIGVsZW1lbnRzLmZvckVhY2goKGVsZW1lbnQpID0+IHtcbiAgICAgIC8vIFNldCBwb3NpdGlvbiBjaG8gZWxlbWVudCBjaMOtbmhcbiAgICAgIGVsZW1lbnQudHJhbnNsYXRlWCA9IGVsZW1lbnQuc3BlY2lmaWNfeDtcbiAgICAgIGVsZW1lbnQudHJhbnNsYXRlWSA9IGVsZW1lbnQuc3BlY2lmaWNfeTtcblxuICAgICAgLy8gU2V0IHBvc2l0aW9uIGNobyBub2RlT3RoZXJDb25maWcgbuG6v3UgY8OzXG4gICAgICBpZiAoZWxlbWVudC5ub2RlT3RoZXJDb25maWcpIHtcbiAgICAgICAgY29uc3Qgb2Zmc2V0WCA9IChlbGVtZW50Lm5vZGVPdGhlckNvbmZpZy5zcGVjaWZpY193aWR0aCA/PyAwKSAvIDI7XG5cbiAgICAgICAgZWxlbWVudC5ub2RlT3RoZXJDb25maWcudHJhbnNsYXRlWCA9IChlbGVtZW50Lm5vZGVPdGhlckNvbmZpZy5zcGVjaWZpY194ID8/IDApIC0gb2Zmc2V0WDtcbiAgICAgICAgZWxlbWVudC5ub2RlT3RoZXJDb25maWcudHJhbnNsYXRlWSA9IGVsZW1lbnQubm9kZU90aGVyQ29uZmlnLnNwZWNpZmljX3k7XG4gICAgICB9XG5cbiAgICAgIC8vIFJlY3Vyc2l2ZWx5IHNldCBwb3NpdGlvbnMgY2hvIGVsZW1lbnRzIHRyb25nIGJyYW5jaGVzXG4gICAgICBpZiAoZWxlbWVudC5icmFuY2hlcyAmJiBlbGVtZW50LmJyYW5jaGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgZWxlbWVudC5icmFuY2hlcy5mb3JFYWNoKChicmFuY2gpID0+IHtcbiAgICAgICAgICAvLyBTZXQgcG9zaXRpb24gY2hvIGJyYW5jaCBub2RlT3RoZXJDb25maWcgbuG6v3UgY8OzXG4gICAgICAgICAgaWYgKGJyYW5jaC5ub2RlT3RoZXJDb25maWcpIHtcbiAgICAgICAgICAgIGNvbnN0IG9mZnNldFggPSAoYnJhbmNoLm5vZGVPdGhlckNvbmZpZy5zcGVjaWZpY193aWR0aCA/PyAwKSAvIDI7XG4gICAgICAgICAgICBicmFuY2gubm9kZU90aGVyQ29uZmlnLnRyYW5zbGF0ZVggPSAoYnJhbmNoLm5vZGVPdGhlckNvbmZpZy5zcGVjaWZpY194ID8/IDApIC0gb2Zmc2V0WDtcbiAgICAgICAgICAgIGJyYW5jaC5ub2RlT3RoZXJDb25maWcudHJhbnNsYXRlWSA9IGJyYW5jaC5ub2RlT3RoZXJDb25maWcuc3BlY2lmaWNfeTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBSZWN1cnNpdmVseSBzZXQgcG9zaXRpb25zIGNobyBlbGVtZW50cyB0cm9uZyBicmFuY2hcbiAgICAgICAgICBpZiAoYnJhbmNoLmVsZW1lbnRzPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLnNldFRyYW5zbGF0ZVBvc2l0aW9ucyhicmFuY2guZWxlbWVudHMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgY2FsY3VsYXRvck1heEJyYW5jaEhlaWdodChlbGVtZW50OiBJRGlhZ3JhbUVsZW1lbnQsIG1heEhlaWdodEJyYW5jaDogeyBoZWlnaHQ6IG51bWJlciB9KSB7XG4gICAgaWYgKCFlbGVtZW50LmJyYW5jaGVzPy5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBlbGVtZW50LmJyYW5jaGVzLmZvckVhY2goKGJyYW5jaCkgPT4ge1xuICAgICAgaWYgKCFicmFuY2guZWxlbWVudHM/Lmxlbmd0aCkge1xuICAgICAgICBjb25zdCBsaW5lQnJhbmNoTm9IYXNFbGVtZW50ID0gY2FudmFzQ29uZmlnUmVhZG9ubHkoKS5FTEVNRU5UX1dJRFRIX0RFRkFVTFRfQlJBTkNIX1dIRU5fTk9UX0VMRU1FTlQ7XG5cbiAgICAgICAgbWF4SGVpZ2h0QnJhbmNoLmhlaWdodCA9IGxpbmVCcmFuY2hOb0hhc0VsZW1lbnQgPiBtYXhIZWlnaHRCcmFuY2guaGVpZ2h0ID8gbGluZUJyYW5jaE5vSGFzRWxlbWVudCA6IG1heEhlaWdodEJyYW5jaC5oZWlnaHQ7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB0b3RhbCA9IHtcbiAgICAgICAgaGVpZ2h0OiAwLFxuICAgICAgfTtcblxuICAgICAgdGhpcy5wbHVzSGVpZ2h0RWxlbWVudEluQnJhbmNoKGJyYW5jaC5lbGVtZW50cywgdG90YWwpO1xuICAgICAgbWF4SGVpZ2h0QnJhbmNoLmhlaWdodCA9IHRvdGFsLmhlaWdodCA+IG1heEhlaWdodEJyYW5jaC5oZWlnaHQgPyB0b3RhbC5oZWlnaHQgOiBtYXhIZWlnaHRCcmFuY2guaGVpZ2h0O1xuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIHBsdXNIZWlnaHRFbGVtZW50SW5CcmFuY2goZWxlbWVudHM6IElEaWFncmFtRWxlbWVudFtdLCB0b3RhbDogeyBoZWlnaHQ6IG51bWJlciB9KSB7XG4gICAgZWxlbWVudHMuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xuICAgICAgY29uc3QgbWFyZ2luID0gIWVsZW1lbnQuYnJhbmNoZXM/Lmxlbmd0aCA/IGNoZWNrRWxlbWVudEdldEhlaWdodChlbGVtZW50Lm5vZGVPdGhlckNvbmZpZykgOiBjYW52YXNDb25maWdSZWFkb25seSgpLkVMRU1FTlRfTUFSR0lOX0RFRkFVTFRfQlJBTkNIO1xuXG4gICAgICB0b3RhbC5oZWlnaHQgKz0gKGVsZW1lbnQuc3BlY2lmaWNfaGVpZ2h0ID8/IDApICsgbWFyZ2luO1xuICAgICAgaWYgKCFlbGVtZW50LmJyYW5jaGVzPy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdG90YWwuaGVpZ2h0ICs9IDY0OyAvLyB04burIGNoaeG7gXUgxJHGsOG7nW5nIHRo4bqzbmcgbmdhbmcgeHXhu5FuZyDEkeG6v24gbmjDoW5oIMSR4bqndSB0acOqblxuICAgICAgY29uc3QgdGhlTW9zdEVsZW1lbnRzSW5CcmFuY2ggPSB7XG4gICAgICAgIGhlaWdodDogMCxcbiAgICAgIH07XG5cbiAgICAgIGVsZW1lbnQuYnJhbmNoZXMuZm9yRWFjaCgoYnJhbmNoKSA9PiB7XG4gICAgICAgIGNvbnN0IGhlaWdodEluQnJhbmNoID0geyBoZWlnaHQ6IDAgfTtcblxuICAgICAgICBoZWlnaHRJbkJyYW5jaC5oZWlnaHQgKz0gY2FudmFzQ29uZmlnUmVhZG9ubHkoKS5FTEVNRU5UX01BUkdJTl9ERUZBVUxUX0JSQU5DSF9UT19FTEVNRU5UX0ZJUlNUICsgMjA7IC8vIMSRxrDhu51uZyBjb25nIGvhur90IHRow7pjIG5ow6FuaCArIDEwcHggxJHGsOG7nW5nIGNvbmdcbiAgICAgICAgaWYgKCFicmFuY2guZWxlbWVudHM/Lmxlbmd0aCkge1xuICAgICAgICAgIGhlaWdodEluQnJhbmNoLmhlaWdodCArPSBjYW52YXNDb25maWdSZWFkb25seSgpLkVMRU1FTlRfV0lEVEhfREVGQVVMVF9CUkFOQ0hfV0hFTl9OT1RfRUxFTUVOVDtcblxuICAgICAgICAgIGlmICh0aGVNb3N0RWxlbWVudHNJbkJyYW5jaC5oZWlnaHQgPCBoZWlnaHRJbkJyYW5jaC5oZWlnaHQpIHtcbiAgICAgICAgICAgIHRoZU1vc3RFbGVtZW50c0luQnJhbmNoLmhlaWdodCA9IGhlaWdodEluQnJhbmNoLmhlaWdodDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wbHVzSGVpZ2h0RWxlbWVudEluQnJhbmNoKGJyYW5jaC5lbGVtZW50cywgaGVpZ2h0SW5CcmFuY2gpO1xuICAgICAgICBpZiAodGhlTW9zdEVsZW1lbnRzSW5CcmFuY2guaGVpZ2h0IDwgaGVpZ2h0SW5CcmFuY2guaGVpZ2h0KSB7XG4gICAgICAgICAgdGhlTW9zdEVsZW1lbnRzSW5CcmFuY2guaGVpZ2h0ID0gaGVpZ2h0SW5CcmFuY2guaGVpZ2h0O1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgdG90YWwuaGVpZ2h0ICs9IHRoZU1vc3RFbGVtZW50c0luQnJhbmNoLmhlaWdodDtcbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBjYWxjdWxhdG9yV2lkdGhCcmFuY2goZWxlbWVudHM6IElEaWFncmFtRWxlbWVudFtdIHwgdW5kZWZpbmVkLCBtYXhXaWR0aDogeyB3aWR0aDogbnVtYmVyOyBhYm92ZVdpZHRoOiBudW1iZXI7IHVuZGVyV2lkdGg6IG51bWJlciB9LCBsb2c/OiBib29sZWFuKSB7XG4gICAgaWYgKCFlbGVtZW50cz8ubGVuZ3RoKSB7XG4gICAgICBjb25zdCB3aWR0aCA9IGNhbnZhc0NvbmZpZ1JlYWRvbmx5KCkuREVGQVVMVF9CUkFOQ0hfV0hFTl9OT19FTEVNRU5UO1xuXG4gICAgICBtYXhXaWR0aC53aWR0aCA9IHdpZHRoO1xuICAgICAgbWF4V2lkdGguYWJvdmVXaWR0aCA9IHdpZHRoIC8gMjtcbiAgICAgIG1heFdpZHRoLnVuZGVyV2lkdGggPSB3aWR0aCAvIDI7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBtYXhXaWR0aEluRWxlbWVudHMgPSB7IHdpZHRoOiAwLCBhYm92ZVdpZHRoOiAwLCB1bmRlcldpZHRoOiAwIH07XG5cbiAgICBlbGVtZW50cy5mb3JFYWNoKChlbGVtZW50KSA9PiB7XG4gICAgICBpZiAoIWVsZW1lbnQuYnJhbmNoZXM/Lmxlbmd0aCkge1xuICAgICAgICAvLyB0w61uaCBjaGnhu4F1IGNhbyBj4bunYSB04burbmcgZWxlbWVudCAxLCB2w6wgY2hp4buBdSBjYW8gY+G7p2EgdOG7q25nIHRo4bqxbmcgY8OzIHRo4buDIGtow6FjIG5oYXVcbiAgICAgICAgaWYgKChlbGVtZW50LnNwZWNpZmljX3dpZHRoID8/IDApIDwgbWF4V2lkdGhJbkVsZW1lbnRzLndpZHRoKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHdpZHRoID0gZWxlbWVudC5zcGVjaWZpY193aWR0aCA/PyAwO1xuXG4gICAgICAgIG1heFdpZHRoSW5FbGVtZW50cy53aWR0aCA9IHdpZHRoO1xuICAgICAgICBtYXhXaWR0aEluRWxlbWVudHMuYWJvdmVXaWR0aCA9IHdpZHRoIC8gMjtcbiAgICAgICAgbWF4V2lkdGhJbkVsZW1lbnRzLnVuZGVyV2lkdGggPSB3aWR0aCAvIDI7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3Qgd2lkdGhFbGVtZW50SW5jbHVkZUJyYW5jaCA9IHsgd2lkdGg6IDAsIGFib3ZlV2lkdGg6IDAsIHVuZGVyV2lkdGg6IDAgfTtcbiAgICAgIGNvbnN0IHdpZHRoID0gZWxlbWVudC5zcGVjaWZpY193aWR0aCA/PyAwO1xuXG4gICAgICBpZiAod2lkdGggPiB3aWR0aEVsZW1lbnRJbmNsdWRlQnJhbmNoLndpZHRoKSB7XG4gICAgICAgIHdpZHRoRWxlbWVudEluY2x1ZGVCcmFuY2gud2lkdGggPSB3aWR0aDtcbiAgICAgICAgd2lkdGhFbGVtZW50SW5jbHVkZUJyYW5jaC5hYm92ZVdpZHRoID0gd2lkdGggLyAyO1xuICAgICAgICB3aWR0aEVsZW1lbnRJbmNsdWRlQnJhbmNoLnVuZGVyV2lkdGggPSB3aWR0aCAvIDI7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGhhbGYgPSBNYXRoLmNlaWwoZWxlbWVudC5icmFuY2hlcy5sZW5ndGggLyAyKTtcbiAgICAgIGNvbnN0IGFib3ZlSGFsZiA9IGVsZW1lbnQuYnJhbmNoZXMuc2xpY2UoMCwgaGFsZik7XG4gICAgICBjb25zdCB1bmRlckhhbGYgPSBlbGVtZW50LmJyYW5jaGVzLnNsaWNlKGhhbGYpO1xuICAgICAgbGV0IGJyYWNoTWlkZGxlO1xuXG4gICAgICBpZiAoYWJvdmVIYWxmLmxlbmd0aCAhPT0gdW5kZXJIYWxmLmxlbmd0aCkge1xuICAgICAgICBicmFjaE1pZGRsZSA9IGFib3ZlSGFsZi5wb3AoKTtcbiAgICAgIH1cbiAgICAgIGlmIChicmFjaE1pZGRsZSkge1xuICAgICAgICBicmFjaE1pZGRsZS5vblRoZVNpZGUgPSAnY2VudGVyJztcbiAgICAgIH1cbiAgICAgIGFib3ZlSGFsZi5mb3JFYWNoKChicmFuY2gpID0+IChicmFuY2gub25UaGVTaWRlID0gJ2Fib3ZlJykpO1xuICAgICAgdW5kZXJIYWxmLmZvckVhY2goKGJyYW5jaCkgPT4gKGJyYW5jaC5vblRoZVNpZGUgPSAndW5kZXInKSk7XG5cbiAgICAgIC8vIHTDrW5oIGNoaeG7gXUgY2FvIGPhu6dhIHThu6tuZyBuaMOhbmggMSwgcuG7k2kgdMOtbmggdOG7lW5nID0+IHNvIHPDoW5oIHbhu5tpIGNoaeG7gXUgY2FvIHhlbSBlbGVtZW50IGPDsyBuaMOhbmggbsOgbyBjYW8gbmjhuqV0IHRow6wgbOG6pXlcbiAgICAgIGNvbnN0IHdpZHRoQnJhbmNoID0geyB3aWR0aDogMCwgYWJvdmVXaWR0aDogMCwgdW5kZXJXaWR0aDogMCB9O1xuXG4gICAgICBlbGVtZW50LmJyYW5jaGVzLmZvckVhY2goKGJyYW5jaCkgPT4ge1xuICAgICAgICBjb25zdCB3aWR0aCA9IHsgd2lkdGg6IDAsIGFib3ZlV2lkdGg6IDAsIHVuZGVyV2lkdGg6IDAgfTsgLy8gdMOtbmggY2hp4buBdSBjYW8gY+G7p2EgdOG7q25nIG5ow6FuaCAxXG5cbiAgICAgICAgdGhpcy5jYWxjdWxhdG9yV2lkdGhCcmFuY2goYnJhbmNoLmVsZW1lbnRzLCB3aWR0aCwgbG9nKTtcbiAgICAgICAgc3dpdGNoIChicmFuY2gub25UaGVTaWRlKSB7XG4gICAgICAgICAgY2FzZSAnYWJvdmUnOlxuICAgICAgICAgICAgd2lkdGhCcmFuY2guYWJvdmVXaWR0aCArPSB3aWR0aC53aWR0aDtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAndW5kZXInOlxuICAgICAgICAgICAgd2lkdGhCcmFuY2gudW5kZXJXaWR0aCArPSB3aWR0aC53aWR0aDtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAnY2VudGVyJzpcbiAgICAgICAgICAgIHdpZHRoQnJhbmNoLmFib3ZlV2lkdGggKz0gd2lkdGguYWJvdmVXaWR0aDtcbiAgICAgICAgICAgIHdpZHRoQnJhbmNoLnVuZGVyV2lkdGggKz0gd2lkdGgudW5kZXJXaWR0aDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgY29uc3QgbWFyZ2luQmV0d2VlbkJyYW5jaCA9IChlbGVtZW50LmJyYW5jaGVzLmxlbmd0aCAtIDEpICogY2FudmFzQ29uZmlnUmVhZG9ubHkoKS5FTEVNRU5UX01BUkdJTl9CRVRXRUVOX0JSQU5DSF9ERUZBVUxUO1xuXG4gICAgICB3aWR0aEJyYW5jaC5hYm92ZVdpZHRoICs9IG1hcmdpbkJldHdlZW5CcmFuY2ggLyAyO1xuICAgICAgd2lkdGhCcmFuY2gudW5kZXJXaWR0aCArPSBtYXJnaW5CZXR3ZWVuQnJhbmNoIC8gMjtcbiAgICAgIGNvbnN0IG1heEFib3ZlV2lkdGggPSBNYXRoLm1heCh3aWR0aEVsZW1lbnRJbmNsdWRlQnJhbmNoLmFib3ZlV2lkdGgsIHdpZHRoQnJhbmNoLmFib3ZlV2lkdGgpO1xuICAgICAgY29uc3QgbWF4VW5kZXJXaWR0aCA9IE1hdGgubWF4KHdpZHRoRWxlbWVudEluY2x1ZGVCcmFuY2gudW5kZXJXaWR0aCwgd2lkdGhCcmFuY2gudW5kZXJXaWR0aCk7XG5cbiAgICAgIGlmIChtYXhXaWR0aEluRWxlbWVudHMuYWJvdmVXaWR0aCA8IG1heEFib3ZlV2lkdGgpIHtcbiAgICAgICAgbWF4V2lkdGhJbkVsZW1lbnRzLmFib3ZlV2lkdGggPSBtYXhBYm92ZVdpZHRoO1xuICAgICAgfVxuICAgICAgaWYgKG1heFdpZHRoSW5FbGVtZW50cy51bmRlcldpZHRoIDwgbWF4VW5kZXJXaWR0aCkge1xuICAgICAgICBtYXhXaWR0aEluRWxlbWVudHMudW5kZXJXaWR0aCA9IG1heFVuZGVyV2lkdGg7XG4gICAgICB9XG5cbiAgICAgIG1heFdpZHRoSW5FbGVtZW50cy53aWR0aCA9IG1heFdpZHRoSW5FbGVtZW50cy5hYm92ZVdpZHRoICsgbWF4V2lkdGhJbkVsZW1lbnRzLnVuZGVyV2lkdGg7XG4gICAgfSk7XG5cbiAgICBtYXhXaWR0aC53aWR0aCArPSBtYXhXaWR0aEluRWxlbWVudHMuYWJvdmVXaWR0aCArIG1heFdpZHRoSW5FbGVtZW50cy51bmRlcldpZHRoO1xuICAgIG1heFdpZHRoLmFib3ZlV2lkdGggKz0gbWF4V2lkdGhJbkVsZW1lbnRzLmFib3ZlV2lkdGg7XG4gICAgbWF4V2lkdGgudW5kZXJXaWR0aCArPSBtYXhXaWR0aEluRWxlbWVudHMudW5kZXJXaWR0aDtcbiAgfVxufVxuXG5jb25zdCBjaGVja0VsZW1lbnRHZXRIZWlnaHQgPSAoaGFzV2FpdENvbmZpZz86IElEaWFncmFtRWxlbWVudCkgPT4ge1xuICBpZiAoaGFzV2FpdENvbmZpZykge1xuICAgIHJldHVybiBjYW52YXNDb25maWdSZWFkb25seSgpLkRJU1RBTkNFX1RPX1dBSVQgKyBnZXRIZWlnaHRXYWl0Q29uZmlnKGhhc1dhaXRDb25maWcpICsgY2FudmFzQ29uZmlnUmVhZG9ubHkoKS5XQUlUX1RPX0VMRU1FTlQ7XG4gIH1cblxuICByZXR1cm4gY2FudmFzQ29uZmlnUmVhZG9ubHkoKS5FTEVNRU5UX01BUkdJTl9ERUZBVUxUO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldERpc3RhbmNlRnJvbUJyYW5jaFRvRmlyc3RCbG9jayA9IChoYXNXYWl0Q29uZmlnPzogSURpYWdyYW1FbGVtZW50KSA9PiB7XG4gIGlmIChoYXNXYWl0Q29uZmlnKSB7XG4gICAgcmV0dXJuIGNhbnZhc0NvbmZpZ1JlYWRvbmx5KCkuRElTVEFOQ0VfVE9fV0FJVCArIGdldEhlaWdodFdhaXRDb25maWcoaGFzV2FpdENvbmZpZykgKyBjYW52YXNDb25maWdSZWFkb25seSgpLldBSVRfVE9fRUxFTUVOVDtcbiAgfVxuXG4gIHJldHVybiBjYW52YXNDb25maWdSZWFkb25seSgpLkVMRU1FTlRfTUFSR0lOX0RFRkFVTFRfQlJBTkNIX1RPX0VMRU1FTlRfRklSU1Q7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0SGVpZ2h0V2FpdENvbmZpZyA9IChoYXNXYWl0Q29uZmlnPzogSURpYWdyYW1FbGVtZW50KSA9PiB7XG4gIGlmIChoYXNXYWl0Q29uZmlnKSB7XG4gICAgcmV0dXJuIChoYXNXYWl0Q29uZmlnLnNwZWNpZmljX2hlaWdodCA/PyBjYW52YXNDb25maWdSZWFkb25seSgpLkVMRU1FTlRfV0FJVF9ERUZBVUxUKSArIGNhbnZhc0NvbmZpZ1JlYWRvbmx5KCkuRElTVEFOQ0VfV0FJVF9UT19ORVhUX0xJTkU7XG4gIH1cblxuICByZXR1cm4gY2FudmFzQ29uZmlnUmVhZG9ubHkoKS5FTEVNRU5UX1dBSVRfREVGQVVMVCArIGNhbnZhc0NvbmZpZ1JlYWRvbmx5KCkuRElTVEFOQ0VfV0FJVF9UT19ORVhUX0xJTkU7XG59O1xuXG5leHBvcnQgY29uc3QgY2hlY2tNYXhMZWZ0ID0gKGNvbmZpZzogSURhdGFEaWFncmFtQ29uZmlnU3ZnLCBzcGVjaWZpY194OiBudW1iZXIgfCB1bmRlZmluZWQsIHBvc2l0aW9uTWF4TGVmdDogbnVtYmVyIHwgdW5kZWZpbmVkKSA9PiB7XG4gIGxldCBudW1iZXJUcmFuc2xhdGVQb3NpdGlvbiA9IGNvbmZpZy5wb3NpdGlvbk1heExlZnQ7XG5cbiAgaWYgKG51bWJlclRyYW5zbGF0ZVBvc2l0aW9uID09PSAwICYmIHNwZWNpZmljX3ggJiYgc3BlY2lmaWNfeCA+IDAgJiYgc3BlY2lmaWNfeCA8IDUwKSB7XG4gICAgbnVtYmVyVHJhbnNsYXRlUG9zaXRpb24gPSAtNTA7XG4gIH1cblxuICBpZiAoc3BlY2lmaWNfeCAmJiBzcGVjaWZpY194IDwgbnVtYmVyVHJhbnNsYXRlUG9zaXRpb24pIHtcbiAgICBudW1iZXJUcmFuc2xhdGVQb3NpdGlvbiA9IHNwZWNpZmljX3g7XG4gIH1cblxuICBpZiAocG9zaXRpb25NYXhMZWZ0ICYmIHBvc2l0aW9uTWF4TGVmdCA8IG51bWJlclRyYW5zbGF0ZVBvc2l0aW9uKSB7XG4gICAgbnVtYmVyVHJhbnNsYXRlUG9zaXRpb24gPSBwb3NpdGlvbk1heExlZnQ7XG4gIH1cbiAgaWYgKG51bWJlclRyYW5zbGF0ZVBvc2l0aW9uID09PSBjb25maWcucG9zaXRpb25NYXhMZWZ0KSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbmZpZy5wb3NpdGlvbk1heExlZnQgPSBudW1iZXJUcmFuc2xhdGVQb3NpdGlvbjtcbn07XG5cbmV4cG9ydCBjb25zdCBjaGVja01heFRvcCA9IChjb25maWc6IElEYXRhRGlhZ3JhbUNvbmZpZ1N2Zywgc3BlY2lmaWNfeTogbnVtYmVyIHwgdW5kZWZpbmVkLCBwb3NpdGlvbk1heFRvcDogbnVtYmVyIHwgdW5kZWZpbmVkKSA9PiB7XG4gIGxldCBudW1iZXJUcmFuc2xhdGVQb3NpdGlvbiA9IGNvbmZpZy5wb3NpdGlvbk1heFRvcDtcblxuICBpZiAobnVtYmVyVHJhbnNsYXRlUG9zaXRpb24gPT09IDAgJiYgc3BlY2lmaWNfeSAmJiBzcGVjaWZpY195ID4gMCAmJiBzcGVjaWZpY195IDwgMTAwKSB7XG4gICAgbnVtYmVyVHJhbnNsYXRlUG9zaXRpb24gPSBzcGVjaWZpY195IC0gMTIwO1xuICB9XG5cbiAgaWYgKHNwZWNpZmljX3kgJiYgc3BlY2lmaWNfeSA8IG51bWJlclRyYW5zbGF0ZVBvc2l0aW9uKSB7XG4gICAgbnVtYmVyVHJhbnNsYXRlUG9zaXRpb24gPSBzcGVjaWZpY195O1xuICB9XG5cbiAgaWYgKHBvc2l0aW9uTWF4VG9wICYmIHBvc2l0aW9uTWF4VG9wIDwgbnVtYmVyVHJhbnNsYXRlUG9zaXRpb24pIHtcbiAgICBudW1iZXJUcmFuc2xhdGVQb3NpdGlvbiA9IHBvc2l0aW9uTWF4VG9wO1xuICB9XG4gIGlmIChudW1iZXJUcmFuc2xhdGVQb3NpdGlvbiA9PT0gY29uZmlnLnBvc2l0aW9uTWF4VG9wKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbmZpZy5wb3NpdGlvbk1heFRvcCA9IG51bWJlclRyYW5zbGF0ZVBvc2l0aW9uO1xufTtcbiJdfQ==
@@ -2,18 +2,18 @@ export class LibsUiDiagramDrawCanvasUtil {
2
2
  static buildFlatElement(elements, flatElementsContainer) {
3
3
  elements.forEach((element) => {
4
4
  flatElementsContainer.push(element);
5
- if (!element.branches || !element.branches.length) {
5
+ if (!element.branches?.length) {
6
6
  return;
7
7
  }
8
8
  LibsUiDiagramDrawCanvasUtil.flatElementHasBranch(element, flatElementsContainer);
9
9
  });
10
10
  }
11
11
  static flatElementHasBranch(element, flatElementsContainer) {
12
- if (!element.branches || !element.branches.length) {
12
+ if (!element.branches?.length) {
13
13
  return;
14
14
  }
15
15
  element.branches.forEach((branch) => {
16
- if (!branch.elements || !branch.elements.length) {
16
+ if (!branch.elements?.length) {
17
17
  return;
18
18
  }
19
19
  LibsUiDiagramDrawCanvasUtil.buildFlatElement(branch.elements, flatElementsContainer);
@@ -28,11 +28,11 @@ export class LibsUiDiagramDrawCanvasUtil {
28
28
  * data.count: số lượng branch có next_id đến idElement
29
29
  */
30
30
  static getBranchContainerAndCountElementHasNextIdToElement(element, idElement, data, flowFlatElements) {
31
- if (!element || !element.branches) {
31
+ if (!element?.branches) {
32
32
  return;
33
33
  }
34
34
  element.branches.forEach((branch) => {
35
- if (!branch.elements || !branch.elements.length) {
35
+ if (!branch.elements?.length) {
36
36
  data.count++;
37
37
  data.branchContainer = branch;
38
38
  data.branchEmpty++;
@@ -42,7 +42,7 @@ export class LibsUiDiagramDrawCanvasUtil {
42
42
  if (!lastElement.next_id) {
43
43
  return;
44
44
  }
45
- if (lastElement.branches && lastElement.branches.length) {
45
+ if (lastElement.branches?.length) {
46
46
  const dataOfLastElement = this.getDefaultStorageBranchEndCount();
47
47
  LibsUiDiagramDrawCanvasUtil.getBranchContainerAndCountElementHasNextIdToElement(lastElement, idElement, dataOfLastElement, flowFlatElements);
48
48
  if (!dataOfLastElement.count) {
@@ -52,7 +52,8 @@ export class LibsUiDiagramDrawCanvasUtil {
52
52
  data.count++;
53
53
  data.branchContainer = branch;
54
54
  if (dataOfLastElement.count === 1) {
55
- return (data.branchContainer = dataOfLastElement.branchContainer);
55
+ data.branchContainer = dataOfLastElement.branchContainer;
56
+ return;
56
57
  }
57
58
  return;
58
59
  }
@@ -62,7 +63,6 @@ export class LibsUiDiagramDrawCanvasUtil {
62
63
  }
63
64
  data.count++;
64
65
  data.branchContainer = branch;
65
- return;
66
66
  });
67
67
  }
68
68
  static getElementHasCurrentBranchOrCurrentElement(currentBranch, currentElement, flatElements) {
@@ -70,15 +70,15 @@ export class LibsUiDiagramDrawCanvasUtil {
70
70
  currentBranch: undefined,
71
71
  element: undefined,
72
72
  };
73
- if (!flatElements || !flatElements.length || (!currentBranch && !currentElement)) {
73
+ if (!flatElements?.length || (!currentBranch && !currentElement)) {
74
74
  return data;
75
75
  }
76
76
  if (!currentElement) {
77
77
  data.currentBranch = currentBranch;
78
- data.element = flatElements.find((el) => el.branches && !!el.branches.find((branch) => branch === currentBranch));
78
+ data.element = flatElements.find((el) => !!el.branches?.find((branch) => branch === currentBranch));
79
79
  return data;
80
80
  }
81
- const elementsHasBranches = flatElements.filter((item) => item.branches && item.branches.length);
81
+ const elementsHasBranches = flatElements.filter((item) => item.branches?.length);
82
82
  if (!elementsHasBranches) {
83
83
  return data;
84
84
  }
@@ -88,7 +88,7 @@ export class LibsUiDiagramDrawCanvasUtil {
88
88
  return data;
89
89
  }
90
90
  for (const branch of branches) {
91
- if (!branch.elements || !branch.elements.length) {
91
+ if (!branch.elements?.length) {
92
92
  continue;
93
93
  }
94
94
  if (branch.elements.find((item) => item.id === currentElement.id)) {
@@ -107,11 +107,11 @@ export class LibsUiDiagramDrawCanvasUtil {
107
107
  containerElement.splice(+index, 1);
108
108
  return true;
109
109
  }
110
- if (!elementOfIndex.branches || !elementOfIndex.branches.length) {
110
+ if (!elementOfIndex.branches?.length) {
111
111
  continue;
112
112
  }
113
113
  for (const branch of elementOfIndex.branches) {
114
- if (!branch.elements || !branch.elements.length) {
114
+ if (!branch.elements?.length) {
115
115
  continue;
116
116
  }
117
117
  if (this.findAndDeleteElementFromContainer(branch.elements, elementDelete)) {
@@ -127,7 +127,7 @@ export class LibsUiDiagramDrawCanvasUtil {
127
127
  return;
128
128
  }
129
129
  for (const item of flatElementHasBranch) {
130
- if (!item.branches || !item.branches.length) {
130
+ if (!item.branches?.length) {
131
131
  continue;
132
132
  }
133
133
  for (const branch of item.branches) {
@@ -159,11 +159,11 @@ export const findAndDeleteElementFromContainer = (containerElement, elementDelet
159
159
  containerElement.splice(+index, 1);
160
160
  return true;
161
161
  }
162
- if (!elementOfIndex.branches || !elementOfIndex.branches.length) {
162
+ if (!elementOfIndex.branches?.length) {
163
163
  continue;
164
164
  }
165
165
  for (const branch of elementOfIndex.branches) {
166
- if (!branch.elements || !branch.elements.length) {
166
+ if (!branch.elements?.length) {
167
167
  continue;
168
168
  }
169
169
  if (findAndDeleteElementFromContainer(branch.elements, elementDelete)) {
@@ -173,4 +173,4 @@ export const findAndDeleteElementFromContainer = (containerElement, elementDelet
173
173
  }
174
174
  return false;
175
175
  };
176
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FudmFzLnV0aWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL3NlcnZpY2VzL2RpYWdyYW0tZHJhdy9zcmMvdXRpbHMvY2FudmFzLnV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsTUFBTSxPQUFPLDJCQUEyQjtJQUN0QyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsUUFBZ0MsRUFBRSxxQkFBNkM7UUFDckcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQzNCLHFCQUFxQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNwQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ2xELE9BQU87WUFDVCxDQUFDO1lBQ0QsMkJBQTJCLENBQUMsb0JBQW9CLENBQUMsT0FBTyxFQUFFLHFCQUFxQixDQUFDLENBQUM7UUFDbkYsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsTUFBTSxDQUFDLG9CQUFvQixDQUFDLE9BQXdCLEVBQUUscUJBQTZDO1FBQ2pHLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNsRCxPQUFPO1FBQ1QsQ0FBQztRQUNELE9BQU8sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDbEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUNoRCxPQUFPO1lBQ1QsQ0FBQztZQUNELDJCQUEyQixDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxRQUE2QixFQUFFLHFCQUFxQixDQUFDLENBQUM7UUFDNUcsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lB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RSxFQUFFLENBQUM7WUFDM0MsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBRW5DLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUNELElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNoRSxTQUFTO1FBQ1gsQ0FBQztRQUVELEtBQUssTUFBTSxNQUFNLElBQUksY0FBYyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQzdDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDaEQsU0FBUztZQUNYLENBQUM7WUFDRCxJQUFJLGlDQUFpQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsYUFBYSxDQUFDLEVBQUUsQ0FBQztnQkFDdEUsT0FBTyxJQUFJLENBQUM7WUFDZCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElCcmFuY2hFbmRDb3VudCB9IGZyb20gJy4uL2ludGVyZmFjZXMvY2FudmFzLmludGVyZmFjZSc7XG5pbXBvcnQgeyBJRGlhZ3JhbUVsZW1lbnQsIElEaWFncmFtRWxlbWVudEJyYW5jaCB9IGZyb20gJy4uL2ludGVyZmFjZXMvZGlhZ3JhbS5pbnRlcmZhY2UnO1xuXG5leHBvcnQgY2xhc3MgTGlic1VpRGlhZ3JhbURyYXdDYW52YXNVdGlsIHtcbiAgc3RhdGljIGJ1aWxkRmxhdEVsZW1lbnQoZWxlbWVudHM6IEFycmF5PElEaWFncmFtRWxlbWVudD4sIGZsYXRFbGVtZW50c0NvbnRhaW5lcjogQXJyYXk8SURpYWdyYW1FbGVtZW50Pikge1xuICAgIGVsZW1lbnRzLmZvckVhY2goKGVsZW1lbnQpID0+IHtcbiAgICAgIGZsYXRFbGVtZW50c0NvbnRhaW5lci5wdXNoKGVsZW1lbnQpO1xuICAgICAgaWYgKCFlbGVtZW50LmJyYW5jaGVzIHx8ICFlbGVtZW50LmJyYW5jaGVzLmxlbmd0aCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBMaWJzVWlEaWFncmFtRHJhd0NhbnZhc1V0aWwuZmxhdEVsZW1lbnRIYXNCcmFuY2goZWxlbWVudCwgZmxhdEVsZW1lbnRzQ29udGFpbmVyKTtcbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBmbGF0RWxlbWVudEhhc0JyYW5jaChlbGVtZW50OiBJRGlhZ3JhbUVsZW1lbnQsIGZsYXRFbGVtZW50c0NvbnRhaW5lcjogQXJyYXk8SURpYWdyYW1FbGVtZW50Pikge1xuICAgIGlmICghZWxlbWVudC5icmFuY2hlcyB8fCAhZWxlbWVudC5icmFuY2hlcy5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZWxlbWVudC5icmFuY2hlcy5mb3JFYWNoKChicmFuY2gpID0+IHtcbiAgICAgIGlmICghYnJhbmNoLmVsZW1lbnRzIHx8ICFicmFuY2guZWxlbWVudHMubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIExpYnNVaURpYWdyYW1EcmF3Q2FudmFzVXRpbC5idWlsZEZsYXRFbGVtZW50KGJyYW5jaC5lbGVtZW50cyBhcyBJRGlhZ3JhbUVsZW1lbnRbXSwgZmxhdEVsZW1lbnRzQ29udGFpbmVyKTtcbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBnZXREZWZhdWx0U3RvcmFnZUJyYW5jaEVuZENvdW50KCk6IElCcmFuY2hFbmRDb3VudCB7XG4gICAgcmV0dXJuIHsgYnJhbmNoQ29udGFpbmVyOiB1bmRlZmluZWQsIGNvdW50OiAwLCBicmFuY2hFbXB0eTogMCB9O1xuICB9XG5cbiAgLyoqXG4gICAqIGRhdGE6IHPhu60gZOG7pW5nIHJlZmVyZW5jZSBPYmplY3QgdHlwZSBuw6puIGNvdW50IHPhur0gxJHhu4cgcXV5IGNobyDEkeG6v24gbm9kZSBjdeG7kWkgY8O5bmdcbiAgICogZGF0YS5icmFuY2hDb250YWluZXI6IGJyYW5jaCBjdeG7kWkgY8O5bmcgY+G7p2EgZWxlbWVudCBraMO0bmcgbmV4dCDEkeG6v24gaWRFbGVtZW50XG4gICAqIGRhdGEuY291bnQ6IHPhu5EgbMaw4bujbmcgYnJhbmNoIGPDsyBuZXh0X2lkIMSR4bq/biBpZEVsZW1lbnRcbiAgICovXG4gIHN0YXRpYyBnZXRCcmFuY2hDb250YWluZXJBbmRDb3VudEVsZW1lbnRIYXNOZXh0SWRUb0VsZW1lbnQoZWxlbWVudDogSURpYWdyYW1FbGVtZW50LCBpZEVsZW1lbnQ6IHN0cmluZyB8IHVuZGVmaW5lZCwgZGF0YTogSUJyYW5jaEVuZENvdW50LCBmbG93RmxhdEVsZW1lbnRzOiBBcnJheTxJRGlhZ3JhbUVsZW1lbnQ+KSB7XG4gICAgaWYgKCFlbGVtZW50IHx8ICFlbGVtZW50LmJyYW5jaGVzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGVsZW1lbnQuYnJhbmNoZXMuZm9yRWFjaCgoYnJhbmNoKSA9PiB7XG4gICAgICBpZiAoIWJyYW5jaC5lbGVtZW50cyB8fCAhYnJhbmNoLmVsZW1lbnRzLmxlbmd0aCkge1xuICAgICAgICBkYXRhLmNvdW50Kys7XG4gICAgICAgIGRhdGEuYnJhbmNoQ29udGFpbmVyID0gYnJhbmNoO1xuICAgICAgICBkYXRhLmJyYW5jaEVtcHR5Kys7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgbGFzdEVsZW1lbnQgPSBicmFuY2guZWxlbWVudHNbYnJhbmNoLmVsZW1lbnRzLmxlbmd0aCAtIDFdO1xuXG4gICAgICBpZiAoIWxhc3RFbGVtZW50Lm5leHRfaWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGxhc3RFbGVtZW50LmJyYW5jaGVzICYmIGxhc3RFbGVtZW50LmJyYW5jaGVzLmxlbmd0aCkge1xuICAgICAgICBjb25zdCBkYXRhT2ZMYXN0RWxlbWVudCA9IHRoaXMuZ2V0RGVmYXVsdFN0b3JhZ2VCcmFuY2hFbmRDb3VudCgpO1xuXG4gICAgICAgIExpYnNVaURpYWdyYW1EcmF3Q2FudmFzVXRpbC5nZXRCcmFuY2hDb250YWluZXJBbmRDb3VudEVsZW1lbnRIYXNOZXh0SWRUb0VsZW1lbnQobGFzdEVsZW1lbnQgYXMgSURpYWdyYW1FbGVtZW50LCBpZEVsZW1lbnQsIGRhdGFPZkxhc3RFbGVtZW50LCBmbG93RmxhdEVsZW1lbnRzKTtcbiAgICAgICAgaWYgKCFkYXRhT2ZMYXN0RWxlbWVudC5jb3VudCkge1xuICAgICAgICAgIGxhc3RFbGVtZW50Lm5leHRfaWQgPSAnJztcblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBkYXRhLmNvdW50Kys7XG4gICAgICAgIGRhdGEuYnJhbmNoQ29udGFpbmVyID0gYnJhbmNoO1xuICAgICAgICBpZiAoZGF0YU9mTGFzdEVsZW1lbnQuY291bnQgPT09IDEpIHtcbiAgICAgICAgICByZXR1cm4gKGRhdGEuYnJhbmNoQ29udGFpbmVyID0gZGF0YU9mTGFzdEVsZW1lbnQuYnJhbmNoQ29udGFpbmVyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG5leHRPZkxhc3RFbGVtZW50ID0gZmxvd0ZsYXRFbGVtZW50cy5maW5kKChlbCkgPT4gZWwuaWQgPT09IGxhc3RFbGVtZW50Lm5leHRfaWQpO1xuXG4gICAgICBpZiAobmV4dE9mTGFzdEVsZW1lbnQgJiYgbmV4dE9mTGFzdEVsZW1lbnQuaWQgIT09IGlkRWxlbWVudCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBkYXRhLmNvdW50Kys7XG4gICAgICBkYXRhLmJyYW5jaENvbnRhaW5lciA9IGJyYW5jaDtcblxuICAgICAgcmV0dXJuO1xuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIGdldEVsZW1lbnRIYXNDdXJyZW50QnJhbmNoT3JDdXJyZW50RWxlbWVudChjdXJyZW50QnJhbmNoPzogSURpYWdyYW1FbGVtZW50QnJhbmNoLCBjdXJyZW50RWxlbWVudD86IElEaWFncmFtRWxlbWVudCwgZmxhdEVsZW1lbnRzPzogQXJyYXk8SURpYWdyYW1FbGVtZW50Pik6IHsgY3VycmVudEJyYW5jaD86IElEaWFncmFtRWxlbWVudEJyYW5jaDsgZWxlbWVudD86IElEaWFncmFtRWxlbWVudCB9IHtcbiAgICBjb25zdCBkYXRhOiB7IGN1cnJlbnRCcmFuY2g/OiBJRGlhZ3JhbUVsZW1lbnRCcmFuY2g7IGVsZW1lbnQ/OiBJRGlhZ3JhbUVsZW1lbnQgfSA9IHtcbiAgICAgIGN1cnJlbnRCcmFuY2g6IHVuZGVmaW5lZCxcbiAgICAgIGVsZW1lbnQ6IHVuZGVmaW5lZCxcbiAgICB9O1xuXG4gICAgaWYgKCFmbGF0RWxlbWVudHMgfHwgIWZsYXRFbGVtZW50cy5sZW5ndGggfHwgKCFjdXJyZW50QnJhbmNoICYmICFjdXJyZW50RWxlbWVudCkpIHtcbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGlmICghY3VycmVudEVsZW1lbnQpIHtcbiAgICAgIGRhdGEuY3VycmVudEJyYW5jaCA9IGN1cnJlbnRCcmFuY2g7XG4gICAgICBkYXRhLmVsZW1lbnQgPSBmbGF0RWxlbWVudHMuZmluZCgoZWwpID0+IGVsLmJyYW5jaGVzICYmICEhZWwuYnJhbmNoZXMuZmluZCgoYnJhbmNoKSA9PiBicmFuY2ggPT09IGN1cnJlbnRCcmFuY2gpKTtcblxuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuICAgIGNvbnN0IGVsZW1lbnRzSGFzQnJhbmNoZXMgPSBmbGF0RWxlbWVudHMuZmlsdGVyKChpdGVtKSA9PiBpdGVtLmJyYW5jaGVzICYmIGl0ZW0uYnJhbmNoZXMubGVuZ3RoKTtcblxuICAgIGlmICghZWxlbWVudHNIYXNCcmFuY2hlcykge1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiBlbGVtZW50c0hhc0JyYW5jaGVzKSB7XG4gICAgICBjb25zdCBicmFuY2hlcyA9IGVsZW1lbnQuYnJhbmNoZXM7XG5cbiAgICAgIGlmICghYnJhbmNoZXMpIHtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICB9XG4gICAgICBmb3IgKGNvbnN0IGJyYW5jaCBvZiBicmFuY2hlcykge1xuICAgICAgICBpZiAoIWJyYW5jaC5lbGVtZW50cyB8fCAhYnJhbmNoLmVsZW1lbnRzLmxlbmd0aCkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChicmFuY2guZWxlbWVudHMuZmluZCgoaXRlbSkgPT4gaXRlbS5pZCA9PT0gY3VycmVudEVsZW1lbnQuaWQpKSB7XG4gICAgICAgICAgZGF0YS5jdXJyZW50QnJhbmNoID0gYnJhbmNoO1xuICAgICAgICAgIGRhdGEuZWxlbWVudCA9IGVsZW1lbnQ7XG5cbiAgICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgc3RhdGljIGZpbmRBbmREZWxldGVFbGVtZW50RnJvbUNvbnRhaW5lcihjb250YWluZXJFbGVtZW50OiBBcnJheTxJRGlhZ3JhbUVsZW1lbnQ+LCBlbGVtZW50RGVsZXRlOiBJRGlhZ3JhbUVsZW1lbnQpOiBib29sZWFuIHtcbiAgICBmb3IgKGNvbnN0IGluZGV4IGluIGNvbnRhaW5lckVsZW1lbnQpIHtcbiAgICAgIGNvbnN0IGVsZW1lbnRPZkluZGV4ID0gY29udGFpbmVyRWxlbWVudFtpbmRleF07XG5cbiAgICAgIGlmIChlbGVtZW50T2ZJbmRleC5pZCA9PT0gZWxlbWVudERlbGV0ZS5pZCkge1xuICAgICAgICBjb250YWluZXJFbGVtZW50LnNwbGljZSgraW5kZXgsIDEpO1xuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKCFlbGVtZW50T2ZJbmRleC5icmFuY2hlcyB8fCAhZWxlbWVudE9mSW5kZXguYnJhbmNoZXMubGVuZ3RoKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IGJyYW5jaCBvZiBlbGVtZW50T2ZJbmRleC5icmFuY2hlcykge1xuICAgICAgICBpZiAoIWJyYW5jaC5lbGVtZW50cyB8fCAhYnJhbmNoLmVsZW1lbnRzLmxlbmd0aCkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmZpbmRBbmREZWxldGVFbGVtZW50RnJvbUNvbnRhaW5lcihicmFuY2guZWxlbWVudHMsIGVsZW1lbnREZWxldGUpKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGdldEJyYW5jaE9mRWxlbWVudChlbGVtZW50SWQ6IHN0cmluZywgZmxhdEVsZW1lbnRzOiBBcnJheTxJRGlhZ3JhbUVsZW1lbnQ+LCBlbGVtZW50VHlwZVdvcmtmbG93OiBzdHJpbmcpIHtcbiAgICBjb25zdCBmbGF0RWxlbWVudEhhc0JyYW5jaCA9IGZsYXRFbGVtZW50cy5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0uZWxlbWVudF90eXBlID09PSBlbGVtZW50VHlwZVdvcmtmbG93KTtcblxuICAgIGlmICghZmxhdEVsZW1lbnRIYXNCcmFuY2gpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgZmxhdEVsZW1lbnRIYXNCcmFuY2gpIHtcbiAgICAgIGlmICghaXRlbS5icmFuY2hlcyB8fCAhaXRlbS5icmFuY2hlcy5sZW5ndGgpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBmb3IgKGNvbnN0IGJyYW5jaCBvZiBpdGVtLmJyYW5jaGVzKSB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gYnJhbmNoLmVsZW1lbnRzLmZpbmRJbmRleCgoZWwpID0+IGVsLmlkID09PSBlbGVtZW50SWQpO1xuXG4gICAgICAgIGlmIChpbmRleCA9PT0gLTEpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBicmFuY2g7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuO1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCBnZXREZWZhdWx0Q29uZmlnQ29uc3RpdHVlbnRCcmFuY2hlcyA9IChjb2RlOiBzdHJpbmcsIGRhdGFEZWZhdWx0OiBJRGlhZ3JhbUVsZW1lbnQpID0+IHtcbiAgZGF0YURlZmF1bHQuYnJhbmNoZXMgPSBbXG4gICAge1xuICAgICAgZWxlbWVudHM6IFtdLFxuICAgIH0sXG4gICAge1xuICAgICAgZWxlbWVudHM6IFtdLFxuICAgIH0sXG4gIF07XG5cbiAgcmV0dXJuIGRhdGFEZWZhdWx0O1xufTtcblxuZXhwb3J0IGNvbnN0IGZpbmRBbmREZWxldGVFbGVtZW50RnJvbUNvbnRhaW5lciA9IChjb250YWluZXJFbGVtZW50OiBBcnJheTxJRGlhZ3JhbUVsZW1lbnQ+LCBlbGVtZW50RGVsZXRlOiBJRGlhZ3JhbUVsZW1lbnQpOiBib29sZWFuID0+IHtcbiAgZm9yIChjb25zdCBpbmRleCBpbiBjb250YWluZXJFbGVtZW50KSB7XG4gICAgY29uc3QgZWxlbWVudE9mSW5kZXggPSBjb250YWluZXJFbGVtZW50W2luZGV4XTtcblxuICAgIGlmIChlbGVtZW50T2ZJbmRleC5pZCA9PT0gZWxlbWVudERlbGV0ZS5pZCkge1xuICAgICAgY29udGFpbmVyRWxlbWVudC5zcGxpY2UoK2luZGV4LCAxKTtcblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmICghZWxlbWVudE9mSW5kZXguYnJhbmNoZXMgfHwgIWVsZW1lbnRPZkluZGV4LmJyYW5jaGVzLmxlbmd0aCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBicmFuY2ggb2YgZWxlbWVudE9mSW5kZXguYnJhbmNoZXMpIHtcbiAgICAgIGlmICghYnJhbmNoLmVsZW1lbnRzIHx8ICFicmFuY2guZWxlbWVudHMubGVuZ3RoKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKGZpbmRBbmREZWxldGVFbGVtZW50RnJvbUNvbnRhaW5lcihicmFuY2guZWxlbWVudHMsIGVsZW1lbnREZWxldGUpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn07XG4iXX0=
176
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FudmFzLnV0aWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL3NlcnZpY2VzL2RpYWdyYW0tZHJhdy9zcmMvdXRpbHMvY2FudmFzLnV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsTUFBTSxPQUFPLDJCQUEyQjtJQUN0QyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsUUFBZ0MsRUFBRSxxQkFBNkM7UUFDckcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQzNCLHFCQUFxQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNwQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsQ0FBQztnQkFDOUIsT0FBTztZQUNULENBQUM7WUFDRCwyQkFBMkIsQ0FBQyxvQkFBb0IsQ0FBQyxPQUFPLEVBQUUscUJBQXFCLENBQUMsQ0FBQztRQUNuRixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxNQUFNLENBQUMsb0JBQW9CLENBQUMsT0FBd0IsRUFBRSxxQkFBNkM7UUFDakcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLENBQUM7WUFDOUIsT0FBTztRQUNULENBQUM7UUFDRCxPQUFPLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBQ2xDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxDQUFDO2dCQUM3QixPQUFPO1lBQ1QsQ0FBQztZQUNELDJCQUEyQixDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUscUJBQXFCLENBQUMsQ0FBQztRQUN2RixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxNQUFNLENBQUMsK0JBQStCO1FBQ3BDLE9BQU8sRUFBRSxlQUFlLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUs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Q0FBaUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLGFBQWEsQ0FBQyxFQUFFLENBQUM7Z0JBQ3RFLE9BQU8sSUFBSSxDQUFDO1lBQ2QsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJQnJhbmNoRW5kQ291bnQgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2NhbnZhcy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSURpYWdyYW1FbGVtZW50LCBJRGlhZ3JhbUVsZW1lbnRCcmFuY2ggfSBmcm9tICcuLi9pbnRlcmZhY2VzL2RpYWdyYW0uaW50ZXJmYWNlJztcblxuZXhwb3J0IGNsYXNzIExpYnNVaURpYWdyYW1EcmF3Q2FudmFzVXRpbCB7XG4gIHN0YXRpYyBidWlsZEZsYXRFbGVtZW50KGVsZW1lbnRzOiBBcnJheTxJRGlhZ3JhbUVsZW1lbnQ+LCBmbGF0RWxlbWVudHNDb250YWluZXI6IEFycmF5PElEaWFncmFtRWxlbWVudD4pIHtcbiAgICBlbGVtZW50cy5mb3JFYWNoKChlbGVtZW50KSA9PiB7XG4gICAgICBmbGF0RWxlbWVudHNDb250YWluZXIucHVzaChlbGVtZW50KTtcbiAgICAgIGlmICghZWxlbWVudC5icmFuY2hlcz8ubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIExpYnNVaURpYWdyYW1EcmF3Q2FudmFzVXRpbC5mbGF0RWxlbWVudEhhc0JyYW5jaChlbGVtZW50LCBmbGF0RWxlbWVudHNDb250YWluZXIpO1xuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIGZsYXRFbGVtZW50SGFzQnJhbmNoKGVsZW1lbnQ6IElEaWFncmFtRWxlbWVudCwgZmxhdEVsZW1lbnRzQ29udGFpbmVyOiBBcnJheTxJRGlhZ3JhbUVsZW1lbnQ+KSB7XG4gICAgaWYgKCFlbGVtZW50LmJyYW5jaGVzPy5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZWxlbWVudC5icmFuY2hlcy5mb3JFYWNoKChicmFuY2gpID0+IHtcbiAgICAgIGlmICghYnJhbmNoLmVsZW1lbnRzPy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgTGlic1VpRGlhZ3JhbURyYXdDYW52YXNVdGlsLmJ1aWxkRmxhdEVsZW1lbnQoYnJhbmNoLmVsZW1lbnRzLCBmbGF0RWxlbWVudHNDb250YWluZXIpO1xuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIGdldERlZmF1bHRTdG9yYWdlQnJhbmNoRW5kQ291bnQoKTogSUJyYW5jaEVuZENvdW50IHtcbiAgICByZXR1cm4geyBicmFuY2hDb250YWluZXI6IHVuZGVmaW5lZCwgY291bnQ6IDAsIGJyYW5jaEVtcHR5OiAwIH07XG4gIH1cblxuICAvKipcbiAgICogZGF0YTogc+G7rSBk4bulbmcgcmVmZXJlbmNlIE9iamVjdCB0eXBlIG7Dqm4gY291bnQgc+G6vSDEkeG7hyBxdXkgY2hvIMSR4bq/biBub2RlIGN14buRaSBjw7luZ1xuICAgKiBkYXRhLmJyYW5jaENvbnRhaW5lcjogYnJhbmNoIGN14buRaSBjw7luZyBj4bunYSBlbGVtZW50IGtow7RuZyBuZXh0IMSR4bq/biBpZEVsZW1lbnRcbiAgICogZGF0YS5jb3VudDogc+G7kSBsxrDhu6NuZyBicmFuY2ggY8OzIG5leHRfaWQgxJHhur9uIGlkRWxlbWVudFxuICAgKi9cbiAgc3RhdGljIGdldEJyYW5jaENvbnRhaW5lckFuZENvdW50RWxlbWVudEhhc05leHRJZFRvRWxlbWVudChlbGVtZW50OiBJRGlhZ3JhbUVsZW1lbnQsIGlkRWxlbWVudDogc3RyaW5nIHwgdW5kZWZpbmVkLCBkYXRhOiBJQnJhbmNoRW5kQ291bnQsIGZsb3dGbGF0RWxlbWVudHM6IEFycmF5PElEaWFncmFtRWxlbWVudD4pIHtcbiAgICBpZiAoIWVsZW1lbnQ/LmJyYW5jaGVzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGVsZW1lbnQuYnJhbmNoZXMuZm9yRWFjaCgoYnJhbmNoKSA9PiB7XG4gICAgICBpZiAoIWJyYW5jaC5lbGVtZW50cz8ubGVuZ3RoKSB7XG4gICAgICAgIGRhdGEuY291bnQrKztcbiAgICAgICAgZGF0YS5icmFuY2hDb250YWluZXIgPSBicmFuY2g7XG4gICAgICAgIGRhdGEuYnJhbmNoRW1wdHkrKztcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBsYXN0RWxlbWVudCA9IGJyYW5jaC5lbGVtZW50c1ticmFuY2guZWxlbWVudHMubGVuZ3RoIC0gMV07XG5cbiAgICAgIGlmICghbGFzdEVsZW1lbnQubmV4dF9pZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAobGFzdEVsZW1lbnQuYnJhbmNoZXM/Lmxlbmd0aCkge1xuICAgICAgICBjb25zdCBkYXRhT2ZMYXN0RWxlbWVudCA9IHRoaXMuZ2V0RGVmYXVsdFN0b3JhZ2VCcmFuY2hFbmRDb3VudCgpO1xuXG4gICAgICAgIExpYnNVaURpYWdyYW1EcmF3Q2FudmFzVXRpbC5nZXRCcmFuY2hDb250YWluZXJBbmRDb3VudEVsZW1lbnRIYXNOZXh0SWRUb0VsZW1lbnQobGFzdEVsZW1lbnQsIGlkRWxlbWVudCwgZGF0YU9mTGFzdEVsZW1lbnQsIGZsb3dGbGF0RWxlbWVudHMpO1xuICAgICAgICBpZiAoIWRhdGFPZkxhc3RFbGVtZW50LmNvdW50KSB7XG4gICAgICAgICAgbGFzdEVsZW1lbnQubmV4dF9pZCA9ICcnO1xuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGRhdGEuY291bnQrKztcbiAgICAgICAgZGF0YS5icmFuY2hDb250YWluZXIgPSBicmFuY2g7XG4gICAgICAgIGlmIChkYXRhT2ZMYXN0RWxlbWVudC5jb3VudCA9PT0gMSkge1xuICAgICAgICAgIGRhdGEuYnJhbmNoQ29udGFpbmVyID0gZGF0YU9mTGFzdEVsZW1lbnQuYnJhbmNoQ29udGFpbmVyO1xuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgbmV4dE9mTGFzdEVsZW1lbnQgPSBmbG93RmxhdEVsZW1lbnRzLmZpbmQoKGVsKSA9PiBlbC5pZCA9PT0gbGFzdEVsZW1lbnQubmV4dF9pZCk7XG5cbiAgICAgIGlmIChuZXh0T2ZMYXN0RWxlbWVudCAmJiBuZXh0T2ZMYXN0RWxlbWVudC5pZCAhPT0gaWRFbGVtZW50KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGRhdGEuY291bnQrKztcbiAgICAgIGRhdGEuYnJhbmNoQ29udGFpbmVyID0gYnJhbmNoO1xuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIGdldEVsZW1lbnRIYXNDdXJyZW50QnJhbmNoT3JDdXJyZW50RWxlbWVudChjdXJyZW50QnJhbmNoPzogSURpYWdyYW1FbGVtZW50QnJhbmNoLCBjdXJyZW50RWxlbWVudD86IElEaWFncmFtRWxlbWVudCwgZmxhdEVsZW1lbnRzPzogQXJyYXk8SURpYWdyYW1FbGVtZW50Pik6IHsgY3VycmVudEJyYW5jaD86IElEaWFncmFtRWxlbWVudEJyYW5jaDsgZWxlbWVudD86IElEaWFncmFtRWxlbWVudCB9IHtcbiAgICBjb25zdCBkYXRhOiB7IGN1cnJlbnRCcmFuY2g/OiBJRGlhZ3JhbUVsZW1lbnRCcmFuY2g7IGVsZW1lbnQ/OiBJRGlhZ3JhbUVsZW1lbnQgfSA9IHtcbiAgICAgIGN1cnJlbnRCcmFuY2g6IHVuZGVmaW5lZCxcbiAgICAgIGVsZW1lbnQ6IHVuZGVmaW5lZCxcbiAgICB9O1xuXG4gICAgaWYgKCFmbGF0RWxlbWVudHM/Lmxlbmd0aCB8fCAoIWN1cnJlbnRCcmFuY2ggJiYgIWN1cnJlbnRFbGVtZW50KSkge1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgaWYgKCFjdXJyZW50RWxlbWVudCkge1xuICAgICAgZGF0YS5jdXJyZW50QnJhbmNoID0gY3VycmVudEJyYW5jaDtcbiAgICAgIGRhdGEuZWxlbWVudCA9IGZsYXRFbGVtZW50cy5maW5kKChlbCkgPT4gISFlbC5icmFuY2hlcz8uZmluZCgoYnJhbmNoKSA9PiBicmFuY2ggPT09IGN1cnJlbnRCcmFuY2gpKTtcblxuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuICAgIGNvbnN0IGVsZW1lbnRzSGFzQnJhbmNoZXMgPSBmbGF0RWxlbWVudHMuZmlsdGVyKChpdGVtKSA9PiBpdGVtLmJyYW5jaGVzPy5sZW5ndGgpO1xuXG4gICAgaWYgKCFlbGVtZW50c0hhc0JyYW5jaGVzKSB7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBlbGVtZW50IG9mIGVsZW1lbnRzSGFzQnJhbmNoZXMpIHtcbiAgICAgIGNvbnN0IGJyYW5jaGVzID0gZWxlbWVudC5icmFuY2hlcztcblxuICAgICAgaWYgKCFicmFuY2hlcykge1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgIH1cbiAgICAgIGZvciAoY29uc3QgYnJhbmNoIG9mIGJyYW5jaGVzKSB7XG4gICAgICAgIGlmICghYnJhbmNoLmVsZW1lbnRzPy5sZW5ndGgpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYnJhbmNoLmVsZW1lbnRzLmZpbmQoKGl0ZW0pID0+IGl0ZW0uaWQgPT09IGN1cnJlbnRFbGVtZW50LmlkKSkge1xuICAgICAgICAgIGRhdGEuY3VycmVudEJyYW5jaCA9IGJyYW5jaDtcbiAgICAgICAgICBkYXRhLmVsZW1lbnQgPSBlbGVtZW50O1xuXG4gICAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIHN0YXRpYyBmaW5kQW5kRGVsZXRlRWxlbWVudEZyb21Db250YWluZXIoY29udGFpbmVyRWxlbWVudDogQXJyYXk8SURpYWdyYW1FbGVtZW50PiwgZWxlbWVudERlbGV0ZTogSURpYWdyYW1FbGVtZW50KTogYm9vbGVhbiB7XG4gICAgZm9yIChjb25zdCBpbmRleCBpbiBjb250YWluZXJFbGVtZW50KSB7XG4gICAgICBjb25zdCBlbGVtZW50T2ZJbmRleCA9IGNvbnRhaW5lckVsZW1lbnRbaW5kZXhdO1xuXG4gICAgICBpZiAoZWxlbWVudE9mSW5kZXguaWQgPT09IGVsZW1lbnREZWxldGUuaWQpIHtcbiAgICAgICAgY29udGFpbmVyRWxlbWVudC5zcGxpY2UoK2luZGV4LCAxKTtcblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmICghZWxlbWVudE9mSW5kZXguYnJhbmNoZXM/Lmxlbmd0aCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgZm9yIChjb25zdCBicmFuY2ggb2YgZWxlbWVudE9mSW5kZXguYnJhbmNoZXMpIHtcbiAgICAgICAgaWYgKCFicmFuY2guZWxlbWVudHM/Lmxlbmd0aCkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmZpbmRBbmREZWxldGVFbGVtZW50RnJvbUNvbnRhaW5lcihicmFuY2guZWxlbWVudHMsIGVsZW1lbnREZWxldGUpKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGdldEJyYW5jaE9mRWxlbWVudChlbGVtZW50SWQ6IHN0cmluZywgZmxhdEVsZW1lbnRzOiBBcnJheTxJRGlhZ3JhbUVsZW1lbnQ+LCBlbGVtZW50VHlwZVdvcmtmbG93OiBzdHJpbmcpIHtcbiAgICBjb25zdCBmbGF0RWxlbWVudEhhc0JyYW5jaCA9IGZsYXRFbGVtZW50cy5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0uZWxlbWVudF90eXBlID09PSBlbGVtZW50VHlwZVdvcmtmbG93KTtcblxuICAgIGlmICghZmxhdEVsZW1lbnRIYXNCcmFuY2gpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgZmxhdEVsZW1lbnRIYXNCcmFuY2gpIHtcbiAgICAgIGlmICghaXRlbS5icmFuY2hlcz8ubGVuZ3RoKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgZm9yIChjb25zdCBicmFuY2ggb2YgaXRlbS5icmFuY2hlcykge1xuICAgICAgICBjb25zdCBpbmRleCA9IGJyYW5jaC5lbGVtZW50cy5maW5kSW5kZXgoKGVsKSA9PiBlbC5pZCA9PT0gZWxlbWVudElkKTtcblxuICAgICAgICBpZiAoaW5kZXggPT09IC0xKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYnJhbmNoO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybjtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgZ2V0RGVmYXVsdENvbmZpZ0NvbnN0aXR1ZW50QnJhbmNoZXMgPSAoY29kZTogc3RyaW5nLCBkYXRhRGVmYXVsdDogSURpYWdyYW1FbGVtZW50KSA9PiB7XG4gIGRhdGFEZWZhdWx0LmJyYW5jaGVzID0gW1xuICAgIHtcbiAgICAgIGVsZW1lbnRzOiBbXSxcbiAgICB9LFxuICAgIHtcbiAgICAgIGVsZW1lbnRzOiBbXSxcbiAgICB9LFxuICBdO1xuXG4gIHJldHVybiBkYXRhRGVmYXVsdDtcbn07XG5cbmV4cG9ydCBjb25zdCBmaW5kQW5kRGVsZXRlRWxlbWVudEZyb21Db250YWluZXIgPSAoY29udGFpbmVyRWxlbWVudDogQXJyYXk8SURpYWdyYW1FbGVtZW50PiwgZWxlbWVudERlbGV0ZTogSURpYWdyYW1FbGVtZW50KTogYm9vbGVhbiA9PiB7XG4gIGZvciAoY29uc3QgaW5kZXggaW4gY29udGFpbmVyRWxlbWVudCkge1xuICAgIGNvbnN0IGVsZW1lbnRPZkluZGV4ID0gY29udGFpbmVyRWxlbWVudFtpbmRleF07XG5cbiAgICBpZiAoZWxlbWVudE9mSW5kZXguaWQgPT09IGVsZW1lbnREZWxldGUuaWQpIHtcbiAgICAgIGNvbnRhaW5lckVsZW1lbnQuc3BsaWNlKCtpbmRleCwgMSk7XG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAoIWVsZW1lbnRPZkluZGV4LmJyYW5jaGVzPy5sZW5ndGgpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgYnJhbmNoIG9mIGVsZW1lbnRPZkluZGV4LmJyYW5jaGVzKSB7XG4gICAgICBpZiAoIWJyYW5jaC5lbGVtZW50cz8ubGVuZ3RoKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKGZpbmRBbmREZWxldGVFbGVtZW50RnJvbUNvbnRhaW5lcihicmFuY2guZWxlbWVudHMsIGVsZW1lbnREZWxldGUpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn07XG4iXX0=
@@ -2,18 +2,18 @@ import { canvasConfigReadonly } from '../diagram-draw.service';
2
2
  export const buildFlatElement = (elements, flatElementsContainer) => {
3
3
  elements.forEach((element) => {
4
4
  flatElementsContainer.push(element);
5
- if (!element.branches || !element.branches.length) {
5
+ if (!element.branches?.length) {
6
6
  return;
7
7
  }
8
8
  flatElementHasBranch(element, flatElementsContainer);
9
9
  });
10
10
  };
11
11
  const flatElementHasBranch = (element, flatElementsContainer) => {
12
- if (!element.branches || !element.branches.length) {
12
+ if (!element.branches?.length) {
13
13
  return;
14
14
  }
15
15
  element.branches.forEach((branch) => {
16
- if (!branch.elements || !branch.elements.length) {
16
+ if (!branch.elements?.length) {
17
17
  return;
18
18
  }
19
19
  buildFlatElement(branch.elements, flatElementsContainer);
@@ -51,4 +51,4 @@ export const applyElementStyle = (el, element) => {
51
51
  el.style.zIndex = '1';
52
52
  el.style.willChange = 'transform';
53
53
  };
54
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhZ3JhbS51dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy11aS9zZXJ2aWNlcy9kaWFncmFtLWRyYXcvc3JjL3V0aWxzL2RpYWdyYW0udXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUcvRCxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLFFBQWdDLEVBQUUscUJBQTZDLEVBQUUsRUFBRTtJQUNsSCxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7UUFDM0IscUJBQXFCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNsRCxPQUFPO1FBQ1QsQ0FBQztRQUNELG9CQUFvQixDQUFDLE9BQU8sRUFBRSxxQkFBcUIsQ0FBQyxDQUFDO0lBQ3ZELENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDO0FBRUYsTUFBTSxvQkFBb0IsR0FBRyxDQUFDLE9BQXdCLEVBQUUscUJBQTZDLEVBQUUsRUFBRTtJQUN2RyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDbEQsT0FBTztJQUNULENBQUM7SUFDRCxPQUFPLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1FBQ2xDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNoRCxPQUFPO1FBQ1QsQ0FBQztRQUNELGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxRQUE2QixFQUFFLHFCQUFxQixDQUFDLENBQUM7SUFDaEYsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUM7QUFFRiw4REFBOEQ7QUFDOUQsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQUcsQ0FBQyxVQUF1QyxFQUFFLFVBQXNDLEVBQUUsaUJBQXlCLEVBQUUsS0FBYyxFQUFFLEVBQUU7SUFDckssVUFBVSxFQUFFLFlBQVksQ0FBQyxHQUFHLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztJQUNqRCxVQUFVLEVBQUUsWUFBWSxDQUFDLFFBQVEsRUFBRSxJQUFJLEtBQUssSUFBSSxvQkFBb0IsRUFBRSxDQUFDLHdCQUF3QixFQUFFLENBQUMsQ0FBQztJQUNuRyxVQUFVLEVBQUUsWUFBWSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztJQUN6QyxVQUFVLEVBQUUsWUFBWSxDQUFDLGNBQWMsRUFBRSxvQkFBb0IsRUFBRSxDQUFDLHdCQUF3QixDQUFDLENBQUM7SUFDMUYsVUFBVSxFQUFFLGFBQWEsQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDcEQsQ0FBQyxDQUFDO0FBRUYsOERBQThEO0FBQzlELE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFHLENBQUMsVUFBdUMsRUFBRSxFQUFFO0lBQ2hGLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNoQixPQUFPO0lBQ1QsQ0FBQztJQUNELE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUVoRSw4REFBOEQ7SUFDOUQsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQVUsRUFBRSxFQUFFO1FBQzlCLElBQUksS0FBSyxDQUFDLE9BQU8sS0FBSyxNQUFNLEVBQUUsQ0FBQztZQUM3QixPQUFPO1FBQ1QsQ0FBQztRQUNELEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUNqQixDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLENBQUMsRUFBZSxFQUFFLE9BQXdCLEVBQUUsRUFBRTtJQUM3RSxFQUFFLENBQUMsS0FBSyxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUM7SUFDL0IsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0lBQ25CLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztJQUNwQixFQUFFLENBQUMsS0FBSyxDQUFDLFNBQVMsR0FBRyxhQUFhLE9BQU8sQ0FBQyxVQUFVLE9BQU8sT0FBTyxDQUFDLFVBQVUsS0FBSyxDQUFDO0lBQ25GLEVBQUUsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLEdBQUcsT0FBTyxDQUFDLGNBQWMsSUFBSSxDQUFDO0lBQy9DLEVBQUUsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLGVBQWUsSUFBSSxDQUFDO0lBQ2pELEVBQUUsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQztJQUN0QixFQUFFLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxXQUFXLENBQUM7QUFDcEMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRWxlbWVudFJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgY2FudmFzQ29uZmlnUmVhZG9ubHkgfSBmcm9tICcuLi9kaWFncmFtLWRyYXcuc2VydmljZSc7XG5pbXBvcnQgeyBJRGlhZ3JhbUVsZW1lbnQgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2RpYWdyYW0uaW50ZXJmYWNlJztcblxuZXhwb3J0IGNvbnN0IGJ1aWxkRmxhdEVsZW1lbnQgPSAoZWxlbWVudHM6IEFycmF5PElEaWFncmFtRWxlbWVudD4sIGZsYXRFbGVtZW50c0NvbnRhaW5lcjogQXJyYXk8SURpYWdyYW1FbGVtZW50PikgPT4ge1xuICBlbGVtZW50cy5mb3JFYWNoKChlbGVtZW50KSA9PiB7XG4gICAgZmxhdEVsZW1lbnRzQ29udGFpbmVyLnB1c2goZWxlbWVudCk7XG4gICAgaWYgKCFlbGVtZW50LmJyYW5jaGVzIHx8ICFlbGVtZW50LmJyYW5jaGVzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBmbGF0RWxlbWVudEhhc0JyYW5jaChlbGVtZW50LCBmbGF0RWxlbWVudHNDb250YWluZXIpO1xuICB9KTtcbn07XG5cbmNvbnN0IGZsYXRFbGVtZW50SGFzQnJhbmNoID0gKGVsZW1lbnQ6IElEaWFncmFtRWxlbWVudCwgZmxhdEVsZW1lbnRzQ29udGFpbmVyOiBBcnJheTxJRGlhZ3JhbUVsZW1lbnQ+KSA9PiB7XG4gIGlmICghZWxlbWVudC5icmFuY2hlcyB8fCAhZWxlbWVudC5icmFuY2hlcy5sZW5ndGgpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgZWxlbWVudC5icmFuY2hlcy5mb3JFYWNoKChicmFuY2gpID0+IHtcbiAgICBpZiAoIWJyYW5jaC5lbGVtZW50cyB8fCAhYnJhbmNoLmVsZW1lbnRzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBidWlsZEZsYXRFbGVtZW50KGJyYW5jaC5lbGVtZW50cyBhcyBJRGlhZ3JhbUVsZW1lbnRbXSwgZmxhdEVsZW1lbnRzQ29udGFpbmVyKTtcbiAgfSk7XG59O1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuZXhwb3J0IGNvbnN0IHNldEF0dHJpYnV0ZVN2Z0FuZEFwcGVuZCA9IChzdmdFbGVtZW50OiBFbGVtZW50UmVmPGFueT4gfCB1bmRlZmluZWQsIGVsZW1lbnRTdmc6IFNWR1BhdGhFbGVtZW50IHwgdW5kZWZpbmVkLCBzdmdBdHRyaWJ1dGVQYXRoRDogc3RyaW5nLCBjb2xvcj86IHN0cmluZykgPT4ge1xuICBlbGVtZW50U3ZnPy5zZXRBdHRyaWJ1dGUoJ2QnLCBzdmdBdHRyaWJ1dGVQYXRoRCk7XG4gIGVsZW1lbnRTdmc/LnNldEF0dHJpYnV0ZSgnc3Ryb2tlJywgYCMke2NvbG9yID8/IGNhbnZhc0NvbmZpZ1JlYWRvbmx5KCkuRUxFTUVOVF9TVkdfU1RST0tFX0NPTE9SfWApO1xuICBlbGVtZW50U3ZnPy5zZXRBdHRyaWJ1dGUoJ2ZpbGwnLCAnbm9uZScpO1xuICBlbGVtZW50U3ZnPy5zZXRBdHRyaWJ1dGUoJ3N0cm9rZS13aWR0aCcsIGNhbnZhc0NvbmZpZ1JlYWRvbmx5KCkuRUxFTUVOVF9TVkdfU1RST0tFX1dJRFRIKTtcbiAgc3ZnRWxlbWVudD8ubmF0aXZlRWxlbWVudC5hcHBlbmRDaGlsZChlbGVtZW50U3ZnKTtcbn07XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG5leHBvcnQgY29uc3QgY2FudmFzUmVtb3ZlQ2hpbGRJblN2ZyA9IChzdmdFbGVtZW50OiBFbGVtZW50UmVmPGFueT4gfCB1bmRlZmluZWQpID0+IHtcbiAgaWYgKCFzdmdFbGVtZW50KSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IGNoaWxkcmVuID0gQXJyYXkuZnJvbShzdmdFbGVtZW50Py5uYXRpdmVFbGVtZW50LmNoaWxkcmVuKTtcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICBjaGlsZHJlbi5mb3JFYWNoKChjaGlsZDogYW55KSA9PiB7XG4gICAgaWYgKGNoaWxkLnRhZ05hbWUgIT09ICdwYXRoJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjaGlsZC5yZW1vdmUoKTtcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgYXBwbHlFbGVtZW50U3R5bGUgPSAoZWw6IEhUTUxFbGVtZW50LCBlbGVtZW50OiBJRGlhZ3JhbUVsZW1lbnQpID0+IHtcbiAgZWwuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xuICBlbC5zdHlsZS50b3AgPSAnMCc7XG4gIGVsLnN0eWxlLmxlZnQgPSAnMCc7XG4gIGVsLnN0eWxlLnRyYW5zZm9ybSA9IGB0cmFuc2xhdGUoJHtlbGVtZW50LnRyYW5zbGF0ZVh9cHgsICR7ZWxlbWVudC50cmFuc2xhdGVZfXB4KWA7XG4gIGVsLnN0eWxlLndpZHRoID0gYCR7ZWxlbWVudC5zcGVjaWZpY193aWR0aH1weGA7XG4gIGVsLnN0eWxlLmhlaWdodCA9IGAke2VsZW1lbnQuc3BlY2lmaWNfaGVpZ2h0fXB4YDtcbiAgZWwuc3R5bGUuekluZGV4ID0gJzEnO1xuICBlbC5zdHlsZS53aWxsQ2hhbmdlID0gJ3RyYW5zZm9ybSc7XG59O1xuIl19
54
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhZ3JhbS51dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy11aS9zZXJ2aWNlcy9kaWFncmFtLWRyYXcvc3JjL3V0aWxzL2RpYWdyYW0udXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUcvRCxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLFFBQWdDLEVBQUUscUJBQTZDLEVBQUUsRUFBRTtJQUNsSCxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7UUFDM0IscUJBQXFCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxDQUFDO1lBQzlCLE9BQU87UUFDVCxDQUFDO1FBQ0Qsb0JBQW9CLENBQUMsT0FBTyxFQUFFLHFCQUFxQixDQUFDLENBQUM7SUFDdkQsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUM7QUFFRixNQUFNLG9CQUFvQixHQUFHLENBQUMsT0FBd0IsRUFBRSxxQkFBNkMsRUFBRSxFQUFFO0lBQ3ZHLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxDQUFDO1FBQzlCLE9BQU87SUFDVCxDQUFDO0lBQ0QsT0FBTyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtRQUNsQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsQ0FBQztZQUM3QixPQUFPO1FBQ1QsQ0FBQztRQUNELGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUscUJBQXFCLENBQUMsQ0FBQztJQUMzRCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQztBQUVGLDhEQUE4RDtBQUM5RCxNQUFNLENBQUMsTUFBTSx3QkFBd0IsR0FBRyxDQUFDLFVBQXVDLEVBQUUsVUFBc0MsRUFBRSxpQkFBeUIsRUFBRSxLQUFjLEVBQUUsRUFBRTtJQUNySyxVQUFVLEVBQUUsWUFBWSxDQUFDLEdBQUcsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO0lBQ2pELFVBQVUsRUFBRSxZQUFZLENBQUMsUUFBUSxFQUFFLElBQUksS0FBSyxJQUFJLG9CQUFvQixFQUFFLENBQUMsd0JBQXdCLEVBQUUsQ0FBQyxDQUFDO0lBQ25HLFVBQVUsRUFBRSxZQUFZLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ3pDLFVBQVUsRUFBRSxZQUFZLENBQUMsY0FBYyxFQUFFLG9CQUFvQixFQUFFLENBQUMsd0JBQXdCLENBQUMsQ0FBQztJQUMxRixVQUFVLEVBQUUsYUFBYSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUNwRCxDQUFDLENBQUM7QUFFRiw4REFBOEQ7QUFDOUQsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQUcsQ0FBQyxVQUF1QyxFQUFFLEVBQUU7SUFDaEYsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ2hCLE9BQU87SUFDVCxDQUFDO0lBQ0QsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBRWhFLDhEQUE4RDtJQUM5RCxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBVSxFQUFFLEVBQUU7UUFDOUIsSUFBSSxLQUFLLENBQUMsT0FBTyxLQUFLLE1BQU0sRUFBRSxDQUFDO1lBQzdCLE9BQU87UUFDVCxDQUFDO1FBQ0QsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ2pCLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxFQUFlLEVBQUUsT0FBd0IsRUFBRSxFQUFFO0lBQzdFLEVBQUUsQ0FBQyxLQUFLLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQztJQUMvQixFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7SUFDbkIsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0lBQ3BCLEVBQUUsQ0FBQyxLQUFLLENBQUMsU0FBUyxHQUFHLGFBQWEsT0FBTyxDQUFDLFVBQVUsT0FBTyxPQUFPLENBQUMsVUFBVSxLQUFLLENBQUM7SUFDbkYsRUFBRSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsR0FBRyxPQUFPLENBQUMsY0FBYyxJQUFJLENBQUM7SUFDL0MsRUFBRSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsZUFBZSxJQUFJLENBQUM7SUFDakQsRUFBRSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDO0lBQ3RCLEVBQUUsQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLFdBQVcsQ0FBQztBQUNwQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFbGVtZW50UmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBjYW52YXNDb25maWdSZWFkb25seSB9IGZyb20gJy4uL2RpYWdyYW0tZHJhdy5zZXJ2aWNlJztcbmltcG9ydCB7IElEaWFncmFtRWxlbWVudCB9IGZyb20gJy4uL2ludGVyZmFjZXMvZGlhZ3JhbS5pbnRlcmZhY2UnO1xuXG5leHBvcnQgY29uc3QgYnVpbGRGbGF0RWxlbWVudCA9IChlbGVtZW50czogQXJyYXk8SURpYWdyYW1FbGVtZW50PiwgZmxhdEVsZW1lbnRzQ29udGFpbmVyOiBBcnJheTxJRGlhZ3JhbUVsZW1lbnQ+KSA9PiB7XG4gIGVsZW1lbnRzLmZvckVhY2goKGVsZW1lbnQpID0+IHtcbiAgICBmbGF0RWxlbWVudHNDb250YWluZXIucHVzaChlbGVtZW50KTtcbiAgICBpZiAoIWVsZW1lbnQuYnJhbmNoZXM/Lmxlbmd0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBmbGF0RWxlbWVudEhhc0JyYW5jaChlbGVtZW50LCBmbGF0RWxlbWVudHNDb250YWluZXIpO1xuICB9KTtcbn07XG5cbmNvbnN0IGZsYXRFbGVtZW50SGFzQnJhbmNoID0gKGVsZW1lbnQ6IElEaWFncmFtRWxlbWVudCwgZmxhdEVsZW1lbnRzQ29udGFpbmVyOiBBcnJheTxJRGlhZ3JhbUVsZW1lbnQ+KSA9PiB7XG4gIGlmICghZWxlbWVudC5icmFuY2hlcz8ubGVuZ3RoKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGVsZW1lbnQuYnJhbmNoZXMuZm9yRWFjaCgoYnJhbmNoKSA9PiB7XG4gICAgaWYgKCFicmFuY2guZWxlbWVudHM/Lmxlbmd0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBidWlsZEZsYXRFbGVtZW50KGJyYW5jaC5lbGVtZW50cywgZmxhdEVsZW1lbnRzQ29udGFpbmVyKTtcbiAgfSk7XG59O1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuZXhwb3J0IGNvbnN0IHNldEF0dHJpYnV0ZVN2Z0FuZEFwcGVuZCA9IChzdmdFbGVtZW50OiBFbGVtZW50UmVmPGFueT4gfCB1bmRlZmluZWQsIGVsZW1lbnRTdmc6IFNWR1BhdGhFbGVtZW50IHwgdW5kZWZpbmVkLCBzdmdBdHRyaWJ1dGVQYXRoRDogc3RyaW5nLCBjb2xvcj86IHN0cmluZykgPT4ge1xuICBlbGVtZW50U3ZnPy5zZXRBdHRyaWJ1dGUoJ2QnLCBzdmdBdHRyaWJ1dGVQYXRoRCk7XG4gIGVsZW1lbnRTdmc/LnNldEF0dHJpYnV0ZSgnc3Ryb2tlJywgYCMke2NvbG9yID8/IGNhbnZhc0NvbmZpZ1JlYWRvbmx5KCkuRUxFTUVOVF9TVkdfU1RST0tFX0NPTE9SfWApO1xuICBlbGVtZW50U3ZnPy5zZXRBdHRyaWJ1dGUoJ2ZpbGwnLCAnbm9uZScpO1xuICBlbGVtZW50U3ZnPy5zZXRBdHRyaWJ1dGUoJ3N0cm9rZS13aWR0aCcsIGNhbnZhc0NvbmZpZ1JlYWRvbmx5KCkuRUxFTUVOVF9TVkdfU1RST0tFX1dJRFRIKTtcbiAgc3ZnRWxlbWVudD8ubmF0aXZlRWxlbWVudC5hcHBlbmRDaGlsZChlbGVtZW50U3ZnKTtcbn07XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG5leHBvcnQgY29uc3QgY2FudmFzUmVtb3ZlQ2hpbGRJblN2ZyA9IChzdmdFbGVtZW50OiBFbGVtZW50UmVmPGFueT4gfCB1bmRlZmluZWQpID0+IHtcbiAgaWYgKCFzdmdFbGVtZW50KSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IGNoaWxkcmVuID0gQXJyYXkuZnJvbShzdmdFbGVtZW50Py5uYXRpdmVFbGVtZW50LmNoaWxkcmVuKTtcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICBjaGlsZHJlbi5mb3JFYWNoKChjaGlsZDogYW55KSA9PiB7XG4gICAgaWYgKGNoaWxkLnRhZ05hbWUgIT09ICdwYXRoJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjaGlsZC5yZW1vdmUoKTtcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgYXBwbHlFbGVtZW50U3R5bGUgPSAoZWw6IEhUTUxFbGVtZW50LCBlbGVtZW50OiBJRGlhZ3JhbUVsZW1lbnQpID0+IHtcbiAgZWwuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xuICBlbC5zdHlsZS50b3AgPSAnMCc7XG4gIGVsLnN0eWxlLmxlZnQgPSAnMCc7XG4gIGVsLnN0eWxlLnRyYW5zZm9ybSA9IGB0cmFuc2xhdGUoJHtlbGVtZW50LnRyYW5zbGF0ZVh9cHgsICR7ZWxlbWVudC50cmFuc2xhdGVZfXB4KWA7XG4gIGVsLnN0eWxlLndpZHRoID0gYCR7ZWxlbWVudC5zcGVjaWZpY193aWR0aH1weGA7XG4gIGVsLnN0eWxlLmhlaWdodCA9IGAke2VsZW1lbnQuc3BlY2lmaWNfaGVpZ2h0fXB4YDtcbiAgZWwuc3R5bGUuekluZGV4ID0gJzEnO1xuICBlbC5zdHlsZS53aWxsQ2hhbmdlID0gJ3RyYW5zZm9ybSc7XG59O1xuIl19