payload
Version:
Node, React and MongoDB Headless CMS and Application Framework
196 lines (195 loc) • 27.6 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
Object.defineProperty(exports, "default", {
enumerable: true,
get: function() {
return _default;
}
});
const _windowinfo = require("@faceless-ui/window-info");
const _react = /*#__PURE__*/ _interop_require_wildcard(require("react"));
const _reacti18next = require("react-i18next");
const _formatFilesize = /*#__PURE__*/ _interop_require_default(require("../../../../../uploads/formatFilesize"));
const _getTranslation = require("../../../../../utilities/getTranslation");
const _Button = /*#__PURE__*/ _interop_require_default(require("../../../elements/Button"));
const _DeleteMany = /*#__PURE__*/ _interop_require_default(require("../../../elements/DeleteMany"));
const _EditMany = /*#__PURE__*/ _interop_require_default(require("../../../elements/EditMany"));
const _Gutter = require("../../../elements/Gutter");
const _ListControls = require("../../../elements/ListControls");
const _ListSelection = /*#__PURE__*/ _interop_require_default(require("../../../elements/ListSelection"));
const _Paginator = /*#__PURE__*/ _interop_require_default(require("../../../elements/Paginator"));
const _PerPage = /*#__PURE__*/ _interop_require_default(require("../../../elements/PerPage"));
const _Pill = /*#__PURE__*/ _interop_require_default(require("../../../elements/Pill"));
const _PublishMany = /*#__PURE__*/ _interop_require_default(require("../../../elements/PublishMany"));
const _ShimmerEffect = require("../../../elements/ShimmerEffect");
const _Table = require("../../../elements/Table");
const _UnpublishMany = /*#__PURE__*/ _interop_require_default(require("../../../elements/UnpublishMany"));
const _ViewDescription = /*#__PURE__*/ _interop_require_default(require("../../../elements/ViewDescription"));
const _Meta = /*#__PURE__*/ _interop_require_default(require("../../../utilities/Meta"));
const _RelationshipProvider = require("./RelationshipProvider");
const _SelectionProvider = require("./SelectionProvider");
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 = 'collection-list';
const DefaultList = (props)=>{
const { collection: { admin: { components: { AfterList, AfterListTable, BeforeList, BeforeListTable } = {}, description } = {}, labels: { plural: pluralLabel, singular: singularLabel } }, collection, customHeader, data, handlePageChange, handlePerPageChange, handleSearchChange, handleSortChange, handleWhereChange, hasCreatePermission, limit, modifySearchParams, newDocumentURL, resetParams, titleField } = props;
const { breakpoints: { s: smallBreak } } = (0, _windowinfo.useWindowInfo)();
const { i18n, t } = (0, _reacti18next.useTranslation)('general');
let formattedDocs = data.docs || [];
if (collection.upload) {
formattedDocs = formattedDocs?.map((doc)=>{
return {
...doc,
filesize: (0, _formatFilesize.default)(doc.filesize)
};
});
}
return /*#__PURE__*/ _react.default.createElement("div", {
className: baseClass
}, Array.isArray(BeforeList) && BeforeList.map((Component, i)=>/*#__PURE__*/ _react.default.createElement(Component, {
key: i,
...props
})), /*#__PURE__*/ _react.default.createElement(_Meta.default, {
title: (0, _getTranslation.getTranslation)(collection.labels.plural, i18n)
}), /*#__PURE__*/ _react.default.createElement(_SelectionProvider.SelectionProvider, {
docs: data.docs,
totalDocs: data.totalDocs
}, /*#__PURE__*/ _react.default.createElement(_Gutter.Gutter, {
className: `${baseClass}__wrap`
}, /*#__PURE__*/ _react.default.createElement("header", {
className: `${baseClass}__header`
}, customHeader && customHeader, !customHeader && /*#__PURE__*/ _react.default.createElement(_react.Fragment, null, /*#__PURE__*/ _react.default.createElement("h1", null, (0, _getTranslation.getTranslation)(pluralLabel, i18n)), hasCreatePermission && /*#__PURE__*/ _react.default.createElement(_Pill.default, {
"aria-label": t('createNewLabel', {
label: (0, _getTranslation.getTranslation)(singularLabel, i18n)
}),
to: newDocumentURL
}, t('createNew')), !smallBreak && /*#__PURE__*/ _react.default.createElement(_ListSelection.default, {
label: (0, _getTranslation.getTranslation)(collection.labels.plural, i18n)
}), description && /*#__PURE__*/ _react.default.createElement("div", {
className: `${baseClass}__sub-header`
}, /*#__PURE__*/ _react.default.createElement(_ViewDescription.default, {
description: description
})))), /*#__PURE__*/ _react.default.createElement(_ListControls.ListControls, {
collection: collection,
handleSearchChange: handleSearchChange,
handleSortChange: handleSortChange,
handleWhereChange: handleWhereChange,
modifySearchQuery: modifySearchParams,
resetParams: resetParams,
titleField: titleField
}), Array.isArray(BeforeListTable) && BeforeListTable.map((Component, i)=>/*#__PURE__*/ _react.default.createElement(Component, {
key: i,
...props
})), !data.docs && /*#__PURE__*/ _react.default.createElement(_ShimmerEffect.StaggeredShimmers, {
className: [
`${baseClass}__shimmer`,
`${baseClass}__shimmer--rows`
].join(' '),
count: 6
}), data.docs && data.docs.length > 0 && /*#__PURE__*/ _react.default.createElement(_RelationshipProvider.RelationshipProvider, null, /*#__PURE__*/ _react.default.createElement(_Table.Table, {
data: formattedDocs
})), data.docs && data.docs.length === 0 && /*#__PURE__*/ _react.default.createElement("div", {
className: `${baseClass}__no-results`
}, /*#__PURE__*/ _react.default.createElement("p", null, t('noResults', {
label: (0, _getTranslation.getTranslation)(pluralLabel, i18n)
})), hasCreatePermission && newDocumentURL && /*#__PURE__*/ _react.default.createElement(_Button.default, {
el: "link",
to: newDocumentURL
}, t('createNewLabel', {
label: (0, _getTranslation.getTranslation)(singularLabel, i18n)
}))), Array.isArray(AfterListTable) && AfterListTable.map((Component, i)=>/*#__PURE__*/ _react.default.createElement(Component, {
key: i,
...props
})), data.docs && data.docs.length > 0 && /*#__PURE__*/ _react.default.createElement("div", {
className: `${baseClass}__page-controls`
}, /*#__PURE__*/ _react.default.createElement(_Paginator.default, {
disableHistoryChange: modifySearchParams === false,
hasNextPage: data.hasNextPage,
hasPrevPage: data.hasPrevPage,
limit: data.limit,
nextPage: data.nextPage,
numberOfNeighbors: 1,
onChange: handlePageChange,
page: data.page,
prevPage: data.prevPage,
totalPages: data.totalPages
}), data?.totalDocs > 0 && /*#__PURE__*/ _react.default.createElement(_react.Fragment, null, /*#__PURE__*/ _react.default.createElement("div", {
className: `${baseClass}__page-info`
}, data.page * data.limit - (data.limit - 1), "-", data.totalPages > 1 && data.totalPages !== data.page ? data.limit * data.page : data.totalDocs, ' ', t('of'), " ", data.totalDocs), /*#__PURE__*/ _react.default.createElement(_PerPage.default, {
handleChange: handlePerPageChange,
limit: limit,
limits: collection?.admin?.pagination?.limits,
modifySearchParams: modifySearchParams,
resetPage: data.totalDocs <= data.pagingCounter
}), smallBreak && /*#__PURE__*/ _react.default.createElement("div", {
className: `${baseClass}__list-selection`
}, /*#__PURE__*/ _react.default.createElement(_react.Fragment, null, /*#__PURE__*/ _react.default.createElement(_ListSelection.default, {
label: (0, _getTranslation.getTranslation)(collection.labels.plural, i18n)
}), /*#__PURE__*/ _react.default.createElement("div", {
className: `${baseClass}__list-selection-actions`
}, /*#__PURE__*/ _react.default.createElement(_EditMany.default, {
collection: collection,
resetParams: resetParams
}), /*#__PURE__*/ _react.default.createElement(_PublishMany.default, {
collection: collection,
resetParams: resetParams
}), /*#__PURE__*/ _react.default.createElement(_UnpublishMany.default, {
collection: collection,
resetParams: resetParams
}), /*#__PURE__*/ _react.default.createElement(_DeleteMany.default, {
collection: collection,
resetParams: resetParams
})))))))), Array.isArray(AfterList) && AfterList.map((Component, i)=>/*#__PURE__*/ _react.default.createElement(Component, {
key: i,
...props
})));
};
const _default = DefaultList;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hZG1pbi9jb21wb25lbnRzL3ZpZXdzL2NvbGxlY3Rpb25zL0xpc3QvRGVmYXVsdC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdXNlV2luZG93SW5mbyB9IGZyb20gJ0BmYWNlbGVzcy11aS93aW5kb3ctaW5mbydcbmltcG9ydCBSZWFjdCwgeyBGcmFnbWVudCB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tICdyZWFjdC1pMThuZXh0J1xuXG5pbXBvcnQgdHlwZSB7IFByb3BzIH0gZnJvbSAnLi90eXBlcydcblxuaW1wb3J0IGZvcm1hdEZpbGVzaXplIGZyb20gJy4uLy4uLy4uLy4uLy4uL3VwbG9hZHMvZm9ybWF0RmlsZXNpemUnXG5pbXBvcnQgeyBnZXRUcmFuc2xhdGlvbiB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL3V0aWxpdGllcy9nZXRUcmFuc2xhdGlvbidcbmltcG9ydCBCdXR0b24gZnJvbSAnLi4vLi4vLi4vZWxlbWVudHMvQnV0dG9uJ1xuaW1wb3J0IERlbGV0ZU1hbnkgZnJvbSAnLi4vLi4vLi4vZWxlbWVudHMvRGVsZXRlTWFueSdcbmltcG9ydCBFZGl0TWFueSBmcm9tICcuLi8uLi8uLi9lbGVtZW50cy9FZGl0TWFueSdcbmltcG9ydCB7IEd1dHRlciB9IGZyb20gJy4uLy4uLy4uL2VsZW1lbnRzL0d1dHRlcidcbmltcG9ydCB7IExpc3RDb250cm9scyB9IGZyb20gJy4uLy4uLy4uL2VsZW1lbnRzL0xpc3RDb250cm9scydcbmltcG9ydCBMaXN0U2VsZWN0aW9uIGZyb20gJy4uLy4uLy4uL2VsZW1lbnRzL0xpc3RTZWxlY3Rpb24nXG5pbXBvcnQgUGFnaW5hdG9yIGZyb20gJy4uLy4uLy4uL2VsZW1lbnRzL1BhZ2luYXRvcidcbmltcG9ydCBQZXJQYWdlIGZyb20gJy4uLy4uLy4uL2VsZW1lbnRzL1BlclBhZ2UnXG5pbXBvcnQgUGlsbCBmcm9tICcuLi8uLi8uLi9lbGVtZW50cy9QaWxsJ1xuaW1wb3J0IFB1Ymxpc2hNYW55IGZyb20gJy4uLy4uLy4uL2VsZW1lbnRzL1B1Ymxpc2hNYW55J1xuaW1wb3J0IHsgU3RhZ2dlcmVkU2hpbW1lcnMgfSBmcm9tICcuLi8uLi8uLi9lbGVtZW50cy9TaGltbWVyRWZmZWN0J1xuaW1wb3J0IHsgVGFibGUgfSBmcm9tICcuLi8uLi8uLi9lbGVtZW50cy9UYWJsZSdcbmltcG9ydCBVbnB1Ymxpc2hNYW55IGZyb20gJy4uLy4uLy4uL2VsZW1lbnRzL1VucHVibGlzaE1hbnknXG5pbXBvcnQgVmlld0Rlc2NyaXB0aW9uIGZyb20gJy4uLy4uLy4uL2VsZW1lbnRzL1ZpZXdEZXNjcmlwdGlvbidcbmltcG9ydCBNZXRhIGZyb20gJy4uLy4uLy4uL3V0aWxpdGllcy9NZXRhJ1xuaW1wb3J0IHsgUmVsYXRpb25zaGlwUHJvdmlkZXIgfSBmcm9tICcuL1JlbGF0aW9uc2hpcFByb3ZpZGVyJ1xuaW1wb3J0IHsgU2VsZWN0aW9uUHJvdmlkZXIgfSBmcm9tICcuL1NlbGVjdGlvblByb3ZpZGVyJ1xuaW1wb3J0ICcuL2luZGV4LnNjc3MnXG5cbmNvbnN0IGJhc2VDbGFzcyA9ICdjb2xsZWN0aW9uLWxpc3QnXG5cbmNvbnN0IERlZmF1bHRMaXN0OiBSZWFjdC5GQzxQcm9wcz4gPSAocHJvcHMpID0+IHtcbiAgY29uc3Qge1xuICAgIGNvbGxlY3Rpb246IHtcbiAgICAgIGFkbWluOiB7XG4gICAgICAgIGNvbXBvbmVudHM6IHsgQWZ0ZXJMaXN0LCBBZnRlckxpc3RUYWJsZSwgQmVmb3JlTGlzdCwgQmVmb3JlTGlzdFRhYmxlIH0gPSB7fSxcbiAgICAgICAgZGVzY3JpcHRpb24sXG4gICAgICB9ID0ge30sXG4gICAgICBsYWJlbHM6IHsgcGx1cmFsOiBwbHVyYWxMYWJlbCwgc2luZ3VsYXI6IHNpbmd1bGFyTGFiZWwgfSxcbiAgICB9LFxuICAgIGNvbGxlY3Rpb24sXG4gICAgY3VzdG9tSGVhZGVyLFxuICAgIGRhdGEsXG4gICAgaGFuZGxlUGFnZUNoYW5nZSxcbiAgICBoYW5kbGVQZXJQYWdlQ2hhbmdlLFxuICAgIGhhbmRsZVNlYXJjaENoYW5nZSxcbiAgICBoYW5kbGVTb3J0Q2hhbmdlLFxuICAgIGhhbmRsZVdoZXJlQ2hhbmdlLFxuICAgIGhhc0NyZWF0ZVBlcm1pc3Npb24sXG4gICAgbGltaXQsXG4gICAgbW9kaWZ5U2VhcmNoUGFyYW1zLFxuICAgIG5ld0RvY3VtZW50VVJMLFxuICAgIHJlc2V0UGFyYW1zLFxuICAgIHRpdGxlRmllbGQsXG4gIH0gPSBwcm9wc1xuXG4gIGNvbnN0IHtcbiAgICBicmVha3BvaW50czogeyBzOiBzbWFsbEJyZWFrIH0sXG4gIH0gPSB1c2VXaW5kb3dJbmZvKClcbiAgY29uc3QgeyBpMThuLCB0IH0gPSB1c2VUcmFuc2xhdGlvbignZ2VuZXJhbCcpXG4gIGxldCBmb3JtYXR0ZWREb2NzID0gZGF0YS5kb2NzIHx8IFtdXG5cbiAgaWYgKGNvbGxlY3Rpb24udXBsb2FkKSB7XG4gICAgZm9ybWF0dGVkRG9jcyA9IGZvcm1hdHRlZERvY3M/Lm1hcCgoZG9jKSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5kb2MsXG4gICAgICAgIGZpbGVzaXplOiBmb3JtYXRGaWxlc2l6ZShkb2MuZmlsZXNpemUpLFxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPXtiYXNlQ2xhc3N9PlxuICAgICAge0FycmF5LmlzQXJyYXkoQmVmb3JlTGlzdCkgJiZcbiAgICAgICAgQmVmb3JlTGlzdC5tYXAoKENvbXBvbmVudCwgaSkgPT4gPENvbXBvbmVudCBrZXk9e2l9IHsuLi5wcm9wc30gLz4pfVxuXG4gICAgICA8TWV0YSB0aXRsZT17Z2V0VHJhbnNsYXRpb24oY29sbGVjdGlvbi5sYWJlbHMucGx1cmFsLCBpMThuKX0gLz5cbiAgICAgIDxTZWxlY3Rpb25Qcm92aWRlciBkb2NzPXtkYXRhLmRvY3N9IHRvdGFsRG9jcz17ZGF0YS50b3RhbERvY3N9PlxuICAgICAgICA8R3V0dGVyIGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fd3JhcGB9PlxuICAgICAgICAgIDxoZWFkZXIgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19oZWFkZXJgfT5cbiAgICAgICAgICAgIHtjdXN0b21IZWFkZXIgJiYgY3VzdG9tSGVhZGVyfVxuICAgICAgICAgICAgeyFjdXN0b21IZWFkZXIgJiYgKFxuICAgICAgICAgICAgICA8RnJhZ21lbnQ+XG4gICAgICAgICAgICAgICAgPGgxPntnZXRUcmFuc2xhdGlvbihwbHVyYWxMYWJlbCwgaTE4bil9PC9oMT5cbiAgICAgICAgICAgICAgICB7aGFzQ3JlYXRlUGVybWlzc2lvbiAmJiAoXG4gICAgICAgICAgICAgICAgICA8UGlsbFxuICAgICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPXt0KCdjcmVhdGVOZXdMYWJlbCcsIHsgbGFiZWw6IGdldFRyYW5zbGF0aW9uKHNpbmd1bGFyTGFiZWwsIGkxOG4pIH0pfVxuICAgICAgICAgICAgICAgICAgICB0bz17bmV3RG9jdW1lbnRVUkx9XG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIHt0KCdjcmVhdGVOZXcnKX1cbiAgICAgICAgICAgICAgICAgIDwvUGlsbD5cbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgIHshc21hbGxCcmVhayAmJiAoXG4gICAgICAgICAgICAgICAgICA8TGlzdFNlbGVjdGlvbiBsYWJlbD17Z2V0VHJhbnNsYXRpb24oY29sbGVjdGlvbi5sYWJlbHMucGx1cmFsLCBpMThuKX0gLz5cbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgIHtkZXNjcmlwdGlvbiAmJiAoXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fc3ViLWhlYWRlcmB9PlxuICAgICAgICAgICAgICAgICAgICA8Vmlld0Rlc2NyaXB0aW9uIGRlc2NyaXB0aW9uPXtkZXNjcmlwdGlvbn0gLz5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIDwvRnJhZ21lbnQ+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvaGVhZGVyPlxuICAgICAgICAgIDxMaXN0Q29udHJvbHNcbiAgICAgICAgICAgIGNvbGxlY3Rpb249e2NvbGxlY3Rpb259XG4gICAgICAgICAgICBoYW5kbGVTZWFyY2hDaGFuZ2U9e2hhbmRsZVNlYXJjaENoYW5nZX1cbiAgICAgICAgICAgIGhhbmRsZVNvcnRDaGFuZ2U9e2hhbmRsZVNvcnRDaGFuZ2V9XG4gICAgICAgICAgICBoYW5kbGVXaGVyZUNoYW5nZT17aGFuZGxlV2hlcmVDaGFuZ2V9XG4gICAgICAgICAgICBtb2RpZnlTZWFyY2hRdWVyeT17bW9kaWZ5U2VhcmNoUGFyYW1zfVxuICAgICAgICAgICAgcmVzZXRQYXJhbXM9e3Jlc2V0UGFyYW1zfVxuICAgICAgICAgICAgdGl0bGVGaWVsZD17dGl0bGVGaWVsZH1cbiAgICAgICAgICAvPlxuICAgICAgICAgIHtBcnJheS5pc0FycmF5KEJlZm9yZUxpc3RUYWJsZSkgJiZcbiAgICAgICAgICAgIEJlZm9yZUxpc3RUYWJsZS5tYXAoKENvbXBvbmVudCwgaSkgPT4gPENvbXBvbmVudCBrZXk9e2l9IHsuLi5wcm9wc30gLz4pfVxuICAgICAgICAgIHshZGF0YS5kb2NzICYmIChcbiAgICAgICAgICAgIDxTdGFnZ2VyZWRTaGltbWVyc1xuICAgICAgICAgICAgICBjbGFzc05hbWU9e1tgJHtiYXNlQ2xhc3N9X19zaGltbWVyYCwgYCR7YmFzZUNsYXNzfV9fc2hpbW1lci0tcm93c2BdLmpvaW4oJyAnKX1cbiAgICAgICAgICAgICAgY291bnQ9ezZ9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICl9XG4gICAgICAgICAge2RhdGEuZG9jcyAmJiBkYXRhLmRvY3MubGVuZ3RoID4gMCAmJiAoXG4gICAgICAgICAgICA8UmVsYXRpb25zaGlwUHJvdmlkZXI+XG4gICAgICAgICAgICAgIDxUYWJsZSBkYXRhPXtmb3JtYXR0ZWREb2NzfSAvPlxuICAgICAgICAgICAgPC9SZWxhdGlvbnNoaXBQcm92aWRlcj5cbiAgICAgICAgICApfVxuICAgICAgICAgIHtkYXRhLmRvY3MgJiYgZGF0YS5kb2NzLmxlbmd0aCA9PT0gMCAmJiAoXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fbm8tcmVzdWx0c2B9PlxuICAgICAgICAgICAgICA8cD57dCgnbm9SZXN1bHRzJywgeyBsYWJlbDogZ2V0VHJhbnNsYXRpb24ocGx1cmFsTGFiZWwsIGkxOG4pIH0pfTwvcD5cbiAgICAgICAgICAgICAge2hhc0NyZWF0ZVBlcm1pc3Npb24gJiYgbmV3RG9jdW1lbnRVUkwgJiYgKFxuICAgICAgICAgICAgICAgIDxCdXR0b24gZWw9XCJsaW5rXCIgdG89e25ld0RvY3VtZW50VVJMfT5cbiAgICAgICAgICAgICAgICAgIHt0KCdjcmVhdGVOZXdMYWJlbCcsIHsgbGFiZWw6IGdldFRyYW5zbGF0aW9uKHNpbmd1bGFyTGFiZWwsIGkxOG4pIH0pfVxuICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKX1cbiAgICAgICAgICB7QXJyYXkuaXNBcnJheShBZnRlckxpc3RUYWJsZSkgJiZcbiAgICAgICAgICAgIEFmdGVyTGlzdFRhYmxlLm1hcCgoQ29tcG9uZW50LCBpKSA9PiA8Q29tcG9uZW50IGtleT17aX0gey4uLnByb3BzfSAvPil9XG4gICAgICAgICAge2RhdGEuZG9jcyAmJiBkYXRhLmRvY3MubGVuZ3RoID4gMCAmJiAoXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fcGFnZS1jb250cm9sc2B9PlxuICAgICAgICAgICAgICA8UGFnaW5hdG9yXG4gICAgICAgICAgICAgICAgZGlzYWJsZUhpc3RvcnlDaGFuZ2U9e21vZGlmeVNlYXJjaFBhcmFtcyA9PT0gZmFsc2V9XG4gICAgICAgICAgICAgICAgaGFzTmV4dFBhZ2U9e2RhdGEuaGFzTmV4dFBhZ2V9XG4gICAgICAgICAgICAgICAgaGFzUHJldlBhZ2U9e2RhdGEuaGFzUHJldlBhZ2V9XG4gICAgICAgICAgICAgICAgbGltaXQ9e2RhdGEubGltaXR9XG4gICAgICAgICAgICAgICAgbmV4dFBhZ2U9e2RhdGEubmV4dFBhZ2V9XG4gICAgICAgICAgICAgICAgbnVtYmVyT2ZOZWlnaGJvcnM9ezF9XG4gICAgICAgICAgICAgICAgb25DaGFuZ2U9e2hhbmRsZVBhZ2VDaGFuZ2V9XG4gICAgICAgICAgICAgICAgcGFnZT17ZGF0YS5wYWdlfVxuICAgICAgICAgICAgICAgIHByZXZQYWdlPXtkYXRhLnByZXZQYWdlfVxuICAgICAgICAgICAgICAgIHRvdGFsUGFnZXM9e2RhdGEudG90YWxQYWdlc31cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAge2RhdGE/LnRvdGFsRG9jcyA+IDAgJiYgKFxuICAgICAgICAgICAgICAgIDxGcmFnbWVudD5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19wYWdlLWluZm9gfT5cbiAgICAgICAgICAgICAgICAgICAge2RhdGEucGFnZSAqIGRhdGEubGltaXQgLSAoZGF0YS5saW1pdCAtIDEpfS1cbiAgICAgICAgICAgICAgICAgICAge2RhdGEudG90YWxQYWdlcyA+IDEgJiYgZGF0YS50b3RhbFBhZ2VzICE9PSBkYXRhLnBhZ2VcbiAgICAgICAgICAgICAgICAgICAgICA/IGRhdGEubGltaXQgKiBkYXRhLnBhZ2VcbiAgICAgICAgICAgICAgICAgICAgICA6IGRhdGEudG90YWxEb2NzfXsnICd9XG4gICAgICAgICAgICAgICAgICAgIHt0KCdvZicpfSB7ZGF0YS50b3RhbERvY3N9XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxQZXJQYWdlXG4gICAgICAgICAgICAgICAgICAgIGhhbmRsZUNoYW5nZT17aGFuZGxlUGVyUGFnZUNoYW5nZX1cbiAgICAgICAgICAgICAgICAgICAgbGltaXQ9e2xpbWl0fVxuICAgICAgICAgICAgICAgICAgICBsaW1pdHM9e2NvbGxlY3Rpb24/LmFkbWluPy5wYWdpbmF0aW9uPy5saW1pdHN9XG4gICAgICAgICAgICAgICAgICAgIG1vZGlmeVNlYXJjaFBhcmFtcz17bW9kaWZ5U2VhcmNoUGFyYW1zfVxuICAgICAgICAgICAgICAgICAgICByZXNldFBhZ2U9e2RhdGEudG90YWxEb2NzIDw9IGRhdGEucGFnaW5nQ291bnRlcn1cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICB7c21hbGxCcmVhayAmJiAoXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19saXN0LXNlbGVjdGlvbmB9PlxuICAgICAgICAgICAgICAgICAgICAgIDxGcmFnbWVudD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxMaXN0U2VsZWN0aW9uIGxhYmVsPXtnZXRUcmFuc2xhdGlvbihjb2xsZWN0aW9uLmxhYmVscy5wbHVyYWwsIGkxOG4pfSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX2xpc3Qtc2VsZWN0aW9uLWFjdGlvbnNgfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPEVkaXRNYW55IGNvbGxlY3Rpb249e2NvbGxlY3Rpb259IHJlc2V0UGFyYW1zPXtyZXNldFBhcmFtc30gLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPFB1Ymxpc2hNYW55IGNvbGxlY3Rpb249e2NvbGxlY3Rpb259IHJlc2V0UGFyYW1zPXtyZXNldFBhcmFtc30gLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPFVucHVibGlzaE1hbnkgY29sbGVjdGlvbj17Y29sbGVjdGlvbn0gcmVzZXRQYXJhbXM9e3Jlc2V0UGFyYW1zfSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8RGVsZXRlTWFueSBjb2xsZWN0aW9uPXtjb2xsZWN0aW9ufSByZXNldFBhcmFtcz17cmVzZXRQYXJhbXN9IC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8L0ZyYWdtZW50PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgPC9GcmFnbWVudD5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICl9XG4gICAgICAgIDwvR3V0dGVyPlxuICAgICAgPC9TZWxlY3Rpb25Qcm92aWRlcj5cbiAgICAgIHtBcnJheS5pc0FycmF5KEFmdGVyTGlzdCkgJiZcbiAgICAgICAgQWZ0ZXJMaXN0Lm1hcCgoQ29tcG9uZW50LCBpKSA9PiA8Q29tcG9uZW50IGtleT17aX0gey4uLnByb3BzfSAvPil9XG4gICAgPC9kaXY+XG4gIClcbn1cblxuZXhwb3J0IGRlZmF1bHQgRGVmYXVsdExpc3RcbiJdLCJuYW1lcyI6WyJiYXNlQ2xhc3MiLCJEZWZhdWx0TGlzdCIsInByb3BzIiwiY29sbGVjdGlvbiIsImFkbWluIiwiY29tcG9uZW50cyIsIkFmdGVyTGlzdCIsIkFmdGVyTGlzdFRhYmxlIiwiQmVmb3JlTGlzdCIsIkJlZm9yZUxpc3RUYWJsZSIsImRlc2NyaXB0aW9uIiwibGFiZWxzIiwicGx1cmFsIiwicGx1cmFsTGFiZWwiLCJzaW5ndWxhciIsInNpbmd1bGFyTGFiZWwiLCJjdXN0b21IZWFkZXIiLCJkYXRhIiwiaGFuZGxlUGFnZUNoYW5nZSIsImhhbmRsZVBlclBhZ2VDaGFuZ2UiLCJoYW5kbGVTZWFyY2hDaGFuZ2UiLCJoYW5kbGVTb3J0Q2hhbmdlIiwiaGFuZGxlV2hlcmVDaGFuZ2UiLCJoYXNDcmVhdGVQZXJtaXNzaW9uIiwibGltaXQiLCJtb2RpZnlTZWFyY2hQYXJhbXMiLCJuZXdEb2N1bWVudFVSTCIsInJlc2V0UGFyYW1zIiwidGl0bGVGaWVsZCIsImJyZWFrcG9pbnRzIiwicyIsInNtYWxsQnJlYWsiLCJ1c2VXaW5kb3dJbmZvIiwiaTE4biIsInQiLCJ1c2VUcmFuc2xhdGlvbiIsImZvcm1hdHRlZERvY3MiLCJkb2NzIiwidXBsb2FkIiwibWFwIiwiZG9jIiwiZmlsZXNpemUiLCJmb3JtYXRGaWxlc2l6ZSIsImRpdiIsImNsYXNzTmFtZSIsIkFycmF5IiwiaXNBcnJheSIsIkNvbXBvbmVudCIsImkiLCJrZXkiLCJNZXRhIiwidGl0bGUiLCJnZXRUcmFuc2xhdGlvbiIsIlNlbGVjdGlvblByb3ZpZGVyIiwidG90YWxEb2NzIiwiR3V0dGVyIiwiaGVhZGVyIiwiRnJhZ21lbnQiLCJoMSIsIlBpbGwiLCJhcmlhLWxhYmVsIiwibGFiZWwiLCJ0byIsIkxpc3RTZWxlY3Rpb24iLCJWaWV3RGVzY3JpcHRpb24iLCJMaXN0Q29udHJvbHMiLCJtb2RpZnlTZWFyY2hRdWVyeSIsIlN0YWdnZXJlZFNoaW1tZXJzIiwiam9pbiIsImNvdW50IiwibGVuZ3RoIiwiUmVsYXRpb25zaGlwUHJvdmlkZXIiLCJUYWJsZSIsInAiLCJCdXR0b24iLCJlbCIsIlBhZ2luYXRvciIsImRpc2FibGVIaXN0b3J5Q2hhbmdlIiwiaGFzTmV4dFBhZ2UiLCJoYXNQcmV2UGFnZSIsIm5leHRQYWdlIiwibnVtYmVyT2ZOZWlnaGJvcnMiLCJvbkNoYW5nZSIsInBhZ2UiLCJwcmV2UGFnZSIsInRvdGFsUGFnZXMiLCJQZXJQYWdlIiwiaGFuZGxlQ2hhbmdlIiwibGltaXRzIiwicGFnaW5hdGlvbiIsInJlc2V0UGFnZSIsInBhZ2luZ0NvdW50ZXIiLCJFZGl0TWFueSIsIlB1Ymxpc2hNYW55IiwiVW5wdWJsaXNoTWFueSIsIkRlbGV0ZU1hbnkiXSwibWFwcGluZ3MiOiI7Ozs7K0JBOExBOzs7ZUFBQTs7OzRCQTlMOEI7K0RBQ0U7OEJBQ0Q7dUVBSUo7Z0NBQ0k7K0RBQ1o7bUVBQ0k7aUVBQ0Y7d0JBQ0U7OEJBQ007c0VBQ0g7a0VBQ0o7Z0VBQ0Y7NkRBQ0g7b0VB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