matrix-react-sdk
Version:
SDK for matrix.org using React
112 lines (109 loc) • 21.7 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.WidgetPip = void 0;
var _react = _interopRequireWildcard(require("react"));
var _matrix = require("matrix-js-sdk/src/matrix");
var _arrowLeft = _interopRequireDefault(require("@vector-im/compound-design-tokens/assets/web/icons/arrow-left"));
var _PersistentApp = _interopRequireDefault(require("../elements/PersistentApp"));
var _dispatcher = _interopRequireDefault(require("../../../dispatcher/dispatcher"));
var _actions = require("../../../dispatcher/actions");
var _useCall = require("../../../hooks/useCall");
var _WidgetStore = _interopRequireDefault(require("../../../stores/WidgetStore"));
var _WidgetLayoutStore = require("../../../stores/widgets/WidgetLayoutStore");
var _useEventEmitter = require("../../../hooks/useEventEmitter");
var _Toolbar = _interopRequireDefault(require("../../../accessibility/Toolbar"));
var _RovingTabIndex = require("../../../accessibility/RovingTabIndex");
var _hangup = require("../../../../res/img/element-icons/call/hangup.svg");
var _languageHandler = require("../../../languageHandler");
var _WidgetType = require("../../../widgets/WidgetType");
var _WidgetMessagingStore = require("../../../stores/widgets/WidgetMessagingStore");
var _WidgetUtils = _interopRequireDefault(require("../../../utils/WidgetUtils"));
var _ElementWidgetActions = require("../../../stores/widgets/ElementWidgetActions");
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.
*/
/**
* A picture-in-picture view for a widget. Additional controls are shown if the
* widget is a call of some sort.
*/
const WidgetPip = ({
widgetId,
room,
viewingRoom,
onStartMoving,
movePersistedElement
}) => {
const widget = (0, _react.useMemo)(() => _WidgetStore.default.instance.getApps(room.roomId).find(app => app.id === widgetId), [room, widgetId]);
const roomName = (0, _useEventEmitter.useTypedEventEmitterState)(room, _matrix.RoomEvent.Name, (0, _react.useCallback)(() => room.name, [room]));
const call = (0, _useCall.useCallForWidget)(widgetId, room.roomId);
const onBackClick = (0, _react.useCallback)(ev => {
ev.preventDefault();
ev.stopPropagation();
if (call !== null) {
_dispatcher.default.dispatch({
action: _actions.Action.ViewRoom,
room_id: room.roomId,
view_call: true,
metricsTrigger: "WebFloatingCallWindow"
});
} else if (viewingRoom) {
_WidgetLayoutStore.WidgetLayoutStore.instance.moveToContainer(room, widget, _WidgetLayoutStore.Container.Center);
} else {
_dispatcher.default.dispatch({
action: _actions.Action.ViewRoom,
room_id: room.roomId,
metricsTrigger: "WebFloatingCallWindow"
});
}
}, [room, call, widget, viewingRoom]);
const onLeaveClick = (0, _react.useCallback)(ev => {
ev.preventDefault();
ev.stopPropagation();
if (call !== null) {
call.disconnect().catch(e => console.error("Failed to leave call", e));
} else {
// Assumed to be a Jitsi widget
_WidgetMessagingStore.WidgetMessagingStore.instance.getMessagingForUid(_WidgetUtils.default.getWidgetUid(widget))?.transport.send(_ElementWidgetActions.ElementWidgetActions.HangupCall, {}).catch(e => console.error("Failed to leave Jitsi", e));
}
}, [call, widget]);
return /*#__PURE__*/_react.default.createElement("div", {
className: "mx_WidgetPip",
onMouseDown: onStartMoving,
onClick: onBackClick
}, /*#__PURE__*/_react.default.createElement(_PersistentApp.default, {
persistentWidgetId: widgetId,
persistentRoomId: room.roomId,
pointerEvents: "none",
movePersistedElement: movePersistedElement
}, /*#__PURE__*/_react.default.createElement("div", {
onMouseDown: onStartMoving,
className: "mx_WidgetPip_overlay"
}, /*#__PURE__*/_react.default.createElement(_Toolbar.default, {
className: "mx_WidgetPip_header"
}, /*#__PURE__*/_react.default.createElement(_RovingTabIndex.RovingAccessibleButton, {
onClick: onBackClick,
className: "mx_WidgetPip_backButton",
"aria-label": (0, _languageHandler._t)("action|back")
}, /*#__PURE__*/_react.default.createElement(_arrowLeft.default, {
className: "mx_Icon mx_Icon_16"
}), roomName)), (call !== null || _WidgetType.WidgetType.JITSI.matches(widget?.type)) && /*#__PURE__*/_react.default.createElement(_Toolbar.default, {
className: "mx_WidgetPip_footer"
}, /*#__PURE__*/_react.default.createElement(_RovingTabIndex.RovingAccessibleButton, {
onClick: onLeaveClick,
title: (0, _languageHandler._t)("action|leave"),
"aria-label": (0, _languageHandler._t)("action|leave"),
placement: "top"
}, /*#__PURE__*/_react.default.createElement(_hangup.Icon, {
className: "mx_Icon mx_Icon_24"
}))))));
};
exports.WidgetPip = WidgetPip;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfbWF0cml4IiwiX2Fycm93TGVmdCIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfUGVyc2lzdGVudEFwcCIsIl9kaXNwYXRjaGVyIiwiX2FjdGlvbnMiLCJfdXNlQ2FsbCIsIl9XaWRnZXRTdG9yZSIsIl9XaWRnZXRMYXlvdXRTdG9yZSIsIl91c2VFdmVudEVtaXR0ZXIiLCJfVG9vbGJhciIsIl9Sb3ZpbmdUYWJJbmRleCIsIl9oYW5ndXAiLCJfbGFuZ3VhZ2VIYW5kbGVyIiwiX1dpZGdldFR5cGUiLCJfV2lkZ2V0TWVzc2FnaW5nU3RvcmUiLCJfV2lkZ2V0VXRpbHMiLCJfRWxlbWVudFdpZGdldEFjdGlvbnMiLCJfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUiLCJlIiwiV2Vha01hcCIsInIiLCJ0IiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJoYXMiLCJnZXQiLCJuIiwiX19wcm90b19fIiwiYSIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwidSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImkiLCJzZXQiLCJXaWRnZXRQaXAiLCJ3aWRnZXRJZCIsInJvb20iLCJ2aWV3aW5nUm9vbSIsIm9uU3RhcnRNb3ZpbmciLCJtb3ZlUGVyc2lzdGVkRWxlbWVudCIsIndpZGdldCIsInVzZU1lbW8iLCJXaWRnZXRTdG9yZSIsImluc3RhbmNlIiwiZ2V0QXBwcyIsInJvb21JZCIsImZpbmQiLCJhcHAiLCJpZCIsInJvb21OYW1lIiwidXNlVHlwZWRFdmVudEVtaXR0ZXJTdGF0ZSIsIlJvb21FdmVudCIsIk5hbWUiLCJ1c2VDYWxsYmFjayIsIm5hbWUiLCJ1c2VDYWxsRm9yV2lkZ2V0Iiwib25CYWNrQ2xpY2siLCJldiIsInByZXZlbnREZWZhdWx0Iiwic3RvcFByb3BhZ2F0aW9uIiwiZGVmYXVsdERpc3BhdGNoZXIiLCJkaXNwYXRjaCIsImFjdGlvbiIsIkFjdGlvbiIsIlZpZXdSb29tIiwicm9vbV9pZCIsInZpZXdfY2FsbCIsIm1ldHJpY3NUcmlnZ2VyIiwiV2lkZ2V0TGF5b3V0U3RvcmUiLCJtb3ZlVG9Db250YWluZXIiLCJDb250YWluZXIiLCJDZW50ZXIiLCJvbkxlYXZlQ2xpY2siLCJkaXNjb25uZWN0IiwiY2F0Y2giLCJjb25zb2xlIiwiZXJyb3IiLCJXaWRnZXRNZXNzYWdpbmdTdG9yZSIsImdldE1lc3NhZ2luZ0ZvclVpZCIsIldpZGdldFV0aWxzIiwiZ2V0V2lkZ2V0VWlkIiwidHJhbnNwb3J0Iiwic2VuZCIsIkVsZW1lbnRXaWRnZXRBY3Rpb25zIiwiSGFuZ3VwQ2FsbCIsImNyZWF0ZUVsZW1lbnQiLCJjbGFzc05hbWUiLCJvbk1vdXNlRG93biIsIm9uQ2xpY2siLCJwZXJzaXN0ZW50V2lkZ2V0SWQiLCJwZXJzaXN0ZW50Um9vbUlkIiwicG9pbnRlckV2ZW50cyIsIlJvdmluZ0FjY2Vzc2libGVCdXR0b24iLCJfdCIsIldpZGdldFR5cGUiLCJKSVRTSSIsIm1hdGNoZXMiLCJ0eXBlIiwidGl0bGUiLCJwbGFjZW1lbnQiLCJJY29uIiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3ZpZXdzL3BpcHMvV2lkZ2V0UGlwLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuQ29weXJpZ2h0IDIwMjQgTmV3IFZlY3RvciBMdGQuXG5Db3B5cmlnaHQgMjAyMiBUaGUgTWF0cml4Lm9yZyBGb3VuZGF0aW9uIEMuSS5DLlxuXG5TUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjAtb25seSBPUiBHUEwtMy4wLW9ubHlcblBsZWFzZSBzZWUgTElDRU5TRSBmaWxlcyBpbiB0aGUgcmVwb3NpdG9yeSByb290IGZvciBmdWxsIGRldGFpbHMuXG4qL1xuXG5pbXBvcnQgUmVhY3QsIHsgRkMsIE11dGFibGVSZWZPYmplY3QsIHVzZUNhbGxiYWNrLCB1c2VNZW1vIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBSb29tLCBSb29tRXZlbnQgfSBmcm9tIFwibWF0cml4LWpzLXNkay9zcmMvbWF0cml4XCI7XG5pbXBvcnQgQmFja0ljb24gZnJvbSBcIkB2ZWN0b3ItaW0vY29tcG91bmQtZGVzaWduLXRva2Vucy9hc3NldHMvd2ViL2ljb25zL2Fycm93LWxlZnRcIjtcblxuaW1wb3J0IFBlcnNpc3RlbnRBcHAgZnJvbSBcIi4uL2VsZW1lbnRzL1BlcnNpc3RlbnRBcHBcIjtcbmltcG9ydCBkZWZhdWx0RGlzcGF0Y2hlciBmcm9tIFwiLi4vLi4vLi4vZGlzcGF0Y2hlci9kaXNwYXRjaGVyXCI7XG5pbXBvcnQgeyBWaWV3Um9vbVBheWxvYWQgfSBmcm9tIFwiLi4vLi4vLi4vZGlzcGF0Y2hlci9wYXlsb2Fkcy9WaWV3Um9vbVBheWxvYWRcIjtcbmltcG9ydCB7IEFjdGlvbiB9IGZyb20gXCIuLi8uLi8uLi9kaXNwYXRjaGVyL2FjdGlvbnNcIjtcbmltcG9ydCB7IHVzZUNhbGxGb3JXaWRnZXQgfSBmcm9tIFwiLi4vLi4vLi4vaG9va3MvdXNlQ2FsbFwiO1xuaW1wb3J0IFdpZGdldFN0b3JlIGZyb20gXCIuLi8uLi8uLi9zdG9yZXMvV2lkZ2V0U3RvcmVcIjtcbmltcG9ydCB7IENvbnRhaW5lciwgV2lkZ2V0TGF5b3V0U3RvcmUgfSBmcm9tIFwiLi4vLi4vLi4vc3RvcmVzL3dpZGdldHMvV2lkZ2V0TGF5b3V0U3RvcmVcIjtcbmltcG9ydCB7IHVzZVR5cGVkRXZlbnRFbWl0dGVyU3RhdGUgfSBmcm9tIFwiLi4vLi4vLi4vaG9va3MvdXNlRXZlbnRFbWl0dGVyXCI7XG5pbXBvcnQgVG9vbGJhciBmcm9tIFwiLi4vLi4vLi4vYWNjZXNzaWJpbGl0eS9Ub29sYmFyXCI7XG5pbXBvcnQgeyBSb3ZpbmdBY2Nlc3NpYmxlQnV0dG9uIH0gZnJvbSBcIi4uLy4uLy4uL2FjY2Vzc2liaWxpdHkvUm92aW5nVGFiSW5kZXhcIjtcbmltcG9ydCB7IEljb24gYXMgSGFuZ3VwSWNvbiB9IGZyb20gXCIuLi8uLi8uLi8uLi9yZXMvaW1nL2VsZW1lbnQtaWNvbnMvY2FsbC9oYW5ndXAuc3ZnXCI7XG5pbXBvcnQgeyBfdCB9IGZyb20gXCIuLi8uLi8uLi9sYW5ndWFnZUhhbmRsZXJcIjtcbmltcG9ydCB7IFdpZGdldFR5cGUgfSBmcm9tIFwiLi4vLi4vLi4vd2lkZ2V0cy9XaWRnZXRUeXBlXCI7XG5pbXBvcnQgeyBXaWRnZXRNZXNzYWdpbmdTdG9yZSB9IGZyb20gXCIuLi8uLi8uLi9zdG9yZXMvd2lkZ2V0cy9XaWRnZXRNZXNzYWdpbmdTdG9yZVwiO1xuaW1wb3J0IFdpZGdldFV0aWxzIGZyb20gXCIuLi8uLi8uLi91dGlscy9XaWRnZXRVdGlsc1wiO1xuaW1wb3J0IHsgRWxlbWVudFdpZGdldEFjdGlvbnMgfSBmcm9tIFwiLi4vLi4vLi4vc3RvcmVzL3dpZGdldHMvRWxlbWVudFdpZGdldEFjdGlvbnNcIjtcbmltcG9ydCB7IEJ1dHRvbkV2ZW50IH0gZnJvbSBcIi4uL2VsZW1lbnRzL0FjY2Vzc2libGVCdXR0b25cIjtcblxuaW50ZXJmYWNlIFByb3BzIHtcbiAgICB3aWRnZXRJZDogc3RyaW5nO1xuICAgIHJvb206IFJvb207XG4gICAgdmlld2luZ1Jvb206IGJvb2xlYW47XG4gICAgb25TdGFydE1vdmluZzogKGU6IFJlYWN0Lk1vdXNlRXZlbnQ8RWxlbWVudCwgTW91c2VFdmVudD4pID0+IHZvaWQ7XG4gICAgbW92ZVBlcnNpc3RlZEVsZW1lbnQ6IE11dGFibGVSZWZPYmplY3Q8KCgpID0+IHZvaWQpIHwgdW5kZWZpbmVkPjtcbn1cblxuLyoqXG4gKiBBIHBpY3R1cmUtaW4tcGljdHVyZSB2aWV3IGZvciBhIHdpZGdldC4gQWRkaXRpb25hbCBjb250cm9scyBhcmUgc2hvd24gaWYgdGhlXG4gKiB3aWRnZXQgaXMgYSBjYWxsIG9mIHNvbWUgc29ydC5cbiAqL1xuZXhwb3J0IGNvbnN0IFdpZGdldFBpcDogRkM8UHJvcHM+ID0gKHsgd2lkZ2V0SWQsIHJvb20sIHZpZXdpbmdSb29tLCBvblN0YXJ0TW92aW5nLCBtb3ZlUGVyc2lzdGVkRWxlbWVudCB9KSA9PiB7XG4gICAgY29uc3Qgd2lkZ2V0ID0gdXNlTWVtbyhcbiAgICAgICAgKCkgPT4gV2lkZ2V0U3RvcmUuaW5zdGFuY2UuZ2V0QXBwcyhyb29tLnJvb21JZCkuZmluZCgoYXBwKSA9PiBhcHAuaWQgPT09IHdpZGdldElkKSEsXG4gICAgICAgIFtyb29tLCB3aWRnZXRJZF0sXG4gICAgKTtcblxuICAgIGNvbnN0IHJvb21OYW1lID0gdXNlVHlwZWRFdmVudEVtaXR0ZXJTdGF0ZShcbiAgICAgICAgcm9vbSxcbiAgICAgICAgUm9vbUV2ZW50Lk5hbWUsXG4gICAgICAgIHVzZUNhbGxiYWNrKCgpID0+IHJvb20ubmFtZSwgW3Jvb21dKSxcbiAgICApO1xuXG4gICAgY29uc3QgY2FsbCA9IHVzZUNhbGxGb3JXaWRnZXQod2lkZ2V0SWQsIHJvb20ucm9vbUlkKTtcblxuICAgIGNvbnN0IG9uQmFja0NsaWNrID0gdXNlQ2FsbGJhY2soXG4gICAgICAgIChldjogQnV0dG9uRXZlbnQpID0+IHtcbiAgICAgICAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBldi5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgICAgICAgaWYgKGNhbGwgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBkZWZhdWx0RGlzcGF0Y2hlci5kaXNwYXRjaDxWaWV3Um9vbVBheWxvYWQ+KHtcbiAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiBBY3Rpb24uVmlld1Jvb20sXG4gICAgICAgICAgICAgICAgICAgIHJvb21faWQ6IHJvb20ucm9vbUlkLFxuICAgICAgICAgICAgICAgICAgICB2aWV3X2NhbGw6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIG1ldHJpY3NUcmlnZ2VyOiBcIldlYkZsb2F0aW5nQ2FsbFdpbmRvd1wiLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh2aWV3aW5nUm9vbSkge1xuICAgICAgICAgICAgICAgIFdpZGdldExheW91dFN0b3JlLmluc3RhbmNlLm1vdmVUb0NvbnRhaW5lcihyb29tLCB3aWRnZXQsIENvbnRhaW5lci5DZW50ZXIpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBkZWZhdWx0RGlzcGF0Y2hlci5kaXNwYXRjaDxWaWV3Um9vbVBheWxvYWQ+KHtcbiAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiBBY3Rpb24uVmlld1Jvb20sXG4gICAgICAgICAgICAgICAgICAgIHJvb21faWQ6IHJvb20ucm9vbUlkLFxuICAgICAgICAgICAgICAgICAgICBtZXRyaWNzVHJpZ2dlcjogXCJXZWJGbG9hdGluZ0NhbGxXaW5kb3dcIixcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgW3Jvb20sIGNhbGwsIHdpZGdldCwgdmlld2luZ1Jvb21dLFxuICAgICk7XG5cbiAgICBjb25zdCBvbkxlYXZlQ2xpY2sgPSB1c2VDYWxsYmFjayhcbiAgICAgICAgKGV2OiBCdXR0b25FdmVudCkgPT4ge1xuICAgICAgICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgICAgICAgICBpZiAoY2FsbCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNhbGwuZGlzY29ubmVjdCgpLmNhdGNoKChlKSA9PiBjb25zb2xlLmVycm9yKFwiRmFpbGVkIHRvIGxlYXZlIGNhbGxcIiwgZSkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBBc3N1bWVkIHRvIGJlIGEgSml0c2kgd2lkZ2V0XG4gICAgICAgICAgICAgICAgV2lkZ2V0TWVzc2FnaW5nU3RvcmUuaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgLmdldE1lc3NhZ2luZ0ZvclVpZChXaWRnZXRVdGlscy5nZXRXaWRnZXRVaWQod2lkZ2V0KSlcbiAgICAgICAgICAgICAgICAgICAgPy50cmFuc3BvcnQuc2VuZChFbGVtZW50V2lkZ2V0QWN0aW9ucy5IYW5ndXBDYWxsLCB7fSlcbiAgICAgICAgICAgICAgICAgICAgLmNhdGNoKChlKSA9PiBjb25zb2xlLmVycm9yKFwiRmFpbGVkIHRvIGxlYXZlIEppdHNpXCIsIGUpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgW2NhbGwsIHdpZGdldF0sXG4gICAgKTtcblxuICAgIHJldHVybiAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXhfV2lkZ2V0UGlwXCIgb25Nb3VzZURvd249e29uU3RhcnRNb3Zpbmd9IG9uQ2xpY2s9e29uQmFja0NsaWNrfT5cbiAgICAgICAgICAgIDxQZXJzaXN0ZW50QXBwXG4gICAgICAgICAgICAgICAgcGVyc2lzdGVudFdpZGdldElkPXt3aWRnZXRJZH1cbiAgICAgICAgICAgICAgICBwZXJzaXN0ZW50Um9vbUlkPXtyb29tLnJvb21JZH1cbiAgICAgICAgICAgICAgICBwb2ludGVyRXZlbnRzPVwibm9uZVwiXG4gICAgICAgICAgICAgICAgbW92ZVBlcnNpc3RlZEVsZW1lbnQ9e21vdmVQZXJzaXN0ZWRFbGVtZW50fVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxkaXYgb25Nb3VzZURvd249e29uU3RhcnRNb3Zpbmd9IGNsYXNzTmFtZT1cIm14X1dpZGdldFBpcF9vdmVybGF5XCI+XG4gICAgICAgICAgICAgICAgICAgIDxUb29sYmFyIGNsYXNzTmFtZT1cIm14X1dpZGdldFBpcF9oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxSb3ZpbmdBY2Nlc3NpYmxlQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17b25CYWNrQ2xpY2t9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwibXhfV2lkZ2V0UGlwX2JhY2tCdXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9e190KFwiYWN0aW9ufGJhY2tcIil9XG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJhY2tJY29uIGNsYXNzTmFtZT1cIm14X0ljb24gbXhfSWNvbl8xNlwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3Jvb21OYW1lfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9Sb3ZpbmdBY2Nlc3NpYmxlQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L1Rvb2xiYXI+XG4gICAgICAgICAgICAgICAgICAgIHsoY2FsbCAhPT0gbnVsbCB8fCBXaWRnZXRUeXBlLkpJVFNJLm1hdGNoZXMod2lkZ2V0Py50eXBlKSkgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgPFRvb2xiYXIgY2xhc3NOYW1lPVwibXhfV2lkZ2V0UGlwX2Zvb3RlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxSb3ZpbmdBY2Nlc3NpYmxlQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e29uTGVhdmVDbGlja31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU9e190KFwiYWN0aW9ufGxlYXZlXCIpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPXtfdChcImFjdGlvbnxsZWF2ZVwiKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwidG9wXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxIYW5ndXBJY29uIGNsYXNzTmFtZT1cIm14X0ljb24gbXhfSWNvbl8yNFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9Sb3ZpbmdBY2Nlc3NpYmxlQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9Ub29sYmFyPlxuICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9QZXJzaXN0ZW50QXBwPlxuICAgICAgICA8L2Rpdj5cbiAgICApO1xufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQVFBLElBQUFBLE1BQUEsR0FBQUMsdUJBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLE9BQUEsR0FBQUQsT0FBQTtBQUNBLElBQUFFLFVBQUEsR0FBQUMsc0JBQUEsQ0FBQUgsT0FBQTtBQUVBLElBQUFJLGNBQUEsR0FBQUQsc0JBQUEsQ0FBQUgsT0FBQTtBQUNBLElBQUFLLFdBQUEsR0FBQUYsc0JBQUEsQ0FBQUgsT0FBQTtBQUVBLElBQUFNLFFBQUEsR0FBQU4sT0FBQTtBQUNBLElBQUFPLFFBQUEsR0FBQVAsT0FBQTtBQUNBLElBQUFRLFlBQUEsR0FBQUwsc0JBQUEsQ0FBQUgsT0FBQTtBQUNBLElBQUFTLGtCQUFBLEdBQUFULE9BQUE7QUFDQSxJQUFBVSxnQkFBQSxHQUFBVixPQUFBO0FBQ0EsSUFBQVcsUUFBQSxHQUFBUixzQkFBQSxDQUFBSCxPQUFBO0FBQ0EsSUFBQVksZUFBQSxHQUFBWixPQUFBO0FBQ0EsSUFBQWEsT0FBQSxHQUFBYixPQUFBO0FBQ0EsSUFBQWMsZ0JBQUEsR0FBQWQsT0FBQTtBQUNBLElBQUFlLFdBQUEsR0FBQWYsT0FBQTtBQUNBLElBQUFnQixxQkFBQSxHQUFBaEIsT0FBQTtBQUNBLElBQUFpQixZQUFBLEdBQUFkLHNCQUFBLENBQUFILE9BQUE7QUFDQSxJQUFBa0IscUJBQUEsR0FBQWxCLE9BQUE7QUFBb0YsU0FBQW1CLHlCQUFBQyxDQUFBLDZCQUFBQyxPQUFBLG1CQUFBQyxDQUFBLE9BQUFELE9BQUEsSUFBQUUsQ0FBQSxPQUFBRixPQUFBLFlBQUFGLHdCQUFBLFlBQUFBLENBQUFDLENBQUEsV0FBQUEsQ0FBQSxHQUFBRyxDQUFBLEdBQUFELENBQUEsS0FBQUYsQ0FBQTtBQUFBLFNBQUFyQix3QkFBQXFCLENBQUEsRUFBQUUsQ0FBQSxTQUFBQSxDQUFB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QkFBZ0IsRUFBRXRELElBQUksQ0FBQ1MsTUFBTztJQUM5QjhDLGFBQWEsRUFBQyxNQUFNO0lBQ3BCcEQsb0JBQW9CLEVBQUVBO0VBQXFCLGdCQUUzQzlDLE1BQUEsQ0FBQTJCLE9BQUEsQ0FBQWlFLGFBQUE7SUFBS0UsV0FBVyxFQUFFakQsYUFBYztJQUFDZ0QsU0FBUyxFQUFDO0VBQXNCLGdCQUM3RDdGLE1BQUEsQ0FBQTJCLE9BQUEsQ0FBQWlFLGFBQUEsQ0FBQy9FLFFBQUEsQ0FBQWMsT0FBTztJQUFDa0UsU0FBUyxFQUFDO0VBQXFCLGdCQUNwQzdGLE1BQUEsQ0FBQTJCLE9BQUEsQ0FBQWlFLGFBQUEsQ0FBQzlFLGVBQUEsQ0FBQXFGLHNCQUFzQjtJQUNuQkosT0FBTyxFQUFFaEMsV0FBWTtJQUNyQjhCLFNBQVMsRUFBQyx5QkFBeUI7SUFDbkMsY0FBWSxJQUFBTyxtQkFBRSxFQUFDLGFBQWE7RUFBRSxnQkFFOUJwRyxNQUFBLENBQUEyQixPQUFBLENBQUFpRSxhQUFBLENBQUN4RixVQUFBLENBQUF1QixPQUFRO0lBQUNrRSxTQUFTLEVBQUM7RUFBb0IsQ0FBRSxDQUFDLEVBQzFDckMsUUFDbUIsQ0FDbkIsQ0FBQyxFQUNULENBQUNsQixJQUFJLEtBQUssSUFBSSxJQUFJK0Qsc0JBQVUsQ0FBQ0MsS0FBSyxDQUFDQyxPQUFPLENBQUN4RCxNQUFNLEVBQUV5RCxJQUFJLENBQUMsa0JBQ3JEeEcsTUFBQSxDQUFBMkIsT0FBQSxDQUFBaUUsYUFBQSxDQUFDL0UsUUFBQSxDQUFBYyxPQUFPO0lBQUNrRSxTQUFTLEVBQUM7RUFBcUIsZ0JBQ3BDN0YsTUFBQSxDQUFBMkIsT0FBQSxDQUFBaUUsYUFBQSxDQUFDOUUsZUFBQSxDQUFBcUYsc0JBQXNCO0lBQ25CSixPQUFPLEVBQUVoQixZQUFhO0lBQ3RCMEIsS0FBSyxFQUFFLElBQUFMLG1CQUFFLEVBQUMsY0FBYyxDQUFFO0lBQzFCLGNBQVksSUFBQUEsbUJBQUUsRUFBQyxjQUFjLENBQUU7SUFDL0JNLFNBQVMsRUFBQztFQUFLLGdCQUVmMUcsTUFBQSxDQUFBMkIsT0FBQSxDQUFBaUUsYUFBQSxDQUFDN0UsT0FBQSxDQUFBNEYsSUFBVTtJQUFDZCxTQUFTLEVBQUM7RUFBb0IsQ0FBRSxDQUN4QixDQUNuQixDQUVaLENBQ00sQ0FDZCxDQUFDO0FBRWQsQ0FBQztBQUFDZSxPQUFBLENBQUFuRSxTQUFBLEdBQUFBLFNBQUEiLCJpZ25vcmVMaXN0IjpbXX0=