payload
Version:
Node, React and MongoDB Headless CMS and Application Framework
192 lines (191 loc) • 18.8 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
Object.defineProperty(exports, "default", {
enumerable: true,
get: function() {
return _default;
}
});
const _react = /*#__PURE__*/ _interop_require_wildcard(require("react"));
const _reacti18next = require("react-i18next");
const _reacttoastify = require("react-toastify");
const _Button = /*#__PURE__*/ _interop_require_default(require("../../../../elements/Button"));
const _context = require("../../../../forms/Form/context");
const _Checkbox = /*#__PURE__*/ _interop_require_default(require("../../../../forms/field-types/Checkbox"));
const _ConfirmPassword = /*#__PURE__*/ _interop_require_default(require("../../../../forms/field-types/ConfirmPassword"));
const _Email = /*#__PURE__*/ _interop_require_default(require("../../../../forms/field-types/Email"));
const _Password = /*#__PURE__*/ _interop_require_default(require("../../../../forms/field-types/Password"));
const _Config = require("../../../../utilities/Config");
const _APIKey = /*#__PURE__*/ _interop_require_default(require("./APIKey"));
require("./index.scss");
function _interop_require_default(obj) {
return obj && obj.__esModule ? obj : {
default: obj
};
}
function _getRequireWildcardCache(nodeInterop) {
if (typeof WeakMap !== "function") return null;
var cacheBabelInterop = new WeakMap();
var cacheNodeInterop = new WeakMap();
return (_getRequireWildcardCache = function(nodeInterop) {
return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
})(nodeInterop);
}
function _interop_require_wildcard(obj, nodeInterop) {
if (!nodeInterop && obj && obj.__esModule) {
return obj;
}
if (obj === null || typeof obj !== "object" && typeof obj !== "function") {
return {
default: obj
};
}
var cache = _getRequireWildcardCache(nodeInterop);
if (cache && cache.has(obj)) {
return cache.get(obj);
}
var newObj = {
__proto__: null
};
var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
for(var key in obj){
if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
if (desc && (desc.get || desc.set)) {
Object.defineProperty(newObj, key, desc);
} else {
newObj[key] = obj[key];
}
}
}
newObj.default = obj;
if (cache) {
cache.set(obj, newObj);
}
return newObj;
}
const baseClass = 'auth-fields';
const Auth = (props)=>{
const { className, collection, collection: { slug }, email, operation, readOnly, requirePassword, useAPIKey, verify } = props;
const [changingPassword, setChangingPassword] = (0, _react.useState)(requirePassword);
const enableAPIKey = (0, _context.useFormFields)(([fields])=>fields.enableAPIKey);
const dispatchFields = (0, _context.useFormFields)((reducer)=>reducer[1]);
const modified = (0, _context.useFormModified)();
const { i18n, t } = (0, _reacti18next.useTranslation)('authentication');
const { routes: { api }, serverURL } = (0, _Config.useConfig)();
const handleChangePassword = (0, _react.useCallback)(async (state)=>{
if (!state) {
dispatchFields({
path: 'password',
type: 'REMOVE'
});
dispatchFields({
path: 'confirm-password',
type: 'REMOVE'
});
}
setChangingPassword(state);
}, [
dispatchFields
]);
const unlock = (0, _react.useCallback)(async ()=>{
const url = `${serverURL}${api}/${slug}/unlock`;
const response = await fetch(url, {
body: JSON.stringify({
email
}),
credentials: 'include',
headers: {
'Accept-Language': i18n.language,
'Content-Type': 'application/json'
},
method: 'post'
});
if (response.status === 200) {
_reacttoastify.toast.success(t('successfullyUnlocked'), {
autoClose: 3000
});
} else {
_reacttoastify.toast.error(t('failedToUnlock'));
}
}, [
i18n,
serverURL,
api,
slug,
email,
t
]);
(0, _react.useEffect)(()=>{
if (!modified) {
setChangingPassword(false);
}
}, [
modified
]);
if (collection.auth.disableLocalStrategy && !collection.auth.useAPIKey) {
return null;
}
return /*#__PURE__*/ _react.default.createElement("div", {
className: [
baseClass,
className
].filter(Boolean).join(' ')
}, !collection.auth.disableLocalStrategy && /*#__PURE__*/ _react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/ _react.default.createElement(_Email.default, {
admin: {
autoComplete: 'email',
readOnly
},
label: t('general:email'),
name: "email",
required: true
}), (changingPassword || requirePassword) && /*#__PURE__*/ _react.default.createElement("div", {
className: `${baseClass}__changing-password`
}, /*#__PURE__*/ _react.default.createElement(_Password.default, {
autoComplete: "off",
disabled: readOnly,
label: t('newPassword'),
name: "password",
required: true
}), /*#__PURE__*/ _react.default.createElement(_ConfirmPassword.default, {
disabled: readOnly
}), !requirePassword && /*#__PURE__*/ _react.default.createElement(_Button.default, {
buttonStyle: "secondary",
disabled: readOnly,
onClick: ()=>handleChangePassword(false),
size: "small"
}, t('general:cancel'))), (!changingPassword && !requirePassword || operation === 'update') && /*#__PURE__*/ _react.default.createElement("div", {
className: `${baseClass}__controls`
}, !changingPassword && !requirePassword && /*#__PURE__*/ _react.default.createElement(_Button.default, {
buttonStyle: "secondary",
disabled: readOnly,
id: "change-password",
onClick: ()=>handleChangePassword(true),
size: "small"
}, t('changePassword')), operation === 'update' && /*#__PURE__*/ _react.default.createElement(_Button.default, {
buttonStyle: "secondary",
disabled: readOnly,
onClick: ()=>unlock(),
size: "small"
}, t('forceUnlock')))), useAPIKey && /*#__PURE__*/ _react.default.createElement("div", {
className: `${baseClass}__api-key`
}, /*#__PURE__*/ _react.default.createElement(_Checkbox.default, {
admin: {
readOnly
},
label: t('enableAPIKey'),
name: "enableAPIKey"
}), enableAPIKey?.value && /*#__PURE__*/ _react.default.createElement(_APIKey.default, {
readOnly: readOnly
})), verify && /*#__PURE__*/ _react.default.createElement(_Checkbox.default, {
admin: {
readOnly
},
label: t('verified'),
name: "_verified"
}));
};
const _default = Auth;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hZG1pbi9jb21wb25lbnRzL3ZpZXdzL2NvbGxlY3Rpb25zL0VkaXQvQXV0aC9pbmRleC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJ3JlYWN0LWkxOG5leHQnXG5pbXBvcnQgeyB0b2FzdCB9IGZyb20gJ3JlYWN0LXRvYXN0aWZ5J1xuXG5pbXBvcnQgdHlwZSB7IFByb3BzIH0gZnJvbSAnLi90eXBlcydcblxuaW1wb3J0IEJ1dHRvbiBmcm9tICcuLi8uLi8uLi8uLi9lbGVtZW50cy9CdXR0b24nXG5pbXBvcnQgeyB1c2VGb3JtRmllbGRzLCB1c2VGb3JtTW9kaWZpZWQgfSBmcm9tICcuLi8uLi8uLi8uLi9mb3Jtcy9Gb3JtL2NvbnRleHQnXG5pbXBvcnQgQ2hlY2tib3ggZnJvbSAnLi4vLi4vLi4vLi4vZm9ybXMvZmllbGQtdHlwZXMvQ2hlY2tib3gnXG5pbXBvcnQgQ29uZmlybVBhc3N3b3JkIGZyb20gJy4uLy4uLy4uLy4uL2Zvcm1zL2ZpZWxkLXR5cGVzL0NvbmZpcm1QYXNzd29yZCdcbmltcG9ydCBFbWFpbCBmcm9tICcuLi8uLi8uLi8uLi9mb3Jtcy9maWVsZC10eXBlcy9FbWFpbCdcbmltcG9ydCBQYXNzd29yZCBmcm9tICcuLi8uLi8uLi8uLi9mb3Jtcy9maWVsZC10eXBlcy9QYXNzd29yZCdcbmltcG9ydCB7IHVzZUNvbmZpZyB9IGZyb20gJy4uLy4uLy4uLy4uL3V0aWxpdGllcy9Db25maWcnXG5pbXBvcnQgQVBJS2V5IGZyb20gJy4vQVBJS2V5J1xuaW1wb3J0ICcuL2luZGV4LnNjc3MnXG5cbmNvbnN0IGJhc2VDbGFzcyA9ICdhdXRoLWZpZWxkcydcblxuY29uc3QgQXV0aDogUmVhY3QuRkM8UHJvcHM+ID0gKHByb3BzKSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjbGFzc05hbWUsXG4gICAgY29sbGVjdGlvbixcbiAgICBjb2xsZWN0aW9uOiB7IHNsdWcgfSxcbiAgICBlbWFpbCxcbiAgICBvcGVyYXRpb24sXG4gICAgcmVhZE9ubHksXG4gICAgcmVxdWlyZVBhc3N3b3JkLFxuICAgIHVzZUFQSUtleSxcbiAgICB2ZXJpZnksXG4gIH0gPSBwcm9wc1xuXG4gIGNvbnN0IFtjaGFuZ2luZ1Bhc3N3b3JkLCBzZXRDaGFuZ2luZ1Bhc3N3b3JkXSA9IHVzZVN0YXRlKHJlcXVpcmVQYXNzd29yZClcbiAgY29uc3QgZW5hYmxlQVBJS2V5ID0gdXNlRm9ybUZpZWxkcygoW2ZpZWxkc10pID0+IGZpZWxkcy5lbmFibGVBUElLZXkpXG4gIGNvbnN0IGRpc3BhdGNoRmllbGRzID0gdXNlRm9ybUZpZWxkcygocmVkdWNlcikgPT4gcmVkdWNlclsxXSlcbiAgY29uc3QgbW9kaWZpZWQgPSB1c2VGb3JtTW9kaWZpZWQoKVxuICBjb25zdCB7IGkxOG4sIHQgfSA9IHVzZVRyYW5zbGF0aW9uKCdhdXRoZW50aWNhdGlvbicpXG5cbiAgY29uc3Qge1xuICAgIHJvdXRlczogeyBhcGkgfSxcbiAgICBzZXJ2ZXJVUkwsXG4gIH0gPSB1c2VDb25maWcoKVxuXG4gIGNvbnN0IGhhbmRsZUNoYW5nZVBhc3N3b3JkID0gdXNlQ2FsbGJhY2soXG4gICAgYXN5bmMgKHN0YXRlOiBib29sZWFuKSA9PiB7XG4gICAgICBpZiAoIXN0YXRlKSB7XG4gICAgICAgIGRpc3BhdGNoRmllbGRzKHsgcGF0aDogJ3Bhc3N3b3JkJywgdHlwZTogJ1JFTU9WRScgfSlcbiAgICAgICAgZGlzcGF0Y2hGaWVsZHMoeyBwYXRoOiAnY29uZmlybS1wYXNzd29yZCcsIHR5cGU6ICdSRU1PVkUnIH0pXG4gICAgICB9XG5cbiAgICAgIHNldENoYW5naW5nUGFzc3dvcmQoc3RhdGUpXG4gICAgfSxcbiAgICBbZGlzcGF0Y2hGaWVsZHNdLFxuICApXG5cbiAgY29uc3QgdW5sb2NrID0gdXNlQ2FsbGJhY2soYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHVybCA9IGAke3NlcnZlclVSTH0ke2FwaX0vJHtzbHVnfS91bmxvY2tgXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh1cmwsIHtcbiAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgZW1haWwsXG4gICAgICB9KSxcbiAgICAgIGNyZWRlbnRpYWxzOiAnaW5jbHVkZScsXG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgICdBY2NlcHQtTGFuZ3VhZ2UnOiBpMThuLmxhbmd1YWdlLFxuICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgfSxcbiAgICAgIG1ldGhvZDogJ3Bvc3QnLFxuICAgIH0pXG5cbiAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSAyMDApIHtcbiAgICAgIHRvYXN0LnN1Y2Nlc3ModCgnc3VjY2Vzc2Z1bGx5VW5sb2NrZWQnKSwgeyBhdXRvQ2xvc2U6IDMwMDAgfSlcbiAgICB9IGVsc2Uge1xuICAgICAgdG9hc3QuZXJyb3IodCgnZmFpbGVkVG9VbmxvY2snKSlcbiAgICB9XG4gIH0sIFtpMThuLCBzZXJ2ZXJVUkwsIGFwaSwgc2x1ZywgZW1haWwsIHRdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFtb2RpZmllZCkge1xuICAgICAgc2V0Q2hhbmdpbmdQYXNzd29yZChmYWxzZSlcbiAgICB9XG4gIH0sIFttb2RpZmllZF0pXG5cbiAgaWYgKGNvbGxlY3Rpb24uYXV0aC5kaXNhYmxlTG9jYWxTdHJhdGVneSAmJiAhY29sbGVjdGlvbi5hdXRoLnVzZUFQSUtleSkge1xuICAgIHJldHVybiBudWxsXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPXtbYmFzZUNsYXNzLCBjbGFzc05hbWVdLmZpbHRlcihCb29sZWFuKS5qb2luKCcgJyl9PlxuICAgICAgeyFjb2xsZWN0aW9uLmF1dGguZGlzYWJsZUxvY2FsU3RyYXRlZ3kgJiYgKFxuICAgICAgICA8UmVhY3QuRnJhZ21lbnQ+XG4gICAgICAgICAgPEVtYWlsXG4gICAgICAgICAgICBhZG1pbj17eyBhdXRvQ29tcGxldGU6ICdlbWFpbCcsIHJlYWRPbmx5IH19XG4gICAgICAgICAgICBsYWJlbD17dCgnZ2VuZXJhbDplbWFpbCcpfVxuICAgICAgICAgICAgbmFtZT1cImVtYWlsXCJcbiAgICAgICAgICAgIHJlcXVpcmVkXG4gICAgICAgICAgLz5cbiAgICAgICAgICB7KGNoYW5naW5nUGFzc3dvcmQgfHwgcmVxdWlyZVBhc3N3b3JkKSAmJiAoXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fY2hhbmdpbmctcGFzc3dvcmRgfT5cbiAgICAgICAgICAgICAgPFBhc3N3b3JkXG4gICAgICAgICAgICAgICAgYXV0b0NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgICAgICAgICBkaXNhYmxlZD17cmVhZE9ubHl9XG4gICAgICAgICAgICAgICAgbGFiZWw9e3QoJ25ld1Bhc3N3b3JkJyl9XG4gICAgICAgICAgICAgICAgbmFtZT1cInBhc3N3b3JkXCJcbiAgICAgICAgICAgICAgICByZXF1aXJlZFxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8Q29uZmlybVBhc3N3b3JkIGRpc2FibGVkPXtyZWFkT25seX0gLz5cbiAgICAgICAgICAgICAgeyFyZXF1aXJlUGFzc3dvcmQgJiYgKFxuICAgICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICAgIGJ1dHRvblN0eWxlPVwic2Vjb25kYXJ5XCJcbiAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtyZWFkT25seX1cbiAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGhhbmRsZUNoYW5nZVBhc3N3b3JkKGZhbHNlKX1cbiAgICAgICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAge3QoJ2dlbmVyYWw6Y2FuY2VsJyl9XG4gICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICApfVxuICAgICAgICAgIHsoKCFjaGFuZ2luZ1Bhc3N3b3JkICYmICFyZXF1aXJlUGFzc3dvcmQpIHx8IG9wZXJhdGlvbiA9PT0gJ3VwZGF0ZScpICYmIChcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19jb250cm9sc2B9PlxuICAgICAgICAgICAgICB7IWNoYW5naW5nUGFzc3dvcmQgJiYgIXJlcXVpcmVQYXNzd29yZCAmJiAoXG4gICAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgICAgYnV0dG9uU3R5bGU9XCJzZWNvbmRhcnlcIlxuICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e3JlYWRPbmx5fVxuICAgICAgICAgICAgICAgICAgaWQ9XCJjaGFuZ2UtcGFzc3dvcmRcIlxuICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlQ2hhbmdlUGFzc3dvcmQodHJ1ZSl9XG4gICAgICAgICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIHt0KCdjaGFuZ2VQYXNzd29yZCcpfVxuICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICB7b3BlcmF0aW9uID09PSAndXBkYXRlJyAmJiAoXG4gICAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgICAgYnV0dG9uU3R5bGU9XCJzZWNvbmRhcnlcIlxuICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e3JlYWRPbmx5fVxuICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gdW5sb2NrKCl9XG4gICAgICAgICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIHt0KCdmb3JjZVVubG9jaycpfVxuICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9SZWFjdC5GcmFnbWVudD5cbiAgICAgICl9XG4gICAgICB7dXNlQVBJS2V5ICYmIChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX2FwaS1rZXlgfT5cbiAgICAgICAgICA8Q2hlY2tib3ggYWRtaW49e3sgcmVhZE9ubHkgfX0gbGFiZWw9e3QoJ2VuYWJsZUFQSUtleScpfSBuYW1lPVwiZW5hYmxlQVBJS2V5XCIgLz5cbiAgICAgICAgICB7ZW5hYmxlQVBJS2V5Py52YWx1ZSAmJiA8QVBJS2V5IHJlYWRPbmx5PXtyZWFkT25seX0gLz59XG4gICAgICAgIDwvZGl2PlxuICAgICAgKX1cbiAgICAgIHt2ZXJpZnkgJiYgPENoZWNrYm94IGFkbWluPXt7IHJlYWRPbmx5IH19IGxhYmVsPXt0KCd2ZXJpZmllZCcpfSBuYW1lPVwiX3ZlcmlmaWVkXCIgLz59XG4gICAgPC9kaXY+XG4gIClcbn1cblxuZXhwb3J0IGRlZmF1bHQgQXV0aFxuIl0sIm5hbWVzIjpbImJhc2VDbGFzcyIsIkF1dGgiLCJwcm9wcyIsImNsYXNzTmFtZSIsImNvbGxlY3Rpb24iLCJzbHVnIiwiZW1haWwiLCJvcGVyYXRpb24iLCJyZWFkT25seSIsInJlcXVpcmVQYXNzd29yZCIsInVzZUFQSUtleSIsInZlcmlmeSIsImNoYW5naW5nUGFzc3dvcmQiLCJzZXRDaGFuZ2luZ1Bhc3N3b3JkIiwidXNlU3RhdGUiLCJlbmFibGVBUElLZXkiLCJ1c2VGb3JtRmllbGRzIiwiZmllbGRzIiwiZGlzcGF0Y2hGaWVsZHMiLCJyZWR1Y2VyIiwibW9kaWZpZWQiLCJ1c2VGb3JtTW9kaWZpZWQiLCJpMThuIiwidCIsInVzZVRyYW5zbGF0aW9uIiwicm91dGVzIiwiYXBpIiwic2VydmVyVVJMIiwidXNlQ29uZmlnIiwiaGFuZGxlQ2hhbmdlUGFzc3dvcmQiLCJ1c2VDYWxsYmFjayIsInN0YXRlIiwicGF0aCIsInR5cGUiLCJ1bmxvY2siLCJ1cmwiLCJyZXNwb25zZSIsImZldGNoIiwiYm9keSIsIkpTT04iLCJzdHJpbmdpZnkiLCJjcmVkZW50aWFscyIsImhlYWRlcnMiLCJsYW5ndWFnZSIsIm1ldGhvZCIsInN0YXR1cyIsInRvYXN0Iiwic3VjY2VzcyIsImF1dG9DbG9zZSIsImVycm9yIiwidXNlRWZmZWN0IiwiYXV0aCIsImRpc2FibGVMb2NhbFN0cmF0ZWd5IiwiZGl2IiwiZmlsdGVyIiwiQm9vbGVhbiIsImpvaW4iLCJSZWFjdCIsIkZyYWdtZW50IiwiRW1haWwiLCJhZG1pbiIsImF1dG9Db21wbGV0ZSIsImxhYmVsIiwibmFtZSIsInJlcXVpcmVkIiwiUGFzc3dvcmQiLCJkaXNhYmxlZCIsIkNvbmZpcm1QYXNzd29yZCIsIkJ1dHRvbiIsImJ1dHRvblN0eWxlIiwib25DbGljayIsInNpemUiLCJpZCIsIkNoZWNrYm94IiwidmFsdWUiLCJBUElLZXkiXSwibWFwcGluZ3MiOiI7Ozs7K0JBMkpBOzs7ZUFBQTs7OytEQTNKd0Q7OEJBQ3pCOytCQUNUOytEQUlIO3lCQUM0QjtpRUFDMUI7d0VBQ087OERBQ1Y7aUVBQ0c7d0JBQ0s7K0RBQ1A7UUFDWjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFUCxNQUFNQSxZQUFZO0FBRWxCLE1BQU1DLE9BQXdCLENBQUNDO0lBQzdCLE1BQU0sRUFDSkMsU0FBUyxFQUNUQyxVQUFVLEVBQ1ZBLFlBQVksRUFBRUMsSUFBSSxFQUFFLEVBQ3BCQyxLQUFLLEVBQ0xDLFNBQVMsRUFDVEMsUUFBUSxFQUNSQyxlQUFlLEVBQ2ZDLFNBQVMsRUFDVEMsTUFBTSxFQUNQLEdBQUdUO0lBRUosTUFBTSxDQUFDVSxrQkFBa0JDLG9CQUFvQixHQUFHQyxJQUFBQSxlQUFRLEVBQUNMO0lBQ3pELE1BQU1NLGVBQWVDLElBQUFBLHNCQUFhLEVBQUMsQ0FB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