From c8c91c1cdebb6246a0bc8a3d2e63bae410223955 Mon Sep 17 00:00:00 2001 From: Jordan Lawrence Date: Tue, 23 Apr 2024 16:29:55 +0200 Subject: [PATCH 01/31] fix(pte): show toolbar as active only if all blocks have tool active --- .../src/editor/PortableTextEditor.tsx | 3 +- .../editor/plugins/createWithEditableAPI.ts | 79 +++++++++++++++---- .../plugins/createWithPortableTextLists.ts | 8 +- .../createWithPortableTextMarkModel.ts | 29 ++++--- .../PortableText/toolbar/ActionMenu.tsx | 4 + .../form/inputs/PortableText/toolbar/hooks.ts | 6 +- 6 files changed, 95 insertions(+), 34 deletions(-) diff --git a/packages/@sanity/portable-text-editor/src/editor/PortableTextEditor.tsx b/packages/@sanity/portable-text-editor/src/editor/PortableTextEditor.tsx index ef83b7ff6ef..ba76c0bd167 100644 --- a/packages/@sanity/portable-text-editor/src/editor/PortableTextEditor.tsx +++ b/packages/@sanity/portable-text-editor/src/editor/PortableTextEditor.tsx @@ -178,7 +178,7 @@ export class PortableTextEditor extends Component { } // Static API methods - static activeAnnotations = (editor: PortableTextEditor): PortableTextObject[] => { + static activeAnnotations = (editor: PortableTextEditor): PortableTextObject['_type'][] => { return editor && editor.editable ? editor.editable.activeAnnotations() : [] } static addAnnotation = ( @@ -278,6 +278,7 @@ export class PortableTextEditor extends Component { } static toggleMark = (editor: PortableTextEditor, mark: string): void => { debug(`Host toggling mark`, mark) + console.log('here', mark) editor.editable?.toggleMark(mark) } static getFragment = (editor: PortableTextEditor): PortableTextBlock[] | undefined => { diff --git a/packages/@sanity/portable-text-editor/src/editor/plugins/createWithEditableAPI.ts b/packages/@sanity/portable-text-editor/src/editor/plugins/createWithEditableAPI.ts index a17b6542f40..a95f0051802 100644 --- a/packages/@sanity/portable-text-editor/src/editor/plugins/createWithEditableAPI.ts +++ b/packages/@sanity/portable-text-editor/src/editor/plugins/createWithEditableAPI.ts @@ -261,35 +261,80 @@ export function createWithEditableAPI( } return node }, - activeAnnotations: (): PortableTextObject[] => { + activeAnnotations: (): PortableTextObject['_type'][] => { if (!editor.selection || editor.selection.focus.path.length < 2) { return [] } try { - const activeAnnotations: PortableTextObject[] = [] + const activeAnnotations: PortableTextObject['_type'][] = [] const spans = Editor.nodes(editor, { at: editor.selection, - match: (node) => - Text.isText(node) && - node.marks !== undefined && - Array.isArray(node.marks) && - node.marks.length > 0, + // mode: 'lowest', + match: (node) => Text.isText(node), }) - for (const [span, path] of spans) { + // const allSpans = Editor.nodes(editor, { + // at: editor.selection, + // }) + // for (const [span, path] of allSpans) { + // console.log({span, path}) + // } + // && + // node.marks !== undefined && + // Array.isArray(node.marks) && + // node.marks.length > 0, + + const spansArr = [...spans] + + if (spansArr.some(([span]) => !span.marks?.length)) return activeAnnotations + + const t = spansArr.reduce((acc, [, path]) => { const [block] = Editor.node(editor, path, {depth: 1}) if (editor.isTextBlock(block)) { block.markDefs?.forEach((def) => { - if ( - Text.isText(span) && - span.marks && - Array.isArray(span.marks) && - span.marks.includes(def._key) - ) { - activeAnnotations.push(def) - } + acc[def._type] = (acc[def._type] || 0) + 1 || 1 }) } - } + return acc + }, {}) + + Object.entries(t).forEach((def) => { + const [mark, count] = def as [string, number] + + if (count >= spansArr.length) { + activeAnnotations.push(mark) + } + }) + + // for (const [span, path] of spans) { + // console.log({span, path}) + + // if (failFast) return [] + + // if (!span.marks?.length) { + // failFast = true + // } + + // const [block] = Editor.node(editor, path, {depth: 1}) + // if (editor.isTextBlock(block)) { + // trackingMarks.push(block.markDefs) + // // block.markDefs?.forEach((def) => trackingMarks.push(def._type)) + // } + // } + + // console.log(block.markDefs) + // block.markDefs?.forEach((def) => { + // if ( + // Text.isText(span) && + // span.marks && + // Array.isArray(span.marks) && + // span.marks.includes(def._key) + // ) { + // console.log(def._key, def._type) + // activeAnnotations.push(def) + // } + // }) + // } + // } return activeAnnotations } catch (err) { return [] diff --git a/packages/@sanity/portable-text-editor/src/editor/plugins/createWithPortableTextLists.ts b/packages/@sanity/portable-text-editor/src/editor/plugins/createWithPortableTextLists.ts index 08884655676..fb50630f294 100644 --- a/packages/@sanity/portable-text-editor/src/editor/plugins/createWithPortableTextLists.ts +++ b/packages/@sanity/portable-text-editor/src/editor/plugins/createWithPortableTextLists.ts @@ -140,14 +140,18 @@ export function createWithPortableTextLists(types: PortableTextMemberSchemaTypes if (!editor.selection) { return false } + const selectedBlocks = [ ...Editor.nodes(editor, { at: editor.selection, - match: (node) => editor.isListBlock(node) && node.listItem === listStyle, + match: (node) => node._type === 'block', }), ] + if (selectedBlocks.length > 0) { - return true + return selectedBlocks.every( + ([node]) => editor.isListBlock(node) && node.listItem === listStyle, + ) } return false } diff --git a/packages/@sanity/portable-text-editor/src/editor/plugins/createWithPortableTextMarkModel.ts b/packages/@sanity/portable-text-editor/src/editor/plugins/createWithPortableTextMarkModel.ts index 5cf62c5d8e1..3f48630b6e4 100644 --- a/packages/@sanity/portable-text-editor/src/editor/plugins/createWithPortableTextMarkModel.ts +++ b/packages/@sanity/portable-text-editor/src/editor/plugins/createWithPortableTextMarkModel.ts @@ -5,6 +5,7 @@ * */ +import {type PortableTextSpan} from '@sanity/types' import {flatten, isEqual, uniq} from 'lodash' import {type Subject} from 'rxjs' import { @@ -345,19 +346,27 @@ export function createWithPortableTextMarkModel( if (!editor.selection) { return false } - let existingMarks = + + const isNodeWithMark = (n: NodeEntry) => { + const [node] = n as NodeEntry + + return node.marks?.includes(mark) + } + const selectedNodes = Array.from( + Editor.nodes(editor, {match: Text.isText, at: editor.selection}), + ) + + // console.log({isExpanded: Range.isExpanded(editor.selection)}) + if (Range.isExpanded(editor.selection)) { + // console.log({selectedNodes}) + return selectedNodes.every(isNodeWithMark) + } + + return ( { ...(Editor.marks(editor) || {}), }.marks || [] - if (Range.isExpanded(editor.selection)) { - Array.from(Editor.nodes(editor, {match: Text.isText, at: editor.selection})).forEach( - (n) => { - const [node] = n as NodeEntry - existingMarks = uniq([...existingMarks, ...((node.marks as string[]) || [])]) - }, - ) - } - return existingMarks.includes(mark) + ).includes(mark) } // Custom editor function to toggle a mark diff --git a/packages/sanity/src/core/form/inputs/PortableText/toolbar/ActionMenu.tsx b/packages/sanity/src/core/form/inputs/PortableText/toolbar/ActionMenu.tsx index 54ec1e30b92..6ce95787142 100644 --- a/packages/sanity/src/core/form/inputs/PortableText/toolbar/ActionMenu.tsx +++ b/packages/sanity/src/core/form/inputs/PortableText/toolbar/ActionMenu.tsx @@ -87,6 +87,10 @@ export const ActionMenu = memo(function ActionMenu(props: ActionMenuProps) { }) const active = activeKeys.includes(action.key) + + // if (action.title === 'Bulleted list') { + // console.log({active, activeKeys, action: action.title}) + // } return ( { - const activeAnnotationKeys = PortableTextEditor.activeAnnotations(editor).map( - (a) => a._type, - ) + const activeAnnotationKeys = PortableTextEditor.activeAnnotations(editor) return actions .filter((a) => { From 038fabac6d64be790ca21b81e48ed0f9f83d03f5 Mon Sep 17 00:00:00 2001 From: Jordan Lawrence Date: Wed, 24 Apr 2024 13:06:11 +0200 Subject: [PATCH 02/31] fix(pte): show toolbar as active only if all blocks have tool active --- .../src/core/form/inputs/PortableText/toolbar/ActionMenu.tsx | 2 +- .../src/core/form/inputs/PortableText/toolbar/helpers.tsx | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/sanity/src/core/form/inputs/PortableText/toolbar/ActionMenu.tsx b/packages/sanity/src/core/form/inputs/PortableText/toolbar/ActionMenu.tsx index 6ce95787142..a807bfabb9b 100644 --- a/packages/sanity/src/core/form/inputs/PortableText/toolbar/ActionMenu.tsx +++ b/packages/sanity/src/core/form/inputs/PortableText/toolbar/ActionMenu.tsx @@ -88,7 +88,7 @@ export const ActionMenu = memo(function ActionMenu(props: ActionMenuProps) { const active = activeKeys.includes(action.key) - // if (action.title === 'Bulleted list') { + // if (action.title === 'Strong') { // console.log({active, activeKeys, action: action.title}) // } return ( diff --git a/packages/sanity/src/core/form/inputs/PortableText/toolbar/helpers.tsx b/packages/sanity/src/core/form/inputs/PortableText/toolbar/helpers.tsx index 7c126255192..93588565718 100644 --- a/packages/sanity/src/core/form/inputs/PortableText/toolbar/helpers.tsx +++ b/packages/sanity/src/core/form/inputs/PortableText/toolbar/helpers.tsx @@ -51,6 +51,7 @@ function getPTEFormatActions( icon: decorator?.icon, key: decorator.value, handle: (): void => { + console.log('toggleMark', decorator.value) PortableTextEditor.toggleMark(editor, decorator.value) PortableTextEditor.focus(editor) }, From ac6ed9c1892b028c92cb4517d99dc74a8f2c7cb0 Mon Sep 17 00:00:00 2001 From: Jordan Lawrence Date: Mon, 29 Apr 2024 13:37:22 +0100 Subject: [PATCH 03/31] fix(pte): correct toggling of marks when part mark is selected --- .../src/editor/plugins/createWithPortableTextMarkModel.ts | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/packages/@sanity/portable-text-editor/src/editor/plugins/createWithPortableTextMarkModel.ts b/packages/@sanity/portable-text-editor/src/editor/plugins/createWithPortableTextMarkModel.ts index 3f48630b6e4..298ead44bd3 100644 --- a/packages/@sanity/portable-text-editor/src/editor/plugins/createWithPortableTextMarkModel.ts +++ b/packages/@sanity/portable-text-editor/src/editor/plugins/createWithPortableTextMarkModel.ts @@ -6,7 +6,7 @@ */ import {type PortableTextSpan} from '@sanity/types' -import {flatten, isEqual, uniq} from 'lodash' +import {isEqual, uniq} from 'lodash' import {type Subject} from 'rxjs' import { type Descendant, @@ -251,9 +251,8 @@ export function createWithPortableTextMarkModel( const splitTextNodes = [ ...Editor.nodes(editor, {at: editor.selection, match: Text.isText}), ] - const shouldRemoveMark = flatten( - splitTextNodes.map((item) => item[0]).map((node) => node.marks), - ).includes(mark) + const shouldRemoveMark = splitTextNodes.every((node) => node[0].marks?.includes(mark)) + if (shouldRemoveMark) { editor.removeMark(mark) return editor From a44579f73adbc80317b873c18e0f8e531a67c1a7 Mon Sep 17 00:00:00 2001 From: Nina Andal Aarvik Date: Mon, 29 Apr 2024 12:24:55 +0200 Subject: [PATCH 04/31] fix(core): change scrollintoview block to be nearest (#6328) --- .../core/form/inputs/PortableText/hooks/useTrackFocusPath.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/sanity/src/core/form/inputs/PortableText/hooks/useTrackFocusPath.tsx b/packages/sanity/src/core/form/inputs/PortableText/hooks/useTrackFocusPath.tsx index fa309877026..9bda42f6245 100644 --- a/packages/sanity/src/core/form/inputs/PortableText/hooks/useTrackFocusPath.tsx +++ b/packages/sanity/src/core/form/inputs/PortableText/hooks/useTrackFocusPath.tsx @@ -59,7 +59,7 @@ export function useTrackFocusPath(props: Props): void { scrollIntoView(relatedEditorItem.elementRef.current, { scrollMode: 'if-needed', boundary: boundaryElement, - block: 'start', + block: 'nearest', inline: 'start', }) } From 2dac1306a95defee8e243858fee7862d066238c9 Mon Sep 17 00:00:00 2001 From: Nina Andal Aarvik Date: Mon, 29 Apr 2024 12:41:11 +0200 Subject: [PATCH 05/31] fix(core): set scroll boundary to nearest (#6310) * fix(core): set scroll boundary to nearest * fix(core): add smooth scroll behavior * fix(sanity): remove smooth behavior --------- Co-authored-by: RitaDias --- .../inputs/PortableText/hooks/useScrollSelectionIntoView.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/sanity/src/core/form/inputs/PortableText/hooks/useScrollSelectionIntoView.tsx b/packages/sanity/src/core/form/inputs/PortableText/hooks/useScrollSelectionIntoView.tsx index b45601a04d0..bbf797ada23 100644 --- a/packages/sanity/src/core/form/inputs/PortableText/hooks/useScrollSelectionIntoView.tsx +++ b/packages/sanity/src/core/form/inputs/PortableText/hooks/useScrollSelectionIntoView.tsx @@ -16,7 +16,7 @@ export function useScrollSelectionIntoView(scrollElement: HTMLElement | null) { scrollIntoView(leafEl, { scrollMode: 'if-needed', boundary: scrollElement, - block: 'start', + block: 'nearest', inline: 'nearest', }) } From f76741b97766697cabcd248fe8f897162d3120f7 Mon Sep 17 00:00:00 2001 From: RitaDias Date: Mon, 29 Apr 2024 12:52:42 +0200 Subject: [PATCH 06/31] fix(@sanity): issue where hidden unicode characters were bloating document in PTE (#6440) * fix(portable-text-editor): issue shown in tests re stega. use duplicate code * test(playwright-ct): add test * chore(sanity): remove prettier linting * test(sanity): fix missing snapshot * test(sanity): update test after realising the test would pass always if comparing object number * chore: test unicode removal * chore: test unicode removal * chore(@sanity): remove old solution * fix(@sanity/block-tools): unicode issue. remove vercel/stega and move to block-tools * test(@sanity/block-tools): for unicode * fix(@sanity/block-tools): utf8 characters weren't beign filtered. using the vercel/stega * chore: update lock file * (chore): update pnpm lock --- packages/@sanity/block-tools/package.json | 1 + .../src/HtmlDeserializer/helpers.ts | 29 +- .../stegaUnicodeCleaner/index.ts | 12 + .../stegaUnicodeCleaner/input.html | 1 + .../stegaUnicodeCleaner/output.json | 29 ++ packages/@sanity/block-tools/tsdoc.json | 33 ++ .../PortableText/copyPaste/CopyPaste.spec.tsx | 35 +- .../inputs/PortableText/copyPaste/input.ts | 34 ++ pnpm-lock.yaml | 363 +++++++++--------- 9 files changed, 353 insertions(+), 184 deletions(-) create mode 100644 packages/@sanity/block-tools/test/tests/HtmlDeserializer/stegaUnicodeCleaner/index.ts create mode 100644 packages/@sanity/block-tools/test/tests/HtmlDeserializer/stegaUnicodeCleaner/input.html create mode 100644 packages/@sanity/block-tools/test/tests/HtmlDeserializer/stegaUnicodeCleaner/output.json create mode 100644 packages/@sanity/block-tools/tsdoc.json diff --git a/packages/@sanity/block-tools/package.json b/packages/@sanity/block-tools/package.json index fa3f8839a34..c42e0b1309f 100644 --- a/packages/@sanity/block-tools/package.json +++ b/packages/@sanity/block-tools/package.json @@ -60,6 +60,7 @@ "@types/jsdom": "^20.0.0", "@types/lodash": "^4.14.149", "@types/react": "^18.3.1", + "@vercel/stega": "0.1.0", "jsdom": "^23.0.1" }, "publishConfig": { diff --git a/packages/@sanity/block-tools/src/HtmlDeserializer/helpers.ts b/packages/@sanity/block-tools/src/HtmlDeserializer/helpers.ts index b026156c033..0b12660d13b 100644 --- a/packages/@sanity/block-tools/src/HtmlDeserializer/helpers.ts +++ b/packages/@sanity/block-tools/src/HtmlDeserializer/helpers.ts @@ -3,6 +3,7 @@ import { isPortableTextTextBlock, type PortableTextTextBlock, } from '@sanity/types' +import {vercelStegaSplit} from '@vercel/stega' import {isEqual} from 'lodash' import {DEFAULT_BLOCK} from '../constants' @@ -61,9 +62,10 @@ export function preprocess( parseHtml: HtmlParser, options: HtmlPreprocessorOptions, ): Document { - const doc = parseHtml(normalizeHtmlBeforePreprocess(html)) + const cleanHTML = cleanStegaUnicode(html) + const doc = parseHtml(normalizeHtmlBeforePreprocess(cleanHTML)) preprocessors.forEach((processor) => { - processor(html, doc, options) + processor(cleanHTML, doc, options) }) return doc } @@ -338,6 +340,29 @@ export function removeAllWhitespace(rootNode: Node) { nodesToRemove.forEach((node) => node.parentElement?.removeChild(node)) } +/** + * This is a duplicate code from `@sanity/client/stega` + * Unfortunately, as it stands, the e2e process is pulling in the node version of `@sanity/client` and so we don't have access to the utility as it stands + * @todo remove once this utility is available in `@vercel/stega` + * + * Can take a `result` JSON from a `const {result} = client.fetch(query, params, {filterResponse: false})` + * and remove all stega-encoded data from it. + * @alpha + * @hidden + */ +export function cleanStegaUnicode(result: string): string { + try { + return JSON.parse( + JSON.stringify(result, (key, value) => { + if (typeof value !== 'string') return value + return vercelStegaSplit(value).cleaned + }), + ) + } catch { + return result + } +} + function isWhitespaceBlock(elm: HTMLElement): boolean { return ['p', 'br'].includes(tagName(elm) || '') && !elm.textContent?.trim() } diff --git a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/stegaUnicodeCleaner/index.ts b/packages/@sanity/block-tools/test/tests/HtmlDeserializer/stegaUnicodeCleaner/index.ts new file mode 100644 index 00000000000..71cd6c8b5f2 --- /dev/null +++ b/packages/@sanity/block-tools/test/tests/HtmlDeserializer/stegaUnicodeCleaner/index.ts @@ -0,0 +1,12 @@ +import defaultSchema from '../../../fixtures/defaultSchema' +import {type BlockTestFn} from '../types' + +const blockContentType = defaultSchema + .get('blogPost') + .fields.find((field: any) => field.name === 'body').type + +const testFn: BlockTestFn = (html, blockTools, commonOptions) => { + return blockTools.htmlToBlocks(html, blockContentType, commonOptions) +} + +export default testFn diff --git a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/stegaUnicodeCleaner/input.html b/packages/@sanity/block-tools/test/tests/HtmlDeserializer/stegaUnicodeCleaner/input.html new file mode 100644 index 00000000000..42ef9a7477e --- /dev/null +++ b/packages/@sanity/block-tools/test/tests/HtmlDeserializer/stegaUnicodeCleaner/input.html @@ -0,0 +1 @@ +This is a test of the Sanity Portable Text renderer. We will use a variety of content to test its capabilities. Here are some unicode characters: β˜ΊοΈπŸ‘πŸ½πŸŒπŸŒžπŸŒšπŸŒπŸŒ›πŸŒœπŸŒ™πŸ’«β­οΈπŸŒŸβœ¨βš‘οΈβ˜„οΈπŸ’₯πŸ”₯πŸŒͺπŸŒˆβ˜€οΈπŸŒ€β›…οΈπŸŒ₯β˜οΈπŸŒ¦πŸŒ§β›ˆπŸŒ©πŸŒ¨β„οΈβ˜ƒοΈβ›„οΈπŸŒ¬πŸ’¨πŸ’§πŸ’¦β˜”οΈβ˜‚οΈπŸŒŠπŸŒ«. Now let's try some markdown formatting: β€‹β€‹β€‹β€‹β€Œο»Ώβ€ο»Ώβ€‹β€β€‹β€β€Œβ€ο»Ώο»Ώβ€Œο»Ώβ€‹β€β€Œβ€β€β€Œβ€Œβ€β€Œο»Ώβ€Œβ€β€β€Œβ€Œβ€ο»Ώβ€β€‹β€β€‹β€β€‹ο»Ώβ€β€β€‹β€β€‹β€β€Œο»Ώβ€‹ο»Ώβ€Œβ€β€‹β€Œβ€Œβ€ο»Ώβ€β€Œβ€β€β€Œβ€Œο»Ώβ€Œβ€‹β€Œο»Ώβ€β€Œβ€‹β€ο»Ώβ€β€Œβ€β€β€Œβ€Œβ€ο»Ώο»Ώβ€‹β€β€‹β€β€‹β€ο»Ώβ€‹β€‹β€β€‹β€β€Œβ€β€β€‹β€Œο»Ώβ€‹β€β€Œβ€β€Œβ€Œβ€Œβ€β€Œβ€β€‹β€β€‹β€β€‹ο»Ώβ€β€β€‹β€β€‹β€β€‹β€ο»Ώο»Ώβ€Œο»Ώβ€‹β€‹β€Œο»Ώβ€‹β€β€Œβ€β€Œβ€Œβ€Œο»Ώβ€‹ο»Ώβ€Œβ€β€Œβ€Œβ€Œβ€ο»Ώβ€β€Œο»Ώβ€Œβ€‹β€Œβ€β€‹β€Œβ€Œο»Ώβ€Œβ€‹β€Œβ€β€β€Œβ€Œβ€ο»Ώο»Ώβ€Œβ€ο»Ώβ€β€‹β€ο»Ώο»Ώβ€Œβ€β€β€Œβ€Œβ€ο»Ώβ€β€Œο»Ώβ€Œβ€‹β€Œβ€β€Œβ€Œβ€Œβ€ο»Ώβ€β€Œο»Ώβ€Œβ€‹β€‹β€ο»Ώο»Ώβ€Œβ€β€Œβ€Œβ€Œβ€β€Œβ€‹β€Œβ€β€β€Œβ€Œο»Ώβ€Œβ€‹β€‹β€ο»Ώο»Ώβ€Œβ€ο»Ώβ€Œβ€Œβ€ο»Ώο»Ώβ€Œβ€β€Œβ€‹β€Œβ€β€Œβ€Œβ€‹ο»Ώο»Ώβ€Œβ€Œο»Ώβ€‹β€‹β€Œο»Ώβ€‹β€β€Œβ€β€Œβ€Œβ€Œο»Ώβ€‹ο»Ώβ€Œβ€β€Œβ€Œβ€Œβ€ο»Ώβ€β€Œο»Ώβ€Œβ€‹β€Œβ€β€‹β€Œβ€Œο»Ώβ€Œβ€‹β€Œβ€β€β€Œβ€Œβ€ο»Ώο»Ώβ€Œβ€ο»Ώβ€β€‹ο»Ώβ€ο»Ώβ€Œβ€β€β€Œβ€Œβ€β€Œβ€‹β€‹ο»Ώο»Ώβ€Œβ€‹ο»Ώβ€Œο»Ώβ€‹ο»Ώβ€‹β€Œβ€‹ο»Ώβ€Œβ€β€Œβ€β€Œβ€Œβ€‹ο»Ώβ€‹β€β€Œβ€β€‹ο»Ώβ€‹ο»Ώβ€β€‹β€Œβ€β€‹β€Œβ€‹β€ο»Ώβ€Œβ€Œβ€β€‹β€Œβ€‹ο»Ώβ€‹β€Œβ€‹ο»Ώβ€Œβ€β€‹ο»Ώβ€β€‹β€‹β€ο»Ώβ€Œβ€‹ο»Ώβ€Œβ€‹β€‹ο»Ώβ€β€‹β€‹ο»Ώβ€Œβ€Œβ€‹ο»Ώβ€‹β€β€‹β€ο»Ώβ€Œβ€‹ο»Ώβ€β€‹β€‹ο»Ώβ€Œο»Ώβ€Œβ€β€Œβ€Œβ€‹ο»Ώβ€‹β€β€‹β€ο»Ώβ€Œβ€‹ο»Ώβ€‹β€‹β€Œβ€β€‹ο»Ώβ€‹ο»Ώβ€‹β€β€Œβ€β€‹β€β€‹ο»Ώβ€Œβ€‹β€Œβ€β€Œβ€‹β€‹ο»Ώβ€Œβ€‹β€‹ο»Ώβ€‹β€β€Œβ€β€‹ο»Ώβ€‹ο»Ώβ€β€Œβ€‹ο»Ώβ€Œβ€‹β€Œβ€β€‹β€β€‹ο»Ώβ€ο»Ώβ€Œο»Ώβ€Œβ€‹β€Œο»Ώβ€β€Œβ€Œο»Ώβ€‹β€‹β€Œβ€β€Œβ€Œβ€‹ο»Ώο»Ώβ€Œβ€Œο»Ώβ€‹ο»Ώβ€Œβ€β€β€Œβ€Œβ€ο»Ώβ€Œβ€Œο»Ώβ€‹β€‹β€Œβ€ο»Ώβ€‹β€Œβ€β€Œβ€Œβ€Œβ€‹β€‹β€β€Œβ€ο»Ώβ€‹β€Œβ€ο»Ώο»Ώβ€Œβ€β€‹ο»Ώβ€Œβ€β€ο»Ώβ€‹ο»Ώβ€ο»Ώβ€Œο»Ώβ€‹β€‹β€Œβ€β€‹β€Œβ€Œο»Ώβ€Œβ€‹β€Œβ€β€β€‹β€‹ο»Ώο»Ώβ€Œβ€Œβ€β€‹β€β€Œβ€ο»Ώο»Ώβ€Œβ€β€Œβ€‹β€Œο»Ώβ€β€Œβ€‹β€β€Œβ€Œβ€‹ο»Ώβ€Œβ€Œβ€Œβ€‹β€‹β€β€Œβ€Œο»Ώο»Ώβ€Œβ€β€ο»Ώβ€Œβ€β€Œβ€Œβ€Œο»Ώβ€β€Œβ€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹ο»Ώβ€Œβ€‹β€Œβ€‹β€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹ο»Ώβ€Œβ€‹β€Œβ€‹β€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹β€β€‹ο»Ώβ€‹β€β€‹ο»Ώβ€‹β€Œβ€‹ο»Ώβ€Œβ€β€‹ο»Ώβ€‹β€Œβ€Œβ€β€Œβ€Œβ€‹ο»Ώβ€‹β€Œβ€‹ο»Ώβ€β€Œβ€Œβ€β€‹ο»Ώβ€Œβ€β€Œβ€Œβ€‹ο»Ώβ€‹β€Œβ€Œβ€β€‹ο»Ώβ€‹ο»Ώβ€Œβ€β€Œβ€β€‹β€β€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹β€β€‹ο»Ώβ€‹β€β€‹β€β€Œβ€Œβ€‹ο»Ώβ€Œβ€Œβ€Œβ€‹β€Œβ€‹β€‹β€ο»Ώβ€β€Œβ€β€‹ο»Ώβ€Œβ€β€β€‹β€Œβ€β€β€Œβ€Œβ€ο»Ώβ€‹β€Œβ€β€Œβ€‹β€Œο»Ώβ€‹β€β€Œβ€β€Œβ€Œβ€Œβ€ο»Ώβ€β€‹β€β€Œβ€Œβ€‹ο»Ώβ€Œβ€Œβ€Œβ€‹β€‹β€β€Œβ€Œο»Ώο»Ώβ€Œβ€β€ο»Ώβ€Œβ€β€Œβ€Œβ€Œο»Ώβ€β€Œβ€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹ο»Ώβ€Œβ€‹β€Œβ€‹β€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹ο»Ώβ€Œβ€‹β€Œβ€‹β€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹β€β€‹ο»Ώβ€‹β€β€‹ο»Ώβ€β€Œβ€‹ο»Ώβ€β€Œβ€‹ο»Ώβ€Œβ€‹β€Œβ€β€Œβ€β€‹ο»Ώβ€Œβ€‹β€Œβ€β€Œβ€Œβ€‹ο»Ώβ€‹β€β€‹ο»Ώβ€‹β€‹β€Œβ€β€Œβ€Œβ€‹ο»Ώβ€Œβ€‹β€‹ο»Ώβ€‹β€‹β€‹ο»Ώβ€‹β€Œβ€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹β€β€‹ο»Ώβ€‹β€β€‹β€β€Œβ€Œβ€‹ο»Ώβ€Œβ€Œβ€Œβ€‹β€Œβ€‹β€‹β€ο»Ώβ€β€Œο»Ώβ€Œβ€‹β€Œβ€β€Œβ€Œβ€Œο»Ώβ€β€‹β€Œο»Ώβ€Œβ€‹β€‹ο»Ώο»Ώο»Ώβ€Œβ€β€‹β€β€Œβ€β€‹β€Œβ€Œο»Ώβ€‹ο»Ώβ€Œβ€β€Œβ€Œβ€Œβ€Œβ€Œβ€Œβ€Œο»Ώβ€‹β€β€Œβ€ο»Ώβ€‹β€‹ο»Ώο»Ώβ€Œβ€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹β€β€Œβ€‹β€Œβ€β€Œο»Ώβ€‹β€‹β€Œο»Ώβ€‹β€β€Œβ€β€Œβ€Œβ€Œο»Ώβ€‹ο»Ώβ€Œβ€β€Œβ€Œβ€Œβ€ο»Ώβ€β€Œο»Ώβ€Œβ€‹β€Œβ€β€‹β€Œβ€Œο»Ώβ€Œβ€‹β€Œβ€β€β€Œβ€Œβ€ο»Ώο»Ώβ€Œβ€ο»Ώβ€β€‹β€β€Œβ€β€Œβ€β€β€Œβ€Œβ€β€Œβ€‹β€‹ο»Ώο»Ώβ€Œβ€‹ο»Ώβ€Œο»Ώβ€‹ο»Ώβ€‹β€Œβ€‹ο»Ώβ€Œβ€β€Œβ€β€Œβ€Œβ€‹ο»Ώβ€‹β€β€Œβ€β€‹ο»Ώβ€‹ο»Ώβ€β€‹β€Œβ€β€‹β€Œβ€‹β€ο»Ώβ€Œβ€Œβ€β€‹β€Œβ€‹ο»Ώβ€‹β€Œβ€‹ο»Ώβ€Œβ€β€‹ο»Ώβ€β€‹β€‹β€ο»Ώβ€Œβ€‹ο»Ώβ€Œβ€‹β€‹ο»Ώβ€β€‹β€‹ο»Ώβ€Œβ€Œβ€‹ο»Ώβ€‹β€β€‹β€ο»Ώβ€Œβ€‹ο»Ώβ€β€‹β€‹ο»Ώβ€Œο»Ώβ€Œβ€β€Œβ€Œβ€‹ο»Ώβ€‹β€β€‹β€ο»Ώβ€Œβ€‹ο»Ώβ€‹β€‹β€Œβ€β€‹ο»Ώβ€‹ο»Ώβ€‹β€β€Œβ€β€‹β€β€‹ο»Ώβ€Œβ€‹β€Œβ€β€Œβ€‹β€‹ο»Ώβ€Œβ€‹β€‹ο»Ώβ€‹β€β€Œβ€β€‹ο»Ώβ€‹ο»Ώβ€β€Œβ€‹ο»Ώβ€Œβ€‹β€Œβ€β€‹β€β€‹β€β€Œβ€β€Œο»Ώβ€Œβ€‹β€Œο»Ώβ€β€Œβ€Œο»Ώβ€‹β€‹β€Œβ€β€Œβ€Œβ€‹ο»Ώο»Ώβ€Œβ€Œο»Ώβ€‹ο»Ώβ€Œβ€β€β€Œβ€Œβ€ο»Ώβ€Œβ€Œο»Ώβ€‹β€‹β€Œβ€ο»Ώβ€‹β€Œβ€β€Œβ€Œβ€Œβ€‹β€‹β€β€Œβ€ο»Ώβ€‹β€Œβ€ο»Ώο»Ώβ€Œβ€β€‹ο»Ώβ€Œβ€β€ο»Ώβ€‹β€β€Œβ€β€Œο»Ώβ€‹β€‹β€Œβ€β€‹β€Œβ€Œο»Ώβ€Œβ€‹β€Œβ€β€β€‹β€‹ο»Ώο»Ώβ€Œβ€Œβ€β€‹β€β€Œβ€ο»Ώο»Ώβ€Œβ€β€Œβ€‹β€Œο»Ώβ€β€Œβ€‹β€β€Œβ€Œβ€‹ο»Ώβ€Œβ€Œβ€Œβ€‹β€‹β€β€Œβ€Œο»Ώο»Ώβ€Œβ€β€ο»Ώβ€Œβ€β€Œβ€Œβ€Œο»Ώβ€β€Œβ€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹ο»Ώβ€Œβ€‹β€Œβ€‹β€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹ο»Ώβ€Œβ€‹β€Œβ€‹β€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹β€β€‹ο»Ώβ€‹β€β€‹ο»Ώβ€‹β€Œβ€‹ο»Ώβ€Œβ€β€‹ο»Ώβ€‹β€Œβ€Œβ€β€Œβ€Œβ€‹ο»Ώβ€‹β€Œβ€‹ο»Ώβ€β€Œβ€Œβ€β€‹ο»Ώβ€Œβ€β€Œβ€Œβ€‹ο»Ώβ€‹β€Œβ€Œβ€β€‹ο»Ώβ€‹ο»Ώβ€Œβ€β€Œβ€β€‹β€β€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹β€β€‹ο»Ώβ€‹β€β€‹β€β€Œβ€Œβ€‹ο»Ώβ€Œβ€Œβ€Œβ€‹β€Œβ€‹β€‹β€ο»Ώβ€β€Œβ€β€‹ο»Ώβ€Œβ€β€β€‹β€Œβ€β€β€Œβ€Œβ€ο»Ώβ€‹β€Œβ€β€Œβ€‹β€Œο»Ώβ€‹β€β€Œβ€β€Œβ€Œβ€Œβ€ο»Ώβ€β€‹β€β€Œβ€Œβ€‹ο»Ώβ€Œβ€Œβ€Œβ€‹β€‹β€β€Œβ€Œο»Ώο»Ώβ€Œβ€β€ο»Ώβ€Œβ€β€Œβ€Œβ€Œο»Ώβ€β€Œβ€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹ο»Ώβ€Œβ€‹β€Œβ€‹β€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹ο»Ώβ€Œβ€‹β€Œβ€‹β€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹β€β€‹ο»Ώβ€‹β€β€‹ο»Ώβ€β€Œβ€‹ο»Ώβ€β€Œβ€‹ο»Ώβ€Œβ€‹β€Œβ€β€Œβ€β€‹ο»Ώβ€Œβ€‹β€Œβ€β€Œβ€Œβ€‹ο»Ώβ€‹β€β€‹ο»Ώβ€‹β€‹β€Œβ€β€Œβ€Œβ€‹ο»Ώβ€Œβ€‹β€‹ο»Ώβ€‹β€‹β€‹ο»Ώβ€‹β€Œβ€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹β€β€‹ο»Ώβ€‹β€β€‹β€β€Œβ€Œβ€‹ο»Ώβ€Œβ€Œβ€Œβ€‹β€Œβ€‹β€‹β€ο»Ώβ€β€Œο»Ώβ€Œβ€‹β€Œβ€β€Œβ€Œβ€Œο»Ώβ€β€‹β€Œο»Ώβ€Œβ€‹β€‹β€β€Œβ€β€Œβ€β€β€Œβ€Œο»Ώβ€‹ο»Ώβ€Œβ€‹β€Œβ€‹β€Œο»Ώβ€‹β€β€Œβ€β€‹β€Œβ€Œβ€β€Œβ€β€Œο»Ώβ€Œβ€‹β€‹ο»Ώο»Ώβ€Œβ€‹β€β€‹β€β€Œο»Ώο»Ώβ€Œbold textβ€‹β€‹β€‹β€‹β€Œο»Ώβ€ο»Ώβ€‹β€β€‹β€β€Œβ€ο»Ώο»Ώβ€Œο»Ώβ€‹β€β€Œβ€β€β€Œβ€Œβ€β€Œο»Ώβ€Œβ€β€β€Œβ€Œβ€ο»Ώβ€β€‹β€β€‹β€β€‹ο»Ώβ€β€β€‹β€β€‹β€β€Œο»Ώβ€‹ο»Ώβ€Œβ€β€‹β€Œβ€Œβ€ο»Ώβ€β€Œβ€β€β€Œβ€Œο»Ώβ€Œβ€‹β€Œο»Ώβ€β€Œβ€‹β€ο»Ώβ€β€Œβ€β€β€Œβ€Œβ€ο»Ώο»Ώβ€‹β€β€‹β€β€‹β€ο»Ώβ€‹β€‹β€β€‹β€β€Œβ€β€β€‹β€Œο»Ώβ€‹β€β€Œβ€β€Œβ€Œβ€Œβ€β€Œβ€β€‹β€β€‹β€β€‹ο»Ώβ€β€β€‹β€β€‹β€β€‹β€ο»Ώο»Ώβ€Œο»Ώβ€‹β€‹β€Œο»Ώβ€‹β€β€Œβ€β€Œβ€Œβ€Œο»Ώβ€‹ο»Ώβ€Œβ€β€Œβ€Œβ€Œβ€ο»Ώβ€β€Œο»Ώβ€Œβ€‹β€Œβ€β€‹β€Œβ€Œο»Ώβ€Œβ€‹β€Œβ€β€β€Œβ€Œβ€ο»Ώο»Ώβ€Œβ€ο»Ώβ€β€‹β€ο»Ώο»Ώβ€Œβ€β€β€Œβ€Œβ€ο»Ώβ€β€Œο»Ώβ€Œβ€‹β€Œβ€β€Œβ€Œβ€Œβ€ο»Ώβ€β€Œο»Ώβ€Œβ€‹β€‹β€ο»Ώο»Ώβ€Œβ€β€Œβ€Œβ€Œβ€β€Œβ€‹β€Œβ€β€β€Œβ€Œο»Ώβ€Œβ€‹β€‹β€ο»Ώο»Ώβ€Œβ€ο»Ώβ€Œβ€Œβ€ο»Ώο»Ώβ€Œβ€β€Œβ€‹β€Œβ€β€Œβ€Œβ€‹ο»Ώο»Ώβ€Œβ€Œο»Ώβ€‹β€‹β€Œο»Ώβ€‹β€β€Œβ€β€Œβ€Œβ€Œο»Ώβ€‹ο»Ώβ€Œβ€β€Œβ€Œβ€Œβ€ο»Ώβ€β€Œο»Ώβ€Œβ€‹β€Œβ€β€‹β€Œβ€Œο»Ώβ€Œβ€‹β€Œβ€β€β€Œβ€Œβ€ο»Ώο»Ώβ€Œβ€ο»Ώβ€β€‹ο»Ώβ€ο»Ώβ€Œβ€β€β€Œβ€Œβ€β€Œβ€‹β€‹ο»Ώο»Ώβ€Œβ€‹ο»Ώβ€Œο»Ώβ€‹ο»Ώβ€‹β€Œβ€‹ο»Ώβ€Œβ€β€Œβ€β€Œβ€Œβ€‹ο»Ώβ€‹β€β€Œβ€β€‹ο»Ώβ€‹ο»Ώβ€β€‹β€Œβ€β€‹β€Œβ€‹β€ο»Ώβ€Œβ€Œβ€β€‹β€Œβ€‹ο»Ώβ€‹β€Œβ€‹ο»Ώβ€Œβ€β€‹ο»Ώβ€β€‹β€‹β€ο»Ώβ€Œβ€‹ο»Ώβ€Œβ€‹β€‹ο»Ώβ€β€‹β€‹ο»Ώβ€Œβ€Œβ€‹ο»Ώβ€‹β€β€‹β€ο»Ώβ€Œβ€‹ο»Ώβ€β€‹β€‹ο»Ώβ€Œο»Ώβ€Œβ€β€Œβ€Œβ€‹ο»Ώβ€‹β€β€‹β€ο»Ώβ€Œβ€‹ο»Ώβ€‹β€‹β€Œβ€β€‹ο»Ώβ€‹ο»Ώβ€‹β€β€Œβ€β€‹β€β€‹ο»Ώβ€Œβ€‹β€Œβ€β€Œβ€‹β€‹ο»Ώβ€Œβ€‹β€‹ο»Ώβ€‹β€β€Œβ€β€‹ο»Ώβ€‹ο»Ώβ€β€Œβ€‹ο»Ώβ€Œβ€‹β€Œβ€β€‹β€β€‹ο»Ώβ€ο»Ώβ€Œο»Ώβ€Œβ€‹β€Œο»Ώβ€β€Œβ€Œο»Ώβ€‹β€‹β€Œβ€β€Œβ€Œβ€‹ο»Ώο»Ώβ€Œβ€Œο»Ώβ€‹ο»Ώβ€Œβ€β€β€Œβ€Œβ€ο»Ώβ€Œβ€Œο»Ώβ€‹β€‹β€Œβ€ο»Ώβ€‹β€Œβ€β€Œβ€Œβ€Œβ€‹β€‹β€β€Œβ€ο»Ώβ€‹β€Œβ€ο»Ώο»Ώβ€Œβ€β€‹ο»Ώβ€Œβ€β€ο»Ώβ€‹ο»Ώβ€ο»Ώβ€Œο»Ώβ€‹β€‹β€Œβ€β€‹β€Œβ€Œο»Ώβ€Œβ€‹β€Œβ€β€β€‹β€‹ο»Ώο»Ώβ€Œβ€Œβ€β€‹β€β€Œβ€ο»Ώο»Ώβ€Œβ€β€Œβ€‹β€Œο»Ώβ€β€Œβ€‹β€β€Œβ€Œβ€‹ο»Ώβ€Œβ€Œβ€Œβ€‹β€‹β€β€Œβ€Œο»Ώο»Ώβ€Œβ€β€ο»Ώβ€Œβ€β€Œβ€Œβ€Œο»Ώβ€β€Œβ€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹ο»Ώβ€Œβ€‹β€Œβ€‹β€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹ο»Ώβ€Œβ€‹β€Œβ€‹β€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹β€β€‹ο»Ώβ€‹β€β€‹ο»Ώβ€‹β€Œβ€‹ο»Ώβ€Œβ€β€‹ο»Ώβ€‹β€Œβ€Œβ€β€Œβ€Œβ€‹ο»Ώβ€‹β€Œβ€‹ο»Ώβ€β€Œβ€Œβ€β€‹ο»Ώβ€Œβ€β€Œβ€Œβ€‹ο»Ώβ€‹β€Œβ€Œβ€β€‹ο»Ώβ€‹ο»Ώβ€Œβ€β€Œβ€β€‹β€β€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹β€β€‹ο»Ώβ€‹β€β€‹β€β€Œβ€Œβ€‹ο»Ώβ€Œβ€Œβ€Œβ€‹β€Œβ€‹β€‹β€ο»Ώβ€β€Œβ€β€‹ο»Ώβ€Œβ€β€β€‹β€Œβ€β€β€Œβ€Œβ€ο»Ώβ€‹β€Œβ€β€Œβ€‹β€Œο»Ώβ€‹β€β€Œβ€β€Œβ€Œβ€Œβ€ο»Ώβ€β€‹β€β€Œβ€Œβ€‹ο»Ώβ€Œβ€Œβ€Œβ€‹β€‹β€β€Œβ€Œο»Ώο»Ώβ€Œβ€β€ο»Ώβ€Œβ€β€Œβ€Œβ€Œο»Ώβ€β€Œβ€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹ο»Ώβ€Œβ€‹β€Œβ€‹β€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹ο»Ώβ€Œβ€‹β€Œβ€‹β€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹β€β€‹ο»Ώβ€‹β€β€‹ο»Ώβ€Œβ€Œβ€Œβ€β€Œβ€‹β€Œβ€β€‹β€Œβ€Œβ€β€Œβ€‹β€Œβ€β€Œβ€Œβ€Œβ€β€Œβ€Œβ€Œβ€β€Œβ€‹β€‹ο»Ώβ€Œβ€β€Œβ€β€‹ο»Ώβ€‹ο»Ώβ€Œβ€β€‹ο»Ώβ€Œβ€‹β€‹ο»Ώβ€‹β€Œβ€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹β€β€‹ο»Ώβ€‹β€β€‹β€β€Œβ€Œβ€‹ο»Ώβ€Œβ€Œβ€Œβ€‹β€Œβ€‹β€‹β€ο»Ώβ€β€Œο»Ώβ€Œβ€‹β€Œβ€β€Œβ€Œβ€Œο»Ώβ€β€‹β€Œο»Ώβ€Œβ€‹β€‹ο»Ώο»Ώο»Ώβ€Œβ€β€‹β€β€Œβ€β€‹β€Œβ€Œο»Ώβ€‹ο»Ώβ€Œβ€β€Œβ€Œβ€Œβ€Œβ€Œβ€Œβ€Œο»Ώβ€‹β€β€Œβ€ο»Ώβ€‹β€‹ο»Ώο»Ώβ€Œβ€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹β€β€Œβ€‹β€Œβ€β€Œο»Ώβ€‹β€‹β€Œο»Ώβ€‹β€β€Œβ€β€Œβ€Œβ€Œο»Ώβ€‹ο»Ώβ€Œβ€β€Œβ€Œβ€Œβ€ο»Ώβ€β€Œο»Ώβ€Œβ€‹β€Œβ€β€‹β€Œβ€Œο»Ώβ€Œβ€‹β€Œβ€β€β€Œβ€Œβ€ο»Ώο»Ώβ€Œβ€ο»Ώβ€β€‹β€β€Œβ€β€Œβ€β€β€Œβ€Œβ€β€Œβ€‹β€‹ο»Ώο»Ώβ€Œβ€‹ο»Ώβ€Œο»Ώβ€‹ο»Ώβ€‹β€Œβ€‹ο»Ώβ€Œβ€β€Œβ€β€Œβ€Œβ€‹ο»Ώβ€‹β€β€Œβ€β€‹ο»Ώβ€‹ο»Ώβ€β€‹β€Œβ€β€‹β€Œβ€‹β€ο»Ώβ€Œβ€Œβ€β€‹β€Œβ€‹ο»Ώβ€‹β€Œβ€‹ο»Ώβ€Œβ€β€‹ο»Ώβ€β€‹β€‹β€ο»Ώβ€Œβ€‹ο»Ώβ€Œβ€‹β€‹ο»Ώβ€β€‹β€‹ο»Ώβ€Œβ€Œβ€‹ο»Ώβ€‹β€β€‹β€ο»Ώβ€Œβ€‹ο»Ώβ€β€‹β€‹ο»Ώβ€Œο»Ώβ€Œβ€β€Œβ€Œβ€‹ο»Ώβ€‹β€β€‹β€ο»Ώβ€Œβ€‹ο»Ώβ€‹β€‹β€Œβ€β€‹ο»Ώβ€‹ο»Ώβ€‹β€β€Œβ€β€‹β€β€‹ο»Ώβ€Œβ€‹β€Œβ€β€Œβ€‹β€‹ο»Ώβ€Œβ€‹β€‹ο»Ώβ€‹β€β€Œβ€β€‹ο»Ώβ€‹ο»Ώβ€β€Œβ€‹ο»Ώβ€Œβ€‹β€Œβ€β€‹β€β€‹β€β€Œβ€β€Œο»Ώβ€Œβ€‹β€Œο»Ώβ€β€Œβ€Œο»Ώβ€‹β€‹β€Œβ€β€Œβ€Œβ€‹ο»Ώο»Ώβ€Œβ€Œο»Ώβ€‹ο»Ώβ€Œβ€β€β€Œβ€Œβ€ο»Ώβ€Œβ€Œο»Ώβ€‹β€‹β€Œβ€ο»Ώβ€‹β€Œβ€β€Œβ€Œβ€Œβ€‹β€‹β€β€Œβ€ο»Ώβ€‹β€Œβ€ο»Ώο»Ώβ€Œβ€β€‹ο»Ώβ€Œβ€β€ο»Ώβ€‹β€β€Œβ€β€Œο»Ώβ€‹β€‹β€Œβ€β€‹β€Œβ€Œο»Ώβ€Œβ€‹β€Œβ€β€β€‹β€‹ο»Ώο»Ώβ€Œβ€Œβ€β€‹β€β€Œβ€ο»Ώο»Ώβ€Œβ€β€Œβ€‹β€Œο»Ώβ€β€Œβ€‹β€β€Œβ€Œβ€‹ο»Ώβ€Œβ€Œβ€Œβ€‹β€‹β€β€Œβ€Œο»Ώο»Ώβ€Œβ€β€ο»Ώβ€Œβ€β€Œβ€Œβ€Œο»Ώβ€β€Œβ€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹ο»Ώβ€Œβ€‹β€Œβ€‹β€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹ο»Ώβ€Œβ€‹β€Œβ€‹β€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹β€β€‹ο»Ώβ€‹β€β€‹ο»Ώβ€‹β€Œβ€‹ο»Ώβ€Œβ€β€‹ο»Ώβ€‹β€Œβ€Œβ€β€Œβ€Œβ€‹ο»Ώβ€‹β€Œβ€‹ο»Ώβ€β€Œβ€Œβ€β€‹ο»Ώβ€Œβ€β€Œβ€Œβ€‹ο»Ώβ€‹β€Œβ€Œβ€β€‹ο»Ώβ€‹ο»Ώβ€Œβ€β€Œβ€β€‹β€β€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹β€β€‹ο»Ώβ€‹β€β€‹β€β€Œβ€Œβ€‹ο»Ώβ€Œβ€Œβ€Œβ€‹β€Œβ€‹β€‹β€ο»Ώβ€β€Œβ€β€‹ο»Ώβ€Œβ€β€β€‹β€Œβ€β€β€Œβ€Œβ€ο»Ώβ€‹β€Œβ€β€Œβ€‹β€Œο»Ώβ€‹β€β€Œβ€β€Œβ€Œβ€Œβ€ο»Ώβ€β€‹β€β€Œβ€Œβ€‹ο»Ώβ€Œβ€Œβ€Œβ€‹β€‹β€β€Œβ€Œο»Ώο»Ώβ€Œβ€β€ο»Ώβ€Œβ€β€Œβ€Œβ€Œο»Ώβ€β€Œβ€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹ο»Ώβ€Œβ€‹β€Œβ€‹β€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹ο»Ώβ€Œβ€‹β€Œβ€‹β€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹β€β€‹ο»Ώβ€‹β€β€‹ο»Ώβ€Œβ€Œβ€Œβ€β€Œβ€‹β€Œβ€β€‹β€Œβ€Œβ€β€Œβ€‹β€Œβ€β€Œβ€Œβ€Œβ€β€Œβ€Œβ€Œβ€β€Œβ€‹β€‹ο»Ώβ€Œβ€β€Œβ€β€‹ο»Ώβ€‹ο»Ώβ€Œβ€β€‹ο»Ώβ€Œβ€‹β€‹ο»Ώβ€‹β€Œβ€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹β€β€‹ο»Ώβ€‹β€β€‹β€β€Œβ€Œβ€‹ο»Ώβ€Œβ€Œβ€Œβ€‹β€Œβ€‹β€‹β€ο»Ώβ€β€Œο»Ώβ€Œβ€‹β€Œβ€β€Œβ€Œβ€Œο»Ώβ€β€‹β€Œο»Ώβ€Œβ€‹β€‹β€β€Œβ€β€Œβ€β€β€Œβ€Œο»Ώβ€‹ο»Ώβ€Œβ€‹β€Œβ€‹β€Œο»Ώβ€‹β€β€Œβ€β€‹β€Œβ€Œβ€β€Œβ€β€Œο»Ώβ€Œβ€‹β€‹ο»Ώο»Ώβ€Œβ€‹β€β€‹β€β€Œο»Ώο»Ώβ€Œ, β€‹β€‹β€‹β€‹β€Œο»Ώβ€ο»Ώβ€‹β€β€‹β€β€Œβ€ο»Ώο»Ώβ€Œο»Ώβ€‹β€β€Œβ€β€β€Œβ€Œβ€β€Œο»Ώβ€Œβ€β€β€Œβ€Œβ€ο»Ώβ€β€‹β€β€‹β€β€‹ο»Ώβ€β€β€‹β€β€‹β€β€Œο»Ώβ€‹ο»Ώβ€Œβ€β€‹β€Œβ€Œβ€ο»Ώβ€β€Œβ€β€β€Œβ€Œο»Ώβ€Œβ€‹β€Œο»Ώβ€β€Œβ€‹β€ο»Ώβ€β€Œβ€β€β€Œβ€Œβ€ο»Ώο»Ώβ€‹β€β€‹β€β€‹β€ο»Ώβ€‹β€‹β€β€‹β€β€Œβ€β€β€‹β€Œο»Ώβ€‹β€β€Œβ€β€Œβ€Œβ€Œβ€β€Œβ€β€‹β€β€‹β€β€‹ο»Ώβ€β€β€‹β€β€‹β€β€‹β€ο»Ώο»Ώβ€Œο»Ώβ€‹β€‹β€Œο»Ώβ€‹β€β€Œβ€β€Œβ€Œβ€Œο»Ώβ€‹ο»Ώβ€Œβ€β€Œβ€Œβ€Œβ€ο»Ώβ€β€Œο»Ώβ€Œβ€‹β€Œβ€β€‹β€Œβ€Œο»Ώβ€Œβ€‹β€Œβ€β€β€Œβ€Œβ€ο»Ώο»Ώβ€Œβ€ο»Ώβ€β€‹β€ο»Ώο»Ώβ€Œβ€β€β€Œβ€Œβ€ο»Ώβ€β€Œο»Ώβ€Œβ€‹β€Œβ€β€Œβ€Œβ€Œβ€ο»Ώβ€β€Œο»Ώβ€Œβ€‹β€‹β€ο»Ώο»Ώβ€Œβ€β€Œβ€Œβ€Œβ€β€Œβ€‹β€Œβ€β€β€Œβ€Œο»Ώβ€Œβ€‹β€‹β€ο»Ώο»Ώβ€Œβ€ο»Ώβ€Œβ€Œβ€ο»Ώο»Ώβ€Œβ€β€Œβ€‹β€Œβ€β€Œβ€Œβ€‹ο»Ώο»Ώβ€Œβ€Œο»Ώβ€‹β€‹β€Œο»Ώβ€‹β€β€Œβ€β€Œβ€Œβ€Œο»Ώβ€‹ο»Ώβ€Œβ€β€Œβ€Œβ€Œβ€ο»Ώβ€β€Œο»Ώβ€Œβ€‹β€Œβ€β€‹β€Œβ€Œο»Ώβ€Œβ€‹β€Œβ€β€β€Œβ€Œβ€ο»Ώο»Ώβ€Œβ€ο»Ώβ€β€‹ο»Ώβ€ο»Ώβ€Œβ€β€β€Œβ€Œβ€β€Œβ€‹β€‹ο»Ώο»Ώβ€Œβ€‹ο»Ώβ€Œο»Ώβ€‹ο»Ώβ€‹β€Œβ€‹ο»Ώβ€Œβ€β€Œβ€β€Œβ€Œβ€‹ο»Ώβ€‹β€β€Œβ€β€‹ο»Ώβ€‹ο»Ώβ€β€‹β€Œβ€β€‹β€Œβ€‹β€ο»Ώβ€Œβ€Œβ€β€‹β€Œβ€‹ο»Ώβ€‹β€Œβ€‹ο»Ώβ€Œβ€β€‹ο»Ώβ€β€‹β€‹β€ο»Ώβ€Œβ€‹ο»Ώβ€Œβ€‹β€‹ο»Ώβ€β€‹β€‹ο»Ώβ€Œβ€Œβ€‹ο»Ώβ€‹β€β€‹β€ο»Ώβ€Œβ€‹ο»Ώβ€β€‹β€‹ο»Ώβ€Œο»Ώβ€Œβ€β€Œβ€Œβ€‹ο»Ώβ€‹β€β€‹β€ο»Ώβ€Œβ€‹ο»Ώβ€‹β€‹β€Œβ€β€‹ο»Ώβ€‹ο»Ώβ€‹β€β€Œβ€β€‹β€β€‹ο»Ώβ€Œβ€‹β€Œβ€β€Œβ€‹β€‹ο»Ώβ€Œβ€‹β€‹ο»Ώβ€‹β€β€Œβ€β€‹ο»Ώβ€‹ο»Ώβ€β€Œβ€‹ο»Ώβ€Œβ€‹β€Œβ€β€‹β€β€‹ο»Ώβ€ο»Ώβ€Œο»Ώβ€Œβ€‹β€Œο»Ώβ€β€Œβ€Œο»Ώβ€‹β€‹β€Œβ€β€Œβ€Œβ€‹ο»Ώο»Ώβ€Œβ€Œο»Ώβ€‹ο»Ώβ€Œβ€β€β€Œβ€Œβ€ο»Ώβ€Œβ€Œο»Ώβ€‹β€‹β€Œβ€ο»Ώβ€‹β€Œβ€β€Œβ€Œβ€Œβ€‹β€‹β€β€Œβ€ο»Ώβ€‹β€Œβ€ο»Ώο»Ώβ€Œβ€β€‹ο»Ώβ€Œβ€β€ο»Ώβ€‹ο»Ώβ€ο»Ώβ€Œο»Ώβ€‹β€‹β€Œβ€β€‹β€Œβ€Œο»Ώβ€Œβ€‹β€Œβ€β€β€‹β€‹ο»Ώο»Ώβ€Œβ€Œβ€β€‹β€β€Œβ€ο»Ώο»Ώβ€Œβ€β€Œβ€‹β€Œο»Ώβ€β€Œβ€‹β€β€Œβ€Œβ€‹ο»Ώβ€Œβ€Œβ€Œβ€‹β€‹β€β€Œβ€Œο»Ώο»Ώβ€Œβ€β€ο»Ώβ€Œβ€β€Œβ€Œβ€Œο»Ώβ€β€Œβ€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹ο»Ώβ€Œβ€‹β€Œβ€‹β€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹ο»Ώβ€Œβ€‹β€Œβ€‹β€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹β€β€‹ο»Ώβ€‹β€β€‹ο»Ώβ€‹β€Œβ€‹ο»Ώβ€Œβ€β€‹ο»Ώβ€‹β€Œβ€Œβ€β€Œβ€Œβ€‹ο»Ώβ€‹β€Œβ€‹ο»Ώβ€β€Œβ€Œβ€β€‹ο»Ώβ€Œβ€β€Œβ€Œβ€‹ο»Ώβ€‹β€Œβ€Œβ€β€‹ο»Ώβ€‹ο»Ώβ€Œβ€β€Œβ€β€‹β€β€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹β€β€‹ο»Ώβ€‹β€β€‹β€β€Œβ€Œβ€‹ο»Ώβ€Œβ€Œβ€Œβ€‹β€Œβ€‹β€‹β€ο»Ώβ€β€Œβ€β€‹ο»Ώβ€Œβ€β€β€‹β€Œβ€β€β€Œβ€Œβ€ο»Ώβ€‹β€Œβ€β€Œβ€‹β€Œο»Ώβ€‹β€β€Œβ€β€Œβ€Œβ€Œβ€ο»Ώβ€β€‹β€β€Œβ€Œβ€‹ο»Ώβ€Œβ€Œβ€Œβ€‹β€‹β€β€Œβ€Œο»Ώο»Ώβ€Œβ€β€ο»Ώβ€Œβ€β€Œβ€Œβ€Œο»Ώβ€β€Œβ€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹ο»Ώβ€Œβ€‹β€Œβ€‹β€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹ο»Ώβ€Œβ€‹β€Œβ€‹β€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹β€β€‹ο»Ώβ€‹β€β€Œβ€β€‹ο»Ώβ€‹ο»Ώβ€‹β€Œβ€‹ο»Ώβ€‹β€‹β€‹ο»Ώβ€‹ο»Ώβ€‹ο»Ώβ€Œο»Ώβ€‹ο»Ώβ€Œβ€Œβ€‹ο»Ώβ€β€‹β€‹ο»Ώβ€‹β€β€‹ο»Ώβ€‹β€β€Œβ€β€‹β€β€Œβ€β€Œβ€β€Œβ€β€Œβ€Œβ€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹β€β€‹ο»Ώβ€‹β€β€‹β€β€Œβ€Œβ€‹ο»Ώβ€Œβ€Œβ€Œβ€‹β€Œβ€‹β€‹β€ο»Ώβ€β€Œο»Ώβ€Œβ€‹β€Œβ€β€Œβ€Œβ€Œο»Ώβ€β€‹β€Œο»Ώβ€Œβ€‹β€‹ο»Ώο»Ώο»Ώβ€Œβ€β€‹β€β€Œβ€β€‹β€Œβ€Œο»Ώβ€‹ο»Ώβ€Œβ€β€Œβ€Œβ€Œβ€Œβ€Œβ€Œβ€Œο»Ώβ€‹β€β€Œβ€ο»Ώβ€‹β€‹ο»Ώο»Ώβ€Œβ€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹β€β€Œβ€‹β€Œβ€β€Œο»Ώβ€‹β€‹β€Œο»Ώβ€‹β€β€Œβ€β€Œβ€Œβ€Œο»Ώβ€‹ο»Ώβ€Œβ€β€Œβ€Œβ€Œβ€ο»Ώβ€β€Œο»Ώβ€Œβ€‹β€Œβ€β€‹β€Œβ€Œο»Ώβ€Œβ€‹β€Œβ€β€β€Œβ€Œβ€ο»Ώο»Ώβ€Œβ€ο»Ώβ€β€‹β€β€Œβ€β€Œβ€β€β€Œβ€Œβ€β€Œβ€‹β€‹ο»Ώο»Ώβ€Œβ€‹ο»Ώβ€Œο»Ώβ€‹ο»Ώβ€‹β€Œβ€‹ο»Ώβ€Œβ€β€Œβ€β€Œβ€Œβ€‹ο»Ώβ€‹β€β€Œβ€β€‹ο»Ώβ€‹ο»Ώβ€β€‹β€Œβ€β€‹β€Œβ€‹β€ο»Ώβ€Œβ€Œβ€β€‹β€Œβ€‹ο»Ώβ€‹β€Œβ€‹ο»Ώβ€Œβ€β€‹ο»Ώβ€β€‹β€‹β€ο»Ώβ€Œβ€‹ο»Ώβ€Œβ€‹β€‹ο»Ώβ€β€‹β€‹ο»Ώβ€Œβ€Œβ€‹ο»Ώβ€‹β€β€‹β€ο»Ώβ€Œβ€‹ο»Ώβ€β€‹β€‹ο»Ώβ€Œο»Ώβ€Œβ€β€Œβ€Œβ€‹ο»Ώβ€‹β€β€‹β€ο»Ώβ€Œβ€‹ο»Ώβ€‹β€‹β€Œβ€β€‹ο»Ώβ€‹ο»Ώβ€‹β€β€Œβ€β€‹β€β€‹ο»Ώβ€Œβ€‹β€Œβ€β€Œβ€‹β€‹ο»Ώβ€Œβ€‹β€‹ο»Ώβ€‹β€β€Œβ€β€‹ο»Ώβ€‹ο»Ώβ€β€Œβ€‹ο»Ώβ€Œβ€‹β€Œβ€β€‹β€β€‹β€β€Œβ€β€Œο»Ώβ€Œβ€‹β€Œο»Ώβ€β€Œβ€Œο»Ώβ€‹β€‹β€Œβ€β€Œβ€Œβ€‹ο»Ώο»Ώβ€Œβ€Œο»Ώβ€‹ο»Ώβ€Œβ€β€β€Œβ€Œβ€ο»Ώβ€Œβ€Œο»Ώβ€‹β€‹β€Œβ€ο»Ώβ€‹β€Œβ€β€Œβ€Œβ€Œβ€‹β€‹β€β€Œβ€ο»Ώβ€‹β€Œβ€ο»Ώο»Ώβ€Œβ€β€‹ο»Ώβ€Œβ€β€ο»Ώβ€‹β€β€Œβ€β€Œο»Ώβ€‹β€‹β€Œβ€β€‹β€Œβ€Œο»Ώβ€Œβ€‹β€Œβ€β€β€‹β€‹ο»Ώο»Ώβ€Œβ€Œβ€β€‹β€β€Œβ€ο»Ώο»Ώβ€Œβ€β€Œβ€‹β€Œο»Ώβ€β€Œβ€‹β€β€Œβ€Œβ€‹ο»Ώβ€Œβ€Œβ€Œβ€‹β€‹β€β€Œβ€Œο»Ώο»Ώβ€Œβ€β€ο»Ώβ€Œβ€β€Œβ€Œβ€Œο»Ώβ€β€Œβ€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹ο»Ώβ€Œβ€‹β€Œβ€‹β€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹ο»Ώβ€Œβ€‹β€Œβ€‹β€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹β€β€‹ο»Ώβ€‹β€β€‹ο»Ώβ€‹β€Œβ€‹ο»Ώβ€Œβ€β€‹ο»Ώβ€‹β€Œβ€Œβ€β€Œβ€Œβ€‹ο»Ώβ€‹β€Œβ€‹ο»Ώβ€β€Œβ€Œβ€β€‹ο»Ώβ€Œβ€β€Œβ€Œβ€‹ο»Ώβ€‹β€Œβ€Œβ€β€‹ο»Ώβ€‹ο»Ώβ€Œβ€β€Œβ€β€‹β€β€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹β€β€‹ο»Ώβ€‹β€β€‹β€β€Œβ€Œβ€‹ο»Ώβ€Œβ€Œβ€Œβ€‹β€Œβ€‹β€‹β€ο»Ώβ€β€Œβ€β€‹ο»Ώβ€Œβ€β€β€‹β€Œβ€β€β€Œβ€Œβ€ο»Ώβ€‹β€Œβ€β€Œβ€‹β€Œο»Ώβ€‹β€β€Œβ€β€Œβ€Œβ€Œβ€ο»Ώβ€β€‹β€β€Œβ€Œβ€‹ο»Ώβ€Œβ€Œβ€Œβ€‹β€‹β€β€Œβ€Œο»Ώο»Ώβ€Œβ€β€ο»Ώβ€Œβ€β€Œβ€Œβ€Œο»Ώβ€β€Œβ€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹ο»Ώβ€Œβ€‹β€Œβ€‹β€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹ο»Ώβ€Œβ€‹β€Œβ€‹β€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹β€β€‹ο»Ώβ€‹β€β€Œβ€β€‹ο»Ώβ€‹ο»Ώβ€‹β€Œβ€‹ο»Ώβ€‹β€‹β€‹ο»Ώβ€‹ο»Ώβ€‹ο»Ώβ€Œο»Ώβ€‹ο»Ώβ€Œβ€Œβ€‹ο»Ώβ€β€‹β€‹ο»Ώβ€‹β€β€‹ο»Ώβ€‹β€β€Œβ€β€‹β€β€Œβ€β€Œβ€β€Œβ€β€Œβ€Œβ€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹β€β€‹ο»Ώβ€‹β€β€‹β€β€Œβ€Œβ€‹ο»Ώβ€Œβ€Œβ€Œβ€‹β€Œβ€‹β€‹β€ο»Ώβ€β€Œο»Ώβ€Œβ€‹β€Œβ€β€Œβ€Œβ€Œο»Ώβ€β€‹β€Œο»Ώβ€Œβ€‹β€‹β€β€Œβ€β€Œβ€β€β€Œβ€Œο»Ώβ€‹ο»Ώβ€Œβ€‹β€Œβ€‹β€Œο»Ώβ€‹β€β€Œβ€β€‹β€Œβ€Œβ€β€Œβ€β€Œο»Ώβ€Œβ€‹β€‹ο»Ώο»Ώβ€Œβ€‹β€β€‹β€β€Œο»Ώο»Ώβ€Œitalic textβ€‹β€‹β€‹β€‹β€Œο»Ώβ€ο»Ώβ€‹β€β€‹β€β€Œβ€ο»Ώο»Ώβ€Œο»Ώβ€‹β€β€Œβ€β€β€Œβ€Œβ€β€Œο»Ώβ€Œβ€β€β€Œβ€Œβ€ο»Ώβ€β€‹β€β€‹β€β€‹ο»Ώβ€β€β€‹β€β€‹β€β€Œο»Ώβ€‹ο»Ώβ€Œβ€β€‹β€Œβ€Œβ€ο»Ώβ€β€Œβ€β€β€Œβ€Œο»Ώβ€Œβ€‹β€Œο»Ώβ€β€Œβ€‹β€ο»Ώβ€β€Œβ€β€β€Œβ€Œβ€ο»Ώο»Ώβ€‹β€β€‹β€β€‹β€ο»Ώβ€‹β€‹β€β€‹β€β€Œβ€β€β€‹β€Œο»Ώβ€‹β€β€Œβ€β€Œβ€Œβ€Œβ€β€Œβ€β€‹β€β€‹β€β€‹ο»Ώβ€β€β€‹β€β€‹β€β€‹β€ο»Ώο»Ώβ€Œο»Ώβ€‹β€‹β€Œο»Ώβ€‹β€β€Œβ€β€Œβ€Œβ€Œο»Ώβ€‹ο»Ώβ€Œβ€β€Œβ€Œβ€Œβ€ο»Ώβ€β€Œο»Ώβ€Œβ€‹β€Œβ€β€‹β€Œβ€Œο»Ώβ€Œβ€‹β€Œβ€β€β€Œβ€Œβ€ο»Ώο»Ώβ€Œβ€ο»Ώβ€β€‹β€ο»Ώο»Ώβ€Œβ€β€β€Œβ€Œβ€ο»Ώβ€β€Œο»Ώβ€Œβ€‹β€Œβ€β€Œβ€Œβ€Œβ€ο»Ώβ€β€Œο»Ώβ€Œβ€‹β€‹β€ο»Ώο»Ώβ€Œβ€β€Œβ€Œβ€Œβ€β€Œβ€‹β€Œβ€β€β€Œβ€Œο»Ώβ€Œβ€‹β€‹β€ο»Ώο»Ώβ€Œβ€ο»Ώβ€Œβ€Œβ€ο»Ώο»Ώβ€Œβ€β€Œβ€‹β€Œβ€β€Œβ€Œβ€‹ο»Ώο»Ώβ€Œβ€Œο»Ώβ€‹β€‹β€Œο»Ώβ€‹β€β€Œβ€β€Œβ€Œβ€Œο»Ώβ€‹ο»Ώβ€Œβ€β€Œβ€Œβ€Œβ€ο»Ώβ€β€Œο»Ώβ€Œβ€‹β€Œβ€β€‹β€Œβ€Œο»Ώβ€Œβ€‹β€Œβ€β€β€Œβ€Œβ€ο»Ώο»Ώβ€Œβ€ο»Ώβ€β€‹ο»Ώβ€ο»Ώβ€Œβ€β€β€Œβ€Œβ€β€Œβ€‹β€‹ο»Ώο»Ώβ€Œβ€‹ο»Ώβ€Œο»Ώβ€‹ο»Ώβ€‹β€Œβ€‹ο»Ώβ€Œβ€β€Œβ€β€Œβ€Œβ€‹ο»Ώβ€‹β€β€Œβ€β€‹ο»Ώβ€‹ο»Ώβ€β€‹β€Œβ€β€‹β€Œβ€‹β€ο»Ώβ€Œβ€Œβ€β€‹β€Œβ€‹ο»Ώβ€‹β€Œβ€‹ο»Ώβ€Œβ€β€‹ο»Ώβ€β€‹β€‹β€ο»Ώβ€Œβ€‹ο»Ώβ€Œβ€‹β€‹ο»Ώβ€β€‹β€‹ο»Ώβ€Œβ€Œβ€‹ο»Ώβ€‹β€β€‹β€ο»Ώβ€Œβ€‹ο»Ώβ€β€‹β€‹ο»Ώβ€Œο»Ώβ€Œβ€β€Œβ€Œβ€‹ο»Ώβ€‹β€β€‹β€ο»Ώβ€Œβ€‹ο»Ώβ€‹β€‹β€Œβ€β€‹ο»Ώβ€‹ο»Ώβ€‹β€β€Œβ€β€‹β€β€‹ο»Ώβ€Œβ€‹β€Œβ€β€Œβ€‹β€‹ο»Ώβ€Œβ€‹β€‹ο»Ώβ€‹β€β€Œβ€β€‹ο»Ώβ€‹ο»Ώβ€β€Œβ€‹ο»Ώβ€Œβ€‹β€Œβ€β€‹β€β€‹ο»Ώβ€ο»Ώβ€Œο»Ώβ€Œβ€‹β€Œο»Ώβ€β€Œβ€Œο»Ώβ€‹β€‹β€Œβ€β€Œβ€Œβ€‹ο»Ώο»Ώβ€Œβ€Œο»Ώβ€‹ο»Ώβ€Œβ€β€β€Œβ€Œβ€ο»Ώβ€Œβ€Œο»Ώβ€‹β€‹β€Œβ€ο»Ώβ€‹β€Œβ€β€Œβ€Œβ€Œβ€‹β€‹β€β€Œβ€ο»Ώβ€‹β€Œβ€ο»Ώο»Ώβ€Œβ€β€‹ο»Ώβ€Œβ€β€ο»Ώβ€‹ο»Ώβ€ο»Ώβ€Œο»Ώβ€‹β€‹β€Œβ€β€‹β€Œβ€Œο»Ώβ€Œβ€‹β€Œβ€β€β€‹β€‹ο»Ώο»Ώβ€Œβ€Œβ€β€‹β€β€Œβ€ο»Ώο»Ώβ€Œβ€β€Œβ€‹β€Œο»Ώβ€β€Œβ€‹β€β€Œβ€Œβ€‹ο»Ώβ€Œβ€Œβ€Œβ€‹β€‹β€β€Œβ€Œο»Ώο»Ώβ€Œβ€β€ο»Ώβ€Œβ€β€Œβ€Œβ€Œο»Ώβ€β€Œβ€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹ο»Ώβ€Œβ€‹β€Œβ€‹β€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹ο»Ώβ€Œβ€‹β€Œβ€‹β€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹β€β€‹ο»Ώβ€‹β€β€‹ο»Ώβ€‹β€Œβ€‹ο»Ώβ€Œβ€β€‹ο»Ώβ€‹β€Œβ€Œβ€β€Œβ€Œβ€‹ο»Ώβ€‹β€Œβ€‹ο»Ώβ€β€Œβ€Œβ€β€‹ο»Ώβ€Œβ€β€Œβ€Œβ€‹ο»Ώβ€‹β€Œβ€Œβ€β€‹ο»Ώβ€‹ο»Ώβ€Œβ€β€Œβ€β€‹β€β€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹β€β€‹ο»Ώβ€‹β€β€‹β€β€Œβ€Œβ€‹ο»Ώβ€Œβ€Œβ€Œβ€‹β€Œβ€‹β€‹β€ο»Ώβ€β€Œβ€β€‹ο»Ώβ€Œβ€β€β€‹β€Œβ€β€β€Œβ€Œβ€ο»Ώβ€‹β€Œβ€β€Œβ€‹β€Œο»Ώβ€‹β€β€Œβ€β€Œβ€Œβ€Œβ€ο»Ώβ€β€‹β€β€Œβ€Œβ€‹ο»Ώβ€Œβ€Œβ€Œβ€‹β€‹β€β€Œβ€Œο»Ώο»Ώβ€Œβ€β€ο»Ώβ€Œβ€β€Œβ€Œβ€Œο»Ώβ€β€Œβ€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹ο»Ώβ€Œβ€‹β€Œβ€‹β€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹ο»Ώβ€Œβ€‹β€Œβ€‹β€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹β€β€‹ο»Ώβ€‹β€β€‹ο»Ώβ€‹ο»Ώβ€‹ο»Ώβ€‹β€β€Œβ€β€Œβ€β€Œβ€β€Œβ€β€Œβ€β€‹β€β€‹ο»Ώβ€Œο»Ώβ€Œβ€β€‹β€β€Œβ€β€‹ο»Ώβ€‹ο»Ώβ€β€Œβ€‹ο»Ώβ€Œβ€Œβ€‹ο»Ώβ€β€‹β€‹ο»Ώβ€Œβ€‹β€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹β€β€‹ο»Ώβ€‹β€β€‹β€β€Œβ€Œβ€‹ο»Ώβ€Œβ€Œβ€Œβ€‹β€Œβ€‹β€‹β€ο»Ώβ€β€Œο»Ώβ€Œβ€‹β€Œβ€β€Œβ€Œβ€Œο»Ώβ€β€‹β€Œο»Ώβ€Œβ€‹β€‹ο»Ώο»Ώο»Ώβ€Œβ€β€‹β€β€Œβ€β€‹β€Œβ€Œο»Ώβ€‹ο»Ώβ€Œβ€β€Œβ€Œβ€Œβ€Œβ€Œβ€Œβ€Œο»Ώβ€‹β€β€Œβ€ο»Ώβ€‹β€‹ο»Ώο»Ώβ€Œβ€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹β€β€Œβ€‹β€Œβ€β€Œο»Ώβ€‹β€‹β€Œο»Ώβ€‹β€β€Œβ€β€Œβ€Œβ€Œο»Ώβ€‹ο»Ώβ€Œβ€β€Œβ€Œβ€Œβ€ο»Ώβ€β€Œο»Ώβ€Œβ€‹β€Œβ€β€‹β€Œβ€Œο»Ώβ€Œβ€‹β€Œβ€β€β€Œβ€Œβ€ο»Ώο»Ώβ€Œβ€ο»Ώβ€β€‹β€β€Œβ€β€Œβ€β€β€Œβ€Œβ€β€Œβ€‹β€‹ο»Ώο»Ώβ€Œβ€‹ο»Ώβ€Œο»Ώβ€‹ο»Ώβ€‹β€Œβ€‹ο»Ώβ€Œβ€β€Œβ€β€Œβ€Œβ€‹ο»Ώβ€‹β€β€Œβ€β€‹ο»Ώβ€‹ο»Ώβ€β€‹β€Œβ€β€‹β€Œβ€‹β€ο»Ώβ€Œβ€Œβ€β€‹β€Œβ€‹ο»Ώβ€‹β€Œβ€‹ο»Ώβ€Œβ€β€‹ο»Ώβ€β€‹β€‹β€ο»Ώβ€Œβ€‹ο»Ώβ€Œβ€‹β€‹ο»Ώβ€β€‹β€‹ο»Ώβ€Œβ€Œβ€‹ο»Ώβ€‹β€β€‹β€ο»Ώβ€Œβ€‹ο»Ώβ€β€‹β€‹ο»Ώβ€Œο»Ώβ€Œβ€β€Œβ€Œβ€‹ο»Ώβ€‹β€β€‹β€ο»Ώβ€Œβ€‹ο»Ώβ€‹β€‹β€Œβ€β€‹ο»Ώβ€‹ο»Ώβ€‹β€β€Œβ€β€‹β€β€‹ο»Ώβ€Œβ€‹β€Œβ€β€Œβ€‹β€‹ο»Ώβ€Œβ€‹β€‹ο»Ώβ€‹β€β€Œβ€β€‹ο»Ώβ€‹ο»Ώβ€β€Œβ€‹ο»Ώβ€Œβ€‹β€Œβ€β€‹β€β€‹β€β€Œβ€β€Œο»Ώβ€Œβ€‹β€Œο»Ώβ€β€Œβ€Œο»Ώβ€‹β€‹β€Œβ€β€Œβ€Œβ€‹ο»Ώο»Ώβ€Œβ€Œο»Ώβ€‹ο»Ώβ€Œβ€β€β€Œβ€Œβ€ο»Ώβ€Œβ€Œο»Ώβ€‹β€‹β€Œβ€ο»Ώβ€‹β€Œβ€β€Œβ€Œβ€Œβ€‹β€‹β€β€Œβ€ο»Ώβ€‹β€Œβ€ο»Ώο»Ώβ€Œβ€β€‹ο»Ώβ€Œβ€β€ο»Ώβ€‹β€β€Œβ€β€Œο»Ώβ€‹β€‹β€Œβ€β€‹β€Œβ€Œο»Ώβ€Œβ€‹β€Œβ€β€β€‹β€‹ο»Ώο»Ώβ€Œβ€Œβ€β€‹β€β€Œβ€ο»Ώο»Ώβ€Œβ€β€Œβ€‹β€Œο»Ώβ€β€Œβ€‹β€β€Œβ€Œβ€‹ο»Ώβ€Œβ€Œβ€Œβ€‹β€‹β€β€Œβ€Œο»Ώο»Ώβ€Œβ€β€ο»Ώβ€Œβ€β€Œβ€Œβ€Œο»Ώβ€β€Œβ€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹ο»Ώβ€Œβ€‹β€Œβ€‹β€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹ο»Ώβ€Œβ€‹β€Œβ€‹β€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹β€β€‹ο»Ώβ€‹β€β€‹ο»Ώβ€‹β€Œβ€‹ο»Ώβ€Œβ€β€‹ο»Ώβ€‹β€Œβ€Œβ€β€Œβ€Œβ€‹ο»Ώβ€‹β€Œβ€‹ο»Ώβ€β€Œβ€Œβ€β€‹ο»Ώβ€Œβ€β€Œβ€Œβ€‹ο»Ώβ€‹β€Œβ€Œβ€β€‹ο»Ώβ€‹ο»Ώβ€Œβ€β€Œβ€β€‹β€β€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹β€β€‹ο»Ώβ€‹β€β€‹β€β€Œβ€Œβ€‹ο»Ώβ€Œβ€Œβ€Œβ€‹β€Œβ€‹β€‹β€ο»Ώβ€β€Œβ€β€‹ο»Ώβ€Œβ€β€β€‹β€Œβ€β€β€Œβ€Œβ€ο»Ώβ€‹β€Œβ€β€Œβ€‹β€Œο»Ώβ€‹β€β€Œβ€β€Œβ€Œβ€Œβ€ο»Ώβ€β€‹β€β€Œβ€Œβ€‹ο»Ώβ€Œβ€Œβ€Œβ€‹β€‹β€β€Œβ€Œο»Ώο»Ώβ€Œβ€β€ο»Ώβ€Œβ€β€Œβ€Œβ€Œο»Ώβ€β€Œβ€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹ο»Ώβ€Œβ€‹β€Œβ€‹β€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹ο»Ώβ€Œβ€‹β€Œβ€‹β€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹β€β€‹ο»Ώβ€‹β€β€‹ο»Ώβ€‹ο»Ώβ€‹ο»Ώβ€‹β€β€Œβ€β€Œβ€β€Œβ€β€Œβ€β€Œβ€β€‹β€β€‹ο»Ώβ€Œο»Ώβ€Œβ€β€‹β€β€Œβ€β€‹ο»Ώβ€‹ο»Ώβ€β€Œβ€‹ο»Ώβ€Œβ€Œβ€‹ο»Ώβ€β€‹β€‹ο»Ώβ€Œβ€‹β€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹β€β€‹ο»Ώβ€‹β€β€‹β€β€Œβ€Œβ€‹ο»Ώβ€Œβ€Œβ€Œβ€‹β€Œβ€‹β€‹β€ο»Ώβ€β€Œο»Ώβ€Œβ€‹β€Œβ€β€Œβ€Œβ€Œο»Ώβ€β€‹β€Œο»Ώβ€Œβ€‹β€‹β€β€Œβ€β€Œβ€β€β€Œβ€Œο»Ώβ€‹ο»Ώβ€Œβ€‹β€Œβ€‹β€Œο»Ώβ€‹β€β€Œβ€β€‹β€Œβ€Œβ€β€Œβ€β€Œο»Ώβ€Œβ€‹β€‹ο»Ώο»Ώβ€Œβ€‹β€β€‹β€β€Œο»Ώο»Ώβ€Œ, ~~strikethrough~~, β€‹β€‹β€‹β€‹β€Œο»Ώβ€ο»Ώβ€‹β€β€‹β€β€Œβ€ο»Ώο»Ώβ€Œο»Ώβ€‹β€β€Œβ€β€β€Œβ€Œβ€β€Œο»Ώβ€Œβ€β€β€Œβ€Œβ€ο»Ώβ€β€‹β€β€‹β€β€‹ο»Ώβ€β€β€‹β€β€‹β€β€Œο»Ώβ€‹ο»Ώβ€Œβ€β€‹β€Œβ€Œβ€ο»Ώβ€β€Œβ€β€β€Œβ€Œο»Ώβ€Œβ€‹β€Œο»Ώβ€β€Œβ€‹β€ο»Ώβ€β€Œβ€β€β€Œβ€Œβ€ο»Ώο»Ώβ€‹β€β€‹β€β€‹β€ο»Ώβ€‹β€‹β€β€‹β€β€Œβ€β€β€‹β€Œο»Ώβ€‹β€β€Œβ€β€Œβ€Œβ€Œβ€β€Œβ€β€‹β€β€‹β€β€‹ο»Ώβ€β€β€‹β€β€‹β€β€‹β€ο»Ώο»Ώβ€Œο»Ώβ€‹β€‹β€Œο»Ώβ€‹β€β€Œβ€β€Œβ€Œβ€Œο»Ώβ€‹ο»Ώβ€Œβ€β€Œβ€Œβ€Œβ€ο»Ώβ€β€Œο»Ώβ€Œβ€‹β€Œβ€β€‹β€Œβ€Œο»Ώβ€Œβ€‹β€Œβ€β€β€Œβ€Œβ€ο»Ώο»Ώβ€Œβ€ο»Ώβ€β€‹β€ο»Ώο»Ώβ€Œβ€β€β€Œβ€Œβ€ο»Ώβ€β€Œο»Ώβ€Œβ€‹β€Œβ€β€Œβ€Œβ€Œβ€ο»Ώβ€β€Œο»Ώβ€Œβ€‹β€‹β€ο»Ώο»Ώβ€Œβ€β€Œβ€Œβ€Œβ€β€Œβ€‹β€Œβ€β€β€Œβ€Œο»Ώβ€Œβ€‹β€‹β€ο»Ώο»Ώβ€Œβ€ο»Ώβ€Œβ€Œβ€ο»Ώο»Ώβ€Œβ€β€Œβ€‹β€Œβ€β€Œβ€Œβ€‹ο»Ώο»Ώβ€Œβ€Œο»Ώβ€‹β€‹β€Œο»Ώβ€‹β€β€Œβ€β€Œβ€Œβ€Œο»Ώβ€‹ο»Ώβ€Œβ€β€Œβ€Œβ€Œβ€ο»Ώβ€β€Œο»Ώβ€Œβ€‹β€Œβ€β€‹β€Œβ€Œο»Ώβ€Œβ€‹β€Œβ€β€β€Œβ€Œβ€ο»Ώο»Ώβ€Œβ€ο»Ώβ€β€‹ο»Ώβ€ο»Ώβ€Œβ€β€β€Œβ€Œβ€β€Œβ€‹β€‹ο»Ώο»Ώβ€Œβ€‹ο»Ώβ€Œο»Ώβ€‹ο»Ώβ€‹β€Œβ€‹ο»Ώβ€Œβ€β€Œβ€β€Œβ€Œβ€‹ο»Ώβ€‹β€β€Œβ€β€‹ο»Ώβ€‹ο»Ώβ€β€‹β€Œβ€β€‹β€Œβ€‹β€ο»Ώβ€Œβ€Œβ€β€‹β€Œβ€‹ο»Ώβ€‹β€Œβ€‹ο»Ώβ€Œβ€β€‹ο»Ώβ€β€‹β€‹β€ο»Ώβ€Œβ€‹ο»Ώβ€Œβ€‹β€‹ο»Ώβ€β€‹β€‹ο»Ώβ€Œβ€Œβ€‹ο»Ώβ€‹β€β€‹β€ο»Ώβ€Œβ€‹ο»Ώβ€β€‹β€‹ο»Ώβ€Œο»Ώβ€Œβ€β€Œβ€Œβ€‹ο»Ώβ€‹β€β€‹β€ο»Ώβ€Œβ€‹ο»Ώβ€‹β€‹β€Œβ€β€‹ο»Ώβ€‹ο»Ώβ€‹β€β€Œβ€β€‹β€β€‹ο»Ώβ€Œβ€‹β€Œβ€β€Œβ€‹β€‹ο»Ώβ€Œβ€‹β€‹ο»Ώβ€‹β€β€Œβ€β€‹ο»Ώβ€‹ο»Ώβ€β€Œβ€‹ο»Ώβ€Œβ€‹β€Œβ€β€‹β€β€‹ο»Ώβ€ο»Ώβ€Œο»Ώβ€Œβ€‹β€Œο»Ώβ€β€Œβ€Œο»Ώβ€‹β€‹β€Œβ€β€Œβ€Œβ€‹ο»Ώο»Ώβ€Œβ€Œο»Ώβ€‹ο»Ώβ€Œβ€β€β€Œβ€Œβ€ο»Ώβ€Œβ€Œο»Ώβ€‹β€‹β€Œβ€ο»Ώβ€‹β€Œβ€β€Œβ€Œβ€Œβ€‹β€‹β€β€Œβ€ο»Ώβ€‹β€Œβ€ο»Ώο»Ώβ€Œβ€β€‹ο»Ώβ€Œβ€β€ο»Ώβ€‹ο»Ώβ€ο»Ώβ€Œο»Ώβ€‹β€‹β€Œβ€β€‹β€Œβ€Œο»Ώβ€Œβ€‹β€Œβ€β€β€‹β€‹ο»Ώο»Ώβ€Œβ€Œβ€β€‹β€β€Œβ€ο»Ώο»Ώβ€Œβ€β€Œβ€‹β€Œο»Ώβ€β€Œβ€‹β€β€Œβ€Œβ€‹ο»Ώβ€Œβ€Œβ€Œβ€‹β€‹β€β€Œβ€Œο»Ώο»Ώβ€Œβ€β€ο»Ώβ€Œβ€β€Œβ€Œβ€Œο»Ώβ€β€Œβ€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹ο»Ώβ€Œβ€‹β€Œβ€‹β€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹ο»Ώβ€Œβ€‹β€Œβ€‹β€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹β€β€‹ο»Ώβ€‹β€β€‹ο»Ώβ€‹β€Œβ€‹ο»Ώβ€Œβ€β€‹ο»Ώβ€‹β€Œβ€Œβ€β€Œβ€Œβ€‹ο»Ώβ€‹β€Œβ€‹ο»Ώβ€β€Œβ€Œβ€β€‹ο»Ώβ€Œβ€β€Œβ€Œβ€‹ο»Ώβ€‹β€Œβ€Œβ€β€‹ο»Ώβ€‹ο»Ώβ€Œβ€β€Œβ€β€‹β€β€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹β€β€‹ο»Ώβ€‹β€β€‹β€β€Œβ€Œβ€‹ο»Ώβ€Œβ€Œβ€Œβ€‹β€Œβ€‹β€‹β€ο»Ώβ€β€Œβ€β€‹ο»Ώβ€Œβ€β€β€‹β€Œβ€β€β€Œβ€Œβ€ο»Ώβ€‹β€Œβ€β€Œβ€‹β€Œο»Ώβ€‹β€β€Œβ€β€Œβ€Œβ€Œβ€ο»Ώβ€β€‹β€β€Œβ€Œβ€‹ο»Ώβ€Œβ€Œβ€Œβ€‹β€‹β€β€Œβ€Œο»Ώο»Ώβ€Œβ€β€ο»Ώβ€Œβ€β€Œβ€Œβ€Œο»Ώβ€β€Œβ€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹ο»Ώβ€Œβ€‹β€Œβ€‹β€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹ο»Ώβ€Œβ€‹β€Œβ€‹β€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹β€β€‹ο»Ώβ€‹β€β€‹ο»Ώβ€β€Œβ€Œβ€β€Œβ€β€Œβ€β€‹β€β€‹ο»Ώβ€‹ο»Ώβ€‹ο»Ώβ€β€‹β€‹ο»Ώβ€β€‹β€‹ο»Ώβ€β€Œβ€Œβ€β€Œβ€Œβ€‹ο»Ώβ€‹β€Œβ€‹ο»Ώβ€‹ο»Ώβ€Œβ€β€Œβ€β€Œβ€β€Œβ€Œβ€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹β€β€‹ο»Ώβ€‹β€β€‹β€β€Œβ€Œβ€‹ο»Ώβ€Œβ€Œβ€Œβ€‹β€Œβ€‹β€‹β€ο»Ώβ€β€Œο»Ώβ€Œβ€‹β€Œβ€β€Œβ€Œβ€Œο»Ώβ€β€‹β€Œο»Ώβ€Œβ€‹β€‹ο»Ώο»Ώο»Ώβ€Œβ€β€‹β€β€Œβ€β€‹β€Œβ€Œο»Ώβ€‹ο»Ώβ€Œβ€β€Œβ€Œβ€Œβ€Œβ€Œβ€Œβ€Œο»Ώβ€‹β€β€Œβ€ο»Ώβ€‹β€‹ο»Ώο»Ώβ€Œβ€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹β€β€Œβ€‹β€Œβ€β€Œο»Ώβ€‹β€‹β€Œο»Ώβ€‹β€β€Œβ€β€Œβ€Œβ€Œο»Ώβ€‹ο»Ώβ€Œβ€β€Œβ€Œβ€Œβ€ο»Ώβ€β€Œο»Ώβ€Œβ€‹β€Œβ€β€‹β€Œβ€Œο»Ώβ€Œβ€‹β€Œβ€β€β€Œβ€Œβ€ο»Ώο»Ώβ€Œβ€ο»Ώβ€β€‹β€β€Œβ€β€Œβ€β€β€Œβ€Œβ€β€Œβ€‹β€‹ο»Ώο»Ώβ€Œβ€‹ο»Ώβ€Œο»Ώβ€‹ο»Ώβ€‹β€Œβ€‹ο»Ώβ€Œβ€β€Œβ€β€Œβ€Œβ€‹ο»Ώβ€‹β€β€Œβ€β€‹ο»Ώβ€‹ο»Ώβ€β€‹β€Œβ€β€‹β€Œβ€‹β€ο»Ώβ€Œβ€Œβ€β€‹β€Œβ€‹ο»Ώβ€‹β€Œβ€‹ο»Ώβ€Œβ€β€‹ο»Ώβ€β€‹β€‹β€ο»Ώβ€Œβ€‹ο»Ώβ€Œβ€‹β€‹ο»Ώβ€β€‹β€‹ο»Ώβ€Œβ€Œβ€‹ο»Ώβ€‹β€β€‹β€ο»Ώβ€Œβ€‹ο»Ώβ€β€‹β€‹ο»Ώβ€Œο»Ώβ€Œβ€β€Œβ€Œβ€‹ο»Ώβ€‹β€β€‹β€ο»Ώβ€Œβ€‹ο»Ώβ€‹β€‹β€Œβ€β€‹ο»Ώβ€‹ο»Ώβ€‹β€β€Œβ€β€‹β€β€‹ο»Ώβ€Œβ€‹β€Œβ€β€Œβ€‹β€‹ο»Ώβ€Œβ€‹β€‹ο»Ώβ€‹β€β€Œβ€β€‹ο»Ώβ€‹ο»Ώβ€β€Œβ€‹ο»Ώβ€Œβ€‹β€Œβ€β€‹β€β€‹β€β€Œβ€β€Œο»Ώβ€Œβ€‹β€Œο»Ώβ€β€Œβ€Œο»Ώβ€‹β€‹β€Œβ€β€Œβ€Œβ€‹ο»Ώο»Ώβ€Œβ€Œο»Ώβ€‹ο»Ώβ€Œβ€β€β€Œβ€Œβ€ο»Ώβ€Œβ€Œο»Ώβ€‹β€‹β€Œβ€ο»Ώβ€‹β€Œβ€β€Œβ€Œβ€Œβ€‹β€‹β€β€Œβ€ο»Ώβ€‹β€Œβ€ο»Ώο»Ώβ€Œβ€β€‹ο»Ώβ€Œβ€β€ο»Ώβ€‹β€β€Œβ€β€Œο»Ώβ€‹β€‹β€Œβ€β€‹β€Œβ€Œο»Ώβ€Œβ€‹β€Œβ€β€β€‹β€‹ο»Ώο»Ώβ€Œβ€Œβ€β€‹β€β€Œβ€ο»Ώο»Ώβ€Œβ€β€Œβ€‹β€Œο»Ώβ€β€Œβ€‹β€β€Œβ€Œβ€‹ο»Ώβ€Œβ€Œβ€Œβ€‹β€‹β€β€Œβ€Œο»Ώο»Ώβ€Œβ€β€ο»Ώβ€Œβ€β€Œβ€Œβ€Œο»Ώβ€β€Œβ€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹ο»Ώβ€Œβ€‹β€Œβ€‹β€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹ο»Ώβ€Œβ€‹β€Œβ€‹β€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹β€β€‹ο»Ώβ€‹β€β€‹ο»Ώβ€‹β€Œβ€‹ο»Ώβ€Œβ€β€‹ο»Ώβ€‹β€Œβ€Œβ€β€Œβ€Œβ€‹ο»Ώβ€‹β€Œβ€‹ο»Ώβ€β€Œβ€Œβ€β€‹ο»Ώβ€Œβ€β€Œβ€Œβ€‹ο»Ώβ€‹β€Œβ€Œβ€β€‹ο»Ώβ€‹ο»Ώβ€Œβ€β€Œβ€β€‹β€β€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹β€β€‹ο»Ώβ€‹β€β€‹β€β€Œβ€Œβ€‹ο»Ώβ€Œβ€Œβ€Œβ€‹β€Œβ€‹β€‹β€ο»Ώβ€β€Œβ€β€‹ο»Ώβ€Œβ€β€β€‹β€Œβ€β€β€Œβ€Œβ€ο»Ώβ€‹β€Œβ€β€Œβ€‹β€Œο»Ώβ€‹β€β€Œβ€β€Œβ€Œβ€Œβ€ο»Ώβ€β€‹β€β€Œβ€Œβ€‹ο»Ώβ€Œβ€Œβ€Œβ€‹β€‹β€β€Œβ€Œο»Ώο»Ώβ€Œβ€β€ο»Ώβ€Œβ€β€Œβ€Œβ€Œο»Ώβ€β€Œβ€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹ο»Ώβ€Œβ€‹β€Œβ€‹β€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹ο»Ώβ€Œβ€‹β€Œβ€‹β€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹β€β€‹ο»Ώβ€‹β€β€‹ο»Ώβ€β€Œβ€Œβ€β€Œβ€β€Œβ€β€‹β€β€‹ο»Ώβ€‹ο»Ώβ€‹ο»Ώβ€β€‹β€‹ο»Ώβ€β€‹β€‹ο»Ώβ€β€Œβ€Œβ€β€Œβ€Œβ€‹ο»Ώβ€‹β€Œβ€‹ο»Ώβ€‹ο»Ώβ€Œβ€β€Œβ€β€Œβ€β€Œβ€Œβ€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹β€β€‹ο»Ώβ€‹β€β€‹β€β€Œβ€Œβ€‹ο»Ώβ€Œβ€Œβ€Œβ€‹β€Œβ€‹β€‹β€ο»Ώβ€β€Œο»Ώβ€Œβ€‹β€Œβ€β€Œβ€Œβ€Œο»Ώβ€β€‹β€Œο»Ώβ€Œβ€‹β€‹β€β€Œβ€β€Œβ€β€β€Œβ€Œο»Ώβ€‹ο»Ώβ€Œβ€‹β€Œβ€‹β€Œο»Ώβ€‹β€β€Œβ€β€‹β€Œβ€Œβ€β€Œβ€β€Œο»Ώβ€Œβ€‹β€‹ο»Ώο»Ώβ€Œβ€‹β€β€‹β€β€Œο»Ώο»Ώβ€Œcodeβ€‹β€‹β€‹β€‹β€Œο»Ώβ€ο»Ώβ€‹β€β€‹β€β€Œβ€ο»Ώο»Ώβ€Œο»Ώβ€‹β€β€Œβ€β€β€Œβ€Œβ€β€Œο»Ώβ€Œβ€β€β€Œβ€Œβ€ο»Ώβ€β€‹β€β€‹β€β€‹ο»Ώβ€β€β€‹β€β€‹β€β€Œο»Ώβ€‹ο»Ώβ€Œβ€β€‹β€Œβ€Œβ€ο»Ώβ€β€Œβ€β€β€Œβ€Œο»Ώβ€Œβ€‹β€Œο»Ώβ€β€Œβ€‹β€ο»Ώβ€β€Œβ€β€β€Œβ€Œβ€ο»Ώο»Ώβ€‹β€β€‹β€β€‹β€ο»Ώβ€‹β€‹β€β€‹β€β€Œβ€β€β€‹β€Œο»Ώβ€‹β€β€Œβ€β€Œβ€Œβ€Œβ€β€Œβ€β€‹β€β€‹β€β€‹ο»Ώβ€β€β€‹β€β€‹β€β€‹β€ο»Ώο»Ώβ€Œο»Ώβ€‹β€‹β€Œο»Ώβ€‹β€β€Œβ€β€Œβ€Œβ€Œο»Ώβ€‹ο»Ώβ€Œβ€β€Œβ€Œβ€Œβ€ο»Ώβ€β€Œο»Ώβ€Œβ€‹β€Œβ€β€‹β€Œβ€Œο»Ώβ€Œβ€‹β€Œβ€β€β€Œβ€Œβ€ο»Ώο»Ώβ€Œβ€ο»Ώβ€β€‹β€ο»Ώο»Ώβ€Œβ€β€β€Œβ€Œβ€ο»Ώβ€β€Œο»Ώβ€Œβ€‹β€Œβ€β€Œβ€Œβ€Œβ€ο»Ώβ€β€Œο»Ώβ€Œβ€‹β€‹β€ο»Ώο»Ώβ€Œβ€β€Œβ€Œβ€Œβ€β€Œβ€‹β€Œβ€β€β€Œβ€Œο»Ώβ€Œβ€‹β€‹β€ο»Ώο»Ώβ€Œβ€ο»Ώβ€Œβ€Œβ€ο»Ώο»Ώβ€Œβ€β€Œβ€‹β€Œβ€β€Œβ€Œβ€‹ο»Ώο»Ώβ€Œβ€Œο»Ώβ€‹β€‹β€Œο»Ώβ€‹β€β€Œβ€β€Œβ€Œβ€Œο»Ώβ€‹ο»Ώβ€Œβ€β€Œβ€Œβ€Œβ€ο»Ώβ€β€Œο»Ώβ€Œβ€‹β€Œβ€β€‹β€Œβ€Œο»Ώβ€Œβ€‹β€Œβ€β€β€Œβ€Œβ€ο»Ώο»Ώβ€Œβ€ο»Ώβ€β€‹ο»Ώβ€ο»Ώβ€Œβ€β€β€Œβ€Œβ€β€Œβ€‹β€‹ο»Ώο»Ώβ€Œβ€‹ο»Ώβ€Œο»Ώβ€‹ο»Ώβ€‹β€Œβ€‹ο»Ώβ€Œβ€β€Œβ€β€Œβ€Œβ€‹ο»Ώβ€‹β€β€Œβ€β€‹ο»Ώβ€‹ο»Ώβ€β€‹β€Œβ€β€‹β€Œβ€‹β€ο»Ώβ€Œβ€Œβ€β€‹β€Œβ€‹ο»Ώβ€‹β€Œβ€‹ο»Ώβ€Œβ€β€‹ο»Ώβ€β€‹β€‹β€ο»Ώβ€Œβ€‹ο»Ώβ€Œβ€‹β€‹ο»Ώβ€β€‹β€‹ο»Ώβ€Œβ€Œβ€‹ο»Ώβ€‹β€β€‹β€ο»Ώβ€Œβ€‹ο»Ώβ€β€‹β€‹ο»Ώβ€Œο»Ώβ€Œβ€β€Œβ€Œβ€‹ο»Ώβ€‹β€β€‹β€ο»Ώβ€Œβ€‹ο»Ώβ€‹β€‹β€Œβ€β€‹ο»Ώβ€‹ο»Ώβ€‹β€β€Œβ€β€‹β€β€‹ο»Ώβ€Œβ€‹β€Œβ€β€Œβ€‹β€‹ο»Ώβ€Œβ€‹β€‹ο»Ώβ€‹β€β€Œβ€β€‹ο»Ώβ€‹ο»Ώβ€β€Œβ€‹ο»Ώβ€Œβ€‹β€Œβ€β€‹β€β€‹ο»Ώβ€ο»Ώβ€Œο»Ώβ€Œβ€‹β€Œο»Ώβ€β€Œβ€Œο»Ώβ€‹β€‹β€Œβ€β€Œβ€Œβ€‹ο»Ώο»Ώβ€Œβ€Œο»Ώβ€‹ο»Ώβ€Œβ€β€β€Œβ€Œβ€ο»Ώβ€Œβ€Œο»Ώβ€‹β€‹β€Œβ€ο»Ώβ€‹β€Œβ€β€Œβ€Œβ€Œβ€‹β€‹β€β€Œβ€ο»Ώβ€‹β€Œβ€ο»Ώο»Ώβ€Œβ€β€‹ο»Ώβ€Œβ€β€ο»Ώβ€‹ο»Ώβ€ο»Ώβ€Œο»Ώβ€‹β€‹β€Œβ€β€‹β€Œβ€Œο»Ώβ€Œβ€‹β€Œβ€β€β€‹β€‹ο»Ώο»Ώβ€Œβ€Œβ€β€‹β€β€Œβ€ο»Ώο»Ώβ€Œβ€β€Œβ€‹β€Œο»Ώβ€β€Œβ€‹β€β€Œβ€Œβ€‹ο»Ώβ€Œβ€Œβ€Œβ€‹β€‹β€β€Œβ€Œο»Ώο»Ώβ€Œβ€β€ο»Ώβ€Œβ€β€Œβ€Œβ€Œο»Ώβ€β€Œβ€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹ο»Ώβ€Œβ€‹β€Œβ€‹β€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹ο»Ώβ€Œβ€‹β€Œβ€‹β€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹β€β€‹ο»Ώβ€‹β€β€‹ο»Ώβ€‹β€Œβ€‹ο»Ώβ€Œβ€β€‹ο»Ώβ€‹β€Œβ€Œβ€β€Œβ€Œβ€‹ο»Ώβ€‹β€Œβ€‹ο»Ώβ€β€Œβ€Œβ€β€‹ο»Ώβ€Œβ€β€Œβ€Œβ€‹ο»Ώβ€‹β€Œβ€Œβ€β€‹ο»Ώβ€‹ο»Ώβ€Œβ€β€Œβ€β€‹β€β€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹β€β€‹ο»Ώβ€‹β€β€‹β€β€Œβ€Œβ€‹ο»Ώβ€Œβ€Œβ€Œβ€‹β€Œβ€‹β€‹β€ο»Ώβ€β€Œβ€β€‹ο»Ώβ€Œβ€β€β€‹β€Œβ€β€β€Œβ€Œβ€ο»Ώβ€‹β€Œβ€β€Œβ€‹β€Œο»Ώβ€‹β€β€Œβ€β€Œβ€Œβ€Œβ€ο»Ώβ€β€‹β€β€Œβ€Œβ€‹ο»Ώβ€Œβ€Œβ€Œβ€‹β€‹β€β€Œβ€Œο»Ώο»Ώβ€Œβ€β€ο»Ώβ€Œβ€β€Œβ€Œβ€Œο»Ώβ€β€Œβ€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹ο»Ώβ€Œβ€‹β€Œβ€‹β€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹ο»Ώβ€Œβ€‹β€Œβ€‹β€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹β€β€‹ο»Ώβ€‹β€β€‹ο»Ώβ€‹β€Œβ€‹ο»Ώβ€‹β€‹β€‹ο»Ώβ€‹ο»Ώβ€Œβ€β€‹β€β€‹ο»Ώβ€‹β€β€‹ο»Ώβ€Œβ€Œβ€Œβ€β€Œβ€Œβ€‹ο»Ώβ€‹β€‹β€Œβ€β€Œβ€Œβ€‹ο»Ώβ€β€‹β€‹ο»Ώβ€Œβ€‹β€‹ο»Ώβ€‹β€β€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹β€β€‹ο»Ώβ€‹β€β€‹β€β€Œβ€Œβ€‹ο»Ώβ€Œβ€Œβ€Œβ€‹β€Œβ€‹β€‹β€ο»Ώβ€β€Œο»Ώβ€Œβ€‹β€Œβ€β€Œβ€Œβ€Œο»Ώβ€β€‹β€Œο»Ώβ€Œβ€‹β€‹ο»Ώο»Ώο»Ώβ€Œβ€β€‹β€β€Œβ€β€‹β€Œβ€Œο»Ώβ€‹ο»Ώβ€Œβ€β€Œβ€Œβ€Œβ€Œβ€Œβ€Œβ€Œο»Ώβ€‹β€β€Œβ€ο»Ώβ€‹β€‹ο»Ώο»Ώβ€Œβ€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹β€β€Œβ€‹β€Œβ€β€Œο»Ώβ€‹β€‹β€Œο»Ώβ€‹β€β€Œβ€β€Œβ€Œβ€Œο»Ώβ€‹ο»Ώβ€Œβ€β€Œβ€Œβ€Œβ€ο»Ώβ€β€Œο»Ώβ€Œβ€‹β€Œβ€β€‹β€Œβ€Œο»Ώβ€Œβ€‹β€Œβ€β€β€Œβ€Œβ€ο»Ώο»Ώβ€Œβ€ο»Ώβ€β€‹β€β€Œβ€β€Œβ€β€β€Œβ€Œβ€β€Œβ€‹β€‹ο»Ώο»Ώβ€Œβ€‹ο»Ώβ€Œο»Ώβ€‹ο»Ώβ€‹β€Œβ€‹ο»Ώβ€Œβ€β€Œβ€β€Œβ€Œβ€‹ο»Ώβ€‹β€β€Œβ€β€‹ο»Ώβ€‹ο»Ώβ€β€‹β€Œβ€β€‹β€Œβ€‹β€ο»Ώβ€Œβ€Œβ€β€‹β€Œβ€‹ο»Ώβ€‹β€Œβ€‹ο»Ώβ€Œβ€β€‹ο»Ώβ€β€‹β€‹β€ο»Ώβ€Œβ€‹ο»Ώβ€Œβ€‹β€‹ο»Ώβ€β€‹β€‹ο»Ώβ€Œβ€Œβ€‹ο»Ώβ€‹β€β€‹β€ο»Ώβ€Œβ€‹ο»Ώβ€β€‹β€‹ο»Ώβ€Œο»Ώβ€Œβ€β€Œβ€Œβ€‹ο»Ώβ€‹β€β€‹β€ο»Ώβ€Œβ€‹ο»Ώβ€‹β€‹β€Œβ€β€‹ο»Ώβ€‹ο»Ώβ€‹β€β€Œβ€β€‹β€β€‹ο»Ώβ€Œβ€‹β€Œβ€β€Œβ€‹β€‹ο»Ώβ€Œβ€‹β€‹ο»Ώβ€‹β€β€Œβ€β€‹ο»Ώβ€‹ο»Ώβ€β€Œβ€‹ο»Ώβ€Œβ€‹β€Œβ€β€‹β€β€‹β€β€Œβ€β€Œο»Ώβ€Œβ€‹β€Œο»Ώβ€β€Œβ€Œο»Ώβ€‹β€‹β€Œβ€β€Œβ€Œβ€‹ο»Ώο»Ώβ€Œβ€Œο»Ώβ€‹ο»Ώβ€Œβ€β€β€Œβ€Œβ€ο»Ώβ€Œβ€Œο»Ώβ€‹β€‹β€Œβ€ο»Ώβ€‹β€Œβ€β€Œβ€Œβ€Œβ€‹β€‹β€β€Œβ€ο»Ώβ€‹β€Œβ€ο»Ώο»Ώβ€Œβ€β€‹ο»Ώβ€Œβ€β€ο»Ώβ€‹β€β€Œβ€β€Œο»Ώβ€‹β€‹β€Œβ€β€‹β€Œβ€Œο»Ώβ€Œβ€‹β€Œβ€β€β€‹β€‹ο»Ώο»Ώβ€Œβ€Œβ€β€‹β€β€Œβ€ο»Ώο»Ώβ€Œβ€β€Œβ€‹β€Œο»Ώβ€β€Œβ€‹β€β€Œβ€Œβ€‹ο»Ώβ€Œβ€Œβ€Œβ€‹β€‹β€β€Œβ€Œο»Ώο»Ώβ€Œβ€β€ο»Ώβ€Œβ€β€Œβ€Œβ€Œο»Ώβ€β€Œβ€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹ο»Ώβ€Œβ€‹β€Œβ€‹β€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹ο»Ώβ€Œβ€‹β€Œβ€‹β€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹β€β€‹ο»Ώβ€‹β€β€‹ο»Ώβ€‹β€Œβ€‹ο»Ώβ€Œβ€β€‹ο»Ώβ€‹β€Œβ€Œβ€β€Œβ€Œβ€‹ο»Ώβ€‹β€Œβ€‹ο»Ώβ€β€Œβ€Œβ€β€‹ο»Ώβ€Œβ€β€Œβ€Œβ€‹ο»Ώβ€‹β€Œβ€Œβ€β€‹ο»Ώβ€‹ο»Ώβ€Œβ€β€Œβ€β€‹β€β€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹β€β€‹ο»Ώβ€‹β€β€‹β€β€Œβ€Œβ€‹ο»Ώβ€Œβ€Œβ€Œβ€‹β€Œβ€‹β€‹β€ο»Ώβ€β€Œβ€β€‹ο»Ώβ€Œβ€β€β€‹β€Œβ€β€β€Œβ€Œβ€ο»Ώβ€‹β€Œβ€β€Œβ€‹β€Œο»Ώβ€‹β€β€Œβ€β€Œβ€Œβ€Œβ€ο»Ώβ€β€‹β€β€Œβ€Œβ€‹ο»Ώβ€Œβ€Œβ€Œβ€‹β€‹β€β€Œβ€Œο»Ώο»Ώβ€Œβ€β€ο»Ώβ€Œβ€β€Œβ€Œβ€Œο»Ώβ€β€Œβ€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹ο»Ώβ€Œβ€‹β€Œβ€‹β€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹ο»Ώβ€Œβ€‹β€Œβ€‹β€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹β€β€‹ο»Ώβ€‹β€β€‹ο»Ώβ€‹β€Œβ€‹ο»Ώβ€‹β€‹β€‹ο»Ώβ€‹ο»Ώβ€Œβ€β€‹β€β€‹ο»Ώβ€‹β€β€‹ο»Ώβ€Œβ€Œβ€Œβ€β€Œβ€Œβ€‹ο»Ώβ€‹β€‹β€Œβ€β€Œβ€Œβ€‹ο»Ώβ€β€‹β€‹ο»Ώβ€Œβ€‹β€‹ο»Ώβ€‹β€β€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹β€β€‹ο»Ώβ€‹β€β€‹β€β€Œβ€Œβ€‹ο»Ώβ€Œβ€Œβ€Œβ€‹β€Œβ€‹β€‹β€ο»Ώβ€β€Œο»Ώβ€Œβ€‹β€Œβ€β€Œβ€Œβ€Œο»Ώβ€β€‹β€Œο»Ώβ€Œβ€‹β€‹β€β€Œβ€β€Œβ€β€β€Œβ€Œο»Ώβ€‹ο»Ώβ€Œβ€‹β€Œβ€‹β€Œο»Ώβ€‹β€β€Œβ€β€‹β€Œβ€Œβ€β€Œβ€β€Œο»Ώβ€Œβ€‹β€‹ο»Ώο»Ώβ€Œβ€‹β€β€‹β€β€Œο»Ώο»Ώβ€Œ, > blockquote, - list item, 1. numbered list item, β€‹β€‹β€‹β€‹β€Œο»Ώβ€ο»Ώβ€‹β€β€‹β€β€Œβ€ο»Ώο»Ώβ€Œο»Ώβ€‹β€β€Œβ€β€β€Œβ€Œβ€β€Œο»Ώβ€Œβ€β€β€Œβ€Œβ€ο»Ώβ€β€‹β€β€‹β€β€‹ο»Ώβ€β€β€‹β€β€‹β€β€Œο»Ώβ€‹ο»Ώβ€Œβ€β€‹β€Œβ€Œβ€ο»Ώβ€β€Œβ€β€β€Œβ€Œο»Ώβ€Œβ€‹β€Œο»Ώβ€β€Œβ€‹β€ο»Ώβ€β€Œβ€β€β€Œβ€Œβ€ο»Ώο»Ώβ€‹β€β€‹β€β€‹β€ο»Ώβ€‹β€‹β€β€‹β€β€Œβ€β€β€‹β€Œο»Ώβ€‹β€β€Œβ€β€Œβ€Œβ€Œβ€β€Œβ€β€‹β€β€‹β€β€‹ο»Ώβ€β€β€‹β€β€‹β€β€‹β€ο»Ώο»Ώβ€Œο»Ώβ€‹β€‹β€Œο»Ώβ€‹β€β€Œβ€β€Œβ€Œβ€Œο»Ώβ€‹ο»Ώβ€Œβ€β€Œβ€Œβ€Œβ€ο»Ώβ€β€Œο»Ώβ€Œβ€‹β€Œβ€β€‹β€Œβ€Œο»Ώβ€Œβ€‹β€Œβ€β€β€Œβ€Œβ€ο»Ώο»Ώβ€Œβ€ο»Ώβ€β€‹β€ο»Ώο»Ώβ€Œβ€β€β€Œβ€Œβ€ο»Ώβ€β€Œο»Ώβ€Œβ€‹β€Œβ€β€Œβ€Œβ€Œβ€ο»Ώβ€β€Œο»Ώβ€Œβ€‹β€‹β€ο»Ώο»Ώβ€Œβ€β€Œβ€Œβ€Œβ€β€Œβ€‹β€Œβ€β€β€Œβ€Œο»Ώβ€Œβ€‹β€‹β€ο»Ώο»Ώβ€Œβ€ο»Ώβ€Œβ€Œβ€ο»Ώο»Ώβ€Œβ€β€Œβ€‹β€Œβ€β€Œβ€Œβ€‹ο»Ώο»Ώβ€Œβ€Œο»Ώβ€‹β€‹β€Œο»Ώβ€‹β€β€Œβ€β€Œβ€Œβ€Œο»Ώβ€‹ο»Ώβ€Œβ€β€Œβ€Œβ€Œβ€ο»Ώβ€β€Œο»Ώβ€Œβ€‹β€Œβ€β€‹β€Œβ€Œο»Ώβ€Œβ€‹β€Œβ€β€β€Œβ€Œβ€ο»Ώο»Ώβ€Œβ€ο»Ώβ€β€‹ο»Ώβ€ο»Ώβ€Œβ€β€β€Œβ€Œβ€β€Œβ€‹β€‹ο»Ώο»Ώβ€Œβ€‹ο»Ώβ€Œο»Ώβ€‹ο»Ώβ€‹β€Œβ€‹ο»Ώβ€Œβ€β€Œβ€β€Œβ€Œβ€‹ο»Ώβ€‹β€β€Œβ€β€‹ο»Ώβ€‹ο»Ώβ€β€‹β€Œβ€β€‹β€Œβ€‹β€ο»Ώβ€Œβ€Œβ€β€‹β€Œβ€‹ο»Ώβ€‹β€Œβ€‹ο»Ώβ€Œβ€β€‹ο»Ώβ€β€‹β€‹β€ο»Ώβ€Œβ€‹ο»Ώβ€Œβ€‹β€‹ο»Ώβ€β€‹β€‹ο»Ώβ€Œβ€Œβ€‹ο»Ώβ€‹β€β€‹β€ο»Ώβ€Œβ€‹ο»Ώβ€β€‹β€‹ο»Ώβ€Œο»Ώβ€Œβ€β€Œβ€Œβ€‹ο»Ώβ€‹β€β€‹β€ο»Ώβ€Œβ€‹ο»Ώβ€‹β€‹β€Œβ€β€‹ο»Ώβ€‹ο»Ώβ€‹β€β€Œβ€β€‹β€β€‹ο»Ώβ€Œβ€‹β€Œβ€β€Œβ€‹β€‹ο»Ώβ€Œβ€‹β€‹ο»Ώβ€‹β€β€Œβ€β€‹ο»Ώβ€‹ο»Ώβ€β€Œβ€‹ο»Ώβ€Œβ€‹β€Œβ€β€‹β€β€‹ο»Ώβ€ο»Ώβ€Œο»Ώβ€Œβ€‹β€Œο»Ώβ€β€Œβ€Œο»Ώβ€‹β€‹β€Œβ€β€Œβ€Œβ€‹ο»Ώο»Ώβ€Œβ€Œο»Ώβ€‹ο»Ώβ€Œβ€β€β€Œβ€Œβ€ο»Ώβ€Œβ€Œο»Ώβ€‹β€‹β€Œβ€ο»Ώβ€‹β€Œβ€β€Œβ€Œβ€Œβ€‹β€‹β€β€Œβ€ο»Ώβ€‹β€Œβ€ο»Ώο»Ώβ€Œβ€β€‹ο»Ώβ€Œβ€β€ο»Ώβ€‹ο»Ώβ€ο»Ώβ€Œο»Ώβ€‹β€‹β€Œβ€β€‹β€Œβ€Œο»Ώβ€Œβ€‹β€Œβ€β€β€‹β€‹ο»Ώο»Ώβ€Œβ€Œβ€β€‹β€β€Œβ€ο»Ώο»Ώβ€Œβ€β€Œβ€‹β€Œο»Ώβ€β€Œβ€‹β€β€Œβ€Œβ€‹ο»Ώβ€Œβ€Œβ€Œβ€‹β€‹β€β€Œβ€Œο»Ώο»Ώβ€Œβ€β€ο»Ώβ€Œβ€β€Œβ€Œβ€Œο»Ώβ€β€Œβ€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹ο»Ώβ€Œβ€‹β€Œβ€‹β€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹ο»Ώβ€Œβ€‹β€Œβ€‹β€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹β€β€‹ο»Ώβ€‹β€β€‹ο»Ώβ€‹β€Œβ€‹ο»Ώβ€Œβ€β€‹ο»Ώβ€‹β€Œβ€Œβ€β€Œβ€Œβ€‹ο»Ώβ€‹β€Œβ€‹ο»Ώβ€β€Œβ€Œβ€β€‹ο»Ώβ€Œβ€β€Œβ€Œβ€‹ο»Ώβ€‹β€Œβ€Œβ€β€‹ο»Ώβ€‹ο»Ώβ€Œβ€β€Œβ€β€‹β€β€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹β€β€‹ο»Ώβ€‹β€β€‹β€β€Œβ€Œβ€‹ο»Ώβ€Œβ€Œβ€Œβ€‹β€Œβ€‹β€‹β€ο»Ώβ€β€Œβ€β€‹ο»Ώβ€Œβ€β€β€‹β€Œβ€β€β€Œβ€Œβ€ο»Ώβ€‹β€Œβ€β€Œβ€‹β€Œο»Ώβ€‹β€β€Œβ€β€Œβ€Œβ€Œβ€ο»Ώβ€β€‹β€β€Œβ€Œβ€‹ο»Ώβ€Œβ€Œβ€Œβ€‹β€‹β€β€Œβ€Œο»Ώο»Ώβ€Œβ€β€ο»Ώβ€Œβ€β€Œβ€Œβ€Œο»Ώβ€β€Œβ€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹ο»Ώβ€Œβ€‹β€Œβ€‹β€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹ο»Ώβ€Œβ€‹β€Œβ€‹β€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹β€β€‹ο»Ώβ€‹β€β€‹ο»Ώβ€Œο»Ώβ€‹ο»Ώβ€Œβ€‹β€‹ο»Ώβ€‹β€Œβ€‹ο»Ώβ€β€‹β€‹ο»Ώβ€Œο»Ώβ€Œβ€β€Œβ€β€‹ο»Ώβ€‹β€β€Œβ€β€‹ο»Ώβ€‹ο»Ώβ€Œβ€Œβ€Œβ€β€‹ο»Ώβ€‹ο»Ώβ€Œο»Ώβ€‹ο»Ώβ€‹β€Œβ€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹β€β€‹ο»Ώβ€‹β€β€‹β€β€Œβ€Œβ€‹ο»Ώβ€Œβ€Œβ€Œβ€‹β€Œβ€‹β€‹β€ο»Ώβ€β€Œο»Ώβ€Œβ€‹β€Œβ€β€Œβ€Œβ€Œο»Ώβ€β€‹β€Œο»Ώβ€Œβ€‹β€‹ο»Ώο»Ώο»Ώβ€Œβ€β€‹β€β€Œβ€β€‹β€Œβ€Œο»Ώβ€‹ο»Ώβ€Œβ€β€Œβ€Œβ€Œβ€Œβ€Œβ€Œβ€Œο»Ώβ€‹β€β€Œβ€ο»Ώβ€‹β€‹ο»Ώο»Ώβ€Œβ€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹β€β€Œβ€‹β€Œβ€β€Œο»Ώβ€‹β€‹β€Œο»Ώβ€‹β€β€Œβ€β€Œβ€Œβ€Œο»Ώβ€‹ο»Ώβ€Œβ€β€Œβ€Œβ€Œβ€ο»Ώβ€β€Œο»Ώβ€Œβ€‹β€Œβ€β€‹β€Œβ€Œο»Ώβ€Œβ€‹β€Œβ€β€β€Œβ€Œβ€ο»Ώο»Ώβ€Œβ€ο»Ώβ€β€‹β€β€Œβ€β€Œβ€β€β€Œβ€Œβ€β€Œβ€‹β€‹ο»Ώο»Ώβ€Œβ€‹ο»Ώβ€Œο»Ώβ€‹ο»Ώβ€‹β€Œβ€‹ο»Ώβ€Œβ€β€Œβ€β€Œβ€Œβ€‹ο»Ώβ€‹β€β€Œβ€β€‹ο»Ώβ€‹ο»Ώβ€β€‹β€Œβ€β€‹β€Œβ€‹β€ο»Ώβ€Œβ€Œβ€β€‹β€Œβ€‹ο»Ώβ€‹β€Œβ€‹ο»Ώβ€Œβ€β€‹ο»Ώβ€β€‹β€‹β€ο»Ώβ€Œβ€‹ο»Ώβ€Œβ€‹β€‹ο»Ώβ€β€‹β€‹ο»Ώβ€Œβ€Œβ€‹ο»Ώβ€‹β€β€‹β€ο»Ώβ€Œβ€‹ο»Ώβ€β€‹β€‹ο»Ώβ€Œο»Ώβ€Œβ€β€Œβ€Œβ€‹ο»Ώβ€‹β€β€‹β€ο»Ώβ€Œβ€‹ο»Ώβ€‹β€‹β€Œβ€β€‹ο»Ώβ€‹ο»Ώβ€‹β€β€Œβ€β€‹β€β€‹ο»Ώβ€Œβ€‹β€Œβ€β€Œβ€‹β€‹ο»Ώβ€Œβ€‹β€‹ο»Ώβ€‹β€β€Œβ€β€‹ο»Ώβ€‹ο»Ώβ€β€Œβ€‹ο»Ώβ€Œβ€‹β€Œβ€β€‹β€β€‹β€β€Œβ€β€Œο»Ώβ€Œβ€‹β€Œο»Ώβ€β€Œβ€Œο»Ώβ€‹β€‹β€Œβ€β€Œβ€Œβ€‹ο»Ώο»Ώβ€Œβ€Œο»Ώβ€‹ο»Ώβ€Œβ€β€β€Œβ€Œβ€ο»Ώβ€Œβ€Œο»Ώβ€‹β€‹β€Œβ€ο»Ώβ€‹β€Œβ€β€Œβ€Œβ€Œβ€‹β€‹β€β€Œβ€ο»Ώβ€‹β€Œβ€ο»Ώο»Ώβ€Œβ€β€‹ο»Ώβ€Œβ€β€ο»Ώβ€‹β€β€Œβ€β€Œο»Ώβ€‹β€‹β€Œβ€β€‹β€Œβ€Œο»Ώβ€Œβ€‹β€Œβ€β€β€‹β€‹ο»Ώο»Ώβ€Œβ€Œβ€β€‹β€β€Œβ€ο»Ώο»Ώβ€Œβ€β€Œβ€‹β€Œο»Ώβ€β€Œβ€‹β€β€Œβ€Œβ€‹ο»Ώβ€Œβ€Œβ€Œβ€‹β€‹β€β€Œβ€Œο»Ώο»Ώβ€Œβ€β€ο»Ώβ€Œβ€β€Œβ€Œβ€Œο»Ώβ€β€Œβ€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹ο»Ώβ€Œβ€‹β€Œβ€‹β€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹ο»Ώβ€Œβ€‹β€Œβ€‹β€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹β€β€‹ο»Ώβ€‹β€β€‹ο»Ώβ€‹β€Œβ€‹ο»Ώβ€Œβ€β€‹ο»Ώβ€‹β€Œβ€Œβ€β€Œβ€Œβ€‹ο»Ώβ€‹β€Œβ€‹ο»Ώβ€β€Œβ€Œβ€β€‹ο»Ώβ€Œβ€β€Œβ€Œβ€‹ο»Ώβ€‹β€Œβ€Œβ€β€‹ο»Ώβ€‹ο»Ώβ€Œβ€β€Œβ€β€‹β€β€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹β€β€‹ο»Ώβ€‹β€β€‹β€β€Œβ€Œβ€‹ο»Ώβ€Œβ€Œβ€Œβ€‹β€Œβ€‹β€‹β€ο»Ώβ€β€Œβ€β€‹ο»Ώβ€Œβ€β€β€‹β€Œβ€β€β€Œβ€Œβ€ο»Ώβ€‹β€Œβ€β€Œβ€‹β€Œο»Ώβ€‹β€β€Œβ€β€Œβ€Œβ€Œβ€ο»Ώβ€β€‹β€β€Œβ€Œβ€‹ο»Ώβ€Œβ€Œβ€Œβ€‹β€‹β€β€Œβ€Œο»Ώο»Ώβ€Œβ€β€ο»Ώβ€Œβ€β€Œβ€Œβ€Œο»Ώβ€β€Œβ€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹ο»Ώβ€Œβ€‹β€Œβ€‹β€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹ο»Ώβ€Œβ€‹β€Œβ€‹β€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹β€β€‹ο»Ώβ€‹β€β€‹ο»Ώβ€Œο»Ώβ€‹ο»Ώβ€Œβ€‹β€‹ο»Ώβ€‹β€Œβ€‹ο»Ώβ€β€‹β€‹ο»Ώβ€Œο»Ώβ€Œβ€β€Œβ€β€‹ο»Ώβ€‹β€β€Œβ€β€‹ο»Ώβ€‹ο»Ώβ€Œβ€Œβ€Œβ€β€‹ο»Ώβ€‹ο»Ώβ€Œο»Ώβ€‹ο»Ώβ€‹β€Œβ€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹β€β€‹ο»Ώβ€‹β€β€‹β€β€Œβ€Œβ€‹ο»Ώβ€Œβ€Œβ€Œβ€‹β€Œβ€‹β€‹β€ο»Ώβ€β€Œο»Ώβ€Œβ€‹β€Œβ€β€Œβ€Œβ€Œο»Ώβ€β€‹β€Œο»Ώβ€Œβ€‹β€‹β€β€Œβ€β€Œβ€β€β€Œβ€Œο»Ώβ€‹ο»Ώβ€Œβ€‹β€Œβ€‹β€Œο»Ώβ€‹β€β€Œβ€β€‹β€Œβ€Œβ€β€Œβ€β€Œο»Ώβ€Œβ€‹β€‹ο»Ώο»Ώβ€Œβ€‹β€β€‹β€β€Œο»Ώο»Ώβ€Œlinkβ€‹β€‹β€‹β€‹β€Œο»Ώβ€ο»Ώβ€‹β€β€‹β€β€Œβ€ο»Ώο»Ώβ€Œο»Ώβ€‹β€β€Œβ€β€β€Œβ€Œβ€β€Œο»Ώβ€Œβ€β€β€Œβ€Œβ€ο»Ώβ€β€‹β€β€‹β€β€‹ο»Ώβ€β€β€‹β€β€‹β€β€Œο»Ώβ€‹ο»Ώβ€Œβ€β€‹β€Œβ€Œβ€ο»Ώβ€β€Œβ€β€β€Œβ€Œο»Ώβ€Œβ€‹β€Œο»Ώβ€β€Œβ€‹β€ο»Ώβ€β€Œβ€β€β€Œβ€Œβ€ο»Ώο»Ώβ€‹β€β€‹β€β€‹β€ο»Ώβ€‹β€‹β€β€‹β€β€Œβ€β€β€‹β€Œο»Ώβ€‹β€β€Œβ€β€Œβ€Œβ€Œβ€β€Œβ€β€‹β€β€‹β€β€‹ο»Ώβ€β€β€‹β€β€‹β€β€‹β€ο»Ώο»Ώβ€Œο»Ώβ€‹β€‹β€Œο»Ώβ€‹β€β€Œβ€β€Œβ€Œβ€Œο»Ώβ€‹ο»Ώβ€Œβ€β€Œβ€Œβ€Œβ€ο»Ώβ€β€Œο»Ώβ€Œβ€‹β€Œβ€β€‹β€Œβ€Œο»Ώβ€Œβ€‹β€Œβ€β€β€Œβ€Œβ€ο»Ώο»Ώβ€Œβ€ο»Ώβ€β€‹β€ο»Ώο»Ώβ€Œβ€β€β€Œβ€Œβ€ο»Ώβ€β€Œο»Ώβ€Œβ€‹β€Œβ€β€Œβ€Œβ€Œβ€ο»Ώβ€β€Œο»Ώβ€Œβ€‹β€‹β€ο»Ώο»Ώβ€Œβ€β€Œβ€Œβ€Œβ€β€Œβ€‹β€Œβ€β€β€Œβ€Œο»Ώβ€Œβ€‹β€‹β€ο»Ώο»Ώβ€Œβ€ο»Ώβ€Œβ€Œβ€ο»Ώο»Ώβ€Œβ€β€Œβ€‹β€Œβ€β€Œβ€Œβ€‹ο»Ώο»Ώβ€Œβ€Œο»Ώβ€‹β€‹β€Œο»Ώβ€‹β€β€Œβ€β€Œβ€Œβ€Œο»Ώβ€‹ο»Ώβ€Œβ€β€Œβ€Œβ€Œβ€ο»Ώβ€β€Œο»Ώβ€Œβ€‹β€Œβ€β€‹β€Œβ€Œο»Ώβ€Œβ€‹β€Œβ€β€β€Œβ€Œβ€ο»Ώο»Ώβ€Œβ€ο»Ώβ€β€‹ο»Ώβ€ο»Ώβ€Œβ€β€β€Œβ€Œβ€β€Œβ€‹β€‹ο»Ώο»Ώβ€Œβ€‹ο»Ώβ€Œο»Ώβ€‹ο»Ώβ€‹β€Œβ€‹ο»Ώβ€Œβ€β€Œβ€β€Œβ€Œβ€‹ο»Ώβ€‹β€β€Œβ€β€‹ο»Ώβ€‹ο»Ώβ€β€‹β€Œβ€β€‹β€Œβ€‹β€ο»Ώβ€Œβ€Œβ€β€‹β€Œβ€‹ο»Ώβ€‹β€Œβ€‹ο»Ώβ€Œβ€β€‹ο»Ώβ€β€‹β€‹β€ο»Ώβ€Œβ€‹ο»Ώβ€Œβ€‹β€‹ο»Ώβ€β€‹β€‹ο»Ώβ€Œβ€Œβ€‹ο»Ώβ€‹β€β€‹β€ο»Ώβ€Œβ€‹ο»Ώβ€β€‹β€‹ο»Ώβ€Œο»Ώβ€Œβ€β€Œβ€Œβ€‹ο»Ώβ€‹β€β€‹β€ο»Ώβ€Œβ€‹ο»Ώβ€‹β€‹β€Œβ€β€‹ο»Ώβ€‹ο»Ώβ€‹β€β€Œβ€β€‹β€β€‹ο»Ώβ€Œβ€‹β€Œβ€β€Œβ€‹β€‹ο»Ώβ€Œβ€‹β€‹ο»Ώβ€‹β€β€Œβ€β€‹ο»Ώβ€‹ο»Ώβ€β€Œβ€‹ο»Ώβ€Œβ€‹β€Œβ€β€‹β€β€‹ο»Ώβ€ο»Ώβ€Œο»Ώβ€Œβ€‹β€Œο»Ώβ€β€Œβ€Œο»Ώβ€‹β€‹β€Œβ€β€Œβ€Œβ€‹ο»Ώο»Ώβ€Œβ€Œο»Ώβ€‹ο»Ώβ€Œβ€β€β€Œβ€Œβ€ο»Ώβ€Œβ€Œο»Ώβ€‹β€‹β€Œβ€ο»Ώβ€‹β€Œβ€β€Œβ€Œβ€Œβ€‹β€‹β€β€Œβ€ο»Ώβ€‹β€Œβ€ο»Ώο»Ώβ€Œβ€β€‹ο»Ώβ€Œβ€β€ο»Ώβ€‹ο»Ώβ€ο»Ώβ€Œο»Ώβ€‹β€‹β€Œβ€β€‹β€Œβ€Œο»Ώβ€Œβ€‹β€Œβ€β€β€‹β€‹ο»Ώο»Ώβ€Œβ€Œβ€β€‹β€β€Œβ€ο»Ώο»Ώβ€Œβ€β€Œβ€‹β€Œο»Ώβ€β€Œβ€‹β€β€Œβ€Œβ€‹ο»Ώβ€Œβ€Œβ€Œβ€‹β€‹β€β€Œβ€Œο»Ώο»Ώβ€Œβ€β€ο»Ώβ€Œβ€β€Œβ€Œβ€Œο»Ώβ€β€Œβ€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹ο»Ώβ€Œβ€‹β€Œβ€‹β€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹ο»Ώβ€Œβ€‹β€Œβ€‹β€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹β€β€‹ο»Ώβ€‹β€β€‹ο»Ώβ€‹β€Œβ€‹ο»Ώβ€Œβ€β€‹ο»Ώβ€‹β€Œβ€Œβ€β€Œβ€Œβ€‹ο»Ώβ€‹β€Œβ€‹ο»Ώβ€β€Œβ€Œβ€β€‹ο»Ώβ€Œβ€β€Œβ€Œβ€‹ο»Ώβ€‹β€Œβ€Œβ€β€‹ο»Ώβ€‹ο»Ώβ€Œβ€β€Œβ€β€‹β€β€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹β€β€‹ο»Ώβ€‹β€β€‹β€β€Œβ€Œβ€‹ο»Ώβ€Œβ€Œβ€Œβ€‹β€Œβ€‹β€‹β€ο»Ώβ€β€Œβ€β€‹ο»Ώβ€Œβ€β€β€‹β€Œβ€β€β€Œβ€Œβ€ο»Ώβ€‹β€Œβ€β€Œβ€‹β€Œο»Ώβ€‹β€β€Œβ€β€Œβ€Œβ€Œβ€ο»Ώβ€β€‹β€β€Œβ€Œβ€‹ο»Ώβ€Œβ€Œβ€Œβ€‹β€‹β€β€Œβ€Œο»Ώο»Ώβ€Œβ€β€ο»Ώβ€Œβ€β€Œβ€Œβ€Œο»Ώβ€β€Œβ€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹ο»Ώβ€Œβ€‹β€Œβ€‹β€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹ο»Ώβ€Œβ€‹β€Œβ€‹β€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹β€β€‹ο»Ώβ€‹β€β€‹ο»Ώβ€‹ο»Ώβ€‹ο»Ώβ€‹β€Œβ€Œβ€β€‹β€Œβ€‹ο»Ώβ€β€Œβ€‹ο»Ώβ€β€Œβ€‹ο»Ώβ€‹β€Œβ€‹ο»Ώβ€‹β€β€‹ο»Ώβ€β€Œβ€‹ο»Ώβ€Œβ€Œβ€‹ο»Ώβ€‹β€β€‹ο»Ώβ€‹β€Œβ€Œβ€β€‹β€β€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹β€β€‹ο»Ώβ€‹β€β€‹β€β€Œβ€Œβ€‹ο»Ώβ€Œβ€Œβ€Œβ€‹β€Œβ€‹β€‹β€ο»Ώβ€β€Œο»Ώβ€Œβ€‹β€Œβ€β€Œβ€Œβ€Œο»Ώβ€β€‹β€Œο»Ώβ€Œβ€‹β€‹ο»Ώο»Ώο»Ώβ€Œβ€β€‹β€β€Œβ€β€‹β€Œβ€Œο»Ώβ€‹ο»Ώβ€Œβ€β€Œβ€Œβ€Œβ€Œβ€Œβ€Œβ€Œο»Ώβ€‹β€β€Œβ€ο»Ώβ€‹β€‹ο»Ώο»Ώβ€Œβ€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹β€β€Œβ€‹β€Œβ€β€Œο»Ώβ€‹β€‹β€Œο»Ώβ€‹β€β€Œβ€β€Œβ€Œβ€Œο»Ώβ€‹ο»Ώβ€Œβ€β€Œβ€Œβ€Œβ€ο»Ώβ€β€Œο»Ώβ€Œβ€‹β€Œβ€β€‹β€Œβ€Œο»Ώβ€Œβ€‹β€Œβ€β€β€Œβ€Œβ€ο»Ώο»Ώβ€Œβ€ο»Ώβ€β€‹β€β€Œβ€β€Œβ€β€β€Œβ€Œβ€β€Œβ€‹β€‹ο»Ώο»Ώβ€Œβ€‹ο»Ώβ€Œο»Ώβ€‹ο»Ώβ€‹β€Œβ€‹ο»Ώβ€Œβ€β€Œβ€β€Œβ€Œβ€‹ο»Ώβ€‹β€β€Œβ€β€‹ο»Ώβ€‹ο»Ώβ€β€‹β€Œβ€β€‹β€Œβ€‹β€ο»Ώβ€Œβ€Œβ€β€‹β€Œβ€‹ο»Ώβ€‹β€Œβ€‹ο»Ώβ€Œβ€β€‹ο»Ώβ€β€‹β€‹β€ο»Ώβ€Œβ€‹ο»Ώβ€Œβ€‹β€‹ο»Ώβ€β€‹β€‹ο»Ώβ€Œβ€Œβ€‹ο»Ώβ€‹β€β€‹β€ο»Ώβ€Œβ€‹ο»Ώβ€β€‹β€‹ο»Ώβ€Œο»Ώβ€Œβ€β€Œβ€Œβ€‹ο»Ώβ€‹β€β€‹β€ο»Ώβ€Œβ€‹ο»Ώβ€‹β€‹β€Œβ€β€‹ο»Ώβ€‹ο»Ώβ€‹β€β€Œβ€β€‹β€β€‹ο»Ώβ€Œβ€‹β€Œβ€β€Œβ€‹β€‹ο»Ώβ€Œβ€‹β€‹ο»Ώβ€‹β€β€Œβ€β€‹ο»Ώβ€‹ο»Ώβ€β€Œβ€‹ο»Ώβ€Œβ€‹β€Œβ€β€‹β€β€‹β€β€Œβ€β€Œο»Ώβ€Œβ€‹β€Œο»Ώβ€β€Œβ€Œο»Ώβ€‹β€‹β€Œβ€β€Œβ€Œβ€‹ο»Ώο»Ώβ€Œβ€Œο»Ώβ€‹ο»Ώβ€Œβ€β€β€Œβ€Œβ€ο»Ώβ€Œβ€Œο»Ώβ€‹β€‹β€Œβ€ο»Ώβ€‹β€Œβ€β€Œβ€Œβ€Œβ€‹β€‹β€β€Œβ€ο»Ώβ€‹β€Œβ€ο»Ώο»Ώβ€Œβ€β€‹ο»Ώβ€Œβ€β€ο»Ώβ€‹β€β€Œβ€β€Œο»Ώβ€‹β€‹β€Œβ€β€‹β€Œβ€Œο»Ώβ€Œβ€‹β€Œβ€β€β€‹β€‹ο»Ώο»Ώβ€Œβ€Œβ€β€‹β€β€Œβ€ο»Ώο»Ώβ€Œβ€β€Œβ€‹β€Œο»Ώβ€β€Œβ€‹β€β€Œβ€Œβ€‹ο»Ώβ€Œβ€Œβ€Œβ€‹β€‹β€β€Œβ€Œο»Ώο»Ώβ€Œβ€β€ο»Ώβ€Œβ€β€Œβ€Œβ€Œο»Ώβ€β€Œβ€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹ο»Ώβ€Œβ€‹β€Œβ€‹β€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹ο»Ώβ€Œβ€‹β€Œβ€‹β€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹β€β€‹ο»Ώβ€‹β€β€‹ο»Ώβ€‹β€Œβ€‹ο»Ώβ€Œβ€β€‹ο»Ώβ€‹β€Œβ€Œβ€β€Œβ€Œβ€‹ο»Ώβ€‹β€Œβ€‹ο»Ώβ€β€Œβ€Œβ€β€‹ο»Ώβ€Œβ€β€Œβ€Œβ€‹ο»Ώβ€‹β€Œβ€Œβ€β€‹ο»Ώβ€‹ο»Ώβ€Œβ€β€Œβ€β€‹β€β€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹β€β€‹ο»Ώβ€‹β€β€‹β€β€Œβ€Œβ€‹ο»Ώβ€Œβ€Œβ€Œβ€‹β€Œβ€‹β€‹β€ο»Ώβ€β€Œβ€β€‹ο»Ώβ€Œβ€β€β€‹β€Œβ€β€β€Œβ€Œβ€ο»Ώβ€‹β€Œβ€β€Œβ€‹β€Œο»Ώβ€‹β€β€Œβ€β€Œβ€Œβ€Œβ€ο»Ώβ€β€‹β€β€Œβ€Œβ€‹ο»Ώβ€Œβ€Œβ€Œβ€‹β€‹β€β€Œβ€Œο»Ώο»Ώβ€Œβ€β€ο»Ώβ€Œβ€β€Œβ€Œβ€Œο»Ώβ€β€Œβ€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹ο»Ώβ€Œβ€‹β€Œβ€‹β€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹ο»Ώβ€Œβ€‹β€Œβ€‹β€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹β€β€‹ο»Ώβ€‹β€β€‹ο»Ώβ€‹ο»Ώβ€‹ο»Ώβ€‹β€Œβ€Œβ€β€‹β€Œβ€‹ο»Ώβ€β€Œβ€‹ο»Ώβ€β€Œβ€‹ο»Ώβ€‹β€Œβ€‹ο»Ώβ€‹β€β€‹ο»Ώβ€β€Œβ€‹ο»Ώβ€Œβ€Œβ€‹ο»Ώβ€‹β€β€‹ο»Ώβ€‹β€Œβ€Œβ€β€‹β€β€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹β€β€‹ο»Ώβ€‹β€β€‹β€β€Œβ€Œβ€‹ο»Ώβ€Œβ€Œβ€Œβ€‹β€Œβ€‹β€‹β€ο»Ώβ€β€Œο»Ώβ€Œβ€‹β€Œβ€β€Œβ€Œβ€Œο»Ώβ€β€‹β€Œο»Ώβ€Œβ€‹β€‹β€β€Œβ€β€Œβ€β€β€Œβ€Œο»Ώβ€‹ο»Ώβ€Œβ€‹β€Œβ€‹β€Œο»Ώβ€‹β€β€Œβ€β€‹β€Œβ€Œβ€β€Œβ€β€Œο»Ώβ€Œβ€‹β€‹ο»Ώο»Ώβ€Œβ€‹β€β€‹β€β€Œο»Ώο»Ώβ€Œ, .β€‹β€‹β€‹β€‹β€Œο»Ώβ€ο»Ώβ€‹β€β€‹β€β€Œβ€ο»Ώο»Ώβ€Œο»Ώβ€‹β€β€Œβ€β€β€Œβ€Œβ€β€Œο»Ώβ€Œβ€β€β€Œβ€Œβ€ο»Ώβ€β€‹β€β€‹β€β€‹ο»Ώβ€β€β€‹β€β€‹β€β€Œο»Ώβ€‹ο»Ώβ€Œβ€β€‹β€Œβ€Œβ€ο»Ώβ€β€Œβ€β€β€Œβ€Œο»Ώβ€Œβ€‹β€Œο»Ώβ€β€Œβ€‹β€ο»Ώβ€β€Œβ€β€β€Œβ€Œβ€ο»Ώο»Ώβ€‹β€β€‹β€β€‹β€ο»Ώβ€‹β€‹β€β€‹β€β€Œβ€β€β€‹β€Œο»Ώβ€‹β€β€Œβ€β€Œβ€Œβ€Œβ€β€Œβ€β€‹β€β€‹β€β€‹ο»Ώβ€β€β€‹β€β€‹β€β€‹β€ο»Ώο»Ώβ€Œο»Ώβ€‹β€‹β€Œο»Ώβ€‹β€β€Œβ€β€Œβ€Œβ€Œο»Ώβ€‹ο»Ώβ€Œβ€β€Œβ€Œβ€Œβ€ο»Ώβ€β€Œο»Ώβ€Œβ€‹β€Œβ€β€‹β€Œβ€Œο»Ώβ€Œβ€‹β€Œβ€β€β€Œβ€Œβ€ο»Ώο»Ώβ€Œβ€ο»Ώβ€β€‹β€ο»Ώο»Ώβ€Œβ€β€β€Œβ€Œβ€ο»Ώβ€β€Œο»Ώβ€Œβ€‹β€Œβ€β€Œβ€Œβ€Œβ€ο»Ώβ€β€Œο»Ώβ€Œβ€‹β€‹β€ο»Ώο»Ώβ€Œβ€β€Œβ€Œβ€Œβ€β€Œβ€‹β€Œβ€β€β€Œβ€Œο»Ώβ€Œβ€‹β€‹β€ο»Ώο»Ώβ€Œβ€ο»Ώβ€Œβ€Œβ€ο»Ώο»Ώβ€Œβ€β€Œβ€‹β€Œβ€β€Œβ€Œβ€‹ο»Ώο»Ώβ€Œβ€Œο»Ώβ€‹β€‹β€Œο»Ώβ€‹β€β€Œβ€β€Œβ€Œβ€Œο»Ώβ€‹ο»Ώβ€Œβ€β€Œβ€Œβ€Œβ€ο»Ώβ€β€Œο»Ώβ€Œβ€‹β€Œβ€β€‹β€Œβ€Œο»Ώβ€Œβ€‹β€Œβ€β€β€Œβ€Œβ€ο»Ώο»Ώβ€Œβ€ο»Ώβ€β€‹ο»Ώβ€ο»Ώβ€Œβ€β€β€Œβ€Œβ€β€Œβ€‹β€‹ο»Ώο»Ώβ€Œβ€‹ο»Ώβ€Œο»Ώβ€‹ο»Ώβ€‹β€Œβ€‹ο»Ώβ€Œβ€β€Œβ€β€Œβ€Œβ€‹ο»Ώβ€‹β€β€Œβ€β€‹ο»Ώβ€‹ο»Ώβ€β€‹β€Œβ€β€‹β€Œβ€‹β€ο»Ώβ€Œβ€Œβ€β€‹β€Œβ€‹ο»Ώβ€‹β€Œβ€‹ο»Ώβ€Œβ€β€‹ο»Ώβ€β€‹β€‹β€ο»Ώβ€Œβ€‹ο»Ώβ€Œβ€‹β€‹ο»Ώβ€β€‹β€‹ο»Ώβ€Œβ€Œβ€‹ο»Ώβ€‹β€β€‹β€ο»Ώβ€Œβ€‹ο»Ώβ€β€‹β€‹ο»Ώβ€Œο»Ώβ€Œβ€β€Œβ€Œβ€‹ο»Ώβ€‹β€β€‹β€ο»Ώβ€Œβ€‹ο»Ώβ€‹β€‹β€Œβ€β€‹ο»Ώβ€‹ο»Ώβ€‹β€β€Œβ€β€‹β€β€‹ο»Ώβ€Œβ€‹β€Œβ€β€Œβ€‹β€‹ο»Ώβ€Œβ€‹β€‹ο»Ώβ€‹β€β€Œβ€β€‹ο»Ώβ€‹ο»Ώβ€β€Œβ€‹ο»Ώβ€Œβ€‹β€Œβ€β€‹β€β€‹ο»Ώβ€ο»Ώβ€Œο»Ώβ€Œβ€‹β€Œο»Ώβ€β€Œβ€Œο»Ώβ€‹β€‹β€Œβ€β€Œβ€Œβ€‹ο»Ώο»Ώβ€Œβ€Œο»Ώβ€‹ο»Ώβ€Œβ€β€β€Œβ€Œβ€ο»Ώβ€Œβ€Œο»Ώβ€‹β€‹β€Œβ€ο»Ώβ€‹β€Œβ€β€Œβ€Œβ€Œβ€‹β€‹β€β€Œβ€ο»Ώβ€‹β€Œβ€ο»Ώο»Ώβ€Œβ€β€‹ο»Ώβ€Œβ€β€ο»Ώβ€‹ο»Ώβ€ο»Ώβ€Œο»Ώβ€‹β€‹β€Œβ€β€‹β€Œβ€Œο»Ώβ€Œβ€‹β€Œβ€β€β€‹β€‹ο»Ώο»Ώβ€Œβ€Œβ€β€‹β€β€Œβ€ο»Ώο»Ώβ€Œβ€β€Œβ€‹β€Œο»Ώβ€β€Œβ€‹β€β€Œβ€Œβ€‹ο»Ώβ€Œβ€Œβ€Œβ€‹β€‹β€β€Œβ€Œο»Ώο»Ώβ€Œβ€β€ο»Ώβ€Œβ€β€Œβ€Œβ€Œο»Ώβ€β€Œβ€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹ο»Ώβ€Œβ€‹β€Œβ€‹β€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹ο»Ώβ€Œβ€‹β€Œβ€‹β€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹β€β€‹ο»Ώβ€‹β€β€‹ο»Ώβ€‹β€Œβ€‹ο»Ώβ€Œβ€β€‹ο»Ώβ€‹β€Œβ€Œβ€β€Œβ€Œβ€‹ο»Ώβ€‹β€Œβ€‹ο»Ώβ€β€Œβ€Œβ€β€‹ο»Ώβ€Œβ€β€Œβ€Œβ€‹ο»Ώβ€‹β€Œβ€Œβ€β€‹ο»Ώβ€‹ο»Ώβ€Œβ€β€Œβ€β€‹β€β€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹β€β€‹ο»Ώβ€‹β€β€‹β€β€Œβ€Œβ€‹ο»Ώβ€Œβ€Œβ€Œβ€‹β€Œβ€‹β€‹β€ο»Ώβ€β€Œβ€β€‹ο»Ώβ€Œβ€β€β€‹β€Œβ€β€β€Œβ€Œβ€ο»Ώβ€‹β€Œβ€β€Œβ€‹β€Œο»Ώβ€‹β€β€Œβ€β€Œβ€Œβ€Œβ€ο»Ώβ€β€‹β€β€Œβ€Œβ€‹ο»Ώβ€Œβ€Œβ€Œβ€‹β€‹β€β€Œβ€Œο»Ώο»Ώβ€Œβ€β€ο»Ώβ€Œβ€β€Œβ€Œβ€Œο»Ώβ€β€Œβ€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹ο»Ώβ€Œβ€‹β€Œβ€‹β€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹ο»Ώβ€Œβ€‹β€Œβ€‹β€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹β€β€‹ο»Ώβ€‹β€β€Œβ€β€Œβ€‹β€‹ο»Ώβ€‹β€β€Œβ€β€‹β€Œβ€‹ο»Ώβ€β€‹β€Œβ€β€Œβ€β€Œβ€β€Œβ€Œβ€‹ο»Ώβ€Œβ€β€Œβ€β€‹β€β€‹ο»Ώβ€‹β€Œβ€Œβ€β€‹β€β€Œβ€β€Œβ€Œβ€‹ο»Ώβ€Œο»Ώβ€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹β€β€‹ο»Ώβ€‹β€β€‹β€β€Œβ€Œβ€‹ο»Ώβ€Œβ€Œβ€Œβ€‹β€Œβ€‹β€‹β€ο»Ώβ€β€Œο»Ώβ€Œβ€‹β€Œβ€β€Œβ€Œβ€Œο»Ώβ€β€‹β€Œο»Ώβ€Œβ€‹β€‹ο»Ώο»Ώο»Ώβ€Œβ€β€‹β€β€Œβ€β€‹β€Œβ€Œο»Ώβ€‹ο»Ώβ€Œβ€β€Œβ€Œβ€Œβ€Œβ€Œβ€Œβ€Œο»Ώβ€‹β€β€Œβ€ο»Ώβ€‹β€‹ο»Ώο»Ώβ€Œβ€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹β€β€Œβ€‹β€Œβ€β€Œο»Ώβ€‹β€‹β€Œο»Ώβ€‹β€β€Œβ€β€Œβ€Œβ€Œο»Ώβ€‹ο»Ώβ€Œβ€β€Œβ€Œβ€Œβ€ο»Ώβ€β€Œο»Ώβ€Œβ€‹β€Œβ€β€‹β€Œβ€Œο»Ώβ€Œβ€‹β€Œβ€β€β€Œβ€Œβ€ο»Ώο»Ώβ€Œβ€ο»Ώβ€β€‹β€β€Œβ€β€Œβ€β€β€Œβ€Œβ€β€Œβ€‹β€‹ο»Ώο»Ώβ€Œβ€‹ο»Ώβ€Œο»Ώβ€‹ο»Ώβ€‹β€Œβ€‹ο»Ώβ€Œβ€β€Œβ€β€Œβ€Œβ€‹ο»Ώβ€‹β€β€Œβ€β€‹ο»Ώβ€‹ο»Ώβ€β€‹β€Œβ€β€‹β€Œβ€‹β€ο»Ώβ€Œβ€Œβ€β€‹β€Œβ€‹ο»Ώβ€‹β€Œβ€‹ο»Ώβ€Œβ€β€‹ο»Ώβ€β€‹β€‹β€ο»Ώβ€Œβ€‹ο»Ώβ€Œβ€‹β€‹ο»Ώβ€β€‹β€‹ο»Ώβ€Œβ€Œβ€‹ο»Ώβ€‹β€β€‹β€ο»Ώβ€Œβ€‹ο»Ώβ€β€‹β€‹ο»Ώβ€Œο»Ώβ€Œβ€β€Œβ€Œβ€‹ο»Ώβ€‹β€β€‹β€ο»Ώβ€Œβ€‹ο»Ώβ€‹β€‹β€Œβ€β€‹ο»Ώβ€‹ο»Ώβ€‹β€β€Œβ€β€‹β€β€‹ο»Ώβ€Œβ€‹β€Œβ€β€Œβ€‹β€‹ο»Ώβ€Œβ€‹β€‹ο»Ώβ€‹β€β€Œβ€β€‹ο»Ώβ€‹ο»Ώβ€β€Œβ€‹ο»Ώβ€Œβ€‹β€Œβ€β€‹β€β€‹β€β€Œβ€β€Œο»Ώβ€Œβ€‹β€Œο»Ώβ€β€Œβ€Œο»Ώβ€‹β€‹β€Œβ€β€Œβ€Œβ€‹ο»Ώο»Ώβ€Œβ€Œο»Ώβ€‹ο»Ώβ€Œβ€β€β€Œβ€Œβ€ο»Ώβ€Œβ€Œο»Ώβ€‹β€‹β€Œβ€ο»Ώβ€‹β€Œβ€β€Œβ€Œβ€Œβ€‹β€‹β€β€Œβ€ο»Ώβ€‹β€Œβ€ο»Ώο»Ώβ€Œβ€β€‹ο»Ώβ€Œβ€β€ο»Ώβ€‹β€β€Œβ€β€Œο»Ώβ€‹β€‹β€Œβ€β€‹β€Œβ€Œο»Ώβ€Œβ€‹β€Œβ€β€β€‹β€‹ο»Ώο»Ώβ€Œβ€Œβ€β€‹β€β€Œβ€ο»Ώο»Ώβ€Œβ€β€Œβ€‹β€Œο»Ώβ€β€Œβ€‹β€β€Œβ€Œβ€‹ο»Ώβ€Œβ€Œβ€Œβ€‹β€‹β€β€Œβ€Œο»Ώο»Ώβ€Œβ€β€ο»Ώβ€Œβ€β€Œβ€Œβ€Œο»Ώβ€β€Œβ€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹ο»Ώβ€Œβ€‹β€Œβ€‹β€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹ο»Ώβ€Œβ€‹β€Œβ€‹β€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹β€β€‹ο»Ώβ€‹β€β€‹ο»Ώβ€‹β€Œβ€‹ο»Ώβ€Œβ€β€‹ο»Ώβ€‹β€Œβ€Œβ€β€Œβ€Œβ€‹ο»Ώβ€‹β€Œβ€‹ο»Ώβ€β€Œβ€Œβ€β€‹ο»Ώβ€Œβ€β€Œβ€Œβ€‹ο»Ώβ€‹β€Œβ€Œβ€β€‹ο»Ώβ€‹ο»Ώβ€Œβ€β€Œβ€β€‹β€β€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹β€β€‹ο»Ώβ€‹β€β€‹β€β€Œβ€Œβ€‹ο»Ώβ€Œβ€Œβ€Œβ€‹β€Œβ€‹β€‹β€ο»Ώβ€β€Œβ€β€‹ο»Ώβ€Œβ€β€β€‹β€Œβ€β€β€Œβ€Œβ€ο»Ώβ€‹β€Œβ€β€Œβ€‹β€Œο»Ώβ€‹β€β€Œβ€β€Œβ€Œβ€Œβ€ο»Ώβ€β€‹β€β€Œβ€Œβ€‹ο»Ώβ€Œβ€Œβ€Œβ€‹β€‹β€β€Œβ€Œο»Ώο»Ώβ€Œβ€β€ο»Ώβ€Œβ€β€Œβ€Œβ€Œο»Ώβ€β€Œβ€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹ο»Ώβ€Œβ€‹β€Œβ€‹β€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹ο»Ώβ€Œβ€‹β€Œβ€‹β€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹β€β€‹ο»Ώβ€‹β€β€Œβ€β€Œβ€‹β€‹ο»Ώβ€‹β€β€Œβ€β€‹β€Œβ€‹ο»Ώβ€β€‹β€Œβ€β€Œβ€β€Œβ€β€Œβ€Œβ€‹ο»Ώβ€Œβ€β€Œβ€β€‹β€β€‹ο»Ώβ€‹β€Œβ€Œβ€β€‹β€β€Œβ€β€Œβ€Œβ€‹ο»Ώβ€Œο»Ώβ€‹β€β€Œβ€Œβ€‹ο»Ώβ€‹β€β€‹ο»Ώβ€‹β€β€‹β€β€Œβ€Œβ€‹ο»Ώβ€Œβ€Œβ€Œβ€‹β€Œβ€‹β€‹β€ο»Ώβ€β€Œο»Ώβ€Œβ€‹β€Œβ€β€Œβ€Œβ€Œο»Ώβ€β€‹β€Œο»Ώβ€Œβ€‹β€‹β€β€Œβ€β€Œβ€β€β€Œβ€Œο»Ώβ€‹ο»Ώβ€Œβ€‹β€Œβ€‹β€Œο»Ώβ€‹β€β€Œβ€β€‹β€Œβ€Œβ€β€Œβ€β€Œο»Ώβ€Œβ€‹β€‹ο»Ώο»Ώβ€Œβ€‹β€β€‹β€β€Œο»Ώο»Ώβ€Œ \ No newline at end of file diff --git a/packages/@sanity/block-tools/test/tests/HtmlDeserializer/stegaUnicodeCleaner/output.json b/packages/@sanity/block-tools/test/tests/HtmlDeserializer/stegaUnicodeCleaner/output.json new file mode 100644 index 00000000000..f80567c7a3c --- /dev/null +++ b/packages/@sanity/block-tools/test/tests/HtmlDeserializer/stegaUnicodeCleaner/output.json @@ -0,0 +1,29 @@ +[ + { + "_key": "randomKey1", + "_type": "block", + "children": [ + { + "_key": "randomKey10", + "_type": "span", + "marks": [], + "text": "This is a test of the Sanity Portable Text renderer. We will use a variety of content to test its capabilities. Here are some unicode characters: β˜ΊοΈπŸ‘πŸ½πŸŒπŸŒžπŸŒšπŸŒπŸŒ›πŸŒœπŸŒ™πŸ’«β­οΈπŸŒŸβœ¨βš‘οΈβ˜„οΈπŸ’₯πŸ”₯πŸŒͺπŸŒˆβ˜€οΈπŸŒ€β›…οΈπŸŒ₯β˜οΈπŸŒ¦πŸŒ§β›ˆπŸŒ©πŸŒ¨β„οΈβ˜ƒοΈβ›„οΈπŸŒ¬πŸ’¨πŸ’§πŸ’¦β˜”οΈβ˜‚οΈπŸŒŠπŸŒ«. Now let's try some markdown formatting: " + }, + {"_key": "randomKey11", "_type": "span", "marks": ["strong"], "text": "bold text"}, + {"_key": "randomKey12", "_type": "span", "marks": [], "text": ", "}, + {"_key": "randomKey13", "_type": "span", "marks": ["em"], "text": "italic text"}, + {"_key": "randomKey14", "_type": "span", "marks": [], "text": ", ~~strikethrough~~, "}, + {"_key": "randomKey15", "_type": "span", "marks": ["code"], "text": "code"}, + { + "_key": "randomKey16", + "_type": "span", + "marks": [], + "text": ", > blockquote, - list item, 1. numbered list item, " + }, + {"_key": "randomKey17", "_type": "span", "marks": ["randomKey0"], "text": "link"}, + {"_key": "randomKey18", "_type": "span", "marks": [], "text": ", ."} + ], + "markDefs": [{"_key": "randomKey0", "_type": "link", "href": "https://example.com/"}], + "style": "normal" + } +] diff --git a/packages/@sanity/block-tools/tsdoc.json b/packages/@sanity/block-tools/tsdoc.json new file mode 100644 index 00000000000..0700c7d44a6 --- /dev/null +++ b/packages/@sanity/block-tools/tsdoc.json @@ -0,0 +1,33 @@ +{ + "$schema": "https://developer.microsoft.com/json-schemas/tsdoc/v0/tsdoc.schema.json", + "tagDefinitions": [ + { + "tagName": "@hidden", + "syntaxKind": "block", + "allowMultiple": true + }, + { + "tagName": "@todo", + "syntaxKind": "block", + "allowMultiple": true + } + ], + "supportForTags": { + "@hidden": true, + "@beta": true, + "@internal": true, + "@public": true, + "@experimental": true, + "@see": true, + "@link": true, + "@example": true, + "@deprecated": true, + "@alpha": true, + "@param": true, + "@returns": true, + "@remarks": true, + "@throws": true, + "@defaultValue": true, + "@todo": true + } +} diff --git a/packages/sanity/playwright-ct/tests/formBuilder/inputs/PortableText/copyPaste/CopyPaste.spec.tsx b/packages/sanity/playwright-ct/tests/formBuilder/inputs/PortableText/copyPaste/CopyPaste.spec.tsx index 8005c440d04..52f48ef4096 100644 --- a/packages/sanity/playwright-ct/tests/formBuilder/inputs/PortableText/copyPaste/CopyPaste.spec.tsx +++ b/packages/sanity/playwright-ct/tests/formBuilder/inputs/PortableText/copyPaste/CopyPaste.spec.tsx @@ -4,7 +4,13 @@ import {type Path, type SanityDocument} from '@sanity/types' import {testHelpers} from '../../../../utils/testHelpers' import CopyPasteStory from './CopyPasteStory' -import {GDOCS_INPUT, NORMALIZED_INPUT_SNAPSHOT, REMOVED_INPUT_SNAPSHOT} from './input' +import { + CLEANED_UNICODE_INPUT_SNAPSHOT, + GDOCS_INPUT, + NORMALIZED_INPUT_SNAPSHOT, + REMOVED_INPUT_SNAPSHOT, + UNICODE_TEXT, +} from './input' export type UpdateFn = () => {focusPath: Path; document: SanityDocument} @@ -68,4 +74,31 @@ test.describe('Portable Text Input', () => { await expect(documentState?.bodyNormalized?.length || 0).toEqual(snapshotLength) }) }) + + test.describe('Should be able to paste text that has hidden unicode characters without bloating the PTE', () => { + test(`Removed unicode characters`, async ({mount, page}) => { + const {getFocusedPortableTextEditor, insertPortableTextCopyPaste, waitForDocumentState} = + testHelpers({page}) + + await mount() + + const $pte = await getFocusedPortableTextEditor('field-body') + + await insertPortableTextCopyPaste(UNICODE_TEXT, $pte) + + const documentState = await waitForDocumentState((documentStateValue) => { + return (documentStateValue?.body?.length || 0) > 0 + }) + + // strigify is needed in these cases in order to get the correct length for the content within the children + // prettier-ignore + const bodyLength = await JSON.stringify(documentState?.body).length || 0 + // prettier-ignore + const snapshotLength = JSON.stringify(CLEANED_UNICODE_INPUT_SNAPSHOT).length + + // Ideally we would compare the snapshot with the document, but the keys will be different each time + // We therefore compare the length of the body to the snapshot length here instead. + await expect(bodyLength).toEqual(snapshotLength) + }) + }) }) diff --git a/packages/sanity/playwright-ct/tests/formBuilder/inputs/PortableText/copyPaste/input.ts b/packages/sanity/playwright-ct/tests/formBuilder/inputs/PortableText/copyPaste/input.ts index f0e05b750bd..d3115c6b8b0 100644 --- a/packages/sanity/playwright-ct/tests/formBuilder/inputs/PortableText/copyPaste/input.ts +++ b/packages/sanity/playwright-ct/tests/formBuilder/inputs/PortableText/copyPaste/input.ts @@ -5,3 +5,37 @@ export const REMOVED_INPUT_SNAPSHOT = [{"_key":"3969e2c82eb1","children":[{"_typ // prettier-ignore export const NORMALIZED_INPUT_SNAPSHOT = [{"_key":"eb94216d4385","children":[{"_type":"span","marks":["strong"],"text":"Lorem:","_key":"7f128acd47540"}],"markDefs":[],"_type":"block","style":"normal"},{"_key":"2b5e803bd56b","children":[{"_type":"span","marks":[],"text":"Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem","_key":"20ffa9eb587e0"}],"markDefs":[],"_type":"block","style":"normal","listItem":"bullet","level":1},{"_key":"acce2694708f","children":[{"_type":"span","marks":[],"text":"Lorem","_key":"a6c22ce552c70"}],"markDefs":[],"_type":"block","style":"normal","listItem":"bullet","level":2},{"_key":"03138c25294e","children":[{"_type":"span","marks":[],"text":"Lorem Lorem Lorem","_key":"eb6ec819144b0"}],"markDefs":[],"_type":"block","style":"normal","listItem":"bullet","level":2},{"_key":"f1a20c22e350","children":[{"_type":"span","marks":[],"text":"Lorem","_key":"15ef552ee6990"}],"markDefs":[],"_type":"block","style":"normal","listItem":"bullet","level":1},{"_key":"ff1a792dbfcc","children":[{"_type":"span","marks":[],"text":"Lorem Lorem Lorem Lorem Lorem Lorem Lorem","_key":"6faefb0826700"}],"markDefs":[],"_type":"block","style":"normal","listItem":"bullet","level":2},{"_key":"398d07c3d2e6","children":[{"_type":"span","marks":[],"text":"Lorem Lorem Lorem Lorem Lorem Lorem","_key":"a2cf8264108c0"}],"markDefs":[],"_type":"block","style":"normal","listItem":"bullet","level":3},{"_key":"b6a5e6f8ea7a","children":[{"_type":"span","marks":[],"text":"Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem","_key":"4628d4ecf0f10"}],"markDefs":[],"_type":"block","style":"normal","listItem":"bullet","level":3},{"_key":"ae526101fa37","children":[{"_type":"span","marks":[],"text":"Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem","_key":"06c8d0fabc3f0"}],"markDefs":[],"_type":"block","style":"normal","listItem":"bullet","level":3},{"_key":"19e109a752d9","children":[{"_type":"span","marks":[],"text":"Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem","_key":"6975faa2e77b0"}],"markDefs":[],"_type":"block","style":"normal","listItem":"bullet","level":2},{"_key":"dce2f42518de","children":[{"_type":"span","marks":[],"text":"Lorem Lorem Lorem Lorem","_key":"4d47ffe6fb9f0"}],"markDefs":[],"_type":"block","style":"normal","listItem":"bullet","level":2},{"_key":"29767caef541","children":[{"_type":"span","_key":"599f76056f210","text":"","marks":[]}],"markDefs":[],"_type":"block","style":"normal"},{"_key":"4a882c52be74","children":[{"_type":"span","marks":[],"text":"Lorem Lorem","_key":"0349c4b686830"}],"markDefs":[],"_type":"block","style":"normal"},{"_key":"abf0878de6a2","children":[{"_type":"span","_key":"62360e6d16680","text":"","marks":[]}],"markDefs":[],"_type":"block","style":"normal"},{"_key":"6b75e3d86e1e","children":[{"_type":"span","marks":[],"text":"Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem","_key":"446acded2d9f0"}],"markDefs":[],"_type":"block","style":"normal"},{"_key":"22e7af6be6af","children":[{"_type":"span","_key":"a49d6bc0b5de0","text":"","marks":[]}],"markDefs":[],"_type":"block","style":"normal"},{"_key":"3fda6f49fac8","children":[{"_type":"span","marks":[],"text":"Lorem Lorem Lorem: Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem","_key":"1d2e2c233a740"}],"markDefs":[],"_type":"block","style":"normal"},{"_key":"3d9f88b40b26","children":[{"_type":"span","_key":"bdbea8c321540","text":"","marks":[]}],"markDefs":[],"_type":"block","style":"normal"},{"_key":"fb336e0185d3","children":[{"_type":"span","marks":["strong"],"text":"Lorem Lorem Lorem:","_key":"1a77329fbb740"},{"_type":"span","marks":[],"text":" Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem","_key":"1a77329fbb741"}],"markDefs":[],"_type":"block","style":"normal"},{"_key":"3bca74baf8f1","children":[{"_type":"span","marks":["strong"],"text":"Lorem Lorem:","_key":"71851fca814f0"}],"markDefs":[],"_type":"block","style":"normal"},{"_key":"3d23b27d41a2","children":[{"_type":"span","marks":["strong"],"text":"Lorem Lorem: ","_key":"1af4fc8d24730"},{"_type":"span","marks":[],"text":"12345","_key":"1af4fc8d24731"}],"markDefs":[],"_type":"block","style":"normal"},{"_key":"936a1c1e268d","children":[{"_type":"span","marks":["strong"],"text":"Lorem Lorem:","_key":"de3fa32338af0"},{"_type":"span","marks":[],"text":" Lorem Lorem Lorem Lorem","_key":"de3fa32338af1"}],"markDefs":[],"_type":"block","style":"normal"},{"_key":"c66c6aaafde0","children":[{"_type":"span","_key":"1532cae507f30","text":"","marks":[]}],"markDefs":[],"_type":"block","style":"normal"},{"_key":"aa1e314f2a33","children":[{"_type":"span","marks":[],"text":"Lets also test","_key":"cef021b37e2c0"}],"markDefs":[],"_type":"block","style":"normal"},{"_key":"5c4a727bc9ea","children":[{"_type":"span","marks":["strong"],"text":"Bold","_key":"bcc8068287c30"}],"markDefs":[],"_type":"block","style":"normal"},{"_key":"8b109e4fd945","children":[{"_type":"span","marks":["em"],"text":"Italic","_key":"8cbf739832280"}],"markDefs":[],"_type":"block","style":"normal"},{"_key":"5803884dae92","children":[{"_type":"span","marks":[],"text":"Underline","_key":"5564d5944f990"}],"markDefs":[],"_type":"block","style":"normal"},{"_key":"80e80e24de51","children":[{"_type":"span","_key":"04696cd376c30","text":"","marks":[]}],"markDefs":[],"_type":"block","style":"normal"},{"_key":"a8ae6af387b6","children":[{"_type":"span","marks":["strong"],"text":"Lorem Lorem Lorem","_key":"4af78b3865540"}],"markDefs":[],"_type":"block","style":"normal"},{"_key":"9278d7db985d","children":[{"_type":"span","marks":[],"text":"Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem","_key":"d53886c583d20"}],"markDefs":[],"_type":"block","style":"normal"},{"_key":"2e7073c47520","children":[{"_type":"span","_key":"bf23aebaaf9c0","text":"","marks":[]}],"markDefs":[],"_type":"block","style":"normal"},{"_key":"e3575e46f378","children":[{"_type":"span","marks":["strong"],"text":"Lorem","_key":"2d3f4fc6339a0"}],"markDefs":[],"_type":"block","style":"normal"},{"_key":"87ba5c4564f9","children":[{"_type":"span","marks":[],"text":"Lorem","_key":"8e0cdf9339f90"}],"markDefs":[],"_type":"block","style":"normal","listItem":"bullet","level":1},{"_key":"9a5dd5b70f06","children":[{"_type":"span","marks":[],"text":"Lorem Lorem","_key":"d4b16e8aa0600"}],"markDefs":[],"_type":"block","style":"normal","listItem":"bullet","level":1},{"_key":"8f3d8834b92e","children":[{"_type":"span","marks":[],"text":"Lorem Lorem","_key":"4dc06253ca6d0"}],"markDefs":[],"_type":"block","style":"normal","listItem":"bullet","level":1},{"_key":"5e094264e0b4","children":[{"_type":"span","_key":"62c8de180f790","text":"","marks":[]}],"markDefs":[],"_type":"block","style":"normal"},{"_key":"fb490aba3399","children":[{"_type":"span","marks":["strong"],"text":"Lorem","_key":"494abbf685e30"}],"markDefs":[],"_type":"block","style":"normal"},{"_key":"04348b0ddb03","children":[{"_type":"span","marks":[],"text":"Lorem","_key":"8caeaa027e1a0"}],"markDefs":[],"_type":"block","style":"normal","listItem":"bullet","level":1},{"_key":"60a040276660","children":[{"_type":"span","marks":[],"text":"Lorem","_key":"4ca7a93b74380"}],"markDefs":[],"_type":"block","style":"normal","listItem":"bullet","level":1},{"_key":"5e5fef93b5a0","children":[{"_type":"span","_key":"bfbaf9d129740","text":"","marks":[]}],"markDefs":[],"_type":"block","style":"normal"},{"_key":"8dadc0a4d697","children":[{"_type":"span","marks":["strong"],"text":"Lorem Lorem","_key":"056d7d6683fd0"}],"markDefs":[],"_type":"block","style":"normal"},{"_key":"fe8f622b2279","children":[{"_type":"span","marks":[],"text":"Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem","_key":"1ede7f1fb9580"}],"markDefs":[],"_type":"block","style":"normal","listItem":"bullet","level":1},{"_key":"e8257941ba35","children":[{"_type":"span","marks":[],"text":"Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem","_key":"147965363fba0"}],"markDefs":[],"_type":"block","style":"normal","listItem":"bullet","level":1},{"_key":"b4cbbb9e3ac4","children":[{"_type":"span","marks":[],"text":"Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem","_key":"df5348975d400"}],"markDefs":[],"_type":"block","style":"normal","listItem":"bullet","level":1},{"_key":"a24cc548d799","children":[{"_type":"span","_key":"d1019fa3790f0","text":"","marks":[]}],"markDefs":[],"_type":"block","style":"normal"},{"_key":"4728dea47030","children":[{"_type":"span","marks":["strong"],"text":"Lorem Lorem","_key":"165981daf0a10"}],"markDefs":[],"_type":"block","style":"normal"},{"_key":"88cf4645a390","children":[{"_type":"span","marks":["em"],"text":"Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem","_key":"e008b2e8771a0"}],"markDefs":[],"_type":"block","style":"normal"},{"_key":"c488316914b1","children":[{"_type":"span","marks":["em"],"text":"Lorem Lorem","_key":"a3bee9fd650a0"}],"markDefs":[],"_type":"block","style":"normal"},{"_key":"5c302ee586a1","children":[{"_type":"span","marks":["strong","em"],"text":"Lorem Lorem Lorem Lorem Lorem Lorem","_key":"fa717cc3c22e0"}],"markDefs":[],"_type":"block","style":"normal"},{"_key":"a1a4204010e2","children":[{"_type":"span","_key":"631eadccd6b00","text":"","marks":[]}],"markDefs":[],"_type":"block","style":"normal"},{"_key":"617c8df0722e","children":[{"_type":"span","marks":["strong"],"text":"Lorem Lorem Lorem Lorem:","_key":"5b612f4c13e90"},{"_type":"span","marks":[],"text":" 1234","_key":"5b612f4c13e91"}],"markDefs":[],"_type":"block","style":"normal"},{"_key":"a3ed4ef644c3","children":[{"_type":"span","_key":"e11f502f89720","text":"","marks":[]}],"markDefs":[],"_type":"block","style":"normal"},{"_key":"57e8a1ff1841","children":[{"_type":"span","marks":[],"text":"Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem","_key":"7f47a57abf330"}],"markDefs":[],"_type":"block","style":"normal"},{"_key":"8f8fb9da8a5d","children":[{"_type":"span","_key":"ccf9477511110","text":"","marks":[]}],"markDefs":[],"_type":"block","style":"normal"},{"_key":"0f4264677172","children":[{"_type":"span","marks":[],"text":"Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem","_key":"06785fecdb650"}],"markDefs":[],"_type":"block","style":"normal"},{"_key":"1736665e3dbe","children":[{"_type":"span","marks":[],"text":"Lorem Lorem Lorem Lorem Lorem","_key":"dae7cbeeec780"}],"markDefs":[],"_type":"block","style":"h2"},{"_key":"1030638cf761","children":[{"_type":"span","_key":"66ceac747db70","text":"","marks":[]}],"markDefs":[],"_type":"block","style":"normal"},{"_key":"f68bfc3b6a80","children":[{"_type":"span","marks":[],"text":"Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem","_key":"c61d6acdb8680"}],"markDefs":[],"_type":"block","style":"normal"},{"_key":"1268f374a1ff","children":[{"_type":"span","_key":"13d9e3a85ae70","text":"","marks":[]}],"markDefs":[],"_type":"block","style":"normal"},{"_key":"663c707450e3","children":[{"_type":"span","marks":[],"text":"Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem","_key":"846ea6ccd9ab0"}],"markDefs":[],"_type":"block","style":"normal"},{"_key":"55b717d0c9e7","children":[{"_type":"span","_key":"40ebdf334b1c0","text":"","marks":[]}],"markDefs":[],"_type":"block","style":"normal"},{"_key":"59a991ee8d07","children":[{"_type":"span","marks":[],"text":"Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem","_key":"2be75da91a400"}],"markDefs":[],"_type":"block","style":"normal"},{"_key":"038fb8e70f42","children":[{"_type":"span","marks":[],"text":"Lorem Lorem Lorem Lorem Lorem","_key":"595f83bb28ff0"}],"markDefs":[],"_type":"block","style":"h2"},{"_key":"b2ee226c8e11","children":[{"_type":"span","marks":[],"text":"Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem","_key":"42af3234b4ff0"}],"markDefs":[],"_type":"block","style":"normal"},{"_key":"56b022a06818","children":[{"_type":"span","_key":"ac04d36e1cbb0","text":"","marks":[]}],"markDefs":[],"_type":"block","style":"normal"},{"_key":"1049bddac176","children":[{"_type":"span","marks":[],"text":"Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem","_key":"d92f4b3575ba0"}],"markDefs":[],"_type":"block","style":"normal"},{"_key":"634ce0314bf3","children":[{"_type":"span","_key":"aea5782df7d40","text":"","marks":[]}],"markDefs":[],"_type":"block","style":"normal"},{"_key":"3ea308bd008c","children":[{"_type":"span","marks":[],"text":"Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem","_key":"a400d9fda6f70"}],"markDefs":[],"_type":"block","style":"normal"},{"_key":"83fb68587619","children":[{"_type":"span","_key":"969fd3a883830","text":"","marks":[]}],"markDefs":[],"_type":"block","style":"normal"},{"_key":"a02d4434f70a","children":[{"_type":"span","marks":[],"text":"Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem","_key":"f83c6d20f3910"}],"markDefs":[],"_type":"block","style":"normal"},{"_key":"9c5fea08a883","children":[{"_type":"span","_key":"d79d217b621c0","text":"","marks":[]}],"markDefs":[],"_type":"block","style":"normal"},{"_key":"66d70efe45cc","children":[{"_type":"span","marks":[],"text":"Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem","_key":"f6558e3f3ba30"}],"markDefs":[],"_type":"block","style":"h2"},{"_key":"14bc5dfb595e","children":[{"_type":"span","marks":[],"text":"Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem","_key":"74fce9db7d000"}],"markDefs":[],"_type":"block","style":"normal"},{"_key":"1e129edc8d6b","children":[{"_type":"span","_key":"1528b17a18d80","text":"","marks":[]}],"markDefs":[],"_type":"block","style":"normal"},{"_key":"e9e49bd40b1c","children":[{"_type":"span","marks":[],"text":"Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem","_key":"c5e310ce55430"}],"markDefs":[],"_type":"block","style":"normal"},{"_key":"7a87b7eebee3","children":[{"_type":"span","_key":"3819887dd6280","text":"","marks":[]}],"markDefs":[],"_type":"block","style":"normal"},{"_key":"c86f11b7ca4b","children":[{"_type":"span","marks":[],"text":"Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem","_key":"4274c33cfc610"}],"markDefs":[],"_type":"block","style":"normal"},{"_key":"af9ee6271705","children":[{"_type":"span","_key":"d6817760bca60","text":"","marks":[]}],"markDefs":[],"_type":"block","style":"normal"},{"_key":"77f05c21f24b","children":[{"_type":"span","marks":[],"text":"Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem","_key":"959aa7a566150"}],"markDefs":[],"_type":"block","style":"normal"},{"_key":"00aea715ac4f","children":[{"_type":"span","marks":[],"text":"Lorem Lorem Lorem Lorem","_key":"4011b4f0aec60"}],"markDefs":[],"_type":"block","style":"h2"},{"_key":"2d15bcf98f17","children":[{"_type":"span","_key":"2e2b688e49d70","text":"","marks":[]}],"markDefs":[],"_type":"block","style":"normal"},{"_key":"63f2005745bf","children":[{"_type":"span","marks":[],"text":"Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem","_key":"45e28bc281740"}],"markDefs":[],"_type":"block","style":"normal"},{"_key":"44d2a2c30f42","children":[{"_type":"span","_key":"471c9a8ebd810","text":"","marks":[]}],"markDefs":[],"_type":"block","style":"normal"},{"_key":"401018cc6ded","children":[{"_type":"span","marks":[],"text":"Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem","_key":"d7712b5d06c20"}],"markDefs":[],"_type":"block","style":"normal"},{"_key":"2706b48135ac","children":[{"_type":"span","_key":"ebccd25649170","text":"","marks":[]}],"markDefs":[],"_type":"block","style":"normal"},{"_key":"c339cafd00c8","children":[{"_type":"span","marks":[],"text":"Lorem Lorem","_key":"bb20ddf8a4c80"}],"markDefs":[],"_type":"block","style":"normal"},{"_key":"66933e57f06b","children":[{"_type":"span","_key":"0c6abe0bb91f0","text":"","marks":[]}],"markDefs":[],"_type":"block","style":"normal"},{"_key":"38db8b39f808","children":[{"_type":"span","marks":[],"text":"Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem ","_key":"85d9453907610"},{"_type":"span","marks":["d72f71e791b3"],"text":"Lorem Lorem","_key":"85d9453907611"},{"_type":"span","marks":[],"text":" Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem","_key":"85d9453907612"}],"markDefs":[{"_key":"d72f71e791b3","_type":"link","href":"https://sanity.io"}],"_type":"block","style":"normal"},{"_key":"8cae92a4973a","children":[{"_type":"span","marks":[],"text":"\n","_key":"f49c27c7cf510"}],"markDefs":[],"_type":"block","style":"normal"}] + +export const UNICODE_TEXT = `This is a test of the Sanity Portable Text renderer. We will use a variety of content to test its capabilities. Here are some unicode characters: β˜ΊοΈπŸ‘πŸ½πŸŒπŸŒžπŸŒšπŸŒπŸŒ›πŸŒœπŸŒ™πŸ’«β­οΈπŸŒŸβœ¨βš‘οΈβ˜„οΈπŸ’₯πŸ”₯πŸŒͺπŸŒˆβ˜€οΈπŸŒ€β›…οΈπŸŒ₯β˜οΈπŸŒ¦πŸŒ§β›ˆπŸŒ©πŸŒ¨β„οΈβ˜ƒοΈβ›„οΈπŸŒ¬πŸ’¨πŸ’§πŸ’¦β˜”οΈβ˜‚οΈπŸŒŠπŸŒ«. Now let's try some markdown formatting: β€‹β€‹β€‹β€‹β€Œ\u200d\ufeff\u200b\u200d\u200b\u200d\u200c\u200d\ufeff\ufeff\u200c\ufeff\u200b\u200d\u200c\u200d\u200d\u200c\u200c\u200d\u200c\ufeff\u200c\u200d\u200d\u200c\u200c\u200d\ufeff\u200d\u200b\u200d\u200b\u200d\u200b\ufeff\u200d\u200d\u200b\u200d\u200b\u200d\u200c\ufeff\u200b\ufeff\u200c\u200d\u200b\u200c\u200c\u200d\ufeff\u200d\u200c\u200d\u200d\u200c\u200c\ufeff\u200c\u200b\u200c\ufeff\u200d\u200c\u200b\u200d\ufeff\u200d\u200c\u200d\u200d\u200c\u200c\u200d\ufeff\ufeff\u200b\u200d\u200b\u200d\u200b\u200d\ufeff\u200b\u200b\u200d\u200b\u200d\u200c\u200d\u200d\u200b\u200c\ufeff\u200b\u200d\u200c\u200d\u200c\u200c\u200c\u200d\u200c\u200d\u200b\u200d\u200b\u200d\u200b\ufeff\u200d\u200d\u200b\u200d\u200b\u200d\u200b\u200d\ufeff\ufeff\u200c\ufeff\u200b\u200b\u200c\ufeff\u200b\u200d\u200c\u200d\u200c\u200c\u200c\ufeff\u200b\ufeff\u200c\u200d\u200c\u200c\u200c\u200d\ufeff\u200d\u200c\ufeff\u200c\u200b\u200c\u200d\u200b\u200c\u200c\ufeff\u200c\u200b\u200c\u200d\u200d\u200c\u200c\u200d\ufeff\ufeff\u200c\u200d\ufeff\u200d\u200b\u200d\ufeff\ufeff\u200c\u200d\u200d\u200c\u200c\u200d\ufeff\u200d\u200c\ufeff\u200c\u200b\u200c\u200d\u200c\u200c\u200c\u200d\ufeff\u200d\u200c\ufeff\u200c\u200b\u200b\u200d\ufeff\ufeff\u200c\u200d\u200c\u200c\u200c\u200d\u200c\u200b\u200c\u200d\u200d\u200c\u200c\ufeff\u200c\u200b\u200b\u200d\ufeff\ufeff\u200c\u200d\ufeff\u200c\u200c\u200d\ufeff\ufeff\u200c\u200d\u200c\u200b\u200c\u200d\u200c\u200c\u200b\ufeff\ufeff\u200c\u200c\ufeff\u200b\u200b\u200c\ufeff\u200b\u200d\u200c\u200d\u200c\u200c\u200c\ufeff\u200b\ufeff\u200c\u200d\u200c\u200c\u200c\u200d\ufeff\u200d\u200c\ufeff\u200c\u200b\u200c\u200d\u200b\u200c\u200c\ufeff\u200c\u200b\u200c\u200d\u200d\u200c\u200c\u200d\ufeff\ufeff\u200c\u200d\ufeff\u200d\u200b\ufeff\u200d\ufeff\u200c\u200d\u200d\u200c\u200c\u200d\u200c\u200b\u200b\ufeff\ufeff\u200c\u200b\ufeff\u200c\ufeff\u200b\ufeff\u200b\u200c\u200b\ufeff\u200c\u200d\u200c\u200d\u200c\u200c\u200b\ufeff\u200b\u200d\u200c\u200d\u200b\ufeff\u200b\ufeff\u200d\u200b\u200c\u200d\u200b\u200c\u200b\u200d\ufeff\u200c\u200c\u200d\u200b\u200c\u200b\ufeff\u200b\u200c\u200b\ufeff\u200c\u200d\u200b\ufeff\u200d\u200b\u200b\u200d\ufeff\u200c\u200b\ufeff\u200c\u200b\u200b\ufeff\u200d\u200b\u200b\ufeff\u200c\u200c\u200b\ufeff\u200b\u200d\u200b\u200d\ufeff\u200c\u200b\ufeff\u200d\u200b\u200b\ufeff\u200c\ufeff\u200c\u200d\u200c\u200c\u200b\ufeff\u200b\u200d\u200b\u200d\ufeff\u200c\u200b\ufeff\u200b\u200b\u200c\u200d\u200b\ufeff\u200b\ufeff\u200b\u200d\u200c\u200d\u200b\u200d\u200b\ufeff\u200c\u200b\u200c\u200d\u200c\u200b\u200b\ufeff\u200c\u200b\u200b\ufeff\u200b\u200d\u200c\u200d\u200b\ufeff\u200b\ufeff\u200d\u200c\u200b\ufeff\u200c\u200b\u200c\u200d\u200b\u200d\u200b\ufeff\u200d\ufeff\u200c\ufeff\u200c\u200b\u200c\ufeff\u200d\u200c\u200c\ufeff\u200b\u200b\u200c\u200d\u200c\u200c\u200b\ufeff\ufeff\u200c\u200c\ufeff\u200b\ufeff\u200c\u200d\u200d\u200c\u200c\u200d\ufeff\u200c\u200c\ufeff\u200b\u200b\u200c\u200d\ufeff\u200b\u200c\u200d\u200c\u200c\u200c\u200b\u200b\u200d\u200c\u200d\ufeff\u200b\u200c\u200d\ufeff\ufeff\u200c\u200d\u200b\ufeff\u200c\u200d\u200d\ufeff\u200b\ufeff\u200d\ufeff\u200c\ufeff\u200b\u200b\u200c\u200d\u200b\u200c\u200c\ufeff\u200c\u200b\u200c\u200d\u200d\u200b\u200b\ufeff\ufeff\u200c\u200c\u200d\u200b\u200d\u200c\u200d\ufeff\ufeff\u200c\u200d\u200c\u200b\u200c\ufeff\u200d\u200c\u200b\u200d\u200c\u200c\u200b\ufeff\u200c\u200c\u200c\u200b\u200b\u200d\u200c\u200c\ufeff\ufeff\u200c\u200d\u200d\ufeff\u200c\u200d\u200c\u200c\u200c\ufeff\u200d\u200c\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\ufeff\u200c\u200b\u200c\u200b\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\ufeff\u200c\u200b\u200c\u200b\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\u200d\u200b\ufeff\u200b\u200d\u200b\ufeff\u200b\u200c\u200b\ufeff\u200c\u200d\u200b\ufeff\u200b\u200c\u200c\u200d\u200c\u200c\u200b\ufeff\u200b\u200c\u200b\ufeff\u200d\u200c\u200c\u200d\u200b\ufeff\u200c\u200d\u200c\u200c\u200b\ufeff\u200b\u200c\u200c\u200d\u200b\ufeff\u200b\ufeff\u200c\u200d\u200c\u200d\u200b\u200d\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\u200d\u200b\ufeff\u200b\u200d\u200b\u200d\u200c\u200c\u200b\ufeff\u200c\u200c\u200c\u200b\u200c\u200b\u200b\u200d\ufeff\u200d\u200c\u200d\u200b\ufeff\u200c\u200d\u200d\u200b\u200c\u200d\u200d\u200c\u200c\u200d\ufeff\u200b\u200c\u200d\u200c\u200b\u200c\ufeff\u200b\u200d\u200c\u200d\u200c\u200c\u200c\u200d\ufeff\u200d\u200b\u200d\u200c\u200c\u200b\ufeff\u200c\u200c\u200c\u200b\u200b\u200d\u200c\u200c\ufeff\ufeff\u200c\u200d\u200d\ufeff\u200c\u200d\u200c\u200c\u200c\ufeff\u200d\u200c\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\ufeff\u200c\u200b\u200c\u200b\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\ufeff\u200c\u200b\u200c\u200b\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\u200d\u200b\ufeff\u200b\u200d\u200b\ufeff\u200d\u200c\u200b\ufeff\u200d\u200c\u200b\ufeff\u200c\u200b\u200c\u200d\u200c\u200d\u200b\ufeff\u200c\u200b\u200c\u200d\u200c\u200c\u200b\ufeff\u200b\u200d\u200b\ufeff\u200b\u200b\u200c\u200d\u200c\u200c\u200b\ufeff\u200c\u200b\u200b\ufeff\u200b\u200b\u200b\ufeff\u200b\u200c\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\u200d\u200b\ufeff\u200b\u200d\u200b\u200d\u200c\u200c\u200b\ufeff\u200c\u200c\u200c\u200b\u200c\u200b\u200b\u200d\ufeff\u200d\u200c\ufeff\u200c\u200b\u200c\u200d\u200c\u200c\u200c\ufeff\u200d\u200b\u200c\ufeff\u200c\u200b\u200b\ufeff\ufeff\ufeff\u200c\u200d\u200b\u200d\u200c\u200d\u200b\u200c\u200c\ufeff\u200b\ufeff\u200c\u200d\u200c\u200c\u200c\u200c\u200c\u200c\u200c\ufeff\u200b\u200d\u200c\u200d\ufeff\u200b\u200b\ufeff\ufeff\u200c\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\u200d\u200c\u200b\u200c\u200d\u200c\ufeff\u200b\u200b\u200c\ufeff\u200b\u200d\u200c\u200d\u200c\u200c\u200c\ufeff\u200b\ufeff\u200c\u200d\u200c\u200c\u200c\u200d\ufeff\u200d\u200c\ufeff\u200c\u200b\u200c\u200d\u200b\u200c\u200c\ufeff\u200c\u200b\u200c\u200d\u200d\u200c\u200c\u200d\ufeff\ufeff\u200c\u200d\ufeff\u200d\u200b\u200d\u200c\u200d\u200c\u200d\u200d\u200c\u200c\u200d\u200c\u200b\u200b\ufeff\ufeff\u200c\u200b\ufeff\u200c\ufeff\u200b\ufeff\u200b\u200c\u200b\ufeff\u200c\u200d\u200c\u200d\u200c\u200c\u200b\ufeff\u200b\u200d\u200c\u200d\u200b\ufeff\u200b\ufeff\u200d\u200b\u200c\u200d\u200b\u200c\u200b\u200d\ufeff\u200c\u200c\u200d\u200b\u200c\u200b\ufeff\u200b\u200c\u200b\ufeff\u200c\u200d\u200b\ufeff\u200d\u200b\u200b\u200d\ufeff\u200c\u200b\ufeff\u200c\u200b\u200b\ufeff\u200d\u200b\u200b\ufeff\u200c\u200c\u200b\ufeff\u200b\u200d\u200b\u200d\ufeff\u200c\u200b\ufeff\u200d\u200b\u200b\ufeff\u200c\ufeff\u200c\u200d\u200c\u200c\u200b\ufeff\u200b\u200d\u200b\u200d\ufeff\u200c\u200b\ufeff\u200b\u200b\u200c\u200d\u200b\ufeff\u200b\ufeff\u200b\u200d\u200c\u200d\u200b\u200d\u200b\ufeff\u200c\u200b\u200c\u200d\u200c\u200b\u200b\ufeff\u200c\u200b\u200b\ufeff\u200b\u200d\u200c\u200d\u200b\ufeff\u200b\ufeff\u200d\u200c\u200b\ufeff\u200c\u200b\u200c\u200d\u200b\u200d\u200b\u200d\u200c\u200d\u200c\ufeff\u200c\u200b\u200c\ufeff\u200d\u200c\u200c\ufeff\u200b\u200b\u200c\u200d\u200c\u200c\u200b\ufeff\ufeff\u200c\u200c\ufeff\u200b\ufeff\u200c\u200d\u200d\u200c\u200c\u200d\ufeff\u200c\u200c\ufeff\u200b\u200b\u200c\u200d\ufeff\u200b\u200c\u200d\u200c\u200c\u200c\u200b\u200b\u200d\u200c\u200d\ufeff\u200b\u200c\u200d\ufeff\ufeff\u200c\u200d\u200b\ufeff\u200c\u200d\u200d\ufeff\u200b\u200d\u200c\u200d\u200c\ufeff\u200b\u200b\u200c\u200d\u200b\u200c\u200c\ufeff\u200c\u200b\u200c\u200d\u200d\u200b\u200b\ufeff\ufeff\u200c\u200c\u200d\u200b\u200d\u200c\u200d\ufeff\ufeff\u200c\u200d\u200c\u200b\u200c\ufeff\u200d\u200c\u200b\u200d\u200c\u200c\u200b\ufeff\u200c\u200c\u200c\u200b\u200b\u200d\u200c\u200c\ufeff\ufeff\u200c\u200d\u200d\ufeff\u200c\u200d\u200c\u200c\u200c\ufeff\u200d\u200c\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\ufeff\u200c\u200b\u200c\u200b\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\ufeff\u200c\u200b\u200c\u200b\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\u200d\u200b\ufeff\u200b\u200d\u200b\ufeff\u200b\u200c\u200b\ufeff\u200c\u200d\u200b\ufeff\u200b\u200c\u200c\u200d\u200c\u200c\u200b\ufeff\u200b\u200c\u200b\ufeff\u200d\u200c\u200c\u200d\u200b\ufeff\u200c\u200d\u200c\u200c\u200b\ufeff\u200b\u200c\u200c\u200d\u200b\ufeff\u200b\ufeff\u200c\u200d\u200c\u200d\u200b\u200d\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\u200d\u200b\ufeff\u200b\u200d\u200b\u200d\u200c\u200c\u200b\ufeff\u200c\u200c\u200c\u200b\u200c\u200b\u200b\u200d\ufeff\u200d\u200c\u200d\u200b\ufeff\u200c\u200d\u200d\u200b\u200c\u200d\u200d\u200c\u200c\u200d\ufeff\u200b\u200c\u200d\u200c\u200b\u200c\ufeff\u200b\u200d\u200c\u200d\u200c\u200c\u200c\u200d\ufeff\u200d\u200b\u200d\u200c\u200c\u200b\ufeff\u200c\u200c\u200c\u200b\u200b\u200d\u200c\u200c\ufeff\ufeff\u200c\u200d\u200d\ufeff\u200c\u200d\u200c\u200c\u200c\ufeff\u200d\u200c\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\ufeff\u200c\u200b\u200c\u200b\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\ufeff\u200c\u200b\u200c\u200b\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\u200d\u200b\ufeff\u200b\u200d\u200b\ufeff\u200d\u200c\u200b\ufeff\u200d\u200c\u200b\ufeff\u200c\u200b\u200c\u200d\u200c\u200d\u200b\ufeff\u200c\u200b\u200c\u200d\u200c\u200c\u200b\ufeff\u200b\u200d\u200b\ufeff\u200b\u200b\u200c\u200d\u200c\u200c\u200b\ufeff\u200c\u200b\u200b\ufeff\u200b\u200b\u200b\ufeff\u200b\u200c\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\u200d\u200b\ufeff\u200b\u200d\u200b\u200d\u200c\u200c\u200b\ufeff\u200c\u200c\u200c\u200b\u200c\u200b\u200b\u200d\ufeff\u200d\u200c\ufeff\u200c\u200b\u200c\u200d\u200c\u200c\u200c\ufeff\u200d\u200b\u200c\ufeff\u200c\u200b\u200b\u200d\u200c\u200d\u200c\u200d\u200d\u200c\u200c\ufeff\u200b\ufeff\u200c\u200b\u200c\u200b\u200c\ufeff\u200b\u200d\u200c\u200d\u200b\u200c\u200c\u200d\u200c\u200d\u200c\ufeff\u200c\u200b\u200b\ufeff\ufeff\u200c\u200b\u200d\u200b\u200d\u200c\ufeff\ufeffβ€Œbold textβ€‹β€‹β€‹β€‹β€Œ\u200d\ufeff\u200b\u200d\u200b\u200d\u200c\u200d\ufeff\ufeff\u200c\ufeff\u200b\u200d\u200c\u200d\u200d\u200c\u200c\u200d\u200c\ufeff\u200c\u200d\u200d\u200c\u200c\u200d\ufeff\u200d\u200b\u200d\u200b\u200d\u200b\ufeff\u200d\u200d\u200b\u200d\u200b\u200d\u200c\ufeff\u200b\ufeff\u200c\u200d\u200b\u200c\u200c\u200d\ufeff\u200d\u200c\u200d\u200d\u200c\u200c\ufeff\u200c\u200b\u200c\ufeff\u200d\u200c\u200b\u200d\ufeff\u200d\u200c\u200d\u200d\u200c\u200c\u200d\ufeff\ufeff\u200b\u200d\u200b\u200d\u200b\u200d\ufeff\u200b\u200b\u200d\u200b\u200d\u200c\u200d\u200d\u200b\u200c\ufeff\u200b\u200d\u200c\u200d\u200c\u200c\u200c\u200d\u200c\u200d\u200b\u200d\u200b\u200d\u200b\ufeff\u200d\u200d\u200b\u200d\u200b\u200d\u200b\u200d\ufeff\ufeff\u200c\ufeff\u200b\u200b\u200c\ufeff\u200b\u200d\u200c\u200d\u200c\u200c\u200c\ufeff\u200b\ufeff\u200c\u200d\u200c\u200c\u200c\u200d\ufeff\u200d\u200c\ufeff\u200c\u200b\u200c\u200d\u200b\u200c\u200c\ufeff\u200c\u200b\u200c\u200d\u200d\u200c\u200c\u200d\ufeff\ufeff\u200c\u200d\ufeff\u200d\u200b\u200d\ufeff\ufeff\u200c\u200d\u200d\u200c\u200c\u200d\ufeff\u200d\u200c\ufeff\u200c\u200b\u200c\u200d\u200c\u200c\u200c\u200d\ufeff\u200d\u200c\ufeff\u200c\u200b\u200b\u200d\ufeff\ufeff\u200c\u200d\u200c\u200c\u200c\u200d\u200c\u200b\u200c\u200d\u200d\u200c\u200c\ufeff\u200c\u200b\u200b\u200d\ufeff\ufeff\u200c\u200d\ufeff\u200c\u200c\u200d\ufeff\ufeff\u200c\u200d\u200c\u200b\u200c\u200d\u200c\u200c\u200b\ufeff\ufeff\u200c\u200c\ufeff\u200b\u200b\u200c\ufeff\u200b\u200d\u200c\u200d\u200c\u200c\u200c\ufeff\u200b\ufeff\u200c\u200d\u200c\u200c\u200c\u200d\ufeff\u200d\u200c\ufeff\u200c\u200b\u200c\u200d\u200b\u200c\u200c\ufeff\u200c\u200b\u200c\u200d\u200d\u200c\u200c\u200d\ufeff\ufeff\u200c\u200d\ufeff\u200d\u200b\ufeff\u200d\ufeff\u200c\u200d\u200d\u200c\u200c\u200d\u200c\u200b\u200b\ufeff\ufeff\u200c\u200b\ufeff\u200c\ufeff\u200b\ufeff\u200b\u200c\u200b\ufeff\u200c\u200d\u200c\u200d\u200c\u200c\u200b\ufeff\u200b\u200d\u200c\u200d\u200b\ufeff\u200b\ufeff\u200d\u200b\u200c\u200d\u200b\u200c\u200b\u200d\ufeff\u200c\u200c\u200d\u200b\u200c\u200b\ufeff\u200b\u200c\u200b\ufeff\u200c\u200d\u200b\ufeff\u200d\u200b\u200b\u200d\ufeff\u200c\u200b\ufeff\u200c\u200b\u200b\ufeff\u200d\u200b\u200b\ufeff\u200c\u200c\u200b\ufeff\u200b\u200d\u200b\u200d\ufeff\u200c\u200b\ufeff\u200d\u200b\u200b\ufeff\u200c\ufeff\u200c\u200d\u200c\u200c\u200b\ufeff\u200b\u200d\u200b\u200d\ufeff\u200c\u200b\ufeff\u200b\u200b\u200c\u200d\u200b\ufeff\u200b\ufeff\u200b\u200d\u200c\u200d\u200b\u200d\u200b\ufeff\u200c\u200b\u200c\u200d\u200c\u200b\u200b\ufeff\u200c\u200b\u200b\ufeff\u200b\u200d\u200c\u200d\u200b\ufeff\u200b\ufeff\u200d\u200c\u200b\ufeff\u200c\u200b\u200c\u200d\u200b\u200d\u200b\ufeff\u200d\ufeff\u200c\ufeff\u200c\u200b\u200c\ufeff\u200d\u200c\u200c\ufeff\u200b\u200b\u200c\u200d\u200c\u200c\u200b\ufeff\ufeff\u200c\u200c\ufeff\u200b\ufeff\u200c\u200d\u200d\u200c\u200c\u200d\ufeff\u200c\u200c\ufeff\u200b\u200b\u200c\u200d\ufeff\u200b\u200c\u200d\u200c\u200c\u200c\u200b\u200b\u200d\u200c\u200d\ufeff\u200b\u200c\u200d\ufeff\ufeff\u200c\u200d\u200b\ufeff\u200c\u200d\u200d\ufeff\u200b\ufeff\u200d\ufeff\u200c\ufeff\u200b\u200b\u200c\u200d\u200b\u200c\u200c\ufeff\u200c\u200b\u200c\u200d\u200d\u200b\u200b\ufeff\ufeff\u200c\u200c\u200d\u200b\u200d\u200c\u200d\ufeff\ufeff\u200c\u200d\u200c\u200b\u200c\ufeff\u200d\u200c\u200b\u200d\u200c\u200c\u200b\ufeff\u200c\u200c\u200c\u200b\u200b\u200d\u200c\u200c\ufeff\ufeff\u200c\u200d\u200d\ufeff\u200c\u200d\u200c\u200c\u200c\ufeff\u200d\u200c\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\ufeff\u200c\u200b\u200c\u200b\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\ufeff\u200c\u200b\u200c\u200b\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\u200d\u200b\ufeff\u200b\u200d\u200b\ufeff\u200b\u200c\u200b\ufeff\u200c\u200d\u200b\ufeff\u200b\u200c\u200c\u200d\u200c\u200c\u200b\ufeff\u200b\u200c\u200b\ufeff\u200d\u200c\u200c\u200d\u200b\ufeff\u200c\u200d\u200c\u200c\u200b\ufeff\u200b\u200c\u200c\u200d\u200b\ufeff\u200b\ufeff\u200c\u200d\u200c\u200d\u200b\u200d\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\u200d\u200b\ufeff\u200b\u200d\u200b\u200d\u200c\u200c\u200b\ufeff\u200c\u200c\u200c\u200b\u200c\u200b\u200b\u200d\ufeff\u200d\u200c\u200d\u200b\ufeff\u200c\u200d\u200d\u200b\u200c\u200d\u200d\u200c\u200c\u200d\ufeff\u200b\u200c\u200d\u200c\u200b\u200c\ufeff\u200b\u200d\u200c\u200d\u200c\u200c\u200c\u200d\ufeff\u200d\u200b\u200d\u200c\u200c\u200b\ufeff\u200c\u200c\u200c\u200b\u200b\u200d\u200c\u200c\ufeff\ufeff\u200c\u200d\u200d\ufeff\u200c\u200d\u200c\u200c\u200c\ufeff\u200d\u200c\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\ufeff\u200c\u200b\u200c\u200b\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\ufeff\u200c\u200b\u200c\u200b\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\u200d\u200b\ufeff\u200b\u200d\u200b\ufeff\u200c\u200c\u200c\u200d\u200c\u200b\u200c\u200d\u200b\u200c\u200c\u200d\u200c\u200b\u200c\u200d\u200c\u200c\u200c\u200d\u200c\u200c\u200c\u200d\u200c\u200b\u200b\ufeff\u200c\u200d\u200c\u200d\u200b\ufeff\u200b\ufeff\u200c\u200d\u200b\ufeff\u200c\u200b\u200b\ufeff\u200b\u200c\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\u200d\u200b\ufeff\u200b\u200d\u200b\u200d\u200c\u200c\u200b\ufeff\u200c\u200c\u200c\u200b\u200c\u200b\u200b\u200d\ufeff\u200d\u200c\ufeff\u200c\u200b\u200c\u200d\u200c\u200c\u200c\ufeff\u200d\u200b\u200c\ufeff\u200c\u200b\u200b\ufeff\ufeff\ufeff\u200c\u200d\u200b\u200d\u200c\u200d\u200b\u200c\u200c\ufeff\u200b\ufeff\u200c\u200d\u200c\u200c\u200c\u200c\u200c\u200c\u200c\ufeff\u200b\u200d\u200c\u200d\ufeff\u200b\u200b\ufeff\ufeff\u200c\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\u200d\u200c\u200b\u200c\u200d\u200c\ufeff\u200b\u200b\u200c\ufeff\u200b\u200d\u200c\u200d\u200c\u200c\u200c\ufeff\u200b\ufeff\u200c\u200d\u200c\u200c\u200c\u200d\ufeff\u200d\u200c\ufeff\u200c\u200b\u200c\u200d\u200b\u200c\u200c\ufeff\u200c\u200b\u200c\u200d\u200d\u200c\u200c\u200d\ufeff\ufeff\u200c\u200d\ufeff\u200d\u200b\u200d\u200c\u200d\u200c\u200d\u200d\u200c\u200c\u200d\u200c\u200b\u200b\ufeff\ufeff\u200c\u200b\ufeff\u200c\ufeff\u200b\ufeff\u200b\u200c\u200b\ufeff\u200c\u200d\u200c\u200d\u200c\u200c\u200b\ufeff\u200b\u200d\u200c\u200d\u200b\ufeff\u200b\ufeff\u200d\u200b\u200c\u200d\u200b\u200c\u200b\u200d\ufeff\u200c\u200c\u200d\u200b\u200c\u200b\ufeff\u200b\u200c\u200b\ufeff\u200c\u200d\u200b\ufeff\u200d\u200b\u200b\u200d\ufeff\u200c\u200b\ufeff\u200c\u200b\u200b\ufeff\u200d\u200b\u200b\ufeff\u200c\u200c\u200b\ufeff\u200b\u200d\u200b\u200d\ufeff\u200c\u200b\ufeff\u200d\u200b\u200b\ufeff\u200c\ufeff\u200c\u200d\u200c\u200c\u200b\ufeff\u200b\u200d\u200b\u200d\ufeff\u200c\u200b\ufeff\u200b\u200b\u200c\u200d\u200b\ufeff\u200b\ufeff\u200b\u200d\u200c\u200d\u200b\u200d\u200b\ufeff\u200c\u200b\u200c\u200d\u200c\u200b\u200b\ufeff\u200c\u200b\u200b\ufeff\u200b\u200d\u200c\u200d\u200b\ufeff\u200b\ufeff\u200d\u200c\u200b\ufeff\u200c\u200b\u200c\u200d\u200b\u200d\u200b\u200d\u200c\u200d\u200c\ufeff\u200c\u200b\u200c\ufeff\u200d\u200c\u200c\ufeff\u200b\u200b\u200c\u200d\u200c\u200c\u200b\ufeff\ufeff\u200c\u200c\ufeff\u200b\ufeff\u200c\u200d\u200d\u200c\u200c\u200d\ufeff\u200c\u200c\ufeff\u200b\u200b\u200c\u200d\ufeff\u200b\u200c\u200d\u200c\u200c\u200c\u200b\u200b\u200d\u200c\u200d\ufeff\u200b\u200c\u200d\ufeff\ufeff\u200c\u200d\u200b\ufeff\u200c\u200d\u200d\ufeff\u200b\u200d\u200c\u200d\u200c\ufeff\u200b\u200b\u200c\u200d\u200b\u200c\u200c\ufeff\u200c\u200b\u200c\u200d\u200d\u200b\u200b\ufeff\ufeff\u200c\u200c\u200d\u200b\u200d\u200c\u200d\ufeff\ufeff\u200c\u200d\u200c\u200b\u200c\ufeff\u200d\u200c\u200b\u200d\u200c\u200c\u200b\ufeff\u200c\u200c\u200c\u200b\u200b\u200d\u200c\u200c\ufeff\ufeff\u200c\u200d\u200d\ufeff\u200c\u200d\u200c\u200c\u200c\ufeff\u200d\u200c\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\ufeff\u200c\u200b\u200c\u200b\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\ufeff\u200c\u200b\u200c\u200b\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\u200d\u200b\ufeff\u200b\u200d\u200b\ufeff\u200b\u200c\u200b\ufeff\u200c\u200d\u200b\ufeff\u200b\u200c\u200c\u200d\u200c\u200c\u200b\ufeff\u200b\u200c\u200b\ufeff\u200d\u200c\u200c\u200d\u200b\ufeff\u200c\u200d\u200c\u200c\u200b\ufeff\u200b\u200c\u200c\u200d\u200b\ufeff\u200b\ufeff\u200c\u200d\u200c\u200d\u200b\u200d\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\u200d\u200b\ufeff\u200b\u200d\u200b\u200d\u200c\u200c\u200b\ufeff\u200c\u200c\u200c\u200b\u200c\u200b\u200b\u200d\ufeff\u200d\u200c\u200d\u200b\ufeff\u200c\u200d\u200d\u200b\u200c\u200d\u200d\u200c\u200c\u200d\ufeff\u200b\u200c\u200d\u200c\u200b\u200c\ufeff\u200b\u200d\u200c\u200d\u200c\u200c\u200c\u200d\ufeff\u200d\u200b\u200d\u200c\u200c\u200b\ufeff\u200c\u200c\u200c\u200b\u200b\u200d\u200c\u200c\ufeff\ufeff\u200c\u200d\u200d\ufeff\u200c\u200d\u200c\u200c\u200c\ufeff\u200d\u200c\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\ufeff\u200c\u200b\u200c\u200b\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\ufeff\u200c\u200b\u200c\u200b\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\u200d\u200b\ufeff\u200b\u200d\u200b\ufeff\u200c\u200c\u200c\u200d\u200c\u200b\u200c\u200d\u200b\u200c\u200c\u200d\u200c\u200b\u200c\u200d\u200c\u200c\u200c\u200d\u200c\u200c\u200c\u200d\u200c\u200b\u200b\ufeff\u200c\u200d\u200c\u200d\u200b\ufeff\u200b\ufeff\u200c\u200d\u200b\ufeff\u200c\u200b\u200b\ufeff\u200b\u200c\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\u200d\u200b\ufeff\u200b\u200d\u200b\u200d\u200c\u200c\u200b\ufeff\u200c\u200c\u200c\u200b\u200c\u200b\u200b\u200d\ufeff\u200d\u200c\ufeff\u200c\u200b\u200c\u200d\u200c\u200c\u200c\ufeff\u200d\u200b\u200c\ufeff\u200c\u200b\u200b\u200d\u200c\u200d\u200c\u200d\u200d\u200c\u200c\ufeff\u200b\ufeff\u200c\u200b\u200c\u200b\u200c\ufeff\u200b\u200d\u200c\u200d\u200b\u200c\u200c\u200d\u200c\u200d\u200c\ufeff\u200c\u200b\u200b\ufeff\ufeff\u200c\u200b\u200d\u200b\u200d\u200c\ufeff\ufeffβ€Œ, \u200b\u200b\u200b\u200b\u200c\ufeff\u200d\ufeff\u200b\u200d\u200b\u200d\u200c\u200d\ufeff\ufeff\u200c\ufeff\u200b\u200d\u200c\u200d\u200d\u200c\u200c\u200d\u200c\ufeff\u200c\u200d\u200d\u200c\u200c\u200d\ufeff\u200d\u200b\u200d\u200b\u200d\u200b\ufeff\u200d\u200d\u200b\u200d\u200b\u200d\u200c\ufeff\u200b\ufeff\u200c\u200d\u200b\u200c\u200c\u200d\ufeff\u200d\u200c\u200d\u200d\u200c\u200c\ufeff\u200c\u200b\u200c\ufeff\u200d\u200c\u200b\u200d\ufeff\u200d\u200c\u200d\u200d\u200c\u200c\u200d\ufeff\ufeff\u200b\u200d\u200b\u200d\u200b\u200d\ufeff\u200b\u200b\u200d\u200b\u200d\u200c\u200d\u200d\u200b\u200c\ufeff\u200b\u200d\u200c\u200d\u200c\u200c\u200c\u200d\u200c\u200d\u200b\u200d\u200b\u200d\u200b\ufeff\u200d\u200d\u200b\u200d\u200b\u200d\u200b\u200d\ufeff\ufeff\u200c\ufeff\u200b\u200b\u200c\ufeff\u200b\u200d\u200c\u200d\u200c\u200c\u200c\ufeff\u200b\ufeff\u200c\u200d\u200c\u200c\u200c\u200d\ufeff\u200d\u200c\ufeff\u200c\u200b\u200c\u200d\u200b\u200c\u200c\ufeff\u200c\u200b\u200c\u200d\u200d\u200c\u200c\u200d\ufeff\ufeff\u200c\u200d\ufeff\u200d\u200b\u200d\ufeff\ufeff\u200c\u200d\u200d\u200c\u200c\u200d\ufeff\u200d\u200c\ufeff\u200c\u200b\u200c\u200d\u200c\u200c\u200c\u200d\ufeff\u200d\u200c\ufeff\u200c\u200b\u200b\u200d\ufeff\ufeff\u200c\u200d\u200c\u200c\u200c\u200d\u200c\u200b\u200c\u200d\u200d\u200c\u200c\ufeff\u200c\u200b\u200b\u200d\ufeff\ufeff\u200c\u200d\ufeff\u200c\u200c\u200d\ufeff\ufeff\u200c\u200d\u200c\u200b\u200c\u200d\u200c\u200c\u200b\ufeff\ufeff\u200c\u200c\ufeff\u200b\u200b\u200c\ufeff\u200b\u200d\u200c\u200d\u200c\u200c\u200c\ufeff\u200b\ufeff\u200c\u200d\u200c\u200c\u200c\u200d\ufeff\u200d\u200c\ufeff\u200c\u200b\u200c\u200d\u200b\u200c\u200c\ufeff\u200c\u200b\u200c\u200d\u200d\u200c\u200c\u200d\ufeff\ufeff\u200c\u200d\ufeff\u200d\u200b\ufeff\u200d\ufeff\u200c\u200d\u200d\u200c\u200c\u200d\u200c\u200b\u200b\ufeff\ufeff\u200c\u200b\ufeff\u200c\ufeff\u200b\ufeff\u200b\u200c\u200b\ufeff\u200c\u200d\u200c\u200d\u200c\u200c\u200b\ufeff\u200b\u200d\u200c\u200d\u200b\ufeff\u200b\ufeff\u200d\u200b\u200c\u200d\u200b\u200c\u200b\u200d\ufeff\u200c\u200c\u200d\u200b\u200c\u200b\ufeff\u200b\u200c\u200b\ufeff\u200c\u200d\u200b\ufeff\u200d\u200b\u200b\u200d\ufeff\u200c\u200b\ufeff\u200c\u200b\u200b\ufeff\u200d\u200b\u200b\ufeff\u200c\u200c\u200b\ufeff\u200b\u200d\u200b\u200d\ufeff\u200c\u200b\ufeff\u200d\u200b\u200b\ufeff\u200c\ufeff\u200c\u200d\u200c\u200c\u200b\ufeff\u200b\u200d\u200b\u200d\ufeff\u200c\u200b\ufeff\u200b\u200b\u200c\u200d\u200b\ufeff\u200b\ufeff\u200b\u200d\u200c\u200d\u200b\u200d\u200b\ufeff\u200c\u200b\u200c\u200d\u200c\u200b\u200b\ufeff\u200c\u200b\u200b\ufeff\u200b\u200d\u200c\u200d\u200b\ufeff\u200b\ufeff\u200d\u200c\u200b\ufeff\u200c\u200b\u200c\u200d\u200b\u200d\u200b\ufeff\u200d\ufeff\u200c\ufeff\u200c\u200b\u200c\ufeff\u200d\u200c\u200c\ufeff\u200b\u200b\u200c\u200d\u200c\u200c\u200b\ufeff\ufeff\u200c\u200c\ufeff\u200b\ufeff\u200c\u200d\u200d\u200c\u200c\u200d\ufeff\u200c\u200c\ufeff\u200b\u200b\u200c\u200d\ufeff\u200b\u200c\u200d\u200c\u200c\u200c\u200b\u200b\u200d\u200c\u200d\ufeff\u200b\u200c\u200d\ufeff\ufeff\u200c\u200d\u200b\ufeff\u200c\u200d\u200d\ufeff\u200b\ufeff\u200d\ufeff\u200c\ufeff\u200b\u200b\u200c\u200d\u200b\u200c\u200c\ufeff\u200c\u200b\u200c\u200d\u200d\u200b\u200b\ufeff\ufeff\u200c\u200c\u200d\u200b\u200d\u200c\u200d\ufeff\ufeff\u200c\u200d\u200c\u200b\u200c\ufeff\u200d\u200c\u200b\u200d\u200c\u200c\u200b\ufeff\u200c\u200c\u200c\u200b\u200b\u200d\u200c\u200c\ufeff\ufeff\u200c\u200d\u200d\ufeff\u200c\u200d\u200c\u200c\u200c\ufeff\u200d\u200c\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\ufeff\u200c\u200b\u200c\u200b\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\ufeff\u200c\u200b\u200c\u200b\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\u200d\u200b\ufeff\u200b\u200d\u200b\ufeff\u200b\u200c\u200b\ufeff\u200c\u200d\u200b\ufeff\u200b\u200c\u200c\u200d\u200c\u200c\u200b\ufeff\u200b\u200c\u200b\ufeff\u200d\u200c\u200c\u200d\u200b\ufeff\u200c\u200d\u200c\u200c\u200b\ufeff\u200b\u200c\u200c\u200d\u200b\ufeff\u200b\ufeff\u200c\u200d\u200c\u200d\u200b\u200d\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\u200d\u200b\ufeff\u200b\u200d\u200b\u200d\u200c\u200c\u200b\ufeff\u200c\u200c\u200c\u200b\u200c\u200b\u200b\u200d\ufeff\u200d\u200c\u200d\u200b\ufeff\u200c\u200d\u200d\u200b\u200c\u200d\u200d\u200c\u200c\u200d\ufeff\u200b\u200c\u200d\u200c\u200b\u200c\ufeff\u200b\u200d\u200c\u200d\u200c\u200c\u200c\u200d\ufeff\u200d\u200b\u200d\u200c\u200c\u200b\ufeff\u200c\u200c\u200c\u200b\u200b\u200d\u200c\u200c\ufeff\ufeff\u200c\u200d\u200d\ufeff\u200c\u200d\u200c\u200c\u200c\ufeff\u200d\u200c\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\ufeff\u200c\u200b\u200c\u200b\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\ufeff\u200c\u200b\u200c\u200b\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\u200d\u200b\ufeff\u200b\u200d\u200c\u200d\u200b\ufeff\u200b\ufeff\u200b\u200c\u200b\ufeff\u200b\u200b\u200b\ufeff\u200b\ufeff\u200b\ufeff\u200c\ufeff\u200b\ufeff\u200c\u200c\u200b\ufeff\u200d\u200b\u200b\ufeff\u200b\u200d\u200b\ufeff\u200b\u200d\u200c\u200d\u200b\u200d\u200c\u200d\u200c\u200d\u200c\u200d\u200c\u200c\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\u200d\u200b\ufeff\u200b\u200d\u200b\u200d\u200c\u200c\u200b\ufeff\u200c\u200c\u200c\u200b\u200c\u200b\u200b\u200d\ufeff\u200d\u200c\ufeff\u200c\u200b\u200c\u200d\u200c\u200c\u200c\ufeff\u200d\u200b\u200c\ufeff\u200c\u200b\u200b\ufeff\ufeff\ufeff\u200c\u200d\u200b\u200d\u200c\u200d\u200b\u200c\u200c\ufeff\u200b\ufeff\u200c\u200d\u200c\u200c\u200c\u200c\u200c\u200c\u200c\ufeff\u200b\u200d\u200c\u200d\ufeff\u200b\u200b\ufeff\ufeff\u200c\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\u200d\u200c\u200b\u200c\u200d\u200c\ufeff\u200b\u200b\u200c\ufeff\u200b\u200d\u200c\u200d\u200c\u200c\u200c\ufeff\u200b\ufeff\u200c\u200d\u200c\u200c\u200c\u200d\ufeff\u200d\u200c\ufeff\u200c\u200b\u200c\u200d\u200b\u200c\u200c\ufeff\u200c\u200b\u200c\u200d\u200d\u200c\u200c\u200d\ufeff\ufeff\u200c\u200d\ufeff\u200d\u200b\u200d\u200c\u200d\u200c\u200d\u200d\u200c\u200c\u200d\u200c\u200b\u200b\ufeff\ufeff\u200c\u200b\ufeff\u200c\ufeff\u200b\ufeff\u200b\u200c\u200b\ufeff\u200c\u200d\u200c\u200d\u200c\u200c\u200b\ufeff\u200b\u200d\u200c\u200d\u200b\ufeff\u200b\ufeff\u200d\u200b\u200c\u200d\u200b\u200c\u200b\u200d\ufeff\u200c\u200c\u200d\u200b\u200c\u200b\ufeff\u200b\u200c\u200b\ufeff\u200c\u200d\u200b\ufeff\u200d\u200b\u200b\u200d\ufeff\u200c\u200b\ufeff\u200c\u200b\u200b\ufeff\u200d\u200b\u200b\ufeff\u200c\u200c\u200b\ufeff\u200b\u200d\u200b\u200d\ufeff\u200c\u200b\ufeff\u200d\u200b\u200b\ufeff\u200c\ufeff\u200c\u200d\u200c\u200c\u200b\ufeff\u200b\u200d\u200b\u200d\ufeff\u200c\u200b\ufeff\u200b\u200b\u200c\u200d\u200b\ufeff\u200b\ufeff\u200b\u200d\u200c\u200d\u200b\u200d\u200b\ufeff\u200c\u200b\u200c\u200d\u200c\u200b\u200b\ufeff\u200c\u200b\u200b\ufeff\u200b\u200d\u200c\u200d\u200b\ufeff\u200b\ufeff\u200d\u200c\u200b\ufeff\u200c\u200b\u200c\u200d\u200b\u200d\u200b\u200d\u200c\u200d\u200c\ufeff\u200c\u200b\u200c\ufeff\u200d\u200c\u200c\ufeff\u200b\u200b\u200c\u200d\u200c\u200c\u200b\ufeff\ufeff\u200c\u200c\ufeff\u200b\ufeff\u200c\u200d\u200d\u200c\u200c\u200d\ufeff\u200c\u200c\ufeff\u200b\u200b\u200c\u200d\ufeff\u200b\u200c\u200d\u200c\u200c\u200c\u200b\u200b\u200d\u200c\u200d\ufeff\u200b\u200c\u200d\ufeff\ufeff\u200c\u200d\u200b\ufeff\u200c\u200d\u200d\ufeff\u200b\u200d\u200c\u200d\u200c\ufeff\u200b\u200b\u200c\u200d\u200b\u200c\u200c\ufeff\u200c\u200b\u200c\u200d\u200d\u200b\u200b\ufeff\ufeff\u200c\u200c\u200d\u200b\u200d\u200c\u200d\ufeff\ufeff\u200c\u200d\u200c\u200b\u200c\ufeff\u200d\u200c\u200b\u200d\u200c\u200c\u200b\ufeff\u200c\u200c\u200c\u200b\u200b\u200d\u200c\u200c\ufeff\ufeff\u200c\u200d\u200d\ufeff\u200c\u200d\u200c\u200c\u200c\ufeff\u200d\u200c\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\ufeff\u200c\u200b\u200c\u200b\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\ufeff\u200c\u200b\u200c\u200b\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\u200d\u200b\ufeff\u200b\u200d\u200b\ufeff\u200b\u200c\u200b\ufeff\u200c\u200d\u200b\ufeff\u200b\u200c\u200c\u200d\u200c\u200c\u200b\ufeff\u200b\u200c\u200b\ufeff\u200d\u200c\u200c\u200d\u200b\ufeff\u200c\u200d\u200c\u200c\u200b\ufeff\u200b\u200c\u200c\u200d\u200b\ufeff\u200b\ufeff\u200c\u200d\u200c\u200d\u200b\u200d\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\u200d\u200b\ufeff\u200b\u200d\u200b\u200d\u200c\u200c\u200b\ufeff\u200c\u200c\u200c\u200b\u200c\u200b\u200b\u200d\ufeff\u200d\u200c\u200d\u200b\ufeff\u200c\u200d\u200d\u200b\u200c\u200d\u200d\u200c\u200c\u200d\ufeff\u200b\u200c\u200d\u200c\u200b\u200c\ufeff\u200b\u200d\u200c\u200d\u200c\u200c\u200c\u200d\ufeff\u200d\u200b\u200d\u200c\u200c\u200b\ufeff\u200c\u200c\u200c\u200b\u200b\u200d\u200c\u200c\ufeff\ufeff\u200c\u200d\u200d\ufeff\u200c\u200d\u200c\u200c\u200c\ufeff\u200d\u200c\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\ufeff\u200c\u200b\u200c\u200b\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\ufeff\u200c\u200b\u200c\u200b\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\u200d\u200b\ufeff\u200b\u200d\u200c\u200d\u200b\ufeff\u200b\ufeff\u200b\u200c\u200b\ufeff\u200b\u200b\u200b\ufeff\u200b\ufeff\u200b\ufeff\u200c\ufeff\u200b\ufeff\u200c\u200c\u200b\ufeff\u200d\u200b\u200b\ufeff\u200b\u200d\u200b\ufeff\u200b\u200d\u200c\u200d\u200b\u200d\u200c\u200d\u200c\u200d\u200c\u200d\u200c\u200c\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\u200d\u200b\ufeff\u200b\u200d\u200b\u200d\u200c\u200c\u200b\ufeff\u200c\u200c\u200c\u200b\u200c\u200b\u200b\u200d\ufeff\u200d\u200c\ufeff\u200c\u200b\u200c\u200d\u200c\u200c\u200c\ufeff\u200d\u200b\u200c\ufeff\u200c\u200b\u200b\u200d\u200c\u200d\u200c\u200d\u200d\u200c\u200c\ufeff\u200b\ufeff\u200c\u200b\u200c\u200b\u200c\ufeff\u200b\u200d\u200c\u200d\u200b\u200c\u200c\u200d\u200c\u200d\u200c\ufeff\u200c\u200b\u200b\ufeff\ufeff\u200c\u200b\u200d\u200b\u200d\u200c\ufeff\ufeffβ€Œitalic textβ€‹β€‹β€‹β€‹β€Œ\u200d\ufeff\u200b\u200d\u200b\u200d\u200c\u200d\ufeff\ufeff\u200c\ufeff\u200b\u200d\u200c\u200d\u200d\u200c\u200c\u200d\u200c\ufeff\u200c\u200d\u200d\u200c\u200c\u200d\ufeff\u200d\u200b\u200d\u200b\u200d\u200b\ufeff\u200d\u200d\u200b\u200d\u200b\u200d\u200c\ufeff\u200b\ufeff\u200c\u200d\u200b\u200c\u200c\u200d\ufeff\u200d\u200c\u200d\u200d\u200c\u200c\ufeff\u200c\u200b\u200c\ufeff\u200d\u200c\u200b\u200d\ufeff\u200d\u200c\u200d\u200d\u200c\u200c\u200d\ufeff\ufeff\u200b\u200d\u200b\u200d\u200b\u200d\ufeff\u200b\u200b\u200d\u200b\u200d\u200c\u200d\u200d\u200b\u200c\ufeff\u200b\u200d\u200c\u200d\u200c\u200c\u200c\u200d\u200c\u200d\u200b\u200d\u200b\u200d\u200b\ufeff\u200d\u200d\u200b\u200d\u200b\u200d\u200b\u200d\ufeff\ufeff\u200c\ufeff\u200b\u200b\u200c\ufeff\u200b\u200d\u200c\u200d\u200c\u200c\u200c\ufeff\u200b\ufeff\u200c\u200d\u200c\u200c\u200c\u200d\ufeff\u200d\u200c\ufeff\u200c\u200b\u200c\u200d\u200b\u200c\u200c\ufeff\u200c\u200b\u200c\u200d\u200d\u200c\u200c\u200d\ufeff\ufeff\u200c\u200d\ufeff\u200d\u200b\u200d\ufeff\ufeff\u200c\u200d\u200d\u200c\u200c\u200d\ufeff\u200d\u200c\ufeff\u200c\u200b\u200c\u200d\u200c\u200c\u200c\u200d\ufeff\u200d\u200c\ufeff\u200c\u200b\u200b\u200d\ufeff\ufeff\u200c\u200d\u200c\u200c\u200c\u200d\u200c\u200b\u200c\u200d\u200d\u200c\u200c\ufeff\u200c\u200b\u200b\u200d\ufeff\ufeff\u200c\u200d\ufeff\u200c\u200c\u200d\ufeff\ufeff\u200c\u200d\u200c\u200b\u200c\u200d\u200c\u200c\u200b\ufeff\ufeff\u200c\u200c\ufeff\u200b\u200b\u200c\ufeff\u200b\u200d\u200c\u200d\u200c\u200c\u200c\ufeff\u200b\ufeff\u200c\u200d\u200c\u200c\u200c\u200d\ufeff\u200d\u200c\ufeff\u200c\u200b\u200c\u200d\u200b\u200c\u200c\ufeff\u200c\u200b\u200c\u200d\u200d\u200c\u200c\u200d\ufeff\ufeff\u200c\u200d\ufeff\u200d\u200b\ufeff\u200d\ufeff\u200c\u200d\u200d\u200c\u200c\u200d\u200c\u200b\u200b\ufeff\ufeff\u200c\u200b\ufeff\u200c\ufeff\u200b\ufeff\u200b\u200c\u200b\ufeff\u200c\u200d\u200c\u200d\u200c\u200c\u200b\ufeff\u200b\u200d\u200c\u200d\u200b\ufeff\u200b\ufeff\u200d\u200b\u200c\u200d\u200b\u200c\u200b\u200d\ufeff\u200c\u200c\u200d\u200b\u200c\u200b\ufeff\u200b\u200c\u200b\ufeff\u200c\u200d\u200b\ufeff\u200d\u200b\u200b\u200d\ufeff\u200c\u200b\ufeff\u200c\u200b\u200b\ufeff\u200d\u200b\u200b\ufeff\u200c\u200c\u200b\ufeff\u200b\u200d\u200b\u200d\ufeff\u200c\u200b\ufeff\u200d\u200b\u200b\ufeff\u200c\ufeff\u200c\u200d\u200c\u200c\u200b\ufeff\u200b\u200d\u200b\u200d\ufeff\u200c\u200b\ufeff\u200b\u200b\u200c\u200d\u200b\ufeff\u200b\ufeff\u200b\u200d\u200c\u200d\u200b\u200d\u200b\ufeff\u200c\u200b\u200c\u200d\u200c\u200b\u200b\ufeff\u200c\u200b\u200b\ufeff\u200b\u200d\u200c\u200d\u200b\ufeff\u200b\ufeff\u200d\u200c\u200b\ufeff\u200c\u200b\u200c\u200d\u200b\u200d\u200b\ufeff\u200d\ufeff\u200c\ufeff\u200c\u200b\u200c\ufeff\u200d\u200c\u200c\ufeff\u200b\u200b\u200c\u200d\u200c\u200c\u200b\ufeff\ufeff\u200c\u200c\ufeff\u200b\ufeff\u200c\u200d\u200d\u200c\u200c\u200d\ufeff\u200c\u200c\ufeff\u200b\u200b\u200c\u200d\ufeff\u200b\u200c\u200d\u200c\u200c\u200c\u200b\u200b\u200d\u200c\u200d\ufeff\u200b\u200c\u200d\ufeff\ufeff\u200c\u200d\u200b\ufeff\u200c\u200d\u200d\ufeff\u200b\ufeff\u200d\ufeff\u200c\ufeff\u200b\u200b\u200c\u200d\u200b\u200c\u200c\ufeff\u200c\u200b\u200c\u200d\u200d\u200b\u200b\ufeff\ufeff\u200c\u200c\u200d\u200b\u200d\u200c\u200d\ufeff\ufeff\u200c\u200d\u200c\u200b\u200c\ufeff\u200d\u200c\u200b\u200d\u200c\u200c\u200b\ufeff\u200c\u200c\u200c\u200b\u200b\u200d\u200c\u200c\ufeff\ufeff\u200c\u200d\u200d\ufeff\u200c\u200d\u200c\u200c\u200c\ufeff\u200d\u200c\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\ufeff\u200c\u200b\u200c\u200b\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\ufeff\u200c\u200b\u200c\u200b\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\u200d\u200b\ufeff\u200b\u200d\u200b\ufeff\u200b\u200c\u200b\ufeff\u200c\u200d\u200b\ufeff\u200b\u200c\u200c\u200d\u200c\u200c\u200b\ufeff\u200b\u200c\u200b\ufeff\u200d\u200c\u200c\u200d\u200b\ufeff\u200c\u200d\u200c\u200c\u200b\ufeff\u200b\u200c\u200c\u200d\u200b\ufeff\u200b\ufeff\u200c\u200d\u200c\u200d\u200b\u200d\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\u200d\u200b\ufeff\u200b\u200d\u200b\u200d\u200c\u200c\u200b\ufeff\u200c\u200c\u200c\u200b\u200c\u200b\u200b\u200d\ufeff\u200d\u200c\u200d\u200b\ufeff\u200c\u200d\u200d\u200b\u200c\u200d\u200d\u200c\u200c\u200d\ufeff\u200b\u200c\u200d\u200c\u200b\u200c\ufeff\u200b\u200d\u200c\u200d\u200c\u200c\u200c\u200d\ufeff\u200d\u200b\u200d\u200c\u200c\u200b\ufeff\u200c\u200c\u200c\u200b\u200b\u200d\u200c\u200c\ufeff\ufeff\u200c\u200d\u200d\ufeff\u200c\u200d\u200c\u200c\u200c\ufeff\u200d\u200c\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\ufeff\u200c\u200b\u200c\u200b\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\ufeff\u200c\u200b\u200c\u200b\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\u200d\u200b\ufeff\u200b\u200d\u200b\ufeff\u200b\ufeff\u200b\ufeff\u200b\u200d\u200c\u200d\u200c\u200d\u200c\u200d\u200c\u200d\u200c\u200d\u200b\u200d\u200b\ufeff\u200c\ufeff\u200c\u200d\u200b\u200d\u200c\u200d\u200b\ufeff\u200b\ufeff\u200d\u200c\u200b\ufeff\u200c\u200c\u200b\ufeff\u200d\u200b\u200b\ufeff\u200c\u200b\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\u200d\u200b\ufeff\u200b\u200d\u200b\u200d\u200c\u200c\u200b\ufeff\u200c\u200c\u200c\u200b\u200c\u200b\u200b\u200d\ufeff\u200d\u200c\ufeff\u200c\u200b\u200c\u200d\u200c\u200c\u200c\ufeff\u200d\u200b\u200c\ufeff\u200c\u200b\u200b\ufeff\ufeff\ufeff\u200c\u200d\u200b\u200d\u200c\u200d\u200b\u200c\u200c\ufeff\u200b\ufeff\u200c\u200d\u200c\u200c\u200c\u200c\u200c\u200c\u200c\ufeff\u200b\u200d\u200c\u200d\ufeff\u200b\u200b\ufeff\ufeff\u200c\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\u200d\u200c\u200b\u200c\u200d\u200c\ufeff\u200b\u200b\u200c\ufeff\u200b\u200d\u200c\u200d\u200c\u200c\u200c\ufeff\u200b\ufeff\u200c\u200d\u200c\u200c\u200c\u200d\ufeff\u200d\u200c\ufeff\u200c\u200b\u200c\u200d\u200b\u200c\u200c\ufeff\u200c\u200b\u200c\u200d\u200d\u200c\u200c\u200d\ufeff\ufeff\u200c\u200d\ufeff\u200d\u200b\u200d\u200c\u200d\u200c\u200d\u200d\u200c\u200c\u200d\u200c\u200b\u200b\ufeff\ufeff\u200c\u200b\ufeff\u200c\ufeff\u200b\ufeff\u200b\u200c\u200b\ufeff\u200c\u200d\u200c\u200d\u200c\u200c\u200b\ufeff\u200b\u200d\u200c\u200d\u200b\ufeff\u200b\ufeff\u200d\u200b\u200c\u200d\u200b\u200c\u200b\u200d\ufeff\u200c\u200c\u200d\u200b\u200c\u200b\ufeff\u200b\u200c\u200b\ufeff\u200c\u200d\u200b\ufeff\u200d\u200b\u200b\u200d\ufeff\u200c\u200b\ufeff\u200c\u200b\u200b\ufeff\u200d\u200b\u200b\ufeff\u200c\u200c\u200b\ufeff\u200b\u200d\u200b\u200d\ufeff\u200c\u200b\ufeff\u200d\u200b\u200b\ufeff\u200c\ufeff\u200c\u200d\u200c\u200c\u200b\ufeff\u200b\u200d\u200b\u200d\ufeff\u200c\u200b\ufeff\u200b\u200b\u200c\u200d\u200b\ufeff\u200b\ufeff\u200b\u200d\u200c\u200d\u200b\u200d\u200b\ufeff\u200c\u200b\u200c\u200d\u200c\u200b\u200b\ufeff\u200c\u200b\u200b\ufeff\u200b\u200d\u200c\u200d\u200b\ufeff\u200b\ufeff\u200d\u200c\u200b\ufeff\u200c\u200b\u200c\u200d\u200b\u200d\u200b\u200d\u200c\u200d\u200c\ufeff\u200c\u200b\u200c\ufeff\u200d\u200c\u200c\ufeff\u200b\u200b\u200c\u200d\u200c\u200c\u200b\ufeff\ufeff\u200c\u200c\ufeff\u200b\ufeff\u200c\u200d\u200d\u200c\u200c\u200d\ufeff\u200c\u200c\ufeff\u200b\u200b\u200c\u200d\ufeff\u200b\u200c\u200d\u200c\u200c\u200c\u200b\u200b\u200d\u200c\u200d\ufeff\u200b\u200c\u200d\ufeff\ufeff\u200c\u200d\u200b\ufeff\u200c\u200d\u200d\ufeff\u200b\u200d\u200c\u200d\u200c\ufeff\u200b\u200b\u200c\u200d\u200b\u200c\u200c\ufeff\u200c\u200b\u200c\u200d\u200d\u200b\u200b\ufeff\ufeff\u200c\u200c\u200d\u200b\u200d\u200c\u200d\ufeff\ufeff\u200c\u200d\u200c\u200b\u200c\ufeff\u200d\u200c\u200b\u200d\u200c\u200c\u200b\ufeff\u200c\u200c\u200c\u200b\u200b\u200d\u200c\u200c\ufeff\ufeff\u200c\u200d\u200d\ufeff\u200c\u200d\u200c\u200c\u200c\ufeff\u200d\u200c\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\ufeff\u200c\u200b\u200c\u200b\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\ufeff\u200c\u200b\u200c\u200b\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\u200d\u200b\ufeff\u200b\u200d\u200b\ufeff\u200b\u200c\u200b\ufeff\u200c\u200d\u200b\ufeff\u200b\u200c\u200c\u200d\u200c\u200c\u200b\ufeff\u200b\u200c\u200b\ufeff\u200d\u200c\u200c\u200d\u200b\ufeff\u200c\u200d\u200c\u200c\u200b\ufeff\u200b\u200c\u200c\u200d\u200b\ufeff\u200b\ufeff\u200c\u200d\u200c\u200d\u200b\u200d\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\u200d\u200b\ufeff\u200b\u200d\u200b\u200d\u200c\u200c\u200b\ufeff\u200c\u200c\u200c\u200b\u200c\u200b\u200b\u200d\ufeff\u200d\u200c\u200d\u200b\ufeff\u200c\u200d\u200d\u200b\u200c\u200d\u200d\u200c\u200c\u200d\ufeff\u200b\u200c\u200d\u200c\u200b\u200c\ufeff\u200b\u200d\u200c\u200d\u200c\u200c\u200c\u200d\ufeff\u200d\u200b\u200d\u200c\u200c\u200b\ufeff\u200c\u200c\u200c\u200b\u200b\u200d\u200c\u200c\ufeff\ufeff\u200c\u200d\u200d\ufeff\u200c\u200d\u200c\u200c\u200c\ufeff\u200d\u200c\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\ufeff\u200c\u200b\u200c\u200b\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\ufeff\u200c\u200b\u200c\u200b\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\u200d\u200b\ufeff\u200b\u200d\u200b\ufeff\u200b\ufeff\u200b\ufeff\u200b\u200d\u200c\u200d\u200c\u200d\u200c\u200d\u200c\u200d\u200c\u200d\u200b\u200d\u200b\ufeff\u200c\ufeff\u200c\u200d\u200b\u200d\u200c\u200d\u200b\ufeff\u200b\ufeff\u200d\u200c\u200b\ufeff\u200c\u200c\u200b\ufeff\u200d\u200b\u200b\ufeff\u200c\u200b\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\u200d\u200b\ufeff\u200b\u200d\u200b\u200d\u200c\u200c\u200b\ufeff\u200c\u200c\u200c\u200b\u200c\u200b\u200b\u200d\ufeff\u200d\u200c\ufeff\u200c\u200b\u200c\u200d\u200c\u200c\u200c\ufeff\u200d\u200b\u200c\ufeff\u200c\u200b\u200b\u200d\u200c\u200d\u200c\u200d\u200d\u200c\u200c\ufeff\u200b\ufeff\u200c\u200b\u200c\u200b\u200c\ufeff\u200b\u200d\u200c\u200d\u200b\u200c\u200c\u200d\u200c\u200d\u200c\ufeff\u200c\u200b\u200b\ufeff\ufeff\u200c\u200b\u200d\u200b\u200d\u200c\ufeff\ufeff\u200c, ~~strikethrough~~, \u200b\u200b\u200b\u200b\u200c\ufeff\u200d\ufeff\u200b\u200d\u200b\u200d\u200c\u200d\ufeff\ufeff\u200c\ufeff\u200b\u200d\u200c\u200d\u200d\u200c\u200c\u200d\u200c\ufeff\u200c\u200d\u200d\u200c\u200c\u200d\ufeff\u200d\u200b\u200d\u200b\u200d\u200b\ufeff\u200d\u200d\u200b\u200d\u200b\u200d\u200c\ufeff\u200b\ufeff\u200c\u200d\u200b\u200c\u200c\u200d\ufeff\u200d\u200c\u200d\u200d\u200c\u200c\ufeff\u200c\u200b\u200c\ufeff\u200d\u200c\u200b\u200d\ufeff\u200d\u200c\u200d\u200d\u200c\u200c\u200d\ufeff\ufeff\u200b\u200d\u200b\u200d\u200b\u200d\ufeff\u200b\u200b\u200d\u200b\u200d\u200c\u200d\u200d\u200b\u200c\ufeff\u200b\u200d\u200c\u200d\u200c\u200c\u200c\u200d\u200c\u200d\u200b\u200d\u200b\u200d\u200b\ufeff\u200d\u200d\u200b\u200d\u200b\u200d\u200b\u200d\ufeff\ufeff\u200c\ufeff\u200b\u200b\u200c\ufeff\u200b\u200d\u200c\u200d\u200c\u200c\u200c\ufeff\u200b\ufeff\u200c\u200d\u200c\u200c\u200c\u200d\ufeff\u200d\u200c\ufeff\u200c\u200b\u200c\u200d\u200b\u200c\u200c\ufeff\u200c\u200b\u200c\u200d\u200d\u200c\u200c\u200d\ufeff\ufeff\u200c\u200d\ufeff\u200d\u200b\u200d\ufeff\ufeff\u200c\u200d\u200d\u200c\u200c\u200d\ufeff\u200d\u200c\ufeff\u200c\u200b\u200c\u200d\u200c\u200c\u200c\u200d\ufeff\u200d\u200c\ufeff\u200c\u200b\u200b\u200d\ufeff\ufeff\u200c\u200d\u200c\u200c\u200c\u200d\u200c\u200b\u200c\u200d\u200d\u200c\u200c\ufeff\u200c\u200b\u200b\u200d\ufeff\ufeff\u200c\u200d\ufeff\u200c\u200c\u200d\ufeff\ufeff\u200c\u200d\u200c\u200b\u200c\u200d\u200c\u200c\u200b\ufeff\ufeff\u200c\u200c\ufeff\u200b\u200b\u200c\ufeff\u200b\u200d\u200c\u200d\u200c\u200c\u200c\ufeff\u200b\ufeff\u200c\u200d\u200c\u200c\u200c\u200d\ufeff\u200d\u200c\ufeff\u200c\u200b\u200c\u200d\u200b\u200c\u200c\ufeff\u200c\u200b\u200c\u200d\u200d\u200c\u200c\u200d\ufeff\ufeff\u200c\u200d\ufeff\u200d\u200b\ufeff\u200d\ufeff\u200c\u200d\u200d\u200c\u200c\u200d\u200c\u200b\u200b\ufeff\ufeff\u200c\u200b\ufeff\u200c\ufeff\u200b\ufeff\u200b\u200c\u200b\ufeff\u200c\u200d\u200c\u200d\u200c\u200c\u200b\ufeff\u200b\u200d\u200c\u200d\u200b\ufeff\u200b\ufeff\u200d\u200b\u200c\u200d\u200b\u200c\u200b\u200d\ufeff\u200c\u200c\u200d\u200b\u200c\u200b\ufeff\u200b\u200c\u200b\ufeff\u200c\u200d\u200b\ufeff\u200d\u200b\u200b\u200d\ufeff\u200c\u200b\ufeff\u200c\u200b\u200b\ufeff\u200d\u200b\u200b\ufeff\u200c\u200c\u200b\ufeff\u200b\u200d\u200b\u200d\ufeff\u200c\u200b\ufeff\u200d\u200b\u200b\ufeff\u200c\ufeff\u200c\u200d\u200c\u200c\u200b\ufeff\u200b\u200d\u200b\u200d\ufeff\u200c\u200b\ufeff\u200b\u200b\u200c\u200d\u200b\ufeff\u200b\ufeff\u200b\u200d\u200c\u200d\u200b\u200d\u200b\ufeff\u200c\u200b\u200c\u200d\u200c\u200b\u200b\ufeff\u200c\u200b\u200b\ufeff\u200b\u200d\u200c\u200d\u200b\ufeff\u200b\ufeff\u200d\u200c\u200b\ufeff\u200c\u200b\u200c\u200d\u200b\u200d\u200b\ufeff\u200d\ufeff\u200c\ufeff\u200c\u200b\u200c\ufeff\u200d\u200c\u200c\ufeff\u200b\u200b\u200c\u200d\u200c\u200c\u200b\ufeff\ufeff\u200c\u200c\ufeff\u200b\ufeff\u200c\u200d\u200d\u200c\u200c\u200d\ufeff\u200c\u200c\ufeff\u200b\u200b\u200c\u200d\ufeff\u200b\u200c\u200d\u200c\u200c\u200c\u200b\u200b\u200d\u200c\u200d\ufeff\u200b\u200c\u200d\ufeff\ufeff\u200c\u200d\u200b\ufeff\u200c\u200d\u200d\ufeff\u200b\ufeff\u200d\ufeff\u200c\ufeff\u200b\u200b\u200c\u200d\u200b\u200c\u200c\ufeff\u200c\u200b\u200c\u200d\u200d\u200b\u200b\ufeff\ufeff\u200c\u200c\u200d\u200b\u200d\u200c\u200d\ufeff\ufeff\u200c\u200d\u200c\u200b\u200c\ufeff\u200d\u200c\u200b\u200d\u200c\u200c\u200b\ufeff\u200c\u200c\u200c\u200b\u200b\u200d\u200c\u200c\ufeff\ufeff\u200c\u200d\u200d\ufeff\u200c\u200d\u200c\u200c\u200c\ufeff\u200d\u200c\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\ufeff\u200c\u200b\u200c\u200b\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\ufeff\u200c\u200b\u200c\u200b\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\u200d\u200b\ufeff\u200b\u200d\u200b\ufeff\u200b\u200c\u200b\ufeff\u200c\u200d\u200b\ufeff\u200b\u200c\u200c\u200d\u200c\u200c\u200b\ufeff\u200b\u200c\u200b\ufeff\u200d\u200c\u200c\u200d\u200b\ufeff\u200c\u200d\u200c\u200c\u200b\ufeff\u200b\u200c\u200c\u200d\u200b\ufeff\u200b\ufeff\u200c\u200d\u200c\u200d\u200b\u200d\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\u200d\u200b\ufeff\u200b\u200d\u200b\u200d\u200c\u200c\u200b\ufeff\u200c\u200c\u200c\u200b\u200c\u200b\u200b\u200d\ufeff\u200d\u200c\u200d\u200b\ufeff\u200c\u200d\u200d\u200b\u200c\u200d\u200d\u200c\u200c\u200d\ufeff\u200b\u200c\u200d\u200c\u200b\u200c\ufeff\u200b\u200d\u200c\u200d\u200c\u200c\u200c\u200d\ufeff\u200d\u200b\u200d\u200c\u200c\u200b\ufeff\u200c\u200c\u200c\u200b\u200b\u200d\u200c\u200c\ufeff\ufeff\u200c\u200d\u200d\ufeff\u200c\u200d\u200c\u200c\u200c\ufeff\u200d\u200c\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\ufeff\u200c\u200b\u200c\u200b\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\ufeff\u200c\u200b\u200c\u200b\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\u200d\u200b\ufeff\u200b\u200d\u200b\ufeff\u200d\u200c\u200c\u200d\u200c\u200d\u200c\u200d\u200b\u200d\u200b\ufeff\u200b\ufeff\u200b\ufeff\u200d\u200b\u200b\ufeff\u200d\u200b\u200b\ufeff\u200d\u200c\u200c\u200d\u200c\u200c\u200b\ufeff\u200b\u200c\u200b\ufeff\u200b\ufeff\u200c\u200d\u200c\u200d\u200c\u200d\u200c\u200c\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\u200d\u200b\ufeff\u200b\u200d\u200b\u200d\u200c\u200c\u200b\ufeff\u200c\u200c\u200c\u200b\u200c\u200b\u200b\u200d\ufeff\u200d\u200c\ufeff\u200c\u200b\u200c\u200d\u200c\u200c\u200c\ufeff\u200d\u200b\u200c\ufeff\u200c\u200b\u200b\ufeff\ufeff\ufeff\u200c\u200d\u200b\u200d\u200c\u200d\u200b\u200c\u200c\ufeff\u200b\ufeff\u200c\u200d\u200c\u200c\u200c\u200c\u200c\u200c\u200c\ufeff\u200b\u200d\u200c\u200d\ufeff\u200b\u200b\ufeff\ufeff\u200c\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\u200d\u200c\u200b\u200c\u200d\u200c\ufeff\u200b\u200b\u200c\ufeff\u200b\u200d\u200c\u200d\u200c\u200c\u200c\ufeff\u200b\ufeff\u200c\u200d\u200c\u200c\u200c\u200d\ufeff\u200d\u200c\ufeff\u200c\u200b\u200c\u200d\u200b\u200c\u200c\ufeff\u200c\u200b\u200c\u200d\u200d\u200c\u200c\u200d\ufeff\ufeff\u200c\u200d\ufeff\u200d\u200b\u200d\u200c\u200d\u200c\u200d\u200d\u200c\u200c\u200d\u200c\u200b\u200b\ufeff\ufeff\u200c\u200b\ufeff\u200c\ufeff\u200b\ufeff\u200b\u200c\u200b\ufeff\u200c\u200d\u200c\u200d\u200c\u200c\u200b\ufeff\u200b\u200d\u200c\u200d\u200b\ufeff\u200b\ufeff\u200d\u200b\u200c\u200d\u200b\u200c\u200b\u200d\ufeff\u200c\u200c\u200d\u200b\u200c\u200b\ufeff\u200b\u200c\u200b\ufeff\u200c\u200d\u200b\ufeff\u200d\u200b\u200b\u200d\ufeff\u200c\u200b\ufeff\u200c\u200b\u200b\ufeff\u200d\u200b\u200b\ufeff\u200c\u200c\u200b\ufeff\u200b\u200d\u200b\u200d\ufeff\u200c\u200b\ufeff\u200d\u200b\u200b\ufeff\u200c\ufeff\u200c\u200d\u200c\u200c\u200b\ufeff\u200b\u200d\u200b\u200d\ufeff\u200c\u200b\ufeff\u200b\u200b\u200c\u200d\u200b\ufeff\u200b\ufeff\u200b\u200d\u200c\u200d\u200b\u200d\u200b\ufeff\u200c\u200b\u200c\u200d\u200c\u200b\u200b\ufeff\u200c\u200b\u200b\ufeff\u200b\u200d\u200c\u200d\u200b\ufeff\u200b\ufeff\u200d\u200c\u200b\ufeff\u200c\u200b\u200c\u200d\u200b\u200d\u200b\u200d\u200c\u200d\u200c\ufeff\u200c\u200b\u200c\ufeff\u200d\u200c\u200c\ufeff\u200b\u200b\u200c\u200d\u200c\u200c\u200b\ufeff\ufeff\u200c\u200c\ufeff\u200b\ufeff\u200c\u200d\u200d\u200c\u200c\u200d\ufeff\u200c\u200c\ufeff\u200b\u200b\u200c\u200d\ufeff\u200b\u200c\u200d\u200c\u200c\u200c\u200b\u200b\u200d\u200c\u200d\ufeff\u200b\u200c\u200d\ufeff\ufeff\u200c\u200d\u200b\ufeff\u200c\u200d\u200d\ufeff\u200b\u200d\u200c\u200d\u200c\ufeff\u200b\u200b\u200c\u200d\u200b\u200c\u200c\ufeff\u200c\u200b\u200c\u200d\u200d\u200b\u200b\ufeff\ufeff\u200c\u200c\u200d\u200b\u200d\u200c\u200d\ufeff\ufeff\u200c\u200d\u200c\u200b\u200c\ufeff\u200d\u200c\u200b\u200d\u200c\u200c\u200b\ufeff\u200c\u200c\u200c\u200b\u200b\u200d\u200c\u200c\ufeff\ufeff\u200c\u200d\u200d\ufeff\u200c\u200d\u200c\u200c\u200c\ufeff\u200d\u200c\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\ufeff\u200c\u200b\u200c\u200b\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\ufeff\u200c\u200b\u200c\u200b\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\u200d\u200b\ufeff\u200b\u200d\u200b\ufeff\u200b\u200c\u200b\ufeff\u200c\u200d\u200b\ufeff\u200b\u200c\u200c\u200d\u200c\u200c\u200b\ufeff\u200b\u200c\u200b\ufeff\u200d\u200c\u200c\u200d\u200b\ufeff\u200c\u200d\u200c\u200c\u200b\ufeff\u200b\u200c\u200c\u200d\u200b\ufeff\u200b\ufeff\u200c\u200d\u200c\u200d\u200b\u200d\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\u200d\u200b\ufeff\u200b\u200d\u200b\u200d\u200c\u200c\u200b\ufeff\u200c\u200c\u200c\u200b\u200c\u200b\u200b\u200d\ufeff\u200d\u200c\u200d\u200b\ufeff\u200c\u200d\u200d\u200b\u200c\u200d\u200d\u200c\u200c\u200d\ufeff\u200b\u200c\u200d\u200c\u200b\u200c\ufeff\u200b\u200d\u200c\u200d\u200c\u200c\u200c\u200d\ufeff\u200d\u200b\u200d\u200c\u200c\u200b\ufeff\u200c\u200c\u200c\u200b\u200b\u200d\u200c\u200c\ufeff\ufeff\u200c\u200d\u200d\ufeff\u200c\u200d\u200c\u200c\u200c\ufeff\u200d\u200c\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\ufeff\u200c\u200b\u200c\u200b\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\ufeff\u200c\u200b\u200c\u200b\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\u200d\u200b\ufeff\u200b\u200d\u200b\ufeff\u200d\u200c\u200c\u200d\u200c\u200d\u200c\u200d\u200b\u200d\u200b\ufeff\u200b\ufeff\u200b\ufeff\u200d\u200b\u200b\ufeff\u200d\u200b\u200b\ufeff\u200d\u200c\u200c\u200d\u200c\u200c\u200b\ufeff\u200b\u200c\u200b\ufeff\u200b\ufeff\u200c\u200d\u200c\u200d\u200c\u200d\u200c\u200c\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\u200d\u200b\ufeff\u200b\u200d\u200b\u200d\u200c\u200c\u200b\ufeff\u200c\u200c\u200c\u200b\u200c\u200b\u200b\u200d\ufeff\u200d\u200c\ufeff\u200c\u200b\u200c\u200d\u200c\u200c\u200c\ufeff\u200d\u200b\u200c\ufeff\u200c\u200b\u200b\u200d\u200c\u200d\u200c\u200d\u200d\u200c\u200c\ufeff\u200b\ufeff\u200c\u200b\u200c\u200b\u200c\ufeff\u200b\u200d\u200c\u200d\u200b\u200c\u200c\u200d\u200c\u200d\u200c\ufeff\u200c\u200b\u200b\ufeff\ufeff\u200c\u200b\u200d\u200b\u200d\u200c\ufeff\ufeffβ€Œcodeβ€‹β€‹β€‹β€‹β€Œ\u200d\ufeff\u200b\u200d\u200b\u200d\u200c\u200d\ufeff\ufeff\u200c\ufeff\u200b\u200d\u200c\u200d\u200d\u200c\u200c\u200d\u200c\ufeff\u200c\u200d\u200d\u200c\u200c\u200d\ufeff\u200d\u200b\u200d\u200b\u200d\u200b\ufeff\u200d\u200d\u200b\u200d\u200b\u200d\u200c\ufeff\u200b\ufeff\u200c\u200d\u200b\u200c\u200c\u200d\ufeff\u200d\u200c\u200d\u200d\u200c\u200c\ufeff\u200c\u200b\u200c\ufeff\u200d\u200c\u200b\u200d\ufeff\u200d\u200c\u200d\u200d\u200c\u200c\u200d\ufeff\ufeff\u200b\u200d\u200b\u200d\u200b\u200d\ufeff\u200b\u200b\u200d\u200b\u200d\u200c\u200d\u200d\u200b\u200c\ufeff\u200b\u200d\u200c\u200d\u200c\u200c\u200c\u200d\u200c\u200d\u200b\u200d\u200b\u200d\u200b\ufeff\u200d\u200d\u200b\u200d\u200b\u200d\u200b\u200d\ufeff\ufeff\u200c\ufeff\u200b\u200b\u200c\ufeff\u200b\u200d\u200c\u200d\u200c\u200c\u200c\ufeff\u200b\ufeff\u200c\u200d\u200c\u200c\u200c\u200d\ufeff\u200d\u200c\ufeff\u200c\u200b\u200c\u200d\u200b\u200c\u200c\ufeff\u200c\u200b\u200c\u200d\u200d\u200c\u200c\u200d\ufeff\ufeff\u200c\u200d\ufeff\u200d\u200b\u200d\ufeff\ufeff\u200c\u200d\u200d\u200c\u200c\u200d\ufeff\u200d\u200c\ufeff\u200c\u200b\u200c\u200d\u200c\u200c\u200c\u200d\ufeff\u200d\u200c\ufeff\u200c\u200b\u200b\u200d\ufeff\ufeff\u200c\u200d\u200c\u200c\u200c\u200d\u200c\u200b\u200c\u200d\u200d\u200c\u200c\ufeff\u200c\u200b\u200b\u200d\ufeff\ufeff\u200c\u200d\ufeff\u200c\u200c\u200d\ufeff\ufeff\u200c\u200d\u200c\u200b\u200c\u200d\u200c\u200c\u200b\ufeff\ufeff\u200c\u200c\ufeff\u200b\u200b\u200c\ufeff\u200b\u200d\u200c\u200d\u200c\u200c\u200c\ufeff\u200b\ufeff\u200c\u200d\u200c\u200c\u200c\u200d\ufeff\u200d\u200c\ufeff\u200c\u200b\u200c\u200d\u200b\u200c\u200c\ufeff\u200c\u200b\u200c\u200d\u200d\u200c\u200c\u200d\ufeff\ufeff\u200c\u200d\ufeff\u200d\u200b\ufeff\u200d\ufeff\u200c\u200d\u200d\u200c\u200c\u200d\u200c\u200b\u200b\ufeff\ufeff\u200c\u200b\ufeff\u200c\ufeff\u200b\ufeff\u200b\u200c\u200b\ufeff\u200c\u200d\u200c\u200d\u200c\u200c\u200b\ufeff\u200b\u200d\u200c\u200d\u200b\ufeff\u200b\ufeff\u200d\u200b\u200c\u200d\u200b\u200c\u200b\u200d\ufeff\u200c\u200c\u200d\u200b\u200c\u200b\ufeff\u200b\u200c\u200b\ufeff\u200c\u200d\u200b\ufeff\u200d\u200b\u200b\u200d\ufeff\u200c\u200b\ufeff\u200c\u200b\u200b\ufeff\u200d\u200b\u200b\ufeff\u200c\u200c\u200b\ufeff\u200b\u200d\u200b\u200d\ufeff\u200c\u200b\ufeff\u200d\u200b\u200b\ufeff\u200c\ufeff\u200c\u200d\u200c\u200c\u200b\ufeff\u200b\u200d\u200b\u200d\ufeff\u200c\u200b\ufeff\u200b\u200b\u200c\u200d\u200b\ufeff\u200b\ufeff\u200b\u200d\u200c\u200d\u200b\u200d\u200b\ufeff\u200c\u200b\u200c\u200d\u200c\u200b\u200b\ufeff\u200c\u200b\u200b\ufeff\u200b\u200d\u200c\u200d\u200b\ufeff\u200b\ufeff\u200d\u200c\u200b\ufeff\u200c\u200b\u200c\u200d\u200b\u200d\u200b\ufeff\u200d\ufeff\u200c\ufeff\u200c\u200b\u200c\ufeff\u200d\u200c\u200c\ufeff\u200b\u200b\u200c\u200d\u200c\u200c\u200b\ufeff\ufeff\u200c\u200c\ufeff\u200b\ufeff\u200c\u200d\u200d\u200c\u200c\u200d\ufeff\u200c\u200c\ufeff\u200b\u200b\u200c\u200d\ufeff\u200b\u200c\u200d\u200c\u200c\u200c\u200b\u200b\u200d\u200c\u200d\ufeff\u200b\u200c\u200d\ufeff\ufeff\u200c\u200d\u200b\ufeff\u200c\u200d\u200d\ufeff\u200b\ufeff\u200d\ufeff\u200c\ufeff\u200b\u200b\u200c\u200d\u200b\u200c\u200c\ufeff\u200c\u200b\u200c\u200d\u200d\u200b\u200b\ufeff\ufeff\u200c\u200c\u200d\u200b\u200d\u200c\u200d\ufeff\ufeff\u200c\u200d\u200c\u200b\u200c\ufeff\u200d\u200c\u200b\u200d\u200c\u200c\u200b\ufeff\u200c\u200c\u200c\u200b\u200b\u200d\u200c\u200c\ufeff\ufeff\u200c\u200d\u200d\ufeff\u200c\u200d\u200c\u200c\u200c\ufeff\u200d\u200c\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\ufeff\u200c\u200b\u200c\u200b\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\ufeff\u200c\u200b\u200c\u200b\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\u200d\u200b\ufeff\u200b\u200d\u200b\ufeff\u200b\u200c\u200b\ufeff\u200c\u200d\u200b\ufeff\u200b\u200c\u200c\u200d\u200c\u200c\u200b\ufeff\u200b\u200c\u200b\ufeff\u200d\u200c\u200c\u200d\u200b\ufeff\u200c\u200d\u200c\u200c\u200b\ufeff\u200b\u200c\u200c\u200d\u200b\ufeff\u200b\ufeff\u200c\u200d\u200c\u200d\u200b\u200d\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\u200d\u200b\ufeff\u200b\u200d\u200b\u200d\u200c\u200c\u200b\ufeff\u200c\u200c\u200c\u200b\u200c\u200b\u200b\u200d\ufeff\u200d\u200c\u200d\u200b\ufeff\u200c\u200d\u200d\u200b\u200c\u200d\u200d\u200c\u200c\u200d\ufeff\u200b\u200c\u200d\u200c\u200b\u200c\ufeff\u200b\u200d\u200c\u200d\u200c\u200c\u200c\u200d\ufeff\u200d\u200b\u200d\u200c\u200c\u200b\ufeff\u200c\u200c\u200c\u200b\u200b\u200d\u200c\u200c\ufeff\ufeff\u200c\u200d\u200d\ufeff\u200c\u200d\u200c\u200c\u200c\ufeff\u200d\u200c\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\ufeff\u200c\u200b\u200c\u200b\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\ufeff\u200c\u200b\u200c\u200b\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\u200d\u200b\ufeff\u200b\u200d\u200b\ufeff\u200b\u200c\u200b\ufeff\u200b\u200b\u200b\ufeff\u200b\ufeff\u200c\u200d\u200b\u200d\u200b\ufeff\u200b\u200d\u200b\ufeff\u200c\u200c\u200c\u200d\u200c\u200c\u200b\ufeff\u200b\u200b\u200c\u200d\u200c\u200c\u200b\ufeff\u200d\u200b\u200b\ufeff\u200c\u200b\u200b\ufeff\u200b\u200d\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\u200d\u200b\ufeff\u200b\u200d\u200b\u200d\u200c\u200c\u200b\ufeff\u200c\u200c\u200c\u200b\u200c\u200b\u200b\u200d\ufeff\u200d\u200c\ufeff\u200c\u200b\u200c\u200d\u200c\u200c\u200c\ufeff\u200d\u200b\u200c\ufeff\u200c\u200b\u200b\ufeff\ufeff\ufeff\u200c\u200d\u200b\u200d\u200c\u200d\u200b\u200c\u200c\ufeff\u200b\ufeff\u200c\u200d\u200c\u200c\u200c\u200c\u200c\u200c\u200c\ufeff\u200b\u200d\u200c\u200d\ufeff\u200b\u200b\ufeff\ufeff\u200c\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\u200d\u200c\u200b\u200c\u200d\u200c\ufeff\u200b\u200b\u200c\ufeff\u200b\u200d\u200c\u200d\u200c\u200c\u200c\ufeff\u200b\ufeff\u200c\u200d\u200c\u200c\u200c\u200d\ufeff\u200d\u200c\ufeff\u200c\u200b\u200c\u200d\u200b\u200c\u200c\ufeff\u200c\u200b\u200c\u200d\u200d\u200c\u200c\u200d\ufeff\ufeff\u200c\u200d\ufeff\u200d\u200b\u200d\u200c\u200d\u200c\u200d\u200d\u200c\u200c\u200d\u200c\u200b\u200b\ufeff\ufeff\u200c\u200b\ufeff\u200c\ufeff\u200b\ufeff\u200b\u200c\u200b\ufeff\u200c\u200d\u200c\u200d\u200c\u200c\u200b\ufeff\u200b\u200d\u200c\u200d\u200b\ufeff\u200b\ufeff\u200d\u200b\u200c\u200d\u200b\u200c\u200b\u200d\ufeff\u200c\u200c\u200d\u200b\u200c\u200b\ufeff\u200b\u200c\u200b\ufeff\u200c\u200d\u200b\ufeff\u200d\u200b\u200b\u200d\ufeff\u200c\u200b\ufeff\u200c\u200b\u200b\ufeff\u200d\u200b\u200b\ufeff\u200c\u200c\u200b\ufeff\u200b\u200d\u200b\u200d\ufeff\u200c\u200b\ufeff\u200d\u200b\u200b\ufeff\u200c\ufeff\u200c\u200d\u200c\u200c\u200b\ufeff\u200b\u200d\u200b\u200d\ufeff\u200c\u200b\ufeff\u200b\u200b\u200c\u200d\u200b\ufeff\u200b\ufeff\u200b\u200d\u200c\u200d\u200b\u200d\u200b\ufeff\u200c\u200b\u200c\u200d\u200c\u200b\u200b\ufeff\u200c\u200b\u200b\ufeff\u200b\u200d\u200c\u200d\u200b\ufeff\u200b\ufeff\u200d\u200c\u200b\ufeff\u200c\u200b\u200c\u200d\u200b\u200d\u200b\u200d\u200c\u200d\u200c\ufeff\u200c\u200b\u200c\ufeff\u200d\u200c\u200c\ufeff\u200b\u200b\u200c\u200d\u200c\u200c\u200b\ufeff\ufeff\u200c\u200c\ufeff\u200b\ufeff\u200c\u200d\u200d\u200c\u200c\u200d\ufeff\u200c\u200c\ufeff\u200b\u200b\u200c\u200d\ufeff\u200b\u200c\u200d\u200c\u200c\u200c\u200b\u200b\u200d\u200c\u200d\ufeff\u200b\u200c\u200d\ufeff\ufeff\u200c\u200d\u200b\ufeff\u200c\u200d\u200d\ufeff\u200b\u200d\u200c\u200d\u200c\ufeff\u200b\u200b\u200c\u200d\u200b\u200c\u200c\ufeff\u200c\u200b\u200c\u200d\u200d\u200b\u200b\ufeff\ufeff\u200c\u200c\u200d\u200b\u200d\u200c\u200d\ufeff\ufeff\u200c\u200d\u200c\u200b\u200c\ufeff\u200d\u200c\u200b\u200d\u200c\u200c\u200b\ufeff\u200c\u200c\u200c\u200b\u200b\u200d\u200c\u200c\ufeff\ufeff\u200c\u200d\u200d\ufeff\u200c\u200d\u200c\u200c\u200c\ufeff\u200d\u200c\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\ufeff\u200c\u200b\u200c\u200b\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\ufeff\u200c\u200b\u200c\u200b\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\u200d\u200b\ufeff\u200b\u200d\u200b\ufeff\u200b\u200c\u200b\ufeff\u200c\u200d\u200b\ufeff\u200b\u200c\u200c\u200d\u200c\u200c\u200b\ufeff\u200b\u200c\u200b\ufeff\u200d\u200c\u200c\u200d\u200b\ufeff\u200c\u200d\u200c\u200c\u200b\ufeff\u200b\u200c\u200c\u200d\u200b\ufeff\u200b\ufeff\u200c\u200d\u200c\u200d\u200b\u200d\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\u200d\u200b\ufeff\u200b\u200d\u200b\u200d\u200c\u200c\u200b\ufeff\u200c\u200c\u200c\u200b\u200c\u200b\u200b\u200d\ufeff\u200d\u200c\u200d\u200b\ufeff\u200c\u200d\u200d\u200b\u200c\u200d\u200d\u200c\u200c\u200d\ufeff\u200b\u200c\u200d\u200c\u200b\u200c\ufeff\u200b\u200d\u200c\u200d\u200c\u200c\u200c\u200d\ufeff\u200d\u200b\u200d\u200c\u200c\u200b\ufeff\u200c\u200c\u200c\u200b\u200b\u200d\u200c\u200c\ufeff\ufeff\u200c\u200d\u200d\ufeff\u200c\u200d\u200c\u200c\u200c\ufeff\u200d\u200c\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\ufeff\u200c\u200b\u200c\u200b\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\ufeff\u200c\u200b\u200c\u200b\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\u200d\u200b\ufeff\u200b\u200d\u200b\ufeff\u200b\u200c\u200b\ufeff\u200b\u200b\u200b\ufeff\u200b\ufeff\u200c\u200d\u200b\u200d\u200b\ufeff\u200b\u200d\u200b\ufeff\u200c\u200c\u200c\u200d\u200c\u200c\u200b\ufeff\u200b\u200b\u200c\u200d\u200c\u200c\u200b\ufeff\u200d\u200b\u200b\ufeff\u200c\u200b\u200b\ufeff\u200b\u200d\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\u200d\u200b\ufeff\u200b\u200d\u200b\u200d\u200c\u200c\u200b\ufeff\u200c\u200c\u200c\u200b\u200c\u200b\u200b\u200d\ufeff\u200d\u200c\ufeff\u200c\u200b\u200c\u200d\u200c\u200c\u200c\ufeff\u200d\u200b\u200c\ufeff\u200c\u200b\u200b\u200d\u200c\u200d\u200c\u200d\u200d\u200c\u200c\ufeff\u200b\ufeff\u200c\u200b\u200c\u200b\u200c\ufeff\u200b\u200d\u200c\u200d\u200b\u200c\u200c\u200d\u200c\u200d\u200c\ufeff\u200c\u200b\u200b\ufeff\ufeff\u200c\u200b\u200d\u200b\u200d\u200c\ufeff\ufeffβ€Œ, > blockquote, - list item, 1. numbered list item, \u200b\u200b\u200b\u200b\u200c\ufeff\u200d\ufeff\u200b\u200d\u200b\u200d\u200c\u200d\ufeff\ufeff\u200c\ufeff\u200b\u200d\u200c\u200d\u200d\u200c\u200c\u200d\u200c\ufeff\u200c\u200d\u200d\u200c\u200c\u200d\ufeff\u200d\u200b\u200d\u200b\u200d\u200b\ufeff\u200d\u200d\u200b\u200d\u200b\u200d\u200c\ufeff\u200b\ufeff\u200c\u200d\u200b\u200c\u200c\u200d\ufeff\u200d\u200c\u200d\u200d\u200c\u200c\ufeff\u200c\u200b\u200c\ufeff\u200d\u200c\u200b\u200d\ufeff\u200d\u200c\u200d\u200d\u200c\u200c\u200d\ufeff\ufeff\u200b\u200d\u200b\u200d\u200b\u200d\ufeff\u200b\u200b\u200d\u200b\u200d\u200c\u200d\u200d\u200b\u200c\ufeff\u200b\u200d\u200c\u200d\u200c\u200c\u200c\u200d\u200c\u200d\u200b\u200d\u200b\u200d\u200b\ufeff\u200d\u200d\u200b\u200d\u200b\u200d\u200b\u200d\ufeff\ufeff\u200c\ufeff\u200b\u200b\u200c\ufeff\u200b\u200d\u200c\u200d\u200c\u200c\u200c\ufeff\u200b\ufeff\u200c\u200d\u200c\u200c\u200c\u200d\ufeff\u200d\u200c\ufeff\u200c\u200b\u200c\u200d\u200b\u200c\u200c\ufeff\u200c\u200b\u200c\u200d\u200d\u200c\u200c\u200d\ufeff\ufeff\u200c\u200d\ufeff\u200d\u200b\u200d\ufeff\ufeff\u200c\u200d\u200d\u200c\u200c\u200d\ufeff\u200d\u200c\ufeff\u200c\u200b\u200c\u200d\u200c\u200c\u200c\u200d\ufeff\u200d\u200c\ufeff\u200c\u200b\u200b\u200d\ufeff\ufeff\u200c\u200d\u200c\u200c\u200c\u200d\u200c\u200b\u200c\u200d\u200d\u200c\u200c\ufeff\u200c\u200b\u200b\u200d\ufeff\ufeff\u200c\u200d\ufeff\u200c\u200c\u200d\ufeff\ufeff\u200c\u200d\u200c\u200b\u200c\u200d\u200c\u200c\u200b\ufeff\ufeff\u200c\u200c\ufeff\u200b\u200b\u200c\ufeff\u200b\u200d\u200c\u200d\u200c\u200c\u200c\ufeff\u200b\ufeff\u200c\u200d\u200c\u200c\u200c\u200d\ufeff\u200d\u200c\ufeff\u200c\u200b\u200c\u200d\u200b\u200c\u200c\ufeff\u200c\u200b\u200c\u200d\u200d\u200c\u200c\u200d\ufeff\ufeff\u200c\u200d\ufeff\u200d\u200b\ufeff\u200d\ufeff\u200c\u200d\u200d\u200c\u200c\u200d\u200c\u200b\u200b\ufeff\ufeff\u200c\u200b\ufeff\u200c\ufeff\u200b\ufeff\u200b\u200c\u200b\ufeff\u200c\u200d\u200c\u200d\u200c\u200c\u200b\ufeff\u200b\u200d\u200c\u200d\u200b\ufeff\u200b\ufeff\u200d\u200b\u200c\u200d\u200b\u200c\u200b\u200d\ufeff\u200c\u200c\u200d\u200b\u200c\u200b\ufeff\u200b\u200c\u200b\ufeff\u200c\u200d\u200b\ufeff\u200d\u200b\u200b\u200d\ufeff\u200c\u200b\ufeff\u200c\u200b\u200b\ufeff\u200d\u200b\u200b\ufeff\u200c\u200c\u200b\ufeff\u200b\u200d\u200b\u200d\ufeff\u200c\u200b\ufeff\u200d\u200b\u200b\ufeff\u200c\ufeff\u200c\u200d\u200c\u200c\u200b\ufeff\u200b\u200d\u200b\u200d\ufeff\u200c\u200b\ufeff\u200b\u200b\u200c\u200d\u200b\ufeff\u200b\ufeff\u200b\u200d\u200c\u200d\u200b\u200d\u200b\ufeff\u200c\u200b\u200c\u200d\u200c\u200b\u200b\ufeff\u200c\u200b\u200b\ufeff\u200b\u200d\u200c\u200d\u200b\ufeff\u200b\ufeff\u200d\u200c\u200b\ufeff\u200c\u200b\u200c\u200d\u200b\u200d\u200b\ufeff\u200d\ufeff\u200c\ufeff\u200c\u200b\u200c\ufeff\u200d\u200c\u200c\ufeff\u200b\u200b\u200c\u200d\u200c\u200c\u200b\ufeff\ufeff\u200c\u200c\ufeff\u200b\ufeff\u200c\u200d\u200d\u200c\u200c\u200d\ufeff\u200c\u200c\ufeff\u200b\u200b\u200c\u200d\ufeff\u200b\u200c\u200d\u200c\u200c\u200c\u200b\u200b\u200d\u200c\u200d\ufeff\u200b\u200c\u200d\ufeff\ufeff\u200c\u200d\u200b\ufeff\u200c\u200d\u200d\ufeff\u200b\ufeff\u200d\ufeff\u200c\ufeff\u200b\u200b\u200c\u200d\u200b\u200c\u200c\ufeff\u200c\u200b\u200c\u200d\u200d\u200b\u200b\ufeff\ufeff\u200c\u200c\u200d\u200b\u200d\u200c\u200d\ufeff\ufeff\u200c\u200d\u200c\u200b\u200c\ufeff\u200d\u200c\u200b\u200d\u200c\u200c\u200b\ufeff\u200c\u200c\u200c\u200b\u200b\u200d\u200c\u200c\ufeff\ufeff\u200c\u200d\u200d\ufeff\u200c\u200d\u200c\u200c\u200c\ufeff\u200d\u200c\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\ufeff\u200c\u200b\u200c\u200b\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\ufeff\u200c\u200b\u200c\u200b\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\u200d\u200b\ufeff\u200b\u200d\u200b\ufeff\u200b\u200c\u200b\ufeff\u200c\u200d\u200b\ufeff\u200b\u200c\u200c\u200d\u200c\u200c\u200b\ufeff\u200b\u200c\u200b\ufeff\u200d\u200c\u200c\u200d\u200b\ufeff\u200c\u200d\u200c\u200c\u200b\ufeff\u200b\u200c\u200c\u200d\u200b\ufeff\u200b\ufeff\u200c\u200d\u200c\u200d\u200b\u200d\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\u200d\u200b\ufeff\u200b\u200d\u200b\u200d\u200c\u200c\u200b\ufeff\u200c\u200c\u200c\u200b\u200c\u200b\u200b\u200d\ufeff\u200d\u200c\u200d\u200b\ufeff\u200c\u200d\u200d\u200b\u200c\u200d\u200d\u200c\u200c\u200d\ufeff\u200b\u200c\u200d\u200c\u200b\u200c\ufeff\u200b\u200d\u200c\u200d\u200c\u200c\u200c\u200d\ufeff\u200d\u200b\u200d\u200c\u200c\u200b\ufeff\u200c\u200c\u200c\u200b\u200b\u200d\u200c\u200c\ufeff\ufeff\u200c\u200d\u200d\ufeff\u200c\u200d\u200c\u200c\u200c\ufeff\u200d\u200c\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\ufeff\u200c\u200b\u200c\u200b\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\ufeff\u200c\u200b\u200c\u200b\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\u200d\u200b\ufeff\u200b\u200d\u200b\ufeff\u200c\ufeff\u200b\ufeff\u200c\u200b\u200b\ufeff\u200b\u200c\u200b\ufeff\u200d\u200b\u200b\ufeff\u200c\ufeff\u200c\u200d\u200c\u200d\u200b\ufeff\u200b\u200d\u200c\u200d\u200b\ufeff\u200b\ufeff\u200c\u200c\u200c\u200d\u200b\ufeff\u200b\ufeff\u200c\ufeff\u200b\ufeff\u200b\u200c\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\u200d\u200b\ufeff\u200b\u200d\u200b\u200d\u200c\u200c\u200b\ufeff\u200c\u200c\u200c\u200b\u200c\u200b\u200b\u200d\ufeff\u200d\u200c\ufeff\u200c\u200b\u200c\u200d\u200c\u200c\u200c\ufeff\u200d\u200b\u200c\ufeff\u200c\u200b\u200b\ufeff\ufeff\ufeff\u200c\u200d\u200b\u200d\u200c\u200d\u200b\u200c\u200c\ufeff\u200b\ufeff\u200c\u200d\u200c\u200c\u200c\u200c\u200c\u200c\u200c\ufeff\u200b\u200d\u200c\u200d\ufeff\u200b\u200b\ufeff\ufeff\u200c\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\u200d\u200c\u200b\u200c\u200d\u200c\ufeff\u200b\u200b\u200c\ufeff\u200b\u200d\u200c\u200d\u200c\u200c\u200c\ufeff\u200b\ufeff\u200c\u200d\u200c\u200c\u200c\u200d\ufeff\u200d\u200c\ufeff\u200c\u200b\u200c\u200d\u200b\u200c\u200c\ufeff\u200c\u200b\u200c\u200d\u200d\u200c\u200c\u200d\ufeff\ufeff\u200c\u200d\ufeff\u200d\u200b\u200d\u200c\u200d\u200c\u200d\u200d\u200c\u200c\u200d\u200c\u200b\u200b\ufeff\ufeff\u200c\u200b\ufeff\u200c\ufeff\u200b\ufeff\u200b\u200c\u200b\ufeff\u200c\u200d\u200c\u200d\u200c\u200c\u200b\ufeff\u200b\u200d\u200c\u200d\u200b\ufeff\u200b\ufeff\u200d\u200b\u200c\u200d\u200b\u200c\u200b\u200d\ufeff\u200c\u200c\u200d\u200b\u200c\u200b\ufeff\u200b\u200c\u200b\ufeff\u200c\u200d\u200b\ufeff\u200d\u200b\u200b\u200d\ufeff\u200c\u200b\ufeff\u200c\u200b\u200b\ufeff\u200d\u200b\u200b\ufeff\u200c\u200c\u200b\ufeff\u200b\u200d\u200b\u200d\ufeff\u200c\u200b\ufeff\u200d\u200b\u200b\ufeff\u200c\ufeff\u200c\u200d\u200c\u200c\u200b\ufeff\u200b\u200d\u200b\u200d\ufeff\u200c\u200b\ufeff\u200b\u200b\u200c\u200d\u200b\ufeff\u200b\ufeff\u200b\u200d\u200c\u200d\u200b\u200d\u200b\ufeff\u200c\u200b\u200c\u200d\u200c\u200b\u200b\ufeff\u200c\u200b\u200b\ufeff\u200b\u200d\u200c\u200d\u200b\ufeff\u200b\ufeff\u200d\u200c\u200b\ufeff\u200c\u200b\u200c\u200d\u200b\u200d\u200b\u200d\u200c\u200d\u200c\ufeff\u200c\u200b\u200c\ufeff\u200d\u200c\u200c\ufeff\u200b\u200b\u200c\u200d\u200c\u200c\u200b\ufeff\ufeff\u200c\u200c\ufeff\u200b\ufeff\u200c\u200d\u200d\u200c\u200c\u200d\ufeff\u200c\u200c\ufeff\u200b\u200b\u200c\u200d\ufeff\u200b\u200c\u200d\u200c\u200c\u200c\u200b\u200b\u200d\u200c\u200d\ufeff\u200b\u200c\u200d\ufeff\ufeff\u200c\u200d\u200b\ufeff\u200c\u200d\u200d\ufeff\u200b\u200d\u200c\u200d\u200c\ufeff\u200b\u200b\u200c\u200d\u200b\u200c\u200c\ufeff\u200c\u200b\u200c\u200d\u200d\u200b\u200b\ufeff\ufeff\u200c\u200c\u200d\u200b\u200d\u200c\u200d\ufeff\ufeff\u200c\u200d\u200c\u200b\u200c\ufeff\u200d\u200c\u200b\u200d\u200c\u200c\u200b\ufeff\u200c\u200c\u200c\u200b\u200b\u200d\u200c\u200c\ufeff\ufeff\u200c\u200d\u200d\ufeff\u200c\u200d\u200c\u200c\u200c\ufeff\u200d\u200c\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\ufeff\u200c\u200b\u200c\u200b\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\ufeff\u200c\u200b\u200c\u200b\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\u200d\u200b\ufeff\u200b\u200d\u200b\ufeff\u200b\u200c\u200b\ufeff\u200c\u200d\u200b\ufeff\u200b\u200c\u200c\u200d\u200c\u200c\u200b\ufeff\u200b\u200c\u200b\ufeff\u200d\u200c\u200c\u200d\u200b\ufeff\u200c\u200d\u200c\u200c\u200b\ufeff\u200b\u200c\u200c\u200d\u200b\ufeff\u200b\ufeff\u200c\u200d\u200c\u200d\u200b\u200d\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\u200d\u200b\ufeff\u200b\u200d\u200b\u200d\u200c\u200c\u200b\ufeff\u200c\u200c\u200c\u200b\u200c\u200b\u200b\u200d\ufeff\u200d\u200c\u200d\u200b\ufeff\u200c\u200d\u200d\u200b\u200c\u200d\u200d\u200c\u200c\u200d\ufeff\u200b\u200c\u200d\u200c\u200b\u200c\ufeff\u200b\u200d\u200c\u200d\u200c\u200c\u200c\u200d\ufeff\u200d\u200b\u200d\u200c\u200c\u200b\ufeff\u200c\u200c\u200c\u200b\u200b\u200d\u200c\u200c\ufeff\ufeff\u200c\u200d\u200d\ufeff\u200c\u200d\u200c\u200c\u200c\ufeff\u200d\u200c\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\ufeff\u200c\u200b\u200c\u200b\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\ufeff\u200c\u200b\u200c\u200b\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\u200d\u200b\ufeff\u200b\u200d\u200b\ufeff\u200c\ufeff\u200b\ufeff\u200c\u200b\u200b\ufeff\u200b\u200c\u200b\ufeff\u200d\u200b\u200b\ufeff\u200c\ufeff\u200c\u200d\u200c\u200d\u200b\ufeff\u200b\u200d\u200c\u200d\u200b\ufeff\u200b\ufeff\u200c\u200c\u200c\u200d\u200b\ufeff\u200b\ufeff\u200c\ufeff\u200b\ufeff\u200b\u200c\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\u200d\u200b\ufeff\u200b\u200d\u200b\u200d\u200c\u200c\u200b\ufeff\u200c\u200c\u200c\u200b\u200c\u200b\u200b\u200d\ufeff\u200d\u200c\ufeff\u200c\u200b\u200c\u200d\u200c\u200c\u200c\ufeff\u200d\u200b\u200c\ufeff\u200c\u200b\u200b\u200d\u200c\u200d\u200c\u200d\u200d\u200c\u200c\ufeff\u200b\ufeff\u200c\u200b\u200c\u200b\u200c\ufeff\u200b\u200d\u200c\u200d\u200b\u200c\u200c\u200d\u200c\u200d\u200c\ufeff\u200c\u200b\u200b\ufeff\ufeff\u200c\u200b\u200d\u200b\u200d\u200c\ufeff\ufeff\u200clink\u200b\u200b\u200b\u200b\u200c\ufeff\u200d\ufeff\u200b\u200d\u200b\u200d\u200c\u200d\ufeff\ufeff\u200c\ufeff\u200b\u200d\u200c\u200d\u200d\u200c\u200c\u200d\u200c\ufeff\u200c\u200d\u200d\u200c\u200c\u200d\ufeff\u200d\u200b\u200d\u200b\u200d\u200b\ufeff\u200d\u200d\u200b\u200d\u200b\u200d\u200c\ufeff\u200b\ufeff\u200c\u200d\u200b\u200c\u200c\u200d\ufeff\u200d\u200c\u200d\u200d\u200c\u200c\ufeff\u200c\u200b\u200c\ufeff\u200d\u200c\u200b\u200d\ufeff\u200d\u200c\u200d\u200d\u200c\u200c\u200d\ufeff\ufeff\u200b\u200d\u200b\u200d\u200b\u200d\ufeff\u200b\u200b\u200d\u200b\u200d\u200c\u200d\u200d\u200b\u200c\ufeff\u200b\u200d\u200c\u200d\u200c\u200c\u200c\u200d\u200c\u200d\u200b\u200d\u200b\u200d\u200b\ufeff\u200d\u200d\u200b\u200d\u200b\u200d\u200b\u200d\ufeff\ufeff\u200c\ufeff\u200b\u200b\u200c\ufeff\u200b\u200d\u200c\u200d\u200c\u200c\u200c\ufeff\u200b\ufeff\u200c\u200d\u200c\u200c\u200c\u200d\ufeff\u200d\u200c\ufeff\u200c\u200b\u200c\u200d\u200b\u200c\u200c\ufeff\u200c\u200b\u200c\u200d\u200d\u200c\u200c\u200d\ufeff\ufeff\u200c\u200d\ufeff\u200d\u200b\u200d\ufeff\ufeff\u200c\u200d\u200d\u200c\u200c\u200d\ufeff\u200d\u200c\ufeff\u200c\u200b\u200c\u200d\u200c\u200c\u200c\u200d\ufeff\u200d\u200c\ufeff\u200c\u200b\u200b\u200d\ufeff\ufeff\u200c\u200d\u200c\u200c\u200c\u200d\u200c\u200b\u200c\u200d\u200d\u200c\u200c\ufeff\u200c\u200b\u200b\u200d\ufeff\ufeff\u200c\u200d\ufeff\u200c\u200c\u200d\ufeff\ufeff\u200c\u200d\u200c\u200b\u200c\u200d\u200c\u200c\u200b\ufeff\ufeff\u200c\u200c\ufeff\u200b\u200b\u200c\ufeff\u200b\u200d\u200c\u200d\u200c\u200c\u200c\ufeff\u200b\ufeff\u200c\u200d\u200c\u200c\u200c\u200d\ufeff\u200d\u200c\ufeff\u200c\u200b\u200c\u200d\u200b\u200c\u200c\ufeff\u200c\u200b\u200c\u200d\u200d\u200c\u200c\u200d\ufeff\ufeff\u200c\u200d\ufeff\u200d\u200b\ufeff\u200d\ufeff\u200c\u200d\u200d\u200c\u200c\u200d\u200c\u200b\u200b\ufeff\ufeff\u200c\u200b\ufeff\u200c\ufeff\u200b\ufeff\u200b\u200c\u200b\ufeff\u200c\u200d\u200c\u200d\u200c\u200c\u200b\ufeff\u200b\u200d\u200c\u200d\u200b\ufeff\u200b\ufeff\u200d\u200b\u200c\u200d\u200b\u200c\u200b\u200d\ufeff\u200c\u200c\u200d\u200b\u200c\u200b\ufeff\u200b\u200c\u200b\ufeff\u200c\u200d\u200b\ufeff\u200d\u200b\u200b\u200d\ufeff\u200c\u200b\ufeff\u200c\u200b\u200b\ufeff\u200d\u200b\u200b\ufeff\u200c\u200c\u200b\ufeff\u200b\u200d\u200b\u200d\ufeff\u200c\u200b\ufeff\u200d\u200b\u200b\ufeff\u200c\ufeff\u200c\u200d\u200c\u200c\u200b\ufeff\u200b\u200d\u200b\u200d\ufeff\u200c\u200b\ufeff\u200b\u200b\u200c\u200d\u200b\ufeff\u200b\ufeff\u200b\u200d\u200c\u200d\u200b\u200d\u200b\ufeff\u200c\u200b\u200c\u200d\u200c\u200b\u200b\ufeff\u200c\u200b\u200b\ufeff\u200b\u200d\u200c\u200d\u200b\ufeff\u200b\ufeff\u200d\u200c\u200b\ufeff\u200c\u200b\u200c\u200d\u200b\u200d\u200b\ufeff\u200d\ufeff\u200c\ufeff\u200c\u200b\u200c\ufeff\u200d\u200c\u200c\ufeff\u200b\u200b\u200c\u200d\u200c\u200c\u200b\ufeff\ufeff\u200c\u200c\ufeff\u200b\ufeff\u200c\u200d\u200d\u200c\u200c\u200d\ufeff\u200c\u200c\ufeff\u200b\u200b\u200c\u200d\ufeff\u200b\u200c\u200d\u200c\u200c\u200c\u200b\u200b\u200d\u200c\u200d\ufeff\u200b\u200c\u200d\ufeff\ufeff\u200c\u200d\u200b\ufeff\u200c\u200d\u200d\ufeff\u200b\ufeff\u200d\ufeff\u200c\ufeff\u200b\u200b\u200c\u200d\u200b\u200c\u200c\ufeff\u200c\u200b\u200c\u200d\u200d\u200b\u200b\ufeff\ufeff\u200c\u200c\u200d\u200b\u200d\u200c\u200d\ufeff\ufeff\u200c\u200d\u200c\u200b\u200c\ufeff\u200d\u200c\u200b\u200d\u200c\u200c\u200b\ufeff\u200c\u200c\u200c\u200b\u200b\u200d\u200c\u200c\ufeff\ufeff\u200c\u200d\u200d\ufeff\u200c\u200d\u200c\u200c\u200c\ufeff\u200d\u200c\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\ufeff\u200c\u200b\u200c\u200b\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\ufeff\u200c\u200b\u200c\u200b\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\u200d\u200b\ufeff\u200b\u200d\u200b\ufeff\u200b\u200c\u200b\ufeff\u200c\u200d\u200b\ufeff\u200b\u200c\u200c\u200d\u200c\u200c\u200b\ufeff\u200b\u200c\u200b\ufeff\u200d\u200c\u200c\u200d\u200b\ufeff\u200c\u200d\u200c\u200c\u200b\ufeff\u200b\u200c\u200c\u200d\u200b\ufeff\u200b\ufeff\u200c\u200d\u200c\u200d\u200b\u200d\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\u200d\u200b\ufeff\u200b\u200d\u200b\u200d\u200c\u200c\u200b\ufeff\u200c\u200c\u200c\u200b\u200c\u200b\u200b\u200d\ufeff\u200d\u200c\u200d\u200b\ufeff\u200c\u200d\u200d\u200b\u200c\u200d\u200d\u200c\u200c\u200d\ufeff\u200b\u200c\u200d\u200c\u200b\u200c\ufeff\u200b\u200d\u200c\u200d\u200c\u200c\u200c\u200d\ufeff\u200d\u200b\u200d\u200c\u200c\u200b\ufeff\u200c\u200c\u200c\u200b\u200b\u200d\u200c\u200c\ufeff\ufeff\u200c\u200d\u200d\ufeff\u200c\u200d\u200c\u200c\u200c\ufeff\u200d\u200c\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\ufeff\u200c\u200b\u200c\u200b\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\ufeff\u200c\u200b\u200c\u200b\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\u200d\u200b\ufeff\u200b\u200d\u200b\ufeff\u200b\ufeff\u200b\ufeff\u200b\u200c\u200c\u200d\u200b\u200c\u200b\ufeff\u200d\u200c\u200b\ufeff\u200d\u200c\u200b\ufeff\u200b\u200c\u200b\ufeff\u200b\u200d\u200b\ufeff\u200d\u200c\u200b\ufeff\u200c\u200c\u200b\ufeff\u200b\u200d\u200b\ufeff\u200b\u200c\u200c\u200d\u200b\u200d\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\u200d\u200b\ufeff\u200b\u200d\u200b\u200d\u200c\u200c\u200b\ufeff\u200c\u200c\u200c\u200b\u200c\u200b\u200b\u200d\ufeff\u200d\u200c\ufeff\u200c\u200b\u200c\u200d\u200c\u200c\u200c\ufeff\u200d\u200b\u200c\ufeff\u200c\u200b\u200b\ufeff\ufeff\ufeff\u200c\u200d\u200b\u200d\u200c\u200d\u200b\u200c\u200c\ufeff\u200b\ufeff\u200c\u200d\u200c\u200c\u200c\u200c\u200c\u200c\u200c\ufeff\u200b\u200d\u200c\u200d\ufeff\u200b\u200b\ufeff\ufeff\u200c\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\u200d\u200c\u200b\u200c\u200d\u200c\ufeff\u200b\u200b\u200c\ufeff\u200b\u200d\u200c\u200d\u200c\u200c\u200c\ufeff\u200b\ufeff\u200c\u200d\u200c\u200c\u200c\u200d\ufeff\u200d\u200c\ufeff\u200c\u200b\u200c\u200d\u200b\u200c\u200c\ufeff\u200c\u200b\u200c\u200d\u200d\u200c\u200c\u200d\ufeff\ufeff\u200c\u200d\ufeff\u200d\u200b\u200d\u200c\u200d\u200c\u200d\u200d\u200c\u200c\u200d\u200c\u200b\u200b\ufeff\ufeff\u200c\u200b\ufeff\u200c\ufeff\u200b\ufeff\u200b\u200c\u200b\ufeff\u200c\u200d\u200c\u200d\u200c\u200c\u200b\ufeff\u200b\u200d\u200c\u200d\u200b\ufeff\u200b\ufeff\u200d\u200b\u200c\u200d\u200b\u200c\u200b\u200d\ufeff\u200c\u200c\u200d\u200b\u200c\u200b\ufeff\u200b\u200c\u200b\ufeff\u200c\u200d\u200b\ufeff\u200d\u200b\u200b\u200d\ufeff\u200c\u200b\ufeff\u200c\u200b\u200b\ufeff\u200d\u200b\u200b\ufeff\u200c\u200c\u200b\ufeff\u200b\u200d\u200b\u200d\ufeff\u200c\u200b\ufeff\u200d\u200b\u200b\ufeff\u200c\ufeff\u200c\u200d\u200c\u200c\u200b\ufeff\u200b\u200d\u200b\u200d\ufeff\u200c\u200b\ufeff\u200b\u200b\u200c\u200d\u200b\ufeff\u200b\ufeff\u200b\u200d\u200c\u200d\u200b\u200d\u200b\ufeff\u200c\u200b\u200c\u200d\u200c\u200b\u200b\ufeff\u200c\u200b\u200b\ufeff\u200b\u200d\u200c\u200d\u200b\ufeff\u200b\ufeff\u200d\u200c\u200b\ufeff\u200c\u200b\u200c\u200d\u200b\u200d\u200b\u200d\u200c\u200d\u200c\ufeff\u200c\u200b\u200c\ufeff\u200d\u200c\u200c\ufeff\u200b\u200b\u200c\u200d\u200c\u200c\u200b\ufeff\ufeff\u200c\u200c\ufeff\u200b\ufeff\u200c\u200d\u200d\u200c\u200c\u200d\ufeff\u200c\u200c\ufeff\u200b\u200b\u200c\u200d\ufeff\u200b\u200c\u200d\u200c\u200c\u200c\u200b\u200b\u200d\u200c\u200d\ufeff\u200b\u200c\u200d\ufeff\ufeff\u200c\u200d\u200b\ufeff\u200c\u200d\u200d\ufeff\u200b\u200d\u200c\u200d\u200c\ufeff\u200b\u200b\u200c\u200d\u200b\u200c\u200c\ufeff\u200c\u200b\u200c\u200d\u200d\u200b\u200b\ufeff\ufeff\u200c\u200c\u200d\u200b\u200d\u200c\u200d\ufeff\ufeff\u200c\u200d\u200c\u200b\u200c\ufeff\u200d\u200c\u200b\u200d\u200c\u200c\u200b\ufeff\u200c\u200c\u200c\u200b\u200b\u200d\u200c\u200c\ufeff\ufeff\u200c\u200d\u200d\ufeff\u200c\u200d\u200c\u200c\u200c\ufeff\u200d\u200c\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\ufeff\u200c\u200b\u200c\u200b\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\ufeff\u200c\u200b\u200c\u200b\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\u200d\u200b\ufeff\u200b\u200d\u200b\ufeff\u200b\u200c\u200b\ufeff\u200c\u200d\u200b\ufeff\u200b\u200c\u200c\u200d\u200c\u200c\u200b\ufeff\u200b\u200c\u200b\ufeff\u200d\u200c\u200c\u200d\u200b\ufeff\u200c\u200d\u200c\u200c\u200b\ufeff\u200b\u200c\u200c\u200d\u200b\ufeff\u200b\ufeff\u200c\u200d\u200c\u200d\u200b\u200d\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\u200d\u200b\ufeff\u200b\u200d\u200b\u200d\u200c\u200c\u200b\ufeff\u200c\u200c\u200c\u200b\u200c\u200b\u200b\u200d\ufeff\u200d\u200c\u200d\u200b\ufeff\u200c\u200d\u200d\u200b\u200c\u200d\u200d\u200c\u200c\u200d\ufeff\u200b\u200c\u200d\u200c\u200b\u200c\ufeff\u200b\u200d\u200c\u200d\u200c\u200c\u200c\u200d\ufeff\u200d\u200b\u200d\u200c\u200c\u200b\ufeff\u200c\u200c\u200c\u200b\u200b\u200d\u200c\u200c\ufeff\ufeff\u200c\u200d\u200d\ufeff\u200c\u200d\u200c\u200c\u200c\ufeff\u200d\u200c\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\ufeff\u200c\u200b\u200c\u200b\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\ufeff\u200c\u200b\u200c\u200b\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\u200d\u200b\ufeff\u200b\u200d\u200b\ufeff\u200b\ufeff\u200b\ufeff\u200b\u200c\u200c\u200d\u200b\u200c\u200b\ufeff\u200d\u200c\u200b\ufeff\u200d\u200c\u200b\ufeff\u200b\u200c\u200b\ufeff\u200b\u200d\u200b\ufeff\u200d\u200c\u200b\ufeff\u200c\u200c\u200b\ufeff\u200b\u200d\u200b\ufeff\u200b\u200c\u200c\u200d\u200b\u200d\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\u200d\u200b\ufeff\u200b\u200d\u200b\u200d\u200c\u200c\u200b\ufeff\u200c\u200c\u200c\u200b\u200c\u200b\u200b\u200d\ufeff\u200d\u200c\ufeff\u200c\u200b\u200c\u200d\u200c\u200c\u200c\ufeff\u200d\u200b\u200c\ufeff\u200c\u200b\u200b\u200d\u200c\u200d\u200c\u200d\u200d\u200c\u200c\ufeff\u200b\ufeff\u200c\u200b\u200c\u200b\u200c\ufeff\u200b\u200d\u200c\u200d\u200b\u200c\u200c\u200d\u200c\u200d\u200c\ufeff\u200c\u200b\u200b\ufeff\ufeff\u200c\u200b\u200d\u200b\u200d\u200c\ufeff\ufeffβ€Œ, .β€‹β€‹β€‹β€‹β€Œ\u200d\ufeff\u200b\u200d\u200b\u200d\u200c\u200d\ufeff\ufeff\u200c\ufeff\u200b\u200d\u200c\u200d\u200d\u200c\u200c\u200d\u200c\ufeff\u200c\u200d\u200d\u200c\u200c\u200d\ufeff\u200d\u200b\u200d\u200b\u200d\u200b\ufeff\u200d\u200d\u200b\u200d\u200b\u200d\u200c\ufeff\u200b\ufeff\u200c\u200d\u200b\u200c\u200c\u200d\ufeff\u200d\u200c\u200d\u200d\u200c\u200c\ufeff\u200c\u200b\u200c\ufeff\u200d\u200c\u200b\u200d\ufeff\u200d\u200c\u200d\u200d\u200c\u200c\u200d\ufeff\ufeff\u200b\u200d\u200b\u200d\u200b\u200d\ufeff\u200b\u200b\u200d\u200b\u200d\u200c\u200d\u200d\u200b\u200c\ufeff\u200b\u200d\u200c\u200d\u200c\u200c\u200c\u200d\u200c\u200d\u200b\u200d\u200b\u200d\u200b\ufeff\u200d\u200d\u200b\u200d\u200b\u200d\u200b\u200d\ufeff\ufeff\u200c\ufeff\u200b\u200b\u200c\ufeff\u200b\u200d\u200c\u200d\u200c\u200c\u200c\ufeff\u200b\ufeff\u200c\u200d\u200c\u200c\u200c\u200d\ufeff\u200d\u200c\ufeff\u200c\u200b\u200c\u200d\u200b\u200c\u200c\ufeff\u200c\u200b\u200c\u200d\u200d\u200c\u200c\u200d\ufeff\ufeff\u200c\u200d\ufeff\u200d\u200b\u200d\ufeff\ufeff\u200c\u200d\u200d\u200c\u200c\u200d\ufeff\u200d\u200c\ufeff\u200c\u200b\u200c\u200d\u200c\u200c\u200c\u200d\ufeff\u200d\u200c\ufeff\u200c\u200b\u200b\u200d\ufeff\ufeff\u200c\u200d\u200c\u200c\u200c\u200d\u200c\u200b\u200c\u200d\u200d\u200c\u200c\ufeff\u200c\u200b\u200b\u200d\ufeff\ufeff\u200c\u200d\ufeff\u200c\u200c\u200d\ufeff\ufeff\u200c\u200d\u200c\u200b\u200c\u200d\u200c\u200c\u200b\ufeff\ufeff\u200c\u200c\ufeff\u200b\u200b\u200c\ufeff\u200b\u200d\u200c\u200d\u200c\u200c\u200c\ufeff\u200b\ufeff\u200c\u200d\u200c\u200c\u200c\u200d\ufeff\u200d\u200c\ufeff\u200c\u200b\u200c\u200d\u200b\u200c\u200c\ufeff\u200c\u200b\u200c\u200d\u200d\u200c\u200c\u200d\ufeff\ufeff\u200c\u200d\ufeff\u200d\u200b\ufeff\u200d\ufeff\u200c\u200d\u200d\u200c\u200c\u200d\u200c\u200b\u200b\ufeff\ufeff\u200c\u200b\ufeff\u200c\ufeff\u200b\ufeff\u200b\u200c\u200b\ufeff\u200c\u200d\u200c\u200d\u200c\u200c\u200b\ufeff\u200b\u200d\u200c\u200d\u200b\ufeff\u200b\ufeff\u200d\u200b\u200c\u200d\u200b\u200c\u200b\u200d\ufeff\u200c\u200c\u200d\u200b\u200c\u200b\ufeff\u200b\u200c\u200b\ufeff\u200c\u200d\u200b\ufeff\u200d\u200b\u200b\u200d\ufeff\u200c\u200b\ufeff\u200c\u200b\u200b\ufeff\u200d\u200b\u200b\ufeff\u200c\u200c\u200b\ufeff\u200b\u200d\u200b\u200d\ufeff\u200c\u200b\ufeff\u200d\u200b\u200b\ufeff\u200c\ufeff\u200c\u200d\u200c\u200c\u200b\ufeff\u200b\u200d\u200b\u200d\ufeff\u200c\u200b\ufeff\u200b\u200b\u200c\u200d\u200b\ufeff\u200b\ufeff\u200b\u200d\u200c\u200d\u200b\u200d\u200b\ufeff\u200c\u200b\u200c\u200d\u200c\u200b\u200b\ufeff\u200c\u200b\u200b\ufeff\u200b\u200d\u200c\u200d\u200b\ufeff\u200b\ufeff\u200d\u200c\u200b\ufeff\u200c\u200b\u200c\u200d\u200b\u200d\u200b\ufeff\u200d\ufeff\u200c\ufeff\u200c\u200b\u200c\ufeff\u200d\u200c\u200c\ufeff\u200b\u200b\u200c\u200d\u200c\u200c\u200b\ufeff\ufeff\u200c\u200c\ufeff\u200b\ufeff\u200c\u200d\u200d\u200c\u200c\u200d\ufeff\u200c\u200c\ufeff\u200b\u200b\u200c\u200d\ufeff\u200b\u200c\u200d\u200c\u200c\u200c\u200b\u200b\u200d\u200c\u200d\ufeff\u200b\u200c\u200d\ufeff\ufeff\u200c\u200d\u200b\ufeff\u200c\u200d\u200d\ufeff\u200b\ufeff\u200d\ufeff\u200c\ufeff\u200b\u200b\u200c\u200d\u200b\u200c\u200c\ufeff\u200c\u200b\u200c\u200d\u200d\u200b\u200b\ufeff\ufeff\u200c\u200c\u200d\u200b\u200d\u200c\u200d\ufeff\ufeff\u200c\u200d\u200c\u200b\u200c\ufeff\u200d\u200c\u200b\u200d\u200c\u200c\u200b\ufeff\u200c\u200c\u200c\u200b\u200b\u200d\u200c\u200c\ufeff\ufeff\u200c\u200d\u200d\ufeff\u200c\u200d\u200c\u200c\u200c\ufeff\u200d\u200c\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\ufeff\u200c\u200b\u200c\u200b\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\ufeff\u200c\u200b\u200c\u200b\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\u200d\u200b\ufeff\u200b\u200d\u200b\ufeff\u200b\u200c\u200b\ufeff\u200c\u200d\u200b\ufeff\u200b\u200c\u200c\u200d\u200c\u200c\u200b\ufeff\u200b\u200c\u200b\ufeff\u200d\u200c\u200c\u200d\u200b\ufeff\u200c\u200d\u200c\u200c\u200b\ufeff\u200b\u200c\u200c\u200d\u200b\ufeff\u200b\ufeff\u200c\u200d\u200c\u200d\u200b\u200d\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\u200d\u200b\ufeff\u200b\u200d\u200b\u200d\u200c\u200c\u200b\ufeff\u200c\u200c\u200c\u200b\u200c\u200b\u200b\u200d\ufeff\u200d\u200c\u200d\u200b\ufeff\u200c\u200d\u200d\u200b\u200c\u200d\u200d\u200c\u200c\u200d\ufeff\u200b\u200c\u200d\u200c\u200b\u200c\ufeff\u200b\u200d\u200c\u200d\u200c\u200c\u200c\u200d\ufeff\u200d\u200b\u200d\u200c\u200c\u200b\ufeff\u200c\u200c\u200c\u200b\u200b\u200d\u200c\u200c\ufeff\ufeff\u200c\u200d\u200d\ufeff\u200c\u200d\u200c\u200c\u200c\ufeff\u200d\u200c\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\ufeff\u200c\u200b\u200c\u200b\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\ufeff\u200c\u200b\u200c\u200b\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\u200d\u200b\ufeff\u200b\u200d\u200c\u200d\u200c\u200b\u200b\ufeff\u200b\u200d\u200c\u200d\u200b\u200c\u200b\ufeff\u200d\u200b\u200c\u200d\u200c\u200d\u200c\u200d\u200c\u200c\u200b\ufeff\u200c\u200d\u200c\u200d\u200b\u200d\u200b\ufeff\u200b\u200c\u200c\u200d\u200b\u200d\u200c\u200d\u200c\u200c\u200b\ufeff\u200c\ufeff\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\u200d\u200b\ufeff\u200b\u200d\u200b\u200d\u200c\u200c\u200b\ufeff\u200c\u200c\u200c\u200b\u200c\u200b\u200b\u200d\ufeff\u200d\u200c\ufeff\u200c\u200b\u200c\u200d\u200c\u200c\u200c\ufeff\u200d\u200b\u200c\ufeff\u200c\u200b\u200b\ufeff\ufeff\ufeff\u200c\u200d\u200b\u200d\u200c\u200d\u200b\u200c\u200c\ufeff\u200b\ufeff\u200c\u200d\u200c\u200c\u200c\u200c\u200c\u200c\u200c\ufeff\u200b\u200d\u200c\u200d\ufeff\u200b\u200b\ufeff\ufeff\u200c\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\u200d\u200c\u200b\u200c\u200d\u200c\ufeff\u200b\u200b\u200c\ufeff\u200b\u200d\u200c\u200d\u200c\u200c\u200c\ufeff\u200b\ufeff\u200c\u200d\u200c\u200c\u200c\u200d\ufeff\u200d\u200c\ufeff\u200c\u200b\u200c\u200d\u200b\u200c\u200c\ufeff\u200c\u200b\u200c\u200d\u200d\u200c\u200c\u200d\ufeff\ufeff\u200c\u200d\ufeff\u200d\u200b\u200d\u200c\u200d\u200c\u200d\u200d\u200c\u200c\u200d\u200c\u200b\u200b\ufeff\ufeff\u200c\u200b\ufeff\u200c\ufeff\u200b\ufeff\u200b\u200c\u200b\ufeff\u200c\u200d\u200c\u200d\u200c\u200c\u200b\ufeff\u200b\u200d\u200c\u200d\u200b\ufeff\u200b\ufeff\u200d\u200b\u200c\u200d\u200b\u200c\u200b\u200d\ufeff\u200c\u200c\u200d\u200b\u200c\u200b\ufeff\u200b\u200c\u200b\ufeff\u200c\u200d\u200b\ufeff\u200d\u200b\u200b\u200d\ufeff\u200c\u200b\ufeff\u200c\u200b\u200b\ufeff\u200d\u200b\u200b\ufeff\u200c\u200c\u200b\ufeff\u200b\u200d\u200b\u200d\ufeff\u200c\u200b\ufeff\u200d\u200b\u200b\ufeff\u200c\ufeff\u200c\u200d\u200c\u200c\u200b\ufeff\u200b\u200d\u200b\u200d\ufeff\u200c\u200b\ufeff\u200b\u200b\u200c\u200d\u200b\ufeff\u200b\ufeff\u200b\u200d\u200c\u200d\u200b\u200d\u200b\ufeff\u200c\u200b\u200c\u200d\u200c\u200b\u200b\ufeff\u200c\u200b\u200b\ufeff\u200b\u200d\u200c\u200d\u200b\ufeff\u200b\ufeff\u200d\u200c\u200b\ufeff\u200c\u200b\u200c\u200d\u200b\u200d\u200b\u200d\u200c\u200d\u200c\ufeff\u200c\u200b\u200c\ufeff\u200d\u200c\u200c\ufeff\u200b\u200b\u200c\u200d\u200c\u200c\u200b\ufeff\ufeff\u200c\u200c\ufeff\u200b\ufeff\u200c\u200d\u200d\u200c\u200c\u200d\ufeff\u200c\u200c\ufeff\u200b\u200b\u200c\u200d\ufeff\u200b\u200c\u200d\u200c\u200c\u200c\u200b\u200b\u200d\u200c\u200d\ufeff\u200b\u200c\u200d\ufeff\ufeff\u200c\u200d\u200b\ufeff\u200c\u200d\u200d\ufeff\u200b\u200d\u200c\u200d\u200c\ufeff\u200b\u200b\u200c\u200d\u200b\u200c\u200c\ufeff\u200c\u200b\u200c\u200d\u200d\u200b\u200b\ufeff\ufeff\u200c\u200c\u200d\u200b\u200d\u200c\u200d\ufeff\ufeff\u200c\u200d\u200c\u200b\u200c\ufeff\u200d\u200c\u200b\u200d\u200c\u200c\u200b\ufeff\u200c\u200c\u200c\u200b\u200b\u200d\u200c\u200c\ufeff\ufeff\u200c\u200d\u200d\ufeff\u200c\u200d\u200c\u200c\u200c\ufeff\u200d\u200c\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\ufeff\u200c\u200b\u200c\u200b\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\ufeff\u200c\u200b\u200c\u200b\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\u200d\u200b\ufeff\u200b\u200d\u200b\ufeff\u200b\u200c\u200b\ufeff\u200c\u200d\u200b\ufeff\u200b\u200c\u200c\u200d\u200c\u200c\u200b\ufeff\u200b\u200c\u200b\ufeff\u200d\u200c\u200c\u200d\u200b\ufeff\u200c\u200d\u200c\u200c\u200b\ufeff\u200b\u200c\u200c\u200d\u200b\ufeff\u200b\ufeff\u200c\u200d\u200c\u200d\u200b\u200d\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\u200d\u200b\ufeff\u200b\u200d\u200b\u200d\u200c\u200c\u200b\ufeff\u200c\u200c\u200c\u200b\u200c\u200b\u200b\u200d\ufeff\u200d\u200c\u200d\u200b\ufeff\u200c\u200d\u200d\u200b\u200c\u200d\u200d\u200c\u200c\u200d\ufeff\u200b\u200c\u200d\u200c\u200b\u200c\ufeff\u200b\u200d\u200c\u200d\u200c\u200c\u200c\u200d\ufeff\u200d\u200b\u200d\u200c\u200c\u200b\ufeff\u200c\u200c\u200c\u200b\u200b\u200d\u200c\u200c\ufeff\ufeff\u200c\u200d\u200d\ufeff\u200c\u200d\u200c\u200c\u200c\ufeff\u200d\u200c\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\ufeff\u200c\u200b\u200c\u200b\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\ufeff\u200c\u200b\u200c\u200b\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\u200d\u200b\ufeff\u200b\u200d\u200c\u200d\u200c\u200b\u200b\ufeff\u200b\u200d\u200c\u200d\u200b\u200c\u200b\ufeff\u200d\u200b\u200c\u200d\u200c\u200d\u200c\u200d\u200c\u200c\u200b\ufeff\u200c\u200d\u200c\u200d\u200b\u200d\u200b\ufeff\u200b\u200c\u200c\u200d\u200b\u200d\u200c\u200d\u200c\u200c\u200b\ufeff\u200c\ufeff\u200b\u200d\u200c\u200c\u200b\ufeff\u200b\u200d\u200b\ufeff\u200b\u200d\u200b\u200d\u200c\u200c\u200b\ufeff\u200c\u200c\u200c\u200b\u200c\u200b\u200b\u200d\ufeff\u200d\u200c\ufeff\u200c\u200b\u200c\u200d\u200c\u200c\u200c\ufeff\u200d\u200b\u200c\ufeff\u200c\u200b\u200b\u200d\u200c\u200d\u200c\u200d\u200d\u200c\u200c\ufeff\u200b\ufeff\u200c\u200b\u200c\u200b\u200c\ufeff\u200b\u200d\u200c\u200d\u200b\u200c\u200c\u200d\u200c\u200d\u200c\ufeff\u200c\u200b\u200b\ufeff\ufeff\u200c\u200b\u200d\u200b\u200d\u200c\ufeff\ufeffβ€Œ` // eslint-disable-line +// prettier-ignore + +// prettier-ignore +export const CLEANED_UNICODE_INPUT_SNAPSHOT = [ + { + _key: 'e59540eb3b59', + _type: 'block', + children: [ + { + _key: '2bd5e9165a260', + _type: 'span', + marks: [], + text: "This is a test of the Sanity Portable Text renderer. We will use a variety of content to test its capabilities. Here are some unicode characters: β˜ΊοΈπŸ‘πŸ½πŸŒπŸŒžπŸŒšπŸŒπŸŒ›πŸŒœπŸŒ™πŸ’«β­οΈπŸŒŸβœ¨βš‘οΈβ˜„οΈπŸ’₯πŸ”₯πŸŒͺπŸŒˆβ˜€οΈπŸŒ€β›…οΈπŸŒ₯β˜οΈπŸŒ¦πŸŒ§β›ˆπŸŒ©πŸŒ¨β„οΈβ˜ƒοΈβ›„οΈπŸŒ¬πŸ’¨πŸ’§πŸ’¦β˜”οΈβ˜‚οΈπŸŒŠπŸŒ«. Now let's try some markdown formatting: ", + }, + {_key: '2bd5e9165a261', _type: 'span', marks: ['strong'], text: 'bold text'}, + {_key: '2bd5e9165a262', _type: 'span', marks: [], text: ', '}, + {_key: '2bd5e9165a263', _type: 'span', marks: ['em'], text: 'italic text'}, + {_key: '2bd5e9165a264', _type: 'span', marks: [], text: ', ~~strikethrough~~, '}, + {_key: '2bd5e9165a265', _type: 'span', marks: ['code'], text: 'code'}, + { + _key: '2bd5e9165a266', + _type: 'span', + marks: [], + text: ', > blockquote, - list item, 1. numbered list item, ', + }, + {_key: '2bd5e9165a267', _type: 'span', marks: ['ea8165ee5793'], text: 'link'}, + {_key: '2bd5e9165a268', _type: 'span', marks: [], text: ', .'}, + ], + markDefs: [{_key: 'ea8165ee5793', _type: 'link', href: 'https://example.com/'}], + style: 'normal', + }, +] diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 8c1c5646bfc..a85ffb27154 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -87,10 +87,10 @@ importers: version: 17.0.32 '@typescript-eslint/eslint-plugin': specifier: ^7.5.0 - version: 7.6.0(@typescript-eslint/parser@7.6.0)(eslint@8.57.0)(typescript@5.4.5) + version: 7.7.0(@typescript-eslint/parser@7.7.0)(eslint@8.57.0)(typescript@5.4.5) '@typescript-eslint/parser': specifier: ^7.5.0 - version: 7.6.0(eslint@8.57.0)(typescript@5.4.5) + version: 7.7.0(eslint@8.57.0)(typescript@5.4.5) cac: specifier: ^6.7.12 version: 6.7.14 @@ -120,16 +120,16 @@ importers: version: 9.1.0(eslint@8.57.0) eslint-config-sanity: specifier: ^7.1.2 - version: 7.1.2(@typescript-eslint/eslint-plugin@7.6.0)(@typescript-eslint/parser@7.6.0)(eslint-plugin-import@2.29.1)(eslint-plugin-react-hooks@4.6.0)(eslint-plugin-react@7.34.1)(eslint@8.57.0) + version: 7.1.2(@typescript-eslint/eslint-plugin@7.7.0)(@typescript-eslint/parser@7.7.0)(eslint-plugin-import@2.29.1)(eslint-plugin-react-hooks@4.6.0)(eslint-plugin-react@7.34.1)(eslint@8.57.0) eslint-import-resolver-typescript: specifier: ^3.6.1 - version: 3.6.1(@typescript-eslint/parser@7.6.0)(eslint-plugin-import@2.29.1)(eslint@8.57.0) + version: 3.6.1(@typescript-eslint/parser@7.7.0)(eslint-plugin-import@2.29.1)(eslint@8.57.0) eslint-plugin-boundaries: specifier: ^4.2.0 - version: 4.2.0(@typescript-eslint/parser@7.6.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) + version: 4.2.0(@typescript-eslint/parser@7.7.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) eslint-plugin-import: specifier: ^2.29.1 - version: 2.29.1(@typescript-eslint/parser@7.6.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) + version: 2.29.1(@typescript-eslint/parser@7.7.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) eslint-plugin-prettier: specifier: ^5.1.3 version: 5.1.3(eslint-config-prettier@9.1.0)(eslint@8.57.0)(prettier@3.2.5) @@ -150,7 +150,7 @@ importers: version: 52.0.0(eslint@8.57.0) eslint-plugin-unused-imports: specifier: ^3.1.0 - version: 3.1.0(@typescript-eslint/eslint-plugin@7.6.0)(eslint@8.57.0) + version: 3.1.0(@typescript-eslint/eslint-plugin@7.7.0)(eslint@8.57.0) execa: specifier: ^2.0.0 version: 2.1.0 @@ -701,6 +701,9 @@ importers: '@types/react': specifier: ^18.3.1 version: 18.3.1 + '@vercel/stega': + specifier: 0.1.0 + version: 0.1.0 jsdom: specifier: ^23.0.1 version: 23.2.0 @@ -821,7 +824,7 @@ importers: version: 1.0.3 '@types/tar': specifier: ^6.1.3 - version: 6.1.12 + version: 6.1.13 '@types/validate-npm-package-name': specifier: ^3.0.3 version: 3.0.3 @@ -3113,7 +3116,7 @@ packages: babel-plugin-polyfill-corejs2: 0.4.10(@babel/core@7.24.4) babel-plugin-polyfill-corejs3: 0.10.4(@babel/core@7.24.4) babel-plugin-polyfill-regenerator: 0.6.1(@babel/core@7.24.4) - core-js-compat: 3.36.1 + core-js-compat: 3.37.0 semver: 6.3.1 transitivePeerDependencies: - supports-color @@ -4330,7 +4333,7 @@ packages: engines: {node: '>=18.0.0'} dependencies: '@npmcli/run-script': 7.0.2 - '@nx/devkit': 18.2.4(nx@18.2.4) + '@nx/devkit': 18.3.3(nx@18.3.3) '@octokit/plugin-enterprise-rest': 6.0.1 '@octokit/rest': 19.0.11 byte-size: 8.1.1 @@ -4367,7 +4370,7 @@ packages: npm-packlist: 5.1.1 npm-registry-fetch: 14.0.5 npmlog: 6.0.2 - nx: 18.2.4 + nx: 18.3.3 p-map: 4.0.0 p-map-series: 2.1.0 p-queue: 6.6.2 @@ -4525,8 +4528,8 @@ packages: mux-embed: 4.30.0 dev: false - /@mux/upchunk@3.3.2: - resolution: {integrity: sha512-/k7tVgA2gGafao5/mKvnL/I9T9IKKWnY8sBLOU8a0x0qObJoI/f2/FbhLWP4LuNrVd9ZrOFyOLfiudJe3ME+mg==} + /@mux/upchunk@3.3.3: + resolution: {integrity: sha512-ZSytoi9SDR39XAf4DRI2cNCircq/n6oOvpaSentXga6fQhNwdXs7JQM3qsVFq8KeKCxCc14ZxDunpTa2z5D6Iw==} dependencies: event-target-shim: 6.0.2 xhr: 2.6.0 @@ -4684,7 +4687,7 @@ packages: '@npmcli/promise-spawn': 7.0.1 lru-cache: 10.2.0 npm-pick-manifest: 9.0.0 - proc-log: 4.0.0 + proc-log: 4.2.0 promise-inflight: 1.0.1 promise-retry: 2.0.1 semver: 7.6.0 @@ -4732,19 +4735,19 @@ packages: - supports-color dev: true - /@nrwl/devkit@18.2.4(nx@18.2.4): - resolution: {integrity: sha512-dLK8MMb3eEFWlhtI1kNDNbWIT1Xbrgg3eAQ+Ix/N5JDbxJkJhE28WsIJgQb1NTwe/N87O5JtOpxz4/TsSLJCsQ==} + /@nrwl/devkit@18.3.3(nx@18.3.3): + resolution: {integrity: sha512-3zZLE1vfwsNie7qjVUt9lqaM1slU0RTr/dW+Yt/2lxe8Peu6f8bnCM1Pf3kSlzoxQroctfocRtVHFXJsAuAt4g==} dependencies: - '@nx/devkit': 18.2.4(nx@18.2.4) + '@nx/devkit': 18.3.3(nx@18.3.3) transitivePeerDependencies: - nx dev: true - /@nrwl/tao@18.2.4: - resolution: {integrity: sha512-kgJwZ26F+AzvFXaW5eh1g4HLntPcJ6+EE7JyEvrdRzpw7KxTqWy6Ql7dYys6zGlpP4c3PbsXwdc7tGM3Df2PNg==} + /@nrwl/tao@18.3.3: + resolution: {integrity: sha512-f/PUDLpSMEObiLQ5sIDySJM+5DxSCNunkxxbY1R9rmQ1cFcgrHaXIHQqbSj91mMa3mmtbKACk8u1LbI+oQV0Tg==} hasBin: true dependencies: - nx: 18.2.4 + nx: 18.3.3 tslib: 2.6.2 transitivePeerDependencies: - '@swc-node/register' @@ -4752,24 +4755,24 @@ packages: - debug dev: true - /@nx/devkit@18.2.4(nx@18.2.4): - resolution: {integrity: sha512-Ws3BcA/aeXuwsCQ5e7PYy2H7DswareTOEfgs7izxNyGugpydktVH9DZZTOFNDsc06yzgvyTucDbDQ+JsrJ9PcQ==} + /@nx/devkit@18.3.3(nx@18.3.3): + resolution: {integrity: sha512-FtkZ6mA5//vEA5lcbT80m080ROVacHYV5F1peztTRA+IY2JZGJoqx425kn5ylDO8aCSAIAwcn2qIdhI8BnpG3Q==} peerDependencies: - nx: '>= 16 <= 18' + nx: '>= 16 <= 19' dependencies: - '@nrwl/devkit': 18.2.4(nx@18.2.4) + '@nrwl/devkit': 18.3.3(nx@18.3.3) ejs: 3.1.10 enquirer: 2.3.6 ignore: 5.3.1 - nx: 18.2.4 + nx: 18.3.3 semver: 7.6.0 tmp: 0.2.3 tslib: 2.6.2 yargs-parser: 21.1.1 dev: true - /@nx/nx-darwin-arm64@18.2.4: - resolution: {integrity: sha512-RYhMImghdyHmwnbNoR2CkLz4Opj9EmuHY3lMfsorg+T4wIOql/iXACrqjnreN7Hy9myJDo1EIbYZ4x8VSxFWtA==} + /@nx/nx-darwin-arm64@18.3.3: + resolution: {integrity: sha512-NpA2/7o1uUuaocMYopX9muxKif9HlGfWaXo2UeiR918usF6xri4aUqweZbaXVc9iqCAEbVMWUsjaLYGKPXHAjw==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] @@ -4777,8 +4780,8 @@ packages: dev: true optional: true - /@nx/nx-darwin-x64@18.2.4: - resolution: {integrity: sha512-2mXMslSRD/ZoI/oaX+0Mh9J/hucXtNgdwC4YFbp1u8UKquAaQ6hf4uo0s4i+AfLX0F7roMtkFPaG/+MQUJE1Rw==} + /@nx/nx-darwin-x64@18.3.3: + resolution: {integrity: sha512-aydPLbc7DeceJ6szRf6DLT4ERoPvwfWyFiGXdAlEZYWhjEuNZLeG8K6jA3yHeWltKfX/qJqhnyKbnubBNzBKlQ==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] @@ -4786,8 +4789,8 @@ packages: dev: true optional: true - /@nx/nx-freebsd-x64@18.2.4: - resolution: {integrity: sha512-QUiYLvyUT0PS7D8erf49xa1Jyw4Gfev5gtYfME34Twmn/JPx/99ZkBG4wHbzLqRGwlO5K6m6P4qs30Pzfwtw7A==} + /@nx/nx-freebsd-x64@18.3.3: + resolution: {integrity: sha512-sEYEWsK/fwC1l7wzls7RNOjhmrooH0lK0mpgj1vDXesLBSZ7k+pddAqaHFECN4QXBSbHZI2PWOEhbnIH+Errsg==} engines: {node: '>= 10'} cpu: [x64] os: [freebsd] @@ -4795,8 +4798,8 @@ packages: dev: true optional: true - /@nx/nx-linux-arm-gnueabihf@18.2.4: - resolution: {integrity: sha512-+fjFciSUhvDV8dPa97Brwb83k3Xa4gHPI2Un8wlpp28Cv4horeGruRZrrifR1VmD2wp2UBIMl5n7YsDP8KvYhQ==} + /@nx/nx-linux-arm-gnueabihf@18.3.3: + resolution: {integrity: sha512-B9GGMkrrzwiAfvew22x85ITO9TiNxbgRbKJQWQaoopNpXrnSWpY8WTNxpDT24fwV1qdQfsPKcY3F4O0NOUgPRA==} engines: {node: '>= 10'} cpu: [arm] os: [linux] @@ -4804,8 +4807,8 @@ packages: dev: true optional: true - /@nx/nx-linux-arm64-gnu@18.2.4: - resolution: {integrity: sha512-lfaTc+AvV56Uv5mXROiRwh2REiI/7IsqeRDfL+prcuuvJ5Oxi2wYVgnmqcHL+ryQnk0Qn7/d+j/BmYHX5Ve5jQ==} + /@nx/nx-linux-arm64-gnu@18.3.3: + resolution: {integrity: sha512-1EucHf5/0JeqZmhritqkpEdOcdo9Dl32gpFvhNfS6kCAYmaDlEl4zqedz3VIoj4C7+C0pV3mcRO9qB9H7GM5bQ==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] @@ -4813,8 +4816,8 @@ packages: dev: true optional: true - /@nx/nx-linux-arm64-musl@18.2.4: - resolution: {integrity: sha512-U6eoLTQmbxUWU9kZxx6hsYN4zmmOrsDDeW+i3aj5aeahfYlmyz6TsT0V3FSB70WGJC5aMVgEi4RkntQMKkm5vQ==} + /@nx/nx-linux-arm64-musl@18.3.3: + resolution: {integrity: sha512-HPgOgnYYLPVCBEaAkSEGPGzZqTDCiyCAF/qtvx5z0f1U/hZYb1ubgxw70ogY82Cafr7X4gQBz5k4/ZCnoCXlOQ==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] @@ -4822,8 +4825,8 @@ packages: dev: true optional: true - /@nx/nx-linux-x64-gnu@18.2.4: - resolution: {integrity: sha512-q8WcJhmcRNORkKjax6WcUwMJe/1mQs+RYlUkGqmi7tD7lfcLSqdLPJVjqVmQAwmy1Wh/MHPsbqRwSerUnCxB1A==} + /@nx/nx-linux-x64-gnu@18.3.3: + resolution: {integrity: sha512-FgYTQ3VEE6EUOGtJT9riRK8IBwPGFjKS+N2mudQJn2bB/9IumUvVRYQUIX08gqGLlqZPO6uUUhUjwZY8SnjRLQ==} engines: {node: '>= 10'} cpu: [x64] os: [linux] @@ -4831,8 +4834,8 @@ packages: dev: true optional: true - /@nx/nx-linux-x64-musl@18.2.4: - resolution: {integrity: sha512-0MDuoPgHa6kkBrjg7hwZ2qQivhJbh3lk7r3q4osDrqZcGxq5XVJqeAmYFyChQy4dbQfUm4hhYkEfzpU8M2lnvQ==} + /@nx/nx-linux-x64-musl@18.3.3: + resolution: {integrity: sha512-QnWjGViR1Wj9gJXa1RJ9mXyy2/JzQ7NF2C4ulTYSH5St1HoxhkfnLsV0+uNLFEV9PSZq+2BfxmQuT8Appefv1A==} engines: {node: '>= 10'} cpu: [x64] os: [linux] @@ -4840,8 +4843,8 @@ packages: dev: true optional: true - /@nx/nx-win32-arm64-msvc@18.2.4: - resolution: {integrity: sha512-uLhSRtfnXzN000Qf27GOjEPXzd4/jBWqv2x419IMh+AEtKHuCEpQNBUAyLvBbQ79SMr+FmCXHB8AeeJ7bEUiRw==} + /@nx/nx-win32-arm64-msvc@18.3.3: + resolution: {integrity: sha512-Xn3LUaPsF8QkEYUVV3lc693NTCMWrfZBFXTy1cQpvLzQ+idsXQ/EGWoq93cIM3Nc2YWyblT2hHHelb8dHCZAlw==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] @@ -4849,8 +4852,8 @@ packages: dev: true optional: true - /@nx/nx-win32-x64-msvc@18.2.4: - resolution: {integrity: sha512-Y52Afz02Ub1kRZXd6NUTwPMjKQqBKZ35e5dUEpl14na2fWvdgdMz4bYOBPUcmQrovlxBGhmFXtFzxkdW3zyRbQ==} + /@nx/nx-win32-x64-msvc@18.3.3: + resolution: {integrity: sha512-t8HvOnQEiaaoTFOOIrql30NPhIwDFO7jg0Jtz3Tbneulh7ceswJp71yFHsRGGrYZ23Tgg+Sna6M9qLRGzlRGkg==} engines: {node: '>= 10'} cpu: [x64] os: [win32] @@ -5001,7 +5004,7 @@ packages: engines: {node: '>= 12'} dependencies: estree-walker: 2.0.2 - magic-string: 0.30.9 + magic-string: 0.30.10 /@pkgjs/parseargs@0.11.0: resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} @@ -5680,7 +5683,7 @@ packages: estree-walker: 2.0.2 glob: 8.1.0 is-reference: 1.2.1 - magic-string: 0.30.9 + magic-string: 0.30.10 rollup: 4.16.4 /@rollup/plugin-json@6.1.0(rollup@4.16.4): @@ -5722,7 +5725,7 @@ packages: optional: true dependencies: '@rollup/pluginutils': 5.1.0(rollup@4.16.4) - magic-string: 0.30.9 + magic-string: 0.30.10 rollup: 4.16.4 /@rollup/plugin-terser@0.4.4(rollup@4.16.4): @@ -5737,7 +5740,7 @@ packages: rollup: 4.16.4 serialize-javascript: 6.0.2 smob: 1.5.0 - terser: 5.30.3 + terser: 5.30.4 /@rollup/pluginutils@5.0.5(rollup@4.16.4): resolution: {integrity: sha512-6aEYR910NyP73oHiJglti74iRyOwgFU4x3meH/H8OJx6Ry0j6cOVZ5X/wTvub7G7Ao6qaHBEaNsV3GLJkSsF+Q==} @@ -6011,7 +6014,7 @@ packages: dependencies: '@rushstack/eslint-patch': 1.10.2 '@sanity/eslint-plugin-i18n': 1.1.0 - '@typescript-eslint/parser': 7.6.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/parser': 7.7.0(eslint@8.57.0)(typescript@5.4.5) eslint-plugin-i18next: 6.0.3 transitivePeerDependencies: - eslint @@ -6027,8 +6030,8 @@ packages: '@babel/preset-env': 7.24.4(@babel/core@7.24.4) '@babel/preset-react': 7.24.1(@babel/core@7.24.4) '@rushstack/eslint-patch': 1.10.2 - '@typescript-eslint/eslint-plugin': 7.6.0(@typescript-eslint/parser@7.6.0)(eslint@8.57.0)(typescript@5.4.5) - '@typescript-eslint/parser': 7.6.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/eslint-plugin': 7.7.0(@typescript-eslint/parser@7.7.0)(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/parser': 7.7.0(eslint@8.57.0)(typescript@5.4.5) confusing-browser-globals: 1.0.11 eslint-plugin-jsx-a11y: 6.8.0(eslint@8.57.0) eslint-plugin-react: 7.34.1(eslint@8.57.0) @@ -7256,7 +7259,7 @@ packages: resolution: {integrity: sha512-bGyep3JqPCRry1wq+O5n7oiBgGWmeIJXPjXXCo8EK0u8duZGSYar7cGqd3ML2JUsLGeB7fmc06KYo9fLGWqPvQ==} dependencies: '@types/node': 18.19.31 - '@types/qs': 6.9.14 + '@types/qs': 6.9.15 '@types/range-parser': 1.2.7 '@types/send': 0.17.4 dev: true @@ -7274,7 +7277,7 @@ packages: dependencies: '@types/body-parser': 1.19.5 '@types/express-serve-static-core': 4.19.0 - '@types/qs': 6.9.14 + '@types/qs': 6.9.15 '@types/serve-static': 1.15.7 dev: true @@ -7419,8 +7422,8 @@ packages: /@types/prop-types@15.7.12: resolution: {integrity: sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==} - /@types/qs@6.9.14: - resolution: {integrity: sha512-5khscbd3SwWMhFqylJBLQ0zIu7c1K6Vz0uBIt915BI3zV0q1nfjRQD3RqSBcPaO6PHEF4ov/t9y89fSiyThlPA==} + /@types/qs@6.9.15: + resolution: {integrity: sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg==} dev: true /@types/raf@3.4.3: @@ -7551,8 +7554,8 @@ packages: dependencies: '@types/node': 18.19.31 - /@types/tar@6.1.12: - resolution: {integrity: sha512-FwbJPi9YuovB6ilnHrz8Y4pb0Fh6N7guFkbnlCl39ua893Qi5gkXui7LSDpTQMJCmA4z5f6SeSrTPQEWLdtFVw==} + /@types/tar@6.1.13: + resolution: {integrity: sha512-IznnlmU5f4WcGTh2ltRu/Ijpmk8wiWXfF0VA4s+HPjHZgvFggk1YaIkbo5krX/zUCzWF8N/l4+W/LNxnvAJ8nw==} dependencies: '@types/node': 18.19.31 minipass: 4.2.8 @@ -7625,8 +7628,8 @@ packages: '@types/yargs-parser': 21.0.3 dev: true - /@typescript-eslint/eslint-plugin@7.6.0(@typescript-eslint/parser@7.6.0)(eslint@8.57.0)(typescript@5.4.5): - resolution: {integrity: sha512-gKmTNwZnblUdnTIJu3e9kmeRRzV2j1a/LUO27KNNAnIC5zjy1aSvXSRp4rVNlmAoHlQ7HzX42NbKpcSr4jF80A==} + /@typescript-eslint/eslint-plugin@7.7.0(@typescript-eslint/parser@7.7.0)(eslint@8.57.0)(typescript@5.4.5): + resolution: {integrity: sha512-GJWR0YnfrKnsRoluVO3PRb9r5aMZriiMMM/RHj5nnTrBy1/wIgk76XCtCKcnXGjpZQJQRFtGV9/0JJ6n30uwpQ==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: '@typescript-eslint/parser': ^7.5.0 @@ -7637,11 +7640,11 @@ packages: optional: true dependencies: '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 7.6.0(eslint@8.57.0)(typescript@5.4.5) - '@typescript-eslint/scope-manager': 7.6.0 - '@typescript-eslint/type-utils': 7.6.0(eslint@8.57.0)(typescript@5.4.5) - '@typescript-eslint/utils': 7.6.0(eslint@8.57.0)(typescript@5.4.5) - '@typescript-eslint/visitor-keys': 7.6.0 + '@typescript-eslint/parser': 7.7.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/scope-manager': 7.7.0 + '@typescript-eslint/type-utils': 7.7.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/utils': 7.7.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/visitor-keys': 7.7.0 debug: 4.3.4(supports-color@9.4.0) eslint: 8.57.0 graphemer: 1.4.0 @@ -7654,8 +7657,8 @@ packages: - supports-color dev: true - /@typescript-eslint/parser@7.6.0(eslint@8.57.0)(typescript@5.4.5): - resolution: {integrity: sha512-usPMPHcwX3ZoPWnBnhhorc14NJw9J4HpSXQX4urF2TPKG0au0XhJoZyX62fmvdHONUkmyUe74Hzm1//XA+BoYg==} + /@typescript-eslint/parser@7.7.0(eslint@8.57.0)(typescript@5.4.5): + resolution: {integrity: sha512-fNcDm3wSwVM8QYL4HKVBggdIPAy9Q41vcvC/GtDobw3c4ndVT3K6cqudUmjHPw8EAp4ufax0o58/xvWaP2FmTg==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: eslint: ^8.56.0 @@ -7664,10 +7667,10 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/scope-manager': 7.6.0 - '@typescript-eslint/types': 7.6.0 - '@typescript-eslint/typescript-estree': 7.6.0(typescript@5.4.5) - '@typescript-eslint/visitor-keys': 7.6.0 + '@typescript-eslint/scope-manager': 7.7.0 + '@typescript-eslint/types': 7.7.0 + '@typescript-eslint/typescript-estree': 7.7.0(typescript@5.4.5) + '@typescript-eslint/visitor-keys': 7.7.0 debug: 4.3.4(supports-color@9.4.0) eslint: 8.57.0 typescript: 5.4.5 @@ -7675,16 +7678,16 @@ packages: - supports-color dev: true - /@typescript-eslint/scope-manager@7.6.0: - resolution: {integrity: sha512-ngttyfExA5PsHSx0rdFgnADMYQi+Zkeiv4/ZxGYUWd0nLs63Ha0ksmp8VMxAIC0wtCFxMos7Lt3PszJssG/E6w==} + /@typescript-eslint/scope-manager@7.7.0: + resolution: {integrity: sha512-/8INDn0YLInbe9Wt7dK4cXLDYp0fNHP5xKLHvZl3mOT5X17rK/YShXaiNmorl+/U4VKCVIjJnx4Ri5b0y+HClw==} engines: {node: ^18.18.0 || >=20.0.0} dependencies: - '@typescript-eslint/types': 7.6.0 - '@typescript-eslint/visitor-keys': 7.6.0 + '@typescript-eslint/types': 7.7.0 + '@typescript-eslint/visitor-keys': 7.7.0 dev: true - /@typescript-eslint/type-utils@7.6.0(eslint@8.57.0)(typescript@5.4.5): - resolution: {integrity: sha512-NxAfqAPNLG6LTmy7uZgpK8KcuiS2NZD/HlThPXQRGwz6u7MDBWRVliEEl1Gj6U7++kVJTpehkhZzCJLMK66Scw==} + /@typescript-eslint/type-utils@7.7.0(eslint@8.57.0)(typescript@5.4.5): + resolution: {integrity: sha512-bOp3ejoRYrhAlnT/bozNQi3nio9tIgv3U5C0mVDdZC7cpcQEDZXvq8inrHYghLVwuNABRqrMW5tzAv88Vy77Sg==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: eslint: ^8.56.0 @@ -7693,8 +7696,8 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 7.6.0(typescript@5.4.5) - '@typescript-eslint/utils': 7.6.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/typescript-estree': 7.7.0(typescript@5.4.5) + '@typescript-eslint/utils': 7.7.0(eslint@8.57.0)(typescript@5.4.5) debug: 4.3.4(supports-color@9.4.0) eslint: 8.57.0 ts-api-utils: 1.3.0(typescript@5.4.5) @@ -7703,13 +7706,13 @@ packages: - supports-color dev: true - /@typescript-eslint/types@7.6.0: - resolution: {integrity: sha512-h02rYQn8J+MureCvHVVzhl69/GAfQGPQZmOMjG1KfCl7o3HtMSlPaPUAPu6lLctXI5ySRGIYk94clD/AUMCUgQ==} + /@typescript-eslint/types@7.7.0: + resolution: {integrity: sha512-G01YPZ1Bd2hn+KPpIbrAhEWOn5lQBrjxkzHkWvP6NucMXFtfXoevK82hzQdpfuQYuhkvFDeQYbzXCjR1z9Z03w==} engines: {node: ^18.18.0 || >=20.0.0} dev: true - /@typescript-eslint/typescript-estree@7.6.0(typescript@5.4.5): - resolution: {integrity: sha512-+7Y/GP9VuYibecrCQWSKgl3GvUM5cILRttpWtnAu8GNL9j11e4tbuGZmZjJ8ejnKYyBRb2ddGQ3rEFCq3QjMJw==} + /@typescript-eslint/typescript-estree@7.7.0(typescript@5.4.5): + resolution: {integrity: sha512-8p71HQPE6CbxIBy2kWHqM1KGrC07pk6RJn40n0DSc6bMOBBREZxSDJ+BmRzc8B5OdaMh1ty3mkuWRg4sCFiDQQ==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: typescript: '*' @@ -7717,8 +7720,8 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/types': 7.6.0 - '@typescript-eslint/visitor-keys': 7.6.0 + '@typescript-eslint/types': 7.7.0 + '@typescript-eslint/visitor-keys': 7.7.0 debug: 4.3.4(supports-color@9.4.0) globby: 11.1.0 is-glob: 4.0.3 @@ -7730,8 +7733,8 @@ packages: - supports-color dev: true - /@typescript-eslint/utils@7.6.0(eslint@8.57.0)(typescript@5.4.5): - resolution: {integrity: sha512-x54gaSsRRI+Nwz59TXpCsr6harB98qjXYzsRxGqvA5Ue3kQH+FxS7FYU81g/omn22ML2pZJkisy6Q+ElK8pBCA==} + /@typescript-eslint/utils@7.7.0(eslint@8.57.0)(typescript@5.4.5): + resolution: {integrity: sha512-LKGAXMPQs8U/zMRFXDZOzmMKgFv3COlxUQ+2NMPhbqgVm6R1w+nU1i4836Pmxu9jZAuIeyySNrN/6Rc657ggig==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: eslint: ^8.56.0 @@ -7739,9 +7742,9 @@ packages: '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) '@types/json-schema': 7.0.15 '@types/semver': 7.5.8 - '@typescript-eslint/scope-manager': 7.6.0 - '@typescript-eslint/types': 7.6.0 - '@typescript-eslint/typescript-estree': 7.6.0(typescript@5.4.5) + '@typescript-eslint/scope-manager': 7.7.0 + '@typescript-eslint/types': 7.7.0 + '@typescript-eslint/typescript-estree': 7.7.0(typescript@5.4.5) eslint: 8.57.0 semver: 7.6.0 transitivePeerDependencies: @@ -7749,11 +7752,11 @@ packages: - typescript dev: true - /@typescript-eslint/visitor-keys@7.6.0: - resolution: {integrity: sha512-4eLB7t+LlNUmXzfOu1VAIAdkjbu5xNSerURS9X/S5TUKWFRpXRQZbmtPqgKmYx8bj3J0irtQXSiWAOY82v+cgw==} + /@typescript-eslint/visitor-keys@7.7.0: + resolution: {integrity: sha512-h0WHOj8MhdhY8YWkzIF30R379y0NqyOHExI9N9KCzvmu05EgG4FumeYa3ccfKUSphyWkWQE1ybVrgz/Pbam6YA==} engines: {node: ^18.18.0 || >=20.0.0} dependencies: - '@typescript-eslint/types': 7.6.0 + '@typescript-eslint/types': 7.7.0 eslint-visitor-keys: 3.4.3 dev: true @@ -7855,7 +7858,6 @@ packages: /@vercel/stega@0.1.0: resolution: {integrity: sha512-5b0PkOJsFBX5alChuIO3qpkt5vIZBevzLPhUQ1UP8UzVjL3F1VllnZxp/thfD8R5ol7D7WHkgZHIjdUBX4tDpQ==} - dev: false /@vitejs/plugin-react@4.2.1(vite@4.5.3): resolution: {integrity: sha512-oojO9IDc4nCUUi8qIR11KoQm0XFFLIwsRBwHRR4d/88IWghn1y6ckz/bJ8GHDCsYEJee8mDzqtJxh15/cisJNQ==} @@ -7887,46 +7889,46 @@ packages: transitivePeerDependencies: - supports-color - /@vue/compiler-core@3.4.21: - resolution: {integrity: sha512-MjXawxZf2SbZszLPYxaFCjxfibYrzr3eYbKxwpLR9EQN+oaziSu3qKVbwBERj1IFIB8OLUewxB5m/BFzi613og==} + /@vue/compiler-core@3.4.23: + resolution: {integrity: sha512-HAFmuVEwNqNdmk+w4VCQ2pkLk1Vw4XYiiyxEp3z/xvl14aLTUBw2OfVH3vBcx+FtGsynQLkkhK410Nah1N2yyQ==} dependencies: '@babel/parser': 7.24.4 - '@vue/shared': 3.4.21 + '@vue/shared': 3.4.23 entities: 4.5.0 estree-walker: 2.0.2 source-map-js: 1.2.0 dev: true - /@vue/compiler-dom@3.4.21: - resolution: {integrity: sha512-IZC6FKowtT1sl0CR5DpXSiEB5ayw75oT2bma1BEhV7RRR1+cfwLrxc2Z8Zq/RGFzJ8w5r9QtCOvTjQgdn0IKmA==} + /@vue/compiler-dom@3.4.23: + resolution: {integrity: sha512-t0b9WSTnCRrzsBGrDd1LNR5HGzYTr7LX3z6nNBG+KGvZLqrT0mY6NsMzOqlVMBKKXKVuusbbB5aOOFgTY+senw==} dependencies: - '@vue/compiler-core': 3.4.21 - '@vue/shared': 3.4.21 + '@vue/compiler-core': 3.4.23 + '@vue/shared': 3.4.23 dev: true - /@vue/compiler-sfc@3.4.21: - resolution: {integrity: sha512-me7epoTxYlY+2CUM7hy9PCDdpMPfIwrOvAXud2Upk10g4YLv9UBW7kL798TvMeDhPthkZ0CONNrK2GoeI1ODiQ==} + /@vue/compiler-sfc@3.4.23: + resolution: {integrity: sha512-fSDTKTfzaRX1kNAUiaj8JB4AokikzStWgHooMhaxyjZerw624L+IAP/fvI4ZwMpwIh8f08PVzEnu4rg8/Npssw==} dependencies: '@babel/parser': 7.24.4 - '@vue/compiler-core': 3.4.21 - '@vue/compiler-dom': 3.4.21 - '@vue/compiler-ssr': 3.4.21 - '@vue/shared': 3.4.21 + '@vue/compiler-core': 3.4.23 + '@vue/compiler-dom': 3.4.23 + '@vue/compiler-ssr': 3.4.23 + '@vue/shared': 3.4.23 estree-walker: 2.0.2 - magic-string: 0.30.9 + magic-string: 0.30.10 postcss: 8.4.38 source-map-js: 1.2.0 dev: true - /@vue/compiler-ssr@3.4.21: - resolution: {integrity: sha512-M5+9nI2lPpAsgXOGQobnIueVqc9sisBFexh5yMIMRAPYLa7+5wEJs8iqOZc1WAa9WQbx9GR2twgznU8LTIiZ4Q==} + /@vue/compiler-ssr@3.4.23: + resolution: {integrity: sha512-hb6Uj2cYs+tfqz71Wj6h3E5t6OKvb4MVcM2Nl5i/z1nv1gjEhw+zYaNOV+Xwn+SSN/VZM0DgANw5TuJfxfezPg==} dependencies: - '@vue/compiler-dom': 3.4.21 - '@vue/shared': 3.4.21 + '@vue/compiler-dom': 3.4.23 + '@vue/shared': 3.4.23 dev: true - /@vue/shared@3.4.21: - resolution: {integrity: sha512-PuJe7vDIi6VYSinuEbUIQgMIRZGgM8e4R+G+/dQTk0X1NEdvgvvgv7m+rfmDH1gZzyA1OjjoWskvHlfRNfQf3g==} + /@vue/shared@3.4.23: + resolution: {integrity: sha512-wBQ0gvf+SMwsCQOyusNw/GoXPV47WGd1xB5A1Pgzy0sQ3Bi5r5xm3n+92y3gCnB3MWqnRDdvfkRGxhKtbBRNgg==} dev: true /@vvo/tzdb@6.131.0: @@ -8487,7 +8489,7 @@ packages: dependencies: '@babel/core': 7.24.4 '@babel/helper-define-polyfill-provider': 0.6.1(@babel/core@7.24.4) - core-js-compat: 3.36.1 + core-js-compat: 3.37.0 transitivePeerDependencies: - supports-color @@ -8701,7 +8703,7 @@ packages: hasBin: true dependencies: caniuse-lite: 1.0.30001612 - electron-to-chromium: 1.4.736 + electron-to-chromium: 1.4.745 node-releases: 2.0.14 update-browserslist-db: 1.0.13(browserslist@4.23.0) @@ -8797,7 +8799,7 @@ packages: minipass-pipeline: 1.2.4 p-map: 4.0.0 ssri: 10.0.5 - tar: 6.2.1 + tar: 6.1.11 unique-filename: 3.0.0 dev: true @@ -8815,7 +8817,7 @@ packages: minipass-pipeline: 1.2.4 p-map: 4.0.0 ssri: 10.0.5 - tar: 6.2.1 + tar: 6.1.11 unique-filename: 3.0.0 dev: true @@ -9424,8 +9426,8 @@ packages: toggle-selection: 1.0.6 dev: false - /core-js-compat@3.36.1: - resolution: {integrity: sha512-Dk997v9ZCt3X/npqzyGdTlq6t7lDBhZwGvV94PKzDArjp7BTRm7WlDAXYd/OWdeFHO8OChQYRJNJvUCqCbrtKA==} + /core-js-compat@3.37.0: + resolution: {integrity: sha512-vYq4L+T8aS5UuFg4UwDhc7YNRWVeVZwltad9C/jV3R2LgVOpS9BDr7l/WL6BN0dbV3k1XejPTHqqEzJgsa0frA==} dependencies: browserslist: 4.23.0 @@ -9960,7 +9962,7 @@ packages: dependencies: '@babel/parser': 7.24.4 '@babel/traverse': 7.24.1 - '@vue/compiler-sfc': 3.4.21 + '@vue/compiler-sfc': 3.4.23 callsite: 1.0.0 camelcase: 6.3.0 cosmiconfig: 7.1.0 @@ -10178,8 +10180,8 @@ packages: jake: 10.8.7 dev: true - /electron-to-chromium@1.4.736: - resolution: {integrity: sha512-Rer6wc3ynLelKNM4lOCg7/zPQj8tPOCB2hzD32PX9wd3hgRRi9MxEbmkFCokzcEhRVMiOVLjnL9ig9cefJ+6+Q==} + /electron-to-chromium@1.4.745: + resolution: {integrity: sha512-tRbzkaRI5gbUn5DEvF0dV4TQbMZ5CLkWeTAXmpC9IrYT+GE+x76i9p+o3RJ5l9XmdQlI1pPhVtE9uNcJJ0G0EA==} /emittery@0.13.1: resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==} @@ -10535,7 +10537,7 @@ packages: eslint: 8.57.0 dev: true - /eslint-config-sanity@7.1.2(@typescript-eslint/eslint-plugin@7.6.0)(@typescript-eslint/parser@7.6.0)(eslint-plugin-import@2.29.1)(eslint-plugin-react-hooks@4.6.0)(eslint-plugin-react@7.34.1)(eslint@8.57.0): + /eslint-config-sanity@7.1.2(@typescript-eslint/eslint-plugin@7.7.0)(@typescript-eslint/parser@7.7.0)(eslint-plugin-import@2.29.1)(eslint-plugin-react-hooks@4.6.0)(eslint-plugin-react@7.34.1)(eslint@8.57.0): resolution: {integrity: sha512-7Na1kh3OiteeFmeQkUqtIjThsKWIIiK/TLNUby0pOkGHhWV3AKYFsMEIhH7VuOIEOeTE53Ix/04Z6XWyvsHcuQ==} engines: {node: '>=14.0.0'} peerDependencies: @@ -10557,10 +10559,10 @@ packages: eslint-plugin-react-hooks: optional: true dependencies: - '@typescript-eslint/eslint-plugin': 7.6.0(@typescript-eslint/parser@7.6.0)(eslint@8.57.0)(typescript@5.4.5) - '@typescript-eslint/parser': 7.6.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/eslint-plugin': 7.7.0(@typescript-eslint/parser@7.7.0)(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/parser': 7.7.0(eslint@8.57.0)(typescript@5.4.5) eslint: 8.57.0 - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.6.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.7.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) eslint-plugin-react: 7.34.1(eslint@8.57.0) eslint-plugin-react-hooks: 4.6.0(eslint@8.57.0) eslint-plugin-simple-import-sort: 12.1.0(eslint@8.57.0) @@ -10576,7 +10578,7 @@ packages: - supports-color dev: true - /eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.6.0)(eslint-plugin-import@2.29.1)(eslint@8.57.0): + /eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.7.0)(eslint-plugin-import@2.29.1)(eslint@8.57.0): resolution: {integrity: sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: @@ -10586,8 +10588,8 @@ packages: debug: 4.3.4(supports-color@9.4.0) enhanced-resolve: 5.16.0 eslint: 8.57.0 - eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.6.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.6.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) + eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.7.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.7.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) fast-glob: 3.3.2 get-tsconfig: 4.7.3 is-core-module: 2.13.1 @@ -10599,7 +10601,7 @@ packages: - supports-color dev: true - /eslint-module-utils@2.8.0(@typescript-eslint/parser@7.6.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0): + /eslint-module-utils@2.8.0(@typescript-eslint/parser@7.7.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0): resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} engines: {node: '>=4'} peerDependencies: @@ -10620,16 +10622,16 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 7.6.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/parser': 7.7.0(eslint@8.57.0)(typescript@5.4.5) debug: 3.2.7 eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@7.6.0)(eslint-plugin-import@2.29.1)(eslint@8.57.0) + eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@7.7.0)(eslint-plugin-import@2.29.1)(eslint@8.57.0) transitivePeerDependencies: - supports-color dev: true - /eslint-module-utils@2.8.1(@typescript-eslint/parser@7.6.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0): + /eslint-module-utils@2.8.1(@typescript-eslint/parser@7.7.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0): resolution: {integrity: sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==} engines: {node: '>=4'} peerDependencies: @@ -10650,16 +10652,16 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 7.6.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/parser': 7.7.0(eslint@8.57.0)(typescript@5.4.5) debug: 3.2.7 eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@7.6.0)(eslint-plugin-import@2.29.1)(eslint@8.57.0) + eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@7.7.0)(eslint-plugin-import@2.29.1)(eslint@8.57.0) transitivePeerDependencies: - supports-color dev: true - /eslint-plugin-boundaries@4.2.0(@typescript-eslint/parser@7.6.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0): + /eslint-plugin-boundaries@4.2.0(@typescript-eslint/parser@7.7.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0): resolution: {integrity: sha512-JPHxeL8R3G3urwewE8TwAjPhwmd78xmXt0MlW6YwSo+MQypOsrTCudEtFgLFe+gOxylxIi6pC1EEiPlSUeAr5w==} engines: {node: '>=14.0.0'} peerDependencies: @@ -10668,7 +10670,7 @@ packages: chalk: 4.1.2 eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@7.6.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) + eslint-module-utils: 2.8.0(@typescript-eslint/parser@7.7.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) is-core-module: 2.13.1 micromatch: 4.0.5 transitivePeerDependencies: @@ -10686,7 +10688,7 @@ packages: requireindex: 1.1.0 dev: true - /eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.6.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0): + /eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.7.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0): resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==} engines: {node: '>=4'} peerDependencies: @@ -10696,7 +10698,7 @@ packages: '@typescript-eslint/parser': optional: true dependencies: - '@typescript-eslint/parser': 7.6.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/parser': 7.7.0(eslint@8.57.0)(typescript@5.4.5) array-includes: 3.1.8 array.prototype.findlastindex: 1.2.5 array.prototype.flat: 1.3.2 @@ -10705,7 +10707,7 @@ packages: doctrine: 2.1.0 eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.6.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) + eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.7.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) hasown: 2.0.2 is-core-module: 2.13.1 is-glob: 4.0.3 @@ -10829,7 +10831,7 @@ packages: '@eslint/eslintrc': 2.1.4 ci-info: 4.0.0 clean-regexp: 1.0.0 - core-js-compat: 3.36.1 + core-js-compat: 3.37.0 eslint: 8.57.0 esquery: 1.5.0 indent-string: 4.0.0 @@ -10845,7 +10847,7 @@ packages: - supports-color dev: true - /eslint-plugin-unused-imports@3.1.0(@typescript-eslint/eslint-plugin@7.6.0)(eslint@8.57.0): + /eslint-plugin-unused-imports@3.1.0(@typescript-eslint/eslint-plugin@7.7.0)(eslint@8.57.0): resolution: {integrity: sha512-9l1YFCzXKkw1qtAru1RWUtG2EVDZY0a0eChKXcL+EZ5jitG7qxdctu4RnvhOJHv4xfmUf7h+JJPINlVpGhZMrw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -10855,7 +10857,7 @@ packages: '@typescript-eslint/eslint-plugin': optional: true dependencies: - '@typescript-eslint/eslint-plugin': 7.6.0(@typescript-eslint/parser@7.6.0)(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/eslint-plugin': 7.7.0(@typescript-eslint/parser@7.7.0)(eslint@8.57.0)(typescript@5.4.5) eslint: 8.57.0 eslint-rule-composer: 0.3.0 dev: true @@ -11037,9 +11039,9 @@ packages: engines: {node: '>=10'} dependencies: cross-spawn: 7.0.3 - get-stream: 6.0.1 + get-stream: 6.0.0 human-signals: 2.1.0 - is-stream: 2.0.1 + is-stream: 2.0.0 merge-stream: 2.0.0 npm-run-path: 4.0.1 onetime: 5.1.2 @@ -13796,7 +13798,7 @@ packages: http-proxy-agent: 5.0.0 https-proxy-agent: 5.0.1 is-potential-custom-element-name: 1.0.1 - nwsapi: 2.2.7 + nwsapi: 2.2.9 parse5: 7.1.2 saxes: 6.0.0 symbol-tree: 3.2.4 @@ -14041,7 +14043,7 @@ packages: dependencies: '@lerna/create': 8.1.2(typescript@5.4.5) '@npmcli/run-script': 7.0.2 - '@nx/devkit': 18.2.4(nx@18.2.4) + '@nx/devkit': 18.3.3(nx@18.3.3) '@octokit/plugin-enterprise-rest': 6.0.1 '@octokit/rest': 19.0.11 byte-size: 8.1.1 @@ -14084,7 +14086,7 @@ packages: npm-packlist: 5.1.1 npm-registry-fetch: 14.0.5 npmlog: 6.0.2 - nx: 18.2.4 + nx: 18.3.3 p-map: 4.0.0 p-map-series: 2.1.0 p-pipe: 3.1.0 @@ -14407,9 +14409,8 @@ packages: three: 0.157.0 dev: false - /magic-string@0.30.9: - resolution: {integrity: sha512-S1+hd+dIrC8EZqKyT9DstTH/0Z+f76kmmvZnkfQVmOpDEF9iVgdYif3Q/pIWHmCoo59bQVGW0kVL3e2nl+9+Sw==} - engines: {node: '>=12'} + /magic-string@0.30.10: + resolution: {integrity: sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==} dependencies: '@jridgewell/sourcemap-codec': 1.4.15 @@ -15078,7 +15079,7 @@ packages: nopt: 7.2.0 proc-log: 3.0.0 semver: 7.6.0 - tar: 6.2.1 + tar: 6.1.11 which: 4.0.0 transitivePeerDependencies: - supports-color @@ -15218,7 +15219,7 @@ packages: engines: {node: ^16.14.0 || >=18.0.0} dependencies: hosted-git-info: 7.0.1 - proc-log: 4.0.0 + proc-log: 4.2.0 semver: 7.6.0 validate-npm-package-name: 5.0.0 dev: true @@ -15286,7 +15287,7 @@ packages: minipass-json-stream: 1.0.1 minizlib: 2.1.2 npm-package-arg: 11.0.2 - proc-log: 4.0.0 + proc-log: 4.2.0 transitivePeerDependencies: - supports-color dev: true @@ -15330,12 +15331,12 @@ packages: set-blocking: 2.0.0 dev: true - /nwsapi@2.2.7: - resolution: {integrity: sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==} + /nwsapi@2.2.9: + resolution: {integrity: sha512-2f3F0SEEer8bBu0dsNCFF50N0cTThV1nWFYcEYFZttdW0lDAoybv9cQoK7X7/68Z89S7FoRrVjP1LPX4XRf9vg==} dev: true - /nx@18.2.4: - resolution: {integrity: sha512-GxqJcDOhfLa9jsPmip0jG73CZKA96wCryss2DhixCiCU66I3GLYF4+585ObO8Tx7Z1GqhT92RaNGjCxjMIwaPg==} + /nx@18.3.3: + resolution: {integrity: sha512-GqC5ANfTWV6SFbgquZwuRMI2Z2nO0c0Yx4JzM3x32aJOgXsmRml3WcV0a5648bIXSen34gylHYl2EHaxVWkzNQ==} hasBin: true requiresBuild: true peerDependencies: @@ -15347,7 +15348,7 @@ packages: '@swc/core': optional: true dependencies: - '@nrwl/tao': 18.2.4 + '@nrwl/tao': 18.3.3 '@yarnpkg/lockfile': 1.1.0 '@yarnpkg/parsers': 3.0.0-rc.46 '@zkochan/js-yaml': 0.0.6 @@ -15382,16 +15383,16 @@ packages: yargs: 17.7.2 yargs-parser: 21.1.1 optionalDependencies: - '@nx/nx-darwin-arm64': 18.2.4 - '@nx/nx-darwin-x64': 18.2.4 - '@nx/nx-freebsd-x64': 18.2.4 - '@nx/nx-linux-arm-gnueabihf': 18.2.4 - '@nx/nx-linux-arm64-gnu': 18.2.4 - '@nx/nx-linux-arm64-musl': 18.2.4 - '@nx/nx-linux-x64-gnu': 18.2.4 - '@nx/nx-linux-x64-musl': 18.2.4 - '@nx/nx-win32-arm64-msvc': 18.2.4 - '@nx/nx-win32-x64-msvc': 18.2.4 + '@nx/nx-darwin-arm64': 18.3.3 + '@nx/nx-darwin-x64': 18.3.3 + '@nx/nx-freebsd-x64': 18.3.3 + '@nx/nx-linux-arm-gnueabihf': 18.3.3 + '@nx/nx-linux-arm64-gnu': 18.3.3 + '@nx/nx-linux-arm64-musl': 18.3.3 + '@nx/nx-linux-x64-gnu': 18.3.3 + '@nx/nx-linux-x64-musl': 18.3.3 + '@nx/nx-win32-arm64-msvc': 18.3.3 + '@nx/nx-win32-x64-msvc': 18.3.3 transitivePeerDependencies: - debug dev: true @@ -15577,7 +15578,7 @@ packages: bl: 4.1.0 chalk: 4.1.2 cli-cursor: 3.1.0 - cli-spinners: 2.9.2 + cli-spinners: 2.6.1 is-interactive: 1.0.0 log-symbols: 4.1.0 strip-ansi: 6.0.1 @@ -15783,13 +15784,13 @@ packages: npm-packlist: 8.0.2 npm-pick-manifest: 9.0.0 npm-registry-fetch: 16.2.1 - proc-log: 4.0.0 + proc-log: 4.2.0 promise-retry: 2.0.1 read-package-json: 7.0.0 read-package-json-fast: 3.0.2 sigstore: 2.3.0 ssri: 10.0.5 - tar: 6.2.1 + tar: 6.1.11 transitivePeerDependencies: - bluebird - supports-color @@ -16205,8 +16206,8 @@ packages: engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} dev: true - /proc-log@4.0.0: - resolution: {integrity: sha512-v1lzmYxGDs2+OZnmYtYZK3DG8zogt+CbQ+o/iqqtTfpyCmGWulCTEQu5GIbivf7OjgIkH2Nr8SH8UxAGugZNbg==} + /proc-log@4.2.0: + resolution: {integrity: sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} dev: true @@ -17194,7 +17195,7 @@ packages: styled-components: ^6 dependencies: '@mux/mux-player-react': 2.4.1(@types/react@18.3.1)(react-dom@18.3.1)(react@18.3.1) - '@mux/upchunk': 3.3.2 + '@mux/upchunk': 3.3.3 '@sanity/icons': 2.11.8(react@18.3.1) '@sanity/incompatible-plugin': 1.0.4(react-dom@18.3.1)(react@18.3.1) '@sanity/ui': 2.1.4(react-dom@18.3.1)(react-is@18.3.1)(react@18.3.1)(styled-components@6.1.8) @@ -17211,7 +17212,7 @@ packages: styled-components: 6.1.8(react-dom@18.3.1)(react@18.3.1) suspend-react: 0.1.3(react@18.3.1) swr: 2.2.5(react@18.3.1) - type-fest: 4.15.0 + type-fest: 4.16.0 transitivePeerDependencies: - '@types/react' - '@types/react-dom' @@ -18176,8 +18177,8 @@ packages: engines: {node: '>=8'} dev: true - /terser@5.30.3: - resolution: {integrity: sha512-STdUgOUx8rLbMGO9IOwHLpCqolkDITFFQSMYYwKE1N2lY6MVSaeoi10z/EhWxRc6ybqoVmKSkhKYH/XUpl7vSA==} + /terser@5.30.4: + resolution: {integrity: sha512-xRdd0v64a8mFK9bnsKVdoNP9GQIKUAaJPTaqEQDL4w/J8WaW4sWXXoMZ+6SimPkfT5bElreXf8m9HnmPc3E1BQ==} engines: {node: '>=10'} hasBin: true dependencies: @@ -18618,8 +18619,8 @@ packages: resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} engines: {node: '>=8'} - /type-fest@4.15.0: - resolution: {integrity: sha512-tB9lu0pQpX5KJq54g+oHOLumOx+pMep4RaM6liXh2PKmVRFF+/vAtUP0ZaJ0kOySfVNjF6doBWPHhBhISKdlIA==} + /type-fest@4.16.0: + resolution: {integrity: sha512-z7Rf5PXxIhbI6eJBTwdqe5bO02nUUmctq4WqviFSstBAWV0YNtEQRhEnZw73WJ8sZOqgFG6Jdl8gYZu7NBJZnA==} engines: {node: '>=16'} dev: false From 7a107e5db79fd9dc713f1abe3f3be7990929b036 Mon Sep 17 00:00:00 2001 From: Per-Kristian Nordnes Date: Mon, 29 Apr 2024 12:56:38 +0200 Subject: [PATCH 07/31] chore: add codeowners to block-tools --- .github/CODEOWNERS | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 50067131931..23fe94139e9 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -23,6 +23,9 @@ /packages/sanity/src/core/form/types/blockProps.ts @sanity-io/studio-ex /packages/@sanity/types/src/schema/definition/type/block.ts @sanity-io/studio-ex +# -- Block tools -- +/packages/@sanity/block-tools/ @sanity-io/studio-ex + # -- Playwright Component tests -- /packages/sanity/playwright-ct @sanity-io/studio-ex From 7c3b865795cd09696a66ad9511d54094624e4eca Mon Sep 17 00:00:00 2001 From: "ecospark[bot]" <128108030+ecospark[bot]@users.noreply.github.com> Date: Mon, 29 Apr 2024 14:21:18 +0200 Subject: [PATCH 08/31] chore(deps): dedupe pnpm-lock.yaml (#6508) Co-authored-by: github-merge-queue[bot] <118344674+github-merge-queue[bot]@users.noreply.github.com> --- pnpm-lock.yaml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a85ffb27154..ec0684ff907 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -8799,7 +8799,7 @@ packages: minipass-pipeline: 1.2.4 p-map: 4.0.0 ssri: 10.0.5 - tar: 6.1.11 + tar: 6.2.1 unique-filename: 3.0.0 dev: true @@ -8817,7 +8817,7 @@ packages: minipass-pipeline: 1.2.4 p-map: 4.0.0 ssri: 10.0.5 - tar: 6.1.11 + tar: 6.2.1 unique-filename: 3.0.0 dev: true @@ -11039,9 +11039,9 @@ packages: engines: {node: '>=10'} dependencies: cross-spawn: 7.0.3 - get-stream: 6.0.0 + get-stream: 6.0.1 human-signals: 2.1.0 - is-stream: 2.0.0 + is-stream: 2.0.1 merge-stream: 2.0.0 npm-run-path: 4.0.1 onetime: 5.1.2 @@ -15079,7 +15079,7 @@ packages: nopt: 7.2.0 proc-log: 3.0.0 semver: 7.6.0 - tar: 6.1.11 + tar: 6.2.1 which: 4.0.0 transitivePeerDependencies: - supports-color @@ -15578,7 +15578,7 @@ packages: bl: 4.1.0 chalk: 4.1.2 cli-cursor: 3.1.0 - cli-spinners: 2.6.1 + cli-spinners: 2.9.2 is-interactive: 1.0.0 log-symbols: 4.1.0 strip-ansi: 6.0.1 @@ -15790,7 +15790,7 @@ packages: read-package-json-fast: 3.0.2 sigstore: 2.3.0 ssri: 10.0.5 - tar: 6.1.11 + tar: 6.2.1 transitivePeerDependencies: - bluebird - supports-color From 3b683fe2133200c5873b71dfec217b43253b0da9 Mon Sep 17 00:00:00 2001 From: Jordan Lawrence Date: Mon, 29 Apr 2024 14:28:35 +0100 Subject: [PATCH 09/31] fix(pte): tidying implementation --- .../portable-text-editor/src/editor/PortableTextEditor.tsx | 1 - .../src/editor/plugins/createWithPortableTextLists.ts | 1 - .../src/editor/plugins/createWithPortableTextMarkModel.ts | 2 -- .../src/core/form/inputs/PortableText/toolbar/ActionMenu.tsx | 4 ---- .../src/core/form/inputs/PortableText/toolbar/helpers.tsx | 1 - .../sanity/src/core/form/inputs/PortableText/toolbar/hooks.ts | 2 +- 6 files changed, 1 insertion(+), 10 deletions(-) diff --git a/packages/@sanity/portable-text-editor/src/editor/PortableTextEditor.tsx b/packages/@sanity/portable-text-editor/src/editor/PortableTextEditor.tsx index ba76c0bd167..a673dea81e8 100644 --- a/packages/@sanity/portable-text-editor/src/editor/PortableTextEditor.tsx +++ b/packages/@sanity/portable-text-editor/src/editor/PortableTextEditor.tsx @@ -278,7 +278,6 @@ export class PortableTextEditor extends Component { } static toggleMark = (editor: PortableTextEditor, mark: string): void => { debug(`Host toggling mark`, mark) - console.log('here', mark) editor.editable?.toggleMark(mark) } static getFragment = (editor: PortableTextEditor): PortableTextBlock[] | undefined => { diff --git a/packages/@sanity/portable-text-editor/src/editor/plugins/createWithPortableTextLists.ts b/packages/@sanity/portable-text-editor/src/editor/plugins/createWithPortableTextLists.ts index fb50630f294..0670d5c68b7 100644 --- a/packages/@sanity/portable-text-editor/src/editor/plugins/createWithPortableTextLists.ts +++ b/packages/@sanity/portable-text-editor/src/editor/plugins/createWithPortableTextLists.ts @@ -140,7 +140,6 @@ export function createWithPortableTextLists(types: PortableTextMemberSchemaTypes if (!editor.selection) { return false } - const selectedBlocks = [ ...Editor.nodes(editor, { at: editor.selection, diff --git a/packages/@sanity/portable-text-editor/src/editor/plugins/createWithPortableTextMarkModel.ts b/packages/@sanity/portable-text-editor/src/editor/plugins/createWithPortableTextMarkModel.ts index 298ead44bd3..c43196c9f9b 100644 --- a/packages/@sanity/portable-text-editor/src/editor/plugins/createWithPortableTextMarkModel.ts +++ b/packages/@sanity/portable-text-editor/src/editor/plugins/createWithPortableTextMarkModel.ts @@ -355,9 +355,7 @@ export function createWithPortableTextMarkModel( Editor.nodes(editor, {match: Text.isText, at: editor.selection}), ) - // console.log({isExpanded: Range.isExpanded(editor.selection)}) if (Range.isExpanded(editor.selection)) { - // console.log({selectedNodes}) return selectedNodes.every(isNodeWithMark) } diff --git a/packages/sanity/src/core/form/inputs/PortableText/toolbar/ActionMenu.tsx b/packages/sanity/src/core/form/inputs/PortableText/toolbar/ActionMenu.tsx index a807bfabb9b..54ec1e30b92 100644 --- a/packages/sanity/src/core/form/inputs/PortableText/toolbar/ActionMenu.tsx +++ b/packages/sanity/src/core/form/inputs/PortableText/toolbar/ActionMenu.tsx @@ -87,10 +87,6 @@ export const ActionMenu = memo(function ActionMenu(props: ActionMenuProps) { }) const active = activeKeys.includes(action.key) - - // if (action.title === 'Strong') { - // console.log({active, activeKeys, action: action.title}) - // } return ( { - console.log('toggleMark', decorator.value) PortableTextEditor.toggleMark(editor, decorator.value) PortableTextEditor.focus(editor) }, diff --git a/packages/sanity/src/core/form/inputs/PortableText/toolbar/hooks.ts b/packages/sanity/src/core/form/inputs/PortableText/toolbar/hooks.ts index eebca97b27c..30caf8971be 100644 --- a/packages/sanity/src/core/form/inputs/PortableText/toolbar/hooks.ts +++ b/packages/sanity/src/core/form/inputs/PortableText/toolbar/hooks.ts @@ -73,7 +73,7 @@ export function useActiveActionKeys({ }): string[] { const editor = usePortableTextEditor() const selection = usePortableTextEditorSelection() - // console.log({selection}) + return useUnique( useMemo( () => { From fec2fbc8901fe5b2a65b8dafdc44185c2eee640e Mon Sep 17 00:00:00 2001 From: RitaDias Date: Mon, 29 Apr 2024 12:52:42 +0200 Subject: [PATCH 10/31] fix(@sanity): issue where hidden unicode characters were bloating document in PTE (#6440) * fix(portable-text-editor): issue shown in tests re stega. use duplicate code * test(playwright-ct): add test * chore(sanity): remove prettier linting * test(sanity): fix missing snapshot * test(sanity): update test after realising the test would pass always if comparing object number * chore: test unicode removal * chore: test unicode removal * chore(@sanity): remove old solution * fix(@sanity/block-tools): unicode issue. remove vercel/stega and move to block-tools * test(@sanity/block-tools): for unicode * fix(@sanity/block-tools): utf8 characters weren't beign filtered. using the vercel/stega * chore: update lock file * (chore): update pnpm lock --- pnpm-lock.yaml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ec0684ff907..a85ffb27154 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -8799,7 +8799,7 @@ packages: minipass-pipeline: 1.2.4 p-map: 4.0.0 ssri: 10.0.5 - tar: 6.2.1 + tar: 6.1.11 unique-filename: 3.0.0 dev: true @@ -8817,7 +8817,7 @@ packages: minipass-pipeline: 1.2.4 p-map: 4.0.0 ssri: 10.0.5 - tar: 6.2.1 + tar: 6.1.11 unique-filename: 3.0.0 dev: true @@ -11039,9 +11039,9 @@ packages: engines: {node: '>=10'} dependencies: cross-spawn: 7.0.3 - get-stream: 6.0.1 + get-stream: 6.0.0 human-signals: 2.1.0 - is-stream: 2.0.1 + is-stream: 2.0.0 merge-stream: 2.0.0 npm-run-path: 4.0.1 onetime: 5.1.2 @@ -15079,7 +15079,7 @@ packages: nopt: 7.2.0 proc-log: 3.0.0 semver: 7.6.0 - tar: 6.2.1 + tar: 6.1.11 which: 4.0.0 transitivePeerDependencies: - supports-color @@ -15578,7 +15578,7 @@ packages: bl: 4.1.0 chalk: 4.1.2 cli-cursor: 3.1.0 - cli-spinners: 2.9.2 + cli-spinners: 2.6.1 is-interactive: 1.0.0 log-symbols: 4.1.0 strip-ansi: 6.0.1 @@ -15790,7 +15790,7 @@ packages: read-package-json-fast: 3.0.2 sigstore: 2.3.0 ssri: 10.0.5 - tar: 6.2.1 + tar: 6.1.11 transitivePeerDependencies: - bluebird - supports-color From 29eb8065f1ca752f534d60f33b4ae20670d65804 Mon Sep 17 00:00:00 2001 From: "ecospark[bot]" <128108030+ecospark[bot]@users.noreply.github.com> Date: Mon, 29 Apr 2024 14:21:18 +0200 Subject: [PATCH 11/31] chore(deps): dedupe pnpm-lock.yaml (#6508) Co-authored-by: github-merge-queue[bot] <118344674+github-merge-queue[bot]@users.noreply.github.com> --- pnpm-lock.yaml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a85ffb27154..ec0684ff907 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -8799,7 +8799,7 @@ packages: minipass-pipeline: 1.2.4 p-map: 4.0.0 ssri: 10.0.5 - tar: 6.1.11 + tar: 6.2.1 unique-filename: 3.0.0 dev: true @@ -8817,7 +8817,7 @@ packages: minipass-pipeline: 1.2.4 p-map: 4.0.0 ssri: 10.0.5 - tar: 6.1.11 + tar: 6.2.1 unique-filename: 3.0.0 dev: true @@ -11039,9 +11039,9 @@ packages: engines: {node: '>=10'} dependencies: cross-spawn: 7.0.3 - get-stream: 6.0.0 + get-stream: 6.0.1 human-signals: 2.1.0 - is-stream: 2.0.0 + is-stream: 2.0.1 merge-stream: 2.0.0 npm-run-path: 4.0.1 onetime: 5.1.2 @@ -15079,7 +15079,7 @@ packages: nopt: 7.2.0 proc-log: 3.0.0 semver: 7.6.0 - tar: 6.1.11 + tar: 6.2.1 which: 4.0.0 transitivePeerDependencies: - supports-color @@ -15578,7 +15578,7 @@ packages: bl: 4.1.0 chalk: 4.1.2 cli-cursor: 3.1.0 - cli-spinners: 2.6.1 + cli-spinners: 2.9.2 is-interactive: 1.0.0 log-symbols: 4.1.0 strip-ansi: 6.0.1 @@ -15790,7 +15790,7 @@ packages: read-package-json-fast: 3.0.2 sigstore: 2.3.0 ssri: 10.0.5 - tar: 6.1.11 + tar: 6.2.1 transitivePeerDependencies: - bluebird - supports-color From 09e84a0b0da859d672566742080f9730ec84d815 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 29 Apr 2024 14:57:22 +0200 Subject: [PATCH 12/31] chore(deps): update dependency @sanity/pkg-utils to v6.8.8 (#6509) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 2 +- packages/sanity/package.json | 2 +- pnpm-lock.yaml | 258 +++++++++++++++++------------------ 3 files changed, 131 insertions(+), 131 deletions(-) diff --git a/package.json b/package.json index 4601989a239..6de1df3649e 100644 --- a/package.json +++ b/package.json @@ -103,7 +103,7 @@ "@sanity/client": "^6.15.20", "@sanity/eslint-config-i18n": "1.0.0", "@sanity/eslint-config-studio": "^4.0.0", - "@sanity/pkg-utils": "6.8.7", + "@sanity/pkg-utils": "6.8.8", "@sanity/prettier-config": "^1.0.2", "@sanity/test": "0.0.1-alpha.1", "@sanity/tsdoc": "1.0.40", diff --git a/packages/sanity/package.json b/packages/sanity/package.json index ea82c946114..83996f3afdd 100644 --- a/packages/sanity/package.json +++ b/packages/sanity/package.json @@ -248,7 +248,7 @@ "@repo/package.config": "workspace:*", "@sanity/codegen": "3.39.1", "@sanity/generate-help-url": "^3.0.0", - "@sanity/pkg-utils": "6.8.7", + "@sanity/pkg-utils": "6.8.8", "@sanity/tsdoc": "1.0.40", "@sanity/ui-workshop": "^1.2.11", "@testing-library/jest-dom": "^6.2.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ec0684ff907..38d290ff82e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -53,8 +53,8 @@ importers: specifier: ^4.0.0 version: 4.0.0(eslint@8.57.0)(typescript@5.4.5) '@sanity/pkg-utils': - specifier: 6.8.7 - version: 6.8.7(@types/node@18.19.31)(typescript@5.4.5) + specifier: 6.8.8 + version: 6.8.8(@types/node@18.19.31)(typescript@5.4.5) '@sanity/prettier-config': specifier: ^1.0.2 version: 1.0.2(prettier@3.2.5) @@ -776,7 +776,7 @@ importers: version: 3.0.1 '@rollup/plugin-node-resolve': specifier: ^15.2.3 - version: 15.2.3(rollup@4.16.4) + version: 15.2.3(rollup@4.17.1) '@sanity/eslint-config-studio': specifier: ^4.0.0 version: 4.0.0(eslint@8.57.0)(typescript@5.4.5) @@ -1799,8 +1799,8 @@ importers: specifier: ^3.0.0 version: 3.0.0 '@sanity/pkg-utils': - specifier: 6.8.7 - version: 6.8.7(@types/node@18.19.31)(debug@4.3.4)(typescript@5.4.5) + specifier: 6.8.8 + version: 6.8.8(@types/node@18.19.31)(debug@4.3.4)(typescript@5.4.5) '@sanity/tsdoc': specifier: 1.0.40 version: 1.0.40(@types/node@18.19.31)(debug@4.3.4)(react-dom@18.3.1)(react-is@18.3.1)(react@18.3.1)(sanity@packages+sanity)(styled-components@6.1.8) @@ -4989,15 +4989,15 @@ packages: '@octokit/openapi-types': 18.1.1 dev: true - /@optimize-lodash/rollup-plugin@4.0.4(rollup@4.16.4): + /@optimize-lodash/rollup-plugin@4.0.4(rollup@4.17.1): resolution: {integrity: sha512-zcbnqx7oQWmGA3Xaf6I8m64+Rufebz4fnSuOHf0++aGqHdwbf19t5OdIebn8Deeb1DoyHbaWVezuTZyKw0vBJw==} engines: {node: '>= 12'} peerDependencies: rollup: '>=2.x' dependencies: '@optimize-lodash/transform': 3.0.3 - '@rollup/pluginutils': 5.0.5(rollup@4.16.4) - rollup: 4.16.4 + '@rollup/pluginutils': 5.0.5(rollup@4.17.1) + rollup: 4.17.1 /@optimize-lodash/transform@3.0.3: resolution: {integrity: sha512-LeH2C2nYPfwKLQ1OX7jrfZOYTyRajOhhgoCdz47+5d2oBP8YKL/NknCAcDt2QkzLDLbtZ5QHhKZN56S2D/I1JA==} @@ -5639,7 +5639,7 @@ packages: react-style-proptype: 3.2.2 dev: false - /@rollup/plugin-alias@5.1.0(rollup@4.16.4): + /@rollup/plugin-alias@5.1.0(rollup@4.17.1): resolution: {integrity: sha512-lpA3RZ9PdIG7qqhEfv79tBffNaoDuukFDrmhLqg9ifv99u/ehn+lOg30x2zmhf8AQqQUZaMk/B9fZraQ6/acDQ==} engines: {node: '>=14.0.0'} peerDependencies: @@ -5648,10 +5648,10 @@ packages: rollup: optional: true dependencies: - rollup: 4.16.4 + rollup: 4.17.1 slash: 4.0.0 - /@rollup/plugin-babel@6.0.4(@babel/core@7.24.4)(rollup@4.16.4): + /@rollup/plugin-babel@6.0.4(@babel/core@7.24.4)(rollup@4.17.1): resolution: {integrity: sha512-YF7Y52kFdFT/xVSuVdjkV5ZdX/3YtmX0QulG+x0taQOtJdHYzVU61aSSkAgVJ7NOv6qPkIYiJSgSWWN/DM5sGw==} engines: {node: '>=14.0.0'} peerDependencies: @@ -5666,10 +5666,10 @@ packages: dependencies: '@babel/core': 7.24.4 '@babel/helper-module-imports': 7.24.3 - '@rollup/pluginutils': 5.1.0(rollup@4.16.4) - rollup: 4.16.4 + '@rollup/pluginutils': 5.1.0(rollup@4.17.1) + rollup: 4.17.1 - /@rollup/plugin-commonjs@25.0.7(rollup@4.16.4): + /@rollup/plugin-commonjs@25.0.7(rollup@4.17.1): resolution: {integrity: sha512-nEvcR+LRjEjsaSsc4x3XZfCCvZIaSMenZu/OiwOKGN2UhQpAYI7ru7czFvyWbErlpoGjnSX3D5Ch5FcMA3kRWQ==} engines: {node: '>=14.0.0'} peerDependencies: @@ -5678,15 +5678,15 @@ packages: rollup: optional: true dependencies: - '@rollup/pluginutils': 5.1.0(rollup@4.16.4) + '@rollup/pluginutils': 5.1.0(rollup@4.17.1) commondir: 1.0.1 estree-walker: 2.0.2 glob: 8.1.0 is-reference: 1.2.1 magic-string: 0.30.10 - rollup: 4.16.4 + rollup: 4.17.1 - /@rollup/plugin-json@6.1.0(rollup@4.16.4): + /@rollup/plugin-json@6.1.0(rollup@4.17.1): resolution: {integrity: sha512-EGI2te5ENk1coGeADSIwZ7G2Q8CJS2sF120T7jLw4xFw9n7wIOXHo+kIYRAoVpJAN+kmqZSoO3Fp4JtoNF4ReA==} engines: {node: '>=14.0.0'} peerDependencies: @@ -5695,10 +5695,10 @@ packages: rollup: optional: true dependencies: - '@rollup/pluginutils': 5.1.0(rollup@4.16.4) - rollup: 4.16.4 + '@rollup/pluginutils': 5.1.0(rollup@4.17.1) + rollup: 4.17.1 - /@rollup/plugin-node-resolve@15.2.3(rollup@4.16.4): + /@rollup/plugin-node-resolve@15.2.3(rollup@4.17.1): resolution: {integrity: sha512-j/lym8nf5E21LwBT4Df1VD6hRO2L2iwUeUmP7litikRsVp1H6NWx20NEp0Y7su+7XGc476GnXXc4kFeZNGmaSQ==} engines: {node: '>=14.0.0'} peerDependencies: @@ -5707,15 +5707,15 @@ packages: rollup: optional: true dependencies: - '@rollup/pluginutils': 5.1.0(rollup@4.16.4) + '@rollup/pluginutils': 5.1.0(rollup@4.17.1) '@types/resolve': 1.20.2 deepmerge: 4.3.1 is-builtin-module: 3.2.1 is-module: 1.0.0 resolve: 1.22.8 - rollup: 4.16.4 + rollup: 4.17.1 - /@rollup/plugin-replace@5.0.5(rollup@4.16.4): + /@rollup/plugin-replace@5.0.5(rollup@4.17.1): resolution: {integrity: sha512-rYO4fOi8lMaTg/z5Jb+hKnrHHVn8j2lwkqwyS4kTRhKyWOLf2wST2sWXr4WzWiTcoHTp2sTjqUbqIj2E39slKQ==} engines: {node: '>=14.0.0'} peerDependencies: @@ -5724,11 +5724,11 @@ packages: rollup: optional: true dependencies: - '@rollup/pluginutils': 5.1.0(rollup@4.16.4) + '@rollup/pluginutils': 5.1.0(rollup@4.17.1) magic-string: 0.30.10 - rollup: 4.16.4 + rollup: 4.17.1 - /@rollup/plugin-terser@0.4.4(rollup@4.16.4): + /@rollup/plugin-terser@0.4.4(rollup@4.17.1): resolution: {integrity: sha512-XHeJC5Bgvs8LfukDwWZp7yeqin6ns8RTl2B9avbejt6tZqsqvVoWI7ZTQrcNsfKEDWBTnTxM8nMDkO2IFFbd0A==} engines: {node: '>=14.0.0'} peerDependencies: @@ -5737,12 +5737,12 @@ packages: rollup: optional: true dependencies: - rollup: 4.16.4 + rollup: 4.17.1 serialize-javascript: 6.0.2 smob: 1.5.0 terser: 5.30.4 - /@rollup/pluginutils@5.0.5(rollup@4.16.4): + /@rollup/pluginutils@5.0.5(rollup@4.17.1): resolution: {integrity: sha512-6aEYR910NyP73oHiJglti74iRyOwgFU4x3meH/H8OJx6Ry0j6cOVZ5X/wTvub7G7Ao6qaHBEaNsV3GLJkSsF+Q==} engines: {node: '>=14.0.0'} peerDependencies: @@ -5754,9 +5754,9 @@ packages: '@types/estree': 1.0.5 estree-walker: 2.0.2 picomatch: 2.3.1 - rollup: 4.16.4 + rollup: 4.17.1 - /@rollup/pluginutils@5.1.0(rollup@4.16.4): + /@rollup/pluginutils@5.1.0(rollup@4.17.1): resolution: {integrity: sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==} engines: {node: '>=14.0.0'} peerDependencies: @@ -5768,115 +5768,115 @@ packages: '@types/estree': 1.0.5 estree-walker: 2.0.2 picomatch: 2.3.1 - rollup: 4.16.4 + rollup: 4.17.1 - /@rollup/rollup-android-arm-eabi@4.16.4: - resolution: {integrity: sha512-GkhjAaQ8oUTOKE4g4gsZ0u8K/IHU1+2WQSgS1TwTcYvL+sjbaQjNHFXbOJ6kgqGHIO1DfUhI/Sphi9GkRT9K+Q==} + /@rollup/rollup-android-arm-eabi@4.17.1: + resolution: {integrity: sha512-P6Wg856Ou/DLpR+O0ZLneNmrv7QpqBg+hK4wE05ijbC/t349BRfMfx+UFj5Ha3fCFopIa6iSZlpdaB4agkWp2Q==} cpu: [arm] os: [android] requiresBuild: true optional: true - /@rollup/rollup-android-arm64@4.16.4: - resolution: {integrity: sha512-Bvm6D+NPbGMQOcxvS1zUl8H7DWlywSXsphAeOnVeiZLQ+0J6Is8T7SrjGTH29KtYkiY9vld8ZnpV3G2EPbom+w==} + /@rollup/rollup-android-arm64@4.17.1: + resolution: {integrity: sha512-piwZDjuW2WiHr05djVdUkrG5JbjnGbtx8BXQchYCMfib/nhjzWoiScelZ+s5IJI7lecrwSxHCzW026MWBL+oJQ==} cpu: [arm64] os: [android] requiresBuild: true optional: true - /@rollup/rollup-darwin-arm64@4.16.4: - resolution: {integrity: sha512-i5d64MlnYBO9EkCOGe5vPR/EeDwjnKOGGdd7zKFhU5y8haKhQZTN2DgVtpODDMxUr4t2K90wTUJg7ilgND6bXw==} + /@rollup/rollup-darwin-arm64@4.17.1: + resolution: {integrity: sha512-LsZXXIsN5Q460cKDT4Y+bzoPDhBmO5DTr7wP80d+2EnYlxSgkwdPfE3hbE+Fk8dtya+8092N9srjBTJ0di8RIA==} cpu: [arm64] os: [darwin] requiresBuild: true optional: true - /@rollup/rollup-darwin-x64@4.16.4: - resolution: {integrity: sha512-WZupV1+CdUYehaZqjaFTClJI72fjJEgTXdf4NbW69I9XyvdmztUExBtcI2yIIU6hJtYvtwS6pkTkHJz+k08mAQ==} + /@rollup/rollup-darwin-x64@4.17.1: + resolution: {integrity: sha512-S7TYNQpWXB9APkxu/SLmYHezWwCoZRA9QLgrDeml+SR2A1LLPD2DBUdUlvmCF7FUpRMKvbeeWky+iizQj65Etw==} cpu: [x64] os: [darwin] requiresBuild: true optional: true - /@rollup/rollup-linux-arm-gnueabihf@4.16.4: - resolution: {integrity: sha512-ADm/xt86JUnmAfA9mBqFcRp//RVRt1ohGOYF6yL+IFCYqOBNwy5lbEK05xTsEoJq+/tJzg8ICUtS82WinJRuIw==} + /@rollup/rollup-linux-arm-gnueabihf@4.17.1: + resolution: {integrity: sha512-Lq2JR5a5jsA5um2ZoLiXXEaOagnVyCpCW7xvlcqHC7y46tLwTEgUSTM3a2TfmmTMmdqv+jknUioWXlmxYxE9Yw==} cpu: [arm] os: [linux] requiresBuild: true optional: true - /@rollup/rollup-linux-arm-musleabihf@4.16.4: - resolution: {integrity: sha512-tJfJaXPiFAG+Jn3cutp7mCs1ePltuAgRqdDZrzb1aeE3TktWWJ+g7xK9SNlaSUFw6IU4QgOxAY4rA+wZUT5Wfg==} + /@rollup/rollup-linux-arm-musleabihf@4.17.1: + resolution: {integrity: sha512-9BfzwyPNV0IizQoR+5HTNBGkh1KXE8BqU0DBkqMngmyFW7BfuIZyMjQ0s6igJEiPSBvT3ZcnIFohZ19OqjhDPg==} cpu: [arm] os: [linux] requiresBuild: true optional: true - /@rollup/rollup-linux-arm64-gnu@4.16.4: - resolution: {integrity: sha512-7dy1BzQkgYlUTapDTvK997cgi0Orh5Iu7JlZVBy1MBURk7/HSbHkzRnXZa19ozy+wwD8/SlpJnOOckuNZtJR9w==} + /@rollup/rollup-linux-arm64-gnu@4.17.1: + resolution: {integrity: sha512-e2uWaoxo/rtzA52OifrTSXTvJhAXb0XeRkz4CdHBK2KtxrFmuU/uNd544Ogkpu938BzEfvmWs8NZ8Axhw33FDw==} cpu: [arm64] os: [linux] requiresBuild: true optional: true - /@rollup/rollup-linux-arm64-musl@4.16.4: - resolution: {integrity: sha512-zsFwdUw5XLD1gQe0aoU2HVceI6NEW7q7m05wA46eUAyrkeNYExObfRFQcvA6zw8lfRc5BHtan3tBpo+kqEOxmg==} + /@rollup/rollup-linux-arm64-musl@4.17.1: + resolution: {integrity: sha512-ekggix/Bc/d/60H1Mi4YeYb/7dbal1kEDZ6sIFVAE8pUSx7PiWeEh+NWbL7bGu0X68BBIkgF3ibRJe1oFTksQQ==} cpu: [arm64] os: [linux] requiresBuild: true optional: true - /@rollup/rollup-linux-powerpc64le-gnu@4.16.4: - resolution: {integrity: sha512-p8C3NnxXooRdNrdv6dBmRTddEapfESEUflpICDNKXpHvTjRRq1J82CbU5G3XfebIZyI3B0s074JHMWD36qOW6w==} + /@rollup/rollup-linux-powerpc64le-gnu@4.17.1: + resolution: {integrity: sha512-UGV0dUo/xCv4pkr/C8KY7XLFwBNnvladt8q+VmdKrw/3RUd3rD0TptwjisvE2TTnnlENtuY4/PZuoOYRiGp8Gw==} cpu: [ppc64] os: [linux] requiresBuild: true optional: true - /@rollup/rollup-linux-riscv64-gnu@4.16.4: - resolution: {integrity: sha512-Lh/8ckoar4s4Id2foY7jNgitTOUQczwMWNYi+Mjt0eQ9LKhr6sK477REqQkmy8YHY3Ca3A2JJVdXnfb3Rrwkng==} + /@rollup/rollup-linux-riscv64-gnu@4.17.1: + resolution: {integrity: sha512-gEYmYYHaehdvX46mwXrU49vD6Euf1Bxhq9pPb82cbUU9UT2NV+RSckQ5tKWOnNXZixKsy8/cPGtiUWqzPuAcXQ==} cpu: [riscv64] os: [linux] requiresBuild: true optional: true - /@rollup/rollup-linux-s390x-gnu@4.16.4: - resolution: {integrity: sha512-1xwwn9ZCQYuqGmulGsTZoKrrn0z2fAur2ujE60QgyDpHmBbXbxLaQiEvzJWDrscRq43c8DnuHx3QorhMTZgisQ==} + /@rollup/rollup-linux-s390x-gnu@4.17.1: + resolution: {integrity: sha512-xeae5pMAxHFp6yX5vajInG2toST5lsCTrckSRUFwNgzYqnUjNBcQyqk1bXUxX5yhjWFl2Mnz3F8vQjl+2FRIcw==} cpu: [s390x] os: [linux] requiresBuild: true optional: true - /@rollup/rollup-linux-x64-gnu@4.16.4: - resolution: {integrity: sha512-LuOGGKAJ7dfRtxVnO1i3qWc6N9sh0Em/8aZ3CezixSTM+E9Oq3OvTsvC4sm6wWjzpsIlOCnZjdluINKESflJLA==} + /@rollup/rollup-linux-x64-gnu@4.17.1: + resolution: {integrity: sha512-AsdnINQoDWfKpBzCPqQWxSPdAWzSgnYbrJYtn6W0H2E9It5bZss99PiLA8CgmDRfvKygt20UpZ3xkhFlIfX9zQ==} cpu: [x64] os: [linux] requiresBuild: true optional: true - /@rollup/rollup-linux-x64-musl@4.16.4: - resolution: {integrity: sha512-ch86i7KkJKkLybDP2AtySFTRi5fM3KXp0PnHocHuJMdZwu7BuyIKi35BE9guMlmTpwwBTB3ljHj9IQXnTCD0vA==} + /@rollup/rollup-linux-x64-musl@4.17.1: + resolution: {integrity: sha512-KoB4fyKXTR+wYENkIG3fFF+5G6N4GFvzYx8Jax8BR4vmddtuqSb5oQmYu2Uu067vT/Fod7gxeQYKupm8gAcMSQ==} cpu: [x64] os: [linux] requiresBuild: true optional: true - /@rollup/rollup-win32-arm64-msvc@4.16.4: - resolution: {integrity: sha512-Ma4PwyLfOWZWayfEsNQzTDBVW8PZ6TUUN1uFTBQbF2Chv/+sjenE86lpiEwj2FiviSmSZ4Ap4MaAfl1ciF4aSA==} + /@rollup/rollup-win32-arm64-msvc@4.17.1: + resolution: {integrity: sha512-J0d3NVNf7wBL9t4blCNat+d0PYqAx8wOoY+/9Q5cujnafbX7BmtYk3XvzkqLmFECaWvXGLuHmKj/wrILUinmQg==} cpu: [arm64] os: [win32] requiresBuild: true optional: true - /@rollup/rollup-win32-ia32-msvc@4.16.4: - resolution: {integrity: sha512-9m/ZDrQsdo/c06uOlP3W9G2ENRVzgzbSXmXHT4hwVaDQhYcRpi9bgBT0FTG9OhESxwK0WjQxYOSfv40cU+T69w==} + /@rollup/rollup-win32-ia32-msvc@4.17.1: + resolution: {integrity: sha512-xjgkWUwlq7IbgJSIxvl516FJ2iuC/7ttjsAxSPpC9kkI5iQQFHKyEN5BjbhvJ/IXIZ3yIBcW5QDlWAyrA+TFag==} cpu: [ia32] os: [win32] requiresBuild: true optional: true - /@rollup/rollup-win32-x64-msvc@4.16.4: - resolution: {integrity: sha512-YunpoOAyGLDseanENHmbFvQSfVL5BxW3k7hhy0eN4rb3gS/ct75dVD0EXOWIqFT/nE8XYW6LP6vz6ctKRi0k9A==} + /@rollup/rollup-win32-x64-msvc@4.17.1: + resolution: {integrity: sha512-0QbCkfk6cnnVKWqqlC0cUrrUMDMfu5ffvYMTUHf+qMN2uAb3MKP31LPcwiMXBNsvoFGs/kYdFOsuLmvppCopXA==} cpu: [x64] os: [win32] requiresBuild: true @@ -6257,14 +6257,14 @@ packages: '@babel/types': 7.24.0 '@microsoft/api-extractor': 7.43.1(@types/node@18.19.31) '@microsoft/tsdoc-config': 0.16.2 - '@optimize-lodash/rollup-plugin': 4.0.4(rollup@4.16.4) - '@rollup/plugin-alias': 5.1.0(rollup@4.16.4) - '@rollup/plugin-babel': 6.0.4(@babel/core@7.24.4)(rollup@4.16.4) - '@rollup/plugin-commonjs': 25.0.7(rollup@4.16.4) - '@rollup/plugin-json': 6.1.0(rollup@4.16.4) - '@rollup/plugin-node-resolve': 15.2.3(rollup@4.16.4) - '@rollup/plugin-replace': 5.0.5(rollup@4.16.4) - '@rollup/plugin-terser': 0.4.4(rollup@4.16.4) + '@optimize-lodash/rollup-plugin': 4.0.4(rollup@4.17.1) + '@rollup/plugin-alias': 5.1.0(rollup@4.17.1) + '@rollup/plugin-babel': 6.0.4(@babel/core@7.24.4)(rollup@4.17.1) + '@rollup/plugin-commonjs': 25.0.7(rollup@4.17.1) + '@rollup/plugin-json': 6.1.0(rollup@4.17.1) + '@rollup/plugin-node-resolve': 15.2.3(rollup@4.17.1) + '@rollup/plugin-replace': 5.0.5(rollup@4.17.1) + '@rollup/plugin-terser': 0.4.4(rollup@4.17.1) '@sanity/browserslist-config': 1.0.3 browserslist: 4.23.0 cac: 6.7.14 @@ -6286,8 +6286,8 @@ packages: prompts: 2.4.2 recast: 0.23.6 rimraf: 4.4.1 - rollup: 4.16.4 - rollup-plugin-esbuild: 6.1.1(esbuild@0.20.2)(rollup@4.16.4) + rollup: 4.17.1 + rollup-plugin-esbuild: 6.1.1(esbuild@0.20.2)(rollup@4.17.1) rxjs: 7.8.1 treeify: 1.1.0 typescript: 5.4.5 @@ -6312,14 +6312,14 @@ packages: '@babel/types': 7.24.0 '@microsoft/api-extractor': 7.43.1(@types/node@18.19.31) '@microsoft/tsdoc-config': 0.16.2 - '@optimize-lodash/rollup-plugin': 4.0.4(rollup@4.16.4) - '@rollup/plugin-alias': 5.1.0(rollup@4.16.4) - '@rollup/plugin-babel': 6.0.4(@babel/core@7.24.4)(rollup@4.16.4) - '@rollup/plugin-commonjs': 25.0.7(rollup@4.16.4) - '@rollup/plugin-json': 6.1.0(rollup@4.16.4) - '@rollup/plugin-node-resolve': 15.2.3(rollup@4.16.4) - '@rollup/plugin-replace': 5.0.5(rollup@4.16.4) - '@rollup/plugin-terser': 0.4.4(rollup@4.16.4) + '@optimize-lodash/rollup-plugin': 4.0.4(rollup@4.17.1) + '@rollup/plugin-alias': 5.1.0(rollup@4.17.1) + '@rollup/plugin-babel': 6.0.4(@babel/core@7.24.4)(rollup@4.17.1) + '@rollup/plugin-commonjs': 25.0.7(rollup@4.17.1) + '@rollup/plugin-json': 6.1.0(rollup@4.17.1) + '@rollup/plugin-node-resolve': 15.2.3(rollup@4.17.1) + '@rollup/plugin-replace': 5.0.5(rollup@4.17.1) + '@rollup/plugin-terser': 0.4.4(rollup@4.17.1) '@sanity/browserslist-config': 1.0.3 browserslist: 4.23.0 cac: 6.7.14 @@ -6341,8 +6341,8 @@ packages: prompts: 2.4.2 recast: 0.23.6 rimraf: 4.4.1 - rollup: 4.16.4 - rollup-plugin-esbuild: 6.1.1(esbuild@0.20.2)(rollup@4.16.4) + rollup: 4.17.1 + rollup-plugin-esbuild: 6.1.1(esbuild@0.20.2)(rollup@4.17.1) rxjs: 7.8.1 treeify: 1.1.0 typescript: 5.4.5 @@ -6355,8 +6355,8 @@ packages: - debug - supports-color - /@sanity/pkg-utils@6.8.7(@types/node@18.19.31)(debug@4.3.4)(typescript@5.4.5): - resolution: {integrity: sha512-hqvRmG+2x4vpi9utHjP3+L/FOBFuQcI+chvHDH5VYpFeI7g6cQfTPmFuTNfukk4Gq/x5d4BLP5UJ5mHB4PaOwQ==} + /@sanity/pkg-utils@6.8.8(@types/node@18.19.31)(debug@4.3.4)(typescript@5.4.5): + resolution: {integrity: sha512-YddjWvJuUIPyMF0L40hgonMantzPTqCN5P3wRwvPKVg5s2KzrxFUvbmBuPBqHn43AoCkM4SmPR2shTcRFBwrqA==} engines: {node: '>=18.17.0'} hasBin: true peerDependencies: @@ -6366,14 +6366,14 @@ packages: '@babel/types': 7.24.0 '@microsoft/api-extractor': 7.43.1(@types/node@18.19.31) '@microsoft/tsdoc-config': 0.16.2 - '@optimize-lodash/rollup-plugin': 4.0.4(rollup@4.16.4) - '@rollup/plugin-alias': 5.1.0(rollup@4.16.4) - '@rollup/plugin-babel': 6.0.4(@babel/core@7.24.4)(rollup@4.16.4) - '@rollup/plugin-commonjs': 25.0.7(rollup@4.16.4) - '@rollup/plugin-json': 6.1.0(rollup@4.16.4) - '@rollup/plugin-node-resolve': 15.2.3(rollup@4.16.4) - '@rollup/plugin-replace': 5.0.5(rollup@4.16.4) - '@rollup/plugin-terser': 0.4.4(rollup@4.16.4) + '@optimize-lodash/rollup-plugin': 4.0.4(rollup@4.17.1) + '@rollup/plugin-alias': 5.1.0(rollup@4.17.1) + '@rollup/plugin-babel': 6.0.4(@babel/core@7.24.4)(rollup@4.17.1) + '@rollup/plugin-commonjs': 25.0.7(rollup@4.17.1) + '@rollup/plugin-json': 6.1.0(rollup@4.17.1) + '@rollup/plugin-node-resolve': 15.2.3(rollup@4.17.1) + '@rollup/plugin-replace': 5.0.5(rollup@4.17.1) + '@rollup/plugin-terser': 0.4.4(rollup@4.17.1) '@sanity/browserslist-config': 1.0.3 browserslist: 4.23.0 cac: 6.7.14 @@ -6395,8 +6395,8 @@ packages: prompts: 2.4.2 recast: 0.23.6 rimraf: 4.4.1 - rollup: 4.16.4 - rollup-plugin-esbuild: 6.1.1(esbuild@0.20.2)(rollup@4.16.4) + rollup: 4.17.1 + rollup-plugin-esbuild: 6.1.1(esbuild@0.20.2)(rollup@4.17.1) rxjs: 7.8.1 treeify: 1.1.0 typescript: 5.4.5 @@ -6410,8 +6410,8 @@ packages: - supports-color dev: true - /@sanity/pkg-utils@6.8.7(@types/node@18.19.31)(typescript@5.4.5): - resolution: {integrity: sha512-hqvRmG+2x4vpi9utHjP3+L/FOBFuQcI+chvHDH5VYpFeI7g6cQfTPmFuTNfukk4Gq/x5d4BLP5UJ5mHB4PaOwQ==} + /@sanity/pkg-utils@6.8.8(@types/node@18.19.31)(typescript@5.4.5): + resolution: {integrity: sha512-YddjWvJuUIPyMF0L40hgonMantzPTqCN5P3wRwvPKVg5s2KzrxFUvbmBuPBqHn43AoCkM4SmPR2shTcRFBwrqA==} engines: {node: '>=18.17.0'} hasBin: true peerDependencies: @@ -6421,14 +6421,14 @@ packages: '@babel/types': 7.24.0 '@microsoft/api-extractor': 7.43.1(@types/node@18.19.31) '@microsoft/tsdoc-config': 0.16.2 - '@optimize-lodash/rollup-plugin': 4.0.4(rollup@4.16.4) - '@rollup/plugin-alias': 5.1.0(rollup@4.16.4) - '@rollup/plugin-babel': 6.0.4(@babel/core@7.24.4)(rollup@4.16.4) - '@rollup/plugin-commonjs': 25.0.7(rollup@4.16.4) - '@rollup/plugin-json': 6.1.0(rollup@4.16.4) - '@rollup/plugin-node-resolve': 15.2.3(rollup@4.16.4) - '@rollup/plugin-replace': 5.0.5(rollup@4.16.4) - '@rollup/plugin-terser': 0.4.4(rollup@4.16.4) + '@optimize-lodash/rollup-plugin': 4.0.4(rollup@4.17.1) + '@rollup/plugin-alias': 5.1.0(rollup@4.17.1) + '@rollup/plugin-babel': 6.0.4(@babel/core@7.24.4)(rollup@4.17.1) + '@rollup/plugin-commonjs': 25.0.7(rollup@4.17.1) + '@rollup/plugin-json': 6.1.0(rollup@4.17.1) + '@rollup/plugin-node-resolve': 15.2.3(rollup@4.17.1) + '@rollup/plugin-replace': 5.0.5(rollup@4.17.1) + '@rollup/plugin-terser': 0.4.4(rollup@4.17.1) '@sanity/browserslist-config': 1.0.3 browserslist: 4.23.0 cac: 6.7.14 @@ -6450,8 +6450,8 @@ packages: prompts: 2.4.2 recast: 0.23.6 rimraf: 4.4.1 - rollup: 4.16.4 - rollup-plugin-esbuild: 6.1.1(esbuild@0.20.2)(rollup@4.16.4) + rollup: 4.17.1 + rollup-plugin-esbuild: 6.1.1(esbuild@0.20.2)(rollup@4.17.1) rxjs: 7.8.1 treeify: 1.1.0 typescript: 5.4.5 @@ -17029,19 +17029,19 @@ packages: dependencies: glob: 9.3.5 - /rollup-plugin-esbuild@6.1.1(esbuild@0.20.2)(rollup@4.16.4): + /rollup-plugin-esbuild@6.1.1(esbuild@0.20.2)(rollup@4.17.1): resolution: {integrity: sha512-CehMY9FAqJD5OUaE/Mi1r5z0kNeYxItmRO2zG4Qnv2qWKF09J2lTy5GUzjJR354ZPrLkCj4fiBN41lo8PzBUhw==} engines: {node: '>=14.18.0'} peerDependencies: esbuild: '>=0.18.0' rollup: ^1.20.0 || ^2.0.0 || ^3.0.0 || ^4.0.0 dependencies: - '@rollup/pluginutils': 5.1.0(rollup@4.16.4) + '@rollup/pluginutils': 5.1.0(rollup@4.17.1) debug: 4.3.4(supports-color@9.4.0) es-module-lexer: 1.5.0 esbuild: 0.20.2 get-tsconfig: 4.7.3 - rollup: 4.16.4 + rollup: 4.17.1 transitivePeerDependencies: - supports-color @@ -17052,29 +17052,29 @@ packages: optionalDependencies: fsevents: 2.3.3 - /rollup@4.16.4: - resolution: {integrity: sha512-kuaTJSUbz+Wsb2ATGvEknkI12XV40vIiHmLuFlejoo7HtDok/O5eDDD0UpCVY5bBX5U5RYo8wWP83H7ZsqVEnA==} + /rollup@4.17.1: + resolution: {integrity: sha512-0gG94inrUtg25sB2V/pApwiv1lUb0bQ25FPNuzO89Baa+B+c0ccaaBKM5zkZV/12pUUdH+lWCSm9wmHqyocuVQ==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true dependencies: '@types/estree': 1.0.5 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.16.4 - '@rollup/rollup-android-arm64': 4.16.4 - '@rollup/rollup-darwin-arm64': 4.16.4 - '@rollup/rollup-darwin-x64': 4.16.4 - '@rollup/rollup-linux-arm-gnueabihf': 4.16.4 - '@rollup/rollup-linux-arm-musleabihf': 4.16.4 - '@rollup/rollup-linux-arm64-gnu': 4.16.4 - '@rollup/rollup-linux-arm64-musl': 4.16.4 - '@rollup/rollup-linux-powerpc64le-gnu': 4.16.4 - '@rollup/rollup-linux-riscv64-gnu': 4.16.4 - '@rollup/rollup-linux-s390x-gnu': 4.16.4 - '@rollup/rollup-linux-x64-gnu': 4.16.4 - '@rollup/rollup-linux-x64-musl': 4.16.4 - '@rollup/rollup-win32-arm64-msvc': 4.16.4 - '@rollup/rollup-win32-ia32-msvc': 4.16.4 - '@rollup/rollup-win32-x64-msvc': 4.16.4 + '@rollup/rollup-android-arm-eabi': 4.17.1 + '@rollup/rollup-android-arm64': 4.17.1 + '@rollup/rollup-darwin-arm64': 4.17.1 + '@rollup/rollup-darwin-x64': 4.17.1 + '@rollup/rollup-linux-arm-gnueabihf': 4.17.1 + '@rollup/rollup-linux-arm-musleabihf': 4.17.1 + '@rollup/rollup-linux-arm64-gnu': 4.17.1 + '@rollup/rollup-linux-arm64-musl': 4.17.1 + '@rollup/rollup-linux-powerpc64le-gnu': 4.17.1 + '@rollup/rollup-linux-riscv64-gnu': 4.17.1 + '@rollup/rollup-linux-s390x-gnu': 4.17.1 + '@rollup/rollup-linux-x64-gnu': 4.17.1 + '@rollup/rollup-linux-x64-musl': 4.17.1 + '@rollup/rollup-win32-arm64-msvc': 4.17.1 + '@rollup/rollup-win32-ia32-msvc': 4.17.1 + '@rollup/rollup-win32-x64-msvc': 4.17.1 fsevents: 2.3.3 /rrweb-cssom@0.6.0: @@ -19069,7 +19069,7 @@ packages: '@types/node': 18.19.31 esbuild: 0.20.2 postcss: 8.4.38 - rollup: 4.16.4 + rollup: 4.17.1 optionalDependencies: fsevents: 2.3.3 From caaca42610d49334e6253c8a7ff8fb564dabe8dc Mon Sep 17 00:00:00 2001 From: cngonzalez Date: Mon, 29 Apr 2024 08:57:58 -0400 Subject: [PATCH 13/31] feat: use prefersLatestPublished parameter in DocumentPaneProvider (#6486) --- .../panes/document/DocumentPaneProvider.tsx | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/packages/sanity/src/structure/panes/document/DocumentPaneProvider.tsx b/packages/sanity/src/structure/panes/document/DocumentPaneProvider.tsx index 958546ef61d..4be3a1468e1 100644 --- a/packages/sanity/src/structure/panes/document/DocumentPaneProvider.tsx +++ b/packages/sanity/src/structure/panes/document/DocumentPaneProvider.tsx @@ -146,6 +146,22 @@ export const DocumentPaneProvider = memo((props: DocumentPaneProviderProps) => { const [timelineMode, setTimelineMode] = useState<'since' | 'rev' | 'closed'>('closed') const [timelineError, setTimelineError] = useState(null) + + /** + * The `preferLatestPublished` parameter can be used to "force" viewing the revision + * of the last published document. This is not a permanent function, and will likely + * be removed when we move to a more robust way of viewing "releases". + */ + useEffect(() => { + if (params.prefersLatestPublished && editState.published) { + setPaneParams({ + //ensure we only run on first load + ...omit(params, 'prefersLatestPublished'), + rev: `${editState.published._updatedAt}/${editState.published._rev}`, + }) + } + }, [editState, setPaneParams, params]) + /** * Create an intermediate store which handles document Timeline + TimelineController * creation, and also fetches pre-requsite document snapshots. Compatible with `useSyncExternalStore` From 3332ae4789e255048bf9bc4338d70d580f368d6c Mon Sep 17 00:00:00 2001 From: RitaDias Date: Mon, 29 Apr 2024 12:52:42 +0200 Subject: [PATCH 14/31] fix(@sanity): issue where hidden unicode characters were bloating document in PTE (#6440) * fix(portable-text-editor): issue shown in tests re stega. use duplicate code * test(playwright-ct): add test * chore(sanity): remove prettier linting * test(sanity): fix missing snapshot * test(sanity): update test after realising the test would pass always if comparing object number * chore: test unicode removal * chore: test unicode removal * chore(@sanity): remove old solution * fix(@sanity/block-tools): unicode issue. remove vercel/stega and move to block-tools * test(@sanity/block-tools): for unicode * fix(@sanity/block-tools): utf8 characters weren't beign filtered. using the vercel/stega * chore: update lock file * (chore): update pnpm lock --- pnpm-lock.yaml | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 38d290ff82e..5a34ea9a744 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -5684,7 +5684,7 @@ packages: glob: 8.1.0 is-reference: 1.2.1 magic-string: 0.30.10 - rollup: 4.17.1 + rollup: 4.16.4 /@rollup/plugin-json@6.1.0(rollup@4.17.1): resolution: {integrity: sha512-EGI2te5ENk1coGeADSIwZ7G2Q8CJS2sF120T7jLw4xFw9n7wIOXHo+kIYRAoVpJAN+kmqZSoO3Fp4JtoNF4ReA==} @@ -5724,9 +5724,9 @@ packages: rollup: optional: true dependencies: - '@rollup/pluginutils': 5.1.0(rollup@4.17.1) + '@rollup/pluginutils': 5.1.0(rollup@4.16.4) magic-string: 0.30.10 - rollup: 4.17.1 + rollup: 4.16.4 /@rollup/plugin-terser@0.4.4(rollup@4.17.1): resolution: {integrity: sha512-XHeJC5Bgvs8LfukDwWZp7yeqin6ns8RTl2B9avbejt6tZqsqvVoWI7ZTQrcNsfKEDWBTnTxM8nMDkO2IFFbd0A==} @@ -8799,7 +8799,7 @@ packages: minipass-pipeline: 1.2.4 p-map: 4.0.0 ssri: 10.0.5 - tar: 6.2.1 + tar: 6.1.11 unique-filename: 3.0.0 dev: true @@ -8817,7 +8817,7 @@ packages: minipass-pipeline: 1.2.4 p-map: 4.0.0 ssri: 10.0.5 - tar: 6.2.1 + tar: 6.1.11 unique-filename: 3.0.0 dev: true @@ -11039,9 +11039,9 @@ packages: engines: {node: '>=10'} dependencies: cross-spawn: 7.0.3 - get-stream: 6.0.1 + get-stream: 6.0.0 human-signals: 2.1.0 - is-stream: 2.0.1 + is-stream: 2.0.0 merge-stream: 2.0.0 npm-run-path: 4.0.1 onetime: 5.1.2 @@ -15079,7 +15079,7 @@ packages: nopt: 7.2.0 proc-log: 3.0.0 semver: 7.6.0 - tar: 6.2.1 + tar: 6.1.11 which: 4.0.0 transitivePeerDependencies: - supports-color @@ -15578,7 +15578,7 @@ packages: bl: 4.1.0 chalk: 4.1.2 cli-cursor: 3.1.0 - cli-spinners: 2.9.2 + cli-spinners: 2.6.1 is-interactive: 1.0.0 log-symbols: 4.1.0 strip-ansi: 6.0.1 @@ -15790,7 +15790,7 @@ packages: read-package-json-fast: 3.0.2 sigstore: 2.3.0 ssri: 10.0.5 - tar: 6.2.1 + tar: 6.1.11 transitivePeerDependencies: - bluebird - supports-color From b9ac7cb775b183615c6e27b1c15d8372c3a426da Mon Sep 17 00:00:00 2001 From: "ecospark[bot]" <128108030+ecospark[bot]@users.noreply.github.com> Date: Mon, 29 Apr 2024 14:21:18 +0200 Subject: [PATCH 15/31] chore(deps): dedupe pnpm-lock.yaml (#6508) Co-authored-by: github-merge-queue[bot] <118344674+github-merge-queue[bot]@users.noreply.github.com> --- pnpm-lock.yaml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5a34ea9a744..f306c7fdc4c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -8799,7 +8799,7 @@ packages: minipass-pipeline: 1.2.4 p-map: 4.0.0 ssri: 10.0.5 - tar: 6.1.11 + tar: 6.2.1 unique-filename: 3.0.0 dev: true @@ -8817,7 +8817,7 @@ packages: minipass-pipeline: 1.2.4 p-map: 4.0.0 ssri: 10.0.5 - tar: 6.1.11 + tar: 6.2.1 unique-filename: 3.0.0 dev: true @@ -11039,9 +11039,9 @@ packages: engines: {node: '>=10'} dependencies: cross-spawn: 7.0.3 - get-stream: 6.0.0 + get-stream: 6.0.1 human-signals: 2.1.0 - is-stream: 2.0.0 + is-stream: 2.0.1 merge-stream: 2.0.0 npm-run-path: 4.0.1 onetime: 5.1.2 @@ -15079,7 +15079,7 @@ packages: nopt: 7.2.0 proc-log: 3.0.0 semver: 7.6.0 - tar: 6.1.11 + tar: 6.2.1 which: 4.0.0 transitivePeerDependencies: - supports-color @@ -15578,7 +15578,7 @@ packages: bl: 4.1.0 chalk: 4.1.2 cli-cursor: 3.1.0 - cli-spinners: 2.6.1 + cli-spinners: 2.9.2 is-interactive: 1.0.0 log-symbols: 4.1.0 strip-ansi: 6.0.1 @@ -15790,7 +15790,7 @@ packages: read-package-json-fast: 3.0.2 sigstore: 2.3.0 ssri: 10.0.5 - tar: 6.1.11 + tar: 6.2.1 transitivePeerDependencies: - bluebird - supports-color From 81e4d015f7611ddc9f140c17e9ca8bb61ac7a283 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 29 Apr 2024 14:57:22 +0200 Subject: [PATCH 16/31] chore(deps): update dependency @sanity/pkg-utils to v6.8.8 (#6509) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- pnpm-lock.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f306c7fdc4c..38d290ff82e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -5684,7 +5684,7 @@ packages: glob: 8.1.0 is-reference: 1.2.1 magic-string: 0.30.10 - rollup: 4.16.4 + rollup: 4.17.1 /@rollup/plugin-json@6.1.0(rollup@4.17.1): resolution: {integrity: sha512-EGI2te5ENk1coGeADSIwZ7G2Q8CJS2sF120T7jLw4xFw9n7wIOXHo+kIYRAoVpJAN+kmqZSoO3Fp4JtoNF4ReA==} @@ -5724,9 +5724,9 @@ packages: rollup: optional: true dependencies: - '@rollup/pluginutils': 5.1.0(rollup@4.16.4) + '@rollup/pluginutils': 5.1.0(rollup@4.17.1) magic-string: 0.30.10 - rollup: 4.16.4 + rollup: 4.17.1 /@rollup/plugin-terser@0.4.4(rollup@4.17.1): resolution: {integrity: sha512-XHeJC5Bgvs8LfukDwWZp7yeqin6ns8RTl2B9avbejt6tZqsqvVoWI7ZTQrcNsfKEDWBTnTxM8nMDkO2IFFbd0A==} From 10a080e10e56fe25f1fcd83849c8a2f6c95a24d3 Mon Sep 17 00:00:00 2001 From: Jordan Lawrence Date: Mon, 29 Apr 2024 15:51:38 +0100 Subject: [PATCH 17/31] fix(pte): simplifying activeAnnotations logic --- .../editor/plugins/createWithEditableAPI.ts | 94 +++++++------------ .../portable-text-editor/src/types/editor.ts | 2 +- 2 files changed, 34 insertions(+), 62 deletions(-) diff --git a/packages/@sanity/portable-text-editor/src/editor/plugins/createWithEditableAPI.ts b/packages/@sanity/portable-text-editor/src/editor/plugins/createWithEditableAPI.ts index a95f0051802..92b4023e33a 100644 --- a/packages/@sanity/portable-text-editor/src/editor/plugins/createWithEditableAPI.ts +++ b/packages/@sanity/portable-text-editor/src/editor/plugins/createWithEditableAPI.ts @@ -1,4 +1,5 @@ import { + isPortableTextSpan, type ObjectSchemaType, type Path, type PortableTextBlock, @@ -267,74 +268,45 @@ export function createWithEditableAPI( } try { const activeAnnotations: PortableTextObject['_type'][] = [] - const spans = Editor.nodes(editor, { - at: editor.selection, - // mode: 'lowest', - match: (node) => Text.isText(node), - }) - // const allSpans = Editor.nodes(editor, { - // at: editor.selection, - // }) - // for (const [span, path] of allSpans) { - // console.log({span, path}) - // } - // && - // node.marks !== undefined && - // Array.isArray(node.marks) && - // node.marks.length > 0, - - const spansArr = [...spans] + const spans = [ + ...Editor.nodes(editor, { + at: editor.selection, + mode: 'lowest', + }), + ] - if (spansArr.some(([span]) => !span.marks?.length)) return activeAnnotations + if ( + spans.some( + ([span]) => + isPortableTextSpan(span) && + span.marks && + Array.isArray(span.marks) && + !span.marks.length, + ) + ) + return [] - const t = spansArr.reduce((acc, [, path]) => { - const [block] = Editor.node(editor, path, {depth: 1}) - if (editor.isTextBlock(block)) { - block.markDefs?.forEach((def) => { - acc[def._type] = (acc[def._type] || 0) + 1 || 1 - }) - } - return acc - }, {}) + const annotationCounts: Record = spans.reduce( + (acc, [, path]) => { + const [block] = Editor.node(editor, path, {depth: 1}) + if (editor.isTextBlock(block)) { + block.markDefs?.forEach((def) => { + acc[def._type] = (acc[def._type] || 0) + 1 || 1 + }) + } + return acc + }, + {} as Record, + ) - Object.entries(t).forEach((def) => { - const [mark, count] = def as [string, number] + Object.entries(annotationCounts).forEach((annotationCount) => { + const [annotationType, count] = annotationCount - if (count >= spansArr.length) { - activeAnnotations.push(mark) + if (count >= spans.length) { + activeAnnotations.push(annotationType) } }) - // for (const [span, path] of spans) { - // console.log({span, path}) - - // if (failFast) return [] - - // if (!span.marks?.length) { - // failFast = true - // } - - // const [block] = Editor.node(editor, path, {depth: 1}) - // if (editor.isTextBlock(block)) { - // trackingMarks.push(block.markDefs) - // // block.markDefs?.forEach((def) => trackingMarks.push(def._type)) - // } - // } - - // console.log(block.markDefs) - // block.markDefs?.forEach((def) => { - // if ( - // Text.isText(span) && - // span.marks && - // Array.isArray(span.marks) && - // span.marks.includes(def._key) - // ) { - // console.log(def._key, def._type) - // activeAnnotations.push(def) - // } - // }) - // } - // } return activeAnnotations } catch (err) { return [] diff --git a/packages/@sanity/portable-text-editor/src/types/editor.ts b/packages/@sanity/portable-text-editor/src/types/editor.ts index b794ebe32a9..31d8a9591d6 100644 --- a/packages/@sanity/portable-text-editor/src/types/editor.ts +++ b/packages/@sanity/portable-text-editor/src/types/editor.ts @@ -38,7 +38,7 @@ export interface EditableAPIDeleteOptions { /** @beta */ export interface EditableAPI { - activeAnnotations: () => PortableTextObject[] + activeAnnotations: () => PortableTextObject['_type'][] addAnnotation: ( type: ObjectSchemaType, value?: {[prop: string]: unknown}, From 2f0e9e796c359a79c21d6b5ea59487db653c46ec Mon Sep 17 00:00:00 2001 From: Jordan Lawrence Date: Mon, 29 Apr 2024 19:48:05 +0100 Subject: [PATCH 18/31] fix(pte): new isAnnotationActive static method --- .../src/editor/PortableTextEditor.tsx | 7 +++++-- .../src/editor/plugins/createWithEditableAPI.ts | 14 +++++++------- .../portable-text-editor/src/types/editor.ts | 2 +- .../core/form/inputs/PortableText/toolbar/hooks.ts | 4 +--- 4 files changed, 14 insertions(+), 13 deletions(-) diff --git a/packages/@sanity/portable-text-editor/src/editor/PortableTextEditor.tsx b/packages/@sanity/portable-text-editor/src/editor/PortableTextEditor.tsx index a673dea81e8..0dcb78f4758 100644 --- a/packages/@sanity/portable-text-editor/src/editor/PortableTextEditor.tsx +++ b/packages/@sanity/portable-text-editor/src/editor/PortableTextEditor.tsx @@ -178,8 +178,11 @@ export class PortableTextEditor extends Component { } // Static API methods - static activeAnnotations = (editor: PortableTextEditor): PortableTextObject['_type'][] => { - return editor && editor.editable ? editor.editable.activeAnnotations() : [] + static isAnnotationActive = ( + editor: PortableTextEditor, + annotationType: PortableTextObject['_type'], + ): boolean => { + return editor && editor.editable ? editor.editable.isAnnotationActive(annotationType) : false } static addAnnotation = ( editor: PortableTextEditor, diff --git a/packages/@sanity/portable-text-editor/src/editor/plugins/createWithEditableAPI.ts b/packages/@sanity/portable-text-editor/src/editor/plugins/createWithEditableAPI.ts index 92b4023e33a..c1a857620aa 100644 --- a/packages/@sanity/portable-text-editor/src/editor/plugins/createWithEditableAPI.ts +++ b/packages/@sanity/portable-text-editor/src/editor/plugins/createWithEditableAPI.ts @@ -262,9 +262,9 @@ export function createWithEditableAPI( } return node }, - activeAnnotations: (): PortableTextObject['_type'][] => { + isAnnotationActive: (annotationType: PortableTextObject['_type']): boolean => { if (!editor.selection || editor.selection.focus.path.length < 2) { - return [] + return false } try { const activeAnnotations: PortableTextObject['_type'][] = [] @@ -284,7 +284,7 @@ export function createWithEditableAPI( !span.marks.length, ) ) - return [] + return false const annotationCounts: Record = spans.reduce( (acc, [, path]) => { @@ -300,16 +300,16 @@ export function createWithEditableAPI( ) Object.entries(annotationCounts).forEach((annotationCount) => { - const [annotationType, count] = annotationCount + const [annotationCountType, count] = annotationCount if (count >= spans.length) { - activeAnnotations.push(annotationType) + activeAnnotations.push(annotationCountType) } }) - return activeAnnotations + return activeAnnotations.includes(annotationType) } catch (err) { - return [] + return false } }, addAnnotation: ( diff --git a/packages/@sanity/portable-text-editor/src/types/editor.ts b/packages/@sanity/portable-text-editor/src/types/editor.ts index 31d8a9591d6..55a2e328871 100644 --- a/packages/@sanity/portable-text-editor/src/types/editor.ts +++ b/packages/@sanity/portable-text-editor/src/types/editor.ts @@ -38,7 +38,7 @@ export interface EditableAPIDeleteOptions { /** @beta */ export interface EditableAPI { - activeAnnotations: () => PortableTextObject['_type'][] + isAnnotationActive: (annotationType: PortableTextObject['_type']) => boolean addAnnotation: ( type: ObjectSchemaType, value?: {[prop: string]: unknown}, diff --git a/packages/sanity/src/core/form/inputs/PortableText/toolbar/hooks.ts b/packages/sanity/src/core/form/inputs/PortableText/toolbar/hooks.ts index 30caf8971be..8fd694aec05 100644 --- a/packages/sanity/src/core/form/inputs/PortableText/toolbar/hooks.ts +++ b/packages/sanity/src/core/form/inputs/PortableText/toolbar/hooks.ts @@ -77,12 +77,10 @@ export function useActiveActionKeys({ return useUnique( useMemo( () => { - const activeAnnotationKeys = PortableTextEditor.activeAnnotations(editor) - return actions .filter((a) => { if (a.type === 'annotation') { - return activeAnnotationKeys.includes(a.key) + return PortableTextEditor.isAnnotationActive(editor, a.key) } if (a.type === 'listStyle') { From 0b25120f90a1f3d0fe283cb54917e2682a326f40 Mon Sep 17 00:00:00 2001 From: Jordan Lawrence Date: Mon, 29 Apr 2024 19:50:40 +0100 Subject: [PATCH 19/31] fix(pte): retoring activeAnnotations method in editor --- .../src/editor/PortableTextEditor.tsx | 3 ++ .../editor/plugins/createWithEditableAPI.ts | 34 +++++++++++++++++++ .../portable-text-editor/src/types/editor.ts | 1 + 3 files changed, 38 insertions(+) diff --git a/packages/@sanity/portable-text-editor/src/editor/PortableTextEditor.tsx b/packages/@sanity/portable-text-editor/src/editor/PortableTextEditor.tsx index 0dcb78f4758..30c6c3d87f6 100644 --- a/packages/@sanity/portable-text-editor/src/editor/PortableTextEditor.tsx +++ b/packages/@sanity/portable-text-editor/src/editor/PortableTextEditor.tsx @@ -178,6 +178,9 @@ export class PortableTextEditor extends Component { } // Static API methods + static activeAnnotations = (editor: PortableTextEditor): PortableTextObject[] => { + return editor && editor.editable ? editor.editable.activeAnnotations() : [] + } static isAnnotationActive = ( editor: PortableTextEditor, annotationType: PortableTextObject['_type'], diff --git a/packages/@sanity/portable-text-editor/src/editor/plugins/createWithEditableAPI.ts b/packages/@sanity/portable-text-editor/src/editor/plugins/createWithEditableAPI.ts index c1a857620aa..22316ffcbca 100644 --- a/packages/@sanity/portable-text-editor/src/editor/plugins/createWithEditableAPI.ts +++ b/packages/@sanity/portable-text-editor/src/editor/plugins/createWithEditableAPI.ts @@ -262,6 +262,40 @@ export function createWithEditableAPI( } return node }, + activeAnnotations: (): PortableTextObject[] => { + if (!editor.selection || editor.selection.focus.path.length < 2) { + return [] + } + try { + const activeAnnotations: PortableTextObject[] = [] + const spans = Editor.nodes(editor, { + at: editor.selection, + match: (node) => + Text.isText(node) && + node.marks !== undefined && + Array.isArray(node.marks) && + node.marks.length > 0, + }) + for (const [span, path] of spans) { + const [block] = Editor.node(editor, path, {depth: 1}) + if (editor.isTextBlock(block)) { + block.markDefs?.forEach((def) => { + if ( + Text.isText(span) && + span.marks && + Array.isArray(span.marks) && + span.marks.includes(def._key) + ) { + activeAnnotations.push(def) + } + }) + } + } + return activeAnnotations + } catch (err) { + return [] + } + }, isAnnotationActive: (annotationType: PortableTextObject['_type']): boolean => { if (!editor.selection || editor.selection.focus.path.length < 2) { return false diff --git a/packages/@sanity/portable-text-editor/src/types/editor.ts b/packages/@sanity/portable-text-editor/src/types/editor.ts index 55a2e328871..97bd4a33b53 100644 --- a/packages/@sanity/portable-text-editor/src/types/editor.ts +++ b/packages/@sanity/portable-text-editor/src/types/editor.ts @@ -38,6 +38,7 @@ export interface EditableAPIDeleteOptions { /** @beta */ export interface EditableAPI { + activeAnnotations: () => PortableTextObject isAnnotationActive: (annotationType: PortableTextObject['_type']) => boolean addAnnotation: ( type: ObjectSchemaType, From d3c00201618e02c9c566607620ba3dc91bb8b8fd Mon Sep 17 00:00:00 2001 From: Jordan Lawrence Date: Mon, 29 Apr 2024 19:52:15 +0100 Subject: [PATCH 20/31] fix(pte): retoring activeAnnotations method in editor --- packages/@sanity/portable-text-editor/src/types/editor.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/@sanity/portable-text-editor/src/types/editor.ts b/packages/@sanity/portable-text-editor/src/types/editor.ts index 97bd4a33b53..6f92194e99c 100644 --- a/packages/@sanity/portable-text-editor/src/types/editor.ts +++ b/packages/@sanity/portable-text-editor/src/types/editor.ts @@ -38,7 +38,7 @@ export interface EditableAPIDeleteOptions { /** @beta */ export interface EditableAPI { - activeAnnotations: () => PortableTextObject + activeAnnotations: () => PortableTextObject[] isAnnotationActive: (annotationType: PortableTextObject['_type']) => boolean addAnnotation: ( type: ObjectSchemaType, From 07617b302fddd1af3dd83ba44e228d77ec48c824 Mon Sep 17 00:00:00 2001 From: Jordan Lawrence Date: Tue, 30 Apr 2024 13:05:26 +0100 Subject: [PATCH 21/31] fix(pte): fixing issue with multiple annotations in a single block --- .../editor/plugins/createWithEditableAPI.ts | 34 +++++++------------ 1 file changed, 13 insertions(+), 21 deletions(-) diff --git a/packages/@sanity/portable-text-editor/src/editor/plugins/createWithEditableAPI.ts b/packages/@sanity/portable-text-editor/src/editor/plugins/createWithEditableAPI.ts index 22316ffcbca..b33acc1b7d6 100644 --- a/packages/@sanity/portable-text-editor/src/editor/plugins/createWithEditableAPI.ts +++ b/packages/@sanity/portable-text-editor/src/editor/plugins/createWithEditableAPI.ts @@ -301,11 +301,10 @@ export function createWithEditableAPI( return false } try { - const activeAnnotations: PortableTextObject['_type'][] = [] const spans = [ ...Editor.nodes(editor, { at: editor.selection, - mode: 'lowest', + match: (node) => Text.isText(node), }), ] @@ -320,28 +319,21 @@ export function createWithEditableAPI( ) return false - const annotationCounts: Record = spans.reduce( - (acc, [, path]) => { - const [block] = Editor.node(editor, path, {depth: 1}) - if (editor.isTextBlock(block)) { - block.markDefs?.forEach((def) => { - acc[def._type] = (acc[def._type] || 0) + 1 || 1 - }) - } - return acc - }, - {} as Record, - ) + const selectionMarkDefs = spans.reduce((accMarkDefs, [, path]) => { + const [block] = Editor.node(editor, path, {depth: 1}) + if (editor.isTextBlock(block) && block.markDefs) { + return [...accMarkDefs, ...block.markDefs] + } + return accMarkDefs + }, [] as PortableTextObject[]) - Object.entries(annotationCounts).forEach((annotationCount) => { - const [annotationCountType, count] = annotationCount + return spans.every(([span]) => { + const spanMarkDefs = span.marks?.map( + (markKey) => selectionMarkDefs.find((def) => def?._key === markKey)?._type, + ) - if (count >= spans.length) { - activeAnnotations.push(annotationCountType) - } + return spanMarkDefs?.includes(annotationType) }) - - return activeAnnotations.includes(annotationType) } catch (err) { return false } From fc5a2b699488f8272013879055a9144764d26738 Mon Sep 17 00:00:00 2001 From: Jordan Lawrence Date: Tue, 30 Apr 2024 13:26:33 +0100 Subject: [PATCH 22/31] fix(pte): fixing issue with multiple annotations in a single block --- .../src/editor/plugins/createWithEditableAPI.ts | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/packages/@sanity/portable-text-editor/src/editor/plugins/createWithEditableAPI.ts b/packages/@sanity/portable-text-editor/src/editor/plugins/createWithEditableAPI.ts index b33acc1b7d6..95334fc46e9 100644 --- a/packages/@sanity/portable-text-editor/src/editor/plugins/createWithEditableAPI.ts +++ b/packages/@sanity/portable-text-editor/src/editor/plugins/createWithEditableAPI.ts @@ -300,6 +300,7 @@ export function createWithEditableAPI( if (!editor.selection || editor.selection.focus.path.length < 2) { return false } + try { const spans = [ ...Editor.nodes(editor, { @@ -310,11 +311,7 @@ export function createWithEditableAPI( if ( spans.some( - ([span]) => - isPortableTextSpan(span) && - span.marks && - Array.isArray(span.marks) && - !span.marks.length, + ([span]) => isPortableTextSpan(span) && (!span.marks || span.marks?.length === 0), ) ) return false From b1f349007538f7d586c6b08b83195b58072c2598 Mon Sep 17 00:00:00 2001 From: Jordan Lawrence Date: Tue, 30 Apr 2024 14:33:08 +0100 Subject: [PATCH 23/31] fix(pte): fixing typing issue with PortableTextSpan --- .../src/editor/plugins/createWithEditableAPI.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/@sanity/portable-text-editor/src/editor/plugins/createWithEditableAPI.ts b/packages/@sanity/portable-text-editor/src/editor/plugins/createWithEditableAPI.ts index 95334fc46e9..4f285c7e802 100644 --- a/packages/@sanity/portable-text-editor/src/editor/plugins/createWithEditableAPI.ts +++ b/packages/@sanity/portable-text-editor/src/editor/plugins/createWithEditableAPI.ts @@ -311,7 +311,7 @@ export function createWithEditableAPI( if ( spans.some( - ([span]) => isPortableTextSpan(span) && (!span.marks || span.marks?.length === 0), + ([span]) => !isPortableTextSpan(span) || !span.marks || span.marks?.length === 0, ) ) return false @@ -325,6 +325,8 @@ export function createWithEditableAPI( }, [] as PortableTextObject[]) return spans.every(([span]) => { + if (!isPortableTextSpan(span)) return false + const spanMarkDefs = span.marks?.map( (markKey) => selectionMarkDefs.find((def) => def?._key === markKey)?._type, ) From b35f437b72098490168245db31ffac1216b41296 Mon Sep 17 00:00:00 2001 From: Jordan Lawrence Date: Tue, 30 Apr 2024 14:45:25 +0100 Subject: [PATCH 24/31] fix(pte): fixing failing test since mark toggling has changed --- .../withPortableTextMarkModel.test.tsx | 36 ++++++++++--------- 1 file changed, 19 insertions(+), 17 deletions(-) diff --git a/packages/@sanity/portable-text-editor/src/editor/plugins/__tests__/withPortableTextMarkModel.test.tsx b/packages/@sanity/portable-text-editor/src/editor/plugins/__tests__/withPortableTextMarkModel.test.tsx index 2e8b54a1c62..e53a88accbe 100644 --- a/packages/@sanity/portable-text-editor/src/editor/plugins/__tests__/withPortableTextMarkModel.test.tsx +++ b/packages/@sanity/portable-text-editor/src/editor/plugins/__tests__/withPortableTextMarkModel.test.tsx @@ -360,23 +360,25 @@ describe('plugin:withPortableTextMarksModel', () => { }) PortableTextEditor.toggleMark(editor, 'bold') expect(PortableTextEditor.getValue(editor)).toMatchInlineSnapshot(` - Array [ - Object { - "_key": "a", - "_type": "myTestBlockType", - "children": Array [ - Object { - "_key": "a1", - "_type": "span", - "marks": Array [], - "text": "1234", - }, - ], - "markDefs": Array [], - "style": "normal", - }, - ] - `) +Array [ + Object { + "_key": "a", + "_type": "myTestBlockType", + "children": Array [ + Object { + "_key": "a1", + "_type": "span", + "marks": Array [ + "bold", + ], + "text": "1234", + }, + ], + "markDefs": Array [], + "style": "normal", + }, +] +`) } }) }) From f47844a3e001b312b854ec27d940a1b26fc7a610 Mon Sep 17 00:00:00 2001 From: Jordan Lawrence Date: Tue, 30 Apr 2024 15:11:08 +0100 Subject: [PATCH 25/31] fix(pte): improving usage of isTextBlock for createWithPortableTextLists --- .../src/editor/plugins/createWithPortableTextLists.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/@sanity/portable-text-editor/src/editor/plugins/createWithPortableTextLists.ts b/packages/@sanity/portable-text-editor/src/editor/plugins/createWithPortableTextLists.ts index 0670d5c68b7..6f15eb4c39d 100644 --- a/packages/@sanity/portable-text-editor/src/editor/plugins/createWithPortableTextLists.ts +++ b/packages/@sanity/portable-text-editor/src/editor/plugins/createWithPortableTextLists.ts @@ -143,7 +143,7 @@ export function createWithPortableTextLists(types: PortableTextMemberSchemaTypes const selectedBlocks = [ ...Editor.nodes(editor, { at: editor.selection, - match: (node) => node._type === 'block', + match: (node) => editor.isTextBlock(node), }), ] From 261b106062ee65a694c704aa0f25c1070efb449c Mon Sep 17 00:00:00 2001 From: Per-Kristian Nordnes Date: Tue, 30 Apr 2024 16:48:00 +0200 Subject: [PATCH 26/31] fix(portable-text-editor): fix issue where decoration would not target correctly (#6532) --- .../src/editor/Editable.tsx | 25 +++++++++---------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/packages/@sanity/portable-text-editor/src/editor/Editable.tsx b/packages/@sanity/portable-text-editor/src/editor/Editable.tsx index 87c920eba93..494c5f766f2 100644 --- a/packages/@sanity/portable-text-editor/src/editor/Editable.tsx +++ b/packages/@sanity/portable-text-editor/src/editor/Editable.tsx @@ -584,21 +584,20 @@ export const PortableTextEditable = forwardRef(function PortableTextEditable( }, ] } + // Editor node has a path length of 0 (should never be decorated) + if (path.length === 0) { + return EMPTY_DECORATIONS_STATE + } const result = rangeDecorationState.filter((item) => { - // Only text children and inline objects are supported for now - // The editor node will have a path like [], a block node [0], a span node [0, 0] and a inline object node [0, 0, 0] - // Return false if the path is less than 2, as it's not a text node or inline object text node - if (path.length < 2) { - return false - } - if ( - SlateRange.isCollapsed(item) && - Path.equals(item.focus.path, path) && - Path.equals(item.anchor.path, path) - ) { - return true + // Special case in order to only return one decoration for collapsed ranges + if (SlateRange.isCollapsed(item)) { + return Path.equals(item.focus.path, path) && Path.equals(item.anchor.path, path) } - return SlateRange.includes(item, path) + // Include decorations that either include or intersects with this path + return ( + SlateRange.intersection(item, {anchor: {path, offset: 0}, focus: {path, offset: 0}}) || + SlateRange.includes(item, path) + ) }) if (result.length > 0) { return result From d46a1a28756481c1ba62a9c86ca1fb77106ab9d8 Mon Sep 17 00:00:00 2001 From: Jordan Lawrence Date: Wed, 1 May 2024 11:18:07 +0100 Subject: [PATCH 27/31] fix(pte): remove unused function in createWithPortableTextMarkModel --- .../createWithPortableTextMarkModel.ts | 23 +++++-------------- 1 file changed, 6 insertions(+), 17 deletions(-) diff --git a/packages/@sanity/portable-text-editor/src/editor/plugins/createWithPortableTextMarkModel.ts b/packages/@sanity/portable-text-editor/src/editor/plugins/createWithPortableTextMarkModel.ts index c43196c9f9b..36d187d6a6e 100644 --- a/packages/@sanity/portable-text-editor/src/editor/plugins/createWithPortableTextMarkModel.ts +++ b/packages/@sanity/portable-text-editor/src/editor/plugins/createWithPortableTextMarkModel.ts @@ -5,19 +5,9 @@ * */ -import {type PortableTextSpan} from '@sanity/types' import {isEqual, uniq} from 'lodash' import {type Subject} from 'rxjs' -import { - type Descendant, - Editor, - Element, - type NodeEntry, - Path, - Range, - Text, - Transforms, -} from 'slate' +import {type Descendant, Editor, Element, Path, Range, Text, Transforms} from 'slate' import { type EditorChange, @@ -346,17 +336,16 @@ export function createWithPortableTextMarkModel( return false } - const isNodeWithMark = (n: NodeEntry) => { - const [node] = n as NodeEntry - - return node.marks?.includes(mark) - } const selectedNodes = Array.from( Editor.nodes(editor, {match: Text.isText, at: editor.selection}), ) if (Range.isExpanded(editor.selection)) { - return selectedNodes.every(isNodeWithMark) + return selectedNodes.every((n) => { + const [node] = n + + return node.marks?.includes(mark) + }) } return ( From e30e42b4d13b35459e0513ead8ce833373ecddf1 Mon Sep 17 00:00:00 2001 From: Jordan Lawrence Date: Thu, 2 May 2024 13:06:40 +0100 Subject: [PATCH 28/31] exploration --- dev/test-studio/schema/standard/booleans.ts | 98 +++++++++---------- .../components/CommentsPortableTextInput.tsx | 5 +- ...ldRangeDecorationSelectionsFromComments.ts | 3 + .../inline-comments/buildRangeDecorations.tsx | 1 + .../src/core/form/inputs/BooleanInput.tsx | 3 +- 5 files changed, 59 insertions(+), 51 deletions(-) diff --git a/dev/test-studio/schema/standard/booleans.ts b/dev/test-studio/schema/standard/booleans.ts index f74300b7d3a..61f24700962 100644 --- a/dev/test-studio/schema/standard/booleans.ts +++ b/dev/test-studio/schema/standard/booleans.ts @@ -19,59 +19,59 @@ export default defineType({ type: 'string', title: 'Title', }, + // { + // name: 'switchTest', + // type: 'boolean', + // title: `I'm a switch`, + // description: 'Try toggling me! This is the new switch design', + // }, { name: 'switchTest', type: 'boolean', - title: `I'm a switch`, - description: 'Try toggling me! This is the new switch design', - }, - { - name: 'switchIndeterminate2', - type: 'boolean', title: `Don't toggle me`, - readOnly: true, - }, - { - name: 'checkboxIndeterminate3', - type: 'boolean', - title: `Don't check me`, - readOnly: true, - description: 'Indeterminate state', - validation: (Rule) => [Rule.valid(false).warning('hello world')], - options: { - layout: 'checkbox', - }, - }, - { - name: 'switch', - type: 'boolean', - description: 'Should be either true or false', - title: 'Check me?', - }, - { - name: 'checkbox', - type: 'boolean', - description: - 'Should be displayed as a checkbox Should be displayed as a checkbox Should be displayed as a checkbox Should be displayed as a checkboxShould be displayed as a checkboxShould be displayed as a checkboxShould be displayed as a checkboxShould be displayed as a checkboxShould be displayed as a checkboxShould be displayed as a checkbox', - options: { - layout: 'checkbox', - }, - title: 'Checked?', - }, - { - name: 'switchLong', - type: 'boolean', - title: 'A switch with a long description', - description: - 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean convallis suscipit diam, eget blandit orci euismod in. Curabitur ac tellus pellentesque, porttitor tellus id, venenatis massa. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent eu augue mattis, accumsan risus ut, iaculis risus. Integer cursus justo nibh, ac ultricies orci lobortis et. Curabitur ac commodo justo, sit amet facilisis mi. Nunc arcu nibh, commodo maximus risus non, suscipit laoreet nisl. Nam dignissim, sem vel tempor tristique, metus odio vehicula sapien, nec rhoncus urna diam eget nisl. In ut arcu ante. Pellentesque maximus, mi non faucibus hendrerit, massa massa pellentesque arcu, ac egestas odio nunc ac erat.', - fieldset: 'collection', - }, - { - name: 'switchShort', - type: 'boolean', - title: 'Short description, but longer title! Hello. Cats are the best.', - description: 'Lorem ipsum', - fieldset: 'collection', + readOnly: false, }, + // { + // name: 'checkboxIndeterminate3', + // type: 'boolean', + // title: `Don't check me`, + // readOnly: true, + // description: 'Indeterminate state', + // validation: (Rule) => [Rule.valid(false).warning('hello world')], + // options: { + // layout: 'checkbox', + // }, + // }, + // { + // name: 'switch', + // type: 'boolean', + // description: 'Should be either true or false', + // title: 'Check me?', + // }, + // { + // name: 'checkbox', + // type: 'boolean', + // description: + // 'Should be displayed as a checkbox Should be displayed as a checkbox Should be displayed as a checkbox Should be displayed as a checkboxShould be displayed as a checkboxShould be displayed as a checkboxShould be displayed as a checkboxShould be displayed as a checkboxShould be displayed as a checkboxShould be displayed as a checkbox', + // options: { + // layout: 'checkbox', + // }, + // title: 'Checked?', + // }, + // { + // name: 'switchLong', + // type: 'boolean', + // title: 'A switch with a long description', + // description: + // 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean convallis suscipit diam, eget blandit orci euismod in. Curabitur ac tellus pellentesque, porttitor tellus id, venenatis massa. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent eu augue mattis, accumsan risus ut, iaculis risus. Integer cursus justo nibh, ac ultricies orci lobortis et. Curabitur ac commodo justo, sit amet facilisis mi. Nunc arcu nibh, commodo maximus risus non, suscipit laoreet nisl. Nam dignissim, sem vel tempor tristique, metus odio vehicula sapien, nec rhoncus urna diam eget nisl. In ut arcu ante. Pellentesque maximus, mi non faucibus hendrerit, massa massa pellentesque arcu, ac egestas odio nunc ac erat.', + // fieldset: 'collection', + // }, + // { + // name: 'switchShort', + // type: 'boolean', + // title: 'Short description, but longer title! Hello. Cats are the best.', + // description: 'Lorem ipsum', + // fieldset: 'collection', + // }, ], }) diff --git a/packages/sanity/src/core/comments/plugin/input/components/CommentsPortableTextInput.tsx b/packages/sanity/src/core/comments/plugin/input/components/CommentsPortableTextInput.tsx index 707c992be86..f170b731150 100644 --- a/packages/sanity/src/core/comments/plugin/input/components/CommentsPortableTextInput.tsx +++ b/packages/sanity/src/core/comments/plugin/input/components/CommentsPortableTextInput.tsx @@ -145,6 +145,7 @@ export const CommentsPortableTextInputInner = memo(function CommentsPortableText }, []) const handleSubmit = useCallback(() => { + console.log('submit') if (!nextCommentSelection || !editorRef.current) return const fragment = getFragment() || EMPTY_ARRAY @@ -265,6 +266,7 @@ export const CommentsPortableTextInputInner = memo(function CommentsPortableText }, [handleSetCurrentSelectionRect]) const handleRangeDecorationMoved = useCallback((details: RangeDecorationOnMovedDetails) => { + console.log('moved') const {rangeDecoration, newSelection} = details const commentId = rangeDecoration.payload?.commentId as undefined | string @@ -287,6 +289,7 @@ export const CommentsPortableTextInputInner = memo(function CommentsPortableText }, []) const updateCommentRange = useCallback(() => { + console.log('update range') const decoratorsToUpdate = addedCommentsDecorations.filter( (decorator) => decorator.payload?.dirty, ) @@ -335,7 +338,7 @@ export const CommentsPortableTextInputInner = memo(function CommentsPortableText }, } - operation.update(comment._id, nextComment) + // operation.update(comment._id, nextComment) }) // Mark the range decorations as not dirty diff --git a/packages/sanity/src/core/comments/utils/inline-comments/buildRangeDecorationSelectionsFromComments.ts b/packages/sanity/src/core/comments/utils/inline-comments/buildRangeDecorationSelectionsFromComments.ts index 89661f89896..49730dbb6ab 100644 --- a/packages/sanity/src/core/comments/utils/inline-comments/buildRangeDecorationSelectionsFromComments.ts +++ b/packages/sanity/src/core/comments/utils/inline-comments/buildRangeDecorationSelectionsFromComments.ts @@ -75,6 +75,7 @@ export function buildRangeDecorationSelectionsFromComments( const textSelections = comments.filter(isTextSelectionComment) const decorators: BuildCommentsRangeDecorationsResultItem[] = [] + console.log({textSelections}) textSelections.forEach((comment) => { comment.target.path?.selection?.value.forEach((selectionMember) => { const matchedBlock = value.find((block) => block._key === selectionMember._key) @@ -82,7 +83,9 @@ export function buildRangeDecorationSelectionsFromComments( return } const selectionText = selectionMember.text.replaceAll(COMMENT_INDICATORS_REGEX, '') + console.log({selectionText, matchedBlock}) const textWithChildSeparators = toPlainTextWithChildSeparators(matchedBlock) + console.log({textWithChildSeparators}) const {patches} = diffText(selectionText, selectionMember.text) const diffedText = diffApply(textWithChildSeparators, patches) const startIndex = diffedText.indexOf(COMMENT_INDICATORS[0]) diff --git a/packages/sanity/src/core/comments/utils/inline-comments/buildRangeDecorations.tsx b/packages/sanity/src/core/comments/utils/inline-comments/buildRangeDecorations.tsx index cd61478f95f..bc94c63b442 100644 --- a/packages/sanity/src/core/comments/utils/inline-comments/buildRangeDecorations.tsx +++ b/packages/sanity/src/core/comments/utils/inline-comments/buildRangeDecorations.tsx @@ -113,6 +113,7 @@ export function buildRangeDecorations(props: BuildRangeDecorationsProps) { value, } = props const rangeSelections = buildRangeDecorationSelectionsFromComments({comments, value}) + console.log({rangeSelections}) const decorations = rangeSelections.map(({selection, comment, range}) => { const decoration: RangeDecoration = { diff --git a/packages/sanity/src/core/form/inputs/BooleanInput.tsx b/packages/sanity/src/core/form/inputs/BooleanInput.tsx index 22f86548165..c76e1239e28 100644 --- a/packages/sanity/src/core/form/inputs/BooleanInput.tsx +++ b/packages/sanity/src/core/form/inputs/BooleanInput.tsx @@ -41,7 +41,8 @@ export function BooleanInput(props: BooleanInputProps) { label={schemaType.title} {...elementProps} checked={checked} - disabled={readOnly} + disabled={false} + readOnly={readOnly} indeterminate={indeterminate} style={{margin: -4}} /> From c045eb70278bd0fd1724ee0313f39c3ab7592273 Mon Sep 17 00:00:00 2001 From: Jordan Lawrence Date: Thu, 2 May 2024 13:18:47 +0100 Subject: [PATCH 29/31] fix(pte): reverting incorrect merge --- dev/test-studio/schema/standard/booleans.ts | 98 +++++++++---------- .../components/CommentsPortableTextInput.tsx | 5 +- ...ldRangeDecorationSelectionsFromComments.ts | 3 - .../inline-comments/buildRangeDecorations.tsx | 1 - .../src/core/form/inputs/BooleanInput.tsx | 3 +- 5 files changed, 51 insertions(+), 59 deletions(-) diff --git a/dev/test-studio/schema/standard/booleans.ts b/dev/test-studio/schema/standard/booleans.ts index 61f24700962..f74300b7d3a 100644 --- a/dev/test-studio/schema/standard/booleans.ts +++ b/dev/test-studio/schema/standard/booleans.ts @@ -19,59 +19,59 @@ export default defineType({ type: 'string', title: 'Title', }, - // { - // name: 'switchTest', - // type: 'boolean', - // title: `I'm a switch`, - // description: 'Try toggling me! This is the new switch design', - // }, { name: 'switchTest', type: 'boolean', + title: `I'm a switch`, + description: 'Try toggling me! This is the new switch design', + }, + { + name: 'switchIndeterminate2', + type: 'boolean', title: `Don't toggle me`, - readOnly: false, + readOnly: true, + }, + { + name: 'checkboxIndeterminate3', + type: 'boolean', + title: `Don't check me`, + readOnly: true, + description: 'Indeterminate state', + validation: (Rule) => [Rule.valid(false).warning('hello world')], + options: { + layout: 'checkbox', + }, + }, + { + name: 'switch', + type: 'boolean', + description: 'Should be either true or false', + title: 'Check me?', + }, + { + name: 'checkbox', + type: 'boolean', + description: + 'Should be displayed as a checkbox Should be displayed as a checkbox Should be displayed as a checkbox Should be displayed as a checkboxShould be displayed as a checkboxShould be displayed as a checkboxShould be displayed as a checkboxShould be displayed as a checkboxShould be displayed as a checkboxShould be displayed as a checkbox', + options: { + layout: 'checkbox', + }, + title: 'Checked?', + }, + { + name: 'switchLong', + type: 'boolean', + title: 'A switch with a long description', + description: + 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean convallis suscipit diam, eget blandit orci euismod in. Curabitur ac tellus pellentesque, porttitor tellus id, venenatis massa. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent eu augue mattis, accumsan risus ut, iaculis risus. Integer cursus justo nibh, ac ultricies orci lobortis et. Curabitur ac commodo justo, sit amet facilisis mi. Nunc arcu nibh, commodo maximus risus non, suscipit laoreet nisl. Nam dignissim, sem vel tempor tristique, metus odio vehicula sapien, nec rhoncus urna diam eget nisl. In ut arcu ante. Pellentesque maximus, mi non faucibus hendrerit, massa massa pellentesque arcu, ac egestas odio nunc ac erat.', + fieldset: 'collection', + }, + { + name: 'switchShort', + type: 'boolean', + title: 'Short description, but longer title! Hello. Cats are the best.', + description: 'Lorem ipsum', + fieldset: 'collection', }, - // { - // name: 'checkboxIndeterminate3', - // type: 'boolean', - // title: `Don't check me`, - // readOnly: true, - // description: 'Indeterminate state', - // validation: (Rule) => [Rule.valid(false).warning('hello world')], - // options: { - // layout: 'checkbox', - // }, - // }, - // { - // name: 'switch', - // type: 'boolean', - // description: 'Should be either true or false', - // title: 'Check me?', - // }, - // { - // name: 'checkbox', - // type: 'boolean', - // description: - // 'Should be displayed as a checkbox Should be displayed as a checkbox Should be displayed as a checkbox Should be displayed as a checkboxShould be displayed as a checkboxShould be displayed as a checkboxShould be displayed as a checkboxShould be displayed as a checkboxShould be displayed as a checkboxShould be displayed as a checkbox', - // options: { - // layout: 'checkbox', - // }, - // title: 'Checked?', - // }, - // { - // name: 'switchLong', - // type: 'boolean', - // title: 'A switch with a long description', - // description: - // 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean convallis suscipit diam, eget blandit orci euismod in. Curabitur ac tellus pellentesque, porttitor tellus id, venenatis massa. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent eu augue mattis, accumsan risus ut, iaculis risus. Integer cursus justo nibh, ac ultricies orci lobortis et. Curabitur ac commodo justo, sit amet facilisis mi. Nunc arcu nibh, commodo maximus risus non, suscipit laoreet nisl. Nam dignissim, sem vel tempor tristique, metus odio vehicula sapien, nec rhoncus urna diam eget nisl. In ut arcu ante. Pellentesque maximus, mi non faucibus hendrerit, massa massa pellentesque arcu, ac egestas odio nunc ac erat.', - // fieldset: 'collection', - // }, - // { - // name: 'switchShort', - // type: 'boolean', - // title: 'Short description, but longer title! Hello. Cats are the best.', - // description: 'Lorem ipsum', - // fieldset: 'collection', - // }, ], }) diff --git a/packages/sanity/src/core/comments/plugin/input/components/CommentsPortableTextInput.tsx b/packages/sanity/src/core/comments/plugin/input/components/CommentsPortableTextInput.tsx index f170b731150..707c992be86 100644 --- a/packages/sanity/src/core/comments/plugin/input/components/CommentsPortableTextInput.tsx +++ b/packages/sanity/src/core/comments/plugin/input/components/CommentsPortableTextInput.tsx @@ -145,7 +145,6 @@ export const CommentsPortableTextInputInner = memo(function CommentsPortableText }, []) const handleSubmit = useCallback(() => { - console.log('submit') if (!nextCommentSelection || !editorRef.current) return const fragment = getFragment() || EMPTY_ARRAY @@ -266,7 +265,6 @@ export const CommentsPortableTextInputInner = memo(function CommentsPortableText }, [handleSetCurrentSelectionRect]) const handleRangeDecorationMoved = useCallback((details: RangeDecorationOnMovedDetails) => { - console.log('moved') const {rangeDecoration, newSelection} = details const commentId = rangeDecoration.payload?.commentId as undefined | string @@ -289,7 +287,6 @@ export const CommentsPortableTextInputInner = memo(function CommentsPortableText }, []) const updateCommentRange = useCallback(() => { - console.log('update range') const decoratorsToUpdate = addedCommentsDecorations.filter( (decorator) => decorator.payload?.dirty, ) @@ -338,7 +335,7 @@ export const CommentsPortableTextInputInner = memo(function CommentsPortableText }, } - // operation.update(comment._id, nextComment) + operation.update(comment._id, nextComment) }) // Mark the range decorations as not dirty diff --git a/packages/sanity/src/core/comments/utils/inline-comments/buildRangeDecorationSelectionsFromComments.ts b/packages/sanity/src/core/comments/utils/inline-comments/buildRangeDecorationSelectionsFromComments.ts index 49730dbb6ab..89661f89896 100644 --- a/packages/sanity/src/core/comments/utils/inline-comments/buildRangeDecorationSelectionsFromComments.ts +++ b/packages/sanity/src/core/comments/utils/inline-comments/buildRangeDecorationSelectionsFromComments.ts @@ -75,7 +75,6 @@ export function buildRangeDecorationSelectionsFromComments( const textSelections = comments.filter(isTextSelectionComment) const decorators: BuildCommentsRangeDecorationsResultItem[] = [] - console.log({textSelections}) textSelections.forEach((comment) => { comment.target.path?.selection?.value.forEach((selectionMember) => { const matchedBlock = value.find((block) => block._key === selectionMember._key) @@ -83,9 +82,7 @@ export function buildRangeDecorationSelectionsFromComments( return } const selectionText = selectionMember.text.replaceAll(COMMENT_INDICATORS_REGEX, '') - console.log({selectionText, matchedBlock}) const textWithChildSeparators = toPlainTextWithChildSeparators(matchedBlock) - console.log({textWithChildSeparators}) const {patches} = diffText(selectionText, selectionMember.text) const diffedText = diffApply(textWithChildSeparators, patches) const startIndex = diffedText.indexOf(COMMENT_INDICATORS[0]) diff --git a/packages/sanity/src/core/comments/utils/inline-comments/buildRangeDecorations.tsx b/packages/sanity/src/core/comments/utils/inline-comments/buildRangeDecorations.tsx index bc94c63b442..cd61478f95f 100644 --- a/packages/sanity/src/core/comments/utils/inline-comments/buildRangeDecorations.tsx +++ b/packages/sanity/src/core/comments/utils/inline-comments/buildRangeDecorations.tsx @@ -113,7 +113,6 @@ export function buildRangeDecorations(props: BuildRangeDecorationsProps) { value, } = props const rangeSelections = buildRangeDecorationSelectionsFromComments({comments, value}) - console.log({rangeSelections}) const decorations = rangeSelections.map(({selection, comment, range}) => { const decoration: RangeDecoration = { diff --git a/packages/sanity/src/core/form/inputs/BooleanInput.tsx b/packages/sanity/src/core/form/inputs/BooleanInput.tsx index c76e1239e28..22f86548165 100644 --- a/packages/sanity/src/core/form/inputs/BooleanInput.tsx +++ b/packages/sanity/src/core/form/inputs/BooleanInput.tsx @@ -41,8 +41,7 @@ export function BooleanInput(props: BooleanInputProps) { label={schemaType.title} {...elementProps} checked={checked} - disabled={false} - readOnly={readOnly} + disabled={readOnly} indeterminate={indeterminate} style={{margin: -4}} /> From f57db72da26080f6cb792963b8c06e91fc9e15f7 Mon Sep 17 00:00:00 2001 From: Jordan Lawrence Date: Thu, 2 May 2024 15:12:29 +0100 Subject: [PATCH 30/31] fix(pte): testing new logic for tools in PTE --- .../withPortableTextMarkModel.test.tsx | 160 ++++++++++++++++++ 1 file changed, 160 insertions(+) diff --git a/packages/@sanity/portable-text-editor/src/editor/plugins/__tests__/withPortableTextMarkModel.test.tsx b/packages/@sanity/portable-text-editor/src/editor/plugins/__tests__/withPortableTextMarkModel.test.tsx index e53a88accbe..aae521bc70f 100644 --- a/packages/@sanity/portable-text-editor/src/editor/plugins/__tests__/withPortableTextMarkModel.test.tsx +++ b/packages/@sanity/portable-text-editor/src/editor/plugins/__tests__/withPortableTextMarkModel.test.tsx @@ -767,7 +767,167 @@ Array [ expect(currentSelectionObject === nextSelectionObject).toBe(false) expect(onChange).toHaveBeenCalledWith({type: 'selection', selection: nextSelectionObject}) }) + + it('should return active marks that cover the whole selection', async () => { + const editorRef: RefObject = createRef() + const initialValue = [ + { + _key: 'a', + _type: 'myTestBlockType', + children: [ + { + _key: 'a1', + _type: 'span', + marks: ['bold'], + text: '12', + }, + { + _key: '2', + _type: 'span', + marks: [], + text: '34', + }, + ], + markDefs: [{_key: 'bold', _type: 'strong'}], + style: 'normal', + }, + ] + const onChange = jest.fn() + await waitFor(() => { + render( + , + ) + }) + const editor = editorRef.current! + expect(editor).toBeDefined() + await waitFor(() => { + PortableTextEditor.focus(editor) + PortableTextEditor.select(editor, { + focus: {path: [{_key: 'a'}, 'children', {_key: 'a1'}], offset: 0}, + anchor: {path: [{_key: 'a'}, 'children', {_key: '2'}], offset: 2}, + }) + expect(PortableTextEditor.isMarkActive(editor, 'bold')).toBe(false) + PortableTextEditor.toggleMark(editor, 'bold') + expect(PortableTextEditor.isMarkActive(editor, 'bold')).toBe(true) + }) + }) + + it('should return active annotation types that cover the whole selection', async () => { + const editorRef: RefObject = createRef() + const initialValue = [ + { + _key: 'a', + _type: 'myTestBlockType', + children: [ + { + _key: 'a1', + _type: 'span', + marks: ['bab319ad3a9d'], + text: '12', + }, + { + _key: '2', + _type: 'span', + marks: [], + text: '34', + }, + ], + markDefs: [ + { + _key: 'bab319ad3a9d', + _type: 'link', + href: 'http://www.123.com', + }, + ], + style: 'normal', + }, + ] + const onChange = jest.fn() + await waitFor(() => { + render( + , + ) + }) + const editor = editorRef.current! + expect(editor).toBeDefined() + await waitFor(() => { + PortableTextEditor.focus(editor) + PortableTextEditor.select(editor, { + focus: {path: [{_key: 'a'}, 'children', {_key: 'a1'}], offset: 0}, + anchor: {path: [{_key: 'a'}, 'children', {_key: '2'}], offset: 2}, + }) + expect(PortableTextEditor.isAnnotationActive(editor, 'link')).toBe(false) + }) + }) + + it('should return active list styles that cover the whole selection', async () => { + const editorRef: RefObject = createRef() + const initialValue = [ + { + _key: 'a', + _type: 'myTestBlockType', + children: [ + { + _key: 'a1', + _type: 'span', + marks: [], + text: '12', + }, + ], + markDefs: [], + style: 'normal', + }, + { + _key: 'b', + _type: 'myTestBlockType', + children: [ + { + _key: '2', + _type: 'span', + marks: [], + text: '34', + level: 1, + listItem: 'bullet', + }, + ], + markDefs: [], + style: 'normal', + }, + ] + const onChange = jest.fn() + await waitFor(() => { + render( + , + ) + }) + const editor = editorRef.current! + expect(editor).toBeDefined() + await waitFor(() => { + PortableTextEditor.focus(editor) + PortableTextEditor.select(editor, { + focus: {path: [{_key: 'a'}, 'children', {_key: 'a1'}], offset: 0}, + anchor: {path: [{_key: '2'}, 'children', {_key: '2'}], offset: 2}, + }) + expect(PortableTextEditor.hasListStyle(editor, 'bullet')).toBe(false) + }) + }) }) + describe('removing annotations', () => { it('removes the markDefs if the annotation is no longer in use', async () => { const editorRef: RefObject = createRef() From bb5d2518a2c8583c32090af8b60794c84b9fa94d Mon Sep 17 00:00:00 2001 From: Jordan Lawrence Date: Thu, 2 May 2024 15:19:21 +0100 Subject: [PATCH 31/31] fix(pte): reorg test cases --- .../__tests__/withPortableTextLists.test.tsx | 65 +++++++++++++++++++ .../withPortableTextMarkModel.test.tsx | 57 ---------------- 2 files changed, 65 insertions(+), 57 deletions(-) create mode 100644 packages/@sanity/portable-text-editor/src/editor/plugins/__tests__/withPortableTextLists.test.tsx diff --git a/packages/@sanity/portable-text-editor/src/editor/plugins/__tests__/withPortableTextLists.test.tsx b/packages/@sanity/portable-text-editor/src/editor/plugins/__tests__/withPortableTextLists.test.tsx new file mode 100644 index 00000000000..c833b8cdda9 --- /dev/null +++ b/packages/@sanity/portable-text-editor/src/editor/plugins/__tests__/withPortableTextLists.test.tsx @@ -0,0 +1,65 @@ +import {describe, expect, it, jest} from '@jest/globals' +import {render, waitFor} from '@testing-library/react' +import {createRef, type RefObject} from 'react' + +import {PortableTextEditorTester, schemaType} from '../../__tests__/PortableTextEditorTester' +import {PortableTextEditor} from '../../PortableTextEditor' + +describe('plugin:withPortableTextLists', () => { + it('should return active list styles that cover the whole selection', async () => { + const editorRef: RefObject = createRef() + const initialValue = [ + { + _key: 'a', + _type: 'myTestBlockType', + children: [ + { + _key: 'a1', + _type: 'span', + marks: [], + text: '12', + }, + ], + markDefs: [], + style: 'normal', + }, + { + _key: 'b', + _type: 'myTestBlockType', + children: [ + { + _key: '2', + _type: 'span', + marks: [], + text: '34', + level: 1, + listItem: 'bullet', + }, + ], + markDefs: [], + style: 'normal', + }, + ] + const onChange = jest.fn() + await waitFor(() => { + render( + , + ) + }) + const editor = editorRef.current! + expect(editor).toBeDefined() + await waitFor(() => { + PortableTextEditor.focus(editor) + PortableTextEditor.select(editor, { + focus: {path: [{_key: 'a'}, 'children', {_key: 'a1'}], offset: 0}, + anchor: {path: [{_key: '2'}, 'children', {_key: '2'}], offset: 2}, + }) + expect(PortableTextEditor.hasListStyle(editor, 'bullet')).toBe(false) + }) + }) +}) diff --git a/packages/@sanity/portable-text-editor/src/editor/plugins/__tests__/withPortableTextMarkModel.test.tsx b/packages/@sanity/portable-text-editor/src/editor/plugins/__tests__/withPortableTextMarkModel.test.tsx index 4da1e6e62c1..46e965d726c 100644 --- a/packages/@sanity/portable-text-editor/src/editor/plugins/__tests__/withPortableTextMarkModel.test.tsx +++ b/packages/@sanity/portable-text-editor/src/editor/plugins/__tests__/withPortableTextMarkModel.test.tsx @@ -869,63 +869,6 @@ Array [ expect(PortableTextEditor.isAnnotationActive(editor, 'link')).toBe(false) }) }) - - it('should return active list styles that cover the whole selection', async () => { - const editorRef: RefObject = createRef() - const initialValue = [ - { - _key: 'a', - _type: 'myTestBlockType', - children: [ - { - _key: 'a1', - _type: 'span', - marks: [], - text: '12', - }, - ], - markDefs: [], - style: 'normal', - }, - { - _key: 'b', - _type: 'myTestBlockType', - children: [ - { - _key: '2', - _type: 'span', - marks: [], - text: '34', - level: 1, - listItem: 'bullet', - }, - ], - markDefs: [], - style: 'normal', - }, - ] - const onChange = jest.fn() - await waitFor(() => { - render( - , - ) - }) - const editor = editorRef.current! - expect(editor).toBeDefined() - await waitFor(() => { - PortableTextEditor.focus(editor) - PortableTextEditor.select(editor, { - focus: {path: [{_key: 'a'}, 'children', {_key: 'a1'}], offset: 0}, - anchor: {path: [{_key: '2'}, 'children', {_key: '2'}], offset: 2}, - }) - expect(PortableTextEditor.hasListStyle(editor, 'bullet')).toBe(false) - }) - }) }) describe('removing annotations', () => {