UNPKG

botframework-webchat-component

Version:
142 lines (139 loc) 25.6 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _markdownIt = _interopRequireDefault(require("markdown-it")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); } function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); } function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); } function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } /* eslint-disable security/detect-object-injection */ function iterator(md, ruleName, tokenType, iterator) { function scan(state) { var _state$env = state.env, env = _state$env === void 0 ? {} : _state$env; for (var blkIdx = state.tokens.length - 1; blkIdx >= 0; blkIdx--) { if (state.tokens[blkIdx].type !== 'inline') { continue; } var inlineTokens = state.tokens[blkIdx].children; for (var i = inlineTokens.length - 1; i >= 0; i--) { if (inlineTokens[i].type !== tokenType) { continue; } iterator(inlineTokens, i, env); } } } md.core.ruler.push(ruleName, scan); } // Put a transparent pixel instead of the "open in new window" icon, so developers can easily modify the icon in CSS. var TRANSPARENT_GIF = 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7'; // This is used for parsing Markdown for external links. var internalMarkdownIt = new _markdownIt.default(); var ZERO_WIDTH_SPACE_TOKEN = { content: "\u200B", type: 'text' }; function setTokenAttribute(attrs, name, value) { var index = attrs.findIndex(function (entry) { return entry[0] === name; }); if (value === false) { ~index && attrs.splice(index, 1); } else if (typeof value === 'string') { if (~index) { attrs[+index][1] = value; } else { attrs.push([name, value]); } } else if (typeof value === 'function') { if (~index) { attrs[+index][1] = value(attrs[+index][1]); } else { attrs.push([name, value()]); } } } var betterLinks = function betterLinks(markdown) { return markdown.use(iterator, 'url_new_win', 'link_open', function (tokens, index, env) { var decorateLink = env.decorateLink, linkOptions = env.linkOptions; var indexOfLinkCloseToken = tokens.indexOf(tokens.slice(index + 1).find(function (_ref) { var type = _ref.type; return type === 'link_close'; })); // eslint-disable-next-line no-magic-numbers var updatedTokens = tokens.splice(index, ~indexOfLinkCloseToken ? indexOfLinkCloseToken - index + 1 : 2); try { var _updatedTokens = _slicedToArray(updatedTokens, 1), linkOpenToken = _updatedTokens[0]; var linkCloseToken = updatedTokens[updatedTokens.length - 1]; var _linkOpenToken$attrs$ = linkOpenToken.attrs.find(function (_ref2) { var _ref3 = _slicedToArray(_ref2, 1), name = _ref3[0]; return name === 'href'; }), _linkOpenToken$attrs$2 = _slicedToArray(_linkOpenToken$attrs$, 2), _href = _linkOpenToken$attrs$2[1]; var nodesInLink = updatedTokens.slice(1, updatedTokens.length - 1); var _textContent = nodesInLink.filter(function (_ref4) { var type = _ref4.type; return type === 'text'; }).map(function (_ref5) { var content = _ref5.content; return content; }).join(' '); var decoration = decorateLink === null || decorateLink === void 0 ? void 0 : decorateLink(_href, _textContent, linkOptions); if (!decoration) { return; } var ariaLabel = decoration.ariaLabel, asButton = decoration.asButton, className = decoration.className, iconAlt = decoration.iconAlt, iconClassName = decoration.iconClassName, rel = decoration.rel, target = decoration.target, title = decoration.title, wrapZeroWidthSpace = decoration.wrapZeroWidthSpace; setTokenAttribute(linkOpenToken.attrs, 'aria-label', ariaLabel); setTokenAttribute(linkOpenToken.attrs, 'class', className); setTokenAttribute(linkOpenToken.attrs, 'title', title); if (iconClassName) { var iconTokens = internalMarkdownIt.parseInline("![](".concat(TRANSPARENT_GIF, ")"))[0].children; setTokenAttribute(iconTokens[0].attrs, 'class', iconClassName); setTokenAttribute(iconTokens[0].attrs, 'title', iconAlt); // Add an icon before </a>. // eslint-disable-next-line no-magic-numbers updatedTokens.splice.apply(updatedTokens, [-1, 0].concat(_toConsumableArray(iconTokens))); } if (asButton) { setTokenAttribute(linkOpenToken.attrs, 'href', false); linkOpenToken.tag = 'button'; setTokenAttribute(linkOpenToken.attrs, 'type', 'button'); setTokenAttribute(linkOpenToken.attrs, 'value', _href); linkCloseToken.tag = 'button'; } else { setTokenAttribute(linkOpenToken.attrs, 'rel', rel); setTokenAttribute(linkOpenToken.attrs, 'target', target); } if (wrapZeroWidthSpace) { updatedTokens.splice(0, 0, ZERO_WIDTH_SPACE_TOKEN); updatedTokens.splice(Infinity, 0, ZERO_WIDTH_SPACE_TOKEN); } } finally { tokens.splice.apply(tokens, [index, 0].concat(_toConsumableArray(updatedTokens))); } }); }; var _default = betterLinks; exports.default = _default; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbWFya2Rvd25JdCIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwib2JqIiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJfdG9Db25zdW1hYmxlQXJyYXkiLCJhcnIiLCJfYXJyYXlXaXRob3V0SG9sZXMiLCJfaXRlcmFibGVUb0FycmF5IiwiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwiX25vbkl0ZXJhYmxlU3ByZWFkIiwiVHlwZUVycm9yIiwiaXRlciIsIlN5bWJvbCIsIml0ZXJhdG9yIiwiQXJyYXkiLCJmcm9tIiwiaXNBcnJheSIsIl9hcnJheUxpa2VUb0FycmF5IiwiX3NsaWNlZFRvQXJyYXkiLCJpIiwiX2FycmF5V2l0aEhvbGVzIiwiX2l0ZXJhYmxlVG9BcnJheUxpbWl0IiwiX25vbkl0ZXJhYmxlUmVzdCIsIm8iLCJtaW5MZW4iLCJuIiwiT2JqZWN0IiwicHJvdG90eXBlIiwidG9TdHJpbmciLCJjYWxsIiwic2xpY2UiLCJjb25zdHJ1Y3RvciIsIm5hbWUiLCJ0ZXN0IiwibGVuIiwibGVuZ3RoIiwiYXJyMiIsIl9pIiwiX2FyciIsIl9uIiwiX2QiLCJfcyIsIl9lIiwibmV4dCIsImRvbmUiLCJwdXNoIiwidmFsdWUiLCJlcnIiLCJtZCIsInJ1bGVOYW1lIiwidG9rZW5UeXBlIiwic2NhbiIsInN0YXRlIiwiX3N0YXRlJGVudiIsImVudiIsImJsa0lkeCIsInRva2VucyIsInR5cGUiLCJpbmxpbmVUb2tlbnMiLCJjaGlsZHJlbiIsImNvcmUiLCJydWxlciIsIlRSQU5TUEFSRU5UX0dJRiIsImludGVybmFsTWFya2Rvd25JdCIsIk1hcmtkb3duSXQiLCJaRVJPX1dJRFRIX1NQQUNFX1RPS0VOIiwiY29udGVudCIsInNldFRva2VuQXR0cmlidXRlIiwiYXR0cnMiLCJpbmRleCIsImZpbmRJbmRleCIsImVudHJ5Iiwic3BsaWNlIiwiYmV0dGVyTGlua3MiLCJtYXJrZG93biIsInVzZSIsImRlY29yYXRlTGluayIsImxpbmtPcHRpb25zIiwiaW5kZXhPZkxpbmtDbG9zZVRva2VuIiwiaW5kZXhPZiIsImZpbmQiLCJfcmVmIiwidXBkYXRlZFRva2VucyIsIl91cGRhdGVkVG9rZW5zIiwibGlua09wZW5Ub2tlbiIsImxpbmtDbG9zZVRva2VuIiwiX2xpbmtPcGVuVG9rZW4kYXR0cnMkIiwiX3JlZjIiLCJfcmVmMyIsIl9saW5rT3BlblRva2VuJGF0dHJzJDIiLCJocmVmIiwibm9kZXNJbkxpbmsiLCJ0ZXh0Q29udGVudCIsImZpbHRlciIsIl9yZWY0IiwibWFwIiwiX3JlZjUiLCJqb2luIiwiZGVjb3JhdGlvbiIsImFyaWFMYWJlbCIsImFzQnV0dG9uIiwiY2xhc3NOYW1lIiwiaWNvbkFsdCIsImljb25DbGFzc05hbWUiLCJyZWwiLCJ0YXJnZXQiLCJ0aXRsZSIsIndyYXBaZXJvV2lkdGhTcGFjZSIsImljb25Ub2tlbnMiLCJwYXJzZUlubGluZSIsImNvbmNhdCIsImFwcGx5IiwidGFnIiwiSW5maW5pdHkiLCJfZGVmYXVsdCIsImV4cG9ydHMiXSwic291cmNlUm9vdCI6ImNvbXBvbmVudDovLy8iLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9VdGlscy9iZXR0ZXJMaW5rcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBzZWN1cml0eS9kZXRlY3Qtb2JqZWN0LWluamVjdGlvbiAqL1xuaW1wb3J0IE1hcmtkb3duSXQgZnJvbSAnbWFya2Rvd24taXQnO1xuXG5mdW5jdGlvbiBpdGVyYXRvcihtZCwgcnVsZU5hbWUsIHRva2VuVHlwZSwgaXRlcmF0b3IpIHtcbiAgZnVuY3Rpb24gc2NhbihzdGF0ZSkge1xuICAgIGNvbnN0IHsgZW52ID0ge30gfSA9IHN0YXRlO1xuICAgIGZvciAobGV0IGJsa0lkeCA9IHN0YXRlLnRva2Vucy5sZW5ndGggLSAxOyBibGtJZHggPj0gMDsgYmxrSWR4LS0pIHtcbiAgICAgIGlmIChzdGF0ZS50b2tlbnNbYmxrSWR4XS50eXBlICE9PSAnaW5saW5lJykge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGlubGluZVRva2VucyA9IHN0YXRlLnRva2Vuc1tibGtJZHhdLmNoaWxkcmVuO1xuICAgICAgZm9yIChsZXQgaSA9IGlubGluZVRva2Vucy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICBpZiAoaW5saW5lVG9rZW5zW2ldLnR5cGUgIT09IHRva2VuVHlwZSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGl0ZXJhdG9yKGlubGluZVRva2VucywgaSwgZW52KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgbWQuY29yZS5ydWxlci5wdXNoKHJ1bGVOYW1lLCBzY2FuKTtcbn1cblxuLy8gUHV0IGEgdHJhbnNwYXJlbnQgcGl4ZWwgaW5zdGVhZCBvZiB0aGUgXCJvcGVuIGluIG5ldyB3aW5kb3dcIiBpY29uLCBzbyBkZXZlbG9wZXJzIGNhbiBlYXNpbHkgbW9kaWZ5IHRoZSBpY29uIGluIENTUy5cbmNvbnN0IFRSQU5TUEFSRU5UX0dJRiA9ICdkYXRhOmltYWdlL2dpZjtiYXNlNjQsUjBsR09EbGhBUUFCQUlBQUFBQUFBUC8vL3lINUJBRUFBQUFBTEFBQUFBQUJBQUVBQUFJQlJBQTcnO1xuXG50eXBlIEF0dHJpYnV0ZVNldHRlciA9IGZhbHNlIHwgc3RyaW5nIHwgKCh2YWx1ZT86IHN0cmluZykgPT4gc3RyaW5nKTtcblxuZXhwb3J0IHR5cGUgTGlua09wdGlvbnMgPSB7XG4gIC8qKiBWYWx1ZSBvZiBcImFyaWEtbGFiZWxcIiBhdHRyaWJ1dGUgb2YgdGhlIGxpbmsuIElmIHNldCB0byBgZmFsc2VgLCByZW1vdmUgZXhpc3RpbmcgYXR0cmlidXRlLiAqL1xuICBhcmlhTGFiZWw/OiBBdHRyaWJ1dGVTZXR0ZXI7XG5cbiAgLyoqIFR1cm5zIHRoaXMgbGluayBpbnRvIGEgPGJ1dHRvbj4gd2l0aCBcInZhbHVlXCIgYXR0cmlidXRlIGluc3RlYWQgb2YgXCJocmVmXCIuICovXG4gIGFzQnV0dG9uPzogYm9vbGVhbjtcblxuICAvKiogVmFsdWUgb2YgXCJjbGFzc1wiIGF0dHJpYnV0ZSBvZiB0aGUgbGluay4gSWYgc2V0IHRvIGBmYWxzZWAsIHJlbW92ZSBleGlzdGluZyBhdHRyaWJ1dGUuICovXG4gIGNsYXNzTmFtZT86IEF0dHJpYnV0ZVNldHRlcjtcblxuICAvKiogQWx0ZXJuYXRlIHRleHQgb2YgdGhlIGltYWdlIGljb24gYXBwZW5kZWQgdG8gdGhlIGxpbmsuICovXG4gIGljb25BbHQ/OiBzdHJpbmc7XG5cbiAgLyoqIENsYXNzIG5hbWUgb2YgdGhlIGltYWdlIGljb24gYXBwZW5kZWQgdG8gdGhlIGxpbmsuICovXG4gIGljb25DbGFzc05hbWU/OiBzdHJpbmc7XG5cbiAgLyoqIFZhbHVlIG9mIFwicmVsXCIgYXR0cmlidXRlIG9mIHRoZSBsaW5rLiBJZiBzZXQgdG8gYGZhbHNlYCwgcmVtb3ZlIGV4aXN0aW5nIGF0dHJpYnV0ZS4gKi9cbiAgcmVsPzogQXR0cmlidXRlU2V0dGVyO1xuXG4gIC8qKiBWYWx1ZSBvZiBcInRhcmdldFwiIGF0dHJpYnV0ZSBvZiB0aGUgbGluay4gSWYgc2V0IHRvIGBmYWxzZWAsIHJlbW92ZSBleGlzdGluZyBhdHRyaWJ1dGUuICovXG4gIHRhcmdldD86IEF0dHJpYnV0ZVNldHRlcjtcblxuICAvKiogVmFsdWUgb2YgXCJ0aXRsZVwiIGF0dHJpYnV0ZSBvZiB0aGUgbGluay4gSWYgc2V0IHRvIGBmYWxzZWAsIHJlbW92ZSBleGlzdGluZyBhdHRyaWJ1dGUuICovXG4gIHRpdGxlPzogQXR0cmlidXRlU2V0dGVyO1xuXG4gIC8qKiBXcmFwcyB0aGUgbGluayB3aXRoIHplcm8td2lkdGggc3BhY2UuICovXG4gIHdyYXBaZXJvV2lkdGhTcGFjZT86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBCZXR0ZXJMaW5rRW52ID0ge1xuICBkZWNvcmF0ZUxpbms/OiAoaHJlZjogc3RyaW5nLCB0ZXh0Q29udGVudDogc3RyaW5nLCBsaW5rT3B0aW9uczogTGlua09wdGlvbnMpID0+IExpbmtPcHRpb25zIHwgdW5kZWZpbmVkO1xuICBsaW5rT3B0aW9ucz86IExpbmtPcHRpb25zO1xufTtcblxuLy8gVGhpcyBpcyB1c2VkIGZvciBwYXJzaW5nIE1hcmtkb3duIGZvciBleHRlcm5hbCBsaW5rcy5cbmNvbnN0IGludGVybmFsTWFya2Rvd25JdCA9IG5ldyBNYXJrZG93bkl0KCk7XG5cbmNvbnN0IFpFUk9fV0lEVEhfU1BBQ0VfVE9LRU4gPSB7XG4gIGNvbnRlbnQ6ICdcXHUyMDBiJyxcbiAgdHlwZTogJ3RleHQnXG59O1xuXG5mdW5jdGlvbiBzZXRUb2tlbkF0dHJpYnV0ZShhdHRyczogQXJyYXk8W3N0cmluZywgc3RyaW5nXT4sIG5hbWU6IHN0cmluZywgdmFsdWU/OiBBdHRyaWJ1dGVTZXR0ZXIpIHtcbiAgY29uc3QgaW5kZXggPSBhdHRycy5maW5kSW5kZXgoZW50cnkgPT4gZW50cnlbMF0gPT09IG5hbWUpO1xuXG4gIGlmICh2YWx1ZSA9PT0gZmFsc2UpIHtcbiAgICB+aW5kZXggJiYgYXR0cnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgaWYgKH5pbmRleCkge1xuICAgICAgYXR0cnNbK2luZGV4XVsxXSA9IHZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBhdHRycy5wdXNoKFtuYW1lLCB2YWx1ZV0pO1xuICAgIH1cbiAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICBpZiAofmluZGV4KSB7XG4gICAgICBhdHRyc1sraW5kZXhdWzFdID0gdmFsdWUoYXR0cnNbK2luZGV4XVsxXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGF0dHJzLnB1c2goW25hbWUsIHZhbHVlKCldKTtcbiAgICB9XG4gIH1cbn1cblxuY29uc3QgYmV0dGVyTGlua3MgPSAobWFya2Rvd246IHR5cGVvZiBNYXJrZG93bkl0KTogdHlwZW9mIE1hcmtkb3duSXQgPT5cbiAgbWFya2Rvd24udXNlKGl0ZXJhdG9yLCAndXJsX25ld193aW4nLCAnbGlua19vcGVuJywgKHRva2VucywgaW5kZXgsIGVudikgPT4ge1xuICAgIGNvbnN0IHsgZGVjb3JhdGVMaW5rLCBsaW5rT3B0aW9ucyB9OiBCZXR0ZXJMaW5rRW52ID0gZW52O1xuXG4gICAgY29uc3QgaW5kZXhPZkxpbmtDbG9zZVRva2VuID0gdG9rZW5zLmluZGV4T2YodG9rZW5zLnNsaWNlKGluZGV4ICsgMSkuZmluZCgoeyB0eXBlIH0pID0+IHR5cGUgPT09ICdsaW5rX2Nsb3NlJykpO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1tYWdpYy1udW1iZXJzXG4gICAgY29uc3QgdXBkYXRlZFRva2VucyA9IHRva2Vucy5zcGxpY2UoaW5kZXgsIH5pbmRleE9mTGlua0Nsb3NlVG9rZW4gPyBpbmRleE9mTGlua0Nsb3NlVG9rZW4gLSBpbmRleCArIDEgOiAyKTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBbbGlua09wZW5Ub2tlbl0gPSB1cGRhdGVkVG9rZW5zO1xuICAgICAgY29uc3QgbGlua0Nsb3NlVG9rZW4gPSB1cGRhdGVkVG9rZW5zW3VwZGF0ZWRUb2tlbnMubGVuZ3RoIC0gMV07XG5cbiAgICAgIGNvbnN0IFssIGhyZWZdID0gbGlua09wZW5Ub2tlbi5hdHRycy5maW5kKChbbmFtZV0pID0+IG5hbWUgPT09ICdocmVmJyk7XG4gICAgICBjb25zdCBub2Rlc0luTGluayA9IHVwZGF0ZWRUb2tlbnMuc2xpY2UoMSwgdXBkYXRlZFRva2Vucy5sZW5ndGggLSAxKTtcblxuICAgICAgY29uc3QgdGV4dENvbnRlbnQgPSBub2Rlc0luTGlua1xuICAgICAgICAuZmlsdGVyKCh7IHR5cGUgfSkgPT4gdHlwZSA9PT0gJ3RleHQnKVxuICAgICAgICAubWFwKCh7IGNvbnRlbnQgfSkgPT4gY29udGVudClcbiAgICAgICAgLmpvaW4oJyAnKTtcblxuICAgICAgY29uc3QgZGVjb3JhdGlvbiA9IGRlY29yYXRlTGluaz8uKGhyZWYsIHRleHRDb250ZW50LCBsaW5rT3B0aW9ucyk7XG5cbiAgICAgIGlmICghZGVjb3JhdGlvbikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHsgYXJpYUxhYmVsLCBhc0J1dHRvbiwgY2xhc3NOYW1lLCBpY29uQWx0LCBpY29uQ2xhc3NOYW1lLCByZWwsIHRhcmdldCwgdGl0bGUsIHdyYXBaZXJvV2lkdGhTcGFjZSB9ID1cbiAgICAgICAgZGVjb3JhdGlvbjtcblxuICAgICAgc2V0VG9rZW5BdHRyaWJ1dGUobGlua09wZW5Ub2tlbi5hdHRycywgJ2FyaWEtbGFiZWwnLCBhcmlhTGFiZWwpO1xuICAgICAgc2V0VG9rZW5BdHRyaWJ1dGUobGlua09wZW5Ub2tlbi5hdHRycywgJ2NsYXNzJywgY2xhc3NOYW1lKTtcbiAgICAgIHNldFRva2VuQXR0cmlidXRlKGxpbmtPcGVuVG9rZW4uYXR0cnMsICd0aXRsZScsIHRpdGxlKTtcblxuICAgICAgaWYgKGljb25DbGFzc05hbWUpIHtcbiAgICAgICAgY29uc3QgaWNvblRva2VucyA9IGludGVybmFsTWFya2Rvd25JdC5wYXJzZUlubGluZShgIVtdKCR7VFJBTlNQQVJFTlRfR0lGfSlgKVswXS5jaGlsZHJlbjtcblxuICAgICAgICBzZXRUb2tlbkF0dHJpYnV0ZShpY29uVG9rZW5zWzBdLmF0dHJzLCAnY2xhc3MnLCBpY29uQ2xhc3NOYW1lKTtcbiAgICAgICAgc2V0VG9rZW5BdHRyaWJ1dGUoaWNvblRva2Vuc1swXS5hdHRycywgJ3RpdGxlJywgaWNvbkFsdCk7XG5cbiAgICAgICAgLy8gQWRkIGFuIGljb24gYmVmb3JlIDwvYT4uXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1tYWdpYy1udW1iZXJzXG4gICAgICAgIHVwZGF0ZWRUb2tlbnMuc3BsaWNlKC0xLCAwLCAuLi5pY29uVG9rZW5zKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGFzQnV0dG9uKSB7XG4gICAgICAgIHNldFRva2VuQXR0cmlidXRlKGxpbmtPcGVuVG9rZW4uYXR0cnMsICdocmVmJywgZmFsc2UpO1xuXG4gICAgICAgIGxpbmtPcGVuVG9rZW4udGFnID0gJ2J1dHRvbic7XG5cbiAgICAgICAgc2V0VG9rZW5BdHRyaWJ1dGUobGlua09wZW5Ub2tlbi5hdHRycywgJ3R5cGUnLCAnYnV0dG9uJyk7XG4gICAgICAgIHNldFRva2VuQXR0cmlidXRlKGxpbmtPcGVuVG9rZW4uYXR0cnMsICd2YWx1ZScsIGhyZWYpO1xuXG4gICAgICAgIGxpbmtDbG9zZVRva2VuLnRhZyA9ICdidXR0b24nO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2V0VG9rZW5BdHRyaWJ1dGUobGlua09wZW5Ub2tlbi5hdHRycywgJ3JlbCcsIHJlbCk7XG4gICAgICAgIHNldFRva2VuQXR0cmlidXRlKGxpbmtPcGVuVG9rZW4uYXR0cnMsICd0YXJnZXQnLCB0YXJnZXQpO1xuICAgICAgfVxuXG4gICAgICBpZiAod3JhcFplcm9XaWR0aFNwYWNlKSB7XG4gICAgICAgIHVwZGF0ZWRUb2tlbnMuc3BsaWNlKDAsIDAsIFpFUk9fV0lEVEhfU1BBQ0VfVE9LRU4pO1xuICAgICAgICB1cGRhdGVkVG9rZW5zLnNwbGljZShJbmZpbml0eSwgMCwgWkVST19XSURUSF9TUEFDRV9UT0tFTik7XG4gICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRva2Vucy5zcGxpY2UoaW5kZXgsIDAsIC4uLnVwZGF0ZWRUb2tlbnMpO1xuICAgIH1cbiAgfSk7XG5cbmV4cG9ydCBkZWZhdWx0IGJldHRlckxpbmtzO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFDQSxJQUFBQSxXQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFBcUMsU0FBQUQsdUJBQUFFLEdBQUEsV0FBQUEsR0FBQSxJQUFBQSxHQUFBLENBQUFDLFVBQUEsR0FBQUQsR0FBQSxLQUFBRSxPQUFBLEVBQUFGLEdBQUE7QUFBQSxTQUFBRyxtQkFBQUMsR0FBQSxXQUFBQyxrQkFBQSxDQUFBRCxHQUFBLEtBQUFFLGdCQUFBLENBQUFGLEdB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