UNPKG

matrix-react-sdk

Version:
178 lines (176 loc) 23.6 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties")); var _react = _interopRequireDefault(require("react")); var _lodash = require("lodash"); var _classnames = _interopRequireDefault(require("classnames")); var _matrix = require("matrix-js-sdk/src/matrix"); var _PlatformPeg = _interopRequireDefault(require("../../../PlatformPeg")); var _AccessibleButton = _interopRequireDefault(require("./AccessibleButton")); var _languageHandler = require("../../../languageHandler"); var _Media = require("../../../customisations/Media"); var _PosthogAnalytics = require("../../../PosthogAnalytics"); const _excluded = ["matrixClient", "loginType", "fragmentAfterLogin", "idp", "primary", "mini", "action", "flow"]; /* Copyright 2024 New Vector Ltd. Copyright 2020 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. */ const getIcon = brand => { switch (brand) { case _matrix.IdentityProviderBrand.Apple: return require(`../../../../res/img/element-icons/brands/apple.svg`).default; case _matrix.IdentityProviderBrand.Facebook: return require(`../../../../res/img/element-icons/brands/facebook.svg`).default; case _matrix.IdentityProviderBrand.Github: return require(`../../../../res/img/element-icons/brands/github.svg`).default; case _matrix.IdentityProviderBrand.Gitlab: return require(`../../../../res/img/element-icons/brands/gitlab.svg`).default; case _matrix.IdentityProviderBrand.Google: return require(`../../../../res/img/element-icons/brands/google.svg`).default; case _matrix.IdentityProviderBrand.Twitter: return require(`../../../../res/img/element-icons/brands/twitter.svg`).default; default: return null; } }; const getAuthenticationType = brand => { switch (brand) { case _matrix.IdentityProviderBrand.Apple: return "Apple"; case _matrix.IdentityProviderBrand.Facebook: return "Facebook"; case _matrix.IdentityProviderBrand.Github: return "GitHub"; case _matrix.IdentityProviderBrand.Gitlab: return "GitLab"; case _matrix.IdentityProviderBrand.Google: return "Google"; // Not supported on the analytics SDK at the moment. // case IdentityProviderBrand.Twitter: // return "Twitter"; default: return "SSO"; } }; const SSOButton = _ref => { let { matrixClient, loginType, fragmentAfterLogin, idp, primary, mini, action, flow } = _ref, props = (0, _objectWithoutProperties2.default)(_ref, _excluded); let label; if (idp) { label = (0, _languageHandler._t)("auth|continue_with_idp", { provider: idp.name }); } else if (_matrix.DELEGATED_OIDC_COMPATIBILITY.findIn(flow)) { label = (0, _languageHandler._t)("action|continue"); } else { label = (0, _languageHandler._t)("auth|sign_in_with_sso"); } const onClick = () => { const authenticationType = getAuthenticationType(idp?.brand ?? ""); _PosthogAnalytics.PosthogAnalytics.instance.setAuthenticationType(authenticationType); _PlatformPeg.default.get()?.startSingleSignOn(matrixClient, loginType, fragmentAfterLogin, idp?.id, action); }; let icon; let brandClass; const brandIcon = idp?.brand ? getIcon(idp.brand) : null; if (idp?.brand && brandIcon) { const brandName = idp.brand.split(".").pop(); brandClass = `mx_SSOButton_brand_${brandName}`; icon = /*#__PURE__*/_react.default.createElement("img", { src: brandIcon, height: "24", width: "24", alt: brandName }); } else if (typeof idp?.icon === "string" && idp.icon.startsWith("mxc://")) { const src = (0, _Media.mediaFromMxc)(idp.icon, matrixClient).getSquareThumbnailHttp(24) ?? undefined; icon = /*#__PURE__*/_react.default.createElement("img", { src: src, height: "24", width: "24", alt: idp.name }); } const brandPart = brandClass ? { [brandClass]: brandClass } : undefined; const classes = (0, _classnames.default)("mx_SSOButton", { mx_SSOButton_mini: mini, mx_SSOButton_default: !idp, mx_SSOButton_primary: primary }, brandPart); if (mini) { // TODO fallback icon return /*#__PURE__*/_react.default.createElement(_AccessibleButton.default, (0, _extends2.default)({}, props, { title: label, className: classes, onClick: onClick }), icon); } return /*#__PURE__*/_react.default.createElement(_AccessibleButton.default, (0, _extends2.default)({}, props, { className: classes, onClick: onClick }), icon, label); }; const MAX_PER_ROW = 6; const SSOButtons = ({ matrixClient, flow, loginType, fragmentAfterLogin, primary, action, disabled }) => { const providers = flow.identity_providers || []; if (providers.length < 2) { return /*#__PURE__*/_react.default.createElement("div", { className: "mx_SSOButtons" }, /*#__PURE__*/_react.default.createElement(SSOButton, { matrixClient: matrixClient, loginType: loginType, fragmentAfterLogin: fragmentAfterLogin, idp: providers[0], primary: primary, action: action, flow: flow, disabled: disabled })); } const rows = Math.ceil(providers.length / MAX_PER_ROW); const size = Math.ceil(providers.length / rows); return /*#__PURE__*/_react.default.createElement("div", { className: "mx_SSOButtons" }, (0, _lodash.chunk)(providers, size).map(chunk => /*#__PURE__*/_react.default.createElement("div", { key: chunk[0].id, className: "mx_SSOButtons_row" }, chunk.map(idp => /*#__PURE__*/_react.default.createElement(SSOButton, { key: idp.id, matrixClient: matrixClient, loginType: loginType, fragmentAfterLogin: fragmentAfterLogin, idp: idp, mini: true, primary: primary, action: action, flow: flow }))))); }; var _default = exports.default = SSOButtons; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9sb2Rhc2giLCJfY2xhc3NuYW1lcyIsIl9tYXRyaXgiLCJfUGxhdGZvcm1QZWciLCJfQWNjZXNzaWJsZUJ1dHRvbiIsIl9sYW5ndWFnZUhhbmRsZXIiLCJfTWVkaWEiLCJfUG9zdGhvZ0FuYWx5dGljcyIsIl9leGNsdWRlZCIsImdldEljb24iLCJicmFuZCIsIklkZW50aXR5UHJvdmlkZXJCcmFuZCIsIkFwcGxlIiwiZGVmYXVsdCIsIkZhY2Vib29rIiwiR2l0aHViIiwiR2l0bGFiIiwiR29vZ2xlIiwiVHdpdHRlciIsImdldEF1dGhlbnRpY2F0aW9uVHlwZSIsIlNTT0J1dHRvbiIsIl9yZWYiLCJtYXRyaXhDbGllbnQiLCJsb2dpblR5cGUiLCJmcmFnbWVudEFmdGVyTG9naW4iLCJpZHAiLCJwcmltYXJ5IiwibWluaSIsImFjdGlvbiIsImZsb3ciLCJwcm9wcyIsIl9vYmplY3RXaXRob3V0UHJvcGVydGllczIiLCJsYWJlbCIsIl90IiwicHJvdmlkZXIiLCJuYW1lIiwiREVMRUdBVEVEX09JRENfQ09NUEFUSUJJTElUWSIsImZpbmRJbiIsIm9uQ2xpY2siLCJhdXRoZW50aWNhdGlvblR5cGUiLCJQb3N0aG9nQW5hbHl0aWNzIiwiaW5zdGFuY2UiLCJzZXRBdXRoZW50aWNhdGlvblR5cGUiLCJQbGF0Zm9ybVBlZyIsImdldCIsInN0YXJ0U2luZ2xlU2lnbk9uIiwiaWQiLCJpY29uIiwiYnJhbmRDbGFzcyIsImJyYW5kSWNvbiIsImJyYW5kTmFtZSIsInNwbGl0IiwicG9wIiwiY3JlYXRlRWxlbWVudCIsInNyYyIsImhlaWdodCIsIndpZHRoIiwiYWx0Iiwic3RhcnRzV2l0aCIsIm1lZGlhRnJvbU14YyIsImdldFNxdWFyZVRodW1ibmFpbEh0dHAiLCJ1bmRlZmluZWQiLCJicmFuZFBhcnQiLCJjbGFzc2VzIiwiY2xhc3NOYW1lcyIsIm14X1NTT0J1dHRvbl9taW5pIiwibXhfU1NPQnV0dG9uX2RlZmF1bHQiLCJteF9TU09CdXR0b25fcHJpbWFyeSIsIl9leHRlbmRzMiIsInRpdGxlIiwiY2xhc3NOYW1lIiwiTUFYX1BFUl9ST1ciLCJTU09CdXR0b25zIiwiZGlzYWJsZWQiLCJwcm92aWRlcnMiLCJpZGVudGl0eV9wcm92aWRlcnMiLCJsZW5ndGgiLCJyb3dzIiwiTWF0aCIsImNlaWwiLCJzaXplIiwiY2h1bmsiLCJtYXAiLCJrZXkiLCJfZGVmYXVsdCIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy92aWV3cy9lbGVtZW50cy9TU09CdXR0b25zLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuQ29weXJpZ2h0IDIwMjQgTmV3IFZlY3RvciBMdGQuXG5Db3B5cmlnaHQgMjAyMCBUaGUgTWF0cml4Lm9yZyBGb3VuZGF0aW9uIEMuSS5DLlxuXG5TUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjAtb25seSBPUiBHUEwtMy4wLW9ubHlcblBsZWFzZSBzZWUgTElDRU5TRSBmaWxlcyBpbiB0aGUgcmVwb3NpdG9yeSByb290IGZvciBmdWxsIGRldGFpbHMuXG4qL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBjaHVuayB9IGZyb20gXCJsb2Rhc2hcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gXCJjbGFzc25hbWVzXCI7XG5pbXBvcnQge1xuICAgIE1hdHJpeENsaWVudCxcbiAgICBJZGVudGl0eVByb3ZpZGVyQnJhbmQsXG4gICAgU1NPRmxvdyxcbiAgICBTU09BY3Rpb24sXG4gICAgSUlkZW50aXR5UHJvdmlkZXIsXG4gICAgREVMRUdBVEVEX09JRENfQ09NUEFUSUJJTElUWSxcbn0gZnJvbSBcIm1hdHJpeC1qcy1zZGsvc3JjL21hdHJpeFwiO1xuaW1wb3J0IHsgU2lnbnVwIH0gZnJvbSBcIkBtYXRyaXgtb3JnL2FuYWx5dGljcy1ldmVudHMvdHlwZXMvdHlwZXNjcmlwdC9TaWdudXBcIjtcblxuaW1wb3J0IFBsYXRmb3JtUGVnIGZyb20gXCIuLi8uLi8uLi9QbGF0Zm9ybVBlZ1wiO1xuaW1wb3J0IEFjY2Vzc2libGVCdXR0b24gZnJvbSBcIi4vQWNjZXNzaWJsZUJ1dHRvblwiO1xuaW1wb3J0IHsgX3QgfSBmcm9tIFwiLi4vLi4vLi4vbGFuZ3VhZ2VIYW5kbGVyXCI7XG5pbXBvcnQgeyBtZWRpYUZyb21NeGMgfSBmcm9tIFwiLi4vLi4vLi4vY3VzdG9taXNhdGlvbnMvTWVkaWFcIjtcbmltcG9ydCB7IFBvc3Rob2dBbmFseXRpY3MgfSBmcm9tIFwiLi4vLi4vLi4vUG9zdGhvZ0FuYWx5dGljc1wiO1xuXG5pbnRlcmZhY2UgSVNTT0J1dHRvblByb3BzIGV4dGVuZHMgSVByb3BzIHtcbiAgICBpZHA/OiBJSWRlbnRpdHlQcm92aWRlcjtcbiAgICBtaW5pPzogYm9vbGVhbjtcbiAgICBhY3Rpb24/OiBTU09BY3Rpb247XG59XG5cbmNvbnN0IGdldEljb24gPSAoYnJhbmQ6IElkZW50aXR5UHJvdmlkZXJCcmFuZCB8IHN0cmluZyk6IHN0cmluZyB8IG51bGwgPT4ge1xuICAgIHN3aXRjaCAoYnJhbmQpIHtcbiAgICAgICAgY2FzZSBJZGVudGl0eVByb3ZpZGVyQnJhbmQuQXBwbGU6XG4gICAgICAgICAgICByZXR1cm4gcmVxdWlyZShgLi4vLi4vLi4vLi4vcmVzL2ltZy9lbGVtZW50LWljb25zL2JyYW5kcy9hcHBsZS5zdmdgKS5kZWZhdWx0O1xuICAgICAgICBjYXNlIElkZW50aXR5UHJvdmlkZXJCcmFuZC5GYWNlYm9vazpcbiAgICAgICAgICAgIHJldHVybiByZXF1aXJlKGAuLi8uLi8uLi8uLi9yZXMvaW1nL2VsZW1lbnQtaWNvbnMvYnJhbmRzL2ZhY2Vib29rLnN2Z2ApLmRlZmF1bHQ7XG4gICAgICAgIGNhc2UgSWRlbnRpdHlQcm92aWRlckJyYW5kLkdpdGh1YjpcbiAgICAgICAgICAgIHJldHVybiByZXF1aXJlKGAuLi8uLi8uLi8uLi9yZXMvaW1nL2VsZW1lbnQtaWNvbnMvYnJhbmRzL2dpdGh1Yi5zdmdgKS5kZWZhdWx0O1xuICAgICAgICBjYXNlIElkZW50aXR5UHJvdmlkZXJCcmFuZC5HaXRsYWI6XG4gICAgICAgICAgICByZXR1cm4gcmVxdWlyZShgLi4vLi4vLi4vLi4vcmVzL2ltZy9lbGVtZW50LWljb25zL2JyYW5kcy9naXRsYWIuc3ZnYCkuZGVmYXVsdDtcbiAgICAgICAgY2FzZSBJZGVudGl0eVByb3ZpZGVyQnJhbmQuR29vZ2xlOlxuICAgICAgICAgICAgcmV0dXJuIHJlcXVpcmUoYC4uLy4uLy4uLy4uL3Jlcy9pbWcvZWxlbWVudC1pY29ucy9icmFuZHMvZ29vZ2xlLnN2Z2ApLmRlZmF1bHQ7XG4gICAgICAgIGNhc2UgSWRlbnRpdHlQcm92aWRlckJyYW5kLlR3aXR0ZXI6XG4gICAgICAgICAgICByZXR1cm4gcmVxdWlyZShgLi4vLi4vLi4vLi4vcmVzL2ltZy9lbGVtZW50LWljb25zL2JyYW5kcy90d2l0dGVyLnN2Z2ApLmRlZmF1bHQ7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG59O1xuXG5jb25zdCBnZXRBdXRoZW50aWNhdGlvblR5cGUgPSAoYnJhbmQ6IElkZW50aXR5UHJvdmlkZXJCcmFuZCB8IHN0cmluZyk6IFNpZ251cFtcImF1dGhlbnRpY2F0aW9uVHlwZVwiXSA9PiB7XG4gICAgc3dpdGNoIChicmFuZCkge1xuICAgICAgICBjYXNlIElkZW50aXR5UHJvdmlkZXJCcmFuZC5BcHBsZTpcbiAgICAgICAgICAgIHJldHVybiBcIkFwcGxlXCI7XG4gICAgICAgIGNhc2UgSWRlbnRpdHlQcm92aWRlckJyYW5kLkZhY2Vib29rOlxuICAgICAgICAgICAgcmV0dXJuIFwiRmFjZWJvb2tcIjtcbiAgICAgICAgY2FzZSBJZGVudGl0eVByb3ZpZGVyQnJhbmQuR2l0aHViOlxuICAgICAgICAgICAgcmV0dXJuIFwiR2l0SHViXCI7XG4gICAgICAgIGNhc2UgSWRlbnRpdHlQcm92aWRlckJyYW5kLkdpdGxhYjpcbiAgICAgICAgICAgIHJldHVybiBcIkdpdExhYlwiO1xuICAgICAgICBjYXNlIElkZW50aXR5UHJvdmlkZXJCcmFuZC5Hb29nbGU6XG4gICAgICAgICAgICByZXR1cm4gXCJHb29nbGVcIjtcbiAgICAgICAgLy8gTm90IHN1cHBvcnRlZCBvbiB0aGUgYW5hbHl0aWNzIFNESyBhdCB0aGUgbW9tZW50LlxuICAgICAgICAvLyBjYXNlIElkZW50aXR5UHJvdmlkZXJCcmFuZC5Ud2l0dGVyOlxuICAgICAgICAvLyAgICAgcmV0dXJuIFwiVHdpdHRlclwiO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIFwiU1NPXCI7XG4gICAgfVxufTtcblxuY29uc3QgU1NPQnV0dG9uOiBSZWFjdC5GQzxJU1NPQnV0dG9uUHJvcHM+ID0gKHtcbiAgICBtYXRyaXhDbGllbnQsXG4gICAgbG9naW5UeXBlLFxuICAgIGZyYWdtZW50QWZ0ZXJMb2dpbixcbiAgICBpZHAsXG4gICAgcHJpbWFyeSxcbiAgICBtaW5pLFxuICAgIGFjdGlvbixcbiAgICBmbG93LFxuICAgIC4uLnByb3BzXG59KSA9PiB7XG4gICAgbGV0IGxhYmVsOiBzdHJpbmc7XG4gICAgaWYgKGlkcCkge1xuICAgICAgICBsYWJlbCA9IF90KFwiYXV0aHxjb250aW51ZV93aXRoX2lkcFwiLCB7IHByb3ZpZGVyOiBpZHAubmFtZSB9KTtcbiAgICB9IGVsc2UgaWYgKERFTEVHQVRFRF9PSURDX0NPTVBBVElCSUxJVFkuZmluZEluPGJvb2xlYW4+KGZsb3cpKSB7XG4gICAgICAgIGxhYmVsID0gX3QoXCJhY3Rpb258Y29udGludWVcIik7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgbGFiZWwgPSBfdChcImF1dGh8c2lnbl9pbl93aXRoX3Nzb1wiKTtcbiAgICB9XG5cbiAgICBjb25zdCBvbkNsaWNrID0gKCk6IHZvaWQgPT4ge1xuICAgICAgICBjb25zdCBhdXRoZW50aWNhdGlvblR5cGUgPSBnZXRBdXRoZW50aWNhdGlvblR5cGUoaWRwPy5icmFuZCA/PyBcIlwiKTtcbiAgICAgICAgUG9zdGhvZ0FuYWx5dGljcy5pbnN0YW5jZS5zZXRBdXRoZW50aWNhdGlvblR5cGUoYXV0aGVudGljYXRpb25UeXBlKTtcbiAgICAgICAgUGxhdGZvcm1QZWcuZ2V0KCk/LnN0YXJ0U2luZ2xlU2lnbk9uKG1hdHJpeENsaWVudCwgbG9naW5UeXBlLCBmcmFnbWVudEFmdGVyTG9naW4sIGlkcD8uaWQsIGFjdGlvbik7XG4gICAgfTtcblxuICAgIGxldCBpY29uOiBKU1guRWxlbWVudCB8IHVuZGVmaW5lZDtcbiAgICBsZXQgYnJhbmRDbGFzczogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGNvbnN0IGJyYW5kSWNvbiA9IGlkcD8uYnJhbmQgPyBnZXRJY29uKGlkcC5icmFuZCkgOiBudWxsO1xuICAgIGlmIChpZHA/LmJyYW5kICYmIGJyYW5kSWNvbikge1xuICAgICAgICBjb25zdCBicmFuZE5hbWUgPSBpZHAuYnJhbmQuc3BsaXQoXCIuXCIpLnBvcCgpO1xuICAgICAgICBicmFuZENsYXNzID0gYG14X1NTT0J1dHRvbl9icmFuZF8ke2JyYW5kTmFtZX1gO1xuICAgICAgICBpY29uID0gPGltZyBzcmM9e2JyYW5kSWNvbn0gaGVpZ2h0PVwiMjRcIiB3aWR0aD1cIjI0XCIgYWx0PXticmFuZE5hbWV9IC8+O1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGlkcD8uaWNvbiA9PT0gXCJzdHJpbmdcIiAmJiBpZHAuaWNvbi5zdGFydHNXaXRoKFwibXhjOi8vXCIpKSB7XG4gICAgICAgIGNvbnN0IHNyYyA9IG1lZGlhRnJvbU14YyhpZHAuaWNvbiwgbWF0cml4Q2xpZW50KS5nZXRTcXVhcmVUaHVtYm5haWxIdHRwKDI0KSA/PyB1bmRlZmluZWQ7XG4gICAgICAgIGljb24gPSA8aW1nIHNyYz17c3JjfSBoZWlnaHQ9XCIyNFwiIHdpZHRoPVwiMjRcIiBhbHQ9e2lkcC5uYW1lfSAvPjtcbiAgICB9XG5cbiAgICBjb25zdCBicmFuZFBhcnQgPSBicmFuZENsYXNzID8geyBbYnJhbmRDbGFzc106IGJyYW5kQ2xhc3MgfSA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBjbGFzc2VzID0gY2xhc3NOYW1lcyhcbiAgICAgICAgXCJteF9TU09CdXR0b25cIixcbiAgICAgICAge1xuICAgICAgICAgICAgbXhfU1NPQnV0dG9uX21pbmk6IG1pbmksXG4gICAgICAgICAgICBteF9TU09CdXR0b25fZGVmYXVsdDogIWlkcCxcbiAgICAgICAgICAgIG14X1NTT0J1dHRvbl9wcmltYXJ5OiBwcmltYXJ5LFxuICAgICAgICB9LFxuICAgICAgICBicmFuZFBhcnQsXG4gICAgKTtcblxuICAgIGlmIChtaW5pKSB7XG4gICAgICAgIC8vIFRPRE8gZmFsbGJhY2sgaWNvblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPEFjY2Vzc2libGVCdXR0b24gey4uLnByb3BzfSB0aXRsZT17bGFiZWx9IGNsYXNzTmFtZT17Y2xhc3Nlc30gb25DbGljaz17b25DbGlja30+XG4gICAgICAgICAgICAgICAge2ljb259XG4gICAgICAgICAgICA8L0FjY2Vzc2libGVCdXR0b24+XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgICAgPEFjY2Vzc2libGVCdXR0b24gey4uLnByb3BzfSBjbGFzc05hbWU9e2NsYXNzZXN9IG9uQ2xpY2s9e29uQ2xpY2t9PlxuICAgICAgICAgICAge2ljb259XG4gICAgICAgICAgICB7bGFiZWx9XG4gICAgICAgIDwvQWNjZXNzaWJsZUJ1dHRvbj5cbiAgICApO1xufTtcblxuaW50ZXJmYWNlIElQcm9wcyB7XG4gICAgbWF0cml4Q2xpZW50OiBNYXRyaXhDbGllbnQ7XG4gICAgZmxvdzogU1NPRmxvdztcbiAgICBsb2dpblR5cGU6IFwic3NvXCIgfCBcImNhc1wiO1xuICAgIGZyYWdtZW50QWZ0ZXJMb2dpbj86IHN0cmluZztcbiAgICBwcmltYXJ5PzogYm9vbGVhbjtcbiAgICBhY3Rpb24/OiBTU09BY3Rpb247XG4gICAgZGlzYWJsZWQ/OiBib29sZWFuO1xufVxuXG5jb25zdCBNQVhfUEVSX1JPVyA9IDY7XG5cbmNvbnN0IFNTT0J1dHRvbnM6IFJlYWN0LkZDPElQcm9wcz4gPSAoe1xuICAgIG1hdHJpeENsaWVudCxcbiAgICBmbG93LFxuICAgIGxvZ2luVHlwZSxcbiAgICBmcmFnbWVudEFmdGVyTG9naW4sXG4gICAgcHJpbWFyeSxcbiAgICBhY3Rpb24sXG4gICAgZGlzYWJsZWQsXG59KSA9PiB7XG4gICAgY29uc3QgcHJvdmlkZXJzID0gZmxvdy5pZGVudGl0eV9wcm92aWRlcnMgfHwgW107XG4gICAgaWYgKHByb3ZpZGVycy5sZW5ndGggPCAyKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm14X1NTT0J1dHRvbnNcIj5cbiAgICAgICAgICAgICAgICA8U1NPQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIG1hdHJpeENsaWVudD17bWF0cml4Q2xpZW50fVxuICAgICAgICAgICAgICAgICAgICBsb2dpblR5cGU9e2xvZ2luVHlwZX1cbiAgICAgICAgICAgICAgICAgICAgZnJhZ21lbnRBZnRlckxvZ2luPXtmcmFnbWVudEFmdGVyTG9naW59XG4gICAgICAgICAgICAgICAgICAgIGlkcD17cHJvdmlkZXJzWzBdfVxuICAgICAgICAgICAgICAgICAgICBwcmltYXJ5PXtwcmltYXJ5fVxuICAgICAgICAgICAgICAgICAgICBhY3Rpb249e2FjdGlvbn1cbiAgICAgICAgICAgICAgICAgICAgZmxvdz17Zmxvd31cbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCByb3dzID0gTWF0aC5jZWlsKHByb3ZpZGVycy5sZW5ndGggLyBNQVhfUEVSX1JPVyk7XG4gICAgY29uc3Qgc2l6ZSA9IE1hdGguY2VpbChwcm92aWRlcnMubGVuZ3RoIC8gcm93cyk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm14X1NTT0J1dHRvbnNcIj5cbiAgICAgICAgICAgIHtjaHVuayhwcm92aWRlcnMsIHNpemUpLm1hcCgoY2h1bmspID0+IChcbiAgICAgICAgICAgICAgICA8ZGl2IGtleT17Y2h1bmtbMF0uaWR9IGNsYXNzTmFtZT1cIm14X1NTT0J1dHRvbnNfcm93XCI+XG4gICAgICAgICAgICAgICAgICAgIHtjaHVuay5tYXAoKGlkcCkgPT4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgPFNTT0J1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleT17aWRwLmlkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdHJpeENsaWVudD17bWF0cml4Q2xpZW50fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2luVHlwZT17bG9naW5UeXBlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYWdtZW50QWZ0ZXJMb2dpbj17ZnJhZ21lbnRBZnRlckxvZ2lufVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkcD17aWRwfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbmk9e3RydWV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbWFyeT17cHJpbWFyeX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249e2FjdGlvbn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG93PXtmbG93fVxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApKX1cbiAgICAgICAgPC9kaXY+XG4gICAgKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFNTT0J1dHRvbnM7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQVFBLElBQUFBLE1BQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FB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