From e20245fdde34cb68dd36a02446201f09334a0295 Mon Sep 17 00:00:00 2001 From: Martine Date: Fri, 10 Nov 2017 18:48:26 -0800 Subject: [PATCH 01/15] Added reverse geocoder to custom geocoder, and add the file Reverse Geocoder.html, to do reverse geocoding using the default geocoder, Bing Maps --- Apps/Sandcastle/gallery/Custom Geocoder.html | 132 ++++++++++++- Apps/Sandcastle/gallery/Reverse Geocoder.html | 174 ++++++++++++++++++ 2 files changed, 303 insertions(+), 3 deletions(-) create mode 100644 Apps/Sandcastle/gallery/Reverse Geocoder.html diff --git a/Apps/Sandcastle/gallery/Custom Geocoder.html b/Apps/Sandcastle/gallery/Custom Geocoder.html index ac8bf7ef022a..47358c139e4f 100644 --- a/Apps/Sandcastle/gallery/Custom Geocoder.html +++ b/Apps/Sandcastle/gallery/Custom Geocoder.html @@ -37,13 +37,30 @@ 'use strict'; //Sandcastle_Begin /** - * This class is an example of a custom geocoder. It provides geocoding through the OpenStreetMap Nominatim service. + * This class is an example of a custom geocoder, and reverse geocoder. It provides both through the OpenStreetMap Nominatim service. * @alias OpenStreetMapNominatimGeocoder * @constructor */ function OpenStreetMapNominatimGeocoder() { } +/* * + * Object for both input and result. Could be in external file to avoid code redundancy + */ +var geoLocation = { + latitude: 0.00, + longitude: 0.00, + address: 'default address' +}; + +/* search: looking for location of address, reverse: looking for address of a location */ +var action = { + search: 'search?', + reverse: 'reverse?' + }; + +var endpoint = 'https://nominatim.openstreetmap.org/'; + /** * The function called to geocode using this geocoder service. * @@ -51,7 +68,6 @@ * @returns {Promise} */ OpenStreetMapNominatimGeocoder.prototype.geocode = function (input) { - var endpoint = 'https://nominatim.openstreetmap.org/search?'; var query = 'format=json&q=' + input; var requestString = endpoint + query; return Cesium.loadJson(requestString) @@ -71,10 +87,120 @@ }); }); }; - + +/** + * The function called to geocode using this geocoder service. + * + * @param {String} input The query to be sent to the geocoder service + * @returns {Promise} + */ +function getAddressFromLocation(geoLocation, callback) { + var query = 'format=json&lat=' + geoLocation.latitude + '&lon=' + geoLocation.longitude + '&zoom=18&addressdetails=1'; + var requestString = endpoint + action.reverse + query; + var promise = Cesium.loadJson(requestString); + promise.then(function(result) { + console.log(result); + geoLocation.address = result.display_name; + setLocationPoint(); + }); + callback(); +} + +/********************************************************************* + * Functions below, could be in an external file. + * geoLocation object as well. This works locally but not in Sandcastle + ********************************************************************/ +/** + * Callback to fly the camera to the location chosen for reverse geocoding. + */ + function onReverseGeocodeCompletion() { + viewer.camera.flyTo({ + destination: Cesium.Cartesian3.fromDegrees(geoLocation.longitude, geoLocation.latitude, 25000.0) + }); + } + var viewer = new Cesium.Viewer('cesiumContainer', { geocoder: new OpenStreetMapNominatimGeocoder() }); + +/** + * Listen for the geocode search to be complete, to mark it with a point. + */ + viewer.geocoder.viewModel.complete.addEventListener(function () { + if (!viewer.geocoder.viewModel.searchText.empty){ + setPointForSearchLocation(); + } + }); + + /** + * Find the camera position after search, and put a point there. + */ + function setPointForSearchLocation() { + + var camera = this.viewer.camera; + var ellipsoid = this.viewer.scene.globe.ellipsoid; + var coordinate = ellipsoid.cartesianToCartographic(camera.position); + var lat = Cesium.Math.toDegrees(coordinate.latitude); + var long = Cesium.Math.toDegrees(coordinate.longitude); + var announce = 'Latitude: ' + parseFloat(Math.round(lat * 100) / 100).toFixed(4) + ' ,Longitude: ' + parseFloat(Math.round(long * 100) / 100).toFixed(4); + var home = viewer.entities.add({ + name : announce, + // For Cesium fromDegrees, longitude before latitude. + position : Cesium.Cartesian3.fromDegrees(long, lat), + point : { + pixelSize : 15, + color : Cesium.Color.AQUAMARINE, + outlineColor : Cesium.Color.BLACK, + outlineWidth : 2 + } + }); + } + + /** + * Handler for left click of the mouse on the map, get latitude and longitude, and start reverse geocoding + */ + var handler = new Cesium.ScreenSpaceEventHandler(viewer.scene.canvas); + + // Catch the mouse click, and convert the location into degrees + handler.setInputAction( + + // Translate mouse click into Geographic coordinates + function (click) { + var position = viewer.camera.pickEllipsoid(click.position); + var location = Cesium.Ellipsoid.WGS84.cartesianToCartographic(position); + geoLocation.latitude = Cesium.Math.toDegrees(location.latitude); + geoLocation.longitude = Cesium.Math.toDegrees(location.longitude); + // Reverse geocode to get the address + getAddressFromLocation(geoLocation, onReverseGeocodeCompletion); + }, + Cesium.ScreenSpaceEventType.LEFT_CLICK + ); + + /** + * Set a point and mark the address at reverse geocoded location. + */ + function setLocationPoint() { + viewer.entities.add({ + name : 'address location', + // Reverse the latitude and longitude when calling "fromDegrees" + position : Cesium.Cartesian3.fromDegrees(geoLocation.longitude, geoLocation.latitude), + point : { + pixelSize : 5, + color : Cesium.Color.RED, + outlineColor : Cesium.Color.WHITE, + outlineWidth : 2 + }, + label : { + text : geoLocation.address, + font : '14pt monospace', + style: Cesium.LabelStyle.FILL_AND_OUTLINE, + outlineWidth : 2, + verticalOrigin : Cesium.VerticalOrigin.BOTTOM, + pixelOffset : new Cesium.Cartesian2(0, -9) + } + }); + } + //Sandcastle_End Sandcastle.finishedLoading(); diff --git a/Apps/Sandcastle/gallery/Reverse Geocoder.html b/Apps/Sandcastle/gallery/Reverse Geocoder.html new file mode 100644 index 000000000000..ab8019ab5c68 --- /dev/null +++ b/Apps/Sandcastle/gallery/Reverse Geocoder.html @@ -0,0 +1,174 @@ + + + + + + + + + Cesium Demo + + + + + + +
+

Loading...

+ + + From f36987e05c8313b08e11cb433cf0b613d517a1fe Mon Sep 17 00:00:00 2001 From: Martine Date: Mon, 13 Nov 2017 11:04:25 -0800 Subject: [PATCH 02/15] Changed the Custom Geocoder to add a button, and leave the handlers in the Reverse Geocoder --- .gitignore | 2 +- Apps/Sandcastle/gallery/Custom Geocoder.html | 93 +-- Apps/Sandcastle/gallery/Reverse Geocoder.html | 7 +- Apps/Sandcastle/gallery/Reverse Geocoder.jpg | Bin 0 -> 26422 bytes Apps/Sandcastle/gallery/gallery-index.js | 589 ++++++++++++++++++ 5 files changed, 619 insertions(+), 72 deletions(-) create mode 100644 Apps/Sandcastle/gallery/Reverse Geocoder.jpg create mode 100644 Apps/Sandcastle/gallery/gallery-index.js diff --git a/.gitignore b/.gitignore index f55a016948ef..905bedfdbd9b 100644 --- a/.gitignore +++ b/.gitignore @@ -10,7 +10,7 @@ Thumbs.db /Apps/CesiumViewer/Gallery/gallery-index.js /Apps/Sandcastle/jsHintOptions.js -/Apps/Sandcastle/gallery/gallery-index.js +#/Apps/Sandcastle/gallery/gallery-index.js /Source/Cesium.js diff --git a/Apps/Sandcastle/gallery/Custom Geocoder.html b/Apps/Sandcastle/gallery/Custom Geocoder.html index 47358c139e4f..e8810716429a 100644 --- a/Apps/Sandcastle/gallery/Custom Geocoder.html +++ b/Apps/Sandcastle/gallery/Custom Geocoder.html @@ -6,7 +6,7 @@ - Cesium Demo + Custom Geocoder Demo @@ -36,116 +38,16 @@ function startup(Cesium) { 'use strict'; //Sandcastle_Begin -/** - * This class is an example of reverse geocoder using the default geocoder service (Bing Maps) - * It also includes click handling and setting points at found or clicked locations. - * To reverse geocode, click on any location on the globe to show the address. - */ - -/** -* Object for both input and result. Should be in external file, to avoid code redundancy. -*/ -var geoLocation = { - latitude: 0.00, - longitude: 0.00, - address: 'default address' -}; - var viewer = new Cesium.Viewer('cesiumContainer'); +var camera = viewer.camera; +var ellipsoid = viewer.scene.globe.ellipsoid; var baseUrl = 'https://dev.virtualearth.net/REST/v1/Locations/'; -/** - * The function called to reverse geocode using this geocoder service. - * - * @param {String} input The query to be sent to the geocoder service - * Calling loadJsonp to bypass CORS on BingMaps - */ - function getAddressFromLocation(geoLocation) { - var url = baseUrl + geoLocation.latitude + "," + geoLocation.longitude; - - var promise = Cesium.loadJsonp(url, { - parameters : { - key : Cesium.BingMapsApi.getKey() - }, - callbackParameterName : 'jsonp' - }); - - promise.then(function(result) { - geoLocation.address = result.resourceSets[0].resources[0].name; - setAddressPoint(); - }).otherwise(function(error) { - alert("ERROR getting address: " + error); - }); - // We are not zooming in on the location. - } -/********************************************************************* - * Functions below, could be in an external file for this and Custom Geocoder. - * geoLocation object as well. - ********************************************************************/ -/** - * Listen for the geocode search to be complete, to mark it with a point. - */ - viewer.geocoder.viewModel.complete.addEventListener(function () { - if (!viewer.geocoder.viewModel.searchText.empty){ - setPointForSearchLocation(); - } - }); - - /** - * Find the camera position after search, and put a point there. Clicking on the point, will display a square - and the latitude and longitude of the address in the search. - */ - function setPointForSearchLocation() { - - var camera = viewer.camera; - var ellipsoid = viewer.scene.globe.ellipsoid; - var coordinate = ellipsoid.cartesianToCartographic(camera.position); - var lat = Cesium.Math.toDegrees(coordinate.latitude); - var long = Cesium.Math.toDegrees(coordinate.longitude); - var announce = 'Latitude: ' + parseFloat(Math.round(lat * 100)/100).toFixed(4)+ - ',Longitude: ' + parseFloat(Math.round(long * 100)/100).toFixed(4); - var home = viewer.entities.add({ - name : announce, - // For Cesium fromDegrees, longitude before latitude. - position : Cesium.Cartesian3.fromDegrees(long, lat), - point : { - pixelSize : 15, - color : Cesium.Color.AQUAMARINE, - outlineColor : Cesium.Color.BLACK, - outlineWidth : 2 - } - }); - } - - /** - * Handler for left click of the mouse on the map, get latitude and longitude, and start reverse geocoding - */ - var handler = new Cesium.ScreenSpaceEventHandler(viewer.scene.canvas); - - // Catch the mouse click, and convert the location into degrees - handler.setInputAction( - - // Translate mouse click into Geographic coordinates - function (click) { - var position = viewer.camera.pickEllipsoid(click.position); - var location = Cesium.Ellipsoid.WGS84.cartesianToCartographic(position); - geoLocation.latitude = Cesium.Math.toDegrees(location.latitude); - geoLocation.longitude = Cesium.Math.toDegrees(location.longitude); - // Reverse geocode to get the address - getAddressFromLocation(geoLocation); - }, - Cesium.ScreenSpaceEventType.LEFT_CLICK - ); - - /** - * Set a point and mark the address at reverse geocoded location. - */ - function setAddressPoint() { - viewer.entities.add({ - name : 'Latitude: ' + geoLocation.latitude + ', Longitude:' + geoLocation.longitude, - // Reverse the latitude and longitude when calling "fromDegrees" - position : Cesium.Cartesian3.fromDegrees(geoLocation.longitude, geoLocation.latitude), +function setAddressPoint(position, locationAddress, longitudeDegrees, latitudeDegrees ) { + viewer.entities.add({ + name : 'Longitude:' + longitudeDegrees.toFixed(4) + ', Latitude: ' + latitudeDegrees.toFixed(4), + position : position, point : { pixelSize : 5, color : Cesium.Color.RED, @@ -153,16 +55,46 @@ outlineWidth : 2 }, label : { - text : geoLocation.address, + text : locationAddress, font : '14pt monospace', style: Cesium.LabelStyle.FILL_AND_OUTLINE, outlineWidth : 2, verticalOrigin : Cesium.VerticalOrigin.BOTTOM, - pixelOffset : new Cesium.Cartesian2(0, -9) + pixelOffset : new Cesium.Cartesian2(0, -5) } - }); - } + }); +} +var handler = new Cesium.ScreenSpaceEventHandler(viewer.scene.canvas); +handler.setInputAction(function (click) { + var position = camera.pickEllipsoid(click.position); + if (Cesium.defined(position)) { + var cartographic = ellipsoid.cartesianToCartographic(position); + var longitudeDegrees = Cesium.Math.toDegrees(cartographic.longitude); + var latitudeDegrees = Cesium.Math.toDegrees(cartographic.latitude); + var url = baseUrl + latitudeDegrees + "," +longitudeDegrees; + var promise = Cesium.loadJsonp(url, { + parameters : { + key : Cesium.BingMapsApi.getKey() + }, + callbackParameterName : 'jsonp' + }); + + promise.then(function(result) { + var resources = result.resourceSets[0].resources; + if (resources.length === 0) { + return; + } + var locationAddress = resources[0].name; + if (locationAddress.length > 15) { + locationAddress = locationAddress.replace(/, /g, '\n'); + } + setAddressPoint(position, locationAddress, longitudeDegrees, latitudeDegrees); + }).otherwise(function(error) { + console.error("ERROR getting address: " + error); + }); + } +}, Cesium.ScreenSpaceEventType.LEFT_CLICK); //Sandcastle_End Sandcastle.finishedLoading(); } diff --git a/Apps/Sandcastle/gallery/Reverse Geocoder.jpg b/Apps/Sandcastle/gallery/Reverse Geocoder.jpg index 2b262ef1148fddf65288ed4cf0c448d7c0331529..9c503c59434fc874a71158ca017961e95c9155ff 100644 GIT binary patch delta 26531 zcma&NcQhRD7eBrcMD!9pNYq4)9(9xGyb+?;h;FTozE~#FyC4XH=$+_o*+lQX#OgI_ z>>_Mfe0{#>cYeQre|P52JZEN}nK{p#=id8z-8%#Ru@iTIn_oApAZkrj4OP&cJ9j{D zZx_(b8pufn?(6^pX={V{K_Czbi0}>zi0HO;=T;T(u>QYo)jLl>cmMBkg4>g#pxZ5o z=2mrX^?&mAR{z)M|L))0IJ^=zzDapNiq!gs2WaPJU?>;3J1v%ya+Bdg1`Cs?{^}1cjN$!#S z?~4CFLi+z*RHu2j`woBxk>9-oBA~fT0|J9E)*SGm*Rz0KJ7Z6(PpYQ{t0`r!UGY$T zJKRkk#WSH!dTdiXdM|A&B9?cCD{M~w-a1t%3r~Cl#oU?pN@Nn7Diao3LLtRqi4_bj zr+WU~qxR7YTjM+N|7>GwaR6pc9~R8ckMXI2`4ujiF0*Dy0vxUyC5slSoNE>WVg>Kj zl>}_BxOg=9jn`MmgQom@)3C%&htNaqSZkg|+VaDWuqakm$kRI?C`nW79zAX)It@&!)l+#D7m%b~Q zUaUAS*PMP5PIGE$M)J2(OSAD(P`!pij%IP_eOzs;ejM%0r?;id7(~+uw0`m+nNJW&G3%O1f%K@{fVzA* z4c1epraWLGx)XTi3(Ma2wKyI0J!ubhXf^wNi;&}gH7~e-2zNO_%fPMQ*5^K|wqVYC zGbm7z+$IRQt3ryNX-4;}eBBg7)54@BR)j}eE{~~nQpgi6oAQK-Yc}mt9Od303J%j7 zP^bei%BVGzDI^vUR@b!8`zrP^+Lze2o}BLZYeETL1>@P1(?EF5GKF5(=IRptWwxZ5 zC(gfQX%ROSm@WND?mJ;Z`e1SD9_5)b!nUCLfxQlG<^;XG=ju@e2XlSGAsN7K?Yv=X zZ24-+Wc<)IXp9;Cn6*-w23bs$()6k8tw0yxc5)PT1FB=|i%?{Turx(%exHUObXHcd zcn#E=%uh&Zus*Tu@fS;l{uX@5Hk4I#J*7y7Gu;T(`mX_lIx7gGMLnx3ysAH^dasvC zJ;?C<5TD8+Ch*9CD14(S!4(I+^u$r=#;pOAKqojb@Ig)4PHSLoemA|626s*5COMFM z^4ZAd)5{?mGtJobBcq|JBkZninOLz9_YDX<{qGfwbw8V^rE%Q*j(4HC%L~aFYt<xowK^J|7#*S}9r1jT?Z`XmckiBN9PznHUrsRZ#M2f>lFz&y#sw5@iL zwe5CHlXc5DtU*goF49VUqp39oz4d+)sPOKjb^o+?NpdHR|FW!LF(2s4Kjk&}YPnJN z1gF%SxGy_$015QwQt~={z$j<6>r1imNc`SwRcUg&!!?g`s|qv}b$ADJ0|HDZ9-5i% zr_Jh-F}rQM6IGOZ#E*t?Iy19Nenpg-$P88=*`M%WPzNwb`NDv^V}%-JB~NhKPPBrXtZQ=c{KG4M`4ijCVa+Ryiq7p>igyJBUlj^)pd z$jciR`7h1DlnEEtZC}vtlYqH+@3jD)3Y(fYA2k$9dK zE-$q#InDzKlnV4;aFr(LWeS>4TDBfx*U%qiqT+Kq?CzUZtJ_8`0Mb7$H1ThcHOcxl z(+zCAWblpe(E|r|fRwnnxp*jgj860YB+c=Umo}XV5US`|wAspB+CMt|1kT?H>p`(_ zxmAvz09vGv1r;N>vUU`oXsgb9J&a_8+H$?^JMI$TcHLBO8|^v{7C&*^Mls!heo7!& zvDK!iCQM)CDaT!4pkOId=yZj_@~7L+LIPt8Rnp#jU+7I}nN%r%lk>nv6pWtY#mj^C zv||Tkq`uGyPjM7|y9EDN8(md+PnSYO0#<95z zCihX)b*-DQjxBv^Cd>8!_3>q#=S1h!<|HVxA*8Ux`O*m;EY{ZWU@bWz!}`Nl^KQ@T zxE(ZX4ar~CwIykQ9E$`XYa9m=m{Bl20EGixe?}^nhUhDnxu%U~)hX%(jXP8doNBof z`-i@KAqE_2L!H*j_=G4D;-nCs4=xZrTz7|(>{4DVWcHwI2(>16Sd{H zON5>?M|~#fSN$2!#i$}6Ve#xZ;MU5z;*?4dj96~}F5E_^m0+fkF27tHKUUbzFu^6| zbKoXvDbro1UeK-;P>y&#Q(tZmlOA?v(|ZpBxI+@hYM3uh<}xl=M1E=D->f#{H89&8 zhYAGe+u|-pp5MI*3{xfzbXQZU3rUGte{616XW~_HPdBI{(6mb`t8(o&L6aY=B=)t6 z%dOWosfuOL9J2K}OdHz+QhgooKwV=&l_2)&hbh z{z=L$1ag|vLOTawe5oUY!wWZ{4FGL!A9z5*w5XK&uA}Cq5D{yW-BN?;$|Ef%8FLUQ5$D&Hc1x9>{b2QP(jULT}$8JSAQf_&&l@7&{fgGmUzX1yM7H1c$A zwQDrnPTbzjknAbbxJr_rcA)9ms{YjXmb-*7ib={hBcl5T#C~c`Y`uFCcmq1PTpzoK z3+a>=b)I8sk8kmCFg3`maiOVfOxI{ji57@ret-W_3hN5FNC(L^FroNFbOB;bjhCs! zgjTjwy>4dWS-2+5 z?7k{i1YJ-wWjBp~S)$CL_w_#Sv`m2kkK z83V-rBm_L`k@3MEe9s}x^Yu1>&6DaWp z$riYe-*(Ohq$7+3cB*qH7?$Od<-h+Lk#N{})H~GXWC(nSeYjoobGlfElHNP;yy=r> zoOw}Z!{3$uqZ`ngBcAUD^i4M$z?_WTfCdZnAM`Rn% z_>b)d)N*ZoC4e6-Ud{QL4mc%HBaFvwv0<}0>*cycS54{}Gxq7(gRBL?r;m9Rvdt8b z$hZSm;9J-4lidz_>CPMm$c4Gf8S$mAa;r&o?z<9{cs~C(#~n-+?cL7{NH~7hsOYQyt%6#u`*>z|6SNd=)2XO;yG(Y z6ox3K(62?qyW`T@D!VxSms5~1P6_GPtSs1|VS&6I!at`yuCN znZmqZg9RJ9i_r?GA1h=*ya*XwVe#H~)1_S&?>03Fvu^9)|XiHOz(s0K2 z=*dD<*B;^>&TnmO;chP-yl!nQsuI>vUdtb4)JnOG}aQF@X2Gbj} zeiX&94}p1mor#cpgm;)yhn>7|_(!0qRad$R>N@{wi+_%*T+0E_nQC>Dl5vWV1bTEu zavr+geZ-w%azvqHJ=YZZt?C1GXHAnUCaABwX}8kpHH2nyxbeje$i9HF_O3VgQznBi zrK5ib>`(k#5~6Tr`3%f24S~$*6-5b6Tt6>301}+p|4A zMSkQmUB2G3CPlCo85QQ|BW-=Dx3hw2RAgJg#b`G-&me49aon|aQ{3>)CI)j2X)iq5#WRXARWZQ3k5(>;IROb`&HwRmS9Igjj0dE)oF?nBZ%prEnE{)etmevF%k zCVz?TiI9iv*U7DzWW{?7dp_6HQ_#1qn5)9kFVKx7))wUU z=V!0oY!idUngyRdyH6@Gg#zrrQ7k!l!7Fi-`Uxb5J9qb(XMv0O!Y>3Sn4fGcr~6A_Rk$he(iRt?y;9}GQXK4NkDRWq zD17PZOfIxl1X}xCKh#3(TmBqD(c`~D6Ev(Sj^n}39ds~a4YO-107ynyLq+&SPwtl` zEsE^oC(Cgy`SEhyrVnN7{+awDt@7;PfQVjCTqJaph4_}kMT~I%=hV))Ar%crx&Q@JZ-_vUpL3aFv{7T;qhzaFHW*r-|9y7wS zzJ*%joXtu+pnWGz`(`3Rz7N*YI^e*l_SNMw`hlw-xu}MS0Kw!cesy88ig-YJG60Y_d z15Jo&*xwg`ikqexe9y*u4LMCD(K~zX{-ffGyQhN@EW$1tgNZVusBph>yvga%WS^d5V!DqT!=_7(KUF0>8C^n_qyd2-#N$-z%h{@@K z;dt#6x~b@Y?V&@btoO{2B&l_llAlF~8;`5{=UL&GgbN;q^nWxEWyx0JSRD}trAs+@ z@NdJ((-dEe4;YP}rfUe=)) zya85!tQ4+kH;a(*-cXzLih&wwoDT5RD}NGnbCbXN52@EoTm3b6nj!CNvJTq%;z}!J z%2@Fhe1s29gLin=Vfg2=w;zyG&$^x+=(7Iz`EI|$PkU$Cu%+P<+qO!)(=5|Vfvqs+dpThM1fayN z7+e)r1o7Sm;t;sin2{x?kP(`-`k;JZ#+r>V@CDfqW}f;LDZTI}_!;#%Ok-kGypw~q8(sjW;YYAeK9|Cicl z+?2YZ3Q16?Wbf|Z7uAUUlJs_M;~j^K>-*7Vo8xxaYH{}!Ul#|dA_Hz^{a$?i!jcc0 z?Tg0b?jY(~WaBhK=-V!JH5w2sj)yqC%U&n6e4OVMy&r(qRE|rbbGV*C(IWXSb(V1) zMh(;QR3(sQ#^^KFL+}qD=?fsVay#h{cPc8)TqQ-u7gDcjx?-J@$xj`-N!O-nZbOAjX5+SpjbN z-I*{C>%3;1>v&|1duM(NdzV+bC!A%&!gIY#t$HZxx_|3X_igt1aeOhmm#wbnNFy%$ zvH724r%2q1%dPv>h5=+a#~;_6nBL^Pu{B1_pUTxkGl06M%q61)OSd#oHebQ-RrB~m zr_r(HWLPvryYiupZWB{+gr@N9^Th`)mV2XoXTeulr>Iy(zRADN1v9)fMYHpqTJ}<- zw7hanN^OsbLA}53cgMCY&#g@X_9#N#vORrg@qIG8Y8!is1HiR{T|%^r^)W2xJi7XW z>3#c0P}eINY{=O%maq3Ho}GUZ&sBlzGsiL{Vnw>qIiXY9vWe3|r>44JCe5gX%$6AF z<2EB6rvQHSDo+yIVLdk>QhB|5-IZ_FDKj@;;xqyc;x`1mD&gk{dFu z@GgJEYBB}zo{H|1G2!*h19o8cXyCriF0`3i|M<~s?vqJ zrLiN#LC);+U%!0)F0&kMY4V*Sg6d4<@Z;s{+i<21@cn6Nt3B>8gH*tDu1}t;rfG$D z+SnHS6v6Z25;;GzI%cE8Ln{^-`Nt!;?DD`oS8-tH8xR#<4O4wEwXUJa>x|x7=|Vj) zx4_ko95%@CVtT*!cES(S#=`XSqALGjJ|REKZ;{wrv{T0M*Z-Tc-W*6%cxt*c783Lb z&w~Y|5Bh{-*7wbE-U5gIf25jPzndc3C@Bs9aOqM0g%?;0OUpkQASDuigFCu422mMH z+wE0S)g|ztUXz0=*xFQ;;z+TDR;yFq=PEt6)Z6j~mMaUnd*gC_6DQ=-l`ogk(laaP-6K#$QCyOZ|WePQSK-S+ejo0@@%Mb`NO~oYdCC%Vb6kg+{ zJ)KW`<`pAUR&^Ny8=wF7<4#(CJ~K74e0K7fvYK(Yng7+NiSRoq3qE(*mZ`9ET|g>d z-(1=A6?b_)fPB2!C9|S z-N%)`{yr&jM5fwEg)AxSg`)KDsa=U6Q zUV7xK(km`yrCtS8{%soCRMBXn+X&E|zcj|JVSdioSXM`<8k+Fy>1+{98Ku>hCZ>sncCVzyjW{2*JXwP_j( zD@4*ZRPAi$9MtBBttDCh%mxfzwk*`$jnpeJCpO|!?Qrpnt|w%kcC;-u_yU@06+!tVqX4W%P1R*+~P zty4>m9Jlb(-NHiPaO&c^HRlnY^(q+&UDJ&+*4vd8nu{)&so$EA*gb^+hfXlqGE?ED zj8umcZK;tE9a}f`51Wr*ef&#Y)GF2dhEgkLxt+2luoT{=IZ+|#&5$ZmXNB`$F>0(w zrdQEg^pM5L8N?P-TCzo#)q6?@6aYWf5l`1R!pvZCjlk|T=k>^3vc;sxUlA(HMc(Xj z0Zz+Tw)g4e^;7N&x^vQh;*YqS9<%P2jLkfIh50X=B-&PBJ)FC0(Cr-M@=8PzPhL`9z&qOP_fnx$V|cABtq6buQ7ghAD0L} z8(M?)0%P+G``zo?0M5vLKbsXZ7cSW{)3Y7-4c(FA?7amen)&v$w8N5&Aztcg)zAlX zG*58;SF|)iaPlwZX}Ujh zhb!>j-*g%x)=lr=b7rT(#bG;j33g7vQSwBXmH(y?kLi136p%g_Jq=k4fV1U7$3I2$ z^2K#3=J1gJaFv+&{jQ6kIA2b)mgWoMV%WPCy%?Wp3VB9~7YX@Joo>i-RikacE|hizELS=Zixx(Djp zECnsJ*LA6!Q8X|&LG(6o5GP9_jNJE$zc1bAR;$f#p(d8FVlI$ZMkunw4&23s72-9< z73rNAFh70E5PXx8r3js~+Mo2>MHwjc8cna(V?&xTQev1OmxYaw86}8;}buI*5CgQDp{IcbcU+Wu9y>bkFtRpeB1vmlQEpfq;yHAJ25GC16 z-*F$Y8=W1@SmP+6zghtA@57AYR+ZU&&pfjpSK)W*Ml;>#+FPk^LDrv=^lUl7`SO96 zvN*>x#LUJN6d}$Ln>zL1ZH6!q@Gen<5IX7{Z?ub=S!i%_eRC&^8$mwi{xaX=siKu4 z&049=RZ+klClet&BI)!UPrB z5q?cg^)pCtg_Hl=_`S`+BW?%hS9QIX_TD^trsG`H!2O*cb`HPbRdfH%jea?s6}PlD z8{10v+HAJxQ6gTPHg7F{|f841{CBgspvr-aQ zqy0uwxbE6W#5s=i$q<(^s^Z_PpZE9 zocN#Ld#Ti9`I@*oCYSNz2N~zaLzOom`kINSWAi6H913v0&I{DxQ!I1C5w&KYMnn2t zsxNB%rDKU4!=&GK)E^zMh{7^D<}lS^2iFg9VkbRj?X68`h&!wGHBmee_>ayq<*y>F zFMxi7I8_Zp!s=)Q4~}D9cfR)qWHimttF5U(eBn4NFUNTsX3#IRUW~pzWcwNVK;siN z7W`+)_YS8oiV)=-z!7C;*V+@q&=gR_*huT{Svc7J-RM9Gq$%}&m7{fVr=x>Y#~m5O z9w8(-cy&1T>M9xKI08G%bL!xwq7e!W0>Cqp+AMQjV{5oS5)0lF2M5BF`+7NtpN4Dd zT!`$N!Xp!HVvx3C2mFE~mHBcD6&R3YZXoFqlM(}=Lw}c zq+Kc!+dPsH>wo6SoZMfj|8NCqwxBk7cHMC@-K7bA-qWTqmvjUA;5~_#ojetxb20Ys z>1dFO$nA6HnHCac@O|kpx!Upx$VoMPaVYLe!Ajd^Yp;Kwod>IQ_F&xMs_aeIg~&DZl-b7!gZV=aDYuv0hnl1ao%#ujhN z!B~{w^@MeeE4VHw%^TQgciYgKMe?Jsva?Eg;=e%=FZ2AqTj)X^B_@AN{Pg6Ol74hx z8rSyClq>qhJH>z4nkdkKRxIxc-IR+hN&Em3~^PUAUqVAUHc3^*o#? zI^Z%^cS~rvNI7BHE>UvD- zn&_(FS{%+k*DYp(lU{@NELiWe^B_O7Qiv&NveLICsdJuie`=owkvR>e%9xB2%;h_w zYItS~F>0?TV1PG-O}e`V9?@e(Gb1tomqxTbS!1d~nEID!lh_DXkGEIvn@H{jH|hJ_ zVfJfYzyd@aH?g4`vqFQk!JPkSwW`M6{VBSeF`I6GRU|R;>W_l0=5%38vr(J#%zsjz z9~w`{*QpJ4PAtZ{Za@pgJ6nHUdcdqP$Jv`uY7#;{Z?5fB(8$)--&)#?)qY$v%*0YGi*aPc$~W?xmWOzt+L9V)#baGFJmO;sa8p zbOg!(&r{_U<~x}MCR`Eoq*`g8<6WttO%BXf=b1(rnv#j z{&m2=(2W5;`j&HBM2OT6ULW!FC(#%B*BUHVcV{;+s%c)W_E~Ym(t3wZ$X@ldTqb+K z=$}XV4?^2qBhsPS+p)Qzijq)TBWa*uA3NYRF*?#{A@CaAenF^2Cm_ybstH5yy&#QE z$)=;xDUh++zi6q8{pttXBn41EAC-wk<7LZqP%q@pbqg{N)Ul zSpVZ63cocY;MU5x2;9%uceCe4|scfx&ik?3C$IT z!ISUkSF{$MNb~ug3z%L@*Tgnil)nOqaMsp1x>B6SWw-y|-{F-<-x{$G%y|ATb=SHy z#!+QG{4V&!Hqk+E>%(Ob)`AvPdd(j+F56hQrfuBWTG4p2XH5;O$JIyXLEhVZbjb9g zQ*U-MMgCGhxl0oEl>eA$sn}&iij#?&I(n7X?oJ|*a=Gg z{g(m4x$ZnOk+l3F{CTRA6y3>NThRnBh}0jVdcYr_AvEXycm=@jo8oBqwc0*wA@)6q zWBd@5`t%M_pZN1-NV)G(niEnRBiTi8g}132CIIFltJ0e(3lCnt0cp2J;|sVBX1|+g z&@L+1wlN>()@u*~NjXaeEpkPVZ18Wdiof9|u(NZo8L8l`9*le=dO5$qZ1dxJ&Gw@EQ^c6{Si_|jv4G3Yd>MWre@J6 z8H{$;UsSlLUi_f$dvEnm&-yh&6!&-y9BoZrar%YzAbF_`Q1KM%Xn;P=;Qhq(i@T0F zG1X*|aqmbl;Kh^f3)F2evT(Fo93{^qblBGgP@!EsU%1vUPz0!_xJi~DDHK!6M8yNaFCo{4KiJV$Pjwc$G=Grz@@Xlin zoSJfKo%KKcSHk!)VTcz{_uag}CUtRvj6ap2qZ~u^<8}_;fEqat1KdmDHz1XXcNk~| zgPB#~lWDgUH^*tWIHX_`!++y1$}mXgB=s&>V)&VU@kFd$eQX=;2K8MU2Yi^=JZap#Ejl8Y2V z+efc51|BwwCVpLArS#0kozhRaG-iO$gnA=veP&s_CI$B;^e866)Tg7Wc;C?l3=n>a ze9Fx?NICvRQOK|^`glywS7h<%Y#4x$g0Hn9(Evi2mN2RSaVDA zK_!%2J3xZn)g$tVN$p|f){D&}Jyv_WRpNi;!3{D7(eAelDpkPs%Y&<H- zX0u>bKOztU>rl!ydox~_Y+qMyfcGg$q{2^Vyy*gG)r@^R4gg-G`i5K$Xg z_4~~fLVSJLWbgfgMJDg~(Xv=niFs=0KZ`#UvC0EqIe5iIBJfH$%XL`nY!FR?I>xR2 zo28S_$xHvHR-uuE^k?(wal^rq_KE*RH5iD!{ou386hwlco#~)(xj-@+XUO}QCAMB_ z$Hf;CO^eqzf1*0|K@ho4lqWPuhX`(GuY3B@fb6Y9f(Yn_ ztvrxeVMi!_M1qA;Y~#~{hQp1qKc^);o){|SqZWqYpf>!1+}Ja85K-{|R3D zA^J0noOV&zc6M3AAu)N_2%1JSAShUy&qWwZtQzf1gF~V3^|Z1_V5ECmQyL>6<=WCI z?;4FgzNp033Pv2d&?~>;l+YGb7K<{|GCoc;g1l8@HA>|b4c;y~_22io0qNvykMH%0 z#du8oaSj?=e%6A^$^8Nx7%f8r7T%@(v=?r48wiOl;i-N9j2I*SLD6Ra7Pcce5dm0K zS1VPRt7-iaDTJXlA+o_wm^*q|z+S9;K^mj=JIapmnLJD{%r6@M?~)eMs(`263DIc4 z=*Ef&UH9<}Sy))~lqa>E7){>doWYM-1~o(Xb)?*4{c{ePv4FK2Mm4J#FN)JHwQyp8 zI9tV8j}>lHY!GNztjd$tqiZJny6wzm()Hl@-)lpkUV~_##KH~Wg@<-?Y-sTL! zPOu0oE?lMGxA~ophc&ukIhf>q|DvJ`@1pdzn5~n8yeY5CxUw8bxK?lYeZr`AoqW=w zzmKQ#aP4bMUci!%KqdQZZ=ViU<+IsRhH0plfVkLQccQZ12ZBa(ssRQ>N>3Vp{sm_R z$>8)LYnNmYfYz+OgQDhB56sn`LL|!Jp639yk^4ipHPa$K(Vk7^`-uj8dYAGD53FzG zHSg|)fQjVRbT=8)Y;t)~D6Zgb+rodLeUbDJpig{7^?*-f_3<(rDR!%qI_E1}FdXB` zAK6l?umAY2088ex^B$^s&ZFB(R7k0%8s=XE8H9s+eu$xgAu2t;4x(TtclpuB#z(YD zD71zaT1Rd(b)Lj5@4JCI(B_Cluu&GSp-B69TgnhGG0Uh`Ay$1%*k`D1fmAv`_S61x z;@0#b&@t|He2vgd(_AnV!C znW8cgr{%Pub};xv?gkVO)E4G+0l264BIS92V!Y&BJygJ~y>5CVq^p%oO`-5}(n1t( zUA;Oot;x^#Rlh-J-xCjylszlZRpvD#4rYzz4p|$`1cz322;j=Px{r6zYy}Lm4)KW# zs^@Q(Lasw>po|M{Lbe2Ia#Wwkk?+<;MsJ-l?jur0aQ5{8;{q2CcM3PfCiVNlLO8HA zZTIlW?#bKg=?v8z+YJr*mw}ZoEU7uRTLW8r3}z?Ji9OWebTE(EA0ZxY?5eTDD8W}C z(oYn&Z$u04Kkt;Dz1*$-d%--Fe<*vniTJk$j_9Bnf81I(abVu%bAim;yl3kNA?>#t zz9Z#E^Qp@##PcmEQif_6VN{P<>0$#UB~0Y`-ZzQqN*O!aCxKO8@~%KSVc5%&=0*bDCZ+XATRTP!h3A& zIa~v-4OC(zBdrqe3p9=Ssq^lHt&)Er1`)mov4QAUJJ@md>mm_gx++t_Y7wu6I&Pzr zDhGX}P0rn|w*<%U#YlEMP?`v@tJ((ZyYRd@)d}d}{X+&_+!qe1r%a8Lua8Y-?ouus zQ*l!}OXQ&AWo{$)sIjn9=1_OwUwZVcRO0kox@3k|_@R(qRXEe{Y>D6Dx|xT2@(!N+`eNo1Li-_TaoEa+?XpvQx`!mvt4dgc!M=@vbGtJ@4- z$W;*E$jTjgYiB=fPNyt@^fbduTQaIf=r*@cuBDPikyC3X_=;88T^bAySFL)O#&-o% zjj!BCK14B~Ah#9Z953haYV7UM+?OS~8;tEqmJavVwVdq3iAi}wQ(K&3{6ZsVrbGIv zuLnAaFpg1tbGBH;2zNg$0UHy^2+{{@X4*xRCQaFvHrnj`MGz<+^1STNBo8Z2qMEO8 zD!zTgIC=Xrc#?u}Ur$ECY^vD2)uO3x(Mw7zEv;`q)VSYTn3aY3>TN+6-{08@lPc4E zGgo#+UeeR6=zB%=5_bpl#sr%dhqqrFkgW9I*R84VXljSiK&W8FdpYyc?ppO0svUM= zTy`n?uk@7r;{ke$RP0gIO5I!}GGNvG%~}FQQ>47eE%gbNre6Ffo9}!u=Cqg0whi&g z)JgYw;LMDieXX3if(9JfM0(A9WBwqyFnaQ`7S)_P}d%Y({H(FMj**hNbvS-&J^ zVN!10ZN%gY^-oEWA-#V^(EEMp(eEd0`ebs4F2@uAV4}@%Mxo%X>X*IejO=lb+!n8^ z4^Vbv9+V=C?n%;U%c7St-;6`O8AU)YAHvr;C`}e2L2NVf(zY<^h5BBW|D>ePk~o9S z$J&z6|MBO#64@;(*}SLlw&HENM&r!iUvso#c^e8A%-W|@&5FJejrKDvKmV*=Q}0`+ z!Cff=dm7 zSjm#ck3uuwb4jjFs(zoaCd63rB%kSG!)||7a0TY)8vXsvO)Fjt&KAjKdZ(ng3zn0= zT7*9S%&5l2E!xB^vQ!E!Ubba@zIX_><3MWxT__60`*5i-y#_7VgWc94%e^;RRXQtf zb?TNZ{box1p{cJ+Ykq-`*i17d-x@C}^1(gV`Feqn6NC=tceI2FUZH%1t)sADPu3?9 zaQXu+XnEQM8KGl-*D7lM?)4`@`>jPt94_IK4M(+VeUQAGW!qz>5BKf9emZ_??&%Ix zS`N6*dRlyW)YckJ$4vhCB({QNG55~u>B$i(o)V|D4n(vTN7kcg_TNBKrLY|zoh5u( zvvm);ygi{@dHiZ3=|ugM=HONk1Jh6`eW3m{m%hf673}Ru;+%9ZyfIYQG{?ZPA^pJ$ zW{>JNy?XjS=QbUIVF9i+@)F92fTnek3N6&{YgOUmjp`35iqj!2sORemykTJRLP;Z3 zV;d{m{qkz#2h$iuLF`V&L~kPT#v{U)mPQGe7I0W!>WE^pWbbz&sLi`z!&v#T`*!AE zFoy(kYMdWy3ht=ii5$SM$%GqQ(Enx{d#M@yt|i#cAs%AN;AE%DkLfSw2lmwXe;ku+ z8jJAz_wSm-IHg9+?_TQR9WdOjhi4I(-#;=snNyY3g}_aD+4F`kvvT>_n8IIkXE1^8 zavxeG(9eKfsOS+dv5WpXQJCMV_4O;>CH-T(#XRR}HS8K`!>t0Gc_6z_MZ~>=kW*ez}M;*2dQIxsRSwtHO|uFj)XO-mUJ3ez_2MLpm?`+siCaC z=56Of3W*Wi&x!lx_m7*ku>w9LuJAW~t)W9OSkbbEbLnp5q)@_w#3t(HV~VrLl_9dr z(&^@G_4Si4|7~q2-ibq|b+WTy9lO-46jutXqvgd#otFcj^@!GiANwWd-!f>*obRFzjR` z@PMw?zlTLxtWHg0yBK*{F;~(7LKXQsRKJ5vXM}y{njz%g8r7jTR;wpSLZki$L~Q|g z=u=5N>`f^I%)14D3Jo07lZz3rJQ}PvyvKFKQPlAO{|GbNUQ$12MK*DI$ou?D`*IsZ z-iVRgyf$}xHI*XkOPJpP6IVt^PX`T#y|QBWm<&v{YnC!C&W*CExunPwG3oNtv`_CJ zJK}M;=TERnKv<%G=BB5icvM_?11is=P30W$tgFNTX?=(0MmTG>f{DtNND(V_o|bH$ zI5UNX4=xGjeev2K zQ#;`7e$_GSPnb9$Kc}cH9ZsC|nB`N^8bPUt$4)s*)%xTkL!ZvC?OLnCrK?eC-TtXH z5)2pSz*VswL)w{t*l^k2oyf(7+oD0C^t+nkTWm!^JTvyUQ6sh| zW$VPbv9ai6kTL^7iT+QRf#cM{&hbTJFo^sm(Dx{n`vT|$7J|h~2YBYfZ4(TWbz7UW z)~4;W<(VF3*xkQ-Pqgk3Jy23`;c%JLJctatjunS0J>Sk28oGPYlnYcJdVQB>cv~56M%WSF4O41r2#Azdme8 zeK9ZC+)U&vOzD}Nr2h8)CN|?#bb3t(aQ8B--@VB8X4Vmd){O^&cNK-PX|eSS3HRn* zf_N|oQf0l{d)#eEA*$sRCHp*U!MCb1%3*0ThWCagbEq|3(u^+Z85*a|ddU76Hx7_@ z4adqdKDt|zZzwSCNO_l_u)Tcs_BW~j6Q?Fv+0w!}G<(Q@v=TLIiwI_a+^m^jGa!zI z26%sE1L(+vAQ4JGWJeNeif6xa4G!f=PPsj*>2qm%EOxec&2uK0Vwis{ z3LacIhNC**tg8b!4j^`)n|X2URji8J)M7 zqCtQNZiDuN_?w}A&)*JomYc)6mbZUvu3SkK)RF3O7&NKV%gaR|fNv}bT;wc@rMBcQ zJxX#@(i^_r&6KYfC$crZHU86fe+B$muK2&enoo}}ykX+c4awnGxRzCoyg3WGn9UK1 z3r@`;Qg8uJERevE2bTOP_-AqBkBC-&FNRGgMHa}B+i5XsQ(4~Wu|>Qq z!M@ur(;Yi_p>CE7!zHk??=F#upmAHa6cBv^k-<@HLi~7b8xIZS7>ZSuHUG7n!c} z=QGF+zbY~}e6{hTNAc#jsrYM6zSOmCZ^Yjcyg=he)7r)CZVNZrt-Og$yBT1WmNnYP zV+0Su=DowlGh28ENQTp1Yh4RgKf1QGxxH(9<|T zX20=2jy!4Mm6+)IZnI@+sp;2}TinTUadhg_jnS?nRTmc0Do9Ca?nlgwo>O?IjDKf~ zzXNMG$HV?9vHt*sZr6WQpG(tkZ)%-85UQ4K6X|ig??Qdi;qA8T5%48}dKpe-r_i58;HP8HM@#d}Z(_OT) z`&2gChlak{X>hZ_aSgoiUCNg;eA7IvcRZ5wz+gg*1xmuSX~}=NrLTY2*P=1xj{Q#x z`yYaT=q2IL`|A7u0E|&ykN*G+zX$yOX@8u*{7n^~v!~tv0N_IAso(KuD|=#XH3=Z| zJpTYF?O6c?NWGXG^dko&j1f?W;=2uU)qGvyi+y6x&XPok$;ftjp%^>*ox68u2N)f3 z-;6Qf<$4}*j+K8nTt~Ep-s?uZ%BL=6at&e$FDza-WN4j;!vlgj6(7K_+H8CbeM8KJ zwGD3O@+(iXNeW1_!I8OTILnS0V?1z1I5lvJ=kNR%r{7&%PWJx*=@$x7rOsFb#~H{6 z@UEEqHx~+vPwVg;xwnb*=Y@P;%-33$lO)#A*rQ2zY9xOXT}2ZN9lLO3jPabK5D5iw z^S9EM{{RJbe;j--w%4s}?B>=lt?lSvQLR~J(0c!PhCy0wIbgvjem=J+TD1^ZOk^e13?z{ zmQdUbtW#UZ3VE=}Dl;M8f>6YxDJpnj#ZLqN(;DxFFJsX>Ll&W{XxCd3EB2L6p{D>! zk-b8Fp$G^(!p2Zl%Nv5*SIs8)$NvBb<+c2J=h%Pk^idpe+dTITg3iN;*99Uworx+G z6-Fhofn5iO?rnTqrOSB=-hGvq&XK&7ksBm{-!mvIH?ROMMmpr29^Uq|wfn2D^Zdr7 zr7v-vPsD3UuW#g&NAW!R_L*vnDm}-T)5Ly4Sa0F~0E2Oi1|D06RS0qC@k=I=t;KNL zq!541vN1n1HV8k7IQ>m@9v-&5id&1#8aB9F7#8yB1ZL(40BDnRib2?dN7`Ak33Xoh zH?`4Y<6A|UtmLxPE*@z!AI}?RPmx+jm6_O{Hx&{EMrQL#By-|0^(XJ&Uf0v){{Ti3 zv((bkb$fpcL#Nzo7f|W`T;*7!%l?ThHx_^MMrJCf_j3K6hGX7WD#dc4Pj&H=;=Y-$ zd^*!_udVI%Mv~5LHqj&2E^nl^9%{U*ZW+op)biLgit>`tZVF@h{O3o|Zl}_$t@TK3 z?DYHVGGe;8Mvgo9B9yB}8!K)E76ukV8NrUT{BiJa#S;7g@hf<0)?IP5`>}s} zqda0aZ!N;dbjICW$>x+6?X-qf@>pboH|<_CsV;c!D{s;HiYeaKIh_;Zzrx=L{6S^7 z)-{b9Nv)@`cv=i+<-=fiIVc#GmzpLwr%f*o_i z@yeoeVQn%jEZ}VWN1UK+i*;MA-xytyq@DG$wFxFM!2LD{aDpa~^&8X>KKD*R$gjNr0A;WE zD5i^XcMpR6O&pSF^CP4-x{huw^!Xi5>vw*9*i3K35Um#MZg4l(&%d|7>?N*zHu09V z;_rugHT<6sr;01N3?*ig$OV5AO1nlGqlHLeaHwL~=yz^bROq8GYXwSnT)&U}AI$2- zVU*+T=ss@ixBLT{@W+Y-?`d`yJa%)6^!`^!r<8)u*(cYh|~Q z);O1Z%NxeYBv9{0%!OIwQ^4FqV}L8>+Yb>dX_4Cb@LX;3w@MfQ;I@Awf1Rb`3Ok{4(o zFXc}*V9gd4V`l(GhLC@kz%8CR+lKcq+8f3iKf)gX>YgIATN&q@eE&BHU2*(40JxfnY@IOiQb zDs*8LDx9`jS$XvT06(9Rl%(MKQ`P=Qp=e$O@dl^kYb`HH)fRvL8&nZrrPRS)TPw58 zRbERH0(Zi<1d4a?z|TZ#+Ta>8)(^_+p1syRb-va2Vyd5y5e6W6DUoWCBIRY8*-Bf&;94 zckKK7ZR)-P@dt(UFCE7=t?={1H;?D(wlP{qszYxxnIwOb+UcSa09o_pnH41pVq&Po zk6zOtw)jaNrSRv*mrEL5O>qv5=0!AzO=)6ucW*BMD({V*3zcSQSltyY<40+gl1DNsglO=KYN)^+ z&fdfES3--zcRH?#b+=Hrv7I5cNB#ArA7^JzpFBwASq=ywh9~AK82t7B00i*(=c;&f z;i=Q?beXO-Z7%ZIw6R^qJ;l|cO*=a*9#_c1-KKwx875vZakZ3>eE7X`zGPlpeqFro z@<=z0!PSaoxX0a5jz?3_8uRP6>hjB{_4yu+882tdul;uW&y)WEXdf7_?BXVG3~6v% z+-ug7#dVo38cQxi3zdyrV5kpZw!{uc*}ZahJCuUKf>UWZ{6Gri(I$u``iF)Exl z%uUajPy_q8Ct;ERFu%Z!Lrn2ziQxYL2;XRb6ZQMsCDc~W!qVJbv=->9?#<>y8Fy7; zOmXgUj1^LFIdceAH{{YDJRG;we zkBh(bC-}qv00C3~0E(iyd2t`i#qBHkeaDFFws)ToynVL%Z?OH2?%PjqEQr;WyuaS> zBbeLF89RdzfPCbFoX)x7ESQFuS& z+=&AWkPaLxNt`ZELO|QPYesl_yz6KAf0`mm)1Q&Y6H$n_Rg2v^OMCe(*_Eb+ik+nG ze0N-dkb55Dnz1tf012;FHfrZV!}x#OOaB0bdfrRBOITc7NQQjGrK2IkE2|&6atf2k zA-!;G*FR?e0E)Vm&8q6Qmok0140cyDI*`uUPB1w6vZVh256{ls#<{6&7HG<{t0@>D zj7!tdekQW&YJq|%2tW6hQmm>I<&-8yWaJ0FR z>R%PL>y0PGmN7@5_-^yU_w2GuYj=4ZN(zNL0CGu;ur0Yk05XBM0KR{SziT~XOue`8 z--mR4Hp5VmAd%!oXdwAZkfCrh%98yuTYwI0U*RW-?X?RC^cy8X|ET-^Yu&F)OubCV+^12lA;>pT1 zg``}>pfkpfREEHBGLJ6KE16&K?rBS%>lt#h&Hn&ptry}q#~&NVCV^vp{{RUli*EOJ z_nKo#WhJ{PN8HX>Y;%v5zEa2Ta(36!UN-nUu6PRPOpnHPejU}WudRR5;w$|Fq2X?PJU<1;jBr z$r^ArMhxMj3d}yvxC}@``TP4{_(%4hz4+56rGI;==>7)PFB;myHrL^`(~J?TG+$|n zrU6;;Da5L!q$N}nfmeSTe7w#tUH<^!Bz1ci3VhACspuXV_y|5Bc;4Pm4C`8Nh%|dy zQf*RAKItz10I}`Fng0MucrGS@lF057JE@o`4CM|hgz*QDbuAm>G}roK+~~1cNcQ%& zBp8jIzD^)2G0-vGJCeteYk&5*@&5qBAA%nQto82_Ygbnv5IlcrqFJTo*z<0$En+@g zuX8p)VAnWBRB#x=SwPwym*>9%d}g=tC6sBTYnJzRyOYVV)*x&$o&NwT5_iI^a>w_X z$jMyrHu}Sg=BTvV%;yb{{V!Gz_G{Xe93jC8I~rQH=mj^aHX;U z+mJ8_!wta0cOQRMM$d2dp4V0ALadh=044Ce7W#P#R@lFT;6??Rx*EwxRKQt?AIZfva(1WNhUJQ zl_L*=qz*o+{f$51qnF1(i_yZl*wr8E)Xi9If&)SRbQ9*asUU$ zelq^cQh1_iHIEA4L2InrAG8>!b8fnimy@xW5UlE??P6DU?YQ}d-#ze6v^tcq>3Y?b z^{%;LI7WYpXYyKfDkQ<+jig}UXYS-}`B`ed2G0`Yq(iaV(Nw>2b*3T&*q-n*|sKJs?UMn40X*fNQcClzKeMd zn`tPqi7z3N0VT@Du48ohSbpjA!BPWpjApdIW^aGm1%4{{wXN^8`1F{Y?GnjxZ7kO! zGZtOK#^5r>*gjeo8v#&AA29dbH^ep<`hx1(=BfRO@cu8{&kfD5oZ6GJuSHYM!|hhe zf2s){56Kuk7K=(!`#b!NBN)zZaO?LU1M8Psn|x&PCZBQUeVy)s5X{RUjak@!5P+HOi@V66y)wgpzQg4W8ue*q}Ft~p|Q5K z`yIO^e8J_(ZV6RCG5MX3VtB^hq~*27)a8GRsSc@pwEqAjj-@_XS)Rl2C*!uI@He%I;?hjjl|0(w5o+;v}EQrO}wb% z0Gyn$CnS=66G-@RVXu4`hQr2MdTNqeM;sB)HHEx0Tg8=yUKh+op-t?>G|B|0E`NA} zxQow+bHUB9-o20Zru~vUapS*-`Zd0b;s|EA(&O?j zQA1nFD#)o6p>rpeL#blHfXGZ_?jUzy@lK6ML9~^_4~DH;H7YdZ(b9g${{R4H_($Ro z6*hyfHjm-0QV8UK4{C*$(hG!Tft$}}lXgUskVp#2w{s1kj6aILC)FqTr8a+&X{R=+ zeWuyLHT9e~3HF4})Z!!aWA}H^RDxz2UuA zQoOgGTdgxtlF`gjB*4YyM#{{r(y7{b8x;CuOa2Kt;$IMWoA#0Th4CIw6CG<$@ZE-= z;kosFV&xk4`EM`ny!m3emQdbjmu%52idg>oAC*Iv9)^^~b)SFP(@yw_
  • w ze@oP~SVpUJsA`wC4*^R!E-zz-&c@CYG%0nyHZ3fmBn`R24z=29KN7wZYQ8P-?}PMj z5wFAF4|sOHh%uE7X7a9*WSD^H=tY_@M{FKMv{s z7qru(hgQ<=Jjb~6it?Soc6Z~yws(6XhQn>MfGT3kPzjcw&ysKUn@FbC$#F(!gs! zb>=sc;u%@j5<-9dgO78-JqZ>2b*g*@@E^t>8-HndipC97RFcjq7Ut{3QA*Ip6A{98 z^~Wcldi=Egvc44C{4@Qf*G<_BFl&%axt0Qyd7*o`JL>Oi z+iuIq<-xepl+|X+Y zBWj-td~&we7y9L`y~W}bYXGhxOrt6}i<2J&5g;qUR|?xjdN!wL`#D;q#k>XL-BR*v zvlK9;oykXm*x<;l9<}Y)hy1Rbz^y_`Kc@$%R9)j zfU4z2)g%%@DnSG(^6!t{5cobkE4J3pUeq2)9{a=E*W2Zhmfy^2g^F8-K3e^xWp_rb z&aw_b#b+uqX-Ya-edkZMe;apQkA?m@UoU@-{vO|2v@=6;tp(Y$jv*bqGd#)yBgwaF z?2wK-CnN#KQ}8P0&rk4GmEy;9wn$@&-q|BFOaa{6l_T6)nNEH|!lyk69=E3c%|8V1 z^qU<|#UB?ny&q7L?Au@3+V~>!>dXzzBvHr&Y^}6mgKrDS!i*>$$MEa+d;OmLU88^6 z-beA9#QHV$i=>)$&Ci1`3riv~{o<;kvgJ#wBN3Ghr*e`GRj{)55QP37YrRsonyqx# zq36Z>*E|QtUkUs%blN|OJW*xh4JS~J+2V<;T07}w8)azoY@nUN=1s+9a8^IzEtT!Q zE#BSyB=~T?B=BoCp`yl!tn7@QSX6&vR_-K?!zcGBdoX3b`Y1H46_p)JY}EyUA_$osg>yRJ4813HVpzeFw$A50`&j*7dC~ z!}jsA#i<2Db2PTcbcXT-19lN(RgpeYyO#v3x~C@x?E&D~?yNN}J#RHD8B@*ke4n#O zj)!P1xRbO8;F6_+lY!sU?*1G639|Tyu2}d-;>EqDpZ$|Hx=#m!^*DT+#xj5+X)^&u z$K6QCBoGM5sB~Z1ci;|;hFyPm;|Gj2D0PdKGq~`D%mUE1*vT=+5!{=IV}&1ha1SH0 zRBFaPdv3MZQ>obEG~bE76~C}qqSfwn`}I}}Z>s6C?4KAUD?{fm3~}@91P#Q2oxQij zKNx?)(y{Q)pW-hK`L^18GXDT&FNUwu2Qduqc8H0AAgeQB5a1F{2qJ&Ve#1Wi{43+_ zN*4X3wJk|ZUuuFY4+82V>}dPTGR+u~B?_uDfw-JNv~D@VMh|-t9Crw_K4E2d~@)( z!uOsN@kP$N{{RTxkg|W&EOiT5t-itXw08F>swFYv89cJ^usfqhW>#>g#Gw-z%N3007z6^?`>XyDZ-JT~v2P}u@uyw>)RE&@ z-~JHYM$XRNglYtvni8@`*>jaXSRRSfAL4)PkNZFTN!7o!*W!QnvG$u>PyL+^k0e@n z%WijzdVq1!N*%-iK4Fc!#|rIk-fQlE=1plTi<&$3K11+_i$CEJ@ZXnz9GBm0aWqZl zDl}+8C(M%@RBatXkTMr~v}m8P z*X-M<>K9sP{4{^1^J;f?+bt~r0O4NhBHrD@63o&n;iUO+s-<&|0SqwD3VzG~00R6I zss8|HzsJp5O$a+g&mY5`QKX7(#HcE$$344kUAaAL%CD8xz2dd?U*=;9jVmL}HNW_$ zE-df#%jn~p&S2;wke7#R?^XbTz+!syk;oaZR`|2~cdmb<@QU;7J|EO1)x4$qbTQ2w zaRe+7`D}MPXDSE@xkE7o?9Fbc?6vSN=H^)=_~WQ*5y*^UXnY-i7)DHuj9FWg$0MgB zn)u`5?}c^m68QSdOR!trXG@HkE@Oh<=SIj0BFe*-`PVUma8s4eMRG$ga;q0nZLfX1 z*`1Vg3bcPYl{aNA54QgRW$zhkekZc*mX6DC_e%_|Buc_)T4`kRrfuF|`aG|)5{rWys_hLKdA~Sy zeMiMM{we;zj`Lix(QWp~Y+4y%idhOM+#>;1n4Eun?mp-okN~T9ej@Q6k?~q>I>yCp z);R+Ug|uaR<#HXJ+aNaAaxj0qau}9z>Z)!wg}%+-;rNprX1eZsUx+>x{6_d)@jp^e z4KDKZ@Qg@VAL0x703dG-hGbbCt51CEhnF z*s>m(-L-)g?I%&GQ%}_{-`Ak|pw*epf5LxD`(J<0?}h&W@Sf2>`4WoS{{V%@bN>KA z%WwPQfBs3Ly1lk1`CtA6{{RG^XAbZ0MjnUocU18|kGuz?>9-a!UuzapXmT{}>j{w_ z?&>$lQbPF&wEU#*3OO9tTdK>Zzl1dF8$AZ!P1O7v*LrTha+k7BHOrLyCC{3>loWqo zCD{V@W+NEpiYwXr)l}@CMfw;zFt*)U?Aot}ZGI4ZeuwS)4xKlL?jo?ieInBSRY{_j z-tI7_O^V9iX2v)N8wLqA^54acR?ozL89XC#dkpDeqTa`Ia{!Rc{z~6W!X;+Gf0PBw zW2R`LysEg0pIN6n>&^cFw%G9TI9h*E#i_+>cdz}qV^hGNwwH;S@KT=~T;AVXX{+J&(g`;9i*cbr=Y5zz$>v~@ zzhGS8k&@kxXrjG3n3|4T^j*6n*r!e@eg6QNO#cAEMZO?iYPR<`Gw6^qh~s~e?X*|} zd1_M!2yAZ%ldZVAs&H*kCUkH#O{ z3*rZW{5PoTmyO|BH2c|Nx_EzJ(WBlO6&)}R00hYqU=JsMqU55mc)F@qzhBgHryFcw zLH_^+CGp3KHBARpo=qRgNaoe8&}f$9dkEcA&0OKX*TzWa`1#;xrttUe^YJQst2Jiu zl6fEo^mlWTp8SMk?s-J}&%B_>~94OLu?OwGRx74;EXr zCMzod7#EH`ObS<@rB zky>=}$PRKq!b8C6^O1kfGuQa<_R;u*@XFUk@+I)$dw3?av~TQ)ob1YOFOV|Fd|toD z=rU1V(8N@7X|tb_KF;NDhd;KLkNjb->RPp})`qv!!yGpvZ6+@%AdEDLh4K7en!-(Mbf)RhkQ!?u>3{)MR+eo(zU6f7O~45)<)jOJ9oEn3L=cDIZv6gIq0XY zWNAJM)R)G7Eb#m4P4@2zLk-Qz3`{aC(#H~PY;GrX(Gmy)8_3B3F-3I!ZnD3<{aodz z6yB%3H|i_!1o3_q{{VuQ zc>e&!nkJ=vYCJsxTunUp0rXgRF;wRqoPOtkxv;--=h3xB~) zd{yBKT|V1MlFmyzJgb}S7T#H!;qccjyLZgKY_sgoAr^lian2pCf5A<@AZY$7w9%O8 zJMFFh+Z2)LumZcEpPPb6WqfhdZ@vmEpX*h5n!j@!E1p~8pO3na?J?t)*6(g4j^aq8 zg-mwqZVKXZg_T&0{_o~LPPKQ#_BWQ^B$8WwO6$+k*6R2dJTSG6d0Bh)5R7}V=qRGI z#A9nlw<>>@pCF7?(e3uXwTHwni@HyQ^>zOMghtvQ5l=mioav*-6z#&q#^V9Hs{@rJ z?#cS${3Y>Dt?{ekWtF_zwdIzzec~NX?%}PLIBji=T4bv7LN<~eg|vf_j4WLVVhSs2 vII6Ac`jt`Sm)Xht z{ri1;_WbAUo;`bey6UOwl79MD*XgQz2Q~{^1#mt}f+Yb21OPCE9{_9(aQWb2`3V5z zbt7{X6@jsJ=fvk?DX zVl4~wZ=47(0l*FcK1B z9|t$$J}@ZaSFnVHfugd4Bv|&tKSU5+j2s+n{#LfNb8%9Z5~tME(xyaN1TX+h01prV zUK*J=JBTSN%Kp>le;Zs)|8wua1k2yHK7nuNgo4~NtDk*LCKqsF{%@=NClkZe%-IA^ z9u=NtV(M&S3&%Ea%xvP|U;rtmV-aLoL#dw?SVK$Ct?$@`X{MeLu{|Hr`A z#ud);;5|SI@B(iEet-oKb20OP^92A2dk0S^OLGesN-_A8 zHKUZUw{>uJF>_+31lyUgGE;KAWq%5RUvO&psOf_-OzD6!D)t zWB6EtGy(uo|9|pmGXMZv5CCe29gLie{?#5lM7TowKc$^NadP}q9syGv0Fakqu=Cdd zfD#J;k1;UV{ZAO|F$dm1TxYE|uvP#U6-WfuKnTea zEiA2^U0mJVJv=`Lehmu#77`j38yBCDnDiq#6zKN`8DYJ#^%=c&hFmn+4;rg)%DHo-Cte^0O((|;NicR{cpT*;k*!$ zkU&T%e|aGwy2DQpE)p^o`!hT-B@`pa7t|d7sQBVB*_CZ*G@QyO1jbHd=!CRfYjmf7 zsr|$3|BhI|{}Z!+6Z;RZ1waBo{6|2Da4msAa7`h>1sMhTub`l!{3EFUCFuVM#$S2< zZ-K!ZL4dabulx-Ddya;J_U~)|*8sKzpB%Aa^8h9Y0X~>OxPU0|kVS#>;0psJ6hcH# zTnl~APUC>E!BQWWE`??;{OGTkn)JWl0;%}A5Z4(%Pf!(vD5axP%nkMaOaZ7q|IniD-v%fl?i-~pYw%+)p*cvz*VO%>B zD)jMc$n15gC(G|5^E2-jRDSPnG$1b)BYYzguo89wzYPb$> zl*yIj{Z_+bq7y?I`xa8M2Wj>mlaz1Ol;?pU8=xRX-ITLd&d@ehRGzZbQcn_ssna^& z;#q_U`tf&PQnenY%uR3F8XU}g@)ckh6=04`k6rZ)SrXCfpb>ITx%n7h@Ui&owL$h0 z>4zextNo1;$FV26cRNXV`{Y#b6+=QD3zvM0D4E_Hj69wqdpL1$_Vtx*OUztyu$HQ5 zPp7lW#=al7;@ot=+AvtIol^4Ssdb(y_1?^r9AcZR9!P7f{E-`_N~C7Ctcr)d@V#Y4pe2f$mpR$MDOpy%)W!i6oj& z)3ruv?BP^pW+Q^Bl zPRKw(kXOj+v@3lAwV{tgz-ppW02coh_l0{K48VR+ny4AD$McxcnjTbYuUfDi-`6Yj_?=7^A;S;IewN&17~_ojuV9?ryjNS*<{h;0alDEcH0#_Mau)8 z<|aH4@1z&+|41nCEovkwVtzIC<2fQGok{iR=y*B5Ty}TyxhI4QQmq!XHB9DqHKrv_ zDuTBrwh`zbyq}S_6g;^!zaVDsm0Uv!QSW|DTZ!O3M(StF1aWf?9Cp+an5?~ic~(sMcfGacOvk?YV$ zWm!Lgq0vDuOQcy16&rEqh$7mHC+c}n)S#<$mWf` zxk-CANL4ctL#9Y&8lc+8TP=)c;Ky z?UY_U>=XB{wIPi+`p!Q>-d&r)>Ig2?$nLv*rS>A?+Q;U0rhWdpQ%_K$_M5>ZH!<5d ze+t^C$s-d<>=qk≠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