chore: remove usePageMetaList

This commit is contained in:
QiShaoXuan
2023-01-11 14:55:12 +08:00
parent 65f767e35a
commit 97b8456eac
8 changed files with 14 additions and 70 deletions

View File

@@ -9,7 +9,6 @@ import { useSwitchToConfig } from './config';
import { NoResultSVG } from './NoResultSVG'; import { NoResultSVG } from './NoResultSVG';
import { useTranslation } from '@affine/i18n'; import { useTranslation } from '@affine/i18n';
import usePageHelper from '@/hooks/use-page-helper'; import usePageHelper from '@/hooks/use-page-helper';
import usePageMetaList from '@/hooks/use-page-meta-list';
export const Results = (props: { export const Results = (props: {
query: string; query: string;
loading: boolean; loading: boolean;
@@ -21,10 +20,9 @@ export const Results = (props: {
const setLoading = props.setLoading; const setLoading = props.setLoading;
const setShowCreatePage = props.setShowCreatePage; const setShowCreatePage = props.setShowCreatePage;
const { triggerQuickSearchModal } = useModal(); const { triggerQuickSearchModal } = useModal();
const pageMetaList = usePageMetaList();
const { openPage } = usePageHelper(); const { openPage } = usePageHelper();
const router = useRouter(); const router = useRouter();
const { currentWorkspaceId } = useAppState(); const { currentWorkspaceId, pageList } = useAppState();
const { search } = usePageHelper(); const { search } = usePageHelper();
const List = useSwitchToConfig(currentWorkspaceId); const List = useSwitchToConfig(currentWorkspaceId);
const [results, setResults] = useState(new Map<string, string | undefined>()); const [results, setResults] = useState(new Map<string, string | undefined>());
@@ -37,12 +35,12 @@ export const Results = (props: {
}, [query, setResults, setLoading]); }, [query, setResults, setLoading]);
const pageIds = [...results.values()]; const pageIds = [...results.values()];
const resultsPageMeta = pageMetaList.filter( const resultsPageMeta = pageList.filter(
page => pageIds.indexOf(page.id) > -1 && !page.trash page => pageIds.indexOf(page.id) > -1 && !page.trash
); );
useEffect(() => { useEffect(() => {
setShowCreatePage(resultsPageMeta.length ? false : true); setShowCreatePage(!resultsPageMeta.length);
//Determine whether to display the + New page //Determine whether to display the + New page
}, [resultsPageMeta, setShowCreatePage]); }, [resultsPageMeta, setShowCreatePage]);
return loading ? null : ( return loading ? null : (

View File

@@ -5,14 +5,12 @@ import {
StyledLink, StyledLink,
StyledListItem, StyledListItem,
StyledListItemForWorkspace, StyledListItemForWorkspace,
// StyledListItemForWorkspace,
StyledNewPageButton, StyledNewPageButton,
StyledSliderBar, StyledSliderBar,
StyledSliderBarWrapper, StyledSliderBarWrapper,
StyledSubListItem, StyledSubListItem,
} from './style'; } from './style';
import { Arrow } from './icons'; import { Arrow } from './icons';
// import { WorkspaceSelector } from './WorkspaceSelector';
import Collapse from '@mui/material/Collapse'; import Collapse from '@mui/material/Collapse';
import { import {
ArrowDownIcon, ArrowDownIcon,
@@ -30,15 +28,13 @@ import { useModal } from '@/providers/GlobalModalProvider';
import { useAppState } from '@/providers/app-state-provider'; import { useAppState } from '@/providers/app-state-provider';
import { IconButton } from '@/ui/button'; import { IconButton } from '@/ui/button';
import useLocalStorage from '@/hooks/use-local-storage'; import useLocalStorage from '@/hooks/use-local-storage';
import usePageMetaList from '@/hooks/use-page-meta-list';
import { usePageHelper } from '@/hooks/use-page-helper'; import { usePageHelper } from '@/hooks/use-page-helper';
// import { WorkspaceSetting } from '@/components/workspace-setting';
import { useTranslation } from '@affine/i18n'; import { useTranslation } from '@affine/i18n';
import { WorkspaceSelector } from './WorkspaceSelector/WorkspaceSelector'; import { WorkspaceSelector } from './WorkspaceSelector/WorkspaceSelector';
const FavoriteList = ({ showList }: { showList: boolean }) => { const FavoriteList = ({ showList }: { showList: boolean }) => {
const { openPage } = usePageHelper(); const { openPage } = usePageHelper();
const pageList = usePageMetaList(); const { pageList } = useAppState();
const router = useRouter(); const router = useRouter();
const { t } = useTranslation(); const { t } = useTranslation();
const favoriteList = pageList.filter(p => p.favorite && !p.trash); const favoriteList = pageList.filter(p => p.favorite && !p.trash);

View File

@@ -1,25 +0,0 @@
import { useEffect, useState } from 'react';
import { PageMeta } from '@/providers/app-state-provider';
import { useAppState } from '@/providers/app-state-provider';
export const usePageMetaList = () => {
const { currentWorkspace } = useAppState();
const [pageList, setPageList] = useState<PageMeta[]>([]);
useEffect(() => {
if (!currentWorkspace) {
return;
}
setPageList(currentWorkspace.meta.pageMetas as PageMeta[]);
const dispose = currentWorkspace.meta.pagesUpdated.on(() => {
setPageList(currentWorkspace.meta.pageMetas as PageMeta[]);
}).dispose;
return () => {
dispose();
};
}, [currentWorkspace]);
return pageList;
};
export default usePageMetaList;

View File

@@ -12,8 +12,7 @@ export const useWorkspaceHelper = () => {
name: name, name: name,
}); });
if (workspaceInfo && workspaceInfo.room) { if (workspaceInfo && workspaceInfo.room) {
const workspace = await dataCenter.loadWorkspace(workspaceInfo.room); return await dataCenter.loadWorkspace(workspaceInfo.room);
return workspace;
} }
return null; return null;
}; };

View File

@@ -1,18 +1,18 @@
import { PageList } from '@/components/page-list'; import { PageList } from '@/components/page-list';
import { AllPagesIcon } from '@blocksuite/icons'; import { AllPagesIcon } from '@blocksuite/icons';
import usePageMetaList from '@/hooks/use-page-meta-list';
import { PageListHeader } from '@/components/header'; import { PageListHeader } from '@/components/header';
import { ReactElement } from 'react'; import { ReactElement } from 'react';
import WorkspaceLayout from '@/components/workspace-layout'; import WorkspaceLayout from '@/components/workspace-layout';
import { useTranslation } from '@affine/i18n'; import { useTranslation } from '@affine/i18n';
import { useAppState } from '@/providers/app-state-provider';
const All = () => { const All = () => {
const pageMetaList = usePageMetaList(); const { pageList } = useAppState();
const { t } = useTranslation(); const { t } = useTranslation();
return ( return (
<> <>
<PageListHeader icon={<AllPagesIcon />}>{t('All pages')}</PageListHeader> <PageListHeader icon={<AllPagesIcon />}>{t('All pages')}</PageListHeader>
<PageList <PageList
pageList={pageMetaList.filter(p => !p.trash)} pageList={pageList.filter(p => !p.trash)}
showFavoriteTag={true} showFavoriteTag={true}
/> />
</> </>

View File

@@ -1,19 +1,19 @@
import { PageListHeader } from '@/components/header'; import { PageListHeader } from '@/components/header';
import { PageList } from '@/components/page-list'; import { PageList } from '@/components/page-list';
import { FavouritesIcon } from '@blocksuite/icons'; import { FavouritesIcon } from '@blocksuite/icons';
import usePageMetaList from '@/hooks/use-page-meta-list';
import { ReactElement } from 'react'; import { ReactElement } from 'react';
import WorkspaceLayout from '@/components/workspace-layout'; import WorkspaceLayout from '@/components/workspace-layout';
import { useTranslation } from '@affine/i18n'; import { useTranslation } from '@affine/i18n';
import { useAppState } from '@/providers/app-state-provider';
export const Favorite = () => { export const Favorite = () => {
const pageMetaList = usePageMetaList(); const { pageList } = useAppState();
const { t } = useTranslation(); const { t } = useTranslation();
return ( return (
<> <>
<PageListHeader icon={<FavouritesIcon />}> <PageListHeader icon={<FavouritesIcon />}>
{t('Favourites')} {t('Favourites')}
</PageListHeader> </PageListHeader>
<PageList pageList={pageMetaList.filter(p => p.favorite && !p.trash)} /> <PageList pageList={pageList.filter(p => p.favorite && !p.trash)} />
</> </>
); );
}; };

View File

@@ -1,17 +1,17 @@
import { PageListHeader } from '@/components/header'; import { PageListHeader } from '@/components/header';
import { PageList } from '@/components/page-list'; import { PageList } from '@/components/page-list';
import { TrashIcon } from '@blocksuite/icons'; import { TrashIcon } from '@blocksuite/icons';
import usePageMetaList from '@/hooks/use-page-meta-list';
import { ReactElement } from 'react'; import { ReactElement } from 'react';
import WorkspaceLayout from '@/components/workspace-layout'; import WorkspaceLayout from '@/components/workspace-layout';
import { useTranslation } from '@affine/i18n'; import { useTranslation } from '@affine/i18n';
import { useAppState } from '@/providers/app-state-provider';
export const Trash = () => { export const Trash = () => {
const pageMetaList = usePageMetaList(); const { pageList } = useAppState();
const { t } = useTranslation(); const { t } = useTranslation();
return ( return (
<> <>
<PageListHeader icon={<TrashIcon />}>{t('Trash')}</PageListHeader> <PageListHeader icon={<TrashIcon />}>{t('Trash')}</PageListHeader>
<PageList pageList={pageMetaList.filter(p => p.trash)} isTrash={true} /> <PageList pageList={pageList.filter(p => p.trash)} isTrash={true} />
</> </>
); );
}; };

24
pnpm-lock.yaml generated
View File

@@ -2967,7 +2967,6 @@ packages:
/@next/env/13.1.0: /@next/env/13.1.0:
resolution: {integrity: sha512-6iNixFzCndH+Bl4FetQzOMjxCJqg8fs0LAlZviig1K6mIjOWH2m2oPcHcOg1Ta5VCe7Bx5KG1Hs+NrWDUkBt9A==} resolution: {integrity: sha512-6iNixFzCndH+Bl4FetQzOMjxCJqg8fs0LAlZviig1K6mIjOWH2m2oPcHcOg1Ta5VCe7Bx5KG1Hs+NrWDUkBt9A==}
dev: false
/@next/eslint-plugin-next/12.3.1: /@next/eslint-plugin-next/12.3.1:
resolution: {integrity: sha512-sw+lTf6r6P0j+g/n9y4qdWWI2syPqZx+uc0+B/fRENqfR3KpSid6MIKqc9gNwGhJASazEQ5b3w8h4cAET213jw==} resolution: {integrity: sha512-sw+lTf6r6P0j+g/n9y4qdWWI2syPqZx+uc0+B/fRENqfR3KpSid6MIKqc9gNwGhJASazEQ5b3w8h4cAET213jw==}
@@ -2990,7 +2989,6 @@ packages:
cpu: [arm] cpu: [arm]
os: [android] os: [android]
requiresBuild: true requiresBuild: true
dev: false
optional: true optional: true
/@next/swc-android-arm64/12.3.1: /@next/swc-android-arm64/12.3.1:
@@ -3008,7 +3006,6 @@ packages:
cpu: [arm64] cpu: [arm64]
os: [android] os: [android]
requiresBuild: true requiresBuild: true
dev: false
optional: true optional: true
/@next/swc-darwin-arm64/12.3.1: /@next/swc-darwin-arm64/12.3.1:
@@ -3026,7 +3023,6 @@ packages:
cpu: [arm64] cpu: [arm64]
os: [darwin] os: [darwin]
requiresBuild: true requiresBuild: true
dev: false
optional: true optional: true
/@next/swc-darwin-x64/12.3.1: /@next/swc-darwin-x64/12.3.1:
@@ -3044,7 +3040,6 @@ packages:
cpu: [x64] cpu: [x64]
os: [darwin] os: [darwin]
requiresBuild: true requiresBuild: true
dev: false
optional: true optional: true
/@next/swc-freebsd-x64/12.3.1: /@next/swc-freebsd-x64/12.3.1:
@@ -3062,7 +3057,6 @@ packages:
cpu: [x64] cpu: [x64]
os: [freebsd] os: [freebsd]
requiresBuild: true requiresBuild: true
dev: false
optional: true optional: true
/@next/swc-linux-arm-gnueabihf/12.3.1: /@next/swc-linux-arm-gnueabihf/12.3.1:
@@ -3080,7 +3074,6 @@ packages:
cpu: [arm] cpu: [arm]
os: [linux] os: [linux]
requiresBuild: true requiresBuild: true
dev: false
optional: true optional: true
/@next/swc-linux-arm64-gnu/12.3.1: /@next/swc-linux-arm64-gnu/12.3.1:
@@ -3098,7 +3091,6 @@ packages:
cpu: [arm64] cpu: [arm64]
os: [linux] os: [linux]
requiresBuild: true requiresBuild: true
dev: false
optional: true optional: true
/@next/swc-linux-arm64-musl/12.3.1: /@next/swc-linux-arm64-musl/12.3.1:
@@ -3116,7 +3108,6 @@ packages:
cpu: [arm64] cpu: [arm64]
os: [linux] os: [linux]
requiresBuild: true requiresBuild: true
dev: false
optional: true optional: true
/@next/swc-linux-x64-gnu/12.3.1: /@next/swc-linux-x64-gnu/12.3.1:
@@ -3134,7 +3125,6 @@ packages:
cpu: [x64] cpu: [x64]
os: [linux] os: [linux]
requiresBuild: true requiresBuild: true
dev: false
optional: true optional: true
/@next/swc-linux-x64-musl/12.3.1: /@next/swc-linux-x64-musl/12.3.1:
@@ -3152,7 +3142,6 @@ packages:
cpu: [x64] cpu: [x64]
os: [linux] os: [linux]
requiresBuild: true requiresBuild: true
dev: false
optional: true optional: true
/@next/swc-win32-arm64-msvc/12.3.1: /@next/swc-win32-arm64-msvc/12.3.1:
@@ -3170,7 +3159,6 @@ packages:
cpu: [arm64] cpu: [arm64]
os: [win32] os: [win32]
requiresBuild: true requiresBuild: true
dev: false
optional: true optional: true
/@next/swc-win32-ia32-msvc/12.3.1: /@next/swc-win32-ia32-msvc/12.3.1:
@@ -3188,7 +3176,6 @@ packages:
cpu: [ia32] cpu: [ia32]
os: [win32] os: [win32]
requiresBuild: true requiresBuild: true
dev: false
optional: true optional: true
/@next/swc-win32-x64-msvc/12.3.1: /@next/swc-win32-x64-msvc/12.3.1:
@@ -3206,7 +3193,6 @@ packages:
cpu: [x64] cpu: [x64]
os: [win32] os: [win32]
requiresBuild: true requiresBuild: true
dev: false
optional: true optional: true
/@nodelib/fs.scandir/2.1.5: /@nodelib/fs.scandir/2.1.5:
@@ -3569,7 +3555,6 @@ packages:
resolution: {integrity: sha512-4C7nX/dvpzB7za4Ql9K81xK3HPxCpHMgwTZVyf+9JQ6VUbn9jjZVN7/Nkdz/Ugzs2CSjqnL/UPXroiVBVHUWUw==} resolution: {integrity: sha512-4C7nX/dvpzB7za4Ql9K81xK3HPxCpHMgwTZVyf+9JQ6VUbn9jjZVN7/Nkdz/Ugzs2CSjqnL/UPXroiVBVHUWUw==}
dependencies: dependencies:
tslib: 2.4.0 tslib: 2.4.0
dev: false
/@szmarczak/http-timer/5.0.1: /@szmarczak/http-timer/5.0.1:
resolution: {integrity: sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==} resolution: {integrity: sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==}
@@ -4536,7 +4521,6 @@ packages:
/client-only/0.0.1: /client-only/0.0.1:
resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==}
dev: false
/cliui/6.0.0: /cliui/6.0.0:
resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==} resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==}
@@ -7468,7 +7452,6 @@ packages:
resolution: {integrity: sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==} resolution: {integrity: sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==}
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
hasBin: true hasBin: true
dev: false
/natural-compare-lite/1.4.0: /natural-compare-lite/1.4.0:
resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==} resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==}
@@ -7591,7 +7574,6 @@ packages:
transitivePeerDependencies: transitivePeerDependencies:
- '@babel/core' - '@babel/core'
- babel-plugin-macros - babel-plugin-macros
dev: false
/node-domexception/1.0.0: /node-domexception/1.0.0:
resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==}
@@ -7942,7 +7924,6 @@ packages:
nanoid: 3.3.4 nanoid: 3.3.4
picocolors: 1.0.0 picocolors: 1.0.0
source-map-js: 1.0.2 source-map-js: 1.0.2
dev: false
/preferred-pm/3.0.3: /preferred-pm/3.0.3:
resolution: {integrity: sha512-+wZgbxNES/KlJs9q40F/1sfOd/j7f1O9JaHcW5Dsn3aUUOZg3L2bjpVUcKV2jvtElYfoTuQiNeMfQJ4kwUAhCQ==} resolution: {integrity: sha512-+wZgbxNES/KlJs9q40F/1sfOd/j7f1O9JaHcW5Dsn3aUUOZg3L2bjpVUcKV2jvtElYfoTuQiNeMfQJ4kwUAhCQ==}
@@ -8112,7 +8093,6 @@ packages:
loose-envify: 1.4.0 loose-envify: 1.4.0
react: 18.2.0 react: 18.2.0
scheduler: 0.23.0 scheduler: 0.23.0
dev: false
/react-i18next/11.18.6_i18next@21.10.0: /react-i18next/11.18.6_i18next@21.10.0:
resolution: {integrity: sha512-yHb2F9BiT0lqoQDt8loZ5gWP331GwctHz9tYQ8A2EIEUu+CcEdjBLQWli1USG3RdWQt3W+jqQLg/d4rrQR96LA==} resolution: {integrity: sha512-yHb2F9BiT0lqoQDt8loZ5gWP331GwctHz9tYQ8A2EIEUu+CcEdjBLQWli1USG3RdWQt3W+jqQLg/d4rrQR96LA==}
@@ -8209,7 +8189,6 @@ packages:
engines: {node: '>=0.10.0'} engines: {node: '>=0.10.0'}
dependencies: dependencies:
loose-envify: 1.4.0 loose-envify: 1.4.0
dev: false
/read-pkg-up/7.0.1: /read-pkg-up/7.0.1:
resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==} resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==}
@@ -8487,7 +8466,6 @@ packages:
resolution: {integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==} resolution: {integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==}
dependencies: dependencies:
loose-envify: 1.4.0 loose-envify: 1.4.0
dev: false
/schema-utils/2.7.1: /schema-utils/2.7.1:
resolution: {integrity: sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==} resolution: {integrity: sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==}
@@ -8646,7 +8624,6 @@ packages:
/source-map-js/1.0.2: /source-map-js/1.0.2:
resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==}
engines: {node: '>=0.10.0'} engines: {node: '>=0.10.0'}
dev: false
/source-map-support/0.5.13: /source-map-support/0.5.13:
resolution: {integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==} resolution: {integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==}
@@ -8895,7 +8872,6 @@ packages:
dependencies: dependencies:
client-only: 0.0.1 client-only: 0.0.1
react: 18.2.0 react: 18.2.0
dev: false
/stylis/4.0.13: /stylis/4.0.13:
resolution: {integrity: sha512-xGPXiFVl4YED9Jh7Euv2V220mriG9u4B2TA6Ybjc1catrstKD2PpIdU3U0RKpkVBC2EhmL/F0sPCr9vrFTNRag==} resolution: {integrity: sha512-xGPXiFVl4YED9Jh7Euv2V220mriG9u4B2TA6Ybjc1catrstKD2PpIdU3U0RKpkVBC2EhmL/F0sPCr9vrFTNRag==}