From 1a6bac6dd9031ff88da805a9da82452e7d770971 Mon Sep 17 00:00:00 2001 From: Matt Bierner Date: Wed, 18 Mar 2020 15:32:34 -0700 Subject: [PATCH] Add custom editor example extensions Adds an example extension for custom editors. This example extension shows two custom editors: one for text and one for binary files --- custom-editor-sample/.vscode/launch.json | 18 + custom-editor-sample/.vscode/settings.json | 3 + custom-editor-sample/.vscode/tasks.json | 20 + custom-editor-sample/README.md | 23 + .../exampleFiles/example.cscratch | 14 + .../exampleFiles/example.pawDraw | Bin 0 -> 10199 bytes custom-editor-sample/media/catScratch.css | 69 + custom-editor-sample/media/catScratch.js | 97 + custom-editor-sample/media/paw-color.svg | 21 + custom-editor-sample/media/paw-outline.svg | 21 + custom-editor-sample/media/pawDraw.css | 79 + custom-editor-sample/media/pawDraw.js | 222 ++ custom-editor-sample/media/sand-dark.jpg | Bin 0 -> 94822 bytes custom-editor-sample/media/sand.jpg | Bin 0 -> 84773 bytes custom-editor-sample/package-lock.json | 323 +++ custom-editor-sample/package.json | 57 + custom-editor-sample/src/catScratchEditor.ts | 199 ++ custom-editor-sample/src/extension.ts | 9 + custom-editor-sample/src/pawDrawEditor.ts | 305 +++ custom-editor-sample/src/util.ts | 8 + custom-editor-sample/src/vscode.proposed.d.ts | 2092 +++++++++++++++++ custom-editor-sample/tsconfig.json | 11 + custom-editor-sample/tslint.json | 6 + webview-sample/media/sand.jpg | Bin 0 -> 84773 bytes 24 files changed, 3597 insertions(+) create mode 100644 custom-editor-sample/.vscode/launch.json create mode 100644 custom-editor-sample/.vscode/settings.json create mode 100644 custom-editor-sample/.vscode/tasks.json create mode 100644 custom-editor-sample/README.md create mode 100644 custom-editor-sample/exampleFiles/example.cscratch create mode 100644 custom-editor-sample/exampleFiles/example.pawDraw create mode 100644 custom-editor-sample/media/catScratch.css create mode 100644 custom-editor-sample/media/catScratch.js create mode 100644 custom-editor-sample/media/paw-color.svg create mode 100644 custom-editor-sample/media/paw-outline.svg create mode 100644 custom-editor-sample/media/pawDraw.css create mode 100644 custom-editor-sample/media/pawDraw.js create mode 100644 custom-editor-sample/media/sand-dark.jpg create mode 100644 custom-editor-sample/media/sand.jpg create mode 100644 custom-editor-sample/package-lock.json create mode 100644 custom-editor-sample/package.json create mode 100644 custom-editor-sample/src/catScratchEditor.ts create mode 100644 custom-editor-sample/src/extension.ts create mode 100644 custom-editor-sample/src/pawDrawEditor.ts create mode 100644 custom-editor-sample/src/util.ts create mode 100644 custom-editor-sample/src/vscode.proposed.d.ts create mode 100644 custom-editor-sample/tsconfig.json create mode 100644 custom-editor-sample/tslint.json create mode 100644 webview-sample/media/sand.jpg diff --git a/custom-editor-sample/.vscode/launch.json b/custom-editor-sample/.vscode/launch.json new file mode 100644 index 00000000..461f3da0 --- /dev/null +++ b/custom-editor-sample/.vscode/launch.json @@ -0,0 +1,18 @@ +// A launch configuration that compiles the extension and then opens it inside a new window +// Use IntelliSense to learn about possible attributes. +// Hover to view descriptions of existing attributes. +// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 +{ + "version": "0.2.0", + "configurations": [ + { + "name": "Run Extension", + "type": "extensionHost", + "request": "launch", + "runtimeExecutable": "${execPath}", + "args": ["--extensionDevelopmentPath=${workspaceRoot}"], + "outFiles": ["${workspaceFolder}/out/**/*.js"], + "preLaunchTask": "npm: watch" + } + ] +} diff --git a/custom-editor-sample/.vscode/settings.json b/custom-editor-sample/.vscode/settings.json new file mode 100644 index 00000000..8d047dad --- /dev/null +++ b/custom-editor-sample/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "editor.insertSpaces": false +} \ No newline at end of file diff --git a/custom-editor-sample/.vscode/tasks.json b/custom-editor-sample/.vscode/tasks.json new file mode 100644 index 00000000..3b17e53b --- /dev/null +++ b/custom-editor-sample/.vscode/tasks.json @@ -0,0 +1,20 @@ +// See https://go.microsoft.com/fwlink/?LinkId=733558 +// for the documentation about the tasks.json format +{ + "version": "2.0.0", + "tasks": [ + { + "type": "npm", + "script": "watch", + "problemMatcher": "$tsc-watch", + "isBackground": true, + "presentation": { + "reveal": "never" + }, + "group": { + "kind": "build", + "isDefault": true + } + } + ] +} diff --git a/custom-editor-sample/README.md b/custom-editor-sample/README.md new file mode 100644 index 00000000..36958e90 --- /dev/null +++ b/custom-editor-sample/README.md @@ -0,0 +1,23 @@ +# Cat Customs - Custom Editor API Samples + +Demonstrates VS Code's [custom editor API](TODO) using two custom editors: + +- Cat Scratch — A text based custom editor for `.cscratch` files (which are just json files) +- Paw Draw - A binary custom editor for `.pawdraw` files (which are just jpeg files with a different file extension) + +## VS Code API + +### `vscode` module + +- [`window.registerCustomEditorProvider`](https://code.visualstudio.com/api/references/vscode-api#window.registerCustomEditorProvider) +- [`CustomTextEditor`](https://code.visualstudio.com/api/references/vscode-api#CustomTextEditor) +- [`CustomEditor`](https://code.visualstudio.com/api/references/vscode-api#CustomEditor) + +## Running the example + +- Open this example in VS Code 1.44+ +- `npm install` +- `npm run watch` or `npm run compile` +- `F5` to start debugging + +Open the example files from the `exampleFiles` directory. \ No newline at end of file diff --git a/custom-editor-sample/exampleFiles/example.cscratch b/custom-editor-sample/exampleFiles/example.cscratch new file mode 100644 index 00000000..ac985330 --- /dev/null +++ b/custom-editor-sample/exampleFiles/example.cscratch @@ -0,0 +1,14 @@ +{ + "scratches": [ + { + "id": "8lYOoWqz2rHtPuhvnZ43eMx1mG6WnFrm", + "text": "😸", + "created": 1584577931699 + }, + { + "id": "aZ57bJUEaXZ5wuBAX6NfGuj85Y6iw84N", + "text": "😻", + "created": 1584577933329 + }, + ] +} \ No newline at end of file diff --git a/custom-editor-sample/exampleFiles/example.pawDraw b/custom-editor-sample/exampleFiles/example.pawDraw new file mode 100644 index 0000000000000000000000000000000000000000..941ea9c56fe57dcc14c1c451952245c12ef84458 GIT binary patch literal 10199 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 { + vscode.postMessage({ + type: 'add' + }); + }) + + const errorContainer = document.createElement('div'); + document.body.appendChild(errorContainer); + errorContainer.className = 'error' + errorContainer.style.display = 'none' + + /** + * Render the document in the webview. + */ + function updateContent(/** @type {string} */ text) { + let json; + try { + json = JSON.parse(text); + } catch { + notesContainer.style.display = 'none'; + errorContainer.innerText = 'Error: Document is not valid json'; + errorContainer.style.display = ''; + return; + } + notesContainer.style.display = ''; + errorContainer.style.display = 'none'; + + // Render the scratches + notesContainer.innerHTML = ''; + for (const note of json.scratches || []) { + const element = document.createElement('div'); + element.className = 'note'; + notesContainer.appendChild(element); + + const text = document.createElement('div'); + text.className = 'text'; + const textContent = document.createElement('span'); + textContent.innerText = note.text; + text.appendChild(textContent); + element.appendChild(text); + + const created = document.createElement('div'); + created.className = 'created'; + created.innerText = new Date(note.created).toUTCString(); + element.appendChild(created); + + const deleteButton = document.createElement('button'); + deleteButton.className = 'delete-button'; + deleteButton.addEventListener('click', () => { + vscode.postMessage({ type: 'delete', id: note.id, }); + }); + element.appendChild(deleteButton); + } + + notesContainer.appendChild(addButtonContainer); + } + + // Handle messages sent from the extension to the webview + window.addEventListener('message', event => { + const message = event.data; // The json data that the extension sent + switch (message.type) { + case 'update': + const text = message.text; + + // Update our webview's content + updateContent(text); + + // Then persist state information. + // This state is returned in the call to `vscode.getState` below when a webview is reloaded. + vscode.setState({ text }); + + return; + } + }); + + // Webviews are normally torn down when not visible and re-created when they become visible again. + // State lets us save information across these re-loads + const state = vscode.getState(); + if (state) { + updateContent(state.text); + } +}()); \ No newline at end of file diff --git a/custom-editor-sample/media/paw-color.svg b/custom-editor-sample/media/paw-color.svg new file mode 100644 index 00000000..b358cca2 --- /dev/null +++ b/custom-editor-sample/media/paw-color.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + diff --git a/custom-editor-sample/media/paw-outline.svg b/custom-editor-sample/media/paw-outline.svg new file mode 100644 index 00000000..0227ff54 --- /dev/null +++ b/custom-editor-sample/media/paw-outline.svg @@ -0,0 +1,21 @@ + + + + + + + + diff --git a/custom-editor-sample/media/pawDraw.css b/custom-editor-sample/media/pawDraw.css new file mode 100644 index 00000000..faedcd24 --- /dev/null +++ b/custom-editor-sample/media/pawDraw.css @@ -0,0 +1,79 @@ +html, body { + height: 100%; +} + +.drawing-canvas { + width: 100%; + height: 100%; + flex: 1; + display: flex; + justify-content: center; + align-items: center; + background-repeat: repeat; + flex-direction: column; +} + +.drawing-controls { + position: fixed; + bottom: 0; + left: 0; + width: 100%; + display: flex; + justify-content: center; +} + +.drawing-controls button { + position: relative; + width: 100px; + height: 100px; + background: none; + border: none; + transform: translateY(30%); + transition: transform 0.1s linear; + outline: none; +} + +.drawing-controls button.active, +.drawing-controls button:hover { + transform: translateY(10%); +} + +.drawing-controls button:before, +.drawing-controls button:after { + display: block; + content: ''; + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; +} + +.drawing-controls button:before { + -webkit-mask: url("./paw-color.svg") no-repeat 50% 50%; +} + +.drawing-controls button:after { + background-color: #111; + -webkit-mask: url("./paw-outline.svg") no-repeat 50% 50%; +} + +.drawing-controls button.black:before { + background-color: #333; +} + +.drawing-controls button.white:before { + background-color: white; +} + +.drawing-controls button.red:before { + background-color: red; +} + +.drawing-controls button.green:before { + background-color: green; +} + +.drawing-controls button.blue:before { + background-color: blue; +} \ No newline at end of file diff --git a/custom-editor-sample/media/pawDraw.js b/custom-editor-sample/media/pawDraw.js new file mode 100644 index 00000000..57ca7f9b --- /dev/null +++ b/custom-editor-sample/media/pawDraw.js @@ -0,0 +1,222 @@ +// @ts-check + +// This script is run within the webview itself +(function () { + // @ts-ignore + const vscode = acquireVsCodeApi(); + + /** + * A drawn line. + */ + class Stroke { + constructor(/** @type {string} */ color, /** @type {Array<[number, number]> | undefined} */ stroke) { + this.color = color; + /** @type {Array<[number, number]>} */ + this.stroke = stroke || []; + } + + addPoint(/** @type {number} */ x, /** @type {number} */ y) { + this.stroke.push([x, y]) + } + } + + /** + * @param {Uint8Array} initialContent + * @return {Promise} + */ + async function loadImageFromData(initialContent) { + const blob = new Blob([initialContent], { 'type': 'image/png' }); + const url = URL.createObjectURL(blob); + try { + const img = document.createElement('img'); + img.crossOrigin = 'anonymous'; + img.src = url; + await new Promise((resolve, reject) => { + img.onload = resolve; + img.onerror = reject; + }); + return img; + } finally { + URL.revokeObjectURL(url); + } + } + + class Editor { + constructor( /** @type {HTMLElement} */ parent) { + this.ready = false; + + this.drawingColor = 'black'; + + /** @type {Array} */ + this.strokes = []; + + /** @type {Stroke | undefined} */ + this.currentStroke = undefined; + + this._initElements(parent); + } + + addPoint(/** @type {number} */ x, /** @type {number} */ y) { + if (this.currentStroke) { + this.currentStroke.addPoint(x, y) + } + } + + beginStoke(/** @type {string} */ color) { + this.currentStroke = new Stroke(color); + this.strokes.push(this.currentStroke); + } + + endStroke() { + const previous = this.currentStroke; + this.currentStroke = undefined; + return previous; + } + + setStrokes(/** @type {Array} */ strokes) { + this.strokes = strokes; + this._redraw(); + } + + _initElements(/** @type {HTMLElement} */ parent) { + const colorButtons = /** @type {NodeListOf} */ (document.querySelectorAll('.drawing-controls button')); + for (const colorButton of colorButtons) { + colorButton.addEventListener('click', e => { + e.stopPropagation(); + colorButtons.forEach(button => button.classList.remove('active')); + colorButton.classList.add('active'); + this.drawingColor = colorButton.dataset['color']; + }); + } + + this.wrapper = document.createElement('div'); + this.wrapper.style.position = 'relative'; + parent.append(this.wrapper); + + this.initialCanvas = document.createElement('canvas'); + this.initialCtx = this.initialCanvas.getContext('2d'); + this.wrapper.append(this.initialCanvas); + + this.drawingCanvas = document.createElement('canvas'); + this.drawingCanvas.style.position = 'absolute'; + this.drawingCanvas.style.top = '0'; + this.drawingCanvas.style.left = '0'; + this.drawingCtx = this.drawingCanvas.getContext('2d'); + this.wrapper.append(this.drawingCanvas); + + let isDrawing = false + + parent.addEventListener('mousedown', () => { + if (!this.ready) { + return; + } + + this.beginStoke(this.drawingColor); + this.drawingCtx.strokeStyle = this.drawingColor; + + isDrawing = true; + document.body.classList.add('isDrawing'); + this.drawingCtx.beginPath(); + }); + + document.body.addEventListener('mouseup', async () => { + if (!isDrawing || !this.ready) { + return; + } + + isDrawing = false; + document.body.classList.remove('isDrawing'); + this.drawingCtx.closePath(); + + const stroke = this.endStroke(); + + vscode.postMessage({ + type: 'stroke', + color: this.drawingColor, + stroke: stroke.stroke, + }); + }); + + parent.addEventListener('mousemove', e => { + if (!isDrawing || !this.ready) { + return; + } + const rect = this.wrapper.getBoundingClientRect(); + const x = e.clientX - rect.left; + const y = e.clientY - rect.top; + this.drawingCtx.lineTo(x, y); + this.drawingCtx.stroke(); + this.addPoint(x, y); + }); + } + + _redraw() { + this.drawingCtx.clearRect(0, 0, this.drawingCanvas.width, this.drawingCanvas.height); + for (const stroke of this.strokes) { + this.drawingCtx.strokeStyle = stroke.color; + this.drawingCtx.beginPath(); + for (const [x, y] of stroke.stroke) { + this.drawingCtx.lineTo(x, y); + } + this.drawingCtx.stroke(); + this.drawingCtx.closePath(); + } + } + + setInitialImage(/** @type {HTMLImageElement} */ img) { + this.initialCanvas.width = this.drawingCanvas.width = img.naturalWidth; + this.initialCanvas.height = this.drawingCanvas.height = img.naturalHeight; + this.initialCtx.drawImage(img, 0, 0); + this.ready = true; + this._redraw(); + } + + /** @return {Promise} */ + async getImageData() { + const outCanvas = document.createElement('canvas'); + outCanvas.width = this.drawingCanvas.width; + outCanvas.height = this.drawingCanvas.height; + + const outCtx = outCanvas.getContext('2d'); + outCtx.drawImage(this.initialCanvas, 0, 0); + outCtx.drawImage(this.drawingCanvas, 0, 0); + + const blob = await new Promise(resolve => { + outCanvas.toBlob(resolve, 'image/jpeg') + }); + + return new Uint8Array(await blob.arrayBuffer()); + } + } + + const editor = new Editor(document.querySelector('.drawing-canvas')); + + // Handle messages from the extension + window.addEventListener('message', async e => { + const { type, body, requestId } = e.data; + switch (type) { + case 'init': + // Load the initial image into the canvas. + const initialContent = new Uint8Array(body.value.data); + const img = await loadImageFromData(initialContent); + editor.setInitialImage(img); + return; + + case 'update': + // Set the drawing strokes. + editor.setStrokes(body.edits.map(edit => new Stroke(edit.color, edit.stroke))) + return; + + case 'getFileData': + // Get the image data for the canvas and post it back to the extension. + editor.getImageData().then(data => { + vscode.postMessage({ type: 'response', requestId, body: data }); + }); + return; + } + }); + + // Signal to VS Code that the webview is initilized. + vscode.postMessage({ type: 'ready' }); +}()); + diff --git a/custom-editor-sample/media/sand-dark.jpg b/custom-editor-sample/media/sand-dark.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6d524a1f2e3a9e179e069e5e2677e5b621484d48 GIT binary patch literal 94822 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Ôz}EQR_H$9 z?iE_K9*m5ppu-;~FBnTkW{xU|CihdL??y4}Gt6N*Uw*ty;8>fB=NO#^uK*~$ko`E2 zt+TSr9IoMuyeaG40*Ryr!waK#MoHJYFSPfE?In!Ja}IvqTmGl`fK>W8wH+Q9T6C38 z=2Gw9+o*kQA;5+D1X9E1ZCe|-#arNtMpWOZnE|W`fDq4|`33C~GLWlMTSqSer`g=J z;K>{bDavyw9kkI?iZ(WA3c;n30bwCZAIV$#MkKXous{LDl>He;X*x5 zZgB)hU0U&%&@9|n&h~zDA5Ph#=D(;i!)4#KKy@SC_^E4(Ij?_DePp_Du%9YUjtuWQ zWqMG(dOEcqAb+YInq;S3%jIwzUb*PXbbwzEXC*cU8CqWUR(@?3%nP6FE=yH4iP!mr zxC+H4=ORdI9p`}o*z%y9DgJUynLCfD`ZwG}bKs3#f8bn4HoKU3T&(y|)kZdesDo1^ z!>i+ylZ1{>=5|HL`}jW0vpX+xUo?iEoVl3fALA;YOZcYyz%Wf$7V& zd9fmZxqn13;22q>d8-yD#4Q;)u}}O(!b*ViAR@Cjz*aW-D?6>X!Tnf-k^Psbd1zTi z2T2F(Ft(B@as$62PvzWc@9f(}q#ZRME%r3K7T|qEjqLd`=i8Zg1-MNO=dkL;g~41c zLL;;Xxy7MeD zX2JK1HYR{=w6O4@KP)ZVl<6yibg zz@YcH4UG2ZdtmgOd*HJ~C* z-V#Uc+%IPJ5xqMpD^DNsYRlcV#WKe6+aL7(R6{j$H}Kwf=c?zsvywAI%B_3PoV}dm zSx0|pwxW9P?X$hwhi_Lh5@!3=5q^LvD75^T-Ltv+C>}{8!~}DH#`v)h1n0K%<~RAb z54#W$G98^x^vWpCoKXyTd0xt#2-PwE%KWn!*j3!O)A{b?+lF3SgiL_3`^1Q6jLXd+ zp7B;|sF}P9Kbz|AFKyPy8CzJ@JmYI}u1DHMcaV0~@`rr))_OHEM#EM2k)n$AT>4wF z1Zg8y|s^e_|M^C`@uOOs^br#-$ zYz-%E)j#m&R3IlOO;)-Axl(pd`|gcn`sdcDqa+Z|k_nc6NcI?i<-V~xG4JC z+U;rW4u>ZXm{mr}FS6ByF#Le_m{E};@8E*&XM`d3$6Ih90w#_HEZ^IyvI9@yyi|53 zme_S0eeYuD!P8lc;;iD&H!#YT@nyzhsDfLhL%(d7m$Jr- z$%H1^4VFx;d;!WqcnuQb_{e4(S>i9@fB^cHp(%b{oqpgsSLRfDM8s)Y5jP#5mgw*T z=d}AKH;hmv>S|8Zx@~B3Dxh#Z7NbRl3m>(kJ;icNaEA(M`AfIXF zzAIq%(D}zmTLqKtUDC3d$B$;Knxs(>PTHrRjfwsAO1+4s|kdw2T$Roq?GY*{*_G5 z{|O4xeWHd2HGi#USW9IjVu;cGV`2G!)IlbuU!O<6HC^MUx7I-;fQ8$Q-{0^h#HC4X zVUY)GlbdeT-_y9Ors8{ASv#a9!aK8amhMO*PyrFgBCid2>yB?D)D}a6p7^{BbfbI* zSG(F8?{^6)cIDynBTp*Alox7;1n2!KQ=D~{0UUssAn)C|d1x2#L9Lic(J<4m_J1E^ zA*d7$Vd0(%<$xb#xt)=%y#idhGl`Hi*|A<99Qj(dgg@AQtRK z9ML<&+!R@N!ALm9ot3n)i2p%Qf|4~~Dw9Hp44KR3qm8$@NCAZ~C#Nc{I-2UjeIfI% ztE5xE?9xn257GBTK<-El03HdKdn+crqAEv;QQ#%e%cX1rb zZ7i=2Jb<~=+@;3A2e)S88$dR4-qzFEeO+5{c-%n34#hYgAaM@JAA>}z+Z%9M zJ*0sT_d?OE5D=@;XT-rn^v8Yr>L%MBj>MgHe8Ok>@QaT5iOR=J-lp$G%jv+H z)R>d0e4M`cJSk~rPk`@#0s=D6Nf=sPO6z@{pdiU1jlS7GcKKO+h7W^Q1{rHMb+B7n z;X$SugEfiJaBw-bc2L!K4C*%nP{XQ9&!11L*%fVh&=ojC{CehQbG;XVT7Oq9)cUG3 z`miY*YPQHMi-~3h2duoat5o`D@unfBVZTGYpY0VMwwaSB+>P@?>)xs~NX1 zyfWuY6Gd0`&9^+SLfdGNh_k|DI&N*}+Pmp;bwsb9uh{v4k!?AoTMcVno&F$Pd7Emp z9HY2Kj{`%4w+1@A&Z_lmddSX)?qYmv7w9qnX1lXKw_;s?;i4$#U3Kc6QG4#uR?Wg{ zT*4jMufy#f!5hhO);STi!k}==TgsO|9c!=GrV+x7p4<`9m)D#{>k88lc^ zjGGQOUy8toeO+gIlZnc$8n%w96OW-ZV58mSfmc(JqaJ7VI5;DM_wQd@4Zt%d20LC) zoZA5x!XEnLicaqZ{R@i-4hVT?S4Mw~?w#v}yAK{k*4(I&8(wLoA3xQ{7z;49-I)f2 z67wUCB3c1RKA}}^v0Yhx1@|Ye$d)*jp(=HU`%7BDmvi=g-mFPv&v{Di-zW|5+?jys zvz;C}bZQlDi* z6c`Y{JKwfuumbF2PQlqMDDli!<&Bk zhOtfOea{dtUK)I`D)%U$+Q&@T5%=vKz66Sw42?UkjM~u%?5vaFGyA_iM%C(jI1E+i zT@4c9!Cf8sX8ND$iAHRh8vNt~WsUVYe4yJeK?3*n3qk4OBK2&S?&<79sW13Ecm~(k zySU)sYne;~9{h?S?HkN%l=|K8KJpa3gO=nV=2Y*?@9HQa$Y+fzYC!H^`H?6G9U!U(b@1G~6f_Hk1J;n1N>gdGSm4fWG5VU3$ zK765XgHhTMPC}S3=FJwIbqp>Fk&d5Nc%=lkmfSGoqi$X3cMeIM(+)pBX0%SuG03>I zcg871RTJxkgNrXe#fH6)f#9%|@;K^;Hys3wS%CqNvVCFgH+GC|&Jm|B{ghmQL76TO z8L(bBnH7A6uMboOXXSiLsa5k`f`AU5!Mi^$bghb4-s^||L;I(e+|y0*STKo{|9`DC z4zZN_>NN#_VqKsQIS)zPZZNFfUmSYX%A~sz`*~@NrQn}yazFd@^66-iDgPg6p1;#V zwNAyQhZuYk2?I%)xSSS8E-oqa+EdlWfJx;7TJ~MLi}$#=y3hCIE1NAu0x5`YzU_G>_WdhU6hC(O?oTPx ztpdQ`QjVh_?uF}ev1U^piAV%ozJaTjeG1c*`ieA040>ZN=n2=sZfv)8(9se&NTH;T_K&$5U&U{JW z$c6TBPS?AXjh4SMdtuJFmJ!Vxw!3v0Z{2)25M~QNgd`NjuKo&a7!ohpD?DFxTr|(J zq%{LJUYywXI`p@z^}rF>*8<{;>HcXF-ST6k^57!g7JwJ}trJggwo(h(c#&Q4)#Rl{ zH`V7^`7q(YbW@{gI0m3?ySQ-S3dmmFb82y3J6Bj9i*`0Owq5^zzk!AfLce7I|ERyj zYz$!;Qo_!K4X#+`x>G5>;aLe6No&XhAiM3$al`*2XaX#n1{eh&8y@3Ts+4kAHy_I7xaiWQJsS7@!!M0-Mm`1E+s1LL99v$%(g|?AHZq0De)u zdk-$U*L=G8|du~MRt|%nB=E!>0#`)(#Nbn&6?&IJUcz#_2U>E<1?n}dm!)8y! zUDZl^`CcYMk7oisJFvQ9H7>~nb0MbEh=_!FT6b1bcY0*iobAGY0Wmz4nd)cv(@exf z->=@xtocznNpL5yA?F=iz2yPwZ4K~b!5MT^?K?o9fU(wY=z=?^!3RSM(Z$)N$qhsk z_zM0>Xv8=EKV3O`m=aN{v(o*$JNW{g@ISZ5Hnw#A!Lk$db;D610|W^sejii0;ivIX zzzMtkE0ZNOl(0ZGi}ko|gKikQh+_>JrY?r;N8Cq7Y968_`VnJQgIJdjMz2|5f(K}$ z0PxE*-Pc=6^bx|Ie4B#pADg5lEJ5!**n;ccIokE~xSwwO>%jtD|1eD9kCF>wKABt8 zaARlX4|i17D)_^JjlO=bJlX~0l)@Ez?HFWbMpTQ%Anh(K@@Uo%^x>W@EdG-wnyjewIqP0 zx~Y&CWLCN7)WbGW5mV91QD%mvbTqtQmYMx$Vp~T{9UyN8koNk~*w`n&`~ilBKKL!= z%lzC85RlkY`-8JM|5}h)l-t1Gi2GXY-rXh|5y?Kie2bbs$Qo>@Xti}k}+7ldoB@cqq0b|D54w^R2^d61@= zJVTB_>hvy7k59cVa!VJiV$z-~^Vy+RJ2cBsmQ4u>=8gJq34Yn%_wn)Q{kE=^hDUze z#|FBd27gkm*ENAc7i6LjcKN$=1p+-mkU@`Hek7ek!s?Tyg6$3W9$hbi^M=$OAsCmB zx?m~ASOg177k!|N37iW%7tlOl-q^T|FmXbikGC10797gV@3;48ZJ^P zov>r{9{lk6Za|qZGEMeFCkbfAs&ZK9Lv{9p*`=yR?O$|^j#YFmsQSScv{NQh>X|!8 zV8DDRfm&0n)wVqwJRT++n*5M|7)-(fVpn@A@Q%TD2EHThiW}`u6CShq0C0Xs>YX#M zQbBMn3PR^%-oZV3n!r(mJXZB9*|&9H^-2iPXwuK)$5{H{C+PMmw?jIms`zf~1c-Q)s6B=DWB)uW$ac3V+%i4*KE(o*hwgwD z9QauAUjPN4A;E|p%4fYR)Y{@hoG|BzXR6;4w3(r9$zK<4LRc=sw+QJ%Or4j^QNU{`OS!9{_>K@D`qaudCmMNgQ?wGQnq? z%qLmkeNf#RM0(p`*QaX)Xh?*9mTNL)?q(FAy!gH%b!Ck&+L=MDTAR*^NUqO)<@}j> zRL3Z)agH+t$kDM)cyAOX(i&z0>|~O>GbFUYz!j=R9hS$e5AL$q{|un;w#3vUSDuGY z?jZ%_hxcdaFSLjxKyZHBPegBj5n4dNyq?`w(61g=gxQZ%o}_NRZ{W4zz^fy&wa)nx zQcDCE5bEe`)KzO0W!9A+XA~gJciLGug48z5FiH$5Zmpe5St=#LH$M#OL0C9gt+VI!g0zI~a5w%{Vcz4KP53VJrREWjn1 z1n8U9dCpoe8kUzw7EEULRh#@%+yF-dWuM+3!aDfYdgY^_JuhAlB1nE>wd<3vT%+Kn zH=}LgrPpbg@WqQXhg$>AQF9u#mQvLSRW3kD>j9=IWo(Vqpm4B*dC0RfXL37yGKz2X z%_pBW$&YTj2+i7mE*Mu;IC~S*D6I9=$G`*4hPQ^&;5}vx=X+Nw|NXBKBBD(Jn;|(z zK6#b~l4ny9;FN6pdI41e@+lSerE8~7cvkR(0Uk&%*1}^FTN{N-6H^+vR2rv_M0)tuYZ~vxj`g{&Qg0$74RB5bRaupFq z?$gA8_7q!zc;(JPFPy?6vwtgec1Kt?u2;hrb7_j<2VkI;ebT3A2fFg)sBVucirR_* z(GtiDb#?imxyJXWK*|mVuT6Z@co%R}!#{KA{OJhKyo+gpiIBA3%)T0kHvx>pk9CB~gR@r_h z!a)n9)S0QPbMVzShrPHeED3dW-PJY+SIbmWJpLPUDj^0F!L{=#J9v|Ba!Uh)49hbR zb+C+1{xzVHtlv{ir45BS?Lf6pS~?lOoM|l)%pIj{RvS~X2|jcBp0v3m4M%KOo^#SW z{GrZj1TFa{zSUD7Wso3e-0T{7Y$@WL%TBB0NMgSHrAD#jZb!gfm+T%F;<7}hm_Sck z+`=fqy8@UFC?i%DoW2HU_t@G0a4w&*?a<{aj8mQ3XBw`vw*1erpRSiznhW0YwH&wE zsB(SV|DGP zBQ-+!x(?tmR(0z5wxeNGP0@LKf#&R4z-W@N1T8$ce8vXB??c|Z=XBCo^t|q$L`={& z!hy|l8m;l{Ng&$R8`-lFAp-Q_-U=sK@0Q4L&BCB_x`rQ|=TC^)-2(VA=DWp(dC@2v zZ-(et(=guD;{~~QgK>)q&yx7)apWqv6E(K6_&a$h<(_1zd--xi>cd&Ca|2KFI6XCv zH_aBfK`~dYs^4abr^=Ft=Ywx%!l5J->7EYeH^Q5@Cm#4Z5giwwGsS5$Y+l%9>FDX; zO8_Z32V!zCSZCozeOq88V2Cnk`_eVou4tYK&eI{bf2{@jmibpMdm^_uSpb-GnLdEn zLbI=J#5@d~xxv_(@LZ0o*x&VPe4%)h1!h7}Z3Ss|VanV~`?J*H7Br0k?&)ZdT*n04 z>Sj^*DY?OxO_988{q`jqWR}QmLte->P-^I%I7}%*x~UpO?=)=BEaAvMPW=bGPb*WD zG4I82JLzgZ1Yx?uCA;;8gzDsmHWJTVdBs|s1_dn_Uu6_4OBQ>buDxqU`%i+Z~&U`@G>ErUv1~8hIC%KJ$dx{yL zm1P(ls>%t_@jv_TL{gq(c6R=MnzDiv#kl9Jz3bO@fdOf7tY;H61ORQm!-<8O3m^;|e_7?GruoCA%GFc=g1a6)sVb*TKgcXgSx8Nce`V`NjWg6Y z(qEc=&a_}_7ZMGhDX)@sv?AbC6Py0E=YAHk9wzylWxo*Wv1#IY72B_Igw$#S3paW8 zos&2qAP(+Tfn|7Sfm{;Dao?fxe!Sot!Q>z(j4>^7Q9ic4f!h zLb^a2yut^8GqvggOF4UHSx94v-DPzy9E<$u|{jIyjlA+~>Xn{NOn6@ujMN3lm3`Yz?b3<5i9AP zgCRnPq`by*3)-^`&ky1{2}LW0?;x2tJdg^>h>ITL2%AmQXe_T&!FaAzY6aOS&)>D< zK&fYFv?Co1OTE{hna+U_f={P7RIc;Uq+|>MejK`>y6xW?jO#W7C1j*xf^{wIMexqG zyJn*RKyxV%)wA>RxH`Y-cwhj;4$FEgVPDbM3-@yF8{9u`e-Fo#9<6Qs`n2NBJUx!K zzTkAFY;EWC?$E?BV>&xjx&=D&+Rbj=s=pY`MutGEswb9{T&f?Y4dr=}Qr%9CLr3bx z^RSBE7!MNPNAFJ|h)wG0b-I``7E)>=&(w^&hG1h`B@ZEFGBcFd(BtXuRbH&s$QcC{Z zi2O|vjySt*cxCc^4%yor#+4N0y*Pvo5LDpec&ST6tKM%%>?N8z3)=~*(^#&1BwLYq z@l9kkArE^!2fVmk85_iXj2yI=<+m-&X9YLeoAj8E$Myb)C>;j*DDG~fNx|wN1PI_- z!WKk_Z>al?sH)8AW0Xm|I#wubG!%h&J#;ePwrLA_iw16SFy(e}<-es<)tI=^3`S6z z8DOq`B-QCX=JY+lhaE)GJm^rIV&*u(;oJxq z+@*cvGBjV)RNHTQJyHD;#kAV*(sFY1m2!hO&oqNO9*B|75H8AT&rRQ8X(1dFcwDfu z?n>DE|IrE_tAnDY$d-sWO8dM!8|gaYQ;5i!%C3~mG?P%y6Y7zd=e;Yg0$lK^Oz?kdCG%qbSxIgr#4r{(tz);SqZ1r9nom(TXXiF#mO zr@j1mmH&~QW9QqsraEU-&-U-=YLT|e7!Sw$GD>J7Mj_~eW{@R|S2HLV8Aj~uK+I9;h_X@-*$4=i^ zz8{keJfKI!8ZXRD833x|#L9&6yZwJ=@JU5GX(vNnzUh&#XUNJ|-P}??9cMC`B+umM zp4lg7NLe`NU;q;J?uUH`Lvz@SYL}s0JnD#Z@%G7{@V z7Bn9N(wlMT^GT);W(&}6+!N6h$oF>p_}!KFDfM@hCROF3T>+&G2gE|N>WOYk6WPfA zjVwQDA(vSa1lUSk-1;G*1!W1mKSWEIT32BIJ#-T(=-FKOw8kq|UnIgR^EC6fiEsEK zle0_8aCW%=0+IkG(=ZH$`R3NsnTy&?>zpZC(v?TkZQg)~F2Kr^Q`tpz86?x7F1${j z*$cy`!Gy2}y=rapJ&YhY3%nmeT2r{CJdRLY4u7Jb&VPS~@z~}Fg_Mx@S>E|_6s9i% z@zQciO8Wy%)z~Px;_1xTcbs&;$0f{eHsftO3xT7;o&k9%+Ww z4&<1LX2d~a?nwD_$=dkFw1L;fD0K%En&fkKjfRKFY@|N?N4poJ3mCyTuP) zOEDa(rSyj9abq`Kg0F3%8I3x#Z`g)NGbcmz;nnoN-gK&?a3*KLs2%j#%Pr0mv}DO} zY997${UC-}=BK9U+>^5%i7hb-KR7w@-Mi(;@KoMV4VC0{HyT#k>xp!0TDhg_H6+qS zOGO`*1-i`Mpy9q($M}o*TC=UPX&bq{dTO!nzf;IXoLDs_)ha^q5U-I zSyJ%zON>Ff_Nn_tSILv6!_x8mF9i|^T%6%EDHDG^W5ax{12hu7h%Bg%ZwI5GU`PK7i~>mDpRY+HAn^*7#%XSXiOK>VKL z+;}XQ8|4;kM^tW~xQ75wASLDuLbcJpmC}p%x1vq_+!*(Y_NI;WzA=#jw@Y_?pWG27 z<5@6!o{cE;Zyx~1kSKrab=4Nax=|ur`Z4a>J$@0WmbhBkp*Y<-*1=-|;g*Jt$DRKp zjc6W;>vN0?z=88#Q>}i#cE_QKM`m=er|O>3r)HFCkx1~oE5m)0)Pv1S2WjY6(-$5w zi_|3$Y~6O%Q0CENe9ZB2SC6^Anqvq5E#i?mDP@tH+fl{bog=r%ohm%{vKuCloHZop zOH(|q7~J~FX!pr`I0H3X?P05b&Gzrph!VIS+!wChLDsl9+4bmphlTcgw ze|XJ9L985VUZUDd&WVl)0$a9bps-u#;lr7Qx+=YbdMC7XI>+F11fKraX1y6R2vP~W zJzT?hb)?=B2geJBk~Ruj;P4=4$JkBmkIl9R-5|6RgZ}>5QRY4nJ{zH!Ig{YV_X)1( z+{kx&+bb*I0d57(L@oriS@SqG2}VGjBfe@l0yE9pZt-r!B?yvlnv=0n*ZP}3;ana? z?J#bsBIcsJ^`6pi+;{sb4x&7fR6I(af=ksD8_?vx0A1=4Xqfgq;n1M~$Pnc?t##q9 z?87foNy}xePN004cwM473*Y<+o`iIPeHi+js{a-b z1oFTk6YG1rj_7(YMnYSeSlG&gJvK~cgl1bw^>N;4%`UCbp)CzKsxf2rPJm$eJU%## zIBWF%6`OrM0}#?KJN@keke0#fPxvEpVSFObOmNYE@QlO2I0??($Lb^}I>v=gwbert zob z%u78}AuM^qqwk$zR7r%e`J0<@QkbjMy+@@M;WW{?^-m}xX0T4@h^qDv3Ig9>xVl+U zuTQM?KxwXc`v|2j-~oN$Z{`jS7sx9+Xlvu2(Dhq}0jiy8;hMXxS`*;76X3+3qBrbI zIcjQMl9z`9Jl(V#1F%1gPo5;Y`A-K5Y%8S>(I8K&`2U$Dg1Bh?#{UA=ueY*LGElIu zso@WD?u2_Uc`5^SrXo$2d?VD_DdNCOKTf!4t0{3TXtne5Ol=da5BffQ*<(NzFfPG> znVy>79v9YBZOs6TFXz3Z^8G(M{gt$;zsY8fh;ZTCLd+TOi!V4uyW_hL0D-d$)%#jh zolo()fiy3=^5#~phqjs;10i46xO8%&p6=N9ni@Z@>ua=)=kY(PclCz=FNr-Bb@x}} znAhF8>HAG)QR^$Q);HQ{R|n7UUE^8z2m^y9OQgh~USL`;bzw|?2dUa^X~}1*|IaMvFFEYtugjI79h6%{yig)t)V|?d*_N(`Ax0Hzq#UPuOs0arXlvO$-u=k zyEw7(db}fDJKu3HROFGb~z2Q0J7Lq8N5TxVi_@Q zAKmSH4)+ujHSC@;dYt}=1QVcB&X@h3uJOE_?-N|kr=_kw!};uh9eGrov9QsE0|V^) zKA1F}+WXn&Br$>gNj|Y^#__m(EFr5rOt8|!b+puzX5gw`Y?jH#~*tBS%X_whE%Zl zzOe%iao0iZ@jV?QNk-;XYlIaJK4$~Y_q-ndoKOa_*9VAOl>-h6^iQoFivMZ(Tt$Fk ztH6P(&qlA)waDFJ2ND#hSC{nJxN5L{lH(a`XHQKL=d6|5hYR{SIYD6uD=Ur7-lhTJ z&cDBV%3oT091@?SB~oij4jzguYt#!ra8QLcbxctDm*v9c@8bYa2;E%E{L>#A!J#TE z?%XHnrdAd}5hl{#x29Q^X_*TbI#diVd4Fc`I}C-98<@D|z44C!qm=dD~IH zp0$pKvv1$D9;y1i#={Y~JZaW}^nYG0(kN4F)-O-~(j=6I64l?l8&tZ53oNMfz}CLP z9;njVQ^Q8IeR}%A!U&p{@szT^2+w?x($)LZDnD=V#mQXEE{<(v6{?B*k*eEW=?U=b zz>sSCkuKmBN_x?qKA`=tmIRg#0?fH>z}ugR-}=+axW6#>s{fEOOry5v>7-YK1Qh*0 zEQJ5V2ukdk^-&Z;jg8)rolkl%9S?43boKnjao!(Evzbno%-9Dlk^z_aoH0+L{>zqT zEzBICIIEhsIn%R~D-dbg&Ds7?EmMIZymDXIWM%bcE#YDhu;+DE!a9psfZDN8e0O&6 z<|Q(QAk*~we*7OSP;17-`W=`Hf-7Xj*##Ll*H$7|`Mx+pLe2)mhhtmWmM^7mUHEk+ zM;|%VB1ue_p#sX|HK-4N$w+7<*BeuE z>}2|Vr{s63JxH0Tx6=UMUb!!Y9ZSD>f|mOE`(vUSyf`_-p_(?{ z^AK19ijk6>@LbsJTqslMs5V+IcwGVy*v46v?b!{FSQQpGZ_Nl-W#z+z9`m?T23Us? z&M9h0u%MuATb zmSmV*%J0l&?i3ojdlKPK*8>JPdjZ7h#y5Ky2T0*P0PTdKxNj#f30xD)%Wu?rpZkkD!>#wC&ts6N$z6gS%1^Jg}uYT^%*`dvG9NP#byWj)2p-R(g{33+= zOw|b>Glnwlt(cWY2y)|M@STpo@pY}AlaY_{6g}OS zon29gr3oCnQC0_zg@qD|ny=cfy$g$X=vXAgf$40!FHsPDa9XD-WA?`Pe?J6%B56ebwhW5F4 zlzF~&4l9pL9|7%WH=7S3x|wSO`-IJD{MX$B#_~VhFN&m@HaMkkWjn*glwBv&-(5y< z)(($2OGe^MAA(d@{wYzAY+-tG#OdX)1&M5-rGh!=$58Tr#ArN8d0-;fRKC24gJ?s$ zIa9)j@8LKCRO?c|Y+`8sQ2t?m1c}n7PqpiOiSP{ux&z%cFhN0UirYb^L)7KiPjj<> zFoNTFFWiYkie-e6dl8AH3XRHeT>dYB`X2#DOTE z;=1=xmXB5a7x1gdl^rsSDmYk>XpR78F+(&99Jj2*8<>d-2R>4%*Bhq@0Zdo747OcW z=Y_?6W<5%`xr$oA7zBI*&-hJf1}>#;v82nf-h(zMk}qf`)K^Hg`yN~bXc4wU@x8qX z3s=fn1hAU@x$;3}e-(~Ca#cuQXx+Hn3Z}!cnsqO-PW@XP6GHAteleQT0)I|mMr%yB z8y%BUEVUOjP9)U`CPDlhxGE}>fU;kW3p$~mSu&lyvG8dWb{(&-E*d@#L{)wA5oHpZ z_s>Oa%TK9t&mbe6RSlJP2QMJ=FNGIsV$Oiq!r8S@sNHlRef%0ma1O1Z-d7o6bh`DT zgh^;)55uzLdXT(T7VfRu!qrm`KujJ=l+!&l`elR})L>EOBAZas{tMU@Js1I|VPRe| zODnp?xV<7`_khAOW&WTga*Jk>?aIQ{Z!3{v&xS^%Fd`XJKso>(GQ}feBkvl|?~;Nz z?cqK~Si>;yeoCfxMwTbFr>*kc;o3amhW_-z>7I+QoHB}?bg8&3jZ%vDCz6*xY3fwY zFZuU^G&PayNV7iz(3^65O%uwR!_|>}R3`BTEHUQtnMDB-9u&`+wR^qJw3ZDp6O9-f zhn|a#K~Sv6efhwo0pMl}Y-l;kjsBZo!nw*CO~-^KmEUtXI6-VyHssrDL;3%HthN@x zeoyxV{mLKBp6nfVmK<(uTjl24b~IQ5hozfDURLf57KeDck0D^2i%#Sb8GML2Wt4ql z_mhX#rQrIZq%P9!aji$8J_?N$6`>fdXU1Km=Ldh@hDk%>M7VZo`P1Uup8J-TmtlJb z86U8dHd%nFHjI^sqbf^hvg-q{s#=W`6iY$$G&GS_srk#^9544p0u;8fn9|VW1C~}U zU%|ZHm)8aoi9{XPS;|^~D^Qx-vjtDv4)@0reA{+x2PjLcn_AR4LE%PuONe?Z z7s-$jBsUZyF)2UyED8`W6MK{PRjXR9I>3)C#PhYcoYtQNu@S-#g8VyER@cs|_L_z# zAEorFF5s_=XswpR+n=dM)h)2JQV3Oj-z(v_>&Q%GBSH@fc|C9Y=d&m0&SR^wlfJes z9csS05T2qc?^L)rcuH8b3N)mwpVJUMb4Hnm@13HZZoKU^o>PsT00 zEZAcW#>EjIf4Hiz$|ET%wL2wWr+#h80Xc+2g46L2UJbQ!@HwIW!`>tF@&1Fs0ZCpc zKr1W>d7VD&+HILU{Uq>2Q)39W)ad^J-M3ge6L9$vyW?u{Ic$VUaPY^F!DD2~{Z_B& zEq|O`v_cb_U-THB6d4zs#h}$5JbZI|8uPZ!+69N%A6&G%t32a*5(Z@v0@AuR?|qMt zJJ5(x`6b)s?^=sy(WGPkYxEt_>* zL$x2F!1YW|SxhBxG#pCsj)aEwVU-2BC7nWle@7>;>-tqYBQBumNE>3~2X2uV-=&4R!%w8nBdH)i=E@p_T) zTsSws( zo~bWSY=j4qZ2Ih7qtC{xz7H1qdWU&93|z6AAII>-%!`6*Ss-YsW>#{IXG&dIwgx~y z_Uz=iDx9A`1`UDr;>>D@UHz0hBMsnAqsxPLrfaqN;*xMW->(yQ18zWr7jY>IRby|E zHDUL&#plC&5B~W(S;}XPBh2*Itk(Q1#p!%u;Y$+bjGlhX#O)ZN-CO7R)Cbo0ak#I{ z&$YLI!~kM|EOAB^jdT{H$ImDnMpYkTB?;2c0ZPKBO)D2;e5Aqq^KPTgzL{!@&liU? zGaePcKeG#qR4Wn_y?fhEwn^1{SlTakGgeqsKD^d5TDIp=3RnYp5L3EG&A9p^!_r30 zDJ-O1$995(q_R1YG0Ugk$wc{W;Hii9K`&k4SNE56lTO4rIUTqBBmDrI_Qr}FS({6y zaHJ6Nc9Wvi5^$+NY+}Eu`~AW23T!8Wimd!TYM?&L!SW1mIv^fAPA@5vFSZ98L1YE= zanBrFgE*?yl~KK#?i%W%CYe3Zms^V>H}?U4(N1#c(jA#@NCOm#hc@0Cqq80@HMliP zgBR*WP52TmX2$ryFYw63iNipo36l7+&DbV_nKq=zD@y%-F9;K%!9?%hNIsTVN7@xx zB3zUAR7Y{ZFdU24uyVt@k#WCmme>vQ!kpAL`;u#+37$cQz){Mg{hjE!$2e0N!#n3g z@?o`Z9(g2$Y*mbFB18TkQTHCmbpQX4f16>G*a2-d>}2L})l3It*k%|lXX1L7hM~H8 zUpXI2HM1Crnd8J9E95GN>(D_p%y|x#O4rpvh@uiMQK{>bnyoWSq1nLRXHVWWq@6;{y8YBmCOttUFRQnglb zD^5p?#%wg+Y5XZ%`P7o#s;LFnOXx4>@@Hrwi9c?X6Vjk+u3a7fYeY(!uwa=A@4K`z-SS)Qdc=;Q8hqZDbXkT~cF_Z`a=b9ff zc9{|+um8X~A=4~9LDs27Gio7@+^8k3WGZn+0=(kt(Ey6Bh zVe_@2>D~Z#&f9i$1h3 zdtgae^dBLqX^BO>xuh*8ULxX0?)4uu<1}$nO;uk5(Fm4~+uN%DtTLg1L2IIV@4yXZ zQc5Ek&ft1eKXg>=H9v$0>=LZ8o;mgDVOH|d!EXL*ImgeN1W!CLM^J7&cQ!6eE2_O1=}VZky7 zs;4{CqU)YmP#lTaLnu~F>683`?~7V2@$?F}#O`7btV&Y4-$9Cw2>)9sVOftHjXJ$t z$Qis>JgJGwMyJjTA`JMoH{brP-Zd6flm3Vu6;88_PLkmQF1oSorp%wd;|k(5T=1t) zTZiBSF;kF7Cc7QS!q6N|If_2LR@k$%%s5XMZsKhck+)+rg;EnB4-sX(%Tb{e4Bp2) za9>9aRVQ8_f(ikL%*`+V+56qic>QxTJ~E^vOj!d{rA+@EFk%Nt2v2h#`L?)~j)kP2 z$-DgQL}J2g8xylc@zaYKyk6s*kI>$w;o16KTxG3ocBUL}*UZWNeP3A8L4;}SL2M!9 z$mG9nyO8yT81kE^8>cPs5TfADv&dJfc>z_~wRiyUmHH<}@Xk`x*QNhk^n5Ku3iI0? z;`GOe4}d{E2ZgwxtrLyq+YiIZ|36%Q`T({+dpeGmXLrR+V$LZt(bt`;xXRe62r$uH z{W3VD(=9mb@#ui;1vBQ7Z+A}qj^pa9vLLtElwjWH7p3J4vFp>lxiGY;{kJ0mvK}b> ze!?6TJ! z_|!`FVgBjU_ALm0(+&ufZ&MEZN8ppn zSJM~Q7-d>D0;b-{(2Ya`3$qfSzi8y^z~k9l3SD}2m!U8|udEf2&Sw|Os4jpvU9Thy zMU2u!x+${nrsVtqs6-q4+Wp#mVPzpS2~JHZG0%0ItQHq!5~v-W)QuiyP`FumFctoM z&uXyjr8a6w)vK|x3huwGI=}ZLhm*ok?Uc-=sThIhZ3q=;Mh)VmgBY4_BqmnL_tGa z^lA0x%|H8Fbmcx_I-SZLBodSdxe};^y*dBbI6V5s~{^4}WnjiTpj4QEC@6g29kFovHL2V z(lD-)7VS0=EC1@u*r$d{bp*-3kd5_|-~$EX&Wf%y)>@Qp7cpg#vNJ!)97M-oqM-Wp zI`&Zlu>cDS*jg}{(8&~wt3w}k}14P{kwaAm2fweb!CFu>=Ko)xQz3`KBn5puP5th z4KR}&5udwoYbgvUm>i!j{ImYUu`z&03t@5pAJ?CgFG}BT(PGql6Go>B>Rca0$UmV| zrYs<&^dkSKcOQJN&La8s=PaI2&r8Y4W)Y>^Fa+bHz4vr1JtC1c+S=&l*xyO8P2f73 zD2_hx4`4`f4k!*wHIuhEn@J#OA)`i#RIU9P&tsP)QJSq+6j|4Lpz0G}1}?3>DzBkG z69$D<+KHkJrmUCoKbO6ELmwT@Asr#@g59n~bQV;>8JiRw8WilJacIXbA4eg=9>9n_ zyKKDMkY8qlch`nYo6A2#@m@xJLS03k{;&j+AY@})Oz(P z>&Xz%27oLNU#kr9U{|x*di22o%r?Y?0%%bb<96*p^336xPCJ;N7W0X!RksT6iWbwbzNIVhCrn)4>t+xvHM~gFXn$unHn@d%51C0V{0C4Z&csOu5=u_=Z%hEq;(|Ms8mfv-xt1HWrMi&d9LpslPGh6Q2Ov`@vj?1LVJT*!<~@^C*C)}1-Y#+0lEJw^23QD zwIa2?ALMrq)?Zg`we_9yCbtE~26!Dg_o62dXw6~k>B>Ur+Yn<4@Fm~Qt=BMW#OmrP zY=dsbN%b)r33F+X_dK^-_3*=03#de!nXie-7!gPJQx39f1Hb>uZEy{7@5zD&mI2sjC zW(V=QumUi8WcAAxY`Kig1s|^@7vyAEHjXRT$kDO;)cq%lW9-!(*rbQGng;_nr{tfB z|J268OLg*?PPgY0u{_Iao#x7~8}X@9Ceeq@rIy7mz7utb)5qhdf2(rdSrX*{G?352 zvL5f@Fnlep+3paYXujmuZ~z>8CLyEeaR0^^6WT4uTVY`;XI*Wib|Jj zGyYUij*SCBpF7`}Un0VN5kv6q%5Pg)SIS%q+(D3fu>3WC=L{fYyzu>LQ-4;)Svx=| z{mtSng`0&zzS&!|wJGIzQHahRr?0J-A4)yULsCokdD)UK)v{lS&64P8C&R13EJet0 zl!M2Y+QF!@VEDEL`9^V70PMaI&5QPUc987>S6A{;dUyX~Y6a-h@awxBW;$D8AVwLt zYhd)z>Fokwo^Hwhh8K+unmYEZbh@b7ZQvQ4-9PC2v`>Ed`8`T=PVOdkWJ*D3ES^M*LwWNpJWGX6)4x_*p~L{TF10Ks^$XB)48ZSmatK*@bCF3& zGV)7^`i{i_wEl|~ZGEKv)h5Bx(AWD|4V#3*miJdsA%2jLUH=b@3jxPdY$$#HyExep zpCyQS%D1^Ix-qWoz1Hq}$?J!89uTNGb`n=CaqSZr;>CcSke(WS(O3h&=LOi3-~J+* zqZ?;ovKJ1%vk^o@Zn6o;bxL`(^R#tyw*5I(Te%cn=qszP%q^Z+S{k`M&UneQerbLA zh;xFUOxGHcfBA*9K3Lp}IIHKMm)HvCx@{%`1?mZ;KVkRPT(gM2CmC@9B)GdQgf`v$ zWqUuMJ9Dqq`0?>^;8|lFL!KRczG^2BRv@jr@o7Hdc5S+EWpq@SsC(Ms>Jg$}^)7kp zb9K`J#n*)+bitO6567W!JZK;%dNJ>cCTqEi+!b-nIf3QF6vHIXqwk#h`c%EIc{#u0 z!xH@#V>>Z2LslS9|6GpcpF{yCO=W#A%9oW=7mB`(H1Qw6Uy2b(`Bl{<{8KZOt%EL5 zC3t+Mm#{cM%}D#GozLdV23bh6$(Aj#%M~B*=UQ)#fw|kfFWia4R+|{ls|WD5_6$gC z#4%b9nWys&kT-}#7B-oNN8|vza1tO2JQqEmR{Vk7F>fr|^nOwfu~8~PX-@cRkSGp~ zXrNs_t=no;uTb3fFb11mQM{9d@y5&EmEL(X(2m1Fj)Om5%P+UEhhr57LK1?{QQhQx zVa$@1sXASp!O+mHX4~KXyD|U|LBlYAlM>34#z;EXj>FQCbE`atP^&<{Q_}ZoXDUYE zV}-o@V0{Xofro1JFUJzqiicJxsO;BN`}8&O38~s%~`Z zpWXicoA=I0Ljco2zv6@Y$QZWaNz@LF6}yog@P2D62jmGz)@DT$L0TS&fago1mS=B8bk&#mD=|teF^?x zyn#;rn`Qbs6)%1OWgT8l#p_?MW=IlrFn6o6%5g-|n1Ycfe{P*+0*KEINs!a>ha-=a z=Si>!C(f9cZ`mrq<|IFN2dBN`;p-wRI`mc3c6W}I?r7UkB*N~RyaiE7c%Rb%g6Ueo zbwRH>>CnUEqwdtj89-ZxvVU#BVZMcHHcm!+xV-q!ZlK8<7FM*X>MP0nAjVdI_^yR{ zXluBcdtv%^-fpMCUal~wre*QY?f){=Axs5@KpA@U79ui%mzy$~`grvjLvXb#UHkgP zp0p58Ye7NcfIj`_)JBw_J<(U<09gFxnxWP{>E@7;+1vhkDTk!BpmQBeq6+!ysI~8MGs_;UJhAfYj3B2=>!(8Lw??i0D;J5=P8weya32LRx`-L(e?3oo zprxDIiPDy*rUe^1!zx1a)@keA<=`7p@QE@D+|`a_?%aa5AqdUx_<^)Pkm|pVx|*FNXVmvHY=U2&5e)Q38V48)Oq__y4viI^V1ix54r%xzq*rb zQ|4P%`3wqZ(a$?Sd8gp~=6}`l%M}BMC4w8vwk%j(fi8*{@Hc8Zr9aPHMoSi=DpFO+ac?=)pr850#|g4Cou4&6<-j1P$dV{Sgb z{^=OI3v*d(x$UKL+uE=`&n^9mZgTsJXTbEcZTIQs9D$c@(NXW2RX*|~h? zyk7J$v8X)5VstB9ad{^oqa<6XCs~3!k$ttS%@QG5yB$Wes||?Q^xbSn?aK3?iAGOB zG%93ZFyhl`{p;AEZ+mfF*NnDRM;y*^6T>lFU20-;#UGG8mpXb|jyFPd_i1M_> zk{<;PfPQtpKvKs)0J>pUlH<7%EBYBTQ5`6zpVpsz`J10c{LDS*XJqJMYHc(BH@m#^ z)AF}aSz!xyaKKi~oAnY8Z&s~0MaT)PpMBMp0-+4=V&JpOE-qMSF!;S%1&SjiJIj6rc{1+Nk zR+_gj`$c6mnT6FNzMVgK;>lEsC6gM=BPz{R+lF^|^Ql^l+jPf9+3)0VUX%IRI4!N+ zzd|MV6xoV0NAA#6p*gXToZe}x8~=8`|9&7x!EP*%wNCaJyyST$ucJeIWaA-dC=;Rk zQQs1To3sB39A?XEF!rLay(-W0>S`>^%QL_HqP86Z4);v(fG;du0d7i%iLDCXPU^4i z#6GRYhU`8lNcBXVEg_PwZBHl+whyWR3z0^A!It<03pUlEzL#98sl!Uuc z_2P`*Y((Psne=hYXOQy4hG#>eaZw4!F>497RL^Q==g^pS@~>q~XeI;}rK@+y-e)WV z7l@_wcEX2!A}>NpVlTZUwAY6e_bW0FWXtmC3)a7z;XpW&T?~Eo%T$KOU!>N)exiWBF(%sDntKK;YQ?D6)YWKh&rL}E`tII=q1^9w1{o+n z1oFM{GEqO&I(!9+U+RP0^0 zr~JtXK{s8p!(0Do)PMObm?2xWzZ-NRShpV$1GH181=#L5w}U2(MA(tSR^HAJA>23$ z;=g*_@$zCX>y8fK;_1T(^*Hw^Z@C(;pZee+n8XPLp(;{o%ftI!!U6_*naaPv{2dU6 zL;c{z;N%}Vc%X&{U^6SKP65BozSJ!OZ=w&i=v%n?PzS}Wt-wyQJH5k~V)a00PFr>N z&asj1bGnTa1S)4{!4lAa(8VYq-L7ixoJM(*hu&Ztf9WMTokv2aFR$Fe_iZ+|P-%7c zD?H|p3ylt{&!&YYO_XZoE(1+@-Ja>$+F@;}5!fh{6yQnrh6^Es+urX^Hal*{8z6f2 z`K(?ut-OT;k=(Z5nmv@gejNhdj$to*c{<0!_G8a_W?IjW9!Tr{4K9i_m?PwiKi?GU zDzUG%tv(=KnCE?3>7B}ox!H!sSj8rdyREb5RFvf%hYqT~ycchc4n2*to1B|%`Q67x zH(I{$W#qIal%dLzJ>B>seww4S&M$-ZitxC^D zE_lT+SlEz}f4wX!kphK*f%Gz}Kt-#*{jiYe3FS6jsz9-QX-#EOyxBdYm`7~9 zI%FESgHJ(TGc|zv(a)YuIs2TRHbEePJ^c(GXTsNWj4jXm8)0Q9p!|&Th6bTO!~o~u zvwrqwxbo3{jEU?_+7tiFMreOt?f{`Vw?zZ@N-x9@JQcr~qk)zY&!YEJQ$7?iB-T;d zLnG_wFuRo&&6xiY(_%)N<&!_r=F=&xtvR4k-wPkUw6*!9f_Tj2>|*3I--o)8I`Z+( z_8V47wnnb_{o{^5^__aBA%=I^B)*_->_bT**JF_bH1by^^8m=82-V*1e2DUHlQ5^Y zfQCuaey9zGio?eA_BTVXU)lVBVl5WzSfSvpGhrANN8+D*{6)6*3=t3=dZOPu@7u{X zC{-w#O`Ume6iWRS0_kt9{C2u7&Qf5IR;J%MV*R%tH9|-U9yWIW8X$AqbY;{wOYUr# z4j3;^7ZdwxH;RH_RENdu<98DYbk?{m<#KAwSrJ14scITX*v zOgBi`%elOtC^9Nb(1Q3#fZH!E@rrM8g7?s^dAE!5w66vBc&<0o3OgW`R zuLo1x&{zooyVQs5Vb^c=gxjL~j#G>ugcqsGZNZ-N$&-UE05*)14KBTee4I!Ae(@yc zdQ6LPOmKfR?Zc7Bv;8e_>J7IKht;v&0N%TFHq5>Au~`JiB~#r{ zf5Q8HBdsnQHe8H8q-~HyWlmznSxUE)6>agp6d0`xM_ZW^gz&CtYTdNSG)1$^U^9Ab zb=c)VeQdFwSF1gniLovC^)SoQI_6%+qj59JV91W?i_X5WzHCo*Sz3dJv}GL;*zH55 zdE@7H9`3K@q~smsyjl5#urf!W@9AQ_BBt_M2F~gA#=p_{P1e+|zSGdVZyT_iY%A<2 z#1NJ5&&Vy+zd4CH!12T#cXRTAhs8hP3XntBeL0|^0d&fE>8Riw#DEiIkbq4~l{cOb z=*8j**c2m$E_}!Y?=b@%ez?Ra^ls2&m)39m(SCo+*;n4Zm~BoH0O+;L?WX5}n8P{L+Hp;+nPT_-kt zU}gPmHi`JwdALFljZOatFep091&58aTlFTtFG}ai%%%*Yslo59Ya-|ozxhrt*bQm^ zezgMuI^(=!Si)f$octRT<7tvpdC?_%h&Gy$cKXna)dta46Ty1hUqa6Rs;+otKS%2d_9!wIl>+2yD+lt(0!4UY) zFqPbOB<)_d4lN>_mPoif@KGzsi%8{U!pv=!7!7ve0w{Vk{kv3)dbglS#4kP*txpX- zF!xC2arFj;wXOoYyo=9MrUt?Y=9{A^1htc^W@!<1snI%O(ppm`Zno%WE~r+SPS^D6 z-54K!NVlsip}Towy;ApI!S7X=|Czk8-ePVx3pL@H)b-3t@xGfwA*<;AF<8x$N!i4s zGfklIy#_oAqD6%?9&Lh|74i08pEWtX(w%~YwuSoP*M;GS^a2ZfAbzUu@wYRnKO+vi zY-fSw&gw<>9%7fQqiar9G}UugxqTy0WFM2Z$eBw7`11--h;xn+&ZEir`hZNMXm51; z;xJ5Uvzc+ZTlEeCC)?FS`?v+$FRqa?45R(`lr0$`e*&mNmQF(vB%(cErHJ8n()^tIE-93R zpDu9JM%$KfC>6OwAiXBtE2E}H{%@=Q4{PRMtUiMtb#v3!4*0lRoO3|7WPpC`?N81R zQDx;*xmutgv@qhvDp!-5>$!$mbneT{-VG@|pb~%n&J|Js(Yh!%xg19rit%TmV_^nM zea|GFOm$e})7zstD;(&~5YE?oFh04$)ZsqunFK*cWPdzrE?`oK^UAcaYe zSBDiVe`B~H>g-_de`&d&Zm|6Yi)*#nvE$KPjvz-H@6#`?0JGwaU-|hSJZl)97GXO# z+r}sg-%dl0#TL>M83Q2O?b!L6rn&tH@)J<1Z1>3$(^cO1H5jubc7gYKW8y}gC9}}} z=e_`7wF2vbJ(iX6(1Q`h2r@EC3`y^Qy~grqVwf$lLmLS%!@?L~P?$hnd}VD9a%XqC zXO&R*5PB~BG)Q#&*?auUVNVzB?H(N)%CEcG{n!AMd4wJ9`LS+8&Ef)4%U$!+Lp$S$ z)fwW_-4RZ|)o4Ikt#^=#FI!EA(@|Y)Uf75E(jdyO^jukaF;$zVS@y`_P+S)K=Y8;S4wl&o zo#>Q>_%TJy&Te^t?e$tHTiJCDl|uXal?k|>?#YOE^gb<1s%49~#HlN!x!9#BA-k{G z%jZybOanx8)YTR%hg1b%A<%RI`+}`)%Y1RsC30&CW_G{BaMv+ZeR@ns%;L7s@yE#O z9&UchevG}iqFtuTW_Kvpq0>_*YsP{g9F>3s3YkCFBu#|i8FS~e7ow(IF*RM$YPoG& zh%JoFQ2Fnhmp--VX8aFaAR|y01eR*`r#SjT&=TaPP4*3nnS_(|7Bz5~t+w&qt7V%u zK>%2!o+h8?h<_Ey@doAVTl0TTJGgZj3cXO(_;IXACnb@zvVvSq1#=CxG$;PHUfd%b z)(nJ-TJB8Wjg(p-nc8sc3!T7)9|4qeC0mM+b>Yqz0C;6KD7r2_cGf}z`8v-A6RTu6?t05#(7+|vUW)mfNeraui?D>ais0>cjpqRNlx zi2CQOmfDql!^Qg{d&*v&mw(A^6f%VA1GeAYngH&yNZZlTZzrn@Ye$B3cHB4xzp*nC zTL{pDc=e%193KUsx-+g~K4vBx0e4pETo0R^Tln~; zz^TD+w^VI6*nIej1l; z+lb@?4lzOZ>D6wbwWBR#5i5wlP4xYrMIaeC0u@lUS>8aBvSD3p{YT1G-H8r9)Apvv zXjbn^3F62j;1o$uleQ#dbrt{+tUZ3XporcR_NX6N-Z2SB9)e0V03zqYtKZr_2-2|t zWbKIL#^^2OCQB)r06^LGR2jNg9C%qVg>Z{<%{L*lffgi}&N`)5V*5V4ZLUXVSTAiQ zJX^CLUghxGTDMZWr~}jaN`7L;c8GKUwaoo#WObEy$11YutvKP-N*KwrAaeS}>0SYd zPJ~5!ovJuK+W-fK6x0A>FyYtce+v(x?-|Rdk8Gse3R7~4$HBeq#Fd@W46_WlIOC4= zs;-u2T*e&MRyDR4s0R(#Tv}U=o7@c6!Mq%>>71A7TK0M7xFsZS_yxbwA|G+dgd7fe z2$7Pj^*oXD(jat3fHu{ER=O0UTNs!-eM1_0rCSCg=8I?g7k;e9*=BTQ!H)Fr%l;LL z(hCkr?bP>A4AzQ-G4dGCxzDcv>fwSd>!LSV_(lM{0OTFhT9J4=X*}bJ=H6a@;|&?3 zz)qlHQboUJngk@4kzc=FaN9B!x5T+@WXCFaVC%I0v|0$f%1byd&YL+`1LGldP(bT; z)y9&aSFRZPi8$9iojQo1Ci3X<+MtSc4a*-4)O+#sEnrt{rX3MynIYlowBHBU@?H-x zc?PVnmB+r?#HfSi!O(lroC9+&N>~O13_cgYo8B_j)m%HNL5zhGY^i( ztjG3hSlbZQXwJ7#oLYsO$MesdG>8(8|2@^oX!*GzA+gDgUbuDT_9-8DHKO^_0POXb z*)DEzV&UU$3$4`<@jXEIlaaXCyCp3^a2-Bg5QE`gn^(On>^|jOwAdFZ?H0czq>ya$ zZp+?tWPfu*+bAvZ$Csj7c-fvsKs10)6kr zk_V5HNu~yu#ce%jk3)DE00&q@Jut1Z(cLME@nm!b1@hu-WFz$kA-!ZJ`tRyrX-0kGgRLYLL5yCQG}c&O^Y$ zwn65XD%9UQxRAZ%Nv+5{oZ|UBP~q80hW+%s>TJC=xX#K7S)TP--gJ|k-4yMtUg&)l zxl*SOePR7J{7dZ7|@?AFk>3;vJ%Aj6#JUpjB^61&*u<~d?|5LQ^O*_NsYR`1&3 zfLZX*<)fy*yq_x5+H!lQlfJ_=fal>4asif~I`;Ro8iMes+g#mEz+85qOJ(G`v;Ct& zLARYPdNIEW?IRO1c|c(->BOgVIFMX;Y?E%&ls%JbAqf}YtZKl^_G$8#h-TlWVgnXSmSd4bTy9{ z37_yFOof`+J)HU(2B@J3L<7BluQ-NqVc9%SF1Rl1Gf(*Onpx^ziatyk%tGi@wwq>(#&9xJ zW$;2?^7|YX8*779=-*!11Kg>gFc@CvC*K|A3B6ct)yKNm${zl_za`TSwllA8IE;N! ztb?Zz?-671+T5CSwsVm@?sM~MWe`G5>E!!Gt4QCqX zhY}tHjGQs22f2l&guSGuM!#=03^X#rA|sy%KmD^SWVNZdqD1Rk*YBF0ibj1Pjas7Nl15OqotJKR)p1Xp0 z)gpCQc6i2KQQpTYe7Hm$&E|HpSuql64NU@tbgwe0ftp;bS}WUODF)|KKM=bht~%Se zh2tU9G?jXzs~aqH5kKyn{c<>%BQ8ZBs>`s0w=&ty9GG6=(Xq3V|vM){ANbREtVSKH*M zpQLlhz1l%t6O^{>gJ_jS6X&kJcoPhV;Uc01F}tJO*I1pKvOsyU=H(GLv0(Wjn_g!) z`|*6_URBNe=*f9&aJi?tW}73%zVX*;*O!k`&~#c%R?k9q-BFf$HeXQ9r?NjR#?Q(oDbL^Y5Le9UsC1w*z&x zY;SKqljspe?BQKIwbU9mp4HYBFZ%jQ6aJ3v#iO(Hb`jyiTjmlC`Zr4kH-`) z7(L9v)2+GHPRIKnK=h9pR9^ox$RX2dH#nXs)y^)G zrsP-cf|5G%#0imnB6YPq2znN~C0d@CyJURw8Xi^#=vLUw#x9TV1aBj1(~lXZ^JR*6 z9EG^AyyYC0l9O~d;`1u69#X!G=9En`HTYX`&J3%_$!F5Nk-J(~@~ zabrmu`MbzK?H|zn|8gx~cdJ({d!2aqt+<*k4t_F;*=!QM7F=(YrExE!>SvA&2LfoN*z>OX*YP>%H2wiUQ)BOu`Ht6kt2_xFQR$_L6k0an$q#IQtm zx}9>lVD)hOSrHgsdOY88oX5l--13NX{LvF`D&YC&L!EJTKlo_Msi!zI2IrQ%V|`*a-QeeR$v{TGsq%rVpU=BloXuRs!>Ozy zY^O9FEdEv%;OQZ)xS{-td^vc^i74+LS$=H%-+dl;T=+cUgy3t8(0 zY((_-j=kHa*RK~X<4u@JXmt|+&x}R~nDUfqD}E~+tRA~{J<57O+KpAh)I+ABibjyz zK3_1yJ-__u;aGz$E!`0n<(GgsJ7^D7wCih6FqAR}@Jh$Kzex+#mKE{xQm4adpKF*8 zA-#}vXw*rkqpur#{3e3W|Gk`a(8VAD9u@PogK@I?H*?qfER9FU|B9+^m^FLnTXw<; zuK?X&CJ>eM4m{r59{wt-4ff;SC2z zi{m3t)E)@~qHW(T&E1@Yz%}ok;%9#Suf#PSp@J68h>Mn^1G3nX-v3j|$k|*p8)*36 z>by^_kENc5mWbD9#FpU-o5b9}I_8nkjlIJC@qn4RWn^DIlO?`lw)L`s^_{7U^L|?6FN165U zm8qBh(Eil3Zz{N7E)grQ3!FOdtqmvKA_{2ROta3>a)X0mxiMq;J9q&g!U$ZXHj?X5 z&vGHvmvNbWv|U^v{I$6O3HJEJL=%pPXaiJkMmX=Cs@IFO=)$b@D&tpu0h6M5Gzi)L zWW|VCa=`D$O~5;HuOSl51wvH4T-^af4~Irk;`Q3i!=vX{b!A9EPYk4sFFTxFJmYfK zQC4y6)I&o`nTU(jxSCu)+QZi{L0sKNa*P;F+?8r+ugbS>t=KT!;>GpGz9cLyife8$ ziEJ}Kg!ZJmU0RUK%##=|dt9U6?*i6S)rsH@U#j;|6L(G6qUPQ-soxd-nO-sGGV^1_ zRzHx!BD1*}8`~(=$FPOtD>!`INNUTV`m2^^y2E$0GS3>x#06R?Q8!ngFKYIMCE{_g zk+76YgYA$s>2 z8c!7R!e?kGB{Q_>z}!{)FTZ3Lm1(hgi*UH(E4M~h{!r&)%HnVsOVgEXe@OmEIaivf z3o~zY`t+_{XHTOd1`)gZ!XRp!gk@3a828h>#2~uV*(Bn`T!|!3R?1QIOoT^2vvIM& z^2=x73e7@rH%wcK6esA0TRXMVt|m()A2MP?M-A=BwEwGHz#NbVY_s%39EP5V5;? zU|jaO^>7&9?Ymv~#gg3B=PWz_C!*NafWcmv$cw9Y<9VU8VNrKyV0XMp>ugdz@fCT2 z>JSp)EWAC!ku$s8r(eKNT31W)2!Tz;hr?;(05@zO*I}kGG_~GcOY-vT=lq*LM0wqQ zi!IO0Sb#*<@|WH+>m})&?U^$oWLCkP*^=zml9p_$8WPdVMN= z54Ndj8gkIf;n`#>&D0MMhs?&V{HiM;g0uw@w{z!mo1mNZl*x7(W!}T!aBa^?)+Acx z?!X~4&UbkOU-hj0#)SnT045{gk&)S4rM88=@3j2-!u!iXg@FD{?UX$A{FwFq=He8` z#TVtZVnZXJgu9PcJR~SzA@j|s{N%Br&GW%}&{9nN?Yh33upArPan9ZmU$l0+d}Z+X zf#v&K`>Ag*s9U<+FZE=t0S)jRHuphgJ!CUnC-!W}Yd!j%c?`HsZ`YF$yS&eJVNyQA zk3M9#hH2lDUXjzN<%S$zEKRW@aa)P}?`)L&X%m|i4EL*h*6~q72##^yK{jJ@XeTeo zmn=&r)P_2aA%JYf6^!xnm6cf$9Piad&!iz8(Xc?B76*VO68nLB#BR*OwE&#kbbSN? zD~!BwnGMhgE0_U3t}+6EJ$e-BZAoX8}?S6I3uN?K6OTF_uWePHNa;+!l zLb{Jv^!`E(o9+9MASCAMO~BHeHKW{;bpd_-Lwd)OKfkpkOufyFR`vBd5`#dwR*?vE zIf0;ht&}Yvn&-0HToEMCIF`w{-8?Df<}T5>vy8F_nSnWbwG1_E`t|v$_XR~91Q7*A zMwz1*yZZt_U`T*abw#oc5LN#vWVP6A#W>+!Je-QTYFnLf^SLibhEONFkF$ldABalI0p;K#DxQPjktlLiXi-U^3d8P zx`EUa3;s~?mY{o$9^C9%_flizR@X>!pv8F-GC&-czO;!K41%Ty*`I&4U-_wq%_(fD z$iQUFbH$cVV3^xZH6i^i(tKZ0Gp117r!_*oyL0lv zM5Kw=cSGIaI9(mn2154Y3nRp_u?92S_JQ=WlAyPWnSTve!|}ep1{1@5nfht!D8UDi zB#+e5mE)wnAeY)9`*5d}i|Js&2=-7{yPVVn^q~6ri5weZ$GJ;e$P=R}9MN z_qSmLAGsrM(ClM}uMUT3r2+4J0oVK1jO)7ni8rfP zv}>wcx0h=DcJ^j`=ZYWubvmrgvM)G)s$lG$YId(~<;qHc7-rc;6;MWz^G1gY1=1SZ zr)*oxJCHX2^y{AHCMmsXv%vsfpH}NVFmkIG-L-^hA<#re=GoaIe$~fUh&A?QptQp+ z0eEvGtZ+XK1ueJ672f>mJ7T$YHL@$dC5PIv#BF60%whC}+wGMP|AVELdHJCpYD^i` zAq#UsD3+ILD7syC&(Cl;GUE=(j&S((HZ9mkq0J_Zt{zg{^?HnPvUqZBDZuRt-PgxH z&)dQt&E5_#QXW$Rkg99JMWgPo+r5>I`31eG7U(LQI^1m`VN?U zvjR(9u|>L&ilV9{-9bnyP?q~ZcA^@3KkKMHoa&h}*^IIaWpUhc^5L?S`#usltN=IB zeEdr@(<0gZY8rd`T`S*`p#{!X9vP9pUhY_*g{g*?Y-Xa4o%aPOMT1#>*Vl?9uhs8X zwsL*=A3z}EtmULS3A*CzD@KuF5QRS;JBrl0X9!PxKwUz3Cb_W>aH`K11c|))vty9$ zPk9rRBZAczV9AQM)Y_4xeFC$6yv9tAi|MF@B2q$|RpgOJ`9 z$5xMuD+p%amXy4^%hzHjU2qr)|z&s1V{+C@>d z5aQ)_{2u`Mi4GXgk8!^oH(BPd6DcGe{9JGL!%htn^I&1wrB5HQ%a*4}j>qe5fYw@D zr)~61f~$ixFa-d@NB+-#ptdq8V{>QsVnojY4nnyZc5)44kWM6o6R7UQx>0eCQYxv% zjd{4!*Q-11%=ZuqbCaubEI^&E6=>DVzB#f5ik%B5a+4T+=R1BeVp|N@iq?>rZMJ&= z*4IHUmWYp?tIR2yW*05RPW@O0lPt-4odTq^(D*rnk&m^tD39L}0JQXZr@8~jDs@eR&{R4QmymU`T+g_t^Z#rN4VP(Zv64q(mlN_2_I#s91&n<+l z08p;F>`ZkZUS+JdE!!p?Omg@C^TypA0D6nG1_WIJ^f}C{{#)$Ymb-W8QM_X}Q#ZED zzkpCSWlEUe&S1wCVne+O|0t>Df?!s(=G9Bwxd1z}E$~uUqC`DPGAyD$nY0?zN~Nq+y6<%Hrogs5{|9gjAEIZ872E7$gsu1%2~ouG@KB$xcN$<= zO{j-2dPY&Ukkf#pwE4Wu+bsJM@$9|@5Me{oaSW?;vX1qU9+@-WoYb!YPdQ6^(!S$SrnyVD~-PG(e$@pLu?|7;NaBWFh^NNUad%2Z>7Tu z>lEbfw$a)aHVL4OXve7On%K?g|Ik&(;M$?bScBCiJelnjf&O(Lc_K#AZ~EuJuh|Us zj!9*d6|C=$IuH0r_BAy9&K-}buK%y8yYXjw|NjTRD{NY9GaWLs&6umBxvEWzZH7(D zHE~WC#!%{Wa#11F%-BfGMM5q{%0()2&gZLAq2+RnqH<0bt`!}U{eHcluh;AG2p=~M-ioYXOVSF&76TN}k*xpFRUkAq^`vuWUQ-7fwL=u&?Mzj6 zbfM0Z=I6huCJrohA9!!Yfw!6nVXsHKJibKX`L(eLFoHBt-dVw#*G5X`kGK&Vb+BK8 z$FE=0Y5Mq4tUorHk&UT}$@|BSAAytS*E_9$w^Na+tuZa-^%OGNY3~p+Ep)$Fk-od%dKZXlU^soCdv z4pOGp_9qaDpyl>o&egt>sF}R*wADZg=JjKL3(t@5-*WdWp`Y~{!q5>54gcP#8Tv3T zWdV8fNekl3KvXPFU`v(VE4235>N|H~eKSDICxQtN&Fht>43$A$a2zpJHI@pVWO4vg zu)gS~a$UBEF4f8nVWn;4Wxxk*QDX_{O=XxBYk#rDG25nYH=XW#kl`^%C&pQ8)j6%M z#GZ%2o+%upWvd`tvpjvVeh6kl{U zc}Sj$Afs7LD~%i*_>Hs(`@H|c!5Bfu`XRmY?o0DBQ;_!`#x>5{Kg;CVJRBq+lSf^@ zJ))rMQSI)=cjrV28dY$g!@}MT9wmBsgPHWGN#sr24rZ15ib30)q5Et)zgT1oBk$4M z>}Qp+%JQ(7NfVB#@sX{H@?1M(30#q!c-NQfQI%q+_|$ZuI7A?)C5}ga16Z}I0YLy( z>fg)rsUChE`;7CZ*C%BZB2jlr@bVkL>mCwbc*F@|Wd|Iwor#hhePiXhVuYOUJH5A^ z80r2Wx);Mw7zj0SeXokHkkbJH<_)O5tjZ7EepQKFU9UT)?r)ri&hauj4QJv}Y_>t= zMzAO79S*~zdT!IHu7@%0gz}jFTooJ#6r!04NDZY>XAji(`T1PTa2&6E8DyH1XNs6u zkFVb}^uJ{coo-*X;^2|5wCH|jFaw&>@&AXb!wDztUdQb27980DF>8;->FolK!uW;^ zs$5yn_Q7BJd$_7Z;<;ASyZUr>fQZjC%XYt(Q1=ObWPZuYXoTZ!q5Y%F2*Snc^BMy~ zPfOFgh&`2QiZANL9uU}0uUNStdww*4+#*VPq<{J>3F{oeWK&OJqP|-*u6WE8G453| zG5;6=m_Y6hS<$(FM&@}kMxk@fHqXla6x27rXJ`^j35%O=dS^`~Qy>NW!;b@ZTins4 z8H@vR*ypYC$=+}*%q31d7q#Fc*_9X`$@^3)SwZTy==X}ncg~YoaL{4fDqBT2@?eQM zLSH%KRdMBr2dfxT_W=IP>DPWxf~t;>oE7&6b`b`-3nKtjGewuVQ8ygdwHTx277_o& zy973!D)G9_1}-DnTVT*Atw(bua|7ZYo0_Dt1jOnn)pv_UWIoZze7)M2jYsO)^)W3J zF+cbK%%*v>r}qoe_q7z3dzZfHpFi7(FA(6wu)*oM2gidj4KBvwSvz@mfDb-a9}wb5 zS$WwVpHAFc1sr~44sag{hLwf9%ZRk?U7x7o_@sJn#E-mRUZr#N3w`y%wH%y6EG;ao zz%CCGEA%GKjDvcv{!pa5Rx-I;R-BbrLVEsbuudpsA_`xjyoz&Y+aaz#%%0SR?88ot zKUR^iN_7DJv>w`+RIs}^8FOl6yNjJGUXlPB`7&TD~v}vZqWHlepo8pqzPN7B@o# zp+$Fftg=&kdHM8c*k!_3i`22bnZ_Lt0MKd4l@5YxLT~3CNjV$!7Ai+AIWBfj-lmD% zxLvU^6N{nuUg#h$DeAcIALSiP-Gab=16U-l8qk?FH72efY#LLJ7C}D1+Aj=yCWXC{ z;9)28SpW!wELL9M;Y18bMcC-)y;)`QiSPA9pNRq^AsFb#X_KeEzhoOOv1WU9W>9D3bG9>_8E%M+K39g_I}LFJ6XZfriNoo^4u2^f7y zv1i#`@hAq&+!8P2mNyUqAi35C`BPARM{d685@Zl$3$zU(mI76W0 z2GjbuR6jQLRz`$pnUni4QP^<{b6xI#{VbrxZmwo+P0BW9mPm2Z&UpE2OM{sb%Je(Q zaSF9yfUUArjh74D!}Ee`I-0>iGW3xmZJ+?kJk6`na_mWCC$_rF9C<*El7*$awze)r zdsEP^u207yX2$6b7v~Qz3e8}&s`zXz>YE1^K#E^=W^eh*aEm`94IveX%EW690!+h) zKQ9D#whO8~Ofb;niP+Qaj_SDS4*c5ZWbeLXk5G1|$wsd%{OuYLiN*T(sru6B(&nnL zkW0QgDL+EIyS(Gy?6%xEe+7JsW6CYKQ1Z17AX<)jA9_lx8qdmlGPGp-9QC~h0&_yz zi8_epuW>#_uB|+_5E|?JF-tQ)v8Pqg{cwxsD$7bJg*%qaI=_-axAz_JY_fk&TYii7 zy_er1UcM!6lhI!gIvXCG>kJ#1?&!OIT;YDD?5jnl=~SS@Bq4q(c_qM(d_>ONLNhWP z=+ZkVKyafnm(~hnRk0FwsnE?ct)?7|j#;7egUsav=1?Lzb&`1YScb<8DkH0_mX;DE zxMN~k1yNqW|Me>>b=0o1`5 zC%X3xOrmV7>`fi^|DlK;$@CwpOFdIi4CuFFs=J^o3FNhbWX?XV>dNJkKl=N$IpRsw<=vh(MtD z&UbFY8*Uml_fvxOEUPo!K?Yd&@_Oqk5tS-R`trb>uiFhn@s(+xulU2B!)OY)ba`Z; z*CEWeqrC=S~0o8lB!JV529U_r14Bn!q&fiqWEw4GZ7l*mU$} z;?&Ufi+eeP+Ea(MPeQHoq8b-Bo{n^1PKSA1|96D(@ZdQ#itX(Xa!Hc;=1u9JT-$6G zuBBu7Acb4;#IrGv_*45(+h8vlc&n5wfei$7x@+Wt=YPn)E|9e zzydL4&7q4?h=Ry1onD7!)Og&0(C@R410v7v?1NTC;P?rr;S2xn<&g*ga}w?J*LkK? z+swxL){W*OJqz&d$)vL6RR>S4S4-a384qqSSTK zgWWl#JxMZ%?HI)E0d++6{gW0OZ%dr{@-*SFDS#NPT57yYst=#eZ-M-^&XZWe{ z1D)mR5_~Zy*7%wNr)UGnHHzGg7UdT`B%oJl{0qly;(iLiWy{oWE%%gn_6h^F#Kmx7b`qwTSL}4#q6c z3ZzK%wxF2GAXng)r-D645;5YnP#-DBV((NA?5AnENS#DXkiaK$>hvSFQ~xl}tNwx@ z2KUM?9jPUpz$7m7`m77bO-OIZUJp;AGI2c#Y}0*LV6t~IR{!0-m=&d}m@4gzyQDJX zY}=)90?q@wD_f#k%tH%=G6QSUoo;288Q_L=xhhNj!vTOX0BjmrZHzraw1XB-H@MlU zwDQ=%bXPlm!qhE)piWfwh2*&UpL_^Rx^a;T>&d|kgcX2&JD=-5vv{>X&tq^0^Y5-N zhQm!bf`vw0M|0k=gF2tcE~bHzc9g+0tw(6-{Ii6R?rfRNj8*00DqS$zER|&vFOWTI zf3p1G9^h8QG2Y=fSc-|qnxQp*H{YILzGPG?)H_-S)et65ir_a9{@PY|_XXqVUg4Jt z?zlV*sDMI+d{{)_9@fb*Nb053X5dVo{Obw4Z}rabwPws0e|iJ%zgpG)rs{|vT*mGV zt4SXNczKb0_ms6}who?i+W7E?I&QJ7U|e;ll|SFV9Ve8zTjz5%9-<>kn;XY>98_SE z6PqS*67+X1mNx`j1~mK+SBSr?+W*pWhh->`$zvvA31CWCLvN;_jA2##(~e<~t0Q|S z%Dm@t_uS)MjMKI1)nCUe&%V_qFrXg)T(0)(Br1r>TN)3t~CZ{>B4#w$1lFYqj(9Av7Eu-o?FKmmXPJt^F zRfNGCRB=6#aEkW1Ayw0gjA#(KACEkH^QuJ&Sp8!YuS0p(Dzhm@&6<9>Hs1oczXW0O znwR+IRWT}%i#^cu`s-xFWFPKztF}I7)jrFwrs?vy{!?C9+^jT@P*)7(xdxaO zp8GFp-zc}Pmg}4jB$tCzE-wyB=XmDhQ>nR!(LGHZ!ZfY%D7C;jz!9g%=qoXRk5@YI zbPZIO{H9MhFHYOvdBL6Dc*AQ8R@3Uat{0t*th85UR%F&h?kSZzvsz$^m}+!{)%pe5B|0YjE`(He-e*LFlf^3lr}t^09hj~Rf! znF8a2CyUQ)%>Rq_78k5btD5IP$GC4!vC_eC$X*-dA9^cg2m8Wpw{4vXOG~TR^p2xX zY92`4mFwfryhXt6eegs1r&6NMceH^^m3Ob7w@Qnp{DW5iiidaH`t;NVWhp4^7!g;1 z=)}x55EQ`%6b~Gqy0*tp4VGzePV;6} z$qZ|Auya=iE?I=?pK_M%dilhEi=DP{^+#TR*S`v9GSGT01+b}Sr`YsjG6i{4jtOWO z66%=vh-OpD<^q_7*9De_o!PkjPKKkj*kaotpIalHku8gfnUY5MVu zY%2T=5OF4ZszU21AZ+`e(b*Ju(y|ZE4{#Em%gTL&6@6 zII}icUxE;s7xqvNh$q@$g$!C#BWPKy7;0dL06aG4a`gvbm_;1O)b{jFt=Gpubgmu5 z3lb5%uu%gB#r}|vMJG622M`gM!ufpzhGShf_^duv8iY~@sVq8*%GUH<(JxgV+{kW* zcF^_`;_Sc%Yl{LYBosFdn-e=3UIu{lj>7Y?oSEu0wYVU|XO1tj8+AGjLl30=ddP30 z#uSOTsTJL67kPQNgjFcJeNUkA?9)v!n(qZP<+7+RXSSl%4FkX>lMI_b|9IJhvbY~P z@#&LQ&3kDuRCHE*&*v(nH^@~Lc0w9fxCIbGxUq8moA2%Pi*R(aCbKX>3g;5*iis(f zj8CN&MIMLta*=E-f#AilQZ1IV$>v!*B)F+>fM%30S_rk>CoLgGbc*fr2ST)+jLV)S z`-{k|cOTlZY}&^B731ntF#xxiP?v=)t>fef-rIf8pOfy^Xl6r}UuY65D(VGI1qJ>AoY? z$LoU=5_+j38EzBA>hkPr|2U$PY8wHqfGQ@Qudun^Zx5jpe8xXD!QeQu2ZnRoWp~R3 zf7x!;`@?G42D1?{Id6I+G5e$PaBJU3vJnA)#ca=)AtJs>LIovG^iCRHhHAnv^h{)Y zQUg>ixoP*Uv{2h>Pb8sh+OYa#<<_l+C<_VUJ6>s%8OS3jxV#;_kP-wIvHlMamZ$E~ zkg8b5761L`pE6>=8RetZzXFerksG6PpI3Z&iu4A$GMnH%DRIamZ?kQ&o&T}B$P@U6 zc+Uy`&JXYUol+d#o&lXbbh=%VQI{1ak0I3*Mf8dodfV`>%K*%N=vEz^0A9c+a>nZB zXH4=17^P%xm#P6rr?wC9k)d+CmWewR1O2aCl)5pwP22I)bfd(qqsuK5PGsSf^a;WVxu;t;c$E;!~&j0BnyKW=esI71Gcel}Vkihb86CCTd(#mR8yO z*N@ZqWt|DC@0O@)o8w~m{<+x>A!P73qye!sK6`&_ejVbjwaFj;aQ<)QyJ zKQWP?qxTnhn?5_F3LdAS+Qc`M5hM&TXMeM2{ zzgr+{-)m?2qPYWcSjW7?Udts1C%)Ang+SQ#fKjL?^#?4MiqsV907W$T$z^1dvD z)?{iAM=ySR;$$@d9-yXQw66#Nb-7pU)+V6;GTn(-nx6p3pglU-tT4Y`-vINxC;C%k zWl2>;AOUkg8HU)nO2uu#b($2u9#*c(UZ&M?k9(#LA{~G{3y+zTM-+YE0DoKTaRdsCarDPEeOuO_FN z-~nBmvnflvST%GP^DVUX$PfO0!~GS$q@FrILI zWrbxfP+nlU_1cjV9v^+ICdJd`Ncq}Q)=uJ45IZne0sB)jK#9b~_tjS8lEo7wnm<5Fbi1V2-Rf>&j6?k&Wqbq>UrW$LR5f~`SnDga0+07@YfiN>4NPdrfVFf&^c0}hr^L`@fw z?_~m5ZmUMu$v0Q!HHvuE%iDUp?E$*^j={*+D|`_hU|M6fVh6uBUiaIuX3sy819fS2 zoh+gi7}98jcwiT*(CO5!J8eTJtciNYm>oG= z`&z+N7FmebAibP1*`9F|(qec_nU+{H8_m;wz5eteCWzT-c^bv_3WmQBghPr$iO5-B zON3;cVob?ft32soiX^hQqVkF?$1~ibSdLd>s{GF!AXGp!?dI08bd2nAIDQ|%eMW1S zseH0<)e94E(AMf_?@f&WApx1Y%2((r#bu9b^XkMQ)nN6yy|?d?4(~i} z#()wbZttES-Uwn$cV5QarkxG0%i@kQaXvzVQR~hrhSyP8yB%tSwi(0@N!OQ`lt(BS zXl9X($PEv63jXrBl>jZ?AIkO1eR$eB0HA~JLeCT*_78V+LwUqnM@Kt z@Gul7#}+9=+!i8>MblHoo|^$AM5bEj*7RL+ui09fR&hQb{eGsi$0{J9;^&b)a`DgE zBT%H?5V%ka7MHl@*2Yf*5O~SazXUMA)KCgzyO!6Td=XqW+FlfPBk|16j5|_Hx>9>P zZGEzvNcbNgqI^|4Ac5h^^fDodg;^8G_Gou~(qPKavVeos!IL7ZCFPp@+S`7wLtT2xRmuWm2VQ z;Uf5TSVRaGo*9fy`>n|pi6}?H?`+UsU`uF4d(Lkhwue>#bTrAAr!$q#0fj&_k0cXq zs@Thz3F469+pElNYkHp#SfE+#?|RSNzxr>b)m;-?hwq+ITvBd12}bMW)-N?^Xfo z>K`;A8F$5i)wLZkJPgR>#liz@sIt(FJxx4;aQB^YpcX!*mjDEp{_;LwdopA;0eUHE z#m%^o4N^2Ch1rS(8IncFEF>0S_=I6x4aihZB4Ik?Cwt^fMs(U$r|NSKNX`jR-LaX? zFRpoNtlPGvM1{7Ri0M5NSC7|1cHH|l-3mhRT)A+rt-(fv__P|wt334H3n%)hxA$gb z`D^R?j9)}OlI?D5wHUt%P)LF1UJJ71%k(pJPpn3T$-9M}t!NPY41o7)>C??9Z+c^_ zV&iq#HZ$Nh&KAvkoji;_*Ec8@-%>R_k>l3m10sZM5$|@oBTLf{v;>Ia`VF-HBt7vD zh8Fi;$fYW;-%cxl86xr0!QV_NjUJC|OORIGv56J6#{<~_n4_C25_#_^+hFu+B?Q&^$^Tsz;84=J2BOl~am3PjN_YT-b! zfiUsEn+w8y-CHXT#pR^<2~+Jg?OCTOB&vfTfFE(tMOe5yf47alnLxfTLi84wbKi^-4HI zN{?RT^SeIN-W4vHr+R3M%k;+VNM;Pe{=$+crL9h@rZc}Uo8WwW9}mD75-smIWETbL zK)DQowU$zn{j(z>TUdMT=3a(ArW-u|M-9zWHT|Im#W(e)qmF_RWVOM+Q{ouvsK!7b zbXU<%!{7h)JNo~j5r6}N9Er3i@~5&G9wEv#54HR&z7%XsATn z>@88bQ6Pa0b{=*%w0RuOs>jR6apLcf2+ZUc#VJ&qd(CePHv7#0}lKVo?d zkL$)Sy>?K$o$5P=O4W#x><5%>o*%0)R<|t&+JQtzv!s zMs%r=9p{w%%;Jd2p6oA?{cne;TeJ0-k@Gp|JfVQ#rCh!5qdp8-Fm=zpUAw&r?+IUj zgSICw=O;XV|EM7wdF^1;YB*Yf)U~^{@=%@=RP1*4z}ka*&H8LB($CK--ufL;<5h;` ztzTt+fUh^cH3l7^PmJQ;He_P@UI@O1;hx0VR!s}P;*Qtfa zh1K|ugV>K$%EwRb_R&aq%-US&?QEbG2L81<>}Yhcq;RRUM?jWmI(`Wvf!KTk_Zxsx zZ`vb*$IK^u11L|m2TMq~t+{(oJ?*f#JE93i&&V1nw`3m_litO zuZ)hYFEe`o4G_rHIs!=#Q5`tg6B!U(YcEUs{0*R~*OCF7PU`uzHb({F(+QZAjo%+h zHM@b8&#eB%u43+dv-7|-Kgh}1zq3n7hDudgYRLf+83>#1dewjOo-tcHgqKlF?`$9H z{=RX{{q}PWl#qo7?qzpvVcPEhGux;D7;j!4o4hp_8nrn!wca$1x47SZa#OA*(t3D3 z-`fU^i{;3;y#L literal 0 HcmV?d00001 diff --git a/custom-editor-sample/media/sand.jpg b/custom-editor-sample/media/sand.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6b86e9ec9e290917a168be115eb0ac1c05362a1d GIT binary patch literal 84773 zcmb4~2UJr{*Y6X0C-mN>w~$EhL_q091qA6$qz9DVJ18Isp*MjbNL7l0QbG?+q6kKT z0HLTz5v6;BPkG<(yKCLG?yy#J_J7Vfzca(0J)1eh?+?G103ZXsYkB}65C8xYegMBe z0ulhE#3Upn#H54|Qc_YfavBP9LZPRorlet@XJllcXJBAr9KL}OpgXRv0#19 zhaJY!kRE{s{km)+c|C)n4r9oL=^Bp^=S^n{@LbTD5q~bpeAE?}ZQVl6`rwH&qoU4> z*8OqA?1-vibv~u%uQ&KBhcaS6V_<1?f~yZ~Dw}nG_#W zPyAq@dqjeURrJY~X~ZR}OCZTl6q|?`s8!Emgx@;O9>5od|tC!ziG2iS`Mt+&9 zSzR@Uf9X;dC)BH7(&a76x1`D*o!%6ILu;}NYbdNlVZzzP_{;C0DlRXnYA#y|_pL}v z6lb6pB$CRJ*T>>2EdQAACaWZ<(lU@YkUA}`&0mLZUX$c(a7Wt`%(m&TgJV3B9M<>H zgU;pHFo8P~y7#7`kLk5)Zc0wxx~}ar}<-Q@R_}FqpS$8>{|{5 z;bC!Q?Ij0k@3H)$IwnD(>ka)6^*++7)+#g?Ubhq!Z1~$QHzan`H4j$!>_?ZM^Hx|- z!s5wP5k}~5Vc}NS+e-ZERMCg$DpXA5CP|w{{$2OAK^tuHv!$@|nr5jD-`pV=$sh*0 zxWw7gB0Zkf3S@oCQ`^U@{ey#{%2F;h{|bZE!(BmzF2yN#^)?_fZ0+gSo@~HX{$uC6 zxCYtS(WHL-j7 zEjz+%=oy>3_bB<8GV7JK@y2+|wTDhvgVx;gyz4yOt@32GY7exr1~Uc~ zRM&4Hssh)i-=?LP!Q|7-CP$D*L4Op%KT1kDLFqcMds!&S0pAkuA<->nk|TK5P{b>m zyZ@ymbD|#&*{@Bb%&m0*JTiX^_z;)YDR5&A|;8?^DQcShs2 zHqK8E$8?cxP*#H3#BpJctfpmEaVo-so{AI8RibHzE=&oSJHbq@mg*hX-fbVh6A@VL z&d2>@lzdpt>o1|Q+TDu#$5{TbI;3Cd&xo@W6wfw*k6>;P>>Gh87)!Oi0+#z~4_fY2 zDoj6o{w%cXg@pO^+qjM*1vwv@yT%>i}ErMg!wg_G`lqAB8yuUW-c42N_vIDIzpvc4F47vs@Og^eIZ9NYiVf(RW_ zLbkx0R9B;1GClFcLs^0FZBwxcA^2Je9b#Shtr%RAJJqykXtqkBxB^KCR*;tGxkoRh zp^%m_7TsGVP{^v($k)|bA;w{&C$`3an>Dip^Woj1tWS)JT1d|YShh`&1aFEs?Tlax zRZ?2kMYO6K44g77u&Zpn_1l=;qj{ifBPeMfNt#lbOzF@l zN8UYMozx!g3WolPNr8f^ww_PK)$klh%?1x%eKNN3WayJP(j<2kmRJ>#GEA?P zEpPFJjyLxc@xQj&DxEZ+Si@NUm^AB^kK>K+^M}=LRPUt`Vpipht8w>5%z_V!PeBn@ z@G*}Gtl+}h% zVB~q8K2@tFM3(DXLxYd7HS#%nthovzlkP|`1wIhWNh=aK>mpP=z6e#<`M7s)kdLWL|3~1M zHM|p1^%g5c_1I78fi9unvaR6gg&VzX=6}W?c3+tgtE#K5eH7j%y_62^k;)L5o-pVr zyLurIf>)1>RAVH~2q9SM8cqbQXWt^7%hT--v$*a-J&n4Foihn#DZd@+YA0NI-I*}= z{TY8=1b-^bW&psyHHy)`sZFi3BoP@6e6?#aWZ4f-};}g zzpMUBG$6qK;{8=;Ak3JmB}{l!LLn&!02s5i=>MOMCBA6v+Ze!q-SgsFLfih_@Xw7d zgulyw9{EDJ=z)tud8Pc%_y7K2jQMlhzfQa8rGF?S<%}^G_WxD>yYY+(<^R;@UNkfB z|GI#&`l68+?F0}SDGmYviAjJY#DwIT82IN>AV`~mUqH?YY#tDsUC~0MrL(iU{C9p0 z)Fd*tX(LPUtC06-A4#&2zjp<)IN79ce7k~c!`S9qtEh`qVVh4jO~?LI`^=HNFi$1d z@2+LEl{TvL(#KkPgGlj-*M%g1v?s!kM*ZHBv`cH7X!f=T1Riw$1`y2;z7hPP-l3qa z|2;^dWjbDzt>&t*iOjL5*x7c{d)Y@c#r6gKkCk3+oqZ@#_B-kL^!ej*?6~Y zc1u6{uR9T!ZSvx-Tb1nLv~l*r2ayrM5v3PWakkPtWxM4?LNA()v(Ce^W_%0j2L=~BH96^}i}?4Z zWeJ~6(rkTScfAV#7VEXT+ucVb$AwEi@g2P@`NY+7x;5onQgV4*q3Sn4rR`PKJX#O14;3WAviaiQdzf3V2K_P8oFRf>K)@qs*s|vZVVQ)J_ zbkFrQ32W_?{(8l@^wy2MsSaC>XiROpt;YAb1j`CiI$0frvXbx53fjTauYV~j%zdNG zzCR-Z^scF7UZIkY23}_q739_|) zx3*dxs;2oNkI;cHM=O1d8Qh@mBr~i8v+-e^XOVC1bBUXsyI7ub>UNuJ31OwnOXzBW3K8;PJUa@u!QjFrEa@O3lH_VA0> zoyR>d?-88P@VTgmVXN?)hwU{5wjXQVj~Pcb=&w*sj(p`dy(A%e%G{#&6uA z7{+gCo;$2V=oM=3pq?L=z9q8cio=GBdbde819!0Y3Cv18R8E~e5N%j`B!t1uM~5qY zIte#9NvP z?PHjw$j5jh5sDyjw=3_S8!Qz1^j!2F`6jJwUn~=eE&W>Mhv=bnr=D(`J`x+&fuoyo z-bqWRZ^m!nCMg6*JlmF+yFsBZ={@2&eT>x{$lLnZ215AvgLtP%czyo}y@jtdt^~a+ z3iAEHbTd52{KleS@=1l zRz5^5AZkQ>CTWG>X(}Ky+*y{{3c=O(v|$N7Quf6Qsk1rcGe07;r)}}0iq67V8bLu4bAukuZ%GW8I8UpQO1_3h_Y ztrB*Stx{XgebGm{p?){(Cdy>L<#*8!?D}s19NYW+%r@$_TI;V?D#cgbSqlR#b4hR4*?Zg{tDwtYW0dyR zLeaaRe)OtBlCH+6@MhljW+h}AGl5_-rM>d(G1C>riA9||%XLMTSKKPAuKW3gZ?j6)WDcdjxhh ztd0;je*->V8r^6lalPbaLt)@k|AL?nkem}?Hc_l&03MMIH zx-xqL7j7Qt|LL0!-^Y_6{t9NVg#_je0VD2W#c;FapXZ+_!SlW<9ACm2o*upKA{@&M zAF8Lki};}!XQJr+Lp`XQ&-J1!=X-1i{78zucU?OMvoSl7kKCJth1`#sJf>5V&IDG< z3q>$9w2U8~A($+*FI}GhA?WnxYDlY;F_V{PQmXe&G-Vxsk>CgKB3DC_lIYngW$S$C^;7V$V>9b!I)A>c^Y=K;o`iP`3{I~o&KnHf z-eYE^k)KW1ufNifQgo92NASt}VMU~10i=Zd94!en`BPj<8F#{ZJbpy)-O3v%SS~hYhzX@p(|qA!&cQ@4%zB%Kw^?8Ol1z zHqL~$I<-y3m(N}I4&>v2*#aa>gb*6CVPR3W(tV<2)8jSh&CbYzP(q~zZ8v3`RH9T< z1rsa5Nw2Vkz97V2-46_4eb~m8L1}`Y+DPwhR?@%a^zKcKlTLz-J-4MPA$@PdvTNuV z%Yyshs#dStJUV^bE!%;)okAjTdd6d5U~sc$M|ZO}eHk|u{}FaQeb#s>&evEmPG*#@ zu!rxchpV};hb`|LQTQthp_(Rr!r;F?xE~p~ zs53VVi&gjt*<78ljWb@F&yIj_%=$RE@^a8@wm%o{@U@LqFq_Xe75S^yM#01Qg>buj zavTY?W?}kK5_&$rNFq)|Rq>Hb>}6d9GEdMk>A~eU%LK=KlJrka97P)oBgzOg{nqIX zeFYPno(->bMyr~AChLIEU`w7!f?GE3M@TydFDI8#W1-~eQueLz zbA@MdU4$^ZRPUS@xO1$RPtdZW2`Q`y2tf2#xkzF!3XlOHAg68a^e2Dqn_1r31^t`9 z3S6!|AD_agzOHhk-WHq#)>`zs9wjz)MfB>Bf9nj1@`(FR#q(LhF9#0?#HHsFi+t-J z2~t6~b3c8eirot@s{EdE9~!sFB+bIkZ&%LiRIGW#o6xI!w~A6mKJXx_;i|_Mql~2VlJ3YL|NbAquajeuLb4{%58DpDZDErL~DS3n&ruaUW++BHe6TO z8?$Xx1nWV3=^XY= zGS3RaiB855SjCjZJdw*B`&2LAAbYJ1W65AADI4J;K%NfeIT439pk)d_sbQReYmybF zSKY_xjeqIXLhQ3fW!B}d&^Sy4rur9 ziIykY*!&Q7dp5>GeW;AH$TM+t2!+#mFuaju;-vmXMc1??=V*w8{06l6t9OzMsTOZW z32B_d5(K*2;Q!&~%6>1_0!Jd4n^9^KT#DVMhFJbT*j}~1gS1xcS^n$ zQ)0cv?EdqPQGz0!vHMNzpiO++*YU`5Hk0yooFDYw+kc=ROWf)D+iMQ|+e^!btlt(v z!&w3ZFMY>BWgRSHY$N(IlG%IXHMlt%bl9)a_TMy!8}STJjef!4T5>lvkviC)JZM?@ zHy{jg1JZyjjai5DgvCv4v#R(ZV;;?=#*V%l{E!J5Mnt71+~KeJTAxQ&iG6>Z(#BU8 zJGu|x!v;lMZ&}2Sy-ctew3B~KH1>;8&{#7C{pN@r=!d3sRl0h?{$O1|P3-^kI;)o0 zm8RbS!Pbzs2-i<`!~+TG7i3E{B;y(wHY6`%Xd;SKDh{q0tOK=?sD?a_G^!BdY|rdS*CT85#E@ICgZ+jG6@^wS78a8;0trbDhKj&&SkggsQg~x0V_i zh$~d>P_yJ}0<;A9xy@&8p|aXxdo(dHm>T*_AZTD!-+OQ`j(l_a$N(q zd8QK<_%csLSLdJttfq(KIN>!9NdG3_-mnf-x8`QW_#(W2iB-@^@xHvz7slhH#lSyQ zXgr=T)2xK>8%89Gl^_cpjdl_qTwq1u>PB27ljz#)#0al|nChMdDrPTB3 zd0GDq0+n+s2W5sIlGrd^Lm}uwtM-Phaf;(_@QM;gTW=4ei zoQ)SK=X86=;wX301_Om2t;6W9pQi@QyC}ht1Q#|8S>{=c#w$Gt>3zxPOJ`l1{lCa> zjV8>$Rl$bRP@~4&JLNK3JN?%V{1=zeEe>|$b*7K$Ov;5$G2}vX@T9vB1=j7NSE6%U z8calu`#oQt>HG!+105f1OWooQ2*}8|=VmEt;NKM?|4U7FSIlx4lrBf(d>k_qjRqdj zJ6idln8_awoN`c3nemi*UrbZ9O!m(sgGf)SR zRsB9IXQxWZm(;o!Ki77ZN)+j+n=s_~bN`QBnyGs z-c7^#1AIM_!eiP`Qz++I%VY%W?eW`a`Laku?cGEQKY)QW(ORJuhNN^zwJkT;n!2;y zfMEqZ zBA{uFgQe4OSg!fFM5srHwB?u~-P5lt8a&2%@Q#T1;UKayFlDQ6?8h+$`X zHsl)6$@>rx@z4W7wNDwnz&N(fc<6x8FT*@xA0|?@3#L#DS{HREU^$rhn~;QDr*W%95D>ge(eTbP$w-WEge5PEtaA^f8ALk(6q z>oj$PqT!M177gY5lZ=rSeE=&8rKXj%Ai#c6&cFCZw6G* zgiArqR)49X{U|h1DbV6Gt#)qiBEE0vFNcYYBii2R>E~8m4gx~ufrv4I=ELTsEu_f_7! z&72Z7PBV~$9dcI~BR|U~gO?$7o0kTZegk|x98lt|EZ!5Zzca+{4pq$LUme?Gl!?uU z-ok;t7_7Nw@wd6i1)U2K8QQminPjR1xkV*T2j*~o@=UuL{I|z$0dBu;0c+&5CWy#( ze{`w{EF*hEPRIARluQM#hoe}{i*{e393uki65QTG zUM8fMyP@BAf|9R49vczNN4hL^zp#ObSh%`Qwq-U94#BjBgcZ}*HFMhzIz5BA(A%g}Q!}EE!)BfVokS>S zQrwN-0LVUd$QI7=q0^h7&-`s~1+_86LY&Oh5*cym)H7)b00@}lqfXLaGGxXBFm5YbmWvj@0YlJ2mTjqu!fg>1 zDCXv8m3Y{LURI4NkSt@777@Jc&q)q~Cz9!dNfO0Kivk?1*tB zMwWRQ#(tC+TLA~2_Zr2V^np$VAm(S<=f0qyZ(Z*}juWZKaa{ELHy!!r^#U?Ea)SiJ z(v~^Lq2s>+R9{b0e?4VfB%+pl+?^8YVDVj%iH8H{0P2)QDZPqeG|zb3W08D{_af~F zk&c|AGn!uJrzPIygKBjv$4srpN;l=i2~odJ;L+h^Y=N%CDxb@7HoibIQq-d9?CBgU zqRm^CRV=c&Zm@K>vELx$+9qyFJ+E6tT_xSu5bBLYr(YV9KBNNvY+{h+%pi3E zvzWGuP!9dD^L9Pe&V%kUHM7V427Ew}(4D~^hhT!FLu2bSu3s(8HI2}Rm0pmWMIr*g zzX2I~bzg49@~1^?k=6F0+20`Nxl6>a20oPxbq7DCE%Rr{Onrk>Kh@QuFWBXkRfI_8 z9B0_>FcW`kXoDKh z#^A`jR1wdsldO7VNsCy-CD)KV8^0+4V}@gi7XE_Hof8?M4++%5`XZZc>qbe!dk*I| zWS}Pnt?XXRYDDV1SOD+59mh3~z9QRIyd^|KfL;pCV+Y9d&y{M6#nXV*P149ys2iBQ z*MLtg0bj69J4p*-_hf*!=g#sbAX3K;%lE;+fKu$F+W6crS<`LD1BDVTst)3Q;FFrC zwiEg>nut(7gr5wjtf1#1O7YalpU&M=bS7p^tM>*YgWQkX2JZSOfwh8o;)Z208xLYM zD?4v>p%@dAuGzdTm#of+xbD^|%&{`rd5I`!}fh) zx`P4K`$q_F8e66M$zNvMrx)6%T}9k&xxAa=w^t)e4poC*ca+r!z7kM6mZ@0kP&LJ@ zNo-lk06z7m!H)8Hcdp1h8m$FVcu9OHdnj;J;N%flRA({w3Z7JZ>#>onoXX>{WU04? zqp`b9Dd@*1`PjaRq0q;-cn12KEQeP>(6lWdI1~9b!{e01S6EFGw;VkS8d3irCi`1~ zkAua&^>TGy zG?D1XbC7*Fx$rQy`~{wuHms;=h~G`(59Y1ausNv11AHd@67o1H2 z_hHL(fqRM=#}Hq$?22J@VcXX`LY!6A^-RQV5r-c8JTCKQLaF=oZtDBzt=X~ zaBAidf8@4^?c**l-eB}MJZWaYq5skrQ@e5M&NA^xa<6$tBF*(>BsqmU8TCGq6~`|+ zC9^i~VmhG)ZH^D8dgMtb1!T#fzghd#g;S`}NheVXMbKz_7~+DKk7M`^aOOD1es+9* zdq}j2fzTFB7sz1b6a=I81<}4wG~9Xabaf%&tDog^KVTvyf|Q+=SN zBPWOD<%NUc6w=97?BgVQyU4)fHFTnX+}EgD8q-cCjae?m1B#cy97e}P<|u{x5DL05 zXo%7Z6WJ*&UmwHmNhc7kA)vmxrMOt|X%`p7wX28^-IX&nbCDm->>kixBcqn19fN0W z+YT9_2HolDm2>wgWJ>hgDKfadd_F6~<%6m3pPI0j`TIv^3{9Nr$duTT)b5Z>3QV56 zYtu|-GZA2*ON%Li8;c+nPGTySv%|!5hLe5O*J>v55p`Ybs6q9}zKl5$Kk!Tw*cly~ z&}n%jRFQ*EK{u?>dQp18g2< zZU?+!N|$iY>qc`UX<`DDBM(>}nbw8CLCSJ_iDEkZ*q7~5{BMiB)?%(a<9L)=_i!>h zhOYF0ixikK6k6~pfFhVTbUJS=)#g6trU{-1b~%G$m(Ibw?5j~Dx6o~8P8D>E9#+8m zH^7YK+M*@V$9jK2^m`YI^Od1fqXwk6a1)eV!a62^_53((^tePhg&T3ClPdu74TbKK z)pB;yq_qDOf>;gJbg6VEn}$7jP6m}ND47E#o3EEpdN;|1raeb!edZ_b3SRJ2C6s>WcwVM^%%)qLUFt-> zI(aziU^CF(-lHWMheXXUyoQP-LSPada|sLtFl@UOgU2 zn@CXCuIT$k%JlFCZ7|u%wtawYorf=8{}+Tc;fH}$j49PQt8(y)kyuT*X6)^ zoTH`Woi7rJv;xe{>9@&3^GwWioOlyryRO)3G9F?Ds=mUK%lxTb=b*AT?}_%iHz5>J z*4}<-R#n2%!AZgcHr$;KyR*KWVI7F%I`W>oX~nMimZ+hmd5h2Z#=z`4c)8~~@WXV* zE`FC{mD0V`5jZ%1uSS;}@vvf59v>=);WH6(q<@i3tcETw{|#U^;{PG$>uRg!?7)@i zdBW6v67yjiuW;bu96?#q6(6CSG_*y{Gj%xiTvGS2(C6eNHYa35PdDO#4*!SDfA?{t zyKbx74vpk%I2{*;*hR-)y$O`wEL<2Gt5o&~Gg6iF8xTKh?=ccgekdde{Ha$(wXf_e zG|(s*`UTUgiBcBC7)aYM17i2w*@t-2ahJ`!GtH8ypT?hIR%s3qmAmZ5M_WMV&--#- zNIHErJ;p^#cW?H0dZ?MHL^^YvTI|saz;s04&3#MJAQbtbm@;!E8~YmIxxgrEISI8@CxzA#lxT%+aF+`ZRgUKYzSEBW zYN9ojnkEYZ742h4jc3OYY$$S}QXvxQ12R**aFV>Gpyzsjk=|uLJcfoG&EhAo*hk|l zcT7OT5-H18Qe!M8nUx0^;-u~I{F<0=!#LNrU8yMH_e)EhJg^)pB38{+(iYo*Kv-&$ zK5CwxO`$CH#TUqQ{{56dr=Y5a@GYXvq|-s8$GM?G+_3VlM+NyZvW*p^)2I4YTSRQx z@Xs_Et4dJR^Vj^ydZ+zV&p+LL~ub^`TD&jB!$>|bhvjBAZsw_*BeMPF}} z(E3~o(8CS0M_AXeVP6{a`3->HC1izf!2T~V^9lSmTG~#1i3UGTXmt)p?C_*9UXgYWJo5z}`|gR#gx**>ae4+!eRMfSI@ymRQO^Q5X&4)m*jeGWD-0@3<`UsLmrb zzTAOv@2FB^)Ch-g+sLy@m|puqg5MQTz84w+dihg!d7N7_LA>Y&7pdfuL|zd)BR0W ztlV>+NEu|ZhnoiLP}{-4}Eytexrh8Jb2j^WCQwRYpGP@}?@f~V)A@e=Q!COq@= z6``+9VKC-AmGJh3DedxweOLd+Pl*xhP6hP;wIz zyUf#7Mb=1nidWYmEXH14U4kuzB)HZS5))h7TwG_$x*dXC65GIs?xye#K#6|9*|)h1 zd-UqOAPSu*ro~|M(UT_v762p zO(Dnz(A^!DvM6!fBXrfxeTokeV|*zZ!Nga~LJ{*v2_S24!%@-t0{MNhGbopHe^Fo8 zKI*PV3TN9lBkv(LC%d2pqta#LXX1GxAF%s4D#}(D5P=F64fba&sAjUFiljmde&i}( zIz&+Bn+bJZ<eX^(tQ*Sy;dS5S%kU-?ONRS$law-(pdf;sqIK#7w2*Oz#~ey zam?~_L%;5Kah&~Y_lN-6RiG7pw9c)xhok4!bV=ovTCmXv#a1c0X9iNY_kROo+;_<& z^|8dKE8QHXj=`vT8j5ReX$9w&mle^!0huYJMJN)N6l%U@o-y{JCd(pV|1q-}cHSB_ z!cSkYp#}AqlG3_-P7{3q`I4>RZRySkw>N7yeqoe#-4}J+NYxNSl{kYWr(0=_uCph* z!hDq?^j~_zZ@>~qw{|8u)?uBGIMvjVSE)!Kmf96pD~tX>*QPm@0`UV$1prd`_EdA_ z9@y6sD!ZwKx>~!9;)pY*w0fZ-@k9L6Zhe{OHMavrCekFqIfZ*gqFx33$UV_ItutRG6rzQg0QcML_sOn2ec$ci3`agSs$^1qyB_aZ(`n83_+&^v)tj@|LG>IZ3W{(|;lBl3kQ! z5rq*LBh4|uH!p}}Q;Jqkl^gIJ10v?I?#gP1(uOBIu*Q3$O<=n`MEfJjvR$s3bKq!n zv!N7vMf{wJ>Rswx`4nXn9tZQ54uxw0U}lZ-wqs62`D>B)QBossk=HmK1ua0J4!N98uw*p;y&JBrMlo zql)D&VKtX$mldnuKa&78lWgkLn&y=#2Mm{iXGZnJT4zb$#Iw>{N=5R^-f8va?@z|C zM#C)G9hmN#@v|1h$4H`Ce4J~H*PMw^T#DQLpQNuFMgGGl0x3mmT~--ok8j3Tx%oIN zWO8e_^1wlSi3GmlDXeH1Cw%KnhoAm1KA)+1Cxic!R^#hsVy%#;F~oKE;q~TeQqTMR za1sX^Cc-Nkcs4i->aw*S;HGLUt40hw$!w)_xKX))Lif(u)NOYm%O=b`o4UTkSM6ZJ zpAqIaeSG>0eIg9+|B`t#Mkm#Pk!Ev1(mE27{|{4owK-;{zx-=BimZ9v;tvC-v61Ko zkRp)Ui^WY#;ToNA*z%ZXlDsU(FYv390BUa`O6zSB>qUT4^BA{|Udu2f1r`7)`&?VQ zEo57|i%}L_NA{l_NZSsHvR1a;^<|#Di?e;x6?|?M;O1UIczdFq!MDXkzBF|?BWjzw zL!l%zPt)WUR}p$7#ScmAqtk#?y`=Q`OPu>PYxYEFvg$7}1h3n4w?u+^j1porEPv?$ zDDr}5Eg5J-j1#zR=$1pvnUYJVRQ#nEu@sg+hom0ZBD%fY8y=S8fof|>>fEL!GGPS8 zMW<>b9Y9c9^pWa&J?{f9QxB2wm%hxUF4xA{?1jhdX2cWt><5bO6>Wa#+V{QrHq5y) zW-8~*z^dRLY&5tWQJ;J)wjDkK@Ji*9)IE){cSw9>S0?A(ppmXKk2uG=~Jy+=w@<+2dxf)&EoatA9gz*#u4`!SLx3g3(_Q{G4l^4j@8E1kQ?B5 z?Os)A>C&%#DV2nmA2AByip6^V2}1Wo!!qdNx1id`$?iF$u`z9JUK zU5d#?^LnyQJWU0+z&zMb3q4YK#xqdASXkj$?NL)ALjCkNCA@J;pD7W}gH7l=2eERe@W~ryA|RrQ-W(4y`yB4nizFm@Wj-zUM0Tmq-b$c#E8a- zOhd$EtY}Al0yKqyFWfxU3X;XL-||uZew;C@96O(LUF4ebwqNFb$XC`~2JdYbGaeZl zq1cIuqosj7`Ot?2QeFzGMT0@UcVyv#$tx&sMWo!3wqDvVap%W)8Z`pBl$=@)+%%Tp zaA)gcdq*@p{0K$#0pqENbN$*_b4prNC{PAo^P%9{)d=O{uLfr>2Rtu&?+VA41r!Ww~%@p z3+LhEt&zLiZB&ocOB+nNIY)RYvCk-kt&oMp82&|O_4?go7#8x3l1*S9)Em>pxah4tG0nIF>j*8;7?7BM26>p1#{Zg~?ZhAD8=oZCfkm}JYKTyP5J{xlr*k-j; z)MOvX^_>2PjToE2lKX*0l-?HI*r(VN9IdA{ic{7L3luzY7Vt214YUcX*p?;#x!+qg9nG$uL~-T<+dAq0evu3n{rS|eHD}8?^ucV z-iKa|NvXg4GFP`OEM)~FDKySm(7vS6it#(33rU)w;W!rzdi4^km3FmYA&9(;F>4*k zzRjo`(K|^pN>_ezg%+ZS2kW*iV!JgFSKlQqw@heF>aT1=#R%J0?x)Q2D}nQ>7k&{@ z6E>A*bf!K{LQ#tt6tWiVD})w^V=5Rd*zVir>h^3osO!8~dtj7=C0>@+BTRSeDc;k4 zWjIm8SIYqNmY21@E0&h(;e(=L%WPWC%-4;+&A0pA6$a8YZ$EXQ63;zq*!& zs-i;5a51Y(=K>^6pxZnqp4*)D24FhE9HqU2>g^u(Dva5*SBjT~gI&yA&dk>}m+4t` z&T#^@7~Nm+>wt@=K>HIL4x>4zOa(&QJG zZ5wOur^>CbMdnb=R@*!V5y-$JQwp6W?p&pk*bTxzii8;+ri#D6t|ZnKQ;``K)2z44 z$^pv^NY}hF1nx*B?4|CrgUg=PS+|x8>drB|u9$zAAdaqjdV&&V1fdzI8hk0|`w~gNssCt(Zvsbkg47g!qKb%mewda@0 zH#!4#(PS;BTDDv$Yd1Re;YV_Pkmk;3;pmz~U$fn=AeGxj`LF{BTPUihK4vWw%=J>~ zDB7~+Y^qI+hu8V?=s}9lQZTkWXpznyBM6^#|GLIwg{kS|7SmU7r?+L`+{sEhc;OJoHHNbjyp4dLDh#}_jzDTjiVrjQtQ!~;k`okuK&KxEvxE*P!+N?HHLdtv!FH67(PxfN$2 z(}V=6PjuDl3LA#=9UxW=n%t#ZE9Cfb!38pR3*hx5uVVZ`=%jG(Z7;W=5F8lU-?U}l zjr2J{O)5eri>WGMi)f8C#8HC%t*%;lL!@C=$?>CsIsN7yBL07bRS_qu)$iDd2QmG&)J6dPZSB z*ID)h)s6=Y-KVtNl|_A<{A$woUieGFSTkJ$Y#e*tpFJjy9QB;x2&)UJUSir(k9%VY zu*G@!eimUxHNZQIdQP>pfxGCdlHUfDPPc7r3TY%iFL8Br5nkS3RY(@=-=$cP`gntk zRK6E=uX76&h9f2Ri|qT*Jx+4&^ai@u!r_3CY}=A|O4X_0=zXP$VAe1LJUYo3h=vL^ zDi0oNjj0y_Qh3MwJ%=;am+zm1g12r_TF0Cb$-L7hWP9v&OD<%sn5W(-aGi@b1* z*f}m>Fhr0m@e~vi=cM7~F)T(U_sQ50(8g_EUCFwUJhd?;-sRnDJ-4@Mc$Nt5pmOqAI_w zov@)@e6&S6%LeA!=kl^-1Qb+{4#GLNoC{R8X++T+bNA^5^O>@xLUaAq`#TSz{BOj`IU_WHBD4cXobO*2kU*fFHidV3&?a)TYn1;NtlE+iB zkc2ikkaW|4u$i({Bc!0i9GW_qLM|6A*2SJxzU89{UZIDd6&oS!KKnKcBga^OF}M~? z-`3M$NU++MwOVBOcx)=6US@$JRt@jUiDq!*Y7`Epv;HNU52f(1#(XWS^RD-QZ|_26 z(-jlbBW@kAX3D*uS`^F#&CtSI?xkm^QiVLuMBH@v0|_ab_#uq!ZzVwTRj85YSy^f4 zZX2%;Go!Dq-KU&Ckb*trqJyXz5Z;rD3^t&=k9$xH9(oa>a`(*%b1WwxVmw!6+s_Km zXCTk;TrldWwDLQT_ArQ!Bs?}`S7HMuD^yUajQ8ME)FBN4g0&obNgpUpZJP;BA0k8s zF{^VHAAy^wK5BgQFsq{qT{$P$Z$Mx3ioGzAKOZ62K(8M6pr21vX{Zf;q8L&Flf(8o z0?YCh>-VX5txAf&;tm?DS8FJq16Ns1jS$h*0V8X zSVu`1&U?8KEh_Rd?*qLFzcydN9M&dgLnX$Ouz^BeDl6JdCn${L%FVTM0T?}IBoqUz zt_#uFwlWVs(+#+LWlV^$&q4ZC>az`_(kkiyL)3i-HMxEL!%jj1Ap{7$L+GIzdRICK z0YfhW(m_zFNEJg5EmY|pX-XB8CK!4LQ4~?6gr=ZEL~u8U%E0ljf~ zOHbCmjA{({hfL9Yb4~p4O&-7;c|V=Be4@hM^~GZP8n%UI)htlg zLCet5FxCh$xbtqIs50SV-Ec3bBaZfQQ&nkVR52S9c39SCM21}jQnEvie%oOYm%wnkYD)7R%oOBV^z7Z9Nm;3k+K-ev1^iIR9c01h9=MvNI=4~0NeRRBXKFjZ+^k+C4`jr9!Ul#sDmppe{;AR_`ZxBOc#yqR=us_OG>Jhl zHQjJ7eS@fz68%L=zAAA$GCA!L2mU!?qLC9nq!<&%V-lm6AG*u&tW$0Z`y}{9{~0cR zi}N@3Vh0 zllrX-NjVZ4X|3}ovErHhsjQMl;uhq7^Lg`SSI?{Tq*vZ;nqvI1sfR{iD2mTrrSi*| zoV?PX@E8rezr4>MS<>{n9(L#2pIhV?Nu8}#!?=U!rWK{(jJt-G56eyblMhZgAxQwG z%`oZQVDz)pMGR%9gehMq`r%KSaA8uv1mFL84qL6poTVmdd4s;jA8{&Z{H&1p)w_t{ z2d^ywxCQWl6Tk~A=c21qSboOQmItgMvnbvy=8xsF^>Q8V|U`QpKL z0fL^R9UuZJ-JwfVbxJEq{eBnWEf4rt5^GII4U3nXDoJjx0xZoPqmTn&zqHzo>J8xR zK%`*^K|Mb@IyK?05Qx%0%azj4l0zj{cI%bgP}8%eOL7*RCQ)aUGL7THyU>rVo2UGI z`X_3;eE2$Phf0A_O2Kd3YnE?*bqjmcp;hc%!+6R9De=b-o#63yonQFNW4+3YJ_!9R zp$a)U@_M^$`Sg^9CJQ0-Y}~E0pISRX-){1Yu z>b;=IQ5ufmPCuniXe>0}#05j?T5wF+m+4_=-;(}gEy1U2lUW@5OZTGf3IA}idYKa7 z8v-s+g3m3a{Rf~L>A8+KaZKOw9PeYCo!ktg57H!RT>5>#elf8uK*X8gbdD+LON_Z& zrYFfb8qr@deewBvyx8SvtKX@90*y~L?5~Ebf7Z=e62DPen0c0X_oiV>9HD_;TZ`82 zyuh4C;o24iOQy~`Me!E#a1%=1ResGqZt=Dme!sez`n-?Qwz0##_qxg%?$mYp!bg)~ zR!ZZT@qSe4&>tbeIWN6JsxQg#nPY~?-$vJFKZmJ5Q;6w3XiDSr9ZJ&C8dhzY<2Y|z z8<-Ahz7#Sw;w||PfKxJ&`_k&T;SKJdk57bs#y4jiUwgR@)3xux&Esx$(wy}Y0yA}G z+k3B<{;;Y_V);F7WVN)$a8XF?K=S5L`SYQq-~RwuWbaxmA8V9fD;{(r^%YfxHKH4Z zzX+HO#ry2mMx9FZVA*5FJab78)OEpr+_8&eY@>5_aj;1K#14klDuq*OBT6Y-T(Jzg zyuGWgHLvoc*vQ4(zr}1%(-gs=IrgllxvYqv<`NTC9`_|EG=ch&@h|QD;70ffVp^$q zW2Uaj-gUx=A2WDowrrV2oxkDz2U9N-_(Z5sChA9 zdF~ETwZEAARQddbr8g(R9&f)*3{W0&5f>!b(M?G{5fYoo(0?PSbm1sn7_VwSYRY>G zo#%ZN5-*K2&-9$3*4;Vz!d7kMjx6WXeqx5nA$^H<0Z(a1COp~&e7r#}g1Sn4{yj4) zb>*zYwa=lLOT?6N>7=pOl$&);Au{zvI7zXk_#Xh1qDC=QR60Re4)hBehZcYYJA6+yTB#jy5HMr>c$vZZpg7^>JQ^#gv{ zy~i7v{FtFmCnBHh*(?}s_3mexpkvJc3&#{uI>=*Ar1PWBORqJSdoQ!VRw~J`=l_Mv zUp@}{5i*4|r>4D~fs*nThQ48AW6QV_Z;uNs+W!Y|l!@C1F8m^71#Kr9ubL>2+W=0c zO1@~ouQ9c!msQT{5-& z_04G5XZ(Z06Pu-B8|hRqK>HPKv0?|3r)L}g}KA?)^JYM=O$`J9-j ziD7`fKSlT@Cmnck}});70ppPI#Si)AH$m}P_xIKjl&Ue!oo+gFP2i?dnnxdalb`BtU6*`+`s$KN7Fa zp`H3sic~MPf(UfV_Ai#LBz4kN^9dn->r%&cS4)Xh=L%0vU^heMZBAs?>)iw*E1Pr` z{|GgV@3NHMpy8t6}eY~J4&x3lRVdhllN&b2izlV{wUs6$hOl%9~nl7 zk7`&xz7mYSu@ixd@3=H42+zNKtYsacd2$o*YGIUi zSw!bRMr&1UN_w#zFD=NG#Xt4t=g<_e%HO#ToW<~{xge3vcbWdKAV-O1*U_~N@sZgp zPygrAj6KVxSqCqt2hD!2fJ?r%<^I7MJuRXH{lnKp)*|Fjmt_W z)V9@8dbzG_-qtKvO?jOr zLxKeF9;Dow>gL|2S^9jIev2kZ&9T>BxHlq&`Fm$-{O>DyMXw&803#A3%z?>1cZluo zmsSIMiv>RgxCnB2D4%fe4%VAmw8&23tj?Q>9itup=Kj!(C{rQHR5{JM>FrZaGYU!F zRKR;-G|7JYbbv02o>BsoC!r5=Xv~{&licn&S4TBq3DczUSW_p365?u)9Oxe{-*PT?QIGTqN zchMW{ujUt;^0Gp@CRmX1#67EsS!XSbm8OoKl8Ty}i#IfNd>5nUZ=rl~cU@r_YXi?g zUs-)05JK85y+}q?xEYx|nAL!sk7B-_-y0zVL2(CYH}!mmD?u^|Yu=F5#+zqJ%JCqJ zwgAMhI-g;fwo51QKFL1rrqib%#j2-L7)(4=s`#n5Y(=e2j84YVD*fianWM83J!Vd zwVoh2J=ntQwGoR7{tYc_aQGXF)|wUi{TNl-^us;)QMj}Pa+E4Sx=P6t- zF^u!0_l=aIWq(1;Be@LBQ@LU?djJDFl8#Z_O7z$46C;IEgn_&p4^j)0n74o7lnL;y zFV6h{;j6MLF7kWHW0`~%!R{)R7z}tYr_(A`{?h%_$dH`XQ^;46_58hwE71dg`H@N7 z69E<_x2C)62)aw7G^PlUkcMi;t@_Ex%$th!mxVb;XE^;YHjFwXB;f(=U&G`%jwL=3 ze3X$ndC(Q$zNbi~)o&7#e?Yq<3=bf#hcX&9c~+^#k|?MA4oiB)qaB*wW-0r$g6e?q0pr}Nc{dk-Bv|Thkn9OjrQ^oj`I)=z;tM}dn zwrb?H%a+|#b+y<VxXL4EFW?A<+Js^sYK^wH&q9C-PRm&bvb0Z+gp%uGD{aMjbJ!N zq4t6!bi1TRZ6-%SKZ=FN#>e5u=XeKe_Tb+}dHt&r-$VhMrA4?SGPPQ1T_fGw@Q~85 zMs^~3)Qk6NqyG&Q^m$4N?p`)q@y?oXmv6I?$;Mlc6m|y6BS|AF#e@288oW!QR02(3 z8)u%5)7L&fRlmlD70wn`@$n7|8m4~hnpU#wy@Km9jQlk!{Qzu!scGS&oAwEchH+N{ zxJiOLlT}Qy99`S%y=Hw&bp8`er8DX&+o-W-%_X39Hrs+MnXlHsUEK~Fc)^^>mGmIO z@TM9i6((F#1kB`b$fLwgv{$6`JmMI$rXTfQ)KGYsjCzM*av`&Y@~9M(KaIHT?X$06 z#^EozfyOA+|FIv4@-{0JwJWfNi~MQy`p-)Ac7+iF(eZ^vDo9eDB$q8kaGR7Kni%c& z*&Yo(rnXt?y0!#?3tRwk3SMKnQR$e>n;q-@y01V!HfDI@RBI%U?HSXnv}5RPMr?@v z2hQ=r6qw(F1>7&pWp+IL686at3|Qxww&Ugpo%%aaUlzXlW*Q<9Xevq1$P` zM31Uz29AdPUow{iAR?$mVW|c?in6a}usID{iDP3#s3C6&V(v1}1vZ)|>C+?-nol;S z*{flSWlHXeREV!8k0I=`F8{=;2=$hrX&dK~EHmumt&J|)9>y+8 zxOq_}WeSBTf--#K?-&Zo6pFuND1c0Ya)AGT3dPYT`TvGcAQTNGg&wO*m&CSJaEqAw z(q^vBs_%MJ3+ZEf8}#mqqxo|lC$sN}dB->qnE-Ws5@~m75;B;yy>jje?e8u&$eG;h z(JrLDr+$1KaUP&E+rlQd1|}O zz|5sw>&=x#Ks@#qr{k>&yRL~L8$%MX7|*$pti3@mIi@$0J<^(r{Jo$4aC%Oa7d_k- z-J+eW{>DkW!W(`iru2yxI)3(5OxOsZdW>=JHT-9Ud{e$Cdi-Obf-nJHWKr;_weZ@m zY>$`r1{`A~Ze3t@1WTosaXx`3V18_63&9$xJ&VWh_?}U^f9!=CwI1Ar^Q($r73AIT z2Tj=?+V4);Hm1_1!s>m>!XxC6ys!XS@xXD_+M3n=DS+l>fk4^{Y9u=s&5U{HpnkAD z)wO+}z_my(S7>}|7DM0CX1frw*M3~j?qn1t^suTx^mRq&GRQuD+CYlXahZ|#KBq`W z$HxPX+w%$?plT?;aDVN}gjqiXT4ep|-D`0LZEaF-&&$`rmHq^2V@p61y_3S=7ggVT zGX{QP`6b>Rp%qrlYF*&*LvKEhWIR1+5wopF;X?8nzurvZy}uAEy}_C7#b?F(hmi&b zqmss3r|0f2R?oeVP1G3nGJpDOP0c(O5?qg8$W0;Jhm1 z^uJciw(-Mf7iB;2j+_{T8_VXeNQ(yqON<#0r#o-s_{A#yhac+TA;~&ln_h-bLa2${ z&qn9}0cbvImw`C*^Eo-Fl>qSa%^pb7pMDZ6Qw%`bv~4_UBOL+1Z`s~6CZZYCh)(tJ zc-cw8vg`nfU#@`ivKc!NUMlwtn%jR+6ue0;U5U`GGG^m9cQUjEQxa!B_|QvfWU0^6=UQTLp7NW^iMN2N~uy>D;0g!-03m z#*Mr%$=vG0YkPnxdlX6-x2Di(6Oo>3o-t^;^Z0AXs1&`e0Kak@K`|8M%5?jXcCU#% z0T`rp<)Np`__^`@C2~|nKdu4#v6eX8Oy1mQ zQYY@!bh>x-=3%Rj4rm_W+E+wQ+lxmbTymUj&tv7IH)oxo=*Q^z=Z97?5FAL7HvA|* zwILUR)Ej_M4fynL73nD5``laj>!O+ku-f+AQ-%7s%Xu!FZ{B+D&DEGl60T8=&NF`g zr@~%lCS7%IJDhU^mWV~u0ZQb3ruTC4`>KbcLt5>=220ty`n9w=``qR4nH6GS5gp;M zJoMR020lhJ&kubTPEe8FZYp8BZ?^&UUvGuAa|W=e((V5CT95{^0A1f@7>n7Hr6>J$ zglr{@wZbP5SV<101?B3^#1ezph_cI9dBxpC{QpQQ^5bAa;NEaq~&)Qy$1h8lr3T{bAYCKx4)B}vXw$= zR^s{je{8cNq&K+1M2~T)3TTz!fN1d5!v&u~GjUdS84R*ZBUokVx!@ys_rFpEHX*^a z__(#s_fZ?!Hn#`5HO`M>f-IrQ*9!EA>klU_ayx+YG3BybD|_j|@c0#k{Y;3@0uL|0 zy=OBOwJJmx3AFZGoAPsCPn67E>ZYxk2 zm~A{D9U|`hRT{!QsxB2ecsA^q0I;~e6F_sZ0>LZ`v4B3-C|20$U4Vhy=oy|D4~K6Y z52ZHNaC$ob(F!cU0=}=yj89MPAN(yPO8V zaX_i(x3;{02UmyMicx|54>Ll#;_F{Od{^&uL}UdxS)v*Oue_S?VJesg$6m4I`E)wl z(T~YawdH8WnReoC=X~Eu5zK#p6ptc+aC@iMy_i6^E z^1SI`^E(2V#Y$bZ!?S>gum_;LT@XD>>2D34E=vhUH@ac;0DmHk-4H8NK{*pbS2{8-`p2z#0gBo+p@67F$)il@=@5g zo#MEbELL_rJ76kBme=EWT0#P*I~0ET)-xwvdFZ_JRRFI}uZuAUm*ulEtx~y@>2}@R z7v7i8-){quVBi&=99*QJKhuZ@|53G;cjhr%*0N$f z%y6eo!kYgHTqelCfU~UdXHkDtN93BXW{>-8yj+Z6v1aB%%ccB@3A!&hm8&E2u4loj zbn*evmf3?SQNHdaKOk^l(u4W!%a)W!nMDtsIh>$+v-p z+n%)L1SZRG=(Vp zItyy=NX(!AhK%a}h(N~BY4=-~Pu7Z$0S1Y3bgGO>>q%|%c- zR*pTx3sb}DiWH}746pAhO~MljGDYk%I4@vJ%UsPM z2-GYx{(L?-WdZQ+GONf)8@$^-B6&1i!qkxE<>SK)K|2^O=|<5Pk63;+-AQ%d;>Fzc zp6IO%duUowv5LUn0)n|uw}|aq)I_T{z>mGf%Q@h%nLLx{XAH#s`s31LFUgzi?#H+P z%_CLYjN|%?*XOg#4BYN$x(t9%^N+}OPXrD)LgTXkuTlb*1W?df4qgbkAi1gdJg0xA zIJ18+bof35(I-M1%{a3Th||T}Az!7`_&@SVP?c}eU}!1*c%ZQ%Q^WRxTGMAfrVNq9 z3vD#W?HT`a@%*yCL zAq2B1LeGr`(sIB95J~HSQJzqu@0JzAW7k56e8AYZw{=QkqL6N zuG}{Z=B`}QEJCN#CIp=xgz{3~cS~nO_+g&}Rnsy{US4w@S|Iqqb5VezEXsx)MzmtK zWtjzetmj1F8XuL%co%d9pN>F*#CWEeO3tq#H3->ekd^d@46d!xD$(ng^{eG~hXb>D z@hJcgcN_A~*+x9jmo34fK}UUOG3bG9YFrHa!LtfhV+I|^uoPwcg9PmzH)$@{)f=Y~ z@vd>MdNhfr#m~Qr0p1XRG-AP-B|YmXvpNZ8xwG@vw~q3m>Oz2GJ)jZi1ObTjVliz= z%q$Q13e+7V%9VS4Iyfb=rdlf?iwD&gTvXWu(k;F<4?X=s0w9oregf*@cX;*Ruu8-g zWEqAR9KD5l4pVEg2VOLX3UdEz*7dKMF(Sv#u$DG6CYUuyoEE1YyvaWqB7bo#t{ls_l79(<`U>=-B=l@fq zM!UBHMtW~7FDxK4L=%U2RW5eR4Z-9%JJ1QaGae&g5#y%Tub_lV-s)`QcJOGFyia&5 zs3^C+!j*;pSNbF%U7~hNaZSH628~k`gzo%E$vYmC20a)x@hWFZ&Ltx}{SsD-X_^=7{w7To)3-Ry6k4L}|WQ!PjcZM(M7MHXrl{8Q0 zuQg=0Dkmb26lto?kM-nXB8t8aP7!NTnP!pCPc8c8A2na0g!I%!v7lU0Tbvs$@HpMR z)ttfZNO(0=m0F>Bpgi`YMDE98@Z5(3t%waPM$`Y$HgK-mDOCd>NAB=mZbw;Bzt!Se zyGle0PD{gy(bHQ$NLBi*+7?B~2tzcbEXE=B+;>Fz=klN^@`LvM8*Az+;pAa-GZ8CT z@ZH#IJbJ@86wwwKv8J6#qJ0=ruh(^_^OPV-4VFiq@_HY{s_$f@O`3{We;tTK)QXE* zfN!958ucOqV+8H3gw)SJKWx4eGQlk3SI>%!?ik%fP8%fa2zmF;eDsP)WL2koY`8(> z4;`eHFtgBeFqL?9((-l0_+@X?>u*ehnn(22A^h_dUD3;EXsY1l`Ri?kwHZ_1a}b2n z&pSD!YCFj|CO5b;Z#YoQfQ3e{rH?$(a9tST`rJ%G$VImt!|Zk+-ePb*{M6XgdfsvJ zY@B(W;0T50(%ACe7rnG5RU`v3ZkJVg&CTpb_F^-`3a+|st%KA6`UVb($?}<$so-gV z_!dh#Ie?kF+XfV9f)_#$NJ%RMjU-~g3Qitwq4z@f!=^PYSUP$*7Y$X-0dTI;)yZMo zvAF^lkt)lvsoRDdN4q~a18gXj5xtdH3ItnL$uDxao>0VyH>0KntWGicR@>UMc@gXC zmxb_PEoI*=83-uJoem!tnqM~B*oAZ>KJn(92*+6#v$11{(R1U2Jr9ytMIc=9H287a zVL6~5Cc%)adu@PRW1a}J@^-ovaJUsuna?9l@x%P<2UbS3Rgj-1^Gq1Gc~0^ey}LAz zf&<I*ZK0p) zI54tvA|kbm#nr|Ky$MncvW_rh@A-FgNw$ziCU(S#+k`!{rv>_!`kFZ5g7f_}z))2& zSBcAQxF9X>3u@c3Z<{XifuK*1bI5qn{$)u#*m&rb_Y3CALv};<`1|&BnJ3A!+)o`W zUo_&wIXyU@9V9{8K|;+V3G@C-8~Ir9gL}xTNsvDaBT9$0kuqNB#iNm@=uLGf`vDJd z-e#d`8MPu=!QlBTBd82y&#AWVL3@?`i9VlC_03bA$#xTS${fXof)=Hqz50_qv%Uw z&5+jlGOa<5q`GyKmVc~OuD$Mtz0w^mj^=rL?Hd5=lF**03wMqzky6=k7Pd9{@?iaJ z6Dzvl(7Z#fTTIN>RQL253dsajQ|?h$1ks7cg8;s9Us8*qFv8)&vXkD3oGX7-nAzUK zg|v?B{mpOtDHTB9PFZ;JVpH1f-3B%bJy!3Kp~uyCc}M_7Xk)!f*+%rwO{fA2A*O!( z+F5(6K|}(eto)YING^T4S1S+n`9mki0-x!vqDDmUy5mMpj+vt%;tp(UeHn}ap)89+ z&c_Z0p%6>7^gcIZYnvP}RTk*j*-0fDW-fxQPP!(QtdW1JGJ9YDmPrOxY4zjdVI1o82w)iHTU z!d6ny{z^XE&s{?tzR<)-b=~Ee2&(2$nmpxpF6QwR0aBgJtYT-osr1EM5R0vSthN4Y zAw1ETrwRl(XvQ3{q_0Typ_wwGRF=o^a1vP(v-9IX$I#{8aqP5Vt!$TZcrV)t= z+iUKN8y6RmK$)bDi>GC>k2p#Wjn#E^8d#EBH zKCtJnn~ffwZqebqT}zw1ZsJ>5OBk7~7UYqKsQhitI$P~JlkCy-{?O?j{beSG*FRK& z4n9b2S4p#-*TI9ltW2qF;@-*PE}CS)NiU&H7QuLr#nUlJstqc@b}d)6uoYz`hLrDv zhIyZ}&tdQqL3KyZ2p~D*MU_J7;+U|Dy$H+Hkl~$_sOYBh@NcqckSS@FW)8^F-j^>y6mxg!?CT6hue8)K6!T^Z1)+ip_+{5SC zK$#h8)jKsBK*{eZFFq?d1UCBP2!86Al)!Vji#>Q+L*lKDl-JRrL>hf@L)=al|=Fxsp+wK;?xtAdvy(MdKPWfiV zD=e`Q1)bfuSfq#UwnC}xc+^s?1KkqOqRy?1D>;{1`M zH#kiDrqX)Tc+cdRQ}LYB8}G9XPba)(ky~vpokoLQejl1b*3BtVzm-!prH{g=g7|#I zxdjbbAv)OJ|Hy0+A_DOJ*+X8q@&W8&Ve1ihau0mE`*QZ@%F)puBxyD7q*oaiJKt3R zh(<(NPGD~I_K99OYT)4|@G_G0D9zH>+S4ngg}efp7PJ543dBch9znDFO|A8v5hXqZ zc@c}Z#nZW7Iim-5Sy(G3zMcP<5#3AO}1O>8AQC z28A-e=AKA>rfHTI8m=S%?b<;y@E*2TG4p6fEPPr9TqRR9@kH%7LKO4GrV+Z%!X-x# z#8!>QPuFJAj}C^8p@a~k67R&MDdYW~rbl6l*?CMiLzhUbtNRbvqv^cJlV)wXs(1K) zN0L%sbUqH}&17g*A?jwtbAwrAZR@Xb7H=2rd@+nzoJ>sKM_ zl2M<5FX?hNKPIHpz{i5X?_M{^3So`J*tNf^RW4J@LPx1NEmRKH0-5|#7E^NzHR+Ws zsU>Bw1Hq-W!QSjNZ^*R59ERiF7JjH&7ffr?8@{&3%>sn<)(hN@D&24mQ1GCyihs>m zS^-BeL(_2Xk*BXRckm#6>|FK{_d4{2exKerqspJM{s#d4B$!$0a^zD3uW9<51Dl0g z`8u2&2wvZ}u4wb8WVnt4U@LUjJDx%E`Y=*mi;&5~-V_QYR7&we{t`z13NzmoNsZ`9JqLu+~(QJ|kH zx{--aSO>UUhSj9qNFi<;gsn@K*rvhA8l~7%g;HmA12YHwf_;HF0!DghJ5&|fETheo zgjfh&3j`=7%1>o3)D#SgvnV0GUM4gR_)I{U%#%JWsG(gBTZO2Tun1Afou8{4lpniP ziQB1nSPG6KXm^}PXC_-fMUxFF!o&s`J$_o!@w69!F@Ucy0^2H}u6Q3~GuPw0ALl+H z0jYEn$^qub5iiz7n0(jBS>p|~Ahayf-?^R&e30!aImw`M(dYCa9z?DEVB<>VGw@*& zyRXnKQrcfLe5m4>5!-Ut%vMsO9!@DPLn~>jZheeFjw{8%K54>T`uJLx>cySD+5xF(ghyvYJ z!d-h+WUzMfjaSw0yo39P^QfI(2X@VKH3wmycO`Hpc^UB6t3ookZl`pP1e2n7swvep z#9Tl_S!o%#aT+@1P|3NtvDsrJifOpL()}hxALzTS2fkoY7_kM{=Ty}%VB*~|Z-9+4 zZ?mmeRK>cSiI@e$k(0OIY7taH@stX42jNH{!^I$&VJIUY)8q>021uR?qVw^b|1mM{ zc@L1zKF zsleNHF+=NeWgwtRN-jYedLX88h%d~`KrQzk@Xeph#3SrX;G9;v0$TEy zNbEK>sJupg-sr<5Jj}sD&o97tX&YAss6nktJeTa>Ex329$~9w=w|_i*!~_r&kM1e% zZpzYB07zy?dCqLD&y~?Xw~vP!NECW&cx??6h#paP z0x@jpT>VKsK=Vq>2$KiuC0EPRaoz+NE3flNR$+^qpKuep-PGB!Ix~kjXK`*$NI9p8=dp5;9ANn> zOu*ax6epxkHnCAly#IBtE1xVtCoIc{pr&1K5%d=gMx7YMR3OCt?p`lRL}!Kp5JBJN zb@F~YIvv1-+!Wpkh_Lilo4msrm3LtftSv=LL3{IZZ%|O9ZzQeLn@re?+O)96BMk#8 z8L>qhFRD0{Z}L3!Qc{giQcM&1NHuakwh2a5O{ei#g&Ot{^F@W^cqwR4j+tLPgpPo{ zb7o`}2DvS1pu(`xw6%K8HRe(FH*}s0ZFiM5X_VQK2|yFCm5kRe3I=6yX&?TwJpg7C zcf|%NH*8m^fILO5gh!rO8WlmEDmou2nuv1C%@` z4z+&d+T&WM41&B5W(G$GbM5ig(9#TD(5^s6KJM7q1hf|+p&E0Dmnn%RsC_=B^GV9> zw)~UK7Jc{_Sx?{)DeCv=vUU7M8|e>|rvQ#ChN0qk6vkTR5oDh?|Lf;AShD%SJx#8) zfjyjL&FHW@-X-JK?ITC(rOC9}v3ck7gS^OrlF*efblWk(nwZ98`z{93Es;eKaku+S zrKnO@O1V|H$VDYP{rDDS4U&J)b<3G?PkIZ-)t*G770&?@d> zjVJn&+Lp;Q+PZ)ht#?XPq*7+(d8-n5sC6Xd(4_5tHuEdkM4U_Pit3!59M32>7~l94WK`NPe=nxc=k^36h#)YZ~CJ zH&EH?2=OKTPfH=>NeiAUomBDXZM_Cou0Yp;rpUhAsymF07-e8*7D(Wuw+5-E<5ko0Dnw zE-iE0p{DQKV}}^m0UPil`&H|}yH8Jv%yT9nx~&W3F;tmnG5_Zw*&pOqF74})>Pi|f z_D>0Hjkg=jYRY5o1nVLoFF*qk7flOe0BB=LobBMuI{32{T?r;(c_A-fSPtif{iKq2 zX^?#gtJA^Fy7+9p0%RSf4H>-CJZMx55W;@6-xJ?D9=8Tt;%`0(ll}3F7e!Z2rRcL` z{OD>0#uxvJY3$MayUiQ8_pLrfaoCG7{acRlm&>>uU$}ibJDw8lgE5He!R(~ARXhFI zvYqZXMh_J_X(v-ErM|r>y=n7EB!-9*esU;#O(nMgP~FjccDQyY7_`{o(2v>Y`?Qft zyouzXdHPaeP()XLgOfw8hw|)BS+Fekq|}Y#Cu-}^;YKl-GV0FOVxR&Vo5=AVQ>>xM zODoETcqtQoa=uLfh)n9)y?;7mW(b5$?mf$@ko0QwVyDt(rcXcFb9DkHf%5JIV4hkV z2nh?xy;YlV{z1BD;@l;drxv}=E6>dNh4a#L9e(_3s z+{0Qkh2+VfuR96W6RV4J4j-SKk&M7#b33}b4m%B^3{@OdW<9RaKLLns8*gR8*zx-< zHvowx3SPVNeV%!9O1?Uya-lm_Uwck4(C2nw^p341r#&j&r@S(KFBgo6hrE(#qAxAO z!MH$FvL6KwC+Ja-cxGrh>14=&1O|4nZxVXxn5!g926?Y?2+VJ=A%!;I6GT$V$(|N$ z7@aUu*wJ8*>`wg$6~ODlC*h-DKVL|CvR+hZz@btml#SJ(@n+Y|F|h_UwEEhzcqMFc zdR?+=M8uBs!qo_z9E=&jrI1>xwRcZOTQ|PX{XoCe1+@fY&!)OxbZhQ(ZP-olIt?b6 z&nUQO(w&Y3u`OYMclU$3cT@ueb=z zY?1=SOXr)B{?KAh{cxGh@YOr*V$Fd=0@vjXo95E)D^G)PUPvdUkO~Kdji-{(IKV}@ zES7IU?F}*sI<1!8*E9}tWn6WWy$#mGml6HC_(Qt87CZIq90!wz%=N*c)r7)4}FR@%Sf^D`$fduE<1$Y?B@{kBS83Vtdp@NC*>2tGfa%f+hpaZys-zOaN?H3D|en3-{ug3>ik?bqbvmMp7!$ z?L_OpPDFGPE$FY)*M8$6ov6P|a*eE#MO2L+U#hIf&<+pR%C?i#=k3=-9@RZyfrAOp z0-YN7Ke;eE_hzBJAG&b`bzcnGJ0;o(;<{Kk^Dw_PvB?H(V@yDm{=k@F``505rRtC2 zk;gN*2e)1*uln;}TC>1$Lh6;vS7U-*8&hGxC}PiD@fhW#Mur)x=y&7_^q5Wup#&Xf zI;4AVs9;TV^%+aNY6M74J!YtPUC5G{RyBuET!?Zq2ffJ25FMxC;5&(^y3t&vr=s?X zL8*GUezgH036@A$1aSByZuEHb2X_#sN7@6KZPL*WKnW z8akYSGoRDA@5yGB|J=0T^n^YbzoU9~I;Oj*?))u0;cPSbUJK`d(!p#LiK_p$Tu^r9 z!h8=9@QQxp+a0=Cts>CX`@TWl==nS68$!jLfKGFz!d-VVP%;}^pCLZKJb1P(YMKb8 z)8Vq2cRs+^q&h(yyI*(=qL|=9>0;O1&kkov@;f44Iai}yPnw3g<(ggzdHw1{pN_(0 z9l;|&;kI=GOxY%V=%8DUWL@~2wcqYy=pa=q)T^p!wB&9>8WVmjSYO-hFnrL7jhpiC zvhyK!qGHVn)bvgG=6J`}?;TDc(uS++%hpyTi6~7Ap`|EAk=K0leckX;m zZfUjEv!_fl?RKKId{xgWo27NqM8rD!2sZ~l=|0GAonkE+(uBmeF*n{!oA9PNgbkmL z(ONe%A$qCn(b42N(m74iyt9DD>2M7aPLT?15a8cq;|6~WuR5gpwCM$w;jAw?d8Zjn z)&EvbKl>lRofD!o_)Q>9?T4%6Vb+!xNF5)W5@_jDdfml za+9!Qy}|v<-2Px4($&4TOIJ8K;5tD8+?M>B9=tMPpmF0so2kwOfK>cx#;k|NbN80Hl`_a8t(u%Fl?;^M;}l_jG>Hs4WawU|cf!=vxWjr&i%-{?#qNPU?##g$ z0s#0tCIkyYZyx>JHOb(E2)L#_Vl5R%Ph zsi~rjfwxap>)!2pP>&3C(pm&}9cbyTmE++n%_BHW+Er)+RWuXZgG^+du2EwTyR?<* zj!Z)4jvZNyTTcpWAk4FVE|`9@q17=(V)3DKY;MtIQu~(to@?e__R^PpCSi@sL z;y~mk_m>rtaaD%d*FNH?_Cc>c?IB9cWfXeqr)va549)cNh#Bv>Afy75@S~K9Zar*G za}Ka^8=blNY3CE&g}0BW#QW!7&}mYa@BP5 ztvZb?2#zy2PmsS6GUIY{^lt!wM;+L&Sn_FCD2JMX*c!Y1;=4Awr-LmYPn7?SYU(ZWBdkA!8c6{ zg=mshEP0Z`H^1%kV`53?kH4?xSY7Be)>e)MCT-Pz>RsT&ur+FjJlNr+$7tJ7O%ICH z{s9!5&9LR*IrT4|4jjg_J<036o~*U0N3NpArAr3xXtX5wVOh(HG*FxvWK-b`-bXixnSJ>-Gh>ABr4gLc-!;_8x3Mkn4 zWeo4JO@N}1GX83BZfq@ZS6Md91fKKPXLy;hiP_-Kcl0Xo@SeA(P3oyHj}HRvpB9t1Dzw@3-Y))E2*RSC@*b_7ouGJ_z`$m2*c46 zv#n5g$pA{b!@Bn$EW`7ljTxrdBMo{&JlNcN3K)5gC8_{ynRQWo3YTZegc(o%C||Jm zGbJIYh{ncQ+_9;oz2nkIc@V?cp;=z46s6B+(9wXsEK_Rtj+#IWT}|N;`T(f7NlVYH zy!dr&kI6O~_Ou~<0Q=`)JXxKn2l-Rd8Q27}wWgAuI*P>24&As`MXQcG-Oe}C4-8PO zWHH+f=`bUSqiAI3t_ z)8*?sG1suVev+r(EZ)%Q5eIjjk)<<^Yt~wNTJ|l3Eii|Go;{{IshocEMrRkUx~^ycrqUPn}~xbjL|*PYbZC^n+3!UTNm(R{l7pBiDiL~PiZX}juR14gw1<&=;9~4G zS5(g5a|+e->Lo}v$A>Epl8Ry=Oy!!&+ZmE&G|5@eT(=?z0#2Q&n(w_m;i3Iqf5Mm7 z1@U2a*Pj&ia6ngRg}`>##4^2=b@{Z7s2S>M_}i78bL&u2 zDfV_-E9Rd1igS}_Y}>+0$=)Ooiz@^GROzZzdnS=6zNnChu%opnH}q?onUpmX!kUak zdC}3DshQn~$yu(p+`Arub$^11c*oiA-ItCBT-%m6V*~jQ*oYccxKhf2(dyMdgj zomdk5-D=4*`TYArGUD(=VbiXHkdsc<Uab+pb^IXv|0A>-V7}2VLIEx=}j3rKV}hXxIYUxV=-E=Mv*fS2aTkxABGk2>=4zb$EDQ=3URpsFl+JPaXUN7#$-seLP~ZyT8Q!ksZ%cW@^;% zYbQadTQ{K~JM^FzP*X)E_4r{2DWAGQrZQ;{jxY2drofOQ)^pGVGV_$;W$9KX(K4;i zN2xYDX-GMlXFBR0oT2Hcht9_Ij@;?(ED_dDzbm!}pZCBL_Oo?mC^Lgax@d}MtagQl z^SXU}hjG2vr4qpnxbCYr>HDF1bW*lEizvj9Z@a&6R?Vl8{n0bYfM0uRq#16OFz-Km zfDJjtIQvUq9yf4n_s&yqRM#$kSRV!TNIwAkh31|%+ZB5duSFJqWIY^+gJ6Xd@AmyZ ze6&rD(k4kpEd}lm!ux~f<7<3Qe$jz_jDpJJ)KPl6R=iMtyQp+^>oyfaF89uOwOsy! z@LtsPwo?@jtM+FXoh5CY2j=6OuI`DWVL|iFAKUKG>Z4=Q7Yi1iXHtd)MD(R2j9izR zA3g-8kKKMerO<6y8!V&+@o)FMwLU^^1pBHIS9cfvGepJmxwyC`Rf>h!#$ucYZ ze&YijGFL>>aw%Q(1f)4M9|pta-51izwuQj1;w~Ml1(=@+UOA;$vPE*u!vH?JR?}Or zeUG*pNoRBTH=%^$t+g;FEjnkPsyyZut!BNR*(o)J!!jnW%tgvj~4^- z4K0k=!()Zny%No?mk`YRUwc7XAD>b~__Eq68&Z94{-T4-tCE!*?*0hf&h4~hJr_<} z>Dh|Xw&txcB`2~q9N^3!0|8_6_k=ZiK#Shup^^vR)>o;{88AhYHIvf^MG{1a0p{lQ z!s`*}igp8pR>3#>4{AYWbwEPV8@UM8Q=4gGPenz=%@D~`VU!u6GL_os$u1`mXKM+e zCy2C#&OmAHL2fcRb^K_JneWilTlw{T3q896XbgMC^=sjJgk=+(r1#Ui&5uu3fEFY; ztLfKEz8lt~S|)+dJ(|?x03QRN>QP!-S+>&65eT&?(8b=7RkyH_o;K;HJA!Qg0Gu3* zu2o~{f4|PRF+C-blB`tjPD~@muodQnC!dcQ%aM4PUEbrtE~h&+l=HXvxO>9-5YmrkrQoLesB*GbV{waB{P&~l_chGHtl4h! z(1^d0I5eIa6z{AXG9PI`vQy+urZx~JA|Is~pOua|BM_yaj}4+~L|f~i#uM(Vuj38P zW1%3K9nGML%QmLS+rdc+_B#Q&t7&C|Ep59I8THSRa5LWP3V&$CJmB9ej4^t69iAj@gr|OiuIm_NR4iEx;x-^pHg?QEbRkEYGxQ zNrnGlCo99+BU6x3=m}|n{P@D`l2_)B?X(r|+aR`Ue?C6g&RB1f`I} zbw-6tIE3JqMHXOIO_XP*qWkN%=JVA6s5Z1l%WCUj0ba&}R~roWxbS<5!_81;^~ZSh z)&jIm3!O|tWo}W{w4Y^)k1EtH$;cobT2vuM0h$~{n#=0#jM<$?=}`wDnG*4(J0Ogn zA>v`8JYPdOB3TG{Row5lT82=gsGBf_A$dvZ{hp+!p#MOfI~=N~u83zkcrTpn8S+Zn z7dPr`{Vn8!!hyQPGWG3CVmML zQhu!{djW_;AgQIl{&06T0luzfO^qD&H5q^mnb~7%E#ot4%`2^6kJZ5lx#YHLh`gNy zw-m-j9IY^;uzjK>XYLHFr=VQm!bx57raMUzEq2n1z$Jl*Z%dj!a%h!o?u(yYf;{>y zhmPQD+RJz70!;R%nDFEFcZI!u?11u=eU*ERG+D;6K)L#dKt=^F`h1dWN7uJ21d<-; z<)h?pha+h|Wv`2qJ)rRm%JRu_L{g*~d6)ER3WVllL^KJ9){(B^S*sI$F~3f`B$x z>Y1X+&cVBnR1ubNY?X-3qbW5>#GClq&91IH7uHn%Wg5OVC^4rvFe^f#az9P`mkB@i z?mtYyBM1)&m-HT8ZD2hqNfE*>>RB;bv{&Y6^G1?!bxwE0(&f4TQwk2D^roo8R~7xA zeV+ga{;Ra(6BH9A2)wzU_jqs`LCER#NZJk=UXTbz*$54X++F;&4npfy6stZTad5YM zojbca-_%P2CV-};>hs2r>2ZO&`fCW`O#VOXe2Y!M{}}~Ys;q`9Sek96XOP>NwOxNk zhV>$tNA*}fv)t_jcqxHCvJBrl5yFp-gw!ui9{$-~m-@UAw_FSb<(>DE@<^-;N;j0`isZDsmJ@TH?-t4{^zF}G z$UN6wxxpVguhkxyxAYkn>`VU&^ZPH7iD~|2bg3|J=-W==txfk0LG-$!G+Sb(R(yb+ zW^cy7NOUQ#nJ)kX=5z*9v%h*mHZKtR#N*fY!9*-$2In)=zYT0_bC^~f5@O@MpQ4Ru z)y4WAX6gqou|C+jPxh7m|+1UBcVfUElV3NZ0BGo;9+i z{4SJ}FLin9zwzknO4fT5@8Fb<9YzQDQ-4A7W*DOaHh@pOYB3dBOiZ-y)#~HFBzW@(Fhc z0Z*aXiSq#$cGnLYbnMH^mx4}iv?i6wsHRE6ABT43FJRI~24QxN4lf*kevdWynU@-nA);u8g&*%;bs|3)mmcRJj z7$TC(loa-BzZXf;VlP=8d)zIqA2-%uR{Ia2JB&mEr{sOLGrZIQ<)~T9G)a|BVS^~e zcX=|s;JC8D)u`XEw52fgoX%wJkG`dMxAnrg1|1W9jAh@u*T0shm84^|vTO-o`|j@d zV8AUiXCNUvc7^!!HX~F~hYxxym$T1VUw#4|?jJSa1XN#$sl0Z)-wO>g{P0x9Rla#U zdp6j3UhPL%@0JjfC~!`t0l&=|zMWtsqAjOUQS@9su-JvD$IGo9J%8f=01=1r*yLe? zFJY_GeE#PHhG)eS*wlZ2+e)q(F=0MC`grBRD&W5tUrE4FeT=xbJjx;qO3r}#O^@)j!BTUH0I zXi19gy{OrBHZ{tt!E9qSmqf6NSIbu7vxon_ooTc#-(k5*2?)sKRtU>;G&jPnO5sjo?!##Yw-ZTmrr|3Oz1JZ zT9vM3<28?!iWSzHXmV~!VCxipEJ^lVZc4u2Fr#D(L2x@yg(Q%LTNi{#+OP?6bo)+l zauxV++ey;t7w(6Jm`GpKnUrIG9u^hqaZ$hL@kEoGL(B`#+h-zRQRYzUPMJuy$LByf zePe3}x4QAniNhhG29gnr=N-0U49AE8s6k=BuLcl<<0>@0J9K2@^(9eC>!tJFGB=RF zktnIdd4GQ}ibE16Fy7P=Jd`v_O4bdcM3exxa$Ep7$ggX85Gey_fS!je>_ObVChl4k zq%e!?fKE@oBP#QUvGB^u)!oUtiYkh{(dDsTFW1@BKP|i@0X3K(_MnInet_BRXyrYRJh}mur=nKA zecgmqx}2{$+~(}O7nC1z+BXZmM^3-8=1VzO6)NEmxw8e+of=uhxz+5!43$O$u-mpUfxQXHMkw} zSh#C17n7d0YL_}3G094H(2JN_ZO(Iat}@yE9k&eAvVie-$5ZSJsv8tPNteBn^tgSe z_$d0pI7vJ@W=CX@_RbUs_PAdRHizp(2@DL=NwuC)ZXeZ6H7~3YMHfrU+!PsWUp34D zxLnLt`H44MVQaJ}L{XfY&ZVQ%{%i~&3Iiy~EDoY2lYJg3%h5HR!Y_dc8r9Z(uBql@ zM+UG})D2s0kun&=?%HjBXA=*0L?o&~uOmHJ8$hDxc|YPWeLK#F)=Ignz%PPF&ZyPXrtB`<~TN8${dMg}fjnZKU`4CH5W+-_DoQiEC$VVOKF z`v*Iev|3S`RKxUC-C6*X7iN4$Q#m%!38pA{Uc?4MdAn@4-)pOdQ!pxtX4#6*dBP)m zv1O;XZiiqjZEP(IUTFQTCNj`gd3*BSR`oK%kg1$!CMuxhDCiq+v+l>3lW7)aG>mqT zaol|)hfcxtUy#R!W87Yb6bl%Uo<9pYm%2|$gO8O~$th=*2#MUlR7opcKlQd%$e0GZ zy)ncXg!{8)4>}JW{Pg{L1UpcPj*j@|zFaI~0JHdL`qQ5jkD@~jfWNNW?GL8(fkap@ zc5MxXfgO7A(z7pK#1$B}*~+7E1EGOV=g`Etw08Kx`yB!mDmc5kO;=vtDIjr6JmH?) z`lQ?~7X)T2O(gAfw_I3h6iCtCDLZVPE!u-U^p$SJ`Rf%PF|2-PWsslXxcC`IiNZ$n|(t3)r zQ++rBj|GA!gXIIlcF11qMyX30%PD;061?{wZC@JZiwE`u9=t7NBs1_U;PliRTieSh z?OK_rFW)0WJcaP*qqzd3_6lXGyV|VvE=co{n?(ny8b}dd?T@A>s6T};Vq>1o`Gpsd z=B_|qXH1nX+hhNq{*=oSgUX#Zc5s>9;sM~^gxDB1Moqdu$EVsO0jnM9nF4c`Wr>#9 zk62I`hFef>6No>|M;~r$D8T{EH;c?%Pd2FVu}5}xp3<5)hioo$OSf)S>3@O1@`ScQ zN<{eK#9-70m-5!=6%B2R{|MC?o-$zbFT8*td_Ftf|XL!0a;*0Wve^)RD;Ajx{IBC-TiB3`0fo$#M6eD;?7*RTV}Og=N;iC zZ}VFmE+YV^dwFMLUQ<&W1TO%-ME4x!?neY*$%Lp);pJ%el{NHBH1|i*(C|kX3`V~( z(eAU3v8Ut47eEhQaD1he_u(4zoMm=L&^7wnQafN!v@t*T(&fdlO(2LS3rK(D@V=Oj ziz{)JMe%a={xS@h&yR~B3i)+TF*nQss1t9C_rrjeMz(I^oJA+!TSXeHn7S|}?-#gq zxC&T#uRFklUgqofk>DJwJYC;K=Tz9P@oate3ruD&n{nm8l=NwV*DFmwH;DiH!e|eS zRa_YY=s?u1mcruMB7Qv?I^J}re0j=b`Efh%RPv`rRAtDGjQkbA*;15QAD!dg$4*0j zX4}~&$Eq`3{?r5q>(U4OC`{kBkS>i)Q06E&*1wier~|s2mYW-~QTcY2o}NX##@Jk? z80WrD#Zu+2aGG!bS_dKqpGRIUJloyIYf`JAgOj98tF6C*SkiVKZ=8O1ZBGRMG#(i1 zoREBQD}Vu(ly1t=@paG>AqoTQ#R5awPqu|j87rUEhBgZpKjdVf<$Umpk?#{)>3P;% z#Q%Z87yk#weD81=Ao+h_gxj3yEYk_8s>93!-0Pg!!55J6z8*XS?6dB-gUgl=%SHRn zx>mC*t1m0KKtO=`>)^Hu$*?F((VQ>_*hR+$w7{&L4$qnX*3&q1JPOt$?mho(E2<3J zH$>Z%eyw?z4nVCCR)3|aI(dMu`T+DigD-CG#%35di=aapU~epWt60Ka?)ww8qqz!{ zFx^j4`(qDOYGG(%AX$tdHWR?tAvL`noa8H@N84>b@x0ttZjMmtFZ=6otOg<*Qiv=3 z+Q^b&7C;4p?|7)LsWVH(Z^{&xV{rX=qHx2CBZ?Z{GHMn8V)D|LTy6f3nP_}{rAw>% zrSJ_f*f{%q;z~JNgQy*7h}za)D5F^)6xhSH2C#JA&n_5_qe?Re*j6L|C0mujCfODL zin|{E9j_~-*81+&*VYBL@@r~3>Uoe8#w07VM{Ps&hZk1Eg0Z65f!jQ<1*%iH16ibz zd5zzu=6yPIXf^i}t0(BdI>(UlOVbk;If?{v9P zDwv&_NvwYI)0yaH0WXMMt%R#`ag&IXj2Hx=4QF#{JeuZ_Ll}bv=0kj54JQm*27h@i zoNfP-AeADJsbya}pn324P?$$PmHoA8TMz2EE0FrIQtOOjlFOZ){MewuzLhC;9nN9F zGMgYfKkNJ#$3u^pfS|T(Nw<~_VDHI%9OxIZ-U*{{K5KM8e8!geLAggptAg05bh+Mf zzHJUvmetZ2uyr06Q;5yFonT*Nb^gxK(*TK#QZ#1s{T%wwE*vdu$OEIi;t5Rv#kUb; zAjz9to$gOD>C%2@3UlrYA$hqOOLm&wh9a)Ci{FkQ+NWenDi4_7q>^NMsW=Z?d)xQH+mX&}1kiaIRD(1igMz{4Pe zN%z$lP!(G;sBQ{>cKyrkr{+$@9d~#o0I=F`dHf;UKW|_YWje_93WY8~8@ASEwyMT` zp*L4x_@vjq6PzK8O5!<&-^2g!XQJ%sl)P)U99$YAAgKvyTw)_BPCqKl4(c@j#C8O3iF zHx!mf=rhN}*}t}Vl**HADEn-7+t$}4MtwC;rB($OH{HEg3`sE-^Oze?0;U!$2+w85 zrxzr-@=V`ZC3(t8BPrL7mWKr`WYuurWX!Ig(5>dOV5_$kU)>W@VH`Bq*p6;0s(~Nq z>7t1B)QMA-AtSX+CP1QFkwa_s1Pxhj;>f}g?3$3!4;3Ah*mqacKy{$iz=&_VHR7`QchbMNo>ux^^ATudi9&_M^*0E)F;6M0^gJ(dmQss708JOO>NfKOq?Db&Z#5XgmcQl4 zBLAj;j9sEQ3tsGCVHzBTAnHNYr!+ehhb6c&azXJ|MbxFHSwFH_N?g^Ume{T2>q>yQ zqnoAH0+QonzKzZn$}Vmg%J3rsTs=&?Yre0=Ld%}E4 z>AN2k4^YkyDTH~3cVgskLI{dMKf(`Q4aRfEiz|YDP2CbI&=WA!esh~Z|Ftgi04*x| z@p*O#hdTVNaXdPTE)c#$dd&;Xa8>?vU4uq^elw;;>0SVb%&~M1d)qy;Kx)D*XNhEn z)eGrvd^|t6?s4VH3neEmH+uv>KD97pzn7?w6(w<)(znZnd@R6n_>tH*Qo8Ht-XPtY zk9V)s1?s0GqD137t_-ZO#RDaMiv;?*b}eCv@i@ir?gv-X%xQhemgn0mUo_~6d5cH} zE2jquZ+2`#F%Km<>|f3P*fph|0xMov*6(gDmJtCGm_ejS<-I`|7NKwa)-q=}g>fsQ z4Y{b%s=REEoDkz^3BBurf=+3Z5Ix4M(%Gu2hzo2sAnMG?F64nezLFA57hpVM+kmELAf@%53*r@E9bo#W-a^jq6iBFzj%hhN z>>5#uO9nBvVGsAqT^5g#CVSTkSIe=9+K$a6mhp zeOu;u6BHx3ViftJWj{<*M{81NtXW|J0OJ>JLo)~HU%$1Ar^MG-_q}O?`xTm}f4iJ7 z9$M$AbXks-=?3({-AQG?Ff!nkh|IBD+)i?S{n*@yay=s#Y-dfvk8ODHMN9_PxS8~UM5}`0 zc#G@=V7k>=VDYq2un4W}amC9Mn@6Au zt?VZ;`V`i9-K?#(XA{U>^!ReGao0PNm^0Azd zz<#UFFNX0+n#vh;!pIm!4d!t9qhs)vGAS3#41>PTJflD`FrvydBjvG=?(IF0)&~o& zcPyPrNWod9lVg6I5x6=Hf?>{yasRpR|Gb~?6p!;pvpf!faYXh4#K;#8FCzdxdW1^8 z!FbnO8(g3h5lCxhY(Rt7m2YR$9pypqei`CuG(Ew7<34D zQ>F9>qw7VCxx0Yq0NIRj7JXYIc&3zRfMn3icB4B&#_#XRbnqSWPpt4+t}M2j(f=+0 zvMg`vAsaPVzOE!A@_S#-ePXmr!)j%cl_tJ+dqxw25Ka0oMb2f9Gc{B2HUE?H9=H7Q zoLf|kGikkT0g0Y=_Fey&(j3}D9isz^pA@79o1ZBfqKrz1`uXECdYOlU;JZfjJY zN3#S-Ah0%O_60)~<}V*szfC%={wqutSQniyr{O)dUndlw#M)v2lDzBTS1@YDI~$nq z)*F5>Y>#2rUP`}|`e)tu40>i_>AU}M3Mi$TgyJSIZu;Yv1xhjIzDAVwb39JCMlE)! z%II&`3wKhm%;#bOS(l^T6C2KjUHmdQqICMwAz68r#E)t|HxT@_vdvD(OMi&TtSHA( zc(2N=vDxJxfYQ;b(#x3f(>;t$UPMWra(??F%@3E^$SM!;TBBp1rjrY4WPYvEOxXJC zM|L||?-Q+Eyi^_d@2;S=uuyBbvt)zWHI2F`)0$g<@P9hJlV=QEdt_Gs0X*V1vH)^D za=9Y+<;`~lUUaT;GO;*k;gpXg`-4bOP@RPKMuhhS(Q~q3MGdGoGbmQPd$l&@Wd=vo ze0}(@nY*3728z0+pwrm#Zd96GR6c|`LO4G>tV$%{L;W|SS2!S|Ouv{Ud~WLE4JsF! zXv8a1&=T8~if~w~9~FcIpUvqGl@67<2KfgNU8G9X^L1TnDk%nGuv%9n@AXH>(4-U_ z1LNxM?B3n9fO=_t-22X7x2rNJ#ME|*=2PP{v7~N6$v62j#3_7FLmJo-otAz2!oOgO zy3Fs&qj)YhGn!CRr-63w+#;y$nHYb-gvqT_ zIB8ZB$Uv^2j>VrqU35%A$igPWD;>c^!9JAWp}nnGkfX?-wUu`jVN9ci@wwOu49VxO zsr_7PQwPi>CqW7hLYkI&K-PK%{Kq-N9K2aWc0XAb&@)!7w85#Z62C`mFGnUBT+?xy z=K~$mS|HK-vYC_WaS^mlzNzo+tteNg}awCXgs&-%;52|4lc%OzE3T60rp3|OmR zZTCNoaNG8ZJ{(EdC@MHjOcU_2b933MI2d|&{$H#>KV)LgeBqGkadU(ml(~__n{v0; zsR2iI6K1M+I5?pFrn^|X86!mK@aO%#8OaD`e6JAp%d3|`6FMLIy8ABY{oU0PAnV7> zFjck;*9U4_LnX6h3IzM_Eh!_vyQ%NYOiLV$&}=%e<~w%`KCTfEBKW%9$>eRTG;)H9 z7bVrcV|N#tOQ1-+;KO+53@fyd>d^8~i$AMsIP z(s2cuVf`A%E9T~At-&lyo1qwgiv8eJbS;F z!keLlCB)sC<4ij2BZIZ(F0#G(9U5jI-^QJN{0bW09mZ~+=*s)B+odFWD~ne|H2!Ay z*|*h0B$88%M{V5;g$7WvTom{55bpw=YG{tSnlcxML4vhCCXvO-xc#m>tf7GQkHmLB%80ylB1cF&xz(qddak179H$*%H;NCAk z_wBo}1TKo^75i*CDWF%w_c^=TzglA=+_Xhb?Vp+-_VP>3mCkfw<7&5JTeyN0jZL5^~3;mRZ?Ge2kja^8H>pu zIC4KIm{^6~0%-f_@7z0F5Sq~Of%+ip#s92*KZ~MqAr9re*?pFUswQw z3*&jY8rUtbLvS!yRMND{&}jW-9hj{J1e_9exWCNH%`_VSLhVvYo177en3yQ0+WL0T ztKK>*Frg?RwQeUPEQvLKFebh$ef_2`o3T3OoPfe43)y8K&+H7^Q3)+RT0dt+)al=- zyuyh!-0*(jv*}3|u&A(PT2WUn;TOU)o5UCkOa*ryciO`&(sh|J%BO0d4*(gz^)^NM zVgoSUAj4=qW#y8bbZada=F76O$KS&`$!rQ*3O7%>mIN*RWWjGfXdO?r%}9rWUvTE; zN%$jF>|P6Q-Dku-bhy3>H)sXO`f1{#;n}dZrP|yrp*NzcK%mm;FVjVPWC-BPNcH~v ztzqUWDV4Ge(EWXdH&NQG0SP}n7W@kq6m@_`u|HbQ#dhr>p}N*DH!I1DKKBB$kQT{N zsa+m-BLbix-THzYtAjxsnVLHLJWf!9YB$dzu`WG=u|)pld!@}6F+=&5u5Wv#r#xhB zVx8&J-9VFAm45V8XNg8eA0u8_FzN7hW?ADQAD<{w^_AA&YeRZCYY)8$h}-Be+E~fB z6n4EX%5n4o*r(R%RVeD94=WWTVtad~`gcwe+49S1=hmX%H(Y`>c^wL6HS}2hutpP2 z8_MP{nj8$H zUfcG>#R+(4_V4u=ai6c7Z}14y$-vp5HJQrQ_5ufhtab^e?W3WE9($&`Hx+>}_|WHX zdp!sVFL(Q8-LNRba&f9xrDsWY5cdo!iibLOxSTn-qIX%J?DYPHLTH={C8&{O=rhNK z$-=O)3F>m(WghW*IwVn$(!RX>ch5ZLu6{up!NxH)1&gofYf!D(R2$}%=c0l@ZWrH{ zXlNloT5r>>wpynFrKV+6L&mjzle_qbWL7TR+Yh&oy8_D0<;p+yEounxHmCZ8DJ?YrH{MC0*5~+deD?8eRo4tSmD_ zId=H)yfi&W(bA&h?PPsCIa5zX2lsWq7ifsYGpv3dcOSXDc^aJ~dGP-IvLrFSlw4mw z@PZJJ5=~+vsNWrqi+NK0BNNRBiTE2v6CeXErt6akQ&7OGj0*1BorVe2#@jR~V9nFv z^~s$TCZq{7{P}+4DzaYEtiXS%4dbBBJTzFhSfWa$IY=b3?SPtwJm2b-Z7RLW(2q7}8><1I$YLw!nz@9WHncz_# zGkH>h)&gN+!>jwvRE@_ZHvISiS@*|hR)}*yTR5hW~*rWRz(SXxIdJQL+qDKd$ zt6gNm=g&P(ajLIKhF3(4r^@VAM@Okg1s8e}v<-uN+2^|h?oQ!Eb!nfh)Jqg2Qwg$o zXu_5H8=TKa&?Im20xKhamF?!OaW0LGN%Owi1~7N7u62IsLLq?F1ZgaBbxFzt9<-1K z0URvOKc-IuIBX^mu$}KhAP=fi$g`7P2J>^1$7Iw~e|3Z1ZFff7&noSsbc z_zY3>U?ulUaePn`l)L|& zkYwXe)fn%_3V=5MzefA)w6e<|@_XEO1n8_cfZ%aGqIZguFEh84VOfb}*Xb}XQ6_}r z)9<>%VZ-o7ra+?mHUaYvUhQR8P}|Tt_Ea2Q%CYvbC$c$AH#*i5e=R=z{uap-Xjl`S zB-xTW4FHvawROs#X45-Qc9pB7l&*8j%MNjY5Sa3GXFBJLX)ZKNVSLMS9Ai7Twr>;D z#T$Zu)v8Z93JMq>=bW}#9VrzkCIx3Ogz!P`Od*ep{MCkGF!NWYN5_dj?%=F?0HRjg z4*hpKxnCC5l`_q(P>gv2kJ_|K=9X7Kr zBAa^SMT*=8KQjuhL)K$jRPkgf+K{p$Gxu790T`;)<<~3hnDh%AO)*2^!#reHHot2=^#(BCalEXA7fXY=8eGSITurPYSu0xX$GzBzGLNqy7hM5({s@GD&tt?g zna*X0{gu^|QR>TXYWq02*>@G6A{oi#N`V#ZSA8-05NNdO>tk3tCgG z`@yfOvH~yCO~~(JlimvRw-n*l@-yup=&m$vzN|lsk%vPfGrAb2*_PpyiGY?*5BL0} zWs5YlO1;X7l$M1lCp~}x+B;b|qQ9J?Fb13%)Z5{VfNC+Mj*0=(i?|rDHA?i=zf#jL z%k*^lP%X*B`U>X-pJ@AduFOw~;8{sBRTJkKRGUzmdBy|Ts38CE0W|m*)+NFTac|%g z6Tw^YU#eIP+Rb#4qVRM#fWqz!bK(BWkP-xu@chhx5!5y3!vTPxiZBIwgCX?;FQETF zDNwoZ3^e(P@|hRi%tk2DF=2WCl&(Dz1}qc*z&SMfa2Z4bS+dtkbR+YYx%8%P#XBuv zoyNxonEepYivk*(TMZ%zQI!FUyL(&P5q(v-H*BJhOol=n=ZCjL(ui~T z=7oEb*EJ1AS)!UW-q-!vr}g_teaOQw21eX~7H| zB0fV~Nh(*%cr(V^H$b9^W|C&YjLS3<@R;SOi`VYmVe}&%7o(O`&lLp#@Q&bUIrQp~ zYM5fQ7x0Hp3!Sy*1~9cYw)zDQ*n$cy zuJZ73URRYK5GS*lLohteS3>74%e4oaijrq_Jk(m_kx%_7(<_HVXu=qK(dt*-g$=?E{#3W@7$jq{R! zv5=n0EfPGn|Du0<*{?pvpk;4_lM4y@k)-u;bW8Q3lQvraRf55E>LtguSZy?SuG^WB zB3FMdQ?Y#N!^GA8!`p#iAgqipeCOf#Nsqo@w2Scjx)KfG*eONLQ%V+p@6yriq_GSA zJNI@K!N^BiQ{Lr@I}w9&((Q60sjb2}5!|BW0>~RlQ}@~MO=?Vh)vCU*q1$n9*cXv% z-2h&G+?3LH8Kj&`6^B+i<=d75RtCf9{#8E>U_|Dw3MLAxB&&qvNC8%8y#77K4V;fP zyhIXG*4f*ZleS4DwwIH+TK&d;yRJvrvmzu$jQ5cSA2VMS=^aY|KT9V1?ci-WVQqAyGbCi zd4KdhUYJIaeBXcFQl57O0#G1U^`7JKe*jZbWq4kq;Zm}5$kB?J zaC)twYUkVI9Y(Jb0lMRp8(Odx%Omh?|}*8cxR|x78GS|BPcS@NobDd2pJd*DUY`B4`x+8JqOliuEesXzUX>VG zX;KL-Oq#321@;7)&Uv%k{PJn&4t(WlEc=ZGeZ>o#h9h}G_%YB+MniHvo-Mu%VDrIC zt6NQmEHu|Nb!M3!?~Qmfg*xttlx!Wc(6w9Oku@aDE=1ssp3>}yvtak{1_}CrB-Z57+*$s5uS`z#OsNsbwe0zCD!;4yJjV^V3z|@ex-)Cn7 z8HX3W9!^bB>4>FcV1nYOIeMS5>aOK*!q5Sn!Lj{2`} z!BQyS*qN)sSQdIFmyGR$EU&JW`xBK5tUfFmv~k;JLTBrR;JQjWs75AP;9t9_Z0>mu zc;A|-+NyIB$yEdA7gdC|c$v z%^K@PesU}}Bnp)q{U6;=kod$c#cEyUd!8B2;4Jv4h;lBy!4|+wk~!xj{ z0qso^b{15~eEdw0*HuH#joZvN{(iO1(e?mj;cKfXU!=a$n2FSm0{?lZvqhE8aMuFE ze$qmkI^Sp+8J;J&eQVH&2&~xE0~tHYMUV7 z_dZ=4cx`=qyM3b2`N?Te+b7Z`!S$gm+XrAlg|IWzTwu7f!`JS+XGl|FHloqCYzc&u zcP_5vbk9aE9rEYK6V)gL)7V2oR$ z&*M3T^Q5o>VcY}NsiQA$$8*df-yomtXsUl525_~t8Jy?H`Z7Gt%;_SOj!~OZED>CV z^UCoUDdwkg2HW^(*cc09vni{;=INmN50$9w{}*dFSpL9?cOWZU3rq=z8`p zmK!Fj%On5p%yclBX1fTCC-x_M&ZbzFokD<;gddc2Lu`y&tit6mXZMDnrOik~NQTv) zbwPbdyw+|Q!N1!DDrw@U(Qfu-zZWkGAa9DTm^DwQ$dplF=&G6jN7a2tCH?nt;|Byp zPy@w{hB$I%;5J9N%@yvE7H-pWo0?|0ab}Lhz01sPrRE6t$kfVJmXaeYE7#Z5w5}iD z>$-pUIk$iLm!9JTI3M5d*X#LIBV~@PCg@B}@_hGpDe)-^-=oHtjxV%vKt{j4awd|IYy&15ii#GW6GX>an)DG& ziuT7H%Jt*Eo@R#r21#-qlE<~YklwGtMyF9!1HXp-k0U}-5(4fQks2ZN&yo(63w|2MDOs_ZAf7L(K=`hCe)AkUtK}Mj zeI25>C4a;Zh{gK8HQ|(HFyfG%JUO_kV&~*n-*gP20Kg5F_J*yEY!=czd2Zzo{CC#Y zM@3};qHO7_A68gQ;<`ZXQB#>29c$p9@~F|iw;IY@sXPnu*%GYk!`e^#p>R2!1lr3) z=3&`@IZsOC!R1$})a&eg0`+0(-Ifj4w?`joOGUkWheNW(0%gzNBIN(v#_LO^AkDhw zn6*KD<*z1Ks-PG@!s|?kBL@{A#_H+4r74_hTUYejRVN@5uMg*y$>JQlbP#6(@DOF~ z`xMlBq@?GT$E*Zin$iS-i79tG=MD>c3w9Q2B6BJM+5a`6;MMv#z6L zOv=#;0P<2FAz{XtyIcicM+On3tkibmua?4f5tiJD^|(nCaC6#a%ZWhnxcN};kP zh$|+pyrHC4*K?!M%Z+v>U}O1vJJ;vDxq|CxOfi-JiE+UU{Px&Xvy0gzzJjSPiX_oe{8H0>+%8+>N{BVX7k5nI@)yJ6Y&4UTHNd-vr&98qdu5?7`%*)pnWC0Ip?0v3L{|MAqrbdXfu+z0xCULtRp;)W6YBJW zwcq03KrD*4QU;aO`f>7WCZSV>3im^-9ezKc%cR<*SK_n@CB4c+#8YbgR=puU-(NI3 zv{IoTaule{%U<+sC&JrA`~H@7{MlU-ME)n`s(V#3c}3%6a~vnzPpet=w{5=pne0fm zr9uohKLuqX!4NlNBK*K@tS}H+<1D~O2<@aPns1|dM4zUi4J7U^DTjQ zLG``UhO!4uqCal_k0Dep(!_oEAmP(S)9f>OT2o!*s&wo5fb&HV;&0t1PZ;_~+g* z^SR$6j`lPK9Q6Y$r{Dh{CsFkZ65KKIhqi{+HpJ3|`d!~}Q($q`*@5_q*q^soWaK$A zBIl^j;(xI~UwI3oAoC%yt>(1p&6U8BXGF{57pI)mXsxx=OLi7dUz9pMiSHxCT9?n| zt(bc*@Q7SRq~BTvi2ADO0_?kZ&E6)!>lg~*e5M8QYRfrXcbHhpFLQE+|(AqGl{o0#D%^(F8N#_#!ra%)ETaDL`V^T3p z*%P^-k3(n?$Bfb3xB5nxi|)JKo#!BCSHtVv1zWre1C1$)wt_f?FPS@%9px!3o^+zVylpY_+D{QZkBnndS;nL zXAP0$z-G31-(qK8_$+j-Csns%Yp)lNx!r%)-ic}QF7T_WJVU)W*>h$@t;i^3{Uz3R!kR>ymCk- zs^-HpcdD3CJAB3xbM=izPCI=l;MZKT*sqs4?ynN!(e_;}BVOu=TTd;D$2K0X?hQf4 z(VWk}wg$-W_al-3!0Zz8ROE=WbUjN&`P-ONQAuqR%99B8Q_L0mtD17iGY;i$D`eqo zp~Zv7IfFOzvQ+f`Fyf@%;D-`01yffu&+rfxOv~TaH(g53Drb>ELq9Ek*DQADXszQz z|Bp-^my%p%%;_$+*QjTVOw)f5-l;L-9Qs~3U(Q2DczN>hfuSjw8AkW+^70h0A`!sl zfN#VI;aoI3OlB|fkHoJYudo^dF|N}bZ;$3WbWuq00buoBS`Mr`t`BYv+*z6b9GC(E zJzCDb&0R!cvph#joc=l$4V*zaOs5<)-5r-|Rz{u?SEh#shf;!zL%HAW#$Nmj#1fsBfKK)CZb;o>~22$*)@`6#G zd^=-_Fl9t^PF2t0TD@pFC;oU`L48Xn5=7Rcun}*!?aa%makny$2tTQAI(|Ms3b|y> z+Rev|VM!2<%>@Yzvpl-*otgmMZLwTZx*aIaW5wn%n>RMs9q3AbD?kIsybEjj4A$kZ zY;A`Pv|-*ne`-GIu{XPOvJw zQVRN#>6NVg2xpnI<)Rt1#+Lm|L1Jy2Ysf`0YvJNb+`X54tslMH)Uvt-rfr^^MEpBM z){hk@C7NaY?6BGcoRKxrrW6eG{5_n#-f2?JA8s3v*&SS7C_u}B@|j)WV62mxfpnPe z=hdm`izyKD{h6Q7Vmha5c@hYar0XNm;*matydTOB_8$!y199r?b~pDAa(d0~8`|9q zbo}sJc_j9AzlnePj{R6fey$Y~iAQO=FMefAdknHw!JM8Qe%(wENGcT{icVMEic5sY zn$S)ux9=EbS*&n=>uFcqza99pgP!hoRe^RpdIwsO;%dCF>3sp?%O={vs?=n@vziLM zMhJ{<^c8l~T7pXNM}eODAAs_@#Zyt!cS(nzMPAx=H`n&!7l z=}W-aNiDmcZ17FQbXNgZLa{t%lpW8e-WIli>qVSSNME14}$mPNNcfZ#=rA=X62+p^{+g*k1p5_mpEInn4 zi3PJawKsK_?6CQBzBiy(d*fZty3i2v%D86O}%nYBxU;R zS%zMyd!HG7D1G2f(R;sxRRT|A&60j^g;NLFNV0MlGNB{`QmPl34vlaOF)Mhq($M(3 z#{#hE1{7MdXbJDn#HIowdqK~q#3kd}(Cn-?O@9AgMV0sE)qRNiTC!29i>oWNZC1W^ zadGIZSm9jax5>X-f+pe>Itf!-FU}yrwqyxklgv9A+w6~c+_10NCGV7C<<8OvZ=5P} z-kAN2tq0VYxcf%7OB}A*0^M0YHpO)+o&=3uN9oeP(yY9hhg>)$s2Y{&-F4i=Z_^%z ze~c9rYE0W3!9n}J%eZVv3_W6`$m*u}lUTB#Y-UGLjhnQ2~7 z1_F^|$Hz!|EEGAs-ShaWY7*{2qG_JfkzcZ=s}5kiH8ic6wf=8}jvhl_u;}aG#nCp{ zqRD@?@W!@D4yvnOt~=N1Ch_Xn;R;0)ruGIQ$!TT< z|F!xQONN@{4!>LXzchlj0S&WuU4?{|t)}Wx^&zou->hD^fWaXFvr;8f;RjdF%6y#p z;lZL8wz4ydopDJt?OyA6wKtq@1n2|;=O=&l1Ub;24%#}V`ib1$VM2WoR3yY7Y$WiO zkFwhfA79XJ0w}73l57S_|Av(s4?<137D-=j`XzDMJmBfm#+SXwbW?Da6KwR(myF)_ z!yyd(JiebD6@H;<5|`noI8{9Uk6lndxrURj8z0wkypo`IAJV8NO}o<#wCtD1|Bne8 z3+5kCP5j|>)cp!hgD{zn8!_9tSoX)<)&7)QQyaPNYBt8DMVL&HCKMJich~S-@6IS_ zni$7(<8Yv4fC^*>LObg2>KndA?&wMZY?+xlkpvGo5 zk3O03|HEd`n7G$Y16b92T`6`xRkljSf&uDcTimt3yc>x~q7Pu3^Ztrz04iVE(~)pz zi9GQJ)M$QP>%tZozyZo+-YPn3@voBsqr{Z9nM>0-$M*NRsRXD(e-kl z4^qZ~v-YLS?cnq^5P|4&*Z;JZ`x$;70gmYaCmO718I=-g3c;@K^{ye*?#Ty!QO z?{y9)RMbx=__9$WpjZqgzJZJA=!3tTF^liB=CQ@H8k6#4(D)V%-CE#k`m!V$) zm;`kw0Qopz81oYYK+=)EKdWA&URDWynj*!4BLQ<3$ETu^#+B(T3hN`ZtLNZi)P!xZ zoX7KfeQd3oAWOfBgI;|=jl)EbTF2=#n^Y_oHFg{}6B0hpU&qD+V6}Yn!SKh5+q1`c zbLWmH6x*0e{!Aq#kR#uIW8@r+JppcBS{b89B_+~GP}!s8{6ypCf0c61IUC3I z-{&*E!c-bm@#I)nn22(Jam7OXu}*g1hFan9(owGKcDxp6d(bDQQl-Lwm2`P3AiR7s z0}jy__XofpV%oe9{PPaAf(N9)e3uN-#r__pyIs3}XG z!u(Zd6jv22i|=9ksnX0zyo}-~%h^mxDidjRq8S=}K3HQn84=j_j*p2nc`yNx!_t(Q zi(E@ulc0iDHPuM&+MMaJAr9tZ(B~xSoI^&gl?ywv=E^E){R)_pm2AajZ)g%^Q!OUS zM7oe^32Jy$6~*rf6~0|8@CLvw6&5giK{Js@!OS)3?%yNE%%}qDQkrZrvt%OmjftDv z#8$U^oQ>4Wnwi29xlIhr7LD?yNhw}%wxMP$04>-{P4^m6P$^dcCcw36by<+2!}Y$J zP!trk4AVE#XJvUEym~NT%<|ZNa`L!TYsa_TEtSmKwEr<82V!~3ed(5f8tQ2!AKTOT z{RnvCO_CKcU+@KMCYNac4eDAvzhZCODkz<&veMO;`uV2Yv=zay|{|MqekUfu2BE@nXG zxePgbEWVxDs+e1$Kyn*HEp+*l{-(>GA3+}~#l3>RYE-Q!@WCTsVR#Fwy;_r=$ zIZU7!$DdEqcs?SI`0hrtZ)bk5`Vxm6^jd$u`*oyONlMS%3xB#yJA(9~4uNOPMz`%v z;2yf=eoJyK{D_f*Ip&#U$1<>64l6fo%57xXg%iSOBkFi^VB8);l@Eiz1sc|2;$c6s zlQ?F(B`KAVU}DmjnE7lI4lZlxa?kClX#P0aYJtj={nJyT2Ii@HP$pKf;613W^p2&ztqMbNx&Ctk~$15E^DOsRm0mbZ-%_M91>;Jf`r#_J;peN6%I|3Kc9KsKqCLAzC>uw6ZBm<7dRdP&^PW)gKmfeoHgQw_XVKb7SBP zNTseXu*gAmmQe#~jmrji>_wk)7Lenz6U$~Nz3TBEhFInr==aYE&8A1qgX+r9E3)P7 z9Beon0QzG81q=PU%q13Y_Wy%Hx#~O{B7e21mF!ep@6hERHUFc@0pV%>JQy20dAf-S z)(J7=4ko{f4v(;^@-jv&Y3ivBdULaV1hc(`l3#8Fyct}$4po_;dbvA?#0vpFNZumc z35Z&e2EdqN!XNdrI5G&vvWq2p!bP8q!L9=LZRhhX)TS$-i2sSn-gv4&3-s-E9PKx? zd2qg>;Q2>PGt5dRPX#=!v(z#o^N3O#N}f196q9Edr_YuL-M7B}ycnlj(d=5%O6q&w zo-hN)+Ka>dlkc8`>9-lXsQh6ZmmYfQU-l4~?dmbw8{@j%ouWxRI%Y;1lYI)=0{LlE zb818|mrOpw%S&=|rJFqzr&w|LXCv6_*TX~ZKMNXsq+2f+db8v| zfC5SeLP%m@zG@jDjU+HL?5^D6Tctf9e-WR%CEyhiO2O5|5;O&vToki%{Dx7r>ZU_fch4t=zb1I7vb5;DE)xR$90F?g8%%X1kmtu6t~WoJy3hV-#O;){Jo z9-jSmN*c|kk7aW(rZN9Cco^?lbHZQM-^(0U1XctK&m@pLa(~cOH`b<6MMb{7D|dyH zQEd!X61q}qk{RZwujY3se`sY7s4)L(=RWJ=p2Y@Z=Ywu9Y;E4h;D9^{PKHSy>N5Ag zCnS@!Z!Pz-@j`Gu5_C8B3l5*avA9P*&%E4U-6qJe3ODsp?z zH?v424ax4v%@^m_-`uY;Gd27OE;S3mxANd{jDTBr3QF-n30L3hZAS1!StdX?8Os<- ze@!cz;>t3^9SS^*JZ6pON~tBQ>a`X{K)}*Gx(32pdY6g=3S_91*ectfmRi48MECgD zI5IMS27i8tF`<|+1YQ^Z*X$l7Bl}awKT!2Sjs+FG1S`E_RhyDacN+dC_(Etk_mv&O&gMgZzJ|2WWiS<8Jj(UzQ)z`-)TQKjA19|B4=sF({f>sm?h zn0VA7Fz2yX3V*l7dI&b( zm`6e2DOMd{TQ;LQi<1L&(RzZMOQj}7kMC2BmxaBfrR+tGi{8|a)IA@;f|y^^OG3gs zxy%i^<}}^uiDYD;$zzBYS#^A=LpHlo&R2{7JLMPky zcRNETl%yAP63L7L&E=F<==p=6+#m6gdU9I)!0XQriAaBGjc^sax0o`hi_Ob3vpH!b zw52AS%B(wkffycxkNan3cv|puQP=wvgyYX+?BF4PJ)_q%5vh`22`)~s*TUG@vsi8)e+rqUmqzW-r7Lvth6l4r1jN8uq%#`1{6Zuq0s>RMn77sNubVG3E&NQ^g=iaq z;VzkxKHm8gv z#!48p{XuC_ta9M99IZvyE$V4 zPb$nh^t)FJp)dX>vgRg0#O-$^LcE3jsZ;eWLIP&HkC{S&siBgl*R16;( z5o}PhvC+~t|MF)CS561ky$my7PNCE2d5Lb$&(Dg@qmYjFCe3m$({^pw$g%9lobhV5 z*M>sMrxBPjx&NZY5%EL+FIrB$n;!+}MeXZLzBgZb2!kmLfhgyE~`VoK6N3E5>XSn+}z`UV1p08vfa$5d1bFU6SN0K@e((WdkT5u43GP;ZepEr+` zf(3|i;IpLAk5|q1`r9m^07CVZ$)^22T_rowbS}tpcE>#U%4;jg_5J9m$x`S|C6f#@ zPlyJA)4g6nNmN=VQ*%RjJKyE5?s=2X9kPo`L{%%27|EXwQG`9pf@g&0b!=*; zI`P(JggT#lXoQhbhs}acS)A)S`lK|9vB8;c*K6$x0>6|e`?uXa&!|L$Nsl!NphRw}DoM67m(JVjdw4Xd zHZvPd zGr_>Bb$y{hm}~6wzH}9dV2)@1I%2OrxY7=;hQSF0 z?eljtVJ}_sP~WC6_hzD{#7I^!Eywh4{98$u;^2$;?9%(JQ|N2R>+am>-k8l{$aO(L z)B*B(=0 zURe!ai0C~R`L_QKP{Qy5Jno3VsWvL^lTZWon+#fJ)9o)!2$Tp3wQpyZ{gRU_ttEx$ zk3LlzL6AekB{b4swN)t1ML-aGi%GVF%fiS1V0j<6wKqobkRl+L%uM?yBT1>NZ^yH1&Q5-ZY#>?I3_61EhT{BYE!yB&;O09r36dwVWhXVhE z@c8SP0sSPK?iR0RjKP1v<|S@U(V1rY-s#1;yZkGF%Fc$n9!l?49oG=qP5^a*=u5?a4^xVaL7Fdyy_fmZ zlh0tsRvH}yMt~aNR#BznsVnVjDmgw2wHf_>XHt|0ab)G1z|O{Nr=zVZ?iVa2(;e4G zSbz^Nn!QOgQ$PHy&lL~p>GW$KabU2gJ9NE_vyPgA(%0%BR>}8HmK)U^ed2P|AI`;e zu$2p@ap@}Z3_tYFR7)@by?p-lrtg!TF-xSvTO2N8Qu6cDp=y$)Pwjb4Rgs`!ac}~H zRrmMQE44IHdpSejOlP zu4nD#A%h~vV*t*Ct~3j1tW-X>lnheo7_L|w0kC#h^;x3cJ<5EtnriTXpxfyjZan7| z^aZYqTTFjII39r;KNhnmN{tzIZBhgh`D+`Um&%w~>SC;CQP0e2uO=hh5^ZgK%zdwh zYhH`E4%Op2ISIaKU}Fz6Ynk)z<&v5Ow3}&uIv$#5&*rAl`^DNu3K~Lm$V2d&MK_}# z#n+G&;=p?~gw|^8b?J`nc;2|P%k!!NZdT4u!LE^*o0k}hGqy--$bsfG2iR)B}^U)`V~qoRZQt@2)bs1D3sy6 z%P~?M)DJQPm4CT^&1 zGW9!}cxI%VW7JswPCqEtr~Dp$&W`1bH$=y-LUC?}Hls;f25?T-#8sa0s{ZgcQ%(|} z2np`^Sx{#e;=>0vXcsWkJILfk-4yHqSO)#eb=QQywkzb;oz+y6bipTv3qpjV;yoZr z$Z}Zu(d`erL$0}INoO`z8;#Mn24C6kpPyhZuw_U=wg)CpKX(ZnBd9~6f*P9Uhx4eX zoTNIJcJb&9j1$b*7++FFXy=4c)C(E z!^-CQ2@GiS=1ubHvaDDlCyq^zwIn*MzcvM5UqKCXzf~4(f_JO@IG6tC5dGe&o>5gjarbMTA* z1g6NDGzpN?pB^L*@|U|cV1#{FbNgNMQdtL zXo6U@JMZlFzjC&&w!szDyY(-)(;=tg9m2Zsr=~{r={O>|TyL`XJfk0LVj#-`Gc4`5DYWwf~ zTAv%Cv_N7F{eOD--^m2UlXy(SklLKTNB9$1#o5C}KiugF1;_}12f0;Qr{b;eO98)A z?itO8jz(|mOiB*0C_VF>__p1F;<%T?5)^lswk*f!liKViD_n|B%|4%KhR45B4~xJy zQUG=MXNC2R9GZ)%a-)-j6DlXk5@O{tpWWRL|8|s@7g#DqDn@%NULfY_0jtnuvJZzC z^;jO?@;52%?Tsm;daqOdYo~esWq({>P?8jxrz*a|IVdnzp@kSN_+q{n_CY`PORbq{ z@Wus4TU_Yl^frHnqf z`t?sB7p2b$*SSMeyjAR5DIw)`O<>N>J5JoDrnUs;GpB9to#m$EYT41JqVe!Q0QCwq zix{70fWxV=ae$~Rv7**x>DYXiJ+G4{%e$p3@&bdvsgsj%MQyRO$SBY z+Io57IzcQIY)M-pcQDTY*Wohc;cQ^H*S6&cexN>p%&dcqQ6s}~YnOwMq6+50PZ}x% z-8diLV@^nm+*Bh~(%#RA9)HPC;GCm#KEbYa94J$P4e`J|OHegN&OkM3& z=8*N}1y2vh~HXD8Pw#@M&gnecvkxUnGyqEzP3*6e$BKaWNsN!(iET}$Nh~fg#eexv8`SYDm?X)#CO@P5nMv; zGnvEVUlV1{t=Y~`KX)n=4xdAkELBErCw6vz6uUAH?K)n1UyC_B%bd&t7wq?*6#G@e zJknGOm#&sN526jsa>ZDh_8FdaylRz)iW=`?*VuqW+SxSoKkhpdqX4gByC&-k_USC> z&{W8RZI04b5(@46@Mh$<<0-I?Pu=^U1iVPgvL;oqTwz{gDyln_U#cQYR1ewfc?Hjo zBJ^`nVS%6(j7fvC-2C+8{rH#1*@i{`}d)5P_Vp_wI5we%M}F7aX{m@#Xa6KKXoiKR<9UaXBh$9xtg<_d_%up8c)kD~{JVjY8TU&y%FFVi2pu2@16UD9Erho zpqfjiZIKjFWOG)^=FP|mb)YB&ihnBoT00`aO}Fl?w#GzI!LJ}ntwCK;%C+7e?L9nLMo713m&PTlRBOke$dL49>J!zBrH61^ZBz zb=|AS7W*em+Vd^huU=@xQ~EfFzX<}%5Ig}FYtyN16vKXT02){65vlnv6Mz&9;doJ& z98IVJX3^u+wVto1B7wurPshSKk5=`&J%zD4A+*1jG-Y)u*wpYP$&|fPeB}c_q0kGe z9Q{YD7W1A*u`_8qTUjWitIR1nc;N5Ol_&UlKErXX&;0X(`GBXac6X!XnLXcbow}4q zq=UHtad81DWBvUu&29{ZiY?z}Dk=A#bs&vjD--_gr}%vp4?^3rk7)niFU306?3y|7 z4-Ws?WlJ2T)50p2t}<7uCL48#@gF7>%P0pG7q6@kHuJ{8i>Trer5|#&|wGVH2E11vZKpA(KFEnuv z1<~unt}ASrPJB;Tpv>RpwKLFSrxR!9K$E;&>Q!4m{xn+fjQOu!YH*s3X%e64R{drg z#k2sa;gu;j95#Q}<2r@jc&lb-l1|8y%|_a$&-1IpK7m@-}Oe6Hgj=A_>^*=~ahVTdG~j{3l=)de~1>5o^Iq>&d%# zSrnShwLmA?_nY!*Q0(>B!VQ7G0>{e`V~Pj7!#lF)Pj{ftLkW8=@4pWYZKN_L?{eJw z!MsPWwq2-VtC~@b-Y%E9E?6|D>th`a04?JBMf66>Fi4#_nF2P9m)+{hj;JmU2J}fT z-zzAqF@7k;)~2hp6#SBIfO+@C?wQ}^y+&rgA`seYn(^`C26X{W<7EjdY<{W1X`t^b z&mrE|ey$3mJA+%OeaXU4Tb8r3mH-bloNC`+=2Co|MZz91LsBrjHMN$(IjpN{dxJEe zCzgh>3#|TaLw&~FO2dIh^+LmcBW-Tr`{*i752=Pgm{3E(D|+&lvlZM9XQSY@ETW;F zr9h^svKY0mE<=JmGA6u4u(Xv}4We|9Pk8Q{!f(JnS!n*C}_(B1&XJ8_UM5_1)kV)9KA@n|XI zguINAx_>trN+va+&7!x=ir2p`XCow+{g__M`^U}9eU-Zf;z45f2 zntZWzXoJo8C&KT@`)+g`k8`Rbmq zGR#t32XEm72ADPzlO?^_+1MfIVkZBt;Zs3`gYUyyC*Iir z3djiMwgJez>Jn7$@VpKn9loLMv;#o`nLpZM{?25kn!MgZSAYA}v9VgZ(sWSs)|tP7 zv3a{5x_{X6qg9$86CBMg(l>AKnm;Rvk z3N}zqp;~j_Xn6{%o~QKk5N~Jx_wb%&JOWiB625g|)c0$!7|UzTlaQcT1^wep=4l(o z;ww(3h=aZ3?eDz_8aG0=p&x@`E#|bd%Sq*gmX0SXttVrf>3PF z`6z4tDbaIg@X82#Bza~qx!TlzoR+p~2 z1cT*4`Z~^6y(s?y1b_rM!Mp{HWDN_9$7{>e3eePqrH_H5>nw<8j@^pq0JkN}3A_~W zh-UyE3X-ukIp;;#TGb4M!nl;u_|(9`zc;DVt!pwMtF6h~OIS-V3FX1v^&h}TjK`IQ z8c(L#yyP>$fX?thciFHSu{x?a>jk!GnO#ceO9O4hFs%28wrEm|eBEB|xD-LsLGUAW zn&~(8a$>Uxx^+Z%MK;x;v%!`;86J~x_0BVL4c}3X63_f5o#wNwm}-TABDel*Qu?;i z6a;T1F#LNr5`{v0TJ8zpls^ymKXzi;^$xsNx-|wcbtSg1Jgc6P!B={zao? z@`GFvp9Pjdw#4CB>N$(jnPJ62K2cCDt-qIFx>OB8d_a*04MaTaRkv6L`HH{39({a% zUH4u!o$FD0Vf|K;BEaf#V&g|3GfM?Fq|e3iUAPt&zjQug9sewmBqlFhw7VoNN~^n8 zulKJSbr4LiQ2|}t+-xN0Q9wA3p@ZquKR&~(Vj*4sqM^xiwP}i2pIY-D^Bi&YG}(;P z%73=*=c+l(swWIftAu6Zr47dUovOL*kLJZ0JibQCPHvn1fx68?LaZ;l4~q*^-W0{s zu9K~2H%buB)E}oMMLN>)#^X|mTgx$7>hu z!bDm(_ewqVVKkac`16yinQAbwvtYjGkkLfW&2412n2 zlwwU|%Pmmqu$oLjV>;^OY_4;FFnT-dK zWkCmsCF`m5Ps0~V$r4Qg2r+-# zfBOx&1_NzO0aKA%!|GUyl(b1Ta%Hv&9vJ4#u2;`&P-gdYrule3ZU%knV$*K{qc=iZ9JF?Wl0(eqwS+~k}g*%Q1u)Uz|vN5Q5V$~p`1q9{!m63c^m_$MhW(FeVC%kt&H^t?KFl{|EAQ4SSd28)S5$2K*>1o< z;;QAQeAkvHO9G7XU#BaQXq-HUY3oYWfw&q2R$bozVR3&Cvx5T3q?)EQQGPR|bUfUd zOb&<%c$EyV%Ye<&1x<3D7lniwSqtxrt>LfS|GT)=%i-bgvQI4&J~@5?7N< zdo{D*m7J$h1FOvZ+eU6#s{pOfI|4daX0sc+-|M>VR_F@GNxE`vunu;=3w|%r+^VvE z8UH5)fB!rW7hQ2NYA4f-h-6a5=@Eu?qE`5sIV!fcW`+2RjqCH-~QA(G+qp8I;{yL(^4Oy{T_(zsM$LGEJuj?O?zc6W3J<`QKj^Er>MJD zG8b!wFg<5B;)5fMYWiP%YFNHlE!LcTJ#_XIp1}!GNw(e?zOb6r=W`7X0Bic$I~zkl zR@7(iE?u$9>@6HmMi)#vng1KD8pn#lCBRK)m#!%H3nhsAN^*U^FePOp7I`XK?_wxh zeAtc4(#ySe{k2Z^j%JL!lBsC4&1pT~s-}8BOyN`KUN+F*n5(6@Y(c4x+fWXkQ_cnn zHh6Q6;S+)LC%b7N$%Y4^9;ai}@aY=lN|+d9(_26W`4&IA_~uTu%}0z>lA?|8p>p5* zH=J=?MuW72pqJ=Mdi+h4>c$8Rmi1UhAXpK4Dm~DYl0;vqXt8~l?T2yWzVDo^d#$5@ zkwvZbD&W60#r0UQ;oNG?1#8+cmkm0OT`1)S!;Y?0z<=1qC&ai%kq~>-E`2`wuK_$Q zA!9TNCb==fDo1wJS@>`pd-K_j2OB>&_Pv>>o??PO771|1=b80`a0FJ}UE+Ysz$4RUdBwaP zdimHsi<^D*Nw>%!x34!Ju0qq9Lcn0;kIce~odG%NCt=#r+<(;#;Z??D0AQ!#3ih>! z9_spVS2#%yBr?~cBnn6;GxAnfNQVb+(@0&qomZ&DMt&g89vF^ zVS8v5_H*_Ae|-d0!&ehPsdhGt_rCP)WU^VZy;B*zZhOjCT?V3Y!3Sbk{uWSgi{B+1-=F44Z!W^2%In5zfo z4q1(p;lP)JGDhgJ?-z%%u;e%qZ%5L^+6L&6kpS1r;vlTmnk8AV#9m{r^O}nEgUfjC zm&F()z-dcxQ`#|^9&7+XIXvhW>0au9fJ4{y-8d81;*xG8Tl0~fBkdb4^~$gMl^w6< zn9m1Rb)2#uQ89s53b=6343ALM_1gOUy)OR=guopvV`J@9c*Ac8zV@?>>v=VDCt`d1 zHMZdCdup$!XSCYNn{u$#qDZ6vnS2^$)UbmJkNA7Ykq6Zeyx9~!BG|$H{c>YR7An(% zb@G;x@D9KlUx~N5JSTK=Froa~ig06WRiO7|drO^lO zz7l`?C*+B!E-G;A%HN3oq|h&6C3iwp6BrLT9nIB-5TzYJAUg^bC==i%ALIBEk0$|i zWEJK0A~&7k*wLbahL^hmJN=Xjq%Ky7k8k2clL$|%^G~h$dx%wD#|s{P-;b0!FTa4f zCp@qhk#z%lkGJOJ?#dn<_QFZAu_k>qd?WKcLo12D5FD5vv<(JQ$9l=$kv@o~+ZK02QqJwLdLC4Pj0W4z* z{kuS!46RFopAyl6RL@Y0>fw=1iXFT4@PCOs;m%TY`ePx4MsJ7I<9~@Z?u;ZequT7X z-iv+XwI9fIB2hfgzMY*E-`xWXz~*6;hZ(nblh9nSte-v0n489M52u`iKEOg{pmxX` zwXIx;urfQ(*-Z{+;EhD+jN4+)rs{Gje}eX?w5G<-z(G(J@eDnE>e5*o;QxSvak*eo zK2By8cK4{SPpG6~(@*btX8&93__blY^FEyoMl?=~wT>c$?Cv!3r~qJM)(W{=`;90x z=c{``omagMVLT`>4)|u}s3deJfwW^zt#kQv$S7bLCoAv0`*sp6)giC+uhCop7e|G@ zpVhL`oia>+i;b9!mUMaFx(J|h!u8D{`f^dpW&t=sG@i#fY__zM3sxQY|Mheqeo3}% zAHXjV5fK$|p<>}eoH9*hdqw5eGzXeFvO-)qbEoAt%blZAOU=D!Lo3ULqdO}# zGcB$A<-VWidHn~@&&Mxto!5Ds$MGvx;N^4LT))$3o>Lm{^mb-rECZTut2zJUyhECx zYUO)~%pBs(@1VOy#;~!bXE&N}VT~Ek{?m-ak_=6qLH;UAzkug)0aqMyv41zL2pbs|)eT-+-8wwxBFP%TtC=cfTSJicu1yjn2GHEI5m; z7;ZIDDY#hkW%2yj@waNv^KTSc*&=N*lrf+Auu&~r!8(k*(8}gp)~LEl+>(6C+gr8m z!ph{F5Wos!1$+WGR4XHj1o?xd)OXpL=ltQ`KC^OBG2bouYw5IFa+e?{1m=_YrWeDsP45;jKcide z-qsCI%$3{Vh`IT^lE|%Z8~yC{=1a;pAAy`0RQ*!xYg91JC+{k&I=kGe70)ogXM>5G zK2{H*foWZ)UUMPXs)5JKW&Q4{uLr{?xO&7**}Fp@oS0u!0zCZRbahuL;@sTnbRTRvQ7&afN97wV^zDYZ9j} za!)0|d@ZyeWUCDMuNR;Qa%>E+!~ElAWGo>8?LGgzJ`bDB4-m~o1j^Z7C~1vkoZ!Fm zB`<$)P&Fg~jaR$%`p1@%Z+LK)&d=K$cS$9-7$tAk=)7^kbUVvDd7=0JY7Mcp%s)nN z90Q=RC;jg@r}Ix08K*ZTvUdm%1bq!cWv1wFU%DN@s$ErK#r~O=%~Xg{XieD8-$2p6#fiFcmRDzD!3A~`6B--o%phW*W4rpa%k)gaHCD}s zXni)0g3%TI{Tm60;9mU;7S>nUBq%LWV}3Z9W*Wzkd|XK19F3v*p7w{kBcDp|j<9lj z8<6I64k{xBel`e4jMj(Cn@701MNH%V4;B*sMU;2&aV^;0AV`1kCvKJBt!qQ0j+Ag|g-0;8wl|DxjkzHIZJHvhw z^ZklyQ*1|XxeNu)&jy11IrHq-pawuE0+i%n^1$yMV?{ej6B<;cX94T_PD%Z}ue7L7 z^I#ggv78NRI^z{0^lmSqzgIQ}qmgh_H}-`c*nM3uCjHWoj>GAt)n^~qe&OoyV!594 zk-t_533pz7&KNpakg$N4&EC3xa0CJlH`Z^{{5-?T>h^%YQ$un?8)|+n+uIkaeLSnv zw!b}=x1?ZFDCl;kGmy*jl54C-!gU#bJSgd|{tg4P6ArPIBzp)AF3c)hBj|9^?xyi0 ztwdM*E0y;KjcyLYCmMRB6rtt1VX0D-0j+e%Vib&=I z5H35)BCpVMu}eaU!&D^RB5nmuEN8pyya_(?P_-8NN*{a~@p&L}k!Xve9oy!+uT@|T zoMxc+1l`Yj*U#hTr{tav$mI{Hbdg$#Y$x@uK0R2$-RmmPn4UR(tbb7bZGhk<{=(x6 zkrP^QoG_L4aWYZo-ckmv%hxo=Xp#Ota z%ED@cBsHlxXNifiemmva_?1gujAD&abTZJHNx*XH1$M_boA{-%&Gk)N!4L`$nLFaR_j(dOIv!##8%7s?z2*mg3`8G?Mh=$8iWzCaeH--g8n*g*jIp`Y(qB|4fMBk9DI(2V45>d@B~ICsWb z$-w#MGyx={wd=}tlMgbTmpLmr;jCQSXU|V8a{82Kzj0AJU!1^<|EM@}M1O3~dufS_ zT@l&lG}BVti8jxMLblkx>II5qRMA}M;49t^euLZw6!2r>aKfhOax(Y_Y#;5htGi9N zl?Er7bEUrf85InMxZu=KBO9WB_ATqUtV%?kDi_rjFx+;IwlL34nWb=Yv{j8g#gq5j zZhtT#F-PV3a7Wl6d&JP7$^2Y?`}S)AQ!X6dudrEb67`}IubOpoFM6G5ErXfCcZe3C z1*4U1&;Pm8Id4gWF6IyCZtNEQj8ldli+CINVq=5OX4+ufHE_0ezQ`j^1aIwqByAt4 zfmg?Wn_WCyT{bBhSiC&g5w$;vo`Z7%7>aa9)PzY;8GfYaM6h_5f?_2o&?x05g?8y& z7V-34(lOvJET=Iv|Mfo`n^>ZihYG=U7 zst3%-6B2#=ZGR1odclTEad7;wWYAz=PV)C^rcFi>MHB4>;#K#uw%Vnmt?a6A3mYDG z1h)-m$+_RmiewtJ|CN>{*#Bb>w(>1(Td^3|ao) zq~}gq{gh>$%Ic1(I944E3!ijI16d0K`aw=>OW(HHzzUhr-8?FwQrJC`g*Mk=M&A}d zomGljnAskCzvc#R<-@B6GMP!~WjRU`pN|V3jXEb4{73>=ulwyi3DzAj#gPe13fvLP z&KdD{H zI1GWC5|slp%-CdS`QqxF6K=5P*X@O)1!0x}Kiq{qCL#+=ppZ&md-FZLwUgUJc1l1B zVlV>nyi=AtyQe{ZA#!XbIQ@s?-R>K#NDq!?=>gEI@`OZvWmaw)pt8Q*7wyw!pg$3V z7u)j9j&XnTAn8<$2-7IKtz67oC}LA>LCKKaPYGo9H!ycQ<@l7kx46*Y;gl&E4l5A9^zoh+kmk~C%2Cr>Kcr;?Hxm)$9)9Y%Rg%s{iEgSg35Q*Y|GsLxyqeG z@Q@X3Jht0SFwzM&a{6GnuD5wY#JK-Pa2HR@0HXv~=_-C=hoxl68@gRnbvwFjh=tUA z3Y(N=dAyUXfOxQQRMEfkCTCL5UWBm%P*VTHCI25I*DW*d)8o&ILyqicN&C?xV^l&i zXZQMhgY)cjHaB#0OU2-QTy)k$jUCCEbN2*$UwHzfBu`*mmxlQpSmzTs%`niO^5fap z@O2gN_Z735VYSVx$FHS?7Mx#ipTxcys&iSEy?GGQlghftmo2f++HT6a8OU<%B2YnJgi11?<@bs_~(}+J&Kx41(>&GRe z%`00wq267I5_~B}jU6@CW;^XW^xHcL40(pkvEj3ioRyQa#<8burajlwN&;iDFEo7B z{9WK;YYR~lZ2ME2~ zZge8n261n4Eby?I(lSDBU5N4uWQYq7iC`MOacqZs+sTPN%TV4_n^iyS6T_}RH~FpC zs(38vF16Rj$1Ec$rSqs^${5&%%0PeY)954s`R@+Yt$SbzvB*`SC*6vOXJ|1TJ0XR*~=v ztOWfBMolxhUm3)wA5`ild^02&>=+0r5zEfL*k4O>8j_fc`SFRPQ$zj=B^wtxaAV&3wM}qG_3@KO`7#0L&*nC;@Xc9_ zRg8qrnaB>%tEz zWT+Cxx^}W|w0^h5+WsFNMq%N7%R4f!*Ysf&mQKU-@I^>+3EjPqdZ#1kMFt4P>NzOd zUxuLmhXYYIeS^P0EEl0N3tKT2rg0X>Tr6h2#{0x*Xxa&UrS{koDg`)z`K{|)>HH07 zox%DA;k(N)tF8aqoO6&6`;~QLy`G2XB(jUs1BvhCm{r#J@})On4!|wyAPfGj>hDwoR z%ZywBAMlE*)bC?yQdqfi2zA{l>n4T7W={6P#f^XdSx_=lY3v~gy{@C9?ZXen<-R{^ z_X-i1q=?WIa~D!wsK1h`ZVrkIf^=W<>z3tf6tQ`m;-|Km#!pxEjElJ~w$j2(HJAiB zKrbcK>TD)vxY&lKoK^JF+@cEM$DTnmZ=C!Tq&*BN6SsuA+(0BuqQI({VB)5y>Sh#x z6P6^->+I_7OQ-Icur5>yVbmwdKIN%HxAJD!nU0+YeiB$nd#yS5wx#eSpdSI%gIrH>j+0!$=6llS*G4?iOx6xlM2(cGzrQZ!al7NnxXzC9nd1-V7O_ z%+Jk?b++nDUR@Z>FKTIttxl$7f#SwIJNI2cS7P`_8Ri}#MMx5Z;efE~0M!nz$4)U| zeoEv^nf`r?Y0HD2c(vfcwkP|`(C(yad?^<-WOX7<{Uz2~0xfS&@sr*e|BloX^xl_V zM9wV6iOu=wgoT5XiH`%e5%Hm$N!Ie5?zL{KioaHZF^^9F%l2Y6#wD#s{XsKi#v5DR zXW-fYUp2%9a6N*_>lhZ&cc+1+c4nseX!l@a)A<;aQ%82SKlpNz3`!7Phr+x?xPQ=G z{)49Ok;c3E>R=Hypmbpe;V$|sd{{Mpie{Dw*)c0Rm(3mL_&6yq;V`&Ne472_`KdDh z*4L|Y7{fG=4aL6RJ&i6!OS0_@tj!{<;NwawSGAOJn##k1Ep=lwm?ye$%{_8Zn9V%F zEi5P|MQA-fMSqwAp@33{+qZI%_#m6Eh@j4${t|shDd3tqUPq^0g#WHhg;-!+=w5$t zEQ?Gzq^f3Kn|x1R;QW!Dz4atqw3V;ev46y%veCeI<~mDkAhMQQur-L;zIDZeB$3im zW$H|TzR9{x8mWKppbcSm8^&*2$2yN)PHVDrJ4+K`X^)B0#3_R@XCJs;yb6)G$5e3(BPeA4e!x8kC> z)?&U+iwi5n1aMADtf!uke;6eW@Hg1q(Ruf9vPgoMq2#86(8~SpW|$J^vIbN-^CYWM zbisf#uH25I$qu`n<0P2@0AoI%L8H&Hv0$z^RtxOs(8%tAkrA)hp!-)&xfxJaWZHOO9SQ^0~{Mb4;HP^7ip8@rW)n)0Av{-%BmQSa`nmrGdzs1dsadTYt7^ za+5I0QF%ratpX`hh;X5;y20cT2>P6jhvd8Xr@0%+vTo#VONHV4HCpz%0?={Vk8>fJ z?sO9}l%4N5Me{k&(?t>>ZY}tldK5ruA?~5&q2}?$sL72xA`YB$c<(sG(-leU6~*xZ zO4=2@efqO>lUTb#*Q0~LdTDWrz52mVW`>5Gt1N8b)34-kIVRMyrA_ilCuE5fjTPX# z5E>iB#O5Oq(+%4&#}`Yl7By0FK)LgHXo`%0!GIATC`-8)G`3hGp{hU=rZz?gvLXEa zPd|@f#X^`^0_X8NsMPZt>7{VqSh3ZKTxO@dHzF5roAHR3(Vp3bYp^Rc|KiZU)8~km z9qp zD8$M!-NEyG=$8fgH@>+}_e{Ico?5I)u;A#WBuNYXdCHIXVg0^1-@bRJJ&F6teN5XK zAjRO$_3%Ks_emKP&sv?=cktnIg2e74Q>V!>6$Q}6R%;RMkgD>9L4JMvhO&~-;}K@* zg9wk@+WaPvl9Ou>p-e^IPuZnnLPZ7{|M?Xz`$XPk)dns15rov^Q&hmrvlL)|f}TA^ z;hZi^?=Pvp^k}=gO|^^oL+*ycZn0T9ch|t@%W1p{EAni|ja|G~`X;no#1;5UpjQ?< zcXWefV@+d)kyj4xEU}C8XNVHtTCrLkIQ5N_v>}zuVUr%b5@gQC3!%6$2>I*sqlw06 zF&7JhcowBGmvgV0Z5MG{E21pc7CS~ye4R(8a>bhDz<(ypLgt|828*W~M$glfE6UO< zF`QKEgB5X0BbVc29v>nXT}jN$Gy`Yb?Q({e$obe(Rk;&+gX)(IXqi%_Z)ztG`lM>U z6tyf<^yWzt_kb=d4b?!IPM%r+%cv*M1tUZwyeerUf|a2Tyy1&>LvaLB)BeEC2?gY* zN>+3(b1zNV7i8~pDSKwuwTM$I`8IymI!6aDwFW0hOxqh=7){v%JD?daIXVBL7Hv`yCkbRj-r){6(596u~E zu`Dtq%>^beP%B-3qxDP;o~Ys@elSbm5dqHBD;7E17}$k zl^}+rLIt1}-MyF3Ok^Zl#z^qqSWDx3fl6n*v&a$K&tk|L5E#LnR;&w=AeA8e1b*Cg z;*XY&K#rigdl>Y&)}lqasd9GiRsABh@hU;a{n4Nct9R7=*IeTOxV^ApwQWyCAR*=&?#x=teYL2AloH%(O_WwClwWR?~KQRZ5VnZ!DN( zV%SJ6j)G(>4eK46CCrV08~$7VM!(;8_s*@1U2U4l@hs%|LYaVh z+@o%!JT-SWOORO)O(ged^zb+f2M(%{4B0(|0&~4L64OOIHSWqJ{@zh10JWGrU1n7$ z?C21LeXn>g+j$VqkieK%BBHkEkn#MUIq#0P%mQ?VWtHve&s|P4t(9Pjck%h<$A333 zsJY^#h0Wn7T?WslSx8B%hO=YVTBfM6WB`;>XL0c+U$nHV$oPb-tN3h@@v5a)&r6}c zyq(=}Bo9cE$Xva|3X7tbVcBHjT+|k9QnG9-AymVhl21rEP=YWC#h`E|#{LLK#9Y1{4jmDgibC!DlDyo<- z9mu+*!oGp}wz;n_&9Ib@TCdG(!E&*a%jCMD+K3jh5G@EGk9!u?@tcajD{REw6kfcb zmP8ZmtrecYCB!f)R$~2x!=kv%nap4R&{*sd4hOeD%?FG=r5X!+nR^ ze-Gfy;1}LW_)>6>R!JE7pI0hv0M{~{`)jukCLU>z?Rdx`apC6R|W+iWP8N}<+v z$2!DY!rNmQuIxxYQ#GOeMXOkTgWB8Li1O`OV5pzseI>thyKp`L?5_02+3&)|df6?<~15s(<=z1C0dpUa{@K7c#6g# z##*y2cT;4y+t1Wh#Jc-qZ|&;hG~>ch8iz=Zsgqil&}f{V&l2dIp6-^NNQK?Gmtog~ zqnijsuh8}JUy+MtwlEmjQtw0LQZ@Uud6u`=0M$XYjn3SeH-{ zW}>CP&YY0;O}?C*kW%Dr4!ZV_pG!WDi^e37`|Hg*ofU-`HzYUKLr81!+>mO`E#dt` zs$r`?%ry=_X1E!x?j{1{Y2G?qZlP5WI1m>1b7hS9lapEn&5@2LeuWnC1A^?PAoj%a zYxPAxLO!Kc}IUow!?S2&V#N@Fo2<^E7wfv=sc$0T6!vhhQCEcEU6 zdVZBhb=>z43zURrC{kD~Vrt=V6(EDaKsIm7g;p~0sch!ut5JRoZhk4QIw;rf-L38H?lxXT`{9Q#8RhYA7n+ckyZ9JKGOm`67@#Nx>y>B>;9)N?DFM|h-CW-1lpRTnon z&a#uCAkIX3nQCM}>u|c4k$hppp9(Epm2M8NWvt)zgGEUsayrpAEZ2HyHm&;{(J%Sw z&~U>A&e-~4RHETyqYkX4C!5QiD?;v8Oo9~tiFm1AKv5ekmIFfil8_%VThD&{ehXI? zw~3R^GE&;?w4v2ZJ}ZlXLqBM_yTsHhd4HAdP7R~HTo2%EI%6+@K_YYo5X`d^;ZJ*1 zg(u#%sQhXtT}25TclYAuy&62ma0GYy#?>|3q@5NZK{bEctXCDWGjhSU7on+iS*%-R$PuxGiLZy> zF1Y5)w9gtGdAjr%cx>^Opl7q)O*R&n>iTexd`?3BGd_MEVmm1p|1mN5=CPXH zq0?O?t%C!Y?&d0_+i-%+3&Go8E=MY3?9wVNE=1w0|`Sj@N`}e@t&saVrYAd^o z)}0bzwQ(uibhPb;gzk2MufDQHRr<;9u%%jBxgZj*eR!#%1@Yt-Ec=plFra&8Kf7Bl zwPN>=dp(R`8EZR1dceA3g2th2E!By;wa1DncZ|*LN)(_iSH!+C0I@gw8nc$eqTz(v zu51?&uja$fpH*_T(AH;_UKaE%K|-6E5to<5XbHc+Whul(nc3FmLp+% zk?lWR41DYaS#$2>w=?2avLt|$3;A<*w4o7Y&k0363i%U6VCXF)((>kCNYvdaxCDn^cG(GWD3kNfF}y+= zJ$3u_uN5_89P*tc_U>TE4sOp{L`#O8w{2MOb{;VQpO^S*wG3+%Q6$faZesSA`5-ID zZw>xTYbA8kQ8wD>VpS@h&6$A0ooRBtS&#gTmzxp=#$~kl!?&=B6*ZORABdG<&Z_uBrhRQsbtW^Df6%x8CL9{?$THzf?*;U>+lfpjSG&;pOx8VJFfoO zZ#32>sA*qxTAFI`&l3WBH|rIlXml+bxq8o=oxnY_$Ict4Q`R>rCVc!WR>z|@2Lc79 zIB_TtNRjvJc3-z$(ADu44qQ)Lc2y~2QnGy;G^N5_;8OGt5j3gwFKLy)7*;MvVz9*d ze~I#b)J`<0JIM0s-KN2hS87LXYTQ)I&of^&b+*3K_IwuOhNfqH4!f_nkf~V~n|JCa@7JNbkaI2dp3Tm~uHk)OPe3 zy>;TdXFR5#H@EH&u?li zky9@IoP8kr%C{jY3$I$Rz-2HHsC)j+j^SZRxUgysoczmRh^`Yj*@K_m< zUOo_-cxoPm43Y=kSvvV%FNz8W1bsr&d!h@mT_6~s;{P#=XCL>Y&#vD#FR&wCYx)(N z0RMo`#`(xasEwS8>i)b z_`)khcEhs7>(|pj!~-(k`a#6(dYX7L-V({nKHrMGyckFPHY>gS4kpy}Um@00i&$54 z(&Xg`itRjN=!mn{+4Z|}Ia$X$ckq8&8S*q7!Q*l|W=Db_&xRBd|2z>XK7wpO__U}S z=^c#ykBFLlSzMmqyQs29Rl^2v1Sv^&v_H`Q`?Z?w!{?;&{ zvB z-h+kIhEjfKeP_=ur&mjC{xDVk0F_%84yj0DJn=D}TS;j>ZLO9oWggX3whPT7YvfwN_oeS&w}1E>(ACIa~K_qIu-S+m4k>ISHDpOBkWSpJ$| z{%YX*wk4SjgMMN%r@Se$X6NgJ@%B^qS-7Faldb`7rF&m^z;96BN34%hVjbToD26wD zV+z-^9)@wOHzM_avEcQ=eTh@v_~0?-It{O_DE>dJ$P7iB$m^$9n3+wewi;y$?PAKo zsxl&k7OwH~WKfs5p^)&qvD=syJ*`wCOkXuGKedZF$QRBU{+az5|)hVZII zgIf$2)h&ECt(C-ufX0sIb5l+4i6dEDVQ2?fWEo?M{gs$dt&;s|k2IauMRS~c zj-_U(zVeUt!hSH>q4vhnhvhkEM&J?>r#Om!Z-M0iE2{>v;?paG0$gCPw+PP(cQ2J8 zIyjjfp~dzoZ_WR-oZ|)vgWm{<;P<&Kksd1b;9gz(eSSu_IiXXW`{u5J8L=c*#eC{f zTYD0Bjk6<1F<=O$}P?Eq(?n%h7G0<$arf9)i89tVc4Gw7hn(NCw78Sbg2U`d@`a z08(gH5t*{y34_6Zx~w0IQFTvz(v+;mxSITEKOC%$77$lL@CiR#9yH*zOAZJEu6xf) z17#B7aJOM>7_}=8xMcS~ubuySrOJ3F_0msWxVG0NUWSjW{cmoWN<`IJJGS1DlDyG$P;m$r<@#|=Xwa1jJcq4KB!D52#ASi=he0y z=4?N?U6%Iwb@!e3eG9o05>Fud50PpizYeMBu2=z8^|`vJ%_Ld~7o$M}6lH&CXK4e`ae!fo?}k&W?S(Ip0bV zrCHY$cr6>q6tNqyaT%2>46uf21WCGB!|bodNb*#rS-v$ZwR&9Ga=_yEKi(_*&iD}E4Xssry*b?5o)Sy8OJKY$gLlDHepg8tVTPzL->*I4IdD#pPr>~&Ruq=H%p8#8vg9K#;;!=grz7;VSI~J~)Iy%dV|hGir>9YI=)$Dlf;HE#T*L_AO6_ zOsd}_s-4mroDUnL8H2cuTW*N%YmGXgte|`vC+AXrt{GRGkVuY*IlZ!d)}4NMtb6^( z>chh=Nn=r_EdG+ePOnxboQs$QHSpcrr0_{)vWq*v)D)43SmOg+eZG5Rl=E&*Kw$J` z_{5Zl>uZ$}!3>JDsMB09^}YyE;Y81iy&IicLXH*sUhwm^&K7D@h=!4Pel<jFL-#JCrwaNp-b>xN3yzc$nykf2AgXg z@knQDAB+!PB5e7}<$U&LzAd>Gg=Ok!*5e>?IMb!PYmB8;6i{ozDL{Qp)mV@N$DjF! zujy0f{-TISh9Pf>|GQ4stv`Nk0_)T*(FgO4N%Ieeu8H%kojtKQLzJpK=Vv|xpmcZ0 z!Vy4p-g2L05d;E|ToY?0)MQtfa{SZ7q7S_^Hlq!|5P#||cgb~{T?r2|THZ#_=;(5v zhGDMxSX=y-S-(Jqbw_NxS*K@(aQ zEK72#By#<0H(6SpJMjm@k>)=3VhO0YLA}+!nH@_6@YaeS8tbF5p7kXA7|uIIUk0c} z5V-$J2+XzR|GSfdZrlhU!>fmsB_sA+wbNqHX16j%8BQlz@89VG;(u2P} zkitxg)v#7JAYm_tVL|z3^0c}_&xIJBB@=1`Ib^;mj7f>MB73Wt9dk@wf%w8*dZc9T zWToVZr1FWBZyt?8#6j+5PCf80r+a$j)%D9=8(?$L%?m+;B)qP?=H$`~cSO6r0-YlG zX|>b29LhG%kF5vrz{%*kXcUk=v9lfni>r`ys^uS_Pjkh%31edG;x>|7LdUaLts{&7rAu9dqKUF0l=qt~?SK;-J2JpiybFB#^h+LcOFCM4QcAQ!|*yY(+y(PYJ=GjZsLm; zbCZyifa;w)*c)?%I@WtC-|zhWjh!DbmyMTw(!bkXeca9Zt`O!G#w8Fr6paSUJNk8K zyLP>X5|*VVN>9`uQx+G=7hx|!%Ky@(qJp{0S&zZ`Ydbx-dzS2vO_UX%gs-Ibk!zH* zn;jWjpkzzNTRyKAKGrUUu1a5wcgx>Cww~CSU|v!3!0SD>q@kwfN#w2I1gGBcbP1>j z@D7^9)YgS>#Q&sgS@EwKqZ=AS1VZg9 zf732wo@lBcq@2jPc5j)x0L|8sDG4NtQ+@v&*1?uLt-+kLLu#BhfV$0?_CW~tRy zn&j_{(p<8YA%~^4%yi__lS+@@ck5N zh=dP{GV$zX+lZVbKNan5S?GXO<$pDtt_Vb5obDqJzr_T6lnz-af}hT$Db{9zQ=117 zU`7(Y%zE5SVhd7DBaJ0CpG#awlPI%b@8-$=b$h3eEO&(vfAQG*r(l|#csXfPG^RWQ zS?R5rU5e#9&AL9<9gRA(UHg1qtBiK}-p6$J>(^GGbiOf{dW!o*NWGW2yEYezIIK2r z;TL^RP_SR#)=hFRc>tI0#yz~MgYJBNgq#Av8EnoP`n%n2Ike);=d*%c_!FEYOMUM!5&0K4wX3=; zf%C2!&9Gi1j#drIVh;m&it8nOAyo~b-yXf*NWUbY9}BeBa2=T^+3OnxO%!+FiglpG)!MP6ZhW6k%UkDu49!vv?Cj+_Thu$Zal@bj4eq8?$uhE4Y z2jdIJVx=R3>8?3QNZ0OG*aF;{5Ut|aZO^2^=s`8&J0*2$HbwnnxZx14Gf)PX0HpCkr5@9+>aiB>=ve+LG&Hy@@+^;*(1?HBac z1gS*T9@gxl7cO_SR7^z?bwiOakLz**XatzqzHn|)I;mCxB3{_6G7-)>4p-##V$DKK z{k7!Fb`=sVaXS9Qh#$ozCr6M`|E&DOUeP%m4ot}+EIZwzXy+-!m9Apx=l%xV7WG+N zlY{27SXi~?lA3o)0!5KbvlF-ZkCwWrb!yDRoPmcF<5vRuG#bS&?p7cKS7Dd<_58De zmW}wN#7qK#F*^|VAbc6s?MDvF=hpf?T8{$wB>uxC2?yj2Z=|eK{7Taum%r>?#moYT zA=sTTRbD&H66|@aN;!~o$2SKt5<9L;pW)6yD zng0dmMjW<*^pxey!gV! zDn_0m{IuWZgturedhxI4wF;Bq3QoE8Np5runDfkYibNbbUc%<+kJeOUpBVK|8-D{Q zw|k9yG%tpD7qRl@l1q;7@g6QK0Ir=z;cLEcOCqn`h`6MZu5(Oy?=3Tl7II{-WAje| zxa?$g-PmRxCpeaaqON4gCN3NE@ItG=IT^B~cj3)~5<^8^!^ufF$U$FOtXFxr&yX$| z#%dw@ej@@}IpWQG>tK>khoN`nPvG;g)LGNK?q?}KnX>%gcL9dK4!(QwSM;VHnrtXV zU~*9$AlX|tXCjy0!Sf0~oIUEjfbz(f;w(QZyxpZ=^;7EPPnExzizesyj#7rAAhsvN zS>1u%cN!M)w{*r2sgky}XFB26Ryj@JjR)AXgNj7x){WL-e+*Y5clavYeQN*HaPmM; zc}GgZubTxmu}eu}=*rB4x`Qosz>`f*`K z&^t4SVA{4b-lZRn-2WY9Yzh{qN%I~I4kBf_U}|UTpYJS)q^C%R?j4U<%8^uf$`%-O zY69+fWin%4%S%z6_iW&#A{Gw$!rWo~W1~;CKb$yvbWq$)Tkc^}P3`5E zR?yG0J9}Su{_X?BPyiUr2CxDD{|7=TyWohH08-`ecK{3o27yiie<`-ip%JO~{2AE> z> z0kMPre+d9!ErMh%;u7@l8f^cp(JR(f;B%X%*AYN2A1k { + // Setup initial content for the webview + webviewPanel.webview.options = { + enableScripts: true, + }; + webviewPanel.webview.html = this.getHtmlForWebview(webviewPanel.webview); + + function updateWebview() { + webviewPanel.webview.postMessage({ + type: 'update', + text: document.getText(), + }); + } + + // Hook up event handlers so that we can synchronize the webview with the text document. + // + // The text document acts as our model, so we have to sync change in the document to our + // editor and sync changes in the editor back to the document. + // + // Remember that a single text document can also be shared between multiple custom + // editors (this happens for example when you split a custom editor) + + const changeDocumentSubscription = vscode.workspace.onDidChangeTextDocument(e => { + if (e.document.uri.toString() === document.uri.toString()) { + updateWebview(); + } + }); + + // Make sure we get rid of the listener when our editor is closed. + webviewPanel.onDidDispose(() => { + changeDocumentSubscription.dispose(); + }); + + // Receive message from the webview. + webviewPanel.webview.onDidReceiveMessage(e => { + switch (e.type) { + case 'add': + this.addNewScratch(document); + return; + + case 'delete': + this.deleteScratch(document, e.id); + return; + } + }); + + updateWebview(); + } + + /** + * Get the static html used for the editor webviews. + */ + private getHtmlForWebview(webview: vscode.Webview): string { + // Local path to script and css for the webview + const scriptUri = webview.asWebviewUri(vscode.Uri.file( + path.join(this.context.extensionPath, 'media', 'catScratch.js') + )); + const styleUri = webview.asWebviewUri(vscode.Uri.file( + path.join(this.context.extensionPath, 'media', 'catScratch.css') + )); + + // Use a nonce to whitelist which scripts can be run + const nonce = getNonce(); + + return /* html */` + + + + + + + + + + + + + Cat Scratch + + +
+
+ +
+
+ + + + `; + } + + /** + * Add a new scratch to the current document. + */ + private addNewScratch(document: vscode.TextDocument) { + const json = this.getDocumentAsJson(document); + const character = CatScratchEditorProvider.scratchCharacters[Math.floor(Math.random() * CatScratchEditorProvider.scratchCharacters.length)]; + json.scratches = [ + ...(Array.isArray(json.scratches) ? json.scratches : []), + { + id: getNonce(), + text: character, + created: Date.now(), + } + ]; + + return this.updateTextDocument(document, json); + } + + /** + * Delete an exisitng scratch from a document. + */ + private deleteScratch(document: vscode.TextDocument, id: string) { + const json = this.getDocumentAsJson(document); + if (!Array.isArray(json.scratches)) { + return; + } + + json.scratches = json.scratches.filter((note: any) => note.id !== id); + + return this.updateTextDocument(document, json); + } + + /** + * Try to get a current document as json text. + */ + private getDocumentAsJson(document: vscode.TextDocument): any { + const text = document.getText(); + if (text.trim().length === 0) { + return {}; + } + + try { + return JSON.parse(text); + } catch { + throw new Error('Could not get document as json. Content is not valid json'); + } + } + + /** + * Write out the json to a given document. + */ + private updateTextDocument(document: vscode.TextDocument, json: any) { + const edit = new vscode.WorkspaceEdit(); + + // Just replace the entire document every time for this example extension. + // A more complete extension should compute minimal edits instead. + edit.replace( + document.uri, + new vscode.Range(0, 0, document.lineCount, 0), + JSON.stringify(json, null, 2)); + + return vscode.workspace.applyEdit(edit); + } +} diff --git a/custom-editor-sample/src/extension.ts b/custom-editor-sample/src/extension.ts new file mode 100644 index 00000000..5baac788 --- /dev/null +++ b/custom-editor-sample/src/extension.ts @@ -0,0 +1,9 @@ +import * as vscode from 'vscode'; +import { CatScratchEditorProvider } from './catScratchEditor'; +import { PawDrawEditorProvider } from './pawDrawEditor'; + +export function activate(context: vscode.ExtensionContext) { + // Register our custom editor providers + context.subscriptions.push(CatScratchEditorProvider.register(context)); + context.subscriptions.push(PawDrawEditorProvider.register(context)); +} diff --git a/custom-editor-sample/src/pawDrawEditor.ts b/custom-editor-sample/src/pawDrawEditor.ts new file mode 100644 index 00000000..10a9f6cb --- /dev/null +++ b/custom-editor-sample/src/pawDrawEditor.ts @@ -0,0 +1,305 @@ +import * as crypto from 'crypto'; +import * as path from 'path'; +import * as vscode from 'vscode'; +import { getNonce } from './util'; + +/** + * Define the type of edits used in paw draw files. + */ +interface PawDrawEdit { + readonly color: string; + readonly stroke: ReadonlyArray<[number, number]>; +} + +/** + * Define our document type. + */ +class PawDrawDocument extends vscode.CustomDocument { + constructor( + uri: vscode.Uri, + public readonly initialContent: Uint8Array, + ) { + super(PawDrawEditorProvider.viewType, uri); + } +} + +/** + * Provider for paw draw editors. + * + * Paw draw editors are used for `.pawDraw` files, which are just `.png` files with a different file extension. + * + * This provider demonstrates: + * + * - How to implement a custom editor for binary files. + * - Setting up the initial webview for a custom editor. + * - Loading scripts and styles in a custom editor. + * - Communication between VS Code and the custom editor. + * - Using CustomDocuments to store information that is shared between multiple custom editors. + * - Implementing save, undo, redo, and revert. + * - Backing up a custom editor. + */ +export class PawDrawEditorProvider implements vscode.CustomEditorProvider, vscode.CustomEditorEditingDelegate { + + public static register(context: vscode.ExtensionContext): vscode.Disposable { + return vscode.window.registerCustomEditorProvider( + PawDrawEditorProvider.viewType, + new PawDrawEditorProvider(context), + { + // For this demo extension, we enable `retainContextWhenHidden` which keeps the + // webview alive even when it is not visible. You should avoid using this setting + // unless is absolutely required as it does have memory overhead. + webviewOptions: { + retainContextWhenHidden: true, + } + }); + } + + public static readonly viewType = 'catEdit.pawDraw'; + + /** + * Map from resource to webview panels. + */ + private readonly _allWebviews = new Map>(); + + private readonly backupFolder = 'pawDraw'; + + constructor( + private readonly _context: vscode.ExtensionContext + ) { } + + // By setting an `editingDelegate`, we enable editing for our custom editor. + public readonly editingDelegate = this; + + async openCustomDocument( + uri: vscode.Uri, + _token: vscode.CancellationToken + ): Promise> { + // Check for backup first + const backupResource = this.getBackupResource(uri); + + // If we have a backup, read that. Otherwise read the resource from the workspace + let dataFile = uri; + if (backupResource && await exists(backupResource)) { + dataFile = backupResource; + } + + const fileData = await vscode.workspace.fs.readFile(dataFile); + return new PawDrawDocument(uri, fileData); + } + + async resolveCustomEditor( + document: PawDrawDocument, + webviewPanel: vscode.WebviewPanel, + _token: vscode.CancellationToken + ): Promise { + const resourceKey = document.uri.toString(); + + const webviews = this._allWebviews.get(resourceKey) || new Set(); + webviews.add(webviewPanel); + this._allWebviews.set(resourceKey, webviews); + + webviewPanel.onDidDispose(() => { + const webviews = this._allWebviews.get(resourceKey); + if (!webviews) { + return; + } + + webviews.delete(webviewPanel); + if (!webviews.size) { + this._allWebviews.delete(resourceKey) + } + }); + + // Setup initial content for the webview + webviewPanel.webview.options = { + enableScripts: true, + }; + webviewPanel.webview.html = this.getHtmlForWebview(webviewPanel.webview); + + webviewPanel.webview.onDidReceiveMessage(e => this.onMessage(document, e)); + + // Wait for the webview to be properly ready before we init + webviewPanel.webview.onDidReceiveMessage(e => { + if (e.type === 'ready') { + this.postMessage(webviewPanel, 'init', { + value: document.initialContent + }); + } + }); + } + + /** + * Get the static HTML used for in our editor's webviews. + */ + private getHtmlForWebview(webview: vscode.Webview): string { + // Local path to script and css for the webview + const scriptUri = webview.asWebviewUri(vscode.Uri.file( + path.join(this._context.extensionPath, 'media', 'pawDraw.js') + )); + const styleUri = webview.asWebviewUri(vscode.Uri.file( + path.join(this._context.extensionPath, 'media', 'pawDraw.css') + )); + + // Use a nonce to whitelist which scripts can be run + const nonce = getNonce(); + + return /* html */` + + + + + + + + + + + + + Paw Draw + + +
+ +
+ + + + + +
+ + + + `; + } + + // #region CustomEditorEditingDelegate + + private readonly _onDidEdit = new vscode.EventEmitter>(); + public readonly onDidEdit = this._onDidEdit.event; + + async save(document: PawDrawDocument, _cancellation: vscode.CancellationToken): Promise { + await this.saveAs(document, document.uri); + + // Delete backup on save + const backupResource = this.getBackupResource(document.uri); + if (backupResource) { + try { + vscode.workspace.fs.delete(backupResource) + } catch { + // noop + } + } + } + + async saveAs(document: PawDrawDocument, targetResource: vscode.Uri): Promise { + const webviews = this._allWebviews.get(document.uri.toString()); + if (!webviews || !webviews.size) { + throw new Error('Could not find webview to save for'); + } + const [panel] = webviews.values(); + const response = await this.postMessageWithResponse<{ data: number[] }>(panel, 'getFileData', {}); + const fileData = new Uint8Array(response.data); + vscode.workspace.fs.writeFile(targetResource, fileData); + } + + async applyEdits(document: PawDrawDocument, _edits: readonly PawDrawEdit[]): Promise { + this.updateWebviews(document); + } + + async undoEdits(document: PawDrawDocument, _edits: readonly PawDrawEdit[]): Promise { + this.updateWebviews(document); + } + + async revert(document: PawDrawDocument, _edits: vscode.CustomDocumentRevert): Promise { + this.updateWebviews(document); + } + + async backup(document: PawDrawDocument, _cancellation: vscode.CancellationToken): Promise { + if (!this._context.storagePath) { + return; + } + + const dir = path.join(this._context.storagePath, this.backupFolder); + await vscode.workspace.fs.createDirectory(vscode.Uri.file(dir)); + + const backupResource = this.getBackupResource(document.uri); + if (backupResource) { + await this.saveAs(document, backupResource); + } + } + + private getBackupResource(uri: vscode.Uri): vscode.Uri | undefined { + if (!this._context.storagePath) { + return undefined; + } + const dir = path.join(this._context.storagePath, this.backupFolder); + const fileName = crypto.createHash('sha256').update(uri.toString(), 'utf8').digest('hex'); + + return vscode.Uri.file(path.join(dir, fileName)); + } + + // #endregion + + public updateWebviews(document: PawDrawDocument) { + for (const webviewPanel of this._allWebviews.get(document.uri.toString()) || []) { + this.postMessage(webviewPanel, 'update', { + edits: document.appliedEdits, + }); + } + } + + private _requestId = 1; + private readonly _callbacks = new Map void>(); + + private postMessageWithResponse(panel: vscode.WebviewPanel, type: string, body: any): Promise { + const requestId = this._requestId++; + const p = new Promise(resolve => this._callbacks.set(requestId, resolve)); + panel.webview.postMessage({ type, requestId, body }); + return p; + } + + private postMessage(panel: vscode.WebviewPanel, type: string, body: any): void { + panel.webview.postMessage({ type, body }); + } + + private onMessage(document: PawDrawDocument, message: any) { + switch (message.type) { + case 'stroke': + // Tell VS Code that an edit has ocurred + this._onDidEdit.fire({ + document, + label: "Stroke", + edit: { + color: message.color, + stroke: message.stroke, + }, + }); + + // Make sure other webviews also know about this + this.updateWebviews(document); + return; + + case 'response': + const callback = this._callbacks.get(message.requestId); + if (callback) { + callback(message.body); + } + return; + } + } +} + +async function exists(backupResource: vscode.Uri): Promise { + try { + await vscode.workspace.fs.stat(backupResource); + return true; + } catch { + return false + } +} + diff --git a/custom-editor-sample/src/util.ts b/custom-editor-sample/src/util.ts new file mode 100644 index 00000000..1e54bdff --- /dev/null +++ b/custom-editor-sample/src/util.ts @@ -0,0 +1,8 @@ +export function getNonce() { + let text = ''; + const possible = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'; + for (let i = 0; i < 32; i++) { + text += possible.charAt(Math.floor(Math.random() * possible.length)); + } + return text; +} diff --git a/custom-editor-sample/src/vscode.proposed.d.ts b/custom-editor-sample/src/vscode.proposed.d.ts new file mode 100644 index 00000000..b24a9b21 --- /dev/null +++ b/custom-editor-sample/src/vscode.proposed.d.ts @@ -0,0 +1,2092 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +/** + * This is the place for API experiments and proposals. + * These API are NOT stable and subject to change. They are only available in the Insiders + * distribution and CANNOT be used in published extensions. + * + * To test these API in local environment: + * - Use Insiders release of VS Code. + * - Add `"enableProposedApi": true` to your package.json. + * - Copy this file to your project. + */ + +declare module 'vscode' { + + // #region auth provider: https://github.com/microsoft/vscode/issues/88309 + + export interface AuthenticationSession { + id: string; + getAccessToken(): Thenable; + accountName: string; + scopes: string[] + } + + /** + * An [event](#Event) which fires when an [AuthenticationProvider](#AuthenticationProvider) is added or removed. + */ + export interface AuthenticationProvidersChangeEvent { + /** + * The ids of the [authenticationProvider](#AuthenticationProvider)s that have been added. + */ + readonly added: string[]; + + /** + * The ids of the [authenticationProvider](#AuthenticationProvider)s that have been removed. + */ + readonly removed: string[]; + } + + /** + * An [event](#Event) which fires when an [AuthenticationSession](#AuthenticationSession) is added, removed, or changed. + */ + export interface AuthenticationSessionsChangeEvent { + /** + * The ids of the [AuthenticationSession](#AuthenticationSession)s that have been added. + */ + readonly added: string[]; + + /** + * The ids of the [AuthenticationSession](#AuthenticationSession)s that have been removed. + */ + readonly removed: string[]; + + /** + * The ids of the [AuthenticationSession](#AuthenticationSession)s that have been changed. + */ + readonly changed: string[]; + } + + export interface AuthenticationProvider { + /** + * Used as an identifier for extensions trying to work with a particular + * provider: 'microsoft', 'github', etc. id must be unique, registering + * another provider with the same id will fail. + */ + readonly id: string; + readonly displayName: string; + + /** + * An [event](#Event) which fires when the array of sessions has changed, or data + * within a session has changed. + */ + readonly onDidChangeSessions: Event; + + /** + * Returns an array of current sessions. + */ + getSessions(): Thenable>; + + /** + * Prompts a user to login. + */ + login(scopes: string[]): Thenable; + logout(sessionId: string): Thenable; + } + + export namespace authentication { + export function registerAuthenticationProvider(provider: AuthenticationProvider): Disposable; + + /** + * Fires with the provider id that was registered or unregistered. + */ + export const onDidChangeAuthenticationProviders: Event; + + /** + * An array of the ids of authentication providers that are currently registered. + */ + export const providerIds: string[]; + + /** + * Get existing authentication sessions. Rejects if a provider with providerId is not + * registered, or if the user does not consent to sharing authentication information with + * the extension. + */ + export function getSessions(providerId: string, scopes: string[]): Thenable; + + /** + * Prompt a user to login to create a new authenticaiton session. Rejects if a provider with + * providerId is not registered, or if the user does not consent to sharing authentication + * information with the extension. + */ + export function login(providerId: string, scopes: string[]): Thenable; + + /** + * An [event](#Event) which fires when the array of sessions has changed, or data + * within a session has changed for a provider. Fires with the ids of the providers + * that have had session data change. + */ + export const onDidChangeSessions: Event<{ [providerId: string]: AuthenticationSessionsChangeEvent }>; + } + + //#endregion + + //#region Alex - resolvers + + export interface RemoteAuthorityResolverContext { + resolveAttempt: number; + } + + export class ResolvedAuthority { + readonly host: string; + readonly port: number; + + constructor(host: string, port: number); + } + + export interface ResolvedOptions { + extensionHostEnv?: { [key: string]: string | null }; + } + + export interface TunnelOptions { + remoteAddress: { port: number, host: string }; + // The desired local port. If this port can't be used, then another will be chosen. + localAddressPort?: number; + label?: string; + } + + export interface TunnelDescription { + remoteAddress: { port: number, host: string }; + //The complete local address(ex. localhost:1234) + localAddress: { port: number, host: string } | string; + } + + export interface Tunnel extends TunnelDescription { + // Implementers of Tunnel should fire onDidDispose when dispose is called. + onDidDispose: Event; + dispose(): void; + } + + /** + * Used as part of the ResolverResult if the extension has any candidate, + * published, or forwarded ports. + */ + export interface TunnelInformation { + /** + * Tunnels that are detected by the extension. The remotePort is used for display purposes. + * The localAddress should be the complete local address (ex. localhost:1234) for connecting to the port. Tunnels provided through + * detected are read-only from the forwarded ports UI. + */ + environmentTunnels?: TunnelDescription[]; + + } + + export type ResolverResult = ResolvedAuthority & ResolvedOptions & TunnelInformation; + + export class RemoteAuthorityResolverError extends Error { + static NotAvailable(message?: string, handled?: boolean): RemoteAuthorityResolverError; + static TemporarilyNotAvailable(message?: string): RemoteAuthorityResolverError; + + constructor(message?: string); + } + + export interface RemoteAuthorityResolver { + resolve(authority: string, context: RemoteAuthorityResolverContext): ResolverResult | Thenable; + /** + * Can be optionally implemented if the extension can forward ports better than the core. + * When not implemented, the core will use its default forwarding logic. + * When implemented, the core will use this to forward ports. + */ + tunnelFactory?: (tunnelOptions: TunnelOptions) => Thenable | undefined; + + /** + * Provides filtering for candidate ports. + */ + showCandidatePort?: (host: string, port: number, detail: string) => Thenable; + } + + export namespace workspace { + /** + * Forwards a port. If the current resolver implements RemoteAuthorityResolver:forwardPort then that will be used to make the tunnel. + * By default, openTunnel only support localhost; however, RemoteAuthorityResolver:tunnelFactory can be used to support other ips. + * @param tunnelOptions The `localPort` is a suggestion only. If that port is not available another will be chosen. + */ + export function openTunnel(tunnelOptions: TunnelOptions): Thenable; + + /** + * Gets an array of the currently available tunnels. This does not include environment tunnels, only tunnels that have been created by the user. + * Note that these are of type TunnelDescription and cannot be disposed. + */ + export let tunnels: Thenable; + + /** + * Fired when the list of tunnels has changed. + */ + export const onDidChangeTunnels: Event; + } + + export interface ResourceLabelFormatter { + scheme: string; + authority?: string; + formatting: ResourceLabelFormatting; + } + + export interface ResourceLabelFormatting { + label: string; // myLabel:/${path} + // TODO@isi + // eslint-disable-next-line vscode-dts-literal-or-types + separator: '/' | '\\' | ''; + tildify?: boolean; + normalizeDriveLetter?: boolean; + workspaceSuffix?: string; + authorityPrefix?: string; + } + + export namespace workspace { + export function registerRemoteAuthorityResolver(authorityPrefix: string, resolver: RemoteAuthorityResolver): Disposable; + export function registerResourceLabelFormatter(formatter: ResourceLabelFormatter): Disposable; + } + + //#endregion + + //#region Semantic tokens: https://github.com/microsoft/vscode/issues/86415 + + export class SemanticTokensLegend { + public readonly tokenTypes: string[]; + public readonly tokenModifiers: string[]; + + constructor(tokenTypes: string[], tokenModifiers: string[]); + } + + export class SemanticTokensBuilder { + constructor(); + push(line: number, char: number, length: number, tokenType: number, tokenModifiers: number): void; + build(): Uint32Array; + } + + export class SemanticTokens { + /** + * The result id of the tokens. + * + * This is the id that will be passed to `DocumentSemanticTokensProvider.provideDocumentSemanticTokensEdits` (if implemented). + */ + readonly resultId?: string; + readonly data: Uint32Array; + + constructor(data: Uint32Array, resultId?: string); + } + + export class SemanticTokensEdits { + /** + * The result id of the tokens. + * + * This is the id that will be passed to `DocumentSemanticTokensProvider.provideDocumentSemanticTokensEdits` (if implemented). + */ + readonly resultId?: string; + readonly edits: SemanticTokensEdit[]; + + constructor(edits: SemanticTokensEdit[], resultId?: string); + } + + export class SemanticTokensEdit { + readonly start: number; + readonly deleteCount: number; + readonly data?: Uint32Array; + + constructor(start: number, deleteCount: number, data?: Uint32Array); + } + + /** + * The document semantic tokens provider interface defines the contract between extensions and + * semantic tokens. + */ + export interface DocumentSemanticTokensProvider { + /** + * An optional event to signal that the semantic tokens from this provider have changed. + */ + onDidChangeSemanticTokens?: Event; + + /** + * A file can contain many tokens, perhaps even hundreds of thousands of tokens. Therefore, to improve + * the memory consumption around describing semantic tokens, we have decided to avoid allocating an object + * for each token and we represent tokens from a file as an array of integers. Furthermore, the position + * of each token is expressed relative to the token before it because most tokens remain stable relative to + * each other when edits are made in a file. + * + * --- + * In short, each token takes 5 integers to represent, so a specific token `i` in the file consists of the following array indices: + * - at index `5*i` - `deltaLine`: token line number, relative to the previous token + * - at index `5*i+1` - `deltaStart`: token start character, relative to the previous token (relative to 0 or the previous token's start if they are on the same line) + * - at index `5*i+2` - `length`: the length of the token. A token cannot be multiline. + * - at index `5*i+3` - `tokenType`: will be looked up in `SemanticTokensLegend.tokenTypes`. We currently ask that `tokenType` < 65536. + * - at index `5*i+4` - `tokenModifiers`: each set bit will be looked up in `SemanticTokensLegend.tokenModifiers` + * + * --- + * ### How to encode tokens + * + * Here is an example for encoding a file with 3 tokens in a uint32 array: + * ``` + * { line: 2, startChar: 5, length: 3, tokenType: "property", tokenModifiers: ["private", "static"] }, + * { line: 2, startChar: 10, length: 4, tokenType: "type", tokenModifiers: [] }, + * { line: 5, startChar: 2, length: 7, tokenType: "class", tokenModifiers: [] } + * ``` + * + * 1. First of all, a legend must be devised. This legend must be provided up-front and capture all possible token types. + * For this example, we will choose the following legend which must be passed in when registering the provider: + * ``` + * tokenTypes: ['property', 'type', 'class'], + * tokenModifiers: ['private', 'static'] + * ``` + * + * 2. The first transformation step is to encode `tokenType` and `tokenModifiers` as integers using the legend. Token types are looked + * up by index, so a `tokenType` value of `1` means `tokenTypes[1]`. Multiple token modifiers can be set by using bit flags, + * so a `tokenModifier` value of `3` is first viewed as binary `0b00000011`, which means `[tokenModifiers[0], tokenModifiers[1]]` because + * bits 0 and 1 are set. Using this legend, the tokens now are: + * ``` + * { line: 2, startChar: 5, length: 3, tokenType: 0, tokenModifiers: 3 }, + * { line: 2, startChar: 10, length: 4, tokenType: 1, tokenModifiers: 0 }, + * { line: 5, startChar: 2, length: 7, tokenType: 2, tokenModifiers: 0 } + * ``` + * + * 3. The next step is to represent each token relative to the previous token in the file. In this case, the second token + * is on the same line as the first token, so the `startChar` of the second token is made relative to the `startChar` + * of the first token, so it will be `10 - 5`. The third token is on a different line than the second token, so the + * `startChar` of the third token will not be altered: + * ``` + * { deltaLine: 2, deltaStartChar: 5, length: 3, tokenType: 0, tokenModifiers: 3 }, + * { deltaLine: 0, deltaStartChar: 5, length: 4, tokenType: 1, tokenModifiers: 0 }, + * { deltaLine: 3, deltaStartChar: 2, length: 7, tokenType: 2, tokenModifiers: 0 } + * ``` + * + * 4. Finally, the last step is to inline each of the 5 fields for a token in a single array, which is a memory friendly representation: + * ``` + * // 1st token, 2nd token, 3rd token + * [ 2,5,3,0,3, 0,5,4,1,0, 3,2,7,2,0 ] + * ``` + * + * *NOTE*: When doing edits, it is possible that multiple edits occur until VS Code decides to invoke the semantic tokens provider. + * *NOTE*: If the provider cannot temporarily compute semantic tokens, it can indicate this by throwing an error with the message 'Busy'. + */ + provideDocumentSemanticTokens(document: TextDocument, token: CancellationToken): ProviderResult; + + /** + * Instead of always returning all the tokens in a file, it is possible for a `DocumentSemanticTokensProvider` to implement + * this method (`updateSemanticTokens`) and then return incremental updates to the previously provided semantic tokens. + * + * --- + * ### How tokens change when the document changes + * + * Let's look at how tokens might change. + * + * Continuing with the above example, suppose a new line was inserted at the top of the file. + * That would make all the tokens move down by one line (notice how the line has changed for each one): + * ``` + * { line: 3, startChar: 5, length: 3, tokenType: "property", tokenModifiers: ["private", "static"] }, + * { line: 3, startChar: 10, length: 4, tokenType: "type", tokenModifiers: [] }, + * { line: 6, startChar: 2, length: 7, tokenType: "class", tokenModifiers: [] } + * ``` + * The integer encoding of the tokens does not change substantially because of the delta-encoding of positions: + * ``` + * // 1st token, 2nd token, 3rd token + * [ 3,5,3,0,3, 0,5,4,1,0, 3,2,7,2,0 ] + * ``` + * It is possible to express these new tokens in terms of an edit applied to the previous tokens: + * ``` + * [ 2,5,3,0,3, 0,5,4,1,0, 3,2,7,2,0 ] // old tokens + * [ 3,5,3,0,3, 0,5,4,1,0, 3,2,7,2,0 ] // new tokens + * + * edit: { start: 0, deleteCount: 1, data: [3] } // replace integer at offset 0 with 3 + * ``` + * + * Furthermore, let's assume that a new token has appeared on line 4: + * ``` + * { line: 3, startChar: 5, length: 3, tokenType: "property", tokenModifiers: ["private", "static"] }, + * { line: 3, startChar: 10, length: 4, tokenType: "type", tokenModifiers: [] }, + * { line: 4, startChar: 3, length: 5, tokenType: "property", tokenModifiers: ["static"] }, + * { line: 6, startChar: 2, length: 7, tokenType: "class", tokenModifiers: [] } + * ``` + * The integer encoding of the tokens is: + * ``` + * // 1st token, 2nd token, 3rd token, 4th token + * [ 3,5,3,0,3, 0,5,4,1,0, 1,3,5,0,2, 2,2,7,2,0, ] + * ``` + * Again, it is possible to express these new tokens in terms of an edit applied to the previous tokens: + * ``` + * [ 3,5,3,0,3, 0,5,4,1,0, 3,2,7,2,0 ] // old tokens + * [ 3,5,3,0,3, 0,5,4,1,0, 1,3,5,0,2, 2,2,7,2,0, ] // new tokens + * + * edit: { start: 10, deleteCount: 1, data: [1,3,5,0,2,2] } // replace integer at offset 10 with [1,3,5,0,2,2] + * ``` + * + * *NOTE*: If the provider cannot compute `SemanticTokensEdits`, it can "give up" and return all the tokens in the document again. + * *NOTE*: All edits in `SemanticTokensEdits` contain indices in the old integers array, so they all refer to the previous result state. + */ + provideDocumentSemanticTokensEdits?(document: TextDocument, previousResultId: string, token: CancellationToken): ProviderResult; + } + + /** + * The document range semantic tokens provider interface defines the contract between extensions and + * semantic tokens. + */ + export interface DocumentRangeSemanticTokensProvider { + /** + * See [provideDocumentSemanticTokens](#DocumentSemanticTokensProvider.provideDocumentSemanticTokens). + */ + provideDocumentRangeSemanticTokens(document: TextDocument, range: Range, token: CancellationToken): ProviderResult; + } + + export namespace languages { + /** + * Register a semantic tokens provider for a whole document. + * + * Multiple providers can be registered for a language. In that case providers are sorted + * by their [score](#languages.match) and the best-matching provider is used. Failure + * of the selected provider will cause a failure of the whole operation. + * + * @param selector A selector that defines the documents this provider is applicable to. + * @param provider A document semantic tokens provider. + * @return A [disposable](#Disposable) that unregisters this provider when being disposed. + */ + export function registerDocumentSemanticTokensProvider(selector: DocumentSelector, provider: DocumentSemanticTokensProvider, legend: SemanticTokensLegend): Disposable; + + /** + * Register a semantic tokens provider for a document range. + * + * Multiple providers can be registered for a language. In that case providers are sorted + * by their [score](#languages.match) and the best-matching provider is used. Failure + * of the selected provider will cause a failure of the whole operation. + * + * @param selector A selector that defines the documents this provider is applicable to. + * @param provider A document range semantic tokens provider. + * @return A [disposable](#Disposable) that unregisters this provider when being disposed. + */ + export function registerDocumentRangeSemanticTokensProvider(selector: DocumentSelector, provider: DocumentRangeSemanticTokensProvider, legend: SemanticTokensLegend): Disposable; + } + + //#endregion + + //#region editor insets: https://github.com/microsoft/vscode/issues/85682 + + export interface WebviewEditorInset { + readonly editor: TextEditor; + readonly line: number; + readonly height: number; + readonly webview: Webview; + readonly onDidDispose: Event; + dispose(): void; + } + + export namespace window { + export function createWebviewTextEditorInset(editor: TextEditor, line: number, height: number, options?: WebviewOptions): WebviewEditorInset; + } + + //#endregion + + //#region read/write in chunks: https://github.com/microsoft/vscode/issues/84515 + + export interface FileSystemProvider { + open?(resource: Uri, options: { create: boolean }): number | Thenable; + close?(fd: number): void | Thenable; + read?(fd: number, pos: number, data: Uint8Array, offset: number, length: number): number | Thenable; + write?(fd: number, pos: number, data: Uint8Array, offset: number, length: number): number | Thenable; + } + + //#endregion + + //#region TextSearchProvider: https://github.com/microsoft/vscode/issues/59921 + + /** + * The parameters of a query for text search. + */ + export interface TextSearchQuery { + /** + * The text pattern to search for. + */ + pattern: string; + + /** + * Whether or not `pattern` should match multiple lines of text. + */ + isMultiline?: boolean; + + /** + * Whether or not `pattern` should be interpreted as a regular expression. + */ + isRegExp?: boolean; + + /** + * Whether or not the search should be case-sensitive. + */ + isCaseSensitive?: boolean; + + /** + * Whether or not to search for whole word matches only. + */ + isWordMatch?: boolean; + } + + /** + * A file glob pattern to match file paths against. + * TODO@roblou - merge this with the GlobPattern docs/definition in vscode.d.ts. + * @see [GlobPattern](#GlobPattern) + */ + export type GlobString = string; + + /** + * Options common to file and text search + */ + export interface SearchOptions { + /** + * The root folder to search within. + */ + folder: Uri; + + /** + * Files that match an `includes` glob pattern should be included in the search. + */ + includes: GlobString[]; + + /** + * Files that match an `excludes` glob pattern should be excluded from the search. + */ + excludes: GlobString[]; + + /** + * Whether external files that exclude files, like .gitignore, should be respected. + * See the vscode setting `"search.useIgnoreFiles"`. + */ + useIgnoreFiles: boolean; + + /** + * Whether symlinks should be followed while searching. + * See the vscode setting `"search.followSymlinks"`. + */ + followSymlinks: boolean; + + /** + * Whether global files that exclude files, like .gitignore, should be respected. + * See the vscode setting `"search.useGlobalIgnoreFiles"`. + */ + useGlobalIgnoreFiles: boolean; + } + + /** + * Options to specify the size of the result text preview. + * These options don't affect the size of the match itself, just the amount of preview text. + */ + export interface TextSearchPreviewOptions { + /** + * The maximum number of lines in the preview. + * Only search providers that support multiline search will ever return more than one line in the match. + */ + matchLines: number; + + /** + * The maximum number of characters included per line. + */ + charsPerLine: number; + } + + /** + * Options that apply to text search. + */ + export interface TextSearchOptions extends SearchOptions { + /** + * The maximum number of results to be returned. + */ + maxResults: number; + + /** + * Options to specify the size of the result text preview. + */ + previewOptions?: TextSearchPreviewOptions; + + /** + * Exclude files larger than `maxFileSize` in bytes. + */ + maxFileSize?: number; + + /** + * Interpret files using this encoding. + * See the vscode setting `"files.encoding"` + */ + encoding?: string; + + /** + * Number of lines of context to include before each match. + */ + beforeContext?: number; + + /** + * Number of lines of context to include after each match. + */ + afterContext?: number; + } + + /** + * Information collected when text search is complete. + */ + export interface TextSearchComplete { + /** + * Whether the search hit the limit on the maximum number of search results. + * `maxResults` on [`TextSearchOptions`](#TextSearchOptions) specifies the max number of results. + * - If exactly that number of matches exist, this should be false. + * - If `maxResults` matches are returned and more exist, this should be true. + * - If search hits an internal limit which is less than `maxResults`, this should be true. + */ + limitHit?: boolean; + } + + /** + * A preview of the text result. + */ + export interface TextSearchMatchPreview { + /** + * The matching lines of text, or a portion of the matching line that contains the match. + */ + text: string; + + /** + * The Range within `text` corresponding to the text of the match. + * The number of matches must match the TextSearchMatch's range property. + */ + matches: Range | Range[]; + } + + /** + * A match from a text search + */ + export interface TextSearchMatch { + /** + * The uri for the matching document. + */ + uri: Uri; + + /** + * The range of the match within the document, or multiple ranges for multiple matches. + */ + ranges: Range | Range[]; + + /** + * A preview of the text match. + */ + preview: TextSearchMatchPreview; + } + + /** + * A line of context surrounding a TextSearchMatch. + */ + export interface TextSearchContext { + /** + * The uri for the matching document. + */ + uri: Uri; + + /** + * One line of text. + * previewOptions.charsPerLine applies to this + */ + text: string; + + /** + * The line number of this line of context. + */ + lineNumber: number; + } + + export type TextSearchResult = TextSearchMatch | TextSearchContext; + + /** + * A TextSearchProvider provides search results for text results inside files in the workspace. + */ + export interface TextSearchProvider { + /** + * Provide results that match the given text pattern. + * @param query The parameters for this query. + * @param options A set of options to consider while searching. + * @param progress A progress callback that must be invoked for all results. + * @param token A cancellation token. + */ + provideTextSearchResults(query: TextSearchQuery, options: TextSearchOptions, progress: Progress, token: CancellationToken): ProviderResult; + } + + //#endregion + + //#region FileSearchProvider: https://github.com/microsoft/vscode/issues/73524 + + /** + * The parameters of a query for file search. + */ + export interface FileSearchQuery { + /** + * The search pattern to match against file paths. + */ + pattern: string; + } + + /** + * Options that apply to file search. + */ + export interface FileSearchOptions extends SearchOptions { + /** + * The maximum number of results to be returned. + */ + maxResults?: number; + + /** + * A CancellationToken that represents the session for this search query. If the provider chooses to, this object can be used as the key for a cache, + * and searches with the same session object can search the same cache. When the token is cancelled, the session is complete and the cache can be cleared. + */ + session?: CancellationToken; + } + + /** + * A FileSearchProvider provides search results for files in the given folder that match a query string. It can be invoked by quickopen or other extensions. + * + * A FileSearchProvider is the more powerful of two ways to implement file search in VS Code. Use a FileSearchProvider if you wish to search within a folder for + * all files that match the user's query. + * + * The FileSearchProvider will be invoked on every keypress in quickopen. When `workspace.findFiles` is called, it will be invoked with an empty query string, + * and in that case, every file in the folder should be returned. + */ + export interface FileSearchProvider { + /** + * Provide the set of files that match a certain file path pattern. + * @param query The parameters for this query. + * @param options A set of options to consider while searching files. + * @param token A cancellation token. + */ + provideFileSearchResults(query: FileSearchQuery, options: FileSearchOptions, token: CancellationToken): ProviderResult; + } + + export namespace workspace { + /** + * Register a search provider. + * + * Only one provider can be registered per scheme. + * + * @param scheme The provider will be invoked for workspace folders that have this file scheme. + * @param provider The provider. + * @return A [disposable](#Disposable) that unregisters this provider when being disposed. + */ + export function registerFileSearchProvider(scheme: string, provider: FileSearchProvider): Disposable; + + /** + * Register a text search provider. + * + * Only one provider can be registered per scheme. + * + * @param scheme The provider will be invoked for workspace folders that have this file scheme. + * @param provider The provider. + * @return A [disposable](#Disposable) that unregisters this provider when being disposed. + */ + export function registerTextSearchProvider(scheme: string, provider: TextSearchProvider): Disposable; + } + + //#endregion + + //#region findTextInFiles: https://github.com/microsoft/vscode/issues/59924 + + /** + * Options that can be set on a findTextInFiles search. + */ + export interface FindTextInFilesOptions { + /** + * A [glob pattern](#GlobPattern) that defines the files to search for. The glob pattern + * will be matched against the file paths of files relative to their workspace. Use a [relative pattern](#RelativePattern) + * to restrict the search results to a [workspace folder](#WorkspaceFolder). + */ + include?: GlobPattern; + + /** + * A [glob pattern](#GlobPattern) that defines files and folders to exclude. The glob pattern + * will be matched against the file paths of resulting matches relative to their workspace. When `undefined`, default excludes will + * apply. + */ + exclude?: GlobPattern; + + /** + * Whether to use the default and user-configured excludes. Defaults to true. + */ + useDefaultExcludes?: boolean; + + /** + * The maximum number of results to search for + */ + maxResults?: number; + + /** + * Whether external files that exclude files, like .gitignore, should be respected. + * See the vscode setting `"search.useIgnoreFiles"`. + */ + useIgnoreFiles?: boolean; + + /** + * Whether global files that exclude files, like .gitignore, should be respected. + * See the vscode setting `"search.useGlobalIgnoreFiles"`. + */ + useGlobalIgnoreFiles?: boolean; + + /** + * Whether symlinks should be followed while searching. + * See the vscode setting `"search.followSymlinks"`. + */ + followSymlinks?: boolean; + + /** + * Interpret files using this encoding. + * See the vscode setting `"files.encoding"` + */ + encoding?: string; + + /** + * Options to specify the size of the result text preview. + */ + previewOptions?: TextSearchPreviewOptions; + + /** + * Number of lines of context to include before each match. + */ + beforeContext?: number; + + /** + * Number of lines of context to include after each match. + */ + afterContext?: number; + } + + export namespace workspace { + /** + * Search text in files across all [workspace folders](#workspace.workspaceFolders) in the workspace. + * @param query The query parameters for the search - the search string, whether it's case-sensitive, or a regex, or matches whole words. + * @param callback A callback, called for each result + * @param token A token that can be used to signal cancellation to the underlying search engine. + * @return A thenable that resolves when the search is complete. + */ + export function findTextInFiles(query: TextSearchQuery, callback: (result: TextSearchResult) => void, token?: CancellationToken): Thenable; + + /** + * Search text in files across all [workspace folders](#workspace.workspaceFolders) in the workspace. + * @param query The query parameters for the search - the search string, whether it's case-sensitive, or a regex, or matches whole words. + * @param options An optional set of query options. Include and exclude patterns, maxResults, etc. + * @param callback A callback, called for each result + * @param token A token that can be used to signal cancellation to the underlying search engine. + * @return A thenable that resolves when the search is complete. + */ + export function findTextInFiles(query: TextSearchQuery, options: FindTextInFilesOptions, callback: (result: TextSearchResult) => void, token?: CancellationToken): Thenable; + } + + //#endregion + + //#region diff command: https://github.com/microsoft/vscode/issues/84899 + + /** + * The contiguous set of modified lines in a diff. + */ + export interface LineChange { + readonly originalStartLineNumber: number; + readonly originalEndLineNumber: number; + readonly modifiedStartLineNumber: number; + readonly modifiedEndLineNumber: number; + } + + export namespace commands { + + /** + * Registers a diff information command that can be invoked via a keyboard shortcut, + * a menu item, an action, or directly. + * + * Diff information commands are different from ordinary [commands](#commands.registerCommand) as + * they only execute when there is an active diff editor when the command is called, and the diff + * information has been computed. Also, the command handler of an editor command has access to + * the diff information. + * + * @param command A unique identifier for the command. + * @param callback A command handler function with access to the [diff information](#LineChange). + * @param thisArg The `this` context used when invoking the handler function. + * @return Disposable which unregisters this command on disposal. + */ + export function registerDiffInformationCommand(command: string, callback: (diff: LineChange[], ...args: any[]) => any, thisArg?: any): Disposable; + } + + //#endregion + + //#region file-decorations: https://github.com/microsoft/vscode/issues/54938 + + export class Decoration { + letter?: string; + title?: string; + color?: ThemeColor; + priority?: number; + bubble?: boolean; + } + + export interface DecorationProvider { + onDidChangeDecorations: Event; + provideDecoration(uri: Uri, token: CancellationToken): ProviderResult; + } + + export namespace window { + export function registerDecorationProvider(provider: DecorationProvider): Disposable; + } + + //#endregion + + //#region deprecated debug API + + export interface DebugConfigurationProvider { + /** + * Deprecated, use DebugAdapterDescriptorFactory.provideDebugAdapter instead. + * @deprecated Use DebugAdapterDescriptorFactory.createDebugAdapterDescriptor instead + */ + debugAdapterExecutable?(folder: WorkspaceFolder | undefined, token?: CancellationToken): ProviderResult; + } + + //#endregion + + //#region LogLevel: https://github.com/microsoft/vscode/issues/85992 + + /** + * The severity level of a log message + */ + export enum LogLevel { + Trace = 1, + Debug = 2, + Info = 3, + Warning = 4, + Error = 5, + Critical = 6, + Off = 7 + } + + export namespace env { + /** + * Current logging level. + */ + export const logLevel: LogLevel; + + /** + * An [event](#Event) that fires when the log level has changed. + */ + export const onDidChangeLogLevel: Event; + } + + //#endregion + + //#region Joao: SCM validation + + /** + * Represents the validation type of the Source Control input. + */ + export enum SourceControlInputBoxValidationType { + + /** + * Something not allowed by the rules of a language or other means. + */ + Error = 0, + + /** + * Something suspicious but allowed. + */ + Warning = 1, + + /** + * Something to inform about but not a problem. + */ + Information = 2 + } + + export interface SourceControlInputBoxValidation { + + /** + * The validation message to display. + */ + readonly message: string; + + /** + * The validation type. + */ + readonly type: SourceControlInputBoxValidationType; + } + + /** + * Represents the input box in the Source Control viewlet. + */ + export interface SourceControlInputBox { + + /** + * A validation function for the input box. It's possible to change + * the validation provider simply by setting this property to a different function. + */ + validateInput?(value: string, cursorPosition: number): ProviderResult; + } + + //#endregion + + //#region Joao: SCM selected provider + + export interface SourceControl { + + /** + * Whether the source control is selected. + */ + readonly selected: boolean; + + /** + * An event signaling when the selection state changes. + */ + readonly onDidChangeSelection: Event; + } + + //#endregion + + //#region Joao: SCM Input Box + + /** + * Represents the input box in the Source Control viewlet. + */ + export interface SourceControlInputBox { + + /** + * Controls whether the input box is visible (default is `true`). + */ + visible: boolean; + } + + //#endregion + + //#region Terminal data write event https://github.com/microsoft/vscode/issues/78502 + + export interface TerminalDataWriteEvent { + /** + * The [terminal](#Terminal) for which the data was written. + */ + readonly terminal: Terminal; + /** + * The data being written. + */ + readonly data: string; + } + + namespace window { + /** + * An event which fires when the terminal's pty slave pseudo-device is written to. In other + * words, this provides access to the raw data stream from the process running within the + * terminal, including VT sequences. + */ + export const onDidWriteTerminalData: Event; + } + + //#endregion + + //#region Terminal dimensions property and change event https://github.com/microsoft/vscode/issues/55718 + + /** + * An [event](#Event) which fires when a [Terminal](#Terminal)'s dimensions change. + */ + export interface TerminalDimensionsChangeEvent { + /** + * The [terminal](#Terminal) for which the dimensions have changed. + */ + readonly terminal: Terminal; + /** + * The new value for the [terminal's dimensions](#Terminal.dimensions). + */ + readonly dimensions: TerminalDimensions; + } + + namespace window { + /** + * An event which fires when the [dimensions](#Terminal.dimensions) of the terminal change. + */ + export const onDidChangeTerminalDimensions: Event; + } + + export interface Terminal { + /** + * The current dimensions of the terminal. This will be `undefined` immediately after the + * terminal is created as the dimensions are not known until shortly after the terminal is + * created. + */ + readonly dimensions: TerminalDimensions | undefined; + } + + //#endregion + + //#region Terminal link handlers https://github.com/microsoft/vscode/issues/91606 + + export namespace window { + export function registerTerminalLinkHandler(handler: TerminalLinkHandler): Disposable; + } + + export interface TerminalLinkHandler { + /** + * @return true when the link was handled (and should not be considered by + * other providers including the default), false when the link was not handled. + */ + handleLink(terminal: Terminal, link: string): ProviderResult; + } + + //#endregion + + //#region Joh -> exclusive document filters + + export interface DocumentFilter { + exclusive?: boolean; + } + + //#endregion + + //#region Alex - OnEnter enhancement + export interface OnEnterRule { + /** + * This rule will only execute if the text above the this line matches this regular expression. + */ + oneLineAboveText?: RegExp; + } + //#endregion + + //#region Tree View: https://github.com/microsoft/vscode/issues/61313 + /** + * Label describing the [Tree item](#TreeItem) + */ + export interface TreeItemLabel { + + /** + * A human-readable string describing the [Tree item](#TreeItem). + */ + label: string; + + /** + * Ranges in the label to highlight. A range is defined as a tuple of two number where the + * first is the inclusive start index and the second the exclusive end index + */ + highlights?: [number, number][]; + + } + + export class TreeItem2 extends TreeItem { + /** + * Label describing this item. When `falsy`, it is derived from [resourceUri](#TreeItem.resourceUri). + */ + label?: string | TreeItemLabel | /* for compilation */ any; + + /** + * @param label Label describing this item + * @param collapsibleState [TreeItemCollapsibleState](#TreeItemCollapsibleState) of the tree item. Default is [TreeItemCollapsibleState.None](#TreeItemCollapsibleState.None) + */ + constructor(label: TreeItemLabel, collapsibleState?: TreeItemCollapsibleState); + } + //#endregion + + //#region CustomExecution: https://github.com/microsoft/vscode/issues/81007 + /** + * A task to execute + */ + export class Task2 extends Task { + detail?: string; + } + + export class CustomExecution2 extends CustomExecution { + /** + * Constructs a CustomExecution task object. The callback will be executed the task is run, at which point the + * extension should return the Pseudoterminal it will "run in". The task should wait to do further execution until + * [Pseudoterminal.open](#Pseudoterminal.open) is called. Task cancellation should be handled using + * [Pseudoterminal.close](#Pseudoterminal.close). When the task is complete fire + * [Pseudoterminal.onDidClose](#Pseudoterminal.onDidClose). + * @param callback The callback that will be called when the task is started by a user. + */ + constructor(callback: (resolvedDefinition?: TaskDefinition) => Thenable); + } + //#endregion + + //#region Task presentation group: https://github.com/microsoft/vscode/issues/47265 + export interface TaskPresentationOptions { + /** + * Controls whether the task is executed in a specific terminal group using split panes. + */ + group?: string; + } + //#endregion + + //#region Status bar item with ID and Name: https://github.com/microsoft/vscode/issues/74972 + + export namespace window { + + /** + * Options to configure the status bar item. + */ + export interface StatusBarItemOptions { + + /** + * A unique identifier of the status bar item. The identifier + * is for example used to allow a user to show or hide the + * status bar item in the UI. + */ + id: string; + + /** + * A human readable name of the status bar item. The name is + * for example used as a label in the UI to show or hide the + * status bar item. + */ + name: string; + + /** + * The alignment of the status bar item. + */ + alignment?: StatusBarAlignment; + + /** + * The priority of the status bar item. Higher value means the item should + * be shown more to the left. + */ + priority?: number; + } + + /** + * Creates a status bar [item](#StatusBarItem). + * + * @param options The options of the item. If not provided, some default values + * will be assumed. For example, the `StatusBarItemOptions.id` will be the id + * of the extension and the `StatusBarItemOptions.name` will be the extension name. + * @return A new status bar item. + */ + export function createStatusBarItem(options?: StatusBarItemOptions): StatusBarItem; + } + + //#endregion + + //#region OnTypeRename: https://github.com/microsoft/vscode/issues/88424 + + /** + * The rename provider interface defines the contract between extensions and + * the live-rename feature. + */ + export interface OnTypeRenameProvider { + /** + * Provide a list of ranges that can be live renamed together. + * + * @param document The document in which the command was invoked. + * @param position The position at which the command was invoked. + * @param token A cancellation token. + * @return A list of ranges that can be live-renamed togehter. The ranges must have + * identical length and contain identical text content. The ranges cannot overlap. + */ + provideOnTypeRenameRanges(document: TextDocument, position: Position, token: CancellationToken): ProviderResult; + } + + namespace languages { + /** + * Register a rename provider that works on type. + * + * Multiple providers can be registered for a language. In that case providers are sorted + * by their [score](#languages.match) and the best-matching provider is used. Failure + * of the selected provider will cause a failure of the whole operation. + * + * @param selector A selector that defines the documents this provider is applicable to. + * @param provider An on type rename provider. + * @param stopPattern Stop on type renaming when input text matches the regular expression. Defaults to `^\s`. + * @return A [disposable](#Disposable) that unregisters this provider when being disposed. + */ + export function registerOnTypeRenameProvider(selector: DocumentSelector, provider: OnTypeRenameProvider, stopPattern?: RegExp): Disposable; + } + + //#endregion + + //#region Custom editors: https://github.com/microsoft/vscode/issues/77131 + + /** + * Defines the editing capability of a custom webview editor. This allows the webview editor to hook into standard + * editor events such as `undo` or `save`. + * + * @param EditType Type of edits used for the documents this delegate handles. + */ + interface CustomEditorEditingDelegate { + /** + * Save the resource. + * + * @param document Document to save. + * @param cancellation Token that signals the save is no longer required (for example, if another save was triggered). + * + * @return Thenable signaling that the save has completed. + */ + save(document: CustomDocument, cancellation: CancellationToken): Thenable; + + /** + * Save the existing resource at a new path. + * + * @param document Document to save. + * @param targetResource Location to save to. + * + * @return Thenable signaling that the save has completed. + */ + saveAs(document: CustomDocument, targetResource: Uri): Thenable; + + /** + * Event triggered by extensions to signal to VS Code that an edit has occurred. + */ + readonly onDidEdit: Event>; + + /** + * Apply a set of edits. + * + * Note that is not invoked when `onDidEdit` is called because `onDidEdit` implies also updating the view to reflect the edit. + * + * @param document Document to apply edits to. + * @param edit Array of edits. Sorted from oldest to most recent. + * + * @return Thenable signaling that the change has completed. + */ + applyEdits(document: CustomDocument, edits: readonly EditType[]): Thenable; + + /** + * Undo a set of edits. + * + * This is triggered when a user undoes an edit. + * + * @param document Document to undo edits from. + * @param edit Array of edits. Sorted from most recent to oldest. + * + * @return Thenable signaling that the change has completed. + */ + undoEdits(document: CustomDocument, edits: readonly EditType[]): Thenable; + + /** + * Revert the file to its last saved state. + * + * @param document Document to revert. + * @param edits Added or applied edits. + * + * @return Thenable signaling that the change has completed. + */ + revert(document: CustomDocument, edits: CustomDocumentRevert): Thenable; + + /** + * Back up the resource in its current state. + * + * Backups are used for hot exit and to prevent data loss. Your `backup` method should persist the resource in + * its current state, i.e. with the edits applied. Most commonly this means saving the resource to disk in + * the `ExtensionContext.storagePath`. When VS Code reloads and your custom editor is opened for a resource, + * your extension should first check to see if any backups exist for the resource. If there is a backup, your + * extension should load the file contents from there instead of from the resource in the workspace. + * + * `backup` is triggered whenever an edit it made. Calls to `backup` are debounced so that if multiple edits are + * made in quick succession, `backup` is only triggered after the last one. `backup` is not invoked when + * `auto save` is enabled (since auto save already persists resource ). + * + * @param document Document to revert. + * @param cancellation Token that signals the current backup since a new backup is coming in. It is up to your + * extension to decided how to respond to cancellation. If for example your extension is backing up a large file + * in an operation that takes time to complete, your extension may decide to finish the ongoing backup rather + * than cancelling it to ensure that VS Code has some valid backup. + */ + backup(document: CustomDocument, cancellation: CancellationToken): Thenable; + } + + /** + * Event triggered by extensions to signal to VS Code that an edit has occurred on a `CustomDocument`. + * + * @param EditType Type of edits used for the document. + */ + interface CustomDocumentEditEvent { + /** + * Document the edit is for. + */ + readonly document: CustomDocument; + + /** + * Object that describes the edit. + * + * Edit objects are passed back to your extension in `CustomEditorEditingDelegate.undoEdits`, + * `CustomEditorEditingDelegate.applyEdits`, and `CustomEditorEditingDelegate.revert`. + */ + readonly edit: EditType; + + /** + * Display name describing the edit. + */ + readonly label?: string; + } + + /** + * Data about a revert for a `CustomDocument`. + */ + interface CustomDocumentRevert { + /** + * List of edits that were undone to get the document back to its on disk state. + */ + readonly undoneEdits: readonly EditType[]; + + /** + * List of edits that were reapplied to get the document back to its on disk state. + */ + readonly appliedEdits: readonly EditType[]; + } + + /** + * Represents a custom document used by a `CustomEditorProvider`. + * + * All custom documents must subclass `CustomDocument`. Custom documents are only used within a given + * `CustomEditorProvider`. The lifecycle of a `CustomDocument` is managed by VS Code. When no more references + * remain to a `CustomDocument`, it is disposed of. + * + * @param EditType Type of edits used in this document. + */ + class CustomDocument { + /** + * @param viewType The associated uri for this document. + * @param uri The associated viewType for this document. + */ + constructor(viewType: string, uri: Uri); + + /** + * The associated viewType for this document. + */ + readonly viewType: string; + + /** + * The associated uri for this document. + */ + readonly uri: Uri; + + /** + * Event fired when there are no more references to the `CustomDocument`. + */ + readonly onDidDispose: Event; + + /** + * List of edits from document open to the document's current state. + */ + readonly appliedEdits: ReadonlyArray; + + /** + * List of edits from document open to the document's last saved point. + * + * The save point will be behind `appliedEdits` if the user saves and then continues editing, + * or in front of the last entry in `appliedEdits` if the user saves and then hits undo. + */ + readonly savedEdits: ReadonlyArray; + } + + /** + * Provider for webview editors that use a custom data model. + * + * Custom webview editors use [`CustomDocument`](#CustomDocument) as their data model. + * This gives extensions full control over actions such as edit, save, and backup. + * + * You should use custom text based editors when dealing with binary files or more complex scenarios. For simple text + * based documents, use [`WebviewTextEditorProvider`](#WebviewTextEditorProvider) instead. + */ + export interface CustomEditorProvider { + + /** + * Resolve the model for a given resource. + * + * `resolveCustomDocument` is called when the first editor for a given resource is opened, and the resolve document + * is passed to `resolveCustomEditor`. The resolved `CustomDocument` is re-used for subsequent editor opens. + * If all editors for a given resource are closed, the `CustomDocument` is disposed of. Opening an editor at + * this point will trigger another call to `resolveCustomDocument`. + * + * @param uri Uri of the document to open. + * @param token A cancellation token that indicates the result is no longer needed. + * + * @return The custom document. + */ + openCustomDocument(uri: Uri, token: CancellationToken): Thenable>; + + /** + * Resolve a webview editor for a given resource. + * + * This is called when a user first opens a resource for a `CustomEditorProvider`, or if they reopen an + * existing editor using this `CustomEditorProvider`. + * + * To resolve a webview editor, the provider must fill in its initial html content and hook up all + * the event listeners it is interested it. The provider can also hold onto the `WebviewPanel` to use later, + * for example in a command. See [`WebviewPanel`](#WebviewPanel) for additional details + * + * @param document Document for the resource being resolved. + * @param webviewPanel Webview to resolve. + * @param token A cancellation token that indicates the result is no longer needed. + * + * @return Thenable indicating that the webview editor has been resolved. + */ + resolveCustomEditor(document: CustomDocument, webviewPanel: WebviewPanel, token: CancellationToken): Thenable; + + /** + * Defines the editing capability of a custom webview document. + * + * When not provided, the document is considered readonly. + */ + readonly editingDelegate?: CustomEditorEditingDelegate; + } + + /** + * Provider for text based webview editors. + * + * Text based webview editors use a [`TextDocument`](#TextDocument) as their data model. This considerably simplifies + * implementing a webview editor as it allows VS Code to handle many common operations such as + * undo and backup. The provider is responsible for synchronizing text changes between the webview and the `TextDocument`. + * + * You should use text based webview editors when dealing with text based file formats, such as `xml` or `json`. + * For binary files or more specialized use cases, see [CustomEditorProvider](#CustomEditorProvider). + */ + export interface CustomTextEditorProvider { + + /** + * Resolve a webview editor for a given text resource. + * + * This is called when a user first opens a resource for a `CustomTextEditorProvider`, or if they reopen an + * existing editor using this `CustomTextEditorProvider`. + * + * To resolve a webview editor, the provider must fill in its initial html content and hook up all + * the event listeners it is interested it. The provider can also hold onto the `WebviewPanel` to use later, + * for example in a command. See [`WebviewPanel`](#WebviewPanel) for additional details. + * + * @param document Document for the resource to resolve. + * @param webviewPanel Webview to resolve. + * @param token A cancellation token that indicates the result is no longer needed. + * + * @return Thenable indicating that the webview editor has been resolved. + */ + resolveCustomTextEditor(document: TextDocument, webviewPanel: WebviewPanel, token: CancellationToken): Thenable; + + /** + * TODO: discuss this at api sync. + * + * Handle when the underlying resource for a custom editor is renamed. + * + * This allows the webview for the editor be preserved throughout the rename. If this method is not implemented, + * VS Code will destory the previous custom editor and create a replacement one. + * + * @param newDocument New text document to use for the custom editor. + * @param existingWebviewPanel Webview panel for the custom editor. + * @param token A cancellation token that indicates the result is no longer needed. + * + * @return Thenable indicating that the webview editor has been moved. + */ + moveCustomTextEditor?(newDocument: TextDocument, existingWebviewPanel: WebviewPanel, token: CancellationToken): Thenable; + } + + namespace window { + /** + * Register a new provider for a custom editor. + * + * @param viewType Type of the webview editor provider. This should match the `viewType` from the + * `package.json` contributions. + * @param provider Provider that resolves editors. + * @param options Options for the provider + * + * @return Disposable that unregisters the provider. + */ + export function registerCustomEditorProvider( + viewType: string, + provider: CustomEditorProvider | CustomTextEditorProvider, + options?: { + readonly webviewOptions?: WebviewPanelOptions; + } + ): Disposable; + } + + //#endregion + + + //#region allow QuickPicks to skip sorting: https://github.com/microsoft/vscode/issues/73904 + + export interface QuickPick extends QuickInput { + /** + * An optional flag to sort the final results by index of first query match in label. Defaults to true. + */ + sortByLabel: boolean; + } + + //#endregion + + //#region Allow theme icons in hovers: https://github.com/microsoft/vscode/issues/84695 + + export interface MarkdownString { + + /** + * Indicates that this markdown string can contain [ThemeIcons](#ThemeIcon), e.g. `$(zap)`. + */ + readonly supportThemeIcons?: boolean; + } + + //#endregion + + //#region Peng: Notebook + + export enum CellKind { + Markdown = 1, + Code = 2 + } + + export enum CellOutputKind { + Text = 1, + Error = 2, + Rich = 3 + } + + export interface CellStreamOutput { + outputKind: CellOutputKind.Text; + text: string; + } + + export interface CellErrorOutput { + outputKind: CellOutputKind.Error; + /** + * Exception Name + */ + ename: string; + /** + * Exception Value + */ + evalue: string; + /** + * Exception call stack + */ + traceback: string[]; + } + + export interface CellDisplayOutput { + outputKind: CellOutputKind.Rich; + /** + * { mime_type: value } + * + * Example: + * ```json + * { + * "outputKind": vscode.CellOutputKind.Rich, + * "data": { + * "text/html": [ + * "

Hello

" + * ], + * "text/plain": [ + * "" + * ] + * } + * } + */ + data: { [key: string]: any }; + } + + export type CellOutput = CellStreamOutput | CellErrorOutput | CellDisplayOutput; + + export interface NotebookCellMetadata { + editable: boolean; + } + + export interface NotebookCell { + readonly uri: Uri; + handle: number; + language: string; + cellKind: CellKind; + outputs: CellOutput[]; + getContent(): string; + metadata?: NotebookCellMetadata; + } + + export interface NotebookDocumentMetadata { + editable: boolean; + } + + export interface NotebookDocument { + readonly uri: Uri; + readonly fileName: string; + readonly isDirty: boolean; + languages: string[]; + cells: NotebookCell[]; + displayOrder?: GlobPattern[]; + metadata?: NotebookDocumentMetadata; + } + + export interface NotebookEditor { + readonly document: NotebookDocument; + viewColumn?: ViewColumn; + /** + * Fired when the output hosting webview posts a message. + */ + readonly onDidReceiveMessage: Event; + /** + * Post a message to the output hosting webview. + * + * Messages are only delivered if the editor is live. + * + * @param message Body of the message. This must be a string or other json serilizable object. + */ + postMessage(message: any): Thenable; + + /** + * Create a notebook cell. The cell is not inserted into current document when created. Extensions should insert the cell into the document by [TextDocument.cells](#TextDocument.cells) + */ + createCell(content: string, language: string, type: CellKind, outputs: CellOutput[], metadata: NotebookCellMetadata): NotebookCell; + } + + export interface NotebookProvider { + resolveNotebook(editor: NotebookEditor): Promise; + executeCell(document: NotebookDocument, cell: NotebookCell | undefined): Promise; + save(document: NotebookDocument): Promise; + } + + export interface NotebookOutputSelector { + type: string; + subTypes?: string[]; + } + + export interface NotebookOutputRenderer { + /** + * + * @returns HTML fragment. We can probably return `CellOutput` instead of string ? + * + */ + render(document: NotebookDocument, cell: NotebookCell, output: CellOutput, mimeType: string): string; + preloads?: Uri[]; + } + + namespace window { + export function registerNotebookProvider( + notebookType: string, + provider: NotebookProvider + ): Disposable; + + export function registerNotebookOutputRenderer(type: string, outputSelector: NotebookOutputSelector, renderer: NotebookOutputRenderer): Disposable; + + export let activeNotebookDocument: NotebookDocument | undefined; + } + + //#endregion + + //#region color theme access + + /** + * Represents a color theme kind. + */ + export enum ColorThemeKind { + Light = 1, + Dark = 2, + HighContrast = 3 + } + + /** + * Represents a color theme. + */ + export interface ColorTheme { + + /** + * The kind of this color theme: light, dark or high contrast. + */ + readonly kind: ColorThemeKind; + } + + export namespace window { + /** + * The currently active color theme as configured in the settings. The active + * theme can be changed via the `workbench.colorTheme` setting. + */ + export let activeColorTheme: ColorTheme; + + /** + * An [event](#Event) which fires when the active theme changes or one of it's colors chnage. + */ + export const onDidChangeActiveColorTheme: Event; + } + + //#endregion + + + //#region https://github.com/microsoft/vscode/issues/39441 + + export interface CompletionItem { + /** + * Will be merged into CompletionItem#label + */ + label2?: CompletionItemLabel; + } + + export interface CompletionItemLabel { + /** + * The function or variable. Rendered leftmost. + */ + name: string; + + /** + * The signature without the return type. Render after `name`. + */ + signature?: string; + + /** + * The fully qualified name, like package name or file path. Rendered after `signature`. + */ + qualifier?: string; + + /** + * The return-type of a function or type of a property/variable. Rendered rightmost. + */ + type?: string; + } + + //#endregion + + + //#region eamodio - timeline: https://github.com/microsoft/vscode/issues/84297 + + export class TimelineItem { + /** + * A timestamp (in milliseconds since 1 January 1970 00:00:00) for when the timeline item occurred. + */ + timestamp: number; + + /** + * A human-readable string describing the timeline item. + */ + label: string; + + /** + * Optional id for the timeline item. It must be unique across all the timeline items provided by this source. + * + * If not provided, an id is generated using the timeline item's timestamp. + */ + id?: string; + + /** + * The icon path or [ThemeIcon](#ThemeIcon) for the timeline item. + */ + iconPath?: Uri | { light: Uri; dark: Uri } | ThemeIcon; + + /** + * A human readable string describing less prominent details of the timeline item. + */ + description?: string; + + /** + * The tooltip text when you hover over the timeline item. + */ + detail?: string; + + /** + * The [command](#Command) that should be executed when the timeline item is selected. + */ + command?: Command; + + /** + * Context value of the timeline item. This can be used to contribute specific actions to the item. + * For example, a timeline item is given a context value as `commit`. When contributing actions to `timeline/item/context` + * using `menus` extension point, you can specify context value for key `timelineItem` in `when` expression like `timelineItem == commit`. + * ``` + * "contributes": { + * "menus": { + * "timeline/item/context": [ + * { + * "command": "extension.copyCommitId", + * "when": "timelineItem == commit" + * } + * ] + * } + * } + * ``` + * This will show the `extension.copyCommitId` action only for items where `contextValue` is `commit`. + */ + contextValue?: string; + + /** + * @param label A human-readable string describing the timeline item + * @param timestamp A timestamp (in milliseconds since 1 January 1970 00:00:00) for when the timeline item occurred + */ + constructor(label: string, timestamp: number); + } + + export interface TimelineChangeEvent { + /** + * The [uri](#Uri) of the resource for which the timeline changed. + * If the [uri](#Uri) is `undefined` that signals that the timeline source for all resources changed. + */ + uri?: Uri; + + /** + * A flag which indicates whether the entire timeline should be reset. + */ + reset?: boolean; + } + + export interface Timeline { + readonly paging?: { + /** + * A provider-defined cursor specifying the starting point of timeline items which are after the ones returned. + * Use `undefined` to signal that there are no more items to be returned. + */ + readonly cursor: string | undefined; + } + + /** + * An array of [timeline items](#TimelineItem). + */ + readonly items: readonly TimelineItem[]; + } + + export interface TimelineOptions { + /** + * A provider-defined cursor specifying the starting point of the timeline items that should be returned. + */ + cursor?: string; + + /** + * An optional maximum number timeline items or the all timeline items newer (inclusive) than the timestamp or id that should be returned. + * If `undefined` all timeline items should be returned. + */ + limit?: number | { timestamp: number; id?: string }; + } + + export interface TimelineProvider { + /** + * An optional event to signal that the timeline for a source has changed. + * To signal that the timeline for all resources (uris) has changed, do not pass any argument or pass `undefined`. + */ + onDidChange?: Event; + + /** + * An identifier of the source of the timeline items. This can be used to filter sources. + */ + readonly id: string; + + /** + * A human-readable string describing the source of the timeline items. This can be used as the display label when filtering sources. + */ + readonly label: string; + + /** + * Provide [timeline items](#TimelineItem) for a [Uri](#Uri). + * + * @param uri The [uri](#Uri) of the file to provide the timeline for. + * @param options A set of options to determine how results should be returned. + * @param token A cancellation token. + * @return The [timeline result](#TimelineResult) or a thenable that resolves to such. The lack of a result + * can be signaled by returning `undefined`, `null`, or an empty array. + */ + provideTimeline(uri: Uri, options: TimelineOptions, token: CancellationToken): ProviderResult; + } + + export namespace workspace { + /** + * Register a timeline provider. + * + * Multiple providers can be registered. In that case, providers are asked in + * parallel and the results are merged. A failing provider (rejected promise or exception) will + * not cause a failure of the whole operation. + * + * @param scheme A scheme or schemes that defines which documents this provider is applicable to. Can be `*` to target all documents. + * @param provider A timeline provider. + * @return A [disposable](#Disposable) that unregisters this provider when being disposed. + */ + export function registerTimelineProvider(scheme: string | string[], provider: TimelineProvider): Disposable; + } + + //#endregion + + + //#region https://github.com/microsoft/vscode/issues/90208 + + export interface ExtensionContext { + /** + * Get the uri of a resource contained in the extension. + * + * @param relativePath A relative path to a resource contained in the extension. + * @return The uri of the resource. + */ + asExtensionUri(relativePath: string): Uri; + + /** + * + */ + readonly extensionUri: Uri; + } + + export interface Extension { + /** + * Get the uri of a resource contained in the extension. + * + * @param relativePath A relative path to a resource contained in the extension. + * @return The uri of the resource. + */ + asExtensionUri(relativePath: string): Uri; + + /** + * + */ + readonly extensionUri: Uri; + } + + //#endregion + + //#region https://github.com/microsoft/vscode/issues/86788 + + export interface CodeActionProviderMetadata { + /** + * Static documentation for a class of code actions. + * + * The documentation is shown in the code actions menu if either: + * + * - Code actions of `kind` are requested by VS Code. In this case, VS Code will show the documentation that + * most closely matches the requested code action kind. For example, if a provider has documentation for + * both `Refactor` and `RefactorExtract`, when the user requests code actions for `RefactorExtract`, + * VS Code will use the documentation for `RefactorExtract` intead of the documentation for `Refactor`. + * + * - Any code actions of `kind` are returned by the provider. + */ + readonly documentation?: ReadonlyArray<{ readonly kind: CodeActionKind, readonly command: Command }>; + } + + //#endregion + + //#region Dialog title: https://github.com/microsoft/vscode/issues/82871 + + /** + * Options to configure the behaviour of a file open dialog. + * + * * Note 1: A dialog can select files, folders, or both. This is not true for Windows + * which enforces to open either files or folder, but *not both*. + * * Note 2: Explicitly setting `canSelectFiles` and `canSelectFolders` to `false` is futile + * and the editor then silently adjusts the options to select files. + */ + export interface OpenDialogOptions { + /** + * Dialog title. + * + * Depending on the underlying operating system this parameter might be ignored, since some + * systems do not present title on open dialogs. + */ + title?: string; + } + + /** + * Options to configure the behaviour of a file save dialog. + */ + export interface SaveDialogOptions { + /** + * Dialog title. + * + * Depending on the underlying operating system this parameter might be ignored, since some + * systems do not present title on save dialogs. + */ + title?: string; + } + + //#endregion + + //#region https://github.com/microsoft/vscode/issues/90208 + + export namespace Uri { + + /** + * + * @param base + * @param pathFragments + * @returns A new uri + */ + export function joinPaths(base: Uri, ...pathFragments: string[]): Uri; + } + + //#endregion + + //#region https://github.com/microsoft/vscode/issues/91541 + + export enum CompletionItemKind { + User = 25, + Issue = 26, + } + + //#endregion + +} diff --git a/custom-editor-sample/tsconfig.json b/custom-editor-sample/tsconfig.json new file mode 100644 index 00000000..4ce52747 --- /dev/null +++ b/custom-editor-sample/tsconfig.json @@ -0,0 +1,11 @@ +{ + "compilerOptions": { + "module": "commonjs", + "target": "es6", + "outDir": "out", + "sourceMap": true, + "strict": true, + "rootDir": "src" + }, + "exclude": ["node_modules", ".vscode-test"] +} diff --git a/custom-editor-sample/tslint.json b/custom-editor-sample/tslint.json new file mode 100644 index 00000000..0ab0ca6e --- /dev/null +++ b/custom-editor-sample/tslint.json @@ -0,0 +1,6 @@ +{ + "rules": { + "indent": [true, "tabs"], + "semicolon": [true, "always"] + } +} \ No newline at end of file diff --git a/webview-sample/media/sand.jpg b/webview-sample/media/sand.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6b86e9ec9e290917a168be115eb0ac1c05362a1d GIT binary patch literal 84773 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