UNPKG

matrix-react-sdk

Version:
104 lines (101 loc) 21 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _classnames = _interopRequireDefault(require("classnames")); var _react = _interopRequireWildcard(require("react")); var _useEventEmitter = require("../../../hooks/useEventEmitter"); var _languageHandler = require("../../../languageHandler"); var _OwnBeaconStore = require("../../../stores/OwnBeaconStore"); var _liveLocation = require("../../../../res/img/location/live-location.svg"); var _actions = require("../../../dispatcher/actions"); var _dispatcher = _interopRequireDefault(require("../../../dispatcher/dispatcher")); var _AccessibleButton = _interopRequireDefault(require("../elements/AccessibleButton")); function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); } function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; } /* Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only Please see LICENSE files in the repository root for full details. */ /** * Choose the most relevant beacon */ const chooseBestBeacon = (liveBeaconIds, updateErrorBeaconIds, locationErrorBeaconIds) => { // both lists are ordered by creation timestamp in store // so select latest beacon const beaconId = updateErrorBeaconIds?.[0] ?? locationErrorBeaconIds?.[0] ?? liveBeaconIds?.[0]; if (!beaconId) { return undefined; } const beacon = _OwnBeaconStore.OwnBeaconStore.instance.getBeaconById(beaconId); return beacon; }; const getLabel = (hasStoppingErrors, hasLocationErrors) => { if (hasStoppingErrors) { return (0, _languageHandler._t)("location_sharing|error_stopping_live_location"); } if (hasLocationErrors) { return (0, _languageHandler._t)("location_sharing|error_sharing_live_location"); } return (0, _languageHandler._t)("location_sharing|live_location_active"); }; const useLivenessMonitor = (liveBeaconIds, beacons) => { (0, _react.useEffect)(() => { // chromium sets the minimum timer interval to 1000ms // for inactive tabs // refresh beacon monitors when the tab becomes active again const onPageVisibilityChanged = () => { if (document.visibilityState === "visible") { liveBeaconIds.forEach(identifier => beacons.get(identifier)?.monitorLiveness()); } }; if (liveBeaconIds.length) { document.addEventListener("visibilitychange", onPageVisibilityChanged); } return () => { document.removeEventListener("visibilitychange", onPageVisibilityChanged); }; }, [liveBeaconIds, beacons]); }; const LeftPanelLiveShareWarning = ({ isMinimized }) => { const isMonitoringLiveLocation = (0, _useEventEmitter.useEventEmitterState)(_OwnBeaconStore.OwnBeaconStore.instance, _OwnBeaconStore.OwnBeaconStoreEvent.MonitoringLivePosition, () => _OwnBeaconStore.OwnBeaconStore.instance.isMonitoringLiveLocation); const beaconIdsWithLocationPublishError = (0, _useEventEmitter.useEventEmitterState)(_OwnBeaconStore.OwnBeaconStore.instance, _OwnBeaconStore.OwnBeaconStoreEvent.LocationPublishError, () => _OwnBeaconStore.OwnBeaconStore.instance.getLiveBeaconIdsWithLocationPublishError()); const beaconIdsWithStoppingError = (0, _useEventEmitter.useEventEmitterState)(_OwnBeaconStore.OwnBeaconStore.instance, _OwnBeaconStore.OwnBeaconStoreEvent.BeaconUpdateError, () => _OwnBeaconStore.OwnBeaconStore.instance.getLiveBeaconIds().filter(beaconId => _OwnBeaconStore.OwnBeaconStore.instance.beaconUpdateErrors.has(beaconId))); const liveBeaconIds = (0, _useEventEmitter.useEventEmitterState)(_OwnBeaconStore.OwnBeaconStore.instance, _OwnBeaconStore.OwnBeaconStoreEvent.LivenessChange, () => _OwnBeaconStore.OwnBeaconStore.instance.getLiveBeaconIds()); const hasLocationPublishErrors = !!beaconIdsWithLocationPublishError.length; const hasStoppingErrors = !!beaconIdsWithStoppingError.length; useLivenessMonitor(liveBeaconIds, _OwnBeaconStore.OwnBeaconStore.instance.beacons); if (!isMonitoringLiveLocation) { return null; } const relevantBeacon = chooseBestBeacon(liveBeaconIds, beaconIdsWithStoppingError, beaconIdsWithLocationPublishError); const onWarningClick = relevantBeacon ? _e => { _dispatcher.default.dispatch({ action: _actions.Action.ViewRoom, room_id: relevantBeacon.roomId, metricsTrigger: undefined, event_id: relevantBeacon.beaconInfoId, scroll_into_view: true, highlighted: true }); } : null; const label = getLabel(hasStoppingErrors, hasLocationPublishErrors); return /*#__PURE__*/_react.default.createElement(_AccessibleButton.default, { className: (0, _classnames.default)("mx_LeftPanelLiveShareWarning", { mx_LeftPanelLiveShareWarning__minimized: isMinimized, mx_LeftPanelLiveShareWarning__error: hasLocationPublishErrors || hasStoppingErrors }), title: isMinimized ? label : undefined, onClick: onWarningClick }, isMinimized ? /*#__PURE__*/_react.default.createElement(_liveLocation.Icon, { height: 10 }) : label); }; var _default = exports.default = LeftPanelLiveShareWarning; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY2xhc3NuYW1lcyIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX3JlYWN0IiwiX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQiLCJfdXNlRXZlbnRFbWl0dGVyIiwiX2xhbmd1YWdlSGFuZGxlciIsIl9Pd25CZWFjb25TdG9yZSIsIl9saXZlTG9jYXRpb24iLCJfYWN0aW9ucyIsIl9kaXNwYXRjaGVyIiwiX0FjY2Vzc2libGVCdXR0b24iLCJfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUiLCJlIiwiV2Vha01hcCIsInIiLCJ0IiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJoYXMiLCJnZXQiLCJuIiwiX19wcm90b19fIiwiYSIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwidSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImkiLCJzZXQiLCJjaG9vc2VCZXN0QmVhY29uIiwibGl2ZUJlYWNvbklkcyIsInVwZGF0ZUVycm9yQmVhY29uSWRzIiwibG9jYXRpb25FcnJvckJlYWNvbklkcyIsImJlYWNvbklkIiwidW5kZWZpbmVkIiwiYmVhY29uIiwiT3duQmVhY29uU3RvcmUiLCJpbnN0YW5jZSIsImdldEJlYWNvbkJ5SWQiLCJnZXRMYWJlbCIsImhhc1N0b3BwaW5nRXJyb3JzIiwiaGFzTG9jYXRpb25FcnJvcnMiLCJfdCIsInVzZUxpdmVuZXNzTW9uaXRvciIsImJlYWNvbnMiLCJ1c2VFZmZlY3QiLCJvblBhZ2VWaXNpYmlsaXR5Q2hhbmdlZCIsImRvY3VtZW50IiwidmlzaWJpbGl0eVN0YXRlIiwiZm9yRWFjaCIsImlkZW50aWZpZXIiLCJtb25pdG9yTGl2ZW5lc3MiLCJsZW5ndGgiLCJhZGRFdmVudExpc3RlbmVyIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsIkxlZnRQYW5lbExpdmVTaGFyZVdhcm5pbmciLCJpc01pbmltaXplZCIsImlzTW9uaXRvcmluZ0xpdmVMb2NhdGlvbiIsInVzZUV2ZW50RW1pdHRlclN0YXRlIiwiT3duQmVhY29uU3RvcmVFdmVudCIsIk1vbml0b3JpbmdMaXZlUG9zaXRpb24iLCJiZWFjb25JZHNXaXRoTG9jYXRpb25QdWJsaXNoRXJyb3IiLCJMb2NhdGlvblB1Ymxpc2hFcnJvciIsImdldExpdmVCZWFjb25JZHNXaXRoTG9jYXRpb25QdWJsaXNoRXJyb3IiLCJiZWFjb25JZHNXaXRoU3RvcHBpbmdFcnJvciIsIkJlYWNvblVwZGF0ZUVycm9yIiwiZ2V0TGl2ZUJlYWNvbklkcyIsImZpbHRlciIsImJlYWNvblVwZGF0ZUVycm9ycyIsIkxpdmVuZXNzQ2hhbmdlIiwiaGFzTG9jYXRpb25QdWJsaXNoRXJyb3JzIiwicmVsZXZhbnRCZWFjb24iLCJvbldhcm5pbmdDbGljayIsIl9lIiwiZGlzcGF0Y2hlciIsImRpc3BhdGNoIiwiYWN0aW9uIiwiQWN0aW9uIiwiVmlld1Jvb20iLCJyb29tX2lkIiwicm9vbUlkIiwibWV0cmljc1RyaWdnZXIiLCJldmVudF9pZCIsImJlYWNvbkluZm9JZCIsInNjcm9sbF9pbnRvX3ZpZXciLCJoaWdobGlnaHRlZCIsImxhYmVsIiwiY3JlYXRlRWxlbWVudCIsImNsYXNzTmFtZSIsImNsYXNzTmFtZXMiLCJteF9MZWZ0UGFuZWxMaXZlU2hhcmVXYXJuaW5nX19taW5pbWl6ZWQiLCJteF9MZWZ0UGFuZWxMaXZlU2hhcmVXYXJuaW5nX19lcnJvciIsInRpdGxlIiwib25DbGljayIsIkljb24iLCJoZWlnaHQiLCJfZGVmYXVsdCIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy92aWV3cy9iZWFjb24vTGVmdFBhbmVsTGl2ZVNoYXJlV2FybmluZy50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLypcbkNvcHlyaWdodCAyMDI0IE5ldyBWZWN0b3IgTHRkLlxuQ29weXJpZ2h0IDIwMjIgVGhlIE1hdHJpeC5vcmcgRm91bmRhdGlvbiBDLkkuQy5cblxuU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wLW9ubHkgT1IgR1BMLTMuMC1vbmx5XG5QbGVhc2Ugc2VlIExJQ0VOU0UgZmlsZXMgaW4gdGhlIHJlcG9zaXRvcnkgcm9vdCBmb3IgZnVsbCBkZXRhaWxzLlxuKi9cblxuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSBcImNsYXNzbmFtZXNcIjtcbmltcG9ydCBSZWFjdCwgeyB1c2VFZmZlY3QgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEJlYWNvbiwgQmVhY29uSWRlbnRpZmllciB9IGZyb20gXCJtYXRyaXgtanMtc2RrL3NyYy9tYXRyaXhcIjtcblxuaW1wb3J0IHsgdXNlRXZlbnRFbWl0dGVyU3RhdGUgfSBmcm9tIFwiLi4vLi4vLi4vaG9va3MvdXNlRXZlbnRFbWl0dGVyXCI7XG5pbXBvcnQgeyBfdCB9IGZyb20gXCIuLi8uLi8uLi9sYW5ndWFnZUhhbmRsZXJcIjtcbmltcG9ydCB7IE93bkJlYWNvblN0b3JlLCBPd25CZWFjb25TdG9yZUV2ZW50IH0gZnJvbSBcIi4uLy4uLy4uL3N0b3Jlcy9Pd25CZWFjb25TdG9yZVwiO1xuaW1wb3J0IHsgSWNvbiBhcyBMaXZlTG9jYXRpb25JY29uIH0gZnJvbSBcIi4uLy4uLy4uLy4uL3Jlcy9pbWcvbG9jYXRpb24vbGl2ZS1sb2NhdGlvbi5zdmdcIjtcbmltcG9ydCB7IFZpZXdSb29tUGF5bG9hZCB9IGZyb20gXCIuLi8uLi8uLi9kaXNwYXRjaGVyL3BheWxvYWRzL1ZpZXdSb29tUGF5bG9hZFwiO1xuaW1wb3J0IHsgQWN0aW9uIH0gZnJvbSBcIi4uLy4uLy4uL2Rpc3BhdGNoZXIvYWN0aW9uc1wiO1xuaW1wb3J0IGRpc3BhdGNoZXIgZnJvbSBcIi4uLy4uLy4uL2Rpc3BhdGNoZXIvZGlzcGF0Y2hlclwiO1xuaW1wb3J0IEFjY2Vzc2libGVCdXR0b24sIHsgQnV0dG9uRXZlbnQgfSBmcm9tIFwiLi4vZWxlbWVudHMvQWNjZXNzaWJsZUJ1dHRvblwiO1xuXG5pbnRlcmZhY2UgUHJvcHMge1xuICAgIGlzTWluaW1pemVkPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBDaG9vc2UgdGhlIG1vc3QgcmVsZXZhbnQgYmVhY29uXG4gKi9cbmNvbnN0IGNob29zZUJlc3RCZWFjb24gPSAoXG4gICAgbGl2ZUJlYWNvbklkczogQmVhY29uSWRlbnRpZmllcltdLFxuICAgIHVwZGF0ZUVycm9yQmVhY29uSWRzOiBCZWFjb25JZGVudGlmaWVyW10sXG4gICAgbG9jYXRpb25FcnJvckJlYWNvbklkczogQmVhY29uSWRlbnRpZmllcltdLFxuKTogQmVhY29uIHwgdW5kZWZpbmVkID0+IHtcbiAgICAvLyBib3RoIGxpc3RzIGFyZSBvcmRlcmVkIGJ5IGNyZWF0aW9uIHRpbWVzdGFtcCBpbiBzdG9yZVxuICAgIC8vIHNvIHNlbGVjdCBsYXRlc3QgYmVhY29uXG4gICAgY29uc3QgYmVhY29uSWQgPSB1cGRhdGVFcnJvckJlYWNvbklkcz8uWzBdID8/IGxvY2F0aW9uRXJyb3JCZWFjb25JZHM/LlswXSA/PyBsaXZlQmVhY29uSWRzPy5bMF07XG4gICAgaWYgKCFiZWFjb25JZCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCBiZWFjb24gPSBPd25CZWFjb25TdG9yZS5pbnN0YW5jZS5nZXRCZWFjb25CeUlkKGJlYWNvbklkKTtcblxuICAgIHJldHVybiBiZWFjb247XG59O1xuXG5jb25zdCBnZXRMYWJlbCA9IChoYXNTdG9wcGluZ0Vycm9yczogYm9vbGVhbiwgaGFzTG9jYXRpb25FcnJvcnM6IGJvb2xlYW4pOiBzdHJpbmcgPT4ge1xuICAgIGlmIChoYXNTdG9wcGluZ0Vycm9ycykge1xuICAgICAgICByZXR1cm4gX3QoXCJsb2NhdGlvbl9zaGFyaW5nfGVycm9yX3N0b3BwaW5nX2xpdmVfbG9jYXRpb25cIik7XG4gICAgfVxuICAgIGlmIChoYXNMb2NhdGlvbkVycm9ycykge1xuICAgICAgICByZXR1cm4gX3QoXCJsb2NhdGlvbl9zaGFyaW5nfGVycm9yX3NoYXJpbmdfbGl2ZV9sb2NhdGlvblwiKTtcbiAgICB9XG4gICAgcmV0dXJuIF90KFwibG9jYXRpb25fc2hhcmluZ3xsaXZlX2xvY2F0aW9uX2FjdGl2ZVwiKTtcbn07XG5cbmNvbnN0IHVzZUxpdmVuZXNzTW9uaXRvciA9IChsaXZlQmVhY29uSWRzOiBCZWFjb25JZGVudGlmaWVyW10sIGJlYWNvbnM6IE1hcDxCZWFjb25JZGVudGlmaWVyLCBCZWFjb24+KTogdm9pZCA9PiB7XG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgLy8gY2hyb21pdW0gc2V0cyB0aGUgbWluaW11bSB0aW1lciBpbnRlcnZhbCB0byAxMDAwbXNcbiAgICAgICAgLy8gZm9yIGluYWN0aXZlIHRhYnNcbiAgICAgICAgLy8gcmVmcmVzaCBiZWFjb24gbW9uaXRvcnMgd2hlbiB0aGUgdGFiIGJlY29tZXMgYWN0aXZlIGFnYWluXG4gICAgICAgIGNvbnN0IG9uUGFnZVZpc2liaWxpdHlDaGFuZ2VkID0gKCk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgaWYgKGRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZSA9PT0gXCJ2aXNpYmxlXCIpIHtcbiAgICAgICAgICAgICAgICBsaXZlQmVhY29uSWRzLmZvckVhY2goKGlkZW50aWZpZXIpID0+IGJlYWNvbnMuZ2V0KGlkZW50aWZpZXIpPy5tb25pdG9yTGl2ZW5lc3MoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGlmIChsaXZlQmVhY29uSWRzLmxlbmd0aCkge1xuICAgICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcInZpc2liaWxpdHljaGFuZ2VcIiwgb25QYWdlVmlzaWJpbGl0eUNoYW5nZWQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwidmlzaWJpbGl0eWNoYW5nZVwiLCBvblBhZ2VWaXNpYmlsaXR5Q2hhbmdlZCk7XG4gICAgICAgIH07XG4gICAgfSwgW2xpdmVCZWFjb25JZHMsIGJlYWNvbnNdKTtcbn07XG5cbmNvbnN0IExlZnRQYW5lbExpdmVTaGFyZVdhcm5pbmc6IFJlYWN0LkZDPFByb3BzPiA9ICh7IGlzTWluaW1pemVkIH0pID0+IHtcbiAgICBjb25zdCBpc01vbml0b3JpbmdMaXZlTG9jYXRpb24gPSB1c2VFdmVudEVtaXR0ZXJTdGF0ZShcbiAgICAgICAgT3duQmVhY29uU3RvcmUuaW5zdGFuY2UsXG4gICAgICAgIE93bkJlYWNvblN0b3JlRXZlbnQuTW9uaXRvcmluZ0xpdmVQb3NpdGlvbixcbiAgICAgICAgKCkgPT4gT3duQmVhY29uU3RvcmUuaW5zdGFuY2UuaXNNb25pdG9yaW5nTGl2ZUxvY2F0aW9uLFxuICAgICk7XG5cbiAgICBjb25zdCBiZWFjb25JZHNXaXRoTG9jYXRpb25QdWJsaXNoRXJyb3IgPSB1c2VFdmVudEVtaXR0ZXJTdGF0ZShcbiAgICAgICAgT3duQmVhY29uU3RvcmUuaW5zdGFuY2UsXG4gICAgICAgIE93bkJlYWNvblN0b3JlRXZlbnQuTG9jYXRpb25QdWJsaXNoRXJyb3IsXG4gICAgICAgICgpID0+IE93bkJlYWNvblN0b3JlLmluc3RhbmNlLmdldExpdmVCZWFjb25JZHNXaXRoTG9jYXRpb25QdWJsaXNoRXJyb3IoKSxcbiAgICApO1xuXG4gICAgY29uc3QgYmVhY29uSWRzV2l0aFN0b3BwaW5nRXJyb3IgPSB1c2VFdmVudEVtaXR0ZXJTdGF0ZShcbiAgICAgICAgT3duQmVhY29uU3RvcmUuaW5zdGFuY2UsXG4gICAgICAgIE93bkJlYWNvblN0b3JlRXZlbnQuQmVhY29uVXBkYXRlRXJyb3IsXG4gICAgICAgICgpID0+XG4gICAgICAgICAgICBPd25CZWFjb25TdG9yZS5pbnN0YW5jZVxuICAgICAgICAgICAgICAgIC5nZXRMaXZlQmVhY29uSWRzKClcbiAgICAgICAgICAgICAgICAuZmlsdGVyKChiZWFjb25JZCkgPT4gT3duQmVhY29uU3RvcmUuaW5zdGFuY2UuYmVhY29uVXBkYXRlRXJyb3JzLmhhcyhiZWFjb25JZCkpLFxuICAgICk7XG5cbiAgICBjb25zdCBsaXZlQmVhY29uSWRzID0gdXNlRXZlbnRFbWl0dGVyU3RhdGUoT3duQmVhY29uU3RvcmUuaW5zdGFuY2UsIE93bkJlYWNvblN0b3JlRXZlbnQuTGl2ZW5lc3NDaGFuZ2UsICgpID0+XG4gICAgICAgIE93bkJlYWNvblN0b3JlLmluc3RhbmNlLmdldExpdmVCZWFjb25JZHMoKSxcbiAgICApO1xuXG4gICAgY29uc3QgaGFzTG9jYXRpb25QdWJsaXNoRXJyb3JzID0gISFiZWFjb25JZHNXaXRoTG9jYXRpb25QdWJsaXNoRXJyb3IubGVuZ3RoO1xuICAgIGNvbnN0IGhhc1N0b3BwaW5nRXJyb3JzID0gISFiZWFjb25JZHNXaXRoU3RvcHBpbmdFcnJvci5sZW5ndGg7XG5cbiAgICB1c2VMaXZlbmVzc01vbml0b3IobGl2ZUJlYWNvbklkcywgT3duQmVhY29uU3RvcmUuaW5zdGFuY2UuYmVhY29ucyk7XG5cbiAgICBpZiAoIWlzTW9uaXRvcmluZ0xpdmVMb2NhdGlvbikge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCByZWxldmFudEJlYWNvbiA9IGNob29zZUJlc3RCZWFjb24oXG4gICAgICAgIGxpdmVCZWFjb25JZHMsXG4gICAgICAgIGJlYWNvbklkc1dpdGhTdG9wcGluZ0Vycm9yLFxuICAgICAgICBiZWFjb25JZHNXaXRoTG9jYXRpb25QdWJsaXNoRXJyb3IsXG4gICAgKTtcblxuICAgIGNvbnN0IG9uV2FybmluZ0NsaWNrID0gcmVsZXZhbnRCZWFjb25cbiAgICAgICAgPyAoX2U6IEJ1dHRvbkV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgIGRpc3BhdGNoZXIuZGlzcGF0Y2g8Vmlld1Jvb21QYXlsb2FkPih7XG4gICAgICAgICAgICAgICAgICBhY3Rpb246IEFjdGlvbi5WaWV3Um9vbSxcbiAgICAgICAgICAgICAgICAgIHJvb21faWQ6IHJlbGV2YW50QmVhY29uLnJvb21JZCxcbiAgICAgICAgICAgICAgICAgIG1ldHJpY3NUcmlnZ2VyOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICBldmVudF9pZDogcmVsZXZhbnRCZWFjb24uYmVhY29uSW5mb0lkLFxuICAgICAgICAgICAgICAgICAgc2Nyb2xsX2ludG9fdmlldzogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgIGhpZ2hsaWdodGVkOiB0cnVlLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIDogbnVsbDtcblxuICAgIGNvbnN0IGxhYmVsID0gZ2V0TGFiZWwoaGFzU3RvcHBpbmdFcnJvcnMsIGhhc0xvY2F0aW9uUHVibGlzaEVycm9ycyk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgICA8QWNjZXNzaWJsZUJ1dHRvblxuICAgICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVzKFwibXhfTGVmdFBhbmVsTGl2ZVNoYXJlV2FybmluZ1wiLCB7XG4gICAgICAgICAgICAgICAgbXhfTGVmdFBhbmVsTGl2ZVNoYXJlV2FybmluZ19fbWluaW1pemVkOiBpc01pbmltaXplZCxcbiAgICAgICAgICAgICAgICBteF9MZWZ0UGFuZWxMaXZlU2hhcmVXYXJuaW5nX19lcnJvcjogaGFzTG9jYXRpb25QdWJsaXNoRXJyb3JzIHx8IGhhc1N0b3BwaW5nRXJyb3JzLFxuICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICB0aXRsZT17aXNNaW5pbWl6ZWQgPyBsYWJlbCA6IHVuZGVmaW5lZH1cbiAgICAgICAgICAgIG9uQ2xpY2s9e29uV2FybmluZ0NsaWNrfVxuICAgICAgICA+XG4gICAgICAgICAgICB7aXNNaW5pbWl6ZWQgPyA8TGl2ZUxvY2F0aW9uSWNvbiBoZWlnaHQ9ezEwfSAvPiA6IGxhYmVsfVxuICAgICAgICA8L0FjY2Vzc2libGVCdXR0b24+XG4gICAgKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IExlZnRQYW5lbExpdmVTaGFyZVdhcm5pbmc7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFRQSxJQUFBQSxXQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxNQUFBLEdBQUFDLHVC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