From b2f155a0abaf7ea3b8e7601eec8edcbb230889be Mon Sep 17 00:00:00 2001 From: skjnldsv Date: Mon, 21 Sep 2026 20:31:40 +0200 Subject: [PATCH] test(formats): open one of every file type the handlers claim The handlers claim about thirty-five mime types and six of them were ever opened by a test. Audio had none at all: a fixture sat in the playground that no spec touched. An svg is the one worth having. It is the only image the viewer does not hand to the element as it came: it is fetched, run through DOMPurify and given over as a data URL, and that path exists for XSS. Nothing covered it. The fixture carries a script element, an event handler and a foreign object, and the test decodes the data URL back to check they are gone and the drawing is not. Worth saying what that test does not prove. The viewer shows an svg through an img element, and no browser runs script in one of those, so a test asserting nothing executed passes just as well with the sanitiser taken out. I wrote that test, watched it pass without the sanitiser, and dropped it. What is left fails without it. The rest is breadth: png, bmp, webp, x-icon and a real two-frame apng beside the avif, each asserted by its decoded size rather than by the element existing. Audio covers what both engines decode, including all three names a WAV arrives under, which is what #45 was about and had no test. audio/aacp is left out because Chromium answers no to it, so a fixture would only record which engine ran. Navigation listed the fixtures by hand and now lists more of them. Assisted-by: ClaudeCode:claude-opus-5 Signed-off-by: skjnldsv --- e2e/audio.spec.ts | 50 ++++++++++++++++ e2e/formats.spec.ts | 54 ++++++++++++------ e2e/navigation.spec.ts | 47 ++++++++++++--- e2e/svg.spec.ts | 53 +++++++++++++++++ playground/App.vue | 15 +++++ .../dav/files/playground/drawing.svg | 19 ++++++ .../dav/files/playground/picture.apng | Bin 0 -> 620 bytes .../dav/files/playground/picture.bmp | Bin 0 -> 2718 bytes .../dav/files/playground/picture.ico | Bin 0 -> 4286 bytes .../dav/files/playground/picture.png | Bin 0 -> 672 bytes .../dav/files/playground/picture.webp | Bin 0 -> 216 bytes .../dav/files/playground/sound-vnd.wav | Bin 0 -> 13308 bytes .../dav/files/playground/sound-xwav.wav | Bin 0 -> 13308 bytes .../dav/files/playground/sound.flac | Bin 0 -> 23710 bytes .../remote.php/dav/files/playground/sound.m4a | Bin 0 -> 9983 bytes .../remote.php/dav/files/playground/sound.ogg | Bin 0 -> 5235 bytes .../remote.php/dav/files/playground/sound.wav | Bin 0 -> 13308 bytes .../dav/files/playground/sound.webm | Bin 0 -> 10185 bytes 18 files changed, 211 insertions(+), 27 deletions(-) create mode 100644 e2e/audio.spec.ts create mode 100644 e2e/svg.spec.ts create mode 100644 playground/public/remote.php/dav/files/playground/drawing.svg create mode 100644 playground/public/remote.php/dav/files/playground/picture.apng create mode 100644 playground/public/remote.php/dav/files/playground/picture.bmp create mode 100644 playground/public/remote.php/dav/files/playground/picture.ico create mode 100644 playground/public/remote.php/dav/files/playground/picture.png create mode 100644 playground/public/remote.php/dav/files/playground/picture.webp create mode 100644 playground/public/remote.php/dav/files/playground/sound-vnd.wav create mode 100644 playground/public/remote.php/dav/files/playground/sound-xwav.wav create mode 100644 playground/public/remote.php/dav/files/playground/sound.flac create mode 100644 playground/public/remote.php/dav/files/playground/sound.m4a create mode 100644 playground/public/remote.php/dav/files/playground/sound.ogg create mode 100644 playground/public/remote.php/dav/files/playground/sound.wav create mode 100644 playground/public/remote.php/dav/files/playground/sound.webm diff --git a/e2e/audio.spec.ts b/e2e/audio.spec.ts new file mode 100644 index 0000000..70a4350 --- /dev/null +++ b/e2e/audio.spec.ts @@ -0,0 +1,50 @@ +/*! + * SPDX-FileCopyrightText: 2026 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later + */ +import { expect, test } from '@playwright/test' +import { ViewerPage } from './support/viewer.ts' + +/** + * The audio the handler claims and both engines can decode. + * + * `audio/aacp` is claimed and left out: Chromium answers `no` to it, so a + * fixture would only record which engine is running. The three WAV names + * are all here because a server may send any of them for the same file, + * which is the whole of nextcloud-libraries/nextcloud-viewer#45. + */ +const AUDIO = [ + 'audio.mp3', + 'sound.wav', + 'sound-xwav.wav', + 'sound-vnd.wav', + 'sound.flac', + 'sound.ogg', + 'sound.webm', + 'sound.m4a', +] + +test.describe('Audio', () => { + for (const file of AUDIO) { + test(`plays ${file}`, async ({ page }) => { + const viewer = new ViewerPage(page) + await viewer.open(file) + await viewer.waitForOpen() + + // Reaching metadata is the engine saying it understood the file. + // An element that merely exists proves only that the handler + // took the mime, which is the easy half. + const audio = viewer.container.locator('audio').first() + await expect(async () => { + const state = await audio.evaluate((element: HTMLAudioElement) => ({ + readyState: element.readyState, + duration: element.duration, + error: element.error?.code ?? null, + })) + expect(state.error).toBeNull() + expect(state.readyState).toBeGreaterThan(0) + expect(state.duration).toBeGreaterThan(0) + }).toPass({ timeout: 15_000 }) + }) + } +}) diff --git a/e2e/formats.spec.ts b/e2e/formats.spec.ts index fb0a0ca..0e997a8 100644 --- a/e2e/formats.spec.ts +++ b/e2e/formats.spec.ts @@ -5,24 +5,42 @@ import { expect, test } from '@playwright/test' import { ViewerPage } from './support/viewer.ts' +/** + * The formats the image handler says every browser can decode, and the + * size each fixture really is. + * + * Listing them is the point: the handler claims them, so something has to + * open one of each and find a decoded picture rather than an empty frame. + */ +const BROWSER_FORMATS = [ + { file: 'photo.avif', width: 320, height: 240 }, + { file: 'picture.png', width: 120, height: 90 }, + { file: 'picture.bmp', width: 120, height: 90 }, + { file: 'picture.webp', width: 120, height: 90 }, + { file: 'picture.ico', width: 32, height: 32 }, + { file: 'picture.apng', width: 120, height: 90 }, +] + test.describe('Formats the browser decodes itself', () => { - test('opens an AVIF and paints it', async ({ page }) => { - const viewer = new ViewerPage(page) - await viewer.open('photo.avif') - await viewer.waitForOpen() + for (const { file, width, height } of BROWSER_FORMATS) { + test(`opens ${file} and paints it`, async ({ page }) => { + const viewer = new ViewerPage(page) + await viewer.open(file) + await viewer.waitForOpen() - // Listed as browser-supported, so no preview stands behind it: the - // engine either decodes the file or the viewer shows nothing. Asking - // the element for its intrinsic size is asking whether it decoded. - const image = viewer.container.locator('img').first() - await expect(image).toBeVisible() - await expect(async () => { - const decoded = await image.evaluate((element: HTMLImageElement) => ({ - complete: element.complete, - width: element.naturalWidth, - height: element.naturalHeight, - })) - expect(decoded).toEqual({ complete: true, width: 320, height: 240 }) - }).toPass({ timeout: 5000 }) - }) + // No preview stands behind these, so the engine either decoded + // the file or there is nothing on screen. Its intrinsic size is + // the answer to which. + const image = viewer.container.locator('img').first() + await expect(image).toBeVisible() + await expect(async () => { + const decoded = await image.evaluate((element: HTMLImageElement) => ({ + complete: element.complete, + width: element.naturalWidth, + height: element.naturalHeight, + })) + expect(decoded).toEqual({ complete: true, width, height }) + }).toPass({ timeout: 10_000 }) + }) + } }) diff --git a/e2e/navigation.spec.ts b/e2e/navigation.spec.ts index 928d728..f66b29d 100644 --- a/e2e/navigation.spec.ts +++ b/e2e/navigation.spec.ts @@ -7,7 +7,34 @@ import { ViewerPage } from './support/viewer.ts' // The order the playground lists them in, which is the order the viewer is // handed and the order it has to step through -const IMAGES = ['photo.jpg', 'gradient.jpg', 'portrait.jpg', 'photo.avif', 'animation.gif', 'protected.jpg'] +const IMAGES = [ + 'photo.jpg', + 'gradient.jpg', + 'portrait.jpg', + 'photo.avif', + 'picture.png', + 'picture.bmp', + 'picture.webp', + 'picture.ico', + 'picture.apng', + 'drawing.svg', + 'animation.gif', + 'protected.jpg', +] + +// The video and audio handlers share the 'media' group, so these page +// among themselves and never into the images +const MEDIA = [ + 'video.mp4', + 'audio.mp3', + 'sound.wav', + 'sound-xwav.wav', + 'sound-vnd.wav', + 'sound.flac', + 'sound.ogg', + 'sound.webm', + 'sound.m4a', +] test.describe('Viewer navigation', () => { test('steps through the list and loops around at both ends', async ({ page }) => { @@ -38,19 +65,21 @@ test.describe('Viewer navigation', () => { test('pages within the handler group and not across it', async ({ page }) => { const viewer = new ViewerPage(page) - // The video and audio handlers share the 'media' group, images are on - // their own, so opening a video pages through the media and stops there - await viewer.open('video.mp4') + // Images are on their own, so opening a video pages through the + // media and stops there + await viewer.open(MEDIA[0]!) await viewer.waitForOpen() - expect(await viewer.currentName()).toBe('video.mp4') + expect(await viewer.currentName()).toBe(MEDIA[0]) - await viewer.next() - await viewer.waitForOpen() - expect(await viewer.currentName()).toBe('audio.mp3') + for (const file of MEDIA.slice(1)) { + await viewer.next() + await viewer.waitForOpen() + expect(await viewer.currentName()).toBe(file) + } // Round the end of the media, rather than on into the images await viewer.next() await viewer.waitForOpen() - expect(await viewer.currentName()).toBe('video.mp4') + expect(await viewer.currentName()).toBe(MEDIA[0]) }) }) diff --git a/e2e/svg.spec.ts b/e2e/svg.spec.ts new file mode 100644 index 0000000..be414b1 --- /dev/null +++ b/e2e/svg.spec.ts @@ -0,0 +1,53 @@ +/*! + * SPDX-FileCopyrightText: 2026 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later + */ +import { expect, test } from '@playwright/test' +import { ViewerPage } from './support/viewer.ts' + +/** + * The svg the viewer showed, decoded back out of the element. + * + * An svg is the one image the viewer does not hand to the element as it + * came: it is fetched, run through the sanitiser and given over as a data + * URL. Reading that URL back is reading what the sanitiser produced. + * + * @param src the element's src attribute + */ +function decode(src: string): string { + const encoded = src.replace(/^data:image\/svg\+xml;base64,/, '') + return Buffer.from(encoded, 'base64').toString('utf8') +} + +test.describe('SVG', () => { + test('shows the drawing without what was smuggled in it', async ({ page }) => { + const viewer = new ViewerPage(page) + await viewer.open('drawing.svg') + await viewer.waitForOpen() + + const image = viewer.container.locator('img').first() + await expect(image).toBeVisible() + + const src = await image.getAttribute('src') + expect(src).toMatch(/^data:image\/svg\+xml;base64,/) + const svg = decode(src!) + + // The drawing survives + expect(svg).toContain(' + + + Sanitiser test drawing + + + + + + + diff --git a/playground/public/remote.php/dav/files/playground/picture.apng b/playground/public/remote.php/dav/files/playground/picture.apng new file mode 100644 index 0000000000000000000000000000000000000000..5dbb7f99948d8a1b6521486a9f937f5feb888507 GIT binary patch literal 620 zcmeAS@N?(olHy`uVBq!ia0vp^6+j%t!2~4#B(d%QQXGlNAwEDFB*gH!cX9!cl1hV! zfrP*sKnyTo1gTrpBkvF7J@j;O45^s&_JX6}0R@Hw1_#dfBuXm>Z~PRoXu!!+|9kGPeRtvDyihii;jzeiSXzLdg#`&Ckc}lsEdPI<4U~D7 zmf{!!q?u5HCFMapi`%lKryE@y*MEMK{$X#a^#lDO8!B$@ai(QVoL1T==K_7o;OXk; Jvd$@?2>_Q*-LL=v literal 0 HcmV?d00001 diff --git a/playground/public/remote.php/dav/files/playground/picture.bmp b/playground/public/remote.php/dav/files/playground/picture.bmp new file mode 100644 index 0000000000000000000000000000000000000000..72f92e66e359df70ccb13eefca8a5811fd97840d GIT binary patch literal 2718 zcmeH}J!n%=6vxjw_q>n$UizBvkVc9i)DGfc5xTfkq$2fOY^p^nYAH^FO9dB^QdCOD z(nUIU?ATGnp^LMfyE;4T|GvD$B&2=};?hfg`Jewe=id9c4{kDZ^?gL?c&kJ&5v_uI zfGGq-WglOi;Svt|-ua|vX7<+e*2iy?H}}RX<7;1eYHF&qyu3UC{H?7mdm;K_CKp@h zTytk&yS_0!dq8I|9a8h!9=*7;NlVvvY31e)J-fY4m#^&8jkyoBdH)6NJXoRa#b>nl zut~d1OLVX@O@~j<(&r}^Y5&P(`t*2?K0LZXukNj8E;yp5Bg-);L8p%G8ReBJTK(GUk_+r3OxC8siFH1)+);{f5N#dOs1LJq2847ekxq9fv{rAenrZ|e5r!-u1NJvg{uN4;gcFy3qU~t82G^D zU2K4>_10a@*6_qY>ss^b=mahf>o{EC*L}oV%cq`eL8|?|SfP%$-Hk zKkbn*+c0U}2G_wJ4eVh}!&qr3=#4|G4bL)iSP?y(_AqjSSTTniei{pO za1E?&hZDqXdzsCA7!ysz97VB-Y!4@q*NEew2NOwbBhyE*ua3R(uVoN_L~}YKxsG}x z0X*k&T{SsDPuT5~99H=STGFDVNTzLXN}Myr7!^}8X{D_`ysOxOdDx{$bfRbqQIQL$ zpcZM|u!I7kKqyPflCq>AFenrXg+ie)s47$ys;a7{stVPE zJbsWp0Pjt{NoM8-Ba%{;&C0inlNQN{NKR2JDJ$RoFY1;|z8Zt6Pd#|f^`K<;id$p$S#8Ey)A$# N-sQoR{0IDd{s8!eoN@pF literal 0 HcmV?d00001 diff --git a/playground/public/remote.php/dav/files/playground/picture.png b/playground/public/remote.php/dav/files/playground/picture.png new file mode 100644 index 0000000000000000000000000000000000000000..cefb198430a93c5014365f93437144296ecda950 GIT binary patch literal 672 zcmeAS@N?(olHy`uVBq!ia0vp^6+j#%zyu`Me7gA?NGT+H1o<*BRH-pAG_)`<`~nI! zykKA`HDF+PmB7GYHG_dcykO3*KpUV0TavfC%YQK7jQD;BD8gRi>Fdh=ic?fb!eU7} zgCkH#wZt`|BqgyV)hf9t6-Y4{85o)A8d&NY8HN~ISQ(jEnVM-E7+4t?q#xYCj-nwq zKP5A*61N7iIUKuz8Z_WGlw{_n7MCRE7U0(7*r}Pqz`)qx>EaktaqI2fgT03gL|g;= zALm};?7irpF@Z1b+JsCd&X=#|aBXt%|G(ej$Mdq?_vfEy7 z{P+9Y;|=E{K1&GA>M{NPT5;jZ2^W^E*%_afVWeWB8O0a$1<0-JX_q$_EGCN2=-Qp*KPO#qso3b$B{@q(mtE71FQ`Xm$(ohhlwF)AC$*`$I!#`* zP5J1@z@VBY*RG`#M7$L>;U-;s_P&HO^0UNqZztizHnpQXzFl&&MDn>j4T~l`64L?M z1Xl}WXTNhk?bz0$=9=pcGD(?TQ)t$dt)3Z9Kvx{rjR?uG^!Vtj2ox0I^zCXH5_4gA{^0vB#m2AK`C!D+J6LeD~rPLL%)F99uw m>o2UCBEtU1bK-?1f0+H7_~khjja~xdkHOQ`&t;ucLK6U{d-16N literal 0 HcmV?d00001 diff --git a/playground/public/remote.php/dav/files/playground/picture.webp b/playground/public/remote.php/dav/files/playground/picture.webp new file mode 100644 index 0000000000000000000000000000000000000000..c571546b8012fccb7ca7104dd348174b397319f2 GIT binary patch literal 216 zcmV;}04M)aNk&G{00012MM6+kP&gpO0000`2mqY{DtG`|06vjOpiHHtBO)NE0I(7X zV*t-sh5KhEBm4jQgX{$d*7!zf`8gF=X~?SvMAv1vIfBngRlHM?Rd$@6@5Ch2(6|8p z=FZ>#SC_cIC0SfQz;)bbGf;*g1ZkG|@VWpYJxelw7JTwu^rLnakI?v_Yn&m(O)S|s z>m~3PrOcX~Ms{~)C?QYuscaaLzfGx^r-S9x>JELV%t3tqjPJ$tPx2i>grUedmtapD S>3dC~O3wG!ue3)m=yPw~?&wAF=qf5t*Mq`5L)3$eqx85sA zFGUapnS5&WCW!W12!bL?5!qdO_NtWp-sP2!IbC{o?4>5(vxkm-t7+qgjT$z}Y(x;b zLkos(OPQIG|Cy1x`fGx*VrJg3L zMzw;L-f(A+RmVK0FV>df%cuuZ5Qo~L{pbUntIgN{Hbz-hoQLi?|5$h|K29E@H?x!Z z#^O)Xv&tZK07!?0P=h`^3SWWC!T;1*N&~r24Eg7|ZcHDlFVQC&6nx;VbnaO_%}4q! zZ6|(!2B9>>pk`<@8h|@$dHO-4jrG9Z&P1;NLKYm*Gfw0{pF>Ri??T z^oFpKJHVWx&Jt&$^TADzbvxRd&Hosd_BSq#$D^uI(mlg{bIFn&$p5$U7tl&3y z$JtlS*NvxiTC0O+p_+-t(`XWU3YXwmYj5l`d)Z~(67ObkExJw=Q)ihi+$f>6G*7;w zl&HUe58%~A<1U;Fbx;kYspsV((ouoq>$5M=ZOJzAOJR;b$}O~6YmU)EPuE_+pQHN8 zte!$65sfe6KeZ~xT(hQq)A`=p7_5ud6Kko@nXz1J;f^>=-mUzq?gPW%c^JV*@Jq;-zMRh7L`O>rc@oZU|E zA@{_4!bAQauIdc6ijC>|0PS787qw2jtD@J?HMAP9(9Y{w=22_B)75JdG>jS&4XIj; z%>B;K7E8$^l+V>Upe;NAU1-7`upt}?Myu_VTheRdI{rL+pDrOw;*!wzOL=Xb1r}>= z)F)^&@d?xgiOJ_>bP~+Ttx1sSF@w}3~|3yUFog%236rV5GT_*4!gruV23(iX)5m& zd7%~8j~Pbg62qdrV6wN-DX|8cx?ZGxhyOvZC#OLtr?L_C#%;8r`W~a1b<-|%=lava zsqr*&BAv&+$h*R4k|#G+TLBR+hmVs}KL>}xz2Ka>Lm4996k7-%a0{6g)GA_Sv^Ln~ zU31dy*=9wfSi68p{2r>1IIBKdieAJuwAT7OL$tQqqupM9r?5lZk!(vhVkQ2BFiiSQ zE~i!pCYYBvH%=V>~Q*(d|ET4g=gC^jeAt=%d<2&GsdMcQR9b4!J$(iT}$Sa1_efj1J38*m!@3y8o{ zzLi@_D}`$u!9uzWnHHA~YxwQmkL;Ufo>5H~wR(6Cs+DL|MIWLv_#t++R>pR-t1Y>A zyo$S zx3IrI!QEv8YoYOyUR!I6m!Ss9tSX>)QH*}USG01*bhDCu$=T|C6?_pbBfg+MWkzsW zLa{hN-m08YcYz`Bmt-qGhF?J$z6hGDvAjfzgbw^j_9J>0`EfiuT;y+e@7k@bBI8ZH zoz@Q*qNd5_O+!P_BeWau)t>0R&4<=nXPoy&Fen;C45WH6O*u-~DmIemDBIK(AO{{x zwmXI!VKvwf^jB*shopw$czy%BpFTn!j*o<={JU-i=N;>g@u~iXmXC{2o5Z_Ha+6#| z%kdZ53B8_KWQ}y%co{*B=oz90Rf!?FbNm#MmvfcR)R~|)+@IW1R&rZ4f}_C%wX5<_ z8Z2(%i&>raNk8^NDyZyrb(UMe+@?>{=HSz)E0U0aI-%p}BRo!9uaoAdRtrb+uzx?i zA3q>((WlrIe2#csdQr(&-v#yIx6nu^JP6ytx!_B6lu}NfFW%tOxOz+$)r823S_a*{ zDb7i&xp`4vqpib#qTUD~7QKLWqv5!(HbuW|473F2qWitSJ=_*=BRA1Y*gU?PxKpaA zysCBw72(&(z6#(8*bA-)->FNK*7ANaP3Xi8V@6T=#Hgqs_{7`cxK^&|=|{95Fh*~n zG6{uQXg%tVTWJ0DtwuxZvc1Zk=8p+S#|30QJ&0|>mk6^YO@2;o23WWhK1?XQ0N;c~ z;F7ve$&(+5?S#qP3T6|vnb;I<4GwwtoD6$`S>3p$UBN8QM->xi)k8~A3tUxerq478 zYrQ?(?d-Pg?AG7{tgS^1)!Irj( zn=dqwzLp;=v04l!!t05~EjR<-0|11|KDoWLQMkv+Y-RdsvTB?jHt=)Yx%LAy->9ua zEfdc}brOv#Xe@&G4%W0R;~TTB9Xo$`CxTVj(OO*vn>B2?yIVtdhj$v$zv@J)ZFd%&(>eQ9*j>uVkHSLnH9R^`xebO_=2BCcpO(~HQ3@uF~*U*wk99jqUX5qcMG5Z;3RlTcU+4McyV?f6^mp8kq?(^~3`@cIPZ zqaMVoR41k$=kQ;P8S->xle!dS!=DlgHMkkpfP=wMwSjU%`j0q+|CT*QpC!-4XTr;V ziCe=dupS!=^*n71K7d|AJd)9?=py7aa6fv7+M#$u20W5ie* zq|8yLf);RJLZJ=!z$S1!n5Onnbm?tzFMp4XXpZ6tE&@R_WbScu{Jm3|HR*&%&(80dZC{A#r|i}i1`jrbPohhRcsOSA*!;vU*K{THK$ z71<}*V!Hr@* zq$Uy*qG`cm?+1sn-!m!WXYEI9qBl|5gu>_18kCK*w4V9~qo#G*UgD1NhlhFba59(f z!Pe#P36rHq^0R6qK*A;PLE^06U>-aKiq%6(zO0GegxTCiW;eBm*d6T)PI<^_Y=3EH z827bnSi~QoN{M?j&;ryHSI{!`Nrr7Mw+Fi~_?cnD_&Ks3U75AG-9mTisLZS7!DBER z-cAT9hU4HRV5@&A%j9%vns9)-!Tdv&5Kkf;kbW&U*FJ8(YDl_+pT^Tr^+cmOnvT-3 zhgH3&anj7QGhEKM10ymCOx4d^3a1AU2Uj`jjplpyzi~aeT>@s>4xiVfAZt{=0o}FWzHVX6{?G3ygwMcvg zQGawB72-nehTg%vY|VFudR>DKQAeT!)sm^s{lhO8tIHFVb?PF}86HWztHUj@HXH`t zRUw1YIg$yPqM1kRetv{#ORp(2)Cr&&+?z0H!|z~oI2p`R`zyZmzId3&tjLt6N)x4{ zib19~#Mxq1GY{zVwZ-^1l#_7Iqju;Z8i(J}mgvYBZ`E-O_YeOilTBq4U85es+uma5n)R}ITi>c} z!FSPsWM46;IogVb;A|~lKW=ofbo-#Y&R-TTjhB&&=*etPUJ=(wlG0A?1k&K@nn`P))9M-`;I?2925^C`_Y})bpDz!M!GH6Q0s#bEQ0qFXI+Hv!lU4pdR!SV2Vx&# z5x0{$L>(axM@NH8p6|4>*P4xt674Un;xVXl;@&!FK5B&1v<$t#cw#QFd%4g1HNzV5 zGh{klihacWPv|WDAQNgSa39P}?x+}EgA?HIAXFbHYvc^+Q{iXsA>&X!;YDGf_|Lf` z?Q>>dBTbKR4Lk$YNHo&XR8$3NZ7SYkG?A38_9ox!$f8?lvI!+gYb7M_Uj%KMco>JQ*8_-it&hwuwX!z@r= zEs>{7kAzIVFZ&LiPmYT7!%6;^?gcx;Dm41&&9of64mD0FEQ4~9jt=6Vv{278Lu;=y z&-*YK9TgCxso_jES6(CI$e zTo~^5&$+bI*ZR$vsK2JYjd!6|355XlK{wFXc)fN-f5AL!O?P^GZGz@e3!(*;$&}}A z^9#kNES8*wSjJ-zRCU3{L!^b}BHFaiNp|M&o z(5B*}$^S$lxv8?zSu_{V(01r)=1MEaN%w?+hzKGk9r`BwE&qo2M0!P;q>cfN;qFv& zl1ffe$w?|XNhK$#__Va*|3;QprgwIY}iaspKS;oTQSIRC1C^PEwtdROcks zIZ1U+Qk|1j=OooRNp((Aos(4OB-J@dbxu;9lT_y<)j3IZPX6tjoI&&ObZxf|%ym{5 LC&P37YSI4zwG!ue3)m=yPw~?&wAF=qf5t*Mq`5L)3$eqx85sA zFGUapnS5&WCW!W12!bL?5!qdO_NtWp-sP2!IbC{o?4>5(vxkm-t7+qgjT$z}Y(x;b zLkos(OPQIG|Cy1x`fGx*VrJg3L zMzw;L-f(A+RmVK0FV>df%cuuZ5Qo~L{pbUntIgN{Hbz-hoQLi?|5$h|K29E@H?x!Z z#^O)Xv&tZK07!?0P=h`^3SWWC!T;1*N&~r24Eg7|ZcHDlFVQC&6nx;VbnaO_%}4q! zZ6|(!2B9>>pk`<@8h|@$dHO-4jrG9Z&P1;NLKYm*Gfw0{pF>Ri??T z^oFpKJHVWx&Jt&$^TADzbvxRd&Hosd_BSq#$D^uI(mlg{bIFn&$p5$U7tl&3y z$JtlS*NvxiTC0O+p_+-t(`XWU3YXwmYj5l`d)Z~(67ObkExJw=Q)ihi+$f>6G*7;w zl&HUe58%~A<1U;Fbx;kYspsV((ouoq>$5M=ZOJzAOJR;b$}O~6YmU)EPuE_+pQHN8 zte!$65sfe6KeZ~xT(hQq)A`=p7_5ud6Kko@nXz1J;f^>=-mUzq?gPW%c^JV*@Jq;-zMRh7L`O>rc@oZU|E zA@{_4!bAQauIdc6ijC>|0PS787qw2jtD@J?HMAP9(9Y{w=22_B)75JdG>jS&4XIj; z%>B;K7E8$^l+V>Upe;NAU1-7`upt}?Myu_VTheRdI{rL+pDrOw;*!wzOL=Xb1r}>= z)F)^&@d?xgiOJ_>bP~+Ttx1sSF@w}3~|3yUFog%236rV5GT_*4!gruV23(iX)5m& zd7%~8j~Pbg62qdrV6wN-DX|8cx?ZGxhyOvZC#OLtr?L_C#%;8r`W~a1b<-|%=lava zsqr*&BAv&+$h*R4k|#G+TLBR+hmVs}KL>}xz2Ka>Lm4996k7-%a0{6g)GA_Sv^Ln~ zU31dy*=9wfSi68p{2r>1IIBKdieAJuwAT7OL$tQqqupM9r?5lZk!(vhVkQ2BFiiSQ zE~i!pCYYBvH%=V>~Q*(d|ET4g=gC^jeAt=%d<2&GsdMcQR9b4!J$(iT}$Sa1_efj1J38*m!@3y8o{ zzLi@_D}`$u!9uzWnHHA~YxwQmkL;Ufo>5H~wR(6Cs+DL|MIWLv_#t++R>pR-t1Y>A zyo$S zx3IrI!QEv8YoYOyUR!I6m!Ss9tSX>)QH*}USG01*bhDCu$=T|C6?_pbBfg+MWkzsW zLa{hN-m08YcYz`Bmt-qGhF?J$z6hGDvAjfzgbw^j_9J>0`EfiuT;y+e@7k@bBI8ZH zoz@Q*qNd5_O+!P_BeWau)t>0R&4<=nXPoy&Fen;C45WH6O*u-~DmIemDBIK(AO{{x zwmXI!VKvwf^jB*shopw$czy%BpFTn!j*o<={JU-i=N;>g@u~iXmXC{2o5Z_Ha+6#| z%kdZ53B8_KWQ}y%co{*B=oz90Rf!?FbNm#MmvfcR)R~|)+@IW1R&rZ4f}_C%wX5<_ z8Z2(%i&>raNk8^NDyZyrb(UMe+@?>{=HSz)E0U0aI-%p}BRo!9uaoAdRtrb+uzx?i zA3q>((WlrIe2#csdQr(&-v#yIx6nu^JP6ytx!_B6lu}NfFW%tOxOz+$)r823S_a*{ zDb7i&xp`4vqpib#qTUD~7QKLWqv5!(HbuW|473F2qWitSJ=_*=BRA1Y*gU?PxKpaA zysCBw72(&(z6#(8*bA-)->FNK*7ANaP3Xi8V@6T=#Hgqs_{7`cxK^&|=|{95Fh*~n zG6{uQXg%tVTWJ0DtwuxZvc1Zk=8p+S#|30QJ&0|>mk6^YO@2;o23WWhK1?XQ0N;c~ z;F7ve$&(+5?S#qP3T6|vnb;I<4GwwtoD6$`S>3p$UBN8QM->xi)k8~A3tUxerq478 zYrQ?(?d-Pg?AG7{tgS^1)!Irj( zn=dqwzLp;=v04l!!t05~EjR<-0|11|KDoWLQMkv+Y-RdsvTB?jHt=)Yx%LAy->9ua zEfdc}brOv#Xe@&G4%W0R;~TTB9Xo$`CxTVj(OO*vn>B2?yIVtdhj$v$zv@J)ZFd%&(>eQ9*j>uVkHSLnH9R^`xebO_=2BCcpO(~HQ3@uF~*U*wk99jqUX5qcMG5Z;3RlTcU+4McyV?f6^mp8kq?(^~3`@cIPZ zqaMVoR41k$=kQ;P8S->xle!dS!=DlgHMkkpfP=wMwSjU%`j0q+|CT*QpC!-4XTr;V ziCe=dupS!=^*n71K7d|AJd)9?=py7aa6fv7+M#$u20W5ie* zq|8yLf);RJLZJ=!z$S1!n5Onnbm?tzFMp4XXpZ6tE&@R_WbScu{Jm3|HR*&%&(80dZC{A#r|i}i1`jrbPohhRcsOSA*!;vU*K{THK$ z71<}*V!Hr@* zq$Uy*qG`cm?+1sn-!m!WXYEI9qBl|5gu>_18kCK*w4V9~qo#G*UgD1NhlhFba59(f z!Pe#P36rHq^0R6qK*A;PLE^06U>-aKiq%6(zO0GegxTCiW;eBm*d6T)PI<^_Y=3EH z827bnSi~QoN{M?j&;ryHSI{!`Nrr7Mw+Fi~_?cnD_&Ks3U75AG-9mTisLZS7!DBER z-cAT9hU4HRV5@&A%j9%vns9)-!Tdv&5Kkf;kbW&U*FJ8(YDl_+pT^Tr^+cmOnvT-3 zhgH3&anj7QGhEKM10ymCOx4d^3a1AU2Uj`jjplpyzi~aeT>@s>4xiVfAZt{=0o}FWzHVX6{?G3ygwMcvg zQGawB72-nehTg%vY|VFudR>DKQAeT!)sm^s{lhO8tIHFVb?PF}86HWztHUj@HXH`t zRUw1YIg$yPqM1kRetv{#ORp(2)Cr&&+?z0H!|z~oI2p`R`zyZmzId3&tjLt6N)x4{ zib19~#Mxq1GY{zVwZ-^1l#_7Iqju;Z8i(J}mgvYBZ`E-O_YeOilTBq4U85es+uma5n)R}ITi>c} z!FSPsWM46;IogVb;A|~lKW=ofbo-#Y&R-TTjhB&&=*etPUJ=(wlG0A?1k&K@nn`P))9M-`;I?2925^C`_Y})bpDz!M!GH6Q0s#bEQ0qFXI+Hv!lU4pdR!SV2Vx&# z5x0{$L>(axM@NH8p6|4>*P4xt674Un;xVXl;@&!FK5B&1v<$t#cw#QFd%4g1HNzV5 zGh{klihacWPv|WDAQNgSa39P}?x+}EgA?HIAXFbHYvc^+Q{iXsA>&X!;YDGf_|Lf` z?Q>>dBTbKR4Lk$YNHo&XR8$3NZ7SYkG?A38_9ox!$f8?lvI!+gYb7M_Uj%KMco>JQ*8_-it&hwuwX!z@r= zEs>{7kAzIVFZ&LiPmYT7!%6;^?gcx;Dm41&&9of64mD0FEQ4~9jt=6Vv{278Lu;=y z&-*YK9TgCxso_jES6(CI$e zTo~^5&$+bI*ZR$vsK2JYjd!6|355XlK{wFXc)fN-f5AL!O?P^GZGz@e3!(*;$&}}A z^9#kNES8*wSjJ-zRCU3{L!^b}BHFaiNp|M&o z(5B*}$^S$lxv8?zSu_{V(01r)=1MEaN%w?+hzKGk9r`BwE&qo2M0!P;q>cfN;qFv& zl1ffe$w?|XNhK$#__Va*|3;QprgwIY}iaspKS;oTQSIRC1C^PEwtdROcks zIZ1U+Qk|1j=OooRNp((Aos(4OB-J@dbxu;9lT_y<)j3IZPX6tjoI&&ObZxf|%ym{5 LC&P37YSI4zFrvnlUiMZw0Aoj8bB37VPv68OYNQRR9EhuZFZ)O3U*q7re%%Y$ENMJ;g+J3 zb~+GrS~)f-eWGb?ZvR92tcx$Nu-qpG6#s}g2#KFO~595ppqTw1Qq zMCDvjt8|qWOqV22Ue7PE6pCq;aH29!2X7gbo>9EFjOinsW@kj1_3I>78(I#>D&g)T z@$vp!hQ=7$NLq0+qKX-kgW%<9p=y(p^-^Uj923d8XJWwyJ0Fc)`HWTIJ%12!Ex2yE zZoBTe?z&!ceaodZ@c;DfX7o!v$Mw@+`})qx*7--s@QF9lHYwZF>P6fEmJ(%gMfaC! zitkHMPdh)^=_T2Yox*UDNQtY_P{t4o;nrzJ$kf)lOg6-L-z0Z-wiQPi7edoRrHr08 zG0lleNNbz7O`aQz4&Rx7yxkkDmUJVdKv9rxY#znKZf2Sd$&z>AcyS>rOIoSH5n>r( zGMa;8vmxXWpKY3@gN&DqjCGGos@_dyr#sAY&S9_~nZsGa?Kfn;k-qyCa>J(v(?b^o zuC8PG3tiKBJ?oaCxP_Dy7$zgdOKrsq<0^@uHd!N130Y=Z=4ksgixCrIaYr&LowH{i zi!sI0g(zPoL=r3G-44o)^cLle?k{a!3EsJJQ=&Ra+0;2*X_lEh!TGCxQx@yhS}_=6 zw%;L!e(Nc#=*=G++4pqovn|EFrRFa*4yXU|Q@0-ZS^oc8Y1-y%-1cOdMp#azCQ_Vg zFX!Kyax#izept><2{!m;vuP%kY@iArPpWE;_Hf%%NQ@-grnzk9#p^B~wn^u2GOLV| zsn?5gSeWZl7*tk@jd41gFD-DIVj>|qLB-K>8&;o5c=(wF?ZwBj9mNbpGczGd)a?RE zp=GlcNYKRrDSN0(rHz;~MAA(3AZx^Om}#WM#p6_3){24X*~p=Am|KmyS$J)v(-tFy z>NPx_yMc3CJ0wdg3f4##&hjQ39K>pkllGdd;JLD1ZRCR3QdJ952_nQqMK!;)NtWqB z(ia>V8_a2%Sz2%O&T)<2LNZ5nel%!w&6Se&41d9H9z{jrBA+utlVpI&7^9a&N7lmQ=F{KD@f~J1jXi~=qtlGzZ?~r z*RTAJP21dX)EX?&YR3-4EE|K&vz>zb2 z8O9vU@qR8-lP9Obnv&Re(JQ423TkVQNj)%MWl3@me+v-Lesj3STX<~n17-413PY7AJ zL&8Inmfo?f+-ysSo-(`ZAx4&vI9HW$w_o?q z3zWGee_sw!!QLbNQF{Up-r@fV#3k|jBRAsW*=me+EN6cwUUa}otn4Y}%*!f2WB`@AvtkxBU z*0lVKio(sZ<<*HaO;eLpDmCfDqtR6FntO3j?MKA=tt`BGjS$yOA93jHxnsSO*RfJk zsg%))$*Ge;eXv#~ajse;NtXt%-$qLsG=1b?w>j%p2JalnYa+x7n7%ItbyQjdz#FU!zRWmmi{te=Bq|=sTu*GJZsEZ}zaLlg{X@_}( z#bgHBs(QWIGdqrqt5=S{T#`>byZHLE5 zr4Z#;d6~t#PQ#x=gxd={tFL!Z?|$`(ds=v6Y<3FvG**bBm_K_!EaRwSt+QFvDxC;Q zj$ayF`WwAtfvyg>|aYn7fS*85tU3!-GlGDC#}*7>mp ze@)JWGK_lk^zB*e8SG=it`9q3cBb3kZGXz~S_3=vy=UJ(^S&?t_15IdK9-z8`w9Lc zv??`&1_R@GkErXWNeS@2`teBbb%ZPRxoIQUKbsB~YoQxnuU(RbY>G8Cg@`k_SYKbu zCjX|NBsJAEVItOwIIj+7xmqq**G~`A<{G*H2cWOjn`J4U^x;X;kfZ!U3o{WFmo7OI zN^$8x&5ANG_F1Fp^DJP5F)HWZfhs$?HYJPi$SRq-1StAugJJ1>q1j=r5Hq zLr&nidr=ShJh5NZ*TUUC#Es?bSs^RrbtZpTt#8M!*s@U={@0tdD z6G&&4qx|~fT$sIa!%%34lI`^`bUSiZ_rt#~$vOGXf{X(cnIz>ns@CA(30|a2oagJh zIv?d{_|ofxo1~W{#xMXpG%k#Y8XTkE$|FT0253jU5){~LZM02O1H4&2|LH%q>T8>b zY`t%*Wvh9sbIZT=@vRrOe%|nYZtX9T@8A9^<$C*mWaaIq7E=y)%RH?9-P56S6}FOw z1JA%VP&^%8M?nZtEY2uSA%c=2-Rxe3)l<@ktj4F2kV6&<9K|BNv@??2T2^Pz3|vRz zupZ(<2xt9f&O!D1tAk!UD`7SDesOIaiFQ(o5~8xnQhtf_m!Zsc)0C5IsqEZ|WBk>* zFq&bqLLg~mVPn~c^nj>%n+vIPWMzDS9QusAV{v9AE7prtQfBk!bjVTQ^^xSw1WCm1 zjYvo|`iCuyY{aPKLN_MiEFO~4yh^+9gyKce!CN|cGb)-|DA2=X3}}I_6q9KrC}HRV zue0jLaV%~vf=Z{OTDN8b;g(?)U^U%ja&tMUjeNe%tCCr%IV%tX>may5ukY|1L95>O zC&Taf?jCyAeXr+!Pt*QJ-?^WD|371gpZnp~=t^^Mf3^dDdHSEjOOuq_D zC4{g9V<;HY=~y`Eo=ML7Jo z7+xB-VT0aZ=s{r}js7;OMWV4|aLg>gOdUu?I7*NOr^2+)fR!IS%w7=#&?X0*k*ORWlaDBhw z+g|xY@0wYL*Zb&LY**6Yq3X zdi&79{(-@&`hwjgP)(wCff3FVaa2)*jp-JolZcL7?%OAM3H}Pj=1b)QUt=UkIjRU|EntMox#?;R&dK4}3pUC7f(zb?0n4>3W603RECw?l zL05-qA1+Z+AU4zKC8Cm}2tzsIE=$fsoR-%UgQ_imA?Dv&(wPh(zxBRDs4UK-WhH>Z zLe>2QZ#z8R>?uS?a*A0w;o2(c9hIccC?Q6y0uO_MG6X-WlhYk!e^47BL&Z`fl_up} zPN6uB;PpbXI6&i^MiVhf_UNIazC%RfX&kjp56$!Ni}_9a-OpQmUF5#V;+&dGY+cZ~W%FFP?t{GewOZtlt5W@SMY}bbQVh%P(}x$)dkr ztgU{uY(%qDM-I8!*{=M{16p}Co!Mq1Zc{0$PZVRjYP+>n+L@@gH{BSmLtiz zNJOYLqVf}STyd>?&|fMQ=ekZ!Da={Xl!YShp@aGw+fQqCv#7V*6|9uaLiwt4(!|rA z^y-vWoMl6W)D&GvB|O_*`R&NKr}mgor+p@Cs)J>KU4=BAxkDQ%R4&AjXt=l0DknT9 z5|4{F4@KApYns?Pwl=p!uH+mKWq3r-}+8R zren!|eER%i)4sE?jJpS}ULKhMPSDvbqYfj=I(t0~muvQ{M$?pBB=1ww;5U&eixY5o zxD|)FtC6sU`!%IliK)wSGI?C+;-*>TV*ww7QgCzurcpuiHn z3M^MZiwe+(+~9g2+BYuyR9Q^V>4uPcfVXMrpu-7cJ4 z>h0-~+o{|2ZE<^h=g%7-_{NVmw{ow&@{#qu z19FY5)lDBJXAhj^@C*P}SP5J$H5)rgO?iJU1m#W8YK)$4JWa(^axQ%z;jdXjP`@{b z09nGjv%R#hdG(Z#T-TYKu{QPM^>$pIfH8+h+=@LL!b2VmxQF*eT zHV%gm@CG1Z%q+wE$KBaD4|2x6^yU%1w2+Fs^8jA#0m15bDo4-sj6F}Xqro+Pwpa5y z`YAWa3^FI}sz8Rut(|#wj4|tm;!qqJGq1wu;s`EZ^dDi=L6cqMzy47T`0h9n?XH*e zn%C}Mf%nt}L)_oT>SjDvi9Rpg@Kq9n=73{uM34dWD_BvJoS>jAoVmMmM8e}k?j5V9 z&ZokAKh<)kbz)B?twLbd# ztFh|PqDrX?*e!Pl%SAeAGH1J>Whn1u1JU)R&LH75c1IVfwX^Ne4sD3kbU9U z*v(YfO*`aF753>!d|#I!C-pL59O)W1ddb05qMGs=67Dq=1 z)Me@Quc#kV2ZDfH>E?WSmjlDu1CW!DoMX3cg~x=mr0WW`l+ zRdz*xV|4G?e`IMT!9oR8Q6 zmXf40NaGXHgsK+dV92s(t4ia&xTyPe%!s0NUkjXcrXq||r_SAB0S-`-1JIgDC7h@+ z&G2Q#Utu&r`_8l;LG^gbP@vtBup7E^KC*iTNQy6Ap$%<~S8quEg#-qAs{r~8T8LW2 zH{5+g)ybTSq=5J`X$cW?xLa~qcsqZ$Fl7?sNT-7shE4uQyV$McaCk4?Ozt6@9=lK8 zBO4!h?3KUxFSh;vxYKm>@E$b?(hi$Fz~!O6SQdw!k+|xg9_;Sa|N{ zbiN9NxWBl0>jg-_g5HjVU0)p%xE@wj$ir0hS}lem${xZ;TvA_vbKO0U${S@BQKaYd-SE03syoB$n5au8@P`WWdpx zDtyN1$4w>q#7H8dF+s==z9`5voZ;x)>-unF3C${LV?uL*3Rg6 zFxxSLFC>8n7m_8C9;7v$jfBII3E(8r&b=z_Fmq1S!w3uuenDy&_zWXS)Lit`*yv4u z0j=r`XNWSZ03K2w(A?VS(MOSkX`@Io)tbPvaO~u1jT%W!2ga!Ifm6{aUm{|IeZ7lB z*uAw7qk)3K?7)7)S|#r~5_#jBZ_d7T_Rh!NKJm`)-Tke1{f)0LZ2ZPo6Mx;Y_rv?= z|KXWfQ@4|=-?6jxVkKmxT^{XNIFib(PSRyMs2S(9dfkHHXh{vEn@u`jmjLpdoeKI? z1$ZzVL0Zu?A6BQ4^gvL10o$QQLpUI(vI5QuKI#+cXfh;j>l1R(TkZuvos)Uw2P#H#3VvA6%lWE z5uvs^7Gxtanqs%!;;Mxh73L%wQ}eYV-8QJ!yn%#5Dg81i7NxKB zaeK1;b>|;DZ#8`PU-|@**m>@U^UvN}oA#aG*XkK6flieyOPG48S)R!-m8T8?_!mI$ zu|SZe9K*hXp&avcEJRKsXGp`>-#5vqx@>7a0hoBseIgYHUqb=>4JJ*ZMk<&ZDu8 zzV{4JMmH`zY-wY9Ot-~Y!B#=`U?$r?yp1PYTWKhOJ3CJOMs z&6$Ap7m4l2)rGKoj?2R!keYKIgY!B}C0OAXGAWPVakFx+(ybK@V81BRildlh_u0Wo zs+vrt({< z5ppQ@3}{CPBOiWh|B;E02HB4F3#m*=mxtS%foDWf3;5(sIKDy{PC!Q`HhM3)w7~au zNzQKYz#PC{g&|{C2t@}++P~ILJDzWQv+e%?4EN)I^Q!Bu1IPV)jy~$l(Yd`o44fYU z=j0SHYB|={)_+Ca5k`xpg((=y0HAP~Vm{EgO@IAwfCz_AJWo8KE^1)@5u)5{K`)rz zo@3#u`eL|~@=~7hLZ_1Ru$~a@@E509yNLk--|-E-xDee?ulU~Jj2yLM7Q}+J3p77z z2|&nr@$F}f>WgHs+F#)70g(!2bZ7T275uw<$xNYcC7ryLaQT((=cOa+ZU^2KdMF$K1HvhjarMKJdiy@SP5IgVIKCq6O{&FX#p;4!nSL zQ0U6VpttSl*ooOQ>eplJTI5%(z%F+KwE@jvkLUjN&sN zeRqbxsNPgd0|Pi`Sd$-|nggPaoaR?2!ifR$ngi8UGD%b*>3or zFMntMXFHzz$xA<4nK<8Mf;X5^rboizRys4Jr^9HaGsrK!TseqJxOGHoBchopttJ6~ zm--G#m3TI*UTR04>XLKd4uGVAW)DPJhvq1V3XU3@+UE{W-lua22wp@27c`_xD8P9& zghEUrdJ_G8CukNd%(b*S*stLSq5!hMH8OD~qXc-BhNoA2^-N#5=iGWpXZ>+!89&|2Pqah{3+({fkDi_My3gS+ zWdSmaaw-m1*wRHZdqw0PewlN!vgX@p>&M7|&cd6^*%^y5>CKw=|MmTC@^@FdKL3rcb)P?wVmVW>Fq5vx*|X6wZ|1K$IU^N6;oSvIT-DUd z0Ghn7|O|FF_UG)XF#%Z-;9pWtXtUFjINq@Z& z2WFO_X;0dRYXexV4!}{Z&T>Ui>P(FS&-cJ24TN|helidjSW?cObjYdc&0M**8Wjqi z7^taW`YPr?BeRnuqFf_kXGhMh#sKX>(t+CFthL)UI%HwRVEg}v={xTK%x*Z~U=O$R z^Bs2k>URI_<=Y?GdadCj%TExYzvKVum!D|*!ue)TrFX;8;EPol=+hm2EkhTqcM}Om zxJJCFcU0Ft4ZHxg(m;Fr11YfY%Rnoe71}c9`UKZpDdeCd-y# z+J#4QMjAc~_^z(ZQG5S7SX>335W*Lq0_M35|7824~x{~GE{ z`>#lSt=cu@1O+Z&Hi4(6YobXAFgJBJMCbM5hMilBA@Q`X_Hm?7L6QsL#hSzv22zf& z(Ts;tnk1$SiEazTQPK(k0Qv8QG04vkBc072)u!MrTum&kf=Z1XVzkCo$T26*wmO0m zB7lPJ163$9RJw+QVO!jwso7S$mUS!5S=5R^L>Pr+nRH!1DQ@4sPx<9m(6w}0;b0lMdWM^kWq57JA;yL1{%AeO6cj|K0%H8z(@nxVGL zLI~KGT2sl@*yCT0Q(W}lWTBfhI*^LG>!t>b zI5?;Qc`5cca&()mz@K0LyXq{3ZX83ZBI46aw#BGJSwYHWJM8uWTL4$-l+9mE8# zbW>bZNN+Y-?FTl@f~Z}Hhn%cKE!OMhGMJqc;doItG`bu#Ng7WC#Laxk>h=V-9Z!?> zBVzp)l_>^2I%ooN3g&$vv72ysD_-2@m&mzDvTDdNucJr-*4y-Ky_Jgcl@^vr%yeOp z)M;euy8#C}5FYybnpMc&7H(hlktN%o+dqMP5c!9;QUiZ~<@4yyZQ{|NEWYw|lRfjm z$OdPMiCMBw)zrfWQ;KE+3pjL$gM|Z+wby3{+tgIRh!}%(z$W=C4?t?32AdAjXSQfB zP=JWVfR7gmz5-?{6X~@yPe&n+A|VRMs)`7PhfxP0Ugo*pwk!J}oRxnw@}?{+S-=)* zCRBUS?j4X;35O4LHuF}yyDfLip~)PG?{WUZIQdc$x*h1R27HduvI3;W;zGndbQNsP z_@7wKUEFZB;cN)3X0V&H2~P-5W%SFWTHOrkUHtNtzhuY)OUpdSseYYy5va*z$Gxrq zzX(~M5D^7)?~cC?>M0y+@U?-26gp{uIz$X8R2?#K{MwW}fzps(@KRQ-e`9aNrMUi2 z=Y8j#^F!_bPdo1T^9J_u@4j^ZkMBNt`}ALa{d3cUP5U@ANZWG$rP7sSmmBd3RMRxb zd8J{@n~)=md3`}?>xxqR>R4$x%GcOJq&pA^c{1P#QDL?W0XRCiz96;9TF{qYUj+%Y z2FU=KEd%2iuw@mq3P=`Ye;)?4k6UQPyKz)Az;~8oV0oE0)KaA<)_;ZK8~nBq!c6=C z56UALUJqc-Fxg)NoO2SSd&O@OKrKKG3Sm`6-GuCtv=%;h0b++bXW}9Sr<)_^yy zDfTZ}dhAE0h*RVJdYUWgk?=uxQNcm+7e=@uL>*bLr=zsU6qhGotE45D1$3e;0BL}% znqSv!7SK6*?n5B^hA2S#miSqt?O7nYA!mA_+bZxOguDO6dtZ3>i+BJ1J6GR+>CTM? zmig|+9j^1)yC1rBdUC}E7VHkpLpg>Gm1;7lIxHp}5W$B#J&euAuGu^4bCGmztrrv; z0W@~Y1(O`66@dT^sL<(?lJ{J97lb=(T-X98#5tD4utgFQ;#0YsX(kPZKW_A-0 zR`AnjB_OI*jbIJlVge@kzYfzd#+U{iqp*;Y@QH~C3vd?IKz#*K7YFI*AWB%t&)Vkf z!ETZWMAr5Y{20;poQ|0QmAW%hjv2hxJ#Fp+UMF7m~Gu#`fBg%l@eg`r(f0Hi#d;$Mym z9ov9>qzB0748oQX$QOe610mH5r^Y2O`GPY|lk>xBwF;6QScd9OM=tzH&=56Hmo3HSmakd5|1v~YG7b(KKXU9&5QgELI}msv%lAeI|uS*EU6=ckOrQEm+-1PSoH;t}EkBtA3DTylLU z$b#~Zf|SKKL=#g86!u1?*8=#lAi3=UKO{yaMxuNJE%22t!L+JyR5s5nY7a(kqc1SxFh^e;`?=SPXsN^rOtum2%A*S%QY_bZV={+ZwH?I{*!l4|LMJVA8$V2K`_%9aJpH);4d;a{hTfzbY_r$m-R;*21abo6^xw?LhMf!*Ot21n^Q} zprbhISAD_hZo?xk%UV49`ub1$E|WpA{*X z25~<_u%0~lUt*whFKh$wy+ZF&87l*t%7XA>&siDJy^sho!YJN~DT8Z}cIbkTFSovY z2`t}fkTg#Ni6TUJA0ZE$ZDBOXvO$nqy^{!;eXT)88v>}!Vsvv>$bef`T|Yd{;FjVu z5o0op`mQ%18abpDac4((>ddYO)%SI-Z65gbwMJ?tqEB!{Ej`?tf(%2&-*+{P}PuEMw9(9I5ZGzeu zopM5nOj_YjA5CXUrDGzgVB4tfBb^Zb9K|Qby=H>WzucA~gTbH=0?$gu)DgA{sn6KJ zAW5)Aj<%6a5wy^csL)#w}f)Aod2R^Wf{m^HX6_7 zZ=Up0heAGkBb;30iuDCZaQK)sV0;x^ypx`Iga=0o7N!h&2MB6yZ9V%>tfv0Ji;*|K z_{PmQT7UWY>lb%^xN~%Sq2YU`eBjZRCYO2mg+sTS-fr3_z#{_1aW%?VK3JyW7P{Bw zGR&13sh{jv&b2`fKC{XjC#|rNqZ5ieCR3$3E3q)wifVjU7@4*B};eRg%s#V_&zT7>cUUCI9EMOc^^c|TM zD+V{h7lhii-wuZlc7Eu^(aV=r(CslJ*F4QI!mpD5EsV+37eDvd$O{lrz8NbTat`SN z`<;V7iB=~#=AeYt^{zi^yU$%2=)dlxgb)a+lHK9Sf+#8s)oUFjo*;(F@R)dVrY8zf z=w6#-hwT4Kb;f!C*q6dvKfgV4`zzZ=w*P8}Yhd5|?oYOD)aVOC>7l(xBW%d~E0h#> z<6?2wBz`VP4qh0^0n)TI(X<7Ux^rF^NI~EPNw$gzsfZ=rT>Ec|C<-FBy$reKY9^#^ zE%v`wnT(u*Oa#O~!61eW3TFUN9&Y77bH*0PX;a(`R|HGEz!Bj?Av{^mffQuR1%rlK zIY|v8CjeLvEvFLAu)x@%|2hBJcTVSORu%$;dCMgQ9TWmUHK7XFCuZGxnPEXQ0$#8B zjbtqlhOCiw4*JyrlDy)RqiGrt8)zB_q9f77d&nOpkEQPz(s3FOcLVm(nG~C;fu8ru zsS`xcNt-mNUh^X1_ciN5OrJmVX{)&2zu=np??qdjt*xzZ?5jQUw+-*c`qy6X4{m<< z*>9};tMhh1NY~pO8c7BwqBD^3dtz{#Usp+6MrR9QCbK$h@1Ou*$%@t=EEd%x;0yrw zRxBpmuY&h$aRWJ#GqTw^v=;7N>uL4G!%TJ;B%Nr3U*Cg5KwKKE_jQB$eM7CpQxj*Q zW43>-f|^PJ++w0)BATkOF-OYRAa`O$0q8guC-4MG1z2rUKVv z#@q1lxQ_zm2XYY}&eYf9aY)mE^)(;mG)qS%DUIxJ^dv!C8i}50x3fB7vDcjZMA=um~dA5thkUK@nxM0=$Aq?#v~>(ia|EWELi3H-|~uuPYd6c0v}e zKa?@c4@;7WMZn{pZmyl1J9T%drVg9fLYPzo(OknF^ zeOE?W zq`iOMd})u|Bscn^8~>vA2ftX43^j`-xP1WY4klffm<5J>!XAO}_)}-2)w}&tc7Hq6 zH!Q3QY;Nxe93N0K61nQF%QIuwshM74)NWlB+r2L^!IXV{9gvHPkM9(ZO_j=JiyR0+ zh;b_R9Js%7>g>2weQl5|Erx3AjdV5w#!hw!I-N~}^4{se|saD(oT@9*Ed^+wM)#ES&cDCVf%oSo^_-cxf}KtSrQnzP*_ z7KWbxmsTZ-3*7Br+N1w#M;TAIg%_v zbG2eXM?tW!^|_Vlj+@r8SVTSz!Nuy3zTwb^E(|6QkDm2r3PsqkZ#QfA-Iw{=u99i)d{rVLUe4skz9zNFx}uq%I=l2I0Wn| z2r5|jz#`}d+#hl?*~sq9uNk@B5FF&5TSkUStpxFCx zkMBDK*-ziEvY*v;P}6JgrQnL{|DgIzRw9YR&+aN2DY zr5qq7lai<2yCxIiGhYY=5h3Wamz^wJlZms0E8!!@3P=oN!U$?lL4i%Yl=2?Yc9?3Prd<2G?Xb&5I3CVl^v5 z2!z&Nc1FRUhhEE~43BG0yk+unA} zwf}a*$A7B{?dbaWe;oRQp?%`r;8w}l)&60RK_d$A2c-vhcL3m@ zL1Kbm=*n6m=X)%8I|g@AbJv?~lcWi^z))N)j3eFhd04;}4Tk#--1?3c`3(1na1VfF z;i`!YMzO!9IwPIUava)pNgs0JCuCJ|>-VD@FLkO|+%$^254gd2^tUBa1c&No=&NTg@7R$VVutjs4G z1belREPITc@4>A{J@QOCsFHaY@dKnvLpHnB>!1-gh(PfqXf=Ahw1)O?%F|sf9b_$F zy=6OX?;uY6y4{ltv2)k%zcp$5&Ct&x&WZNz_CIy}(DA!%mynl{{f!S&%H8E3Z?O6Y zYoBSp|NhTB|J>=~t;*9M|JlM1j{M(0_{Cpc`;+BQ4A1soy*?oSIQ)aJ{Nwc-f9(AZ MQ;fCvzdih40f3OwL;wH) literal 0 HcmV?d00001 diff --git a/playground/public/remote.php/dav/files/playground/sound.m4a b/playground/public/remote.php/dav/files/playground/sound.m4a new file mode 100644 index 0000000000000000000000000000000000000000..0452d62114803f1ca33575ee7ee376314802ca50 GIT binary patch literal 9983 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 literal 0 HcmV?d00001 diff --git a/playground/public/remote.php/dav/files/playground/sound.wav b/playground/public/remote.php/dav/files/playground/sound.wav new file mode 100644 index 0000000000000000000000000000000000000000..991589f8d08081db563f3a8aca6976cbccc860ca GIT binary patch literal 13308 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 LC&P37YSI4zwMi%)DVWLve0N(P{ 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 K179zoN&f{G;8r96 literal 0 HcmV?d00001