From 356742e222a5b76fccded3ca7731a6af6c7bf6d3 Mon Sep 17 00:00:00 2001 From: Korbinian Date: Thu, 21 Mar 2024 22:51:34 +0100 Subject: [PATCH 1/3] add base64 support for NFT metadata --- .../src/libs/token/fetchNFTImageUrl.ts | 17 +- .../src/libs/token/fetchNFTMetadata.test.ts | 283 ++++++++++++++++++ .../src/libs/token/fetchNFTMetadata.ts | 24 ++ packages/bridge-ui/src/libs/token/types.ts | 2 +- packages/bridge-ui/src/tests/mocks/tokens.ts | 25 +- 5 files changed, 341 insertions(+), 10 deletions(-) create mode 100644 packages/bridge-ui/src/libs/token/fetchNFTMetadata.test.ts diff --git a/packages/bridge-ui/src/libs/token/fetchNFTImageUrl.ts b/packages/bridge-ui/src/libs/token/fetchNFTImageUrl.ts index 17bd76ec2b4..18546a81450 100644 --- a/packages/bridge-ui/src/libs/token/fetchNFTImageUrl.ts +++ b/packages/bridge-ui/src/libs/token/fetchNFTImageUrl.ts @@ -1,3 +1,4 @@ +import { decodeBase64ToJson } from 'scripts/utils/decodeBase64ToJson'; import { get } from 'svelte/store'; import { destNetwork } from '$components/Bridge/state'; @@ -62,12 +63,18 @@ const fetchImageUrl = async (url: string): Promise => { return url; } else { log('fetchImageUrl failed to load image'); - const newUrl = await resolveIPFSUri(url); - if (newUrl) { - const gatewayImageLoaded = await testImageLoad(newUrl); - if (gatewayImageLoaded) { - return newUrl; + if (url.startsWith('ipfs://')) { + const newUrl = await resolveIPFSUri(url); + if (newUrl) { + const gatewayImageLoaded = await testImageLoad(newUrl); + if (gatewayImageLoaded) { + return newUrl; + } } + } else if (url.startsWith('data:image/svg+xml;base64,')) { + const base64 = url.replace('data:image/svg+xml;base64,', ''); + const decodedImage = decodeBase64ToJson(base64); + return decodedImage; } } throw new Error(`No image found for ${url}`); diff --git a/packages/bridge-ui/src/libs/token/fetchNFTMetadata.test.ts b/packages/bridge-ui/src/libs/token/fetchNFTMetadata.test.ts new file mode 100644 index 00000000000..1d22ca682df --- /dev/null +++ b/packages/bridge-ui/src/libs/token/fetchNFTMetadata.test.ts @@ -0,0 +1,283 @@ +import axios from 'axios'; +import { type Address, type Chain, zeroAddress } from 'viem'; + +import { destNetwork } from '$components/Bridge/state'; +import { FetchMetadataError } from '$libs/error'; +import { L1_CHAIN_ID, L2_CHAIN_ID, MOCK_ERC721, MOCK_ERC721_BASE64, MOCK_METADATA, MOCK_METADATA_BASE64 } from '$mocks'; +import { getMetadataFromCache, isMetadataCached } from '$stores/metadata'; +import { connectedSourceChain } from '$stores/network'; +import type { TokenInfo } from '$stores/tokenInfo'; + +import { fetchNFTMetadata } from './fetchNFTMetadata'; +import { getTokenAddresses } from './getTokenAddresses'; +import { getTokenWithInfoFromAddress } from './getTokenWithInfoFromAddress'; + +vi.mock('../../generated/customTokenConfig', () => { + const mockERC20 = { + name: 'MockERC20', + addresses: { '1': zeroAddress }, + symbol: 'MTF', + decimals: 18, + type: 'ERC20', + }; + return { + customToken: [mockERC20], + }; +}); + +vi.mock('./getTokenAddresses'); + +describe('fetchNFTMetadata()', () => { + it('should return null if srcChainId or destChainId is not defined', async () => { + const result = await fetchNFTMetadata(MOCK_ERC721); + expect(result).toBe(null); + }); + + it('should return null if tokenInfo or tokenInfo.canonical.address is not defined', async () => { + // Given + connectedSourceChain.set({ id: L1_CHAIN_ID } as Chain); + destNetwork.set({ id: L2_CHAIN_ID } as Chain); + + vi.mock('$stores/metadata', () => ({ + isMetadataCached: vi.fn(), + getMetadataFromCache: vi.fn(), + metadataCache: { + update: vi.fn(), + }, + })); + + const mockTokenInfo = { + canonical: null, + bridged: { + chainId: L2_CHAIN_ID, + address: MOCK_ERC721.addresses.L2_CHAIN_ID as Address, + }, + } satisfies TokenInfo; + + vi.mocked(isMetadataCached).mockReturnValue(true); + vi.mocked(getMetadataFromCache).mockReturnValue(MOCK_METADATA); + + vi.mocked(getTokenAddresses).mockResolvedValue(mockTokenInfo); + // When + const result = await fetchNFTMetadata(MOCK_ERC721); + + // Then + expect(result).toBe(null); + }); + + describe('when metadata is cached', () => { + beforeAll(() => { + connectedSourceChain.set({ id: L1_CHAIN_ID } as Chain); + destNetwork.set({ id: L2_CHAIN_ID } as Chain); + + vi.mock('$stores/metadata', () => ({ + isMetadataCached: vi.fn(), + getMetadataFromCache: vi.fn(), + metadataCache: { + update: vi.fn(), + }, + })); + }); + + afterAll(() => { + vi.restoreAllMocks(); + vi.resetAllMocks(); + vi.resetModules(); + }); + + it('should return metadata if metadata is cached', async () => { + // Given + const mockTokenInfo = { + canonical: { + chainId: L1_CHAIN_ID, + address: MOCK_ERC721.addresses.L1_CHAIN_ID as Address, + }, + bridged: { + chainId: L2_CHAIN_ID, + address: MOCK_ERC721.addresses.L2_CHAIN_ID as Address, + }, + } satisfies TokenInfo; + + vi.mocked(isMetadataCached).mockReturnValue(true); + vi.mocked(getMetadataFromCache).mockReturnValue(MOCK_METADATA); + vi.mocked(getTokenAddresses).mockResolvedValue(mockTokenInfo); + + // When + const result = await fetchNFTMetadata(MOCK_ERC721); + + // Then + expect(result).toBe(MOCK_METADATA); + }); + }); + + describe('when metadata is not cached', () => { + beforeAll(() => { + vi.mock('$stores/metadata', () => ({ + isMetadataCached: vi.fn(), + getMetadataFromCache: vi.fn(), + metadataCache: { + update: vi.fn(), + }, + })); + connectedSourceChain.set({ id: L1_CHAIN_ID } as Chain); + destNetwork.set({ id: L2_CHAIN_ID } as Chain); + }); + + afterAll(() => { + vi.restoreAllMocks(); + vi.resetAllMocks(); + vi.resetModules(); + }); + + it('should return metadata if uri contains data:application/json;base64', async () => { + // Given + vi.mock('axios'); + const MOCK_NFT = { + ...MOCK_ERC721_BASE64, + }; + + const mockTokenInfo = { + canonical: { + chainId: L1_CHAIN_ID, + address: MOCK_ERC721.addresses.L1_CHAIN_ID as Address, + }, + bridged: { + chainId: L2_CHAIN_ID, + address: MOCK_ERC721.addresses.L2_CHAIN_ID as Address, + }, + } satisfies TokenInfo; + + vi.mocked(getTokenAddresses).mockResolvedValue(mockTokenInfo); + vi.mocked(isMetadataCached).mockReturnValue(false); + vi.mocked(axios.get).mockResolvedValue({ status: 200, data: MOCK_METADATA_BASE64 }); + + // When + const result = await fetchNFTMetadata(MOCK_NFT); + + // Then + expect(result).toStrictEqual(MOCK_METADATA_BASE64); + }); + + it('should return metadata if uri contains ipfs:// and ipfs contains image', async () => { + // Given + vi.mock('axios'); + + const MOCK_NFT = { + ...MOCK_ERC721, + uri: 'ipfs://someuri', + }; + + const mockTokenInfo = { + canonical: { + chainId: L1_CHAIN_ID, + address: MOCK_ERC721.addresses.L1_CHAIN_ID as Address, + }, + bridged: { + chainId: L2_CHAIN_ID, + address: MOCK_ERC721.addresses.L2_CHAIN_ID as Address, + }, + } satisfies TokenInfo; + + vi.mocked(getTokenAddresses).mockResolvedValue(mockTokenInfo); + vi.mocked(isMetadataCached).mockReturnValue(false); + vi.mocked(axios.get).mockResolvedValue({ status: 200, data: MOCK_METADATA }); + + // When + const result = await fetchNFTMetadata(MOCK_NFT); + + // Then + expect(result).toBe(MOCK_METADATA); + }); + + describe('when uri is not found', () => { + describe('fetchCrossChainNFTMetadata', () => { + beforeAll(() => { + vi.mock('axios'); + + vi.mock('./fetchNFTMetadata', async (importOriginal) => { + const actual = await importOriginal(); + return { + ...actual, + crossChainFetchNFTMetadata: vi.fn().mockResolvedValue(MOCK_METADATA), + }; + }); + + vi.mock('./getTokenWithInfoFromAddress'); + }); + + afterEach(() => { + vi.restoreAllMocks(); + vi.resetAllMocks(); + vi.resetModules(); + }); + + it('should return metadata if canonical token has valid metadata ', async () => { + // Given + const MOCK_BRIDGED_NFT = { + ...MOCK_ERC721, + uri: '', + }; + + const MOCK_CANONICAL_NFT = { + ...MOCK_ERC721, + uri: 'ipfs://someUri', + }; + + const mockTokenInfo = { + canonical: { + chainId: L1_CHAIN_ID, + address: MOCK_ERC721.addresses.L1_CHAIN_ID as Address, + }, + bridged: { + chainId: L2_CHAIN_ID, + address: MOCK_ERC721.addresses.L2_CHAIN_ID as Address, + }, + } satisfies TokenInfo; + + vi.mocked(getTokenAddresses).mockResolvedValue(mockTokenInfo).mockResolvedValue(mockTokenInfo); + vi.mocked(isMetadataCached).mockReturnValue(false); + + vi.mocked(getTokenWithInfoFromAddress).mockResolvedValue(MOCK_CANONICAL_NFT); + + // When + const result = await fetchNFTMetadata(MOCK_BRIDGED_NFT); + + // Then + expect(result).toBe(MOCK_METADATA); + }); + + it('should throw FetchMetadataError if no uri is found crosschain either', async () => { + // Given + const MOCK_BRIDGED_NFT = { + ...MOCK_ERC721, + uri: '', + }; + + const MOCK_CANONICAL_NFT = { + ...MOCK_ERC721, + uri: '', // No uri on canonical either + }; + + const mockTokenInfo = { + canonical: { + chainId: L1_CHAIN_ID, + address: MOCK_ERC721.addresses.L1_CHAIN_ID as Address, + }, + bridged: { + chainId: L2_CHAIN_ID, + address: MOCK_ERC721.addresses.L2_CHAIN_ID as Address, + }, + } satisfies TokenInfo; + + vi.mocked(getTokenAddresses).mockResolvedValue(mockTokenInfo).mockResolvedValue(mockTokenInfo); + vi.mocked(isMetadataCached).mockReturnValue(false); + + vi.mocked(getTokenWithInfoFromAddress).mockResolvedValue(MOCK_CANONICAL_NFT); + + // Then + await expect(fetchNFTMetadata(MOCK_BRIDGED_NFT)).rejects.toBeInstanceOf(FetchMetadataError); + }); + }); + }); + }); +}); diff --git a/packages/bridge-ui/src/libs/token/fetchNFTMetadata.ts b/packages/bridge-ui/src/libs/token/fetchNFTMetadata.ts index 42de7877259..9d258519764 100644 --- a/packages/bridge-ui/src/libs/token/fetchNFTMetadata.ts +++ b/packages/bridge-ui/src/libs/token/fetchNFTMetadata.ts @@ -1,4 +1,5 @@ import axios, { AxiosError, type AxiosRequestConfig } from 'axios'; +import { decodeBase64ToJson } from 'scripts/utils/decodeBase64ToJson'; import { get } from 'svelte/store'; import { destNetwork } from '$components/Bridge/state'; @@ -42,6 +43,29 @@ export async function fetchNFTMetadata(token: NFT): Promise // https://eips.ethereum.org/EIPS/eip-681 // TODO: implement EIP-681, for now we treat it as invalid URI uri = ''; + } else if (uri && uri.startsWith('data:application/json;base64')) { + // we have a base64 encoded json + const base64 = uri.replace('data:application/json;base64,', ''); + const decodedData = decodeBase64ToJson(base64); + const metadata: NFTMetadata = { + ...decodedData, + image: decodedData.image, + name: decodedData.name, + description: decodedData.description, + external_url: decodedData.external_url, + }; + if (decodedData.image) { + // Update cache + metadataCache.update((cache) => { + const key = tokenInfo.canonical?.address; + + if (key) { + cache.set(key, metadata); + } + return cache; + }); + return metadata; + } } if (!uri || uri === '') { const crossChainMetadata = await crossChainFetchNFTMetadata(token); diff --git a/packages/bridge-ui/src/libs/token/types.ts b/packages/bridge-ui/src/libs/token/types.ts index e4ea3db541c..da71e4b15e4 100644 --- a/packages/bridge-ui/src/libs/token/types.ts +++ b/packages/bridge-ui/src/libs/token/types.ts @@ -34,7 +34,7 @@ export type NFT = Token & { // Based on https://docs.opensea.io/docs/metadata-standards export type NFTMetadata = { description: string; - external_url: string; + external_url?: string; image: string; name: string; //todo: more metadata? diff --git a/packages/bridge-ui/src/tests/mocks/tokens.ts b/packages/bridge-ui/src/tests/mocks/tokens.ts index 2172bcd4e1e..56eb22b7bdd 100644 --- a/packages/bridge-ui/src/tests/mocks/tokens.ts +++ b/packages/bridge-ui/src/tests/mocks/tokens.ts @@ -1,10 +1,15 @@ import { type NFT, type NFTMetadata, TokenType } from '$libs/token/types'; +const base64Image = + 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzIwIiBoZWlnaHQ9IjMyMCIgdmlld0JveD0iMCAwIDMyMCAzMjAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc2hhcGUtcmVuZGVyaW5nPSJjcmlzcEVkZ2VzIj48cmVjdCB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmaWxsPSIjZDVkN2UxIiAvPjxyZWN0IHdpZHRoPSIxNDAiIGhlaWdodD0iMTAiIHg9IjkwIiB5PSIyMTAiIGZpbGw9IiNmZmZkZjIiIC8+PHJlY3Qgd2lkdGg9IjE0MCIgaGVpZ2h0PSIxMCIgeD0iOTAiIHk9IjIyMCIgZmlsbD0iI2ZmZmRmMiIgLz48cmVjdCB3aWR0aD0iMTQwIiBoZWlnaHQ9IjEwIiB4PSI5MCIgeT0iMjMwIiBmaWxsPSIjZmZmZGYyIiAvPjxyZWN0IHdpZHRoPSIxNDAiIGhlaWdodD0iMTAiIHg9IjkwIiB5PSIyNDAiIGZpbGw9IiNmZmZkZjIiIC8+PHJlY3Qgd2lkdGg9IjIwIiBoZWlnaHQ9IjEwIiB4PSI5MCIgeT0iMjUwIiBmaWxsPSIjZmZmZGYyIiAvPjxyZWN0IHdpZHRoPSIxMTAiIGhlaWdodD0iMTAiIHg9IjEyMCIgeT0iMjUwIiBmaWxsPSIjZmZmZGYyIiAvPjxyZWN0IHdpZHRoPSIyMCIgaGVpZ2h0PSIxMCIgeD0iOTAiIHk9IjI2MCIgZmlsbD0iI2ZmZmRmMiIgLz48cmVjdCB3aWR0aD0iMTEwIiBoZWlnaHQ9IjEwIiB4PSIxMjAiIHk9IjI2MCIgZmlsbD0iI2ZmZmRmMiIgLz48cmVjdCB3aWR0aD0iMjAiIGhlaWdodD0iMTAiIHg9IjkwIiB5PSIyNzAiIGZpbGw9IiNmZmZkZjIiIC8+PHJlY3Qgd2lkdGg9IjExMCIgaGVpZ2h0PSIxMCIgeD0iMTIwIiB5PSIyNzAiIGZpbGw9IiNmZmZkZjIiIC8+PHJlY3Qgd2lkdGg9IjIwIiBoZWlnaHQ9IjEwIiB4PSI5MCIgeT0iMjgwIiBmaWxsPSIjZmZmZGYyIiAvPjxyZWN0IHdpZHRoPSIxMTAiIGhlaWdodD0iMTAiIHg9IjEyMCIgeT0iMjgwIiBmaWxsPSIjZmZmZGYyIiAvPjxyZWN0IHdpZHRoPSIyMCIgaGVpZ2h0PSIxMCIgeD0iOTAiIHk9IjI5MCIgZmlsbD0iI2ZmZmRmMiIgLz48cmVjdCB3aWR0aD0iMTEwIiBoZWlnaHQ9IjEwIiB4PSIxMjAiIHk9IjI5MCIgZmlsbD0iI2ZmZmRmMiIgLz48cmVjdCB3aWR0aD0iMjAiIGhlaWdodD0iMTAiIHg9IjkwIiB5PSIzMDAiIGZpbGw9IiNmZmZkZjIiIC8+PHJlY3Qgd2lkdGg9IjExMCIgaGVpZ2h0PSIxMCIgeD0iMTIwIiB5PSIzMDAiIGZpbGw9IiNmZmZkZjIiIC8+PHJlY3Qgd2lkdGg9IjIwIiBoZWlnaHQ9IjEwIiB4PSI5MCIgeT0iMzEwIiBmaWxsPSIjZmZmZGYyIiAvPjxyZWN0IHdpZHRoPSIxMTAiIGhlaWdodD0iMTAiIHg9IjEyMCIgeT0iMzEwIiBmaWxsPSIjZmZmZGYyIiAvPjxyZWN0IHdpZHRoPSIzMCIgaGVpZ2h0PSIxMCIgeD0iMTYwIiB5PSIyMjAiIGZpbGw9IiMwMDAwMDAiIC8+PHJlY3Qgd2lkdGg9IjcwIiBoZWlnaHQ9IjEwIiB4PSIxNDAiIHk9IjIzMCIgZmlsbD0iIzAwMDAwMCIgLz48cmVjdCB3aWR0aD0iNzAiIGhlaWdodD0iMTAiIHg9IjE0MCIgeT0iMjQwIiBmaWxsPSIjMDAwMDAwIiAvPjxyZWN0IHdpZHRoPSIzMCIgaGVpZ2h0PSIxMCIgeD0iMTMwIiB5PSIyNTAiIGZpbGw9IiMwMDAwMDAiIC8+PHJlY3Qgd2lkdGg9IjMwIiBoZWlnaHQ9IjEwIiB4PSIxNjAiIHk9IjI1MCIgZmlsbD0iI2ZmZmZmZiIgLz48cmVjdCB3aWR0aD0iMzAiIGhlaWdodD0iMTAiIHg9IjE5MCIgeT0iMjUwIiBmaWxsPSIjMDAwMDAwIiAvPjxyZWN0IHdpZHRoPSIzMCIgaGVpZ2h0PSIxMCIgeD0iMTMwIiB5PSIyNjAiIGZpbGw9IiMwMDAwMDAiIC8+PHJlY3Qgd2lkdGg9IjEwIiBoZWlnaHQ9IjEwIiB4PSIxNjAiIHk9IjI2MCIgZmlsbD0iI2ZmZmZmZiIgLz48cmVjdCB3aWR0aD0iMTAiIGhlaWdodD0iMTAiIHg9IjE4MCIgeT0iMjYwIiBmaWxsPSIjZmZmZmZmIiAvPjxyZWN0IHdpZHRoPSIzMCIgaGVpZ2h0PSIxMCIgeD0iMTkwIiB5PSIyNjAiIGZpbGw9IiMwMDAwMDAiIC8+PHJlY3Qgd2lkdGg9IjMwIiBoZWlnaHQ9IjEwIiB4PSIxMzAiIHk9IjI3MCIgZmlsbD0iIzAwMDAwMCIgLz48cmVjdCB3aWR0aD0iMzAiIGhlaWdodD0iMTAiIHg9IjE2MCIgeT0iMjcwIiBmaWxsPSIjZmZmZmZmIiAvPjxyZWN0IHdpZHRoPSIzMCIgaGVpZ2h0PSIxMCIgeD0iMTkwIiB5PSIyNzAiIGZpbGw9IiMwMDAwMDAiIC8+PHJlY3Qgd2lkdGg9IjcwIiBoZWlnaHQ9IjEwIiB4PSIxNDAiIHk9IjI4MCIgZmlsbD0iIzAwMDAwMCIgLz48cmVjdCB3aWR0aD0iNzAiIGhlaWdodD0iMTAiIHg9IjE0MCIgeT0iMjkwIiBmaWxsPSIjMDAwMDAwIiAvPjxyZWN0IHdpZHRoPSIzMCIgaGVpZ2h0PSIxMCIgeD0iMTYwIiB5PSIzMDAiIGZpbGw9IiMwMDAwMDAiIC8+PHJlY3Qgd2lkdGg9IjE2MCIgaGVpZ2h0PSIxMCIgeD0iODAiIHk9IjQwIiBmaWxsPSIjZmZmMGVlIiAvPjxyZWN0IHdpZHRoPSIxNjAiIGhlaWdodD0iMTAiIHg9IjgwIiB5PSI1MCIgZmlsbD0iI2ZmZjBlZSIgLz48cmVjdCB3aWR0aD0iNDAiIGhlaWdodD0iMTAiIHg9IjgwIiB5PSI2MCIgZmlsbD0iI2ZmZjBlZSIgLz48cmVjdCB3aWR0aD0iODAiIGhlaWdodD0iMTAiIHg9IjEyMCIgeT0iNjAiIGZpbGw9IiNkNmMzYmUiIC8+PHJlY3Qgd2lkdGg9IjQwIiBoZWlnaHQ9IjEwIiB4PSIyMDAiIHk9IjYwIiBmaWxsPSIjZmZmMGVlIiAvPjxyZWN0IHdpZHRoPSIzMCIgaGVpZ2h0PSIxMCIgeD0iODAiIHk9IjcwIiBmaWxsPSIjZmZmMGVlIiAvPjxyZWN0IHdpZHRoPSIyMCIgaGVpZ2h0PSIxMCIgeD0iMTEwIiB5PSI3MCIgZmlsbD0iI2Q2YzNiZSIgLz48cmVjdCB3aWR0aD0iMTAiIGhlaWdodD0iMTAiIHg9IjEzMCIgeT0iNzAiIGZpbGw9IiMwMDAwMDAiIC8+PHJlY3Qgd2lkdGg9IjQwIiBoZWlnaHQ9IjEwIiB4PSIxNDAiIHk9IjcwIiBmaWxsPSIjZDZjM2JlIiAvPjxyZWN0IHdpZHRoPSIxMCIgaGVpZ2h0PSIxMCIgeD0iMTgwIiB5PSI3MCIgZmlsbD0iIzAwMDAwMCIgLz48cmVjdCB3aWR0aD0iMjAiIGhlaWdodD0iMTAiIHg9IjE5MCIgeT0iNzAiIGZpbGw9IiNkNmMzYmUiIC8+PHJlY3Qgd2lkdGg9IjMwIiBoZWlnaHQ9IjEwIiB4PSIyMTAiIHk9IjcwIiBmaWxsPSIjZmZmMGVlIiAvPjxyZWN0IHdpZHRoPSIzMCIgaGVpZ2h0PSIxMCIgeD0iODAiIHk9IjgwIiBmaWxsPSIjZmZmMGVlIiAvPjxyZWN0IHdpZHRoPSIyMCIgaGVpZ2h0PSIxMCIgeD0iMTEwIiB5PSI4MCIgZmlsbD0iI2Q2YzNiZSIgLz48cmVjdCB3aWR0aD0iMTAiIGhlaWdodD0iMTAiIHg9IjEzMCIgeT0iODAiIGZpbGw9IiMwMDAwMDAiIC8+PHJlY3Qgd2lkdGg9IjQwIiBoZWlnaHQ9IjEwIiB4PSIxNDAiIHk9IjgwIiBmaWxsPSIjZDZjM2JlIiAvPjxyZWN0IHdpZHRoPSIxMCIgaGVpZ2h0PSIxMCIgeD0iMTgwIiB5PSI4MCIgZmlsbD0iIzAwMDAwMCIgLz48cmVjdCB3aWR0aD0iMjAiIGhlaWdodD0iMTAiIHg9IjE5MCIgeT0iODAiIGZpbGw9IiNkNmMzYmUiIC8+PHJlY3Qgd2lkdGg9IjMwIiBoZWlnaHQ9IjEwIiB4PSIyMTAiIHk9IjgwIiBmaWxsPSIjZmZmMGVlIiAvPjxyZWN0IHdpZHRoPSIzMCIgaGVpZ2h0PSIxMCIgeD0iODAiIHk9IjkwIiBmaWxsPSIjZmZmMGVlIiAvPjxyZWN0IHdpZHRoPSIxMCIgaGVpZ2h0PSIxMCIgeD0iMTEwIiB5PSI5MCIgZmlsbD0iI2Q2YzNiZSIgLz48cmVjdCB3aWR0aD0iMzAiIGhlaWdodD0iMTAiIHg9IjEyMCIgeT0iOTAiIGZpbGw9IiNiMjk1OGQiIC8+PHJlY3Qgd2lkdGg9IjIwIiBoZWlnaHQ9IjEwIiB4PSIxNTAiIHk9IjkwIiBmaWxsPSIjZDZjM2JlIiAvPjxyZWN0IHdpZHRoPSIzMCIgaGVpZ2h0PSIxMCIgeD0iMTcwIiB5PSI5MCIgZmlsbD0iI2IyOTU4ZCIgLz48cmVjdCB3aWR0aD0iMTAiIGhlaWdodD0iMTAiIHg9IjIwMCIgeT0iOTAiIGZpbGw9IiNkNmMzYmUiIC8+PHJlY3Qgd2lkdGg9IjMwIiBoZWlnaHQ9IjEwIiB4PSIyMTAiIHk9IjkwIiBmaWxsPSIjZmZmMGVlIiAvPjxyZWN0IHdpZHRoPSIzMCIgaGVpZ2h0PSIxMCIgeD0iODAiIHk9IjEwMCIgZmlsbD0iI2ZmZjBlZSIgLz48cmVjdCB3aWR0aD0iNDAiIGhlaWdodD0iMTAiIHg9IjExMCIgeT0iMTAwIiBmaWxsPSIjZDZjM2JlIiAvPjxyZWN0IHdpZHRoPSIyMCIgaGVpZ2h0PSIxMCIgeD0iMTUwIiB5PSIxMDAiIGZpbGw9IiMwMDAwMDAiIC8+PHJlY3Qgd2lkdGg9IjQwIiBoZWlnaHQ9IjEwIiB4PSIxNzAiIHk9IjEwMCIgZmlsbD0iI2Q2YzNiZSIgLz48cmVjdCB3aWR0aD0iMzAiIGhlaWdodD0iMTAiIHg9IjIxMCIgeT0iMTAwIiBmaWxsPSIjZmZmMGVlIiAvPjxyZWN0IHdpZHRoPSIzMCIgaGVpZ2h0PSIxMCIgeD0iODAiIHk9IjExMCIgZmlsbD0iI2ZmZjBlZSIgLz48cmVjdCB3aWR0aD0iNDAiIGhlaWdodD0iMTAiIHg9IjExMCIgeT0iMTEwIiBmaWxsPSIjZDZjM2JlIiAvPjxyZWN0IHdpZHRoPSIyMCIgaGVpZ2h0PSIxMCIgeD0iMTUwIiB5PSIxMTAiIGZpbGw9IiMwMDAwMDAiIC8+PHJlY3Qgd2lkdGg9IjQwIiBoZWlnaHQ9IjEwIiB4PSIxNzAiIHk9IjExMCIgZmlsbD0iI2Q2YzNiZSIgLz48cmVjdCB3aWR0aD0iMzAiIGhlaWdodD0iMTAiIHg9IjIxMCIgeT0iMTEwIiBmaWxsPSIjZmZmMGVlIiAvPjxyZWN0IHdpZHRoPSI0MCIgaGVpZ2h0PSIxMCIgeD0iODAiIHk9IjEyMCIgZmlsbD0iI2ZmZjBlZSIgLz48cmVjdCB3aWR0aD0iODAiIGhlaWdodD0iMTAiIHg9IjEyMCIgeT0iMTIwIiBmaWxsPSIjZDZjM2JlIiAvPjxyZWN0IHdpZHRoPSI0MCIgaGVpZ2h0PSIxMCIgeD0iMjAwIiB5PSIxMjAiIGZpbGw9IiNmZmYwZWUiIC8+PHJlY3Qgd2lkdGg9IjE2MCIgaGVpZ2h0PSIxMCIgeD0iODAiIHk9IjEzMCIgZmlsbD0iI2ZmZjBlZSIgLz48cmVjdCB3aWR0aD0iNDAiIGhlaWdodD0iMTAiIHg9IjgwIiB5PSIxNDAiIGZpbGw9IiNmZmYwZWUiIC8+PHJlY3Qgd2lkdGg9IjgwIiBoZWlnaHQ9IjEwIiB4PSIxMjAiIHk9IjE0MCIgZmlsbD0iI2Q2YzNiZSIgLz48cmVjdCB3aWR0aD0iNDAiIGhlaWdodD0iMTAiIHg9IjIwMCIgeT0iMTQwIiBmaWxsPSIjZmZmMGVlIiAvPjxyZWN0IHdpZHRoPSIzMCIgaGVpZ2h0PSIxMCIgeD0iODAiIHk9IjE1MCIgZmlsbD0iI2ZmZjBlZSIgLz48cmVjdCB3aWR0aD0iMjAiIGhlaWdodD0iMTAiIHg9IjExMCIgeT0iMTUwIiBmaWxsPSIjZDZjM2JlIiAvPjxyZWN0IHdpZHRoPSIxMCIgaGVpZ2h0PSIxMCIgeD0iMTMwIiB5PSIxNTAiIGZpbGw9IiMwMDAwMDAiIC8+PHJlY3Qgd2lkdGg9IjQwIiBoZWlnaHQ9IjEwIiB4PSIxNDAiIHk9IjE1MCIgZmlsbD0iI2Q2YzNiZSIgLz48cmVjdCB3aWR0aD0iMTAiIGhlaWdodD0iMTAiIHg9IjE4MCIgeT0iMTUwIiBmaWxsPSIjMDAwMDAwIiAvPjxyZWN0IHdpZHRoPSIyMCIgaGVpZ2h0PSIxMCIgeD0iMTkwIiB5PSIxNTAiIGZpbGw9IiNkNmMzYmUiIC8+PHJlY3Qgd2lkdGg9IjMwIiBoZWlnaHQ9IjEwIiB4PSIyMTAiIHk9IjE1MCIgZmlsbD0iI2ZmZjBlZSIgLz48cmVjdCB3aWR0aD0iMzAiIGhlaWdodD0iMTAiIHg9IjgwIiB5PSIxNjAiIGZpbGw9IiNmZmYwZWUiIC8+PHJlY3Qgd2lkdGg9IjIwIiBoZWlnaHQ9IjEwIiB4PSIxMTAiIHk9IjE2MCIgZmlsbD0iI2Q2YzNiZSIgLz48cmVjdCB3aWR0aD0iMTAiIGhlaWdodD0iMTAiIHg9IjEzMCIgeT0iMTYwIiBmaWxsPSIjMDAwMDAwIiAvPjxyZWN0IHdpZHRoPSI0MCIgaGVpZ2h0PSIxMCIgeD0iMTQwIiB5PSIxNjAiIGZpbGw9IiNkNmMzYmUiIC8+PHJlY3Qgd2lkdGg9IjEwIiBoZWlnaHQ9IjEwIiB4PSIxODAiIHk9IjE2MCIgZmlsbD0iIzAwMDAwMCIgLz48cmVjdCB3aWR0aD0iMjAiIGhlaWdodD0iMTAiIHg9IjE5MCIgeT0iMTYwIiBmaWxsPSIjZDZjM2JlIiAvPjxyZWN0IHdpZHRoPSIzMCIgaGVpZ2h0PSIxMCIgeD0iMjEwIiB5PSIxNjAiIGZpbGw9IiNmZmYwZWUiIC8+PHJlY3Qgd2lkdGg9IjMwIiBoZWlnaHQ9IjEwIiB4PSI4MCIgeT0iMTcwIiBmaWxsPSIjZmZmMGVlIiAvPjxyZWN0IHdpZHRoPSIxMCIgaGVpZ2h0PSIxMCIgeD0iMTEwIiB5PSIxNzAiIGZpbGw9IiNkNmMzYmUiIC8+PHJlY3Qgd2lkdGg9IjMwIiBoZWlnaHQ9IjEwIiB4PSIxMjAiIHk9IjE3MCIgZmlsbD0iI2IyOTU4ZCIgLz48cmVjdCB3aWR0aD0iMjAiIGhlaWdodD0iMTAiIHg9IjE1MCIgeT0iMTcwIiBmaWxsPSIjZDZjM2JlIiAvPjxyZWN0IHdpZHRoPSIzMCIgaGVpZ2h0PSIxMCIgeD0iMTcwIiB5PSIxNzAiIGZpbGw9IiNiMjk1OGQiIC8+PHJlY3Qgd2lkdGg9IjEwIiBoZWlnaHQ9IjEwIiB4PSIyMDAiIHk9IjE3MCIgZmlsbD0iI2Q2YzNiZSIgLz48cmVjdCB3aWR0aD0iMzAiIGhlaWdodD0iMTAiIHg9IjIxMCIgeT0iMTcwIiBmaWxsPSIjZmZmMGVlIiAvPjxyZWN0IHdpZHRoPSIzMCIgaGVpZ2h0PSIxMCIgeD0iODAiIHk9IjE4MCIgZmlsbD0iI2ZmZjBlZSIgLz48cmVjdCB3aWR0aD0iNDAiIGhlaWdodD0iMTAiIHg9IjExMCIgeT0iMTgwIiBmaWxsPSIjZDZjM2JlIiAvPjxyZWN0IHdpZHRoPSIyMCIgaGVpZ2h0PSIxMCIgeD0iMTUwIiB5PSIxODAiIGZpbGw9IiMwMDAwMDAiIC8+PHJlY3Qgd2lkdGg9IjQwIiBoZWlnaHQ9IjEwIiB4PSIxNzAiIHk9IjE4MCIgZmlsbD0iI2Q2YzNiZSIgLz48cmVjdCB3aWR0aD0iMzAiIGhlaWdodD0iMTAiIHg9IjIxMCIgeT0iMTgwIiBmaWxsPSIjZmZmMGVlIiAvPjxyZWN0IHdpZHRoPSIzMCIgaGVpZ2h0PSIxMCIgeD0iODAiIHk9IjE5MCIgZmlsbD0iI2ZmZjBlZSIgLz48cmVjdCB3aWR0aD0iNDAiIGhlaWdodD0iMTAiIHg9IjExMCIgeT0iMTkwIiBmaWxsPSIjZDZjM2JlIiAvPjxyZWN0IHdpZHRoPSIyMCIgaGVpZ2h0PSIxMCIgeD0iMTUwIiB5PSIxOTAiIGZpbGw9IiMwMDAwMDAiIC8+PHJlY3Qgd2lkdGg9IjQwIiBoZWlnaHQ9IjEwIiB4PSIxNzAiIHk9IjE5MCIgZmlsbD0iI2Q2YzNiZSIgLz48cmVjdCB3aWR0aD0iMzAiIGhlaWdodD0iMTAiIHg9IjIxMCIgeT0iMTkwIiBmaWxsPSIjZmZmMGVlIiAvPjxyZWN0IHdpZHRoPSI0MCIgaGVpZ2h0PSIxMCIgeD0iODAiIHk9IjIwMCIgZmlsbD0iI2ZmZjBlZSIgLz48cmVjdCB3aWR0aD0iODAiIGhlaWdodD0iMTAiIHg9IjEyMCIgeT0iMjAwIiBmaWxsPSIjZDZjM2JlIiAvPjxyZWN0IHdpZHRoPSI0MCIgaGVpZ2h0PSIxMCIgeD0iMjAwIiB5PSIyMDAiIGZpbGw9IiNmZmYwZWUiIC8+PHJlY3Qgd2lkdGg9IjE2MCIgaGVpZ2h0PSIxMCIgeD0iODAiIHk9IjIxMCIgZmlsbD0iI2ZmZjBlZSIgLz48cmVjdCB3aWR0aD0iMTYwIiBoZWlnaHQ9IjEwIiB4PSI4MCIgeT0iMjIwIiBmaWxsPSIjZmZmMGVlIiAvPjxyZWN0IHdpZHRoPSI2MCIgaGVpZ2h0PSIxMCIgeD0iMTAwIiB5PSIxMTAiIGZpbGw9IiMwMDAwMDAiIC8+PHJlY3Qgd2lkdGg9IjYwIiBoZWlnaHQ9IjEwIiB4PSIxNzAiIHk9IjExMCIgZmlsbD0iIzAwMDAwMCIgLz48cmVjdCB3aWR0aD0iMTAiIGhlaWdodD0iMTAiIHg9IjEwMCIgeT0iMTIwIiBmaWxsPSIjMDAwMDAwIiAvPjxyZWN0IHdpZHRoPSIyMCIgaGVpZ2h0PSIxMCIgeD0iMTEwIiB5PSIxMjAiIGZpbGw9IiNmZmZmZmYiIC8+PHJlY3Qgd2lkdGg9IjMwIiBoZWlnaHQ9IjEwIiB4PSIxMzAiIHk9IjEyMCIgZmlsbD0iIzAwMDAwMCIgLz48cmVjdCB3aWR0aD0iMTAiIGhlaWdodD0iMTAiIHg9IjE3MCIgeT0iMTIwIiBmaWxsPSIjMDAwMDAwIiAvPjxyZWN0IHdpZHRoPSIyMCIgaGVpZ2h0PSIxMCIgeD0iMTgwIiB5PSIxMjAiIGZpbGw9IiNmZmZmZmYiIC8+PHJlY3Qgd2lkdGg9IjMwIiBoZWlnaHQ9IjEwIiB4PSIyMDAiIHk9IjEyMCIgZmlsbD0iIzAwMDAwMCIgLz48cmVjdCB3aWR0aD0iNDAiIGhlaWdodD0iMTAiIHg9IjcwIiB5PSIxMzAiIGZpbGw9IiMwMDAwMDAiIC8+PHJlY3Qgd2lkdGg9IjIwIiBoZWlnaHQ9IjEwIiB4PSIxMTAiIHk9IjEzMCIgZmlsbD0iI2ZmZmZmZiIgLz48cmVjdCB3aWR0aD0iNTAiIGhlaWdodD0iMTAiIHg9IjEzMCIgeT0iMTMwIiBmaWxsPSIjMDAwMDAwIiAvPjxyZWN0IHdpZHRoPSIyMCIgaGVpZ2h0PSIxMCIgeD0iMTgwIiB5PSIxMzAiIGZpbGw9IiNmZmZmZmYiIC8+PHJlY3Qgd2lkdGg9IjMwIiBoZWlnaHQ9IjEwIiB4PSIyMDAiIHk9IjEzMCIgZmlsbD0iIzAwMDAwMCIgLz48cmVjdCB3aWR0aD0iMTAiIGhlaWdodD0iMTAiIHg9IjcwIiB5PSIxNDAiIGZpbGw9IiMwMDAwMDAiIC8+PHJlY3Qgd2lkdGg9IjEwIiBoZWlnaHQ9IjEwIiB4PSIxMDAiIHk9IjE0MCIgZmlsbD0iIzAwMDAwMCIgLz48cmVjdCB3aWR0aD0iMjAiIGhlaWdodD0iMTAiIHg9IjExMCIgeT0iMTQwIiBmaWxsPSIjZmZmZmZmIiAvPjxyZWN0IHdpZHRoPSIzMCIgaGVpZ2h0PSIxMCIgeD0iMTMwIiB5PSIxNDAiIGZpbGw9IiMwMDAwMDAiIC8+PHJlY3Qgd2lkdGg9IjEwIiBoZWlnaHQ9IjEwIiB4PSIxNzAiIHk9IjE0MCIgZmlsbD0iIzAwMDAwMCIgLz48cmVjdCB3aWR0aD0iMjAiIGhlaWdodD0iMTAiIHg9IjE4MCIgeT0iMTQwIiBmaWxsPSIjZmZmZmZmIiAvPjxyZWN0IHdpZHRoPSIzMCIgaGVpZ2h0PSIxMCIgeD0iMjAwIiB5PSIxNDAiIGZpbGw9IiMwMDAwMDAiIC8+PHJlY3Qgd2lkdGg9IjEwIiBoZWlnaHQ9IjEwIiB4PSI3MCIgeT0iMTUwIiBmaWxsPSIjMDAwMDAwIiAvPjxyZWN0IHdpZHRoPSIxMCIgaGVpZ2h0PSIxMCIgeD0iMTAwIiB5PSIxNTAiIGZpbGw9IiMwMDAwMDAiIC8+PHJlY3Qgd2lkdGg9IjIwIiBoZWlnaHQ9IjEwIiB4PSIxMTAiIHk9IjE1MCIgZmlsbD0iI2ZmZmZmZiIgLz48cmVjdCB3aWR0aD0iMzAiIGhlaWdodD0iMTAiIHg9IjEzMCIgeT0iMTUwIiBmaWxsPSIjMDAwMDAwIiAvPjxyZWN0IHdpZHRoPSIxMCIgaGVpZ2h0PSIxMCIgeD0iMTcwIiB5PSIxNTAiIGZpbGw9IiMwMDAwMDAiIC8+PHJlY3Qgd2lkdGg9IjIwIiBoZWlnaHQ9IjEwIiB4PSIxODAiIHk9IjE1MCIgZmlsbD0iI2ZmZmZmZiIgLz48cmVjdCB3aWR0aD0iMzAiIGhlaWdodD0iMTAiIHg9IjIwMCIgeT0iMTUwIiBmaWxsPSIjMDAwMDAwIiAvPjxyZWN0IHdpZHRoPSI2MCIgaGVpZ2h0PSIxMCIgeD0iMTAwIiB5PSIxNjAiIGZpbGw9IiMwMDAwMDAiIC8+PHJlY3Qgd2lkdGg9IjYwIiBoZWlnaHQ9IjEwIiB4PSIxNzAiIHk9IjE2MCIgZmlsbD0iIzAwMDAwMCIgLz48L3N2Zz4='; +export const base64Metadata = + 'data:application/json;base64,eyJuYW1lIjoiTW9jayBOYW1lIiwgImRlc2NyaXB0aW9uIjoibW9jayBkZXNjcmlwdGlvbiIsICJpbWFnZSI6ICJkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LFBITjJaeUIzYVdSMGFEMGlNekl3SWlCb1pXbG5hSFE5SWpNeU1DSWdkbWxsZDBKdmVEMGlNQ0F3SURNeU1DQXpNakFpSUhodGJHNXpQU0pvZEhSd09pOHZkM2QzTG5jekxtOXlaeTh5TURBd0wzTjJaeUlnYzJoaGNHVXRjbVZ1WkdWeWFXNW5QU0pqY21semNFVmtaMlZ6SWo0OGNtVmpkQ0IzYVdSMGFEMGlNVEF3SlNJZ2FHVnBaMmgwUFNJeE1EQWxJaUJtYVd4c1BTSWpaRFZrTjJVeElpQXZQanh5WldOMElIZHBaSFJvUFNJeE5EQWlJR2hsYVdkb2REMGlNVEFpSUhnOUlqa3dJaUI1UFNJeU1UQWlJR1pwYkd3OUlpTm1abVprWmpJaUlDOCtQSEpsWTNRZ2QybGtkR2c5SWpFME1DSWdhR1ZwWjJoMFBTSXhNQ0lnZUQwaU9UQWlJSGs5SWpJeU1DSWdabWxzYkQwaUkyWm1abVJtTWlJZ0x6NDhjbVZqZENCM2FXUjBhRDBpTVRRd0lpQm9aV2xuYUhROUlqRXdJaUI0UFNJNU1DSWdlVDBpTWpNd0lpQm1hV3hzUFNJalptWm1aR1l5SWlBdlBqeHlaV04wSUhkcFpIUm9QU0l4TkRBaUlHaGxhV2RvZEQwaU1UQWlJSGc5SWprd0lpQjVQU0l5TkRBaUlHWnBiR3c5SWlObVptWmtaaklpSUM4K1BISmxZM1FnZDJsa2RHZzlJakl3SWlCb1pXbG5hSFE5SWpFd0lpQjRQU0k1TUNJZ2VUMGlNalV3SWlCbWFXeHNQU0lqWm1abVpHWXlJaUF2UGp4eVpXTjBJSGRwWkhSb1BTSXhNVEFpSUdobGFXZG9kRDBpTVRBaUlIZzlJakV5TUNJZ2VUMGlNalV3SWlCbWFXeHNQU0lqWm1abVpHWXlJaUF2UGp4eVpXTjBJSGRwWkhSb1BTSXlNQ0lnYUdWcFoyaDBQU0l4TUNJZ2VEMGlPVEFpSUhrOUlqSTJNQ0lnWm1sc2JEMGlJMlptWm1SbU1pSWdMejQ4Y21WamRDQjNhV1IwYUQwaU1URXdJaUJvWldsbmFIUTlJakV3SWlCNFBTSXhNakFpSUhrOUlqSTJNQ0lnWm1sc2JEMGlJMlptWm1SbU1pSWdMejQ4Y21WamRDQjNhV1IwYUQwaU1qQWlJR2hsYVdkb2REMGlNVEFpSUhnOUlqa3dJaUI1UFNJeU56QWlJR1pwYkd3OUlpTm1abVprWmpJaUlDOCtQSEpsWTNRZ2QybGtkR2c5SWpFeE1DSWdhR1ZwWjJoMFBTSXhNQ0lnZUQwaU1USXdJaUI1UFNJeU56QWlJR1pwYkd3OUlpTm1abVprWmpJaUlDOCtQSEpsWTNRZ2QybGtkR2c5SWpJd0lpQm9aV2xuYUhROUlqRXdJaUI0UFNJNU1DSWdlVDBpTWpnd0lpQm1hV3hzUFNJalptWm1aR1l5SWlBdlBqeHlaV04wSUhkcFpIUm9QU0l4TVRBaUlHaGxhV2RvZEQwaU1UQWlJSGc5SWpFeU1DSWdlVDBpTWpnd0lpQm1hV3hzUFNJalptWm1aR1l5SWlBdlBqeHlaV04wSUhkcFpIUm9QU0l5TUNJZ2FHVnBaMmgwUFNJeE1DSWdlRDBpT1RBaUlIazlJakk1TUNJZ1ptbHNiRDBpSTJabVptUm1NaUlnTHo0OGNtVmpkQ0IzYVdSMGFEMGlNVEV3SWlCb1pXbG5hSFE5SWpFd0lpQjRQU0l4TWpBaUlIazlJakk1TUNJZ1ptbHNiRDBpSTJabVptUm1NaUlnTHo0OGNtVmpkQ0IzYVdSMGFEMGlNakFpSUdobGFXZG9kRDBpTVRBaUlIZzlJamt3SWlCNVBTSXpNREFpSUdacGJHdzlJaU5tWm1aa1pqSWlJQzgrUEhKbFkzUWdkMmxrZEdnOUlqRXhNQ0lnYUdWcFoyaDBQU0l4TUNJZ2VEMGlNVEl3SWlCNVBTSXpNREFpSUdacGJHdzlJaU5tWm1aa1pqSWlJQzgrUEhKbFkzUWdkMmxrZEdnOUlqSXdJaUJvWldsbmFIUTlJakV3SWlCNFBTSTVNQ0lnZVQwaU16RXdJaUJtYVd4c1BTSWpabVptWkdZeUlpQXZQanh5WldOMElIZHBaSFJvUFNJeE1UQWlJR2hsYVdkb2REMGlNVEFpSUhnOUlqRXlNQ0lnZVQwaU16RXdJaUJtYVd4c1BTSWpabVptWkdZeUlpQXZQanh5WldOMElIZHBaSFJvUFNJek1DSWdhR1ZwWjJoMFBTSXhNQ0lnZUQwaU1UWXdJaUI1UFNJeU1qQWlJR1pwYkd3OUlpTXdNREF3TURBaUlDOCtQSEpsWTNRZ2QybGtkR2c5SWpjd0lpQm9aV2xuYUhROUlqRXdJaUI0UFNJeE5EQWlJSGs5SWpJek1DSWdabWxzYkQwaUl6QXdNREF3TUNJZ0x6NDhjbVZqZENCM2FXUjBhRDBpTnpBaUlHaGxhV2RvZEQwaU1UQWlJSGc5SWpFME1DSWdlVDBpTWpRd0lpQm1hV3hzUFNJak1EQXdNREF3SWlBdlBqeHlaV04wSUhkcFpIUm9QU0l6TUNJZ2FHVnBaMmgwUFNJeE1DSWdlRDBpTVRNd0lpQjVQU0l5TlRBaUlHWnBiR3c5SWlNd01EQXdNREFpSUM4K1BISmxZM1FnZDJsa2RHZzlJak13SWlCb1pXbG5hSFE5SWpFd0lpQjRQU0l4TmpBaUlIazlJakkxTUNJZ1ptbHNiRDBpSTJabVptWm1aaUlnTHo0OGNtVmpkQ0IzYVdSMGFEMGlNekFpSUdobGFXZG9kRDBpTVRBaUlIZzlJakU1TUNJZ2VUMGlNalV3SWlCbWFXeHNQU0lqTURBd01EQXdJaUF2UGp4eVpXTjBJSGRwWkhSb1BTSXpNQ0lnYUdWcFoyaDBQU0l4TUNJZ2VEMGlNVE13SWlCNVBTSXlOakFpSUdacGJHdzlJaU13TURBd01EQWlJQzgrUEhKbFkzUWdkMmxrZEdnOUlqRXdJaUJvWldsbmFIUTlJakV3SWlCNFBTSXhOakFpSUhrOUlqSTJNQ0lnWm1sc2JEMGlJMlptWm1abVppSWdMejQ4Y21WamRDQjNhV1IwYUQwaU1UQWlJR2hsYVdkb2REMGlNVEFpSUhnOUlqRTRNQ0lnZVQwaU1qWXdJaUJtYVd4c1BTSWpabVptWm1abUlpQXZQanh5WldOMElIZHBaSFJvUFNJek1DSWdhR1ZwWjJoMFBTSXhNQ0lnZUQwaU1Ua3dJaUI1UFNJeU5qQWlJR1pwYkd3OUlpTXdNREF3TURBaUlDOCtQSEpsWTNRZ2QybGtkR2c5SWpNd0lpQm9aV2xuYUhROUlqRXdJaUI0UFNJeE16QWlJSGs5SWpJM01DSWdabWxzYkQwaUl6QXdNREF3TUNJZ0x6NDhjbVZqZENCM2FXUjBhRDBpTXpBaUlHaGxhV2RvZEQwaU1UQWlJSGc5SWpFMk1DSWdlVDBpTWpjd0lpQm1hV3hzUFNJalptWm1abVptSWlBdlBqeHlaV04wSUhkcFpIUm9QU0l6TUNJZ2FHVnBaMmgwUFNJeE1DSWdlRDBpTVRrd0lpQjVQU0l5TnpBaUlHWnBiR3c5SWlNd01EQXdNREFpSUM4K1BISmxZM1FnZDJsa2RHZzlJamN3SWlCb1pXbG5hSFE5SWpFd0lpQjRQU0l4TkRBaUlIazlJakk0TUNJZ1ptbHNiRDBpSXpBd01EQXdNQ0lnTHo0OGNtVmpkQ0IzYVdSMGFEMGlOekFpSUdobGFXZG9kRDBpTVRBaUlIZzlJakUwTUNJZ2VUMGlNamt3SWlCbWFXeHNQU0lqTURBd01EQXdJaUF2UGp4eVpXTjBJSGRwWkhSb1BTSXpNQ0lnYUdWcFoyaDBQU0l4TUNJZ2VEMGlNVFl3SWlCNVBTSXpNREFpSUdacGJHdzlJaU13TURBd01EQWlJQzgrUEhKbFkzUWdkMmxrZEdnOUlqRTJNQ0lnYUdWcFoyaDBQU0l4TUNJZ2VEMGlPREFpSUhrOUlqUXdJaUJtYVd4c1BTSWpabVptTUdWbElpQXZQanh5WldOMElIZHBaSFJvUFNJeE5qQWlJR2hsYVdkb2REMGlNVEFpSUhnOUlqZ3dJaUI1UFNJMU1DSWdabWxzYkQwaUkyWm1aakJsWlNJZ0x6NDhjbVZqZENCM2FXUjBhRDBpTkRBaUlHaGxhV2RvZEQwaU1UQWlJSGc5SWpnd0lpQjVQU0kyTUNJZ1ptbHNiRDBpSTJabVpqQmxaU0lnTHo0OGNtVmpkQ0IzYVdSMGFEMGlPREFpSUdobGFXZG9kRDBpTVRBaUlIZzlJakV5TUNJZ2VUMGlOakFpSUdacGJHdzlJaU5rTm1NelltVWlJQzgrUEhKbFkzUWdkMmxrZEdnOUlqUXdJaUJvWldsbmFIUTlJakV3SWlCNFBTSXlNREFpSUhrOUlqWXdJaUJtYVd4c1BTSWpabVptTUdWbElpQXZQanh5WldOMElIZHBaSFJvUFNJek1DSWdhR1ZwWjJoMFBTSXhNQ0lnZUQwaU9EQWlJSGs5SWpjd0lpQm1hV3hzUFNJalptWm1NR1ZsSWlBdlBqeHlaV04wSUhkcFpIUm9QU0l5TUNJZ2FHVnBaMmgwUFNJeE1DSWdlRDBpTVRFd0lpQjVQU0kzTUNJZ1ptbHNiRDBpSTJRMll6TmlaU0lnTHo0OGNtVmpkQ0IzYVdSMGFEMGlNVEFpSUdobGFXZG9kRDBpTVRBaUlIZzlJakV6TUNJZ2VUMGlOekFpSUdacGJHdzlJaU13TURBd01EQWlJQzgrUEhKbFkzUWdkMmxrZEdnOUlqUXdJaUJvWldsbmFIUTlJakV3SWlCNFBTSXhOREFpSUhrOUlqY3dJaUJtYVd4c1BTSWpaRFpqTTJKbElpQXZQanh5WldOMElIZHBaSFJvUFNJeE1DSWdhR1ZwWjJoMFBTSXhNQ0lnZUQwaU1UZ3dJaUI1UFNJM01DSWdabWxzYkQwaUl6QXdNREF3TUNJZ0x6NDhjbVZqZENCM2FXUjBhRDBpTWpBaUlHaGxhV2RvZEQwaU1UQWlJSGc5SWpFNU1DSWdlVDBpTnpBaUlHWnBiR3c5SWlOa05tTXpZbVVpSUM4K1BISmxZM1FnZDJsa2RHZzlJak13SWlCb1pXbG5hSFE5SWpFd0lpQjRQU0l5TVRBaUlIazlJamN3SWlCbWFXeHNQU0lqWm1abU1HVmxJaUF2UGp4eVpXTjBJSGRwWkhSb1BTSXpNQ0lnYUdWcFoyaDBQU0l4TUNJZ2VEMGlPREFpSUhrOUlqZ3dJaUJtYVd4c1BTSWpabVptTUdWbElpQXZQanh5WldOMElIZHBaSFJvUFNJeU1DSWdhR1ZwWjJoMFBTSXhNQ0lnZUQwaU1URXdJaUI1UFNJNE1DSWdabWxzYkQwaUkyUTJZek5pWlNJZ0x6NDhjbVZqZENCM2FXUjBhRDBpTVRBaUlHaGxhV2RvZEQwaU1UQWlJSGc5SWpFek1DSWdlVDBpT0RBaUlHWnBiR3c5SWlNd01EQXdNREFpSUM4K1BISmxZM1FnZDJsa2RHZzlJalF3SWlCb1pXbG5hSFE5SWpFd0lpQjRQU0l4TkRBaUlIazlJamd3SWlCbWFXeHNQU0lqWkRaak0ySmxJaUF2UGp4eVpXTjBJSGRwWkhSb1BTSXhNQ0lnYUdWcFoyaDBQU0l4TUNJZ2VEMGlNVGd3SWlCNVBTSTRNQ0lnWm1sc2JEMGlJekF3TURBd01DSWdMejQ4Y21WamRDQjNhV1IwYUQwaU1qQWlJR2hsYVdkb2REMGlNVEFpSUhnOUlqRTVNQ0lnZVQwaU9EQWlJR1pwYkd3OUlpTmtObU16WW1VaUlDOCtQSEpsWTNRZ2QybGtkR2c5SWpNd0lpQm9aV2xuYUhROUlqRXdJaUI0UFNJeU1UQWlJSGs5SWpnd0lpQm1hV3hzUFNJalptWm1NR1ZsSWlBdlBqeHlaV04wSUhkcFpIUm9QU0l6TUNJZ2FHVnBaMmgwUFNJeE1DSWdlRDBpT0RBaUlIazlJamt3SWlCbWFXeHNQU0lqWm1abU1HVmxJaUF2UGp4eVpXTjBJSGRwWkhSb1BTSXhNQ0lnYUdWcFoyaDBQU0l4TUNJZ2VEMGlNVEV3SWlCNVBTSTVNQ0lnWm1sc2JEMGlJMlEyWXpOaVpTSWdMejQ4Y21WamRDQjNhV1IwYUQwaU16QWlJR2hsYVdkb2REMGlNVEFpSUhnOUlqRXlNQ0lnZVQwaU9UQWlJR1pwYkd3OUlpTmlNamsxT0dRaUlDOCtQSEpsWTNRZ2QybGtkR2c5SWpJd0lpQm9aV2xuYUhROUlqRXdJaUI0UFNJeE5UQWlJSGs5SWprd0lpQm1hV3hzUFNJalpEWmpNMkpsSWlBdlBqeHlaV04wSUhkcFpIUm9QU0l6TUNJZ2FHVnBaMmgwUFNJeE1DSWdlRDBpTVRjd0lpQjVQU0k1TUNJZ1ptbHNiRDBpSTJJeU9UVTRaQ0lnTHo0OGNtVmpkQ0IzYVdSMGFEMGlNVEFpSUdobGFXZG9kRDBpTVRBaUlIZzlJakl3TUNJZ2VUMGlPVEFpSUdacGJHdzlJaU5rTm1NelltVWlJQzgrUEhKbFkzUWdkMmxrZEdnOUlqTXdJaUJvWldsbmFIUTlJakV3SWlCNFBTSXlNVEFpSUhrOUlqa3dJaUJtYVd4c1BTSWpabVptTUdWbElpQXZQanh5WldOMElIZHBaSFJvUFNJek1DSWdhR1ZwWjJoMFBTSXhNQ0lnZUQwaU9EQWlJSGs5SWpFd01DSWdabWxzYkQwaUkyWm1aakJsWlNJZ0x6NDhjbVZqZENCM2FXUjBhRDBpTkRBaUlHaGxhV2RvZEQwaU1UQWlJSGc5SWpFeE1DSWdlVDBpTVRBd0lpQm1hV3hzUFNJalpEWmpNMkpsSWlBdlBqeHlaV04wSUhkcFpIUm9QU0l5TUNJZ2FHVnBaMmgwUFNJeE1DSWdlRDBpTVRVd0lpQjVQU0l4TURBaUlHWnBiR3c5SWlNd01EQXdNREFpSUM4K1BISmxZM1FnZDJsa2RHZzlJalF3SWlCb1pXbG5hSFE5SWpFd0lpQjRQU0l4TnpBaUlIazlJakV3TUNJZ1ptbHNiRDBpSTJRMll6TmlaU0lnTHo0OGNtVmpkQ0IzYVdSMGFEMGlNekFpSUdobGFXZG9kRDBpTVRBaUlIZzlJakl4TUNJZ2VUMGlNVEF3SWlCbWFXeHNQU0lqWm1abU1HVmxJaUF2UGp4eVpXTjBJSGRwWkhSb1BTSXpNQ0lnYUdWcFoyaDBQU0l4TUNJZ2VEMGlPREFpSUhrOUlqRXhNQ0lnWm1sc2JEMGlJMlptWmpCbFpTSWdMejQ4Y21WamRDQjNhV1IwYUQwaU5EQWlJR2hsYVdkb2REMGlNVEFpSUhnOUlqRXhNQ0lnZVQwaU1URXdJaUJtYVd4c1BTSWpaRFpqTTJKbElpQXZQanh5WldOMElIZHBaSFJvUFNJeU1DSWdhR1ZwWjJoMFBTSXhNQ0lnZUQwaU1UVXdJaUI1UFNJeE1UQWlJR1pwYkd3OUlpTXdNREF3TURBaUlDOCtQSEpsWTNRZ2QybGtkR2c5SWpRd0lpQm9aV2xuYUhROUlqRXdJaUI0UFNJeE56QWlJSGs5SWpFeE1DSWdabWxzYkQwaUkyUTJZek5pWlNJZ0x6NDhjbVZqZENCM2FXUjBhRDBpTXpBaUlHaGxhV2RvZEQwaU1UQWlJSGc5SWpJeE1DSWdlVDBpTVRFd0lpQm1hV3hzUFNJalptWm1NR1ZsSWlBdlBqeHlaV04wSUhkcFpIUm9QU0kwTUNJZ2FHVnBaMmgwUFNJeE1DSWdlRDBpT0RBaUlIazlJakV5TUNJZ1ptbHNiRDBpSTJabVpqQmxaU0lnTHo0OGNtVmpkQ0IzYVdSMGFEMGlPREFpSUdobGFXZG9kRDBpTVRBaUlIZzlJakV5TUNJZ2VUMGlNVEl3SWlCbWFXeHNQU0lqWkRaak0ySmxJaUF2UGp4eVpXTjBJSGRwWkhSb1BTSTBNQ0lnYUdWcFoyaDBQU0l4TUNJZ2VEMGlNakF3SWlCNVBTSXhNakFpSUdacGJHdzlJaU5tWm1Zd1pXVWlJQzgrUEhKbFkzUWdkMmxrZEdnOUlqRTJNQ0lnYUdWcFoyaDBQU0l4TUNJZ2VEMGlPREFpSUhrOUlqRXpNQ0lnWm1sc2JEMGlJMlptWmpCbFpTSWdMejQ4Y21WamRDQjNhV1IwYUQwaU5EQWlJR2hsYVdkb2REMGlNVEFpSUhnOUlqZ3dJaUI1UFNJeE5EQWlJR1pwYkd3OUlpTm1abVl3WldVaUlDOCtQSEpsWTNRZ2QybGtkR2c5SWpnd0lpQm9aV2xuYUhROUlqRXdJaUI0UFNJeE1qQWlJSGs5SWpFME1DSWdabWxzYkQwaUkyUTJZek5pWlNJZ0x6NDhjbVZqZENCM2FXUjBhRDBpTkRBaUlHaGxhV2RvZEQwaU1UQWlJSGc5SWpJd01DSWdlVDBpTVRRd0lpQm1hV3hzUFNJalptWm1NR1ZsSWlBdlBqeHlaV04wSUhkcFpIUm9QU0l6TUNJZ2FHVnBaMmgwUFNJeE1DSWdlRDBpT0RBaUlIazlJakUxTUNJZ1ptbHNiRDBpSTJabVpqQmxaU0lnTHo0OGNtVmpkQ0IzYVdSMGFEMGlNakFpSUdobGFXZG9kRDBpTVRBaUlIZzlJakV4TUNJZ2VUMGlNVFV3SWlCbWFXeHNQU0lqWkRaak0ySmxJaUF2UGp4eVpXTjBJSGRwWkhSb1BTSXhNQ0lnYUdWcFoyaDBQU0l4TUNJZ2VEMGlNVE13SWlCNVBTSXhOVEFpSUdacGJHdzlJaU13TURBd01EQWlJQzgrUEhKbFkzUWdkMmxrZEdnOUlqUXdJaUJvWldsbmFIUTlJakV3SWlCNFBTSXhOREFpSUhrOUlqRTFNQ0lnWm1sc2JEMGlJMlEyWXpOaVpTSWdMejQ4Y21WamRDQjNhV1IwYUQwaU1UQWlJR2hsYVdkb2REMGlNVEFpSUhnOUlqRTRNQ0lnZVQwaU1UVXdJaUJtYVd4c1BTSWpNREF3TURBd0lpQXZQanh5WldOMElIZHBaSFJvUFNJeU1DSWdhR1ZwWjJoMFBTSXhNQ0lnZUQwaU1Ua3dJaUI1UFNJeE5UQWlJR1pwYkd3OUlpTmtObU16WW1VaUlDOCtQSEpsWTNRZ2QybGtkR2c5SWpNd0lpQm9aV2xuYUhROUlqRXdJaUI0UFNJeU1UQWlJSGs5SWpFMU1DSWdabWxzYkQwaUkyWm1aakJsWlNJZ0x6NDhjbVZqZENCM2FXUjBhRDBpTXpBaUlHaGxhV2RvZEQwaU1UQWlJSGc5SWpnd0lpQjVQU0l4TmpBaUlHWnBiR3c5SWlObVptWXdaV1VpSUM4K1BISmxZM1FnZDJsa2RHZzlJakl3SWlCb1pXbG5hSFE5SWpFd0lpQjRQU0l4TVRBaUlIazlJakUyTUNJZ1ptbHNiRDBpSTJRMll6TmlaU0lnTHo0OGNtVmpkQ0IzYVdSMGFEMGlNVEFpSUdobGFXZG9kRDBpTVRBaUlIZzlJakV6TUNJZ2VUMGlNVFl3SWlCbWFXeHNQU0lqTURBd01EQXdJaUF2UGp4eVpXTjBJSGRwWkhSb1BTSTBNQ0lnYUdWcFoyaDBQU0l4TUNJZ2VEMGlNVFF3SWlCNVBTSXhOakFpSUdacGJHdzlJaU5rTm1NelltVWlJQzgrUEhKbFkzUWdkMmxrZEdnOUlqRXdJaUJvWldsbmFIUTlJakV3SWlCNFBTSXhPREFpSUhrOUlqRTJNQ0lnWm1sc2JEMGlJekF3TURBd01DSWdMejQ4Y21WamRDQjNhV1IwYUQwaU1qQWlJR2hsYVdkb2REMGlNVEFpSUhnOUlqRTVNQ0lnZVQwaU1UWXdJaUJtYVd4c1BTSWpaRFpqTTJKbElpQXZQanh5WldOMElIZHBaSFJvUFNJek1DSWdhR1ZwWjJoMFBTSXhNQ0lnZUQwaU1qRXdJaUI1UFNJeE5qQWlJR1pwYkd3OUlpTm1abVl3WldVaUlDOCtQSEpsWTNRZ2QybGtkR2c5SWpNd0lpQm9aV2xuYUhROUlqRXdJaUI0UFNJNE1DSWdlVDBpTVRjd0lpQm1hV3hzUFNJalptWm1NR1ZsSWlBdlBqeHlaV04wSUhkcFpIUm9QU0l4TUNJZ2FHVnBaMmgwUFNJeE1DSWdlRDBpTVRFd0lpQjVQU0l4TnpBaUlHWnBiR3c5SWlOa05tTXpZbVVpSUM4K1BISmxZM1FnZDJsa2RHZzlJak13SWlCb1pXbG5hSFE5SWpFd0lpQjRQU0l4TWpBaUlIazlJakUzTUNJZ1ptbHNiRDBpSTJJeU9UVTRaQ0lnTHo0OGNtVmpkQ0IzYVdSMGFEMGlNakFpSUdobGFXZG9kRDBpTVRBaUlIZzlJakUxTUNJZ2VUMGlNVGN3SWlCbWFXeHNQU0lqWkRaak0ySmxJaUF2UGp4eVpXTjBJSGRwWkhSb1BTSXpNQ0lnYUdWcFoyaDBQU0l4TUNJZ2VEMGlNVGN3SWlCNVBTSXhOekFpSUdacGJHdzlJaU5pTWprMU9HUWlJQzgrUEhKbFkzUWdkMmxrZEdnOUlqRXdJaUJvWldsbmFIUTlJakV3SWlCNFBTSXlNREFpSUhrOUlqRTNNQ0lnWm1sc2JEMGlJMlEyWXpOaVpTSWdMejQ4Y21WamRDQjNhV1IwYUQwaU16QWlJR2hsYVdkb2REMGlNVEFpSUhnOUlqSXhNQ0lnZVQwaU1UY3dJaUJtYVd4c1BTSWpabVptTUdWbElpQXZQanh5WldOMElIZHBaSFJvUFNJek1DSWdhR1ZwWjJoMFBTSXhNQ0lnZUQwaU9EQWlJSGs5SWpFNE1DSWdabWxzYkQwaUkyWm1aakJsWlNJZ0x6NDhjbVZqZENCM2FXUjBhRDBpTkRBaUlHaGxhV2RvZEQwaU1UQWlJSGc5SWpFeE1DSWdlVDBpTVRnd0lpQm1hV3hzUFNJalpEWmpNMkpsSWlBdlBqeHlaV04wSUhkcFpIUm9QU0l5TUNJZ2FHVnBaMmgwUFNJeE1DSWdlRDBpTVRVd0lpQjVQU0l4T0RBaUlHWnBiR3c5SWlNd01EQXdNREFpSUM4K1BISmxZM1FnZDJsa2RHZzlJalF3SWlCb1pXbG5hSFE5SWpFd0lpQjRQU0l4TnpBaUlIazlJakU0TUNJZ1ptbHNiRDBpSTJRMll6TmlaU0lnTHo0OGNtVmpkQ0IzYVdSMGFEMGlNekFpSUdobGFXZG9kRDBpTVRBaUlIZzlJakl4TUNJZ2VUMGlNVGd3SWlCbWFXeHNQU0lqWm1abU1HVmxJaUF2UGp4eVpXTjBJSGRwWkhSb1BTSXpNQ0lnYUdWcFoyaDBQU0l4TUNJZ2VEMGlPREFpSUhrOUlqRTVNQ0lnWm1sc2JEMGlJMlptWmpCbFpTSWdMejQ4Y21WamRDQjNhV1IwYUQwaU5EQWlJR2hsYVdkb2REMGlNVEFpSUhnOUlqRXhNQ0lnZVQwaU1Ua3dJaUJtYVd4c1BTSWpaRFpqTTJKbElpQXZQanh5WldOMElIZHBaSFJvUFNJeU1DSWdhR1ZwWjJoMFBTSXhNQ0lnZUQwaU1UVXdJaUI1UFNJeE9UQWlJR1pwYkd3OUlpTXdNREF3TURBaUlDOCtQSEpsWTNRZ2QybGtkR2c5SWpRd0lpQm9aV2xuYUhROUlqRXdJaUI0UFNJeE56QWlJSGs5SWpFNU1DSWdabWxzYkQwaUkyUTJZek5pWlNJZ0x6NDhjbVZqZENCM2FXUjBhRDBpTXpBaUlHaGxhV2RvZEQwaU1UQWlJSGc5SWpJeE1DSWdlVDBpTVRrd0lpQm1hV3hzUFNJalptWm1NR1ZsSWlBdlBqeHlaV04wSUhkcFpIUm9QU0kwTUNJZ2FHVnBaMmgwUFNJeE1DSWdlRDBpT0RBaUlIazlJakl3TUNJZ1ptbHNiRDBpSTJabVpqQmxaU0lnTHo0OGNtVmpkQ0IzYVdSMGFEMGlPREFpSUdobGFXZG9kRDBpTVRBaUlIZzlJakV5TUNJZ2VUMGlNakF3SWlCbWFXeHNQU0lqWkRaak0ySmxJaUF2UGp4eVpXTjBJSGRwWkhSb1BTSTBNQ0lnYUdWcFoyaDBQU0l4TUNJZ2VEMGlNakF3SWlCNVBTSXlNREFpSUdacGJHdzlJaU5tWm1Zd1pXVWlJQzgrUEhKbFkzUWdkMmxrZEdnOUlqRTJNQ0lnYUdWcFoyaDBQU0l4TUNJZ2VEMGlPREFpSUhrOUlqSXhNQ0lnWm1sc2JEMGlJMlptWmpCbFpTSWdMejQ4Y21WamRDQjNhV1IwYUQwaU1UWXdJaUJvWldsbmFIUTlJakV3SWlCNFBTSTRNQ0lnZVQwaU1qSXdJaUJtYVd4c1BTSWpabVptTUdWbElpQXZQanh5WldOMElIZHBaSFJvUFNJMk1DSWdhR1ZwWjJoMFBTSXhNQ0lnZUQwaU1UQXdJaUI1UFNJeE1UQWlJR1pwYkd3OUlpTXdNREF3TURBaUlDOCtQSEpsWTNRZ2QybGtkR2c5SWpZd0lpQm9aV2xuYUhROUlqRXdJaUI0UFNJeE56QWlJSGs5SWpFeE1DSWdabWxzYkQwaUl6QXdNREF3TUNJZ0x6NDhjbVZqZENCM2FXUjBhRDBpTVRBaUlHaGxhV2RvZEQwaU1UQWlJSGc5SWpFd01DSWdlVDBpTVRJd0lpQm1hV3hzUFNJak1EQXdNREF3SWlBdlBqeHlaV04wSUhkcFpIUm9QU0l5TUNJZ2FHVnBaMmgwUFNJeE1DSWdlRDBpTVRFd0lpQjVQU0l4TWpBaUlHWnBiR3c5SWlObVptWm1abVlpSUM4K1BISmxZM1FnZDJsa2RHZzlJak13SWlCb1pXbG5hSFE5SWpFd0lpQjRQU0l4TXpBaUlIazlJakV5TUNJZ1ptbHNiRDBpSXpBd01EQXdNQ0lnTHo0OGNtVmpkQ0IzYVdSMGFEMGlNVEFpSUdobGFXZG9kRDBpTVRBaUlIZzlJakUzTUNJZ2VUMGlNVEl3SWlCbWFXeHNQU0lqTURBd01EQXdJaUF2UGp4eVpXTjBJSGRwWkhSb1BTSXlNQ0lnYUdWcFoyaDBQU0l4TUNJZ2VEMGlNVGd3SWlCNVBTSXhNakFpSUdacGJHdzlJaU5tWm1abVptWWlJQzgrUEhKbFkzUWdkMmxrZEdnOUlqTXdJaUJvWldsbmFIUTlJakV3SWlCNFBTSXlNREFpSUhrOUlqRXlNQ0lnWm1sc2JEMGlJekF3TURBd01DSWdMejQ4Y21WamRDQjNhV1IwYUQwaU5EQWlJR2hsYVdkb2REMGlNVEFpSUhnOUlqY3dJaUI1UFNJeE16QWlJR1pwYkd3OUlpTXdNREF3TURBaUlDOCtQSEpsWTNRZ2QybGtkR2c5SWpJd0lpQm9aV2xuYUhROUlqRXdJaUI0UFNJeE1UQWlJSGs5SWpFek1DSWdabWxzYkQwaUkyWm1abVptWmlJZ0x6NDhjbVZqZENCM2FXUjBhRDBpTlRBaUlHaGxhV2RvZEQwaU1UQWlJSGc5SWpFek1DSWdlVDBpTVRNd0lpQm1hV3hzUFNJak1EQXdNREF3SWlBdlBqeHlaV04wSUhkcFpIUm9QU0l5TUNJZ2FHVnBaMmgwUFNJeE1DSWdlRDBpTVRnd0lpQjVQU0l4TXpBaUlHWnBiR3c5SWlObVptWm1abVlpSUM4K1BISmxZM1FnZDJsa2RHZzlJak13SWlCb1pXbG5hSFE5SWpFd0lpQjRQU0l5TURBaUlIazlJakV6TUNJZ1ptbHNiRDBpSXpBd01EQXdNQ0lnTHo0OGNtVmpkQ0IzYVdSMGFEMGlNVEFpSUdobGFXZG9kRDBpTVRBaUlIZzlJamN3SWlCNVBTSXhOREFpSUdacGJHdzlJaU13TURBd01EQWlJQzgrUEhKbFkzUWdkMmxrZEdnOUlqRXdJaUJvWldsbmFIUTlJakV3SWlCNFBTSXhNREFpSUhrOUlqRTBNQ0lnWm1sc2JEMGlJekF3TURBd01DSWdMejQ4Y21WamRDQjNhV1IwYUQwaU1qQWlJR2hsYVdkb2REMGlNVEFpSUhnOUlqRXhNQ0lnZVQwaU1UUXdJaUJtYVd4c1BTSWpabVptWm1abUlpQXZQanh5WldOMElIZHBaSFJvUFNJek1DSWdhR1ZwWjJoMFBTSXhNQ0lnZUQwaU1UTXdJaUI1UFNJeE5EQWlJR1pwYkd3OUlpTXdNREF3TURBaUlDOCtQSEpsWTNRZ2QybGtkR2c5SWpFd0lpQm9aV2xuYUhROUlqRXdJaUI0UFNJeE56QWlJSGs5SWpFME1DSWdabWxzYkQwaUl6QXdNREF3TUNJZ0x6NDhjbVZqZENCM2FXUjBhRDBpTWpBaUlHaGxhV2RvZEQwaU1UQWlJSGc5SWpFNE1DSWdlVDBpTVRRd0lpQm1hV3hzUFNJalptWm1abVptSWlBdlBqeHlaV04wSUhkcFpIUm9QU0l6TUNJZ2FHVnBaMmgwUFNJeE1DSWdlRDBpTWpBd0lpQjVQU0l4TkRBaUlHWnBiR3c5SWlNd01EQXdNREFpSUM4K1BISmxZM1FnZDJsa2RHZzlJakV3SWlCb1pXbG5hSFE5SWpFd0lpQjRQU0kzTUNJZ2VUMGlNVFV3SWlCbWFXeHNQU0lqTURBd01EQXdJaUF2UGp4eVpXTjBJSGRwWkhSb1BTSXhNQ0lnYUdWcFoyaDBQU0l4TUNJZ2VEMGlNVEF3SWlCNVBTSXhOVEFpSUdacGJHdzlJaU13TURBd01EQWlJQzgrUEhKbFkzUWdkMmxrZEdnOUlqSXdJaUJvWldsbmFIUTlJakV3SWlCNFBTSXhNVEFpSUhrOUlqRTFNQ0lnWm1sc2JEMGlJMlptWm1abVppSWdMejQ4Y21WamRDQjNhV1IwYUQwaU16QWlJR2hsYVdkb2REMGlNVEFpSUhnOUlqRXpNQ0lnZVQwaU1UVXdJaUJtYVd4c1BTSWpNREF3TURBd0lpQXZQanh5WldOMElIZHBaSFJvUFNJeE1DSWdhR1ZwWjJoMFBTSXhNQ0lnZUQwaU1UY3dJaUI1UFNJeE5UQWlJR1pwYkd3OUlpTXdNREF3TURBaUlDOCtQSEpsWTNRZ2QybGtkR2c5SWpJd0lpQm9aV2xuYUhROUlqRXdJaUI0UFNJeE9EQWlJSGs5SWpFMU1DSWdabWxzYkQwaUkyWm1abVptWmlJZ0x6NDhjbVZqZENCM2FXUjBhRDBpTXpBaUlHaGxhV2RvZEQwaU1UQWlJSGc5SWpJd01DSWdlVDBpTVRVd0lpQm1hV3hzUFNJak1EQXdNREF3SWlBdlBqeHlaV04wSUhkcFpIUm9QU0kyTUNJZ2FHVnBaMmgwUFNJeE1DSWdlRDBpTVRBd0lpQjVQU0l4TmpBaUlHWnBiR3c5SWlNd01EQXdNREFpSUM4K1BISmxZM1FnZDJsa2RHZzlJall3SWlCb1pXbG5hSFE5SWpFd0lpQjRQU0l4TnpBaUlIazlJakUyTUNJZ1ptbHNiRDBpSXpBd01EQXdNQ0lnTHo0OEwzTjJaejQ9In0='; + export const MOCK_METADATA = { - name: 'name', - description: 'description', - image: 'image', - external_url: 'external_url', + name: 'Mock Name', + description: 'mock description', + image: 'image/mock.png', + external_url: 'mock/external_url', } satisfies NFTMetadata; export const MOCK_ERC721 = { @@ -16,3 +21,15 @@ export const MOCK_ERC721 = { metadata: MOCK_METADATA, tokenId: 42, } satisfies NFT; + +export const MOCK_ERC721_BASE64 = { + ...MOCK_ERC721, + uri: base64Metadata, +}; + +export const MOCK_METADATA_BASE64 = { + name: 'Mock Name', + description: 'mock description', + image: base64Image, + external_url: undefined, +} satisfies NFTMetadata; From 4154ac9f4e0bf9e848597fdb9f45a27967a11ff8 Mon Sep 17 00:00:00 2001 From: Korbinian Date: Thu, 4 Apr 2024 08:57:49 +0200 Subject: [PATCH 2/3] base64 decode script --- packages/bridge-ui/src/libs/token/fetchNFTImageUrl.ts | 2 +- packages/bridge-ui/src/libs/token/fetchNFTMetadata.ts | 2 +- packages/bridge-ui/src/libs/util/decodeBase64ToJson.ts | 10 ++++++++++ 3 files changed, 12 insertions(+), 2 deletions(-) create mode 100644 packages/bridge-ui/src/libs/util/decodeBase64ToJson.ts diff --git a/packages/bridge-ui/src/libs/token/fetchNFTImageUrl.ts b/packages/bridge-ui/src/libs/token/fetchNFTImageUrl.ts index 18546a81450..67abcbea83f 100644 --- a/packages/bridge-ui/src/libs/token/fetchNFTImageUrl.ts +++ b/packages/bridge-ui/src/libs/token/fetchNFTImageUrl.ts @@ -1,8 +1,8 @@ -import { decodeBase64ToJson } from 'scripts/utils/decodeBase64ToJson'; import { get } from 'svelte/store'; import { destNetwork } from '$components/Bridge/state'; import { fetchNFTMetadata } from '$libs/token/fetchNFTMetadata'; +import { decodeBase64ToJson } from '$libs/util/decodeBase64ToJson'; import { getLogger } from '$libs/util/logger'; import { resolveIPFSUri } from '$libs/util/resolveIPFSUri'; import { addMetadataToCache, isMetadataCached } from '$stores/metadata'; diff --git a/packages/bridge-ui/src/libs/token/fetchNFTMetadata.ts b/packages/bridge-ui/src/libs/token/fetchNFTMetadata.ts index 9d258519764..5fc80732dbc 100644 --- a/packages/bridge-ui/src/libs/token/fetchNFTMetadata.ts +++ b/packages/bridge-ui/src/libs/token/fetchNFTMetadata.ts @@ -1,10 +1,10 @@ import axios, { AxiosError, type AxiosRequestConfig } from 'axios'; -import { decodeBase64ToJson } from 'scripts/utils/decodeBase64ToJson'; import { get } from 'svelte/store'; import { destNetwork } from '$components/Bridge/state'; import { ipfsConfig } from '$config'; import { FetchMetadataError, NoMetadataFoundError, WrongChainError } from '$libs/error'; +import { decodeBase64ToJson } from '$libs/util/decodeBase64ToJson'; import { getLogger } from '$libs/util/logger'; import { resolveIPFSUri } from '$libs/util/resolveIPFSUri'; import { getMetadataFromCache, isMetadataCached, metadataCache } from '$stores/metadata'; diff --git a/packages/bridge-ui/src/libs/util/decodeBase64ToJson.ts b/packages/bridge-ui/src/libs/util/decodeBase64ToJson.ts new file mode 100644 index 00000000000..d4d98124058 --- /dev/null +++ b/packages/bridge-ui/src/libs/util/decodeBase64ToJson.ts @@ -0,0 +1,10 @@ +import { Buffer } from 'buffer'; + +export const decodeBase64ToJson = (base64: string) => { + try { + const decodedString = Buffer.from(base64, 'base64').toString('utf-8'); + return JSON.parse(decodedString); + } catch (error) { + throw new Error('Failed to decode and parse JSON from base64: ' + (error as Error).message); + } +}; From f1c070bdf221d9e914f40e791987088f3e28397d Mon Sep 17 00:00:00 2001 From: Korbinian Date: Thu, 4 Apr 2024 09:09:27 +0200 Subject: [PATCH 3/3] reduce base64 test --- packages/bridge-ui/src/tests/mocks/tokens.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/bridge-ui/src/tests/mocks/tokens.ts b/packages/bridge-ui/src/tests/mocks/tokens.ts index 56eb22b7bdd..56ee8958d80 100644 --- a/packages/bridge-ui/src/tests/mocks/tokens.ts +++ b/packages/bridge-ui/src/tests/mocks/tokens.ts @@ -1,9 +1,9 @@ import { type NFT, type NFTMetadata, TokenType } from '$libs/token/types'; const base64Image = - 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzIwIiBoZWlnaHQ9IjMyMCIgdmlld0JveD0iMCAwIDMyMCAzMjAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc2hhcGUtcmVuZGVyaW5nPSJjcmlzcEVkZ2VzIj48cmVjdCB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmaWxsPSIjZDVkN2UxIiAvPjxyZWN0IHdpZHRoPSIxNDAiIGhlaWdodD0iMTAiIHg9IjkwIiB5PSIyMTAiIGZpbGw9IiNmZmZkZjIiIC8+PHJlY3Qgd2lkdGg9IjE0MCIgaGVpZ2h0PSIxMCIgeD0iOTAiIHk9IjIyMCIgZmlsbD0iI2ZmZmRmMiIgLz48cmVjdCB3aWR0aD0iMTQwIiBoZWlnaHQ9IjEwIiB4PSI5MCIgeT0iMjMwIiBmaWxsPSIjZmZmZGYyIiAvPjxyZWN0IHdpZHRoPSIxNDAiIGhlaWdodD0iMTAiIHg9IjkwIiB5PSIyNDAiIGZpbGw9IiNmZmZkZjIiIC8+PHJlY3Qgd2lkdGg9IjIwIiBoZWlnaHQ9IjEwIiB4PSI5MCIgeT0iMjUwIiBmaWxsPSIjZmZmZGYyIiAvPjxyZWN0IHdpZHRoPSIxMTAiIGhlaWdodD0iMTAiIHg9IjEyMCIgeT0iMjUwIiBmaWxsPSIjZmZmZGYyIiAvPjxyZWN0IHdpZHRoPSIyMCIgaGVpZ2h0PSIxMCIgeD0iOTAiIHk9IjI2MCIgZmlsbD0iI2ZmZmRmMiIgLz48cmVjdCB3aWR0aD0iMTEwIiBoZWlnaHQ9IjEwIiB4PSIxMjAiIHk9IjI2MCIgZmlsbD0iI2ZmZmRmMiIgLz48cmVjdCB3aWR0aD0iMjAiIGhlaWdodD0iMTAiIHg9IjkwIiB5PSIyNzAiIGZpbGw9IiNmZmZkZjIiIC8+PHJlY3Qgd2lkdGg9IjExMCIgaGVpZ2h0PSIxMCIgeD0iMTIwIiB5PSIyNzAiIGZpbGw9IiNmZmZkZjIiIC8+PHJlY3Qgd2lkdGg9IjIwIiBoZWlnaHQ9IjEwIiB4PSI5MCIgeT0iMjgwIiBmaWxsPSIjZmZmZGYyIiAvPjxyZWN0IHdpZHRoPSIxMTAiIGhlaWdodD0iMTAiIHg9IjEyMCIgeT0iMjgwIiBmaWxsPSIjZmZmZGYyIiAvPjxyZWN0IHdpZHRoPSIyMCIgaGVpZ2h0PSIxMCIgeD0iOTAiIHk9IjI5MCIgZmlsbD0iI2ZmZmRmMiIgLz48cmVjdCB3aWR0aD0iMTEwIiBoZWlnaHQ9IjEwIiB4PSIxMjAiIHk9IjI5MCIgZmlsbD0iI2ZmZmRmMiIgLz48cmVjdCB3aWR0aD0iMjAiIGhlaWdodD0iMTAiIHg9IjkwIiB5PSIzMDAiIGZpbGw9IiNmZmZkZjIiIC8+PHJlY3Qgd2lkdGg9IjExMCIgaGVpZ2h0PSIxMCIgeD0iMTIwIiB5PSIzMDAiIGZpbGw9IiNmZmZkZjIiIC8+PHJlY3Qgd2lkdGg9IjIwIiBoZWlnaHQ9IjEwIiB4PSI5MCIgeT0iMzEwIiBmaWxsPSIjZmZmZGYyIiAvPjxyZWN0IHdpZHRoPSIxMTAiIGhlaWdodD0iMTAiIHg9IjEyMCIgeT0iMzEwIiBmaWxsPSIjZmZmZGYyIiAvPjxyZWN0IHdpZHRoPSIzMCIgaGVpZ2h0PSIxMCIgeD0iMTYwIiB5PSIyMjAiIGZpbGw9IiMwMDAwMDAiIC8+PHJlY3Qgd2lkdGg9IjcwIiBoZWlnaHQ9IjEwIiB4PSIxNDAiIHk9IjIzMCIgZmlsbD0iIzAwMDAwMCIgLz48cmVjdCB3aWR0aD0iNzAiIGhlaWdodD0iMTAiIHg9IjE0MCIgeT0iMjQwIiBmaWxsPSIjMDAwMDAwIiAvPjxyZWN0IHdpZHRoPSIzMCIgaGVpZ2h0PSIxMCIgeD0iMTMwIiB5PSIyNTAiIGZpbGw9IiMwMDAwMDAiIC8+PHJlY3Qgd2lkdGg9IjMwIiBoZWlnaHQ9IjEwIiB4PSIxNjAiIHk9IjI1MCIgZmlsbD0iI2ZmZmZmZiIgLz48cmVjdCB3aWR0aD0iMzAiIGhlaWdodD0iMTAiIHg9IjE5MCIgeT0iMjUwIiBmaWxsPSIjMDAwMDAwIiAvPjxyZWN0IHdpZHRoPSIzMCIgaGVpZ2h0PSIxMCIgeD0iMTMwIiB5PSIyNjAiIGZpbGw9IiMwMDAwMDAiIC8+PHJlY3Qgd2lkdGg9IjEwIiBoZWlnaHQ9IjEwIiB4PSIxNjAiIHk9IjI2MCIgZmlsbD0iI2ZmZmZmZiIgLz48cmVjdCB3aWR0aD0iMTAiIGhlaWdodD0iMTAiIHg9IjE4MCIgeT0iMjYwIiBmaWxsPSIjZmZmZmZmIiAvPjxyZWN0IHdpZHRoPSIzMCIgaGVpZ2h0PSIxMCIgeD0iMTkwIiB5PSIyNjAiIGZpbGw9IiMwMDAwMDAiIC8+PHJlY3Qgd2lkdGg9IjMwIiBoZWlnaHQ9IjEwIiB4PSIxMzAiIHk9IjI3MCIgZmlsbD0iIzAwMDAwMCIgLz48cmVjdCB3aWR0aD0iMzAiIGhlaWdodD0iMTAiIHg9IjE2MCIgeT0iMjcwIiBmaWxsPSIjZmZmZmZmIiAvPjxyZWN0IHdpZHRoPSIzMCIgaGVpZ2h0PSIxMCIgeD0iMTkwIiB5PSIyNzAiIGZpbGw9IiMwMDAwMDAiIC8+PHJlY3Qgd2lkdGg9IjcwIiBoZWlnaHQ9IjEwIiB4PSIxNDAiIHk9IjI4MCIgZmlsbD0iIzAwMDAwMCIgLz48cmVjdCB3aWR0aD0iNzAiIGhlaWdodD0iMTAiIHg9IjE0MCIgeT0iMjkwIiBmaWxsPSIjMDAwMDAwIiAvPjxyZWN0IHdpZHRoPSIzMCIgaGVpZ2h0PSIxMCIgeD0iMTYwIiB5PSIzMDAiIGZpbGw9IiMwMDAwMDAiIC8+PHJlY3Qgd2lkdGg9IjE2MCIgaGVpZ2h0PSIxMCIgeD0iODAiIHk9IjQwIiBmaWxsPSIjZmZmMGVlIiAvPjxyZWN0IHdpZHRoPSIxNjAiIGhlaWdodD0iMTAiIHg9IjgwIiB5PSI1MCIgZmlsbD0iI2ZmZjBlZSIgLz48cmVjdCB3aWR0aD0iNDAiIGhlaWdodD0iMTAiIHg9IjgwIiB5PSI2MCIgZmlsbD0iI2ZmZjBlZSIgLz48cmVjdCB3aWR0aD0iODAiIGhlaWdodD0iMTAiIHg9IjEyMCIgeT0iNjAiIGZpbGw9IiNkNmMzYmUiIC8+PHJlY3Qgd2lkdGg9IjQwIiBoZWlnaHQ9IjEwIiB4PSIyMDAiIHk9IjYwIiBmaWxsPSIjZmZmMGVlIiAvPjxyZWN0IHdpZHRoPSIzMCIgaGVpZ2h0PSIxMCIgeD0iODAiIHk9IjcwIiBmaWxsPSIjZmZmMGVlIiAvPjxyZWN0IHdpZHRoPSIyMCIgaGVpZ2h0PSIxMCIgeD0iMTEwIiB5PSI3MCIgZmlsbD0iI2Q2YzNiZSIgLz48cmVjdCB3aWR0aD0iMTAiIGhlaWdodD0iMTAiIHg9IjEzMCIgeT0iNzAiIGZpbGw9IiMwMDAwMDAiIC8+PHJlY3Qgd2lkdGg9IjQwIiBoZWlnaHQ9IjEwIiB4PSIxNDAiIHk9IjcwIiBmaWxsPSIjZDZjM2JlIiAvPjxyZWN0IHdpZHRoPSIxMCIgaGVpZ2h0PSIxMCIgeD0iMTgwIiB5PSI3MCIgZmlsbD0iIzAwMDAwMCIgLz48cmVjdCB3aWR0aD0iMjAiIGhlaWdodD0iMTAiIHg9IjE5MCIgeT0iNzAiIGZpbGw9IiNkNmMzYmUiIC8+PHJlY3Qgd2lkdGg9IjMwIiBoZWlnaHQ9IjEwIiB4PSIyMTAiIHk9IjcwIiBmaWxsPSIjZmZmMGVlIiAvPjxyZWN0IHdpZHRoPSIzMCIgaGVpZ2h0PSIxMCIgeD0iODAiIHk9IjgwIiBmaWxsPSIjZmZmMGVlIiAvPjxyZWN0IHdpZHRoPSIyMCIgaGVpZ2h0PSIxMCIgeD0iMTEwIiB5PSI4MCIgZmlsbD0iI2Q2YzNiZSIgLz48cmVjdCB3aWR0aD0iMTAiIGhlaWdodD0iMTAiIHg9IjEzMCIgeT0iODAiIGZpbGw9IiMwMDAwMDAiIC8+PHJlY3Qgd2lkdGg9IjQwIiBoZWlnaHQ9IjEwIiB4PSIxNDAiIHk9IjgwIiBmaWxsPSIjZDZjM2JlIiAvPjxyZWN0IHdpZHRoPSIxMCIgaGVpZ2h0PSIxMCIgeD0iMTgwIiB5PSI4MCIgZmlsbD0iIzAwMDAwMCIgLz48cmVjdCB3aWR0aD0iMjAiIGhlaWdodD0iMTAiIHg9IjE5MCIgeT0iODAiIGZpbGw9IiNkNmMzYmUiIC8+PHJlY3Qgd2lkdGg9IjMwIiBoZWlnaHQ9IjEwIiB4PSIyMTAiIHk9IjgwIiBmaWxsPSIjZmZmMGVlIiAvPjxyZWN0IHdpZHRoPSIzMCIgaGVpZ2h0PSIxMCIgeD0iODAiIHk9IjkwIiBmaWxsPSIjZmZmMGVlIiAvPjxyZWN0IHdpZHRoPSIxMCIgaGVpZ2h0PSIxMCIgeD0iMTEwIiB5PSI5MCIgZmlsbD0iI2Q2YzNiZSIgLz48cmVjdCB3aWR0aD0iMzAiIGhlaWdodD0iMTAiIHg9IjEyMCIgeT0iOTAiIGZpbGw9IiNiMjk1OGQiIC8+PHJlY3Qgd2lkdGg9IjIwIiBoZWlnaHQ9IjEwIiB4PSIxNTAiIHk9IjkwIiBmaWxsPSIjZDZjM2JlIiAvPjxyZWN0IHdpZHRoPSIzMCIgaGVpZ2h0PSIxMCIgeD0iMTcwIiB5PSI5MCIgZmlsbD0iI2IyOTU4ZCIgLz48cmVjdCB3aWR0aD0iMTAiIGhlaWdodD0iMTAiIHg9IjIwMCIgeT0iOTAiIGZpbGw9IiNkNmMzYmUiIC8+PHJlY3Qgd2lkdGg9IjMwIiBoZWlnaHQ9IjEwIiB4PSIyMTAiIHk9IjkwIiBmaWxsPSIjZmZmMGVlIiAvPjxyZWN0IHdpZHRoPSIzMCIgaGVpZ2h0PSIxMCIgeD0iODAiIHk9IjEwMCIgZmlsbD0iI2ZmZjBlZSIgLz48cmVjdCB3aWR0aD0iNDAiIGhlaWdodD0iMTAiIHg9IjExMCIgeT0iMTAwIiBmaWxsPSIjZDZjM2JlIiAvPjxyZWN0IHdpZHRoPSIyMCIgaGVpZ2h0PSIxMCIgeD0iMTUwIiB5PSIxMDAiIGZpbGw9IiMwMDAwMDAiIC8+PHJlY3Qgd2lkdGg9IjQwIiBoZWlnaHQ9IjEwIiB4PSIxNzAiIHk9IjEwMCIgZmlsbD0iI2Q2YzNiZSIgLz48cmVjdCB3aWR0aD0iMzAiIGhlaWdodD0iMTAiIHg9IjIxMCIgeT0iMTAwIiBmaWxsPSIjZmZmMGVlIiAvPjxyZWN0IHdpZHRoPSIzMCIgaGVpZ2h0PSIxMCIgeD0iODAiIHk9IjExMCIgZmlsbD0iI2ZmZjBlZSIgLz48cmVjdCB3aWR0aD0iNDAiIGhlaWdodD0iMTAiIHg9IjExMCIgeT0iMTEwIiBmaWxsPSIjZDZjM2JlIiAvPjxyZWN0IHdpZHRoPSIyMCIgaGVpZ2h0PSIxMCIgeD0iMTUwIiB5PSIxMTAiIGZpbGw9IiMwMDAwMDAiIC8+PHJlY3Qgd2lkdGg9IjQwIiBoZWlnaHQ9IjEwIiB4PSIxNzAiIHk9IjExMCIgZmlsbD0iI2Q2YzNiZSIgLz48cmVjdCB3aWR0aD0iMzAiIGhlaWdodD0iMTAiIHg9IjIxMCIgeT0iMTEwIiBmaWxsPSIjZmZmMGVlIiAvPjxyZWN0IHdpZHRoPSI0MCIgaGVpZ2h0PSIxMCIgeD0iODAiIHk9IjEyMCIgZmlsbD0iI2ZmZjBlZSIgLz48cmVjdCB3aWR0aD0iODAiIGhlaWdodD0iMTAiIHg9IjEyMCIgeT0iMTIwIiBmaWxsPSIjZDZjM2JlIiAvPjxyZWN0IHdpZHRoPSI0MCIgaGVpZ2h0PSIxMCIgeD0iMjAwIiB5PSIxMjAiIGZpbGw9IiNmZmYwZWUiIC8+PHJlY3Qgd2lkdGg9IjE2MCIgaGVpZ2h0PSIxMCIgeD0iODAiIHk9IjEzMCIgZmlsbD0iI2ZmZjBlZSIgLz48cmVjdCB3aWR0aD0iNDAiIGhlaWdodD0iMTAiIHg9IjgwIiB5PSIxNDAiIGZpbGw9IiNmZmYwZWUiIC8+PHJlY3Qgd2lkdGg9IjgwIiBoZWlnaHQ9IjEwIiB4PSIxMjAiIHk9IjE0MCIgZmlsbD0iI2Q2YzNiZSIgLz48cmVjdCB3aWR0aD0iNDAiIGhlaWdodD0iMTAiIHg9IjIwMCIgeT0iMTQwIiBmaWxsPSIjZmZmMGVlIiAvPjxyZWN0IHdpZHRoPSIzMCIgaGVpZ2h0PSIxMCIgeD0iODAiIHk9IjE1MCIgZmlsbD0iI2ZmZjBlZSIgLz48cmVjdCB3aWR0aD0iMjAiIGhlaWdodD0iMTAiIHg9IjExMCIgeT0iMTUwIiBmaWxsPSIjZDZjM2JlIiAvPjxyZWN0IHdpZHRoPSIxMCIgaGVpZ2h0PSIxMCIgeD0iMTMwIiB5PSIxNTAiIGZpbGw9IiMwMDAwMDAiIC8+PHJlY3Qgd2lkdGg9IjQwIiBoZWlnaHQ9IjEwIiB4PSIxNDAiIHk9IjE1MCIgZmlsbD0iI2Q2YzNiZSIgLz48cmVjdCB3aWR0aD0iMTAiIGhlaWdodD0iMTAiIHg9IjE4MCIgeT0iMTUwIiBmaWxsPSIjMDAwMDAwIiAvPjxyZWN0IHdpZHRoPSIyMCIgaGVpZ2h0PSIxMCIgeD0iMTkwIiB5PSIxNTAiIGZpbGw9IiNkNmMzYmUiIC8+PHJlY3Qgd2lkdGg9IjMwIiBoZWlnaHQ9IjEwIiB4PSIyMTAiIHk9IjE1MCIgZmlsbD0iI2ZmZjBlZSIgLz48cmVjdCB3aWR0aD0iMzAiIGhlaWdodD0iMTAiIHg9IjgwIiB5PSIxNjAiIGZpbGw9IiNmZmYwZWUiIC8+PHJlY3Qgd2lkdGg9IjIwIiBoZWlnaHQ9IjEwIiB4PSIxMTAiIHk9IjE2MCIgZmlsbD0iI2Q2YzNiZSIgLz48cmVjdCB3aWR0aD0iMTAiIGhlaWdodD0iMTAiIHg9IjEzMCIgeT0iMTYwIiBmaWxsPSIjMDAwMDAwIiAvPjxyZWN0IHdpZHRoPSI0MCIgaGVpZ2h0PSIxMCIgeD0iMTQwIiB5PSIxNjAiIGZpbGw9IiNkNmMzYmUiIC8+PHJlY3Qgd2lkdGg9IjEwIiBoZWlnaHQ9IjEwIiB4PSIxODAiIHk9IjE2MCIgZmlsbD0iIzAwMDAwMCIgLz48cmVjdCB3aWR0aD0iMjAiIGhlaWdodD0iMTAiIHg9IjE5MCIgeT0iMTYwIiBmaWxsPSIjZDZjM2JlIiAvPjxyZWN0IHdpZHRoPSIzMCIgaGVpZ2h0PSIxMCIgeD0iMjEwIiB5PSIxNjAiIGZpbGw9IiNmZmYwZWUiIC8+PHJlY3Qgd2lkdGg9IjMwIiBoZWlnaHQ9IjEwIiB4PSI4MCIgeT0iMTcwIiBmaWxsPSIjZmZmMGVlIiAvPjxyZWN0IHdpZHRoPSIxMCIgaGVpZ2h0PSIxMCIgeD0iMTEwIiB5PSIxNzAiIGZpbGw9IiNkNmMzYmUiIC8+PHJlY3Qgd2lkdGg9IjMwIiBoZWlnaHQ9IjEwIiB4PSIxMjAiIHk9IjE3MCIgZmlsbD0iI2IyOTU4ZCIgLz48cmVjdCB3aWR0aD0iMjAiIGhlaWdodD0iMTAiIHg9IjE1MCIgeT0iMTcwIiBmaWxsPSIjZDZjM2JlIiAvPjxyZWN0IHdpZHRoPSIzMCIgaGVpZ2h0PSIxMCIgeD0iMTcwIiB5PSIxNzAiIGZpbGw9IiNiMjk1OGQiIC8+PHJlY3Qgd2lkdGg9IjEwIiBoZWlnaHQ9IjEwIiB4PSIyMDAiIHk9IjE3MCIgZmlsbD0iI2Q2YzNiZSIgLz48cmVjdCB3aWR0aD0iMzAiIGhlaWdodD0iMTAiIHg9IjIxMCIgeT0iMTcwIiBmaWxsPSIjZmZmMGVlIiAvPjxyZWN0IHdpZHRoPSIzMCIgaGVpZ2h0PSIxMCIgeD0iODAiIHk9IjE4MCIgZmlsbD0iI2ZmZjBlZSIgLz48cmVjdCB3aWR0aD0iNDAiIGhlaWdodD0iMTAiIHg9IjExMCIgeT0iMTgwIiBmaWxsPSIjZDZjM2JlIiAvPjxyZWN0IHdpZHRoPSIyMCIgaGVpZ2h0PSIxMCIgeD0iMTUwIiB5PSIxODAiIGZpbGw9IiMwMDAwMDAiIC8+PHJlY3Qgd2lkdGg9IjQwIiBoZWlnaHQ9IjEwIiB4PSIxNzAiIHk9IjE4MCIgZmlsbD0iI2Q2YzNiZSIgLz48cmVjdCB3aWR0aD0iMzAiIGhlaWdodD0iMTAiIHg9IjIxMCIgeT0iMTgwIiBmaWxsPSIjZmZmMGVlIiAvPjxyZWN0IHdpZHRoPSIzMCIgaGVpZ2h0PSIxMCIgeD0iODAiIHk9IjE5MCIgZmlsbD0iI2ZmZjBlZSIgLz48cmVjdCB3aWR0aD0iNDAiIGhlaWdodD0iMTAiIHg9IjExMCIgeT0iMTkwIiBmaWxsPSIjZDZjM2JlIiAvPjxyZWN0IHdpZHRoPSIyMCIgaGVpZ2h0PSIxMCIgeD0iMTUwIiB5PSIxOTAiIGZpbGw9IiMwMDAwMDAiIC8+PHJlY3Qgd2lkdGg9IjQwIiBoZWlnaHQ9IjEwIiB4PSIxNzAiIHk9IjE5MCIgZmlsbD0iI2Q2YzNiZSIgLz48cmVjdCB3aWR0aD0iMzAiIGhlaWdodD0iMTAiIHg9IjIxMCIgeT0iMTkwIiBmaWxsPSIjZmZmMGVlIiAvPjxyZWN0IHdpZHRoPSI0MCIgaGVpZ2h0PSIxMCIgeD0iODAiIHk9IjIwMCIgZmlsbD0iI2ZmZjBlZSIgLz48cmVjdCB3aWR0aD0iODAiIGhlaWdodD0iMTAiIHg9IjEyMCIgeT0iMjAwIiBmaWxsPSIjZDZjM2JlIiAvPjxyZWN0IHdpZHRoPSI0MCIgaGVpZ2h0PSIxMCIgeD0iMjAwIiB5PSIyMDAiIGZpbGw9IiNmZmYwZWUiIC8+PHJlY3Qgd2lkdGg9IjE2MCIgaGVpZ2h0PSIxMCIgeD0iODAiIHk9IjIxMCIgZmlsbD0iI2ZmZjBlZSIgLz48cmVjdCB3aWR0aD0iMTYwIiBoZWlnaHQ9IjEwIiB4PSI4MCIgeT0iMjIwIiBmaWxsPSIjZmZmMGVlIiAvPjxyZWN0IHdpZHRoPSI2MCIgaGVpZ2h0PSIxMCIgeD0iMTAwIiB5PSIxMTAiIGZpbGw9IiMwMDAwMDAiIC8+PHJlY3Qgd2lkdGg9IjYwIiBoZWlnaHQ9IjEwIiB4PSIxNzAiIHk9IjExMCIgZmlsbD0iIzAwMDAwMCIgLz48cmVjdCB3aWR0aD0iMTAiIGhlaWdodD0iMTAiIHg9IjEwMCIgeT0iMTIwIiBmaWxsPSIjMDAwMDAwIiAvPjxyZWN0IHdpZHRoPSIyMCIgaGVpZ2h0PSIxMCIgeD0iMTEwIiB5PSIxMjAiIGZpbGw9IiNmZmZmZmYiIC8+PHJlY3Qgd2lkdGg9IjMwIiBoZWlnaHQ9IjEwIiB4PSIxMzAiIHk9IjEyMCIgZmlsbD0iIzAwMDAwMCIgLz48cmVjdCB3aWR0aD0iMTAiIGhlaWdodD0iMTAiIHg9IjE3MCIgeT0iMTIwIiBmaWxsPSIjMDAwMDAwIiAvPjxyZWN0IHdpZHRoPSIyMCIgaGVpZ2h0PSIxMCIgeD0iMTgwIiB5PSIxMjAiIGZpbGw9IiNmZmZmZmYiIC8+PHJlY3Qgd2lkdGg9IjMwIiBoZWlnaHQ9IjEwIiB4PSIyMDAiIHk9IjEyMCIgZmlsbD0iIzAwMDAwMCIgLz48cmVjdCB3aWR0aD0iNDAiIGhlaWdodD0iMTAiIHg9IjcwIiB5PSIxMzAiIGZpbGw9IiMwMDAwMDAiIC8+PHJlY3Qgd2lkdGg9IjIwIiBoZWlnaHQ9IjEwIiB4PSIxMTAiIHk9IjEzMCIgZmlsbD0iI2ZmZmZmZiIgLz48cmVjdCB3aWR0aD0iNTAiIGhlaWdodD0iMTAiIHg9IjEzMCIgeT0iMTMwIiBmaWxsPSIjMDAwMDAwIiAvPjxyZWN0IHdpZHRoPSIyMCIgaGVpZ2h0PSIxMCIgeD0iMTgwIiB5PSIxMzAiIGZpbGw9IiNmZmZmZmYiIC8+PHJlY3Qgd2lkdGg9IjMwIiBoZWlnaHQ9IjEwIiB4PSIyMDAiIHk9IjEzMCIgZmlsbD0iIzAwMDAwMCIgLz48cmVjdCB3aWR0aD0iMTAiIGhlaWdodD0iMTAiIHg9IjcwIiB5PSIxNDAiIGZpbGw9IiMwMDAwMDAiIC8+PHJlY3Qgd2lkdGg9IjEwIiBoZWlnaHQ9IjEwIiB4PSIxMDAiIHk9IjE0MCIgZmlsbD0iIzAwMDAwMCIgLz48cmVjdCB3aWR0aD0iMjAiIGhlaWdodD0iMTAiIHg9IjExMCIgeT0iMTQwIiBmaWxsPSIjZmZmZmZmIiAvPjxyZWN0IHdpZHRoPSIzMCIgaGVpZ2h0PSIxMCIgeD0iMTMwIiB5PSIxNDAiIGZpbGw9IiMwMDAwMDAiIC8+PHJlY3Qgd2lkdGg9IjEwIiBoZWlnaHQ9IjEwIiB4PSIxNzAiIHk9IjE0MCIgZmlsbD0iIzAwMDAwMCIgLz48cmVjdCB3aWR0aD0iMjAiIGhlaWdodD0iMTAiIHg9IjE4MCIgeT0iMTQwIiBmaWxsPSIjZmZmZmZmIiAvPjxyZWN0IHdpZHRoPSIzMCIgaGVpZ2h0PSIxMCIgeD0iMjAwIiB5PSIxNDAiIGZpbGw9IiMwMDAwMDAiIC8+PHJlY3Qgd2lkdGg9IjEwIiBoZWlnaHQ9IjEwIiB4PSI3MCIgeT0iMTUwIiBmaWxsPSIjMDAwMDAwIiAvPjxyZWN0IHdpZHRoPSIxMCIgaGVpZ2h0PSIxMCIgeD0iMTAwIiB5PSIxNTAiIGZpbGw9IiMwMDAwMDAiIC8+PHJlY3Qgd2lkdGg9IjIwIiBoZWlnaHQ9IjEwIiB4PSIxMTAiIHk9IjE1MCIgZmlsbD0iI2ZmZmZmZiIgLz48cmVjdCB3aWR0aD0iMzAiIGhlaWdodD0iMTAiIHg9IjEzMCIgeT0iMTUwIiBmaWxsPSIjMDAwMDAwIiAvPjxyZWN0IHdpZHRoPSIxMCIgaGVpZ2h0PSIxMCIgeD0iMTcwIiB5PSIxNTAiIGZpbGw9IiMwMDAwMDAiIC8+PHJlY3Qgd2lkdGg9IjIwIiBoZWlnaHQ9IjEwIiB4PSIxODAiIHk9IjE1MCIgZmlsbD0iI2ZmZmZmZiIgLz48cmVjdCB3aWR0aD0iMzAiIGhlaWdodD0iMTAiIHg9IjIwMCIgeT0iMTUwIiBmaWxsPSIjMDAwMDAwIiAvPjxyZWN0IHdpZHRoPSI2MCIgaGVpZ2h0PSIxMCIgeD0iMTAwIiB5PSIxNjAiIGZpbGw9IiMwMDAwMDAiIC8+PHJlY3Qgd2lkdGg9IjYwIiBoZWlnaHQ9IjEwIiB4PSIxNzAiIHk9IjE2MCIgZmlsbD0iIzAwMDAwMCIgLz48L3N2Zz4='; + 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzIwIiBoZWlnaHQ9IjMyMCIgdmlld0JveD0iMCAwIDMyMCAzMjAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc2hhcGUtcmVuZGVyaW5nPSJjcmlzcEVkZ2VzIj48cmVjdCB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmaWxsPSIjZDVkN2UxIiAvPjxyZWN0IHdpZHRoPSIxNDAiIGhlaWdodD0iMTAiIHg9IjkwIiB5PSIyMTAiIGZpbGw9IiNmZmZkZjIiIC8+PC9zdmc+'; export const base64Metadata = - 'data:application/json;base64,eyJuYW1lIjoiTW9jayBOYW1lIiwgImRlc2NyaXB0aW9uIjoibW9jayBkZXNjcmlwdGlvbiIsICJpbWFnZSI6ICJkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LFBITjJaeUIzYVdSMGFEMGlNekl3SWlCb1pXbG5hSFE5SWpNeU1DSWdkbWxsZDBKdmVEMGlNQ0F3SURNeU1DQXpNakFpSUhodGJHNXpQU0pvZEhSd09pOHZkM2QzTG5jekxtOXlaeTh5TURBd0wzTjJaeUlnYzJoaGNHVXRjbVZ1WkdWeWFXNW5QU0pqY21semNFVmtaMlZ6SWo0OGNtVmpkQ0IzYVdSMGFEMGlNVEF3SlNJZ2FHVnBaMmgwUFNJeE1EQWxJaUJtYVd4c1BTSWpaRFZrTjJVeElpQXZQanh5WldOMElIZHBaSFJvUFNJeE5EQWlJR2hsYVdkb2REMGlNVEFpSUhnOUlqa3dJaUI1UFNJeU1UQWlJR1pwYkd3OUlpTm1abVprWmpJaUlDOCtQSEpsWTNRZ2QybGtkR2c5SWpFME1DSWdhR1ZwWjJoMFBTSXhNQ0lnZUQwaU9UQWlJSGs5SWpJeU1DSWdabWxzYkQwaUkyWm1abVJtTWlJZ0x6NDhjbVZqZENCM2FXUjBhRDBpTVRRd0lpQm9aV2xuYUhROUlqRXdJaUI0UFNJNU1DSWdlVDBpTWpNd0lpQm1hV3hzUFNJalptWm1aR1l5SWlBdlBqeHlaV04wSUhkcFpIUm9QU0l4TkRBaUlHaGxhV2RvZEQwaU1UQWlJSGc5SWprd0lpQjVQU0l5TkRBaUlHWnBiR3c5SWlObVptWmtaaklpSUM4K1BISmxZM1FnZDJsa2RHZzlJakl3SWlCb1pXbG5hSFE5SWpFd0lpQjRQU0k1TUNJZ2VUMGlNalV3SWlCbWFXeHNQU0lqWm1abVpHWXlJaUF2UGp4eVpXTjBJSGRwWkhSb1BTSXhNVEFpSUdobGFXZG9kRDBpTVRBaUlIZzlJakV5TUNJZ2VUMGlNalV3SWlCbWFXeHNQU0lqWm1abVpHWXlJaUF2UGp4eVpXTjBJSGRwWkhSb1BTSXlNQ0lnYUdWcFoyaDBQU0l4TUNJZ2VEMGlPVEFpSUhrOUlqSTJNQ0lnWm1sc2JEMGlJMlptWm1SbU1pSWdMejQ4Y21WamRDQjNhV1IwYUQwaU1URXdJaUJvWldsbmFIUTlJakV3SWlCNFBTSXhNakFpSUhrOUlqSTJNQ0lnWm1sc2JEMGlJMlptWm1SbU1pSWdMejQ4Y21WamRDQjNhV1IwYUQwaU1qQWlJR2hsYVdkb2REMGlNVEFpSUhnOUlqa3dJaUI1UFNJeU56QWlJR1pwYkd3OUlpTm1abVprWmpJaUlDOCtQSEpsWTNRZ2QybGtkR2c5SWpFeE1DSWdhR1ZwWjJoMFBTSXhNQ0lnZUQwaU1USXdJaUI1UFNJeU56QWlJR1pwYkd3OUlpTm1abVprWmpJaUlDOCtQSEpsWTNRZ2QybGtkR2c5SWpJd0lpQm9aV2xuYUhROUlqRXdJaUI0UFNJNU1DSWdlVDBpTWpnd0lpQm1hV3hzUFNJalptWm1aR1l5SWlBdlBqeHlaV04wSUhkcFpIUm9QU0l4TVRBaUlHaGxhV2RvZEQwaU1UQWlJSGc5SWpFeU1DSWdlVDBpTWpnd0lpQm1hV3hzUFNJalptWm1aR1l5SWlBdlBqeHlaV04wSUhkcFpIUm9QU0l5TUNJZ2FHVnBaMmgwUFNJeE1DSWdlRDBpT1RBaUlIazlJakk1TUNJZ1ptbHNiRDBpSTJabVptUm1NaUlnTHo0OGNtVmpkQ0IzYVdSMGFEMGlNVEV3SWlCb1pXbG5hSFE5SWpFd0lpQjRQU0l4TWpBaUlIazlJakk1TUNJZ1ptbHNiRDBpSTJabVptUm1NaUlnTHo0OGNtVmpkQ0IzYVdSMGFEMGlNakFpSUdobGFXZG9kRDBpTVRBaUlIZzlJamt3SWlCNVBTSXpNREFpSUdacGJHdzlJaU5tWm1aa1pqSWlJQzgrUEhKbFkzUWdkMmxrZEdnOUlqRXhNQ0lnYUdWcFoyaDBQU0l4TUNJZ2VEMGlNVEl3SWlCNVBTSXpNREFpSUdacGJHdzlJaU5tWm1aa1pqSWlJQzgrUEhKbFkzUWdkMmxrZEdnOUlqSXdJaUJvWldsbmFIUTlJakV3SWlCNFBTSTVNQ0lnZVQwaU16RXdJaUJtYVd4c1BTSWpabVptWkdZeUlpQXZQanh5WldOMElIZHBaSFJvUFNJeE1UQWlJR2hsYVdkb2REMGlNVEFpSUhnOUlqRXlNQ0lnZVQwaU16RXdJaUJtYVd4c1BTSWpabVptWkdZeUlpQXZQanh5WldOMElIZHBaSFJvUFNJek1DSWdhR1ZwWjJoMFBTSXhNQ0lnZUQwaU1UWXdJaUI1UFNJeU1qQWlJR1pwYkd3OUlpTXdNREF3TURBaUlDOCtQSEpsWTNRZ2QybGtkR2c5SWpjd0lpQm9aV2xuYUhROUlqRXdJaUI0UFNJeE5EQWlJSGs5SWpJek1DSWdabWxzYkQwaUl6QXdNREF3TUNJZ0x6NDhjbVZqZENCM2FXUjBhRDBpTnpBaUlHaGxhV2RvZEQwaU1UQWlJSGc5SWpFME1DSWdlVDBpTWpRd0lpQm1hV3hzUFNJak1EQXdNREF3SWlBdlBqeHlaV04wSUhkcFpIUm9QU0l6TUNJZ2FHVnBaMmgwUFNJeE1DSWdlRDBpTVRNd0lpQjVQU0l5TlRBaUlHWnBiR3c5SWlNd01EQXdNREFpSUM4K1BISmxZM1FnZDJsa2RHZzlJak13SWlCb1pXbG5hSFE5SWpFd0lpQjRQU0l4TmpBaUlIazlJakkxTUNJZ1ptbHNiRDBpSTJabVptWm1aaUlnTHo0OGNtVmpkQ0IzYVdSMGFEMGlNekFpSUdobGFXZG9kRDBpTVRBaUlIZzlJakU1TUNJZ2VUMGlNalV3SWlCbWFXeHNQU0lqTURBd01EQXdJaUF2UGp4eVpXTjBJSGRwWkhSb1BTSXpNQ0lnYUdWcFoyaDBQU0l4TUNJZ2VEMGlNVE13SWlCNVBTSXlOakFpSUdacGJHdzlJaU13TURBd01EQWlJQzgrUEhKbFkzUWdkMmxrZEdnOUlqRXdJaUJvWldsbmFIUTlJakV3SWlCNFBTSXhOakFpSUhrOUlqSTJNQ0lnWm1sc2JEMGlJMlptWm1abVppSWdMejQ4Y21WamRDQjNhV1IwYUQwaU1UQWlJR2hsYVdkb2REMGlNVEFpSUhnOUlqRTRNQ0lnZVQwaU1qWXdJaUJtYVd4c1BTSWpabVptWm1abUlpQXZQanh5WldOMElIZHBaSFJvUFNJek1DSWdhR1ZwWjJoMFBTSXhNQ0lnZUQwaU1Ua3dJaUI1UFNJeU5qQWlJR1pwYkd3OUlpTXdNREF3TURBaUlDOCtQSEpsWTNRZ2QybGtkR2c5SWpNd0lpQm9aV2xuYUhROUlqRXdJaUI0UFNJeE16QWlJSGs5SWpJM01DSWdabWxzYkQwaUl6QXdNREF3TUNJZ0x6NDhjbVZqZENCM2FXUjBhRDBpTXpBaUlHaGxhV2RvZEQwaU1UQWlJSGc5SWpFMk1DSWdlVDBpTWpjd0lpQm1hV3hzUFNJalptWm1abVptSWlBdlBqeHlaV04wSUhkcFpIUm9QU0l6TUNJZ2FHVnBaMmgwUFNJeE1DSWdlRDBpTVRrd0lpQjVQU0l5TnpBaUlHWnBiR3c5SWlNd01EQXdNREFpSUM4K1BISmxZM1FnZDJsa2RHZzlJamN3SWlCb1pXbG5hSFE5SWpFd0lpQjRQU0l4TkRBaUlIazlJakk0TUNJZ1ptbHNiRDBpSXpBd01EQXdNQ0lnTHo0OGNtVmpkQ0IzYVdSMGFEMGlOekFpSUdobGFXZG9kRDBpTVRBaUlIZzlJakUwTUNJZ2VUMGlNamt3SWlCbWFXeHNQU0lqTURBd01EQXdJaUF2UGp4eVpXTjBJSGRwWkhSb1BTSXpNQ0lnYUdWcFoyaDBQU0l4TUNJZ2VEMGlNVFl3SWlCNVBTSXpNREFpSUdacGJHdzlJaU13TURBd01EQWlJQzgrUEhKbFkzUWdkMmxrZEdnOUlqRTJNQ0lnYUdWcFoyaDBQU0l4TUNJZ2VEMGlPREFpSUhrOUlqUXdJaUJtYVd4c1BTSWpabVptTUdWbElpQXZQanh5WldOMElIZHBaSFJvUFNJeE5qQWlJR2hsYVdkb2REMGlNVEFpSUhnOUlqZ3dJaUI1UFNJMU1DSWdabWxzYkQwaUkyWm1aakJsWlNJZ0x6NDhjbVZqZENCM2FXUjBhRDBpTkRBaUlHaGxhV2RvZEQwaU1UQWlJSGc5SWpnd0lpQjVQU0kyTUNJZ1ptbHNiRDBpSTJabVpqQmxaU0lnTHo0OGNtVmpkQ0IzYVdSMGFEMGlPREFpSUdobGFXZG9kRDBpTVRBaUlIZzlJakV5TUNJZ2VUMGlOakFpSUdacGJHdzlJaU5rTm1NelltVWlJQzgrUEhKbFkzUWdkMmxrZEdnOUlqUXdJaUJvWldsbmFIUTlJakV3SWlCNFBTSXlNREFpSUhrOUlqWXdJaUJtYVd4c1BTSWpabVptTUdWbElpQXZQanh5WldOMElIZHBaSFJvUFNJek1DSWdhR1ZwWjJoMFBTSXhNQ0lnZUQwaU9EQWlJSGs5SWpjd0lpQm1hV3hzUFNJalptWm1NR1ZsSWlBdlBqeHlaV04wSUhkcFpIUm9QU0l5TUNJZ2FHVnBaMmgwUFNJeE1DSWdlRDBpTVRFd0lpQjVQU0kzTUNJZ1ptbHNiRDBpSTJRMll6TmlaU0lnTHo0OGNtVmpkQ0IzYVdSMGFEMGlNVEFpSUdobGFXZG9kRDBpTVRBaUlIZzlJakV6TUNJZ2VUMGlOekFpSUdacGJHdzlJaU13TURBd01EQWlJQzgrUEhKbFkzUWdkMmxrZEdnOUlqUXdJaUJvWldsbmFIUTlJakV3SWlCNFBTSXhOREFpSUhrOUlqY3dJaUJtYVd4c1BTSWpaRFpqTTJKbElpQXZQanh5WldOMElIZHBaSFJvUFNJeE1DSWdhR1ZwWjJoMFBTSXhNQ0lnZUQwaU1UZ3dJaUI1UFNJM01DSWdabWxzYkQwaUl6QXdNREF3TUNJZ0x6NDhjbVZqZENCM2FXUjBhRDBpTWpBaUlHaGxhV2RvZEQwaU1UQWlJSGc5SWpFNU1DSWdlVDBpTnpBaUlHWnBiR3c5SWlOa05tTXpZbVVpSUM4K1BISmxZM1FnZDJsa2RHZzlJak13SWlCb1pXbG5hSFE5SWpFd0lpQjRQU0l5TVRBaUlIazlJamN3SWlCbWFXeHNQU0lqWm1abU1HVmxJaUF2UGp4eVpXTjBJSGRwWkhSb1BTSXpNQ0lnYUdWcFoyaDBQU0l4TUNJZ2VEMGlPREFpSUhrOUlqZ3dJaUJtYVd4c1BTSWpabVptTUdWbElpQXZQanh5WldOMElIZHBaSFJvUFNJeU1DSWdhR1ZwWjJoMFBTSXhNQ0lnZUQwaU1URXdJaUI1UFNJNE1DSWdabWxzYkQwaUkyUTJZek5pWlNJZ0x6NDhjbVZqZENCM2FXUjBhRDBpTVRBaUlHaGxhV2RvZEQwaU1UQWlJSGc5SWpFek1DSWdlVDBpT0RBaUlHWnBiR3c5SWlNd01EQXdNREFpSUM4K1BISmxZM1FnZDJsa2RHZzlJalF3SWlCb1pXbG5hSFE5SWpFd0lpQjRQU0l4TkRBaUlIazlJamd3SWlCbWFXeHNQU0lqWkRaak0ySmxJaUF2UGp4eVpXTjBJSGRwWkhSb1BTSXhNQ0lnYUdWcFoyaDBQU0l4TUNJZ2VEMGlNVGd3SWlCNVBTSTRNQ0lnWm1sc2JEMGlJekF3TURBd01DSWdMejQ4Y21WamRDQjNhV1IwYUQwaU1qQWlJR2hsYVdkb2REMGlNVEFpSUhnOUlqRTVNQ0lnZVQwaU9EQWlJR1pwYkd3OUlpTmtObU16WW1VaUlDOCtQSEpsWTNRZ2QybGtkR2c5SWpNd0lpQm9aV2xuYUhROUlqRXdJaUI0UFNJeU1UQWlJSGs5SWpnd0lpQm1hV3hzUFNJalptWm1NR1ZsSWlBdlBqeHlaV04wSUhkcFpIUm9QU0l6TUNJZ2FHVnBaMmgwUFNJeE1DSWdlRDBpT0RBaUlIazlJamt3SWlCbWFXeHNQU0lqWm1abU1HVmxJaUF2UGp4eVpXTjBJSGRwWkhSb1BTSXhNQ0lnYUdWcFoyaDBQU0l4TUNJZ2VEMGlNVEV3SWlCNVBTSTVNQ0lnWm1sc2JEMGlJMlEyWXpOaVpTSWdMejQ4Y21WamRDQjNhV1IwYUQwaU16QWlJR2hsYVdkb2REMGlNVEFpSUhnOUlqRXlNQ0lnZVQwaU9UQWlJR1pwYkd3OUlpTmlNamsxT0dRaUlDOCtQSEpsWTNRZ2QybGtkR2c5SWpJd0lpQm9aV2xuYUhROUlqRXdJaUI0UFNJeE5UQWlJSGs5SWprd0lpQm1hV3hzUFNJalpEWmpNMkpsSWlBdlBqeHlaV04wSUhkcFpIUm9QU0l6TUNJZ2FHVnBaMmgwUFNJeE1DSWdlRDBpTVRjd0lpQjVQU0k1TUNJZ1ptbHNiRDBpSTJJeU9UVTRaQ0lnTHo0OGNtVmpkQ0IzYVdSMGFEMGlNVEFpSUdobGFXZG9kRDBpTVRBaUlIZzlJakl3TUNJZ2VUMGlPVEFpSUdacGJHdzlJaU5rTm1NelltVWlJQzgrUEhKbFkzUWdkMmxrZEdnOUlqTXdJaUJvWldsbmFIUTlJakV3SWlCNFBTSXlNVEFpSUhrOUlqa3dJaUJtYVd4c1BTSWpabVptTUdWbElpQXZQanh5WldOMElIZHBaSFJvUFNJek1DSWdhR1ZwWjJoMFBTSXhNQ0lnZUQwaU9EQWlJSGs5SWpFd01DSWdabWxzYkQwaUkyWm1aakJsWlNJZ0x6NDhjbVZqZENCM2FXUjBhRDBpTkRBaUlHaGxhV2RvZEQwaU1UQWlJSGc5SWpFeE1DSWdlVDBpTVRBd0lpQm1hV3hzUFNJalpEWmpNMkpsSWlBdlBqeHlaV04wSUhkcFpIUm9QU0l5TUNJZ2FHVnBaMmgwUFNJeE1DSWdlRDBpTVRVd0lpQjVQU0l4TURBaUlHWnBiR3c5SWlNd01EQXdNREFpSUM4K1BISmxZM1FnZDJsa2RHZzlJalF3SWlCb1pXbG5hSFE5SWpFd0lpQjRQU0l4TnpBaUlIazlJakV3TUNJZ1ptbHNiRDBpSTJRMll6TmlaU0lnTHo0OGNtVmpkQ0IzYVdSMGFEMGlNekFpSUdobGFXZG9kRDBpTVRBaUlIZzlJakl4TUNJZ2VUMGlNVEF3SWlCbWFXeHNQU0lqWm1abU1HVmxJaUF2UGp4eVpXTjBJSGRwWkhSb1BTSXpNQ0lnYUdWcFoyaDBQU0l4TUNJZ2VEMGlPREFpSUhrOUlqRXhNQ0lnWm1sc2JEMGlJMlptWmpCbFpTSWdMejQ4Y21WamRDQjNhV1IwYUQwaU5EQWlJR2hsYVdkb2REMGlNVEFpSUhnOUlqRXhNQ0lnZVQwaU1URXdJaUJtYVd4c1BTSWpaRFpqTTJKbElpQXZQanh5WldOMElIZHBaSFJvUFNJeU1DSWdhR1ZwWjJoMFBTSXhNQ0lnZUQwaU1UVXdJaUI1UFNJeE1UQWlJR1pwYkd3OUlpTXdNREF3TURBaUlDOCtQSEpsWTNRZ2QybGtkR2c5SWpRd0lpQm9aV2xuYUhROUlqRXdJaUI0UFNJeE56QWlJSGs5SWpFeE1DSWdabWxzYkQwaUkyUTJZek5pWlNJZ0x6NDhjbVZqZENCM2FXUjBhRDBpTXpBaUlHaGxhV2RvZEQwaU1UQWlJSGc5SWpJeE1DSWdlVDBpTVRFd0lpQm1hV3hzUFNJalptWm1NR1ZsSWlBdlBqeHlaV04wSUhkcFpIUm9QU0kwTUNJZ2FHVnBaMmgwUFNJeE1DSWdlRDBpT0RBaUlIazlJakV5TUNJZ1ptbHNiRDBpSTJabVpqQmxaU0lnTHo0OGNtVmpkQ0IzYVdSMGFEMGlPREFpSUdobGFXZG9kRDBpTVRBaUlIZzlJakV5TUNJZ2VUMGlNVEl3SWlCbWFXeHNQU0lqWkRaak0ySmxJaUF2UGp4eVpXTjBJSGRwWkhSb1BTSTBNQ0lnYUdWcFoyaDBQU0l4TUNJZ2VEMGlNakF3SWlCNVBTSXhNakFpSUdacGJHdzlJaU5tWm1Zd1pXVWlJQzgrUEhKbFkzUWdkMmxrZEdnOUlqRTJNQ0lnYUdWcFoyaDBQU0l4TUNJZ2VEMGlPREFpSUhrOUlqRXpNQ0lnWm1sc2JEMGlJMlptWmpCbFpTSWdMejQ4Y21WamRDQjNhV1IwYUQwaU5EQWlJR2hsYVdkb2REMGlNVEFpSUhnOUlqZ3dJaUI1UFNJeE5EQWlJR1pwYkd3OUlpTm1abVl3WldVaUlDOCtQSEpsWTNRZ2QybGtkR2c5SWpnd0lpQm9aV2xuYUhROUlqRXdJaUI0UFNJeE1qQWlJSGs5SWpFME1DSWdabWxzYkQwaUkyUTJZek5pWlNJZ0x6NDhjbVZqZENCM2FXUjBhRDBpTkRBaUlHaGxhV2RvZEQwaU1UQWlJSGc5SWpJd01DSWdlVDBpTVRRd0lpQm1hV3hzUFNJalptWm1NR1ZsSWlBdlBqeHlaV04wSUhkcFpIUm9QU0l6TUNJZ2FHVnBaMmgwUFNJeE1DSWdlRDBpT0RBaUlIazlJakUxTUNJZ1ptbHNiRDBpSTJabVpqQmxaU0lnTHo0OGNtVmpkQ0IzYVdSMGFEMGlNakFpSUdobGFXZG9kRDBpTVRBaUlIZzlJakV4TUNJZ2VUMGlNVFV3SWlCbWFXeHNQU0lqWkRaak0ySmxJaUF2UGp4eVpXTjBJSGRwWkhSb1BTSXhNQ0lnYUdWcFoyaDBQU0l4TUNJZ2VEMGlNVE13SWlCNVBTSXhOVEFpSUdacGJHdzlJaU13TURBd01EQWlJQzgrUEhKbFkzUWdkMmxrZEdnOUlqUXdJaUJvWldsbmFIUTlJakV3SWlCNFBTSXhOREFpSUhrOUlqRTFNQ0lnWm1sc2JEMGlJMlEyWXpOaVpTSWdMejQ4Y21WamRDQjNhV1IwYUQwaU1UQWlJR2hsYVdkb2REMGlNVEFpSUhnOUlqRTRNQ0lnZVQwaU1UVXdJaUJtYVd4c1BTSWpNREF3TURBd0lpQXZQanh5WldOMElIZHBaSFJvUFNJeU1DSWdhR1ZwWjJoMFBTSXhNQ0lnZUQwaU1Ua3dJaUI1UFNJeE5UQWlJR1pwYkd3OUlpTmtObU16WW1VaUlDOCtQSEpsWTNRZ2QybGtkR2c5SWpNd0lpQm9aV2xuYUhROUlqRXdJaUI0UFNJeU1UQWlJSGs5SWpFMU1DSWdabWxzYkQwaUkyWm1aakJsWlNJZ0x6NDhjbVZqZENCM2FXUjBhRDBpTXpBaUlHaGxhV2RvZEQwaU1UQWlJSGc5SWpnd0lpQjVQU0l4TmpBaUlHWnBiR3c5SWlObVptWXdaV1VpSUM4K1BISmxZM1FnZDJsa2RHZzlJakl3SWlCb1pXbG5hSFE5SWpFd0lpQjRQU0l4TVRBaUlIazlJakUyTUNJZ1ptbHNiRDBpSTJRMll6TmlaU0lnTHo0OGNtVmpkQ0IzYVdSMGFEMGlNVEFpSUdobGFXZG9kRDBpTVRBaUlIZzlJakV6TUNJZ2VUMGlNVFl3SWlCbWFXeHNQU0lqTURBd01EQXdJaUF2UGp4eVpXTjBJSGRwWkhSb1BTSTBNQ0lnYUdWcFoyaDBQU0l4TUNJZ2VEMGlNVFF3SWlCNVBTSXhOakFpSUdacGJHdzlJaU5rTm1NelltVWlJQzgrUEhKbFkzUWdkMmxrZEdnOUlqRXdJaUJvWldsbmFIUTlJakV3SWlCNFBTSXhPREFpSUhrOUlqRTJNQ0lnWm1sc2JEMGlJekF3TURBd01DSWdMejQ4Y21WamRDQjNhV1IwYUQwaU1qQWlJR2hsYVdkb2REMGlNVEFpSUhnOUlqRTVNQ0lnZVQwaU1UWXdJaUJtYVd4c1BTSWpaRFpqTTJKbElpQXZQanh5WldOMElIZHBaSFJvUFNJek1DSWdhR1ZwWjJoMFBTSXhNQ0lnZUQwaU1qRXdJaUI1UFNJeE5qQWlJR1pwYkd3OUlpTm1abVl3WldVaUlDOCtQSEpsWTNRZ2QybGtkR2c5SWpNd0lpQm9aV2xuYUhROUlqRXdJaUI0UFNJNE1DSWdlVDBpTVRjd0lpQm1hV3hzUFNJalptWm1NR1ZsSWlBdlBqeHlaV04wSUhkcFpIUm9QU0l4TUNJZ2FHVnBaMmgwUFNJeE1DSWdlRDBpTVRFd0lpQjVQU0l4TnpBaUlHWnBiR3c5SWlOa05tTXpZbVVpSUM4K1BISmxZM1FnZDJsa2RHZzlJak13SWlCb1pXbG5hSFE5SWpFd0lpQjRQU0l4TWpBaUlIazlJakUzTUNJZ1ptbHNiRDBpSTJJeU9UVTRaQ0lnTHo0OGNtVmpkQ0IzYVdSMGFEMGlNakFpSUdobGFXZG9kRDBpTVRBaUlIZzlJakUxTUNJZ2VUMGlNVGN3SWlCbWFXeHNQU0lqWkRaak0ySmxJaUF2UGp4eVpXTjBJSGRwWkhSb1BTSXpNQ0lnYUdWcFoyaDBQU0l4TUNJZ2VEMGlNVGN3SWlCNVBTSXhOekFpSUdacGJHdzlJaU5pTWprMU9HUWlJQzgrUEhKbFkzUWdkMmxrZEdnOUlqRXdJaUJvWldsbmFIUTlJakV3SWlCNFBTSXlNREFpSUhrOUlqRTNNQ0lnWm1sc2JEMGlJMlEyWXpOaVpTSWdMejQ4Y21WamRDQjNhV1IwYUQwaU16QWlJR2hsYVdkb2REMGlNVEFpSUhnOUlqSXhNQ0lnZVQwaU1UY3dJaUJtYVd4c1BTSWpabVptTUdWbElpQXZQanh5WldOMElIZHBaSFJvUFNJek1DSWdhR1ZwWjJoMFBTSXhNQ0lnZUQwaU9EQWlJSGs5SWpFNE1DSWdabWxzYkQwaUkyWm1aakJsWlNJZ0x6NDhjbVZqZENCM2FXUjBhRDBpTkRBaUlHaGxhV2RvZEQwaU1UQWlJSGc5SWpFeE1DSWdlVDBpTVRnd0lpQm1hV3hzUFNJalpEWmpNMkpsSWlBdlBqeHlaV04wSUhkcFpIUm9QU0l5TUNJZ2FHVnBaMmgwUFNJeE1DSWdlRDBpTVRVd0lpQjVQU0l4T0RBaUlHWnBiR3c5SWlNd01EQXdNREFpSUM4K1BISmxZM1FnZDJsa2RHZzlJalF3SWlCb1pXbG5hSFE5SWpFd0lpQjRQU0l4TnpBaUlIazlJakU0TUNJZ1ptbHNiRDBpSTJRMll6TmlaU0lnTHo0OGNtVmpkQ0IzYVdSMGFEMGlNekFpSUdobGFXZG9kRDBpTVRBaUlIZzlJakl4TUNJZ2VUMGlNVGd3SWlCbWFXeHNQU0lqWm1abU1HVmxJaUF2UGp4eVpXTjBJSGRwWkhSb1BTSXpNQ0lnYUdWcFoyaDBQU0l4TUNJZ2VEMGlPREFpSUhrOUlqRTVNQ0lnWm1sc2JEMGlJMlptWmpCbFpTSWdMejQ4Y21WamRDQjNhV1IwYUQwaU5EQWlJR2hsYVdkb2REMGlNVEFpSUhnOUlqRXhNQ0lnZVQwaU1Ua3dJaUJtYVd4c1BTSWpaRFpqTTJKbElpQXZQanh5WldOMElIZHBaSFJvUFNJeU1DSWdhR1ZwWjJoMFBTSXhNQ0lnZUQwaU1UVXdJaUI1UFNJeE9UQWlJR1pwYkd3OUlpTXdNREF3TURBaUlDOCtQSEpsWTNRZ2QybGtkR2c5SWpRd0lpQm9aV2xuYUhROUlqRXdJaUI0UFNJeE56QWlJSGs5SWpFNU1DSWdabWxzYkQwaUkyUTJZek5pWlNJZ0x6NDhjbVZqZENCM2FXUjBhRDBpTXpBaUlHaGxhV2RvZEQwaU1UQWlJSGc5SWpJeE1DSWdlVDBpTVRrd0lpQm1hV3hzUFNJalptWm1NR1ZsSWlBdlBqeHlaV04wSUhkcFpIUm9QU0kwTUNJZ2FHVnBaMmgwUFNJeE1DSWdlRDBpT0RBaUlIazlJakl3TUNJZ1ptbHNiRDBpSTJabVpqQmxaU0lnTHo0OGNtVmpkQ0IzYVdSMGFEMGlPREFpSUdobGFXZG9kRDBpTVRBaUlIZzlJakV5TUNJZ2VUMGlNakF3SWlCbWFXeHNQU0lqWkRaak0ySmxJaUF2UGp4eVpXTjBJSGRwWkhSb1BTSTBNQ0lnYUdWcFoyaDBQU0l4TUNJZ2VEMGlNakF3SWlCNVBTSXlNREFpSUdacGJHdzlJaU5tWm1Zd1pXVWlJQzgrUEhKbFkzUWdkMmxrZEdnOUlqRTJNQ0lnYUdWcFoyaDBQU0l4TUNJZ2VEMGlPREFpSUhrOUlqSXhNQ0lnWm1sc2JEMGlJMlptWmpCbFpTSWdMejQ4Y21WamRDQjNhV1IwYUQwaU1UWXdJaUJvWldsbmFIUTlJakV3SWlCNFBTSTRNQ0lnZVQwaU1qSXdJaUJtYVd4c1BTSWpabVptTUdWbElpQXZQanh5WldOMElIZHBaSFJvUFNJMk1DSWdhR1ZwWjJoMFBTSXhNQ0lnZUQwaU1UQXdJaUI1UFNJeE1UQWlJR1pwYkd3OUlpTXdNREF3TURBaUlDOCtQSEpsWTNRZ2QybGtkR2c5SWpZd0lpQm9aV2xuYUhROUlqRXdJaUI0UFNJeE56QWlJSGs5SWpFeE1DSWdabWxzYkQwaUl6QXdNREF3TUNJZ0x6NDhjbVZqZENCM2FXUjBhRDBpTVRBaUlHaGxhV2RvZEQwaU1UQWlJSGc5SWpFd01DSWdlVDBpTVRJd0lpQm1hV3hzUFNJak1EQXdNREF3SWlBdlBqeHlaV04wSUhkcFpIUm9QU0l5TUNJZ2FHVnBaMmgwUFNJeE1DSWdlRDBpTVRFd0lpQjVQU0l4TWpBaUlHWnBiR3c5SWlObVptWm1abVlpSUM4K1BISmxZM1FnZDJsa2RHZzlJak13SWlCb1pXbG5hSFE5SWpFd0lpQjRQU0l4TXpBaUlIazlJakV5TUNJZ1ptbHNiRDBpSXpBd01EQXdNQ0lnTHo0OGNtVmpkQ0IzYVdSMGFEMGlNVEFpSUdobGFXZG9kRDBpTVRBaUlIZzlJakUzTUNJZ2VUMGlNVEl3SWlCbWFXeHNQU0lqTURBd01EQXdJaUF2UGp4eVpXTjBJSGRwWkhSb1BTSXlNQ0lnYUdWcFoyaDBQU0l4TUNJZ2VEMGlNVGd3SWlCNVBTSXhNakFpSUdacGJHdzlJaU5tWm1abVptWWlJQzgrUEhKbFkzUWdkMmxrZEdnOUlqTXdJaUJvWldsbmFIUTlJakV3SWlCNFBTSXlNREFpSUhrOUlqRXlNQ0lnWm1sc2JEMGlJekF3TURBd01DSWdMejQ4Y21WamRDQjNhV1IwYUQwaU5EQWlJR2hsYVdkb2REMGlNVEFpSUhnOUlqY3dJaUI1UFNJeE16QWlJR1pwYkd3OUlpTXdNREF3TURBaUlDOCtQSEpsWTNRZ2QybGtkR2c5SWpJd0lpQm9aV2xuYUhROUlqRXdJaUI0UFNJeE1UQWlJSGs5SWpFek1DSWdabWxzYkQwaUkyWm1abVptWmlJZ0x6NDhjbVZqZENCM2FXUjBhRDBpTlRBaUlHaGxhV2RvZEQwaU1UQWlJSGc5SWpFek1DSWdlVDBpTVRNd0lpQm1hV3hzUFNJak1EQXdNREF3SWlBdlBqeHlaV04wSUhkcFpIUm9QU0l5TUNJZ2FHVnBaMmgwUFNJeE1DSWdlRDBpTVRnd0lpQjVQU0l4TXpBaUlHWnBiR3c5SWlObVptWm1abVlpSUM4K1BISmxZM1FnZDJsa2RHZzlJak13SWlCb1pXbG5hSFE5SWpFd0lpQjRQU0l5TURBaUlIazlJakV6TUNJZ1ptbHNiRDBpSXpBd01EQXdNQ0lnTHo0OGNtVmpkQ0IzYVdSMGFEMGlNVEFpSUdobGFXZG9kRDBpTVRBaUlIZzlJamN3SWlCNVBTSXhOREFpSUdacGJHdzlJaU13TURBd01EQWlJQzgrUEhKbFkzUWdkMmxrZEdnOUlqRXdJaUJvWldsbmFIUTlJakV3SWlCNFBTSXhNREFpSUhrOUlqRTBNQ0lnWm1sc2JEMGlJekF3TURBd01DSWdMejQ4Y21WamRDQjNhV1IwYUQwaU1qQWlJR2hsYVdkb2REMGlNVEFpSUhnOUlqRXhNQ0lnZVQwaU1UUXdJaUJtYVd4c1BTSWpabVptWm1abUlpQXZQanh5WldOMElIZHBaSFJvUFNJek1DSWdhR1ZwWjJoMFBTSXhNQ0lnZUQwaU1UTXdJaUI1UFNJeE5EQWlJR1pwYkd3OUlpTXdNREF3TURBaUlDOCtQSEpsWTNRZ2QybGtkR2c5SWpFd0lpQm9aV2xuYUhROUlqRXdJaUI0UFNJeE56QWlJSGs5SWpFME1DSWdabWxzYkQwaUl6QXdNREF3TUNJZ0x6NDhjbVZqZENCM2FXUjBhRDBpTWpBaUlHaGxhV2RvZEQwaU1UQWlJSGc5SWpFNE1DSWdlVDBpTVRRd0lpQm1hV3hzUFNJalptWm1abVptSWlBdlBqeHlaV04wSUhkcFpIUm9QU0l6TUNJZ2FHVnBaMmgwUFNJeE1DSWdlRDBpTWpBd0lpQjVQU0l4TkRBaUlHWnBiR3c5SWlNd01EQXdNREFpSUM4K1BISmxZM1FnZDJsa2RHZzlJakV3SWlCb1pXbG5hSFE5SWpFd0lpQjRQU0kzTUNJZ2VUMGlNVFV3SWlCbWFXeHNQU0lqTURBd01EQXdJaUF2UGp4eVpXTjBJSGRwWkhSb1BTSXhNQ0lnYUdWcFoyaDBQU0l4TUNJZ2VEMGlNVEF3SWlCNVBTSXhOVEFpSUdacGJHdzlJaU13TURBd01EQWlJQzgrUEhKbFkzUWdkMmxrZEdnOUlqSXdJaUJvWldsbmFIUTlJakV3SWlCNFBTSXhNVEFpSUhrOUlqRTFNQ0lnWm1sc2JEMGlJMlptWm1abVppSWdMejQ4Y21WamRDQjNhV1IwYUQwaU16QWlJR2hsYVdkb2REMGlNVEFpSUhnOUlqRXpNQ0lnZVQwaU1UVXdJaUJtYVd4c1BTSWpNREF3TURBd0lpQXZQanh5WldOMElIZHBaSFJvUFNJeE1DSWdhR1ZwWjJoMFBTSXhNQ0lnZUQwaU1UY3dJaUI1UFNJeE5UQWlJR1pwYkd3OUlpTXdNREF3TURBaUlDOCtQSEpsWTNRZ2QybGtkR2c5SWpJd0lpQm9aV2xuYUhROUlqRXdJaUI0UFNJeE9EQWlJSGs5SWpFMU1DSWdabWxzYkQwaUkyWm1abVptWmlJZ0x6NDhjbVZqZENCM2FXUjBhRDBpTXpBaUlHaGxhV2RvZEQwaU1UQWlJSGc5SWpJd01DSWdlVDBpTVRVd0lpQm1hV3hzUFNJak1EQXdNREF3SWlBdlBqeHlaV04wSUhkcFpIUm9QU0kyTUNJZ2FHVnBaMmgwUFNJeE1DSWdlRDBpTVRBd0lpQjVQU0l4TmpBaUlHWnBiR3c5SWlNd01EQXdNREFpSUM4K1BISmxZM1FnZDJsa2RHZzlJall3SWlCb1pXbG5hSFE5SWpFd0lpQjRQU0l4TnpBaUlIazlJakUyTUNJZ1ptbHNiRDBpSXpBd01EQXdNQ0lnTHo0OEwzTjJaejQ9In0='; + 'eyJuYW1lIjoiTW9jayBOYW1lIiwgImRlc2NyaXB0aW9uIjoibW9jayBkZXNjcmlwdGlvbiIsICJpbWFnZSI6ICJkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LFBITjJaeUIzYVdSMGFEMGlNekl3SWlCb1pXbG5hSFE5SWpNeU1DSWdkbWxsZDBKdmVEMGlNQ0F3SURNeU1DQXpNakFpSUhodGJHNXpQU0pvZEhSd09pOHZkM2QzTG5jekxtOXlaeTh5TURBd0wzTjJaeUlnYzJoaGNHVXRjbVZ1WkdWeWFXNW5QU0pqY21semNFVmtaMlZ6SWo0OGNtVmpkQ0IzYVdSMGFEMGlNVEF3SlNJZ2FHVnBaMmgwUFNJeE1EQWxJaUJtYVd4c1BTSWpaRFZrTjJVeElpQXZQanh5WldOMElIZHBaSFJvUFNJeE5EQWlJR2hsYVdkb2REMGlNVEFpSUhnOUlqa3dJaUI1UFNJeU1UQWlJR1pwYkd3OUlpTm1abVprWmpJaUlDOCtQQzl6ZG1jKyJ9'; export const MOCK_METADATA = { name: 'Mock Name',