@wizishop/wizi-block 4.2.34-beta → 4.2.35-beta

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.
@@ -457,14 +457,16 @@ export class InlineStyleTool extends EditorJSTool {
457
457
  }
458
458
  identicalAttributes(currentElement, nextElement) {
459
459
  let currentElementAttributes = currentElement.getAttributeNames();
460
- currentElementAttributes.forEach((attribute) => {
461
- if (attribute !== 'style') {
462
- if (!nextElement.getAttribute(attribute) ||
463
- nextElement.getAttribute(attribute) !== currentElement.getAttribute(attribute)) {
464
- return false;
460
+ if (currentElementAttributes) {
461
+ currentElementAttributes.forEach((attribute) => {
462
+ if (attribute !== 'style') {
463
+ if (!nextElement.getAttribute(attribute) ||
464
+ nextElement.getAttribute(attribute) !== currentElement.getAttribute(attribute)) {
465
+ return false;
466
+ }
465
467
  }
466
- }
467
- });
468
+ });
469
+ }
468
470
  return true;
469
471
  }
470
472
  identicalInlineStyle(currentElement, nextElement) {
@@ -600,4 +602,4 @@ export class InlineStyleTool extends EditorJSTool {
600
602
  return element;
601
603
  }
602
604
  }
603
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5saW5lLXN0eWxlLXRvb2wuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Ii9ob21lL3BhdWxpbmUvRG9jdW1lbnRzL3dvcmtzcGFjZS93aXppLWJsb2NrL3Byb2plY3RzL3dpemktYmxvY2svc3JjLyIsInNvdXJjZXMiOlsibGliL3NoYXJlZC9jb21wb25lbnRzL2VkaXRvcmpzL3Rvb2xzL2lubGluZS90b29sLXR5cGUvaW5saW5lLXN0eWxlLXRvb2wuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQW1CLFlBQVksRUFBZSxNQUFNLHFDQUFxQyxDQUFDO0FBRWpHLE1BQU0sT0FBZ0IsZUFBZ0IsU0FBUSxZQUFZO0lBQTFEOztRQUdJLGNBQVMsR0FBRyxXQUFXLENBQUM7UUFJeEIsc0JBQWlCLEdBQVcsQ0FBQyxDQUFDO1FBRTlCLHFCQUFnQixHQUFXLENBQUMsQ0FBQztRQUU3QixvQkFBZSxHQUFZLEtBQUssQ0FBQztRQUVqQyxtQkFBYyxHQUFZLEtBQUssQ0FBQztRQUVoQyxjQUFTLEdBQVcsQ0FBQyxDQUFDO1FBTXRCLG9CQUFlLEdBQVksS0FBSyxDQUFDO1FBTWpDLGlCQUFZLEdBQVksS0FBSyxDQUFDO1FBRTlCLGFBQVEsR0FBRztZQUNQLEdBQUcsRUFBRSxLQUFLO1lBQ1YsS0FBSyxFQUFFLEtBQUs7WUFDWixLQUFLLEVBQUUsS0FBSztZQUNaLFNBQVMsRUFBRSxLQUFLO1NBQ25CLENBQUM7SUFzb0JOLENBQUM7SUFwb0JTLGdCQUFnQixDQUFDLE1BQWM7O1lBQ2pDLE1BQU0sU0FBUyxHQUFxQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3hHLElBQUksQ0FBQyxTQUFTLEVBQUU7Z0JBQ1osT0FBTzthQUNWO1lBQ0QsSUFBSSxVQUFVLEdBQVMsU0FBUyxDQUFDLFVBQVUsQ0FBQztZQUM1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RUFBRTt3QkFDbEYsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7d0JBQzNCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDO3dCQUN6QyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsUUFBUSxDQUFDO3FCQUNyQztvQkFDRCxJQUFJLENBQUMsU0FBUyxJQUFJLFFBQVEsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDO29CQUM5QyxJQUFJLENBQUMsaUJBQWlCLElBQUksUUFBUSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUM7b0JBQ3RELElBQUksQ0FBQyxnQkFBZ0IsSUFBSSxRQUFRLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQztpQkFDeEQ7Z0JBQ0QsSUFBSSxRQUFRLENBQUMsVUFBVSxFQUFFO29CQUNyQixNQUFNLElBQUksQ0FBQyxvQkFBb0IsQ0FBYyxRQUFRLENBQUMsQ0FBQztpQkFDMUQ7Z0JBQ0QsUUFBUSxHQUFHLFFBQVEsQ0FBQyxXQUFXLENBQUM7YUFDbkM7WUFDRCxJQUFJLGFBQWEsRUFBRTtnQkFDZixJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQzthQUM3QjtRQUNMLENBQUM7S0FBQTtJQUVPLHNCQUFzQixDQUFDLE9BQW9COztRQUMvQyxPQUFPLE9BQU8sQ0FBQyxRQUFRLElBQUksT0FBTyxDQUFDLFNBQVMsWUFBbUIsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUUsMENBQUUsU0FBUyxDQUFBLElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQzdILE9BQU8sR0FBZ0IsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUM5QztRQUNELE9BQU8sT0FBTyxDQUFDO0lBQ25CLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEF0dHJpYnV0ZU9iamVjdCwgRWRpdG9ySlNUb29sLCBTdHlsZU9iamVjdCB9IGZyb20gJy4uLy4uL3V0aWxzL2VkaXRvcmpzLXRvb2wuY29tcG9uZW50JztcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIElubGluZVN0eWxlVG9vbCBleHRlbmRzIEVkaXRvckpTVG9vbCB7XG4gICAgdGFnOiBzdHJpbmc7XG5cbiAgICBtb2RpZmllcnMgPSAnc3Ryb25nLGVtJztcblxuICAgIHN0eWxlPzogU3R5bGVPYmplY3Q7XG5cbiAgICBmb3VuZEFuY2hvck9mZnNldDogbnVtYmVyID0gMDtcblxuICAgIGZvdW5kRm9jdXNPZmZzZXQ6IG51bWJlciA9IDA7XG5cbiAgICBmb3VuZEFuY2hvck5vZGU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIGZvdW5kRm9jdXNOb2RlOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICB0bXBPZmZzZXQ6IG51bWJlciA9IDA7XG5cbiAgICBjbGFzc1RvQXBwbHk/OiBzdHJpbmc7XG5cbiAgICBjbGFzc2VzPzogc3RyaW5nO1xuXG4gICAgbW9kaWZpZWRDb250ZW50OiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBhdHRyaWJ1dGVOYW1lPzogc3RyaW5nO1xuXG4gICAgYXR0cmlidXRlc1RvQXBwbHk/OiBBcnJheTxBdHRyaWJ1dGVPYmplY3Q+O1xuXG4gICAgbGlua0RlbGV0aW9uOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBtb2RpZmllcyA9IHtcbiAgICAgICAgdGFnOiBmYWxzZSxcbiAgICAgICAgc3R5bGU6IGZhbHNlLFxuICAgICAgICBjbGFzczogZmFsc2UsXG4gICAgICAgIGF0dHJpYnV0ZTogZmFsc2UsXG4gICAgfTtcblxuICAgIGFzeW5jIGV4ZWNDb21tYW5kU3R5bGUoYWN0aW9uOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0aW9uOiBTZWxlY3Rpb24gfCBudWxsID0gdGhpcy5jdXJyZW50U2VsZWN0aW9uID8gdGhpcy5jdXJyZW50U2VsZWN0aW9uIDogdGhpcy5nZXRTZWxlY3Rpb24oKTtcbiAgICAgICAgaWYgKCFzZWxlY3Rpb24pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBsZXQgYW5jaG9yTm9kZTogTm9kZSA9IHNlbGVjdGlvbi5hbmNob3JOb2RlO1xuICAgICAgICBpZiAoIXRoaXMucGFyZW50RWRpdG9yKSB7XG4gICAgICAgICAgICB0aGlzLnBhcmVudEVkaXRvciA9IHRoaXMuZmluZFBhcmVudEVkaXRvcigpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFhbmNob3JOb2RlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGNvbnRhaW5lcjogSFRNTEVsZW1lbnQgPVxuICAgICAgICAgICAgYW5jaG9yTm9kZS5ub2RlVHlwZSAhPT0gTm9kZS5URVhUX05PREUgJiYgYW5jaG9yTm9kZS5ub2RlVHlwZSAhPT0gTm9kZS5DT01NRU5UX05PREVcbiAgICAgICAgICAgICAgICA/IChhbmNob3JOb2RlIGFzIEhUTUxFbGVtZW50KVxuICAgICAgICAgICAgICAgIDogYW5jaG9yTm9kZS5wYXJlbnRFbGVtZW50O1xuICAgICAgICBjb25zdCBzYW1lU2VsZWN0aW9uOiBib29sZWFuID0gY29udGFpbmVyICYmIGNvbnRhaW5lci5pbm5lclRleHQgPT09IHNlbGVjdGlvbi50b1N0cmluZygpO1xuICAgICAgICBhd2FpdCB0aGlzLnNhdmVJbmxpbmVTZWxlY3Rpb24oY29udGFpbmVyLCB0cnVlKTtcbiAgICAgICAgY29uc29sZS5sb2coJz09PSBpbmxpbmUgdG9vbCBleGVjQ29tbWFuZFN0eWxlIG1ldGhvZCA9PT0nKTtcbiAgICAgICAgY29uc29sZS5sb2codGhpcy5oYXNTdHlsZShjb250YWluZXIpKTtcblxuICAgICAgICAvLyBMaW5rIGRlbGV0ZSBleGNlcHRpb25cbiAgICAgICAgaWYgKHRoaXMubGlua0RlbGV0aW9uKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLnJlcGxhY2VMaW5rKHNlbGVjdGlvbiwgdGhpcy5oYXNTdHlsZShjb250YWluZXIpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBzYW1lU2VsZWN0aW9uICYmXG4gICAgICAgICAgICAgICAgIXRoaXMuaXNDb250YWluZXIodGhpcy50ZXh0Q29udGFpbmVycywgY29udGFpbmVyKSAmJlxuICAgICAgICAgICAgICAgIHRoaXMuaGFzU3R5bGUoY29udGFpbmVyKSAmJlxuICAgICAgICAgICAgICAgIHNlbGVjdGlvbi50b1N0cmluZygpID09PSB0aGlzLmhhc1N0eWxlKGNvbnRhaW5lcikuaW5uZXJUZXh0XG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnLT4gdXBkYXRlIHNlbGVjdGlvbicpO1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMudXBkYXRlU2VsZWN0aW9uKHNlbGVjdGlvbiwgdGhpcy5oYXNTdHlsZShjb250YWluZXIpLCBhY3Rpb24sIHRoaXMudGV4dENvbnRhaW5lcnMpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnLT4gcmVwbGFjZSBzZWxlY3Rpb24nKTtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnJlcGxhY2VTZWxlY3Rpb24odGhpcy5nZXRNb3N0RGVzY2VuZGFudENoaWxkKGNvbnRhaW5lciksIGFjdGlvbiwgc2VsZWN0aW9uLCB0aGlzLnRleHRDb250YWluZXJzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBhd2FpdCB0aGlzLmNsZWFudXBDb250YWluZXIoc2VsZWN0aW9uLCBjb250YWluZXIsIHRydWUpO1xuICAgICAgICBpZiAodGhpcy5tb2RpZmllZENvbnRlbnQpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMucmVzZXRJbmxpbmVTZWxlY3Rpb24oY29udGFpbmVyLCB0cnVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgdXBkYXRlU2VsZWN0aW9uKHNlbGVjdGlvbjogU2VsZWN0aW9uLCBjb250YWluZXI6IEhUTUxFbGVtZW50LCBhY3Rpb246IHN0cmluZywgY29udGFpbmVyczogc3RyaW5nKSB7XG4gICAgICAgIGlmICh0aGlzLm1vZGlmaWVzLnN0eWxlKSB7XG4gICAgICAgICAgICBjb25zdCBjc3MgPSB0aGlzLnN0eWxlLnByb3BlcnR5O1xuICAgICAgICAgICAgbGV0IHZhbHVlID0gYXdhaXQgdGhpcy5nZXRTdHlsZVZhbHVlKGNvbnRhaW5lciwgYWN0aW9uLCBjb250YWluZXJzKTtcbiAgICAgICAgICAgIGlmICh2YWx1ZSAhPT0gdGhpcy5zdHlsZS5kZWZhdWx0KSB7XG4gICAgICAgICAgICAgICAgY29udGFpbmVyLnN0eWxlW2Nzc10gPSB2YWx1ZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29udGFpbmVyLnN0eWxlLnJlbW92ZVByb3BlcnR5KHRoaXMuc3R5bGUucHJvcGVydHkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgcmFuZ2U6IFJhbmdlID0gdGhpcy5nZXRSYW5nZU9iamVjdChzZWxlY3Rpb24pO1xuICAgICAgICAgICAgbGV0IG5ld0VsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRoaXMuaGFzU3R5bGUoY29udGFpbmVyKSA/ICdzcGFuJyA6IHRoaXMudGFnKTtcbiAgICAgICAgICAgIGlmICh0aGlzLm1vZGlmaWVzLmNsYXNzKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5yZW1vdmVDaGlsZHJlbkNsYXNzZXMobmV3RWxlbWVudCk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY2xhc3NUb0FwcGx5ICE9PSAnJykge1xuICAgICAgICAgICAgICAgICAgICBuZXdFbGVtZW50LmNsYXNzTGlzdC5hZGQodGhpcy5jbGFzc1RvQXBwbHkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLm1vZGlmaWVzLmF0dHJpYnV0ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuYXR0cmlidXRlc1RvQXBwbHkuZm9yRWFjaCgoYXR0cmlidXRlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIG5ld0VsZW1lbnQuc2V0QXR0cmlidXRlKGF0dHJpYnV0ZS5uYW1lLCBhdHRyaWJ1dGUudmFsdWUpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbmV3RWxlbWVudCA9IHRoaXMuc2V0SW5saW5lU3R5bGUoY29udGFpbmVyLCBuZXdFbGVtZW50KTtcblxuICAgICAgICAgICAgd2hpbGUgKGNvbnRhaW5lci5maXJzdENoaWxkKSB7XG4gICAgICAgICAgICAgICAgbGV0IGVsZW1lbnRDbG9uZSA9IGNvbnRhaW5lci5maXJzdENoaWxkLmNsb25lTm9kZSh0cnVlKTtcbiAgICAgICAgICAgICAgICBuZXdFbGVtZW50LmFwcGVuZENoaWxkKGVsZW1lbnRDbG9uZSk7XG4gICAgICAgICAgICAgICAgY29udGFpbmVyLmZpcnN0Q2hpbGQucmVtb3ZlKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnRhaW5lci5wYXJlbnRFbGVtZW50LnJlcGxhY2VDaGlsZChuZXdFbGVtZW50LCBjb250YWluZXIpO1xuXG4gICAgICAgICAgICByYW5nZS5pbnNlcnROb2RlKG5ld0VsZW1lbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyByZXBsYWNlU2VsZWN0aW9uKGNvbnRhaW5lcjogSFRNTEVsZW1lbnQsIGFjdGlvbjogc3RyaW5nLCBzZWxlY3Rpb246IFNlbGVjdGlvbiwgY29udGFpbmVyczogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IGZvY3VzTm9kZTogTm9kZSA9IHNlbGVjdGlvbi5mb2N1c05vZGU7XG4gICAgICAgIGxldCBvZmZzZXRDb250YWluZXI6IEhUTUxFbGVtZW50ID1cbiAgICAgICAgICAgIGZvY3VzTm9kZS5ub2RlVHlwZSAhPT0gTm9kZS5URVhUX05PREUgJiYgZm9jdXNOb2RlLm5vZGVUeXBlICE9PSBOb2RlLkNPTU1FTlRfTk9ERVxuICAgICAgICAgICAgICAgID8gKGZvY3VzTm9kZSBhcyBIVE1MRWxlbWVudClcbiAgICAgICAgICAgICAgICA6IGZvY3VzTm9kZS5wYXJlbnRFbGVtZW50O1xuXG4gICAgICAgIGxldCBwYXJlbnRDb250YWluZXIgPSB0aGlzLmhhc1N0eWxlKGNvbnRhaW5lcik7XG4gICAgICAgIGxldCBvZmZzZXRQYXJlbnRDb250YWluZXIgPSB0aGlzLmhhc1N0eWxlKG9mZnNldENvbnRhaW5lcik7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHBhcmVudENvbnRhaW5lciAmJlxuICAgICAgICAgICAgcGFyZW50Q29udGFpbmVyID09PSBvZmZzZXRQYXJlbnRDb250YWluZXIgJiZcbiAgICAgICAgICAgICgocGFyZW50Q29udGFpbmVyLmNoaWxkcmVuLmxlbmd0aCA+IDAgJiYgcGFyZW50Q29udGFpbmVyLmlubmVyVGV4dCAhPT0gcGFyZW50Q29udGFpbmVyLmNoaWxkcmVuWzBdLnRleHRDb250ZW50KSB8fFxuICAgICAgICAgICAgICAgIHBhcmVudENvbnRhaW5lci5pbm5lclRleHQgIT09IHNlbGVjdGlvbi50b1N0cmluZygpKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdpZicpO1xuICAgICAgICAgICAgY29uc3QgcmFuZ2U6IFJhbmdlID0gdGhpcy5nZXRSYW5nZU9iamVjdChzZWxlY3Rpb24pO1xuICAgICAgICAgICAgY29uc3QgY3VycmVudEZyYWdtZW50OiBEb2N1bWVudEZyYWdtZW50ID0gcmFuZ2UuZXh0cmFjdENvbnRlbnRzKCk7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50RWxlbWVudDogSFRNTFNwYW5FbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xuICAgICAgICAgICAgY3VycmVudEVsZW1lbnQuYXBwZW5kQ2hpbGQoY3VycmVudEZyYWdtZW50KTtcbiAgICAgICAgICAgIGlmICh0aGlzLm1vZGlmaWVzLnN0eWxlICYmIHRoaXMuc3R5bGUudmFsdWUuaW5kZXhPZignJDEnKSA+IC0xKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudEVsZW1lbnQuc3R5bGVbdGhpcy5zdHlsZS5wcm9wZXJ0eV0gPSB0aGlzLnN0eWxlLnZhbHVlLnJlcGxhY2UoJyQxJywgdGhpcy5zdHlsZS5pbnB1dCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5tb2RpZmllcy5jbGFzcykge1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucmVtb3ZlQ2hpbGRyZW5DbGFzc2VzKGN1cnJlbnRFbGVtZW50KTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jbGFzc1RvQXBwbHkgIT09ICcnKSB7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRFbGVtZW50LmNsYXNzTGlzdC5hZGQodGhpcy5jbGFzc1RvQXBwbHkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLm1vZGlmaWVzLmF0dHJpYnV0ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuYXR0cmlidXRlc1RvQXBwbHkuZm9yRWFjaCgoYXR0cmlidXRlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRFbGVtZW50LnNldEF0dHJpYnV0ZShhdHRyaWJ1dGUubmFtZSwgYXR0cmlidXRlLnZhbHVlKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBjdXJyZW50RWxlbWVudFRvQXBwZW5kID0gY3VycmVudEVsZW1lbnQ7XG4gICAgICAgICAgICBsZXQgY3VycmVudFBhcmVudEVsZW1lbnQgPSBjb250YWluZXI7XG4gICAgICAgICAgICBpZiAocGFyZW50Q29udGFpbmVyLmNvbnRhaW5zKGN1cnJlbnRQYXJlbnRFbGVtZW50KSkge1xuICAgICAgICAgICAgICAgIHdoaWxlIChjdXJyZW50UGFyZW50RWxlbWVudCAhPT0gcGFyZW50Q29udGFpbmVyKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCB0bXBFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChjdXJyZW50UGFyZW50RWxlbWVudC50YWdOYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgdG1wRWxlbWVudCA9IHRoaXMuc2V0SW5saW5lU3R5bGUoY3VycmVudFBhcmVudEVsZW1lbnQsIHRtcEVsZW1lbnQpO1xuXG4gICAgICAgICAgICAgICAgICAgIHRtcEVsZW1lbnQuYXBwZW5kQ2hpbGQoY3VycmVudEVsZW1lbnRUb0FwcGVuZCk7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRFbGVtZW50VG9BcHBlbmQgPSB0bXBFbGVtZW50O1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50UGFyZW50RWxlbWVudCA9IGN1cnJlbnRQYXJlbnRFbGVtZW50LnBhcmVudEVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBpc0xUUiA9IHRoaXMuaXNBbmNob3JCZWZvcmVGb2N1cyhcbiAgICAgICAgICAgICAgICBzZWxlY3Rpb24uYW5jaG9yTm9kZSxcbiAgICAgICAgICAgICAgICBzZWxlY3Rpb24uYW5jaG9yT2Zmc2V0LFxuICAgICAgICAgICAgICAgIHNlbGVjdGlvbi5mb2N1c05vZGUsXG4gICAgICAgICAgICAgICAgc2VsZWN0aW9uLmZvY3VzT2Zmc2V0XG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBsZXQgc2VsZWN0aW9uRm9jdXNPZmZzZXQgPSBpc0xUUiA/IHNlbGVjdGlvbi5hbmNob3JPZmZzZXQgOiBzZWxlY3Rpb24uZm9jdXNPZmZzZXQ7XG4gICAgICAgICAgICBsZXQgc2VsZWN0aW9uRm9jdXNOb2RlID0gaXNMVFIgPyBzZWxlY3Rpb24uYW5jaG9yTm9kZSA6IHNlbGVjdGlvbi5mb2N1c05vZGU7XG5cbiAgICAgICAgICAgIGRvY3VtZW50LmdldFNlbGVjdGlvbigpLnNldEJhc2VBbmRFeHRlbnQocGFyZW50Q29udGFpbmVyLCAwLCBzZWxlY3Rpb25Gb2N1c05vZGUsIHNlbGVjdGlvbkZvY3VzT2Zmc2V0KTtcbiAgICAgICAgICAgIGNvbnN0IG5ld1NlbGVjdGlvbiA9IHRoaXMuZ2V0U2VsZWN0aW9uKCk7XG4gICAgICAgICAgICBsZXQgcHJlUmFuZ2U6IFJhbmdlID0gdGhpcy5nZXRSYW5nZU9iamVjdChuZXdTZWxlY3Rpb24pO1xuXG4gICAgICAgICAgICBjb25zdCBwcmVGcmFnbWVudDogRG9jdW1lbnRGcmFnbWVudCA9IHByZVJhbmdlLmV4dHJhY3RDb250ZW50cygpO1xuXG4gICAgICAgICAgICBsZXQgbmV3RWxlbWVudDogSFRNTEVsZW1lbnQgPSA8SFRNTEVsZW1lbnQ+cGFyZW50Q29udGFpbmVyLmNsb25lTm9kZSgpO1xuICAgICAgICAgICAgbmV3RWxlbWVudC5pbm5lckhUTUwgPSAnJztcbiAgICAgICAgICAgIG5ld0VsZW1lbnQuYXBwZW5kQ2hpbGQocHJlRnJhZ21lbnQpO1xuXG4gICAgICAgICAgICBwYXJlbnRDb250YWluZXIucGFyZW50RWxlbWVudC5pbnNlcnRCZWZvcmUoY3VycmVudEVsZW1lbnRUb0FwcGVuZCwgcGFyZW50Q29udGFpbmVyKTtcbiAgICAgICAgICAgIHBhcmVudENvbnRhaW5lci5wYXJlbnRFbGVtZW50Lmluc2VydEJlZm9yZShuZXdFbGVtZW50LCBjdXJyZW50RWxlbWVudFRvQXBwZW5kKTtcbiAgICAgICAgICAgIGlmICghcGFyZW50Q29udGFpbmVyLnRleHRDb250ZW50IHx8IHBhcmVudENvbnRhaW5lci50ZXh0Q29udGVudC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICBwYXJlbnRDb250YWluZXIucGFyZW50RWxlbWVudC5yZW1vdmVDaGlsZChwYXJlbnRDb250YWluZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2VsZWN0aW9uLnNlbGVjdEFsbENoaWxkcmVuKGN1cnJlbnRFbGVtZW50VG9BcHBlbmQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ2Vsc2UnKTtcbiAgICAgICAgICAgIGNvbnN0IHJhbmdlOiBSYW5nZSA9IHRoaXMuZ2V0UmFuZ2VPYmplY3Qoc2VsZWN0aW9uKTtcbiAgICAgICAgICAgIGNvbnN0IGZyYWdtZW50OiBEb2N1bWVudEZyYWdtZW50ID0gcmFuZ2UuZXh0cmFjdENvbnRlbnRzKCk7XG4gICAgICAgICAgICBsZXQgZnJhZ21lbnRFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG5cbiAgICAgICAgICAgIGxldCBuZXdFbGVtZW50OiBIVE1MRWxlbWVudCB8IG51bGwgPSBhd2FpdCB0aGlzLmNyZWF0ZUVsZW1lbnQoY29udGFpbmVyLCBhY3Rpb24sIGNvbnRhaW5lcnMpO1xuICAgICAgICAgICAgbGV0IGVsZW1lbnRUb0FwcGVuZCA9IG5ld0VsZW1lbnQ7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhuZXdFbGVtZW50KTtcblxuICAgICAgICAgICAgZnJhZ21lbnRFbGVtZW50LmFwcGVuZChmcmFnbWVudCk7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgZnJhZ21lbnRFbGVtZW50LmNoaWxkcmVuPy5sZW5ndGggPT09IDEgJiZcbiAgICAgICAgICAgICAgICB0aGlzLnRleHRDb250YWluZXJzLnNwbGl0KCcsJykuaW5kZXhPZihmcmFnbWVudEVsZW1lbnQuY2hpbGRyZW5bMF0udGFnTmFtZS50b0xvd2VyQ2FzZSgpKSA+IC0xXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBlbGVtZW50VG9BcHBlbmQgPSA8SFRNTEVsZW1lbnQ+ZnJhZ21lbnRFbGVtZW50LmNoaWxkcmVuWzBdO1xuICAgICAgICAgICAgICAgIG5ld0VsZW1lbnQuaW5uZXJIVE1MID0gKDxIVE1MRWxlbWVudD5mcmFnbWVudEVsZW1lbnQuY2hpbGRyZW5bMF0pLmlubmVySFRNTDtcbiAgICAgICAgICAgICAgICBlbGVtZW50VG9BcHBlbmQuaW5uZXJIVE1MID0gJyc7XG4gICAgICAgICAgICAgICAgZWxlbWVudFRvQXBwZW5kLmFwcGVuZChuZXdFbGVtZW50KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbmV3RWxlbWVudC5pbm5lckhUTUwgPSBmcmFnbWVudEVsZW1lbnQuaW5uZXJIVE1MO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMubW9kaWZpZXMuY2xhc3MpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnJlbW92ZUNoaWxkcmVuQ2xhc3NlcyhuZXdFbGVtZW50KTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jbGFzc1RvQXBwbHkgIT09ICcnKSB7XG4gICAgICAgICAgICAgICAgICAgIG5ld0VsZW1lbnQuY2xhc3NMaXN0LmFkZCh0aGlzLmNsYXNzVG9BcHBseSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMubW9kaWZpZXMuYXR0cmlidXRlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hdHRyaWJ1dGVzVG9BcHBseS5mb3JFYWNoKChhdHRyaWJ1dGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgbmV3RWxlbWVudC5zZXRBdHRyaWJ1dGUoYXR0cmlidXRlLm5hbWUsIGF0dHJpYnV0ZS52YWx1ZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJhbmdlLmluc2VydE5vZGUoZWxlbWVudFRvQXBwZW5kKTtcbiAgICAgICAgICAgIHNlbGVjdGlvbi5zZWxlY3RBbGxDaGlsZHJlbihlbGVtZW50VG9BcHBlbmQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyByZXBsYWNlTGluayhzZWxlY3Rpb246IFNlbGVjdGlvbiwgY29udGFpbmVyOiBIVE1MRWxlbWVudCkge1xuICAgICAgICBsZXQgbmV3RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcbiAgICAgICAgbmV3RWxlbWVudC5pbm5lckhUTUwgPSBjb250YWluZXIuaW5uZXJIVE1MO1xuXG4gICAgICAgIGNvbnRhaW5lci5wYXJlbnRFbGVtZW50LnJlcGxhY2VDaGlsZChuZXdFbGVtZW50LCBjb250YWluZXIpO1xuICAgICAgICBzZWxlY3Rpb24uc2VsZWN0QWxsQ2hpbGRyZW4obmV3RWxlbWVudCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc0FuY2hvckJlZm9yZUZvY3VzKGFuY2hvck5vZGU6IE5vZGUsIGFuY2hvck9mZnNldDogbnVtYmVyLCBmb2N1c05vZGU6IE5vZGUsIGZvY3VzT2Zmc2V0OiBudW1iZXIpIHtcbiAgICAgICAgbGV0IGFuY2hvclJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcbiAgICAgICAgbGV0IGZvY3VzUmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xuICAgICAgICBhbmNob3JSYW5nZS5zZXRTdGFydChhbmNob3JOb2RlLCBhbmNob3JPZmZzZXQpO1xuICAgICAgICBhbmNob3JSYW5nZS5zZXRFbmQoYW5jaG9yTm9kZSwgYW5jaG9yT2Zmc2V0KTtcbiAgICAgICAgZm9jdXNSYW5nZS5zZXRTdGFydChmb2N1c05vZGUsIGZvY3VzT2Zmc2V0KTtcbiAgICAgICAgZm9jdXNSYW5nZS5zZXRFbmQoZm9jdXNOb2RlLCBmb2N1c09mZnNldCk7XG4gICAgICAgIGlmIChhbmNob3JSYW5nZS5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2UuU1RBUlRfVE9fU1RBUlQsIGZvY3VzUmFuZ2UpID09PSAtMSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGhhc1N0eWxlKGVsZW1lbnQ6IEhUTUxFbGVtZW50LCBmaXJzdFRpbWVDYWxsOiBib29sZWFuID0gdHJ1ZSk6IEhUTUxFbGVtZW50IHwgbnVsbCB7XG4gICAgICAgIGlmIChmaXJzdFRpbWVDYWxsICYmIGVsZW1lbnQuY2hpbGRyZW4pIHtcbiAgICAgICAgICAgIGVsZW1lbnQgPSB0aGlzLmdldE1vc3REZXNjZW5kYW50Q2hpbGQoPEhUTUxFbGVtZW50PmVsZW1lbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gZm91bmRFbGVtZW50IHdhcyBhZGRlZCBiZWNhdXNlIG9mIGEgcmV0dXJuIGlzc3VlIHdoZW4gYSBjbGFzcyBpcyBhcHBsaWVkXG4gICAgICAgIGxldCBmb3VuZEVsZW1lbnQ6IEhUTUxFbGVtZW50IHwgbnVsbCA9IG51bGw7XG5cbiAgICAgICAgaWYgKCFlbGVtZW50IHx8IGVsZW1lbnQuY2xhc3NMaXN0Py5jb250YWlucygnY2UtcGFyYWdyYXBoJykpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm1vZGlmaWVzLnN0eWxlKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgZWxlbWVudC5zdHlsZSAmJlxuICAgICAgICAgICAgICAgIGVsZW1lbnQuc3R5bGVbdGhpcy5zdHlsZS5wcm9wZXJ0eV0gJiZcbiAgICAgICAgICAgICAgICAodGhpcy5zdHlsZS52YWx1ZS5pbmRleE9mKCckMScpID4gLTEgPyB0cnVlIDogZWxlbWVudC5zdHlsZVt0aGlzLnN0eWxlLnByb3BlcnR5XSA9PT0gdGhpcy5zdHlsZS52YWx1ZSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGZvdW5kRWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5tb2RpZmllcy5jbGFzcykge1xuICAgICAgICAgICAgdGhpcy5jbGFzc2VzLnNwbGl0KCcsJykuZm9yRWFjaCgoY2xhc3NOYW1lKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQuY2xhc3NMaXN0Py5jb250YWlucyhjbGFzc05hbWUpID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvdW5kRWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBlbGVtZW50O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMubW9kaWZpZXMudGFnKSB7XG4gICAgICAgICAgICBpZiAoZWxlbWVudC50YWdOYW1lPy50b0xvd2VyQ2FzZSgpID09PSB0aGlzLnRhZy50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5tb2RpZmllcy5hdHRyaWJ1dGUpIHtcbiAgICAgICAgICAgIGxldCBhdHRyaWJ1dGVzID0gdGhpcy5hdHRyaWJ1dGVOYW1lLnNwbGl0KCcsJyk7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJpYnV0ZXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGVsZW1lbnQuZ2V0QXR0cmlidXRlID09PSAnZnVuY3Rpb24nICYmIGVsZW1lbnQuZ2V0QXR0cmlidXRlKGF0dHJpYnV0ZXNbaV0pKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvdW5kRWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBlbGVtZW50O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoZm91bmRFbGVtZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gZm91bmRFbGVtZW50O1xuICAgICAgICB9XG4gICAgICAgIGlmICghZm91bmRFbGVtZW50ICYmIGVsZW1lbnQucGFyZW50RWxlbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaGFzU3R5bGUoZWxlbWVudC5wYXJlbnRFbGVtZW50LCBmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBnZXRTdHlsZVZhbHVlKGNvbnRhaW5lcjogSFRNTEVsZW1lbnQsIGFjdGlvbjogc3RyaW5nLCBjb250YWluZXJzOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZyB8IG51bGw+IHtcbiAgICAgICAgaWYgKCFjb250YWluZXIpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnN0eWxlLnZhbHVlLmluZGV4T2YoJyQxJykgPiAtMSA/IHRoaXMuc3R5bGUudmFsdWUucmVwbGFjZSgnJDEnLCB0aGlzLnN0eWxlLmlucHV0KSA6IHRoaXMuc3R5bGUudmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5oYXNTdHlsZShjb250YWluZXIpICYmIHRoaXMuc3R5bGUudmFsdWUuaW5kZXhPZignJDEnKSA9PT0gLTEpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnN0eWxlLmRlZmF1bHQ7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzdHlsZTogTm9kZSB8IG51bGwgPSBhd2FpdCB0aGlzLmZpbmRTdHlsZU5vZGUoY29udGFpbmVyLCBhY3Rpb24sIGNvbnRhaW5lcnMpO1xuICAgICAgICBpZiAoc3R5bGUgJiYgdGhpcy5oYXNTdHlsZShzdHlsZSBhcyBIVE1MRWxlbWVudCkgJiYgdGhpcy5zdHlsZS52YWx1ZS5pbmRleE9mKCckMScpID09PSAtMSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3R5bGUuZGVmYXVsdDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLnN0eWxlLnZhbHVlLmluZGV4T2YoJyQxJykgPiAtMSA/IHRoaXMuc3R5bGUudmFsdWUucmVwbGFjZSgnJDEnLCB0aGlzLnN0eWxlLmlucHV0KSA6IHRoaXMuc3R5bGUudmFsdWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBmaW5kU3R5bGVOb2RlKG5vZGU6IE5vZGUsIHN0eWxlOiBzdHJpbmcsIGNvbnRhaW5lcnM6IHN0cmluZyk6IFByb21pc2U8Tm9kZSB8IG51bGw+IHtcbiAgICAgICAgaWYgKG5vZGUubm9kZU5hbWUudG9VcHBlckNhc2UoKSA9PT0gJ0hUTUwnIHx8IG5vZGUubm9kZU5hbWUudG9VcHBlckNhc2UoKSA9PT0gJ0JPRFknKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghbm9kZS5wYXJlbnROb2RlKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmlzQ29udGFpbmVyKGNvbnRhaW5lcnMsIG5vZGUpKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGhhc1N0eWxlOiBib29sZWFuID1cbiAgICAgICAgICAgIChub2RlIGFzIEhUTUxFbGVtZW50KS5zdHlsZVtzdHlsZV0gIT09IG51bGwgJiZcbiAgICAgICAgICAgIChub2RlIGFzIEhUTUxFbGVtZW50KS5zdHlsZVtzdHlsZV0gIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgKG5vZGUgYXMgSFRNTEVsZW1lbnQpLnN0eWxlW3N0eWxlXSAhPT0gJyc7XG5cbiAgICAgICAgaWYgKGhhc1N0eWxlKSB7XG4gICAgICAgICAgICByZXR1cm4gbm9kZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmZpbmRTdHlsZU5vZGUobm9kZS5wYXJlbnROb2RlLCBzdHlsZSwgY29udGFpbmVycyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBjcmVhdGVFbGVtZW50KGNvbnRhaW5lcjogSFRNTEVsZW1lbnQsIGFjdGlvbjogc3RyaW5nLCBjb250YWluZXJzOiBzdHJpbmcpOiBQcm9taXNlPEhUTUxFbGVtZW50PiB7XG4gICAgICAgIGxldCBuZXdFbGVtZW50OiBIVE1MRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGhpcy50YWcpO1xuICAgICAgICBpZiAodGhpcy5tb2RpZmllcy5zdHlsZSkge1xuICAgICAgICAgICAgY29uc3QgcHJvcGVydHkgPSB0aGlzLnN0eWxlLnByb3BlcnR5O1xuICAgICAgICAgICAgbGV0IHZhbHVlID0gYXdhaXQgdGhpcy5nZXRTdHlsZVZhbHVlKGNvbnRhaW5lciwgYWN0aW9uLCBjb250YWluZXJzKTtcbiAgICAgICAgICAgIGlmICh2YWx1ZSAhPT0gdGhpcy5zdHlsZS5kZWZhdWx0KSB7XG4gICAgICAgICAgICAgICAgbmV3RWxlbWVudC5zdHlsZVtwcm9wZXJ0eV0gPSB2YWx1ZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbmV3RWxlbWVudC5zdHlsZS5yZW1vdmVQcm9wZXJ0eShwcm9wZXJ0eSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3RWxlbWVudDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIHJlbW92ZUNoaWxkcmVuQ2xhc3NlcyhlbGVtZW50OiBIVE1MRWxlbWVudCkge1xuICAgICAgICBpZiAoIWVsZW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNoaWxkcmVuOiBIVE1MQ29sbGVjdGlvbiA9IGVsZW1lbnQuY2hpbGRyZW47XG4gICAgICAgIGZvciAodmFyIGN1cnJlbnRFbGVtZW50ID0gY2hpbGRyZW5bMF07IGN1cnJlbnRFbGVtZW50OyBjdXJyZW50RWxlbWVudCA9IGN1cnJlbnRFbGVtZW50Lm5leHRFbGVtZW50U2libGluZykge1xuICAgICAgICAgICAgdGhpcy5jbGFzc2VzLnNwbGl0KCcsJykuZm9yRWFjaCgoY2xhc3NOYW1lKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRFbGVtZW50LmNsYXNzTGlzdD8uY29udGFpbnMoY2xhc3NOYW1lKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudEVsZW1lbnQuY2xhc3NMaXN0Lmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudEVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCdjbGFzcycpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudEVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShjbGFzc05hbWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoY3VycmVudEVsZW1lbnQuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucmVtb3ZlQ2hpbGRyZW5DbGFzc2VzKDxIVE1MRWxlbWVudD5jdXJyZW50RWxlbWVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwYXJlbnRIYXNTdHlsZShjdXJyZW50RWxlbWVudDogSFRNTEVsZW1lbnQsIHJlZmVyZW5jZUVsZW1lbnQ6IEhUTUxFbGVtZW50KTogYm9vbGVhbiB7XG4gICAgICAgIC8vIExpbmsgZXhjZXB0aW9uXG4gICAgICAgIGlmICghY3VycmVudEVsZW1lbnQgfHwgcmVmZXJlbmNlRWxlbWVudC50YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT09ICdhJyB8fCByZWZlcmVuY2VFbGVtZW50LnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ2RpdicpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHJlZmVyZW5jZUVsZW1lbnQudGFnTmFtZS50b0xvd2VyQ2FzZSgpICE9PSAnc3BhbicgJiZcbiAgICAgICAgICAgIHJlZmVyZW5jZUVsZW1lbnQudGFnTmFtZS50b0xvd2VyQ2FzZSgpID09PSBjdXJyZW50RWxlbWVudC50YWdOYW1lLnRvTG93ZXJDYXNlKClcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoT2JqZWN0LmtleXModGhpcy5nZXRJbmxpbmVTdHlsZShjdXJyZW50RWxlbWVudCkpLmxlbmd0aCA+IDAgJiYgdGhpcy5pZGVudGljYWxJbmxpbmVTdHlsZShjdXJyZW50RWxlbWVudCwgcmVmZXJlbmNlRWxlbWVudCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjdXJyZW50RWxlbWVudC5jbGFzc0xpc3QubGVuZ3RoID4gMCAmJiB0aGlzLmlkZW50aWNhbENsYXNzTGlzdChjdXJyZW50RWxlbWVudCwgcmVmZXJlbmNlRWxlbWVudCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjdXJyZW50RWxlbWVudC5wYXJlbnRFbGVtZW50ICYmIGN1cnJlbnRFbGVtZW50LnBhcmVudEVsZW1lbnQudGFnTmFtZS50b0xvd2VyQ2FzZSgpICE9PSAnZGl2Jykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50SGFzU3R5bGUoY3VycmVudEVsZW1lbnQucGFyZW50RWxlbWVudCwgcmVmZXJlbmNlRWxlbWVudCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgY2xlYW51cENvbnRhaW5lcihzZWxlY3Rpb246IFNlbGVjdGlvbiwgY29udGFpbmVyLCBmaXJzdFRpbWVDYWxsOiBCb29sZWFuKSB7XG4gICAgICAgIGxldCBwYXJlbnRDb250YWluZXI6IEhUTUxFbGVtZW50O1xuICAgICAgICBsZXQgcGFyZW50Rm91bmQ6IEJvb2xlYW4gPSBmYWxzZTtcbiAgICAgICAgaWYgKGZpcnN0VGltZUNhbGwpIHtcbiAgICAgICAgICAgIHBhcmVudENvbnRhaW5lciA9IDxIVE1MRWxlbWVudD5zZWxlY3Rpb24uYW5jaG9yTm9kZTtcbiAgICAgICAgICAgIHdoaWxlIChwYXJlbnRDb250YWluZXIgJiYgIXBhcmVudEZvdW5kKSB7XG4gICAgICAgICAgICAgICAgaWYgKHBhcmVudENvbnRhaW5lci5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUgJiYgcGFyZW50Q29udGFpbmVyLmNsYXNzTGlzdD8uY29udGFpbnMoJ2NlLXBhcmFncmFwaCcpKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhcmVudEZvdW5kID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBwYXJlbnRDb250YWluZXIgPSBwYXJlbnRDb250YWluZXIucGFyZW50RWxlbWVudDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwYXJlbnRDb250YWluZXIgPSBjb250YWluZXI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFwYXJlbnRDb250YWluZXIgfHwgIXBhcmVudENvbnRhaW5lci5oYXNDaGlsZE5vZGVzKCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHBhcmVudENvbnRhaW5lci5ub3JtYWxpemUoKTtcblxuICAgICAgICBjb25zdCBjaGlsZHJlbjogTm9kZVtdID0gQXJyYXkuZnJvbShwYXJlbnRDb250YWluZXIuY2hpbGROb2Rlcyk7XG4gICAgICAgIGlmIChjaGlsZHJlbj8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgZm9yICh2YXIgY3VycmVudE5vZGUgPSBjaGlsZHJlblswXTsgY3VycmVudE5vZGU7IGN1cnJlbnROb2RlID0gY3VycmVudE5vZGUubmV4dFNpYmxpbmcpIHtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICFjdXJyZW50Tm9kZS50ZXh0Q29udGVudCB8fFxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50Tm9kZS50ZXh0Q29udGVudC5sZW5ndGggPT09IDAgfHxcbiAgICAgICAgICAgICAgICAgICAgKGN1cnJlbnROb2RlLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERSAmJiAoPEhUTUxFbGVtZW50PmN1cnJlbnROb2RlKS5pbm5lclRleHQubGVuZ3RoID09PSAwKVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgcHJldmlvdXNTaWJsaW5nID0gY3VycmVudE5vZGUucHJldmlvdXNTaWJsaW5nO1xuICAgICAgICAgICAgICAgICAgICBwYXJlbnRDb250YWluZXIucmVtb3ZlQ2hpbGQoY3VycmVudE5vZGUpO1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50Tm9kZSA9IHByZXZpb3VzU2libGluZztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50Tm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUgJiZcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wYXJlbnRIYXNTdHlsZShjdXJyZW50Tm9kZS5wYXJlbnRFbGVtZW50LCA8SFRNTEVsZW1lbnQ+Y3VycmVudE5vZGUpXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBjdXJyZW50Tm9kZUZpcnN0Q2hpbGQgPSBjdXJyZW50Tm9kZTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IG5leHRDdXJyZW50RWxlbWVudCA9IGN1cnJlbnROb2RlLmZpcnN0Q2hpbGQ7XG4gICAgICAgICAgICAgICAgICAgIHdoaWxlIChjdXJyZW50Tm9kZS5maXJzdENoaWxkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRDb250YWluZXIuaW5zZXJ0QmVmb3JlKGN1cnJlbnROb2RlLmZpcnN0Q2hpbGQsIGN1cnJlbnROb2RlRmlyc3RDaGlsZC5uZXh0U2libGluZyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50Tm9kZUZpcnN0Q2hpbGQgPSBjdXJyZW50Tm9kZUZpcnN0Q2hpbGQubmV4dFNpYmxpbmc7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcGFyZW50Q29udGFpbmVyLnJlbW92ZUNoaWxkKGN1cnJlbnROb2RlKTtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudE5vZGUgPSBuZXh0Q3VycmVudEVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGxldCBpZGVudGljYWxFbGVtZW50cyA9IHRydWU7XG4gICAgICAgICAgICAgICAgd2hpbGUgKFxuICAgICAgICAgICAgICAgICAgICBpZGVudGljYWxFbGVtZW50cyAmJlxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50Tm9kZS5uZXh0U2libGluZyAmJlxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50Tm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUgJiZcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudE5vZGUubmV4dFNpYmxpbmcubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBjdXJyZW50RWxlbWVudCA9IDxFbGVtZW50PmN1cnJlbnROb2RlO1xuICAgICAgICAgICAgICAgICAgICBsZXQgbmV4dEVsZW1lbnQgPSA8RWxlbWVudD5jdXJyZW50Tm9kZS5uZXh0U2libGluZztcblxuICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlkZW50aWNhbElubGluZVN0eWxlKGN1cnJlbnRFbGVtZW50LCBuZXh0RWxlbWVudCkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRFbGVtZW50LnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PT0gbmV4dEVsZW1lbnQudGFnTmFtZS50b0xvd2VyQ2FzZSgpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlkZW50aWNhbENsYXNzTGlzdChjdXJyZW50RWxlbWVudCwgbmV4dEVsZW1lbnQpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlkZW50aWNhbEF0dHJpYnV0ZXMoY3VycmVudEVsZW1lbnQsIG5leHRFbGVtZW50KVxuICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRFbGVtZW50LmlubmVySFRNTCArPSBuZXh0RWxlbWVudC5pbm5lckhUTUw7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0RWxlbWVudC5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubW9kaWZpZWRDb250ZW50ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkZW50aWNhbEVsZW1lbnRzID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50Tm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUgJiZcbiAgICAgICAgICAgICAgICAgICAgKDxFbGVtZW50PmN1cnJlbnROb2RlKS50YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT09ICdzcGFuJyAmJlxuICAgICAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyh0aGlzLmdldElubGluZVN0eWxlKDxFbGVtZW50PmN1cnJlbnROb2RlKSkubGVuZ3RoID09PSAwICYmXG4gICAgICAgICAgICAgICAgICAgICghKDxFbGVtZW50PmN1cnJlbnROb2RlKS5jbGFzc0xpc3QgfHwgKDxFbGVtZW50PmN1cnJlbnROb2RlKS5jbGFzc0xpc3QubGVuZ3RoID09PSAwKSAmJlxuICAgICAgICAgICAgICAgICAgICB0aGlzLmhhc05vQXR0cmlidXRlcyg8RWxlbWVudD5jdXJyZW50Tm9kZSlcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGN1cnJlbnROb2RlRmlyc3RDaGlsZCA9IGN1cnJlbnROb2RlO1xuXG4gICAgICAgICAgICAgICAgICAgIHdoaWxlIChjdXJyZW50Tm9kZS5maXJzdENoaWxkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAoPEVsZW1lbnQ+Y3VycmVudE5vZGVGaXJzdENoaWxkLnBhcmVudEVsZW1lbnQpLmluc2VydEJlZm9yZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50Tm9kZS5maXJzdENoaWxkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnROb2RlRmlyc3RDaGlsZC5uZXh0U2libGluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnROb2RlRmlyc3RDaGlsZCA9IGN1cnJlbnROb2RlRmlyc3RDaGlsZC5uZXh0U2libGluZztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAoPEVsZW1lbnQ+Y3VycmVudE5vZGUpLnJlbW92ZSgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1vZGlmaWVkQ29udGVudCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGN1cnJlbnROb2RlLm5vcm1hbGl6ZSgpO1xuICAgICAgICAgICAgICAgIGlmIChjdXJyZW50Tm9kZS5jaGlsZE5vZGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5jbGVhbnVwQ29udGFpbmVyKHNlbGVjdGlvbiwgY3VycmVudE5vZGUsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGhhc05vQXR0cmlidXRlcyhub2RlOiBFbGVtZW50KTogYm9vbGVhbiB7XG4gICAgICAgIGxldCBub2RlU3R5bGUgPSBPYmplY3Qua2V5cyh0aGlzLmdldElubGluZVN0eWxlKG5vZGUpKTtcbiAgICAgICAgbGV0IG5vZGVBdHRyaWJ1dGVzID0gT2JqZWN0LmtleXMoXG4gICAgICAgICAgICBub2RlLmdldEF0dHJpYnV0ZU5hbWVzKCkucmVkdWNlKChhY2MsIG5hbWUpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4geyAuLi5hY2MsIFtuYW1lXTogbm9kZS5nZXRBdHRyaWJ1dGUobmFtZSkgfTtcbiAgICAgICAgICAgIH0sIHt9KVxuICAgICAgICApO1xuXG4gICAgICAgIGlmIChub2RlQXR0cmlidXRlcy5sZW5ndGggPT09IDAgfHwgKG5vZGVBdHRyaWJ1dGVzLmxlbmd0aCA9PT0gMSAmJiBub2RlU3R5bGUubGVuZ3RoID09PSAwKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHByaXZhdGUgaWRlbnRpY2FsQ2xhc3NMaXN0KGN1cnJlbnRFbGVtZW50LCBuZXh0RWxlbWVudCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgWy4uLmN1cnJlbnRFbGVtZW50LmNsYXNzTGlzdF0uZXZlcnkoKGNsYXNzTGlzdCkgPT4gbmV4dEVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKGNsYXNzTGlzdCkpICYmXG4gICAgICAgICAgICBbLi4ubmV4dEVsZW1lbnQuY2xhc3NMaXN0XS5ldmVyeSgoY2xhc3NMaXN0KSA9PiBjdXJyZW50RWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoY2xhc3NMaXN0KSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlkZW50aWNhbEF0dHJpYnV0ZXMoY3VycmVudEVsZW1lbnQsIG5leHRFbGVtZW50KTogYm9vbGVhbiB7XG4gICAgICAgIGxldCBjdXJyZW50RWxlbWVudEF0dHJpYnV0ZXMgPSBjdXJyZW50RWxlbWVudC5nZXRBdHRyaWJ1dGVOYW1lcygpO1xuICAgICAgICBjdXJyZW50RWxlbWVudEF0dHJpYnV0ZXMuZm9yRWFjaCgoYXR0cmlidXRlKSA9PiB7XG4gICAgICAgICAgICBpZiAoYXR0cmlidXRlICE9PSAnc3R5bGUnKSB7XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAhbmV4dEVsZW1lbnQuZ2V0QXR0cmlidXRlKGF0dHJpYnV0ZSkgfHxcbiAgICAgICAgICAgICAgICAgICAgbmV4dEVsZW1lbnQuZ2V0QXR0cmlidXRlKGF0dHJpYnV0ZSkgIT09IGN1cnJlbnRFbGVtZW50LmdldEF0dHJpYnV0ZShhdHRyaWJ1dGUpXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlkZW50aWNhbElubGluZVN0eWxlKGN1cnJlbnRFbGVtZW50LCBuZXh0RWxlbWVudCk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBjdXJyZW50RWxlbWVudElubGluZVN0eWxlID0gdGhpcy5nZXRJbmxpbmVTdHlsZShjdXJyZW50RWxlbWVudCk7XG4gICAgICAgIGNvbnN0IG5leHRFbGVtZW50SW5saW5lU3R5bGUgPSB0aGlzLmdldElubGluZVN0eWxlKG5leHRFbGVtZW50KTtcbiAgICAgICAgbGV0IGN1cnJlbnRFbGVtZW50SW5saW5lU3R5bGVTb3J0ZWQgPSB0aGlzLnNvcnRJbmxpbmVTdHlsZShjdXJyZW50RWxlbWVudElubGluZVN0eWxlKTtcbiAgICAgICAgbGV0IG5leHRFbGVtZW50SW5saW5lU3R5bGVTb3J0ZWQgPSB0aGlzLnNvcnRJbmxpbmVTdHlsZShuZXh0RWxlbWVudElubGluZVN0eWxlKTtcbiAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGN1cnJlbnRFbGVtZW50SW5saW5lU3R5bGVTb3J0ZWQpID09PSBKU09OLnN0cmluZ2lmeShuZXh0RWxlbWVudElubGluZVN0eWxlU29ydGVkKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNvcnRJbmxpbmVTdHlsZShjdXJyZW50RWxlbWVudCk6IE9iamVjdCB7XG4gICAgICAgIHJldHVybiBPYmplY3QuZW50cmllcyhjdXJyZW50RWxlbWVudClcbiAgICAgICAgICAgIC5zb3J0KChbLCBhXTogYW55LCBbLCBiXTogYW55KSA9PiBhIC0gYilcbiAgICAgICAgICAgIC5yZWR1Y2UoKHIsIFtrLCB2XSkgPT4gKHsgLi4uciwgW2tdOiB2IH0pLCB7fSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRJbmxpbmVTdHlsZShjdXJyZW50RWxlbWVudCk6IE9iamVjdCB7XG4gICAgICAgIHJldHVybiBBcnJheS5mcm9tKGN1cnJlbnRFbGVtZW50LnN0eWxlKS5yZWR1Y2UoKHN0eWxlOiBzdHJpbmcsIG5hbWU6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgc3R5bGVbbmFtZV0gPSBjdXJyZW50RWxlbWVudC5zdHlsZVtuYW1lXTtcbiAgICAgICAgICAgIHJldHVybiBzdHlsZTtcbiAgICAgICAgfSwge30pO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0SW5saW5lU3R5bGUoY3VycmVudEVsZW1lbnQsIG5leHRFbGVtZW50KTogSFRNTEVsZW1lbnQge1xuICAgICAgICBjb25zdCBjdXJyZW50RWxlbWVudElubGluZVN0eWxlOiBPYmplY3QgPSBBcnJheS5mcm9tKGN1cnJlbnRFbGVtZW50LnN0eWxlKS5yZWR1Y2UoKHN0eWxlOiBzdHJpbmcsIG5hbWU6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgc3R5bGVbbmFtZV0gPSBjdXJyZW50RWxlbWVudC5zdHlsZVtuYW1lXTtcbiAgICAgICAgICAgIHJldHVybiBzdHlsZTtcbiAgICAgICAgfSwge30pO1xuICAgICAgICBmb3IgKGNvbnN0IHByb3BlcnR5IGluIGN1cnJlbnRFbGVtZW50SW5saW5lU3R5bGUpIHtcbiAgICAgICAgICAgIG5leHRFbGVtZW50LnN0eWxlW3Byb3BlcnR5XSA9IGN1cnJlbnRFbGVtZW50SW5saW5lU3R5bGVbcHJvcGVydHldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXh0RWxlbWVudDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzQ29udGFpbmVyKGNvbnRhaW5lcnM6IHN0cmluZywgbm9kZTogTm9kZSk6IEJvb2xlYW4ge1xuICAgICAgICBpZiAoY29udGFpbmVycy5zcGxpdCgnLCcpLmluZGV4T2Yobm9kZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKSA9PT0gLTEpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIHNhdmVJbmxpbmVTZWxlY3Rpb24oY29udGFpbmVyOiBIVE1MRWxlbWVudCwgZmlyc3RUaW1lQ2FsbDogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgICAgIGlmIChmaXJzdFRpbWVDYWxsKSB7XG4gICAgICAgICAgICBjb250YWluZXIgPSA8SFRNTEVsZW1lbnQ+dGhpcy5wYXJlbnRFZGl0b3IucXVlcnlTZWxlY3RvcignLmNlLXBhcmFncmFwaCcpLmZpcnN0RWxlbWVudENoaWxkO1xuICAgICAgICAgICAgdGhpcy5mb3VuZEFuY2hvck5vZGUgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZm91bmRGb2N1c05vZGUgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZm91bmRBbmNob3JPZmZzZXQgPSAwO1xuICAgICAgICAgICAgdGhpcy5mb3VuZEZvY3VzT2Zmc2V0ID0gMDtcblxuICAgICAgICAgICAgaWYgKHRoaXMuZ2V0U2VsZWN0aW9uKCkudG9TdHJpbmcoKSA9PT0gKDxIVE1MRWxlbWVudD50aGlzLnBhcmVudEVkaXRvci5xdWVyeVNlbGVjdG9yKCcuY2UtcGFyYWdyYXBoJykpLnRleHRDb250ZW50KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5mb3VuZEFuY2hvck9mZnNldCA9IDA7XG4gICAgICAgICAgICAgICAgdGhpcy5mb3VuZEFuY2hvck5vZGUgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5mb3VuZEZvY3VzT2Zmc2V0ID0gdGhpcy5nZXRTZWxlY3Rpb24oKS50b1N0cmluZygpLmxlbmd0aDtcbiAgICAgICAgICAgICAgICB0aGlzLmZvdW5kRm9jdXNOb2RlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbGV0IG5leHROb2RlID0gY29udGFpbmVyLmZpcnN0Q2hpbGQ7XG4gICAgICAgIHdoaWxlIChuZXh0Tm9kZSAmJiAoIXRoaXMuZm91bmRBbmNob3JOb2RlIHx8ICF0aGlzLmZvdW5kRm9jdXNOb2RlKSkge1xuICAgICAgICAgICAgaWYgKG5leHROb2RlID09PSB0aGlzLnNlbGVjdGVkQW5jaG9yTm9kZSkge1xuICAgICAgICAgICAgICAgIGxldCBzZWxlY3Rpb24gPSB0aGlzLmdldFNlbGVjdGlvbigpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzTFRSID0gdGhpcy5pc0FuY2hvckJlZm9yZUZvY3VzKFxuICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb24uYW5jaG9yTm9kZSxcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uLmFuY2hvck9mZnNldCxcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uLmZvY3VzTm9kZSxcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uLmZvY3VzT2Zmc2V0XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB0aGlzLmZvdW5kQW5jaG9yTm9kZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5mb3VuZEFuY2hvck9mZnNldCArPSBpc0xUUiA/IHRoaXMuYW5jaG9yT2Zmc2V0IDogdGhpcy5mb2N1c09mZnNldDtcbiAgICAgICAgICAgICAgICBsZXQgcmFuZ2UgPSB0aGlzLmdldFJhbmdlT2JqZWN0KHNlbGVjdGlvbik7XG4gICAgICAgICAgICAgICAgY29uc3QgY3VycmVudEZyYWdtZW50OiBEb2N1bWVudEZyYWdtZW50ID0gcmFuZ2UuY2xvbmVDb250ZW50cygpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRFbGVtZW50OiBIVE1MU3BhbkVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XG4gICAgICAgICAgICAgICAgY3VycmVudEVsZW1lbnQuYXBwZW5kQ2hpbGQoY3VycmVudEZyYWdtZW50KTtcblxuICAgICAgICAgICAgICAgIHRoaXMuZm91bmRGb2N1c09mZnNldCA9IHRoaXMuZm91bmRBbmNob3JPZmZzZXQgKyBjdXJyZW50RWxlbWVudC5pbm5lclRleHQubGVuZ3RoO1xuICAgICAgICAgICAgICAgIHRoaXMuZm91bmRGb2N1c05vZGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGN1cnJlbnRFbGVtZW50LnJlbW92ZSgpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChuZXh0Tm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5URVhUX05PREUpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuZm91bmRBbmNob3JOb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm91bmRBbmNob3JPZmZzZXQgKz0gbmV4dE5vZGUudGV4dENvbnRlbnQubGVuZ3RoO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuZm91bmRGb2N1c05vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3VuZEZvY3VzT2Zmc2V0ICs9IG5leHROb2RlLnRleHRDb250ZW50Lmxlbmd0aDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobmV4dE5vZGUuZmlyc3RDaGlsZCkge1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuc2F2ZUlubGluZVNlbGVjdGlvbig8SFRNTEVsZW1lbnQ+bmV4dE5vZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbmV4dE5vZGUgPSBuZXh0Tm9kZS5uZXh0U2libGluZztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgcmVzZXRJbmxpbmVTZWxlY3Rpb24oY29udGFpbmVyOiBIVE1MRWxlbWVudCB8IG51bGwgPSBudWxsLCBmaXJzdFRpbWVDYWxsOiBib29sZWFuID0gZmFsc2UpIHtcbiAgICAgICAgaWYgKGZpcnN0VGltZUNhbGwpIHtcbiAgICAgICAgICAgIGNvbnRhaW5lciA9IDxIVE1MRWxlbWVudD50aGlzLnBhcmVudEVkaXRvci5xdWVyeVNlbGVjdG9yKCcuY2UtcGFyYWdyYXBoJykuZmlyc3RFbGVtZW50Q2hpbGQ7XG4gICAgICAgICAgICB0aGlzLmZvdW5kQW5jaG9yTm9kZSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5mb3VuZEZvY3VzTm9kZSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy50bXBPZmZzZXQgPSAwO1xuXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgdGhpcy5mb3VuZEFuY2hvck9mZnNldCA9PT0gMCAmJlxuICAgICAgICAgICAgICAgICg8SFRNTEVsZW1lbnQ+dGhpcy5wYXJlbnRFZGl0b3IucXVlcnlTZWxlY3RvcignLmNlLXBhcmFncmFwaCcpKS50ZXh0Q29udGVudC5sZW5ndGggPT09IHRoaXMuZm91bmRGb2N1c09mZnNldFxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEFuY2hvck5vZGUgPSAoPEhUTUxFbGVtZW50PnRoaXMucGFyZW50RWRpdG9yLnF1ZXJ5U2VsZWN0b3IoJy5jZS1wYXJhZ3JhcGgnKSkuZmlyc3RFbGVtZW50Q2hpbGQ7XG4gICAgICAgICAgICAgICAgdGhpcy5hbmNob3JPZmZzZXQgPSAwO1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRGb2N1c05vZGUgPSAoPEhUTUxFbGVtZW50PnRoaXMucGFyZW50RWRpdG9yLnF1ZXJ5U2VsZWN0b3IoJy5jZS1wYXJhZ3JhcGgnKSkuZmlyc3RFbGVtZW50Q2hpbGQ7XG4gICAgICAgICAgICAgICAgdGhpcy5mb2N1c09mZnNldCA9IDE7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXNldFVzZXJTZWxlY3Rpb24oKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbGV0IG5leHROb2RlID0gY29udGFpbmVyLmZpcnN0Q2hpbGQ7XG4gICAgICAgIHdoaWxlIChuZXh0Tm9kZSAmJiAoIXRoaXMuZm91bmRBbmNob3JOb2RlIHx8ICF0aGlzLmZvdW5kRm9jdXNOb2RlKSkge1xuICAgICAgICAgICAgaWYgKG5leHROb2RlLm5vZGVUeXBlID09PSBOb2RlLlRFWFRfTk9ERSkge1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5mb3VuZEFuY2hvck5vZGUgJiYgdGhpcy5mb3VuZEFuY2hvck9mZnNldCAtIG5leHROb2RlLnRleHRDb250ZW50Lmxlbmd0aCA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3VuZEFuY2hvck5vZGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFuY2hvck9mZnNldCA9IHRoaXMuZm91bmRBbmNob3JPZmZzZXQ7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRBbmNob3JOb2RlID0gbmV4dE5vZGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5mb3VuZEZvY3VzTm9kZSAmJiB0aGlzLmZvdW5kRm9jdXNPZmZzZXQgLSBuZXh0Tm9kZS50ZXh0Q29udGVudC5sZW5ndGggPD0gMCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvdW5kRm9jdXNOb2RlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb2N1c09mZnNldCA9IHRoaXMuZm91bmRGb2N1c09mZnNldDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEZvY3VzTm9kZSA9IG5leHROb2RlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLnRtcE9mZnNldCArPSBuZXh0Tm9kZS50ZXh0Q29udGVudC5sZW5ndGg7XG4gICAgICAgICAgICAgICAgdGhpcy5mb3VuZEFuY2hvck9mZnNldCAtPSBuZXh0Tm9kZS50ZXh0Q29udGVudC5sZW5ndGg7XG4gICAgICAgICAgICAgICAgdGhpcy5mb3VuZEZvY3VzT2Zmc2V0IC09IG5leHROb2RlLnRleHRDb250ZW50Lmxlbmd0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChuZXh0Tm9kZS5maXJzdENoaWxkKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5yZXNldElubGluZVNlbGVjdGlvbig8SFRNTEVsZW1lbnQ+bmV4dE5vZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbmV4dE5vZGUgPSBuZXh0Tm9kZS5uZXh0U2libGluZztcbiAgICAgICAgfVxuICAgICAgICBpZiAoZmlyc3RUaW1lQ2FsbCkge1xuICAgICAgICAgICAgdGhpcy5yZXNldFVzZXJTZWxlY3Rpb24oKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0TW9zdERlc2NlbmRhbnRDaGlsZChlbGVtZW50OiBIVE1MRWxlbWVudCkge1xuICAgICAgICB3aGlsZSAoZWxlbWVudC5jaGlsZHJlbiAmJiBlbGVtZW50LmlubmVyVGV4dCA9PT0gKDxIVE1MRWxlbWVudD5lbGVtZW50LmNoaWxkcmVuWzBdKT8uaW5uZXJUZXh0ICYmIGVsZW1lbnQuY2hpbGRyZW4ubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICBlbGVtZW50ID0gPEhUTUxFbGVtZW50PmVsZW1lbnQuY2hpbGRyZW5bMF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgfVxufVxuIl19
605
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5saW5lLXN0eWxlLXRvb2wuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Ii9ob21lL3BhdWxpbmUvRG9jdW1lbnRzL3dvcmtzcGFjZS93aXppLWJsb2NrL3Byb2plY3RzL3dpemktYmxvY2svc3JjLyIsInNvdXJjZXMiOlsibGliL3NoYXJlZC9jb21wb25lbnRzL2VkaXRvcmpzL3Rvb2xzL2lubGluZS90b29sLXR5cGUvaW5saW5lLXN0eWxlLXRvb2wuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQW1CLFlBQVksRUFBZSxNQUFNLHFDQUFxQyxDQUFDO0FBRWpHLE1BQU0sT0FBZ0IsZUFBZ0IsU0FBUSxZQUFZO0lBQTFEOztRQUdJLGNBQVMsR0FBRyxXQUFXLENBQUM7UUFJeEIsc0JBQWlCLEdBQVcsQ0FBQyxDQUFDO1FBRTlCLHFCQUFnQixHQUFXLENBQUMsQ0FBQztRQUU3QixvQkFBZSxHQUFZLEtBQUssQ0FBQztRQUVqQyxtQkFBYyxHQUFZLEtBQUssQ0FBQztRQUVoQyxjQUFTLEdBQVcsQ0FBQyxDQUFDO1FBTXRCLG9CQUFlLEdBQVksS0FBSyxDQUFDO1FBTWpDLGlCQUFZLEdBQVksS0FBSyxDQUFDO1FBRTlCLGFBQVEsR0FBRztZQUNQLEdBQUcsRUFBRSxLQUFLO1lBQ1YsS0FBSyxFQUFFLEtBQUs7WUFDWixLQUFLLEVBQUUsS0FBSztZQUNaLFNBQVMsRUFBRSxLQUFLO1NBQ25CLENBQUM7SUF3b0JOLENBQUM7SUF0b0JTLGdCQUFnQixDQUFDLE1BQWM7O1lBQ2pDLE1BQU0sU0FBUyxHQUFxQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3hHLElBQUksQ0FBQyxTQUFTLEVBQUU7Z0JBQ1osT0FBTzthQUNWO1lBQ0QsSUFBSSxVQUFVLEdBQVMsU0FBUyxDQUFDLFVBQVUsQ0FBQztZQUM1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Q0FBQyxXQUFXLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRTt3QkFDbEYsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7d0JBQzNCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDO3dCQUN6QyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsUUFBUSxDQUFDO3FCQUNyQztvQkFDRCxJQUFJLENBQUMsU0FBUyxJQUFJLFFBQVEsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDO29CQUM5QyxJQUFJLENBQUMsaUJBQWlCLElBQUksUUFBUSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUM7b0JBQ3RELElBQUksQ0FBQyxnQkFBZ0IsSUFBSSxRQUFRLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQztpQkFDeEQ7Z0JBQ0QsSUFBSSxRQUFRLENBQUMsVUFBVSxFQUFFO29CQUNyQixNQUFNLElBQUksQ0FBQyxvQkFBb0IsQ0FBYyxRQUFRLENBQUMsQ0FBQztpQkFDMUQ7Z0JBQ0QsUUFBUSxHQUFHLFFBQVEsQ0FBQyxXQUFXLENBQUM7YUFDbkM7WUFDRCxJQUFJLGFBQWEsRUFBRTtnQkFDZixJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQzthQUM3QjtRQUNMLENBQUM7S0FBQTtJQUVPLHNCQUFzQixDQUFDLE9BQW9COztRQUMvQyxPQUFPLE9BQU8sQ0FBQyxRQUFRLElBQUksT0FBTyxDQUFDLFNBQVMsWUFBbUIsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUUsMENBQUUsU0FBUyxDQUFBLElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQzdILE9BQU8sR0FBZ0IsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUM5QztRQUNELE9BQU8sT0FBTyxDQUFDO0lBQ25CLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEF0dHJpYnV0ZU9iamVjdCwgRWRpdG9ySlNUb29sLCBTdHlsZU9iamVjdCB9IGZyb20gJy4uLy4uL3V0aWxzL2VkaXRvcmpzLXRvb2wuY29tcG9uZW50JztcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIElubGluZVN0eWxlVG9vbCBleHRlbmRzIEVkaXRvckpTVG9vbCB7XG4gICAgdGFnOiBzdHJpbmc7XG5cbiAgICBtb2RpZmllcnMgPSAnc3Ryb25nLGVtJztcblxuICAgIHN0eWxlPzogU3R5bGVPYmplY3Q7XG5cbiAgICBmb3VuZEFuY2hvck9mZnNldDogbnVtYmVyID0gMDtcblxuICAgIGZvdW5kRm9jdXNPZmZzZXQ6IG51bWJlciA9IDA7XG5cbiAgICBmb3VuZEFuY2hvck5vZGU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIGZvdW5kRm9jdXNOb2RlOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICB0bXBPZmZzZXQ6IG51bWJlciA9IDA7XG5cbiAgICBjbGFzc1RvQXBwbHk/OiBzdHJpbmc7XG5cbiAgICBjbGFzc2VzPzogc3RyaW5nO1xuXG4gICAgbW9kaWZpZWRDb250ZW50OiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBhdHRyaWJ1dGVOYW1lPzogc3RyaW5nO1xuXG4gICAgYXR0cmlidXRlc1RvQXBwbHk/OiBBcnJheTxBdHRyaWJ1dGVPYmplY3Q+O1xuXG4gICAgbGlua0RlbGV0aW9uOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBtb2RpZmllcyA9IHtcbiAgICAgICAgdGFnOiBmYWxzZSxcbiAgICAgICAgc3R5bGU6IGZhbHNlLFxuICAgICAgICBjbGFzczogZmFsc2UsXG4gICAgICAgIGF0dHJpYnV0ZTogZmFsc2UsXG4gICAgfTtcblxuICAgIGFzeW5jIGV4ZWNDb21tYW5kU3R5bGUoYWN0aW9uOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0aW9uOiBTZWxlY3Rpb24gfCBudWxsID0gdGhpcy5jdXJyZW50U2VsZWN0aW9uID8gdGhpcy5jdXJyZW50U2VsZWN0aW9uIDogdGhpcy5nZXRTZWxlY3Rpb24oKTtcbiAgICAgICAgaWYgKCFzZWxlY3Rpb24pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBsZXQgYW5jaG9yTm9kZTogTm9kZSA9IHNlbGVjdGlvbi5hbmNob3JOb2RlO1xuICAgICAgICBpZiAoIXRoaXMucGFyZW50RWRpdG9yKSB7XG4gICAgICAgICAgICB0aGlzLnBhcmVudEVkaXRvciA9IHRoaXMuZmluZFBhcmVudEVkaXRvcigpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFhbmNob3JOb2RlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGNvbnRhaW5lcjogSFRNTEVsZW1lbnQgPVxuICAgICAgICAgICAgYW5jaG9yTm9kZS5ub2RlVHlwZSAhPT0gTm9kZS5URVhUX05PREUgJiYgYW5jaG9yTm9kZS5ub2RlVHlwZSAhPT0gTm9kZS5DT01NRU5UX05PREVcbiAgICAgICAgICAgICAgICA/IChhbmNob3JOb2RlIGFzIEhUTUxFbGVtZW50KVxuICAgICAgICAgICAgICAgIDogYW5jaG9yTm9kZS5wYXJlbnRFbGVtZW50O1xuICAgICAgICBjb25zdCBzYW1lU2VsZWN0aW9uOiBib29sZWFuID0gY29udGFpbmVyICYmIGNvbnRhaW5lci5pbm5lclRleHQgPT09IHNlbGVjdGlvbi50b1N0cmluZygpO1xuICAgICAgICBhd2FpdCB0aGlzLnNhdmVJbmxpbmVTZWxlY3Rpb24oY29udGFpbmVyLCB0cnVlKTtcbiAgICAgICAgY29uc29sZS5sb2coJz09PSBpbmxpbmUgdG9vbCBleGVjQ29tbWFuZFN0eWxlIG1ldGhvZCA9PT0nKTtcbiAgICAgICAgY29uc29sZS5sb2codGhpcy5oYXNTdHlsZShjb250YWluZXIpKTtcblxuICAgICAgICAvLyBMaW5rIGRlbGV0ZSBleGNlcHRpb25cbiAgICAgICAgaWYgKHRoaXMubGlua0RlbGV0aW9uKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLnJlcGxhY2VMaW5rKHNlbGVjdGlvbiwgdGhpcy5oYXNTdHlsZShjb250YWluZXIpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBzYW1lU2VsZWN0aW9uICYmXG4gICAgICAgICAgICAgICAgIXRoaXMuaXNDb250YWluZXIodGhpcy50ZXh0Q29udGFpbmVycywgY29udGFpbmVyKSAmJlxuICAgICAgICAgICAgICAgIHRoaXMuaGFzU3R5bGUoY29udGFpbmVyKSAmJlxuICAgICAgICAgICAgICAgIHNlbGVjdGlvbi50b1N0cmluZygpID09PSB0aGlzLmhhc1N0eWxlKGNvbnRhaW5lcikuaW5uZXJUZXh0XG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnLT4gdXBkYXRlIHNlbGVjdGlvbicpO1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMudXBkYXRlU2VsZWN0aW9uKHNlbGVjdGlvbiwgdGhpcy5oYXNTdHlsZShjb250YWluZXIpLCBhY3Rpb24sIHRoaXMudGV4dENvbnRhaW5lcnMpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnLT4gcmVwbGFjZSBzZWxlY3Rpb24nKTtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnJlcGxhY2VTZWxlY3Rpb24odGhpcy5nZXRNb3N0RGVzY2VuZGFudENoaWxkKGNvbnRhaW5lciksIGFjdGlvbiwgc2VsZWN0aW9uLCB0aGlzLnRleHRDb250YWluZXJzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBhd2FpdCB0aGlzLmNsZWFudXBDb250YWluZXIoc2VsZWN0aW9uLCBjb250YWluZXIsIHRydWUpO1xuICAgICAgICBpZiAodGhpcy5tb2RpZmllZENvbnRlbnQpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMucmVzZXRJbmxpbmVTZWxlY3Rpb24oY29udGFpbmVyLCB0cnVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgdXBkYXRlU2VsZWN0aW9uKHNlbGVjdGlvbjogU2VsZWN0aW9uLCBjb250YWluZXI6IEhUTUxFbGVtZW50LCBhY3Rpb246IHN0cmluZywgY29udGFpbmVyczogc3RyaW5nKSB7XG4gICAgICAgIGlmICh0aGlzLm1vZGlmaWVzLnN0eWxlKSB7XG4gICAgICAgICAgICBjb25zdCBjc3MgPSB0aGlzLnN0eWxlLnByb3BlcnR5O1xuICAgICAgICAgICAgbGV0IHZhbHVlID0gYXdhaXQgdGhpcy5nZXRTdHlsZVZhbHVlKGNvbnRhaW5lciwgYWN0aW9uLCBjb250YWluZXJzKTtcbiAgICAgICAgICAgIGlmICh2YWx1ZSAhPT0gdGhpcy5zdHlsZS5kZWZhdWx0KSB7XG4gICAgICAgICAgICAgICAgY29udGFpbmVyLnN0eWxlW2Nzc10gPSB2YWx1ZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29udGFpbmVyLnN0eWxlLnJlbW92ZVByb3BlcnR5KHRoaXMuc3R5bGUucHJvcGVydHkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgcmFuZ2U6IFJhbmdlID0gdGhpcy5nZXRSYW5nZU9iamVjdChzZWxlY3Rpb24pO1xuICAgICAgICAgICAgbGV0IG5ld0VsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRoaXMuaGFzU3R5bGUoY29udGFpbmVyKSA/ICdzcGFuJyA6IHRoaXMudGFnKTtcbiAgICAgICAgICAgIGlmICh0aGlzLm1vZGlmaWVzLmNsYXNzKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5yZW1vdmVDaGlsZHJlbkNsYXNzZXMobmV3RWxlbWVudCk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY2xhc3NUb0FwcGx5ICE9PSAnJykge1xuICAgICAgICAgICAgICAgICAgICBuZXdFbGVtZW50LmNsYXNzTGlzdC5hZGQodGhpcy5jbGFzc1RvQXBwbHkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLm1vZGlmaWVzLmF0dHJpYnV0ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuYXR0cmlidXRlc1RvQXBwbHkuZm9yRWFjaCgoYXR0cmlidXRlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIG5ld0VsZW1lbnQuc2V0QXR0cmlidXRlKGF0dHJpYnV0ZS5uYW1lLCBhdHRyaWJ1dGUudmFsdWUpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbmV3RWxlbWVudCA9IHRoaXMuc2V0SW5saW5lU3R5bGUoY29udGFpbmVyLCBuZXdFbGVtZW50KTtcblxuICAgICAgICAgICAgd2hpbGUgKGNvbnRhaW5lci5maXJzdENoaWxkKSB7XG4gICAgICAgICAgICAgICAgbGV0IGVsZW1lbnRDbG9uZSA9IGNvbnRhaW5lci5maXJzdENoaWxkLmNsb25lTm9kZSh0cnVlKTtcbiAgICAgICAgICAgICAgICBuZXdFbGVtZW50LmFwcGVuZENoaWxkKGVsZW1lbnRDbG9uZSk7XG4gICAgICAgICAgICAgICAgY29udGFpbmVyLmZpcnN0Q2hpbGQucmVtb3ZlKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnRhaW5lci5wYXJlbnRFbGVtZW50LnJlcGxhY2VDaGlsZChuZXdFbGVtZW50LCBjb250YWluZXIpO1xuXG4gICAgICAgICAgICByYW5nZS5pbnNlcnROb2RlKG5ld0VsZW1lbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyByZXBsYWNlU2VsZWN0aW9uKGNvbnRhaW5lcjogSFRNTEVsZW1lbnQsIGFjdGlvbjogc3RyaW5nLCBzZWxlY3Rpb246IFNlbGVjdGlvbiwgY29udGFpbmVyczogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IGZvY3VzTm9kZTogTm9kZSA9IHNlbGVjdGlvbi5mb2N1c05vZGU7XG4gICAgICAgIGxldCBvZmZzZXRDb250YWluZXI6IEhUTUxFbGVtZW50ID1cbiAgICAgICAgICAgIGZvY3VzTm9kZS5ub2RlVHlwZSAhPT0gTm9kZS5URVhUX05PREUgJiYgZm9jdXNOb2RlLm5vZGVUeXBlICE9PSBOb2RlLkNPTU1FTlRfTk9ERVxuICAgICAgICAgICAgICAgID8gKGZvY3VzTm9kZSBhcyBIVE1MRWxlbWVudClcbiAgICAgICAgICAgICAgICA6IGZvY3VzTm9kZS5wYXJlbnRFbGVtZW50O1xuXG4gICAgICAgIGxldCBwYXJlbnRDb250YWluZXIgPSB0aGlzLmhhc1N0eWxlKGNvbnRhaW5lcik7XG4gICAgICAgIGxldCBvZmZzZXRQYXJlbnRDb250YWluZXIgPSB0aGlzLmhhc1N0eWxlKG9mZnNldENvbnRhaW5lcik7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHBhcmVudENvbnRhaW5lciAmJlxuICAgICAgICAgICAgcGFyZW50Q29udGFpbmVyID09PSBvZmZzZXRQYXJlbnRDb250YWluZXIgJiZcbiAgICAgICAgICAgICgocGFyZW50Q29udGFpbmVyLmNoaWxkcmVuLmxlbmd0aCA+IDAgJiYgcGFyZW50Q29udGFpbmVyLmlubmVyVGV4dCAhPT0gcGFyZW50Q29udGFpbmVyLmNoaWxkcmVuWzBdLnRleHRDb250ZW50KSB8fFxuICAgICAgICAgICAgICAgIHBhcmVudENvbnRhaW5lci5pbm5lclRleHQgIT09IHNlbGVjdGlvbi50b1N0cmluZygpKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdpZicpO1xuICAgICAgICAgICAgY29uc3QgcmFuZ2U6IFJhbmdlID0gdGhpcy5nZXRSYW5nZU9iamVjdChzZWxlY3Rpb24pO1xuICAgICAgICAgICAgY29uc3QgY3VycmVudEZyYWdtZW50OiBEb2N1bWVudEZyYWdtZW50ID0gcmFuZ2UuZXh0cmFjdENvbnRlbnRzKCk7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50RWxlbWVudDogSFRNTFNwYW5FbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xuICAgICAgICAgICAgY3VycmVudEVsZW1lbnQuYXBwZW5kQ2hpbGQoY3VycmVudEZyYWdtZW50KTtcbiAgICAgICAgICAgIGlmICh0aGlzLm1vZGlmaWVzLnN0eWxlICYmIHRoaXMuc3R5bGUudmFsdWUuaW5kZXhPZignJDEnKSA+IC0xKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudEVsZW1lbnQuc3R5bGVbdGhpcy5zdHlsZS5wcm9wZXJ0eV0gPSB0aGlzLnN0eWxlLnZhbHVlLnJlcGxhY2UoJyQxJywgdGhpcy5zdHlsZS5pbnB1dCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5tb2RpZmllcy5jbGFzcykge1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucmVtb3ZlQ2hpbGRyZW5DbGFzc2VzKGN1cnJlbnRFbGVtZW50KTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jbGFzc1RvQXBwbHkgIT09ICcnKSB7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRFbGVtZW50LmNsYXNzTGlzdC5hZGQodGhpcy5jbGFzc1RvQXBwbHkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLm1vZGlmaWVzLmF0dHJpYnV0ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuYXR0cmlidXRlc1RvQXBwbHkuZm9yRWFjaCgoYXR0cmlidXRlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRFbGVtZW50LnNldEF0dHJpYnV0ZShhdHRyaWJ1dGUubmFtZSwgYXR0cmlidXRlLnZhbHVlKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBjdXJyZW50RWxlbWVudFRvQXBwZW5kID0gY3VycmVudEVsZW1lbnQ7XG4gICAgICAgICAgICBsZXQgY3VycmVudFBhcmVudEVsZW1lbnQgPSBjb250YWluZXI7XG4gICAgICAgICAgICBpZiAocGFyZW50Q29udGFpbmVyLmNvbnRhaW5zKGN1cnJlbnRQYXJlbnRFbGVtZW50KSkge1xuICAgICAgICAgICAgICAgIHdoaWxlIChjdXJyZW50UGFyZW50RWxlbWVudCAhPT0gcGFyZW50Q29udGFpbmVyKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCB0bXBFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChjdXJyZW50UGFyZW50RWxlbWVudC50YWdOYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgdG1wRWxlbWVudCA9IHRoaXMuc2V0SW5saW5lU3R5bGUoY3VycmVudFBhcmVudEVsZW1lbnQsIHRtcEVsZW1lbnQpO1xuXG4gICAgICAgICAgICAgICAgICAgIHRtcEVsZW1lbnQuYXBwZW5kQ2hpbGQoY3VycmVudEVsZW1lbnRUb0FwcGVuZCk7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRFbGVtZW50VG9BcHBlbmQgPSB0bXBFbGVtZW50O1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50UGFyZW50RWxlbWVudCA9IGN1cnJlbnRQYXJlbnRFbGVtZW50LnBhcmVudEVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBpc0xUUiA9IHRoaXMuaXNBbmNob3JCZWZvcmVGb2N1cyhcbiAgICAgICAgICAgICAgICBzZWxlY3Rpb24uYW5jaG9yTm9kZSxcbiAgICAgICAgICAgICAgICBzZWxlY3Rpb24uYW5jaG9yT2Zmc2V0LFxuICAgICAgICAgICAgICAgIHNlbGVjdGlvbi5mb2N1c05vZGUsXG4gICAgICAgICAgICAgICAgc2VsZWN0aW9uLmZvY3VzT2Zmc2V0XG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBsZXQgc2VsZWN0aW9uRm9jdXNPZmZzZXQgPSBpc0xUUiA/IHNlbGVjdGlvbi5hbmNob3JPZmZzZXQgOiBzZWxlY3Rpb24uZm9jdXNPZmZzZXQ7XG4gICAgICAgICAgICBsZXQgc2VsZWN0aW9uRm9jdXNOb2RlID0gaXNMVFIgPyBzZWxlY3Rpb24uYW5jaG9yTm9kZSA6IHNlbGVjdGlvbi5mb2N1c05vZGU7XG5cbiAgICAgICAgICAgIGRvY3VtZW50LmdldFNlbGVjdGlvbigpLnNldEJhc2VBbmRFeHRlbnQocGFyZW50Q29udGFpbmVyLCAwLCBzZWxlY3Rpb25Gb2N1c05vZGUsIHNlbGVjdGlvbkZvY3VzT2Zmc2V0KTtcbiAgICAgICAgICAgIGNvbnN0IG5ld1NlbGVjdGlvbiA9IHRoaXMuZ2V0U2VsZWN0aW9uKCk7XG4gICAgICAgICAgICBsZXQgcHJlUmFuZ2U6IFJhbmdlID0gdGhpcy5nZXRSYW5nZU9iamVjdChuZXdTZWxlY3Rpb24pO1xuXG4gICAgICAgICAgICBjb25zdCBwcmVGcmFnbWVudDogRG9jdW1lbnRGcmFnbWVudCA9IHByZVJhbmdlLmV4dHJhY3RDb250ZW50cygpO1xuXG4gICAgICAgICAgICBsZXQgbmV3RWxlbWVudDogSFRNTEVsZW1lbnQgPSA8SFRNTEVsZW1lbnQ+cGFyZW50Q29udGFpbmVyLmNsb25lTm9kZSgpO1xuICAgICAgICAgICAgbmV3RWxlbWVudC5pbm5lckhUTUwgPSAnJztcbiAgICAgICAgICAgIG5ld0VsZW1lbnQuYXBwZW5kQ2hpbGQocHJlRnJhZ21lbnQpO1xuXG4gICAgICAgICAgICBwYXJlbnRDb250YWluZXIucGFyZW50RWxlbWVudC5pbnNlcnRCZWZvcmUoY3VycmVudEVsZW1lbnRUb0FwcGVuZCwgcGFyZW50Q29udGFpbmVyKTtcbiAgICAgICAgICAgIHBhcmVudENvbnRhaW5lci5wYXJlbnRFbGVtZW50Lmluc2VydEJlZm9yZShuZXdFbGVtZW50LCBjdXJyZW50RWxlbWVudFRvQXBwZW5kKTtcbiAgICAgICAgICAgIGlmICghcGFyZW50Q29udGFpbmVyLnRleHRDb250ZW50IHx8IHBhcmVudENvbnRhaW5lci50ZXh0Q29udGVudC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICBwYXJlbnRDb250YWluZXIucGFyZW50RWxlbWVudC5yZW1vdmVDaGlsZChwYXJlbnRDb250YWluZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2VsZWN0aW9uLnNlbGVjdEFsbENoaWxkcmVuKGN1cnJlbnRFbGVtZW50VG9BcHBlbmQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ2Vsc2UnKTtcbiAgICAgICAgICAgIGNvbnN0IHJhbmdlOiBSYW5nZSA9IHRoaXMuZ2V0UmFuZ2VPYmplY3Qoc2VsZWN0aW9uKTtcbiAgICAgICAgICAgIGNvbnN0IGZyYWdtZW50OiBEb2N1bWVudEZyYWdtZW50ID0gcmFuZ2UuZXh0cmFjdENvbnRlbnRzKCk7XG4gICAgICAgICAgICBsZXQgZnJhZ21lbnRFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG5cbiAgICAgICAgICAgIGxldCBuZXdFbGVtZW50OiBIVE1MRWxlbWVudCB8IG51bGwgPSBhd2FpdCB0aGlzLmNyZWF0ZUVsZW1lbnQoY29udGFpbmVyLCBhY3Rpb24sIGNvbnRhaW5lcnMpO1xuICAgICAgICAgICAgbGV0IGVsZW1lbnRUb0FwcGVuZCA9IG5ld0VsZW1lbnQ7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhuZXdFbGVtZW50KTtcblxuICAgICAgICAgICAgZnJhZ21lbnRFbGVtZW50LmFwcGVuZChmcmFnbWVudCk7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgZnJhZ21lbnRFbGVtZW50LmNoaWxkcmVuPy5sZW5ndGggPT09IDEgJiZcbiAgICAgICAgICAgICAgICB0aGlzLnRleHRDb250YWluZXJzLnNwbGl0KCcsJykuaW5kZXhPZihmcmFnbWVudEVsZW1lbnQuY2hpbGRyZW5bMF0udGFnTmFtZS50b0xvd2VyQ2FzZSgpKSA+IC0xXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBlbGVtZW50VG9BcHBlbmQgPSA8SFRNTEVsZW1lbnQ+ZnJhZ21lbnRFbGVtZW50LmNoaWxkcmVuWzBdO1xuICAgICAgICAgICAgICAgIG5ld0VsZW1lbnQuaW5uZXJIVE1MID0gKDxIVE1MRWxlbWVudD5mcmFnbWVudEVsZW1lbnQuY2hpbGRyZW5bMF0pLmlubmVySFRNTDtcbiAgICAgICAgICAgICAgICBlbGVtZW50VG9BcHBlbmQuaW5uZXJIVE1MID0gJyc7XG4gICAgICAgICAgICAgICAgZWxlbWVudFRvQXBwZW5kLmFwcGVuZChuZXdFbGVtZW50KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbmV3RWxlbWVudC5pbm5lckhUTUwgPSBmcmFnbWVudEVsZW1lbnQuaW5uZXJIVE1MO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMubW9kaWZpZXMuY2xhc3MpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnJlbW92ZUNoaWxkcmVuQ2xhc3NlcyhuZXdFbGVtZW50KTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jbGFzc1RvQXBwbHkgIT09ICcnKSB7XG4gICAgICAgICAgICAgICAgICAgIG5ld0VsZW1lbnQuY2xhc3NMaXN0LmFkZCh0aGlzLmNsYXNzVG9BcHBseSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMubW9kaWZpZXMuYXR0cmlidXRlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hdHRyaWJ1dGVzVG9BcHBseS5mb3JFYWNoKChhdHRyaWJ1dGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgbmV3RWxlbWVudC5zZXRBdHRyaWJ1dGUoYXR0cmlidXRlLm5hbWUsIGF0dHJpYnV0ZS52YWx1ZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJhbmdlLmluc2VydE5vZGUoZWxlbWVudFRvQXBwZW5kKTtcbiAgICAgICAgICAgIHNlbGVjdGlvbi5zZWxlY3RBbGxDaGlsZHJlbihlbGVtZW50VG9BcHBlbmQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyByZXBsYWNlTGluayhzZWxlY3Rpb246IFNlbGVjdGlvbiwgY29udGFpbmVyOiBIVE1MRWxlbWVudCkge1xuICAgICAgICBsZXQgbmV3RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcbiAgICAgICAgbmV3RWxlbWVudC5pbm5lckhUTUwgPSBjb250YWluZXIuaW5uZXJIVE1MO1xuXG4gICAgICAgIGNvbnRhaW5lci5wYXJlbnRFbGVtZW50LnJlcGxhY2VDaGlsZChuZXdFbGVtZW50LCBjb250YWluZXIpO1xuICAgICAgICBzZWxlY3Rpb24uc2VsZWN0QWxsQ2hpbGRyZW4obmV3RWxlbWVudCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc0FuY2hvckJlZm9yZUZvY3VzKGFuY2hvck5vZGU6IE5vZGUsIGFuY2hvck9mZnNldDogbnVtYmVyLCBmb2N1c05vZGU6IE5vZGUsIGZvY3VzT2Zmc2V0OiBudW1iZXIpIHtcbiAgICAgICAgbGV0IGFuY2hvclJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcbiAgICAgICAgbGV0IGZvY3VzUmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xuICAgICAgICBhbmNob3JSYW5nZS5zZXRTdGFydChhbmNob3JOb2RlLCBhbmNob3JPZmZzZXQpO1xuICAgICAgICBhbmNob3JSYW5nZS5zZXRFbmQoYW5jaG9yTm9kZSwgYW5jaG9yT2Zmc2V0KTtcbiAgICAgICAgZm9jdXNSYW5nZS5zZXRTdGFydChmb2N1c05vZGUsIGZvY3VzT2Zmc2V0KTtcbiAgICAgICAgZm9jdXNSYW5nZS5zZXRFbmQoZm9jdXNOb2RlLCBmb2N1c09mZnNldCk7XG4gICAgICAgIGlmIChhbmNob3JSYW5nZS5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2UuU1RBUlRfVE9fU1RBUlQsIGZvY3VzUmFuZ2UpID09PSAtMSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGhhc1N0eWxlKGVsZW1lbnQ6IEhUTUxFbGVtZW50LCBmaXJzdFRpbWVDYWxsOiBib29sZWFuID0gdHJ1ZSk6IEhUTUxFbGVtZW50IHwgbnVsbCB7XG4gICAgICAgIGlmIChmaXJzdFRpbWVDYWxsICYmIGVsZW1lbnQuY2hpbGRyZW4pIHtcbiAgICAgICAgICAgIGVsZW1lbnQgPSB0aGlzLmdldE1vc3REZXNjZW5kYW50Q2hpbGQoPEhUTUxFbGVtZW50PmVsZW1lbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gZm91bmRFbGVtZW50IHdhcyBhZGRlZCBiZWNhdXNlIG9mIGEgcmV0dXJuIGlzc3VlIHdoZW4gYSBjbGFzcyBpcyBhcHBsaWVkXG4gICAgICAgIGxldCBmb3VuZEVsZW1lbnQ6IEhUTUxFbGVtZW50IHwgbnVsbCA9IG51bGw7XG5cbiAgICAgICAgaWYgKCFlbGVtZW50IHx8IGVsZW1lbnQuY2xhc3NMaXN0Py5jb250YWlucygnY2UtcGFyYWdyYXBoJykpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm1vZGlmaWVzLnN0eWxlKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgZWxlbWVudC5zdHlsZSAmJlxuICAgICAgICAgICAgICAgIGVsZW1lbnQuc3R5bGVbdGhpcy5zdHlsZS5wcm9wZXJ0eV0gJiZcbiAgICAgICAgICAgICAgICAodGhpcy5zdHlsZS52YWx1ZS5pbmRleE9mKCckMScpID4gLTEgPyB0cnVlIDogZWxlbWVudC5zdHlsZVt0aGlzLnN0eWxlLnByb3BlcnR5XSA9PT0gdGhpcy5zdHlsZS52YWx1ZSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGZvdW5kRWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5tb2RpZmllcy5jbGFzcykge1xuICAgICAgICAgICAgdGhpcy5jbGFzc2VzLnNwbGl0KCcsJykuZm9yRWFjaCgoY2xhc3NOYW1lKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQuY2xhc3NMaXN0Py5jb250YWlucyhjbGFzc05hbWUpID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvdW5kRWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBlbGVtZW50O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMubW9kaWZpZXMudGFnKSB7XG4gICAgICAgICAgICBpZiAoZWxlbWVudC50YWdOYW1lPy50b0xvd2VyQ2FzZSgpID09PSB0aGlzLnRhZy50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5tb2RpZmllcy5hdHRyaWJ1dGUpIHtcbiAgICAgICAgICAgIGxldCBhdHRyaWJ1dGVzID0gdGhpcy5hdHRyaWJ1dGVOYW1lLnNwbGl0KCcsJyk7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJpYnV0ZXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGVsZW1lbnQuZ2V0QXR0cmlidXRlID09PSAnZnVuY3Rpb24nICYmIGVsZW1lbnQuZ2V0QXR0cmlidXRlKGF0dHJpYnV0ZXNbaV0pKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvdW5kRWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBlbGVtZW50O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoZm91bmRFbGVtZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gZm91bmRFbGVtZW50O1xuICAgICAgICB9XG4gICAgICAgIGlmICghZm91bmRFbGVtZW50ICYmIGVsZW1lbnQucGFyZW50RWxlbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaGFzU3R5bGUoZWxlbWVudC5wYXJlbnRFbGVtZW50LCBmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBnZXRTdHlsZVZhbHVlKGNvbnRhaW5lcjogSFRNTEVsZW1lbnQsIGFjdGlvbjogc3RyaW5nLCBjb250YWluZXJzOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZyB8IG51bGw+IHtcbiAgICAgICAgaWYgKCFjb250YWluZXIpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnN0eWxlLnZhbHVlLmluZGV4T2YoJyQxJykgPiAtMSA/IHRoaXMuc3R5bGUudmFsdWUucmVwbGFjZSgnJDEnLCB0aGlzLnN0eWxlLmlucHV0KSA6IHRoaXMuc3R5bGUudmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5oYXNTdHlsZShjb250YWluZXIpICYmIHRoaXMuc3R5bGUudmFsdWUuaW5kZXhPZignJDEnKSA9PT0gLTEpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnN0eWxlLmRlZmF1bHQ7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzdHlsZTogTm9kZSB8IG51bGwgPSBhd2FpdCB0aGlzLmZpbmRTdHlsZU5vZGUoY29udGFpbmVyLCBhY3Rpb24sIGNvbnRhaW5lcnMpO1xuICAgICAgICBpZiAoc3R5bGUgJiYgdGhpcy5oYXNTdHlsZShzdHlsZSBhcyBIVE1MRWxlbWVudCkgJiYgdGhpcy5zdHlsZS52YWx1ZS5pbmRleE9mKCckMScpID09PSAtMSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3R5bGUuZGVmYXVsdDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLnN0eWxlLnZhbHVlLmluZGV4T2YoJyQxJykgPiAtMSA/IHRoaXMuc3R5bGUudmFsdWUucmVwbGFjZSgnJDEnLCB0aGlzLnN0eWxlLmlucHV0KSA6IHRoaXMuc3R5bGUudmFsdWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBmaW5kU3R5bGVOb2RlKG5vZGU6IE5vZGUsIHN0eWxlOiBzdHJpbmcsIGNvbnRhaW5lcnM6IHN0cmluZyk6IFByb21pc2U8Tm9kZSB8IG51bGw+IHtcbiAgICAgICAgaWYgKG5vZGUubm9kZU5hbWUudG9VcHBlckNhc2UoKSA9PT0gJ0hUTUwnIHx8IG5vZGUubm9kZU5hbWUudG9VcHBlckNhc2UoKSA9PT0gJ0JPRFknKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghbm9kZS5wYXJlbnROb2RlKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmlzQ29udGFpbmVyKGNvbnRhaW5lcnMsIG5vZGUpKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGhhc1N0eWxlOiBib29sZWFuID1cbiAgICAgICAgICAgIChub2RlIGFzIEhUTUxFbGVtZW50KS5zdHlsZVtzdHlsZV0gIT09IG51bGwgJiZcbiAgICAgICAgICAgIChub2RlIGFzIEhUTUxFbGVtZW50KS5zdHlsZVtzdHlsZV0gIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgKG5vZGUgYXMgSFRNTEVsZW1lbnQpLnN0eWxlW3N0eWxlXSAhPT0gJyc7XG5cbiAgICAgICAgaWYgKGhhc1N0eWxlKSB7XG4gICAgICAgICAgICByZXR1cm4gbm9kZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmZpbmRTdHlsZU5vZGUobm9kZS5wYXJlbnROb2RlLCBzdHlsZSwgY29udGFpbmVycyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBjcmVhdGVFbGVtZW50KGNvbnRhaW5lcjogSFRNTEVsZW1lbnQsIGFjdGlvbjogc3RyaW5nLCBjb250YWluZXJzOiBzdHJpbmcpOiBQcm9taXNlPEhUTUxFbGVtZW50PiB7XG4gICAgICAgIGxldCBuZXdFbGVtZW50OiBIVE1MRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGhpcy50YWcpO1xuICAgICAgICBpZiAodGhpcy5tb2RpZmllcy5zdHlsZSkge1xuICAgICAgICAgICAgY29uc3QgcHJvcGVydHkgPSB0aGlzLnN0eWxlLnByb3BlcnR5O1xuICAgICAgICAgICAgbGV0IHZhbHVlID0gYXdhaXQgdGhpcy5nZXRTdHlsZVZhbHVlKGNvbnRhaW5lciwgYWN0aW9uLCBjb250YWluZXJzKTtcbiAgICAgICAgICAgIGlmICh2YWx1ZSAhPT0gdGhpcy5zdHlsZS5kZWZhdWx0KSB7XG4gICAgICAgICAgICAgICAgbmV3RWxlbWVudC5zdHlsZVtwcm9wZXJ0eV0gPSB2YWx1ZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbmV3RWxlbWVudC5zdHlsZS5yZW1vdmVQcm9wZXJ0eShwcm9wZXJ0eSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3RWxlbWVudDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIHJlbW92ZUNoaWxkcmVuQ2xhc3NlcyhlbGVtZW50OiBIVE1MRWxlbWVudCkge1xuICAgICAgICBpZiAoIWVsZW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNoaWxkcmVuOiBIVE1MQ29sbGVjdGlvbiA9IGVsZW1lbnQuY2hpbGRyZW47XG4gICAgICAgIGZvciAodmFyIGN1cnJlbnRFbGVtZW50ID0gY2hpbGRyZW5bMF07IGN1cnJlbnRFbGVtZW50OyBjdXJyZW50RWxlbWVudCA9IGN1cnJlbnRFbGVtZW50Lm5leHRFbGVtZW50U2libGluZykge1xuICAgICAgICAgICAgdGhpcy5jbGFzc2VzLnNwbGl0KCcsJykuZm9yRWFjaCgoY2xhc3NOYW1lKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRFbGVtZW50LmNsYXNzTGlzdD8uY29udGFpbnMoY2xhc3NOYW1lKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudEVsZW1lbnQuY2xhc3NMaXN0Lmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudEVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCdjbGFzcycpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudEVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShjbGFzc05hbWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoY3VycmVudEVsZW1lbnQuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucmVtb3ZlQ2hpbGRyZW5DbGFzc2VzKDxIVE1MRWxlbWVudD5jdXJyZW50RWxlbWVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwYXJlbnRIYXNTdHlsZShjdXJyZW50RWxlbWVudDogSFRNTEVsZW1lbnQsIHJlZmVyZW5jZUVsZW1lbnQ6IEhUTUxFbGVtZW50KTogYm9vbGVhbiB7XG4gICAgICAgIC8vIExpbmsgZXhjZXB0aW9uXG4gICAgICAgIGlmICghY3VycmVudEVsZW1lbnQgfHwgcmVmZXJlbmNlRWxlbWVudC50YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT09ICdhJyB8fCByZWZlcmVuY2VFbGVtZW50LnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ2RpdicpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHJlZmVyZW5jZUVsZW1lbnQudGFnTmFtZS50b0xvd2VyQ2FzZSgpICE9PSAnc3BhbicgJiZcbiAgICAgICAgICAgIHJlZmVyZW5jZUVsZW1lbnQudGFnTmFtZS50b0xvd2VyQ2FzZSgpID09PSBjdXJyZW50RWxlbWVudC50YWdOYW1lLnRvTG93ZXJDYXNlKClcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoT2JqZWN0LmtleXModGhpcy5nZXRJbmxpbmVTdHlsZShjdXJyZW50RWxlbWVudCkpLmxlbmd0aCA+IDAgJiYgdGhpcy5pZGVudGljYWxJbmxpbmVTdHlsZShjdXJyZW50RWxlbWVudCwgcmVmZXJlbmNlRWxlbWVudCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjdXJyZW50RWxlbWVudC5jbGFzc0xpc3QubGVuZ3RoID4gMCAmJiB0aGlzLmlkZW50aWNhbENsYXNzTGlzdChjdXJyZW50RWxlbWVudCwgcmVmZXJlbmNlRWxlbWVudCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjdXJyZW50RWxlbWVudC5wYXJlbnRFbGVtZW50ICYmIGN1cnJlbnRFbGVtZW50LnBhcmVudEVsZW1lbnQudGFnTmFtZS50b0xvd2VyQ2FzZSgpICE9PSAnZGl2Jykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50SGFzU3R5bGUoY3VycmVudEVsZW1lbnQucGFyZW50RWxlbWVudCwgcmVmZXJlbmNlRWxlbWVudCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgY2xlYW51cENvbnRhaW5lcihzZWxlY3Rpb246IFNlbGVjdGlvbiwgY29udGFpbmVyLCBmaXJzdFRpbWVDYWxsOiBCb29sZWFuKSB7XG4gICAgICAgIGxldCBwYXJlbnRDb250YWluZXI6IEhUTUxFbGVtZW50O1xuICAgICAgICBsZXQgcGFyZW50Rm91bmQ6IEJvb2xlYW4gPSBmYWxzZTtcbiAgICAgICAgaWYgKGZpcnN0VGltZUNhbGwpIHtcbiAgICAgICAgICAgIHBhcmVudENvbnRhaW5lciA9IDxIVE1MRWxlbWVudD5zZWxlY3Rpb24uYW5jaG9yTm9kZTtcbiAgICAgICAgICAgIHdoaWxlIChwYXJlbnRDb250YWluZXIgJiYgIXBhcmVudEZvdW5kKSB7XG4gICAgICAgICAgICAgICAgaWYgKHBhcmVudENvbnRhaW5lci5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUgJiYgcGFyZW50Q29udGFpbmVyLmNsYXNzTGlzdD8uY29udGFpbnMoJ2NlLXBhcmFncmFwaCcpKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhcmVudEZvdW5kID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBwYXJlbnRDb250YWluZXIgPSBwYXJlbnRDb250YWluZXIucGFyZW50RWxlbWVudDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwYXJlbnRDb250YWluZXIgPSBjb250YWluZXI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFwYXJlbnRDb250YWluZXIgfHwgIXBhcmVudENvbnRhaW5lci5oYXNDaGlsZE5vZGVzKCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHBhcmVudENvbnRhaW5lci5ub3JtYWxpemUoKTtcblxuICAgICAgICBjb25zdCBjaGlsZHJlbjogTm9kZVtdID0gQXJyYXkuZnJvbShwYXJlbnRDb250YWluZXIuY2hpbGROb2Rlcyk7XG4gICAgICAgIGlmIChjaGlsZHJlbj8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgZm9yICh2YXIgY3VycmVudE5vZGUgPSBjaGlsZHJlblswXTsgY3VycmVudE5vZGU7IGN1cnJlbnROb2RlID0gY3VycmVudE5vZGUubmV4dFNpYmxpbmcpIHtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICFjdXJyZW50Tm9kZS50ZXh0Q29udGVudCB8fFxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50Tm9kZS50ZXh0Q29udGVudC5sZW5ndGggPT09IDAgfHxcbiAgICAgICAgICAgICAgICAgICAgKGN1cnJlbnROb2RlLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERSAmJiAoPEhUTUxFbGVtZW50PmN1cnJlbnROb2RlKS5pbm5lclRleHQubGVuZ3RoID09PSAwKVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgcHJldmlvdXNTaWJsaW5nID0gY3VycmVudE5vZGUucHJldmlvdXNTaWJsaW5nO1xuICAgICAgICAgICAgICAgICAgICBwYXJlbnRDb250YWluZXIucmVtb3ZlQ2hpbGQoY3VycmVudE5vZGUpO1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50Tm9kZSA9IHByZXZpb3VzU2libGluZztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50Tm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUgJiZcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wYXJlbnRIYXNTdHlsZShjdXJyZW50Tm9kZS5wYXJlbnRFbGVtZW50LCA8SFRNTEVsZW1lbnQ+Y3VycmVudE5vZGUpXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBjdXJyZW50Tm9kZUZpcnN0Q2hpbGQgPSBjdXJyZW50Tm9kZTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IG5leHRDdXJyZW50RWxlbWVudCA9IGN1cnJlbnROb2RlLmZpcnN0Q2hpbGQ7XG4gICAgICAgICAgICAgICAgICAgIHdoaWxlIChjdXJyZW50Tm9kZS5maXJzdENoaWxkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRDb250YWluZXIuaW5zZXJ0QmVmb3JlKGN1cnJlbnROb2RlLmZpcnN0Q2hpbGQsIGN1cnJlbnROb2RlRmlyc3RDaGlsZC5uZXh0U2libGluZyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50Tm9kZUZpcnN0Q2hpbGQgPSBjdXJyZW50Tm9kZUZpcnN0Q2hpbGQubmV4dFNpYmxpbmc7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcGFyZW50Q29udGFpbmVyLnJlbW92ZUNoaWxkKGN1cnJlbnROb2RlKTtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudE5vZGUgPSBuZXh0Q3VycmVudEVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGxldCBpZGVudGljYWxFbGVtZW50cyA9IHRydWU7XG4gICAgICAgICAgICAgICAgd2hpbGUgKFxuICAgICAgICAgICAgICAgICAgICBpZGVudGljYWxFbGVtZW50cyAmJlxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50Tm9kZS5uZXh0U2libGluZyAmJlxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50Tm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUgJiZcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudE5vZGUubmV4dFNpYmxpbmcubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBjdXJyZW50RWxlbWVudCA9IDxFbGVtZW50PmN1cnJlbnROb2RlO1xuICAgICAgICAgICAgICAgICAgICBsZXQgbmV4dEVsZW1lbnQgPSA8RWxlbWVudD5jdXJyZW50Tm9kZS5uZXh0U2libGluZztcblxuICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlkZW50aWNhbElubGluZVN0eWxlKGN1cnJlbnRFbGVtZW50LCBuZXh0RWxlbWVudCkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRFbGVtZW50LnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PT0gbmV4dEVsZW1lbnQudGFnTmFtZS50b0xvd2VyQ2FzZSgpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlkZW50aWNhbENsYXNzTGlzdChjdXJyZW50RWxlbWVudCwgbmV4dEVsZW1lbnQpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlkZW50aWNhbEF0dHJpYnV0ZXMoY3VycmVudEVsZW1lbnQsIG5leHRFbGVtZW50KVxuICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRFbGVtZW50LmlubmVySFRNTCArPSBuZXh0RWxlbWVudC5pbm5lckhUTUw7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0RWxlbWVudC5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubW9kaWZpZWRDb250ZW50ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkZW50aWNhbEVsZW1lbnRzID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50Tm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUgJiZcbiAgICAgICAgICAgICAgICAgICAgKDxFbGVtZW50PmN1cnJlbnROb2RlKS50YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT09ICdzcGFuJyAmJlxuICAgICAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyh0aGlzLmdldElubGluZVN0eWxlKDxFbGVtZW50PmN1cnJlbnROb2RlKSkubGVuZ3RoID09PSAwICYmXG4gICAgICAgICAgICAgICAgICAgICghKDxFbGVtZW50PmN1cnJlbnROb2RlKS5jbGFzc0xpc3QgfHwgKDxFbGVtZW50PmN1cnJlbnROb2RlKS5jbGFzc0xpc3QubGVuZ3RoID09PSAwKSAmJlxuICAgICAgICAgICAgICAgICAgICB0aGlzLmhhc05vQXR0cmlidXRlcyg8RWxlbWVudD5jdXJyZW50Tm9kZSlcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGN1cnJlbnROb2RlRmlyc3RDaGlsZCA9IGN1cnJlbnROb2RlO1xuXG4gICAgICAgICAgICAgICAgICAgIHdoaWxlIChjdXJyZW50Tm9kZS5maXJzdENoaWxkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAoPEVsZW1lbnQ+Y3VycmVudE5vZGVGaXJzdENoaWxkLnBhcmVudEVsZW1lbnQpLmluc2VydEJlZm9yZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50Tm9kZS5maXJzdENoaWxkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnROb2RlRmlyc3RDaGlsZC5uZXh0U2libGluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnROb2RlRmlyc3RDaGlsZCA9IGN1cnJlbnROb2RlRmlyc3RDaGlsZC5uZXh0U2libGluZztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAoPEVsZW1lbnQ+Y3VycmVudE5vZGUpLnJlbW92ZSgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1vZGlmaWVkQ29udGVudCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGN1cnJlbnROb2RlLm5vcm1hbGl6ZSgpO1xuICAgICAgICAgICAgICAgIGlmIChjdXJyZW50Tm9kZS5jaGlsZE5vZGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5jbGVhbnVwQ29udGFpbmVyKHNlbGVjdGlvbiwgY3VycmVudE5vZGUsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGhhc05vQXR0cmlidXRlcyhub2RlOiBFbGVtZW50KTogYm9vbGVhbiB7XG4gICAgICAgIGxldCBub2RlU3R5bGUgPSBPYmplY3Qua2V5cyh0aGlzLmdldElubGluZVN0eWxlKG5vZGUpKTtcbiAgICAgICAgbGV0IG5vZGVBdHRyaWJ1dGVzID0gT2JqZWN0LmtleXMoXG4gICAgICAgICAgICBub2RlLmdldEF0dHJpYnV0ZU5hbWVzKCkucmVkdWNlKChhY2MsIG5hbWUpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4geyAuLi5hY2MsIFtuYW1lXTogbm9kZS5nZXRBdHRyaWJ1dGUobmFtZSkgfTtcbiAgICAgICAgICAgIH0sIHt9KVxuICAgICAgICApO1xuXG4gICAgICAgIGlmIChub2RlQXR0cmlidXRlcy5sZW5ndGggPT09IDAgfHwgKG5vZGVBdHRyaWJ1dGVzLmxlbmd0aCA9PT0gMSAmJiBub2RlU3R5bGUubGVuZ3RoID09PSAwKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHByaXZhdGUgaWRlbnRpY2FsQ2xhc3NMaXN0KGN1cnJlbnRFbGVtZW50LCBuZXh0RWxlbWVudCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgWy4uLmN1cnJlbnRFbGVtZW50LmNsYXNzTGlzdF0uZXZlcnkoKGNsYXNzTGlzdCkgPT4gbmV4dEVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKGNsYXNzTGlzdCkpICYmXG4gICAgICAgICAgICBbLi4ubmV4dEVsZW1lbnQuY2xhc3NMaXN0XS5ldmVyeSgoY2xhc3NMaXN0KSA9PiBjdXJyZW50RWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoY2xhc3NMaXN0KSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlkZW50aWNhbEF0dHJpYnV0ZXMoY3VycmVudEVsZW1lbnQsIG5leHRFbGVtZW50KTogYm9vbGVhbiB7XG4gICAgICAgIGxldCBjdXJyZW50RWxlbWVudEF0dHJpYnV0ZXMgPSBjdXJyZW50RWxlbWVudC5nZXRBdHRyaWJ1dGVOYW1lcygpO1xuICAgICAgICBpZiAoY3VycmVudEVsZW1lbnRBdHRyaWJ1dGVzKSB7XG4gICAgICAgICAgICBjdXJyZW50RWxlbWVudEF0dHJpYnV0ZXMuZm9yRWFjaCgoYXR0cmlidXRlKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZSAhPT0gJ3N0eWxlJykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAhbmV4dEVsZW1lbnQuZ2V0QXR0cmlidXRlKGF0dHJpYnV0ZSkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHRFbGVtZW50LmdldEF0dHJpYnV0ZShhdHRyaWJ1dGUpICE9PSBjdXJyZW50RWxlbWVudC5nZXRBdHRyaWJ1dGUoYXR0cmlidXRlKVxuICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHByaXZhdGUgaWRlbnRpY2FsSW5saW5lU3R5bGUoY3VycmVudEVsZW1lbnQsIG5leHRFbGVtZW50KTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRFbGVtZW50SW5saW5lU3R5bGUgPSB0aGlzLmdldElubGluZVN0eWxlKGN1cnJlbnRFbGVtZW50KTtcbiAgICAgICAgY29uc3QgbmV4dEVsZW1lbnRJbmxpbmVTdHlsZSA9IHRoaXMuZ2V0SW5saW5lU3R5bGUobmV4dEVsZW1lbnQpO1xuICAgICAgICBsZXQgY3VycmVudEVsZW1lbnRJbmxpbmVTdHlsZVNvcnRlZCA9IHRoaXMuc29ydElubGluZVN0eWxlKGN1cnJlbnRFbGVtZW50SW5saW5lU3R5bGUpO1xuICAgICAgICBsZXQgbmV4dEVsZW1lbnRJbmxpbmVTdHlsZVNvcnRlZCA9IHRoaXMuc29ydElubGluZVN0eWxlKG5leHRFbGVtZW50SW5saW5lU3R5bGUpO1xuICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoY3VycmVudEVsZW1lbnRJbmxpbmVTdHlsZVNvcnRlZCkgPT09IEpTT04uc3RyaW5naWZ5KG5leHRFbGVtZW50SW5saW5lU3R5bGVTb3J0ZWQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc29ydElubGluZVN0eWxlKGN1cnJlbnRFbGVtZW50KTogT2JqZWN0IHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKGN1cnJlbnRFbGVtZW50KVxuICAgICAgICAgICAgLnNvcnQoKFssIGFdOiBhbnksIFssIGJdOiBhbnkpID0+IGEgLSBiKVxuICAgICAgICAgICAgLnJlZHVjZSgociwgW2ssIHZdKSA9PiAoeyAuLi5yLCBba106IHYgfSksIHt9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldElubGluZVN0eWxlKGN1cnJlbnRFbGVtZW50KTogT2JqZWN0IHtcbiAgICAgICAgcmV0dXJuIEFycmF5LmZyb20oY3VycmVudEVsZW1lbnQuc3R5bGUpLnJlZHVjZSgoc3R5bGU6IHN0cmluZywgbmFtZTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICBzdHlsZVtuYW1lXSA9IGN1cnJlbnRFbGVtZW50LnN0eWxlW25hbWVdO1xuICAgICAgICAgICAgcmV0dXJuIHN0eWxlO1xuICAgICAgICB9LCB7fSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRJbmxpbmVTdHlsZShjdXJyZW50RWxlbWVudCwgbmV4dEVsZW1lbnQpOiBIVE1MRWxlbWVudCB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRFbGVtZW50SW5saW5lU3R5bGU6IE9iamVjdCA9IEFycmF5LmZyb20oY3VycmVudEVsZW1lbnQuc3R5bGUpLnJlZHVjZSgoc3R5bGU6IHN0cmluZywgbmFtZTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICBzdHlsZVtuYW1lXSA9IGN1cnJlbnRFbGVtZW50LnN0eWxlW25hbWVdO1xuICAgICAgICAgICAgcmV0dXJuIHN0eWxlO1xuICAgICAgICB9LCB7fSk7XG4gICAgICAgIGZvciAoY29uc3QgcHJvcGVydHkgaW4gY3VycmVudEVsZW1lbnRJbmxpbmVTdHlsZSkge1xuICAgICAgICAgICAgbmV4dEVsZW1lbnQuc3R5bGVbcHJvcGVydHldID0gY3VycmVudEVsZW1lbnRJbmxpbmVTdHlsZVtwcm9wZXJ0eV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5leHRFbGVtZW50O1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNDb250YWluZXIoY29udGFpbmVyczogc3RyaW5nLCBub2RlOiBOb2RlKTogQm9vbGVhbiB7XG4gICAgICAgIGlmIChjb250YWluZXJzLnNwbGl0KCcsJykuaW5kZXhPZihub2RlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpID09PSAtMSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgc2F2ZUlubGluZVNlbGVjdGlvbihjb250YWluZXI6IEhUTUxFbGVtZW50LCBmaXJzdFRpbWVDYWxsOiBib29sZWFuID0gZmFsc2UpIHtcbiAgICAgICAgaWYgKGZpcnN0VGltZUNhbGwpIHtcbiAgICAgICAgICAgIGNvbnRhaW5lciA9IDxIVE1MRWxlbWVudD50aGlzLnBhcmVudEVkaXRvci5xdWVyeVNlbGVjdG9yKCcuY2UtcGFyYWdyYXBoJykuZmlyc3RFbGVtZW50Q2hpbGQ7XG4gICAgICAgICAgICB0aGlzLmZvdW5kQW5jaG9yTm9kZSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5mb3VuZEZvY3VzTm9kZSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5mb3VuZEFuY2hvck9mZnNldCA9IDA7XG4gICAgICAgICAgICB0aGlzLmZvdW5kRm9jdXNPZmZzZXQgPSAwO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5nZXRTZWxlY3Rpb24oKS50b1N0cmluZygpID09PSAoPEhUTUxFbGVtZW50PnRoaXMucGFyZW50RWRpdG9yLnF1ZXJ5U2VsZWN0b3IoJy5jZS1wYXJhZ3JhcGgnKSkudGV4dENvbnRlbnQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZvdW5kQW5jaG9yT2Zmc2V0ID0gMDtcbiAgICAgICAgICAgICAgICB0aGlzLmZvdW5kQW5jaG9yTm9kZSA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICB0aGlzLmZvdW5kRm9jdXNPZmZzZXQgPSB0aGlzLmdldFNlbGVjdGlvbigpLnRvU3RyaW5nKCkubGVuZ3RoO1xuICAgICAgICAgICAgICAgIHRoaXMuZm91bmRGb2N1c05vZGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBsZXQgbmV4dE5vZGUgPSBjb250YWluZXIuZmlyc3RDaGlsZDtcbiAgICAgICAgd2hpbGUgKG5leHROb2RlICYmICghdGhpcy5mb3VuZEFuY2hvck5vZGUgfHwgIXRoaXMuZm91bmRGb2N1c05vZGUpKSB7XG4gICAgICAgICAgICBpZiAobmV4dE5vZGUgPT09IHRoaXMuc2VsZWN0ZWRBbmNob3JOb2RlKSB7XG4gICAgICAgICAgICAgICAgbGV0IHNlbGVjdGlvbiA9IHRoaXMuZ2V0U2VsZWN0aW9uKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgaXNMVFIgPSB0aGlzLmlzQW5jaG9yQmVmb3JlRm9jdXMoXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbi5hbmNob3JOb2RlLFxuICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb24uYW5jaG9yT2Zmc2V0LFxuICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb24uZm9jdXNOb2RlLFxuICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb24uZm9jdXNPZmZzZXRcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHRoaXMuZm91bmRBbmNob3JOb2RlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLmZvdW5kQW5jaG9yT2Zmc2V0ICs9IGlzTFRSID8gdGhpcy5hbmNob3JPZmZzZXQgOiB0aGlzLmZvY3VzT2Zmc2V0O1xuICAgICAgICAgICAgICAgIGxldCByYW5nZSA9IHRoaXMuZ2V0UmFuZ2VPYmplY3Qoc2VsZWN0aW9uKTtcbiAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50RnJhZ21lbnQ6IERvY3VtZW50RnJhZ21lbnQgPSByYW5nZS5jbG9uZUNvbnRlbnRzKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgY3VycmVudEVsZW1lbnQ6IEhUTUxTcGFuRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcbiAgICAgICAgICAgICAgICBjdXJyZW50RWxlbWVudC5hcHBlbmRDaGlsZChjdXJyZW50RnJhZ21lbnQpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5mb3VuZEZvY3VzT2Zmc2V0ID0gdGhpcy5mb3VuZEFuY2hvck9mZnNldCArIGN1cnJlbnRFbGVtZW50LmlubmVyVGV4dC5sZW5ndGg7XG4gICAgICAgICAgICAgICAgdGhpcy5mb3VuZEZvY3VzTm9kZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgY3VycmVudEVsZW1lbnQucmVtb3ZlKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG5leHROb2RlLm5vZGVUeXBlID09PSBOb2RlLlRFWFRfTk9ERSkge1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5mb3VuZEFuY2hvck5vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3VuZEFuY2hvck9mZnNldCArPSBuZXh0Tm9kZS50ZXh0Q29udGVudC5sZW5ndGg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5mb3VuZEZvY3VzTm9kZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvdW5kRm9jdXNPZmZzZXQgKz0gbmV4dE5vZGUudGV4dENvbnRlbnQubGVuZ3RoO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChuZXh0Tm9kZS5maXJzdENoaWxkKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5zYXZlSW5saW5lU2VsZWN0aW9uKDxIVE1MRWxlbWVudD5uZXh0Tm9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBuZXh0Tm9kZSA9IG5leHROb2RlLm5leHRTaWJsaW5nO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyByZXNldElubGluZVNlbGVjdGlvbihjb250YWluZXI6IEhUTUxFbGVtZW50IHwgbnVsbCA9IG51bGwsIGZpcnN0VGltZUNhbGw6IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgICAgICBpZiAoZmlyc3RUaW1lQ2FsbCkge1xuICAgICAgICAgICAgY29udGFpbmVyID0gPEhUTUxFbGVtZW50PnRoaXMucGFyZW50RWRpdG9yLnF1ZXJ5U2VsZWN0b3IoJy5jZS1wYXJhZ3JhcGgnKS5maXJzdEVsZW1lbnRDaGlsZDtcbiAgICAgICAgICAgIHRoaXMuZm91bmRBbmNob3JOb2RlID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmZvdW5kRm9jdXNOb2RlID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnRtcE9mZnNldCA9IDA7XG5cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICB0aGlzLmZvdW5kQW5jaG9yT2Zmc2V0ID09PSAwICYmXG4gICAgICAgICAgICAgICAgKDxIVE1MRWxlbWVudD50aGlzLnBhcmVudEVkaXRvci5xdWVyeVNlbGVjdG9yKCcuY2UtcGFyYWdyYXBoJykpLnRleHRDb250ZW50Lmxlbmd0aCA9PT0gdGhpcy5mb3VuZEZvY3VzT2Zmc2V0XG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkQW5jaG9yTm9kZSA9ICg8SFRNTEVsZW1lbnQ+dGhpcy5wYXJlbnRFZGl0b3IucXVlcnlTZWxlY3RvcignLmNlLXBhcmFncmFwaCcpKS5maXJzdEVsZW1lbnRDaGlsZDtcbiAgICAgICAgICAgICAgICB0aGlzLmFuY2hvck9mZnNldCA9IDA7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEZvY3VzTm9kZSA9ICg8SFRNTEVsZW1lbnQ+dGhpcy5wYXJlbnRFZGl0b3IucXVlcnlTZWxlY3RvcignLmNlLXBhcmFncmFwaCcpKS5maXJzdEVsZW1lbnRDaGlsZDtcbiAgICAgICAgICAgICAgICB0aGlzLmZvY3VzT2Zmc2V0ID0gMTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlc2V0VXNlclNlbGVjdGlvbigpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBsZXQgbmV4dE5vZGUgPSBjb250YWluZXIuZmlyc3RDaGlsZDtcbiAgICAgICAgd2hpbGUgKG5leHROb2RlICYmICghdGhpcy5mb3VuZEFuY2hvck5vZGUgfHwgIXRoaXMuZm91bmRGb2N1c05vZGUpKSB7XG4gICAgICAgICAgICBpZiAobmV4dE5vZGUubm9kZVR5cGUgPT09IE5vZGUuVEVYVF9OT0RFKSB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmZvdW5kQW5jaG9yTm9kZSAmJiB0aGlzLmZvdW5kQW5jaG9yT2Zmc2V0IC0gbmV4dE5vZGUudGV4dENvbnRlbnQubGVuZ3RoIDwgMCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvdW5kQW5jaG9yTm9kZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYW5jaG9yT2Zmc2V0ID0gdGhpcy5mb3VuZEFuY2hvck9mZnNldDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEFuY2hvck5vZGUgPSBuZXh0Tm9kZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmZvdW5kRm9jdXNOb2RlICYmIHRoaXMuZm91bmRGb2N1c09mZnNldCAtIG5leHROb2RlLnRleHRDb250ZW50Lmxlbmd0aCA8PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm91bmRGb2N1c05vZGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvY3VzT2Zmc2V0ID0gdGhpcy5mb3VuZEZvY3VzT2Zmc2V0O1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkRm9jdXNOb2RlID0gbmV4dE5vZGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMudG1wT2Zmc2V0ICs9IG5leHROb2RlLnRleHRDb250ZW50Lmxlbmd0aDtcbiAgICAgICAgICAgICAgICB0aGlzLmZvdW5kQW5jaG9yT2Zmc2V0IC09IG5leHROb2RlLnRleHRDb250ZW50Lmxlbmd0aDtcbiAgICAgICAgICAgICAgICB0aGlzLmZvdW5kRm9jdXNPZmZzZXQgLT0gbmV4dE5vZGUudGV4dENvbnRlbnQubGVuZ3RoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG5leHROb2RlLmZpcnN0Q2hpbGQpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnJlc2V0SW5saW5lU2VsZWN0aW9uKDxIVE1MRWxlbWVudD5uZXh0Tm9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBuZXh0Tm9kZSA9IG5leHROb2RlLm5leHRTaWJsaW5nO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmaXJzdFRpbWVDYWxsKSB7XG4gICAgICAgICAgICB0aGlzLnJlc2V0VXNlclNlbGVjdGlvbigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRNb3N0RGVzY2VuZGFudENoaWxkKGVsZW1lbnQ6IEhUTUxFbGVtZW50KSB7XG4gICAgICAgIHdoaWxlIChlbGVtZW50LmNoaWxkcmVuICYmIGVsZW1lbnQuaW5uZXJUZXh0ID09PSAoPEhUTUxFbGVtZW50PmVsZW1lbnQuY2hpbGRyZW5bMF0pPy5pbm5lclRleHQgJiYgZWxlbWVudC5jaGlsZHJlbi5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIGVsZW1lbnQgPSA8SFRNTEVsZW1lbnQ+ZWxlbWVudC5jaGlsZHJlblswXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZWxlbWVudDtcbiAgICB9XG59XG4iXX0=
@@ -19160,14 +19160,16 @@ class InlineStyleTool extends EditorJSTool {
19160
19160
  }
19161
19161
  identicalAttributes(currentElement, nextElement) {
19162
19162
  let currentElementAttributes = currentElement.getAttributeNames();
19163
- currentElementAttributes.forEach((attribute) => {
19164
- if (attribute !== 'style') {
19165
- if (!nextElement.getAttribute(attribute) ||
19166
- nextElement.getAttribute(attribute) !== currentElement.getAttribute(attribute)) {
19167
- return false;
19163
+ if (currentElementAttributes) {
19164
+ currentElementAttributes.forEach((attribute) => {
19165
+ if (attribute !== 'style') {
19166
+ if (!nextElement.getAttribute(attribute) ||
19167
+ nextElement.getAttribute(attribute) !== currentElement.getAttribute(attribute)) {
19168
+ return false;
19169
+ }
19168
19170
  }
19169
- }
19170
- });
19171
+ });
19172
+ }
19171
19173
  return true;
19172
19174
  }
19173
19175
  identicalInlineStyle(currentElement, nextElement) {