tiny-markdown-editor 0.2.8 → 0.2.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/tiny-mde.js CHANGED
@@ -89,7 +89,7 @@
89
89
  action: editor => {
90
90
  if (editor.isInlineFormattingAllowed()) editor.wrapSelection("[", "]()");
91
91
  },
92
- enabled: (editor, focus, anchor) => editor.isInlineFormattingAllowed(focus, anchor) ? false : null,
92
+ enabled: editor => editor.isInlineFormattingAllowed() ? false : null,
93
93
  innerHTML: svg.link,
94
94
  title: "Insert link",
95
95
  hotkey: "Mod-K"
@@ -99,7 +99,7 @@
99
99
  action: editor => {
100
100
  if (editor.isInlineFormattingAllowed()) editor.wrapSelection("![", "]()");
101
101
  },
102
- enabled: (editor, focus, anchor) => editor.isInlineFormattingAllowed(focus, anchor) ? false : null,
102
+ enabled: editor => editor.isInlineFormattingAllowed() ? false : null,
103
103
  innerHTML: svg.image,
104
104
  title: "Insert image",
105
105
  hotkey: "Mod2-Shift-I"
@@ -232,10 +232,13 @@
232
232
  modifiers: modifiers,
233
233
  command: commandName
234
234
  };
235
- if (keys[keys.length - 1].match(/^[0-9]$/)) {
236
- hotkey.code = `Digit${keys[keys.length - 1]}`;
235
+ const lastKey = keys[keys.length - 1];
236
+ if (lastKey.match(/^[0-9]$/)) {
237
+ hotkey.code = `Digit${lastKey}`;
238
+ } else if (lastKey.match(/^[a-zA-Z]$/)) {
239
+ hotkey.code = `Key${lastKey.toUpperCase()}`;
237
240
  } else {
238
- hotkey.key = keys[keys.length - 1].toLowerCase();
241
+ hotkey.key = lastKey.toLowerCase();
239
242
  }
240
243
  this.hotkeys.push(hotkey);
241
244
  title = title.concat(` (${modifierexplanation.join("+")})`);
@@ -253,6 +256,15 @@
253
256
  handleClick(commandName, event) {
254
257
  if (!this.editor) return;
255
258
  event.preventDefault();
259
+ // Focus the editor if it's not already focused
260
+ if (this.editor.e) {
261
+ const editorHadFocus = this.editor.e.contains(document.activeElement);
262
+ this.editor.e.focus();
263
+ // Only restore the last selection if the editor was not focused before
264
+ if (!editorHadFocus) {
265
+ this.editor.restoreLastSelection();
266
+ }
267
+ }
256
268
  if (typeof this.commands[commandName].action === "string") {
257
269
  if (this.state[commandName] === false) this.editor.setCommandState(commandName, true);else this.editor.setCommandState(commandName, false);
258
270
  } else if (typeof this.commands[commandName].action === "function") {
@@ -1846,6 +1858,7 @@
1846
1858
  this.customInlineGrammar = {};
1847
1859
  this.mergedInlineGrammar = inlineGrammar;
1848
1860
  this.hasFocus = true;
1861
+ this.lastSelection = null;
1849
1862
  this.listeners = {
1850
1863
  change: [],
1851
1864
  selection: [],
@@ -1866,6 +1879,7 @@
1866
1879
  this.lineDirty = [];
1867
1880
  this.lastCommandState = null;
1868
1881
  this.hasFocus = true;
1882
+ this.lastSelection = null;
1869
1883
  this.customInlineGrammar = props.customInlineGrammar || {};
1870
1884
  this.mergedInlineGrammar = createMergedInlineGrammar(this.customInlineGrammar);
1871
1885
  this.listeners = {
@@ -2242,6 +2256,13 @@
2242
2256
  let windowSelection = window.getSelection();
2243
2257
  windowSelection.setBaseAndExtent(focusNode, focusOffset, anchorNode || focusNode, anchorNode ? anchorOffset : focusOffset);
2244
2258
  }
2259
+ restoreLastSelection() {
2260
+ if (this.lastSelection && this.lastSelection.focus) {
2261
+ this.setSelection(this.lastSelection.focus, this.lastSelection.anchor);
2262
+ return true;
2263
+ }
2264
+ return false;
2265
+ }
2245
2266
  paste(text) {
2246
2267
  let anchor = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
2247
2268
  let focus = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
@@ -3230,9 +3251,14 @@
3230
3251
  }
3231
3252
  }
3232
3253
  fireSelection() {
3254
+ let focus = this.getSelection(false);
3255
+ let anchor = this.getSelection(true);
3256
+ // Save the current selection for restoration later
3257
+ this.lastSelection = {
3258
+ focus: focus,
3259
+ anchor: anchor
3260
+ };
3233
3261
  if (this.listeners.selection && this.listeners.selection.length) {
3234
- let focus = this.getSelection(false);
3235
- let anchor = this.getSelection(true);
3236
3262
  let commandState = this.getCommandState(focus, anchor);
3237
3263
  if (this.lastCommandState) {
3238
3264
  Object.assign(this.lastCommandState, commandState);
@@ -3256,4 +3282,4 @@
3256
3282
  }));
3257
3283
  //# sourceMappingURL=index.js.map
3258
3284
 
3259
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzIjpbInNyYy9zdmcvc3ZnLnRzIiwic3JjL1RpbnlNREVDb21tYW5kQmFyLnRzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dsb2JhbC10aGlzLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2ZhaWxzLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Rlc2NyaXB0b3JzLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtbmF0aXZlLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1jYWxsYWJsZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tb2JqZWN0LmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHkuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tbmFtZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1wdXJlLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2RlZmluZS1nbG9iYWwtcHJvcGVydHkuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2luc3BlY3Qtc291cmNlLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3dlYWstbWFwLWJhc2ljLWRldGVjdGlvbi5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1vYmplY3QuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaWU4LWRvbS1kZWZpbmUuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdjgtcHJvdG90eXBlLWRlZmluZS1idWcuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYW4tb2JqZWN0LmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW52aXJvbm1lbnQtdXNlci1hZ2VudC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lbnZpcm9ubWVudC12OC12ZXJzaW9uLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24uanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdXNlLXN5bWJvbC1hcy11aWQuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtc3ltYm9sLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RyeS10by1zdHJpbmcuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYS1jYWxsYWJsZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nZXQtbWV0aG9kLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29yZGluYXJ5LXRvLXByaW1pdGl2ZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zaGFyZWQuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdWlkLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLXByaW1pdGl2ZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90by1wcm9wZXJ0eS1rZXkuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvci5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHkuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2hhcmVkLWtleS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9oaWRkZW4ta2V5cy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9tYWtlLWJ1aWx0LWluLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbi1hY2Nlc3Nvci5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9yZWdleHAtZmxhZ3MuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnJlZ2V4cC5mbGFncy5qcyIsInNyYy9ncmFtbWFyLnRzIiwic3JjL1RpbnlNREUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiY29uc3Qgc3ZnOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICBibG9ja3F1b3RlOiBgPHN2ZyBoZWlnaHQ9XCIxOFwiIHdpZHRoPVwiMThcIj48cmVjdCB3aWR0aD1cIjVcIiBoZWlnaHQ9XCI1XCIgeD1cIjNcIiB5PVwiNFwiIHJ5PVwiMVwiLz48cmVjdCByeT1cIjFcIiB5PVwiNFwiIHg9XCIxMFwiIGhlaWdodD1cIjVcIiB3aWR0aD1cIjVcIi8+PHBhdGggZD1cIk04IDYuOTk5djNjMCAxLTEgMy0xIDNzLS4zMzEgMS0xLjMzMSAxaC0xYy0xIDAtLjY2OS0xLS42NjktMXMxLTIgMS0zdi0zem03IDB2M2MwIDEtMSAzLTEgM3MtLjMzMSAxLTEuMzMxIDFoLTFjLTEgMC0uNjY5LTEtLjY2OS0xczEtMiAxLTN2LTN6XCIvPjwvc3ZnPmAsXG4gIGJvbGQ6IGA8c3ZnIGhlaWdodD1cIjE4XCIgd2lkdGg9XCIxOFwiPjxwYXRoIGQ9XCJNNCAyYTEgMSAwIDAwLTEgMXYxMmExIDEgMCAwMDEgMWg2YzQgMCA1LTIgNS00IDAtMS4zMjItLjQzNC0yLjYzNi0xLjg4NS0zLjM4MUMxMy43NzIgNy44ODUgMTQgNi45NDUgMTQgNmMwLTItMS00LTUtNHptMSAyaDRjMS42NjggMCAyLjMyLjM5MyAyLjYuNjcyLjI4LjI3OS40LjY2Mi40IDEuMzI4cy0uMTIgMS4wNTctLjQgMS4zMzhjLS4yNzUuMjc0LTEuMDE0LjY0Ni0yLjYuNjYySDV6bTUgNmMxLjY2Ni4wMDUgMi4zMTguMzg4IDIuNTk2LjY2Ni4yNzcuMjc4LjQwNC42NjcuNDA0IDEuMzM0cy0uMTI3IDEuMDYtLjQwNCAxLjMzOGMtLjI3OC4yNzgtLjkzLjY2LTIuNTk2LjY2MmwtNC45OTIuMDA0TDUgMTB6XCIvPjwvc3ZnPmAsXG4gIGNsZWFyX2Zvcm1hdHRpbmc6IGA8c3ZnIGhlaWdodD1cIjE4XCIgd2lkdGg9XCIxOFwiPjxwYXRoIGQ9XCJNMTEuMDMgMWExIDEgMCAwMC0uNzQuM2wtOSA5YTEgMSAwIDAwMCAxLjRsNCA0QTEgMSAwIDAwNiAxNmgyYTEgMSAwIDAwLjctLjNsOC04YTEgMSAwIDAwMC0xLjRsLTUtNWExIDEgMCAwMC0uNjctLjN6TTguNyA1LjdsMy41OCAzLjZMNy42IDE0SDYuNGwtMy0zIDUuMy01LjN6XCIvPjxyZWN0IHJ5PVwiLjhcIiByeD1cIi44XCIgeT1cIjE0XCIgeD1cIjE2XCIgaGVpZ2h0PVwiMlwiIHdpZHRoPVwiMlwiLz48cmVjdCB3aWR0aD1cIjJcIiBoZWlnaHQ9XCIyXCIgeD1cIjEzXCIgeT1cIjE0XCIgcng9XCIuOFwiIHJ5PVwiLjhcIi8+PHJlY3Qgcnk9XCIuOFwiIHJ4PVwiLjhcIiB5PVwiMTRcIiB4PVwiMTBcIiBoZWlnaHQ9XCIyXCIgd2lkdGg9XCIyXCIvPjwvc3ZnPmAsXG4gIGNvZGU6IGA8c3ZnIGhlaWdodD1cIjE4XCIgd2lkdGg9XCIxOFwiPjxwYXRoIGQ9XCJNMTMuNSAyLjk5NGEuNS41IDAgMDAtLjUuNS41LjUgMCAwMDAgLjAzNFY0LjUzYTUuOTkzIDUuOTkzIDAgMDAtNy40NTEtLjQ0NUE2IDYgMCAxMDEyLjQ1IDEzLjlhNS45OSA1Ljk5IDAgMDAxLjM0Ni0xLjMzNC41LjUgMCAwMC4wOTYtLjEwMS41LjUgMCAwMC0uMTItLjY5OC41LjUgMCAwMC0uNjk3LjEybC0uMDA0LS4wMDVhNSA1IDAgMDEtMS4xOTcgMS4yIDUgNSAwIDExMS4yMTUtNi45NjUuNS41IDAgMDAuNjk3LjEyLjUuNSAwIDAwLjIxMS0uNDRWNC43NDVIMTRWMy40OTNhLjUuNSAwIDAwLS41LS41elwiLz48L3N2Zz5gLFxuICBoMTogYDxzdmcgaGVpZ2h0PVwiMThcIiB3aWR0aD1cIjE4XCI+PHBhdGggZD1cIk0zIDJzMC0xIDEtMWgxYzEgMCAxIDEgMSAxdjZoNlYyczAtMSAxLTFoMWMxIDAgMSAxIDEgMXYxNHMwIDEtMSAxaC0xYy0xIDAtMS0xLTEtMXYtNkg2djZzMCAxLTEgMUg0Yy0xIDAtMS0xLTEtMXpcIi8+PC9zdmc+YCxcbiAgaDI6IGA8c3ZnIGhlaWdodD1cIjE4XCIgd2lkdGg9XCIxOFwiPjxwYXRoIGQ9XCJNNCAyczAtMSAxLTEgMSAxIDEgMXY2YzEtMSAyLTEgNC0xIDMgMCA0IDIgNCA0djVzMCAxLTEgMS0xLTEtMS0xdi01YzAtMS4wOTQtMS0yLTItMi0yIDAtMyAwLTQgMnY1czAgMS0xIDEtMS0xLTEtMXpcIi8+PC9zdmc+YCxcbiAgaHI6IGA8c3ZnIGhlaWdodD1cIjE4XCIgd2lkdGg9XCIxOFwiPjxyZWN0IHJ5PVwiMVwiIHk9XCI4XCIgaGVpZ2h0PVwiMlwiIHdpZHRoPVwiMThcIiBzdHlsZT1cImZvbnQtdmFyaWF0aW9uLXNldHRpbmdzOm5vcm1hbDttYXJrZXI6bm9uZVwiLz48L3N2Zz5gLFxuICBpbWFnZTogYDxzdmcgaGVpZ2h0PVwiMThcIiB3aWR0aD1cIjE4XCI+PHBhdGggZD1cIk0xIDJ2MTRoMTZWMkgxem0yIDJoMTJ2N2wtMy0zLTQgNC0yLTItMyAzVjR6XCIvPjxjaXJjbGUgcj1cIjEuNVwiIGN5PVwiNi41XCIgY3g9XCI1LjVcIi8+PC9zdmc+YCxcbiAgaXRhbGljOiBgPHN2ZyBoZWlnaHQ9XCIxOFwiIHdpZHRoPVwiMThcIj48cGF0aCBkPVwiTTkgMmExIDEgMCAwMDAgMkw3IDE0YTEgMSAwIDEwMCAyaDJhMSAxIDAgMDAwLTJsMi0xMGExIDEgMCAxMDAtMnpcIi8+PC9zdmc+YCxcbiAgbGluazogYDxzdmcgaGVpZ2h0PVwiMThcIiB3aWR0aD1cIjE4XCI+PHBhdGggZD1cIk05LjA3IDUuMThhMy45IDMuOSAwIDAwLTEuNTIuNDNDNi4zMSA2LjIyIDUuMyA3LjI5IDQuMyA4LjI5Yy0xIDEtMi4wNyAyLjAyLTIuNjggMy4yNi0uMzEuNjItLjUgMS4zMy0uNDEgMi4wNy4wOS43NS40OCAxLjQ3IDEuMSAyLjA5LjYxLjYxIDEuMzMgMSAyLjA4IDEuMS43NC4wOSAxLjQ1LS4xIDIuMDctLjQyIDEuMjQtLjYxIDIuMjYtMS42OCAzLjI2LTIuNjguNDYtLjQ3Ljk0LS45NCAxLjM5LTEuNDRsLS40My4yNmMtLjY4LjM0LTEuNDkuNTYtMi4zNi40Ni0uMi0uMDMtLjQtLjA4LS42LS4xNC0uNzkuNzYtMS41NSAxLjQ1LTIuMTYgMS43Ni0uMzguMTktLjY3LjI0LS45Mi4yMS0uMjYtLjAzLS41NC0uMTQtLjkyLS41My0uMzktLjM4LS41LS42Ni0uNTMtLjkxLS4wMy0uMjYuMDItLjU1LjIxLS45My4zOS0uNzYgMS4zMi0xLjc0IDIuMzItMi43NCAxLTEgMS45OC0xLjkzIDIuNzQtMi4zMi4zOC0uMTkuNjctLjI0LjkzLS4yMS4yNS4wMy41My4xNC45MS41My4zOS4zOC41LjY2LjUzLjkydi4wNmwxLjEyLTEuMDYuNDQtLjQ3Yy0uMTgtLjMtLjQtLjYtLjY3LS44Ny0uNjItLjYxLTEuMzQtMS0yLjA5LTEuMWEzLjA4IDMuMDggMCAwMC0uNTUtLjAxelwiLz48cGF0aCBkPVwiTTEzLjA3Ljg2YTMuOSAzLjkgMCAwMC0xLjUyLjQzYy0xLjI0LjYyLTIuMjYgMS42OS0zLjI2IDIuNjktLjQ2LjQ3LS45NC45NC0xLjM5IDEuNDMuMTUtLjA4LjI4LS4xOC40My0uMjVhNC40IDQuNCAwIDAxMi4zNi0uNDZjLjIuMDIuNC4wNy42LjE0Ljc5LS43NyAxLjU1LTEuNDYgMi4xNi0xLjc2LjM4LS4xOS42Ny0uMjUuOTMtLjIxLjI1LjAzLjUzLjE0LjkxLjUyLjM5LjM4LjUuNjYuNTMuOTIuMDMuMjYtLjAyLjU1LS4yMS45My0uMzkuNzYtMS4zMiAxLjc0LTIuMzIgMi43NC0xIDEtMS45OCAxLjkzLTIuNzQgMi4zMS0uMzguMi0uNjcuMjUtLjkzLjIyLS4yNS0uMDQtLjUzLS4xNS0uOTEtLjUzLS4zOS0uMzgtLjUtLjY2LS41My0uOTJWOWMtLjM2LjMzLS43My42Ny0xLjEyIDEuMDZsLS40My40NmMuMTcuMy40LjYuNjYuODcuNjIuNjIgMS4zNCAxIDIuMDggMS4xLjc1LjEgMS40Ni0uMSAyLjA4LS40MSAxLjI0LS42MiAyLjI2LTEuNjkgMy4yNi0yLjY5czIuMDctMi4wMiAyLjY4LTMuMjZjLjMxLS42Mi41LTEuMzIuNDEtMi4wN2EzLjYzIDMuNjMgMCAwMC0xLjEtMi4wOGMtLjYxLS42Mi0xLjMzLTEtMi4wNy0xLjFhMy4wOCAzLjA4IDAgMDAtLjU2LS4wMnpcIi8+PC9zdmc+YCxcbiAgb2w6IGA8c3ZnIGhlaWdodD1cIjE4XCIgd2lkdGg9XCIxOFwiPjxwYXRoIGQ9XCJNMS41IDdhLjUuNSAwIDEwMCAxaDFhLjUuNSAwIDAxLjUuNWMwIC4xNjQtLjA4LjMxLS4xNC4zNTVsLTEuNjU1IDEuMjVBLjQ5Mi40OTIgMCAwMDEgMTAuNWEuNS41IDAgMDAuNS41aDJhLjUuNSAwIDAwMC0xSDNsLjM5OC0uMjk5QTEuNSAxLjUgMCAwMDIuNSA3elwiLz48cGF0aCBkPVwiTTEuNSAxMmMtLjY2NyAwLS42NjcgMSAwIDFoMS4yNWMuMzMzIDAgLjMzMy41IDAgLjVIMi41Yy0uNjY3IDAtLjY2NyAxIDAgMWguMjVjLjMzMyAwIC4zMzMuNSAwIC41SDEuNWMtLjY2NyAwLS42NjcgMSAwIDFoMWMuMzk4IDAgLjc4LS4xMzEgMS4wNi0uMzY1LjI4Mi0uMjM1LjQ0LS41NTQuNDQtLjg4NWExLjEyMSAxLjEyMSAwIDAwLS4zMDMtLjc1Yy4xOTEtLjIwNC4zLS40Ny4zMDMtLjc1IDAtLjMzMi0uMTU4LS42NTEtLjQ0LS44ODUtLjMtLjI0MS0uNjc1LS4zNy0xLjA2LS4zNjV6XCIvPjxyZWN0IHk9XCIxM1wiIHg9XCI2XCIgaGVpZ2h0PVwiMlwiIHdpZHRoPVwiMTJcIiByeT1cIjFcIi8+PHJlY3Qgcnk9XCIxXCIgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjJcIiB4PVwiNlwiIHk9XCI4XCIvPjxyZWN0IHk9XCIzXCIgeD1cIjZcIiBoZWlnaHQ9XCIyXCIgd2lkdGg9XCIxMlwiIHJ5PVwiMVwiLz48cGF0aCBkPVwiTTEuNSAyYS41LjUgMCAxMDAgMUgydjJoLS41YS41LjUgMCAxMDAgMWgyYS41LjUgMCAxMDAtMUgzVjIuNWMwLS4yNzctLjIyMy0uNS0uNS0uNXpcIi8+PC9zdmc+YCxcbiAgcmVkbzogYDxzdmcgaGVpZ2h0PVwiMThcIiB3aWR0aD1cIjE4XCI+PHBhdGggZD1cIk0gNy4yNjk1MzA4LDIuNzA1MDc4MSBDIDguMTEyODc1NSwyLjcwODE1ODEgOC45NTI5ODk1LDIuODcxMjE1NiA5LjczMDQ2OSwzLjEzNDc2NTYgMTEuNDA4ODc0LDMuNzAzNzEyMSAxMi45MDE0Miw0LjY4NDcxMDQgMTQsNS42MzY3MTg4IFYgNCBoIDIgViA5IEggMTEgViA3IGggMS41MDk3NjUgQyAxMS41OTA3NSw2LjI0ODUxNzMgMTAuMzQwMjA4LDUuNDUzODA4IDkuMDg3ODkwNCw1LjAyOTI5NjkgNy40MzA5Mzk4LDQuNDY3NjIzMSA1Ljk0NTM0NTgsNC40Njg3MTcgNC43MDcwMzA4LDUuNzA3MDMxMiBjIC0xLjIyNTAxNCwxLjIyNTAxNDIgLTEuNDA5NzY5LDIuNzIwNjk1MyAtMC43NzkyOTcsNC4yOTY4NzQ4IDAuNjMwNDcyLDEuNTc2MTggMi4xNjc0NzUsMy4xNTgwMDYgNC40NDMzNTk4LDQuMDY4MzYgbCAtMC43NDIxODc4LDEuODU1NDY4IGMgLTIuNzI0MTE1LC0xLjA4OTY0NiAtNC42ODcxMTIsLTMuMDA3ODIgLTUuNTU2NjQsLTUuMTgxNjQgLTAuODY5NTI4LC0yLjE3MzgyMDYgLTAuNTU0MjgzLC00LjY3ODEzOTMgMS4yMjA3MDMsLTYuNDUzMTI1MiAwLjkyMzg1NywtMC45MjM4NTY4IDIuMDE1Mzg4LC0xLjM4ODgyOCAzLjEzNDc2NSwtMS41MzUxNTYzIDAuMjc5ODQ1LC0wLjAzNjU4MiAwLjU2MDY4MiwtMC4wNTM3NjEgMC44NDE3OTcsLTAuMDUyNzM0IHpcIiAvPjwvc3ZnPmAsXG4gIHN0cmlrZXRocm91Z2g6IGA8c3ZnIHdpZHRoPVwiMThcIiBoZWlnaHQ9XCIxOFwiPjxwYXRoIGQ9XCJNMTAgMkM2IDIgNCA0IDQgNmMwIC4zMzguMDguNjcyLjE5MyAxaDIuMzRDNi4xMTMgNi42MjkgNiA2LjI5NSA2IDZjMC0uMzM0LjExNy0uNzI1LjY5MS0xLjE1NEM3LjI2NSA0LjQxNiA4LjMzMSA0IDEwIDRoM2ExIDEgMCAwMDAtMnptMS40NzcgOWMuNDEzLjM2OC41MjMuNzA2LjUyMyAxIDAgLjMzNC0uMTI3LjcxMi0uNzAxIDEuMTQzLS41NzUuNDMtMS42MzIuODUtMy4yOTkuODU3bC0xLjAwNi4wMDdWMTRINWExIDEgMCAwMDAgMmgzYzQgMCA2LTIgNi00IDAtLjMzOC0uMDgxLS42NzItLjE5NS0xelwiLz48cmVjdCByeT1cIjFcIiB5PVwiOFwiIHg9XCIxXCIgaGVpZ2h0PVwiMlwiIHdpZHRoPVwiMTZcIi8+PC9zdmc+YCxcbiAgdWw6IGA8c3ZnIGhlaWdodD1cIjE4XCIgd2lkdGg9XCIxOFwiPjxjaXJjbGUgY3g9XCIyXCIgY3k9XCI5XCIgcj1cIjJcIi8+PGNpcmNsZSBjeT1cIjRcIiBjeD1cIjJcIiByPVwiMlwiLz48cmVjdCB5PVwiM1wiIHg9XCI2XCIgaGVpZ2h0PVwiMlwiIHdpZHRoPVwiMTJcIiByeT1cIjFcIi8+PGNpcmNsZSBjeD1cIjJcIiBjeT1cIjE0XCIgcj1cIjJcIi8+PHJlY3Qgcnk9XCIxXCIgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjJcIiB4PVwiNlwiIHk9XCI4XCIvPjxyZWN0IHk9XCIxM1wiIHg9XCI2XCIgaGVpZ2h0PVwiMlwiIHdpZHRoPVwiMTJcIiByeT1cIjFcIi8+PC9zdmc+YCxcbiAgdW5kbzogYDxzdmcgaGVpZ2h0PVwiMThcIiB3aWR0aD1cIjE4XCI+PHBhdGggZD1cIk0gMTAuNzMwNDY5IDIuNzA1MDc4MSBDIDkuODg3MTI0MyAyLjcwODE1OTQgOS4wNDcwMTAzIDIuODcxMjE1NiA4LjI2OTUzMTIgMy4xMzQ3NjU2IEMgNi41OTExMjU2IDMuNzAzNzEyMSA1LjA5ODU3OTcgNC42ODQ3MTA0IDQgNS42MzY3MTg4IEwgNCA0IEwgMiA0IEwgMiA5IEwgNyA5IEwgNyA3IEwgNS40OTAyMzQ0IDcgQyA2LjQwOTI0OTkgNi4yNDg1MTczIDcuNjU5NzkxNCA1LjQ1MzgwOCA4LjkxMjEwOTQgNS4wMjkyOTY5IEMgMTAuNTY5MDYgNC40Njc2MjMxIDEyLjA1NDY1NCA0LjQ2ODcxNyAxMy4yOTI5NjkgNS43MDcwMzEyIEMgMTQuNTE3OTgzIDYuOTMyMDQ1NCAxNC43MDI3MzggOC40Mjc3MjY1IDE0LjA3MjI2NiAxMC4wMDM5MDYgQyAxMy40NDE3OTQgMTEuNTgwMDg2IDExLjkwNDc5MSAxMy4xNjE5MTIgOS42Mjg5MDYyIDE0LjA3MjI2NiBMIDEwLjM3MTA5NCAxNS45Mjc3MzQgQyAxMy4wOTUyMDkgMTQuODM4MDg4IDE1LjA1ODIwNiAxMi45MTk5MTQgMTUuOTI3NzM0IDEwLjc0NjA5NCBDIDE2Ljc5NzI2MiA4LjU3MjI3MzQgMTYuNDgyMDE3IDYuMDY3OTU0NyAxNC43MDcwMzEgNC4yOTI5Njg4IEMgMTMuNzgzMTc0IDMuMzY5MTEyIDEyLjY5MTY0MyAyLjkwNDE0MDggMTEuNTcyMjY2IDIuNzU3ODEyNSBDIDExLjI5MjQyMSAyLjcyMTIzMDQgMTEuMDExNTg0IDIuNzA0MDUxIDEwLjczMDQ2OSAyLjcwNTA3ODEgeiBcIiAvPjwvc3ZnPlxuYFxufTtcblxuZXhwb3J0IGRlZmF1bHQgc3ZnOyIsImltcG9ydCBzdmcgZnJvbSBcIi4vc3ZnL3N2Z1wiO1xuaW1wb3J0IHsgRWRpdG9yLCBQb3NpdGlvbiwgU2VsZWN0aW9uRXZlbnQgfSBmcm9tIFwiLi9UaW55TURFXCI7XG5cbmNvbnN0IGlzTWFjTGlrZSA9IC8oTWFjfGlQaG9uZXxpUG9kfGlQYWQpL2kudGVzdChcbiAgdHlwZW9mIG5hdmlnYXRvciAhPT0gXCJ1bmRlZmluZWRcIiA/IG5hdmlnYXRvci5wbGF0Zm9ybSA6IFwiXCJcbik7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tbWFuZEFjdGlvbiB7XG4gIChlZGl0b3I6IEVkaXRvcik6IHZvaWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tbWFuZEVuYWJsZWQge1xuICAoZWRpdG9yOiBFZGl0b3IsIGZvY3VzPzogUG9zaXRpb24sIGFuY2hvcj86IFBvc2l0aW9uKTogYm9vbGVhbiB8IG51bGw7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tbWFuZERlZmluaXRpb24ge1xuICBuYW1lOiBzdHJpbmc7XG4gIGFjdGlvbjogc3RyaW5nIHwgQ29tbWFuZEFjdGlvbjtcbiAgaW5uZXJIVE1MOiBzdHJpbmc7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIGhvdGtleT86IHN0cmluZztcbiAgZW5hYmxlZD86IENvbW1hbmRFbmFibGVkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbW1hbmRCYXJQcm9wcyB7XG4gIGVsZW1lbnQ/OiBzdHJpbmcgfCBIVE1MRWxlbWVudDtcbiAgZWRpdG9yPzogRWRpdG9yO1xuICBjb21tYW5kcz86IChzdHJpbmcgfCBDb21tYW5kRGVmaW5pdGlvbilbXTtcbn1cblxuaW50ZXJmYWNlIEhvdGtleSB7XG4gIG1vZGlmaWVyczogc3RyaW5nW107XG4gIGNvbW1hbmQ6IHN0cmluZztcbiAga2V5Pzogc3RyaW5nO1xuICBjb2RlPzogc3RyaW5nO1xufVxuXG5jb25zdCBEZWZhdWx0Q29tbWFuZHM6IFJlY29yZDxzdHJpbmcsIENvbW1hbmREZWZpbml0aW9uPiA9IHtcbiAgYm9sZDoge1xuICAgIG5hbWU6IFwiYm9sZFwiLFxuICAgIGFjdGlvbjogXCJib2xkXCIsXG4gICAgaW5uZXJIVE1MOiBzdmcuYm9sZCxcbiAgICB0aXRsZTogXCJCb2xkXCIsXG4gICAgaG90a2V5OiBcIk1vZC1CXCIsXG4gIH0sXG4gIGl0YWxpYzoge1xuICAgIG5hbWU6IFwiaXRhbGljXCIsXG4gICAgYWN0aW9uOiBcIml0YWxpY1wiLFxuICAgIGlubmVySFRNTDogc3ZnLml0YWxpYyxcbiAgICB0aXRsZTogXCJJdGFsaWNcIixcbiAgICBob3RrZXk6IFwiTW9kLUlcIixcbiAgfSxcbiAgc3RyaWtldGhyb3VnaDoge1xuICAgIG5hbWU6IFwic3RyaWtldGhyb3VnaFwiLFxuICAgIGFjdGlvbjogXCJzdHJpa2V0aHJvdWdoXCIsXG4gICAgaW5uZXJIVE1MOiBzdmcuc3RyaWtldGhyb3VnaCxcbiAgICB0aXRsZTogXCJTdHJpa2V0aHJvdWdoXCIsXG4gICAgaG90a2V5OiBcIk1vZDItU2hpZnQtNVwiLFxuICB9LFxuICBjb2RlOiB7XG4gICAgbmFtZTogXCJjb2RlXCIsXG4gICAgYWN0aW9uOiBcImNvZGVcIixcbiAgICBpbm5lckhUTUw6IHN2Zy5jb2RlLFxuICAgIHRpdGxlOiBcIkZvcm1hdCBhcyBjb2RlXCIsXG4gIH0sXG4gIGgxOiB7XG4gICAgbmFtZTogXCJoMVwiLFxuICAgIGFjdGlvbjogXCJoMVwiLFxuICAgIGlubmVySFRNTDogc3ZnLmgxLFxuICAgIHRpdGxlOiBcIkxldmVsIDEgaGVhZGluZ1wiLFxuICAgIGhvdGtleTogXCJNb2QtU2hpZnQtMVwiLFxuICB9LFxuICBoMjoge1xuICAgIG5hbWU6IFwiaDJcIixcbiAgICBhY3Rpb246IFwiaDJcIixcbiAgICBpbm5lckhUTUw6IHN2Zy5oMixcbiAgICB0aXRsZTogXCJMZXZlbCAyIGhlYWRpbmdcIixcbiAgICBob3RrZXk6IFwiTW9kLVNoaWZ0LTJcIixcbiAgfSxcbiAgdWw6IHtcbiAgICBuYW1lOiBcInVsXCIsXG4gICAgYWN0aW9uOiBcInVsXCIsXG4gICAgaW5uZXJIVE1MOiBzdmcudWwsXG4gICAgdGl0bGU6IFwiQnVsbGV0ZWQgbGlzdFwiLFxuICB9LFxuICBvbDoge1xuICAgIG5hbWU6IFwib2xcIixcbiAgICBhY3Rpb246IFwib2xcIixcbiAgICBpbm5lckhUTUw6IHN2Zy5vbCxcbiAgICB0aXRsZTogXCJOdW1iZXJlZCBsaXN0XCIsXG4gIH0sXG4gIGJsb2NrcXVvdGU6IHtcbiAgICBuYW1lOiBcImJsb2NrcXVvdGVcIixcbiAgICBhY3Rpb246IFwiYmxvY2txdW90ZVwiLFxuICAgIGlubmVySFRNTDogc3ZnLmJsb2NrcXVvdGUsXG4gICAgdGl0bGU6IFwiUXVvdGVcIixcbiAgICBob3RrZXk6IFwiTW9kMi1TaGlmdC1RXCIsXG4gIH0sXG4gIGluc2VydExpbms6IHtcbiAgICBuYW1lOiBcImluc2VydExpbmtcIixcbiAgICBhY3Rpb246IChlZGl0b3I6IEVkaXRvcikgPT4ge1xuICAgICAgaWYgKChlZGl0b3IgYXMgYW55KS5pc0lubGluZUZvcm1hdHRpbmdBbGxvd2VkKCkpIGVkaXRvci53cmFwU2VsZWN0aW9uKFwiW1wiLCBcIl0oKVwiKTtcbiAgICB9LFxuICAgIGVuYWJsZWQ6IChlZGl0b3I6IEVkaXRvciwgZm9jdXM/OiBQb3NpdGlvbiwgYW5jaG9yPzogUG9zaXRpb24pID0+XG4gICAgICAoZWRpdG9yIGFzIGFueSkuaXNJbmxpbmVGb3JtYXR0aW5nQWxsb3dlZChmb2N1cywgYW5jaG9yKSA/IGZhbHNlIDogbnVsbCxcbiAgICBpbm5lckhUTUw6IHN2Zy5saW5rLFxuICAgIHRpdGxlOiBcIkluc2VydCBsaW5rXCIsXG4gICAgaG90a2V5OiBcIk1vZC1LXCIsXG4gIH0sXG4gIGluc2VydEltYWdlOiB7XG4gICAgbmFtZTogXCJpbnNlcnRJbWFnZVwiLFxuICAgIGFjdGlvbjogKGVkaXRvcjogRWRpdG9yKSA9PiB7XG4gICAgICBpZiAoKGVkaXRvciBhcyBhbnkpLmlzSW5saW5lRm9ybWF0dGluZ0FsbG93ZWQoKSkgZWRpdG9yLndyYXBTZWxlY3Rpb24oXCIhW1wiLCBcIl0oKVwiKTtcbiAgICB9LFxuICAgIGVuYWJsZWQ6IChlZGl0b3I6IEVkaXRvciwgZm9jdXM/OiBQb3NpdGlvbiwgYW5jaG9yPzogUG9zaXRpb24pID0+XG4gICAgICAoZWRpdG9yIGFzIGFueSkuaXNJbmxpbmVGb3JtYXR0aW5nQWxsb3dlZChmb2N1cywgYW5jaG9yKSA/IGZhbHNlIDogbnVsbCxcbiAgICBpbm5lckhUTUw6IHN2Zy5pbWFnZSxcbiAgICB0aXRsZTogXCJJbnNlcnQgaW1hZ2VcIixcbiAgICBob3RrZXk6IFwiTW9kMi1TaGlmdC1JXCIsXG4gIH0sXG4gIGhyOiB7XG4gICAgbmFtZTogXCJoclwiLFxuICAgIGFjdGlvbjogKGVkaXRvcjogRWRpdG9yKSA9PiBlZGl0b3IucGFzdGUoXCJcXG4qKipcXG5cIiksXG4gICAgZW5hYmxlZDogKCkgPT4gZmFsc2UsXG4gICAgaW5uZXJIVE1MOiBzdmcuaHIsXG4gICAgdGl0bGU6IFwiSW5zZXJ0IGhvcml6b250YWwgbGluZVwiLFxuICAgIGhvdGtleTogXCJNb2QyLVNoaWZ0LUxcIixcbiAgfSxcbiAgdW5kbzoge1xuICAgIG5hbWU6IFwidW5kb1wiLFxuICAgIGFjdGlvbjogKGVkaXRvcjogRWRpdG9yKSA9PiBlZGl0b3IudW5kbygpLFxuICAgIGVuYWJsZWQ6IChlZGl0b3I6IEVkaXRvcikgPT4gKGVkaXRvci5jYW5VbmRvID8gZmFsc2UgOiBudWxsKSxcbiAgICBpbm5lckhUTUw6IHN2Zy51bmRvLFxuICAgIHRpdGxlOiBcIlVuZG9cIixcbiAgfSxcbiAgcmVkbzoge1xuICAgIG5hbWU6IFwicmVkb1wiLFxuICAgIGFjdGlvbjogKGVkaXRvcjogRWRpdG9yKSA9PiBlZGl0b3IucmVkbygpLFxuICAgIGVuYWJsZWQ6IChlZGl0b3I6IEVkaXRvcikgPT4gKGVkaXRvci5jYW5SZWRvID8gZmFsc2UgOiBudWxsKSxcbiAgICBpbm5lckhUTUw6IHN2Zy5yZWRvLFxuICAgIHRpdGxlOiBcIlJlZG9cIixcbiAgfSxcbn07XG5cbmV4cG9ydCBjbGFzcyBDb21tYW5kQmFyIHtcbiAgcHVibGljIGU6IEhUTUxEaXZFbGVtZW50IHwgbnVsbCA9IG51bGw7XG4gIHB1YmxpYyBlZGl0b3I6IEVkaXRvciB8IG51bGwgPSBudWxsO1xuICBwdWJsaWMgY29tbWFuZHM6IFJlY29yZDxzdHJpbmcsIENvbW1hbmREZWZpbml0aW9uPiA9IHt9O1xuICBwdWJsaWMgYnV0dG9uczogUmVjb3JkPHN0cmluZywgSFRNTERpdkVsZW1lbnQ+ID0ge307XG4gIHB1YmxpYyBzdGF0ZTogUmVjb3JkPHN0cmluZywgYm9vbGVhbiB8IG51bGw+ID0ge307XG4gIHByaXZhdGUgaG90a2V5czogSG90a2V5W10gPSBbXTtcblxuICBjb25zdHJ1Y3Rvcihwcm9wczogQ29tbWFuZEJhclByb3BzKSB7XG4gICAgdGhpcy5lID0gbnVsbDtcbiAgICB0aGlzLmVkaXRvciA9IG51bGw7XG4gICAgdGhpcy5jb21tYW5kcyA9IHt9O1xuICAgIHRoaXMuYnV0dG9ucyA9IHt9O1xuICAgIHRoaXMuc3RhdGUgPSB7fTtcbiAgICB0aGlzLmhvdGtleXMgPSBbXTtcblxuICAgIGxldCBlbGVtZW50OiBIVE1MRWxlbWVudCB8IG51bGwgPSBudWxsO1xuICAgIGlmICh0eXBlb2YgcHJvcHMuZWxlbWVudCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChwcm9wcy5lbGVtZW50KTtcbiAgICB9IGVsc2UgaWYgKHByb3BzLmVsZW1lbnQpIHtcbiAgICAgIGVsZW1lbnQgPSBwcm9wcy5lbGVtZW50O1xuICAgIH1cbiAgICBcbiAgICBpZiAoIWVsZW1lbnQpIHtcbiAgICAgIGVsZW1lbnQgPSBkb2N1bWVudC5ib2R5O1xuICAgIH1cblxuICAgIHRoaXMuY3JlYXRlQ29tbWFuZEJhckVsZW1lbnQoXG4gICAgICBlbGVtZW50LFxuICAgICAgcHJvcHMuY29tbWFuZHMgfHwgW1xuICAgICAgICBcImJvbGRcIixcbiAgICAgICAgXCJpdGFsaWNcIixcbiAgICAgICAgXCJzdHJpa2V0aHJvdWdoXCIsXG4gICAgICAgIFwifFwiLFxuICAgICAgICBcImNvZGVcIixcbiAgICAgICAgXCJ8XCIsXG4gICAgICAgIFwiaDFcIixcbiAgICAgICAgXCJoMlwiLFxuICAgICAgICBcInxcIixcbiAgICAgICAgXCJ1bFwiLFxuICAgICAgICBcIm9sXCIsXG4gICAgICAgIFwifFwiLFxuICAgICAgICBcImJsb2NrcXVvdGVcIixcbiAgICAgICAgXCJoclwiLFxuICAgICAgICBcInxcIixcbiAgICAgICAgXCJ1bmRvXCIsXG4gICAgICAgIFwicmVkb1wiLFxuICAgICAgICBcInxcIixcbiAgICAgICAgXCJpbnNlcnRMaW5rXCIsXG4gICAgICAgIFwiaW5zZXJ0SW1hZ2VcIixcbiAgICAgIF1cbiAgICApO1xuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIChlKSA9PiB0aGlzLmhhbmRsZUtleWRvd24oZSkpO1xuICAgIGlmIChwcm9wcy5lZGl0b3IpIHRoaXMuc2V0RWRpdG9yKHByb3BzLmVkaXRvcik7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUNvbW1hbmRCYXJFbGVtZW50KHBhcmVudEVsZW1lbnQ6IEhUTUxFbGVtZW50LCBjb21tYW5kczogKHN0cmluZyB8IENvbW1hbmREZWZpbml0aW9uKVtdKTogdm9pZCB7XG4gICAgdGhpcy5lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICB0aGlzLmUuY2xhc3NOYW1lID0gXCJUTUNvbW1hbmRCYXJcIjtcblxuICAgIGZvciAobGV0IGNvbW1hbmQgb2YgY29tbWFuZHMpIHtcbiAgICAgIGlmIChjb21tYW5kID09PSBcInxcIikge1xuICAgICAgICBsZXQgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgICBlbC5jbGFzc05hbWUgPSBcIlRNQ29tbWFuZERpdmlkZXJcIjtcbiAgICAgICAgdGhpcy5lLmFwcGVuZENoaWxkKGVsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxldCBjb21tYW5kTmFtZTogc3RyaW5nO1xuICAgICAgICBpZiAodHlwZW9mIGNvbW1hbmQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICBpZiAoRGVmYXVsdENvbW1hbmRzW2NvbW1hbmRdKSB7XG4gICAgICAgICAgICBjb21tYW5kTmFtZSA9IGNvbW1hbmQ7XG4gICAgICAgICAgICB0aGlzLmNvbW1hbmRzW2NvbW1hbmROYW1lXSA9IERlZmF1bHRDb21tYW5kc1tjb21tYW5kTmFtZV07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgY29tbWFuZCA9PT0gXCJvYmplY3RcIiAmJiBjb21tYW5kLm5hbWUpIHtcbiAgICAgICAgICBjb21tYW5kTmFtZSA9IGNvbW1hbmQubmFtZTtcbiAgICAgICAgICB0aGlzLmNvbW1hbmRzW2NvbW1hbmROYW1lXSA9IHt9IGFzIENvbW1hbmREZWZpbml0aW9uO1xuICAgICAgICAgIGlmIChEZWZhdWx0Q29tbWFuZHNbY29tbWFuZE5hbWVdKSB7XG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMuY29tbWFuZHNbY29tbWFuZE5hbWVdLCBEZWZhdWx0Q29tbWFuZHNbY29tbWFuZE5hbWVdKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLmNvbW1hbmRzW2NvbW1hbmROYW1lXSwgY29tbWFuZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgdGl0bGUgPSB0aGlzLmNvbW1hbmRzW2NvbW1hbmROYW1lXS50aXRsZSB8fCBjb21tYW5kTmFtZTtcblxuICAgICAgICBpZiAodGhpcy5jb21tYW5kc1tjb21tYW5kTmFtZV0uaG90a2V5KSB7XG4gICAgICAgICAgY29uc3Qga2V5cyA9IHRoaXMuY29tbWFuZHNbY29tbWFuZE5hbWVdLmhvdGtleSEuc3BsaXQoXCItXCIpO1xuICAgICAgICAgIGxldCBtb2RpZmllcnM6IHN0cmluZ1tdID0gW107XG4gICAgICAgICAgbGV0IG1vZGlmaWVyZXhwbGFuYXRpb246IHN0cmluZ1tdID0gW107XG4gICAgICAgICAgXG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgICAgICAgc3dpdGNoIChrZXlzW2ldKSB7XG4gICAgICAgICAgICAgIGNhc2UgXCJDdHJsXCI6XG4gICAgICAgICAgICAgICAgbW9kaWZpZXJzLnB1c2goXCJjdHJsS2V5XCIpO1xuICAgICAgICAgICAgICAgIG1vZGlmaWVyZXhwbGFuYXRpb24ucHVzaChcIkN0cmxcIik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgXCJDbWRcIjpcbiAgICAgICAgICAgICAgICBtb2RpZmllcnMucHVzaChcIm1ldGFLZXlcIik7XG4gICAgICAgICAgICAgICAgbW9kaWZpZXJleHBsYW5hdGlvbi5wdXNoKFwi4oyYXCIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIFwiQWx0XCI6XG4gICAgICAgICAgICAgICAgbW9kaWZpZXJzLnB1c2goXCJhbHRLZXlcIik7XG4gICAgICAgICAgICAgICAgbW9kaWZpZXJleHBsYW5hdGlvbi5wdXNoKFwiQWx0XCIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIFwiT3B0aW9uXCI6XG4gICAgICAgICAgICAgICAgbW9kaWZpZXJzLnB1c2goXCJhbHRLZXlcIik7XG4gICAgICAgICAgICAgICAgbW9kaWZpZXJleHBsYW5hdGlvbi5wdXNoKFwi4oylXCIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIFwiV2luXCI6XG4gICAgICAgICAgICAgICAgbW9kaWZpZXJzLnB1c2goXCJtZXRhS2V5XCIpO1xuICAgICAgICAgICAgICAgIG1vZGlmaWVyZXhwbGFuYXRpb24ucHVzaChcIuKKniBXaW5cIik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgXCJTaGlmdFwiOlxuICAgICAgICAgICAgICAgIG1vZGlmaWVycy5wdXNoKFwic2hpZnRLZXlcIik7XG4gICAgICAgICAgICAgICAgbW9kaWZpZXJleHBsYW5hdGlvbi5wdXNoKFwi4oenXCIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIFwiTW9kXCI6XG4gICAgICAgICAgICAgICAgaWYgKGlzTWFjTGlrZSkge1xuICAgICAgICAgICAgICAgICAgbW9kaWZpZXJzLnB1c2goXCJtZXRhS2V5XCIpO1xuICAgICAgICAgICAgICAgICAgbW9kaWZpZXJleHBsYW5hdGlvbi5wdXNoKFwi4oyYXCIpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBtb2RpZmllcnMucHVzaChcImN0cmxLZXlcIik7XG4gICAgICAgICAgICAgICAgICBtb2RpZmllcmV4cGxhbmF0aW9uLnB1c2goXCJDdHJsXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSBcIk1vZDJcIjpcbiAgICAgICAgICAgICAgICBtb2RpZmllcnMucHVzaChcImFsdEtleVwiKTtcbiAgICAgICAgICAgICAgICBpZiAoaXNNYWNMaWtlKSBtb2RpZmllcmV4cGxhbmF0aW9uLnB1c2goXCLijKVcIik7XG4gICAgICAgICAgICAgICAgZWxzZSBtb2RpZmllcmV4cGxhbmF0aW9uLnB1c2goXCJBbHRcIik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIFxuICAgICAgICAgIG1vZGlmaWVyZXhwbGFuYXRpb24ucHVzaChrZXlzW2tleXMubGVuZ3RoIC0gMV0pO1xuICAgICAgICAgIGxldCBob3RrZXk6IEhvdGtleSA9IHtcbiAgICAgICAgICAgIG1vZGlmaWVyczogbW9kaWZpZXJzLFxuICAgICAgICAgICAgY29tbWFuZDogY29tbWFuZE5hbWUsXG4gICAgICAgICAgfTtcbiAgICAgICAgICBcbiAgICAgICAgICBpZiAoa2V5c1trZXlzLmxlbmd0aCAtIDFdLm1hdGNoKC9eWzAtOV0kLykpIHtcbiAgICAgICAgICAgIGhvdGtleS5jb2RlID0gYERpZ2l0JHtrZXlzW2tleXMubGVuZ3RoIC0gMV19YDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaG90a2V5LmtleSA9IGtleXNba2V5cy5sZW5ndGggLSAxXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmhvdGtleXMucHVzaChob3RrZXkpO1xuICAgICAgICAgIHRpdGxlID0gdGl0bGUuY29uY2F0KGAgKCR7bW9kaWZpZXJleHBsYW5hdGlvbi5qb2luKFwiK1wiKX0pYCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmJ1dHRvbnNbY29tbWFuZE5hbWVdID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgICAgdGhpcy5idXR0b25zW2NvbW1hbmROYW1lXS5jbGFzc05hbWUgPSBcIlRNQ29tbWFuZEJ1dHRvbiBUTUNvbW1hbmRCdXR0b25fRGlzYWJsZWRcIjtcbiAgICAgICAgdGhpcy5idXR0b25zW2NvbW1hbmROYW1lXS50aXRsZSA9IHRpdGxlO1xuICAgICAgICB0aGlzLmJ1dHRvbnNbY29tbWFuZE5hbWVdLmlubmVySFRNTCA9IHRoaXMuY29tbWFuZHNbY29tbWFuZE5hbWVdLmlubmVySFRNTDtcblxuICAgICAgICB0aGlzLmJ1dHRvbnNbY29tbWFuZE5hbWVdLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZWRvd25cIiwgKGUpID0+XG4gICAgICAgICAgdGhpcy5oYW5kbGVDbGljayhjb21tYW5kTmFtZSwgZSlcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5lLmFwcGVuZENoaWxkKHRoaXMuYnV0dG9uc1tjb21tYW5kTmFtZV0pO1xuICAgICAgfVxuICAgIH1cbiAgICBwYXJlbnRFbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuZSk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUNsaWNrKGNvbW1hbmROYW1lOiBzdHJpbmcsIGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5lZGl0b3IpIHJldHVybjtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGlmICh0eXBlb2YgdGhpcy5jb21tYW5kc1tjb21tYW5kTmFtZV0uYWN0aW9uID09PSBcInN0cmluZ1wiKSB7XG4gICAgICBpZiAodGhpcy5zdGF0ZVtjb21tYW5kTmFtZV0gPT09IGZhbHNlKVxuICAgICAgICAodGhpcy5lZGl0b3IgYXMgYW55KS5zZXRDb21tYW5kU3RhdGUoY29tbWFuZE5hbWUsIHRydWUpO1xuICAgICAgZWxzZSAodGhpcy5lZGl0b3IgYXMgYW55KS5zZXRDb21tYW5kU3RhdGUoY29tbWFuZE5hbWUsIGZhbHNlKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB0aGlzLmNvbW1hbmRzW2NvbW1hbmROYW1lXS5hY3Rpb24gPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgKHRoaXMuY29tbWFuZHNbY29tbWFuZE5hbWVdLmFjdGlvbiBhcyBDb21tYW5kQWN0aW9uKSh0aGlzLmVkaXRvcik7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHNldEVkaXRvcihlZGl0b3I6IEVkaXRvcik6IHZvaWQge1xuICAgIHRoaXMuZWRpdG9yID0gZWRpdG9yO1xuICAgIGVkaXRvci5hZGRFdmVudExpc3RlbmVyKFwic2VsZWN0aW9uXCIsIChlKSA9PiB0aGlzLmhhbmRsZVNlbGVjdGlvbihlKSk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZVNlbGVjdGlvbihldmVudDogU2VsZWN0aW9uRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoZXZlbnQuY29tbWFuZFN0YXRlKSB7XG4gICAgICBmb3IgKGxldCBjb21tYW5kIGluIHRoaXMuY29tbWFuZHMpIHtcbiAgICAgICAgaWYgKGV2ZW50LmNvbW1hbmRTdGF0ZVtjb21tYW5kXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgaWYgKHRoaXMuY29tbWFuZHNbY29tbWFuZF0uZW5hYmxlZCkge1xuICAgICAgICAgICAgdGhpcy5zdGF0ZVtjb21tYW5kXSA9IHRoaXMuY29tbWFuZHNbY29tbWFuZF0uZW5hYmxlZCEoXG4gICAgICAgICAgICAgIHRoaXMuZWRpdG9yISxcbiAgICAgICAgICAgICAgZXZlbnQuZm9jdXMsXG4gICAgICAgICAgICAgIGV2ZW50LmFuY2hvclxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zdGF0ZVtjb21tYW5kXSA9IGV2ZW50LmZvY3VzID8gZmFsc2UgOiBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnN0YXRlW2NvbW1hbmRdID0gZXZlbnQuY29tbWFuZFN0YXRlW2NvbW1hbmRdO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuc3RhdGVbY29tbWFuZF0gPT09IHRydWUpIHtcbiAgICAgICAgICB0aGlzLmJ1dHRvbnNbY29tbWFuZF0uY2xhc3NOYW1lID0gXCJUTUNvbW1hbmRCdXR0b24gVE1Db21tYW5kQnV0dG9uX0FjdGl2ZVwiO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc3RhdGVbY29tbWFuZF0gPT09IGZhbHNlKSB7XG4gICAgICAgICAgdGhpcy5idXR0b25zW2NvbW1hbmRdLmNsYXNzTmFtZSA9IFwiVE1Db21tYW5kQnV0dG9uIFRNQ29tbWFuZEJ1dHRvbl9JbmFjdGl2ZVwiO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuYnV0dG9uc1tjb21tYW5kXS5jbGFzc05hbWUgPSBcIlRNQ29tbWFuZEJ1dHRvbiBUTUNvbW1hbmRCdXR0b25fRGlzYWJsZWRcIjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlS2V5ZG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIG91dGVyOiBmb3IgKGxldCBob3RrZXkgb2YgdGhpcy5ob3RrZXlzKSB7XG4gICAgICBpZiAoXG4gICAgICAgIChob3RrZXkua2V5ICYmIGV2ZW50LmtleS50b0xvd2VyQ2FzZSgpID09PSBob3RrZXkua2V5KSB8fFxuICAgICAgICAoaG90a2V5LmNvZGUgJiYgZXZlbnQuY29kZSA9PT0gaG90a2V5LmNvZGUpXG4gICAgICApIHtcbiAgICAgICAgZm9yIChsZXQgbW9kaWZpZXIgb2YgaG90a2V5Lm1vZGlmaWVycykge1xuICAgICAgICAgIGlmICghKGV2ZW50IGFzIGFueSlbbW9kaWZpZXJdKSBjb250aW51ZSBvdXRlcjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmhhbmRsZUNsaWNrKGhvdGtleS5jb21tYW5kLCBldmVudCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQ29tbWFuZEJhcjsiLCIndXNlIHN0cmljdCc7XG52YXIgY2hlY2sgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ICYmIGl0Lk1hdGggPT09IE1hdGggJiYgaXQ7XG59O1xuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvODYjaXNzdWVjb21tZW50LTExNTc1OTAyOFxubW9kdWxlLmV4cG9ydHMgPVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tZ2xvYmFsLXRoaXMgLS0gc2FmZVxuICBjaGVjayh0eXBlb2YgZ2xvYmFsVGhpcyA9PSAnb2JqZWN0JyAmJiBnbG9iYWxUaGlzKSB8fFxuICBjaGVjayh0eXBlb2Ygd2luZG93ID09ICdvYmplY3QnICYmIHdpbmRvdykgfHxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtZ2xvYmFscyAtLSBzYWZlXG4gIGNoZWNrKHR5cGVvZiBzZWxmID09ICdvYmplY3QnICYmIHNlbGYpIHx8XG4gIGNoZWNrKHR5cGVvZiBnbG9iYWwgPT0gJ29iamVjdCcgJiYgZ2xvYmFsKSB8fFxuICBjaGVjayh0eXBlb2YgdGhpcyA9PSAnb2JqZWN0JyAmJiB0aGlzKSB8fFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmMgLS0gZmFsbGJhY2tcbiAgKGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0pKCkgfHwgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcbiIsIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gISFleGVjKCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxuLy8gRGV0ZWN0IElFOCdzIGluY29tcGxldGUgZGVmaW5lUHJvcGVydHkgaW1wbGVtZW50YXRpb25cbm1vZHVsZS5leHBvcnRzID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCAxLCB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfSB9KVsxXSAhPT0gNztcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWZ1bmN0aW9uLXByb3RvdHlwZS1iaW5kIC0tIHNhZmVcbiAgdmFyIHRlc3QgPSAoZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9KS5iaW5kKCk7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnMgLS0gc2FmZVxuICByZXR1cm4gdHlwZW9mIHRlc3QgIT0gJ2Z1bmN0aW9uJyB8fCB0ZXN0Lmhhc093blByb3BlcnR5KCdwcm90b3R5cGUnKTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIE5BVElWRV9CSU5EID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtbmF0aXZlJyk7XG5cbnZhciBGdW5jdGlvblByb3RvdHlwZSA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcbnZhciBjYWxsID0gRnVuY3Rpb25Qcm90b3R5cGUuY2FsbDtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1mdW5jdGlvbi1wcm90b3R5cGUtYmluZCAtLSBzYWZlXG52YXIgdW5jdXJyeVRoaXNXaXRoQmluZCA9IE5BVElWRV9CSU5EICYmIEZ1bmN0aW9uUHJvdG90eXBlLmJpbmQuYmluZChjYWxsLCBjYWxsKTtcblxubW9kdWxlLmV4cG9ydHMgPSBOQVRJVkVfQklORCA/IHVuY3VycnlUaGlzV2l0aEJpbmQgOiBmdW5jdGlvbiAoZm4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gY2FsbC5hcHBseShmbiwgYXJndW1lbnRzKTtcbiAgfTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLUlzSFRNTEREQS1pbnRlcm5hbC1zbG90XG52YXIgZG9jdW1lbnRBbGwgPSB0eXBlb2YgZG9jdW1lbnQgPT0gJ29iamVjdCcgJiYgZG9jdW1lbnQuYWxsO1xuXG4vLyBgSXNDYWxsYWJsZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWlzY2FsbGFibGVcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB1bmljb3JuL25vLXR5cGVvZi11bmRlZmluZWQgLS0gcmVxdWlyZWQgZm9yIHRlc3Rpbmdcbm1vZHVsZS5leHBvcnRzID0gdHlwZW9mIGRvY3VtZW50QWxsID09ICd1bmRlZmluZWQnICYmIGRvY3VtZW50QWxsICE9PSB1bmRlZmluZWQgPyBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmd1bWVudCA9PSAnZnVuY3Rpb24nIHx8IGFyZ3VtZW50ID09PSBkb2N1bWVudEFsbDtcbn0gOiBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmd1bWVudCA9PSAnZnVuY3Rpb24nO1xufTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIHdlIGNhbid0IHVzZSBqdXN0IGBpdCA9PSBudWxsYCBzaW5jZSBvZiBgZG9jdW1lbnQuYWxsYCBzcGVjaWFsIGNhc2Vcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtSXNIVE1MRERBLWludGVybmFsLXNsb3QtYWVjXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgPT09IG51bGwgfHwgaXQgPT09IHVuZGVmaW5lZDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgaXNOdWxsT3JVbmRlZmluZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtbnVsbC1vci11bmRlZmluZWQnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcmVxdWlyZW9iamVjdGNvZXJjaWJsZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKGl0KSkgdGhyb3cgbmV3ICRUeXBlRXJyb3IoXCJDYW4ndCBjYWxsIG1ldGhvZCBvbiBcIiArIGl0KTtcbiAgcmV0dXJuIGl0O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xuXG52YXIgJE9iamVjdCA9IE9iamVjdDtcblxuLy8gYFRvT2JqZWN0YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9vYmplY3Rcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiAkT2JqZWN0KHJlcXVpcmVPYmplY3RDb2VyY2libGUoYXJndW1lbnQpKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG5cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IHVuY3VycnlUaGlzKHt9Lmhhc093blByb3BlcnR5KTtcblxuLy8gYEhhc093blByb3BlcnR5YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtaGFzb3ducHJvcGVydHlcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtaGFzb3duIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0Lmhhc093biB8fCBmdW5jdGlvbiBoYXNPd24oaXQsIGtleSkge1xuICByZXR1cm4gaGFzT3duUHJvcGVydHkodG9PYmplY3QoaXQpLCBrZXkpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG5cbnZhciBGdW5jdGlvblByb3RvdHlwZSA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciBnZXREZXNjcmlwdG9yID0gREVTQ1JJUFRPUlMgJiYgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxudmFyIEVYSVNUUyA9IGhhc093bihGdW5jdGlvblByb3RvdHlwZSwgJ25hbWUnKTtcbi8vIGFkZGl0aW9uYWwgcHJvdGVjdGlvbiBmcm9tIG1pbmlmaWVkIC8gbWFuZ2xlZCAvIGRyb3BwZWQgZnVuY3Rpb24gbmFtZXNcbnZhciBQUk9QRVIgPSBFWElTVFMgJiYgKGZ1bmN0aW9uIHNvbWV0aGluZygpIHsgLyogZW1wdHkgKi8gfSkubmFtZSA9PT0gJ3NvbWV0aGluZyc7XG52YXIgQ09ORklHVVJBQkxFID0gRVhJU1RTICYmICghREVTQ1JJUFRPUlMgfHwgKERFU0NSSVBUT1JTICYmIGdldERlc2NyaXB0b3IoRnVuY3Rpb25Qcm90b3R5cGUsICduYW1lJykuY29uZmlndXJhYmxlKSk7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBFWElTVFM6IEVYSVNUUyxcbiAgUFJPUEVSOiBQUk9QRVIsXG4gIENPTkZJR1VSQUJMRTogQ09ORklHVVJBQkxFXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmYWxzZTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxudmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gIHRyeSB7XG4gICAgZGVmaW5lUHJvcGVydHkoZ2xvYmFsVGhpcywga2V5LCB7IHZhbHVlOiB2YWx1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBnbG9iYWxUaGlzW2tleV0gPSB2YWx1ZTtcbiAgfSByZXR1cm4gdmFsdWU7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBkZWZpbmVHbG9iYWxQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5Jyk7XG5cbnZhciBTSEFSRUQgPSAnX19jb3JlLWpzX3NoYXJlZF9fJztcbnZhciBzdG9yZSA9IG1vZHVsZS5leHBvcnRzID0gZ2xvYmFsVGhpc1tTSEFSRURdIHx8IGRlZmluZUdsb2JhbFByb3BlcnR5KFNIQVJFRCwge30pO1xuXG4oc3RvcmUudmVyc2lvbnMgfHwgKHN0b3JlLnZlcnNpb25zID0gW10pKS5wdXNoKHtcbiAgdmVyc2lvbjogJzMuNDIuMCcsXG4gIG1vZGU6IElTX1BVUkUgPyAncHVyZScgOiAnZ2xvYmFsJyxcbiAgY29weXJpZ2h0OiAnwqkgMjAxNC0yMDI1IERlbmlzIFB1c2hrYXJldiAoemxvaXJvY2sucnUpJyxcbiAgbGljZW5zZTogJ2h0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2Jsb2IvdjMuNDIuMC9MSUNFTlNFJyxcbiAgc291cmNlOiAnaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMnXG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgc3RvcmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlJyk7XG5cbnZhciBmdW5jdGlvblRvU3RyaW5nID0gdW5jdXJyeVRoaXMoRnVuY3Rpb24udG9TdHJpbmcpO1xuXG4vLyB0aGlzIGhlbHBlciBicm9rZW4gaW4gYGNvcmUtanNAMy40LjEtMy40LjRgLCBzbyB3ZSBjYW4ndCB1c2UgYHNoYXJlZGAgaGVscGVyXG5pZiAoIWlzQ2FsbGFibGUoc3RvcmUuaW5zcGVjdFNvdXJjZSkpIHtcbiAgc3RvcmUuaW5zcGVjdFNvdXJjZSA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBmdW5jdGlvblRvU3RyaW5nKGl0KTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdG9yZS5pbnNwZWN0U291cmNlO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG5cbnZhciBXZWFrTWFwID0gZ2xvYmFsVGhpcy5XZWFrTWFwO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQ2FsbGFibGUoV2Vha01hcCkgJiYgL25hdGl2ZSBjb2RlLy50ZXN0KFN0cmluZyhXZWFrTWFwKSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdHlwZW9mIGl0ID09ICdvYmplY3QnID8gaXQgIT09IG51bGwgOiBpc0NhbGxhYmxlKGl0KTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG52YXIgZG9jdW1lbnQgPSBnbG9iYWxUaGlzLmRvY3VtZW50O1xuLy8gdHlwZW9mIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQgaXMgJ29iamVjdCcgaW4gb2xkIElFXG52YXIgRVhJU1RTID0gaXNPYmplY3QoZG9jdW1lbnQpICYmIGlzT2JqZWN0KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gRVhJU1RTID8gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChpdCkgOiB7fTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGNyZWF0ZUVsZW1lbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQnKTtcblxuLy8gVGhhbmtzIHRvIElFOCBmb3IgaXRzIGZ1bm55IGRlZmluZVByb3BlcnR5XG5tb2R1bGUuZXhwb3J0cyA9ICFERVNDUklQVE9SUyAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoY3JlYXRlRWxlbWVudCgnZGl2JyksICdhJywge1xuICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfVxuICB9KS5hICE9PSA3O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG4vLyBWOCB+IENocm9tZSAzNi1cbi8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTMzMzRcbm1vZHVsZS5leHBvcnRzID0gREVTQ1JJUFRPUlMgJiYgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9LCAncHJvdG90eXBlJywge1xuICAgIHZhbHVlOiA0MixcbiAgICB3cml0YWJsZTogZmFsc2VcbiAgfSkucHJvdG90eXBlICE9PSA0Mjtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG52YXIgJFN0cmluZyA9IFN0cmluZztcbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgQXNzZXJ0OiBUeXBlKGFyZ3VtZW50KSBpcyBPYmplY3RgXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICBpZiAoaXNPYmplY3QoYXJndW1lbnQpKSByZXR1cm4gYXJndW1lbnQ7XG4gIHRocm93IG5ldyAkVHlwZUVycm9yKCRTdHJpbmcoYXJndW1lbnQpICsgJyBpcyBub3QgYW4gb2JqZWN0Jyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIE5BVElWRV9CSU5EID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtbmF0aXZlJyk7XG5cbnZhciBjYWxsID0gRnVuY3Rpb24ucHJvdG90eXBlLmNhbGw7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tZnVuY3Rpb24tcHJvdG90eXBlLWJpbmQgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBOQVRJVkVfQklORCA/IGNhbGwuYmluZChjYWxsKSA6IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGNhbGwuYXBwbHkoY2FsbCwgYXJndW1lbnRzKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcblxudmFyIGFGdW5jdGlvbiA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gaXNDYWxsYWJsZShhcmd1bWVudCkgPyBhcmd1bWVudCA6IHVuZGVmaW5lZDtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWVzcGFjZSwgbWV0aG9kKSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoIDwgMiA/IGFGdW5jdGlvbihnbG9iYWxUaGlzW25hbWVzcGFjZV0pIDogZ2xvYmFsVGhpc1tuYW1lc3BhY2VdICYmIGdsb2JhbFRoaXNbbmFtZXNwYWNlXVttZXRob2RdO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSB1bmN1cnJ5VGhpcyh7fS5pc1Byb3RvdHlwZU9mKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG5cbnZhciBuYXZpZ2F0b3IgPSBnbG9iYWxUaGlzLm5hdmlnYXRvcjtcbnZhciB1c2VyQWdlbnQgPSBuYXZpZ2F0b3IgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudDtcblxubW9kdWxlLmV4cG9ydHMgPSB1c2VyQWdlbnQgPyBTdHJpbmcodXNlckFnZW50KSA6ICcnO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW52aXJvbm1lbnQtdXNlci1hZ2VudCcpO1xuXG52YXIgcHJvY2VzcyA9IGdsb2JhbFRoaXMucHJvY2VzcztcbnZhciBEZW5vID0gZ2xvYmFsVGhpcy5EZW5vO1xudmFyIHZlcnNpb25zID0gcHJvY2VzcyAmJiBwcm9jZXNzLnZlcnNpb25zIHx8IERlbm8gJiYgRGVuby52ZXJzaW9uO1xudmFyIHY4ID0gdmVyc2lvbnMgJiYgdmVyc2lvbnMudjg7XG52YXIgbWF0Y2gsIHZlcnNpb247XG5cbmlmICh2OCkge1xuICBtYXRjaCA9IHY4LnNwbGl0KCcuJyk7XG4gIC8vIGluIG9sZCBDaHJvbWUsIHZlcnNpb25zIG9mIFY4IGlzbid0IFY4ID0gQ2hyb21lIC8gMTBcbiAgLy8gYnV0IHRoZWlyIGNvcnJlY3QgdmVyc2lvbnMgYXJlIG5vdCBpbnRlcmVzdGluZyBmb3IgdXNcbiAgdmVyc2lvbiA9IG1hdGNoWzBdID4gMCAmJiBtYXRjaFswXSA8IDQgPyAxIDogKyhtYXRjaFswXSArIG1hdGNoWzFdKTtcbn1cblxuLy8gQnJvd3NlckZTIE5vZGVKUyBgcHJvY2Vzc2AgcG9seWZpbGwgaW5jb3JyZWN0bHkgc2V0IGAudjhgIHRvIGAwLjBgXG4vLyBzbyBjaGVjayBgdXNlckFnZW50YCBldmVuIGlmIGAudjhgIGV4aXN0cywgYnV0IDBcbmlmICghdmVyc2lvbiAmJiB1c2VyQWdlbnQpIHtcbiAgbWF0Y2ggPSB1c2VyQWdlbnQubWF0Y2goL0VkZ2VcXC8oXFxkKykvKTtcbiAgaWYgKCFtYXRjaCB8fCBtYXRjaFsxXSA+PSA3NCkge1xuICAgIG1hdGNoID0gdXNlckFnZW50Lm1hdGNoKC9DaHJvbWVcXC8oXFxkKykvKTtcbiAgICBpZiAobWF0Y2gpIHZlcnNpb24gPSArbWF0Y2hbMV07XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB2ZXJzaW9uO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLyogZXNsaW50LWRpc2FibGUgZXMvbm8tc3ltYm9sIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nICovXG52YXIgVjhfVkVSU0lPTiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnZpcm9ubWVudC12OC12ZXJzaW9uJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG5cbnZhciAkU3RyaW5nID0gZ2xvYmFsVGhpcy5TdHJpbmc7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlzeW1ib2xzIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG5tb2R1bGUuZXhwb3J0cyA9ICEhT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgc3ltYm9sID0gU3ltYm9sKCdzeW1ib2wgZGV0ZWN0aW9uJyk7XG4gIC8vIENocm9tZSAzOCBTeW1ib2wgaGFzIGluY29ycmVjdCB0b1N0cmluZyBjb252ZXJzaW9uXG4gIC8vIGBnZXQtb3duLXByb3BlcnR5LXN5bWJvbHNgIHBvbHlmaWxsIHN5bWJvbHMgY29udmVydGVkIHRvIG9iamVjdCBhcmUgbm90IFN5bWJvbCBpbnN0YW5jZXNcbiAgLy8gbmI6IERvIG5vdCBjYWxsIGBTdHJpbmdgIGRpcmVjdGx5IHRvIGF2b2lkIHRoaXMgYmVpbmcgb3B0aW1pemVkIG91dCB0byBgc3ltYm9sKycnYCB3aGljaCB3aWxsLFxuICAvLyBvZiBjb3Vyc2UsIGZhaWwuXG4gIHJldHVybiAhJFN0cmluZyhzeW1ib2wpIHx8ICEoT2JqZWN0KHN5bWJvbCkgaW5zdGFuY2VvZiBTeW1ib2wpIHx8XG4gICAgLy8gQ2hyb21lIDM4LTQwIHN5bWJvbHMgYXJlIG5vdCBpbmhlcml0ZWQgZnJvbSBET00gY29sbGVjdGlvbnMgcHJvdG90eXBlcyB0byBpbnN0YW5jZXNcbiAgICAhU3ltYm9sLnNoYW0gJiYgVjhfVkVSU0lPTiAmJiBWOF9WRVJTSU9OIDwgNDE7XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8qIGVzbGludC1kaXNhYmxlIGVzL25vLXN5bWJvbCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZyAqL1xudmFyIE5BVElWRV9TWU1CT0wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWNvbnN0cnVjdG9yLWRldGVjdGlvbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE5BVElWRV9TWU1CT0wgJiZcbiAgIVN5bWJvbC5zaGFtICYmXG4gIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT0gJ3N5bWJvbCc7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgVVNFX1NZTUJPTF9BU19VSUQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdXNlLXN5bWJvbC1hcy11aWQnKTtcblxudmFyICRPYmplY3QgPSBPYmplY3Q7XG5cbm1vZHVsZS5leHBvcnRzID0gVVNFX1NZTUJPTF9BU19VSUQgPyBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PSAnc3ltYm9sJztcbn0gOiBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyICRTeW1ib2wgPSBnZXRCdWlsdEluKCdTeW1ib2wnKTtcbiAgcmV0dXJuIGlzQ2FsbGFibGUoJFN5bWJvbCkgJiYgaXNQcm90b3R5cGVPZigkU3ltYm9sLnByb3RvdHlwZSwgJE9iamVjdChpdCkpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkU3RyaW5nID0gU3RyaW5nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB0cnkge1xuICAgIHJldHVybiAkU3RyaW5nKGFyZ3VtZW50KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gJ09iamVjdCc7XG4gIH1cbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIHRyeVRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RyeS10by1zdHJpbmcnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBBc3NlcnQ6IElzQ2FsbGFibGUoYXJndW1lbnQpIGlzIHRydWVgXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICBpZiAoaXNDYWxsYWJsZShhcmd1bWVudCkpIHJldHVybiBhcmd1bWVudDtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IodHJ5VG9TdHJpbmcoYXJndW1lbnQpICsgJyBpcyBub3QgYSBmdW5jdGlvbicpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIGlzTnVsbE9yVW5kZWZpbmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkJyk7XG5cbi8vIGBHZXRNZXRob2RgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1nZXRtZXRob2Rcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKFYsIFApIHtcbiAgdmFyIGZ1bmMgPSBWW1BdO1xuICByZXR1cm4gaXNOdWxsT3JVbmRlZmluZWQoZnVuYykgPyB1bmRlZmluZWQgOiBhQ2FsbGFibGUoZnVuYyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBPcmRpbmFyeVRvUHJpbWl0aXZlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb3JkaW5hcnl0b3ByaW1pdGl2ZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaW5wdXQsIHByZWYpIHtcbiAgdmFyIGZuLCB2YWw7XG4gIGlmIChwcmVmID09PSAnc3RyaW5nJyAmJiBpc0NhbGxhYmxlKGZuID0gaW5wdXQudG9TdHJpbmcpICYmICFpc09iamVjdCh2YWwgPSBjYWxsKGZuLCBpbnB1dCkpKSByZXR1cm4gdmFsO1xuICBpZiAoaXNDYWxsYWJsZShmbiA9IGlucHV0LnZhbHVlT2YpICYmICFpc09iamVjdCh2YWwgPSBjYWxsKGZuLCBpbnB1dCkpKSByZXR1cm4gdmFsO1xuICBpZiAocHJlZiAhPT0gJ3N0cmluZycgJiYgaXNDYWxsYWJsZShmbiA9IGlucHV0LnRvU3RyaW5nKSAmJiAhaXNPYmplY3QodmFsID0gY2FsbChmbiwgaW5wdXQpKSkgcmV0dXJuIHZhbDtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoXCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWVcIik7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHN0b3JlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1zdG9yZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gIHJldHVybiBzdG9yZVtrZXldIHx8IChzdG9yZVtrZXldID0gdmFsdWUgfHwge30pO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxudmFyIGlkID0gMDtcbnZhciBwb3N0Zml4ID0gTWF0aC5yYW5kb20oKTtcbnZhciB0b1N0cmluZyA9IHVuY3VycnlUaGlzKDEuMC50b1N0cmluZyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICByZXR1cm4gJ1N5bWJvbCgnICsgKGtleSA9PT0gdW5kZWZpbmVkID8gJycgOiBrZXkpICsgJylfJyArIHRvU3RyaW5nKCsraWQgKyBwb3N0Zml4LCAzNik7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdWlkJyk7XG52YXIgTkFUSVZFX1NZTUJPTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtY29uc3RydWN0b3ItZGV0ZWN0aW9uJyk7XG52YXIgVVNFX1NZTUJPTF9BU19VSUQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdXNlLXN5bWJvbC1hcy11aWQnKTtcblxudmFyIFN5bWJvbCA9IGdsb2JhbFRoaXMuU3ltYm9sO1xudmFyIFdlbGxLbm93blN5bWJvbHNTdG9yZSA9IHNoYXJlZCgnd2tzJyk7XG52YXIgY3JlYXRlV2VsbEtub3duU3ltYm9sID0gVVNFX1NZTUJPTF9BU19VSUQgPyBTeW1ib2xbJ2ZvciddIHx8IFN5bWJvbCA6IFN5bWJvbCAmJiBTeW1ib2wud2l0aG91dFNldHRlciB8fCB1aWQ7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgaWYgKCFoYXNPd24oV2VsbEtub3duU3ltYm9sc1N0b3JlLCBuYW1lKSkge1xuICAgIFdlbGxLbm93blN5bWJvbHNTdG9yZVtuYW1lXSA9IE5BVElWRV9TWU1CT0wgJiYgaGFzT3duKFN5bWJvbCwgbmFtZSlcbiAgICAgID8gU3ltYm9sW25hbWVdXG4gICAgICA6IGNyZWF0ZVdlbGxLbm93blN5bWJvbCgnU3ltYm9sLicgKyBuYW1lKTtcbiAgfSByZXR1cm4gV2VsbEtub3duU3ltYm9sc1N0b3JlW25hbWVdO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1zeW1ib2wnKTtcbnZhciBnZXRNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LW1ldGhvZCcpO1xudmFyIG9yZGluYXJ5VG9QcmltaXRpdmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb3JkaW5hcnktdG8tcHJpbWl0aXZlJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xudmFyIFRPX1BSSU1JVElWRSA9IHdlbGxLbm93blN5bWJvbCgndG9QcmltaXRpdmUnKTtcblxuLy8gYFRvUHJpbWl0aXZlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9wcmltaXRpdmVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGlucHV0LCBwcmVmKSB7XG4gIGlmICghaXNPYmplY3QoaW5wdXQpIHx8IGlzU3ltYm9sKGlucHV0KSkgcmV0dXJuIGlucHV0O1xuICB2YXIgZXhvdGljVG9QcmltID0gZ2V0TWV0aG9kKGlucHV0LCBUT19QUklNSVRJVkUpO1xuICB2YXIgcmVzdWx0O1xuICBpZiAoZXhvdGljVG9QcmltKSB7XG4gICAgaWYgKHByZWYgPT09IHVuZGVmaW5lZCkgcHJlZiA9ICdkZWZhdWx0JztcbiAgICByZXN1bHQgPSBjYWxsKGV4b3RpY1RvUHJpbSwgaW5wdXQsIHByZWYpO1xuICAgIGlmICghaXNPYmplY3QocmVzdWx0KSB8fCBpc1N5bWJvbChyZXN1bHQpKSByZXR1cm4gcmVzdWx0O1xuICAgIHRocm93IG5ldyAkVHlwZUVycm9yKFwiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlXCIpO1xuICB9XG4gIGlmIChwcmVmID09PSB1bmRlZmluZWQpIHByZWYgPSAnbnVtYmVyJztcbiAgcmV0dXJuIG9yZGluYXJ5VG9QcmltaXRpdmUoaW5wdXQsIHByZWYpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcmltaXRpdmUnKTtcbnZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1zeW1ib2wnKTtcblxuLy8gYFRvUHJvcGVydHlLZXlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b3Byb3BlcnR5a2V5XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB2YXIga2V5ID0gdG9QcmltaXRpdmUoYXJndW1lbnQsICdzdHJpbmcnKTtcbiAgcmV0dXJuIGlzU3ltYm9sKGtleSkgPyBrZXkgOiBrZXkgKyAnJztcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBJRThfRE9NX0RFRklORSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pZTgtZG9tLWRlZmluZScpO1xudmFyIFY4X1BST1RPVFlQRV9ERUZJTkVfQlVHID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Y4LXByb3RvdHlwZS1kZWZpbmUtYnVnJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgdG9Qcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcm9wZXJ0eS1rZXknKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbnZhciAkZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG52YXIgJGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG52YXIgRU5VTUVSQUJMRSA9ICdlbnVtZXJhYmxlJztcbnZhciBDT05GSUdVUkFCTEUgPSAnY29uZmlndXJhYmxlJztcbnZhciBXUklUQUJMRSA9ICd3cml0YWJsZSc7XG5cbi8vIGBPYmplY3QuZGVmaW5lUHJvcGVydHlgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZGVmaW5lcHJvcGVydHlcbmV4cG9ydHMuZiA9IERFU0NSSVBUT1JTID8gVjhfUFJPVE9UWVBFX0RFRklORV9CVUcgPyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICBQID0gdG9Qcm9wZXJ0eUtleShQKTtcbiAgYW5PYmplY3QoQXR0cmlidXRlcyk7XG4gIGlmICh0eXBlb2YgTyA9PT0gJ2Z1bmN0aW9uJyAmJiBQID09PSAncHJvdG90eXBlJyAmJiAndmFsdWUnIGluIEF0dHJpYnV0ZXMgJiYgV1JJVEFCTEUgaW4gQXR0cmlidXRlcyAmJiAhQXR0cmlidXRlc1tXUklUQUJMRV0pIHtcbiAgICB2YXIgY3VycmVudCA9ICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCk7XG4gICAgaWYgKGN1cnJlbnQgJiYgY3VycmVudFtXUklUQUJMRV0pIHtcbiAgICAgIE9bUF0gPSBBdHRyaWJ1dGVzLnZhbHVlO1xuICAgICAgQXR0cmlidXRlcyA9IHtcbiAgICAgICAgY29uZmlndXJhYmxlOiBDT05GSUdVUkFCTEUgaW4gQXR0cmlidXRlcyA/IEF0dHJpYnV0ZXNbQ09ORklHVVJBQkxFXSA6IGN1cnJlbnRbQ09ORklHVVJBQkxFXSxcbiAgICAgICAgZW51bWVyYWJsZTogRU5VTUVSQUJMRSBpbiBBdHRyaWJ1dGVzID8gQXR0cmlidXRlc1tFTlVNRVJBQkxFXSA6IGN1cnJlbnRbRU5VTUVSQUJMRV0sXG4gICAgICAgIHdyaXRhYmxlOiBmYWxzZVxuICAgICAgfTtcbiAgICB9XG4gIH0gcmV0dXJuICRkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKTtcbn0gOiAkZGVmaW5lUHJvcGVydHkgOiBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICBQID0gdG9Qcm9wZXJ0eUtleShQKTtcbiAgYW5PYmplY3QoQXR0cmlidXRlcyk7XG4gIGlmIChJRThfRE9NX0RFRklORSkgdHJ5IHtcbiAgICByZXR1cm4gJGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIGlmICgnZ2V0JyBpbiBBdHRyaWJ1dGVzIHx8ICdzZXQnIGluIEF0dHJpYnV0ZXMpIHRocm93IG5ldyAkVHlwZUVycm9yKCdBY2Nlc3NvcnMgbm90IHN1cHBvcnRlZCcpO1xuICBpZiAoJ3ZhbHVlJyBpbiBBdHRyaWJ1dGVzKSBPW1BdID0gQXR0cmlidXRlcy52YWx1ZTtcbiAgcmV0dXJuIE87XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYml0bWFwLCB2YWx1ZSkge1xuICByZXR1cm4ge1xuICAgIGVudW1lcmFibGU6ICEoYml0bWFwICYgMSksXG4gICAgY29uZmlndXJhYmxlOiAhKGJpdG1hcCAmIDIpLFxuICAgIHdyaXRhYmxlOiAhKGJpdG1hcCAmIDQpLFxuICAgIHZhbHVlOiB2YWx1ZVxuICB9O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBERVNDUklQVE9SUyA/IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgcmV0dXJuIGRlZmluZVByb3BlcnR5TW9kdWxlLmYob2JqZWN0LCBrZXksIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigxLCB2YWx1ZSkpO1xufSA6IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgcmV0dXJuIG9iamVjdDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZCcpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91aWQnKTtcblxudmFyIGtleXMgPSBzaGFyZWQoJ2tleXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiBrZXlzW2tleV0gfHwgKGtleXNba2V5XSA9IHVpZChrZXkpKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IHt9O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIE5BVElWRV9XRUFLX01BUCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWFrLW1hcC1iYXNpYy1kZXRlY3Rpb24nKTtcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1zdG9yZScpO1xudmFyIHNoYXJlZEtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQta2V5Jyk7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRkZW4ta2V5cycpO1xuXG52YXIgT0JKRUNUX0FMUkVBRFlfSU5JVElBTElaRUQgPSAnT2JqZWN0IGFscmVhZHkgaW5pdGlhbGl6ZWQnO1xudmFyIFR5cGVFcnJvciA9IGdsb2JhbFRoaXMuVHlwZUVycm9yO1xudmFyIFdlYWtNYXAgPSBnbG9iYWxUaGlzLldlYWtNYXA7XG52YXIgc2V0LCBnZXQsIGhhcztcblxudmFyIGVuZm9yY2UgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGhhcyhpdCkgPyBnZXQoaXQpIDogc2V0KGl0LCB7fSk7XG59O1xuXG52YXIgZ2V0dGVyRm9yID0gZnVuY3Rpb24gKFRZUEUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChpdCkge1xuICAgIHZhciBzdGF0ZTtcbiAgICBpZiAoIWlzT2JqZWN0KGl0KSB8fCAoc3RhdGUgPSBnZXQoaXQpKS50eXBlICE9PSBUWVBFKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbmNvbXBhdGlibGUgcmVjZWl2ZXIsICcgKyBUWVBFICsgJyByZXF1aXJlZCcpO1xuICAgIH0gcmV0dXJuIHN0YXRlO1xuICB9O1xufTtcblxuaWYgKE5BVElWRV9XRUFLX01BUCB8fCBzaGFyZWQuc3RhdGUpIHtcbiAgdmFyIHN0b3JlID0gc2hhcmVkLnN0YXRlIHx8IChzaGFyZWQuc3RhdGUgPSBuZXcgV2Vha01hcCgpKTtcbiAgLyogZXNsaW50LWRpc2FibGUgbm8tc2VsZi1hc3NpZ24gLS0gcHJvdG90eXBlIG1ldGhvZHMgcHJvdGVjdGlvbiAqL1xuICBzdG9yZS5nZXQgPSBzdG9yZS5nZXQ7XG4gIHN0b3JlLmhhcyA9IHN0b3JlLmhhcztcbiAgc3RvcmUuc2V0ID0gc3RvcmUuc2V0O1xuICAvKiBlc2xpbnQtZW5hYmxlIG5vLXNlbGYtYXNzaWduIC0tIHByb3RvdHlwZSBtZXRob2RzIHByb3RlY3Rpb24gKi9cbiAgc2V0ID0gZnVuY3Rpb24gKGl0LCBtZXRhZGF0YSkge1xuICAgIGlmIChzdG9yZS5oYXMoaXQpKSB0aHJvdyBuZXcgVHlwZUVycm9yKE9CSkVDVF9BTFJFQURZX0lOSVRJQUxJWkVEKTtcbiAgICBtZXRhZGF0YS5mYWNhZGUgPSBpdDtcbiAgICBzdG9yZS5zZXQoaXQsIG1ldGFkYXRhKTtcbiAgICByZXR1cm4gbWV0YWRhdGE7XG4gIH07XG4gIGdldCA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBzdG9yZS5nZXQoaXQpIHx8IHt9O1xuICB9O1xuICBoYXMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gc3RvcmUuaGFzKGl0KTtcbiAgfTtcbn0gZWxzZSB7XG4gIHZhciBTVEFURSA9IHNoYXJlZEtleSgnc3RhdGUnKTtcbiAgaGlkZGVuS2V5c1tTVEFURV0gPSB0cnVlO1xuICBzZXQgPSBmdW5jdGlvbiAoaXQsIG1ldGFkYXRhKSB7XG4gICAgaWYgKGhhc093bihpdCwgU1RBVEUpKSB0aHJvdyBuZXcgVHlwZUVycm9yKE9CSkVDVF9BTFJFQURZX0lOSVRJQUxJWkVEKTtcbiAgICBtZXRhZGF0YS5mYWNhZGUgPSBpdDtcbiAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoaXQsIFNUQVRFLCBtZXRhZGF0YSk7XG4gICAgcmV0dXJuIG1ldGFkYXRhO1xuICB9O1xuICBnZXQgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gaGFzT3duKGl0LCBTVEFURSkgPyBpdFtTVEFURV0gOiB7fTtcbiAgfTtcbiAgaGFzID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIGhhc093bihpdCwgU1RBVEUpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc2V0OiBzZXQsXG4gIGdldDogZ2V0LFxuICBoYXM6IGhhcyxcbiAgZW5mb3JjZTogZW5mb3JjZSxcbiAgZ2V0dGVyRm9yOiBnZXR0ZXJGb3Jcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIENPTkZJR1VSQUJMRV9GVU5DVElPTl9OQU1FID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLW5hbWUnKS5DT05GSUdVUkFCTEU7XG52YXIgaW5zcGVjdFNvdXJjZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnNwZWN0LXNvdXJjZScpO1xudmFyIEludGVybmFsU3RhdGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKTtcblxudmFyIGVuZm9yY2VJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5lbmZvcmNlO1xudmFyIGdldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldDtcbnZhciAkU3RyaW5nID0gU3RyaW5nO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG52YXIgZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgc3RyaW5nU2xpY2UgPSB1bmN1cnJ5VGhpcygnJy5zbGljZSk7XG52YXIgcmVwbGFjZSA9IHVuY3VycnlUaGlzKCcnLnJlcGxhY2UpO1xudmFyIGpvaW4gPSB1bmN1cnJ5VGhpcyhbXS5qb2luKTtcblxudmFyIENPTkZJR1VSQUJMRV9MRU5HVEggPSBERVNDUklQVE9SUyAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gZGVmaW5lUHJvcGVydHkoZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9LCAnbGVuZ3RoJywgeyB2YWx1ZTogOCB9KS5sZW5ndGggIT09IDg7XG59KTtcblxudmFyIFRFTVBMQVRFID0gU3RyaW5nKFN0cmluZykuc3BsaXQoJ1N0cmluZycpO1xuXG52YXIgbWFrZUJ1aWx0SW4gPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh2YWx1ZSwgbmFtZSwgb3B0aW9ucykge1xuICBpZiAoc3RyaW5nU2xpY2UoJFN0cmluZyhuYW1lKSwgMCwgNykgPT09ICdTeW1ib2woJykge1xuICAgIG5hbWUgPSAnWycgKyByZXBsYWNlKCRTdHJpbmcobmFtZSksIC9eU3ltYm9sXFwoKFteKV0qKVxcKS4qJC8sICckMScpICsgJ10nO1xuICB9XG4gIGlmIChvcHRpb25zICYmIG9wdGlvbnMuZ2V0dGVyKSBuYW1lID0gJ2dldCAnICsgbmFtZTtcbiAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5zZXR0ZXIpIG5hbWUgPSAnc2V0ICcgKyBuYW1lO1xuICBpZiAoIWhhc093bih2YWx1ZSwgJ25hbWUnKSB8fCAoQ09ORklHVVJBQkxFX0ZVTkNUSU9OX05BTUUgJiYgdmFsdWUubmFtZSAhPT0gbmFtZSkpIHtcbiAgICBpZiAoREVTQ1JJUFRPUlMpIGRlZmluZVByb3BlcnR5KHZhbHVlLCAnbmFtZScsIHsgdmFsdWU6IG5hbWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9KTtcbiAgICBlbHNlIHZhbHVlLm5hbWUgPSBuYW1lO1xuICB9XG4gIGlmIChDT05GSUdVUkFCTEVfTEVOR1RIICYmIG9wdGlvbnMgJiYgaGFzT3duKG9wdGlvbnMsICdhcml0eScpICYmIHZhbHVlLmxlbmd0aCAhPT0gb3B0aW9ucy5hcml0eSkge1xuICAgIGRlZmluZVByb3BlcnR5KHZhbHVlLCAnbGVuZ3RoJywgeyB2YWx1ZTogb3B0aW9ucy5hcml0eSB9KTtcbiAgfVxuICB0cnkge1xuICAgIGlmIChvcHRpb25zICYmIGhhc093bihvcHRpb25zLCAnY29uc3RydWN0b3InKSAmJiBvcHRpb25zLmNvbnN0cnVjdG9yKSB7XG4gICAgICBpZiAoREVTQ1JJUFRPUlMpIGRlZmluZVByb3BlcnR5KHZhbHVlLCAncHJvdG90eXBlJywgeyB3cml0YWJsZTogZmFsc2UgfSk7XG4gICAgLy8gaW4gVjggfiBDaHJvbWUgNTMsIHByb3RvdHlwZXMgb2Ygc29tZSBtZXRob2RzLCBsaWtlIGBBcnJheS5wcm90b3R5cGUudmFsdWVzYCwgYXJlIG5vbi13cml0YWJsZVxuICAgIH0gZWxzZSBpZiAodmFsdWUucHJvdG90eXBlKSB2YWx1ZS5wcm90b3R5cGUgPSB1bmRlZmluZWQ7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgdmFyIHN0YXRlID0gZW5mb3JjZUludGVybmFsU3RhdGUodmFsdWUpO1xuICBpZiAoIWhhc093bihzdGF0ZSwgJ3NvdXJjZScpKSB7XG4gICAgc3RhdGUuc291cmNlID0gam9pbihURU1QTEFURSwgdHlwZW9mIG5hbWUgPT0gJ3N0cmluZycgPyBuYW1lIDogJycpO1xuICB9IHJldHVybiB2YWx1ZTtcbn07XG5cbi8vIGFkZCBmYWtlIEZ1bmN0aW9uI3RvU3RyaW5nIGZvciBjb3JyZWN0IHdvcmsgd3JhcHBlZCBtZXRob2RzIC8gY29uc3RydWN0b3JzIHdpdGggbWV0aG9kcyBsaWtlIExvRGFzaCBpc05hdGl2ZVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWV4dGVuZC1uYXRpdmUgLS0gcmVxdWlyZWRcbkZ1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZyA9IG1ha2VCdWlsdEluKGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICByZXR1cm4gaXNDYWxsYWJsZSh0aGlzKSAmJiBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpLnNvdXJjZSB8fCBpbnNwZWN0U291cmNlKHRoaXMpO1xufSwgJ3RvU3RyaW5nJyk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgbWFrZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbWFrZS1idWlsdC1pbicpO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGFyZ2V0LCBuYW1lLCBkZXNjcmlwdG9yKSB7XG4gIGlmIChkZXNjcmlwdG9yLmdldCkgbWFrZUJ1aWx0SW4oZGVzY3JpcHRvci5nZXQsIG5hbWUsIHsgZ2V0dGVyOiB0cnVlIH0pO1xuICBpZiAoZGVzY3JpcHRvci5zZXQpIG1ha2VCdWlsdEluKGRlc2NyaXB0b3Iuc2V0LCBuYW1lLCB7IHNldHRlcjogdHJ1ZSB9KTtcbiAgcmV0dXJuIGRlZmluZVByb3BlcnR5LmYodGFyZ2V0LCBuYW1lLCBkZXNjcmlwdG9yKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG5cbi8vIGBSZWdFeHAucHJvdG90eXBlLmZsYWdzYCBnZXR0ZXIgaW1wbGVtZW50YXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZ2V0LXJlZ2V4cC5wcm90b3R5cGUuZmxhZ3Ncbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICB2YXIgdGhhdCA9IGFuT2JqZWN0KHRoaXMpO1xuICB2YXIgcmVzdWx0ID0gJyc7XG4gIGlmICh0aGF0Lmhhc0luZGljZXMpIHJlc3VsdCArPSAnZCc7XG4gIGlmICh0aGF0Lmdsb2JhbCkgcmVzdWx0ICs9ICdnJztcbiAgaWYgKHRoYXQuaWdub3JlQ2FzZSkgcmVzdWx0ICs9ICdpJztcbiAgaWYgKHRoYXQubXVsdGlsaW5lKSByZXN1bHQgKz0gJ20nO1xuICBpZiAodGhhdC5kb3RBbGwpIHJlc3VsdCArPSAncyc7XG4gIGlmICh0aGF0LnVuaWNvZGUpIHJlc3VsdCArPSAndSc7XG4gIGlmICh0aGF0LnVuaWNvZGVTZXRzKSByZXN1bHQgKz0gJ3YnO1xuICBpZiAodGhhdC5zdGlja3kpIHJlc3VsdCArPSAneSc7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGRlZmluZUJ1aWx0SW5BY2Nlc3NvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4tYWNjZXNzb3InKTtcbnZhciByZWdFeHBGbGFncyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWdleHAtZmxhZ3MnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG4vLyBiYWJlbC1taW5pZnkgYW5kIENsb3N1cmUgQ29tcGlsZXIgdHJhbnNwaWxlcyBSZWdFeHAoJy4nLCAnZCcpIC0+IC8uL2QgYW5kIGl0IGNhdXNlcyBTeW50YXhFcnJvclxudmFyIFJlZ0V4cCA9IGdsb2JhbFRoaXMuUmVnRXhwO1xudmFyIFJlZ0V4cFByb3RvdHlwZSA9IFJlZ0V4cC5wcm90b3R5cGU7XG5cbnZhciBGT1JDRUQgPSBERVNDUklQVE9SUyAmJiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciBJTkRJQ0VTX1NVUFBPUlQgPSB0cnVlO1xuICB0cnkge1xuICAgIFJlZ0V4cCgnLicsICdkJyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgSU5ESUNFU19TVVBQT1JUID0gZmFsc2U7XG4gIH1cblxuICB2YXIgTyA9IHt9O1xuICAvLyBtb2Rlcm4gVjggYnVnXG4gIHZhciBjYWxscyA9ICcnO1xuICB2YXIgZXhwZWN0ZWQgPSBJTkRJQ0VTX1NVUFBPUlQgPyAnZGdpbXN5JyA6ICdnaW1zeSc7XG5cbiAgdmFyIGFkZEdldHRlciA9IGZ1bmN0aW9uIChrZXksIGNocikge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCBrZXksIHsgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICBjYWxscyArPSBjaHI7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IH0pO1xuICB9O1xuXG4gIHZhciBwYWlycyA9IHtcbiAgICBkb3RBbGw6ICdzJyxcbiAgICBnbG9iYWw6ICdnJyxcbiAgICBpZ25vcmVDYXNlOiAnaScsXG4gICAgbXVsdGlsaW5lOiAnbScsXG4gICAgc3RpY2t5OiAneSdcbiAgfTtcblxuICBpZiAoSU5ESUNFU19TVVBQT1JUKSBwYWlycy5oYXNJbmRpY2VzID0gJ2QnO1xuXG4gIGZvciAodmFyIGtleSBpbiBwYWlycykgYWRkR2V0dGVyKGtleSwgcGFpcnNba2V5XSk7XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxuICB2YXIgcmVzdWx0ID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihSZWdFeHBQcm90b3R5cGUsICdmbGFncycpLmdldC5jYWxsKE8pO1xuXG4gIHJldHVybiByZXN1bHQgIT09IGV4cGVjdGVkIHx8IGNhbGxzICE9PSBleHBlY3RlZDtcbn0pO1xuXG4vLyBgUmVnRXhwLnByb3RvdHlwZS5mbGFnc2AgZ2V0dGVyXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWdldC1yZWdleHAucHJvdG90eXBlLmZsYWdzXG5pZiAoRk9SQ0VEKSBkZWZpbmVCdWlsdEluQWNjZXNzb3IoUmVnRXhwUHJvdG90eXBlLCAnZmxhZ3MnLCB7XG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgZ2V0OiByZWdFeHBGbGFnc1xufSk7XG4iLCJleHBvcnQgaW50ZXJmYWNlIEdyYW1tYXJSdWxlIHtcbiAgcmVnZXhwOiBSZWdFeHA7XG4gIHJlcGxhY2VtZW50OiBzdHJpbmc7XG4gIGxhYmVsUGxhY2Vob2xkZXI/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSFRNTEJsb2NrUnVsZSB7XG4gIHN0YXJ0OiBSZWdFeHA7XG4gIGVuZDogUmVnRXhwIHwgZmFsc2U7XG4gIHBhcmFJbnRlcnJ1cHQ6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSW5saW5lQ29tbWFuZCB7XG4gIHR5cGU6ICdpbmxpbmUnO1xuICBjbGFzc05hbWU6IHN0cmluZztcbiAgc2V0OiB7XG4gICAgcHJlOiBzdHJpbmc7XG4gICAgcG9zdDogc3RyaW5nO1xuICB9O1xuICB1bnNldDoge1xuICAgIHByZVBhdHRlcm46IFJlZ0V4cDtcbiAgICBwb3N0UGF0dGVybjogUmVnRXhwO1xuICB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExpbmVDb21tYW5kIHtcbiAgdHlwZTogJ2xpbmUnO1xuICBjbGFzc05hbWU6IHN0cmluZztcbiAgc2V0OiB7XG4gICAgcGF0dGVybjogUmVnRXhwO1xuICAgIHJlcGxhY2VtZW50OiBzdHJpbmc7XG4gIH07XG4gIHVuc2V0OiB7XG4gICAgcGF0dGVybjogUmVnRXhwO1xuICAgIHJlcGxhY2VtZW50OiBzdHJpbmc7XG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIENvbW1hbmQgPSBJbmxpbmVDb21tYW5kIHwgTGluZUNvbW1hbmQ7XG5cbmNvbnN0IHJlcGxhY2VtZW50czogUmVjb3JkPHN0cmluZywgUmVnRXhwPiA9IHtcbiAgQVNDSUlQdW5jdHVhdGlvbjogL1shXCIjJCUmJygpKissXFwtLi86Ozw9Pj9AW1xcXV5fYHt8fX5cXFxcXS8sICBcbiAgTm90VHJpZ2dlckNoYXI6IC9bXmBfKltcXF0oKTw+IX5dLyxcbiAgU2NoZW1lOiAvW0EtWmEtel1bQS1aYS16MC05Ky4tXXsxLDMxfS8sXG4gIEVtYWlsOiAvW2EtekEtWjAtOS4hIyQlJicqKy89P15fYHt8fX4tXStAW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KD86XFwuW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KSovLCAvLyBGcm9tIENvbW1vbk1hcmsgc3BlY1xuICBIVE1MT3BlblRhZzogLzxIVE1MVGFnTmFtZSg/OkhUTUxBdHRyaWJ1dGUpKlxccypcXC8/Pi8sXG4gIEhUTUxDbG9zZVRhZzogLzxcXC9IVE1MVGFnTmFtZVxccyo+LyxcbiAgSFRNTFRhZ05hbWU6IC9bQS1aYS16XVtBLVphLXowLTktXSovLCBcbiAgSFRNTENvbW1lbnQ6IC88IS0tKD86W14+LV18KD86W14+LV0oPzpbXi1dfC1bXi1dKSpbXi1dKSktLT4vLFxuICBIVE1MUEk6IC88XFw/KD86fC58KD86W14/XXxcXD9bXj5dKSopXFw/Pi8sXG4gIEhUTUxEZWNsYXJhdGlvbjogLzwhW0EtWl0rXFxzW14+XSo+LyxcbiAgSFRNTENEQVRBOiAvPCFcXFtDREFUQVxcWy4qP1xcXVxcXT4vLFxuICBIVE1MQXR0cmlidXRlOiAvXFxzK1tBLVphLXpfOl1bQS1aYS16MC05Xy46LV0qKD86SFRNTEF0dFZhbHVlKT8vLFxuICBIVE1MQXR0VmFsdWU6IC9cXHMqPVxccyooPzooPzonW14nXSonKXwoPzpcIlteXCJdKlwiKXwoPzpbXlxcc1wiJz08PmBdKykpLyxcbiAgS25vd25UYWc6IC9hZGRyZXNzfGFydGljbGV8YXNpZGV8YmFzZXxiYXNlZm9udHxibG9ja3F1b3RlfGJvZHl8Y2FwdGlvbnxjZW50ZXJ8Y29sfGNvbGdyb3VwfGRkfGRldGFpbHN8ZGlhbG9nfGRpcnxkaXZ8ZGx8ZHR8ZmllbGRzZXR8ZmlnY2FwdGlvbnxmaWd1cmV8Zm9vdGVyfGZvcm18ZnJhbWV8ZnJhbWVzZXR8aDF8aDJ8aDN8aDR8aDV8aDZ8aGVhZHxoZWFkZXJ8aHJ8aHRtbHxpZnJhbWV8bGVnZW5kfGxpfGxpbmt8bWFpbnxtZW51fG1lbnVpdGVtfG5hdnxub2ZyYW1lc3xvbHxvcHRncm91cHxvcHRpb258cHxwYXJhbXxzZWN0aW9ufHNvdXJjZXxzdW1tYXJ5fHRhYmxlfHRib2R5fHRkfHRmb290fHRofHRoZWFkfHRpdGxlfHRyfHRyYWNrfHVsL1xufTtcblxuLy8gRnJvbSBDb21tb25NYXJrLmpzLiBcbmV4cG9ydCBjb25zdCBwdW5jdHVhdGlvbkxlYWRpbmcgPSBuZXcgUmVnRXhwKC9eKD86WyFcIiMkJSYnKCkqKyxcXC0uLzo7PD0+P0BbXFxdXFxcXF5fYHt8fX5cXHhBMVxceEE3XFx4QUJcXHhCNlxceEI3XFx4QkJcXHhCRlxcdTAzN0VcXHUwMzg3XFx1MDU1QS1cXHUwNTVGXFx1MDU4OVxcdTA1OEFcXHUwNUJFXFx1MDVDMFxcdTA1QzNcXHUwNUM2XFx1MDVGM1xcdTA1RjRcXHUwNjA5XFx1MDYwQVxcdTA2MENcXHUwNjBEXFx1MDYxQlxcdTA2MUVcXHUwNjFGXFx1MDY2QS1cXHUwNjZEXFx1MDZENFxcdTA3MDAtXFx1MDcwRFxcdTA3RjctXFx1MDdGOVxcdTA4MzAtXFx1MDgzRVxcdTA4NUVcXHUwOTY0XFx1MDk2NVxcdTA5NzBcXHUwQUYwXFx1MERGNFxcdTBFNEZcXHUwRTVBXFx1MEU1QlxcdTBGMDQtXFx1MEYxMlxcdTBGMTRcXHUwRjNBLVxcdTBGM0RcXHUwRjg1XFx1MEZEMC1cXHUwRkQ0XFx1MEZEOVxcdTBGREFcXHUxMDRBLVxcdTEwNEZcXHUxMEZCXFx1MTM2MC1cXHUxMzY4XFx1MTQwMFxcdTE2NkRcXHUxNjZFXFx1MTY5QlxcdTE2OUNcXHUxNkVCLVxcdTE2RURcXHUxNzM1XFx1MTczNlxcdTE3RDQtXFx1MTdENlxcdTE3RDgtXFx1MTdEQVxcdTE4MDAtXFx1MTgwQVxcdTE5NDRcXHUxOTQ1XFx1MUExRVxcdTFBMUZcXHUxQUEwLVxcdTFBQTZcXHUxQUE4LVxcdTFBQURcXHUxQjVBLVxcdTFCNjBcXHUxQkZDLVxcdTFCRkZcXHUxQzNCLVxcdTFDM0ZcXHUxQzdFXFx1MUM3RlxcdTFDQzAtXFx1MUNDN1xcdTFDRDNcXHUyMDEwLVxcdTIwMjdcXHUyMDMwLVxcdTIwNDNcXHUyMDQ1LVxcdTIwNTFcXHUyMDUzLVxcdTIwNUVcXHUyMDdEXFx1MjA3RVxcdTIwOERcXHUyMDhFXFx1MjMwOC1cXHUyMzBCXFx1MjMyOVxcdTIzMkFcXHUyNzY4LVxcdTI3NzVcXHUyN0M1XFx1MjdDNlxcdTI3RTYtXFx1MjdFRlxcdTI5ODMtXFx1Mjk5OFxcdTI5RDgtXFx1MjlEQlxcdTI5RkNcXHUyOUZEXFx1MkNGOS1cXHUyQ0ZDXFx1MkNGRVxcdTJDRkZcXHUyRDcwXFx1MkUwMC1cXHUyRTJFXFx1MkUzMC1cXHUyRTQyXFx1MzAwMS1cXHUzMDAzXFx1MzAwOC1cXHUzMDExXFx1MzAxNC1cXHUzMDFGXFx1MzAzMFxcdTMwM0RcXHUzMEEwXFx1MzBGQlxcdUE0RkVcXHVBNEZGXFx1QTYwRC1cXHVBNjBGXFx1QTY3M1xcdUE2N0VcXHVBNkYyLVxcdUE2RjdcXHVBODc0LVxcdUE4NzdcXHVBOENFXFx1QThDRlxcdUE4RjgtXFx1QThGQVxcdUE4RkNcXHVBOTJFXFx1QTkyRlxcdUE5NUZcXHVBOUMxLVxcdUE5Q0RcXHVBOURFXFx1QTlERlxcdUFBNUMtXFx1QUE1RlxcdUFBREVcXHVBQURGXFx1QUFGMFxcdUFBRjFcXHVBQkVCXFx1RkQzRVxcdUZEM0ZcXHVGRTEwLVxcdUZFMTlcXHVGRTMwLVxcdUZFNTJcXHVGRTU0LVxcdUZFNjFcXHVGRTYzXFx1RkU2OFxcdUZFNkFcXHVGRTZCXFx1RkYwMS1cXHVGRjAzXFx1RkYwNS1cXHVGRjBBXFx1RkYwQy1cXHVGRjBGXFx1RkYxQVxcdUZGMUJcXHVGRjFGXFx1RkYyMFxcdUZGM0ItXFx1RkYzRFxcdUZGM0ZcXHVGRjVCXFx1RkY1RFxcdUZGNUYtXFx1RkY2NV18XFx1RDgwMFtcXHVERDAwLVxcdUREMDJcXHVERjlGXFx1REZEMF18XFx1RDgwMVxcdURENkZ8XFx1RDgwMltcXHVEQzU3XFx1REQxRlxcdUREM0ZcXHVERTUwLVxcdURFNThcXHVERTdGXFx1REVGMC1cXHVERUY2XFx1REYzOS1cXHVERjNGXFx1REY5OS1cXHVERjlDXXxcXHVEODA0W1xcdURDNDctXFx1REM0RFxcdURDQkJcXHVEQ0JDXFx1RENCRS1cXHVEQ0MxXFx1REQ0MC1cXHVERDQzXFx1REQ3NFxcdURENzVcXHVEREM1LVxcdUREQzlcXHVERENEXFx1REREQlxcdUREREQtXFx1RERERlxcdURFMzgtXFx1REUzRFxcdURFQTldfFxcdUQ4MDVbXFx1RENDNlxcdUREQzEtXFx1REREN1xcdURFNDEtXFx1REU0M1xcdURGM0MtXFx1REYzRV18XFx1RDgwOVtcXHVEQzcwLVxcdURDNzRdfFxcdUQ4MUFbXFx1REU2RVxcdURFNkZcXHVERUY1XFx1REYzNy1cXHVERjNCXFx1REY0NF18XFx1RDgyRlxcdURDOUZ8XFx1RDgzNltcXHVERTg3LVxcdURFOEJdKS8pO1xuXG5leHBvcnQgY29uc3QgcHVuY3R1YXRpb25UcmFpbGluZyA9IG5ldyBSZWdFeHAoLyg/OlshXCIjJCUmJygpKissXFwtLi86Ozw9Pj9AW1xcXVxcXFxeX2B7fH1+XFx4QTFcXHhBN1xceEFCXFx4QjZcXHhCN1xceEJCXFx4QkZcXHUwMzdFXFx1MDM4N1xcdTA1NUEtXFx1MDU1RlxcdTA1ODlcXHUwNThBXFx1MDVCRVxcdTA1QzBcXHUwNUMzXFx1MDVDNlxcdTA1RjNcXHUwNUY0XFx1MDYwOVxcdTA2MEFcXHUwNjBDXFx1MDYwRFxcdTA2MUJcXHUwNjFFXFx1MDYxRlxcdTA2NkEtXFx1MDY2RFxcdTA2RDRcXHUwNzAwLVxcdTA3MERcXHUwN0Y3LVxcdTA3RjlcXHUwODMwLVxcdTA4M0VcXHUwODVFXFx1MDk2NFxcdTA5NjVcXHUwOTcwXFx1MEFGMFxcdTBERjRcXHUwRTRGXFx1MEU1QVxcdTBFNUJcXHUwRjA0LVxcdTBGMTJcXHUwRjE0XFx1MEYzQS1cXHUwRjNEXFx1MEY4NVxcdTBGRDAtXFx1MEZENFxcdTBGRDlcXHUwRkRBXFx1MTA0QS1cXHUxMDRGXFx1MTBGQlxcdTEzNjAtXFx1MTM2OFxcdTE0MDBcXHUxNjZEXFx1MTY2RVxcdTE2OUJcXHUxNjlDXFx1MTZFQi1cXHUxNkVEXFx1MTczNVxcdTE3MzZcXHUxN0Q0LVxcdTE3RDZcXHUxN0Q4LVxcdTE3REFcXHUxODAwLVxcdTE4MEFcXHUxOTQ0XFx1MTk0NVxcdTFBMUVcXHUxQTFGXFx1MUFBMC1cXHUxQUE2XFx1MUFBOC1cXHUxQUFEXFx1MUI1QS1cXHUxQjYwXFx1MUJGQy1cXHUxQkZGXFx1MUMzQi1cXHUxQzNGXFx1MUM3RVxcdTFDN0ZcXHUxQ0MwLVxcdTFDQzdcXHUxQ0QzXFx1MjAxMC1cXHUyMDI3XFx1MjAzMC1cXHUyMDQzXFx1MjA0NS1cXHUyMDUxXFx1MjA1My1cXHUyMDVFXFx1MjA3RFxcdTIwN0VcXHUyMDhEXFx1MjA4RVxcdTIzMDgtXFx1MjMwQlxcdTIzMjlcXHUyMzJBXFx1Mjc2OC1cXHUyNzc1XFx1MjdDNVxcdTI3QzZcXHUyN0U2LVxcdTI3RUZcXHUyOTgzLVxcdTI5OThcXHUyOUQ4LVxcdTI5REJcXHUyOUZDXFx1MjlGRFxcdTJDRjktXFx1MkNGQ1xcdTJDRkVcXHUyQ0ZGXFx1MkQ3MFxcdTJFMDAtXFx1MkUyRVxcdTJFMzAtXFx1MkU0MlxcdTMwMDEtXFx1MzAwM1xcdTMwMDgtXFx1MzAxMVxcdTMwMTQtXFx1MzAxRlxcdTMwMzBcXHUzMDNEXFx1MzBBMFxcdTMwRkJcXHVBNEZFXFx1QTRGRlxcdUE2MEQtXFx1QTYwRlxcdUE2NzNcXHVBNjdFXFx1QTZGMi1cXHVBNkY3XFx1QTg3NC1cXHVBODc3XFx1QThDRVxcdUE4Q0ZcXHVBOEY4LVxcdUE4RkFcXHVBOEZDXFx1QTkyRVxcdUE5MkZcXHVBOTVGXFx1QTlDMS1cXHVBOUNEXFx1QTlERVxcdUE5REZcXHVBQTVDLVxcdUFBNUZcXHVBQURFXFx1QUFERlxcdUFBRjBcXHVBQUYxXFx1QUJFQlxcdUZEM0VcXHVGRDNGXFx1RkUxMC1cXHVGRTE5XFx1RkUzMC1cXHVGRTUyXFx1RkU1NC1cXHVGRTYxXFx1RkU2M1xcdUZFNjhcXHVGRTZBXFx1RkU2QlxcdUZGMDEtXFx1RkYwM1xcdUZGMDUtXFx1RkYwQVxcdUZGMEMtXFx1RkYwRlxcdUZGMUFcXHVGRjFCXFx1RkYxRlxcdUZGMjBcXHVGRjNCLVxcdUZGM0RcXHVGRjNGXFx1RkY1QlxcdUZGNURcXHVGRjVGLVxcdUZGNjVdfFxcdUQ4MDBbXFx1REQwMC1cXHVERDAyXFx1REY5RlxcdURGRDBdfFxcdUQ4MDFcXHVERDZGfFxcdUQ4MDJbXFx1REM1N1xcdUREMUZcXHVERDNGXFx1REU1MC1cXHVERTU4XFx1REU3RlxcdURFRjAtXFx1REVGNlxcdURGMzktXFx1REYzRlxcdURGOTktXFx1REY5Q118XFx1RDgwNFtcXHVEQzQ3LVxcdURDNERcXHVEQ0JCXFx1RENCQ1xcdURDQkUtXFx1RENDMVxcdURENDAtXFx1REQ0M1xcdURENzRcXHVERDc1XFx1RERDNS1cXHVEREM5XFx1RERDRFxcdUREREJcXHVERERELVxcdUREREZcXHVERTM4LVxcdURFM0RcXHVERUE5XXxcXHVEODA1W1xcdURDQzZcXHVEREMxLVxcdURERDdcXHVERTQxLVxcdURFNDNcXHVERjNDLVxcdURGM0VdfFxcdUQ4MDlbXFx1REM3MC1cXHVEQzc0XXxcXHVEODFBW1xcdURFNkVcXHVERTZGXFx1REVGNVxcdURGMzctXFx1REYzQlxcdURGNDRdfFxcdUQ4MkZcXHVEQzlGfFxcdUQ4MzZbXFx1REU4Ny1cXHVERThCXSkkLyk7XG5cbi8qKlxuICogVGhpcyBpcyBDb21tb25NYXJrJ3MgYmxvY2sgZ3JhbW1hciwgYnV0IHdlJ3JlIGlnbm9yaW5nIG5lc3RlZCBibG9ja3MgaGVyZS4gIFxuICovIFxuZXhwb3J0IGNvbnN0IGxpbmVHcmFtbWFyOiBSZWNvcmQ8c3RyaW5nLCBHcmFtbWFyUnVsZT4gPSB7IFxuICBUTUgxOiB7IFxuICAgIHJlZ2V4cDogL14oIHswLDN9I1xccykoLio/KSgoPzpcXHMrIytcXHMqKT8pJC8sIFxuICAgIHJlcGxhY2VtZW50OiAnPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrX1RNSDFcIj4kMTwvc3Bhbj4kJDI8c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfVE1IMVwiPiQzPC9zcGFuPidcbiAgfSxcbiAgVE1IMjogeyBcbiAgICByZWdleHA6IC9eKCB7MCwzfSMjXFxzKSguKj8pKCg/OlxccysjK1xccyopPykkLywgXG4gICAgcmVwbGFjZW1lbnQ6ICc8c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfVE1IMlwiPiQxPC9zcGFuPiQkMjxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya19UTUgyXCI+JDM8L3NwYW4+J1xuICB9LFxuICBUTUgzOiB7IFxuICAgIHJlZ2V4cDogL14oIHswLDN9IyMjXFxzKSguKj8pKCg/OlxccysjK1xccyopPykkLywgXG4gICAgcmVwbGFjZW1lbnQ6ICc8c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfVE1IM1wiPiQxPC9zcGFuPiQkMjxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya19UTUgzXCI+JDM8L3NwYW4+J1xuICB9LFxuICBUTUg0OiB7IFxuICAgIHJlZ2V4cDogL14oIHswLDN9IyMjI1xccykoLio/KSgoPzpcXHMrIytcXHMqKT8pJC8sIFxuICAgIHJlcGxhY2VtZW50OiAnPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrX1RNSDRcIj4kMTwvc3Bhbj4kJDI8c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfVE1INFwiPiQzPC9zcGFuPidcbiAgfSxcbiAgVE1INTogeyBcbiAgICByZWdleHA6IC9eKCB7MCwzfSMjIyMjXFxzKSguKj8pKCg/OlxccysjK1xccyopPykkLywgXG4gICAgcmVwbGFjZW1lbnQ6ICc8c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfVE1INVwiPiQxPC9zcGFuPiQkMjxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya19UTUg1XCI+JDM8L3NwYW4+J1xuICB9LFxuICBUTUg2OiB7IFxuICAgIHJlZ2V4cDogL14oIHswLDN9IyMjIyMjXFxzKSguKj8pKCg/OlxccysjK1xccyopPykkLywgXG4gICAgcmVwbGFjZW1lbnQ6ICc8c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfVE1INlwiPiQxPC9zcGFuPiQkMjxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya19UTUg2XCI+JDM8L3NwYW4+J1xuICB9LFxuICBUTUJsb2NrcXVvdGU6IHsgXG4gICAgcmVnZXhwOiAvXiggezAsM30+WyBdPykoLiopJC8sIFxuICAgIHJlcGxhY2VtZW50OiAnPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrX1RNQmxvY2txdW90ZVwiPiQxPC9zcGFuPiQkMidcbiAgfSxcbiAgVE1Db2RlRmVuY2VCYWNrdGlja09wZW46IHsgXG4gICAgcmVnZXhwOiAvXiggezAsM30oPzxzZXE+YGBgYCopXFxzKikoW15gXSo/KShcXHMqKSQvLCBcbiAgICByZXBsYWNlbWVudDogJzxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya19UTUNvZGVGZW5jZUJhY2t0aWNrXCI+JDE8L3NwYW4+PHNwYW4gY2xhc3M9XCJUTUluZm9TdHJpbmdcIj4kMzwvc3Bhbj4kNCdcbiAgfSxcbiAgVE1Db2RlRmVuY2VUaWxkZU9wZW46IHsgXG4gICAgcmVnZXhwOiAvXiggezAsM30oPzxzZXE+fn5+fiopXFxzKikoLio/KShcXHMqKSQvLCBcbiAgICByZXBsYWNlbWVudDogJzxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya19UTUNvZGVGZW5jZVRpbGRlXCI+JDE8L3NwYW4+PHNwYW4gY2xhc3M9XCJUTUluZm9TdHJpbmdcIj4kMzwvc3Bhbj4kNCdcbiAgfSxcbiAgVE1Db2RlRmVuY2VCYWNrdGlja0Nsb3NlOiB7IFxuICAgIHJlZ2V4cDogL14oIHswLDN9KD88c2VxPmBgYGAqKSkoXFxzKikkLywgXG4gICAgcmVwbGFjZW1lbnQ6ICc8c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfVE1Db2RlRmVuY2VCYWNrdGlja1wiPiQxPC9zcGFuPiQzJ1xuICB9LFxuICBUTUNvZGVGZW5jZVRpbGRlQ2xvc2U6IHsgXG4gICAgcmVnZXhwOiAvXiggezAsM30oPzxzZXE+fn5+fiopKShcXHMqKSQvLCBcbiAgICByZXBsYWNlbWVudDogJzxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya19UTUNvZGVGZW5jZVRpbGRlXCI+JDE8L3NwYW4+JDMnXG4gIH0sXG4gIFRNQmxhbmtMaW5lOiB7IFxuICAgIHJlZ2V4cDogL14oWyBcXHRdKikkLywgXG4gICAgcmVwbGFjZW1lbnQ6ICckMCdcbiAgfSxcbiAgVE1TZXRleHRIMU1hcmtlcjogeyBcbiAgICByZWdleHA6IC9eIHswLDN9PStcXHMqJC8sIFxuICAgIHJlcGxhY2VtZW50OiAnPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrX1RNU2V0ZXh0SDFNYXJrZXJcIj4kMDwvc3Bhbj4nXG4gIH0sXG4gIFRNU2V0ZXh0SDJNYXJrZXI6IHsgXG4gICAgcmVnZXhwOiAvXiB7MCwzfS0rXFxzKiQvLCBcbiAgICByZXBsYWNlbWVudDogJzxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya19UTVNldGV4dEgxTWFya2VyXCI+JDA8L3NwYW4+J1xuICB9LFxuICBUTUhSOiB7IFxuICAgIHJlZ2V4cDogL14oIHswLDN9KFxcKlsgXFx0XSpcXCpbIFxcdF0qXFwqWyBcXHQqXSopfCgtWyBcXHRdKi1bIFxcdF0qLVsgXFx0LV0qKXwoX1sgXFx0XSpfWyBcXHRdKl9bIFxcdF9dKikpJC8sIFxuICAgIHJlcGxhY2VtZW50OiAnPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrX1RNSFJcIj4kMDwvc3Bhbj4nXG4gIH0sXG4gIFRNVUw6IHsgXG4gICAgcmVnZXhwOiAvXiggezAsM31bKyotXSB7MSw0fSkoLiopJC8sIFxuICAgIHJlcGxhY2VtZW50OiAnPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrX1RNVUxcIj4kMTwvc3Bhbj4kJDInXG4gIH0sXG4gIFRNT0w6IHsgXG4gICAgcmVnZXhwOiAvXiggezAsM31cXGR7MSw5fVsuKV0gezEsNH0pKC4qKSQvLCBcbiAgICByZXBsYWNlbWVudDogJzxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya19UTU9MXCI+JDE8L3NwYW4+JCQyJ1xuICB9LFxuICAvLyBUT0RPOiBUaGlzIGlzIGN1cnJlbnRseSBwcmV2ZW50aW5nIHN1Ymxpc3RzIChhbmQgYW55IGNvbnRlbnQgd2l0aGluIGxpc3QgaXRlbXMsIHJlYWxseSkgZnJvbSB3b3JraW5nXG4gIFRNSW5kZW50ZWRDb2RlOiB7IFxuICAgIHJlZ2V4cDogL14oIHs0fXxcXHQpKC4qKSQvLCBcbiAgICByZXBsYWNlbWVudDogJzxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya19UTUluZGVudGVkQ29kZVwiPiQxPC9zcGFuPiQyJ1xuICB9LFxuICBUTUxpbmtSZWZlcmVuY2VEZWZpbml0aW9uOiB7XG4gICAgLy8gVE9ETzogTGluayBkZXN0aW5hdGlvbiBjYW4ndCBpbmNsdWRlIHVuYmFsYW5jZWQgcGFyYW50aGVzZXMsIGJ1dCB3ZSBqdXN0IGlnbm9yZSB0aGF0IGhlcmUgXG4gICAgcmVnZXhwOiAvXiggezAsM31cXFtcXHMqKShbXlxcc1xcXV0oPzpbXlxcXV18XFxcXFxcXSkqPykoXFxzKlxcXTpcXHMqKSgoPzpbXlxcczw+XSspfCg/OjwoPzpbXjw+XFxcXF18XFxcXC4pKj4pKT8oXFxzKikoKD86XFwoKD86W14oKVxcXFxdfFxcXFwuKSpcXCkpfCg/OlwiKD86W15cIlxcXFxdfFxcXFwuKSpcIil8KD86Jyg/OlteJ1xcXFxdfFxcXFwuKSonKSk/KFxccyopJC8sIFxuICAgIHJlcGxhY2VtZW50OiAnPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrX1RNTGlua1JlZmVyZW5jZURlZmluaXRpb25cIj4kMTwvc3Bhbj48c3BhbiBjbGFzcz1cIlRNTGlua0xhYmVsIFRNTGlua0xhYmVsX0RlZmluaXRpb25cIj4kMjwvc3Bhbj48c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfVE1MaW5rUmVmZXJlbmNlRGVmaW5pdGlvblwiPiQzPC9zcGFuPjxzcGFuIGNsYXNzPVwiVE1MaW5rRGVzdGluYXRpb25cIj4kNDwvc3Bhbj4kNTxzcGFuIGNsYXNzPVwiVE1MaW5rVGl0bGVcIj4kNjwvc3Bhbj4kNycsXG4gICAgbGFiZWxQbGFjZWhvbGRlcjogMiwgLy8gdGhpcyBkZWZpbmVzIHdoaWNoIHBsYWNlaG9sZGVyIGluIHRoZSBhYm92ZSByZWdleCBpcyB0aGUgbGluayBcImxhYmVsXCJcbiAgfSxcbn07XG5cbi8qKlxuICogSFRNTCBibG9ja3MgaGF2ZSBtdWx0aXBsZSBkaWZmZXJlbnQgY2xhc3NlcyBvZiBvcGVuZXIgYW5kIGNsb3Nlci4gVGhpcyBhcnJheSBkZWZpbmVzIGFsbCB0aGUgY2FzZXNcbiAqL1xuZXhwb3J0IGNvbnN0IGh0bWxCbG9ja0dyYW1tYXI6IEhUTUxCbG9ja1J1bGVbXSA9IFtcbiAgeyBzdGFydDogL14gezAsM308KD86c2NyaXB0fHByZXxzdHlsZSkoPzpcXHN8PnwkKS9pLCBlbmQ6IC8oPzo8XFwvc2NyaXB0Pnw8XFwvcHJlPnw8XFwvc3R5bGU+KS9pLCBwYXJhSW50ZXJydXB0OiB0cnVlIH0sXG4gIHsgc3RhcnQ6IC9eIHswLDN9PCEtLS8sIGVuZDogLy0tPi8sIHBhcmFJbnRlcnJ1cHQ6IHRydWUgfSxcbiAgeyBzdGFydDogL14gezAsM308XFw/LywgZW5kOiAvXFw/Pi8sIHBhcmFJbnRlcnJ1cHQ6IHRydWUgfSxcbiAgeyBzdGFydDogL14gezAsM308IVtBLVpdLywgZW5kOiAvPi8sIHBhcmFJbnRlcnJ1cHQgOiB0cnVlfSxcbiAgeyBzdGFydDogL14gezAsM308IVxcW0NEQVRBXFxbLywgZW5kOiAvXFxdXFxdPi8sIHBhcmFJbnRlcnJ1cHQgOiB0cnVlfSxcbiAgeyBzdGFydDogL14gezAsM30oPzo8fDxcXC8pKD86S25vd25UYWcpKD86XFxzfD58XFwvPnwkKS9pLCBlbmQ6IGZhbHNlLCBwYXJhSW50ZXJydXB0OiB0cnVlfSxcbiAgeyBzdGFydDogL14gezAsM30oPzpIVE1MT3BlblRhZ3xIVE1MQ2xvc2VUYWcpXFxzKiQvLCBlbmQ6IGZhbHNlLCBwYXJhSW50ZXJydXB0OiBmYWxzZX0sXG5dO1xuXG4vKipcbiAqIFN0cnVjdHVyZSBvZiB0aGUgb2JqZWN0OlxuICogVG9wIGxldmVsIGVudHJpZXMgYXJlIHJ1bGVzLCBlYWNoIGNvbnNpc3Rpbmcgb2YgYSByZWd1bGFyIGV4cHJlc3Npb25zIChpbiBzdHJpbmcgZm9ybWF0KSBhcyB3ZWxsIGFzIGEgcmVwbGFjZW1lbnQuXG4gKiBJbiB0aGUgcmVndWxhciBleHByZXNzaW9ucywgcmVwbGFjZW1lbnRzIGZyb20gdGhlIG9iamVjdCAncmVwbGFjZW1lbnRzJyB3aWxsIGJlIHByb2Nlc3NlZCBiZWZvcmUgY29tcGlsaW5nIGludG8gdGhlIHByb3BlcnR5IHJlZ2V4cC5cbiAqL1xuZXhwb3J0IGNvbnN0IGlubGluZUdyYW1tYXI6IFJlY29yZDxzdHJpbmcsIEdyYW1tYXJSdWxlPiA9IHtcbiAgZXNjYXBlIDoge1xuICAgIHJlZ2V4cDogL15cXFxcKEFTQ0lJUHVuY3R1YXRpb24pLyxcbiAgICByZXBsYWNlbWVudCA6ICc8c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfVE1Fc2NhcGVcIj5cXFxcPC9zcGFuPiQxJ1xuICB9LFxuICBjb2RlIDoge1xuICAgIHJlZ2V4cDogL14oYCspKCg/OlteYF0pfCg/OlteYF0uKj9bXmBdKSkoXFwxKS8sXG4gICAgcmVwbGFjZW1lbnQgOiAnPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrX1RNQ29kZVwiPiQxPC9zcGFuPjxjb2RlIGNsYXNzPVwiVE1Db2RlXCI+JDI8L2NvZGU+PHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrX1RNQ29kZVwiPiQzPC9zcGFuPicgXG4gIH0sXG4gIGF1dG9saW5rIDoge1xuICAgIHJlZ2V4cDogL148KCg/OlNjaGVtZTpbXlxcczw+XSopfCg/OkVtYWlsKSk+LyxcbiAgICByZXBsYWNlbWVudDogJzxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya19UTUF1dG9saW5rXCI+Jmx0Ozwvc3Bhbj48c3BhbiBjbGFzcz1cIlRNQXV0b2xpbmtcIj4kMTwvc3Bhbj48c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfVE1BdXRvbGlua1wiPiZndDs8L3NwYW4+J1xuICB9LFxuICBodG1sIDoge1xuICAgIHJlZ2V4cDogL14oKD86SFRNTE9wZW5UYWcpfCg/OkhUTUxDbG9zZVRhZyl8KD86SFRNTENvbW1lbnQpfCg/OkhUTUxQSSl8KD86SFRNTERlY2xhcmF0aW9uKXwoPzpIVE1MQ0RBVEEpKS8sXG4gICAgcmVwbGFjZW1lbnQ6ICc8c3BhbiBjbGFzcz1cIlRNSFRNTFwiPiQxPC9zcGFuPicsXG4gIH0sXG4gIGxpbmtPcGVuIDoge1xuICAgIHJlZ2V4cDogL15cXFsvLFxuICAgIHJlcGxhY2VtZW50OiAnJ1xuICB9LFxuICBpbWFnZU9wZW4gOiB7XG4gICAgcmVnZXhwOiAvXiFcXFsvLFxuICAgIHJlcGxhY2VtZW50IDogJydcbiAgfSxcbiAgbGlua0xhYmVsIDoge1xuICAgIHJlZ2V4cDogL14oXFxbXFxzKikoW15cXF1dKj8pKFxccypcXF0pLyxcbiAgICByZXBsYWNlbWVudDogJycsXG4gICAgbGFiZWxQbGFjZWhvbGRlcjogMlxuICB9LFxuICBkZWZhdWx0IDoge1xuICAgIHJlZ2V4cDogL14oLnwoPzpOb3RUcmlnZ2VyQ2hhcispKS8sXG4gICAgcmVwbGFjZW1lbnQ6ICckMSdcbiAgfVxufTtcblxuLy8gUHJvY2VzcyByZXBsYWNlbWVudHMgaW4gcmVnZXhwc1xuY29uc3QgcmVwbGFjZW1lbnRSZWdleHAgPSBuZXcgUmVnRXhwKE9iamVjdC5rZXlzKHJlcGxhY2VtZW50cykuam9pbignfCcpKTtcblxuLy8gSW5saW5lXG5jb25zdCBpbmxpbmVSdWxlcyA9IFsuLi5PYmplY3Qua2V5cyhpbmxpbmVHcmFtbWFyKV07XG5mb3IgKGxldCBydWxlIG9mIGlubGluZVJ1bGVzKSB7XG4gIGxldCByZSA9IGlubGluZUdyYW1tYXJbcnVsZV0ucmVnZXhwLnNvdXJjZTtcbiAgLy8gUmVwbGFjZSB3aGlsZSB0aGVyZSBpcyBzb21ldGhpbmcgdG8gcmVwbGFjZS4gVGhpcyBtZWFucyBpdCBhbHNvIHdvcmtzIG92ZXIgbXVsdGlwbGUgbGV2ZWxzIChyZXBsYWNlbWVudHMgY29udGFpbmluZyByZXBsYWNlbWVudHMpXG4gIHdoaWxlIChyZS5tYXRjaChyZXBsYWNlbWVudFJlZ2V4cCkpIHtcbiAgICByZSA9IHJlLnJlcGxhY2UocmVwbGFjZW1lbnRSZWdleHAsIChzdHJpbmcpID0+IHsgcmV0dXJuIHJlcGxhY2VtZW50c1tzdHJpbmddLnNvdXJjZTsgfSk7XG4gIH1cbiAgaW5saW5lR3JhbW1hcltydWxlXS5yZWdleHAgPSBuZXcgUmVnRXhwKHJlLCBpbmxpbmVHcmFtbWFyW3J1bGVdLnJlZ2V4cC5mbGFncyk7XG59XG5cbi8vIEhUTUwgQmxvY2sgKG9ubHkgb3BlbmluZyBydWxlIGlzIHByb2Nlc3NlZCBjdXJyZW50bHkpXG5mb3IgKGxldCBydWxlIG9mIGh0bWxCbG9ja0dyYW1tYXIpIHtcbiAgbGV0IHJlID0gcnVsZS5zdGFydC5zb3VyY2U7XG4gIC8vIFJlcGxhY2Ugd2hpbGUgdGhlcmUgaXMgc29tZXRoaW5nIHRvIHJlcGxhY2UuIFRoaXMgbWVhbnMgaXQgYWxzbyB3b3JrcyBvdmVyIG11bHRpcGxlIGxldmVscyAocmVwbGFjZW1lbnRzIGNvbnRhaW5pbmcgcmVwbGFjZW1lbnRzKVxuICB3aGlsZSAocmUubWF0Y2gocmVwbGFjZW1lbnRSZWdleHApKSB7XG4gICAgcmUgPSByZS5yZXBsYWNlKHJlcGxhY2VtZW50UmVnZXhwLCAoc3RyaW5nKSA9PiB7IHJldHVybiByZXBsYWNlbWVudHNbc3RyaW5nXS5zb3VyY2U7IH0pO1xuICB9XG4gIHJ1bGUuc3RhcnQgPSBuZXcgUmVnRXhwKHJlLCBydWxlLnN0YXJ0LmZsYWdzKTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgbWVyZ2VkIGlubGluZSBncmFtbWFyIGJ5IGNvbWJpbmluZyB0aGUgZGVmYXVsdCBpbmxpbmUgZ3JhbW1hciB3aXRoIGN1c3RvbSBydWxlcy5cbiAqIEN1c3RvbSBydWxlcyBhcmUgcHJvY2Vzc2VkIGFuZCB0aGVpciByZWdleHAgcGF0dGVybnMgYXJlIGV4cGFuZGVkIHdpdGggcmVwbGFjZW1lbnRzLlxuICogQHBhcmFtIGN1c3RvbVJ1bGVzIC0gT2JqZWN0IGNvbnRhaW5pbmcgY3VzdG9tIGlubGluZSBncmFtbWFyIHJ1bGVzXG4gKiBAcmV0dXJucyBNZXJnZWQgaW5saW5lIGdyYW1tYXIgb2JqZWN0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVNZXJnZWRJbmxpbmVHcmFtbWFyKGN1c3RvbVJ1bGVzOiBSZWNvcmQ8c3RyaW5nLCBHcmFtbWFyUnVsZT4gPSB7fSk6IFJlY29yZDxzdHJpbmcsIEdyYW1tYXJSdWxlPiB7XG4gIGNvbnN0IG1lcmdlZCA9IHsgLi4uaW5saW5lR3JhbW1hciB9O1xuICBcbiAgLy8gUHJvY2VzcyBjdXN0b20gcnVsZXNcbiAgZm9yIChjb25zdCBbcnVsZU5hbWUsIHJ1bGVdIG9mIE9iamVjdC5lbnRyaWVzKGN1c3RvbVJ1bGVzKSkge1xuICAgIC8vIENvcHkgdGhlIHJ1bGUgdG8gYXZvaWQgbW9kaWZ5aW5nIHRoZSBvcmlnaW5hbFxuICAgIGNvbnN0IHByb2Nlc3NlZFJ1bGUgPSB7IC4uLnJ1bGUgfTtcbiAgICBcbiAgICAvLyBQcm9jZXNzIHJlcGxhY2VtZW50cyBpbiB0aGUgcmVnZXhwXG4gICAgbGV0IHJlZ2V4cFNvdXJjZSA9IHJ1bGUucmVnZXhwLnNvdXJjZTtcbiAgICBjb25zdCByZXBsYWNlbWVudFJlZ2V4cCA9IG5ldyBSZWdFeHAoT2JqZWN0LmtleXMocmVwbGFjZW1lbnRzKS5qb2luKCd8JykpO1xuICAgIFxuICAgIC8vIFJlcGxhY2Ugd2hpbGUgdGhlcmUgaXMgc29tZXRoaW5nIHRvIHJlcGxhY2VcbiAgICB3aGlsZSAocmVnZXhwU291cmNlLm1hdGNoKHJlcGxhY2VtZW50UmVnZXhwKSkge1xuICAgICAgcmVnZXhwU291cmNlID0gcmVnZXhwU291cmNlLnJlcGxhY2UocmVwbGFjZW1lbnRSZWdleHAsIChtYXRjaCkgPT4ge1xuICAgICAgICByZXR1cm4gcmVwbGFjZW1lbnRzW21hdGNoXS5zb3VyY2U7XG4gICAgICB9KTtcbiAgICB9XG4gICAgXG4gICAgcHJvY2Vzc2VkUnVsZS5yZWdleHAgPSBuZXcgUmVnRXhwKHJlZ2V4cFNvdXJjZSwgcnVsZS5yZWdleHAuZmxhZ3MpO1xuICAgIG1lcmdlZFtydWxlTmFtZV0gPSBwcm9jZXNzZWRSdWxlO1xuICB9XG4gIFxuICByZXR1cm4gbWVyZ2VkO1xufVxuXG4vKipcbiAqIEVzY2FwZXMgSFRNTCBzcGVjaWFsIGNoYXJhY3RlcnMgKDwsID4sIGFuZCAmKSBpbiB0aGUgc3RyaW5nLlxuICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBUaGUgcmF3IHN0cmluZyB0byBiZSBlc2NhcGVkXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgc3RyaW5nLCByZWFkeSB0byBiZSB1c2VkIGluIEhUTUxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGh0bWxlc2NhcGUoc3RyaW5nOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gKHN0cmluZyA/IHN0cmluZyA6ICcnKVxuICAgIC5yZXBsYWNlKC8mL2csICcmYW1wOycpXG4gICAgLnJlcGxhY2UoLzwvZywgJyZsdDsnKVxuICAgIC5yZXBsYWNlKC8+L2csICcmZ3Q7Jyk7XG59XG5cbi8qKlxuICogQ29udGFpbnMgdGhlIGNvbW1hbmRzIHRoYXQgY2FuIGJlIHNlbnQgdG8gdGhlIGVkaXRvci4gQ29udGFpbnMgb2JqZWN0cyB3aXRoIGEgbmFtZSByZXByZXNlbnRpbmcgdGhlIG5hbWUgb2YgdGhlIGNvbW1hbmQuXG4gKiBFYWNoIG9mIHRoZSBvYmplY3RzIGNvbnRhaW5zIHRoZSBmb2xsb3dpbmcga2V5czpcbiAqIFxuICogICAtIHR5cGU6IENhbiBiZSBlaXRoZXIgaW5saW5lIChmb3IgaW5saW5lIGZvcm1hdHRpbmcpIG9yIGxpbmUgKGZvciBibG9jayAvIGxpbmUgZm9ybWF0dGluZykuXG4gKiAgIC0gY2xhc3NOYW1lOiBVc2VkIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZSBjb21tYW5kIGlzIGFjdGl2ZSBhdCBhIGdpdmVuIHBvc2l0aW9uLiBcbiAqICAgICBGb3IgbGluZSBmb3JtYXR0aW5nLCB0aGlzIGxvb2tzIGF0IHRoZSBjbGFzcyBvZiB0aGUgbGluZSBlbGVtZW50LiBGb3IgaW5saW5lIGVsZW1lbnRzLCB0cmllcyB0byBmaW5kIGFuIGVuY2xvc2luZyBlbGVtZW50IHdpdGggdGhhdCBjbGFzcy5cbiAqICAgLSBzZXQgLyB1bnNldDogQ29udGFpbiBpbnN0cnVjdGlvbnMgaG93IHRvIHNldCBhbmQgdW5zZXQgdGhlIGNvbW1hbmQuIEZvciBsaW5lIHR5cGUgY29tbWFuZHMsIGJvdGggY29uc2lzdCBvZiBhIHBhdHRlcm4gYW5kIHJlcGxhY2VtZW50IHRoYXQgXG4gKiAgICAgd2lsbCBiZSBhcHBsaWVkIHRvIGVhY2ggbGluZSAodXNpbmcgU3RyaW5nLnJlcGxhY2UpLiBGb3IgaW5saW5lIHR5cGUgY29tbWFuZHMsIHRoZSBzZXQgb2JqZWN0IGNvbnRhaW5zIGEgcHJlIGFuZCBwb3N0IHN0cmluZyB3aGljaCB3aWxsXG4gKiAgICAgYmUgaW5zZXJ0ZWQgYmVmb3JlIGFuZCBhZnRlciB0aGUgc2VsZWN0aW9uLiBUaGUgdW5zZXQgb2JqZWN0IGNvbnRhaW5zIGEgcHJlUGF0dGVybiBhbmQgYSBwb3N0UGF0dGVybi4gQm90aCBzaG91bGQgYmUgcmVndWxhciBleHByZXNzaW9ucyBhbmQgXG4gKiAgICAgdGhleSB3aWxsIGJlIGFwcGxpZWQgdG8gdGhlIHBvcnRpb24gb2YgdGhlIGxpbmUgYmVmb3JlIGFuZCBhZnRlciB0aGUgc2VsZWN0aW9uICh1c2luZyBTdHJpbmcucmVwbGFjZSwgd2l0aCBhbiBlbXB0eSByZXBsYWNlbWVudCBzdHJpbmcpLlxuICovXG5leHBvcnQgY29uc3QgY29tbWFuZHM6IFJlY29yZDxzdHJpbmcsIENvbW1hbmQ+ID0ge1xuICAvLyBSZXBsYWNlbWVudHMgZm9yIHVuc2V0IGZvciBpbmxpbmUgY29tbWFuZHMgYXJlICcnIGJ5IGRlZmF1bHRcbiAgYm9sZDoge1xuICAgIHR5cGU6ICdpbmxpbmUnLCBcbiAgICBjbGFzc05hbWU6ICdUTVN0cm9uZycsIFxuICAgIHNldDoge3ByZTogJyoqJywgcG9zdDogJyoqJ30sIFxuICAgIHVuc2V0OiB7cHJlUGF0dGVybjogLyg/OlxcKlxcKnxfXykkLywgcG9zdFBhdHRlcm46IC9eKD86XFwqXFwqfF9fKS99XG4gIH0sIFxuICBpdGFsaWM6IHtcbiAgICB0eXBlOiAnaW5saW5lJywgXG4gICAgY2xhc3NOYW1lOiAnVE1FbScsIFxuICAgIHNldDoge3ByZTogJyonLCBwb3N0OiAnKid9LCBcbiAgICB1bnNldDoge3ByZVBhdHRlcm46IC8oPzpcXCp8XykkLywgcG9zdFBhdHRlcm46IC9eKD86XFwqfF8pL31cbiAgfSxcbiAgY29kZToge1xuICAgIHR5cGU6ICdpbmxpbmUnLCBcbiAgICBjbGFzc05hbWU6ICdUTUNvZGUnLCBcbiAgICBzZXQ6IHtwcmU6ICdgJywgcG9zdDogJ2AnfSwgXG4gICAgdW5zZXQ6IHtwcmVQYXR0ZXJuOiAvYCskLywgcG9zdFBhdHRlcm46IC9eYCsvfSAvLyBGSVhNRSB0aGlzIGRvZXNuJ3QgZW5zdXJlIGJhbGFuY2VkIGJhY2t0aWNrcyByaWdodCBub3dcbiAgfSwgXG4gIHN0cmlrZXRocm91Z2g6IHtcbiAgICB0eXBlOiAnaW5saW5lJywgXG4gICAgY2xhc3NOYW1lOiAnVE1TdHJpa2V0aHJvdWdoJywgXG4gICAgc2V0OiB7cHJlOiAnfn4nLCBwb3N0OiAnfn4nfSwgXG4gICAgdW5zZXQ6IHtwcmVQYXR0ZXJuOi9+fiQvLCBwb3N0UGF0dGVybjogL15+fi8gfVxuICB9LFxuICBoMToge1xuICAgIHR5cGU6ICdsaW5lJywgXG4gICAgY2xhc3NOYW1lOiAnVE1IMScsIFxuICAgIHNldDoge3BhdHRlcm46IC9eKCB7MCwzfSg/Oig/OiMrfFswLTldezEsOX1bKS5dfFs+XFwtKitdKVxccyspPykoLiopJC8sIHJlcGxhY2VtZW50OiAnIyAkMid9LCBcbiAgICB1bnNldDoge3BhdHRlcm46IC9eKCB7MCwzfSNcXHMrKSguKj8pKCg/OlxccysjK1xccyopPykkLywgcmVwbGFjZW1lbnQ6ICckMid9XG4gIH0sXG4gIGgyOiB7XG4gICAgdHlwZTogJ2xpbmUnLCBcbiAgICBjbGFzc05hbWU6ICdUTUgyJywgXG4gICAgc2V0OiB7cGF0dGVybjogL14oIHswLDN9KD86KD86Iyt8WzAtOV17MSw5fVspLl18Wz5cXC0qK10pXFxzKyk/KSguKikkLywgcmVwbGFjZW1lbnQ6ICcjIyAkMid9LCBcbiAgICB1bnNldDoge3BhdHRlcm46IC9eKCB7MCwzfSMjXFxzKykoLio/KSgoPzpcXHMrIytcXHMqKT8pJC8sIHJlcGxhY2VtZW50OiAnJDInfVxuICB9LFxuICBoMzoge1xuICAgIHR5cGU6ICdsaW5lJywgXG4gICAgY2xhc3NOYW1lOiAnVE1IMycsIFxuICAgIHNldDoge3BhdHRlcm46IC9eKCB7MCwzfSg/Oig/OiMrfFswLTldezEsOX1bKS5dfFs+XFwtKitdKVxccyspPykoLiopJC8sIHJlcGxhY2VtZW50OiAnIyMjICQyJ30sIFxuICAgIHVuc2V0OiB7cGF0dGVybjogL14oIHswLDN9IyMjXFxzKykoLio/KSgoPzpcXHMrIytcXHMqKT8pJC8sIHJlcGxhY2VtZW50OiAnJDInfVxuICB9LFxuICBoNDoge1xuICAgIHR5cGU6ICdsaW5lJywgXG4gICAgY2xhc3NOYW1lOiAnVE1INCcsIFxuICAgIHNldDoge3BhdHRlcm46IC9eKCB7MCwzfSg/Oig/OiMrfFswLTldezEsOX1bKS5dfFs+XFwtKitdKVxccyspPykoLiopJC8sIHJlcGxhY2VtZW50OiAnIyMjIyAkMid9LCBcbiAgICB1bnNldDoge3BhdHRlcm46IC9eKCB7MCwzfSMjIyNcXHMrKSguKj8pKCg/OlxccysjK1xccyopPykkLywgcmVwbGFjZW1lbnQ6ICckMid9XG4gIH0sXG4gIGg1OiB7XG4gICAgdHlwZTogJ2xpbmUnLCBcbiAgICBjbGFzc05hbWU6ICdUTUg1JywgXG4gICAgc2V0OiB7cGF0dGVybjogL14oIHswLDN9KD86KD86Iyt8WzAtOV17MSw5fVspLl18Wz5cXC0qK10pXFxzKyk/KSguKikkLywgcmVwbGFjZW1lbnQ6ICcjIyMjIyAkMid9LCBcbiAgICB1bnNldDoge3BhdHRlcm46IC9eKCB7MCwzfSMjIyMjXFxzKykoLio/KSgoPzpcXHMrIytcXHMqKT8pJC8sIHJlcGxhY2VtZW50OiAnJDInfVxuICB9LFxuICBoNjoge1xuICAgIHR5cGU6ICdsaW5lJywgXG4gICAgY2xhc3NOYW1lOiAnVE1INicsIFxuICAgIHNldDoge3BhdHRlcm46IC9eKCB7MCwzfSg/Oig/OiMrfFswLTldezEsOX1bKS5dfFs+XFwtKitdKVxccyspPykoLiopJC8sIHJlcGxhY2VtZW50OiAnIyMjIyMjICQyJ30sIFxuICAgIHVuc2V0OiB7cGF0dGVybjogL14oIHswLDN9IyMjIyMjXFxzKykoLio/KSgoPzpcXHMrIytcXHMqKT8pJC8sIHJlcGxhY2VtZW50OiAnJDInfVxuICB9LFxuICB1bDoge1xuICAgIHR5cGU6ICdsaW5lJywgXG4gICAgY2xhc3NOYW1lOiAnVE1VTCcsIFxuICAgIHNldDoge3BhdHRlcm46IC9eKCB7MCwzfSg/Oig/OiMrfFswLTldezEsOX1bKS5dfFs+XFwtKitdKVxccyspPykoLiopJC8sIHJlcGxhY2VtZW50OiAnLSAkMid9LCBcbiAgICB1bnNldDoge3BhdHRlcm46IC9eKCB7MCwzfVsrKi1dIHsxLDR9KSguKikkLywgcmVwbGFjZW1lbnQ6ICckMid9XG4gIH0sXG4gIG9sOiB7XG4gICAgdHlwZTogJ2xpbmUnLCBcbiAgICBjbGFzc05hbWU6ICdUTU9MJywgXG4gICAgc2V0OiB7cGF0dGVybjogL14oIHswLDN9KD86KD86Iyt8WzAtOV17MSw5fVspLl18Wz5cXC0qK10pXFxzKyk/KSguKikkLywgcmVwbGFjZW1lbnQ6ICckIy4gJDInfSwgXG4gICAgdW5zZXQ6IHtwYXR0ZXJuOiAvXiggezAsM31cXGR7MSw5fVsuKV0gezEsNH0pKC4qKSQvLCByZXBsYWNlbWVudDogJyQyJ31cbiAgfSwgXG4gIGJsb2NrcXVvdGU6IHtcbiAgICB0eXBlOiAnbGluZScsIFxuICAgIGNsYXNzTmFtZTogJ1RNQmxvY2txdW90ZScsIFxuICAgIHNldDoge3BhdHRlcm46IC9eKCB7MCwzfSg/Oig/OiMrfFswLTldezEsOX1bKS5dfFs+XFwtKitdKVxccyspPykoLiopJC8sIHJlcGxhY2VtZW50OiAnPiAkMid9LCBcbiAgICB1bnNldDoge3BhdHRlcm46IC9eKCB7MCwzfT5bIF0/KSguKikkLywgcmVwbGFjZW1lbnQ6ICckMid9XG4gIH0sXG59OyIsImltcG9ydCB7XG4gIGlubGluZUdyYW1tYXIsXG4gIGxpbmVHcmFtbWFyLFxuICBwdW5jdHVhdGlvbkxlYWRpbmcsXG4gIHB1bmN0dWF0aW9uVHJhaWxpbmcsXG4gIGh0bWxlc2NhcGUsXG4gIGh0bWxCbG9ja0dyYW1tYXIsXG4gIGNvbW1hbmRzLFxuICBIVE1MQmxvY2tSdWxlLFxuICBDb21tYW5kLFxuICBHcmFtbWFyUnVsZSxcbiAgY3JlYXRlTWVyZ2VkSW5saW5lR3JhbW1hcixcbn0gZnJvbSBcIi4vZ3JhbW1hclwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEVkaXRvclByb3BzIHtcbiAgZWxlbWVudD86IHN0cmluZyB8IEhUTUxFbGVtZW50O1xuICBlZGl0b3I/OiBzdHJpbmcgfCBIVE1MRWxlbWVudDtcbiAgY29udGVudD86IHN0cmluZztcbiAgdGV4dGFyZWE/OiBzdHJpbmcgfCBIVE1MVGV4dEFyZWFFbGVtZW50O1xuICBjdXN0b21JbmxpbmVHcmFtbWFyPzogUmVjb3JkPHN0cmluZywgR3JhbW1hclJ1bGU+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBvc2l0aW9uIHtcbiAgcm93OiBudW1iZXI7XG4gIGNvbDogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEhpc3RvcnlTdGF0ZSB7XG4gIGNvbnRlbnQ6IHN0cmluZztcbiAgc2VsZWN0aW9uOiBQb3NpdGlvbiB8IG51bGw7XG4gIGFuY2hvcjogUG9zaXRpb24gfCBudWxsO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENoYW5nZUV2ZW50IHtcbiAgY29udGVudDogc3RyaW5nO1xuICBsaW5lc0RpcnR5OiBib29sZWFuW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2VsZWN0aW9uRXZlbnQge1xuICBmb2N1czogUG9zaXRpb247XG4gIGFuY2hvcjogUG9zaXRpb247XG4gIGNvbW1hbmRTdGF0ZTogUmVjb3JkPHN0cmluZywgYm9vbGVhbiB8IG51bGw+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERyb3BFdmVudCB7XG4gIGRhdGFUcmFuc2ZlcjogRGF0YVRyYW5zZmVyO1xufVxuXG50eXBlIEV2ZW50VHlwZSA9ICdjaGFuZ2UnIHwgJ3NlbGVjdGlvbicgfCAnZHJvcCc7XG50eXBlIEV2ZW50SGFuZGxlcjxUPiA9IChldmVudDogVCkgPT4gdm9pZDtcblxuZXhwb3J0IGNsYXNzIEVkaXRvciB7XG4gIHB1YmxpYyBlOiBIVE1MRGl2RWxlbWVudCB8IG51bGwgPSBudWxsO1xuICBwdWJsaWMgdGV4dGFyZWE6IEhUTUxUZXh0QXJlYUVsZW1lbnQgfCBudWxsID0gbnVsbDtcbiAgcHVibGljIGxpbmVzOiBzdHJpbmdbXSA9IFtdO1xuICBwdWJsaWMgbGluZUVsZW1lbnRzOiBOb2RlTGlzdE9mPENoaWxkTm9kZT4gfCBIVE1MQ29sbGVjdGlvbiB8IENoaWxkTm9kZVtdID0gW107XG4gIHB1YmxpYyBsaW5lVHlwZXM6IHN0cmluZ1tdID0gW107XG4gIHB1YmxpYyBsaW5lQ2FwdHVyZXM6IFJlZ0V4cEV4ZWNBcnJheVtdID0gW107XG4gIHB1YmxpYyBsaW5lUmVwbGFjZW1lbnRzOiBzdHJpbmdbXSA9IFtdO1xuICBwdWJsaWMgbGlua0xhYmVsczogc3RyaW5nW10gPSBbXTtcbiAgcHVibGljIGxpbmVEaXJ0eTogYm9vbGVhbltdID0gW107XG4gIHB1YmxpYyBsYXN0Q29tbWFuZFN0YXRlOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuIHwgbnVsbD4gfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBjdXN0b21JbmxpbmVHcmFtbWFyOiBSZWNvcmQ8c3RyaW5nLCBHcmFtbWFyUnVsZT4gPSB7fTtcbiAgcHJpdmF0ZSBtZXJnZWRJbmxpbmVHcmFtbWFyOiBSZWNvcmQ8c3RyaW5nLCBHcmFtbWFyUnVsZT4gPSBpbmxpbmVHcmFtbWFyO1xuICBwcml2YXRlIGhhc0ZvY3VzOiBib29sZWFuID0gdHJ1ZTtcblxuICBwdWJsaWMgbGlzdGVuZXJzOiB7XG4gICAgY2hhbmdlOiBFdmVudEhhbmRsZXI8Q2hhbmdlRXZlbnQ+W107XG4gICAgc2VsZWN0aW9uOiBFdmVudEhhbmRsZXI8U2VsZWN0aW9uRXZlbnQ+W107XG4gICAgZHJvcDogRXZlbnRIYW5kbGVyPERyb3BFdmVudD5bXTtcbiAgfSA9IHtcbiAgICBjaGFuZ2U6IFtdLFxuICAgIHNlbGVjdGlvbjogW10sXG4gICAgZHJvcDogW10sXG4gIH07XG5cbiAgcHJpdmF0ZSB1bmRvU3RhY2s6IEhpc3RvcnlTdGF0ZVtdID0gW107XG4gIHByaXZhdGUgcmVkb1N0YWNrOiBIaXN0b3J5U3RhdGVbXSA9IFtdO1xuICBwcml2YXRlIGlzUmVzdG9yaW5nSGlzdG9yeTogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIG1heEhpc3Rvcnk6IG51bWJlciA9IDEwMDtcblxuICBjb25zdHJ1Y3Rvcihwcm9wczogRWRpdG9yUHJvcHMgPSB7fSkge1xuICAgIHRoaXMuZSA9IG51bGw7XG4gICAgdGhpcy50ZXh0YXJlYSA9IG51bGw7XG4gICAgdGhpcy5saW5lcyA9IFtdO1xuICAgIHRoaXMubGluZUVsZW1lbnRzID0gW10gYXMgQ2hpbGROb2RlW107XG4gICAgdGhpcy5saW5lVHlwZXMgPSBbXTtcbiAgICB0aGlzLmxpbmVDYXB0dXJlcyA9IFtdO1xuICAgIHRoaXMubGluZVJlcGxhY2VtZW50cyA9IFtdO1xuICAgIHRoaXMubGlua0xhYmVscyA9IFtdO1xuICAgIHRoaXMubGluZURpcnR5ID0gW107XG4gICAgdGhpcy5sYXN0Q29tbWFuZFN0YXRlID0gbnVsbDtcbiAgICB0aGlzLmhhc0ZvY3VzID0gdHJ1ZTtcbiAgICB0aGlzLmN1c3RvbUlubGluZUdyYW1tYXIgPSBwcm9wcy5jdXN0b21JbmxpbmVHcmFtbWFyIHx8IHt9O1xuICAgIHRoaXMubWVyZ2VkSW5saW5lR3JhbW1hciA9IGNyZWF0ZU1lcmdlZElubGluZUdyYW1tYXIodGhpcy5jdXN0b21JbmxpbmVHcmFtbWFyKTtcblxuICAgIHRoaXMubGlzdGVuZXJzID0ge1xuICAgICAgY2hhbmdlOiBbXSxcbiAgICAgIHNlbGVjdGlvbjogW10sXG4gICAgICBkcm9wOiBbXSxcbiAgICB9O1xuXG4gICAgbGV0IGVsZW1lbnQ6IEhUTUxFbGVtZW50IHwgbnVsbCA9IG51bGw7XG4gICAgaWYgKHR5cGVvZiBwcm9wcy5lbGVtZW50ID09PSAnc3RyaW5nJykge1xuICAgICAgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHByb3BzLmVsZW1lbnQpO1xuICAgIH0gZWxzZSBpZiAocHJvcHMuZWxlbWVudCkge1xuICAgICAgZWxlbWVudCA9IHByb3BzLmVsZW1lbnQ7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBwcm9wcy50ZXh0YXJlYSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRoaXMudGV4dGFyZWEgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChwcm9wcy50ZXh0YXJlYSkgYXMgSFRNTFRleHRBcmVhRWxlbWVudDtcbiAgICB9IGVsc2UgaWYgKHByb3BzLnRleHRhcmVhKSB7XG4gICAgICB0aGlzLnRleHRhcmVhID0gcHJvcHMudGV4dGFyZWE7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudGV4dGFyZWEpIHtcbiAgICAgIGlmICghZWxlbWVudCkgZWxlbWVudCA9IHRoaXMudGV4dGFyZWE7XG4gICAgfVxuXG4gICAgaWYgKCFlbGVtZW50KSB7XG4gICAgICBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJib2R5XCIpWzBdO1xuICAgIH1cbiAgICBpZiAoZWxlbWVudCAmJiBlbGVtZW50LnRhZ05hbWUgPT09IFwiVEVYVEFSRUFcIikge1xuICAgICAgdGhpcy50ZXh0YXJlYSA9IGVsZW1lbnQgYXMgSFRNTFRleHRBcmVhRWxlbWVudDtcbiAgICAgIGVsZW1lbnQgPSB0aGlzLnRleHRhcmVhLnBhcmVudE5vZGUgYXMgSFRNTEVsZW1lbnQ7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudGV4dGFyZWEpIHtcbiAgICAgIHRoaXMudGV4dGFyZWEuc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xuICAgIH1cblxuICAgIHRoaXMudW5kb1N0YWNrID0gW107XG4gICAgdGhpcy5yZWRvU3RhY2sgPSBbXTtcbiAgICB0aGlzLmlzUmVzdG9yaW5nSGlzdG9yeSA9IGZhbHNlO1xuICAgIHRoaXMubWF4SGlzdG9yeSA9IDEwMDtcblxuICAgIHRoaXMuY3JlYXRlRWRpdG9yRWxlbWVudChlbGVtZW50LCBwcm9wcyk7XG4gICAgdGhpcy5zZXRDb250ZW50KFxuICAgICAgdHlwZW9mIHByb3BzLmNvbnRlbnQgPT09IFwic3RyaW5nXCJcbiAgICAgICAgPyBwcm9wcy5jb250ZW50XG4gICAgICAgIDogdGhpcy50ZXh0YXJlYVxuICAgICAgICA/IHRoaXMudGV4dGFyZWEudmFsdWVcbiAgICAgICAgOiBcIiMgSGVsbG8gVGlueU1ERSFcXG5FZGl0ICoqaGVyZSoqXCJcbiAgICApO1xuICAgIFxuICAgIHRoaXMuZSEuYWRkRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgKGUpID0+IHRoaXMuaGFuZGxlVW5kb1JlZG9LZXkoZSkpO1xuICB9XG5cbiAgZ2V0IGNhblVuZG8oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudW5kb1N0YWNrLmxlbmd0aCA+PSAyO1xuICB9XG5cbiAgZ2V0IGNhblJlZG8oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucmVkb1N0YWNrLmxlbmd0aCA+IDA7XG4gIH1cblxuICBwcml2YXRlIHB1c2hIaXN0b3J5KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzUmVzdG9yaW5nSGlzdG9yeSkgcmV0dXJuO1xuICAgIHRoaXMucHVzaEN1cnJlbnRTdGF0ZSgpO1xuICAgIHRoaXMucmVkb1N0YWNrID0gW107XG4gIH1cblxuICBwcml2YXRlIHB1c2hDdXJyZW50U3RhdGUoKTogdm9pZCB7XG4gICAgdGhpcy51bmRvU3RhY2sucHVzaCh7XG4gICAgICBjb250ZW50OiB0aGlzLmdldENvbnRlbnQoKSxcbiAgICAgIHNlbGVjdGlvbjogdGhpcy5nZXRTZWxlY3Rpb24oKSxcbiAgICAgIGFuY2hvcjogdGhpcy5nZXRTZWxlY3Rpb24odHJ1ZSksXG4gICAgfSk7XG4gICAgaWYgKHRoaXMudW5kb1N0YWNrLmxlbmd0aCA+IHRoaXMubWF4SGlzdG9yeSkgdGhpcy51bmRvU3RhY2suc2hpZnQoKTtcbiAgfVxuXG4gIHB1YmxpYyB1bmRvKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnVuZG9TdGFjay5sZW5ndGggPCAyKSByZXR1cm47XG4gICAgdGhpcy5pc1Jlc3RvcmluZ0hpc3RvcnkgPSB0cnVlO1xuICAgIHRoaXMucHVzaEN1cnJlbnRTdGF0ZSgpO1xuICAgIGNvbnN0IGN1cnJlbnQgPSB0aGlzLnVuZG9TdGFjay5wb3AoKSE7XG4gICAgdGhpcy5yZWRvU3RhY2sucHVzaChjdXJyZW50KTtcbiAgICBjb25zdCBwcmV2ID0gdGhpcy51bmRvU3RhY2tbdGhpcy51bmRvU3RhY2subGVuZ3RoIC0gMV07XG4gICAgdGhpcy5zZXRDb250ZW50KHByZXYuY29udGVudCk7XG4gICAgaWYgKHByZXYuc2VsZWN0aW9uKSB0aGlzLnNldFNlbGVjdGlvbihwcmV2LnNlbGVjdGlvbiwgcHJldi5hbmNob3IpO1xuICAgIHRoaXMudW5kb1N0YWNrLnBvcCgpO1xuICAgIHRoaXMuaXNSZXN0b3JpbmdIaXN0b3J5ID0gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgcmVkbygpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMucmVkb1N0YWNrLmxlbmd0aCkgcmV0dXJuO1xuICAgIHRoaXMuaXNSZXN0b3JpbmdIaXN0b3J5ID0gdHJ1ZTtcbiAgICB0aGlzLnB1c2hDdXJyZW50U3RhdGUoKTtcbiAgICBjb25zdCBuZXh0ID0gdGhpcy5yZWRvU3RhY2sucG9wKCkhO1xuICAgIHRoaXMuc2V0Q29udGVudChuZXh0LmNvbnRlbnQpO1xuICAgIGlmIChuZXh0LnNlbGVjdGlvbikgdGhpcy5zZXRTZWxlY3Rpb24obmV4dC5zZWxlY3Rpb24sIG5leHQuYW5jaG9yKTtcbiAgICB0aGlzLmlzUmVzdG9yaW5nSGlzdG9yeSA9IGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVVbmRvUmVkb0tleShlOiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgaXNNYWMgPSAvTWFjfGlQb2R8aVBob25lfGlQYWQvLnRlc3QobmF2aWdhdG9yLnBsYXRmb3JtKTtcbiAgICBjb25zdCBjdHJsID0gaXNNYWMgPyBlLm1ldGFLZXkgOiBlLmN0cmxLZXk7XG4gICAgaWYgKGN0cmwgJiYgIWUuYWx0S2V5KSB7XG4gICAgICBpZiAoZS5rZXkgPT09IFwielwiIHx8IGUua2V5ID09PSBcIlpcIikge1xuICAgICAgICBpZiAoZS5zaGlmdEtleSkge1xuICAgICAgICAgIHRoaXMucmVkbygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMudW5kbygpO1xuICAgICAgICB9XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgIH0gZWxzZSBpZiAoZS5rZXkgPT09IFwieVwiIHx8IGUua2V5ID09PSBcIllcIikge1xuICAgICAgICB0aGlzLnJlZG8oKTtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlRWRpdG9yRWxlbWVudChlbGVtZW50OiBIVE1MRWxlbWVudCwgcHJvcHM6IEVkaXRvclByb3BzKTogdm9pZCB7XG4gICAgaWYgKHByb3BzICYmIHByb3BzLmVkaXRvciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAodHlwZW9mIHByb3BzLmVkaXRvciA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGhpcy5lID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQocHJvcHMuZWRpdG9yKSBhcyBIVE1MRGl2RWxlbWVudDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZSA9IHByb3BzLmVkaXRvciBhcyBIVE1MRGl2RWxlbWVudDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICB9XG5cbiAgICB0aGlzLmUuY2xhc3NMaXN0LmFkZChcIlRpbnlNREVcIik7XG4gICAgdGhpcy5lLmNvbnRlbnRFZGl0YWJsZSA9IFwidHJ1ZVwiO1xuICAgIHRoaXMuZS5zdHlsZS53aGl0ZVNwYWNlID0gXCJwcmUtd3JhcFwiO1xuICAgICh0aGlzLmUuc3R5bGUgYXMgYW55KS53ZWJraXRVc2VyTW9kaWZ5ID0gXCJyZWFkLXdyaXRlLXBsYWludGV4dC1vbmx5XCI7XG5cbiAgICBpZiAocHJvcHMuZWRpdG9yID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy50ZXh0YXJlYSAmJlxuICAgICAgICB0aGlzLnRleHRhcmVhLnBhcmVudE5vZGUgPT09IGVsZW1lbnQgJiZcbiAgICAgICAgdGhpcy50ZXh0YXJlYS5uZXh0U2libGluZ1xuICAgICAgKSB7XG4gICAgICAgIGVsZW1lbnQuaW5zZXJ0QmVmb3JlKHRoaXMuZSwgdGhpcy50ZXh0YXJlYS5uZXh0U2libGluZyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5lLmFkZEV2ZW50TGlzdGVuZXIoXCJpbnB1dFwiLCAoZSkgPT4gdGhpcy5oYW5kbGVJbnB1dEV2ZW50KGUpKTtcbiAgICB0aGlzLmUuYWRkRXZlbnRMaXN0ZW5lcihcImJlZm9yZWlucHV0XCIsIChlKSA9PiB0aGlzLmhhbmRsZUJlZm9yZUlucHV0RXZlbnQoZSkpO1xuICAgIHRoaXMuZS5hZGRFdmVudExpc3RlbmVyKFwiY29tcG9zaXRpb25lbmRcIiwgKGUpID0+IHRoaXMuaGFuZGxlSW5wdXRFdmVudChlKSk7XG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcInNlbGVjdGlvbmNoYW5nZVwiLCAoZSkgPT4ge1xuICAgICAgaWYgKHRoaXMuaGFzRm9jdXMpIHsgdGhpcy5oYW5kbGVTZWxlY3Rpb25DaGFuZ2VFdmVudChlKTsgfVxuICAgICAgfVxuICAgICk7XG4gICAgdGhpcy5lLmFkZEV2ZW50TGlzdGVuZXIoXCJibHVyXCIsICgpID0+IHRoaXMuaGFzRm9jdXMgPSBmYWxzZSApO1xuICAgIHRoaXMuZS5hZGRFdmVudExpc3RlbmVyKFwiZm9jdXNcIiwgKCkgPT4gdGhpcy5oYXNGb2N1cyA9IHRydWUgKTtcbiAgICB0aGlzLmUuYWRkRXZlbnRMaXN0ZW5lcihcInBhc3RlXCIsIChlKSA9PiB0aGlzLmhhbmRsZVBhc3RlKGUpKTtcbiAgICB0aGlzLmUuYWRkRXZlbnRMaXN0ZW5lcihcImRyb3BcIiwgKGUpID0+IHRoaXMuaGFuZGxlRHJvcChlKSk7XG4gICAgdGhpcy5saW5lRWxlbWVudHMgPSB0aGlzLmUuY2hpbGROb2RlcztcbiAgfVxuXG4gIHB1YmxpYyBzZXRDb250ZW50KGNvbnRlbnQ6IHN0cmluZyk6IHZvaWQge1xuICAgIHdoaWxlICh0aGlzLmUhLmZpcnN0Q2hpbGQpIHtcbiAgICAgIHRoaXMuZSEucmVtb3ZlQ2hpbGQodGhpcy5lIS5maXJzdENoaWxkKTtcbiAgICB9XG4gICAgdGhpcy5saW5lcyA9IGNvbnRlbnQuc3BsaXQoLyg/OlxcclxcbnxcXHJ8XFxuKS8pO1xuICAgIHRoaXMubGluZURpcnR5ID0gW107XG4gICAgZm9yIChsZXQgbGluZU51bSA9IDA7IGxpbmVOdW0gPCB0aGlzLmxpbmVzLmxlbmd0aDsgbGluZU51bSsrKSB7XG4gICAgICBsZXQgbGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgdGhpcy5lIS5hcHBlbmRDaGlsZChsZSk7XG4gICAgICB0aGlzLmxpbmVEaXJ0eS5wdXNoKHRydWUpO1xuICAgIH1cbiAgICB0aGlzLmxpbmVUeXBlcyA9IG5ldyBBcnJheSh0aGlzLmxpbmVzLmxlbmd0aCk7XG4gICAgdGhpcy51cGRhdGVGb3JtYXR0aW5nKCk7XG4gICAgdGhpcy5maXJlQ2hhbmdlKCk7XG4gICAgaWYgKCF0aGlzLmlzUmVzdG9yaW5nSGlzdG9yeSkgdGhpcy5wdXNoSGlzdG9yeSgpO1xuICB9XG5cbiAgcHVibGljIGdldENvbnRlbnQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5saW5lcy5qb2luKFwiXFxuXCIpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVGb3JtYXR0aW5nKCk6IHZvaWQge1xuICAgIHRoaXMudXBkYXRlTGluZVR5cGVzKCk7XG4gICAgdGhpcy51cGRhdGVMaW5rTGFiZWxzKCk7XG4gICAgdGhpcy5hcHBseUxpbmVUeXBlcygpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVMaW5rTGFiZWxzKCk6IHZvaWQge1xuICAgIHRoaXMubGlua0xhYmVscyA9IFtdO1xuICAgIGZvciAobGV0IGwgPSAwOyBsIDwgdGhpcy5saW5lcy5sZW5ndGg7IGwrKykge1xuICAgICAgaWYgKHRoaXMubGluZVR5cGVzW2xdID09PSBcIlRNTGlua1JlZmVyZW5jZURlZmluaXRpb25cIikge1xuICAgICAgICB0aGlzLmxpbmtMYWJlbHMucHVzaChcbiAgICAgICAgICB0aGlzLmxpbmVDYXB0dXJlc1tsXVtcbiAgICAgICAgICAgIGxpbmVHcmFtbWFyLlRNTGlua1JlZmVyZW5jZURlZmluaXRpb24ubGFiZWxQbGFjZWhvbGRlciFcbiAgICAgICAgICBdXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZXBsYWNlKHJlcGxhY2VtZW50OiBzdHJpbmcsIGNhcHR1cmU6IFJlZ0V4cEV4ZWNBcnJheSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHJlcGxhY2VtZW50LnJlcGxhY2UoLyhcXCR7MSwyfSkoWzAtOV0pL2csIChzdHIsIHAxLCBwMikgPT4ge1xuICAgICAgaWYgKHAxID09PSBcIiRcIikgcmV0dXJuIGh0bWxlc2NhcGUoY2FwdHVyZVtwYXJzZUludChwMildKTtcbiAgICAgIGVsc2VcbiAgICAgICAgcmV0dXJuIGA8c3BhbiBjbGFzcz1cIlRNSW5saW5lRm9ybWF0dGVkXCI+JHt0aGlzLnByb2Nlc3NJbmxpbmVTdHlsZXMoXG4gICAgICAgICAgY2FwdHVyZVtwYXJzZUludChwMildXG4gICAgICAgICl9PC9zcGFuPmA7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFwcGx5TGluZVR5cGVzKCk6IHZvaWQge1xuICAgIGZvciAobGV0IGxpbmVOdW0gPSAwOyBsaW5lTnVtIDwgdGhpcy5saW5lcy5sZW5ndGg7IGxpbmVOdW0rKykge1xuICAgICAgaWYgKHRoaXMubGluZURpcnR5W2xpbmVOdW1dKSB7XG4gICAgICAgIGxldCBjb250ZW50SFRNTCA9IHRoaXMucmVwbGFjZShcbiAgICAgICAgICB0aGlzLmxpbmVSZXBsYWNlbWVudHNbbGluZU51bV0sXG4gICAgICAgICAgdGhpcy5saW5lQ2FwdHVyZXNbbGluZU51bV1cbiAgICAgICAgKTtcbiAgICAgICAgKHRoaXMubGluZUVsZW1lbnRzW2xpbmVOdW1dIGFzIEhUTUxFbGVtZW50KS5jbGFzc05hbWUgPSB0aGlzLmxpbmVUeXBlc1tsaW5lTnVtXTtcbiAgICAgICAgKHRoaXMubGluZUVsZW1lbnRzW2xpbmVOdW1dIGFzIEhUTUxFbGVtZW50KS5yZW1vdmVBdHRyaWJ1dGUoXCJzdHlsZVwiKTtcbiAgICAgICAgKHRoaXMubGluZUVsZW1lbnRzW2xpbmVOdW1dIGFzIEhUTUxFbGVtZW50KS5pbm5lckhUTUwgPVxuICAgICAgICAgIGNvbnRlbnRIVE1MID09PSBcIlwiID8gXCI8YnIgLz5cIiA6IGNvbnRlbnRIVE1MO1xuICAgICAgfVxuICAgICAgKHRoaXMubGluZUVsZW1lbnRzW2xpbmVOdW1dIGFzIEhUTUxFbGVtZW50KS5kYXRhc2V0LmxpbmVOdW0gPSBsaW5lTnVtLnRvU3RyaW5nKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVMaW5lVHlwZXMoKTogdm9pZCB7XG4gICAgbGV0IGNvZGVCbG9ja1R5cGU6IHN0cmluZyB8IGZhbHNlID0gZmFsc2U7XG4gICAgbGV0IGNvZGVCbG9ja1NlcUxlbmd0aCA9IDA7XG4gICAgbGV0IGh0bWxCbG9jazogSFRNTEJsb2NrUnVsZSB8IGZhbHNlID0gZmFsc2U7XG5cbiAgICBmb3IgKGxldCBsaW5lTnVtID0gMDsgbGluZU51bSA8IHRoaXMubGluZXMubGVuZ3RoOyBsaW5lTnVtKyspIHtcbiAgICAgIGxldCBsaW5lVHlwZSA9IFwiVE1QYXJhXCI7XG4gICAgICBsZXQgbGluZUNhcHR1cmU6IFJlZ0V4cEV4ZWNBcnJheSA9IFt0aGlzLmxpbmVzW2xpbmVOdW1dXSBhcyBSZWdFeHBFeGVjQXJyYXk7XG4gICAgICBsZXQgbGluZVJlcGxhY2VtZW50ID0gXCIkJDBcIjtcblxuICAgICAgLy8gQ2hlY2sgb25nb2luZyBjb2RlIGJsb2Nrc1xuICAgICAgaWYgKGNvZGVCbG9ja1R5cGUgPT09IFwiVE1Db2RlRmVuY2VCYWNrdGlja09wZW5cIikge1xuICAgICAgICBsZXQgY2FwdHVyZSA9IGxpbmVHcmFtbWFyLlRNQ29kZUZlbmNlQmFja3RpY2tDbG9zZS5yZWdleHAuZXhlYyh0aGlzLmxpbmVzW2xpbmVOdW1dKTtcbiAgICAgICAgaWYgKGNhcHR1cmUgJiYgY2FwdHVyZS5ncm91cHMhW1wic2VxXCJdLmxlbmd0aCA+PSBjb2RlQmxvY2tTZXFMZW5ndGgpIHtcbiAgICAgICAgICBsaW5lVHlwZSA9IFwiVE1Db2RlRmVuY2VCYWNrdGlja0Nsb3NlXCI7XG4gICAgICAgICAgbGluZVJlcGxhY2VtZW50ID0gbGluZUdyYW1tYXIuVE1Db2RlRmVuY2VCYWNrdGlja0Nsb3NlLnJlcGxhY2VtZW50O1xuICAgICAgICAgIGxpbmVDYXB0dXJlID0gY2FwdHVyZTtcbiAgICAgICAgICBjb2RlQmxvY2tUeXBlID0gZmFsc2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbGluZVR5cGUgPSBcIlRNRmVuY2VkQ29kZUJhY2t0aWNrXCI7XG4gICAgICAgICAgbGluZVJlcGxhY2VtZW50ID0gJzxzcGFuIGNsYXNzPVwiVE1GZW5jZWRDb2RlXCI+JDA8YnIgLz48L3NwYW4+JztcbiAgICAgICAgICBsaW5lQ2FwdHVyZSA9IFt0aGlzLmxpbmVzW2xpbmVOdW1dXSBhcyBSZWdFeHBFeGVjQXJyYXk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoY29kZUJsb2NrVHlwZSA9PT0gXCJUTUNvZGVGZW5jZVRpbGRlT3BlblwiKSB7XG4gICAgICAgIGxldCBjYXB0dXJlID0gbGluZUdyYW1tYXIuVE1Db2RlRmVuY2VUaWxkZUNsb3NlLnJlZ2V4cC5leGVjKHRoaXMubGluZXNbbGluZU51bV0pO1xuICAgICAgICBpZiAoY2FwdHVyZSAmJiBjYXB0dXJlLmdyb3VwcyFbXCJzZXFcIl0ubGVuZ3RoID49IGNvZGVCbG9ja1NlcUxlbmd0aCkge1xuICAgICAgICAgIGxpbmVUeXBlID0gXCJUTUNvZGVGZW5jZVRpbGRlQ2xvc2VcIjtcbiAgICAgICAgICBsaW5lUmVwbGFjZW1lbnQgPSBsaW5lR3JhbW1hci5UTUNvZGVGZW5jZVRpbGRlQ2xvc2UucmVwbGFjZW1lbnQ7XG4gICAgICAgICAgbGluZUNhcHR1cmUgPSBjYXB0dXJlO1xuICAgICAgICAgIGNvZGVCbG9ja1R5cGUgPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsaW5lVHlwZSA9IFwiVE1GZW5jZWRDb2RlVGlsZGVcIjtcbiAgICAgICAgICBsaW5lUmVwbGFjZW1lbnQgPSAnPHNwYW4gY2xhc3M9XCJUTUZlbmNlZENvZGVcIj4kMDxiciAvPjwvc3Bhbj4nO1xuICAgICAgICAgIGxpbmVDYXB0dXJlID0gW3RoaXMubGluZXNbbGluZU51bV1dIGFzIFJlZ0V4cEV4ZWNBcnJheTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayBIVE1MIGJsb2NrIHR5cGVzXG4gICAgICBpZiAobGluZVR5cGUgPT09IFwiVE1QYXJhXCIgJiYgaHRtbEJsb2NrID09PSBmYWxzZSkge1xuICAgICAgICBmb3IgKGxldCBodG1sQmxvY2tUeXBlIG9mIGh0bWxCbG9ja0dyYW1tYXIpIHtcbiAgICAgICAgICBpZiAodGhpcy5saW5lc1tsaW5lTnVtXS5tYXRjaChodG1sQmxvY2tUeXBlLnN0YXJ0KSkge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBodG1sQmxvY2tUeXBlLnBhcmFJbnRlcnJ1cHQgfHxcbiAgICAgICAgICAgICAgbGluZU51bSA9PT0gMCB8fFxuICAgICAgICAgICAgICAhKFxuICAgICAgICAgICAgICAgIHRoaXMubGluZVR5cGVzW2xpbmVOdW0gLSAxXSA9PT0gXCJUTVBhcmFcIiB8fFxuICAgICAgICAgICAgICAgIHRoaXMubGluZVR5cGVzW2xpbmVOdW0gLSAxXSA9PT0gXCJUTVVMXCIgfHxcbiAgICAgICAgICAgICAgICB0aGlzLmxpbmVUeXBlc1tsaW5lTnVtIC0gMV0gPT09IFwiVE1PTFwiIHx8XG4gICAgICAgICAgICAgICAgdGhpcy5saW5lVHlwZXNbbGluZU51bSAtIDFdID09PSBcIlRNQmxvY2txdW90ZVwiXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBodG1sQmxvY2sgPSBodG1sQmxvY2tUeXBlO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGh0bWxCbG9jayAhPT0gZmFsc2UpIHtcbiAgICAgICAgbGluZVR5cGUgPSBcIlRNSFRNTEJsb2NrXCI7XG4gICAgICAgIGxpbmVSZXBsYWNlbWVudCA9ICc8c3BhbiBjbGFzcz1cIlRNSFRNTENvbnRlbnRcIj4kMDxiciAvPjwvc3Bhbj4nO1xuICAgICAgICBsaW5lQ2FwdHVyZSA9IFt0aGlzLmxpbmVzW2xpbmVOdW1dXSBhcyBSZWdFeHBFeGVjQXJyYXk7XG5cbiAgICAgICAgaWYgKGh0bWxCbG9jay5lbmQpIHtcbiAgICAgICAgICBpZiAodGhpcy5saW5lc1tsaW5lTnVtXS5tYXRjaChodG1sQmxvY2suZW5kKSkge1xuICAgICAgICAgICAgaHRtbEJsb2NrID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGxpbmVOdW0gPT09IHRoaXMubGluZXMubGVuZ3RoIC0gMSB8fFxuICAgICAgICAgICAgdGhpcy5saW5lc1tsaW5lTnVtICsgMV0ubWF0Y2gobGluZUdyYW1tYXIuVE1CbGFua0xpbmUucmVnZXhwKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgaHRtbEJsb2NrID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIENoZWNrIGFsbCByZWdleHBzIGlmIHdlIGhhdmVuJ3QgYXBwbGllZCBvbmUgb2YgdGhlIGNvZGUgYmxvY2sgdHlwZXNcbiAgICAgIGlmIChsaW5lVHlwZSA9PT0gXCJUTVBhcmFcIikge1xuICAgICAgICBmb3IgKGxldCB0eXBlIGluIGxpbmVHcmFtbWFyKSB7XG4gICAgICAgICAgaWYgKGxpbmVHcmFtbWFyW3R5cGVdLnJlZ2V4cCkge1xuICAgICAgICAgICAgbGV0IGNhcHR1cmUgPSBsaW5lR3JhbW1hclt0eXBlXS5yZWdleHAuZXhlYyh0aGlzLmxpbmVzW2xpbmVOdW1dKTtcbiAgICAgICAgICAgIGlmIChjYXB0dXJlKSB7XG4gICAgICAgICAgICAgIGxpbmVUeXBlID0gdHlwZTtcbiAgICAgICAgICAgICAgbGluZVJlcGxhY2VtZW50ID0gbGluZUdyYW1tYXJbdHlwZV0ucmVwbGFjZW1lbnQ7XG4gICAgICAgICAgICAgIGxpbmVDYXB0dXJlID0gY2FwdHVyZTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIElmIHdlJ3ZlIG9wZW5lZCBhIGNvZGUgYmxvY2ssIHJlbWVtYmVyIHRoYXRcbiAgICAgIGlmIChsaW5lVHlwZSA9PT0gXCJUTUNvZGVGZW5jZUJhY2t0aWNrT3BlblwiIHx8IGxpbmVUeXBlID09PSBcIlRNQ29kZUZlbmNlVGlsZGVPcGVuXCIpIHtcbiAgICAgICAgY29kZUJsb2NrVHlwZSA9IGxpbmVUeXBlO1xuICAgICAgICBjb2RlQmxvY2tTZXFMZW5ndGggPSBsaW5lQ2FwdHVyZS5ncm91cHMhW1wic2VxXCJdLmxlbmd0aDtcbiAgICAgIH1cblxuICAgICAgLy8gTGluayByZWZlcmVuY2UgZGVmaW5pdGlvbiBhbmQgaW5kZW50ZWQgY29kZSBjYW4ndCBpbnRlcnJ1cHQgYSBwYXJhZ3JhcGhcbiAgICAgIGlmIChcbiAgICAgICAgKGxpbmVUeXBlID09PSBcIlRNSW5kZW50ZWRDb2RlXCIgfHwgbGluZVR5cGUgPT09IFwiVE1MaW5rUmVmZXJlbmNlRGVmaW5pdGlvblwiKSAmJlxuICAgICAgICBsaW5lTnVtID4gMCAmJlxuICAgICAgICAodGhpcy5saW5lVHlwZXNbbGluZU51bSAtIDFdID09PSBcIlRNUGFyYVwiIHx8XG4gICAgICAgICAgdGhpcy5saW5lVHlwZXNbbGluZU51bSAtIDFdID09PSBcIlRNVUxcIiB8fFxuICAgICAgICAgIHRoaXMubGluZVR5cGVzW2xpbmVOdW0gLSAxXSA9PT0gXCJUTU9MXCIgfHxcbiAgICAgICAgICB0aGlzLmxpbmVUeXBlc1tsaW5lTnVtIC0gMV0gPT09IFwiVE1CbG9ja3F1b3RlXCIpXG4gICAgICApIHtcbiAgICAgICAgbGluZVR5cGUgPSBcIlRNUGFyYVwiO1xuICAgICAgICBsaW5lQ2FwdHVyZSA9IFt0aGlzLmxpbmVzW2xpbmVOdW1dXSBhcyBSZWdFeHBFeGVjQXJyYXk7XG4gICAgICAgIGxpbmVSZXBsYWNlbWVudCA9IFwiJCQwXCI7XG4gICAgICB9XG5cbiAgICAgIC8vIFNldGV4dCBIMiBtYXJrZXJzIHRoYXQgY2FuIGFsc28gYmUgaW50ZXJwcmV0ZWQgYXMgYW4gZW1wdHkgbGlzdCBpdGVtIHNob3VsZCBiZSByZWdhcmRlZCBhcyBzdWNoXG4gICAgICBpZiAobGluZVR5cGUgPT09IFwiVE1TZXRleHRIMk1hcmtlclwiKSB7XG4gICAgICAgIGxldCBjYXB0dXJlID0gbGluZUdyYW1tYXIuVE1VTC5yZWdleHAuZXhlYyh0aGlzLmxpbmVzW2xpbmVOdW1dKTtcbiAgICAgICAgaWYgKGNhcHR1cmUpIHtcbiAgICAgICAgICBsaW5lVHlwZSA9IFwiVE1VTFwiO1xuICAgICAgICAgIGxpbmVSZXBsYWNlbWVudCA9IGxpbmVHcmFtbWFyLlRNVUwucmVwbGFjZW1lbnQ7XG4gICAgICAgICAgbGluZUNhcHR1cmUgPSBjYXB0dXJlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFNldGV4dCBoZWFkaW5ncyBhcmUgb25seSB2YWxpZCBpZiBwcmVjZWRlZCBieSBhIHBhcmFncmFwaFxuICAgICAgaWYgKGxpbmVUeXBlID09PSBcIlRNU2V0ZXh0SDFNYXJrZXJcIiB8fCBsaW5lVHlwZSA9PT0gXCJUTVNldGV4dEgyTWFya2VyXCIpIHtcbiAgICAgICAgaWYgKGxpbmVOdW0gPT09IDAgfHwgdGhpcy5saW5lVHlwZXNbbGluZU51bSAtIDFdICE9PSBcIlRNUGFyYVwiKSB7XG4gICAgICAgICAgbGV0IGNhcHR1cmUgPSBsaW5lR3JhbW1hci5UTUhSLnJlZ2V4cC5leGVjKHRoaXMubGluZXNbbGluZU51bV0pO1xuICAgICAgICAgIGlmIChjYXB0dXJlKSB7XG4gICAgICAgICAgICBsaW5lVHlwZSA9IFwiVE1IUlwiO1xuICAgICAgICAgICAgbGluZUNhcHR1cmUgPSBjYXB0dXJlO1xuICAgICAgICAgICAgbGluZVJlcGxhY2VtZW50ID0gbGluZUdyYW1tYXIuVE1IUi5yZXBsYWNlbWVudDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGluZVR5cGUgPSBcIlRNUGFyYVwiO1xuICAgICAgICAgICAgbGluZUNhcHR1cmUgPSBbdGhpcy5saW5lc1tsaW5lTnVtXV0gYXMgUmVnRXhwRXhlY0FycmF5O1xuICAgICAgICAgICAgbGluZVJlcGxhY2VtZW50ID0gXCIkJDBcIjtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbGV0IGhlYWRpbmdMaW5lID0gbGluZU51bSAtIDE7XG4gICAgICAgICAgY29uc3QgaGVhZGluZ0xpbmVUeXBlID0gbGluZVR5cGUgPT09IFwiVE1TZXRleHRIMU1hcmtlclwiID8gXCJUTVNldGV4dEgxXCIgOiBcIlRNU2V0ZXh0SDJcIjtcbiAgICAgICAgICBkbyB7XG4gICAgICAgICAgICBpZiAodGhpcy5saW5lVHlwZXNbaGVhZGluZ0xpbmVdICE9PSBoZWFkaW5nTGluZVR5cGUpIHtcbiAgICAgICAgICAgICAgdGhpcy5saW5lVHlwZXNbaGVhZGluZ0xpbmVdID0gaGVhZGluZ0xpbmVUeXBlO1xuICAgICAgICAgICAgICB0aGlzLmxpbmVEaXJ0eVtoZWFkaW5nTGluZV0gPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5saW5lUmVwbGFjZW1lbnRzW2hlYWRpbmdMaW5lXSA9IFwiJCQwXCI7XG4gICAgICAgICAgICB0aGlzLmxpbmVDYXB0dXJlc1toZWFkaW5nTGluZV0gPSBbdGhpcy5saW5lc1toZWFkaW5nTGluZV1dIGFzIFJlZ0V4cEV4ZWNBcnJheTtcbiAgICAgICAgICAgIGhlYWRpbmdMaW5lLS07XG4gICAgICAgICAgfSB3aGlsZSAoaGVhZGluZ0xpbmUgPj0gMCAmJiB0aGlzLmxpbmVUeXBlc1toZWFkaW5nTGluZV0gPT09IFwiVE1QYXJhXCIpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmxpbmVUeXBlc1tsaW5lTnVtXSAhPT0gbGluZVR5cGUpIHtcbiAgICAgICAgdGhpcy5saW5lVHlwZXNbbGluZU51bV0gPSBsaW5lVHlwZTtcbiAgICAgICAgdGhpcy5saW5lRGlydHlbbGluZU51bV0gPSB0cnVlO1xuICAgICAgfVxuICAgICAgdGhpcy5saW5lUmVwbGFjZW1lbnRzW2xpbmVOdW1dID0gbGluZVJlcGxhY2VtZW50O1xuICAgICAgdGhpcy5saW5lQ2FwdHVyZXNbbGluZU51bV0gPSBsaW5lQ2FwdHVyZTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0U2VsZWN0aW9uKGdldEFuY2hvcjogYm9vbGVhbiA9IGZhbHNlKTogUG9zaXRpb24gfCBudWxsIHtcbiAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gICAgbGV0IHN0YXJ0Tm9kZSA9IGdldEFuY2hvciA/IHNlbGVjdGlvbiEuYW5jaG9yTm9kZSA6IHNlbGVjdGlvbiEuZm9jdXNOb2RlO1xuICAgIGlmICghc3RhcnROb2RlKSByZXR1cm4gbnVsbDtcbiAgICBsZXQgb2Zmc2V0ID0gZ2V0QW5jaG9yID8gc2VsZWN0aW9uIS5hbmNob3JPZmZzZXQgOiBzZWxlY3Rpb24hLmZvY3VzT2Zmc2V0O1xuICAgIGlmIChzdGFydE5vZGUgPT09IHRoaXMuZSkge1xuICAgICAgaWYgKG9mZnNldCA8IHRoaXMubGluZXMubGVuZ3RoKVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHJvdzogb2Zmc2V0LFxuICAgICAgICAgIGNvbDogMCxcbiAgICAgICAgfTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHJvdzogb2Zmc2V0IC0gMSxcbiAgICAgICAgY29sOiB0aGlzLmxpbmVzW29mZnNldCAtIDFdLmxlbmd0aCxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgbGV0IGNvbCA9IHRoaXMuY29tcHV0ZUNvbHVtbihzdGFydE5vZGUsIG9mZnNldCk7XG4gICAgaWYgKGNvbCA9PT0gbnVsbCkgcmV0dXJuIG51bGw7XG5cbiAgICBsZXQgbm9kZSA9IHN0YXJ0Tm9kZTtcbiAgICB3aGlsZSAobm9kZS5wYXJlbnRFbGVtZW50ICE9PSB0aGlzLmUpIHtcbiAgICAgIG5vZGUgPSBub2RlLnBhcmVudEVsZW1lbnQhO1xuICAgIH1cblxuICAgIGxldCByb3cgPSAwO1xuICAgIC8vIElmIHRoZSBub2RlIGRvZXNuJ3QgaGF2ZSBhIHByZXZpb3VzIHNpYmxpbmcsIGl0IG11c3QgYmUgdGhlIGZpcnN0IGxpbmVcbiAgICBpZiAobm9kZS5wcmV2aW91c1NpYmxpbmcpIHtcbiAgICAgIGNvbnN0IGN1cnJlbnRMaW5lTnVtRGF0YSA9IChub2RlIGFzIEhUTUxFbGVtZW50KS5kYXRhc2V0Py5saW5lTnVtO1xuICAgICAgY29uc3QgcHJldmlvdXNMaW5lTnVtRGF0YSA9IChub2RlLnByZXZpb3VzU2libGluZyBhcyBIVE1MRWxlbWVudCkuZGF0YXNldD8ubGluZU51bTtcblxuICAgICAgaWYgKGN1cnJlbnRMaW5lTnVtRGF0YSAmJiBwcmV2aW91c0xpbmVOdW1EYXRhKSB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRMaW5lTnVtID0gcGFyc2VJbnQoY3VycmVudExpbmVOdW1EYXRhKTtcbiAgICAgICAgY29uc3QgcHJldmlvdXNMaW5lTnVtID0gcGFyc2VJbnQocHJldmlvdXNMaW5lTnVtRGF0YSk7XG4gICAgICAgIGlmIChjdXJyZW50TGluZU51bSA9PT0gcHJldmlvdXNMaW5lTnVtICsgMSkge1xuICAgICAgICAgIHJvdyA9IGN1cnJlbnRMaW5lTnVtO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIElmIHRoZSBjdXJyZW50IGxpbmUgaXMgTk9UIHRoZSBwcmV2aW91cyBsaW5lICsgMSwgdGhlbiBlaXRoZXIgXG4gICAgICAgICAgLy8gdGhlIGN1cnJlbnQgbGluZSBnb3Qgc3BsaXQgaW4gdHdvIG9yIG1lcmdlZCB3aXRoIHRoZSBwcmV2aW91cyBsaW5lXG4gICAgICAgICAgLy8gRWl0aGVyIHdheSwgd2UgbmVlZCB0byByZWNhbGN1bGF0ZSB0aGUgcm93IG51bWJlclxuICAgICAgICAgIHdoaWxlIChub2RlLnByZXZpb3VzU2libGluZykge1xuICAgICAgICAgICAgcm93Kys7XG4gICAgICAgICAgICBub2RlID0gbm9kZS5wcmV2aW91c1NpYmxpbmc7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIFxuICAgIHJldHVybiB7IHJvdzogcm93LCBjb2w6IGNvbCB9O1xuICB9XG5cbiAgcHVibGljIHNldFNlbGVjdGlvbihmb2N1czogUG9zaXRpb24sIGFuY2hvcjogUG9zaXRpb24gfCBudWxsID0gbnVsbCk6IHZvaWQge1xuICAgIGlmICghZm9jdXMpIHJldHVybjtcblxuICAgIGxldCB7IG5vZGU6IGZvY3VzTm9kZSwgb2Zmc2V0OiBmb2N1c09mZnNldCB9ID0gdGhpcy5jb21wdXRlTm9kZUFuZE9mZnNldChcbiAgICAgIGZvY3VzLnJvdyxcbiAgICAgIGZvY3VzLmNvbCxcbiAgICAgIGFuY2hvciA/IGFuY2hvci5yb3cgPT09IGZvY3VzLnJvdyAmJiBhbmNob3IuY29sID4gZm9jdXMuY29sIDogZmFsc2VcbiAgICApO1xuICAgIGxldCBhbmNob3JOb2RlID0gbnVsbCxcbiAgICAgIGFuY2hvck9mZnNldCA9IG51bGw7XG4gICAgaWYgKGFuY2hvciAmJiAoYW5jaG9yLnJvdyAhPT0gZm9jdXMucm93IHx8IGFuY2hvci5jb2wgIT09IGZvY3VzLmNvbCkpIHtcbiAgICAgIGxldCB7IG5vZGUsIG9mZnNldCB9ID0gdGhpcy5jb21wdXRlTm9kZUFuZE9mZnNldChcbiAgICAgICAgYW5jaG9yLnJvdyxcbiAgICAgICAgYW5jaG9yLmNvbCxcbiAgICAgICAgZm9jdXMucm93ID09PSBhbmNob3Iucm93ICYmIGZvY3VzLmNvbCA+IGFuY2hvci5jb2xcbiAgICAgICk7XG4gICAgICBhbmNob3JOb2RlID0gbm9kZTtcbiAgICAgIGFuY2hvck9mZnNldCA9IG9mZnNldDtcbiAgICB9XG5cbiAgICBsZXQgd2luZG93U2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICAgIHdpbmRvd1NlbGVjdGlvbiEuc2V0QmFzZUFuZEV4dGVudChcbiAgICAgIGZvY3VzTm9kZSxcbiAgICAgIGZvY3VzT2Zmc2V0LFxuICAgICAgYW5jaG9yTm9kZSB8fCBmb2N1c05vZGUsXG4gICAgICBhbmNob3JOb2RlID8gYW5jaG9yT2Zmc2V0ISA6IGZvY3VzT2Zmc2V0XG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBwYXN0ZSh0ZXh0OiBzdHJpbmcsIGFuY2hvcjogUG9zaXRpb24gfCBudWxsID0gbnVsbCwgZm9jdXM6IFBvc2l0aW9uIHwgbnVsbCA9IG51bGwpOiB2b2lkIHtcbiAgICBpZiAoIWFuY2hvcikgYW5jaG9yID0gdGhpcy5nZXRTZWxlY3Rpb24odHJ1ZSk7XG4gICAgaWYgKCFmb2N1cykgZm9jdXMgPSB0aGlzLmdldFNlbGVjdGlvbihmYWxzZSk7XG4gICAgbGV0IGJlZ2lubmluZzogUG9zaXRpb24sIGVuZDogUG9zaXRpb247XG4gICAgaWYgKCFmb2N1cykge1xuICAgICAgZm9jdXMgPSB7XG4gICAgICAgIHJvdzogdGhpcy5saW5lcy5sZW5ndGggLSAxLFxuICAgICAgICBjb2w6IHRoaXMubGluZXNbdGhpcy5saW5lcy5sZW5ndGggLSAxXS5sZW5ndGgsXG4gICAgICB9O1xuICAgIH1cbiAgICBpZiAoIWFuY2hvcikge1xuICAgICAgYW5jaG9yID0gZm9jdXM7XG4gICAgfVxuICAgIGlmIChcbiAgICAgIGFuY2hvci5yb3cgPCBmb2N1cy5yb3cgfHxcbiAgICAgIChhbmNob3Iucm93ID09PSBmb2N1cy5yb3cgJiYgYW5jaG9yLmNvbCA8PSBmb2N1cy5jb2wpXG4gICAgKSB7XG4gICAgICBiZWdpbm5pbmcgPSBhbmNob3I7XG4gICAgICBlbmQgPSBmb2N1cztcbiAgICB9IGVsc2Uge1xuICAgICAgYmVnaW5uaW5nID0gZm9jdXM7XG4gICAgICBlbmQgPSBhbmNob3I7XG4gICAgfVxuICAgIGxldCBpbnNlcnRlZExpbmVzID0gdGV4dC5zcGxpdCgvKD86XFxyXFxufFxccnxcXG4pLyk7XG4gICAgbGV0IGxpbmVCZWZvcmUgPSB0aGlzLmxpbmVzW2JlZ2lubmluZy5yb3ddLnN1YnN0cigwLCBiZWdpbm5pbmcuY29sKTtcbiAgICBsZXQgbGluZUVuZCA9IHRoaXMubGluZXNbZW5kLnJvd10uc3Vic3RyKGVuZC5jb2wpO1xuICAgIGluc2VydGVkTGluZXNbMF0gPSBsaW5lQmVmb3JlLmNvbmNhdChpbnNlcnRlZExpbmVzWzBdKTtcbiAgICBsZXQgZW5kQ29sUG9zID0gaW5zZXJ0ZWRMaW5lc1tpbnNlcnRlZExpbmVzLmxlbmd0aCAtIDFdLmxlbmd0aDtcbiAgICBpbnNlcnRlZExpbmVzW2luc2VydGVkTGluZXMubGVuZ3RoIC0gMV0gPSBpbnNlcnRlZExpbmVzW2luc2VydGVkTGluZXMubGVuZ3RoIC0gMV0uY29uY2F0KGxpbmVFbmQpO1xuICAgIHRoaXMuc3BsaWNlTGluZXMoYmVnaW5uaW5nLnJvdywgMSArIGVuZC5yb3cgLSBiZWdpbm5pbmcucm93LCBpbnNlcnRlZExpbmVzKTtcbiAgICBmb2N1cy5yb3cgPSBiZWdpbm5pbmcucm93ICsgaW5zZXJ0ZWRMaW5lcy5sZW5ndGggLSAxO1xuICAgIGZvY3VzLmNvbCA9IGVuZENvbFBvcztcbiAgICB0aGlzLnVwZGF0ZUZvcm1hdHRpbmcoKTtcbiAgICB0aGlzLnNldFNlbGVjdGlvbihmb2N1cyk7XG4gICAgdGhpcy5maXJlQ2hhbmdlKCk7XG4gIH1cblxuICBwdWJsaWMgd3JhcFNlbGVjdGlvbihwcmU6IHN0cmluZywgcG9zdDogc3RyaW5nLCBmb2N1czogUG9zaXRpb24gfCBudWxsID0gbnVsbCwgYW5jaG9yOiBQb3NpdGlvbiB8IG51bGwgPSBudWxsKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmlzUmVzdG9yaW5nSGlzdG9yeSkgdGhpcy5wdXNoSGlzdG9yeSgpO1xuICAgIGlmICghZm9jdXMpIGZvY3VzID0gdGhpcy5nZXRTZWxlY3Rpb24oZmFsc2UpO1xuICAgIGlmICghYW5jaG9yKSBhbmNob3IgPSB0aGlzLmdldFNlbGVjdGlvbih0cnVlKTtcbiAgICBpZiAoIWZvY3VzIHx8ICFhbmNob3IgfHwgZm9jdXMucm93ICE9PSBhbmNob3Iucm93KSByZXR1cm47XG4gICAgdGhpcy5saW5lRGlydHlbZm9jdXMucm93XSA9IHRydWU7XG5cbiAgICBjb25zdCBzdGFydENvbCA9IGZvY3VzLmNvbCA8IGFuY2hvci5jb2wgPyBmb2N1cy5jb2wgOiBhbmNob3IuY29sO1xuICAgIGNvbnN0IGVuZENvbCA9IGZvY3VzLmNvbCA8IGFuY2hvci5jb2wgPyBhbmNob3IuY29sIDogZm9jdXMuY29sO1xuICAgIGNvbnN0IGxlZnQgPSB0aGlzLmxpbmVzW2ZvY3VzLnJvd10uc3Vic3RyKDAsIHN0YXJ0Q29sKS5jb25jYXQocHJlKTtcbiAgICBjb25zdCBtaWQgPSBlbmRDb2wgPT09IHN0YXJ0Q29sID8gXCJcIiA6IHRoaXMubGluZXNbZm9jdXMucm93XS5zdWJzdHIoc3RhcnRDb2wsIGVuZENvbCAtIHN0YXJ0Q29sKTtcbiAgICBjb25zdCByaWdodCA9IHBvc3QuY29uY2F0KHRoaXMubGluZXNbZm9jdXMucm93XS5zdWJzdHIoZW5kQ29sKSk7XG4gICAgdGhpcy5saW5lc1tmb2N1cy5yb3ddID0gbGVmdC5jb25jYXQobWlkLCByaWdodCk7XG4gICAgYW5jaG9yLmNvbCA9IGxlZnQubGVuZ3RoO1xuICAgIGZvY3VzLmNvbCA9IGFuY2hvci5jb2wgKyBtaWQubGVuZ3RoO1xuXG4gICAgdGhpcy51cGRhdGVGb3JtYXR0aW5nKCk7XG4gICAgdGhpcy5zZXRTZWxlY3Rpb24oZm9jdXMsIGFuY2hvcik7XG4gIH1cblxuICBwdWJsaWMgYWRkRXZlbnRMaXN0ZW5lcjxUIGV4dGVuZHMgRXZlbnRUeXBlPihcbiAgICB0eXBlOiBULFxuICAgIGxpc3RlbmVyOiBUIGV4dGVuZHMgJ2NoYW5nZScgPyBFdmVudEhhbmRsZXI8Q2hhbmdlRXZlbnQ+IDpcbiAgICAgICAgICAgICBUIGV4dGVuZHMgJ3NlbGVjdGlvbicgPyBFdmVudEhhbmRsZXI8U2VsZWN0aW9uRXZlbnQ+IDpcbiAgICAgICAgICAgICBUIGV4dGVuZHMgJ2Ryb3AnID8gRXZlbnRIYW5kbGVyPERyb3BFdmVudD4gOiBuZXZlclxuICApOiB2b2lkIHtcbiAgICBpZiAodHlwZS5tYXRjaCgvXig/OmNoYW5nZXxpbnB1dCkkL2kpKSB7XG4gICAgICB0aGlzLmxpc3RlbmVycy5jaGFuZ2UucHVzaChsaXN0ZW5lciBhcyBFdmVudEhhbmRsZXI8Q2hhbmdlRXZlbnQ+KTtcbiAgICB9XG4gICAgaWYgKHR5cGUubWF0Y2goL14oPzpzZWxlY3Rpb258c2VsZWN0aW9uY2hhbmdlKSQvaSkpIHtcbiAgICAgIHRoaXMubGlzdGVuZXJzLnNlbGVjdGlvbi5wdXNoKGxpc3RlbmVyIGFzIEV2ZW50SGFuZGxlcjxTZWxlY3Rpb25FdmVudD4pO1xuICAgIH1cbiAgICBpZiAodHlwZS5tYXRjaCgvXig/OmRyb3ApJC9pKSkge1xuICAgICAgdGhpcy5saXN0ZW5lcnMuZHJvcC5wdXNoKGxpc3RlbmVyIGFzIEV2ZW50SGFuZGxlcjxEcm9wRXZlbnQ+KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGZpcmVDaGFuZ2UoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnRleHRhcmVhICYmICF0aGlzLmxpc3RlbmVycy5jaGFuZ2UubGVuZ3RoKSByZXR1cm47XG4gICAgY29uc3QgY29udGVudCA9IHRoaXMuZ2V0Q29udGVudCgpO1xuICAgIGlmICh0aGlzLnRleHRhcmVhKSB0aGlzLnRleHRhcmVhLnZhbHVlID0gY29udGVudDtcbiAgICBmb3IgKGxldCBsaXN0ZW5lciBvZiB0aGlzLmxpc3RlbmVycy5jaGFuZ2UpIHtcbiAgICAgIGxpc3RlbmVyKHtcbiAgICAgICAgY29udGVudDogY29udGVudCxcbiAgICAgICAgbGluZXNEaXJ0eTogWy4uLnRoaXMubGluZURpcnR5XSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBiZWZvcmVpbnB1dCBoYW5kbGVyLCBleGNsdXNpdmVseSB0byBoYW5kbGUgaW5zZXJ0UGFyYWdyYXBoIGFuZFxuICAgKiBpbnNlcnRMaW5lQnJlYWsgZXZlbnRzLiBUaGVzZSB1c2VkIHRvIGJlIGhhbmRsZWQgaW4gdGhlIGlucHV0IGV2ZW50LFxuICAgKiBidXQgdGhhdCBjYXVzZWQgaXNzdWVzIHdpdGggRmlyZWZveCB3aGVyZSB0aGUgaW5wdXQgZXZlbnQgd291bGQgYmVcbiAgICogc29tZXRpbWVzIG5vdCBiZSBmaXJlZCBmb3IgdGhlc2UgaW5wdXQgdHlwZXMuXG4gICAqIEBwYXJhbSBldmVudCBUaGUgaW5wdXQgZXZlbnRcbiAgICogQHJldHVybnMgbm90aGluZ1xuICAgKi9cbiAgcHJpdmF0ZSBoYW5kbGVCZWZvcmVJbnB1dEV2ZW50KGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGJlZm9yZUlucHV0RXZlbnQgPSBldmVudCBhcyBJbnB1dEV2ZW50O1xuICAgIGlmIChcbiAgICAgIGJlZm9yZUlucHV0RXZlbnQuaW5wdXRUeXBlICE9PSBcImluc2VydFBhcmFncmFwaFwiICYmXG4gICAgICBiZWZvcmVJbnB1dEV2ZW50LmlucHV0VHlwZSAhPT0gXCJpbnNlcnRMaW5lQnJlYWtcIlxuICAgICkgcmV0dXJuO1xuICAgIGlmICghdGhpcy5pc1Jlc3RvcmluZ0hpc3RvcnkpIHRoaXMucHVzaEhpc3RvcnkoKTtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHRoaXMuY2xlYXJEaXJ0eUZsYWcoKTtcblxuICAgIGNvbnN0IGZvY3VzID0gdGhpcy5nZXRTZWxlY3Rpb24oKTtcbiAgICBjb25zdCBhbmNob3IgPSB0aGlzLmdldFNlbGVjdGlvbih0cnVlKTtcblxuICAgIGlmICghZm9jdXMgfHwgIWFuY2hvcikgcmV0dXJuO1xuICAgIFxuICAgIC8vIElmIGZvY3VzIGFuZCBhbmNob3IgYXJlIGluIGRpZmZlcmVudCBsaW5lcywgc2ltcGx5IHJlbW92ZSBldmVyeXRoaW5nIFxuICAgIC8vIGFmdGVyIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHNlbGVjdGlvbiBhbmQgYmVmb3JlIHRoZSBlbmQgb2YgdGhlIHNlbGVjdGlvblxuICAgIC8vIGFuZCByZW1vdmUgYW55IGxpbmVzIGluIGJldHdlZW5cbiAgICBpZiAoZm9jdXMucm93ICE9PSBhbmNob3Iucm93KSB7XG4gICAgICBjb25zdCBiZWdpbm5pbmcgPSBmb2N1cy5yb3cgPCBhbmNob3Iucm93ID8gZm9jdXMgOiBhbmNob3I7XG4gICAgICBjb25zdCBlbmQgPSBmb2N1cy5yb3cgPCBhbmNob3Iucm93ID8gYW5jaG9yIDogZm9jdXM7XG4gICAgICB0aGlzLmxpbmVzW2JlZ2lubmluZy5yb3ddID0gdGhpcy5saW5lc1tiZWdpbm5pbmcucm93XS5zdWJzdHJpbmcoMCwgYmVnaW5uaW5nLmNvbCk7XG4gICAgICB0aGlzLmxpbmVzW2VuZC5yb3ddID0gdGhpcy5saW5lc1tlbmQucm93XS5zdWJzdHJpbmcoZW5kLmNvbCk7XG4gICAgICB0aGlzLnNwbGljZUxpbmVzKGJlZ2lubmluZy5yb3cgKyAxLCBlbmQucm93IC0gYmVnaW5uaW5nLnJvdyAtIDEpO1xuICAgICAgZm9jdXMucm93ID0gYmVnaW5uaW5nLnJvdyArIDE7XG4gICAgICBmb2N1cy5jb2wgPSAwO1xuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgY29udGludWFibGVUeXBlOiBzdHJpbmcgfCBmYWxzZSA9IGZhbHNlO1xuICAgICAgc3dpdGNoICh0aGlzLmxpbmVUeXBlc1tmb2N1cy5yb3ddKSB7XG4gICAgICAgIGNhc2UgXCJUTVVMXCI6XG4gICAgICAgICAgY29udGludWFibGVUeXBlID0gXCJUTVVMXCI7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJUTU9MXCI6XG4gICAgICAgICAgY29udGludWFibGVUeXBlID0gXCJUTU9MXCI7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJUTUluZGVudGVkQ29kZVwiOlxuICAgICAgICAgIGNvbnRpbnVhYmxlVHlwZSA9IFwiVE1JbmRlbnRlZENvZGVcIjtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiBcbiAgICAgIGNvbnN0IGxpbmVCZWZvcmVCcmVhayA9IHRoaXMubGluZXNbZm9jdXMucm93XS5zdWJzdHJpbmcoMCwgZm9jdXMuY29sIDw9IGFuY2hvci5jb2wgPyBmb2N1cy5jb2wgOiBhbmNob3IuY29sKTtcbiAgICAgIGNvbnN0IGxpbmVBZnRlckJyZWFrID0gdGhpcy5saW5lc1tmb2N1cy5yb3ddLnN1YnN0cmluZyhmb2N1cy5jb2wgPD0gYW5jaG9yLmNvbCA/IGFuY2hvci5jb2wgOiBmb2N1cy5jb2wpO1xuICAgICAgdGhpcy5zcGxpY2VMaW5lcyhmb2N1cy5yb3csIDEsIFtsaW5lQmVmb3JlQnJlYWssIGxpbmVBZnRlckJyZWFrXSk7XG5cbiAgICAgIGZvY3VzLnJvdyArPSAxO1xuICAgICAgZm9jdXMuY29sID0gMDtcblxuICAgICAgaWYgKGNvbnRpbnVhYmxlVHlwZSkge1xuICAgICAgICBsZXQgY2FwdHVyZSA9IGxpbmVHcmFtbWFyW2NvbnRpbnVhYmxlVHlwZV0ucmVnZXhwLmV4ZWModGhpcy5saW5lc1tmb2N1cy5yb3cgLSAxXSk7XG4gICAgICAgIGlmIChjYXB0dXJlKSB7XG4gICAgICAgICAgaWYgKGNhcHR1cmVbMl0pIHtcbiAgICAgICAgICAgIGlmIChjb250aW51YWJsZVR5cGUgPT09IFwiVE1PTFwiKSB7XG4gICAgICAgICAgICAgIGNhcHR1cmVbMV0gPSBjYXB0dXJlWzFdLnJlcGxhY2UoL1xcZHsxLDl9LywgKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiAocGFyc2VJbnQocmVzdWx0KSArIDEpLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5saW5lc1tmb2N1cy5yb3ddID0gYCR7Y2FwdHVyZVsxXX0ke3RoaXMubGluZXNbZm9jdXMucm93XX1gO1xuICAgICAgICAgICAgdGhpcy5saW5lRGlydHlbZm9jdXMucm93XSA9IHRydWU7XG4gICAgICAgICAgICBmb2N1cy5jb2wgPSBjYXB0dXJlWzFdLmxlbmd0aDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5saW5lc1tmb2N1cy5yb3cgLSAxXSA9IFwiXCI7XG4gICAgICAgICAgICB0aGlzLmxpbmVEaXJ0eVtmb2N1cy5yb3cgLSAxXSA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMudXBkYXRlRm9ybWF0dGluZygpO1xuICAgIHRoaXMuc2V0U2VsZWN0aW9uKGZvY3VzKTtcblxuICAgIC8vIFNjcm9sbCB0aGUgZWxlbWVudCBjb250YWluaW5nIHRoZSBzZWxlY3Rpb24gaW50byB2aWV3XG4gICAgaWYgKGZvY3VzICYmIGZvY3VzLnJvdyA8IHRoaXMubGluZUVsZW1lbnRzLmxlbmd0aCkge1xuICAgICAgKHRoaXMubGluZUVsZW1lbnRzW2ZvY3VzLnJvd10gYXMgSFRNTEVsZW1lbnQpLnNjcm9sbEludG9WaWV3KHtcbiAgICAgICAgYmxvY2s6ICduZWFyZXN0JyxcbiAgICAgICAgaW5saW5lOiAnbmVhcmVzdCdcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMuZmlyZUNoYW5nZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVJbnB1dEV2ZW50KGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGlucHV0RXZlbnQgPSBldmVudCBhcyBJbnB1dEV2ZW50O1xuICAgIGlmIChpbnB1dEV2ZW50LmlucHV0VHlwZSA9PT0gXCJpbnNlcnRDb21wb3NpdGlvblRleHRcIikgcmV0dXJuO1xuICAgIGlmICghdGhpcy5pc1Jlc3RvcmluZ0hpc3RvcnkpIHRoaXMucHVzaEhpc3RvcnkoKTtcblxuICAgIGxldCBmb2N1cyA9IHRoaXMuZ2V0U2VsZWN0aW9uKCk7XG5cbiAgICBpZiAoKGlucHV0RXZlbnQuaW5wdXRUeXBlID09PSBcImluc2VydFBhcmFncmFwaFwiIHx8IGlucHV0RXZlbnQuaW5wdXRUeXBlID09PSBcImluc2VydExpbmVCcmVha1wiKSAmJiBmb2N1cykge1xuICAgICAgLy8gVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuIHNpbmNlIHRoZXNlIGFyZSBoYW5kbGVkIGJ5IHRoZSBiZWZvcmVpbnB1dCBoYW5kbGVyXG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghdGhpcy5lIS5maXJzdENoaWxkKSB7XG4gICAgICAgIHRoaXMuZSEuaW5uZXJIVE1MID0gJzxkaXYgY2xhc3M9XCJUTUJsYW5rTGluZVwiPjxicj48L2Rpdj4nO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5maXhOb2RlSGllcmFyY2h5KCk7XG4gICAgICB9XG4gICAgICB0aGlzLnVwZGF0ZUxpbmVDb250ZW50c0FuZEZvcm1hdHRpbmcoKTtcbiAgICB9XG4gICAgaWYgKGZvY3VzKSB7XG4gICAgICB0aGlzLnNldFNlbGVjdGlvbihmb2N1cyk7XG4gICAgfVxuXG4gICAgdGhpcy5maXJlQ2hhbmdlKCk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZVNlbGVjdGlvbkNoYW5nZUV2ZW50KF9lOiBFdmVudCk6IHZvaWQge1xuICAgIHRoaXMuZmlyZVNlbGVjdGlvbigpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVQYXN0ZShldmVudDogQ2xpcGJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaXNSZXN0b3JpbmdIaXN0b3J5KSB0aGlzLnB1c2hIaXN0b3J5KCk7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgIGxldCB0ZXh0ID0gKGV2ZW50IGFzIGFueSkuY2xpcGJvYXJkRGF0YS5nZXREYXRhKFwidGV4dC9wbGFpblwiKTtcbiAgICB0aGlzLnBhc3RlKHRleHQpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVEcm9wKGV2ZW50OiBEcmFnRXZlbnQpOiB2b2lkIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHRoaXMuZmlyZURyb3AoZXZlbnQuZGF0YVRyYW5zZmVyISk7XG4gIH1cblxuICBwcml2YXRlIHByb2Nlc3NJbmxpbmVTdHlsZXMob3JpZ2luYWxTdHJpbmc6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgbGV0IHByb2Nlc3NlZCA9IFwiXCI7XG4gICAgbGV0IHN0YWNrOiBBcnJheTx7ZGVsaW1pdGVyOiBzdHJpbmcsIGRlbGltU3RyaW5nOiBzdHJpbmcsIGNvdW50OiBudW1iZXIsIG91dHB1dDogc3RyaW5nfT4gPSBbXTtcbiAgICBsZXQgb2Zmc2V0ID0gMDtcbiAgICBsZXQgc3RyaW5nID0gb3JpZ2luYWxTdHJpbmc7XG5cbiAgICBvdXRlcjogd2hpbGUgKHN0cmluZykge1xuICAgICAgLy8gUHJvY2VzcyBzaW1wbGUgcnVsZXMgKG5vbi1kZWxpbWl0ZXIpXG4gICAgICBmb3IgKGxldCBydWxlIG9mIFtcImVzY2FwZVwiLCBcImNvZGVcIiwgXCJhdXRvbGlua1wiLCBcImh0bWxcIl0pIHtcbiAgICAgICAgaWYgKHRoaXMubWVyZ2VkSW5saW5lR3JhbW1hcltydWxlXSkge1xuICAgICAgICAgIGxldCBjYXAgPSB0aGlzLm1lcmdlZElubGluZUdyYW1tYXJbcnVsZV0ucmVnZXhwLmV4ZWMoc3RyaW5nKTtcbiAgICAgICAgICBpZiAoY2FwKSB7XG4gICAgICAgICAgICBzdHJpbmcgPSBzdHJpbmcuc3Vic3RyKGNhcFswXS5sZW5ndGgpO1xuICAgICAgICAgICAgb2Zmc2V0ICs9IGNhcFswXS5sZW5ndGg7XG4gICAgICAgICAgICBwcm9jZXNzZWQgKz0gdGhpcy5tZXJnZWRJbmxpbmVHcmFtbWFyW3J1bGVdLnJlcGxhY2VtZW50LnJlcGxhY2UoL1xcJChbMS05XSkvZywgKHN0ciwgcDEpID0+IGh0bWxlc2NhcGUoY2FwW3AxXSkpO1xuICAgICAgICAgICAgY29udGludWUgb3V0ZXI7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIFByb2Nlc3MgY3VzdG9tIGlubGluZSBncmFtbWFyIHJ1bGVzXG4gICAgICBmb3IgKGxldCBydWxlIGluIHRoaXMuY3VzdG9tSW5saW5lR3JhbW1hcikge1xuICAgICAgICBpZiAocnVsZSAhPT0gXCJlc2NhcGVcIiAmJiBydWxlICE9PSBcImNvZGVcIiAmJiBydWxlICE9PSBcImF1dG9saW5rXCIgJiYgcnVsZSAhPT0gXCJodG1sXCIgJiYgcnVsZSAhPT0gXCJsaW5rT3BlblwiICYmIHJ1bGUgIT09IFwiaW1hZ2VPcGVuXCIgJiYgcnVsZSAhPT0gXCJsaW5rTGFiZWxcIiAmJiBydWxlICE9PSBcImRlZmF1bHRcIikge1xuICAgICAgICAgIGxldCBjYXAgPSB0aGlzLm1lcmdlZElubGluZUdyYW1tYXJbcnVsZV0ucmVnZXhwLmV4ZWMoc3RyaW5nKTtcbiAgICAgICAgICBpZiAoY2FwKSB7XG4gICAgICAgICAgICBzdHJpbmcgPSBzdHJpbmcuc3Vic3RyKGNhcFswXS5sZW5ndGgpO1xuICAgICAgICAgICAgb2Zmc2V0ICs9IGNhcFswXS5sZW5ndGg7XG4gICAgICAgICAgICBwcm9jZXNzZWQgKz0gdGhpcy5tZXJnZWRJbmxpbmVHcmFtbWFyW3J1bGVdLnJlcGxhY2VtZW50LnJlcGxhY2UoL1xcJChbMS05XSkvZywgKHN0ciwgcDEpID0+IGh0bWxlc2NhcGUoY2FwW3AxXSkpO1xuICAgICAgICAgICAgY29udGludWUgb3V0ZXI7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIENoZWNrIGZvciBsaW5rcyAvIGltYWdlc1xuICAgICAgbGV0IHBvdGVudGlhbExpbmsgPSBzdHJpbmcubWF0Y2godGhpcy5tZXJnZWRJbmxpbmVHcmFtbWFyLmxpbmtPcGVuLnJlZ2V4cCk7XG4gICAgICBsZXQgcG90ZW50aWFsSW1hZ2UgPSBzdHJpbmcubWF0Y2godGhpcy5tZXJnZWRJbmxpbmVHcmFtbWFyLmltYWdlT3Blbi5yZWdleHApO1xuICAgICAgaWYgKHBvdGVudGlhbEltYWdlIHx8IHBvdGVudGlhbExpbmspIHtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHRoaXMucGFyc2VMaW5rT3JJbWFnZShzdHJpbmcsICEhcG90ZW50aWFsSW1hZ2UpO1xuICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgcHJvY2Vzc2VkID0gYCR7cHJvY2Vzc2VkfSR7cmVzdWx0Lm91dHB1dH1gO1xuICAgICAgICAgIHN0cmluZyA9IHN0cmluZy5zdWJzdHIocmVzdWx0LmNoYXJDb3VudCk7XG4gICAgICAgICAgb2Zmc2V0ICs9IHJlc3VsdC5jaGFyQ291bnQ7XG4gICAgICAgICAgY29udGludWUgb3V0ZXI7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgZm9yIGVtIC8gc3Ryb25nIGRlbGltaXRlcnNcbiAgICAgIGxldCBjYXAgPSAvKF5cXCorKXwoXl8rKS8uZXhlYyhzdHJpbmcpO1xuICAgICAgaWYgKGNhcCkge1xuICAgICAgICBsZXQgZGVsaW1Db3VudCA9IGNhcFswXS5sZW5ndGg7XG4gICAgICAgIGNvbnN0IGRlbGltU3RyaW5nID0gY2FwWzBdO1xuICAgICAgICBjb25zdCBjdXJyZW50RGVsaW1pdGVyID0gY2FwWzBdWzBdO1xuXG4gICAgICAgIHN0cmluZyA9IHN0cmluZy5zdWJzdHIoY2FwWzBdLmxlbmd0aCk7XG5cbiAgICAgICAgY29uc3QgcHJlY2VkaW5nID0gb2Zmc2V0ID4gMCA/IG9yaWdpbmFsU3RyaW5nLnN1YnN0cigwLCBvZmZzZXQpIDogXCIgXCI7XG4gICAgICAgIGNvbnN0IGZvbGxvd2luZyA9IG9mZnNldCArIGNhcFswXS5sZW5ndGggPCBvcmlnaW5hbFN0cmluZy5sZW5ndGggPyBzdHJpbmcgOiBcIiBcIjtcblxuICAgICAgICBjb25zdCBwdW5jdHVhdGlvbkZvbGxvd3MgPSBmb2xsb3dpbmcubWF0Y2gocHVuY3R1YXRpb25MZWFkaW5nKTtcbiAgICAgICAgY29uc3QgcHVuY3R1YXRpb25QcmVjZWRlcyA9IHByZWNlZGluZy5tYXRjaChwdW5jdHVhdGlvblRyYWlsaW5nKTtcbiAgICAgICAgY29uc3Qgd2hpdGVzcGFjZUZvbGxvd3MgPSBmb2xsb3dpbmcubWF0Y2goL15cXHMvKTtcbiAgICAgICAgY29uc3Qgd2hpdGVzcGFjZVByZWNlZGVzID0gcHJlY2VkaW5nLm1hdGNoKC9cXHMkLyk7XG5cbiAgICAgICAgbGV0IGNhbk9wZW4gPSAhd2hpdGVzcGFjZUZvbGxvd3MgJiYgKCFwdW5jdHVhdGlvbkZvbGxvd3MgfHwgISF3aGl0ZXNwYWNlUHJlY2VkZXMgfHwgISFwdW5jdHVhdGlvblByZWNlZGVzKTtcbiAgICAgICAgbGV0IGNhbkNsb3NlID0gIXdoaXRlc3BhY2VQcmVjZWRlcyAmJiAoIXB1bmN0dWF0aW9uUHJlY2VkZXMgfHwgISF3aGl0ZXNwYWNlRm9sbG93cyB8fCAhIXB1bmN0dWF0aW9uRm9sbG93cyk7XG5cbiAgICAgICAgaWYgKGN1cnJlbnREZWxpbWl0ZXIgPT09IFwiX1wiICYmIGNhbk9wZW4gJiYgY2FuQ2xvc2UpIHtcbiAgICAgICAgICBjYW5PcGVuID0gISFwdW5jdHVhdGlvblByZWNlZGVzO1xuICAgICAgICAgIGNhbkNsb3NlID0gISFwdW5jdHVhdGlvbkZvbGxvd3M7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2FuQ2xvc2UpIHtcbiAgICAgICAgICBsZXQgc3RhY2tQb2ludGVyID0gc3RhY2subGVuZ3RoIC0gMTtcbiAgICAgICAgICB3aGlsZSAoZGVsaW1Db3VudCAmJiBzdGFja1BvaW50ZXIgPj0gMCkge1xuICAgICAgICAgICAgaWYgKHN0YWNrW3N0YWNrUG9pbnRlcl0uZGVsaW1pdGVyID09PSBjdXJyZW50RGVsaW1pdGVyKSB7XG4gICAgICAgICAgICAgIHdoaWxlIChzdGFja1BvaW50ZXIgPCBzdGFjay5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZW50cnkgPSBzdGFjay5wb3AoKSE7XG4gICAgICAgICAgICAgICAgcHJvY2Vzc2VkID0gYCR7ZW50cnkub3V0cHV0fSR7ZW50cnkuZGVsaW1TdHJpbmcuc3Vic3RyKDAsIGVudHJ5LmNvdW50KX0ke3Byb2Nlc3NlZH1gO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKGRlbGltQ291bnQgPj0gMiAmJiBzdGFja1tzdGFja1BvaW50ZXJdLmNvdW50ID49IDIpIHtcbiAgICAgICAgICAgICAgICBwcm9jZXNzZWQgPSBgPHNwYW4gY2xhc3M9XCJUTU1hcmtcIj4ke2N1cnJlbnREZWxpbWl0ZXJ9JHtjdXJyZW50RGVsaW1pdGVyfTwvc3Bhbj48c3Ryb25nIGNsYXNzPVwiVE1TdHJvbmdcIj4ke3Byb2Nlc3NlZH08L3N0cm9uZz48c3BhbiBjbGFzcz1cIlRNTWFya1wiPiR7Y3VycmVudERlbGltaXRlcn0ke2N1cnJlbnREZWxpbWl0ZXJ9PC9zcGFuPmA7XG4gICAgICAgICAgICAgICAgZGVsaW1Db3VudCAtPSAyO1xuICAgICAgICAgICAgICAgIHN0YWNrW3N0YWNrUG9pbnRlcl0uY291bnQgLT0gMjtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwcm9jZXNzZWQgPSBgPHNwYW4gY2xhc3M9XCJUTU1hcmtcIj4ke2N1cnJlbnREZWxpbWl0ZXJ9PC9zcGFuPjxlbSBjbGFzcz1cIlRNRW1cIj4ke3Byb2Nlc3NlZH08L2VtPjxzcGFuIGNsYXNzPVwiVE1NYXJrXCI+JHtjdXJyZW50RGVsaW1pdGVyfTwvc3Bhbj5gO1xuICAgICAgICAgICAgICAgIGRlbGltQ291bnQgLT0gMTtcbiAgICAgICAgICAgICAgICBzdGFja1tzdGFja1BvaW50ZXJdLmNvdW50IC09IDE7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAoc3RhY2tbc3RhY2tQb2ludGVyXS5jb3VudCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGxldCBlbnRyeSA9IHN0YWNrLnBvcCgpITtcbiAgICAgICAgICAgICAgICBwcm9jZXNzZWQgPSBgJHtlbnRyeS5vdXRwdXR9JHtwcm9jZXNzZWR9YDtcbiAgICAgICAgICAgICAgICBzdGFja1BvaW50ZXItLTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgc3RhY2tQb2ludGVyLS07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRlbGltQ291bnQgJiYgY2FuT3Blbikge1xuICAgICAgICAgIHN0YWNrLnB1c2goe1xuICAgICAgICAgICAgZGVsaW1pdGVyOiBjdXJyZW50RGVsaW1pdGVyLFxuICAgICAgICAgICAgZGVsaW1TdHJpbmc6IGRlbGltU3RyaW5nLFxuICAgICAgICAgICAgY291bnQ6IGRlbGltQ291bnQsXG4gICAgICAgICAgICBvdXRwdXQ6IHByb2Nlc3NlZCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBwcm9jZXNzZWQgPSBcIlwiO1xuICAgICAgICAgIGRlbGltQ291bnQgPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRlbGltQ291bnQpIHtcbiAgICAgICAgICBwcm9jZXNzZWQgPSBgJHtwcm9jZXNzZWR9JHtkZWxpbVN0cmluZy5zdWJzdHIoMCwgZGVsaW1Db3VudCl9YDtcbiAgICAgICAgfVxuXG4gICAgICAgIG9mZnNldCArPSBjYXBbMF0ubGVuZ3RoO1xuICAgICAgICBjb250aW51ZSBvdXRlcjtcbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgZm9yIHN0cmlrZXRocm91Z2ggZGVsaW1pdGVyXG4gICAgICBjYXAgPSAvXn5+Ly5leGVjKHN0cmluZyk7XG4gICAgICBpZiAoY2FwKSB7XG4gICAgICAgIGxldCBjb25zdW1lZCA9IGZhbHNlO1xuICAgICAgICBsZXQgc3RhY2tQb2ludGVyID0gc3RhY2subGVuZ3RoIC0gMTtcbiAgICAgICAgd2hpbGUgKCFjb25zdW1lZCAmJiBzdGFja1BvaW50ZXIgPj0gMCkge1xuICAgICAgICAgIGlmIChzdGFja1tzdGFja1BvaW50ZXJdLmRlbGltaXRlciA9PT0gXCJ+XCIpIHtcbiAgICAgICAgICAgIHdoaWxlIChzdGFja1BvaW50ZXIgPCBzdGFjay5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGVudHJ5ID0gc3RhY2sucG9wKCkhO1xuICAgICAgICAgICAgICBwcm9jZXNzZWQgPSBgJHtlbnRyeS5vdXRwdXR9JHtlbnRyeS5kZWxpbVN0cmluZy5zdWJzdHIoMCwgZW50cnkuY291bnQpfSR7cHJvY2Vzc2VkfWA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHByb2Nlc3NlZCA9IGA8c3BhbiBjbGFzcz1cIlRNTWFya1wiPn5+PC9zcGFuPjxkZWwgY2xhc3M9XCJUTVN0cmlrZXRocm91Z2hcIj4ke3Byb2Nlc3NlZH08L2RlbD48c3BhbiBjbGFzcz1cIlRNTWFya1wiPn5+PC9zcGFuPmA7XG4gICAgICAgICAgICBsZXQgZW50cnkgPSBzdGFjay5wb3AoKSE7XG4gICAgICAgICAgICBwcm9jZXNzZWQgPSBgJHtlbnRyeS5vdXRwdXR9JHtwcm9jZXNzZWR9YDtcbiAgICAgICAgICAgIGNvbnN1bWVkID0gdHJ1ZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3RhY2tQb2ludGVyLS07XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFjb25zdW1lZCkge1xuICAgICAgICAgIHN0YWNrLnB1c2goe1xuICAgICAgICAgICAgZGVsaW1pdGVyOiBcIn5cIixcbiAgICAgICAgICAgIGRlbGltU3RyaW5nOiBcIn5+XCIsXG4gICAgICAgICAgICBjb3VudDogMixcbiAgICAgICAgICAgIG91dHB1dDogcHJvY2Vzc2VkLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHByb2Nlc3NlZCA9IFwiXCI7XG4gICAgICAgIH1cblxuICAgICAgICBvZmZzZXQgKz0gY2FwWzBdLmxlbmd0aDtcbiAgICAgICAgc3RyaW5nID0gc3RyaW5nLnN1YnN0cihjYXBbMF0ubGVuZ3RoKTtcbiAgICAgICAgY29udGludWUgb3V0ZXI7XG4gICAgICB9XG5cbiAgICAgIC8vIFByb2Nlc3MgJ2RlZmF1bHQnIHJ1bGVcbiAgICAgIGNhcCA9IHRoaXMubWVyZ2VkSW5saW5lR3JhbW1hci5kZWZhdWx0LnJlZ2V4cC5leGVjKHN0cmluZyk7XG4gICAgICBpZiAoY2FwKSB7XG4gICAgICAgIHN0cmluZyA9IHN0cmluZy5zdWJzdHIoY2FwWzBdLmxlbmd0aCk7XG4gICAgICAgIG9mZnNldCArPSBjYXBbMF0ubGVuZ3RoO1xuICAgICAgICBwcm9jZXNzZWQgKz0gdGhpcy5tZXJnZWRJbmxpbmVHcmFtbWFyLmRlZmF1bHQucmVwbGFjZW1lbnQucmVwbGFjZSgvXFwkKFsxLTldKS9nLCAoc3RyLCBwMSkgPT4gaHRtbGVzY2FwZShjYXBbcDFdKSk7XG4gICAgICAgIGNvbnRpbnVlIG91dGVyO1xuICAgICAgfVxuICAgICAgdGhyb3cgXCJJbmZpbml0ZSBsb29wIVwiO1xuICAgIH1cblxuICAgIHdoaWxlIChzdGFjay5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IGVudHJ5ID0gc3RhY2sucG9wKCkhO1xuICAgICAgcHJvY2Vzc2VkID0gYCR7ZW50cnkub3V0cHV0fSR7ZW50cnkuZGVsaW1TdHJpbmcuc3Vic3RyKDAsIGVudHJ5LmNvdW50KX0ke3Byb2Nlc3NlZH1gO1xuICAgIH1cblxuICAgIHJldHVybiBwcm9jZXNzZWQ7XG4gIH1cblxuICBwcml2YXRlIGNvbXB1dGVDb2x1bW4oc3RhcnROb2RlOiBOb2RlLCBvZmZzZXQ6IG51bWJlcik6IG51bWJlciB8IG51bGwge1xuICAgIGxldCBub2RlID0gc3RhcnROb2RlO1xuICAgIGxldCBjb2w6IG51bWJlcjtcbiAgICB3aGlsZSAobm9kZSAmJiBub2RlLnBhcmVudE5vZGUgIT09IHRoaXMuZSkge1xuICAgICAgbm9kZSA9IG5vZGUucGFyZW50Tm9kZSE7XG4gICAgfVxuICAgIGlmIChub2RlID09PSBudWxsKSByZXR1cm4gbnVsbDtcblxuICAgIGlmIChzdGFydE5vZGUubm9kZVR5cGUgPT09IE5vZGUuVEVYVF9OT0RFIHx8IG9mZnNldCA9PT0gMCkge1xuICAgICAgY29sID0gb2Zmc2V0O1xuICAgICAgbm9kZSA9IHN0YXJ0Tm9kZTtcbiAgICB9IGVsc2UgaWYgKG9mZnNldCA+IDApIHtcbiAgICAgIG5vZGUgPSBzdGFydE5vZGUuY2hpbGROb2Rlc1tvZmZzZXQgLSAxXTtcbiAgICAgIGNvbCA9IG5vZGUudGV4dENvbnRlbnQhLmxlbmd0aDtcbiAgICB9IGVsc2Uge1xuICAgICAgY29sID0gMDtcbiAgICAgIG5vZGUgPSBzdGFydE5vZGU7XG4gICAgfVxuICAgIHdoaWxlIChub2RlLnBhcmVudE5vZGUgIT09IHRoaXMuZSkge1xuICAgICAgaWYgKG5vZGUucHJldmlvdXNTaWJsaW5nKSB7XG4gICAgICAgIG5vZGUgPSBub2RlLnByZXZpb3VzU2libGluZztcbiAgICAgICAgY29sICs9IG5vZGUudGV4dENvbnRlbnQhLmxlbmd0aDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5vZGUgPSBub2RlLnBhcmVudE5vZGUgYXMgdW5rbm93biBhcyBDaGlsZE5vZGU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjb2w7XG4gIH1cblxuICBwcml2YXRlIGNvbXB1dGVOb2RlQW5kT2Zmc2V0KHJvdzogbnVtYmVyLCBjb2w6IG51bWJlciwgYmluZFJpZ2h0OiBib29sZWFuID0gZmFsc2UpOiB7bm9kZTogTm9kZSwgb2Zmc2V0OiBudW1iZXJ9IHtcbiAgICBpZiAocm93ID49IHRoaXMubGluZUVsZW1lbnRzLmxlbmd0aCkge1xuICAgICAgcm93ID0gdGhpcy5saW5lRWxlbWVudHMubGVuZ3RoIC0gMTtcbiAgICAgIGNvbCA9IHRoaXMubGluZXNbcm93XS5sZW5ndGg7XG4gICAgfVxuICAgIGlmIChjb2wgPiB0aGlzLmxpbmVzW3Jvd10ubGVuZ3RoKSB7XG4gICAgICBjb2wgPSB0aGlzLmxpbmVzW3Jvd10ubGVuZ3RoO1xuICAgIH1cbiAgICBjb25zdCBwYXJlbnROb2RlID0gdGhpcy5saW5lRWxlbWVudHNbcm93XSBhcyBIVE1MRWxlbWVudDtcbiAgICBsZXQgbm9kZSA9IHBhcmVudE5vZGUuZmlyc3RDaGlsZDtcblxuICAgIGxldCBjaGlsZHJlbkNvbXBsZXRlID0gZmFsc2U7XG4gICAgbGV0IHJ2ID0ge1xuICAgICAgbm9kZTogcGFyZW50Tm9kZS5maXJzdENoaWxkID8gcGFyZW50Tm9kZS5maXJzdENoaWxkIDogcGFyZW50Tm9kZSxcbiAgICAgIG9mZnNldDogMCxcbiAgICB9O1xuXG4gICAgd2hpbGUgKG5vZGUgIT09IHBhcmVudE5vZGUpIHtcbiAgICAgIGlmICghY2hpbGRyZW5Db21wbGV0ZSAmJiBub2RlIS5ub2RlVHlwZSA9PT0gTm9kZS5URVhUX05PREUpIHtcbiAgICAgICAgaWYgKG5vZGUhLm5vZGVWYWx1ZSEubGVuZ3RoID49IGNvbCkge1xuICAgICAgICAgIGlmIChiaW5kUmlnaHQgJiYgbm9kZSEubm9kZVZhbHVlIS5sZW5ndGggPT09IGNvbCkge1xuICAgICAgICAgICAgcnYgPSB7IG5vZGU6IG5vZGUhLCBvZmZzZXQ6IGNvbCB9O1xuICAgICAgICAgICAgY29sID0gMDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHsgbm9kZTogbm9kZSEsIG9mZnNldDogY29sIH07XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbCAtPSBub2RlIS5ub2RlVmFsdWUhLmxlbmd0aDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKCFjaGlsZHJlbkNvbXBsZXRlICYmIG5vZGUhLmZpcnN0Q2hpbGQpIHtcbiAgICAgICAgbm9kZSA9IG5vZGUhLmZpcnN0Q2hpbGQ7XG4gICAgICB9IGVsc2UgaWYgKG5vZGUhLm5leHRTaWJsaW5nKSB7XG4gICAgICAgIGNoaWxkcmVuQ29tcGxldGUgPSBmYWxzZTtcbiAgICAgICAgbm9kZSA9IG5vZGUhLm5leHRTaWJsaW5nO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2hpbGRyZW5Db21wbGV0ZSA9IHRydWU7XG4gICAgICAgIG5vZGUgPSBub2RlIS5wYXJlbnROb2RlIGFzIHVua25vd24gYXMgQ2hpbGROb2RlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBydjtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlTGluZUNvbnRlbnRzQW5kRm9ybWF0dGluZygpOiB2b2lkIHtcbiAgICB0aGlzLmNsZWFyRGlydHlGbGFnKCk7XG4gICAgdGhpcy51cGRhdGVMaW5lQ29udGVudHMoKTtcbiAgICB0aGlzLnVwZGF0ZUZvcm1hdHRpbmcoKTtcbiAgfVxuXG4gIHByaXZhdGUgY2xlYXJEaXJ0eUZsYWcoKTogdm9pZCB7XG4gICAgdGhpcy5saW5lRGlydHkgPSBuZXcgQXJyYXkodGhpcy5saW5lcy5sZW5ndGgpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5saW5lRGlydHkubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMubGluZURpcnR5W2ldID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVMaW5lQ29udGVudHMoKTogdm9pZCB7XG4gICAgbGV0IGxpbmVEZWx0YSA9IHRoaXMuZSEuY2hpbGRFbGVtZW50Q291bnQgLSB0aGlzLmxpbmVzLmxlbmd0aDtcbiAgICBpZiAobGluZURlbHRhKSB7XG4gICAgICBsZXQgZmlyc3RDaGFuZ2VkTGluZSA9IDA7XG4gICAgICB3aGlsZSAoXG4gICAgICAgIGZpcnN0Q2hhbmdlZExpbmUgPD0gdGhpcy5saW5lcy5sZW5ndGggJiZcbiAgICAgICAgZmlyc3RDaGFuZ2VkTGluZSA8PSB0aGlzLmxpbmVFbGVtZW50cy5sZW5ndGggJiZcbiAgICAgICAgdGhpcy5saW5lRWxlbWVudHNbZmlyc3RDaGFuZ2VkTGluZV0gJiZcbiAgICAgICAgdGhpcy5saW5lc1tmaXJzdENoYW5nZWRMaW5lXSA9PT0gKHRoaXMubGluZUVsZW1lbnRzW2ZpcnN0Q2hhbmdlZExpbmVdIGFzIEhUTUxFbGVtZW50KS50ZXh0Q29udGVudCAmJlxuICAgICAgICB0aGlzLmxpbmVUeXBlc1tmaXJzdENoYW5nZWRMaW5lXSA9PT0gKHRoaXMubGluZUVsZW1lbnRzW2ZpcnN0Q2hhbmdlZExpbmVdIGFzIEhUTUxFbGVtZW50KS5jbGFzc05hbWVcbiAgICAgICkge1xuICAgICAgICBmaXJzdENoYW5nZWRMaW5lKys7XG4gICAgICB9XG5cbiAgICAgIGxldCBsYXN0Q2hhbmdlZExpbmUgPSAtMTtcbiAgICAgIHdoaWxlIChcbiAgICAgICAgLWxhc3RDaGFuZ2VkTGluZSA8IHRoaXMubGluZXMubGVuZ3RoICYmXG4gICAgICAgIC1sYXN0Q2hhbmdlZExpbmUgPCB0aGlzLmxpbmVFbGVtZW50cy5sZW5ndGggJiZcbiAgICAgICAgdGhpcy5saW5lc1t0aGlzLmxpbmVzLmxlbmd0aCArIGxhc3RDaGFuZ2VkTGluZV0gPT09XG4gICAgICAgICAgKHRoaXMubGluZUVsZW1lbnRzW3RoaXMubGluZUVsZW1lbnRzLmxlbmd0aCArIGxhc3RDaGFuZ2VkTGluZV0gYXMgSFRNTEVsZW1lbnQpLnRleHRDb250ZW50ICYmXG4gICAgICAgIHRoaXMubGluZVR5cGVzW3RoaXMubGluZXMubGVuZ3RoICsgbGFzdENoYW5nZWRMaW5lXSA9PT1cbiAgICAgICAgICAodGhpcy5saW5lRWxlbWVudHNbdGhpcy5saW5lRWxlbWVudHMubGVuZ3RoICsgbGFzdENoYW5nZWRMaW5lXSBhcyBIVE1MRWxlbWVudCkuY2xhc3NOYW1lXG4gICAgICApIHtcbiAgICAgICAgbGFzdENoYW5nZWRMaW5lLS07XG4gICAgICB9XG5cbiAgICAgIGxldCBsaW5lc1RvRGVsZXRlID0gdGhpcy5saW5lcy5sZW5ndGggKyBsYXN0Q2hhbmdlZExpbmUgKyAxIC0gZmlyc3RDaGFuZ2VkTGluZTtcbiAgICAgIGlmIChsaW5lc1RvRGVsZXRlIDwgLWxpbmVEZWx0YSkgbGluZXNUb0RlbGV0ZSA9IC1saW5lRGVsdGE7XG4gICAgICBpZiAobGluZXNUb0RlbGV0ZSA8IDApIGxpbmVzVG9EZWxldGUgPSAwO1xuXG4gICAgICBsZXQgbGluZXNUb0FkZCA9IFtdO1xuICAgICAgZm9yIChsZXQgbCA9IDA7IGwgPCBsaW5lc1RvRGVsZXRlICsgbGluZURlbHRhOyBsKyspIHtcbiAgICAgICAgbGluZXNUb0FkZC5wdXNoKCh0aGlzLmxpbmVFbGVtZW50c1tmaXJzdENoYW5nZWRMaW5lICsgbF0gYXMgSFRNTEVsZW1lbnQpLnRleHRDb250ZW50IHx8IFwiXCIpO1xuICAgICAgfVxuICAgICAgdGhpcy5zcGxpY2VMaW5lcyhmaXJzdENoYW5nZWRMaW5lLCBsaW5lc1RvRGVsZXRlLCBsaW5lc1RvQWRkLCBmYWxzZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAobGV0IGxpbmUgPSAwOyBsaW5lIDwgdGhpcy5saW5lRWxlbWVudHMubGVuZ3RoOyBsaW5lKyspIHtcbiAgICAgICAgbGV0IGUgPSB0aGlzLmxpbmVFbGVtZW50c1tsaW5lXSBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgbGV0IGN0ID0gZS50ZXh0Q29udGVudCB8fCBcIlwiO1xuICAgICAgICBpZiAodGhpcy5saW5lc1tsaW5lXSAhPT0gY3QgfHwgdGhpcy5saW5lVHlwZXNbbGluZV0gIT09IGUuY2xhc3NOYW1lKSB7XG4gICAgICAgICAgdGhpcy5saW5lc1tsaW5lXSA9IGN0O1xuICAgICAgICAgIHRoaXMubGluZVR5cGVzW2xpbmVdID0gZS5jbGFzc05hbWU7XG4gICAgICAgICAgdGhpcy5saW5lRGlydHlbbGluZV0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzcGxpY2VMaW5lcyhcbiAgICBzdGFydExpbmU6IG51bWJlcixcbiAgICBsaW5lc1RvRGVsZXRlOiBudW1iZXIgPSAwLFxuICAgIGxpbmVzVG9JbnNlcnQ6IHN0cmluZ1tdID0gW10sXG4gICAgYWRqdXN0TGluZUVsZW1lbnRzOiBib29sZWFuID0gdHJ1ZVxuICApOiB2b2lkIHtcbiAgICBpZiAoYWRqdXN0TGluZUVsZW1lbnRzKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpbmVzVG9EZWxldGU7IGkrKykge1xuICAgICAgICB0aGlzLmUhLnJlbW92ZUNoaWxkKHRoaXMuZSEuY2hpbGROb2Rlc1tzdGFydExpbmVdKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgaW5zZXJ0ZWRCbGFuayA9IFtdO1xuICAgIGxldCBpbnNlcnRlZERpcnR5ID0gW107XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpbmVzVG9JbnNlcnQubGVuZ3RoOyBpKyspIHtcbiAgICAgIGluc2VydGVkQmxhbmsucHVzaChcIlwiKTtcbiAgICAgIGluc2VydGVkRGlydHkucHVzaCh0cnVlKTtcbiAgICAgIGlmIChhZGp1c3RMaW5lRWxlbWVudHMpIHtcbiAgICAgICAgaWYgKHRoaXMuZSEuY2hpbGROb2Rlc1tzdGFydExpbmVdKVxuICAgICAgICAgIHRoaXMuZSEuaW5zZXJ0QmVmb3JlKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiksIHRoaXMuZSEuY2hpbGROb2Rlc1tzdGFydExpbmVdKTtcbiAgICAgICAgZWxzZSB0aGlzLmUhLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIikpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMubGluZXMuc3BsaWNlKHN0YXJ0TGluZSwgbGluZXNUb0RlbGV0ZSwgLi4ubGluZXNUb0luc2VydCk7XG4gICAgdGhpcy5saW5lVHlwZXMuc3BsaWNlKHN0YXJ0TGluZSwgbGluZXNUb0RlbGV0ZSwgLi4uaW5zZXJ0ZWRCbGFuayk7XG4gICAgdGhpcy5saW5lRGlydHkuc3BsaWNlKHN0YXJ0TGluZSwgbGluZXNUb0RlbGV0ZSwgLi4uaW5zZXJ0ZWREaXJ0eSk7XG4gIH1cblxuICBwcml2YXRlIGZpeE5vZGVIaWVyYXJjaHkoKTogdm9pZCB7XG4gICAgY29uc3Qgb3JpZ2luYWxDaGlsZHJlbiA9IEFycmF5LmZyb20odGhpcy5lIS5jaGlsZE5vZGVzKTtcblxuICAgIGNvbnN0IHJlcGxhY2VDaGlsZCA9IChjaGlsZDogTm9kZSwgLi4ubmV3Q2hpbGRyZW46IE5vZGVbXSkgPT4ge1xuICAgICAgY29uc3QgcGFyZW50ID0gY2hpbGQucGFyZW50RWxlbWVudCE7XG4gICAgICBjb25zdCBuZXh0U2libGluZyA9IGNoaWxkLm5leHRTaWJsaW5nO1xuICAgICAgcGFyZW50LnJlbW92ZUNoaWxkKGNoaWxkKTtcbiAgICAgIG5ld0NoaWxkcmVuLmZvckVhY2goKG5ld0NoaWxkKSA9PlxuICAgICAgICBuZXh0U2libGluZyA/IHBhcmVudC5pbnNlcnRCZWZvcmUobmV3Q2hpbGQsIG5leHRTaWJsaW5nKSA6IHBhcmVudC5hcHBlbmRDaGlsZChuZXdDaGlsZClcbiAgICAgICk7XG4gICAgfTtcblxuICAgIG9yaWdpbmFsQ2hpbGRyZW4uZm9yRWFjaCgoY2hpbGQpID0+IHtcbiAgICAgIGlmIChjaGlsZC5ub2RlVHlwZSAhPT0gTm9kZS5FTEVNRU5UX05PREUgfHwgKGNoaWxkIGFzIEhUTUxFbGVtZW50KS50YWdOYW1lICE9PSBcIkRJVlwiKSB7XG4gICAgICAgIGNvbnN0IGRpdldyYXBwZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgICByZXBsYWNlQ2hpbGQoY2hpbGQsIGRpdldyYXBwZXIpO1xuICAgICAgICBkaXZXcmFwcGVyLmFwcGVuZENoaWxkKGNoaWxkKTtcbiAgICAgIH0gZWxzZSBpZiAoY2hpbGQuY2hpbGROb2Rlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgY2hpbGQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImJyXCIpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGdyYW5kQ2hpbGRyZW4gPSBBcnJheS5mcm9tKGNoaWxkLmNoaWxkTm9kZXMpO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgZ3JhbmRDaGlsZHJlbi5zb21lKFxuICAgICAgICAgICAgKGdyYW5kQ2hpbGQpID0+XG4gICAgICAgICAgICAgIGdyYW5kQ2hpbGQubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFICYmIChncmFuZENoaWxkIGFzIEhUTUxFbGVtZW50KS50YWdOYW1lID09PSBcIkRJVlwiXG4gICAgICAgICAgKVxuICAgICAgICApIHtcbiAgICAgICAgICByZXR1cm4gcmVwbGFjZUNoaWxkKGNoaWxkLCAuLi5ncmFuZENoaWxkcmVuKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBwYXJzZUxpbmtPckltYWdlKG9yaWdpbmFsU3RyaW5nOiBzdHJpbmcsIGlzSW1hZ2U6IGJvb2xlYW4pOiB7b3V0cHV0OiBzdHJpbmcsIGNoYXJDb3VudDogbnVtYmVyfSB8IGZhbHNlIHtcbiAgICAvLyBTa2lwIHRoZSBvcGVuaW5nIGJyYWNrZXRcbiAgICBsZXQgdGV4dE9mZnNldCA9IGlzSW1hZ2UgPyAyIDogMTtcbiAgICBsZXQgb3BlbmVyID0gb3JpZ2luYWxTdHJpbmcuc3Vic3RyKDAsIHRleHRPZmZzZXQpO1xuICAgIGxldCB0eXBlID0gaXNJbWFnZSA/IFwiVE1JbWFnZVwiIDogXCJUTUxpbmtcIjtcbiAgICBsZXQgY3VycmVudE9mZnNldCA9IHRleHRPZmZzZXQ7XG5cbiAgICBsZXQgYnJhY2tldExldmVsID0gMTtcbiAgICBsZXQgbGlua1RleHQ6IHN0cmluZyB8IGZhbHNlID0gZmFsc2U7XG4gICAgbGV0IGxpbmtSZWY6IHN0cmluZyB8IGZhbHNlID0gZmFsc2U7XG4gICAgbGV0IGxpbmtMYWJlbDogc3RyaW5nW10gPSBbXTtcbiAgICBsZXQgbGlua0RldGFpbHM6IHN0cmluZ1tdID0gW107XG5cbiAgICB0ZXh0T3V0ZXI6IHdoaWxlIChcbiAgICAgIGN1cnJlbnRPZmZzZXQgPCBvcmlnaW5hbFN0cmluZy5sZW5ndGggJiZcbiAgICAgIGxpbmtUZXh0ID09PSBmYWxzZVxuICAgICkge1xuICAgICAgbGV0IHN0cmluZyA9IG9yaWdpbmFsU3RyaW5nLnN1YnN0cihjdXJyZW50T2Zmc2V0KTtcblxuICAgICAgLy8gQ2FwdHVyZSBhbnkgZXNjYXBlcyBhbmQgY29kZSBibG9ja3MgYXQgY3VycmVudCBwb3NpdGlvblxuICAgICAgZm9yIChsZXQgcnVsZSBvZiBbXCJlc2NhcGVcIiwgXCJjb2RlXCIsIFwiYXV0b2xpbmtcIiwgXCJodG1sXCJdKSB7XG4gICAgICAgIGxldCBjYXAgPSB0aGlzLm1lcmdlZElubGluZUdyYW1tYXJbcnVsZV0ucmVnZXhwLmV4ZWMoc3RyaW5nKTtcbiAgICAgICAgaWYgKGNhcCkge1xuICAgICAgICAgIGN1cnJlbnRPZmZzZXQgKz0gY2FwWzBdLmxlbmd0aDtcbiAgICAgICAgICBjb250aW51ZSB0ZXh0T3V0ZXI7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgZm9yIGltYWdlXG4gICAgICBpZiAoc3RyaW5nLm1hdGNoKHRoaXMubWVyZ2VkSW5saW5lR3JhbW1hci5pbWFnZU9wZW4ucmVnZXhwKSkge1xuICAgICAgICBicmFja2V0TGV2ZWwrKztcbiAgICAgICAgY3VycmVudE9mZnNldCArPSAyO1xuICAgICAgICBjb250aW51ZSB0ZXh0T3V0ZXI7XG4gICAgICB9XG5cbiAgICAgIC8vIENoZWNrIGZvciBsaW5rXG4gICAgICBpZiAoc3RyaW5nLm1hdGNoKHRoaXMubWVyZ2VkSW5saW5lR3JhbW1hci5saW5rT3Blbi5yZWdleHApKSB7XG4gICAgICAgIGJyYWNrZXRMZXZlbCsrO1xuICAgICAgICBpZiAoIWlzSW1hZ2UpIHtcbiAgICAgICAgICBpZiAodGhpcy5wYXJzZUxpbmtPckltYWdlKHN0cmluZywgZmFsc2UpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGN1cnJlbnRPZmZzZXQgKz0gMTtcbiAgICAgICAgY29udGludWUgdGV4dE91dGVyO1xuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayBmb3IgY2xvc2luZyBicmFja2V0XG4gICAgICBpZiAoc3RyaW5nLm1hdGNoKC9eXFxdLykpIHtcbiAgICAgICAgYnJhY2tldExldmVsLS07XG4gICAgICAgIGlmIChicmFja2V0TGV2ZWwgPT09IDApIHtcbiAgICAgICAgICBsaW5rVGV4dCA9IG9yaWdpbmFsU3RyaW5nLnN1YnN0cih0ZXh0T2Zmc2V0LCBjdXJyZW50T2Zmc2V0IC0gdGV4dE9mZnNldCk7XG4gICAgICAgICAgY3VycmVudE9mZnNldCsrO1xuICAgICAgICAgIGNvbnRpbnVlIHRleHRPdXRlcjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBOb3RoaW5nIG1hdGNoZXMsIHByb2NlZWQgdG8gbmV4dCBjaGFyXG4gICAgICBjdXJyZW50T2Zmc2V0Kys7XG4gICAgfVxuXG4gICAgLy8gRGlkIHdlIGZpbmQgYSBsaW5rIHRleHQ/XG4gICAgaWYgKGxpbmtUZXh0ID09PSBmYWxzZSkgcmV0dXJuIGZhbHNlO1xuXG4gICAgLy8gQ2hlY2sgd2hhdCB0eXBlIG9mIGxpbmsgdGhpcyBpc1xuICAgIGxldCBuZXh0Q2hhciA9IGN1cnJlbnRPZmZzZXQgPCBvcmlnaW5hbFN0cmluZy5sZW5ndGggPyBvcmlnaW5hbFN0cmluZy5zdWJzdHIoY3VycmVudE9mZnNldCwgMSkgOiBcIlwiO1xuXG4gICAgLy8gUkVGRVJFTkNFIExJTktTXG4gICAgaWYgKG5leHRDaGFyID09PSBcIltcIikge1xuICAgICAgbGV0IHN0cmluZyA9IG9yaWdpbmFsU3RyaW5nLnN1YnN0cihjdXJyZW50T2Zmc2V0KTtcbiAgICAgIGxldCBjYXAgPSB0aGlzLm1lcmdlZElubGluZUdyYW1tYXIubGlua0xhYmVsLnJlZ2V4cC5leGVjKHN0cmluZyk7XG4gICAgICBpZiAoY2FwKSB7XG4gICAgICAgIGN1cnJlbnRPZmZzZXQgKz0gY2FwWzBdLmxlbmd0aDtcbiAgICAgICAgbGlua0xhYmVsLnB1c2goY2FwWzFdLCBjYXBbMl0sIGNhcFszXSk7XG4gICAgICAgIGlmIChjYXBbdGhpcy5tZXJnZWRJbmxpbmVHcmFtbWFyLmxpbmtMYWJlbC5sYWJlbFBsYWNlaG9sZGVyIV0pIHtcbiAgICAgICAgICBsaW5rUmVmID0gY2FwW3RoaXMubWVyZ2VkSW5saW5lR3JhbW1hci5saW5rTGFiZWwubGFiZWxQbGFjZWhvbGRlciFdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxpbmtSZWYgPSBsaW5rVGV4dC50cmltKCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKG5leHRDaGFyICE9PSBcIihcIikge1xuICAgICAgLy8gU2hvcnRjdXQgcmVmIGxpbmtcbiAgICAgIGxpbmtSZWYgPSBsaW5rVGV4dC50cmltKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIElOTElORSBMSU5LU1xuICAgICAgY3VycmVudE9mZnNldCsrO1xuICAgICAgbGV0IHBhcmVudGhlc2lzTGV2ZWwgPSAxO1xuXG4gICAgICBpbmxpbmVPdXRlcjogd2hpbGUgKGN1cnJlbnRPZmZzZXQgPCBvcmlnaW5hbFN0cmluZy5sZW5ndGggJiYgcGFyZW50aGVzaXNMZXZlbCA+IDApIHtcbiAgICAgICAgbGV0IHN0cmluZyA9IG9yaWdpbmFsU3RyaW5nLnN1YnN0cihjdXJyZW50T2Zmc2V0KTtcblxuICAgICAgICAvLyBQcm9jZXNzIHdoaXRlc3BhY2VcbiAgICAgICAgbGV0IGNhcCA9IC9eXFxzKy8uZXhlYyhzdHJpbmcpO1xuICAgICAgICBpZiAoY2FwKSB7XG4gICAgICAgICAgc3dpdGNoIChsaW5rRGV0YWlscy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgbGlua0RldGFpbHMucHVzaChjYXBbMF0pO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgbGlua0RldGFpbHMucHVzaChjYXBbMF0pO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgaWYgKGxpbmtEZXRhaWxzWzBdLm1hdGNoKC88LykpIHtcbiAgICAgICAgICAgICAgICBsaW5rRGV0YWlsc1sxXSA9IGxpbmtEZXRhaWxzWzFdLmNvbmNhdChjYXBbMF0pO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChwYXJlbnRoZXNpc0xldmVsICE9PSAxKSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgbGlua0RldGFpbHMucHVzaChcIlwiKTtcbiAgICAgICAgICAgICAgICBsaW5rRGV0YWlscy5wdXNoKGNhcFswXSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgIGxpbmtEZXRhaWxzLnB1c2goY2FwWzBdKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgbGlua0RldGFpbHMucHVzaChcIlwiKTtcbiAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgbGlua0RldGFpbHNbNV0gPSBsaW5rRGV0YWlsc1s1XS5jb25jYXQoY2FwWzBdKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgICAgIGxpbmtEZXRhaWxzWzZdID0gbGlua0RldGFpbHNbNl0uY29uY2F0KGNhcFswXSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjdXJyZW50T2Zmc2V0ICs9IGNhcFswXS5sZW5ndGg7XG4gICAgICAgICAgY29udGludWUgaW5saW5lT3V0ZXI7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBQcm9jZXNzIGJhY2tzbGFzaCBlc2NhcGVzXG4gICAgICAgIGNhcCA9IHRoaXMubWVyZ2VkSW5saW5lR3JhbW1hci5lc2NhcGUucmVnZXhwLmV4ZWMoc3RyaW5nKTtcbiAgICAgICAgaWYgKGNhcCkge1xuICAgICAgICAgIHN3aXRjaCAobGlua0RldGFpbHMubGVuZ3RoKSB7XG4gICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgIGxpbmtEZXRhaWxzLnB1c2goXCJcIik7XG4gICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgIGxpbmtEZXRhaWxzLnB1c2goY2FwWzBdKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgIGxpbmtEZXRhaWxzWzFdID0gbGlua0RldGFpbHNbMV0uY29uY2F0KGNhcFswXSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgbGlua0RldGFpbHMucHVzaChcIlwiKTtcbiAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgbGlua0RldGFpbHNbNV0gPSBsaW5rRGV0YWlsc1s1XS5jb25jYXQoY2FwWzBdKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIGN1cnJlbnRPZmZzZXQgKz0gY2FwWzBdLmxlbmd0aDtcbiAgICAgICAgICBjb250aW51ZSBpbmxpbmVPdXRlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFByb2Nlc3Mgb3BlbmluZyBhbmdsZSBicmFja2V0XG4gICAgICAgIGlmIChsaW5rRGV0YWlscy5sZW5ndGggPCAyICYmIHN0cmluZy5tYXRjaCgvXjwvKSkge1xuICAgICAgICAgIGlmIChsaW5rRGV0YWlscy5sZW5ndGggPT09IDApIGxpbmtEZXRhaWxzLnB1c2goXCJcIik7XG4gICAgICAgICAgbGlua0RldGFpbHNbMF0gPSBsaW5rRGV0YWlsc1swXS5jb25jYXQoXCI8XCIpO1xuICAgICAgICAgIGN1cnJlbnRPZmZzZXQrKztcbiAgICAgICAgICBjb250aW51ZSBpbmxpbmVPdXRlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFByb2Nlc3MgY2xvc2luZyBhbmdsZSBicmFja2V0XG4gICAgICAgIGlmICgobGlua0RldGFpbHMubGVuZ3RoID09PSAxIHx8IGxpbmtEZXRhaWxzLmxlbmd0aCA9PT0gMikgJiYgc3RyaW5nLm1hdGNoKC9ePi8pKSB7XG4gICAgICAgICAgaWYgKGxpbmtEZXRhaWxzLmxlbmd0aCA9PT0gMSkgbGlua0RldGFpbHMucHVzaChcIlwiKTtcbiAgICAgICAgICBsaW5rRGV0YWlscy5wdXNoKFwiPlwiKTtcbiAgICAgICAgICBjdXJyZW50T2Zmc2V0Kys7XG4gICAgICAgICAgY29udGludWUgaW5saW5lT3V0ZXI7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBQcm9jZXNzIG5vbi1wYXJlbnRoZXNpcyBkZWxpbWl0ZXIgZm9yIHRpdGxlXG4gICAgICAgIGNhcCA9IC9eW1wiJ10vLmV4ZWMoc3RyaW5nKTtcbiAgICAgICAgaWYgKGNhcCAmJiAobGlua0RldGFpbHMubGVuZ3RoID09PSAwIHx8IGxpbmtEZXRhaWxzLmxlbmd0aCA9PT0gMSB8fCBsaW5rRGV0YWlscy5sZW5ndGggPT09IDQpKSB7XG4gICAgICAgICAgd2hpbGUgKGxpbmtEZXRhaWxzLmxlbmd0aCA8IDQpIGxpbmtEZXRhaWxzLnB1c2goXCJcIik7XG4gICAgICAgICAgbGlua0RldGFpbHMucHVzaChjYXBbMF0pO1xuICAgICAgICAgIGN1cnJlbnRPZmZzZXQrKztcbiAgICAgICAgICBjb250aW51ZSBpbmxpbmVPdXRlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjYXAgJiYgKGxpbmtEZXRhaWxzLmxlbmd0aCA9PT0gNSB8fCBsaW5rRGV0YWlscy5sZW5ndGggPT09IDYpICYmIGxpbmtEZXRhaWxzWzRdID09PSBjYXBbMF0pIHtcbiAgICAgICAgICBpZiAobGlua0RldGFpbHMubGVuZ3RoID09PSA1KSBsaW5rRGV0YWlscy5wdXNoKFwiXCIpO1xuICAgICAgICAgIGxpbmtEZXRhaWxzLnB1c2goY2FwWzBdKTtcbiAgICAgICAgICBjdXJyZW50T2Zmc2V0Kys7XG4gICAgICAgICAgY29udGludWUgaW5saW5lT3V0ZXI7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBQcm9jZXNzIG9wZW5pbmcgcGFyZW50aGVzaXNcbiAgICAgICAgaWYgKHN0cmluZy5tYXRjaCgvXlxcKC8pKSB7XG4gICAgICAgICAgc3dpdGNoIChsaW5rRGV0YWlscy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgbGlua0RldGFpbHMucHVzaChcIlwiKTtcbiAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgbGlua0RldGFpbHMucHVzaChcIlwiKTtcbiAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgbGlua0RldGFpbHNbMV0gPSBsaW5rRGV0YWlsc1sxXS5jb25jYXQoXCIoXCIpO1xuICAgICAgICAgICAgICBpZiAoIWxpbmtEZXRhaWxzWzBdLm1hdGNoKC88JC8pKSBwYXJlbnRoZXNpc0xldmVsKys7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICBsaW5rRGV0YWlscy5wdXNoKFwiXCIpO1xuICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICBsaW5rRGV0YWlscy5wdXNoKFwiKFwiKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgIGxpbmtEZXRhaWxzLnB1c2goXCJcIik7XG4gICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICAgIGlmIChsaW5rRGV0YWlsc1s0XSA9PT0gXCIoXCIpIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgbGlua0RldGFpbHNbNV0gPSBsaW5rRGV0YWlsc1s1XS5jb25jYXQoXCIoXCIpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY3VycmVudE9mZnNldCsrO1xuICAgICAgICAgIGNvbnRpbnVlIGlubGluZU91dGVyO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUHJvY2VzcyBjbG9zaW5nIHBhcmVudGhlc2lzXG4gICAgICAgIGlmIChzdHJpbmcubWF0Y2goL15cXCkvKSkge1xuICAgICAgICAgIGlmIChsaW5rRGV0YWlscy5sZW5ndGggPD0gMikge1xuICAgICAgICAgICAgd2hpbGUgKGxpbmtEZXRhaWxzLmxlbmd0aCA8IDIpIGxpbmtEZXRhaWxzLnB1c2goXCJcIik7XG4gICAgICAgICAgICBpZiAoIWxpbmtEZXRhaWxzWzBdLm1hdGNoKC88JC8pKSBwYXJlbnRoZXNpc0xldmVsLS07XG4gICAgICAgICAgICBpZiAocGFyZW50aGVzaXNMZXZlbCA+IDApIHtcbiAgICAgICAgICAgICAgbGlua0RldGFpbHNbMV0gPSBsaW5rRGV0YWlsc1sxXS5jb25jYXQoXCIpXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAobGlua0RldGFpbHMubGVuZ3RoID09PSA1IHx8IGxpbmtEZXRhaWxzLmxlbmd0aCA9PT0gNikge1xuICAgICAgICAgICAgaWYgKGxpbmtEZXRhaWxzWzRdID09PSBcIihcIikge1xuICAgICAgICAgICAgICBpZiAobGlua0RldGFpbHMubGVuZ3RoID09PSA1KSBsaW5rRGV0YWlscy5wdXNoKFwiXCIpO1xuICAgICAgICAgICAgICBsaW5rRGV0YWlscy5wdXNoKFwiKVwiKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGlmIChsaW5rRGV0YWlscy5sZW5ndGggPT09IDUpIGxpbmtEZXRhaWxzLnB1c2goXCIpXCIpO1xuICAgICAgICAgICAgICBlbHNlIGxpbmtEZXRhaWxzWzVdID0gbGlua0RldGFpbHNbNV0uY29uY2F0KFwiKVwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGFyZW50aGVzaXNMZXZlbC0tO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChwYXJlbnRoZXNpc0xldmVsID09PSAwKSB7XG4gICAgICAgICAgICB3aGlsZSAobGlua0RldGFpbHMubGVuZ3RoIDwgNykgbGlua0RldGFpbHMucHVzaChcIlwiKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjdXJyZW50T2Zmc2V0Kys7XG4gICAgICAgICAgY29udGludWUgaW5saW5lT3V0ZXI7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBBbnkgb2xkIGNoYXJhY3RlclxuICAgICAgICBjYXAgPSAvXi4vLmV4ZWMoc3RyaW5nKTtcbiAgICAgICAgaWYgKGNhcCkge1xuICAgICAgICAgIHN3aXRjaCAobGlua0RldGFpbHMubGVuZ3RoKSB7XG4gICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgIGxpbmtEZXRhaWxzLnB1c2goXCJcIik7XG4gICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgIGxpbmtEZXRhaWxzLnB1c2goY2FwWzBdKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgIGxpbmtEZXRhaWxzWzFdID0gbGlua0RldGFpbHNbMV0uY29uY2F0KGNhcFswXSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgbGlua0RldGFpbHMucHVzaChcIlwiKTtcbiAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgbGlua0RldGFpbHNbNV0gPSBsaW5rRGV0YWlsc1s1XS5jb25jYXQoY2FwWzBdKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIGN1cnJlbnRPZmZzZXQgKz0gY2FwWzBdLmxlbmd0aDtcbiAgICAgICAgICBjb250aW51ZSBpbmxpbmVPdXRlcjtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBcIkluZmluaXRlIGxvb3BcIjtcbiAgICAgIH1cbiAgICAgIGlmIChwYXJlbnRoZXNpc0xldmVsID4gMCkgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChsaW5rUmVmICE9PSBmYWxzZSkge1xuICAgICAgLy8gUmVmZXJlbmNlIGxpbms7IGNoZWNrIHRoYXQgbGlua1JlZiBpcyB2YWxpZFxuICAgICAgbGV0IHZhbGlkID0gZmFsc2U7XG4gICAgICBmb3IgKGxldCBsYWJlbCBvZiB0aGlzLmxpbmtMYWJlbHMpIHtcbiAgICAgICAgaWYgKGxhYmVsID09PSBsaW5rUmVmKSB7XG4gICAgICAgICAgdmFsaWQgPSB0cnVlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBsZXQgbGFiZWxDbGFzcyA9IHZhbGlkID8gXCJUTUxpbmtMYWJlbCBUTUxpbmtMYWJlbF9WYWxpZFwiIDogXCJUTUxpbmtMYWJlbCBUTUxpbmtMYWJlbF9JbnZhbGlkXCI7XG4gICAgICBsZXQgb3V0cHV0ID0gYDxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya18ke3R5cGV9XCI+JHtvcGVuZXJ9PC9zcGFuPjxzcGFuIGNsYXNzPVwiJHt0eXBlfSAke1xuICAgICAgICBsaW5rTGFiZWwubGVuZ3RoIDwgMyB8fCAhbGlua0xhYmVsWzFdID8gbGFiZWxDbGFzcyA6IFwiXCJcbiAgICAgIH1cIj4ke3RoaXMucHJvY2Vzc0lubGluZVN0eWxlcyhsaW5rVGV4dCl9PC9zcGFuPjxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya18ke3R5cGV9XCI+XTwvc3Bhbj5gO1xuXG4gICAgICBpZiAobGlua0xhYmVsLmxlbmd0aCA+PSAzKSB7XG4gICAgICAgIG91dHB1dCA9IG91dHB1dC5jb25jYXQoXG4gICAgICAgICAgYDxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya18ke3R5cGV9XCI+JHtsaW5rTGFiZWxbMF19PC9zcGFuPmAsXG4gICAgICAgICAgYDxzcGFuIGNsYXNzPVwiJHtsYWJlbENsYXNzfVwiPiR7bGlua0xhYmVsWzFdfTwvc3Bhbj5gLFxuICAgICAgICAgIGA8c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfJHt0eXBlfVwiPiR7bGlua0xhYmVsWzJdfTwvc3Bhbj5gXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBvdXRwdXQ6IG91dHB1dCxcbiAgICAgICAgY2hhckNvdW50OiBjdXJyZW50T2Zmc2V0LFxuICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKGxpbmtEZXRhaWxzLmxlbmd0aCA+IDApIHtcbiAgICAgIC8vIElubGluZSBsaW5rXG4gICAgICB3aGlsZSAobGlua0RldGFpbHMubGVuZ3RoIDwgNykge1xuICAgICAgICBsaW5rRGV0YWlscy5wdXNoKFwiXCIpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBvdXRwdXQ6IGA8c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfJHt0eXBlfVwiPiR7b3BlbmVyfTwvc3Bhbj48c3BhbiBjbGFzcz1cIiR7dHlwZX1cIj4ke3RoaXMucHJvY2Vzc0lubGluZVN0eWxlcyhcbiAgICAgICAgICBsaW5rVGV4dFxuICAgICAgICApfTwvc3Bhbj48c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfJHt0eXBlfVwiPl0oJHtcbiAgICAgICAgICBsaW5rRGV0YWlsc1swXVxuICAgICAgICB9PC9zcGFuPjxzcGFuIGNsYXNzPVwiJHt0eXBlfURlc3RpbmF0aW9uXCI+JHtcbiAgICAgICAgICBsaW5rRGV0YWlsc1sxXVxuICAgICAgICB9PC9zcGFuPjxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya18ke3R5cGV9XCI+JHtsaW5rRGV0YWlsc1syXX0ke1xuICAgICAgICAgIGxpbmtEZXRhaWxzWzNdXG4gICAgICAgIH0ke2xpbmtEZXRhaWxzWzRdfTwvc3Bhbj48c3BhbiBjbGFzcz1cIiR7dHlwZX1UaXRsZVwiPiR7XG4gICAgICAgICAgbGlua0RldGFpbHNbNV1cbiAgICAgICAgfTwvc3Bhbj48c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfJHt0eXBlfVwiPiR7bGlua0RldGFpbHNbNl19KTwvc3Bhbj5gLFxuICAgICAgICBjaGFyQ291bnQ6IGN1cnJlbnRPZmZzZXQsXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgY29tcHV0ZUNvbW1vbkFuY2VzdG9yKG5vZGUxOiBOb2RlIHwgbnVsbCwgbm9kZTI6IE5vZGUgfCBudWxsKTogTm9kZSB8IG51bGwge1xuICAgIGlmICghbm9kZTEgfHwgIW5vZGUyKSByZXR1cm4gbnVsbDtcbiAgICBpZiAobm9kZTEgPT09IG5vZGUyKSByZXR1cm4gbm9kZTE7XG4gICAgY29uc3QgYW5jZXN0cnkgPSAobm9kZTogTm9kZSkgPT4ge1xuICAgICAgbGV0IGFuY2VzdHJ5ID0gW107XG4gICAgICB3aGlsZSAobm9kZSkge1xuICAgICAgICBhbmNlc3RyeS51bnNoaWZ0KG5vZGUpO1xuICAgICAgICBub2RlID0gbm9kZS5wYXJlbnROb2RlITtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhbmNlc3RyeTtcbiAgICB9O1xuXG4gICAgY29uc3QgYW5jZXN0cnkxID0gYW5jZXN0cnkobm9kZTEpO1xuICAgIGNvbnN0IGFuY2VzdHJ5MiA9IGFuY2VzdHJ5KG5vZGUyKTtcblxuICAgIGlmIChhbmNlc3RyeTFbMF0gIT09IGFuY2VzdHJ5MlswXSkgcmV0dXJuIG51bGw7XG4gICAgbGV0IGk7XG4gICAgZm9yIChpID0gMDsgYW5jZXN0cnkxW2ldID09PSBhbmNlc3RyeTJbaV07IGkrKyk7XG4gICAgcmV0dXJuIGFuY2VzdHJ5MVtpIC0gMV07XG4gIH1cblxuICBwcml2YXRlIGNvbXB1dGVFbmNsb3NpbmdNYXJrdXBOb2RlKGZvY3VzOiBQb3NpdGlvbiwgYW5jaG9yOiBQb3NpdGlvbiB8IG51bGwsIGNsYXNzTmFtZTogc3RyaW5nKTogTm9kZSB8IG51bGwge1xuICAgIGxldCBub2RlID0gbnVsbDtcbiAgICBpZiAoIWZvY3VzKSByZXR1cm4gbnVsbDtcbiAgICBpZiAoIWFuY2hvcikge1xuICAgICAgY29uc3Qgc2VsID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICAgICAgaWYgKCFzZWwgfHwgIXNlbC5mb2N1c05vZGUpIHJldHVybiBudWxsO1xuICAgICAgbm9kZSA9IHNlbC5mb2N1c05vZGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChmb2N1cy5yb3cgIT09IGFuY2hvci5yb3cpIHJldHVybiBudWxsO1xuICAgICAgY29uc3Qgc2VsID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICAgICAgaWYgKCFzZWwpIHJldHVybiBudWxsO1xuICAgICAgbm9kZSA9IHRoaXMuY29tcHV0ZUNvbW1vbkFuY2VzdG9yKHNlbC5mb2N1c05vZGUsIHNlbC5hbmNob3JOb2RlKTtcbiAgICB9XG4gICAgaWYgKCFub2RlKSByZXR1cm4gbnVsbDtcbiAgICB3aGlsZSAobm9kZSAhPT0gdGhpcy5lKSB7XG4gICAgICBpZiAoKG5vZGUgYXMgSFRNTEVsZW1lbnQpLmNsYXNzTmFtZSAmJiAobm9kZSBhcyBIVE1MRWxlbWVudCkuY2xhc3NOYW1lLmluY2x1ZGVzKGNsYXNzTmFtZSkpIHJldHVybiBub2RlO1xuICAgICAgbm9kZSA9IG5vZGUucGFyZW50Tm9kZSE7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcHVibGljIGdldENvbW1hbmRTdGF0ZShmb2N1czogUG9zaXRpb24gfCBudWxsID0gbnVsbCwgYW5jaG9yOiBQb3NpdGlvbiB8IG51bGwgPSBudWxsKTogUmVjb3JkPHN0cmluZywgYm9vbGVhbiB8IG51bGw+IHtcbiAgICBsZXQgY29tbWFuZFN0YXRlOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuIHwgbnVsbD4gPSB7fTtcbiAgICBpZiAoIWZvY3VzKSBmb2N1cyA9IHRoaXMuZ2V0U2VsZWN0aW9uKGZhbHNlKTtcbiAgICBpZiAoIWFuY2hvcikgYW5jaG9yID0gdGhpcy5nZXRTZWxlY3Rpb24odHJ1ZSk7XG4gICAgaWYgKCFmb2N1cykge1xuICAgICAgZm9yIChsZXQgY21kIGluIGNvbW1hbmRzKSB7XG4gICAgICAgIGNvbW1hbmRTdGF0ZVtjbWRdID0gbnVsbDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjb21tYW5kU3RhdGU7XG4gICAgfVxuICAgIGlmICghYW5jaG9yKSBhbmNob3IgPSBmb2N1cztcblxuICAgIGxldCBzdGFydDogUG9zaXRpb24sIGVuZDogUG9zaXRpb247XG4gICAgaWYgKGFuY2hvci5yb3cgPCBmb2N1cy5yb3cgfHwgKGFuY2hvci5yb3cgPT09IGZvY3VzLnJvdyAmJiBhbmNob3IuY29sIDwgZm9jdXMuY29sKSkge1xuICAgICAgc3RhcnQgPSBhbmNob3I7XG4gICAgICBlbmQgPSBmb2N1cztcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhcnQgPSBmb2N1cztcbiAgICAgIGVuZCA9IGFuY2hvcjtcbiAgICB9XG4gICAgaWYgKGVuZC5yb3cgPiBzdGFydC5yb3cgJiYgZW5kLmNvbCA9PT0gMCkge1xuICAgICAgZW5kLnJvdy0tO1xuICAgICAgZW5kLmNvbCA9IHRoaXMubGluZXNbZW5kLnJvd10ubGVuZ3RoO1xuICAgIH1cblxuICAgIGZvciAobGV0IGNtZCBpbiBjb21tYW5kcykge1xuICAgICAgaWYgKGNvbW1hbmRzW2NtZF0udHlwZSA9PT0gXCJpbmxpbmVcIikge1xuICAgICAgICBpZiAoIWZvY3VzIHx8IGZvY3VzLnJvdyAhPT0gYW5jaG9yIS5yb3cgfHwgIXRoaXMuaXNJbmxpbmVGb3JtYXR0aW5nQWxsb3dlZCgpKSB7XG4gICAgICAgICAgY29tbWFuZFN0YXRlW2NtZF0gPSBudWxsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbW1hbmRTdGF0ZVtjbWRdID1cbiAgICAgICAgICAgICEhdGhpcy5jb21wdXRlRW5jbG9zaW5nTWFya3VwTm9kZShmb2N1cywgYW5jaG9yLCBjb21tYW5kc1tjbWRdLmNsYXNzTmFtZSkgfHxcbiAgICAgICAgICAgIChmb2N1cy5jb2wgPT09IGFuY2hvciEuY29sICYmXG4gICAgICAgICAgICAgICEhdGhpcy5saW5lc1tmb2N1cy5yb3ddLnN1YnN0cigwLCBmb2N1cy5jb2wpLm1hdGNoKGNvbW1hbmRzW2NtZF0udW5zZXQucHJlUGF0dGVybikgJiZcbiAgICAgICAgICAgICAgISF0aGlzLmxpbmVzW2ZvY3VzLnJvd10uc3Vic3RyKGZvY3VzLmNvbCkubWF0Y2goY29tbWFuZHNbY21kXS51bnNldC5wb3N0UGF0dGVybikpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoY29tbWFuZHNbY21kXS50eXBlID09PSBcImxpbmVcIikge1xuICAgICAgICBpZiAoIWZvY3VzKSB7XG4gICAgICAgICAgY29tbWFuZFN0YXRlW2NtZF0gPSBudWxsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxldCBzdGF0ZTogYm9vbGVhbiB8IG51bGwgPSB0aGlzLmxpbmVUeXBlc1tzdGFydC5yb3ddID09PSBjb21tYW5kc1tjbWRdLmNsYXNzTmFtZTtcbiAgICAgICAgICBmb3IgKGxldCBsaW5lID0gc3RhcnQucm93OyBsaW5lIDw9IGVuZC5yb3c7IGxpbmUrKykge1xuICAgICAgICAgICAgaWYgKCh0aGlzLmxpbmVUeXBlc1tsaW5lXSA9PT0gY29tbWFuZHNbY21kXS5jbGFzc05hbWUpICE9PSBzdGF0ZSkge1xuICAgICAgICAgICAgICBzdGF0ZSA9IG51bGw7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBjb21tYW5kU3RhdGVbY21kXSA9IHN0YXRlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjb21tYW5kU3RhdGU7XG4gIH1cblxuICBwdWJsaWMgc2V0Q29tbWFuZFN0YXRlKGNvbW1hbmQ6IHN0cmluZywgc3RhdGU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaXNSZXN0b3JpbmdIaXN0b3J5KSB0aGlzLnB1c2hIaXN0b3J5KCk7XG4gICAgaWYgKGNvbW1hbmRzW2NvbW1hbmRdLnR5cGUgPT09IFwiaW5saW5lXCIpIHtcbiAgICAgIGxldCBhbmNob3IgPSB0aGlzLmdldFNlbGVjdGlvbih0cnVlKTtcbiAgICAgIGxldCBmb2N1cyA9IHRoaXMuZ2V0U2VsZWN0aW9uKGZhbHNlKTtcbiAgICAgIGlmICghYW5jaG9yKSBhbmNob3IgPSBmb2N1cztcbiAgICAgIGlmICghYW5jaG9yKSByZXR1cm47XG4gICAgICBpZiAoYW5jaG9yLnJvdyAhPT0gZm9jdXMhLnJvdykgcmV0dXJuO1xuICAgICAgaWYgKCF0aGlzLmlzSW5saW5lRm9ybWF0dGluZ0FsbG93ZWQoKSkgcmV0dXJuO1xuICAgICAgbGV0IG1hcmt1cE5vZGUgPSB0aGlzLmNvbXB1dGVFbmNsb3NpbmdNYXJrdXBOb2RlKGZvY3VzISwgYW5jaG9yLCBjb21tYW5kc1tjb21tYW5kXS5jbGFzc05hbWUpO1xuICAgICAgdGhpcy5jbGVhckRpcnR5RmxhZygpO1xuXG4gICAgICBpZiAobWFya3VwTm9kZSkge1xuICAgICAgICB0aGlzLmxpbmVEaXJ0eVtmb2N1cyEucm93XSA9IHRydWU7XG4gICAgICAgIGNvbnN0IHN0YXJ0Q29sID0gdGhpcy5jb21wdXRlQ29sdW1uKG1hcmt1cE5vZGUsIDApITtcbiAgICAgICAgY29uc3QgbGVuID0gbWFya3VwTm9kZS50ZXh0Q29udGVudCEubGVuZ3RoO1xuICAgICAgICBjb25zdCBsZWZ0ID0gdGhpcy5saW5lc1tmb2N1cyEucm93XVxuICAgICAgICAgIC5zdWJzdHIoMCwgc3RhcnRDb2wpXG4gICAgICAgICAgLnJlcGxhY2UoY29tbWFuZHNbY29tbWFuZF0udW5zZXQucHJlUGF0dGVybiwgXCJcIik7XG4gICAgICAgIGNvbnN0IG1pZCA9IHRoaXMubGluZXNbZm9jdXMhLnJvd10uc3Vic3RyKHN0YXJ0Q29sLCBsZW4pO1xuICAgICAgICBjb25zdCByaWdodCA9IHRoaXMubGluZXNbZm9jdXMhLnJvd11cbiAgICAgICAgICAuc3Vic3RyKHN0YXJ0Q29sICsgbGVuKVxuICAgICAgICAgIC5yZXBsYWNlKGNvbW1hbmRzW2NvbW1hbmRdLnVuc2V0LnBvc3RQYXR0ZXJuLCBcIlwiKTtcbiAgICAgICAgdGhpcy5saW5lc1tmb2N1cyEucm93XSA9IGxlZnQuY29uY2F0KG1pZCwgcmlnaHQpO1xuICAgICAgICBhbmNob3IuY29sID0gbGVmdC5sZW5ndGg7XG4gICAgICAgIGZvY3VzIS5jb2wgPSBhbmNob3IuY29sICsgbGVuO1xuICAgICAgICB0aGlzLnVwZGF0ZUZvcm1hdHRpbmcoKTtcbiAgICAgICAgdGhpcy5zZXRTZWxlY3Rpb24oZm9jdXMhLCBhbmNob3IpO1xuICAgICAgICB0aGlzLmZpcmVDaGFuZ2UoKTtcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIGZvY3VzIS5jb2wgPT09IGFuY2hvci5jb2wgJiZcbiAgICAgICAgISF0aGlzLmxpbmVzW2ZvY3VzIS5yb3ddLnN1YnN0cigwLCBmb2N1cyEuY29sKS5tYXRjaChjb21tYW5kc1tjb21tYW5kXS51bnNldC5wcmVQYXR0ZXJuKSAmJlxuICAgICAgICAhIXRoaXMubGluZXNbZm9jdXMhLnJvd10uc3Vic3RyKGZvY3VzIS5jb2wpLm1hdGNoKGNvbW1hbmRzW2NvbW1hbmRdLnVuc2V0LnBvc3RQYXR0ZXJuKVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMubGluZURpcnR5W2ZvY3VzIS5yb3ddID0gdHJ1ZTtcbiAgICAgICAgY29uc3QgbGVmdCA9IHRoaXMubGluZXNbZm9jdXMhLnJvd11cbiAgICAgICAgICAuc3Vic3RyKDAsIGZvY3VzIS5jb2wpXG4gICAgICAgICAgLnJlcGxhY2UoY29tbWFuZHNbY29tbWFuZF0udW5zZXQucHJlUGF0dGVybiwgXCJcIik7XG4gICAgICAgIGNvbnN0IHJpZ2h0ID0gdGhpcy5saW5lc1tmb2N1cyEucm93XVxuICAgICAgICAgIC5zdWJzdHIoZm9jdXMhLmNvbClcbiAgICAgICAgICAucmVwbGFjZShjb21tYW5kc1tjb21tYW5kXS51bnNldC5wb3N0UGF0dGVybiwgXCJcIik7XG4gICAgICAgIHRoaXMubGluZXNbZm9jdXMhLnJvd10gPSBsZWZ0LmNvbmNhdChyaWdodCk7XG4gICAgICAgIGZvY3VzIS5jb2wgPSBhbmNob3IuY29sID0gbGVmdC5sZW5ndGg7XG4gICAgICAgIHRoaXMudXBkYXRlRm9ybWF0dGluZygpO1xuICAgICAgICB0aGlzLnNldFNlbGVjdGlvbihmb2N1cyEsIGFuY2hvcik7XG4gICAgICAgIHRoaXMuZmlyZUNoYW5nZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGV0IHsgc3RhcnRDb2wsIGVuZENvbCB9ID1cbiAgICAgICAgICBmb2N1cyEuY29sIDwgYW5jaG9yLmNvbFxuICAgICAgICAgICAgPyB7IHN0YXJ0Q29sOiBmb2N1cyEuY29sLCBlbmRDb2w6IGFuY2hvci5jb2wgfVxuICAgICAgICAgICAgOiB7IHN0YXJ0Q29sOiBhbmNob3IuY29sLCBlbmRDb2w6IGZvY3VzIS5jb2wgfTtcblxuICAgICAgICBsZXQgbWF0Y2ggPSB0aGlzLmxpbmVzW2ZvY3VzIS5yb3ddXG4gICAgICAgICAgLnN1YnN0cihzdGFydENvbCwgZW5kQ29sIC0gc3RhcnRDb2wpXG4gICAgICAgICAgLm1hdGNoKC9eKD88bGVhZGluZz5cXHMqKS4qXFxTKD88dHJhaWxpbmc+XFxzKikkLyk7XG4gICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgIHN0YXJ0Q29sICs9IG1hdGNoLmdyb3VwcyEubGVhZGluZy5sZW5ndGg7XG4gICAgICAgICAgZW5kQ29sIC09IG1hdGNoLmdyb3VwcyEudHJhaWxpbmcubGVuZ3RoO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9jdXMhLmNvbCA9IHN0YXJ0Q29sO1xuICAgICAgICBhbmNob3IuY29sID0gZW5kQ29sO1xuXG4gICAgICAgIHRoaXMud3JhcFNlbGVjdGlvbihjb21tYW5kc1tjb21tYW5kXS5zZXQucHJlLCBjb21tYW5kc1tjb21tYW5kXS5zZXQucG9zdCwgZm9jdXMsIGFuY2hvcik7XG4gICAgICAgIHRoaXMuZmlyZUNoYW5nZSgpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY29tbWFuZHNbY29tbWFuZF0udHlwZSA9PT0gXCJsaW5lXCIpIHtcbiAgICAgIGxldCBhbmNob3IgPSB0aGlzLmdldFNlbGVjdGlvbih0cnVlKTtcbiAgICAgIGxldCBmb2N1cyA9IHRoaXMuZ2V0U2VsZWN0aW9uKGZhbHNlKTtcbiAgICAgIGlmICghYW5jaG9yKSBhbmNob3IgPSBmb2N1cztcbiAgICAgIGlmICghZm9jdXMpIHJldHVybjtcbiAgICAgIHRoaXMuY2xlYXJEaXJ0eUZsYWcoKTtcbiAgICAgIGxldCBzdGFydCA9IGFuY2hvciEucm93ID4gZm9jdXMhLnJvdyA/IGZvY3VzISA6IGFuY2hvciE7XG4gICAgICBsZXQgZW5kID0gYW5jaG9yIS5yb3cgPiBmb2N1cyEucm93ID8gYW5jaG9yISA6IGZvY3VzITtcbiAgICAgIGlmIChlbmQucm93ID4gc3RhcnQucm93ICYmIGVuZC5jb2wgPT09IDApIHtcbiAgICAgICAgZW5kLnJvdy0tO1xuICAgICAgfVxuXG4gICAgICBmb3IgKGxldCBsaW5lID0gc3RhcnQucm93OyBsaW5lIDw9IGVuZC5yb3c7IGxpbmUrKykge1xuICAgICAgICBpZiAoc3RhdGUgJiYgdGhpcy5saW5lVHlwZXNbbGluZV0gIT09IGNvbW1hbmRzW2NvbW1hbmRdLmNsYXNzTmFtZSkge1xuICAgICAgICAgIHRoaXMubGluZXNbbGluZV0gPSB0aGlzLmxpbmVzW2xpbmVdLnJlcGxhY2UoXG4gICAgICAgICAgICBjb21tYW5kc1tjb21tYW5kXS5zZXQucGF0dGVybixcbiAgICAgICAgICAgIGNvbW1hbmRzW2NvbW1hbmRdLnNldC5yZXBsYWNlbWVudC5yZXBsYWNlKFwiJCNcIiwgKGxpbmUgLSBzdGFydC5yb3cgKyAxKS50b1N0cmluZygpKVxuICAgICAgICAgICk7XG4gICAgICAgICAgdGhpcy5saW5lRGlydHlbbGluZV0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmICghc3RhdGUgJiYgdGhpcy5saW5lVHlwZXNbbGluZV0gPT09IGNvbW1hbmRzW2NvbW1hbmRdLmNsYXNzTmFtZSkge1xuICAgICAgICAgIHRoaXMubGluZXNbbGluZV0gPSB0aGlzLmxpbmVzW2xpbmVdLnJlcGxhY2UoXG4gICAgICAgICAgICBjb21tYW5kc1tjb21tYW5kXS51bnNldC5wYXR0ZXJuLFxuICAgICAgICAgICAgY29tbWFuZHNbY29tbWFuZF0udW5zZXQucmVwbGFjZW1lbnRcbiAgICAgICAgICApO1xuICAgICAgICAgIHRoaXMubGluZURpcnR5W2xpbmVdID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy51cGRhdGVGb3JtYXR0aW5nKCk7XG4gICAgICB0aGlzLnNldFNlbGVjdGlvbihcbiAgICAgICAgeyByb3c6IGVuZC5yb3csIGNvbDogdGhpcy5saW5lc1tlbmQucm93XS5sZW5ndGggfSxcbiAgICAgICAgeyByb3c6IHN0YXJ0LnJvdywgY29sOiAwIH1cbiAgICAgICk7XG4gICAgICB0aGlzLmZpcmVDaGFuZ2UoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGlzSW5saW5lRm9ybWF0dGluZ0FsbG93ZWQoKTogYm9vbGVhbiB7XG4gICAgY29uc3Qgc2VsID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICAgIGlmICghc2VsIHx8ICFzZWwuZm9jdXNOb2RlIHx8ICFzZWwuYW5jaG9yTm9kZSkgcmV0dXJuIGZhbHNlO1xuXG4gICAgaWYgKFxuICAgICAgc2VsLmlzQ29sbGFwc2VkICYmXG4gICAgICBzZWwuZm9jdXNOb2RlLm5vZGVUeXBlID09PSAzICYmXG4gICAgICBzZWwuZm9jdXNPZmZzZXQgPT09IHNlbC5mb2N1c05vZGUubm9kZVZhbHVlIS5sZW5ndGhcbiAgICApIHtcbiAgICAgIGxldCBub2RlO1xuICAgICAgZm9yIChub2RlID0gc2VsLmZvY3VzTm9kZTsgbm9kZSAmJiBub2RlLm5leHRTaWJsaW5nID09PSBudWxsOyBub2RlID0gbm9kZS5wYXJlbnROb2RlISk7XG4gICAgICBpZiAoXG4gICAgICAgIG5vZGUgJiZcbiAgICAgICAgbm9kZS5uZXh0U2libGluZyAmJlxuICAgICAgICAobm9kZS5uZXh0U2libGluZyBhcyBIVE1MRWxlbWVudCkuY2xhc3NOYW1lICYmXG4gICAgICAgIChub2RlLm5leHRTaWJsaW5nIGFzIEhUTUxFbGVtZW50KS5jbGFzc05hbWUuaW5jbHVkZXMoXCJUTUlubGluZUZvcm1hdHRlZFwiKVxuICAgICAgKVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBsZXQgYW5jZXN0b3IgPSB0aGlzLmNvbXB1dGVDb21tb25BbmNlc3RvcihzZWwuZm9jdXNOb2RlLCBzZWwuYW5jaG9yTm9kZSk7XG4gICAgaWYgKCFhbmNlc3RvcikgcmV0dXJuIGZhbHNlO1xuXG4gICAgd2hpbGUgKGFuY2VzdG9yICYmIGFuY2VzdG9yICE9PSB0aGlzLmUpIHtcbiAgICAgIGlmIChcbiAgICAgICAgKGFuY2VzdG9yIGFzIEhUTUxFbGVtZW50KS5jbGFzc05hbWUgJiZcbiAgICAgICAgdHlwZW9mIChhbmNlc3RvciBhcyBIVE1MRWxlbWVudCkuY2xhc3NOYW1lLmluY2x1ZGVzID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICAgICAgKChhbmNlc3RvciBhcyBIVE1MRWxlbWVudCkuY2xhc3NOYW1lLmluY2x1ZGVzKFwiVE1JbmxpbmVGb3JtYXR0ZWRcIikgfHxcbiAgICAgICAgICAoYW5jZXN0b3IgYXMgSFRNTEVsZW1lbnQpLmNsYXNzTmFtZS5pbmNsdWRlcyhcIlRNQmxhbmtMaW5lXCIpKVxuICAgICAgKVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIGFuY2VzdG9yID0gYW5jZXN0b3IucGFyZW50Tm9kZSE7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHVibGljIHRvZ2dsZUNvbW1hbmRTdGF0ZShjb21tYW5kOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMubGFzdENvbW1hbmRTdGF0ZSkgdGhpcy5sYXN0Q29tbWFuZFN0YXRlID0gdGhpcy5nZXRDb21tYW5kU3RhdGUoKTtcbiAgICB0aGlzLnNldENvbW1hbmRTdGF0ZShjb21tYW5kLCAhdGhpcy5sYXN0Q29tbWFuZFN0YXRlW2NvbW1hbmRdKTtcbiAgfVxuXG4gIHByaXZhdGUgZmlyZURyb3AoZGF0YVRyYW5zZmVyOiBEYXRhVHJhbnNmZXIpOiB2b2lkIHtcbiAgICBmb3IgKGxldCBsaXN0ZW5lciBvZiB0aGlzLmxpc3RlbmVycy5kcm9wKSB7XG4gICAgICBsaXN0ZW5lcih7IGRhdGFUcmFuc2ZlciB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGZpcmVTZWxlY3Rpb24oKTogdm9pZCB7XG4gICAgaWYgKHRoaXMubGlzdGVuZXJzLnNlbGVjdGlvbiAmJiB0aGlzLmxpc3RlbmVycy5zZWxlY3Rpb24ubGVuZ3RoKSB7XG4gICAgICBsZXQgZm9jdXMgPSB0aGlzLmdldFNlbGVjdGlvbihmYWxzZSk7XG4gICAgICBsZXQgYW5jaG9yID0gdGhpcy5nZXRTZWxlY3Rpb24odHJ1ZSk7XG4gICAgICBsZXQgY29tbWFuZFN0YXRlID0gdGhpcy5nZXRDb21tYW5kU3RhdGUoZm9jdXMsIGFuY2hvcik7XG4gICAgICBpZiAodGhpcy5sYXN0Q29tbWFuZFN0YXRlKSB7XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcy5sYXN0Q29tbWFuZFN0YXRlLCBjb21tYW5kU3RhdGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5sYXN0Q29tbWFuZFN0YXRlID0gT2JqZWN0LmFzc2lnbih7fSwgY29tbWFuZFN0YXRlKTtcbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGxpc3RlbmVyIG9mIHRoaXMubGlzdGVuZXJzLnNlbGVjdGlvbikge1xuICAgICAgICBsaXN0ZW5lcih7XG4gICAgICAgICAgZm9jdXM6IGZvY3VzISxcbiAgICAgICAgICBhbmNob3I6IGFuY2hvciEsXG4gICAgICAgICAgY29tbWFuZFN0YXRlOiB0aGlzLmxhc3RDb21tYW5kU3RhdGUsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBFZGl0b3I7XG4iXSwibmFtZXMiOlsic3ZnIiwiYmxvY2txdW90ZSIsImJvbGQiLCJjbGVhcl9mb3JtYXR0aW5nIiwiY29kZSIsImgxIiwiaDIiLCJociIsImltYWdlIiwiaXRhbGljIiwibGluayIsIm9sIiwicmVkbyIsInN0cmlrZXRocm91Z2giLCJ1bCIsInVuZG8iLCJpc01hY0xpa2UiLCJ0ZXN0IiwibmF2aWdhdG9yIiwicGxhdGZvcm0iLCJEZWZhdWx0Q29tbWFuZHMiLCJuYW1lIiwiYWN0aW9uIiwiaW5uZXJIVE1MIiwidGl0bGUiLCJob3RrZXkiLCJpbnNlcnRMaW5rIiwiZWRpdG9yIiwiaXNJbmxpbmVGb3JtYXR0aW5nQWxsb3dlZCIsIndyYXBTZWxlY3Rpb24iLCJlbmFibGVkIiwiZm9jdXMiLCJhbmNob3IiLCJpbnNlcnRJbWFnZSIsInBhc3RlIiwiY2FuVW5kbyIsImNhblJlZG8iLCJDb21tYW5kQmFyIiwiY29uc3RydWN0b3IiLCJwcm9wcyIsImUiLCJjb21tYW5kcyIsImJ1dHRvbnMiLCJzdGF0ZSIsImhvdGtleXMiLCJlbGVtZW50IiwiZG9jdW1lbnQiLCJnZXRFbGVtZW50QnlJZCIsImJvZHkiLCJjcmVhdGVDb21tYW5kQmFyRWxlbWVudCIsImFkZEV2ZW50TGlzdGVuZXIiLCJoYW5kbGVLZXlkb3duIiwic2V0RWRpdG9yIiwicGFyZW50RWxlbWVudCIsImNyZWF0ZUVsZW1lbnQiLCJjbGFzc05hbWUiLCJjb21tYW5kIiwiZWwiLCJhcHBlbmRDaGlsZCIsImNvbW1hbmROYW1lIiwiT2JqZWN0IiwiYXNzaWduIiwia2V5cyIsInNwbGl0IiwibW9kaWZpZXJzIiwibW9kaWZpZXJleHBsYW5hdGlvbiIsImkiLCJsZW5ndGgiLCJwdXNoIiwibWF0Y2giLCJrZXkiLCJ0b0xvd2VyQ2FzZSIsImNvbmNhdCIsImpvaW4iLCJoYW5kbGVDbGljayIsImV2ZW50IiwicHJldmVudERlZmF1bHQiLCJzZXRDb21tYW5kU3RhdGUiLCJoYW5kbGVTZWxlY3Rpb24iLCJjb21tYW5kU3RhdGUiLCJ1bmRlZmluZWQiLCJvdXRlciIsIm1vZGlmaWVyIiwiZ2xvYmFsIiwidGhpcyIsInJlcXVpcmUkJDAiLCJyZXF1aXJlJCQxIiwicmVxdWlyZSQkMiIsInNoYXJlZFN0b3JlTW9kdWxlIiwicmVxdWlyZSQkMyIsInJlcXVpcmUkJDQiLCJyZXF1aXJlJCQ1IiwicmVxdWlyZSQkNiIsInJlcXVpcmUkJDciLCJtYWtlQnVpbHRJbiIsIm1ha2VCdWlsdEluTW9kdWxlIiwicmVwbGFjZW1lbnRzIiwiQVNDSUlQdW5jdHVhdGlvbiIsIk5vdFRyaWdnZXJDaGFyIiwiU2NoZW1lIiwiRW1haWwiLCJIVE1MT3BlblRhZyIsIkhUTUxDbG9zZVRhZyIsIkhUTUxUYWdOYW1lIiwiSFRNTENvbW1lbnQiLCJIVE1MUEkiLCJIVE1MRGVjbGFyYXRpb24iLCJIVE1MQ0RBVEEiLCJIVE1MQXR0cmlidXRlIiwiSFRNTEF0dFZhbHVlIiwiS25vd25UYWciLCJwdW5jdHVhdGlvbkxlYWRpbmciLCJSZWdFeHAiLCJwdW5jdHVhdGlvblRyYWlsaW5nIiwibGluZUdyYW1tYXIiLCJUTUgxIiwicmVnZXhwIiwicmVwbGFjZW1lbnQiLCJUTUgyIiwiVE1IMyIsIlRNSDQiLCJUTUg1IiwiVE1INiIsIlRNQmxvY2txdW90ZSIsIlRNQ29kZUZlbmNlQmFja3RpY2tPcGVuIiwiVE1Db2RlRmVuY2VUaWxkZU9wZW4iLCJUTUNvZGVGZW5jZUJhY2t0aWNrQ2xvc2UiLCJUTUNvZGVGZW5jZVRpbGRlQ2xvc2UiLCJUTUJsYW5rTGluZSIsIlRNU2V0ZXh0SDFNYXJrZXIiLCJUTVNldGV4dEgyTWFya2VyIiwiVE1IUiIsIlRNVUwiLCJUTU9MIiwiVE1JbmRlbnRlZENvZGUiLCJUTUxpbmtSZWZlcmVuY2VEZWZpbml0aW9uIiwibGFiZWxQbGFjZWhvbGRlciIsImh0bWxCbG9ja0dyYW1tYXIiLCJzdGFydCIsImVuZCIsInBhcmFJbnRlcnJ1cHQiLCJpbmxpbmVHcmFtbWFyIiwiZXNjYXBlIiwiYXV0b2xpbmsiLCJodG1sIiwibGlua09wZW4iLCJpbWFnZU9wZW4iLCJsaW5rTGFiZWwiLCJkZWZhdWx0IiwicmVwbGFjZW1lbnRSZWdleHAiLCJpbmxpbmVSdWxlcyIsInJ1bGUiLCJyZSIsInNvdXJjZSIsInJlcGxhY2UiLCJzdHJpbmciLCJmbGFncyIsImNyZWF0ZU1lcmdlZElubGluZUdyYW1tYXIiLCJjdXN0b21SdWxlcyIsImFyZ3VtZW50cyIsIm1lcmdlZCIsInJ1bGVOYW1lIiwiZW50cmllcyIsInByb2Nlc3NlZFJ1bGUiLCJyZWdleHBTb3VyY2UiLCJodG1sZXNjYXBlIiwidHlwZSIsInNldCIsInByZSIsInBvc3QiLCJ1bnNldCIsInByZVBhdHRlcm4iLCJwb3N0UGF0dGVybiIsInBhdHRlcm4iLCJoMyIsImg0IiwiaDUiLCJoNiIsIkVkaXRvciIsInRleHRhcmVhIiwibGluZXMiLCJsaW5lRWxlbWVudHMiLCJsaW5lVHlwZXMiLCJsaW5lQ2FwdHVyZXMiLCJsaW5lUmVwbGFjZW1lbnRzIiwibGlua0xhYmVscyIsImxpbmVEaXJ0eSIsImxhc3RDb21tYW5kU3RhdGUiLCJjdXN0b21JbmxpbmVHcmFtbWFyIiwibWVyZ2VkSW5saW5lR3JhbW1hciIsImhhc0ZvY3VzIiwibGlzdGVuZXJzIiwiY2hhbmdlIiwic2VsZWN0aW9uIiwiZHJvcCIsInVuZG9TdGFjayIsInJlZG9TdGFjayIsImlzUmVzdG9yaW5nSGlzdG9yeSIsIm1heEhpc3RvcnkiLCJnZXRFbGVtZW50c0J5VGFnTmFtZSIsInRhZ05hbWUiLCJwYXJlbnROb2RlIiwic3R5bGUiLCJkaXNwbGF5IiwiY3JlYXRlRWRpdG9yRWxlbWVudCIsInNldENvbnRlbnQiLCJjb250ZW50IiwidmFsdWUiLCJoYW5kbGVVbmRvUmVkb0tleSIsInB1c2hIaXN0b3J5IiwicHVzaEN1cnJlbnRTdGF0ZSIsImdldENvbnRlbnQiLCJnZXRTZWxlY3Rpb24iLCJzaGlmdCIsImN1cnJlbnQiLCJwb3AiLCJwcmV2Iiwic2V0U2VsZWN0aW9uIiwibmV4dCIsImlzTWFjIiwiY3RybCIsIm1ldGFLZXkiLCJjdHJsS2V5IiwiYWx0S2V5Iiwic2hpZnRLZXkiLCJjbGFzc0xpc3QiLCJhZGQiLCJjb250ZW50RWRpdGFibGUiLCJ3aGl0ZVNwYWNlIiwid2Via2l0VXNlck1vZGlmeSIsIm5leHRTaWJsaW5nIiwiaW5zZXJ0QmVmb3JlIiwiaGFuZGxlSW5wdXRFdmVudCIsImhhbmRsZUJlZm9yZUlucHV0RXZlbnQiLCJoYW5kbGVTZWxlY3Rpb25DaGFuZ2VFdmVudCIsImhhbmRsZVBhc3RlIiwiaGFuZGxlRHJvcCIsImNoaWxkTm9kZXMiLCJmaXJzdENoaWxkIiwicmVtb3ZlQ2hpbGQiLCJsaW5lTnVtIiwibGUiLCJBcnJheSIsInVwZGF0ZUZvcm1hdHRpbmciLCJmaXJlQ2hhbmdlIiwidXBkYXRlTGluZVR5cGVzIiwidXBkYXRlTGlua0xhYmVscyIsImFwcGx5TGluZVR5cGVzIiwibCIsImNhcHR1cmUiLCJzdHIiLCJwMSIsInAyIiwicGFyc2VJbnQiLCJwcm9jZXNzSW5saW5lU3R5bGVzIiwiY29udGVudEhUTUwiLCJyZW1vdmVBdHRyaWJ1dGUiLCJkYXRhc2V0IiwidG9TdHJpbmciLCJjb2RlQmxvY2tUeXBlIiwiY29kZUJsb2NrU2VxTGVuZ3RoIiwiaHRtbEJsb2NrIiwibGluZVR5cGUiLCJsaW5lQ2FwdHVyZSIsImxpbmVSZXBsYWNlbWVudCIsImV4ZWMiLCJncm91cHMiLCJodG1sQmxvY2tUeXBlIiwiaGVhZGluZ0xpbmUiLCJoZWFkaW5nTGluZVR5cGUiLCJnZXRBbmNob3IiLCJ3aW5kb3ciLCJzdGFydE5vZGUiLCJhbmNob3JOb2RlIiwiZm9jdXNOb2RlIiwib2Zmc2V0IiwiYW5jaG9yT2Zmc2V0IiwiZm9jdXNPZmZzZXQiLCJyb3ciLCJjb2wiLCJjb21wdXRlQ29sdW1uIiwibm9kZSIsInByZXZpb3VzU2libGluZyIsImN1cnJlbnRMaW5lTnVtRGF0YSIsIl9hIiwicHJldmlvdXNMaW5lTnVtRGF0YSIsIl9iIiwiY3VycmVudExpbmVOdW0iLCJwcmV2aW91c0xpbmVOdW0iLCJjb21wdXRlTm9kZUFuZE9mZnNldCIsIndpbmRvd1NlbGVjdGlvbiIsInNldEJhc2VBbmRFeHRlbnQiLCJ0ZXh0IiwiYmVnaW5uaW5nIiwiaW5zZXJ0ZWRMaW5lcyIsImxpbmVCZWZvcmUiLCJzdWJzdHIiLCJsaW5lRW5kIiwiZW5kQ29sUG9zIiwic3BsaWNlTGluZXMiLCJzdGFydENvbCIsImVuZENvbCIsImxlZnQiLCJtaWQiLCJyaWdodCIsImxpc3RlbmVyIiwibGluZXNEaXJ0eSIsImJlZm9yZUlucHV0RXZlbnQiLCJpbnB1dFR5cGUiLCJjbGVhckRpcnR5RmxhZyIsInN1YnN0cmluZyIsImNvbnRpbnVhYmxlVHlwZSIsImxpbmVCZWZvcmVCcmVhayIsImxpbmVBZnRlckJyZWFrIiwicmVzdWx0Iiwic2Nyb2xsSW50b1ZpZXciLCJibG9jayIsImlubGluZSIsImlucHV0RXZlbnQiLCJmaXhOb2RlSGllcmFyY2h5IiwidXBkYXRlTGluZUNvbnRlbnRzQW5kRm9ybWF0dGluZyIsIl9lIiwiZmlyZVNlbGVjdGlvbiIsImNsaXBib2FyZERhdGEiLCJnZXREYXRhIiwiZmlyZURyb3AiLCJkYXRhVHJhbnNmZXIiLCJvcmlnaW5hbFN0cmluZyIsInByb2Nlc3NlZCIsInN0YWNrIiwiY2FwIiwicG90ZW50aWFsTGluayIsInBvdGVudGlhbEltYWdlIiwicGFyc2VMaW5rT3JJbWFnZSIsIm91dHB1dCIsImNoYXJDb3VudCIsImRlbGltQ291bnQiLCJkZWxpbVN0cmluZyIsImN1cnJlbnREZWxpbWl0ZXIiLCJwcmVjZWRpbmciLCJmb2xsb3dpbmciLCJwdW5jdHVhdGlvbkZvbGxvd3MiLCJwdW5jdHVhdGlvblByZWNlZGVzIiwid2hpdGVzcGFjZUZvbGxvd3MiLCJ3aGl0ZXNwYWNlUHJlY2VkZXMiLCJjYW5PcGVuIiwiY2FuQ2xvc2UiLCJzdGFja1BvaW50ZXIiLCJkZWxpbWl0ZXIiLCJlbnRyeSIsImNvdW50IiwiY29uc3VtZWQiLCJub2RlVHlwZSIsIk5vZGUiLCJURVhUX05PREUiLCJ0ZXh0Q29udGVudCIsImJpbmRSaWdodCIsImNoaWxkcmVuQ29tcGxldGUiLCJydiIsIm5vZGVWYWx1ZSIsInVwZGF0ZUxpbmVDb250ZW50cyIsImxpbmVEZWx0YSIsImNoaWxkRWxlbWVudENvdW50IiwiZmlyc3RDaGFuZ2VkTGluZSIsImxhc3RDaGFuZ2VkTGluZSIsImxpbmVzVG9EZWxldGUiLCJsaW5lc1RvQWRkIiwibGluZSIsImN0Iiwic3RhcnRMaW5lIiwibGluZXNUb0luc2VydCIsImFkanVzdExpbmVFbGVtZW50cyIsImluc2VydGVkQmxhbmsiLCJpbnNlcnRlZERpcnR5Iiwic3BsaWNlIiwib3JpZ2luYWxDaGlsZHJlbiIsImZyb20iLCJyZXBsYWNlQ2hpbGQiLCJjaGlsZCIsInBhcmVudCIsIl9sZW4iLCJuZXdDaGlsZHJlbiIsIl9rZXkiLCJmb3JFYWNoIiwibmV3Q2hpbGQiLCJFTEVNRU5UX05PREUiLCJkaXZXcmFwcGVyIiwiZ3JhbmRDaGlsZHJlbiIsInNvbWUiLCJncmFuZENoaWxkIiwiaXNJbWFnZSIsInRleHRPZmZzZXQiLCJvcGVuZXIiLCJjdXJyZW50T2Zmc2V0IiwiYnJhY2tldExldmVsIiwibGlua1RleHQiLCJsaW5rUmVmIiwibGlua0RldGFpbHMiLCJ0ZXh0T3V0ZXIiLCJuZXh0Q2hhciIsInRyaW0iLCJwYXJlbnRoZXNpc0xldmVsIiwiaW5saW5lT3V0ZXIiLCJ2YWxpZCIsImxhYmVsIiwibGFiZWxDbGFzcyIsImNvbXB1dGVDb21tb25BbmNlc3RvciIsIm5vZGUxIiwibm9kZTIiLCJhbmNlc3RyeSIsInVuc2hpZnQiLCJhbmNlc3RyeTEiLCJhbmNlc3RyeTIiLCJjb21wdXRlRW5jbG9zaW5nTWFya3VwTm9kZSIsInNlbCIsImluY2x1ZGVzIiwiZ2V0Q29tbWFuZFN0YXRlIiwiY21kIiwibWFya3VwTm9kZSIsImxlbiIsImxlYWRpbmciLCJ0cmFpbGluZyIsImlzQ29sbGFwc2VkIiwiYW5jZXN0b3IiLCJ0b2dnbGVDb21tYW5kU3RhdGUiXSwibWFwcGluZ3MiOiI7Ozs7OztJQUFBLE1BQU1BLEdBQUcsR0FBMkI7SUFDbENDLEVBQUFBLFVBQVUsRUFBRSxDQUEyUix5UkFBQSxDQUFBO0lBQ3ZTQyxFQUFBQSxJQUFJLEVBQUUsQ0FBMFksd1lBQUEsQ0FBQTtJQUNoWkMsRUFDQUMsSUFBSSxFQUFFLENBQStVLDZVQUFBLENBQUE7SUFDclZDLEVBQUFBLEVBQUUsRUFBRSxDQUFnSyw4SkFBQSxDQUFBO0lBQ3BLQyxFQUFBQSxFQUFFLEVBQUUsQ0FBa0ssZ0tBQUEsQ0FBQTtJQUN0S0MsRUFBQUEsRUFBRSxFQUFFLENBQWlJLCtIQUFBLENBQUE7SUFDcklDLEVBQUFBLEtBQUssRUFBRSxDQUErSCw2SEFBQSxDQUFBO0lBQ3RJQyxFQUFBQSxNQUFNLEVBQUUsQ0FBaUgsK0dBQUEsQ0FBQTtJQUN6SEMsRUFBQUEsSUFB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LEVBQUU7SUFBQ0csTUFBQUEsT0FBTyxFQUFFLHFDQUFxQztJQUFFeEQsTUFBQUEsV0FBVyxFQUFFO0lBQUs7T0FDM0U7SUFDRHlELEVBQUFBLEVBQUUsRUFBRTtJQUNGUixJQUFBQSxJQUFJLEVBQUUsTUFBTTtJQUNaL0csSUFBQUEsU0FBUyxFQUFFLE1BQU07SUFDakJnSCxJQUFBQSxHQUFHLEVBQUU7SUFBQ00sTUFBQUEsT0FBTyxFQUFFLHFEQUFxRDtJQUFFeEQsTUFBQUEsV0FBVyxFQUFFO1NBQVM7SUFDNUZxRCxJQUFBQSxLQUFLLEVBQUU7SUFBQ0csTUFBQUEsT0FBTyxFQUFFLHNDQUFzQztJQUFFeEQsTUFBQUEsV0FBVyxFQUFFO0lBQUs7T0FDNUU7SUFDRDBELEVBQUFBLEVBQUUsRUFBRTtJQUNGVCxJQUFBQSxJQUFJLEVBQUUsTUFBTTtJQUNaL0csSUFBQUEsU0FBUyxFQUFFLE1BQU07SUFDakJnSCxJQUFBQSxHQUFHLEVBQUU7SUFBQ00sTUFBQUEsT0FBTyxFQUFFLHFEQUFxRDtJQUFFeEQsTUFBQUEsV0FBVyxFQUFFO1NBQVU7SUFDN0ZxRCxJQUFBQSxLQUFLLEVBQUU7SUFBQ0csTUFBQUEsT0FBTyxFQUFFLHVDQUF1QztJQUFFeEQsTUFBQUEsV0FBVyxFQUFFO0lBQUs7T0FDN0U7SUFDRDJELEVBQUFBLEVBQUUsRUFBRTtJQUNGVixJQUFBQSxJQUFJLEVBQUUsTUFBTTtJQUNaL0csSUFBQUEsU0FBUyxFQUFFLE1BQU07SUFDakJnSCxJQUFBQSxHQUFHLEVBQUU7SUFBQ00sTUFBQUEsT0FBTyxFQUFFLHFEQUFxRDtJQUFFeEQsTUFBQUEsV0FBVyxFQUFFO1NBQVc7SUFDOUZxRCxJQUFBQSxLQUFLLEVBQUU7SUFBQ0csTUFBQUEsT0FBTyxFQUFFLHdDQUF3QztJQUFFeEQsTUFBQUEsV0FBVyxFQUFFO0lBQUs7T0FDOUU7SUFDRDRELEVBQUFBLEVBQUUsRUFBRTtJQUNGWCxJQUFBQSxJQUFJLEVBQUUsTUFBTTtJQUNaL0csSUFBQUEsU0FBUyxFQUFFLE1BQU07SUFDakJnSCxJQUFBQSxH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LENBQUM4SCxnQkFBZ0IsRUFBRTVHLFlBQVksQ0FBQztJQUNwRCxPQUFDLE1BQU07WUFDTCxJQUFJLENBQUM0RyxnQkFBZ0IsR0FBRy9ILE1BQU0sQ0FBQ0MsTUFBTSxDQUFDLEVBQUUsRUFBRWtCLFlBQVksQ0FBQztJQUN6RDtVQUNBLEtBQUssSUFBSWtPLFFBQVEsSUFBSSxJQUFJLENBQUNsSCxTQUFTLENBQUNFLFNBQVMsRUFBRTtJQUM3Q2dILFFBQUFBLFFBQVEsQ0FBQztJQUNQbFIsVUFBQUEsS0FBSyxFQUFFQSxLQUFNO0lBQ2JDLFVBQUFBLE1BQU0sRUFBRUEsTUFBTztjQUNmK0MsWUFBWSxFQUFFLElBQUksQ0FBQzRHO0lBQ3BCLFNBQUEsQ0FBQztJQUNKO0lBQ0Y7SUFDRjtJQUNEOzs7Ozs7Ozs7IiwieF9nb29nbGVfaWdub3JlTGlzdCI6WzIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNSwxNiwxNywxOCwxOSwyMCwyMSwyMiwyMywyNCwyNSwyNiwyNywyOCwyOSwzMCwzMSwzMiwzMywzNCwzNSwzNiwzNywzOCwzOSw0MCw0MSw0Miw0Myw0NCw0NSw0Niw0Nyw0OCw0OV19{"version":3,"file":"index.js","sources":["src/svg/svg.ts","src/TinyMDECommandBar.ts","node_modules/core-js/internals/global-this.js","node_modules/core-js/internals/fails.js","node_modules/core-js/internals/descriptors.js","node_modules/core-js/internals/function-bind-native.js","node_modules/core-js/internals/function-uncurry-this.js","node_modules/core-js/internals/is-callable.js","node_modules/core-js/internals/is-null-or-undefined.js","node_modules/core-js/internals/require-object-coercible.js","node_modules/core-js/internals/to-object.js","node_modules/core-js/internals/has-own-property.js","node_modules/core-js/internals/function-name.js","node_modules/core-js/internals/is-pure.js","node_modules/core-js/internals/define-global-property.js","node_modules/core-js/internals/shared-store.js","node_modules/core-js/internals/inspect-source.js","node_modules/core-js/internals/weak-map-basic-detection.js","node_modules/core-js/internals/is-object.js","node_modules/core-js/internals/document-create-element.js","node_modules/core-js/internals/ie8-dom-define.js","node_modules/core-js/internals/v8-prototype-define-bug.js","node_modules/core-js/internals/an-object.js","node_modules/core-js/internals/function-call.js","node_modules/core-js/internals/get-built-in.js","node_modules/core-js/internals/object-is-prototype-of.js","node_modules/core-js/internals/environment-user-agent.js","node_modules/core-js/internals/environment-v8-version.js","node_modules/core-js/internals/symbol-constructor-detection.js","node_modules/core-js/internals/use-symbol-as-uid.js","node_modules/core-js/internals/is-symbol.js","node_modules/core-js/internals/try-to-string.js","node_modules/core-js/internals/a-callable.js","node_modules/core-js/internals/get-method.js","node_modules/core-js/internals/ordinary-to-primitive.js","node_modules/core-js/internals/shared.js","node_modules/core-js/internals/uid.js","node_modules/core-js/internals/well-known-symbol.js","node_modules/core-js/internals/to-primitive.js","node_modules/core-js/internals/to-property-key.js","node_modules/core-js/internals/object-define-property.js","node_modules/core-js/internals/create-property-descriptor.js","node_modules/core-js/internals/create-non-enumerable-property.js","node_modules/core-js/internals/shared-key.js","node_modules/core-js/internals/hidden-keys.js","node_modules/core-js/internals/internal-state.js","node_modules/core-js/internals/make-built-in.js","node_modules/core-js/internals/define-built-in-accessor.js","node_modules/core-js/internals/regexp-flags.js","node_modules/core-js/modules/es.regexp.flags.js","src/grammar.ts","src/TinyMDE.ts"],"sourcesContent":["const svg: Record<string, string> = {\n blockquote: `<svg height=\"18\" width=\"18\"><rect width=\"5\" height=\"5\" x=\"3\" y=\"4\" ry=\"1\"/><rect ry=\"1\" y=\"4\" x=\"10\" height=\"5\" width=\"5\"/><path d=\"M8 6.999v3c0 1-1 3-1 3s-.331 1-1.331 1h-1c-1 0-.669-1-.669-1s1-2 1-3v-3zm7 0v3c0 1-1 3-1 3s-.331 1-1.331 1h-1c-1 0-.669-1-.669-1s1-2 1-3v-3z\"/></svg>`,\n bold: `<svg height=\"18\" width=\"18\"><path d=\"M4 2a1 1 0 00-1 1v12a1 1 0 001 1h6c4 0 5-2 5-4 0-1.322-.434-2.636-1.885-3.381C13.772 7.885 14 6.945 14 6c0-2-1-4-5-4zm1 2h4c1.668 0 2.32.393 2.6.672.28.279.4.662.4 1.328s-.12 1.057-.4 1.338c-.275.274-1.014.646-2.6.662H5zm5 6c1.666.005 2.318.388 2.596.666.277.278.404.667.404 1.334s-.127 1.06-.404 1.338c-.278.278-.93.66-2.596.662l-4.992.004L5 10z\"/></svg>`,\n clear_formatting: `<svg height=\"18\" width=\"18\"><path d=\"M11.03 1a1 1 0 00-.74.3l-9 9a1 1 0 000 1.4l4 4A1 1 0 006 16h2a1 1 0 00.7-.3l8-8a1 1 0 000-1.4l-5-5a1 1 0 00-.67-.3zM8.7 5.7l3.58 3.6L7.6 14H6.4l-3-3 5.3-5.3z\"/><rect ry=\".8\" rx=\".8\" y=\"14\" x=\"16\" height=\"2\" width=\"2\"/><rect width=\"2\" height=\"2\" x=\"13\" y=\"14\" rx=\".8\" ry=\".8\"/><rect ry=\".8\" rx=\".8\" y=\"14\" x=\"10\" height=\"2\" width=\"2\"/></svg>`,\n code: `<svg height=\"18\" width=\"18\"><path d=\"M13.5 2.994a.5.5 0 00-.5.5.5.5 0 000 .034V4.53a5.993 5.993 0 00-7.451-.445A6 6 0 1012.45 13.9a5.99 5.99 0 001.346-1.334.5.5 0 00.096-.101.5.5 0 00-.12-.698.5.5 0 00-.697.12l-.004-.005a5 5 0 01-1.197 1.2 5 5 0 111.215-6.965.5.5 0 00.697.12.5.5 0 00.211-.44V4.745H14V3.493a.5.5 0 00-.5-.5z\"/></svg>`,\n h1: `<svg height=\"18\" width=\"18\"><path d=\"M3 2s0-1 1-1h1c1 0 1 1 1 1v6h6V2s0-1 1-1h1c1 0 1 1 1 1v14s0 1-1 1h-1c-1 0-1-1-1-1v-6H6v6s0 1-1 1H4c-1 0-1-1-1-1z\"/></svg>`,\n h2: `<svg height=\"18\" width=\"18\"><path d=\"M4 2s0-1 1-1 1 1 1 1v6c1-1 2-1 4-1 3 0 4 2 4 4v5s0 1-1 1-1-1-1-1v-5c0-1.094-1-2-2-2-2 0-3 0-4 2v5s0 1-1 1-1-1-1-1z\"/></svg>`,\n hr: `<svg height=\"18\" width=\"18\"><rect ry=\"1\" y=\"8\" height=\"2\" width=\"18\" style=\"font-variation-settings:normal;marker:none\"/></svg>`,\n image: `<svg height=\"18\" width=\"18\"><path d=\"M1 2v14h16V2H1zm2 2h12v7l-3-3-4 4-2-2-3 3V4z\"/><circle r=\"1.5\" cy=\"6.5\" cx=\"5.5\"/></svg>`,\n italic: `<svg height=\"18\" width=\"18\"><path d=\"M9 2a1 1 0 000 2L7 14a1 1 0 100 2h2a1 1 0 000-2l2-10a1 1 0 100-2z\"/></svg>`,\n link: `<svg height=\"18\" width=\"18\"><path d=\"M9.07 5.18a3.9 3.9 0 00-1.52.43C6.31 6.22 5.3 7.29 4.3 8.29c-1 1-2.07 2.02-2.68 3.26-.31.62-.5 1.33-.41 2.07.09.75.48 1.47 1.1 2.09.61.61 1.33 1 2.08 1.1.74.09 1.45-.1 2.07-.42 1.24-.61 2.26-1.68 3.26-2.68.46-.47.94-.94 1.39-1.44l-.43.26c-.68.34-1.49.56-2.36.46-.2-.03-.4-.08-.6-.14-.79.76-1.55 1.45-2.16 1.76-.38.19-.67.24-.92.21-.26-.03-.54-.14-.92-.53-.39-.38-.5-.66-.53-.91-.03-.26.02-.55.21-.93.39-.76 1.32-1.74 2.32-2.74 1-1 1.98-1.93 2.74-2.32.38-.19.67-.24.93-.21.25.03.53.14.91.53.39.38.5.66.53.92v.06l1.12-1.06.44-.47c-.18-.3-.4-.6-.67-.87-.62-.61-1.34-1-2.09-1.1a3.08 3.08 0 00-.55-.01z\"/><path d=\"M13.07.86a3.9 3.9 0 00-1.52.43c-1.24.62-2.26 1.69-3.26 2.69-.46.47-.94.94-1.39 1.43.15-.08.28-.18.43-.25a4.4 4.4 0 012.36-.46c.2.02.4.07.6.14.79-.77 1.55-1.46 2.16-1.76.38-.19.67-.25.93-.21.25.03.53.14.91.52.39.38.5.66.53.92.03.26-.02.55-.21.93-.39.76-1.32 1.74-2.32 2.74-1 1-1.98 1.93-2.74 2.31-.38.2-.67.25-.93.22-.25-.04-.53-.15-.91-.53-.39-.38-.5-.66-.53-.92V9c-.36.33-.73.67-1.12 1.06l-.43.46c.17.3.4.6.66.87.62.62 1.34 1 2.08 1.1.75.1 1.46-.1 2.08-.41 1.24-.62 2.26-1.69 3.26-2.69s2.07-2.02 2.68-3.26c.31-.62.5-1.32.41-2.07a3.63 3.63 0 00-1.1-2.08c-.61-.62-1.33-1-2.07-1.1a3.08 3.08 0 00-.56-.02z\"/></svg>`,\n ol: `<svg height=\"18\" width=\"18\"><path d=\"M1.5 7a.5.5 0 100 1h1a.5.5 0 01.5.5c0 .164-.08.31-.14.355l-1.655 1.25A.492.492 0 001 10.5a.5.5 0 00.5.5h2a.5.5 0 000-1H3l.398-.299A1.5 1.5 0 002.5 7z\"/><path d=\"M1.5 12c-.667 0-.667 1 0 1h1.25c.333 0 .333.5 0 .5H2.5c-.667 0-.667 1 0 1h.25c.333 0 .333.5 0 .5H1.5c-.667 0-.667 1 0 1h1c.398 0 .78-.131 1.06-.365.282-.235.44-.554.44-.885a1.121 1.121 0 00-.303-.75c.191-.204.3-.47.303-.75 0-.332-.158-.651-.44-.885-.3-.241-.675-.37-1.06-.365z\"/><rect y=\"13\" x=\"6\" height=\"2\" width=\"12\" ry=\"1\"/><rect ry=\"1\" width=\"12\" height=\"2\" x=\"6\" y=\"8\"/><rect y=\"3\" x=\"6\" height=\"2\" width=\"12\" ry=\"1\"/><path d=\"M1.5 2a.5.5 0 100 1H2v2h-.5a.5.5 0 100 1h2a.5.5 0 100-1H3V2.5c0-.277-.223-.5-.5-.5z\"/></svg>`,\n redo: `<svg height=\"18\" width=\"18\"><path d=\"M 7.2695308,2.7050781 C 8.1128755,2.7081581 8.9529895,2.8712156 9.730469,3.1347656 11.408874,3.7037121 12.90142,4.6847104 14,5.6367188 V 4 h 2 V 9 H 11 V 7 h 1.509765 C 11.59075,6.2485173 10.340208,5.453808 9.0878904,5.0292969 7.4309398,4.4676231 5.9453458,4.468717 4.7070308,5.7070312 c -1.225014,1.2250142 -1.409769,2.7206953 -0.779297,4.2968748 0.630472,1.57618 2.167475,3.158006 4.4433598,4.06836 l -0.7421878,1.855468 c -2.724115,-1.089646 -4.687112,-3.00782 -5.55664,-5.18164 -0.869528,-2.1738206 -0.554283,-4.6781393 1.220703,-6.4531252 0.923857,-0.9238568 2.015388,-1.388828 3.134765,-1.5351563 0.279845,-0.036582 0.560682,-0.053761 0.841797,-0.052734 z\" /></svg>`,\n strikethrough: `<svg width=\"18\" height=\"18\"><path d=\"M10 2C6 2 4 4 4 6c0 .338.08.672.193 1h2.34C6.113 6.629 6 6.295 6 6c0-.334.117-.725.691-1.154C7.265 4.416 8.331 4 10 4h3a1 1 0 000-2zm1.477 9c.413.368.523.706.523 1 0 .334-.127.712-.701 1.143-.575.43-1.632.85-3.299.857l-1.006.007V14H5a1 1 0 000 2h3c4 0 6-2 6-4 0-.338-.081-.672-.195-1z\"/><rect ry=\"1\" y=\"8\" x=\"1\" height=\"2\" width=\"16\"/></svg>`,\n ul: `<svg height=\"18\" width=\"18\"><circle cx=\"2\" cy=\"9\" r=\"2\"/><circle cy=\"4\" cx=\"2\" r=\"2\"/><rect y=\"3\" x=\"6\" height=\"2\" width=\"12\" ry=\"1\"/><circle cx=\"2\" cy=\"14\" r=\"2\"/><rect ry=\"1\" width=\"12\" height=\"2\" x=\"6\" y=\"8\"/><rect y=\"13\" x=\"6\" height=\"2\" width=\"12\" ry=\"1\"/></svg>`,\n undo: `<svg height=\"18\" width=\"18\"><path d=\"M 10.730469 2.7050781 C 9.8871243 2.7081594 9.0470103 2.8712156 8.2695312 3.1347656 C 6.5911256 3.7037121 5.0985797 4.6847104 4 5.6367188 L 4 4 L 2 4 L 2 9 L 7 9 L 7 7 L 5.4902344 7 C 6.4092499 6.2485173 7.6597914 5.453808 8.9121094 5.0292969 C 10.56906 4.4676231 12.054654 4.468717 13.292969 5.7070312 C 14.517983 6.9320454 14.702738 8.4277265 14.072266 10.003906 C 13.441794 11.580086 11.904791 13.161912 9.6289062 14.072266 L 10.371094 15.927734 C 13.095209 14.838088 15.058206 12.919914 15.927734 10.746094 C 16.797262 8.5722734 16.482017 6.0679547 14.707031 4.2929688 C 13.783174 3.369112 12.691643 2.9041408 11.572266 2.7578125 C 11.292421 2.7212304 11.011584 2.704051 10.730469 2.7050781 z \" /></svg>\n`\n};\n\nexport default svg;","import svg from \"./svg/svg\";\nimport { Editor, Position, SelectionEvent } from \"./TinyMDE\";\n\nconst isMacLike = /(Mac|iPhone|iPod|iPad)/i.test(\n typeof navigator !== \"undefined\" ? navigator.platform : \"\"\n);\n\nexport interface CommandAction {\n (editor: Editor): void;\n}\n\nexport interface CommandEnabled {\n (editor: Editor, focus?: Position, anchor?: Position): boolean | null;\n}\n\nexport interface CommandDefinition {\n name: string;\n action: string | CommandAction;\n innerHTML: string;\n title: string;\n hotkey?: string;\n enabled?: CommandEnabled;\n}\n\nexport interface CommandBarProps {\n element?: string | HTMLElement;\n editor?: Editor;\n commands?: (string | CommandDefinition)[];\n}\n\ninterface Hotkey {\n modifiers: string[];\n command: string;\n key?: string;\n code?: string;\n}\n\nconst DefaultCommands: Record<string, CommandDefinition> = {\n bold: {\n name: \"bold\",\n action: \"bold\",\n innerHTML: svg.bold,\n title: \"Bold\",\n hotkey: \"Mod-B\",\n },\n italic: {\n name: \"italic\",\n action: \"italic\",\n innerHTML: svg.italic,\n title: \"Italic\",\n hotkey: \"Mod-I\",\n },\n strikethrough: {\n name: \"strikethrough\",\n action: \"strikethrough\",\n innerHTML: svg.strikethrough,\n title: \"Strikethrough\",\n hotkey: \"Mod2-Shift-5\",\n },\n code: {\n name: \"code\",\n action: \"code\",\n innerHTML: svg.code,\n title: \"Format as code\",\n },\n h1: {\n name: \"h1\",\n action: \"h1\",\n innerHTML: svg.h1,\n title: \"Level 1 heading\",\n hotkey: \"Mod-Shift-1\",\n },\n h2: {\n name: \"h2\",\n action: \"h2\",\n innerHTML: svg.h2,\n title: \"Level 2 heading\",\n hotkey: \"Mod-Shift-2\",\n },\n ul: {\n name: \"ul\",\n action: \"ul\",\n innerHTML: svg.ul,\n title: \"Bulleted list\",\n },\n ol: {\n name: \"ol\",\n action: \"ol\",\n innerHTML: svg.ol,\n title: \"Numbered list\",\n },\n blockquote: {\n name: \"blockquote\",\n action: \"blockquote\",\n innerHTML: svg.blockquote,\n title: \"Quote\",\n hotkey: \"Mod2-Shift-Q\",\n },\n insertLink: {\n name: \"insertLink\",\n action: (editor: Editor) => {\n if ((editor as any).isInlineFormattingAllowed()) editor.wrapSelection(\"[\", \"]()\");\n },\n enabled: (editor: Editor, focus?: Position, anchor?: Position) =>\n (editor as any).isInlineFormattingAllowed(focus, anchor) ? false : null,\n innerHTML: svg.link,\n title: \"Insert link\",\n hotkey: \"Mod-K\",\n },\n insertImage: {\n name: \"insertImage\",\n action: (editor: Editor) => {\n if ((editor as any).isInlineFormattingAllowed()) editor.wrapSelection(\"![\", \"]()\");\n },\n enabled: (editor: Editor, focus?: Position, anchor?: Position) =>\n (editor as any).isInlineFormattingAllowed(focus, anchor) ? false : null,\n innerHTML: svg.image,\n title: \"Insert image\",\n hotkey: \"Mod2-Shift-I\",\n },\n hr: {\n name: \"hr\",\n action: (editor: Editor) => editor.paste(\"\\n***\\n\"),\n enabled: () => false,\n innerHTML: svg.hr,\n title: \"Insert horizontal line\",\n hotkey: \"Mod2-Shift-L\",\n },\n undo: {\n name: \"undo\",\n action: (editor: Editor) => editor.undo(),\n enabled: (editor: Editor) => (editor.canUndo ? false : null),\n innerHTML: svg.undo,\n title: \"Undo\",\n },\n redo: {\n name: \"redo\",\n action: (editor: Editor) => editor.redo(),\n enabled: (editor: Editor) => (editor.canRedo ? false : null),\n innerHTML: svg.redo,\n title: \"Redo\",\n },\n};\n\nexport class CommandBar {\n public e: HTMLDivElement | null = null;\n public editor: Editor | null = null;\n public commands: Record<string, CommandDefinition> = {};\n public buttons: Record<string, HTMLDivElement> = {};\n public state: Record<string, boolean | null> = {};\n private hotkeys: Hotkey[] = [];\n\n constructor(props: CommandBarProps) {\n this.e = null;\n this.editor = null;\n this.commands = {};\n this.buttons = {};\n this.state = {};\n this.hotkeys = [];\n\n let element: HTMLElement | null = null;\n if (typeof props.element === 'string') {\n element = document.getElementById(props.element);\n } else if (props.element) {\n element = props.element;\n }\n \n if (!element) {\n element = document.body;\n }\n\n this.createCommandBarElement(\n element,\n props.commands || [\n \"bold\",\n \"italic\",\n \"strikethrough\",\n \"|\",\n \"code\",\n \"|\",\n \"h1\",\n \"h2\",\n \"|\",\n \"ul\",\n \"ol\",\n \"|\",\n \"blockquote\",\n \"hr\",\n \"|\",\n \"undo\",\n \"redo\",\n \"|\",\n \"insertLink\",\n \"insertImage\",\n ]\n );\n document.addEventListener(\"keydown\", (e) => this.handleKeydown(e));\n if (props.editor) this.setEditor(props.editor);\n }\n\n private createCommandBarElement(parentElement: HTMLElement, commands: (string | CommandDefinition)[]): void {\n this.e = document.createElement(\"div\");\n this.e.className = \"TMCommandBar\";\n\n for (let command of commands) {\n if (command === \"|\") {\n let el = document.createElement(\"div\");\n el.className = \"TMCommandDivider\";\n this.e.appendChild(el);\n } else {\n let commandName: string;\n if (typeof command === \"string\") {\n if (DefaultCommands[command]) {\n commandName = command;\n this.commands[commandName] = DefaultCommands[commandName];\n } else {\n continue;\n }\n } else if (typeof command === \"object\" && command.name) {\n commandName = command.name;\n this.commands[commandName] = {} as CommandDefinition;\n if (DefaultCommands[commandName]) {\n Object.assign(this.commands[commandName], DefaultCommands[commandName]);\n }\n Object.assign(this.commands[commandName], command);\n } else {\n continue;\n }\n\n let title = this.commands[commandName].title || commandName;\n\n if (this.commands[commandName].hotkey) {\n const keys = this.commands[commandName].hotkey!.split(\"-\");\n let modifiers: string[] = [];\n let modifierexplanation: string[] = [];\n \n for (let i = 0; i < keys.length - 1; i++) {\n switch (keys[i]) {\n case \"Ctrl\":\n modifiers.push(\"ctrlKey\");\n modifierexplanation.push(\"Ctrl\");\n break;\n case \"Cmd\":\n modifiers.push(\"metaKey\");\n modifierexplanation.push(\"⌘\");\n break;\n case \"Alt\":\n modifiers.push(\"altKey\");\n modifierexplanation.push(\"Alt\");\n break;\n case \"Option\":\n modifiers.push(\"altKey\");\n modifierexplanation.push(\"⌥\");\n break;\n case \"Win\":\n modifiers.push(\"metaKey\");\n modifierexplanation.push(\"⊞ Win\");\n break;\n case \"Shift\":\n modifiers.push(\"shiftKey\");\n modifierexplanation.push(\"⇧\");\n break;\n case \"Mod\":\n if (isMacLike) {\n modifiers.push(\"metaKey\");\n modifierexplanation.push(\"⌘\");\n } else {\n modifiers.push(\"ctrlKey\");\n modifierexplanation.push(\"Ctrl\");\n }\n break;\n case \"Mod2\":\n modifiers.push(\"altKey\");\n if (isMacLike) modifierexplanation.push(\"⌥\");\n else modifierexplanation.push(\"Alt\");\n break;\n }\n }\n \n modifierexplanation.push(keys[keys.length - 1]);\n let hotkey: Hotkey = {\n modifiers: modifiers,\n command: commandName,\n };\n \n if (keys[keys.length - 1].match(/^[0-9]$/)) {\n hotkey.code = `Digit${keys[keys.length - 1]}`;\n } else {\n hotkey.key = keys[keys.length - 1].toLowerCase();\n }\n this.hotkeys.push(hotkey);\n title = title.concat(` (${modifierexplanation.join(\"+\")})`);\n }\n\n this.buttons[commandName] = document.createElement(\"div\");\n this.buttons[commandName].className = \"TMCommandButton TMCommandButton_Disabled\";\n this.buttons[commandName].title = title;\n this.buttons[commandName].innerHTML = this.commands[commandName].innerHTML;\n\n this.buttons[commandName].addEventListener(\"mousedown\", (e) =>\n this.handleClick(commandName, e)\n );\n this.e.appendChild(this.buttons[commandName]);\n }\n }\n parentElement.appendChild(this.e);\n }\n\n private handleClick(commandName: string, event: Event): void {\n if (!this.editor) return;\n event.preventDefault();\n if (typeof this.commands[commandName].action === \"string\") {\n if (this.state[commandName] === false)\n (this.editor as any).setCommandState(commandName, true);\n else (this.editor as any).setCommandState(commandName, false);\n } else if (typeof this.commands[commandName].action === \"function\") {\n (this.commands[commandName].action as CommandAction)(this.editor);\n }\n }\n\n public setEditor(editor: Editor): void {\n this.editor = editor;\n editor.addEventListener(\"selection\", (e) => this.handleSelection(e));\n }\n\n private handleSelection(event: SelectionEvent): void {\n if (event.commandState) {\n for (let command in this.commands) {\n if (event.commandState[command] === undefined) {\n if (this.commands[command].enabled) {\n this.state[command] = this.commands[command].enabled!(\n this.editor!,\n event.focus,\n event.anchor\n );\n } else {\n this.state[command] = event.focus ? false : null;\n }\n } else {\n this.state[command] = event.commandState[command];\n }\n\n if (this.state[command] === true) {\n this.buttons[command].className = \"TMCommandButton TMCommandButton_Active\";\n } else if (this.state[command] === false) {\n this.buttons[command].className = \"TMCommandButton TMCommandButton_Inactive\";\n } else {\n this.buttons[command].className = \"TMCommandButton TMCommandButton_Disabled\";\n }\n }\n }\n }\n\n private handleKeydown(event: KeyboardEvent): void {\n outer: for (let hotkey of this.hotkeys) {\n if (\n (hotkey.key && event.key.toLowerCase() === hotkey.key) ||\n (hotkey.code && event.code === hotkey.code)\n ) {\n for (let modifier of hotkey.modifiers) {\n if (!(event as any)[modifier]) continue outer;\n }\n this.handleClick(hotkey.command, event);\n return;\n }\n }\n }\n}\n\nexport default CommandBar;","'use strict';\nvar check = function (it) {\n return it && it.Math === Math && it;\n};\n\n// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nmodule.exports =\n // eslint-disable-next-line es/no-global-this -- safe\n check(typeof globalThis == 'object' && globalThis) ||\n check(typeof window == 'object' && window) ||\n // eslint-disable-next-line no-restricted-globals -- safe\n check(typeof self == 'object' && self) ||\n check(typeof global == 'object' && global) ||\n check(typeof this == 'object' && this) ||\n // eslint-disable-next-line no-new-func -- fallback\n (function () { return this; })() || Function('return this')();\n","'use strict';\nmodule.exports = function (exec) {\n try {\n return !!exec();\n } catch (error) {\n return true;\n }\n};\n","'use strict';\nvar fails = require('../internals/fails');\n\n// Detect IE8's incomplete defineProperty implementation\nmodule.exports = !fails(function () {\n // eslint-disable-next-line es/no-object-defineproperty -- required for testing\n return Object.defineProperty({}, 1, { get: function () { return 7; } })[1] !== 7;\n});\n","'use strict';\nvar fails = require('../internals/fails');\n\nmodule.exports = !fails(function () {\n // eslint-disable-next-line es/no-function-prototype-bind -- safe\n var test = (function () { /* empty */ }).bind();\n // eslint-disable-next-line no-prototype-builtins -- safe\n return typeof test != 'function' || test.hasOwnProperty('prototype');\n});\n","'use strict';\nvar NATIVE_BIND = require('../internals/function-bind-native');\n\nvar FunctionPrototype = Function.prototype;\nvar call = FunctionPrototype.call;\n// eslint-disable-next-line es/no-function-prototype-bind -- safe\nvar uncurryThisWithBind = NATIVE_BIND && FunctionPrototype.bind.bind(call, call);\n\nmodule.exports = NATIVE_BIND ? uncurryThisWithBind : function (fn) {\n return function () {\n return call.apply(fn, arguments);\n };\n};\n","'use strict';\n// https://tc39.es/ecma262/#sec-IsHTMLDDA-internal-slot\nvar documentAll = typeof document == 'object' && document.all;\n\n// `IsCallable` abstract operation\n// https://tc39.es/ecma262/#sec-iscallable\n// eslint-disable-next-line unicorn/no-typeof-undefined -- required for testing\nmodule.exports = typeof documentAll == 'undefined' && documentAll !== undefined ? function (argument) {\n return typeof argument == 'function' || argument === documentAll;\n} : function (argument) {\n return typeof argument == 'function';\n};\n","'use strict';\n// we can't use just `it == null` since of `document.all` special case\n// https://tc39.es/ecma262/#sec-IsHTMLDDA-internal-slot-aec\nmodule.exports = function (it) {\n return it === null || it === undefined;\n};\n","'use strict';\nvar isNullOrUndefined = require('../internals/is-null-or-undefined');\n\nvar $TypeError = TypeError;\n\n// `RequireObjectCoercible` abstract operation\n// https://tc39.es/ecma262/#sec-requireobjectcoercible\nmodule.exports = function (it) {\n if (isNullOrUndefined(it)) throw new $TypeError(\"Can't call method on \" + it);\n return it;\n};\n","'use strict';\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nvar $Object = Object;\n\n// `ToObject` abstract operation\n// https://tc39.es/ecma262/#sec-toobject\nmodule.exports = function (argument) {\n return $Object(requireObjectCoercible(argument));\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar toObject = require('../internals/to-object');\n\nvar hasOwnProperty = uncurryThis({}.hasOwnProperty);\n\n// `HasOwnProperty` abstract operation\n// https://tc39.es/ecma262/#sec-hasownproperty\n// eslint-disable-next-line es/no-object-hasown -- safe\nmodule.exports = Object.hasOwn || function hasOwn(it, key) {\n return hasOwnProperty(toObject(it), key);\n};\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar hasOwn = require('../internals/has-own-property');\n\nvar FunctionPrototype = Function.prototype;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar getDescriptor = DESCRIPTORS && Object.getOwnPropertyDescriptor;\n\nvar EXISTS = hasOwn(FunctionPrototype, 'name');\n// additional protection from minified / mangled / dropped function names\nvar PROPER = EXISTS && (function something() { /* empty */ }).name === 'something';\nvar CONFIGURABLE = EXISTS && (!DESCRIPTORS || (DESCRIPTORS && getDescriptor(FunctionPrototype, 'name').configurable));\n\nmodule.exports = {\n EXISTS: EXISTS,\n PROPER: PROPER,\n CONFIGURABLE: CONFIGURABLE\n};\n","'use strict';\nmodule.exports = false;\n","'use strict';\nvar globalThis = require('../internals/global-this');\n\n// eslint-disable-next-line es/no-object-defineproperty -- safe\nvar defineProperty = Object.defineProperty;\n\nmodule.exports = function (key, value) {\n try {\n defineProperty(globalThis, key, { value: value, configurable: true, writable: true });\n } catch (error) {\n globalThis[key] = value;\n } return value;\n};\n","'use strict';\nvar IS_PURE = require('../internals/is-pure');\nvar globalThis = require('../internals/global-this');\nvar defineGlobalProperty = require('../internals/define-global-property');\n\nvar SHARED = '__core-js_shared__';\nvar store = module.exports = globalThis[SHARED] || defineGlobalProperty(SHARED, {});\n\n(store.versions || (store.versions = [])).push({\n version: '3.42.0',\n mode: IS_PURE ? 'pure' : 'global',\n copyright: '© 2014-2025 Denis Pushkarev (zloirock.ru)',\n license: 'https://github.com/zloirock/core-js/blob/v3.42.0/LICENSE',\n source: 'https://github.com/zloirock/core-js'\n});\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar isCallable = require('../internals/is-callable');\nvar store = require('../internals/shared-store');\n\nvar functionToString = uncurryThis(Function.toString);\n\n// this helper broken in `core-js@3.4.1-3.4.4`, so we can't use `shared` helper\nif (!isCallable(store.inspectSource)) {\n store.inspectSource = function (it) {\n return functionToString(it);\n };\n}\n\nmodule.exports = store.inspectSource;\n","'use strict';\nvar globalThis = require('../internals/global-this');\nvar isCallable = require('../internals/is-callable');\n\nvar WeakMap = globalThis.WeakMap;\n\nmodule.exports = isCallable(WeakMap) && /native code/.test(String(WeakMap));\n","'use strict';\nvar isCallable = require('../internals/is-callable');\n\nmodule.exports = function (it) {\n return typeof it == 'object' ? it !== null : isCallable(it);\n};\n","'use strict';\nvar globalThis = require('../internals/global-this');\nvar isObject = require('../internals/is-object');\n\nvar document = globalThis.document;\n// typeof document.createElement is 'object' in old IE\nvar EXISTS = isObject(document) && isObject(document.createElement);\n\nmodule.exports = function (it) {\n return EXISTS ? document.createElement(it) : {};\n};\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar fails = require('../internals/fails');\nvar createElement = require('../internals/document-create-element');\n\n// Thanks to IE8 for its funny defineProperty\nmodule.exports = !DESCRIPTORS && !fails(function () {\n // eslint-disable-next-line es/no-object-defineproperty -- required for testing\n return Object.defineProperty(createElement('div'), 'a', {\n get: function () { return 7; }\n }).a !== 7;\n});\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar fails = require('../internals/fails');\n\n// V8 ~ Chrome 36-\n// https://bugs.chromium.org/p/v8/issues/detail?id=3334\nmodule.exports = DESCRIPTORS && fails(function () {\n // eslint-disable-next-line es/no-object-defineproperty -- required for testing\n return Object.defineProperty(function () { /* empty */ }, 'prototype', {\n value: 42,\n writable: false\n }).prototype !== 42;\n});\n","'use strict';\nvar isObject = require('../internals/is-object');\n\nvar $String = String;\nvar $TypeError = TypeError;\n\n// `Assert: Type(argument) is Object`\nmodule.exports = function (argument) {\n if (isObject(argument)) return argument;\n throw new $TypeError($String(argument) + ' is not an object');\n};\n","'use strict';\nvar NATIVE_BIND = require('../internals/function-bind-native');\n\nvar call = Function.prototype.call;\n// eslint-disable-next-line es/no-function-prototype-bind -- safe\nmodule.exports = NATIVE_BIND ? call.bind(call) : function () {\n return call.apply(call, arguments);\n};\n","'use strict';\nvar globalThis = require('../internals/global-this');\nvar isCallable = require('../internals/is-callable');\n\nvar aFunction = function (argument) {\n return isCallable(argument) ? argument : undefined;\n};\n\nmodule.exports = function (namespace, method) {\n return arguments.length < 2 ? aFunction(globalThis[namespace]) : globalThis[namespace] && globalThis[namespace][method];\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\n\nmodule.exports = uncurryThis({}.isPrototypeOf);\n","'use strict';\nvar globalThis = require('../internals/global-this');\n\nvar navigator = globalThis.navigator;\nvar userAgent = navigator && navigator.userAgent;\n\nmodule.exports = userAgent ? String(userAgent) : '';\n","'use strict';\nvar globalThis = require('../internals/global-this');\nvar userAgent = require('../internals/environment-user-agent');\n\nvar process = globalThis.process;\nvar Deno = globalThis.Deno;\nvar versions = process && process.versions || Deno && Deno.version;\nvar v8 = versions && versions.v8;\nvar match, version;\n\nif (v8) {\n match = v8.split('.');\n // in old Chrome, versions of V8 isn't V8 = Chrome / 10\n // but their correct versions are not interesting for us\n version = match[0] > 0 && match[0] < 4 ? 1 : +(match[0] + match[1]);\n}\n\n// BrowserFS NodeJS `process` polyfill incorrectly set `.v8` to `0.0`\n// so check `userAgent` even if `.v8` exists, but 0\nif (!version && userAgent) {\n match = userAgent.match(/Edge\\/(\\d+)/);\n if (!match || match[1] >= 74) {\n match = userAgent.match(/Chrome\\/(\\d+)/);\n if (match) version = +match[1];\n }\n}\n\nmodule.exports = version;\n","'use strict';\n/* eslint-disable es/no-symbol -- required for testing */\nvar V8_VERSION = require('../internals/environment-v8-version');\nvar fails = require('../internals/fails');\nvar globalThis = require('../internals/global-this');\n\nvar $String = globalThis.String;\n\n// eslint-disable-next-line es/no-object-getownpropertysymbols -- required for testing\nmodule.exports = !!Object.getOwnPropertySymbols && !fails(function () {\n var symbol = Symbol('symbol detection');\n // Chrome 38 Symbol has incorrect toString conversion\n // `get-own-property-symbols` polyfill symbols converted to object are not Symbol instances\n // nb: Do not call `String` directly to avoid this being optimized out to `symbol+''` which will,\n // of course, fail.\n return !$String(symbol) || !(Object(symbol) instanceof Symbol) ||\n // Chrome 38-40 symbols are not inherited from DOM collections prototypes to instances\n !Symbol.sham && V8_VERSION && V8_VERSION < 41;\n});\n","'use strict';\n/* eslint-disable es/no-symbol -- required for testing */\nvar NATIVE_SYMBOL = require('../internals/symbol-constructor-detection');\n\nmodule.exports = NATIVE_SYMBOL &&\n !Symbol.sham &&\n typeof Symbol.iterator == 'symbol';\n","'use strict';\nvar getBuiltIn = require('../internals/get-built-in');\nvar isCallable = require('../internals/is-callable');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar USE_SYMBOL_AS_UID = require('../internals/use-symbol-as-uid');\n\nvar $Object = Object;\n\nmodule.exports = USE_SYMBOL_AS_UID ? function (it) {\n return typeof it == 'symbol';\n} : function (it) {\n var $Symbol = getBuiltIn('Symbol');\n return isCallable($Symbol) && isPrototypeOf($Symbol.prototype, $Object(it));\n};\n","'use strict';\nvar $String = String;\n\nmodule.exports = function (argument) {\n try {\n return $String(argument);\n } catch (error) {\n return 'Object';\n }\n};\n","'use strict';\nvar isCallable = require('../internals/is-callable');\nvar tryToString = require('../internals/try-to-string');\n\nvar $TypeError = TypeError;\n\n// `Assert: IsCallable(argument) is true`\nmodule.exports = function (argument) {\n if (isCallable(argument)) return argument;\n throw new $TypeError(tryToString(argument) + ' is not a function');\n};\n","'use strict';\nvar aCallable = require('../internals/a-callable');\nvar isNullOrUndefined = require('../internals/is-null-or-undefined');\n\n// `GetMethod` abstract operation\n// https://tc39.es/ecma262/#sec-getmethod\nmodule.exports = function (V, P) {\n var func = V[P];\n return isNullOrUndefined(func) ? undefined : aCallable(func);\n};\n","'use strict';\nvar call = require('../internals/function-call');\nvar isCallable = require('../internals/is-callable');\nvar isObject = require('../internals/is-object');\n\nvar $TypeError = TypeError;\n\n// `OrdinaryToPrimitive` abstract operation\n// https://tc39.es/ecma262/#sec-ordinarytoprimitive\nmodule.exports = function (input, pref) {\n var fn, val;\n if (pref === 'string' && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) return val;\n if (isCallable(fn = input.valueOf) && !isObject(val = call(fn, input))) return val;\n if (pref !== 'string' && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) return val;\n throw new $TypeError(\"Can't convert object to primitive value\");\n};\n","'use strict';\nvar store = require('../internals/shared-store');\n\nmodule.exports = function (key, value) {\n return store[key] || (store[key] = value || {});\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\n\nvar id = 0;\nvar postfix = Math.random();\nvar toString = uncurryThis(1.0.toString);\n\nmodule.exports = function (key) {\n return 'Symbol(' + (key === undefined ? '' : key) + ')_' + toString(++id + postfix, 36);\n};\n","'use strict';\nvar globalThis = require('../internals/global-this');\nvar shared = require('../internals/shared');\nvar hasOwn = require('../internals/has-own-property');\nvar uid = require('../internals/uid');\nvar NATIVE_SYMBOL = require('../internals/symbol-constructor-detection');\nvar USE_SYMBOL_AS_UID = require('../internals/use-symbol-as-uid');\n\nvar Symbol = globalThis.Symbol;\nvar WellKnownSymbolsStore = shared('wks');\nvar createWellKnownSymbol = USE_SYMBOL_AS_UID ? Symbol['for'] || Symbol : Symbol && Symbol.withoutSetter || uid;\n\nmodule.exports = function (name) {\n if (!hasOwn(WellKnownSymbolsStore, name)) {\n WellKnownSymbolsStore[name] = NATIVE_SYMBOL && hasOwn(Symbol, name)\n ? Symbol[name]\n : createWellKnownSymbol('Symbol.' + name);\n } return WellKnownSymbolsStore[name];\n};\n","'use strict';\nvar call = require('../internals/function-call');\nvar isObject = require('../internals/is-object');\nvar isSymbol = require('../internals/is-symbol');\nvar getMethod = require('../internals/get-method');\nvar ordinaryToPrimitive = require('../internals/ordinary-to-primitive');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar $TypeError = TypeError;\nvar TO_PRIMITIVE = wellKnownSymbol('toPrimitive');\n\n// `ToPrimitive` abstract operation\n// https://tc39.es/ecma262/#sec-toprimitive\nmodule.exports = function (input, pref) {\n if (!isObject(input) || isSymbol(input)) return input;\n var exoticToPrim = getMethod(input, TO_PRIMITIVE);\n var result;\n if (exoticToPrim) {\n if (pref === undefined) pref = 'default';\n result = call(exoticToPrim, input, pref);\n if (!isObject(result) || isSymbol(result)) return result;\n throw new $TypeError(\"Can't convert object to primitive value\");\n }\n if (pref === undefined) pref = 'number';\n return ordinaryToPrimitive(input, pref);\n};\n","'use strict';\nvar toPrimitive = require('../internals/to-primitive');\nvar isSymbol = require('../internals/is-symbol');\n\n// `ToPropertyKey` abstract operation\n// https://tc39.es/ecma262/#sec-topropertykey\nmodule.exports = function (argument) {\n var key = toPrimitive(argument, 'string');\n return isSymbol(key) ? key : key + '';\n};\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar IE8_DOM_DEFINE = require('../internals/ie8-dom-define');\nvar V8_PROTOTYPE_DEFINE_BUG = require('../internals/v8-prototype-define-bug');\nvar anObject = require('../internals/an-object');\nvar toPropertyKey = require('../internals/to-property-key');\n\nvar $TypeError = TypeError;\n// eslint-disable-next-line es/no-object-defineproperty -- safe\nvar $defineProperty = Object.defineProperty;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\nvar ENUMERABLE = 'enumerable';\nvar CONFIGURABLE = 'configurable';\nvar WRITABLE = 'writable';\n\n// `Object.defineProperty` method\n// https://tc39.es/ecma262/#sec-object.defineproperty\nexports.f = DESCRIPTORS ? V8_PROTOTYPE_DEFINE_BUG ? function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPropertyKey(P);\n anObject(Attributes);\n if (typeof O === 'function' && P === 'prototype' && 'value' in Attributes && WRITABLE in Attributes && !Attributes[WRITABLE]) {\n var current = $getOwnPropertyDescriptor(O, P);\n if (current && current[WRITABLE]) {\n O[P] = Attributes.value;\n Attributes = {\n configurable: CONFIGURABLE in Attributes ? Attributes[CONFIGURABLE] : current[CONFIGURABLE],\n enumerable: ENUMERABLE in Attributes ? Attributes[ENUMERABLE] : current[ENUMERABLE],\n writable: false\n };\n }\n } return $defineProperty(O, P, Attributes);\n} : $defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPropertyKey(P);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return $defineProperty(O, P, Attributes);\n } catch (error) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw new $TypeError('Accessors not supported');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n","'use strict';\nmodule.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar definePropertyModule = require('../internals/object-define-property');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\n\nmodule.exports = DESCRIPTORS ? function (object, key, value) {\n return definePropertyModule.f(object, key, createPropertyDescriptor(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n","'use strict';\nvar shared = require('../internals/shared');\nvar uid = require('../internals/uid');\n\nvar keys = shared('keys');\n\nmodule.exports = function (key) {\n return keys[key] || (keys[key] = uid(key));\n};\n","'use strict';\nmodule.exports = {};\n","'use strict';\nvar NATIVE_WEAK_MAP = require('../internals/weak-map-basic-detection');\nvar globalThis = require('../internals/global-this');\nvar isObject = require('../internals/is-object');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar hasOwn = require('../internals/has-own-property');\nvar shared = require('../internals/shared-store');\nvar sharedKey = require('../internals/shared-key');\nvar hiddenKeys = require('../internals/hidden-keys');\n\nvar OBJECT_ALREADY_INITIALIZED = 'Object already initialized';\nvar TypeError = globalThis.TypeError;\nvar WeakMap = globalThis.WeakMap;\nvar set, get, has;\n\nvar enforce = function (it) {\n return has(it) ? get(it) : set(it, {});\n};\n\nvar getterFor = function (TYPE) {\n return function (it) {\n var state;\n if (!isObject(it) || (state = get(it)).type !== TYPE) {\n throw new TypeError('Incompatible receiver, ' + TYPE + ' required');\n } return state;\n };\n};\n\nif (NATIVE_WEAK_MAP || shared.state) {\n var store = shared.state || (shared.state = new WeakMap());\n /* eslint-disable no-self-assign -- prototype methods protection */\n store.get = store.get;\n store.has = store.has;\n store.set = store.set;\n /* eslint-enable no-self-assign -- prototype methods protection */\n set = function (it, metadata) {\n if (store.has(it)) throw new TypeError(OBJECT_ALREADY_INITIALIZED);\n metadata.facade = it;\n store.set(it, metadata);\n return metadata;\n };\n get = function (it) {\n return store.get(it) || {};\n };\n has = function (it) {\n return store.has(it);\n };\n} else {\n var STATE = sharedKey('state');\n hiddenKeys[STATE] = true;\n set = function (it, metadata) {\n if (hasOwn(it, STATE)) throw new TypeError(OBJECT_ALREADY_INITIALIZED);\n metadata.facade = it;\n createNonEnumerableProperty(it, STATE, metadata);\n return metadata;\n };\n get = function (it) {\n return hasOwn(it, STATE) ? it[STATE] : {};\n };\n has = function (it) {\n return hasOwn(it, STATE);\n };\n}\n\nmodule.exports = {\n set: set,\n get: get,\n has: has,\n enforce: enforce,\n getterFor: getterFor\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar fails = require('../internals/fails');\nvar isCallable = require('../internals/is-callable');\nvar hasOwn = require('../internals/has-own-property');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar CONFIGURABLE_FUNCTION_NAME = require('../internals/function-name').CONFIGURABLE;\nvar inspectSource = require('../internals/inspect-source');\nvar InternalStateModule = require('../internals/internal-state');\n\nvar enforceInternalState = InternalStateModule.enforce;\nvar getInternalState = InternalStateModule.get;\nvar $String = String;\n// eslint-disable-next-line es/no-object-defineproperty -- safe\nvar defineProperty = Object.defineProperty;\nvar stringSlice = uncurryThis(''.slice);\nvar replace = uncurryThis(''.replace);\nvar join = uncurryThis([].join);\n\nvar CONFIGURABLE_LENGTH = DESCRIPTORS && !fails(function () {\n return defineProperty(function () { /* empty */ }, 'length', { value: 8 }).length !== 8;\n});\n\nvar TEMPLATE = String(String).split('String');\n\nvar makeBuiltIn = module.exports = function (value, name, options) {\n if (stringSlice($String(name), 0, 7) === 'Symbol(') {\n name = '[' + replace($String(name), /^Symbol\\(([^)]*)\\).*$/, '$1') + ']';\n }\n if (options && options.getter) name = 'get ' + name;\n if (options && options.setter) name = 'set ' + name;\n if (!hasOwn(value, 'name') || (CONFIGURABLE_FUNCTION_NAME && value.name !== name)) {\n if (DESCRIPTORS) defineProperty(value, 'name', { value: name, configurable: true });\n else value.name = name;\n }\n if (CONFIGURABLE_LENGTH && options && hasOwn(options, 'arity') && value.length !== options.arity) {\n defineProperty(value, 'length', { value: options.arity });\n }\n try {\n if (options && hasOwn(options, 'constructor') && options.constructor) {\n if (DESCRIPTORS) defineProperty(value, 'prototype', { writable: false });\n // in V8 ~ Chrome 53, prototypes of some methods, like `Array.prototype.values`, are non-writable\n } else if (value.prototype) value.prototype = undefined;\n } catch (error) { /* empty */ }\n var state = enforceInternalState(value);\n if (!hasOwn(state, 'source')) {\n state.source = join(TEMPLATE, typeof name == 'string' ? name : '');\n } return value;\n};\n\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n// eslint-disable-next-line no-extend-native -- required\nFunction.prototype.toString = makeBuiltIn(function toString() {\n return isCallable(this) && getInternalState(this).source || inspectSource(this);\n}, 'toString');\n","'use strict';\nvar makeBuiltIn = require('../internals/make-built-in');\nvar defineProperty = require('../internals/object-define-property');\n\nmodule.exports = function (target, name, descriptor) {\n if (descriptor.get) makeBuiltIn(descriptor.get, name, { getter: true });\n if (descriptor.set) makeBuiltIn(descriptor.set, name, { setter: true });\n return defineProperty.f(target, name, descriptor);\n};\n","'use strict';\nvar anObject = require('../internals/an-object');\n\n// `RegExp.prototype.flags` getter implementation\n// https://tc39.es/ecma262/#sec-get-regexp.prototype.flags\nmodule.exports = function () {\n var that = anObject(this);\n var result = '';\n if (that.hasIndices) result += 'd';\n if (that.global) result += 'g';\n if (that.ignoreCase) result += 'i';\n if (that.multiline) result += 'm';\n if (that.dotAll) result += 's';\n if (that.unicode) result += 'u';\n if (that.unicodeSets) result += 'v';\n if (that.sticky) result += 'y';\n return result;\n};\n","'use strict';\nvar globalThis = require('../internals/global-this');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar defineBuiltInAccessor = require('../internals/define-built-in-accessor');\nvar regExpFlags = require('../internals/regexp-flags');\nvar fails = require('../internals/fails');\n\n// babel-minify and Closure Compiler transpiles RegExp('.', 'd') -> /./d and it causes SyntaxError\nvar RegExp = globalThis.RegExp;\nvar RegExpPrototype = RegExp.prototype;\n\nvar FORCED = DESCRIPTORS && fails(function () {\n var INDICES_SUPPORT = true;\n try {\n RegExp('.', 'd');\n } catch (error) {\n INDICES_SUPPORT = false;\n }\n\n var O = {};\n // modern V8 bug\n var calls = '';\n var expected = INDICES_SUPPORT ? 'dgimsy' : 'gimsy';\n\n var addGetter = function (key, chr) {\n // eslint-disable-next-line es/no-object-defineproperty -- safe\n Object.defineProperty(O, key, { get: function () {\n calls += chr;\n return true;\n } });\n };\n\n var pairs = {\n dotAll: 's',\n global: 'g',\n ignoreCase: 'i',\n multiline: 'm',\n sticky: 'y'\n };\n\n if (INDICES_SUPPORT) pairs.hasIndices = 'd';\n\n for (var key in pairs) addGetter(key, pairs[key]);\n\n // eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\n var result = Object.getOwnPropertyDescriptor(RegExpPrototype, 'flags').get.call(O);\n\n return result !== expected || calls !== expected;\n});\n\n// `RegExp.prototype.flags` getter\n// https://tc39.es/ecma262/#sec-get-regexp.prototype.flags\nif (FORCED) defineBuiltInAccessor(RegExpPrototype, 'flags', {\n configurable: true,\n get: regExpFlags\n});\n","export interface GrammarRule {\n regexp: RegExp;\n replacement: string;\n labelPlaceholder?: number;\n}\n\nexport interface HTMLBlockRule {\n start: RegExp;\n end: RegExp | false;\n paraInterrupt: boolean;\n}\n\nexport interface InlineCommand {\n type: 'inline';\n className: string;\n set: {\n pre: string;\n post: string;\n };\n unset: {\n prePattern: RegExp;\n postPattern: RegExp;\n };\n}\n\nexport interface LineCommand {\n type: 'line';\n className: string;\n set: {\n pattern: RegExp;\n replacement: string;\n };\n unset: {\n pattern: RegExp;\n replacement: string;\n };\n}\n\nexport type Command = InlineCommand | LineCommand;\n\nconst replacements: Record<string, RegExp> = {\n ASCIIPunctuation: /[!\"#$%&'()*+,\\-./:;<=>?@[\\]^_`{|}~\\\\]/, \n NotTriggerChar: /[^`_*[\\]()<>!~]/,\n Scheme: /[A-Za-z][A-Za-z0-9+.-]{1,31}/,\n Email: /[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*/, // From CommonMark spec\n HTMLOpenTag: /<HTMLTagName(?:HTMLAttribute)*\\s*\\/?>/,\n HTMLCloseTag: /<\\/HTMLTagName\\s*>/,\n HTMLTagName: /[A-Za-z][A-Za-z0-9-]*/, \n HTMLComment: /<!--(?:[^>-]|(?:[^>-](?:[^-]|-[^-])*[^-]))-->/,\n HTMLPI: /<\\?(?:|.|(?:[^?]|\\?[^>])*)\\?>/,\n HTMLDeclaration: /<![A-Z]+\\s[^>]*>/,\n HTMLCDATA: /<!\\[CDATA\\[.*?\\]\\]>/,\n HTMLAttribute: /\\s+[A-Za-z_:][A-Za-z0-9_.:-]*(?:HTMLAttValue)?/,\n HTMLAttValue: /\\s*=\\s*(?:(?:'[^']*')|(?:\"[^\"]*\")|(?:[^\\s\"'=<>`]+))/,\n KnownTag: /address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h1|h2|h3|h4|h5|h6|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|nav|noframes|ol|optgroup|option|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul/\n};\n\n// From CommonMark.js. \nexport const punctuationLeading = new RegExp(/^(?:[!\"#$%&'()*+,\\-./:;<=>?@[\\]\\\\^_`{|}~\\xA1\\xA7\\xAB\\xB6\\xB7\\xBB\\xBF\\u037E\\u0387\\u055A-\\u055F\\u0589\\u058A\\u05BE\\u05C0\\u05C3\\u05C6\\u05F3\\u05F4\\u0609\\u060A\\u060C\\u060D\\u061B\\u061E\\u061F\\u066A-\\u066D\\u06D4\\u0700-\\u070D\\u07F7-\\u07F9\\u0830-\\u083E\\u085E\\u0964\\u0965\\u0970\\u0AF0\\u0DF4\\u0E4F\\u0E5A\\u0E5B\\u0F04-\\u0F12\\u0F14\\u0F3A-\\u0F3D\\u0F85\\u0FD0-\\u0FD4\\u0FD9\\u0FDA\\u104A-\\u104F\\u10FB\\u1360-\\u1368\\u1400\\u166D\\u166E\\u169B\\u169C\\u16EB-\\u16ED\\u1735\\u1736\\u17D4-\\u17D6\\u17D8-\\u17DA\\u1800-\\u180A\\u1944\\u1945\\u1A1E\\u1A1F\\u1AA0-\\u1AA6\\u1AA8-\\u1AAD\\u1B5A-\\u1B60\\u1BFC-\\u1BFF\\u1C3B-\\u1C3F\\u1C7E\\u1C7F\\u1CC0-\\u1CC7\\u1CD3\\u2010-\\u2027\\u2030-\\u2043\\u2045-\\u2051\\u2053-\\u205E\\u207D\\u207E\\u208D\\u208E\\u2308-\\u230B\\u2329\\u232A\\u2768-\\u2775\\u27C5\\u27C6\\u27E6-\\u27EF\\u2983-\\u2998\\u29D8-\\u29DB\\u29FC\\u29FD\\u2CF9-\\u2CFC\\u2CFE\\u2CFF\\u2D70\\u2E00-\\u2E2E\\u2E30-\\u2E42\\u3001-\\u3003\\u3008-\\u3011\\u3014-\\u301F\\u3030\\u303D\\u30A0\\u30FB\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA673\\uA67E\\uA6F2-\\uA6F7\\uA874-\\uA877\\uA8CE\\uA8CF\\uA8F8-\\uA8FA\\uA8FC\\uA92E\\uA92F\\uA95F\\uA9C1-\\uA9CD\\uA9DE\\uA9DF\\uAA5C-\\uAA5F\\uAADE\\uAADF\\uAAF0\\uAAF1\\uABEB\\uFD3E\\uFD3F\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE61\\uFE63\\uFE68\\uFE6A\\uFE6B\\uFF01-\\uFF03\\uFF05-\\uFF0A\\uFF0C-\\uFF0F\\uFF1A\\uFF1B\\uFF1F\\uFF20\\uFF3B-\\uFF3D\\uFF3F\\uFF5B\\uFF5D\\uFF5F-\\uFF65]|\\uD800[\\uDD00-\\uDD02\\uDF9F\\uDFD0]|\\uD801\\uDD6F|\\uD802[\\uDC57\\uDD1F\\uDD3F\\uDE50-\\uDE58\\uDE7F\\uDEF0-\\uDEF6\\uDF39-\\uDF3F\\uDF99-\\uDF9C]|\\uD804[\\uDC47-\\uDC4D\\uDCBB\\uDCBC\\uDCBE-\\uDCC1\\uDD40-\\uDD43\\uDD74\\uDD75\\uDDC5-\\uDDC9\\uDDCD\\uDDDB\\uDDDD-\\uDDDF\\uDE38-\\uDE3D\\uDEA9]|\\uD805[\\uDCC6\\uDDC1-\\uDDD7\\uDE41-\\uDE43\\uDF3C-\\uDF3E]|\\uD809[\\uDC70-\\uDC74]|\\uD81A[\\uDE6E\\uDE6F\\uDEF5\\uDF37-\\uDF3B\\uDF44]|\\uD82F\\uDC9F|\\uD836[\\uDE87-\\uDE8B])/);\n\nexport const punctuationTrailing = new RegExp(/(?:[!\"#$%&'()*+,\\-./:;<=>?@[\\]\\\\^_`{|}~\\xA1\\xA7\\xAB\\xB6\\xB7\\xBB\\xBF\\u037E\\u0387\\u055A-\\u055F\\u0589\\u058A\\u05BE\\u05C0\\u05C3\\u05C6\\u05F3\\u05F4\\u0609\\u060A\\u060C\\u060D\\u061B\\u061E\\u061F\\u066A-\\u066D\\u06D4\\u0700-\\u070D\\u07F7-\\u07F9\\u0830-\\u083E\\u085E\\u0964\\u0965\\u0970\\u0AF0\\u0DF4\\u0E4F\\u0E5A\\u0E5B\\u0F04-\\u0F12\\u0F14\\u0F3A-\\u0F3D\\u0F85\\u0FD0-\\u0FD4\\u0FD9\\u0FDA\\u104A-\\u104F\\u10FB\\u1360-\\u1368\\u1400\\u166D\\u166E\\u169B\\u169C\\u16EB-\\u16ED\\u1735\\u1736\\u17D4-\\u17D6\\u17D8-\\u17DA\\u1800-\\u180A\\u1944\\u1945\\u1A1E\\u1A1F\\u1AA0-\\u1AA6\\u1AA8-\\u1AAD\\u1B5A-\\u1B60\\u1BFC-\\u1BFF\\u1C3B-\\u1C3F\\u1C7E\\u1C7F\\u1CC0-\\u1CC7\\u1CD3\\u2010-\\u2027\\u2030-\\u2043\\u2045-\\u2051\\u2053-\\u205E\\u207D\\u207E\\u208D\\u208E\\u2308-\\u230B\\u2329\\u232A\\u2768-\\u2775\\u27C5\\u27C6\\u27E6-\\u27EF\\u2983-\\u2998\\u29D8-\\u29DB\\u29FC\\u29FD\\u2CF9-\\u2CFC\\u2CFE\\u2CFF\\u2D70\\u2E00-\\u2E2E\\u2E30-\\u2E42\\u3001-\\u3003\\u3008-\\u3011\\u3014-\\u301F\\u3030\\u303D\\u30A0\\u30FB\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA673\\uA67E\\uA6F2-\\uA6F7\\uA874-\\uA877\\uA8CE\\uA8CF\\uA8F8-\\uA8FA\\uA8FC\\uA92E\\uA92F\\uA95F\\uA9C1-\\uA9CD\\uA9DE\\uA9DF\\uAA5C-\\uAA5F\\uAADE\\uAADF\\uAAF0\\uAAF1\\uABEB\\uFD3E\\uFD3F\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE61\\uFE63\\uFE68\\uFE6A\\uFE6B\\uFF01-\\uFF03\\uFF05-\\uFF0A\\uFF0C-\\uFF0F\\uFF1A\\uFF1B\\uFF1F\\uFF20\\uFF3B-\\uFF3D\\uFF3F\\uFF5B\\uFF5D\\uFF5F-\\uFF65]|\\uD800[\\uDD00-\\uDD02\\uDF9F\\uDFD0]|\\uD801\\uDD6F|\\uD802[\\uDC57\\uDD1F\\uDD3F\\uDE50-\\uDE58\\uDE7F\\uDEF0-\\uDEF6\\uDF39-\\uDF3F\\uDF99-\\uDF9C]|\\uD804[\\uDC47-\\uDC4D\\uDCBB\\uDCBC\\uDCBE-\\uDCC1\\uDD40-\\uDD43\\uDD74\\uDD75\\uDDC5-\\uDDC9\\uDDCD\\uDDDB\\uDDDD-\\uDDDF\\uDE38-\\uDE3D\\uDEA9]|\\uD805[\\uDCC6\\uDDC1-\\uDDD7\\uDE41-\\uDE43\\uDF3C-\\uDF3E]|\\uD809[\\uDC70-\\uDC74]|\\uD81A[\\uDE6E\\uDE6F\\uDEF5\\uDF37-\\uDF3B\\uDF44]|\\uD82F\\uDC9F|\\uD836[\\uDE87-\\uDE8B])$/);\n\n/**\n * This is CommonMark's block grammar, but we're ignoring nested blocks here. \n */ \nexport const lineGrammar: Record<string, GrammarRule> = { \n TMH1: { \n regexp: /^( {0,3}#\\s)(.*?)((?:\\s+#+\\s*)?)$/, \n replacement: '<span class=\"TMMark TMMark_TMH1\">$1</span>$$2<span class=\"TMMark TMMark_TMH1\">$3</span>'\n },\n TMH2: { \n regexp: /^( {0,3}##\\s)(.*?)((?:\\s+#+\\s*)?)$/, \n replacement: '<span class=\"TMMark TMMark_TMH2\">$1</span>$$2<span class=\"TMMark TMMark_TMH2\">$3</span>'\n },\n TMH3: { \n regexp: /^( {0,3}###\\s)(.*?)((?:\\s+#+\\s*)?)$/, \n replacement: '<span class=\"TMMark TMMark_TMH3\">$1</span>$$2<span class=\"TMMark TMMark_TMH3\">$3</span>'\n },\n TMH4: { \n regexp: /^( {0,3}####\\s)(.*?)((?:\\s+#+\\s*)?)$/, \n replacement: '<span class=\"TMMark TMMark_TMH4\">$1</span>$$2<span class=\"TMMark TMMark_TMH4\">$3</span>'\n },\n TMH5: { \n regexp: /^( {0,3}#####\\s)(.*?)((?:\\s+#+\\s*)?)$/, \n replacement: '<span class=\"TMMark TMMark_TMH5\">$1</span>$$2<span class=\"TMMark TMMark_TMH5\">$3</span>'\n },\n TMH6: { \n regexp: /^( {0,3}######\\s)(.*?)((?:\\s+#+\\s*)?)$/, \n replacement: '<span class=\"TMMark TMMark_TMH6\">$1</span>$$2<span class=\"TMMark TMMark_TMH6\">$3</span>'\n },\n TMBlockquote: { \n regexp: /^( {0,3}>[ ]?)(.*)$/, \n replacement: '<span class=\"TMMark TMMark_TMBlockquote\">$1</span>$$2'\n },\n TMCodeFenceBacktickOpen: { \n regexp: /^( {0,3}(?<seq>````*)\\s*)([^`]*?)(\\s*)$/, \n replacement: '<span class=\"TMMark TMMark_TMCodeFenceBacktick\">$1</span><span class=\"TMInfoString\">$3</span>$4'\n },\n TMCodeFenceTildeOpen: { \n regexp: /^( {0,3}(?<seq>~~~~*)\\s*)(.*?)(\\s*)$/, \n replacement: '<span class=\"TMMark TMMark_TMCodeFenceTilde\">$1</span><span class=\"TMInfoString\">$3</span>$4'\n },\n TMCodeFenceBacktickClose: { \n regexp: /^( {0,3}(?<seq>````*))(\\s*)$/, \n replacement: '<span class=\"TMMark TMMark_TMCodeFenceBacktick\">$1</span>$3'\n },\n TMCodeFenceTildeClose: { \n regexp: /^( {0,3}(?<seq>~~~~*))(\\s*)$/, \n replacement: '<span class=\"TMMark TMMark_TMCodeFenceTilde\">$1</span>$3'\n },\n TMBlankLine: { \n regexp: /^([ \\t]*)$/, \n replacement: '$0'\n },\n TMSetextH1Marker: { \n regexp: /^ {0,3}=+\\s*$/, \n replacement: '<span class=\"TMMark TMMark_TMSetextH1Marker\">$0</span>'\n },\n TMSetextH2Marker: { \n regexp: /^ {0,3}-+\\s*$/, \n replacement: '<span class=\"TMMark TMMark_TMSetextH1Marker\">$0</span>'\n },\n TMHR: { \n regexp: /^( {0,3}(\\*[ \\t]*\\*[ \\t]*\\*[ \\t*]*)|(-[ \\t]*-[ \\t]*-[ \\t-]*)|(_[ \\t]*_[ \\t]*_[ \\t_]*))$/, \n replacement: '<span class=\"TMMark TMMark_TMHR\">$0</span>'\n },\n TMUL: { \n regexp: /^( {0,3}[+*-] {1,4})(.*)$/, \n replacement: '<span class=\"TMMark TMMark_TMUL\">$1</span>$$2'\n },\n TMOL: { \n regexp: /^( {0,3}\\d{1,9}[.)] {1,4})(.*)$/, \n replacement: '<span class=\"TMMark TMMark_TMOL\">$1</span>$$2'\n },\n // TODO: This is currently preventing sublists (and any content within list items, really) from working\n TMIndentedCode: { \n regexp: /^( {4}|\\t)(.*)$/, \n replacement: '<span class=\"TMMark TMMark_TMIndentedCode\">$1</span>$2'\n },\n TMLinkReferenceDefinition: {\n // TODO: Link destination can't include unbalanced parantheses, but we just ignore that here \n regexp: /^( {0,3}\\[\\s*)([^\\s\\]](?:[^\\]]|\\\\\\])*?)(\\s*\\]:\\s*)((?:[^\\s<>]+)|(?:<(?:[^<>\\\\]|\\\\.)*>))?(\\s*)((?:\\((?:[^()\\\\]|\\\\.)*\\))|(?:\"(?:[^\"\\\\]|\\\\.)*\")|(?:'(?:[^'\\\\]|\\\\.)*'))?(\\s*)$/, \n replacement: '<span class=\"TMMark TMMark_TMLinkReferenceDefinition\">$1</span><span class=\"TMLinkLabel TMLinkLabel_Definition\">$2</span><span class=\"TMMark TMMark_TMLinkReferenceDefinition\">$3</span><span class=\"TMLinkDestination\">$4</span>$5<span class=\"TMLinkTitle\">$6</span>$7',\n labelPlaceholder: 2, // this defines which placeholder in the above regex is the link \"label\"\n },\n};\n\n/**\n * HTML blocks have multiple different classes of opener and closer. This array defines all the cases\n */\nexport const htmlBlockGrammar: HTMLBlockRule[] = [\n { start: /^ {0,3}<(?:script|pre|style)(?:\\s|>|$)/i, end: /(?:<\\/script>|<\\/pre>|<\\/style>)/i, paraInterrupt: true },\n { start: /^ {0,3}<!--/, end: /-->/, paraInterrupt: true },\n { start: /^ {0,3}<\\?/, end: /\\?>/, paraInterrupt: true },\n { start: /^ {0,3}<![A-Z]/, end: />/, paraInterrupt : true},\n { start: /^ {0,3}<!\\[CDATA\\[/, end: /\\]\\]>/, paraInterrupt : true},\n { start: /^ {0,3}(?:<|<\\/)(?:KnownTag)(?:\\s|>|\\/>|$)/i, end: false, paraInterrupt: true},\n { start: /^ {0,3}(?:HTMLOpenTag|HTMLCloseTag)\\s*$/, end: false, paraInterrupt: false},\n];\n\n/**\n * Structure of the object:\n * Top level entries are rules, each consisting of a regular expressions (in string format) as well as a replacement.\n * In the regular expressions, replacements from the object 'replacements' will be processed before compiling into the property regexp.\n */\nexport const inlineGrammar: Record<string, GrammarRule> = {\n escape : {\n regexp: /^\\\\(ASCIIPunctuation)/,\n replacement : '<span class=\"TMMark TMMark_TMEscape\">\\\\</span>$1'\n },\n code : {\n regexp: /^(`+)((?:[^`])|(?:[^`].*?[^`]))(\\1)/,\n replacement : '<span class=\"TMMark TMMark_TMCode\">$1</span><code class=\"TMCode\">$2</code><span class=\"TMMark TMMark_TMCode\">$3</span>' \n },\n autolink : {\n regexp: /^<((?:Scheme:[^\\s<>]*)|(?:Email))>/,\n replacement: '<span class=\"TMMark TMMark_TMAutolink\">&lt;</span><span class=\"TMAutolink\">$1</span><span class=\"TMMark TMMark_TMAutolink\">&gt;</span>'\n },\n html : {\n regexp: /^((?:HTMLOpenTag)|(?:HTMLCloseTag)|(?:HTMLComment)|(?:HTMLPI)|(?:HTMLDeclaration)|(?:HTMLCDATA))/,\n replacement: '<span class=\"TMHTML\">$1</span>',\n },\n linkOpen : {\n regexp: /^\\[/,\n replacement: ''\n },\n imageOpen : {\n regexp: /^!\\[/,\n replacement : ''\n },\n linkLabel : {\n regexp: /^(\\[\\s*)([^\\]]*?)(\\s*\\])/,\n replacement: '',\n labelPlaceholder: 2\n },\n default : {\n regexp: /^(.|(?:NotTriggerChar+))/,\n replacement: '$1'\n }\n};\n\n// Process replacements in regexps\nconst replacementRegexp = new RegExp(Object.keys(replacements).join('|'));\n\n// Inline\nconst inlineRules = [...Object.keys(inlineGrammar)];\nfor (let rule of inlineRules) {\n let re = inlineGrammar[rule].regexp.source;\n // Replace while there is something to replace. This means it also works over multiple levels (replacements containing replacements)\n while (re.match(replacementRegexp)) {\n re = re.replace(replacementRegexp, (string) => { return replacements[string].source; });\n }\n inlineGrammar[rule].regexp = new RegExp(re, inlineGrammar[rule].regexp.flags);\n}\n\n// HTML Block (only opening rule is processed currently)\nfor (let rule of htmlBlockGrammar) {\n let re = rule.start.source;\n // Replace while there is something to replace. This means it also works over multiple levels (replacements containing replacements)\n while (re.match(replacementRegexp)) {\n re = re.replace(replacementRegexp, (string) => { return replacements[string].source; });\n }\n rule.start = new RegExp(re, rule.start.flags);\n}\n\n/**\n * Creates a merged inline grammar by combining the default inline grammar with custom rules.\n * Custom rules are processed and their regexp patterns are expanded with replacements.\n * @param customRules - Object containing custom inline grammar rules\n * @returns Merged inline grammar object\n */\nexport function createMergedInlineGrammar(customRules: Record<string, GrammarRule> = {}): Record<string, GrammarRule> {\n const merged = { ...inlineGrammar };\n \n // Process custom rules\n for (const [ruleName, rule] of Object.entries(customRules)) {\n // Copy the rule to avoid modifying the original\n const processedRule = { ...rule };\n \n // Process replacements in the regexp\n let regexpSource = rule.regexp.source;\n const replacementRegexp = new RegExp(Object.keys(replacements).join('|'));\n \n // Replace while there is something to replace\n while (regexpSource.match(replacementRegexp)) {\n regexpSource = regexpSource.replace(replacementRegexp, (match) => {\n return replacements[match].source;\n });\n }\n \n processedRule.regexp = new RegExp(regexpSource, rule.regexp.flags);\n merged[ruleName] = processedRule;\n }\n \n return merged;\n}\n\n/**\n * Escapes HTML special characters (<, >, and &) in the string.\n * @param {string} string The raw string to be escaped\n * @returns {string} The string, ready to be used in HTML\n */\nexport function htmlescape(string: string): string {\n return (string ? string : '')\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;');\n}\n\n/**\n * Contains the commands that can be sent to the editor. Contains objects with a name representing the name of the command.\n * Each of the objects contains the following keys:\n * \n * - type: Can be either inline (for inline formatting) or line (for block / line formatting).\n * - className: Used to determine whether the command is active at a given position. \n * For line formatting, this looks at the class of the line element. For inline elements, tries to find an enclosing element with that class.\n * - set / unset: Contain instructions how to set and unset the command. For line type commands, both consist of a pattern and replacement that \n * will be applied to each line (using String.replace). For inline type commands, the set object contains a pre and post string which will\n * be inserted before and after the selection. The unset object contains a prePattern and a postPattern. Both should be regular expressions and \n * they will be applied to the portion of the line before and after the selection (using String.replace, with an empty replacement string).\n */\nexport const commands: Record<string, Command> = {\n // Replacements for unset for inline commands are '' by default\n bold: {\n type: 'inline', \n className: 'TMStrong', \n set: {pre: '**', post: '**'}, \n unset: {prePattern: /(?:\\*\\*|__)$/, postPattern: /^(?:\\*\\*|__)/}\n }, \n italic: {\n type: 'inline', \n className: 'TMEm', \n set: {pre: '*', post: '*'}, \n unset: {prePattern: /(?:\\*|_)$/, postPattern: /^(?:\\*|_)/}\n },\n code: {\n type: 'inline', \n className: 'TMCode', \n set: {pre: '`', post: '`'}, \n unset: {prePattern: /`+$/, postPattern: /^`+/} // FIXME this doesn't ensure balanced backticks right now\n }, \n strikethrough: {\n type: 'inline', \n className: 'TMStrikethrough', \n set: {pre: '~~', post: '~~'}, \n unset: {prePattern:/~~$/, postPattern: /^~~/ }\n },\n h1: {\n type: 'line', \n className: 'TMH1', \n set: {pattern: /^( {0,3}(?:(?:#+|[0-9]{1,9}[).]|[>\\-*+])\\s+)?)(.*)$/, replacement: '# $2'}, \n unset: {pattern: /^( {0,3}#\\s+)(.*?)((?:\\s+#+\\s*)?)$/, replacement: '$2'}\n },\n h2: {\n type: 'line', \n className: 'TMH2', \n set: {pattern: /^( {0,3}(?:(?:#+|[0-9]{1,9}[).]|[>\\-*+])\\s+)?)(.*)$/, replacement: '## $2'}, \n unset: {pattern: /^( {0,3}##\\s+)(.*?)((?:\\s+#+\\s*)?)$/, replacement: '$2'}\n },\n h3: {\n type: 'line', \n className: 'TMH3', \n set: {pattern: /^( {0,3}(?:(?:#+|[0-9]{1,9}[).]|[>\\-*+])\\s+)?)(.*)$/, replacement: '### $2'}, \n unset: {pattern: /^( {0,3}###\\s+)(.*?)((?:\\s+#+\\s*)?)$/, replacement: '$2'}\n },\n h4: {\n type: 'line', \n className: 'TMH4', \n set: {pattern: /^( {0,3}(?:(?:#+|[0-9]{1,9}[).]|[>\\-*+])\\s+)?)(.*)$/, replacement: '#### $2'}, \n unset: {pattern: /^( {0,3}####\\s+)(.*?)((?:\\s+#+\\s*)?)$/, replacement: '$2'}\n },\n h5: {\n type: 'line', \n className: 'TMH5', \n set: {pattern: /^( {0,3}(?:(?:#+|[0-9]{1,9}[).]|[>\\-*+])\\s+)?)(.*)$/, replacement: '##### $2'}, \n unset: {pattern: /^( {0,3}#####\\s+)(.*?)((?:\\s+#+\\s*)?)$/, replacement: '$2'}\n },\n h6: {\n type: 'line', \n className: 'TMH6', \n set: {pattern: /^( {0,3}(?:(?:#+|[0-9]{1,9}[).]|[>\\-*+])\\s+)?)(.*)$/, replacement: '###### $2'}, \n unset: {pattern: /^( {0,3}######\\s+)(.*?)((?:\\s+#+\\s*)?)$/, replacement: '$2'}\n },\n ul: {\n type: 'line', \n className: 'TMUL', \n set: {pattern: /^( {0,3}(?:(?:#+|[0-9]{1,9}[).]|[>\\-*+])\\s+)?)(.*)$/, replacement: '- $2'}, \n unset: {pattern: /^( {0,3}[+*-] {1,4})(.*)$/, replacement: '$2'}\n },\n ol: {\n type: 'line', \n className: 'TMOL', \n set: {pattern: /^( {0,3}(?:(?:#+|[0-9]{1,9}[).]|[>\\-*+])\\s+)?)(.*)$/, replacement: '$#. $2'}, \n unset: {pattern: /^( {0,3}\\d{1,9}[.)] {1,4})(.*)$/, replacement: '$2'}\n }, \n blockquote: {\n type: 'line', \n className: 'TMBlockquote', \n set: {pattern: /^( {0,3}(?:(?:#+|[0-9]{1,9}[).]|[>\\-*+])\\s+)?)(.*)$/, replacement: '> $2'}, \n unset: {pattern: /^( {0,3}>[ ]?)(.*)$/, replacement: '$2'}\n },\n};","import {\n inlineGrammar,\n lineGrammar,\n punctuationLeading,\n punctuationTrailing,\n htmlescape,\n htmlBlockGrammar,\n commands,\n HTMLBlockRule,\n Command,\n GrammarRule,\n createMergedInlineGrammar,\n} from \"./grammar\";\n\nexport interface EditorProps {\n element?: string | HTMLElement;\n editor?: string | HTMLElement;\n content?: string;\n textarea?: string | HTMLTextAreaElement;\n customInlineGrammar?: Record<string, GrammarRule>;\n}\n\nexport interface Position {\n row: number;\n col: number;\n}\n\nexport interface HistoryState {\n content: string;\n selection: Position | null;\n anchor: Position | null;\n}\n\nexport interface ChangeEvent {\n content: string;\n linesDirty: boolean[];\n}\n\nexport interface SelectionEvent {\n focus: Position;\n anchor: Position;\n commandState: Record<string, boolean | null>;\n}\n\nexport interface DropEvent {\n dataTransfer: DataTransfer;\n}\n\ntype EventType = 'change' | 'selection' | 'drop';\ntype EventHandler<T> = (event: T) => void;\n\nexport class Editor {\n public e: HTMLDivElement | null = null;\n public textarea: HTMLTextAreaElement | null = null;\n public lines: string[] = [];\n public lineElements: NodeListOf<ChildNode> | HTMLCollection | ChildNode[] = [];\n public lineTypes: string[] = [];\n public lineCaptures: RegExpExecArray[] = [];\n public lineReplacements: string[] = [];\n public linkLabels: string[] = [];\n public lineDirty: boolean[] = [];\n public lastCommandState: Record<string, boolean | null> | null = null;\n private customInlineGrammar: Record<string, GrammarRule> = {};\n private mergedInlineGrammar: Record<string, GrammarRule> = inlineGrammar;\n private hasFocus: boolean = true;\n\n public listeners: {\n change: EventHandler<ChangeEvent>[];\n selection: EventHandler<SelectionEvent>[];\n drop: EventHandler<DropEvent>[];\n } = {\n change: [],\n selection: [],\n drop: [],\n };\n\n private undoStack: HistoryState[] = [];\n private redoStack: HistoryState[] = [];\n private isRestoringHistory: boolean = false;\n private maxHistory: number = 100;\n\n constructor(props: EditorProps = {}) {\n this.e = null;\n this.textarea = null;\n this.lines = [];\n this.lineElements = [] as ChildNode[];\n this.lineTypes = [];\n this.lineCaptures = [];\n this.lineReplacements = [];\n this.linkLabels = [];\n this.lineDirty = [];\n this.lastCommandState = null;\n this.hasFocus = true;\n this.customInlineGrammar = props.customInlineGrammar || {};\n this.mergedInlineGrammar = createMergedInlineGrammar(this.customInlineGrammar);\n\n this.listeners = {\n change: [],\n selection: [],\n drop: [],\n };\n\n let element: HTMLElement | null = null;\n if (typeof props.element === 'string') {\n element = document.getElementById(props.element);\n } else if (props.element) {\n element = props.element;\n }\n\n if (typeof props.textarea === 'string') {\n this.textarea = document.getElementById(props.textarea) as HTMLTextAreaElement;\n } else if (props.textarea) {\n this.textarea = props.textarea;\n }\n\n if (this.textarea) {\n if (!element) element = this.textarea;\n }\n\n if (!element) {\n element = document.getElementsByTagName(\"body\")[0];\n }\n if (element && element.tagName === \"TEXTAREA\") {\n this.textarea = element as HTMLTextAreaElement;\n element = this.textarea.parentNode as HTMLElement;\n }\n\n if (this.textarea) {\n this.textarea.style.display = \"none\";\n }\n\n this.undoStack = [];\n this.redoStack = [];\n this.isRestoringHistory = false;\n this.maxHistory = 100;\n\n this.createEditorElement(element, props);\n this.setContent(\n typeof props.content === \"string\"\n ? props.content\n : this.textarea\n ? this.textarea.value\n : \"# Hello TinyMDE!\\nEdit **here**\"\n );\n \n this.e!.addEventListener(\"keydown\", (e) => this.handleUndoRedoKey(e));\n }\n\n get canUndo(): boolean {\n return this.undoStack.length >= 2;\n }\n\n get canRedo(): boolean {\n return this.redoStack.length > 0;\n }\n\n private pushHistory(): void {\n if (this.isRestoringHistory) return;\n this.pushCurrentState();\n this.redoStack = [];\n }\n\n private pushCurrentState(): void {\n this.undoStack.push({\n content: this.getContent(),\n selection: this.getSelection(),\n anchor: this.getSelection(true),\n });\n if (this.undoStack.length > this.maxHistory) this.undoStack.shift();\n }\n\n public undo(): void {\n if (this.undoStack.length < 2) return;\n this.isRestoringHistory = true;\n this.pushCurrentState();\n const current = this.undoStack.pop()!;\n this.redoStack.push(current);\n const prev = this.undoStack[this.undoStack.length - 1];\n this.setContent(prev.content);\n if (prev.selection) this.setSelection(prev.selection, prev.anchor);\n this.undoStack.pop();\n this.isRestoringHistory = false;\n }\n\n public redo(): void {\n if (!this.redoStack.length) return;\n this.isRestoringHistory = true;\n this.pushCurrentState();\n const next = this.redoStack.pop()!;\n this.setContent(next.content);\n if (next.selection) this.setSelection(next.selection, next.anchor);\n this.isRestoringHistory = false;\n }\n\n private handleUndoRedoKey(e: KeyboardEvent): void {\n const isMac = /Mac|iPod|iPhone|iPad/.test(navigator.platform);\n const ctrl = isMac ? e.metaKey : e.ctrlKey;\n if (ctrl && !e.altKey) {\n if (e.key === \"z\" || e.key === \"Z\") {\n if (e.shiftKey) {\n this.redo();\n } else {\n this.undo();\n }\n e.preventDefault();\n } else if (e.key === \"y\" || e.key === \"Y\") {\n this.redo();\n e.preventDefault();\n }\n }\n }\n\n private createEditorElement(element: HTMLElement, props: EditorProps): void {\n if (props && props.editor !== undefined) {\n if (typeof props.editor === 'string') {\n this.e = document.getElementById(props.editor) as HTMLDivElement;\n } else {\n this.e = props.editor as HTMLDivElement;\n }\n } else {\n this.e = document.createElement(\"div\");\n }\n\n this.e.classList.add(\"TinyMDE\");\n this.e.contentEditable = \"true\";\n this.e.style.whiteSpace = \"pre-wrap\";\n (this.e.style as any).webkitUserModify = \"read-write-plaintext-only\";\n\n if (props.editor === undefined) {\n if (\n this.textarea &&\n this.textarea.parentNode === element &&\n this.textarea.nextSibling\n ) {\n element.insertBefore(this.e, this.textarea.nextSibling);\n } else {\n element.appendChild(this.e);\n }\n }\n\n this.e.addEventListener(\"input\", (e) => this.handleInputEvent(e));\n this.e.addEventListener(\"beforeinput\", (e) => this.handleBeforeInputEvent(e));\n this.e.addEventListener(\"compositionend\", (e) => this.handleInputEvent(e));\n document.addEventListener(\"selectionchange\", (e) => {\n if (this.hasFocus) { this.handleSelectionChangeEvent(e); }\n }\n );\n this.e.addEventListener(\"blur\", () => this.hasFocus = false );\n this.e.addEventListener(\"focus\", () => this.hasFocus = true );\n this.e.addEventListener(\"paste\", (e) => this.handlePaste(e));\n this.e.addEventListener(\"drop\", (e) => this.handleDrop(e));\n this.lineElements = this.e.childNodes;\n }\n\n public setContent(content: string): void {\n while (this.e!.firstChild) {\n this.e!.removeChild(this.e!.firstChild);\n }\n this.lines = content.split(/(?:\\r\\n|\\r|\\n)/);\n this.lineDirty = [];\n for (let lineNum = 0; lineNum < this.lines.length; lineNum++) {\n let le = document.createElement(\"div\");\n this.e!.appendChild(le);\n this.lineDirty.push(true);\n }\n this.lineTypes = new Array(this.lines.length);\n this.updateFormatting();\n this.fireChange();\n if (!this.isRestoringHistory) this.pushHistory();\n }\n\n public getContent(): string {\n return this.lines.join(\"\\n\");\n }\n\n private updateFormatting(): void {\n this.updateLineTypes();\n this.updateLinkLabels();\n this.applyLineTypes();\n }\n\n private updateLinkLabels(): void {\n this.linkLabels = [];\n for (let l = 0; l < this.lines.length; l++) {\n if (this.lineTypes[l] === \"TMLinkReferenceDefinition\") {\n this.linkLabels.push(\n this.lineCaptures[l][\n lineGrammar.TMLinkReferenceDefinition.labelPlaceholder!\n ]\n );\n }\n }\n }\n\n private replace(replacement: string, capture: RegExpExecArray): string {\n return replacement.replace(/(\\${1,2})([0-9])/g, (str, p1, p2) => {\n if (p1 === \"$\") return htmlescape(capture[parseInt(p2)]);\n else\n return `<span class=\"TMInlineFormatted\">${this.processInlineStyles(\n capture[parseInt(p2)]\n )}</span>`;\n });\n }\n\n private applyLineTypes(): void {\n for (let lineNum = 0; lineNum < this.lines.length; lineNum++) {\n if (this.lineDirty[lineNum]) {\n let contentHTML = this.replace(\n this.lineReplacements[lineNum],\n this.lineCaptures[lineNum]\n );\n (this.lineElements[lineNum] as HTMLElement).className = this.lineTypes[lineNum];\n (this.lineElements[lineNum] as HTMLElement).removeAttribute(\"style\");\n (this.lineElements[lineNum] as HTMLElement).innerHTML =\n contentHTML === \"\" ? \"<br />\" : contentHTML;\n }\n (this.lineElements[lineNum] as HTMLElement).dataset.lineNum = lineNum.toString();\n }\n }\n\n private updateLineTypes(): void {\n let codeBlockType: string | false = false;\n let codeBlockSeqLength = 0;\n let htmlBlock: HTMLBlockRule | false = false;\n\n for (let lineNum = 0; lineNum < this.lines.length; lineNum++) {\n let lineType = \"TMPara\";\n let lineCapture: RegExpExecArray = [this.lines[lineNum]] as RegExpExecArray;\n let lineReplacement = \"$$0\";\n\n // Check ongoing code blocks\n if (codeBlockType === \"TMCodeFenceBacktickOpen\") {\n let capture = lineGrammar.TMCodeFenceBacktickClose.regexp.exec(this.lines[lineNum]);\n if (capture && capture.groups![\"seq\"].length >= codeBlockSeqLength) {\n lineType = \"TMCodeFenceBacktickClose\";\n lineReplacement = lineGrammar.TMCodeFenceBacktickClose.replacement;\n lineCapture = capture;\n codeBlockType = false;\n } else {\n lineType = \"TMFencedCodeBacktick\";\n lineReplacement = '<span class=\"TMFencedCode\">$0<br /></span>';\n lineCapture = [this.lines[lineNum]] as RegExpExecArray;\n }\n } else if (codeBlockType === \"TMCodeFenceTildeOpen\") {\n let capture = lineGrammar.TMCodeFenceTildeClose.regexp.exec(this.lines[lineNum]);\n if (capture && capture.groups![\"seq\"].length >= codeBlockSeqLength) {\n lineType = \"TMCodeFenceTildeClose\";\n lineReplacement = lineGrammar.TMCodeFenceTildeClose.replacement;\n lineCapture = capture;\n codeBlockType = false;\n } else {\n lineType = \"TMFencedCodeTilde\";\n lineReplacement = '<span class=\"TMFencedCode\">$0<br /></span>';\n lineCapture = [this.lines[lineNum]] as RegExpExecArray;\n }\n }\n\n // Check HTML block types\n if (lineType === \"TMPara\" && htmlBlock === false) {\n for (let htmlBlockType of htmlBlockGrammar) {\n if (this.lines[lineNum].match(htmlBlockType.start)) {\n if (\n htmlBlockType.paraInterrupt ||\n lineNum === 0 ||\n !(\n this.lineTypes[lineNum - 1] === \"TMPara\" ||\n this.lineTypes[lineNum - 1] === \"TMUL\" ||\n this.lineTypes[lineNum - 1] === \"TMOL\" ||\n this.lineTypes[lineNum - 1] === \"TMBlockquote\"\n )\n ) {\n htmlBlock = htmlBlockType;\n break;\n }\n }\n }\n }\n\n if (htmlBlock !== false) {\n lineType = \"TMHTMLBlock\";\n lineReplacement = '<span class=\"TMHTMLContent\">$0<br /></span>';\n lineCapture = [this.lines[lineNum]] as RegExpExecArray;\n\n if (htmlBlock.end) {\n if (this.lines[lineNum].match(htmlBlock.end)) {\n htmlBlock = false;\n }\n } else {\n if (\n lineNum === this.lines.length - 1 ||\n this.lines[lineNum + 1].match(lineGrammar.TMBlankLine.regexp)\n ) {\n htmlBlock = false;\n }\n }\n }\n\n // Check all regexps if we haven't applied one of the code block types\n if (lineType === \"TMPara\") {\n for (let type in lineGrammar) {\n if (lineGrammar[type].regexp) {\n let capture = lineGrammar[type].regexp.exec(this.lines[lineNum]);\n if (capture) {\n lineType = type;\n lineReplacement = lineGrammar[type].replacement;\n lineCapture = capture;\n break;\n }\n }\n }\n }\n\n // If we've opened a code block, remember that\n if (lineType === \"TMCodeFenceBacktickOpen\" || lineType === \"TMCodeFenceTildeOpen\") {\n codeBlockType = lineType;\n codeBlockSeqLength = lineCapture.groups![\"seq\"].length;\n }\n\n // Link reference definition and indented code can't interrupt a paragraph\n if (\n (lineType === \"TMIndentedCode\" || lineType === \"TMLinkReferenceDefinition\") &&\n lineNum > 0 &&\n (this.lineTypes[lineNum - 1] === \"TMPara\" ||\n this.lineTypes[lineNum - 1] === \"TMUL\" ||\n this.lineTypes[lineNum - 1] === \"TMOL\" ||\n this.lineTypes[lineNum - 1] === \"TMBlockquote\")\n ) {\n lineType = \"TMPara\";\n lineCapture = [this.lines[lineNum]] as RegExpExecArray;\n lineReplacement = \"$$0\";\n }\n\n // Setext H2 markers that can also be interpreted as an empty list item should be regarded as such\n if (lineType === \"TMSetextH2Marker\") {\n let capture = lineGrammar.TMUL.regexp.exec(this.lines[lineNum]);\n if (capture) {\n lineType = \"TMUL\";\n lineReplacement = lineGrammar.TMUL.replacement;\n lineCapture = capture;\n }\n }\n\n // Setext headings are only valid if preceded by a paragraph\n if (lineType === \"TMSetextH1Marker\" || lineType === \"TMSetextH2Marker\") {\n if (lineNum === 0 || this.lineTypes[lineNum - 1] !== \"TMPara\") {\n let capture = lineGrammar.TMHR.regexp.exec(this.lines[lineNum]);\n if (capture) {\n lineType = \"TMHR\";\n lineCapture = capture;\n lineReplacement = lineGrammar.TMHR.replacement;\n } else {\n lineType = \"TMPara\";\n lineCapture = [this.lines[lineNum]] as RegExpExecArray;\n lineReplacement = \"$$0\";\n }\n } else {\n let headingLine = lineNum - 1;\n const headingLineType = lineType === \"TMSetextH1Marker\" ? \"TMSetextH1\" : \"TMSetextH2\";\n do {\n if (this.lineTypes[headingLine] !== headingLineType) {\n this.lineTypes[headingLine] = headingLineType;\n this.lineDirty[headingLine] = true;\n }\n this.lineReplacements[headingLine] = \"$$0\";\n this.lineCaptures[headingLine] = [this.lines[headingLine]] as RegExpExecArray;\n headingLine--;\n } while (headingLine >= 0 && this.lineTypes[headingLine] === \"TMPara\");\n }\n }\n\n if (this.lineTypes[lineNum] !== lineType) {\n this.lineTypes[lineNum] = lineType;\n this.lineDirty[lineNum] = true;\n }\n this.lineReplacements[lineNum] = lineReplacement;\n this.lineCaptures[lineNum] = lineCapture;\n }\n }\n\n public getSelection(getAnchor: boolean = false): Position | null {\n const selection = window.getSelection();\n let startNode = getAnchor ? selection!.anchorNode : selection!.focusNode;\n if (!startNode) return null;\n let offset = getAnchor ? selection!.anchorOffset : selection!.focusOffset;\n if (startNode === this.e) {\n if (offset < this.lines.length)\n return {\n row: offset,\n col: 0,\n };\n return {\n row: offset - 1,\n col: this.lines[offset - 1].length,\n };\n }\n\n let col = this.computeColumn(startNode, offset);\n if (col === null) return null;\n\n let node = startNode;\n while (node.parentElement !== this.e) {\n node = node.parentElement!;\n }\n\n let row = 0;\n // If the node doesn't have a previous sibling, it must be the first line\n if (node.previousSibling) {\n const currentLineNumData = (node as HTMLElement).dataset?.lineNum;\n const previousLineNumData = (node.previousSibling as HTMLElement).dataset?.lineNum;\n\n if (currentLineNumData && previousLineNumData) {\n const currentLineNum = parseInt(currentLineNumData);\n const previousLineNum = parseInt(previousLineNumData);\n if (currentLineNum === previousLineNum + 1) {\n row = currentLineNum;\n } else {\n // If the current line is NOT the previous line + 1, then either \n // the current line got split in two or merged with the previous line\n // Either way, we need to recalculate the row number\n while (node.previousSibling) {\n row++;\n node = node.previousSibling;\n }\n }\n }\n }\n \n return { row: row, col: col };\n }\n\n public setSelection(focus: Position, anchor: Position | null = null): void {\n if (!focus) return;\n\n let { node: focusNode, offset: focusOffset } = this.computeNodeAndOffset(\n focus.row,\n focus.col,\n anchor ? anchor.row === focus.row && anchor.col > focus.col : false\n );\n let anchorNode = null,\n anchorOffset = null;\n if (anchor && (anchor.row !== focus.row || anchor.col !== focus.col)) {\n let { node, offset } = this.computeNodeAndOffset(\n anchor.row,\n anchor.col,\n focus.row === anchor.row && focus.col > anchor.col\n );\n anchorNode = node;\n anchorOffset = offset;\n }\n\n let windowSelection = window.getSelection();\n windowSelection!.setBaseAndExtent(\n focusNode,\n focusOffset,\n anchorNode || focusNode,\n anchorNode ? anchorOffset! : focusOffset\n );\n }\n\n public paste(text: string, anchor: Position | null = null, focus: Position | null = null): void {\n if (!anchor) anchor = this.getSelection(true);\n if (!focus) focus = this.getSelection(false);\n let beginning: Position, end: Position;\n if (!focus) {\n focus = {\n row: this.lines.length - 1,\n col: this.lines[this.lines.length - 1].length,\n };\n }\n if (!anchor) {\n anchor = focus;\n }\n if (\n anchor.row < focus.row ||\n (anchor.row === focus.row && anchor.col <= focus.col)\n ) {\n beginning = anchor;\n end = focus;\n } else {\n beginning = focus;\n end = anchor;\n }\n let insertedLines = text.split(/(?:\\r\\n|\\r|\\n)/);\n let lineBefore = this.lines[beginning.row].substr(0, beginning.col);\n let lineEnd = this.lines[end.row].substr(end.col);\n insertedLines[0] = lineBefore.concat(insertedLines[0]);\n let endColPos = insertedLines[insertedLines.length - 1].length;\n insertedLines[insertedLines.length - 1] = insertedLines[insertedLines.length - 1].concat(lineEnd);\n this.spliceLines(beginning.row, 1 + end.row - beginning.row, insertedLines);\n focus.row = beginning.row + insertedLines.length - 1;\n focus.col = endColPos;\n this.updateFormatting();\n this.setSelection(focus);\n this.fireChange();\n }\n\n public wrapSelection(pre: string, post: string, focus: Position | null = null, anchor: Position | null = null): void {\n if (!this.isRestoringHistory) this.pushHistory();\n if (!focus) focus = this.getSelection(false);\n if (!anchor) anchor = this.getSelection(true);\n if (!focus || !anchor || focus.row !== anchor.row) return;\n this.lineDirty[focus.row] = true;\n\n const startCol = focus.col < anchor.col ? focus.col : anchor.col;\n const endCol = focus.col < anchor.col ? anchor.col : focus.col;\n const left = this.lines[focus.row].substr(0, startCol).concat(pre);\n const mid = endCol === startCol ? \"\" : this.lines[focus.row].substr(startCol, endCol - startCol);\n const right = post.concat(this.lines[focus.row].substr(endCol));\n this.lines[focus.row] = left.concat(mid, right);\n anchor.col = left.length;\n focus.col = anchor.col + mid.length;\n\n this.updateFormatting();\n this.setSelection(focus, anchor);\n }\n\n public addEventListener<T extends EventType>(\n type: T,\n listener: T extends 'change' ? EventHandler<ChangeEvent> :\n T extends 'selection' ? EventHandler<SelectionEvent> :\n T extends 'drop' ? EventHandler<DropEvent> : never\n ): void {\n if (type.match(/^(?:change|input)$/i)) {\n this.listeners.change.push(listener as EventHandler<ChangeEvent>);\n }\n if (type.match(/^(?:selection|selectionchange)$/i)) {\n this.listeners.selection.push(listener as EventHandler<SelectionEvent>);\n }\n if (type.match(/^(?:drop)$/i)) {\n this.listeners.drop.push(listener as EventHandler<DropEvent>);\n }\n }\n\n private fireChange(): void {\n if (!this.textarea && !this.listeners.change.length) return;\n const content = this.getContent();\n if (this.textarea) this.textarea.value = content;\n for (let listener of this.listeners.change) {\n listener({\n content: content,\n linesDirty: [...this.lineDirty],\n });\n }\n }\n\n /**\n * beforeinput handler, exclusively to handle insertParagraph and\n * insertLineBreak events. These used to be handled in the input event,\n * but that caused issues with Firefox where the input event would be\n * sometimes not be fired for these input types.\n * @param event The input event\n * @returns nothing\n */\n private handleBeforeInputEvent(event: Event): void {\n const beforeInputEvent = event as InputEvent;\n if (\n beforeInputEvent.inputType !== \"insertParagraph\" &&\n beforeInputEvent.inputType !== \"insertLineBreak\"\n ) return;\n if (!this.isRestoringHistory) this.pushHistory();\n event.preventDefault();\n this.clearDirtyFlag();\n\n const focus = this.getSelection();\n const anchor = this.getSelection(true);\n\n if (!focus || !anchor) return;\n \n // If focus and anchor are in different lines, simply remove everything \n // after the beginning of the selection and before the end of the selection\n // and remove any lines in between\n if (focus.row !== anchor.row) {\n const beginning = focus.row < anchor.row ? focus : anchor;\n const end = focus.row < anchor.row ? anchor : focus;\n this.lines[beginning.row] = this.lines[beginning.row].substring(0, beginning.col);\n this.lines[end.row] = this.lines[end.row].substring(end.col);\n this.spliceLines(beginning.row + 1, end.row - beginning.row - 1);\n focus.row = beginning.row + 1;\n focus.col = 0;\n } else {\n let continuableType: string | false = false;\n switch (this.lineTypes[focus.row]) {\n case \"TMUL\":\n continuableType = \"TMUL\";\n break;\n case \"TMOL\":\n continuableType = \"TMOL\";\n break;\n case \"TMIndentedCode\":\n continuableType = \"TMIndentedCode\";\n break;\n }\n \n const lineBeforeBreak = this.lines[focus.row].substring(0, focus.col <= anchor.col ? focus.col : anchor.col);\n const lineAfterBreak = this.lines[focus.row].substring(focus.col <= anchor.col ? anchor.col : focus.col);\n this.spliceLines(focus.row, 1, [lineBeforeBreak, lineAfterBreak]);\n\n focus.row += 1;\n focus.col = 0;\n\n if (continuableType) {\n let capture = lineGrammar[continuableType].regexp.exec(this.lines[focus.row - 1]);\n if (capture) {\n if (capture[2]) {\n if (continuableType === \"TMOL\") {\n capture[1] = capture[1].replace(/\\d{1,9}/, (result) => {\n return (parseInt(result) + 1).toString();\n });\n }\n this.lines[focus.row] = `${capture[1]}${this.lines[focus.row]}`;\n this.lineDirty[focus.row] = true;\n focus.col = capture[1].length;\n } else {\n this.lines[focus.row - 1] = \"\";\n this.lineDirty[focus.row - 1] = true;\n }\n }\n }\n }\n this.updateFormatting();\n this.setSelection(focus);\n\n // Scroll the element containing the selection into view\n if (focus && focus.row < this.lineElements.length) {\n (this.lineElements[focus.row] as HTMLElement).scrollIntoView({\n block: 'nearest',\n inline: 'nearest'\n });\n }\n\n this.fireChange();\n }\n\n private handleInputEvent(event: Event): void {\n const inputEvent = event as InputEvent;\n if (inputEvent.inputType === \"insertCompositionText\") return;\n if (!this.isRestoringHistory) this.pushHistory();\n\n let focus = this.getSelection();\n\n if ((inputEvent.inputType === \"insertParagraph\" || inputEvent.inputType === \"insertLineBreak\") && focus) {\n // This should never happen since these are handled by the beforeinput handler\n return;\n } else {\n if (!this.e!.firstChild) {\n this.e!.innerHTML = '<div class=\"TMBlankLine\"><br></div>';\n } else {\n this.fixNodeHierarchy();\n }\n this.updateLineContentsAndFormatting();\n }\n if (focus) {\n this.setSelection(focus);\n }\n\n this.fireChange();\n }\n\n private handleSelectionChangeEvent(_e: Event): void {\n this.fireSelection();\n }\n\n private handlePaste(event: ClipboardEvent): void {\n if (!this.isRestoringHistory) this.pushHistory();\n event.preventDefault();\n\n let text = (event as any).clipboardData.getData(\"text/plain\");\n this.paste(text);\n }\n\n private handleDrop(event: DragEvent): void {\n event.preventDefault();\n this.fireDrop(event.dataTransfer!);\n }\n\n private processInlineStyles(originalString: string): string {\n let processed = \"\";\n let stack: Array<{delimiter: string, delimString: string, count: number, output: string}> = [];\n let offset = 0;\n let string = originalString;\n\n outer: while (string) {\n // Process simple rules (non-delimiter)\n for (let rule of [\"escape\", \"code\", \"autolink\", \"html\"]) {\n if (this.mergedInlineGrammar[rule]) {\n let cap = this.mergedInlineGrammar[rule].regexp.exec(string);\n if (cap) {\n string = string.substr(cap[0].length);\n offset += cap[0].length;\n processed += this.mergedInlineGrammar[rule].replacement.replace(/\\$([1-9])/g, (str, p1) => htmlescape(cap[p1]));\n continue outer;\n }\n }\n }\n \n // Process custom inline grammar rules\n for (let rule in this.customInlineGrammar) {\n if (rule !== \"escape\" && rule !== \"code\" && rule !== \"autolink\" && rule !== \"html\" && rule !== \"linkOpen\" && rule !== \"imageOpen\" && rule !== \"linkLabel\" && rule !== \"default\") {\n let cap = this.mergedInlineGrammar[rule].regexp.exec(string);\n if (cap) {\n string = string.substr(cap[0].length);\n offset += cap[0].length;\n processed += this.mergedInlineGrammar[rule].replacement.replace(/\\$([1-9])/g, (str, p1) => htmlescape(cap[p1]));\n continue outer;\n }\n }\n }\n\n // Check for links / images\n let potentialLink = string.match(this.mergedInlineGrammar.linkOpen.regexp);\n let potentialImage = string.match(this.mergedInlineGrammar.imageOpen.regexp);\n if (potentialImage || potentialLink) {\n let result = this.parseLinkOrImage(string, !!potentialImage);\n if (result) {\n processed = `${processed}${result.output}`;\n string = string.substr(result.charCount);\n offset += result.charCount;\n continue outer;\n }\n }\n\n // Check for em / strong delimiters\n let cap = /(^\\*+)|(^_+)/.exec(string);\n if (cap) {\n let delimCount = cap[0].length;\n const delimString = cap[0];\n const currentDelimiter = cap[0][0];\n\n string = string.substr(cap[0].length);\n\n const preceding = offset > 0 ? originalString.substr(0, offset) : \" \";\n const following = offset + cap[0].length < originalString.length ? string : \" \";\n\n const punctuationFollows = following.match(punctuationLeading);\n const punctuationPrecedes = preceding.match(punctuationTrailing);\n const whitespaceFollows = following.match(/^\\s/);\n const whitespacePrecedes = preceding.match(/\\s$/);\n\n let canOpen = !whitespaceFollows && (!punctuationFollows || !!whitespacePrecedes || !!punctuationPrecedes);\n let canClose = !whitespacePrecedes && (!punctuationPrecedes || !!whitespaceFollows || !!punctuationFollows);\n\n if (currentDelimiter === \"_\" && canOpen && canClose) {\n canOpen = !!punctuationPrecedes;\n canClose = !!punctuationFollows;\n }\n\n if (canClose) {\n let stackPointer = stack.length - 1;\n while (delimCount && stackPointer >= 0) {\n if (stack[stackPointer].delimiter === currentDelimiter) {\n while (stackPointer < stack.length - 1) {\n const entry = stack.pop()!;\n processed = `${entry.output}${entry.delimString.substr(0, entry.count)}${processed}`;\n }\n\n if (delimCount >= 2 && stack[stackPointer].count >= 2) {\n processed = `<span class=\"TMMark\">${currentDelimiter}${currentDelimiter}</span><strong class=\"TMStrong\">${processed}</strong><span class=\"TMMark\">${currentDelimiter}${currentDelimiter}</span>`;\n delimCount -= 2;\n stack[stackPointer].count -= 2;\n } else {\n processed = `<span class=\"TMMark\">${currentDelimiter}</span><em class=\"TMEm\">${processed}</em><span class=\"TMMark\">${currentDelimiter}</span>`;\n delimCount -= 1;\n stack[stackPointer].count -= 1;\n }\n\n if (stack[stackPointer].count === 0) {\n let entry = stack.pop()!;\n processed = `${entry.output}${processed}`;\n stackPointer--;\n }\n } else {\n stackPointer--;\n }\n }\n }\n\n if (delimCount && canOpen) {\n stack.push({\n delimiter: currentDelimiter,\n delimString: delimString,\n count: delimCount,\n output: processed,\n });\n processed = \"\";\n delimCount = 0;\n }\n\n if (delimCount) {\n processed = `${processed}${delimString.substr(0, delimCount)}`;\n }\n\n offset += cap[0].length;\n continue outer;\n }\n\n // Check for strikethrough delimiter\n cap = /^~~/.exec(string);\n if (cap) {\n let consumed = false;\n let stackPointer = stack.length - 1;\n while (!consumed && stackPointer >= 0) {\n if (stack[stackPointer].delimiter === \"~\") {\n while (stackPointer < stack.length - 1) {\n const entry = stack.pop()!;\n processed = `${entry.output}${entry.delimString.substr(0, entry.count)}${processed}`;\n }\n\n processed = `<span class=\"TMMark\">~~</span><del class=\"TMStrikethrough\">${processed}</del><span class=\"TMMark\">~~</span>`;\n let entry = stack.pop()!;\n processed = `${entry.output}${processed}`;\n consumed = true;\n } else {\n stackPointer--;\n }\n }\n\n if (!consumed) {\n stack.push({\n delimiter: \"~\",\n delimString: \"~~\",\n count: 2,\n output: processed,\n });\n processed = \"\";\n }\n\n offset += cap[0].length;\n string = string.substr(cap[0].length);\n continue outer;\n }\n\n // Process 'default' rule\n cap = this.mergedInlineGrammar.default.regexp.exec(string);\n if (cap) {\n string = string.substr(cap[0].length);\n offset += cap[0].length;\n processed += this.mergedInlineGrammar.default.replacement.replace(/\\$([1-9])/g, (str, p1) => htmlescape(cap[p1]));\n continue outer;\n }\n throw \"Infinite loop!\";\n }\n\n while (stack.length) {\n const entry = stack.pop()!;\n processed = `${entry.output}${entry.delimString.substr(0, entry.count)}${processed}`;\n }\n\n return processed;\n }\n\n private computeColumn(startNode: Node, offset: number): number | null {\n let node = startNode;\n let col: number;\n while (node && node.parentNode !== this.e) {\n node = node.parentNode!;\n }\n if (node === null) return null;\n\n if (startNode.nodeType === Node.TEXT_NODE || offset === 0) {\n col = offset;\n node = startNode;\n } else if (offset > 0) {\n node = startNode.childNodes[offset - 1];\n col = node.textContent!.length;\n } else {\n col = 0;\n node = startNode;\n }\n while (node.parentNode !== this.e) {\n if (node.previousSibling) {\n node = node.previousSibling;\n col += node.textContent!.length;\n } else {\n node = node.parentNode as unknown as ChildNode;\n }\n }\n return col;\n }\n\n private computeNodeAndOffset(row: number, col: number, bindRight: boolean = false): {node: Node, offset: number} {\n if (row >= this.lineElements.length) {\n row = this.lineElements.length - 1;\n col = this.lines[row].length;\n }\n if (col > this.lines[row].length) {\n col = this.lines[row].length;\n }\n const parentNode = this.lineElements[row] as HTMLElement;\n let node = parentNode.firstChild;\n\n let childrenComplete = false;\n let rv = {\n node: parentNode.firstChild ? parentNode.firstChild : parentNode,\n offset: 0,\n };\n\n while (node !== parentNode) {\n if (!childrenComplete && node!.nodeType === Node.TEXT_NODE) {\n if (node!.nodeValue!.length >= col) {\n if (bindRight && node!.nodeValue!.length === col) {\n rv = { node: node!, offset: col };\n col = 0;\n } else {\n return { node: node!, offset: col };\n }\n } else {\n col -= node!.nodeValue!.length;\n }\n }\n if (!childrenComplete && node!.firstChild) {\n node = node!.firstChild;\n } else if (node!.nextSibling) {\n childrenComplete = false;\n node = node!.nextSibling;\n } else {\n childrenComplete = true;\n node = node!.parentNode as unknown as ChildNode;\n }\n }\n\n return rv;\n }\n\n private updateLineContentsAndFormatting(): void {\n this.clearDirtyFlag();\n this.updateLineContents();\n this.updateFormatting();\n }\n\n private clearDirtyFlag(): void {\n this.lineDirty = new Array(this.lines.length);\n for (let i = 0; i < this.lineDirty.length; i++) {\n this.lineDirty[i] = false;\n }\n }\n\n private updateLineContents(): void {\n let lineDelta = this.e!.childElementCount - this.lines.length;\n if (lineDelta) {\n let firstChangedLine = 0;\n while (\n firstChangedLine <= this.lines.length &&\n firstChangedLine <= this.lineElements.length &&\n this.lineElements[firstChangedLine] &&\n this.lines[firstChangedLine] === (this.lineElements[firstChangedLine] as HTMLElement).textContent &&\n this.lineTypes[firstChangedLine] === (this.lineElements[firstChangedLine] as HTMLElement).className\n ) {\n firstChangedLine++;\n }\n\n let lastChangedLine = -1;\n while (\n -lastChangedLine < this.lines.length &&\n -lastChangedLine < this.lineElements.length &&\n this.lines[this.lines.length + lastChangedLine] ===\n (this.lineElements[this.lineElements.length + lastChangedLine] as HTMLElement).textContent &&\n this.lineTypes[this.lines.length + lastChangedLine] ===\n (this.lineElements[this.lineElements.length + lastChangedLine] as HTMLElement).className\n ) {\n lastChangedLine--;\n }\n\n let linesToDelete = this.lines.length + lastChangedLine + 1 - firstChangedLine;\n if (linesToDelete < -lineDelta) linesToDelete = -lineDelta;\n if (linesToDelete < 0) linesToDelete = 0;\n\n let linesToAdd = [];\n for (let l = 0; l < linesToDelete + lineDelta; l++) {\n linesToAdd.push((this.lineElements[firstChangedLine + l] as HTMLElement).textContent || \"\");\n }\n this.spliceLines(firstChangedLine, linesToDelete, linesToAdd, false);\n } else {\n for (let line = 0; line < this.lineElements.length; line++) {\n let e = this.lineElements[line] as HTMLElement;\n let ct = e.textContent || \"\";\n if (this.lines[line] !== ct || this.lineTypes[line] !== e.className) {\n this.lines[line] = ct;\n this.lineTypes[line] = e.className;\n this.lineDirty[line] = true;\n }\n }\n }\n }\n\n private spliceLines(\n startLine: number,\n linesToDelete: number = 0,\n linesToInsert: string[] = [],\n adjustLineElements: boolean = true\n ): void {\n if (adjustLineElements) {\n for (let i = 0; i < linesToDelete; i++) {\n this.e!.removeChild(this.e!.childNodes[startLine]);\n }\n }\n\n let insertedBlank = [];\n let insertedDirty = [];\n\n for (let i = 0; i < linesToInsert.length; i++) {\n insertedBlank.push(\"\");\n insertedDirty.push(true);\n if (adjustLineElements) {\n if (this.e!.childNodes[startLine])\n this.e!.insertBefore(document.createElement(\"div\"), this.e!.childNodes[startLine]);\n else this.e!.appendChild(document.createElement(\"div\"));\n }\n }\n\n this.lines.splice(startLine, linesToDelete, ...linesToInsert);\n this.lineTypes.splice(startLine, linesToDelete, ...insertedBlank);\n this.lineDirty.splice(startLine, linesToDelete, ...insertedDirty);\n }\n\n private fixNodeHierarchy(): void {\n const originalChildren = Array.from(this.e!.childNodes);\n\n const replaceChild = (child: Node, ...newChildren: Node[]) => {\n const parent = child.parentElement!;\n const nextSibling = child.nextSibling;\n parent.removeChild(child);\n newChildren.forEach((newChild) =>\n nextSibling ? parent.insertBefore(newChild, nextSibling) : parent.appendChild(newChild)\n );\n };\n\n originalChildren.forEach((child) => {\n if (child.nodeType !== Node.ELEMENT_NODE || (child as HTMLElement).tagName !== \"DIV\") {\n const divWrapper = document.createElement(\"div\");\n replaceChild(child, divWrapper);\n divWrapper.appendChild(child);\n } else if (child.childNodes.length === 0) {\n child.appendChild(document.createElement(\"br\"));\n } else {\n const grandChildren = Array.from(child.childNodes);\n if (\n grandChildren.some(\n (grandChild) =>\n grandChild.nodeType === Node.ELEMENT_NODE && (grandChild as HTMLElement).tagName === \"DIV\"\n )\n ) {\n return replaceChild(child, ...grandChildren);\n }\n }\n });\n }\n\n private parseLinkOrImage(originalString: string, isImage: boolean): {output: string, charCount: number} | false {\n // Skip the opening bracket\n let textOffset = isImage ? 2 : 1;\n let opener = originalString.substr(0, textOffset);\n let type = isImage ? \"TMImage\" : \"TMLink\";\n let currentOffset = textOffset;\n\n let bracketLevel = 1;\n let linkText: string | false = false;\n let linkRef: string | false = false;\n let linkLabel: string[] = [];\n let linkDetails: string[] = [];\n\n textOuter: while (\n currentOffset < originalString.length &&\n linkText === false\n ) {\n let string = originalString.substr(currentOffset);\n\n // Capture any escapes and code blocks at current position\n for (let rule of [\"escape\", \"code\", \"autolink\", \"html\"]) {\n let cap = this.mergedInlineGrammar[rule].regexp.exec(string);\n if (cap) {\n currentOffset += cap[0].length;\n continue textOuter;\n }\n }\n\n // Check for image\n if (string.match(this.mergedInlineGrammar.imageOpen.regexp)) {\n bracketLevel++;\n currentOffset += 2;\n continue textOuter;\n }\n\n // Check for link\n if (string.match(this.mergedInlineGrammar.linkOpen.regexp)) {\n bracketLevel++;\n if (!isImage) {\n if (this.parseLinkOrImage(string, false)) {\n return false;\n }\n }\n currentOffset += 1;\n continue textOuter;\n }\n\n // Check for closing bracket\n if (string.match(/^\\]/)) {\n bracketLevel--;\n if (bracketLevel === 0) {\n linkText = originalString.substr(textOffset, currentOffset - textOffset);\n currentOffset++;\n continue textOuter;\n }\n }\n\n // Nothing matches, proceed to next char\n currentOffset++;\n }\n\n // Did we find a link text?\n if (linkText === false) return false;\n\n // Check what type of link this is\n let nextChar = currentOffset < originalString.length ? originalString.substr(currentOffset, 1) : \"\";\n\n // REFERENCE LINKS\n if (nextChar === \"[\") {\n let string = originalString.substr(currentOffset);\n let cap = this.mergedInlineGrammar.linkLabel.regexp.exec(string);\n if (cap) {\n currentOffset += cap[0].length;\n linkLabel.push(cap[1], cap[2], cap[3]);\n if (cap[this.mergedInlineGrammar.linkLabel.labelPlaceholder!]) {\n linkRef = cap[this.mergedInlineGrammar.linkLabel.labelPlaceholder!];\n } else {\n linkRef = linkText.trim();\n }\n } else {\n return false;\n }\n } else if (nextChar !== \"(\") {\n // Shortcut ref link\n linkRef = linkText.trim();\n } else {\n // INLINE LINKS\n currentOffset++;\n let parenthesisLevel = 1;\n\n inlineOuter: while (currentOffset < originalString.length && parenthesisLevel > 0) {\n let string = originalString.substr(currentOffset);\n\n // Process whitespace\n let cap = /^\\s+/.exec(string);\n if (cap) {\n switch (linkDetails.length) {\n case 0:\n linkDetails.push(cap[0]);\n break;\n case 1:\n linkDetails.push(cap[0]);\n break;\n case 2:\n if (linkDetails[0].match(/</)) {\n linkDetails[1] = linkDetails[1].concat(cap[0]);\n } else {\n if (parenthesisLevel !== 1) return false;\n linkDetails.push(\"\");\n linkDetails.push(cap[0]);\n }\n break;\n case 3:\n linkDetails.push(cap[0]);\n break;\n case 4:\n return false;\n case 5:\n linkDetails.push(\"\");\n case 6:\n linkDetails[5] = linkDetails[5].concat(cap[0]);\n break;\n case 7:\n linkDetails[6] = linkDetails[6].concat(cap[0]);\n break;\n default:\n return false;\n }\n currentOffset += cap[0].length;\n continue inlineOuter;\n }\n\n // Process backslash escapes\n cap = this.mergedInlineGrammar.escape.regexp.exec(string);\n if (cap) {\n switch (linkDetails.length) {\n case 0:\n linkDetails.push(\"\");\n case 1:\n linkDetails.push(cap[0]);\n break;\n case 2:\n linkDetails[1] = linkDetails[1].concat(cap[0]);\n break;\n case 3:\n return false;\n case 4:\n return false;\n case 5:\n linkDetails.push(\"\");\n case 6:\n linkDetails[5] = linkDetails[5].concat(cap[0]);\n break;\n default:\n return false;\n }\n currentOffset += cap[0].length;\n continue inlineOuter;\n }\n\n // Process opening angle bracket\n if (linkDetails.length < 2 && string.match(/^</)) {\n if (linkDetails.length === 0) linkDetails.push(\"\");\n linkDetails[0] = linkDetails[0].concat(\"<\");\n currentOffset++;\n continue inlineOuter;\n }\n\n // Process closing angle bracket\n if ((linkDetails.length === 1 || linkDetails.length === 2) && string.match(/^>/)) {\n if (linkDetails.length === 1) linkDetails.push(\"\");\n linkDetails.push(\">\");\n currentOffset++;\n continue inlineOuter;\n }\n\n // Process non-parenthesis delimiter for title\n cap = /^[\"']/.exec(string);\n if (cap && (linkDetails.length === 0 || linkDetails.length === 1 || linkDetails.length === 4)) {\n while (linkDetails.length < 4) linkDetails.push(\"\");\n linkDetails.push(cap[0]);\n currentOffset++;\n continue inlineOuter;\n }\n\n if (cap && (linkDetails.length === 5 || linkDetails.length === 6) && linkDetails[4] === cap[0]) {\n if (linkDetails.length === 5) linkDetails.push(\"\");\n linkDetails.push(cap[0]);\n currentOffset++;\n continue inlineOuter;\n }\n\n // Process opening parenthesis\n if (string.match(/^\\(/)) {\n switch (linkDetails.length) {\n case 0:\n linkDetails.push(\"\");\n case 1:\n linkDetails.push(\"\");\n case 2:\n linkDetails[1] = linkDetails[1].concat(\"(\");\n if (!linkDetails[0].match(/<$/)) parenthesisLevel++;\n break;\n case 3:\n linkDetails.push(\"\");\n case 4:\n linkDetails.push(\"(\");\n break;\n case 5:\n linkDetails.push(\"\");\n case 6:\n if (linkDetails[4] === \"(\") return false;\n linkDetails[5] = linkDetails[5].concat(\"(\");\n break;\n default:\n return false;\n }\n currentOffset++;\n continue inlineOuter;\n }\n\n // Process closing parenthesis\n if (string.match(/^\\)/)) {\n if (linkDetails.length <= 2) {\n while (linkDetails.length < 2) linkDetails.push(\"\");\n if (!linkDetails[0].match(/<$/)) parenthesisLevel--;\n if (parenthesisLevel > 0) {\n linkDetails[1] = linkDetails[1].concat(\")\");\n }\n } else if (linkDetails.length === 5 || linkDetails.length === 6) {\n if (linkDetails[4] === \"(\") {\n if (linkDetails.length === 5) linkDetails.push(\"\");\n linkDetails.push(\")\");\n } else {\n if (linkDetails.length === 5) linkDetails.push(\")\");\n else linkDetails[5] = linkDetails[5].concat(\")\");\n }\n } else {\n parenthesisLevel--;\n }\n\n if (parenthesisLevel === 0) {\n while (linkDetails.length < 7) linkDetails.push(\"\");\n }\n\n currentOffset++;\n continue inlineOuter;\n }\n\n // Any old character\n cap = /^./.exec(string);\n if (cap) {\n switch (linkDetails.length) {\n case 0:\n linkDetails.push(\"\");\n case 1:\n linkDetails.push(cap[0]);\n break;\n case 2:\n linkDetails[1] = linkDetails[1].concat(cap[0]);\n break;\n case 3:\n return false;\n case 4:\n return false;\n case 5:\n linkDetails.push(\"\");\n case 6:\n linkDetails[5] = linkDetails[5].concat(cap[0]);\n break;\n default:\n return false;\n }\n currentOffset += cap[0].length;\n continue inlineOuter;\n }\n throw \"Infinite loop\";\n }\n if (parenthesisLevel > 0) return false;\n }\n\n if (linkRef !== false) {\n // Reference link; check that linkRef is valid\n let valid = false;\n for (let label of this.linkLabels) {\n if (label === linkRef) {\n valid = true;\n break;\n }\n }\n let labelClass = valid ? \"TMLinkLabel TMLinkLabel_Valid\" : \"TMLinkLabel TMLinkLabel_Invalid\";\n let output = `<span class=\"TMMark TMMark_${type}\">${opener}</span><span class=\"${type} ${\n linkLabel.length < 3 || !linkLabel[1] ? labelClass : \"\"\n }\">${this.processInlineStyles(linkText)}</span><span class=\"TMMark TMMark_${type}\">]</span>`;\n\n if (linkLabel.length >= 3) {\n output = output.concat(\n `<span class=\"TMMark TMMark_${type}\">${linkLabel[0]}</span>`,\n `<span class=\"${labelClass}\">${linkLabel[1]}</span>`,\n `<span class=\"TMMark TMMark_${type}\">${linkLabel[2]}</span>`\n );\n }\n return {\n output: output,\n charCount: currentOffset,\n };\n } else if (linkDetails.length > 0) {\n // Inline link\n while (linkDetails.length < 7) {\n linkDetails.push(\"\");\n }\n\n return {\n output: `<span class=\"TMMark TMMark_${type}\">${opener}</span><span class=\"${type}\">${this.processInlineStyles(\n linkText\n )}</span><span class=\"TMMark TMMark_${type}\">](${\n linkDetails[0]\n }</span><span class=\"${type}Destination\">${\n linkDetails[1]\n }</span><span class=\"TMMark TMMark_${type}\">${linkDetails[2]}${\n linkDetails[3]\n }${linkDetails[4]}</span><span class=\"${type}Title\">${\n linkDetails[5]\n }</span><span class=\"TMMark TMMark_${type}\">${linkDetails[6]})</span>`,\n charCount: currentOffset,\n };\n }\n\n return false;\n }\n\n private computeCommonAncestor(node1: Node | null, node2: Node | null): Node | null {\n if (!node1 || !node2) return null;\n if (node1 === node2) return node1;\n const ancestry = (node: Node) => {\n let ancestry = [];\n while (node) {\n ancestry.unshift(node);\n node = node.parentNode!;\n }\n return ancestry;\n };\n\n const ancestry1 = ancestry(node1);\n const ancestry2 = ancestry(node2);\n\n if (ancestry1[0] !== ancestry2[0]) return null;\n let i;\n for (i = 0; ancestry1[i] === ancestry2[i]; i++);\n return ancestry1[i - 1];\n }\n\n private computeEnclosingMarkupNode(focus: Position, anchor: Position | null, className: string): Node | null {\n let node = null;\n if (!focus) return null;\n if (!anchor) {\n const sel = window.getSelection();\n if (!sel || !sel.focusNode) return null;\n node = sel.focusNode;\n } else {\n if (focus.row !== anchor.row) return null;\n const sel = window.getSelection();\n if (!sel) return null;\n node = this.computeCommonAncestor(sel.focusNode, sel.anchorNode);\n }\n if (!node) return null;\n while (node !== this.e) {\n if ((node as HTMLElement).className && (node as HTMLElement).className.includes(className)) return node;\n node = node.parentNode!;\n }\n return null;\n }\n\n public getCommandState(focus: Position | null = null, anchor: Position | null = null): Record<string, boolean | null> {\n let commandState: Record<string, boolean | null> = {};\n if (!focus) focus = this.getSelection(false);\n if (!anchor) anchor = this.getSelection(true);\n if (!focus) {\n for (let cmd in commands) {\n commandState[cmd] = null;\n }\n return commandState;\n }\n if (!anchor) anchor = focus;\n\n let start: Position, end: Position;\n if (anchor.row < focus.row || (anchor.row === focus.row && anchor.col < focus.col)) {\n start = anchor;\n end = focus;\n } else {\n start = focus;\n end = anchor;\n }\n if (end.row > start.row && end.col === 0) {\n end.row--;\n end.col = this.lines[end.row].length;\n }\n\n for (let cmd in commands) {\n if (commands[cmd].type === \"inline\") {\n if (!focus || focus.row !== anchor!.row || !this.isInlineFormattingAllowed()) {\n commandState[cmd] = null;\n } else {\n commandState[cmd] =\n !!this.computeEnclosingMarkupNode(focus, anchor, commands[cmd].className) ||\n (focus.col === anchor!.col &&\n !!this.lines[focus.row].substr(0, focus.col).match(commands[cmd].unset.prePattern) &&\n !!this.lines[focus.row].substr(focus.col).match(commands[cmd].unset.postPattern));\n }\n }\n if (commands[cmd].type === \"line\") {\n if (!focus) {\n commandState[cmd] = null;\n } else {\n let state: boolean | null = this.lineTypes[start.row] === commands[cmd].className;\n for (let line = start.row; line <= end.row; line++) {\n if ((this.lineTypes[line] === commands[cmd].className) !== state) {\n state = null;\n break;\n }\n }\n commandState[cmd] = state;\n }\n }\n }\n return commandState;\n }\n\n public setCommandState(command: string, state: boolean): void {\n if (!this.isRestoringHistory) this.pushHistory();\n if (commands[command].type === \"inline\") {\n let anchor = this.getSelection(true);\n let focus = this.getSelection(false);\n if (!anchor) anchor = focus;\n if (!anchor) return;\n if (anchor.row !== focus!.row) return;\n if (!this.isInlineFormattingAllowed()) return;\n let markupNode = this.computeEnclosingMarkupNode(focus!, anchor, commands[command].className);\n this.clearDirtyFlag();\n\n if (markupNode) {\n this.lineDirty[focus!.row] = true;\n const startCol = this.computeColumn(markupNode, 0)!;\n const len = markupNode.textContent!.length;\n const left = this.lines[focus!.row]\n .substr(0, startCol)\n .replace(commands[command].unset.prePattern, \"\");\n const mid = this.lines[focus!.row].substr(startCol, len);\n const right = this.lines[focus!.row]\n .substr(startCol + len)\n .replace(commands[command].unset.postPattern, \"\");\n this.lines[focus!.row] = left.concat(mid, right);\n anchor.col = left.length;\n focus!.col = anchor.col + len;\n this.updateFormatting();\n this.setSelection(focus!, anchor);\n this.fireChange();\n } else if (\n focus!.col === anchor.col &&\n !!this.lines[focus!.row].substr(0, focus!.col).match(commands[command].unset.prePattern) &&\n !!this.lines[focus!.row].substr(focus!.col).match(commands[command].unset.postPattern)\n ) {\n this.lineDirty[focus!.row] = true;\n const left = this.lines[focus!.row]\n .substr(0, focus!.col)\n .replace(commands[command].unset.prePattern, \"\");\n const right = this.lines[focus!.row]\n .substr(focus!.col)\n .replace(commands[command].unset.postPattern, \"\");\n this.lines[focus!.row] = left.concat(right);\n focus!.col = anchor.col = left.length;\n this.updateFormatting();\n this.setSelection(focus!, anchor);\n this.fireChange();\n } else {\n let { startCol, endCol } =\n focus!.col < anchor.col\n ? { startCol: focus!.col, endCol: anchor.col }\n : { startCol: anchor.col, endCol: focus!.col };\n\n let match = this.lines[focus!.row]\n .substr(startCol, endCol - startCol)\n .match(/^(?<leading>\\s*).*\\S(?<trailing>\\s*)$/);\n if (match) {\n startCol += match.groups!.leading.length;\n endCol -= match.groups!.trailing.length;\n }\n\n focus!.col = startCol;\n anchor.col = endCol;\n\n this.wrapSelection(commands[command].set.pre, commands[command].set.post, focus, anchor);\n this.fireChange();\n }\n } else if (commands[command].type === \"line\") {\n let anchor = this.getSelection(true);\n let focus = this.getSelection(false);\n if (!anchor) anchor = focus;\n if (!focus) return;\n this.clearDirtyFlag();\n let start = anchor!.row > focus!.row ? focus! : anchor!;\n let end = anchor!.row > focus!.row ? anchor! : focus!;\n if (end.row > start.row && end.col === 0) {\n end.row--;\n }\n\n for (let line = start.row; line <= end.row; line++) {\n if (state && this.lineTypes[line] !== commands[command].className) {\n this.lines[line] = this.lines[line].replace(\n commands[command].set.pattern,\n commands[command].set.replacement.replace(\"$#\", (line - start.row + 1).toString())\n );\n this.lineDirty[line] = true;\n }\n if (!state && this.lineTypes[line] === commands[command].className) {\n this.lines[line] = this.lines[line].replace(\n commands[command].unset.pattern,\n commands[command].unset.replacement\n );\n this.lineDirty[line] = true;\n }\n }\n this.updateFormatting();\n this.setSelection(\n { row: end.row, col: this.lines[end.row].length },\n { row: start.row, col: 0 }\n );\n this.fireChange();\n }\n }\n\n private isInlineFormattingAllowed(): boolean {\n const sel = window.getSelection();\n if (!sel || !sel.focusNode || !sel.anchorNode) return false;\n\n if (\n sel.isCollapsed &&\n sel.focusNode.nodeType === 3 &&\n sel.focusOffset === sel.focusNode.nodeValue!.length\n ) {\n let node;\n for (node = sel.focusNode; node && node.nextSibling === null; node = node.parentNode!);\n if (\n node &&\n node.nextSibling &&\n (node.nextSibling as HTMLElement).className &&\n (node.nextSibling as HTMLElement).className.includes(\"TMInlineFormatted\")\n )\n return true;\n }\n\n let ancestor = this.computeCommonAncestor(sel.focusNode, sel.anchorNode);\n if (!ancestor) return false;\n\n while (ancestor && ancestor !== this.e) {\n if (\n (ancestor as HTMLElement).className &&\n typeof (ancestor as HTMLElement).className.includes === \"function\" &&\n ((ancestor as HTMLElement).className.includes(\"TMInlineFormatted\") ||\n (ancestor as HTMLElement).className.includes(\"TMBlankLine\"))\n )\n return true;\n ancestor = ancestor.parentNode!;\n }\n\n return false;\n }\n\n public toggleCommandState(command: string): void {\n if (!this.lastCommandState) this.lastCommandState = this.getCommandState();\n this.setCommandState(command, !this.lastCommandState[command]);\n }\n\n private fireDrop(dataTransfer: DataTransfer): void {\n for (let listener of this.listeners.drop) {\n listener({ dataTransfer });\n }\n }\n\n private fireSelection(): void {\n if (this.listeners.selection && this.listeners.selection.length) {\n let focus = this.getSelection(false);\n let anchor = this.getSelection(true);\n let commandState = this.getCommandState(focus, anchor);\n if (this.lastCommandState) {\n Object.assign(this.lastCommandState, commandState);\n } else {\n this.lastCommandState = Object.assign({}, commandState);\n }\n for (let listener of this.listeners.selection) {\n listener({\n focus: focus!,\n anchor: anchor!,\n commandState: this.lastCommandState,\n });\n }\n }\n }\n}\n\nexport default Editor;\n"],"names":["svg","blockquote","bold","clear_formatting","code","h1","h2","hr","image","italic","link","ol","redo","strikethrough","ul","undo","isMacLike","test","navigator","platform","DefaultCommands","name","action","innerHTML","title","hotkey","insertLink","editor","isInlineFormattingAllowed","wrapSelection","enabled","focus","anchor","insertImage","paste","canUndo","canRedo","CommandBar","constructor","props","e","commands","buttons","state","hotkeys","element","document","getElementById","body","createCommandBarElement","addEventListener","handleKeydown","setEditor","parentElement","createElement","className","command","el","appendChild","commandName","Object","assign","keys","split","modifiers","modifierexplanation","i","length","push","match","key","toLowerCase","concat","join","handleClick","event","preventDefault","setCommandState","handleSelection","commandState","undefined","outer","modifier","global","this","require$$0","require$$1","require$$2","sharedStoreModule","require$$3","require$$4","require$$5","require$$6","require$$7","makeBuiltIn","makeBuiltInModule","replacements","ASCIIPunctuation","NotTriggerChar","Scheme","Email","HTMLOpenTag","HTMLCloseTag","HTMLTagName","HTMLComment","HTMLPI","HTMLDeclaration","HTMLCDATA","HTMLAttribute","HTMLAttValue","KnownTag","punctuationLeading","RegExp","punctuationTrailing","lineGrammar","TMH1","regexp","replacement","TMH2","TMH3","TMH4","TMH5","TMH6","TMBlockquote","TMCodeFenceBacktickOpen","TMCodeFenceTildeOpen","TMCodeFenceBacktickClose","TMCodeFenceTildeClose","TMBlankLine","TMSetextH1Marker","TMSetextH2Marker","TMHR","TMUL","TMOL","TMIndentedCode","TMLinkReferenceDefinition","labelPlaceholder","htmlBlockGrammar","start","end","paraInterrupt","inlineGrammar","escape","autolink","html","linkOpen","imageOpen","linkLabel","default","replacementRegexp","inlineRules","rule","re","source","replace","string","flags","createMergedInlineGrammar","customRules","arguments","merged","ruleName","entries","processedRule","regexpSource","htmlescape","type","set","pre","post","unset","prePattern","postPattern","pattern","h3","h4","h5","h6","Editor","textarea","lines","lineElements","lineTypes","lineCaptures","lineReplacements","linkLabels","lineDirty","lastCommandState","customInlineGrammar","mergedInlineGrammar","hasFocus","listeners","change","selection","drop","undoStack","redoStack","isRestoringHistory","maxHistory","getElementsByTagName","tagName","parentNode","style","display","createEditorElement","setContent","content","value","handleUndoRedoKey","pushHistory","pushCurrentState","getContent","getSelection","shift","current","pop","prev","setSelection","next","isMac","ctrl","metaKey","ctrlKey","altKey","shiftKey","classList","add","contentEditable","whiteSpace","webkitUserModify","nextSibling","insertBefore","handleInputEvent","handleBeforeInputEvent","handleSelectionChangeEvent","handlePaste","handleDrop","childNodes","firstChild","removeChild","lineNum","le","Array","updateFormatting","fireChange","updateLineTypes","updateLinkLabels","applyLineTypes","l","capture","str","p1","p2","parseInt","processInlineStyles","contentHTML","removeAttribute","dataset","toString","codeBlockType","codeBlockSeqLength","htmlBlock","lineType","lineCapture","lineReplacement","exec","groups","htmlBlockType","headingLine","headingLineType","getAnchor","window","startNode","anchorNode","focusNode","offset","anchorOffset","focusOffset","row","col","computeColumn","node","previousSibling","currentLineNumData","_a","previousLineNumData","_b","currentLineNum","previousLineNum","computeNodeAndOffset","windowSelection","setBaseAndExtent","text","beginning","insertedLines","lineBefore","substr","lineEnd","endColPos","spliceLines","startCol","endCol","left","mid","right","listener","linesDirty","beforeInputEvent","inputType","clearDirtyFlag","substring","continuableType","lineBeforeBreak","lineAfterBreak","result","scrollIntoView","block","inline","inputEvent","fixNodeHierarchy","updateLineContentsAndFormatting","_e","fireSelection","clipboardData","getData","fireDrop","dataTransfer","originalString","processed","stack","cap","potentialLink","potentialImage","parseLinkOrImage","output","charCount","delimCount","delimString","currentDelimiter","preceding","following","punctuationFollows","punctuationPrecedes","whitespaceFollows","whitespacePrecedes","canOpen","canClose","stackPointer","delimiter","entry","count","consumed","nodeType","Node","TEXT_NODE","textContent","bindRight","childrenComplete","rv","nodeValue","updateLineContents","lineDelta","childElementCount","firstChangedLine","lastChangedLine","linesToDelete","linesToAdd","line","ct","startLine","linesToInsert","adjustLineElements","insertedBlank","insertedDirty","splice","originalChildren","from","replaceChild","child","parent","_len","newChildren","_key","forEach","newChild","ELEMENT_NODE","divWrapper","grandChildren","some","grandChild","isImage","textOffset","opener","currentOffset","bracketLevel","linkText","linkRef","linkDetails","textOuter","nextChar","trim","parenthesisLevel","inlineOuter","valid","label","labelClass","computeCommonAncestor","node1","node2","ancestry","unshift","ancestry1","ancestry2","computeEnclosingMarkupNode","sel","includes","getCommandState","cmd","markupNode","len","leading","trailing","isCollapsed","ancestor","toggleCommandState"],"mappings":"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","x_google_ignoreList":[2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49]}
3285
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzIjpbInNyYy9zdmcvc3ZnLnRzIiwic3JjL1RpbnlNREVDb21tYW5kQmFyLnRzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dsb2JhbC10aGlzLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2ZhaWxzLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Rlc2NyaXB0b3JzLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtbmF0aXZlLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1jYWxsYWJsZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tb2JqZWN0LmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHkuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tbmFtZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1wdXJlLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2RlZmluZS1nbG9iYWwtcHJvcGVydHkuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2luc3BlY3Qtc291cmNlLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3dlYWstbWFwLWJhc2ljLWRldGVjdGlvbi5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1vYmplY3QuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaWU4LWRvbS1kZWZpbmUuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdjgtcHJvdG90eXBlLWRlZmluZS1idWcuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYW4tb2JqZWN0LmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW52aXJvbm1lbnQtdXNlci1hZ2VudC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lbnZpcm9ubWVudC12OC12ZXJzaW9uLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24uanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdXNlLXN5bWJvbC1hcy11aWQuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtc3ltYm9sLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RyeS10by1zdHJpbmcuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYS1jYWxsYWJsZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nZXQtbWV0aG9kLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29yZGluYXJ5LXRvLXByaW1pdGl2ZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zaGFyZWQuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdWlkLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLXByaW1pdGl2ZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90by1wcm9wZXJ0eS1rZXkuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvci5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHkuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2hhcmVkLWtleS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9oaWRkZW4ta2V5cy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9tYWtlLWJ1aWx0LWluLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbi1hY2Nlc3Nvci5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9yZWdleHAtZmxhZ3MuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnJlZ2V4cC5mbGFncy5qcyIsInNyYy9ncmFtbWFyLnRzIiwic3JjL1RpbnlNREUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiY29uc3Qgc3ZnOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICBibG9ja3F1b3RlOiBgPHN2ZyBoZWlnaHQ9XCIxOFwiIHdpZHRoPVwiMThcIj48cmVjdCB3aWR0aD1cIjVcIiBoZWlnaHQ9XCI1XCIgeD1cIjNcIiB5PVwiNFwiIHJ5PVwiMVwiLz48cmVjdCByeT1cIjFcIiB5PVwiNFwiIHg9XCIxMFwiIGhlaWdodD1cIjVcIiB3aWR0aD1cIjVcIi8+PHBhdGggZD1cIk04IDYuOTk5djNjMCAxLTEgMy0xIDNzLS4zMzEgMS0xLjMzMSAxaC0xYy0xIDAtLjY2OS0xLS42NjktMXMxLTIgMS0zdi0zem03IDB2M2MwIDEtMSAzLTEgM3MtLjMzMSAxLTEuMzMxIDFoLTFjLTEgMC0uNjY5LTEtLjY2OS0xczEtMiAxLTN2LTN6XCIvPjwvc3ZnPmAsXG4gIGJvbGQ6IGA8c3ZnIGhlaWdodD1cIjE4XCIgd2lkdGg9XCIxOFwiPjxwYXRoIGQ9XCJNNCAyYTEgMSAwIDAwLTEgMXYxMmExIDEgMCAwMDEgMWg2YzQgMCA1LTIgNS00IDAtMS4zMjItLjQzNC0yLjYzNi0xLjg4NS0zLjM4MUMxMy43NzIgNy44ODUgMTQgNi45NDUgMTQgNmMwLTItMS00LTUtNHptMSAyaDRjMS42NjggMCAyLjMyLjM5MyAyLjYuNjcyLjI4LjI3OS40LjY2Mi40IDEuMzI4cy0uMTIgMS4wNTctLjQgMS4zMzhjLS4yNzUuMjc0LTEuMDE0LjY0Ni0yLjYuNjYySDV6bTUgNmMxLjY2Ni4wMDUgMi4zMTguMzg4IDIuNTk2LjY2Ni4yNzcuMjc4LjQwNC42NjcuNDA0IDEuMzM0cy0uMTI3IDEuMDYtLjQwNCAxLjMzOGMtLjI3OC4yNzgtLjkzLjY2LTIuNTk2LjY2MmwtNC45OTIuMDA0TDUgMTB6XCIvPjwvc3ZnPmAsXG4gIGNsZWFyX2Zvcm1hdHRpbmc6IGA8c3ZnIGhlaWdodD1cIjE4XCIgd2lkdGg9XCIxOFwiPjxwYXRoIGQ9XCJNMTEuMDMgMWExIDEgMCAwMC0uNzQuM2wtOSA5YTEgMSAwIDAwMCAxLjRsNCA0QTEgMSAwIDAwNiAxNmgyYTEgMSAwIDAwLjctLjNsOC04YTEgMSAwIDAwMC0xLjRsLTUtNWExIDEgMCAwMC0uNjctLjN6TTguNyA1LjdsMy41OCAzLjZMNy42IDE0SDYuNGwtMy0zIDUuMy01LjN6XCIvPjxyZWN0IHJ5PVwiLjhcIiByeD1cIi44XCIgeT1cIjE0XCIgeD1cIjE2XCIgaGVpZ2h0PVwiMlwiIHdpZHRoPVwiMlwiLz48cmVjdCB3aWR0aD1cIjJcIiBoZWlnaHQ9XCIyXCIgeD1cIjEzXCIgeT1cIjE0XCIgcng9XCIuOFwiIHJ5PVwiLjhcIi8+PHJlY3Qgcnk9XCIuOFwiIHJ4PVwiLjhcIiB5PVwiMTRcIiB4PVwiMTBcIiBoZWlnaHQ9XCIyXCIgd2lkdGg9XCIyXCIvPjwvc3ZnPmAsXG4gIGNvZGU6IGA8c3ZnIGhlaWdodD1cIjE4XCIgd2lkdGg9XCIxOFwiPjxwYXRoIGQ9XCJNMTMuNSAyLjk5NGEuNS41IDAgMDAtLjUuNS41LjUgMCAwMDAgLjAzNFY0LjUzYTUuOTkzIDUuOTkzIDAgMDAtNy40NTEtLjQ0NUE2IDYgMCAxMDEyLjQ1IDEzLjlhNS45OSA1Ljk5IDAgMDAxLjM0Ni0xLjMzNC41LjUgMCAwMC4wOTYtLjEwMS41LjUgMCAwMC0uMTItLjY5OC41LjUgMCAwMC0uNjk3LjEybC0uMDA0LS4wMDVhNSA1IDAgMDEtMS4xOTcgMS4yIDUgNSAwIDExMS4yMTUtNi45NjUuNS41IDAgMDAuNjk3LjEyLjUuNSAwIDAwLjIxMS0uNDRWNC43NDVIMTRWMy40OTNhLjUuNSAwIDAwLS41LS41elwiLz48L3N2Zz5gLFxuICBoMTogYDxzdmcgaGVpZ2h0PVwiMThcIiB3aWR0aD1cIjE4XCI+PHBhdGggZD1cIk0zIDJzMC0xIDEtMWgxYzEgMCAxIDEgMSAxdjZoNlYyczAtMSAxLTFoMWMxIDAgMSAxIDEgMXYxNHMwIDEtMSAxaC0xYy0xIDAtMS0xLTEtMXYtNkg2djZzMCAxLTEgMUg0Yy0xIDAtMS0xLTEtMXpcIi8+PC9zdmc+YCxcbiAgaDI6IGA8c3ZnIGhlaWdodD1cIjE4XCIgd2lkdGg9XCIxOFwiPjxwYXRoIGQ9XCJNNCAyczAtMSAxLTEgMSAxIDEgMXY2YzEtMSAyLTEgNC0xIDMgMCA0IDIgNCA0djVzMCAxLTEgMS0xLTEtMS0xdi01YzAtMS4wOTQtMS0yLTItMi0yIDAtMyAwLTQgMnY1czAgMS0xIDEtMS0xLTEtMXpcIi8+PC9zdmc+YCxcbiAgaHI6IGA8c3ZnIGhlaWdodD1cIjE4XCIgd2lkdGg9XCIxOFwiPjxyZWN0IHJ5PVwiMVwiIHk9XCI4XCIgaGVpZ2h0PVwiMlwiIHdpZHRoPVwiMThcIiBzdHlsZT1cImZvbnQtdmFyaWF0aW9uLXNldHRpbmdzOm5vcm1hbDttYXJrZXI6bm9uZVwiLz48L3N2Zz5gLFxuICBpbWFnZTogYDxzdmcgaGVpZ2h0PVwiMThcIiB3aWR0aD1cIjE4XCI+PHBhdGggZD1cIk0xIDJ2MTRoMTZWMkgxem0yIDJoMTJ2N2wtMy0zLTQgNC0yLTItMyAzVjR6XCIvPjxjaXJjbGUgcj1cIjEuNVwiIGN5PVwiNi41XCIgY3g9XCI1LjVcIi8+PC9zdmc+YCxcbiAgaXRhbGljOiBgPHN2ZyBoZWlnaHQ9XCIxOFwiIHdpZHRoPVwiMThcIj48cGF0aCBkPVwiTTkgMmExIDEgMCAwMDAgMkw3IDE0YTEgMSAwIDEwMCAyaDJhMSAxIDAgMDAwLTJsMi0xMGExIDEgMCAxMDAtMnpcIi8+PC9zdmc+YCxcbiAgbGluazogYDxzdmcgaGVpZ2h0PVwiMThcIiB3aWR0aD1cIjE4XCI+PHBhdGggZD1cIk05LjA3IDUuMThhMy45IDMuOSAwIDAwLTEuNTIuNDNDNi4zMSA2LjIyIDUuMyA3LjI5IDQuMyA4LjI5Yy0xIDEtMi4wNyAyLjAyLTIuNjggMy4yNi0uMzEuNjItLjUgMS4zMy0uNDEgMi4wNy4wOS43NS40OCAxLjQ3IDEuMSAyLjA5LjYxLjYxIDEuMzMgMSAyLjA4IDEuMS43NC4wOSAxLjQ1LS4xIDIuMDctLjQyIDEuMjQtLjYxIDIuMjYtMS42OCAzLjI2LTIuNjguNDYtLjQ3Ljk0LS45NCAxLjM5LTEuNDRsLS40My4yNmMtLjY4LjM0LTEuNDkuNTYtMi4zNi40Ni0uMi0uMDMtLjQtLjA4LS42LS4xNC0uNzkuNzYtMS41NSAxLjQ1LTIuMTYgMS43Ni0uMzguMTktLjY3LjI0LS45Mi4yMS0uMjYtLjAzLS41NC0uMTQtLjkyLS41My0uMzktLjM4LS41LS42Ni0uNTMtLjkxLS4wMy0uMjYuMDItLjU1LjIxLS45My4zOS0uNzYgMS4zMi0xLjc0IDIuMzItMi43NCAxLTEgMS45OC0xLjkzIDIuNzQtMi4zMi4zOC0uMTkuNjctLjI0LjkzLS4yMS4yNS4wMy41My4xNC45MS41My4zOS4zOC41LjY2LjUzLjkydi4wNmwxLjEyLTEuMDYuNDQtLjQ3Yy0uMTgtLjMtLjQtLjYtLjY3LS44Ny0uNjItLjYxLTEuMzQtMS0yLjA5LTEuMWEzLjA4IDMuMDggMCAwMC0uNTUtLjAxelwiLz48cGF0aCBkPVwiTTEzLjA3Ljg2YTMuOSAzLjkgMCAwMC0xLjUyLjQzYy0xLjI0LjYyLTIuMjYgMS42OS0zLjI2IDIuNjktLjQ2LjQ3LS45NC45NC0xLjM5IDEuNDMuMTUtLjA4LjI4LS4xOC40My0uMjVhNC40IDQuNCAwIDAxMi4zNi0uNDZjLjIuMDIuNC4wNy42LjE0Ljc5LS43NyAxLjU1LTEuNDYgMi4xNi0xLjc2LjM4LS4xOS42Ny0uMjUuOTMtLjIxLjI1LjAzLjUzLjE0LjkxLjUyLjM5LjM4LjUuNjYuNTMuOTIuMDMuMjYtLjAyLjU1LS4yMS45My0uMzkuNzYtMS4zMiAxLjc0LTIuMzIgMi43NC0xIDEtMS45OCAxLjkzLTIuNzQgMi4zMS0uMzguMi0uNjcuMjUtLjkzLjIyLS4yNS0uMDQtLjUzLS4xNS0uOTEtLjUzLS4zOS0uMzgtLjUtLjY2LS41My0uOTJWOWMtLjM2LjMzLS43My42Ny0xLjEyIDEuMDZsLS40My40NmMuMTcuMy40LjYuNjYuODcuNjIuNjIgMS4zNCAxIDIuMDggMS4xLjc1LjEgMS40Ni0uMSAyLjA4LS40MSAxLjI0LS42MiAyLjI2LTEuNjkgMy4yNi0yLjY5czIuMDctMi4wMiAyLjY4LTMuMjZjLjMxLS42Mi41LTEuMzIuNDEtMi4wN2EzLjYzIDMuNjMgMCAwMC0xLjEtMi4wOGMtLjYxLS42Mi0xLjMzLTEtMi4wNy0xLjFhMy4wOCAzLjA4IDAgMDAtLjU2LS4wMnpcIi8+PC9zdmc+YCxcbiAgb2w6IGA8c3ZnIGhlaWdodD1cIjE4XCIgd2lkdGg9XCIxOFwiPjxwYXRoIGQ9XCJNMS41IDdhLjUuNSAwIDEwMCAxaDFhLjUuNSAwIDAxLjUuNWMwIC4xNjQtLjA4LjMxLS4xNC4zNTVsLTEuNjU1IDEuMjVBLjQ5Mi40OTIgMCAwMDEgMTAuNWEuNS41IDAgMDAuNS41aDJhLjUuNSAwIDAwMC0xSDNsLjM5OC0uMjk5QTEuNSAxLjUgMCAwMDIuNSA3elwiLz48cGF0aCBkPVwiTTEuNSAxMmMtLjY2NyAwLS42NjcgMSAwIDFoMS4yNWMuMzMzIDAgLjMzMy41IDAgLjVIMi41Yy0uNjY3IDAtLjY2NyAxIDAgMWguMjVjLjMzMyAwIC4zMzMuNSAwIC41SDEuNWMtLjY2NyAwLS42NjcgMSAwIDFoMWMuMzk4IDAgLjc4LS4xMzEgMS4wNi0uMzY1LjI4Mi0uMjM1LjQ0LS41NTQuNDQtLjg4NWExLjEyMSAxLjEyMSAwIDAwLS4zMDMtLjc1Yy4xOTEtLjIwNC4zLS40Ny4zMDMtLjc1IDAtLjMzMi0uMTU4LS42NTEtLjQ0LS44ODUtLjMtLjI0MS0uNjc1LS4zNy0xLjA2LS4zNjV6XCIvPjxyZWN0IHk9XCIxM1wiIHg9XCI2XCIgaGVpZ2h0PVwiMlwiIHdpZHRoPVwiMTJcIiByeT1cIjFcIi8+PHJlY3Qgcnk9XCIxXCIgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjJcIiB4PVwiNlwiIHk9XCI4XCIvPjxyZWN0IHk9XCIzXCIgeD1cIjZcIiBoZWlnaHQ9XCIyXCIgd2lkdGg9XCIxMlwiIHJ5PVwiMVwiLz48cGF0aCBkPVwiTTEuNSAyYS41LjUgMCAxMDAgMUgydjJoLS41YS41LjUgMCAxMDAgMWgyYS41LjUgMCAxMDAtMUgzVjIuNWMwLS4yNzctLjIyMy0uNS0uNS0uNXpcIi8+PC9zdmc+YCxcbiAgcmVkbzogYDxzdmcgaGVpZ2h0PVwiMThcIiB3aWR0aD1cIjE4XCI+PHBhdGggZD1cIk0gNy4yNjk1MzA4LDIuNzA1MDc4MSBDIDguMTEyODc1NSwyLjcwODE1ODEgOC45NTI5ODk1LDIuODcxMjE1NiA5LjczMDQ2OSwzLjEzNDc2NTYgMTEuNDA4ODc0LDMuNzAzNzEyMSAxMi45MDE0Miw0LjY4NDcxMDQgMTQsNS42MzY3MTg4IFYgNCBoIDIgViA5IEggMTEgViA3IGggMS41MDk3NjUgQyAxMS41OTA3NSw2LjI0ODUxNzMgMTAuMzQwMjA4LDUuNDUzODA4IDkuMDg3ODkwNCw1LjAyOTI5NjkgNy40MzA5Mzk4LDQuNDY3NjIzMSA1Ljk0NTM0NTgsNC40Njg3MTcgNC43MDcwMzA4LDUuNzA3MDMxMiBjIC0xLjIyNTAxNCwxLjIyNTAxNDIgLTEuNDA5NzY5LDIuNzIwNjk1MyAtMC43NzkyOTcsNC4yOTY4NzQ4IDAuNjMwNDcyLDEuNTc2MTggMi4xNjc0NzUsMy4xNTgwMDYgNC40NDMzNTk4LDQuMDY4MzYgbCAtMC43NDIxODc4LDEuODU1NDY4IGMgLTIuNzI0MTE1LC0xLjA4OTY0NiAtNC42ODcxMTIsLTMuMDA3ODIgLTUuNTU2NjQsLTUuMTgxNjQgLTAuODY5NTI4LC0yLjE3MzgyMDYgLTAuNTU0MjgzLC00LjY3ODEzOTMgMS4yMjA3MDMsLTYuNDUzMTI1MiAwLjkyMzg1NywtMC45MjM4NTY4IDIuMDE1Mzg4LC0xLjM4ODgyOCAzLjEzNDc2NSwtMS41MzUxNTYzIDAuMjc5ODQ1LC0wLjAzNjU4MiAwLjU2MDY4MiwtMC4wNTM3NjEgMC44NDE3OTcsLTAuMDUyNzM0IHpcIiAvPjwvc3ZnPmAsXG4gIHN0cmlrZXRocm91Z2g6IGA8c3ZnIHdpZHRoPVwiMThcIiBoZWlnaHQ9XCIxOFwiPjxwYXRoIGQ9XCJNMTAgMkM2IDIgNCA0IDQgNmMwIC4zMzguMDguNjcyLjE5MyAxaDIuMzRDNi4xMTMgNi42MjkgNiA2LjI5NSA2IDZjMC0uMzM0LjExNy0uNzI1LjY5MS0xLjE1NEM3LjI2NSA0LjQxNiA4LjMzMSA0IDEwIDRoM2ExIDEgMCAwMDAtMnptMS40NzcgOWMuNDEzLjM2OC41MjMuNzA2LjUyMyAxIDAgLjMzNC0uMTI3LjcxMi0uNzAxIDEuMTQzLS41NzUuNDMtMS42MzIuODUtMy4yOTkuODU3bC0xLjAwNi4wMDdWMTRINWExIDEgMCAwMDAgMmgzYzQgMCA2LTIgNi00IDAtLjMzOC0uMDgxLS42NzItLjE5NS0xelwiLz48cmVjdCByeT1cIjFcIiB5PVwiOFwiIHg9XCIxXCIgaGVpZ2h0PVwiMlwiIHdpZHRoPVwiMTZcIi8+PC9zdmc+YCxcbiAgdWw6IGA8c3ZnIGhlaWdodD1cIjE4XCIgd2lkdGg9XCIxOFwiPjxjaXJjbGUgY3g9XCIyXCIgY3k9XCI5XCIgcj1cIjJcIi8+PGNpcmNsZSBjeT1cIjRcIiBjeD1cIjJcIiByPVwiMlwiLz48cmVjdCB5PVwiM1wiIHg9XCI2XCIgaGVpZ2h0PVwiMlwiIHdpZHRoPVwiMTJcIiByeT1cIjFcIi8+PGNpcmNsZSBjeD1cIjJcIiBjeT1cIjE0XCIgcj1cIjJcIi8+PHJlY3Qgcnk9XCIxXCIgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjJcIiB4PVwiNlwiIHk9XCI4XCIvPjxyZWN0IHk9XCIxM1wiIHg9XCI2XCIgaGVpZ2h0PVwiMlwiIHdpZHRoPVwiMTJcIiByeT1cIjFcIi8+PC9zdmc+YCxcbiAgdW5kbzogYDxzdmcgaGVpZ2h0PVwiMThcIiB3aWR0aD1cIjE4XCI+PHBhdGggZD1cIk0gMTAuNzMwNDY5IDIuNzA1MDc4MSBDIDkuODg3MTI0MyAyLjcwODE1OTQgOS4wNDcwMTAzIDIuODcxMjE1NiA4LjI2OTUzMTIgMy4xMzQ3NjU2IEMgNi41OTExMjU2IDMuNzAzNzEyMSA1LjA5ODU3OTcgNC42ODQ3MTA0IDQgNS42MzY3MTg4IEwgNCA0IEwgMiA0IEwgMiA5IEwgNyA5IEwgNyA3IEwgNS40OTAyMzQ0IDcgQyA2LjQwOTI0OTkgNi4yNDg1MTczIDcuNjU5NzkxNCA1LjQ1MzgwOCA4LjkxMjEwOTQgNS4wMjkyOTY5IEMgMTAuNTY5MDYgNC40Njc2MjMxIDEyLjA1NDY1NCA0LjQ2ODcxNyAxMy4yOTI5NjkgNS43MDcwMzEyIEMgMTQuNTE3OTgzIDYuOTMyMDQ1NCAxNC43MDI3MzggOC40Mjc3MjY1IDE0LjA3MjI2NiAxMC4wMDM5MDYgQyAxMy40NDE3OTQgMTEuNTgwMDg2IDExLjkwNDc5MSAxMy4xNjE5MTIgOS42Mjg5MDYyIDE0LjA3MjI2NiBMIDEwLjM3MTA5NCAxNS45Mjc3MzQgQyAxMy4wOTUyMDkgMTQuODM4MDg4IDE1LjA1ODIwNiAxMi45MTk5MTQgMTUuOTI3NzM0IDEwLjc0NjA5NCBDIDE2Ljc5NzI2MiA4LjU3MjI3MzQgMTYuNDgyMDE3IDYuMDY3OTU0NyAxNC43MDcwMzEgNC4yOTI5Njg4IEMgMTMuNzgzMTc0IDMuMzY5MTEyIDEyLjY5MTY0MyAyLjkwNDE0MDggMTEuNTcyMjY2IDIuNzU3ODEyNSBDIDExLjI5MjQyMSAyLjcyMTIzMDQgMTEuMDExNTg0IDIuNzA0MDUxIDEwLjczMDQ2OSAyLjcwNTA3ODEgeiBcIiAvPjwvc3ZnPlxuYFxufTtcblxuZXhwb3J0IGRlZmF1bHQgc3ZnOyIsImltcG9ydCBzdmcgZnJvbSBcIi4vc3ZnL3N2Z1wiO1xuaW1wb3J0IHsgRWRpdG9yLCBQb3NpdGlvbiwgU2VsZWN0aW9uRXZlbnQgfSBmcm9tIFwiLi9UaW55TURFXCI7XG5cbmNvbnN0IGlzTWFjTGlrZSA9IC8oTWFjfGlQaG9uZXxpUG9kfGlQYWQpL2kudGVzdChcbiAgdHlwZW9mIG5hdmlnYXRvciAhPT0gXCJ1bmRlZmluZWRcIiA/IG5hdmlnYXRvci5wbGF0Zm9ybSA6IFwiXCJcbik7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tbWFuZEFjdGlvbiB7XG4gIChlZGl0b3I6IEVkaXRvcik6IHZvaWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tbWFuZEVuYWJsZWQge1xuICAoZWRpdG9yOiBFZGl0b3IsIGZvY3VzPzogUG9zaXRpb24sIGFuY2hvcj86IFBvc2l0aW9uKTogYm9vbGVhbiB8IG51bGw7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tbWFuZERlZmluaXRpb24ge1xuICBuYW1lOiBzdHJpbmc7XG4gIGFjdGlvbjogc3RyaW5nIHwgQ29tbWFuZEFjdGlvbjtcbiAgaW5uZXJIVE1MOiBzdHJpbmc7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIGhvdGtleT86IHN0cmluZztcbiAgZW5hYmxlZD86IENvbW1hbmRFbmFibGVkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbW1hbmRCYXJQcm9wcyB7XG4gIGVsZW1lbnQ/OiBzdHJpbmcgfCBIVE1MRWxlbWVudDtcbiAgZWRpdG9yPzogRWRpdG9yO1xuICBjb21tYW5kcz86IChzdHJpbmcgfCBDb21tYW5kRGVmaW5pdGlvbilbXTtcbn1cblxuaW50ZXJmYWNlIEhvdGtleSB7XG4gIG1vZGlmaWVyczogc3RyaW5nW107XG4gIGNvbW1hbmQ6IHN0cmluZztcbiAga2V5Pzogc3RyaW5nO1xuICBjb2RlPzogc3RyaW5nO1xufVxuXG5jb25zdCBEZWZhdWx0Q29tbWFuZHM6IFJlY29yZDxzdHJpbmcsIENvbW1hbmREZWZpbml0aW9uPiA9IHtcbiAgYm9sZDoge1xuICAgIG5hbWU6IFwiYm9sZFwiLFxuICAgIGFjdGlvbjogXCJib2xkXCIsXG4gICAgaW5uZXJIVE1MOiBzdmcuYm9sZCxcbiAgICB0aXRsZTogXCJCb2xkXCIsXG4gICAgaG90a2V5OiBcIk1vZC1CXCIsXG4gIH0sXG4gIGl0YWxpYzoge1xuICAgIG5hbWU6IFwiaXRhbGljXCIsXG4gICAgYWN0aW9uOiBcIml0YWxpY1wiLFxuICAgIGlubmVySFRNTDogc3ZnLml0YWxpYyxcbiAgICB0aXRsZTogXCJJdGFsaWNcIixcbiAgICBob3RrZXk6IFwiTW9kLUlcIixcbiAgfSxcbiAgc3RyaWtldGhyb3VnaDoge1xuICAgIG5hbWU6IFwic3RyaWtldGhyb3VnaFwiLFxuICAgIGFjdGlvbjogXCJzdHJpa2V0aHJvdWdoXCIsXG4gICAgaW5uZXJIVE1MOiBzdmcuc3RyaWtldGhyb3VnaCxcbiAgICB0aXRsZTogXCJTdHJpa2V0aHJvdWdoXCIsXG4gICAgaG90a2V5OiBcIk1vZDItU2hpZnQtNVwiLFxuICB9LFxuICBjb2RlOiB7XG4gICAgbmFtZTogXCJjb2RlXCIsXG4gICAgYWN0aW9uOiBcImNvZGVcIixcbiAgICBpbm5lckhUTUw6IHN2Zy5jb2RlLFxuICAgIHRpdGxlOiBcIkZvcm1hdCBhcyBjb2RlXCIsXG4gIH0sXG4gIGgxOiB7XG4gICAgbmFtZTogXCJoMVwiLFxuICAgIGFjdGlvbjogXCJoMVwiLFxuICAgIGlubmVySFRNTDogc3ZnLmgxLFxuICAgIHRpdGxlOiBcIkxldmVsIDEgaGVhZGluZ1wiLFxuICAgIGhvdGtleTogXCJNb2QtU2hpZnQtMVwiLFxuICB9LFxuICBoMjoge1xuICAgIG5hbWU6IFwiaDJcIixcbiAgICBhY3Rpb246IFwiaDJcIixcbiAgICBpbm5lckhUTUw6IHN2Zy5oMixcbiAgICB0aXRsZTogXCJMZXZlbCAyIGhlYWRpbmdcIixcbiAgICBob3RrZXk6IFwiTW9kLVNoaWZ0LTJcIixcbiAgfSxcbiAgdWw6IHtcbiAgICBuYW1lOiBcInVsXCIsXG4gICAgYWN0aW9uOiBcInVsXCIsXG4gICAgaW5uZXJIVE1MOiBzdmcudWwsXG4gICAgdGl0bGU6IFwiQnVsbGV0ZWQgbGlzdFwiLFxuICB9LFxuICBvbDoge1xuICAgIG5hbWU6IFwib2xcIixcbiAgICBhY3Rpb246IFwib2xcIixcbiAgICBpbm5lckhUTUw6IHN2Zy5vbCxcbiAgICB0aXRsZTogXCJOdW1iZXJlZCBsaXN0XCIsXG4gIH0sXG4gIGJsb2NrcXVvdGU6IHtcbiAgICBuYW1lOiBcImJsb2NrcXVvdGVcIixcbiAgICBhY3Rpb246IFwiYmxvY2txdW90ZVwiLFxuICAgIGlubmVySFRNTDogc3ZnLmJsb2NrcXVvdGUsXG4gICAgdGl0bGU6IFwiUXVvdGVcIixcbiAgICBob3RrZXk6IFwiTW9kMi1TaGlmdC1RXCIsXG4gIH0sXG4gIGluc2VydExpbms6IHtcbiAgICBuYW1lOiBcImluc2VydExpbmtcIixcbiAgICBhY3Rpb246IChlZGl0b3I6IEVkaXRvcikgPT4ge1xuICAgICAgaWYgKGVkaXRvci5pc0lubGluZUZvcm1hdHRpbmdBbGxvd2VkKCkpIGVkaXRvci53cmFwU2VsZWN0aW9uKFwiW1wiLCBcIl0oKVwiKTtcbiAgICB9LFxuICAgIGVuYWJsZWQ6IChlZGl0b3I6IEVkaXRvcikgPT5cbiAgICAgIGVkaXRvci5pc0lubGluZUZvcm1hdHRpbmdBbGxvd2VkKCkgPyBmYWxzZSA6IG51bGwsXG4gICAgaW5uZXJIVE1MOiBzdmcubGluayxcbiAgICB0aXRsZTogXCJJbnNlcnQgbGlua1wiLFxuICAgIGhvdGtleTogXCJNb2QtS1wiLFxuICB9LFxuICBpbnNlcnRJbWFnZToge1xuICAgIG5hbWU6IFwiaW5zZXJ0SW1hZ2VcIixcbiAgICBhY3Rpb246IChlZGl0b3I6IEVkaXRvcikgPT4ge1xuICAgICAgaWYgKGVkaXRvci5pc0lubGluZUZvcm1hdHRpbmdBbGxvd2VkKCkpIGVkaXRvci53cmFwU2VsZWN0aW9uKFwiIVtcIiwgXCJdKClcIik7XG4gICAgfSxcbiAgICBlbmFibGVkOiAoZWRpdG9yOiBFZGl0b3IpID0+XG4gICAgICBlZGl0b3IuaXNJbmxpbmVGb3JtYXR0aW5nQWxsb3dlZCgpID8gZmFsc2UgOiBudWxsLFxuICAgIGlubmVySFRNTDogc3ZnLmltYWdlLFxuICAgIHRpdGxlOiBcIkluc2VydCBpbWFnZVwiLFxuICAgIGhvdGtleTogXCJNb2QyLVNoaWZ0LUlcIixcbiAgfSxcbiAgaHI6IHtcbiAgICBuYW1lOiBcImhyXCIsXG4gICAgYWN0aW9uOiAoZWRpdG9yOiBFZGl0b3IpID0+IGVkaXRvci5wYXN0ZShcIlxcbioqKlxcblwiKSxcbiAgICBlbmFibGVkOiAoKSA9PiBmYWxzZSxcbiAgICBpbm5lckhUTUw6IHN2Zy5ocixcbiAgICB0aXRsZTogXCJJbnNlcnQgaG9yaXpvbnRhbCBsaW5lXCIsXG4gICAgaG90a2V5OiBcIk1vZDItU2hpZnQtTFwiLFxuICB9LFxuICB1bmRvOiB7XG4gICAgbmFtZTogXCJ1bmRvXCIsXG4gICAgYWN0aW9uOiAoZWRpdG9yOiBFZGl0b3IpID0+IGVkaXRvci51bmRvKCksXG4gICAgZW5hYmxlZDogKGVkaXRvcjogRWRpdG9yKSA9PiAoZWRpdG9yLmNhblVuZG8gPyBmYWxzZSA6IG51bGwpLFxuICAgIGlubmVySFRNTDogc3ZnLnVuZG8sXG4gICAgdGl0bGU6IFwiVW5kb1wiLFxuICB9LFxuICByZWRvOiB7XG4gICAgbmFtZTogXCJyZWRvXCIsXG4gICAgYWN0aW9uOiAoZWRpdG9yOiBFZGl0b3IpID0+IGVkaXRvci5yZWRvKCksXG4gICAgZW5hYmxlZDogKGVkaXRvcjogRWRpdG9yKSA9PiAoZWRpdG9yLmNhblJlZG8gPyBmYWxzZSA6IG51bGwpLFxuICAgIGlubmVySFRNTDogc3ZnLnJlZG8sXG4gICAgdGl0bGU6IFwiUmVkb1wiLFxuICB9LFxufTtcblxuZXhwb3J0IGNsYXNzIENvbW1hbmRCYXIge1xuICBwdWJsaWMgZTogSFRNTERpdkVsZW1lbnQgfCBudWxsID0gbnVsbDtcbiAgcHVibGljIGVkaXRvcjogRWRpdG9yIHwgbnVsbCA9IG51bGw7XG4gIHB1YmxpYyBjb21tYW5kczogUmVjb3JkPHN0cmluZywgQ29tbWFuZERlZmluaXRpb24+ID0ge307XG4gIHB1YmxpYyBidXR0b25zOiBSZWNvcmQ8c3RyaW5nLCBIVE1MRGl2RWxlbWVudD4gPSB7fTtcbiAgcHVibGljIHN0YXRlOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuIHwgbnVsbD4gPSB7fTtcbiAgcHJpdmF0ZSBob3RrZXlzOiBIb3RrZXlbXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBDb21tYW5kQmFyUHJvcHMpIHtcbiAgICB0aGlzLmUgPSBudWxsO1xuICAgIHRoaXMuZWRpdG9yID0gbnVsbDtcbiAgICB0aGlzLmNvbW1hbmRzID0ge307XG4gICAgdGhpcy5idXR0b25zID0ge307XG4gICAgdGhpcy5zdGF0ZSA9IHt9O1xuICAgIHRoaXMuaG90a2V5cyA9IFtdO1xuXG4gICAgbGV0IGVsZW1lbnQ6IEhUTUxFbGVtZW50IHwgbnVsbCA9IG51bGw7XG4gICAgaWYgKHR5cGVvZiBwcm9wcy5lbGVtZW50ID09PSAnc3RyaW5nJykge1xuICAgICAgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHByb3BzLmVsZW1lbnQpO1xuICAgIH0gZWxzZSBpZiAocHJvcHMuZWxlbWVudCkge1xuICAgICAgZWxlbWVudCA9IHByb3BzLmVsZW1lbnQ7XG4gICAgfVxuICAgIFxuICAgIGlmICghZWxlbWVudCkge1xuICAgICAgZWxlbWVudCA9IGRvY3VtZW50LmJvZHk7XG4gICAgfVxuXG4gICAgdGhpcy5jcmVhdGVDb21tYW5kQmFyRWxlbWVudChcbiAgICAgIGVsZW1lbnQsXG4gICAgICBwcm9wcy5jb21tYW5kcyB8fCBbXG4gICAgICAgIFwiYm9sZFwiLFxuICAgICAgICBcIml0YWxpY1wiLFxuICAgICAgICBcInN0cmlrZXRocm91Z2hcIixcbiAgICAgICAgXCJ8XCIsXG4gICAgICAgIFwiY29kZVwiLFxuICAgICAgICBcInxcIixcbiAgICAgICAgXCJoMVwiLFxuICAgICAgICBcImgyXCIsXG4gICAgICAgIFwifFwiLFxuICAgICAgICBcInVsXCIsXG4gICAgICAgIFwib2xcIixcbiAgICAgICAgXCJ8XCIsXG4gICAgICAgIFwiYmxvY2txdW90ZVwiLFxuICAgICAgICBcImhyXCIsXG4gICAgICAgIFwifFwiLFxuICAgICAgICBcInVuZG9cIixcbiAgICAgICAgXCJyZWRvXCIsXG4gICAgICAgIFwifFwiLFxuICAgICAgICBcImluc2VydExpbmtcIixcbiAgICAgICAgXCJpbnNlcnRJbWFnZVwiLFxuICAgICAgXVxuICAgICk7XG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgKGUpID0+IHRoaXMuaGFuZGxlS2V5ZG93bihlKSk7XG4gICAgaWYgKHByb3BzLmVkaXRvcikgdGhpcy5zZXRFZGl0b3IocHJvcHMuZWRpdG9yKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlQ29tbWFuZEJhckVsZW1lbnQocGFyZW50RWxlbWVudDogSFRNTEVsZW1lbnQsIGNvbW1hbmRzOiAoc3RyaW5nIHwgQ29tbWFuZERlZmluaXRpb24pW10pOiB2b2lkIHtcbiAgICB0aGlzLmUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHRoaXMuZS5jbGFzc05hbWUgPSBcIlRNQ29tbWFuZEJhclwiO1xuXG4gICAgZm9yIChsZXQgY29tbWFuZCBvZiBjb21tYW5kcykge1xuICAgICAgaWYgKGNvbW1hbmQgPT09IFwifFwiKSB7XG4gICAgICAgIGxldCBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICAgIGVsLmNsYXNzTmFtZSA9IFwiVE1Db21tYW5kRGl2aWRlclwiO1xuICAgICAgICB0aGlzLmUuYXBwZW5kQ2hpbGQoZWwpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGV0IGNvbW1hbmROYW1lOiBzdHJpbmc7XG4gICAgICAgIGlmICh0eXBlb2YgY29tbWFuZCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgIGlmIChEZWZhdWx0Q29tbWFuZHNbY29tbWFuZF0pIHtcbiAgICAgICAgICAgIGNvbW1hbmROYW1lID0gY29tbWFuZDtcbiAgICAgICAgICAgIHRoaXMuY29tbWFuZHNbY29tbWFuZE5hbWVdID0gRGVmYXVsdENvbW1hbmRzW2NvbW1hbmROYW1lXTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBjb21tYW5kID09PSBcIm9iamVjdFwiICYmIGNvbW1hbmQubmFtZSkge1xuICAgICAgICAgIGNvbW1hbmROYW1lID0gY29tbWFuZC5uYW1lO1xuICAgICAgICAgIHRoaXMuY29tbWFuZHNbY29tbWFuZE5hbWVdID0ge30gYXMgQ29tbWFuZERlZmluaXRpb247XG4gICAgICAgICAgaWYgKERlZmF1bHRDb21tYW5kc1tjb21tYW5kTmFtZV0pIHtcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24odGhpcy5jb21tYW5kc1tjb21tYW5kTmFtZV0sIERlZmF1bHRDb21tYW5kc1tjb21tYW5kTmFtZV0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMuY29tbWFuZHNbY29tbWFuZE5hbWVdLCBjb21tYW5kKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCB0aXRsZSA9IHRoaXMuY29tbWFuZHNbY29tbWFuZE5hbWVdLnRpdGxlIHx8IGNvbW1hbmROYW1lO1xuXG4gICAgICAgIGlmICh0aGlzLmNvbW1hbmRzW2NvbW1hbmROYW1lXS5ob3RrZXkpIHtcbiAgICAgICAgICBjb25zdCBrZXlzID0gdGhpcy5jb21tYW5kc1tjb21tYW5kTmFtZV0uaG90a2V5IS5zcGxpdChcIi1cIik7XG4gICAgICAgICAgbGV0IG1vZGlmaWVyczogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgICBsZXQgbW9kaWZpZXJleHBsYW5hdGlvbjogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgICBcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKGtleXNbaV0pIHtcbiAgICAgICAgICAgICAgY2FzZSBcIkN0cmxcIjpcbiAgICAgICAgICAgICAgICBtb2RpZmllcnMucHVzaChcImN0cmxLZXlcIik7XG4gICAgICAgICAgICAgICAgbW9kaWZpZXJleHBsYW5hdGlvbi5wdXNoKFwiQ3RybFwiKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSBcIkNtZFwiOlxuICAgICAgICAgICAgICAgIG1vZGlmaWVycy5wdXNoKFwibWV0YUtleVwiKTtcbiAgICAgICAgICAgICAgICBtb2RpZmllcmV4cGxhbmF0aW9uLnB1c2goXCLijJhcIik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgXCJBbHRcIjpcbiAgICAgICAgICAgICAgICBtb2RpZmllcnMucHVzaChcImFsdEtleVwiKTtcbiAgICAgICAgICAgICAgICBtb2RpZmllcmV4cGxhbmF0aW9uLnB1c2goXCJBbHRcIik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgXCJPcHRpb25cIjpcbiAgICAgICAgICAgICAgICBtb2RpZmllcnMucHVzaChcImFsdEtleVwiKTtcbiAgICAgICAgICAgICAgICBtb2RpZmllcmV4cGxhbmF0aW9uLnB1c2goXCLijKVcIik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgXCJXaW5cIjpcbiAgICAgICAgICAgICAgICBtb2RpZmllcnMucHVzaChcIm1ldGFLZXlcIik7XG4gICAgICAgICAgICAgICAgbW9kaWZpZXJleHBsYW5hdGlvbi5wdXNoKFwi4oqeIFdpblwiKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSBcIlNoaWZ0XCI6XG4gICAgICAgICAgICAgICAgbW9kaWZpZXJzLnB1c2goXCJzaGlmdEtleVwiKTtcbiAgICAgICAgICAgICAgICBtb2RpZmllcmV4cGxhbmF0aW9uLnB1c2goXCLih6dcIik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgXCJNb2RcIjpcbiAgICAgICAgICAgICAgICBpZiAoaXNNYWNMaWtlKSB7XG4gICAgICAgICAgICAgICAgICBtb2RpZmllcnMucHVzaChcIm1ldGFLZXlcIik7XG4gICAgICAgICAgICAgICAgICBtb2RpZmllcmV4cGxhbmF0aW9uLnB1c2goXCLijJhcIik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIG1vZGlmaWVycy5wdXNoKFwiY3RybEtleVwiKTtcbiAgICAgICAgICAgICAgICAgIG1vZGlmaWVyZXhwbGFuYXRpb24ucHVzaChcIkN0cmxcIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIFwiTW9kMlwiOlxuICAgICAgICAgICAgICAgIG1vZGlmaWVycy5wdXNoKFwiYWx0S2V5XCIpO1xuICAgICAgICAgICAgICAgIGlmIChpc01hY0xpa2UpIG1vZGlmaWVyZXhwbGFuYXRpb24ucHVzaChcIuKMpVwiKTtcbiAgICAgICAgICAgICAgICBlbHNlIG1vZGlmaWVyZXhwbGFuYXRpb24ucHVzaChcIkFsdFwiKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgXG4gICAgICAgICAgbW9kaWZpZXJleHBsYW5hdGlvbi5wdXNoKGtleXNba2V5cy5sZW5ndGggLSAxXSk7XG4gICAgICAgICAgbGV0IGhvdGtleTogSG90a2V5ID0ge1xuICAgICAgICAgICAgbW9kaWZpZXJzOiBtb2RpZmllcnMsXG4gICAgICAgICAgICBjb21tYW5kOiBjb21tYW5kTmFtZSxcbiAgICAgICAgICB9O1xuICAgICAgICAgIFxuICAgICAgICAgIGNvbnN0IGxhc3RLZXkgPSBrZXlzW2tleXMubGVuZ3RoIC0gMV07XG4gICAgICAgICAgaWYgKGxhc3RLZXkubWF0Y2goL15bMC05XSQvKSkge1xuICAgICAgICAgICAgaG90a2V5LmNvZGUgPSBgRGlnaXQke2xhc3RLZXl9YDtcbiAgICAgICAgICB9IGVsc2UgaWYgKGxhc3RLZXkubWF0Y2goL15bYS16QS1aXSQvKSkge1xuICAgICAgICAgICAgaG90a2V5LmNvZGUgPSBgS2V5JHtsYXN0S2V5LnRvVXBwZXJDYXNlKCl9YDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaG90a2V5LmtleSA9IGxhc3RLZXkudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5ob3RrZXlzLnB1c2goaG90a2V5KTtcbiAgICAgICAgICB0aXRsZSA9IHRpdGxlLmNvbmNhdChgICgke21vZGlmaWVyZXhwbGFuYXRpb24uam9pbihcIitcIil9KWApO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5idXR0b25zW2NvbW1hbmROYW1lXSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICAgIHRoaXMuYnV0dG9uc1tjb21tYW5kTmFtZV0uY2xhc3NOYW1lID0gXCJUTUNvbW1hbmRCdXR0b24gVE1Db21tYW5kQnV0dG9uX0Rpc2FibGVkXCI7XG4gICAgICAgIHRoaXMuYnV0dG9uc1tjb21tYW5kTmFtZV0udGl0bGUgPSB0aXRsZTtcbiAgICAgICAgdGhpcy5idXR0b25zW2NvbW1hbmROYW1lXS5pbm5lckhUTUwgPSB0aGlzLmNvbW1hbmRzW2NvbW1hbmROYW1lXS5pbm5lckhUTUw7XG5cbiAgICAgICAgdGhpcy5idXR0b25zW2NvbW1hbmROYW1lXS5hZGRFdmVudExpc3RlbmVyKFwibW91c2Vkb3duXCIsIChlKSA9PlxuICAgICAgICAgIHRoaXMuaGFuZGxlQ2xpY2soY29tbWFuZE5hbWUsIGUpXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuZS5hcHBlbmRDaGlsZCh0aGlzLmJ1dHRvbnNbY29tbWFuZE5hbWVdKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcGFyZW50RWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLmUpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVDbGljayhjb21tYW5kTmFtZTogc3RyaW5nLCBldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZWRpdG9yKSByZXR1cm47XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgIC8vIEZvY3VzIHRoZSBlZGl0b3IgaWYgaXQncyBub3QgYWxyZWFkeSBmb2N1c2VkXG4gICAgaWYgKHRoaXMuZWRpdG9yLmUpIHtcbiAgICAgIGNvbnN0IGVkaXRvckhhZEZvY3VzID0gdGhpcy5lZGl0b3IuZS5jb250YWlucyhkb2N1bWVudC5hY3RpdmVFbGVtZW50KTtcbiAgICAgIHRoaXMuZWRpdG9yLmUuZm9jdXMoKTtcbiAgICAgIC8vIE9ubHkgcmVzdG9yZSB0aGUgbGFzdCBzZWxlY3Rpb24gaWYgdGhlIGVkaXRvciB3YXMgbm90IGZvY3VzZWQgYmVmb3JlXG4gICAgICBpZiAoIWVkaXRvckhhZEZvY3VzKSB7XG4gICAgICAgIHRoaXMuZWRpdG9yLnJlc3RvcmVMYXN0U2VsZWN0aW9uKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiB0aGlzLmNvbW1hbmRzW2NvbW1hbmROYW1lXS5hY3Rpb24gPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIGlmICh0aGlzLnN0YXRlW2NvbW1hbmROYW1lXSA9PT0gZmFsc2UpXG4gICAgICAgICh0aGlzLmVkaXRvciBhcyBhbnkpLnNldENvbW1hbmRTdGF0ZShjb21tYW5kTmFtZSwgdHJ1ZSk7XG4gICAgICBlbHNlICh0aGlzLmVkaXRvciBhcyBhbnkpLnNldENvbW1hbmRTdGF0ZShjb21tYW5kTmFtZSwgZmFsc2UpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHRoaXMuY29tbWFuZHNbY29tbWFuZE5hbWVdLmFjdGlvbiA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAodGhpcy5jb21tYW5kc1tjb21tYW5kTmFtZV0uYWN0aW9uIGFzIENvbW1hbmRBY3Rpb24pKHRoaXMuZWRpdG9yKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgc2V0RWRpdG9yKGVkaXRvcjogRWRpdG9yKTogdm9pZCB7XG4gICAgdGhpcy5lZGl0b3IgPSBlZGl0b3I7XG4gICAgZWRpdG9yLmFkZEV2ZW50TGlzdGVuZXIoXCJzZWxlY3Rpb25cIiwgKGUpID0+IHRoaXMuaGFuZGxlU2VsZWN0aW9uKGUpKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlU2VsZWN0aW9uKGV2ZW50OiBTZWxlY3Rpb25FdmVudCk6IHZvaWQge1xuICAgIGlmIChldmVudC5jb21tYW5kU3RhdGUpIHtcbiAgICAgIGZvciAobGV0IGNvbW1hbmQgaW4gdGhpcy5jb21tYW5kcykge1xuICAgICAgICBpZiAoZXZlbnQuY29tbWFuZFN0YXRlW2NvbW1hbmRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBpZiAodGhpcy5jb21tYW5kc1tjb21tYW5kXS5lbmFibGVkKSB7XG4gICAgICAgICAgICB0aGlzLnN0YXRlW2NvbW1hbmRdID0gdGhpcy5jb21tYW5kc1tjb21tYW5kXS5lbmFibGVkIShcbiAgICAgICAgICAgICAgdGhpcy5lZGl0b3IhLFxuICAgICAgICAgICAgICBldmVudC5mb2N1cyxcbiAgICAgICAgICAgICAgZXZlbnQuYW5jaG9yXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnN0YXRlW2NvbW1hbmRdID0gZXZlbnQuZm9jdXMgPyBmYWxzZSA6IG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuc3RhdGVbY29tbWFuZF0gPSBldmVudC5jb21tYW5kU3RhdGVbY29tbWFuZF07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5zdGF0ZVtjb21tYW5kXSA9PT0gdHJ1ZSkge1xuICAgICAgICAgIHRoaXMuYnV0dG9uc1tjb21tYW5kXS5jbGFzc05hbWUgPSBcIlRNQ29tbWFuZEJ1dHRvbiBUTUNvbW1hbmRCdXR0b25fQWN0aXZlXCI7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5zdGF0ZVtjb21tYW5kXSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICB0aGlzLmJ1dHRvbnNbY29tbWFuZF0uY2xhc3NOYW1lID0gXCJUTUNvbW1hbmRCdXR0b24gVE1Db21tYW5kQnV0dG9uX0luYWN0aXZlXCI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5idXR0b25zW2NvbW1hbmRdLmNsYXNzTmFtZSA9IFwiVE1Db21tYW5kQnV0dG9uIFRNQ29tbWFuZEJ1dHRvbl9EaXNhYmxlZFwiO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVLZXlkb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgb3V0ZXI6IGZvciAobGV0IGhvdGtleSBvZiB0aGlzLmhvdGtleXMpIHtcbiAgICAgIGlmIChcbiAgICAgICAgKGhvdGtleS5rZXkgJiYgZXZlbnQua2V5LnRvTG93ZXJDYXNlKCkgPT09IGhvdGtleS5rZXkpIHx8XG4gICAgICAgIChob3RrZXkuY29kZSAmJiBldmVudC5jb2RlID09PSBob3RrZXkuY29kZSlcbiAgICAgICkge1xuICAgICAgICBmb3IgKGxldCBtb2RpZmllciBvZiBob3RrZXkubW9kaWZpZXJzKSB7XG4gICAgICAgICAgaWYgKCEoZXZlbnQgYXMgYW55KVttb2RpZmllcl0pIGNvbnRpbnVlIG91dGVyO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaGFuZGxlQ2xpY2soaG90a2V5LmNvbW1hbmQsIGV2ZW50KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBDb21tYW5kQmFyOyIsIid1c2Ugc3RyaWN0JztcbnZhciBjaGVjayA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgJiYgaXQuTWF0aCA9PT0gTWF0aCAmJiBpdDtcbn07XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy84NiNpc3N1ZWNvbW1lbnQtMTE1NzU5MDI4XG5tb2R1bGUuZXhwb3J0cyA9XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1nbG9iYWwtdGhpcyAtLSBzYWZlXG4gIGNoZWNrKHR5cGVvZiBnbG9iYWxUaGlzID09ICdvYmplY3QnICYmIGdsb2JhbFRoaXMpIHx8XG4gIGNoZWNrKHR5cGVvZiB3aW5kb3cgPT0gJ29iamVjdCcgJiYgd2luZG93KSB8fFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1nbG9iYWxzIC0tIHNhZmVcbiAgY2hlY2sodHlwZW9mIHNlbGYgPT0gJ29iamVjdCcgJiYgc2VsZikgfHxcbiAgY2hlY2sodHlwZW9mIGdsb2JhbCA9PSAnb2JqZWN0JyAmJiBnbG9iYWwpIHx8XG4gIGNoZWNrKHR5cGVvZiB0aGlzID09ICdvYmplY3QnICYmIHRoaXMpIHx8XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXctZnVuYyAtLSBmYWxsYmFja1xuICAoZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSkoKSB8fCBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuIiwiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXhlYykge1xuICB0cnkge1xuICAgIHJldHVybiAhIWV4ZWMoKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG4vLyBEZXRlY3QgSUU4J3MgaW5jb21wbGV0ZSBkZWZpbmVQcm9wZXJ0eSBpbXBsZW1lbnRhdGlvblxubW9kdWxlLmV4cG9ydHMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sIDEsIHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9IH0pWzFdICE9PSA3O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tZnVuY3Rpb24tcHJvdG90eXBlLWJpbmQgLS0gc2FmZVxuICB2YXIgdGVzdCA9IChmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0pLmJpbmQoKTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGlucyAtLSBzYWZlXG4gIHJldHVybiB0eXBlb2YgdGVzdCAhPSAnZnVuY3Rpb24nIHx8IHRlc3QuaGFzT3duUHJvcGVydHkoJ3Byb3RvdHlwZScpO1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgTkFUSVZFX0JJTkQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1uYXRpdmUnKTtcblxudmFyIEZ1bmN0aW9uUHJvdG90eXBlID0gRnVuY3Rpb24ucHJvdG90eXBlO1xudmFyIGNhbGwgPSBGdW5jdGlvblByb3RvdHlwZS5jYWxsO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWZ1bmN0aW9uLXByb3RvdHlwZS1iaW5kIC0tIHNhZmVcbnZhciB1bmN1cnJ5VGhpc1dpdGhCaW5kID0gTkFUSVZFX0JJTkQgJiYgRnVuY3Rpb25Qcm90b3R5cGUuYmluZC5iaW5kKGNhbGwsIGNhbGwpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE5BVElWRV9CSU5EID8gdW5jdXJyeVRoaXNXaXRoQmluZCA6IGZ1bmN0aW9uIChmbikge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBjYWxsLmFwcGx5KGZuLCBhcmd1bWVudHMpO1xuICB9O1xufTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtSXNIVE1MRERBLWludGVybmFsLXNsb3RcbnZhciBkb2N1bWVudEFsbCA9IHR5cGVvZiBkb2N1bWVudCA9PSAnb2JqZWN0JyAmJiBkb2N1bWVudC5hbGw7XG5cbi8vIGBJc0NhbGxhYmxlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtaXNjYWxsYWJsZVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vbm8tdHlwZW9mLXVuZGVmaW5lZCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xubW9kdWxlLmV4cG9ydHMgPSB0eXBlb2YgZG9jdW1lbnRBbGwgPT0gJ3VuZGVmaW5lZCcgJiYgZG9jdW1lbnRBbGwgIT09IHVuZGVmaW5lZCA/IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gdHlwZW9mIGFyZ3VtZW50ID09ICdmdW5jdGlvbicgfHwgYXJndW1lbnQgPT09IGRvY3VtZW50QWxsO1xufSA6IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gdHlwZW9mIGFyZ3VtZW50ID09ICdmdW5jdGlvbic7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gd2UgY2FuJ3QgdXNlIGp1c3QgYGl0ID09IG51bGxgIHNpbmNlIG9mIGBkb2N1bWVudC5hbGxgIHNwZWNpYWwgY2FzZVxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1Jc0hUTUxEREEtaW50ZXJuYWwtc2xvdC1hZWNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCA9PT0gbnVsbCB8fCBpdCA9PT0gdW5kZWZpbmVkO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBpc051bGxPclVuZGVmaW5lZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZCcpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gYFJlcXVpcmVPYmplY3RDb2VyY2libGVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1yZXF1aXJlb2JqZWN0Y29lcmNpYmxlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoaXNOdWxsT3JVbmRlZmluZWQoaXQpKSB0aHJvdyBuZXcgJFR5cGVFcnJvcihcIkNhbid0IGNhbGwgbWV0aG9kIG9uIFwiICsgaXQpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG5cbnZhciAkT2JqZWN0ID0gT2JqZWN0O1xuXG4vLyBgVG9PYmplY3RgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b29iamVjdFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuICRPYmplY3QocmVxdWlyZU9iamVjdENvZXJjaWJsZShhcmd1bWVudCkpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcblxudmFyIGhhc093blByb3BlcnR5ID0gdW5jdXJyeVRoaXMoe30uaGFzT3duUHJvcGVydHkpO1xuXG4vLyBgSGFzT3duUHJvcGVydHlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1oYXNvd25wcm9wZXJ0eVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1oYXNvd24gLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuaGFzT3duIHx8IGZ1bmN0aW9uIGhhc093bihpdCwga2V5KSB7XG4gIHJldHVybiBoYXNPd25Qcm9wZXJ0eSh0b09iamVjdChpdCksIGtleSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcblxudmFyIEZ1bmN0aW9uUHJvdG90eXBlID0gRnVuY3Rpb24ucHJvdG90eXBlO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyIGdldERlc2NyaXB0b3IgPSBERVNDUklQVE9SUyAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG52YXIgRVhJU1RTID0gaGFzT3duKEZ1bmN0aW9uUHJvdG90eXBlLCAnbmFtZScpO1xuLy8gYWRkaXRpb25hbCBwcm90ZWN0aW9uIGZyb20gbWluaWZpZWQgLyBtYW5nbGVkIC8gZHJvcHBlZCBmdW5jdGlvbiBuYW1lc1xudmFyIFBST1BFUiA9IEVYSVNUUyAmJiAoZnVuY3Rpb24gc29tZXRoaW5nKCkgeyAvKiBlbXB0eSAqLyB9KS5uYW1lID09PSAnc29tZXRoaW5nJztcbnZhciBDT05GSUdVUkFCTEUgPSBFWElTVFMgJiYgKCFERVNDUklQVE9SUyB8fCAoREVTQ1JJUFRPUlMgJiYgZ2V0RGVzY3JpcHRvcihGdW5jdGlvblByb3RvdHlwZSwgJ25hbWUnKS5jb25maWd1cmFibGUpKTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIEVYSVNUUzogRVhJU1RTLFxuICBQUk9QRVI6IFBST1BFUixcbiAgQ09ORklHVVJBQkxFOiBDT05GSUdVUkFCTEVcbn07XG4iLCIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZhbHNlO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG52YXIgZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgdHJ5IHtcbiAgICBkZWZpbmVQcm9wZXJ0eShnbG9iYWxUaGlzLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGdsb2JhbFRoaXNba2V5XSA9IHZhbHVlO1xuICB9IHJldHVybiB2YWx1ZTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIGRlZmluZUdsb2JhbFByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1nbG9iYWwtcHJvcGVydHknKTtcblxudmFyIFNIQVJFRCA9ICdfX2NvcmUtanNfc2hhcmVkX18nO1xudmFyIHN0b3JlID0gbW9kdWxlLmV4cG9ydHMgPSBnbG9iYWxUaGlzW1NIQVJFRF0gfHwgZGVmaW5lR2xvYmFsUHJvcGVydHkoU0hBUkVELCB7fSk7XG5cbihzdG9yZS52ZXJzaW9ucyB8fCAoc3RvcmUudmVyc2lvbnMgPSBbXSkpLnB1c2goe1xuICB2ZXJzaW9uOiAnMy40Mi4wJyxcbiAgbW9kZTogSVNfUFVSRSA/ICdwdXJlJyA6ICdnbG9iYWwnLFxuICBjb3B5cmlnaHQ6ICfCqSAyMDE0LTIwMjUgRGVuaXMgUHVzaGthcmV2ICh6bG9pcm9jay5ydSknLFxuICBsaWNlbnNlOiAnaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvYmxvYi92My40Mi4wL0xJQ0VOU0UnLFxuICBzb3VyY2U6ICdodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcydcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBzdG9yZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQtc3RvcmUnKTtcblxudmFyIGZ1bmN0aW9uVG9TdHJpbmcgPSB1bmN1cnJ5VGhpcyhGdW5jdGlvbi50b1N0cmluZyk7XG5cbi8vIHRoaXMgaGVscGVyIGJyb2tlbiBpbiBgY29yZS1qc0AzLjQuMS0zLjQuNGAsIHNvIHdlIGNhbid0IHVzZSBgc2hhcmVkYCBoZWxwZXJcbmlmICghaXNDYWxsYWJsZShzdG9yZS5pbnNwZWN0U291cmNlKSkge1xuICBzdG9yZS5pbnNwZWN0U291cmNlID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uVG9TdHJpbmcoaXQpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0b3JlLmluc3BlY3RTb3VyY2U7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcblxudmFyIFdlYWtNYXAgPSBnbG9iYWxUaGlzLldlYWtNYXA7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNDYWxsYWJsZShXZWFrTWFwKSAmJiAvbmF0aXZlIGNvZGUvLnRlc3QoU3RyaW5nKFdlYWtNYXApKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0eXBlb2YgaXQgPT0gJ29iamVjdCcgPyBpdCAhPT0gbnVsbCA6IGlzQ2FsbGFibGUoaXQpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG5cbnZhciBkb2N1bWVudCA9IGdsb2JhbFRoaXMuZG9jdW1lbnQ7XG4vLyB0eXBlb2YgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCBpcyAnb2JqZWN0JyBpbiBvbGQgSUVcbnZhciBFWElTVFMgPSBpc09iamVjdChkb2N1bWVudCkgJiYgaXNPYmplY3QoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBFWElTVFMgPyBkb2N1bWVudC5jcmVhdGVFbGVtZW50KGl0KSA6IHt9O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgY3JlYXRlRWxlbWVudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb2N1bWVudC1jcmVhdGUtZWxlbWVudCcpO1xuXG4vLyBUaGFua3MgdG8gSUU4IGZvciBpdHMgZnVubnkgZGVmaW5lUHJvcGVydHlcbm1vZHVsZS5leHBvcnRzID0gIURFU0NSSVBUT1JTICYmICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjcmVhdGVFbGVtZW50KCdkaXYnKSwgJ2EnLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9XG4gIH0pLmEgIT09IDc7XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbi8vIFY4IH4gQ2hyb21lIDM2LVxuLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzMzNFxubW9kdWxlLmV4cG9ydHMgPSBERVNDUklQVE9SUyAmJiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0sICdwcm90b3R5cGUnLCB7XG4gICAgdmFsdWU6IDQyLFxuICAgIHdyaXRhYmxlOiBmYWxzZVxuICB9KS5wcm90b3R5cGUgIT09IDQyO1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG5cbnZhciAkU3RyaW5nID0gU3RyaW5nO1xudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBBc3NlcnQ6IFR5cGUoYXJndW1lbnQpIGlzIE9iamVjdGBcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIGlmIChpc09iamVjdChhcmd1bWVudCkpIHJldHVybiBhcmd1bWVudDtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoJFN0cmluZyhhcmd1bWVudCkgKyAnIGlzIG5vdCBhbiBvYmplY3QnKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgTkFUSVZFX0JJTkQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1uYXRpdmUnKTtcblxudmFyIGNhbGwgPSBGdW5jdGlvbi5wcm90b3R5cGUuY2FsbDtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1mdW5jdGlvbi1wcm90b3R5cGUtYmluZCAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IE5BVElWRV9CSU5EID8gY2FsbC5iaW5kKGNhbGwpIDogZnVuY3Rpb24gKCkge1xuICByZXR1cm4gY2FsbC5hcHBseShjYWxsLCBhcmd1bWVudHMpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xuXG52YXIgYUZ1bmN0aW9uID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiBpc0NhbGxhYmxlKGFyZ3VtZW50KSA/IGFyZ3VtZW50IDogdW5kZWZpbmVkO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZXNwYWNlLCBtZXRob2QpIHtcbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPCAyID8gYUZ1bmN0aW9uKGdsb2JhbFRoaXNbbmFtZXNwYWNlXSkgOiBnbG9iYWxUaGlzW25hbWVzcGFjZV0gJiYgZ2xvYmFsVGhpc1tuYW1lc3BhY2VdW21ldGhvZF07XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHVuY3VycnlUaGlzKHt9LmlzUHJvdG90eXBlT2YpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcblxudmFyIG5hdmlnYXRvciA9IGdsb2JhbFRoaXMubmF2aWdhdG9yO1xudmFyIHVzZXJBZ2VudCA9IG5hdmlnYXRvciAmJiBuYXZpZ2F0b3IudXNlckFnZW50O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHVzZXJBZ2VudCA/IFN0cmluZyh1c2VyQWdlbnQpIDogJyc7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnZpcm9ubWVudC11c2VyLWFnZW50Jyk7XG5cbnZhciBwcm9jZXNzID0gZ2xvYmFsVGhpcy5wcm9jZXNzO1xudmFyIERlbm8gPSBnbG9iYWxUaGlzLkRlbm87XG52YXIgdmVyc2lvbnMgPSBwcm9jZXNzICYmIHByb2Nlc3MudmVyc2lvbnMgfHwgRGVubyAmJiBEZW5vLnZlcnNpb247XG52YXIgdjggPSB2ZXJzaW9ucyAmJiB2ZXJzaW9ucy52ODtcbnZhciBtYXRjaCwgdmVyc2lvbjtcblxuaWYgKHY4KSB7XG4gIG1hdGNoID0gdjguc3BsaXQoJy4nKTtcbiAgLy8gaW4gb2xkIENocm9tZSwgdmVyc2lvbnMgb2YgVjggaXNuJ3QgVjggPSBDaHJvbWUgLyAxMFxuICAvLyBidXQgdGhlaXIgY29ycmVjdCB2ZXJzaW9ucyBhcmUgbm90IGludGVyZXN0aW5nIGZvciB1c1xuICB2ZXJzaW9uID0gbWF0Y2hbMF0gPiAwICYmIG1hdGNoWzBdIDwgNCA/IDEgOiArKG1hdGNoWzBdICsgbWF0Y2hbMV0pO1xufVxuXG4vLyBCcm93c2VyRlMgTm9kZUpTIGBwcm9jZXNzYCBwb2x5ZmlsbCBpbmNvcnJlY3RseSBzZXQgYC52OGAgdG8gYDAuMGBcbi8vIHNvIGNoZWNrIGB1c2VyQWdlbnRgIGV2ZW4gaWYgYC52OGAgZXhpc3RzLCBidXQgMFxuaWYgKCF2ZXJzaW9uICYmIHVzZXJBZ2VudCkge1xuICBtYXRjaCA9IHVzZXJBZ2VudC5tYXRjaCgvRWRnZVxcLyhcXGQrKS8pO1xuICBpZiAoIW1hdGNoIHx8IG1hdGNoWzFdID49IDc0KSB7XG4gICAgbWF0Y2ggPSB1c2VyQWdlbnQubWF0Y2goL0Nocm9tZVxcLyhcXGQrKS8pO1xuICAgIGlmIChtYXRjaCkgdmVyc2lvbiA9ICttYXRjaFsxXTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHZlcnNpb247XG4iLCIndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSBlcy9uby1zeW1ib2wgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmcgKi9cbnZhciBWOF9WRVJTSU9OID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Vudmlyb25tZW50LXY4LXZlcnNpb24nKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcblxudmFyICRTdHJpbmcgPSBnbG9iYWxUaGlzLlN0cmluZztcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eXN5bWJvbHMgLS0gcmVxdWlyZWQgZm9yIHRlc3Rpbmdcbm1vZHVsZS5leHBvcnRzID0gISFPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzICYmICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciBzeW1ib2wgPSBTeW1ib2woJ3N5bWJvbCBkZXRlY3Rpb24nKTtcbiAgLy8gQ2hyb21lIDM4IFN5bWJvbCBoYXMgaW5jb3JyZWN0IHRvU3RyaW5nIGNvbnZlcnNpb25cbiAgLy8gYGdldC1vd24tcHJvcGVydHktc3ltYm9sc2AgcG9seWZpbGwgc3ltYm9scyBjb252ZXJ0ZWQgdG8gb2JqZWN0IGFyZSBub3QgU3ltYm9sIGluc3RhbmNlc1xuICAvLyBuYjogRG8gbm90IGNhbGwgYFN0cmluZ2AgZGlyZWN0bHkgdG8gYXZvaWQgdGhpcyBiZWluZyBvcHRpbWl6ZWQgb3V0IHRvIGBzeW1ib2wrJydgIHdoaWNoIHdpbGwsXG4gIC8vIG9mIGNvdXJzZSwgZmFpbC5cbiAgcmV0dXJuICEkU3RyaW5nKHN5bWJvbCkgfHwgIShPYmplY3Qoc3ltYm9sKSBpbnN0YW5jZW9mIFN5bWJvbCkgfHxcbiAgICAvLyBDaHJvbWUgMzgtNDAgc3ltYm9scyBhcmUgbm90IGluaGVyaXRlZCBmcm9tIERPTSBjb2xsZWN0aW9ucyBwcm90b3R5cGVzIHRvIGluc3RhbmNlc1xuICAgICFTeW1ib2wuc2hhbSAmJiBWOF9WRVJTSU9OICYmIFY4X1ZFUlNJT04gPCA0MTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLyogZXNsaW50LWRpc2FibGUgZXMvbm8tc3ltYm9sIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nICovXG52YXIgTkFUSVZFX1NZTUJPTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtY29uc3RydWN0b3ItZGV0ZWN0aW9uJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gTkFUSVZFX1NZTUJPTCAmJlxuICAhU3ltYm9sLnNoYW0gJiZcbiAgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PSAnc3ltYm9sJztcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBVU0VfU1lNQk9MX0FTX1VJRCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91c2Utc3ltYm9sLWFzLXVpZCcpO1xuXG52YXIgJE9iamVjdCA9IE9iamVjdDtcblxubW9kdWxlLmV4cG9ydHMgPSBVU0VfU1lNQk9MX0FTX1VJRCA/IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdHlwZW9mIGl0ID09ICdzeW1ib2wnO1xufSA6IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgJFN5bWJvbCA9IGdldEJ1aWx0SW4oJ1N5bWJvbCcpO1xuICByZXR1cm4gaXNDYWxsYWJsZSgkU3ltYm9sKSAmJiBpc1Byb3RvdHlwZU9mKCRTeW1ib2wucHJvdG90eXBlLCAkT2JqZWN0KGl0KSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRTdHJpbmcgPSBTdHJpbmc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuICRTdHJpbmcoYXJndW1lbnQpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiAnT2JqZWN0JztcbiAgfVxufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgdHJ5VG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdHJ5LXRvLXN0cmluZycpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gYEFzc2VydDogSXNDYWxsYWJsZShhcmd1bWVudCkgaXMgdHJ1ZWBcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIGlmIChpc0NhbGxhYmxlKGFyZ3VtZW50KSkgcmV0dXJuIGFyZ3VtZW50O1xuICB0aHJvdyBuZXcgJFR5cGVFcnJvcih0cnlUb1N0cmluZyhhcmd1bWVudCkgKyAnIGlzIG5vdCBhIGZ1bmN0aW9uJyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgaXNOdWxsT3JVbmRlZmluZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtbnVsbC1vci11bmRlZmluZWQnKTtcblxuLy8gYEdldE1ldGhvZGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWdldG1ldGhvZFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoViwgUCkge1xuICB2YXIgZnVuYyA9IFZbUF07XG4gIHJldHVybiBpc051bGxPclVuZGVmaW5lZChmdW5jKSA/IHVuZGVmaW5lZCA6IGFDYWxsYWJsZShmdW5jKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gYE9yZGluYXJ5VG9QcmltaXRpdmVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vcmRpbmFyeXRvcHJpbWl0aXZlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbnB1dCwgcHJlZikge1xuICB2YXIgZm4sIHZhbDtcbiAgaWYgKHByZWYgPT09ICdzdHJpbmcnICYmIGlzQ2FsbGFibGUoZm4gPSBpbnB1dC50b1N0cmluZykgJiYgIWlzT2JqZWN0KHZhbCA9IGNhbGwoZm4sIGlucHV0KSkpIHJldHVybiB2YWw7XG4gIGlmIChpc0NhbGxhYmxlKGZuID0gaW5wdXQudmFsdWVPZikgJiYgIWlzT2JqZWN0KHZhbCA9IGNhbGwoZm4sIGlucHV0KSkpIHJldHVybiB2YWw7XG4gIGlmIChwcmVmICE9PSAnc3RyaW5nJyAmJiBpc0NhbGxhYmxlKGZuID0gaW5wdXQudG9TdHJpbmcpICYmICFpc09iamVjdCh2YWwgPSBjYWxsKGZuLCBpbnB1dCkpKSByZXR1cm4gdmFsO1xuICB0aHJvdyBuZXcgJFR5cGVFcnJvcihcIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZVwiKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgc3RvcmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgcmV0dXJuIHN0b3JlW2tleV0gfHwgKHN0b3JlW2tleV0gPSB2YWx1ZSB8fCB7fSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xuXG52YXIgaWQgPSAwO1xudmFyIHBvc3RmaXggPSBNYXRoLnJhbmRvbSgpO1xudmFyIHRvU3RyaW5nID0gdW5jdXJyeVRoaXMoMS4wLnRvU3RyaW5nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiAnU3ltYm9sKCcgKyAoa2V5ID09PSB1bmRlZmluZWQgPyAnJyA6IGtleSkgKyAnKV8nICsgdG9TdHJpbmcoKytpZCArIHBvc3RmaXgsIDM2KTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91aWQnKTtcbnZhciBOQVRJVkVfU1lNQk9MID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKTtcbnZhciBVU0VfU1lNQk9MX0FTX1VJRCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91c2Utc3ltYm9sLWFzLXVpZCcpO1xuXG52YXIgU3ltYm9sID0gZ2xvYmFsVGhpcy5TeW1ib2w7XG52YXIgV2VsbEtub3duU3ltYm9sc1N0b3JlID0gc2hhcmVkKCd3a3MnKTtcbnZhciBjcmVhdGVXZWxsS25vd25TeW1ib2wgPSBVU0VfU1lNQk9MX0FTX1VJRCA/IFN5bWJvbFsnZm9yJ10gfHwgU3ltYm9sIDogU3ltYm9sICYmIFN5bWJvbC53aXRob3V0U2V0dGVyIHx8IHVpZDtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZSkge1xuICBpZiAoIWhhc093bihXZWxsS25vd25TeW1ib2xzU3RvcmUsIG5hbWUpKSB7XG4gICAgV2VsbEtub3duU3ltYm9sc1N0b3JlW25hbWVdID0gTkFUSVZFX1NZTUJPTCAmJiBoYXNPd24oU3ltYm9sLCBuYW1lKVxuICAgICAgPyBTeW1ib2xbbmFtZV1cbiAgICAgIDogY3JlYXRlV2VsbEtub3duU3ltYm9sKCdTeW1ib2wuJyArIG5hbWUpO1xuICB9IHJldHVybiBXZWxsS25vd25TeW1ib2xzU3RvcmVbbmFtZV07XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGlzU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXN5bWJvbCcpO1xudmFyIGdldE1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtbWV0aG9kJyk7XG52YXIgb3JkaW5hcnlUb1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vcmRpbmFyeS10by1wcmltaXRpdmUnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG52YXIgVE9fUFJJTUlUSVZFID0gd2VsbEtub3duU3ltYm9sKCd0b1ByaW1pdGl2ZScpO1xuXG4vLyBgVG9QcmltaXRpdmVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b3ByaW1pdGl2ZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaW5wdXQsIHByZWYpIHtcbiAgaWYgKCFpc09iamVjdChpbnB1dCkgfHwgaXNTeW1ib2woaW5wdXQpKSByZXR1cm4gaW5wdXQ7XG4gIHZhciBleG90aWNUb1ByaW0gPSBnZXRNZXRob2QoaW5wdXQsIFRPX1BSSU1JVElWRSk7XG4gIHZhciByZXN1bHQ7XG4gIGlmIChleG90aWNUb1ByaW0pIHtcbiAgICBpZiAocHJlZiA9PT0gdW5kZWZpbmVkKSBwcmVmID0gJ2RlZmF1bHQnO1xuICAgIHJlc3VsdCA9IGNhbGwoZXhvdGljVG9QcmltLCBpbnB1dCwgcHJlZik7XG4gICAgaWYgKCFpc09iamVjdChyZXN1bHQpIHx8IGlzU3ltYm9sKHJlc3VsdCkpIHJldHVybiByZXN1bHQ7XG4gICAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoXCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWVcIik7XG4gIH1cbiAgaWYgKHByZWYgPT09IHVuZGVmaW5lZCkgcHJlZiA9ICdudW1iZXInO1xuICByZXR1cm4gb3JkaW5hcnlUb1ByaW1pdGl2ZShpbnB1dCwgcHJlZik7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByaW1pdGl2ZScpO1xudmFyIGlzU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXN5bWJvbCcpO1xuXG4vLyBgVG9Qcm9wZXJ0eUtleWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvcHJvcGVydHlrZXlcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHZhciBrZXkgPSB0b1ByaW1pdGl2ZShhcmd1bWVudCwgJ3N0cmluZycpO1xuICByZXR1cm4gaXNTeW1ib2woa2V5KSA/IGtleSA6IGtleSArICcnO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIElFOF9ET01fREVGSU5FID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2llOC1kb20tZGVmaW5lJyk7XG52YXIgVjhfUFJPVE9UWVBFX0RFRklORV9CVUcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdjgtcHJvdG90eXBlLWRlZmluZS1idWcnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciB0b1Byb3BlcnR5S2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByb3BlcnR5LWtleScpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxudmFyICRkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbnZhciBFTlVNRVJBQkxFID0gJ2VudW1lcmFibGUnO1xudmFyIENPTkZJR1VSQUJMRSA9ICdjb25maWd1cmFibGUnO1xudmFyIFdSSVRBQkxFID0gJ3dyaXRhYmxlJztcblxuLy8gYE9iamVjdC5kZWZpbmVQcm9wZXJ0eWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5kZWZpbmVwcm9wZXJ0eVxuZXhwb3J0cy5mID0gREVTQ1JJUFRPUlMgPyBWOF9QUk9UT1RZUEVfREVGSU5FX0JVRyA/IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIFAgPSB0b1Byb3BlcnR5S2V5KFApO1xuICBhbk9iamVjdChBdHRyaWJ1dGVzKTtcbiAgaWYgKHR5cGVvZiBPID09PSAnZnVuY3Rpb24nICYmIFAgPT09ICdwcm90b3R5cGUnICYmICd2YWx1ZScgaW4gQXR0cmlidXRlcyAmJiBXUklUQUJMRSBpbiBBdHRyaWJ1dGVzICYmICFBdHRyaWJ1dGVzW1dSSVRBQkxFXSkge1xuICAgIHZhciBjdXJyZW50ID0gJGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKTtcbiAgICBpZiAoY3VycmVudCAmJiBjdXJyZW50W1dSSVRBQkxFXSkge1xuICAgICAgT1tQXSA9IEF0dHJpYnV0ZXMudmFsdWU7XG4gICAgICBBdHRyaWJ1dGVzID0ge1xuICAgICAgICBjb25maWd1cmFibGU6IENPTkZJR1VSQUJMRSBpbiBBdHRyaWJ1dGVzID8gQXR0cmlidXRlc1tDT05GSUdVUkFCTEVdIDogY3VycmVudFtDT05GSUdVUkFCTEVdLFxuICAgICAgICBlbnVtZXJhYmxlOiBFTlVNRVJBQkxFIGluIEF0dHJpYnV0ZXMgPyBBdHRyaWJ1dGVzW0VOVU1FUkFCTEVdIDogY3VycmVudFtFTlVNRVJBQkxFXSxcbiAgICAgICAgd3JpdGFibGU6IGZhbHNlXG4gICAgICB9O1xuICAgIH1cbiAgfSByZXR1cm4gJGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpO1xufSA6ICRkZWZpbmVQcm9wZXJ0eSA6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIFAgPSB0b1Byb3BlcnR5S2V5KFApO1xuICBhbk9iamVjdChBdHRyaWJ1dGVzKTtcbiAgaWYgKElFOF9ET01fREVGSU5FKSB0cnkge1xuICAgIHJldHVybiAkZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKCdnZXQnIGluIEF0dHJpYnV0ZXMgfHwgJ3NldCcgaW4gQXR0cmlidXRlcykgdGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0FjY2Vzc29ycyBub3Qgc3VwcG9ydGVkJyk7XG4gIGlmICgndmFsdWUnIGluIEF0dHJpYnV0ZXMpIE9bUF0gPSBBdHRyaWJ1dGVzLnZhbHVlO1xuICByZXR1cm4gTztcbn07XG4iLCIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChiaXRtYXAsIHZhbHVlKSB7XG4gIHJldHVybiB7XG4gICAgZW51bWVyYWJsZTogIShiaXRtYXAgJiAxKSxcbiAgICBjb25maWd1cmFibGU6ICEoYml0bWFwICYgMiksXG4gICAgd3JpdGFibGU6ICEoYml0bWFwICYgNCksXG4gICAgdmFsdWU6IHZhbHVlXG4gIH07XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IERFU0NSSVBUT1JTID8gZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICByZXR1cm4gZGVmaW5lUHJvcGVydHlNb2R1bGUuZihvYmplY3QsIGtleSwgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDEsIHZhbHVlKSk7XG59IDogZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICBvYmplY3Rba2V5XSA9IHZhbHVlO1xuICByZXR1cm4gb2JqZWN0O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkJyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VpZCcpO1xuXG52YXIga2V5cyA9IHNoYXJlZCgna2V5cycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgcmV0dXJuIGtleXNba2V5XSB8fCAoa2V5c1trZXldID0gdWlkKGtleSkpO1xufTtcbiIsIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0ge307XG4iLCIndXNlIHN0cmljdCc7XG52YXIgTkFUSVZFX1dFQUtfTUFQID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlYWstbWFwLWJhc2ljLWRldGVjdGlvbicpO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlJyk7XG52YXIgc2hhcmVkS2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1rZXknKTtcbnZhciBoaWRkZW5LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hpZGRlbi1rZXlzJyk7XG5cbnZhciBPQkpFQ1RfQUxSRUFEWV9JTklUSUFMSVpFRCA9ICdPYmplY3QgYWxyZWFkeSBpbml0aWFsaXplZCc7XG52YXIgVHlwZUVycm9yID0gZ2xvYmFsVGhpcy5UeXBlRXJyb3I7XG52YXIgV2Vha01hcCA9IGdsb2JhbFRoaXMuV2Vha01hcDtcbnZhciBzZXQsIGdldCwgaGFzO1xuXG52YXIgZW5mb3JjZSA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaGFzKGl0KSA/IGdldChpdCkgOiBzZXQoaXQsIHt9KTtcbn07XG5cbnZhciBnZXR0ZXJGb3IgPSBmdW5jdGlvbiAoVFlQRSkge1xuICByZXR1cm4gZnVuY3Rpb24gKGl0KSB7XG4gICAgdmFyIHN0YXRlO1xuICAgIGlmICghaXNPYmplY3QoaXQpIHx8IChzdGF0ZSA9IGdldChpdCkpLnR5cGUgIT09IFRZUEUpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0luY29tcGF0aWJsZSByZWNlaXZlciwgJyArIFRZUEUgKyAnIHJlcXVpcmVkJyk7XG4gICAgfSByZXR1cm4gc3RhdGU7XG4gIH07XG59O1xuXG5pZiAoTkFUSVZFX1dFQUtfTUFQIHx8IHNoYXJlZC5zdGF0ZSkge1xuICB2YXIgc3RvcmUgPSBzaGFyZWQuc3RhdGUgfHwgKHNoYXJlZC5zdGF0ZSA9IG5ldyBXZWFrTWFwKCkpO1xuICAvKiBlc2xpbnQtZGlzYWJsZSBuby1zZWxmLWFzc2lnbiAtLSBwcm90b3R5cGUgbWV0aG9kcyBwcm90ZWN0aW9uICovXG4gIHN0b3JlLmdldCA9IHN0b3JlLmdldDtcbiAgc3RvcmUuaGFzID0gc3RvcmUuaGFzO1xuICBzdG9yZS5zZXQgPSBzdG9yZS5zZXQ7XG4gIC8qIGVzbGludC1lbmFibGUgbm8tc2VsZi1hc3NpZ24gLS0gcHJvdG90eXBlIG1ldGhvZHMgcHJvdGVjdGlvbiAqL1xuICBzZXQgPSBmdW5jdGlvbiAoaXQsIG1ldGFkYXRhKSB7XG4gICAgaWYgKHN0b3JlLmhhcyhpdCkpIHRocm93IG5ldyBUeXBlRXJyb3IoT0JKRUNUX0FMUkVBRFlfSU5JVElBTElaRUQpO1xuICAgIG1ldGFkYXRhLmZhY2FkZSA9IGl0O1xuICAgIHN0b3JlLnNldChpdCwgbWV0YWRhdGEpO1xuICAgIHJldHVybiBtZXRhZGF0YTtcbiAgfTtcbiAgZ2V0ID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIHN0b3JlLmdldChpdCkgfHwge307XG4gIH07XG4gIGhhcyA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBzdG9yZS5oYXMoaXQpO1xuICB9O1xufSBlbHNlIHtcbiAgdmFyIFNUQVRFID0gc2hhcmVkS2V5KCdzdGF0ZScpO1xuICBoaWRkZW5LZXlzW1NUQVRFXSA9IHRydWU7XG4gIHNldCA9IGZ1bmN0aW9uIChpdCwgbWV0YWRhdGEpIHtcbiAgICBpZiAoaGFzT3duKGl0LCBTVEFURSkpIHRocm93IG5ldyBUeXBlRXJyb3IoT0JKRUNUX0FMUkVBRFlfSU5JVElBTElaRUQpO1xuICAgIG1ldGFkYXRhLmZhY2FkZSA9IGl0O1xuICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShpdCwgU1RBVEUsIG1ldGFkYXRhKTtcbiAgICByZXR1cm4gbWV0YWRhdGE7XG4gIH07XG4gIGdldCA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBoYXNPd24oaXQsIFNUQVRFKSA/IGl0W1NUQVRFXSA6IHt9O1xuICB9O1xuICBoYXMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gaGFzT3duKGl0LCBTVEFURSk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBzZXQ6IHNldCxcbiAgZ2V0OiBnZXQsXG4gIGhhczogaGFzLFxuICBlbmZvcmNlOiBlbmZvcmNlLFxuICBnZXR0ZXJGb3I6IGdldHRlckZvclxufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgQ09ORklHVVJBQkxFX0ZVTkNUSU9OX05BTUUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tbmFtZScpLkNPTkZJR1VSQUJMRTtcbnZhciBpbnNwZWN0U291cmNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luc3BlY3Qtc291cmNlJyk7XG52YXIgSW50ZXJuYWxTdGF0ZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZScpO1xuXG52YXIgZW5mb3JjZUludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmVuZm9yY2U7XG52YXIgZ2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZ2V0O1xudmFyICRTdHJpbmcgPSBTdHJpbmc7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBzdHJpbmdTbGljZSA9IHVuY3VycnlUaGlzKCcnLnNsaWNlKTtcbnZhciByZXBsYWNlID0gdW5jdXJyeVRoaXMoJycucmVwbGFjZSk7XG52YXIgam9pbiA9IHVuY3VycnlUaGlzKFtdLmpvaW4pO1xuXG52YXIgQ09ORklHVVJBQkxFX0xFTkdUSCA9IERFU0NSSVBUT1JTICYmICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBkZWZpbmVQcm9wZXJ0eShmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0sICdsZW5ndGgnLCB7IHZhbHVlOiA4IH0pLmxlbmd0aCAhPT0gODtcbn0pO1xuXG52YXIgVEVNUExBVEUgPSBTdHJpbmcoU3RyaW5nKS5zcGxpdCgnU3RyaW5nJyk7XG5cbnZhciBtYWtlQnVpbHRJbiA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHZhbHVlLCBuYW1lLCBvcHRpb25zKSB7XG4gIGlmIChzdHJpbmdTbGljZSgkU3RyaW5nKG5hbWUpLCAwLCA3KSA9PT0gJ1N5bWJvbCgnKSB7XG4gICAgbmFtZSA9ICdbJyArIHJlcGxhY2UoJFN0cmluZyhuYW1lKSwgL15TeW1ib2xcXCgoW14pXSopXFwpLiokLywgJyQxJykgKyAnXSc7XG4gIH1cbiAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5nZXR0ZXIpIG5hbWUgPSAnZ2V0ICcgKyBuYW1lO1xuICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLnNldHRlcikgbmFtZSA9ICdzZXQgJyArIG5hbWU7XG4gIGlmICghaGFzT3duKHZhbHVlLCAnbmFtZScpIHx8IChDT05GSUdVUkFCTEVfRlVOQ1RJT05fTkFNRSAmJiB2YWx1ZS5uYW1lICE9PSBuYW1lKSkge1xuICAgIGlmIChERVNDUklQVE9SUykgZGVmaW5lUHJvcGVydHkodmFsdWUsICduYW1lJywgeyB2YWx1ZTogbmFtZSwgY29uZmlndXJhYmxlOiB0cnVlIH0pO1xuICAgIGVsc2UgdmFsdWUubmFtZSA9IG5hbWU7XG4gIH1cbiAgaWYgKENPTkZJR1VSQUJMRV9MRU5HVEggJiYgb3B0aW9ucyAmJiBoYXNPd24ob3B0aW9ucywgJ2FyaXR5JykgJiYgdmFsdWUubGVuZ3RoICE9PSBvcHRpb25zLmFyaXR5KSB7XG4gICAgZGVmaW5lUHJvcGVydHkodmFsdWUsICdsZW5ndGgnLCB7IHZhbHVlOiBvcHRpb25zLmFyaXR5IH0pO1xuICB9XG4gIHRyeSB7XG4gICAgaWYgKG9wdGlvbnMgJiYgaGFzT3duKG9wdGlvbnMsICdjb25zdHJ1Y3RvcicpICYmIG9wdGlvbnMuY29uc3RydWN0b3IpIHtcbiAgICAgIGlmIChERVNDUklQVE9SUykgZGVmaW5lUHJvcGVydHkodmFsdWUsICdwcm90b3R5cGUnLCB7IHdyaXRhYmxlOiBmYWxzZSB9KTtcbiAgICAvLyBpbiBWOCB+IENocm9tZSA1MywgcHJvdG90eXBlcyBvZiBzb21lIG1ldGhvZHMsIGxpa2UgYEFycmF5LnByb3RvdHlwZS52YWx1ZXNgLCBhcmUgbm9uLXdyaXRhYmxlXG4gICAgfSBlbHNlIGlmICh2YWx1ZS5wcm90b3R5cGUpIHZhbHVlLnByb3RvdHlwZSA9IHVuZGVmaW5lZDtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICB2YXIgc3RhdGUgPSBlbmZvcmNlSW50ZXJuYWxTdGF0ZSh2YWx1ZSk7XG4gIGlmICghaGFzT3duKHN0YXRlLCAnc291cmNlJykpIHtcbiAgICBzdGF0ZS5zb3VyY2UgPSBqb2luKFRFTVBMQVRFLCB0eXBlb2YgbmFtZSA9PSAnc3RyaW5nJyA/IG5hbWUgOiAnJyk7XG4gIH0gcmV0dXJuIHZhbHVlO1xufTtcblxuLy8gYWRkIGZha2UgRnVuY3Rpb24jdG9TdHJpbmcgZm9yIGNvcnJlY3Qgd29yayB3cmFwcGVkIG1ldGhvZHMgLyBjb25zdHJ1Y3RvcnMgd2l0aCBtZXRob2RzIGxpa2UgTG9EYXNoIGlzTmF0aXZlXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZXh0ZW5kLW5hdGl2ZSAtLSByZXF1aXJlZFxuRnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nID0gbWFrZUJ1aWx0SW4oZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gIHJldHVybiBpc0NhbGxhYmxlKHRoaXMpICYmIGdldEludGVybmFsU3RhdGUodGhpcykuc291cmNlIHx8IGluc3BlY3RTb3VyY2UodGhpcyk7XG59LCAndG9TdHJpbmcnKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBtYWtlQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9tYWtlLWJ1aWx0LWluJyk7XG52YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0YXJnZXQsIG5hbWUsIGRlc2NyaXB0b3IpIHtcbiAgaWYgKGRlc2NyaXB0b3IuZ2V0KSBtYWtlQnVpbHRJbihkZXNjcmlwdG9yLmdldCwgbmFtZSwgeyBnZXR0ZXI6IHRydWUgfSk7XG4gIGlmIChkZXNjcmlwdG9yLnNldCkgbWFrZUJ1aWx0SW4oZGVzY3JpcHRvci5zZXQsIG5hbWUsIHsgc2V0dGVyOiB0cnVlIH0pO1xuICByZXR1cm4gZGVmaW5lUHJvcGVydHkuZih0YXJnZXQsIG5hbWUsIGRlc2NyaXB0b3IpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcblxuLy8gYFJlZ0V4cC5wcm90b3R5cGUuZmxhZ3NgIGdldHRlciBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1nZXQtcmVnZXhwLnByb3RvdHlwZS5mbGFnc1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciB0aGF0ID0gYW5PYmplY3QodGhpcyk7XG4gIHZhciByZXN1bHQgPSAnJztcbiAgaWYgKHRoYXQuaGFzSW5kaWNlcykgcmVzdWx0ICs9ICdkJztcbiAgaWYgKHRoYXQuZ2xvYmFsKSByZXN1bHQgKz0gJ2cnO1xuICBpZiAodGhhdC5pZ25vcmVDYXNlKSByZXN1bHQgKz0gJ2knO1xuICBpZiAodGhhdC5tdWx0aWxpbmUpIHJlc3VsdCArPSAnbSc7XG4gIGlmICh0aGF0LmRvdEFsbCkgcmVzdWx0ICs9ICdzJztcbiAgaWYgKHRoYXQudW5pY29kZSkgcmVzdWx0ICs9ICd1JztcbiAgaWYgKHRoYXQudW5pY29kZVNldHMpIHJlc3VsdCArPSAndic7XG4gIGlmICh0aGF0LnN0aWNreSkgcmVzdWx0ICs9ICd5JztcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZGVmaW5lQnVpbHRJbkFjY2Vzc29yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbi1hY2Nlc3NvcicpO1xudmFyIHJlZ0V4cEZsYWdzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZ2V4cC1mbGFncycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbi8vIGJhYmVsLW1pbmlmeSBhbmQgQ2xvc3VyZSBDb21waWxlciB0cmFuc3BpbGVzIFJlZ0V4cCgnLicsICdkJykgLT4gLy4vZCBhbmQgaXQgY2F1c2VzIFN5bnRheEVycm9yXG52YXIgUmVnRXhwID0gZ2xvYmFsVGhpcy5SZWdFeHA7XG52YXIgUmVnRXhwUHJvdG90eXBlID0gUmVnRXhwLnByb3RvdHlwZTtcblxudmFyIEZPUkNFRCA9IERFU0NSSVBUT1JTICYmIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIElORElDRVNfU1VQUE9SVCA9IHRydWU7XG4gIHRyeSB7XG4gICAgUmVnRXhwKCcuJywgJ2QnKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBJTkRJQ0VTX1NVUFBPUlQgPSBmYWxzZTtcbiAgfVxuXG4gIHZhciBPID0ge307XG4gIC8vIG1vZGVybiBWOCBidWdcbiAgdmFyIGNhbGxzID0gJyc7XG4gIHZhciBleHBlY3RlZCA9IElORElDRVNfU1VQUE9SVCA/ICdkZ2ltc3knIDogJ2dpbXN5JztcblxuICB2YXIgYWRkR2V0dGVyID0gZnVuY3Rpb24gKGtleSwgY2hyKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIGtleSwgeyBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIGNhbGxzICs9IGNocjtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gfSk7XG4gIH07XG5cbiAgdmFyIHBhaXJzID0ge1xuICAgIGRvdEFsbDogJ3MnLFxuICAgIGdsb2JhbDogJ2cnLFxuICAgIGlnbm9yZUNhc2U6ICdpJyxcbiAgICBtdWx0aWxpbmU6ICdtJyxcbiAgICBzdGlja3k6ICd5J1xuICB9O1xuXG4gIGlmIChJTkRJQ0VTX1NVUFBPUlQpIHBhaXJzLmhhc0luZGljZXMgPSAnZCc7XG5cbiAgZm9yICh2YXIga2V5IGluIHBhaXJzKSBhZGRHZXR0ZXIoa2V5LCBwYWlyc1trZXldKTtcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG4gIHZhciByZXN1bHQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFJlZ0V4cFByb3RvdHlwZSwgJ2ZsYWdzJykuZ2V0LmNhbGwoTyk7XG5cbiAgcmV0dXJuIHJlc3VsdCAhPT0gZXhwZWN0ZWQgfHwgY2FsbHMgIT09IGV4cGVjdGVkO1xufSk7XG5cbi8vIGBSZWdFeHAucHJvdG90eXBlLmZsYWdzYCBnZXR0ZXJcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZ2V0LXJlZ2V4cC5wcm90b3R5cGUuZmxhZ3NcbmlmIChGT1JDRUQpIGRlZmluZUJ1aWx0SW5BY2Nlc3NvcihSZWdFeHBQcm90b3R5cGUsICdmbGFncycsIHtcbiAgY29uZmlndXJhYmxlOiB0cnVlLFxuICBnZXQ6IHJlZ0V4cEZsYWdzXG59KTtcbiIsImV4cG9ydCBpbnRlcmZhY2UgR3JhbW1hclJ1bGUge1xuICByZWdleHA6IFJlZ0V4cDtcbiAgcmVwbGFjZW1lbnQ6IHN0cmluZztcbiAgbGFiZWxQbGFjZWhvbGRlcj86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBIVE1MQmxvY2tSdWxlIHtcbiAgc3RhcnQ6IFJlZ0V4cDtcbiAgZW5kOiBSZWdFeHAgfCBmYWxzZTtcbiAgcGFyYUludGVycnVwdDogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJbmxpbmVDb21tYW5kIHtcbiAgdHlwZTogJ2lubGluZSc7XG4gIGNsYXNzTmFtZTogc3RyaW5nO1xuICBzZXQ6IHtcbiAgICBwcmU6IHN0cmluZztcbiAgICBwb3N0OiBzdHJpbmc7XG4gIH07XG4gIHVuc2V0OiB7XG4gICAgcHJlUGF0dGVybjogUmVnRXhwO1xuICAgIHBvc3RQYXR0ZXJuOiBSZWdFeHA7XG4gIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTGluZUNvbW1hbmQge1xuICB0eXBlOiAnbGluZSc7XG4gIGNsYXNzTmFtZTogc3RyaW5nO1xuICBzZXQ6IHtcbiAgICBwYXR0ZXJuOiBSZWdFeHA7XG4gICAgcmVwbGFjZW1lbnQ6IHN0cmluZztcbiAgfTtcbiAgdW5zZXQ6IHtcbiAgICBwYXR0ZXJuOiBSZWdFeHA7XG4gICAgcmVwbGFjZW1lbnQ6IHN0cmluZztcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgQ29tbWFuZCA9IElubGluZUNvbW1hbmQgfCBMaW5lQ29tbWFuZDtcblxuY29uc3QgcmVwbGFjZW1lbnRzOiBSZWNvcmQ8c3RyaW5nLCBSZWdFeHA+ID0ge1xuICBBU0NJSVB1bmN0dWF0aW9uOiAvWyFcIiMkJSYnKCkqKyxcXC0uLzo7PD0+P0BbXFxdXl9ge3x9flxcXFxdLywgIFxuICBOb3RUcmlnZ2VyQ2hhcjogL1teYF8qW1xcXSgpPD4hfl0vLFxuICBTY2hlbWU6IC9bQS1aYS16XVtBLVphLXowLTkrLi1dezEsMzF9LyxcbiAgRW1haWw6IC9bYS16QS1aMC05LiEjJCUmJyorLz0/Xl9ge3x9fi1dK0BbYS16QS1aMC05XSg/OlthLXpBLVowLTktXXswLDYxfVthLXpBLVowLTldKT8oPzpcXC5bYS16QS1aMC05XSg/OlthLXpBLVowLTktXXswLDYxfVthLXpBLVowLTldKT8pKi8sIC8vIEZyb20gQ29tbW9uTWFyayBzcGVjXG4gIEhUTUxPcGVuVGFnOiAvPEhUTUxUYWdOYW1lKD86SFRNTEF0dHJpYnV0ZSkqXFxzKlxcLz8+LyxcbiAgSFRNTENsb3NlVGFnOiAvPFxcL0hUTUxUYWdOYW1lXFxzKj4vLFxuICBIVE1MVGFnTmFtZTogL1tBLVphLXpdW0EtWmEtejAtOS1dKi8sIFxuICBIVE1MQ29tbWVudDogLzwhLS0oPzpbXj4tXXwoPzpbXj4tXSg/OlteLV18LVteLV0pKlteLV0pKS0tPi8sXG4gIEhUTUxQSTogLzxcXD8oPzp8LnwoPzpbXj9dfFxcP1tePl0pKilcXD8+LyxcbiAgSFRNTERlY2xhcmF0aW9uOiAvPCFbQS1aXStcXHNbXj5dKj4vLFxuICBIVE1MQ0RBVEE6IC88IVxcW0NEQVRBXFxbLio/XFxdXFxdPi8sXG4gIEhUTUxBdHRyaWJ1dGU6IC9cXHMrW0EtWmEtel86XVtBLVphLXowLTlfLjotXSooPzpIVE1MQXR0VmFsdWUpPy8sXG4gIEhUTUxBdHRWYWx1ZTogL1xccyo9XFxzKig/Oig/OidbXiddKicpfCg/OlwiW15cIl0qXCIpfCg/OlteXFxzXCInPTw+YF0rKSkvLFxuICBLbm93blRhZzogL2FkZHJlc3N8YXJ0aWNsZXxhc2lkZXxiYXNlfGJhc2Vmb250fGJsb2NrcXVvdGV8Ym9keXxjYXB0aW9ufGNlbnRlcnxjb2x8Y29sZ3JvdXB8ZGR8ZGV0YWlsc3xkaWFsb2d8ZGlyfGRpdnxkbHxkdHxmaWVsZHNldHxmaWdjYXB0aW9ufGZpZ3VyZXxmb290ZXJ8Zm9ybXxmcmFtZXxmcmFtZXNldHxoMXxoMnxoM3xoNHxoNXxoNnxoZWFkfGhlYWRlcnxocnxodG1sfGlmcmFtZXxsZWdlbmR8bGl8bGlua3xtYWlufG1lbnV8bWVudWl0ZW18bmF2fG5vZnJhbWVzfG9sfG9wdGdyb3VwfG9wdGlvbnxwfHBhcmFtfHNlY3Rpb258c291cmNlfHN1bW1hcnl8dGFibGV8dGJvZHl8dGR8dGZvb3R8dGh8dGhlYWR8dGl0bGV8dHJ8dHJhY2t8dWwvXG59O1xuXG4vLyBGcm9tIENvbW1vbk1hcmsuanMuIFxuZXhwb3J0IGNvbnN0IHB1bmN0dWF0aW9uTGVhZGluZyA9IG5ldyBSZWdFeHAoL14oPzpbIVwiIyQlJicoKSorLFxcLS4vOjs8PT4/QFtcXF1cXFxcXl9ge3x9flxceEExXFx4QTdcXHhBQlxceEI2XFx4QjdcXHhCQlxceEJGXFx1MDM3RVxcdTAzODdcXHUwNTVBLVxcdTA1NUZcXHUwNTg5XFx1MDU4QVxcdTA1QkVcXHUwNUMwXFx1MDVDM1xcdTA1QzZcXHUwNUYzXFx1MDVGNFxcdTA2MDlcXHUwNjBBXFx1MDYwQ1xcdTA2MERcXHUwNjFCXFx1MDYxRVxcdTA2MUZcXHUwNjZBLVxcdTA2NkRcXHUwNkQ0XFx1MDcwMC1cXHUwNzBEXFx1MDdGNy1cXHUwN0Y5XFx1MDgzMC1cXHUwODNFXFx1MDg1RVxcdTA5NjRcXHUwOTY1XFx1MDk3MFxcdTBBRjBcXHUwREY0XFx1MEU0RlxcdTBFNUFcXHUwRTVCXFx1MEYwNC1cXHUwRjEyXFx1MEYxNFxcdTBGM0EtXFx1MEYzRFxcdTBGODVcXHUwRkQwLVxcdTBGRDRcXHUwRkQ5XFx1MEZEQVxcdTEwNEEtXFx1MTA0RlxcdTEwRkJcXHUxMzYwLVxcdTEzNjhcXHUxNDAwXFx1MTY2RFxcdTE2NkVcXHUxNjlCXFx1MTY5Q1xcdTE2RUItXFx1MTZFRFxcdTE3MzVcXHUxNzM2XFx1MTdENC1cXHUxN0Q2XFx1MTdEOC1cXHUxN0RBXFx1MTgwMC1cXHUxODBBXFx1MTk0NFxcdTE5NDVcXHUxQTFFXFx1MUExRlxcdTFBQTAtXFx1MUFBNlxcdTFBQTgtXFx1MUFBRFxcdTFCNUEtXFx1MUI2MFxcdTFCRkMtXFx1MUJGRlxcdTFDM0ItXFx1MUMzRlxcdTFDN0VcXHUxQzdGXFx1MUNDMC1cXHUxQ0M3XFx1MUNEM1xcdTIwMTAtXFx1MjAyN1xcdTIwMzAtXFx1MjA0M1xcdTIwNDUtXFx1MjA1MVxcdTIwNTMtXFx1MjA1RVxcdTIwN0RcXHUyMDdFXFx1MjA4RFxcdTIwOEVcXHUyMzA4LVxcdTIzMEJcXHUyMzI5XFx1MjMyQVxcdTI3NjgtXFx1Mjc3NVxcdTI3QzVcXHUyN0M2XFx1MjdFNi1cXHUyN0VGXFx1Mjk4My1cXHUyOTk4XFx1MjlEOC1cXHUyOURCXFx1MjlGQ1xcdTI5RkRcXHUyQ0Y5LVxcdTJDRkNcXHUyQ0ZFXFx1MkNGRlxcdTJENzBcXHUyRTAwLVxcdTJFMkVcXHUyRTMwLVxcdTJFNDJcXHUzMDAxLVxcdTMwMDNcXHUzMDA4LVxcdTMwMTFcXHUzMDE0LVxcdTMwMUZcXHUzMDMwXFx1MzAzRFxcdTMwQTBcXHUzMEZCXFx1QTRGRVxcdUE0RkZcXHVBNjBELVxcdUE2MEZcXHVBNjczXFx1QTY3RVxcdUE2RjItXFx1QTZGN1xcdUE4NzQtXFx1QTg3N1xcdUE4Q0VcXHVBOENGXFx1QThGOC1cXHVBOEZBXFx1QThGQ1xcdUE5MkVcXHVBOTJGXFx1QTk1RlxcdUE5QzEtXFx1QTlDRFxcdUE5REVcXHVBOURGXFx1QUE1Qy1cXHVBQTVGXFx1QUFERVxcdUFBREZcXHVBQUYwXFx1QUFGMVxcdUFCRUJcXHVGRDNFXFx1RkQzRlxcdUZFMTAtXFx1RkUxOVxcdUZFMzAtXFx1RkU1MlxcdUZFNTQtXFx1RkU2MVxcdUZFNjNcXHVGRTY4XFx1RkU2QVxcdUZFNkJcXHVGRjAxLVxcdUZGMDNcXHVGRjA1LVxcdUZGMEFcXHVGRjBDLVxcdUZGMEZcXHVGRjFBXFx1RkYxQlxcdUZGMUZcXHVGRjIwXFx1RkYzQi1cXHVGRjNEXFx1RkYzRlxcdUZGNUJcXHVGRjVEXFx1RkY1Ri1cXHVGRjY1XXxcXHVEODAwW1xcdUREMDAtXFx1REQwMlxcdURGOUZcXHVERkQwXXxcXHVEODAxXFx1REQ2RnxcXHVEODAyW1xcdURDNTdcXHVERDFGXFx1REQzRlxcdURFNTAtXFx1REU1OFxcdURFN0ZcXHVERUYwLVxcdURFRjZcXHVERjM5LVxcdURGM0ZcXHVERjk5LVxcdURGOUNdfFxcdUQ4MDRbXFx1REM0Ny1cXHVEQzREXFx1RENCQlxcdURDQkNcXHVEQ0JFLVxcdURDQzFcXHVERDQwLVxcdURENDNcXHVERDc0XFx1REQ3NVxcdUREQzUtXFx1RERDOVxcdUREQ0RcXHVERERCXFx1RERERC1cXHVERERGXFx1REUzOC1cXHVERTNEXFx1REVBOV18XFx1RDgwNVtcXHVEQ0M2XFx1RERDMS1cXHVEREQ3XFx1REU0MS1cXHVERTQzXFx1REYzQy1cXHVERjNFXXxcXHVEODA5W1xcdURDNzAtXFx1REM3NF18XFx1RDgxQVtcXHVERTZFXFx1REU2RlxcdURFRjVcXHVERjM3LVxcdURGM0JcXHVERjQ0XXxcXHVEODJGXFx1REM5RnxcXHVEODM2W1xcdURFODctXFx1REU4Ql0pLyk7XG5cbmV4cG9ydCBjb25zdCBwdW5jdHVhdGlvblRyYWlsaW5nID0gbmV3IFJlZ0V4cCgvKD86WyFcIiMkJSYnKCkqKyxcXC0uLzo7PD0+P0BbXFxdXFxcXF5fYHt8fX5cXHhBMVxceEE3XFx4QUJcXHhCNlxceEI3XFx4QkJcXHhCRlxcdTAzN0VcXHUwMzg3XFx1MDU1QS1cXHUwNTVGXFx1MDU4OVxcdTA1OEFcXHUwNUJFXFx1MDVDMFxcdTA1QzNcXHUwNUM2XFx1MDVGM1xcdTA1RjRcXHUwNjA5XFx1MDYwQVxcdTA2MENcXHUwNjBEXFx1MDYxQlxcdTA2MUVcXHUwNjFGXFx1MDY2QS1cXHUwNjZEXFx1MDZENFxcdTA3MDAtXFx1MDcwRFxcdTA3RjctXFx1MDdGOVxcdTA4MzAtXFx1MDgzRVxcdTA4NUVcXHUwOTY0XFx1MDk2NVxcdTA5NzBcXHUwQUYwXFx1MERGNFxcdTBFNEZcXHUwRTVBXFx1MEU1QlxcdTBGMDQtXFx1MEYxMlxcdTBGMTRcXHUwRjNBLVxcdTBGM0RcXHUwRjg1XFx1MEZEMC1cXHUwRkQ0XFx1MEZEOVxcdTBGREFcXHUxMDRBLVxcdTEwNEZcXHUxMEZCXFx1MTM2MC1cXHUxMzY4XFx1MTQwMFxcdTE2NkRcXHUxNjZFXFx1MTY5QlxcdTE2OUNcXHUxNkVCLVxcdTE2RURcXHUxNzM1XFx1MTczNlxcdTE3RDQtXFx1MTdENlxcdTE3RDgtXFx1MTdEQVxcdTE4MDAtXFx1MTgwQVxcdTE5NDRcXHUxOTQ1XFx1MUExRVxcdTFBMUZcXHUxQUEwLVxcdTFBQTZcXHUxQUE4LVxcdTFBQURcXHUxQjVBLVxcdTFCNjBcXHUxQkZDLVxcdTFCRkZcXHUxQzNCLVxcdTFDM0ZcXHUxQzdFXFx1MUM3RlxcdTFDQzAtXFx1MUNDN1xcdTFDRDNcXHUyMDEwLVxcdTIwMjdcXHUyMDMwLVxcdTIwNDNcXHUyMDQ1LVxcdTIwNTFcXHUyMDUzLVxcdTIwNUVcXHUyMDdEXFx1MjA3RVxcdTIwOERcXHUyMDhFXFx1MjMwOC1cXHUyMzBCXFx1MjMyOVxcdTIzMkFcXHUyNzY4LVxcdTI3NzVcXHUyN0M1XFx1MjdDNlxcdTI3RTYtXFx1MjdFRlxcdTI5ODMtXFx1Mjk5OFxcdTI5RDgtXFx1MjlEQlxcdTI5RkNcXHUyOUZEXFx1MkNGOS1cXHUyQ0ZDXFx1MkNGRVxcdTJDRkZcXHUyRDcwXFx1MkUwMC1cXHUyRTJFXFx1MkUzMC1cXHUyRTQyXFx1MzAwMS1cXHUzMDAzXFx1MzAwOC1cXHUzMDExXFx1MzAxNC1cXHUzMDFGXFx1MzAzMFxcdTMwM0RcXHUzMEEwXFx1MzBGQlxcdUE0RkVcXHVBNEZGXFx1QTYwRC1cXHVBNjBGXFx1QTY3M1xcdUE2N0VcXHVBNkYyLVxcdUE2RjdcXHVBODc0LVxcdUE4NzdcXHVBOENFXFx1QThDRlxcdUE4RjgtXFx1QThGQVxcdUE4RkNcXHVBOTJFXFx1QTkyRlxcdUE5NUZcXHVBOUMxLVxcdUE5Q0RcXHVBOURFXFx1QTlERlxcdUFBNUMtXFx1QUE1RlxcdUFBREVcXHVBQURGXFx1QUFGMFxcdUFBRjFcXHVBQkVCXFx1RkQzRVxcdUZEM0ZcXHVGRTEwLVxcdUZFMTlcXHVGRTMwLVxcdUZFNTJcXHVGRTU0LVxcdUZFNjFcXHVGRTYzXFx1RkU2OFxcdUZFNkFcXHVGRTZCXFx1RkYwMS1cXHVGRjAzXFx1RkYwNS1cXHVGRjBBXFx1RkYwQy1cXHVGRjBGXFx1RkYxQVxcdUZGMUJcXHVGRjFGXFx1RkYyMFxcdUZGM0ItXFx1RkYzRFxcdUZGM0ZcXHVGRjVCXFx1RkY1RFxcdUZGNUYtXFx1RkY2NV18XFx1RDgwMFtcXHVERDAwLVxcdUREMDJcXHVERjlGXFx1REZEMF18XFx1RDgwMVxcdURENkZ8XFx1RDgwMltcXHVEQzU3XFx1REQxRlxcdUREM0ZcXHVERTUwLVxcdURFNThcXHVERTdGXFx1REVGMC1cXHVERUY2XFx1REYzOS1cXHVERjNGXFx1REY5OS1cXHVERjlDXXxcXHVEODA0W1xcdURDNDctXFx1REM0RFxcdURDQkJcXHVEQ0JDXFx1RENCRS1cXHVEQ0MxXFx1REQ0MC1cXHVERDQzXFx1REQ3NFxcdURENzVcXHVEREM1LVxcdUREQzlcXHVERENEXFx1REREQlxcdUREREQtXFx1RERERlxcdURFMzgtXFx1REUzRFxcdURFQTldfFxcdUQ4MDVbXFx1RENDNlxcdUREQzEtXFx1REREN1xcdURFNDEtXFx1REU0M1xcdURGM0MtXFx1REYzRV18XFx1RDgwOVtcXHVEQzcwLVxcdURDNzRdfFxcdUQ4MUFbXFx1REU2RVxcdURFNkZcXHVERUY1XFx1REYzNy1cXHVERjNCXFx1REY0NF18XFx1RDgyRlxcdURDOUZ8XFx1RDgzNltcXHVERTg3LVxcdURFOEJdKSQvKTtcblxuLyoqXG4gKiBUaGlzIGlzIENvbW1vbk1hcmsncyBibG9jayBncmFtbWFyLCBidXQgd2UncmUgaWdub3JpbmcgbmVzdGVkIGJsb2NrcyBoZXJlLiAgXG4gKi8gXG5leHBvcnQgY29uc3QgbGluZUdyYW1tYXI6IFJlY29yZDxzdHJpbmcsIEdyYW1tYXJSdWxlPiA9IHsgXG4gIFRNSDE6IHsgXG4gICAgcmVnZXhwOiAvXiggezAsM30jXFxzKSguKj8pKCg/OlxccysjK1xccyopPykkLywgXG4gICAgcmVwbGFjZW1lbnQ6ICc8c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfVE1IMVwiPiQxPC9zcGFuPiQkMjxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya19UTUgxXCI+JDM8L3NwYW4+J1xuICB9LFxuICBUTUgyOiB7IFxuICAgIHJlZ2V4cDogL14oIHswLDN9IyNcXHMpKC4qPykoKD86XFxzKyMrXFxzKik/KSQvLCBcbiAgICByZXBsYWNlbWVudDogJzxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya19UTUgyXCI+JDE8L3NwYW4+JCQyPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrX1RNSDJcIj4kMzwvc3Bhbj4nXG4gIH0sXG4gIFRNSDM6IHsgXG4gICAgcmVnZXhwOiAvXiggezAsM30jIyNcXHMpKC4qPykoKD86XFxzKyMrXFxzKik/KSQvLCBcbiAgICByZXBsYWNlbWVudDogJzxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya19UTUgzXCI+JDE8L3NwYW4+JCQyPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrX1RNSDNcIj4kMzwvc3Bhbj4nXG4gIH0sXG4gIFRNSDQ6IHsgXG4gICAgcmVnZXhwOiAvXiggezAsM30jIyMjXFxzKSguKj8pKCg/OlxccysjK1xccyopPykkLywgXG4gICAgcmVwbGFjZW1lbnQ6ICc8c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfVE1INFwiPiQxPC9zcGFuPiQkMjxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya19UTUg0XCI+JDM8L3NwYW4+J1xuICB9LFxuICBUTUg1OiB7IFxuICAgIHJlZ2V4cDogL14oIHswLDN9IyMjIyNcXHMpKC4qPykoKD86XFxzKyMrXFxzKik/KSQvLCBcbiAgICByZXBsYWNlbWVudDogJzxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya19UTUg1XCI+JDE8L3NwYW4+JCQyPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrX1RNSDVcIj4kMzwvc3Bhbj4nXG4gIH0sXG4gIFRNSDY6IHsgXG4gICAgcmVnZXhwOiAvXiggezAsM30jIyMjIyNcXHMpKC4qPykoKD86XFxzKyMrXFxzKik/KSQvLCBcbiAgICByZXBsYWNlbWVudDogJzxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya19UTUg2XCI+JDE8L3NwYW4+JCQyPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrX1RNSDZcIj4kMzwvc3Bhbj4nXG4gIH0sXG4gIFRNQmxvY2txdW90ZTogeyBcbiAgICByZWdleHA6IC9eKCB7MCwzfT5bIF0/KSguKikkLywgXG4gICAgcmVwbGFjZW1lbnQ6ICc8c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfVE1CbG9ja3F1b3RlXCI+JDE8L3NwYW4+JCQyJ1xuICB9LFxuICBUTUNvZGVGZW5jZUJhY2t0aWNrT3BlbjogeyBcbiAgICByZWdleHA6IC9eKCB7MCwzfSg/PHNlcT5gYGBgKilcXHMqKShbXmBdKj8pKFxccyopJC8sIFxuICAgIHJlcGxhY2VtZW50OiAnPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrX1RNQ29kZUZlbmNlQmFja3RpY2tcIj4kMTwvc3Bhbj48c3BhbiBjbGFzcz1cIlRNSW5mb1N0cmluZ1wiPiQzPC9zcGFuPiQ0J1xuICB9LFxuICBUTUNvZGVGZW5jZVRpbGRlT3BlbjogeyBcbiAgICByZWdleHA6IC9eKCB7MCwzfSg/PHNlcT5+fn5+KilcXHMqKSguKj8pKFxccyopJC8sIFxuICAgIHJlcGxhY2VtZW50OiAnPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrX1RNQ29kZUZlbmNlVGlsZGVcIj4kMTwvc3Bhbj48c3BhbiBjbGFzcz1cIlRNSW5mb1N0cmluZ1wiPiQzPC9zcGFuPiQ0J1xuICB9LFxuICBUTUNvZGVGZW5jZUJhY2t0aWNrQ2xvc2U6IHsgXG4gICAgcmVnZXhwOiAvXiggezAsM30oPzxzZXE+YGBgYCopKShcXHMqKSQvLCBcbiAgICByZXBsYWNlbWVudDogJzxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya19UTUNvZGVGZW5jZUJhY2t0aWNrXCI+JDE8L3NwYW4+JDMnXG4gIH0sXG4gIFRNQ29kZUZlbmNlVGlsZGVDbG9zZTogeyBcbiAgICByZWdleHA6IC9eKCB7MCwzfSg/PHNlcT5+fn5+KikpKFxccyopJC8sIFxuICAgIHJlcGxhY2VtZW50OiAnPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrX1RNQ29kZUZlbmNlVGlsZGVcIj4kMTwvc3Bhbj4kMydcbiAgfSxcbiAgVE1CbGFua0xpbmU6IHsgXG4gICAgcmVnZXhwOiAvXihbIFxcdF0qKSQvLCBcbiAgICByZXBsYWNlbWVudDogJyQwJ1xuICB9LFxuICBUTVNldGV4dEgxTWFya2VyOiB7IFxuICAgIHJlZ2V4cDogL14gezAsM309K1xccyokLywgXG4gICAgcmVwbGFjZW1lbnQ6ICc8c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfVE1TZXRleHRIMU1hcmtlclwiPiQwPC9zcGFuPidcbiAgfSxcbiAgVE1TZXRleHRIMk1hcmtlcjogeyBcbiAgICByZWdleHA6IC9eIHswLDN9LStcXHMqJC8sIFxuICAgIHJlcGxhY2VtZW50OiAnPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrX1RNU2V0ZXh0SDFNYXJrZXJcIj4kMDwvc3Bhbj4nXG4gIH0sXG4gIFRNSFI6IHsgXG4gICAgcmVnZXhwOiAvXiggezAsM30oXFwqWyBcXHRdKlxcKlsgXFx0XSpcXCpbIFxcdCpdKil8KC1bIFxcdF0qLVsgXFx0XSotWyBcXHQtXSopfChfWyBcXHRdKl9bIFxcdF0qX1sgXFx0X10qKSkkLywgXG4gICAgcmVwbGFjZW1lbnQ6ICc8c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfVE1IUlwiPiQwPC9zcGFuPidcbiAgfSxcbiAgVE1VTDogeyBcbiAgICByZWdleHA6IC9eKCB7MCwzfVsrKi1dIHsxLDR9KSguKikkLywgXG4gICAgcmVwbGFjZW1lbnQ6ICc8c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfVE1VTFwiPiQxPC9zcGFuPiQkMidcbiAgfSxcbiAgVE1PTDogeyBcbiAgICByZWdleHA6IC9eKCB7MCwzfVxcZHsxLDl9Wy4pXSB7MSw0fSkoLiopJC8sIFxuICAgIHJlcGxhY2VtZW50OiAnPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrX1RNT0xcIj4kMTwvc3Bhbj4kJDInXG4gIH0sXG4gIC8vIFRPRE86IFRoaXMgaXMgY3VycmVudGx5IHByZXZlbnRpbmcgc3VibGlzdHMgKGFuZCBhbnkgY29udGVudCB3aXRoaW4gbGlzdCBpdGVtcywgcmVhbGx5KSBmcm9tIHdvcmtpbmdcbiAgVE1JbmRlbnRlZENvZGU6IHsgXG4gICAgcmVnZXhwOiAvXiggezR9fFxcdCkoLiopJC8sIFxuICAgIHJlcGxhY2VtZW50OiAnPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrX1RNSW5kZW50ZWRDb2RlXCI+JDE8L3NwYW4+JDInXG4gIH0sXG4gIFRNTGlua1JlZmVyZW5jZURlZmluaXRpb246IHtcbiAgICAvLyBUT0RPOiBMaW5rIGRlc3RpbmF0aW9uIGNhbid0IGluY2x1ZGUgdW5iYWxhbmNlZCBwYXJhbnRoZXNlcywgYnV0IHdlIGp1c3QgaWdub3JlIHRoYXQgaGVyZSBcbiAgICByZWdleHA6IC9eKCB7MCwzfVxcW1xccyopKFteXFxzXFxdXSg/OlteXFxdXXxcXFxcXFxdKSo/KShcXHMqXFxdOlxccyopKCg/OlteXFxzPD5dKyl8KD86PCg/OltePD5cXFxcXXxcXFxcLikqPikpPyhcXHMqKSgoPzpcXCgoPzpbXigpXFxcXF18XFxcXC4pKlxcKSl8KD86XCIoPzpbXlwiXFxcXF18XFxcXC4pKlwiKXwoPzonKD86W14nXFxcXF18XFxcXC4pKicpKT8oXFxzKikkLywgXG4gICAgcmVwbGFjZW1lbnQ6ICc8c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfVE1MaW5rUmVmZXJlbmNlRGVmaW5pdGlvblwiPiQxPC9zcGFuPjxzcGFuIGNsYXNzPVwiVE1MaW5rTGFiZWwgVE1MaW5rTGFiZWxfRGVmaW5pdGlvblwiPiQyPC9zcGFuPjxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya19UTUxpbmtSZWZlcmVuY2VEZWZpbml0aW9uXCI+JDM8L3NwYW4+PHNwYW4gY2xhc3M9XCJUTUxpbmtEZXN0aW5hdGlvblwiPiQ0PC9zcGFuPiQ1PHNwYW4gY2xhc3M9XCJUTUxpbmtUaXRsZVwiPiQ2PC9zcGFuPiQ3JyxcbiAgICBsYWJlbFBsYWNlaG9sZGVyOiAyLCAvLyB0aGlzIGRlZmluZXMgd2hpY2ggcGxhY2Vob2xkZXIgaW4gdGhlIGFib3ZlIHJlZ2V4IGlzIHRoZSBsaW5rIFwibGFiZWxcIlxuICB9LFxufTtcblxuLyoqXG4gKiBIVE1MIGJsb2NrcyBoYXZlIG11bHRpcGxlIGRpZmZlcmVudCBjbGFzc2VzIG9mIG9wZW5lciBhbmQgY2xvc2VyLiBUaGlzIGFycmF5IGRlZmluZXMgYWxsIHRoZSBjYXNlc1xuICovXG5leHBvcnQgY29uc3QgaHRtbEJsb2NrR3JhbW1hcjogSFRNTEJsb2NrUnVsZVtdID0gW1xuICB7IHN0YXJ0OiAvXiB7MCwzfTwoPzpzY3JpcHR8cHJlfHN0eWxlKSg/Olxcc3w+fCQpL2ksIGVuZDogLyg/OjxcXC9zY3JpcHQ+fDxcXC9wcmU+fDxcXC9zdHlsZT4pL2ksIHBhcmFJbnRlcnJ1cHQ6IHRydWUgfSxcbiAgeyBzdGFydDogL14gezAsM308IS0tLywgZW5kOiAvLS0+LywgcGFyYUludGVycnVwdDogdHJ1ZSB9LFxuICB7IHN0YXJ0OiAvXiB7MCwzfTxcXD8vLCBlbmQ6IC9cXD8+LywgcGFyYUludGVycnVwdDogdHJ1ZSB9LFxuICB7IHN0YXJ0OiAvXiB7MCwzfTwhW0EtWl0vLCBlbmQ6IC8+LywgcGFyYUludGVycnVwdCA6IHRydWV9LFxuICB7IHN0YXJ0OiAvXiB7MCwzfTwhXFxbQ0RBVEFcXFsvLCBlbmQ6IC9cXF1cXF0+LywgcGFyYUludGVycnVwdCA6IHRydWV9LFxuICB7IHN0YXJ0OiAvXiB7MCwzfSg/Ojx8PFxcLykoPzpLbm93blRhZykoPzpcXHN8PnxcXC8+fCQpL2ksIGVuZDogZmFsc2UsIHBhcmFJbnRlcnJ1cHQ6IHRydWV9LFxuICB7IHN0YXJ0OiAvXiB7MCwzfSg/OkhUTUxPcGVuVGFnfEhUTUxDbG9zZVRhZylcXHMqJC8sIGVuZDogZmFsc2UsIHBhcmFJbnRlcnJ1cHQ6IGZhbHNlfSxcbl07XG5cbi8qKlxuICogU3RydWN0dXJlIG9mIHRoZSBvYmplY3Q6XG4gKiBUb3AgbGV2ZWwgZW50cmllcyBhcmUgcnVsZXMsIGVhY2ggY29uc2lzdGluZyBvZiBhIHJlZ3VsYXIgZXhwcmVzc2lvbnMgKGluIHN0cmluZyBmb3JtYXQpIGFzIHdlbGwgYXMgYSByZXBsYWNlbWVudC5cbiAqIEluIHRoZSByZWd1bGFyIGV4cHJlc3Npb25zLCByZXBsYWNlbWVudHMgZnJvbSB0aGUgb2JqZWN0ICdyZXBsYWNlbWVudHMnIHdpbGwgYmUgcHJvY2Vzc2VkIGJlZm9yZSBjb21waWxpbmcgaW50byB0aGUgcHJvcGVydHkgcmVnZXhwLlxuICovXG5leHBvcnQgY29uc3QgaW5saW5lR3JhbW1hcjogUmVjb3JkPHN0cmluZywgR3JhbW1hclJ1bGU+ID0ge1xuICBlc2NhcGUgOiB7XG4gICAgcmVnZXhwOiAvXlxcXFwoQVNDSUlQdW5jdHVhdGlvbikvLFxuICAgIHJlcGxhY2VtZW50IDogJzxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya19UTUVzY2FwZVwiPlxcXFw8L3NwYW4+JDEnXG4gIH0sXG4gIGNvZGUgOiB7XG4gICAgcmVnZXhwOiAvXihgKykoKD86W15gXSl8KD86W15gXS4qP1teYF0pKShcXDEpLyxcbiAgICByZXBsYWNlbWVudCA6ICc8c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfVE1Db2RlXCI+JDE8L3NwYW4+PGNvZGUgY2xhc3M9XCJUTUNvZGVcIj4kMjwvY29kZT48c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfVE1Db2RlXCI+JDM8L3NwYW4+JyBcbiAgfSxcbiAgYXV0b2xpbmsgOiB7XG4gICAgcmVnZXhwOiAvXjwoKD86U2NoZW1lOlteXFxzPD5dKil8KD86RW1haWwpKT4vLFxuICAgIHJlcGxhY2VtZW50OiAnPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrX1RNQXV0b2xpbmtcIj4mbHQ7PC9zcGFuPjxzcGFuIGNsYXNzPVwiVE1BdXRvbGlua1wiPiQxPC9zcGFuPjxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya19UTUF1dG9saW5rXCI+Jmd0Ozwvc3Bhbj4nXG4gIH0sXG4gIGh0bWwgOiB7XG4gICAgcmVnZXhwOiAvXigoPzpIVE1MT3BlblRhZyl8KD86SFRNTENsb3NlVGFnKXwoPzpIVE1MQ29tbWVudCl8KD86SFRNTFBJKXwoPzpIVE1MRGVjbGFyYXRpb24pfCg/OkhUTUxDREFUQSkpLyxcbiAgICByZXBsYWNlbWVudDogJzxzcGFuIGNsYXNzPVwiVE1IVE1MXCI+JDE8L3NwYW4+JyxcbiAgfSxcbiAgbGlua09wZW4gOiB7XG4gICAgcmVnZXhwOiAvXlxcWy8sXG4gICAgcmVwbGFjZW1lbnQ6ICcnXG4gIH0sXG4gIGltYWdlT3BlbiA6IHtcbiAgICByZWdleHA6IC9eIVxcWy8sXG4gICAgcmVwbGFjZW1lbnQgOiAnJ1xuICB9LFxuICBsaW5rTGFiZWwgOiB7XG4gICAgcmVnZXhwOiAvXihcXFtcXHMqKShbXlxcXV0qPykoXFxzKlxcXSkvLFxuICAgIHJlcGxhY2VtZW50OiAnJyxcbiAgICBsYWJlbFBsYWNlaG9sZGVyOiAyXG4gIH0sXG4gIGRlZmF1bHQgOiB7XG4gICAgcmVnZXhwOiAvXigufCg/Ok5vdFRyaWdnZXJDaGFyKykpLyxcbiAgICByZXBsYWNlbWVudDogJyQxJ1xuICB9XG59O1xuXG4vLyBQcm9jZXNzIHJlcGxhY2VtZW50cyBpbiByZWdleHBzXG5jb25zdCByZXBsYWNlbWVudFJlZ2V4cCA9IG5ldyBSZWdFeHAoT2JqZWN0LmtleXMocmVwbGFjZW1lbnRzKS5qb2luKCd8JykpO1xuXG4vLyBJbmxpbmVcbmNvbnN0IGlubGluZVJ1bGVzID0gWy4uLk9iamVjdC5rZXlzKGlubGluZUdyYW1tYXIpXTtcbmZvciAobGV0IHJ1bGUgb2YgaW5saW5lUnVsZXMpIHtcbiAgbGV0IHJlID0gaW5saW5lR3JhbW1hcltydWxlXS5yZWdleHAuc291cmNlO1xuICAvLyBSZXBsYWNlIHdoaWxlIHRoZXJlIGlzIHNvbWV0aGluZyB0byByZXBsYWNlLiBUaGlzIG1lYW5zIGl0IGFsc28gd29ya3Mgb3ZlciBtdWx0aXBsZSBsZXZlbHMgKHJlcGxhY2VtZW50cyBjb250YWluaW5nIHJlcGxhY2VtZW50cylcbiAgd2hpbGUgKHJlLm1hdGNoKHJlcGxhY2VtZW50UmVnZXhwKSkge1xuICAgIHJlID0gcmUucmVwbGFjZShyZXBsYWNlbWVudFJlZ2V4cCwgKHN0cmluZykgPT4geyByZXR1cm4gcmVwbGFjZW1lbnRzW3N0cmluZ10uc291cmNlOyB9KTtcbiAgfVxuICBpbmxpbmVHcmFtbWFyW3J1bGVdLnJlZ2V4cCA9IG5ldyBSZWdFeHAocmUsIGlubGluZUdyYW1tYXJbcnVsZV0ucmVnZXhwLmZsYWdzKTtcbn1cblxuLy8gSFRNTCBCbG9jayAob25seSBvcGVuaW5nIHJ1bGUgaXMgcHJvY2Vzc2VkIGN1cnJlbnRseSlcbmZvciAobGV0IHJ1bGUgb2YgaHRtbEJsb2NrR3JhbW1hcikge1xuICBsZXQgcmUgPSBydWxlLnN0YXJ0LnNvdXJjZTtcbiAgLy8gUmVwbGFjZSB3aGlsZSB0aGVyZSBpcyBzb21ldGhpbmcgdG8gcmVwbGFjZS4gVGhpcyBtZWFucyBpdCBhbHNvIHdvcmtzIG92ZXIgbXVsdGlwbGUgbGV2ZWxzIChyZXBsYWNlbWVudHMgY29udGFpbmluZyByZXBsYWNlbWVudHMpXG4gIHdoaWxlIChyZS5tYXRjaChyZXBsYWNlbWVudFJlZ2V4cCkpIHtcbiAgICByZSA9IHJlLnJlcGxhY2UocmVwbGFjZW1lbnRSZWdleHAsIChzdHJpbmcpID0+IHsgcmV0dXJuIHJlcGxhY2VtZW50c1tzdHJpbmddLnNvdXJjZTsgfSk7XG4gIH1cbiAgcnVsZS5zdGFydCA9IG5ldyBSZWdFeHAocmUsIHJ1bGUuc3RhcnQuZmxhZ3MpO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBtZXJnZWQgaW5saW5lIGdyYW1tYXIgYnkgY29tYmluaW5nIHRoZSBkZWZhdWx0IGlubGluZSBncmFtbWFyIHdpdGggY3VzdG9tIHJ1bGVzLlxuICogQ3VzdG9tIHJ1bGVzIGFyZSBwcm9jZXNzZWQgYW5kIHRoZWlyIHJlZ2V4cCBwYXR0ZXJucyBhcmUgZXhwYW5kZWQgd2l0aCByZXBsYWNlbWVudHMuXG4gKiBAcGFyYW0gY3VzdG9tUnVsZXMgLSBPYmplY3QgY29udGFpbmluZyBjdXN0b20gaW5saW5lIGdyYW1tYXIgcnVsZXNcbiAqIEByZXR1cm5zIE1lcmdlZCBpbmxpbmUgZ3JhbW1hciBvYmplY3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU1lcmdlZElubGluZUdyYW1tYXIoY3VzdG9tUnVsZXM6IFJlY29yZDxzdHJpbmcsIEdyYW1tYXJSdWxlPiA9IHt9KTogUmVjb3JkPHN0cmluZywgR3JhbW1hclJ1bGU+IHtcbiAgY29uc3QgbWVyZ2VkID0geyAuLi5pbmxpbmVHcmFtbWFyIH07XG4gIFxuICAvLyBQcm9jZXNzIGN1c3RvbSBydWxlc1xuICBmb3IgKGNvbnN0IFtydWxlTmFtZSwgcnVsZV0gb2YgT2JqZWN0LmVudHJpZXMoY3VzdG9tUnVsZXMpKSB7XG4gICAgLy8gQ29weSB0aGUgcnVsZSB0byBhdm9pZCBtb2RpZnlpbmcgdGhlIG9yaWdpbmFsXG4gICAgY29uc3QgcHJvY2Vzc2VkUnVsZSA9IHsgLi4ucnVsZSB9O1xuICAgIFxuICAgIC8vIFByb2Nlc3MgcmVwbGFjZW1lbnRzIGluIHRoZSByZWdleHBcbiAgICBsZXQgcmVnZXhwU291cmNlID0gcnVsZS5yZWdleHAuc291cmNlO1xuICAgIGNvbnN0IHJlcGxhY2VtZW50UmVnZXhwID0gbmV3IFJlZ0V4cChPYmplY3Qua2V5cyhyZXBsYWNlbWVudHMpLmpvaW4oJ3wnKSk7XG4gICAgXG4gICAgLy8gUmVwbGFjZSB3aGlsZSB0aGVyZSBpcyBzb21ldGhpbmcgdG8gcmVwbGFjZVxuICAgIHdoaWxlIChyZWdleHBTb3VyY2UubWF0Y2gocmVwbGFjZW1lbnRSZWdleHApKSB7XG4gICAgICByZWdleHBTb3VyY2UgPSByZWdleHBTb3VyY2UucmVwbGFjZShyZXBsYWNlbWVudFJlZ2V4cCwgKG1hdGNoKSA9PiB7XG4gICAgICAgIHJldHVybiByZXBsYWNlbWVudHNbbWF0Y2hdLnNvdXJjZTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBcbiAgICBwcm9jZXNzZWRSdWxlLnJlZ2V4cCA9IG5ldyBSZWdFeHAocmVnZXhwU291cmNlLCBydWxlLnJlZ2V4cC5mbGFncyk7XG4gICAgbWVyZ2VkW3J1bGVOYW1lXSA9IHByb2Nlc3NlZFJ1bGU7XG4gIH1cbiAgXG4gIHJldHVybiBtZXJnZWQ7XG59XG5cbi8qKlxuICogRXNjYXBlcyBIVE1MIHNwZWNpYWwgY2hhcmFjdGVycyAoPCwgPiwgYW5kICYpIGluIHRoZSBzdHJpbmcuXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFRoZSByYXcgc3RyaW5nIHRvIGJlIGVzY2FwZWRcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBzdHJpbmcsIHJlYWR5IHRvIGJlIHVzZWQgaW4gSFRNTFxuICovXG5leHBvcnQgZnVuY3Rpb24gaHRtbGVzY2FwZShzdHJpbmc6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiAoc3RyaW5nID8gc3RyaW5nIDogJycpXG4gICAgLnJlcGxhY2UoLyYvZywgJyZhbXA7JylcbiAgICAucmVwbGFjZSgvPC9nLCAnJmx0OycpXG4gICAgLnJlcGxhY2UoLz4vZywgJyZndDsnKTtcbn1cblxuLyoqXG4gKiBDb250YWlucyB0aGUgY29tbWFuZHMgdGhhdCBjYW4gYmUgc2VudCB0byB0aGUgZWRpdG9yLiBDb250YWlucyBvYmplY3RzIHdpdGggYSBuYW1lIHJlcHJlc2VudGluZyB0aGUgbmFtZSBvZiB0aGUgY29tbWFuZC5cbiAqIEVhY2ggb2YgdGhlIG9iamVjdHMgY29udGFpbnMgdGhlIGZvbGxvd2luZyBrZXlzOlxuICogXG4gKiAgIC0gdHlwZTogQ2FuIGJlIGVpdGhlciBpbmxpbmUgKGZvciBpbmxpbmUgZm9ybWF0dGluZykgb3IgbGluZSAoZm9yIGJsb2NrIC8gbGluZSBmb3JtYXR0aW5nKS5cbiAqICAgLSBjbGFzc05hbWU6IFVzZWQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGNvbW1hbmQgaXMgYWN0aXZlIGF0IGEgZ2l2ZW4gcG9zaXRpb24uIFxuICogICAgIEZvciBsaW5lIGZvcm1hdHRpbmcsIHRoaXMgbG9va3MgYXQgdGhlIGNsYXNzIG9mIHRoZSBsaW5lIGVsZW1lbnQuIEZvciBpbmxpbmUgZWxlbWVudHMsIHRyaWVzIHRvIGZpbmQgYW4gZW5jbG9zaW5nIGVsZW1lbnQgd2l0aCB0aGF0IGNsYXNzLlxuICogICAtIHNldCAvIHVuc2V0OiBDb250YWluIGluc3RydWN0aW9ucyBob3cgdG8gc2V0IGFuZCB1bnNldCB0aGUgY29tbWFuZC4gRm9yIGxpbmUgdHlwZSBjb21tYW5kcywgYm90aCBjb25zaXN0IG9mIGEgcGF0dGVybiBhbmQgcmVwbGFjZW1lbnQgdGhhdCBcbiAqICAgICB3aWxsIGJlIGFwcGxpZWQgdG8gZWFjaCBsaW5lICh1c2luZyBTdHJpbmcucmVwbGFjZSkuIEZvciBpbmxpbmUgdHlwZSBjb21tYW5kcywgdGhlIHNldCBvYmplY3QgY29udGFpbnMgYSBwcmUgYW5kIHBvc3Qgc3RyaW5nIHdoaWNoIHdpbGxcbiAqICAgICBiZSBpbnNlcnRlZCBiZWZvcmUgYW5kIGFmdGVyIHRoZSBzZWxlY3Rpb24uIFRoZSB1bnNldCBvYmplY3QgY29udGFpbnMgYSBwcmVQYXR0ZXJuIGFuZCBhIHBvc3RQYXR0ZXJuLiBCb3RoIHNob3VsZCBiZSByZWd1bGFyIGV4cHJlc3Npb25zIGFuZCBcbiAqICAgICB0aGV5IHdpbGwgYmUgYXBwbGllZCB0byB0aGUgcG9ydGlvbiBvZiB0aGUgbGluZSBiZWZvcmUgYW5kIGFmdGVyIHRoZSBzZWxlY3Rpb24gKHVzaW5nIFN0cmluZy5yZXBsYWNlLCB3aXRoIGFuIGVtcHR5IHJlcGxhY2VtZW50IHN0cmluZykuXG4gKi9cbmV4cG9ydCBjb25zdCBjb21tYW5kczogUmVjb3JkPHN0cmluZywgQ29tbWFuZD4gPSB7XG4gIC8vIFJlcGxhY2VtZW50cyBmb3IgdW5zZXQgZm9yIGlubGluZSBjb21tYW5kcyBhcmUgJycgYnkgZGVmYXVsdFxuICBib2xkOiB7XG4gICAgdHlwZTogJ2lubGluZScsIFxuICAgIGNsYXNzTmFtZTogJ1RNU3Ryb25nJywgXG4gICAgc2V0OiB7cHJlOiAnKionLCBwb3N0OiAnKionfSwgXG4gICAgdW5zZXQ6IHtwcmVQYXR0ZXJuOiAvKD86XFwqXFwqfF9fKSQvLCBwb3N0UGF0dGVybjogL14oPzpcXCpcXCp8X18pL31cbiAgfSwgXG4gIGl0YWxpYzoge1xuICAgIHR5cGU6ICdpbmxpbmUnLCBcbiAgICBjbGFzc05hbWU6ICdUTUVtJywgXG4gICAgc2V0OiB7cHJlOiAnKicsIHBvc3Q6ICcqJ30sIFxuICAgIHVuc2V0OiB7cHJlUGF0dGVybjogLyg/OlxcKnxfKSQvLCBwb3N0UGF0dGVybjogL14oPzpcXCp8XykvfVxuICB9LFxuICBjb2RlOiB7XG4gICAgdHlwZTogJ2lubGluZScsIFxuICAgIGNsYXNzTmFtZTogJ1RNQ29kZScsIFxuICAgIHNldDoge3ByZTogJ2AnLCBwb3N0OiAnYCd9LCBcbiAgICB1bnNldDoge3ByZVBhdHRlcm46IC9gKyQvLCBwb3N0UGF0dGVybjogL15gKy99IC8vIEZJWE1FIHRoaXMgZG9lc24ndCBlbnN1cmUgYmFsYW5jZWQgYmFja3RpY2tzIHJpZ2h0IG5vd1xuICB9LCBcbiAgc3RyaWtldGhyb3VnaDoge1xuICAgIHR5cGU6ICdpbmxpbmUnLCBcbiAgICBjbGFzc05hbWU6ICdUTVN0cmlrZXRocm91Z2gnLCBcbiAgICBzZXQ6IHtwcmU6ICd+ficsIHBvc3Q6ICd+fid9LCBcbiAgICB1bnNldDoge3ByZVBhdHRlcm46L35+JC8sIHBvc3RQYXR0ZXJuOiAvXn5+LyB9XG4gIH0sXG4gIGgxOiB7XG4gICAgdHlwZTogJ2xpbmUnLCBcbiAgICBjbGFzc05hbWU6ICdUTUgxJywgXG4gICAgc2V0OiB7cGF0dGVybjogL14oIHswLDN9KD86KD86Iyt8WzAtOV17MSw5fVspLl18Wz5cXC0qK10pXFxzKyk/KSguKikkLywgcmVwbGFjZW1lbnQ6ICcjICQyJ30sIFxuICAgIHVuc2V0OiB7cGF0dGVybjogL14oIHswLDN9I1xccyspKC4qPykoKD86XFxzKyMrXFxzKik/KSQvLCByZXBsYWNlbWVudDogJyQyJ31cbiAgfSxcbiAgaDI6IHtcbiAgICB0eXBlOiAnbGluZScsIFxuICAgIGNsYXNzTmFtZTogJ1RNSDInLCBcbiAgICBzZXQ6IHtwYXR0ZXJuOiAvXiggezAsM30oPzooPzojK3xbMC05XXsxLDl9WykuXXxbPlxcLSorXSlcXHMrKT8pKC4qKSQvLCByZXBsYWNlbWVudDogJyMjICQyJ30sIFxuICAgIHVuc2V0OiB7cGF0dGVybjogL14oIHswLDN9IyNcXHMrKSguKj8pKCg/OlxccysjK1xccyopPykkLywgcmVwbGFjZW1lbnQ6ICckMid9XG4gIH0sXG4gIGgzOiB7XG4gICAgdHlwZTogJ2xpbmUnLCBcbiAgICBjbGFzc05hbWU6ICdUTUgzJywgXG4gICAgc2V0OiB7cGF0dGVybjogL14oIHswLDN9KD86KD86Iyt8WzAtOV17MSw5fVspLl18Wz5cXC0qK10pXFxzKyk/KSguKikkLywgcmVwbGFjZW1lbnQ6ICcjIyMgJDInfSwgXG4gICAgdW5zZXQ6IHtwYXR0ZXJuOiAvXiggezAsM30jIyNcXHMrKSguKj8pKCg/OlxccysjK1xccyopPykkLywgcmVwbGFjZW1lbnQ6ICckMid9XG4gIH0sXG4gIGg0OiB7XG4gICAgdHlwZTogJ2xpbmUnLCBcbiAgICBjbGFzc05hbWU6ICdUTUg0JywgXG4gICAgc2V0OiB7cGF0dGVybjogL14oIHswLDN9KD86KD86Iyt8WzAtOV17MSw5fVspLl18Wz5cXC0qK10pXFxzKyk/KSguKikkLywgcmVwbGFjZW1lbnQ6ICcjIyMjICQyJ30sIFxuICAgIHVuc2V0OiB7cGF0dGVybjogL14oIHswLDN9IyMjI1xccyspKC4qPykoKD86XFxzKyMrXFxzKik/KSQvLCByZXBsYWNlbWVudDogJyQyJ31cbiAgfSxcbiAgaDU6IHtcbiAgICB0eXBlOiAnbGluZScsIFxuICAgIGNsYXNzTmFtZTogJ1RNSDUnLCBcbiAgICBzZXQ6IHtwYXR0ZXJuOiAvXiggezAsM30oPzooPzojK3xbMC05XXsxLDl9WykuXXxbPlxcLSorXSlcXHMrKT8pKC4qKSQvLCByZXBsYWNlbWVudDogJyMjIyMjICQyJ30sIFxuICAgIHVuc2V0OiB7cGF0dGVybjogL14oIHswLDN9IyMjIyNcXHMrKSguKj8pKCg/OlxccysjK1xccyopPykkLywgcmVwbGFjZW1lbnQ6ICckMid9XG4gIH0sXG4gIGg2OiB7XG4gICAgdHlwZTogJ2xpbmUnLCBcbiAgICBjbGFzc05hbWU6ICdUTUg2JywgXG4gICAgc2V0OiB7cGF0dGVybjogL14oIHswLDN9KD86KD86Iyt8WzAtOV17MSw5fVspLl18Wz5cXC0qK10pXFxzKyk/KSguKikkLywgcmVwbGFjZW1lbnQ6ICcjIyMjIyMgJDInfSwgXG4gICAgdW5zZXQ6IHtwYXR0ZXJuOiAvXiggezAsM30jIyMjIyNcXHMrKSguKj8pKCg/OlxccysjK1xccyopPykkLywgcmVwbGFjZW1lbnQ6ICckMid9XG4gIH0sXG4gIHVsOiB7XG4gICAgdHlwZTogJ2xpbmUnLCBcbiAgICBjbGFzc05hbWU6ICdUTVVMJywgXG4gICAgc2V0OiB7cGF0dGVybjogL14oIHswLDN9KD86KD86Iyt8WzAtOV17MSw5fVspLl18Wz5cXC0qK10pXFxzKyk/KSguKikkLywgcmVwbGFjZW1lbnQ6ICctICQyJ30sIFxuICAgIHVuc2V0OiB7cGF0dGVybjogL14oIHswLDN9WysqLV0gezEsNH0pKC4qKSQvLCByZXBsYWNlbWVudDogJyQyJ31cbiAgfSxcbiAgb2w6IHtcbiAgICB0eXBlOiAnbGluZScsIFxuICAgIGNsYXNzTmFtZTogJ1RNT0wnLCBcbiAgICBzZXQ6IHtwYXR0ZXJuOiAvXiggezAsM30oPzooPzojK3xbMC05XXsxLDl9WykuXXxbPlxcLSorXSlcXHMrKT8pKC4qKSQvLCByZXBsYWNlbWVudDogJyQjLiAkMid9LCBcbiAgICB1bnNldDoge3BhdHRlcm46IC9eKCB7MCwzfVxcZHsxLDl9Wy4pXSB7MSw0fSkoLiopJC8sIHJlcGxhY2VtZW50OiAnJDInfVxuICB9LCBcbiAgYmxvY2txdW90ZToge1xuICAgIHR5cGU6ICdsaW5lJywgXG4gICAgY2xhc3NOYW1lOiAnVE1CbG9ja3F1b3RlJywgXG4gICAgc2V0OiB7cGF0dGVybjogL14oIHswLDN9KD86KD86Iyt8WzAtOV17MSw5fVspLl18Wz5cXC0qK10pXFxzKyk/KSguKikkLywgcmVwbGFjZW1lbnQ6ICc+ICQyJ30sIFxuICAgIHVuc2V0OiB7cGF0dGVybjogL14oIHswLDN9PlsgXT8pKC4qKSQvLCByZXBsYWNlbWVudDogJyQyJ31cbiAgfSxcbn07IiwiaW1wb3J0IHtcbiAgaW5saW5lR3JhbW1hcixcbiAgbGluZUdyYW1tYXIsXG4gIHB1bmN0dWF0aW9uTGVhZGluZyxcbiAgcHVuY3R1YXRpb25UcmFpbGluZyxcbiAgaHRtbGVzY2FwZSxcbiAgaHRtbEJsb2NrR3JhbW1hcixcbiAgY29tbWFuZHMsXG4gIEhUTUxCbG9ja1J1bGUsXG4gIENvbW1hbmQsXG4gIEdyYW1tYXJSdWxlLFxuICBjcmVhdGVNZXJnZWRJbmxpbmVHcmFtbWFyLFxufSBmcm9tIFwiLi9ncmFtbWFyXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRWRpdG9yUHJvcHMge1xuICBlbGVtZW50Pzogc3RyaW5nIHwgSFRNTEVsZW1lbnQ7XG4gIGVkaXRvcj86IHN0cmluZyB8IEhUTUxFbGVtZW50O1xuICBjb250ZW50Pzogc3RyaW5nO1xuICB0ZXh0YXJlYT86IHN0cmluZyB8IEhUTUxUZXh0QXJlYUVsZW1lbnQ7XG4gIGN1c3RvbUlubGluZUdyYW1tYXI/OiBSZWNvcmQ8c3RyaW5nLCBHcmFtbWFyUnVsZT47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUG9zaXRpb24ge1xuICByb3c6IG51bWJlcjtcbiAgY29sOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSGlzdG9yeVN0YXRlIHtcbiAgY29udGVudDogc3RyaW5nO1xuICBzZWxlY3Rpb246IFBvc2l0aW9uIHwgbnVsbDtcbiAgYW5jaG9yOiBQb3NpdGlvbiB8IG51bGw7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2hhbmdlRXZlbnQge1xuICBjb250ZW50OiBzdHJpbmc7XG4gIGxpbmVzRGlydHk6IGJvb2xlYW5bXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTZWxlY3Rpb25FdmVudCB7XG4gIGZvY3VzOiBQb3NpdGlvbjtcbiAgYW5jaG9yOiBQb3NpdGlvbjtcbiAgY29tbWFuZFN0YXRlOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuIHwgbnVsbD47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRHJvcEV2ZW50IHtcbiAgZGF0YVRyYW5zZmVyOiBEYXRhVHJhbnNmZXI7XG59XG5cbnR5cGUgRXZlbnRUeXBlID0gJ2NoYW5nZScgfCAnc2VsZWN0aW9uJyB8ICdkcm9wJztcbnR5cGUgRXZlbnRIYW5kbGVyPFQ+ID0gKGV2ZW50OiBUKSA9PiB2b2lkO1xuXG5leHBvcnQgY2xhc3MgRWRpdG9yIHtcbiAgcHVibGljIGU6IEhUTUxEaXZFbGVtZW50IHwgbnVsbCA9IG51bGw7XG4gIHB1YmxpYyB0ZXh0YXJlYTogSFRNTFRleHRBcmVhRWxlbWVudCB8IG51bGwgPSBudWxsO1xuICBwdWJsaWMgbGluZXM6IHN0cmluZ1tdID0gW107XG4gIHB1YmxpYyBsaW5lRWxlbWVudHM6IE5vZGVMaXN0T2Y8Q2hpbGROb2RlPiB8IEhUTUxDb2xsZWN0aW9uIHwgQ2hpbGROb2RlW10gPSBbXTtcbiAgcHVibGljIGxpbmVUeXBlczogc3RyaW5nW10gPSBbXTtcbiAgcHVibGljIGxpbmVDYXB0dXJlczogUmVnRXhwRXhlY0FycmF5W10gPSBbXTtcbiAgcHVibGljIGxpbmVSZXBsYWNlbWVudHM6IHN0cmluZ1tdID0gW107XG4gIHB1YmxpYyBsaW5rTGFiZWxzOiBzdHJpbmdbXSA9IFtdO1xuICBwdWJsaWMgbGluZURpcnR5OiBib29sZWFuW10gPSBbXTtcbiAgcHVibGljIGxhc3RDb21tYW5kU3RhdGU6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4gfCBudWxsPiB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIGN1c3RvbUlubGluZUdyYW1tYXI6IFJlY29yZDxzdHJpbmcsIEdyYW1tYXJSdWxlPiA9IHt9O1xuICBwcml2YXRlIG1lcmdlZElubGluZUdyYW1tYXI6IFJlY29yZDxzdHJpbmcsIEdyYW1tYXJSdWxlPiA9IGlubGluZUdyYW1tYXI7XG4gIHByaXZhdGUgaGFzRm9jdXM6IGJvb2xlYW4gPSB0cnVlO1xuICBwcml2YXRlIGxhc3RTZWxlY3Rpb246IHsgZm9jdXM6IFBvc2l0aW9uIHwgbnVsbDsgYW5jaG9yOiBQb3NpdGlvbiB8IG51bGwgfSB8IG51bGwgPSBudWxsO1xuXG4gIHB1YmxpYyBsaXN0ZW5lcnM6IHtcbiAgICBjaGFuZ2U6IEV2ZW50SGFuZGxlcjxDaGFuZ2VFdmVudD5bXTtcbiAgICBzZWxlY3Rpb246IEV2ZW50SGFuZGxlcjxTZWxlY3Rpb25FdmVudD5bXTtcbiAgICBkcm9wOiBFdmVudEhhbmRsZXI8RHJvcEV2ZW50PltdO1xuICB9ID0ge1xuICAgIGNoYW5nZTogW10sXG4gICAgc2VsZWN0aW9uOiBbXSxcbiAgICBkcm9wOiBbXSxcbiAgfTtcblxuICBwcml2YXRlIHVuZG9TdGFjazogSGlzdG9yeVN0YXRlW10gPSBbXTtcbiAgcHJpdmF0ZSByZWRvU3RhY2s6IEhpc3RvcnlTdGF0ZVtdID0gW107XG4gIHByaXZhdGUgaXNSZXN0b3JpbmdIaXN0b3J5OiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgbWF4SGlzdG9yeTogbnVtYmVyID0gMTAwO1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBFZGl0b3JQcm9wcyA9IHt9KSB7XG4gICAgdGhpcy5lID0gbnVsbDtcbiAgICB0aGlzLnRleHRhcmVhID0gbnVsbDtcbiAgICB0aGlzLmxpbmVzID0gW107XG4gICAgdGhpcy5saW5lRWxlbWVudHMgPSBbXSBhcyBDaGlsZE5vZGVbXTtcbiAgICB0aGlzLmxpbmVUeXBlcyA9IFtdO1xuICAgIHRoaXMubGluZUNhcHR1cmVzID0gW107XG4gICAgdGhpcy5saW5lUmVwbGFjZW1lbnRzID0gW107XG4gICAgdGhpcy5saW5rTGFiZWxzID0gW107XG4gICAgdGhpcy5saW5lRGlydHkgPSBbXTtcbiAgICB0aGlzLmxhc3RDb21tYW5kU3RhdGUgPSBudWxsO1xuICAgIHRoaXMuaGFzRm9jdXMgPSB0cnVlO1xuICAgIHRoaXMubGFzdFNlbGVjdGlvbiA9IG51bGw7XG4gICAgdGhpcy5jdXN0b21JbmxpbmVHcmFtbWFyID0gcHJvcHMuY3VzdG9tSW5saW5lR3JhbW1hciB8fCB7fTtcbiAgICB0aGlzLm1lcmdlZElubGluZUdyYW1tYXIgPSBjcmVhdGVNZXJnZWRJbmxpbmVHcmFtbWFyKHRoaXMuY3VzdG9tSW5saW5lR3JhbW1hcik7XG5cbiAgICB0aGlzLmxpc3RlbmVycyA9IHtcbiAgICAgIGNoYW5nZTogW10sXG4gICAgICBzZWxlY3Rpb246IFtdLFxuICAgICAgZHJvcDogW10sXG4gICAgfTtcblxuICAgIGxldCBlbGVtZW50OiBIVE1MRWxlbWVudCB8IG51bGwgPSBudWxsO1xuICAgIGlmICh0eXBlb2YgcHJvcHMuZWxlbWVudCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChwcm9wcy5lbGVtZW50KTtcbiAgICB9IGVsc2UgaWYgKHByb3BzLmVsZW1lbnQpIHtcbiAgICAgIGVsZW1lbnQgPSBwcm9wcy5lbGVtZW50O1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgcHJvcHMudGV4dGFyZWEgPT09ICdzdHJpbmcnKSB7XG4gICAgICB0aGlzLnRleHRhcmVhID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQocHJvcHMudGV4dGFyZWEpIGFzIEhUTUxUZXh0QXJlYUVsZW1lbnQ7XG4gICAgfSBlbHNlIGlmIChwcm9wcy50ZXh0YXJlYSkge1xuICAgICAgdGhpcy50ZXh0YXJlYSA9IHByb3BzLnRleHRhcmVhO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnRleHRhcmVhKSB7XG4gICAgICBpZiAoIWVsZW1lbnQpIGVsZW1lbnQgPSB0aGlzLnRleHRhcmVhO1xuICAgIH1cblxuICAgIGlmICghZWxlbWVudCkge1xuICAgICAgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiYm9keVwiKVswXTtcbiAgICB9XG4gICAgaWYgKGVsZW1lbnQgJiYgZWxlbWVudC50YWdOYW1lID09PSBcIlRFWFRBUkVBXCIpIHtcbiAgICAgIHRoaXMudGV4dGFyZWEgPSBlbGVtZW50IGFzIEhUTUxUZXh0QXJlYUVsZW1lbnQ7XG4gICAgICBlbGVtZW50ID0gdGhpcy50ZXh0YXJlYS5wYXJlbnROb2RlIGFzIEhUTUxFbGVtZW50O1xuICAgIH1cblxuICAgIGlmICh0aGlzLnRleHRhcmVhKSB7XG4gICAgICB0aGlzLnRleHRhcmVhLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcbiAgICB9XG5cbiAgICB0aGlzLnVuZG9TdGFjayA9IFtdO1xuICAgIHRoaXMucmVkb1N0YWNrID0gW107XG4gICAgdGhpcy5pc1Jlc3RvcmluZ0hpc3RvcnkgPSBmYWxzZTtcbiAgICB0aGlzLm1heEhpc3RvcnkgPSAxMDA7XG5cbiAgICB0aGlzLmNyZWF0ZUVkaXRvckVsZW1lbnQoZWxlbWVudCwgcHJvcHMpO1xuICAgIHRoaXMuc2V0Q29udGVudChcbiAgICAgIHR5cGVvZiBwcm9wcy5jb250ZW50ID09PSBcInN0cmluZ1wiXG4gICAgICAgID8gcHJvcHMuY29udGVudFxuICAgICAgICA6IHRoaXMudGV4dGFyZWFcbiAgICAgICAgPyB0aGlzLnRleHRhcmVhLnZhbHVlXG4gICAgICAgIDogXCIjIEhlbGxvIFRpbnlNREUhXFxuRWRpdCAqKmhlcmUqKlwiXG4gICAgKTtcbiAgICBcbiAgICB0aGlzLmUhLmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIChlKSA9PiB0aGlzLmhhbmRsZVVuZG9SZWRvS2V5KGUpKTtcbiAgfVxuXG4gIGdldCBjYW5VbmRvKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnVuZG9TdGFjay5sZW5ndGggPj0gMjtcbiAgfVxuXG4gIGdldCBjYW5SZWRvKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnJlZG9TdGFjay5sZW5ndGggPiAwO1xuICB9XG5cbiAgcHJpdmF0ZSBwdXNoSGlzdG9yeSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc1Jlc3RvcmluZ0hpc3RvcnkpIHJldHVybjtcbiAgICB0aGlzLnB1c2hDdXJyZW50U3RhdGUoKTtcbiAgICB0aGlzLnJlZG9TdGFjayA9IFtdO1xuICB9XG5cbiAgcHJpdmF0ZSBwdXNoQ3VycmVudFN0YXRlKCk6IHZvaWQge1xuICAgIHRoaXMudW5kb1N0YWNrLnB1c2goe1xuICAgICAgY29udGVudDogdGhpcy5nZXRDb250ZW50KCksXG4gICAgICBzZWxlY3Rpb246IHRoaXMuZ2V0U2VsZWN0aW9uKCksXG4gICAgICBhbmNob3I6IHRoaXMuZ2V0U2VsZWN0aW9uKHRydWUpLFxuICAgIH0pO1xuICAgIGlmICh0aGlzLnVuZG9TdGFjay5sZW5ndGggPiB0aGlzLm1heEhpc3RvcnkpIHRoaXMudW5kb1N0YWNrLnNoaWZ0KCk7XG4gIH1cblxuICBwdWJsaWMgdW5kbygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy51bmRvU3RhY2subGVuZ3RoIDwgMikgcmV0dXJuO1xuICAgIHRoaXMuaXNSZXN0b3JpbmdIaXN0b3J5ID0gdHJ1ZTtcbiAgICB0aGlzLnB1c2hDdXJyZW50U3RhdGUoKTtcbiAgICBjb25zdCBjdXJyZW50ID0gdGhpcy51bmRvU3RhY2sucG9wKCkhO1xuICAgIHRoaXMucmVkb1N0YWNrLnB1c2goY3VycmVudCk7XG4gICAgY29uc3QgcHJldiA9IHRoaXMudW5kb1N0YWNrW3RoaXMudW5kb1N0YWNrLmxlbmd0aCAtIDFdO1xuICAgIHRoaXMuc2V0Q29udGVudChwcmV2LmNvbnRlbnQpO1xuICAgIGlmIChwcmV2LnNlbGVjdGlvbikgdGhpcy5zZXRTZWxlY3Rpb24ocHJldi5zZWxlY3Rpb24sIHByZXYuYW5jaG9yKTtcbiAgICB0aGlzLnVuZG9TdGFjay5wb3AoKTtcbiAgICB0aGlzLmlzUmVzdG9yaW5nSGlzdG9yeSA9IGZhbHNlO1xuICB9XG5cbiAgcHVibGljIHJlZG8oKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnJlZG9TdGFjay5sZW5ndGgpIHJldHVybjtcbiAgICB0aGlzLmlzUmVzdG9yaW5nSGlzdG9yeSA9IHRydWU7XG4gICAgdGhpcy5wdXNoQ3VycmVudFN0YXRlKCk7XG4gICAgY29uc3QgbmV4dCA9IHRoaXMucmVkb1N0YWNrLnBvcCgpITtcbiAgICB0aGlzLnNldENvbnRlbnQobmV4dC5jb250ZW50KTtcbiAgICBpZiAobmV4dC5zZWxlY3Rpb24pIHRoaXMuc2V0U2VsZWN0aW9uKG5leHQuc2VsZWN0aW9uLCBuZXh0LmFuY2hvcik7XG4gICAgdGhpcy5pc1Jlc3RvcmluZ0hpc3RvcnkgPSBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlVW5kb1JlZG9LZXkoZTogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGlzTWFjID0gL01hY3xpUG9kfGlQaG9uZXxpUGFkLy50ZXN0KG5hdmlnYXRvci5wbGF0Zm9ybSk7XG4gICAgY29uc3QgY3RybCA9IGlzTWFjID8gZS5tZXRhS2V5IDogZS5jdHJsS2V5O1xuICAgIGlmIChjdHJsICYmICFlLmFsdEtleSkge1xuICAgICAgaWYgKGUua2V5ID09PSBcInpcIiB8fCBlLmtleSA9PT0gXCJaXCIpIHtcbiAgICAgICAgaWYgKGUuc2hpZnRLZXkpIHtcbiAgICAgICAgICB0aGlzLnJlZG8oKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnVuZG8oKTtcbiAgICAgICAgfVxuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB9IGVsc2UgaWYgKGUua2V5ID09PSBcInlcIiB8fCBlLmtleSA9PT0gXCJZXCIpIHtcbiAgICAgICAgdGhpcy5yZWRvKCk7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUVkaXRvckVsZW1lbnQoZWxlbWVudDogSFRNTEVsZW1lbnQsIHByb3BzOiBFZGl0b3JQcm9wcyk6IHZvaWQge1xuICAgIGlmIChwcm9wcyAmJiBwcm9wcy5lZGl0b3IgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKHR5cGVvZiBwcm9wcy5lZGl0b3IgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRoaXMuZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHByb3BzLmVkaXRvcikgYXMgSFRNTERpdkVsZW1lbnQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmUgPSBwcm9wcy5lZGl0b3IgYXMgSFRNTERpdkVsZW1lbnQ7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgfVxuXG4gICAgdGhpcy5lLmNsYXNzTGlzdC5hZGQoXCJUaW55TURFXCIpO1xuICAgIHRoaXMuZS5jb250ZW50RWRpdGFibGUgPSBcInRydWVcIjtcbiAgICB0aGlzLmUuc3R5bGUud2hpdGVTcGFjZSA9IFwicHJlLXdyYXBcIjtcbiAgICAodGhpcy5lLnN0eWxlIGFzIGFueSkud2Via2l0VXNlck1vZGlmeSA9IFwicmVhZC13cml0ZS1wbGFpbnRleHQtb25seVwiO1xuXG4gICAgaWYgKHByb3BzLmVkaXRvciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMudGV4dGFyZWEgJiZcbiAgICAgICAgdGhpcy50ZXh0YXJlYS5wYXJlbnROb2RlID09PSBlbGVtZW50ICYmXG4gICAgICAgIHRoaXMudGV4dGFyZWEubmV4dFNpYmxpbmdcbiAgICAgICkge1xuICAgICAgICBlbGVtZW50Lmluc2VydEJlZm9yZSh0aGlzLmUsIHRoaXMudGV4dGFyZWEubmV4dFNpYmxpbmcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLmUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuZS5hZGRFdmVudExpc3RlbmVyKFwiaW5wdXRcIiwgKGUpID0+IHRoaXMuaGFuZGxlSW5wdXRFdmVudChlKSk7XG4gICAgdGhpcy5lLmFkZEV2ZW50TGlzdGVuZXIoXCJiZWZvcmVpbnB1dFwiLCAoZSkgPT4gdGhpcy5oYW5kbGVCZWZvcmVJbnB1dEV2ZW50KGUpKTtcbiAgICB0aGlzLmUuYWRkRXZlbnRMaXN0ZW5lcihcImNvbXBvc2l0aW9uZW5kXCIsIChlKSA9PiB0aGlzLmhhbmRsZUlucHV0RXZlbnQoZSkpO1xuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJzZWxlY3Rpb25jaGFuZ2VcIiwgKGUpID0+IHtcbiAgICAgIGlmICh0aGlzLmhhc0ZvY3VzKSB7IHRoaXMuaGFuZGxlU2VsZWN0aW9uQ2hhbmdlRXZlbnQoZSk7IH1cbiAgICAgIH1cbiAgICApO1xuICAgIHRoaXMuZS5hZGRFdmVudExpc3RlbmVyKFwiYmx1clwiLCAoKSA9PiB0aGlzLmhhc0ZvY3VzID0gZmFsc2UgKTtcbiAgICB0aGlzLmUuYWRkRXZlbnRMaXN0ZW5lcihcImZvY3VzXCIsICgpID0+IHRoaXMuaGFzRm9jdXMgPSB0cnVlICk7XG4gICAgdGhpcy5lLmFkZEV2ZW50TGlzdGVuZXIoXCJwYXN0ZVwiLCAoZSkgPT4gdGhpcy5oYW5kbGVQYXN0ZShlKSk7XG4gICAgdGhpcy5lLmFkZEV2ZW50TGlzdGVuZXIoXCJkcm9wXCIsIChlKSA9PiB0aGlzLmhhbmRsZURyb3AoZSkpO1xuICAgIHRoaXMubGluZUVsZW1lbnRzID0gdGhpcy5lLmNoaWxkTm9kZXM7XG4gIH1cblxuICBwdWJsaWMgc2V0Q29udGVudChjb250ZW50OiBzdHJpbmcpOiB2b2lkIHtcbiAgICB3aGlsZSAodGhpcy5lIS5maXJzdENoaWxkKSB7XG4gICAgICB0aGlzLmUhLnJlbW92ZUNoaWxkKHRoaXMuZSEuZmlyc3RDaGlsZCk7XG4gICAgfVxuICAgIHRoaXMubGluZXMgPSBjb250ZW50LnNwbGl0KC8oPzpcXHJcXG58XFxyfFxcbikvKTtcbiAgICB0aGlzLmxpbmVEaXJ0eSA9IFtdO1xuICAgIGZvciAobGV0IGxpbmVOdW0gPSAwOyBsaW5lTnVtIDwgdGhpcy5saW5lcy5sZW5ndGg7IGxpbmVOdW0rKykge1xuICAgICAgbGV0IGxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgIHRoaXMuZSEuYXBwZW5kQ2hpbGQobGUpO1xuICAgICAgdGhpcy5saW5lRGlydHkucHVzaCh0cnVlKTtcbiAgICB9XG4gICAgdGhpcy5saW5lVHlwZXMgPSBuZXcgQXJyYXkodGhpcy5saW5lcy5sZW5ndGgpO1xuICAgIHRoaXMudXBkYXRlRm9ybWF0dGluZygpO1xuICAgIHRoaXMuZmlyZUNoYW5nZSgpO1xuICAgIGlmICghdGhpcy5pc1Jlc3RvcmluZ0hpc3RvcnkpIHRoaXMucHVzaEhpc3RvcnkoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRDb250ZW50KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMubGluZXMuam9pbihcIlxcblwiKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlRm9ybWF0dGluZygpOiB2b2lkIHtcbiAgICB0aGlzLnVwZGF0ZUxpbmVUeXBlcygpO1xuICAgIHRoaXMudXBkYXRlTGlua0xhYmVscygpO1xuICAgIHRoaXMuYXBwbHlMaW5lVHlwZXMoKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlTGlua0xhYmVscygpOiB2b2lkIHtcbiAgICB0aGlzLmxpbmtMYWJlbHMgPSBbXTtcbiAgICBmb3IgKGxldCBsID0gMDsgbCA8IHRoaXMubGluZXMubGVuZ3RoOyBsKyspIHtcbiAgICAgIGlmICh0aGlzLmxpbmVUeXBlc1tsXSA9PT0gXCJUTUxpbmtSZWZlcmVuY2VEZWZpbml0aW9uXCIpIHtcbiAgICAgICAgdGhpcy5saW5rTGFiZWxzLnB1c2goXG4gICAgICAgICAgdGhpcy5saW5lQ2FwdHVyZXNbbF1bXG4gICAgICAgICAgICBsaW5lR3JhbW1hci5UTUxpbmtSZWZlcmVuY2VEZWZpbml0aW9uLmxhYmVsUGxhY2Vob2xkZXIhXG4gICAgICAgICAgXVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVwbGFjZShyZXBsYWNlbWVudDogc3RyaW5nLCBjYXB0dXJlOiBSZWdFeHBFeGVjQXJyYXkpOiBzdHJpbmcge1xuICAgIHJldHVybiByZXBsYWNlbWVudC5yZXBsYWNlKC8oXFwkezEsMn0pKFswLTldKS9nLCAoc3RyLCBwMSwgcDIpID0+IHtcbiAgICAgIGlmIChwMSA9PT0gXCIkXCIpIHJldHVybiBodG1sZXNjYXBlKGNhcHR1cmVbcGFyc2VJbnQocDIpXSk7XG4gICAgICBlbHNlXG4gICAgICAgIHJldHVybiBgPHNwYW4gY2xhc3M9XCJUTUlubGluZUZvcm1hdHRlZFwiPiR7dGhpcy5wcm9jZXNzSW5saW5lU3R5bGVzKFxuICAgICAgICAgIGNhcHR1cmVbcGFyc2VJbnQocDIpXVxuICAgICAgICApfTwvc3Bhbj5gO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhcHBseUxpbmVUeXBlcygpOiB2b2lkIHtcbiAgICBmb3IgKGxldCBsaW5lTnVtID0gMDsgbGluZU51bSA8IHRoaXMubGluZXMubGVuZ3RoOyBsaW5lTnVtKyspIHtcbiAgICAgIGlmICh0aGlzLmxpbmVEaXJ0eVtsaW5lTnVtXSkge1xuICAgICAgICBsZXQgY29udGVudEhUTUwgPSB0aGlzLnJlcGxhY2UoXG4gICAgICAgICAgdGhpcy5saW5lUmVwbGFjZW1lbnRzW2xpbmVOdW1dLFxuICAgICAgICAgIHRoaXMubGluZUNhcHR1cmVzW2xpbmVOdW1dXG4gICAgICAgICk7XG4gICAgICAgICh0aGlzLmxpbmVFbGVtZW50c1tsaW5lTnVtXSBhcyBIVE1MRWxlbWVudCkuY2xhc3NOYW1lID0gdGhpcy5saW5lVHlwZXNbbGluZU51bV07XG4gICAgICAgICh0aGlzLmxpbmVFbGVtZW50c1tsaW5lTnVtXSBhcyBIVE1MRWxlbWVudCkucmVtb3ZlQXR0cmlidXRlKFwic3R5bGVcIik7XG4gICAgICAgICh0aGlzLmxpbmVFbGVtZW50c1tsaW5lTnVtXSBhcyBIVE1MRWxlbWVudCkuaW5uZXJIVE1MID1cbiAgICAgICAgICBjb250ZW50SFRNTCA9PT0gXCJcIiA/IFwiPGJyIC8+XCIgOiBjb250ZW50SFRNTDtcbiAgICAgIH1cbiAgICAgICh0aGlzLmxpbmVFbGVtZW50c1tsaW5lTnVtXSBhcyBIVE1MRWxlbWVudCkuZGF0YXNldC5saW5lTnVtID0gbGluZU51bS50b1N0cmluZygpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlTGluZVR5cGVzKCk6IHZvaWQge1xuICAgIGxldCBjb2RlQmxvY2tUeXBlOiBzdHJpbmcgfCBmYWxzZSA9IGZhbHNlO1xuICAgIGxldCBjb2RlQmxvY2tTZXFMZW5ndGggPSAwO1xuICAgIGxldCBodG1sQmxvY2s6IEhUTUxCbG9ja1J1bGUgfCBmYWxzZSA9IGZhbHNlO1xuXG4gICAgZm9yIChsZXQgbGluZU51bSA9IDA7IGxpbmVOdW0gPCB0aGlzLmxpbmVzLmxlbmd0aDsgbGluZU51bSsrKSB7XG4gICAgICBsZXQgbGluZVR5cGUgPSBcIlRNUGFyYVwiO1xuICAgICAgbGV0IGxpbmVDYXB0dXJlOiBSZWdFeHBFeGVjQXJyYXkgPSBbdGhpcy5saW5lc1tsaW5lTnVtXV0gYXMgUmVnRXhwRXhlY0FycmF5O1xuICAgICAgbGV0IGxpbmVSZXBsYWNlbWVudCA9IFwiJCQwXCI7XG5cbiAgICAgIC8vIENoZWNrIG9uZ29pbmcgY29kZSBibG9ja3NcbiAgICAgIGlmIChjb2RlQmxvY2tUeXBlID09PSBcIlRNQ29kZUZlbmNlQmFja3RpY2tPcGVuXCIpIHtcbiAgICAgICAgbGV0IGNhcHR1cmUgPSBsaW5lR3JhbW1hci5UTUNvZGVGZW5jZUJhY2t0aWNrQ2xvc2UucmVnZXhwLmV4ZWModGhpcy5saW5lc1tsaW5lTnVtXSk7XG4gICAgICAgIGlmIChjYXB0dXJlICYmIGNhcHR1cmUuZ3JvdXBzIVtcInNlcVwiXS5sZW5ndGggPj0gY29kZUJsb2NrU2VxTGVuZ3RoKSB7XG4gICAgICAgICAgbGluZVR5cGUgPSBcIlRNQ29kZUZlbmNlQmFja3RpY2tDbG9zZVwiO1xuICAgICAgICAgIGxpbmVSZXBsYWNlbWVudCA9IGxpbmVHcmFtbWFyLlRNQ29kZUZlbmNlQmFja3RpY2tDbG9zZS5yZXBsYWNlbWVudDtcbiAgICAgICAgICBsaW5lQ2FwdHVyZSA9IGNhcHR1cmU7XG4gICAgICAgICAgY29kZUJsb2NrVHlwZSA9IGZhbHNlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxpbmVUeXBlID0gXCJUTUZlbmNlZENvZGVCYWNrdGlja1wiO1xuICAgICAgICAgIGxpbmVSZXBsYWNlbWVudCA9ICc8c3BhbiBjbGFzcz1cIlRNRmVuY2VkQ29kZVwiPiQwPGJyIC8+PC9zcGFuPic7XG4gICAgICAgICAgbGluZUNhcHR1cmUgPSBbdGhpcy5saW5lc1tsaW5lTnVtXV0gYXMgUmVnRXhwRXhlY0FycmF5O1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGNvZGVCbG9ja1R5cGUgPT09IFwiVE1Db2RlRmVuY2VUaWxkZU9wZW5cIikge1xuICAgICAgICBsZXQgY2FwdHVyZSA9IGxpbmVHcmFtbWFyLlRNQ29kZUZlbmNlVGlsZGVDbG9zZS5yZWdleHAuZXhlYyh0aGlzLmxpbmVzW2xpbmVOdW1dKTtcbiAgICAgICAgaWYgKGNhcHR1cmUgJiYgY2FwdHVyZS5ncm91cHMhW1wic2VxXCJdLmxlbmd0aCA+PSBjb2RlQmxvY2tTZXFMZW5ndGgpIHtcbiAgICAgICAgICBsaW5lVHlwZSA9IFwiVE1Db2RlRmVuY2VUaWxkZUNsb3NlXCI7XG4gICAgICAgICAgbGluZVJlcGxhY2VtZW50ID0gbGluZUdyYW1tYXIuVE1Db2RlRmVuY2VUaWxkZUNsb3NlLnJlcGxhY2VtZW50O1xuICAgICAgICAgIGxpbmVDYXB0dXJlID0gY2FwdHVyZTtcbiAgICAgICAgICBjb2RlQmxvY2tUeXBlID0gZmFsc2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbGluZVR5cGUgPSBcIlRNRmVuY2VkQ29kZVRpbGRlXCI7XG4gICAgICAgICAgbGluZVJlcGxhY2VtZW50ID0gJzxzcGFuIGNsYXNzPVwiVE1GZW5jZWRDb2RlXCI+JDA8YnIgLz48L3NwYW4+JztcbiAgICAgICAgICBsaW5lQ2FwdHVyZSA9IFt0aGlzLmxpbmVzW2xpbmVOdW1dXSBhcyBSZWdFeHBFeGVjQXJyYXk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgSFRNTCBibG9jayB0eXBlc1xuICAgICAgaWYgKGxpbmVUeXBlID09PSBcIlRNUGFyYVwiICYmIGh0bWxCbG9jayA9PT0gZmFsc2UpIHtcbiAgICAgICAgZm9yIChsZXQgaHRtbEJsb2NrVHlwZSBvZiBodG1sQmxvY2tHcmFtbWFyKSB7XG4gICAgICAgICAgaWYgKHRoaXMubGluZXNbbGluZU51bV0ubWF0Y2goaHRtbEJsb2NrVHlwZS5zdGFydCkpIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgaHRtbEJsb2NrVHlwZS5wYXJhSW50ZXJydXB0IHx8XG4gICAgICAgICAgICAgIGxpbmVOdW0gPT09IDAgfHxcbiAgICAgICAgICAgICAgIShcbiAgICAgICAgICAgICAgICB0aGlzLmxpbmVUeXBlc1tsaW5lTnVtIC0gMV0gPT09IFwiVE1QYXJhXCIgfHxcbiAgICAgICAgICAgICAgICB0aGlzLmxpbmVUeXBlc1tsaW5lTnVtIC0gMV0gPT09IFwiVE1VTFwiIHx8XG4gICAgICAgICAgICAgICAgdGhpcy5saW5lVHlwZXNbbGluZU51bSAtIDFdID09PSBcIlRNT0xcIiB8fFxuICAgICAgICAgICAgICAgIHRoaXMubGluZVR5cGVzW2xpbmVOdW0gLSAxXSA9PT0gXCJUTUJsb2NrcXVvdGVcIlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgaHRtbEJsb2NrID0gaHRtbEJsb2NrVHlwZTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChodG1sQmxvY2sgIT09IGZhbHNlKSB7XG4gICAgICAgIGxpbmVUeXBlID0gXCJUTUhUTUxCbG9ja1wiO1xuICAgICAgICBsaW5lUmVwbGFjZW1lbnQgPSAnPHNwYW4gY2xhc3M9XCJUTUhUTUxDb250ZW50XCI+JDA8YnIgLz48L3NwYW4+JztcbiAgICAgICAgbGluZUNhcHR1cmUgPSBbdGhpcy5saW5lc1tsaW5lTnVtXV0gYXMgUmVnRXhwRXhlY0FycmF5O1xuXG4gICAgICAgIGlmIChodG1sQmxvY2suZW5kKSB7XG4gICAgICAgICAgaWYgKHRoaXMubGluZXNbbGluZU51bV0ubWF0Y2goaHRtbEJsb2NrLmVuZCkpIHtcbiAgICAgICAgICAgIGh0bWxCbG9jayA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBsaW5lTnVtID09PSB0aGlzLmxpbmVzLmxlbmd0aCAtIDEgfHxcbiAgICAgICAgICAgIHRoaXMubGluZXNbbGluZU51bSArIDFdLm1hdGNoKGxpbmVHcmFtbWFyLlRNQmxhbmtMaW5lLnJlZ2V4cClcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGh0bWxCbG9jayA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayBhbGwgcmVnZXhwcyBpZiB3ZSBoYXZlbid0IGFwcGxpZWQgb25lIG9mIHRoZSBjb2RlIGJsb2NrIHR5cGVzXG4gICAgICBpZiAobGluZVR5cGUgPT09IFwiVE1QYXJhXCIpIHtcbiAgICAgICAgZm9yIChsZXQgdHlwZSBpbiBsaW5lR3JhbW1hcikge1xuICAgICAgICAgIGlmIChsaW5lR3JhbW1hclt0eXBlXS5yZWdleHApIHtcbiAgICAgICAgICAgIGxldCBjYXB0dXJlID0gbGluZUdyYW1tYXJbdHlwZV0ucmVnZXhwLmV4ZWModGhpcy5saW5lc1tsaW5lTnVtXSk7XG4gICAgICAgICAgICBpZiAoY2FwdHVyZSkge1xuICAgICAgICAgICAgICBsaW5lVHlwZSA9IHR5cGU7XG4gICAgICAgICAgICAgIGxpbmVSZXBsYWNlbWVudCA9IGxpbmVHcmFtbWFyW3R5cGVdLnJlcGxhY2VtZW50O1xuICAgICAgICAgICAgICBsaW5lQ2FwdHVyZSA9IGNhcHR1cmU7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBJZiB3ZSd2ZSBvcGVuZWQgYSBjb2RlIGJsb2NrLCByZW1lbWJlciB0aGF0XG4gICAgICBpZiAobGluZVR5cGUgPT09IFwiVE1Db2RlRmVuY2VCYWNrdGlja09wZW5cIiB8fCBsaW5lVHlwZSA9PT0gXCJUTUNvZGVGZW5jZVRpbGRlT3BlblwiKSB7XG4gICAgICAgIGNvZGVCbG9ja1R5cGUgPSBsaW5lVHlwZTtcbiAgICAgICAgY29kZUJsb2NrU2VxTGVuZ3RoID0gbGluZUNhcHR1cmUuZ3JvdXBzIVtcInNlcVwiXS5sZW5ndGg7XG4gICAgICB9XG5cbiAgICAgIC8vIExpbmsgcmVmZXJlbmNlIGRlZmluaXRpb24gYW5kIGluZGVudGVkIGNvZGUgY2FuJ3QgaW50ZXJydXB0IGEgcGFyYWdyYXBoXG4gICAgICBpZiAoXG4gICAgICAgIChsaW5lVHlwZSA9PT0gXCJUTUluZGVudGVkQ29kZVwiIHx8IGxpbmVUeXBlID09PSBcIlRNTGlua1JlZmVyZW5jZURlZmluaXRpb25cIikgJiZcbiAgICAgICAgbGluZU51bSA+IDAgJiZcbiAgICAgICAgKHRoaXMubGluZVR5cGVzW2xpbmVOdW0gLSAxXSA9PT0gXCJUTVBhcmFcIiB8fFxuICAgICAgICAgIHRoaXMubGluZVR5cGVzW2xpbmVOdW0gLSAxXSA9PT0gXCJUTVVMXCIgfHxcbiAgICAgICAgICB0aGlzLmxpbmVUeXBlc1tsaW5lTnVtIC0gMV0gPT09IFwiVE1PTFwiIHx8XG4gICAgICAgICAgdGhpcy5saW5lVHlwZXNbbGluZU51bSAtIDFdID09PSBcIlRNQmxvY2txdW90ZVwiKVxuICAgICAgKSB7XG4gICAgICAgIGxpbmVUeXBlID0gXCJUTVBhcmFcIjtcbiAgICAgICAgbGluZUNhcHR1cmUgPSBbdGhpcy5saW5lc1tsaW5lTnVtXV0gYXMgUmVnRXhwRXhlY0FycmF5O1xuICAgICAgICBsaW5lUmVwbGFjZW1lbnQgPSBcIiQkMFwiO1xuICAgICAgfVxuXG4gICAgICAvLyBTZXRleHQgSDIgbWFya2VycyB0aGF0IGNhbiBhbHNvIGJlIGludGVycHJldGVkIGFzIGFuIGVtcHR5IGxpc3QgaXRlbSBzaG91bGQgYmUgcmVnYXJkZWQgYXMgc3VjaFxuICAgICAgaWYgKGxpbmVUeXBlID09PSBcIlRNU2V0ZXh0SDJNYXJrZXJcIikge1xuICAgICAgICBsZXQgY2FwdHVyZSA9IGxpbmVHcmFtbWFyLlRNVUwucmVnZXhwLmV4ZWModGhpcy5saW5lc1tsaW5lTnVtXSk7XG4gICAgICAgIGlmIChjYXB0dXJlKSB7XG4gICAgICAgICAgbGluZVR5cGUgPSBcIlRNVUxcIjtcbiAgICAgICAgICBsaW5lUmVwbGFjZW1lbnQgPSBsaW5lR3JhbW1hci5UTVVMLnJlcGxhY2VtZW50O1xuICAgICAgICAgIGxpbmVDYXB0dXJlID0gY2FwdHVyZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBTZXRleHQgaGVhZGluZ3MgYXJlIG9ubHkgdmFsaWQgaWYgcHJlY2VkZWQgYnkgYSBwYXJhZ3JhcGhcbiAgICAgIGlmIChsaW5lVHlwZSA9PT0gXCJUTVNldGV4dEgxTWFya2VyXCIgfHwgbGluZVR5cGUgPT09IFwiVE1TZXRleHRIMk1hcmtlclwiKSB7XG4gICAgICAgIGlmIChsaW5lTnVtID09PSAwIHx8IHRoaXMubGluZVR5cGVzW2xpbmVOdW0gLSAxXSAhPT0gXCJUTVBhcmFcIikge1xuICAgICAgICAgIGxldCBjYXB0dXJlID0gbGluZUdyYW1tYXIuVE1IUi5yZWdleHAuZXhlYyh0aGlzLmxpbmVzW2xpbmVOdW1dKTtcbiAgICAgICAgICBpZiAoY2FwdHVyZSkge1xuICAgICAgICAgICAgbGluZVR5cGUgPSBcIlRNSFJcIjtcbiAgICAgICAgICAgIGxpbmVDYXB0dXJlID0gY2FwdHVyZTtcbiAgICAgICAgICAgIGxpbmVSZXBsYWNlbWVudCA9IGxpbmVHcmFtbWFyLlRNSFIucmVwbGFjZW1lbnQ7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxpbmVUeXBlID0gXCJUTVBhcmFcIjtcbiAgICAgICAgICAgIGxpbmVDYXB0dXJlID0gW3RoaXMubGluZXNbbGluZU51bV1dIGFzIFJlZ0V4cEV4ZWNBcnJheTtcbiAgICAgICAgICAgIGxpbmVSZXBsYWNlbWVudCA9IFwiJCQwXCI7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxldCBoZWFkaW5nTGluZSA9IGxpbmVOdW0gLSAxO1xuICAgICAgICAgIGNvbnN0IGhlYWRpbmdMaW5lVHlwZSA9IGxpbmVUeXBlID09PSBcIlRNU2V0ZXh0SDFNYXJrZXJcIiA/IFwiVE1TZXRleHRIMVwiIDogXCJUTVNldGV4dEgyXCI7XG4gICAgICAgICAgZG8ge1xuICAgICAgICAgICAgaWYgKHRoaXMubGluZVR5cGVzW2hlYWRpbmdMaW5lXSAhPT0gaGVhZGluZ0xpbmVUeXBlKSB7XG4gICAgICAgICAgICAgIHRoaXMubGluZVR5cGVzW2hlYWRpbmdMaW5lXSA9IGhlYWRpbmdMaW5lVHlwZTtcbiAgICAgICAgICAgICAgdGhpcy5saW5lRGlydHlbaGVhZGluZ0xpbmVdID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMubGluZVJlcGxhY2VtZW50c1toZWFkaW5nTGluZV0gPSBcIiQkMFwiO1xuICAgICAgICAgICAgdGhpcy5saW5lQ2FwdHVyZXNbaGVhZGluZ0xpbmVdID0gW3RoaXMubGluZXNbaGVhZGluZ0xpbmVdXSBhcyBSZWdFeHBFeGVjQXJyYXk7XG4gICAgICAgICAgICBoZWFkaW5nTGluZS0tO1xuICAgICAgICAgIH0gd2hpbGUgKGhlYWRpbmdMaW5lID49IDAgJiYgdGhpcy5saW5lVHlwZXNbaGVhZGluZ0xpbmVdID09PSBcIlRNUGFyYVwiKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5saW5lVHlwZXNbbGluZU51bV0gIT09IGxpbmVUeXBlKSB7XG4gICAgICAgIHRoaXMubGluZVR5cGVzW2xpbmVOdW1dID0gbGluZVR5cGU7XG4gICAgICAgIHRoaXMubGluZURpcnR5W2xpbmVOdW1dID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHRoaXMubGluZVJlcGxhY2VtZW50c1tsaW5lTnVtXSA9IGxpbmVSZXBsYWNlbWVudDtcbiAgICAgIHRoaXMubGluZUNhcHR1cmVzW2xpbmVOdW1dID0gbGluZUNhcHR1cmU7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldFNlbGVjdGlvbihnZXRBbmNob3I6IGJvb2xlYW4gPSBmYWxzZSk6IFBvc2l0aW9uIHwgbnVsbCB7XG4gICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICAgIGxldCBzdGFydE5vZGUgPSBnZXRBbmNob3IgPyBzZWxlY3Rpb24hLmFuY2hvck5vZGUgOiBzZWxlY3Rpb24hLmZvY3VzTm9kZTtcbiAgICBpZiAoIXN0YXJ0Tm9kZSkgcmV0dXJuIG51bGw7XG4gICAgbGV0IG9mZnNldCA9IGdldEFuY2hvciA/IHNlbGVjdGlvbiEuYW5jaG9yT2Zmc2V0IDogc2VsZWN0aW9uIS5mb2N1c09mZnNldDtcbiAgICBpZiAoc3RhcnROb2RlID09PSB0aGlzLmUpIHtcbiAgICAgIGlmIChvZmZzZXQgPCB0aGlzLmxpbmVzLmxlbmd0aClcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICByb3c6IG9mZnNldCxcbiAgICAgICAgICBjb2w6IDAsXG4gICAgICAgIH07XG4gICAgICByZXR1cm4ge1xuICAgICAgICByb3c6IG9mZnNldCAtIDEsXG4gICAgICAgIGNvbDogdGhpcy5saW5lc1tvZmZzZXQgLSAxXS5sZW5ndGgsXG4gICAgICB9O1xuICAgIH1cblxuICAgIGxldCBjb2wgPSB0aGlzLmNvbXB1dGVDb2x1bW4oc3RhcnROb2RlLCBvZmZzZXQpO1xuICAgIGlmIChjb2wgPT09IG51bGwpIHJldHVybiBudWxsO1xuXG4gICAgbGV0IG5vZGUgPSBzdGFydE5vZGU7XG4gICAgd2hpbGUgKG5vZGUucGFyZW50RWxlbWVudCAhPT0gdGhpcy5lKSB7XG4gICAgICBub2RlID0gbm9kZS5wYXJlbnRFbGVtZW50ITtcbiAgICB9XG5cbiAgICBsZXQgcm93ID0gMDtcbiAgICAvLyBJZiB0aGUgbm9kZSBkb2Vzbid0IGhhdmUgYSBwcmV2aW91cyBzaWJsaW5nLCBpdCBtdXN0IGJlIHRoZSBmaXJzdCBsaW5lXG4gICAgaWYgKG5vZGUucHJldmlvdXNTaWJsaW5nKSB7XG4gICAgICBjb25zdCBjdXJyZW50TGluZU51bURhdGEgPSAobm9kZSBhcyBIVE1MRWxlbWVudCkuZGF0YXNldD8ubGluZU51bTtcbiAgICAgIGNvbnN0IHByZXZpb3VzTGluZU51bURhdGEgPSAobm9kZS5wcmV2aW91c1NpYmxpbmcgYXMgSFRNTEVsZW1lbnQpLmRhdGFzZXQ/LmxpbmVOdW07XG5cbiAgICAgIGlmIChjdXJyZW50TGluZU51bURhdGEgJiYgcHJldmlvdXNMaW5lTnVtRGF0YSkge1xuICAgICAgICBjb25zdCBjdXJyZW50TGluZU51bSA9IHBhcnNlSW50KGN1cnJlbnRMaW5lTnVtRGF0YSk7XG4gICAgICAgIGNvbnN0IHByZXZpb3VzTGluZU51bSA9IHBhcnNlSW50KHByZXZpb3VzTGluZU51bURhdGEpO1xuICAgICAgICBpZiAoY3VycmVudExpbmVOdW0gPT09IHByZXZpb3VzTGluZU51bSArIDEpIHtcbiAgICAgICAgICByb3cgPSBjdXJyZW50TGluZU51bTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBJZiB0aGUgY3VycmVudCBsaW5lIGlzIE5PVCB0aGUgcHJldmlvdXMgbGluZSArIDEsIHRoZW4gZWl0aGVyIFxuICAgICAgICAgIC8vIHRoZSBjdXJyZW50IGxpbmUgZ290IHNwbGl0IGluIHR3byBvciBtZXJnZWQgd2l0aCB0aGUgcHJldmlvdXMgbGluZVxuICAgICAgICAgIC8vIEVpdGhlciB3YXksIHdlIG5lZWQgdG8gcmVjYWxjdWxhdGUgdGhlIHJvdyBudW1iZXJcbiAgICAgICAgICB3aGlsZSAobm9kZS5wcmV2aW91c1NpYmxpbmcpIHtcbiAgICAgICAgICAgIHJvdysrO1xuICAgICAgICAgICAgbm9kZSA9IG5vZGUucHJldmlvdXNTaWJsaW5nO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBcbiAgICByZXR1cm4geyByb3c6IHJvdywgY29sOiBjb2wgfTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRTZWxlY3Rpb24oZm9jdXM6IFBvc2l0aW9uLCBhbmNob3I6IFBvc2l0aW9uIHwgbnVsbCA9IG51bGwpOiB2b2lkIHtcbiAgICBpZiAoIWZvY3VzKSByZXR1cm47XG5cbiAgICBsZXQgeyBub2RlOiBmb2N1c05vZGUsIG9mZnNldDogZm9jdXNPZmZzZXQgfSA9IHRoaXMuY29tcHV0ZU5vZGVBbmRPZmZzZXQoXG4gICAgICBmb2N1cy5yb3csXG4gICAgICBmb2N1cy5jb2wsXG4gICAgICBhbmNob3IgPyBhbmNob3Iucm93ID09PSBmb2N1cy5yb3cgJiYgYW5jaG9yLmNvbCA+IGZvY3VzLmNvbCA6IGZhbHNlXG4gICAgKTtcbiAgICBsZXQgYW5jaG9yTm9kZSA9IG51bGwsXG4gICAgICBhbmNob3JPZmZzZXQgPSBudWxsO1xuICAgIGlmIChhbmNob3IgJiYgKGFuY2hvci5yb3cgIT09IGZvY3VzLnJvdyB8fCBhbmNob3IuY29sICE9PSBmb2N1cy5jb2wpKSB7XG4gICAgICBsZXQgeyBub2RlLCBvZmZzZXQgfSA9IHRoaXMuY29tcHV0ZU5vZGVBbmRPZmZzZXQoXG4gICAgICAgIGFuY2hvci5yb3csXG4gICAgICAgIGFuY2hvci5jb2wsXG4gICAgICAgIGZvY3VzLnJvdyA9PT0gYW5jaG9yLnJvdyAmJiBmb2N1cy5jb2wgPiBhbmNob3IuY29sXG4gICAgICApO1xuICAgICAgYW5jaG9yTm9kZSA9IG5vZGU7XG4gICAgICBhbmNob3JPZmZzZXQgPSBvZmZzZXQ7XG4gICAgfVxuXG4gICAgbGV0IHdpbmRvd1NlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgICB3aW5kb3dTZWxlY3Rpb24hLnNldEJhc2VBbmRFeHRlbnQoXG4gICAgICBmb2N1c05vZGUsXG4gICAgICBmb2N1c09mZnNldCxcbiAgICAgIGFuY2hvck5vZGUgfHwgZm9jdXNOb2RlLFxuICAgICAgYW5jaG9yTm9kZSA/IGFuY2hvck9mZnNldCEgOiBmb2N1c09mZnNldFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgcmVzdG9yZUxhc3RTZWxlY3Rpb24oKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMubGFzdFNlbGVjdGlvbiAmJiB0aGlzLmxhc3RTZWxlY3Rpb24uZm9jdXMpIHtcbiAgICAgIHRoaXMuc2V0U2VsZWN0aW9uKHRoaXMubGFzdFNlbGVjdGlvbi5mb2N1cywgdGhpcy5sYXN0U2VsZWN0aW9uLmFuY2hvcik7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHVibGljIHBhc3RlKHRleHQ6IHN0cmluZywgYW5jaG9yOiBQb3NpdGlvbiB8IG51bGwgPSBudWxsLCBmb2N1czogUG9zaXRpb24gfCBudWxsID0gbnVsbCk6IHZvaWQge1xuICAgIGlmICghYW5jaG9yKSBhbmNob3IgPSB0aGlzLmdldFNlbGVjdGlvbih0cnVlKTtcbiAgICBpZiAoIWZvY3VzKSBmb2N1cyA9IHRoaXMuZ2V0U2VsZWN0aW9uKGZhbHNlKTtcbiAgICBsZXQgYmVnaW5uaW5nOiBQb3NpdGlvbiwgZW5kOiBQb3NpdGlvbjtcbiAgICBpZiAoIWZvY3VzKSB7XG4gICAgICBmb2N1cyA9IHtcbiAgICAgICAgcm93OiB0aGlzLmxpbmVzLmxlbmd0aCAtIDEsXG4gICAgICAgIGNvbDogdGhpcy5saW5lc1t0aGlzLmxpbmVzLmxlbmd0aCAtIDFdLmxlbmd0aCxcbiAgICAgIH07XG4gICAgfVxuICAgIGlmICghYW5jaG9yKSB7XG4gICAgICBhbmNob3IgPSBmb2N1cztcbiAgICB9XG4gICAgaWYgKFxuICAgICAgYW5jaG9yLnJvdyA8IGZvY3VzLnJvdyB8fFxuICAgICAgKGFuY2hvci5yb3cgPT09IGZvY3VzLnJvdyAmJiBhbmNob3IuY29sIDw9IGZvY3VzLmNvbClcbiAgICApIHtcbiAgICAgIGJlZ2lubmluZyA9IGFuY2hvcjtcbiAgICAgIGVuZCA9IGZvY3VzO1xuICAgIH0gZWxzZSB7XG4gICAgICBiZWdpbm5pbmcgPSBmb2N1cztcbiAgICAgIGVuZCA9IGFuY2hvcjtcbiAgICB9XG4gICAgbGV0IGluc2VydGVkTGluZXMgPSB0ZXh0LnNwbGl0KC8oPzpcXHJcXG58XFxyfFxcbikvKTtcbiAgICBsZXQgbGluZUJlZm9yZSA9IHRoaXMubGluZXNbYmVnaW5uaW5nLnJvd10uc3Vic3RyKDAsIGJlZ2lubmluZy5jb2wpO1xuICAgIGxldCBsaW5lRW5kID0gdGhpcy5saW5lc1tlbmQucm93XS5zdWJzdHIoZW5kLmNvbCk7XG4gICAgaW5zZXJ0ZWRMaW5lc1swXSA9IGxpbmVCZWZvcmUuY29uY2F0KGluc2VydGVkTGluZXNbMF0pO1xuICAgIGxldCBlbmRDb2xQb3MgPSBpbnNlcnRlZExpbmVzW2luc2VydGVkTGluZXMubGVuZ3RoIC0gMV0ubGVuZ3RoO1xuICAgIGluc2VydGVkTGluZXNbaW5zZXJ0ZWRMaW5lcy5sZW5ndGggLSAxXSA9IGluc2VydGVkTGluZXNbaW5zZXJ0ZWRMaW5lcy5sZW5ndGggLSAxXS5jb25jYXQobGluZUVuZCk7XG4gICAgdGhpcy5zcGxpY2VMaW5lcyhiZWdpbm5pbmcucm93LCAxICsgZW5kLnJvdyAtIGJlZ2lubmluZy5yb3csIGluc2VydGVkTGluZXMpO1xuICAgIGZvY3VzLnJvdyA9IGJlZ2lubmluZy5yb3cgKyBpbnNlcnRlZExpbmVzLmxlbmd0aCAtIDE7XG4gICAgZm9jdXMuY29sID0gZW5kQ29sUG9zO1xuICAgIHRoaXMudXBkYXRlRm9ybWF0dGluZygpO1xuICAgIHRoaXMuc2V0U2VsZWN0aW9uKGZvY3VzKTtcbiAgICB0aGlzLmZpcmVDaGFuZ2UoKTtcbiAgfVxuXG4gIHB1YmxpYyB3cmFwU2VsZWN0aW9uKHByZTogc3RyaW5nLCBwb3N0OiBzdHJpbmcsIGZvY3VzOiBQb3NpdGlvbiB8IG51bGwgPSBudWxsLCBhbmNob3I6IFBvc2l0aW9uIHwgbnVsbCA9IG51bGwpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaXNSZXN0b3JpbmdIaXN0b3J5KSB0aGlzLnB1c2hIaXN0b3J5KCk7XG4gICAgaWYgKCFmb2N1cykgZm9jdXMgPSB0aGlzLmdldFNlbGVjdGlvbihmYWxzZSk7XG4gICAgaWYgKCFhbmNob3IpIGFuY2hvciA9IHRoaXMuZ2V0U2VsZWN0aW9uKHRydWUpO1xuICAgIGlmICghZm9jdXMgfHwgIWFuY2hvciB8fCBmb2N1cy5yb3cgIT09IGFuY2hvci5yb3cpIHJldHVybjtcbiAgICB0aGlzLmxpbmVEaXJ0eVtmb2N1cy5yb3ddID0gdHJ1ZTtcblxuICAgIGNvbnN0IHN0YXJ0Q29sID0gZm9jdXMuY29sIDwgYW5jaG9yLmNvbCA/IGZvY3VzLmNvbCA6IGFuY2hvci5jb2w7XG4gICAgY29uc3QgZW5kQ29sID0gZm9jdXMuY29sIDwgYW5jaG9yLmNvbCA/IGFuY2hvci5jb2wgOiBmb2N1cy5jb2w7XG4gICAgY29uc3QgbGVmdCA9IHRoaXMubGluZXNbZm9jdXMucm93XS5zdWJzdHIoMCwgc3RhcnRDb2wpLmNvbmNhdChwcmUpO1xuICAgIGNvbnN0IG1pZCA9IGVuZENvbCA9PT0gc3RhcnRDb2wgPyBcIlwiIDogdGhpcy5saW5lc1tmb2N1cy5yb3ddLnN1YnN0cihzdGFydENvbCwgZW5kQ29sIC0gc3RhcnRDb2wpO1xuICAgIGNvbnN0IHJpZ2h0ID0gcG9zdC5jb25jYXQodGhpcy5saW5lc1tmb2N1cy5yb3ddLnN1YnN0cihlbmRDb2wpKTtcbiAgICB0aGlzLmxpbmVzW2ZvY3VzLnJvd10gPSBsZWZ0LmNvbmNhdChtaWQsIHJpZ2h0KTtcbiAgICBhbmNob3IuY29sID0gbGVmdC5sZW5ndGg7XG4gICAgZm9jdXMuY29sID0gYW5jaG9yLmNvbCArIG1pZC5sZW5ndGg7XG5cbiAgICB0aGlzLnVwZGF0ZUZvcm1hdHRpbmcoKTtcbiAgICB0aGlzLnNldFNlbGVjdGlvbihmb2N1cywgYW5jaG9yKTtcbiAgfVxuXG4gIHB1YmxpYyBhZGRFdmVudExpc3RlbmVyPFQgZXh0ZW5kcyBFdmVudFR5cGU+KFxuICAgIHR5cGU6IFQsXG4gICAgbGlzdGVuZXI6IFQgZXh0ZW5kcyAnY2hhbmdlJyA/IEV2ZW50SGFuZGxlcjxDaGFuZ2VFdmVudD4gOlxuICAgICAgICAgICAgIFQgZXh0ZW5kcyAnc2VsZWN0aW9uJyA/IEV2ZW50SGFuZGxlcjxTZWxlY3Rpb25FdmVudD4gOlxuICAgICAgICAgICAgIFQgZXh0ZW5kcyAnZHJvcCcgPyBFdmVudEhhbmRsZXI8RHJvcEV2ZW50PiA6IG5ldmVyXG4gICk6IHZvaWQge1xuICAgIGlmICh0eXBlLm1hdGNoKC9eKD86Y2hhbmdlfGlucHV0KSQvaSkpIHtcbiAgICAgIHRoaXMubGlzdGVuZXJzLmNoYW5nZS5wdXNoKGxpc3RlbmVyIGFzIEV2ZW50SGFuZGxlcjxDaGFuZ2VFdmVudD4pO1xuICAgIH1cbiAgICBpZiAodHlwZS5tYXRjaCgvXig/OnNlbGVjdGlvbnxzZWxlY3Rpb25jaGFuZ2UpJC9pKSkge1xuICAgICAgdGhpcy5saXN0ZW5lcnMuc2VsZWN0aW9uLnB1c2gobGlzdGVuZXIgYXMgRXZlbnRIYW5kbGVyPFNlbGVjdGlvbkV2ZW50Pik7XG4gICAgfVxuICAgIGlmICh0eXBlLm1hdGNoKC9eKD86ZHJvcCkkL2kpKSB7XG4gICAgICB0aGlzLmxpc3RlbmVycy5kcm9wLnB1c2gobGlzdGVuZXIgYXMgRXZlbnRIYW5kbGVyPERyb3BFdmVudD4pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZmlyZUNoYW5nZSgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMudGV4dGFyZWEgJiYgIXRoaXMubGlzdGVuZXJzLmNoYW5nZS5sZW5ndGgpIHJldHVybjtcbiAgICBjb25zdCBjb250ZW50ID0gdGhpcy5nZXRDb250ZW50KCk7XG4gICAgaWYgKHRoaXMudGV4dGFyZWEpIHRoaXMudGV4dGFyZWEudmFsdWUgPSBjb250ZW50O1xuICAgIGZvciAobGV0IGxpc3RlbmVyIG9mIHRoaXMubGlzdGVuZXJzLmNoYW5nZSkge1xuICAgICAgbGlzdGVuZXIoe1xuICAgICAgICBjb250ZW50OiBjb250ZW50LFxuICAgICAgICBsaW5lc0RpcnR5OiBbLi4udGhpcy5saW5lRGlydHldLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGJlZm9yZWlucHV0IGhhbmRsZXIsIGV4Y2x1c2l2ZWx5IHRvIGhhbmRsZSBpbnNlcnRQYXJhZ3JhcGggYW5kXG4gICAqIGluc2VydExpbmVCcmVhayBldmVudHMuIFRoZXNlIHVzZWQgdG8gYmUgaGFuZGxlZCBpbiB0aGUgaW5wdXQgZXZlbnQsXG4gICAqIGJ1dCB0aGF0IGNhdXNlZCBpc3N1ZXMgd2l0aCBGaXJlZm94IHdoZXJlIHRoZSBpbnB1dCBldmVudCB3b3VsZCBiZVxuICAgKiBzb21ldGltZXMgbm90IGJlIGZpcmVkIGZvciB0aGVzZSBpbnB1dCB0eXBlcy5cbiAgICogQHBhcmFtIGV2ZW50IFRoZSBpbnB1dCBldmVudFxuICAgKiBAcmV0dXJucyBub3RoaW5nXG4gICAqL1xuICBwcml2YXRlIGhhbmRsZUJlZm9yZUlucHV0RXZlbnQoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgYmVmb3JlSW5wdXRFdmVudCA9IGV2ZW50IGFzIElucHV0RXZlbnQ7XG4gICAgaWYgKFxuICAgICAgYmVmb3JlSW5wdXRFdmVudC5pbnB1dFR5cGUgIT09IFwiaW5zZXJ0UGFyYWdyYXBoXCIgJiZcbiAgICAgIGJlZm9yZUlucHV0RXZlbnQuaW5wdXRUeXBlICE9PSBcImluc2VydExpbmVCcmVha1wiXG4gICAgKSByZXR1cm47XG4gICAgaWYgKCF0aGlzLmlzUmVzdG9yaW5nSGlzdG9yeSkgdGhpcy5wdXNoSGlzdG9yeSgpO1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy5jbGVhckRpcnR5RmxhZygpO1xuXG4gICAgY29uc3QgZm9jdXMgPSB0aGlzLmdldFNlbGVjdGlvbigpO1xuICAgIGNvbnN0IGFuY2hvciA9IHRoaXMuZ2V0U2VsZWN0aW9uKHRydWUpO1xuXG4gICAgaWYgKCFmb2N1cyB8fCAhYW5jaG9yKSByZXR1cm47XG4gICAgXG4gICAgLy8gSWYgZm9jdXMgYW5kIGFuY2hvciBhcmUgaW4gZGlmZmVyZW50IGxpbmVzLCBzaW1wbHkgcmVtb3ZlIGV2ZXJ5dGhpbmcgXG4gICAgLy8gYWZ0ZXIgdGhlIGJlZ2lubmluZyBvZiB0aGUgc2VsZWN0aW9uIGFuZCBiZWZvcmUgdGhlIGVuZCBvZiB0aGUgc2VsZWN0aW9uXG4gICAgLy8gYW5kIHJlbW92ZSBhbnkgbGluZXMgaW4gYmV0d2VlblxuICAgIGlmIChmb2N1cy5yb3cgIT09IGFuY2hvci5yb3cpIHtcbiAgICAgIGNvbnN0IGJlZ2lubmluZyA9IGZvY3VzLnJvdyA8IGFuY2hvci5yb3cgPyBmb2N1cyA6IGFuY2hvcjtcbiAgICAgIGNvbnN0IGVuZCA9IGZvY3VzLnJvdyA8IGFuY2hvci5yb3cgPyBhbmNob3IgOiBmb2N1cztcbiAgICAgIHRoaXMubGluZXNbYmVnaW5uaW5nLnJvd10gPSB0aGlzLmxpbmVzW2JlZ2lubmluZy5yb3ddLnN1YnN0cmluZygwLCBiZWdpbm5pbmcuY29sKTtcbiAgICAgIHRoaXMubGluZXNbZW5kLnJvd10gPSB0aGlzLmxpbmVzW2VuZC5yb3ddLnN1YnN0cmluZyhlbmQuY29sKTtcbiAgICAgIHRoaXMuc3BsaWNlTGluZXMoYmVnaW5uaW5nLnJvdyArIDEsIGVuZC5yb3cgLSBiZWdpbm5pbmcucm93IC0gMSk7XG4gICAgICBmb2N1cy5yb3cgPSBiZWdpbm5pbmcucm93ICsgMTtcbiAgICAgIGZvY3VzLmNvbCA9IDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBjb250aW51YWJsZVR5cGU6IHN0cmluZyB8IGZhbHNlID0gZmFsc2U7XG4gICAgICBzd2l0Y2ggKHRoaXMubGluZVR5cGVzW2ZvY3VzLnJvd10pIHtcbiAgICAgICAgY2FzZSBcIlRNVUxcIjpcbiAgICAgICAgICBjb250aW51YWJsZVR5cGUgPSBcIlRNVUxcIjtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIlRNT0xcIjpcbiAgICAgICAgICBjb250aW51YWJsZVR5cGUgPSBcIlRNT0xcIjtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIlRNSW5kZW50ZWRDb2RlXCI6XG4gICAgICAgICAgY29udGludWFibGVUeXBlID0gXCJUTUluZGVudGVkQ29kZVwiO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuIFxuICAgICAgY29uc3QgbGluZUJlZm9yZUJyZWFrID0gdGhpcy5saW5lc1tmb2N1cy5yb3ddLnN1YnN0cmluZygwLCBmb2N1cy5jb2wgPD0gYW5jaG9yLmNvbCA/IGZvY3VzLmNvbCA6IGFuY2hvci5jb2wpO1xuICAgICAgY29uc3QgbGluZUFmdGVyQnJlYWsgPSB0aGlzLmxpbmVzW2ZvY3VzLnJvd10uc3Vic3RyaW5nKGZvY3VzLmNvbCA8PSBhbmNob3IuY29sID8gYW5jaG9yLmNvbCA6IGZvY3VzLmNvbCk7XG4gICAgICB0aGlzLnNwbGljZUxpbmVzKGZvY3VzLnJvdywgMSwgW2xpbmVCZWZvcmVCcmVhaywgbGluZUFmdGVyQnJlYWtdKTtcblxuICAgICAgZm9jdXMucm93ICs9IDE7XG4gICAgICBmb2N1cy5jb2wgPSAwO1xuXG4gICAgICBpZiAoY29udGludWFibGVUeXBlKSB7XG4gICAgICAgIGxldCBjYXB0dXJlID0gbGluZUdyYW1tYXJbY29udGludWFibGVUeXBlXS5yZWdleHAuZXhlYyh0aGlzLmxpbmVzW2ZvY3VzLnJvdyAtIDFdKTtcbiAgICAgICAgaWYgKGNhcHR1cmUpIHtcbiAgICAgICAgICBpZiAoY2FwdHVyZVsyXSkge1xuICAgICAgICAgICAgaWYgKGNvbnRpbnVhYmxlVHlwZSA9PT0gXCJUTU9MXCIpIHtcbiAgICAgICAgICAgICAgY2FwdHVyZVsxXSA9IGNhcHR1cmVbMV0ucmVwbGFjZSgvXFxkezEsOX0vLCAocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChwYXJzZUludChyZXN1bHQpICsgMSkudG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmxpbmVzW2ZvY3VzLnJvd10gPSBgJHtjYXB0dXJlWzFdfSR7dGhpcy5saW5lc1tmb2N1cy5yb3ddfWA7XG4gICAgICAgICAgICB0aGlzLmxpbmVEaXJ0eVtmb2N1cy5yb3ddID0gdHJ1ZTtcbiAgICAgICAgICAgIGZvY3VzLmNvbCA9IGNhcHR1cmVbMV0ubGVuZ3RoO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmxpbmVzW2ZvY3VzLnJvdyAtIDFdID0gXCJcIjtcbiAgICAgICAgICAgIHRoaXMubGluZURpcnR5W2ZvY3VzLnJvdyAtIDFdID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy51cGRhdGVGb3JtYXR0aW5nKCk7XG4gICAgdGhpcy5zZXRTZWxlY3Rpb24oZm9jdXMpO1xuXG4gICAgLy8gU2Nyb2xsIHRoZSBlbGVtZW50IGNvbnRhaW5pbmcgdGhlIHNlbGVjdGlvbiBpbnRvIHZpZXdcbiAgICBpZiAoZm9jdXMgJiYgZm9jdXMucm93IDwgdGhpcy5saW5lRWxlbWVudHMubGVuZ3RoKSB7XG4gICAgICAodGhpcy5saW5lRWxlbWVudHNbZm9jdXMucm93XSBhcyBIVE1MRWxlbWVudCkuc2Nyb2xsSW50b1ZpZXcoe1xuICAgICAgICBibG9jazogJ25lYXJlc3QnLFxuICAgICAgICBpbmxpbmU6ICduZWFyZXN0J1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5maXJlQ2hhbmdlKCk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUlucHV0RXZlbnQoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgaW5wdXRFdmVudCA9IGV2ZW50IGFzIElucHV0RXZlbnQ7XG4gICAgaWYgKGlucHV0RXZlbnQuaW5wdXRUeXBlID09PSBcImluc2VydENvbXBvc2l0aW9uVGV4dFwiKSByZXR1cm47XG4gICAgaWYgKCF0aGlzLmlzUmVzdG9yaW5nSGlzdG9yeSkgdGhpcy5wdXNoSGlzdG9yeSgpO1xuXG4gICAgbGV0IGZvY3VzID0gdGhpcy5nZXRTZWxlY3Rpb24oKTtcblxuICAgIGlmICgoaW5wdXRFdmVudC5pbnB1dFR5cGUgPT09IFwiaW5zZXJ0UGFyYWdyYXBoXCIgfHwgaW5wdXRFdmVudC5pbnB1dFR5cGUgPT09IFwiaW5zZXJ0TGluZUJyZWFrXCIpICYmIGZvY3VzKSB7XG4gICAgICAvLyBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4gc2luY2UgdGhlc2UgYXJlIGhhbmRsZWQgYnkgdGhlIGJlZm9yZWlucHV0IGhhbmRsZXJcbiAgICAgIHJldHVybjtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCF0aGlzLmUhLmZpcnN0Q2hpbGQpIHtcbiAgICAgICAgdGhpcy5lIS5pbm5lckhUTUwgPSAnPGRpdiBjbGFzcz1cIlRNQmxhbmtMaW5lXCI+PGJyPjwvZGl2Pic7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmZpeE5vZGVIaWVyYXJjaHkoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMudXBkYXRlTGluZUNvbnRlbnRzQW5kRm9ybWF0dGluZygpO1xuICAgIH1cbiAgICBpZiAoZm9jdXMpIHtcbiAgICAgIHRoaXMuc2V0U2VsZWN0aW9uKGZvY3VzKTtcbiAgICB9XG5cbiAgICB0aGlzLmZpcmVDaGFuZ2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlU2VsZWN0aW9uQ2hhbmdlRXZlbnQoX2U6IEV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5maXJlU2VsZWN0aW9uKCk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZVBhc3RlKGV2ZW50OiBDbGlwYm9hcmRFdmVudCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5pc1Jlc3RvcmluZ0hpc3RvcnkpIHRoaXMucHVzaEhpc3RvcnkoKTtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgbGV0IHRleHQgPSAoZXZlbnQgYXMgYW55KS5jbGlwYm9hcmREYXRhLmdldERhdGEoXCJ0ZXh0L3BsYWluXCIpO1xuICAgIHRoaXMucGFzdGUodGV4dCk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZURyb3AoZXZlbnQ6IERyYWdFdmVudCk6IHZvaWQge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy5maXJlRHJvcChldmVudC5kYXRhVHJhbnNmZXIhKTtcbiAgfVxuXG4gIHByaXZhdGUgcHJvY2Vzc0lubGluZVN0eWxlcyhvcmlnaW5hbFN0cmluZzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBsZXQgcHJvY2Vzc2VkID0gXCJcIjtcbiAgICBsZXQgc3RhY2s6IEFycmF5PHtkZWxpbWl0ZXI6IHN0cmluZywgZGVsaW1TdHJpbmc6IHN0cmluZywgY291bnQ6IG51bWJlciwgb3V0cHV0OiBzdHJpbmd9PiA9IFtdO1xuICAgIGxldCBvZmZzZXQgPSAwO1xuICAgIGxldCBzdHJpbmcgPSBvcmlnaW5hbFN0cmluZztcblxuICAgIG91dGVyOiB3aGlsZSAoc3RyaW5nKSB7XG4gICAgICAvLyBQcm9jZXNzIHNpbXBsZSBydWxlcyAobm9uLWRlbGltaXRlcilcbiAgICAgIGZvciAobGV0IHJ1bGUgb2YgW1wiZXNjYXBlXCIsIFwiY29kZVwiLCBcImF1dG9saW5rXCIsIFwiaHRtbFwiXSkge1xuICAgICAgICBpZiAodGhpcy5tZXJnZWRJbmxpbmVHcmFtbWFyW3J1bGVdKSB7XG4gICAgICAgICAgbGV0IGNhcCA9IHRoaXMubWVyZ2VkSW5saW5lR3JhbW1hcltydWxlXS5yZWdleHAuZXhlYyhzdHJpbmcpO1xuICAgICAgICAgIGlmIChjYXApIHtcbiAgICAgICAgICAgIHN0cmluZyA9IHN0cmluZy5zdWJzdHIoY2FwWzBdLmxlbmd0aCk7XG4gICAgICAgICAgICBvZmZzZXQgKz0gY2FwWzBdLmxlbmd0aDtcbiAgICAgICAgICAgIHByb2Nlc3NlZCArPSB0aGlzLm1lcmdlZElubGluZUdyYW1tYXJbcnVsZV0ucmVwbGFjZW1lbnQucmVwbGFjZSgvXFwkKFsxLTldKS9nLCAoc3RyLCBwMSkgPT4gaHRtbGVzY2FwZShjYXBbcDFdKSk7XG4gICAgICAgICAgICBjb250aW51ZSBvdXRlcjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gUHJvY2VzcyBjdXN0b20gaW5saW5lIGdyYW1tYXIgcnVsZXNcbiAgICAgIGZvciAobGV0IHJ1bGUgaW4gdGhpcy5jdXN0b21JbmxpbmVHcmFtbWFyKSB7XG4gICAgICAgIGlmIChydWxlICE9PSBcImVzY2FwZVwiICYmIHJ1bGUgIT09IFwiY29kZVwiICYmIHJ1bGUgIT09IFwiYXV0b2xpbmtcIiAmJiBydWxlICE9PSBcImh0bWxcIiAmJiBydWxlICE9PSBcImxpbmtPcGVuXCIgJiYgcnVsZSAhPT0gXCJpbWFnZU9wZW5cIiAmJiBydWxlICE9PSBcImxpbmtMYWJlbFwiICYmIHJ1bGUgIT09IFwiZGVmYXVsdFwiKSB7XG4gICAgICAgICAgbGV0IGNhcCA9IHRoaXMubWVyZ2VkSW5saW5lR3JhbW1hcltydWxlXS5yZWdleHAuZXhlYyhzdHJpbmcpO1xuICAgICAgICAgIGlmIChjYXApIHtcbiAgICAgICAgICAgIHN0cmluZyA9IHN0cmluZy5zdWJzdHIoY2FwWzBdLmxlbmd0aCk7XG4gICAgICAgICAgICBvZmZzZXQgKz0gY2FwWzBdLmxlbmd0aDtcbiAgICAgICAgICAgIHByb2Nlc3NlZCArPSB0aGlzLm1lcmdlZElubGluZUdyYW1tYXJbcnVsZV0ucmVwbGFjZW1lbnQucmVwbGFjZSgvXFwkKFsxLTldKS9nLCAoc3RyLCBwMSkgPT4gaHRtbGVzY2FwZShjYXBbcDFdKSk7XG4gICAgICAgICAgICBjb250aW51ZSBvdXRlcjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgZm9yIGxpbmtzIC8gaW1hZ2VzXG4gICAgICBsZXQgcG90ZW50aWFsTGluayA9IHN0cmluZy5tYXRjaCh0aGlzLm1lcmdlZElubGluZUdyYW1tYXIubGlua09wZW4ucmVnZXhwKTtcbiAgICAgIGxldCBwb3RlbnRpYWxJbWFnZSA9IHN0cmluZy5tYXRjaCh0aGlzLm1lcmdlZElubGluZUdyYW1tYXIuaW1hZ2VPcGVuLnJlZ2V4cCk7XG4gICAgICBpZiAocG90ZW50aWFsSW1hZ2UgfHwgcG90ZW50aWFsTGluaykge1xuICAgICAgICBsZXQgcmVzdWx0ID0gdGhpcy5wYXJzZUxpbmtPckltYWdlKHN0cmluZywgISFwb3RlbnRpYWxJbWFnZSk7XG4gICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICBwcm9jZXNzZWQgPSBgJHtwcm9jZXNzZWR9JHtyZXN1bHQub3V0cHV0fWA7XG4gICAgICAgICAgc3RyaW5nID0gc3RyaW5nLnN1YnN0cihyZXN1bHQuY2hhckNvdW50KTtcbiAgICAgICAgICBvZmZzZXQgKz0gcmVzdWx0LmNoYXJDb3VudDtcbiAgICAgICAgICBjb250aW51ZSBvdXRlcjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayBmb3IgZW0gLyBzdHJvbmcgZGVsaW1pdGVyc1xuICAgICAgbGV0IGNhcCA9IC8oXlxcKispfCheXyspLy5leGVjKHN0cmluZyk7XG4gICAgICBpZiAoY2FwKSB7XG4gICAgICAgIGxldCBkZWxpbUNvdW50ID0gY2FwWzBdLmxlbmd0aDtcbiAgICAgICAgY29uc3QgZGVsaW1TdHJpbmcgPSBjYXBbMF07XG4gICAgICAgIGNvbnN0IGN1cnJlbnREZWxpbWl0ZXIgPSBjYXBbMF1bMF07XG5cbiAgICAgICAgc3RyaW5nID0gc3RyaW5nLnN1YnN0cihjYXBbMF0ubGVuZ3RoKTtcblxuICAgICAgICBjb25zdCBwcmVjZWRpbmcgPSBvZmZzZXQgPiAwID8gb3JpZ2luYWxTdHJpbmcuc3Vic3RyKDAsIG9mZnNldCkgOiBcIiBcIjtcbiAgICAgICAgY29uc3QgZm9sbG93aW5nID0gb2Zmc2V0ICsgY2FwWzBdLmxlbmd0aCA8IG9yaWdpbmFsU3RyaW5nLmxlbmd0aCA/IHN0cmluZyA6IFwiIFwiO1xuXG4gICAgICAgIGNvbnN0IHB1bmN0dWF0aW9uRm9sbG93cyA9IGZvbGxvd2luZy5tYXRjaChwdW5jdHVhdGlvbkxlYWRpbmcpO1xuICAgICAgICBjb25zdCBwdW5jdHVhdGlvblByZWNlZGVzID0gcHJlY2VkaW5nLm1hdGNoKHB1bmN0dWF0aW9uVHJhaWxpbmcpO1xuICAgICAgICBjb25zdCB3aGl0ZXNwYWNlRm9sbG93cyA9IGZvbGxvd2luZy5tYXRjaCgvXlxccy8pO1xuICAgICAgICBjb25zdCB3aGl0ZXNwYWNlUHJlY2VkZXMgPSBwcmVjZWRpbmcubWF0Y2goL1xccyQvKTtcblxuICAgICAgICBsZXQgY2FuT3BlbiA9ICF3aGl0ZXNwYWNlRm9sbG93cyAmJiAoIXB1bmN0dWF0aW9uRm9sbG93cyB8fCAhIXdoaXRlc3BhY2VQcmVjZWRlcyB8fCAhIXB1bmN0dWF0aW9uUHJlY2VkZXMpO1xuICAgICAgICBsZXQgY2FuQ2xvc2UgPSAhd2hpdGVzcGFjZVByZWNlZGVzICYmICghcHVuY3R1YXRpb25QcmVjZWRlcyB8fCAhIXdoaXRlc3BhY2VGb2xsb3dzIHx8ICEhcHVuY3R1YXRpb25Gb2xsb3dzKTtcblxuICAgICAgICBpZiAoY3VycmVudERlbGltaXRlciA9PT0gXCJfXCIgJiYgY2FuT3BlbiAmJiBjYW5DbG9zZSkge1xuICAgICAgICAgIGNhbk9wZW4gPSAhIXB1bmN0dWF0aW9uUHJlY2VkZXM7XG4gICAgICAgICAgY2FuQ2xvc2UgPSAhIXB1bmN0dWF0aW9uRm9sbG93cztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjYW5DbG9zZSkge1xuICAgICAgICAgIGxldCBzdGFja1BvaW50ZXIgPSBzdGFjay5sZW5ndGggLSAxO1xuICAgICAgICAgIHdoaWxlIChkZWxpbUNvdW50ICYmIHN0YWNrUG9pbnRlciA+PSAwKSB7XG4gICAgICAgICAgICBpZiAoc3RhY2tbc3RhY2tQb2ludGVyXS5kZWxpbWl0ZXIgPT09IGN1cnJlbnREZWxpbWl0ZXIpIHtcbiAgICAgICAgICAgICAgd2hpbGUgKHN0YWNrUG9pbnRlciA8IHN0YWNrLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBlbnRyeSA9IHN0YWNrLnBvcCgpITtcbiAgICAgICAgICAgICAgICBwcm9jZXNzZWQgPSBgJHtlbnRyeS5vdXRwdXR9JHtlbnRyeS5kZWxpbVN0cmluZy5zdWJzdHIoMCwgZW50cnkuY291bnQpfSR7cHJvY2Vzc2VkfWA7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAoZGVsaW1Db3VudCA+PSAyICYmIHN0YWNrW3N0YWNrUG9pbnRlcl0uY291bnQgPj0gMikge1xuICAgICAgICAgICAgICAgIHByb2Nlc3NlZCA9IGA8c3BhbiBjbGFzcz1cIlRNTWFya1wiPiR7Y3VycmVudERlbGltaXRlcn0ke2N1cnJlbnREZWxpbWl0ZXJ9PC9zcGFuPjxzdHJvbmcgY2xhc3M9XCJUTVN0cm9uZ1wiPiR7cHJvY2Vzc2VkfTwvc3Ryb25nPjxzcGFuIGNsYXNzPVwiVE1NYXJrXCI+JHtjdXJyZW50RGVsaW1pdGVyfSR7Y3VycmVudERlbGltaXRlcn08L3NwYW4+YDtcbiAgICAgICAgICAgICAgICBkZWxpbUNvdW50IC09IDI7XG4gICAgICAgICAgICAgICAgc3RhY2tbc3RhY2tQb2ludGVyXS5jb3VudCAtPSAyO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHByb2Nlc3NlZCA9IGA8c3BhbiBjbGFzcz1cIlRNTWFya1wiPiR7Y3VycmVudERlbGltaXRlcn08L3NwYW4+PGVtIGNsYXNzPVwiVE1FbVwiPiR7cHJvY2Vzc2VkfTwvZW0+PHNwYW4gY2xhc3M9XCJUTU1hcmtcIj4ke2N1cnJlbnREZWxpbWl0ZXJ9PC9zcGFuPmA7XG4gICAgICAgICAgICAgICAgZGVsaW1Db3VudCAtPSAxO1xuICAgICAgICAgICAgICAgIHN0YWNrW3N0YWNrUG9pbnRlcl0uY291bnQgLT0gMTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChzdGFja1tzdGFja1BvaW50ZXJdLmNvdW50ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgbGV0IGVudHJ5ID0gc3RhY2sucG9wKCkhO1xuICAgICAgICAgICAgICAgIHByb2Nlc3NlZCA9IGAke2VudHJ5Lm91dHB1dH0ke3Byb2Nlc3NlZH1gO1xuICAgICAgICAgICAgICAgIHN0YWNrUG9pbnRlci0tO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzdGFja1BvaW50ZXItLTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGVsaW1Db3VudCAmJiBjYW5PcGVuKSB7XG4gICAgICAgICAgc3RhY2sucHVzaCh7XG4gICAgICAgICAgICBkZWxpbWl0ZXI6IGN1cnJlbnREZWxpbWl0ZXIsXG4gICAgICAgICAgICBkZWxpbVN0cmluZzogZGVsaW1TdHJpbmcsXG4gICAgICAgICAgICBjb3VudDogZGVsaW1Db3VudCxcbiAgICAgICAgICAgIG91dHB1dDogcHJvY2Vzc2VkLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHByb2Nlc3NlZCA9IFwiXCI7XG4gICAgICAgICAgZGVsaW1Db3VudCA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGVsaW1Db3VudCkge1xuICAgICAgICAgIHByb2Nlc3NlZCA9IGAke3Byb2Nlc3NlZH0ke2RlbGltU3RyaW5nLnN1YnN0cigwLCBkZWxpbUNvdW50KX1gO1xuICAgICAgICB9XG5cbiAgICAgICAgb2Zmc2V0ICs9IGNhcFswXS5sZW5ndGg7XG4gICAgICAgIGNvbnRpbnVlIG91dGVyO1xuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayBmb3Igc3RyaWtldGhyb3VnaCBkZWxpbWl0ZXJcbiAgICAgIGNhcCA9IC9efn4vLmV4ZWMoc3RyaW5nKTtcbiAgICAgIGlmIChjYXApIHtcbiAgICAgICAgbGV0IGNvbnN1bWVkID0gZmFsc2U7XG4gICAgICAgIGxldCBzdGFja1BvaW50ZXIgPSBzdGFjay5sZW5ndGggLSAxO1xuICAgICAgICB3aGlsZSAoIWNvbnN1bWVkICYmIHN0YWNrUG9pbnRlciA+PSAwKSB7XG4gICAgICAgICAgaWYgKHN0YWNrW3N0YWNrUG9pbnRlcl0uZGVsaW1pdGVyID09PSBcIn5cIikge1xuICAgICAgICAgICAgd2hpbGUgKHN0YWNrUG9pbnRlciA8IHN0YWNrLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgY29uc3QgZW50cnkgPSBzdGFjay5wb3AoKSE7XG4gICAgICAgICAgICAgIHByb2Nlc3NlZCA9IGAke2VudHJ5Lm91dHB1dH0ke2VudHJ5LmRlbGltU3RyaW5nLnN1YnN0cigwLCBlbnRyeS5jb3VudCl9JHtwcm9jZXNzZWR9YDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcHJvY2Vzc2VkID0gYDxzcGFuIGNsYXNzPVwiVE1NYXJrXCI+fn48L3NwYW4+PGRlbCBjbGFzcz1cIlRNU3RyaWtldGhyb3VnaFwiPiR7cHJvY2Vzc2VkfTwvZGVsPjxzcGFuIGNsYXNzPVwiVE1NYXJrXCI+fn48L3NwYW4+YDtcbiAgICAgICAgICAgIGxldCBlbnRyeSA9IHN0YWNrLnBvcCgpITtcbiAgICAgICAgICAgIHByb2Nlc3NlZCA9IGAke2VudHJ5Lm91dHB1dH0ke3Byb2Nlc3NlZH1gO1xuICAgICAgICAgICAgY29uc3VtZWQgPSB0cnVlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdGFja1BvaW50ZXItLTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWNvbnN1bWVkKSB7XG4gICAgICAgICAgc3RhY2sucHVzaCh7XG4gICAgICAgICAgICBkZWxpbWl0ZXI6IFwiflwiLFxuICAgICAgICAgICAgZGVsaW1TdHJpbmc6IFwifn5cIixcbiAgICAgICAgICAgIGNvdW50OiAyLFxuICAgICAgICAgICAgb3V0cHV0OiBwcm9jZXNzZWQsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcHJvY2Vzc2VkID0gXCJcIjtcbiAgICAgICAgfVxuXG4gICAgICAgIG9mZnNldCArPSBjYXBbMF0ubGVuZ3RoO1xuICAgICAgICBzdHJpbmcgPSBzdHJpbmcuc3Vic3RyKGNhcFswXS5sZW5ndGgpO1xuICAgICAgICBjb250aW51ZSBvdXRlcjtcbiAgICAgIH1cblxuICAgICAgLy8gUHJvY2VzcyAnZGVmYXVsdCcgcnVsZVxuICAgICAgY2FwID0gdGhpcy5tZXJnZWRJbmxpbmVHcmFtbWFyLmRlZmF1bHQucmVnZXhwLmV4ZWMoc3RyaW5nKTtcbiAgICAgIGlmIChjYXApIHtcbiAgICAgICAgc3RyaW5nID0gc3RyaW5nLnN1YnN0cihjYXBbMF0ubGVuZ3RoKTtcbiAgICAgICAgb2Zmc2V0ICs9IGNhcFswXS5sZW5ndGg7XG4gICAgICAgIHByb2Nlc3NlZCArPSB0aGlzLm1lcmdlZElubGluZUdyYW1tYXIuZGVmYXVsdC5yZXBsYWNlbWVudC5yZXBsYWNlKC9cXCQoWzEtOV0pL2csIChzdHIsIHAxKSA9PiBodG1sZXNjYXBlKGNhcFtwMV0pKTtcbiAgICAgICAgY29udGludWUgb3V0ZXI7XG4gICAgICB9XG4gICAgICB0aHJvdyBcIkluZmluaXRlIGxvb3AhXCI7XG4gICAgfVxuXG4gICAgd2hpbGUgKHN0YWNrLmxlbmd0aCkge1xuICAgICAgY29uc3QgZW50cnkgPSBzdGFjay5wb3AoKSE7XG4gICAgICBwcm9jZXNzZWQgPSBgJHtlbnRyeS5vdXRwdXR9JHtlbnRyeS5kZWxpbVN0cmluZy5zdWJzdHIoMCwgZW50cnkuY291bnQpfSR7cHJvY2Vzc2VkfWA7XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb2Nlc3NlZDtcbiAgfVxuXG4gIHByaXZhdGUgY29tcHV0ZUNvbHVtbihzdGFydE5vZGU6IE5vZGUsIG9mZnNldDogbnVtYmVyKTogbnVtYmVyIHwgbnVsbCB7XG4gICAgbGV0IG5vZGUgPSBzdGFydE5vZGU7XG4gICAgbGV0IGNvbDogbnVtYmVyO1xuICAgIHdoaWxlIChub2RlICYmIG5vZGUucGFyZW50Tm9kZSAhPT0gdGhpcy5lKSB7XG4gICAgICBub2RlID0gbm9kZS5wYXJlbnROb2RlITtcbiAgICB9XG4gICAgaWYgKG5vZGUgPT09IG51bGwpIHJldHVybiBudWxsO1xuXG4gICAgaWYgKHN0YXJ0Tm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5URVhUX05PREUgfHwgb2Zmc2V0ID09PSAwKSB7XG4gICAgICBjb2wgPSBvZmZzZXQ7XG4gICAgICBub2RlID0gc3RhcnROb2RlO1xuICAgIH0gZWxzZSBpZiAob2Zmc2V0ID4gMCkge1xuICAgICAgbm9kZSA9IHN0YXJ0Tm9kZS5jaGlsZE5vZGVzW29mZnNldCAtIDFdO1xuICAgICAgY29sID0gbm9kZS50ZXh0Q29udGVudCEubGVuZ3RoO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb2wgPSAwO1xuICAgICAgbm9kZSA9IHN0YXJ0Tm9kZTtcbiAgICB9XG4gICAgd2hpbGUgKG5vZGUucGFyZW50Tm9kZSAhPT0gdGhpcy5lKSB7XG4gICAgICBpZiAobm9kZS5wcmV2aW91c1NpYmxpbmcpIHtcbiAgICAgICAgbm9kZSA9IG5vZGUucHJldmlvdXNTaWJsaW5nO1xuICAgICAgICBjb2wgKz0gbm9kZS50ZXh0Q29udGVudCEubGVuZ3RoO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbm9kZSA9IG5vZGUucGFyZW50Tm9kZSBhcyB1bmtub3duIGFzIENoaWxkTm9kZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNvbDtcbiAgfVxuXG4gIHByaXZhdGUgY29tcHV0ZU5vZGVBbmRPZmZzZXQocm93OiBudW1iZXIsIGNvbDogbnVtYmVyLCBiaW5kUmlnaHQ6IGJvb2xlYW4gPSBmYWxzZSk6IHtub2RlOiBOb2RlLCBvZmZzZXQ6IG51bWJlcn0ge1xuICAgIGlmIChyb3cgPj0gdGhpcy5saW5lRWxlbWVudHMubGVuZ3RoKSB7XG4gICAgICByb3cgPSB0aGlzLmxpbmVFbGVtZW50cy5sZW5ndGggLSAxO1xuICAgICAgY29sID0gdGhpcy5saW5lc1tyb3ddLmxlbmd0aDtcbiAgICB9XG4gICAgaWYgKGNvbCA+IHRoaXMubGluZXNbcm93XS5sZW5ndGgpIHtcbiAgICAgIGNvbCA9IHRoaXMubGluZXNbcm93XS5sZW5ndGg7XG4gICAgfVxuICAgIGNvbnN0IHBhcmVudE5vZGUgPSB0aGlzLmxpbmVFbGVtZW50c1tyb3ddIGFzIEhUTUxFbGVtZW50O1xuICAgIGxldCBub2RlID0gcGFyZW50Tm9kZS5maXJzdENoaWxkO1xuXG4gICAgbGV0IGNoaWxkcmVuQ29tcGxldGUgPSBmYWxzZTtcbiAgICBsZXQgcnYgPSB7XG4gICAgICBub2RlOiBwYXJlbnROb2RlLmZpcnN0Q2hpbGQgPyBwYXJlbnROb2RlLmZpcnN0Q2hpbGQgOiBwYXJlbnROb2RlLFxuICAgICAgb2Zmc2V0OiAwLFxuICAgIH07XG5cbiAgICB3aGlsZSAobm9kZSAhPT0gcGFyZW50Tm9kZSkge1xuICAgICAgaWYgKCFjaGlsZHJlbkNvbXBsZXRlICYmIG5vZGUhLm5vZGVUeXBlID09PSBOb2RlLlRFWFRfTk9ERSkge1xuICAgICAgICBpZiAobm9kZSEubm9kZVZhbHVlIS5sZW5ndGggPj0gY29sKSB7XG4gICAgICAgICAgaWYgKGJpbmRSaWdodCAmJiBub2RlIS5ub2RlVmFsdWUhLmxlbmd0aCA9PT0gY29sKSB7XG4gICAgICAgICAgICBydiA9IHsgbm9kZTogbm9kZSEsIG9mZnNldDogY29sIH07XG4gICAgICAgICAgICBjb2wgPSAwO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4geyBub2RlOiBub2RlISwgb2Zmc2V0OiBjb2wgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29sIC09IG5vZGUhLm5vZGVWYWx1ZSEubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoIWNoaWxkcmVuQ29tcGxldGUgJiYgbm9kZSEuZmlyc3RDaGlsZCkge1xuICAgICAgICBub2RlID0gbm9kZSEuZmlyc3RDaGlsZDtcbiAgICAgIH0gZWxzZSBpZiAobm9kZSEubmV4dFNpYmxpbmcpIHtcbiAgICAgICAgY2hpbGRyZW5Db21wbGV0ZSA9IGZhbHNlO1xuICAgICAgICBub2RlID0gbm9kZSEubmV4dFNpYmxpbmc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjaGlsZHJlbkNvbXBsZXRlID0gdHJ1ZTtcbiAgICAgICAgbm9kZSA9IG5vZGUhLnBhcmVudE5vZGUgYXMgdW5rbm93biBhcyBDaGlsZE5vZGU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJ2O1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVMaW5lQ29udGVudHNBbmRGb3JtYXR0aW5nKCk6IHZvaWQge1xuICAgIHRoaXMuY2xlYXJEaXJ0eUZsYWcoKTtcbiAgICB0aGlzLnVwZGF0ZUxpbmVDb250ZW50cygpO1xuICAgIHRoaXMudXBkYXRlRm9ybWF0dGluZygpO1xuICB9XG5cbiAgcHJpdmF0ZSBjbGVhckRpcnR5RmxhZygpOiB2b2lkIHtcbiAgICB0aGlzLmxpbmVEaXJ0eSA9IG5ldyBBcnJheSh0aGlzLmxpbmVzLmxlbmd0aCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmxpbmVEaXJ0eS5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5saW5lRGlydHlbaV0gPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUxpbmVDb250ZW50cygpOiB2b2lkIHtcbiAgICBsZXQgbGluZURlbHRhID0gdGhpcy5lIS5jaGlsZEVsZW1lbnRDb3VudCAtIHRoaXMubGluZXMubGVuZ3RoO1xuICAgIGlmIChsaW5lRGVsdGEpIHtcbiAgICAgIGxldCBmaXJzdENoYW5nZWRMaW5lID0gMDtcbiAgICAgIHdoaWxlIChcbiAgICAgICAgZmlyc3RDaGFuZ2VkTGluZSA8PSB0aGlzLmxpbmVzLmxlbmd0aCAmJlxuICAgICAgICBmaXJzdENoYW5nZWRMaW5lIDw9IHRoaXMubGluZUVsZW1lbnRzLmxlbmd0aCAmJlxuICAgICAgICB0aGlzLmxpbmVFbGVtZW50c1tmaXJzdENoYW5nZWRMaW5lXSAmJlxuICAgICAgICB0aGlzLmxpbmVzW2ZpcnN0Q2hhbmdlZExpbmVdID09PSAodGhpcy5saW5lRWxlbWVudHNbZmlyc3RDaGFuZ2VkTGluZV0gYXMgSFRNTEVsZW1lbnQpLnRleHRDb250ZW50ICYmXG4gICAgICAgIHRoaXMubGluZVR5cGVzW2ZpcnN0Q2hhbmdlZExpbmVdID09PSAodGhpcy5saW5lRWxlbWVudHNbZmlyc3RDaGFuZ2VkTGluZV0gYXMgSFRNTEVsZW1lbnQpLmNsYXNzTmFtZVxuICAgICAgKSB7XG4gICAgICAgIGZpcnN0Q2hhbmdlZExpbmUrKztcbiAgICAgIH1cblxuICAgICAgbGV0IGxhc3RDaGFuZ2VkTGluZSA9IC0xO1xuICAgICAgd2hpbGUgKFxuICAgICAgICAtbGFzdENoYW5nZWRMaW5lIDwgdGhpcy5saW5lcy5sZW5ndGggJiZcbiAgICAgICAgLWxhc3RDaGFuZ2VkTGluZSA8IHRoaXMubGluZUVsZW1lbnRzLmxlbmd0aCAmJlxuICAgICAgICB0aGlzLmxpbmVzW3RoaXMubGluZXMubGVuZ3RoICsgbGFzdENoYW5nZWRMaW5lXSA9PT1cbiAgICAgICAgICAodGhpcy5saW5lRWxlbWVudHNbdGhpcy5saW5lRWxlbWVudHMubGVuZ3RoICsgbGFzdENoYW5nZWRMaW5lXSBhcyBIVE1MRWxlbWVudCkudGV4dENvbnRlbnQgJiZcbiAgICAgICAgdGhpcy5saW5lVHlwZXNbdGhpcy5saW5lcy5sZW5ndGggKyBsYXN0Q2hhbmdlZExpbmVdID09PVxuICAgICAgICAgICh0aGlzLmxpbmVFbGVtZW50c1t0aGlzLmxpbmVFbGVtZW50cy5sZW5ndGggKyBsYXN0Q2hhbmdlZExpbmVdIGFzIEhUTUxFbGVtZW50KS5jbGFzc05hbWVcbiAgICAgICkge1xuICAgICAgICBsYXN0Q2hhbmdlZExpbmUtLTtcbiAgICAgIH1cblxuICAgICAgbGV0IGxpbmVzVG9EZWxldGUgPSB0aGlzLmxpbmVzLmxlbmd0aCArIGxhc3RDaGFuZ2VkTGluZSArIDEgLSBmaXJzdENoYW5nZWRMaW5lO1xuICAgICAgaWYgKGxpbmVzVG9EZWxldGUgPCAtbGluZURlbHRhKSBsaW5lc1RvRGVsZXRlID0gLWxpbmVEZWx0YTtcbiAgICAgIGlmIChsaW5lc1RvRGVsZXRlIDwgMCkgbGluZXNUb0RlbGV0ZSA9IDA7XG5cbiAgICAgIGxldCBsaW5lc1RvQWRkID0gW107XG4gICAgICBmb3IgKGxldCBsID0gMDsgbCA8IGxpbmVzVG9EZWxldGUgKyBsaW5lRGVsdGE7IGwrKykge1xuICAgICAgICBsaW5lc1RvQWRkLnB1c2goKHRoaXMubGluZUVsZW1lbnRzW2ZpcnN0Q2hhbmdlZExpbmUgKyBsXSBhcyBIVE1MRWxlbWVudCkudGV4dENvbnRlbnQgfHwgXCJcIik7XG4gICAgICB9XG4gICAgICB0aGlzLnNwbGljZUxpbmVzKGZpcnN0Q2hhbmdlZExpbmUsIGxpbmVzVG9EZWxldGUsIGxpbmVzVG9BZGQsIGZhbHNlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZm9yIChsZXQgbGluZSA9IDA7IGxpbmUgPCB0aGlzLmxpbmVFbGVtZW50cy5sZW5ndGg7IGxpbmUrKykge1xuICAgICAgICBsZXQgZSA9IHRoaXMubGluZUVsZW1lbnRzW2xpbmVdIGFzIEhUTUxFbGVtZW50O1xuICAgICAgICBsZXQgY3QgPSBlLnRleHRDb250ZW50IHx8IFwiXCI7XG4gICAgICAgIGlmICh0aGlzLmxpbmVzW2xpbmVdICE9PSBjdCB8fCB0aGlzLmxpbmVUeXBlc1tsaW5lXSAhPT0gZS5jbGFzc05hbWUpIHtcbiAgICAgICAgICB0aGlzLmxpbmVzW2xpbmVdID0gY3Q7XG4gICAgICAgICAgdGhpcy5saW5lVHlwZXNbbGluZV0gPSBlLmNsYXNzTmFtZTtcbiAgICAgICAgICB0aGlzLmxpbmVEaXJ0eVtsaW5lXSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNwbGljZUxpbmVzKFxuICAgIHN0YXJ0TGluZTogbnVtYmVyLFxuICAgIGxpbmVzVG9EZWxldGU6IG51bWJlciA9IDAsXG4gICAgbGluZXNUb0luc2VydDogc3RyaW5nW10gPSBbXSxcbiAgICBhZGp1c3RMaW5lRWxlbWVudHM6IGJvb2xlYW4gPSB0cnVlXG4gICk6IHZvaWQge1xuICAgIGlmIChhZGp1c3RMaW5lRWxlbWVudHMpIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGluZXNUb0RlbGV0ZTsgaSsrKSB7XG4gICAgICAgIHRoaXMuZSEucmVtb3ZlQ2hpbGQodGhpcy5lIS5jaGlsZE5vZGVzW3N0YXJ0TGluZV0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBpbnNlcnRlZEJsYW5rID0gW107XG4gICAgbGV0IGluc2VydGVkRGlydHkgPSBbXTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGluZXNUb0luc2VydC5sZW5ndGg7IGkrKykge1xuICAgICAgaW5zZXJ0ZWRCbGFuay5wdXNoKFwiXCIpO1xuICAgICAgaW5zZXJ0ZWREaXJ0eS5wdXNoKHRydWUpO1xuICAgICAgaWYgKGFkanVzdExpbmVFbGVtZW50cykge1xuICAgICAgICBpZiAodGhpcy5lIS5jaGlsZE5vZGVzW3N0YXJ0TGluZV0pXG4gICAgICAgICAgdGhpcy5lIS5pbnNlcnRCZWZvcmUoZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSwgdGhpcy5lIS5jaGlsZE5vZGVzW3N0YXJ0TGluZV0pO1xuICAgICAgICBlbHNlIHRoaXMuZSEuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5saW5lcy5zcGxpY2Uoc3RhcnRMaW5lLCBsaW5lc1RvRGVsZXRlLCAuLi5saW5lc1RvSW5zZXJ0KTtcbiAgICB0aGlzLmxpbmVUeXBlcy5zcGxpY2Uoc3RhcnRMaW5lLCBsaW5lc1RvRGVsZXRlLCAuLi5pbnNlcnRlZEJsYW5rKTtcbiAgICB0aGlzLmxpbmVEaXJ0eS5zcGxpY2Uoc3RhcnRMaW5lLCBsaW5lc1RvRGVsZXRlLCAuLi5pbnNlcnRlZERpcnR5KTtcbiAgfVxuXG4gIHByaXZhdGUgZml4Tm9kZUhpZXJhcmNoeSgpOiB2b2lkIHtcbiAgICBjb25zdCBvcmlnaW5hbENoaWxkcmVuID0gQXJyYXkuZnJvbSh0aGlzLmUhLmNoaWxkTm9kZXMpO1xuXG4gICAgY29uc3QgcmVwbGFjZUNoaWxkID0gKGNoaWxkOiBOb2RlLCAuLi5uZXdDaGlsZHJlbjogTm9kZVtdKSA9PiB7XG4gICAgICBjb25zdCBwYXJlbnQgPSBjaGlsZC5wYXJlbnRFbGVtZW50ITtcbiAgICAgIGNvbnN0IG5leHRTaWJsaW5nID0gY2hpbGQubmV4dFNpYmxpbmc7XG4gICAgICBwYXJlbnQucmVtb3ZlQ2hpbGQoY2hpbGQpO1xuICAgICAgbmV3Q2hpbGRyZW4uZm9yRWFjaCgobmV3Q2hpbGQpID0+XG4gICAgICAgIG5leHRTaWJsaW5nID8gcGFyZW50Lmluc2VydEJlZm9yZShuZXdDaGlsZCwgbmV4dFNpYmxpbmcpIDogcGFyZW50LmFwcGVuZENoaWxkKG5ld0NoaWxkKVxuICAgICAgKTtcbiAgICB9O1xuXG4gICAgb3JpZ2luYWxDaGlsZHJlbi5mb3JFYWNoKChjaGlsZCkgPT4ge1xuICAgICAgaWYgKGNoaWxkLm5vZGVUeXBlICE9PSBOb2RlLkVMRU1FTlRfTk9ERSB8fCAoY2hpbGQgYXMgSFRNTEVsZW1lbnQpLnRhZ05hbWUgIT09IFwiRElWXCIpIHtcbiAgICAgICAgY29uc3QgZGl2V3JhcHBlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICAgIHJlcGxhY2VDaGlsZChjaGlsZCwgZGl2V3JhcHBlcik7XG4gICAgICAgIGRpdldyYXBwZXIuYXBwZW5kQ2hpbGQoY2hpbGQpO1xuICAgICAgfSBlbHNlIGlmIChjaGlsZC5jaGlsZE5vZGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBjaGlsZC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYnJcIikpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgZ3JhbmRDaGlsZHJlbiA9IEFycmF5LmZyb20oY2hpbGQuY2hpbGROb2Rlcyk7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBncmFuZENoaWxkcmVuLnNvbWUoXG4gICAgICAgICAgICAoZ3JhbmRDaGlsZCkgPT5cbiAgICAgICAgICAgICAgZ3JhbmRDaGlsZC5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUgJiYgKGdyYW5kQ2hpbGQgYXMgSFRNTEVsZW1lbnQpLnRhZ05hbWUgPT09IFwiRElWXCJcbiAgICAgICAgICApXG4gICAgICAgICkge1xuICAgICAgICAgIHJldHVybiByZXBsYWNlQ2hpbGQoY2hpbGQsIC4uLmdyYW5kQ2hpbGRyZW4pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHBhcnNlTGlua09ySW1hZ2Uob3JpZ2luYWxTdHJpbmc6IHN0cmluZywgaXNJbWFnZTogYm9vbGVhbik6IHtvdXRwdXQ6IHN0cmluZywgY2hhckNvdW50OiBudW1iZXJ9IHwgZmFsc2Uge1xuICAgIC8vIFNraXAgdGhlIG9wZW5pbmcgYnJhY2tldFxuICAgIGxldCB0ZXh0T2Zmc2V0ID0gaXNJbWFnZSA/IDIgOiAxO1xuICAgIGxldCBvcGVuZXIgPSBvcmlnaW5hbFN0cmluZy5zdWJzdHIoMCwgdGV4dE9mZnNldCk7XG4gICAgbGV0IHR5cGUgPSBpc0ltYWdlID8gXCJUTUltYWdlXCIgOiBcIlRNTGlua1wiO1xuICAgIGxldCBjdXJyZW50T2Zmc2V0ID0gdGV4dE9mZnNldDtcblxuICAgIGxldCBicmFja2V0TGV2ZWwgPSAxO1xuICAgIGxldCBsaW5rVGV4dDogc3RyaW5nIHwgZmFsc2UgPSBmYWxzZTtcbiAgICBsZXQgbGlua1JlZjogc3RyaW5nIHwgZmFsc2UgPSBmYWxzZTtcbiAgICBsZXQgbGlua0xhYmVsOiBzdHJpbmdbXSA9IFtdO1xuICAgIGxldCBsaW5rRGV0YWlsczogc3RyaW5nW10gPSBbXTtcblxuICAgIHRleHRPdXRlcjogd2hpbGUgKFxuICAgICAgY3VycmVudE9mZnNldCA8IG9yaWdpbmFsU3RyaW5nLmxlbmd0aCAmJlxuICAgICAgbGlua1RleHQgPT09IGZhbHNlXG4gICAgKSB7XG4gICAgICBsZXQgc3RyaW5nID0gb3JpZ2luYWxTdHJpbmcuc3Vic3RyKGN1cnJlbnRPZmZzZXQpO1xuXG4gICAgICAvLyBDYXB0dXJlIGFueSBlc2NhcGVzIGFuZCBjb2RlIGJsb2NrcyBhdCBjdXJyZW50IHBvc2l0aW9uXG4gICAgICBmb3IgKGxldCBydWxlIG9mIFtcImVzY2FwZVwiLCBcImNvZGVcIiwgXCJhdXRvbGlua1wiLCBcImh0bWxcIl0pIHtcbiAgICAgICAgbGV0IGNhcCA9IHRoaXMubWVyZ2VkSW5saW5lR3JhbW1hcltydWxlXS5yZWdleHAuZXhlYyhzdHJpbmcpO1xuICAgICAgICBpZiAoY2FwKSB7XG4gICAgICAgICAgY3VycmVudE9mZnNldCArPSBjYXBbMF0ubGVuZ3RoO1xuICAgICAgICAgIGNvbnRpbnVlIHRleHRPdXRlcjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayBmb3IgaW1hZ2VcbiAgICAgIGlmIChzdHJpbmcubWF0Y2godGhpcy5tZXJnZWRJbmxpbmVHcmFtbWFyLmltYWdlT3Blbi5yZWdleHApKSB7XG4gICAgICAgIGJyYWNrZXRMZXZlbCsrO1xuICAgICAgICBjdXJyZW50T2Zmc2V0ICs9IDI7XG4gICAgICAgIGNvbnRpbnVlIHRleHRPdXRlcjtcbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgZm9yIGxpbmtcbiAgICAgIGlmIChzdHJpbmcubWF0Y2godGhpcy5tZXJnZWRJbmxpbmVHcmFtbWFyLmxpbmtPcGVuLnJlZ2V4cCkpIHtcbiAgICAgICAgYnJhY2tldExldmVsKys7XG4gICAgICAgIGlmICghaXNJbWFnZSkge1xuICAgICAgICAgIGlmICh0aGlzLnBhcnNlTGlua09ySW1hZ2Uoc3RyaW5nLCBmYWxzZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY3VycmVudE9mZnNldCArPSAxO1xuICAgICAgICBjb250aW51ZSB0ZXh0T3V0ZXI7XG4gICAgICB9XG5cbiAgICAgIC8vIENoZWNrIGZvciBjbG9zaW5nIGJyYWNrZXRcbiAgICAgIGlmIChzdHJpbmcubWF0Y2goL15cXF0vKSkge1xuICAgICAgICBicmFja2V0TGV2ZWwtLTtcbiAgICAgICAgaWYgKGJyYWNrZXRMZXZlbCA9PT0gMCkge1xuICAgICAgICAgIGxpbmtUZXh0ID0gb3JpZ2luYWxTdHJpbmcuc3Vic3RyKHRleHRPZmZzZXQsIGN1cnJlbnRPZmZzZXQgLSB0ZXh0T2Zmc2V0KTtcbiAgICAgICAgICBjdXJyZW50T2Zmc2V0Kys7XG4gICAgICAgICAgY29udGludWUgdGV4dE91dGVyO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIE5vdGhpbmcgbWF0Y2hlcywgcHJvY2VlZCB0byBuZXh0IGNoYXJcbiAgICAgIGN1cnJlbnRPZmZzZXQrKztcbiAgICB9XG5cbiAgICAvLyBEaWQgd2UgZmluZCBhIGxpbmsgdGV4dD9cbiAgICBpZiAobGlua1RleHQgPT09IGZhbHNlKSByZXR1cm4gZmFsc2U7XG5cbiAgICAvLyBDaGVjayB3aGF0IHR5cGUgb2YgbGluayB0aGlzIGlzXG4gICAgbGV0IG5leHRDaGFyID0gY3VycmVudE9mZnNldCA8IG9yaWdpbmFsU3RyaW5nLmxlbmd0aCA/IG9yaWdpbmFsU3RyaW5nLnN1YnN0cihjdXJyZW50T2Zmc2V0LCAxKSA6IFwiXCI7XG5cbiAgICAvLyBSRUZFUkVOQ0UgTElOS1NcbiAgICBpZiAobmV4dENoYXIgPT09IFwiW1wiKSB7XG4gICAgICBsZXQgc3RyaW5nID0gb3JpZ2luYWxTdHJpbmcuc3Vic3RyKGN1cnJlbnRPZmZzZXQpO1xuICAgICAgbGV0IGNhcCA9IHRoaXMubWVyZ2VkSW5saW5lR3JhbW1hci5saW5rTGFiZWwucmVnZXhwLmV4ZWMoc3RyaW5nKTtcbiAgICAgIGlmIChjYXApIHtcbiAgICAgICAgY3VycmVudE9mZnNldCArPSBjYXBbMF0ubGVuZ3RoO1xuICAgICAgICBsaW5rTGFiZWwucHVzaChjYXBbMV0sIGNhcFsyXSwgY2FwWzNdKTtcbiAgICAgICAgaWYgKGNhcFt0aGlzLm1lcmdlZElubGluZUdyYW1tYXIubGlua0xhYmVsLmxhYmVsUGxhY2Vob2xkZXIhXSkge1xuICAgICAgICAgIGxpbmtSZWYgPSBjYXBbdGhpcy5tZXJnZWRJbmxpbmVHcmFtbWFyLmxpbmtMYWJlbC5sYWJlbFBsYWNlaG9sZGVyIV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbGlua1JlZiA9IGxpbmtUZXh0LnRyaW0oKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAobmV4dENoYXIgIT09IFwiKFwiKSB7XG4gICAgICAvLyBTaG9ydGN1dCByZWYgbGlua1xuICAgICAgbGlua1JlZiA9IGxpbmtUZXh0LnRyaW0oKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSU5MSU5FIExJTktTXG4gICAgICBjdXJyZW50T2Zmc2V0Kys7XG4gICAgICBsZXQgcGFyZW50aGVzaXNMZXZlbCA9IDE7XG5cbiAgICAgIGlubGluZU91dGVyOiB3aGlsZSAoY3VycmVudE9mZnNldCA8IG9yaWdpbmFsU3RyaW5nLmxlbmd0aCAmJiBwYXJlbnRoZXNpc0xldmVsID4gMCkge1xuICAgICAgICBsZXQgc3RyaW5nID0gb3JpZ2luYWxTdHJpbmcuc3Vic3RyKGN1cnJlbnRPZmZzZXQpO1xuXG4gICAgICAgIC8vIFByb2Nlc3Mgd2hpdGVzcGFjZVxuICAgICAgICBsZXQgY2FwID0gL15cXHMrLy5leGVjKHN0cmluZyk7XG4gICAgICAgIGlmIChjYXApIHtcbiAgICAgICAgICBzd2l0Y2ggKGxpbmtEZXRhaWxzLmxlbmd0aCkge1xuICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICBsaW5rRGV0YWlscy5wdXNoKGNhcFswXSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICBsaW5rRGV0YWlscy5wdXNoKGNhcFswXSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICBpZiAobGlua0RldGFpbHNbMF0ubWF0Y2goLzwvKSkge1xuICAgICAgICAgICAgICAgIGxpbmtEZXRhaWxzWzFdID0gbGlua0RldGFpbHNbMV0uY29uY2F0KGNhcFswXSk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKHBhcmVudGhlc2lzTGV2ZWwgIT09IDEpIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICBsaW5rRGV0YWlscy5wdXNoKFwiXCIpO1xuICAgICAgICAgICAgICAgIGxpbmtEZXRhaWxzLnB1c2goY2FwWzBdKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgbGlua0RldGFpbHMucHVzaChjYXBbMF0pO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICBsaW5rRGV0YWlscy5wdXNoKFwiXCIpO1xuICAgICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgICBsaW5rRGV0YWlsc1s1XSA9IGxpbmtEZXRhaWxzWzVdLmNvbmNhdChjYXBbMF0pO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgNzpcbiAgICAgICAgICAgICAgbGlua0RldGFpbHNbNl0gPSBsaW5rRGV0YWlsc1s2XS5jb25jYXQoY2FwWzBdKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIGN1cnJlbnRPZmZzZXQgKz0gY2FwWzBdLmxlbmd0aDtcbiAgICAgICAgICBjb250aW51ZSBpbmxpbmVPdXRlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFByb2Nlc3MgYmFja3NsYXNoIGVzY2FwZXNcbiAgICAgICAgY2FwID0gdGhpcy5tZXJnZWRJbmxpbmVHcmFtbWFyLmVzY2FwZS5yZWdleHAuZXhlYyhzdHJpbmcpO1xuICAgICAgICBpZiAoY2FwKSB7XG4gICAgICAgICAgc3dpdGNoIChsaW5rRGV0YWlscy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgbGlua0RldGFpbHMucHVzaChcIlwiKTtcbiAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgbGlua0RldGFpbHMucHVzaChjYXBbMF0pO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgbGlua0RldGFpbHNbMV0gPSBsaW5rRGV0YWlsc1sxXS5jb25jYXQoY2FwWzBdKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICBsaW5rRGV0YWlscy5wdXNoKFwiXCIpO1xuICAgICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgICBsaW5rRGV0YWlsc1s1XSA9IGxpbmtEZXRhaWxzWzVdLmNvbmNhdChjYXBbMF0pO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY3VycmVudE9mZnNldCArPSBjYXBbMF0ubGVuZ3RoO1xuICAgICAgICAgIGNvbnRpbnVlIGlubGluZU91dGVyO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUHJvY2VzcyBvcGVuaW5nIGFuZ2xlIGJyYWNrZXRcbiAgICAgICAgaWYgKGxpbmtEZXRhaWxzLmxlbmd0aCA8IDIgJiYgc3RyaW5nLm1hdGNoKC9ePC8pKSB7XG4gICAgICAgICAgaWYgKGxpbmtEZXRhaWxzLmxlbmd0aCA9PT0gMCkgbGlua0RldGFpbHMucHVzaChcIlwiKTtcbiAgICAgICAgICBsaW5rRGV0YWlsc1swXSA9IGxpbmtEZXRhaWxzWzBdLmNvbmNhdChcIjxcIik7XG4gICAgICAgICAgY3VycmVudE9mZnNldCsrO1xuICAgICAgICAgIGNvbnRpbnVlIGlubGluZU91dGVyO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUHJvY2VzcyBjbG9zaW5nIGFuZ2xlIGJyYWNrZXRcbiAgICAgICAgaWYgKChsaW5rRGV0YWlscy5sZW5ndGggPT09IDEgfHwgbGlua0RldGFpbHMubGVuZ3RoID09PSAyKSAmJiBzdHJpbmcubWF0Y2goL14+LykpIHtcbiAgICAgICAgICBpZiAobGlua0RldGFpbHMubGVuZ3RoID09PSAxKSBsaW5rRGV0YWlscy5wdXNoKFwiXCIpO1xuICAgICAgICAgIGxpbmtEZXRhaWxzLnB1c2goXCI+XCIpO1xuICAgICAgICAgIGN1cnJlbnRPZmZzZXQrKztcbiAgICAgICAgICBjb250aW51ZSBpbmxpbmVPdXRlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFByb2Nlc3Mgbm9uLXBhcmVudGhlc2lzIGRlbGltaXRlciBmb3IgdGl0bGVcbiAgICAgICAgY2FwID0gL15bXCInXS8uZXhlYyhzdHJpbmcpO1xuICAgICAgICBpZiAoY2FwICYmIChsaW5rRGV0YWlscy5sZW5ndGggPT09IDAgfHwgbGlua0RldGFpbHMubGVuZ3RoID09PSAxIHx8IGxpbmtEZXRhaWxzLmxlbmd0aCA9PT0gNCkpIHtcbiAgICAgICAgICB3aGlsZSAobGlua0RldGFpbHMubGVuZ3RoIDwgNCkgbGlua0RldGFpbHMucHVzaChcIlwiKTtcbiAgICAgICAgICBsaW5rRGV0YWlscy5wdXNoKGNhcFswXSk7XG4gICAgICAgICAgY3VycmVudE9mZnNldCsrO1xuICAgICAgICAgIGNvbnRpbnVlIGlubGluZU91dGVyO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNhcCAmJiAobGlua0RldGFpbHMubGVuZ3RoID09PSA1IHx8IGxpbmtEZXRhaWxzLmxlbmd0aCA9PT0gNikgJiYgbGlua0RldGFpbHNbNF0gPT09IGNhcFswXSkge1xuICAgICAgICAgIGlmIChsaW5rRGV0YWlscy5sZW5ndGggPT09IDUpIGxpbmtEZXRhaWxzLnB1c2goXCJcIik7XG4gICAgICAgICAgbGlua0RldGFpbHMucHVzaChjYXBbMF0pO1xuICAgICAgICAgIGN1cnJlbnRPZmZzZXQrKztcbiAgICAgICAgICBjb250aW51ZSBpbmxpbmVPdXRlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFByb2Nlc3Mgb3BlbmluZyBwYXJlbnRoZXNpc1xuICAgICAgICBpZiAoc3RyaW5nLm1hdGNoKC9eXFwoLykpIHtcbiAgICAgICAgICBzd2l0Y2ggKGxpbmtEZXRhaWxzLmxlbmd0aCkge1xuICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICBsaW5rRGV0YWlscy5wdXNoKFwiXCIpO1xuICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICBsaW5rRGV0YWlscy5wdXNoKFwiXCIpO1xuICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICBsaW5rRGV0YWlsc1sxXSA9IGxpbmtEZXRhaWxzWzFdLmNvbmNhdChcIihcIik7XG4gICAgICAgICAgICAgIGlmICghbGlua0RldGFpbHNbMF0ubWF0Y2goLzwkLykpIHBhcmVudGhlc2lzTGV2ZWwrKztcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgIGxpbmtEZXRhaWxzLnB1c2goXCJcIik7XG4gICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgIGxpbmtEZXRhaWxzLnB1c2goXCIoXCIpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgbGlua0RldGFpbHMucHVzaChcIlwiKTtcbiAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgaWYgKGxpbmtEZXRhaWxzWzRdID09PSBcIihcIikgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICBsaW5rRGV0YWlsc1s1XSA9IGxpbmtEZXRhaWxzWzVdLmNvbmNhdChcIihcIik7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjdXJyZW50T2Zmc2V0Kys7XG4gICAgICAgICAgY29udGludWUgaW5saW5lT3V0ZXI7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBQcm9jZXNzIGNsb3NpbmcgcGFyZW50aGVzaXNcbiAgICAgICAgaWYgKHN0cmluZy5tYXRjaCgvXlxcKS8pKSB7XG4gICAgICAgICAgaWYgKGxpbmtEZXRhaWxzLmxlbmd0aCA8PSAyKSB7XG4gICAgICAgICAgICB3aGlsZSAobGlua0RldGFpbHMubGVuZ3RoIDwgMikgbGlua0RldGFpbHMucHVzaChcIlwiKTtcbiAgICAgICAgICAgIGlmICghbGlua0RldGFpbHNbMF0ubWF0Y2goLzwkLykpIHBhcmVudGhlc2lzTGV2ZWwtLTtcbiAgICAgICAgICAgIGlmIChwYXJlbnRoZXNpc0xldmVsID4gMCkge1xuICAgICAgICAgICAgICBsaW5rRGV0YWlsc1sxXSA9IGxpbmtEZXRhaWxzWzFdLmNvbmNhdChcIilcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmIChsaW5rRGV0YWlscy5sZW5ndGggPT09IDUgfHwgbGlua0RldGFpbHMubGVuZ3RoID09PSA2KSB7XG4gICAgICAgICAgICBpZiAobGlua0RldGFpbHNbNF0gPT09IFwiKFwiKSB7XG4gICAgICAgICAgICAgIGlmIChsaW5rRGV0YWlscy5sZW5ndGggPT09IDUpIGxpbmtEZXRhaWxzLnB1c2goXCJcIik7XG4gICAgICAgICAgICAgIGxpbmtEZXRhaWxzLnB1c2goXCIpXCIpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgaWYgKGxpbmtEZXRhaWxzLmxlbmd0aCA9PT0gNSkgbGlua0RldGFpbHMucHVzaChcIilcIik7XG4gICAgICAgICAgICAgIGVsc2UgbGlua0RldGFpbHNbNV0gPSBsaW5rRGV0YWlsc1s1XS5jb25jYXQoXCIpXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwYXJlbnRoZXNpc0xldmVsLS07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHBhcmVudGhlc2lzTGV2ZWwgPT09IDApIHtcbiAgICAgICAgICAgIHdoaWxlIChsaW5rRGV0YWlscy5sZW5ndGggPCA3KSBsaW5rRGV0YWlscy5wdXNoKFwiXCIpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGN1cnJlbnRPZmZzZXQrKztcbiAgICAgICAgICBjb250aW51ZSBpbmxpbmVPdXRlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEFueSBvbGQgY2hhcmFjdGVyXG4gICAgICAgIGNhcCA9IC9eLi8uZXhlYyhzdHJpbmcpO1xuICAgICAgICBpZiAoY2FwKSB7XG4gICAgICAgICAgc3dpdGNoIChsaW5rRGV0YWlscy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgbGlua0RldGFpbHMucHVzaChcIlwiKTtcbiAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgbGlua0RldGFpbHMucHVzaChjYXBbMF0pO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgbGlua0RldGFpbHNbMV0gPSBsaW5rRGV0YWlsc1sxXS5jb25jYXQoY2FwWzBdKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICBsaW5rRGV0YWlscy5wdXNoKFwiXCIpO1xuICAgICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgICBsaW5rRGV0YWlsc1s1XSA9IGxpbmtEZXRhaWxzWzVdLmNvbmNhdChjYXBbMF0pO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY3VycmVudE9mZnNldCArPSBjYXBbMF0ubGVuZ3RoO1xuICAgICAgICAgIGNvbnRpbnVlIGlubGluZU91dGVyO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IFwiSW5maW5pdGUgbG9vcFwiO1xuICAgICAgfVxuICAgICAgaWYgKHBhcmVudGhlc2lzTGV2ZWwgPiAwKSByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKGxpbmtSZWYgIT09IGZhbHNlKSB7XG4gICAgICAvLyBSZWZlcmVuY2UgbGluazsgY2hlY2sgdGhhdCBsaW5rUmVmIGlzIHZhbGlkXG4gICAgICBsZXQgdmFsaWQgPSBmYWxzZTtcbiAgICAgIGZvciAobGV0IGxhYmVsIG9mIHRoaXMubGlua0xhYmVscykge1xuICAgICAgICBpZiAobGFiZWwgPT09IGxpbmtSZWYpIHtcbiAgICAgICAgICB2YWxpZCA9IHRydWU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGxldCBsYWJlbENsYXNzID0gdmFsaWQgPyBcIlRNTGlua0xhYmVsIFRNTGlua0xhYmVsX1ZhbGlkXCIgOiBcIlRNTGlua0xhYmVsIFRNTGlua0xhYmVsX0ludmFsaWRcIjtcbiAgICAgIGxldCBvdXRwdXQgPSBgPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrXyR7dHlwZX1cIj4ke29wZW5lcn08L3NwYW4+PHNwYW4gY2xhc3M9XCIke3R5cGV9ICR7XG4gICAgICAgIGxpbmtMYWJlbC5sZW5ndGggPCAzIHx8ICFsaW5rTGFiZWxbMV0gPyBsYWJlbENsYXNzIDogXCJcIlxuICAgICAgfVwiPiR7dGhpcy5wcm9jZXNzSW5saW5lU3R5bGVzKGxpbmtUZXh0KX08L3NwYW4+PHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrXyR7dHlwZX1cIj5dPC9zcGFuPmA7XG5cbiAgICAgIGlmIChsaW5rTGFiZWwubGVuZ3RoID49IDMpIHtcbiAgICAgICAgb3V0cHV0ID0gb3V0cHV0LmNvbmNhdChcbiAgICAgICAgICBgPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrXyR7dHlwZX1cIj4ke2xpbmtMYWJlbFswXX08L3NwYW4+YCxcbiAgICAgICAgICBgPHNwYW4gY2xhc3M9XCIke2xhYmVsQ2xhc3N9XCI+JHtsaW5rTGFiZWxbMV19PC9zcGFuPmAsXG4gICAgICAgICAgYDxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya18ke3R5cGV9XCI+JHtsaW5rTGFiZWxbMl19PC9zcGFuPmBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIG91dHB1dDogb3V0cHV0LFxuICAgICAgICBjaGFyQ291bnQ6IGN1cnJlbnRPZmZzZXQsXG4gICAgICB9O1xuICAgIH0gZWxzZSBpZiAobGlua0RldGFpbHMubGVuZ3RoID4gMCkge1xuICAgICAgLy8gSW5saW5lIGxpbmtcbiAgICAgIHdoaWxlIChsaW5rRGV0YWlscy5sZW5ndGggPCA3KSB7XG4gICAgICAgIGxpbmtEZXRhaWxzLnB1c2goXCJcIik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIG91dHB1dDogYDxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya18ke3R5cGV9XCI+JHtvcGVuZXJ9PC9zcGFuPjxzcGFuIGNsYXNzPVwiJHt0eXBlfVwiPiR7dGhpcy5wcm9jZXNzSW5saW5lU3R5bGVzKFxuICAgICAgICAgIGxpbmtUZXh0XG4gICAgICAgICl9PC9zcGFuPjxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya18ke3R5cGV9XCI+XSgke1xuICAgICAgICAgIGxpbmtEZXRhaWxzWzBdXG4gICAgICAgIH08L3NwYW4+PHNwYW4gY2xhc3M9XCIke3R5cGV9RGVzdGluYXRpb25cIj4ke1xuICAgICAgICAgIGxpbmtEZXRhaWxzWzFdXG4gICAgICAgIH08L3NwYW4+PHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrXyR7dHlwZX1cIj4ke2xpbmtEZXRhaWxzWzJdfSR7XG4gICAgICAgICAgbGlua0RldGFpbHNbM11cbiAgICAgICAgfSR7bGlua0RldGFpbHNbNF19PC9zcGFuPjxzcGFuIGNsYXNzPVwiJHt0eXBlfVRpdGxlXCI+JHtcbiAgICAgICAgICBsaW5rRGV0YWlsc1s1XVxuICAgICAgICB9PC9zcGFuPjxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya18ke3R5cGV9XCI+JHtsaW5rRGV0YWlsc1s2XX0pPC9zcGFuPmAsXG4gICAgICAgIGNoYXJDb3VudDogY3VycmVudE9mZnNldCxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBjb21wdXRlQ29tbW9uQW5jZXN0b3Iobm9kZTE6IE5vZGUgfCBudWxsLCBub2RlMjogTm9kZSB8IG51bGwpOiBOb2RlIHwgbnVsbCB7XG4gICAgaWYgKCFub2RlMSB8fCAhbm9kZTIpIHJldHVybiBudWxsO1xuICAgIGlmIChub2RlMSA9PT0gbm9kZTIpIHJldHVybiBub2RlMTtcbiAgICBjb25zdCBhbmNlc3RyeSA9IChub2RlOiBOb2RlKSA9PiB7XG4gICAgICBsZXQgYW5jZXN0cnkgPSBbXTtcbiAgICAgIHdoaWxlIChub2RlKSB7XG4gICAgICAgIGFuY2VzdHJ5LnVuc2hpZnQobm9kZSk7XG4gICAgICAgIG5vZGUgPSBub2RlLnBhcmVudE5vZGUhO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFuY2VzdHJ5O1xuICAgIH07XG5cbiAgICBjb25zdCBhbmNlc3RyeTEgPSBhbmNlc3RyeShub2RlMSk7XG4gICAgY29uc3QgYW5jZXN0cnkyID0gYW5jZXN0cnkobm9kZTIpO1xuXG4gICAgaWYgKGFuY2VzdHJ5MVswXSAhPT0gYW5jZXN0cnkyWzBdKSByZXR1cm4gbnVsbDtcbiAgICBsZXQgaTtcbiAgICBmb3IgKGkgPSAwOyBhbmNlc3RyeTFbaV0gPT09IGFuY2VzdHJ5MltpXTsgaSsrKTtcbiAgICByZXR1cm4gYW5jZXN0cnkxW2kgLSAxXTtcbiAgfVxuXG4gIHByaXZhdGUgY29tcHV0ZUVuY2xvc2luZ01hcmt1cE5vZGUoZm9jdXM6IFBvc2l0aW9uLCBhbmNob3I6IFBvc2l0aW9uIHwgbnVsbCwgY2xhc3NOYW1lOiBzdHJpbmcpOiBOb2RlIHwgbnVsbCB7XG4gICAgbGV0IG5vZGUgPSBudWxsO1xuICAgIGlmICghZm9jdXMpIHJldHVybiBudWxsO1xuICAgIGlmICghYW5jaG9yKSB7XG4gICAgICBjb25zdCBzZWwgPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gICAgICBpZiAoIXNlbCB8fCAhc2VsLmZvY3VzTm9kZSkgcmV0dXJuIG51bGw7XG4gICAgICBub2RlID0gc2VsLmZvY3VzTm9kZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGZvY3VzLnJvdyAhPT0gYW5jaG9yLnJvdykgcmV0dXJuIG51bGw7XG4gICAgICBjb25zdCBzZWwgPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gICAgICBpZiAoIXNlbCkgcmV0dXJuIG51bGw7XG4gICAgICBub2RlID0gdGhpcy5jb21wdXRlQ29tbW9uQW5jZXN0b3Ioc2VsLmZvY3VzTm9kZSwgc2VsLmFuY2hvck5vZGUpO1xuICAgIH1cbiAgICBpZiAoIW5vZGUpIHJldHVybiBudWxsO1xuICAgIHdoaWxlIChub2RlICE9PSB0aGlzLmUpIHtcbiAgICAgIGlmICgobm9kZSBhcyBIVE1MRWxlbWVudCkuY2xhc3NOYW1lICYmIChub2RlIGFzIEhUTUxFbGVtZW50KS5jbGFzc05hbWUuaW5jbHVkZXMoY2xhc3NOYW1lKSkgcmV0dXJuIG5vZGU7XG4gICAgICBub2RlID0gbm9kZS5wYXJlbnROb2RlITtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBwdWJsaWMgZ2V0Q29tbWFuZFN0YXRlKGZvY3VzOiBQb3NpdGlvbiB8IG51bGwgPSBudWxsLCBhbmNob3I6IFBvc2l0aW9uIHwgbnVsbCA9IG51bGwpOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuIHwgbnVsbD4ge1xuICAgIGxldCBjb21tYW5kU3RhdGU6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4gfCBudWxsPiA9IHt9O1xuICAgIGlmICghZm9jdXMpIGZvY3VzID0gdGhpcy5nZXRTZWxlY3Rpb24oZmFsc2UpO1xuICAgIGlmICghYW5jaG9yKSBhbmNob3IgPSB0aGlzLmdldFNlbGVjdGlvbih0cnVlKTtcbiAgICBpZiAoIWZvY3VzKSB7XG4gICAgICBmb3IgKGxldCBjbWQgaW4gY29tbWFuZHMpIHtcbiAgICAgICAgY29tbWFuZFN0YXRlW2NtZF0gPSBudWxsO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNvbW1hbmRTdGF0ZTtcbiAgICB9XG4gICAgaWYgKCFhbmNob3IpIGFuY2hvciA9IGZvY3VzO1xuXG4gICAgbGV0IHN0YXJ0OiBQb3NpdGlvbiwgZW5kOiBQb3NpdGlvbjtcbiAgICBpZiAoYW5jaG9yLnJvdyA8IGZvY3VzLnJvdyB8fCAoYW5jaG9yLnJvdyA9PT0gZm9jdXMucm93ICYmIGFuY2hvci5jb2wgPCBmb2N1cy5jb2wpKSB7XG4gICAgICBzdGFydCA9IGFuY2hvcjtcbiAgICAgIGVuZCA9IGZvY3VzO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGFydCA9IGZvY3VzO1xuICAgICAgZW5kID0gYW5jaG9yO1xuICAgIH1cbiAgICBpZiAoZW5kLnJvdyA+IHN0YXJ0LnJvdyAmJiBlbmQuY29sID09PSAwKSB7XG4gICAgICBlbmQucm93LS07XG4gICAgICBlbmQuY29sID0gdGhpcy5saW5lc1tlbmQucm93XS5sZW5ndGg7XG4gICAgfVxuXG4gICAgZm9yIChsZXQgY21kIGluIGNvbW1hbmRzKSB7XG4gICAgICBpZiAoY29tbWFuZHNbY21kXS50eXBlID09PSBcImlubGluZVwiKSB7XG4gICAgICAgIGlmICghZm9jdXMgfHwgZm9jdXMucm93ICE9PSBhbmNob3IhLnJvdyB8fCAhdGhpcy5pc0lubGluZUZvcm1hdHRpbmdBbGxvd2VkKCkpIHtcbiAgICAgICAgICBjb21tYW5kU3RhdGVbY21kXSA9IG51bGw7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29tbWFuZFN0YXRlW2NtZF0gPVxuICAgICAgICAgICAgISF0aGlzLmNvbXB1dGVFbmNsb3NpbmdNYXJrdXBOb2RlKGZvY3VzLCBhbmNob3IsIGNvbW1hbmRzW2NtZF0uY2xhc3NOYW1lKSB8fFxuICAgICAgICAgICAgKGZvY3VzLmNvbCA9PT0gYW5jaG9yIS5jb2wgJiZcbiAgICAgICAgICAgICAgISF0aGlzLmxpbmVzW2ZvY3VzLnJvd10uc3Vic3RyKDAsIGZvY3VzLmNvbCkubWF0Y2goY29tbWFuZHNbY21kXS51bnNldC5wcmVQYXR0ZXJuKSAmJlxuICAgICAgICAgICAgICAhIXRoaXMubGluZXNbZm9jdXMucm93XS5zdWJzdHIoZm9jdXMuY29sKS5tYXRjaChjb21tYW5kc1tjbWRdLnVuc2V0LnBvc3RQYXR0ZXJuKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChjb21tYW5kc1tjbWRdLnR5cGUgPT09IFwibGluZVwiKSB7XG4gICAgICAgIGlmICghZm9jdXMpIHtcbiAgICAgICAgICBjb21tYW5kU3RhdGVbY21kXSA9IG51bGw7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbGV0IHN0YXRlOiBib29sZWFuIHwgbnVsbCA9IHRoaXMubGluZVR5cGVzW3N0YXJ0LnJvd10gPT09IGNvbW1hbmRzW2NtZF0uY2xhc3NOYW1lO1xuICAgICAgICAgIGZvciAobGV0IGxpbmUgPSBzdGFydC5yb3c7IGxpbmUgPD0gZW5kLnJvdzsgbGluZSsrKSB7XG4gICAgICAgICAgICBpZiAoKHRoaXMubGluZVR5cGVzW2xpbmVdID09PSBjb21tYW5kc1tjbWRdLmNsYXNzTmFtZSkgIT09IHN0YXRlKSB7XG4gICAgICAgICAgICAgIHN0YXRlID0gbnVsbDtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbW1hbmRTdGF0ZVtjbWRdID0gc3RhdGU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNvbW1hbmRTdGF0ZTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRDb21tYW5kU3RhdGUoY29tbWFuZDogc3RyaW5nLCBzdGF0ZTogYm9vbGVhbik6IHZvaWQge1xuICAgIGlmICghdGhpcy5pc1Jlc3RvcmluZ0hpc3RvcnkpIHRoaXMucHVzaEhpc3RvcnkoKTtcbiAgICBpZiAoY29tbWFuZHNbY29tbWFuZF0udHlwZSA9PT0gXCJpbmxpbmVcIikge1xuICAgICAgbGV0IGFuY2hvciA9IHRoaXMuZ2V0U2VsZWN0aW9uKHRydWUpO1xuICAgICAgbGV0IGZvY3VzID0gdGhpcy5nZXRTZWxlY3Rpb24oZmFsc2UpO1xuICAgICAgaWYgKCFhbmNob3IpIGFuY2hvciA9IGZvY3VzO1xuICAgICAgaWYgKCFhbmNob3IpIHJldHVybjtcbiAgICAgIGlmIChhbmNob3Iucm93ICE9PSBmb2N1cyEucm93KSByZXR1cm47XG4gICAgICBpZiAoIXRoaXMuaXNJbmxpbmVGb3JtYXR0aW5nQWxsb3dlZCgpKSByZXR1cm47XG4gICAgICBsZXQgbWFya3VwTm9kZSA9IHRoaXMuY29tcHV0ZUVuY2xvc2luZ01hcmt1cE5vZGUoZm9jdXMhLCBhbmNob3IsIGNvbW1hbmRzW2NvbW1hbmRdLmNsYXNzTmFtZSk7XG4gICAgICB0aGlzLmNsZWFyRGlydHlGbGFnKCk7XG5cbiAgICAgIGlmIChtYXJrdXBOb2RlKSB7XG4gICAgICAgIHRoaXMubGluZURpcnR5W2ZvY3VzIS5yb3ddID0gdHJ1ZTtcbiAgICAgICAgY29uc3Qgc3RhcnRDb2wgPSB0aGlzLmNvbXB1dGVDb2x1bW4obWFya3VwTm9kZSwgMCkhO1xuICAgICAgICBjb25zdCBsZW4gPSBtYXJrdXBOb2RlLnRleHRDb250ZW50IS5sZW5ndGg7XG4gICAgICAgIGNvbnN0IGxlZnQgPSB0aGlzLmxpbmVzW2ZvY3VzIS5yb3ddXG4gICAgICAgICAgLnN1YnN0cigwLCBzdGFydENvbClcbiAgICAgICAgICAucmVwbGFjZShjb21tYW5kc1tjb21tYW5kXS51bnNldC5wcmVQYXR0ZXJuLCBcIlwiKTtcbiAgICAgICAgY29uc3QgbWlkID0gdGhpcy5saW5lc1tmb2N1cyEucm93XS5zdWJzdHIoc3RhcnRDb2wsIGxlbik7XG4gICAgICAgIGNvbnN0IHJpZ2h0ID0gdGhpcy5saW5lc1tmb2N1cyEucm93XVxuICAgICAgICAgIC5zdWJzdHIoc3RhcnRDb2wgKyBsZW4pXG4gICAgICAgICAgLnJlcGxhY2UoY29tbWFuZHNbY29tbWFuZF0udW5zZXQucG9zdFBhdHRlcm4sIFwiXCIpO1xuICAgICAgICB0aGlzLmxpbmVzW2ZvY3VzIS5yb3ddID0gbGVmdC5jb25jYXQobWlkLCByaWdodCk7XG4gICAgICAgIGFuY2hvci5jb2wgPSBsZWZ0Lmxlbmd0aDtcbiAgICAgICAgZm9jdXMhLmNvbCA9IGFuY2hvci5jb2wgKyBsZW47XG4gICAgICAgIHRoaXMudXBkYXRlRm9ybWF0dGluZygpO1xuICAgICAgICB0aGlzLnNldFNlbGVjdGlvbihmb2N1cyEsIGFuY2hvcik7XG4gICAgICAgIHRoaXMuZmlyZUNoYW5nZSgpO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgZm9jdXMhLmNvbCA9PT0gYW5jaG9yLmNvbCAmJlxuICAgICAgICAhIXRoaXMubGluZXNbZm9jdXMhLnJvd10uc3Vic3RyKDAsIGZvY3VzIS5jb2wpLm1hdGNoKGNvbW1hbmRzW2NvbW1hbmRdLnVuc2V0LnByZVBhdHRlcm4pICYmXG4gICAgICAgICEhdGhpcy5saW5lc1tmb2N1cyEucm93XS5zdWJzdHIoZm9jdXMhLmNvbCkubWF0Y2goY29tbWFuZHNbY29tbWFuZF0udW5zZXQucG9zdFBhdHRlcm4pXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5saW5lRGlydHlbZm9jdXMhLnJvd10gPSB0cnVlO1xuICAgICAgICBjb25zdCBsZWZ0ID0gdGhpcy5saW5lc1tmb2N1cyEucm93XVxuICAgICAgICAgIC5zdWJzdHIoMCwgZm9jdXMhLmNvbClcbiAgICAgICAgICAucmVwbGFjZShjb21tYW5kc1tjb21tYW5kXS51bnNldC5wcmVQYXR0ZXJuLCBcIlwiKTtcbiAgICAgICAgY29uc3QgcmlnaHQgPSB0aGlzLmxpbmVzW2ZvY3VzIS5yb3ddXG4gICAgICAgICAgLnN1YnN0cihmb2N1cyEuY29sKVxuICAgICAgICAgIC5yZXBsYWNlKGNvbW1hbmRzW2NvbW1hbmRdLnVuc2V0LnBvc3RQYXR0ZXJuLCBcIlwiKTtcbiAgICAgICAgdGhpcy5saW5lc1tmb2N1cyEucm93XSA9IGxlZnQuY29uY2F0KHJpZ2h0KTtcbiAgICAgICAgZm9jdXMhLmNvbCA9IGFuY2hvci5jb2wgPSBsZWZ0Lmxlbmd0aDtcbiAgICAgICAgdGhpcy51cGRhdGVGb3JtYXR0aW5nKCk7XG4gICAgICAgIHRoaXMuc2V0U2VsZWN0aW9uKGZvY3VzISwgYW5jaG9yKTtcbiAgICAgICAgdGhpcy5maXJlQ2hhbmdlKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsZXQgeyBzdGFydENvbCwgZW5kQ29sIH0gPVxuICAgICAgICAgIGZvY3VzIS5jb2wgPCBhbmNob3IuY29sXG4gICAgICAgICAgICA/IHsgc3RhcnRDb2w6IGZvY3VzIS5jb2wsIGVuZENvbDogYW5jaG9yLmNvbCB9XG4gICAgICAgICAgICA6IHsgc3RhcnRDb2w6IGFuY2hvci5jb2wsIGVuZENvbDogZm9jdXMhLmNvbCB9O1xuXG4gICAgICAgIGxldCBtYXRjaCA9IHRoaXMubGluZXNbZm9jdXMhLnJvd11cbiAgICAgICAgICAuc3Vic3RyKHN0YXJ0Q29sLCBlbmRDb2wgLSBzdGFydENvbClcbiAgICAgICAgICAubWF0Y2goL14oPzxsZWFkaW5nPlxccyopLipcXFMoPzx0cmFpbGluZz5cXHMqKSQvKTtcbiAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgc3RhcnRDb2wgKz0gbWF0Y2guZ3JvdXBzIS5sZWFkaW5nLmxlbmd0aDtcbiAgICAgICAgICBlbmRDb2wgLT0gbWF0Y2guZ3JvdXBzIS50cmFpbGluZy5sZW5ndGg7XG4gICAgICAgIH1cblxuICAgICAgICBmb2N1cyEuY29sID0gc3RhcnRDb2w7XG4gICAgICAgIGFuY2hvci5jb2wgPSBlbmRDb2w7XG5cbiAgICAgICAgdGhpcy53cmFwU2VsZWN0aW9uKGNvbW1hbmRzW2NvbW1hbmRdLnNldC5wcmUsIGNvbW1hbmRzW2NvbW1hbmRdLnNldC5wb3N0LCBmb2N1cywgYW5jaG9yKTtcbiAgICAgICAgdGhpcy5maXJlQ2hhbmdlKCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChjb21tYW5kc1tjb21tYW5kXS50eXBlID09PSBcImxpbmVcIikge1xuICAgICAgbGV0IGFuY2hvciA9IHRoaXMuZ2V0U2VsZWN0aW9uKHRydWUpO1xuICAgICAgbGV0IGZvY3VzID0gdGhpcy5nZXRTZWxlY3Rpb24oZmFsc2UpO1xuICAgICAgaWYgKCFhbmNob3IpIGFuY2hvciA9IGZvY3VzO1xuICAgICAgaWYgKCFmb2N1cykgcmV0dXJuO1xuICAgICAgdGhpcy5jbGVhckRpcnR5RmxhZygpO1xuICAgICAgbGV0IHN0YXJ0ID0gYW5jaG9yIS5yb3cgPiBmb2N1cyEucm93ID8gZm9jdXMhIDogYW5jaG9yITtcbiAgICAgIGxldCBlbmQgPSBhbmNob3IhLnJvdyA+IGZvY3VzIS5yb3cgPyBhbmNob3IhIDogZm9jdXMhO1xuICAgICAgaWYgKGVuZC5yb3cgPiBzdGFydC5yb3cgJiYgZW5kLmNvbCA9PT0gMCkge1xuICAgICAgICBlbmQucm93LS07XG4gICAgICB9XG5cbiAgICAgIGZvciAobGV0IGxpbmUgPSBzdGFydC5yb3c7IGxpbmUgPD0gZW5kLnJvdzsgbGluZSsrKSB7XG4gICAgICAgIGlmIChzdGF0ZSAmJiB0aGlzLmxpbmVUeXBlc1tsaW5lXSAhPT0gY29tbWFuZHNbY29tbWFuZF0uY2xhc3NOYW1lKSB7XG4gICAgICAgICAgdGhpcy5saW5lc1tsaW5lXSA9IHRoaXMubGluZXNbbGluZV0ucmVwbGFjZShcbiAgICAgICAgICAgIGNvbW1hbmRzW2NvbW1hbmRdLnNldC5wYXR0ZXJuLFxuICAgICAgICAgICAgY29tbWFuZHNbY29tbWFuZF0uc2V0LnJlcGxhY2VtZW50LnJlcGxhY2UoXCIkI1wiLCAobGluZSAtIHN0YXJ0LnJvdyArIDEpLnRvU3RyaW5nKCkpXG4gICAgICAgICAgKTtcbiAgICAgICAgICB0aGlzLmxpbmVEaXJ0eVtsaW5lXSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFzdGF0ZSAmJiB0aGlzLmxpbmVUeXBlc1tsaW5lXSA9PT0gY29tbWFuZHNbY29tbWFuZF0uY2xhc3NOYW1lKSB7XG4gICAgICAgICAgdGhpcy5saW5lc1tsaW5lXSA9IHRoaXMubGluZXNbbGluZV0ucmVwbGFjZShcbiAgICAgICAgICAgIGNvbW1hbmRzW2NvbW1hbmRdLnVuc2V0LnBhdHRlcm4sXG4gICAgICAgICAgICBjb21tYW5kc1tjb21tYW5kXS51bnNldC5yZXBsYWNlbWVudFxuICAgICAgICAgICk7XG4gICAgICAgICAgdGhpcy5saW5lRGlydHlbbGluZV0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLnVwZGF0ZUZvcm1hdHRpbmcoKTtcbiAgICAgIHRoaXMuc2V0U2VsZWN0aW9uKFxuICAgICAgICB7IHJvdzogZW5kLnJvdywgY29sOiB0aGlzLmxpbmVzW2VuZC5yb3ddLmxlbmd0aCB9LFxuICAgICAgICB7IHJvdzogc3RhcnQucm93LCBjb2w6IDAgfVxuICAgICAgKTtcbiAgICAgIHRoaXMuZmlyZUNoYW5nZSgpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBpc0lubGluZUZvcm1hdHRpbmdBbGxvd2VkKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHNlbCA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgICBpZiAoIXNlbCB8fCAhc2VsLmZvY3VzTm9kZSB8fCAhc2VsLmFuY2hvck5vZGUpIHJldHVybiBmYWxzZTtcblxuICAgIGlmIChcbiAgICAgIHNlbC5pc0NvbGxhcHNlZCAmJlxuICAgICAgc2VsLmZvY3VzTm9kZS5ub2RlVHlwZSA9PT0gMyAmJlxuICAgICAgc2VsLmZvY3VzT2Zmc2V0ID09PSBzZWwuZm9jdXNOb2RlLm5vZGVWYWx1ZSEubGVuZ3RoXG4gICAgKSB7XG4gICAgICBsZXQgbm9kZTtcbiAgICAgIGZvciAobm9kZSA9IHNlbC5mb2N1c05vZGU7IG5vZGUgJiYgbm9kZS5uZXh0U2libGluZyA9PT0gbnVsbDsgbm9kZSA9IG5vZGUucGFyZW50Tm9kZSEpO1xuICAgICAgaWYgKFxuICAgICAgICBub2RlICYmXG4gICAgICAgIG5vZGUubmV4dFNpYmxpbmcgJiZcbiAgICAgICAgKG5vZGUubmV4dFNpYmxpbmcgYXMgSFRNTEVsZW1lbnQpLmNsYXNzTmFtZSAmJlxuICAgICAgICAobm9kZS5uZXh0U2libGluZyBhcyBIVE1MRWxlbWVudCkuY2xhc3NOYW1lLmluY2x1ZGVzKFwiVE1JbmxpbmVGb3JtYXR0ZWRcIilcbiAgICAgIClcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgbGV0IGFuY2VzdG9yID0gdGhpcy5jb21wdXRlQ29tbW9uQW5jZXN0b3Ioc2VsLmZvY3VzTm9kZSwgc2VsLmFuY2hvck5vZGUpO1xuICAgIGlmICghYW5jZXN0b3IpIHJldHVybiBmYWxzZTtcblxuICAgIHdoaWxlIChhbmNlc3RvciAmJiBhbmNlc3RvciAhPT0gdGhpcy5lKSB7XG4gICAgICBpZiAoXG4gICAgICAgIChhbmNlc3RvciBhcyBIVE1MRWxlbWVudCkuY2xhc3NOYW1lICYmXG4gICAgICAgIHR5cGVvZiAoYW5jZXN0b3IgYXMgSFRNTEVsZW1lbnQpLmNsYXNzTmFtZS5pbmNsdWRlcyA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgICAgICgoYW5jZXN0b3IgYXMgSFRNTEVsZW1lbnQpLmNsYXNzTmFtZS5pbmNsdWRlcyhcIlRNSW5saW5lRm9ybWF0dGVkXCIpIHx8XG4gICAgICAgICAgKGFuY2VzdG9yIGFzIEhUTUxFbGVtZW50KS5jbGFzc05hbWUuaW5jbHVkZXMoXCJUTUJsYW5rTGluZVwiKSlcbiAgICAgIClcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICBhbmNlc3RvciA9IGFuY2VzdG9yLnBhcmVudE5vZGUhO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyB0b2dnbGVDb21tYW5kU3RhdGUoY29tbWFuZDogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmxhc3RDb21tYW5kU3RhdGUpIHRoaXMubGFzdENvbW1hbmRTdGF0ZSA9IHRoaXMuZ2V0Q29tbWFuZFN0YXRlKCk7XG4gICAgdGhpcy5zZXRDb21tYW5kU3RhdGUoY29tbWFuZCwgIXRoaXMubGFzdENvbW1hbmRTdGF0ZVtjb21tYW5kXSk7XG4gIH1cblxuICBwcml2YXRlIGZpcmVEcm9wKGRhdGFUcmFuc2ZlcjogRGF0YVRyYW5zZmVyKTogdm9pZCB7XG4gICAgZm9yIChsZXQgbGlzdGVuZXIgb2YgdGhpcy5saXN0ZW5lcnMuZHJvcCkge1xuICAgICAgbGlzdGVuZXIoeyBkYXRhVHJhbnNmZXIgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBmaXJlU2VsZWN0aW9uKCk6IHZvaWQge1xuICAgIGxldCBmb2N1cyA9IHRoaXMuZ2V0U2VsZWN0aW9uKGZhbHNlKTtcbiAgICBsZXQgYW5jaG9yID0gdGhpcy5nZXRTZWxlY3Rpb24odHJ1ZSk7XG5cbiAgICAvLyBTYXZlIHRoZSBjdXJyZW50IHNlbGVjdGlvbiBmb3IgcmVzdG9yYXRpb24gbGF0ZXJcbiAgICB0aGlzLmxhc3RTZWxlY3Rpb24gPSB7XG4gICAgICBmb2N1czogZm9jdXMsXG4gICAgICBhbmNob3I6IGFuY2hvclxuICAgIH07XG5cbiAgICBpZiAodGhpcy5saXN0ZW5lcnMuc2VsZWN0aW9uICYmIHRoaXMubGlzdGVuZXJzLnNlbGVjdGlvbi5sZW5ndGgpIHtcbiAgICAgIGxldCBjb21tYW5kU3RhdGUgPSB0aGlzLmdldENvbW1hbmRTdGF0ZShmb2N1cywgYW5jaG9yKTtcbiAgICAgIGlmICh0aGlzLmxhc3RDb21tYW5kU3RhdGUpIHtcbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLmxhc3RDb21tYW5kU3RhdGUsIGNvbW1hbmRTdGF0ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmxhc3RDb21tYW5kU3RhdGUgPSBPYmplY3QuYXNzaWduKHt9LCBjb21tYW5kU3RhdGUpO1xuICAgICAgfVxuICAgICAgZm9yIChsZXQgbGlzdGVuZXIgb2YgdGhpcy5saXN0ZW5lcnMuc2VsZWN0aW9uKSB7XG4gICAgICAgIGxpc3RlbmVyKHtcbiAgICAgICAgICBmb2N1czogZm9jdXMhLFxuICAgICAgICAgIGFuY2hvcjogYW5jaG9yISxcbiAgICAgICAgICBjb21tYW5kU3RhdGU6IHRoaXMubGFzdENvbW1hbmRTdGF0ZSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEVkaXRvcjtcbiJdLCJuYW1lcyI6WyJzdmciLCJibG9ja3F1b3RlIiwiYm9sZCIsImNsZWFyX2Zvcm1hdHRpbmciLCJjb2RlIiwiaDEiLCJoMiIsImhyIiwiaW1hZ2UiLCJpdGFsaWMiLCJsaW5rIiwib2wiLCJyZWRvIiwic3RyaWtldGhyb3VnaCIsInVsIiwidW5kbyIsImlzTWFjTGlrZSIsInRlc3QiLCJuYXZpZ2F0b3IiLCJwbGF0Zm9ybSIsIkRlZmF1bHRDb21tYW5kcyIsIm5hbWUiLCJhY3Rpb24iLCJpbm5lckhUTUwiLCJ0aXRsZSIsImhvdGtleSIsImluc2VydExpbmsiLCJlZGl0b3IiLCJpc0lubGluZUZvcm1hdHRpbmdBbGxvd2VkIiwid3JhcFNlbGVjdGlvbiIsImVuYWJsZWQiLCJpbnNlcnRJbWFnZSIsInBhc3RlIiwiY2FuVW5kbyIsImNhblJlZG8iLCJDb21tYW5kQmFyIiwiY29uc3RydWN0b3IiLCJwcm9wcyIsImUiLCJjb21tYW5kcyIsImJ1dHRvbnMiLCJzdGF0ZSIsImhvdGtleXMiLCJlbGVtZW50IiwiZG9jdW1lbnQiLCJnZXRFbGVtZW50QnlJZCIsImJvZHkiLCJjcmVhdGVDb21tYW5kQmFyRWxlbWVudCIsImFkZEV2ZW50TGlzdGVuZXIiLCJoYW5kbGVLZXlkb3duIiwic2V0RWRpdG9yIiwicGFyZW50RWxlbWVudCIsImNyZWF0ZUVsZW1lbnQiLCJjbGFzc05hbWUiLCJjb21tYW5kIiwiZWwiLCJhcHBlbmRDaGlsZCIsImNvbW1hbmROYW1lIiwiT2JqZWN0IiwiYXNzaWduIiwia2V5cyIsInNwbGl0IiwibW9kaWZpZXJzIiwibW9kaWZpZXJleHBsYW5hdGlvbiIsImkiLCJsZW5ndGgiLCJwdXNoIiwibGFzdEtleSIsIm1hdGNoIiwidG9VcHBlckNhc2UiLCJrZXkiLCJ0b0xvd2VyQ2FzZSIsImNvbmNhdCIsImpvaW4iLCJoYW5kbGVDbGljayIsImV2ZW50IiwicHJldmVudERlZmF1bHQiLCJlZGl0b3JIYWRGb2N1cyIsImNvbnRhaW5zIiwiYWN0aXZlRWxlbWVudCIsImZvY3VzIiwicmVzdG9yZUxhc3RTZWxlY3Rpb24iLCJzZXRDb21tYW5kU3RhdGUiLCJoYW5kbGVTZWxlY3Rpb24iLCJjb21tYW5kU3RhdGUiLCJ1bmRlZmluZWQiLCJhbmNob3IiLCJvdXRlciIsIm1vZGlmaWVyIiwiZ2xvYmFsIiwidGhpcyIsInJlcXVpcmUkJDAiLCJyZXF1aXJlJCQxIiwicmVxdWlyZSQkMiIsInNoYXJlZFN0b3JlTW9kdWxlIiwicmVxdWlyZSQkMyIsInJlcXVpcmUkJDQiLCJyZXF1aXJlJCQ1IiwicmVxdWlyZSQkNiIsInJlcXVpcmUkJDciLCJtYWtlQnVpbHRJbiIsIm1ha2VCdWlsdEluTW9kdWxlIiwicmVwbGFjZW1lbnRzIiwiQVNDSUlQdW5jdHVhdGlvbiIsIk5vdFRyaWdnZXJDaGFyIiwiU2NoZW1lIiwiRW1haWwiLCJIVE1MT3BlblRhZyIsIkhUTUxDbG9zZVRhZyIsIkhUTUxUYWdOYW1lIiwiSFRNTENvbW1lbnQiLCJIVE1MUEkiLCJIVE1MRGVjbGFyYXRpb24iLCJIVE1MQ0RBVEEiLCJIVE1MQXR0cmlidXRlIiwiSFRNTEF0dFZhbHVlIiwiS25vd25UYWciLCJwdW5jdHVhdGlvbkxlYWRpbmciLCJSZWdFeHAiLCJwdW5jdHVhdGlvblRyYWlsaW5nIiwibGluZUdyYW1tYXIiLCJUTUgxIiwicmVnZXhwIiwicmVwbGFjZW1lbnQiLCJUTUgyIiwiVE1IMyIsIlRNSDQiLCJUTUg1IiwiVE1INiIsIlRNQmxvY2txdW90ZSIsIlRNQ29kZUZlbmNlQmFja3RpY2tPcGVuIiwiVE1Db2RlRmVuY2VUaWxkZU9wZW4iLCJUTUNvZGVGZW5jZUJhY2t0aWNrQ2xvc2UiLCJUTUNvZGVGZW5jZVRpbGRlQ2xvc2UiLCJUTUJsYW5rTGluZSIsIlRNU2V0ZXh0SDFNYXJrZXIiLCJUTVNldGV4dEgyTWFya2VyIiwiVE1IUiIsIlRNVUwiLCJUTU9MIiwiVE1JbmRlbnRlZENvZGUiLCJUTUxpbmtSZWZlcmVuY2VEZWZpbml0aW9uIiwibGFiZWxQbGFjZWhvbGRlciIsImh0bWxCbG9ja0dyYW1tYXIiLCJzdGFydCIsImVuZCIsInBhcmFJbnRlcnJ1cHQiLCJpbmxpbmVHcmFtbWFyIiwiZXNjYXBlIiwiYXV0b2xpbmsiLCJodG1sIiwibGlua09wZW4iLCJpbWFnZU9wZW4iLCJsaW5rTGFiZWwiLCJkZWZhdWx0IiwicmVwbGFjZW1lbnRSZWdleHAiLCJpbmxpbmVSdWxlcyIsInJ1bGUiLCJyZSIsInNvdXJjZSIsInJlcGxhY2UiLCJzdHJpbmciLCJmbGFncyIsImNyZWF0ZU1lcmdlZElubGluZUdyYW1tYXIiLCJjdXN0b21SdWxlcyIsImFyZ3VtZW50cyIsIm1lcmdlZCIsInJ1bGVOYW1lIiwiZW50cmllcyIsInByb2Nlc3NlZFJ1bGUiLCJyZWdleHBTb3VyY2UiLCJodG1sZXNjYXBlIiwidHlwZSIsInNldCIsInByZSIsInBvc3QiLCJ1bnNldCIsInByZVBhdHRlcm4iLCJwb3N0UGF0dGVybiIsInBhdHRlcm4iLCJoMyIsImg0IiwiaDUiLCJoNiIsIkVkaXRvciIsInRleHRhcmVhIiwibGluZXMiLCJsaW5lRWxlbWVudHMiLCJsaW5lVHlwZXMiLCJsaW5lQ2FwdHVyZXMiLCJsaW5lUmVwbGFjZW1lbnRzIiwibGlua0xhYmVscyIsImxpbmVEaXJ0eSIsImxhc3RDb21tYW5kU3RhdGUiLCJjdXN0b21JbmxpbmVHcmFtbWFyIiwibWVyZ2VkSW5saW5lR3JhbW1hciIsImhhc0ZvY3VzIiwibGFzdFNlbGVjdGlvbiIsImxpc3RlbmVycyIsImNoYW5nZSIsInNlbGVjdGlvbiIsImRyb3AiLCJ1bmRvU3RhY2siLCJyZWRvU3RhY2siLCJpc1Jlc3RvcmluZ0hpc3RvcnkiLCJtYXhIaXN0b3J5IiwiZ2V0RWxlbWVudHNCeVRhZ05hbWUiLCJ0YWdOYW1lIiwicGFyZW50Tm9kZSIsInN0eWxlIiwiZGlzcGxheSIsImNyZWF0ZUVkaXRvckVsZW1lbnQiLCJzZXRDb250ZW50IiwiY29udGVudCIsInZhbHVlIiwiaGFuZGxlVW5kb1JlZG9LZXkiLCJwdXNoSGlzdG9yeSIsInB1c2hDdXJyZW50U3RhdGUiLCJnZXRDb250ZW50IiwiZ2V0U2VsZWN0aW9uIiwic2hpZnQiLCJjdXJyZW50IiwicG9wIiwicHJldiIsInNldFNlbGVjdGlvbiIsIm5leHQiLCJpc01hYyIsImN0cmwiLCJtZXRhS2V5IiwiY3RybEtleSIsImFsdEtleSIsInNoaWZ0S2V5IiwiY2xhc3NMaXN0IiwiYWRkIiwiY29udGVudEVkaXRhYmxlIiwid2hpdGVTcGFjZSIsIndlYmtpdFVzZXJNb2RpZnkiLCJuZXh0U2libGluZyIsImluc2VydEJlZm9yZSIsImhhbmRsZUlucHV0RXZlbnQiLCJoYW5kbGVCZWZvcmVJbnB1dEV2ZW50IiwiaGFuZGxlU2VsZWN0aW9uQ2hhbmdlRXZlbnQiLCJoYW5kbGVQYXN0ZSIsImhhbmRsZURyb3AiLCJjaGlsZE5vZGVzIiwiZmlyc3RDaGlsZCIsInJlbW92ZUNoaWxkIiwibGluZU51bSIsImxlIiwiQXJyYXkiLCJ1cGRhdGVGb3JtYXR0aW5nIiwiZmlyZUNoYW5nZSIsInVwZGF0ZUxpbmVUeXBlcyIsInVwZGF0ZUxpbmtMYWJlbHMiLCJhcHBseUxpbmVUeXBlcyIsImwiLCJjYXB0dXJlIiwic3RyIiwicDEiLCJwMiIsInBhcnNlSW50IiwicHJvY2Vzc0lubGluZVN0eWxlcyIsImNvbnRlbnRIVE1MIiwicmVtb3ZlQXR0cmlidXRlIiwiZGF0YXNldCIsInRvU3RyaW5nIiwiY29kZUJsb2NrVHlwZSIsImNvZGVCbG9ja1NlcUxlbmd0aCIsImh0bWxCbG9jayIsImxpbmVUeXBlIiwibGluZUNhcHR1cmUiLCJsaW5lUmVwbGFjZW1lbnQiLCJleGVjIiwiZ3JvdXBzIiwiaHRtbEJsb2NrVHlwZSIsImhlYWRpbmdMaW5lIiwiaGVhZGluZ0xpbmVUeXBlIiwiZ2V0QW5jaG9yIiwid2luZG93Iiwic3RhcnROb2RlIiwiYW5jaG9yTm9kZSIsImZvY3VzTm9kZSIsIm9mZnNldCIsImFuY2hvck9mZnNldCIsImZvY3VzT2Zmc2V0Iiwicm93IiwiY29sIiwiY29tcHV0ZUNvbHVtbiIsIm5vZGUiLCJwcmV2aW91c1NpYmxpbmciLCJjdXJyZW50TGluZU51bURhdGEiLCJfYSIsInByZXZpb3VzTGluZU51bURhdGEiLCJfYiIsImN1cnJlbnRMaW5lTnVtIiwicHJldmlvdXNMaW5lTnVtIiwiY29tcHV0ZU5vZGVBbmRPZmZzZXQiLCJ3aW5kb3dTZWxlY3Rpb24iLCJzZXRCYXNlQW5kRXh0ZW50IiwidGV4dCIsImJlZ2lubmluZyIsImluc2VydGVkTGluZXMiLCJsaW5lQmVmb3JlIiwic3Vic3RyIiwibGluZUVuZCIsImVuZENvbFBvcyIsInNwbGljZUxpbmVzIiwic3RhcnRDb2wiLCJlbmRDb2wiLCJsZWZ0IiwibWlkIiwicmlnaHQiLCJsaXN0ZW5lciIsImxpbmVzRGlydHkiLCJiZWZvcmVJbnB1dEV2ZW50IiwiaW5wdXRUeXBlIiwiY2xlYXJEaXJ0eUZsYWciLCJzdWJzdHJpbmciLCJjb250aW51YWJsZVR5cGUiLCJsaW5lQmVmb3JlQnJlYWsiLCJsaW5lQWZ0ZXJCcmVhayIsInJlc3VsdCIsInNjcm9sbEludG9WaWV3IiwiYmxvY2siLCJpbmxpbmUiLCJpbnB1dEV2ZW50IiwiZml4Tm9kZUhpZXJhcmNoeSIsInVwZGF0ZUxpbmVDb250ZW50c0FuZEZvcm1hdHRpbmciLCJfZSIsImZpcmVTZWxlY3Rpb24iLCJjbGlwYm9hcmREYXRhIiwiZ2V0RGF0YSIsImZpcmVEcm9wIiwiZGF0YVRyYW5zZmVyIiwib3JpZ2luYWxTdHJpbmciLCJwcm9jZXNzZWQiLCJzdGFjayIsImNhcCIsInBvdGVudGlhbExpbmsiLCJwb3RlbnRpYWxJbWFnZSIsInBhcnNlTGlua09ySW1hZ2UiLCJvdXRwdXQiLCJjaGFyQ291bnQiLCJkZWxpbUNvdW50IiwiZGVsaW1TdHJpbmciLCJjdXJyZW50RGVsaW1pdGVyIiwicHJlY2VkaW5nIiwiZm9sbG93aW5nIiwicHVuY3R1YXRpb25Gb2xsb3dzIiwicHVuY3R1YXRpb25QcmVjZWRlcyIsIndoaXRlc3BhY2VGb2xsb3dzIiwid2hpdGVzcGFjZVByZWNlZGVzIiwiY2FuT3BlbiIsImNhbkNsb3NlIiwic3RhY2tQb2ludGVyIiwiZGVsaW1pdGVyIiwiZW50cnkiLCJjb3VudCIsImNvbnN1bWVkIiwibm9kZVR5cGUiLCJOb2RlIiwiVEVYVF9OT0RFIiwidGV4dENvbnRlbnQiLCJiaW5kUmlnaHQiLCJjaGlsZHJlbkNvbXBsZXRlIiwicnYiLCJub2RlVmFsdWUiLCJ1cGRhdGVMaW5lQ29udGVudHMiLCJsaW5lRGVsdGEiLCJjaGlsZEVsZW1lbnRDb3VudCIsImZpcnN0Q2hhbmdlZExpbmUiLCJsYXN0Q2hhbmdlZExpbmUiLCJsaW5lc1RvRGVsZXRlIiwibGluZXNUb0FkZCIsImxpbmUiLCJjdCIsInN0YXJ0TGluZSIsImxpbmVzVG9JbnNlcnQiLCJhZGp1c3RMaW5lRWxlbWVudHMiLCJpbnNlcnRlZEJsYW5rIiwiaW5zZXJ0ZWREaXJ0eSIsInNwbGljZSIsIm9yaWdpbmFsQ2hpbGRyZW4iLCJmcm9tIiwicmVwbGFjZUNoaWxkIiwiY2hpbGQiLCJwYXJlbnQiLCJfbGVuIiwibmV3Q2hpbGRyZW4iLCJfa2V5IiwiZm9yRWFjaCIsIm5ld0NoaWxkIiwiRUxFTUVOVF9OT0RFIiwiZGl2V3JhcHBlciIsImdyYW5kQ2hpbGRyZW4iLCJzb21lIiwiZ3JhbmRDaGlsZCIsImlzSW1hZ2UiLCJ0ZXh0T2Zmc2V0Iiwib3BlbmVyIiwiY3VycmVudE9mZnNldCIsImJyYWNrZXRMZXZlbCIsImxpbmtUZXh0IiwibGlua1JlZiIsImxpbmtEZXRhaWxzIiwidGV4dE91dGVyIiwibmV4dENoYXIiLCJ0cmltIiwicGFyZW50aGVzaXNMZXZlbCIsImlubGluZU91dGVyIiwidmFsaWQiLCJsYWJlbCIsImxhYmVsQ2xhc3MiLCJjb21wdXRlQ29tbW9uQW5jZXN0b3IiLCJub2RlMSIsIm5vZGUyIiwiYW5jZXN0cnkiLCJ1bnNoaWZ0IiwiYW5jZXN0cnkxIiwiYW5jZXN0cnkyIiwiY29tcHV0ZUVuY2xvc2luZ01hcmt1cE5vZGUiLCJzZWwiLCJpbmNsdWRlcyIsImdldENvbW1hbmRTdGF0ZSIsImNtZCIsIm1hcmt1cE5vZGUiLCJsZW4iLCJsZWFkaW5nIiwidHJhaWxpbmciLCJpc0NvbGxhcHNlZCIsImFuY2VzdG9yIiwidG9nZ2xlQ29tbWFuZFN0YXRlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7SUFBQSxNQUFNQSxHQUFHLEdBQTJCO0lBQ2xDQyxFQUFBQSxVQUFVLEVBQUUsQ0FBMlIseVJBQUEsQ0FBQTtJQUN2U0MsRUFBQUEsSUFBSSxFQUFFLENBQTBZLHdZQUFBLENBQUE7SUFDaFpDLEVBQ0FDLElBQUksRUFBRSxDQUErVSw2VUFBQSxDQUFBO0lBQ3JWQyxFQUFBQSxFQUFFLEVBQUUsQ0FBZ0ssOEpBQUEsQ0FBQTtJQUNwS0MsRUFBQUEsRUFBRSxFQUFFLENBQWtLLGdLQUFBLENBQUE7SUFDdEtDLEVBQUFBLEVBQUUsRUFBRSxDQUFpSSwrSEFBQSxDQUFBO0lBQ3JJQyxFQUFBQSxLQUFLLEVBQUUsQ0FBK0gsNkhBQUEsQ0FBQTtJQUN0SUMsRUFB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QUFBLElBQUksQ0FBQ3JWLGVBQWUsQ0FBQzVCLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQzJJLGdCQUFnQixDQUFDM0ksT0FBTyxDQUFDLENBQUM7SUFDaEU7TUFFUXNSLFFBQVFBLENBQUNDLFlBQTBCLEVBQUE7UUFDekMsS0FBSyxJQUFJckIsUUFBUSxJQUFJLElBQUksQ0FBQ2xILFNBQVMsQ0FBQ0csSUFBSSxFQUFFO0lBQ3hDK0csTUFBQUEsUUFBUSxDQUFDO0lBQUVxQixRQUFBQTtJQUFZLE9BQUUsQ0FBQztJQUM1QjtJQUNGO0lBRVFKLEVBQUFBLGFBQWFBLEdBQUE7SUFDbkIsSUFBQSxJQUFJelAsS0FBSyxHQUFHLElBQUksQ0FBQzJJLFlBQVksQ0FBQyxLQUFLLENBQUM7SUFDcEMsSUFBQSxJQUFJckksTUFBTSxHQUFHLElBQUksQ0FBQ3FJLFlBQVksQ0FBQyxJQUFJLENBQUM7SUFFcEM7UUFDQSxJQUFJLENBQUN0QixhQUFhLEdBQUc7SUFDbkJySCxNQUFBQSxLQUFLLEVBQUVBLEtBQUs7SUFDWk0sTUFBQUEsTUFBTSxFQUFFQTtTQUNUO0lBRUQsSUFBQSxJQUFJLElBQUksQ0FBQ2dILFNBQVMsQ0FBQ0UsU0FBUyxJQUFJLElBQUksQ0FBQ0YsU0FBUyxDQUFDRSxTQUFTLENBQUN2SSxNQUFNLEVBQUU7VUFDL0QsSUFBSW1CLFlBQVksR0FBRyxJQUFJLENBQUNtVixlQUFlLENBQUN2VixLQUFLLEVBQUVNLE1BQU0sQ0FBQztVQUN0RCxJQUFJLElBQUksQ0FBQzJHLGdCQUFnQixFQUFFO1lBQ3pCdkksTUFBTSxDQUFDQyxNQUFNLENBQUMsSUFBSSxDQUFDc0ksZ0JBQWdCLEVBQUU3RyxZQUFZLENBQUM7SUFDcEQsT0FBQyxNQUFNO1lBQ0wsSUFBSSxDQUFDNkcsZ0JBQWdCLEdBQUd2SSxNQUFNLENBQUNDLE1BQU0sQ0FBQyxFQUFFLEVBQUV5QixZQUFZLENBQUM7SUFDekQ7VUFDQSxLQUFLLElBQUlvTyxRQUFRLElBQUksSUFBSSxDQUFDbEgsU0FBUyxDQUFDRSxTQUFTLEVBQUU7SUFDN0NnSCxRQUFBQSxRQUFRLENBQUM7SUFDUHhPLFVBQUFBLEtBQUssRUFBRUEsS0FBTTtJQUNiTSxVQUFBQSxNQUFNLEVBQUVBLE1BQU87Y0FDZkYsWUFBWSxFQUFFLElBQUksQ0FBQzZHO0lBQ3BCLFNBQUEsQ0FBQztJQUNKO0lBQ0Y7SUFDRjtJQUNEOzs7Ozs7Ozs7IiwieF9nb29nbGVfaWdub3JlTGlzdCI6WzIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNSwxNiwxNywxOCwxOSwyMCwyMSwyMiwyMywyNCwyNSwyNiwyNywyOCwyOSwzMCwzMSwzMiwzMywzNCwzNSwzNiwzNywzOCwzOSw0MCw0MSw0Miw0Myw0NCw0NSw0Niw0Nyw0OCw0OV19{"version":3,"file":"index.js","sources":["src/svg/svg.ts","src/TinyMDECommandBar.ts","node_modules/core-js/internals/global-this.js","node_modules/core-js/internals/fails.js","node_modules/core-js/internals/descriptors.js","node_modules/core-js/internals/function-bind-native.js","node_modules/core-js/internals/function-uncurry-this.js","node_modules/core-js/internals/is-callable.js","node_modules/core-js/internals/is-null-or-undefined.js","node_modules/core-js/internals/require-object-coercible.js","node_modules/core-js/internals/to-object.js","node_modules/core-js/internals/has-own-property.js","node_modules/core-js/internals/function-name.js","node_modules/core-js/internals/is-pure.js","node_modules/core-js/internals/define-global-property.js","node_modules/core-js/internals/shared-store.js","node_modules/core-js/internals/inspect-source.js","node_modules/core-js/internals/weak-map-basic-detection.js","node_modules/core-js/internals/is-object.js","node_modules/core-js/internals/document-create-element.js","node_modules/core-js/internals/ie8-dom-define.js","node_modules/core-js/internals/v8-prototype-define-bug.js","node_modules/core-js/internals/an-object.js","node_modules/core-js/internals/function-call.js","node_modules/core-js/internals/get-built-in.js","node_modules/core-js/internals/object-is-prototype-of.js","node_modules/core-js/internals/environment-user-agent.js","node_modules/core-js/internals/environment-v8-version.js","node_modules/core-js/internals/symbol-constructor-detection.js","node_modules/core-js/internals/use-symbol-as-uid.js","node_modules/core-js/internals/is-symbol.js","node_modules/core-js/internals/try-to-string.js","node_modules/core-js/internals/a-callable.js","node_modules/core-js/internals/get-method.js","node_modules/core-js/internals/ordinary-to-primitive.js","node_modules/core-js/internals/shared.js","node_modules/core-js/internals/uid.js","node_modules/core-js/internals/well-known-symbol.js","node_modules/core-js/internals/to-primitive.js","node_modules/core-js/internals/to-property-key.js","node_modules/core-js/internals/object-define-property.js","node_modules/core-js/internals/create-property-descriptor.js","node_modules/core-js/internals/create-non-enumerable-property.js","node_modules/core-js/internals/shared-key.js","node_modules/core-js/internals/hidden-keys.js","node_modules/core-js/internals/internal-state.js","node_modules/core-js/internals/make-built-in.js","node_modules/core-js/internals/define-built-in-accessor.js","node_modules/core-js/internals/regexp-flags.js","node_modules/core-js/modules/es.regexp.flags.js","src/grammar.ts","src/TinyMDE.ts"],"sourcesContent":["const svg: Record<string, string> = {\n blockquote: `<svg height=\"18\" width=\"18\"><rect width=\"5\" height=\"5\" x=\"3\" y=\"4\" ry=\"1\"/><rect ry=\"1\" y=\"4\" x=\"10\" height=\"5\" width=\"5\"/><path d=\"M8 6.999v3c0 1-1 3-1 3s-.331 1-1.331 1h-1c-1 0-.669-1-.669-1s1-2 1-3v-3zm7 0v3c0 1-1 3-1 3s-.331 1-1.331 1h-1c-1 0-.669-1-.669-1s1-2 1-3v-3z\"/></svg>`,\n bold: `<svg height=\"18\" width=\"18\"><path d=\"M4 2a1 1 0 00-1 1v12a1 1 0 001 1h6c4 0 5-2 5-4 0-1.322-.434-2.636-1.885-3.381C13.772 7.885 14 6.945 14 6c0-2-1-4-5-4zm1 2h4c1.668 0 2.32.393 2.6.672.28.279.4.662.4 1.328s-.12 1.057-.4 1.338c-.275.274-1.014.646-2.6.662H5zm5 6c1.666.005 2.318.388 2.596.666.277.278.404.667.404 1.334s-.127 1.06-.404 1.338c-.278.278-.93.66-2.596.662l-4.992.004L5 10z\"/></svg>`,\n clear_formatting: `<svg height=\"18\" width=\"18\"><path d=\"M11.03 1a1 1 0 00-.74.3l-9 9a1 1 0 000 1.4l4 4A1 1 0 006 16h2a1 1 0 00.7-.3l8-8a1 1 0 000-1.4l-5-5a1 1 0 00-.67-.3zM8.7 5.7l3.58 3.6L7.6 14H6.4l-3-3 5.3-5.3z\"/><rect ry=\".8\" rx=\".8\" y=\"14\" x=\"16\" height=\"2\" width=\"2\"/><rect width=\"2\" height=\"2\" x=\"13\" y=\"14\" rx=\".8\" ry=\".8\"/><rect ry=\".8\" rx=\".8\" y=\"14\" x=\"10\" height=\"2\" width=\"2\"/></svg>`,\n code: `<svg height=\"18\" width=\"18\"><path d=\"M13.5 2.994a.5.5 0 00-.5.5.5.5 0 000 .034V4.53a5.993 5.993 0 00-7.451-.445A6 6 0 1012.45 13.9a5.99 5.99 0 001.346-1.334.5.5 0 00.096-.101.5.5 0 00-.12-.698.5.5 0 00-.697.12l-.004-.005a5 5 0 01-1.197 1.2 5 5 0 111.215-6.965.5.5 0 00.697.12.5.5 0 00.211-.44V4.745H14V3.493a.5.5 0 00-.5-.5z\"/></svg>`,\n h1: `<svg height=\"18\" width=\"18\"><path d=\"M3 2s0-1 1-1h1c1 0 1 1 1 1v6h6V2s0-1 1-1h1c1 0 1 1 1 1v14s0 1-1 1h-1c-1 0-1-1-1-1v-6H6v6s0 1-1 1H4c-1 0-1-1-1-1z\"/></svg>`,\n h2: `<svg height=\"18\" width=\"18\"><path d=\"M4 2s0-1 1-1 1 1 1 1v6c1-1 2-1 4-1 3 0 4 2 4 4v5s0 1-1 1-1-1-1-1v-5c0-1.094-1-2-2-2-2 0-3 0-4 2v5s0 1-1 1-1-1-1-1z\"/></svg>`,\n hr: `<svg height=\"18\" width=\"18\"><rect ry=\"1\" y=\"8\" height=\"2\" width=\"18\" style=\"font-variation-settings:normal;marker:none\"/></svg>`,\n image: `<svg height=\"18\" width=\"18\"><path d=\"M1 2v14h16V2H1zm2 2h12v7l-3-3-4 4-2-2-3 3V4z\"/><circle r=\"1.5\" cy=\"6.5\" cx=\"5.5\"/></svg>`,\n italic: `<svg height=\"18\" width=\"18\"><path d=\"M9 2a1 1 0 000 2L7 14a1 1 0 100 2h2a1 1 0 000-2l2-10a1 1 0 100-2z\"/></svg>`,\n link: `<svg height=\"18\" width=\"18\"><path d=\"M9.07 5.18a3.9 3.9 0 00-1.52.43C6.31 6.22 5.3 7.29 4.3 8.29c-1 1-2.07 2.02-2.68 3.26-.31.62-.5 1.33-.41 2.07.09.75.48 1.47 1.1 2.09.61.61 1.33 1 2.08 1.1.74.09 1.45-.1 2.07-.42 1.24-.61 2.26-1.68 3.26-2.68.46-.47.94-.94 1.39-1.44l-.43.26c-.68.34-1.49.56-2.36.46-.2-.03-.4-.08-.6-.14-.79.76-1.55 1.45-2.16 1.76-.38.19-.67.24-.92.21-.26-.03-.54-.14-.92-.53-.39-.38-.5-.66-.53-.91-.03-.26.02-.55.21-.93.39-.76 1.32-1.74 2.32-2.74 1-1 1.98-1.93 2.74-2.32.38-.19.67-.24.93-.21.25.03.53.14.91.53.39.38.5.66.53.92v.06l1.12-1.06.44-.47c-.18-.3-.4-.6-.67-.87-.62-.61-1.34-1-2.09-1.1a3.08 3.08 0 00-.55-.01z\"/><path d=\"M13.07.86a3.9 3.9 0 00-1.52.43c-1.24.62-2.26 1.69-3.26 2.69-.46.47-.94.94-1.39 1.43.15-.08.28-.18.43-.25a4.4 4.4 0 012.36-.46c.2.02.4.07.6.14.79-.77 1.55-1.46 2.16-1.76.38-.19.67-.25.93-.21.25.03.53.14.91.52.39.38.5.66.53.92.03.26-.02.55-.21.93-.39.76-1.32 1.74-2.32 2.74-1 1-1.98 1.93-2.74 2.31-.38.2-.67.25-.93.22-.25-.04-.53-.15-.91-.53-.39-.38-.5-.66-.53-.92V9c-.36.33-.73.67-1.12 1.06l-.43.46c.17.3.4.6.66.87.62.62 1.34 1 2.08 1.1.75.1 1.46-.1 2.08-.41 1.24-.62 2.26-1.69 3.26-2.69s2.07-2.02 2.68-3.26c.31-.62.5-1.32.41-2.07a3.63 3.63 0 00-1.1-2.08c-.61-.62-1.33-1-2.07-1.1a3.08 3.08 0 00-.56-.02z\"/></svg>`,\n ol: `<svg height=\"18\" width=\"18\"><path d=\"M1.5 7a.5.5 0 100 1h1a.5.5 0 01.5.5c0 .164-.08.31-.14.355l-1.655 1.25A.492.492 0 001 10.5a.5.5 0 00.5.5h2a.5.5 0 000-1H3l.398-.299A1.5 1.5 0 002.5 7z\"/><path d=\"M1.5 12c-.667 0-.667 1 0 1h1.25c.333 0 .333.5 0 .5H2.5c-.667 0-.667 1 0 1h.25c.333 0 .333.5 0 .5H1.5c-.667 0-.667 1 0 1h1c.398 0 .78-.131 1.06-.365.282-.235.44-.554.44-.885a1.121 1.121 0 00-.303-.75c.191-.204.3-.47.303-.75 0-.332-.158-.651-.44-.885-.3-.241-.675-.37-1.06-.365z\"/><rect y=\"13\" x=\"6\" height=\"2\" width=\"12\" ry=\"1\"/><rect ry=\"1\" width=\"12\" height=\"2\" x=\"6\" y=\"8\"/><rect y=\"3\" x=\"6\" height=\"2\" width=\"12\" ry=\"1\"/><path d=\"M1.5 2a.5.5 0 100 1H2v2h-.5a.5.5 0 100 1h2a.5.5 0 100-1H3V2.5c0-.277-.223-.5-.5-.5z\"/></svg>`,\n redo: `<svg height=\"18\" width=\"18\"><path d=\"M 7.2695308,2.7050781 C 8.1128755,2.7081581 8.9529895,2.8712156 9.730469,3.1347656 11.408874,3.7037121 12.90142,4.6847104 14,5.6367188 V 4 h 2 V 9 H 11 V 7 h 1.509765 C 11.59075,6.2485173 10.340208,5.453808 9.0878904,5.0292969 7.4309398,4.4676231 5.9453458,4.468717 4.7070308,5.7070312 c -1.225014,1.2250142 -1.409769,2.7206953 -0.779297,4.2968748 0.630472,1.57618 2.167475,3.158006 4.4433598,4.06836 l -0.7421878,1.855468 c -2.724115,-1.089646 -4.687112,-3.00782 -5.55664,-5.18164 -0.869528,-2.1738206 -0.554283,-4.6781393 1.220703,-6.4531252 0.923857,-0.9238568 2.015388,-1.388828 3.134765,-1.5351563 0.279845,-0.036582 0.560682,-0.053761 0.841797,-0.052734 z\" /></svg>`,\n strikethrough: `<svg width=\"18\" height=\"18\"><path d=\"M10 2C6 2 4 4 4 6c0 .338.08.672.193 1h2.34C6.113 6.629 6 6.295 6 6c0-.334.117-.725.691-1.154C7.265 4.416 8.331 4 10 4h3a1 1 0 000-2zm1.477 9c.413.368.523.706.523 1 0 .334-.127.712-.701 1.143-.575.43-1.632.85-3.299.857l-1.006.007V14H5a1 1 0 000 2h3c4 0 6-2 6-4 0-.338-.081-.672-.195-1z\"/><rect ry=\"1\" y=\"8\" x=\"1\" height=\"2\" width=\"16\"/></svg>`,\n ul: `<svg height=\"18\" width=\"18\"><circle cx=\"2\" cy=\"9\" r=\"2\"/><circle cy=\"4\" cx=\"2\" r=\"2\"/><rect y=\"3\" x=\"6\" height=\"2\" width=\"12\" ry=\"1\"/><circle cx=\"2\" cy=\"14\" r=\"2\"/><rect ry=\"1\" width=\"12\" height=\"2\" x=\"6\" y=\"8\"/><rect y=\"13\" x=\"6\" height=\"2\" width=\"12\" ry=\"1\"/></svg>`,\n undo: `<svg height=\"18\" width=\"18\"><path d=\"M 10.730469 2.7050781 C 9.8871243 2.7081594 9.0470103 2.8712156 8.2695312 3.1347656 C 6.5911256 3.7037121 5.0985797 4.6847104 4 5.6367188 L 4 4 L 2 4 L 2 9 L 7 9 L 7 7 L 5.4902344 7 C 6.4092499 6.2485173 7.6597914 5.453808 8.9121094 5.0292969 C 10.56906 4.4676231 12.054654 4.468717 13.292969 5.7070312 C 14.517983 6.9320454 14.702738 8.4277265 14.072266 10.003906 C 13.441794 11.580086 11.904791 13.161912 9.6289062 14.072266 L 10.371094 15.927734 C 13.095209 14.838088 15.058206 12.919914 15.927734 10.746094 C 16.797262 8.5722734 16.482017 6.0679547 14.707031 4.2929688 C 13.783174 3.369112 12.691643 2.9041408 11.572266 2.7578125 C 11.292421 2.7212304 11.011584 2.704051 10.730469 2.7050781 z \" /></svg>\n`\n};\n\nexport default svg;","import svg from \"./svg/svg\";\nimport { Editor, Position, SelectionEvent } from \"./TinyMDE\";\n\nconst isMacLike = /(Mac|iPhone|iPod|iPad)/i.test(\n typeof navigator !== \"undefined\" ? navigator.platform : \"\"\n);\n\nexport interface CommandAction {\n (editor: Editor): void;\n}\n\nexport interface CommandEnabled {\n (editor: Editor, focus?: Position, anchor?: Position): boolean | null;\n}\n\nexport interface CommandDefinition {\n name: string;\n action: string | CommandAction;\n innerHTML: string;\n title: string;\n hotkey?: string;\n enabled?: CommandEnabled;\n}\n\nexport interface CommandBarProps {\n element?: string | HTMLElement;\n editor?: Editor;\n commands?: (string | CommandDefinition)[];\n}\n\ninterface Hotkey {\n modifiers: string[];\n command: string;\n key?: string;\n code?: string;\n}\n\nconst DefaultCommands: Record<string, CommandDefinition> = {\n bold: {\n name: \"bold\",\n action: \"bold\",\n innerHTML: svg.bold,\n title: \"Bold\",\n hotkey: \"Mod-B\",\n },\n italic: {\n name: \"italic\",\n action: \"italic\",\n innerHTML: svg.italic,\n title: \"Italic\",\n hotkey: \"Mod-I\",\n },\n strikethrough: {\n name: \"strikethrough\",\n action: \"strikethrough\",\n innerHTML: svg.strikethrough,\n title: \"Strikethrough\",\n hotkey: \"Mod2-Shift-5\",\n },\n code: {\n name: \"code\",\n action: \"code\",\n innerHTML: svg.code,\n title: \"Format as code\",\n },\n h1: {\n name: \"h1\",\n action: \"h1\",\n innerHTML: svg.h1,\n title: \"Level 1 heading\",\n hotkey: \"Mod-Shift-1\",\n },\n h2: {\n name: \"h2\",\n action: \"h2\",\n innerHTML: svg.h2,\n title: \"Level 2 heading\",\n hotkey: \"Mod-Shift-2\",\n },\n ul: {\n name: \"ul\",\n action: \"ul\",\n innerHTML: svg.ul,\n title: \"Bulleted list\",\n },\n ol: {\n name: \"ol\",\n action: \"ol\",\n innerHTML: svg.ol,\n title: \"Numbered list\",\n },\n blockquote: {\n name: \"blockquote\",\n action: \"blockquote\",\n innerHTML: svg.blockquote,\n title: \"Quote\",\n hotkey: \"Mod2-Shift-Q\",\n },\n insertLink: {\n name: \"insertLink\",\n action: (editor: Editor) => {\n if (editor.isInlineFormattingAllowed()) editor.wrapSelection(\"[\", \"]()\");\n },\n enabled: (editor: Editor) =>\n editor.isInlineFormattingAllowed() ? false : null,\n innerHTML: svg.link,\n title: \"Insert link\",\n hotkey: \"Mod-K\",\n },\n insertImage: {\n name: \"insertImage\",\n action: (editor: Editor) => {\n if (editor.isInlineFormattingAllowed()) editor.wrapSelection(\"![\", \"]()\");\n },\n enabled: (editor: Editor) =>\n editor.isInlineFormattingAllowed() ? false : null,\n innerHTML: svg.image,\n title: \"Insert image\",\n hotkey: \"Mod2-Shift-I\",\n },\n hr: {\n name: \"hr\",\n action: (editor: Editor) => editor.paste(\"\\n***\\n\"),\n enabled: () => false,\n innerHTML: svg.hr,\n title: \"Insert horizontal line\",\n hotkey: \"Mod2-Shift-L\",\n },\n undo: {\n name: \"undo\",\n action: (editor: Editor) => editor.undo(),\n enabled: (editor: Editor) => (editor.canUndo ? false : null),\n innerHTML: svg.undo,\n title: \"Undo\",\n },\n redo: {\n name: \"redo\",\n action: (editor: Editor) => editor.redo(),\n enabled: (editor: Editor) => (editor.canRedo ? false : null),\n innerHTML: svg.redo,\n title: \"Redo\",\n },\n};\n\nexport class CommandBar {\n public e: HTMLDivElement | null = null;\n public editor: Editor | null = null;\n public commands: Record<string, CommandDefinition> = {};\n public buttons: Record<string, HTMLDivElement> = {};\n public state: Record<string, boolean | null> = {};\n private hotkeys: Hotkey[] = [];\n\n constructor(props: CommandBarProps) {\n this.e = null;\n this.editor = null;\n this.commands = {};\n this.buttons = {};\n this.state = {};\n this.hotkeys = [];\n\n let element: HTMLElement | null = null;\n if (typeof props.element === 'string') {\n element = document.getElementById(props.element);\n } else if (props.element) {\n element = props.element;\n }\n \n if (!element) {\n element = document.body;\n }\n\n this.createCommandBarElement(\n element,\n props.commands || [\n \"bold\",\n \"italic\",\n \"strikethrough\",\n \"|\",\n \"code\",\n \"|\",\n \"h1\",\n \"h2\",\n \"|\",\n \"ul\",\n \"ol\",\n \"|\",\n \"blockquote\",\n \"hr\",\n \"|\",\n \"undo\",\n \"redo\",\n \"|\",\n \"insertLink\",\n \"insertImage\",\n ]\n );\n document.addEventListener(\"keydown\", (e) => this.handleKeydown(e));\n if (props.editor) this.setEditor(props.editor);\n }\n\n private createCommandBarElement(parentElement: HTMLElement, commands: (string | CommandDefinition)[]): void {\n this.e = document.createElement(\"div\");\n this.e.className = \"TMCommandBar\";\n\n for (let command of commands) {\n if (command === \"|\") {\n let el = document.createElement(\"div\");\n el.className = \"TMCommandDivider\";\n this.e.appendChild(el);\n } else {\n let commandName: string;\n if (typeof command === \"string\") {\n if (DefaultCommands[command]) {\n commandName = command;\n this.commands[commandName] = DefaultCommands[commandName];\n } else {\n continue;\n }\n } else if (typeof command === \"object\" && command.name) {\n commandName = command.name;\n this.commands[commandName] = {} as CommandDefinition;\n if (DefaultCommands[commandName]) {\n Object.assign(this.commands[commandName], DefaultCommands[commandName]);\n }\n Object.assign(this.commands[commandName], command);\n } else {\n continue;\n }\n\n let title = this.commands[commandName].title || commandName;\n\n if (this.commands[commandName].hotkey) {\n const keys = this.commands[commandName].hotkey!.split(\"-\");\n let modifiers: string[] = [];\n let modifierexplanation: string[] = [];\n \n for (let i = 0; i < keys.length - 1; i++) {\n switch (keys[i]) {\n case \"Ctrl\":\n modifiers.push(\"ctrlKey\");\n modifierexplanation.push(\"Ctrl\");\n break;\n case \"Cmd\":\n modifiers.push(\"metaKey\");\n modifierexplanation.push(\"⌘\");\n break;\n case \"Alt\":\n modifiers.push(\"altKey\");\n modifierexplanation.push(\"Alt\");\n break;\n case \"Option\":\n modifiers.push(\"altKey\");\n modifierexplanation.push(\"⌥\");\n break;\n case \"Win\":\n modifiers.push(\"metaKey\");\n modifierexplanation.push(\"⊞ Win\");\n break;\n case \"Shift\":\n modifiers.push(\"shiftKey\");\n modifierexplanation.push(\"⇧\");\n break;\n case \"Mod\":\n if (isMacLike) {\n modifiers.push(\"metaKey\");\n modifierexplanation.push(\"⌘\");\n } else {\n modifiers.push(\"ctrlKey\");\n modifierexplanation.push(\"Ctrl\");\n }\n break;\n case \"Mod2\":\n modifiers.push(\"altKey\");\n if (isMacLike) modifierexplanation.push(\"⌥\");\n else modifierexplanation.push(\"Alt\");\n break;\n }\n }\n \n modifierexplanation.push(keys[keys.length - 1]);\n let hotkey: Hotkey = {\n modifiers: modifiers,\n command: commandName,\n };\n \n const lastKey = keys[keys.length - 1];\n if (lastKey.match(/^[0-9]$/)) {\n hotkey.code = `Digit${lastKey}`;\n } else if (lastKey.match(/^[a-zA-Z]$/)) {\n hotkey.code = `Key${lastKey.toUpperCase()}`;\n } else {\n hotkey.key = lastKey.toLowerCase();\n }\n this.hotkeys.push(hotkey);\n title = title.concat(` (${modifierexplanation.join(\"+\")})`);\n }\n\n this.buttons[commandName] = document.createElement(\"div\");\n this.buttons[commandName].className = \"TMCommandButton TMCommandButton_Disabled\";\n this.buttons[commandName].title = title;\n this.buttons[commandName].innerHTML = this.commands[commandName].innerHTML;\n\n this.buttons[commandName].addEventListener(\"mousedown\", (e) =>\n this.handleClick(commandName, e)\n );\n this.e.appendChild(this.buttons[commandName]);\n }\n }\n parentElement.appendChild(this.e);\n }\n\n private handleClick(commandName: string, event: Event): void {\n if (!this.editor) return;\n event.preventDefault();\n\n // Focus the editor if it's not already focused\n if (this.editor.e) {\n const editorHadFocus = this.editor.e.contains(document.activeElement);\n this.editor.e.focus();\n // Only restore the last selection if the editor was not focused before\n if (!editorHadFocus) {\n this.editor.restoreLastSelection();\n }\n }\n\n if (typeof this.commands[commandName].action === \"string\") {\n if (this.state[commandName] === false)\n (this.editor as any).setCommandState(commandName, true);\n else (this.editor as any).setCommandState(commandName, false);\n } else if (typeof this.commands[commandName].action === \"function\") {\n (this.commands[commandName].action as CommandAction)(this.editor);\n }\n }\n\n public setEditor(editor: Editor): void {\n this.editor = editor;\n editor.addEventListener(\"selection\", (e) => this.handleSelection(e));\n }\n\n private handleSelection(event: SelectionEvent): void {\n if (event.commandState) {\n for (let command in this.commands) {\n if (event.commandState[command] === undefined) {\n if (this.commands[command].enabled) {\n this.state[command] = this.commands[command].enabled!(\n this.editor!,\n event.focus,\n event.anchor\n );\n } else {\n this.state[command] = event.focus ? false : null;\n }\n } else {\n this.state[command] = event.commandState[command];\n }\n\n if (this.state[command] === true) {\n this.buttons[command].className = \"TMCommandButton TMCommandButton_Active\";\n } else if (this.state[command] === false) {\n this.buttons[command].className = \"TMCommandButton TMCommandButton_Inactive\";\n } else {\n this.buttons[command].className = \"TMCommandButton TMCommandButton_Disabled\";\n }\n }\n }\n }\n\n private handleKeydown(event: KeyboardEvent): void {\n outer: for (let hotkey of this.hotkeys) {\n if (\n (hotkey.key && event.key.toLowerCase() === hotkey.key) ||\n (hotkey.code && event.code === hotkey.code)\n ) {\n for (let modifier of hotkey.modifiers) {\n if (!(event as any)[modifier]) continue outer;\n }\n this.handleClick(hotkey.command, event);\n return;\n }\n }\n }\n}\n\nexport default CommandBar;","'use strict';\nvar check = function (it) {\n return it && it.Math === Math && it;\n};\n\n// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nmodule.exports =\n // eslint-disable-next-line es/no-global-this -- safe\n check(typeof globalThis == 'object' && globalThis) ||\n check(typeof window == 'object' && window) ||\n // eslint-disable-next-line no-restricted-globals -- safe\n check(typeof self == 'object' && self) ||\n check(typeof global == 'object' && global) ||\n check(typeof this == 'object' && this) ||\n // eslint-disable-next-line no-new-func -- fallback\n (function () { return this; })() || Function('return this')();\n","'use strict';\nmodule.exports = function (exec) {\n try {\n return !!exec();\n } catch (error) {\n return true;\n }\n};\n","'use strict';\nvar fails = require('../internals/fails');\n\n// Detect IE8's incomplete defineProperty implementation\nmodule.exports = !fails(function () {\n // eslint-disable-next-line es/no-object-defineproperty -- required for testing\n return Object.defineProperty({}, 1, { get: function () { return 7; } })[1] !== 7;\n});\n","'use strict';\nvar fails = require('../internals/fails');\n\nmodule.exports = !fails(function () {\n // eslint-disable-next-line es/no-function-prototype-bind -- safe\n var test = (function () { /* empty */ }).bind();\n // eslint-disable-next-line no-prototype-builtins -- safe\n return typeof test != 'function' || test.hasOwnProperty('prototype');\n});\n","'use strict';\nvar NATIVE_BIND = require('../internals/function-bind-native');\n\nvar FunctionPrototype = Function.prototype;\nvar call = FunctionPrototype.call;\n// eslint-disable-next-line es/no-function-prototype-bind -- safe\nvar uncurryThisWithBind = NATIVE_BIND && FunctionPrototype.bind.bind(call, call);\n\nmodule.exports = NATIVE_BIND ? uncurryThisWithBind : function (fn) {\n return function () {\n return call.apply(fn, arguments);\n };\n};\n","'use strict';\n// https://tc39.es/ecma262/#sec-IsHTMLDDA-internal-slot\nvar documentAll = typeof document == 'object' && document.all;\n\n// `IsCallable` abstract operation\n// https://tc39.es/ecma262/#sec-iscallable\n// eslint-disable-next-line unicorn/no-typeof-undefined -- required for testing\nmodule.exports = typeof documentAll == 'undefined' && documentAll !== undefined ? function (argument) {\n return typeof argument == 'function' || argument === documentAll;\n} : function (argument) {\n return typeof argument == 'function';\n};\n","'use strict';\n// we can't use just `it == null` since of `document.all` special case\n// https://tc39.es/ecma262/#sec-IsHTMLDDA-internal-slot-aec\nmodule.exports = function (it) {\n return it === null || it === undefined;\n};\n","'use strict';\nvar isNullOrUndefined = require('../internals/is-null-or-undefined');\n\nvar $TypeError = TypeError;\n\n// `RequireObjectCoercible` abstract operation\n// https://tc39.es/ecma262/#sec-requireobjectcoercible\nmodule.exports = function (it) {\n if (isNullOrUndefined(it)) throw new $TypeError(\"Can't call method on \" + it);\n return it;\n};\n","'use strict';\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nvar $Object = Object;\n\n// `ToObject` abstract operation\n// https://tc39.es/ecma262/#sec-toobject\nmodule.exports = function (argument) {\n return $Object(requireObjectCoercible(argument));\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar toObject = require('../internals/to-object');\n\nvar hasOwnProperty = uncurryThis({}.hasOwnProperty);\n\n// `HasOwnProperty` abstract operation\n// https://tc39.es/ecma262/#sec-hasownproperty\n// eslint-disable-next-line es/no-object-hasown -- safe\nmodule.exports = Object.hasOwn || function hasOwn(it, key) {\n return hasOwnProperty(toObject(it), key);\n};\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar hasOwn = require('../internals/has-own-property');\n\nvar FunctionPrototype = Function.prototype;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar getDescriptor = DESCRIPTORS && Object.getOwnPropertyDescriptor;\n\nvar EXISTS = hasOwn(FunctionPrototype, 'name');\n// additional protection from minified / mangled / dropped function names\nvar PROPER = EXISTS && (function something() { /* empty */ }).name === 'something';\nvar CONFIGURABLE = EXISTS && (!DESCRIPTORS || (DESCRIPTORS && getDescriptor(FunctionPrototype, 'name').configurable));\n\nmodule.exports = {\n EXISTS: EXISTS,\n PROPER: PROPER,\n CONFIGURABLE: CONFIGURABLE\n};\n","'use strict';\nmodule.exports = false;\n","'use strict';\nvar globalThis = require('../internals/global-this');\n\n// eslint-disable-next-line es/no-object-defineproperty -- safe\nvar defineProperty = Object.defineProperty;\n\nmodule.exports = function (key, value) {\n try {\n defineProperty(globalThis, key, { value: value, configurable: true, writable: true });\n } catch (error) {\n globalThis[key] = value;\n } return value;\n};\n","'use strict';\nvar IS_PURE = require('../internals/is-pure');\nvar globalThis = require('../internals/global-this');\nvar defineGlobalProperty = require('../internals/define-global-property');\n\nvar SHARED = '__core-js_shared__';\nvar store = module.exports = globalThis[SHARED] || defineGlobalProperty(SHARED, {});\n\n(store.versions || (store.versions = [])).push({\n version: '3.42.0',\n mode: IS_PURE ? 'pure' : 'global',\n copyright: '© 2014-2025 Denis Pushkarev (zloirock.ru)',\n license: 'https://github.com/zloirock/core-js/blob/v3.42.0/LICENSE',\n source: 'https://github.com/zloirock/core-js'\n});\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar isCallable = require('../internals/is-callable');\nvar store = require('../internals/shared-store');\n\nvar functionToString = uncurryThis(Function.toString);\n\n// this helper broken in `core-js@3.4.1-3.4.4`, so we can't use `shared` helper\nif (!isCallable(store.inspectSource)) {\n store.inspectSource = function (it) {\n return functionToString(it);\n };\n}\n\nmodule.exports = store.inspectSource;\n","'use strict';\nvar globalThis = require('../internals/global-this');\nvar isCallable = require('../internals/is-callable');\n\nvar WeakMap = globalThis.WeakMap;\n\nmodule.exports = isCallable(WeakMap) && /native code/.test(String(WeakMap));\n","'use strict';\nvar isCallable = require('../internals/is-callable');\n\nmodule.exports = function (it) {\n return typeof it == 'object' ? it !== null : isCallable(it);\n};\n","'use strict';\nvar globalThis = require('../internals/global-this');\nvar isObject = require('../internals/is-object');\n\nvar document = globalThis.document;\n// typeof document.createElement is 'object' in old IE\nvar EXISTS = isObject(document) && isObject(document.createElement);\n\nmodule.exports = function (it) {\n return EXISTS ? document.createElement(it) : {};\n};\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar fails = require('../internals/fails');\nvar createElement = require('../internals/document-create-element');\n\n// Thanks to IE8 for its funny defineProperty\nmodule.exports = !DESCRIPTORS && !fails(function () {\n // eslint-disable-next-line es/no-object-defineproperty -- required for testing\n return Object.defineProperty(createElement('div'), 'a', {\n get: function () { return 7; }\n }).a !== 7;\n});\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar fails = require('../internals/fails');\n\n// V8 ~ Chrome 36-\n// https://bugs.chromium.org/p/v8/issues/detail?id=3334\nmodule.exports = DESCRIPTORS && fails(function () {\n // eslint-disable-next-line es/no-object-defineproperty -- required for testing\n return Object.defineProperty(function () { /* empty */ }, 'prototype', {\n value: 42,\n writable: false\n }).prototype !== 42;\n});\n","'use strict';\nvar isObject = require('../internals/is-object');\n\nvar $String = String;\nvar $TypeError = TypeError;\n\n// `Assert: Type(argument) is Object`\nmodule.exports = function (argument) {\n if (isObject(argument)) return argument;\n throw new $TypeError($String(argument) + ' is not an object');\n};\n","'use strict';\nvar NATIVE_BIND = require('../internals/function-bind-native');\n\nvar call = Function.prototype.call;\n// eslint-disable-next-line es/no-function-prototype-bind -- safe\nmodule.exports = NATIVE_BIND ? call.bind(call) : function () {\n return call.apply(call, arguments);\n};\n","'use strict';\nvar globalThis = require('../internals/global-this');\nvar isCallable = require('../internals/is-callable');\n\nvar aFunction = function (argument) {\n return isCallable(argument) ? argument : undefined;\n};\n\nmodule.exports = function (namespace, method) {\n return arguments.length < 2 ? aFunction(globalThis[namespace]) : globalThis[namespace] && globalThis[namespace][method];\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\n\nmodule.exports = uncurryThis({}.isPrototypeOf);\n","'use strict';\nvar globalThis = require('../internals/global-this');\n\nvar navigator = globalThis.navigator;\nvar userAgent = navigator && navigator.userAgent;\n\nmodule.exports = userAgent ? String(userAgent) : '';\n","'use strict';\nvar globalThis = require('../internals/global-this');\nvar userAgent = require('../internals/environment-user-agent');\n\nvar process = globalThis.process;\nvar Deno = globalThis.Deno;\nvar versions = process && process.versions || Deno && Deno.version;\nvar v8 = versions && versions.v8;\nvar match, version;\n\nif (v8) {\n match = v8.split('.');\n // in old Chrome, versions of V8 isn't V8 = Chrome / 10\n // but their correct versions are not interesting for us\n version = match[0] > 0 && match[0] < 4 ? 1 : +(match[0] + match[1]);\n}\n\n// BrowserFS NodeJS `process` polyfill incorrectly set `.v8` to `0.0`\n// so check `userAgent` even if `.v8` exists, but 0\nif (!version && userAgent) {\n match = userAgent.match(/Edge\\/(\\d+)/);\n if (!match || match[1] >= 74) {\n match = userAgent.match(/Chrome\\/(\\d+)/);\n if (match) version = +match[1];\n }\n}\n\nmodule.exports = version;\n","'use strict';\n/* eslint-disable es/no-symbol -- required for testing */\nvar V8_VERSION = require('../internals/environment-v8-version');\nvar fails = require('../internals/fails');\nvar globalThis = require('../internals/global-this');\n\nvar $String = globalThis.String;\n\n// eslint-disable-next-line es/no-object-getownpropertysymbols -- required for testing\nmodule.exports = !!Object.getOwnPropertySymbols && !fails(function () {\n var symbol = Symbol('symbol detection');\n // Chrome 38 Symbol has incorrect toString conversion\n // `get-own-property-symbols` polyfill symbols converted to object are not Symbol instances\n // nb: Do not call `String` directly to avoid this being optimized out to `symbol+''` which will,\n // of course, fail.\n return !$String(symbol) || !(Object(symbol) instanceof Symbol) ||\n // Chrome 38-40 symbols are not inherited from DOM collections prototypes to instances\n !Symbol.sham && V8_VERSION && V8_VERSION < 41;\n});\n","'use strict';\n/* eslint-disable es/no-symbol -- required for testing */\nvar NATIVE_SYMBOL = require('../internals/symbol-constructor-detection');\n\nmodule.exports = NATIVE_SYMBOL &&\n !Symbol.sham &&\n typeof Symbol.iterator == 'symbol';\n","'use strict';\nvar getBuiltIn = require('../internals/get-built-in');\nvar isCallable = require('../internals/is-callable');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar USE_SYMBOL_AS_UID = require('../internals/use-symbol-as-uid');\n\nvar $Object = Object;\n\nmodule.exports = USE_SYMBOL_AS_UID ? function (it) {\n return typeof it == 'symbol';\n} : function (it) {\n var $Symbol = getBuiltIn('Symbol');\n return isCallable($Symbol) && isPrototypeOf($Symbol.prototype, $Object(it));\n};\n","'use strict';\nvar $String = String;\n\nmodule.exports = function (argument) {\n try {\n return $String(argument);\n } catch (error) {\n return 'Object';\n }\n};\n","'use strict';\nvar isCallable = require('../internals/is-callable');\nvar tryToString = require('../internals/try-to-string');\n\nvar $TypeError = TypeError;\n\n// `Assert: IsCallable(argument) is true`\nmodule.exports = function (argument) {\n if (isCallable(argument)) return argument;\n throw new $TypeError(tryToString(argument) + ' is not a function');\n};\n","'use strict';\nvar aCallable = require('../internals/a-callable');\nvar isNullOrUndefined = require('../internals/is-null-or-undefined');\n\n// `GetMethod` abstract operation\n// https://tc39.es/ecma262/#sec-getmethod\nmodule.exports = function (V, P) {\n var func = V[P];\n return isNullOrUndefined(func) ? undefined : aCallable(func);\n};\n","'use strict';\nvar call = require('../internals/function-call');\nvar isCallable = require('../internals/is-callable');\nvar isObject = require('../internals/is-object');\n\nvar $TypeError = TypeError;\n\n// `OrdinaryToPrimitive` abstract operation\n// https://tc39.es/ecma262/#sec-ordinarytoprimitive\nmodule.exports = function (input, pref) {\n var fn, val;\n if (pref === 'string' && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) return val;\n if (isCallable(fn = input.valueOf) && !isObject(val = call(fn, input))) return val;\n if (pref !== 'string' && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) return val;\n throw new $TypeError(\"Can't convert object to primitive value\");\n};\n","'use strict';\nvar store = require('../internals/shared-store');\n\nmodule.exports = function (key, value) {\n return store[key] || (store[key] = value || {});\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\n\nvar id = 0;\nvar postfix = Math.random();\nvar toString = uncurryThis(1.0.toString);\n\nmodule.exports = function (key) {\n return 'Symbol(' + (key === undefined ? '' : key) + ')_' + toString(++id + postfix, 36);\n};\n","'use strict';\nvar globalThis = require('../internals/global-this');\nvar shared = require('../internals/shared');\nvar hasOwn = require('../internals/has-own-property');\nvar uid = require('../internals/uid');\nvar NATIVE_SYMBOL = require('../internals/symbol-constructor-detection');\nvar USE_SYMBOL_AS_UID = require('../internals/use-symbol-as-uid');\n\nvar Symbol = globalThis.Symbol;\nvar WellKnownSymbolsStore = shared('wks');\nvar createWellKnownSymbol = USE_SYMBOL_AS_UID ? Symbol['for'] || Symbol : Symbol && Symbol.withoutSetter || uid;\n\nmodule.exports = function (name) {\n if (!hasOwn(WellKnownSymbolsStore, name)) {\n WellKnownSymbolsStore[name] = NATIVE_SYMBOL && hasOwn(Symbol, name)\n ? Symbol[name]\n : createWellKnownSymbol('Symbol.' + name);\n } return WellKnownSymbolsStore[name];\n};\n","'use strict';\nvar call = require('../internals/function-call');\nvar isObject = require('../internals/is-object');\nvar isSymbol = require('../internals/is-symbol');\nvar getMethod = require('../internals/get-method');\nvar ordinaryToPrimitive = require('../internals/ordinary-to-primitive');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar $TypeError = TypeError;\nvar TO_PRIMITIVE = wellKnownSymbol('toPrimitive');\n\n// `ToPrimitive` abstract operation\n// https://tc39.es/ecma262/#sec-toprimitive\nmodule.exports = function (input, pref) {\n if (!isObject(input) || isSymbol(input)) return input;\n var exoticToPrim = getMethod(input, TO_PRIMITIVE);\n var result;\n if (exoticToPrim) {\n if (pref === undefined) pref = 'default';\n result = call(exoticToPrim, input, pref);\n if (!isObject(result) || isSymbol(result)) return result;\n throw new $TypeError(\"Can't convert object to primitive value\");\n }\n if (pref === undefined) pref = 'number';\n return ordinaryToPrimitive(input, pref);\n};\n","'use strict';\nvar toPrimitive = require('../internals/to-primitive');\nvar isSymbol = require('../internals/is-symbol');\n\n// `ToPropertyKey` abstract operation\n// https://tc39.es/ecma262/#sec-topropertykey\nmodule.exports = function (argument) {\n var key = toPrimitive(argument, 'string');\n return isSymbol(key) ? key : key + '';\n};\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar IE8_DOM_DEFINE = require('../internals/ie8-dom-define');\nvar V8_PROTOTYPE_DEFINE_BUG = require('../internals/v8-prototype-define-bug');\nvar anObject = require('../internals/an-object');\nvar toPropertyKey = require('../internals/to-property-key');\n\nvar $TypeError = TypeError;\n// eslint-disable-next-line es/no-object-defineproperty -- safe\nvar $defineProperty = Object.defineProperty;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\nvar ENUMERABLE = 'enumerable';\nvar CONFIGURABLE = 'configurable';\nvar WRITABLE = 'writable';\n\n// `Object.defineProperty` method\n// https://tc39.es/ecma262/#sec-object.defineproperty\nexports.f = DESCRIPTORS ? V8_PROTOTYPE_DEFINE_BUG ? function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPropertyKey(P);\n anObject(Attributes);\n if (typeof O === 'function' && P === 'prototype' && 'value' in Attributes && WRITABLE in Attributes && !Attributes[WRITABLE]) {\n var current = $getOwnPropertyDescriptor(O, P);\n if (current && current[WRITABLE]) {\n O[P] = Attributes.value;\n Attributes = {\n configurable: CONFIGURABLE in Attributes ? Attributes[CONFIGURABLE] : current[CONFIGURABLE],\n enumerable: ENUMERABLE in Attributes ? Attributes[ENUMERABLE] : current[ENUMERABLE],\n writable: false\n };\n }\n } return $defineProperty(O, P, Attributes);\n} : $defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPropertyKey(P);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return $defineProperty(O, P, Attributes);\n } catch (error) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw new $TypeError('Accessors not supported');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n","'use strict';\nmodule.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar definePropertyModule = require('../internals/object-define-property');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\n\nmodule.exports = DESCRIPTORS ? function (object, key, value) {\n return definePropertyModule.f(object, key, createPropertyDescriptor(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n","'use strict';\nvar shared = require('../internals/shared');\nvar uid = require('../internals/uid');\n\nvar keys = shared('keys');\n\nmodule.exports = function (key) {\n return keys[key] || (keys[key] = uid(key));\n};\n","'use strict';\nmodule.exports = {};\n","'use strict';\nvar NATIVE_WEAK_MAP = require('../internals/weak-map-basic-detection');\nvar globalThis = require('../internals/global-this');\nvar isObject = require('../internals/is-object');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar hasOwn = require('../internals/has-own-property');\nvar shared = require('../internals/shared-store');\nvar sharedKey = require('../internals/shared-key');\nvar hiddenKeys = require('../internals/hidden-keys');\n\nvar OBJECT_ALREADY_INITIALIZED = 'Object already initialized';\nvar TypeError = globalThis.TypeError;\nvar WeakMap = globalThis.WeakMap;\nvar set, get, has;\n\nvar enforce = function (it) {\n return has(it) ? get(it) : set(it, {});\n};\n\nvar getterFor = function (TYPE) {\n return function (it) {\n var state;\n if (!isObject(it) || (state = get(it)).type !== TYPE) {\n throw new TypeError('Incompatible receiver, ' + TYPE + ' required');\n } return state;\n };\n};\n\nif (NATIVE_WEAK_MAP || shared.state) {\n var store = shared.state || (shared.state = new WeakMap());\n /* eslint-disable no-self-assign -- prototype methods protection */\n store.get = store.get;\n store.has = store.has;\n store.set = store.set;\n /* eslint-enable no-self-assign -- prototype methods protection */\n set = function (it, metadata) {\n if (store.has(it)) throw new TypeError(OBJECT_ALREADY_INITIALIZED);\n metadata.facade = it;\n store.set(it, metadata);\n return metadata;\n };\n get = function (it) {\n return store.get(it) || {};\n };\n has = function (it) {\n return store.has(it);\n };\n} else {\n var STATE = sharedKey('state');\n hiddenKeys[STATE] = true;\n set = function (it, metadata) {\n if (hasOwn(it, STATE)) throw new TypeError(OBJECT_ALREADY_INITIALIZED);\n metadata.facade = it;\n createNonEnumerableProperty(it, STATE, metadata);\n return metadata;\n };\n get = function (it) {\n return hasOwn(it, STATE) ? it[STATE] : {};\n };\n has = function (it) {\n return hasOwn(it, STATE);\n };\n}\n\nmodule.exports = {\n set: set,\n get: get,\n has: has,\n enforce: enforce,\n getterFor: getterFor\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar fails = require('../internals/fails');\nvar isCallable = require('../internals/is-callable');\nvar hasOwn = require('../internals/has-own-property');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar CONFIGURABLE_FUNCTION_NAME = require('../internals/function-name').CONFIGURABLE;\nvar inspectSource = require('../internals/inspect-source');\nvar InternalStateModule = require('../internals/internal-state');\n\nvar enforceInternalState = InternalStateModule.enforce;\nvar getInternalState = InternalStateModule.get;\nvar $String = String;\n// eslint-disable-next-line es/no-object-defineproperty -- safe\nvar defineProperty = Object.defineProperty;\nvar stringSlice = uncurryThis(''.slice);\nvar replace = uncurryThis(''.replace);\nvar join = uncurryThis([].join);\n\nvar CONFIGURABLE_LENGTH = DESCRIPTORS && !fails(function () {\n return defineProperty(function () { /* empty */ }, 'length', { value: 8 }).length !== 8;\n});\n\nvar TEMPLATE = String(String).split('String');\n\nvar makeBuiltIn = module.exports = function (value, name, options) {\n if (stringSlice($String(name), 0, 7) === 'Symbol(') {\n name = '[' + replace($String(name), /^Symbol\\(([^)]*)\\).*$/, '$1') + ']';\n }\n if (options && options.getter) name = 'get ' + name;\n if (options && options.setter) name = 'set ' + name;\n if (!hasOwn(value, 'name') || (CONFIGURABLE_FUNCTION_NAME && value.name !== name)) {\n if (DESCRIPTORS) defineProperty(value, 'name', { value: name, configurable: true });\n else value.name = name;\n }\n if (CONFIGURABLE_LENGTH && options && hasOwn(options, 'arity') && value.length !== options.arity) {\n defineProperty(value, 'length', { value: options.arity });\n }\n try {\n if (options && hasOwn(options, 'constructor') && options.constructor) {\n if (DESCRIPTORS) defineProperty(value, 'prototype', { writable: false });\n // in V8 ~ Chrome 53, prototypes of some methods, like `Array.prototype.values`, are non-writable\n } else if (value.prototype) value.prototype = undefined;\n } catch (error) { /* empty */ }\n var state = enforceInternalState(value);\n if (!hasOwn(state, 'source')) {\n state.source = join(TEMPLATE, typeof name == 'string' ? name : '');\n } return value;\n};\n\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n// eslint-disable-next-line no-extend-native -- required\nFunction.prototype.toString = makeBuiltIn(function toString() {\n return isCallable(this) && getInternalState(this).source || inspectSource(this);\n}, 'toString');\n","'use strict';\nvar makeBuiltIn = require('../internals/make-built-in');\nvar defineProperty = require('../internals/object-define-property');\n\nmodule.exports = function (target, name, descriptor) {\n if (descriptor.get) makeBuiltIn(descriptor.get, name, { getter: true });\n if (descriptor.set) makeBuiltIn(descriptor.set, name, { setter: true });\n return defineProperty.f(target, name, descriptor);\n};\n","'use strict';\nvar anObject = require('../internals/an-object');\n\n// `RegExp.prototype.flags` getter implementation\n// https://tc39.es/ecma262/#sec-get-regexp.prototype.flags\nmodule.exports = function () {\n var that = anObject(this);\n var result = '';\n if (that.hasIndices) result += 'd';\n if (that.global) result += 'g';\n if (that.ignoreCase) result += 'i';\n if (that.multiline) result += 'm';\n if (that.dotAll) result += 's';\n if (that.unicode) result += 'u';\n if (that.unicodeSets) result += 'v';\n if (that.sticky) result += 'y';\n return result;\n};\n","'use strict';\nvar globalThis = require('../internals/global-this');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar defineBuiltInAccessor = require('../internals/define-built-in-accessor');\nvar regExpFlags = require('../internals/regexp-flags');\nvar fails = require('../internals/fails');\n\n// babel-minify and Closure Compiler transpiles RegExp('.', 'd') -> /./d and it causes SyntaxError\nvar RegExp = globalThis.RegExp;\nvar RegExpPrototype = RegExp.prototype;\n\nvar FORCED = DESCRIPTORS && fails(function () {\n var INDICES_SUPPORT = true;\n try {\n RegExp('.', 'd');\n } catch (error) {\n INDICES_SUPPORT = false;\n }\n\n var O = {};\n // modern V8 bug\n var calls = '';\n var expected = INDICES_SUPPORT ? 'dgimsy' : 'gimsy';\n\n var addGetter = function (key, chr) {\n // eslint-disable-next-line es/no-object-defineproperty -- safe\n Object.defineProperty(O, key, { get: function () {\n calls += chr;\n return true;\n } });\n };\n\n var pairs = {\n dotAll: 's',\n global: 'g',\n ignoreCase: 'i',\n multiline: 'm',\n sticky: 'y'\n };\n\n if (INDICES_SUPPORT) pairs.hasIndices = 'd';\n\n for (var key in pairs) addGetter(key, pairs[key]);\n\n // eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\n var result = Object.getOwnPropertyDescriptor(RegExpPrototype, 'flags').get.call(O);\n\n return result !== expected || calls !== expected;\n});\n\n// `RegExp.prototype.flags` getter\n// https://tc39.es/ecma262/#sec-get-regexp.prototype.flags\nif (FORCED) defineBuiltInAccessor(RegExpPrototype, 'flags', {\n configurable: true,\n get: regExpFlags\n});\n","export interface GrammarRule {\n regexp: RegExp;\n replacement: string;\n labelPlaceholder?: number;\n}\n\nexport interface HTMLBlockRule {\n start: RegExp;\n end: RegExp | false;\n paraInterrupt: boolean;\n}\n\nexport interface InlineCommand {\n type: 'inline';\n className: string;\n set: {\n pre: string;\n post: string;\n };\n unset: {\n prePattern: RegExp;\n postPattern: RegExp;\n };\n}\n\nexport interface LineCommand {\n type: 'line';\n className: string;\n set: {\n pattern: RegExp;\n replacement: string;\n };\n unset: {\n pattern: RegExp;\n replacement: string;\n };\n}\n\nexport type Command = InlineCommand | LineCommand;\n\nconst replacements: Record<string, RegExp> = {\n ASCIIPunctuation: /[!\"#$%&'()*+,\\-./:;<=>?@[\\]^_`{|}~\\\\]/, \n NotTriggerChar: /[^`_*[\\]()<>!~]/,\n Scheme: /[A-Za-z][A-Za-z0-9+.-]{1,31}/,\n Email: /[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*/, // From CommonMark spec\n HTMLOpenTag: /<HTMLTagName(?:HTMLAttribute)*\\s*\\/?>/,\n HTMLCloseTag: /<\\/HTMLTagName\\s*>/,\n HTMLTagName: /[A-Za-z][A-Za-z0-9-]*/, \n HTMLComment: /<!--(?:[^>-]|(?:[^>-](?:[^-]|-[^-])*[^-]))-->/,\n HTMLPI: /<\\?(?:|.|(?:[^?]|\\?[^>])*)\\?>/,\n HTMLDeclaration: /<![A-Z]+\\s[^>]*>/,\n HTMLCDATA: /<!\\[CDATA\\[.*?\\]\\]>/,\n HTMLAttribute: /\\s+[A-Za-z_:][A-Za-z0-9_.:-]*(?:HTMLAttValue)?/,\n HTMLAttValue: /\\s*=\\s*(?:(?:'[^']*')|(?:\"[^\"]*\")|(?:[^\\s\"'=<>`]+))/,\n KnownTag: /address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h1|h2|h3|h4|h5|h6|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|nav|noframes|ol|optgroup|option|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul/\n};\n\n// From CommonMark.js. \nexport const punctuationLeading = new RegExp(/^(?:[!\"#$%&'()*+,\\-./:;<=>?@[\\]\\\\^_`{|}~\\xA1\\xA7\\xAB\\xB6\\xB7\\xBB\\xBF\\u037E\\u0387\\u055A-\\u055F\\u0589\\u058A\\u05BE\\u05C0\\u05C3\\u05C6\\u05F3\\u05F4\\u0609\\u060A\\u060C\\u060D\\u061B\\u061E\\u061F\\u066A-\\u066D\\u06D4\\u0700-\\u070D\\u07F7-\\u07F9\\u0830-\\u083E\\u085E\\u0964\\u0965\\u0970\\u0AF0\\u0DF4\\u0E4F\\u0E5A\\u0E5B\\u0F04-\\u0F12\\u0F14\\u0F3A-\\u0F3D\\u0F85\\u0FD0-\\u0FD4\\u0FD9\\u0FDA\\u104A-\\u104F\\u10FB\\u1360-\\u1368\\u1400\\u166D\\u166E\\u169B\\u169C\\u16EB-\\u16ED\\u1735\\u1736\\u17D4-\\u17D6\\u17D8-\\u17DA\\u1800-\\u180A\\u1944\\u1945\\u1A1E\\u1A1F\\u1AA0-\\u1AA6\\u1AA8-\\u1AAD\\u1B5A-\\u1B60\\u1BFC-\\u1BFF\\u1C3B-\\u1C3F\\u1C7E\\u1C7F\\u1CC0-\\u1CC7\\u1CD3\\u2010-\\u2027\\u2030-\\u2043\\u2045-\\u2051\\u2053-\\u205E\\u207D\\u207E\\u208D\\u208E\\u2308-\\u230B\\u2329\\u232A\\u2768-\\u2775\\u27C5\\u27C6\\u27E6-\\u27EF\\u2983-\\u2998\\u29D8-\\u29DB\\u29FC\\u29FD\\u2CF9-\\u2CFC\\u2CFE\\u2CFF\\u2D70\\u2E00-\\u2E2E\\u2E30-\\u2E42\\u3001-\\u3003\\u3008-\\u3011\\u3014-\\u301F\\u3030\\u303D\\u30A0\\u30FB\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA673\\uA67E\\uA6F2-\\uA6F7\\uA874-\\uA877\\uA8CE\\uA8CF\\uA8F8-\\uA8FA\\uA8FC\\uA92E\\uA92F\\uA95F\\uA9C1-\\uA9CD\\uA9DE\\uA9DF\\uAA5C-\\uAA5F\\uAADE\\uAADF\\uAAF0\\uAAF1\\uABEB\\uFD3E\\uFD3F\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE61\\uFE63\\uFE68\\uFE6A\\uFE6B\\uFF01-\\uFF03\\uFF05-\\uFF0A\\uFF0C-\\uFF0F\\uFF1A\\uFF1B\\uFF1F\\uFF20\\uFF3B-\\uFF3D\\uFF3F\\uFF5B\\uFF5D\\uFF5F-\\uFF65]|\\uD800[\\uDD00-\\uDD02\\uDF9F\\uDFD0]|\\uD801\\uDD6F|\\uD802[\\uDC57\\uDD1F\\uDD3F\\uDE50-\\uDE58\\uDE7F\\uDEF0-\\uDEF6\\uDF39-\\uDF3F\\uDF99-\\uDF9C]|\\uD804[\\uDC47-\\uDC4D\\uDCBB\\uDCBC\\uDCBE-\\uDCC1\\uDD40-\\uDD43\\uDD74\\uDD75\\uDDC5-\\uDDC9\\uDDCD\\uDDDB\\uDDDD-\\uDDDF\\uDE38-\\uDE3D\\uDEA9]|\\uD805[\\uDCC6\\uDDC1-\\uDDD7\\uDE41-\\uDE43\\uDF3C-\\uDF3E]|\\uD809[\\uDC70-\\uDC74]|\\uD81A[\\uDE6E\\uDE6F\\uDEF5\\uDF37-\\uDF3B\\uDF44]|\\uD82F\\uDC9F|\\uD836[\\uDE87-\\uDE8B])/);\n\nexport const punctuationTrailing = new RegExp(/(?:[!\"#$%&'()*+,\\-./:;<=>?@[\\]\\\\^_`{|}~\\xA1\\xA7\\xAB\\xB6\\xB7\\xBB\\xBF\\u037E\\u0387\\u055A-\\u055F\\u0589\\u058A\\u05BE\\u05C0\\u05C3\\u05C6\\u05F3\\u05F4\\u0609\\u060A\\u060C\\u060D\\u061B\\u061E\\u061F\\u066A-\\u066D\\u06D4\\u0700-\\u070D\\u07F7-\\u07F9\\u0830-\\u083E\\u085E\\u0964\\u0965\\u0970\\u0AF0\\u0DF4\\u0E4F\\u0E5A\\u0E5B\\u0F04-\\u0F12\\u0F14\\u0F3A-\\u0F3D\\u0F85\\u0FD0-\\u0FD4\\u0FD9\\u0FDA\\u104A-\\u104F\\u10FB\\u1360-\\u1368\\u1400\\u166D\\u166E\\u169B\\u169C\\u16EB-\\u16ED\\u1735\\u1736\\u17D4-\\u17D6\\u17D8-\\u17DA\\u1800-\\u180A\\u1944\\u1945\\u1A1E\\u1A1F\\u1AA0-\\u1AA6\\u1AA8-\\u1AAD\\u1B5A-\\u1B60\\u1BFC-\\u1BFF\\u1C3B-\\u1C3F\\u1C7E\\u1C7F\\u1CC0-\\u1CC7\\u1CD3\\u2010-\\u2027\\u2030-\\u2043\\u2045-\\u2051\\u2053-\\u205E\\u207D\\u207E\\u208D\\u208E\\u2308-\\u230B\\u2329\\u232A\\u2768-\\u2775\\u27C5\\u27C6\\u27E6-\\u27EF\\u2983-\\u2998\\u29D8-\\u29DB\\u29FC\\u29FD\\u2CF9-\\u2CFC\\u2CFE\\u2CFF\\u2D70\\u2E00-\\u2E2E\\u2E30-\\u2E42\\u3001-\\u3003\\u3008-\\u3011\\u3014-\\u301F\\u3030\\u303D\\u30A0\\u30FB\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA673\\uA67E\\uA6F2-\\uA6F7\\uA874-\\uA877\\uA8CE\\uA8CF\\uA8F8-\\uA8FA\\uA8FC\\uA92E\\uA92F\\uA95F\\uA9C1-\\uA9CD\\uA9DE\\uA9DF\\uAA5C-\\uAA5F\\uAADE\\uAADF\\uAAF0\\uAAF1\\uABEB\\uFD3E\\uFD3F\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE61\\uFE63\\uFE68\\uFE6A\\uFE6B\\uFF01-\\uFF03\\uFF05-\\uFF0A\\uFF0C-\\uFF0F\\uFF1A\\uFF1B\\uFF1F\\uFF20\\uFF3B-\\uFF3D\\uFF3F\\uFF5B\\uFF5D\\uFF5F-\\uFF65]|\\uD800[\\uDD00-\\uDD02\\uDF9F\\uDFD0]|\\uD801\\uDD6F|\\uD802[\\uDC57\\uDD1F\\uDD3F\\uDE50-\\uDE58\\uDE7F\\uDEF0-\\uDEF6\\uDF39-\\uDF3F\\uDF99-\\uDF9C]|\\uD804[\\uDC47-\\uDC4D\\uDCBB\\uDCBC\\uDCBE-\\uDCC1\\uDD40-\\uDD43\\uDD74\\uDD75\\uDDC5-\\uDDC9\\uDDCD\\uDDDB\\uDDDD-\\uDDDF\\uDE38-\\uDE3D\\uDEA9]|\\uD805[\\uDCC6\\uDDC1-\\uDDD7\\uDE41-\\uDE43\\uDF3C-\\uDF3E]|\\uD809[\\uDC70-\\uDC74]|\\uD81A[\\uDE6E\\uDE6F\\uDEF5\\uDF37-\\uDF3B\\uDF44]|\\uD82F\\uDC9F|\\uD836[\\uDE87-\\uDE8B])$/);\n\n/**\n * This is CommonMark's block grammar, but we're ignoring nested blocks here. \n */ \nexport const lineGrammar: Record<string, GrammarRule> = { \n TMH1: { \n regexp: /^( {0,3}#\\s)(.*?)((?:\\s+#+\\s*)?)$/, \n replacement: '<span class=\"TMMark TMMark_TMH1\">$1</span>$$2<span class=\"TMMark TMMark_TMH1\">$3</span>'\n },\n TMH2: { \n regexp: /^( {0,3}##\\s)(.*?)((?:\\s+#+\\s*)?)$/, \n replacement: '<span class=\"TMMark TMMark_TMH2\">$1</span>$$2<span class=\"TMMark TMMark_TMH2\">$3</span>'\n },\n TMH3: { \n regexp: /^( {0,3}###\\s)(.*?)((?:\\s+#+\\s*)?)$/, \n replacement: '<span class=\"TMMark TMMark_TMH3\">$1</span>$$2<span class=\"TMMark TMMark_TMH3\">$3</span>'\n },\n TMH4: { \n regexp: /^( {0,3}####\\s)(.*?)((?:\\s+#+\\s*)?)$/, \n replacement: '<span class=\"TMMark TMMark_TMH4\">$1</span>$$2<span class=\"TMMark TMMark_TMH4\">$3</span>'\n },\n TMH5: { \n regexp: /^( {0,3}#####\\s)(.*?)((?:\\s+#+\\s*)?)$/, \n replacement: '<span class=\"TMMark TMMark_TMH5\">$1</span>$$2<span class=\"TMMark TMMark_TMH5\">$3</span>'\n },\n TMH6: { \n regexp: /^( {0,3}######\\s)(.*?)((?:\\s+#+\\s*)?)$/, \n replacement: '<span class=\"TMMark TMMark_TMH6\">$1</span>$$2<span class=\"TMMark TMMark_TMH6\">$3</span>'\n },\n TMBlockquote: { \n regexp: /^( {0,3}>[ ]?)(.*)$/, \n replacement: '<span class=\"TMMark TMMark_TMBlockquote\">$1</span>$$2'\n },\n TMCodeFenceBacktickOpen: { \n regexp: /^( {0,3}(?<seq>````*)\\s*)([^`]*?)(\\s*)$/, \n replacement: '<span class=\"TMMark TMMark_TMCodeFenceBacktick\">$1</span><span class=\"TMInfoString\">$3</span>$4'\n },\n TMCodeFenceTildeOpen: { \n regexp: /^( {0,3}(?<seq>~~~~*)\\s*)(.*?)(\\s*)$/, \n replacement: '<span class=\"TMMark TMMark_TMCodeFenceTilde\">$1</span><span class=\"TMInfoString\">$3</span>$4'\n },\n TMCodeFenceBacktickClose: { \n regexp: /^( {0,3}(?<seq>````*))(\\s*)$/, \n replacement: '<span class=\"TMMark TMMark_TMCodeFenceBacktick\">$1</span>$3'\n },\n TMCodeFenceTildeClose: { \n regexp: /^( {0,3}(?<seq>~~~~*))(\\s*)$/, \n replacement: '<span class=\"TMMark TMMark_TMCodeFenceTilde\">$1</span>$3'\n },\n TMBlankLine: { \n regexp: /^([ \\t]*)$/, \n replacement: '$0'\n },\n TMSetextH1Marker: { \n regexp: /^ {0,3}=+\\s*$/, \n replacement: '<span class=\"TMMark TMMark_TMSetextH1Marker\">$0</span>'\n },\n TMSetextH2Marker: { \n regexp: /^ {0,3}-+\\s*$/, \n replacement: '<span class=\"TMMark TMMark_TMSetextH1Marker\">$0</span>'\n },\n TMHR: { \n regexp: /^( {0,3}(\\*[ \\t]*\\*[ \\t]*\\*[ \\t*]*)|(-[ \\t]*-[ \\t]*-[ \\t-]*)|(_[ \\t]*_[ \\t]*_[ \\t_]*))$/, \n replacement: '<span class=\"TMMark TMMark_TMHR\">$0</span>'\n },\n TMUL: { \n regexp: /^( {0,3}[+*-] {1,4})(.*)$/, \n replacement: '<span class=\"TMMark TMMark_TMUL\">$1</span>$$2'\n },\n TMOL: { \n regexp: /^( {0,3}\\d{1,9}[.)] {1,4})(.*)$/, \n replacement: '<span class=\"TMMark TMMark_TMOL\">$1</span>$$2'\n },\n // TODO: This is currently preventing sublists (and any content within list items, really) from working\n TMIndentedCode: { \n regexp: /^( {4}|\\t)(.*)$/, \n replacement: '<span class=\"TMMark TMMark_TMIndentedCode\">$1</span>$2'\n },\n TMLinkReferenceDefinition: {\n // TODO: Link destination can't include unbalanced parantheses, but we just ignore that here \n regexp: /^( {0,3}\\[\\s*)([^\\s\\]](?:[^\\]]|\\\\\\])*?)(\\s*\\]:\\s*)((?:[^\\s<>]+)|(?:<(?:[^<>\\\\]|\\\\.)*>))?(\\s*)((?:\\((?:[^()\\\\]|\\\\.)*\\))|(?:\"(?:[^\"\\\\]|\\\\.)*\")|(?:'(?:[^'\\\\]|\\\\.)*'))?(\\s*)$/, \n replacement: '<span class=\"TMMark TMMark_TMLinkReferenceDefinition\">$1</span><span class=\"TMLinkLabel TMLinkLabel_Definition\">$2</span><span class=\"TMMark TMMark_TMLinkReferenceDefinition\">$3</span><span class=\"TMLinkDestination\">$4</span>$5<span class=\"TMLinkTitle\">$6</span>$7',\n labelPlaceholder: 2, // this defines which placeholder in the above regex is the link \"label\"\n },\n};\n\n/**\n * HTML blocks have multiple different classes of opener and closer. This array defines all the cases\n */\nexport const htmlBlockGrammar: HTMLBlockRule[] = [\n { start: /^ {0,3}<(?:script|pre|style)(?:\\s|>|$)/i, end: /(?:<\\/script>|<\\/pre>|<\\/style>)/i, paraInterrupt: true },\n { start: /^ {0,3}<!--/, end: /-->/, paraInterrupt: true },\n { start: /^ {0,3}<\\?/, end: /\\?>/, paraInterrupt: true },\n { start: /^ {0,3}<![A-Z]/, end: />/, paraInterrupt : true},\n { start: /^ {0,3}<!\\[CDATA\\[/, end: /\\]\\]>/, paraInterrupt : true},\n { start: /^ {0,3}(?:<|<\\/)(?:KnownTag)(?:\\s|>|\\/>|$)/i, end: false, paraInterrupt: true},\n { start: /^ {0,3}(?:HTMLOpenTag|HTMLCloseTag)\\s*$/, end: false, paraInterrupt: false},\n];\n\n/**\n * Structure of the object:\n * Top level entries are rules, each consisting of a regular expressions (in string format) as well as a replacement.\n * In the regular expressions, replacements from the object 'replacements' will be processed before compiling into the property regexp.\n */\nexport const inlineGrammar: Record<string, GrammarRule> = {\n escape : {\n regexp: /^\\\\(ASCIIPunctuation)/,\n replacement : '<span class=\"TMMark TMMark_TMEscape\">\\\\</span>$1'\n },\n code : {\n regexp: /^(`+)((?:[^`])|(?:[^`].*?[^`]))(\\1)/,\n replacement : '<span class=\"TMMark TMMark_TMCode\">$1</span><code class=\"TMCode\">$2</code><span class=\"TMMark TMMark_TMCode\">$3</span>' \n },\n autolink : {\n regexp: /^<((?:Scheme:[^\\s<>]*)|(?:Email))>/,\n replacement: '<span class=\"TMMark TMMark_TMAutolink\">&lt;</span><span class=\"TMAutolink\">$1</span><span class=\"TMMark TMMark_TMAutolink\">&gt;</span>'\n },\n html : {\n regexp: /^((?:HTMLOpenTag)|(?:HTMLCloseTag)|(?:HTMLComment)|(?:HTMLPI)|(?:HTMLDeclaration)|(?:HTMLCDATA))/,\n replacement: '<span class=\"TMHTML\">$1</span>',\n },\n linkOpen : {\n regexp: /^\\[/,\n replacement: ''\n },\n imageOpen : {\n regexp: /^!\\[/,\n replacement : ''\n },\n linkLabel : {\n regexp: /^(\\[\\s*)([^\\]]*?)(\\s*\\])/,\n replacement: '',\n labelPlaceholder: 2\n },\n default : {\n regexp: /^(.|(?:NotTriggerChar+))/,\n replacement: '$1'\n }\n};\n\n// Process replacements in regexps\nconst replacementRegexp = new RegExp(Object.keys(replacements).join('|'));\n\n// Inline\nconst inlineRules = [...Object.keys(inlineGrammar)];\nfor (let rule of inlineRules) {\n let re = inlineGrammar[rule].regexp.source;\n // Replace while there is something to replace. This means it also works over multiple levels (replacements containing replacements)\n while (re.match(replacementRegexp)) {\n re = re.replace(replacementRegexp, (string) => { return replacements[string].source; });\n }\n inlineGrammar[rule].regexp = new RegExp(re, inlineGrammar[rule].regexp.flags);\n}\n\n// HTML Block (only opening rule is processed currently)\nfor (let rule of htmlBlockGrammar) {\n let re = rule.start.source;\n // Replace while there is something to replace. This means it also works over multiple levels (replacements containing replacements)\n while (re.match(replacementRegexp)) {\n re = re.replace(replacementRegexp, (string) => { return replacements[string].source; });\n }\n rule.start = new RegExp(re, rule.start.flags);\n}\n\n/**\n * Creates a merged inline grammar by combining the default inline grammar with custom rules.\n * Custom rules are processed and their regexp patterns are expanded with replacements.\n * @param customRules - Object containing custom inline grammar rules\n * @returns Merged inline grammar object\n */\nexport function createMergedInlineGrammar(customRules: Record<string, GrammarRule> = {}): Record<string, GrammarRule> {\n const merged = { ...inlineGrammar };\n \n // Process custom rules\n for (const [ruleName, rule] of Object.entries(customRules)) {\n // Copy the rule to avoid modifying the original\n const processedRule = { ...rule };\n \n // Process replacements in the regexp\n let regexpSource = rule.regexp.source;\n const replacementRegexp = new RegExp(Object.keys(replacements).join('|'));\n \n // Replace while there is something to replace\n while (regexpSource.match(replacementRegexp)) {\n regexpSource = regexpSource.replace(replacementRegexp, (match) => {\n return replacements[match].source;\n });\n }\n \n processedRule.regexp = new RegExp(regexpSource, rule.regexp.flags);\n merged[ruleName] = processedRule;\n }\n \n return merged;\n}\n\n/**\n * Escapes HTML special characters (<, >, and &) in the string.\n * @param {string} string The raw string to be escaped\n * @returns {string} The string, ready to be used in HTML\n */\nexport function htmlescape(string: string): string {\n return (string ? string : '')\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;');\n}\n\n/**\n * Contains the commands that can be sent to the editor. Contains objects with a name representing the name of the command.\n * Each of the objects contains the following keys:\n * \n * - type: Can be either inline (for inline formatting) or line (for block / line formatting).\n * - className: Used to determine whether the command is active at a given position. \n * For line formatting, this looks at the class of the line element. For inline elements, tries to find an enclosing element with that class.\n * - set / unset: Contain instructions how to set and unset the command. For line type commands, both consist of a pattern and replacement that \n * will be applied to each line (using String.replace). For inline type commands, the set object contains a pre and post string which will\n * be inserted before and after the selection. The unset object contains a prePattern and a postPattern. Both should be regular expressions and \n * they will be applied to the portion of the line before and after the selection (using String.replace, with an empty replacement string).\n */\nexport const commands: Record<string, Command> = {\n // Replacements for unset for inline commands are '' by default\n bold: {\n type: 'inline', \n className: 'TMStrong', \n set: {pre: '**', post: '**'}, \n unset: {prePattern: /(?:\\*\\*|__)$/, postPattern: /^(?:\\*\\*|__)/}\n }, \n italic: {\n type: 'inline', \n className: 'TMEm', \n set: {pre: '*', post: '*'}, \n unset: {prePattern: /(?:\\*|_)$/, postPattern: /^(?:\\*|_)/}\n },\n code: {\n type: 'inline', \n className: 'TMCode', \n set: {pre: '`', post: '`'}, \n unset: {prePattern: /`+$/, postPattern: /^`+/} // FIXME this doesn't ensure balanced backticks right now\n }, \n strikethrough: {\n type: 'inline', \n className: 'TMStrikethrough', \n set: {pre: '~~', post: '~~'}, \n unset: {prePattern:/~~$/, postPattern: /^~~/ }\n },\n h1: {\n type: 'line', \n className: 'TMH1', \n set: {pattern: /^( {0,3}(?:(?:#+|[0-9]{1,9}[).]|[>\\-*+])\\s+)?)(.*)$/, replacement: '# $2'}, \n unset: {pattern: /^( {0,3}#\\s+)(.*?)((?:\\s+#+\\s*)?)$/, replacement: '$2'}\n },\n h2: {\n type: 'line', \n className: 'TMH2', \n set: {pattern: /^( {0,3}(?:(?:#+|[0-9]{1,9}[).]|[>\\-*+])\\s+)?)(.*)$/, replacement: '## $2'}, \n unset: {pattern: /^( {0,3}##\\s+)(.*?)((?:\\s+#+\\s*)?)$/, replacement: '$2'}\n },\n h3: {\n type: 'line', \n className: 'TMH3', \n set: {pattern: /^( {0,3}(?:(?:#+|[0-9]{1,9}[).]|[>\\-*+])\\s+)?)(.*)$/, replacement: '### $2'}, \n unset: {pattern: /^( {0,3}###\\s+)(.*?)((?:\\s+#+\\s*)?)$/, replacement: '$2'}\n },\n h4: {\n type: 'line', \n className: 'TMH4', \n set: {pattern: /^( {0,3}(?:(?:#+|[0-9]{1,9}[).]|[>\\-*+])\\s+)?)(.*)$/, replacement: '#### $2'}, \n unset: {pattern: /^( {0,3}####\\s+)(.*?)((?:\\s+#+\\s*)?)$/, replacement: '$2'}\n },\n h5: {\n type: 'line', \n className: 'TMH5', \n set: {pattern: /^( {0,3}(?:(?:#+|[0-9]{1,9}[).]|[>\\-*+])\\s+)?)(.*)$/, replacement: '##### $2'}, \n unset: {pattern: /^( {0,3}#####\\s+)(.*?)((?:\\s+#+\\s*)?)$/, replacement: '$2'}\n },\n h6: {\n type: 'line', \n className: 'TMH6', \n set: {pattern: /^( {0,3}(?:(?:#+|[0-9]{1,9}[).]|[>\\-*+])\\s+)?)(.*)$/, replacement: '###### $2'}, \n unset: {pattern: /^( {0,3}######\\s+)(.*?)((?:\\s+#+\\s*)?)$/, replacement: '$2'}\n },\n ul: {\n type: 'line', \n className: 'TMUL', \n set: {pattern: /^( {0,3}(?:(?:#+|[0-9]{1,9}[).]|[>\\-*+])\\s+)?)(.*)$/, replacement: '- $2'}, \n unset: {pattern: /^( {0,3}[+*-] {1,4})(.*)$/, replacement: '$2'}\n },\n ol: {\n type: 'line', \n className: 'TMOL', \n set: {pattern: /^( {0,3}(?:(?:#+|[0-9]{1,9}[).]|[>\\-*+])\\s+)?)(.*)$/, replacement: '$#. $2'}, \n unset: {pattern: /^( {0,3}\\d{1,9}[.)] {1,4})(.*)$/, replacement: '$2'}\n }, \n blockquote: {\n type: 'line', \n className: 'TMBlockquote', \n set: {pattern: /^( {0,3}(?:(?:#+|[0-9]{1,9}[).]|[>\\-*+])\\s+)?)(.*)$/, replacement: '> $2'}, \n unset: {pattern: /^( {0,3}>[ ]?)(.*)$/, replacement: '$2'}\n },\n};","import {\n inlineGrammar,\n lineGrammar,\n punctuationLeading,\n punctuationTrailing,\n htmlescape,\n htmlBlockGrammar,\n commands,\n HTMLBlockRule,\n Command,\n GrammarRule,\n createMergedInlineGrammar,\n} from \"./grammar\";\n\nexport interface EditorProps {\n element?: string | HTMLElement;\n editor?: string | HTMLElement;\n content?: string;\n textarea?: string | HTMLTextAreaElement;\n customInlineGrammar?: Record<string, GrammarRule>;\n}\n\nexport interface Position {\n row: number;\n col: number;\n}\n\nexport interface HistoryState {\n content: string;\n selection: Position | null;\n anchor: Position | null;\n}\n\nexport interface ChangeEvent {\n content: string;\n linesDirty: boolean[];\n}\n\nexport interface SelectionEvent {\n focus: Position;\n anchor: Position;\n commandState: Record<string, boolean | null>;\n}\n\nexport interface DropEvent {\n dataTransfer: DataTransfer;\n}\n\ntype EventType = 'change' | 'selection' | 'drop';\ntype EventHandler<T> = (event: T) => void;\n\nexport class Editor {\n public e: HTMLDivElement | null = null;\n public textarea: HTMLTextAreaElement | null = null;\n public lines: string[] = [];\n public lineElements: NodeListOf<ChildNode> | HTMLCollection | ChildNode[] = [];\n public lineTypes: string[] = [];\n public lineCaptures: RegExpExecArray[] = [];\n public lineReplacements: string[] = [];\n public linkLabels: string[] = [];\n public lineDirty: boolean[] = [];\n public lastCommandState: Record<string, boolean | null> | null = null;\n private customInlineGrammar: Record<string, GrammarRule> = {};\n private mergedInlineGrammar: Record<string, GrammarRule> = inlineGrammar;\n private hasFocus: boolean = true;\n private lastSelection: { focus: Position | null; anchor: Position | null } | null = null;\n\n public listeners: {\n change: EventHandler<ChangeEvent>[];\n selection: EventHandler<SelectionEvent>[];\n drop: EventHandler<DropEvent>[];\n } = {\n change: [],\n selection: [],\n drop: [],\n };\n\n private undoStack: HistoryState[] = [];\n private redoStack: HistoryState[] = [];\n private isRestoringHistory: boolean = false;\n private maxHistory: number = 100;\n\n constructor(props: EditorProps = {}) {\n this.e = null;\n this.textarea = null;\n this.lines = [];\n this.lineElements = [] as ChildNode[];\n this.lineTypes = [];\n this.lineCaptures = [];\n this.lineReplacements = [];\n this.linkLabels = [];\n this.lineDirty = [];\n this.lastCommandState = null;\n this.hasFocus = true;\n this.lastSelection = null;\n this.customInlineGrammar = props.customInlineGrammar || {};\n this.mergedInlineGrammar = createMergedInlineGrammar(this.customInlineGrammar);\n\n this.listeners = {\n change: [],\n selection: [],\n drop: [],\n };\n\n let element: HTMLElement | null = null;\n if (typeof props.element === 'string') {\n element = document.getElementById(props.element);\n } else if (props.element) {\n element = props.element;\n }\n\n if (typeof props.textarea === 'string') {\n this.textarea = document.getElementById(props.textarea) as HTMLTextAreaElement;\n } else if (props.textarea) {\n this.textarea = props.textarea;\n }\n\n if (this.textarea) {\n if (!element) element = this.textarea;\n }\n\n if (!element) {\n element = document.getElementsByTagName(\"body\")[0];\n }\n if (element && element.tagName === \"TEXTAREA\") {\n this.textarea = element as HTMLTextAreaElement;\n element = this.textarea.parentNode as HTMLElement;\n }\n\n if (this.textarea) {\n this.textarea.style.display = \"none\";\n }\n\n this.undoStack = [];\n this.redoStack = [];\n this.isRestoringHistory = false;\n this.maxHistory = 100;\n\n this.createEditorElement(element, props);\n this.setContent(\n typeof props.content === \"string\"\n ? props.content\n : this.textarea\n ? this.textarea.value\n : \"# Hello TinyMDE!\\nEdit **here**\"\n );\n \n this.e!.addEventListener(\"keydown\", (e) => this.handleUndoRedoKey(e));\n }\n\n get canUndo(): boolean {\n return this.undoStack.length >= 2;\n }\n\n get canRedo(): boolean {\n return this.redoStack.length > 0;\n }\n\n private pushHistory(): void {\n if (this.isRestoringHistory) return;\n this.pushCurrentState();\n this.redoStack = [];\n }\n\n private pushCurrentState(): void {\n this.undoStack.push({\n content: this.getContent(),\n selection: this.getSelection(),\n anchor: this.getSelection(true),\n });\n if (this.undoStack.length > this.maxHistory) this.undoStack.shift();\n }\n\n public undo(): void {\n if (this.undoStack.length < 2) return;\n this.isRestoringHistory = true;\n this.pushCurrentState();\n const current = this.undoStack.pop()!;\n this.redoStack.push(current);\n const prev = this.undoStack[this.undoStack.length - 1];\n this.setContent(prev.content);\n if (prev.selection) this.setSelection(prev.selection, prev.anchor);\n this.undoStack.pop();\n this.isRestoringHistory = false;\n }\n\n public redo(): void {\n if (!this.redoStack.length) return;\n this.isRestoringHistory = true;\n this.pushCurrentState();\n const next = this.redoStack.pop()!;\n this.setContent(next.content);\n if (next.selection) this.setSelection(next.selection, next.anchor);\n this.isRestoringHistory = false;\n }\n\n private handleUndoRedoKey(e: KeyboardEvent): void {\n const isMac = /Mac|iPod|iPhone|iPad/.test(navigator.platform);\n const ctrl = isMac ? e.metaKey : e.ctrlKey;\n if (ctrl && !e.altKey) {\n if (e.key === \"z\" || e.key === \"Z\") {\n if (e.shiftKey) {\n this.redo();\n } else {\n this.undo();\n }\n e.preventDefault();\n } else if (e.key === \"y\" || e.key === \"Y\") {\n this.redo();\n e.preventDefault();\n }\n }\n }\n\n private createEditorElement(element: HTMLElement, props: EditorProps): void {\n if (props && props.editor !== undefined) {\n if (typeof props.editor === 'string') {\n this.e = document.getElementById(props.editor) as HTMLDivElement;\n } else {\n this.e = props.editor as HTMLDivElement;\n }\n } else {\n this.e = document.createElement(\"div\");\n }\n\n this.e.classList.add(\"TinyMDE\");\n this.e.contentEditable = \"true\";\n this.e.style.whiteSpace = \"pre-wrap\";\n (this.e.style as any).webkitUserModify = \"read-write-plaintext-only\";\n\n if (props.editor === undefined) {\n if (\n this.textarea &&\n this.textarea.parentNode === element &&\n this.textarea.nextSibling\n ) {\n element.insertBefore(this.e, this.textarea.nextSibling);\n } else {\n element.appendChild(this.e);\n }\n }\n\n this.e.addEventListener(\"input\", (e) => this.handleInputEvent(e));\n this.e.addEventListener(\"beforeinput\", (e) => this.handleBeforeInputEvent(e));\n this.e.addEventListener(\"compositionend\", (e) => this.handleInputEvent(e));\n document.addEventListener(\"selectionchange\", (e) => {\n if (this.hasFocus) { this.handleSelectionChangeEvent(e); }\n }\n );\n this.e.addEventListener(\"blur\", () => this.hasFocus = false );\n this.e.addEventListener(\"focus\", () => this.hasFocus = true );\n this.e.addEventListener(\"paste\", (e) => this.handlePaste(e));\n this.e.addEventListener(\"drop\", (e) => this.handleDrop(e));\n this.lineElements = this.e.childNodes;\n }\n\n public setContent(content: string): void {\n while (this.e!.firstChild) {\n this.e!.removeChild(this.e!.firstChild);\n }\n this.lines = content.split(/(?:\\r\\n|\\r|\\n)/);\n this.lineDirty = [];\n for (let lineNum = 0; lineNum < this.lines.length; lineNum++) {\n let le = document.createElement(\"div\");\n this.e!.appendChild(le);\n this.lineDirty.push(true);\n }\n this.lineTypes = new Array(this.lines.length);\n this.updateFormatting();\n this.fireChange();\n if (!this.isRestoringHistory) this.pushHistory();\n }\n\n public getContent(): string {\n return this.lines.join(\"\\n\");\n }\n\n private updateFormatting(): void {\n this.updateLineTypes();\n this.updateLinkLabels();\n this.applyLineTypes();\n }\n\n private updateLinkLabels(): void {\n this.linkLabels = [];\n for (let l = 0; l < this.lines.length; l++) {\n if (this.lineTypes[l] === \"TMLinkReferenceDefinition\") {\n this.linkLabels.push(\n this.lineCaptures[l][\n lineGrammar.TMLinkReferenceDefinition.labelPlaceholder!\n ]\n );\n }\n }\n }\n\n private replace(replacement: string, capture: RegExpExecArray): string {\n return replacement.replace(/(\\${1,2})([0-9])/g, (str, p1, p2) => {\n if (p1 === \"$\") return htmlescape(capture[parseInt(p2)]);\n else\n return `<span class=\"TMInlineFormatted\">${this.processInlineStyles(\n capture[parseInt(p2)]\n )}</span>`;\n });\n }\n\n private applyLineTypes(): void {\n for (let lineNum = 0; lineNum < this.lines.length; lineNum++) {\n if (this.lineDirty[lineNum]) {\n let contentHTML = this.replace(\n this.lineReplacements[lineNum],\n this.lineCaptures[lineNum]\n );\n (this.lineElements[lineNum] as HTMLElement).className = this.lineTypes[lineNum];\n (this.lineElements[lineNum] as HTMLElement).removeAttribute(\"style\");\n (this.lineElements[lineNum] as HTMLElement).innerHTML =\n contentHTML === \"\" ? \"<br />\" : contentHTML;\n }\n (this.lineElements[lineNum] as HTMLElement).dataset.lineNum = lineNum.toString();\n }\n }\n\n private updateLineTypes(): void {\n let codeBlockType: string | false = false;\n let codeBlockSeqLength = 0;\n let htmlBlock: HTMLBlockRule | false = false;\n\n for (let lineNum = 0; lineNum < this.lines.length; lineNum++) {\n let lineType = \"TMPara\";\n let lineCapture: RegExpExecArray = [this.lines[lineNum]] as RegExpExecArray;\n let lineReplacement = \"$$0\";\n\n // Check ongoing code blocks\n if (codeBlockType === \"TMCodeFenceBacktickOpen\") {\n let capture = lineGrammar.TMCodeFenceBacktickClose.regexp.exec(this.lines[lineNum]);\n if (capture && capture.groups![\"seq\"].length >= codeBlockSeqLength) {\n lineType = \"TMCodeFenceBacktickClose\";\n lineReplacement = lineGrammar.TMCodeFenceBacktickClose.replacement;\n lineCapture = capture;\n codeBlockType = false;\n } else {\n lineType = \"TMFencedCodeBacktick\";\n lineReplacement = '<span class=\"TMFencedCode\">$0<br /></span>';\n lineCapture = [this.lines[lineNum]] as RegExpExecArray;\n }\n } else if (codeBlockType === \"TMCodeFenceTildeOpen\") {\n let capture = lineGrammar.TMCodeFenceTildeClose.regexp.exec(this.lines[lineNum]);\n if (capture && capture.groups![\"seq\"].length >= codeBlockSeqLength) {\n lineType = \"TMCodeFenceTildeClose\";\n lineReplacement = lineGrammar.TMCodeFenceTildeClose.replacement;\n lineCapture = capture;\n codeBlockType = false;\n } else {\n lineType = \"TMFencedCodeTilde\";\n lineReplacement = '<span class=\"TMFencedCode\">$0<br /></span>';\n lineCapture = [this.lines[lineNum]] as RegExpExecArray;\n }\n }\n\n // Check HTML block types\n if (lineType === \"TMPara\" && htmlBlock === false) {\n for (let htmlBlockType of htmlBlockGrammar) {\n if (this.lines[lineNum].match(htmlBlockType.start)) {\n if (\n htmlBlockType.paraInterrupt ||\n lineNum === 0 ||\n !(\n this.lineTypes[lineNum - 1] === \"TMPara\" ||\n this.lineTypes[lineNum - 1] === \"TMUL\" ||\n this.lineTypes[lineNum - 1] === \"TMOL\" ||\n this.lineTypes[lineNum - 1] === \"TMBlockquote\"\n )\n ) {\n htmlBlock = htmlBlockType;\n break;\n }\n }\n }\n }\n\n if (htmlBlock !== false) {\n lineType = \"TMHTMLBlock\";\n lineReplacement = '<span class=\"TMHTMLContent\">$0<br /></span>';\n lineCapture = [this.lines[lineNum]] as RegExpExecArray;\n\n if (htmlBlock.end) {\n if (this.lines[lineNum].match(htmlBlock.end)) {\n htmlBlock = false;\n }\n } else {\n if (\n lineNum === this.lines.length - 1 ||\n this.lines[lineNum + 1].match(lineGrammar.TMBlankLine.regexp)\n ) {\n htmlBlock = false;\n }\n }\n }\n\n // Check all regexps if we haven't applied one of the code block types\n if (lineType === \"TMPara\") {\n for (let type in lineGrammar) {\n if (lineGrammar[type].regexp) {\n let capture = lineGrammar[type].regexp.exec(this.lines[lineNum]);\n if (capture) {\n lineType = type;\n lineReplacement = lineGrammar[type].replacement;\n lineCapture = capture;\n break;\n }\n }\n }\n }\n\n // If we've opened a code block, remember that\n if (lineType === \"TMCodeFenceBacktickOpen\" || lineType === \"TMCodeFenceTildeOpen\") {\n codeBlockType = lineType;\n codeBlockSeqLength = lineCapture.groups![\"seq\"].length;\n }\n\n // Link reference definition and indented code can't interrupt a paragraph\n if (\n (lineType === \"TMIndentedCode\" || lineType === \"TMLinkReferenceDefinition\") &&\n lineNum > 0 &&\n (this.lineTypes[lineNum - 1] === \"TMPara\" ||\n this.lineTypes[lineNum - 1] === \"TMUL\" ||\n this.lineTypes[lineNum - 1] === \"TMOL\" ||\n this.lineTypes[lineNum - 1] === \"TMBlockquote\")\n ) {\n lineType = \"TMPara\";\n lineCapture = [this.lines[lineNum]] as RegExpExecArray;\n lineReplacement = \"$$0\";\n }\n\n // Setext H2 markers that can also be interpreted as an empty list item should be regarded as such\n if (lineType === \"TMSetextH2Marker\") {\n let capture = lineGrammar.TMUL.regexp.exec(this.lines[lineNum]);\n if (capture) {\n lineType = \"TMUL\";\n lineReplacement = lineGrammar.TMUL.replacement;\n lineCapture = capture;\n }\n }\n\n // Setext headings are only valid if preceded by a paragraph\n if (lineType === \"TMSetextH1Marker\" || lineType === \"TMSetextH2Marker\") {\n if (lineNum === 0 || this.lineTypes[lineNum - 1] !== \"TMPara\") {\n let capture = lineGrammar.TMHR.regexp.exec(this.lines[lineNum]);\n if (capture) {\n lineType = \"TMHR\";\n lineCapture = capture;\n lineReplacement = lineGrammar.TMHR.replacement;\n } else {\n lineType = \"TMPara\";\n lineCapture = [this.lines[lineNum]] as RegExpExecArray;\n lineReplacement = \"$$0\";\n }\n } else {\n let headingLine = lineNum - 1;\n const headingLineType = lineType === \"TMSetextH1Marker\" ? \"TMSetextH1\" : \"TMSetextH2\";\n do {\n if (this.lineTypes[headingLine] !== headingLineType) {\n this.lineTypes[headingLine] = headingLineType;\n this.lineDirty[headingLine] = true;\n }\n this.lineReplacements[headingLine] = \"$$0\";\n this.lineCaptures[headingLine] = [this.lines[headingLine]] as RegExpExecArray;\n headingLine--;\n } while (headingLine >= 0 && this.lineTypes[headingLine] === \"TMPara\");\n }\n }\n\n if (this.lineTypes[lineNum] !== lineType) {\n this.lineTypes[lineNum] = lineType;\n this.lineDirty[lineNum] = true;\n }\n this.lineReplacements[lineNum] = lineReplacement;\n this.lineCaptures[lineNum] = lineCapture;\n }\n }\n\n public getSelection(getAnchor: boolean = false): Position | null {\n const selection = window.getSelection();\n let startNode = getAnchor ? selection!.anchorNode : selection!.focusNode;\n if (!startNode) return null;\n let offset = getAnchor ? selection!.anchorOffset : selection!.focusOffset;\n if (startNode === this.e) {\n if (offset < this.lines.length)\n return {\n row: offset,\n col: 0,\n };\n return {\n row: offset - 1,\n col: this.lines[offset - 1].length,\n };\n }\n\n let col = this.computeColumn(startNode, offset);\n if (col === null) return null;\n\n let node = startNode;\n while (node.parentElement !== this.e) {\n node = node.parentElement!;\n }\n\n let row = 0;\n // If the node doesn't have a previous sibling, it must be the first line\n if (node.previousSibling) {\n const currentLineNumData = (node as HTMLElement).dataset?.lineNum;\n const previousLineNumData = (node.previousSibling as HTMLElement).dataset?.lineNum;\n\n if (currentLineNumData && previousLineNumData) {\n const currentLineNum = parseInt(currentLineNumData);\n const previousLineNum = parseInt(previousLineNumData);\n if (currentLineNum === previousLineNum + 1) {\n row = currentLineNum;\n } else {\n // If the current line is NOT the previous line + 1, then either \n // the current line got split in two or merged with the previous line\n // Either way, we need to recalculate the row number\n while (node.previousSibling) {\n row++;\n node = node.previousSibling;\n }\n }\n }\n }\n \n return { row: row, col: col };\n }\n\n public setSelection(focus: Position, anchor: Position | null = null): void {\n if (!focus) return;\n\n let { node: focusNode, offset: focusOffset } = this.computeNodeAndOffset(\n focus.row,\n focus.col,\n anchor ? anchor.row === focus.row && anchor.col > focus.col : false\n );\n let anchorNode = null,\n anchorOffset = null;\n if (anchor && (anchor.row !== focus.row || anchor.col !== focus.col)) {\n let { node, offset } = this.computeNodeAndOffset(\n anchor.row,\n anchor.col,\n focus.row === anchor.row && focus.col > anchor.col\n );\n anchorNode = node;\n anchorOffset = offset;\n }\n\n let windowSelection = window.getSelection();\n windowSelection!.setBaseAndExtent(\n focusNode,\n focusOffset,\n anchorNode || focusNode,\n anchorNode ? anchorOffset! : focusOffset\n );\n }\n\n public restoreLastSelection(): boolean {\n if (this.lastSelection && this.lastSelection.focus) {\n this.setSelection(this.lastSelection.focus, this.lastSelection.anchor);\n return true;\n }\n return false;\n }\n\n public paste(text: string, anchor: Position | null = null, focus: Position | null = null): void {\n if (!anchor) anchor = this.getSelection(true);\n if (!focus) focus = this.getSelection(false);\n let beginning: Position, end: Position;\n if (!focus) {\n focus = {\n row: this.lines.length - 1,\n col: this.lines[this.lines.length - 1].length,\n };\n }\n if (!anchor) {\n anchor = focus;\n }\n if (\n anchor.row < focus.row ||\n (anchor.row === focus.row && anchor.col <= focus.col)\n ) {\n beginning = anchor;\n end = focus;\n } else {\n beginning = focus;\n end = anchor;\n }\n let insertedLines = text.split(/(?:\\r\\n|\\r|\\n)/);\n let lineBefore = this.lines[beginning.row].substr(0, beginning.col);\n let lineEnd = this.lines[end.row].substr(end.col);\n insertedLines[0] = lineBefore.concat(insertedLines[0]);\n let endColPos = insertedLines[insertedLines.length - 1].length;\n insertedLines[insertedLines.length - 1] = insertedLines[insertedLines.length - 1].concat(lineEnd);\n this.spliceLines(beginning.row, 1 + end.row - beginning.row, insertedLines);\n focus.row = beginning.row + insertedLines.length - 1;\n focus.col = endColPos;\n this.updateFormatting();\n this.setSelection(focus);\n this.fireChange();\n }\n\n public wrapSelection(pre: string, post: string, focus: Position | null = null, anchor: Position | null = null): void {\n if (!this.isRestoringHistory) this.pushHistory();\n if (!focus) focus = this.getSelection(false);\n if (!anchor) anchor = this.getSelection(true);\n if (!focus || !anchor || focus.row !== anchor.row) return;\n this.lineDirty[focus.row] = true;\n\n const startCol = focus.col < anchor.col ? focus.col : anchor.col;\n const endCol = focus.col < anchor.col ? anchor.col : focus.col;\n const left = this.lines[focus.row].substr(0, startCol).concat(pre);\n const mid = endCol === startCol ? \"\" : this.lines[focus.row].substr(startCol, endCol - startCol);\n const right = post.concat(this.lines[focus.row].substr(endCol));\n this.lines[focus.row] = left.concat(mid, right);\n anchor.col = left.length;\n focus.col = anchor.col + mid.length;\n\n this.updateFormatting();\n this.setSelection(focus, anchor);\n }\n\n public addEventListener<T extends EventType>(\n type: T,\n listener: T extends 'change' ? EventHandler<ChangeEvent> :\n T extends 'selection' ? EventHandler<SelectionEvent> :\n T extends 'drop' ? EventHandler<DropEvent> : never\n ): void {\n if (type.match(/^(?:change|input)$/i)) {\n this.listeners.change.push(listener as EventHandler<ChangeEvent>);\n }\n if (type.match(/^(?:selection|selectionchange)$/i)) {\n this.listeners.selection.push(listener as EventHandler<SelectionEvent>);\n }\n if (type.match(/^(?:drop)$/i)) {\n this.listeners.drop.push(listener as EventHandler<DropEvent>);\n }\n }\n\n private fireChange(): void {\n if (!this.textarea && !this.listeners.change.length) return;\n const content = this.getContent();\n if (this.textarea) this.textarea.value = content;\n for (let listener of this.listeners.change) {\n listener({\n content: content,\n linesDirty: [...this.lineDirty],\n });\n }\n }\n\n /**\n * beforeinput handler, exclusively to handle insertParagraph and\n * insertLineBreak events. These used to be handled in the input event,\n * but that caused issues with Firefox where the input event would be\n * sometimes not be fired for these input types.\n * @param event The input event\n * @returns nothing\n */\n private handleBeforeInputEvent(event: Event): void {\n const beforeInputEvent = event as InputEvent;\n if (\n beforeInputEvent.inputType !== \"insertParagraph\" &&\n beforeInputEvent.inputType !== \"insertLineBreak\"\n ) return;\n if (!this.isRestoringHistory) this.pushHistory();\n event.preventDefault();\n this.clearDirtyFlag();\n\n const focus = this.getSelection();\n const anchor = this.getSelection(true);\n\n if (!focus || !anchor) return;\n \n // If focus and anchor are in different lines, simply remove everything \n // after the beginning of the selection and before the end of the selection\n // and remove any lines in between\n if (focus.row !== anchor.row) {\n const beginning = focus.row < anchor.row ? focus : anchor;\n const end = focus.row < anchor.row ? anchor : focus;\n this.lines[beginning.row] = this.lines[beginning.row].substring(0, beginning.col);\n this.lines[end.row] = this.lines[end.row].substring(end.col);\n this.spliceLines(beginning.row + 1, end.row - beginning.row - 1);\n focus.row = beginning.row + 1;\n focus.col = 0;\n } else {\n let continuableType: string | false = false;\n switch (this.lineTypes[focus.row]) {\n case \"TMUL\":\n continuableType = \"TMUL\";\n break;\n case \"TMOL\":\n continuableType = \"TMOL\";\n break;\n case \"TMIndentedCode\":\n continuableType = \"TMIndentedCode\";\n break;\n }\n \n const lineBeforeBreak = this.lines[focus.row].substring(0, focus.col <= anchor.col ? focus.col : anchor.col);\n const lineAfterBreak = this.lines[focus.row].substring(focus.col <= anchor.col ? anchor.col : focus.col);\n this.spliceLines(focus.row, 1, [lineBeforeBreak, lineAfterBreak]);\n\n focus.row += 1;\n focus.col = 0;\n\n if (continuableType) {\n let capture = lineGrammar[continuableType].regexp.exec(this.lines[focus.row - 1]);\n if (capture) {\n if (capture[2]) {\n if (continuableType === \"TMOL\") {\n capture[1] = capture[1].replace(/\\d{1,9}/, (result) => {\n return (parseInt(result) + 1).toString();\n });\n }\n this.lines[focus.row] = `${capture[1]}${this.lines[focus.row]}`;\n this.lineDirty[focus.row] = true;\n focus.col = capture[1].length;\n } else {\n this.lines[focus.row - 1] = \"\";\n this.lineDirty[focus.row - 1] = true;\n }\n }\n }\n }\n this.updateFormatting();\n this.setSelection(focus);\n\n // Scroll the element containing the selection into view\n if (focus && focus.row < this.lineElements.length) {\n (this.lineElements[focus.row] as HTMLElement).scrollIntoView({\n block: 'nearest',\n inline: 'nearest'\n });\n }\n\n this.fireChange();\n }\n\n private handleInputEvent(event: Event): void {\n const inputEvent = event as InputEvent;\n if (inputEvent.inputType === \"insertCompositionText\") return;\n if (!this.isRestoringHistory) this.pushHistory();\n\n let focus = this.getSelection();\n\n if ((inputEvent.inputType === \"insertParagraph\" || inputEvent.inputType === \"insertLineBreak\") && focus) {\n // This should never happen since these are handled by the beforeinput handler\n return;\n } else {\n if (!this.e!.firstChild) {\n this.e!.innerHTML = '<div class=\"TMBlankLine\"><br></div>';\n } else {\n this.fixNodeHierarchy();\n }\n this.updateLineContentsAndFormatting();\n }\n if (focus) {\n this.setSelection(focus);\n }\n\n this.fireChange();\n }\n\n private handleSelectionChangeEvent(_e: Event): void {\n this.fireSelection();\n }\n\n private handlePaste(event: ClipboardEvent): void {\n if (!this.isRestoringHistory) this.pushHistory();\n event.preventDefault();\n\n let text = (event as any).clipboardData.getData(\"text/plain\");\n this.paste(text);\n }\n\n private handleDrop(event: DragEvent): void {\n event.preventDefault();\n this.fireDrop(event.dataTransfer!);\n }\n\n private processInlineStyles(originalString: string): string {\n let processed = \"\";\n let stack: Array<{delimiter: string, delimString: string, count: number, output: string}> = [];\n let offset = 0;\n let string = originalString;\n\n outer: while (string) {\n // Process simple rules (non-delimiter)\n for (let rule of [\"escape\", \"code\", \"autolink\", \"html\"]) {\n if (this.mergedInlineGrammar[rule]) {\n let cap = this.mergedInlineGrammar[rule].regexp.exec(string);\n if (cap) {\n string = string.substr(cap[0].length);\n offset += cap[0].length;\n processed += this.mergedInlineGrammar[rule].replacement.replace(/\\$([1-9])/g, (str, p1) => htmlescape(cap[p1]));\n continue outer;\n }\n }\n }\n \n // Process custom inline grammar rules\n for (let rule in this.customInlineGrammar) {\n if (rule !== \"escape\" && rule !== \"code\" && rule !== \"autolink\" && rule !== \"html\" && rule !== \"linkOpen\" && rule !== \"imageOpen\" && rule !== \"linkLabel\" && rule !== \"default\") {\n let cap = this.mergedInlineGrammar[rule].regexp.exec(string);\n if (cap) {\n string = string.substr(cap[0].length);\n offset += cap[0].length;\n processed += this.mergedInlineGrammar[rule].replacement.replace(/\\$([1-9])/g, (str, p1) => htmlescape(cap[p1]));\n continue outer;\n }\n }\n }\n\n // Check for links / images\n let potentialLink = string.match(this.mergedInlineGrammar.linkOpen.regexp);\n let potentialImage = string.match(this.mergedInlineGrammar.imageOpen.regexp);\n if (potentialImage || potentialLink) {\n let result = this.parseLinkOrImage(string, !!potentialImage);\n if (result) {\n processed = `${processed}${result.output}`;\n string = string.substr(result.charCount);\n offset += result.charCount;\n continue outer;\n }\n }\n\n // Check for em / strong delimiters\n let cap = /(^\\*+)|(^_+)/.exec(string);\n if (cap) {\n let delimCount = cap[0].length;\n const delimString = cap[0];\n const currentDelimiter = cap[0][0];\n\n string = string.substr(cap[0].length);\n\n const preceding = offset > 0 ? originalString.substr(0, offset) : \" \";\n const following = offset + cap[0].length < originalString.length ? string : \" \";\n\n const punctuationFollows = following.match(punctuationLeading);\n const punctuationPrecedes = preceding.match(punctuationTrailing);\n const whitespaceFollows = following.match(/^\\s/);\n const whitespacePrecedes = preceding.match(/\\s$/);\n\n let canOpen = !whitespaceFollows && (!punctuationFollows || !!whitespacePrecedes || !!punctuationPrecedes);\n let canClose = !whitespacePrecedes && (!punctuationPrecedes || !!whitespaceFollows || !!punctuationFollows);\n\n if (currentDelimiter === \"_\" && canOpen && canClose) {\n canOpen = !!punctuationPrecedes;\n canClose = !!punctuationFollows;\n }\n\n if (canClose) {\n let stackPointer = stack.length - 1;\n while (delimCount && stackPointer >= 0) {\n if (stack[stackPointer].delimiter === currentDelimiter) {\n while (stackPointer < stack.length - 1) {\n const entry = stack.pop()!;\n processed = `${entry.output}${entry.delimString.substr(0, entry.count)}${processed}`;\n }\n\n if (delimCount >= 2 && stack[stackPointer].count >= 2) {\n processed = `<span class=\"TMMark\">${currentDelimiter}${currentDelimiter}</span><strong class=\"TMStrong\">${processed}</strong><span class=\"TMMark\">${currentDelimiter}${currentDelimiter}</span>`;\n delimCount -= 2;\n stack[stackPointer].count -= 2;\n } else {\n processed = `<span class=\"TMMark\">${currentDelimiter}</span><em class=\"TMEm\">${processed}</em><span class=\"TMMark\">${currentDelimiter}</span>`;\n delimCount -= 1;\n stack[stackPointer].count -= 1;\n }\n\n if (stack[stackPointer].count === 0) {\n let entry = stack.pop()!;\n processed = `${entry.output}${processed}`;\n stackPointer--;\n }\n } else {\n stackPointer--;\n }\n }\n }\n\n if (delimCount && canOpen) {\n stack.push({\n delimiter: currentDelimiter,\n delimString: delimString,\n count: delimCount,\n output: processed,\n });\n processed = \"\";\n delimCount = 0;\n }\n\n if (delimCount) {\n processed = `${processed}${delimString.substr(0, delimCount)}`;\n }\n\n offset += cap[0].length;\n continue outer;\n }\n\n // Check for strikethrough delimiter\n cap = /^~~/.exec(string);\n if (cap) {\n let consumed = false;\n let stackPointer = stack.length - 1;\n while (!consumed && stackPointer >= 0) {\n if (stack[stackPointer].delimiter === \"~\") {\n while (stackPointer < stack.length - 1) {\n const entry = stack.pop()!;\n processed = `${entry.output}${entry.delimString.substr(0, entry.count)}${processed}`;\n }\n\n processed = `<span class=\"TMMark\">~~</span><del class=\"TMStrikethrough\">${processed}</del><span class=\"TMMark\">~~</span>`;\n let entry = stack.pop()!;\n processed = `${entry.output}${processed}`;\n consumed = true;\n } else {\n stackPointer--;\n }\n }\n\n if (!consumed) {\n stack.push({\n delimiter: \"~\",\n delimString: \"~~\",\n count: 2,\n output: processed,\n });\n processed = \"\";\n }\n\n offset += cap[0].length;\n string = string.substr(cap[0].length);\n continue outer;\n }\n\n // Process 'default' rule\n cap = this.mergedInlineGrammar.default.regexp.exec(string);\n if (cap) {\n string = string.substr(cap[0].length);\n offset += cap[0].length;\n processed += this.mergedInlineGrammar.default.replacement.replace(/\\$([1-9])/g, (str, p1) => htmlescape(cap[p1]));\n continue outer;\n }\n throw \"Infinite loop!\";\n }\n\n while (stack.length) {\n const entry = stack.pop()!;\n processed = `${entry.output}${entry.delimString.substr(0, entry.count)}${processed}`;\n }\n\n return processed;\n }\n\n private computeColumn(startNode: Node, offset: number): number | null {\n let node = startNode;\n let col: number;\n while (node && node.parentNode !== this.e) {\n node = node.parentNode!;\n }\n if (node === null) return null;\n\n if (startNode.nodeType === Node.TEXT_NODE || offset === 0) {\n col = offset;\n node = startNode;\n } else if (offset > 0) {\n node = startNode.childNodes[offset - 1];\n col = node.textContent!.length;\n } else {\n col = 0;\n node = startNode;\n }\n while (node.parentNode !== this.e) {\n if (node.previousSibling) {\n node = node.previousSibling;\n col += node.textContent!.length;\n } else {\n node = node.parentNode as unknown as ChildNode;\n }\n }\n return col;\n }\n\n private computeNodeAndOffset(row: number, col: number, bindRight: boolean = false): {node: Node, offset: number} {\n if (row >= this.lineElements.length) {\n row = this.lineElements.length - 1;\n col = this.lines[row].length;\n }\n if (col > this.lines[row].length) {\n col = this.lines[row].length;\n }\n const parentNode = this.lineElements[row] as HTMLElement;\n let node = parentNode.firstChild;\n\n let childrenComplete = false;\n let rv = {\n node: parentNode.firstChild ? parentNode.firstChild : parentNode,\n offset: 0,\n };\n\n while (node !== parentNode) {\n if (!childrenComplete && node!.nodeType === Node.TEXT_NODE) {\n if (node!.nodeValue!.length >= col) {\n if (bindRight && node!.nodeValue!.length === col) {\n rv = { node: node!, offset: col };\n col = 0;\n } else {\n return { node: node!, offset: col };\n }\n } else {\n col -= node!.nodeValue!.length;\n }\n }\n if (!childrenComplete && node!.firstChild) {\n node = node!.firstChild;\n } else if (node!.nextSibling) {\n childrenComplete = false;\n node = node!.nextSibling;\n } else {\n childrenComplete = true;\n node = node!.parentNode as unknown as ChildNode;\n }\n }\n\n return rv;\n }\n\n private updateLineContentsAndFormatting(): void {\n this.clearDirtyFlag();\n this.updateLineContents();\n this.updateFormatting();\n }\n\n private clearDirtyFlag(): void {\n this.lineDirty = new Array(this.lines.length);\n for (let i = 0; i < this.lineDirty.length; i++) {\n this.lineDirty[i] = false;\n }\n }\n\n private updateLineContents(): void {\n let lineDelta = this.e!.childElementCount - this.lines.length;\n if (lineDelta) {\n let firstChangedLine = 0;\n while (\n firstChangedLine <= this.lines.length &&\n firstChangedLine <= this.lineElements.length &&\n this.lineElements[firstChangedLine] &&\n this.lines[firstChangedLine] === (this.lineElements[firstChangedLine] as HTMLElement).textContent &&\n this.lineTypes[firstChangedLine] === (this.lineElements[firstChangedLine] as HTMLElement).className\n ) {\n firstChangedLine++;\n }\n\n let lastChangedLine = -1;\n while (\n -lastChangedLine < this.lines.length &&\n -lastChangedLine < this.lineElements.length &&\n this.lines[this.lines.length + lastChangedLine] ===\n (this.lineElements[this.lineElements.length + lastChangedLine] as HTMLElement).textContent &&\n this.lineTypes[this.lines.length + lastChangedLine] ===\n (this.lineElements[this.lineElements.length + lastChangedLine] as HTMLElement).className\n ) {\n lastChangedLine--;\n }\n\n let linesToDelete = this.lines.length + lastChangedLine + 1 - firstChangedLine;\n if (linesToDelete < -lineDelta) linesToDelete = -lineDelta;\n if (linesToDelete < 0) linesToDelete = 0;\n\n let linesToAdd = [];\n for (let l = 0; l < linesToDelete + lineDelta; l++) {\n linesToAdd.push((this.lineElements[firstChangedLine + l] as HTMLElement).textContent || \"\");\n }\n this.spliceLines(firstChangedLine, linesToDelete, linesToAdd, false);\n } else {\n for (let line = 0; line < this.lineElements.length; line++) {\n let e = this.lineElements[line] as HTMLElement;\n let ct = e.textContent || \"\";\n if (this.lines[line] !== ct || this.lineTypes[line] !== e.className) {\n this.lines[line] = ct;\n this.lineTypes[line] = e.className;\n this.lineDirty[line] = true;\n }\n }\n }\n }\n\n private spliceLines(\n startLine: number,\n linesToDelete: number = 0,\n linesToInsert: string[] = [],\n adjustLineElements: boolean = true\n ): void {\n if (adjustLineElements) {\n for (let i = 0; i < linesToDelete; i++) {\n this.e!.removeChild(this.e!.childNodes[startLine]);\n }\n }\n\n let insertedBlank = [];\n let insertedDirty = [];\n\n for (let i = 0; i < linesToInsert.length; i++) {\n insertedBlank.push(\"\");\n insertedDirty.push(true);\n if (adjustLineElements) {\n if (this.e!.childNodes[startLine])\n this.e!.insertBefore(document.createElement(\"div\"), this.e!.childNodes[startLine]);\n else this.e!.appendChild(document.createElement(\"div\"));\n }\n }\n\n this.lines.splice(startLine, linesToDelete, ...linesToInsert);\n this.lineTypes.splice(startLine, linesToDelete, ...insertedBlank);\n this.lineDirty.splice(startLine, linesToDelete, ...insertedDirty);\n }\n\n private fixNodeHierarchy(): void {\n const originalChildren = Array.from(this.e!.childNodes);\n\n const replaceChild = (child: Node, ...newChildren: Node[]) => {\n const parent = child.parentElement!;\n const nextSibling = child.nextSibling;\n parent.removeChild(child);\n newChildren.forEach((newChild) =>\n nextSibling ? parent.insertBefore(newChild, nextSibling) : parent.appendChild(newChild)\n );\n };\n\n originalChildren.forEach((child) => {\n if (child.nodeType !== Node.ELEMENT_NODE || (child as HTMLElement).tagName !== \"DIV\") {\n const divWrapper = document.createElement(\"div\");\n replaceChild(child, divWrapper);\n divWrapper.appendChild(child);\n } else if (child.childNodes.length === 0) {\n child.appendChild(document.createElement(\"br\"));\n } else {\n const grandChildren = Array.from(child.childNodes);\n if (\n grandChildren.some(\n (grandChild) =>\n grandChild.nodeType === Node.ELEMENT_NODE && (grandChild as HTMLElement).tagName === \"DIV\"\n )\n ) {\n return replaceChild(child, ...grandChildren);\n }\n }\n });\n }\n\n private parseLinkOrImage(originalString: string, isImage: boolean): {output: string, charCount: number} | false {\n // Skip the opening bracket\n let textOffset = isImage ? 2 : 1;\n let opener = originalString.substr(0, textOffset);\n let type = isImage ? \"TMImage\" : \"TMLink\";\n let currentOffset = textOffset;\n\n let bracketLevel = 1;\n let linkText: string | false = false;\n let linkRef: string | false = false;\n let linkLabel: string[] = [];\n let linkDetails: string[] = [];\n\n textOuter: while (\n currentOffset < originalString.length &&\n linkText === false\n ) {\n let string = originalString.substr(currentOffset);\n\n // Capture any escapes and code blocks at current position\n for (let rule of [\"escape\", \"code\", \"autolink\", \"html\"]) {\n let cap = this.mergedInlineGrammar[rule].regexp.exec(string);\n if (cap) {\n currentOffset += cap[0].length;\n continue textOuter;\n }\n }\n\n // Check for image\n if (string.match(this.mergedInlineGrammar.imageOpen.regexp)) {\n bracketLevel++;\n currentOffset += 2;\n continue textOuter;\n }\n\n // Check for link\n if (string.match(this.mergedInlineGrammar.linkOpen.regexp)) {\n bracketLevel++;\n if (!isImage) {\n if (this.parseLinkOrImage(string, false)) {\n return false;\n }\n }\n currentOffset += 1;\n continue textOuter;\n }\n\n // Check for closing bracket\n if (string.match(/^\\]/)) {\n bracketLevel--;\n if (bracketLevel === 0) {\n linkText = originalString.substr(textOffset, currentOffset - textOffset);\n currentOffset++;\n continue textOuter;\n }\n }\n\n // Nothing matches, proceed to next char\n currentOffset++;\n }\n\n // Did we find a link text?\n if (linkText === false) return false;\n\n // Check what type of link this is\n let nextChar = currentOffset < originalString.length ? originalString.substr(currentOffset, 1) : \"\";\n\n // REFERENCE LINKS\n if (nextChar === \"[\") {\n let string = originalString.substr(currentOffset);\n let cap = this.mergedInlineGrammar.linkLabel.regexp.exec(string);\n if (cap) {\n currentOffset += cap[0].length;\n linkLabel.push(cap[1], cap[2], cap[3]);\n if (cap[this.mergedInlineGrammar.linkLabel.labelPlaceholder!]) {\n linkRef = cap[this.mergedInlineGrammar.linkLabel.labelPlaceholder!];\n } else {\n linkRef = linkText.trim();\n }\n } else {\n return false;\n }\n } else if (nextChar !== \"(\") {\n // Shortcut ref link\n linkRef = linkText.trim();\n } else {\n // INLINE LINKS\n currentOffset++;\n let parenthesisLevel = 1;\n\n inlineOuter: while (currentOffset < originalString.length && parenthesisLevel > 0) {\n let string = originalString.substr(currentOffset);\n\n // Process whitespace\n let cap = /^\\s+/.exec(string);\n if (cap) {\n switch (linkDetails.length) {\n case 0:\n linkDetails.push(cap[0]);\n break;\n case 1:\n linkDetails.push(cap[0]);\n break;\n case 2:\n if (linkDetails[0].match(/</)) {\n linkDetails[1] = linkDetails[1].concat(cap[0]);\n } else {\n if (parenthesisLevel !== 1) return false;\n linkDetails.push(\"\");\n linkDetails.push(cap[0]);\n }\n break;\n case 3:\n linkDetails.push(cap[0]);\n break;\n case 4:\n return false;\n case 5:\n linkDetails.push(\"\");\n case 6:\n linkDetails[5] = linkDetails[5].concat(cap[0]);\n break;\n case 7:\n linkDetails[6] = linkDetails[6].concat(cap[0]);\n break;\n default:\n return false;\n }\n currentOffset += cap[0].length;\n continue inlineOuter;\n }\n\n // Process backslash escapes\n cap = this.mergedInlineGrammar.escape.regexp.exec(string);\n if (cap) {\n switch (linkDetails.length) {\n case 0:\n linkDetails.push(\"\");\n case 1:\n linkDetails.push(cap[0]);\n break;\n case 2:\n linkDetails[1] = linkDetails[1].concat(cap[0]);\n break;\n case 3:\n return false;\n case 4:\n return false;\n case 5:\n linkDetails.push(\"\");\n case 6:\n linkDetails[5] = linkDetails[5].concat(cap[0]);\n break;\n default:\n return false;\n }\n currentOffset += cap[0].length;\n continue inlineOuter;\n }\n\n // Process opening angle bracket\n if (linkDetails.length < 2 && string.match(/^</)) {\n if (linkDetails.length === 0) linkDetails.push(\"\");\n linkDetails[0] = linkDetails[0].concat(\"<\");\n currentOffset++;\n continue inlineOuter;\n }\n\n // Process closing angle bracket\n if ((linkDetails.length === 1 || linkDetails.length === 2) && string.match(/^>/)) {\n if (linkDetails.length === 1) linkDetails.push(\"\");\n linkDetails.push(\">\");\n currentOffset++;\n continue inlineOuter;\n }\n\n // Process non-parenthesis delimiter for title\n cap = /^[\"']/.exec(string);\n if (cap && (linkDetails.length === 0 || linkDetails.length === 1 || linkDetails.length === 4)) {\n while (linkDetails.length < 4) linkDetails.push(\"\");\n linkDetails.push(cap[0]);\n currentOffset++;\n continue inlineOuter;\n }\n\n if (cap && (linkDetails.length === 5 || linkDetails.length === 6) && linkDetails[4] === cap[0]) {\n if (linkDetails.length === 5) linkDetails.push(\"\");\n linkDetails.push(cap[0]);\n currentOffset++;\n continue inlineOuter;\n }\n\n // Process opening parenthesis\n if (string.match(/^\\(/)) {\n switch (linkDetails.length) {\n case 0:\n linkDetails.push(\"\");\n case 1:\n linkDetails.push(\"\");\n case 2:\n linkDetails[1] = linkDetails[1].concat(\"(\");\n if (!linkDetails[0].match(/<$/)) parenthesisLevel++;\n break;\n case 3:\n linkDetails.push(\"\");\n case 4:\n linkDetails.push(\"(\");\n break;\n case 5:\n linkDetails.push(\"\");\n case 6:\n if (linkDetails[4] === \"(\") return false;\n linkDetails[5] = linkDetails[5].concat(\"(\");\n break;\n default:\n return false;\n }\n currentOffset++;\n continue inlineOuter;\n }\n\n // Process closing parenthesis\n if (string.match(/^\\)/)) {\n if (linkDetails.length <= 2) {\n while (linkDetails.length < 2) linkDetails.push(\"\");\n if (!linkDetails[0].match(/<$/)) parenthesisLevel--;\n if (parenthesisLevel > 0) {\n linkDetails[1] = linkDetails[1].concat(\")\");\n }\n } else if (linkDetails.length === 5 || linkDetails.length === 6) {\n if (linkDetails[4] === \"(\") {\n if (linkDetails.length === 5) linkDetails.push(\"\");\n linkDetails.push(\")\");\n } else {\n if (linkDetails.length === 5) linkDetails.push(\")\");\n else linkDetails[5] = linkDetails[5].concat(\")\");\n }\n } else {\n parenthesisLevel--;\n }\n\n if (parenthesisLevel === 0) {\n while (linkDetails.length < 7) linkDetails.push(\"\");\n }\n\n currentOffset++;\n continue inlineOuter;\n }\n\n // Any old character\n cap = /^./.exec(string);\n if (cap) {\n switch (linkDetails.length) {\n case 0:\n linkDetails.push(\"\");\n case 1:\n linkDetails.push(cap[0]);\n break;\n case 2:\n linkDetails[1] = linkDetails[1].concat(cap[0]);\n break;\n case 3:\n return false;\n case 4:\n return false;\n case 5:\n linkDetails.push(\"\");\n case 6:\n linkDetails[5] = linkDetails[5].concat(cap[0]);\n break;\n default:\n return false;\n }\n currentOffset += cap[0].length;\n continue inlineOuter;\n }\n throw \"Infinite loop\";\n }\n if (parenthesisLevel > 0) return false;\n }\n\n if (linkRef !== false) {\n // Reference link; check that linkRef is valid\n let valid = false;\n for (let label of this.linkLabels) {\n if (label === linkRef) {\n valid = true;\n break;\n }\n }\n let labelClass = valid ? \"TMLinkLabel TMLinkLabel_Valid\" : \"TMLinkLabel TMLinkLabel_Invalid\";\n let output = `<span class=\"TMMark TMMark_${type}\">${opener}</span><span class=\"${type} ${\n linkLabel.length < 3 || !linkLabel[1] ? labelClass : \"\"\n }\">${this.processInlineStyles(linkText)}</span><span class=\"TMMark TMMark_${type}\">]</span>`;\n\n if (linkLabel.length >= 3) {\n output = output.concat(\n `<span class=\"TMMark TMMark_${type}\">${linkLabel[0]}</span>`,\n `<span class=\"${labelClass}\">${linkLabel[1]}</span>`,\n `<span class=\"TMMark TMMark_${type}\">${linkLabel[2]}</span>`\n );\n }\n return {\n output: output,\n charCount: currentOffset,\n };\n } else if (linkDetails.length > 0) {\n // Inline link\n while (linkDetails.length < 7) {\n linkDetails.push(\"\");\n }\n\n return {\n output: `<span class=\"TMMark TMMark_${type}\">${opener}</span><span class=\"${type}\">${this.processInlineStyles(\n linkText\n )}</span><span class=\"TMMark TMMark_${type}\">](${\n linkDetails[0]\n }</span><span class=\"${type}Destination\">${\n linkDetails[1]\n }</span><span class=\"TMMark TMMark_${type}\">${linkDetails[2]}${\n linkDetails[3]\n }${linkDetails[4]}</span><span class=\"${type}Title\">${\n linkDetails[5]\n }</span><span class=\"TMMark TMMark_${type}\">${linkDetails[6]})</span>`,\n charCount: currentOffset,\n };\n }\n\n return false;\n }\n\n private computeCommonAncestor(node1: Node | null, node2: Node | null): Node | null {\n if (!node1 || !node2) return null;\n if (node1 === node2) return node1;\n const ancestry = (node: Node) => {\n let ancestry = [];\n while (node) {\n ancestry.unshift(node);\n node = node.parentNode!;\n }\n return ancestry;\n };\n\n const ancestry1 = ancestry(node1);\n const ancestry2 = ancestry(node2);\n\n if (ancestry1[0] !== ancestry2[0]) return null;\n let i;\n for (i = 0; ancestry1[i] === ancestry2[i]; i++);\n return ancestry1[i - 1];\n }\n\n private computeEnclosingMarkupNode(focus: Position, anchor: Position | null, className: string): Node | null {\n let node = null;\n if (!focus) return null;\n if (!anchor) {\n const sel = window.getSelection();\n if (!sel || !sel.focusNode) return null;\n node = sel.focusNode;\n } else {\n if (focus.row !== anchor.row) return null;\n const sel = window.getSelection();\n if (!sel) return null;\n node = this.computeCommonAncestor(sel.focusNode, sel.anchorNode);\n }\n if (!node) return null;\n while (node !== this.e) {\n if ((node as HTMLElement).className && (node as HTMLElement).className.includes(className)) return node;\n node = node.parentNode!;\n }\n return null;\n }\n\n public getCommandState(focus: Position | null = null, anchor: Position | null = null): Record<string, boolean | null> {\n let commandState: Record<string, boolean | null> = {};\n if (!focus) focus = this.getSelection(false);\n if (!anchor) anchor = this.getSelection(true);\n if (!focus) {\n for (let cmd in commands) {\n commandState[cmd] = null;\n }\n return commandState;\n }\n if (!anchor) anchor = focus;\n\n let start: Position, end: Position;\n if (anchor.row < focus.row || (anchor.row === focus.row && anchor.col < focus.col)) {\n start = anchor;\n end = focus;\n } else {\n start = focus;\n end = anchor;\n }\n if (end.row > start.row && end.col === 0) {\n end.row--;\n end.col = this.lines[end.row].length;\n }\n\n for (let cmd in commands) {\n if (commands[cmd].type === \"inline\") {\n if (!focus || focus.row !== anchor!.row || !this.isInlineFormattingAllowed()) {\n commandState[cmd] = null;\n } else {\n commandState[cmd] =\n !!this.computeEnclosingMarkupNode(focus, anchor, commands[cmd].className) ||\n (focus.col === anchor!.col &&\n !!this.lines[focus.row].substr(0, focus.col).match(commands[cmd].unset.prePattern) &&\n !!this.lines[focus.row].substr(focus.col).match(commands[cmd].unset.postPattern));\n }\n }\n if (commands[cmd].type === \"line\") {\n if (!focus) {\n commandState[cmd] = null;\n } else {\n let state: boolean | null = this.lineTypes[start.row] === commands[cmd].className;\n for (let line = start.row; line <= end.row; line++) {\n if ((this.lineTypes[line] === commands[cmd].className) !== state) {\n state = null;\n break;\n }\n }\n commandState[cmd] = state;\n }\n }\n }\n return commandState;\n }\n\n public setCommandState(command: string, state: boolean): void {\n if (!this.isRestoringHistory) this.pushHistory();\n if (commands[command].type === \"inline\") {\n let anchor = this.getSelection(true);\n let focus = this.getSelection(false);\n if (!anchor) anchor = focus;\n if (!anchor) return;\n if (anchor.row !== focus!.row) return;\n if (!this.isInlineFormattingAllowed()) return;\n let markupNode = this.computeEnclosingMarkupNode(focus!, anchor, commands[command].className);\n this.clearDirtyFlag();\n\n if (markupNode) {\n this.lineDirty[focus!.row] = true;\n const startCol = this.computeColumn(markupNode, 0)!;\n const len = markupNode.textContent!.length;\n const left = this.lines[focus!.row]\n .substr(0, startCol)\n .replace(commands[command].unset.prePattern, \"\");\n const mid = this.lines[focus!.row].substr(startCol, len);\n const right = this.lines[focus!.row]\n .substr(startCol + len)\n .replace(commands[command].unset.postPattern, \"\");\n this.lines[focus!.row] = left.concat(mid, right);\n anchor.col = left.length;\n focus!.col = anchor.col + len;\n this.updateFormatting();\n this.setSelection(focus!, anchor);\n this.fireChange();\n } else if (\n focus!.col === anchor.col &&\n !!this.lines[focus!.row].substr(0, focus!.col).match(commands[command].unset.prePattern) &&\n !!this.lines[focus!.row].substr(focus!.col).match(commands[command].unset.postPattern)\n ) {\n this.lineDirty[focus!.row] = true;\n const left = this.lines[focus!.row]\n .substr(0, focus!.col)\n .replace(commands[command].unset.prePattern, \"\");\n const right = this.lines[focus!.row]\n .substr(focus!.col)\n .replace(commands[command].unset.postPattern, \"\");\n this.lines[focus!.row] = left.concat(right);\n focus!.col = anchor.col = left.length;\n this.updateFormatting();\n this.setSelection(focus!, anchor);\n this.fireChange();\n } else {\n let { startCol, endCol } =\n focus!.col < anchor.col\n ? { startCol: focus!.col, endCol: anchor.col }\n : { startCol: anchor.col, endCol: focus!.col };\n\n let match = this.lines[focus!.row]\n .substr(startCol, endCol - startCol)\n .match(/^(?<leading>\\s*).*\\S(?<trailing>\\s*)$/);\n if (match) {\n startCol += match.groups!.leading.length;\n endCol -= match.groups!.trailing.length;\n }\n\n focus!.col = startCol;\n anchor.col = endCol;\n\n this.wrapSelection(commands[command].set.pre, commands[command].set.post, focus, anchor);\n this.fireChange();\n }\n } else if (commands[command].type === \"line\") {\n let anchor = this.getSelection(true);\n let focus = this.getSelection(false);\n if (!anchor) anchor = focus;\n if (!focus) return;\n this.clearDirtyFlag();\n let start = anchor!.row > focus!.row ? focus! : anchor!;\n let end = anchor!.row > focus!.row ? anchor! : focus!;\n if (end.row > start.row && end.col === 0) {\n end.row--;\n }\n\n for (let line = start.row; line <= end.row; line++) {\n if (state && this.lineTypes[line] !== commands[command].className) {\n this.lines[line] = this.lines[line].replace(\n commands[command].set.pattern,\n commands[command].set.replacement.replace(\"$#\", (line - start.row + 1).toString())\n );\n this.lineDirty[line] = true;\n }\n if (!state && this.lineTypes[line] === commands[command].className) {\n this.lines[line] = this.lines[line].replace(\n commands[command].unset.pattern,\n commands[command].unset.replacement\n );\n this.lineDirty[line] = true;\n }\n }\n this.updateFormatting();\n this.setSelection(\n { row: end.row, col: this.lines[end.row].length },\n { row: start.row, col: 0 }\n );\n this.fireChange();\n }\n }\n\n public isInlineFormattingAllowed(): boolean {\n const sel = window.getSelection();\n if (!sel || !sel.focusNode || !sel.anchorNode) return false;\n\n if (\n sel.isCollapsed &&\n sel.focusNode.nodeType === 3 &&\n sel.focusOffset === sel.focusNode.nodeValue!.length\n ) {\n let node;\n for (node = sel.focusNode; node && node.nextSibling === null; node = node.parentNode!);\n if (\n node &&\n node.nextSibling &&\n (node.nextSibling as HTMLElement).className &&\n (node.nextSibling as HTMLElement).className.includes(\"TMInlineFormatted\")\n )\n return true;\n }\n\n let ancestor = this.computeCommonAncestor(sel.focusNode, sel.anchorNode);\n if (!ancestor) return false;\n\n while (ancestor && ancestor !== this.e) {\n if (\n (ancestor as HTMLElement).className &&\n typeof (ancestor as HTMLElement).className.includes === \"function\" &&\n ((ancestor as HTMLElement).className.includes(\"TMInlineFormatted\") ||\n (ancestor as HTMLElement).className.includes(\"TMBlankLine\"))\n )\n return true;\n ancestor = ancestor.parentNode!;\n }\n\n return false;\n }\n\n public toggleCommandState(command: string): void {\n if (!this.lastCommandState) this.lastCommandState = this.getCommandState();\n this.setCommandState(command, !this.lastCommandState[command]);\n }\n\n private fireDrop(dataTransfer: DataTransfer): void {\n for (let listener of this.listeners.drop) {\n listener({ dataTransfer });\n }\n }\n\n private fireSelection(): void {\n let focus = this.getSelection(false);\n let anchor = this.getSelection(true);\n\n // Save the current selection for restoration later\n this.lastSelection = {\n focus: focus,\n anchor: anchor\n };\n\n if (this.listeners.selection && this.listeners.selection.length) {\n let commandState = this.getCommandState(focus, anchor);\n if (this.lastCommandState) {\n Object.assign(this.lastCommandState, commandState);\n } else {\n this.lastCommandState = Object.assign({}, commandState);\n }\n for (let listener of this.listeners.selection) {\n listener({\n focus: focus!,\n anchor: anchor!,\n commandState: this.lastCommandState,\n });\n }\n }\n }\n}\n\nexport default Editor;\n"],"names":["svg","blockquote","bold","clear_formatting","code","h1","h2","hr","image","italic","link","ol","redo","strikethrough","ul","undo","isMacLike","test","navigator","platform","DefaultCommands","name","action","innerHTML","title","hotkey","insertLink","editor","isInlineFormattingAllowed","wrapSelection","enabled","insertImage","paste","canUndo","canRedo","CommandBar","constructor","props","e","commands","buttons","state","hotkeys","element","document","getElementById","body","createCommandBarElement","addEventListener","handleKeydown","setEditor","parentElement","createElement","className","command","el","appendChild","commandName","Object","assign","keys","split","modifiers","modifierexplanation","i","length","push","lastKey","match","toUpperCase","key","toLowerCase","concat","join","handleClick","event","preventDefault","editorHadFocus","contains","activeElement","focus","restoreLastSelection","setCommandState","handleSelection","commandState","undefined","anchor","outer","modifier","global","this","require$$0","require$$1","require$$2","sharedStoreModule","require$$3","require$$4","require$$5","require$$6","require$$7","makeBuiltIn","makeBuiltInModule","replacements","ASCIIPunctuation","NotTriggerChar","Scheme","Email","HTMLOpenTag","HTMLCloseTag","HTMLTagName","HTMLComment","HTMLPI","HTMLDeclaration","HTMLCDATA","HTMLAttribute","HTMLAttValue","KnownTag","punctuationLeading","RegExp","punctuationTrailing","lineGrammar","TMH1","regexp","replacement","TMH2","TMH3","TMH4","TMH5","TMH6","TMBlockquote","TMCodeFenceBacktickOpen","TMCodeFenceTildeOpen","TMCodeFenceBacktickClose","TMCodeFenceTildeClose","TMBlankLine","TMSetextH1Marker","TMSetextH2Marker","TMHR","TMUL","TMOL","TMIndentedCode","TMLinkReferenceDefinition","labelPlaceholder","htmlBlockGrammar","start","end","paraInterrupt","inlineGrammar","escape","autolink","html","linkOpen","imageOpen","linkLabel","default","replacementRegexp","inlineRules","rule","re","source","replace","string","flags","createMergedInlineGrammar","customRules","arguments","merged","ruleName","entries","processedRule","regexpSource","htmlescape","type","set","pre","post","unset","prePattern","postPattern","pattern","h3","h4","h5","h6","Editor","textarea","lines","lineElements","lineTypes","lineCaptures","lineReplacements","linkLabels","lineDirty","lastCommandState","customInlineGrammar","mergedInlineGrammar","hasFocus","lastSelection","listeners","change","selection","drop","undoStack","redoStack","isRestoringHistory","maxHistory","getElementsByTagName","tagName","parentNode","style","display","createEditorElement","setContent","content","value","handleUndoRedoKey","pushHistory","pushCurrentState","getContent","getSelection","shift","current","pop","prev","setSelection","next","isMac","ctrl","metaKey","ctrlKey","altKey","shiftKey","classList","add","contentEditable","whiteSpace","webkitUserModify","nextSibling","insertBefore","handleInputEvent","handleBeforeInputEvent","handleSelectionChangeEvent","handlePaste","handleDrop","childNodes","firstChild","removeChild","lineNum","le","Array","updateFormatting","fireChange","updateLineTypes","updateLinkLabels","applyLineTypes","l","capture","str","p1","p2","parseInt","processInlineStyles","contentHTML","removeAttribute","dataset","toString","codeBlockType","codeBlockSeqLength","htmlBlock","lineType","lineCapture","lineReplacement","exec","groups","htmlBlockType","headingLine","headingLineType","getAnchor","window","startNode","anchorNode","focusNode","offset","anchorOffset","focusOffset","row","col","computeColumn","node","previousSibling","currentLineNumData","_a","previousLineNumData","_b","currentLineNum","previousLineNum","computeNodeAndOffset","windowSelection","setBaseAndExtent","text","beginning","insertedLines","lineBefore","substr","lineEnd","endColPos","spliceLines","startCol","endCol","left","mid","right","listener","linesDirty","beforeInputEvent","inputType","clearDirtyFlag","substring","continuableType","lineBeforeBreak","lineAfterBreak","result","scrollIntoView","block","inline","inputEvent","fixNodeHierarchy","updateLineContentsAndFormatting","_e","fireSelection","clipboardData","getData","fireDrop","dataTransfer","originalString","processed","stack","cap","potentialLink","potentialImage","parseLinkOrImage","output","charCount","delimCount","delimString","currentDelimiter","preceding","following","punctuationFollows","punctuationPrecedes","whitespaceFollows","whitespacePrecedes","canOpen","canClose","stackPointer","delimiter","entry","count","consumed","nodeType","Node","TEXT_NODE","textContent","bindRight","childrenComplete","rv","nodeValue","updateLineContents","lineDelta","childElementCount","firstChangedLine","lastChangedLine","linesToDelete","linesToAdd","line","ct","startLine","linesToInsert","adjustLineElements","insertedBlank","insertedDirty","splice","originalChildren","from","replaceChild","child","parent","_len","newChildren","_key","forEach","newChild","ELEMENT_NODE","divWrapper","grandChildren","some","grandChild","isImage","textOffset","opener","currentOffset","bracketLevel","linkText","linkRef","linkDetails","textOuter","nextChar","trim","parenthesisLevel","inlineOuter","valid","label","labelClass","computeCommonAncestor","node1","node2","ancestry","unshift","ancestry1","ancestry2","computeEnclosingMarkupNode","sel","includes","getCommandState","cmd","markupNode","len","leading","trailing","isCollapsed","ancestor","toggleCommandState"],"mappings":"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","x_google_ignoreList":[2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49]}