From ae4a88c4d7c141ed98364fc6a45060a7f80f8e02 Mon Sep 17 00:00:00 2001 From: Linda Paiste Date: Fri, 1 Mar 2024 18:49:52 -0600 Subject: [PATCH 1/5] Rewrite p5 preload logic to support instance mode. --- src/BodyPose/index.js | 20 ---- src/BodySegmentation/index.js | 21 ---- src/FaceMesh/index.js | 21 ---- src/HandPose/index.js | 20 ---- src/NeuralNetwork/index.js | 2 +- src/Sentiment/index.js | 4 +- src/index.js | 21 ++-- src/utils/p5Utils.js | 186 +++++++++++++++++++++++++++++----- 8 files changed, 173 insertions(+), 122 deletions(-) diff --git a/src/BodyPose/index.js b/src/BodyPose/index.js index f8130834..92041cb6 100644 --- a/src/BodyPose/index.js +++ b/src/BodyPose/index.js @@ -48,9 +48,6 @@ class BodyPose { * @private */ constructor(modelName = "MoveNet", options, callback) { - // for compatibility with p5's preload() - if (this.p5PreLoadExists()) window._incrementPreload(); - this.modelName = modelName; this.model = null; this.config = options; @@ -128,9 +125,6 @@ class BodyPose { await tf.ready(); this.model = await poseDetection.createDetector(pipeline, modelConfig); - // for compatibility with p5's preload() - if (this.p5PreLoadExists) window._decrementPreload(); - return this; } @@ -250,20 +244,6 @@ class BodyPose { }); return result; } - - /** - * Checks if p5.js' preload() function is present. - * @returns {boolean} true if preload() exists. - * @private - */ - p5PreLoadExists() { - if (typeof window === "undefined") return false; - if (typeof window.p5 === "undefined") return false; - if (typeof window.p5.prototype === "undefined") return false; - if (typeof window.p5.prototype.registerPreloadMethod === "undefined") - return false; - return true; - } } /** diff --git a/src/BodySegmentation/index.js b/src/BodySegmentation/index.js index 43754850..ff144772 100644 --- a/src/BodySegmentation/index.js +++ b/src/BodySegmentation/index.js @@ -23,9 +23,6 @@ class BodySegmentation { * @param {function} [callback] - A callback to be called when the model is ready. */ constructor(modelName, options, callback) { - // for compatibility with p5's preload() - if (this.p5PreLoadExists()) window._incrementPreload(); - this.modelName = modelName; this.video = video; this.model = null; @@ -116,9 +113,6 @@ class BodySegmentation { modelConfig ); - // for compatibility with p5's preload() - if (this.p5PreLoadExists) window._decrementPreload(); - return this; } /** @@ -269,21 +263,6 @@ class BodySegmentation { return imageData; } } - - /** - * Check if p5.js' preload() function is present - * @returns {boolean} true if preload() exists - * - * @private - */ - p5PreLoadExists() { - if (typeof window === "undefined") return false; - if (typeof window.p5 === "undefined") return false; - if (typeof window.p5.prototype === "undefined") return false; - if (typeof window.p5.prototype.registerPreloadMethod === "undefined") - return false; - return true; - } } /** diff --git a/src/FaceMesh/index.js b/src/FaceMesh/index.js index 467fabcf..3b6e517a 100644 --- a/src/FaceMesh/index.js +++ b/src/FaceMesh/index.js @@ -35,9 +35,6 @@ class FaceMesh { * @private */ constructor(options, callback) { - // for compatibility with p5's preload() - if (this.p5PreLoadExists()) window._incrementPreload(); - this.model = null; this.config = options; this.runtimeConfig = {}; @@ -77,9 +74,6 @@ class FaceMesh { modelConfig ); - // for compatibility with p5's preload() - if (this.p5PreLoadExists) window._decrementPreload(); - return this; } @@ -246,21 +240,6 @@ class FaceMesh { } return faces; } - - /** - * Check if p5.js' preload() function is present - * @returns {boolean} true if preload() exists - * - * @private - */ - p5PreLoadExists() { - if (typeof window === "undefined") return false; - if (typeof window.p5 === "undefined") return false; - if (typeof window.p5.prototype === "undefined") return false; - if (typeof window.p5.prototype.registerPreloadMethod === "undefined") - return false; - return true; - } } /** diff --git a/src/HandPose/index.js b/src/HandPose/index.js index 388d98bf..1ce3f04b 100644 --- a/src/HandPose/index.js +++ b/src/HandPose/index.js @@ -36,9 +36,6 @@ class HandPose { * @private */ constructor(options, callback) { - // for compatibility with p5's preload() - if (this.p5PreLoadExists()) window._incrementPreload(); - this.model = null; this.config = options; this.runtimeConfig = {}; @@ -78,9 +75,6 @@ class HandPose { await tf.ready(); this.model = await handPoseDetection.createDetector(pipeline, modelConfig); - // for compatibility with p5's preload() - if (this.p5PreLoadExists) window._decrementPreload(); - return this; } @@ -203,20 +197,6 @@ class HandPose { }); return result; } - - /** - * Check if p5.js' preload() function is present in the current environment. - * @returns {boolean} True if preload() exists. False otherwise. - * @private - */ - p5PreLoadExists() { - if (typeof window === "undefined") return false; - if (typeof window.p5 === "undefined") return false; - if (typeof window.p5.prototype === "undefined") return false; - if (typeof window.p5.prototype.registerPreloadMethod === "undefined") - return false; - return true; - } } /** diff --git a/src/NeuralNetwork/index.js b/src/NeuralNetwork/index.js index 00dfd420..5b004cfb 100644 --- a/src/NeuralNetwork/index.js +++ b/src/NeuralNetwork/index.js @@ -124,7 +124,7 @@ class DiyNeuralNetwork { // will take a URL to model.json, an object, or files array this.ready = this.load(this.options.modelUrl, callback); } else { - this.ready = true; + this.ready = Promise.resolve(this); } } diff --git a/src/Sentiment/index.js b/src/Sentiment/index.js index 0f67c5bf..ee3aa922 100644 --- a/src/Sentiment/index.js +++ b/src/Sentiment/index.js @@ -51,8 +51,8 @@ class Sentiment { */ constructor(modelName, callback) { /** - * Boolean value that specifies if the model has loaded. - * @type {boolean} + * Promise that resolves when the model has loaded. + * @type {Promise} * @public */ this.ready = callCallback(this.loadModel(modelName), callback); diff --git a/src/index.js b/src/index.js index 3fab78d3..cef2fbb9 100644 --- a/src/index.js +++ b/src/index.js @@ -13,24 +13,27 @@ import imageClassifier from "./ImageClassifier"; import preloadRegister from "./utils/p5PreloadHelper"; const withPreload = { - imageClassifier, + bodyPix, + bodyPose, + faceMesh, + handPose, + imageClassifier, + neuralNetwork, + sentiment, }; - -export default Object.assign( +const ml5 = Object.assign( { p5Utils }, preloadRegister(withPreload), { tf, tfvis, - neuralNetwork, - handPose, - sentiment, - faceMesh, - bodyPose, setBackend, - bodyPix, } ); +p5Utils.shouldPreload(ml5, Object.keys(withPreload)); + communityStatement(); + +export default ml5; diff --git a/src/utils/p5Utils.js b/src/utils/p5Utils.js index f1ba10f5..278e58a9 100644 --- a/src/utils/p5Utils.js +++ b/src/utils/p5Utils.js @@ -1,50 +1,180 @@ -// Copyright (c) 2018 ml5 +// Copyright (c) 2018 - 2024 ml5 // // This software is released under the MIT License. // https://opensource.org/licenses/MIT + +function isP5Constructor(source) { + return Boolean( + source && + typeof source === "function" && + source.prototype && + source.prototype.registerMethod + ); +} + +function isP5Extensions(source) { + return Boolean(source && typeof source.loadImage === "function"); +} + class P5Util { constructor() { + /** + * @type {boolean} + */ + this.didSetupPreload = false; + /** + * The `p5` variable, which can be instantiated via `new p5()` and has a `.prototype` property. + * In browser environments this is `window.p5`. + * When loading p5 via npm it must be manually provided using `ml5.setP5()`. + */ + this.p5Constructor = undefined; + /** + * Object with all of the constants (HSL etc.) and methods like loadImage(). + * In global mode, this is the Window object. + */ + this.p5Extensions = undefined; + + /** + * Keep a reference to the arguments of `shouldPreload()` so that preloads + * can be set up after the fact if p5 becomes available. + */ + this.ml5Library = undefined; + this.methodsToPreload = []; + + // Check for p5 on the window. + this.findAndSetP5(); + } + + + /** + * @private + * Check the window or globalThis for p5. + * Can run this repeatedly in case p5 is loaded after ml5 is loaded. + */ + findAndSetP5() { + let source; if (typeof window !== "undefined") { - /** - * Store the window as a private property regardless of whether p5 is present. - * Can also set this property by calling method setP5Instance(). - * @property {Window | p5 | {p5: p5} | undefined} m_p5Instance - * @private - */ - this.m_p5Instance = window; + source = window; + } else if (typeof globalThis !== "undefined") { + source = globalThis; + } + + if (!source) return; + + if (isP5Constructor(source.p5)) { + this.p5Constructor = source.p5; + this.registerPreloads(); + } + if (isP5Extensions(source)) { + this.p5Extensions = source; } } /** - * Set p5 instance globally in order to enable p5 features throughout ml5. - * Call this function with the p5 instance when using p5 in instance mode. - * @param {p5 | {p5: p5}} p5Instance + * @public + * Set p5 in order to enable p5 features throughout ml5. + * This manual setup is only necessary when importing `p5` as a module + * rather than loading it on the window. + * Can be used in ml5 unit tests to check p5 behavior. + * + * @example + * import p5 from "p5"; + * import ml5 "ml5"; + * + * ml5.setP5(p5); + * + * @param {p5} p5 */ - setP5Instance(p5Instance) { - this.m_p5Instance = p5Instance; + setP5(p5) { + if (isP5Constructor(p5)) { + this.p5Constructor = p5; + this.p5Extensions = p5.prototype; + } else { + console.warn("Invalid p5 object provided to ml5.setP5()."); + } + this.registerPreloads(); } /** + * @internal + * Pass in the ml5 methods which require p5 preload behavior. + * Preload functions must return an object with a property `ready` which is a `Promise`. + * Preloading will be set up immediately if p5 is available on the window. + * Store the references in case p5 is added later. + * + * @param {*} ml5Library - the `ml5` variable. + * @param {Array} methodNames - an array of ml5 functions to preload. + */ + shouldPreload(ml5Library, methodNames) { + this.methodsToPreload = methodNames; + this.ml5Library = ml5Library; + if (this.checkP5()) { + this.registerPreloads(); + } + } + + /** + * @private + * Execute the p5 preload setup using the stored references, provided by shouldPreload(). + * Won't do anything if `shouldPreload()` has not been called or if p5 is not found. + */ + registerPreloads() { + if (this.didSetupPreload) return; + const p5 = this.p5Constructor; + const ml5 = this.ml5Library; + const preloadMethods = this.methodsToPreload; + if (!p5 || !ml5) return; + + // Must shallow copy so that it doesn't reference the replaced method. + const original = { ...ml5 }; + // Must alias `this` so that it can be used inside functions with their own `this` context. + const self = this; + + // Function to be called when a sketch is created, either in global or instance mode. + p5.prototype.myLibInit = function () { + // Bind to this specific p5 instance. + const increment = this._incrementPreload.bind(this); + const decrement = this._decrementPreload.bind(this); + // Replace each preloaded on the ml5 object with a wrapped version which + // increments and decrements the p5 preload counter when called. + preloadMethods.forEach((method) => { + ml5[method] = function (...args) { + increment(); + const result = original[method](...args); + result.ready.then(() => { + decrement(); + }); + return result; + }; + }); + self.didSetupPreload = true; + }; + + // Function to be called when a sketch is destroyed. + p5.prototype.myLibRemove = function () { + // Resets each ml5 method back to its original version. + preloadMethods.forEach((method) => { + ml5[method] = original[method]; + }); + self.didSetupPreload = false; + }; + + p5.prototype.registerMethod("init", p5.prototype.myLibInit); + p5.prototype.registerMethod("remove", p5.prototype.myLibRemove); + } + + /** + * @internal * Dynamic getter checks if p5 is loaded and will return undefined if p5 cannot be found, * or will return an object containing all of the global p5 properties. - * It first checks if p5 is in the window, and then if it is in the p5 property of this.m_p5Instance. - * @returns {p5 | undefined} + * @returns {p5.p5InstanceExtensions | undefined} */ get p5Instance() { - if ( - typeof this.m_p5Instance !== "undefined" && - typeof this.m_p5Instance.loadImage === "function" - ) - return this.m_p5Instance; - - if ( - typeof this.m_p5Instance.p5 !== "undefined" && - typeof this.m_p5Instance.p5.Image !== "undefined" && - typeof this.m_p5Instance.p5.Image === "function" - ) - return this.m_p5Instance.p5; - return undefined; + if (!this.p5Extensions) { + this.findAndSetP5(); + } + return this.p5Extensions; } /** From 3efa2cb9ad38f319487d046a22a879290e245984 Mon Sep 17 00:00:00 2001 From: Linda Paiste Date: Fri, 1 Mar 2024 18:53:28 -0600 Subject: [PATCH 2/5] Delete legacy preload logic. --- src/index.js | 3 +-- src/utils/p5PreloadHelper.js | 45 ------------------------------------ 2 files changed, 1 insertion(+), 47 deletions(-) delete mode 100644 src/utils/p5PreloadHelper.js diff --git a/src/index.js b/src/index.js index cef2fbb9..42d17843 100644 --- a/src/index.js +++ b/src/index.js @@ -10,7 +10,6 @@ import setBackend from "./utils/setBackend"; import bodyPix from "./BodySegmentation"; import communityStatement from "./utils/communityStatement"; import imageClassifier from "./ImageClassifier"; -import preloadRegister from "./utils/p5PreloadHelper"; const withPreload = { bodyPix, @@ -24,7 +23,7 @@ const withPreload = { const ml5 = Object.assign( { p5Utils }, - preloadRegister(withPreload), + withPreload, { tf, tfvis, diff --git a/src/utils/p5PreloadHelper.js b/src/utils/p5PreloadHelper.js deleted file mode 100644 index cba16d33..00000000 --- a/src/utils/p5PreloadHelper.js +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright (c) 2019 ml5 -// -// This software is released under the MIT License. -// https://opensource.org/licenses/MIT - - -/** - * a list to store all functions to hook p5 preload - * @param {obj} object or prototype to wrap with - * @returns obj - */ -export default function registerPreload(obj) { - if (typeof window === 'undefined') return obj; - if (typeof window.p5 === 'undefined') return obj; - if (typeof window.p5.prototype === 'undefined') return obj; - if (typeof window.p5.prototype.registerPreloadMethod === 'undefined') return obj; - - const preloadFn = obj; - Object.keys(obj).forEach((key) => { - const fn = obj[key]; - - preloadFn[key] = function preloads(...args) { - let originCallback = null; - let argLen = args.length; - if (typeof args[argLen - 1] === 'function') { - // find callback function attached - originCallback = args[argLen - 1]; - argLen -= 1; - } - return fn.apply(obj, [...args.slice(0, argLen), function doingPreloads() { - const targetPreloadFn = '_decrementPreload'; - try { - if (originCallback) originCallback(); - } catch (err) { - console.error(err); - } - if (window[targetPreloadFn]) return window[targetPreloadFn](); - return null; - }]); - }; - window.p5.prototype.registerPreloadMethod(`${key}`, obj); - }); - - return obj; -} From 74bc791c5dc72ebdba2d6b5973a6e293cea10a9d Mon Sep 17 00:00:00 2001 From: Linda Paiste Date: Fri, 1 Mar 2024 19:14:32 -0600 Subject: [PATCH 3/5] Shortcut method `ml5.setP5(p5)` --- src/index.js | 29 +++++++++++++---------------- src/utils/p5Utils.js | 8 +++----- 2 files changed, 16 insertions(+), 21 deletions(-) diff --git a/src/index.js b/src/index.js index 42d17843..227c5ab5 100644 --- a/src/index.js +++ b/src/index.js @@ -12,24 +12,21 @@ import communityStatement from "./utils/communityStatement"; import imageClassifier from "./ImageClassifier"; const withPreload = { - bodyPix, - bodyPose, - faceMesh, - handPose, - imageClassifier, - neuralNetwork, - sentiment, + bodyPix, + bodyPose, + faceMesh, + handPose, + imageClassifier, + neuralNetwork, + sentiment, }; -const ml5 = Object.assign( - { p5Utils }, - withPreload, - { - tf, - tfvis, - setBackend, - } -); +const ml5 = Object.assign({ p5Utils }, withPreload, { + tf, + tfvis, + setBackend, + setP5: p5Utils.setP5.bind(p5Utils), +}); p5Utils.shouldPreload(ml5, Object.keys(withPreload)); diff --git a/src/utils/p5Utils.js b/src/utils/p5Utils.js index 278e58a9..bc396bec 100644 --- a/src/utils/p5Utils.js +++ b/src/utils/p5Utils.js @@ -3,13 +3,12 @@ // This software is released under the MIT License. // https://opensource.org/licenses/MIT - function isP5Constructor(source) { return Boolean( source && - typeof source === "function" && - source.prototype && - source.prototype.registerMethod + typeof source === "function" && + source.prototype && + source.prototype.registerMethod ); } @@ -46,7 +45,6 @@ class P5Util { this.findAndSetP5(); } - /** * @private * Check the window or globalThis for p5. From 0eafc3648b6bf0ff659b6277061a6dfcab5b599e Mon Sep 17 00:00:00 2001 From: Linda Paiste Date: Sat, 9 Mar 2024 15:59:18 -0600 Subject: [PATCH 4/5] interactive bodyPose example --- .../Bodypose-single-image/data/runner.jpg | Bin 0 -> 87943 bytes examples/Bodypose-single-image/index.html | 42 +++++++ examples/Bodypose-single-image/sketch.js | 115 ++++++++++++++++++ 3 files changed, 157 insertions(+) create mode 100644 examples/Bodypose-single-image/data/runner.jpg create mode 100644 examples/Bodypose-single-image/index.html create mode 100644 examples/Bodypose-single-image/sketch.js diff --git a/examples/Bodypose-single-image/data/runner.jpg b/examples/Bodypose-single-image/data/runner.jpg new file mode 100644 index 0000000000000000000000000000000000000000..25df5133ec865d307f0398e9447b7d1750923fd3 GIT binary patch literal 87943 zcmb4qWl$W?7ww{pTS8bI!s70P-~@@&HT>jQ@TxF)*<(F|n}mfY_*u5El;z zkC>2zgqV<+i1ZogIVl+h84)o#4LJoRB{elQ$#YtIS}J-F6*bj=lb~T@VPRuo699n( zRHVeDRR7=C6AVC#gKmg6gn{-FfKG~rL5lV?0H6f`06;V}G}NE}d!eDD)`<g;VU>RbhtON;SK~Qh@IU2&|!U2d!KCU3-qVnkLjT4s_NFuB@SXk6!W6(w& zl-!cMwn752!8|Z zB%%#-qZo)4#H&H3i21d+;|vnw&b^Iw)2~86hmVnfqYw(BSSZ+`%Jf`qHy!Pw9x^S)Brfobt z_mJRIKUg|A1N7oX?DZ4iw$}pPq0tW}y^mTeCSwroDR-FPHZIPy4au4v>6B_fuquf{XF=TkCiONnE=2Y8pMeaM3&Bo zdMYdt*vmy_wlMn4=X|+^L2NWQs@J{G!l8Hw##jG6b;Iq(NgL+p-gPVp1n1kI3X!7&982hri=TCuxC=jIWL zaV}r<9`vi>I8t=N8d0W2kVM5CLR`p?AP_J&WGI1-OaXzK=L|CW%mwt&xQQF+Zf0qL z6^dGW;;G%@OLtRC&G+1qdAzvG3Ao@5l$~iCxuM`l3+Uo&uMTjA0shh?njx8Noemc=sEfoiJGH>y0>AZvZSu z|CBfK2~ba*hoiKIf#LE3GaMxGVh9Kk5`pb5f~05BN!qX)c_BeKN-hL1YAh`^v@L*< z>p+MC9RSvAsm_Uk3woW$CZ{b5V_n9jhyFKD=*Nwd$P`E<%A6KBz3Z4SwV>Ge`i;EN z=_T#SpclOsQwjJR>LAqHKq6>1OB3j)(2lKr5pOrz%` zt^dB8JXPObQa@YwPk^hyL8@^ckw3swg&~YDj*v_*jE9eW>aa~<)o0#2pEgxf7hLHa z%!x_OZ>*PJDp;sG|sv~a#8r?Nyi?U5_^ z)E9f%roe|7hG!Vnvq@Cl@HHc;JiJY)O6du}W{b1G=T5b@xY2E|38yD)CRK-fd+PLS z8R^W&+{QaaUz07Gw}ES-LOop1DysTBqAGb7lD^j+inZhZaJO{G`jecpI0WH?MqGvt zgNMLiUU%NOfP{T%SsJPe?GR-X1-elMN7KaV~a6>^hY2+WAZ8YKHdOedU@7 zf9+8v-3k9V4+Lde(oiUZVsOHVtier;sxc3LBa-pfGNgmP9@qnNWQ5#WHu5o|yYr$# zmkW*}5!R_iJrIcQa1ulzCPDkd>Lr;BlnCXEL1cO0#f_uz-W5wZF5)&|I|xK3vvK-v zQ9_6jf{M(1DYzoAKA(sk%PWi>Yhx`{*u!b=Sx4_WI!W)w4@)bSWZ)!z5Rp40@hmVL z)#@HYpNWlAxQ>CY69eMICjq8~_Z3UW79wKqHsngix*E7A1fR*PFgoV2od@I z?9f;tnSAC#)psYznbJv0b-0sO%vRiG*YoVVlwMYiK$(9TsB6=Yjxei>CGBJo&>DtF zeJx(>K_u)tCCo75I1I=rKh{LGa41Y2KAug^byVprsSNx5{XS-@X8Hk4t=^Sm{A$t; z?{Ba|!HoA6hQXXb?5C)N7me1kZcF`ymkV0DS5oRkwu(YE-v@`)FTe5Y@a_cA+axFr zApTygWsZEUO)YwJR`FY7kT65ewc4ZV$uAfQ`3|p9M3;+;>lC2*l-1)5C zH*0+S8tmSZ!S#1`le=Cis7q2nTA>HlYq4ng(Z;Ux(&ii{bpwMzF;h0;+7O(%mX>m_ z9~*hYd&E$-!j;M&tXG`s6UD& zHMAIY7mMcv(JH$I917{_fpMm)@*oO7scUMqos?v;J$iEH(R*EeyxP>97Oau;F8}YH zlg=I-Bv%JgNWbSm}wCetm!y=l3?XiET0@z zu}Yr_0zR(#!3%MrnRW_pCbKk;7!EIBxw>23m-QAI)V|?vneR47=0}J{p`qPVWzc3U z=rm@LIll##wxn8g?Xs`>R`oG`RXfj#LYy6(l!WyC73Fqq%kbEQG1TGaT>7IBG&B|Z znUkmR+Yj^kx=N~fI3?gS4kZkuOJz-EomTZoXRm48h)q#yvc$#yE}3WS?h9-6n3q38 zL44~+FI_m_B33L7Fj2?XPb%gVTHaEH9_MchxD+!t71jV1T;fe#~ zR#&bE(xs`l?1Dh$LM&vj)P zt17bOOkBFOn^mht9Ujz)+v`M4ZRnBoflDQuCjvY@tbYh2wO4} zU8G*jb2qadLQ4JBqsJ9{RNDK(yn5y59 z_n4{ZBr9KIV5r`skTvL;yy^xP%@Y7hd=5KzXMB;ek#e`;D7v$8%Ew3^i?j)ow>Us9 z@(&WbfL~sHOkT#AJLcmPc{pWhmJEeAd&j)h%wu>rAu-J@zeu<8VM#44IIH2Wdwt{~ zC~&#LYJ$B5S4T0r2zWl+^RI7QTDpy=`E7mj>oHExAM>P=Sl+~%+Voe7TZ3yui}#Qu z>S@ZBLc+UTf&KA6^I5;%2>ql zvlbj*j0+}$D@h`KxG-UMu|^tPiPWDtSM_r-?6YX+i=G|6?7L{31Z_c_;o0XFqhC$K z_`g;^0ph-HWZ&0!t;M;Q-w>UWD2-LbYBv`YN9Qt+GK?p<>#^vn(y}auTkFWu+ks72 zY)nsUOT6g}x$xe2sp)cryEWw>A+vUa)pBR-nnqL%%Y8Y1>it}`l;)m%O|LjBuRi_w z8VhWmrOQ=;6KRwz(~Z386kBvZw{YJp_+&Vk!)82NDvpdf;n>qYuR!0s(|FacA7nZv zU}TqBP%aeyQYLjlz%*4dYH&?Mq+3`&dwxeqSW;GlT@bhASOu$gx`w*Ay?MW_Xk*2H za6WNP{Dj-irjU8c+K+*LIn;#!f1BT#nJ{DnxyWtlFWp9j zV1lsA8(mAcp?N$3iX!&%2yh#CP%p(T!8@2aFO)bbeb=}^SB-N8T z*IJLQ1CPv5l#zP}nSq$*k)P8GSm{(C{19r)p41~)n-fsV4vx@e^;lGtEAV4kK5CPU zI%D13NeeP=7_S+BrhO%)FG1A!Nu%i}PE^j05uh2LJ~YVx(^hitTJhh&{R0z>oE>`y zK@Nw>Obwt1)~IkNb+S#O`rJh|{5frOJL&Mn^7!aqE`(#5(wd{~zEpNtmt_d={4APsvPC$6+es_#0^}UT!%7be80ZnGJ$Q%tjh|O_L0iL8$z}vBS z*CBQqE|2#DTn+gbx=bCk@YPEqrs#aKqMH17=ozj`yohJ@=~{2PCy-^Y5Ph+)PVv)M znrE}urfOq%I42HeONDg4JjxjjLtDfZ0lw(87$7PwN~|Js6t?AD z5tej3DT`epG_8Dy9aPUyE1=eGX|1A_UA#TnpSHFzXxmC4=q@I32}ov&*h}G@>y!!* zRyVt({9;G*6Qn{gjjyCj3E&zPqx-5K6aK7s;245%3Y^+{Cv&OiMr5e`d2Uy8`KV01 zwBCeaeSBb$Y5AiH(sVoO5~$r8qET!;qvw5*6BTQrt4$3)jR@5`>hO`C11w$l^gz*f zTorzu?q&!GwNj?1E`MxrWws>(-VSqziUMg1pVw)|n&`T-2xDA|NlAQp*1r$mTp*4P zQ-107xS#mFb@ty$hlIie;^2G_f)re|g`;D4$Zt<0+3sO8AUqRHIPD zaGyHe+BW+3ie*bf8@}>2h$QI=kV(9rz^Z)RyHB@BlC&Md#~Zm1{LCkm?Ai#vnsNa;ruymIrH#6luCiLHVN znHH@|QL_i3EA`y;I=dN?6 zWjT0Mv5$tBlX?MLu)+oM=joEa(sJV1)i?$9`3QwRA@%QUESx`hu(C|Db5s`P1oJX| z<)+(HIp@9>r7!1Fz=P|u|9o?D)m;XZ(WMPQ<P% zezU@otTRGFlobxUGlFw=+@xJOafH8R&!0QW1Vs*3&~oRaxhWIb`wX1D9$H(Wc*bBE zzz9L1^n|%;c>u~fazG3W3|!%HB=;1yK7nxr$HTy7-COXiuX4nJ4-n>DHk8k_Oy@b? zb?Z6$YQiq2!skK3lBj9NZF}&wJpz)kjxgt=OU}rcI((UY2|5oQcoQ!^%wEw^R9bdh z{Y|8c=lTh-&?fed!RK8Eks4e~^b+xr=7b(fUZMEwG9)-VVXDSqfz8-S-?NL2tv5cH zNtg2dIy^K(gxVs6zZ5Y84<)rhl4f2XL^>ioM*GCqkU)zvL?_{x!;P9ETcX`UJ?t2oz_?|71&N9$KNpIp?Q-0=&_!*F*-UAP7$)qw&olee%A0NY6F;^07>D|t zd+0DB#m~UXx%%`_YeFX2P`qd~t+Z<}?p$WhV@%PJB{n6X!u#7_3+AjaAawDrWY(B} zADTVRp*!?p!39)tOltVp^mFW}~Z?}0x$qq)B6fB>3VT~@P16J9iHDoeJadbVOj zHm@#^TsB(Fy)!&XsvnsnY?hzWy*)RhC$(iU|K3cC_Sg-MqT@Avm`%C_ctI%6Ba=-T4@4PbL1#?PyPV_>55OL>~S+RuBP> zDt!U=vmgTStoaVIXC1hfd>018dW<=N_(_jS2dT)S35Cw{y>5B}m>>}pZhz^aSW}Np zkBzFNH@bHVH?ZT1tA>;C&Ynm9$3|(S;hhyr#){^l#X7Jqv??@+$?abL8uWtxx@Q*M zF>oPl?0&<^^ilq%kE`dprwu#f3DEl32+o5`4xKO1}H{`y%arb7bE%c{frJ1;djO<5}h#I8R8w6{gdj5MxF7) zxkce!{FIxc)MAA6K(&+c%gTTk({jwT@f zw!F9gV!s;ko@M@9Zpv1#>(nxB&xT>YL|=5#U4I>0dGWZhs;!VPXSu4;V&GoND-{qe zqk4SZiS;~<^n>(Hr(Nh-3>&%7p@1#Blr;wTTv;N}C1Oua%&nPisC{%Wz<_l`bZ{z0 zix^qc>CzHpus=?l_9~%pTJqM?DxdTTAd5s$F(IRoi1pE3MpR?teC!jT6cy)L49jDX zRlkB0PwuT=ZHAj!iRk*s6Ot9K1LLy=<3S^|oq5CzXvhlC+l4K24MX_zY&*A%P^__L zyo~a(i;Qe%#(=Cqn{2Lf^uf{66*8HQJy73yMAGMdPEn-Pj!;J%_7i{?jrA9L5QX-` zsp5Ze0klK;Wx(v7t)XV@(E2MmiBaaQjh$|X)xk#cvd8wbZ}jnm`37(;Jzd>j`jvC| zjP}M@^)fx!%ePRZ;$03+;Ar<$SGMymW1rxRZ=vM;Oi%L-oSSe1?GiS}Ex6h{M}kXY zPiB)k^$=v8`p1s%ZFsboC2#1!i^rRx+zW{`B*)Z+sv}W+;CP+GK;bXD#Hc5L+*s%s zZN-*isHCk=(AB}NIEylqysP=Q@*V#sE|7m4-z|>?748ld(WZ-E*RtC`j|ua6KWO(E zwyzX^$L9PIjriw$^~AwJue*9y-BV}|UH-`K*j6@Y6m#{TWIfMboq8SRth(5lzV))R zf`hjuwK*I?ZSP7ZIFU|1pOuXDX0bSMnX`{!Y|Kg56gNz?J>rKQso&mDc>ewwNVGnw z1NVKOfjw4BqCHGMVX3ivl%QblIDQa6GjJA1*dR1$Oh2_H8Qp)-i00NE*Cwd2$Yjg0 zBL4YgG~&F5KxY^*%Z5fwalc&^gpbhHJ)`?BRF&Cg*1-PtO_FNmHqp82{q@Wa;7wpw z`*~_E^>+5(FT(W|C8L&sJtn$3Z%XF0IY~;~e66MBlfQOjO?&5~&Af8cgkjFi6ghRy zxvp2a{z*HZYrNLS806h-+uACxaCz}1VYO=}%tkX{{e!K;zN1x9Sw(57EUmDR3IQAO zOni}ENI%gN;4n|LNc!uBgXXJwn8mrd=zmN27Gt;f?uCgd7c%;OKT9AjH#+2bjG!xiy5ZX;?6KJF*L z7>FdJF0?WP!GrQz)M$fiSxC<%4;ksrvpZDeTG2cJF^2A&(LDiXIy@uI;q()bRf~h( zRcJrP+%<@qK@>m>v02pJza&(rw2kme@<~vbtqimlKsfMm)shedw6tsG9rDE?{TiCu#$pW#~q6 zpG*CTXa8IRW*?aTa1$xbb#`jKDDNtWlZ3?!G9oXCm+9iEx9c}ypDfKgQ#^2{+>j0I2V<5WYj+ae!Y4OZqm=P4|~Uf{i40v3i;^?Py-oD) z{Kcx!Q<3dYTiA{o9E|?IKhzT54A|)(`KDz=xhz%Gh~t;sl~ra6^a_?$T zdx@iCMezeD@XOS$6ylF$)rX{)OA%P(Hp$uaFmuhODb^VAJU>dE5+y`T7F`;~=<}5^ zAzFO}u)eI-WR-TRY@DVNu~m`T?n?F*0$^d(c4o z=MYM4YTDFx!so3&wBHxs5C)|l8U?f-`GFRPv;)`rl$w3#*@0b z{Q7{rU#qF-{Md1K?-=U3jxe$Kr zCn_qUKmD724byAo}jlZ5o&UbY7cHul)jQcRyH6UT}lH zuBQwcgVL*R4zZYoj`Vae+-2;%`*mvXKFRxT{?o@W;iJQ%*#oQIi9^7%)K-7ajbTpr zWzz7$RnNbue9clF-5rG#8HqtO|Di(qKakMn|J6}Z;1EI*BL4_1r>1TTnDxD!=& zf<^N0J^>PG4O)X`&6R5OB}s4fo&WkB+dx)P#&g@rHV~_QPVcIzjHNTXm9=Xb`efZoHxE9c_ zI|dX#tALi(qZd=Oe3CxMHg$Fk7{R%044JHwe3p57i_N}%^kzU`T1~M_s}OKVj$el_-IB1-!#iU_{uHA*Aa+^ z!clHg9yuB{PH(5#IgP8{r!JBCIE+03Ho=ZI*Qj2X_cb-yk%=_(FIG;u6W({L+D!?p zq&V5#svMAVQ0ghG9|Oy}JC}x>S4>F>!JFFV6E^P~bZzH`zSR%le^7a7G)~r1P*DTV z6c!O5y4Vy=Sa3o1Z7Yq(F;w50+{J_kPvvgY6YHwYNqWf7{`N>LPE_}`f898%sX&VL z>7yU@8=GZadeC@t@qJfa>BQ8|9e42R9H*L}VNLU!TLkg5Z?isw?p84zW0URq{TgSL zTd`)=->{OYZ9A16fpQaAK#s|5ukJxn6uTZ*}jF z1Va@reKK{zcr}{*azk~h$^3VpL%u5BP*Bs`eCldQS6wnuDK|Pem{+QZ9@6^+!WzB@ z^xq7a)t>y!vU;?M$#w2^Qly*zDyyM??54TMb8p za`C|UJBa+VH>6t?iT74!#Cz}r&DNvs=PM?9U;EBCWRjW-(a{dinS5;N_%*h^md<~E zdko~hEhrgcs44yiJJSSU`$V55@9p zfdg+uu4ox|=o26}Hth*e66P1-Q~&$d<6AWrZ3|}jkqQ$%D!Ex^T|^}x>uyZcQ&V&y zevI`MDren2W|&}A@l0azm}^B~d*I>z13bYm$~U2|<$ z5^fkvZ`MEH$s=T-%qN9>+t%C4ee?s)kQAb*u#Cm*vZ>Ju_s6_5$&MNCF3NKsjrzWK zJZJlocpDOIFco9+adp{I%-U;5^f5g&>d}=|S79z7-|U1(TS@;p|J!wybWWk7P{r5~ z`+pu@Gv;njfM-`kK3`_DcFV^$6IZt_?lk_%4VsQH8a)9nAJ4|N4ti%T2n7yQ13l+- znc%8bwD-;MSC$bgzcUn<^L(V@_T%ZJS7~Xv4rwLE2O9)ZM342Q{$bzm|EBmCL3OX1 z9N;jw>X5djx^_n8ox}0E8Cj-FNDD~(@s_wSd;w{OA{J_gFGk;eEehgw)K^x>zc59mOX%Rih?JCA_;RC<9-zXaBc;v+~<^&HgxASXdUKp>O= zUIzxTqLc@?xc|uqP|_h5R5#~_1tHk4yOFmIA044m0tM!wv@g66a4kx^fKt4$G#8R` zm?UqW7-~dM(5dTvka#D6`~>*?qW$Ean^Zzp5W3{f~9Wd-5=6T^?O)gmgn_**>oO2L&*1G$Y?2A{q= zejcg?EAwAmS!`SLANV8tN-ybW-m;6MMOc@KSC#PWWh>($Yus3GP8yYA`oRD0kFDcz6t+{R_q)C25Pog*tQMI#Ba-#I zZL(&9Nw6Yj81bDArJ;7#9XtK4 zK7_USRL9pJ(O5;CYyNFnwOVjfN9QplXw8l?<(4Gp;;dHrV`HnY-3dm3W-g^QM3r}h zjm?e)Q9>S(e7ggVESKSP)@j8A5&oZ^pp|Irz8y1yAsO$TUvnZphD@Q)v#Eru)uXu7 zuawmP8M$1zD0iq4PU#dISw%6F%Dt2!w~3RhhQNB-glR0|XEx!q_6|q-v@snnK#`UU z)@;y@XvVM80xXk*%`Xe%GlRAXuhT}3X-e)*yk7C6X_lAf$Od+0qp>2>ePtip#hSts z@f{OoFfwg|47pVm0cc8#ZjYx2hC-1qo7e8qlF(PCZM6=LcpP>JH0v#cgWAnoeGNWp zM9>u$|M9%c8kZ7N)B82)=$Ru_8<^t12$x7Wi+0ArR_=I_JaSuloU?Y-}RDZ zHguL#&?IkF=j>442LAjV){{7upcGLXXlFLqMMZPNnF@7Q(W^3v>~R%ZxvTa5+O~oQ zCC$;_37Eiad6n_b+)znJ=!dH@eT}<9taCUHCTRx)X=3;Gy2rcBE{$KXX-rB6x7naN z+cFmI5?uwwLk|{@9^TC7Ub%L+G{WSomcR9k^(CLT3VUhC0Y{ZfO?Y*m3HM5Ut?61? zPI#?82Y84%%d7tmP8LY9Ds!rcYhXgxd4KF^`#BtaJTgyfR-S~3Yy>O{M zAT7?P&_^d$bHouVFHB#3Sk7d%#9K7!cb1)D*H59>hMq-q{7Gd|R5UmH_S!)9_M~k# zrD=*iq3&L;W?w`s!dUP3>)tFywV;-8xtP?FgPG9N%#Lf;=X$oDNp+Ji8zwKr&PPqC zTn2HfIo~$nNRzS}9AksA6`a?$jn)>UX7kl4OfCm3goROL`?sDk;dx-HNG3puAsq_` z*=p4bV$-g3xn7wO0GaH^#tq*pdO^vNXNo)2&JeV_9NAr|XBWVot`Pe|C55+1@3An; za9Q(*QE17+yFzy)!%paT6yrPvvea+sjYPwNw2e&?uetGq&KGXR@5*!BoXpo!seqov zJlAu@M5d$}f4ZP`xd~6 ziu4woRH&q-9v|!0(&E_tb225gXToMwocC3ZB0jifLK84o+EUNO6|&s^1ke!5+C~NM z!};pePaN^Kx+wPNm3aP$om^$lV;L%9X$_Jey&H{47K9wMnTaR6dc%AvrLvLFLVXAEHJ?YqXMiri$#_yn0#l|kYynyZW5Vmy;9CmqKelNdV=AO22})@0V} z0ix)JCqSeCyFPPHHo>{-E<01=CxPlP^NgGUo=xR#(2pTWzi}s_8ZI4ZDVjg<0OKDn za+~J++Fnzg@5FCE_3}}lLM;OLLo)oz{PpH#4NpjRjF!q1;O~#rdSQsZZ*2`jmOgJ^ zCDq6c4%SJcy_Q{P;lRU^#+Ts(@L2gLwYfP4c)EMq_j^I%+OLo5*VrrlW#{9E)ir;= zbrBrrmOIvL+t%hN&;8!ep>O;81dyCIGJ~`i5Pv-%g(e{aGP=2W-Y2~OJfbbwks6pS zvzi}a!`0LA)QjS+G znzQDbIqxqxnY8rP&=g;Amc=&F@o@F88j&`E?lcoZO@i3}CdVeO97<)6U5Gb<5}m!X zoTin~>=SCjB=A4;H+*lo$r8lmZXkxype1uqMY?E*|lJ+SQ+GpdOjz4^O)B$Y_c8%|vfX~OnsgF%s`-d{(uUK2N~ zFk(CbTDIRJX^pa?W@ffUCPt(chHC%Tk!h+%(t_4>fpk$A2_^5Lfo!MjouKiu!yJrW>nU~j26aADUMRW z2z%}#{nlJ9(yQ_$wYaCntWpq;Tpv9jQVETsS>X3S2m#wqYt7~g+IGJ7V{tq0Rs&RR z-H|6Z6M6i7TeA5CP``Wvs2X~=tN#)Dt)Xe5DfH|orD$$f6#f{Kd8sq0ueEy2(&F@n z1$B-=ivy0O+3L^7pTDtdD*C^S1Qkwr1{Ne85R9=;6yKVy^JG_57o~a8d}?A{)fmV5 z4Z(Cl;nKru?}CVmjmj!Z^6~=RLs4k4)XhW3P>J-QoAUgEeK2hy$Z>&{Pg6l#n}&ns zHtb_;(lvZ^I^rvJ)HEwr`&Pd6t8#pD;e_)>oG^F(zO$T$HlEV{jsryr8~5&t-}ok? zdeq(*0;~%ff(rcvx6o%UMYY*WAfWG zHM|pywCxhvyfhv5OYU~lETy>uzE_F)6$N@#HSQ49abXThx^__K8D7~M7<7wfD-?|*xgCRRFrO*}_jI*?FUm#EhpPYfed{_*?q_;{+l`gqGq zS~{7vc<|ceda!pvpXQy>s(7RgO>Z86l{8Eu6IzICV*4iTCl2Jl-$3O__&=UenKRQw+heMO9O4R{G=IPT8p478_}Qo?CVS`mTm{Ni>n2= zcD{c0It@+5?2vExF7*rBg!8OO^tYt)Di$Z(a3|Xsl^+mE7LiW0mWWEzP^_75H)D8; zZF4uaJ|?-|R<*of}sp*PfCK1)_z%10iHcr44L=+74(+xT(#=!A6=c53lBk5I0;yEu!g|Dj1i ze5!G!=iT$@Bxq3QKC|-JiRxX($0%=hB4GE;N>{prka%|!AAqS`1(U=c_I?kn99E>T zzxwO@xG#s5eX%3)13k7qmEyLdQ*FG;tx*~)j) z_idf9;X8Mw-_b)2E4nnR4%liOtE>LdBFqGiEV;O3Z-5_>_H-$uUaCQdJQWSaPk=JM zRh7=f7_JFx`e!9NS*ie#8&;54$gYer#a_0K5Kan&q)9^#I z=sZPm#HF-#XA-y7iO_dNqKlA{ilc}6D@bgbo%iz@0d))Ir1GC150s@pi!tVE@hx>_ zA$176ckB2pJA(SQu)3|md=K&2kocT}veA9LG##+i3t`s#{HC-CD8out<*Fm9EG3ZJ zezJWzNE^cBDq}kn^rCM$a&;w7RQbT;p&ZHlU>H-(T0SCx$JP~5>#YC2Vst{u1?;k< zzaz!tPeF}sEd$!5H7>A!cBOBtsjH_olH~y5C>z`6pN)ILjAdW9`}Xtjoa==c4(A{%qSZ8V>T8&MUW~Ysj7Z zElE1XE3Mi@nmA4CvM<(XZK$LobT-IdJXG`~!!bHmcaEuX*~OPG{BP~vmP}H$elGLA z6{AvZr;3x7=Vy$GW1!zY^|JO0P(t}Z!_2QX;@Yvmz%^Z3++UPE2Kp*2DiX%(l32#*vzwT^bxL8pXI@n1}UyBQH4SI)S55`U4@9$9@HCjIkSD>&*B(zh9BrI?{Px*L4`q3Rtw}geA;8Xf! ziTf+;k4;Q-$H4vg+BVyuzHZV&9lnJsF5I37$jds^P41vW=zGiPj;M1nxbWa4e65Sn zWptIPF|5b~iy-`adXymB2*f*van+YTy%EyEi8|pkh{@~~hC1E@#l#v6{Rvbx@L}y| zX&A%q4D_ws^%@FZ%WXLuS6amY-bcEL3?;C8v7J*n{vo0ks?=&46#ZAxDGd+)LGUr+ zLBU7EcBThU(AX1wKg&)~KC`sxQ;Q?N6{E$)a|12KZT-Own?7Shl{x2=T^XI9ggJ_z za}}kKdyAeP{U2r6eEW_6q%4TN+x$mb??Nk0RO@f4d3I2DPUR(*>XiM~siad^(7gt^ zgP`+ZQN1fDt5W6a2&y+Ef>{)Pr)MSg)`UM}vB(%a{d3kjV)Y{?(e>t<4tp^-d#*QC zHp|*c0u|#sejdx^$$nn2ffk+eS*eO@$ozT!t2j~T6xY+`-S3YE zj~+n58e=e@R;9A8^ZiyGLsfO!8$7eEc`Zk({3va>IpOFp9)I22x;TCxQr%{Zgooc) zK9V^;DC$rH;p#}qTh)>>F-dPD+mEdeX_fn}1SeV{b!%f$$WvbV9@5cQGJ<>I7Ni+n zm$V7piAbwSsX!*MrsPe)GhB7K;2;A*jEDA37Ev@p9tvOKT z{BDVxPeon-nF7~GC#uiKJk(k@nDk<;qxLF7;Ub{JBS-PI2&2su29X78Gtt>D z=rd+nMbv7{_guC|h|MQ6xrNr!!1}7$V8u%zKDo$Rhp!Ah=MbyMu)!>!^!QRg07jnY z@PTZSaO_=%D-;~G5)H(>JMwT78+10Gvz30k!98g^?;?-J*qX$b-D3nF9&cG1OLB#B zRv(tcrnt%vL;GEH^zGA6oqRZp6p?`Yv`?nW&p0Wslu7tHMSsR~>^BEobW#}?)n4hb z`+8vJIju)o9ra#AImM~P4j$I|EB2A;MPI58tMlRm8IrkR1`f4=`lvsD9;$J@)~q53`snQ|t_;xJf#@uh%@aco5UQoYde% za>-_15o^O$o9oEXF9SRwEtY1uD{KG8@xq1bVDPnY9+RbH06;Qk85fFm)@no5ONg(0 zmt1K(sQo{g`#S1WS(72#gC*+x6gDPPPrKObO;H#WCGte@xkhfp-Jk-|J?enk3hFEt z>H2>;6ki!`xAVzkW8lrw9uC|eu+dK@Hjt{ia4kla+H-YLQHh8e@+Oo#UmWOe%Hq8 zf+p;GK&Obc{LektbOg4JdS~UB%uZ5@#1H=o|t@#AV!w;S$^}e_K`QyKMXN}y$>Nw{^P4#%n6I>y^j0c zA_d|pL4ads^B{92;jQ&Pn{~5!^8GloLF=^5B@?~vcV#!EdDCv-u#C=dU=l~(Ack;jEg^t7|v6F1H&v>S0-4v9v^_0?kA9xwnz4A-b{iR*> zb#~Mgql-HZvQDi1#lDv~R9U>?clLeV1Kt|sU^M24lP4J*{rbV9{79VbI6o1w}7|CdD$H8~SkI2^DP$_b6M*D3@?_d9oSpahsc8DY`CgV9j10t6#6W z$D`k!)mHNf($Q-EeG#$5!{P5nSY?n_v+r?{A*>}|bI=(!{SxHn}Ft2x=e6@f`M?_7B zVg~AR41X(#**6;#s5b_G9dkPGFiA=xXHd}wTlr8o;Z@_neaO~w=~XKF>m0u88cBNH zWNhBNn?5t`vd&Q5m0;|VWYDbM=q%Sp$?;blWzS5@W?mFH^z{->mKs_TmL65F;(g&R z{v$*wY^E}Xq`i_<02@b1xlaFXC8#UTDM4h#IZ>M^l}r6|qHGq+r%A2P;YB-cS{=XZRL z2z0?d?-|~ICQATSV$yP9Ka>#ZK?@0^JjPO=TQ>oXz2t9?)P~NlJ)$aiP`b-0StY^Cinp_uj|%Udoa&Fb?!(@?ate}tMd+5M zcqDMp;OKUcFxEx9p4v;E^Y()-H9bh|pXh}YQ9CZ-9zvPQt?WXCAD)dM`KGDLQUnTW z%H-Gt)hP(t!LnK5l?Tg!$C{ zgvpEHz*$1Y<%XL<(JiHZx&lN+8jA%SUY{Yf(~51Qq3`6da;}~9Q)8*bxyH!V9p^7k zZLXPe?>n#ljyg5LqFcA+5&s(Q8r3rMe_XtAsoK8ge-ygm*7n8^l!rah0uw^%WIjYn zl;VPB)h|-y5Q1{NVAi$Gbbqe|7g|@v{bJQvHILF!9%;38nxCdl>8nKeT_qponuYmi z8nCU|Tb-@T5pmjZE_^PD!O z+5GJ}-JiLoIg}pYn1yFl@w)Al5Nf_jbWT(Y*;%-@t`4gDKLD>lP`}1a8yb~25Ik0@ z>x)sNiId>CPf7HbRQyS-dVZ42Wv@hSGu5%}(^H@RWXIAE`9<5=ap~`d-{Hp~=;EMZCiZvg~sGtG* z3`{J(F~7I6rAs@N$=z`(_c+)mT1JtJIV{JLP4HL4Wz-9kYkS}l2PVLCjf&K#3BbM^ z)I9Bm<*9}jjV6^*q&7u7x8;OW%8`G33y*9!sC(dCTc7WSgyrxrhVDK80KNvHZg3$v zd<)?h1JC!t2VHtK4Sd)g@UVpC@GdRwi1XCNOA|{|Dn%Od%+?rS=DB(_Ve4tbNVh;` z7b6I{qXeN&z7F`V8P-_S{JQ28rf=vIDYg=s{#5NMu47HA6K5UK={Q=O)hSkY7#N|b z>l}iW)o0DA5Vh_2qs9g!+SBIXi3;21A`Y>cQ@D6tLgx-&)JKuX$B46h+c3)>I@z=O zy8OW@-Q!A2mRSbszT|U@OpD?l#07NSfAlQ~v;~<4)c!p7TDb z8620gZ{%-*bM0(-o?nbv^?fd54@tAgDIi|sSCoa-uf2ifpSC7vKNYjykfEcimS(A_ z&LL)K>HzG(;YGxHcfa3^WsV_Cw_F$r%Jea;hvu4)y{A~jg-HHe+V|s}J$u}O4UM_; zj}upXOwFs*SI<{awbjT2e5A!ALL2FSW3~OUp`_|Au+1nbp~`xeNaB)SnGHpZ;W>FMw#xQ88}|Fsh&Dod1sx3aiWsUco?mvlsTkWO@e zrg*uwR`NWQ%nY?gcTfVGucq7H!sSLQz8%TenH70@sVg$vs-ZhbC34!VeJ-K5x9y1@ zBnNv&KB?((*e_{GQw%Y@lE|otF2tS&1QUvgR#jF|#O%VyW6nHt)b)Kqlu;J`F*Nm) zO!LeeSK-+D0*l#}+mLv}Z~h?quck7H^BRC^sphmlF`$)6HC&4ydu(wQaXn6g#Jk+W z^^a8bEjLbO^UqUL9W%vGB}(^L0V2jO%lm(>CuKRrS;k32n?)3nLs?Fh3XQueu(-Xy zJb1INJ}Bp367u}AlBR{|YN1K0sVZ55iIklr53%CM7C#F5)2y-_@8$ZQnyAxIK(V}0 z%lJ)T+wZ;EcH>g@M6%MMuvX$2-Ba^>P(dRWZ$qXtZ zdb`OaCtywdD89oKvDYOvS$d4eGLoV>Y*^1{l(4qUKbHIB6!CE&HJ_deL8W@W8p?U< zYU$#2X=!wcKtD~z@cJ^yit)CkBH)9MFlF6ja>~rcpC`?#;>;R2=ar-jB9j^QsNZ{w zT;c4WuQNIt`r6@{$s|=!myQG%RMp7S<9t{+wJ`z1f1)9JR%)oJW5Wp zfp8gs0U0|3Bw}a5YSO5%x`ZR%_~!j*{vWzq;%CHMgRS%Fb7stPK}fK}6;xu9K?Kbz zq>(giSQcZb1{WM#8&@i#>bCMN{`m8cR{sEsoX6qk$GLhNImz;fdS*PziU~7mY9)?X z>1rd5yXrQHYXj)#_P^zc3I!?LGhoadgmj|ejj8RUSm_8W&K90Sy592 zamN(Y(>gFhT$X2Rs5S#jl1Sj?zr;6A=N}Be!>7USg3e_0-v_QKVC~T93m+Cxj+YUgt&bcP4TfEx>Ai~j(C*`=%Lp0vp-4w&Gn zpv_`Se>CvCa&7s*m;Ev6Uw|D|4_N#o=urGYapL~~i2ZTXx#z^LvYwYlV6@dS z(mh0epc)vGHqw9bqb}QRe>lRus{49j)c2IP8D5afJ}2aPrm~MT5!v)Sv5+LvY;E_% z%I><#sPcu(d)JCoymwQ3`w{LvvEy~>Mv6LGRIQQ-(D#{%)Uh!e4Zg>5i3!)0P~>w) z<*RAT>ls4(={z_e$_WUX(3!JF&ho{AS1hqOq(LlV{*qr!%Mrdf)Y-~cB^-23B2~*CiiMsn0x3oH z0qz3WT;aOf+2;QMny!|XYRZ^`OCG&nhN9O|z&7)W&GmN(B|LInd!;|b4GdY1XFg>0 z8GvDE8b7bGOQ?sA+QF!I?{)LO~dbNc9_kHOG&9QtPU))`Ch@=>%@%7` zl7ldhxTFROyOtN)__(a5jWT0ZRhZ8tQn_N1uy&bzbHf8~-vPV0(*?&VVBu{uAB(+3 zpFCM*H&DX0fsKVQ+zVWXA8T{t8{E68bE>X|rdqu6N9qcgnPiqR_$uepFZKf1;r$KM zIj&=tXSs$!m8`R+WD8p~vS?^hM$==p_qE6#F=rNcntV5cF0;&6F0JWlbNDi^O;OgU z;FfV6w*ZeO`(jiZb5fzwWJfcTzTaisHl2-53rY3e-;x9YfDA*AQ!+e0YiE^wO6z=% z8kn($U6n^u zJd7^kk$i5hmpr9CK|WrTQ&X8CrKLBTMlEX+b{c%*gERQsJN0i>O_yfz!4)+uab@(* zw~ge!Pu9eW>k z+WTVv0DgW0kKIyQSE720<5qQ+biCQMRCKvirIgY|B9=481(>hB$+*Wpll)J0G#N!b z43u<_RM4`uR^iY2t-x=#Fx^xtYb$9NGR>;$swR|49EAW?hzpfixxU^pfX?R4I)gi_ zlPSn^7@?e!jZseHa4g4*Z|#f4ch@IDDh>oLl}r94IB9 zc?8)$U?XMvMKdS@`(JJGGfa{qapF{9uBp`@8gtI0qKb;LynLcaW@Rm=#P7)GorW>f zb$(?mifHO5s;Xx{itb9P0k8+gGSfj*1!Q!&g*rn!0OC2+pwn-@5gw*=iJX&Wxke#C zAD6x;6omJ)=AtEPGVZL*VO=xSX?w8NgpJSNo8VP-Ep}9}PaSOa6v}mnXC<{?{V|*} zG=>=JMV&!?0`>z7s;i93?;C0s9)w$l7xFvn@s;EO8 z2|Sj-fZl4-t_UU6)NJWBL#V2Hi8Xp`1;_1*%DVW2e2g>q;E9SRrPKw6=Gd*Rj-t7h zVW^HakXTr1HeNqWOa2hmG_m)kiKLBnq>&+3FKbwl;~4I$(YaKZJ1H$5Qw3Et^tANV zvj~{f!>dlA{U_M|Tj7ct^Agf1j#%s9p3%z))JpGeITkkkF<+)CI$`s1{x@+hf2^P8 z#EJ~wT$*My5+pLRH{sY5Yu?1-ZK~2RfI(IiwYj|peM1IWRZ(2iyrI#Ckuo3V1;3bI zpBQugGR&mP#$58WHL^(0M)OLb?AFp-+>k~ssQR}u%_-#W)<`7@B*3bHpj=r&_uC9s z=aN)qG}P5p(Z9>cB~}osnGMMShuiz&?Q9JMjn%LsK}n~dGtDx3Idf<#C6_Rm_Ug&9 zKw<{x?gyMZH9T32RPj_K)rHZEDP@i~Rro{3!Rjyr{QVRAm( z;vQc;LuP3J~JoS6)?^$5MV*pktz-or)q z7Z|F|vuJ9~eG1h&Ei~d-olgh-&x`%Br*5YZLaLO_31(sHlrc|E+E1~?1$A6AMLbbu zl(N$h6l-t`A98)~ifUAA+yOWWE+Ha|Gio-1PvcS4YK|y`_|1GELV@4Ca(s@!q^%6a?Yf|(%IjVw;itk)A88w$Gx-4Tp zK_ruGBB>#&3zUj1pW>YTp zE0s(9C8{+?BZ_$Ch_L{hg#-?5wkY#fo4ZF*R19+V3XOKU4te{5jla%Hlx++dpo9e> zKNNz7_XqO-0Luu>`d+4flo^g!M=o(&OB~fx$qahcL`quhcmwn2?~L0jKJ{I+Y3|}a zxcyRd!&+Q+3(h@F4^dEcoo`deNtk7j)i-{Ix_U=QE&$@v-SYj4LsM zn>c8)n&=W=m6?sHyV6;Ehx!VFO^(}aco^)z5xP=Nv-nKVQq(?Yn!sPGGWv-mF4YL| zw3SrAo03FFQiHkBxbdv&9?ZU^VQ}8yDLs&$?k47!yUFPfkerjdTB7@w*}C7S+NoOB9m33`onM=NDL zF-v__6E>HrZ!L3g-^M&g(%%xgqoX2@lPApNmnlh>X3DC`mXbynwbJ6;pQMa$sy;bU zb+nSd#aOe6DWL#S<#{PYq96_=4#Cd<0CGOq&8ys>wCYG?0Y#K#T zWG$p=Pp|9+iP-Uat*J?mVbvxlmd6WK!fnkeuWN)Dm?t}o{{W@z?4SHwbWU((G}Qe{ z5(QrKzE5?JQLw&=Snh9Y4}5bUjvagOd*d8XOItTnWnDv;!XSq?k0oBwg5`u$B(fl6 z-HM$`!%?-twmj=gL7DXaO?;}pqbtv4NZPs;l&j58GAywIfS*Q&jm6Z9lei+-&gPk6 zs-}vt>#3=XgszdA_h!Ft@b~`!XOT;q)KTYVp(|s}vdO#Iq^yhHZ851L z$P^7W(yA;@l5z8bwz8r~OHWx^*i*6^qod*p9elY^yXKSRmxIoeB-EJC94E& zqE#qENT7gREN^RUHpXwDemL}R_Qin%q-ax4a>3IJ8I zfCgTxrg~eahK$dt&r?>d!%_6?WIzbF)mbWm@4RUIbBSsyFc!b9Kg6HK4~Z3`iX6=4 zP*uNfJij50l1T|WD0`V)o-L~1VTx)ToqiwYG;Xy~O_{|6qQ0IN4;W<7^Hb^@J4YOd z#@8C+b-Belb$paG^3r59^u0GrGU%K5U@}%to>l7PC4fFc>0k2UzLA&aej)T!6mX)C zoQeqP!Mfe$U;!=3Z9?bI+Z0s;LzIayy8LwU!K3EoX~Q9KOMV+U0EZuIVYzyW44X2D zBrj1KM;+jpYZpO%?QMZ1j8Ex)l$NeM-!Dc|dUr6AjTT4L%}!K2Li`pA#VzANz7IR; zii(W#^pUu>mv$-j3vLEEu=a<+Kb*fsM3K60Eb9T8*Hc2N3dq%Ao#bL&kd4@r>@kw9 z&)S~8qNoVsta)TnP9!7+1cCP7n_}L-q^iP2RRuh$ERN{W#Fq>$^S7!1WH zjtQ!JF@Z021=dSnQ1=_#?QB{N5Q0GqD@WBK^ZHlMt12UadgXuvszYx|*n92zV^Y0W zkz`b>C1zb&9(=B|2dI-&T6ZHzJAgR*;kr(fHJw41e-O)r>hq#II*?Rq_w%vE7hHTj zt{q*PjGl_JdIgk67O8ue9!Mv^@rkrjes&5X4|ye;ns}wmDok|~%P^iOk$#{qNGv$@ z5w;`J^&M_&Um&K8$nrSsM!@Mt(|xb88xxHuNBlRftAVDf?@>UVxSUC`xhDI5nA21A zGiC8S51quoRT8So#@+!_ZLBuNHCps(13C0Rpi^rL_EEDhiR;jR4&kNCDl;a|bBP$& z$SRPI&>oZkak(b^;lGFZeH32|<@lr4mCHX*<(ZSk4oey|rdp`T&?G0)rP+q|;2dOn zr=h9y&xsIZlrN(xD|si5TlR*FleoR^1+j_EY3j0Z9zjnnfAFWTBBF@S!YO8rtR;~K z#OWf~+1k^h<^!EXPe=!shuv+Ne{jkI+Zq9wfs@po%x{wmd0U%S^~6uq+0A;vm}U~m zFKk$aTi7D`(g3y-(^;(473CIFPL)yx)DG=#7xl)*kD}wM6m^uPBc_G`RwWunp~+GD z;>$GX>SUqGDkv#Cb?mY{vjR!I$kcpa?Tu@m9A4gA`FJfuwYZW`iqFTJ*P8fg>nCQb zT8%6<3oL3*o1fPbW6m!;(JC^|&D+$hIVWR>m!RtzNtnj0*8EQB2G+gE_c*f1x>BI# zP?_{BVbrU)Eo06xNnzYi%>k~Rm5)T$t#49v{0@jK7H3e;>tz-so1e=ae=y4{si~RQ zGS(5Uq2V9QeeunDL#F4-y00&(T{1IOKY7c2D`Q|W*7JG8oXdZUwvz_Q!kco}8Ph z;-re1m0p^2C@mmSjE-aQ^17yymTIPkN!CX){wUPSexKVKy02|I?#}9MYn<6!?kY)g z_nMWWNi0B`c9(K_x8;b@)YC&xQBfp_S=(q3ZlHO_{tt&ata3)P(!(TkdX40}TYN&Q z_)%R)b3soDMYnLhNG9i-3`EpnFs8~zW)>zYCzVXFPa4ycbqDG#q7 zF(fBY?gDjRZNDrGNZeCtfKSOovZ^);%ct`JSx-q%6Nn_$BkFB|_W+MYd$k;TUQn_~i@ zbbtmHL%U2ajTTaAGWuzLc9BGM>a6OwDtw#y+~NNK;oY*jrGn*cb9;}=^T#`bK5Cd= zDO@aD02RKW`FTHVKV8(dQB>2c06H)Z>udUa{#eE@ugDLQiFILsx4~hVoJ~9dh*M&> zAm8tYW1)s8?o@WJ8o{&!VT=rQh3nvuOB6{U)OEeb@9%tC$6hpqia{VRr~@Y$q17vR ze3V}5;w5QnY8E9l@QQm%8|VRb0dMd2!Bx|{sgdQQjZj@nMs*8g8=GfMCTU3(JEBG$ zxv;;EFXM5EIhRs=)hejc@@!kx;{0M|^}9CusFPHHwUokG${5-X)7a`hl27IBi6$kl zm$L{~Z8w_h&imUKX3pnmLdbxWKU%KeY)#7gnndojQZ<~cY~%TT!2R(6>Zvu=8@|g! z{0aj!%+Cu`_ZLDiw;n$%FmlQ$-l2PR{k33@wz(JF5o|#J0Epw2<7j1{N?}#;BRU{&mQnzJF>XFc2Slrm0T~eiDV0bCH)q%n3 z_FEdNT(VC@@`{ufxzI@1?Y<_*kmcGel@S%%;6^|L+wYE7N!Ai2He|}|?!l~zI5)(| zI?ANQ3=1$>iWXv5abd{A9`MopD#cp6u8_GVQq|MOrkqO(teU%b+T7xvd8j^UMjdr` zSGMu5q;I(=9LBe(>K39(sAMJQMMfphorpi{gyk8O($z*pnn?vpzQJ^_j9OV$!dz5~ z>O2W6xGzsZEOJXmk<}^GB$Gyv2RgqiVW+O@E}5^bJu68|oKVn2l$CjHD}z}amJ|Hc zF|aD?R-hxR00@K&;}X47Elj#9=6EP*GU|%D$3_C_98CAOyAY@clH(krldt2ZDSCvffG&C?PPdyS?xs8-uvL%=Y7xbvrV|;GaI!B~3r^_ooB6U_xQ(dX$h|$z6 zQUWxPVhUA{yL0(s_u=Qn73metGcJ$K>Uz1J14{K0^wUKo3t~x0gz=k^q?@TbE<5Y{ zo)dd)U0$n69}Al1`DQmBhs-Q%ZXd-dUOJV%2bc3;pXtnLGlM}=+j81ta8Ld%c;%Ul5%=Bl%6gQeKT1zflSsc} z%Bmalu>7&X+)<@Wp30zb@*w?0eOBg+>Qo)}X+B{6zhzz9v#T!7rs_t-A8>qQxBLb8 zh0|XSx}!Dfj;E-c^+d>tmsiwNJydW8zkWt zp~-}`S(bg5)8@u0)+$PBsT@G1Z0zy`-Imr;4XhgC{v~B@`X@N6bPLmH?;HrI;Rb)?GW(xwcPLUzJirLt6wU zMeRl-)DeH3Ju7`6>(aLpI$P6mj#b=wqJbrnNg{+16mI0KcQ-mg*j$o!@^O=YX8s>k zHPB>8gH4qQmLxCdqO2X*=*Rkf|?mY){K7 zUnb5ve>ja^Lr+?=swuH86sYzeatQtK)@MkR8J%?`PVz@jJ4USP6_^hs4T1cy?BE=h ziUWS@S2aTV3t2)Ucn5Mp+x(bd2VkU57qWU1x1@Tik2lSFN}j(hr>o4RmoTNQI%Gg$-S&mdy`$mH0I?SH;9S+;!ZMNnxbWRS)bl0N(o zz9VFPOC(7=$u*eA+B${(V}opKsfv`&vA>e0n_k1HE~Oq{mQzS746?IC-ODpxMXhPsfBcmW~X3hjLB;fe=Y^_b2TQgd%~@x9#)DB3$PJha9X9cA9{A4nFGS^iL7TL4)pi8|T#8+pc}w>GD!%PK@pt!EasxV|{d6~d+%!XD&hfF;iapSBk)@ev@6 z`*KXhSy6}p1I{w2-9C_ml~{2nyjM_q$l5nZWnSfo(i{WF7-(k@M-UA(B=)z{AlvlE zHOr%+$@5Q}r=%r_0ol#jq$87xn4_kqmR2;#8(yI1qT>~=iTS5sIdf(9Px%8Y@JIfr9w^i)NE~x z#F@24TFQ`sy|6;L8<0J*R{6+C6^Sks*_;wTA&hfYtl+{`A5ugW(8YBTRVEs62pbLo z_Q1v>Y|T~;QAW&FMv^|~0~G44?CMp`cVLn=B9Y~siC!Zt?PK2suvAHM-3_jf6{{XfhY~W^A+*BaR zT+WZ-twh2RChD>c_1NeD?hk{17;bKeu4;ye0?-ecJ;od80_Xr7n~ZhIfQpJM5px-0 zM?3HSxNb&@80{->Z7Zi^tCBGN;nJnsa$Gj6p|i9|Qc8K&DE|PP!rT1@=L-J-h4Yx| zGzFSD1bVG1+T)uK(;d&|%~D9rJ75i#+}Mxy#Cqz;L{rVH9(p=V=VIa$U@plBL3qQH935gucg{nLW<1JzM+3{`R$KEr9?|pPLl?* z$=YqNvtHk}BefMhRYa4?5gGjIu*L3KTs9BP?mXaE}IGTgt@xLcbKx13T}$zIaKDAtotD;Sw> z#eg;g_c-q3r}EnPr0yyiBaDSA04cSJ9_GggZl0uHk&XohD8+`?wv)m0#m*z|02vKQ z#4ac(>V9n@l1R*qwv{ix8o1yajxgOt5{W7PQg)eA2QI!A_qq4j>@nP1r?US5nUR_* zd70l{wj6*+7Qr?_MOIAWhMh@|(WOQ9AGqHS-ibRaW}BKvHNk&|&mB7~Fqw-+(zw_V z062LvDN+b3D;YH#AuiTtzpx*jzWDBNWSMkESyGBKbkP2tOxzQ{=x|Aw<+T#tN*JaR zIB4}psA>!VVfVPU8N5FT3b>~$fVB%fGt<+d{{Y?uhQj`pQa{%ZW%Y4V*1b(!56Q(kasBqecK6W@_OrNw{x0gZNjA($(2(Wuxx9x^+ zaRsVnwA&e6Bd+sGKj5{p(obZnmYSY0{*u8QXbtquo4V!U~ROD+O zNAZ)QD|)6HC^~niV4klzs&qxCr%I6}G!G^Av71WYdtUnu@yxy{W%OCcO7vD?(Xc^P zlyv7xP*Y}=aJm5Ru8#EJ6Ce$@!*Txr*m~Jc zhio3^WQ@mv-{d6vEB=Y8mp{wtdXGJNdW^x9siJjI1WFpmVo%~Z7d&lX037E&B^ut9 zjibpV6ghT!@_ghe5K<)y0~9={b+BuHPmM<$jiW}{lo9v$!sL#w{}2QT6nu)q=Nhl>NnuqeXWMG43jBehq*b+ z>0_wQYtk7Zk~nz(hSx$PSTh0&c-2yU3_NdwOd zpCl%Fs&sitFCs=7Pga0f5AA$vx?d|Z7P=$>z&)%KC&uBxz3mq@E{R_SoE&a&2q1$ll=&;A5InQqNMVl(h3q zz!G#uNB|AZ_{O)XI);|Br)tuQtV+_9LYF$5*Qn|rrlbC5!`atSQ)T@%7EhAM(@Q-% z#Ptf=Vnqw<0glYaakksy{xemTsX`B8G&O2i3CT&7g zpCw?bKmP#G#QgePh4Rd{Jd{&>#5P{!CSL5(mDKH090d{y4wVV8TZ3?_?M)1owHX|F zeI+T9II3Q*Nh526sx?(p>_ApF{{S{CQdteGw;z0HOI!dXZnhwTU@JNb&*Am-b%HT5 zrKpZ!8#RNJVAdzVHnuI(s}5h6iVU)yN_SdAG|Hw|b|H_`>b2EuHFy`kGeKScqha>O zm#4DSqo#*EU}rSdYQHYFyn^~j9(8UA`wUj&0#Mg%Y_ z&A!a1bt4+vf-6xkJGVIe=(gNS)%+f5v>g=y_?iQ|r#K^1VZe;U$2=`|S(SXfQwc*{ zq3+1hoz~ae$K{JSC}fTyB{GEWrkLYP`cspCy|E|$I%IP?M;vgK?M$zwY(Tn=`MBES z8h(=MifrON4q@(#Hk6M^TlqKS?Ts7j)dEX!xr%kzOcuh$NtIT}iQZWiS&*|Z+tg3{ zTL&IfUk|MymqkfBKwIx)j;lUlNeiRTBI+zks{nZR{V?zGcw~|yvc&Squs}c?4{yj5 zjA43DC3kMYxLmO*Ga9ItDT^^y{9jFil^bHFzLsaMn_W9dwgCy-a&7wKuEAdevF#X5 z$tO*>xWX!{C`3Y{rJ=kBQk7md^M=dZ?3*hxHe8$dHBAD9l8!+Lz0J3g*zs=|u%*eQ znPLkTnb=(4(g^YY0G2v3)WK6D%9F<`NC6iX1mW76`btMuoX4raU6T7@o6{c-R9jpD zvgPvSZ&5IbqthY*=(mt~Cl2Phbn!$!N)lxQ!eH=ma1e8+kbE5SmI-)?^9`YXL4v_rd6(m5*n)XIt;@d{5s_+EW!+1_I-h)Y*bY zlbBi(;HV^hy|HUgG}RPURPr>|k|it-!)``8)5AjJ@w-5;0OAC(WweQ{jA)`=?7V%j zjo3fhn_j_~T;nbkDiVD!O9q>9z1?{+jp|b%gTFShQHIb zzbq_OWtA#{q=-7&#IG0P*stDo6WvwK8QEdyYR0Taj7YSqLDWa9j~JV06BlD*)o`fC42-NK6V&Pj zEMr*1Fw@I_<%9~V#%bCp&vdEu5w(Z=<9`e^k}EYgW<@Ev1YBX&T)trX9xX?AB>w=W zA@4(?k7-Pump2bv@{y{;FM8Y$&wMjhxt(lo=K!- z0bCm(V0iofxCU`45SCUcc2W-_+nfG)r4=o%I*K)LThdb70y(xK$5g}GF4wm)AV=n2F`s!H3&SyDTREZi^zU;7M4*AH;Im3Z`! zr}i6r^M@UMX&Klym_mcV3NQWl!qig_DtFBqs`#20cF`%3iXW+MbNO#P4Ow_ zr>_#NW~$I)00xcjx~=q)u)pSU8|L0>hmDv9Fo@DXf25K@AA4dQJ3OKaqC+D_buH{! z`BC~2i1E~zb15dNjHHPnA#HF|NwEC)!Hvp#=PKzd5i9DU8dNldzq*TD{{VbUmZ6Ns zG>ox`G_i#{yDHw-@(%lRikb-FO?59&=BzD+J3?(Do%QRzuW$yNT;B{<&pZog+$3S7 zW_2F8n2q=Rwzu081P#@J;0&u6>*J_VA(Vn;Q@ZYg;GMr)Vq`PM)yx3^>L=88Jm2)# zV?7`d(o8_nFp(Kit?E)NNdDjJi48IYk4qCYs2kM4ST)D(#sFk1TTl?LWvNz*k!kMj zS5J4;x^BQ7TaP35!la5gbfr6y6kdpA5^kV?_a57xaaNTPu&9zokjn)WvBm-Pmt&^i zsN8;7I#`}MCP$5(WQsPG7i~5|4UPPe1`%>QNmf*o!&0=*Fl3el?-;>0u^~eJw_XJyWZ`b`XSq$$DPGL>l0o_9x8FszL{zT$rnWuK7*bNZ&;z)+qj@*;u z>Id(MhhbPA2w5Dlqv~&tna4oq8E~!1b8L=^Ji*ptnjxcPuJ8$ACeaaaM{@Vt$07b9 zBVK^{-jwOAvXd|A-lnWM#i0cR5-)8gr;RuWUO1dv=?qj0TG_9Q`Nm_?pA^?T>00W{ zn=z=$VIr!YLa(XfXru~H`E-rA*z9a^&w8h>x{s|!UH^AoHrELo%YsVwEJ&+%}d5$MdzZtf%;QRZ|~K%THR37H}83#y|bsn9RFx>hvpnZa(;? z>Rge!Z#=8Z9&eafbTUh)Nn~XNTzEU%^v6j??uEhAP1C>7!p*th_xwJPxvb4CkS0du zx`#fWTyDCRRW4ESR<4S^1*(dYiCrq$kjC;B(nUV6Aa2BsfFj>fwLW#zl${$q+22pn zmx?$ZI*LY^nul$zGU@1YsVUYOT*?fv2WZ@Y30>{IhQtxJ z8LsQR{=SY%O1j9Tj#Mb_DUn=*$haQZ8%gbU4i{$s0BLwlYeQ1C6YowEUK-py2oOn_ zz{El343$TjW)fy~veix%T0^q03ZPg4`eL>~3B;&lS!Rwhbg4Gm^25+jM5ZiuYL^kGnUB?ZgWgGqQSfK+#p0A z6l=LZkRDDlGeptZv^a&y?K>#}!152D7y~e?N<&1IbEP9lB`_?6A#uZ7-x8x#+v{V- z93no)_3`ppwQ2UcOLqtTt+!J5dLkC->R4lAG=21|X8b^|EXq>W)EQU?_O{o?8~~$X zuo!qW`JHmLMMFzdQy>jA@)j&k*JeAMSiLPyQu0zXRP64$%#z#?yjX&NY+mNR`NiN7 zOki`4gO|_tN|OZ;8gk>3dibifS8xi(#ZJKRFZtt5(fQ2}P1Vm?Ulh+!Q$$Mw#%w(9 z_tH&(xCd-S%At;8Q#YDllR!NP+7-a_ak<1G5gEG?=#Np;s=(U&U+-*S*P<8zJpO;3 z7V6gGt%X)yQE(0u8yN9}=Y_QDUcQ5=az&sSbxkzlWpOK3cN8eS!2wqHzZ`k+F*o5n za!1yA9Zb<5;q%r#43ibqp`I2tKiK1+2f63_N`in!w{7I%Y=75} z+XX>S4D}LI%Km~C-a>s$sxEl&ZEw>Y_h=S}v|_HGr)e3?niKGuw5uiA4#V4%esJVD zGDJkGw6?K8NWS*5@wwl|ET)P_ni%Qt-l&IEYZxWFgl;T6f-uyS^-@O+ajfi}w{~$J z(W+T*e;%uDeBuJ2u|SF zMeX@&#Q0^XkgAf((ja0HfFZW@`}x2sOeP)-6&jl@l@!!T46kVprBxb%{XAb0B%-K} z?=N*`V{%{W_qjIX7L?UwsU_+pLQ68K0E-jn*w|o2Q#-{pvd1b2qb4<9P#}4~u(-ny zQV$!dx1^{VWSQ9k2h*nJxCfcR8eL15=E)ODpi|OuA+T`I5;49WsRCSN{?II z19kFu{jqB_F~KB?lCrvbQ%s->4o$uP0Q14TOR6BPB!N&gmT~xN&G*CCIZ~BXQw(t# z9w@3~NwkzX6wT9SjsshIs;v=>7G;a{HpTD@a zE`hu&9Bl%@sD@Ev>bLshMCz>~Gl)qLB3J;VU!Ta>;GU?Ev%(P4vk5>~yRk$7TM{No z=R_h%;0jeh5noQ*0)N{UA1I0<5-b+EDjD>PTg|!ru&JS>8r=4o?ydsLMYrE?YhaYH zOodWup%N+Ww2QQktfIjCTzJFLP{G^!V|191kJ|%F+hO@{iBFfp<^EMfOD)2@PEOv~ zaMH%{EM3mfQKe#8cGPzbZSbcmMOI6crl}fgLPP;jL_qa7o&B&eF)u7IOAPPaXn-V} zT#bm|+XDoIc`jvDStS%`>ZO)lN|N8wE{7i$fPx zRV70aYma;qRL9$hIJGaH}C`Da|a|bnOJJv(pQ_4x}9#uiR6?_F-Y~z6|$XG^i`wjzG+Y_u!pN zZ+->)K!pZ z-secTlH&f}KW*_Q3b@*2X&<#8ZqbWhLA~rq`)`b;eq|jza%rfQ;0IQv-qs_NZ?+*v z)N;^C*vw#(vY3-H&m4gn)wm;W2ev9Lc*?AoK`Wrcn`JqDO$?c=4OLH1c?~RMYKw4$ zgXz`e@-K-QuU911d4698RSU;JvqEOvl#R-|kWS}IZEkEy$2hFdV9X{fPBqZT+PkHF zNIBl$N!#}rv&xcbDl4R^oFcv^&M4yVI^Eu zQq&=)Fi#=eNW*n*HW$NYsf*Gy61JfrFCWyp6|G`Fzw3r3q%lQ5$?Ay2qv;`yj{I^( z@4tbF>O&JDVA{cX5k}!nwE^yNCpeTj#H|!HG~$-7TGG=yw3Z#avgxo=uj6a&ZWLh5 zl%r-k*fOhIiv{$L-sklgriw{nl*hU5)fmcxNs&s03@yL7{PA^_WV9!zsxune%8HEM znl@F-;Y37L4e6caW9mDQV*=*jjtInB3x*1lK`@mp5r}fu`IQ%Tjzp2RbvHZhvE2Un zyviX;ex!ziqMAJ3DWq7Mo+01v3q68>MyptF`GJhaaYWfuQNx(iPfXR6W_>jgyk=E0 zdPocg)>~akzZ)EABd}kws8bzLjH?t?5xi_H zNG>ccFKc5DU7SR72CbwO12#(T?Dgv*k~Y1C_zbptdagmg<%V+1(rSO0q=H9`y*PTe zX>@6AUrOBaJX@Rnu-f1x5SVc2xv%(`%_&;HrgC~oDykZpYinMjdS!qynW2crstK@H zrIY^vxF0y;IcLg$7R&ztivIxa2C5-bxgUk7YPlQ>bN0ty__6anYt)|)x^pL^iaNTO z+J>50ry$KyHAnxf~tR{kB!C{UudxQuS z?Qm3*NyI*c>)fBF`gl@i3o_Lt?#v^Fq%wv(FgLKU09cCWocZ{#U%S5Hzwu7Gp;@M*nr4%o zA-cP;)|l@wU_kh15JX_fzn{wtxW$bYSznqwsg}`CSn$SWkztQfMZYKi09U|=B+M%E zs;t(Uk>tziTTIe|29veyIX1YxxV}1K;j;3UT3l6Vb1Arj3E1r2&!;||(@+{m%VdqT z3b5pYexv<5P8eDSm^b1xN^NjX&Hh|4u49p00CXGJ;a|k2iHVI-M~jQ&X>D5A2(HD_c22u4xT{cgJ$ejd zJpkp=VVZ)G3~N?uYHEsiNa`YJnb0^5vC?=a+l)<%zRCu@AJo8l+w)^{hX|Uoc`9n% zrkThxIUlzh0pJWwiX~HRwR>X-yF-blNC)R0iz%Ry-bjNilD=4ANS>-`7$k9vvojw6 zUz}|ETj5NZ?M`V&nHh4L>PVw#p)mqqUac;7-7dDe`SLA{{RK@$1$8Y|2mbX8s?dPC zuG|4{H@&U*$8Teg z*nBe0GMX9`p^kpmby=9iO1wtzX%I#f+Q!261oBQVGdzbV$i8na>m2T?e2Si&OOnz{ zF;-uxSPdX|9SKmN-pc%Qj4#7lIcxg&q$#6~WT~Gwq(zLdP|w^10#3txYpc_3#TPZ+ zeEHc3@sgNSaEb!a)*0{Us_c=Klb3=NxmM?}d5baRfDNK7J|c zC>0=xT3f`?f{d!0KBgO%+;f3PGE`F|)faezxCj}7m3dU@AbnT+;=3!$Gc4OZ6qK++M59nbhzRu--o%ZEw*LTZQ8KMB z$iho^+M${hjOub2+QYkwi%gLZOWBq8-`|4U{qbiGbt}z7 z9o>ea&*-`t7u6X*>wnAdi#6g^ou)9Sidm-<)X`G3h;_>6P#RXl$2Qzy%Dk#a%j#N* zR(g2UG}1;5~R-~nQPEKjV@jWrc>z_BoO zv5sF$Zy`{sM;zSW?~4n--CXC!RaALlsda(?fre zSM?|-eUx9t+Y#+#;HdV5s)dLwOoRyCmHSAb0*pOdnC$w_P8jkKcbW&n?UX@~aPNd&R8hx^xC0dt2>%LZC4x&C75+VTmM>b(rEdmCnkd#X-H#<>L&?DTOGcSR{C(r)L41NHP|3PmV^D z`3zmttQ8qqY32qfTp*86*Lxd+H}l7wAy7(fswGxYyHN&?wvpRSLurg14g)Ts`fvW2 z7>QXSs?Dlq0h~QLm|}=p{)ZjgFhNlgq>!|VBm@}PqbKARulxRzyI1W?5iN+VhC_+I4hTkpS&M6Q9Oq>1Ax^spM9 z;hl&Z4oCW9b)WnpuB)`rSEMeD>F!gK89@h;waD9Xij2dg>+-d{w6Z(jLNp}Fs2%~* zKT~@QYn^KPW=L4Z*}_Q5&8;lY0?LuUXfnqlu-({yPrsga!t+X*VG+k1Q>&=6lInE} z>`#T}+u`b*_)9RNr&Xuyx%r1h7dE}@p5)ux8Q#uo)GsY%CRsH#H1#bD)RBE5O`lh> z2H2^T^De^1H1zI!w zqh6bv{TDvhz3~}0r*+OM=rwmVK@s&+mLwQ1$vM%Rm@cd7ny9<&^LW8g!y+!X;NmVcZ<4U+K6z`}2q^nMD;sEW4Cm z+10~oQWy2!#}ghnmWa{T8jWBkt5j@J)FtV?%M=Rv}{pkVyvj1B+unQJvG~Me79- z^vPSf5pGk>tZ~!;h3+#QcLp-QV z?z1zbhM3hl%M+x?9T8sPh&*nsaKnq7VyWtDs_JWnbJa}nkYRegDoSz%mt|{s7uyz4 zW=T%5yxx=`C5sWht(b%3{joO(H)S1e-CEX4R#6oZmMBf5C}goJPS>`?T|u@T)+*>@ zTFF{r1yYvSE7?!0{{R=J{&~UV9Y>O6$(UE>G_q9YT9P_Q=Y=MsKz^r|HUzO=5DRW@ zc(x7N8XUf9Dl+PLmVC^Jvlyjv%0KOhwFNQT)vDLv1B#1IAqAu~9;$~w=~y$)x#;Pr zGkG$ZrRpT6qOX#WGe<0dy(_u~w(~@RfHt!m951SKseUfi9+u9!cQfe$Thz7rs#Hj; zBzJ}awJ=2X0!Lb-DI{zZ@4fK8x~+#g$#cxFE2C&DBaScO(o;-im8FHdiy&>RPMyyn zTG-ZPy7|(RySmt>xEZI#w)Z&7tXomzlB_W}$OeiM@&Vm2#- z^`}eI^vu+8Qp+rw)s_3CU5bJ09>Cv>WMsy(uJZb9zdH#*Tk~}72r#-@ ziKUH%&Y?*$jmQD63Ah&aJNU-N$*q0mI(6DyBnX)2wBw(Ts^{wJ6r5?8Jyp=Gq{{L+ zvWXZaay*dKqNTxdV(r4QfvVbxwKNm|E_FPpErwwf)8-^f}26epjlN7Ncre1Y&SX87@2yPMuc! z@x8Iox)!Fcqdv%Jvy7smm-uva>;r&H!xVC~ci!N%ih!?xgp-X`?ZKkb){m@j(Qm!W z-z+Ne3yQ_hheqxov;sArT80}WU`}EefBpfNEj>+MX_&$(sQYZOQAhJm>=_=*s#S9N^sKQ)SgN`yC1mxZk$db1o8voMoxzn;<@B_) z5ffVV4=mR#%%CCD&5DO3z&jrY2bgsXRP`C0RfVVTEGqEMXjk?b0eq)k@czPlVxxP?`sT8t%{~>ww{t|i93qS zx705hb8G(qDBj21;*xhK^JNoJE|#vGQHiIRA}gqMX$9SyK+R)qmev4$h6ERz*G&^% zNm3-%K{^7G>-pRJVakl^KI_Fr6cJOpK7@lzK+N|*O~W0O?k~XPY;jD{JQ=ib$1O1o z`Xp%O4H*J9)K$lw?fQMOIWqvMheiUm$h69m<~4N?QprsbWSU0S_b#fcqmoU5KG#0m z!>OoPDJjxek>~+el4I!zYzaPqPQ!q1Mj4WNHmRnG z)ktZ1v3r4iCq~x$ZHcsoTDqty)^QP> z!w7MGI-0`d4;CAqYz`}HWlE`s%B*mpGRYKZ8IF|%s{O~`o8Js(7&xB+%R)xYkTSc0A29?MDkT+zbt201$8MY zVh^XQLD#p~*6}*{(BU4IBnA#mJ4ek}Tu(#*u+YxGO7>3x#$BJM7wR?dfgs%rn$YG%~X@3b*l}128hbjh4a0`MRGsXewdkd!7kHfVMA2?>Xwa~D4?Z1)=^-}te&fT zT%Xq(it6oDguuOn97Mg?mwf|B-^kwh$qi{V@iQPMk&r4N7mP5lHuJc?EUGI6lrE7- zz=+D-TFSTHz0M1keH|Nvfd*b4gFrFA?si(fBjh9FA zv14MVeXcGq;@Co=NInXiL}iCGkTZ5_Wuk~EPytj9{{U6^Cd2o@#e6d?nTCB8O0puX zP`j_G7>Cpaxocc+e**&-HN%-!0#7yBKuj}3^1~zTeP8A zTVt@kB=`Gdp2xY^?|%l^?-o*Q(8H{Qb-388n-6WUpW*b4XNGeV1-7y{Vdraa_rv}8 z$yCx%`>Sw&^TUi_?tp+ENGdnK>x4ilg0nflLr0t}o!M!sb*WbFz@u2VB#Up1TYNF8 z$rmt-rUFqzUQ`uCxCMA}Z(?}^-_APfG$Pk#01IDl?}yc(H`uMX3IdPY6h4CUO=?5nrZ57eNrrAQZN?NxEp=(k)_Qjg;W%oPG;5BD!Qts zXi6lSmr*xu*r>IRz+>386m-=ZjFBiOlWU#6_|E5@6_@6*I1ECTEw*7v?CXm{YXY`in>vzOP`Qeptz7p9OQ}tcIf` z>Fl2+q*o5mQ_AzrAyRBwU9}PkHnoL-#w)B}xeFiN$#zy=spp;*QngS<%!?YDUD z>67wE(QxFn-!V&DSy@k#=8@*n)6@tmCZ~n;PS>^7$OhKF_P3kj$2gjfCZ%x_q#{-a zwGx@igcll=+=~x5s_7}~^NAv;%;;)0I3cAD5|VV3MP?fLKbI!apMr1q;}1ht)m2@ZI%sLpp%n%+ioro} zEL3__pKou^5~s~0r;3?jtkfDck)nmeu;eQ}zLIQgqUP4VG2JB0D)fkw6il+Zv!?T8 zsGvnPbnG;&sI42Yy4Y&u5XTYW>bHkLr-Fv1VVG4iOgn(E+QmuwKg-4+%rl5t>S-jI zpm|n4@tkTs)@zL_KYlSwO+te+aw%h#bu^|y5&r<9#^5UhX1?Cm!fRu7Q-N{9(PZ^; zQP;;)U0s_)O)Ezp#GfmjgJkgTUCqqYiZ`B(t7$3ROH&fWTnIqN=5C;5~?2UbaT?11LB4BgQ#zO=t4-?r#l!FcSp@ zC686Rk+&lLI0PSYj+c^jCPAO&Qr1*cO9Yvly+kHCY-yurI#ds&*mH5_-Z7cPYIZe4 z>Ntjw20F~-ct-sUFIe_Uh`XiPP^QY28sg#}AOWXN908qE1RaQ-mpYp$%qa5OD(d~`h(w0o^eAS$I+ z-jDMOn-O8RJm{akH*_jGr9DTVMaJ=)D|-vWZ$!B10(A%>(UIjl9l8=SP(V>-0Y|VF z!_!4AEg}}u={OFdPU~^!5!m4drNRj0cI_xSSDPGXP;g_jg{A~S1T8N>)8&;Jwrf$; zF+ox(GTG#c83n|$7|I|3^4gtjIn`@%iY2C&l1HYkiQ%Y$yK=`Om1J?T1ab}WXYlq) zVbs4hQvs-!h7(;)7;6`J2$7UuYm^UdxdRYuGdVMC%C9h}w|cU6nS$;YQN4%cEHRf{ z({-y4Id`bU$?LbG!lkHOKco-WZ>pD05Lk!OZOV*jaz2{OI)l8qL=w~p0N1!dbHajo zCdX`M>E-tiZ?YV8ABMT6X%=fW4p8*V4C*DF>mrb>I(81A5KC`uH?i}^HKRz~bet;Q zjn(x!HGv_o?nL#TTvTHom8Vo8@VeYRu(9bD&K20ffnNA?TTKx z=xn#6vI;pSuc(_knq^%K0;GU_dREs8yKjC-_s2tjhP@{|GYXiRrm~>3NnZ7~n7bR7 z09i)n_O-Et&T~wMBI(S>D6WaKeyU+5ElovCZ6k-d3m}!RWC}wlQ+_XP&M{3*PVTQt z;#?(`R%BjNrqAi=YowA0$;1hJrv`Bcet776L#kyL|bZ9ofO^xyNwf$IA*Q@}Qj z+#b*hqC^pp>PZ`11G)AXhnZ9V0L#;)Ga@82G%ylL(7Mcw0OH?O{f(?WM;y_JT)`Sl z1lrW3bO}3_X$5w+4CLx=)!O5amM}N}%ettK^$|$F$q|9k5QDOP286$&C+cF~qse!)sz0diN zj8mjeR2l=H2W16=Pf{t;Sdd8os6LaeIk3I_fGvqIH_g}5(}#?tPib5}fB{0fLmoXq zT%Q~JVOg{<9TvHCM9)bi5R{JPhU!^-Hvv?iB-;_Go;pgy8b;8?QpIQWTS^0Advjv9 zKKBC%G&F*q0Zuf8QOi!Tk=$}a4-7%D{{ZSbM&1SSWtHYhl+@8ZGO>#+iR#g!kgs*s zN)`vmFLk%D7sCc2QJJ+Wt3+q)g_c3LbjF|^KEl9l?|c?^1m>P(i4s{MiZ+EoP`fpU z+RC8Vd28Z8KtG(+W(s#N>O9jg&*X}Zs-lob0gMP|WnfqWNMXSNw30se#A>!&!#5&U zr;oo>UI`5PkS*AsP_QE6_xp@4tFu03Je1(F&du8hqU=tP7?Jn!=MrP2j-N886;a0O z?#)^N+AskO6j%VZW&52(d*C8OZi#cSRZeDw5}rC~kg~IAS zE^bPB^Y_HShj=MYRn1*2ZC6;dso679w2>3)4D1vz0C9E}`w@gzRrVp6O?hDqggUA8 zw)Wg@dt8n0h}BX)T@t+zXOfz^>Gj^_Y`2b0{AyM_VN=vkRaa9_1uViTC20{^tr+y3 zWDhz{*S_DbBGws0k3`LGV$}50){5#)|gvOa`5PpFOW zVfOv8P;2Ulc%5n?*KXXc9+g|2&mO>=ZHP#kC=6>|SK4!`#qHeS1}}2P`<<=0v9>(| zR`M3CcFT8kD``4LrT$^g=bi0?v1eq4QK(oyuEYcF_BO>04Mk-t8l0{Brf^+gkvG+~ z{bcWdNVc87Q;SGzs!Z^SY2dq+0C#P6BIKyp-s6AD_+X@_7E=V0Di)Ox6$8_I_$QI) z4y#jwtK4RLT!uH_oJQ`vN?KZ37+pouQZ?LeLiw>jw<8VKEi5xnNR?t~B2MWl6`24! zOBVLp-@XY#vPT`pUg%~XrV4LvJYn05EuBd`l6-%*DU&OTWR2r=sl25asb?Cka4s$4 z`ka}ghi50kMr;EWS#Owg>RYmM$ri2UvCi4tXbBtivsfJR&(5u(Nkw;qr`J+Tt)SRpU~ z=D7UbJxyH%5v?o+0X5a2m$sK-ZcTs$9r)uJ%=@Eit0#_GtK+JYk{J$NmOT^@Q>Bm4 zNK(g9Hq=Qs$DrFKft8_xI#-Qm4GR3YT_;bFFSzjDJbU5=UPDVgG?XHb@LOEYBB+pE zt}Lv;-M8dzdt)8c*#1a>ek`vn#nIhIOPE!fY??-=H6m3r)I}OphSFK)B27zc6&4mY z+V|SJe3r8(qN$p;2c<~bN4h{H5&JRl);xIw^~b9-e2ppTWHilEk@ie2NfWV*#B|)0 zHr22q_ath?PGixub5O`eUb9CnQq1(a7g%lCNK4xMk5#x9#yhOoR364ZlJcWvCW;hz zwN%xXk!l!$X&Xx2Rds3uf2!Nu+QV!=l?n9HPg^>}9W$1dp<6RC2Iv49M(j4)!A3nJ zUGV(oG|@D{8C6vEk!PLLOtlN4jXZ!T3^z6< zEX0+!HWu@YXWBU66;Hb}X8r*#Xly~omjOm({d0E9+-!c#P`!i^-+vq=GIQYB$+C>ru# zi*4XywzuJKV5Y4yi096lW)ZsxrA6(soovcR%AkO6a5uLYs8D+VF|k$_>1H=vd*YTu z)A_}2Wt4PoSrs2vQgszXljV`bB9bVjgS$Leunv&R8={f5is{+0$@1Q)&a&EgV9T>g zntFJNXyZ~WFXF^;e;i}eG$tyZhp0&_vbvv%y)##snUZq9Gb2Dd7Lk1}(X~26n!VI9 zHwPY2N7SmsmM`kL@=pH%?~AxOFBL87Hx$fwvPsO5KiYS1J=Wf>M^K|my(gBv(g|sd z4KOj8o%u$Ud7SkoY1Ag1=M_Su<<*2?Vpzb{Ynvz+Cd2l{$HV-SDC#`MzLPd*d6pGw zc;lNvJDo>vNc8RZJ7XXl9S14Ra?Ygb${v|CZ4PXML=z-KN)*EC-+K{kaqPmPYPz}QshCeDqj@+44w;?0Rut60Fq{4 zlaZK%6N81U$$Dy`dJe0oD5IJj!7~+FX_0q$beQB+_a&s`&V!AgMt_HHz0Rq=YHpTj zV3H7N#${U_9nJisuyL^RzH!oi2E$84`BZQ#)5}Sg!7;png3Tq#U^!Rax3>pl?dVEL zmN*H2OEdjI?gx{6VAJAtt!k10FicKB<+s&x_FO%e6uU>0llCyYzW)H>Pp#vjh6pmO zf#=i01As#XR@O>&Wad$7OQVh`fAs=HI8<{{Y4^$||EHtGj{Qa_DZXT{N*E?g=6 z2H=}&UAM6tV_SD#rB*OMaXWf{D?`TVTGF~Lv;;8Z2Xc~e&tZuq^;emcsVdV{MI>eF zD72W^SeH}jVgCS)M~$wh-w2I6xqU?S48?Nr(hX<{WMDTU{%x~=lYV!jj;+3C3OS6E zG9q@NOA{g?I#ov@v^YCo>HA`KTIojxN(4z`rl*oeeP;7|h+T;A2(tcrZG3BEs^^I2 zq(LgID^D}EDLvHg4Twk6vEPD0z0aQ*R1!$iv~#pCJTmr`Nc8G!qcCCMSZsDA{jnM- zK5yn&NSdR9Ga$F~w*H@REpOB8FsP(je7;Gk*a~o7&QjKG^#&i(ZO!lJ6`U0aAtXqZ z*=09nT1W_Rfp%vXXJQXGy}$c*^MvNHFYyJGOA|*DXfdM;u_}iD0B}IP_}dONk;eDS z>JUuQSR_q#Tj~Tal1=Yp;Ge!2E_>mIs%n^{B_Sjm6^}?zeEB2x-x1PbLM2#G<`3M= z~=4Sq_B!EjnIp$yNo0z12V<+k$Zx6*4wkP{vAn zn&C2OhCoa=P!x0Nx z7ZPa%h4RMSeX!h>s?$kF^6L}SK!hIP2t8VWQVFwZP;cboFs_1jCW;f=VvVhc)vtZ+ zeTds{wie3)Xy>YuR7RPnjg}Q?l-oMcqoN79KfnN1d<{feK_!R2;6Zbg9fLDy4qF zvcV>he;Mu>@AX_8kIvWN+B?$s2$?RCMzO`J)>ZMzw)~IK;=!Y*wFGcVT56!C$^a3f zjVcJYi{JG)XD=~kE@G9Ru^y^`7~F)`qyP!F_x$co5dei$$kLgPyh61?x;Wo0NOn*z zbrw3i5-5Sm&&CY`QG zjeW0u&-uRCs-!J6?efTDr+GyRNpb~<0g3hs2{*r-K#2e(1Az*CG?8U=)zvQ`A3H@+ z9Ca}%SxieFt$$!z%Wok_-wOHUX_`n{IKxpclxEZlF;S?GCc@wTFucNv9Ew4w@WVzs zgto0p%A&x46sZRObqjKF4!%(=MLw9KkR(fcD7nyV!;(l{y_X7Pk5xRkbz@Ce92Hfv z)IiTS%QK`aFppF2z-qC!&->yP3dfY@i8Td3Z6p$inmUJ)%3^TAwQaLsVQ(IBDiY2l zs;E^BQ)DQD)@6}USby~l6tqnp07;xB3NT*WUZ;>tC#it&Nb&X5x|3t>P6jNf`*IHZN!gBR9!)`aP|a=R-_ z2#72Wj99Y=l{X4)={^Yd^S6B9_= z$iZ)aYwxk=_QPt5T1SxpO*$kcHfwMXjjne7`0u<{=}xGEI<(hURWQ?YBACd%&D0M+ zm^|&q9X*Lu$={wTnRKc?hKt6*>~H+dxW3*F8JtEtWIIM#?1CR%$k^QOM&Gs!=!Rjc zX@QYTlOkQ50xs7)UjG2E?}8;6CryU`0C9&PR)$cy zeSJkV8VkvJ0ShTR6;rzN_vYt(RV!2mCs4E8Di%OUKHwi07*fRLL2wG&E(9V9N%X;KE{5-)LM zaDK;(XHrUyaTRx`Uf6$JcfGj-ZO@zi?T2V5a8xYDC|DB3Y(=*qdX2{Za3f`=6-nPj zrmJaUBI*DD6Kk%LcUyyd5r@OPMG+K{5Vecy0{nTs{{a11rG}zLZs5E(0ZX#p`*}Cq zUj~yr@qf#>oV0g$)#(jw?6xG2+x5egE5xZ*mGlN{dTn5L!HF73mAg`ZHO{T}_BQ_5 zsfpyANf=~!)%R%H>+j;%-`fj{vUZPK#G2CJtI7A|+WrUk8{k5+Nn|5bXbPwEDAIQK zIB-oMQKYy*b_V-ji(AIq;u1QvYFU)qOIt}6zdN5EFZ%Fs;*|~fj?cK%qtjz;hq1va zDFI-4lBOur=Hdh-tUX~!7f^oo7aw7XM42L!yw5T+>C-LBD7OFtHn<1g_umi~M3SnD zorb}$b8pz4ustD_zYWRR$UZz?-Y#%q9tp(DsLBU=FlyDV9x_8}wwr@}uYNx(+>9z% zR=$>=F<+R++A+wwC3In9t3ejH2Yap~w9IUz>HvN!u<%bd!_vlTVtAyvR|Q(v@HpDX z{V<>&NRkv;X;gNhoqLM<+C~ysi<^UX-ouL%iuoyXD5@Q)tE8m`MVJD?h#rvE-GINF zZ*OypvXUFK2~nMm!E0FF=WFf88A+m*$Dk?FL68Ch`+e~pAxcayA^cqU6Fz6v`Sx+s znS?D_RaqrPMIBf%u#!QoibyZ9EPW@AE=Da{7XCE?~q?GiMDIcwdJ&1EzVsb>KPX|uN_w$O{{PtZ8&m@us zTaXUt?PH14zo^!ba(q>{HWVvXZAwk--~kQlKe|scyxN}#`pYZaE<_{ZPfLmW;+Z<}^15B@> zNE?%LY-023FGP|=Y|Hfv{{W^WCRNn{YgTWmGyc^*B1U2Dnvo>mFf~S~o11~T8np54 zjLJ_$^%2RD)inLd`@bzwP+1>qt0M$bq<@$Z;^PvtX(E!cx;ok}^f`OS2%ZRtnHiB- zja(Ha?WKY9YhMq?mkJtiK3A}d0BNF~BP!!pAcJ(%>DuJq#@J8PTw`VC7uDTX>BI~J zA0-d5TQqeOyQCS`)P{{WX*CY4IdO&owbM$KTre?QX3 z{ygESWs#jB)f`mu#Kj~R0zq=t+hcnYJ-PSBd;TD&mocc4GX;8r%>b4wf(rq&aCjT@ z&)*Vb3yiEV*E@Bh%cV6D7FX>jZIKI`5*W46FW80JL{$p7jg(7 zf=K|}4lI7y&CQ#~8IGo*zD<$9wC{5>6$a~Ti&(F#U~UEPwkA_%)74KEWlU`qL@_jr z9Xq&5PXIC>dxNnc?hTFuOQ=LWx z8xx3MD>&_Zy)!H@7};co>`}@~6w_dvXeGsgjjY1M{kX(gbD3+YW>%?_w#QPamAiU? z+$pi`9fu;^UfkhAT7f{Z%F+pDh2EgY8SbeBD!N;3t+^Mz;M@^}06U;*a8vT|@Kh0+ zGCDhogpFN9f?^7>_S|VB?{SMx>^1pE%Df?J=@h|sx`6HLMzI^7K{%nQo|>XGj#gtk zAud>0muvd&K~@*ib_zwnvu;4l^A6=f3T8p1Ax%MakO4OzrN@qOTZAa`Dr``Yx@qm) zk6TC;_GVSR#@8280k@I&#jLFjM^0q*)S^Qym6OF(&fqML7B&n$tQf72mHX|R5~Xcb zJnJPzJINxskSS|5h2&cs1MlGY#)hvomOQ$lTeTrs9$4jfS4m@X11Y_|YC`Yl(n-RM zLK;R?DqOm3%1JFZ{P0E!vyDBlft#K8AZfRgZ+s^&dTLt8VR~&6Nd!gV5;G`peeH5R zz!u!wj6asV)itznQpef+%XKGci>Nk|bH3Vr>Ajg}#+W z<83>WW9r)##z;^A5~o!dq@|q&Pk!$q1{C&MZF-fRE?-&(FMlS${zmw3Eu%8fER+FX=3rTA{ab>P zFg*K`1%~GL#DgHFL}5EES(=iLk=7|IY2`pFht}{UmhBtz7UNHm#}=}q$a4z3sk0N5 zSIAd?A-vs{rO)Yd=cvA2#^&)07NS#9xOz6!Nb%8Xw{+(c0 zI+nHBw*;2l?TA$s-#-)gRbpg?W12XKw2qCqzaLOGBVrCCq=f>|1dOL;rJjzQMN=4s zV2!kgVl@LU!ASauzvuz`U|`a&S{M?gVp_4@be1+-FVYIw8-PXaet8%ePH34yYYCFN z`%4W(w9c~5;v&K|XDV(%wxBj|KKB0jBRhydeQ0d_$zm=vhCjZ*n|tEE7hC$CR1Kh) z(|tZk0>{(h=kvY=G_-I!2?VO@$3j2U#kaUy-1z5gcS~{2OC@88OmHK+Aa`I?5PXY~ z>ey}fI5!fZXc3w?+QmVX8=LY6Bay|ez7P#0^>XPVAk0s1QLxfCAOX(brLTY$rZ=Kg zYkC8zKXM2r=i2tdO&qg3J?{>o7$q6bp?~GIzdIZ`6X>WdOz`@Jm7^z8`Sy`7DS`mOD;Kb$9H3GJ_= zZ6VO#4O&Ug^9_V!- zfH?{`xd(3-!sE<>#M%R^g}$|0ljlJex1{V3=ZZ&qX_bRKZ#wL#n%2aNskkQO{zHsN z6+gpgGAxI@z^0DtC{joykk_!ix8H0umE&e5qdlO8W@T8`Nd>~%kvXDb<)-ks0QBu0H!M%by2Uo!{2we7P#|XT1Fv*wS|Dbt+uxR0NVH@ouyz*O68alz3u_GjkqBF@l{Cms{+FHh{(5)9RUej z{UC<+7C-HW+1i{&j?83{$N|#ITb~DGV{v`IJTxmqSg>jCkVe{>Hn2C^*p-$>Yo%2U z3e$+ec}m|&x!42A{Qm$mib{Fus$HUq$v~l+Mfy$rgMF+&F|oE6L7YPz@WT-z63x!n zB=US*;}YWFQ642{T3dGRldxG2ix5*%^%Wvf297n$;|+7UZE|jZag2goCZ^yX4lh0? zSA6bzjElNcqJj@3T$B5^_Qp0!^;Et6H@>01_~+`9=gD1FuxneTyD2r2Y;1JtvHRmY zRW_2^n)f%qwkFkPX|j+BU%xn|s+cydO>fT-*=IB=%)+3^2-a>#oLhV}%O}kG#)#8T z@{dZgRSE1^N1=8+jqbn?x%0*|m0G*j2KUEm_#x8j)VY>%Sc*iYX(_`swG|=cZ@34x zzn%TDpK8rd3r)lyrH97~=QdUTDFqVtgi&{QSv3{~k+&DP!SK>t>FV_mxFmUtHC1PYDSSYrFGd{{WseIXz7D(OM!9e>L_lEy*W*T1}I| zEG8vOGjPf`#&0&E%reND5vj)dq$cLx-qyyqNts)^P7#!>!#|iAA?_DoNi52%zvMg& zX6LS&SwMLegn)x%&*g??i(7s*(^0pl)%sf(Qe;A#FIhC_Ls^B0Ha}I4%D`?#90 z0Zh@4hbtRN)7Ghs=CvOqmP4jEV!Aw!YlTy$_R`E)i;xH0i`UZRZ6;SOKw8xm4#f72klJoPk9P$SW5feS-Sw@Yr#Vm-HE_Vo2{OA!Q!=^M;3_i~JA>+wExZNyB;k?NW_rY>g??tDVRuOB zmvkXkYuKAx56~@EXEbuTh|)BjwrLnHlnhV~NF?bypX_lS_U;NIuAz{kw2{DR z)=A`4fvm}_C}jlfMa_oi)waM3;S9Cns;}l^Fi+bOL)${0vmnNnG{AwNo$fnyB?jESFavt)qKf5`<|gE=b&5 z8wLicQy{oX11nmQ6pYQ>2htgJ5J0t;ow1ZPvE~`QEgeQ< zB(;^H>e=37c4t!D`7FR#++O1R;%sKT1e;9mH&=C2GO|?Vbkk;3vc&q0N2OPBsOn-4 zoB1SK+<3(Nn=tv)4yZ*$5fR!Vor%$1ZJ-_%ql4*&RHQnx>-x3 z5c-1LfGoUUZZ#WuIKRxY`sfT%)6`YVn=1t|wN=};0RhPeP3^gEKm%ZRFmo9?RG!cb zeso5e##c#K9DU`EWz#fH2xAS_|kbhtj}>kD$6hR|cA05Y^@A>lh-V(7v>fa2ybK0D-u+B{pGEnN|vTohj=Y z%_4UR?%$EyHX+;|Jnd^7W^)N^DKsS1b50#hi%^NfYSK`DSBv{xZMGSmWoQjmOcd_5 zk%pAH5$OWzMXz&VZN~g!meY4Kr34bS5LB#m5KQnzB|S7^A5}cBupza9adUHEFT;I? zEb22t6fVx=otkxfJ-D`2*4!m zsOcM#>I-wd&LLH13rI}VaJ)(inumqTkiz?uV79Z106g)&BtaNc7!aq^*TtAGX;H-V zvB>ryp5oja6XXz7i+LyW#T1p%Pc<}6I?}R~MPQ|wO4x$Ke;z@w!jn2HSOm2!#&TRJ zl&VUMno5P!bqqHONEhJoh*G5TG}PIolEP$?MvO~3mSSTD>I#BJzz{k7@Zm&HB{nH0 zf<{J?og$t1Uf!H9bvLO4UY`_o#|QAyD@KP`Y*^;ei@RJm6stuMJa4l>E#0Vh<3|u)D=` zW?$uHz5D_%freQsI(n|<1srb}GY|>9cWDX*-r$WuZEcPG``-wbD+P$sLfeOVl~wew z78m-w8(3}uzb6wuT_%l-{JGXuRqjTx4~FFZ$D844mc~`Yi5)ub7`w0}5o-cXyyLH1 zWfC~!l2}=iMo=yyXuVpuw+wl|kN~&qhmxu?Z!|2RDLSM&8%_NuNVvb)Tyuw4EkSu9 zkpe32s^w&Gf0bOZ3^y0&j~rm6pvwdi32VlMW`9M^n6=0t08bx#b8HfvCS$09Rv;wO zF50y-8=bFnYZ4E)7;=_YhO6Z!s$_y?(!x45^jO@TN9w(S+06Sv25@{i(siuy33$b3|8bAk;Zv*_q+T#+bX{$SKvsAr8g(I{i+esq#-~#~3 zKsLW)&A_lc;h{J?VYE6)7PINFv!{y|X0`nBYmM!KMs^aB3UABAwcH)m$|;=^K1LzB_m-l zjzzNots6578(P-q^%wgQh0O4n(m3L~s;gP*KNCq7ztgZb*k8f6_z9FSD``-%rsl@EY252>FGwWAfMXW(kbp{8M!(X3hv7m@X4LZ$M&FgTZ zN{=M42Vf1f-(!Cl!?fQtmkSIs!Vzw&_afJ|!5{_~8~YG_@Q|$ImNb@0Dq)N<5GRT0q7qB1;?YOxH z-0#LC=RIAMbiPeVnspTQbqkpXe77%xMUHC7qyGS@Qt~y#6rk)Jg3ZVlu`&`&1va-( zCSVWGnm(e;K0=;_6J@Ep3mYtohQ`a{{@-k4>+@HE(xMmG8{Yo_t||JHuPJ)V<#T#k z1mSYqPmyXJ_~#=zK|Gg^^Eq!Yi3c*9TBbkTyFrrQEBOIw$nr2$L{iMe@BkZkXK(VVf=}(q81>FilGF75Q%9F&(Mq&5 zu$6{Mjf>r`?%pm~mOe%C&Hfa0G`$^`&zNU)?77BZ78X@EYG|$xYi+|Zv17-iF7`O+ z=_`pCKB&sA><+aSHX_&b+xq4T7=aU zg#Q53m=MVP-oe1X*qn1-nv!(}I+#o|!z)ERWM8)GY|Hu)j;T2sf_K72c0%mqZx%P_ zel5;2?MEDaL0lX!;uy&~ZK(E_)%xO_)&kJ(YbS-(EqSNNiA6O`ou&&gjjiqf0I#+w ztMl08i$zHk%m=8it5@FG)z#$mv&VA9ZN1dkjAL`Ij!9>^c}o3&2lvLDw62klg_eq( z)mIs5D4BRz>Pd7d zA$yJ&SEk2L8|{1JM)OBCL%OZh$WH#7`P%r290@YCtLTbQw;Gv6x8rfQJC7qBF>7UU zA;o3ta>g_d4rNJ3WowkVa;_;Z~R_-=&U1>Yd1huDDut_?a!$~7a0AKvp z!`TU5ff5Wp8RMg7!(g^02LN1UP z0G1G`AOT{m=gga0;9u@>)Tw$#l8U+K(Ni*w2+@wz6soJdVWNQ&J&3rtB%70daT`3z zq>_qt?j&-grQ?|)W?~lQNjKPAYYs1rdemE;0LRTlQyL3O<8-MtRZU7psI&^q8Du2M zDP59oIsoE@_ zz8NO`Lh;faao^GbHY!b&vfPut;@|;CQPY{l4MYbj$*W?kP~Da^vLd3829}WA>hzLH zzaUs0v8WU(HOpLWtA`R3Ns(n4sywxjv~&`89llzu$D}pxVP$8)yW3oC&HmVs51P%TCfFBs)8h2 zQ$$2IK*s98*#@1gK{wQPz0MaVO_s$>{q(A@K37yJ z>EAS=%xN@;*XAUOH(6K~CN)ugNPPr`H@h(e0lkM&W)sH*G_-ZD^pLv;l4oWJ=WPq5 zSdG|P`&!taX7K$at7+4y)0KBkMU&T5tnf%C4IHgBg!d7BC4g2xa^SJpl^*zU{!x~$ z8W9Y&H1Wp_H4{Lr(U7(v1G>2^N85a0at^AZrqatDO*}A`f~U1-R$V@$q?4nOatKpy zF|U9~^b$iI3YI3S(-CPZ_iIOM7Sb%B9{`iJuer7pl*u(UEE3JwnwqL1 zJhU>>>UB1WRf(N)WxN|ch*R!2b0YGUmb zRE|;UEG2Vb8B~V3H!27h7?WLDO$AVf1Y@OA%^OELSx44%soeXw^&5fV_^HB(AP^Sq z4diNpAc>8Z{;#B4#r^!;;x#G*+l6h)t&>(bz2xCTjpRVOffxip6^K1-3%wm=~W0yQ1HS1+S>coXNux-PO zSf3p6fs2DAY^fC7HeQg9qMB-oc&rsAET(mvQl{Gr0!_&uYvIMIbbvaOMhPGwJXnoH z@BaX!znnKFUmZir#gZo$C6NjP$0~enZVn^MmC`WROsb`KfW~dXusUt({PyGY$4|1@ z1uf=?9S}Us3W8%S7&VC{i*2W4Z9aYY7)rGaWuuB1Oj2IWA`hnj07$m#r0jg{hMu2L z?$0rJ=4DfNFMZFFY%Sws`(Z*5ssPbCN2N*;s2dPX*pa9ZHXwnqu^3Q^O}v!nXz5}r zBWiY81(DnNz&5?D`R~3WqekU>(fMNn7${27;UrFC$Pd}K#$`ERVNEtwqJCX=hF^xv%6g4Z#!G> zhUJE8cbcM$vk8?;NFtCbu(vlMi299gk@rrMK-&s7uEj&i-jZe!?HnBP>gC;PRD7MJIJ~fcCa?%$v)QDdqy(l z(^N^`qmEW3*_EU~z>&#ah}-qx`{3lB$j8aSGfb@u5>`cPmU2k55=F@KzV_JI;4HzZ znIe{!&#h$(AQEc|q!O!hZaMe2IC&)z(o+dRH08-c5lVsu&nMO6Z}VQ*Zlb0-L}rsi ztJ=nGAQn4|F2I6Vfo<+Ruq30rwDm0#EbTo^&J|KbvD0I4Y}XbSZCiN0BqcOXkr$SD zh^R)6N^-$uP;3EfT&WiXHpb@-QRc}l8oEZ(t;kgQQxhQq#acGA0;1a+bABy{G_;89 znSW^!3jYArLLTSHztwVYZ~(E}j3m;_!92e$6;evU1i?WdmHKv#d~5~(0P+}9qW%+w zS1K=|3jzhj&AyhoA962Y$+9Y?s70w}jz67_5TaR`TehadPjnmY$scWo7a(wCj1-YV zE4tmacu=4=%jBg2?e zWowhc_>J{fIcZTwqkq7pm~H<6c${E<6X(>l9|?sGF+m~BYW`-&lEN^jZ~j@C7`GtVHBgDH~D1W$FEt$DcH(HS4kK`p|K z^$x=f)O|l7%V=`yETSmsTB=g)l;lFE{-Pi{+esE?aHG^MbH+<37jCgCT2dwe@+D822wsbGUoQt9*YKjeYxvBCH_%uulxJi6U8Dia9E5whW++Brs4x)HZHL5j|#OEp05+EtbKS zC#Iogfut^_Z=p20l_0BMxEyjv0~w5@#$*hvDwh>%2yw#KLgGlBq|(qv0K9;Mac!;+ z=EM*I@(M6oS5Rul# zNtj(F48>MEg4=lm1y7l>)kRJJ05t&li=)c|GE_IHlN^f7Li%rV6#b6&xnr$4omEk! zSkNO`ZUEGv>_ztX-+K?s8S2>Nlc*}RC=6qSlY8x=*Ym%p`{HdrV=SVnzH3#_W76sP zfLOCJEOe238-RAW#Z_XsHkPj znXJ!pFKep!#b#wpwDD=ur(0>_+nj3TXT6cPw*X@=nn`z1Q(|`a!VLjZ_ZKv+6&#Yi z93_>cQ5v$eL~2z4Ux0mId?_ITd$1vl#xE>k?;8?!vtN^bZTeycTRJ5r3W#Jb=*zA& z<4YaM=YBT7-q@cYr$*B=YIY$}S~0DN7qGUXNc{b+Y;Rg*0=ZX+c^)Ye#L=u_rIE@h z1>7JhsQPX;1l!N&gfukuk%+``)lxI4VRbslv9SaYefjV(iIAD20v1rxEP7o=mEOea zQhh^?NdEv_J1j6sJf>NZ0JsVo#4fG|_O~AV;KwB#s`)4=W2ukjSkqQ6m5d}sNsL@+ zRb8$uMgHHODsudbFv+KBqM)aic_tHo%Nh0=Dh8mz)d?1Bt+i@pD{w&u*r>2? z_EH8D`F&A>I8u4()hbzroewc!KI|-BsMk`dzsk zZZ_lrjHXr7Jz0~^T`0eZ%J9Up$|?mxb`5uOr$|v_U=w?_&w-1`vr1K1^0mvBmZfQ= zYItemEH);^F441TzM=q72Ed!&5Yj@h5OA&MsiS&iSQx99B+?_@wimiws4Of^jqmms z#eDMjA)Z?4WR(@njTw*X{6nWfQU>2uh&*|<@W9QWrH@p!^^WNwfYjD1*I5mVys7Cs732$Th-MQ~nfsE7YN~3c zt1=Me9@B1kJc8R1x8Bypg*9enNm7+rZEwpNBqDg)@7zMS+!1>yYu$A5xg!wjYNAJB z9Ufsc^2(}$IShTp)JSC)x^iw6x3b(DTMaY3G>iWLF(oXC-bj`q+>i^}_HRa!ehu%i zC!9dE5daDYRXQ_#sFj{JtgG4V<@J5o#c(`JKoBrQpwlle}N#wP(g0J{SRZ`I% z58hE37Tg_7HY66`ZNLK9X({tR;nLC485*&qSMSvo5(T&=x3Sl_I)N)Ck5)li4NmWnr2X3_yHb!;{qTI)+%F@#AcDx*E=%$7L6indWrQof6r0}`Rn z)IdAh-2VWSUwaHu*ZeA>&OTnEmZBe*rj6Vru$CJWxhrb`&9?iIjXKxV48o$0Y`-vv zC#UUGwPMPK29OmcQYCKgpr-nY^QZ+D7=C){3d%DY(4_CKMJpbz>!%FSh`*Vw*8> zon)1HPFp;RX(pzsY3gWY22=_JPPS2X)W898d)$%%!1lSV!dQ)#HeZLeG%^_KtLkZK z9%3esQtAQiYXap@8z38Vd`qk7zRq6s`Bq^ZU;IekU15kjfNTYgkB>Wjv7)7(rkgBB zdi=jIh7RmUxlOFS)s4ey(!1;fdXDxUF_@RC>tn9XY1+RjaZ6-9u*X9JHC!^@Ho4hu zew)~15~hG4x9q8VmgeL_uIRA}Jb65E@3#l-zXPggtqq?9r&QtO(Yj-k7(OAXmsh;d_bqSiaw zz~TmN7HyiYRWw;V_4!nef#=Jut3l5_jQ{Za2%IUIf z%5|pBvvy zKI#p<$+gBA$g&K>C^5yI&rB-Oo=(j~0$7=ims3Vb4(I3ZS^s@JB_e0 zklM8Rq-)R^1Mau-%^V$=f(z|Xq;G2tYh0{kX>(Mnky|tNR8vb-uN$-oUC$74KhlScGNu2+m1Wf0>MZvV4M%z4%Nl-;oG*ll-Rgp4ehH@ZMU}E z``ZZ`nAFjHVnu*m+?pyIhsHXP-wvfAk z3Dw5;+~K&X?*=C-b%N+p&FTt6U;h9Ok}ZEW!xD_bmNWvM zn#dw~TAakNAg~?4t#EEi*@0%i)J4l+OEyABwh!;1u!^RlZHeK07CK9d$1rW%< z1>FtRTGq9g^Y3fnp(a>cF{*J<9Kec!32p+wtnXh`2W!VXU66DIuDwimnIj zvxz44Eu9;EM&NCG6TrUQj7XAHrwcVbG{!k3kxfLbO`F;H-}*>h!L{x&rs&#SzP_;M z9YWL74^=e=bv}rVJQHXY5T%q75CXwQz=8=D@NJD>#eCN@ z&3-5Kt7h*dW^Xr9*3vYRNo^)Mj7X>1RbxT6zzw|P8Pq*0w0)_vy6T+DqGPS8-iRx* zkPmu3+r8o@`dH~F+ZI#|b2L9JJii@fGo;WLH zN|-64HFMK5Duz(Xs2p5+OS0@p76kE+JBj2a5RGgcJ@4(0SN{NqUV)3JvMS!D z&uI*`nVcvhhqT1UMW`O`qA%-hEv^badD`TQ059Yyy|B|7s;TCur>Tu4NfWpYI?HH)v&Udm zhbpWCi`aiFTMJ~yc0y_dt&G)I#|Ob$wcwy%@oxOP|>T&8>AhZA#wmCQMs@i?SE_$Xud`|X)1*!OGRSP z(<|v>JuDHNf-F>xcD?Pzjvb)+lbF)BV#?L8N2XSe4#E}=+la$9fnYY<^7qHM{{XD4 zyHERq*X5hUx?fQO_P)asq?nR!p@=*0h&1C%*eZz#xn&@2_a1O^$f1IkyACck#=Kxk z-V>N88k>tKD}A;X#&s_?_q6)@t@6G>b|Q1!5Cv9RO1E|tey>7 zZ7GsT7A2NOD-bQL4MOfXu+(e;2Vik$+xp{JC0QiU8bz?}uApuRxfUR9H}>|$9$y_< z%IM~&l#n8kRtTY2a#}(|F>72~`FOD;k+vVGsP4Q`Or|o|?!_4{Hmg(#<)s-lUhqy-MPDh2Oxw1NY)CeA*+q#Qd>f%prEi0ZMT7NR{q#>NQ4jEG00?^;ljpr`mMn%b^`wZd^qf} zl5|NOz(sJz$Ve+@*jxY&ybte+>cSvde}*h^NME@jo?!%iyKceB3hi@X7XD3$7&by; zC~E1VS~J;l%&8(%vqRfaeJ4zsfY^)JT-$$a6zxr!ACmQdoh`*Bcl3WgRqG zaG-#z$`HlhoIEj3%yfg@Vo77B$J2YF?`vYWE9k8D5p1@an<@&-Tr;vWID5zoEL$ly zHwNJEVliCEQ@~LvbJI*~D9YAVLpqd6CP`TQZUMdymocNFgytEB zcSk^Irqil=uEIw4u#N6@gML9~zSqJ!ij%3JmRfAaX9?(NXx;%30=sl>EPC6jVgO3GDa1(Xd+6oF#b1Y#H}LPl3bo{GArjexG2 z2_t0gzSa!3B!H~`qDP(g9Ad9Dq|8>DF_mTWRW&2WP)=o06vBCd1WD@yN}VKV4RN*2 zfyR0cqpGE@sa)c!mobUt(-me~vDhx4--@XtI+at(0sO?+X|{@|IgWx1x~nm$Z#U0s)7udS4n4SH7wtT3jQLh zvYli$n;UwC&crU0D4IGcB5LZ0s(TT}UEoQ~WloVMnJxvBehIy{Cx`>$MGkG&9X*wF zj$;OINn10^Q!PC^POA)R+T6yX>Z4A?*qd)*jZ$X@oy*k4QxSz=8=E!w=JWe9Ijq`AiiVO4b&jGC;CN8rU~*Dyn)3 zZ{{v_0xsL)`z*}9N|u5-DQ8+1s85xnq{`!}kl+6RjOIiP90xwF*j(FeM68=FsaWdz zY-V$%O*rpU<_H9HlwhN=A}J+QSl;BfBH#dL3O)%rr35*2lNQP-sbN^iPQgL*F5u`_ zZtrp>WDj-s$o@nl4~c1kJg^BFS?so_|%-{Em2)aD5OqY^SS;$2UqM$A{zTERdV zinMicWg&&?0A{e&5DTQ6A05Jfn@9x$f}Osx^6>n>54JC6d+ODp)8X5jhzKvuJs%ob6yRELikZ-di4ZoZ1fsUh9)LHITPMNJt zbJ1j!@g+P|wP#!rNJ|!&2*JBZTf=zp1+X!X?yL(4Su>edNmy$2qKN|8Stpf4hC7Ru zENlqd?0tZ~B#G9lmNtmS+8Q}~EP$#wwX832;=u1?a1J7hYKSS4HH&ElltL90uot)_ zZf$M{jxhXDJav+ZChgO@g<_-|n}c>AQMj-Hk0R#QBOBFdg)TYfsgP7qs?=&*2v*8M z-ujr_+=ITKJK*EDZ2ZX89H6gmISV2NHWwt22?TNX@q|0iQQVlrGQ!%!1)N0DBH6x` z-uj6pfj-2HB`C8QCt?JF$8LB+yG1HQ?AKMb2@N*-2^-mg_EahM<;+h9bjl_B{RK z{M{5XM+Fr&Sdd2xt?DZ;IyRxDY%D_!oHdBJ+#D%gCDK6#WOE!)B8{vWh02Qs1St%~ zeZKgaEkZNTJ!LX9wi;8jp{}aN>PaT|zQCQv+hQfaM5huksVeCZ&cY~6<(NFI!bCy^ z>8#9P~mOAKLTYB*{pl(=O9?n@J=4-Y>=-{ z44P>&`gCQ4IEqlEqqw-Xo?G1CbG|XZ;uorB=--AN1Cr%V(NtGe{{X}_U=j<6WLAtH zHVnXz`~%w?Q%yBXG?L9CsM8t%A|#f%1DmK|E?C?PS%&8vJN#AG%_m><h?ThjFu*@bOC$_k3>!BXq*B1c%yTNx72=H+G(Zp~^?g1G)@4)fPqDKJWu=Cqp()-w?TY3Gzyk{}w0%sx$=l_GA$6>VIU%ZLo@1!ORJx9Iks)hrMXoMD z0esk`#L}#jEJ@vkgzROJ9fqX<1$*2BuG+TxtUTHx$6H$!Lb8fEs$fwn&2ZyI$n^`B z3R?S}g~gXv4mc%)w&P!J3xdcU*&BVv_fy5r+Yx=Oh~s3TOQ&h7`>h;QQq-!UjR*@8 zs*ryWfW(UrsNdCc3W2n!sMRW!5WG=@RE-dlf;$#PxVhfz!SUx5l_FLFJ8f8uh5(3w zD=}VKSx%sCKmh4F4+nf$(8lvj-}0>*x`Jd>KwMhNt)LwiwTSjxj&@riSx*^h!>wIa zRLolIDv5RlM!@V1&HnuDYhjt7`A2T^O%AO}#A$HBPQz0hTKj>>w;susti=Rt9A+tI z3eqdGBT1#1K+sR9U)!C@;9fV)%}k9`O!XfxqUL!cw&dF5OAk+h>ea>X#w3tVOF)zh zREC+BTA6$GbKMF{e;f9Oof);V0gxJI*^5vQPb^>bzLK(l84{MFgeuB?$q{Yc3`1LCi@Td!puUg-xRGC z4K$F@Qb=l2F5M(3qV~3;2~tM~eaRdF&zUTVt~n}$K;e$4-|7klo6@%yJM1oZ_r0SM z(7NiBA&dhWDb~)m02U;AdG;rcP9xJj9JI3>zIddFO2T)E#HrmLq>ReD7W$go9md?- zav(sJ&l9N1U3F_mC(TTb)cT2Pgp|!2x!%`SvVneB9riwOQ05bSqA{1h9Ficpmg-)_ z?&^dFBWsIT0zt!5O;-&<$J{0;(@;l7GB8(Rxhd%z9l#ghovuYdmb!)3Ibnuls>8TS zCXhkYmjRT9Cib_r#wHXB&vj>4u1q9~n=YyOsjV$J))i#Ej$13O za#<-BO$!q^p@eEe%5;?+4JA(3UrqNL;%!RR%QDr+B_uj313a=yU~)~s^n?lx><#a5 zP4OEp>KwL8YFS~VsHazoHTj6?1o8I8_7YoBU_{|rlF!%3mZ%ky$@>;EvIlfw$}GJ2oRV#S*nhn%Bt!O zamnGVuS!;e48l4(Wi-&6+!iXW$s}AIfKmb95-IYyC}$b2U6*z<8RYJt`CzjE525>h ztx0=*HX&>d;};oqOIFA}Lo>`PW0|}1J3CB?sC@tsmQ!udAh17dO8Hr*K#K6v$?8%g zoRAHG4Rr?IcH3fYn_tyOMqL6_wel`v657+GlQ zRyfc>X3!3#Zs0Bnw00hw+>MR=l(A)*bjK~pj+vMU>8a6aV|FA2GBG6Iwx-&T0>B&M z1fBZKh1F!KgE6dkr;%WqKlvz(K?6BrpfF-c342@}w_HC&dZ<~BU0qKUa@PFzrdvfN zN*P$N4e2s4<6~fV00VvoAx}ywpgO7bRl7#_f}z*FCVY8dQ=w{JQwPFVm zz}iSWW6U`n?P2qTr- zdvAx|t6QrpFuyqE2NT0P@?{jM<*4zepZ!PboCj0^%6@Ag#@wcP$aqfyMSp>2^wxf_`djD zlUa}WdODaZlB-Y4O%R8%*|Iq#m$S%DrScUm!QXr`w3Ee5(Np>ZG7^Cy0#GanDWrqx zx!d2L7~4KaTCEJw(n%_b8Rv?4`-v62W0k*31?YMK;wr+MX+t1y(t02i}ypbf2io9--j#>0}t z-AJCLsH16U))Z*eEUhG(8X`^2m8@75u;c1G9x*9uW15_#O09GfUrR(iKpiX?09agH zT!DYn6*TWw<~ZuB{Ou^p#;^ zNg!{3r@%I|KVezQ}aF3r@0$F{NH1+Vr_Hk+Y)0%lAQMIC6GBFl_t$@bzJHu z8*PXz??xbwNQ4O}(IM<=B!EEF2{snk5J}(K*pRggbSg_}a_o$<$_=??P%H+( z6MOC~EHINoCt@{9@kt?8v#VVs7QXs#ZMV0ZapMP|#R8=|Yo`Dxf;L$1#m=+2QDWSS zgKh>INhNfgnEqm**mhY$fqzw%Nj!V+eecF3uvFHv8IsDnW$gDf>DUHv6^9^;6VDvt zBqCE^E-II~P~jn4>yeToPNTB5p5<@nU0{+GSku1>&Q z0nM%iV3jF_ArT#yT^vNGp+Jzyy~fN~5JBd`#B6WKz*=c2fq1(!#;O_;A#w{6NpM40 zwTL@_1-##6Elf2~QZh9NJ*F$$gtL*hkV!XI79{vAZLq>#3b}`OTv5*Q2awY!((J8e z3;^{Tt>|L~LY2No%XW^9y2ab6Qf;NQLAL4;*4j zIeW0T{{RT?R{lTN5$dCYXm2EQ#4o!b4x{r^{-EIgaw#520%ig>clr_3`6sw1MR ztA+@k1qjdDiP^U&(!Y$iBIfq6H^*XVX?o`4Y#%u^ku1P9+Xnk%}&Ico4oOXW%RQG3tLbC0Nami zlM%A?%w=h7Wu+imMurKab|&N2SJS8N!MF45V4liMmRSW$W)Zzusjv>p7FH(uSAyIN zF+7WaaH<6w6jawm1s;cxD5&t;Sobc)&XzVT4~{V!N_tP?Nm|sX^$da_%~Au1%h(}O z)+L37__-Wdj7WN_H;Nj{sMcW^)@6=%Rg5LHs}t&Q2)>dEf<^cv3zBJ*m;)*arPEYH zGW^5?(-`HVb=Lu>o$RU%@98>jeZ* zs#6Z?NUT@0BOO;aU_lCX4YoUuZ);k7@WBl5%}F%s?waOx^@P+mHv3%e+!MXY!MYTR ze$;F85~H)|SJ1`L5!~)snCwQ72IO!Jx5Fs(&a=T=sr4p;71u#iaKsIcr8-9>UwlM& zjzvd7RW!8D!tE@IV`9Hen`UCR-p7u1-TPC+*^6-!!~|_5NI|`rKArYE?Q%u7I6wqS zKAWxisJl*AzYCb0DgI^K{jt8wQ8emyvklHUtvXXvbqt-SiKL!1ly+hfp*%LqY`;za z09Zs7EtK6jGtPKo( z@iR-8(LiIni4yvWRVqC?nAnQ~KtF4dYRGD$rLCc;rKDw{%;YasO)5u7@V{&nVv=bi zS8a(PYusE7?WM-XA#Jvez}r>ru^{n#VZWX3-dbx&+Co!3WL>pi zNf#p8f~fZ3Df?e>mCy25Fs=Tw)o{f9wG9Ymm0H^yi-inVgQOiNd*Kz8O;1oBjMJko znER5(6S~CM0U`o*>@1s&x4FbLT2!g|iD0Ci08un?IY8lg8WaKrfN#rV!8n-{OP9f- zXl3qAE3%4ygF@jk=XxFx*WAp$C zyBqz9JHx8X#WftUQ>|WM3#_t4%MvX_&8Uz-C0AOqg%=xzQhv-CK~GIchJv<=ktxtr zNvfupu@6w7X|Y|1TQg~~B$Ivd3pMF_8oZd~6|xwpQDXick!u~5fD;>*+3c=G?oOd` zatM6WO^v>sSW@QA6dk8| zGg86N%d^VrBDhg`SP*Vhog~~INxj2)c6Uusg@lySMFgOkk|r^R-)3-1gRmA~dz)cY zxm7NR#T!7B?I|(Fu#n&e3_@4{1@C*@ow@T8$=w>dDKb}5%SB6Ahd-&7Qbd#tT6ScW{pkmEx6vo*098M>B>c%tP+$~KZzhR zKCq`|1-AzG2Z6}ri0Ls3LBeHE%sPs`NN1R=Y?{(Xwc`TNY9P;1ETz zTbk{Zfd_SU8qsG`MVL_MS$$M&p`)4^mOvC-g(0;L2?QM>ZfpU>T%w)&gFDXhYDtoB zk!24gS|yUEGIZ*0)w_0Ui*hZ!u|nM=MPE%dILYaMg$RSKB?OI4NYbvsr-~&XGq6xr zR&S(|H@+FG=vi|?2$L_M%q5_lOO*&>YCn~Ii?e*WMSVmPLmO!tc_f$+_VS<4&Wd6W zI9egus9E9yqB>b-c$DhWz{KQwPx2o_4X!LX-+965!qY`jPk13fV=}Wd9l`bh@4olO zY8<<(K2Cu%D*UG{DyBJKETo%4FQ{rnkhc3HX&W2g>}AvB*@Y^!nPyqL~3O2F3(qm;A6B4diWz1wVP^`Vw5#BJtNhE`Hw%~$))bWT_H1xEQ zM7c_3R4rFaEV8_`OzYa^#?F8@q=Lrx@NbAzR2@PjjyjpLdim;}!4jfcUf3#CfVwe} zh0ywl2IpV^#!Dv1dd+eOVaRjbhb7A@;(clIZ(pnyF|ZQIs_3q&*INzt9{3Ag$RH8S zt)6W46p=+FG~YEdNgQ!SEnMh{U_yn_9ECR9)B@X<1m6=3lSCEi5VpBpnWc6|l%MEh zzMJ^HzT0A+4xi8CrZqG<#!T?Ez0=*wWrIW{X$p!ZTbq9|_TU4BzC+aP1hkz=46{b| zg^d{yGgyyYH*V_g8&0&j01{N;1|DPTp05=CYnjJSMrO_9rkS;yB~=H_MH#;ejErsm zdw)H>urS>%27gC1QnhV4OR#E5VND@O*nkjka1O@GHURh-U^oquCRZw@r;ZC&W)sht z(1bC@)YQT$jr9Kj@jZ57Vr=Zh+S`kO&Io2bKx$6gZV2xq)k}d%ukErZ%R+*Jc$qfV*5tfNm6$o7zmEEjK z0SPzy&l`|$jHb$^(56#TJxe6iwRL^kWY?l{+7KJFGWry(glP=KbH&FNkV^=riD(`N zRBdl8aQ20bh$TTMRnEhG#`eV<)KD;3Cs1G(?ebs2tg@E_d43-sctsil5&v5<%D*g-iY%PgNsFq#f)flj**& zZMfR!6AblI!w?j(iN2E>RTXgHALg+^axe7~LxQ*9LyDKtEK#wRjR9y1Nu`&P!QM8t zk2-7tB>2I#WREJyv}|WqF~uZou*O)qA+Ar3H@^nN4Z=Ps!j}zf@d%!_o(*ADmY$v6 zmwN%K)@K*rmHm7&sv&VDLxw%aKn%+WjmFou&u{4@G1!ZFD9h_jL^9M;`smq8=%-ef zSZ&B-ViW`CeOp-Xd`X6B<`Mj|!3>hR+gVekNCN&FNw5avSEN{b$6}u06=2~VgtwN`dgRZ9|h z(ij22HYW?sKP1omJp)K|&0P&^!UQrYkyS~#))X-p0PV0JR@)PVtvys1W~fORx$S9L z0|I>|^&o8^hPAjR`!FP8K&VO97p16|u#Q=2o~5d3^szci1FURzu{XFI5Kb%_Jr#%e zeMp=@1hKqGAt>6(Yo_N_$n^_fe@GUvmy(G|4N{~vERRgJF&^lWqB&Nbb(Om4Z(E-P z*jU=*fhn2RNS10emNjuRvqs<}X;4TBaD)&DI!OEMP8BU$O0_RrPQBuazcTT5#6S{D zYETXLux1v%-a*2tW_p^GQ22!x-S%5}Y)o=?20f7w5rsSx(Tq#Zy6GcS?6w^~Y z6rG1VoA2L-V{f%LHDYgK)7p~QBQ~{5h*hJizBNj15}Q(6VkY(|wYRn+)JW}WDO#$O zj^FG37w+SD?(uxC>pW#rWP>_%=PHT0r4$L85oO4QcjO*NO6zsUxz%Lqh0w_Q%o=HO z%HMF0#QmTToP4`FvT?NbZ+-P0$LD|(&qv;oJv5bAR{(flyKmn&H!|+TkH8q@|Efkw zoABWJTm(7k!l^bE-XW<4AvRkizK^z2bQB3NWt}KJ9m7*_qC;20Xj4)E0&eK(ICDK)P^SRA)TjOFfzH#;j=7jhOP_pjU9i+cU<)*VN4ffH%9t z_UYDPgBl<}{dehSvy^*JSb{5+3e?DR^=v45w)up)szB}I?N9f>EgNz7lN2+mw5l0D-aJE1lm5SZ6X5>yj?b-A0I!SB<*c8{-v7=LI#c!|Dq|W=T z^+Lb49RpOi%)c)`MJa12b+CNs)VI&p;|pfdD36rvHKO|}9@Y>V1mWNcIao$>xUV12 z+8Ea{N2>}wFfKQwpf~@e3iuWTW>XyBPxsGLst~8yV(z1L1z_rUbv;8PB>{JU38^jC z4u&VTw6^nNIfiohMy235H7m11fMc%3IN9^~dRecPb#mw4^Q$7;T!aXKjycj-knBIX zXdvAdb7^Td*O)ziX$eGIFC+@r$ZX6K?O8^r+^c3tUid@ZVq0WuZ~JoH9@XuvyBk$d zTA36Y53Ym{Ra0)N^LhSoF`*BzX0FJ<@guqCMIn5$S6Zv8+)N_YEa|Yp?x>XhuH=2=i zK#mghyWX{goOdeuG231Ngf7}8$pJL0(>)x^o(=Y!t6r_GFYO_vgG{xQvMk0OH4K9B zBp#~w$`lY;ZC!0IXe>dED~}u7(;_C=Ec~(z5s?(o?n>ho&9<Z@Qnd+t7$+J@fqD)PqYSWl4sT-A-MClmYn}5*-6o#$#KiNvKk5GBX2PWF zU0eqoUaUpFRz|10tKA^y!T!`wf)3zyX4gQlkLLkpWXxQN^(xe zS}%rUwhjAj=MR0@v7HYgeXSp56h9PhLc(ZeYxM9tIy&~RJKx_v5QRk@QL_fp!YTLX zXD3HLyN`E`kZymUhXv3h)gtaAMwV9(4_WmrebVy5Ne}tXw%V(zYr7 z*g76xm3&EtQr|m1TG3XJ)l{;rhX1$h<`AWJM_?h6wqH*u81c_0IBcaA0*R@tNt7f5 zkE$qeZJNu_kS%g^(hnbYx0%1#vf$0y%fRO@3mU}OYaqCOqG(qcF12~DyKtoKF#*Gg z^^Y-7@nCNc+~Kl^$q(KfDn#lQP1C&OI4R8#**%OA=kh;nL0rZC6KJ`3qt*sbuBc^aOCjntpHc4DI zv?*Pwq+f^1!ZQEzp|RR0Mw=++7D#bZSLr25@^p`gXP8ImCz*xw_6~?$GpALI2>qAp zgLBs>0D&?AikXpi_LYalT{=20;tMcC^!iRB#Vyj1WT|#l*?lFj%z6J*=BK@9skSLU zi2MGWopDc&LM;lyVt3bhx~|x?HpBghVT3AEPeo9uIXk4V)Jn(P%3xAWGnLk6A0Ss7 zuiiC1{*WEzN5Hp;((W&jZFZtm0tKA%u_t9^F1DeJo3o_w9q~4JCzGtk-07&UDDsoi z5xFsLLr?dOeN8xceZy;oy|A#nwjn*THg8eJMwal(79cYfn>5(n^>6iE^H00?BDQwR z+SqZK404OA1QL5iKM%kyGCB~&kiaqIYC_73Z%QM^&><6ski;p*~KFWN7DTcL91 zCkx--SJZ*#(DJSIqGIZM4fISdvFu_8A5{O$a7C%sRlH0OsAFQ6$>3|rJ^SKg=g)SWAtCDK?XuvIv7-QBxim#o4 zfSPsaXk1z@31s}qzeKj!>uV0gm8P`Mb;~=cu}=Ankmz<~;B90o@X?UiaK@b{kSr+K z;QMkdr%^>I}ee)@$IP`m&DNs zs!G5xTtq1UOPsl%W-!=`qG#xeirK3z08@}FH6X1uVKv{(Mb;EZ)`X9H;2D@TkEu*i zjQuJ_S~DK+zT%+=%n?6Ye$!1YIlceNsosDj=Kz=}gyG+@(kJoKVHgONle3c$h;nm1 zxxd|ssu@`ONQ5@WC!kZvgQz&kAFGX7!&J02SBzD7L8;lpX7~25yB1y~C8`icH9VZ$ zj(C?oMI=5ZNqz@74w=dX0HMX-EJY^7=e2(tK&1V!fyYtX!K&MFzedgQk_6PIy%zO* zx19Ao^R}?djSSDaGJorbwshsig$&(Sq<;{-8!r{fmrO23BPitF*64EZcK`Y3vUN3{ z56grea$Ec>Nlt9`HR}eDLR9G?3^>Zs-)9Nw$t~GHdGVm}JG+XptS8>V>RNQ$o}>A# z5|1cKrHU!QrPZaCwYg)ae7>H8)2FP{oLgWV2QO2Yf}ZX-wg~DOOi+ZK@(aP6=BBCh z&EN2@1TC+jlG>bKFTOurarTKR0aiEF1*lY7`_Txb0Rb9T&*WqW8>V4z&tJ^$WitTl zWR_3ZIJ^uF-*aC`T6cfF;^<~8pS7N$3D~>CWx$7{b1{0`8M>@)`l@0^q z&J>LdQ7L5ygA}zVe@3J}>5A6=B&A5bf%IKX#M!&zrvLV@Nm;`o2}V&354Cuk8@T|% zfT8WA!wr@$Bkf5$Rs+F8Jjj-xk zW8sJl=CDWIdvAf%zNL048p4>wkQ+&>{`UoB@A-lXhdx7i`3&kK&@m#jjqAqXb!cQs z=hvG-BVKDx&-&rp9;as-bM(04Gz%~r?%}Ex%?eSKI;?F}2Ym+CE11KaqGod@t&t^8tzp+oPa=qj4GVk9 zLh2;dUJl31r|_g>7S~9xr~+UlSb*}@$zBLT%=JPN_BXlSh*u?0Mk$(krWBWx1rsjsO|K9rR54}fBkg%D#TV*NlT z?OwSc0?YZC)_S+rsKNkJYFCT9huCn4s;>{8CbKW=kF$s`yVa1$a5C>}#57|H0s`h< z=buBf?#%WZ|Ch$4x>MJBxC5sOUNKVQzTgTw2KHj`HKRoq4o!=`PLAKC^#c8yYrc(jH zOpIHCRZ|Ff=yzM$PFK2biV5h#5{PX#)%H?IwPG|XNV})M6%zY^`F?8WeR)y1+0V0p zh?l9$x?Z-uWV|Sf5mmQii^)%KUaBzb{fG>Mwuro%%z#!=y@wX9W|S##@Rqj*16x>Z z7NbQ`RB`&VJ@VlYkC1KN_@|qfTm@Q7Qx-q`G~(-PGTlxj(jITw?y;_v+dPpL3tH*U zYhR9>F}K)H$to5Hl{Nw)XE`@JGq4zV&opOK5+r2Bo`*mr^s@nf8jeO!z zQQ^Q_GAA8P#)7y|ATjDw{|wT|w&^U0D7kdu4=S56b)ZCl{B*mF=iY*Of$lqxw>a0n zLF_^7++}n3JUp@(J++&W2_pC6jnW=+&>d;r6kZJ}FIvx0MbQQnc=y?|ef{bZWZviY zhc8lfC2>8&KPjH-_fKha=fBI1rB#)DpJS+y6;9C5wcM zp@#;Rma-ITPYR(-0RND$f7C7-lf3k?WLE8~F8n%=plLNPO~nHUGB!X=E!PWRYdnB9 zo>V1Zh?v2>nhLWEbTlraBD+TR{z;=XRK)9<%UIh!_j~+X$wU&_i6MUL?el&#IfXcN zZ)i@*G8hdQaf|?a=hCdY^(aC0DE|~}e)t>sxljk<=}V~b1_+Fp1oA|^;H_tr*=^K z!@bMoP!4V+A8XT%O&|-&*cfH))3(U z`$g%FM0Mk|Zb3A8u$r2BYf6=2{;p5$n$z}Z?=vvTH%fK%O86S zkJuYU@V*|ZOR*GPsY*;i)W1EeEK(et8=c`W2%O#8JK)nD@d#Wy@8IeKUvXmako~e5 z{I)@#__p+S@<=F+rYVYxW#A0a8aJ#`zT{v^9%{tt$L+T1M3R+UOegJHKG96kJ9s9g znyua_R-uV*+ztKSKG%5bqlE-!Q)IBJ zpZLPx?-xqiFw($L$RCAzPK4z2#~>Q9gM9%+Q>HeaFq}Q9A?mbT;0`9MZBF_8kj%W5 z+GgY1qc|LCMWgs*GvqsN9$l2viKOoLQb>ea3<49oov|O|%L@=4-UUbg}?L$;(tFvL9f0kKX1O1T?=+knS z0HQ1FHv8hLqGCJ3TRO8I1u-r&o~tuu0e$nkSihB=O)>LSa6J^4FDS+cm9Ju~9Q+6* zIN4a&ji;t{ErOKjMB~zJb;B+~ydIqw0I)JGL^6O}4KTL`L9ln&o82nB#H?!C@?- zfGP%O6J~u5yZTpHAOBKl8HzlRi(oX^(ucF19>Xtx`XAs2k9%5&ri*QADL+dUzK8nu z)m58uV=+%ccOc-hRw%h1{MX#h-{%867-iBQ#8xO%DJ@Obm9UR|>hz4ZCcU4QxUHwn zo|?DRVi%T6%_&Onlk2>>6CW0rsxGR{HuYa&9XwFtq{w*`V}WOatOfM z6HWQUJ6zN@pbo7h!>sGHqKne(Zb~?k(R&bEJ~6r8-PzZODr9EHxD#_Wv#AME81keB zuZ0uurl?EeXnKDIG~Jp))bJK9(!oHD%t5=EG!PzZ8j$@4lPw6F0Dr@5M`TR_osW#X z`@1KyQt#A{mnAY}Wwl0gAz5nkItZ^LL1*t8+Plp8M;=&Iv&R$9<)>9|Lchd#W`~*c z4US<97?ReaS6^9+$GV=qQ@6EO;TdByt}fsQ8=`cpmW%M!!|wl@ZjIu&Zsy5p?vHx) zsCF9CgM38;hMII(cB2Zht0XoX;Ehgd{Gir*IqazNI?}vY207J2R-81$S^HJYNb?rc zh*sd_)bdnXvYB<;om-aNfeBg9*lU96H`|Q};kv3JPsQNW^QxXdqy?7D84M(SrKoo& z3a>V@Qh$47`-`LeYA5lt-)xlnCo-S-CX4Y5_lP=nu=8~C>rd|3eculSsRYnJl*XXJ zk*V9|@6av3gPfUkH>L&Q7x8N2rTx@!Xa6C{;rXJqd}~tNla(*^S_+GyE1VQ2eZq_D z=?VwVy>P8r7RM?^W=E_Pm8WqL<;b9=2h8}NCu@P^b1NR`>ppaCT{XJ=^J(-?yP0)A z{n%;8we?|kJh(rrWvsJ{yBtWkSYv<6Jh^LwnlR0{N?WyJL!v53EM(L zxs@NY%kR(250QSB$UiTzn+AJ+PC34N;~kL3+l^kjpa9~fqXtCawYSNsv1`zXCW;`b<*n8C4&ND?V; z?!Yec?+x3pt-#6n{UgyhKl8K?jr$DgClO)sS<6ps1&&km&rIbJ&*MH7I8DB~`$w%G z!}|^QBgpV!0UDoPm`&c!{DYDH$#5@G(@nm6Zt(T)N_Y8MKy*cB-3cm;(ZKEyss+jWxkw|(EAzDQ(|L zY{BkODDA{C$CP&~Ylyfj3(7yV|Jcx!ZlZfOLth;W(EHhj2~z8hkD|((=z})Gp(R@A zhxG`U5@CXyDp09lr?~vM=PVSFa(k|9&5s*>Mon zaTynKl00}>h{RNn{Z8FiGJJ*)x zkJ2~`q?=s_;aWPiFa;wI2VwuCkCYm|3l@4w@l(FyR@67fsv_@2EtFy{tw6FM490F= zSs%gF_MAvJH(YPWWqqzK(g2`;E#r5>pi+Ml^P8~Z0wTrIV6*d72G9ES4=JbHVo3C+ zP(wtHn+(BF;#8XyDJf*+GU(v~pYd3-QT8BYpUC9}4H=5>FdLQ(Rd zI+RL|JZjp~rS#1fwVg|f{6w4g6RFAJ9WJo%BVTN?n+l(Lnbb@xeSwF=S3+Jv>@|c> zK#fAu5}YuvZOvR75zj!^%tsXszn(cPc7m=K7<}T)@$BLG)ki$WvLuiEj^~TSN@JND z#k;TYj^6!|4x_;>UpLFDimEY~4xZQb&6|0j$(3e(QaL1vO9EBZN>=Dik!Q<3Hn-`b@tEvL{Gz$Q=c7K(UcuGf%coL3^ytC6KiHQUEcvy6 z;%t-b3>Bk&PbRD861-@PY#_p8#x2>u3KAc99rp-qG4Ia&1)FZ+50c^%q;}9R>=4R#bEK8X+C+vv zmyB~y0-cMF=0W7~f(Rf(rZ(xAon*iz>&2&TwTtT@HhYZ4Az0#7u_ zUf}V6tE~f=CBL3x7sk83VdH_n2M2tXG8_EUcUXI`m|y_(nBqazty_XGQdBjAjV?F1HGZsOel$8m_A&F4 zQoR4%&7V*`raMHfxcM4Sc^OUq-ZPP+?vU`ghWpj0iH2?34`|%0^Lt>rzLOx?J;1v@ zn$p)svY>9X+!ZKwT4iUD@;^X~0J*PaZF%~DiOR!wPbc=mNb`AgrD&EB!18IAuzwT^{6Le(0ZS?kZ zjdZ=9uTS9)NQ78xDvdTk@+Z%5g3nKq2^1$@ablmtRaxkm!RZjA%4WxdW8K(S^8W*b zUy{g1dT#*W;&H9I02DaDb6)Gwm;vy;I;f5tY9bQn9N&+UVOxtQ^2WZqmePdf!4D$K?@v>Q2z z4+=}dYa*@iN7{9L*p&r9bfgRM1r_9Xytc--NWH68bAt01eialYk)jx})0Bbi3xvtb z7cau>>R}+^fP_1uGDuWV-N3_Gy1Sn^_9mwoW5ihtSV%Uk>(vz7^RuHQ<~^1}`SV#8 zMw8Ea0j`^d;S4?i)KP(*h)h)mX{1TtRskbJ1Kc(%NJ?nqxl{1`Z8 zU=XvDu+a_l%CzcUhtP(2fq_hV=is(Gp-~4cZ^Az|#$N(6P?@x{C)=S>=NH_`QPCW0) zi*_|rXNX5`X^fvdo4$tDX^s#@u+vY{sX#i}Q}vNCTXwKf6TDZbGktvz08H6z3Leh$ zJVCUjPQ#78RSY%aJe!oJ_)ve^1C<*;nq|uHP74ZQ-@Lr(ZhtlJ9A6VmR(LYVrnW=oE?q6xDy^=PSY|iF-T)?l~F?3HXax;y$0o1Ah zMB01X#X57=g%Wf_E_8g#4tI!f!T3=az==Pw8ynR9Y8HwlU}ZhikA<|4JLAdIWHoY) zKV`Q7q{>({=(dU95}xaoOz;~Xpx~NeIBV?`PtGj*?Nf`B*gKcQBj^i5M&B@~$(*u8 zBOIO4ZaoS6T;J-S>31c?q(E`fE8=x;wa8g0rJ7SEd~yB@z447`hie}UHNRQ)A9%}4 zLD{52(r#(#K61QSAf-G~nk|dkL3$XZN4E@Jcvq)zF1uKpKA%_q3^Zji& zAf0Shc>_wX$U^*f?=NuHEEc_+>R>b#G|$I-a@eQF`+)te-Hx<;g_K7iT$v{Zo>@Nf z7|&6vG)xhQ4cC_ljlJV~oxLbJ?)HZ_NK@hd+nZyV;F<|SSug|(*Yr1gN8dil_acBcOBPMX z($3Ov@pI^MFEjo`?1LUY z>%_t8kuu0yg0DcOOB|K=x7h99mqt*hzq-$)inFnlGtG|We{a9ZmqLeitvcyz<`y{^ z8&*F&1c-GZ>q<}N3wcV@;8g8qH%Gd3G@xzO7C`r4`Ot@B|G2iSY$I@Y1Vzn!SesZv zdgy))ds(ivdBu~J3RLV~;q$782j&Gkj|w^y8jfz69c~KRAJOqhcxMYB)sRz4GHJCj=XzR66KB#rt?C2E z-VN0AbfXqczkdX7l)rdsnCYq5p8$L&FC3lQF~b~{2=W*vL&(+OpO%qf$uf4B=iBW{ zA4}31)#iE#+XOMpSX$gVcb2h3dzs+UfW7BYQo=km=8TaU1-nO+8^3Nq}lp(~QmRsl^!!Pvt_1 zPas>2)B-%otW|B<5#Hi+Gpw}`#2%1Cy5Xx=)qh*QyQ!nu5(%PwehnsQIYdeF{$*E&>+0b4Lirr}%E-Dqv%ck12WedMD`q!_r6fg@f;CcnMr zh75YV^FP2p-n`4fiN7sFz!@vN?rcHWP-SV7*@RJ=;1+~n@h@s<>ZxgMdO6Suvm1@f ze^ETxNfH}WKUP7dz0I$gEba$c&B)+ztIAW!d=`bT)>{95xxJY9$A!r zA@HM7*T#`{Qm@*N=k%4Su&-w^PYggBP`^1N7mzTtGwS(O#!X>_6Ild2;zeG-d`FTU?;^Yi;AB*8gePo5zdP{?a!JX9JY;h z8R2TC>RK<|+wVSk-5tp|*+TM9cVz0_rCXay)i3XVf;Z8P)rb9mx;hZnQ?L@N8pH1d z*?AVTO!R4gNxq^zxpL#oqo7AJO@9?6GqC!#aOWwa$?vpA$%~_fYsg#>;}loQ^0%nQ z6bECS%9;=`zO$ifh)jI`ZQL{85B+zW@k} zoP%fUhf3Tl5Ej~!2$29(Om$y3bU(%HpJ-Dy$T&v>-&u6bPVPC`V7R^h8@h*5+o#*Tu^SK@T|AQ$ zR8Ly}l}H}*?6(o=*Py%S#DP4BJYjjmvO7{GL*lfKM5wJQy+en^cE5^ z#xoX)KtCoXs@~{rn4b({Pjn*k?4xS3Ee>CHVrN)#H&6~y;^6?9|Ejw0Vq#X(4GH+7 z|2Dp6vMd~7rTXBI)1=!;#$S&Atp$752bf#v?L?ediUf zD1R>}pAvX|J=%#hS}fh3oMOpW8l(GhP%Eh+)RLwaiCUa$EGHf+8{=;ffm4t}a z?8L;cZH8vG@wDfY^#Sv4rSdnKm&_()sJJBylpf$F;u{XDZr1S{DlD`cyx#_V1nPiB zcR1A!h--5Qf4GhC4c9+_5wGh?AIm`?K*DjM#F3AhRT+^~O`yEhSXAA#G!w{j0+eP8 z*QHZp5Ff?fnkG4jSyvldEO1Fre=mrLlMkbhjRPKo80lWu#Su&ru6ICo`F6R!5l#$B zOL{EH=@gO1kGnQ^f>&<3m?(Mx%qb7qNnsU__nl)rY)z<)f&u`_?w^Z z1XZx!_Hyj=gdDvg9<q;h8qhse7T7Q6-3!1bD*-NfQ7I!&(MFqd)Ia z;De|4P=qBK-zIlr>O9U)&#TUWi8e?_uv}CY9shfEgOtUy$?@ZHn=~GMhx1XF2SAB5 z9Y7A>FI(OGXP(z&!X{}gs^Rzv!M2!0lWadP2k;eb^Y+vFSNOtO+dqeBSrn~Ue1Iu; zBg6FhUlDnO;#43){?P(F9=s7w&~vIywAjt_tmN&W5G=ciyF5#M z^xno#B|q1WI`AutzKBOXY4aFt3KNmnM~>y-J6HHU!}jeKl3~l)5ZC5w=!<0`3uIBH zKpfp)_)ICrk{!_hrGD-qJL?#Iq`$L<jWJ%-4g*|%gdnK$EA$=mjF2~gZR#}0f0toGkhh+;9!~iR56|YLp7UHfhF;lDO0{u7VD_pJV&$& z(wF2A9_Po|%_Lo4*rYnVvo-7TYlr2@VEk^06_X9r_7nM)Kx8m!f_GQS-Kz9PZtImW zCkxN0)KdE>=JoB09nDBJQCg&T4@YY5M1f*MS;L241*V{If-oMa~JZ^CsTb+j8|PBUyUmfP{_Zj zud1Za(N;_qjbbq~1XK}pmoeQO=L>PSbmflqDuKG#c2m{lfa7<(NN=%Zd+SJm>-rY@ zHkD=d!KhWy#bLt>Pta#FVmcQv1+2(=$lXyDzfF|L+Je}c^-IYk?ZO28vR54NPFJ2D zarajCSaS0vg129v8L%1wXnDlyBTm_cA~`rkJIma3g>Stj+@($kYG!wkQGI6q085Bh z@E+n{**T5&?psat{B(UwP$e*|Q06T)Hhi3}d-6lqw-Ao;M#HjC3vM!ugeJv|0}e4C zlUo>HXwT-xuhs7gz{Ub84yj~}e*U~YD^ne%A{RbRY9f^)al^cabJTAci0t!2Wy=~3 zc{&=;Y&Z7cV=izafmv_y96Wxx27;9B;F3&zh52E+H8#?2qWkY}VFyca6f8ynJP?;p zuDQ{pp%u{EJ^a8kENtj5iak>H+58NB*yu!wla66y^*J|$gW*jrocu>{m9QnGLAH6|$j~y$#hO)zLJfN@(lCt z7JjN-( z8Qs>~4Ht%V^j@JDy4lcuJ4IPUCSEjqqEBGwwLl#9h-;^irzhopQKa;GIRw1tjl)Nj zU8`~SMC_QS7W+g>>VakVg86ib%<+iCuASJcX9#oY{7{@z)^Y zrhRzw%YszsTz=kOr@wbH&)Bky1xwrO;nJVw^UsXq4D4js^!Q3I@f9{Firw zXn*KQ1H@RC#_1;8CxOy^6mw{vAj-|X@>^(Hz3M-l!&DW?jl>+}*3-=yHr z4|(>f2#i&IBM|jD2;79i*x&M6XKl^v^qUQ<5VHmLYqF2pZ}ime{dz9Z7$|LKY^%aD z6{exn!*ZH>VzQ-} z{U?LV4tJa^-}C0?X_3g1LuWO4tyiB_GuJ0h!Xno<9{X9?aE*Gka>Yt@Ob8y4eQCsZsJE8yHc0m(Q}(myjzYff4z${9~hV9 zN4qgdZ*H!Np!{UYg18Ga64Y=69#}ga>K`R)M zLmyQC;t*oiB8zEAycG7+9t!1OsPQT=p_vFUo;RO3jTtY6!>c8#D-`KfFDCdhyb5nh z21Rb)>_F~!xE7Xo|%v|%OGaP z3L?Cm)BZh>OD}|Me73R~9Hq3g2`aU7zEpmWh}mW-SNjjNLWvQ^}KiWmAllZ#9plTat?@phCGnBHn%$lu=<|@Ly7dj&brH8w6eE7oPXPt_N~)J0 zk*-Xay^Ok_3%I&s?sL?oi|E+RaZAhzGwmLz24>xwIwz*e+9f z_a6mt_{sE$n`S%#uYV4V`wqP=&>^%Va#MfsM`IuFNwE7|kUiuX3pH=Uaa^gxjgHMD zUh2t>>(OBeRgoe+Ed>@+c$%}5G;6zCYZ{*li&nq7UD`U=y52MuWbe^uhdk`qfiL** zqKS>U`BloffB5iCk$t`vSrol4(S3?OjfR5j)3rBO<+XoBq3~szx9GdZE8{@9`d&2` z*Oq4Uw=%*lg($yzrb7yLKm{e^kx83H3a4he^G!FQ|LJafj$(oM6Npa4+k2j7e~0T5 zZn(b#Py9heT8CM=ZXgDhL-d; z5UQKirg=+!QKA-*17=3A891^IwcRR>AIhLuBtOMZ-%32-%XhS1Y*``p#OB^%KL&@S z+|~3>R0yL@tSM%#vSF;R13 z$x{M}h;BY8TR>oaAvEGz!8?@M+fhUqM2D4v^ioq6Y0+(0ecbZHuuv3Ow(-WXK#ecfQ+YXOT-j8) z#1gR^-nm$VxshWd)ukOqLGE3SL18UlLoBV;W{UU!IKKRLH%f)4^+85r{oB^s)kmox zn(R>mi}grWTZK3tP@+>R9?*{LlM3Eg-IZl$&d!3LcQOrXQoXbb2(w7%lT_o0NZO$$ z=BTRY>HqkYr^32mpO6Q|m1L;Id)Pt?wNCf0U))oGGV@@LQkf~FurkxYWbd5gjrgr) z&+xcwuF{9dy%W5hOsL_+K;~yVSC-gpRn6#&f{l^waa$GO@`82#B@f72=t(lgEY_z` z;^LL9YLV)em+EK6E`7r2CuQ|Qbj8tg<{1y@ivTVK)xMBVw@BviBh;BdyCpjnWr7a7 zS^1QVk8^lo=*Dq{+R%-z+Fw^lnKK^Lq8#PT+*}l(m13IvwxxQZ{ZNo;<7j;~kFSUU z`uC@;P^?m4VfS`pB3)PEr6422)n~e_Q9=}^7UG>X+t?)^0>P5mh>l{htIu}DV?BRB zj4|k+)Z4W+Est2>>9j={@*GVTD+q5=xa_lglr?`#r{QP$CkkO#RhLhz}rDj zpas?o(Io#dEnlsrSw*veGzJhQDcH|Kja zX5GvTW6igs>2Tluo%Lsvc$VTrZTb{#Ttz0b($V8fx@2V4!sckr3o7NHnz*n}*Qa;$>QPgTbtKmB{a*l@5@qdk_Vd84p!NLqQY0nAER`{-rWG(k zhf>K5Zr#Sz+uiJ}ZLznp@;8??H6UFLJxx7oGP_77?g@c6F__8)+UM2v4Zhfj(bS|W z%N(^LL}ey2#wf`f$beWQkO8^a+*oskyj3)jQ@mQw<0O&3rgF{zV4=;0w*-rAsBOk4 zl?+NbDd(lMbd4si$cVI&AOwq>3+$uFC-t@!56sAq2<*ce1~AJ|z=*Db;=_H;+gRLO zkOiUQ-&}FVt=x8P&ZGocM}pQLYww4qENdIMgfxyKXk(7?i>{juO|IvE zanH67B;iDYil|8jpd@vHe-;u+V%*sBMSui>eUF?w6)1?Kr8ID~q07S?Xj>})y1@Fa zYyJ1xue7D4*H<#ND$O7)0!J8E`fa%u0SB9(RjzRFW98OJWD+d$qc3x~q}UP(3Z9a7 zus6Q=3x>!8nrcbv>YZlJC8ma0!0z_MY289eCQB;VZZ|%mVP+VM^0e91lrvIQJx-Nb z1aMQcqk?Z>y4W%sH>8W(&G*Eb+_fn!dRmk$5k|M}1_5sODle$sz-|Eh@hX!no~{XM zL`Sm>pazU6K*H7yEtCu2VSV)OaE?brY*bT83W}KW+E|*Hv5UDR>J~`G<~Fs!0gd#K zTW#2kHYq4r>eX4=iuxlHMwez=Es5h$RuNhvb4pDikYp>@I) zg{`_+6Uu?VH?{E&T9}r$Sj&S@$GpU$(k?&%-FIRxYza0uKG?B}N0NGqrHY$Wl=00W zio<0fkW}0uAl&VH*m7{%!!W$E%>)ug>SB=&iA%Fw59zk|B#Rpjum~9lo=KE=DV1eN z8YjQ5V;d^48v$?$CwmiPd+l!yG*juc4^2#vIc1Uww4+>$*z&~Ro<)uL!V9brB0Xt$ zNk?<$6ttz7k-Un;Y9{tj6neaD0Gqc_8occkkb;w1G%Uu}79@)kV`~k@ADT+Q!75ZS zL;=qyP-y+RByLF-Ew<+k1uInuYCh>?a8IL4ww;3z+Kq*ds|y}4<#5RsX%Bcl`(|M zS3LC0A|0(sV$u*o6(ZM-Y%O~WcqeQwnzo`Ac;t>L%BHX-rUEu{br(P^K~PPuz;U-A zkfWDZ$yC7sqE@&q+(%G8ld&asu+mAnI}NZ@8C^tmEGue~h9Y#mOc5DCQGY>1w!`jC z#rfk5@3KP!bh>=N)Xb72mS?aEg~FqbF4h`Ho7`K;!&7|4GS|l0hF_XNPT~^Ol8S^! z0B}Xe2c3x3x13mvz8ZYJCNt)BYpb-8#}H{Xt=30icaGyo2vi-^dYjK3jRZm|-QfbQukl$HmSGhdxVa@sTe2RNffO#^L)9IvbKo; zb?&luO97_9lijcc?d`q}nx;@7Q#@67TPrsO06&SQ-%tMl+D9h%mt746pDGtOqO5@- zR?|EtF%ve#vXnlh*qvABYvLQ`B`NA@^4PMuX`@slFov#p13I7~g0KXSNgkk}n~|{? zV9zuVjjQVDU89~=leH_vLX9L1KUo&hYgl@C+#EpYNFQ_(nJTArINr!p1N2XH$xAE?-X%d3748x*xs%l`m95@rPy z#O`Zi4v~}TLgTw&G>Z>N7q#}nF)5Cz**;!HsiuwKj(CwInNk>+POU*yuLuo+*dHfh zz7I2_YAD4+#a|UeE~F9nuiOc1gK`V`ZiZe4oBBYdz#pM30ej_Rc z^JY3&F}3)^bq1c4F{XqHl!QjnLRLYn02yuys2Yg$lYR#W16=0;goq7G9o*8GIz?03 z620AN+$4l4YrKp~mM5L>vDop4=F6T~Cp89nVu~T%3R7CG&ay;i+c5e_xV_De*og8^ z6*BD{Nh+OGj_i+pD{HK5M&6)UZQ}gl<5gDXqLrkQnVxl8n3GyLBmh;G=hL`4Me%EYjYW*2QMZMYnP3b(&WJIC`20xAWGW~o@wtSnRwHsCJq}<-b92h`SUcQo%TC2GQQ#_9xf?4dOT$0_(>QYY@ZZ^5T z3VGp-(j?S|C1_Z=r-!;~q`0xx;_Dvw8jBP6+!LCXlt(P`RT|3P-kBizQ6y#?0qT^t zlea5vudu$xRWuORrDa4>vPYpqB+&xVsXWP`XyJAv&CRyMNk^!ojcP)WQhJ8f7#^09 zhRv)n43_}ouk(@Q%EBZe*||4wXR6L{e|s_6pql-)u5<(GU;Pb z-I$pJ0(M5ViBLf+{Y81-7L}BdK3PKH=5r@>Jcrausj>p7x_|>y0K)cTdvk;ipooHk z!$&-EL>8H1mPgk$GP)$B5JFj2`Ub<)N#A~O`P8yM$w~7mDg0mx771nn9Gh6&ldtRn z7)nV;+-hyzlSbLUR{VY-@_swHUYD?V-HVI;ArzLo_>kjhzB z>vBjO@5r_c6l|J~ww9ujq#2=vv!fu87hQ=^PLb(0RV15%wU4uq)6~AXY1V$>R-IiM zClhMB0;R}0m>XP!yA6rNDv9W6b0waxq8!M)V6=2@l`|F$52cA7o$qV0wjHOLswq-g zsU%d25bG?_IdG>?QoDs4TX06>b8Z}TO--k(j#`-!V9Xiy+gy&4*?Dh3Cf5U-`hV3* zK|Pt0S?Xk((e_w0j;;yiNw&uOl0}I7h1W*Z^=xV>nrP&gSdK_+PLu#01dscX-f=Roht& zdkb>YkL4}GKD4@ zDB`L^Pb3vhEDIf~sx*|8`dNzXNxtD*i`wSH4`g}W4totPT{d?WWh+%lO)}CXu#=^V zJ@31Fdbb`e$bz3MLrXOEQOqKp38kv5oJ|*U>!`~hQb(Ui3PJEd#m-&XqmnX}4_8+# z+b3(h(hFId!K}JeuAM-6y}7|Cj%p@juP;eZr6WYL6j&)Do}_3hq-tTdwYUUuN`rBH zGf$X2Xq3wirE88N#!Qo@~uKRPfeA z6DW0RSQa(}i}u~aUtlg(4x5YMVgpANY_Ua81r>CKnMFEGH2?rNAd*yUPQVY}0}>u- zEM85MoYyI*SgCT;MOOeZ{LgvAMH)7tV$8}5SZex?Ue(% zgy}37C>0}J<0wg03R_`o*bEE|W4+Fp2l7;eM5vURG_&OSO2m^;!%qvpVjU9FDGU#3 zQbyJfrS%X(u_{0o#Oi8!GYVLxiAHH1TNW(UZ$`4RjnJlv2?0sikSw5Fo$xR)!PkP2 zFi}rY9W1FVbt{)rPbmKYlz4>3RZ>GPu)j{j`fdrm{Mmf7Ra8Y)L)vi;sVPE2sKY=S z>WJEgvtJ6wxxi$_VJ?3R1QDA5vv z#N9!1Nn%d~8w&%l_rSoyZc{rdm}%n65>}>DRPgF~MO&E+dfMbM+gI2vt$uenyLg%| zWbMGDGLS$QZNU3( z02bd2wLKJ?fR0UT2YOJ>H(T5l8c0>Kww=k}adBaRh=npRQYdLD+Lz`G`JswrkN&4< z30GhSlp{&Gd-BHNAcusnZ!3=A`bo8H|$9BL`VH1O*% zMj4|nQ4__I*Yusa9ys3))#a;2qIY~;<+mZZ=W)HZzqESGD)(lRF7Q3T9U5knzyz_d3IO|& zweT=85O6$Dd8zbK)<>7r$0aFQUStruNRMd;2U82E{{StUlX5n~{%Uw4beg(HrimDc zsvYM|N1ZC=f`fB#6br5Gfq{U5G2)3KHyl*?q+Q4+sj7I?w5=(&lq4#W*VJ!oSbJgN z8Jbx#+G!uU(xhP+nRK%QZ6%7>Y4qFfcfi2HVVOfVHzwTe$Q)o`Vmgk1?*%9twD_i~ z=_Kk3xF~8MSXE0pM88on^Cxhz_1N$Ht$o*EMU6tkn9R+T!z6|{B$TtVBWX}%W^F2< z{{S%r0Kog+z+hq~B4IxS+hw|>idT}3IVFru-tJU8J8&EgfZD)=zma?}*=zj7Zyj`% zh2zwfGQu|+NGbs&f(T^{MfV$lfq{x?j@C7ESJeKPac^JJR9b0bPnAYS?7?v??1wq`TGC;Jo zbn&!Vg=vvkMIn`bT#`vx&Z{u93+gI176)^LE?-YQH3WI5PUTt31@zNbrmZpAg~ZEd zLZLth)_1+Vh6WiNlmVRjC=k%cGD|vAta-74RMnZ;&{KzEVc*o`k~z{nBb-jkV~RZ5 zY2~J#vPN6f{KaI2B7M!3LtA|(dmYbKh21woZ6jZjg6y{#YDF@3&7Hz64qWwz{RW+%|w*clEDQp z%}rFV94(?r;-?Wj!r%1=rL04rJ_3!$4bx@D8Dq7#Mj`87Wh1%ixx5%8r7To|N{(z>PJCYuRp8-*Q1CVR6CJfXMPJg{O$Lb9|%} z^$jt1U`cB*B~)^5cfGJMF<}})M9GBp9$!)_!OKNNm1!tOhB@>|po47;PLQKX+TfFJ zF(>Bpb)KSnh-X}_i^Ewm&XP)?In)Zb)pO6N__g=Iz{W6nHH|)6XX;h@f2JSKW9Xt( zR992eR;4vmQDxBTnU8MT&a3X5*o&=*CzG(S!ef+GK=aFAO!SZ`k(cDjF6nF7ox%M; z=bPUH0~s3_RdSVJDdVCMNj+Th$qaqc#Zq9gt%9bORke?mJPTUZ#axn5%q6L*pjxDdtAZ>8PtPzHtyc=5B7#MC4)fT1_I*K+C<$Hdv2D%uF&o@? z!sbJlQdU$}O7S#vCv6Id;(;y!vqo9o{{T+n=j;Xs1|l3`G8K#x&6z;Txr;=!sWkRR zbSSA9)OH5DX)sD>8YVs4ch@^o?oF{pa$VfGLWt5KB4X~Ffk|L49Njo z&LxE*nN~`4n$kp}mQe97paYX)_aT72tPj1h5K~aJ0dL$`V6@kPeG)5@jlShp(F}y?-%I*H1dwfR0oYtv MU|?cOVWEHj+4*f~zyJUM literal 0 HcmV?d00001 diff --git a/examples/Bodypose-single-image/index.html b/examples/Bodypose-single-image/index.html new file mode 100644 index 00000000..70bac439 --- /dev/null +++ b/examples/Bodypose-single-image/index.html @@ -0,0 +1,42 @@ + + + + + + ml5.js BodyPose Detection Example + + + + + +

PoseNet example on image with single-person detection

+

Loading model...

+
+ + + + +
+ + +

image by Funk Dooby via Wikimedia

+ + + diff --git a/examples/Bodypose-single-image/sketch.js b/examples/Bodypose-single-image/sketch.js new file mode 100644 index 00000000..9e01c65f --- /dev/null +++ b/examples/Bodypose-single-image/sketch.js @@ -0,0 +1,115 @@ +// declare variables img, bodyPose, and poses in the global scope +// so that we can access them inside the `draw()` function + +/** @type {HTMLImageElement} - the input image */ +let img; + +/** @type {Object} the loaded ml5 model */ +let bodyPose; + +/** @type {Array} - the poses detected by the model */ +let poses; + + +// Preload assets - setup() will not run until the loading is complete. +function preload() { + // Load an image for pose detection + img = loadImage('data/runner.jpg'); + // Load the ml5 model + bodyPose = ml5.bodyPose(); +} + +function setup() { + // Draw the image to the canvas + createCanvas(img.width, img.height, document.querySelector('canvas')); + image(img, 0, 0); + // Do not need to draw on every frame + noLoop(); + // Draw again when changing checkboxes + // TODO: can use p5 function once this fix is published - https://github.com/processing/p5.js/pull/6838 + // select("form").changed(redraw); + document.querySelector('form').addEventListener('change', redraw); +} + +// When bodyPose is ready, do the detection +function modelReady() { + // Update the status + select('#status').html('Model Loaded'); + // Detect poses in the image + bodyPose.detect(img, onPose); +} + +// Function to run when the model detects poses. +function onPose(result) { + // Update the status + select("#status").html('Pose Detected'); + // Store the poses + poses = result; + // Initiate the drawing + redraw(); +} + +// p5 draw function +function draw() { + // Need to reset the canvas by drawing the image again. + // In order to "undraw" when deselecting checkboxes. + image(img, 0, 0); + + // If there are no poses, we are done. + if (!poses) { + return; + } + + // Draw the correct layers based on the current checkboxes. + const showSkeleton = select("#skeleton").checked(); + const showKeypoints = select("#keypoints").checked(); + const showLabels = select("#labels").checked(); + const showBox = select("#box").checked(); + + // Loop through all the poses detected + poses.forEach(pose => { + // For each pose detected, loop through all body connections on the skeleton + if (showSkeleton) { + pose.skeleton?.forEach(connection => { + // Each connection is an array of two parts + const [partA, partB] = connection; + // Draw a line between the two parts + stroke(255); + strokeWeight(2); + line(partA.x, partA.y, partB.x, partB.y); + }); + } + // For each pose detected, draw the bounding box rectangle + if (showBox) { + console.log('drawing box', pose.box); + const boundingBox = pose.box; + stroke(255); + noFill(); + strokeWeight(2); + rect(boundingBox.xMin * width, boundingBox.yMin * height, boundingBox.width * width, boundingBox.height * height); + } + // For each pose detected, loop through all the keypoints + // A keypoint is an object describing a body part (like rightArm or leftShoulder) + pose.keypoints.forEach(keypoint => { + // Only draw an ellipse is the pose probability is bigger than 0.2 + if (keypoint.score > 0.2) { + if (showLabels) { + // Line from part to label + stroke(60); + strokeWeight(1); + line(keypoint.x, keypoint.y, keypoint.x + 10, keypoint.y); + // Write the name of the part + textAlign(LEFT, CENTER); + text(keypoint.name, keypoint.x + 10, keypoint.y); + } + if (showKeypoints) { + // Draw ellipse over part + fill(255); + stroke(20); + strokeWeight(4); + ellipse(round(keypoint.x), round(keypoint.y), 8, 8); + } + } + }); + }); +} From 13aed49a9a4eb8e8b33f6a548b30a067fb16a3fa Mon Sep 17 00:00:00 2001 From: Linda Paiste Date: Sat, 9 Mar 2024 16:04:04 -0600 Subject: [PATCH 5/5] combine modelReady and setup --- examples/Bodypose-single-image/index.html | 4 ++-- examples/Bodypose-single-image/sketch.js | 12 ++++-------- 2 files changed, 6 insertions(+), 10 deletions(-) diff --git a/examples/Bodypose-single-image/index.html b/examples/Bodypose-single-image/index.html index 70bac439..9ea888c4 100644 --- a/examples/Bodypose-single-image/index.html +++ b/examples/Bodypose-single-image/index.html @@ -1,5 +1,5 @@