UNPKG

botframework-webchat-component

Version:
147 lines (137 loc) 24.1 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _botframeworkWebchatApi = require("botframework-webchat-api"); var _react = require("react"); var _intersectionOf = _interopRequireDefault(require("../../../Utils/intersectionOf")); var _removeInline = _interopRequireDefault(require("../../../Utils/removeInline")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 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 _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; } 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 _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 _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 _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; } var useGroupActivities = _botframeworkWebchatApi.hooks.useGroupActivities; function validateAllEntriesTagged(entries, bins) { return entries.every(function (entry) { return bins.some(function (bin) { return bin.includes(entry); }); }); } // Activity tree is a multidimensional array, while activities is a 1D array. // - The first dimension of the array contains activities with same sender; // - The second dimension of the array contains activities with same status. // [ // [ // // Both messages are from bot and is sent as a batch, we will group them as an array. // 'Bot: Hello!' // 'Bot: What can I help today?' // ], // [ // 'User: What is the weather?' // ], // [ // 'Bot: Let me look it up... hold on.' // ], // [ // // This message is in a different group because it is more than a few seconds apart from the previous message. // 'Bot: Here is the weather forecast.' // ] // ] function useActivityTreeWithRenderer(entries) { var groupActivities = useGroupActivities(); var entryMap = (0, _react.useMemo)(function () { return new Map(entries.map(function (entry) { return [entry.activity, entry]; })); }, [entries]); // We bin activities in 2 different ways: // - `activitiesBySender` is a 2D array containing activities with same sender // - `activitiesByStatus` is a 2D array containing activities with same status // Both arrays should contains all activities. var _useMemo = (0, _react.useMemo)(function () { var visibleActivities = _toConsumableArray(entryMap.keys()); var groupActivitiesResult = groupActivities({ activities: visibleActivities }); var activitiesBySender = (groupActivitiesResult === null || groupActivitiesResult === void 0 ? void 0 : groupActivitiesResult.sender) || []; var activitiesByStatus = (groupActivitiesResult === null || groupActivitiesResult === void 0 ? void 0 : groupActivitiesResult.status) || []; var _map = [activitiesBySender, activitiesByStatus].map(function (bins) { return bins.map(function (bin) { return bin.map(function (activity) { return entryMap.get(activity); }); }); }), _map2 = _slicedToArray(_map, 2), entriesBySender = _map2[0], entriesByStatus = _map2[1]; if (!validateAllEntriesTagged(visibleActivities, activitiesBySender)) { console.warn('botframework-webchat: Not every activities are grouped in the "sender" property. Please fix "groupActivitiesMiddleware" and group every activities.'); } if (!validateAllEntriesTagged(visibleActivities, activitiesByStatus)) { console.warn('botframework-webchat: Not every activities are grouped in the "status" property. Please fix "groupActivitiesMiddleware" and group every activities.'); } return { entriesBySender: entriesBySender, entriesByStatus: entriesByStatus }; }, [entryMap, groupActivities]), entriesBySender = _useMemo.entriesBySender, entriesByStatus = _useMemo.entriesByStatus; // Create a tree of activities with 2 dimensions: sender, followed by status. var activityTree = (0, _react.useMemo)(function () { var entriesPendingGrouping = _toConsumableArray(entries); var activityTree = []; var _loop = function _loop() { var found = void 0; var entriesWithSameSender = entriesBySender.find(function (bin) { return bin.includes(entriesPendingGrouping[0]); }); var senderTree = []; entriesWithSameSender === null || entriesWithSameSender === void 0 ? void 0 : entriesWithSameSender.forEach(function (entry) { var entriesWithSameStatus = entriesByStatus.find(function (bin) { return bin.includes(entry); }); var entriesWithSameSenderAndStatus = (0, _intersectionOf.default)(entriesPendingGrouping, entriesWithSameSender, entriesWithSameStatus); if (entriesWithSameSenderAndStatus.length) { senderTree.push(Object.freeze(entriesWithSameSenderAndStatus)); _removeInline.default.apply(void 0, [entriesPendingGrouping].concat(_toConsumableArray(entriesWithSameSenderAndStatus))); found = true; } }); // If the entry is not grouped by the middleware, just put the entry in its own bin. found || senderTree.push(Object.freeze([entriesPendingGrouping.shift()])); activityTree.push(Object.freeze(senderTree)); }; while (entriesPendingGrouping.length) { _loop(); } // Assertion: All entries must be assigned to the activityTree. if (!entries.every(function (activity) { return activityTree.some(function (activitiesWithSameSender) { return activitiesWithSameSender.some(function (activitiesWithSameSenderAndStatus) { return activitiesWithSameSenderAndStatus.includes(activity); }); }); })) { console.warn('botframework-webchat internal: Not all visible activities are grouped in the activityTree.', { entries: entries, activityTree: activityTree }); } return Object.freeze(activityTree); }, [entriesBySender, entriesByStatus, entries]); return activityTree; } var _default = useActivityTreeWithRenderer; exports.default = _default; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYm90ZnJhbWV3b3JrV2ViY2hhdEFwaSIsInJlcXVpcmUiLCJfcmVhY3QiLCJfaW50ZXJzZWN0aW9uT2YiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiX3JlbW92ZUlubGluZSIsIm9iaiIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwiX3NsaWNlZFRvQXJyYXkiLCJhcnIiLCJpIiwiX2FycmF5V2l0aEhvbGVzIiwiX2l0ZXJhYmxlVG9BcnJheUxpbWl0IiwiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwiX25vbkl0ZXJhYmxlUmVzdCIsIlR5cGVFcnJvciIsIl9pIiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJfYXJyIiwiX24iLCJfZCIsIl9zIiwiX2UiLCJjYWxsIiwibmV4dCIsImRvbmUiLCJwdXNoIiwidmFsdWUiLCJsZW5ndGgiLCJlcnIiLCJBcnJheSIsImlzQXJyYXkiLCJfdG9Db25zdW1hYmxlQXJyYXkiLCJfYXJyYXlXaXRob3V0SG9sZXMiLCJfaXRlcmFibGVUb0FycmF5IiwiX25vbkl0ZXJhYmxlU3ByZWFkIiwibyIsIm1pbkxlbiIsIl9hcnJheUxpa2VUb0FycmF5IiwibiIsIk9iamVjdCIsInByb3RvdHlwZSIsInRvU3RyaW5nIiwic2xpY2UiLCJjb25zdHJ1Y3RvciIsIm5hbWUiLCJmcm9tIiwidGVzdCIsIml0ZXIiLCJsZW4iLCJhcnIyIiwidXNlR3JvdXBBY3Rpdml0aWVzIiwiaG9va3MiLCJ2YWxpZGF0ZUFsbEVudHJpZXNUYWdnZWQiLCJlbnRyaWVzIiwiYmlucyIsImV2ZXJ5IiwiZW50cnkiLCJzb21lIiwiYmluIiwiaW5jbHVkZXMiLCJ1c2VBY3Rpdml0eVRyZWVXaXRoUmVuZGVyZXIiLCJncm91cEFjdGl2aXRpZXMiLCJlbnRyeU1hcCIsInVzZU1lbW8iLCJNYXAiLCJtYXAiLCJhY3Rpdml0eSIsIl91c2VNZW1vIiwidmlzaWJsZUFjdGl2aXRpZXMiLCJrZXlzIiwiZ3JvdXBBY3Rpdml0aWVzUmVzdWx0IiwiYWN0aXZpdGllcyIsImFjdGl2aXRpZXNCeVNlbmRlciIsInNlbmRlciIsImFjdGl2aXRpZXNCeVN0YXR1cyIsInN0YXR1cyIsIl9tYXAiLCJnZXQiLCJfbWFwMiIsImVudHJpZXNCeVNlbmRlciIsImVudHJpZXNCeVN0YXR1cyIsImNvbnNvbGUiLCJ3YXJuIiwiYWN0aXZpdHlUcmVlIiwiZW50cmllc1BlbmRpbmdHcm91cGluZyIsIl9sb29wIiwiZm91bmQiLCJlbnRyaWVzV2l0aFNhbWVTZW5kZXIiLCJmaW5kIiwic2VuZGVyVHJlZSIsImZvckVhY2giLCJlbnRyaWVzV2l0aFNhbWVTdGF0dXMiLCJlbnRyaWVzV2l0aFNhbWVTZW5kZXJBbmRTdGF0dXMiLCJpbnRlcnNlY3Rpb25PZiIsImZyZWV6ZSIsInJlbW92ZUlubGluZSIsImFwcGx5IiwiY29uY2F0Iiwic2hpZnQiLCJhY3Rpdml0aWVzV2l0aFNhbWVTZW5kZXIiLCJhY3Rpdml0aWVzV2l0aFNhbWVTZW5kZXJBbmRTdGF0dXMiLCJfZGVmYXVsdCIsImV4cG9ydHMiXSwic291cmNlUm9vdCI6ImNvbXBvbmVudDovLy8iLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9wcm92aWRlcnMvQWN0aXZpdHlUcmVlL3ByaXZhdGUvdXNlQWN0aXZpdHlUcmVlV2l0aFJlbmRlcmVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGhvb2tzIH0gZnJvbSAnYm90ZnJhbWV3b3JrLXdlYmNoYXQtYXBpJztcbmltcG9ydCB7IHVzZU1lbW8gfSBmcm9tICdyZWFjdCc7XG5cbmltcG9ydCB0eXBlIHsgV2ViQ2hhdEFjdGl2aXR5IH0gZnJvbSAnYm90ZnJhbWV3b3JrLXdlYmNoYXQtY29yZSc7XG5pbXBvcnQgaW50ZXJzZWN0aW9uT2YgZnJvbSAnLi4vLi4vLi4vVXRpbHMvaW50ZXJzZWN0aW9uT2YnO1xuaW1wb3J0IHJlbW92ZUlubGluZSBmcm9tICcuLi8uLi8uLi9VdGlscy9yZW1vdmVJbmxpbmUnO1xuaW1wb3J0IHR5cGUgeyBBY3Rpdml0eVdpdGhSZW5kZXJlciwgUmVhZG9ubHlBY3Rpdml0eVRyZWUgfSBmcm9tICcuL3R5cGVzJztcblxuY29uc3QgeyB1c2VHcm91cEFjdGl2aXRpZXMgfSA9IGhvb2tzO1xuXG5mdW5jdGlvbiB2YWxpZGF0ZUFsbEVudHJpZXNUYWdnZWQ8VD4oZW50cmllczogcmVhZG9ubHkgVFtdLCBiaW5zOiByZWFkb25seSAocmVhZG9ubHkgVFtdKVtdKTogYm9vbGVhbiB7XG4gIHJldHVybiBlbnRyaWVzLmV2ZXJ5KGVudHJ5ID0+IGJpbnMuc29tZShiaW4gPT4gYmluLmluY2x1ZGVzKGVudHJ5KSkpO1xufVxuXG4vLyBBY3Rpdml0eSB0cmVlIGlzIGEgbXVsdGlkaW1lbnNpb25hbCBhcnJheSwgd2hpbGUgYWN0aXZpdGllcyBpcyBhIDFEIGFycmF5LlxuLy8gLSBUaGUgZmlyc3QgZGltZW5zaW9uIG9mIHRoZSBhcnJheSBjb250YWlucyBhY3Rpdml0aWVzIHdpdGggc2FtZSBzZW5kZXI7XG4vLyAtIFRoZSBzZWNvbmQgZGltZW5zaW9uIG9mIHRoZSBhcnJheSBjb250YWlucyBhY3Rpdml0aWVzIHdpdGggc2FtZSBzdGF0dXMuXG5cbi8vIFtcbi8vICAgW1xuLy8gICAgIC8vIEJvdGggbWVzc2FnZXMgYXJlIGZyb20gYm90IGFuZCBpcyBzZW50IGFzIGEgYmF0Y2gsIHdlIHdpbGwgZ3JvdXAgdGhlbSBhcyBhbiBhcnJheS5cbi8vICAgICAnQm90OiBIZWxsbyEnXG4vLyAgICAgJ0JvdDogV2hhdCBjYW4gSSBoZWxwIHRvZGF5Pydcbi8vICAgXSxcbi8vICAgW1xuLy8gICAgICdVc2VyOiBXaGF0IGlzIHRoZSB3ZWF0aGVyPydcbi8vICAgXSxcbi8vICAgW1xuLy8gICAgICdCb3Q6IExldCBtZSBsb29rIGl0IHVwLi4uIGhvbGQgb24uJ1xuLy8gICBdLFxuLy8gICBbXG4vLyAgICAgLy8gVGhpcyBtZXNzYWdlIGlzIGluIGEgZGlmZmVyZW50IGdyb3VwIGJlY2F1c2UgaXQgaXMgbW9yZSB0aGFuIGEgZmV3IHNlY29uZHMgYXBhcnQgZnJvbSB0aGUgcHJldmlvdXMgbWVzc2FnZS5cbi8vICAgICAnQm90OiBIZXJlIGlzIHRoZSB3ZWF0aGVyIGZvcmVjYXN0Lidcbi8vICAgXVxuLy8gXVxuXG5mdW5jdGlvbiB1c2VBY3Rpdml0eVRyZWVXaXRoUmVuZGVyZXIoZW50cmllczogcmVhZG9ubHkgQWN0aXZpdHlXaXRoUmVuZGVyZXJbXSk6IFJlYWRvbmx5QWN0aXZpdHlUcmVlIHtcbiAgY29uc3QgZ3JvdXBBY3Rpdml0aWVzID0gdXNlR3JvdXBBY3Rpdml0aWVzKCk7XG4gIGNvbnN0IGVudHJ5TWFwOiBNYXA8V2ViQ2hhdEFjdGl2aXR5LCBBY3Rpdml0eVdpdGhSZW5kZXJlcj4gPSB1c2VNZW1vKFxuICAgICgpID0+IG5ldyBNYXAoZW50cmllcy5tYXAoZW50cnkgPT4gW2VudHJ5LmFjdGl2aXR5LCBlbnRyeV0pKSxcbiAgICBbZW50cmllc11cbiAgKTtcblxuICAvLyBXZSBiaW4gYWN0aXZpdGllcyBpbiAyIGRpZmZlcmVudCB3YXlzOlxuICAvLyAtIGBhY3Rpdml0aWVzQnlTZW5kZXJgIGlzIGEgMkQgYXJyYXkgY29udGFpbmluZyBhY3Rpdml0aWVzIHdpdGggc2FtZSBzZW5kZXJcbiAgLy8gLSBgYWN0aXZpdGllc0J5U3RhdHVzYCBpcyBhIDJEIGFycmF5IGNvbnRhaW5pbmcgYWN0aXZpdGllcyB3aXRoIHNhbWUgc3RhdHVzXG4gIC8vIEJvdGggYXJyYXlzIHNob3VsZCBjb250YWlucyBhbGwgYWN0aXZpdGllcy5cblxuICBjb25zdCB7IGVudHJpZXNCeVNlbmRlciwgZW50cmllc0J5U3RhdHVzIH0gPSB1c2VNZW1vPHtcbiAgICBlbnRyaWVzQnlTZW5kZXI6IHJlYWRvbmx5IChyZWFkb25seSBBY3Rpdml0eVdpdGhSZW5kZXJlcltdKVtdO1xuICAgIGVudHJpZXNCeVN0YXR1czogcmVhZG9ubHkgKHJlYWRvbmx5IEFjdGl2aXR5V2l0aFJlbmRlcmVyW10pW107XG4gIH0+KCgpID0+IHtcbiAgICBjb25zdCB2aXNpYmxlQWN0aXZpdGllcyA9IFsuLi5lbnRyeU1hcC5rZXlzKCldO1xuXG4gICAgY29uc3QgZ3JvdXBBY3Rpdml0aWVzUmVzdWx0ID0gZ3JvdXBBY3Rpdml0aWVzKHsgYWN0aXZpdGllczogdmlzaWJsZUFjdGl2aXRpZXMgfSk7XG5cbiAgICBjb25zdCBhY3Rpdml0aWVzQnlTZW5kZXIgPSBncm91cEFjdGl2aXRpZXNSZXN1bHQ/LnNlbmRlciB8fCBbXTtcbiAgICBjb25zdCBhY3Rpdml0aWVzQnlTdGF0dXMgPSBncm91cEFjdGl2aXRpZXNSZXN1bHQ/LnN0YXR1cyB8fCBbXTtcblxuICAgIGNvbnN0IFtlbnRyaWVzQnlTZW5kZXIsIGVudHJpZXNCeVN0YXR1c10gPSBbYWN0aXZpdGllc0J5U2VuZGVyLCBhY3Rpdml0aWVzQnlTdGF0dXNdLm1hcChiaW5zID0+XG4gICAgICBiaW5zLm1hcChiaW4gPT4gYmluLm1hcChhY3Rpdml0eSA9PiBlbnRyeU1hcC5nZXQoYWN0aXZpdHkpKSlcbiAgICApO1xuXG4gICAgaWYgKCF2YWxpZGF0ZUFsbEVudHJpZXNUYWdnZWQodmlzaWJsZUFjdGl2aXRpZXMsIGFjdGl2aXRpZXNCeVNlbmRlcikpIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgJ2JvdGZyYW1ld29yay13ZWJjaGF0OiBOb3QgZXZlcnkgYWN0aXZpdGllcyBhcmUgZ3JvdXBlZCBpbiB0aGUgXCJzZW5kZXJcIiBwcm9wZXJ0eS4gUGxlYXNlIGZpeCBcImdyb3VwQWN0aXZpdGllc01pZGRsZXdhcmVcIiBhbmQgZ3JvdXAgZXZlcnkgYWN0aXZpdGllcy4nXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICghdmFsaWRhdGVBbGxFbnRyaWVzVGFnZ2VkKHZpc2libGVBY3Rpdml0aWVzLCBhY3Rpdml0aWVzQnlTdGF0dXMpKSB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICdib3RmcmFtZXdvcmstd2ViY2hhdDogTm90IGV2ZXJ5IGFjdGl2aXRpZXMgYXJlIGdyb3VwZWQgaW4gdGhlIFwic3RhdHVzXCIgcHJvcGVydHkuIFBsZWFzZSBmaXggXCJncm91cEFjdGl2aXRpZXNNaWRkbGV3YXJlXCIgYW5kIGdyb3VwIGV2ZXJ5IGFjdGl2aXRpZXMuJ1xuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgZW50cmllc0J5U2VuZGVyLFxuICAgICAgZW50cmllc0J5U3RhdHVzXG4gICAgfTtcbiAgfSwgW2VudHJ5TWFwLCBncm91cEFjdGl2aXRpZXNdKTtcblxuICAvLyBDcmVhdGUgYSB0cmVlIG9mIGFjdGl2aXRpZXMgd2l0aCAyIGRpbWVuc2lvbnM6IHNlbmRlciwgZm9sbG93ZWQgYnkgc3RhdHVzLlxuXG4gIGNvbnN0IGFjdGl2aXR5VHJlZTogUmVhZG9ubHlBY3Rpdml0eVRyZWUgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBjb25zdCBlbnRyaWVzUGVuZGluZ0dyb3VwaW5nID0gWy4uLmVudHJpZXNdO1xuICAgIGNvbnN0IGFjdGl2aXR5VHJlZTogKHJlYWRvbmx5IChyZWFkb25seSBBY3Rpdml0eVdpdGhSZW5kZXJlcltdKVtdKVtdID0gW107XG5cbiAgICB3aGlsZSAoZW50cmllc1BlbmRpbmdHcm91cGluZy5sZW5ndGgpIHtcbiAgICAgIGxldCBmb3VuZDogYm9vbGVhbjtcbiAgICAgIGNvbnN0IGVudHJpZXNXaXRoU2FtZVNlbmRlciA9IGVudHJpZXNCeVNlbmRlci5maW5kKGJpbiA9PiBiaW4uaW5jbHVkZXMoZW50cmllc1BlbmRpbmdHcm91cGluZ1swXSkpO1xuICAgICAgY29uc3Qgc2VuZGVyVHJlZTogKHJlYWRvbmx5IEFjdGl2aXR5V2l0aFJlbmRlcmVyW10pW10gPSBbXTtcblxuICAgICAgZW50cmllc1dpdGhTYW1lU2VuZGVyPy5mb3JFYWNoKGVudHJ5ID0+IHtcbiAgICAgICAgY29uc3QgZW50cmllc1dpdGhTYW1lU3RhdHVzID0gZW50cmllc0J5U3RhdHVzLmZpbmQoYmluID0+IGJpbi5pbmNsdWRlcyhlbnRyeSkpO1xuXG4gICAgICAgIGNvbnN0IGVudHJpZXNXaXRoU2FtZVNlbmRlckFuZFN0YXR1cyA9IGludGVyc2VjdGlvbk9mPEFjdGl2aXR5V2l0aFJlbmRlcmVyPihcbiAgICAgICAgICBlbnRyaWVzUGVuZGluZ0dyb3VwaW5nLFxuICAgICAgICAgIGVudHJpZXNXaXRoU2FtZVNlbmRlcixcbiAgICAgICAgICBlbnRyaWVzV2l0aFNhbWVTdGF0dXNcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAoZW50cmllc1dpdGhTYW1lU2VuZGVyQW5kU3RhdHVzLmxlbmd0aCkge1xuICAgICAgICAgIHNlbmRlclRyZWUucHVzaChPYmplY3QuZnJlZXplKGVudHJpZXNXaXRoU2FtZVNlbmRlckFuZFN0YXR1cykpO1xuICAgICAgICAgIHJlbW92ZUlubGluZShlbnRyaWVzUGVuZGluZ0dyb3VwaW5nLCAuLi5lbnRyaWVzV2l0aFNhbWVTZW5kZXJBbmRTdGF0dXMpO1xuXG4gICAgICAgICAgZm91bmQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgLy8gSWYgdGhlIGVudHJ5IGlzIG5vdCBncm91cGVkIGJ5IHRoZSBtaWRkbGV3YXJlLCBqdXN0IHB1dCB0aGUgZW50cnkgaW4gaXRzIG93biBiaW4uXG4gICAgICBmb3VuZCB8fCBzZW5kZXJUcmVlLnB1c2goT2JqZWN0LmZyZWV6ZShbZW50cmllc1BlbmRpbmdHcm91cGluZy5zaGlmdCgpXSkpO1xuXG4gICAgICBhY3Rpdml0eVRyZWUucHVzaChPYmplY3QuZnJlZXplKHNlbmRlclRyZWUpKTtcbiAgICB9XG5cbiAgICAvLyBBc3NlcnRpb246IEFsbCBlbnRyaWVzIG11c3QgYmUgYXNzaWduZWQgdG8gdGhlIGFjdGl2aXR5VHJlZS5cbiAgICBpZiAoXG4gICAgICAhZW50cmllcy5ldmVyeShhY3Rpdml0eSA9PlxuICAgICAgICBhY3Rpdml0eVRyZWUuc29tZShhY3Rpdml0aWVzV2l0aFNhbWVTZW5kZXIgPT5cbiAgICAgICAgICBhY3Rpdml0aWVzV2l0aFNhbWVTZW5kZXIuc29tZShhY3Rpdml0aWVzV2l0aFNhbWVTZW5kZXJBbmRTdGF0dXMgPT5cbiAgICAgICAgICAgIGFjdGl2aXRpZXNXaXRoU2FtZVNlbmRlckFuZFN0YXR1cy5pbmNsdWRlcyhhY3Rpdml0eSlcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgIClcbiAgICApIHtcbiAgICAgIGNvbnNvbGUud2FybignYm90ZnJhbWV3b3JrLXdlYmNoYXQgaW50ZXJuYWw6IE5vdCBhbGwgdmlzaWJsZSBhY3Rpdml0aWVzIGFyZSBncm91cGVkIGluIHRoZSBhY3Rpdml0eVRyZWUuJywge1xuICAgICAgICBlbnRyaWVzLFxuICAgICAgICBhY3Rpdml0eVRyZWVcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBPYmplY3QuZnJlZXplKGFjdGl2aXR5VHJlZSk7XG4gIH0sIFtlbnRyaWVzQnlTZW5kZXIsIGVudHJpZXNCeVN0YXR1cywgZW50cmllc10pO1xuXG4gIHJldHVybiBhY3Rpdml0eVRyZWU7XG59XG5cbmV4cG9ydCB0eXBlIHsgQWN0aXZpdHlXaXRoUmVuZGVyZXIgfTtcblxuZXhwb3J0IGRlZmF1bHQgdXNlQWN0aXZpdHlUcmVlV2l0aFJlbmRlcmVyO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxJQUFBQSx1QkFBQSxHQUFBQyxPQUFBO0FBQ0EsSUFBQUMsTUFBQSxHQUFBRCxPQUFBO0FBR0EsSUFBQUUsZUFBQSxHQUFBQyxzQkFBQSxDQUFBSCxPQUFBO0FBQ0EsSUFBQUksYUFBQSxHQUFBRCxzQkFBQSxDQUFBSCxPQUFBO0FBQXVELFNBQUFHLHVCQUFBRSxHQUFBLFdBQUFBLEdBQUEsSUFBQUEsR0FBQSxDQUFBQyxVQUFBLEdBQUFELEdBQUEsS0FBQUUsT0FBQSxFQUFBRixHQUFBO0FBQUEsU0FBQUcsZUFBQUMsR0FBQSxFQUFBQyxDQUFBLFdBQUFDLGVBQUEsQ0FBQUYsR0FBQSxLQUFBRyxxQkFBQSxDQUFBSCxHQUFBLEVBQUFDLENBQUEsS0FBQUcsMkJBQUEsQ0FBQUosR0FBQSxFQUFBQyxDQUFBLEtBQUFJLGdCQUFBO0FBQUEsU0FBQUEsaUJB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