commit de866d23bf07ca39b7e3c0b84b12c64e80fcbf3e Author: vonhyou Date: Sun Jan 28 20:14:37 2024 -0500 init diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..a24f915 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,57 @@ +cmake_minimum_required(VERSION 3.8) + +project(raytracer) + +#IMPORTANT COMPILING DIRECTIVES + +# 1 +# Enable this when you start working on your solution and you add the file RayTracer.h +# in the src folder; Without this file the code base will not compile therefore in your +# code this define is disabled +# Also do not forget to create the src folder under code +#add_compile_options(-DSTUDENT_SOLUTION) + + +# 2 +# This define is used by the teaching team to compile and run the official solution +# Students: for your project this define should always be commented out +# If we commit it by mistake please disable it and let us know +#add_compile_options(-DCOURSE_SOLUTION) + + +# When testing large scenes the debug mode will be very slow +# so switch to release +#set(CMAKE_BUILD_TYPE Debug) +#set(CMAKE_BUILD_TYPE Release) + +set(CMAKE_CXX_STANDARD 14) + +set(CMAKE_PREFIX_PATH + /encs # For ENCS lab computers + /opt/local # Macports +) + +# ENCS Eigen3 CMake setup +if (WIN32) +include_directories(C:/Users/ambec/Desktop/labs/COMP371_all/COMP371_RaytracerBase/code/eigen-3.4.0/)# for windows you can directly hardcode the paths to your libraries in the include +else() +set(ENV{EIGEN3_ROOT} /encs/pkg/eigen-3.3.7/root) +set(CMAKE_MODULE_PATH /encs/pkg/eigen-3.3.7/root/cmake) + +find_package(Eigen3 REQUIRED) +include_directories(${EIGEN3_INCLUDE_DIR}) +endif() +# If you need too manually add the paths to your Eigen library, you can add it here +# do not delete the other + +# These folders include some important header files including the header files for your own solution +#do not remove +include_directories(src/) +include_directories(external/) + +#internal includes +aux_source_directory(external SOURCE) +aux_source_directory(src SOURCE) + +add_executable(raytracer main.cpp ${SOURCE}) #The name of the cpp file and its path can vary + diff --git a/README.txt b/README.txt new file mode 100644 index 0000000..15e6eb5 --- /dev/null +++ b/README.txt @@ -0,0 +1,37 @@ + + +This code is used for three purposes: + +1) Build the official course solution +2) Build the student solution +3) Build a dummy application that showcases some of the codebase. + +Each build is controlled by two defines: +COURSE_SOLUTION and STUDENT_SOLUTION. + +If none of these variables are defined the dummy code is built. This is the default behaviour. +If COURSE_SOLUTION is defined, the code expects the course solution (this should never be defined) +IF STUDENT_SOLUTION is defined the code expects a student solution is implemented in the src folder. Have a look at the main.cpp file for the expected interface. + +You can switch on and off these defines in the CMakeLists.txt file. + + +Building the dummy test + +1) Create build folder: mkdir build +2) cd build +3) cmake ../ +4) make +5) ./raytracer + +Building the solution: +1) Uncomment the #add_compile_options(-DSTUDENT_SOLUTION) line in the CMakeLists.txt +2) Create build folder: mkdir build +3) Create the src folder: mkdir src +3) cd build +3) cmake ../ +4) make +5) ./raytracer + + +Note that some test scenes are provided in the assets folder. You can do a soft link to the assets folder in the build folder for your convenience. diff --git a/assets/cornell_box.json b/assets/cornell_box.json new file mode 100644 index 0000000..9845dcd --- /dev/null +++ b/assets/cornell_box.json @@ -0,0 +1,354 @@ +{ + "geometry":[{ + "comment":"back_wall", + "type":"rectangle", + "p2":[556, 0, -559], + "p1":[0, 0, -559], + "p4":[0, 548.8, -559], + "p3":[556, 548.8, -559], + + + "ac":[1,1,1], + "dc":[1,1,1], + "sc":[0,0,0], + + "ka":0, + "kd":1, + "ks":0, + + "pc":0, + + "visible": true + + }, + { + "comment":"right_wall", + "type":"rectangle", + "p1":[556, 0, -559], + "p2":[556, 0, 0], + "p3":[556, 548.8, 0], + "p4":[556, 548.8, -559], + + + "ac":[1,0,0], + "dc":[1,0,0], + "sc":[0,0,0], + + "ka":0, + "kd":1, + "ks":0, + + "pc":0, + "visible": true + + }, + { + "comment":"left_wall", + "type":"rectangle", + "p2":[0, 0, -559], + "p1":[0, 0, 0], + "p4":[0, 548.8, 0], + "p3":[0, 548.8, -559], + + "ac":[0,1,0], + "dc":[0,1,0], + "sc":[0,0,0], + + "ka":0, + "kd":1, + "ks":0, + + "pc":0, + "visible": true + + }, + { + "comment":"ceiling", + "type":"rectangle", + "p1":[0, 548.8, 0], + "p2":[0, 548.8, -559], + "p3":[556, 548.8, -559.0], + "p4":[556, 548.8, 0], + + + "ac":[1,1,1], + "dc":[1,1,1], + "sc":[0,0,0], + + "ka":0, + "kd":1, + "ks":0, + + "pc":0, + "visible": true + + }, + { + "comment":"floor", + "type":"rectangle", + "p1":[0, 0, 0], + "p4":[0, 0, -559], + "p3":[556, 0, -559.0], + "p2":[556, 0, 0], + + + "ac":[1,1,1], + "dc":[1,1,1], + "sc":[0,0,0], + + "ka":0, + "kd":1, + "ks":0, + + "pc":0, + "visible": true + + }, + { + "comment":"small block top", + "type":"rectangle", + + "p1":[130, 165, -65], + "p4":[82, 165, -225], + "p3":[240, 165, -272.0], + "p2":[290, 165, -114], + + + "ac":[1,0,1], + "dc":[1,1,1], + "sc":[0,0,0], + + "ka":0, + "kd":1, + "ks":0, + + "pc":0, + + "visible": true + + }, + { + "comment":"small block right not visible", + "type":"rectangle", + + "p1":[290, 0, -114], + "p4":[290, 165, -114], + "p3":[240, 165, -272.0], + "p2":[240, 0, -272], + + + "ac":[1,1,1], + "dc":[1,1,1], + "sc":[0,0,0], + + "ka":0, + "kd":1, + "ks":0, + + "pc":0, + "visible": true + + }, + { + "comment":"small block front", + "type":"rectangle", + + "p1":[130, 0, -65], + "p4":[130, 165, -65], + "p3":[290, 165, -114.0], + "p2":[290, 0, -114], + + + "ac":[1,1,1], + "dc":[0,1,1], + "sc":[0,0,0], + + "ka":0, + "kd":1, + "ks":0, + + "pc":0, + + "visible": true + + }, + { + "comment":"small block left side", + "type":"rectangle", + + "p1":[82, 0, -225], + "p4":[82, 165, -225], + "p3":[130, 165, -65.0], + "p2":[130, 0, -65], + + + "ac":[1,0,1], + "dc":[1,1,1], + "sc":[0,0,0], + + "ka":0, + "kd":1, + "ks":0, + + "pc":0, + + "visible": true + + }, + { + "comment":"large block top", + "type":"rectangle", + + "p1":[423, 330, -247], + "p4":[265, 330, -296], + "p3":[314, 330, -456.0], + "p2":[472, 330, -406], + + + "ac":[1,0,0], + "dc":[1,1,1], + "sc":[0,0,0], + + "ka":0, + "kd":1, + "ks":0, + + "pc":0, + + "visible": true + + }, + { + "comment":"large block right", + "type":"rectangle", + + "p1":[423, 0, -247], + "p4":[423, 330, -247], + "p3":[472, 330, -406.0], + "p2":[472, 0, -406], + + + "ac":[1,0,0], + "dc":[1,1,1], + "sc":[0,0,0], + + "ka":0, + "kd":1, + "ks":0, + + "pc":0, + + "visible": true + + }, + { + "comment":"large block back", + "type":"rectangle", + + + "p1":[472, 0, -406], + "p4":[472, 330, -406], + "p3":[314, 330, -456.0], + "p2":[314, 0, -456], + + + "ac":[1,1,1], + "dc":[1,1,1], + "sc":[0,0,0], + + "ka":0, + "kd":1, + "ks":0, + + "pc":0, + + "visible": true + + }, + { + "comment":"large block left side", + "type":"rectangle", + + + "p1":[314, 0, -456], + "p4":[314, 330, -456], + "p3":[265, 330, -296.0], + "p2":[265, 0, -296], + + + "ac":[0,1,0], + "dc":[1,1,1], + "sc":[0,0,0], + + "ka":0, + "kd":1, + "ks":0, + + "pc":0, + + "visible": true + + }, + { + "comment":"large block front", + "type":"rectangle", + + "p1":[265, 0, -296], + "p4":[265, 330, -296], + "p3":[423, 330, -247.0], + "p2":[423, 0, -247], + + + "ac":[1,1,0], + "dc":[1,1,0], + "sc":[0,0,0], + + "ka":0, + "kd":1, + "ks":0, + + "pc":0, + + "visible": true + + } + + ], + "light":[ + + { + "type":"area", + "p1":[343, 540,-227], + "p2":[343, 540,-332], + "p3":[213, 540,-332], + "p4":[213, 540,-227], + "id":[1, 1, 1], + "is":[1, 1, 1], + "n": 5, + "usecenter": true + }, + { + "type":"point", + "centre":[278, 273, 800], + "id":[1, 1, 1], + "is":[1, 1, 1], + "use": false + } + ], + "output":[{ + "filename":"cornell_box.ppm", + "size":[500,500], + "lookat":[0,0,-1], + "up":[0,1,0], + "fov":40, + "centre":[278, 273, 800], + "ai":[1,1,1], + "bkc":[0.5,0.5,0.5], + + "globalillum": true, + "raysperpixel": [10, 10], + "maxbounces": 3, + "probterminate": 0.333 + } + ] +} diff --git a/assets/cornell_box.ppm b/assets/cornell_box.ppm new file mode 100644 index 0000000..3a6ded2 --- /dev/null +++ b/assets/cornell_box.ppm @@ -0,0 +1,53 @@ +P6 +500 500 +255 +>9LDO{HV|LZQVvMSoJK|DQtJRqD\TUwI^VQtKZtQWyLNxFRuMVqOYwQQvHUuKVwOXyNZtQ[}UTwJg`UyMV~O^wW\|TU{OZsRY{SXxOZtNWtN]vSSqHRpL]Q^zONoG]tS[pPX|OY}NZxPVvJ_{T_|X]wR]|Vi`TqIa}ZUtN`vVY|O]vUh{]d\dxWcyY^wW]wV^zVfuYZwRZrP[vP\yPavW\xQ`rSauSg}_c{ZgyZ[qL`yQ`zPdZSwJ`x[byZ`~YavRbyTXqKUuGZtNcxZgxZnce{Za{U_pS[tN`nO_uUhxYfsX[pObmSatU`nQjy`\uQfvYd}ZerVhrYZpR^wRdy[asUeqVi}\`|YfuY`nMdxZl^[sKdwZaqU]rQeu\_vVZiJdzZamTbsZ[qMisUgxVh|]alNj~_bvVZkK\lPiyYfoXepWhx^`oR^mOfsZetZgqV`nRgw[lv_gz\isap|b]kQhtZn|_gpYbtWitRdrTclSgoYhv]iw]foTiy`ZqNcwUcmTdwYpy]cqWbnQnwddnTmw^guXlr[eoRltZ`mUkw\ks]juUhrXn~_hqVpxair[hlQgpUfoXcmUhtYnw`mo\juZirYkw]irVks]iw[]kLns\eqVszdjoTkqZmlRfkPis^fmRlu^dnXjm\jpYgoUloZlw^nr[joUis^kpZnqWms\lmUpmXot[hiQqp^ejQos_cjLlrVkjYalVov^gmYdlRkmTmsYhsZmlYilQmlWtvau{fhpVoq\kfUqvbti\ru^ojUibQpt\liUknYphSojXmkYyq^op[li\tr^khOncSmlVjjQpkYcmOmrVnnYggPljShnWlkVsqanpYrm\yn`wo^snVjm[uo[pn\rq]kgShiRojSus^d^MriXnk]urclhUpeSlfQihWfgQpkVpeVtjYyi[wudfaLndSyq^e`Oi]KlfXlfSkbR{oaphWlgTr`Puq]leQmfWmcSpg[neUh]NzvgnfTieQrfQkhRrmYrf[mhUqg[xhUkdTpfSj_NnbKm]LhbNn[PrkWqiWykZobRh]KodTpdTysatdTwg[n`OvgVqbQr_LrcSqfZteYjbPreTt]Szl^sl\nbRriZyeZo]LveY{i[qbWpdPr]SjXLp\NsbSrbU|jZpeUuaSu`OqSCuaVveTl^OjYNr^Pn\QmVHwg]fXNyg]rWMveZwaVw`Sud]sWIoVEw]Ur^RpWItXMsUJiWHs`VzcVpYIu\OuZLpbRsWKo[NvhYjPDu\Lq^P[RuXNv_Q[Sw[LmSHr^SxVJ}bWu\LrTJpWJy\OzfYv\K{^SoVLp]RwYMoXH|WOwWGsSEuRGlVJvYPrVFuUMtYQyXQrWGuVJxZQnRIqTKqYIoPAzbWsVNyZQy]VsQCuTGmTKoYLtWGwXGsQG~UOpWNvMAsWLyQEyOG|J@=720OFUOO~ET}LK}DSyLP}IV|L[wSV~QLw@ZzTRuL[yRW|QYRVxM[vS\~SRrG\|SOqFY}R^{S\~VRsK\~SVyPUuNYyONxG[uRW{MX~QWyJ_~VRsKRwJXxOZ~SYzPUtJXwN[uPRxL\~S^|UYxS]}U[sRg]ZzRYqKXpM\vS`tTX{Qcy^VpKXsNdw[ZnS_yVXwMayW_{W`zYZyN]yT\wRXtLZxT^yRZyQazWYoN^vR]~Tb|WcuS_yVWrO[uQ[wUd~]_zV`vRc}Wc~Z]ySdwYf}]^xR]vRcyU^sR[rQ[yS\rSbpW_qU\qP_uWe{[d}W_sR`zW_vUcvYTmHewXev[_uUbvXiyXfuXl_]rPf{]etV[oOdxYiuXdoXi__wVdvYgzZ_wTb}\euWerXdvXhvZd{Wev[erUbpUbrVftUix]g{^dwWjx]jy\iqZdpQiu^gv[fjNanM`vTly`aqTg|\jt]l{^n{clv[pyais]fwWkx`it]bqVhv[jsZkvYgqXhwUo{_kwYjw]ftZiw]dsUmu[kt\nvarw_n}`fwXkt]eoRjrYkr[lt_i|\ftRju\sdis[ctWeqShqYlt_osXnu^hq[inYemTgsVmpYelUot\twaoqVrs^aiRinXnu^jt\nv[nmXjlVisYop_qt]lmXjv\gpVlv^jp[opZlmWloVms\ms]mnXwvainYilUgqYpt\nt]kq\koUmm_qp[itTxqcilWkr\rv`hpZhkSps_t|dqtaor\qq\pmZqmYglZikVjnWloZplWmnYoj[hnVpp[ijZpmYnnXms^ojYqmXvs_oo]mo[hlXgdTtyc`\Kor_qt]ngSmhQnkYlgQujYleOjjYpmZhdUsj\igUlePihVrpZneYun]{qcjfVplZroXtk]so]rlZos_hdStiYfdOkeQujZkiShaMqkYvp^xhZpiTobqkWoiWtfWrm[tkYtk\rjWe\NleVylazdTjZJskZsjYsm[pbSqkWj`NpdVxl]i`QrkZsjYocVqfVphYpbUnaMymZsgVq`NsdSul[weVuk]ohXgVIp_WweWpgUuaSicRrdWufVydTvfUqdTreWoYFuk\qaSvdYo\Nl^OqgXweTtdXr_Pq]Pl]KqZJr^Qxh]vaVwdTrcMwbUkZMrZLybUvcVvaSuhXv`QucRqdVx]Sr`Rr_Sr_TxjYt_Sx`SoZKpUEo[MqdPxaXpWKj_Pt_RjVAo\Py`TqZMw`RlbQvbUsVNvYNvZMufVz\Ps]RnZMuXJuXMt_Qt]Rw]QqXMn[JsYKpXLqVKjRFnSCxZNpWHyfXs[Pw_VvUJt]Qy\RyZNqVKudTqXNuUMz\Vn]Kw]NYPzUK|]RsVHqYLpSGzXH}ZU|WLxTLuSInRGsTGuNDpMCuSFcUwVLsNDvRGxJ>~NCzULxSHxLAQK~UHOF/%91TLSMSKTNP|HSINGRJVOU}NV{P[UPzHV}NZ}S[}RW{NXwOW|LWxOR{JSM[zRY{PPyG[TX~MYOZ{RPzIX|PXrL[{UdWWxPR|JY~R_ZVwOZzRVwN[vScW^yVTvK[wMSuJUuMXuSYxNXwOZwM^{W^xT]zR`{Wd{W[|S^zUcwX]xR\uSYzO`{WXuMbX`yV`zW\wSazV[xTZxO[sQ]|SazXbzVYoN`zV[uNWvK_vQayXc{W`rX_zT]}VZrRf}]^yQ^{VaxZ_wSatP[zTfyYawV^uNbxVj~a]{VbvWbxWatV`zVd{Y^uP^sRdz[f|]ky_f{Yf~[f}Xg}\jt\^oQ^rRa{Wh^exW\qRcY^sTiz`j|\^pRcyYdy^i]h{]dsWdtY`uRgz]`nS]pSgtVcpVmw^hx[`xQftYgvY\lNawSlv[evXe|XgrWis^gtYbxTit[atSkt]dvVnp^drUkz`iz[frVm|``qTbwVnbsw`mu`hw]hrZcvYdtZfqVix[guYnx`evTkv^gvXfuYi|\qydls[pt_hoWmt^goUrtbks_krVms\ewYdmQfpZjsXir\hsWfoTvhmx_oubonYjyZgqZl{abjNlr[elUmtYlw\muX_mRgnTot[ny_lq\gnTgqXtycklXioZms_lq\lu[s{cmp\fmWns^vwdnp[pu^gsYlpXlp^qvZmpXjpXjlWclQhnYgoVmq\qw[btOkpUijWjuZkr\nnYzu^iqZnqZnp]hlUmmVot^ekUinXkjYnp[tr]qr]hnTro^mgRlqZuvbliSkqVmdQroZor\lkVikRogPnnWnfUvr`pl[spZmn]lgTjjWqiVmiWun]qkZppZjhVwo^rj\qiXggQnjYjfQnhYrp_leTi]OigTqk^pq^ngYys`rfUokZlgSno\wm_sgZmlWpdVocVyt_ifQtnXpeVuk[yjXrgXqmYthQoiWibRuk]peXl\MohUvl]um^mgWseVpiVuiZl]KmdSnfVxfUsjYwr`k_QjgWtjZtgWsgUpk[m`PugYqgWf_ImdQs_PlfXuhXybXy_Sq^MqeWweWsfVn]Nvn\q`ModRqdVxg]xfVtgWphXmUIqYJvfZs^Ro^MsgUvfVo[NwcYobTudYw\Pp\Mq^Pp[Mt\Px`SpbRpWKp[Kl^Nu`RmdQw]Pz_TwZNvdWxaVw]U|aS{bSubSu_RvZKr]RpUJmTHwg\}j[nUGzcUpVKv]RpVInQA{bXs]RuYK{\Rp\MuZLxYMpYNvXIuXNwZPr[NwYJu]SyZHv\RpPD|_Vr\OvZMoODeZu^R|UL_RxTFu[RrYLvXNsZO}\OsTErVJ{QFnVKvXKzXPu[PsUIwXKyVJ~_TuSIyTKTIxXOuVKxYMrOH{YO~XO|PGND{L=SJ~RG|RJODRF4/,(RGUNMFSJQJRIR}LUMQKQHNsAY}P\TVORvDMyEZzSS}KU|I]}TTvGRyIKzBWQRyIX}QWyN]SZ|RYtOZSXSSzL\S\TXyQ]}QZ{RW|OV|OTxJZtOZyS]zS`Y]STtMb{UWsO_zVUzJ[sQ]xQa|VXyNYtO\rMZsL[|UTpKXrO\rN]zQ^{W_wWaxW_zR[qK^|R\~UZ{Q[zR\Re}Z[yO`uVgu[e[j_^wQawY\sQ`yXf|ZWrLg``uVfu[]tM\zS`sSe{Y^sQ[sP`wTc{Yb~XasU_xVj~_]xTlz[d{U\rL_vSf|[e|Z_xSi{_laf{V_uR\vR`wVn{cewYerUd{ZcwSbxXn~_hvYf}YcyUdvUdyYb{UasVc|Yh{ZfvYn{_auTjy\awT]oR`rQp{edu[j|\esX`mSgsXfxYctVgrWiwYesZg{Ys|bfv[ktZ_oQjv[fwZkt[hw[szdl|aox\q|chxZgsXfvUcoUk{[dsXesWhuTisTox^fsX`pUaqSnx\owYnz`k{[fxZfr[grVit]bqWemQdrWo|diy]fpXp{blv[foUpy_iu]lt^irVnv[kv]frVmt_aoSjx\gpWpv_qt`kpYdrYpw`pu^hw[mv^ov_boQhoYfjSku]hp[irWnw`erQfrYlqZgoWpq`jmXlqYp|cgkVvsagoVot]hkUvs]nv[svbjpXss_fnXqlZhsYkpWrmYmq\sq]ml\hoVkrZhiYmmYso\qq^rubpr^kjPmq\tu]km[wwaonYlpWllYkr]hiUsr\pq\oq^koYrlZikUxtjqqZikVmoZqk[trZqtZpn\loWro_nq\kiTmmXvjZto^kgVknWpjWskVlhUsjZqlZoiWup[rk\ngTum]lgV{zhtlWtn\jiUohYj_KlhUojWpjXlgUwo`qk^lkUplUocTngYsj\peXtcQm_PnnZvl\vlZpfQrlZocTjaOsk[sr_ngRmcTriYkaMrk\yfXxj\laOlePukYsj[rjZxo]xaSqjWohUreVldOqeRwjYsh[vfWm\IsjXu]NodVvg\pcUobRubVujXteTk]KqbTvfYzj[mWMugXvfVsdSt\MocTyfYtdPscQs`O{fXk^Kr`So`MsaQlXDw]Tt`QseZu]RrZKv]SwcS|bWs\Nl[Nr]Nu`Qq\RrhUqVHmOBr[NubXufTq\MpWKoZNt[Mv^Nr\PpZPsXLt]QtVMv[Lt]KweVsZP{`U|aXt`OubUwaTyVKw]Sr[Pr\Ns_Ot\PuXJuUJt\RsYP~_Ro_Oz\QnWDtZMuXIx^RuULrVGr]PrUMvZLw\LuXKxXJ}bXtSI}_RuVMkWE}[SvXI`UuTI~[QsL?YNyVL|[I{XPyTHzSJuKC}SJ}WMvNCzRK}TMRJNG~QBTH|G=M@OE2.72QHLDRKPHOzHPHQJPJF?SJSKQ~IRKQyGVQRzJSHP|HU|JSHZS]}U[|KP{G]VW}NWOU}JW{QZTTzEUN_~Y_}VT{LYzPT|N_|QbYZxNb~ZY}OZSQyG]|T`xV_Y]xUZyN\{ScX^TUwIb|YZ~Q_~W`zQRxI]}R[sMWtH\{SSsKa~Ua|WWpHaVbX_yTd|V^vPg[`Y\wP]|T^xT_~Vc{Xb}X_xVaY`{Xb~YdzZb}Ua{Xe_e|ZcyY[tP]vPdyX`xVcvV`|VesVcyUj|_TtLgsVatVayZdXfu\[wSg|_dyW]uSf}YezXk~actSewV^yTi{]_zTf^`tScwXasWgtXbrTgxXasTn`e}Zf{[k|`hwVh{ZhwZcxZjx]eyYfwUhz]fuYq}a`vPgvXizYnx`fsXn|_ctVg{ZctTny[hyYn|^nzbgy\o~^mx_i{\ksWetXlz`j\hrZhs]r{^^qUi{^jy`t{an|dk{\fwWpy`hpShuW`pNkv^kuZfsVfvVnt^rdsz_nu]iuYpxcns[kpWkw[lq[gpXemUlx^hoXms_nu_nr[irXhqWjoTo{bgmRalQdlTnp[it[grZot\hrYlpYkhRouampYirWtucirXjs[nsXkrUrvdnmWtz_irZss_os_pt\lt[nu\pv^pv\jkX|zgloYvyeljVfiQnq\os[krWiqVjsXhpXsvclqZow\stcts`ssbjmVhmUkv\jjYou[tu^mmZpv\knUnkXjmXmsZklQjkVrp^wxellXqn]hjShkSrsZnp^llTsr]hePtp_olXuq_po[tt]xt`oiXnlUrp^rq_oq[vp]omWhjPnmYpo\nnVoo]mdVnlWpk[ngWqlXww`lhPplWpjUsjVmjPtjYm`Noq\tk^uqasjWsfWrhWxp_scSqgYvkXwq`thWmhXibN|l^qfTxjYohWmjUqiVtn[rfUqdRodSxoaldRvhXreVlk[uiWtjVxhWxm\u_QvjXo`TofVnm[l^Nyl_saStfRufXvhYrhTxfXpfSwcVs_SqcPnaQshUu`Tp^TwdXraQwk^wcW~i_rcSweVwj\w\OsdSq_Lt^SqaQz`Tv`OseZt^RmdQobNh\Ns_Un_QocPxeZq^SxaTwf\tdUubVziWr[MzeTq\NrdUydYs^PrZNxaQtWMv^R|c[pZJw`PvXMt^Sz]SsaSuXNs_Ls`PwYLz^Tm\MqXOwZNsWJr\NxWMw\NvYLnVGvZNy`UpYHrVGzWKwZQr^P{[SzUMvZN}]SxUKw\Q{YNqTHsYLvUD}\Ru]NqVKtVLtWIsMCyVKwSD~XO{[Pz`RsUK~^S[O{YJyWKsRD|ZN|QJ~PG~XM_VxL@xREXMzTK~SK}PE}VHOGRHPC~UKM@PD7,/+OIQLWOQJQKW}LPIPDK~BW{JQIUNUQVOX~PQyDXN`~VP{HZOW|MW~P^VV~OS~NWQ]}TX}PWPPsE^V_[UyK[~S[U]~VSxMY|Mb{VUyK\ySW|N]WWQ]VcXZ~QTzN_xT\~S]zTWrOeZ_|SV{K[yQ_~Qb|X_W[}Pf]RrH[yQgz]c~V\tQcvT^zUYzPa}X[yRZzQfZ^uQXvM]~U]vOl~bd|[Z{M\U[sS]xSZsP_zT`zV[vScwWf}\VxMaxWdz[`|W[vO[vR\}O]yTf~Za|WiwXi^f\bvX`{Xq~bhwZcvYjbgyZc{XdxZfYet[cyY_vTh`e}]i{\eyYdwW`|WbvTewUk~`hw\azXm}bdzWa{W`wUgy[fuYaxUgxSp~aawYduXk}`dsXtgiwZnxbcqVhuZgvYavVhsX_nOesUn{`py`ezWjuYlu^gqX`tT_tSduWitWjw]s}flz`anReqRgvX`rTmw\csVgsTbvXlvZgrVenQfuWcnOl|`irZhrT_tSpvchjXryfhs\nz\mx`hsZrx`enUot\jaouZhlWmybiqXmz_grViy[pu^nx`isYjnVjqYkt]ou_rq^lv\jnXpy`ko[ru[lpWfsSnsWiuZt|bjpXmz^lo[lqXrr_sp\lu[m{\ltYot]lmYjpXkrYpx`pwbpt^b_LfoSutbws`uu_mt[qt]qpZetUqw`pp^ovarr`qr_olYriYor[su`jtXrq[sn[xubxm]hnXmiUnq]mmU{{dnnZhiSutcss\uvdgiPtnYoiXru\rr]jgPjgVno\roXtn\rlYrm\rn[ss]to_sqaipXniWmfSmkXplZtmXmiQws`rjYqhTrrZpiVoiZgcJpq]sl\rfWohVvn^vtasjZrnYsiYrgUrj[rmZum^qaRqgZzn^sj\rfUrk_ngTujYmhXpeQwfUnlXuk_jbQxq_sjVqcWpmXpcPkeTri]siWrgYtdTrfRmbTn_OogWi]JriRwgYp`Qq^Rm`KreVwi[qcSodtjYtdRp]RsaVodSsfWpiVqbRseSwcRufXqfTodRwgYreRo^OvfXsYMyl\nbQ|g\t`Ts^PlZJtbVt_SzeRu_QtbUt_Ss`PzeVoaR|fYs^RydVk]KxZRzaTxYLrXNtbSr^Qq^Q~h^uZNtbTo_OwfUr[MoVKv_P{fVzg[u_RrYKxbPv[QrXJ|`XtUItXOy`Sx^Rx[M{_Ts[NwXMv^RrZOy]OnWIx\P{aSxZO~ZNuTFyYKzZP}QE|ZRzXOwWIu\KpVKtZLwRH|WKtOE~`Tw[OzZQ|YOy^RVMvMA~ZKWPrM?yUHtQGVHzUG|UIVJ{WJyXM~WKVOyTH|NE}MEvNB}QDF@~QF}UMMC}QIQED:-*41RJSPPFOIULWSKDVLSIXTRKUJU~LXJTLVNQxFRJYSYSULT~M[TYT^TYNO|FYOLxCd_a[XO]T]TSzH_|UTvJ^U_W\}QbVWzPX|R^Y^Z[xT]SW{N[}T\XcXUwN]|V[tR\}Q`W_zUTuLaTZzR_xXdYfy[[}QcyV]T^tTX{LcZdXbV\QZzRcY_xXf{W[{Ra{VYtQi^axUWyOc}Zb{Uf|W_wRbyQ_xU]yPg~[a|WbzZbwSgvZc{[c{X`|W^wVj|^[pObxVdyXf[lcaWj\i_`yVbrRi_kadwXe~\^qRbsSi_d~[f|]hwYevYk~`h|\byWavU`tUg}Va|Rhw[iw\dwVgy[n~`kw_ZoNhz\iy\kyZmz^_sQgxYdrTix\_Wiy]l|^fvWiuWjz^iu[hyYiuZj|[fwWiuYov]pyahzYkyYeuWl{_k|_o{cbqVfuWhuUqyagsYgnWh|[isYrw_p{ffyZhsWgvShnWerYo{^jv^hpZmz_iy]arSgz[nu]u}dlv_pz`oz[ivZkt\mz_jq[gsXm|_pqZqxZt~hovbnv^sr_r~apr^mqXhtYozams^gqXfo[lw^nw^ls\iu]vyaop[op[puYvxemkXirVhpVms^qq]v~blnYihUoz`svbmpXmr^suaopZps]qv`jtYjqXhpVvt_vzbnpZptYomYvsarsbpt\eoUjpYmmTkp[ko[doWtw`x{esuapgXpnWmqWsq^ejRvzglpVplYkmYnhWqoXnm\wtato\rn\njVrlZpp[ukVsp^ogUkfQqp]spZqmVppYsm\rp_qt_vl[um\uq`nmVpn\tp[ss]qjYnkYss\pm]rjZsjZrgWmlZol[qoZyraqnXqiTol[niWojUofStj[pdRxo^ppWqkUeaOpgVoeTskVrn^wm]oeUugYlcQtiWogRqbTzj[j`QthVsj[vdWo]Pzk]shXrhQtgYrgXvcPm`QzdTvm\sfVsiWm_PrbTm_PvhUuhXobUxdTtfStl[wo\tfQtgVocWq]Ryj[ujYrcUrhU|e[xgXu`UkWKpcRqbWn]NydYs`Pv`T{bXtiZr^Jo]NkWHw_Px`RyfYoUHr\PrZLpcQ|`UraTu`Sv[Kx\OubUpZI{gYtcTybUuaRv`V{^Qo`S{eXwaSw[LuYKqXJ~\Ox]N{bSmUGv^Tt[MzaQw`S}XO_Ru[Ot\OtTHw]Sx\NsWHvVHuNBz^VuYL~XNvTIxXL}SKrUH|`S{WIvZJuYNx]QyZPXPuZKsPFzZR{SCxWJzVMvVF~[RvPD|VH{SE~YPzQHxRKSJ|OFYMYPxSH|K>ZM{QGPKOEyL@PEH@}TI~N@~UIPGKA70-&SKRKD>QLMFSMSNRLTKWM[SXQSKXQSKPJWO[TYQP}IY|OQ}HM{DWxOQH`UR~H[SWR^UWP[R[{PZSYQW{Qa[\}QYxRUrL^S^}RdZ`WXwKVzP]|V]RZ~R^~R\S`yTVzL[wO\VfzYZwR[PaXj^]xSRvJYyObX_|Th\^}Uf\]wScY[R\|RayUd|Z]zQ\yR`}W_Y]uQ_|YYwRdZa}W`|Va|VjyZ]zRbVXzQbyZcxWb|S_qRWvJ`zWfuZbWb{X_tSi~`_uRdxQc{Vd|Wf|\^}VawWazWb}VczXd}[^wSk}[`wUj~cc{WfvUcxW^vRlbe{Xc~[bxRcxVk}]obd}Wiy^gyXh|YcsUi~]ky^jx]dy]asP_pQiu]dsWgwY`tRcsSfzYdvYcyRgt\euWgv_n{af|Zl{_iqXl{^kw^kzakvZe{Viy]lsYqfcsQgsXly_iw[iyZlvZmw^hyWp|dkx\hwWgvYq~cox_n{^q~eo{_l}_sv_dqQkz]mu_grTiuZlz^kxXlw\ov^qu[py_gpWpxamw\gtXr~cky]lqZbkRfmUiuYmybhpYlsVps\ow`nv`my^mw`msXms\rs\nqYnwVo|_or\n|^nr\uwbpwdgt]nrZnu\r|_kpUksZmpWolSst`qvaopXuvbus`tr]lsXdnUklSpqZmt\wtaxucmpYpr[mpRtv_oo\ipTsxakgWwxdtl\oqXghNrq]loVtvaou\yubonYmkVqn`msXkjXur^tr`up]qlXto[tnZqr[onYup_zqdrr^oq\rr\wpZoqWiiTqlWpjXpjWvqapjXpjYun\niTmjWxuclhSwr^sjZrr`rnXwr^kgTrmYrjWsp\wo_ofWtlVwl\qgVrmUriUpiYrjXvn]utcvjXvm`m`PwlY|sdugWxh\qlWujZieTqcTyjYxn\rgPtk\sfYn]PqjWqdWrkZtkYthVs`PsfXxh\yj[n`Pzl^rjVraTskXqcQr\Ptj\reTveWraTv`R{k\yg[qbPudQu_Ri_KzgXt]MtgXvdUtaPufUwfW{i]zdWseUveTnZNnbLyk[saUs\LvcRweYsaPvWNtZKucQpWD{bRx_Ut^Lu^Pu[K{jZpYM{eZ|^SpZJxbVy_PyeZyeWsYGu^RteWtcRv\OtYMsSE{eTpTEz^NqZLvZLz[Lv]Nz^SdY{\Q|eXu]QtVF~_QyWKwVJxXMv[N_V{`R|]Nz[Mp\P|]LcWy\Qw^PvZN}SF{XPx\Q|^PsTHzXMxQE|ZKxTH|_RZQwRH|ZJzOF}RFVHUPxQHzTK~TJRJ{TGXMQGMAMDVKzUGTI{PHxIANCOGOE[QLDHA+%:8NGK@TOKAOISMYTUNOHUKSKQHMHQ}IUK]USISKVOXOZQ[T[QYQS}IVyLWMX}NRzJ]WYN^T\TU|NbZ[}TYQ[S]QR{H]SV{L^{RQvIU~LVN]T^{VbWb[_UUsL\{QZSeY]~R^YZxKVxP]|V]yU_{WYwOdYY|P]zR^}V]xQg^kb]wV]zS`yUgXZ|Th^c}\c|Vj^^vRXuO]xOUnJi\]~Q^sSZxS`|Tc}WbzWbyVi|\g[bWc}X_|ShzY_}Td~Z_wRdyX]wN_vUdzX`zS`vVj~]dvVexXh]eyYd}Uf}\g\m~aiy[i|[fxYb{Tgy\iz[ew]k}ZduSd~Xi]a{Zi_i{_i}\^rSexVhxVg|\iyZb}VfzVhu\iz[n`ftVky^dxYg|Xl}_rgl{_bxXp}enw]gyWj{^fqXh{[n}_gy\nwZl|`juXlz]n{]my^lv^g{Wlx]etUmwafrUftWjs[m|]kz_ryagvWjuZfqXmtZivYlybmz`lqXnx^crUp{dckSetVny`kz]lu[ktYrx]iqVenPfnUpw`csRqw\v~eqzcryasenuZjrXgsYrwagpSmrZmqXkoZmrXgjStu^kmZqv^pw`nz_koXrv`htXntaqq\up\nu]ou\ktYyxfnr_loXro\qsZom\iiTorZls]rq[rq\or]qxajmWnu]smYut]op[moZoq[rq]os\cdOro_vr_nmWuw_qhVrt\to^klWqr_xs`noZsp[ciQmkZnr\tn[tucvs_ppZur]qnZmkXkkTztbvn^ro^xmWrmWpk]uuctm^wo^uuZwverpZujZqjYqkXnoXyuctr]tr\pbRokWqhTqm\xw^tkUqdSngTqg[zsbkeTyo_vp`sfSvnavnYvnYqmZneSuiWvo]shXniT|i[sgWplWtfUsjYujYvfTreYvm[ti\qhRtjUuhXugUrjZpiZxhYtlZqfQqcPvjZ|qbshVk^Mzk^r`Mo\MvhYm`SndPpbNnazlZp`MlcRqgW|m^z_OxbSzi[|cWsYLodSucWudSxeXzgYvfWxdTnbL|dWucSl_vbPrZMx^Rt_Nu[Qu^PtbPueWy_QscRv\PwcTvcS{h^wVMs^Kt`PnZIpYLwcQzm^uZMv^Qy_RzcYw^S}`TmYNpXIzbRt]N~]VxZNx[N{bSxWMf[}^P^Rz`T|`Q[O~_R{cYs\MtXK~YNzZOy\Ox^P{^N_Ow[K~XM|XI{UIzWMZOzK@zTF{UK~XM[P{VKzTJ\N|VM|UH~WLyUDZM|RGWI~UJ|UIuRINEzVKOE}MAQMVJUJyWMSHMG|IBPB{E=NEVHzJBK@PJ+#.+PJLGH?N~HSNQLJDRLZPWNTJ\RYOXTLEYQN~GWQUJXNRKTLXNLFYyPZRZzR[U_V]S\{S_SUOe_YRQ~EYRY}PT}J\WYO`}UV~QaWRyIY{N`XcYVOZQV|Q`ySU}JVLWwKc|YeZZ~R`xRZ}O[ySZwRbZ]~UZ}RaWf]azX_Ud}ZaUf_d[^}UYuN^U\{R\zTi~]bzVd~\]zT`uW[xJbxXczWVqIYuP^zT]SaxWWvM`|ScV`zY`yVbwS_yUi^kah~ZatWe~Y`sSb|YawS]vR_|TarScx\cyVbyWe|Xi~]h\h[i{]k^cwTaTaqS[uR[yP_tSe[kaft\cxVdqSmckxYfy]dxZdyXgyY]tPg}[arPlbhyZlx^l|^fzViu\fxXm~_k~_lyahw[m^kz`k{ZivXkt[k]apRky`ms_iw]gwVeyXms\j{[gz[h|\gxZhuZoyYjw\jz^n|`ry^ltYsxbp{`luXuem{`dtUnz_nagpSow_n|`ks\qzdos]qxap~_jwWgoThw\nsZmxbs~cmz\mv[pn[gmWmoXrycrw_t}hvzelt_lu^pzajoVs|dls[jr[vzdpu]xzfw}fns\nt]ksYov]oubqrZvzfox\s{eww_jtXioUyycnp]mw]rm\xudnt^zxctp^yxfswatvespZklTst`qt\kkUno[qv`rt_or[vu`qt[orZmp[wscnpYnt\trauxcikRrq^vvZwwblkUlqZhnXsr^srauczwbnnYqiSso^sq[{xcrmWsq]xu^nkVrm[zwcolWqpZup]xr_olXrlVwnXmiXniRuo]roZvq^vs_rjTrrXsn^qiXut]ypato\to^thYul\wq`|rdrjTum\ynavo_xpam`PniUniVwn[rk_qfSwgXrjYi[whVreSun]yn^ugSufUxjZqeSuiXwm]yk_zgVvmZxo_qeTtiVycVzo_kbMv`PthStePup_o]KwjWvgXweSt`Svk[xhXz_SucUybVrYH{jY}cTudYyn`s_NvdVl[OuaXtfWwdWxfWv`VwhVwbQxjYrdU|dVu[NqcPwbR}dVwcUy_Or_M}dTuhVv\Mt]Ux\NzYM{j^{fX|]NtTHrYKp\S}_SpXKs]OvaRf]qXGu\O{`XqZKzZM}aTuaUaXy^Pr`OrVIy[Nx_QzXLzWIx\S|_TYNz`UxZJ~VMx^Q|ZJ^Ri]{SHxUMwSH{RHWMSI`U|RGzRFyPFyUJ^N{QF|OBUM^SzWM{VK~VM}SGTIQJOGTMPIPC{M?QF}OETGQG~G@MASI}QDVNTKL@QGIBQH2/40NGQJWQNFNIMFUKPH\VPGQJQJPK[SYRVNTNULXQYSZNXO]TVQW|N_XQLZTVMUP]Q[UY~PXRYR]T^V\UXPTwH`U]V\zRXyLYObVj^YSZzS`WbZ_WXM`VdZ\TU|Ne]^SY{O[}O_VcV\{S]xPY{M_T^XXvM`{V\|Q]xQa}Y]Ufx]_zQeZf][zUbZi[gac|Uc}Zh\`|R`{TaxW]tPaY`zW_}Ub}VeX[~T^vTg|[h~[e}Y`ySdySavQ^uT`~XbxYh]`tSc{U`xTj|\`{TqfmcdyVd}Zmee}Yh{\e~]cxYamSh}XhwVgz\cyWn|ci{]bwUhv\k{[naf~\ezW`rS`yUcnSZuNj|_bsTi{^jw[duWcrO^|OerViyZgtUf~^iy_euWkxYjz^mv]k{anz]lyciy[h}\hvUdrTlt\lz\ky^ly^i}^m}_l}^hx[tzfgy]l{^r{cnx\jzZqt^ox]pwap|`lw\q|`qclv\n{`hxYlxZju[qxaqv\ox_mt[nx^szcluXp{^lv[wycqwajpXjsXiu[sxamtWluYnw`hnXfuVjx\nx_ss`tyat{cqw]mv_loYhpPqv_muZkoWhqXqv^sybut`pzcqv`moWnv]msZtr`mr\uvbt{aks[tzbmu_mu\tyaru\x|brlZswbnkYtvawu`ps[qq]rmZtpZnpXns\rr]us_xxanoYqsbyuavr`iwvcwubpkYpq]tr]rp]or[yvdsrbvp^zp_tr]vsbvm\nlTqp]lePsjZijRwq\qnYtk[vjZsn]tjXviYtkY{tbtbR{sbrl[ohUxhYvq^zsevl[whXwm_wq]wl[vo]zk`wnZriVukXtkXth[wlYxp\roZ}qbtfZofXtmYsmZucV{l[ugYqgSskXyfVp`QteWvh[xn^sbOsfStiUtjXwhYq`Rul[seVthTp`RtjXyhUxjYt^PuaUlaMrdO{o]vgZnXOydYncwjYvgVk\vjUtdUp^Qp]Iwj[k[sYLlbyh\zg[w`SyfVwcVr]P}hX{eTu`QyeT{`P{gW{_Ow]P}aUtdWp\Kyg[r[KybWuYJsYIxhYtYK}dWzdS~bYvaQfU~hY}`VyfXx`QoZJz]PqYF{YN}^StXMv]Lt\Nw[Q{_RyYL|]Ss\QxZKx\QzUGxbQtWP}_T}]P{YP}aUzZQy`SwTLvVIvWNaU|XNuUL^RyVH_SWL[MxVH^QzSGzK;{YPYL|^URIRE|WO~YQVOVNYOaVTHWNSESE|MD|TJzPC~TIKBTKXMTNQFSMMBPGLDRH,%.,KA[TSIRKWRTMVLOFQIUORHXRTJUOYOXQYRPGPI^XSLWPYOXQTJXQWL[TVL_UbZ\VX~M\QXO[QUzKY|OVPRL_WTwIY~QZRU|L]UV~M^QWzNaXbUZxNaWVvOZ~QZS^}TXzO_zUaxV`SdYZ}Q[{T\wRY{R[xRbVaXaX]R`yTc\[zPg_]wQ`VbZg^^We\\|Q\xPYxOg`e}Z`[\N]{Ue}We|V^{Sg_f~\kb^xS`{Sc[azWa}TcxWgyZf|[czYayUf[k]dzXi^exX^uTlddyVb}Wl^fyYhz_j}]lb[vRmwZuhl~_g|Zj[j_bsRg{[m`l{^bwVg_k}\iu\g^l`j~\odk~ao]kv[jzYncj~\oy`nbi]s}dmx^r|cly[nbhpXl|\k}`k|[v}gix\aoQlz[m~^fwXkw[hxZn{_qw_hvZn{bm{]i{\juWgyYhvYg{]m{^exWmt_jx\iqVt}ckwXow]q|bq}btdjs[p|awhhvXlu]uxbnz`lp^rybmr\q}ajw[yghuXpw]pu^x~fualw\r~ckrUvzarx_llZkw[pu`x~gow^ow^jt\qycs|`sz`sycoq[lkWoo\uxcpq^ilPrs^nqXqr_tw`x}cuzcokWrsbomWnmYprZsu`rr^ioVtp_nkVjhTrv`qs_~nvwdst_ru]rs_lpXmnZmmYvuanpYmkTqm[qtauubmoWvscttbtk[|zgopYghSzv`pmWsiZto\xyfqo[mlRpp]sp^yqbsl[ogYsm[rkZxq`ojWzyd{{hpnXoqZrcsp_}zhon\zrbpmVpmXtp[qgVwq`vjY{pbogYtp\riWti[vk]piXtiV{pbyk[xk^o`vm^tm[xn^ofSqiVxlYqlYuo_sgVqeUvmZ}kZzg\wm^ym_|n^vkYpeUwiYufWqaPvfU|lbthWwiWym\ulUukZsfUvhXycVugVubS|iYzk\qWKvfVwhVubUycU}dTyd[}h[x\Uv_StfSyeZyfVz_RpcPxhXsaR{dXp_Qp_Os`RuaWz]Qs`St\NviVs^Qz_Qt^Lv]LvfR}_R}dTubUoXGy]NzaSn\KydTtXKp^P{^Su[LvZKo]L}g]y]Pz[Mz\NyaSeYu[Mf[`U{]QdV}]OuZLz`U\Nt[OzVLaYx[N|XMyZKzaQ[N~\RbTbT}XO|XIZI~`R^S_W|YK}SK}YO]MRH~RJWLXK~YH}PC~VMvTIXJLD}WJYPXPXNXOXMPCMBXMKBSGRENARGTJUKKAQJ{SHG<3.+#SKNGSLOIJDSMLCPJVLUKSKQJXR]WSLPJNGXQWPZPZOUNO}FTM\SYPXPYPXOYQWO]VVOYS_~TTPX~Q[Q^SV{JV|NX}OV}M^TZM_|URuI_TYQ[PbWV|NcXYwNZR_X`X]R]ySe]`V^U`X^zO]zUYyMXyL_X]TbSg^`Wf[`~U]xUf|\cZ_xT^zSbZ]sM]|U\zPh]b{W]yViag]dYd}ZaxTe|Xg]`~WeZja^wRf[cyY\{P`{Rf\fwVkyagz\]wSbxTgy[cwVn`oem`eyXg{^hyYe|Td~\d{Xf{[g|\cuRmy\g|XdxVg~[j|]p|cevYnekxXtgh[pel\_vTnz`h|YnecvVl{]mcm}^i[crWthfwWk~]l|Zlz\irYjxTn{\jz\gyXf|ZexWi{Xj|_hvZoy`mx\my]oaqy`l{Ym}^apRjyZo~bp|av}cm|`mzau}eo{asz_kw]lw]u|cpaveltXk|[j_hsTryaiuZkr[rz`ky[t}bo|^gpOu}bnu^rzcku[uz`ly^mpUtycui|jjqWns]y{gs|fpybr{bny]qvctydry[sydv|btu_tczv`tw_qv^s{cqw\lqZow_kqWqw\oq]jqWwuaqw^stasqXilSlmXnt`lmVuv`rxcru]vt_uu\z{bpr`wr_xzdtuftlWsv_|xgst_ur^lpXmqXruYro\nr^qs[rp]ru\wu_po\uw^srZtpZroZqkXhjTrq`rp]qqYyp`xvaplUtr\plYwn^pkXqm]smZum\tp]nqYoqZzterkZrpYtt[k`QulYwo[wq`roWwq^xn\smXwkWsgXslZtm^vjW|wduiYqgUyj[vr^rhWwo]ucQuk[vj[tlXsm[teYniRpaKpfRmfSthYzp^wn_~sexi[|l]}kZxm\pl\v`RwhXwdYsiXnaPtdWtdTj_yj[naLxiWwiYqdO~iWnfS{h[xeZq_xfXxdYwjYsgX|dS~hZs^Q}g]xcSgVudUufXu_Pq_N~g[ucTydR|eVwaNzcVv[KxcXx_SsVFzcWzgUyf[~_Tw^MuaOeZy_Mx`Qw\LzWLu[Ox]SzcVw_Ru[I|`P|[QvcXyVJ]U{]N{[O}_S}YL|TIuYI~gY{\O}aR|XM|`RbSx\MwSG{`Q|[NxZNaW}YNzTKzZO~`U|VK\S|YO_T\OcY{XLaU~TM~[O]R~RI\Q`UYOXNXO[O~YPSHXORF}TM[RWJ|SIQFXNXOMEuPDWKSHaXTLPFVNUK~WHSHME-',)[VPGOFRGMGPJPGXPTLXNSLQJNETOTMYQUKRK]RXLVOXM]UVOZRSJ^TYT\TYQ[RZQVNWO^UUJ\Q\}WX}P[U_V\TV~NcX^U[O\S[UX}KXzL_~TRI]Vh_]UbX[Q^U^zP`yVe}\eXaW]U_~TcWf^[R_UcWb|VbzT[R`VcZbYd[^Sa|Znbkai_`Vf_b|VbV_zP[{Rd|ZeXgZh^^{Pjai\[tSh~]a~[f][uNe[h~]i\f~[_Rg[d|Zj}]kcmajz\fz\d|Yjai|^ZpLezYbxUm`dxVk]l}^teexWpc\wOkwYl`dyYd|Zm|cexXfzZg{[esVe~[p|dk`iy^m{\e{XfzXesVf}]fuWsfq}ar}fjz]jv_csVk}^pcsamx\o~bi}[j|ZfuWfuZkv[nyZhtWo|`lx\pw_ksWr~chv\k}[q{asgoxYoz^lpZnu\nwas~fo^ixYrz^x|cox_tzhpw_kv\kv_qy]qy^u}dx}e{inz]rxbr{bo~_rybu}bu|ct|fqu]qz^nt]nt[otZmtYuwcmyaqw`qr^rw`hxThlUq}bt{b{}gqy^rz^r{auyctvcqy`px\rw`jqWstarw^uewzbpu\jsZsqVpxbss]su^poVs}csv^mrZrs`onXuwb{ydtt_qjZpt`rnYnnYvr_ou_kkTxp\twausZ|yexyfmnYus^unYmnVwwbss\hnTvpZvkVrqZ|scur_{vdtlYuv_xsarnX|tbwsanfOus^zsbun_omTzxdtl_wm\noVzu_xubthVrk\vu^}r]qiWxn^reXqjTxt^{n\wj]piXrl_vkYyufujZtj[{s`ql[wjZym]vnYtl^ulYut`|seuj\yn]{p`qiYrhVwfVyo]pdQziZzgZpdUun]wlZzl^qaPrcPqcSi]|n_{n_smYxiZugZugVxj]p`MtfXteVsdUwdTwfXz`TwcS{cTwi]sdS{gW}f[xeWx`T~i]y]K~jZ{_SucWqbQs_KzdZwcUv\OrYJ{i]ydV~bTu^Pz]N|dU|iZ{aRw_Tt_Qy\M{aUcZg^xZOcXoZK~dVz]MbX~eWy`RYPt]Ot[N{\I^PyXLVL|\PvaV|XJ|bS~_V~^Pz[ReZ}YM{XMuXJ}^TcU~ZN~aTyXL}YO\Q]RbY~WOaWbS~RE}aS{XKsOF|VKTI}TI|VJzUH]SUNwMBUI~RJSK~UH|SJYOVLTGQFRFPETFUK~PDODUJMCQJRGJDRFRITK-'.)PGNHXRNFOFPHQKRIVNTKVNLG[T\S_XYNZO]UH~=TNQJXOYOUMVN\UTLc^YSSJYT\TPKX{P_YWPWP^XcZYQ^TZRWRV{K\UX~NZ|OS|C^UWzIYOYR\UbUhZd]bX\zQ\~T`~Vh_`S\~TaZcZc~Yc~[_Se[aWd[bTe\]|Qd]^Sj\\{Ne^[{QaVdYm`g[`}Vmdh^bYl`jad}[d\f_g]e}]e\b{Ta|Tg|Zi`fYeyXlal`a|Woch_j`nbcyWh\f{Ydz[d}Vb~VcxQpfk`e[bWeuVdyVl|bbzXiz]f~]cuUpemdo]k_i}^hy[ftYl|`k{[jdeyYqy^iy[sck^mai{_csWi{\kzYk}\l~_n`jz[j~\`uUguUkx]n{^q|_rdjzYoaqz`kyXjt^ny_kx\apQq|av~gyiaoShuWt|dguVlsWnr^lu\iuXr`qw`i}`sz`irZp|bmuYiv\q}`v~dmw^t}csxep_kt^r~dmt^kt[v}dtxbqv_sw\uxbt~aqzbnmXms[rzbuzcnv_oy^u|emv^ut^w|ekw^vpZpw`r{fpx]u{exzenpZlmWiqTkuZst_ttarv_tyfzwclpUqqWw|csp[poZrs]rt]qu]ss^pu^rw^xydolXno[uyc{ydiiLvv`zwdwyewze{zcjp[yu_ysdzmzs_unV}veus\rq^wt^xfrmXzr`ztezr`xr`us]np[zvcsjWtp]zraqlUvub}sayve|xcsn_ws`unXtt^srZroZwsats`vjSwiYzn]{qbvq]rnZuvbtoY|j]umYnkW~qasjXyn\wqa{p`xkYvmXrhQtdWyq_mjVukWtiRym\n_{m[vlZwj\uhVshXym`siVxnXwmY|j\tiXsfX}cWveUtlW~i]paQtjT{cRsgWshTzgYxk]}m]vgSzhZyi[xhUteTrbQ|l^}cV}dV{aUygXzgTycPxdZyjXyhY}jZzg\{e[tcVx\QxaS|hZudTydVy[Ox_N}bW{k\uaSz\Nw`P{bXzbRycTy^Oz^LtYIh[w]M{dU{\PydP|]Pw]Py\M~aTy\MxYOt[M`V{`Qz[K|^Q~^R|\Nz]QyXNvaOYM|cV|\RzYNwVG^S}`T}[OYJ|UJwUI|WKx[N|\LxTH{UH{VKzQE\Q\T{VIbW{_L|WJWOVNYK~YMSIVN{WGUJ~VKQFYKSJSHSLSFZRVKXKQGzNCUIRFSDMESIK=QII?NDQG(")&SLNEMBPJQJTLKGQJWQLHTOQLVJULVO\UMHVKXObYRHULWKZMbY^T]V[Sb^WM[SYP]V[TWN[Q]U_~T_U`T_Wg]\|O_UcV]~T]T^TdY[~S\UbYVP]VV|NWOZzM\N^S]~W\QcT]zQdX^vS[~UbWYxN_V^~T`T_~UdWgY]U^UjcbXc\_W^T`~Qh^^}Ud~Zh_e}WdY]uTf\a{WjabZdWbVc[h]f[f\nc]|Pg]Y{Omc^~Uk_b{Vg|ZdxWja`{Umbb[gZf]lx[ncm}ae}\j|Ylaf}Yb{T`~Uk}`gxVh{]k|Uj~\l~_h}\j|]k}_oehuZi{Ul~ambn~ai]n`fzWkv^o`h[n~ajxZfxWky[m{\vdiwYm~\iz]o~cn^nw_o~bq|bwfoavfo{_hzZq~^ly]o`k{Yqcoy`pz^ryajvWw{dmz^pw`l{\l}^oy^oanyYmy[mv^v~fry_ziluXwzfowZlw_jsYu~ev}bjpZipWw{eu|foxaluVw{cpx_t|`nz^mw]ou_pq\ou^qzcms[nv\lu[rbnu[orZpr\yzgnoXtw_lsZvzdqs]yybro[swast]us_rq\ru[pr]tu\otZ~{f~}fvv`vs_pr[oqWwm\jqUwt_vrampZsmZsxcrkYrs^{fqrZtr^v}fwxcmn]qoXzwewr^yxduo\zzckkTijSsu]wfon]wsbsvbwsaztcsr^wk^wwc{tctn]|vbum[ve{whrgV|vazscyp^umYpo\skXsjWwp^zp_tq^|vdzs]vkWxc|na|rbxp\zr`tm[vu^wn^|n]xp]weW|o]n]wo]xkUuiYzjZsiW}parn_zn^zs_xfWveUmiS|ud|kZujVxiX{h]vj[ylXwhzfYoawfUwgUwmYxm\wh\taSwj\tdWubT{hXkVycTyhZzdUuhWzi^wjUvk\l\ufUvbQyi[u`O|aXufWwbRz]Ni[wcR~eUxcOwfU}dV~fWtbRuaQrYIsbV}gZ|eU|eWgY{eW{]Rx]NaVx^P{`Q}cXzaTydRuZL}]OuZJz[MsTFcS{_R]OdZ}\PcWvZIy_Q|aS{eV]QxUI`ScR|VGZQ}ZQ~ZL`T~YQ|UH{\RzXJ^P[SbV~WN`PVKzTJZR~WI~XJ}ZM}TG~ZL_OI?SHWK}SFVKVL}TL~VLYNUJ[SUI^SSIM@UIPG~RI|M@QFYNSIOEVNRHYSQHOE3-70SKSNQJOIJCTKMGVMWPOGPGTL_W\SZQNFSKUPVRXOWOUORJYQaXWQ\SYSWS]RWNWQZT\PbWUJ[T[R]VYR`Y_VaX\S_XV~P\T\SVP]PY|P_XeX`VZRg^`X_VWOh_Z}PW}O[PcYVHg__T[}P]Tg[e]b[^|QcYfZg][vRb~Wh\aY]}RdXez[`}Th`byV]|Sc|V\}TcU_{TcZgzXg}[a{VcvWbYg_f}Zhaj~Z^zQi_cyV`{Ui{_m`d}Xk_i~ah|YZzLf\f^jbi|]iYm_jZgZk^k|`d}WlaevUq}`ewUcyRe[g~Wj\m|cnch~[lak~^n_exWjz_rek|\k}ahxZp}bcwSi|\n~^q}ejwYmy^e{Xjy\r|aoz\worenz^p}dlw[n{amz^oz_weo{`lv[k}^m}`qcl|^wkitVnsZs|fi{^v}cixZn{`ms]uelz_mt[l{^lxZo_py^tyeow[u~hjpXkuYvdpy`vgw}doz_xknw]txbz}gtzbp`mzYsu`u~guzcrs\v~et}azjlrYxyboz^uycqv[ls\y}gmsZwex}es{brx\sxasu]xydxxcy~euv^rv`uw]vs]xkot]|yhsmZuyc|{dpzZwxcsxbzzeywakoXu}bpqXop_vt_tnXsr[{{frn[|yeyt_xs^rr]sp`}|fsq\ytaws_sp[wscvs]vq_vrXuo]zwbzt^qqZrkTsqZslVumZzrbwt`yp`qkXvq`qqYtn]xrbppYkbUup\qq^slVzq_|p^qfTxp^wp]yu_ul^xm[{t`rgWysatmUvi[ujXodTqiT{iWujWrfUyl]xo_un^naS|n\xmZxm\naPxkWk]wi\yn]xq_oaN{iXtgviZxhXthTzk`rdSxhZ{k[xeU{m\yhQ|o]}m\xfWzj_|gW{m\xfWiWudVyi[|j]tbRwjWpaxdWzdTuaS|gXybOj\}gX}cXydU~bSz_RybTwfU~`T|bU}bTxaO}cWg]{^PcV{bY{\Ph\|cUybTx\P]U{]Uu\Q{cTu`OzbS~eV|]Q~_SgWydSs`Py_R|\O]OYIw`Q}\OrWFaW~aUySGe[{[PzXKdV]P\TyaQ}OBzZK`Q}_S_V_R~YMcY{TKQDRF|YL]PWMUKUMVJRHbT\QTD\TZOUIYMRKxMBULWNVITHTJ_SQERFTLUKWLSJQISHLEOEQE(".,XPXR\TYSOHVMZOSNXPPJ\TYSTOPHTLUIXPOIVNWMODXRXO_ZWRYK[TN}HUJ]VZVTMR~K[T]T\Re^^T`Y`[[R`[_X]TbYdZbYX~PbXe[V{Mf_SzH\|Rb[]Td[cZ_V]MZL`W\R[QW{LXNdZX~Nd]eY[Qkag^eZbXj\]yT^XbWdYe}Zc]g^dZh^c~XcZbZg[d\ndi}Z_~QlegZjZc|WeWm`l_j{`jaice\nd^zTcYf\Z|Pnelbg{WdYcXh~[m_eYl]l~\o|bfYm`j|\i~]m}_iZlcobl~^h|YhYj~^h|Zk_ixYm}\h{Zk}]mw]j^qcr}bfwVewVl`oapdocrel^s|egwXixYodm~_qegzWpcsimv^jwUi|]j|[m^rfs}dk`o}blx\l{Zpy^ujl{Zscqyal}`nu]huXm|ao}akxZvet|ejrYp}]qw_rv`y|eqcp}cqy]r{amv[vf}kovX{wcnu[t`y~evzar{`jtXtu_vzeov^ksXu}ez}gx}bqx[tzbu~hwy_ox[xyaps\uyavu`rs]ufy}ftyats_or^rycqq^w{`oxbop\ps[pr^wybv}esya{zepqZto\rr]y~gpv_nmWqw`x{gtr[ywc{wftm\uvd{t_st[zyfjkT|iwvbwnY|yfrlY{|fqm]usavu]uu^us_wpYzxfvwbzt_un^~xezo_pq^ws_vo`xr_zn^yvdunZztbxkrl\}n_zudwn\ulW{p]to]pnZrgW|i\zl\wiZ|t`xtbvgYtpZxjZxr`xp]zm]}t_uj\tjX{m^xfXwr[qbul\ukUriX|j\wgYocTshV~o^}m\zj[~jYwl[zj\|p_h\j_ncSsiVxh\ylXuhV}l^hXteTyfX}ma{jYtaT|f\gVxj\}gWkZvhR}fU|fV}eT}bR{`TscT}kX{jYx`Sl_v`Si]}eTyi[fZk^t]McSyZK}g[|aT{bWyaTx_U~eY~bSv\Ly\OwbRi^e[}aV|eV]SbUvZHeYhY~[O[S`T~\QYLz[KZP~dT}`P}cX~YL]OzYL{YL`Wz]MaV~^W}]R~[O~[M_T}TGYM{WNzSK{TGUM_R|WM~SJ`T}VJ}_TWJzVNXMWNYPYKYLWK[NVKRGSJSFUK~RFWITIVLWORJQHPCYRYMSFQGSIK@SG*&&$KFQKRKXRIAWO^VWPbZOJXQRITNYNVPVOUJ`YSJWON}C[Q^W_W[S^Ub\UQ_W]SXNZQ`X^QWQ\TULTOVL\TVQcX\S^U^U\ScY]Wb[[R^V`T]T^U_R\SaSaW\}Qkb^ThadYld_Ti`_zQ_S_U_SZ}P^VcZ^Sd\g]h`d}Yf^b[[zO`|Uk^f^d\hZo|\dzYbUbZb|Vi`e[e\bSlbqg_~YfZk`ewXb{Tkcc}Umdb{Vobk~]l`g~]reg|[ev[i_l^cyYj{^lbk_m~^f}Yh{\sbodmagyXkamam~`l|Yj}Yreqcrdj{[l`nah}[qalw^m}`o_l{]j[o`tjk`p{^o}bi{_apOl^q|atfe{Yo~bk^mz\yfnx^rducm}]mv]o}awgk^o}dwfj~^rz`k}^s|`pu]ny^o}_s|dsbo~bp}^o}cn`ow^oz]rxbv}cwhn}aqv_zhqxbnz\nyZlyZq{`rdlw\swar~bry`y~ep{`vcox]vds{crzbrzavxbnx`sye}qv}hu|bz{dry_ntY|uapyars\uyesv_xwcwwavycw{_rvbsw]qu_ut]lv[x{c}wcktr]zwc||fs|Zxydzwby{gzxdqvZ|vfwv_tu`tr[}lvwd{uews_|tbrqYuzaon]|wfss^|hss]sr\{zest`tn[ojV}xdxwayu`zsazo`vr\qt\wt_tmXllTppZxq^}vexs[rqU{tbztbuo^|vevqZriRuoYzrerlYwn]yj[zo[wn]sl[|oa{m`up]snZuiYwiWslYqcSzo\wkWsbxkWzr_wiWwk[xkYr_siX~qdzn^wfWtdOviUoaym\ymWm^veU}m_l_yhVr_o`zk[}n_tcQ{lW}eXteYuhXxgU|h]~i[saOzcW|g]eYv`Rx]Mwl]vh[{eWgYj\hZ{dV}dSk_s^NdUxgWzcSj\weXdZy^OeWx_Lk_~eY~gXydWzaS~gYz]P~XNbY_Rf[z_TdY{^N}bV_RbTs[K{UFhZ{`Q}cWcWz[M~eWxWK\Q[KcV~XQ|UI}VP^T`UwWK~[S}VJ{[N\QYM~[M|YM\Q]RXLYMVKVH\SaV[RYNzWHyWHUHZP]TRByLBTLPEyNC]RUJYQbUWNTLQCRIRHYMIAWJLBQEQHQFPE9.42OIH?RJWNJCIAVNRM[TUM]SVMYQTL^SYNPI[RZRVN]UZMZU\SaXWM[UXP^WZNYS]R\TXOaTWPZRd^cZ]UXJ^UbZcY[Sf]dZ]WbY\SR~J\~PbZb\cZb]WQ]Te^d\f]f\f]cZbW]T_R`~Wj`XyMeZd[f]bVaUdWe[h_]yTjak`e^`UmcdZg\\QcWh\dZofkbf{WcYj]f]i\bzUcXf]f[c{Vb|W_Sm`e[j]lcf|\c~Vi[i^hWg}Zm_f}Yjckbg\lae^p`hyYe~XcuVg^obgZexXr}ahVrefz[scf}[h{ZdWi_dvXk_h{]k\o~\my]veh[g~Zlapy]ncl`euYqdj{[m`l`j}Wxjndsen|_r}bmv`yho{`p|bny_n~^o`wfo}av}erxZt{_m{\q{bs|bs{eoxZlx]syaten~arzcsbrz`q{an|^s{`o}`xkpycoy_wducr|fpx^s|erwa{}ir`xwfug|kou^txdvweny^jxZrxcs{`uxYxybq|atxbtwaqv[v~g}mru\vwdpv_uxc{{e{vbkuWqv`{kqx]qu\krWvvcqu\sybtx_txbtv[jvydyv]yzf{zevuazwcwwa{kxyd}zepo\~|h{ye|~kvtbrq^rpXvoX}xdxp\yo\wyeomYsr]{ue{gyxbtmZqmTvm^wo]ws`qnWzwawr`{qavjZ|rcsl[rnVzsayczr_qgUxp[}q_wsavtaviUwubzra|{e{l]ukV{q]ulZwoYym^wq\uhW}rbwj[~qcvfWxfT|l\~pbzi]xlXxp^vk[zj\zq`|rb}qa~qa{mZyn[xh[|k]yjXthTzi[zfRzj\zdTiXj^{dQshV{bV}n\yk[|_RxhZrkWra~n[ugX{eWxjYvdR}bUsg|i]~hZufRzgYweW~jX}iYwiU|j\~h[|cV~g[z\O|h[}dY|bQv^P{_RgY{fW~dTaR^Px]M~gWcWeZdX^P{eS{`Sw_OzbT~`V|aT_Q~YL_R[Oz_O`T_UaT}\NdZgZZM}XL`UeXXN`UbU]Q}\O~`S_P[O`UYNQFULTK~ZKYM]OWM^S\M|RFYK]RVMWJ\SUMOC]UTHTJVOXNOFVLSIVKVJRJREOEUIVLVHODYQNB&$($SK]UVMRLSKWRWNSJWPQIXNbYVKWPVOYPWO[QWN^WUJXNSJ[TVMWNUJTOYPWRZNbWYRVMZP\V\P_T\SWNWMYNYQYSc\\S]V\T`Z[Q\Qd]\T_~Vd]bZ^V`U]VgYeXd[b[_WaZf\c[\Tj`cYb~Z`YaWbYg[dXdXg_`VgY_WndaVe]e\e|Zg]k^d|YcY`~WldbWh`bXgZj~Zd}Zi}[`vQd|Wg_h_^}Smah`i_g]h\mambphj^pgldlclapei[kal^gZh~[n{_dVpdufl_iYrdofpbj\k}[ixZl~_myaq}_o~avgobpcwisdk~_n~`o|atgoyasggyWmao}bm^q}boaj}_i[o]xlpbo|`qdqas{cmw`q{bpbvhj{]lxXr~ctgw}aow`pc|mj{[n[rv^p~blrYnqWp}apy_r|bu}dqxaziq~`s|cxhsy`ptYoz`s|dqybxfsydq}`u{_s{`yhqw`x{fx|hsv_}lrt`qv]xzdzze}hr{_ktYpq[||gsxasx`wydrz`os[r{_y}i{ua{{gut_xvdwvduv[uv`y~huw^~|jrv`y{cw~fxrbtx_st\}huu]vo_us^x{`zxgvy_xu`xyasrYwv`|}iyu_yugpmUyudzuctbywbsoYus[urcwt^{{erlZ}xb|t]rmWxtb{uaxwbvbxvbun]|r`{pavizvftt`sareucroZ}m\tmU|dolUqiT{n^so]xs_tcxi{ocwk]s`|q]{o_tl]rYwhP{rbrbwoYxiVxfU~o]yiVxk\xkXzhwfVvl]{kZwo]teWv\Q}s]sd}p\|k]w`Q~k_zjZ~k]|m\hXobxdW{hZ{fZh[yf[dZxfTi[h]|hXycW|dVh[{cS{bUxdXvaMxcScWaSzbT}cTv]PwaTu^JydV|bR{`R{dR{`Q|cU|`RgZ}aSycT}cRf[`TfY|WM\O|_RhXy`R|aTx[Ly[Lw`R\O~`O}`UaU[P[O[NZO[Q}dWaV~VK~]O|\ObXZN]TYO]Q`T}]NXM`W\OSJ~]QbZXJ|WLe[YNWNTHXMTOSCYPXKYMULWM[PMBWKRHWJ[QXLLC[MVKPBRGO=]SSJZNVJRFRI+'-)KCQJYPSMYSSJ[SUN]UXPXRPMXPVPZQUMYO]UYRXQ`VWNTK\SZP^SjcaX`XVPb\^U`V]U\Q\TbZYPZSXO_WWK\Q]V`Y[SaYWP^V_Xe\^YbZ]UeY\Td[d[d\e^_Qe]i_]TdYbYh_cZf[cW^Wg]h`e_h^f]h[\RcY\}Re\k_`Xg]g]m`h^gZlbia`ZdYbZodkcaYn_eZlcf^m^mci_ofk`b}Yg\qifYi_oci]k\pel]cYg\j[ocodf\rdp`mbpbc|Vm\i|\pelam|`nerbm}]uhkzXjwYh]pZn_uiqfe|Vp`pcm~cvmr`m{]u{ho|ardrdncm|]h{Zl^rfn|\r~cueq{boy]n~axjufjx[paullyYxho~^iuXhzXr}ak{`ueu~doy^s~aujvgs|csyayew}ftdtycr}_v{fnv\zjuxd}mr}`txdxxfufv~fyeguUv}bqy^yyctwaqwbx|`u}bs}fqv_txbx|djtWz|gz}kuz^x~bv{euy`{|jsv^qr\{}goyYuxbucxyeqv^x{exy`zyfyyarxcvs]rywdxzewxdy}gutZupasybpu[w|fvv`vydxraso]zvczrawxevuatw_xq^vq_xq_zxcwzcyueum^}{g|uayoYws`xta}ub~o]{u]yoXtiUyks`us_}yf{s`to\}wfwqZytb{p]ojWu`wcwl\}r`|sbsmZxo]{xf~s_}pbuq^|ub{s_tgX{r`}sdykZ|mZ{o^weV}o\xlXxlZvk[}rcxgZvhZ~p_|n`~l_qbuiY{jZukWwbxoY}q`zt`l^|hW{fW{fWm^|fU}m`iYtiX}jXyiZ~dYk`|lYm^}h[~hY{lX}bUzaR{gXyfUf[i[k]{dXh[mV|aUybSl^yaT}kZiZcYhUdUfYeXbVeW}bO~cXrdQ}`T{`VdY~`Uh^{\Q~^O|^PgZ{ZLZL}^P~cX^S`RbV|dU^RuYM~VKjYaRaX]N]QYJ~bU_S^SUH~WH}`S{PA{[PRF[P`U~\MZL[IXO`UVKZKYKYMTIUM}TGXOOCUIUKVKNBTLZSTKODXOK?VNQGQI~IAULPFOEHSIOFUEZOGAJARFVKSH'0-ULWQSKUMUNZQTNUKPJLDYSUN]YXNQK]VVRUK]V[QVPWQa[WPZRZV]WXNYR\Q]USI[VaZ`U[RWOXOYQ[S`Z]W_VZS\Re[eZ]RbU\PdZb[_W`XbX_UaUe\bXibg^h`b]f\^S_VdYf_eZ_TfZdXh\_TpggX`Wg^b}Sj`nchaf]h^bZf[g_l_h]j_fYd|UpefZi^h_f\jaoci^j_ogi]qe\vNh[l}^j^k`j_l]pbk_j_oephg]g}YfVqgn_m~_l\mbm~aqdc}Ypcxkqevhqdpdm~]oaqdrej`obugykyjuhn~]rai_yko`gz[lx_p^q^vdn~cn}ar}bvfqfk{Zi{]pbt~bvfmx[xhugzjq{bzjsetcr}dtavfwevgs|dr}dt}cyiylou\ucvivdnv[tfwfraqdwhx|jv{`~jxhxhv|bmyZzhw}crx^zio|}g~fziu|bwxa}lv{cswbz|et~byw[{yft}exw]svdzze{fvzdzxcwuaj||gtv\xwd~isxZqv\vw`yxfqw^~zly|eyt`vv`|{gy{czzdvzd|jwydvta}}hts\~{fvu_tx`|ygvs\wc{vdxmXww]wtb{q^}zc{k}ye}xerkXwvb{{eup_yvbzv_|tatx\wh}udxp_xs`{w`|wd}xczt_tlUvmWyqZ|k[wm^yr`{pYs^p\}q_{ubxl^}gYtkV{k[n]p[{ra{qbwn[zhXscue|pZsgSo^oatkWyhU|gYkb{oapfp]~rd}k[ykZ~n`sb{n\|hUi[|kWzkY~q]i[zdTn[fWi^o_l^mdyeSiX}eVk]j\k_wdWiYn`mbi]|cUyYL|kZf[l]{_Rf\eXaTeTf\k[~aOj]f\y_UeZ}eXvYIbUeV[M{`O_Se\`S_PaQ`TZOgYeYcYYO~]QZLZObYZL}]O`R_S]NZPXO`RaQ[QWI[PaWTE~UIYOeY[KQF_TVLUJUKZOTJWOXMYNXNSKVGZQWL]PVKTHTHTHTJUNVKUILAOFUJMCL@'!*&VO]UUO\STPVQZS\UYSVNVOWPYQ^XWRYT[VWN_YZR\TQLZT^UYPWM^V`Y^SYO\T_Z\VaWc[_TXS[S\U\R`XcY\QYRd\aXbY\T[S]U^XaYdV`X`YaXaZe]cWk``X^T\WbYe\e[dW`VeWh]h]_Wg^eYkdkbgZf\g[`Vndh\jah\gZ`Z`Uh\e[h^k\d\g[g^l`lbpck`oagZf}Zi~\mdj^ofnefzXf_h_ukqfk`mbl`mao_j^h~Ynbncnbd}Vh\pepcrhm^pcvdkZm]sgpem|_ren`k^t`shvfrcn`qdueq_l}[pem_tfp`viteqhudk}\m~^u{dm}_r|`xlu|ao}]|lrfratgr}`{n}msdxkwgyisd}oy|duczmwes{aq|^vgscwgo}a{jr~cwfwjxdxfo~bxduev}ayfpx]~}h|jvht{bt{cyh|iv{_x{axh~ix|dw}bx{gzwcw{fszaqs[}hq{{gw|c{dzi}~hyvctz_tz`|zg|~k{xdv{ay}f{vckwwa}ydvxZut^}wduq\iw|dz}ews[x{etu_{l|tdxybzubtv`k{v_xd{zg{|exubyyewx_ws\zs`vz_{xbzt_xs_}|gyn_vr^}wa|gumZwr_ub|g|oZzp]~m^xtatm[udsewn\}tbwp^wq\}q]}q^t`nbxjyn_zo\}m\wu^|p_|m]yiq]ukYxq\xp^|p`|m\ra|lZqa|m^~p^}p_wiVl^p^{mZwiVl]|pa|j[n^s[}l_{l[iZyhW{j[yn`{fVj\zlY~k\ybS}fX~i\~m^j\n]~iZ~bQdVj[nbhXz[M|gYh^dR_Ul`k^dWh[bTbVhUgZiXhW`VzYIf[{^RbT]SYRaQk[bU]Q]PeU`VbWZN}ZMWNdWYM`O[O]U\S[K`SYOdW|VKZRSG`U[NWGUM[PULZP[M]SXNXNXK[R[P\SYMVLXNXM\O_W[QUIUKVHRFZNVNWNKCRIRISEXIQAME[RRHNF2,& YRUN_WWPSMVOSNVN[R[TYPUOYQZP^WTNTL_XZVWP^XYQ[UVNXR_X]V]WZQ_Vb\ZS]T`Yjc_V]U]U`W^V`X`Z`Ve^YN[Te\^TaYcYg\bZ_Wf__V]U\T`VbY\yQ`Va[aXf\\UcZi_lbg`bXe\aXeZi^`WbUkekacWkcj`k[k_g\nbi^l`h`h^hYe~ZpegXh[cWi]kadYk^ndfVd~Zk^kbn`m^gXf~Vmbk`j}]nepfobnckdk`qbmbk`mbpfoanak`n~]fWnbwlseuiqftdpbiYsdpcujvhrcrdoblYthqdrglz]n_uftfgxXm`q~dviuho`ubpbwkr_py]p|`|lxhtdm_wluhubylvivexgsfp{b|loyizh}lzht|cvbzntbsaxgry`ygs{avgwiwiubwe~irv_u`zhuyby{evgzhz~fs}e|~i{hzeky}gu|dzlkrxew}hu~d|}gox}gpy|_~knxye|l|{`x}g}jx}dxxb{zd~ygz{dyf}j|jlzp\yvdjvq\vxbi{ycyzexzd~yets\|wewuaww]ytbzp_{ye{|i{ltp\wdxwa{i{r^vf}yh|xesa|sep`zvd~tcuczwb{p[~wcqcxfyt^yq^|xb{j\{r[|q`~gws^}s_sb|q_~p]|lZ|ub~n\~sbp]ynZyj[o^td|q_}r]zo^qa{n[vg}n]m\zjViZseSi[}jY~o_xkWzfVsc{dOj^zhZrbl]hZ|l\|f[}fY~h[ydRiXzgWxdXiZ~dXi]i\dXj]|fXf[dT|iYjZ~gYdTgXhSgVj[~`R}fX`N`Q_RdZfUf[dXdWg]k_`RdWcU}`S_OeWdUcX}XKcVaTcY\N`Q[LSH^S~[M\S`U`UaVXM[MZNXOSH|`QWMdZPI]RUJ]Q}SFXM[R[PWI\RZQ\OVN[QUJ[SYLYMVJXNSIXKXI[MVKVKXL[OWNTJTJZSVJNEL@NC$.+QKZOTN^WYRYTSNTORL[TQIQKWSUQ`WYQVLWOSKTLb\ZUXO]TRI_YSI]UVN^X^V_Ve_^W^W\Si`f^bV_Vd[[Uc\a[aYg\e^^Xg`kcaZ\S`Tc[e^_Wd\bYcY^Qc^d]\P\Sibf[f]i]bZd]cWh[_VcYh^e]`XibgZh^k`pgcWlblak`cZk]d[d[f\j[h^nbeWmbqdi`i]rch]qbgYi^m`sbd[pej`mdgYrfsktgk|\e}Zpdocm_sec|Wqgr`marei]nbpeseujr`ncpcpbg|\tfsdm`qcvil_udodqdziq`lan`p}`vkqdn|_rfsjqdob{kwircvho~\zitgrcznvhzlwgp|`qc}m{nxiuzar|cs{^td{o}nq~cx~`vbue{hw~dq|by~ds|czewg~k~m|lzgw}excznmuc||i}kubnz{hv|euy]yzdz~i}j{gwwg{g{}gty`yey|d~}fsw`zj~jz}isxdyyf}nwyayxj{kz~exxb|j~~iy{bl~i~zc{{c|j~|eygvx]y|`{f~lyd~xdyr`}k{|f|cutb{vd|ta~wdyrY|vd|jxk|zcxt`uhzxdrv\s`zwavs]ud~td{gurZ}xgzh|r`yg{sazsbseubthyfvk|p]u_}qd}u`}tatmWwexr]verd~oan\s`sbufvh|lZl^yjVyiY~p`vb~m[~r]wkX~pa~l\iYl^n\o_~qam`vi{h\kYnan`xgYo`}eY}eW~m^{jZqan_gZdTk]|kWfW{kZiZo_`Sk[h]|eVh[{cW}dWaVgW|jT~`TbWbXk]fWg\cXfZcScUcT_S~aOaW\PdS~gYdU]O\S^PgX`Q|XMcVcV]PdXdZ`VbW}YHzWK_S_Q]OYN]Q[QWJ\PSIYMbYWMWM\MXPWI`X[RTLWNWKbXYQYNWP[R]R]RXMOFRHZPSIQFTKRFUFWPPBPF^TUM*&*&UMZT[T[T`XSL\SUOULYOZTWQYQa\UMYSXP[PXPXQYSTM\R\V^UZQ]W^X^X]S[S[T`Wb[YQ]Wf\\Ud^bZ]U[RfbVL`Xh_e^]Rc[d_aZh`aWjbc[g`hbaZkcbVg`cVg_`Xd\d[f_e]h_f]gYc^c[d[j_j^b[qhaZf[i]k_dYjag]e]cVpeeXj`g[mce[kaohe[neqff[qej_obsej_lai]mctii\j^qah[i\rek_pbwhwmpem`k`pbncren`l_xik]narctan~_ujrcp_zjj]}ri~]sgxlsgxhs~cxjsgm_i~^ylvfujzntiudsepepayhretgudpbq~_sdwg{mwb~usfse}mvit}]u~f|j~r~mx{eznr}^sdxhyf||eq~bv~cw`xdnk{|eth{lwcsx_s}]z~fu|^xftc}gpz}gzir~mnvZ|ktybx}drx_j}j}ky}c}m{fvezzf|}fst\xv]}io|{kv~dyhwycyxbxybyx`k~wf~|gzw`}~i||dyze}~f~l}xc~{f~{ixr^~{hvv`{zf{zeud~we{o^|ub{zd||g{grt^vw_{yewevdys]zq_xhvdzyexr^}vazf|s^ziys]wd|q]}vexc|ye~vd~scrcscvevgV~ufob|t^}yfm[{k]sdwgq`~sdrc{iyo`r`}nYn_}m`r_~paugvcSzeU{p^l]o^lb~t_ia}i[|kY|l[~n^m\rak]k]l^{dXnalYhYi]k\vaOfWi]hZhYdVoazaOdVp_jZbW|`O~eW~eZh[gZ|bQwTJ~fW]Qn_|_OaT^T}bY_UaUj\fY]N~ZJ}dWgZ]QbVbWmbdXh]~aUWK]TeV^QeX\OaUaU^S[O^N]N`U\SVLZO`W`T`XbRYO]N~\OTHUKYLZOYQaR]R\OWPXO[QZRZNXMNDUIVJZOOC\QTMVKULPDSIUKJ@RFNB"(%TM[VWPWO^XXRRM_Y_T]VRM]U]WXPZPYP]VZQaYZRXL[UcZ_YaZ[T^X]U^T^V]VcZbZ\P]TaW^V^W]X^Tg`XQ_Yga`Yd]aY]P]V`Xb\ZOh_g]h_kb_VaXdZe\c[b[\UhalcaYh\aT`Ud[e[d[hbf[g^icia`TocohjbfVg[g]`Robe\g\k`j^l`bVlbj^m``~Xg\i\m_nbuhqcl~Zg^mbk^k_l_rgiai_k^q`m`ocmamcodzmoaj_k]j_tkocnascmbm}_m]n`uiwgscshymrdwhtiymrc|msasbuftcp`thylwmm^exRmcobqbylwlsfnarhubvfuiwfwgyhveq~c}kxlzitzcvjucxgxfxjvft}bxjuj{mp}`|kv}dw|dxixl{h}i{fwgxj{ip~_te|nwdz~gu|_}jvi{ivxaziyeziv{bx}bz}f~ik~mzybrvy`~mzzcwzd|j}|itw_{~cx}cmwx`}h~iizzeh~{cyya~{gycy{d~i~yej~uc|xg~ye{ezub}}ixh}y`xjzh{{exq_~k}ub|wgzwbzh|zg~s_vp^zg}zbwdxs_|h|zewd}vc{xcwpZ|r_{kZubra}ycziwf{o_vf~iyq\|t^r`{vbtdrbud|s_{n[ve}q`tcp\ug}cRm`j_n`ue|m]p`n]pb{m\qdsc~n]n_tazcXo`o_|hYyhZi^l\{fSl^{qZl[|iVk^~gWocj\{eXqbgX|g[l\m]eWj_wdQl^eWi_dS}_VhXf\i\i_i]^S}fVdZ}bTeW]TiZl`^ScXeYcS[Ng[k^^T]S~YN~aRYN_P]RdXaTaSe\dVbUaU[N]N}TIaTXP_SYOXI[OYP\P[OVKTLZO\O_UYMTGWM\QUJXN]UXNf\XLULZMYOVMTJTJQKQHYPYSOEWJWNWKWMPERF'!20UMUNYSXQWPPHQHTJWP\UWSWQ[SVNPHYSUO[R^Y]Xe]XPWQ]S^XbXTOUN[T]SbY_VYP]Q[QbYaWh`dZ^WYRb[dXaY^W^U`UcXcYf]`Td^gYZQj_bXd\kadY`Xi\c[bYbXlfcXd[j_eZg_b]d\g\rjqheZkbk`jbi^i[h[g]g]c~Wlbpenci^h^g[f[pef[bVjaj`i_i\lbnardqhgZmak_n_g[l^wmvmi]pdoewkylj_h_odsgreqbrdn~^shzmkZthsgnarbtfqcuerdoan^vgpcug{pn]uhu~ex}btipcmz\wgxjtgq}cwlwjshxgs_rdvfueth~npdve{nsiwjygq~`{lzl~lvh~i{m~qznvfxis~d~k{owfk}kser|nuf|kw|fy}fkm{}kp~jyf{e|g~kvk|fv}gy{jmyf||f}lwzc~ly{en|h|i||giy{i||f~}i}ze~~hy{h|{gzwbvs^}jo~{fzycj|yg~}i|h{wb{~bjzixxa}k~~h|izj}j|zhyvb||g}e}xd|zc~uaztcyt`|g}xe{vbunZ}uaxp\we{ye|{c|o]~wg~{e}xd{ubzu[zfzr`{vavdveufsc}xe|m}s`uhtc}p\wfylYp_lavhwgo`}iTun_nczr]p^wd|sc~i\veSlatdt`ykl]uc|hZsgo^eVrbk]}k[h]n_gX~gX}i[|bRoazmXl_iWfWi]{hWobg[eV{bTr^{cVk]dW|fYh\|`OeXfYg]~dXj^j]hZ~bVja}`SfWdX]RdWcXiYcTbZdYcS\QbVcXeYbWbXaPcXePbWd[cZ`VbUWK\M`RcXXK\N]O^WaRXMUIYOcV^RbUUIZKVIXLWK_SVJ`RWOTKXNRHUIXP`VSISCWI[M\SUIXMRH`TUKSMZJXLTLQH*$.)XQTOYRUNZSWP\RNF^VRJXRVP\WZUWO[SRK[T]Tf^UN]Y[T`Y\S]WaZbZ`V[S_VYO]U_VcYbZ^W^X_V]PcY`Wc[jcf^g`d^e_`PaXaXf\c\e^aZ^VcT^RcZj``XdZd]`Ye[l`j_bZh_kbnfeZh\g\cYf[g]cXg]cYeZg]i\e]oadZk`g_l`pdsinbtgpdg]ockdg]g_k[l]g_i^lapdrgterdrhwkh\kbtgk_odm~^sfnethm]pbqdtirgm`xkqhqfvhlaqcrdpa{ouixioezmxisbwhuep`s}asd|lrfvipezjxjxhsgwj|mufwfxktdvju~forfv~cxhwerezhzhtgzi}nmzk|jw}d|nowg{h}kob|j}hpx}dx~c|jn}lxi~~g}k~n}j~k|lyh|n|hlucrnwgwgyfx{erw`|hlk{zix|c|emw}h}g||i}}f}go~|lz{`|jnw|e~{il~j}~hvv^m~iwx`zw`}wdyydh~l~i{yej~m~j~ioyyaq{t`|wd}j{excyj|xd}kyhzg{yh|wf}{g}lxuck|wd|vayn^tiW}i}o_qa}tfr`wc~yf~ub~sb{p[|tbvdwep^|jV|p\xksynYsexiZoardyip]vcpambo\wfWmb}q]n_pcqbyjk`q^r^o_tb~dWrarasd~jWi[j_h\m[{i[zhWkXj_cSkaj]f[h_j_}gWgZmZl]~h[}^N]SgX~dT|bQjYeYbWfXbWcXm`{bPdXeVh[eXcWcWfY_S`TcV[KZPdX~_UcX^S\OXKfZeX^S[TbRaWbUZN\Q\Q_P`TZMYNZLWOUNWMYNbXdWWL_SUFVK^NcY[OVJZQZN[OYRTHPHZNVKWL[OTJXOMDPGVONHVKPC"'%UQTOYS^T\WTN[UXQ`Z`WSMOHWQ^XYSUOYSWO`WUPQK^U]SVO\T`Z_W^V]T_YXO\W_U\WWM^W\RaY`XZRibYNaZbZaWbVaY]Vd\bYcWb[fZaWf]h_i`l_jae_jbf]f]nef]i`f_f]c[i^i^kclbf[g\eZdYkae\j_h^k`j`h\mbjacYmdrhg]cWodg]i^tfj_hZjcxnpemcxllaogqbmagZk[rdujh_wlpepbrcrel`xkjasczmsfoarfviodtgrgq~cxkvfujpcugvhrixhqcxjtevhvip~^tgqeympcl]yf{lrdvesdm}am|`kyZucrbxhzko{aw~dyhtgxjxmyi}owgwfo{hyixjyj~nwg}n|ny~b{ir~lom|kq|mx|f|mns{cpuczi|my~g}mqz}am{|h|{exhl~~ky}dzyf{l}homk|in|n~k|k}km}nzfop}hwxb}ipyzg~zhqk{h}{ek}hljkzu^{|in~{gp{{b{g{yci{h~ud|dm{jo{e}xdoxe}l|wcyd|vbunZweyhxh{r`yg{ivf~ybxdsgXvezkwfxjui~jwoZsa}v]rel^q^yq\|n_{k]nYn]sbwm[wgr_vg}r^|l^|kWqbkYo\vd}t`ufn_pb}hVq^oakYnas^pbhX{k]paoam[rdk^fXhXl`h]sck\obpbi]}hYrdk^}gW~`PhZlYdUn]dXdTh]j[}eY`S[J]Oi\`Sg\\K`TbVbXaVaVaShZj^aR}_P^R\K]OYOWKdXWHbR]PeXcR]PWK_Q]RZL{\OYN~ZJZNaWXK^QTHYL`W]NYQcWYNTIWKVL[P`VZOYPOESGTLRE]RXPWMOGQIRGOEWKXO3,&%RM^ZXSVPYQXR[SUN]X[QYTZOYURMYS]X]RZT^YUMZVaYXSXObY`Z]VbX]Tb\eZaZZS_X_Y[TbYYPaZ\UdZa[\W]Ra[h`j_cWf\f]dZ]TfZkdaVbXb[h^d\f[dZe^dVcXe[d[laf[makcqicWdYhYjah[iYmbkc`XpbbXkcj`rhneofk_i_dZl^j_kdlbofofrcpbk^h^ock_sgqcrdqendpeodqcnajakbj]thldqfyojZrepdneqfwjwjreodtfpd{qeYvk|qsitfrc|owgp`tfynyjrdsdzmqc|lvg}nzoyi|mqd{mzlxiwfwhxk|nxh|i|kxiymxiyfyhyd}nsr~_v~dm}_xhnvc{i{j}nr|]vh|j}n}p~m{~h~myexfkxfzdk|g}jsm~{h{hs}ljnxg|mux`}}i{jl}~jlz}fnhw{ay}cm}|hq}|g|hmyu_~~kxwb}js~k|jhj{zhyx_{jzikmgwcwdxhwvazzfh|h{wcxu^xgu_n{jlmsr\|l|gwu`yg}ta|r^j{j}l|t`sazgud~kxi[{va|r^~u_zhwi}nWwftb~wbuctdtdtbxf~o_tfsatescpa~pZs`|m[{lZkY|iYvfvaoao`jXrcral^k[zg[k\m_rbn_~l[l]n`~n\qdlamai\h[o]n^g[|l[n`~hXj]gXfZ{cPbSf[aSl`jXg[gXodcWj[i^g[h[_TfYcTk]_RgYcUiZ\NaT`U\O`QfVaU`RaWf]^UaV`S^SdT`R]SbU^RfTYN\P_SeX\Q^S[Q^T[N^TaS\P^R[O_S\SWK\T^SSHWMVHVL\O[RQHODUHYOSKWPRJMFOFXMSESJTI)"-+TO^WYSVQ[TXQXO\TZQXN`X[TVMUN[V\QYR]W^Ub[^Xc\`[VPbYd\SL^Ub\_XbZVKaWZTe[a[]Wc[]S]U^Ud]d^^UjdbYe\b\cZ^Sb\e`_VdYbX_Xhae\d[i]`Vd[h^c[f]h]h]gaf^eYbYi]faj^ngqhlbh]g[ldqgshtildlakakalaj]c\j_phi]n`pfril_vkmblbpdh\pasfrergrgpamcukpgm]pbxmxktiocj`tiocvjvlnbwjl\vjsim`vgykuhl\sfzkwj{nvhykvgwhtfsqexlvkvhyixfxhr`vjxfrtezkyhyjp|`wfufsfubxlvexh}l}m~lyj{lwfvf}k~myi{kykzgzdpmszj}nqlznxf}kyf~q{fp~j|g|kn}~i{e}llo}k}hp|knmx{bv|cnrhwzcpj|~gu~|ehw}fx|e|{ck~i~ilj~k}{foll}llzjygzeqnxi}fwjm|jzvdmzgy{dveozxe|h{el}l{l}tc{fys[|iwitdufl\qvdvd}ua~z_vfseyf}vf{d{gve}tdtevfr`rcxl[xj[qb}n^rc~sathpd~p_ve}oZudsbsan\q_pan^n_i]p`jWyn\~k]m^zjYoc}p`ygUj]nb{mXk`jXlci^}hWn]wfj\jYsila}bSsgockYk\|gZk^fZhXeYeZdYaSfXn`eYcUgYdTcWeUl_cX^QgXbVfZaUj]\Ne\\PeZ^TaVXJfUWNeY\Q`VdW[O\T_UbZ\N_UXJ]R]QcWYO^SZM`S]QWMVG]STJ_S[PUIXOYKXMUJTDZQWMZLZOWNRFQFSIYLWKRHNF+)!ZRXRXRSNULaZXSVO]VZRZP^XaZ_[]T\UZR]N\T`WbZ^W\Tf]a]TPe]dXbZaY`Z[S^T`Xc\cY]Tf_\R]R^Y^S]Wc\ZQ[VgYaY^Xe`e\]V_T`YcXg\e[gaeYcWe[bXdYkci_h`icg]m_fZdYpdfYk^lacZkclboecZc\rij_i`j`sjf^e]f[d[g_fZl^odnck_k`pfl`qfmbseqhseocqfriparhugvgpfsgmcwiulnbtiqgrfoeuishrcunxgpeocn^xmtdymsdoem_viyjqsbsd{m|nwjvjtiueynq`tfvkvjzmyjufzgyhufuc|pxfpziyixj~r|j|o{j{lzm~oq}lopw}fo{m{h|kxc~l|n{jkzmzg~nve~fg|mozezkshj~jmxe~h|}fmo{ezjrjqs}k{}bolq~mlp~h{hpon~i~ml}is|i~zfm~|i~k}kom~{cnoml~lmnzh{gyh{gn}wbxgplzjzl|}hva{l{ixgwf{p]{g|yhydxg~lzhuezu^vewezkqcwo\xftem{ra{q]p`ue~tbsdzhXt^rdrbwko`sctcr`q_ug~o^l^rbo^tdq`ua}n]n]sgpdqb|g\td~i]n[hXi[m[k]fVgZk^m`bTh\h^p_h^j]l\jZfZhYcW}dTk_k_iYncfZcUh[kafYeXeZbWk\h]fX~eWc[\L`V`T`Wg]ZNi`[OaU~aQd[`S_TeZWK[U^RbTZPeYYEZP\SVN^Q_W^S]R\O^TWMVLWNZO[Q[T[R_YMA[N[NTK[T[P]QXPSHQFXLSIKCTKWMULRI(&/(VOZT^Y^T[QVOZS^Z_YWS^V\VaY^XYSaZ]U`Y`Z_VYSbZ[R^Vc^]Xa[`Xe]\QXOdZ_WdZiad]e^]UbY[UbZd\cZaY]Rf]lde\c]^T`V]RaYb[`UdYg`c[b\h`dZc\h^i_g`bXkbg^mcmbh[mekandi[g]bZe[d\mbh^sjmbg]i_l`lcoeobtfujqhl_pfobj^obncocmaodobi^thwimargrendvlnduksjpdn_sivguhqgxmthqeqdpeykrdlctlnbsezkrdseo`n^uhxirgyqwlzirgt~eu{izkvj|kshwlxljwh{mthscygvkvfnmwi{ltg~mp}nxixfsn|juer~lpwkyi|l{j|j|ij|n{iyg|isrzi}lqp~m|i{mn{goqo{|f|hpom~knr||ex|ko|hrwo~{h}zehnmqpnnmlpn}|hnq{emlsnihn{gil|{f{t`~{iyh~ydlyhzf{xayf~o{evh|i}vf{ud|f}h{s`zj|rbyf{hxixbzizipbtbyk~k}sbvf|ud{js`m]ucter`p`~o]pboascwjvhzir^o\rdtcwdvhgYrao\m_}oYiZm_nai[pdo[vfnak_k[na|fZ}cUm\g[kXl]n_dZm]j\j]}aSmboffYh[h[aVj^g\cWl]g[cXhYeVdSfZh^^P`UdX`XbTd[_VdTcU^PcUi]eZeU^V\Q^SaSgZeY_SWJZM`SeZaVaZaRZQ[M\M[O`V^QZPVLYKe[ZP^Q^RZNZPYLaTSKZSYPXO\PYS\WTJWJRKWP[QRKOE(!*(TM\UUQYPXP[WWOUMUMYQWQ\TYP\WZWZP`W]XWQUNd\d[WMVMbZb\^YWP^W]V]Ue^^Wd_\S_Te_b]_Z\TbZ`Ve_d[\U_[g^aUc]c\[Sj_l`gai`e`qge]aZiakag]i[j`l^ldeYkbg_mcndnfcXqimeobkch_pfe\f[lfhamdl_tmrkogk_j^sehZldoemdobrhuhwnrim_qeodpgococlbmapdrbxmshk_rfoek]thrfxjsgwkpftkphwotjyjxkznth{lwjtjthwkq{o|ouiufukzlp]|o}o~nxmynvd|nuhudskxktf{kuhzfxjmzn}n|ozizjxjueyn~mzjozi}p~oqyjwjqswgospl|lw~bp~nt{i~krqj~ozlom|kolmri~ktpwviiopkqnkxzc|k~kumopsyi|k~goj|{is~kl|{iflqmvmkh}i}k|jue{f~xevfwf}w`|e|ybp|eno`zmyh}jzi|izgwdsbwfwiiyhtaqds`wewfvfsczhs_we~sbq_udrdm_xgrbq\raxhrcsaran]ugvfudp^qbobl\vjtcqbsbqcj^m[o_~m]j\obgXh[hZlak^n_hZeYfW~gXg[gZk_jYneo_nb}cWhZd[j]aU~aPcU`ThZlabVbUeYaQ\QcU_ScXeY]RcU^SaUbZcY[PWL]RcX\QaV_T^UaT`WbVdW[N_SVIVJ_S\RaUXL^P]TWGZO]Q\P[S[R[PYNZN_S]QWMVNVMXP[RTKVLVKXNVOOJ%!)$SJYP^YXQZU`ZTL[V[SYRXR_YZTXSa\[U_Ye]]T]Vd][Ud_e^]W]Wc[ha]S^U^U^Te_d_bZg_bY_W`Y[Re]j`_W\ShaYQ_VfZbZjbaVl_b\e[d]dXeYd]j``Xske[g_g`cZ`Xlcg\f[_Yf]j_g]kaf^k`ogbYm_nembjbf\k_j`neqig^kcnenazpiboeodulobrjk_marfvlldqhmathujocneoamcymxlqerjvivlxlqfrczmznuktfxjteylvjyishtmxkzoukylzlseueznyk|kwkyjxixozqwh}o{m}rvg|r}l{n|mznvdxjxn{j~qouxgn{q|n}ow{nsm{kyiyh~lxm{j}jx~d{i}l~k}glouo|ilrziprlo~kkro~hzem~jzgltmpjqmnspkn~{jpyzg~i~jpjnpfm}zcozgm~m}ye|hil{i~h}lok|mnn}cm{k}jxdwe{m~xa}jmxeylub|h{esaydk{j~sb{gxe{kzkxl|u_xhxjtftb{kxexjwitbveqdudpazi|lmZue~p^j^o_wfsdvdo`tahZjX|gWl`obq`n_o]o`q]qen_sem_hZhXo]odi^o`nbl^i\i\k^k`k_l]k_bUh`j]gZj]iZdWl[jadZn_h_ndh\j`eVeZbWe[bUg\bRh]bWh[eYbYaTaQdW]N]P^W^NbVi[dX`W`U]RUK`UUKXO_SYQXP[QdZ^UZPWN\R]QYL\R[OSFVMSK\NXIWLXR_UULXLXMQGTLWOUNSI%""!XSXS^W_XUN_WWOaX[U\U^Y[S]WWP]V`ZYThccZWL]VXOc\ZS`X_YZSTLcZe_^V]Umdc[ZQZSg_cZ\V`Wf]`Z^XfZbYdZcWcZf`ibcYi`iaf\nid`aWdYjch_\Th[f_i`j\k^f]qikgh`iamamcpjpihakapendmakarhm`oglapdphh`siodukrgwlrhoauek`vnvkkaxmrivkvhwlvisirwloetgrgrgrgzquiwlsfrhshvlviui|rwivjse{mujthuiznynzlo`{p|q|om`vhyltgykuiwjreziyo|mv~pq|mxh{m|myl|n|myk{n|mr}q{l{lr~pp~l}ost~pmr{k}g|il~o|kxmrqls~mpr|lntpphqszlyq}k{ej}mjkqnngorjr}kqslsonp}ikk|{eol~j~jmloojvkkslnvf}eyi}hwj}i|kyfqp{h}m{ivdvguerbmxh}lsbyf}mxjzgxdyjxisb~pueucwivfyevgs`xlwf~q~sctcwkgXvgm`uep`tgsb{ki[jYeYmarfqdhYn_~hVo`oaq`scwdpf}eWhTjXm_n`pdcWnahZuei_k_hXlapefZeYl_i\g]j^aToacWh^_TeXf]j_eX`QcUh\h[dY]OcVnbf[aTbSg^]S`R`V_UdVbU`U\QaV\O\S_W[OcTaWXQ_WbVZRWKXLb[WMPEXPZMYPUN]QXNYRYNTLZPbXYPRGXP]SXNXITL'"++WRZSYS\V`ZYRaY[S]W_WYRZUcZ\S`Z]Tgaa\e_WRb[b[b^ZT^Yg_\V^U]Ze[fa^V[Qc[`Zhac]b[d]e\g[bZaZf]c[f`d]`We]e[f`ofhajbdWh_gbb\jbg^gaodrk^Wf]cYpfodncg_f]pdnesjlapfk_i_pfocmei^rgh^pinetioch]sjofnci`i_rhrjtjj_paqik`silbqcm_pfqfqdpdrctiwivfmauh|mthqfodpcwishtj{qxnvmtypvkpbpcymxm}nwk{ktgqwg}u{ksb|n}jzhssfvfwitxk~ro}poymwjykyp{kss}pyk}m~orq~pq~nso{inpnv}lorxrpry~kurmturnspxsqruoh~kylonjrokn{jrmxqtnppnskpqohjlkm}ko~l}jg}joyh}ltl{{d|jqrzg}i~j}nzf}l}kyjo}t`zm{kwfzk{ksd|lxktdxk}myireyiugl{l}sbwjte}mwhwg|ik\ziykpcwgvfnc~r_vd~t`uewgzgudsbsfnamaqbygufocn`pfl_vkoa~kXp_j^oal`iZk]pck\}cPjZnal]k[l^h[j]gWi_aRjZi]f^g[e\jYg^j\mafW\Pia`SbRf^j\aS_TgZi]`WdZbUaVbUaUZN`VbV[R_TaWcZ_Q\PZPZQUH^SZQ]VYPYP\O^U^S]QVN[NWLZOSJZRVI_SXPWL\QZPUN]SUKTIXMPG$$ZQYS_XWNXPZS`X^X]UZP[VZObYZTXO_Y[V\TVP_W\R_Yb\_Xg`i`\WjbYP^Wb]d[aW_X[UaYc]`Xgbe\hc\UaX_Xc^ha`VkacYf^g^e]c\ga`UcYe\h]ldaWofg_f\h`kah]g\obmdeYlcgZj`lfrhjbrhg_ncunpgmbrhqdocmelbmckbrjh[mdtekcldtimdtirgmbtjwjsfujtjlasixkkbnd|qpetkmcqexl|qykzpugwitg}pujpevmpnbynujn`vk|rzkrdo{j|qylthyjym|kzmyks~oykzmykru{n~pruqzn|n|mulu|ps{kzkrr}osqu}kszststt|jst{kurs~ojnnupnut}prwumqvqsqvuqtmslsjsmluruopspopq~irvi|h}hmn~|h{hlo}o|jl|gmzfzj|hzhuf~n~q~koo}l{j{iyg{k}jzkxiwdxgktewivim|mufm}jxizivctgvcqdwjwivfvdvfxhxgxjqai[r`qerdudq_obs]jYnatashrduemavhl^l`ylqdnaj^pdkakXl\i\k`g\m_gYlcj[pai]gZj_ycWeZk_ndn_e[dYk_cUcScXf]l_f[`VdVc[dTg]^Rh[f]^Tl`f]^S`WZRh[eZbYXQ`WXP]QXO`T\Og][Q]P[Q]RcZ^UUK\UeY`V]PUMXP_VUH^TSIVM[SSGPGSIWJRHWLXL'!("MGWP^WTO\UZSXRaZZUa[b[d^YR[PbZb][RVLb[]W[V`Zd[YLd\\Sd]b[_Y`YbZ]Sf_jb_VbYe_h_kce[aZd_iah`]UcYb[h__Ug_thi_e]hae]gbf`jag^qgh_jdg_f]kbc[kaf_h`j`ndj_jbmdtkpflbmandjawmkbmdnfoch`mbrgk`lamaugmaqevhwipdo_qdqhzptjzmm^vh}srhnbuishsgsdwn{o{owksjvg{p{psgwmseyivkqctgshods|pzltthmdrfzkps{nyk|qzo}j}npbv{o~nnu}otuxkronwsquutzk}ivrw~stx|kmpwqr~hp}pur~q~rvqrsrysprxqpjltmwtjqlqpptyzho~kqvovqootvwnsziopnuq}lyfq~nn}n~jn~w`myjpwcqpwf~j~k~jzhrmuylyh{it~wd{j|j}izhuf}gntdwivfmwivgsdzk|nyjodnufsbsc{kpctaxh~owjtavfxjucl[scuii[k^rcq_sakYl`kYbXnargp]|k[jYj]h`segYgZj^fXiZiZdXjZl`h\bTk]cYk^k_bRgZfV^TaUnci[nbg]k_l_`Wd[^S[QgXfZc[dWd[aQbU^T^TVNdVf[[Q[PdY[P[Q`V]SZQZP^WZK^VWJaV[P^WcXZR_S^TZS\PSG[P^WSIWMVNYLSMWQVIWKSIQE$#&"TMVP\VYT]UYR^YTL_X`Wd\e\`Z_[]T_X_Xf]`Y\T`X_[aX^YaZ^X[Sb]e_a\c\]W^Xb\`WgaZT_Wg`]Uf[e]\U_Xdad\hamcg_f^ldd[h_h]k\gaf]g_e`d[kdh_ndkdjchaf^j\e[oejapemdphf_ianerksci\nfofrhqhh`sgjbngf_j^wkpfujskretlujobvlogoelaphkcnbqcpel_riskylugvkvll`sitizlylthm`vjsirg|nwkrodymviwmqgzltxyl|nrv|pwkshyi|m~ruizjptg|q{os{y}prznznvtuv}nmstpwvqts}qptxvwzvrxvqvsvsp|zrn|utovs{xuv|pvqsqpquzotxstmvxkxp|f~k~krt~jumojr{jr{eq~k|gjq{i~lo~loom{g|kk|hnmlueu{m{hzdygzj~iyjxeydrdzl{lvh|fzmygtf}otgrcyixjxgzkzmuitcrcyf{lug~iXvjrgpbq`iYobj]rasdm`oeo_ndn\obrdugm_qanfo`qerdqdmaj^m`n^obo]nbg[o^bWeV`QcXi]fZeVi_gXgYh]g\dU`UeZcYbVf\g]dYbXeXh\`RZOZK]ReY\T\SZS]QbVbUaW[R]T]P^VXOUK[R_T]TaU[R`VUOWP\RWJUKWP]RZQ\SWN\UPG[SWPOHTK%!YQ[W[W\U[Te]ZT^W[UYSVPa]aZYQ]WXQaZb\]We^YP[Sc]_Xa\d[b\_Zd]_WfZe^d^h_bX^Vhajdje[Vhag_c\e]e_g^\Rb[i]iae_d\jaiab[kci`hbodaWiad\lbg]gbhbd\l`e]d[k_ndjcf]qflcmbmdogrgnelbphrkh`i`ka|rj`g\i_mbkaqewiteshkdobqiuivjshzozovknctiyoqg|oujwishymxlwiskvhl^{pymtj{nxmwjtykuczmrwm|n}lzntg}m{q{o}o~r|kwh{or{nqzo{m}qvi{o~qtswq|owqrqvosssuvuruuqzr~l~ntqxnyxnwt|pwyz{rwrxxqzwqwo{}}xuwnjuowszmqhsjvw~kxmosrr|u|htusltozin}m~m|nqshqos{k|n|ko{lwgqt~o~lwh|imwg}kvhzf}m{m~jsd}k{jzhuh|ovf{n{iubrfyhteshteuevepdueuiwgoasdsdsfl_sdncrbykoaullYvipdne~iZsfhXsag^f[sctgo`eZm`gXn\gZlck_rch\l`hYh\k_h]jaj_gYi]bVeZeWk^g\^TaRaTfXk]`T`Ti_obcWZSaX_U]T^U]UaTaU^T]SbXeW`RUK_Ve[YO\PcZ]SZOZP^UYOXK[TULWL_UYPXLUM^V[QSHUMOG [UWQ\U\W\WXPWNf]b\\U\T]W[Ud][Sec[T^Xe_d_bY]W[Tb\aY\Q`Xa\e_d[d^aY]Wd^`Xd]bXfbcZhblcc[aXcYh^h]g_\Ujc`Ze]le\Sd\qi`Zh`i_d^eYf^nenfndohialckbh^mdk`qfk`jbh`uinfi^qhmcqdqfpesgrhritkncvkl_ujtmshrgrgpgqfodxmvlqfymodqfmdwkuivmsisfrgqujzmxmxlsguhvjwn{oqu}q{lzowjxkthwkwi{ouj|nsf~olzzoyn|oyyoou}o}p{oxv{v{u}m|ovsqosvsnmxvvsqwzsvxuusyy~z|wxwtzxszro~tx}}|tyzrqq{uuquusosrsppvnv{suponq}hsrrotjtqrkpv~jsqrrpq~m{l~g}ou~pqyg{k~mrvd|m}mwfpyjzh}lxgzlzjsd{ixjxfviwjue{lzl|nyi~nteubxfuisem^tis`uetgm\scj]rcm_sal_obrenbk\n`lavfm]icsdsceYncqembugk^sancbXeZcVukk^sgbXlafXdYi^j]h\g]cUj[jbaTj\eWeZaV`XbYcX[SbVcZaWeUe\aQe[`W`Ud[bWaZYPbVe[^PbZ`XZNVLYO\OYOZRYOZKZQYQ[M_UVKWL`S[SXL\R^WYPVM )"SM^X\Tb\YSYS`X^VVO_W_Yd\`Zb[]T]W\Th_aYd[iad]^Ud\[Te[]X`Z[T_Wh`_Wc]hadZf`h`bYe_c\j_bYf\f`g`bYb\d\pgkclcmbdZnerhbZh]hai`d[l_kdskiamge]tnmflbogkbk_ofk`tkkdlbnckcg]ndzrqilaqhh]rhphpesirfnbwlsfxloeumwpmf|rtjukzmxktiymzqwjuiymujwkzp|pxmvl|srkzmwixn}qv|tv{n~nzo|pxn}r{m{l{~r~q{no~p~ostv~pvxn~otsrvwsnvuvyytruwsryssw{yuxv||{tswvqrw}zu{~tzlxrptxux~x{vxxyuuzvxss||pouottwtqvputuntwsvxnrppqql}i{mun~nrt}m}j}l{i{jpzg~jrqpzk|myiyiwcsczkynrzhzl{iravgsbzmweuf}o|j~qzhrewcsfuesfshrdvitdtfp`l]odwixfm_tdl_qdulmblatjmaj]l_g]obl]sii]scobkbi_dXi\i]aXfZn[nbgYcXhXcYi\f]fZdYgXbYcUh_bYcU`QeY`T\ScZbVf\^TaYcW^T`VWL^S]T`T_W\NYNaYTMZOaW[RXR\P^TYQZP\MVNRJ\V\VWRYQWPZQ]PQGWMPH!'%VQ]W^W]VaY`U[T[TcY]VYQ^X[TaZ`YfaZT]VXPb\_Ve_\Vb[icd[ZVb\e`ZSc\g^\Ta\c]gamhf]mdd\jdf]nbkcb\f`g^g`g[ofsig_ojk`jbb[ofskh`cZpih`lcrkh_jcjcpjiah^xnf]qfqhl`phi^ndmdkatjiblcnfmek`ske_pfneqinaqincsgvmsjwmwlukwnujviqfxktjriuirgwn|qujzozo}o|p{qwlwmxm~qwkxnzosr|orwj~pzpt}p{r}m{mxp}msvu}o|{pxx|lvuvr|oysuwttou|vuwrvzuusv{|uuv~zxzs|x}yu|vzxy{|yux|s|st{z{{y}pwtwzx{svppxyssvrqt}kuttxnspnqoqqqvszjumrr~nkt{k}j{k|i|n}jozj}mziug{jn|m{nxixj|k}myhtgxhwjseykvjvjvk|lxipbvkufynvjwisfm`sgqfymn`q^sdpck_qdthm^ncn`i]rffXgYg^m^h]j]g[l^gZl`^QjZqebUh^e[f[dYj^g^hZmdj`h_eYgZfZ^Ud\g[`S`VcYi\eZ]UbXla_U[P`Ve[aX\R[Q`Y_Z_R^TYL_We_WKTMYOYO_Q]U_W[MUMXPZMZQTJUL[QZOXMVOOF& VPVQ`[aY_XZS\X]Z_XVQZSa[b]e]^Vc\f^`Xa\f^\V_V^Wd^`Wh`c\]Vd]`Wgac^d\^Vd]jbd^^Ud^pjf]hajbkce_e^jebYlcjegaibiah\nee[qjg`nfnhmbfag_jenelck`mef[nemeibd_lcslsirekbqilapbofwqrjnetjtkwmwkthldqgvltkrixowkthrgxn{pxkrgvmzqtfwm{osgzpvvivk}szo|q{mvhvjx|q{ougzmxi~ovzo}q}puvw{nuuxlwxkxkuwrr}n~qwu|w{lyzvptwy}s|qovw|t{zwysx{{~}w|{y~x{s{~vxr{{}}wuw}}w{~zz{zzuzw{wtwt|ruzttrryuw|tsqwuruvvs|l~pm~ksxpzl}ln~nq}mzgqoueruyizlpzk~qrnzlwlubtd|hyiyi|nwjvg{mxk{m|pwcvfzmsgp`tgtfqcrdmaucymrcpfrgl`uindpem^j\nar_nbk_j^l_j\mbeZhZj\qfl\i_kaf^l`i]dWk_gZe[cXnch\h[h[aUcXaYeYoa^UfZdY`WaUgZ`QbVbW[SbW\Qc\^VcZ_SZN[S]TZP\UbX^XZP^UZQ]UYQ`X_WXO[RZPZN]U^S[UPJ[PWOYT(# RJSM[V[Vb[\WYT^WYTbY^Va]aX[VjcbYd[\U\T^VWOaZf]d[f`b\b[`\e_gaiae^e\fagacZ\Vb[c\g\ibkcc\iblf]Wibg`qid^jaj`c]k^kbc[g]i_f_mdh^vlmdneogsjmfofpdmcsmjbngpgofrirgodsgofsmpijbtkqemgujofohujvozmqdumvkvkwlsixjshwjxnuhym{mznwlwmviyn}uvl|qzp{quivk{poa~pzoxlszprxis~t{nv{msx}p|nu}pz}sstz{~rxsxx}vrwuzuyz}}xstuu}}yszw|q}z{z|v}yy~{z}y{rzx}yuy~zz|uvw{{{w|vx{vov|twvuttsvqwt}mpwnopq{hmrrvxqst{ht|mp~l|l{joq~nn}ln]zkzh{n|lzil{l{k{l{kuexjvgyjvdwgvkzmshscpdvhpdrbl^tdrcviwkrf|pscnamazoscl`qdqcocj`obqcvmk`m]o_k_pbnbhZqgeXj`j^mdm`g]j]g]j_i^eX_UcWj\`Wd[h]eZg[eX^Tf]bWbSbUbZbVcY\Q^W^VaW^SXO\S]TbZ^U`V_WZN`W]T^VYOWK^WSKVMXM\QRI^RZRWN[MULVO#))UP]XcaYRZSYRXSVRhaZRZT\U[O^W`\]W]Wc^d]]W]Vhbd\_W]U_X`W]V]WcZ^YaWa[g^kfd\ibhcf`tk_Vmehangld`Xg_g_mbicphbYaZe^cYjch`nckdqgkcphjai^f^mblcpgmdhah_uikdhaqikbkdlbrjh\unqfqgskphtkrhobvmvnob{qultivmskqhyppgqfyksjthvmymwmncvm{luvh~srgzpzpvk}own{q{p{qxjxmtuhv~pxtyk|oss}r{msupzmuxsyuwwu{}y{tuz{y}~|yx|z}x~}~~|}~u|z~|y|yy}|zwz{{}w|zx|styy{yyu|x{vvt~twwxuttoqquss~mz|nvpwrvo{iu~pqvoxiqi|m|j}l|o}kxm{k{mxkuewewkwkwgzjyjsfuiwkuhpeyitfxiqc|nsbtdoaylpdvivjl`uhoaugnbreeZm_ndrfncndlbteqfpcgZmavkk`lbgZobj_k^g^f]odh`gYfZmai\fYi]kbbZe]ldf\aYiag^bZe\lb`VbW^SbXdX^VbY\U_SaW_U[Q^WaW_R[TYJZQ^W^S\T[RTK\QXN\U`UTK\QVOTM'%$$XP\VYQe^^X_Y`Z_X_YaZe\c]^W[Se_b[_Wd]d^aZdXb\f]e]ja_Wh`b]aZb\e[mgh`e]_Vgajbd^f`e\h_b\hah_h]e]dZe]e^lbg\jbpfhcjalfnfmghaldnfmflef`slpelcl`sinfpemcwnodpgsixorjsislpeukrjkbphrgkargpcsgmeultmtjrh|s|ptgwlul|qththu|rtjvmxuesxm}pyluh~p}sxnzo{o|mvwn{s|o|oymx~suh}vr~ory~pyn~quuuxvzwwvxut~vz}vv}}~|u|w|z}v}|}|~{}|~sz}~{~y{u~v}|vvwvwqvxwvvyyt|twxp|iw{kp~ostuqusr}m|ouyiptoqpyiwyiqsmuixj{o|qwi|lzk}nykxjrte{nvgymwgthuhvfoeobqdqai^nerdtfh^qemcsel`hZseocrftjl^m_mapcnbodiWhYrckbmdmbeUbYi\ofg]i`i[kcd\j]k`j`bWe^e^g\i]bYf[eYbW_S]Rg^bVcWcY[Of\bWbU\Sg^g^^SaU`RYP]Q]QVI]UZP[Q]V[RVKWPULd\SLUJ^U\NYRSOZSXS]W]VYS]Ua\a[_W^W_Y`Y[Ud_ZRb]`Xf`aZa[d\aYd^b[ibd^aZd^hdc\^Zgad\bYjbd^d\b]e\kdgaaZg`f_jcjbh`jai`gaibg^f`pgnflanfkcj`pgg_nhjah\kcrisimcofkenenej_odofj_phi`ndrjoiqhujskwmwoiaynpcsgxlxlsiulshynvtivo}rujxoynuxmvjzn|sxnwk}tt{t~suyowo~sy|o|tyvvxm~rxx|p}ouv{p|ysrxuywu|yz|x~|zuu{{~||}{}~{|z|~}{tsv{x}v{~wwvyyzy|q{qxsq~lsusxqqvrrpwquyhw}p~lwpoppsto~r|m|m}nyj|o{kzjug{n{nui{jrd|qyl~o}lyitf{qxhyexlshrfrftduirfujnatewmsgnco^uhqbobuhndrepbsipdqdrdj`k^dXk`i\hYk`m`obg[cYk`bYg_fYaVfZ^Sg]f[h]l]]Q^Re]aXbWaUbV]Q]TaWbX]Og[]Ue]^UeZ^V`TXM\SYP\Q\RbZ[SZQXO\S]TVLULRJTLVMOI! \X[Vc]ea\Ua[VShaa[a[c]b[^W^Xhae\_[e^\U\Rb^f`f__Y^Xa\`YaZaYd]`Wb[e_b[ogf^e^e^hae]jcf`falff_f]ibb[c^e]rjf]b[pce\d\nirif^ldofi`e_pgjadYjak_meqig]ibqhsnqgrhvmpgskvlpergrincpjumukg_titizlriun}qsjsizmxq{mukzqzp{rxkti{nwnzoymvl|s}rvyo{p|ot|q{{p{rtuujyushxo{m}o~uwrv~qv|yww|wxt{vz~t|~x~||v}z}{y~}{|sywsxxzu~}z|tow{u{wsruyyut|sp}osy}pupw{lrnto~sq|mvhwgyk{k}oxjqnxkzj|k{otj{kviyjo`~otvkwjwlo`vgucsfndqxlwiodwjylpevjthofrfuiremaocl]j`j\lch]m`ldmci_g^m\l`l_k_h^bWj[kcbYh^aXg]d[dZbXbW^Tlai^hZj\^V_WbV]U_S`UaX_X[QaZ^T`VYM^U^RXOWN^UXRVMYQ^WYQWPYQYQYQUNXSXPWNTLXQb\XTVP\W[UYT[WUP^XaYka]X_Z\Ta]jccZe^d]aZib]Ub]d_a[c^b[e_i`e_g`kde]d_e^f`ib_Yjcf^c]kbe[oildnikclcd_d\ognhf_f]h_qjskmfkcg`pfoetllbtmrllandmclfqivmskpfzpqhkbnhodmdqipfykukpdqetmyoshzrrhvptkyovmyquulzkwk|rxnwmwlzo{lxm~uynyvtsvwkxi}ryo{qu{|qy~s|ru{qtyy~rxxyt{{{|tw~z{|yy~~~w}x|zz{z|w{t|xx}o|yx|uuqusws{xuzusrr}lwtzlrxl{lls~rznyoymsyj{lotxmqwk|qwj|mtivhzlykzkqiqf{nxkqcodvfnbo_oetjsfseobq_ndndmbsfukncmapdg[odj[g[k^i_e[eZg[kdnccYh]j`i]h]cXf[i`ndf[cX\SbVcZ\TbXcXeX^QaW^U_W\TbZe]dZcXVK`V]SVMaW]R[PZP]S\T^V[S^UaXXO[RZTXNSLPI&"UPXT]Wd]\U_X`Zb\e_\V_Ye]b[idbZc^cYb[`Zb]aXg__Zjcc]_Ud`d^_Ze_f^ibb[dYphaY`Yqhf`mcmemfibd`f\mgpilflgmdmhjarfndnch`qjshkdriidslngrif\skmbkblcjavkpj|twmpioerekevmwpynrgrfwoulrhndulmetmvj}rxl}ttkwmyp}tvk}srwlypyn|pzpzrumu|qvu}qu~s~rv}uvv~u|rzo~vw~v~ruv~t|x}x~}~syx|~v||}y~~~~v}z|xz{|wvuxw{yzx}vv{yssqvwq{mtrqupy~o|ourrsu|o~prgwwgykxj{k{lsu}pzmyk{jzmyjp^{l~oxltixhrbrdzfxgylk]pbobqeoevjsinapdn`masgued[obmdmboel`l_g\eZqflah\fXpek]maj_i`cZj\m^gXh]mbd\bXf[bWi`_Sg\aWcZf_`WaU_U_Ye]ZPZP`VbW[T\RZT`W[P\SXQZP\S[T]T[Q]SUJODYPYRTL"QI^Yg__W_V_Xb]a[^W]Vg_b^e`b[cY`X[Vb\b[_[e\`Z_[ldbYc[^Wmfg`e^d_e^j`e]aZkcj_ldmfkdgae`kbh^kblej`qjjcibxpofe]pglemeqij`ofjckbg`lapcqjofunshuosjqhnfpindreohphwpuhqjibyplcpfzprmtjvnzrxr|stl|t|twktkzn{tuivlxnwyo|tzpvlzqvlyznzq{qr~t}swstuzwwx{vuxx~u|xwyw|yu{}x|z}~xxzy{~y|p{|z~}uwuzzuzzxynuw{vssvpypou|o|nwzg~rszryi}ruyl|luivuxk{o{r}qymsfzp{mxm|msizmxl|oxkraqcreworfrfqfthqem`tfqcnbh^j_resjmbfYodocofk_g_maj_qgofe[g\kcbZh\j`dWj^jakaaXi`cXd\ZOdXdXc[jb`WcX_SYPe[d[^TcV^UaVXN]UYR`TZQ_Y]R`XbYVPSN^U[WVMZQ^U[T PK]T]Xeaa\]W]V_Xf`f_[V_V`YaZ_Wf_f^c_b[c\e_e`jcaXmfib^[mfbZhaiafae_jce]f`e`e]aYnfmchclebYmgf_mhkdi`rhjcohmfmekci`uilfkejamgnfqkkdsmjdldsjpdsjojrhujictjrgujsime{qsiwnsmwpul{qzswnslzoulul{ongvjrkwosmvkxnulyo{q|r|r}o|qvxxr~szr|sw}rquq~t~qxvvztxy|{sxv~{{yw|~{|x~yx~w~|vyqvzww{ttxy~quqv}os~q|mpuqxtym~o}p~o{n|jxlvd{ovjwjt}pozn{q{rxl}oznxivhzmwmpgsfqgrerctetgsfvgj[qeuirgmcnbl_mdobujrfodm_lbk_k]j^lcmbg`kag^i`bWcXg[h_fZeYe]kbnbndg]aWgZdZbW[NbXXOcZbXbW`Y_ScZe]]VXO\T\S_T_U_TbYVOWQ[S_W^UXOWNTIXNYQIA!ZVZU[Wa[VQ[Td^a[`Z\TfbaX^Yd]b\c]b\b]a\cZaYf`c\e^aZ]RbWb^cYkdf`oif`jajajamflfi_miiad\gamejce[oerlg^d]d[kdngjbmeialemcialeskofpjk`tjrkqhj^mctlkcngldsk|sslzrwrwmshrjuntjsjrkrixptgxowl|tncqjtjtnxnvpxlyoyp|rvzqwlu~q{oymwvtwyny~sv{xvyswpvz{z}{z}{vx}}~}{zy~y}yrwyzsz{swuww}nsux}n|oytrr}puut{nxj|n|l}o~sp{oyi~rwiykwl{nvhxgwmxk~q|qvjwnoexnpfpcthwlrftepbylshsgsgtisfndi`rishsfthnbndlcjavknbpehZfZdZg\mcdZdZlbh^_RfWeZh]aWg`eZj`h`^Sg]cZcYcZ]VcVbY`Vf]_W`X`W[OcZka`Y^WXO^W\U[Q^V_VVOZQ\SVO[USJUO]V\VYQd^^Wc[_ZcZb\_Zb^c\e_^Va[b[ea`Z_Yc^f_jdkeb[i^hbfac^d[b[gaf_hbe^e`ldmghajeqiibc\nfjelflcg`qhnhg`jalfi^ogldhajdkdg`j`ulpgpfphuli^pjnfpisjpgogqhwpnfslskyqvlxpxmrjsjvn|tvnvl{qphwmwoqezotk|rvgzptyp{qzy|r~symv~s|r}sxmwxz{p~t|pvxsuzotz{y~}v|{|y~}~ƸĵɺɼŶŵ´zy}{|yu~zwytuzx{w~iwxu{wwostu}nq|kzo{pwzn|puh}pupvjt{kuzkzp|q{rvgtj|qpbxgqeukuiqdm^uitkoctkxkujndpdsiuioarhsjocpgoaofpdeZj`nbfYi_mblbj`gZk^qeh]j`eZfYf]kbdYf_d[e\i_f]f]h^f]eZcY]Ti__U^PcZ]QaV]U`X\T\R`W_XbXaW]SbX\S]S[S[Q\R^WZR\SWMSMPKVRb\_[^Y\Vf]_Z^Vb[le`Zc\b]b_`Wc^^Yd_e`jc^Ykcc^jbkfb\bZe_g`ief^gad[e\c[b[kbf^iai_gckcg`kajbbYlaleg^gag`phpgjbpjohjaodldmephmeoguljcngtlqkxpohujyptjnhxnuliasjvnrjrlvnmfwl~rtkvj|svmvl~qsj{r{r{pyp}rwxqzp~u~tzl{p|q|qw|qu}vz|q|qw~tu~xxwwux{s|sz|y{yxyt~}}ĵʻ̽˼ɺy}xz}|z|}{}qzz{vttv|xu|pup{pry{mr}qwxxj~rt~oxhrthms{m|psgsg{muj}qxmthwkuhxmzmsfsfodrdpapavlqdtepesjmaugqfxkrgjcrhobrfpdh`iaj`nbg\jaqkjancf[h^g[j`nfg]h]kad[h^cYaVbWbUi`cX_Ve\c[_U]VaWg[`W^U^Vc[`WcY^TZSWP[QYP[R[PXO`Y`Y^VYMVLYPSHOCVR_X^V\W`[`WZT^Xb[gbg`^Yibf`_Zc]gb`Zg_b^gb_Ze^_Yd\d_h`e]c\mcjdf^cZkcicidjajcf^mfkenfkboimckbkdpkrlkddYickclclcncujmeqhhbi_tih`ripjoihaqikctknfrktlxnumtisknfqj~xqkujwnzppgndvpumpgznwn}rxmzs|t}runzrynzp~u~uynsm~uw|vwtvvxn~tvs|}p|{twyzu~wz}{ŵķõʻ̾ʿɽƺƸ´{x{{z}v|}zwx}yy}yxwu|zrz}uqotuxszmtzpnqvuyl~oxjus}p~ryjwk{oxlzoujzm}ntjxj}p~qwiujthvlsdwiyosiuhzmrdg\mbk[repgqelbtjqeuih^oeofmalaf\lcmbpfm`kdj[e\g_kakahZmbg]h``Wh_h_cZdZd[e]\S^Q^TeZ^W_Tiac[b[j`aY_V\TXP_V]U_XZO]R[SaWc[YPXNYO^T\SLD! UP[W`Z\W\Ub]^Z^Z^Ygblgb[gab\f]_Wb^e^hbd`lfmgaZhacZfbg`c]e_bYqkiae^lec[e_lfjcicc]e^jdjbrkidvpkfh`oiphmfqhnhojqjnhkcleoiohslmeldslgarjjdoitmnfrlskrjlepixq{rzrogqfumvlskwpvmsjwyovm{ozoxpwxnyouzmwpyn~u~qz{n~vwwwov{ruw{svuxuy{vwwwyv}xyy{{{z{|~~}zz~|x}x}}zyuywxsvvwxwuxvvns{luuws}ozyk}pvi|pn}szo~qu}nwjte|pzovkugzoshwpxjxlrhrdwmsisfsj{lsgqetipavjuhsgocriqejaqfnfhZk`k_g[ldi`j`k_ocjcndj^dZjah_f[kbd[e]j`aYg^h_aXcYh]i]aY]Sc[^V]Tc\VO\S`Vg_YT\O`V_V]V]T]U]TXM\RZSUMXPWLPH[W\Ue_d_c[b\c`a^c_`[_YcZ]Ug`ga\Ua\b\^T`Zd`b[i`c]e]f^iacZc]kbhcg_pjngmgh`nfnfhbmfmfnea]h^nenhjdkerjmhkenfrkskhbjcnhkcqiqjriniypi_lcnerjtmrhwprjskrjnfzoskunwouk{rvp}vzsvo{tunqixouoxoumxq{ozrzqulwmtkuw{m~ux|ysxuyryvvuxxv}}rw~x{|qxw|vs}}~x~zx|~y{~{vz{{zz}{|z}zuuzz}vs~prsuz|uorys{nu}ot}o{l{lv|msym{pwhzpteynzkvi|ptgwlxjwiujxnthn`wlrdwmncpfvktkpdqcnbrhujnctepasklaujqhjahakbmbh_jak`h\l_mcj`dYf_k_kbd\ldh]i^h`d[f^f\bZ\Qb[f\YP]S^Uc[dYaY^VbZcY[Ta[_Z_V]VYPVPQIcZWN[TVPZROJWPb\_Y[U`[[Uf]`Yg`b]dZ_Zicg``Yb[gbkbd\aZmgg`nfi`gbbYkce_hbd]d]kea\slc]njkdqjkejbkbpigbiamgg`ohicg`tkkbsmpiiboglbwqtjpindtmqitkqimeuoskrlxptmtjrjrhphrhtkylpjtkzqqkukqfvnzr~vphxp{qzpwptkxnzn}pxoyn||rxouywmuj}vyu}uyzzzp}rty~|uyuuu|}}x|x~~v}}{~{~~~||xzxwy|y{tu{tzvwsx~qvr|lsoxks~r~ps}pu}oq}m}p~q}o}ouh|ptjuvguxkxkvhxi|q|pykvizoykvjwjsiylk`rgi_m`nbogtkrgrirhkcndobk`jamdh_ohg]qfi`mcm^g_`We[lbi_bYe[^RcWcXlcc[ia_WaXe\h^h^bYf]d\d[\RaY`UcZaX`XYS\T_UaYZQYPZSYM[S[R\U_T]UOHZVb[YRTO^Z\Uhb_[\Va[g_c]c_\Ud_e_b[b\f_a[hcice_e^f_f``Yf`d^d`eakfngibkehbidmhiajbjbf^jcohlgngkfngjdlcqjpilfqgjenfpjkdqii^hanfjajdumvnqfwpulvolevmunqipkkdwoxpuownrkzrumtjxp|uuk{rwnulzs~vvmxzuw}u}ut}pvz|sy{o}uw}tyy}qz}px{x~zz}qv}zwz||yxzy}~}y|z{y|y{~uyzzx{qxqvxsqtwypzqsw|k|ln}or}nut~sv{myk|lst|nwm~rui}pqgvhsgzlwlreuiulxntjuizotiujxmujpeqek]ocqhpdtgk]h^rih_ndl_nej`qei^ocb[j_pik`aVbWocjag]dZi]d\dWaWf^f[`WaXdZb[bY`Y\RbYe]cZ`Ug]cZaZ^V_U\SdZ[U^UYQ\VbYWPYSTOVRZU_Zb]`Zfb`Z]X^Yd_gbg`c\jcaZf`ha_Ya\a]`\icd^jclgh`iba[idd\h`gbc\mcldh_f`mggajckdphohlfofibldkhpinikekdlfaYumtmogofqhrlngqjrjoipgnfwonephulukrisnkbworlsjrk~wvlsmwpvmwxo|syrwp{r{q{s{n}tuwpx{q}r}uyoxpv~uz|t|rvzqu}rzx{t|sv~sx|{wuyx|w}~|~{~}{z~|x{{z|wxuyw{z~ymzztzmv|}wszwssyt|py{lzlt|r|ozylyl|nt{o{j}rzltylugukwmyowmwlthqhsfvkqelbqgrguhvhskm`mbmbwjpfpej]l`nhlak`ndlanffZj^nch[k`g]g^g`f^fXjae]i_g[h`kacYbUh^bZ[P_W\V]T_WZRcZZQ[O^U^WVNYPZRd[`WWNZT`Z^UXPZRNEXQaY[TYSfb`Z`\aYc\id^[dYf^hbc\d\ibXRh``[jdmfe_cZd_gaf`gbnfc^b^^Ye_mdidi`h`pke_kde^f_lehbkdldh]kbmfe^lfg^d_tnsmjbpjsljesjoencsiwqpiogrktlvowowovnskwpsjtntkwiqhwo{tynypum}v~t}sypun{nyp|r|v~t}t|}t~u{s~vt~tvwmusrv{o}r{yuvx{tuyu{}y}}w|z|}|~}~{|}{{xut|||ztyzxt~|pvxyuwyqqx{oq|rr}sv}p{m}q|mpx{qs}n}o}qrhrxi|qwjuj{pvmxkvgxlvisgufuixmuktjlaqfpb{qtipcqfmctiujpfoeqgqgi]j_lbnag[f_iZnbi_g^f]ldc[d\j_bWlbf[bZbZ^W\Se]eYga`T]VdY^TbYe\bX\TXO`Xmd_V`Xd]_U]UWO\V\U\U^UXRVOZSJASPYTc^^X]Xe_d^`[ZTidebf`e_b\c\e_hcgba[a[fad`lgbZd_f`h`cYf_kee^eahakdibnhibmfmemfjdldhbf^kdkcpjohjbnhibngldkaldmcg]leoiidqiphpgnhmcwnh_vlslrfqguotmphxryrulxrumxqxqwryqyqwn}vwo~r|qyswsj~w|r}runy|{r~uyx~u{ozrwy}u~r~u{xv}syw|quz{y}vwz~w|z}|}~~{||z~|x}}vy|zz~{zuvxtvw{}vwtv|xuwxrzprqsszm~qxkykxrykvktzlxjs~rym}pzmshufwnwoyjwlodwjrevkvkyjzlqetjkbuipfxjndocqgtjk]k\eZncmdmdnatinelci`kek`i`i`g^e\h_ka]S_Yf^^VcY_Wg\`XcXd\_X]UaZaWaX]U^X\S]R^X`WcX_UZO\T\UZR]RYQXQH?SMmfd_c]]ZaZ[T[V`Zg_\V_Zd^d`^Zf_a]lfa\f`jalgg`d]nifaaZibpga\mfpkf`ichcg`faofohi_lglcg`pijejcringgbrjmepjpiicohhbvnysmdtmriqjnfmfqhslujzq}svovktnofskxqvpvkrkumunrg{swlulrkwm|rxqtjsm|s}tzo}qvmvov~wuy}ut~t~vv|x~r~rvx~}xw{uxsywxz}zz|o{~~~|{~~~~}~~v~y{|{|}z|zzyzvxyyyxs{tsoy{w|ww|mxwy~mrvuwyuo~s~s}q{n~p{n~p~ozjwj{pzmyoxk|o|o}p{rtivjwiuiykshyoxmmbpdvhzm{ppepbnbgYpcsiocrirdi]ogm]umcXoerhl_jaoelckaogf^h^eY^Uh_e\bXh_dXi`cW^Td[g]aU[T_V`Y^VaW]T]V\S_WdZZR[S]U[SZQ^Ve]YMXORKWS^Za[]X_[b\^Zhbgcd`aZea_Y_Z_Za\hdf_aYh^ibjdb[jdd_lhhed_keiad^mgc\hbf_icjesmiblgmgoioiskqkngpkjdkdjdmdqjqiqitlvnpkumnfriojmgogqkngworioivpxrzuslxpvoyrrjxnrjulrgvo}uvovm}uyq{twpwp|qzo{tyoumtkvp~wxnyqxp|ty{t~t{r|st|}t}s{uwvuy~xu{q~z{x{~z~x|{z~||~~}~y||{x||~rwy~{xv~{|zvwvuv{xxqw{yuzusuxzntsuti}osvqryn{r{o}q}q|pobsxmznwnwjt~trdykqgwllcvgxluk{qpesiwktiritjkcujobj^mdtjmapeogmbqhgXnfk^f[g[kcmakbg^kbkdcZg^d[dVh^f^h_aWbYe\bYg]^W`XbYaXf\_U]Q]TdZd\aZb\_W[TZR\V_VYRZQWP YT\W_Z]Yb_gahba]a[b]a[jcb\f`had]_Yc[b]gckdjfidh`mgjdqkhc`Zg`jchangkgide_mge^mhmjibibsoidicphibpkmgldjckdsnukmgshslpiwoqjyrmhqirmslqfunpgulwovpslypwqvoumumwmoiwntk{r|twpxrwlxo~vzr|u{r{pv}uxnwx}v{sx~vxm{txxvwzxw~tzu{uw~t|s{v{wx{y~wws}{}x}}}}~~}~~}~|}~}~}x{|y{{z~~|{uw}}tw|kxwuxxv~pw{susqwyzkq~qz}ozht|p~pxn}psq|qxkyn|oqf}mriwixh}tvlwkulzppeyoqhqftfripaogsgzoqethlbtirgjcuhsjtjnal`qgmboemaiak`cXe\e[nbjaf`e]h`haj_bYe]gaf\hadYe[aXg^^V`X^V[S\PaW`Y`YdZcZUNbYZRTL[T_V`V]UVOKH^Zd_TMaY_Zgad^d_b\ZUicc]jbg\e`b]_Yie`Ze]e_d\jcjd`Zfad]idbZjde^galelflehbhc`[kbldidkejcqluqnilfgbslmfqismpileneldvnqjmbvoxosmnfngpjxoxnsm}uzrrk|r{rsjogvvlxoqj|vxswpyqrjwp{qy|rqgwn{s{r|qwryp}ru~tzq|s|vyux~uw|x|r|rw}syyq{|sv|x}xxyx{z{x}|}{{}}}||}}|}|}}|{~z{yz||}v}~wv{zwxvw}zxyswmorwq{svsxq~q}nt~q}o{lsvuxvg~r~p}rymszpxjzovvm{msfzo{lthxhvkviynzorfujxlsiqeujqcqdshohsiocumlcnbtkndqfpeukj]ndg^nalaqdlbdYg^h^g[cXc[kej`cYbZbXf]d[b[i_c[_Zc]cXZR]RYRh``[cX^T^VYQaX\UWP\Q\URJUP^Yb]ga`[hchc^Va]`\b[b^jeb\b^d_e^mglchad_hbkfhalfhae`fagbiee_lefaidhbkepghbpjmgoikdqkmejcnhqliejdsmldnhlfqhpkyqvprjnjogogslldsjxpwnnexqogslyrofxqrhnfyqwn|uphyswqyt}v{sxoy}tsl{oyr}uys{quzq|s}s~xu~tw|s}uy|sw{wywz|zzt~{x{vvxyyzyu|yz{z}{w{~{z}|{}~~|x~~|{y{~{v~|~}w~}u{y|x}~z{~}ssvyxwyq|wx{uty{~nuvuv|npvptwst|~qvsuyl}p{p~r}p~p|mtwntj{lwmypsqgti}nuhuiwhm`wkxlwhvkvjrhncxiodthvjoetisbsfuig]ndrhpflch]k_k`h\k_kbkdfZobiaf^kbg^h`j^f_kad[j`cYg\cXi^d[d[e[cZ`We^dYe^aU\S[S_UaX]T[R]W`X^VaZYS\XRK RMkgc\`Yjea]`\c__Xd_fcYU^Yd]`[`[d^c]jde_jcgbjdd_d_e^nhmh_Zhdielgmejch`lfojibqkjdnfpjpiidkeqliamfogqjxrngiewouoleqirjrkwquoupslqiwpvnzslf{sqjslwosjvnxqyrrhvotmsmvlxnyo{sun{s}vvnuk|s{svm}vyr|syp{sxq{tv{wtys}vww|q{px{y~tyzt{|zyw{~xzyvy|yuyuxzxyy~{}|~y|}~}{~|xx|}y}y~}|zt|~y|}z{yzxx|wx~pu}o|svxwxunrutzp}mq{ntps{lyt|nvzqr}nzn~oq~ntfzmxjxkvk}pwkzn|szmrgrgzlvirh~sujpfmaskxkobtkrhncqhsjqhmbtikdkambuitjoblaofpfi\i^h_k_i_dYj`dZh`h`i`_VdZj_h`gajce]f^e_dZiaj`aYa[[WbY`W`W[S]Ue^[QWOb[bY^U_YZUKCRO`[c]kgZTa\ha`Ygbd]ea]X`[c_b\iakfgac]kgfac_idb]\Xgaidf_idfad_jbfamgkeicmge`pkpjoibZqkmfvomgrirmphjamgofpismvqqjoiphnfngoeqjqhqkslvpqjwpunqksjsmvntkpitlvl{uypyr|tzpqh|t}uyq~wvzsxo~wypzs{u~uxq~t|v|r~s~ux}uzqyyq|tv~sw|uu{qw}rx~wyx{vx~~t}z|}{}{}|xwz~{}|zx~w~{}~{~zy~y}|z~|}{|~~}w{|s{xxx{x~}q~zrsu{}x|vyxsuutrwyv{xy{|rsswutqtp}mrwirzoxiu{q{kwlzpruizm|o}oxnxkxoyltjstfvipf{oumumukoeuksisfrhqephthpcmaufodi`qfphqfmaibkbpfh^mclbe\fZg^oci_f[mff\h^c[f^cZf^YOh^aYbZ`Xe][P^UaV^Z\WZQbX^V[RVL`VYT`ZWSUPPK]Xd_fbe`b\ha_[hcb^\Te_d`_Zc^`]_[d^_Wa[jfqk_Xfbkgmgpjgalglemgc\f_g`f^nhkfjcpjkelbicpjpllfmhpirjpjwprjojrltmnepjsmpiuoulsmokuktntmsmohoivnpjtopiyrwpvmzrumqkzqpixoslsiysys}ttsl|uwp|u{t{tvpxv~t}twmxpxqwyww{~uzptw{~uw~tywy|~tyzz|yx}w|q{{xy}{vy}|}|y}}y|{{{wyy}~}~{~{x{|~w~}{xx~{z|~}w{y{yzttywxzxsw~w{tpu|lpvwpzxu|t}o|ww}q~svxjrouzmzlxj}qrzpxltrrivkxiwkxowmymwjxm|pympdpem_pewnm^odtimbphmcm`phodofl`lblaqdockaj^malbk_g\h^i`k`k_i_bYf^jac[f^ncf[`Wg^_SbVd^c[`Yice]]T]Te^^WXQZQ`Y]WZSb[YPXSOM`]f`c^fbc]`Y`[\Yke_\ha^Yide`f`_Zd_e^c]fbpkeamgkfhehbkg`\lhe^qlicmglelfjelgkde`rkojfbjesohbqkfbsntnngnhojrjxrvpqipiumunrksmvmwlxrunvpvmxqvpumrkultmxs|urkwnvm|v{srlytwotk{tw|u}s|uuoxvzpw|rztyrvxozqvmzv|sy}u|tv}tv|}ruwv{ssvu}{xzx|w~{zwv{y}~{}o|zy{|{yzzx}w}|}~~|{z|z||y~w}~}|}|z~{~wy~yww|vxxw|xywzxrvy}vwovysr{mr|qux{oxylx}q~q}r|ju~n~t{m{q~lyo~r}m|q}qymuhthynzl~tocrgrgxmshrgmbsgypqdylvlxmsgwknd|skdrhjajcoerhoepgqgl`hancndodjbh^i`nei`lai_mcldjai_i^h]bZcZf^bY^Td_aZbXaY_VZT_Xb[d\_T\V\S]U_T[S^USMSO[S_\eae`b\haa\fceab]b\gamgibfcjcidhafakghdjfhbgahchbkhnihcfajfidpkoigamenipitnjeg`nfytgbmficmgohnhhbpgnhvnvoyurkmexqypsmtlsmrnqjojvnskxpwopitorkxpzqytrkxqwovpwnzryozrwo}utnvmzpwozrzr|zqvnxoxy{u{ru}vwzrzrwnypx~r{y}v~{z|xn}u~zx~zz}z{v{v|vt~~y~zt~z|}}wz{~~w}}~|v||~}y||{{x~z{||}{zy}}{vv|xxx}x}{{yx|wqzv{tutpwusvtqsrx|ovyur{msusvvs}mzm|qwk~ppvkwjvivlsd|mrewi|nvkwjxjrdwkumshsgvlmardriugsftiqfneqfphrhmbmbpdnel`i_qfndkbk`oemandsig[eZg^h[leg^h^f]iah`f]jac[c]e]g]cZcYc]aXdY]Ue]cYVM_U]WZVZNTKMFPK`\hb[V`Zb\d_f_d_hbd\`\iee`c`b`jdibjejfbZe`fboihckgnhmhgblgniokrmfahbngkdlgmhsomgohe^ohjeiclengjdmhmgmgogoiysmgsooguqrjrjxpvoqkyrsljdztwpsjyqwnxrwprjyoyrvnqmsjysypwrvp}u~vtmumwnwpwl{wp{svzzo}u~vzv{yy~vxt}s~t{r}u}w{|uw~syzzy~vx}}}w}ty}yxwzz~~}qwvvz{xyw~twz|~|zz{z{zzy|xy}}w|v}zxzwtw~{xr}zpq}{zwywt{wt{tx|ytvw{yxuqvv~ov|kw~q|os{or{p}oxm}qs|oywmyoymqgxlthrdtkxotithqgrdxjpeqeukoexrrkrfpfserhlbrgndrjqhqgtkj_kamdofmcqgkai]g_iai^h^i]dYe[e[g^c[c\bYaYe\g_h]d[`WaZbZaVYPc[ZRXOg_\U^U[T[SPLPM]X]Y_Yb\d`e`a\`Zcae^jee`_Ygbf`c``\kec`a[mgohe_b]fb_[qhhchag`hblfmgldh`faogkfkfnhmhvrupmhqjkewopjtpnivpojqmzuqktosmyqnjsmqmsnqj|wvqtkrmwnvoxomgrlvn{uxnogvnzrzsztwoxn~yxq{syqvl{sztrj{s}uwz|yq{r{s{q|q{ryx{r~zuw~t}t}t~u|zswwvywy~rztzz}t{v{w{vzzx{xv{|z|}{{uyxyu{{{y{|{zxz{yy~xzzz{|t~{|yvwzw{~zxtxysovx{txw|wvytsqt|nuts}tus~psu}rvt{o{p{p{nsqzoxo|n{nwkzo~s{mxgvl|nwlvjrdynzlremcqexmqemetgpfrfj^tiqgo`peqfh^uhocodkbk`i_f]j`g\g]qfjbi_rhi`d]i^e]mdh]g`b[g^h``XbW_Wd\bZ`Vf_^VcY]W[S`UbZ]W]U`UbXcXTNMHUQd_ZVga[Ud`^Zf_b^gcc]e`e`aZgdgchbd^gahciagasmlhdamef^kefad^c^njkgicieganetomhlgkgmigcmgqllhmiojytlfnfqjtkqjqlohvnpjohvpplztohtn~xsmypmgyswoqiumxrzswmvowultnxptmystm{t~vsl{sxpxo|yrzoz{ryy}t|uypwqyqz~u{tx{rv}wruuyqw{yowzuxvy|owzxm~}}ywz{wywxq~s}qz|{xzq|~yx{y}|zz}w}yus|x}z{}wq~}{|uxxxz|x}wty|{zwrxvsrwwttvsvow|n~nuh{oss}o}qtu{lzn{psjwp}qwlxjrgqwn{q|qvi~rxlwkthumzn|qylteukugymvhuhqeukujqhlamashtilbpfmcpekbi]j^qdpepfjac[jag\kbf_b[d]i`e\e]jblae\`Uf[f^]Smc_Yi`g]\T^T^Xf\aZYP]X\UXP\TZPIAOM\ZZTd_`\a\d^`[`]fb`[d`dab[e^d_gbf^oib]a]f`lgrlngkfpjlgc]jbhagbgdkfqmlfmfqkmesnrlqkrlnijdrmokvlvppkqjtmvnrjmfytvpvqrkuqumskxsrnxrwnyrxrztumyt~xwpvn{v{r|sxq|u{ttmzpvozsypxyp~s{uxqxwx{szq|tyqxpzrxvw}sv~wwtw}s{|ww{x{tz|ovzy{{w{~yxzyrx|{y}}zwz{{xxv{~svv~|w}}~~xx{zzv~w~vxxx|~~{}y~v}zzwp{rv~{vzq}uwrwvpouxwtq|quwttst|s}m}n|r~rqy{nzlym{m}msxjyo|pzoxjxl|oqhynoduiufznpewjqfxlrgwnrbskodrdpeobtmthlbqgpdlcwkmdpdj_h^mdh_rglfkag^j_iacWh\mcjae]d]_Uh^^Tf_h_e^d[jc]T_Ve^e[[P^U\V`W`WaYXO^UQLOL`Y\Vb]b^e`^Yb[keibhcb_jdkegcjelgead`b]b]ibpke`c^icicoikfngojkelgmhmfd^qlnjniupoinguoofpimjysrlsmrnqjsmkdsmwpvo{vrmslohpitnmfohuoqlzqwqunqjxrxqzxqwpvq|stnyovw{tzuzq{v{sw|t|}v|rwnxq}w|rxx~u}tvxzpzx}xvv}~uvw|qxyxw}u|vxu~{{{wzzx{|{{ys~ztuy{~~~}~{zxz||~~{zx{yzysw{t|yuyz}}~w}}z{yxzwsvsvz}wquttuprwwy~qwuj{q{l~rtyqu~r~s~pv~p~ruyms}q{m{pul{ntiyl|rrh}tzlzoqcserj{othrfpdqgsititjnemcocl^jam_mblblcibk_lbf\hbi]kai`d[mci`kde\kcg_l`e[mdg_g^f^`Wf__XbY^WcX_W]UYN]WZSf\]WZRSI OKc__[iea^fbe`gbc^b_kekea_jbjc^[kfd^`[kee_fakejbgclggakfjengkdfctpkepkgcojpkoiqknflfoiogplslvqpksnoitlsmojrjrknislupvpqiunrkvpunzuztxqyutnumtovovowpyrxqzul|t{u}vwp~wzwzrunzs}sxrvpv~v|v}u~xy~uvzwz{{twyv~tyxyx~uxv{yv~w|tzyw||~xsv{ws}}v~||}~w}{xz{{|z|}|{uxv|}wv|~|sy~v|}~t{x~|zpt~wzxzx|xvsyzxqwvrrymtzjsssxvts|pxmzn{mpqx~q|qqt~p{qviyoxiuiujzn{oznyowxnsguiqduizjodpcshqfqipetiogrgrjnenclcjcpgndlbrfh_h`pgc[lfofmblgjabWg`f\mff]lef]f`d[d]f]f`hbg`_Vb[aX_WcXaV^WbYaZd\aYUOMG  RMa\b^^Zc\dab^ie`Zc_`Zfa_[iea[faealhjge`nhojgbgciee]mhuonglfkfkghcpllgkhqlhbojsmtnsooipklhqjrjicsnyswrqjmhqjtlrk{vtmwqztxr{tztyqxpvqslvntk}x|wpk|sztwmyrzt{vyqwp|tztwptpwoxpxxr{t}uxyryqvz{s|vx~uxr{syv~sx}w{qxv}xw|w{~xvu|t~us|w{w{x{su|{{|wx{yy~|xz||}y|w{yz{x|z{}}z~~{z{yy~zvyuz{vvwuxzvtzxu~qzqtut~rwouvwsu~|q{pyus|ry{n|ot}pzo}qvl|o~rzrtwkvluk{p|pzluirfrhqgrerfumrgrbuiwlpdskqfskpgqgrdtfrilanblbibkctkg^hbj`rgwke[d\h[h\aYg\cYg]e\fYd]bX^W_WaZha^UbX`Y^V^U^U`VZQ]WVPPG  IF\YbYd`[W_Ze`hcb]gcf`iegcfc_\eaifhchdleslmimjc\qlpkmhokf`jdf^njpksosnkfplpirmrlqjqjztsnmhvqoipjtmuqupqhyssorlumvopkyrupuqrmxsxrxqwoumvoxqyrzt{u|wxqzx|v{v}t|uzsuo|s}v{tztyqxq|vvozs}vzwzrwxw|}vyw}uy|s}u~z|w|z{~rvtz{~{{|utx}yvxu|szwuww||{qv{z{{~}|{y{z|w}z{|zuz}|~x~z{tv{~ux}w{x|~z|r}}rtwxsty|twzvtwyusyvuuu{mt~ozmwt{p}p|pyl{ptjui{mu{lyopznujvjvkymrfrfthwjvhphwmvnrfvkzlndwmphypqjl`qjododphkag`ofrhnee[i_e[e\ncf\h^h^h_c[haa[i^g_]VbWcXaXjbbZ\U`Z`Z[Q]T]V_W\TXPLE  LIc[f`a_b]gac[^Ya[b`c]haidro`]e`gehcieidnkplqlhapjrlojqljfrlhakdronhlhjdmikffamismnirmtoyqmfsnuqsoxrsmumnismuotnuoupxsrlyqwpwotn}wxovpzuuntkyrvpzu{s}w|v|u~vxrytx{tzq~v{tzu{vq|x|r~x~uyv|ty|wyv{~x|{{y~u||{}y~u{~s{zxvzu{x{yx}txw~~xzy|xz{}}{|ww~x}y{~x}zw{w}|w|wvxxyz~zv{wz|z{{wr|{wxzwyxy}pr|qsvwuv{wxre|q|qx|ou|r|pwj~t~rviylyozowkxo}oxl{ruixmvkuiwnukwllaulphtgtjwkqgumi`sisfslj_f^mdoei_kcodj^iakch`bXjakcmdlakdg\b\cZkcmcaYcZc[b\e[j`lf_Ub[aZ_X`Y]U\S`YZPQJSP][b_^Ygbfac^id[Vd`b_d`d`ichanjiec]oilkfdd`ielfifkfidlgsoielfmglhojnhrmmjietqsmsmtmgamgvqoiqkrmwrpkupvpso|t~yrlrjxrypsk{vxrtmqm|wzrrjwp{uxr|uovowq}ry~x{wzt|uy{y|{u|uv{yzwywo|s|y|txyvzyv{y~wzz}w{}y~{|txxy~zty{w{|~yw}zzxz}{~zzzx}{wx{zyz{~v{z}|~~xyz{xzzwwz{w|wrsy~wytxxyswtwv}r}~nyqsuusz{owu{qy|p}suityo{oqhypyowntjvi}pszmshukrxmvlqdumtithndmbxlthwlrjyqumncshkduliaulmblcqfpfnej`h`e\h_jaldkchbd\`Vg]jaf\dXd\cY[Rc]cXbZ_X^VYS]Ve_RJ KIaZb]idd`b]^Zhdebfbeafalfjflhgceag`qljec_lhkhqknjjelhifidkfzttnpkoksmqjkgqmqjupvpnhuotnyrvpqmwswqsnwroiwquqqmvp|t~y}wxqwrsm{t|u{tyr}vzt}x|uvo}v}uyp}wwnzrysz{xyq{yr{r~xyyvpzz{x~xxwyzy|yxo|~}vu}ww|w|vvz{||{w}~{qy{z~|{yu{}{|{}z|~{{{}zz~z}y}||y}tw~zrzlxt~xtrtvxvvu~ru|s~ry}st|r~o~s~ruu~s|oznsu}p|s}pzn|r|rwo}szp{pznymylujti{qqiqetiriwophrjujpfsknbphsisjshqhsinfjbmfh^ldg^jai`nbnci_e]f^g]iakbg]bZkcf]\VcY_Ya\^U`W_Y\Vd]ZS`VC>HDebfbd`b^cab]gca[a_`\gca]jggcgbgckgrnnjiegdngpjhcifjgpjmiokpjlgqltpvovrsmpltqsptnrotnplvsxsvrvrvpysqkvpqktpyovowp{uxstotmupwsyt{szu{{uzyt~u{v|v~w~vxyt}v|vz{xx|u{sz|xx}|wx{s}~tyx}u|uxz}{}|}}zz~~{|ut|zz}vvx|y{|{~}}zz{{~~wxz{}v{{{xt}}zxt~|{yx|yxzso{x{{svwvuyty{x}u{m|qr~sw~uu{w|p|r~t}n{tqg~s{o|rwmzmwo|nym~tvj|s}rvnxnxn}rqjwnynrfwmtlvnrhtgrkpesllepeodqgqgldmdqlpemdi`e\nef_h^iaf]j`f^g`aXc\\TYP[Sjb`W`W^VUP]V[TLG PM\Y^[d^b`a^c_^Z`[kedajfjejekgpkmhkesoeaninjpklhmjjdnjvrqlpmrmnkrmtnsnqnyurmnitovp{uvpsnvrrmuqyt~yyt|vxtuptovquozsxrvozuunxtpxrz~wyuzszuvpz{x{t|uys{t|u{v{t{~x|s{sxzs{|x{z|u|y||zyyy~yy}}z||~~}{~z~~|z{z|}|{~z||{|}yx|}}x~y||{szzy|zx||rty|{z{{}vsyvyrvuzu|ntoxsw~os}q~s~uz~ryl}uznxzo{pv~v}uxlzozowizq|uvj{tznyquiwntjxkumxorjtkpeqivorjtjukohrgqgpfpeh`qjnhoflfqipff^mcici`hah_jaf]g_g]cZ_Y[ScY`Zg]e][TVPXSe^MHOJ\Y[Wa^a^][gbd_c_hba]if_Zlhhckeifhbe`njjfokngrpupspnjvqwprmpkrnrlpjupupwrtoplxspjspvrupsnrmvowrztunyrxssozs}y|wy|xqzsyu~vx}}yzu}w~x{{y||xz}w}}vy{|u}w|z|{z~xzyy{xyx~}z~v}yy{{y||}||~~~y~|}w~~~~{~{{y~{o|ux}uqzvxtzwx}o|qys~uxv}r{tyz~ss}tut|ry}typt~r~u|q|s}s|qzowpymt|rxkwoxoypuznvlyptkznvn|rslvnphsjukoerjogneshpisjpiognfnfogphqgpimdlbldofh`f_lclckcg`h`c[bX]Vf``X^U]W^WC>JF_[c`fc`\c_gcgd`]b^mifceckcf`mhrnrnnjoksorosovqpjurrnsnqnrotqvpunun{w~xpmwrtovr{wun|w}xytrm{v{vztto~z~xwr~{~vy}s|wxzt{yy~z}y}xz{x}xy}z|~}xyz|{t||~{{x~x{z{}~s~y}}|~}|~yz~~|{~}{x~|~zywxxx{ws}}||xx|w|vxvx~t||pw~r|rt|o~wtxttys~u}s{p|q{q}rx}t}syqzq|t{rxpyqyorivmyrvnrjslvmtlqjohrmrkvntmrirk|sndqgphkaphpipfleibrkpfjchaiaaZg`d\^X_YaY\T\WbZG>OLiefca\gchfe`cae`fcqljhsokgtqrmlipjplqnrooijgvswswusovqzwytqlqmwtspysxr{w|x}wyu}z|xxt|upvo{w{xupxqy{{{v|v~w||x{v|ys{vz}y~xyz{yy}}~|zz}t}}z|xwz|~}}~}~|w{~}{}{{{zz|~|{}z}y~s|vyzsv{{w|x~pw|sx~s|p~wzr|rv|qypwzq{qzq}sz}t{q~tw|q|uxwn}uvo|u{s|svnrhpi|ruktlxpqkrhpixorjtjrjqgsjnfmfphjaofnfkdiaicd\e]hahac\a[e`d][TNJQNa[_Zgcienjierojgjfnjoltojguopkusrnuqspyvxtuqws}uquqytywyuytwswt|}x}yzuwtzvwrxq~y{w|{|{y|v|}w|v|w}{}{v~y}x}|{y|z}|{~{{~}{}}{~~}uy{}|~||xxy}vw}v~yzyw|r|s~wyzx{xw~u{s}u{zr~t~v}txyzr|stujx~v}uz|vzqtjzpzqyosk|srktmysvpxpunwpvnwpslldqiojskogslsjripipjmfjepig`h`f]g`_WXQMG \Y|{}{~|}c^ljæĬǰ«îijðïIJòñİIJŮİððųìŰ­ŴIJ±Ĵ²ƷȸǹǹǷ°ŵ´ķƸõ´ȸɹɼŴǵǺĶɻŷŹȽĵɻ÷ùɼƺƸɻǹŹõƹƺǼŹ˿ĺǼø˿ĺɾǽĺȽùĹƼø¶¸ǽûĺȿǾ¸û÷ļû¸Ƽþþûÿ¾ÿ¹»Žź½¼ļ¸ľľ¸ƺ÷Żõ²plmlé§é¯­««í®ĴƳîƴ®IJïñ²ĴòƳ±¯ǶƷƴǷòǸİôĵŹƷƶǹŸŵõƵöĸɹõƶöʽĵŸƹĴƶõŹǼķµɻ¶ƺɼƸøúŸøĹŸǽĻöùøż÷ʽø¹ƺŸĻǾ÷ƽ¸·ÿŻ·ŻŽû¹º»ļû¹ºú½ſü¼ļúź»ľ¸ĹĶúݵõnlplįƮ©ñŲůññ¯Ű±IJŵƷƶijƵóǸƴĶĵ²ĵ˹Ʒȶµóõ³ɼ¶ijôȺǷĴĶɼɻɽŸƹµĴĸŹƼ¶˾ŹƺƹƹõźøöùöĸǽƼǾƼµ÷Ƽ·źù·»ĸźķùƽźĻĽºº¿ƽ޼»ù¼ļżƹĺùĺ¹²ù·onjg¬¬¬ưŬ®ŲìôĴįųǵƳȲ³ôİƲƵ°ʸĴŶıĵɸƶǷȸĴƶǻôʺĺʼõǹôƹŷŸʾȹĶŶƹǺ÷ƼƵƹǻǽɼµǼȻɼɾŹķǻŸ÷¶ƻŹûżǾ¶źļǽúµļźºǿĺú¿ýú¾Ƽºļù¸ž¼»þ¹µ÷óµqonmĬîů«űůĭ¬Ưűð°űůįî®ı²Ʒò°ǵ¬IJŲƲõȷõôȶƶŵĴųĵôȸôóŸɻ´ĶĸŶȹõȹ³ĶõŸ̾;³ɸȻ÷ȺȼʽʾöŷŷƻŸǻƺ¶úķøǽĶƺ·ƼȽĸĺǾ¹ĸݏĺû¹ƺ¹źĻ»þ¾ǿ¾Ŀ½ºƼĽ¼üĻýŻø»ż¹µ¸µ÷´³¨rpnn¦îĬéűíŲ­įƲİijîIJĶôòî²IJŶĵĴIJƷŵòƴǶǹǶȷȺǸĶȺƷĶųµƺƹų¶ƷŶźǺĶƹǽķƸ÷˾ö÷ǹǻķȾǹĹĺķȽùƼƻúĸĸĺŹ·ŻźƼźĹºļúùºüƿƼ¸ƾ¿ĻÿĿ¿ÿ¿ļý¹Ľ»źĻµnlpn˜êª¯ëíîŮï¯įİƱưñíó°IJɶƳŶűƱĴĴòôŴƴijIJƳƷ°ijŷųǸĵƹʽ̿ͿǷȺòŵĵƷʹȺƷƷŸȽ´ŷŹƺǷɺɼȼ·Ǻ¶ø¶ǽĹɾȾ¶ƾŻż»ĻǾùø¹÷ĺŻĺǽ½ú¿¸ù¾ºľżýžǾ¹ǿŻżĻŽĽ¸ú¸µ¯ªqpli¢īĬìéŭèªƮ­¬ðƴŬð¯į®ð°Ų¯°ƳĴİĴ³ŵŴijñôƳŴƶʰĴĵɹõóŶɺȹĴĵŹǹĸŹô´ǹĴöķǷǹĶĸ÷źŹɼĺȼĶùƺ˾ǽȿƹ·Ÿ¹µ¸·ĸùżùƽĺú¿¸Ļ¸¼Ľþº¾û½ŽŻĽûº¸»ýù¸Ĺúöomqoçã©îª©¬í¯ƯìʶƯIJ²ĮDZ°ıñȶűıƱñǴijɷ®ǴǷIJñòǶ±´ŶôĵǷƵƷ´ǶøɹȺĵǹ˽ȹǹƷö÷ƹµǶĸǻƹ´öõŹźŸ÷ʿµƺöɼúȼǹúŻķǺöĺĺƻĺĻĸ常ź¸ú·ź½¿ÿ½½ĽľĽĿĽƾĻºĽûŽĺºŸ³¹¶óolmkīªè¨īªïİůëƱīDZȴĮ±ïįųIJŲðİʶųƳɳIJȷǶijǵųñöŶ³ʶ´ȶǵǷƳɹȸɹĴóôƶŷȻ³ĸŸƹǺȺ¶¶ĸĵǻĸ÷ĹƷöĶȼĺƼʵɽøĹƼ¹öøĻ÷ĺ¶Ƽ·ĺƹĻƻúĿÿ··ľſÿ½¼¿ƽ¿ý»üļ·µpljhġ΍ƬŰîîƭ쫬ðŲɲɶű±ŷįñ³ǶıŴűȷŲȸijɸĵȹŵĵµķòŶǹƼųĸŸǸ´ķǻ²ȻŵƹĶöĴƸ·ȿ÷ùŸƷöķùͳĶĸŶŸŻļǻ·ĺƻùƺȼ¹¹ĻºĹ¸¹û¾ƿĿĿ¸½Ŀýǿǿ¿ù»þýĺºº¸·öµ÷õĶòðűIJ«sproÚ¬ūìƬé®Ű¬įįIJ­®ȱƱǵưƵı¬ǵóðįŲȲŴƵôųȶȷƳîǸij³ȶĵòǷŸŷ²ǸʾŷóôʽȺǻø˿¸Ÿ¶øĹǺƺƻʾ´ƹ÷ŸŷŸƷõĺ¶ĺĺúǽŻƻĺ·ż¹ļùżúùûż¹ÿÿû¼»ľļżļûżûĺ¸ƺ¶Ĺô²rolkݤ¢Ĭè©é©îéíĬ®ìĭŲ®ŰDzî­İƴűDzĮïİƴĶɵųðŵîȵƵƵIJdzĴ´²ɸŴƶʻȷƶƵŴŷŷ˽Ƹȸõ¸ǸȺĸŷ÷ƷͿǻŸƹǹĺú¸ȽķǹöŻ·żúúøƻƻŻö÷·ȽŹȼ·¸ĹżĹ¸ùļ¾úĿ¿ż¼¿ǿƽû½úùùƴ³®sputě¥¦Ī¥®¯ìòƭðǭë­įIJóDZůǴǶññųîİɲűIJƳǴįŲƮŲñǸųƶǶ±ƵƶǷݱ±ŵŹɻƵǸô´ŸŷȼŷĶôȼõȼ¶ǹ´Ķ³ùĹĹŸ·Ŷµ·ƻǽǻøżƻ¹¶Ƽùøúꏹþ¿ûúû½¸ø¾ÿĽ¼ȿ»ƽÿĽºøû»ü»ƻ¹Ÿ´ô²IJrppo›—ƣħ¤Ħ¦¥Ī«©ì­DzȱíŰư«Ŭ®îǴijðıðóų±IJIJŲɺƳdzòųĵ±²ƶķǸų÷˹ɹǸŸĵȺöƶǷ²ƷƷĶɹȺǷµĹƶŶʾõõŶôĸĹǸ¶Źƺƺõ´øǼźƽ¿ǽϏ·úļŶúĹƿϏ¿·¾žżĽù»ĻĸúƽľûüĽúõ÷´ĹÚignl˜Ę•¡Ũ§¤ƨìŮĭŭê¯í¬Ī­Į«ñªĬíŰǰ°IJ­¯ñƱıŴŵijǴòıðİȸ±òƸŰijóµƹȸƳ¶̻ŵƸȷƷǹǺɹĵĸ³ķǹȺŸŶǻķõǹǺƵ´ŸöĹŶøŸĸƺú˿ùŹƹŸø·Ĺ÷ɽŹĺĺúĸ¾Żú÷·ÿø»¾ù¸þĿ»Ľ¾ǼúĿú¿¾ƽºĽŹĺŸĹ÷Ÿŷ·ŸƺķĴ±ij±«sqnk›¤ĪūæéǯĨ«¬ëíƲĭïįƱİîȱűijƴDzűȰű²¯ŲŴıŵ˹ǵóƳô°ĶƶųǷŶŵƵƵǺöɻĵƶķȸɻŹŶǸŵŷǼǹ÷ŹƸĺõø÷ɻ·Ÿĵĺƽƻ¶ĸɿĹļ¸¿øǼĺþþ¾½ĽļþĽĹ½üĺĻüº¸¹÷Ĺƻô²°spnlݜäŬëê¨Įů­¬èªî¬įîĮdzưïųűĴŴIJĴ±Ƴɶ±ǵʹ¯ĮȷijðƴƷǸǷɶŶ³ȸƹȸĸ¶ĵǵò´ƷŶƸƷǺŶ²ȺŸµö´ĶƸƺĶƸźǽŹĸĶŹźĺŶɼùĺû¿ĻúŻĻ½ùĻþĽý¸ƿƼ¸żü¹ƿ¸ļù¸¸³ropnãħìêæ©ªĪîƪê¬îưIJ­ĭĮį­íİƱðïŮĮƳɳDzų°ƴƴȴųïòijɶ²ijƳɹȹĴƸȹ´ŶɹŹ˼ɼķƶǻôôĵŷ´ĸĸźŸõµƸøµĶĸǹƸƸźǺ÷ķȽŷŹǻøǼø¶ûö÷¸ú¹ſ¿Žøľú½þĻŹûþĺƽ¾»ĶĶ·ƻ´Ŵ³ijnkjhŸ¥¤īêĩ­ŪȲíĩƬƭ­®įîïĭı­ñ«ĭîưIJȱóijƴǶŵIJŵǵŴǷ³ǷŴŴƷŷƷĸõĵųŹȷƶɼ˽õöŹ÷´ǹʾĶʻƹ´ƹɼƺƻķƹ¶Ǿ·ǺŹĶøȽŷź·ĺƽ¿¶ÿø½ĺû¿»ĻûûĻƼ»üþĹúȾ»Ļ·´õµķ®±Ʊpmpm ¥©ŬūƩéĬǯ¯®ïƮDZìî­ƶïů®ñðưį­ìðɳȴóŶųɶõɸȶǺŸıIJɹǹŶȷĴʻij´ǸǻǸƷɺǺŴöƸĵ÷´ȼŷȺƺŶŸõƹĹǺŸ´ƹµȼŹƸõĸʿ·ƹƹùĺĹ÷ùϏùÿ¸úûĺû¿¸¼ļ¹»ȾƽĹ¹ùûôŰrpolؗ£¥¨ªèŬūű¨ì­ǰªĬªDZƳëɲ«©ƲƮʷñ®ŮǮݰƱƱůƵŰɸñƵȺɸŴų³ȶĵƷ±óõȸĴɹŷĸŸŶǹȹƹƺƵķõöķͿŷȻȹȼ÷ùƾ¸õµŻµŹķǾĹźĸù·ŸŻ·ĺ¿ÿùþ½ÿĿøż¾ŻŽ¹õ·ŻŻŷ¹¶ŸIJķ±¯ roji㢫¨§©­ïìŭª¬ïŲí±®ųð±ƱưƲİűȴñïñǷƴǴʻ´ƲIJŶ±ȷȸǺŶ̹ŴõȸƷǶõ³ɹŸƷʼõŸƷĶĴŷĸŶŷĹǺƺ¶ɻķǼķŹĺŹŹ÷ƽøµȾĻ»øſùú»ýÿÿÿĽļżºļ¶ĽûøŹµ¸¹¹ô¬nkml—–œĦå¥è¤éīūȱ詪«Ʊ¬ĬĮĪ©ıįưíűİdz¯ı°ĶıŲƯ˷ɳ®ǶưIJȴǴŲŷƴ˷ƴijôƵĵŶ±ƲõȷǶƷ³óöƵŵĶijö˼µĹĶĵȼƹĵŶɼǻȹĸµĹĸƸŻŸøƶøĹĸ¹ø¸Ĺżö¶ŻƼ¿Ļľþÿ»Ŀſ¹½Ʒ¸Źž·ü¶¶Ķô®qpol™Ÿ£¡èæ­«¥ª¥®Ī«éĩìĭů«¯í¯¬°Ŵíñƴ«ɵ°ññ³ŵųŵŶŵ¯òŵdzǼ²ĴĵǺǸĴƺô±ôȹʼôȺôŶŶƹŶ÷öƹõƹŸ÷ĵ³Ĺźźƺ³¸÷ĸƽ¹ƺǼ÷ݏ¿úſ¹ź¾ļ¿ĿĿƿȾ¾üû¼ľŽļú÷¸Ĵĸø±è£qnmkœÞ¢¥è¨«éç¨ŭéñª«ĩīŰƳİȵŰŰıűȱűdz¯ǶŴűİñIJƴñijȸŵɸƳƶĴǷƸ˺ĴƵǹƵ´±ǹƸóŸƷŶ˽ǹǸɿȸƹŷŵ÷ǹŸŷĸǻǺŸķ·ƻƺƹöƺźɾĸŻù¶ŹƺƼſϾ¿þ·ýľļ½ºùżĻ½Ļûùû¶ûĹƷ·¶´Ŵ²¯pmifٟĥ£ħ§Ħ©ī¦ª©Ŭéîê§°DZððñưįìįİƴDzȶƶ²ů®ðİijʷòôóƸȹĴôǵöõʹĵŵɹȹķƵǹʾŷƷƸƹǺõöǻĶŷɼõ³¶Ƿ÷ļźµĺŻûƼùȼ¸ƻĸƽƺǾĻļþú·ƿžż¹ļľŻýſ¾·½ŽŽƻĻſƼµļ¹·ź÷ùĴ¶³­©rpmjœğ¡ģ媧ĥêçīŨ§ħǮ¯°ëĮí¬űíîðïñíůůɳİ®dzıŲñųɵų­İƲıŶôijƶŴǷƶ²Ĵŵǹ³ŸĵȹƵijǸƸijǻȻǹöƷƵŷŶɺŶƶƷö¶ŷǹŹķɼĹŸö÷ĸƸŸǼǻĹƸĹƼŸźĸĹſĽľſþż¿žøǾǽľüǿù·¶¸³²õµ´ð¬rqspœšƝŸŸ¢¥ä¤æåáũèĬª§é¦ĬêĭůĮë¬îë˰îðëƭIJƳëIJŴñíݯïİıIJòȷŴİó®Ƕŷó³ɶŵȸıƶŵ´Ŷ³ǸµóǸĵ³ʽ´ƷķöʶµȾöĸ÷ŹȺĶ·ƻƸƻĹŸĸǾ´Ƽżøƾŷ¾žù÷ľľûŽýĺŹǼü·ûŷŷǹ÷¶º´´³³­nlrp™œâàž¥¤©èè¨éåǫëŬëī¬ëëİūDz¬ĭ¯Űŭî­íųǵįŲȶűıŮƳ±ıó²ųDZƶƳóIJȹóƸƵĵƶȻŶŴ±ȹƵɺƷóȺʼȺ´ö²Źöķ÷ɻĸɺõµŹĺ÷Ÿ÷Ƽƾ·÷Ϗ÷ú¹¿ùùݾ¾ÿºĽ¾ý¾»Ľƾ½ý·µ÷ƶĵ²ê¨œrpki֘ŸžĤäå¥ūéŴ«¨®ìűŮªŰ¯ƭŲűŲıİijóî¯ƴǴŰDzƵôóñųǵŴɷǶǸij¯óŴ̺ǺöȶƸŴòŶôƶȷôŸŷƷƷŷƼĵ·ƺŸƹ¶ĶǺƷŶĹķµ¶¶ĸƹùȿŸƺϏûù¸Ŀùú½½»þ¼ùƽꏏû¸´ĵ·òµîvtolœĠ¢¢åè©¥īæ§ƮĪĪè«ĮðĬɲíĭ°ưƲŲůDzñŲƳŲ±Ǵ®ƲĴñĵıǶijƵñȷȸȺôŶȵijɸȺĶĴȸǺǸĶʽŶĵµµŶ¸õŸȻĸĸµĹĺƹ÷Ƽùɼøõǻƻĺ÷µŻ½ȽĹù·ļÿ·û¿ý½þ»¾¼Ĺ¶º·ĻĴ³¬pmmjŘƝã¥Ĥ©Ħ¦ɬȮªĩƪêĬīéëèìǯëưDz­©Ư­ŮıdzŲDZűDzŮ®ȳűƴȴİðŶ±ɷ̻ĴǷŴİóĴĵñĶųŵɻıĶŴǸŴõɹǸŶŸŷƺŵȽķķɽź¶ķǺƺ··ƻķ÷¶źĻź·¾ý¾¸ľ¼Ļļƻü½»¹Ĺµ·¸ĺŸIJ°ðóolqo؟ž§ååäêīëĪêŮĮ®Dzìĭ¬dzĮĭįì±Ű®IJðƵŴ²¯ȶɹ®IJǵ°ĴƷɷǵų´ŴµƵǸ͵Ķɽǹŷùöµŵ´ôķŵķŶ÷÷ķƼµ·ĺ¶´źǾ¹ºý¿¾øûÿ¹ƼºȽ¸¹Żµõ´usol›ÛŸÛ››  £ç§å즧ũ©ëūĬŬİìî«°¯ŭ¯îĭDZįįðʴƴƳƲ®ðɶųò±ðųŵIJŴųǷĴŲòIJƳŸijǷĵ´ȶ±ɺŴǹ³ĶôȹĶƸøǹ¶·ƺööĸĸŻ÷÷õµŹöƸöĺÿ¿¹½úļŹ»ƿü»ûúùĻżźĹôªŪonnk  Ū§è§ŧéīèìíƭȰ­ªíĬíñ¯¯­ƴİƲDzðŲDz°ŴƳñıȳóŴȶŴ±ƶǷųñôǶóŶóĶȹĸŸǺ¶±·ĸôɻǻµǻøµķķ·Ĺĸźƺ·źù¹ĺ¸·¿úźýĹżĺ¾üĻýÿüĺºľŻ½û޼żƹ¹·ùĹ³Ŵ®îmjigŸ¡Ġ¤ī§ĩªī¥ĭ¨é¬ȴí뫱ĮíűIJŮIJDz­ñƳŰİűñ¯ïų±ijŰ³¯ŷƵĴųĴŴıƵƴĵĹƷ³ŶŸŸƹƷźŶɷ·øķĸĹƺƺƶŹĹ·ɿķµøù¹Ļ¿¸ú¼¼ĻúùƻøöĽĹµøĶ³±£omlkœũ¦èǪ©ĨƭŭĪƮ­ħĮîê­ëįŲűůŲ®ïǰòưĭįɲ°ųƴʵȴıɹIJ±ŴôŴŸƴųõǶŵŵĴĵµŶõȸƶĶƷŸǸĵó³ķĸóĵƸø÷ĵŸƸ¸¶ö͏¶¶øù·´Ƚ¿þù¾Ŀý½¾ûýùļǾľ÷øƸĽöİ®¬okmkœà™œŸ£¦Ĩ©ŨŬéîéĬĬêįDZóðűïêĮ¯ŭű¯Ʋijð®Ʒ±±¯ǵƳ±ijȵ±ijdzƲòȹǵõųȷʹ´ñȹ´ȺôƷĵó¶ŶƸ´ĵŶķŶ³ƺɽŹǺ´ĶƷķ¶·Ĺ¶ŹƻƼøÿÿ¿·ø¸ý¾Ľ¼ļþĻû¹ĻĹļøö¸ĺŸĶïŲolqoš¡ß❡£Ÿ¤¢ĨĩŮ©§©êéīƮ©¬Ű­ªIJĬí­ǯdzįDzdzñİĬIJdz²òñĴijȶͻòɹĴȷƹĴĶ´óöƵƸ´ŸŷǺĸôǷõĴøöŷźǻ¶¶źù÷øøĹĸƹƻĹ¿ž¾ú½ýŽÿž¸ĺùĺ¹ĺŹŷõ²ñâspkjšĢ£è¥¢ãç§Į©çéï®ȱ«ìȰŮï¬ïȮǰðıȱîǵǵƲñIJűǴIJdz¯űŴȶǶ±ƸñǸųƹĶijµƶôó±õǸǺñŸǷŸĴź³ķõµ´µö¸ƺĸƺŷ÷°ķµĸ·Ƹ¶¶ĸú¿½ûĿ½¼ÿļ»Ļźúö¸ź¸òòısplkڛ蟧¦§èæ©çíĭĮïƯîĬ®ëîïĪĭŲdz±íȷǯðñűűóƸȲǶķijñŴŵȶŵŶ²ŵǸóǻ³ŷǸƸŴô´IJŷȺ´ĶǸö¶µöĴĻĹøȻŸ÷ø÷¸õƻùǼ÷Ƽſżſýÿ½ļý¼ĺ¶Ĵ³÷²´²®®§lksqœä œ¢§¤©è«æ¬ĩª¬­êĭ­¬­Ʋë®IJ­Ĭıȵð°ðıɴįǴ³dzñȷŲɷƷųñ´ŴǸɼŵŶôʸóóijƸƺŶõƸ²Ķķķ´Ǹ³ɽźķ¾ùƺöĽøŽ¹ÿý»úĻƼúúŻ·ĵð³ïí¬ƪãsokk”ĞŸžáġ§ŨĦ§ĩĩ­íîĪ«ëǯƯìîŮðĭįIJİǴïİİðŲñƲòƶƴƴŵ¯ŵ°ƸòŴ¯ķij³ĵĴųô´ôŶƷĵõŸŸĶĸǸ´öŹŷ÷öǺõĶķø¼·ÿø½ſ¾Žľ½ļĹºõ÷ĸŶö¶·òĮtqll奧¨ë§ëªĪ«ƭƯīìªij¯įíðųǴ«dzƯƲųîŮð°ǷĶôƸñòĶĵƵ²µɺó´ôŶƹƸ´ŷĴ´Ƹ´Ź´ƻõµ¶¶¾º·÷¿¹¸þĽ½ýý¹¹Ļ·¸¹öĹƸµé«nlmiƜà¤á¡¦¤§ƨƫèŭūçũ«©ªìªª­íîĪíƮůůóƳųȳ°Ʋñññƴðƴ°ñı¬ȷȹ®ǸƳƷȸôķŶõƷ³ķ³õı´ĶöóĶǸµĵĸŷÿ´Ǽ¿ĺ¶źµĸýþ¶ž¼¾žüºù¸źĸ·¸úŵ·ŵ§sprpřž ĢäŦ ũæåæ¥èèĮ¬ūêªį«ųƵŮɶȸ«ñűðijòŲî°°ŸŵñòƵóõŶŶƶöIJ¶õòŵ³ôõôƻƻŸĹǺŹŹöȺµĹ¶´÷¶¼½žý¾»»»úrokjš à¥ ¦ǯ¦ëĮĪŪī­íª­Į«ƲĭðñįDzİ­°ȵƱðǵðŵïıôðŲñŲñƶijɹöŶŶòȳƳðĴĴ³ǸǶķĶȺķķöĹõ¶ÿ¹·ļºº¼¼½Ž»ºĸǸó²¶³ø÷ı´ôñ­ï¦qopnğŸœĤ¢åĥŸ¡æçä«ĩ©ĩªīªê¦¨ªĭǰìĬĭí¬ªŮ©ƭƲíɵ¯įŰı¯IJĴ±İŶIJîijİIJò°³ñȷȶijķ±Ƹij²´ķ÷³ķô¸³õŸö÷ĸ¿ſ¼üú¾¹·º÷¹÷ô´´°¦omqoġ ¦åħæĨĨìǮĮé¦ì«¦íů¯į­ŭðűıİįíǶîdzȳó¯ȶƶƶƳôȺĴ°óóĶǺƷïµµóôŷƶƸǶõĶôĵƶǹ¸õƻµµķŸ¸÷ĸ÷Ŀý¸¼ž¾º¹ù¸ñpnmkŜ ġä¢äŦ訧ç©ŨƯ©«¬«űƱì­«ƫǯîűįŰîƲ°¯ïıIJðŴűŵƸȲȸ¯ijó³ŷŵõ²Ƹôȼ³ôŴķƺĸƺŶµĹĿÿ¶¿ľ·ÿýľþƼ÷ĸ¸¶÷ïï¯íomnm£ŸŸ¤á䦧騫Ĭƭ¨ůįƫȶĮŰ®òijñDzíı۱ñðıIJĴòǷƴIJòõij±±IJƴĶIJŶƸȹôŶ¶ƷŷµǺƷŶ¶Ķ¹¾ÿÿ¼ºúƾúݏ·²©èrohf›œ¡ģĥ¥ç¥íªƨª¬íƯë­¯ıįıůƵųµ°¯ƵijĴĵĴų³ȷǹôµ³ij²´ĸŷķĺõĸ·ø¶µ÷¾¹»¼ÿ÷÷üļŽ³øõµ²çtqonäťŸĢ¤çĦ§ë¨ìĭŬįèȰ¬İ­ĭŰïȱð°ȶĴóȵôƵIJñƶ²Ƴõ´Ⱦ±³³ƹƹñĵ³õöķµķöĹøÿøþû½öĴø§njnl£çæå£Ħ§¥å«§©¨«¬ūƭì®êĬŰ­ï¬ůŰŴ­îĴñòƳƱð°ñôĴõŵĵǷôįŴƸĴĵµô÷´õó¶õ÷´úž»ŽûļżøµòåljgeٚĚޟ  ¢£Ħãé¥ĩĩé¨ƭƯūįìŮůì®­ưª°ij°ųųųűññôŲƵijɺòôǹôð³ɺöŷ²Ƿ¶´µôƻż¶Ĺ¼ľļÿĽ·´mirpœŧéªĪĨªĬêǯ«ìîñªįð¬Į¯±ðòİıų³ȶȶ­Ƶ°µôǶð±Ƿ¯ò±ǻ±°ijĶƶͶ³¶¶ȼŸµ·øøĹ¸ÿ½ºº¹øĭromkٟŸĨũ¤è©Ů««¯ǭíī­°ŭëñij¯ïDzïïIJŰôűñ±­ô²ñ°³ŵ¯³ĴǸ³ô²Ĵµó²´öø´÷öùü½Ż¹Ľúºñ³òtrmj™£¡©©æ¥êī§Ĭª¨ªîĭů«ï­ıűíIJ°õų±ïòŰŮƳIJĶòĵ³Ų¯ƶ²¯ŵõĴ´ô·ĸ÷²ôŻõ±ýþºƻ¯pnmlĜÝ££©§«ç쪬í¬İݬ¯±ïĴîò°ôĮó³Ƶ²óŴññ²ö÷Ķøö¾ý¼Ŀ±Ķ­®¬ronkĚ ũ¥Ħ§¬ħĬéëĬ¨ū¬¯¬ijĭŮ¯¯ijdz°Ų°±²IJŴ±ȸ´ô´ó·³Žþþú³qoomšçĨè¨ĮèðìŪ®ªìįííůñ¯ðƵí¯ððIJŶĴ¯ñ²´Ʒñ±´³÷Ķǹ¶ƺ´¾½µõ¯njom¦©ê§«®«ī«¬®Ůݬĭï¯ï­DzñóŶ°ƸµƹóĵȺ±öö¶¸·Ķ¿¾ü¸¹ýù´³²ljjh¢ä¤¨§æǫ©î©­°í®îòññƴıõĴ°ó±òðıĴñóµǺô´¶ſ¹Ĺollhߥ£åĥƯĦ§§èīªŮū¬ï®®îƱí®Ųñı°îóƸʸ±IJöIJĵĵïƹ´Ź´¼úĸ±nkli ¤êĮŰ¯°Ů««Ų²ï±ð¯¯°¯õ±ñijŶ°óóƶóô²µ¶üû¶µomlj¤ æéç«ŭªëéưªñưݯƳıðñIJ°ų°Ŷô²ķóö·¼rqljŸ©éèǭ¬íƫª«ïIJ­îì᝝¯îŲ°±°³óó´³Ĺ³linl¢¥¤§ūëǮDzīðîŮ­ƴ²ı°±IJñijIJ´µ÷º¼¯mjnm¤ä¦¦ƫ¨ª««­êŲ±¯ò¯°IJ³²²¶ÿŸokpnÚÜßåáĦ§§Ưé¨ůƯ­í°ñ®±´µ³¾½migeçç§è©Ĭì¬Į®ìô²ų²®°³ĵólijhģť¥èæª«ë®ıIJįijķ³±³ĵljliġè«ƬŬ«î¬ð°±®ƴ²ĴŻþpnnl썍®Ī¬ůìì­®ðıññ´mjhfèĩìòį®įŶ³ij±³ôż°liqoޞ¨¥«ŭĭ°î±±¯²olon¦ìĮ¯°mjpo¥æëĪò²¶qmig©¬ïIJ°±nlnl§¬Į¬ïíð­omkj¥¨¯±°±jhliª¬­ì°qlonïĴpmkiĭª­®²kiki­¯²plmjolpn­rqromjkj©okki«jhli©ëonqn§mkliplljnknlifkjqopmpnpnĪhemjigliolkhnlif|y|ztsttnmmmk{fwv^}}f~vctmRsuOrpSpnPmlNnnJcc@gf;[b6af9V_0W[(\_,Q[RYOVLQPPUVQQORWYNPVRLOSOOSPWOUMRLKSUQOWOPRXWQM%65dcjiig~ft]ygt[vZl|UsZoOm}Ql}LkzFhtC^p:bw9Wm+Zo-[qSlRiJePdL`MmSpUlLaYkQhPbTeMgSfL]MfQbRcQbJ`PhLZJ^UaQaL_OaJbO[QbP`SaN\TbP[U[N]YfP]O]O^Q\RZN\QWVZS]S\KUJXU[TXTZP\SVRVTVRQNVMVT[QUQTNKQTQWRSPZWYQXLTSSJQSNORSTPTNMOPTPQRTRRRQSUS"*(c`}nlljOkSqKiOjQlOiSlGeOgXkPmOkGdRgSiQgPkKaHePhSjKfN`SeTkTePdOaQcNeSgSbWcOhNcI`ReNcQ^P_P_QcMXK_O`O]S`N[S^ZeNZLYKZP]P\K^UeO]N\Q[IPN^KYMXOXR\LVT[PWKRT]QUKVLSPWM\S[QZPSUUNXIKKKSXPSOQNUOQUUMUORQTJOLRRRPPURPPNRKPY[SQXY!#!YX~{gdjhPkOkQoIeNkJgSrJjLnMiMiHjVoXhKbOiPhOmKbT^RhUfMcMdNdOnPeRcQiNiM`KaTjTgOdOcRaQbSaVfTcN\MbM`J\UaP`T_M\W^Q[SaPYP_S]SaP`QYYeU\M_M]PZNSPXQ]X]T[KWP]Q[OSSVV\NTT\QURWLRY\RYR\SXPVPVKTNTLTLQMUOPVMPPLSNKSPNSSRWXXMNOXXVW$NM{wkkihPoOgSlJhUmMeLmRqJgSmUlOgReTnSmRiOgRiShSgWiQfSgRhQfRiIbReOdMfTfQgJ_QhN\V`OeRbLbJhLaUdLaS`M`QdJ_Q`SaQgH[S\Q]Q_N[WbT[MWJUR[RYQ[OXR_KPN^TZKXQ[HZLWMWVVNXLWMUNRPRS\OUURLVJTS[XYQVPLILVRKOPVMKRVPUUSROFNRSSRLPUTU[XT& LHfdiiPlGhOgPlNkNlOpHgNiOlRkJdIfK\PePhLdMfOgQmMgPjRjLbOdN]VeRbVhKcLdN]O]RdM_M`L^PaMeRdW_M[NcRbP]RbI_K_K]R[TaN`J^P]NXO[R^S_S[LZOaKVL[R\U]UZQULQLVO`OYPUPWOZLQSUSYNYOXRTRWOSV\W\JYWWNRRWSTPUQROMMTYQRPMONJSOLGPNSPWW\S   mjmkliNhRjNmChSoWnQeMoQhOiMcPiQmSfVlRkNiQcPbTiOeQiQhWsO`QdMfIiQbUhOmQaRgPdUeShNcM^QaJcRbQcSXSeLaK\P^NaSbO]QcS^PZQaU]J]PZJUP[NaITZaPWKTQYY\U]R]OYQ^OZSXO\NWOYNWM[SRNXKQLPSVPQPRMSOUP[NRTQRQRTTYMQVQQSWMYRNIUVSJVSWQ[T$ +  jgjgifSkToOfNfNiLcTmSnNoRlOpRlXlVlUkNjYgSnYjRgLeRhOfOeUlTdRhVhIdQjPfJ[QeOdUhQaNaH`K^XjRaSbQ`TcQbOYP_ObQeR]U]J\S[O\UePWMXIUU]PdL^SZT]QUS[R]TZMXNWU_U]SXUXRZMWT\N]USPVVYRYU]SZPVRVQOMNXSQYUPPSLOWXLPLTLMUUXRRV_[ZWUZWT&  + +mhljjiSnOiPkFaFfQhSlOeMjNhLnNiQmUgNgLiNaOlKeMfWpOjM^SfPbL]SeSjKcXeNaQbTgNeM`TgNaRbPhMcMdPdS_L]M]VcOTObR_M^OaScPZScMZNVO`S[Q[QVO\J[IZVaNZQYKYWbU_S[M[LUTTV\NQJSU]TZSTNRQYEURRLWQXOQQ\VYPQMLYWSMROLMRMOMILQQUPRQSUSOVT"   pljihgSiPjVqFcOgKePnLhOmWqRhOfPkKgQlOiQjPiSfVoQiJ^MiQeUjXjQfRkH^LeUhUdUfK`OaMeRgO`T_IWWfRbGZJ\VcS\Q\R\Q_TgTfN^OZUfM]P`NeN\LXW_NZPZTaPVL\MTR_U\QXNTHQNSRUTZISW[QWS\LXPTPRRXLYLSMPNQNXU[POUWOVMQUTTSRNSRQQQQSUUTVTQUUY'  kghgmjKmFiWmNjKjMlNnQkWrPhKlTkLkIiPgQlGfMhNdNhJeIcLfWlJ]NdSjXhKcMgO`PbQaN]UkJ`RdK`O]VcM`J[VbIZLaM]NbJcKaQ^XdGVUaS\U`OZO\PYP]HVKYRVKQS]P_SYUaW\M\SXY`PTSWJ[T[OXNRUWUYTWMTUZOYQWT[SRVWQTPMJJSMHDPQPROLYVPTTPVTSUYUVPOP    lhnljhWnKiUqJfNjRqMhRoLnTiLhLoWkMfSgPmNjOjNcMjRhRiSjUkTdNeLaSeMdKaRbPdPdPeRoMaSbNaCXI^Q_PbQfKaPaQbSbQ^O`WcN\U`RbS\M`KbMYQYKXQ]NWT\RZQ]R[OYT`PYSVS[NZU^NTJYMYQYU^MYKSMPUUKPU[U]PUOLWSRTOMPMSVGKSURRPNQQWWYSSWWUYOYRVR$   + okgdljKlXoQhKlOqPlTiHiMhVsXnQlM]KdQiPbQaSdUmPgK_VhOcVjPcK[TfPdVfVaH_RcRdQcWhM\NaUdOiTfQkQgR_T^N_O^TfQcI\N]P]PZDYLVKWO\GVO]UaW]M\U`T]O[SVP[P`NYNYKTP^T[KSOUMVT]SUWYKYTXKMSXPZJWXZPTPUMSMORXJKUQTXRPKJPORRTSVZVXVYXSVQ%  +    nifekhTrPmIhQmNfOoJiVfOjUoSjLlPdWnWlNlVkRmRjPiUeTiPcPfO`RcOcObZdUdVjQgTeK\RbPgMdP`OaUfO`Q_SeL]VjQbTcMVP_I]T`PbW]LUQ\O_I\Q]P`R^R[R[V]MaNWU_T^KTZZPZTWQ^JVSUSWMXS[RWSLRSTYUTTVMURTRWMNPVTUQUOQVXQTSTOQIOXXXYVTWUXTXRVN)     njfdgfUpQjMoNiQnGgXoZqLgNkNeTmSoSgSmJeTlPiOmGgQlTjRiJaSiUoWjLhUeU_R^OcLiIbH]SbOiUcLcRdVfRbHXNbKWLbN^PZNbL\L_PXQbQ^Q^U_N^Q_Q[T_N]RZRZSYLUO]PYV]NUQ^Q[V_QVLSRXS]SWX[QSRXTZNVMROYW[ORNRQSNURVPRLZNUMSSWQKVSSSTVQUYWXVXV! + khheieToOfQnVkRkSrMePoLgJeOcSpSeQjOhUkSjOkIcVmQlRkQhPaSdKdOdTkUjOeMdUiPdPbThM^QkJWNaRbK`UiM]VdQbP_YfR^S^PaJWO^MYR`J\TaOZV^V]LQS]X_P]M]R\IPOZMUW`PXWWNYNZT^SUOYGRL]YYQSQXS[RXQSSNQVLWNWTTLQRRKMPQOVMONZTUWR`TVVWYYQUP% +  +khfdjiKmLmOhMeNjVkSmSnYoKfYjPjPiQfSlRhMhMhTmWrWlUeQfSlTgJeG^SeM_McPgSeQcJbSgQhP]QcI`P`O`TaS\PaS^ScS_Q_R`P_KZX_RXOXPYS_S`IXR]GRSXNXNWFYQYUbO^R`MXITTXNUPVRWPRWYMUMRQSITPUOTTXQSMRMRRRQVKMPRQTRSKLTRWZRSUZWPZUYV_WXYVT% nljhjhPbVoQjUkPmQoOnWnRiUjPoUnYmShUlNlQfNgNmQePdOaUeNlVhUgSdZkO`QcPeLcR`SfUdUdQ_VhReTgM]NaP_I`L]WgQ^O[WcO\N_O][gM]OaIXW]NZO^TYU^T^R\MXM[S]SWU[T\P\NRRZPZYWRXK\T^PWHRSTQ[OTPURYSTFPPVXZJQONQRTSSYSUXTZTTXWUST[XXTZUVM(  okhegeOmMeUqOkQkQmLhPkSpQiRpTmYp\oRrVjQdRfQdVkTjWcYnJcXjG^WjQdOiUdM^RiQePhScMcWcN^O^ViO`P_P^UeS_QdMZUaNcQcR\PaR`TfU\UcS\S\TdQ\W^T]P\R^UZXZIQOXQZT\O]PSH\NSKRV\LRU]QVPRRVNWMUPTYWWZPRNQRWOVPPUZPURVRQRM[WTQQSZTY]YPXS$  hffemjNiOjQoQnRoVlWuTiZpYoQkMeIjQfKdSiOeUkTnWkWiOaPeN`MaQeL[OgP^QgSgUkVeRiNePaRbUdRbN\R_R_TdWdRaL\L\P_QfO\M[W`MaN]UYW^V]OXP\O^MXJSQXSYN[JVSWUWURO\P\PWT^V\V\NVQYMTSONVTYX^TWVZPSQ]TUNSKTOVVPRQTTQRWTWVXP]\UUUSVWMKWO!  +  kigdkiXnOnUnIcYpRlYqVrNdLjRtUnKfUiSqUlOkTpIjPiUeRdTiQcQiOfWgWjRdScWjKcQfNaM_SbXhM_O\J[WcSdK[NaOeJ[J\O\U`YdU`S_M`P_RaR\OVO]O^GXLYRZWYTYQZJWOWM[M`N[RWNUN]HUPXSYSZLUNQXWU_UXQXKSPUPSSVOMOLRVOOOOQQXZ[UVWUUTVQT[XVSZTYQ$    + +mihfihQqNjXrOnUqWo[sVkPmRkXlOeOgMfPaWoWlPcOdTiVnQjPaWhWmTiUeVcPhUaRaQdXcN^ReVdH]L\ScTeM`I[OiJYO`MUVcL_Q_PaQ\KaQ`T^T^M_OXLYOXX`ISM^MZOXR\RUSZRZRWMXSQRXS]QWRTPUOQORRUKUPXOUSUNYNSQUUS^\QPOMTSSOVYWTVZPUXZZZXUXU[VWQVO! jfgfheTlXmTqNkWqQhVgNgQn[rLeKf[mSoNmUmOiUmSgOdPjUiPbNcR^QiVkN`PmSbSaPa^oQgSeOeXjR]WiXfY`UgNZScT^UdQ\TZO^O_N`CYP]Q_N`TcI[\fM\LUPVXaN[TWM][_JXQWT\W[RWV]U\O[RXNSMVNOS^UXSWPUPTRRQQLQTOMPLMPTOULTWWXXTLW[VWVUTRQTURQPUL# ifiggeSmUrQmKgSgKjVqMdTmRlRlYjUkPnTmPjSfPdTlWwVjJbXmViSjNfQkWoUePkQaJfTi]lKfK[YiOiYcOeO^P]TbOaXfN[W^RVQaN^S^N[UeN[WbV`NaPZPWU_L]P[MZTRPWSWIWOZOZPWPWM^QURYQ[JWQSNQLWNWSSMRQVSQXUMWKPSTQUSTLNVYWX]ZSXYZ`UPQVT]UUYTP_W%  + + heljljSpTpZqKkOmRlPnUhXoQpHhMlXtTkWkQhReVlTmUgKgPhRjMhSkPaUfRjLaXfS`K]YlSdUgN^XhOcJYS]MfVeRcUfVaSeQ]OaUbL]NXQZXaTcQYW[M\S\T[U[W]QWN^LSTXRYPTRXPWPWMXVYRVUXJSNUUXO\OWQXNNNSSZR^WU[XPVTOTWMSTYQQTXYW\XWPLMUS[WSSPW[X[W! kigekhPqVwYpPiPlOkQhQkPkRfPhYlTlYoXmYiXkTgPiRhPfMfMcOeRbTmWjUiI`UfQkRhYjUfUeO^ObWfSfSdTdXeLVSePaUhO^PaN[N]UbQ`QZQ^O[VaU`HYSbPVQ[RUT[Q\S_UXQYRZU[KONVRYWZTXPURXSSJSTSNTSTSZSWTRQTQNNNPTRPSSUSYZ\ZVUYWXVPPVY[ZXVWTQQSN% hffehfQqToNmWpTkVpXlSnVjTpSkPlTnOfYlMfUkLhToRlOhXiTcWkUfRjTfQfOgQeUfXjTcYhNgR`XjTbP^XfUdYbTbVdWeZeP_P_RePcS]UaHZQ`O_HWT]V[TXS^T]T_JZYcPYSXRXPVQZU^QXU\MUO[IQOTMSOTQPLXSUQUUVWVOSMMOWQUUVOVU\WXTOSWXYUSVSRTQQVSVRURUS# + hgjhhfMlReMhVnXrRkOkOkLkYqRlPfXkOhTmWlNfUdThYjSjTgRmVnVgUjVkSdMaObUkShTdPfL]WjTjVhOaQfTbUdS`Ub[gU^V^J[U^V]U`TXTcW]SaPXMZL^S]S]SVN[R]JZV\U[SZV\SYM[PYPVOYW[MUROOQSSXYUXORRXZ\JKMNWNQRMOPNVTVUTWVUWRWVXSVWUQV]QO\WWQRT%   ljfdigXpZsTmRnRkUiRnPnUqZmRgUl\oVgVoToRhZnOfQeZoXjPgSfShQfPfOcP]TcReMdP_TbZiPcQeO\OcN_P\RdK]Tb]fS`QaMWKYXbM^TbNYR^UbT_T`Q^U^U[PWY_P[PWWZQYTWOVHTLXRYPSP[QUYaJSVWQXTRMSMUPKT[SXMRVYKQVRUXY[ZYXQXUW]ZZPTWSTSRRUVVTVRST!njdblkOjUkTrUqRiUjGeUkLmTjLj\pYkXnTnQfSkXlRc[sQfUhVjMeTe[jXi\mMdLeMd[jSgTaTcWjZgUdL^VbRfYiKeXeI`V]Q]UbW`R_O^R]UcT`KZPWSZS\X^P[SYX_QYR[T]X[KZRXOZIZV_T[RWMTNTVTX\RWOVVWRXVYNRTZRWUTRWPTWSWWWUVWZW_VYTVWRR\Y\MVRPJ\UPQ$  khgeihRhQs_rXrTlRoOlQnUpRhWoShOjWjRjZnUgVkYk[mXkReNbZjHcUkN`XhVkQb\iTbOcUeWiRj\gVfScYiN^ReMdJeSeRdR^QcU_S]RZN[M[S^T[Q[L[RWPaWeSXUXU`UZPTWZPYV_W\TZTZTXNVW^WaSWS\T[MTRSVXU\^cUYQTSTQYQSVXXXY\RTUTVRWZSSTPNQVVRUXV]XWX" + +   hf_]igYrSp]vQkTpTlXqPlMdTqWhTjWlXlSjVlVlVgZqPgTcSgWhQcP^PfUlPaSfZiLaTdXhZdUgNcW`V_Ua^hRbL`PaS\N^TfWeMaSbL[^fPZRfP^IVOUVbWdVcTbNYR]QTOYRSP^T_U\V[TYOYPXMRRVRZRTRXVWWWTWORKUTVIKTWNTTUTSWWUSVWZWUWTUSVWVURTSXXXXXWSPTR    + + ecfefcTlPnQlYqVkSoTjYiQiUlXmYqVoUuYnZrPeRfZkVjVkUeUmQb]pTfYiNgQhWiR`R`_mYbZgPdN]LZWjLcUbO^ThO_P^Q`L`QXT_L^T\G[XfPcQ_NZTdX^R_KVV[SZV_U\UXVZMRLTRUS^VWW]T\FRTXP[NMMTLSMRSWPRPRNUMPX^YZUZUXYYPPXYQS\VYZRRT]ZORTUVMLWTPW%   jgdbgfTmQpQd^oYoYq[tXlPeRlUlPiZrZkVkToQiUkSjQeVmLaNaSf\nQgRdTlUiNcWkPdXcYjRdQ^RcYiRdM^YeXeYgV]O`RdSdR^YdZcMWRcS^NVV_SYM^S^LVT_PXU_Y^U]R^KPP^LZY_LVU_UXVWPTRYPRQVOWOUSZRULPONUZQNOUU\VX[VSSRRTWRS^`YZXWQUSRTTTRSS[XNN  mjdcgeVpRo`{PkTkTlUnYtKgYoVkVlZnWnSbYmXkRoWkUe[nVhShSh[oQhPhN^NhUeQc[nTcT`XlT`VcP\N`Zl]iR[VbR`T_WiWaT`ZaR^T_R`O\MZSbR[O\TZYdSYV_Z`S]VYV^QVMVT\Y_MUWUQTT\PXOZOYVURTVXXST\SPLRPNUTSOXXPTUWZXYWURNXTWURTUXW[X[TYSVM[W[X|( hejhihTuYmMdQg[qTkUoWk[mRoXoaqUjTiRiTjYmVkZoOeZqRiPhPdScZiUiSgWaYfSePdSbP_Xk]mW`P^T^NcUaOaV_U`UePZXhV^TbZhTaRZU[L]W_V\P]OYVcU\Q_V]U\NTPUS]QWY\OW[eTVPZPWOTMWPUQWVWRTQW[YU[RQNWUUSVWXVVX]XWTXW][VX\[XU\ZWYYTRRPRSUTWV+ idnkig^xOjQoWqVpSmWrUoVoQiRhVnTjWoSlPb\iVjXg^rXmTgShWjXnPcIcW^UjRcYjTdU]SbYkR`SbTdWhVeN`TbTdP`QeQ`ThN^QaRYWcT`Q_YdSaQ^U`S^S[KZOUSbR]Y^MZUWQVR]TYRWRXX[NSSZSZTVUWQSQWTPXVPQRVSYVXXYV\W\TZWZTQWUUSVWb_WSTUVURM_]WSVVXR&    ifdc_^Nm_uXiVpQjSoRnPjVjWnTpRq]rWnRjMe]sUmQlTm[oVlTkXi[oOgWiTjNfLaXhYlPbUhTgPbQbSbWhTbUiOaSeR_QZK\N`R^WaT_ZcM_W^VfN[WfS\PYUXX`O\PXP^OYP`YZIUPZRVOWUZUYPZPVT[ORQTMQRXQPTWLNRZUVWYRVRWVYXX\^]T[\ZWRSTTTMYX]\SIRLYS[[TQ$ +feedhgUpRkTm\p[rShUmZnVkYjUlFeYiRn\sSfWlUmVgVgVkTmXmTeXoZr[lTmX_NaI]UkSbM_N^UdTgSdZeUhU]XdZbU_XdO[QcU`R_P^KWUaYcS\UbO_S`U[U\HZQZS]\^VXQYQZSUXZUXPZYZRWY_QZZ[TRWWKSQSUWR[PQU[NQ]`QW^ZORY[WWW]UXWYQUTUWTXVXQOSQIRTXU_^'  hfifgfWnOlTp[uQqUmTkZkZpVr\nUlRgVmWq]s[pXnYpWeXkYhVgQaMe_mUgWhXjWjUd]oYfSfUgRd]kVbRaWcYgQ_Q^O^T[O]TbO]QZYbOZOYT_OWO^NZV_O_U\SYSYPYZ_X_TVS`TW[]V\SZPRU\R^OZTUY\MVW[SY\\KRTVTXPXXVUVYYW^VRQVUVRWX]OMVUY\SXYW[]UPUX[\YR  fdfdeeSrVoavRpVpYsWlWlUeUqYn[lXq]rReOiQi[iZmXgWmMgViXlQf_nKe[sReRbRb[fShYiXcUdYiYiXhT\XgTaP]S\SeNcX^T_R]R\_gXcNXM[IV]bUYR^P^T`O_RYNQXYX`RQPZSUT]TXITQXPTSTX]XZPPUVKXMRUZPVMUTYZZPV[ZVRWUXUS\XWSX\\TUVVW^]UUV\SWSPP]U'  +gf`_gfXs^w[uNlVqUo\r^rZy[m_nRoSjRd^oToWkWjNjUmWf\s]oXoYiWiYlWgL[N]XjXfYeTfRaXeWgSfRbUhW_RcXbWfTbSdYcUcR]RbSYT_X_TbMZR]W`QaX[R^UbRVSUSYZ_PVX^LSSXP[Y[RVY]R\OVU]QZNWUXLN[YSTV\TTQZ[Z]XXXTW[WVXTOVXXUVT[ZUUYWXVVOYS\WWY" mlhgfdXu\n\uVmXkQ`UlYrTlVmXlWr[kWhRiQkQh]rZqRn[mWiYhYi\jWhXiShRa]mUhWiXbYmUe[gT`P_TdTgTbU^O]XdN[XdScW_XaVfQ`TbIWXdJ\X_PYS`R\SeS\M^OYT[W^RVNVTWTYU[[ZPUT\TZIMUVX[KQMQWXSSS\ZaT\[[UURWXXZZ[YXSYTXUNUZ[YT\ZVTVSYXTTRVUR'   dcecomSi[pXtYo_vctTj\pWpXnboVhVdQhQjQhRiUgP`_tUhNe`o[g]tVjYi]kYlSfQ_WhRbQbTgSdWf]hViK`R_ZbVeO`VeLXQa[bS]P[L^S[Q\U\ZaVaR^Q^S^_cX_UYQ^NXTTL[PWQVN_X_[]TZW[OXPRSSUWNQUWUQS\WRY\SYOUZ\TWWVTX[\TVSZWUQT^W]XVWWX[XUPZVUPXQ# gdgfdcXpVrRk`t\t`wWoXoXpVjZm\lXkVlWmYlWn_tVgTeWm[jSjVgVjXlV^ZlWcVbL\RgOcVk\hYgUcM_Rd[pVf\fX_TgPYYbT_UdQ]SaVeN\Q^OZRaWaXcUaTaR\R\R\W[WeTYRZPXV_WbNURXX[VTRYPSMRTYU[OTVYOT[VTUZXW\MVVNWWURZ]WXXX^[WVYTVUUPUUSOXSRUSVUU! + gddbge[mSoXt\tXnRsYm\mbuWiWj[nXoXh]yXkPk]p[jVkTc\oM_U`XiO[RdUj^jWiUfUeSeUcUc]iTbN`VgTcZa]jZeO]YaW`Rc]eR]W^S\XfWe\dP]PZ[fUWV]Y\W]SYW[OZZbU]UYW[QXOYNWOYVW]dPWPTSYQVQTRSYXWZYW\a\V[^XXWZXRU[WRXYXUZUVSX[^Y[U[WUU]YZO]S& + dacbgfZs\s^uYtSnNrXmThXkRhbn\s]l^r[nWlWgbqVh[iVj`p[kWg\kSf`kUhUgP`R^\fOaQ`Q_ZgXeSa\kR`Ve[iSaX\\cR`W[VfZbW`R^Va[cKZQ\S\S`TXVaP\V^VcNZSaQYRZM[Q\WZR\MRT^WYL[[^PTOUSUPUNV]ZWUQY]]YZNQYZ\_UWZ\SRVVTVRLZ[ZVYYTVXXWVWUZNTS#khcadcSt\tRpcvXo[t]v]oZnRhVk\sYoVmXlWjMeTlZlYjVlUg]p]nYiSdbl_lTjYiYlYkSgamXhYiWdW_UeTcUaPcQ`VdZcXfW[T_RcXdVXM]T_WbVcQXS_PZ\bNXS[VZS\Z`SXZ^X]RXX][^RZXZY\SYZ]ZTX]OTSQUUXXUUSYVXY[TUTU[UVZOOUW[[ZWYZ]ZZZRY]YXXZV\WUOPL !   kgbaddWoUoXqUkXn]n_uStdwWjRiYn]mcr^oVjOm[ndvUjYg\l[fZjap\q]lYiXi]oVi^iZg]eXeScXcZf^i]icjP^VeQYVaI\WfXaS`[eWcV]]gS`[_Q^YfVaPVWYV_X]YcYYUYNYSVPX\bY\OYOZZ\MUV\RYRXW\UVYbQYRSYYS\[^Z[WYMUYX\[XVWZ]XWNWTQQSSZT[VTSXQVRPV(  cadbjhZvUq`s^sTnRo]q^tUqTkZm]s`tTlTdWnYl\lZqZm^jSnYlVc_n[lZiTcWiXiXhXeXfUb[b]e^kZa]bWg]lN]T_P\XbYc\kWdXcScUaXaU\WaU`RYU`[_XcW_U\R\TVTVRZR[UZTZPUNXYZRZT\V[[`QVRPWZV[X[Z]WVZ]WTVY\V\TTTXUYZ\\QVWRTVWXXTWQUQXWQUYYYXPQ+ +fdfefdbsZqZjUm`s\pZuYrSlWkQmdzYnTlXrXkZi\q_ndo`n\r[lSd^k\oViUlVh[f]hWjXfTfScMbVgS`[hXfWfUf]jUaY_N`RdW\Q]T]XZU`V_Wc[[T]ZXPWY`XaQYV\LSV]T\TZV_WY]aQUJQWXOPMOSWPUZVPUYZX]V]XVTVZYSWWYVRXXTUXU[ZWPVT\WYY\X]ZQUWS^SRVWQZW"dahffeYr^p`yXr[qXr\qbu[sUm^odtXlXl_sXn[mWj\rRk\mWjXe\n\l`n_nQ_\m\mVaPhWiYeXjYiL]UbXcYgQaYdR\X__kS\[a\dUdSaT\RZN\YfHZUeVXLR\cV_U\XaMTUX[a`^TYS]MR\`VUQWLSTWMTSXRTSX[_\\UY]^\[TSUVVVYYYVTZ[^ZZQS[XNP[[ZSX[USYZYR[V^Y\V( dbedfeWp`o^t_s]pRu]pZmWoYjRjZm^q[p\n`sZtXiXn_o^qUc_pVc]p^nVdSeQ`[jVc\jXe`nVdWi\dXgL_^gOZ[h[eYdUaOaYdWbUaZ`^jM`R\ZcYd]eU\TZZZS_PXU]T[V_SZU\PWU^STNPLX\]XWSWTUW[UVY_X\]XVXV^S[\^QSVW[[[ZV[_XPSQTVQYXYUYY[WYVeVXXVQTPZU%   ifheed^s[s^sYn`vYsXq`sWrevWjWg\mXm]mXmXn\m\o[p_oakSl[k[l\i\e[fYfWkXfXg`lNb\f[fU^dh\dXfgrXfUbS`O[SbU]TcO^U_S]U`Z^W_U^V_X[X_X_OYX`W_RYQ]W_QXX]U\OSKXV]UYTZTUVXWYZ[VYSPWZ[S_]YYRU\[X[YPWXVVZT[SUU]XWQ[[XWTNTLVT[YYTQS\Y"fda`dc^uayRk[kSlax_vYr\u[p\l_vVo[nap^n]nXh`pViXj^m]rTfSf^iZjYiYgTgWhXe^gNb^aUbWh[gZe\fY^ZlQ`\b^eZcXc[\XcX`U_W]\^W`V_ZdZ_VXYZV[MXV^V`UYT]Y`[bSZWaWZS]`dV]NSVUSY\XU]YWZWVWXXR^\Z[V\ZRUVUXVUU`[ZSa[[Y]\YUUP^Z]TSWXSXTTW*igdageZn^sbu[oYvcxYndwZl]sWo]pZj\mez_m`qfvTlWianUe[nal[fQ`Yg_m[e[lYfWhZfTcRb_k\nS_YaXhZbVgThVa_fYdUdVa\fY_XcWdUWPXZ_W_Xd_hWZU[U_^cW`YbZZLWQZW^^^UXT[Y_WXXYV^RZZ]\_UXX\_[VXX^[ZZWZ[XZU[Z\PUUWYYYYUU^W][UT\[YT]XZP^UZ\# + eccbed`vXn]sZn^q[rZr`t^pZq_r\k]s`n[pOfZj\k_l]ram[lOhYhQf^ealXhWjivXl[i[jXeTcWa\dWdXgNbXhVaV`W`^hXc^_XcZc_dY\QX]b[bX`S_U^U`X`[dSZY^UXOURVRVUXQ[T]QRV[XaYaT[JPYYX[^a]c[\QSY`XYTVa[YYZZXYSWTXXYZTYUYS`ZSNZV\WWLRR\SXVZU(  c`^]ba[r[s]r[sZq^r\mcpZr[mXn[oZoXr[oXlXlZpbsZkVjUn[o]eWfao`uQdal[l]p]k[j^i\mYd[g]lcn[cOdWdWd[i_eR^[fSXVa[dO\XfTZ[`W]T^WbMPX]Y]RVT[OZSXX^U]Y]MTSZR[PVVXQVVYTYW[X\^bRUVX[YYXYVX^U[]WURYXUVW\ZWSTSTWU^]TSXLUS]VWWYZWS[W)   iebalgd\y^t\pYnWldr_sbxk|`p_mSkVjXkUg^o_p[hcqUlZlSgUico\kYj[gfpXg\j^hWc^mTd^f[j]g]h[eZfW`YgWeN\UaX`[__hZc]gT^T]Y`_bX\MXTZN\XbW_L]R\[]U]OV\aQVTZX^RYZYOXRQRUX_X]V\T[X]\b[\Y]_[TYWXWVYV_aWT__[YYVTYTW^VXXXWVX[UTSZTTWUR% ~ gdcatrfdWtZt]q`qat_q[q^s[o\jVoVk[q[p^t]oas\j_jZsQiUj\ibpYhXh[mZi^lRjOc^fUiUdXc[`WhS]YaafYdO_[eWcK[VbVe\bWgV_VdUcR^WYWYbaNOS^`cRXT_Q_[^OSZ^UbU^TWQVVVV]^bY[V[XZTYUWRVVZ[_YXRWURYVQV\ZVXXU_Y_[``_WUWXY^[XW[]WYZWYPZSYWVR)  +ebbaqkgeYl^vawQlas[o]saqSkYk_n[p[p]rYiShXp^iboYg^mWi]lbq_oWgRdYgYf`l\cTf\f[jWeZa]eYkWa_nWb[fWcWaYiZhYh[bS]Wb[`VbPVZcQY[fZeRYX`RTR[ZcMQPZPQP[[TTUYXS[V\ZcVY[[Y_W_YWW[`YZ[Y]Y[YY^cQV[RY]]Y^]ZVXU]^XSZXUPZO^XVTUU]SZV[XYV%    fda_qltfef~]sYkf{aqZr`s`uZq]pYkZkVn]lThbrVl_rXi^keo_r\o`n[m]pZjXhUdVi]iZeXcR_`kXfaj[cUhXa_gT_UcX\O_Y^XdWaX^\`agU_NY^ePYU\Z[UaY_NVUZPWTYTYR]OWTXOXQW[WU`V]WW[Y[_TVZ^V_TYWT\YWZZ]QZ\Z[`\_WY^UXVYYWYWW\YWS\[ZPZU]V]\]ZZT]W% ~ebb`}pjk^]^wdtZr\q^xcvap\r`qYnZodwas]m[gbn^l]ldu`kam]j[nWg[kYfZgag\gVZ_h_j[iUd`g]gYfXd[d\eTbVaU]^kUe`n^dV_O[XbXeYb\gZc\[T^^Y]cS[TVZaKOQSW^VXZZX[W^Y^T^RW`]W[TW[bUW\b_^WRXZZUX]VXWZRP]YTTYS\\[VXV[UW[\ZWW_ZRW^\YXWSYS]YWS)|hgedsnisued_tgvdz`r`sbt]rXjbo]pcpgx]p]pbpYj[ocr^p]nhr\iYj[g^g_oXc]jZlanWf[gbiXh]h[iW`Xb\gahXbY^T^TXL_]fQ\YbX`Uc]bW_WcP\RZW[V`W`U[[\V]V`Y]OXZZZ[UYW[SZU[T\[_W[X]_^]`V[]`[bWXX^ZZ_\ZY`YXUVQXX`Y\ZVR^^XY]XYWZY[ZXVXO^W^YVPWW})}gebaompnl`_Vud{avZhbu]t^rhu\t`p_rZqcscp^p[jZi^m[ldl^o_rfx_pcuUibr^mZick\gVebnM[Wa`m[iXc`jYcad\g[eXdT^Y^ZcV^]b]eVY]d\cV\W]QXZ^X]]f[]Y_[eYYZ^Zd[Y[_RWU\ZYWZ\c[\a_WXTVQ`[_ZaZYVU`aXX]\\Y[\VTb`XX^\]WTUYV[\WZZXTOXRZW]RZXTSZR*  fd~caopjoow][_p`obvct_rdtYq`ubvVk`rYoXn`oZkWibqds^l`nbsaldiZiYh]jdm[h^jWi]h[hVe\eWbZd]g_kXa[d\gWe[]YdalYdVdbdX]_b_bV]SU\cV\WTSYZ_Xc]`UY\^\\Y[W\QV[[Y^\^RWT\^_Z^VY[\Y]RU]Y\\]`[`XX[Y`^ZW]ZTRWS_]TTWX^[ZU[]XYYUTRVR`USRYY[WWR*~~~  ecdbnijkmjba^u^v]sXk\qUo^r\n`r`pWl_qiv\i_s\r]o[nXhZldtbr^n\c\i`o^h\iZhdm]kYcYgX`ZcX`dnXc[gYdW_ScVg[_[c`iV^_g\eV]S]\`W_Y_Y_T^XcW`XbQW[dV\U]S][`WWXW\bX^WYY\\\\_VYY\ZY`Y[\ST]\_\]V[\YRSRXQY^RV]Z[[[U\WVTb_]Q]`ROSPWPZV[VaZXT)!!  gdddqlmnmgyb`\ndz`u^smx]k[u^rdobscqYk^q`t]qYq^mao`paoapam]qZjZgYn[iWhTdZiZbUe_kYaZe`oZg_f_hWcZeW^_gYcVeV`Ya[aWb_fS]Y_SXWcX_PY]_VZOTOVXaZcYWYaRZVWY\W]W[VZTY]\W\XY\`]cY[Z][\YUUWZVZZ]^TTXW[U[X\W^]\X[WWI_X\WXY`YYQWWZXSN^Z[U' | gf^\rkcgiepgebYsbv^n`s`p`qPi\r^vaxYm^nXf]n`oau]j^lbwYh]gbmdoTfXf\lWe^n[hYc[_Yd^lU^^e]iWbagZdYc[eY^]`XcW^V]^eSW^cV_UfR\O\Z]YXbcY`Z^\\]cS\SWV[_]]YTSU\YZRQYZZ_\`U\`_YYX\_Z__cb`]_aXWUUTXXT[W[\][VW]]\YXWZXZZZWZW[RWVcU\WXSYRZQ}ec~{b`mhmnmkdktgf_weycy]wfuctfv_n_scudw\pZjZlXl_o\kTg_oclcqaqaodj]gVbdqZg]gkqbiZcUb`jU_^j_jZd_kU[P_ZaWcRaV_R[]dZg_d[dTXU]SZY`_bRUSY\cX\^fPVV[\\Y]V^U[WUPV\TZ^V\VZXYYYXZSQSXTWUWYVXYXWYV_^RU]]_^XXTUXUZZZUZZWTWVTMZ]]S\S_XWV^XYU(! ecbaoinihlpmlcad{as_pbpi{dybtamVs^rjxare{]l^kgqXi`o_j\ietev`hS`^e_jXf]i^oVd^g\g]gdnTd\h[hWgWZXc^hW`YkXbZcYd^gVZaaP^Y`\]X[[cY_\ZUZW\X[\]W][ZTWV^QZY_UVYXZ``^ZZXX\\T\UYc^]_[XVXU][\\^YZ]V^^]]Z[WQXZ^]UQ\][SYZTN\UWS]SZRUSVTWPWQ~ ""  }_\a`lknngjqilza`Yo^p^w^lZlgw]pUl[ndr_n]jdtbl_r`m_pWjap`mWhWi`obmZf`t_lck^fZkZhZiYiY`\a^j]c_k^dT\Vd[]XcQ`[c_cZbW_Z_W[W^Y_U[Z`XYZZ[d\cRYX^X_VXR[[`Y`UXZ^X\]a]\[\cdZZXZ_c^[YZXZZV]XUO[`ZX[WYXXWUZVYYQ_V^YTRYR\[WX[Q][VR]\TQ]ZZX^W% { | ~caa`vnnkqolonhggedugzexevfuap\qapevaueqcvcsYk^o`p[i^m_qgtapZhdkhs]j_m[c^kVj[h]k\kYjUe\fYaYeO_]e\f^e[gXd\a\b^_XeVcZaXa\gY`^_VdOXX_SW`cZ]Y`\d\UW`W[RURVZ_W]`bZW]ZU\ZZ[YXX\]^YQ[SS]`]Ya\ZP\[]]VV[\[ZZZVTc\[V_SXWUP]VYX[X\VZV]Wa_]W- ~z z wa__^qrdqhlgmnoiua_`zbt\kQicv]nlyUj^kbrbuaubufxZk[jYd]maq^lboXk_het[eVb]gapTh\`_jZe`l]i\i\eQa_d[a[b]c]_diU][fZbYbXcZ_ZaZbXc]bZ][dS\\^Y^ZZa]_`UY]gYX]bUYZ]]c[__cYZZWVZXZ\[WX_d]]XZQW[\YZ^[ZW^\ZZ[^YTa[TU^^XWZX]XOO_ZTR]]YQ_XW[[T]W* z~z |ed}`_jiglojikmjfihf]vdu\qdsjygs`ybpdvfu]pcu^mgxan_m`n]l^j]jar]g_p_j[e_ofmhtcsUaZgTd^f\f\c]gZeXdXc[dXb]aZdX^chYeU`Vd\i[eV_Z[Y[ccZ^X][[Z\PYSXTUYYa`Q^WZV[`[W\ZY`a]^QY]]W]bbZ\\[Z]V[X[[X\^[[a`Z[SS^YYSa_bU[YaY`Z]]YTTV[^RP\W_YZS\W]Z)zdb~~}ecklnjltnfiillthgeubwew`oZmhr^q]lZj[oaibr]mWoapbnan^kjtgqeo_jZf`nXjag\gei[iScXc`j^dUbUe_fT^]dck[f\eWcS`^dY_[_`kR[X^^cahV^[aV`VW_b^`WaY\U[^`Y_W`W]Zc]_]ZXUVZXX_ac^`aW[]YWWZX^\ZS[VbY]Z[Xbd\W[Y][]\\VZVRPYS]\^UZPe^ZS\RSPZVZ[ZW^V) }~~~cb}~}_^olhkuofldeniidd]sawZmfwbu]t[lducn^paohw_ibp]gZicp]k\memaoir`m]k_n]j_p_j^n\eaj[hZf\g`gWfblUcXc[abg]gP\Va_eVaUZWfW]\fW[]b`[V[TYPS[ZVZ[`Va[\PUU]YWT___[dZ[[X]^`^_^[Z[^Z[W__Y^[SUWZ^ZWQXR\ZXT]UWX][]VXU[Y[W\XZUZR\WXRXU\WZV\UOO]W(}} y |fc~~|a`}fplilhgjhomhcqedh|^s`qdvdwdwcp_pYj_jbn]l\p_jdr\k^ibl^kTb]egqYf[jcpbian\qfpZfalboboUf]mcjP[_g]c_e\_S_]e]dT]Y`R_Y_S[]b[\V]XYU[Z^X^X_USSVZ\WYY]U]b\_g\bbb\[]^YY_\^`[\a]Y]^[hf^WZWZY_\ba\XY]^VYS\VUVZZ^_[WYPbWSUUX]UWVXUSS[S[UYT^R/{| ~zz ea~~}}`_fmldgeciogmjbjqdbevarUm`u`vbtcvbj]th{]s]ocl\lWjcjZjem_jciZhfmYk\l_l`lWgXb\nVd\gRe[fWa[cY`S[]g]d\kW]^bcgUeY_Z`ZcbeZ_W\\_UYV^Y]X[X[[`ag[[WbPZUXV][\\b_][\de]Y\[Z\WWZ^X[^aZYXX][TS[]ZU[XYU[ZV\a^UTYW]\W[^V\Z]ZWNVQ]X[SYVYSb[WUc[^\$~}yx|ec}baeinjlmkjjfhkfmmqcc`sdrbsZpgzivZq`pdq\nev\ogn^qcr]lerYf_o[efncfV_ZfbmSf\cYd^hVe^d]eZgQ[ZaZ^aiX`R[XcZdbk\aT^ZaY`MYY`Z_\b[e^b]bbdVVPVW`X__c]\V[TXTUX]WZX]WZY_XW`]^\^bTVYVaZZZ\^YW^XZW\Z]W[]cYd`_Z\[]^SU_[[][Y]W_[_U^V\Y]Z]Y_\YP\XZR{-%% } }}ub_}~|}_^jhjelrkgnefmnicadcYkhv_r\rftbo_q]ncl]lcrgq\m^ngo[jbkfv^i\jahZhdkchZl\gXhaj\`V`[\Ua^j_k\hV`[d`j]^]c\eXa^aW\^fX_X`[bVZbgVU[[Y_[]hmY^^Z^`WZZ][\VX_^^\UYZW]Y^^TZaa]aZ_bca_[[XY\YZ]TYYXY\V[]\\WSU_`YZ]]]W]R_VXWXSUN]U^YROXP]YUP_X\X\T-!! |{~} + x\[}~|^\mheikmmfh`cgglfcsa_arfy^sXpbt]mcr_oar\lbqevZkht\laqbscp]i]kglipak_hXgao^d`jWdYbSfU_U`Y]]g[e`i[]bd]c[b[cZ_Z`V^adX\VZQZ\ab\\a`f]]SUZZ]bUX`aV`VXY[YY[Z]a_b_[WX\\Y[]^[Zca`a\Y\Y[ZX^`^XY[[\[^]a[acYO`OWXVY\Y[V^YYU]ZYYWV`T[R[[_W]UTPXS}|||z |db~`_ukbfllpjck_fe`fnehdbftezex^t`o]k\r\qaoXlbqaoZm[kbl[jcn[ocmdmfres^m^faeO]^g`lX_ck^gco[b[c_fX_^c]cZaY[X[YeW_ca]_VYUX^gb``bXX]cV[XZ`bSXXU^YTcWX]\Y\`a]^]]`a[^\Z\^YZ\XZ[Y\`_XRZY][][YV[Y\]XW^`^ZXX`[Z\YZ[W^]WPYU]TSS[T^[WYVQ]TZ[aS]U^\-t| vru _]~cafkhhj`gdkkhbl^ciagpgfbwbr]targ}bvdrbk`udseq[j_m\lemYk`tdnbhZd^pfoaj_jYe[j^h\h^c]n`h\e_j_hZi[a]cTYXb`e]_Y_\`df`hcdWUX\_dU`]e_dV[]]SYZ^NVXZXWMT_]UYZ\Y[^^``W]Z[]]\^\ZXVYWZ]_`\`TU_`[YZWX[XXY]YU_]ROW[WS^RaWZT\X_^WZd]ZXZQ^Y]XZY]U][]Q+  y{~{{vr_]|~~|dcjdgiljejlfengddmc`da_k{btizfq\k^rey^j_kdo^mfs_p`i\kflYj]hSgZ]ajXfgoYcajbkah]cZjV]]a_fahbe\gbh_eZ]Yb`a^d[dV`^b[ZZ`^bWZU\WWTYVY\^\[U]Z][WVXXaZ\]`[_ab]d`]VZWV]_a^]]b_[\\WaY^^WY^\a]XVZ\\\Y]\\YVWT`Va\]VXTZR`T]U_Y`^ZUe]ZVWQ]UWUQJ_XYP.}! |~vtu{b_|~|}`]gihhickfflf_keobdfeohffx_vgv^maqbrgrYj`oan^nap_n\q_ifnip_h[`bh_dbfbi_j_fYfcj^j]i_hUaZ`Z_ef_dYbbb`h^afm\a^`[\_dV\Wb[\]dQVV[[^baYYWZY\QUT[QZXVU^ZU_^]\_b]]`]]]ca_^Z[STZV]YWVda^Y\[a\`]UZVR_YY^]`\U[Y^ZPV\W^\[VYQ`[]S[V^S[[\R[SRNaU]W\T)~{{|xsvc`~}~|~|}]]fhghdcgglgbcceifjdek``]ubt^n^qdsan`rfvjw`r[oagam`o^j`gdsXd_lXebt`j`odeZd]i[]Zeclaeci]fU[\eXcY[\_`i`gZb`gW_ZbP[\bgd]^_^WZX__aZaZ]OPY\Y\[XZcRSPQZZ[\VW_\`aWX``]]U[^_`]Y^][VU[VVWYZ[UY]]ZZV`]\X\\a\YW_[_UYV^W^[c^]UVVZV]Y\X]WfUb[YNUSaY'!  zy{yxt_^}~~|~|zx^]qigcjojbiddeiagddijeemgfapZo`qexXlgs_p^oguZhepVi\icnalZf^h]l`m_lZfZiblU]]dWb_iZa^e`iX\^e[^Yfdg]c]__bab[[^`^d\bX]^`Y]U[Y\W_Z^[aTUU]XYW[aaY`^^VYZYY`[^Z]b_\YX_c_\][^\[_^\``^^Z\_a_c]VT^XZ]\^_[_X`]_]SL`X^TYTWQaZ]VWUcUWY^S[]\Z]ZXU]R^\YV,"!}|{ wxua_}~~|~{}a_hdhfaehejcihmgddkeaf`ba_ds_r_n_pas`mdpgscp^jaobo`kXg]g\fYd^gbnbqYgYd`e[a]ga^aldg_hS\Za`hbk]bXd]c[_\b^bZYZcX^^_X[Y_Y[`_X^XVSUY^YZY]]_\^QVW[^_]]XZ^b]^a_]Zbaa_\V`c[`YXW]YX]V`\YY]SWPa^Y_\Z^]`^VYUUUZZVd\]W]V`^UUc[[WZV_U`_`\UN]V\Y_X`Y[Xz)~}}ryuntYW~~}}|z~{y~|}|a_d`aciiglclmikgacfja`]cna_jygw_lcmesdmbu_l_j]kdp[h`jar[mbmfuej\fZeWf[fZe_kag`h^ffiT]^a[gaf\d_b[_U[Z]Y[Ze_`X]Yb^_[[YX\c\Z[`QWZ\[aXYZa^_Wa^_c]YZbd^][_[^Y[_^a[_^]]WX^Z[[OSZY\[XY_Y]^^X]Z^]a^^TZU_X^_XW[Z[Yb[\XZUb]YP[X\U_YWQXSYTh\`Z\W[T\Vz)##{{|~w{zwuqca~~}|{x~||~|``gbfhf]_dcdjfefafccheba_edWhaqav\mhvfrhrcu_qbnam`k]gem]iakVeZejjblbh^hZbWc`feo\X`mbfdg`fXcYa]daiSVU_X[V_W]\][dV]\c`[UZ_Y[_[cSZ^dWWW_X\_Z_[Y[W[^_Y^_]^]_]\]WS`YWX^`_^\YXW``UX\W`Zgb]X[Y]`W[]X]]]XWT^Y_[_\WV]YYS\]]R]S]UZU`[c[\U]T]YVTYT_U*~! |~uzyywx{n^[|}}{z~~|~YW~edecaeifj]fjhcekd]b_^_`seedv`qdvep\i\mhu\mls\mgp]nZl[hakVeXedlVc[i]c^hdn_iae]f_gYaX_]eR\\bY_VY]ba`ZcY`^cV\X_X]_^[dUZZ_SYabQYX^VXRZa`UWbbZ\[WRV\^XW^agd]Xa`\Vc\b_]_e[^_^^[]ZV_X\`WVc^\V[\XV^Y]WZYVS_]b^[Y]ZTT\W]UaS]Z\Uf]`Z_TbX\VXQZTb[YQ{,zy~z{svvlv_\~}}~~|}~~{aatiga^eibjegmedaedhja\b``Ycb[kao_qYkZn]jcq\hWm_hciai^j_h\i[h`m_gal`g`cfh^f\d`gYb^f\fW[^gbe`]``_d^g\d\]bg_a\aXYbc_a_dVYY^RXY^\]TYZURW\_Y\W\[^UWX]ba[V[_\^Z\\a_^\^_[Y\^WZ[XUYWa]b``bTT\UXY[XZWaZ`YXY\[bXa^[W_YZTVT]Y_WYTZV^Y`_XWbZ`[b]cZ[UZQx* w|}zxurzrj`_}~}{}}{~}{~ZWhedbdcbjgggebhfe`_a`bcbb\l`_`odu`qap^jZiZe^mcp_f[d^e`mbk`jYebl\m^cckZaZgUf]dcd^d[__fYgX\W^W]`a[aVZY_Y`]`bg\^_\`\[a[`_^Z^bg_\USeb[Xdc^cY[\YVYZ[_[]]ZZ^\Y]XY[^]UWX\\\T[[f]i_\\`Z_]^[_\^W`^]V[Y\[d\_]dbZT[YUU^VVR[UXSbUZUbZa]c\aTf^ZXaUYRaXaY|/ #"~}~~tvvqymda~~~~~|}}|b`ee^hhcfelifecgdajf`^ebccdb__Ys^l_n\n`uWe`nUe_h^pdkbpcj_l]icmdi[i`hVcY`_k_i]`V\]aVb^eYeX\Zb\dZ`acV_Y[X__c^X\`\_\][^\`_f_`_]WS^cYW\]YX`^d`^\XZab_aXVY]`Z\]_cbb]\YWa`ZY_[`a\[]X_`[V^ZZZ[Z`]XSge\U^[VX^W_U^WVV\XVR`X]U`_YVUP^U]UgaZW]Q[W]T_Xgc, ~! {|~qvorhb_~~~~||~{~|{~_^baghhi`af^aafdbf`cc`^aba^Zkdd^o]t^k^o^jZj]lao`lWeSgch`kXd\hYd\bZ`Zf\d\`agS]aj\_X^T`[_efZdU[PZZfbbT[^_Y]Y\V\\^\`UYWRWX\`a\W_\Y_\YX[XY]`b^^]\^\XY[`XZ][]\XXb_^^[WTU[Z[W_ahfW\cb]XZ[[XZ[XW[S[[WY_[]TXV`]]YZZ`[`ZYW]R\V^X\\_W\Vc^_X\RVPbZ`U\TdW}, {!!{v}zwyvtsm~[Z}~~|xv~}~~~{|z^]wdgfZjdhgge`ehd_j]ekc__]````cb]kZlVfak]mUb^l\mT_fnZeXe]dYdZcX[^dZb^a[cbkcda]`bhhUdad\_Y]\`Za^_]_[aN[\_\d[\_bPX]b[_Z`]]\bX[`_Y]^^[^WXUQ\]]``]XZfcXYYXZW\^_\_]^Z]Z]]ST]]\[UOcb`X_Ye^\]_]a^`Y_W_\XWdYZZ`ZYTXWb[`W^WhYXU]VbY_V_U[X_Q`ZYQVP[U[R]Tz0"} y!zwpvpnth`^~}{~~|~~~}}{{x~a`phaebibde[febech`cgkgX[beZ^]ncc_pWfXcZk[l_heo`j]oY`[a^b_i[i_hXcdk^hXeZaW]VfZd^b[ca_^b[`^d^f`dW]_dZ_[``c^c][ZZU]]_^a]bMS[_a]][RZb`W[[]\^]ZZVZS_^acc]b_db[Y`[]^[W_UX^`\ZU\ZcW\X^\_[d_ZYa^`[_^_XbVb[^^c^`Zic`W\]b]`XdW]ZXVaX\Ta\_W\V`Yc]UT\WaYbW~+}!y! xxttvllr`]}~}~}}|~}{|z{x~{~|}|\\ffbe\eegd[faca_Z^chb[cXb[hd^Y__S`YjcqSaXf\cYhXeXd_k\g^iWfZdYdZbWa_a]a[bX]U^Wc[cZbYaadac_d\_]dRYW]W\][`d_^\Z`_ZW_d\]^^UYbdca]Yb^Y]^`WYY\ZYWW__]V_W`Y^_]V^^_X]\^\bb[]_\a[`b]`]Ya[\[^\_Tc[d\a]bX^W^Xb^_X]YZ]\T]Z\\_[dZ]V^Y\Tf]`ZcYb[YT^Tb]WS^QcW}- {##""~|yxtptxmrl~ZX~|}{}z~||~}}|z~~{|{^\dgc_dc`fh`fd^aagd`be_]a^aY]Z]jed\nUdSg[i[l_jNbZd[hbh^hWbV^]f\c\aV_bf]aVbZcad`fU[ZbddVZY_YaW\]^^Z]cWZ_fX^\]Z]b^`]\]TXWXY^gf`aa][]SU^X\]UV[[]`a`_W\V^]_a[\XY]YWYb[WW^Z_[]X\Zb_[V[[\V\^`^]V_]]Y\Ydf`\b[VU`ZaZ[X_ZdW]VdZYUf_]Xb]aY\V_\ZYbX\TfZ]W[Wz!{$#zy|pwrnqmpg84za^wu~~}}~}}|{y}|~~|_]Ya_]hb`^deeid^Ufd`cb\]_]ZZ^VgX`_Sn\jWeWc[g_gVZWcXd]cXaV`U`YafhVbZf\g]c[`Tc^i`f\cW\Z^_e^`\^Y`\WZ_b^fg]YYZdb`\ZV__\[a`VXZ]^]^`\[_\]X\`X]XX[\\`TZVP__TVW]\T`Y_`c^]W^X]Xc\]Y^Xdahcb]aYXYaW^Y^RWX[R^^[Tc_d^aY^Sb\_Y]^c__X[U^\\W]XYW`\eZ\Uca^\XSbY]X},~!!{'%~ywytwpupm nf1)_:2`:1bB;z_\us}~~|~}~{~|~}z}{}|~}|y~~}]]z]h^ficdg`iaeibaaibhhac`\\b]Z]ajbaVfVfRaXd\fbmZf`f\eZfThZd^^V]Y^XeXb`e[a_`UYZbYc^eV`\`[]Y^WbaeXW`_dbcbZ^WV]`d^YW\[ab\Z^\__`cfa\]^_Y\aZZYWXZ\ch_ZWX`\a[^Z\^]Z]\\Wa]^_a]Z[\[WZfaaYc]UV\^b\df]W]Z\RTT`YaZ^]]W\V^[b[mcWO]U\U_WgY^Y[X]Sc\`X_YUR]S`[UO~+ {zrrquqsolid-$Y5.^:3Y<2Z72X72aEA~c`|z|y~~}~}{}z}|}{~~{}||{{y~}}{]]h`a_b^`dc\^ccaj``dddhWc_^][\`\V[gfWc^hVc^dT^WaWdR^V\TbVdY_T_Y_U[`kZ`\aYc[XXdZ\_b[a\^S_X\T[\bY\V[^_]a_]Z_XVbbZ\e^[cY^]]_^W][bWXZW^[_TUX]`ZY]_`X\\^_b_e]]\c^Z[c]`Z^[ba`a\\ZZXSXX^WYR]X^\_]b_\Z\YaZ[Yc[`Y_Y^U`Z_YZYXRgabRg`\VbS]VdZbW]Y_Z]XbXcY`Z`Y0#z |yw{|os fmrnd,&`=3a:5W9/[;2[93[9/\;5\>8hRLyfc}z}|}{~}{{y|zzxzx}{}|^\^b`e\cd\db``\f`eXfedbb_cZZ^Z_[^cwccXfY_PaYfP^XdUcZdYcT`T^\c\cV`WbU`\^\fZbX`Y]WZ[`[_Z[[_Z_[`\^[[T\YZ\]SY_`^[\]b`VX\\\ZY[[]]]X]a\Z[VUXV^__\_\VW\[b\Y^da\]lb_da\^\```Zb\\\`Yd]\Y^\a[a`aZXP`]^^^]aX]R`Z_^c_^VaZbTb^aU`Z^Yi`[SdZZQd\aY\\ZT\[\Yc]]O^S[R~'y! ~vzvyywsk rnh^,(Z;4Y<3[B=Z:3Y70`=6Y70]7/V5.Z5-Z3.pUP|mk}{}{}~|~|}{{{~}~|{~XUZddZa_afc`^ebdf_d^fccZdd``Y[\X^XcecQ_VdXcXfU`Tb[`Uf]d[`UfV`YaS]V[_d]`Z\YbXY^a\]ZX\_\_]_]`Z^[a[^QWXZ`aZZ\bb\[]YWWXYZ\Y]XZ]_\_]]Y][_bXT]^cY^\hcY^cYWVaa]XZ`\\d]e]\\YW]Ya`_^^bdaYY_[^`]Wc\ga`ZZUdXd_a``^]VaZ\\\W`YVSbY`Q^Y\V^_fW[\[Tg\ZTi_]T^T_XbY`Y~-{"!yz~|uwopkqieh,(]5,U6/]6.]93\=3X80b=8]3)a=8^?9];4Z;4Z2-Q61jROli}z~~||z}|~{~|zy{zxw_]\T][b\dg_c`b`]^ce_[_\]W`e_Z]V[b^^o]\\gWgYeUa[fVcYeW`VaP^XXP_Z\]bV_^dWdZb\^]]YbZeXZ\\W^ZXW^YVX___RX\_\Zdf[X\]WXUUXZY\WXZ]\[b]UT\^XVYZ[[Y]``]^cc`\_Z_W^ZY^`[_WaYa][[a\b]YZc[edWV][^[\Zc\ZT]^ZS_Y\Vb[^Z[XdZ`[^Y^Ye[bX^We_g[ZS`[]P`]^Qfb^VbT`YaY]VaV^Q|(~y }w('{uussnopjf\* V;3[93^91U?6U8.]61Y;4[61X82Y92_;4]<7T73^:3U4+W2-_=:t]Zrp~}{}}|~|}|}{}z|y\[s\\^V^^\^`afbea_e]acYf`c\`a^`\[aZ_[\\¬įðǶ¯XcTaO]RYU`ReZ_]eU_Z_Y_[ba[_b^c]`V\_a\[Z_b\Y__c\^Z`V\[\``[[XX[_`Y\ZX[PR]\[^\\\`[XZZfd`XZ\W]^\]ZYZa[WWVU[abY^[_ZYWb[]U]Yb[h^b\\[a^_^[Ub_]Z[Q\T^[d\d^b_e`^Ze`bbb\[XYW][bW`X`V_Y\T[XXU][`^_YbW\VbZ`YXQb[ZS^S`S_Zc]-~}"!y yy{{rqshilk]!^;5U9*X92\>4Z=2a?5U7.W:5^;2Y4/[=5]6/X82\=7Y:2Z:5X6/W60S2,`B=s[Yrq}{~~yw|z~|~||{^^l^_b\`af^X\`_fa^]ha]f_`]]b`\\_fYc\\ped¨ı°ȳǰɴŲűʷǶʶʷɶȴʷɺʷ̺Ųɷͽʹ˶ɶ̺ʻƵϽ˻̺ǷʹпǴǴȸ˷ƶ®W`V^V[U_TaXbcfWeU]Xc]^]ba_[`_a_cYdWaWYUW_`]_Y\ZWa_`]ac[]adX]`^]]]_`]WY[ZbbTV]_]WXX\U]\`^`][^XZacZ^\\b\`^cbYZ^[\X\]b__Y]\\U_^a_][[Z^[[V`^d`]^`X`^aXaa_We^WVWRc\d]`Z`\ZTVT_\b`c[_W`W`\]T]T[T_Y_ZZPbW_XmbXT`QbYfXw)})({""tx|zqyqlgnpf_)%[>7^<3V:4W93V60W;4X?7^:3_;4V5/T:2I3.T50X4.X62^71T72V6/U;4S84R/(S3)cGByb^tq|~}ZZ`[Z``]][[aa^^^agc[bf_ea^_Y`TY_ZU[^YVbb©¬ëëƮįDZƱưȴ̶ǯdzϹ˳ɳζϸʳȱɴƱȱɴͺɸɵͻɶμ˳̺ʸ̹θɴ̺ȷʸ˷κ̹ɺ̵Ƿ̹ȷ̷̷Ϻͼ˻ͼ̺Ͻ̻˻ɶɸƵƶʷν̼ξɹʺɻͼʽ̻̾ξǷɹɺ[_T_Q`SdYcakT]Ye`faiZa]a\b\a[_[]\e\Y_^\gTYXXZ]\bZ]^\ff^WYVXS[^QV][[UdbVZ_\e_X]V[_]XT_^^`_^`_ZZ_Y_U`^ZZa^a]ZW^^_\c`_`]\kaZ[ZWZUea_[c\geg]`]\X^Y^\cX]VcYZY][a[\U\WZUa\`P`Yb_b]`Y[\b\cZYY^[li\TbXZP_Y`XbW`RfY`[^Ty-y z}|%%rqqpniaia^.(];6_;2W8/Z@8X=5YA:T0*\72]6/W60]>7P3-T63X83X92N-#[7/W3,T3,S1&V2-X3-W62T61Y;6bJFtebzx}|][W^Z^bX`Z[^b^bb^_bc_ca^^`[^_a\`]V_[\Zxcb§çèĩƫȯūȫʱǰƭɱŬ̸íƭʭ˴ʰ͵Ȱ˲ʲëƯκʶ̵̷ɳɲ̵˸ɲ̲ȱůdzθɴɶкȱ͸ʶ͸dzǰ͹νʷλ˷нηʵʸͺ˷Ͷ˸̸̺ɵ̷ʴɱ˷ͺ̸Ŵʸdzμо̵̺ͺ˹ƴƵ˺ȵ˹ͻɶɶϾȹ̺Ǵоɸ̼˺̼̽λʻɷɷ˼ɼ˼ʾ˸ɼ˾ɺ[cZf[cS^ddVaU\X\Y^W[\`Ya[[^`W\_`X]^]`]\ba\Z_[]]^_Y`_addbUX`_bf\WZ^_\^`Z[\YSTb\[TYX^Za^\X][\UZ[]^\[b]ZV\X\]f`YV_]_^`\f^[ZTTa]g\ZT_Zbab[]Tc]\[gac[c_g^\W`X]U_XaWZY_Yb^ZYaY]V\TaYeabag^b[^Ta]_Ue_aS`Wg_`W^UYO]X`[|/'~~#"}$#}v |npgjjkfZ'#Y=5S<0[;2W6,W6/T7/V70P4.T4,R50X0+W80S80T:3S80U80V5,L/&U61Q0,Z=6Y30Q1*N1*U61Q-(S4.K-(`NKmHFYZYWZ^ba\_`fZ_]f_^jd``_Z[[Y[ZXXa]\`\fbautWUȰŪ˲ŬʰɮȳǭǮƮ˹ƬɵͳʰͲǰʳȭɴƩɷ͹ƯɰʵɴưŮȰ˴ȵηȰ˵ȴŮɵ˴ɳųȴʴ˶˸̴Ǵ˷˸Ϻʸ͹ɵǶ̶ʹͺ˵ɴ̷̶Ǵ˻ǵͺǶ͹̺̺ʹ͹ɷ˺ȷȷɸ̺Ͼȶ˸ůͼ̼νοͼɵͻ̹ȹо˻˸ȸʻȸʻν̾˻ųɶ̼̻ǵͽǺ˿ɻʺǹɷʺʺʻŶõXeYdX\WfQ^YbX\^iZ]Za\_Y_^d[_\b[XZS\\\``^ZYQX\^Y][Yc_]_]]]]\\WYZVW[Z`b^_Y[Xa[^Z\X`\`]]]UQ^`b_ZX]YYV[X]\`[f]_Yab_Xd`][_\faaVb^b\`_YXa][VaT]X[Yh^d\b]^Zd]aZ`Sa]`X_^[Z\W[VbX`[^SbZZRaTZT`Y_Y_Wj_]YbXbWd^^]_U\QbT`Vy2!!y x"!{z t!rrusokj e\'$T:1[>5V6/\:4[81Y5,[=7[3.W;0Z7/`<1Y94S-'Q5/U5/Z94Z1)V.(T75W82Q92R2.U3/Q-%Q-'M.(Q/*L/)Q2.GWX`\Y[__[]bh__b]\b`ca`ebVZ_UZ^YbU[_]er]\vu\Yūŭŭǯ˴ưɴDzȯʴDZȬʲǰȲθȳ˵˳Ȳɯ͸ʸʶůʴȯɳǵɶDz̷Űȳ϶IJ˴ʲɹ̶ɶʶϹŴȱ̹ɶͺʷȴɶҽɴɹɵ̹ʶν͹˹˹ɵ˹˸ȶʸμǵȵ͹ξǵȸŵ̺κǴ˺μʹɵȵɺǸȹ̾Ƿ˸ʺȴȹȷʻ˺ɻ̻ĵʹʹɶοȷ˻ǶʺǹɹʻɸʺʻȹƷȹķ˿ȹʼSe^g]aUaYeZ`[]bfXaY`Y_bc_bbe`a_]^_YY^a^Z[]ab_b\b\]]]]X[Z`]^[X]Z^Y^`^_[c]b_[^XZZXWZ]X_\d`a_VS_^^]_W`c]\c]cb[[e_bY^`]\i`c^_\dba\i_`^_\]Xe]]Xa[]X``_bgdg[f__[]Wc[aYd`f\_\aSb\`ZYPbU`XaY\U`\\U^UbW]Z_Y`WcZ`X^U`Y[U/"| |$#~%$u rvsn!jirela +]*&U8-W<2W:4_A9S81\95V=9U70U3*[<4T82Y:3Z3/Q60W81U>7N5.N2+S/(I2-V70W7-W61Q1+T,)P2.R50Q3-G2.N!\V]]^Y`]]^dbZa]_]`e[aa[Y^[ZW[_^^^]c_]`edts URƫǮǮȯƮʲưȯ˳ȱ̴˵DzƯǯɴɲȯȵ͹˶ɷɴ˲ȲȲȳ˲DzǮζ̺͹̻ɶIJɷȷ˷˶Ŵ˸ȴȷͺ˶DZ˸˶˸ȱʷȵʶͺŲ˹ʵɵ˹˸˷˷ɸɶǸɹȷʹɸɵ˻̶ʼ˹˺˽ɷɵȺ̼ȷ͹ɸ;ȷʺǺʷ̻ʼȸɻ̹ɹȷȹǶȺ̾Ƿʺʽ̻;˽˿Ĵɻ·Ƚǹ̼;ǻǻǺygp:biZg[b\^\e_d[\[]\^]aVbid]\_W\a`_]]ZY^bc[ZY``cc`__`XZXUa^]d[\`b[Za]cbe\\Y][``_XTU][ZW^Yg_c^`ab``_`\_\f`h``__]Z[eeh`d_][]Wdb`\e_bWYW_[_Y`^`Z[T`Y]Y^[\Yb]^T]UdZ_\]]c^gYa]`\_VaW_X[Xa]cZg^`[i]b[d``S`Xhag^ia{2#} | x"!stvsp pgkg ba\,'Q80Y<2S2*U5-X=5T7/T3,X:3W72W<6[?8Q1)T61N*!U1+S:4U5-W4+V3/Q1(T4.S-)N95Q0+L4,S70D*#M0)K5,H!MRYR^\U\b`b`\__`^\abY\]c]YUZ^ZU^[[ah_emcbsr SOƬǬīʵƯɲŬȲʱ˶ɳİDzʴǮȲɳʵͷ̴ʵǵɱɳDz˷Ƴűʷƴǰűͷʷʴǯʵ˵ȳűůʷ̹ȵ̵ǶʴͽʸȵDZ˺ͺϺɷǶʷξ˼ȳ˹˻ʳ̹ȵʽʺȷ˺̸Ͼó˹ƺνɺ˺˼ɷ˼³̼ʸɺʸȸȺ̻̿˻ĵο˼ǶƵʻʺȸƶ˼ǹ̺ȻǷʺ˺õʺʹƶʼ˽ʽǺŹʻȺʾɹȻķs^h'S[\_^`bg^`]]^a\]TZ`b[beh\]\bbcdX`[b^Z]SWQYXZh]XU^Z`^f[^X]Y_Y^^aaf_aXac\Q\XY[][ZWb\_`YZ\Vhad``Xe^^[eag`d[d_e]]ZibfddaZVh^dX^Z\Z_]]^b`^[[T[Yi`jcbYf^_[g[ZScYg]aS]QdZaVa_[[e[aVg\^VfV`V`Xc\dZa\]Y^V`Wz/#!{##|sw!!proggekfeY( X;3R0']>6V4+R94Q71X81W?6S3)V92Q7/T3+P1,Y93S4-U0*M1)P4/W83Z5-U60Q/*Q2+P1+O,(I1.M0+L2.D)$FSX`[[a^Ya]bfb`[\`]ZZ]^d^\_a[\a^\b_`Wab\aasqMLçƮ̶ȲɷǭɱƮɴȲ˶ɴǰDZưƳ̵ȰĴƳıɱͷʶȲȳʴ̷˹ɵ̼ʷʸǷǴɶɷɸȶ˶ʷȷDZ˺ͺȳñλȸȵǴ±ʸ˹ȸijƴǶ͸ͺͼɺ˻ƶ˻Ĵʸȸ˸ɹɻ̽ǸƴŵǸ̿̾̽ɺƸƶǷɶǶ̻˽ȼ˻Ƕ̼̼ǸʽƸĵ˼ǸĵʾʽȹµɸʼͿʾɼɾɻȼ³óȼɻŷȻɼƹʽĴ~b^a[db_Zdbc[WY^\^][bc^^YV]_ff`[`b\`aab^^^ede_^^c]`[e_ka]X[Za\W[c\US\T`^[T`W\^hgb^f_fbaU`]b`d_feb[\V_Yc^YSb\d\^Wc^kc]V`]_\[Vb]_Tc]d\d]e_kac[d]]SeabYb]f_^W_Zfdd^e^d_a`iYdbbUcZ[Q`SaX\T_WdYcVZSaU|,%|{v" y$#ys! mjqcflacZ,'U=3X:3U7/Y;3X>3O5,^7,Q7.V>4W:3O3-W92P2/V2/R;3U53Z72V63R81I2.Y=:T4.K+&N0'I+!S0*Q82L.(M,(M&#PV\\YYYYYY^ZZ^\^\bf]Z^^^[c^VU[XY_\_[Y_\pa`zzKJưʲĭʶêȳɴ˲ųƱȳʷȳDzȱʳƳȳȳŲƲǵʴͺȴɷʵȸĴ̹ƴɹȷȵɶ̺Dz˶ʷƵǶ˶ͺʹȵƴ˼ѿʷɹ˶òŵ˼ȶɺ̸˸ɴʹ̼ɺɹɷ˼ʺƴĶ˻ȸƷ˺ǹʻŵô˾ʷɼɸȹǺνȺɺʻȻο˹ƵĴźǷʻŴ˻ɽɻ̽ŸƻƹŷŷʻȼȽǺɺȽ˾ȼƺǺŹȾƺƻ·ȻǻtuOda]a`__^YXabc^ie[]][_[gaia^[]^ea`]b]\Ya^a]ZX\Vg`]X_ab^`XaZc]^[cZecb^b\`\`Zc^c[_[c\_]aYa\eYb^a[`U^Wb]d^bZe^a^c^h\`\g`f_[Xe^c\f_^WZVf_`Ybb]Q]W[VbVe^bW`X_To_dZcZbXd[\Tf_c[e``ZfZYQja_ZcY[Q5'xz! tx"!t" plm! r""gfe_ b[0'U2*S:.P82O;4Z=7N5-Z5.\94\72R3(T6.[61Z:1J1)X83U61S5,W82R5/T70P7/R63N1,M5.S2)P1-Q82M0*F.(G$"KTXOZ[[aYY_^a`cY`_`_b]\U`Y[T_[VS\WWbb[W^edutJJ®ʵʶȯʶƳŰŰǰȴưıȲɵŰIJíʷȲĮƲǵȱȵDz̸ɸйƲȶǵDZ˺ƳDz˹dzʷŲɷųʶɸɷͼȶƲɵŵȶǷƸɻǴɳǶ̺Ÿŵȸȷɷ˺ǴɹʼǸ÷ȺʺʿʾƷιŸǹʹŷŶʺɻ¿ƵɹȺ˺Ϳȼʻ˽ʾ˾˺ǻķʻʺǷµʼ˻Ƿ˿ɶȼ̾ĸȺĶŷǶǸǺɻǼƻǽ˾ǻǼɺŹǹŶĺ}ntGca^a^c\_aa]\]Z`^]_d^_]ZWb^ca`Z\ZaY``c^][[V\Z_^_]^]hb\W`]__hc^Xe\bad]`Xa]bae]a^aYe\`Zc_e\j[cXc]b\eb^ZgZdbb_\[^U^ZYSb]bW`Z`Z^]c]c\i]c_eae__WbYcZbXjag^`T`Z^Xf_d\^UaXg\b\g\`[eZ_U`[jcw0"|"!~.-z%!}%$vnu!!mgfdh]d]-'U60]?7U81Z;4SB9P6.W7/S3.V:3I0'O3-U4.N2+S<2C+ X;5W72U-)R2+P1,W0*O2,I)%N3,P("D-&I*%I1)I5/G#PS]T^UZW\^[_ZUZ]X]ad]`_[X][]\^TZ`Z\_iWZbt`_wuCCǴƱDZ˲ȴɶ˵ȳƱĮȷ¬dzIJɵĵŲDZưɯʸıȸƱijǵ˺Ȳ͸ƵƲIJȷ˺Ƹ˹ʶŵȶƳűȴȸʸνǷȸǸȸ̼Ⱥŵɹͽ˼ĴȷͻõƷŶʹɺĵýǶɷǷȹǸǷʼǸȸʺʼɺȺʸȻķŴɻͽʻɹȶƹ˽ŸɽŶǺȸȽȸŹǸǷ̿ķɽ̼ǷŶʿǹʼǻƺµƹŹǻźƺǽȽŸ¸ȽǼʻȺ¶Żukg3[^bbddfa`^_\a\YY]Zha][b`b`][]\`Z_Xf_aTd\^Sdah_a_e_\YbZ`\`\aZc_`]^V_Wba]]ia`W^Yc]`^^R\V`\jbgba\[Se_h_bW`]c`a^hac]e``Vf^hcc^i^b\e\bXd[aYf_jbf\_[_Wg^hZf_YQcZf[f_cYi_e^XQ_[h^d^u/%y%$y((t~#"s r&%rqklf_c` V*&W92S7/O61T81U<3O1-S>5W=5]80P70Q71S?6S5.U7/Q30V80P1,H-&P3,I/)L4.G1*P1,Q1,P7/L3.I30I.*D0*<SXW[Y]cbe[ZdZW[[f_Zb_]Z^YW]YV\Y\XXXW^Z^[_gewu~?<ǯDzȴƱįųưðʷůɳ̸ɵǵűð˸°ƳŴƳŰ¯ȵɷƵDzðƳƶǷıʺȴ˷ͼɷȷɵɸɶƴȷʵ˶ŵĵ͸ͻȸĴɷǶǷȸ;ɻǷ˽Ƶȶʺ˹ͿͺοȸʾǼǷɻǶɸô̽ȼȻʹƴǸɺɹʻɻǹɺɻǹȹɼôƸɾǻŸǻ̿ʺȷŹȻĹƸȻȾµŻĸǺ|wtxpmpi\[ee`_][cc_^^^ebX[X\g`c\b[b_da`^_\b\g`d]d][]`Za_]U[SbXb\d^i`][aZc_bXh_haf_h^`cd`\\`]e\bbh]i[ia_]d^b]_Zkah_f[a^c]a[bUg[`\_Vd[gcaYh^^]k^i_jaf^bZfbh\g\c^faaZaXg]jdbZe\bX]U][c\1&|%$z  {$$vp pjol! dfaaX*#T=3W8/W:3W70U92Q1*P1+X61T6/T3-U7/Y+'T81G/(L8.N/)K/(O1,S-)N5/U5.O0*P+(O/,M30J1+J0,F*&E)%@STTTWZYWY_Z\^WYYa[b]^^YZYQc\YWWP`^\_]^b\cx``ts~}B@ưƯǬư¯ɳǴǴɲɳȲòƴ̺ƲȷɷǴƴǷȷʸƳǷdzǷȷȵƵȵʼƴʹƵȸȸĴ¯Ŷȶɺƶɺƶ˽Ĵȶɽ˾ŴŸȶʹŵȺǸɼòǷǻȸʻǻɹʾȺĶɸɼƹŸƷɼ¶ƷɺõǻͿôŷ}zpxnr{roro]^XNRMMPM(><64,,$!.+1.20.,(&,(*&32-+31/-210/.,1.1.--("94b`XXgfdZfdgc_[bYYYd`c`d]\`ba]Zfahh_]fZc]e^XN[YaZh^f`bZkeka`Zc]gedZg^e`c`_Vfelhb^h^ha_Y_Xf]d\h_`Z_[a]h_j_a][Wd]g]g^j`jbb[e[`Yecg^cVnedZk`_Xb\f`gaf^iacVe\e\cZd[`R`[h`]T^X_Vi[&|! ))x!w tsmojjeda_V.)Q3/V:0T81S7-W<4V71Q3,U71W;4S50Q>8Q61P/)P/(Q3,R4.S6.P3-I0&P/)O4-J.$P-(V2-L/*Q2,L4,H2*E0)L'#LSUT\XY][]^[][[_T]a\]Z\]SQTX\\^UYX^`_^R_b\dcpn~~87̷ȵȷǶƲǸƸƷƴʶŵ̷ȳdzȶǶɺDZɹǸİŴɷƶŲƵƸϾǵƷŴɹǶijȵȴ˽ȷȵŶķͻʺ̿˻ǷɷǹǷŷɹȷĶ´|uwvunsmXaXTcZT]W=ID&72''('+)31)()(2.'&'&""0//.)'$--/-++//+(%$%%,,.+,*-,&-+2//+/.55/.,,55.,)((','-,**20-*-(**44+(,+3220,,\\h``[e_ZZc`nfdba]c^e\\\j`_[e`^Z]Ue\``aZdbdag_fcb[`[g]bahbf^c[jbjda^a\gchcf`feb^h`dZaXf\a^c_b\a_j_]Th`c[f^c]c[d]j[e]e`jac\b`i_aYj]e[jZ`YcZaZe\^ZcX`WcZkai[aZh^fZj_f]`Xi\eZ_Rq,x((uynpo qlm iad[]]1-T<4T3-T81Y71P?7R92V:5S71S81S82V7.X75T60T70O/)Q6/[:4S>9S6,P7/M4,U:2K3.L2*M1*L3.I+&H.*D,&BNMWZSWXW\bZ[]`]]_Y`Z]ZYY]SWe^VZXcc\[ZT\`aZx^^wu}w|65DZɹĵŴƳʵȷɹȺdzĵɷǸȶʹƴʹȹǵǸȵŵƵij²|}v|spynhoe]h_LVN=F@/86$$ ((($&%'&(&!&$''+*(%&%'&"$!1,!!)($#+(&%)'##00&$$",))%20.,,)''+%((*(-,,,***) %$--#!''0-&&0.30)).++*64-*++4/#!2++(2153,*$!8864/,106532-,0/30]Yc]aYidki`Z\Wcbbb]_cad`a\^XigaYe[f`fccVa`e]dZb]][hb`Ze]ib`]eaed_^e_bYbac[faaaf`b\j``_iae`c\g]f]b[dae`eZf_bThaaXe^`WfXjcYXaWf`e\_Wa[_Wf[k_b\m`j`g\i_g^bXb[g^g_dWfacWj^eWgXf[w- y+'}##w'&x##l!!m! njfjf][][/+T7.X;5Q41Q71W93Q4-T80Q/'S4.W83W71U72R4-Q4/K1+R50V2+O1+L0*Q3/N-(L1,M/,K0)G,'L0)J6-L2-J.*L' QMVWU]TU[Y]X[ba^\Z][`bWWRY[WZZ\[[Y\`UZfY^a^cbutxy4{2}~|yttyoptnaqbYcXFOE0:6.& $"  $#!!!(%'%'&%#)(%%!+%$##" $ ,,'#$ '$ )&! %%('!$ $"('1/)'%#%$('&%)'%%#+&0/.*&&*),)$!&&'%&%%"-,'%-*)))',,55!!0.+)##'%2,$#11'&*(2140)&'%(('&43 /-+(//,(/+/-4263*(3211))302/-+^] +^Z_]f^a^_[aYc^ZVjf`\^WcZ`\e[gab[hckcd`_Vidb^b\hbhb`^_X`_f]e]_[lb`Yeak]e\g]iefbf_c_jeaYa]`Sf`g`ibcZna_XcYc]f]jambfcbYf_dbic^We[hZh]h^cZd_f`k``]`UcYj`bZh\e^fbg^l`kZd[bVhZbX}3+x%$w&&|**p'&u$"ohlplg_e[R'!L6-P3-V3,[<7S4,V;6Y80Y72U:3X<6L5.M6/R4-M.'R5-T82Q/)S5/F/(S62I1,R61L3.P60M-%P1+J3/M4/G7/D# KTPTSZ]ZZ^W^_cZ^]^\[W[^VVWYWSXW^aZU[]_Z\^f[z_^tr~z v{| Y!   $#! #" " $#))#!!-,$ $#&$"'"" &$&$))'#((('*( &!--"!&#)(+(*'$#,+$#$!+(31##'&'#+*&#!!"!74$#22,)%"21'%*),)00))%#(%%"31($/-53540-//'%.+1.-,++-+1.-,.*(%<;+*'&,*.*43/.4222..%#1*;8,)00?=`^ZSb`ibgcYXb[[]b_f^c_icb[_Y[\d\^X`\^Ye^kacZ_bf]b[c^h\aYf_jcdbeb`^jcj_a]f]gbf`g_g[c]l^f]j_pib`g^g`bWfebY^Yh_f]c`g_\\k_gaee_Yf]h^eec^j_cZebbZda]U_TaVe^gYg^d\aYhYi^bYhSmcg^cXy0$} z,*q"!sw$#njthkb^` aR'&W4-S<2Y5-Q70V81M3+V8/Q:2N.(O6+R1+V?:O6/R3,O4.U83Q8-Q3/P62M82U2,M62N7.L2-K2,G3,K62G2,G3,C"ITWVVY]\WVY[[[^ZYU\Y\b[W^SVURV\X\^XQ_g]ab_^_dcvuwwY!"!&!!"!#""!'$#"% #"%$)(!"!! #"%"#""! ,*)'''&#"%% " %%$#! '$.+'#-(&&.,"!(#-*&#%#210,+*-,%"(&%#($0043&&)#((21//(',,,*.-0,**-)-,&%6431+*--4-&%41-,6453--0/52-,,*0,,*41+*1-c] cbfcc\dbd^c`c]hcc_d^`Yh]hbgc]Xh`a]^XcX^Yc_c_d^abhcidkab\dZlbc_k^hdbZiddY^Yjb^[fZf][Xe]g`fZf]ibf_e^cYg\gZk`k^\VdZcYf_e[g_jbeYf\`Zf]e]e_j^f\c^_^d_pgeUg^a\e\j`aZbUha`Yf__U`Pr/x+){%$mz)'o u"!se"nfda]_X+&W2,O;4V;3R<4O4-Q81O5)M/&N2*M2+O3)N1)S92P60K0,O4/V5.P81N6.M0+P5/L)!N1,K1)H3*H1,F2,G)!I,&D" PVRWYSW^W\`X\[^XYW[S]Za[Y[VWSVZWS[aa[_`bf_aetbaqq~xv%{%v ]! #!!  &%!#!! $"#"&%(&&&))$%#%"$!%$"!(' " !'$$ $ &&$!#"#!!!)%-,! %#,()''%.*(&&&%$+)(% +))()(*%-*&#$$.,'$33$#.--,/- *$)$320,*&& 54+*'&)()'2//.*&+*643/202.32)).-.-+*+)0+2/,*64/+21..65(':9100.f^caa]faaZc`k`g_idd^ncg]gch]fch_c]a\g[gaeahchacWf^[[d^^Yg^gZbYvogbb^e\i`g[hbf^f_^Sc[j]l_iakbc^b]k`kfd]bZk`k^a\bZid`[ibfd_Wc[h_eZc\h[c]g^f`gac\kbeYd]jbfXh_j^kabXl_f_bTcZj\`[y1"|+)qr$#|$$r iqn gic\`[Q(!N/*P6/R4,O:/M4,T91P.&R4-G3+X72S50U82Q6+U5-S95X50J3.P0*O.'N3.K3/N2+P2,D0*O4-I/+H0'B)#A+%D+&AMTTZ]VR_WYS^cVVZ\XY[^`]U_]Z\[V[`aYb]_bdXaWg\aayw}|~}xxb # !  '$"#"$" #!"% !  "!%%" &"%$!#! %#! %"$#-*&%*'--'&$#+)&%"! !!'&!,+)(/***++.-''!.-.**(*'1/ $"%#..*(0.)'+)+)&&%#,+%!+'+)*'220-2/)(% 21*(&$((11/,%#)(53108655*'00300/0.0-54/+21?>1.;91-e\id][__b]h_a_gad^fadZi_i_fa^Ui`i`]UbWg]fbh_h_c\e_j\fbbZaVe[^Wb]\Xh[mbnbf_eah]gcd\g`kad\b[c\k_g\iel`kcg^f\`Xi`f\`[fc^Zj_maebh_cW_TdVf]cYkdcXh\icgZbZg[bYbXi]bXi\kbeTh``TcViXz9*,,z,*u/.q*)oscn_ec[b^U+%Q<4O0)R?3T6-T72W3+Q82P4/S80P/)N8/S:1O5.S;4O4/P2-M60K1-M2,P4*R1*J/(H.%O4.G.)I3-J2,H/*I82D%"NNPOWWT\XZYZa_^_a\Q\\__[TXZYaW[Z__XWZa]ZZWdbcs\[vuz}wc "! %#'"!! *$$# &%!$ %$! ''##"!'%(''% (%" '$&&#('.-++ ( %#'&*'(%((&$)%$!,'0.",*'$-),(('/,!!,+('20)$**"++30-+#"++0-1,#!/*)&)%+*$"313/,*-+41$(&431/1/1*0/40+**(::(%=<98,)++0/)$0.<:1-773/e`dbda`]fd_Zf]kfb\kdd]kc^Zi_hbl^dXa[he^\c[bZ`Zf`ndf_bWkcgYhag\h_`\a]i^f]d\g_fbe]e_m`[Sdag`e]f_kbjae]f[e`k_kcjaa^ibeZc]d^g_gccXkgjdiafblegZlef\`\h]iag\e^ncf`b]hadWeWeW^Sd[j_{5!w'&r%%w&&kp""m(&l##ijed`!!_^Q&!V92W9/S:0X71J4/U;4R81T90Y92L-%W:1M5.M1-S62S3,K0,P80O73G1*N-'P5/K0-J0)E/)J,&J,'C1)H4-?%E)%JHPXSTWVSZWWX^VZ\\\VU]ZZVXbU[U\UZZ[X]Ybb_YUd]]dcsr!!~}wye!  $"!  "&#&%##++,*%#$!))&%%$'$$""! #"" '&#%$&$#!%# *&&%# ))/.'#+) *(!%%+*-(--*),()$..)%(%$#..# *))(&$0-((51-*1142-+++*'54'''''$/.//*$415421..-,-+0.*)107476+*1-;953+)--31.,41**113042*(-,//64a]f_gbeboca[d\bZfak`pg_\f\i]jcjd__lbeZf^e`hddYd`g_b_jbe^j_hbiefXechbcaldc^m`jZbYg]g]e_kgdZd[jcgaf^l`f`j\h_h`h^pdg\f^pid^c]a[j_lah`i^c\b]jbj_fZ^XiZldcZd[g\fYj_`RhZf]h^`VcYbRw0%{((y$#w%$v&%r%$mne gcb___X)&M>7S7/T80L0(U=6L50Q3)T;4S60P70Q4+N83P:1F1*G,#Q3.R1,G1+K.%K1)L/*B.%G41K0,G*#N2,H1,C)!F.+ILNWVQURVXd]V[XT^VXZ^`^X[TUY\Y\X^X^[[`X[aa_]ea``^ttz{z\"""! "!$!! !%!%#+*)(####$#$!(#"!" %'%"!"$#!'$$#*(/-&$*',)&&'&)'+'*( 20/-$"&%--.'))'')&((!!65! %#-+*)$$*((&*%++)(++$#.,+(&&+&))/-55-+)(0-*)('3/*((%*)--)(98200/></.+)**-***0.,)-(,,*)*()(-,.,-,51.+;:6271//^] abfb`Ygbf^e`cchff]f\f]lcean`a]g`c\i^e^d^fafYi^h^iba\fegci`lfi_kaf`c[keg[fbh\j_jbmef^h^f]k[fXgah^kbfce\jdd]f\g_c[lagcdZh_`Uh]iXfYbZkcfZi\ncd[k`gapdj_bTg]pghXi\i]i]j^l_f^e\|3#z,(v!v)&l!q)'lijedd[\[V'"T91Q/*M81R2+Q82R71K<3R81Q82O2+J6+R3)K/*R5/O80O5-P.*G/#L71A3(M/(M4.K+&N1-J3-P1.M51E.+G0+@LOUPYZWYWX[bX^YW]YdX_Y\V]VPZOYSYWiTa\````[_Yg_vdcts%z%{wxd "($! #" " ! "!$#*($#$#&%%%!'$!!'#((-*! ! ,+$#! ! %$!$"!% '&,+&)('$%$$ "!)'0+'$,*-, %$,+0,3/(( #"'%//.)+*($$"'#))0074*('&,++))(%$.,/-.*-,)$.+2066532031310-+%10/,*&.,1-43:711.-54'%64752163520-cYf_^Y_Uh`c^a^kbib^Xebf\f_g`lda^h^e_obg_j\ibg`d]hcd]_VladZgam^j`i\kee[e[fdtgb[f[ibpflhg]c[d_fcnab[g\d_mdkeh_kdb]gai_j]ibi^kafZd]gckccWf\dZeZe\fZmb_VeZ_Vh^h^hXeYg]h[gZbWkec[t6&wv-*x'%r%#p%$fg#!g!!b_b\`TR-&R5.Q60L5.K6.O0)T4,O91W:1J1*M6-P93N8.L/(L/&S4-H;3O6/F("S1-K1*E*'I0*L2-G*%F/)G3*A)$@)"J5.?JRQOYWU\YWUO[V]XS[\XYXWaTUORTYT^WT]]^_\haZ`]__xbbxv~{ x w Y"!$! "!#!-+$# # )'$#$" # ""%"($$$)(%#$#! ,&*(%"/,#"((,*& )&0/,+'#""*)0.(&,+)$,*75*)--''2/))+)-,2/,(&$1/%%%-,% -*'$*(9866.+-,.,201.0/'%,*(%51'%0/0/6511,+/.4342/./*4/1/:8*'74.+41++;8b^b`e[k`e_ied^jba\lbbXh^ndf^hci`ndl`g[h`j`g]kejaiaickfjdj_pdjff^l_e^i`i]d^lde_f\f]g`f[i_fci`iakbi\jbf]dZlcm`c\`Wc[pdma`XgWj`g^nfnegYd\kcd[ndibk[iaeWk_dZlce_fYfZj_lbpdogfZk\y9 x%%t'&qj&%l&$p&%eeea\^Y\\*$O;1P:3R90P1,P71T82O50L1+M0'K5.R2)O1*M0)U3-J2(J/(M-)W72O/+E0*E/#F/(L3-H0-H6/M,%>2-D'$G0(BKIRRPVPVXYW[_YXY`VZ_U\^SWYWUWZ[Z[[^_Y\a[b\dd\`xcbut~|}}{z`$ !"" !#!(%# ! !$"" !#!% &&" "##**! %"%%&&)''%(&&%&%% #!)&&!(# "")&/.10+())+&$$*'20%%&$.%1.,)0/!!.-&"'&))0.&%00++--++,+*)'&++%"&$1/+'('84)(0//-0/*)2.,*,,..44+'&&/-0)1054(&! +*531-/,1065<;979642/*;9.+.-::55ef i^jaj_g`g\eadbf^e`fYkdkccaeae^k_f\ibgbmad]k]mcecaZjej`eZgbi[fbg\jahbh_kbibkaeYjapbh]ica\h\f_lclbk^gag\lbkapgjZjc`_mejeiaich^l_kbmcmeh_kejdaWj``Rl_mck_g]nag\iai_lcmgh``Xi^y/"p))z" s%#knqeq hba_Y`S*%T71O3-R50R>6O2+V>6N6-Q:4Q1,O<5O2,H8-O84Q72N5/S84M4,G+%N1*M+(O3.L50O.*M0+H3,E!D1,G*#M;7A#HFOUUQQOVS\U[]][X[XW^WY[Z`VTS`Y[S[WZ`]dY^^`a]fy`^tt |z}wa+("" "!##"!$ *(''&$'#$!"!%$&$$"#$%%'&,*))!# ('+&! '$10! (' ,)''%"%%")%#"++21))&!1,31! ))**,(-+1/'%)',+-,-+54''10'#//(%,*(%++0.0/+* ,+*(,+2/21420-.-.,410-/+//?>6586213184+*63.,:743/+1/.,8553:700f` d\c]f^f^qgc^g`h_c[e[jbn_g_qge]h\c\hcc[heh_g[c[kef_jdngrie^igg`e`pejdkcjbjYiblci`qcnei_lgg\off]mabWleg`l]h\nek`n`ibqadXa\lefXg]dZd[qbf[e_j`i`o_iaeVf`k[e]k^bZpen`k^iah_fZh^v*"x)(t# m%#t(&h)(hi""ibd^gYZP*%Q8.Q61P=6P3.L81V4.N6/R6/N4-O5.L70H2/Q5/K1*J50N:4L/'P3/K-)K2*A*#J/(N5)G.(H-#J51C.%I60J/)J HJDPS[RQUZO[[XWVR\^U[XWZVYZVWRV^UWWcV\_de^hY_`u_]sr } {{ ^" $#*$,*#!$"""!!(('%&%$$%%#! $"'#!"!-('%#"!!))&$#"$$+*#)%"!(&%$**-+"! ((+)&!0//.&$0/54(&+*..**,+&"&$(&0-+'3120,)1/(&,&)(863275)(51/)73/,&$.+--0-2.//76-,.,>:200.1/64-&22<;4/?<:9+*:71./-86:81/=<`^g`d]`Ye[gXmfibicb_gbmed[g[h^aZi]mhk\qelaralce^lbe`g]g`e[qkh`d\h`odidfbmee^nbm`h\jcmal_aYe]rhnegcdXlclcmakan]b^odh^kfi\mdjah`ohg^cXi_i\kei]jggabWl^i]jb_Yi[fZiaj]k]l^f]malas3*s'%w&&p.,q'&il$$fdbbba^VV)O7-O1)H5.V:6N6,Q:1Q4/K-%S80H3,M2-H4-I8/P9.I,#F5/L6-M3-Q50N2.Q0+B2*L2.K.(G+#G,%C)'H2,G,'DROJPTWWTXTVRZYZX]YWVXXYVTUUXUVYWW_T\U_eacb]_`]zbats#"{""xxe!($!##"%# +( " &$!* ## '%$##!!'%$$#)(%$&%!'$((&&$!!&!&$*&*')'++/,'&,)$#-*#"-,1/&%%$-*1/$$'',*,'3/)'0/'%+&/,21.+%#(&--# ,+$#&&-)..73204/+%+*658610)'&$852083/.,,0.201///.-+)/,3266-+8654440,52&&:9758632:9/,2141:71/da +d`m_bZf\hd_Yc[g[mch_kao_bXi_l`i_cXj^lbqljaqhc]g^e^hanfjbl_m`ialcqdicjff]kbg`lfe\lbh]pfm^l^kdk^obldndkblcnbpdqb_Ungqjk`nahak_i`rjc\dXeYh^mcjcbUh]e]ncl`j\iak^]Vf^jcj^f^i_g[s3'y)(y00r(&o,+q&&j$#bnadbZ[WY*$R7.R80W;6R>6O.(K3*M1+C.&Q5/L5,O4/N:2H1)F3+L5+J.'J2&L2,N6.H1)9*"J/*L3-B(!H2*E+%H-+E1)B0)E#LITUSPV[TX[US[\\Z^VZYSP\VYTTTZUbW[`WXc`c_j`fa\s_^wu"!!!yz}uy^$#   '' %#'& #""##$!$'#'%&&! '&#""!)&&%(&&%((#"(#.)#!(('&($,*#!'%! "%!(' 52''4322'$21('0.-)-+'&0-'%53%$-,1011+*-*41''2.'$1021%!.-!& /-1.**<;/.11(&,+--:8531-**:90,/.86,(84.(.-22*)>;1/.+410.>:967599967576++d` f[feh]f\ieh^lif[kbf\gac\g\ick]j^e]e]shg\f`ncjamdodlZg_i\nekdf]g_j]i`kcj`f^ealinfjag_jck`e_kbpbpdj`melcm[mbkclblfk_malamfmagWje`Uncpbkaj_nddWjb`Qoihbl`mbl]kecXoeebhVk]icrf{6({0,q(&s(&w#"n+*k k gl[bWRYQ-(S6-G.&Q5.Q5-Q.(O85H0%S94S82M3-J5+H0+P2,J1)O73O3-T;5K5/Q81J1*E&J3,J3-J/(N92G2-C7.E,'E,%EFOPVPQVRTRPWVQXV[VY]\`\VZRYZ[QYUY]VaZ\]f[_]hm^wbats z""z}a!(% '"% "!#  '$'"(%%##"$ %$$ )$,+##&#,," *(##))&%"'&3/#")&&&/.#"!'%'%$"&$0/,+*%-+$!% ,(,,!*)" .*31)(--" *&*'-+"!42#!.-+*/,%#*(/-.--+/.*(1,(&0/-*97+*970.32-+30/-..))100031,,1/0///0/**9631650.:9! :90/-,/*63@@6511#"21>;d^ +ldhbfYeal`mdh^e`f^lhj]mdlekbk`j^e_ldpfe]mgkanbqincgbl_o\kelcpgg^hamejaognff^g^_Wjaldjbk`mdmbh`bZd]e^oae[takag_i^mcnilelagajdb^k`j`meh_n\h`i^obqgmdk[j`gXeZnemdcXk_l^hbbXifw7-x&&q'%r-+p$$r'&m&&ge!_dc[TXU($U>6N*$L6-O4.Q<4M6.M4.P62N2-G5/Q3,M52N91M2,L2*H+&I,&M1,L2,J2,I4.P3,E.)L1,K)$A,*I1-G-)@+"A!DHKLNOU]U\UWSXTXT^W\VWVZTW]Q\W^\]_V][X^a]\bg_lza`yw ~zzz|c"!!#$$*&$" '# +("!!%#%$##&&##&!&" /-# *(*')&'# ##$$)("'%"#'%"32"'$)'*( ,+&$('(&+)))#"1-1/#"'$(')')'0/*&++//*)//+)-,21,,740.--#"4273=8''%#.*/./..-7174.+1121:71/>;42><.)420085641.5452;633:7973.jbg`aXh`c^lckclejangkdg_ke`Tpdqhm_pfkchciai`maldhbgboee\c]qeiaogf_k]gaf]f`icpdndpdm^jckbj^m`qgh[kblcndd^karfhZmakajfldl`i\jci]hXi_m^ldkcocmfk_d[iakah^i^g[hah\qaaXkdk_bVh`fYx3)u)'r,,u*)u,,l$$c&$a eb" c%$^Y]YW)#Q4,J1)L6/T40Q82L93O<6T50S30M6/N6.K5,L2-L-%Q:6M0*K4-N/)O5/K2*L1,A&"I,)E0)F0)F/)F.)@+'G-'CEIOSUSPXZVVWXV_VZV^[VX[XSSZXPW^\ZUVad]^cbbXc`\{aatr$$z$x${a""%%#!"!''   ! &##!($'$%#'"#%$'&&#20(''&-+ ,+!'#*&(&))#"%!+'! %%%#$!--,)&$'%'&)(*(,),(&$&$,,! ,+0-/,.,//($52.,'"74)'2200.-'&,((%663243,*,+63$#0.21**951196&%++,*64+(::1/745320<:53--104120853130655432::/-76;;652.B>je jchcd]ojkdh`oda]lbkbdZj^och_c[kalcnelcg^gbh___mglfg\lde_m_qhj_lbgbqdndjdrfe]j\mawnj[kdmei`nfshfXh_iZmgnhldnaldl_i`i_nargpcqfn`sel`j\qfncg]h`eYj[e\kehai]lfjYnagTn^oYq`mbpbz5(w.+q'&t-+v-,m.+k&$o! ]d$#a ^]ZXW-)I4*S92R5.Q=6G.)O6/K5-U/,U;5J71O4)H.&E0'L4,K4/J3+T2+H2(L2,H1*Q4/N51@.)L5.F/*I1+H*%>(G,)CDIMMSRTRVWX^RUUUU[RV\\]RWSXWRWUWXVXS]_^\_]da^awb`us "" } }~vxa#,&# )("$! '$ )&%!#"&#''/.+$+(--.+)'((('"$#)'%#11-*'&..%$&$"''11&&&&!/,))/.$"$ )'0,((+*0+###&%(%42+*&%'$4/0.1.,).--,5510%!)'-*4463((32/--,-,+(/.--641,4/)(??-+1/+(84:8:620431,217731+(0/,,:7:83253431/0,c\ i\pjlbd^h_^Ze^h\mfjah`k^obpcj\lbulj`kcnaiag]vgd^f\g\g^nercgZmdjcoeibscngndi^n`o]lajalbqdfZohg_mjgamcm_kembi^i[ibg`rknblejcg^g`jah\kak_gaoei_kbj^c_ne_Wl_pfoarbo_f]j^lbh]pdw:/t,)s21q'&p$!o((e%#jcc`^WR\M-&E3+Q8/P82J7-I94R8/J2)Q91Q.*L94P81F1*G2.M82K1/F1*P4-J.$D4-I.$H0(H/*?*"B0(K.)@+!E1*?*&I60;"MGLQUUTW\Q]Y\[ZUU]VYV\[SSZUVXUTX[SZ\]^bYa[^bfewbaus!!z{|#w"xY!&! " ! *%%#" #!# !%#$!,).,&$%"/.(('$$#%!"%#'$+&"/,**/-%!#"&$#")'87&$&%)'.-*( ($%%##,)0-,+-*+).*%$$$0.3.41'%,*.+31,)88..))##%"-+!63/+,,0051(!.,//-,)&8632*)52.)99320/2...30=<.,33@>++/,?>3/..3200//@@97/+>=875/,*41?>c_ d]ldncibmfhaldk^hah_g\f_pbkcmejbjbj^ldgajaphj`qhi]piofh`lbk_oenekhkaf^ngicj_kdhaj`r_nfgbiblalcthlcn`ibocpenglamfeamalapga[jbvnh_qhj^mcwgpaf_qfi^m_p]oah^mbi]kae^peoek_ncqat1'p0-|20u.-js*)hhi__VbYVR+$P@5P6/Q94T;3M;5L/'P<3L84R94O60K90N6/J2-H/(M2,I3,M3/G-$M+&I,'L.)E.)K51F2+G2-H0)=(#@)#G.+?AGJLLPXVPRSYX^W`XYZVa[TWUTYNQ\_XY]YZWZ\\Y`b^`_s`_zx~~|}s]"! #!'$!!!!(%!"&$## %#! # " ! ,*!! *&0,&%+'00,*--$$&!-+'&,*)$) '&42''&$,*'#!!1.0.++%"*(<81//+.)0/.-64)(&%*&64110*,+**-,7610(&)%632298-++*0/435441('-+21/-867154535254**2/66115/60=9418432982154655331110/qghch`kencmb_Xk`pfk_e]i`lcleldk^g`ofslmfogogmcsejaqfmaohsglaidh\qeobqbpbndi_uknerfm`icnai^kbmenbnbmdjcqgtdnakdrgregbmbh_qfnfgXpfnbocl^qcsfl[ogh]k_lcj]kbndi\m_g\dYf_hZkejal`s7&x/-v1/r)'p-,i%"ah!k""ebaYWWV& R83P7.K;1W:3Q81K6/U51L7.G3,P6.D.%N92P70K.'I/)G.&J2-N0+D.&I.'F,&F.)J3-E2,7&"I2-E.&F-%A3-@&#AIJNSWLQU\UU_UYTUWVZ]UYUSUYT\UUMZ^`^b^ca_g`abksddvu""!!!! z%%u`%" !!&&*(#! )'$#'%)%"!!$"" ,+#!#!""!(#55'')$! '%50-,*)&$%"&$,*-,.*+&,*0+''(&,((&%#,*('0.*)%$/,((.,''%"4211.--+74.,3000'$,*))44+(.)('-*44)'52(#43534452@=.-410/110.98)(3/00=8<;22++4497?<540/9811?><;?=>>84;94.43;8f^kfjcidjbfajee_tikcpbndqdmchaqhg[f]mfhbnblhkcpkmaldmfkbncibrduie^nbkahai`uengkbndcZqjrktpq`lajbibnephm`ofpgkaoerfgYk\mehancobwlj`lcqdoek`h[i_oeg^qcg[pfj_laofg[mdpiocjcrhpcw@/t(&s++q/.n**l#"l$#e" f[_`[\TL!O5,H.'M0(I;5N91N6*M5.K6/J4,L3+J3)F.)R7.@2*P4-D.(G2,L4/G5.H,(A/)I0(K/)I)%C.+B+"E5/L/*D0*?PEJPSRQQWV]RX[XUWWYVU[UVSWVZS[S^X[]Z]V`e_g[bgh{_^ts!!}wtyrW# +%"!!!!%# !'&)$ " *(#""$+%"!#"$#,+$"! #!,'"!$ .+$ "!%"$!+*%$!!(%*'0-(&##&!'#.,'&4132.)*(/.'#-+**3/+(,%.,201/*)750-3/,,-*//3/*)-+96:6(&21)#76((5261/-<:0-/+74.+'"//750/861/'$.,43;86577<;85/.7363=<:975CA<:.*8798-)><:972gakeldneg\pfjamfh[lemfmeneqiqhhci`i`mcnhldmam_pdpfqimgkbsfkfm`rhh^pah^mcsjwloeqelffanbnbkck_k`j\h\lcpencj\f`meobqemcode^l`mbk_tgj\iak^ldogohshj\vnugkcm_ibi^h[vgf\uih`f[ocibt9*u0.w,)e$$j%$k)&a"!m_Yc''_" ]Q WT-(R82R71M6.L70J91J51K73L4.S5-T:2G/$G6-O6/J1(O50H,"L*&B) J4-E6-D.+G,'K.)H2,C/)F5/H/*<("D-%?GEPLQWWVQ[ZSRRS[QW[VXRUSWVR[NUS[YV\Yb[`a\]Tie[|ects"  ##}yuvxa!# !!'%$!!)% % #,(&"($%".*$$/+%#*( " *'% %")'%$-(++('(''%*$(&-,! /+)%&$((.)(%!"!0*,'-,(&0/.+//1.1-##&$.-00(&+)**20532120)'+*.,.-,*20620010.,990/)'/.41)'51=;8531/-<:6586860.88>:428666;;=:75966243,)867664CA::94:92.h[idfak`ofk_lihbohjbmbm`mehbf\lbrfrgnbmhnepdpenckcp`l[nfpclbpal`pcphk`kctgqkkaxlh`h_lakelaj_mci_j`j]qgo`n_javjpcqfohjck^o_j`n`k^lananfren`tgj`qge^ocmdiaoephlaohnapeh]ndh\ndx9/v-+t'&v)(l('h''l('i!!d[Wa[UTE)%K2,R5.P81Q93H1(F5.L5,L80O6/I2,L80J5,P2+M;2G3/I.*Q50D.'G0)@)"?0)G/)K3,E0+J1.F*'C1-F,(H.)A)"BILNROU[SWWP\YYUYYXZYWSTVTXSQ[YVS^Z\`^^a_gaek]vdcqp{$#!{ {"z a% %# !!$"(#& #!)%!!'% ,'&$"!$!#"")'*(.+'! 1,$ /'#!/-&$1.&#+*&$1/%$((+*$!0.*'-**'%",)$ )(--/,*(11("+((#22//-,,++(0-&%/,3/40,,2140/..,"";87641;9874253?;440,778631:6.,87322/1/002/;874?:?<10=;=:;9><?<0,DD2144984/97vnohjah^iboehbiciblal^rhcWqgobqgi`kei_sarendsdfanelbm[odsfqek`hanbthrekd}ppgpgrek^nhjemdjcqhperirfocvdj^neoelclbpbman_kanbthj`rikapfndsgncqgxjm_qcpenahaqfk`h^pblbpah^l_tiohq2(q**r,,h)(k#"j$!d%#b_]Y\XSWV/*P6/J1&U;5L5+L6/S@:K:3K5-H2$D1*G1'F2(J1'K1-L5/N2-K1-G5.M50D0+D.)K4-N3+M0,G.*>( D,'=0*H,(E#!FLNPPNQXZXWZWN`YVX[WRWU[SWVSNTXP\`d[\[aafaZecj{`_qp!!" }z&x&u++`"!$"*&!"!'$" !  ##!%$,*!($%%'$)&*)('"&#&%""!##-+-+'&&"0.2.($)(-- $!!(!$#""))*('$(%$#*($$6111,)*(((3/'&,*54,,..855411220.846560,(,*53&#831154-,76432/<;209743)'87/,964342:931855265975021739785=<>;74=;?=?;DC:9;8=;ng kgmfngi_n`g^kae]latkkdn_mfkfnfuklbthn`ncmel[snibk^pfrmm_dZlel`qcmesjqenanhphqglbskkcqfkbocnerhpkoaqcd]kcodrenaobjam`nek]h\qgmdrii[ldtjlalgrek`lamgi\ogqglam_l^g\k`jakcqeobr=0t76s**p*(p+)o%"lf&%j$!Z \\XTWT-)O8/Q71P94T<4N5.J5/M5-F92J5-L:0H7-P*$J1(K-)F.*K3,D)$C0&C1)G5.C)#C-'B-(F2,F0(D)#G1+;*$E61@CJKNXQPQSRJURXOYRWWZVVXR]XRWTWVW\WZf^`Y^\`bfdgzdczy"!! !}|##z^ ! -)"! $ #(&$  !""(&,()((#,*%"((*&%#"!,*$$,+"..'%-,#"&##"*&*)((-+//0+($!!$11&#.)/,434131" /..**)3186/-''2,@=/.%"10,).,94,)*)65-*--,);:6296/.3/1/5430$"3/33&%834354/,6488;:31-*7675652,54;:00:8.+21:7/-:475<9::86B=760.??ke sirlnhlcnhmgkcgejgrfg`h]lbtikcm_mcogujshmdmbk^maleodrgmhoekdpfujk`nfqkkclenbrgoceVwjvjrgobqgmeqei`lcodi]qgk`nhh`shnak]mcrhufhamfphl\tgkbg_ogd[nai_ncmcodsfndm`obrdf[jfpen_v;+w-+u44s0,o# j#"i'%_! e##`"!`" U^URU& N5.N6/L1'J4)Q:4H1.Q80L93H3,I6)I3*G1+O-&M6-J80K6/A/*I3,H4+F+'I/)D/'D/)F1)A'I3.B1&G.)9("ALHJGQQMUYWSRUUZTZS_WTUVLRVUZPQX[VX\X^Z_ffag]b`p_]vv""!}$$*}*{w$x#c '###"( !!"##!)'# %#*&! !&&!!%($+* '#'*&"&%(&0/&$)(%%/. )'('0.('-,'%%"%%#",(/**(#--((+)"!52%#+*(&210/4...22200/#96;96543/,30..503211" .,0(1/323052329477.,21/,6553;:0,@>77<897102041;:993/863/724220=9=9?=77:8<:;7CA<<=;BAmf famel\f^kci]phnhm`qeqiwlmavjqislsgnckaleqfrdremdnftfsjofnbjcogk_k`rhsirepiuflgkcxjndsjmdrgqjf\pfmbpei_larcocwlpdh_n`mcm`rbukselesfnbrkxiqil_yjsfwkm`q`lcl`e\jcrei`yil]hYpdv7&u/-n/.j$$m,)j((j##`""a# a\\[TXO-)J4+Q?8Q:5I3+W84M40K71I1+J2-C0'J5,E5+F/*L4/K30F2,L=8@*&B1*H5-O-&=*"C-%H.)L/,C,&A("I-(?.+H CJFMRGPOXRNQQQTQO[O[R]MUSVTT[UR]XWVWY^_g^d^aady][ts #!  &%|#v#!x t#v"_"! " "($$  !"!&$$$("! *)#+&'&$'#(&('#*(!!10%%(#+',),*! '#)''%,&'"*')&0,00(&*)-,++3-)')&0/0,2+5/0,'#@>++99970,.+/*+(.-5000('42'#20743161.--,0,213310:92.32.+52;9775321>=:91-@;6310DC74659861;:=<?<,*6576<:;7<;?>6552:5/*=;EC85DB@=n_hdoepankobpem^lgpjtglcpbriqgyiobqdpeyloepeqkq_oetgi_odlargxlukujrgvjkcrhohvqqhlcujtfkbmbpinbobj^|srljbi_lblcqgj`wqviqeqhmapdj_tlmencripdj`g_h]mal`ocmdshmasdrbndliukqjp`o^s;,u64u0/s-+n*&e##gd&#a^[] YXVQ+&P6/O<0L91C5,D.$Q=8F3,Q;7O;6Q61M,(M5-K2,O95M50K5-M2*M4.B-(D0*H4.I2+A3+C.)@)&C,(>%B)&G50==MJKNPPPRSWYVUXXOUUPTTTXQRYVWWPV[P[cZ\b\e]gd`b|[Yxw""""  ~$z#$z$b$& #"(%%" "! ,&.++*%! /-##'%",)'".-)&$"#!!+(0.+**%($#"**,+1..)(#'%.-&&"!*& (%*'.+)%-))&/,/,00*),,,&844031,+//,+51+%,*%!109386--32++1.1/0/72?<115341.)<843971021:7.+94<;76+(0/3.65<976:77699<9><76:4?:A>?>BA?>==-,@<76B@75idodncgcpfqemalbg[oiodoie_keuhvml`pdxmtkrkninetkpcpfoeshlapergh_pdvhrhrhqglaulqcpgtiqexnkao`nalbshskl`pdndneocnbrgqcphnelaj^pbnblagZj]shidsgxjqevdthveqhpfmao^mak]ofsll`pdriq9-w.*h('q--p-,m)(g((i\]X[WRWR2*O<4M82H7-M6*H1+L81H3*N71L<5D1)I3.T85J6-E5.A(N4.F5+F/+A.)I1,B4/J-(N0+D/*@.)C4,?,'B,&A.(?"EJHNWSPOPRUUWV[ZR\YXXSZVSQ\VPWWSXXX`S]^Z_^`Zba|ddxw}!|!x!| (w(a$ !#*%! ##!! &%" &$0-%"'""%$!"&"###%"&%/+*'&%&$+$)'&%'%,+)%*($!11++.*'%,)0-'%/,4/!52.,*'2--(0.($//.+,*203/-,/.20.++)/,;:,,.-3/-+97((1/0.**43:9.->8%#9500657673865464:62/85:6408661710-4188=98850@<4287>:;7<:@?DC=<==;;?>jcmeiapcqeobshianik`ngunlbqbnfshnirftkrhrimcqgn`odqethphuosff\uhobohncoetkymsirgqhh[p_rfsevgrikcqcyoqepdoff]sftmzmqfnhk]thoioesipgrcpgnbjepcvhvklbqfscqdobwgj]rhphh[qembqdpcw2&u87r('m0/o,+h,+`j//c`!!]\Y^RQ#L;6N4,D:3K5-L5/I-%N:1K94L92I51I4/P2-H/(B+#K3,=#F4,I:3F-$G5.K1-C.(H94B/(G3-A*(;">)$C-&@"CJNDMUQWQSOPSTNVWSUWUQVVPUVYWWVZWVT[\R^_i`_gZhzca{y##!!""}$$xtpa%#"#'%!!#!# #!&%-)# 0-%$!! #"&$%#$$"(%&"('&#""&%,+'&+*)(0.,+/.**"*(+)'''&''!.." .,'$'%..21*((#.+,+*)+*+'86-)(&10'%$ ))*)&$=8/..),)53,(--1044?=/,87,',+1042;;850,977766967542;;EA2/86309644=;96=99854=8?>53745284;7?<>=74=;>9:9jcmdickdvmndulpdkemenerelbrkpfwjqgneqdnhvhogrhpbqemcvkncrhsgkfkauklcjbj_ofrnpfugofoeufueqgpcrhtbjbwkqfmewnleynriqauiresgpcqcpfmfn`i_o^qci`pcm`sfofwlj_tfnck_teoclcqekbi\rcncy?3s76s-,j&&l('f'%a" b%%i _&$\[$$VOTO)#H4*M5.P;4M71N80K40I2*H6,H7/H90K4/G0'L7/I:2@-%H2(E0)I3.M1+?,%C2-H2+=0'G($H,'<("<.)A1,;+%@CAJHUSQSNSSZRWSM[]T[[QPRTQVVTPSRT]Y[U^\]_cceefxbawu"!"!&&!}!&}&(v'!t [ %!&!&$! $" $#($(# %)%$" %#(%##'%"!(&'%..!,,# .*(#&$+)(&'#& &"'&-+,)(%1,))%!'%%"55..*(,)+*+)1.'%&"#"*).-550--*432174002.0-*$1.87'&/..--+1.85.+98646651CA:73071:60.43102/?=:8--32/,.-643./,421/86=9@?30;::9A=;7=;86;:8742GFFC=<>;A@;9helfqkgdlgpihamfmargvjuiwmuhqhnhtfraxmqekepii`pejawmnbqg{nmdzmqdtimcrhi`oftilbrgvmogoincteslpgk`sjqgxmohi_qgsjrksiumlcwkm]m`teo^tkl]nfrkncngqepdrhj_qesdtisip_oeg\o`mcn_mgi^n8/r/-l21n.-c#"l**k&%`'&i""^]ZR!QXO,%O6,K60I9/J6/U:3I6)N;1D3)M6.N92H6.J4*H-*J/+B4+K3-J5/E/)I3+P82D,%A2,E/(>-$?.(?,&F50<)"@-(1 BFCSONPNUQPSYUUXQWQYOUTSVQRPOXTQZaX\dX[e_]fg`hzcbws!!'&##!!*)z{%{$]$$"&")%#!!)'--+&#")(# !,($&%#%!'#21'"44+)(%-- 0-# )'*'5187,%% ,)+*,*)'76,''".-51$#0-0-'$*' 33.+30.-220/0/(&)(20.*7733 ;7437640,+87-'<:65-*0*?>31=<55::0/<:;:74=;520.0/32647554CA:97475<9CB62@?@>@>;8B@<;B@;966A?2/DAKJb]mamgjbe^shnegarilaxmmgqfk`mhneneohmelbwpkbnfuisgobwirdtirioaugtinephneneqhtkqek`shriqgsjk^uj|nukoeqfvjqfvothtkrfthsksishrgoimarjqhskngsgqehdugudsdpbocl]vgumpcreldshpcpflcuA5w1/n31l/,h)'a&%g*)b%#_%%_ [WXVPM,%G-!P60O4,U@:L71M6.N72F/+H*#P2(K3)Q40E6.C/'L6.J5.F3,G2-O3,B/)E,'J-&A2-H,(<1,;,$=/)@)%<)&6?AIFKSVQMSJVMQTLZSXUU]PUSPRUXTPVXUU]_\_WbUYhdhy^^zx!(({"}!~t#r#_*&! '#"!$$!&#*%"" %#!! #,#$$#!0.*)$#('.*$*#-+$ #)(..#")#+& +++%2/.+-++)/.(&''30.-(',*4344,):843+("!76;8-+5510.+75-,2+'&<:.-,*20=;?;32877631447797C?85=<3/;9=<9788440./-1/<9><C@:796<;2-30.-;9DB?>;9<864BA9675EAA@<7C@85jboehaqdwje^j`qbvnpiskpekdsjtksetlmcwjulvmqfpcqhxhslvlofkfugrfnfqjwnrjumymn_j`xprftmogqhvluiymngoljdoftkqipgoipg|mvlsiznuitktmqdujqhmdsgqmofshpbshnfpfrcxkpcsjykuhrfvgpe|msfq9*u52p22k*(n)'d'%e-,i$#f'&XX STQQM,'J8-N5+E:/L5/G8.J2-I1'J;3J3,L2+M;4G-#F5,L51M-&G4.H6/H/+J4,A( K/)C+#>,%<+ H/+D+)B.'6(#B,)>@LIKQPNQLUMRPSWVZWQRYXTVPLMKO[ZZ[]TZ_[\aaf`ddk{bavu"" $##"{ywy s]!&#&$'##!# *&##($,)%#$"&")%+(-)*&!'%,,$"" /)'#&!&&)&$#%"!*(.-1/54'#*(((#"/.,++))(0--+2/**1.64'%-*:::6'&9496413133,)1*2/0/,,:8540+86513333772->=210./.303/94?>@>41?>64<:228786<986<:A>7587<::8=:?<1/=:A>4330:8><;:76A@:962=;85nhoemgvhwrnhtfphqfpirisjmdriudwnqcqfqgjhvoncpdxjxnslzntjsgj^oiohsevkynlardvl{nvlrfpawjserhseuhldxkphoerij[uotosgmdrjm^ldmeqe{l{lpapfk`ogqdwjsipdskpbmbqbtjndwnuiqdykshterjsb~C3n00s65o1/m0/j%%i+(d_Z! _!!Z" P!RWQ,'M1*N7.H1+L2+K;3L95G3)O7/D3)P:6F8.M74I41I6/B0(A*$>*"J0(E4+@.'B40B0*@-#A3,?2+E/*F736(6)%;=FIDJSKVVSVRSWQR[NRWSPSSWSXVS[TYZTU_c^[Yaaggpfzedss" ""&&|""w(u(&w%\-)&$%%($# #"!!!'&!#!"#(''#& !&!!&$$#'%(#)(! ('#"!10!&"!'#-++)1/%!" )%$$76))2-86)(30)()",)%%1/.*/);9+(970+1/('(#.,00/-540.87-,66.+64-+//,*+*0/<8/+10;20.5/54<;5531:9109382;7BB74=:9775<9@=:8;999EB1086?=:90-FCCAFE=9:974CA?;4.?>GG?=0/>=ndmglcnhjelgqeugohqeqgtjqfwmsfmfofymsjvjrcrgrki]rhynpergsismwnvj{rodyjumrhtgwesktfkaqeviqfrgsguhmdtfsjvgzhsmpdkauksfpcpdoesfngriqjnfvisjukndncqgpfvlqdshphteunqgsgoevjkazjp`x7-q43l.-q+)q..m"!g%$`^ c##aXQ + +TQP,'A,%M5,L6.P?7S<6M91N;4C-%B.(N91G3+M40F."D.(;-A3)M4-I3.@)P83L40?&C%!D*(>)&I1.E-(C.)?-&@% GJL?LQOSQRSTSTZSSPQOVWUMQVQVR[SRZTZX]be\[dhhmla`zx''('#"""%#%%%|%t"w"`#!.)&$  %%($(&(!& "! %!&$$"+(&$%$/&,*)$)(")%&%%'"('!00$"*&#"*(#!%"%$+&0/&#+)-)30*)+(1/.+20'& /.)%2/((1,3/(&&&,+,(51.+32.,72,&((0/*(-+4273'%544/'%3165=</.74<;33:9:85343@;5486A?**@;1/E@85:9@>C?HE61DA65AA65KH;79974B?:8A?33?<84@>B?;7@?>=BAEChb ogk`vjtjndqfuiogj`mbohqih_wnqfqjnftjqfrlreoemftjpfqhxnvjti{qsiyqxlgcpcrgraodqiqgrkvltiyjseogskvhwnunxmukqgphukncrexqngrjlaqhshlapgvgxqyntjthrfwdtipgsenexlugsguhk\pdnculkbyB5z65s42r((j,*n,+f_%%f$!X(%QTPOOH)$K61L6.I2+K2-L80H0'M62L?8C/'>2*I6-O<3L81@)!K0+F4.C6/>.&E1*D5.?1+?-'F/)A-(=)#<% B,%>-%=,(<$!<=GEJHRJQXZWM[WMTQRSTNWPSMPRWVMWUUUX[dZ\gjbghev``zy#!!!&&((! !!}z!}! v q` &"%!! &#" &"/.##!$!)(#",+)%%$/,&!.)/)+)0," )&*&%$+++"/-+*-* !,!/-)(22-)%#20.*20)),(*&+)1/0)+(0.0.440/*%,'**66512-.,41,$000,4264<9;:,,,*853384986383982/2143?=3.93<9=<=:41:742669844A@>:3000<8GDCC?=;:;8JH748665CADBDA?<7621EBDBrmuhriunwkqhsnxnthtnmdqesmtikgtjtgnaxjvjsjuj|ppgshtetjtkxkjbukwntgthpflbyktiohwfletjzlriwkqesjrhmfrhpevl{srivlnbuixqrftkqftkrhsepgwjqjykqdrhmcmbsfsiqal^xgsdqdtlwkuitgnbvmtht?.w30r++j-)b*)d*'e('_))_-(ZW%"TW QSP)#C7-J0'P<2I2*G6-C.$L7,N4.K72F2*I4(F3.K70O,'C.&F/)D.$J1/D,%F3+I/(F,&F+%?1,C,&E2/;';)#9&:%!=MEKGLVPKMUXMQQYSRZQZUVSWPPSQLUUM\YYW\`^g[_cjjv^^zz*)'' ${# |t!!%|$"z"\+('%$'!$%%&" "*'$+!%#,('$+($!&#&#& -*,*$)(+)"(&%!)%('" .-*&*&,)33,+/+($-,10:8-(+()&'"+'6487*'/,:9"!+(0.'&.-'&1/:5+)-*-,0/0.2.43:984/-,(44.,416440431-.-==8361:88685/+81@@:597::<:.,613264A=<<;9DBCACB85ED@:62EDA??=GFB?86B?A=@>><?:sjmeojrgwjukwiqjlbqlrhvm{nxmvhtjsltkvh}rxnvkoithrgpfskshsfwm}lscukmcukuik_ojvnwmvjwkrfxlwlncqeraocqewowjukpiqdqlpcofynshm`obmambrewipesewomctkp]neqjrgvlrdthpewmvmrcwlocvh|iz?+p/-n54p43n00e'&d**b('[S X##VTPV M-)J0+L71KD;H7,K91D4,J4.S?:G3.N<5L3+M82D2)C,'M81L0,C/+E/(H2/O0*@0(H4/>2)B,)E0+;0+C%!7*%6$ D#A<LKHRWNWKYUT\XWUWS`WWSNOQLQURWQVW\^VecfdbgYf_xcayy!!''  !!"!&&v#w"'y&p`"$ $#&##""*(&$ (%,&"$"*#&&)#, *&$ +*%'&%%,*+'+&%"%'#20/.%%*%& &)&(&))2/%!)'.*(%--52533276*(1/+'**1.+*:6.,855441--7731(&43633121.+-+:9.+8631421.9710DA2095=:;762A@:9=<:784?>=:3195=<73:93287:997GE:7><;6::>=@?:9CB53C@A=E=>9BA<7@?=<1/>=?>mirkh`tkunsklerksjrlkdqhxkwoqkvhuntkwmxmlasfmcnewisivjxhpbwhsguitjseshrhsjodsivmshrfoftfthxksbwnvnvkrfwmvgsg|oqgtktlxlzlukxmrezotisgyikamdsdnhvlsixjtfofvmnerhpdrixkxmj`nfpdz7,{30t*&k,,p87h++b))c'#`#"_##[%%WY&%T$"VN2+E3.J4)K5)J8/I,(G6.N;4H/)N5.E/-I6-G2-F2+E/)G3*J=6E5,E/(H2,E4.>+%=-)C1-8#H61C,(>.(9*$:/&9BHEJNPMPPORTST`TVVYVRYWQSTXZRRWUYZXXYb``^dZbday_^xv(($#"" '&)~)y$}$%z# zu`! !$*'%"/'+( #"!)% +) +!!& *"+(0,(&% 0.3/(&%%)).+#!))(&*(%%$!($/..,//.-&"//.,/+1/'&,**)<;,',)-('&++:72/1/-)63'$2.863/82643352/-((65//.)2,:8421/<9871-?<63::87;9-'7372?<ED74:96599>940EC:8BA@:=:FE;696@><:?<<499@>@@=<A@<5A?GD54EB><@<83ph vmqhskpiuotjzpullemfrhrjwnukwmtf}oxmqirixqwo{puowjqhnfvetmvlwmunwkznk`wksjwirh{rrdtjzlsirgoftkvnzqwmxjoelc{lsf|ryqznqewmsgvjshwkperjoctdzm{o}nrgqdynogmeulthtexmwgzlwitivkyD4l//o''p.,h+*i-,_&%_"!_\$$VSYN RR/*D+#D2*E7.D3+F61L4*K6.I5/E9.J0(C/)I.(A0'A0+D6/A6*B1,G1*I4.F1,:,#<'$A.'G1.B)$D4-@-(2&9$ :!BHJQHMNRMSRSSXRTPVXUPTUQSRPTQTOTXT^T[``iiddbjex\\{{))##'& %}$ "!&}%++$|$%z%]"&% )#! )!" &# !  &"!(''%+%$#!$ %"%#*)--% (('!+'' $#-*'')#20!&%+(&#.**&&%#,+9420/+52*)54+#' 52/*+(31)(&(%1.*(113/<831*(2.84631-&"31..53724,757310;7331.B@98<:.,65;8>>30?>:8?>;9639632HE760-=:;:<;87@?A?::;9=9<;DC:8FB==>>A>A@CB:8CB?=;9A?JEnhphqjpiskwnrfvj|sobqfxosguhoeukk`zmkdxntexqxpviylqlulynxlxpuksdwhuhwnwhrhwmvkuotiztwkxlodrewlvpxqrnsviqfwjvkujymrgpfulsetloeogpb~pqjtkrjukymwitftjphujyjtfshk`rcysujviyfqbxF3t32o41j/.j0-b+*g-+^/-d#!UQ$"WW"T!S M,$I5)E5,R93K3.H5+H3,I6/K.*NA7I1&G2)I2)J6/J4.K6/B,&A."A2)E0*A,%F3,>1,A,(<*$?*!B40?+(=0)B0,8BEIHPLPNPRTNVTXTZXTNR]SNMUILNVUUYX]U]\c`ddhcehv`_xw$"! ((%%##"~"}$~"{#y$w$_#"/($'$%+&%"!%!'$" *'%"&$'"+)%#&$)&$!$".-'#/-#&&.-0+/**%21)%.+*(.,/++))$0-/++&33:50/+(/+-+3-63//8600.+$#5133/-833/411+)&2.*')(:7520.773395;:82@><8<:86A>520*2)?>4/75;:<:;9<6)'761.97?<96C@;9GF:4CBHC@=87<7@>44;6@8EA<:<:A=A>=;ED<;DAGDFAFDpi mepepguh{nrjvjslrfmdtkzmmdxqrdyoofuhxmshvjphuosh|upgrhwlti{rwlshumujqdumsjtlwnripfrhvilazp~pxhxotjumvhqetcogvjznujtkogm`yhqdveypthtlpcrlvj~suk|lwisgrfzoslpbsgxosewg{kvg|ptB3s31s11j'%l*(f)(h+*a! Y!UVUU! NQF%K5*J=5D0*G7,E.%D7+K3*I5(G7.A-%M40H-*A/&F.(B0'I94B4,D1*C0):+$D1,D2(H2/F52>0*:&3( >(!;*$7=FDKMNPQOWVKRRTXQUXUSXVSZRQTQPQTRUWYYU_`adclcgzcbzw "!$$! $$ ~'&{&&&w%)x'qZ#% &!$"!! (#('#%## ! ,+")&$$%%526.1,%"(%,+/*( ($$"3-%"21)((%"0*.-,*,)+(-(/.)%4/1/0,,)1/+)%721++&'&40751.3//-42.-2.4/0-83/-=:-*--77758564740-?;66CA537697?<=:6275;:>:65?>GE63@;:675>=86?=CAJIBA31;7@>1/=9C>LF>:IFCAFF;6KIB?FEMJKF@;rh ohshvmznqipkpjngtirjtjxnxqtkuisfuluizs|kteyntkwnqgylwlyptk{rtjzhriynohxj|qxm|sqj~rneukulyjykshvpzsxpvfritiwl|swnodpbynufsjykwo{mzqzpsktmzppgwirfvlvklbsrkpg{npfvkqcrcwfuks6$z:8p22n32k)&g/-e))d^Z!NU"RRU!!Q,$B0*P9.G6/M94K3-PB8E,"L<7@-(I2)A3+G2,K90G/*E3/H0,C1,@0,D4.G-(A0,:-$;/$>( @,$?,&>("A4.=!:@CIHFHMVMNOYNUTOUPRPZZTSJRSPNY_QT]VY^```W`gfihw`_yx++%$"!&&('('((-}-%|$&u&*w*Y"!+($"+()(&#%#%''"41,(,)+(-%53-+-($!-+&%.+/++(+'#/* 1/,*/'(&)&,),*)')%1..-("/.)(,,,*3052)(0.-+52520.*)1,0..(615220/.100.7073)%:4548270<8967588*#>::5317198C>5.950/C@87<:A<43?>=;DC42JF83<:LH=9A?II?;DADC54@@97DAB=DBFCFB?;A@DC97<6EA21@$9?KMLNWSSPVOVTQUKSQTRUNTVLOUSTVQM_Y\X[bafagcdlffzy))!!! $$$"%%&& z#|"%}$){)0y0Z(&-)"! -+-))#%#'&$!)&+))$+$,)(#$#)'#'%*)'#1/41+*!,&('-+*$*)../,-+%%/,)'41%#.,.)2/-,-+(':1-*/.20/-*'&!,+(&31,,512-3230961-320-7761/.2.4-54744276949476GD20-*542-74;78331>;;7A>3042:4;:>:2144><>;88>=87@<97@;>=D<BBFDCAFCEC87=9@>77@;@<LG>=A?A?><AAqj oeohukrlritkndvn|rzmxnxnvktisugzmrnzoypwmseqjzltlzlretezmxkyjwjxkvvi~qzo~pxnvmxnwnsi{ouj|tvkyoufwo~rphyqqznzrtksgyosixozotfshymujznqg|p{ptlynwmtiwgriynshtfsgsesgvgujsfpD6v<;p44p62j++b'%a##[ e" RQQ'#JLNI(%K:/D0)L92H82G>2H9/G4)E50O83L8/I94H3*F2+H:4G7/M2.:1%H2*G1+3(!D0(@2)H72B3/>,(D5.;/*--<:DCED99=<96A?B=?>99GDGD96FE><B?HDEEBAECA?C??<HGpj wmzqtltnxprjvlynqiumxpypti{rwoukwjwiyrshws~sukynxl|spfwk{orkqgzpvjpjzjvmxo{sxluhvjtiseui|nynxowpuyoodwltlskxmzotizmxmvizjtjritgpiwlodsdugtjuj}ssgzm|nvhpbudzr~ozl{qwjqfrhoD5{20o54t:9j,*d'%a&&b&%]%!V[ MXR!OP1+L5-K;2M;4D2)K92K:/G5.L9/G<2D5/C80F:3I40C1)E.&>3(G72D2(>)#;.(C+#=1'A3+9/)B-(=/)D93;'"8*"9"9FDHMKXSKPMSQVRYTOLTTSNWWRRTTZOWRS[T]f_caba]bhba{y"!"!(( ""*)'~&%%"y""}"-z-$t$Z"%&#  /.$)&&$/)""'$&"""))&$#!$#!$#)'-+%!**%"($+*43,$'%1/*%0*0/,(,%,+$/-%".,422/(%-+/&52)&0/642186++3070:5/,8652<952/,420,76))4/1-972-850/6455;9:8-,76;:20:9;:<332DB:7><B;97?<96?<>998HF=::9EAGE98BB>;A=A@EDFEA@?<HE@>EC@=>=A><9GENLEDFFHG??FD{t +ohvkxrrjvntovhsixl|psjwntlrkxjynzo|vog}numukphthspwoypumzmxpzn|nwkxkvqwoyo|o~ptkultukqjwn{oxnypynwmulvlryqvf|nymvlthwnqewj|lwluivhzmynyk|qyorexouiuhzipgvjzm{podpygswjuA8s65n)'q++f+)i++g,+d(&\""V!S TWSK L1-G6+Q=8C3*E1)G3/O82H+$H4/B/'I<5D3-;4+I/)K90G;29'E5*6.'9,!A/(C2*B4+B2+?3)@40B,$5' 8%9-&5;C=IBJKEHRPXSQSJPRPVSROSRNYWRTRVSS[X_c]i]]jbhg}fe~}''**#"!!&%"~}'|&!x!$x$wb&$$!*#!&#$!($& -(.+%,+,+'$ ,*-*)&+).*%!*%0,+&/+'#0.2/'&&!! )%0-2,1,.-(&741+*(/+64/)96%"("0,0.+*>;-())31:86/31<:9962872-,*-,=;,,7683:6>>:8:90.1-988494<;;;=;==1.A@:8:7=::8;873GB7596GA76?:@?7673@=A@=:D@@=>=B@EDA?A@86=8NNLJHECC?<@=pj slskwwqxnwnukqkuntvlxryqylwnxnxnyowjunznqf{oynumv}o|qtkuk~uymtm|qyp|nyo}v{othv{ntkukzptgxkzouxq~pujwiwkvkvjzqxn~rwnrgwlwlxnvmxn|quj~sxjth|r|rvm}pvlyn{qtnuiukypxk}uzptC3q65m32h0/k44b$ \%$c--Y"Z%"]"!WMS!V" M+'M<4H<2J40?2)E0$C6/B9*K91H51J5-F3,G3*7.#D.'?3*C80>( >2'=2+<.#B2+A62@6/=71A/%6)3&"8-&:/*6>>JCILGPONUTNSTTTSOTRUXRJUSPQSRWOSYWV\\f`aedemzb`))## $~$,,}-y- w w!|!!a$+*"!& % *&$"'$/,*)##& !$!&! '&(&1.'$$!"")$&#0)&%)&'&%''(%-,.&0//+*)3/.+*(21$#)'*&,*5131-)8610,*)(61#4074202.:799;8423172:8<977:60020<954:3=<:4<;=<74546464EB?:417563@>?<;;<7FB<;<:@>CA=<IF41DC?<FC;9C>@=DBLLOL?;A@EB85>:A@><HFGEMLIHKIB?IIsrqkzuzrsmynqnyp{pxmtjwmoeukuqf|oqgvnvm{qx}qxp{ozoykvnte|oyp{lwm}ptpynvjzlulaulwltkyoxmsd{ntmwpvlxo{vymufvmyjwmzmwmzqwgoawnsi{ozp{tsitjwnuktkwgwlyotksiymvkqfzmnesdsiuhwitB7q62p//m,,j42a(%d$!]&"X''YV'&U [QP#"N*%G40B-$I7/H8/F6.K71F2,?5)C1(D6*F92I5/B-'D/*G0*J5-C7,>0%9,&F3,G4-@1+@+&6.%<1(8,&8'!9,%8*!:$ C@GJPKLK>Q\TQJQSXMRUWSVNNNOQWXPSRUWYW_\dh^dhfbyfe**$#('))'~'""|z$q$#x#v_$ )%)(%$,*)"# %#*'*&$"'#($1+*)*$-,&#1,-&+*1/(&)('#,%,$'#'$,).,51-*,(0-72,(" -+302,,+*$3/:152+'*)-,+'.,742-66::5342'%:7:8/.752/86302.=:42;86672EC/.@@@=98DA52A>>>A>5211@?;:??97?<96;8C?A=>;D@=<HF?>DBB>JGGFHEBBBAHFNMEC=<KGIGB>>;@<MJ@>HDC=VTrnslrnyrumrk}svm}pwovlzmrgunrmtj~t~tyoulsjtiylxnxqymyoxnsn~pwgyn~ssxmul{ptk~ozr{oui~osxmtk}szrwlvkynynyp{qzq|qsi|swl}pzovnxmxpwnwlvjxnzrugwh{o|lrhxlvdxxqt{ozkymwlsdxkzlqA3o2/j+(l42b0/e)(\)&\##YT""\('SQQ# Q'"I'"@0%M?6K4+B3+J1+I5-8-K=6@0#D.&B1'?1&@-'C2(A0$H<5G71:4*O:7>0)C5-@4*B6/:0(@3.5,$3& 6+$5/':&!>@DHLQKJSKVMMVOVKKRPQROVRWRIJP\OSLYW\WXfgc_bmeudb-+*) ((&%#"(%'~'+*0.%{#&s&&y$_(&$+'.'+) -+'&#&"0,($-*+*)(0)1*,(+)*'-))&-'%"&!/." %#0*'#/-10(',*/(30/.8./(20-*3/0.100,97-)/)0(:7-)30416332321/.,0/,):896,+7564GD;;;:62:61/64426632;:::@=953.<9:7C?<;IF?=A>CA<:A?65@?@<::DCB@HF<895DBGDJHIDA?HEGBCBNN=;SPIEHDFCJHIFLHC?PO{srfyuxnwpyt{swm{t}pyr}svo{rvm~svluoyp{pztxo|pumynqfuzlskukxmqf}su|o}s|mzptuunvxmvjzo{pxp{prgzrxlzmtjwl{swkymyr{n}mqdzlzlr{q}qsg{pshra}s~qzmyo}szp{rzm}rvf~nvm{m~rxotin=2m:7p86i-)d))c%$Z#![%#Z%%[%$U&$W VMK!K)"F-$F80D82K6*>5)@2'I91J:3C3+A,'B/)?4-=,"E4+F2,@0'B2,>0*@3,>,$MB<>'!>/)>,&6-%:0(80&B61?71/=?@MKDMPNMRWOOSSTTOWNKOPKMKRPQP_UVT_^b][bdjcblw@?ßŦĤçêĨĬêŭ&&&%'%'%%%! +~*&&'|'!x!w}#b*#!#('(!!"-)*(('%%.'""+#!,$)%)".''$-*)$",)-'(",+-+$" ""43'%*%+&#-'4376*#3.+&+'1+0/-&+(0.,(1.;93-312153750+1.;9647531.+213/$5261924296:5;:7355?:7597:7:9>=>:62>=BA96:7;9DAA<A>FBEDC>:8GD62@?><<:BAA@FE?>MCKG76CAD=GCGCE@JID@GDECC?@>@=JHOMIGwptm|p{qukrunskvwp~qxm{r}t|qumsxos}owlxqynzlymymvlwnxsunwmthyoxoynvpshvzsskrk{qwmwvm}rnxq|ssi}qshvlt{o{oymtn|pujujwnzm{qyp{qvk}puhwhwl}v}nzlxnyhtuh~nsg{pwk|puj|qvgwG-L;/N=3K<1P<4HA.P<1G7-M>2D7.MC8H;0B2(B9/A3%C=,L=4A3'>;0E;2A7.=:08.&9<CHGJJPLVTJQUTMXNQSOUNQOYVTMSJMWXZ^[__Z^degen|==àţ¡¡¦Ĩç¤-,&&##$$%%)(&}&.+{!y (x'1x1^ +'+'#"%!1++%*)#'!)$(%"!.'31)%(")&-(-'$+&##*(,&.*+$-+)%(%""51-*1,0-*(%".+63++,(0.,)0.,+7310+*63)%3/1/:5*(871./*8696984,540/;:?<71968597519874/,@>6541A@FD:9?=61:8:3;897B?<;<7?=7450D@?=B@ED971/=;;9HGKG=<EB@@85C?A>ED>;GBOH@>>:DBFDLIHFLJHCOLKJIEum smzpsmyrvnwpuozquworkrm{qzurhxpyuwmyowmwk|stthwwl{uui}rt{oyul}s{o}t{rtntkvkznxpwjznwppdrumyp~qsiyzowp|qwl{ozqui{ovjvl}qsk}rqxl|nrykzlzjznxk}p|q|qsvxp|pyoyfsgteuB6u?3K>2SF:MA6OB5M9+P?4R<4Q;.NA7H;.R90SD9N7.K@6H>3M?4KA9C7*C7.I:2I<4J?4I<3L7/;4+B3*BBCIFCNKNMROPOXUMQNLTWQPPPLPMTLQW[ZTZ`c]fdcqc|CB¢ ġƩæĦ**$$$$$$$$'&"!#{#" "x"&z".|..u-[+!+(/+$ +*&$*&'$%%(%',((#/*%#"*%$'$(.-%!0,.,%"0/.,-+$",(-)%!1./)2/00-$)'+'217063(%*(52,*+&:8..1/.-,&.-&&/-0/867/=93-0,4.=853>8850-52:9220/0)=<:798B@;9:7<;43?<758476>=;9<;@<E@7574<;<8?=DC7565B@A@FC98A=GFA=B=?>CAHE;:HH?<FEGEGD?>FDKJIAEBMKKIHELGGEyu umvpwlzuwmwr}wwq}uzruluj}utkvlzq}txqznv}u|rzs|swmsqxpxn~qzovjvq|oym|nuh|s{r{p}rymymtizo{sz|rxlt{rxnv}wlclb}qutjzq}pzp|rxk}w~rxmowkwm|mqeukrgtfymzkyl~rwlqgyiuxltE3r<:k43q85m32`'&f*%_(%U%!V!RWS!EJ" O5-^M=UD9N>4ZD7TA3VH>W@5SC5Q?/S=3[K>SF9O>3R:2M>5YB:M;1PA7PA7UD;M:/Q=6K@7M<3RA5R:1C80G:0@8-B2'G>3D6,?GIQNMLSKPRNMUUUWVO[NMPTNLOOVN[S_XZ[[fedcgdl|CA¢ĥ¢Ťħ¥ŧĩ**&&)(&& ""%}%+|*&|$,|**{&'v&"o"b("'$)'($,&&#2*( ((4-(##-$,%(#)((%.'.(2+&&!+#(&,$1-.)%")'(#0-3/-*0+*)/-1.224-..)(0.54-,**3286,*+'2241-+32.*31$$0.75:7,(A?21/.FD:7:553983.63>=31<90/64HEDD52AA<:HE43649894=7<<NKBA76HE>;97KE97DCC@@@@>==@:EBA:A?=:FD<<C@LH<:HEEECAGDGFFCMHNKFDEDA?GEEAxq{r{uysyvxovqmgwxt}xx|p{ozmxmulwnsxmum|qznzmvn}s{o}oumvxnyntiwjzons~twltozoxl}vysuewn~s}qozlqwkuwmvoyn|rypuhunuktviuynvktl}qyn|n|qwlxozpyf~qvhsxg{o~s}q}t|jzk}F7p=9s:7q::e*)e0/\"[% Z#"[!VQQO#!NY7,U=4\E:YD:YJ2OB3SA8OG:,';5+)<4,*2033/*850/EC861.<944?:8763??0.53:98541:9@:43438763638697;742B>A>DB?==9=<?>DCDCHC?<DAA?C>86C@86<9B?GDIIDAIFDBJHDACBOLFDBAFDPLHGHFC?FBKIWUHCIFLK{wwvn~wyv|vxoxxswp~yw|rymxk|tyqq~wuxq}tuzryn}s|s|s{qxl}t|tyuvvzsxowi~wyrkxnuk|pxm|pyr{ovmzqvkwnyp|p~u{pwsyo}s{psyzqxq|qxozkxkyp}tyn~s|rwl~s}p~rwyvkvl}swj|jsb|J:n2/r42r87i.,]"!`0/[*(SUY!!TJON#!P:0_G<_JAWE[G?W@6SC:XF>XJ>U@7ZF=UG=ZB4J92GFMKKNPTKROPQPTQSSXSRDMMWHM\TU^_^`b[ichfoi~MJÛƥ¡ťĥǤàƥȧ£ƫå&%(~(&&%#$~$ '~')' |u"x!*t*#s#$e*%"(&% % +$$!""6/,&'$&"$ &!/.)($ ')&!4*-(.)+'%$,'//&"+&)''!//*'=91.(&62-',,4./,51+%-*0-3/3/3/6163&%.*63.+53*'859342543.62;9:8741/,+<:>9#!74;9:67484=<<;?<=;C>>6;8A@HF:985:63/61B@<:;8><?=@>::C@<:DCJH<:DCCBA@CBICA?@=HFDCHEGFMK?=GDQOLK@>IIQKKHIBB>CAzt yt{u{tzruo{tvzq|t{sskwystnzr}oxmxqtzoyqxn|tv{szkwntp~wrnuzo|p|rr}pytyoz}oum|t{pyxmyowxouvlzn|nx{rzpymwis|n}uzos~v}pvm|p|s~t{o~t|w{q}pur~qxnvlznrysyg}uymzH:q?cKB^SHZI@[K>_OD`K@\B:WE=Y@9[J=\D;[I@VB;ZE;]E@\G?\E;UB9WA9WH>TB9VG>XH?[B:TD9H=.REHE=<=<;5CB87@=@>CC?;KIDA?>GDA9FAFBD@<:GEDBFDLICAKD=:HFNGJEMIC<E?PNKHLJCAC?JJA=IFxq~t{uzs~q{x{q~v|vvltpxsxtvpyn}pxm|t}v|v~tqizqv~s~suti~rwn{xoz~uyp}uwnyouxpxntvn}zps{vu~t{nwmxxszpyo|s{rvypyrzpyqzq{svmqftuwzn|qt}r}sun|puwmzozquhs}t~qqgwG;x74q>ZE;_IAZF;ZD;\H=]K?bND[G@\@8U?8_C<]G@SC9YG?XA7RC;^K?UD<[E?WD:\G=T@7YH?OC7UI?PC:QA7K<2RL@M>9F!JOBIKPORSRTTTRYTMLQHIMKVUSPSUX]V`f\ga`b{TRǤţǥšģǪŢƩŦǨǪƥ%% $$''"!'& |#{#({'s+z+!w Y*#  .*$ + &'"# (#2/$'-(('.&1+)%%"-((#2-/,0,% % )&#6/220((')&+'105044::.,-+0)31($4/750,3..+440*;9752..*849/0/4033=;5085934271A>B>9510=8=:BA4031869786=:B@<86,>:98@=:8JHB@B<76HFGFKI>=A=B@FC::A<JG?:3/IEC?C@ECJHF@GEGCIBFDHDLKIBFDIFDB?=LIGEPOLLJHGEur }vzstq}sp}uzo{uw}vzyo{sww|q}tzozt{q{sx}susw|qyowtyr~s|}uwk~x{ryzpypwmyxutv{rxpxzpx{p|tzmx|o~vzrukwwzos{rtxjzr~t{lq|rxh}p}s|pyp}p|o|pwnrzmxl|ruG:p98n43e1/a/,j'$[+(Y# Z$ ]##V W"M&#N""J$R82`H>^G:WI=`LA\J>_NGaJA^E=^NCbD>\DA\G?\H@]DTA7UG?Q=6UC=K60KJHPSYLSPRKVNROOQQNRQKWUXVPRW[XYdg]`ibf~QO›ɥȤƤŢĠƧǥÞƫĢçƨħ(&'&#~"%%21"}!(~'&}%,z,%z##z",|*!r!\ "/)0-&"&$! ($# ,'('%#*"# *#-((!,'$$'$)&*(.,5433-*+'$#('/+3.,$$ --&%.,*(&$1-.,//$#0--+0-752-&#53301//+1/?<51<<=6>:9287633252>955=:544/:79662=9;9=:>;1-@<<496=<C?><FBDB94<:C?86=7:7;8B@CBEDGEGD@>?:E@FEHHD>FCKIJFIHNJMLOKHE@=ECJGMMHDMJHCQPMJGDONIH{vzvz{r}s{rvn{q}v~t{w}v~uzzvm}su{tznxozr}vwkyrthv}o}r|tzuwysu{r}ynxlv}svjtvwmskyuxxyn~pypt|u{swl{q~vxo}q|m|rxlzo{n~s|r}p|owo~szl~s{pt}smwxn{otyzJ;s;9l31m:8i21c)'b''Y&$R^$"OP&#POS'#_<9\HZD;]H@\F>bLB`E>\C;UA9eOGY?7dOH]KC]B;XC;S=5TA8XC=X?7U>8YF?R>5UB:R>5K$!MLURQRSRSUNRUTOTKQLENLQY[[SX^\`hcgifhzQPÞàãƤţäƤŦŦƥãǥĦƧå§ƪ&&--+*&&!!&z&'~&v(w'({&q$z+e.+"$"! -))&'#(###!&$'#.+&$.*.)&%*&+)#""-'''.(2/+&+(30%$",&.+1.#!2175''%$0.938/97/.98.+>;743/BA920/+&C>858497633..+:633?:<;737572A?<8<:73<7=:>;<;>;>=GA>;=;96=<75C@86?>B?<:<:DCFDHGGE63?>E@B@JEHFA>HFA=LJCAIHD@C@ECOMDAJHGCLILJPLJGLJNMQN?>USKI{yxtvww{sqk{szpum~x{rvu{k~txzrxpuqw}~stt{y|qzr|sxzwt|s{~xvwrzpv{p}uxzqvyryv{mwwyl{n}r~rzlwyp~vxw|qtm|v|ozm}p}pwn|rpr}s~t}urzn{nvzpxlymqzGaLDeOE_F:bIB]NCcLCdG>`JAeKDaKC_H?aE=_B=ZJCZJ?VD:_H?XE>\A;\C;^F@aGAZC@aHAbB>^B>_LCXF=YIBVB;[KAW=3ZJBZ@:VG@TF=VB:^FAWD=M%#KNSSPTMETVVTSUPLLTJQMMUTTWZY[c`_bcrqTRȤƤàĤ¡ǥƥâǧ ƧħŨçǨƨťƤĤ+*-,''))**""&}$+)-+ x$x$(x((t%'`+#")%'%6./$&"#!!(!%+$% $ ($2.-*!)%(%/*,'31,'%#0,2/%$-(2/)$-*,+1..+0*:8--)(# 2+851/2.542/-+6,.+53533-1/:7+'0-3.0,?;-*54;8:684:9/+:8866130>:52;4@=FC@>:8GE@>GE96JE@<MJB?84A>95IE?>A=?>B=OMA=HF?=?<?=D@E@GFIH><A=DAHCDAECLKQOLIEATNMIEAQPLIMJURLIUSHERLJI{tzsx|wqxxtwvqznzs}w}wxnxutm|{t}ttvyyxyxqv~w~wyz~uzt}trzq~qxv|syvr|}qzp|qzryt~tzsv~}suvm|nyw}tzm~tw|lqz{qzts{mr|vvpukwluxmxr{o{mxj|qw|F5s<:k40h40m+)c('_%$d$$[#"YT""TOU! HV<5eE>dE=cLBeTMeJB]H[C?]G>X@:XA]ICYC;U=6R=7[G>SA:BACA:7JIHGHF=8?<GDKHIEHFPLLKHDB=KID@PLIIOLCCLKEARPCBFBFCVRTSSPIDOMGEJGKJNK}wz|w{|s{tv}v{r}t|v|owu{t}tzr|ruo~tz{rv|nw}szo}s}uvx|puzsymyuxyx|srywr~rvlukx}vqvys|youyo}svn{qqr|pr~rv}s{twptzq~u}t{pvly|otwxl{n}q|st{p|KArDCr86j-)\-,Z#!\%#a!W" W'$OOM FO%#X71iOGgJCfH=fMFhHDkOIbC=`I@bKDfKDdMEgLFdF<`E>aDZ<8WA7]KC[IAaHAXF=ZB>^?:VCS74WG>U;9N($ULQWSJJPRSSMELGMMPOPTUXY_aaYebdeniy\ZǣƥƢġǩȦǣƨģǧȨȩŦǧʭƣȩƪūŧ*(-,..%~#))%|$~*~*%z$!|75"z!"t`%%)&# $",&!50/,*).+73)!,%/(1/'$,&/," *&%#,)*(3,/.3//+5-)$4/20/--(:8+(-*0-.,50('0.9651813..(<820/,>>4394*'/,:80+87=90-82615.81;9:7IG=<;9?96/EA73CB@<;8:8:686A:A;B@A=>:LI>:HHA>=;FDB>FD/.D@NKFEA=ECNL><GFUOQKFAHFJJFCKHHDLJLIROHGKIEBLJFBJJNIJEPPKJLLONvo||xws|s|{}vytxzr~s{|u|s~wv{tv}yu~x~w|rvyq}s|plxxs|mzq{zr|p{s}tv~tyxxz{|qysuszr~vsyo}t|sywh~tyoyxvy|ux{q{rv{pyq|pu{utvi}lv}s}s|u{qzN>m66o;:k<9f31h*(`-(X$#WSOV&$IMP'&W:4dNFhOG^HBdHC^LAcPEaI?bF?iIC]H@iPJjKFeJDWB<_G@dFAYG?dKEdJEaF?_NH_HA^F?^G@^H@ZD>[C=[KDbNGZF=]HBUCX@:R?5W>7M81UE>SA=U>;P'!LMSRIVRRQUKJRQPNRVRTSUPebYb^gdblm}`_áĤġǣǣƩ¢ƤʨɫǧŪŦȨĤƢȦĩɪĥŪɫ55..))'')~'0/*|*%}%,w+-v,#x!V $#"'#$'% *%##.!+'$ %# #!/* /'*%%#732.6-4133"4-)&,).&1.633173*%, 0//..*,)/-><.'1*94.,62-&=7'&+):60-.'4151;953<995:5>84196/.64<:E@<773><0-MLGBC?=7@=:8?<:8?<@>65=9=<?<;9CBIG?<B?B>BBHHLJ?:JFEBSNMIKFECKIEAEBLKGDIFOMQKOKJGPOHDLINLUPTRQNJHJIGDPN~yyv}x|~v{yt{s|w~wzqywyq~ty|~v~x}t}u~uzy|zyrxyyqr|ru|rwwxtyryryzs~txmxoxo~t|{vn|oyuz}urxvzt{p}s{|rykv{osu}q}rz|rwwq|qs}v|qwwy{otzpuQHn@cGA]D@ZD;bMGdGBbKCaEA_HAbLGhMHdGBbLF\GCcC>aD=bB:\GA_KD]D<\E=[GCZGA_B=]G@_GCZA40612143<<85F@:2=:?;<8==?<<8DB<;>:75DBD@97@<:4D?B@<;@@A<C@GD76KGDBNMC@A=;7C@JFMJJGKHA>OMDANKGCJFDBC@HBHFC>BAKJMJNKNMKIOLCBPLVURNUSQNQOzu ~z}w~{}v~t}uzy{{sw~v~v{vvr|sy}{sxz}sw{uzwzt{xyp|}{pyzvl{ssz~r}u}tyq|vxw{v~r{q}v~tstus{{ly|psz{pu}tt|nu|uvzsxz~pvp}p|szk{|tvufuM>m?>k85c11f-,Ya*(U##\UNP!!NJM''O<4eNFbLFcHBgKCiKHdHAcGB^F?bKBhLFiGCbIBeLB^A;^ID[@8bLEcG@];4bD>`HC`D>eB=\@<]C@X>5dB=`ID^GBdGB^E@^D>ZFBZB;W?9V@9O=6WB;ZB:^C<^C>YE?XGBR@=C?/(2//.@;7362?=<798?984H@:3<6:94054746530/,*'<7:9<896=<21<:62C;=9B8FA?9GC?=;7?>D@EC74;7JI=;EEE@BBNL@;B@B?@?MLKIHDJIIGQOICHGJILJLJRPOMJHRPECEERPPLCBSQKGPNIGZYRMHGHDVSz ~xw|w|z{xxxzr~yq|sx~|sxypxy~wzptwy~v{xwqwx{swx{~w}rxxxxuus{xr~w}pwxp|quzxt}uztv{wu{upu|vywix}o~o}p~uxpu{ns~uxmymuxluM>t??i62i88_0/a+)\((\$#Z%%TUO$"MK O! \95eGBlOKeE=eG@cE?jTPfIBaHA]D=\>9]=9^HCcF@iIFaD@cH@aNHdF>eNGVC=dF?cHBbD@^F?`A=cH@`EAdIE`@8]@<]C;W?8`A;aB?[E=_A<1-6/712,?7/+1.5.=94/2+:451;51.%!6482:77454EA72-,><:775<92185@<=<.-9896HCIDC@D@<;<:ID97>:B;IEEA@;<8;;A<HGECA<JFCCICGAGECCMKGAA=OKPMKGECA@SOLJEBLGD@VTMIGBPJQMNKTPIFMIYWWTTRKHztzzz~xzu{|wszuzt{vvwz{zy|w~s~s~x~ys|u{}ptw~vyzpuus~w~sw~wz~sszt{x{q~t~u|y{{wo~v{xymyzwwtyznuw}vrp{{k~r~svuuyJ>xHGo<9a72a)(Z&$_$$\WV($ZRR%#JL!!Z<9dIC`D@eIFbG?fH@kC@eFBdFBjIC^C>bJB`LD^E=^B<_D>fF@dMG\@9]C=eG@a@;\?8a@a@:dD=`D?YB9Z@:aD?YA>[>9_IBaC?aGB_C?UC>[D?X?9V@9V=7TA7U%"STLNUJYTQLDKNMSPTQTW_``_akcko~baȥƥǨǦƣƣʩťȥţĤǪħȫĥɫʬĦɪĦȫǦǪɮŨǪ32,+00))*)#|"*~)(z$#x#x)x)#s"(])&"%$*%,)+*$&$/*,$($)#" 6472-++#"('(%'$0-*&,+0.4-/)(#/)0.-+,*%-*31-$5095/*4.+)3*+%6/?85087?:547/50:8;93+3,00<7:931=683:8@=95107320><95B>::?<B>A?75?;@:DC73;9@;D@?=@?@>FCOM><EB>>B>?8FDDAHGMIA>IG@?HDKFE@MIROCAOILITSJFNMMISQOMPLHFPLMINMTSGBNJRNJHQMyx{~{z|wzz~yx}xx|uyzwz{~yys{t}v}v|u~v{w~t|vrzxzqyn|{nvs~}syzzp~ztyxw}tluuu~r}rz{wuyx{twszqzmwym}t|r~u}py|o{qq~tymvqH:n85o:9j..Z"e*'[%#PUO QOPOSZ2.^AgC<^B=e@<\CbC\A=^?:`JAZ@;dA=\JC]C=`E@YA8cC?X5/]A=cF@^E@^>:W<6W=5\=8`G?P:3UD?YA>[>8O($PJVNMOJLMUSRQRSRUSZ`gc_^kgfr{gfŤȦʪɨĦĤƦĦʮɮȩǨƦɩȨɫǤʨƧȫȬȩǩŦ̱̬ɩ//-,*})&}&((++'}'&|&*|*+x+%x%$n!r&_+.%!300*!#"&%,(($)""'&+#*%0%'#-(,(0-(!('5-.*72+#,$ 5/*'7263210-4.1.0.*&8.72/,:6<43/-)=74063750+6-70+)>=852.B?53613241..318795DC97=;5286:7DA96=9;;?>B?=<=<:665ECHD=;IFE@E>MKCB<:?=DDHE><:9FDD@MKLIKGGCPOQNPKJFCCMGOMIFSSKFHCVTMIGDOOQOUUEBGFTMQLSO]\VSJG|y|{}u|~w~xy~~vtzzyz~wx{z{|{||zzx{|xo|vzwwxz|w}u|su|u}wu}vz~~r{|u|tux|ps|ry|x|q~tvu}ttzsyw~twww}s|rys~qu|~yxl{xwHn42e11e1/c-+X$$U]"Q%$M JMLI!X%"V,,X/,\87c=;a>9^=:iDBcFB_@;j@=iLI`>:`A=aB;_;6`?;fC>`FB^C;[>8iD@]B=bGB\B=cB;_JBaD>X?;[?:bB<_C=Z=9cKFhJE_@;[B=`JCVA=aEAZA:]HAT:4Y<8P=8W@>X:7YA9ZGBS(&QPRJOMHAPNIPQSFWY]YYV`_`emiwihǦƥ˫ġåˬçƤǣɧǧƨǫŧɨŨƦ˫ǦȩȪɪǫƧƥǩ55'&-++*'{&+~*#z#&%*z*&&"u"#v "t"!_&4-$"$%) (#!("%0(22-*0-%.-+(74'$*%$"%!'%/'1..*0%'"%&$+'+'*&32*#*&'&,+..*&2*+&5/0*A?95;5100.9440.,94?>423/:48533>894=9DA@>?774?<=<A?FA>9HE72;:KJ>;EBHG<6B>?;ECCA>;?>>9IE;795=9?=CB52KCKG>:ECFDGEJGC:?8FACAEDOLSQRNNJKILIIEIFTQMGOMKHQMRNWRRMZYSRSPUSt {|y|}ytxws{zv}{}zz{w||w{}xwxzzxx~{y|wxx{u~zy~|rz|s~{tv}|syxv|wzwxzzoynxx|uzq{sw~vuvxx{nxyk|v}qyuvttxRCr?;l98m75d11a!XU! U" OQRRL TZ)'[(&X'#Z+*U40\64`1/_/-j?<_52b@=bC?_:9[@;eA>X2,];8c=;eC@e:7h@=i>;eG@\D?`B=fF@^:7bECb?;fD@bFBdEB_B;`HC_A<`@:^DA^>8cG?]AZ?:S?;W:4Z@;G"!MVOIIKJMHKUQUSSP[[[\_dddhq~mkŧŢǥƤǩʫơɪơãǧŦǬƧŨɫǦȤšŨǦƩƦȩƩǫåȬǬ32//#!%$(~()(.,&{%w*y*+z)/w/.u++^5#$(!( ,)$&##+(=: 1+-##+%)%3.,&40-"3)*),!+$8451%!/)0+*#20+*7..+/+1.61306.2/.*>=0,.*703,:264<62/650+1,(&)$60/-65<47.94<8:2:385B?EC=<B;:6A?><:791@;FB><@>;:GE@>HF85H@B@=;HEFCIDEDLJD?KHLJLGC=HF?=LHB@LIPOIGQORLHECAC=PNDAOKXVOMLGLGJHON^YJFNIQLLJUT\[z||{}~y||y|vzr~{|y}xt~~t}v}x}}{}v~{x{zwxvu{vuw|}x{|z{~u{wwxw~wxwurvwmw~vt}u{yy|tw{s{srvovtt{p{qvRBq?=e-+c++\*)Z&&W&$XP R MGK Q[%%_''T*'^++Y''[+)Z+*^1-]64U0+]96`76_20\62d84a87]:4c<9dC?_84`96a<8d?;a@?Z3-a=8\98]C?`77`?:\>:Y?:^B?aEAaKE`B=bB>Y<7[@;]=;_DA`C@a@>\>;\=:bKFXHD\E@YC=[FAV?S+%KYPJUMNNMWLNWTVW^Z[aegemjlkǢƟäȨʧɨ̩ťʪȦƨʩħĥȧͮȮǬƧɬƨæƧƧȫɭǨǪǫȬ3265-+)|(,+++((&y&)w($|#%x$0v..x.^%&$ $  2&(#.,$!+!')&)%'#/(#-%2/5/+&,&0&.)/(*(5*/'76:54-)'-+;8524,736/'!=<721-2.5/:5-+;6851/2(1(0,731,:4A?955420<77253=8B=>:933/B>B@@;76=7;63+A=B@6295=9=7A:B?>:HD?8@8=9A;C@<9FBGDKIF@DAGC?>HBKGLKOMNJOJLHQOKHDBHELHYTOMROQNRNJENMXTQLZVJGNLZXMIKIIGRP~yzxz}w}{~xy{|wwx{||{~t}yx~tzyzwzywx{x|y}yz{}y}wzzp{~z{yv{su~u{}~pw}r~ttzu|r{uww~}ot}rvJ=s@>m:8d&&`+*U%#[*)P$ RQT!!N G\ Y)%R(&Q W! Z+(^'%_10W''Z++\-,X/,d/.[42a0-\50_/.\:5^62Y0-a><^?<[=9j<9\72a=;a?;]62d=:Z85dD@Z41];7b<:W;7]D@aA>[40c@=V:4XE>Y=6cD@Z;6Z?;\?;^?=Y:4]FA\97W<:T82VC?S;7S)&OGINLJJNIHWRKWXY``Zb`hfqqpŤɦŦġʧƧƦǧƨƧȦǩŧƦĩ̬ȪŤǫƬȬȫǫˬŦ̯˫Ū͵Ʃ66+}**)..11}%%64*w*'z'(y',v,,x+\"' %*&%& (+&*"/(.&.'(&)&. *#+'10,),%0*6.0(4*41.'.+"!-,93602072613/.,413'30 1'7. A=,&200(411.32A?21<5;5?<533-76=;@>?;@=@;537597?:<8;7*'=;42968673<9C@D?75BA??C?=8B@93DBJFIFA;?<@>HCGEE?PO=;D;GCLIHHROKEIFIHJHNLHGURRMFDIFTQNIMKHGTNLHSSOLSQTRURLGPOUSPM|v ~|~|t{wxzszxwz{~{r{t|xy}~x|z}}{rvv|}v{~y{}|w|vt}vxx|}}}ut~{q}}wzyv}p|vutuwzy|}{o|mw{k~w|vSEoBAp<8h-,h(#[! Y!ST"T S K W! U R$ X" ]$$Y*&X+(Z)(S*'_-*]1-_--]0-T*(^--V,(b93[10[3/X84`73Y20a51^64`:7\41_:6\=7b76c<9]<9_:8f>;^>:X52_3/cA>cB>W;4a@=\?:^::dE@\:4\97Y<8W<9\=:^C=[?:Y>8XB?ZA;U;6S61^B@S(#MOKJILPNLLVWSM\Wa]_]chlxvǦǡɦŧţȩȦǨɦƣǩƨȨƧũ˩ȬˬǧȩƪȪȪƩ̭ƫƮǮȩɬɫ65)((')( | #{"*y**u) }&&(r')x(/y/#`%+%+(-(1)'-()#%(&$0-+&/.40,)20" %$)604-'$+*/)1,+$'$52503-<2/*.(+&1-727-9..,)%74423/?26295.)D>.-514.95<;;88450A<=2:12*;6>8.+=;64A;9653:78886GC>8?==<LJHF?;74IDNMDDFCC@GC><?:@>C?GC@=QIFCJEB?B=GELGSLFAKGRKFBKHLINKHELKLHPMRQKGPOYVRNPMNMQNRPQO\WNKNLURSP} }~~}xy{zxz}~x}{y{~w~wyyr|y{x}~|w{~{|zwz~yv~wt~xzw}zq~}tv}vv~~|w~}rz}}x{{lxvqwxOAm=;p<8g-+].+b[(&W$ UX"!MPYT!['%X'&W+)\#"\('\*)XV-(X! W&$]/-[**W.)\1/Z52b;:Y43[,*Y.,X52]31]21T/+[41`96\74b85`33Z30]40a86_<9\97^:7Y98^=8W98X63c@=Z:7Z62Z42\=:T:5fGB^=:V:7X75U:5U73X?;S60V86W<:S;8H'$KHKDQOOLRPSTU]P_VdaekevuȧàĤȤȧĢ˩ʬɨɨ̬ǦɪŢ˫ȪɬƩȩΰɪɧ̱ȩȩťʭǫ˯ͰʭʯƮ111/%~###!{ '|&*)&w%/}/,z,1y1'p'.t,^#& '" &-(*#*(1-/'#.(*&0)'*#53,$/)1+/*,)(#0+$"-$50+)(&.,*(/-0,823-1,=532<54.+)842/6263:::4640*7095;8=8541.A=;7>:GD/+A;87=9BAB?;::786?=41?=?:EC;7AA@:E@<<?<:9C>CA><EBA@FCB@98B@=4?=NNIGFDLIHHB>NKOLGDPMHFGBLJKGDAONOLD>GBSQPKQJVRXTTQROPMNJRPYWKHLGRNXW {~|~y}}{zzz}|w{{z~}wxs~|~wx~u}v}|yz}y}{~uzx{tuyxy~~xx}qvwutq{{QHpB@k=9f('c&%^ Z.*T%%V&%QJY [#"U!!Z&&\&!]**W)(_%"a$]2.`0-](&['%Z('Y$$Y#"c52\('`1._(&X+%[0/b42_1.c43^42\63e52`53X1/Z3-[.,`93^86^44]20a65f<9d74a=;Z64^@=Y52U74_85\<9];7U2+[=6`<9[51T61X74U=9U73]:7P1.W;8W:5N'&GGENIHRTRKQYRZ]eYdkjq{zyťƨʩɨŦǩƥȨƧɫƦȧŦäƥǦǨɬǫȬʬǧȫǪƧɫ̭ˮȧȫȪŪǭ˲::++-,.-${$(&$}$ z )|(1x0*t*(w('u' V +#-+)!&#+".+'' +&.(%608,'$*'+'+&3.)&3-&!/&)&:3(#,!1,&#4-0.2-4,*'4.2/+(97/*1-4.,*4.503,2(C@=90'7073=97620=9749396FD>=>7545097C?:931?972A>JG96?=@5C@A@A<?8EBB?=;GE?;EDDCEAHFECFF:6@8>;@>GDEEGDB@NJCBHGEBE?KGIFHFRN@>MIVTPNSPVROMJDSPYUYWOMNLXQROXWLI\YTPZV| {}|}}}~}~|y|yztzzx|}w~x{|wzzx|x{~z~{vy{wy}s{zxv~y{}tzyy~tx}y}twvptxvM:pC@i74f2.b%!c('X QRPVY$!XS"a,*a*)_ Y# \11c)'T Z&$^%$]%#^'$Z.,Z.,Z20Y*)\)([,(_10Z20c,(]/-d3/^,*a42a84\0-\1-\75j;6`30_63_51a:7d5/_63Z74\64`2.a85W4-Z97_2-^99P4/W84X85O92]<8^30\<;T54V>9^<:V74WC?Y87V<8R'%PIKMKMPJQPOSaY_]_igh{yyɧ˩ȣƩȧǨȦƩȭŧȨǦɩȩǧʨȪȩȪɬƮͲǨˬ˱ʪȩƬƩŨťƬȬȯǧ;9..++///z..},+z+w2y1&r"*x)'z&/x/*b-.)&-!0(-(%0+/'*"*!+%.&,%(!("0(% 40.),&-'5+,(3+2/:41+62/)?83*5.)%2+95.',%<81.41.+;53.730+3130/'733-32=864=:74*(/-=;:74-?<@;@>98:732?:>:?8A;=9=9>8;910:9EA=8B;CB73>=GAKJ?<B?>9GCHDA<FE@?HDGCHEGBIEOMDBEAJIJDNKGCECNMNIOLJHPLRPQMOMROTMVTUQTMQMXRXVLKVTZXYX}{ }~}y|x~}{~z~}~|~{z{zv}}~{~x|}xvz|{zs||}yz{{{s{t}t|yyvsyxrz{xv~~t}xyxQDp@?g53d-,]+'\((Y%$QS)(PTX$!Z#"YX'%^$!`-,Y'"]%"Y''X$d0-`*)\+(\'$`)(\,)_,*],*^.,\-,`52`&&\0,^.,Z&%`&%Y/*]/*b98b20a95Y40^/-f21Y31]3.\21`31`52[74c73Z.+c54Y87\75]32a65P1,X62Q0-W20V/.W:8W:7T94W4/U65V=9S74U87L74G!PNMLEQMGPZUa]a_^icr + +ʬƧȧģ̦˨Ŧũ̬ ˩ģ˪ȧɪɫȬǫȨɪʫȮȬʭʧŨƪʭʬɫǪŭƩʬɫ˲33)((&~&}%*}*#{" u0x."v"*v'+t(.q.$Z$+"!* ,"&"(*(3+#+",',&.(827//&*#3)'#($5,>3($% 1'0'"3.3*60-(@=/+963//':50,65625/.-.*2,;9;7@=?886742)954+75DA54210+42B=93EC;6=6IEA=A?@;=9C?B@C?87E?4296KJ<;EAC>C@HAEBC<<7GCLKD@HF>:QLHCDBHEIF?<A:MJKFIHJISOIFKFOKQMQPWSUSWTUQQMC@KGLKUQa^SNPKUTKIZSURVPWV~~}~yx{|~~||}tyy|zz}{u|uzw~~y|uxz{{wuy|x}v}|t|{z{{qyzsY?k<:f22c%`$#Z#![**SR!!U]&&X_)&`($T#]"^'&]&$W# c-+V/.c%$])&`"d)&a%%^.+Z,)^(%\&#[3/]-+e-,^.*^#!^40a22]*%[(&^31\*'].-[-,d30^-,^53V31`3,\63X.*b3/X..f87a2/Z/-a87a31S4.W1.V40_:8X1+Z:5_97R1.[85O0+Z>;1/.+:60,41/)"7/3+2.<54/0&.,<4620(DB3.;84.?:<:4+9493;874A==4>7<3?;52<:?:87HC=:65MK<9D@@>?<GDB<MKE<DCA<FD63:9C@EAOMNISMKHC?@9QIE>MJKIPK@;DAPPKFNLQOPI?;FDQPVTUOURYT][PORNHCPMZX^[ZVXVVQUS}}~|~~|z~zwy{|}tu~{z|}~}|t|w}~z~w{vwuw}t|svqvtM?d65f2.b)'\ QWNW^# a##^""^b"Z&"\((W(#`-,a,)j0-a%$V$$`('_(%`#"Y)(i1.Z'#^)']'%]0.\&#^10`-'e$"Z&%[*)W/+X('^1-_2/`85f74`.,\'%b31b/,[:6b60T,([63X1.W/.e41\*(X40f73W,)_97`2.^3/W41[0+Z20Y93^96X30S/-V7/S:5V87T62T61R3.J)%GNNMQSMQT]]gdbdnl~zyåʪƦ˫ɧȪǧɬɦȩǪɭɦƤŧʧ˭ǪƧΰʭţħɭɰ˯ͪʮ̭ɬȫ̳ɬʯʯ̱ɯɬ.---!|!*)'}'#{ z #}"({&4{1$q#)v(.p-&\,-%."+&+$4-%/*/(0(-%(%0-/(" &.+"(!+#* 82# 62512/2,2(-*7&+(/!)3-74/#.))",(=:-*1.;8632,/.60<6:5:3<4/'51BA>:B?>:>:0.20?;=8B>/"40B:31=8<6DAB>A>@=HFGFB@GD+)CAOMEB;7FDA:99@<C@IAQODB>:A<GFC?PMFFJEDBIEPKOLNJLFQMMIGDIHVSLJMKGEMMSQOJHFQOXTPLTQPOc_POVRWT[TXS +}|~y~}~y}|x~}y}z~zy|y~~zwy~yy|~|zzv~vzvu{zwyz~tN?d70n;:a0/YUR UYY# _Zg.+V" ].*\ X(&_+*]0-Y'&c,(b*'`&&i&%f+(a20`,*g(&Y%#h.+\+(a% `*)a0/b-*b-*_/-]-+_1/[2/[/*a0.^*%_3/^)(f;6b-,^0,]+(_64]5/c63Z50`88W0,\)(`53X0,T+'X;9R50Z21\/-\73]64Y4/W4/]74S32S51V53O-+R81S:9T52L)'ILNKKRVZWS_[\egi} ǦȨȣǥťɨȪͮȪǪȧɪʫƨ̮ɬ˫ɪƥȩʬŪȨȪʮɭʪɭ̯ͮͮʪɫɮ̯ŪɫɬȪ44..$ "v!z !y!%{%,z,$s$#x 3y1+r(-r)[,(3)0&4'%#-#&*(",!+!%1+*#+"4++*.(>41$1,.)55,(:83+,,.(2,,&;584800+-+95-,88A=+')#71CA1.*&8./+7390:4<7651-91=9;84+0-?=1-96B@@<8396972/E@>;30JFC@EB66QNF@E<9592FE:8B=LHBAE=B<C@OIEBOMGCECGANMEAMJHEROQNPNJGRPNKOLOMOKLJPKPMVRZTVRRQ`]ZXMHVSYW]\a_ZW][a\fd }|{~~|}}x}||{w|~}|z{~~{{{z~sww{ww}zty}u{xz}\Ki95a,(d--]#!`$$S_`! `$#Za.+b,*\#!^ e(&b)$_,+Y#_&#a.*T%a+)Z'"e53c)(a.+_-,`%$]-+_)([*)`0-a,)a('c3.c2/f-+d0+^0/\-+[)$_30]31b31[+*_/._+&`1-\.)\73^51a85d64c:7Y0/Y(%];5b94]65c32Z20Z71_97Y/*[20^44[0-U0+W82X63Q2/Q:8O/+Q/,R<7N&#SOGPTTPYZ[U`akj~̫ǩŧͭƣʩǦɫƦʩǪɩʭŨɪǧɮȨ˪ȩ̬ͬǫȪ̯ȭ̭ȬȬɮʪǫгͲʲ̮ʰʯ˰̱@<0~/-z+%{#*u)##1z1-}-(}(*y(/x/%s%'r(])(!,$/#&/'$% 6),'0+6)940+.%0)0*#"2/4/1)5.+ &/&2-2+-&7)/+/-910+/+)&E:2/?;4/2'1(,&+!:1:89.>:51.,978433<9C=859685>7=;EAB:5/0.GD2-1,;8>6E@?=HB:6@=D@,+@6A;@>80F?@>?=:2?;ECF@LIGAC=HD=7MK<;EBONE@A@D@EBLI?=LHQLTQJHXWRNURPM][QNSNNMSPXSSPRRPKUSWTID^[[X\XZWYTz}~|}y}w}}|y|{}zz{{~}z~tuw~}~}wvxvyzM>h@>g1.b ^,,SU^%#a a,(_#!_**X#b"!`(&^*"d'%a.+_*)c)&d*(^*'`.,`0.c3.e--Y#!\,)`,*b+*a.)c/.i51^%$e++`0/^..e0/b.+d41[+(_/+e2+W/+d0+^)(a''^0-b30a/*\41[4/X1-W2.\,+\4/X50b94^2,\-*_30^40W40T.+X62`>90.826153:86.8775>9>;9.<<@=85C<30?<:684G>94;694FCJGFCD@6-FBA<A>=<A;HDPL>=42HFIFGEFBDAJBHCJFC?UQICJETPRPGFGFMHIBFCNKQNPM@?[ZPNMKXUSNZXVU`\KGTTXSa] {y}{}{|z~y}yp}|~z|z|}{v{|z|y}}}qwxUBn86c)&`/-[Ra(&]&#VU#"\%__Y"^-'c#f& Z [)'c2/\&#\#"`00e%!`2/e,(d+'\+'T(%_1,^(%[+(^)&d31c54b+(_*'b/(a,)h/-[("`'&e52c2,d1.e30\3.d0/[&!i1-a(&e+([0.]1+[.(`94[-*[60^-,c63]0/Z65_42]<8V/-]97Z41]1+a96X:4X41[93U2-Y96V53O4.P85[74J($I UMEUUS_W\jllzĆɧƨʪɩȨǧɤƪɮƥȩģɨɨȧƪɬ˪ɩʫ̭˱ͭ˯ģ̱ɪǪȩʬȩƧɫʭʰǯ˯ˮ̴ȯ˱ɭ=;&}&%|%$z#0|0/. { &{%#x"!x!.s.r;~8%V.&*!,#2&(&''"3)1,5+'3,(".'#5./"(%-$3)1'1,%!41+'.-/)6/0,$"403%/++#.)3'>;4.414/*(;74295;:7400,)710*3074-*>6A;;5:73294@><:5/52B<=941D?DBA?98FA:0:7E>>:I@>;HD54D=OH>9DAFEB??9OJMHIGEBUPEAB<D?C=SNNKPMPNIESPSOOMROSN@=ROLHLKMGMKRPFCTOSPPKPM]W\WXW[V`^jfXU_[}~zu||y}~|x}vy}w|y{}|~tw|{sNAg87d,,eb#"Y" d!\ cg"^$![g%!]b&#e'%c(&d$$[)"e,+b-+a+)c+*_$!f*%e($Y$#`/,h&$g!k0'a'&c-)W*(_1+_1/c/,b52d.*[$Y1-^%$i,+a2/d&&j86c4.]++c0/a,([62d71]30d50h;7`1,c@:Y1.\6/_<5b3-Y1+Z0+\41W60a-+Z70c@=a30V96Z50Y1/X30]<7T-*W85Q4/S81N+&K'$PMKQXTY^[`bl{ljȡŠŢϬƧƤȩ˫ʧǩƢʪǫȥɬ˫ʫȫʯƪƦƧ̯ʬ˭ǩ̭ɯɭβͰʮ˯ˮ̳ͮɬȧʮʬɮʫʭ1}1%%)((z&!}!'%,},)~)*z(%q#.v-+w*/w,$\(0*,',.#/!*0)1%'#/",$.*/+5(1+)$4,:02."2'( 0'5/:.,$,*/+)#6.415-3-1-92/&3/4+2+1,>792@83+=-;676;72.;26-95;9@7;4B@62B>B?C?(&654/?>?:=8C@;6=<D@6630CBC?IG@>@=:8A>A;?<CC=:?=@>HAKI?>ICMIA<B>FBQOGBJEIHGESNQLROSPNJMHJGWTOLNKHFPNLIQNSR]\XUOKYTSNVSUPVS[XWTVTPO_ZyqfS@4~~z}y~}u}{z~}zz~yz}|~~}TBl75c(&X^^ab&#e-,a#"``((b!d$#d$$]&%g((c-*e-+j31c" b%$b)%f,*f2.`(%b.(Z*&f/.i-*`'#f41c0+f'%a.(b,,`51\,(_+(h71a+)b1-c2/[/*]31f/)`2/a7.`+'a-(d73`1-a51c<6Z-%a(&].+^3-^*(_4+Z-(b64Y.*b70[2,U2-c;5`64W/+[52_2/Z0+U61W30\61T70U<3W81N)%V:5J/.ILQWYWUV]cgvÈʨɤƩɨɫŨʨǧˬƪťĦʫ˭ŧȫʫɬǭʨ̯ͪ˭̯ɭƫ̲Ȫ̮ʬɫαʮʯ˰˭ͱʲ̭ˮϵ̱ɬ̲3~1,z+)})+y+!t&&y*z)(x(/y/-s+,w+)n)$^&4.," +$.)3*, '%!1+1)+'%/'0++#)2+0,/%-!-"#!(&5-,*31,%3+/+;73(8/922-('-(605220DA20/++#2,73313.940(2-6696>:74B;:93083?<62:5;9AA;9<7<:@<@=@??:MI87A;D?<8B=?=HEF?OI@<>9=:C@D@A?HD@:?:LF>:C?ECICLJLHSNRMRORMOMIEOHMIJCECIETQVTLKTPKJYWSSf_YWNMXT[WVPVR[Z_Zaa}wp^ZI.~~}v~~}}yy~sUCh'"`(([X)(\&#_-+g%#_" e j$!d!b# l'$a)(f*)d c)#f30f'"a)(e%#^'%`,)d95[+'d.,b-*g.,d4/f5/a1+^.)a+'e+'b*'i32`3/f41l0.f73^'&`,(a0)c/+^,'_9-\64b/.b1-W4.c0)g95c0+d61[,$\--\62^53e2)[6/\=3`5/W4.d<2_-&b4/X2)l;6V83Z60Z-+Z82[50S;3\61Y:4Q/.N1+Y:2R72R*&PMKPZY\agmxŠɬǥħǪǧŦŤͮȧ̩ǨȨǨʦĦɤĦǨ̮ʫɪŧ̮Ǧ̳Ǫʫʮʯɭɫ͵̮˰ͱͰʭʭ˰˯ʬгͳȮ2298((&x$"z"xt#}"'v'%r$&r&+u+,q*R!/'%") 0'%*$6/.!+.,)&,#*0$604/4'-&7/90600*301(/-/)7(9+>34)2/.).(+(5061?6A;*%(#E>807-1),'43:1+%>5:5-+;452=6>:5.6/870,?<:95153B@42;92,B<83><@==8=;LH<:76D?82ED@>JCE@@<JGECC>A<HDD<SQD@OHNKQNDCIHXTJCGDCAKIFDGCGENJFFOIRQVQZWZXZUOLQLZY]YVQ\YYVQNWVYU^[WQYW¾¿¾tkcUI!|~~}|{{}x|w~wUEf.+U_&#_%!c'&j&%d](&a*)a0,h+$a("d)&d1+]$#j'&_&"c+'[&$f1-f.(d1.j2*g.(j)!a'#c1,k.-c-'f+'a2-k:6_3*f61g0)f,&b2-j42h51f,'q30`3+i1/c1)e63i-*`1&e-,]1,],%]81`72a90c3-^50a42c30W,(a41g;4Y2-c:4Y84Z)$]-']81_;4_2-`73\8.`92^:5_;4X:1U1(W;2N2$T:1S51M4-R4.Q0&KVLPV_b`h‡ǤȧŤƦǦȪ˫ȧʫǦȨŤǨħǪƧȭƦȨɩɩĪȭɩǪɭʭɪˮȬǪ̯ʱ˭ɬʬɱƬγ˲ͱ̲̯˱̲˰@@.~-(x&(({,|+1~0.}.+{))s((w$+t*2s0^(/!.&"0-,$0 -)&!'#& -),$4++"/%/*0&1)2*;27061/**&.#-&<,?8$ (&9*6+94%:210-+'&32<53.2&0,;83,312051($=17.538694;8@>>94221:354974/C=HE=8<:74:995FBB>?<A<E?D?;5C;LEGAB=GAD?C??;PK>;>:GEFALK?;EDA?QKNGJFPKGCHDQLFDPHOOKCQMNLDAQMPNTPQPPMSPSRYVSQIDTQ]X\WYWQK[Va_b_²óÿÿ±zgcUC& ~~}{}pJ7Y94`0*X5.W8/Y6/T9/M63QTXY\]jh}ȥȨħŦȧʨȪǤŨŪȧ˧ũ˭ʪƩ˩ģɬȩʯʮɩƩʫƩʯɬˮ˯Ȩƫɬǫ̴ͲȰ˰ɭɬǭη̱Ӹ͵˯@@.~.3z2y"{" {3z2+x+0s.u$v""n 'q'[ +))/"702$-5.'"/%<24')&/%;4/((8-0(0,'#*#0-7-.(<73,0"/+(%:2-$B=-'.-*91214/:281:5<0.'50>5+*,*A93,71,$>9411-=771>9>9:6A=4-;9>=>;72=444@=(%92B@::A7D?=<FE=:@9?9:7J@@>?<EBEAIEEAXTJGHC=893HGQKQMLGHED?JEIDC<JCTNA>MKTQNL]ZFFNLSPOKUO\WTSYTTNWTVS[Z\XXTZVd^eb]Zü·¿þ°¼½ÿſ²p_WB*~}~{yqK:` af#!g&%b!c,'d0.f+%h,'q(#c+'d1/h.(e3/f)(h/+h3/f10c+(h'h70_,(l76i%"i80\*$n1+b+#q;1g0(k94`0-e5-i.*i3/i3/d82k,$m1(a0-b2(\4)b61f0-d>3`0&b/*f3*i81d70]0,a60e6.^4.d3+c4$]91c4,_/&_1-_8.c:3[8/\3%c7.]5,Y6*`:._50];5\4.[0'[71X92V8,[<7`82^=6^:4T5.S2)N9.T6-K-+M VU[^_g}##ƖǨɧǨʪɯȦĥήǦƤǥɦˮŤƪȩʭǪȪȥȧɩͱƪ˲Ȭˮ˯̬ȯǧǨȬ̮Ū̯ͲɬεȰ˯˱˰ɲʲʹ͵͵42-~+#u##|!#| x+w*(o(w,v++t(,u*/u.%\+,)2&0"2(1*,",)2)7*&* .'(&2(:0,%,'*#-&7+@0/*>65.,&70(&($:2>67/3$>670611,601,=31*62;5:2B:?5;5=874<81-3/4/:7>9?8=7C@=8<874HA72:4;4;5C@<7?:;3A><41/HA;7A<LFHE=9DCDB@><1GCD@?<@>QNFDD@KDA=B?HCBBQLLELFMLB;GCBAPLOKZWPNWTRLOHTROHOLRP`][V^[YUXS`\XS`\_]VQ^]e`¿ÿ²ſ³¿Ŀľƶ¼ü³ÿžþý¿Ĵþ´ſ²ĴpbP?.z~}{n@6d `n)$h,&g0,h+)a-)q.(h/)h/.j1,a(&e)%f4/d+(l3-j40d-#^*!a#d, ]/&g,%e3*p1+k3(a40a*$h60c1,e81j:3g3-a2-f/(j5)h3,j2)f4.g0'c71a0'd2,g0)`4,e5+h8.c1-k4.e4/e:1d1,c3/[+(d0)`92b5.Z7-_80b6,g=5a<3`9/`=3e:4W. e>1]90a:4_5.X3+e5.a3([3(Y5.Z:/`1(S0)X7-\8.Z50S8/V94R5-O/+XTYZaf$$ÏŢɩɧɪˮɩƤƧȪ̮ɪȨǩŪãȨŨȨæƩǪȦɪƥĦƨʮũ̱̱ǫɬ̫ȪǬǬ̰Ȯ̰ͬƫ̴̲αϷζͰˮ6v6,~*+z+++*z)s r%y$&w!0w0.z.%y%)n'/[2+ /(4&0&'',504%0*/ :33// '70#/%4+:56)0'.%(1+3*4*/,*(;5612+<6;591864+3/3/3-1';78,.*70?:=55/:663.)0(5.1,=::8GDA@@7<:@<70:866DA=7<5GA>:70EA50<:87D?@7A>DA;8C@B>EC>:CA><NJC@IEA<ED>;B<MKFBLH@=F@LKIHE@VTEAKGQMPKUSTQFDWQQOQOUSSQTPUR[ULGXU[ZRPSP\Z\[USYV]\½½ĿĽſ³þÿ¼ĽĿ·´½ſ»³ſûſǿƽ¹¼ýƸüĿľ¾¹ƾþ޽ĿqlcP? kA,m-(i41l61e40d4/i1)g/'_7-b5,k/*m3-i:7e4*k61p:2l8/g7.i60_,(a/'i7+o92i8/h2)d*#c.&f4(b;.i4,d=.n6.j1*f7,m8/i2&o/)f;6l6)k6-m;5h71b4&b6,^.$i5-g8+h8/d3$d6/f:4m?7k4-b5-^1(l81i=4g5+d6,eC7f<5_6,i3)k>8d;1c;3b5,`6,_6/\:-f7/^2(`52513,-#:4:5B90.9.0-51.&A=4470;81.B?>:<791989472>8F@A::697KAFC97E==6:8FE?<A?NLSLC@DA@6EA@=2+HAKG:8GDMJGCD>@:GCH@FCB=<;FAGEMHMIPOKINLROYVHEKENMTOQN^\XRXTLK[Y_\_\a\ZZda\ZXVa^¼½¶þ´ÿľú¶¼ƻƿĿĸĽžĺýƿ¸½ÿµƿĽſķƽüž»ſſƿĻøž¼½ƾĹĽƿ¹ļޏ|ztrolelg]XyRLoKEm=0e9/d>1h:.m:0b0&i:.i9*h9,j;2f?0c;)d8(e6-i5)n6.l81k?5g7,b0%g<4j;.l5-c8)d@5j5.j81b8+c5-k8-g8.l90m3-k:.h81i=1`80d,&g:2g/(n;1f:0f8.e50a3$d6'`:/a;1a3+`4)c7,f2+d=4]60g:.f:3[6([9,[7+a:0b91\9-[7+]4([2(^2+X7+`>5P1*T2)V<1X1'P70J[\h~'&ɥɨƨƧŨȧŢȨƤɪƩƬƨȨǧɮťǦȭĨǫĤɩȨƪŤȩĥƪȯƪɭƨŧʯɩǧʱ˪̭ǭƫɰȰ˯Ǯͱͱ̳ʴε32)w()z) w $w#s,s,0x.'|&*s)*u*(r&kV!-,$*!*1%2$+:2/$*!8+3/3(6-(2.*#<+!8(,1-)1(/$0-0*,#4/3-$ .*D=2&2+8290>9+3.826485+%>4977*A;C>;482?7<3:081?7>;61:5;4GE1-+'1+C@HD:7<4?8=684D@<9IBA;B:J?DA5096@=98D?@<C<A?JEF@FEA>GFGBC@@;GEE:@9NLD@QKXUQOROUOROOMKFTOGCUTVNSNRNfb`]ROXVRMebWVTPa]\Z`\WQa_ÿÿþž¾ÿŽø½þžľ½ºýľžƽ¼ƿüſ¼½ƿĽſºżƽ¹žĺǾŸĹȾżȿǽŻùýùȼƾɾƹƾŻǹȾɽǺĻȼŶŽĴôŸƳͰzx|usnibfa{]VvPIsPCiA7f5+j<+j=)h?2k=2g7*j?5l=/h9.l<4j<0k:,i@0f2&e;2f6f;3i@7_9/b;3b5*`:2c60\6/`5-]4.W2'Y7*Y3,]7+S0+SUd|)&“ǧƦ̭ɪȫĦƩȦĩťƩŢǨǥʫŨũǦƪȬǨȩɬʬƨīåçɫèǪƨʭƬʭɯƬǫȫƪǪ˲ɫƩǫɬªʹ̴̳Ͷ̳)s)*w*(z($x!)z) t.z.(v')t*,s+6y4,s*-l-Z$'1+* .+!0(7/(.$+#+",!8.1+,0-*3%)',)"+(1+( /$..<4*#, *!,#2-534-32736,1-:/5/;53186<8/'3*A:1,:353907084?<<4A=>95461:4<6@<JEB;KI;4?<75A:9765>7EC85>9KIB?GE?;@:A?>;LI;2EBDAHE?>B<D>EA>8IF=8FDC<?<HCRNPLJFC@KF[UOLVQSOWVQLQORN]ZQOYTZYYXWQZXZWPNb]`]\Z^\a_¼¼ſ»þĿý÷¼¼Ľ¼ĺƿſ¼ľ·»žƾļžľºƿü»ɿǽþúº¼¹ýƼüžƽƽĻºļº¸ƻƽŻƺǽȼ˾¸ɻǻǸöȻǺôƷŷö³²ĹǺóóïƳóƷ¯Ĵ°Ų~yyrqmng}]ZyWQuSGhC8i9,f/ `8,f6(c4)e:0e=/g8,k;/c;/h7+g=2j:6g:.b92^7.lA9d<0e:3i>3g6-b2%c2)e9-d80g91^7.[:/g8-`:,[<+cA5[5.`B9];1Z<3Y81V4*L0(QX}--ɩȧäĥǩŠŦǧŤŧƦťţƥƪŨƨǩũŪˮƪƨťťǨáȧħæǧŧɬʫƫĨũ˯˭ŨƬ˫ɭǮʫƬǬ${"**y*x(/x..v,*s*+z*$w!/w/-x-'y&2p."U'+4!$5$/(8*3*+!-)6*.$?391*%7#0$@52*80;3;14,0*6,3,=9630):33,=3;8((%<5631%3,-'1-5,@;;61*:8=56073710%@<:6@:A<;7B7<7<7A;>673?<98HFHA71B=EC=87.;6IA:7B;:884=9:7FB=9PO>>IBGEFA=<A?<7D>D=IDDB=9FDC?IBVUUSIDLJIHPMURB@KHGGQNWULJHFTRPMRLYWYVUSJHWUXTTOOLb_`XUT]Z½»ĽļþĽ¼ſ½ƿļĹ»Ŀƿýú»ȿ¹þ¼ż÷¼ĽĺȽ¹üƽþžżĺŻ»ƺŻɾöǻƽƺöǻĽŽùǾɾĹĹŶĴʺǺǷ̻Ĵ¶ǵŸ´õó³ñIJɺòųųijô²¯²°űĴðı}zzvytokie[TwRJoJCi=4l90b9'k9.d@2f>2i4%a8._7-d:2a8+c@3h8(i70fC2Z7*^9'Y=-`<0c;7]5.Z7.T2+P {,,ÖãŢĦŨĦǩǪĩǦȥȨ©ĦĦ¡Ȩơɨ¤ǩĨǪĥǪ¦ŧǮéɪĨƨǪɫŪƦ|z|{gedbZXRO?z9;3B>:8B@=784:483C@DA5.>:1/C@=9FBA9@;@:D>>;82;5KBKA=4B<A:73<9FAA=A>GFIEC<KFKHA>QLKHIC=<>7KBRM`[MIROTRD@TQSNVPYUOMNJLIWWYWPMXU[X]Wfa`]ZXebǿľǾûĽ¼Ľ»½ľùü·Žýſûž¼ǾžĺŻȿ¸ſż¹ǿȿƾƼŻƼƽû˿ƼĹɽżɾǾǺŸƸȾĺŻŸǽ˾ǻȻ÷ȽĸźɻʼɹŸŴ÷ķ³ɹķŸȸô³³®ôŴ´ƴïǴ±ŴƵŵ­ò¬ðĮ¯~zxsniic]XwWMwXQgE?f84c>0c3-`9.]9/R2*t--ȤŧƤȥǪŨĩǩĦɨåǩũȪɫæȩåƨĦƫ¤}|lifdYXWSC@>};?}=<9:y5DBE|C<~:<{89{7<9:{8A?3v36x2/y./w--s,#n"t"q u"v"(v(*z* r-u-+s+3t1'r')x)+m*T%1%/$0","1+(!'1 "3+5*1-/&6$.!;+2-%<-0&*(5,"5*.%31:16+3)3,6-3(4//&1'425/:4@641.+2*3)524/944#4,?9;8:6=56*-*;8B<:8:92-0,=950:2<4<0:3A<=;>;<.><99:4A>;3?;;8>;A<CAA=F?ECC9<5?;HEJHJF86IBC<F@@;NHKGB9PHNJGAJIDAKEDAHDPKSLZVZSIDPJVSTP`]]WVQUSSOYV\Z\X^ZgcidĻǿûŻƿĿúûżĻûƾûƽĽ¶ſþý·ùúºŽĺžĿſſżſºû¸ŽǿŻƾûĽż·Ļǻſ˾ĽƽĹ·ɿƷĻŽķƺƷɾùȽȻȺĺɻĸʻƸǹǺƶ³ĴµƶǸųǹôȻöĵij±Ŵı˺ƶƷŵįǶĴôðƵòñȴðƳ®Ʋ³²İ®65q//ƢũƩƨƪ£Þ ƩŦĥ{zwviga^\YOLA=:|9=|76{2>~<>8=:CAB{=@z:B}?B~?BA6z2={:>z<>;<|9=|;.,$0((&0&-'2+1)/&)$.%4-'%"$5,/(:/,&.!*$;3)'0&,'602-=7-(31%"**:1=4;8721):30,93.&8/A9:3=:<3503)83=5;02+6,50<7@<=694(&;593/*B7=;@?CA50FC41G@;6OIIDC>95<;HBE?<7;6:4A<F@JGIFIDKEIDHBOI;9IFQGIGDAEDA>MKIDPOJEXRQNVRIHNJIESSTQPOVS\Y^YZXUTSQ\X_]VPUO`\¹Ĺɿǽȼ¹ƽüƾĽƿü¹ľĻƿŽǾǼ¼ļɿȿľĽ¹úºù¹ŻƽżȾ¼ǽƾùƺŻĽ¹øżŻŹøƽƼĺǾȼǿƽƽǾǻɻźŹǺĸ˼ɽźŹĵúôǶǷĹȹ´òǸƷ²Ƹ²óõ´ƹ´ƵǷ´ųòƳóóŸıʷ˹Ŷ°ñIJ¯Ŵò³Ŷŷð°ô°±¦55m55|{vugeWRQMFC;|7E~BECDA@=D@>};;~96y3=~;:}6F~C87=~;9|5=|<8z6?5.7/1%-+3%1+B66+3';2=2.)1'71(+!+#;45.1,:5.$4,1/-#-(6/2'91.%5'87<60.902+.*4&870$3+4/8581+%5*72A<64502-5*4482;2=7304)EB<6:5;4?;:6?;;8C>FD=774=9>6A<HB5/72@;C?FE4/?9GBA:B>B@DCB<GAMF94MKHAOJRLTOJDSQLEIDPLLJUTWTSMWU]YNL]YXT^ZYVXUfeZVa^fcŹĽûýǽüŽºŻúƽŽĹûùƾüľȼ»ȿ¹ûźǽž¹ĻĻķžƽȿºùʾĹ¹ŽĻǾɽƽǽǼƻ½Ƚǻ¸ŹʼŹźźʻƺżƽǻźɼǻ»ɽǷĵóĸ˼öɹȷ˻ǸɸĵƼ÷ȸǺĴǷñƹŴƶǶǹͲijƴõŹǵóĵ³®ĴîòĴdzɶ²ƶ²ð²IJ²ð±¬ī«Ī98{h@ly;=y:;}8=};B<<~8<9B<6z1@;:~7:8;y96w3Bt;==>::w8?}=>~<:79y8;}9659|7=;;y9964y30y.3y1;y:-{,3y22{12x11x/,r)2w1*u)"wunupr&w$t!w!v(t'%l#r%l%'l%"k !]'0#3)1$8-.&1!-93-4!0(-#(/"2*-"2).&812)* 3(1?9- 0&500'/"0'<3+&-#3(9/30/)@50.+)-%,)2*+)<6:4A<6280925053<70-715/1*@<1)40JG=69130A<>742?:@;B:B=<:/.@:5274D9=:C@EA@<76GBE=:660B<F?B<@>JEFB=5DBFBHGA>GC>:FCKGOIE?FEIFIDFBPNEBUMZWPLSPUJQOURWU^[[Yb_ZW\W[XVP_[b_øúǾŻúº¹ŻȿƼ»ƾûĺƽżȾżúøúǽļº¹żúǻĽŽ¸ƻǾúǾŹƻʾöµúǻǽƼǻƾǾĶʿȾĹǼŻùȽɼŷɿõĹŹʾȹʽƻƸȺƶƸɻµĵĶźʾȸɹŶŷǺĶ˻ıôŷµĴȹò˽ĶŹƸɶķǵʹĶĶǶŶŶȵõijƳô±ų®Ƶ±¬Ʋ÷®­Ʋ±Ʋñ®ĨªªĩĬ:9j7d1Cx<;v66z3?x;>y;<:9x6?}=7w46|4C}=7x4>};:8B>EAA}>E{C=y;?|=:w8@{:8z4=~:;y5=~;7v3:u798;{7D|@=|;=x;>|<9q76z5<{94v18~7<~;3z2955x16~37z5>|:2u-)~)/v.7v41v..s+)y($s#-q--w-.x*#s quosyso+y+#o#%r$'w'#s#(r'!o-j-'^,1&.)6)'7..0$4,+ 0*8/9.-'- 1(0'8-,("1&<6/)8)6/4/;49.5,-70,&3-4,(4.2,801(41:41-.,-$4,;90'+!81/(5*3/<./(97/,B:958.946076@;=;:63&5/.*0+D<<7B:>9<4><=7GE94>7@;B><7=8H><7DCI<@>B:;9B9F>93>6B>LIB@FEHEGARLQI=;DBKBFAQNSOTLRLNIQNQOWQPMSROMYV]X[YYVa`ifb^e`qpƽȾºƿƻºúĻŽûýǿ¹ƻƽĻǿƾ¾ɽº»ºȾĹüļźľûĹɿļļɾ¹ƼǽƿƽȿºǽĻǾǼǽź¹ĸżƻøŸŹȽǽŻȺȼƺǼŷȻǻĽƺȿȸʿʽʼźɹǼö¹ǵȻǼ³ŲŴƹõɻǶȺ̼ƻʷ³ŶŴƶ÷öð÷ŴIJ´Ǹʴűƴŷǵñŵóijöŵ­ijƱųĴƶIJñIJƴ®ĵ±ñư³ĮíîįİĪîêĮĪĮí¦ǬƭĨBA:l7>u4A{@=w;@}=7t6B|;9w5=w;:x5B>=y;;z4;u8?}>x;=|:Az>:s7@y<:{8<775Ay>6w49~7;y:5{2;|9868w5;u98}76x3:}93z16{4,x)1x03u32y2-v*2q1.z+)t)u%q -t*"t!&l%qt#m"lp qqs s v%w$%q"$o#npl/l.&W(60.%2 +8/.1$9'%+.(,'/'.&+%5+6)0%6/+ 82+/%2#=3811(0''!>6J:620+;29//)*':7;3=45.?7<74050:4;34082617'4-5+2+.*;17341<2<95,B<97?84*B</,:4;:B>413*@9C=98>;GA<:F@733285HFA<;:<931>7?:GC?;F=UNC=MIJH;6?<:8D>KGKCNMA<@@PNJHLIPHRNNJTPOLTRPMWT_\ZXe`XV]YVSZWYUe`Ļûļø»ƾſĻȽƼĺǾƽŽżļĹĺƾĻǾĸļǼ¹úŻƾźĹĺƼɿȼúȻȿúɾ˿ûǾŽûŹǽƼȻȽžɼǽùɽȼɾƺɽɾŹɾʿʺƴĶǷƽʺĶǼȽǻƸȹĻŹƶǹǷƵźƻǺȾȻIJǹƷȺƷƵIJȶĵƵķŸȵǶİ÷²±ųµƴŴȷųĮŲĵ±ñȶȵ­ůIJDZï«ııIJŲîíííìĪŬ¨;9>>yx6w0;y:7u4=|:3u2B?9w58z8;|:7w4B{@6x2:6Ay<0y,:w36x35y2=x9?w8;8>x8?|::y78}5;46u06y3?5;7=7C;52?7?798@;=8:3C@JF>9PKB>?8D@G?B>/,GA:354A=;8GBD?CAB>IFGDNJRNKGSNJIMHPNOH`XRPVS[XTP^ZWUWS]X`^b_a\ieƽǿžùǾżƾǿĺöǾȽŸĽźƼżúȽƽʽǷŻŻû˿¹ŻƾǾƻƻȻ¶ƹǿŻĹƺɿǽùŻŸɻǾùķ˿ɺƼƺɻ˽ö˿ǾǻƹŷļɻȸƸȻ³ǵǽɻɻƻȸʼʺʾȼȹûŶ²ǸĴ̿ɸĶɹȷƷƹŰųǷȷƺŷɸı²ŵŲ°°ƷǶ±±²Ųƴŵƹ°ŲòóƲ°ǵ°±ůĵ³ïűñ¯ñ­ï±įȯDZĪƭĬǯȭūìʳŬDZĪä;:==9t38x56x5;x53w2>y;<}9:}7;}9=}93z-;|9C}@8u4C>4w-A~=By=7w6=};3x-5{24x25w18z52s16x5:z63z17t59{9878?;=4:6C6;972=9<3811,-&A7*!;78/85A?63EA?;=/;4><C;80/+FA<5?;<6?<:74192=9?=E?C>JIDBNK=:BAKDIGE>NEGCLF=9TNLILIIGLKQOHCYSTPRN\X\\SQUP`_ZVZXlhd_ǿĺŸøùƻǾĺȾƾżɾĻǽɾƾʿʽǿùɾ»ýƽǼ÷żźȽ¹ķ¹ɿŽɿ¸ɿķżǾƻʾƼƽȺǾƼȻɽȼʾƹȽƾĸɽɿĸƻɾ»ƽɼɻĹʻǺĶƺȺƻȽƼǻʻȺȺŸĶɼȸȼƻŹƺʿʼƶǼȻ˾ɼƷʾȺǷǷŷŵɽŮŵȻȺŵƸıŶƵɶƷŲıIJŴòƳóijòïƳƵɶųIJűɸòĮ¬óıŴ®¨ưðİƮɷųïðƶ¬¯ī±įŮĮũ°«íŬĭǰūëɱB?CA¡@y<7v3By@<|9B~=:|46{48x30s.0y*;|57{26w2:y6:|42x.9y8:{9;|88{34w26u2;w8:{6@}?3y24y15x/6w49y7>~;6v2-v,5y3:~:5s46|48|7,v'/u/.q+4v3/y-/{-0t.)y(&v%/w*/q,,t'3w/t!q +r('w&!l "p"(w(!p!#r"joquonnu-x,lpm,w*r+n(N-<2."1%0&2)81,!.#2"2(3 5$3%2(9/7+9'5)4!1-+"-".#,)0(,%5-4-1%,0)2)3,:+%;3.*906/.7);850;.=7*"903,60*$86?7?:62?8405-602)62<83+<44061;27/513/;8/,5/749651.#)'<5/.93;983@<1.MB>:;6,*85B?JFD8B=KFD?@?KHE@;7=:B>?9ICJCOO@>IBLEIENJ[TOJWRURSP[VOJa\WTXV[Wb`pkfdok·Ƽø÷żƾżƽǼǼȿż·ȾĺƼúɽʽŻýƸºȿǼǾǺŸȾǾƺý÷ƽɾźȽƼȿȾƾȿɿĺɽżºȾȺʿĹ̽ǽźȹȻȹǻ̿ȿɾǻƻŹ˾ɺξĸ˽ʿȿǺɻźɼƹõɻƶɺɾij˾Ƿɽø̼ǹƶôɻǷɻŷȺĵƴǸǷʺƹĵijĴɹɺʺǺɻµĸȷĵƴǷðȸ´³ŻŲıĴųŶĴıŴ³űųȶ°ñ³ĬõŰįƯɴ°°ŮŰŰűǯïųȰî­«ȵǬĭŬů«ū«¢==@@ǟĥ?v;@y;4s2={69u3;v99w85{15y39'#962(815*("61<9F?53,(1-2/<2E>720*@>60+&827175B>?6?;>5603/:6A:5386@@<9<8;4>:JHC?83C>C@@=50LJECB?OLICJFHFNHKGUQLJSNOKJFTRUTMGXU`^a[`]fcb^jfdb`\ķŹɾöźŽùøƽǾƾƼȿƻŻǽĺȿǼĽʾźĺƾǿǽƹûÿŸûƽ¶ʿȼ·ɿɽɾʿȾǹɽǽ½ɾõʾ˾ɽȼȻ̿żĹƷǻźǸŻƵƹöǻȷƽɺ˿ǻǺǺȼȻȻȽ˽ķʼ¶ŶʻǼƶµôʷǶƵʹĹôŷƷżóȸŹŵĺĸɼƸƵɻųǶŶǹƶǷijĶıŴ²ñɵȹŲųDZǷIJôǵƴȵĴȶıƴʳòůijȳŲîįưƲůıűîůƯìįůij«IJéħİŮ­ǯūƩNLDDħé6u4;}8:|8Az=8r49w69x5>v;B{?8{.<{:=}9?}9:|49v58{58|6<|::w76 3);87/4/3-63-%:3=;83>6(%6375>:205052<6/(443/80><E=FA93A::0CBB;EA;5D?>=6263D@<4D>?9B;@>E;<6A;C>FBMIA:D@86=6D?LGNIICNLEBPNKGDARPTQOKZSTRUR_\[ZWTa\db_[fe¸ƺƻȾŸʽǽȿŹƺʽúǽɿǻƼźŻ¹żŸ̿ɾȾƼȼĸɿĶȻƺƼźǻĻʿŹƹǼĻȻŹżɾźźķ¼ǺͿʿʽȿľƻ˼ǹǼ»»ŻǻȺ˾ȽǻŷͿŸ˿ʼʿɹ̽ǹƶ˼ȻǷŶ˾ɺɺŹĶŸŸȺȺ̽Ķ˽ȹȸŸŶij˹ȹɻƷǸŸ¯ɻȸȷȸ̻ɸ÷ƵŲŻ²ǸǶôŴƲǵŵ±IJɷųƵƴƵƱôôĵïų²®²òïŴ±İDzŲïɲñű²î°²ʱİíŲŭȱīŬĮƬîīéŪˮĨĨ£MLGFÞ5/(1*91/%>641<:72,&/*74504085?8;37/3,DA6196=;:7-,71926-?;A:<:=7:2?:84B<C=A:C?F>B?2-B=F@ECHC<5JE@;EBNJFCLHPKD@SQKHSPXSQNMIc[^ZOMjfc_nlȽƼöǼ¸ŻȾƺŻƻƼ½ǹǼǼɾźȽȾƺɼźǻļȿɽɿźǺƻ˼ɿǿʿƽɽɿȿǻɽʽ½̿ǻʿǼǸŷȻɿǺǼʼ˾Ȼ½¼ÿ¼ȹǹǶʽɽǾǺƻñȻʽξŹɼʼ̽ʻ½̾Ŵʺɻ̾Ⱥƹöǹ̾ȻʽƵɸĶʼʸɾƵĹĴŸŶƸȹȽȽƶĵĴƹǹıƹɺǶŲķɸȺǵʷŴñʼôȹǴƷdzdzȸijȸŴųŴıŵó°ƱŮȵïïƲǰĭðȴDzƯݰįƳʴį¬íįòƳŮ­ƯĭȶìǮū§¨ë¨èONHHæũ§5s17v4:z9=w98z49w6:y59x5+n*@y<4u17y43x24{1/x.-r)1}/4y1*y'8~62v/1z01~02s14z13q1/q*/v-2q/6x33n2/r-2u00u/(u&6s5(o&)q)+w)&y#%t$-y-*y(*p(-m,+t)$t!%p!-w-(q'/v-&o!"o"t!m q$o"$r#jvplmejnmjov!r!iu#o!'j$Y$C,3$4 (5 .!-%3,1$3,3(:.&8%5#0+$+) /%/*10;5,&- ,"%1'4/2&8/)%3),#.+D7+ 1'@8A;.,-#-'5/2/.)8/4)808.5194:2.*813,:-7++*.(/*53+'4+:4+'-(-'972+@>1(60>9(<9C=51B?/#>;=6C>71B>5-5.E>7696HE=;:8>9=8<8=<F<@6.-3*82MGKIJID?IGKHCBGAJIPMIGKJXTC<QORNSN]\c]b^[Zida_÷ȻǼø˿ƺȽȼɿ¾ɽŸȾ¶ɿûĽøǻɾʾ˽ȾȽʽ½ºǺýȼȻʾ»ǺļǷǹ˽ǽʼȿʾǽʽƽ·ȻûʼǿĹȼ˼ǽǼ˽˾̾ǻȿǽǹû˾ʼĵȺʾȼȹʻȸʼ˼ƺȺǼŷɽʼȺɹȺƸɼĸ·ȼ˿²ƹɺ´ŷǹɹ˾ĵȶȹʼǷƷɻǷȵɵƸĴŻǷ̸ʻȲǴij´ĴǵȺɹŵǷ³°ǵŴdz³ijð²ŲǭñįŮƲïij­íǮŰª­ƭıƯǬưưîİ©DZèƮĪâMJJJǫħ§¦£9w7.r+/w*5r09|75x17~5Bz=8{8:s3/x,4{.2x05t36r23t12y/3u1602t-1y/8{7/|-t0y,6x26u3.v-/o.2t/,q)3{1.v)3w2+o(2v0-v+-t,"p!'r&%t$2v.+t*)m(.o,1t/'r#'l&%t#r'n$&o#t#r#'r'n%n$q't&mm%j%lnkfhoqn'p'%m% o g-o*"Q%80(2*3)57(:27*+4";+,$0&7%4--!8/21 ;./&3#.$+#3';0:09,-$/%, 600*3+/(+"3$5*83-"60+$.(633,1+60+&421)=64.3(4+:6:4% 714+/*B8826/9.."73:2<4606,51E:<2736-.)B=<21-72844--(8./+<:?>A;82<962B;42;7I>?=C>4/GA?<B<HEC>HE?6GD?9DBGAB>QNKJNIJBIFUQPOWS^ZPKYW_\ie`^geȾƼƹȻǻʽƺǺȼɽźµƼɿøȿùɻĹɻƽƿɽɿɽʿȾǻȼɾʿĿ˿ʼʾǾȽý˿þõȼƻǻĿýǺɻǽƶɺʾʿƼʽŽ÷ʻʼ¼ɿξ˿˾ǻ¾ͿȹżʾƸǸȾǸǼɶ˾ŵȻȼȼʻʾȸƼǼȼʽʻĴƹǶǺȻȽõȾƷöǶƹȹŸǼ̹ȺȷƹķķǵĹĶɸȹóŷǶǹǺijǵŶɸĵ²ǴƲĮƱõűĵȳɸĮ­İİ­ĶĬîİɵ©ǶůƮîƲ®ǴƲíŲŭƭƯƭȲǯįƯŮëƱȭ­©åäMLNMħè¨åééçJH@}>0v./v-8s70s.2x.:}93t06y5<:4;1:53'4074<6>9.@93.631/-)61:684612-1)>7.+9-0)5(>7:7;6212.5360<7914/62=9D>B:;:A?<:A>:4D;DBHFIENHECA;74B?B=EAE@OGC?JHLIOKKJJE[YVQRI\W\W^Z`^dad]ǽŹɾȺƹǺ¼ļƻƺǼɾƹźʿʼʽƻʾźǹ˿ǻɼʿŹǼɾ˿ɼǼ̽¾Ŀ̿ȽǻɿȾɻ¾ȻʻɾͿɾʽ̿̾ŷǹ˽Ǹȼɻȼɹ´Ǻɻ˼ɾʸ˽źɼȺɽȹʽƹȾɼʽŹǻƴƸȺ˼ƶɽ˻ʾʽȹƶ;ƶƷŶijǹõŸɹǷƷƶĸɷŻźŶĹȷǸƵȹŵǻƶȶɻʺôöųɺƶƴƴij͹ñŰɴȺɸǴȸƶĴôȸó°ɹĵɸųïİðĮïǵǷȵIJǴ±Ǯĭ¬¬ƮĮʵūêŬéưŮůƭíŭĩUPOOğ¦§Ĩæ§QP;|85s4:q6:z:1r/-p'4r//w/Aw:6s3:}96u1?w=>v<95251=6=:EB411/912+;1A>527,<81+50A;NDHE87HFECBAG?HEHCIDKFKHPJWU[WMI][]Yfeda¸żǺǼɾƻǽʽŻƻǻƸĺþĺƻĹʿ½Ǻʽľʾ¾ʾɾȼʾȺȺ˿½ͿɻɻǼĿþǼͿƿʿɽþúƺȺɼ˽ſɽɽͿͿȽȻǸ̽ø̼¾Ǻʽȹɾ˻̿Ŷɽǹ̿ǽʽɼȸ̼ƸʾɹɹʾȹʻǽƻʹƸɾŹǷȸƸʻɹŷĴŵȺƸȹɸõǹ̺IJǻŶĶƶƸƴȸŵŵʼɵƵôȶȺŴIJʷǷųòijƳȵƺƵǷDzîıƴƵ¯ŲʶʷîƱȳ¬ǹƲdzƮȰȭƫƭįĮĭdzíƮ­Ūéŭ§ĭĬƮħQOUSǤǦŨåæ«ģŦĥìä^\3w03v18z45s1;v73v05z3:u68u5/w,4x13y2/r,4r-6x3+p)3z1/m-4x+;|83u10s.3r15p0*y)-t+)q&#k#.v-&w$+p'2r1.p-+u&2s00y.+l%,p+-o*2m1,|)"o%o 'p#)q$!o k $qm#q#p(o'm,i)i"l $p#"k"%l$%n%g"mj%m$hml kkun#h##o"$iZ#/<&1-,2%!31'60!+!+3'0*'3"1$6*17,2)1&!-&71-3&-#0#/(2**'4*8,*6/*&>-6.;3-#)%-"&$'$)0*#1(6181,%(+5/50,).,&";75,&$80;450903+72"4.-%?80,95427370=:82615586400(0,,*0-61;5F<7296>7><<8@=:8<:.*81=:@<=9=653C:C>FD=64,97B>MIHDMJTQSQURJHfdgcgfecɻ˾ƻźǹƺȽ˼ƻƹ¿Ǽɾ˽ȾȻʾɾʿȿþʾɿɿƸ¼ʾ˿ʿĿʾ˿ɿ¼ʾɺüʼ˿ʾɽƽɷ¼˽˿¼ʿ½Ľȼɺʽʻ̼˾ƹʺʾǻɼżƷʼ»ú̿ɿǼȹȼ̼ʼ˿ȸȺôȹƸȻȼɼɽ̾µƹɽƺʺȷȻ˽ȼȼ̾ȷʽƶǶɺʹɹȷȷƸǵǻŸŶƷƶƷ̼Ŵĵŵ±Ǹɹ±ʶɻïĴǸƵ³ɹŰĸɷòŷǵDzİŰɶŲijȴǴȳëįűůDZĮ®ȲìĬ®«êDZﯬëƱūŮƯǰŭīǭ¤WVWVàƨŨ¦ĩƬĩƯȰĩègf8r20w-1v.4)"3(8.612+5&?5.,&4*2,/ <.,'1,4*@4$,'5.)'/+5,0'2()%3)0*8,0&.#+)$8/6.74)$.-53:6;7612/0-%"*":5,$5+,%43/+74630.610-:53/6011A8<:.)=8-):720A<8484/.655/2142CB74B8@>?<JA<;=1?=GFMFB?C>MIBANKXTVTNK]ZXVc_ƹɾȼɽǹù̿ƺɿɽŽȼʿȼƽǼ¾Ⱦɽʽƻ¾̿ʾʾ¼ǿ̿ɾȿ¼ƺʿ½ǽɼþȽʼ˾ʾɿžɾļƾȸʻȹÿƽº˿ȽȻʾ˾ʿɼȼɼɿ˾̾ƻǽǻǽǼȿ̾̾ǹμƻʽǹ¼ƷijȸǺ˾ɺʽ˺ƾȽȸȹƹƵĹŹȺʺʸʼȺŸȻȹƵȹƶƳǸǹųƷŶŹǶȷƷŴǷƷǵƷŵƶɹĵóŵʺ°ȶɸIJǵóȳǴŶǷƸɵ°ıǴŮIJƵȴȵDzįïïıǵıï³±ŰįƭðëůƱȱ©ĬƯƬƯëů§USSRģĩŨéææ¦ǫæǫnl7q3;z8:v44v11u/?y:0q00r.3v./t.4w09w62p10r-4w21u15t55|3.v,2r0+o))u%.w,#l 1p00q.*s#&p%*u&'q'+p'2q-0w,)m'3t2%w$'r$p#&q$)o)'k!-s)!g "m'p%rk!n!*n(m$n" l $r!pi%p"g-m,k!p!)o'fjjd f bgmn$o"#q!l"cZ5$/5)7).#4#44$4'2-".!3"*/ 4)3%3#,'"-&2!! *%9,4%4)*#30&.$5281900*94./-2&2*2%&"'(#'#'-(715.<8+"60,&%#6.$*'/&:4>5"6.2('53/)2(5-3&4,1,1.),#0),(,#;9:7-'>26+71965.0.)'<33/2/42?:.-636220502,0./,;9<484@=71>85252@=97<8A>;8B?C?DBC>@<RMMKKHTQ[W_\\ZƼɻƽȽƺǻĶʾ¿ɽ̿Ⱦǹɾ˿ȾʿſʼǽȻʿǽ½ǿȾȿ¿ÿ˽ɿ̿ʾȽŹȾĽ˽ƹʿƺ¼ɻŻʼȾŸ˾ĽͽǾþȺʻɻɺɻʾƷϿǻŸ˿º˾ʺüɿþɽµɿʽ˽źǺȽùȺĹĴ˺̿ɻǸȸƻǸɹʼ¶ƷƶǴ˿÷Ƕ²ɻƶǶɺĵôǸȻǹŴɷ°ƳʺŵƴƶijƸIJŵƵŴİĵɶ²ǷIJðƱŰʵ±ĭƷŲƴıƲɳðǵƳƯê®ȱįëĮïƲëïêɰèȱĨŪêæVTTTš æäëƪǬéĩŭĪxw1p08w8&n".s-+r'6u./q.0s.3v2;?;OG53KHA;<;@>=;RPIC_^b]¸Ƚʾȿȼʿźɾξÿ¿ÿþÿͿüпȽž˿þÿȿ½ʽʾʿʽþĹſƻɿ»ʾþ̾Ƚɽ̿Ȼʾü¼ȹɾɾ¾Ⱦ̿ʾ˿οĿøǾȺǼɽ̿ǹɻź˻Ǿ½ɽ̿ɿȽͿȽź˻ɾʾƸŶȻʾǼȹ˽ɹżǹ˼ĺȼǺ˿ƷʾɼȹöŸ˺ǷĶʼ˺ȸȽòʸɼõǸǷƷȻɷĴ˹ɳȶǻñųȹŴƵȱŷʻðIJʹƳʸŰƯȴʵĮɷǵŶðȷİƹǹŲǴóƲưıódzīƴűɲůƲŭĬƳ¯ǮĭȲ¯­ǯĬŮŬũ^]a`ǧǪǨéīĦ¦Ĩũxx3n/2v/0q.A}>5w00p.0m.1l.4w39t7/q+.q+3y//r(2v2-q),m)/p-2u/6r40{-0r-.l-2v.%q.r-*n')n&,k'-t(&o%2q.)t(1o--p,*n)*w"!p#p#!u +k*,p)2z/"qj"j$h#"k #l#!o kj(o&lo"g"#q#&o!h"q `hjdfhehd f fi c 'c'I7444!3 82$6-/&02#3. 2#'+2!5&/ *%7(/ - 3)81'*". -#2%%*!2,*#3)(1'*")#(-$# /)913/8('"2*;4,&1"/)50,'' '#+#0'$0/:72*7-81)&,#92.(*#.*2-,&+'+%+#5/)$1)8600+(1$43.).#+)1,2/4.'$)#+&-#0(1.&&92*$-,,*,'1-#6210.*7551%!541+4273/+;5=976:8=<>8EB<5VP\Yùÿ;þþȾ¿½þ¾ǿɽȿ½¼¾ÿżſʿʿȾÿ˼ȼȾʾȽʾȽʿȼο½Ⱦ;ɿʻʾºɼɻǻɼ˺ǻʿʾƹýɾɹ»ϾʾǹʼǼ˾ʾ̾ʼǻɽȺǸʽŸɽ˾Ϳ˹ȹź˾ƵʼþɼνŸǹ¶ƹɼǸȽȸ˻ķʹƼķȻźɺź³Ǹɹʺ³ŸʺĵŵȶȺ˺ʾƹȻȷŴijdzƸȶ³Ƕʶɶıƹ³±ǸôŶɵǵŶ°ŵñƳĴȹòƳòƲıƱòıðİǴıĬéƬȶƯȯ®ưůŰįƯƯǯĪĪůǩ_[``ŦƫĦ¨¦ūŮŪŨƨƫĨ~5s32v/1s/4y18y5+n)6v3.q-)r(/t-:t98p56u3,o)6r2(q'5r20s.0v+0w/2u,%s#4x42v1)o'5m01q-0y.+w+.p-+r%1v.&s%.u.'l&%m#+l)$l!r2p/&o&%r#l"q"'r%3q1h%j#.q,&q"#m!%l",m* mhjf-l,g`ik%p$%r$jia"i"jcio lcX:%;!1027-6 4!:*&++:$+-6(3$-(-5&-$2$7&("/'51!1,0'0%0)0(.*&"(!6-1%*%'!3!"'0&1)8&=40&0*+,$*$).."' ,&.+(-'1,/)2) #21-"0#)&$.".*-,-)!0,#". 50'%1+%!,%812+5-65)&""+% 2,,%)'40$"%-(+))"2)4,-%+''!.+"61&&&"+#,' ++&&'"3.'-0-85.462I?7Ŀ¿ʾ¾ȿ½½þĿɿ̿½»ʿ¼¾ʾ½˿¼»ɽĿʾļʾƼǽ̽½˿˽Ÿʾɼǿþĸȿ½ʽǻǺ˾żʼȼȻƺʼŷ˽ɻǿɾʿʼʾɽͽ̼ƿƹƼɹƺȺŶź˾ƷŸȻͺɺǺŹȼǹ̼Ʒʽķ˿Ʒ³ǸȼȺźźȷƺµƳƶȺƶŵǵƶȵǶǶƶIJŴƯųƲƳǶƹDzǸõƳµȹ³ŶǷųdz³ðòıDZƷʷ¯ŮíƲŰȲDzdzïDZ©ŭij¬ïĩưūDZŰĪƬŰū^[__ģŪƧǮŬ¦ĨƫĨĩç©èĩ8u43z05q32r-,r+2t/2u0+q'2u0/t,-q':s3*u)4u2-s&*s(.q, r3t/)t'/v.*t).t,0r*.l.&k#(p%4s1.l-*o(&q$*p&.p-&o$-p)'o&,p)&q#&m$)o))o%r(k&'j$)h&-t))j()r'*n)+q*%l#f n 'k#jn!l!kak"e nf k cimd hckg%e$*j)%V-8/124%4#19(*00#5-'1 .8-)8.)$1+)%,';01$) /'+/$6*++%+',%)!4/';*,'((%2)+%2*$!'%1.-+,&$" '!/&/'( +&.'8/1-" 7-(%)%*'/,)#/*0+#"( )&& '''#"# .&4.# 1,)("&"1,+(+$*)--?;((71'%$!82++/-!'$ '&(%*'!)1&",!A%7!A+%D5,?-#B;1C4)A3,M&H4/U0&N;0ÿ¾¿ʿÿ¿ÿÿ¿½þĿ¾þþ̿ÿ»ʾɾȾ¼þÿ½ɽĿ¼ʽ¼¾ɼξ;żʾĿ¼ÿȾ˼ʾ˿Żȼǿ˾ʾʽǽʿ˾˽̾Ǹ½ʾ½ƻɻȾƺȺǴȷǸƻɺ½¼ǿǺ¼ʿǺɺ˿ɾ̿ƻ̽Ŷ̾ȸƷǷȺƺĶŹǺƸɻɻɹǹǶǺŵƲȶǴıɹƶñǹǹȸɸǹ̹ǷȵƸƳȷƶĵĶðȶĴųijijıƳű¯°ŮȱƴůǷñ¬ƶǴάƮĬİîëƯɵİĮŭƬŬDzª®ĩedhgťƯçũ˪ħūĨƧæƭȯ¤ħĩæŪ2u,,n*4v36q36v4/t/6w33q1+O8)VG;¿¾¾ÿ½¿ɿþ¿ɽĿ½ÿ˾˿ÿɾ¾üþɾþȽʼȾ¼ʾþͽþȿľͿ¼ľοž¾̾˽ſɽ¿;ƻʾɿùƻȺ½ȾƻǼͼʿǼȺƺ̿ɼ˾¼μ¼ʾȾɻɿɽȹ˿ɺʼƺʺͿʼɽŸɻʿǺǷƶʻƸɻ̿ɻȹǹǸƸȺƹʸʻµɼŷƷʺʻŴǷŸŸȷɷƵɸ˹ɹƲȺɶƵʷƶŲİȶǸɶȶɶŴƲŷȵǵȳǴïǹıñȰůòĮƶðųîɱéƱĬȵƯǯĭīĬìíɮigfeĥħŤæĬ¨©ūǮȬƫǮũƫ©ƭĬʭ3w.:s45m30s,5s12n,-o+0t--r*6v0*v$'k ,q*/k+-x,,r(,n'3t0,r+-r,*j'+l'6r4,m'-u-!m 1o//o-1r0%s"-m*-p*+j('m#j-p'.r.1u/(k %k"'o$&j&)h)&l%)m))j".v,%j$*l)e'i$&i fj"i n(s$k&l"*u(h&n%hfm`c +d +_ +_ +_e!g iY*0.59!43&4#0.6+>'104)4 7*!* 2'*"!/ #%,'%"1()+-,(-%!% 2',(' *$''"'% $"*)# ('##"""%%-($!!%% &!% (! &'- 5'4&2';)9'5' 2,6#4*9-$72,1.(-/?2*>9,A8+;71>/"=5F1+D<7D$;:-<1%>8-G;1A8,D9'G7*L.*H70A)#F4,G7/C6*M6/L<,I;1N9,QA6Z7,R1(K2%Q>0PE8Q0$ÿľÿĿ¼ÿɿĿ¾ÿÿȾȾɼ¼ſɾ½ɽɿȿ˾˿ƽþ½ɽ˿ʿɽ¼¾¾ÿżÿ½½˽˿ľ¾ɼ¾ʿÿȾʿȾÿǽú˿ŸɽƺŹɾ˻ǽýȽǹö˼¼ɸŻɻƺŵʼɺȻ̾ɼ÷̿ǽʻƵŵ˺Ƚ÷ʷͿ˽ɻ²ξȼʼǹɹȷɺƶʹöȹɻʷǶŸȸŲµǵdzŲŷ´òɵįdzƱɷ®ǶöɶĴǰııŴȴŲIJȱdzĴƮưDzëȰįȶįƭì٨«ìĪjijiħƨ¦©ƫĪǭŬêĩèŭƬêǬȭŪŨūǫŭ8u4)r'6q0,o(.u%7v56p2!h 'l'0o.8s4(m&,n*,o,)p($m)q(+q%1p-)n(2o/"k 5l30n/1l,'l&,m(&l%1r/+m)'o!+l+2l.2p01p//p,%h"$k#(n%j2m/(l%0j,'g!#o#.g&'r&(e&l%p"h*p(*l((i&og fhhkj+h*i'o%i _l!e giien#d# S 924>4</3#,0$3 /& .!+!"*"-%3%(2#)062(!.'2)%3!+$/%($$&!#,%!.$!#)!"-%2)$("&!* '  *#.&.#"$(12%1(<&"*/7. >1'838&>6):-&2)4 /2';4&?3';9+7% E,!9- @7+9.C6.3'E):$G(>2'9+!@7(@9(G2&<<7<4'I3'A,#E* J1%J5-J3(H3&G/)N:3I2)K91L;1M.(G>2L<(Q?1H4$I;1S;,O3"S>+E6"ÿ¾¾¾Ľ½ºÿþÿ¾ľþľĽýÿƼɾƾɿ½ýĿſĿžɼͿſ½ʼȽɽÿ¾ʾʿþþɾʿ˾ʽ½ÿǺƻɾɻ¼˼ǽȼǺʽǻʾǽʿŻ̼ɼɿ˹̻ɼʼξ˿źȽ˿Ƽ˼˺ɺʿȷɾĴķǹǼ˽ǸǴ¸ǻǹŻȻǺʽ˻ƵȻɷɼǷƶƶ´ǷǾŶɸƷʷŶǸ˽ǸȷõĵŵȹƲîŷƴŴƷdzıȳƳǴdzŮıŲǵƴ¯ƯįŲŬư­DzŮűŰŮŰȮªŮĭįljmmȦƧȯīŨĪūūŪŨƯŪǨūɭŮéĬūç0o-.s+.o)2o-0p+-s)5r/+y*#m 3r10r-/r.*w)1r,!r2l/(l&7u4*m&.l)5s0'r'-r+"m.o.2q.+n) k$l"2s2(i%(g%.m-(j% o -o**q(.t)(o(*t($r!%k$'h%(l'$d#(f'%k"c#j""g &j#eik#g&l$'m%&i$fkiie%h%!e!lijfgcecdN7020%:63(,8$++- +-+# &,',##(0#%$!' +)/)% % #!#/*%#+ .*&!! /6)&2,!+!--73#@'4+3/4-";3)3+!:1 >4(2)#:*5/D8+;+,&?4'3&3, ?6.;/%/0?2#:-9':-&C=(=;-?%G1%B-A.$E;8F4(B4+H1)H)A2!;,'@;3D/(OA3E8,G0#J7.J<.K9-C-#I;-P9*G7)EA3L1%L@0LA2N1#Z8,S8.L7,J9+Q5*NB1M2(Z@7UF1uoe¿ĿžþÿĿ½ýƿǾ¼ƽž»ʿžÿ½½þ¾¼ľƾʾÿþȽ¿ɿýɽƼ½¼ûǾȽɿʼȼýȼϿȿɼɻ̿Ǻɼ̿ͿŸý˽ͿɽþøȹȹȹǾǺǻƻɻȿǺɺȽĺɺɻ˺ʹǺǼɺźɺɽĺȷǸ˻ȺǸǸòǺɺɷʺŷųȶʺƷ;ȹ±ȶȸźƹIJŵƲȳƶðȷòƸóŲǯȷ°ŵŴɺįǴİȴóȴĶŰĮdzdzŴdzǴǰǯȰë«ƯƯůDZŭëƯĨ˰qplkƤåèĩƮī§ëǯǪƭƭīìéȰɳȱë©«Ī6{5.o+5q21p.1s.-n,,s*7l10m,:p7%j$(r(.l+)q!.p+&m$'m#1q.4r13p1-i,0s.,n,'m!&m%)q(.p),g$+s&%n%'h"'p&.p*2m.'f&3l/*e$%h$$j-s,k2r.+n*%l $i$!f 'm&,r*(n"!g pj g 'i%!k!e+h)$i kj m]#kcabeg_$jaeaeL74'4*+5',2&)9$-.-&#.! % .,' %$.$!$'!#& 3"*"+) (  ("$/!4,5"/)6.5!/)/"./3+<.%:1%1,!8/5-;0-+8&9($-"<,7)!44"9/";7-11&=8-<3+2";8.418%@6.?@4??2;6*E.'<0 =7#D;&A<-9/"C<,B+A5'@3%:=/H4%D7+A7.J91;1D3%I.&M<0H6+>81M2%H4#E5$N;->7%R9*L@4L0&J>2N9$R;.NA0J=/L8&Q?1O9*O<$O?'J=.XA,Q6#PB.L>0þ¿ÿÿþ½ÿ¿þÿ¾þþžĿ½½ĿƽþͿǾȾǼ¿»˿޼Ŀɾɽȼÿþ˾ο˽ƼÿǺ»ſʿýɼɼ¼ɼ¼ɾʻýɾ˿˾ƻǹɻƹ̾Ÿǻ˾ķɾ̽ȿʽƹƼȾ̽ƽǺǾȺɾ˾ɺĹƼȺɻɹŸǺɺʼǹȸȼʹǷǹŶǵƷȹʸijôɺǵŶóǶóƹȷòʽǹŴɷ˵ͲƳijİŲɷȷųɳ²ƷŲƵȶƲųƴưʳ­ȰðŰɳðê®ƱŮŭìponmȩɫŨƬçèĭèĨƬŬìɲĭĭȲǰưŭƬEC4s12u(3o/0o-3x1-j)2l++k*-p)3o2-r+.n(,l'.q,0r*5m3-s,-p+)i%(q&-i,0t/%l!/n)4r2(m#$n j&r%3l2(p&.o,)h$"e $e#1j0$n!%e!.i--l'$k#4o0 ck-l($j e"e"'i"'`#h"%k#-o)^_"d&j$b )e&*l'l!e'p$%g"bdc\f]eidR5//7#0 11"1$5!()+-#&& -7-'& &!(#2)-))-/-8, +#'(,*;&!2.7*2,4)215+%;)0)((0)-&4-63)27 97#72#6-'=4C6':."I9*9-D4$=#B2'9829+=2(>)>&B:0;;)94!95$?0"7* >(98&?5!D7'D9.B2'D5(;3A6#>0&A;'?6#O9'D:0D0#C5%C2(E7/A6"O=1L<)Q<-O4$M@3N4(H=)J8)G5(O>2O@4SA:G9'F8)L4'O8%O?-R5&M8&L;)N2%V@)K7P<$R@-X9'UF4¿ľ½¾ÿýĿ¾ÿ½þþƿǿȽü½ǿ˿˿ɾ¾Ŀ˿¿ʾŻ;̿½˾Ƚþþǽʿ½¾ͿÿͿŻǼǸüɾȿȺ̾ǺͿ̾ʿûǽĶżȻɻʽɿķʻɾºʿƺɻ̽Ƿ˾˽ȼǷ³ɹʺ˽ʻȺĸʽʼƶȷùǺǹʻɸƺ˻ɺĶƻƴȺǴƸųĵƷǷŶɸİö̼ȸǵŵïǴȶĵǷƶðųȳƴɵǵųƳȲŲưƱǶȲƲ°ǰǴĭê¯ƯŪ­êƴŭǰmjpoǪƫħƫĪŨ¬ǯƫŭƮ¨ƭȮǯɲʲƫƮèȱǮĩîVS8l3.p,4o07p2-k*(j$$i#o!7q29o4(r%-v-0n'+k&,s''n#+m)-p*(n +m*/g*,o(7j2&i#+o*0s.(l%+r))s(,m,)m((i&$j#'n$+g&,p*.k+*j(.o,.p)'l'(n(,k,j*g''e&dm(i'$f"$g# o#i#"j!$l !h*c(hch i f hi fihheia[`Q;5 <&,0:%+-"&$'$+,/-!! *%$&!#**-+))-, ,0,--+.&.,,) 55(3)877-54:2"0-@4"%4!62#8/$015.66'+'6-A5'>4):7$32 @)9%;54, 78 <7"@7'>-A:&D6+=.C3'328,A8&<*A0";2"92B0#30<3(D=%C=-9+!E1&>3@%B1#I=(F6-E90D4'D:-?/@4)C4&F3'C6$=9$D2(D3*I.!G0F:*K4&P8(J=*I4$K:(IC2H?5O>/I8#O?)Y;,GC1XA4O=0P>5QE4N=-[D8P6 OD5T@)T2#NG-V;.P@1SA5xrþĽĿþÿÿſ̿ſ¼½ÿĿžþ½ÿĿ̽ǿľþ»ľ½ÿ¾Ŀʿ˾ý½ʿ»ƹ»ʿȺ޼˿ɾɿľȿʽ½ƻǽǹȾ»̾ʾȿöʽʽ¼˽ĽȻÿ˼ȸ̾ȼ˾ȿʻþȾɼǻɼɻ·ɿƸǷǸ½ɺƵ˾ʼ˽Ȼ̾ǻŶǷʾƼǸȺɺȸʼƺǷȹǸõöȸƵôɳƷŷȼôɸȷǵųǶȵ˷dzůǷijǷñIJǶȹııƶ²IJƳǵIJðIJų®¬ŬǰðƱ®ŭëİɵë©DZ©sowwĪȥǭĩģêǮƪŭĪũů©ŮƪʳŬīįŭëīʳ˴ɳƱ^[8m4*k(0o(1k0.m+*n%1m,,n*-k*3o05j0)n%)l'(k#0r0(l"4j1,m)1r1*p)0u.&i!,j$)e%)m#&i7r5&f!/k,*m#0q*(j'&i$0q+&e!-k+1i-'f"$_j*f&-k+'g%$l#"g(i% l^%c"$h#&f%#o"j_ `g%i%f"a!)m( d"`` ck!k ag\^dg W T1.,' "(! $($ !)%1,%),*.%&) -.3014-,---50,-(06&1..41-51;,61/2:5:6",04.4?)/9#3-,,4<&+36542=,#69):2"12?6&,8.63+8;A2&:7%?8&6220!:6$:8*4A-9-:8&9?'=7(:1#<9.66+5'@>4;C/A5'D8'@/%9<#F<0C5&B>*G.B8#H4$E;/>+ >9'I:,L@1T<,F7!A@/Q9+B1"J/E<(LA3C5(P=1G5(I?2KC3M6%A>/K@.A8%G3%L>/R1%S>,P4)M?.G2$<8&S?0NB3U>,G9.M?)N5(K<-K4%O8(H<)NA'RB.[6,\L=¿ſýĿſÿþþľþƻľĿ¼ýÿþĿʾľʾľľɽľþɽĿǿȿĿȾǼ¼ƼȺ¼ɿĹý½¾ɿȺĿ̾ɻľǽɽ˽žɻȻº̿˾ʾǾǹ˿˿ƺƼɽƾźȻ;ɿǺȼƸǸ˽̾ĶɿȻýƻŶƻŶŹǻʽƹŹȷǺǹŷǹŵȼŸŷƷȸƸǶŶɷǹʾƳŷƷƻĴƷƵĴʶŲƵǺƳƷȴ¯ĴijǮò²ǴŶƲĮIJȯ°íDZȯǮİĬưƲ¬¨Į|yrqäƮȮŪũūĪǮìūǩƯǰæǯªĭǰçȯŮȱƮŬűĮli/m)2q/0s-9k/3r/1o,2m,*n*1j.1o0-j'$j-p&3k(5p2=t75r1'i#:m3-i+)k%-l-1a)0j-3i/2m,&k#*h$+l&'n#'g /d(8o3,d(5n.#j$g*f*,_"#g"!a-k($p#+j$'f (f$#fb(f"f%j!-l'%e!.m**i$h,g$$["h#el.k&(d"!c!i]fe `e^f `[!,.*)0 * +*)'5**"2 36#,/.?.7)=4388#,845,,-41:21 .3 .,99#>8(/6;7#/227 ,.#3/42!-033 97!08 43/996$-63:786.3163!+/>4859<$95.225&0296#7;=9(:;$D<)A;'7599*:9 >@4=/!=5(?7(:1 B7):3#?1'=44.EB1;'C7)D:)D6!A6%F1!B?/A.&E=)A6)@=/D4+I;.K9&K6(G;"N/#IB.:5I:#E>(I;)D>%P<+G3+D<+P@1H3'=4#J6)M0"Q:.M<.MC/O;$K?,K=3S?%P.J@1SB,D<*R<)U?)PB0O=%SC+T; XJ:[D5UL4Ŀƿ¼ǿÿſÿĿûý˿Ŀľ¼ǻ½ȽľþĿżȿĿþľȿý½ÿƺǿ»ʽ½Ⱦýɿ½»¾Ⱦ»þžǸʾɿǿȾ˽¾ʾȽͿžǻȼǺɿżȽ˿˽ùǼ̿̿ƿƶ̿ɻ˿Ⱥʼɺ˿ȺĸȻ;˿ʹ˺Ǻɼ̾ŸʻɽɽǺɾȺȸʻƶʺƺǹ̺ƹƵȹŷƹǵƷŶǵɸǹƸȴƶȲ˶ŷöǴƻ±ñIJıŴǮòòǴưƱȱıİDZíDzïƬî¬ŮëǮpo{{ŦĩéŪƭĭĩë§ŮƬĭȯĭ«ůŬƮëŬƱĮƮƮȴưom=w57i22m+,i)9q03r+7u3.o'.f'4k,4l-)k%7o23i/6j(,k%.h'+k#4l.-i(4p2;p+"c7p.-j"(i 2n-.h&.n+/h#(e1d,3c,$`$b+m$*k&,a")d 2i$(e,f&&g0f&+j%!g,h %c+f/g'"a,d&&j%g*f#e.f9l*+c#&f*e0h#&a(c)^$7[!-g+l)\5Y0Y,_2Z!1V4Y((J+I *D /E"*?-D 0C2=5=$45/;2= -2*:071B46%19"77#85)3395/06.9/.81465<$17#0/;5 335?8=:@ 77&AA0:7 8736$=:)4,<@#77#68<6'>7):?)6;(:8/62%1.?D*D3">7?4"DB)<;-6*:2 ?D+>5&BB/A5";6#C3&E9$59>/<+#>2@5$D@/A8+A7"77&@1=;/D7#G7+H>1;9*IB9E:)AA)E8'I0$C6HB*K9)@;(F6%J6'IB0D9 CB,E:'I:'E@2I@+M5&M7$M@.H@,N<+J=+M1MB)ID5H>/NA,I<#NH2J@)RA/QB6N8-QD.P?5U7*M9$J9+NA+P?.H2XB-UA1þĿľ¾ſýľʾľƾžþȿɿſʽ½ǽ¼½¿˾Ǿļû½ý½¾üʿǿʾÿʽþÿǾȽȿ˿˾ͿȻɾǿǻȾ½˼ȿʿɽɿȼʿƺżɽɽɽ˾ļȼʾɼɼʽȽɾĿȷŷǻȾʿɼƷ˽˾ǻ̾ʼ˾ɺǻȻȹɷȺŹʺɸŲǵƻǴɷƷƵƹɺȵĵȹĵƸǵɹƶðŲƲɵƵǴȲòIJǵijïįðȷí°ɳð±ƯŲ¬ïȮȳȬ©åů|zyȯƨéƬƩéȮī¬ĭŮƯçƫůŮDZŭʵĭƮƱDzưŭůĬzx.m(3m11q)3o,5l'5k04g(2m*1i,8r1,k%4h-0j(2p,+l 2n,6l+/o*,h$/h$(j$4m-.m)-k'-e$/o+3k)6l,;k.0n,+j',e%:s6,j -n)2k'.`&)h7c(4q-3r*2n(-l,m#.f#+g!+^$*b )`0`$-k-e$1g%3b3a&;f,2c"5d&(b8h,0b*_"c-[8g)7]'4^5` 1\'%_-[/e/Z!4_*.X 'P,V;L(4I)H-J2E3G!-F2C1I7F.C2C"3J%0G,51A#9:8?>B)6:!39 6?!;42101374454+1;> :/2:652807&1=$66#=C$=='>8%=543,6:?&38"3':9!98@;)D?/;<.86 87>6"86 C3&78CJ/<3&>6!::%>0$>:+F?/BA.?<#@0@5#I:.H=,CF+H;+DA'G5'F3"F<*OB1<7A8@.D@,M:)B5%H>3F>'B9'M?,F4J?+J7&L=-C=(M,A,H<+I:+JB,MB0N6)QH3E@%QB4H6(L8)P4(T?.F8.N9*T5#K;-N@.TE7O;*R@-OB-\A+QA/G8&L>'M@+NA-R<'SC.XL2F9%Q7!lgZüÿžƿĽ½ý»žĿľ˿ĿͿĿÿ¼½ȿ¼¼ľſÿ½ƿþ½ĿĿþȼŹȿȻǾƾľ¼ƼƼ¼»ɿǾ¼þɾɾ˿Ƚɾ˼Ⱥ½ȼǾ˽ǻ˿̿ȽǺŻȼǻʻ½ȻʽƼʻ̻ǻǾʽʼǻȺȹͽȷù;ƷοʺƶǸʹŶǺŸźȺʼʻƸƵʻȻʸķǶĴȶòȹƵɺı²ƵƳ˽ƴDzóȹŵǵɶȲíȶųǴðűñîɴɴŰūƱîĭʳŮ|y|zŨĪƮĪĪǫưƪ©Ĩǯƪȯǯ­ƯǭŮ©ªūŰƭǬǴƮɲȰí~/n)0h'?n5,k$*o)@l8:q3j16o24m.;j05n-;i.5i'0g%7i.0a$2n*-k*:o13g$*e/g%5k,3j-4_(,g6_&2i'5k-0d&*i"2o)7f'.b$2j+6d-;j3(b9p-1d#/B9C;?'+E4:&<397="=D'8>*F=+310?!7: 59">=/:97?-9;!264:86#D9&6<&<>"?8 ;<&5>9?$CB*;:!@;'=7?0=F%>8!>9C@!<>)?<%@<$G6'F9+;?*BA(E;,<8&>:)IB/E5F5#?:'IB&G;*G5'G8)LB7A=+H<.?:!AA0B9#L?*@:M?/G<(IA&C7$D9*N@5J4&I=1K8J@,B2TD)E?'H?&J?*QF4LB.FB-K@1H=%L;,N?)PD0UK8I=)N7)NC1N<(K7*MK3QB3RD1UH6JB*UE5N>*O?+SH*WN6PF-VB/SD5ýƿľþʾ¾¾žǿ½ý˿þſÿſý½þþ޼žʾ½ʽĽüĽʾý¼ſɾ½ʿ¾¼Ǽƻ½ȼ¿˼ʿǾ¼οǽǽʽº˾ƼȽ½ǼǻǻǼ¾ŻŻ˽ǺʾȾø̿ƺƸɻͿȹżɿɾȺʼȼ¼ɾʺȼȹɹȽ̽ɻȶƷǺȻƶ´ƶȵƺɹòɸõƷƱƸǷƸͼɸǵ¯ǵƴǹijƴóűȻƵóŴƲŴǴǴðĴƮŰĵDzƲűìƭĪ{~ȭ¨¦īĩĬƭŪưīīìĮ¬íȰéůïDzȲĮDzɴİȬȰȳ:n1/l'2i&8s.6i/:m4-f%2f*9g)0i$@i7/i+0f#6k.4e$3j(1k%2j$4k-7d*8i,,c%6i05k(.m#3l)2j!7c(h/3d%3e(1c/]=h-/_%/g1k%5e)9l+.`-e!3`&2h"/e'5]+h.e'8c&5h,e-c!;c+1]/c7`"/]+^7[ 0b%,d1a1\7]%7^$8X6[)0[1\7Z-6L!2U1L/T2Q0I1Q&K0A5A9P"1@ .E6B=B'G4F:G 5E#;A#9@(4B'=;#898;292>4<$9<$>8'5@ 5@'AG'5B2@";? >A$2<>@*:38C&74 :17>#@F.C:%;?$BE#F:-?:*@F*=?*=8<:(==GH0><*B9$A>)D?#BA-AB+K>-H; CC,E9$QN1A8 C9$JA1A80HB.A>+I@(I<)C6*F;&G,G=%F<'H9.L>.ME/GB!HG-J<'L?2E;.L@*C>%M;)K@.?8!D7'EC,P=-K8#K9)NC2J8*N<&X6 JC-LA0LC,S:$E6L=#PC-K@'Q@+NB*MA(O:)S6&R@2QH5RB,SE5UG3VA'TE2L>(ľĿ½ſȽĿĿſĿ»Ŀº¼Ľ̿žſľ½ýýǿο»ľýÿʿľþŹȻÿ½˾½ƽ̿ÿ¼½ǻĿýƿ¾ʿɿ¾¾ɼ½ʿżʾýɾɿùɾɾǽȾŽùƼ¾ɼǼ˿ƾ;ǼȽʺȻʼɾɺȾʺ˽ǷɼͼŹɽʸƺĺȺǻ̿ɻ̼ɻǸ˽ɺʻƸôƹƴȷʻǸƵʺͼǺȳǶƴɺƶʷöŶȺʷƴƵƴŵŲƵȵʷĮïŰıðůƵŴɯįűîŮŬįİŮŨ éħŧëƫǬȲĩêʲ¬ƭƭìĮDZĮDZɳȱƱŮů˶ʴɶǰǴư̶ų:k28i/1f(8h06q.1k 4f+8j.1i)1d(3j+;o19n2/g+1f&1m'.e&5d.1h(4f)9e/5j)7l-8e-@e03l*5d"2d$/e"2a"._"5f#:m+.n$6j.7e%5c*0g)2f(3j&0`2g$0g!3f"5b-6f&.i8e&6i+2a 4[&6`%;[ 8`&;`8a/7b#<_(3\6`$5a:d);[$8c&6`6c)6^$8\"5]'1]$3`0\$8W6[%'^0T ,U(U!5N#-Y,J0R5R#2L3N-O2R9F#,R 2?/I5J&;H>I+.<9G"0B">J*:A&0H$=B$@<"9B!BO.2B:G*;;@9(7D%1%CL(>E"9A$;>$@;!DE+9?#88=7%BD06>"@?&=G(?D+>?'4=$BF-:>'F;+88#::9C&H7#D>*&>6><&>9"F8$CF&I?-'E7!=4'H@&J7!C;#L9#KB5RB1AC$F7!J?0KF2I?)N=-EH3N:%D>$OD/A?'J@/K;+MH)RB*E<(NB(OB.KE.ND2S8&QD1JI.PF7OF0T@)Q&OE1M@*YJ/J@+VE1FC/NG.R:*SE1U?,WB-XF.wþĿžŽ¾ľĿſ½¿½þľþɽǿ½þ¾¼ľſνſȾľ˿¼ȾǾʿȽ½Ⱦ½ľȽȾļþ˿ȼȻȽþǻʿ˼ĸȽȽȽƾƾʾ̿ǺǹɺʿĻȼȻǺɾƾͿǽʾɻȺǺʸƶȾƹǼȼɾȹɺ˿ɷȼȷŷƼɻŶɼǸķijƵȸŴȺɸʹñƲŹǸijıŲɷƴ®ôɶŴȱŰĬ­±ưǴìŭȱũǭ¥ëưŪĮƱǯîĬéƭűȴǮƲǰíƬƱűdzƯdzdzƱƲįëǵ:i,m68g-6h.9g0/f)4l-3i*>h/;k0P%8>#&@E*AI";A+FI#:>$@D.9;"FI.=A%IG4??+H:+GH.DD)79!I@.AE,FK0LD,EC+A<%OK0?=&D?1@:ME3I@1?9$K@)O=&LB-P:$I@1I9%F='LC+HA1B;LQ0DA*F7"SD0O@/I@$E@/PD0AD$MC3J<+N>0OG/L@)M=,H8$MD.Q=,RC+MA)M>+SJ:TE,PA1NC0PD,KE.IH+MI4ZOl/4`+7c(>l.5`&6`*7f&0e&8j-2f'2c#;f*9d)/_$;c$6`+1c*h#2f'8k):b&2e$6aCg25i(9a-5e#B`+6b%4\;a&:b/5[#3f#.a!9b-:b-*Z/b.X";Z%X$6W#=T%-U7I4IAS(7U(>P+3J"5K 2I4R!4A4@8L:F@O)@B"4J(1?=A(AD(?H$GB(B>!<< =D$DB,A7 ?E(AE$8D&<=#;D)FG'BF4>:"9ABI'I?(EC%CF/C;&L@(L8&DC$EC,J='<=IB0K@'E;'JF/EE$Q=/OA0L?'F4#J8D=-I>,I>'ME)H?#DA+II/W@/O=&IB!VB6P9$R5'S@0OE-GC*L=+H;(L4)IJ"XC/RE,Q>/D;,OC3OE5[M8Q@*S@/YJ,QF3ZI4i^Swpcvþǿǿ½¼ſþĿýžþ»½Ľ½ľþþýſ½ü½¾ƿ˾¾½ÿ˾ľĿþ½»˾ƾɾ̾ýƿľɼºž¼üż˿ɼ̽ƽƼɽ¼˽¾ȽɽøʽʽɾʿǺ˻˿ȾȽʼþƼɿſǽȾǻ˼˺οƶɼɻĻɽȻƹ̾ƸǼ̿ƶȼʿķƹƶȻɽȸŻŷŷǷȷƶôȹǸƶĵŸƵijƷijóɷŰǶôƴ±ıǵĮĮîƯ°ƲĭñïƮ¯ȯƮūĨƭİéȰƮĪ­Ůǰȱîů«ªƮìDzDzĮȲɷȵDzDzǰıƴȵưƱ;j/6h,7h%>h.5^)0b(5f-6m(?k12l(-c$4`*@q4@h1:p/4d#7g,:e%;k0An,6e(:c$9f*8c+0_!=f/7d,@m11[!2d(9k-2c"8f'9f'-b$8f/5c)9i*3_.\4e'Cc6<`/@a61Z$5a#;i',]1h%4a"+[5c%5\/c7](-REh19Z$3b$3[1Z 0Y6X*7Z 3b4Y 5U4_,V5\&5]'DX'3Y#;a-Ab*:X%5T$9Z&6M 9W#:RG)4H"?C!8G*;P&DG%:E$=G(;I$>O&5E@L)BD$?I):F<@#;D'CH&HJ/EG7B=J*@G%>?AH2AH%KC*DD0=<%8B'AL)@=*KA#NA'6:BC%IE+EA-@C*F8&KA.Q@0D>(DE,A@)J@%IF/D>%K>&F?'KJ8G@*@:&@>&DA#D8 FK/G:+A="BC&PC,@?,O?*LD0=< S9*JC!AF%I<%FB-HD%PD/HH0FC+O@.OE0NM7RE-NF,FD!P@,ME0J>*R?,QH7aXGvne}vpſȿĿ¾üþý½ƿž½ƾƾƿ½þſĿĿƿþſĿſĿĿÿƿľȿƿʿĿʿĿü½¼ɿʾǼ¾ļ½Ⱦž˿ŻûȽþǽ¾þͿɾþȽʽǺǽþɿʺƻĻ˿˽ȺͿ»ȼƸ˾˾ʿƼŸĺȽȺʾʼʽɾȼʼƹǹ¾ɽȺȾµǷȸɸȷɻŸźȺĸŷǺǷƷƶŵǼȺʸɷǷķȸƷµƶűŷɴƲǷƳɴïƶĬó¯İۨŪɳŬǮūƱĮĪưĬƲɲòïì¯űDzǴDzȶűǴDzǴîɴʴDZñƳȵȶ˹ʴ5j+=l-9d+8i*7d,6i*=a28k,3l*2^*4f*7h04b,1l*3`(6d*9f/8c*3e(5e'e59i-0b&,b$5b%9l-4j+3\ <]-7^+/`"3`=e,0`9e->d12`8a+2a$:c.:e*<_32_Dc*9`(3[!-b 4^&:_#.Z/c"/a&6\(4X:Y!3]5\),Z <\&?a-7X!5V'6_$1YAZ/:^);]8V$;S8S1S:R AT(?V(.O:Q$;W(;O"R'@N(8I BD%BJ0HQ.DJ.BM-BE1CJ-5A??"KJ-CC)B=$?I%3A CH.?F!IM(HC'CB)SK.OK,BG(@G+ED'=;D;!B>"L@'MD0CF,AD.E@!A=#D<)LF7IE-I@+LD2ED&E>*@H$@C)DC$GC.F?,BA%HB-E<.:@$MB4E>#>A&LH0RE1F:(QH4QI0FA"HB+MH3SD4H?)KD-LF)RI4O@,NE5KA*`QExyoyýþľǿļľþĿþž¾Ŀþ½ľ½»ľƿž¼ý¾½½þþ¾Ŀ»¾þȾȼ»ĿĽ¾»ĿüýſżĿɾɿ½ɿȿʿ½ýÿɿȿͿ;ʽǿȽɿþȽǽǻ¿ƺɼ̼ȾȾɻżʾȼɾǼȼȿʺ˽ȺɹɻĺȽʼʺϽƻʾȻȹ̽øȼȺƸĵ˼ƷƹǸɸȹɼƸɸǸǸɼĴųųȸįȴîɹƳĮijıİ®Ĭ­ĮŮĩ«Ů§ƮŰƱŭƮɳíƱŭȳȵȹȳɳŰȳȱîŵųïıǷǸȷʵ˶˳ȵİǷƳFf;Cq39k/=c08h(;g39_%m35g-9`/>k3@]/7b'._$5f&>g22a"c.8f.5l16f.6b(>n/8d-5a+6f#7e">a-0^#5_9b-8e%;j%;c!9e%8e)5[%6e+=X4Y":g.6_!.[=a+/X%1b&0S3T 4S6X6]5a4a!=Y&5V%6W#8Y(7W(0T?_(?_/B]/8W!>S$1_ 4P7X>[&8X*C_)7P!6R!:W.9X$@Q%@Y BM*=O*8I 5M$>R ?M'5M >P+:M 5ECP(AK'BK>U+5E >L(AJ%=F&:F!>O(3;:H#@D';C$E>=K%9C=@ =G"BJ2JK3CF,>F$7I#A@#MF(;G*PJ0@G)F@"FG';F.DB)KD+BM,FA+:A!EA*B?%K>$DB'HK.G@&SO:I<*JH3I=#JE0L?%F:%YK6l`Uysj{sþĿÿž¼ĿĿĿ¼¼Ŀ¼ſľ¼ľ½ļľŽĿ¼ÿÿȽ½Ŀʿ¼ʾ¼¾Ľǿ»žý˿ÿľ˾ſɽ½¿ýľĿĽȾƽʿ˾½ɾʽɿʽʾ¼ǽýÿȻȽƺƻɿɽ̾ɿɽĺȼɷŶʻȻȽɽȻǸʿǷƻȼƱǹŸƹ˺ʿŷʻʻǼŸǹĶŴǶɷµƸʷ²ijŵɻijDzįIJƵƳñŶĮůIJïƮ°ǫ©ĮǴǬ¬ªƯǰɳŲƳƳĬıĮŲƱıůʷƮòǴDzƳ˹ɵȸƲƲɷŲƳɷƶDZ˸ʷ:g/h-6h(>h,)V=k)?g-4[(>g25`$;]-:f.3b%6j)1g&8^):_+Cc28b,?b.7^%3_$3f'3`'7\+5d"9]"Ab51f"9b*7_(?f04U@a'9]!2P 4b(5d+4b&4\#3]':\":_&8[(6\$/^6T"9_&X$A\,4T 0XA_+=\+-YU0;[#2R4Z$=\'>]+7O"F#?H!=O';A%;R$DF#FE"HT1JL(G*EK,HR4HD)L=%DK,CP-BJ$B@$KP0FD%DC->="GC*J8$EA(GC%PE*EH(MF&@C%@K,NJ/KG0EH.NE3WB/XH2IM6jbXuvg~u»½¾ſþƿüýƽþĽĿĿĿþĿſüüǿǽ½ÿĽʿǿſĽƿýžſĿ¼ĿɿýûȼƿĽĿʿý»ɾ½ƽ˽¾ʿþ˿ǾǼƽǻ¾˽˾;ȼǿɾŵɼȻƼɻǹƹȾǽƺǾͿɾɽƺ˾ɽǺǼȺǺǺõƹȻƷǼȽǹɹʼǷƺɼǹȹôȺŹǷȺȶȻƺǶųƹƳʶƱijðݱðűưƱòíƭìǬǭŬííŬĭŰůîƮȳư¯ɷDzȲŲʹɷĮ˷ȵĶ˸ȴDzȴ˶ɴƱǴǶȵ̺ɹɵȶʸ˹LrC:e-9h/4a*;c-?i69h-;n4=i32_(3d(1h @_+A`0/e"9_(@^-Em87_'?k27\+:d%@b02k)2`&8e44c%Cm4Ab.7_(f(5^&0_%>Z%>a,1P<[5[%>Z%C`)3U!:R%;['HW.?Y,9W$T(;Z+?V)?\':\&3V%6S :T+;U">J&8N :U"GI&:L=N-M#GI+CD%FA!EE%DI(KG(FL-AM.HL,BP DJ*F?>7&FF)SB,DG,FB);=&DC)CG*OTh/7i-6^#Hn;2d$>j46d(9f,5`(8c/Ac-8f':a+8b,>f%8a/8f/9`,?d/<_/5f$7c#N!1KI@BJP->N*FE#3H FL+KH*EB$BJ%?D&FD"@D)TI'FF*DB$FK.FG*FJ+%CGDH&JO:][Lrsc~uĿ¼½ƿľĿĿÿſĿ¿ĿƿƿĿýƿſĿýĽ¿ĽĿſƾž½ĿǿȽüľþžɾſſþſȽĽþƿľǾȿÿº¾ƿſ»¾ľüü˼ȿþ¾ȿȽ»½ȾüȿɾǼɿĺǾʿ˿ƼľƼȼƾ¾ȿɼ˾ȿƻ̾ʽƽŻ̽ʾǿƷ¶̽¼ŻȼȼŷǼɽɼȺ˼ȹ̻ȸźǹĴƴõŸȾ÷ŸƷƷȷȸɹǶɼǶdzòųñųıůìĮıƮ ȰŬǯŮŭůƴƲı°ȮDzñİųijƳ̻ɳɶȶȸǶȶƳǶǵǵȷȹƶŵȹɶǶȷɶDzóɷȶκ̸jg<]*Al9:d.=i30d;a/4U$:^'8c+6b%@i33]&6e*;e1Ah94^#:g':]+9d,8_*?h67W"9b)El25_(8[%5h)=`,8Z!5[":a)C`28b(;Y*C`18e(>_%;^(6W&8d >_+?]*5Z"8U E_24\!=Z-<]&>X#=W%:[);[/:[)=\%8R!-\AW/6W&DZ#A[&^$E`+P&8Q#Y+;W#?T#;W'4R ?T ER'8I9E9V&BW';M):OHN,?I@R)=P&?J'EV.GX/IP&HH*EQ.>R)BE!DK;F#_,:a.9_)>g0<`->]0_-=\+=_-?f1;c.9`(=Z&9d);],?h4>Z+>]06h+>e-9^)4Y?\/>e2@_3>]$6b*9c)Fb56]%8e,BW&:].7[*=\*5]%?_,\09[*B[+0U&>^0?d-A[,8Y);^%;W&A\-P&@P)EW+;U";N(AU"8Q4J!AL>S)?N 7L%EV0>R$?F DN*7G@D%:I"IM1LS6ES1KF#DC+=J,;H$CN,MR6]`Lx{j{Ⱦſſſ¾ſǿ»ýľſüƾľĽĿýþ½ž¼þſſ¿ýĿþüſ¾ļƾýýÿſº½»ſĽ¼úýĽƾþĿ¿ɾ»þ¿ɼŽȽȾ½ÿǾ˼ɾʾĿüɽʿȾ˿Ϳ¿ƽȽ¿ɽ¼ʿÿȽɾʿ¿Ƽ½ʾȽɽʸɽɾǺ½ǽ˿ƻȿȻɿȹǺȻȽƵɾɼƶȿǻʼǸôȺŴƴ´ȼȽǴŵôȷƵƶǶƳŲîİı&&))êƱĪñưò͹ðȵǵűƸƴǶǸǴȸͺȶ˺̼ȸ˺ʺŵɺ˻ƷȷɸǵĶȷ˼Ǵɷɹƶɹȹ˽ɹɹɷytBc19b-Be80`!:f+8i/Bd7Dd5i2C\3Db/A^,8_.6[&=[)<^'9b,;g*9V#;`&8\,7d'9[&5d*0\ ;]+=Z,>c43]0^$_+Cb/:`'@]18[!A_%=f)?\,CY#8_)?a2A[)=Z/8`)AX,7_)3V;V8X%8\$<]*3O?X*8X(7["9\*=`0>\&?_-4U#G*EV0ER1`kTuwjzŻſſýſžžſſƿſ»»¼ľſƾƿĿþǾĿǿľĿſĽľÿý¼º¾ǾýĽÿſƽ̿¾ʿžýſ½½¼¼ʾüƾ¼½ÿÿÿĿſʿ¼˼½¾ɽľɿǾɽʾ½ʾ¾ÿÿǻʽȻǼ¾ͿȻžżƼ½ƷżȾ¼ȾǼɿǻɾƻ½ǶżƸɻɺȼǼƼʾĻƺɿ̽ͿɾɸŸɺɿȺǹʼƷƲǹĵµǴ«76îȱƱƴĴƳŲĴǴɹǶɺȸƵɷȹȸɻʺǷɹɵĶȻƷȶʸ˼ǶͼƵͻ˻ʾƹȼŵοοɷ̾̿ϻʹɻͽ~6`*>]1>W+Ac8/U#7^)?g,;e)1`#3b(4Z&4Y&Cd4e/-[ ;_&F[->_%5a+6a*C]+:V&0X >a+:OAb2=b-B[35\#S":Z':NAb.;d#>[+?Z :R'D]0=T&IV37Z)@Y'N$9X)=X :M!:S&DT.KT2UjJmvbv¹ɿǿƽſǿǿƿžƿȿĿüƿžľſĿſſſſĿľſƿĽÿþĿſĿž½½ľĿſ¼ÿſƿÿſľ¾¿þļĿÿǿľƿǿʿ½¼úÿſǿ˿¼¾ýÿƿĽĿ¼½Ŀ½Ŀ¼þûžɽ½ƿý˽ǼÿɿϽȾýʿǾûʼʽ˿ɻƻɿɿʽȷǽƼɼƽɽɾƺȽȻĺĻżĸƼȻǻüǻʼɻǷƷĸȸŷøķ32ʶ̻°ý̺ʹ¹ȸǹʻǶɸöȴ̿˹ƺ;ƵϿ˽ȵƶͽ˻ɻ˾ʺȺʾźʹ˿Ӽ˼˶űĽʺͽɺƹɽ3`)Bc5E^14c#;`&@`2,T%5WA`2@h;Ed:<`=T)@e2LX51_).^;a2Rg=Ce:Ag8Ic=7a!:[+7`&2k&C`8G_7;c/7e1AS%(Y8`&T27W'MW7:f'B[6;e*:S$9X/O:[>W =`14X ?h6>]%=W BW'EW-9a6Ie6D_*EZ&FN&Fn07T!6]&:P!7X'>a0M8T0=[AY1:H3QAU8R5U7?8^,7T3\5N@]"8M%?ELSabipx     + +     + +  + +  + +     + +  vdRE8>ELLSaipqx           + + + + + +      + +{k^K>88?ELSabipxx              + +       + +  + + udXK>22>ELLSaiipx              + +      + + + +  o^XE212>?ELSZaipxx    + +     + +   + +  + + + +       + +  + +oWK?1+,2?ELLSahipx   + +    + +     + +   + +   + +      + +   yiWE?1%,2>?ELSTaippx   + +   + + + +  + +       + +  + +   + + + +    shW?2,%+22?ELLSaaipwx    + +   + +    + + + +   + +          maQ?,%%%,2>?ELSTahipw    + +         + +  + +    + +   }m\P>,%%+22?ELLSaahppw  + +   + + + +     + +  + +  + +  + +       vlUJ>%%+,2>EELSSahipww    + +  + +      + +   + +  + +   + +       qbUD8%%%+22?ELLSaahopw  + +  + +          + +      + + + +    k[PD, %+,2>EELSSahhoww  + +  + + + +          + +    + + + + + + + +  {jUJ=, %%,2>?ELLSaahooww   + + + +  + +       + +  + +    + +  + +  teUJ3&%%+22>EELSSahhoow    + + + +        + + + +  + +   + +  + +  + + ~o`O>3&%+,2>>ELLS`ahhovv    + +              + + + +  + + + + ~n_J9-%%+22>EELSS`ahoov   + +  + +  + +              + +  + + + + + + + + xhYJ9-%+,2>>ELLSS`ghovv  + +  + + + + + +         + +    + +  + +   + + + + + + |rcSD2!%%+22>EELRS``gnovv   + + + +          + +   + +    + + + + |qcSC2! %%+,2>>EKLRS`ggnov     + +   + +     + +   + + + +  + +   + + + + ~~~{l]M=- + %++22>EEKLR``ggnuu   + +       + +   + + + +   + +    + + + +  zzzyyyyyy~~~~~~~~~~~~}}}}}}vfWH7- + %%+12>>EKLRR`ggnnuu     + +        + + + +   + +   + +   + + + +  + + tttyyyyyyyyyxxxxxxxxx~~~~~~~~~}}}}}}}}}}}}||||||yuaWH7' + %++18>DEKLR_`ggnnu    + +  + +       + + + +       + + + + + + mmmssssssssssssxxxxxxxxxwwwwww}}}}}}}}}||||||||||||{{{{{{{{{yoaRB1' + %%+12>>EKKRR_`fmntu    + + + +  + +          + +  + + + +  + + + + + + + + mmmmmmllllllrrrrrrrrrrrrwwwwwwwwwvvvvvvvvv||||||{{{{{{{{{{{{zzzzzzzzz~~~~~~yj\KB1  + %%++1>>DEKKR__ffmmtt  + +  + + + +  + + + + + +       + +    + + + +  + + ggggggllllllllllllkkkqqqqqqqqqqqqqqqvvvvvvuuuuuuuuu{{{{{{zzzzzzzzzzzzyyyyyyyyyyyy~~~~~~~~~sd[K;,  %++11>>DKKRR__ffmtt + +  + +  + +  + + + + + +     + +    + + + + + +  + +  + + + + + + ```ffffffffffffkkkkkkkkkkkkjjjjjjppppppppppppuuuuuutttttttttzzzzzzyyyyyyyyyyyyxxxxxxxxxxxxsdUF;, + %%++1=>DDKKR__ffmmtt + +  + +  + +  + + + + + +   + + + + + +  + +  + + + +  ``````______eeeeeeeeeeeejjjjjjjjjjjjjjjiiiooooooooooootttttttttsssssssssyyyxxxxxxxxxxxxwwwm_PF6& + %%++11>>DKKQR__ffmms + +  + +   + + + + + +    + +   + + + + + + + + ZZZ__________________eeeddddddddddddiiiiiiiiiiiiiiinnnnnnnnnnnnnnnssssssrrrrrrrrrxxxwwwwwwh_PA6& + %%+11=>DDKKQQ_eellss + +  + +  + + + + + +  + +    + +  + +  + + YYYYYYYYYYYYYYY^^^^^^^^^^^^^^^ddddddccccccccciiihhhhhhhhhhhhhhhmmmmmmmmmmmmrrrrrrqqqqqqqqqhZJ@0  + %%++11=>DJKQQ^^eellss + +  + +  + +  + + + + + +     + +   + +   + + + + + + + + TTTTTTYYYYYYYYYXXXXXXXXX^^^^^^]]]]]]]]]ccccccccccccbbbhhhgggggggggggggggmmmllllllllllllqqqbSJ:+ + %++11==DDJKQQ^^ellss   + +  + +  + + + + + +     + +    + +  + + + + + + + +  TTTTTTSSSSSSSSSXXXXXXXXXXXXXXXWWW]]]]]]]]]\\\\\\\\\bbbbbbbbbbbbggggggfffffffffffflllkkkkkk]SE:+ %%++11=DDJJQQ^^eellry   + + + +  + + + +        + +  + + + + + + + +  + +  NNNMMMMMMSSSSSSSSSSSSRRRWWWWWWWWWWWWWWWWWW\\\\\\\\\\\\\\\[[[aaaaaaaaaaaaaaaffffffeeeeeeeee]NE5+ %%++11==DDJJQQ^^eekkyy   + +  + + + + + +      + + + +   + + + + + + + +  + + + + MMMMMMMMMMMMMMMMMMRRRRRRRRRRRRRRRWWWWWWVVVVVVVVVVVV[[[[[[[[[[[[[[[[[[aaa````````````eeeeeeXN?5% + %%++1==CDJJPQ]^ddkkyy   + +  + +  + + + +      + +     + +  + + + + + + + + + +   HHHHHHHHHMMMMMMLLLLLLLLLLLLRRRRRRQQQQQQQQQVVVVVVVVVVVVVVVUUU[[[[[[ZZZZZZZZZZZZ``````______XH?/% + %%++11==CCJJPP]]ddkrxx  + +   + + + + + +       + +  + + + + + + + +   BBBGGGGGGGGGGGGGGGLLLLLLLLLLLLLLLKKKQQQQQQQQQQQQQQQUUUUUUUUUUUUUUUUUUZZZZZZZZZZZZYYYYYYYYYQH9/ + %*+01==CCJJPP]]ddjqxx  + + + +  + + + +         + +  + + + + + + AAAAAAAAAAAAGGGGGGGGGGGGFFFLLLKKKKKKKKKKKKKKKPPPPPPPPPPPPPPPUUUUUUTTTTTTTTTTTTTTTYYYYYYYYYQC9* + $%*+11==CCJJPP]]ddqqx~   + +  + + + +     + + + +  + + + + + + + +  <<3$ $%*+01<=CCIIPP\\cjpp~~    + +  + +   + +      + + + +  + + + + + + + + + +  <<<;;;;;;;;;;;;;;;;;;@@@@@@@@@@@@@@@@@@EEEEEEEEEEEEEEEJJJJJJJJJIIIIIIIIIOOONNNNNNNNNNNNNNNF>.$  $$**00<<CCIIOOV\\jjpw}~~~   + +    + + + +    + +  + + + +  + +  + +  + +   777666666;;;;;;;;;;;;;;;;;;@@@@@@@@@????????????EEEEEEDDDDDDDDDIIIIIIIIIIIIIIIIIINNNNNNNNNF8.$  $$***00<<CCIIOO\\iipww~~~~~~ + +  + + + +  + + + + + +  + +  + + + +  + +   + + + +  666666666666666666;;;;;;::::::::::::?????????????????????DDDDDDDDDDDDDDDIIIHHHHHHHHHHHHHHHB7)  $$**00<<BBIIOOO\ciivv~~~~~~~~~~~~~ + + + +  + + + +  + + + +     + + + +  + + + +  + +    + + + + 111111111666666666666666:::::::::::::::::::::?????????>>>>>>>>>>>>DDDDDDCCCCCCCCCHHHHHHHHHB2)  $$**006<<BBIIOO[biipv}~~~~~~~~~~~~~~~~   + +  + + + +    + + + +  + + + + + + + + + + 111111000000000000666555555555555::::::::::::999999999>>>>>>>>>>>>>>>>>>CCCCCCCCCCCCCCCCCC<2)  $$**00<<BBHHOOObbiov|~}}}}}}~~~~~~~~~~~~~~~ + +  + +  + +  + + + +   + + + + + +    + +  + + + + ,,,,,,000000000000000000555555555555555555999999999999999999999>>>>>>>>>=========CCCCCCBBB<2#  $$**00<<<BBHHNNbbhoo||~}}}}}}}}}}~~~~~~~~~~~~~~~ + +  + +   + +    + + + + + +   ++++++++++++000000000000000000000555555555555444444999999999999999888=====================6-#  $$$**00<<BBHHNN[bboo|||~}}}}}}}}}}}}}}}}~~~~~~~~~~~~~~~ + +  + +   + + + + + +   + + + +   + +  + + &&&++++++++++++++++++000000000////////////444444444444444999888888888888888888============6,#  $$**00;;<BBHHN[aannu{{~}||||||}}}}}}}}}}}}~~~~~~~~~~~~ + + + +        + +      + + + + + + + +  &&&&&&&&&&&&++++++++++++++++++/////////////////////444444444444444888888888888888888888<<<1(  $$***00;;BBHHH[[annu{{}||||||||||}}}}}}}}}}}}}}}~~~~~~ + + + +       + +   + +  + + &&&&&&&&&%%%%%%%%%%%%++++++*********/////////////////////4444443333333333338888887777777771(  $$**/0;;AAAHH[[annu{{~}||||||||||||||||}}}}}}}}}}}}}}} + + + +      + +   + +  + + + + !!!!!!%%%%%%%%%%%%%%%%%%%%%******************/////////............3333333333333333337777771#  $$)*///;;AAGGT[[nnt{z~}|{{{|||||||||||||||}}}}}}}}}}}} + + + +            + + + + + + + +   !!! %%%%%%%%%%%%%%%%%%%%%******************.....................333333333333333,#  $$$)*//;;AAAGTZZmmtzz~|{{{{{{{{{{|||||||||||||||}}}}}}       + + + +  + + + + + +  %%%%%%%%%%%%%%%%%%%%%***************))).....................333222222+" $$))///;;AAGTTZgmtzz~}|{{{{{{{{{{{{{|||||||||||||||}}}          + +   + + + + + +    + +   %%%%%%%%%$$$$$$$$$$$$)))))))))))))))))).........------------'  $$)))//;;AAATTZggszz~}|{zzz{{{{{{{{{{{{{{{||||||||||||           + + + +   + +  + + + +  $$$$$$$$$$$$$$$$$$$$$$$$)))))))))))))))---------------'  #$$))//:;;AATTTggsyy~}|zzzzzzz{{{{{{{{{{{{{{{{{{||||||        + + + + + +   + + + +  + +  $$$$$$$$$$$$$$$$$$$$$))))))))))))))))))------'  #$)))//::@@MSSffmyy~}|{zzzzzzzzzzzzz{{{{{{{{{{{{{{{|||   + + + + + +  + + + +    + +  + + + +  $$$$$$$$$$$$$$$$$$$$$$$$))))))((((((((("  ###))//:::@MSS`fmyy~}|{zzzzzzzzzzzzzzzzzzz{{{{{{{{{{{{ + +  + +  + + + +  + +    + +  + +   + + + + + +  + + $$$$$$$$$############((((((((("  ##))///::@MMS`flsx~}|{zyyyyyyzzzzzzzzzzzzzzz{{{{{{{{{ + +   + +  + + + +  + +  + +  + +    + + + + ########################"  ##)))//:::MMS``lrx~~}|{zyyyyyyyyyyyyyzzzzzzzzzzzzzzz{{{ + +  + +  + + + + + + + +  + +  + + + + ###############  ###))../::MMM__lrr~~}|{zyyyyyyyyyyyyyyyyzzzzzzzzzzzzzzz + +   + +  + + + +  + +  + +  + + + + #########  ##)))..::GLL__frr~~}|{zyxxxxxxyyyyyyyyyyyyyyyzzzzzzzzz + +    + + + + + +  + +    + +  + +   + + + +  + +    ###))...:FLLY_eqqx~}|{zyxxxxxxxxxxyyyyyyyyyyyyyyyyyyzzz + +   + + + +  + + + +  + + + +  + + + + + + + +   ##())..9FFLY_ekqx~}|{zyxxxxxxxxxxxxxxxxyyyyyyyyyyyyyyy + +   + + + +   + + + +  + +   + +  + +  + + + + + +    ##(()..3FFLYYekqw}~}|{zyxwwwxxxxxxxxxxxxxxxxxxyyyyyyyyy + +  + + + +      + + + + + +  + +   + + + + + +   ###((...FFFXXekkw}}~}||{yxwwwwwwwwwwxxxxxxxxxxxxxxxyyyyyy + +    + + + + + + + +  + +  + +  + + + + + +  ##(((..FFFXX_kkw}}~}|{zyxwwwwwwwwwwwwwxxxxxxxxxxxxxxxxxx + +   + +   + + + + + +   + + + +    + + + +   + + + + + + + +   ###((..@EEXX^jjq||~}|{zyxwwwwwwwwwwwwwwwwwwwxxxxxxxxxxxx + +   + + + + + + + +  + +  + +     + +   + + + + + +   ###(((.@EEXX^djp||~}||{zyxvvvvvvvwwwwwwwwwwwwwwwwwwxxxxxx + +  + + + +  + + + + + +  + +     + + + + + +    "#(((-@@EWW^djpv|~}|{zyxwvvvvvvvvvvvvvwwwwwwwwwwwwwwwxxx      + + + +   + + + + + +      + + + +  + +  + + + +    ""#(((@@EWW^dipv{~~}|{zyxwvvvvvvvvvvvvvvvvwwwwwwwwwwwwwww + +    + + + +  + + + + + +  + +      + + + +   + +  + + + +    ""(((???WW]dipv{~}|{{zyxwvuuuvvvvvvvvvvvvvvvvvvwwwwwwwww + +    + + + + + + + + + +   + +    + +  + +    + + + + + +    """((???WW]ciou{~}|{zyxwvuuuuuuuuuuvvvvvvvvvvvvvvvvvvwww + + + +   + + + + + + + + + +  + + + +  + + + +  + +  + + + +   """((:??QW]ciou{~}}|{zyxwvuuuuuuuuuuuuuuuuvvvvvvvvvvvvvvv    + + + +  + + + +  + + + +     + + + +  + +     + + + + + + + +   ""'(:??QV]chouz~}|{{zyxwvutttuuuuuuuuuuuuuuuuuuvvvvvvvvv + + + +   + + + + + + + + + +   + +     + +  + +   + + + +   """'99?QV\chntz~~}|{zyxwvutttttttuuuuuuuuuuuuuuuuuuvvvvvv + +    + + + + + +    + +        + + + + + +  + + + +  + + + + + + + +   ""'99?QQ\bhntz~}}|{zyxwvutttttttttttttuuuuuuuuuuuuuuuuuu + +   + +     + + + +  + +    + +  + + + +   """999PQ\bhnty~}|{zzyxwvutttttttttttttttttttuuuuuuuuuuuu + +  + + + +  + + + + + + + +      + + + +   + + + + + +   """999PPWbgnty~}}|{zyxwwvutssssssttttttttttttttttttuuuuuu   + + + + + +  + + + + + + + + + + + + + +     + + + +  + + + +  ""499PPVbgmsy~}||{zyxwvutssssssssssttttttttttttttttttuuu + +    + +  + + + + + + + +  + + + +      + + + + + +  + + + + + +  ""399KPV\gmsy~~}|{zzyxwvutssssssssssssssssttttttttttttttt + +  + +  + + + +  + +  + +  + +       + + + +     + + + + + + + + + + ""399JPV\gmsx~~~}||{zyxwwvutsrrrssssssssssssssssssttttttttt + +  + +   + + + + + +  + + + +  + +      + + + +  + +  + +  + + + + + + + + + + "339JJV\amrx~~~~}|{{zyxwvutsrrrrrrrsssssssssssssssssssssttt + +   + + + + + + + +   + +  + +  + + + + + + + + + + + + + + + + + + + + + + + + !338JJV\alrr~~~~}}|{zyyxwvutsrrrrrrrrrrrrrssssssssssssssssss   + +     + + + +   + + + + + + + +  + + + + + + + + + + + + + + + + + + + + + + 333JJP[agrr}}~~~~~}||{zyxwwvutsrrrrrrrrrrrrrrrrrrrssssssssssss  + +   + + + +  + + + +  + +  + + + + + + + + + + + + + + + + + +  + + + + + + + + + + + + 333JJP[agrr}}~~~~~}}|{zzyxwvutssrqqqrrrrrrrrrrrrrrrrrrrrrssssss  + +    + + + + + + + + + +    + + + +  + + + + + + + + + +  + +  + + + + + + + + + + + + + + + + + + + + + + + + + + 333JJP[`gqq}}~~~~~~~}||{zyyxwvutsrqqqqqqqqqqrrrrrrrrrrrrrrrrrrrrr     + + + + + +  + +   + + + +  + + + + + +  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -33DIPV`flqw}~~~~~~~~}}|{{zyxwvvutsrqqqqqqqqqqqqqqqqrrrrrrrrrrrrrrr    + + + + + + + +  + +    + + + +  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -23DIOU`flqv|~~~~}~~~~~}||{zyyxwvuttsrqqqqqqqqqqqqqqqqqqqqqqrrrrrrrrr   + + + + + +  + +     + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + --2DDOU[fllv|~~~}}~~~~~}}|{{zyxxwvutsrqpppppppqqqqqqqqqqqqqqqqqqqqqrrr  + +  + + + + + +  + +   + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + --2DDOUZfkkv|~~~~}}}~~~~~~}||{zzyxwvvutsrqpppppppppppppqqqqqqqqqqqqqqqqqq  + + + + + + + + + +  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + --2DDOUZ`kkp{~~~~}}}}}~~~~}}|{{zyyxwvuttsrqpppppppppppppppppppqqqqqqqqqqqq   + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ---CCJTZ`kkp{~~~}}}}}}~~~~~~}||{zzyxwwvutsrqqpooopppppppppppppppppppppqqqqqq  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ---CCITZ`kkpv~~~~}}}}}}}~~~~~~}}|{{zyyxwvvutsrqpooooooooooppppppppppppppppppppp  + + + + + + + + + + + + + + + + + + + + + +  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +  + + + + + + + + + + + + + + + + + + + + + + + + + + + + ---CCIOZ`ejpv~~~~}}}}|}}}}~~~~~~}||{zzyxxwvuttsrqpooooooooooooooooppppppppppppppp + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +  + + + + + + + + + +   + + + + + + + + + + + + + + + + + + + + + + (-->CIOY_ejou~~~~}}}}|||}}}}~~~~~}}|{{zyyxwwvutsrrqpooooooooooooooooooooooppppppppp + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +  + + + + + + + + + + + + + + + + + + + + + + + + (,->CIOY_eeou{~~~}}}}|||||}}}~~~~~~}}||{zzyxxwvuutsrqpoonnnnnnoooooooooooooooooooooppp   + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +  + + + + + + (,,>CIOT_eeouz~~~~}}}||||||}}}}~~~~~~}}|{{zzyxwwvuttsrqponnnnnnnnnnnnnoooooooooooooooooo  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +  + + + + + + + + + + + + + + + + + + + + + + ((,=BINT_ddjuzz~~~~}}}}|||||||}}}}~~~~~~}}||{zzyyxwvvutsrrqponnnnnnnnnnnnnnnnooooooooooooooo  + + + + + + + + + + + + + + + + + + + + + +  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ((,=BHNT^ddjtzz~~~~}}}}||||{||||}}}}~~~~~~~}||{{zzyxxwvuutsrqpponnnnnnnnnnnnnnnnnnnnnnooooooooo + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +  + + + + + + + + + + '(,=BHNS^dditzz~~~~}}}}||||{{{|||}}}}~~~~~~~}}||{zzyyxwwvutssrqponmmmmmmmnnnnnnnnnnnnnnnnnnnnnooo + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + '''=BHNS^dditty~~~~~}}}}|||{{{{||||}}}}~~~~~~~}}||{{zzyxxwvuutsrrqponmmmmmmmmmmmmmnnnnnnnnnnnnnnnnnn + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + '''=BHNS^cditty~~~~~~~}}}}||||{{{{{||||}}}}~~~~~~}}}||{zzyyxwwvuttsrqpponmmmmmmmmmmmmmmmmmmmnnnnnnnnnnnn + + + + + + + + + + + + + + + + + + + + + + + + + + + +  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +  + + + + + + + +  + + + + + + + + + + + + + + + + + + + + '''8BHMS^ccissy~~~~~~}}}}||||{{{{{{{||||}}}}~~~~~~~}}||{{zzyxxwvvutssrqponnmlllmmmmmmmmmmmmmmmmmmmmmnnnnnn + + + +  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +   + + + + #''8BHMS]cchnsy~~~~~~}}}}||||{{{{{{{{{||||}}}}~~~~~~~}}||{{zzyyxwwvuutsrrqponmllllllllllmmmmmmmmmmmmmmmmmmmmm + + + + + + + + + + + + + + + + + + + +  + + + + + + + + + +  + + + + + + + + + + + + + + + + + + + + + +  + + + + + + + + + + + + + + + + + + + + + + + + + +  + + + + + + + + + + + + + +  + + + +   #''8AGMR]cchnsx}}~~~~}}}}||||{{{{{z{{{{|||||}}}}~~~~~~}}}||{{zyyxxwvvuttsrqpponmllllllllllllllllmmmmmmmmmmmmmmm + + + + + + + + + + + + + + + + + + + + + + + + + + + +  + + + + + + + + + + + + + + + + + + + + + + + + + +  + + + + + + + + + + + + + + + + + +  + + + + + + + + + + + + + + + + + + + + + + + + + + + +   "''8=GMR]cchnsx}}~~~~}}}}|||||{{{{zzz{{{{||||}}}}}~~~~~~~}}}||{{zzyyxwwvuutssrqponnmllllllllllllllllllllllmmmmmmmmm + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +  + + + + + + + + ""'8=GMR]bbhmrxx}~~~~~}}}}}||||{{{{zzzzz{{{{||||}}}}}~~~~~~~~}}||{{zzyyxxwvvuttsrqqponmmlkkkllllllllllllllllllllllllmmm + +  + + + + + + + + + + + + + +  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +  + + + + + + + + + + + + + + + + + + + + + + + + + + + +  + + + + ""'8<GLR]bbgmrxw}~~~~~}}}}}||||{{{{zzzzzz{{{{{||||}}}}}~~~~~~~~}}|||{{zzyyxwwvuutssrqpponmlkkkkkkkkkklllllllllllllllllllll + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ""'7<BLR\bbgmrww|~~~~~}}}}}||||{{{{{zzzzzzz{{{{{||||}}}}}~~~~~~~~}}}||{{zzyyxxwvvuutsrrqpoonmlkkkkkkkkkkkkkkkklllllllllllllll + +  + + + + + + + + + + + + + + + + + + + + + + + +  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +  + + + +  + + """7<BLQ\bbgmrww|~~~~~}}}}}||||{{{{{zzzzyzzzz{{{{{||||}}}}}~~~~~~~~~}}}||{{{zzyxxwwvvuttsrqqponmmlkkkkkkkkkkkkkkkkkkkkkklllllllll + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +  + + + + """7<BLQ\abglqww||~~~~~}}}}}|||||{{{{zzzzyyyzzzz{{{{|||||}}}}}~~~~~~~~~~}}}|||{{zzyyxxwvvuutssrqpponmlkkjjjkkkkkkkkkkkkkkkkkkkkkkkklll + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + """7<BGQ\aaflqvv|{~~~~~~}}}}}|||||{{{{zzzzyyyyzzzzz{{{{|||||}}}}}~~~~~~~~~~}}}|||{{zzyyxxwwvvuttsrrqponnmlkjjjjjjjjjjkkkkkkkkkkkkkkkkkkkkk + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +  """3<BGQ[aaflqvv{{~~~~~~}}}}}|||||{{{{zzzzzyyyyyzzzzz{{{{|||||}}}}}}~~~~~~~~~~~}}}|||{{zzzyyxxwvvuutssrqqponmmlkjjjjjjjjjjjjjjjjkkkkkkkkkkkkkkk + + + + + +  + + + + + + + + + + + + + + + + + +   + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +  + + + + + + + + + + + + + + + + + + + + + + + + """2<BGQ[aaflqvv{{~~~~~~}}}}}}|||||{{{{zzzzzyyyyyyyzzzzz{{{{|||||}}}}}}~~~~~~~~~~~}}}}|||{{{zzyyxxwwvvuttsrrqpoonmllkj + + + + + + + + + + + + + + + + + + + + + +  + + + + + +  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +  + + + +  + + + + + + + + + + + + + + + + + +    ""2;AGL[aaflpvv{{~~~~~~~}}}}}}|||||{{{{zzzzzyyyyyyyyyzzzz{{{{{||||||}}}}}~~~~~~~~~~~~~}}}}|||{{{zzyyxxxwvvuutssrqqponnmlkj + + + + + + + + + + + + + + + +   + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +   ""27AGL[``fkpuuzz~~~~~~~~}}}}}||||||{{{{{zzzzyyyyyxyyyyyzzzz{{{{{||||||}}}}}}~~~~~~~~~~~~~~~~}}}}|||{{{zzzyyxxwwvvuttsrrqpponmmlk + + + + + + + + + + + + + +  + +  + + + +  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +  + + + +    ""27AGLV``ekpuuzz~~~~~~~~~}}}}}}||||||{{{{{zzzzyyyyyxxxyyyyyzzzz{{{{{||||||}}}}}}}~~~~~~~~~~~~~~~~~~}}}}}|||{{{zzzyyxxwwvvuutssrrqpoonmll + + + + + + + + + + + +  + + + + + + + +  + + + + + + + + + + + + + + + + + + + + + + + + + +  + + + + + + + + + +        "27AFLV``ekpuuzz~~~~~~~~~~}}}}}}}||||||{{{{{zzzzyyyyyxxxxxyyyyzzzzz{{{{{{|||||}}}}}}}}~~~~~~~~~~~~~~~~~~~~~~~~~}}}}}}|||{{{zzzyyyxxwwvvuttssrqqponnml + + + + + + + + + + + + + + + +  + + + +  + + + + + + + + + + + + + + + + + + + + + + + + + + + +      !27<FKV``ekouuzz~~~~~~~~~}}}}}}}}|||||{{{{{{zzzzzyyyyxxxxxxxyyyyzzzzz{{{{{{||||||}}}}}}}}~~~~~~~~~~~~~~~~~~~~~}}}}}}||||{{{{zzyyyxxwwvvuuttsrrqpponmm + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +         !26<FKV[`ejottyy~~~~~~~}}}}}}}}||||||{{{{{{zzzzzyyyyxxxxxxxxyyyyyzzzzz{{{{{{|||||||}}}}}}}}}~~~~~~~~~~~~~~~~}}}}}}}||||{{{{zzzyyxxwwwvuuttssrqqpoonm + + + +  + + + + + +  + + + + + +  + +  + + + + + + + +            26<FKV[_djottyy~~~~}}}}}}}}}|||||||{{{{{{zzzzzyyyyyxxxxwxxxxyyyyyzzzzzz{{{{{|||||||}}}}}}}}}}}}}~~~~~~}}}}}}}}}}|||||{{{{zzzyyxxxwwvvuuttsrrqpponn                    16<BKU[_djottyy}}}}}}}}}}}}|||||||{{{{{zzzzzzyyyyyxxxxwwxxxxxyyyyyzzzzzz{{{{{{|||||||}}}}}}}}}}}}}}}}}}}}}}}}}||||||{{{{zzzyyyxxwwvvuuttssrqqpoon                  16<AKU[[djnttyy}}}}}}}}}}|||||||{{{{{{zzzzzzyyyyyxxxxxwwwxxxxxyyyyyzzzzzz{{{{{{|||||||||}}}}}}}}}}}}}}}}}}}}||||||{{{{{zzzyyyxxwwwvvuuttsrrqqpon                    -6<AKUZZdinssxx}}}}}}}|||||||||{{{{{{zzzzzzyyyyyxxxxxwwwwwxxxxxyyyyyzzzzzz{{{{{{{||||||||||}}}}}}}}}}}}}}||||||||{{{{{zzzyyyxxxwwvvuuttssrqqppo                     -6<AFUZZdinssxx}}}}||||||||||{{{{{{{zzzzzzyyyyyxxxxxwwwwwwwxxxxxyyyyyyzzzzzz{{{{{{{||||||||||||||||||||||||||||{{{{{zzzzyyyxxxwwvvvuuttsrrqqpo                  -6;AFUZZ_inssxx||||||||||||{{{{{{{zzzzzzyyyyyyxxxxxwwwwwwwwwxxxxxyyyyyyzzzzzz{{{{{{{{||||||||||||||||||||||||{{{{{{zzzzyyyxxxwwwvvuuttssrrqpp                      -1;AFTZZ_imssxx||||||||||{{{{{{{{zzzzzzyyyyyyxxxxxwwwwwvwwwwwxxxxxyyyyyyzzzzzzz{{{{{{{{||||||||||||||||||||{{{{{{{zzzzyyyxxxwwwvvuuttssrrqqp                      -1;AFPZZ_dmrrww||||||||{{{{{{{{zzzzzzzyyyyyyxxxxxwwwwwvvvwwwwwxxxxxyyyyyyzzzzzzz{{{{{{{{{{{|||||||||||||{{{{{{{{zzzzzyyyyxxxwwvvvuuttssrrqp                   ,1;@FPYY_dmrrww||||{{{{{{{{{{{zzzzzzzyyyyyyxxxxxwwwwwvvvvvwwwwwxxxxxyyyyyyyzzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzzzzzyyyyxxxwwwvvuuttssrrqq                 ,17@EPYY^dmrrww{{{{{{{{{{{{{zzzzzzzyyyyyyyxxxxxwwwwwvvvvvvvwwwwwxxxxxxyyyyyyzzzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{zzzzzzyyyyyxxxwwwvvuuuttssrrq                  ,17@EOUY^dhrrwww{{{{{{{{{{zzzzzzzzyyyyyyxxxxxxwwwwwvvvvvvvvvwwwwwxxxxxxyyyyyyyzzzzzzzzz{{{{{{{{{{{{{{{{{{{zzzzzzzyyyyxxxxwwwvvvuuttssrrq                      ,16@EOUY^chqrvvv{{{{{{{zzzzzzzzzyyyyyyyxxxxxxwwwwwwvvvvvvvvvwwwwwwxxxxxxyyyyyyyzzzzzzzzzzzz{{{{{{{{{{{zzzzzzzzzyyyyyxxxxwwwvvvuutttssrr                      ,16@EOTY^chqqqvv{{{zzzzzzzzzzzzyyyyyyyxxxxxxwwwwwwvvvvvuvvvvvwwwwwwxxxxxxxyyyyyyyzzzzzzzzzzzzzzzzzzzzzzzzztzzzyyyyyxxxxwwwvvvuuuttssrr                   ,16<EOTT]chmqqvvzzzzzzzzzzzzzyyyyyyyxxxxxxxwwwwwwvvvvvuuuvvvvvwwwwwwxxxxxxxyyyyyyyyyzzzzzzzzzzzzzzzzzzzzzttzyyyyyyxxxxwwwvvvuuuttssrr                      ,06;EOTT]cgmqqvvzzzzzzzzzzyyyyyyyyyxxxxxxxwwwwwwvvvvvuuuuuvvvvvvwwwwwwxxxxxxxyyyyyyyyyzzzzzzzzzzzzzzzzzzzttyyyyyxxxxxwwwwvvvuutttssr                     (06;DOTT]cggqquuzzzzzzzzyyyyyyyyyxxxxxxxwwwwwwvvvvvvuuuuuuuvvvvvvwwwwwwxxxxxxxyyyyyyyyyyyyzzzzzzzzzzzyyttntyyyyxxxxxwwwwvvvuuuttssr                     '06;@NTTYbgglpuuzzzzyyyyyyyyyyyyxxxxxxxwwwwwwvvvvvvuuuuuuuuuvvvvvvwwwwwwxxxxxxxxyyyyyyyyyyyyyyyyyyyyytttsnsyyxxxxxxwwwwvvvuuuttsss                     '06;@NTTYbgglpuuyyyyyyyyyyyyyyxxxxxxxxwwwwwwvvvvvvuuuuuuuuuuuvvvvvvwwwwwwwxxxxxxxxxyyyyyyyyyyyyyyyyyyssnnnsxxxxxxwwwwwvvvuuutttss                         '06;@NSSXbgglluuyyyyyyyyyyyyxxxxxxxxwwwwwwwvvvvvvuuuuuutuuuuuuvvvvvvwwwwwwwxxxxxxxxxxyyyyyyyyyyyyyyysnnmmmsxxxxxwwwwvvvvuuutttss                  '06;@JSSX^ffllttyyyyyyyyyxxxxxxxxxxwwwwwwwvvvvvvuuuuuutttuuuuuuvvvvvvvwwwwwwwxxxxxxxxxxxxyyyyyyyyyyysnmmmmrxxxwwwwwvvvvuuutttss                   '05;@JSSX^ffkkttyyyyyxxxxxxxxxxxxwwwwwwwvvvvvvvuuuuuutttttuuuuuuvvvvvvvwwwwwwwwxxxxxxxxxxxxxxxxxxxxxmhhgmmrxwwwwwwvvvvuuuuttt                     '05;?ISSX]ffkkptxxxxxxxxxxxxxxxwwwwwwwwvvvvvvvuuuuuutttttttuuuuuuvvvvvvvwwwwwwwwwxxxxxxxxxxxxxxxxxxsmhgggmrwwwwwwvvvvuuuuttt                   '05:?IOSX]bfkkptxxxxxxxxxxxxxwwwwwwwwwvvvvvvvuuuuuutttttttttuuuuuuuvvvvvvvwwwwwwwwwwxxxxxxxxxxxxxxxrmbbgglmwwwwvvvvvuuuuttt                     '/5:?INSWWafkkotxxxxxxxxxxwwwwwwwwwwvvvvvvvuuuuuuutttttttttttuuuuuuuvvvvvvvvwwwwwwwwwwwxxxxxxxxxxxrmgbaggllqwwvvvvvuuuuttt                    '/5:?INRWWaajjooxxxxxxxwwwwwwwwwwwvvvvvvvvuuuuuuuttttttstttttttuuuuuuvvvvvvvvvwwwwwwwwwwwwwwwwwwwwrlgaagfllqvvvvvvuuuuttt                     '/5:?INRWWaajjoowwwwwwwwwwwwwwwwvvvvvvvvvuuuuuutttttttssstttttttuuuuuuuvvvvvvvvvwwwwwwwwwwwwwwwwwrlga\\aaalqvvvvuuuuuttt                     '/5:?INRWWaajjoowwwwwwwwwwwwwwvvvvvvvvvuuuuuuutttttttssssstttttttuuuuuuuvvvvvvvvvvwwwwwwwwwwwwwwwrlga[\aaalqvvvuuuuuttt                      '/5:?INRWWaafjooswwwwwwwwwwwvvvvvvvvvvuuuuuuutttttttssssssssttttttuuuuuuuuvvvvvvvvvvvvwwwwwwwwwwqlfaVVV\\akpvuuuuuuttt                  &/4:>HNRVW\`fjnnswwwwwwwvvvvvvvvvvvvuuuuuuuuttttttssssssssssstttttttuuuuuuuuvvvvvvvvvvvvvvvvvvvvqlfaVVV[[akpuuuuutttt                 &/4:>HMQVV\`einnssvvvvvvvvvvvvvvvvuuuuuuuutttttttssssssssssssstttttttuuuuuuuuuvvvvvvvvvvvvvvvvvvqkf`VVV[[`kpuuuutttt              &/49>HMQVV\`einnnrvvvvvvvvvvvvvvuuuuuuuuutttttttsssssssrsssssssttttttttuuuuuuuuuvvvvvvvvvvvvvvvqkf`VQQQV[`kpuuutttt        &/49>HMQVV[`einnnrvvvvvvvvvvvvuuuuuuuuuttttttttsssssssrrrrssssssttttttttuuuuuuuuuuuuvvvvvvvvvvvpkf`VPPQV[`jouttttt     &/49>HMQVV[`eimmnrrvvvvvvvuuuuuuuuuuuuttttttttssssssrrrrrrrsssssssttttttttuuuuuuuuuuuuuuuvvvvvpke`UPPPPV[`jottttt &.49>HMQVV[_eimmmrrvvuuuuuuuuuuuuuuuttttttttsssssssrrrrrrrrrssssssstttttttttuuuuuuuuuuuuuuuuuupke`UPKKKUZ`jotttt &&&&&&&&&&&&&&&&&&////////////...............................................................------------------------------------------&.49>GMQUU[_dhmmmqquuuuuuuuuuuuuuutttttttttsssssssrrrrrrrrrrrsssssssstttttttttuuuuuuuuuuuuuuupje``UPKKKUZ_eotttɿ~~~tttkkkkkkaaaaaaaaaWWWWWWWWWMMMMMMMMMMMMCCCCCCCCC999999999000000000000000//////////////////////////////////////////////////////////////////...............................................................------------------------------------------&.49>GLPUU[_dhmmmqquuuuuuuuuuuuutttttttttssssssssrrrrrrrrrrrrrsssssssstttttttttttuuuuuuuuuuuupje_UPKFKKUZ_entsǾȾ}}}}}}}}}}}}ssssssssssssiiiiiiiiiiii______________________________^^^UUUUUUTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTJJJJJJJJJJJJJJJJJJJJJIIIIIIIIIIIIIII@@@@@@@@@@@@????????????????????????666666666666666666666666&.49=GLPUUZ_dhmmmqquuuuuuuuuutttttttttttssssssssrrrrrrrqrrrrrrrrsssssssstttttttttttttuuuuuuuuoje_UPKFEKUZ_eisŻƼ{{{{{{{{{{{{{{{{{{{{{qqqqqqqqqqqqqqqqqqppppppgggggggggggggggffffff]]]]]]]]]]]]]]]]]]]]]]]]\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\RRRRRRRRRRRRRRRRRRQQQQQQQQQQQQQQQQQQQQQQQQQQQ.39=GLPUUZ_dhhllqquuuuuutttttttttttttssssssssrrrrrrrrqqqqrrrrrrrsssssssssttttttttttttttttttojd_UUPJEEJUUZdi¹{{{{{{{{{{{{Żzzzzzzyyyyyyyyyyyyyyyyyyyyyyyyoooooooooooooooooonnnnnnnnnnnneeeeeeeeeeeeeeedddddddddddddddddd[[[[[[[[[[[[[[[ZZZZZZZZZZZZZZZ38=GLPUUZ^dghllqqtttttttttttttttttsssssssssrrrrrrrqqqqqqqrrrrrrrrsssssssssttttttttttttttttojd_TOJE@EJTUZdȿyyyzzzzzzzzzzzzqqqqqqqqqqqqhhhUUU///ùxxxxxxxxxxxxwwwwwwwwwwwwwwwwwwwwwwwwvvvmmmmmmmmmmmmmmmmmmlllllllllllllllllllllccc8=GLPUUZ^cggllpptttttttttttttttssssssssssrrrrrrrqqqqqqqqqrrrrrrrrsssssssssssttttttttttttoid_YTOJE@@ETUZxxxxxxxxxxxxxxxoooooooooooopppggg]]]TTTJJJ888///&&& vvvvvvvvvvvvvvvvvvuuuuuuuuuuuuuuuuuuuuuuuu=GLPTTZ^cggllppttttttttttttsssssssssssrrrrrrrrqqqqqqqqqqqrrrrrrrrrsssssssssssstttttttttnid^TOJJE@@EOPvvvvvvwwwwwwwwwnnnnnnnnnnnneeeeee\\\\\\SSSSSSSSS888888888%%%%%% }}}FKOTTZ^cggllpppttttttttssssssssssssrrrrrrrrrqqqqqqqqqqqqqqrrrrrrrrrssssssssssssssssstnidd^TOJE;@@EOwwwwwwnnnddd[[[RRRRRRRRRRRR@@@777777777...%%%%%%%%% KOTTY^cggkkppptsssssssssssssssssrrrrrrrrrqqqqqqqqpqqqqqqqqrrrrrrrrrrssssssssssssssssnic^TTOJE;;;EwwwmmmmmmdddddddddSSSIIIJJJ@@@@@@...%%%%%%%%%%%% ǾOTTY^cfgkkooossssssssssssssssrrrrrrrrrrqqqqqqqqppppqqqqqqqqrrrrrrrrrrsssssssssssssnnic^TOJEE;;;nnnnnnnnneeeeee\\\SSSAAAAAAAAAAAA......%%% żTTY]bffkkooossssssssssssssrrrrrrrrrrqqqqqqqqpppppppqqqqqqqqrrrrrrrrrrrrssssssssssnhc^XSOJD;;;wwwnnnnnneeeeee\\\\\\JJJJJJAAAAAA888888...%%% ùTY]bffkkooosssssssssssrrrrrrrrrrrrqqqqqqqqpppppppppqqqqqqqqqrrrrrrrrrrrrrrssssssmhc^SNIID;6wwwnnneeeeee\\\\\\\\\JJJJJJAAA888888......... Y]bffjkooosssssssrrrrrrrrrrrrrrqqqqqqqqqppppppppppppqqqqqqqqqrrrrrrrrrrrrrrrrrmhcc]SNID?;vvvvvvnnnnnneeeeeeSSSSSSJJJJJJAAAAAA888888%%%%%% ]bffjjooorrrrrrrrrrrrrrrrrrrqqqqqqqqqpppppppppppppppqqqqqqqqqqrrrrrrrrrrrrrrrmhc]SSNID;vvvvvvnnnnnneeeeeeSSSSSSJJJJJJAAAAAA888888%%%%%% ǽbeejjnnnrrrrrrrrrrrrrrrrrqqqqqqqqqqppppppppopppppppppqqqqqqqqqqqrrrrrrrrrrrmhhb]SNIIDvvvvvvnnnnnneeeeeeSSSSSSJJJJJJAAAAAA888888%%%%%% Ļeejjnnnrrrrrrrrrrrrrrqqqqqqqqqqqpppppppppooooppppppppqqqqqqqqqqqqqrrrrrrrrmgb]XSNIDvvvvvvmmmnnneeeeeeSSSSSSJJJJJJAAAAAA888888%%%%%% ejjjnnrrrrrrrrrrrqqqqqqqqqqqqqpppppppppoooooopppppppppqqqqqqqqqqqqqqqqrrllgb]SNNIvvvvvvmmmmmmeeeeeeSSSSSSJJJJJJAAAAAA777888%%%%%% ijjnnrrrrrrqqqqqqqqqqqqqqqqpppppppppoooooooooppppppppppqqqqqqqqqqqqqqqqlgb]]RMIvvvvvvmmmmmmdddeeeSSSSSSJJJJJJAAAAAA777777%%%%%% iinnqqqqqqqqqqqqqqqqqqqqppppppppppooooooooooooppppppppppqqqqqqqqqqqqqqlgb\RRMvvvvvvmmmmmmddddddSSSSSSJJJJJJAAAAAA777777...%%%%%% immqqqqqqqqqqqqqqqqqqppppppppppoooooooooooooooppppppppppppqqqqqqqqqqlgaa\RM~~~vvvvvvmmmmmmddddddRRRSSSJJJJJJ@@@AAA777777...%%%%%% mmqqqqqqqqqqqqqqqppppppppppppoooooooonooooooooopppppppppppppqqqqqqqlfa\WR~~~vvvvvvmmmmmmddddddRRRRRRIIIJJJJJJ@@@AAA777777%%%%%% mqqqqqqqqqqqqpppppppppppppooooooooonnnoooooooooopppppppppppppppppkffa\R~~~~~~vvvvvvmmmmmmdddddd[[[RRRRRRIIIIII@@@@@@777777%%%%%% pqqqqppppppppppppppppppoooooooooonnnnnnoooooooooopppppppppppppppkfa\\~~~~~~vvvvvvmmmmmmdddddd[[[RRRRRRIIIIII@@@@@@777777%%%%%% ppppppppppppppppppppoooooooooonnnnnnnnnoooooooooooppppppppppppkkfa\~~~~~~uuuvvvmmmmmmdddddd[[[RRRRRRIIIIII@@@@@@777777%%%%%% pppppppppppppppppooooooooooonnnnnnnnnnnnoooooooooooopppppppppkfaa~~~~~~uuuuuummmmmmdddddddddRRRRRRIIIIII@@@@@@777777%%%%%% pppppppppppppoooooooooooonnnnnnnnnnnnnnnnooooooooooooooppppkkf`~~~~~~uuuuuulllmmmmmmddddddRRRRRRIIIIII@@@@@@777777%%%%%%%%% ppppppppoooooooooooooonnnnnnnnnnnnnnnnnnnooooooooooooooooojee~~~~~~uuuuuuuuulllmmmddddddRRRRRRIIIIII@@@@@@777777...%%%%%% oooooooooooooooooooonnnnnnnnnnmmnnnnnnnnnnoooooooooooooooje}}}~~~~~~uuuuuullllllddddddRRRRRRIIIIII@@@@@@777777...%%%%%% 000ooooooooooooooooonnnnnnnnnnmmmmmnnnnnnnnnnnnoooooooooooje}}}}}}~~~uuuuuullllllccccccRRRRRRIIIIII@@@@@@777777777%%%%%% &&&MMM```ooooooooooooonnnnnnnnnnnnmmmmmmmmnnnnnnnnnnnnnooooooooj}}}}}}uuuuuullllllccccccRRRRRRIIIIII@@@@@@@@@777777%%%%%% 000``````ooooooooonnnnnnnnnnnnnmmmmmmmmmmmmnnnnnnnnnnnnnnooooj}}}}}}uuuuuullllllccccccQQQQQQIIIIIIIII@@@@@@777777$$$%%% 000000``````ooooonnnnnnnnnnnnnnmmmmmmmmmmmmmmmmnnnnnnnnnnnnnnnn}}}}}}ttttttllllllccccccQQQQQQQQQIIIIII@@@@@@777777$$$$$$ &&&///999``````rrrnnnnnnnnnnnnnnnnmmmmmmmmmmmmmmmmmmmmnnnnnnnnnnnnnȿ}}}}}}ttttttllllllccccccZZZQQQQQQHHHHHH@@@@@@666777$$$$$$$$$ //////CCC_________nnnnnnnnnnnnnmmmmmmmmmmmlmmmmmmmmmmmmnnnnnnnnnnǿ}}}}}}ttttttkkklllccccccZZZQQQQQQHHHHHH??????666666---$$$$$$ &&&//////LLL_________nnnnnnnnnnmmmmmmmmmmmmllllmmmmmmmmmmmmmnnnnnnǿ|||}}}ttttttkkkkkkccccccZZZQQQQQQHHHHHH??????666666---$$$$$$ &&&//////999VVV_________{{{nnnnnnmmmmmmmmmmmmmllllllllmmmmmmmmmmmmmmnnǿ||||||ttttttkkkkkkbbbbbbZZZQQQQQQHHHHHH??????666666---$$$$$$ /////////BBB____________qqqnnmmmmmmmmmmmmmmllllllllllllmmmmmmmmmmmmmǿ||||||ttttttkkkkkkbbbbbbbbbQQQQQQHHHHHH??????666666666$$$$$$ &&&/////////BBB^^^^^^^^^^^^hhhmmmmmmmmmmmmmllllllllllllllllmmmmmmmmmmƾ||||||sssssskkkkkkbbbbbbbbbQQQQQQHHHHHH?????????666666$$$$$$ &&&/////////888LLL^^^^^^^^^^^^^^^zzzmmmmmmmmmmllllllllllllllllllllmmmmmmmƾ||||||sssssskkkkkkkkkbbbbbbPPPQQQHHHHHH?????????666666$$$$$$ %%%/////////888UUU^^^^^^^^^^^^^^^pppmmmmmmmlllllllllllkllllllllllllmmmmƾ{{{|||ssssssjjjkkkkkkbbbbbbPPPPPPHHHHHHHHH??????666666$$$$$$$$$ %%%888888888888BBBTTT^^^^^^^^^ggggggzzzmmmmllllllllllllkkkllllllllllllllƾ{{{{{{ssssssjjjjjjjjjbbbbbbPPPPPPHHHHHHHHH??????666666$$$$$$$$$ &&&///BBBBBBBBBBBBBBBKKKgggggggggqqqqqqqqqzzzlllllllllllllkkkkkkllllllllllŽ{{{{{{sssssssssjjjjjjaaabbbPPPPPPPPPGGGGGG??????666666---$$$$$$ &&&&&&//////BBBKKKKKKKKKKKKKKK^^^ppppppzzzzzzzzzzzzzzzllllllllllkkkkkkkkkklllllllŽ{{{{{{rrrssssssjjjjjjaaaaaaPPPPPPPPPGGGGGG>>>???666666---$$$$$$ &&&&&&&&&&&&//////////////////999999BBBUUU^^^^^^^^^^^^^^^hhhqqqlllllllkkkkkkkkkkkkkkllllŽ{{{{{{rrrrrrrrrjjjjjjaaaaaaPPPPPPPPPGGGGGG>>>>>>555666666$$$$$$ &&&&&&&&&&&&//////////////////999999999BBBBBBBBBBBBBBBBBBLLLLLLUUU^^^^^^ggggggggggggqqqqqqllllkkkkkkkkkkkkkkkkkkkżzzz{{{rrrrrrrrrjjjjjjaaaaaaXXXPPPPPPGGGGGG>>>>>>555555555$$$$$$ %%%%%%%%%//////////////////888888888888BBBBBBBBBBBBBBBBBBKKKKKKLLLLLLLLLLLLUUUUUUUUU^^^^^^^^^^^^gggpppzzzzzzzzzkkkkkkkkkkkkkkkkkkkkkļzzzzzzzzzrrrrrriiijjjaaaaaaXXXPPPPPPGGGGGG>>>>>>555555555$$$$$$ %%%%%%%%%//////////////////888888888888BBBBBBBBBBBBBBBBBBKKKKKKKKKKKKKKKKKKUUUUUUUUU^^^^^^^^^^^^^^^^^^gggggggggqqqqqqqqqqqqzzzkkkkkkkkkkjkkkkkkkkļzzzzzzzzzrrrrrriiiiiiaaaaaaXXXOOOOOOGGGGGG>>>>>>>>>555555$$$$$$ %%%%%%%%%...///////////////888888888888AAAAAAAAABBBBBBBBBKKKKKKKKKKKKKKKKKKTTTTTTTTT^^^^^^^^^^^^^^^^^^gggggggggppppppppppppppppppzzzzzzzzzzzzzzzzzzzzzkkkkkkkkjjjjkkkkkļzzzzzzzzzrrrrrriiiiii```aaaaaaOOOOOOGGGGGG>>>>>>>>>555555######### %%%%%%%%%%%%..................888888888AAAAAAAAAAAAAAAAAAKKKKKKKKKKKKKKKKKKTTTTTTTTTTTT]]]]]]]]]]]]]]]]]]gggggggggppppppppppppppppppyyyyyyyyyyyyyyyyyykkkkkjjjjjjjjkkûzzzzzzzzzqqqqqqiiiiii`````````OOOOOOGGGGGGGGG>>>>>>555555######### $$$$$$%%%%%%..................777777777AAAAAAAAAAAAAAAAAAJJJJJJJJJJJJJJJJJJSSSSSSSSSSSS]]]]]]]]]]]]]]]]]]fffffffffppppppppppppppppppyyyyyyyyyyyyyyyyyykkjjjjjjjjjjjûyyyyyyzzzqqqqqqiiiiii`````````OOOOOOFFFFFFFFF>>>>>>555555,,,###### $$$$$$$$$$$$..................777777777@@@AAAAAAAAAAAAAAAJJJJJJJJJJJJJJJJJJSSSSSSSSSSSS\\\\\\\\\\\\\\\]]]fffffffffoooooooooooooooooooooxxxxxxxxxxxxxxxxxxjjjjjjjjjjjûyyyyyyyyyqqqqqqiiiiii`````````OOOOOOFFFFFFFFF>>>>>>555555,,,###### $$$$$$$$$---------------...777777777777@@@@@@@@@@@@@@@@@@IIIIIIJJJJJJJJJJJJSSSSSSSSSSSS\\\\\\\\\\\\\\\\\\eeeeeeeeeooooooooooooooooooxxxxxxxxxxxxxxxxxxxxxjjjjjjjjjºyyyyyyqqqqqqhhhhhhhhh``````OOOOOOOOOFFFFFF===>>>555555555###### $$$$$$$$$------------------666666666666@@@@@@@@@@@@@@@@@@IIIIIIIIIIIIIIIIIIRRRRRRRRRRRR[[[[[[[[[\\\\\\\\\eeeeeeeeennnnnnnnnnnnnnnnnnwwwwwwwwwwwwwwwwwwwwwjjjjjjjºyyyyyyqqqqqqhhhhhhhhh``````NNNOOOOOOFFFFFF======555555555###### ######$$$$$$------------------666666666666??????????????????IIIIIIIIIIIIIIIIIIRRRRRRRRR[[[[[[[[[[[[[[[[[[[[[dddddddddmmmmmmmmmnnnnnnnnnwwwwwwwwwwwwwwwwwwwwwjjjiiºyyyyyypppppphhhhhhhhh______NNNNNNNNNFFFFFF======444555555###### ############,,,---------------666666666666??????????????????HHHHHHHHHHHHHHHHHHQQQQQQQQQQQQZZZZZZZZZZZZ[[[[[[cccddddddmmmmmmmmmmmmmmmmmmvvvvvvvvvvvvvvvvvvvvviiiºxxxxxxpppppphhhhhhhhh______NNNNNNNNNFFFFFF=========444444######### ############,,,,,,,,,,,,,,,,,,555555555>>>??????????????????HHHHHHHHHHHHHHHHHHQQQQQQQQQZZZZZZZZZZZZZZZZZZZZZccccccccclllllllllllllllllluuuuuuuuuuuuvvvvvvvvv~~~~~~~~~i \ No newline at end of file diff --git a/assets/cornell_box_empty_pl.json b/assets/cornell_box_empty_pl.json new file mode 100644 index 0000000..ad31d87 --- /dev/null +++ b/assets/cornell_box_empty_pl.json @@ -0,0 +1,127 @@ +{ + "geometry":[{ + "comment":"back_wall", + "type":"rectangle", + "p2":[556, 0, -559], + "p1":[0, 0, -559], + "p4":[0, 548.8, -559], + "p3":[556, 548.8, -559], + + + "ac":[1,1,1], + "dc":[1,1,1], + "sc":[0,0,0], + + "ka":0, + "kd":0.5, + "ks":0, + + "pc":0 + + }, + { + "comment":"right_wall", + "type":"rectangle", + "p1":[556, 0, -559], + "p2":[556, 0, 0], + "p3":[556, 548.8, 0], + "p4":[556, 548.8, -559], + + + "ac":[1,0,0], + "dc":[1,0,0], + "sc":[0,0,0], + + "ka":0, + "kd":0.5, + "ks":0, + + "pc":0 + + }, + { + "comment":"left_wall", + "type":"rectangle", + "p2":[0, 0, -559], + "p1":[0, 0, 0], + "p4":[0, 548.8, 0], + "p3":[0, 548.8, -559], + + "ac":[0,1,0], + "dc":[0,1,0], + "sc":[0,0,0], + + "ka":0, + "kd":0.5, + "ks":0, + + "pc":0 + + }, + { + "comment":"ceiling", + "type":"rectangle", + "p1":[0, 548.8, 0], + "p2":[0, 548.8, -559], + "p3":[556, 548.8, -559.0], + "p4":[556, 548.8, 0], + + + "ac":[1,1,1], + "dc":[1,1,1], + "sc":[0,0,0], + + "ka":0, + "kd":1, + "ks":0, + + "pc":0 + + }, + { + "comment":"floor", + "type":"rectangle", + "p1":[0, 0, 0], + "p4":[0, 0, -559], + "p3":[556, 0, -559.0], + "p2":[556, 0, 0], + + + "ac":[1,1,1], + "dc":[1,1,1], + "sc":[0,0,0], + + "ka":0, + "kd":0.5, + "ks":0, + + "pc":0 + + } + + ], + "light":[ + { + "type":"point", + "centre":[278, 540,-279.5], + "id":[1, 1, 1], + "is":[1, 1, 1] + } + ], + "output":[{ + "filename":"cornell_box_empty_pl.ppm", + "size":[500,500], + "lookat":[0,0,-1], + "up":[0,1,0], + "fov":40, + "centre":[278, 273, 800], + "ai":[1,1,1], + "bkc":[0.5,0.5,0.5], + + "globalillum": true, + "raysperpixel": [10, 10], + "maxbounces": 3, + "probterminate": 0.3333 + } + ] +} diff --git a/assets/cornell_box_empty_pl.ppm b/assets/cornell_box_empty_pl.ppm new file mode 100644 index 0000000..dde5788 --- /dev/null +++ b/assets/cornell_box_empty_pl.ppm @@ -0,0 +1,11 @@ +P6 +500 500 +255 +0q0D`@F_BEX@GYAK^HK[FI^FP`KG]DLbHGTBIZCGVCAU=EYAK\HHZDCY?HVCJWEET@CS=IYCL]FHZBJWEGVCCV>M]IHYBH[BK^GFSAN^HL\HLZEK[GGWBH[CJVCL[GETBKYGIYDK[FO[JMXFKVFRbOJPBKZFIZEIYCISAJYDKXFLUFKZEQ`MNWGIYFRaKOWHIXBMWHHXCISCIUALXHO[IGRAIWANVGLXFJVEKUDN[IP[KKUEOYIRXLMYHN[FOZILXHO]IT]NV^PNUHJVEKYGKTEP\JNXGKUEKUERYMMWFQ[INWJQZMKUGOZINUGJTCU\ONXGNXGIRDLTBNWGMWEPZKNWGSZLOXHSZMTXKMUGNTFPVJS[LJSCV^PKRCU\QPVKPVIS\MUVLQUHUZMOUGY]RMUGW`RR\LLUESZMVYQPYKIQBPTHKQBQYLUWLRYMTXMRUKU]OSVKPWIQ[LPYIW]PSYLU[ORVKWZPLSGV^OVZNV\PRTKPPFU]PSXLRXLLRERWKSWIQRGNSETVIPUHUYPRWJRUIS\NSVMQWKNUGZYRPWIVYOQWHQVKWZNPRJU[MQTHUWLX[QPUHUTIPUFZ]R\ZSTYMRXLTSIVXNUYMZ]TRYLY[PSXJRUJV]OVWMSVJVYNWYP^]UPSIWWNMPDYZQQSIPTHUULXVNZ[QXWOTRIUWMTVLURJYZOVXMY[PSSIZ\SVWOSVKXYPQSJWWNQTJOOEVPHWWMNRGXYOZVOYVNWSJQOGSSLWTMXUMPQF[XQUUMXVNUTKPMDXVN[ZR[]T\XROQFQPHVTLTOGYUPWTLMQEYXRWWMPOFXSL]^UXTL_YSUQKUOITRJUUMWPJTQISNGNKCSNGXWM[YQXUL[ZQTOHWTLWVNZVOXSKUPGYQKSOIWRLUQGVRKVSJ\UMWPIURJ[UO]YRWPJWTLVQKSMF][UPLD\TOXOH[UNZUORPGTNF[SMWUNWQLZXQZSLSNFPKCTMEZQKSPGVQISOEYQL[VMULFVNHVMGYTLURK[UOWSMXNHZQJUNH_UP[OI^SOYTMXSJWTMWPH]TM_WQ[TNZPJWQKUNHYRJ]QLZRKZPK[SN[RN\TN[PJ_WRRMF\VPUNG[UNYTMRJCYNFRI@XSL\RLVLGTLEWICVPI\OJUKDWLEXMHVMFTHD^SMWLGYQLVMG]UO\QL]SOWQKXOI_SOZLHWIDXKEXNI^RMZQIWOJ[MIXOH^RL]QL`UP[OIXJDXKEULFYKEWGC^RO[OIZMGZMGYNHTGBZMFZMFTGAWMHXLIXIF\NIWJCXIE^SNYJFVGBWJDXJEVJE`RLZMHYMH]OKSFBUG?\RK_NJZPKYLG`NK\PKWFB\NHWOI^MHVKEWHEYJE\LH]MIZLH\IE]KG[LIYKF\NJWGCWD?_NK]LG\GB`NJZGDXFAWC=]JGZHCZKFWGC^GD\MI^D?V>;m%#z+s)B^=C^@?Z[GB[IDYEA]KFXJG\HC^FBWB:ZC@W=8]GC]E@\@;a@;p)(|{,r)FbADa@A]=D^@F^BJbFD]@C\>IZDFYAJ\FF[CFX@FZCHYCI]EH\CJ\EEW=I^EGZAH^DEW@H^DF[BJ\FJ[EJ]EL]FO[KLZHFXBF[BFUAN[IL_GO\IL[GIVCJZEO^JIWCP_KN^IHWCL[GI[FMYFLWGIWCEW?IYCLWGMVHMZFHZBIYDGTCGVAHXDN[HLZHMZGHXCLXHM[HLXFKYEMZHIWCJWBLUEPYIM\IKVDR]LJXEMYHJTCLWFQ\KKWEMVFM\GP[JPXIMXGOZJPXIU\NPZJN]IMXHJWEOZIOSINYHNYHNWFMXFGUBPXIQVJOZIMVFR[KLXGOUIOZJPYKP]LLTDPYJR\LQYKU_NR\MQZLQYJR\MT[MOXGSYMO[HV_QNUFQYLQYJU[PQXJMUGTZMT[NPYIS\MPZIRZKTZMMTGQZJQZLRXJOVFTXMQXLTYMLRCTWMQZJQ[LQ[JUZLUYOTXMU]PNQDRZJSXMTZOR[LSZMUZMPWJX^SRVJSZLVYNQXJRVJSVKVYNRVJRXKUYNW\QSYLVYMX^QXYPRVJTWLRWLXZQVYNUYNWWNQUITXMW[OTWLTZMZ_UUXLY^SSUKVXNVULSYMQWITXMUYNVZOYWOZ^STTKUSIVWMX[P[\RRVJWXNTYMW[PTVL[[QVULVXMUVKTWLXXNUUKXZQVXMQUIWWOXXPZ[PXXPTVKXWNPREVVMWWNWXOVVM[[R[ZQYVNVSJZVMYYOSRH[YPSRI]]U\ZRSSIZYQYXOUSJYXOWZP\\STSJWWMVVMXUMTTJWSJTVJYWPTULXUN\XPVSJSQHVUJTUK\YSZWOVTKZVOQOF[YRURKZTMYVOXWMXSKXXPYWO]ZTZWPZUNYXNZUOZTNYTNUTLWRKZTOZUO[VN^YT\XPXUO^YRYUMXVMWSKWSMVTLZVOZUOURK\ZRWSJZTMWTL]YRZUNZTOUTJYTOZSLZSL[VNXRJYSLWRK\TNYTNXSIXNHZTMVSLTOFWNHWRI]TN\XP[SMXPJYULTOFVMG\UPWQKVMG[UMZRKYPKWRKWRK[TNYPKYQJXSKYQJZUKZRJXRIZSLXMGYRMZRL]UN[TL]UPYRJYQK[SMULFWQIYSLYNIWKF[QK\SNXPI]VPWMF\OITMF[PK[PKXKD]UP[UO`SM[OI\QMYPIWLFYJDYPK[OIYMHXKGYLGZOJZNG]OHYQJWLFYMF\NIXJCWID[QLZLGYNHUF@YOIXMHXKEWHCXIBWJE\OJXKDZOH]LGYKFYLFXMHVJFYJEZJF\NIZJEWLE]OJ[NH[NI\NJ[RLZJEYNG\MI[ICZNJ]MGXGBZJE[LFZID[GC\JEVGB^KF^MJVFBZIE[MGZKF\JDZLEbRNZE@_MI_KF]JE_MITB;\JDWB=\E?`HE\GC`LG[GA[JEYFAbJG]FB]HD_E@_E@ZGBa@>\=8q.*|{~z~.q+EeAC`>D^@C_=IdDD^?C\=JcF?Z;B[?HYCG`DJ\DJaFJ[EFXAI\DB\=EZ@N]IJZGMZGEZAN_IIZDL[FH\CG[DK\FKZFJZDKXBH[DK^HFX@K[GHWAHZDP^IK[EIXCH[DNZJQ`LL\GGWBJWCIVDQ^MJ[ELZGO[JL[HL]GIYFM]JIUBKZGI\DLXFQZLJVEJ]FLWDR]LQ[KLZFJYEP\LHXCOYIKZFM\HL\FNXIN\HIVDOZIQYHLWGP\KNYJFXAKWFP]KQZJOXKN[HKVCU^OOYJPZIPVILYEQZLOXHQ[KOUHKYEP]LR\MNZJQZJQXKOZJRZMKWELYHLVGP]LQZKPWJS[OOYHU\OMTFISCNWGKVGOYIV\NMTFU\PRZMQYKTXLLVGX_PSXJV^PPYKV\OQYJRYLUZOSYKPWHOYKRZKQYKWZMKSCNXHW\QV[NQWJTZMPUIV[OZ^SPXJOYIU[NX]SRVISYLOUHOUGX_QRYKUWLU\NUZOU[OSYLWZOW\PV\OPVHUZMOSH[^RV[OWWNPXJUZMVXLRUL\_UW[OV[PTWKUWMTWLSXKVXMVZOPSGXZQX\PVVMUZNWYPTVKSUKVXLWWLX[PSUK]\TQSGSUKUXMSXLRWJ[ZSTXLTVKYZPTSIRRGVZOTUKQTIVWMVXMUTLSTJXWOTTITTJUUKVVNZ\QUUKVZOZ\RQVJXXPUXJTUKVXNZYQVUNVZMZYPTUMQSIUUKWSLUQJRRHTUL]]VTSJVTLVTLSSHVUKVSIZXP]\TVQJXXPXRKYWONOFYXN[XO\YPVULXWP[YRZXOTQH\[QYYNZVOXTMXXNYTMYVPZWNVVK\YRZWQZZSWTJXRK\XQZXPXVNXVL[WOYWNZVPYWOSQKZYOZWPZTNRMEVQJZSNTPGQNFZUN[WOWVNZWN]UOYSL\WQTQIZYPWTKUPIWQJ[SLWOH^WPWQI\WOZPHZPI\UMYTLYSM^UM[SLYSMYUNZSL^XR\WRUOGXSIZRKURJ]VO\WOVQJTNFVNGYPIYOIZTLXRLXSMZSM^TOZPHZUMSKC]RMYNGZTNYOJ\TMZRK[UP]SO\TNYQK\OJZOIYPJ]QKVOIVNFWOHYPIXPHYPKXMIXNG_UP[SMWQIZOJYOIYPKYNG]QM^TMZNFVNF]TN\QLXRJ\OJ\PJ[QLYOIXMHXNG\PL\OJXME[NJXMG^PL^OJYMHZQJZNIXLG_PL[KF^MHYLF]OHZMHXHCZJD[PJ^QJ[PK]RL\OK\MG\KE[MHWLF]LGYKFSGB^LFZMHVFA\NI[LIYJF[LGYICYKE_PKXLF]IDWH@ZLH[KF]NH`NI\LF[JF]NJZOJ]JE[JC^KF]HBXHAYJDYIBXB>`IFZIE[IEWEA\F@ZKEYF@\FB[JD`JE[FA_IF`JF^GB^ID^HEZC>aEAbD@ZA<[?:`D?^EA`@[;D^AF^A=\8E[AH`DFaBA[=I^DJbFKaEFY>G[DJcGJ[DH]EE^@BYG^BBX;M^HJ^EM`IK^GK\FJXDH^DL_GK\DCZ>M^IG[CJ\FK[FHYBL]EJ[FI[DL[GN]GGYCN]JG\AO]KIYDL[FO]JP]IMZHN[HFY@LYFIXEHYBQ[KM\JJUCN\KGZAP_KLZEM^IJYEJXEM[ILVGLYEK\GNZIS_MR\MK]GM[HL[GLYEKZFKYEP]LO[IOZJNUHN[HN\GNZHR]LP\IJWEP_LQ_JQ^LR[LLZFOYIIVCT`ONXHS[KQ[LOYIR\NQ[KOYJQZKPXJR[JS[NR]KQ[LPYHNXHR[LU^OS]NOVHT\OQZITZNT`NNXGRYMMWFS[MQUIPYIQ\KPZKU]NS\MV]OS\MQWIKRCSYMT\MSYMSWKT\MT\NMSET[LQWIQZIRWLMQDU]PT[NSYKNWHTZMY[QQVGV\NWZPV]PZ_STYMTWLQVJSYMTXLQVIRYJNVEY\QVZPPXKW\ORXKZ]RRYLZ[RTZMSWKPVHX[OU[NQVGUVNV\NTVKUWMXXOSXLVXMQUJZ^RVXNWYOZ[QW\OWYPVZNPSHQRHUXLRSIUULQWI[\SSYLVXM]]TZZRZXNYXPTVKRVJW[OUTKWZOXVNUXLVTKVVMX[P\]TVXOVYLVXO[ZPUXMUVNWWMXYPUTLY[QSULTVKYZPSRGSUIUYL\ZPRUJXYOZYSQTHZVNZZOSUKYXPYYPXULWVMVRIWTLYWOXWNXVMSSJ[ZQ[YQUUKUSKVSKYXO][TSSHWTLZUKYZP[XO[YPWTLWSKTNH]XQXSKTTKVRIYVMZVNYVNUSJ^ZR^[S_ZSWSIZTMYWOYWP\WQUQIVUMWSKXSLVQIXRJZWQWTLWVLZUOUTJ`ZSWTKXVMWTKVQJZSLVSJZTMWQKXRK[WP]YRWSKWSKWRJ[WOXTLWQGYPI]XRWNI\XQTOI^VOXTMUPGXRK\TNWQJ]SL]TMXQK\VOUQI]VPVQH[QKTMFZTNUNF\SOYRKZRKZTMYPIWOIZQL]VPWOFZQKWMH\PK\PKYQJVNF\SNZPIWPKVQHXPJ]TPZQKXNI_VQYLFYRK[SLXMF\TMYSKYQJXOIZOH\QMVLG]QK]UO\RMZOKXLFZOH[PLRHA^SMYNHYPHYKE[ID\OH\QM[JEZLFZMH]MF_MH\MG]PJZNI[KEYMFXHD\NI^QMUJC[RHVLD\PK\PLbQL^RL\LF[IF[MGXKDbLG[LHUD@[JEZLGZMG\NH\NIZMG^MH[ID\NHZID\LFZICZJDXIC[LH]KE]NIZIE\JFZJE\KFYKEYE=[KG[JE^HFYEAYG@]IEZIE^JF\KFZFAXA=]ID`HD\FA^HC^JF\C@_FB_HD[GAaE@aHD`FB_IE_@<_B>aDAbD@bFC\;7q)'yz}}||x|v&s$Ba>C`?HaC>Z9>Y;@^=@a;G`BB\=C]>Db@Dc@CZ?LcIG_AJ_FF]BFZBGYAJ[CJ^EC^?G`CNaHJ^FJ_FGZBMcIK\DE^BHZCI[EJ[CL^FJ]DFYBL[GI]EDW@J\GEX>I[CG\BDW=M[IJYEIYEN]JL[FHYBKYER^NLYGMXFJWEP[JJZEMYFN^HN[HL[EN\JKVDU`PL\GNZFHXBO\HP[LN^JKZGN]JP\JO\KOXIP[JR^LL\HMYHPZKOZJNZIRbNR]MLVEKXENZHN]JL[FQ^LOYHOWGPYKNZHMWHKXFNYIP^LR[LJUCJUDQ^JQXJKVEPXJU`QT[OQYJV^QT\NO\KP\JN\ILSDNWGRWKLXERYLSYNW\PPZJS[LSYKMXFQ[LP[LQZJPZJT^OTZLS[NTYLPYKNYHV]NPVITZLOUIU[NTZMPXIRXKQXHU\ORZLSYMOUGRYLRXKSWKV]POZHTZNS[LX]QPWJNWGX\PUTKVZOTZMU[NXZQW[OQUJW_SXZPSZLPVJX[ORYLTXJPUHTXMTXLTYOY\PUYLTXMSVLQUIWZNTYMX[PV\NVXMVZPZ]SWXMTWKVYNX[PWZMRTIVUMVZOX]OUYNWXNSXLTUKWWNX[PVXNWWN[\UVYMZZQURK[[RX[QVWLX[PZYP[[SUVL[[SWZOYZQZ_TZZQWXOZYO\\RUXNWYNZXPZXPVYOY[QY\QY[QXZNWTKZYQZ[OUXMXUM[YQWVLWWMWWMSRJ[WPSQGVUL_\T\YR][SUUJXTM[\RWVM[ZPZZRVUKXULUTJ]ZSTTJZUMZZQVVL^]TVTL[WQZXNYVPYXOZXNWTLVWNZXPXWMUUMYWMWQIWTMTTJROEYSMXTM^ZSYUKTQHURGYVNXUL[UMYSMZVL[TLYULZTLXULZWP]VPWTLXSLYUMYSM[TKZSOZUO]WP[VMWTLWTK]UNWQK[VOZWNZVMWRJXPI^ZSYUKVOGYRKZUM^WRXSL\SM\UO\XQXPIYQLXSL[SLYQL\SM\TMYSJUQJZSL]TMZSM\RN[SMWQIZTLZPI[SL[RL_YRXQK]RKWOHUNG[TN[QJWPKXPIZRL[QM[PJ\RM\TMYQJZRJ]SL]RLXQJ[PH^VQ^QKWLEZMH\UN[SLZNH[PL_SM]QKWMI^SN[MI]QL[QKXMGaSN[UN]PJ`TO[QL\OIZQK^OKZNJ^QIWNFZQMXNF]QNYKDWLGZLF[OKXLF]OKXJFYJDYNIaSNZLFZMH`SN[NHTF@XHBZHBZGB_QLYHB[KG]NJ[LEXHBZLF`OJ]MH^LF]LIXHCXKEWHE`NI^IC\JEYECZD>WJD^KEZGBVE@[IEYF@ZD@VC?^FC^IE[HC\JD^GC\JE_E@[A>\C>aKF[E@^IE_FB^C?_GB_FBfNKaLIaID`EB_GC[A=^D>^>:dC?fFB_@;p$!uyzz~~}|xzy$r!@bLaGH`CE_BJbFKaHG[AMcIK_EEZAL^FJ_HL_HL^GH_CI[DCV>F\@E[?H_CK[ENaIGZBI[DI]DL^GKaGM^HL\GG\DHWBP]LP^KJ[EM]IO^JP]IN\IMZHJWEL\FN^IM\HO_IQaLNZHP[KMZHKZFM]ILZEN\IL\HN[JMZFO[IPZJR`MNZIP\JP\KN[HQ]LM\GP^KQ_LNZIKUET`NR^LR_LGVBS^NQ]LS[MNXGRZJLZFNXGMWHJYDT_OV`PN\HLZFNWHS\NS^MOYHNVEOZIT]NMUGQ\LO^KR[KR\LQ[KQ[KPXGOXGJUBRZHQZJT]MR]LW]RW]QRYLT[NX\QV[OPYHQ[JR[LS[KNXGQ\KT\MPRGV\OR^MV[OR[LLTDSYKQYJNYHOUGRXJSZKRVLS\NU[OR\LQWIOUIUXLQZMPWKRWJVXNU\MUXOUWMW[PW\PUZNQYKSZLUWLUZNX]OQVHTXLQSHUZNW\PVZNT[NX]QX\QR[LSXKRVJSZMTVLX\PVYNTUMQUJTYMRZKOTGVXMY[Q[]SVZLVZORUI\\SYZOSULXXNY]SUWLUYLUXLTVLRTHXZPV[OVYN[^T\_UVWNWXOYYPSSIVVKUYM]YQYYPX[QYYPWVLY\PVWMWYO[ZTZ[RZYOY[RTTIZYO]ZRXWN\ZSTWLXVMXXMSRIWWMZXPVYKYZQXZPXYN\]S[[R\\S_]SRTG[ZQYUNZZP[XNYYP\ZOX[PZ[RYVOWUJYVLUTKWUMXUMVTJWVN[ZRZWOVVMYYOZZQXVKTPIaYTWULVUKYXP[XRZXN\ZQUPHZVO[YRVSLXTLXQJWPJUQJZVMUSIWUMVRIYULVPGURIXQJTPGWTLZWP[UM[UNTSG]YRXUMXSKXSK[WLXQJWUL_YQVQJ[SMYYQ[VOWQJ\WO[PJ[TOYSLZTN[UO[UOWQHYSKTOH_XR\WQUQI^TM\WQVJD[XQ[SN]XP^UPZTMXQJ[RNYPKTKC[SLXRJYPIZOG\UNWPI\QL\OJZRJXRLYRMWSL[UNYTKWJCWMG\QK[SMZQLYNH]RL\TM\UMZOHXNGYNI]UM\UP]TOXKD]TN]PK[QK[RJWKEYOG^UP\SNWOFXMEYRKYNH\PJYMFXOI[PI\QK^WQ^RM\PJ[PJYKD]QK\NHZPIZLGZLF\KEUHA]PJ]LHZJE\JE]PL]PKZMHcVP]OHZPI\KEYHB_MIZJF]PL[MF^MH`QLZKGWFBWGAaMHVJC[JE_LGYLEYKF]KF_LG_KH[LF[E?[LHYGA]JF]NI_KH_JE\HCYGA_JEcMI_GB\FA]FBbMH[HB]JE]KGcJD^IE^D@aKF[E=_IE\FA]JE^GC[@;ZIBaE@bIF]E@\C?cF@[C>^@;^C>eFBq'&{z|~{{z|y|'o%;`6FcAAc=FcBJdEA^>F_BHbDF_@B_?IcDD`@GaBE^AE\@F_CE[=F^AIcFI`CG^BH`DK^FI^EE]AIaEJ`FFZCO^IC]>I\CL^GEZ?I^DJ[FDY?O]KG]CI]EI\EJ[GKYEN`KJ]DL]FMZHG[CJ]DL[GN\JJZEN_IN_JIYEM]IMYFM_HJZFI[DL[GM\GM[HPZJMZHL[GM\GP^KIWAO^IHWCN\HO]IP^KO]JUaQHTBN[JO\IP_KQ^MN]HO[IO]JS_NN[GO[IQ]KP\KQ]KLVEQ[LR_LP\IP]KT_OU_OT\ONZHOXJU^OIVDOYHM[INXHOYGT]NPUJQZKPYHR]MMYGRZLRZKV]PPWKQZIU^PLVFQXJU\MSZMKYESZKT]MRWKS[KRXLS[KQYKX`RQWKT\NLUFX^RT]NOVHQXJTXLTZNV]OT[MS[MS[NT[MU\PSYKU]OU[MP[JTWMTYLSVKRYKU[NQ[KW\OPXIT\MW]RZ_USZMTYLUZNV]PSXMY\RSVHQWJT\OW[QW[PSXKWZOT[KTYLRUIX\PTYKPSHVYNW[QRUKX\Q\_TW[QTZMTYMQVIUZNY\QY[OZ[PY\OY[QUULVYM[]SXYPUWKUVLRWIXYOURIY\QZ[QZZPWWMY]SXVN\^TVZNYXPVWMYYQVVL\\RWXNWULVXLYWNXYPVXO\\RXWNW[OYWPWWMXZQYXOXXPXWMRRGTSHVRLVVLXYPVTKUSGWWLXVM\\RYVPYWN\^UXWNXUKUSHVVLSSJXXMYXO[\QWWOXVMUTJWVMYXOTPG]ZSXTKTSKYVO[YPYXOYZPXWL[YRUPHTTIWTK\[RXSH[YR^XRXUMUQI]ZRTPH_^UTOH]YQYWM\VP^WPZYPWTK^ZTWQJVPH[TL`\UXWM]SM]UPZUM]ZR\WO[SM]UO[XPWSJ[TLYQJ\QJYTNZTN^XQ\QLYRJ[SMXTL\UO[TO[UOZQHZTLZSL]YQZSK]VNWQJ\VO\RMXSJYSM^UP`UP[SMXPJ[SM]UOVQIZVMUPIYQLVPIYTMWOI\RLWOG[QMWNHYOJXQK_VQXPJ`WQ\RLVKDbTPaUOVMEUJD[PL\RM_TOZRKXNG]QL]UOZNI]PK_RL_WO[NI^TN^PKYLH]SNbUR[QKYRKYOI^SNXOH^QJ\RKXMHZNH]PKYPJaTMWKD[NH]RK[KFYMHZKDZMIYF@]OH[LG[LG]QL^LG]OHXLF\NI]QJULDYNH`RM[KE\KG_NJ[LEYJCYJDWKF\HD[IC\MHbQMZKG`LF_MFZJFZGAYJD\KH\MIUC=WID]NJaNJ_JE\KE`MIaNJ_MGYE@[HB]JEZJDaLHaLH`KG^LHbJE]HD_HD^GD`LF_FB^B<_IE^ID_HDWB>_D?^E@cB?_A;aD@aFCbB>`C?_B=aB>aA>eGD^C>o+&y{{{{~}{yzy|)r&Aa=Cd?FaCB`=@^;EbBD`@D`>E_?Ea@A]>E^AEbAJ_DIfFH_CG]BHbDH]BGaBA^>M`HJ_GJaEL]GE[AH_ECZ?H^BG\CK]EJ[DF\BH]DJ\DL_FK]FH[DObKI^EHZBG`CM]GGYBL`GK^GIZCJ\EK^EO`JPaKHWCN^IPbLJ\EL]GOaIO]HQ^MQ_LO`JO]JJVDJYDM^GL`FMZIM[HKYFK\GN]IOYHM^HP\KQ[JL[FO_JKYEP[JQ`LQ]KSaMM^HNYFT_OP^LPZJP^KR_MOZHS`NQ^LQ^MO^HKUDMYGO[JKWER[KPXJP[JKWEMUFP^KU^NR\KUaPP[KV]OOZISYLTZMRYLQZMR[JPXIU`NP[KOXJQYJS\MY`SQZLX_RU]OR\KRZKU]ONXIPXIWbRTZMR\LV]OTWLU]MP[JT\NS_PV\OQVJSYKU\OT\ONTEPXIUZLOYJRTITYONVFW]PU[NQYITYLUZNU[NW_SPUGY]QUZNRUJXZOWXMZ\SY[PRYLUZNOSHQUHSVKVZNW[PW[OY_USUJPWITZLW\NVYNU]OTXKX[QSWKYZOW[PY\PUYMV[OTUJUWLUWMUYLZWQZ[SSZMRTHY]ORVIUZMWWMUVL[[OQWHTWIUYLZZQWZPUWKWXMWXMVWKWYNW[P^_WY]S\\QTSKXXNUWKVYNWWOY[QZXPSWKVXOYXPZYRZZQWUMYZOVUMZ[QVTLYTLZ]RZVN]ZS\\SUQI\\SZWNSUKWXOPRG\ZQZVPVWMWWOXYNYWN]\S[XOUTIVTNVWLYWO\YRTTK[ZRWYNUXNXXNYWNYUM^ZQ]\S\YR`XSYTN[XP\XQ[VPWWMZUO[XQa\USOFWRKVPIVUMYUM[YPXSN]XRUVLVRKXVLYSKXSL]WP][T`XR_YT]YR\UO\WOVUK[UNZWOWRIXUNXRK[VNZTNUPHZSM\VPZSL[SM_YP[TL[SLYVN^WQ\UNYTNYQK[UM]UM\YQWPH_YT[QKWOI]YQ_XR^XP[UOZTM\SN]PJWNGWOGYOHZSLWPH\RK]UN_VOYTKVMF[SNZPKYQH\TMWMF^SL`VQYMG]QL\RM^VOYPJ^TN\RM\QLYQI\QJWNGZQJ[RMWJDZOIYPH]OJ\OI]PI_SL^RM[PK[QJ\NH[NJZMGZQKZOJZOIYMF\QL\LD[MFYKE`VQ[RM\NH_RK[QL_RN]OK]KG[MFXKC]OJXKFWF@YIB\OHZPJYLF\HC_MHaOJbOLYGBZGCYKEZJF]MHZOGZJEZID[ID[HBZICXKE[GC`NI[HC]KIaNI]HDZKEZHD\EA`NJ]HBaLI\EAbOI_JD\ID[JE^HB`GCaKG]HBYFAcGC[EAcOK^GB]IDcHDeKH[C?]C>_GB_B>aGD_FBcFB_E>aEAaA>dID`B>fHCbA=eFBt(%||x|y{}}}||w|yyz)s'@b=E_ADc>HcDEaBD`@B_=I_DEc@F`BEdAGaAF]AK_GF]@MdID]@I`ED]AC[=I[DE[AH]DHdDI`EE^ALaGJ^FG\BJYDG\BD[@MaGIYDK`FM`IJbFPaKM`IEZ@G\AM_IIZAMaII\CL^HJ^DHYCM]IHZCL]HNbIL\HJ\EJ[FJ[DJZEM\HL_GN\HL]FRaMN[JIXDKZDJZEP]LO[IKXER^KP]KKXFJXDO`KT`NL^GMZHO^JM]HR^LN]HOXIM_JOXJP^KN^INWGIUBM[GTaNRYJIVCU]NOZIPXIMYGQ]JJWES]MOZINYFR[LQ_KV^OS\LQ]KS^MLTDQXIP[IU\LQYKU\NQZIU_PMYGRZKQ[KU\NKUCHUAQVIMUER]LOWGU]LQZLR[KR[KV]OT\NQVIRYLQWIW_QRZKW\OS\LSYKTZLRYLSXKT[NV\PY_RT\NSYKQUJUZNT[NU[OPYIU[LR\MQWKS\LY^SQVJPVGY\PV]PRVHSYLVYNY^SZ\QZ^RXZPSYJV\P\\RSXKVZNUYJVYPRYJWXOUYNQTIX\PU[NVXOTXL[ZS]^USWKXYPQSHS[LVZOV]QTVLZ[RZZPWYOZ[RX\PWZMPUIWZOUUKW\PZYPTVK]]TWYOY]RWZPW[OY[PWUJXZPWYNYXOTVLTWKZ[RUYMXYOXWMRTIZ\Q[[SSVJ\[RYYOWWL]]TYZQVWLXXPWXN^`WYZQ]ZSXVMZ[RTVK\ZQ[YQXYOYYOZYQ][SZ\R\[SVVL\ZQZZQ]XP[XOSOF[[RXXOXUNXWO\ZRYXOYWN\WO^[RYVMXVMXTK]ZRYUNb\VYVM[[PYWN\YRZWPTTKWRIXSKXUJYVOZWOURJUTJZUNXUL^YRYRJXUJ[YPZUM[VO\VN]WQ]XP[VOWRIZTNXOH[VLVQJTQIXPJZRJWQI[VOYUL[UL\VOUMFTQH[UN\UM^WPZUOYSK\UO^WOWTMVOF]WQ]TMZUN]SMUNEVRJWQJ\VO[WOYPIYQH]UN\QLZSL^XQVOI]SM\RMYPI[TM\SKZRLYOIUMFYKG^TNZRI\TM\OI\UOYNH]TN\TLXPI]OJXME[RL\RLWLHXRKZQKZRMYOIWMF_SL_VQ`UORIC\PI`RN\LG\NH[NH^PLXKDZNE\OIWLE]OK\QKZNI]PJZMHVGCXMG\OJXOH_NHZJEZJDXMF^OK]MF[MG_RL]NI^NJ\LGZKE`OK^OLXHCbPK`OJ\GC\MF[KF]LG^NJ`QL\LG^KF^PJ]KGYFA`MH`OJ`KF\KE^NI\E?^HC^HCbNJ`KG_OJ_LG^JD_MI[GB_ID\JD[EAbJE\HD_HB]JE]FB]IC]E@`FC`GB^F@aGCeNIYB<_KG`FAcJDaGCdIEcIEeIEdKGbE@fE@dGCeFB`EAcFBdGBfA;r+*{|{{w|z|y{zz||wv(t'GeBA]B^D^?McGG^DLbHG^CDZ?KaGI`EL`FI^EG`BF\BD[?H`DH^CKbGK\EF`AD^?H`DM_HIaEI_EI]EO_HG\DL]HJ^FL]HJ^EL`GL^GH]CDZ?L]GP]KM]IEY@PbLI]FI]BO_JN^IP]IM^GKZFI[DN]JM[FJ_ELYFK\EQ^KM_HMYGLZGHWCP]KLZHHWBSaMQ\LO^JS_LV_PN\HN[GN[HOZIR_MPZHP^JS_MLXEQ\KP[KP]KP[JS_NLXENWHMXHQ`MTbNS\LQ\KMWER\LR\MP\KW_PMWGPZJRZKQYKU^PS[LS]MRZLX]OT^MQ]KS\MR[LPYHT[MT]MT\NRYKS[LUaPPZKSXKQ\JV[ORYIOXIS[LLTFRYKT\NW_QV]OSYMVYMW^QS[LQYJS[KPXIW]OPVJPYJW^OV[MU[MZ`SV]OSWJWYLX]SY]SQZKUXLW\OV[OV]NV\PPYIWZPX\OVZOQWJV]PW\QV]PUXKY]RW\PY\T[_TVYMRXKVXKUZOWYPTZNTYMY^SY]QVXNUZLXYNXYNUWMY[QY[PXVMYYN[ZQUTJZ\QWWOXYPVXMSUK\^T^^T^]TRTHUVLWXMY[PXVN`bXWXMZXOXYNXXO\\QVZP]]SUVKSTIYYPZYNY[PYZOXWMVYNZ[QVYNUUL][SYVNVWM__UUTIWWM][S\[SVVMWYNUVK[[SWWLVVLVXLYXP\ZRWVM^ZSZVNWWL[YPWSK\\S\\R[[Q\XQXWNYVN]ZQXVLXVNZYN[YP[WP[WQYUM[YPZVN\ZRYULWQKVSL[SL[[QZ[R[XPaYTZYN[VM[TM^XQZUNXTJXWO[UNa\UZRKYRK\VPYPJ^YRYRJ\XPXULZSLYSLYUM^YS^WOYTM^WP\UM`YSWTL\XQ\XQVOI\UN\VNaYRWPHWSI\UM_YR]VObWR`[T]XQ]UN[RLXUL^WQ[SM]TLYSL^VOZPGTKEZSK_XR\VN\UOZTL[RKZRJ^SN[VOYQL^VO\TK^RL^VOZNI\TO^TMYOH_UN\VO^SNYQJ]PK[PI^PL\PJZPH`RMaWQ]SM[OHYTMXOH`SM`SL^SNZJD^SO[OI]OI[OI_RM[OG\NI\NH^RK^LHZNFbQMYJCYNH^MF^OJZLF\QKWJD[KE[LFZIEXLE_PJ]PK`PK[JD]MHdQM]MF_OK\LG^LHaMIZHB]KG`RM^OIaOJ\IC[OKYGB^MI^NH^LG]IE]JE_KF[MG`JD`HB^JFZFB]FA^IE]IEYHBZHAaID`FB]KF_HCdMH^IC^EA`ID\JD^D?_JDfIG]E@`GC_EAaIE`EAcHD`GAaGBbKF`B=`FA^B=eHF`D?aGBeFB_?bD@u+(z{{{{{{~~~|y{y{{zx+r)GdBGfCFdAFdADa?Ea?E`@KbGGcDC`@E`?E^AG`CB_?H_CC\@HcCHbBG`CG`BIbEE^@F]BHbCI`EJeFG[@G^BFcADX@D_AI]DH^CG]BKdGI\DJ`EGZ@J`EG[CN]HF[BMbHO`IJ^FH`DM_GGWAEY@I\DM_HNaIO]IM]GK^GN^JH[CL\GHZ@J^FN\HM]GN^HL\EL_FHYAK[DMYEP]JO^KK\GGZ?O]JQ_KPYJK\ES_LR^MN]HQ]JO_JP]KS^KR]LLYHQ\JMYGP^IMZHS`NOZIO_JV`OR^LP[KU^OT^NRZKP\JNYHPYKS^NQ[KS]NQ`LS^MPXHNYIR\LR\KSYLQ^LP\IT^NOXIO[HR]KR[NU]NT\OU_PS[MQXHSZKPXHV]NW^OW\PT\NQZIV\PUYNSZJQZJW[PR\LW\PU]OT^NTWLWaRV_RUZMU`PU\NSZLW_RT]OT\NV^OW\PQVHY^SW^OT\LZ^SRYKW]PVZNV\PTYLW\QSYKPYJ_`WPVHT\LSYLTXJV]NV\NV[MW\N[\SZ]Q[_VZ_TTXMV[NSWKT\LRYKSVK[]SYVMW\NZ]STWLY\RV\N\^TW[NWYMVYMXYPVVNZ\QY]RWZM\_T]_UWWMRUIXVN\\SZ[QYZPTXMUULTWKZ\OVXMWYN\]SVYO[VOZZQ[\RY\P][SXYO\\TXZNYXPYWLUXNZZQYVNXWMYYOTSJ[]RWTMVWOTUJWYN[\QXWNZYO[ZRYXNUUIVWM]]UYULXVL]]STSJ_[U[[RYWM[[SZYP\XP\\SZVOXYPWWMWVL\[SZYQ\ZPYTMVUJ[[RYWOSRJZWO_YQ]ZS[WO[WOWUM[YQ\YRZRJZRM\TOZUNURH\[Q_ZR]WP\UL\VMZSMURIXQI\UO]WPUPI^\T]XPYVM\XQZSL\VM[VN\UN^YS[YNZRK[SMXQH]WP\VNVTK[UN_ZTWQHVOGZOI\TLYSKaYT]TMZRK[RK[TNYQJ[SMYSM\SNYNEaVR^WPXPGWPG[OI\QL`UO[OK^TOYPK]WPWPH[NI]VO\TLUNGZSK^QJ_SL_QL^SK[NJaWR[PI^TO\QKZMH[NI\TJbXR[NIXLFYHA[RL^QM\SNZNH\PJ]QKZOG]OI`PJZOI\MG]QK_WP_RL[NHbTQZJF]PJVKD]QJ_OIYLFZNHbSO\OI\MH[QL^MH^HC]KH`PL]QL^QKaRLaNI]KE[MG^RM^MH_LG^NGWIB^MHYIC\KF\HD^MH^OH_OJaJE`HC\KFXIC]GA]KDaJF^JE`NI]JD`MH[HE`IF\HB^E@]ID`IC]IE^KFZD@aHC]HC`IFbLGdJFaFA_D?_D@_KFbJF^D@^IC^GA`D?]E@^D@eE@aGB]C>_C?`B=\C=`GDeFCbF@_A=aEBfHCu-*y}{w{z{~|~~~{{{{yz{{|x$s"@b:JgEB`?GdDC_?JcDF`AC\=F_CGdBG`AFaACa>FbAE_BF`AE_AJfFLdGD^AF[AG]@MbIC`?J]EIaDH`CM`GKdGL`FE^?G_CG[BG_DH^DI]EI^DL`HG_CHZCNaHL^FNaGH^DQ`LJ^EJ]EH\DM]GLaIM\FO]HL_HL`HK]FM^HJ^FP]KK[EN^IM^HPaJJ[FN_IL_GN^GK\ELYFUbQM]JNbKPZIVcRSbNSaMM]HM]GJZDQaMN]IO^IO_JSbMP]IO\HO]JO]JP`KR]KPYIR]LLYEP[JP\JSbNS_NP`JOZIT^NQ\JQ]KU]NQ\LR]MV]OS]MUXMW`QMVEPYIU]OV\NQ[JTaPP[IV]OT^NS\NV^PUZMO[GS^MT[MS^LU\MRZKRZIU_RPVHX\OT\MNZHS_MR\KU]OPVHU_OS[LV]NQZIOYIS[KRXIP[JV^OU^PU\KX_QR[KX^QOYHX`QSYKX_QSYKU[OWYNY\PQZIX_PY^RWZNW]QSYLYbTW]PPYIUYMSWJTZLVZNXYQUYL[\RY]QX]QU[MUUJX[PVXKX\PVYNVWMWWKXZNQVIZ^TWZOY[P^_UUYLWXOYXMZ\RW[O[^RUXLZ]R`_YX\Q\_UXWOXZOUWLVYMXZNWYNWXMYYPXYNVWNWXNZZO][RUXMXYO\^TWYOW[PZYPXXL\]RVXKVXMYZR[ZQZZQ\_SXXNXZNZXOWVL``VZYQUUKZWMXYN[YPVVJWXNYUM^\SSSIYYNWSI[XOVSK\VOYWKXWMZZP^\SXXO_YQ\ZRTSHXXPVVLYVMYVL\[PYVM\XQ\WR[WP\YPYWOYVN[YQXWM]XP]YR`ZSZTM\XOXRJVQH[VN]XQ\YQXSJ_WRWQJVTLWRI\UMYWN[WPZQK]YQa\U^ZT\UP\WQ\XP]WP]WQ^WP^WQYQJ_WPYUM\XP\VMXOH_VQZSLZQKXTK[TN`VP]VO[OI]TM]TN_UN\WOXQI[RLXRKaWP]SNXQK\TMXNG`VP]VP_ZSXPH\SLYRJ\SK`XRZQGZPI[OH\RL\TNZMG]WR]VP^RMXOH]RL\RL\RK\RKZQKZOJZNG^TNXNG[PJ]QJZLFZKG\QL]RL^RN[PJ\OIYOH\OI[NIYPJbPJ[PJ[NI\OH[LG\LG^OH`LF[MG]NIYLF_QL\KEZMF[NHZOI]JE\LH^OH[LGYKF]OJ]LF`NI^PJZLEWJBYJC^LGYJD_MF^LG[KF^OI\LF[F@\LE[IC_NI`OI\KF_JFZHD`EA`LH^HEaLI`MIaOJ_KGaLF^JE^IF\KE_FB_ICcNJaNJcJG_ICbLIcKGdQM_GBaID`IDcMJ`ID_GC_GBbLG^C<`A=`E@`GBeEBeC?[A:cGC`FAdE@^B=`JEaE?dC?bC?bE@u%"zxw{}|{}|z~{}yzyz{|zyz&u$C`=Cb@Dd?A`=B_=A`=FcBBa=GbBEcAHbDGcAJeEEbAGbBG`DD_?F]AI`DGaAI_EI_DE^@E[?HbDH`DH`CE_?K`HJ^DL_FJ^DLbHJ]FI_BG[@JaEK^FI^DKZGI\BLaHK`DJcDM`HJ`EJ_EI]DMdIK`EG]BOaKO_HL\EK]EObJIZCOdKNbHN[HI\BK\EOcIN]GNZHRaMP]JL^FP]JOYIQcLO_IN^JQaLQ`IR`MN^IM^IJ]EL[GTbOJ]BM\HN\GM[GP]JO^IQ^KM[GJ[DT`NP^JR^MQ\LS_NP[JP]LS_MR]LP\JQ]JLWEM\GS_LV`NS]MW_RP\JQ[KPZIMYERZMU^NU_PU_NR[KU^NS]LPXHTXKT]OU^NT`OS\NR\KQYJS\KSZKS^MSYLT\LV]NU^OW\PV_PV^OU\NV]OUYLUZLY^RQZJPXJUYMW\PY_QT]MS\NW\P]dX\^SV[OX^OR[KU[MW[PW[OTZKV]N[`UV`P\aTQTHVWJPUIY_RX[NRTH[`TZ_RXYNSYKUWKX[PSYIZ`SY_R[_SZ_T[^RVYKRVKY[PWXNVZNUWL\]R[]SV[NUXLX[OZ[Q\]RTWMVZN[_UUYNVZPT[LW\PY[P[_TX]PXZOW[NWXLRXKW[OUYMUUJZYPWVMXYPWWL]\TXXO[[R[]SWXN]_TWYO[[Q[[RVTLZWOZ\QZZO\YPWXM[\QXYOZYQVULZYOZZP\\TUTIXULa\UWWO^]SWSK[XP[[QYYP\ZRWVKUTI^^UVXL][T]ZS\YQZXP]ZRVRIWTK[XO_\U`]TYWPYZQ[ZQ\[PYVM[YQ_\U]ZRYYOYWO[XR[XP\YQXZN\XMYUM\XQ_[TZVOXSL]WO[VOYWNXRJ]YR\YQ^YRZSL^UMYUM`[SYWN`[S_WQ\VNZQJZTK[WQ\VO^ZRZUM[RMYRJ^XQXRJ^XQ`WQ_ZRXPIYRJ\RL]VM]XPXQIYRJ^WPaUPcZSYTK_UNYQJ[RJ[SM_UP]WP^VOZRK]RM\RM[SM\QK[RJa[S[OJ[QJ^SKXNGVQJ\SL\SN\SM[QJ[OH\PI]RKYOI[NH^TN]QL\NG[SK^SN[QL]QJ\PJ[SK\RMXPJ\RL\PJ\NI[QJVKE^SMYOI`RLXMH_SLbRMYID_RK]NIcRNaOJ[PKZOIWHAaSO[LHUJC]OH\MH^PI`SO`OL`OJ_MIbOK^PK]KF^PK^NIZJCXJC`JFZGBbQK]JB\JEZGCYE?eOK`LH`NI_PI\KFbLGcPL_NI^MIaIE^JE]HC\EA_JE`KFcNJ`JD]JE^HA]IEcKGaLGcKF]GC]GC[FA`D>aFAaIEaHBbIC`IC]E@b@_EA_F@cE@`DAb@;aB>`>;gFBq'#xwyx{zz}|~~}~|}{yyz~||z'v$B`=EfBAa;GbBEfAGfBGgD?aBa=F`BHdEA_=JdFKbFJbFG`CDY@LcGH[CH`CJ^CE^@IaEI`DH]BJcFJ^EC\?FaALbGI`CKdGJcDE\?PaLG_DK_FK_EI\DH\AL\FN`IIaFH[BNcJGZAJ_DJ]DI\DJbEN]HO`JPeLH\BO\JPaKI^BN]HL_GI]EP\JN_JM]FM]FM]GNaKQ_KR_LO[HL]FK[FL\FNaIL[GPZJN]HTbON[IO_LQaMM[ETbON\HO]IO]JP\IPXHKZEMZFRaLPaKV_NQ[IS[KO\IQZKO[IQ]LS^LR]MOYHQ\JP[KNYHPZIP]KLTDP^JT\LR^KR^LS_MU^OQ]KW]NQ[LR^JQZJT]NQ[JNZGU]NU\MS[LS\LW^PTaNR\KXaS[_ST^MO]HU^OR\LX`QT]MX]QT]NU\MW\PU]PRXKZ`SPZIX\PY`QY]RY]RW[PXaRT]MX[QT[JQZJU\MTYKU\MU^OY]RSYJW[MW^PV]NW[OT\MVZM\_SY]QX^QW\OW^PX^RV[OUZLU[NY]PXYNWZOW\OUZLTUIXWMU[M[_RX[P\`STWIX[P[]Q]]QYXNY[OZ[OZ\RTTJWULVYNYZQ\]SX[P\^R[\RUYNZ\R]]SVUKWVLZZO]\RYVN^_V^]T\_TX[QXZOZYN]]SW[M\\SY\PWWMY[QYZPYZOVWM\\Q]ZT\^S\^UXTKUXL[[RWYNWWN]\S\[S][S[WO]\R^[RXSKXSK[VOXVLZTL\[S_\TZ]R\[R\[Q\\RXYO\]RYSJXVMYVN[VN[ZQZYQ_[S]ZR^[S\TN^\T[XP[XP\ZS\WPUTKYYO[XO\YO\WNXUL_WQ\XN]XQ_YRWRK^ZS]VPXTKWSJZUK`ZS\XO^WP^YQ[UL]VO]WP[UMYTM]YO`_XYTL\YQ\UN]XQZSK[VM\TNWRK^TNZTM]UO`XR]UO\SMZVL\SLaZUWOG^XP]SM[QIZPI_WRZPIXSL[SLZOH]UM^WQ[RL`TOZRJ]VN]TO[SKZRJ]UM`YS^UPYOHXNGYNEZOH_SM^RKaTO]PKaYS^RK]QJ_RM`SN_UPZPJ[QK`VO_VN]TM\PK[NI\OG_UN\OGZOI`SM]OHZME\PJ\SLYLE]PJXRK`RM_PJ`RL]PI^PKZKD[MFYLHZNG^KF\MG]MH[MG`NG`OJ^KEdPJ[JD_NJ]IB`MH_MH_LF]HC\KFcPK^OI\FB]MH_LI\GB]ID\HBaOK`OJ]NHcJF[ID]JF`HCaKF]HCbMHbNH`JEaIDcKF_MG_KFaID\KDbKH_IE_JEaIE\GAdIE_KE`EAbFB^FAaE@cIC`E?\E@bFAeHC`@<_B?aC>cHDc@=cFBeD?dD@eFCdB=eDA`AH`DTeNKbGIbFLbGK_FM_IE]?M]GK`HK[FI^DMaIK^EI^EMaIK`FObJLaFNcJQ_LF`AM`HP^JL`GM]GQaML^GRbOK[EJ\DPaLR`LN_IP_KN\FQ`KK^GN^IP]HN\FQbLP^KP_KM]IP_KO`JUbPQ^LMXFOXHO\IP^KM]FLXFVbQO]HMYHP^KT`NV`OS\MSZMNYHS^KQ[LP]KP[JQ\IT_NT^NU`OS[LT^MXdSXdRS\MW_QW^OO[HR\KWbPYaSR\JT_MT]MU`NU]OV`OX`QS^MT\MPYJTYLX_RV^OR[IQXHY`SV\OX^RY`QW^QRZKV[MY_RUXMV\MW\OW]NY_QT\NZ`RW]PV\NSWJV]NU]OW]MTWKV\OUWKSZLRYKY\RUZMV\PYaQS[MY]SU[N\aTWZO\]SW]QWZNX]O[_SXYOW\PZ\QXYOY^RV[NVZOXZPZ^RWYPY\QWYN\ZP^dWY[QXYP[]R\^SUYKZ_RV[O[]Q[]RZ\RXZQSXJWZN[^T\^RWXMYYO[[QY[QZWMY_RYZPZ\Q]^V[ZP[ZQ^^SVSH]\S]\TVXN\\R\\SZ]P`_VYWM`_WZYOYZPWVNY\PYWN`_V_ZSXXNYXO[WOXXOYVN^\T^^TWWKYZQXWN\ZR\YP]\R[VMWUKYXOZXOYXN[XO[XO]\S^[S_\Sa[R^\T^[S\XQ_\T^_U^\S[WO[UM\WO\[P\YQ[VP\WOZYOZWN_YRYSJ\ZSYUL]XO\YPZUNVVLZXP]YP\XO_VP]XP]UN_YSZVN[SL`WQ_YSYTK`ZS_WO^WO[VNXRG[UN]WQ[WQ\VN\VO\VN[VMYUL[TM^XO^UN\VP\RL[UN\TN[QJ^TOYQJ]TMZRKaVQ]TL`XRZPG^WOXQIXOI]UN_VO\TN]RL_TN^PJ[NHaWQ\SL_VP]RJ^SKXMF\SJaSM]RN]PJ^SL]OH`UOZPJZRI[PH_VP_SNbZU]TM]PJZQI_SL_UNXQJ[KD_TO_PJ\NF^MH_MHVJCZLGaSM_MG]PJWLE[PJ^SN^NG[PI`PKZLE`RLcQL_LG]MF]PI`TN\MG`KF[MGZIDZKCXMFXKE]OI`NJaMG\LH]MG^JC_OJbPL`JEbJF[KF^IE^JE]KF`PH^LH_ICZE?cPLZHDaKG^LFbOH[HBbLGaMH`IE_JG_NIdNIYGBdLH`FAcIChNIdLGcHDaLGcJEbFBdKIaGCdKHfJG`JFcJE_EBaE@]E@eGBbFA\D>`GCdAGaCFbCD_?H^AJbEH_CLdGGbAJ`EMaHL_GF_BNeII^DG]BNcILbFL_HMbGF[AJaEKbGOaIH[CG_CLbFI`ENaJH]BP_JReOM`HQcMN`JK\DL`GOeJNcIQ`KM]GP^JSbNO`KK^FJ]FScNP`IIYCJ\EN^JQ_MM_HL[ESaNJYCP_JN_JP^JSaNO^IO_IV_PNYEM[IR_LN\GScOTbPM_FT]NU^OP\JVaPMYET_NO[IP]JMYHO\IS_MR[JS`MWbQV]OS^NQ]KT]NOYIQ]KYcRQ`MQYJR_JMXFPZIN[IQ]KV^PQ_KVaPU^OS[LR\LWaQT]MW_RX^ORYJV_OQ[KXbRRXJR\KV]OV_OOWHQ\JX]QUZOW\OX`RW_OOZIU^OU[LYaR[`SV^PU]OV^OSXIZ`TU]NX^QT^O[bTV\NX[OT\MX]OX_R[`RYZOU\LX]P]`TY\PW]QX]PY^SXVM[]TYZP]^U[_SY[OZZPVYNW\PTXKZ\P^^TY[PW[O^bV\]RZ\RVXOZ]RWYOTXLX[QX[QX[NX\Q\]R]\UZ[QYZPY[QZ\QXXN^^UZ]R\`U[^RYYPWZNZ[RYYR\aU__W`cXYVMZ^RY^SYYPYVM\]S]\RZWMYYOaaWUVKUTJZ[P\]RXYO^_VXWM]ZR\ZQZYP_[S[[O[ZPVVKZYQZXOZYOZXO][Q\ZQ^`XXWP[\S__V^\R\ZR][RXWM[WPWUL[YP[YNa_W_ZS][R`_T[[R]ZSVTH_ZRWUM[VN\YP[YNYTL\WO^[T[WO[WNZTKYTK`\UVTK]VO[WMa[T]XP]XO`[S[VM[TL^YR[ZQ[WM^WP\YQ_XQXTL[UM^XR_\UZSK[WPYQJ\SLXQH_ZRZVN\SN^VOZUO\UN\WNYPJ_YUb[RZTL\UNZPJ_XQZULZSL]UO]VO]TN[RK^TM`UN\SKYQG]VN]UO_SM`VO]OH`VO]TL]UL`VP`UN^VO\OHaWOaWR]UNZPH]TMZTMZOJ[RK^TMbPJXPG]RM_UO\QJ\PK[RJ^RL[PI_QJ[NJ]TO^QL`QM^KG[RK`TO\PHbTN\OIZMFaSN`TO_QLbPK^PJ]NHYLG]OJ_RKbRL]PI]NH_MHcQK^MG_LGZKG]NG\JE_NI[LE\LFcOKcRM`RMaMIaOKbMI^KE`OI^OK]JCaMGbMK^OI[JEaOJbLGZD>`MHbOHbKE[HD_JD_EA_C=aJFcKF`NKaHDaKGaNHaEBbJFcGCbKG`JEaIF^HDbD?bD@gNIdKD_C?[B;cGAcIDaHBbIEbGCdKFaF@cFB`@;dIEfD@_E@bHDfE@g@=u(%{|y}{{{~}zx}}}~|}|xz}y~}yy)w'Fb@Ec@EbAGgBFhADdAFfBIhEH_BF_BLcGIcE=]8FcBFdBHfCDb@FbBD_?JbDMbGE_AG_BDb@H_BKaGKcFI`DJcEEaAJ_EMeHLaGE_@OcJK`FMaHL^GJbFK^EG^@N_IIbEOfKKbEK`EJ`DJ`DK`FM_GL^GH`DObKK]EPdKPbLQbKL_GPbKSbMPbLM]GM]FQ`LQ`KI]DN\HH[CR`LL^FP]KN_ITcNQaJP_KR`KL[GR^LP]JL\GR]JP_MO`JQZJP^JT`OScMN[GJ^EP^JM]GRaKO]IMYGV_PR`LN]IT^OW^PS_MR[KR_LT[MQ[IR[IOXGU_NR^LXcRS\KU^OU]N]eVRZKO[HOYGU`OOZHV`QRZKX`QUZMUbNS\LS_MZ_PT\LRZKU_OR]KXaRY^QQ[KSZLU[LO\JNWFW_PZ^QV\QPYFRVJU\LW_PTYLW]PV[NY^QT\OV]N\bTZaS[]TY_RZ`VU\MT]N\bVX]PZ]PZZRT]NW]NOVIU]MZbSZ_SSWKX]Q^`UW[PY]RX[O]_UZ_SV[NVYLX]Q`cV[]P[_TX\PXYO[]SUYM[`SZ\QY]RZ]QX^PW[NY[Q\\S\_S^\RV[M[^R[\QWYMY\RX[OX[O\^S]_TYWO^\R[\RZ]SZ[QTUK[[R]\R__UXZOYYNXXN]]S\\SXWMZZPYXOZ[R_`U__VZXP\ZO\[R_ZS^^U][S_\T[[RZ^T\YQWWN][RWWMZXOZ[Q`\S][R]ZR[ZQ]ZQYWN`^WYYPYULZZQZTLZYP[XO][SZYN][S[VN[ZPa^VYTN\WO^YQXXM^YQ]YP^YQ`[SWVL]XPYTLb_YYXM\XP[XM_WO\XOZXN^WO\UN[TM_]U`YR\UM\YP\UM`YS`XQ^UM[WO_YS]VOZULa[TcZT[PH\VO[UM^YR`ZQ]VP\RJ\TK[VN_VP_VP_UNZQK]SL\SKYQKXPH_VP^PJZPI`QL\UN^TMZOI]VO]VNbSN[NHaXRcWQYPIbVO]SK\OH]TM[PJ_UN^TM[UM\NI[PJ^TO\PI]PK^SM[PJbWQ[QJ]TLXJDbUP^RM_SNXME^RKYMEZMF^TM]QL_PKbTNXKD`SN^QL`TM]RLZJC`RL]NIbSN^RL\OJaUP[MHdUP^NI\NHcPKcPK_PJ`NFdQK]OI\MG\KG^MGaOK_NI`PL`MH`MJ`OI`PKcPJcSO`IF]NIaOJ_LF[KEcPL`LFYJC^LFcLIaJE_MI_JDbKGbJD^FBaKE_KD]JEbKGdNIaKF`MIaJGbKFcIDbIEbGCaJG^F>]FAbKD_E@cHCcKGdLI]E?bGAbLHbE?_B`C>`C>hJFhKGeD@bE@iGCp||{zy{{~{{}~~}}{}}zx{v}|{}}z*y'De@Bc=Ea@Ec?Bc=>`9Cb@GdBFcAJeEEbAKeFJfFFcBLeIJeFDc?A^>B_=F]AEc?KgGIcEGaAKdHD`@IcCJaEG]BH`CIcDGcCMbHI`EH`CNcIKaFLeGI^CK^GPaJP`JOaIK`FMbHN_IKcFOaKObIO`HQ`KQ`LLaHO\GOaIJbDN`HQbLOaIR`LP`KH\BRaMQ`LObLO_JRaLK_FL[HRaLO^JSaLKZEPZIM]FN\HN]HK_FJ_CJXCO]GT`MN\HN^GP]JM\GO\HR_MR^LM[GP]HQ`KP`JV_QVaPPaKP^JR]LQ`LT`NN[HPYJW]PP[JS_MR\KO]IQ^JQ[IPZHT`NS^NT\LT]MSZKSZMW_QT[LW_QT\NQ\JU_OW^QS]MT[MY`RXaQWaQX`SV^QT[LXaRS[JT]LV^OT^MU\MQZKT\MV]PU]OV[NVaPU[MX_QW]PZ`S]aU_aVWZNRXIRZJX]QX\PT[MY^QVZN]bVV\P[^RX[O\`UVYNTYMW_OX]PZ]RVZM]^T[\OW\NY^QX\QW\QX\PZ\QZ_SXZNUVLWZMZ[QV[N]_T[ZQ[]RZ\R^`VW\NW]P]]T\^R\]S[]SWXM\\R[]T[]PWZM[]RXXN\[QY]QXYNW[OV]L]^SZZOZZQZ^Q[[P^_U[^S[\Q[]RZZQWYMYWN\\SWVMYXN[[QWUM]^U]]T_^UWZOYVMXXN\]U_]T\YR^_T^\R`_VY[O\WN[XM[ZR[[R[YP\\Q\\R]YP`ZSXWN^ZRZ[PZYQ\XQ^\S^[SYWM[YQ[XP]ZPYVL[VM_ZS[VM^YO]WQ_[SZTK^ZSc[V]XP^XP\UN^ZQYWOZWO[ZR^ZSWTK[UL_[SYWM_ZS]WQa]V]ZR\XQ[VN]WP[YP]VO_YQWQH\UN_XQZSIYSL^UO]WOVQI`]UaZSbYR_UN[VN]RK`YS_WQ_WP_XR\RKZRL`YR`XR]TKYPG_UM^TOcYU]QK\RIZRJ^UMaVQ]TMZRJ_QL_VOUME[RK^PK`VR]SL_UMWLE]OJ\NH^QKcVQ_TNZOG\SM_RK^PJ^NJ_UOaUO`RM^SL\QK_SMYPI`VO[QJ^SM_RMYKD[PI_QM[QJ\PI`OJcPIbRN^RLbQK`QM^PJbQM^OJcWR[PK\OHaMI]PKaMF\NH_KD]PJ_MHYE?bPK`NF_LF^NH^NH\KEaOI[GA_OJ^ID_LFZGB]MHYHB`JE[HA]IDaMIYF@bOK`OI^LG^IC^ID\HDbJD_JE]IDcKFZIBaKG`ID^GB_KF`ICcKF^GCaGCdIE`HBcLHaFBdFB`GBcGCaD?hMJaE@bIEcGBaFAeID_D>bC?dLHdGBfGBaGA]D?cD@gJFdJEeFAeD@t%"|}|{yz{}}|}~|}~}}}~{|{}}z{x||%t$?`;Dc@DgAHfDJgDDd@Eb@Bb>Aa;HfDHfEIfDBb>HbDHcDEb@H_CF_AG`CJbEIbDFaBFcBGeCGeBLfFE_@GcBI`EG_AI^CHbBKfHJbGKbHKbFL`HOeJHaCLaHC]>K`FN`IJaEJ_EGaCK]EQeKNbIMcIJ[CK_FI\CMeJObKQcKQbLJ_FPcLN_HM`GNbIP_JN[HM_GPaKPaKQ_KQ^JQaKQcKSaNP`KL[FO]JO`HN\GQbLN]HK\ER`MT`OTaNS^NQaKQ\LXdTM[FS_MN]HT_NT`LO]JSaLR^MPXIT_LO[IQ^JMYFXbRUaQQ^JS\LRYJUcOQ^KWbQQ^KR^LP]IR]LO]INXDX`QV]NY]RS\MR[LTaOU`OWaQU_OV`OT^NQ]JRZKVaOX`RU]O[bUW]QV^OS[MU]MU\MX`RU\MZ`TT]MT\MV\MQXJW`PYbS[aTS\LX_SWbPV^NT[OV^NW[PV\NY^PV\MX\OX\PTXL[]RX]QZ_RXaOWZMU\LX]QX]OY\OX]PZ]RZ]S[^SY^RZ^STYKV[NX]PSVH[_SXYO^_VZ]QZ^S\_VUWKX\OZ[Q\^T`bXZ\QYYN]^TX[OYXMY[O\`TXZMTWJ[^S^bWYXNY]QQUH\_V[]R[]QVUL^]UZ[QZ]QWZM[\Q[ZP^\S__V]_VZ]S\]T[\S][SYXMTTIYWOXVMX]Q^_UVZL^^V\\SYXNWWM^\S]]S^^U[XOZWN[YQ]]TYVN\YPYYP\[R]ZS^ZS]\S_\T]ZQYWOXVN\WOZXO_\Q_]TYXO[YP\ZR][QZWM_ZQ_YQ`XR[WN[VMXTM[[R[UN`]U]XO^ZQ_YQ_UO^\S[UM_YQYUKYSM[XN\ZO[TMZUL\XO[TL_XR^ZOaZR_[T^VN`]T[RI`ZSb[U_ZPZVM\UL_XPZVM[QJ]XO\RK]WP\ULZRK[TK[TLaVPZQH^YR_WQ\VN\SKbVP_SM\TLZRKaWQ_VO^TN]UN\TM]TL[PHbXR^UNbVQ]TN^TO`VNaVP[RLcWQ\TM]RL_SN]TKaUN_QJ]RI]SL]MG`SMfYT\RJaOJ_PK\PJ\OI`SM`QK`PL^NH^OK\PK^QI^RKcUO^PJ_QJ^NIaPJ^OI]NG^QJ\LE`OI^RLaPLbUP[PI`QLaSLaOJ`PL^LG[NI_LG`NH\KFdVP_MF_KE\LE^NGdNJ_OIaKGbOJ`MH_MHbPKaMFaICcNIbOI\IDbOJ_JE^JEaGDaMHeJFcHD]MGfPKcKF_HCaLGeJGcLGcMH\D?cIE`FBaJE^IA`FCeHCbICbC?^HB`D@]IC`D>`HCaFAaB=cFCcFAeHCcGAgKFeFAeGBcIDaCeDAhGCu'#{}}||~}z{{}~|~}~}~{{|z{{}|}z}y%y#BfdMH_NH]FAaMH`KGaJE]JE^JC`ID^JEaKGbKEaJF]E?dLGaIBdJF\E@cMH^GAcHC]C=bGCdKEcJE`E@bIEcNKfEA\E?aC>`F@bHCcD?gHDeJHfLGhLHcHBfID_F@eHE`C>aEAbC>dB=t,*|{|{y}v|{|~}|}~{~}~z~{|}}}z}{z|z$x#GfD@b=DgAGfCJgEKeFHbCBeIbCLbGOdJNaJN`IObKI]EMaIQdLM`GL^HJ`DM`IN`IJ\DQaKI]DReMN`IL[GLaGObINcJN]GWgRQcJMaIRaLL^GJ^DM\FR^LWbPP]ISaNNaIM\FR`KL_HSaOQ`KSbMRcMM^FT_NU^PSaNXbSO[HN\HNZFRaLXdRQ`LRaKP^JR`LT`NU`NS_LP\JR_KWaQP]IV^NT_NS_MS^MWaRT[MVbPQ^KXcSQ[IUbPS\LO]JN\IW_QS]LV`OWbQS[JYcQV]NR[KW]NWaPVbPW^PW]NR^LS]LSZL[aTU_NSYKW]PU]NT]LX^QWaPY\OX^OOYHWZNXbQX^OW_PW\NWaOVZMZ`SY`QX_PT]MZ`SX]NY`RY_RY\QY^PV\OY^QX]PVYNZ`S]`V^aWZ]P^]S[aQX_QW\O[_R^dXW\N^^SVXN[_S`bXY\PW\NZXM\^SZ\Q_aVYYO\_TUYM[[RWZL]`T\\SWZO\^T[[Q]_SWXNZ]OZ]Q^`VX]P[]S[\P_bW[ZQ^^TX[MZ]QWWNXZQ]\RYYOYYO][P`ZS`^V\ZQ[\Q][R]_S\XN[YP\]TW[OZYO\YQ\]R^]T]ZQXXM\[PXYL\\RaaXZXOa[U^\R\[R^\Sb]V^[R\ZP_[T_ZS]\Ra\U`ZS][S^[S\WNZTK^YQXVM`YR[XOZUM^ZR_YQ`]U`]Ua^V`ZQ[SL[XQ^YQ`YQ^YQ[WN]XPb\Ua[RZUN]YQZQH^VO[TM\UN_[Ta[S`XQ[UM]YPYVK_WPZUM]VNbZS^UNXQJZQJ_YR]YP]SMaXR^VOVQHaWP\TMaUO]UO_WPbVP`ZS^QJ_VN^XP\QI[RJcZS^RK_UN^WQ`YS_WN_UM\TL`UMZRI\SM^SM[PI_UNaWPcWQ\OH`SM]QJ]PL]PIbVQdYTaSM`TOaTO]QL[OG_TN^PK[PI_TP]QK[PJ_RM]SKcQMbQJ`QK`TM`OI_NFdRMbPKbSMbQJaRKcTOaNI]JC`OJ`LGcPJbSM]LG`OIcSN]JCaRL[MH`PJcQM_NHcMI`PJaKD`MHaSM`KE\KE_LHcMH^MEcOJ^KFbOIcNGbMHaKE`IBbMH^KG_LFbKF_JE_JDaLGbHCYFAaICgPLaLGeJE`JC`FA`ICeMG]C=aFA^C?dKGbIDbA>dKEdJFcIEdLGeFCbJCaHBcD@fMGcHBc@aC>dGCcKFbC>`E@bIDcC?eIEdC>fICgICbC=fFBfB?eB=jFAw#!}{~|}z{|z~}|~~||~}|~{{z~~~{|{|||}|~}yLkGEc?HbCGfAEcBIdDHfD@cHeDEeBIeEJfELfGIbDHeFLeGI_BEfAHeCK^FGcCFa?G`@JdCGaBPfKG^AHaCJaDH]BLdGJbDLdGNbIK_EOcKNdILdGMcJJaDLdGLbGMaHLbHN`IReNLaHK^EL_HL`EJ]FL`EQbKI\DSfNQfNOaJSbOQaMPdKK[DRaLTeON]HR`JOaJL^FRaMM]GQ`LN]FO^HK]EQ`LSaNO\IUdPQ`KRbMXeRRbNWbQO[IUbPRcLQaJT`OTcOQaMQ]JXaPT]NQ]KS^LQ\KXbQU`OT^LT_LT]MV_PQ^IWaQS]LWbRS\MR[KW`OU]MS]MZdSWbQXaRW`OXbPUZNVaPU_MYcRXcRS\LXaQW_PU_OZdUT_LS[J\_SW_OX^OW_QY_RX^QV]OV^OS^LX_QT\MY_QYaRW^NU\L[`SX_PX]PZaSX\O[aTYaQ[aTY_PY\O_aW[^Q[aSY_RT\MYZNZ^R\_UY[QX^P\aSWZL_aW\_R]^UV\OZ^PZ_R^bV\_SUYM\`TW\O^_S`dYX\N\aR^_U]`UW\P]^SW[NXZN^_TX\NZ[P`^V[^SZ_R_bW]^S]`W]_T_aW]`T_`W__UXZO^^UYYO[]P^_U[[Q[[OZ]R]]R\[P]^S^`V]\R_`T[YO]ZS]ZP][Qa_W[[P`^VZYOZWN]]R^ZR]\R[[Q]_Ta]T^ZQ_\Tc`X_[Q^_T^\T_[T`YSZ[Pb]V_\S_\Sa]V_ZQ[[Sa^UYXN_ZR[XO]ZQ`[Td`Xb\Ub[S_\S_[T`_V_ZQ^[Q^YQZULa]V]WOa\S`]T]XQa^V\ZQb[T`[S[WN_YQ\VO\WMbYS\WP^XOaYR`YS`YPf[V]WN^UObYS`ZS]SK_VO_[T`VP\VM^UO^UP^UN[UMYPI`XR`XP`VP]VO]VO\RH`UP^[Te]W_UO]WNaUO_SMbUNZQIYOG^WN_UNbSN^SL`YRaRKbVOaTNcXQ]OIaSMaRLfXR_WN_QK^QMZQJcUObQKbWQcWRaUOdUPbQKaUN]QL]NIcTO^MH[MF^PKbUNaTN`RLcUN]PJi[V_SLaQM_ICdQL_NH^NG]OJ`PJ`NI\LE^MHaPLbNH^OI`OI_KGaLH^KFaNIdRNaKF_NG`ICcLGaQJ]LGdPKbMGbQJ^GBhRMbPIaLH\LF`FBbMHbKGaHE_JBfOJ`LGcMG`LG_MFcLGdKHbKFdMHeKGdIDbHBdIEaHBhMH^LFcFAbHDaFAeMH_HCcHDeKGeDAfGDdGCdHC`D@eKEhIFgEAdHBeEAiJFeEAcD@jC>v$!}{~z|~~|}{~{~|}|}~{~z}||||}}}&y$IkDFdBKhHEgAIfECf?HfCBd=GdACaeQMaIBeKGhLI]D?dEAiNJeIEgKFaHCgIDgKGdGCcD?e@=fLGdKEeGBgGCdGBbD@eGBiFBgHCfKHiHEfFAhA>t!~}|}|~~{{{y{}~}{~|~}|}}{z}||~||~|}%w"@eiLHfJFdG@fHDaFAaAGhCDd@JeFEbAFhBGfBJfEKeFGdBKgFHfEMeHLeGJeCMgIMgHJfEJ`CKbGMgIMcHJeEJcEOfKJcEKgGOfIIcDNfIMdHL`GK`GLbHKcGL`FLeGOcJKdGMcGQcLJaDMfFM_FNfHI`CN_GL_FK`EMdJPcKPbKMbIPaIRaKMaHRcMRdMTbNM]FRaLPbLNaHR`LMaIP`LQaLN`IQdLRbMOaJQbKO[HUbNUaNQaJM_GPaJN`EUaOP`IP]JSbNSaKQ^KSaLWcRUbPS`LXdRS]LUbOV]OS^LWbPXcRT`MT^MT`MU^OU_OUbPU_OU_NX`QXbSSbNW]PU`NYdTT\KW`PTaOU\MZ_SWbQT\JX^PW]NW`PX_QYaRVaPXaQY^QZ^S[cTVZNY`RXaPWaQZ`SXaOS\LQ\I\`UZcSaeXW]OYaSZ`SY^RU_PY^PZcSV]N^_T^dVZ\PZ`TZbT[`RX^OYbS^bU^cWZ_RZ_SZ_R\^S\`UZ`T^aVadXabWZaR_`V]aT^_TabX[_RZ_R]^T^^T\[R[^QZ]P]_T[\R]]SY]Q[^S^`V\[Q\aUX\O]_TZ^R\^S_`V]_U\^Q\^S[^R^]TbcW_[T]`TaaV_^U``WbbZ]\Q_^V^]T\^T[]Qa[S\]QZ\Q]_S\\S]^VWWK``UZ[P`^V`^V`^U]^T^]S_^U]\S[[R[WOfbZ_]S\YO^]S\\Pc_V\WOb[VcbYc]V`[S[YQb`X_XR^ZRZZO`]T^[Q[XNa\S`[S\ZQ[XNc[U^]T]YOa]UYVK[WP^[RaZRa]Sb]V^ZR^ZPaZR^WOa[R`[Re]V]XO[SJ_VObXPa[U_ZS`^UaXR^WP^VO^XPc\UaXQ`YRaWP`YQ\TLd\U`[T\VM`VP^WN`WQb[T]UOe[TcUPcZScWQ`WPaWOaVO]WNbYR]TL^PIbXRaYTaUP^TLbYSaYSaUNaVO_VOcVObUP_UM`RM`SM`XRaTOYMD_RL`UNcXRbSM`SLcRLaUN`RL`RKfXR_RK\NHaRLbQK`UNdUO^OJcTN`TOcVP`TNcTNcPL^OIbPJbRMdTN`OJ`QL_OHcSMaRL^JDfRMcRLcNI^MHdSM`QLdOK]KFdLGdOK`PJ_LFbNJbNJbPJfOJbPK`LFdOIiTOeQK^MHfOIbNIaMGgQMdNJdMGaMHaNIcMGbGB`MI^IEeKFeIEdNJeLFeMH_ICaIDbHEdJEdLGbHCfKGdHEdJFdJGcHD`FBgIDfKFhJEfGCeGBeJFhKGgIDhIDeGAeFBgD>fEAcF@gB?z%"}z}z|}~z|y~~~}~~~~~~~{}}~}}y}}{}~|}|#y Cg?Eh@HeCFdCMjIHeCKiGEg@KhFGeCGbBEb@C_Ea@IcDIgEFdAGeBFaAGaAMdGLeGGbCJeEOgIHeCIbDJbDOiKMgHJaEJdEQhJJgFJaEKaFMcILbGMcHK`HIcDH^CRiMQeKNeILcEPaJJbFKbGL_GQdLNdISdMOdJPbLMaHPbKOcJUePQcML^HQfKRbMO_JQcKTeOQaJJ]CPdJQcKNaHTeNM^ESbMSdMObJVgQTbNTaNR`JQ_KTbNUcPYgSTdNSaLR\JVgRR_KUaMSaMO]HUbOTaMVaOU`OR_JT_MV`OT`LS`LR_KZeSYbRZcS[cTW^OR_KUaLWbQYcST_NZaTR[LZaQVcP[fTXeTZcRT_L[dUS\JXcR\cUZaRVbP\dT]cU[dUX^P^eVU`NX]PX]OYaQ]eWZ`RZ`QXbP\eVY_QV_O]aVX_N^dWYaRW\L\bSY`Q\`S\bUZaRX_PX`P[aS[_RY`P[^Q_cVX_R^bVX]QW\OZ_Q[bV^cVV\NX\Q^bV_bU[_SabY]`U[]Q\^T]`T\_S_dY^`UabWff^Z[P[^Q[^O`cX`aV_bY`bX\^SZ\O]^R__U_`U\]Q`_V]`S\ZR]]R``Wa`V^\SZ\Q]\S__V^]S]aRa`WYZObbX]^T`^Ua_T\YP^^RYYM`_V`_U_^V``T`_Tb`W][R^\S_^T`]T`\U^[R_^U^[R]XPd`Wa\T]ZRa^V]ZQ\XNd_Wa_Ua_Wa\Tb^TfaX^\Tc`Wb[Tc`YZWM^ZP]UNd`Y^XQfaZ^YP_YRb]T[VL]ZP^YR`\S_\T_XQc[T_XP_YPe[Ta]Tb]U`XQe^Xd[Ud\T^XPa]T`YR`WPaZS`WP^YQ^UN_[Rc[Sd\UbWQcXQb[T]TKbYTf\X]TM_VOb\T_TLb[TcYRZPJ^VO`VOaVP_RJcXQcXQ`QKaWP`UNaXR^VNaWPfZU^WQ_UNbTOaUOdVPf[V_TLeXR`WOaWP]UN_SMeYSbVP^SLZQI_TMaQMdVPeVQgUPbTN^RI\QKfXRdTOePLaRL]OHbRKbRKdOKcRMbUO^SKcNHcSMeVQdRL^OG]OIaQKbLFbQMbNJaPJaPK`QL^JEcMHdMGdRK`NHaMFaKFdSLjPL`LG^JDbRK`QKdSNgOKdMFaNH`IDbNI`IE_H@iOLcMGcMGjLIfQLcHChNJdGCcICcLF`IFeKFaHDgLHfRKdHCeIEdLGbKFfJFdHChKGjLHhOIgLGdE?hLHhJEeHCfIEdHCgHCfC?gGChGDhFBdFAeD@|)'}~}~|y}{y||z}|{||~~~|~~~~|~~~}}|{|~~|}}~#z!IhDGiAAf=IhEKfGGcCEd@HgCKiGHiCIdCGfBHeCIeEHgDHeCFa?IaCNhIJdDIaCIcFQjLJdFI]CMdHNgIOeJIfEMeHKfFMeINfIJcGLdGLdFKcGOdHK`DIbELdGPfKMcHMhHOaHQeLL`HNfJReMMbHMcHJdEObJKbEM`HSaORcLRdMPeJUeNSeNNaIMcHVcQO_HVdNQcLSbLN_GN`ITbMQaKQbLN_HSbLM]GScNM^IR`LVcPP_IM[GQcLVcPS`LWfPO_HYgRVdPT_LXeRSaLQaKO_JVcPR^KWdQXcQVbOTcNUbNR_LQ]KS`LX]QV_NV`O[eVV_O[eTQ\JS_LXcRV_OXbRYaSVaQY_Q]fXW^OYaRXaPYbR[bTZaRWaQ[gVXbR[aSVaPS`LW`QX`RWaN[_SZaRV_NY_P\eU\cT]`T[dUZbRY_R\aSZaRZ_Q`cXZaQ]eWY`RZaSV\LW^OX_O[bT`fWaeX_dW^dV\aTZaT[`QY_RacX^aUZ_SV[L\aT[^P`cW_bVacYX^QZ_SZ_R\`S\^Q^`UZ_S__T\]R[[Q[[Q^`U]_T\`S``V_cV`^UabXfg^YZN_aW\_T[]Q_^T`bW^^Tdf]abXbaX_^T_aW__VaaW^_U\\Q``U`bW`aW^^TfaX_]T`bV__Udd[[[P\[QfbZcbZ`aW_\S]]S__TbdZ[VM`]U_\Ta^U_^T\YO^ZPa\T`[S]YP_]T]ZPa]U_YQb_Wfc\`[Sc^Xb[Sge]`\R_[Qc]T_^U`]Ub^Ub[U]XP^ZRa[T[WM][S\WPb[Se_Y_[S`ZS^XP`XQa^V[UN`[R`ZR_[S][Qb]Uc\UbZS_YRb\Sb[TaZTa]Ug\V]XPaXR`TN_XP^WN`WQ`WOaZQ_UN_ZQ`XQb[S`VOaXQ_WOeYQ^XQe\TbVPaVO^SK`WO\QJe[UbZRaXQ^YPbUP`WPc[S_SNbVQaUMaZS`PLbVPbYScUPeXRbTNbRKaVPbTNcSNaUOcSNaRKbSMbSM`PKbVPbRMeUPbSM_QKcWQ_RJiYR`NIaSK`OHcSOaRLcQLdUOcPI_JEfQL]NIeTOfUQbRLcSMdSM`NHcNIbRMaMIcOJ[JEfTN`MHfOL`KFaOHfSN\IBcMGcPJgVQfQMfQMgLGcNHdNIbPLeMGcMHiNIdKGfJEaHAeNJcMFdKFeMHhJEeFCcNIeMIjQMcKEeIFdJEiJFeJEbKEgKFgKFeKFeKGgICkKHiJFhKFeOJiMHgMIbC=dE@dF?jKFdD?gA>y(&{}~~z~~||}}||}}z}}}}}z|{~||~}}}||}~"}GhCBg>FiCFeAGfCCh>KeGHjBJgGKeGGeAIeEGbCGcBEe?KgHGiDJgECd>GhCNiIIcDHeCKgFJcFKeFOgKNeILeGNdIKdFMgHKbFN`GMdIOdJI`DPaLPaKOcJLbGOeINdIM`HJ^DMfINaIOdJObIQbJQcMOaJMbGSfMMdIMcHNbIJ\DRfKNbJQaMTfNK^FRaLVePReLPbJMaGPbITdMPaKUbNWeRP]FMZEOaJXeQQeKQ_KQcJRdKQaKS`LT`NXdRTeNQ`JUaMXcQTcNO]JVePUcOVaPZhTWbPVePXcQXfRU`OXaQXdRYeSXeR\gTR_MX`O[eTQ^KW`PU`OXbPWdQWaOZcSV]MVaOZaRZbRYcQ\dUWcRU]OU^OXaQX]OX`QYbRXcRWaOYaRZaSX`R]bSZcRZcSXaP\bS[_RZaS]eVU]LY_QZ^S\bTY_Q^bVY_QY_Q]cUW^OYaRY`R\aU[`S]cV_eX\^Q\bSY_R_cW]aUZ]OX]O^cVZ^P]`U\bU]aV`cV^bVZ_Q]aT\aT_aWYZN[^S]aV]`U_bV_cW^`TZ\P_`V`aW`aU\]R\`T`aV`aX\_SaaW]^S]_T]_TceZccY^[PaaW]\R^_Ta`WbbW__UbbW`cX`]T`_V`_XaaXa`W`_V[]Q`_V_[RcaXdb[_^S`bXdbZ_`U_bVfcWcbY\[Pb`Xa_Tb`W^`T]XPdb[a\Va^V`^Ua]V_]TcaY__Tc\Rf_W`\S^[Rb\Vb^U^ZQ`]Vf`XbaYa[Sc^V`[S`YQa[Te_Wb^Ta^Vb]T`YQb[Tg_Xc_V`[S_YR_XO`[S`YQ[XPd]Va[S_YPd^WaYR^XNb\T]XOc[Sc[UdYQ`ZQ\ULb[RcZRaWPd`W]VP_XR^VNbYRaZRg\WbXQbXQ`WO_VPcWQe[U]TLbUOcXQbVQcYSfZT_RK`TOeXSbXRaSNdWQaXQaWObWQ[QIbVQ_SLbVPeRLbUOaUOaRMaVO^SLbUObUPdQLcRN_KD`NG^RKbTNbVPaRMeVPfTOaQK]LFbSLaUOaOIbPJdUQ`OIcSNeSNeRLcSMcQL^NHcQL`MF^NHdQKcQLgSNaNGbTNcLGaOHcOJePLfOJhRNaOI`OIdSMcMH`NHhTOePJcKGcLFaHCfQL`GAgQLeNJaKGbHBbJEeMHcKGfLGfMHbMFgLHdF@cJElNKfNHbIBgKGiQNeIDcIDeJDdJCfJFgHEeLGfJFfJFfHCgKGbIFeHChHDkMIjHDfE@kGCiIDhFBjFCy$"}~}~}|}~}}||~{|}||~}~~}~}}}~~~{~~}{~z xEi@LiGHfCMiJDgAEfAIcDJiFJgECc>MjHKcFGeCLjIHaEKiGKdFIbDFeBGeAIaCSjNPeJLlGGaCIdENhIHcCKfFMfHMeIJdGG_ANdHLeGPbJPgMJcCPfKH`CI`COhJLdGRhNLbFNaGMbGM`FNdIShNMaHL`ELcGQdLNdGTdORbLQ`LSgNObJWhQUeOOcITeOQ_JO`IMaHTeOUgOPaKO^IQbKSeMSbNTeNVcQWcQPcKQdLR`LUcMQaKWfRUeOTcMYdSRcMWcQR^LQaLUbNSaMQaJWdOSbMWdPT`KUaQVcQYcSVbPYdQSdMT_NR[KU]NW`NUbOXcPVaNYbSWdRVbQZdTXcS\fTXcP\eVZeRX^Q[bSV`PWbQW`OVaPW`PU]LW`NW_PXaQYbQ_cWX`PZcT[`RYaR[aTW\PX^R_dX^dU\bT^`T]dV[bS[bSZaQY`O^eV\aSZ]PZ`R[^S_fX]dV[aRZ`R[]QX`R\aT\cU^bV^`S^bT]aU^bT[_QV[NY`S`dY\`T_cV`aU[aSbeZ[^P[^Q[^R]bU_dW`bV_dW_dYbbXa`UZ`R_bX^bVadY_cX_cW]^SY]N`dY_aU\^RabWbbX[\Q`bW_`WadX``T^aU__U`_WbaXbaYbaW__VccZ^`TaaWdaW`aWecZ_bV_aU][P[YNeaYa^U[[P_^TaaVa_V_aW__VcbYa]VdaYdaZc`W\ZMc`Wf`X_\Sc^X`\Rc]Veb[b_Va^U_\R`[Sd^Wc[Te_W_ZQ_YQ_\Tb]U`[Sa\Sa\T`\UcZS`]Uc[Ud^WbZSaZS`ZS_ZPd[T`\TaZQ_YRa[TaYQ_XP\WNbXRbWQf^W^YQe_V_WPfYUh_Y^UNaYR_VO^UM_VNaXQc[RaZQf[VaYRd[Tc[R`XQ^WPbXS_TN_VOcXQ`TNg^XbWQbVObUObUOeXSe\U`ULaTN_SMaWPaUPbTNaWRaWPbSMbWQ]QJcUObTNfYT_QKaSMdVPcTNaSLaSNbUOeWSeVP_VPdSNbVNdUObQLbQJeTP`TNfTNbNIgTP_MFcRLaQJdRNdOJcSMhUPdRLbOI`MFeTNeVPcLH_MF`TNaMHgUMgRMfRLdQLeNIbMHeNIbMHfRLdSNgPKbQLeLGaMGeMHdQKfMIiPIcKEfLGbIBcMIeKFlSOcNJcGBfMHfJDfGCaKEdIEcJDdIDhLGfJFeE@bJDeHCeNJeDBeJFeJDaGBfIDiHDhKEgJFfGCcFBiG@kDAiIDiE@iEA|*(~}}}|}|~}|}~~~~}|~}}}~}~~~~|~}}y|y%|#?i;IhDFjADe@EgAIhCCf>Ec@JgGLjGLjFMdHDhAMiHKeFIeFJhGJjGLgGIfDMgHJfEKhFJeFKfFKgGIcDIdFNiJKcFKaDLdHKfEKfGLdHMfGNjIOeIGbCObJNdJJeEOeJUhPNjKOcJJcEQeKOeJKcFNbIJ`EMdIM`INaHNaITfNPgLObIReLSeNNaHN\ITcNSdLK`EPeKRbLNaHTfOVdORdLTcNPaKSfOQdMPbKP_KRdMQ]LRcLScNT_MRaKV`NVcOPaJVePScMTdPO`HXfRVdQWcRTcOVeOR_KWbPUbOWfRVaNWaOX`RVaPW_OZfUT_M[eVWbPYdTU^NU`NW`QYcS[cUXdQYbQXcSW^OVaOZaSXaQW`PYcRZaRT]NXdR[eU\eU[cS^hYV`O\dU[eU\`RV_P\cU\cS[bSYbPYbQW_O]bTZaS]aS[`TZ`SZ_RY`PagZ^dUX_O[^P[`RYaQ^eW`cX_eX`eW^dW^`S^`Uaf[`eW`cW`dY\^S^cWbf[`dX[cT]bU]bVabX_aW]_T`cXcdZ]_T^_U^bW_bV^`TdbY`bVbeZ`aW`aW_aV[]R\\Q`_VbcYaaW__U``VccX_^Vcf[a`V`]U`dX_`U``UaaW\[O`bV]^S_^TcbY^]SccYec[`_XcdYb`W`]SaaUcd[cbXa]ScaX__Ua_VaaW`^T_^TbaWa`Tb^Va\VccZ^\Sf`Wb_XdbZdcYa`Ua^Ua]V_[R`[R_`V^ZPa_W_^Sa\Ta[Sa[Sa]Te[Va\Sb\Td`W`\Rb[Tc^Wa[Rd^We^VcZS`XPg]Yc\Ub[SbZS`ZQd]Ua[S_XPa\T`ZP_XQ]UM`ZT_XPe]Wd\VbZTbZS`ZQ_XQdVQbWPbYSg^YaWNe[UbZScWQd[S_WPbWOcWQaVObXSf[SdXScUOaWObXPbXQdXQeXSe[UdYReSM`UMdVOcVP`RKbVPdUObTPdVPdTMcWQcWQ^OHbPJcVP]QIfVQ[OHaTM^QKcRMdTNgWQ`RLeSMaQLdVPfTPcQIfPJcSOcPJdRL`RKeSMbTMbRMbPKeSL^PKcSLgWQaOIaPIcVNjVQaOIhWQfPKdNIbMHcQJaPKcQLdNHeOIdMHaMGdMGhPLbNGdLHbMGeOLcKEfMHjNJbPJfNIcIBcNIfJEcMHbKEgOJfNIbC>fMF_HAfKFgLHeKFbKFcIDdHBeKGbHDfKEfKHjJEkNHcE?fJFdGDiJFbHBdFBfHDgHCkNJjJGhB?"!}{~~|{}~|}~|{|~}}}}}~}~~}~{{z}{~}|"~@mKhFKkFLiHEe@GgBHfCIeCHdCIhFIeDFfAHcDJhEKkHHgDKiHNhKMhIFc@LfGNhIDb?KdFJ_DMgHEeAKcEPiJOfKMdHMaIQiKQkMJdEOeIKeFLdHKcFQgMMgFPdKRgMPcJMeHOdHKcEObHSeMPcJThOQcKTgORbKPcKRgNQgLQbLPcILbFTdNPaJThNPdJPcIMaHTdNScNVfRQcLTdNSdLUgNR`KScLM_HUdOO^IVeQRaLSbMT`MUeOSdOUcOUcOTdNVbPVbOUbPVcOUcOXdQZeUXeSU`NVcQ[fTU`OXeRWbQUcPUbNZ`RUbMUbMYbRWbQU_LYcRVbOVaOZaRU^N\eUYaRYbRX_OZaSV^NX`Q[dS\fU[gV\bTX`NZ`S]gV]bSV^P^dW[bT\dU]bUZbU`fZZbTW`P[aS^dWX^QX_O\_R]`RafZ\aT]bT]dV^dV`dW[_RacX[`T^cW]cU_eX^bU^aT`bW`aW_cV]`TacW\_S^eW`eY_bVabX_cW`bVY^P^aU^cUbbY\aTdcZ^_V`bUabX]_S_dXabWabX]`U_aU^^TacWcaX_^Uee\acW`bX_bWa_VcaXcdYcdYabX`bWbaWcdZfg]`^S`aX``Uc`Wgd\_\T`_VcbWabYa^UbaVhcZc_Va_Wa`VabX]_T\^SbaWc`XaaVb_Wc_Wb^Va_U]YR^^S`_Va^VddY`]Tc\Ud`XfbY_\S^[S^XPa`W_^Tc]VdaY_ZRe^V]YQc^Wd`Xc^UgaYd\Ud]Uc\T^XO_\Sa\T_]Tb[Ta[Ta\Sc\T_[T`YQ`ZSbXQ`YQd`Wc\Te[Td[Te\Ue_XdZTaYQd]WaYR_VMbXRe^WcVObWOaXQcUOdYQ`XP]ULbZTcZSaWNbYQ]TLaWP_RLcZSd[U^SLbVQbVObVPdXQbXQaWPcXQ]WP`SL^UMaVQbUN_TNcXReXPaUOdZT]PHcWPbXQg[UdWQbRMaNIcTMcUNaOIbRL^OJaSKaSObPL_OHcVP`OIeUPdPKhXRaOI_LDgUP`OIeRMdRMhSNfUPcRKdQLaNHcPJbPKjSMbLGfPKdMIePKePJeQKfRLgRMeQLdQKaJDhQLeOLdPJcKFfRMcLHeKFgOKdPJbOJbNGcPK`LFfLFeIEcGDfMHjLF_JDdKFfJFdPJfIDkSNeJEjNIcMHiKGfIDfIEeLHdGCgHDgOJhHEbAkFAhD?y#~z{}|}}{~~~}~~|}~}|{~}}{EhAIhDGiCFeCEf@GgDEe@IeDJhFMgHFeAHeDDa@JbFLiINeHKgFKhEDf@IgDKfGOhKNiIIfELjHD`?KeFJcDJbEKdFQgLKeFLdHMhIJbCMcHNaHPdKMdFMeGLdFOgKOaJPhKNbIRcMQgLOdIKcGWiSK`DOeJRdKObIO`IOgJTeNPcIOaHN_HWgQQcLQdLL`EScMK\EQbKTeOPaJUfQTcNSeNRcLRbLScLVdQViRVePPaJTdNTfPUfOQ]HWcPTcNWdQTaOT`MXeRSdMTaLUcNT\LU`O]fWQ^KYfSYgSSaMWeQYbSZeSZeTWbO]eWVeN\hVVcPVbO\gUZfTXcQYeSZcSVcPUbO[dSY`QV^OWdQ[cTV`OXbQYaSXaRYaQ\gV[bT]dW]eV^dWXbQ[eU[aQZaQ]dU\gV^dWV_O]bV\cVY_PZaQ]dWZ`S]`Q[bS^dW^dV_dW^cV\cTY^P\aT\_P\`SZ_Q\bU^cVbdY^bU\^R[aS^cVcd[[_SaeY`cWde[aeZ]aS]_SadY\bSabW`cX]`Vff\\aT^bV`dX]bT_`T[]R]^T]^ScbX\_S_`U`eXbdX^aUbcY_`UccYadX__TbdXff\gi_daZ\]QabX__T_]SaaXee[caWdcZb_UbaWc`WeeZ`_Wec[caX__Vgi_[\Qcc[ef\dcYaaV^_T``U`^Ub]Udc[b`Yc`W_^Uc`Vc]UfbZ`]Sd_V[ZP`\T`]Ta]TecZc^Va\TdaX_\Sb^Ud`We`Xa\Sa^U`ZQe_Wc^Vb\Ue`Ya]Tb\Uc\Vb\Ub[Sd`W`[Sb^Uga[e\Ua[Rd_Vc\U`ZS`XPb[SbYQc\TaYRd[S_WP`XRb[TbXQf_WbZRe[SdXPf\WcWQ_VNcZUd]V_RJh^XaWQ`VNaWPc^WbXPdWPcYQdWPg_Xg\VgWQc[SbXQdXScXP`UO`VO`TLbUO_QKcVObYRfWPfTOdSNcSLfYSaVPcVObSLbTMfWQcTMbTOcPJdVPfVPdQK`TMfWRbSKaRLdQLfTOaPHeVRcSK`OIbPLhUPeOJeTN`PIbQKbMHfSNdPK_NIbQKhQLbNI_ICcMHaNIdMHeSMhQM`KFiSPcNIbOHdKGcKEiOKhTOgQLfRLgRNbJGfOIeMHiPKlQLgJFiOLfMHgJFhNIaHBcIBeJDdLFiOKjJEgNIdIDfGCfHDeKFfEAaIChHChJEjJFdKEiID_E@hGBeFBhKFfHChHDcE?mHE{! }~~}z}~~}}~|~~}}~~|~}}|{y|}~~||~~"|Ei?GeBHfCJkEIhDJhDKhEEfBGfAAd=JjFPgKMgGKfFMhILeFNeIOlKLfFPlLMiGLhHOfJNhIKfGOiLDa=OdKNiHMfHLeHJcFLfGQhJKfHKeEKbENhIOfKSdMMdHNfJOeIPbHPgKLcHNcJQdJN^FLcGPgJPaINcINaGPcLOcJRcNOjJSfPQdLRgNTeOTfMRcLMbHPcJMaGRcLUcMTdPUeQQcKScLXgSRaLSbMSbLTeNU`NWdPVfPUbOWePYhSR_JRcLR`LYfSUeNVbP\fUVbOT^NWfQWbQYcRVaNVdOWcQZbRT_LVdPP`KXdSU_OVaPXfRS`L\gUYaSXbQWaNYaR^hWYbQZcR_iXXbRYdRUbOV`OYdR[bS]eVZdRXfSXcQ]fW[cS\cU[bS]aS\cT[fV\hW]dVZbS^dWZcS[dT]cT]dU[aS]aV[cS[bT]bV]aT_fZ\bSZaR^aU[aT`fYbg[_bWbeZ_dW[`Q_dV\aS`fY]aV]dW_`U_dU_fY_bVafW_cWbeY^aVadXcj]^cVadYacYabY_dVadZ_eW_bX`bXgg^]aTcdZ^aV^`T^`U`aWbcXabW^^TabX_aUbcYabXbcZdeZ_cW^`U`aWaaWgf\^_TfdZaaWdbZaaWfe\bdY^^Tgd[c`WbcXdbYa_Vc_Vfb[acXa`Vb_Vcd[c`WebYb_VdaX_]Tec[dbXc^Ua]UdcZc`Ud`Xa^Va\Ra`VebZ_ZQb^U`]Te`XeaYd\Tc^Vd]Vb\Ub^UdaY]WPe`Wgb[a[T`\S]XMc]Uc[Sd`Yb]Vg_X`]Uc[S_[Tc^UbZSg`Zb[SaYSbZSd]TaYSbVOf_Yd[Uc[Te\Ue]WcZRbXQg[V]VN_XPeXQ]SLaYRgZTaVPi_Zd\TdWQ_XPdXRc[TdWOdYRcVOaWObUN_SMcTNfZScUNaSMdZUcXPbWPdWQdWPfYU^SLhZScUObTObRLcWQiZTaRLhVQeWRaTNeZUdSNdQKeVQfUOaSNaNH`RLbUObSMfTN`RMcSLdRMbOHfSNgUNdQJgQJbPJaLEfSN_NHaNI_LFaMGbMGfWQdMHiVPfQLaIBcLHdMGaRJdNHaOJcQIaMF^LF`IDeRLdLHcJFeNHeRMgNIgOK_HBgPKeOJhNJhKEgJFjMIdLHeMHfKFfKFdJDeJEkNJhNJeIDeHChKFiOKcC?lJFfF@kJFgGBjLFfICiGCjKFiLGiD?iKFhMHmFB~~~||~}}~|}~}}}}}~|~}~~}z~|~|}~~~?j;HfBGlCKiHIeDBc=Ce>MmHEbADg>JkEKeEMgHIgDIfDHdDKeGJcDJfFKgFMhHKfFKfGNkJQjLIdEIdEOlIIdDKdGMhIQeJRdLLbGLfEOhINhJPdIMfKPeJK`FLfIOaIMaEMfHNdIOdJNgKQhMObHNdHQdKPcHNbJQdLOeKQdKO^IRcMNeGRcLThOTgOUeQSdLWhPVeQSaNRdNQbLRfLTcLVdOSbMUfOTbMK_EXcSTdOWdQN`HXfTUbOTdOVcPXdQUeQP]IUdQUdNYfSS_K[eSUdNV]LT^LXgRXdPVaNZgUVfOT`MXcO\eUTaO\gVV^NYhSWcO[dSXaPS]LXcQWcR\eT[eV\eUYbQXdR`hZZaQ\cT[cR_fW\cSYdR\`S]bTafY_fXXdP\dVYcQZbS`j[[bSZcT]dW[bT\dT\fW\bVXbRZ_Q]gW]aT[cT^eVX`OcfYafYagZ]cU^eV\bTadY^bV^`T^bV[_RbeYaeYaeXaeX`fZ]bSagY`bV`eX^^TbcYZ`SadX``Vde[adXbdZ]_SefZbdX^`U`cW\^Rgg^gg]ff]]^T^`Ueh^_`Vb`XbcXdcYfe]`dXbeY``WacXaaWcf\df\cdZb`Xb`Whh^_]T_aW`bT__Va^VccZ``Vc_WebZdaY`_VcbXhc]`_Uc]U^_Tgf]ec[dbYfbZ``VecZfbZc]Ta\Tfd[faXd^Vfb[b_Uc_VeaXb\U`ZRebWgaZd\U`\Ta[Ra^U`]Te`Xb^Uga[d]Ub^Vc^Vd^Xd^Wc\Ud_WcXRe`Xa^Ua\Ub[Uc[Sc[T_YQga[b\Sf_Xc^Uc[Te[TaXQaXQf^Wf_XcXReYTg]UaYQdZSe]T`XQeYRZRJf]VbXRaWO_TNe[Uh]VcYRbWOaTLc[TdXR`TMbWPdZTbVOeXQ`ULbTMdXQfXQaWQ_UMfUQdSNfVQcWPaQK`RKbTNfXRdWP`SMdRKcWP_SKdVOaRLdTOeTN`PIaRNeTOeSMcVNcRLbSN`OIgWRbPIiSOh[UeRLgQLkVQbRLfVQeSOfUO]IAfPJfPLaQJaOJhQMfQMeRKfNHbNIeOKeTNeQLgPKdQLcPJaKFbPHhRMbMFjMIgOJgPKhPKeOIgOJhOJeMHeOIfQLeHCiNHjLH`HBdHDeOIgMHbKEgLHgMIhLFjOJiOLfLHiIEhJDiKHjJElHEkMJgJFfHChGCfFBkIEdIDkIEjFAiA=~ ~~~~}|~~~}~~}}{|}}~}~{{}||}~{~y~}~~~|~} FlAIiFFhAIeDIgEKhGKiGGeAMgICcjMHeEAgDBkICkA=#!}||~z~}{{~{~}~~~~{}}~}~~~~}{~ }DlAHhDFfAKjFCg>JiGHeCHlEDh?IgDJjEG`@IgDOjILgHHhCKgEIiFKfFIhEMgGMiHHeBKeFKdFReLKeFMcGJdEPiLKcFQgKPeJQfKMfHLfHPeKNfHSiOMcGOcJOhJSfMRiOMcHSdNRhLPeKReMRfKPgLRcMLcFSaMPeKOfHSeMPdKScMPbKRfMSeMSdMQeLWfQQaKTbMQdJQcKQdKRcMSeMSbLWgQWeQVeQVgPUcOVfPUdOUePR`LVcOXdSRaLTdMUbPZeTVfPSbMXhSWcPYgSWeQZdRWfQWgQVcPWbQZbSWbQVdPTaN]fWWaPS_LU`NXcRZcUYeTXcQ\eV]iW[cT[cU[bSYcPZdTXeS[dSYcR[cUZbRYbQWbPXbR]eU]dWZbSZaS\bU[cT^eU^cVahY[cT_cU]cUagY]dU\dT`fY^cU`bXdi\_dV]eV`eY`dW^bVacW`dW_aVadYafYde\]eU[aSacW^bVcf[dg\bg[adXeeZagY[^SbfYdeZaeWbdY\`U`dXbf[^^Sde[bcXabX_aUbdX`cWbdXeg]_aVgh_afXdcZaeYcbZdeZceZaeYccXcg[bcYbaW`_UcaXbeZaaXbdZfbZcd[gg\bbWbaXcdZddZee\b`WfeZfe\fd[gd[fbZdbYcbYecZebZef\fdZcbWgf[ebZfd[hf^ebYc_WebYd^Wc`WdaYfbZb_WfcZhd\a[Ued[b\Ta\SdbZd\Ud_Vc]Vd_Vc^WdaXfbYd_WbZRc]Vb\TeaYg_Xc^W_\Re`Xh_Xa[Sf]VeaYd_Wd_Wg^Xb\Sd]Vc]Ve`XfYSf_XbZSaVNaWQ_YRd[T_YQb[TbUOc^Uf\Uc[Sf]V_VNf[UdYRbZUdXRdYSeZSbUOc[TfXRbZSdXRcWRaWOg\VcWQaTNc[TbUPbWPdVP`WOgYRaSMfYR_SMeWQdUObSKfTPfWQbSMeUPg[TdUOcUOdWQcSLgYRbTNbSMgYSk\WcSNbRMgUQbVOcRKdTLbQL_PIdUOePKdOIcRL^MHdPLbJEfSMdOGbLGbRLjQLdOIgQJdQKfQMiSOeNGeNIgNIcOJgNIiQL`HCeKGgMIaNHcKFdLFfPIeNIhPKdIDhOJcNGeOHhNHiJFeKGiOJeKEjLHeHCiLGiJFkJGgFBiOKgGAfJEgGBkHEgHDjLHgFAkMIfHCgDAhJCnLHjIDhHEhA=! }~~~}}~}{|~|}}~~}~~|}}~z~}z|~~~~}Dj?JhEKkHFfBJmELjHHcCKgHKjGLhGIiDJfFOoIJjELlIJjFKeCIgDKgFSoPIbDMhHKiEKeFLfHNeIOgIRhMLeGIbDJaDPgJMeGTiMRiLOhJNcHRkLOdIQfKNeFLfGRcKOgJMhIUhPQfKNdGMcHRiLJcDNcIRgMRkMRhNQcKQeKN_GLdHUiQWdRQbJRbLUgPVeOTfNRdLRbLTbNRdKUcNWjRWjRXiSTgNKbEVdNYdQRfM[fUYjTWfQ\eTUcNUeOTdMZfSSaMXcRVbOUfOVePT^MWcQWgRVcQZeTUbPUdNWeRVdP\gVZdS\iVZcQYdRYbSVbPXcR[fT`eX^fX[eTZfS[dU^eW[dT]fW[eTXdS]gV\fT\gUV`PZdS]dTY`Q\dU\gV^fV\eU]dV`hX]cU_gW^eV`dX^dV[cTaeY\`S`fX]dV^eX\aT`eXY_P[`R[bS\`S^aVbgZ]aT\`SahZdf[`bWaeY`cYfj^`eX`dX_dW_dW`bVbf[_bUch]fh^^`Ubd[cgZ`eWbcYacYde\df]_`UdcZbdZabXdeZef\fh_ef[`aWed[cg[ccZde[gg^ff\ccXddZff\b`UbdYdd[bbXcbZee\df[fe\caWih_caYbd[ig_cbXfd[ge\fdZhe^ecZff\he^fcXeaYc`WfdZec[eaYie]ebZgaZc_Vb^TfaYgd\khab`VebXd_Wib\hcZe^Wc_Vgb[fbZe`Wfc[he^_]Ugc[daW_XPh`Yi`YfaXb_Vf`Xc]Vg^Uc]Uc^UgaZc^Wf]Vjb[eaXf\Vb]Te_WebZe^Vf\Vd^Wf_Xd]Ue\VdZSg`ZaVOfYRc[Tf]Uc\Tb\TcYSg\Vf\SeXS_TMeZTfYSbYQd[Sd[SbZRf\VfZTh\VgZTdYSdZRf[TbXQfUNbYSbUPeYTdXR`RIfXQhYTg\TbUOeWQfXPfVPaUMgVQaQJcXReSNgXReTOfTNdUOiZT`VPiYSgSMcRK`RKfVPcRNeVP`TNfUNhWRfMIdQKgSNfRMgYShSMbRLaOIfRLcQJfPJbOJaQLePJhTLfMIfSLcMGgPKfNJcOJeLHfNIgPLiPIgMFdLHfPKdMFfLHlSNhOKcIDbKGeIDjRNfOKfLFhNIfMGeJDgIEjIFfLGbIAfMIgKGdJEjMHeGBgLJiGChKFgEAfHBiLFdFAkMHhD?fEAcHBiGCoJE"~|~||||{~}~}}}}}||}}"|!HpDGgCMhIIeEJhFKgFLfGLjHGcBKmGNhIEf?PiLJfDKhFHcEMgHJgFQhNKhFLiHNjJKgHLhHOeIKdFMhIPlKKfGNeHPfKKgFOfJTkNQfLMdGRgLRfLNdINcGRhMPdISfLMcGPgKPfKNcIN^GRhLOfJNeIPbINcIPbKPdJNbHSdLNdHUfQLaFQeMWhRNaHRbKPbJSdLPcKWgQRbLVeORcNUfQWeQSeNWePRcNUgQRbLXfRVdPScNVcPVbNVeOWeQVeQZgSXgRWcQSaKZeT\fUYfR[gU\eVWdQYdQUgPU^LXfQXcQ\gWWbQ\fSV_PYcSXeQ[cSWdQ[fTaiYYeSU_OUaMXcSU_M[aQ]hV_fX^fW[dTZcT[cS^iWW_O_fX^dW\fU[dU]dU]fVaiZ_dWZhS^fW]eU_eV]fVdj^bfZ]cV^bU_fX^eU^cU]cU`eYbfZ_gWdg[agZ`eX_dX^dTfh]_dVbcYdg[beZ_eX`dWbfY`eYeg\`cWdi^ei\df[ef\abXef\eh\gg^dh\de[fe\gk`cgZcf[df[ddYccYbdZilbcdZadXfi^acZef\ccYfe\gg\ee]__Uee[edYbeYcdYfe[cbXee[ff]d_Wgf]ig^ie^hg^gd\hbZcbYjd^ge\iiagd[if^dbXd`WfbZbaWgd\b`Vjh`fd[eaYdaXhd]he\fbYfaYc^Wf_WecZb]Sc`Wfc\ic[e`WeaYebZdbXfaZe_YaZQha\d^Vd_XiaXhbYfc\d^Vh`[d_Vd^Xa[Sb]Te^XeaYc]Th]We^Xc^Vc]UcZTd]Vg\VbZRe\Wg_Xf]WbZQf\VcXQf]WaYRg_Xi_YdYRd[RfZSeYSbWOaVPc\Te[TcZQg]VbTNeXRfVQg[Ui[UbUOf[Ue\UfWSfYReYQbVPi]WeWRcWPf[TdWQbUNcVPcQLdYSfVQfXR_QJbSMhZUeVPdVNaVNdUPeSMgVOeSNgVQ`RJgTOeQLeSMcQKfXRdRLeSOhVQgTOfUOdTL`OIeQLaPIeQLdQLeSMdPJfPKgRMhVQhNIdPJgPLeRLfMGeQLfNJ`MGfOJeLHeQKdKFgJFdOJfMFgPLgMHdQKcOJfNFcLFfNIdJEeJFhPLiMGhICeMIgKHjMIgMHdLFkNJfIClGCjLHkOJbLGhIEkMIgGAhIBlPLiGBkKGkIDlLHfC=hFBmFB}~~~~||~~}}~~}}~~|~~|{|~~~~}}}~}~~~DoAHjDMiIIjEAgIoFHkBKlGJlFGfCFf@KkGLlGGhBKhGNhILiGKjFLjHLhGLjHRkMLjHNiJQoMRkMLdFIcEMeHLgFLeFOgKOhKOgIIcCOcIQfKQeKJcEThPPgKQgKQjLSiNPgJRhLXiRShNQfLNfHPhLQiMOcJUiPPdKPdJMbHPfKSgOUjOQfKViPTeMVhQOdJRgNTaMYeSVfQWgRTcMTeNSdLUgNSfMReM[jTVgOUfOUfPUeOUcOVeQZfRZgSRaKWeP\gTXfRYdRSdN]kWZgT[gUXhSZgT[hT]gV\gUZeRXdR]iWU`M[dT]gW^hX`gX[eS\fT[fT_gX\eT_eVYbP^eV\hV^fV^eW_fXYdR`hYZdS`fXch\_iXbjZ^eW_gY`hXak\afYbk[dk]ck^ci\`fY_fVej_dl]bhZagXhl_ch[bi]eh]agYdl^fm_fi^dj]ek^dh[gi^hmbikakocfl_ci]dh\jj`ci[ei\gm`gk`imbgj^im`hkcmoehk_loenoehk`mqfloejmcikahlammdkndjk`jmbllcnneloejmbopgmoemnelmdmogqphpqgjlbmmdmnenldij_ppgopfqqhlkbnnfnkconeoodnmdmldljbnkdkj`onemkbljaji`nlekkbkj`kiaoibkh`le^hd\miage\hf]kh`kj`michd\hcZid\ngahbZjd]gd[jf_je^jf^i`Yke]ha[ge\ic\ibZke_gc[je]ke^jc^ja[haZf^Vib[haZia[g^We\Ulb[f\Vf_Wka[iaZj^Xh]Vf]ThaYf]Vc\Th^Yg^WdZTe[VcVNfYRi_Xg\UeZTeWSf[UeXRi\VgYTcWQe[TgYRj^Vi]WhYShXRk\VfYTj[ThZTi[UcVOdSNfWQh\WeZTeWQbUPfUOcSMfSOgVPgTNgRMhZTcTMeWPcRMdRLfWQeSOgTNkWRhSOgRMhWReSLfQLfTOeTMeUPeRNfTPhWRiSMiUQfSMeSNcOIhQMiSOhQKfTNiMJhQKfKEhOKkQLjQLfNIkUOhOJfQJhNJiPKkPJdICjPLeMGlPKgPLfOJgNIjNHgMGjKFfLHjNJiOIjKGkMHfJEgJEcJDkJFmLHjMIgKFgLHiIEjJFlPLiHDlLFkJEqB?}~~}~{}~~{}{~}|~|}~{~|~}}~~Dj@HjDJiDJnFJlFFjBJeEKiHKlGJjFNjJMkJKfGKjFMmHJhEJhELgFJeEPfJKiGJhEPiKJfEMiGMfGPhKOeJMiITiNSjNLgFPdJRiMOfJMeHNiHLeGOeIPfKQlLPkKMeHOcIMdGOgIRfMUgPTfMTgNSfNPeLUhPTiNTfOUgQTgNPfIK`FWjQUePSeNXiSThORdMUjQWdRVeOSdMVhQUdOUeNTdMXhQUePYfRZhUSfLXeQTbNVeNXfQWfQ]hVYfSXeRZcR[gT[iVZgSZeTYhRXdQZeTYdRYfT\gVZgUZeSXgR\gUYdSXcQ]bU\gV`kY[hV\fV]fV_iY]eV^gXaiZZgS^iX]eT`fX`hX]eV\hU_hW`hZ`j[agZ\fVcgZbhZ`gXbk[_gW]hWbh[ck[di[^gW`gYhnafn`fm`fj_fj^dn^ej^dj]gl`gl_hlahm`hm`ch\ikaek^hk_gj_gmampggi_hl`imbmoemnekobnnfmmdjnblqeklalmdnlcmqhnofmofmmeklcjncllbqqhnleklbqqhoqfnpgrrillbopgonfurlnnelmcnmdnoeqrhnoenlbmldonfpqgmnenmdqmhii_pnekj_nnfppgpmelkcmkbolenkcokcmkdpngnibnjcmialkboibljcljbrlfrnfoicmh`gf]liaif\je^lhahc[gb\fcZhd\mh`hbZhf]ecZjd]lg`ib\ebYgbZg`WhaXiaYhd\kbZjc\f]Ujb\le^g`Xh_Xmc]g]Vkb\e\Vi`YhaYh^Vk_Yf^Via[i`Zi`Yi]WfZSi^Xd[Sc[Ti^Yf[Rh]VeXRh]Xg]Ue[Uf[VeVQh]XhYRh\Ve[UeWOf[SgXSfWRjYSgVRcWPhZTdUObVQdUNjZUeTNjZUfYSdUNdTMgXTgVPeUOgWRdVPeVOeUPiVPfRMcPJcSLeQLfVPeTMhSLfUPeTNfRMgTOeSNhSNcPJfUPhRLfUOgQMiVPdPJfQKeQLhVRjSOgPKdNIeQLgPJgSNhQLeKGeOKePKdJDhOIjMIjNIiRNfMHdMHkNJkRNjNJiKFdICfIDfJElOJfMHgLHgKFlQMjNIlKFjHCgJEjMHgFBfMHjJFlNItQMgHBgKGhJGqEB|~~~~{}~~|~}|}~~~~EpAFhCKlGKkGNmJIkDKkGEiAKfFCi@LoHHhCLfHKeFMjJJgELhHNkJJcCRhMRpNNkIPjLIgDNiIKfEOkJLjHLgGQkLPjKOjKRgNQiLRgMPiMReMPgKPdKRiLRiMQhLTiNSgNShOVjOSiOOcJPgKRfLPgKVfQPeJSeNQdKTfNTgNWgQQeKXhTViQSfMWfQPdKQeJTgOVhRWeQYiR[iVTdNUhPVcNUfPTdPXfQZiTSdMUdMXiRYiTWdOYgT[kUZfSUdOYfRXbP_iZZhT\gVYhRXgR\gV`jZTbNXfRZeQ_kYYfS\fT^hX\fT\dU`hZ^kX^eV^eV^fV`fX^hV]gW]eV_eV`hYdh[ck]ahZ_gW_jZ`iY]dUbj\bjYbj[agYck]agXah[agZ_hZbi\di]ei\ek^dk\agYbj[gj_ej]gj]di\ej^gk`fi]npgfm_hm`ei]inbhmbklbjncgm`hj_lpdkndilamqfopfjnblndlocpqhprilpenpgnnerqiqrilncmrfppgorhprgnnemndoofrskqogpripshrshrpioqhuulrsknqgrqirrjpohtskrrkpqgpohspirqhqqgqpgpphpogpmeoldomdqnfplcpnepognmcqmfkkaqngqmemkanhamlcjh_kg_mganjcli`kg_miblh`lkcliaid]lg`ld^kf_jf`mf_gc[lf`jd]je\hc[ke^hcZld]jc\jb\haYiaYf_Vi`Zib[ke^e_Xd]Ve`Xd_Uib[g]Vh_Xlb]jaZh_Yf^VeZSi`Yjb[md^fZToc]h_Xk^XibZcZSh^Xf^Wg]Uh[Uf^Wi]Xh_WdZSh]XgXTfXSh[TgZTeZSgZTfXSfXRgYTfVPdXTh[VeWPeVOgWRfZUfZTiWQhXSiVRhZRgUPeTOdSMiYRhXRgTNeUNeTNgYSeUOfUNeUNdPLhUOfOIiVQfVQiTOgSMmWTfQKgTOgPJdTNhTNfQM`SMlSNiSMcQJiVQiPLjQLeOJeOJhSMlSMhTOhOJfMHeOKcLFgOJdKFhNJgOJePJgKGeKFkSOfHClQLgKGlMIjMHlIEmPLgMFeLGiMGgJElKFiJFhKFmNJfKGfEBmLGlJFhFBeFAlMGpGD}~~~~|}~{|~~~~}}}}~}~}}~~~}~~KqGImEJoGJjELlHPlKIhDMpHIgDKiFLfGMhFJiFJhFMjINiINiKKiGOjKKgENiHMgIOiJOkJMgITmOOfIKiGLfHTgPMgGOhKNgJObHOcJSfMNgIMeHQiMVkOPfKLdGQeKPhLSeNUkPQcKTgOTlPQcKUiOTiMQfLQbJXgRViQWgPSeMZjUSeLVfPVhSUeNYhSZfTSgLViQScMVgPXiSVgQVdNTfOUfO[iUTeNYiTVfQYgSUgOXcPXgRVhPZiT]gUUeN[gT]mYZfT]iWZdTWdPXhS]hXYfS[hV^gW[iU^hW\fU\fU_jY_hW_hX]hW^jWZfT_kYYeRbk[_hV[dT`k\cj[]bUck]^eX\gUbjZahZ[cT]hWbj[di[dk^ci]bh[gnaagYgk``fYfm^fk_eg[gmaei\biZei]fm_fn`koeej]eg^hj`hlagk`kncgi^gm_im`ilanqfjlblpeopgikailalofnsgorhkpdjnbnpfjlbmmcjrdsskptiuvnrsjrshqqirsiprhvyqsulsukrtkqqhrtjoqgsvlvwosritslsqjrqisskvxnqrivtmvtlrrjsrjusltqisqjtskqnfpngqpgrphttlonfqmfpogomfqohpogpmdpngnjbmkcnkbnmbnjclg`liamgakg`ojcnjdmlblh`kh_jg]mlclf^jf^lf^oialg_oicka\ig^ke_je]jc\je^h`Ymd_jd]haZie]haZg_XicZgaYf[Thb[e]Wh_Yj`Zf^WgaZj`Zi^Xic]k`Ze\Uj_Zg]Vg[Uh^Wi`Xe[TdXPg^Wf\Vh[Wh\Ug[Sf[Tk_Yf[Ui_Wi_Xf\Uh\UdTNj\Wh\VeYSbSKaUMj_YcVPfYSfUPh[UeXRgYTjXSk\WhWRiZThVQhWQiYScUNfWQgWPjZUfVObRKgWRcRKf[TgRMgUPcQMeTNiYTiVQhVPhSMeVPeRLgUPeUOgPKjTNePKcNHhVOfOHgTOjPKhUOjRKgNJfNIeQLbKDjRLhSOgPKnQMfLHgQLgOHkRMfIDgOJgOJjLHiMJkQLoSNjMIlPKjPKmPLjLGhICeKEfMHmMHhJEiGCmKFiICeJDlMHlKGlLHlJGkHCnMJpE@}|~}}}y~}~~}~}}~~}~HqEGiBLjHJlFMqJMkIKlFNnINiIIgDHjCKhFNlJNhJQkMIfBHgDJhFMkJJfELhFNkIOkHPjKLdEJgEPjKQiNRmMMgHOlKPjKRiMPfJRfLRhLOiJPkLNcHNeHKeFNdHNiJPiLTfOShLPaJTfOThNSgLThOVjQUeOSfNOdIUgOUfOUjPTgNQbLReLTdNWjRVgPSeNThOTeOVhQWfQReMVhQUdQWfQWePZhUTfMScMYfQRdKUdOYfSXgQ\iUVcOXhTVbQWcPYfT]gW[iUZeT^iW\fUZfS^kY[dS[gT`iZ\fUYbQ`hZVdO^gXbl\[gT[fS]eVck\]gV`hY`iY]hXbjZ]fV^gV^hWbk[aiYbi[dl]`hYbi[bj[dk^[dSgl`fk^cj]^dVej^dj]dl]fj^ch\cg[bk[fm_di\hnbhlaek^kpdimahmajobjncjobgk`ilahm_jj`lodkndopgkncloenrhkndqsiorgpqgothnshlpertjqujruktvlpthuumqsktulsulwyqrtksulvypwwnuulyzqxyqwtlwypywpxwoz{ruvmxwquumvvovum{yrvskyvpssjvtmzyrvtnqohxwpusksqjsqiusksofspisqkrngomerphomenmepnfrngkhaqngmjbpldlibmibjhaoibojcig^pkdpkeokdpjbkg`jd]id\jd]kgagcZlf`id\hc[gcZid\jaZkf_e]Vhb[j`[niaeaYk`Yg`Xia[j_Xlc^g^Wh`Zi`Yka[g^Xh_Wi_Xj^Xi_Wd\Tg]Wk`Ze\Ug\Ti[Ug\Wh_YeYRk`ZdYSi[Td^TgXRgYSeXQj_YeZTi[UhXRfYRg[UbWPeXRfYReYRi[Uj^XeXReVPh\WdWOeVPeUNcSJiYTgWQeVRiXRhWQhUOeVPiWQkXSiSMlXRgTMeNHjYTeSMgUOgTPgPIfVQdTNfSMlWScPKjPKfRMiUPgPMjQMlYSgQLiRLeQKgPLdPJcOIgRMgNHgQLcJDgQMjRMhRMgNJcGBkRNlPLeMHjOKjQLeNIeJFiNIkPKlMHjMJkNJmOJjHDjNKiOIjIEhMHmLHmNJjMImNIiGBkLHkMJlJElHCqQNoA=~~~~|~|~~~}}~~~~~}}=k:GkBLlGFiAGkCLiGMlIFhCKkELhGQjMKkFLlGKhFJgEPnLMgIMiINhIPgLRkMPhJLfHNiINiIMjGKeEQfKPmJRiNLiHSlNSiMShNNgISiMKfFMjJRhLThOPdJLeFQdKUhPSiNPhKNdIShMUfONfHSkMTfNReKRgLTgMSgMTfNThPViPTjPTiPRaKThOUePTgNQfKVfPZgSVhPYeRXdRWiQTeOVhRVeOTfNWfRUcOWeR\fVXdQWeQ\kVXeRYfRWePTcN\fT[dT\hV`jZZhT]eUZfU[eT^hVZeSYdQ\hU\dUcj\XbQ\fVbiZ[fS^fWZeR^fW`hY`iXcl^_gW`iZ_gUel^]hXbi[bj\_hW`hY`iYal[ci[cj]dh]ej]dk^akZgm`cg\chZcgZej_ak[fm`fk`ci\inafl_koekoblndgm_lpejnbjnclndmqeqsjkodqsimrgmqforillbotipognrhruloqhqtjqtjstksvlrtjwxouxntvluxmuwnxyryzqxyqwwoyyq{{sy{sxzq}{t}~ux{p{zr|}u|{s|{tyzq}}wyxq}|uyxqy{r|{tywqyxqyxq{zrzzrwumxwovtltvmwtltqjwunxtmsqhtpjurkqogsnhspismfrphqnholdpkeomfmjbpkekg_nkbkf_okepmelf_mjamgald]njbnhbmh`ie\gc\hc\kd^kd]hcZkd^lg`gaXnf_iaZhbZjc\ibZjc[hb[f`Wg^XibZg_Wd_Wib[h`Ye]UbZRi^Vmd^h_Xd\TaYQe[Si`Yg[Vg^WdZSi\Wg\Vi]Vh\TcYSi]Wi]VcVNh[Ui^Ve[SiaZfXSdYQi[Ug[UiZUhYTf\UgYTfYRgWSjYShXSdWQdVOhYSiZTh]Wk[VhZSgVPhZTfXSl`Yk[ViVPcVPfVPeQMfUMfVQjUPfRMhWQgQLfUOfSNhRMjUOeRMeOIkUPkQMgRMgUPhPKgOJhRMfRMhQLhOJfLGjSNkSNgKFdMHjOKeOIlQMkRLeIEiNIhOLgOKfNJgLFkPLjNIhNIkMHiOIjOIfIDhOJjMHmOJjNIlQNlKFkNIkJFnMHjIDkJEjLFmKGhLHlHEqGB~~}{|~~~}~}|}~}~~~}}~~~Ar=MlIMpIMnGLmIIhENkJKhFLjGIiDKiGMhHSnOIhFLiGOjJIfELfGMjHRiNNfIJeCPkJPkJNgHOfKQjLSkNSiNSiNRiMLcGRhNQgKPdJUkPNeIQkLRfNPeJQjLRgMSeLOgJRgOPgJRgLShLSeNUiNRgLTeOUfNQdKSgNWiSUgPTcNTiPWgQRdMViQTeOXhSScMUeNUfNWgQQfKVfPWiQ\iUXfRVgQXfRWgOZjS[kV]mXWgQ\kVXfRXgQXgR\iU[dTYhTXeQ]iWWdP]lW]hU[gT_gXYfT\iV]fVZcT[hT[gU\iU_iX\hV[hUaj[^jW\iW_hX]fW`iY_jZ`iX`hYaj[bhZ_kZci\dm_bi\em]dg[dj\aiZem^dhZfj]dj]fm`ek_gl`hm`gl`jocfn^kocgl`fj_hoakmbipbjocfk]jpejnbjlckodkpdnrhqtikncoshkmcuwnqsinpgsvmqsjopeptiuumsvlrvluyoyxqz|r|{tz|sy|t{{s~~wz{s||u{~wy{|tzzq~v|vxzxzx~wy{z~~w}vz|{s}x}zuz|tyyq{zr}ytyyqzxqxwo}ztvvn{yswumutltpjtqjttlsoisqiutlrofrqhtqiqmfnldqlfomfqleli`pkeqmfkh_jf^lf^mjbnhbib[ld\oicjf^kh_nf`kiale^hc[me^kbZjb[kc^ke_jd\gbZg_Whb[ohcjc\ld^hcZg_Xid]ig^f^XfZTh_WdZSj`Yh^Wi]Wi_Yi\Ula]k`[g]Vk`Yh[Th]VgZTe[Sf[TeZSi\Uk`[d[Si[UgZRaXQhXSd\Tj[VhYSgYR`WPfXQfXTiWRdTOk\WbSKdRLgYSgXSiVRbVPhVQdYRjYSgVOgWPfUOhUNhYSdPKfSLhXRhUPk[VfVOhZTcSLkSNhTPgQMgYUdOIlVRiTOeQJhRMgPLgRMfPKhTOfQKiUOhOKnVQhPJfLGlVQdLFfMHhQMeNGhQLjPKjPJkOJeLHgMIgOIlOLeLFnRLgMHkRLkMIiNHgKEmSNiJFhJEjMHgIEgGCjKGkIDkJEpLInNIoMHiIEoFB|z}}~}}~}~~}}||~|~~Ds@KmFKkEKnGFmAMoIIiBOiKJhFJjGMhIIdDNfHJkEOnJKiFMjHOhKNhJKfFJeENjJPeKOjKLiHQhMMfGVjQTkOPeKOgJOiJPjINdHUmPOfJNgJNeINgHQgMUlNPgKRhNQiKRgLTgOOdIPfJVjQQdLSfLQeLRfKYkURgLSeM[iTVgQWhRXhSWhQUhPWjRWfRXiSWgQWeQThOYgS\jVVePSbM\iUYfRWfRYjRXgQ\iV[fUZhTZiT[fVUePXdQ]jWYgS[fT[hUXeQ\fVZgT[fTXeS^gW\iW[dU]gV[hW_hWZdS]kW`kZ^iW_iX\gV`kYal[\iTahZ]eU`eYagZ^dVaiZch[dj\agX`hYhm`dl^dj]bh[`iZei]cj[ck]bi\ci[ajZdi\dk^cj[ek]fk]di^hnagm_lodkrehk_hmbmofmrfjociocmpemrfpsjlrdntioqgpthswlqtitwmtvmrvksulrwmwzqzyqxzqwzp{}uz|s}|u|~v}vz~x|{y{{{~~}~}}{y~wz}wz}{s{zs}zs{{szuq}wrzxqwvoxvourktpisphspiurlrpgqogsoisohtrkoleoibomeolermhpjdnkdpjcnhapkdmibmf`oickg^id[nhbmible_ke^je]mf_lf`je\lf_nibkf_f`XgbZlf`iaZj`Zg^Xi`Zk`Yj`Zg_Yh]Xh`YkaZh_YkaZg_Wj_Wg^Xg]Wka[g]UdXQla\i_Yi_XeZSj]Xh\Vh]VhZTh[Vi^Wg[UhZSdYSj\Vc[Rh]Uh]WeZShZUi[WhUOgUOjZVdVPjVPiXSjXSfVOhXRfXRfVP`QJiYSfWPeSNk[UfVQhWRcSLfWQdRMfUPfRKgUNdRMbOJgUOdQKjVQgRMfQLiUPfPKhMIkTOfOHjTNiTOiSOcNIhQLkRLhOJlQLfPJjTNiRMkSOiRLhRMjOLlQKeLGiQMjMHjLIkSOiNHgNJiNHfMIeHCgKGiJEiKGlPKlNJlKGlHDgEAmKEnMIgIElLIlLHkPLkMHkHClD?}~}~{~|}}}~~}}~~{|~Bq=JmEHjBIlDLkGOmKMkGLpGGkCKiGKiGKgFNkJOiIOjJPkKNkJKhGNhJLkHOmKJdCOhJQhKNkIOhISmNPkLNkJQkMMeIPiKOdHPiJUlQPfLQgLTlQNeIRfLQhMShOPbJRiMOfISiMTjORgLUhPViPTjOTiOOdKTdMVjQTgOWhRWjQTiOXkSUgMScMSeMWjQWhQYhRTdMVjQYjTXiTSfNXhR[gUYgSWfQYjT\iV[mVXhTZgSYgU[fU]jXZgUYgS^hX]hVVaO\fU\jW_kY[fUZeSYeS^iX_hX_iY\jW^jX`iYbl\]hX^fW]gV`kZaj[^hWYcQ^eW_gWeo_bk\`jYfm_`iYajZdk\`iY_gWgmadk\dl^ck[ek]el]dk\cj\hmadm^fnagm`hmakndjmbfl_loejnbhoajnbnshinakqentgmoekpcrtlnrfqsjssjnrhrukrukuxnrrjsxmwvouxoz{svxnwyo}}u|v}w~xw~xz~|}~}{~w}|uy}|v{xq{zt{xqzwpxvoxwpvrjxunvslvrlrqitrjtqinmdqmeqpgsoinlcokdrmfpngnjapjcpkdmhaqkdogale^kgalg`pkblharlepkdhe\kd]faYjb[hbZgc[kf_me]j`ZjaZle_jb]g_Wle^g`Xg_XhaYg_Yj`ZiaYka[f`Yj\Vh`XhbZi^Xk_Yg^XdZSh^Yf]Vi`Yg^Wh_YhYSk_Zf\Uf[ViZTk]Xj]Wh[VgZTi[VdTMi^XfXSl^YeXRh\VeWQfXQj]WgVNiTOdSOf[ThYUgUPfVRfWQjZTgUPj[VdUOgYSgXRiVQgVQiWQfRLdTLjUOdSNgRLhTMgVPjXSgQMfSOgTOeNHhUOfVPeOIfTMfSLhUOgQLhQJfLGjQMfNHhPKgRLgPJiRMgPJhQMiNHkQLlUQiOKkNHgLGiQLhKElPLkPLjNHjQLjKGkLHlJEjNJjKFjNIhMHkJFlNHiHCgHDlLIkJFoKGnMIjIEoEA~~}}{}||~~||}~~}~~}|}~~|}}~Cr@JmGLkFHhCIlEHgCKnGJkDRlNIgCLfGMgHLhFLhFLiGPmMNhKPiKLjGTnQPhJNjILiIRlNLgHPnLMfHNiJNhHRkMOfHPiLQfKNhIMdHPgKJfFNfISiNRgNViQUgOTgMXjSLdGUiPQgKQdLRaJXhQXlSQfKVeORdLVkQUjPWfQSfOUiOUeNQeLTeOXjSXgRUhPVgRYjRXhSXiSTbLXhRSgOYgTZgT[iUYiTVfR[hTZjTZgTWhQXfR[eT\hV\iV^iVYhRZjT]hWYgS[gU_hW\hWYeR\hV^hW]iV`jY_jX\gVZhS\eTaj[^hX`gY`iY^hVdm^`hYcl^bj\_gXam\bh\ajZaj[ak[bj[bh[ak[cj[bi[cf\hk`biZgk_ei]fm`ci\gn`mrfilagnainbkoddk]hmaiobmqfkodjocmsgkpdnrgnqgntiqsjnuhrvltvlrvlsvlswltwmvzqxzqz}tz|s||u{}t}v{y|{|{~v}v~w}vzxqyxq{zs{xqvrjvsmxunutlsnhtpiuqjtqjuqkrnfpleomfoldqmfojcmhaqlenhbje^oldoible_jd]mhake^lg_ngaia[lg`lgahaZic[jb\j`Znf_jc[jc\jd]nb[lf^lbZle]ibZlc[g`XhaYg^Wi_Xe[Ti_Ykc[k`\g_Wg\Ui`Zk`Zh[UhZVi_Xg\Vi_Xh[TgXRj`Yh]Vj]WeYRi\Vg\VhXSg[Uj\UgYTiXS_RLg[UeWNdVPhVOeXPdVPiUQj\WfWPdWPdTNfUNgVPiYShTMhVPeVOiVQiUQdNHfUQcSMgRM`QKiVPePKgUPeSOjVPgQMeSMfUOeRKlRNcPJcQLgQKhPLfMHeNHeOIfQKjPJlUPkRMgSOePJhMIiPKiQLfMHfNHgNJhMIhOKeNHkOJfLFgKFpVQiNIeKFjMGiMIjLIjLHmLHeJEkHCmLHiFBoPLmLFiJDjKFjHCeGBnC?~|~~}}}~~~~~||}}~FrAKnGKnGMlIMnILkHJhDHjCKhFIkDKjEJeDQpOOkKMjIMlJMgHMhIMiHNhINjJMhHIiDNjINfJLhFRlMNgKOiKPgJQjMRfLQhKPgKTiPLeFOiJPgLQiLNiIPiKQgJUiPQjLQdKOgIShNTlOWgQVgPUfPXjSXhRSgNReMSeMRfMRbKViPUeNUbOUeOPbKXhSXiR[hUViPYgS\iV\hVWfP[hUUeOVfQ]mW[lTWfQXeQWeRZhU_iYXcPZgT\kV[gUYfS[dTWePal\ZgU_hW_kZ\gTakZ\hT^iX[eU`kZ`iZbj\ZiT_hX]eU_fYaj[`k[]hWbi\`hYai[el^dk\fo^ci[bl[`iZaiZen`ajYbk\gm_dk\dk]ej\bi[di\imbfm`fo_hlagoajncimcel]ii`nshmtgkqfkocosjlpdmqgoqgnshnthsulqukqtjtvmsvltwluulvwnvxoxzp{~u{~t~w}xy|~}||~x{}|t}xr|yr|xr|wq{uoywoutlytnvqjwunsrirphqmeoleolcomdpnfsphohbniblibpicqjdkhaohblg`lg`lf_ng`oibmg`mf^je]mf^lf`jaZjc\kaZkaZha[id\lc\kc\jd^ld]h`Yic[k_Yj_ZhaYk`YjaZi^Wnd_d\Tj\Wg^We\Uib[i^Wg_Xi`[eZUj_Xj^WcXQgYRi`YfZTh\Ui]Wj^Wi^XdUNhZTk[Vj]XkZUh\Vh[Sg\UkXRgZTfVPk\WgYSi[UgZSiZUgTMhXSgYSgWPeRMkVQdWPfUNgUPjXRkWRhSMfUOhWRgSNkYTgSLgQLgVQmWSeOIkSNkVQiTOhRMfRLfPLjSNdOJhUOePJhOKfNHhPLlRLeQLeOJgPJhPKiOJmQLeNIgKEfLGjQMgJFfNJhMGmNJiNIgKGnRNiMHjJFiJEgOKkMHiLGkOKoNHnNJjKFmOJlIEiJEjIDrOJpFB~}~~}~~}|~}|}~~}{~|~~z~Co?MnIHlCLlIKhENmJOlLLkGHgDLjGQmMKiDLnFLiGKfFOjJMjIQkMPoLMgJOgJMkHHgDQiLNfIMgHPnKQiLSjNSlNRgKPfKOhKTiORhNPiMUjQNhISjOWiPTgOThPQkMPfJTfMTiOUhOPiLWkRTfNTiPUiPXkTThPSgMThOUfPTeNZnVSfMWkRWhRWjRXhRYgTWjRWfRTcN\jWUgPYjTVgPYiTWhRXiSXgS[iU[gU]jWXhSYhTXdR]hWVdOUdO[fUWcP_kZ`jY[gU\gV\hV]lX\hU]gU]eTYcS`jZaj\ah[^gVbm\^hX^fX\gU^eW]eV^hWdo^_gWahZ`lZ[eUel^fl_cl_gnack[dj]cj]cl]fl_em]gnafk^fk_gm`ek^jncipcinbimbimbjrfkpdkockremqfkpclodosjntgnrhpuitvlotjrwkprhuzovxouypwzpuynv|pz}s~y~x}v{}|~~|yyz~w|zt|{s{xr|yryvouskwtmxuorqivrktslrsjrphsohrnhsohrnenmdmjbqlenjbli_lg_ohaojcqmfnhbke^lg_kg_kh`jc\haZkg`hbYkf^lf`lb\ha\ke_g`Ykd]ld\me^iaZjb[f_Xh`Zc]Uha[i_Xh^Wh`WiaZk^Yl^Xh^WiaYi_Zg]Ve]We]Ti\Vg_Xma[j]Wj`Yh_Xi^Xl\WgZUh\WeZTeWOj^XgYSjZThZTfYSiWRhYSeVPhYThZTfWPgXSeWPlXRgXSeWRhZShWSeTMgVQiVPhSNeTOkWQgUNgSMgWPkUQhTPdWQeQKfUPgSNfRNfOIjTPhUPjTOhSOfSLgQLfQKiWShWSjRLcPJjRMfPKjOJmTNjQLlUQiSOfNHhPLeJEhPIkNJhRNiROgOHgLFfKDqUPlQLmOLmOIkKEfOIfJFhJEhNHmLGjLGiIDnMHnJFlIDmLGmLHiKFqHD}}~~~~|{}{}|~~}}}}~}~~}}~~IsELpHJmFKnFLkGMkHPmLKlGTnPJiELmHHiDNkHOpKHhCNiIOkJRkMPjLPjLLgHOmKNgJRjMMfGPgJNiINiKShMRiMQhMOgIOfIRiMRdKQhLPeKPgJPiKUfPNgISiOSiOMeFRiMOjKPeKWjSRcMTgOTgOOfIReNSeMQeKTdNReMZiTUdNWhSWgQZgSWfPWgQUdOXhSZhS\lWVgPYfSZiTZhTTbOUfNXgR\kW[gT^lX^kY\iV]iWXfR]eTZkS\iU^iX\jV]hXZfTZhU]iV\hVXeQ^hYbl\_gX\gVYgS]iVdk\bk[]gW_jX^gW`gZdl]^gX^hX_jX^iWbk\bh[cn^ai[^iX^fWdl^em_ak[ci\fk^ei]iobek]fk_ek]gk^gl`gl`gn`jobkodjnchnanremrgjncmqelpempepshpqgpsipvjpvirvknqfuwosvktxmwxo{|s{|tz{t|vz}tx{|~~||}v~}v|wz|v{xqzvozwqxwnxtnxtmwvnvsltqjomdrohrpirngqnfolesoiliamjani`le^nhamhaoe`pg`njcoh`oibme_nf_nhbkd]phake^lc[lf`ne_ib[gaZka\i^Vjc\jc]jb]ia[f_Wjc]g`Yg^XjaZj_Zi`Zi^Xi\Wf]Vg]Wmb[f]VdZSh\Wk\Vh^Vg\Uj]Wf\Uf]WbYRfYRdWPi\Vg\Vi[VgXSdVPgXQfZSfYSi^Wi]XjZUfWQgXShUQiYTgVQgVOhXSfYRhVReWPgWSbPI_OIaTMhYTfSNgZTi[VgVRiVReRLfTNfPJgVPhWQfUPfTNkVPiUPgOKfRMkVQhSNcOKiPKfQMoWRkSOlQNgRLfPKhOJgTNgNIiQMeRMgOKfPJiKGkQMiOIiKGkQMjMHjNKjMIkOIdNGiHDmNHjNJjOJgKElNKlNIeJElJFoLFiJEhKFoMHjLFiKFnD>~~y|~z}|}|}~~~|~~}~~~}|Bq>NjJJjFHlDImEFjBJjGIfCOoJNhJKkGMjHHiELiHKiFMhHPkLSjLMkJPjLSoOMiGOjKMjIJeENgIMgIMgGQiLPiKUjPUkQPiIPeIQhMPcJOiITiQOfKUkOSjOThORjNRfLSiNRhKReNTeOSaMTjOTiNUfORdMUfNWeQVhPRfMYjSUhQYhTXgSTeNVfOYhTViP[iWWfPZjTVhQXiRZiUZjUXgR[hUYfSWfQXhR\iUZiTYhT\hV[gUWcQ\jV]hX^iW`iY_hVXhR]jW_jXaiZcj][fU[jU]gV\kV`hY`j[\iU]hW_iXbl[_gWci[_iX^iXahZ`jZbj[dl\dl]di\bjYdm]ci\aiZdj\_hXfk_em^ch\fn_gnahmagm`ej]ckZhk`jochmajqehnakoclrgmtgkremqgmqfnrglqgmpfpvjqtkqtjprhqtjsulstkvxouxouvmyyrx{rxyzrz}vz|~~}v{}x~v}wzxp}x|{twtlzvpwtmsqkwsmvslvslrqiwpjsmeroiqmfpkepjdtpjpkdqkdqlfnjcoibnh`mg`pibohbqhclgaid]ke^haYjb[mhajf^lb[kd]kd^haYkf^f`Xi`Zf`Xnfalb\kc]kaYla\g]Xic\lc]j]Vkc]i`ZjaZiaZf]Vh_Xi^Xj_Yg\Uh^Vf`Yg\Wk]XiZTi^Xj[Wk]Wg[Ug_Xj^XgZRdXRhZTf[UgUPh[VfVPi\WeXQeVPfYTfWQgWRgZRgVPbWRgWRgWQfWRjYTgXQbPIiYSeWQiVPeSLgNJhVQiWRcQLhUPdVPeQLbPKfSMhXRiTOiSNjUPeOIjVQhTNeNJiVQjSNjTPhPLiPLkSNhOKhOJfQLfNIhQMkPKoTPjQLjOImQKjQKnTOkQMjOKkPLkPKdJDlPLjOJkMHnOKkQMiOJjMIjMHjLFkJDnKFnNJkMHhIDiMHnIFnDA~}~~~|}~~}~~~~}~}~EqBMoILlHMlHJkFImDPlLLiGGjCFfAJjEMjINgHJjDNkJPlKIjEOhKQkLKbFQlLKgGLdHQiLNkIPjLPkLNdIPhKLkGMhGNhIQjLThOSjNUjQRjNSjMRhMUlPQfLUfOTgNQcJYkTTjPWjQThOSeLWiRUiPShNZmUUjPSfMTgOUfNQdKSfMXhTUeOYiTUfPUfPZhSWdQUeOYiSVfPWgQYfRUePXfSYiSYjT]jXXiS]hVYhR[hU_iX^lY[eS\hWYfRYfR\iV[gT_eW^hX[eU]dU^gWZfU_iZ`jZ_kZ^iX]eU_iX`iZ_iY_fYcj]ak[^iWck\en`dl_bk[`gYahZ^fWfmaaiYbgZhnbfoafh\ek_dl^gk`ek_el^gm`gmafn`fl_gl`gnaho`jlakpdjpcioaimaipbkodorhprhovimqekqdptjqvlsultvmsulsxltwntwmxxpz|tvypuyoz}t{}t}~vw~w~zz}~z{|{~x}x~x~}u{xqyvoyxpxwnutmuqkxvotskwvntohspjsqirqiqlerngpmfpjdrnfpletpirmfomfpldmjbpldoiboldle^nicke^le^gf]if_lf_mgbjc]ke^miakd]hc[kc\me_jc]mg`jb[ld^ib\ja[jb[k`[me_ka[g^Xg\Vi`Yj]Xh[Tf\Uk^Xk_Zk_YdZSe[Si^Xma[e\Ug[TiYTk`[g]Ulb\dWQj_XfZUi]VgZSgYTi\VfWPi[UfWQh[Vd[SdWPgYRdVOh\WgUQgVPeTNeXRm_YfVPhRNiXRdTOiVPgTOeVPhYSiUQfTOiUPeTMgTOhTNhWSjTOgSMhTNkUPhQLgSNiUPhRLiUOhQJkTPjVOjTOgPJfQLiNHgQMgMIgLGfPJjNHjQLfOJgOIkSMhOKfOJiOJlRMiNJnPKhJEgLHkNJjJEpQLmLHgHDiLGkLGlMIhJGlMIgJEoMGkKFkKHtEC~}~{~~}}|}~}}~~}}~}Co?JmFIkCLkGHjDKlFNlJHhCLjGOhLJkFRkKRlLLkGMkJPiLQhLNiIMlISjMPlKJjGLjHPkLMdGRgMToPMiHPhJPgJMdFPeIPhKQhKRjNRkMPeKSfLTiPVgPQcJSgMThNThORgMUhPRdMUhOVgPShMVhPSgNShOQaKSfMUkPUgPSkNUgPZkTZkVVdNUhPZiTXiSVeQYgRXiR_kYVdQXgSYeRZiUZeT[hS[hTYhTVgPYfRXfRYfTUdN\iVYiTYgSYfRXfS[eUYdR\gW]hW]gV`lZ_iY`kY^hX_hY^fW`jYal\\gV_jWbh\^hWcn[dj[em_]gWahYfm_bj[_fWbl]dl^dj]aiZci[bi[ek]ej^fl`dj\kpbfl^fl^ek]ho`gm`gmagm`lndhnbjnblpekodkqdmqfiobmrfkqelrfmpfpsimpeorhqtkstkrskx{ruwnvwnvxouwmtwlyyrwzpz|syxq{}t}~uyx~yyyz}~{}~~}|z~z|{tz{}|u}}u|u}|t}{u}{u{xrzxqwvnytmxuosphuultrkwslrohurkqnfsohtmhqnfrphpkcrmgnjcsngpjdmialg`kh_okcqkemg`lf_lf_kg_kg`mf`jd]kc]kd]lf_jf_ld^jaZibZjb\iaZjb[ofae[Uid^jc[lf`k_Zi_Ykc^ha[ja[jaZg_XmaZi`Zg]Vd]Uh[Uh^Wh^Vh\Vh[Ula[h`Zoa]iZTh[Ti[Wl`[j\VgWReXSj]XhZTi]Wh\Vh\VeVRh\UgXQi[UeVOhVOfWSfUOhYTeVPiYShXRhWRdVPhYQiUPiZSeSLgWRiZTeUMiUOgUOiWQiYSgTOkVPkXSgVRfYTkSOgVQfOJfUOhPKiQMeQKeOKgRLgNIkTNgPJfNHjRMhPJePKlWRjRMfOIhOJjLGhRLiPLlRMhMIhLHjOJlSNkOJiNJfJDkMIhJEdKFgMGiKFmNJjNIkNJkIEgMHkNJfJFkJEjLGmJGoA<~~}}}{|~}}~z~z~|~}~|{~@o}~}~~~|}~~}}}~~}|~}~~}Ds@KkGHkDJlFHjCLlHGkDNmKKkGLiGHjCPjLMiFIhEMeHTmOLfGPkLPiJRhLPjKLjGRjMOiLMeHLeFTiPPjMLgFNiIQiMRhNNeJObIOiIPjLYnTThOPgKRfLShNRhOViPUmQWjSUhPUhPVhPTiPUeOYkUYhTTfOVhPXhSUeOVfQYiTUbNVdNXjRTeNTgOZiTZhUYhSTdNZhTZhTWgRXgQ\kVYgR[gUZdTVgQZiUVbP]gV_jYWgR^kY]gV[eUYgT]jW\fU]iV^hW]jW[fTak[^gW]gVal[]fU[hU`fY`jZ`hYbj\]fVafX`iYbl\^jZcl]alZcl]dn]dk\ch[dj\aiZcl\dj^fk_chZfk_ek\hlaikbck\imadl^gnafi]koehlafn`gmaiobimaiobkndmoehk`mpdmrghoalodlmdimbqrjmrfmpfjrdtvlpsiorgrukqsirujsvmsukxypwxowwnxwovxpsulvwouwmwwnxypw{qyzqyzrzzrxxoyyqxyp{{tvwmzxqzxptumxyrxxpyyqwvottlyxpvwmstlstjwsmvrkuumrohusltpitrkppgtpjtqjpnfrmgsphrmgllctnhnkbmjbqmgmibnjcqmfoh`lg`plelf`nhbid[lf_kd^ke^ld]ogamibnible^je^kd]h`Ypg`kd\ib[kd^hbZib[kc\fbZic[ogajb[i_Xk_Zj]Vh_Wjb[g`Wi`Yh_Wj^Xj^Yg_Xf_Wf_Xg]WeYRi_Yg]Vh_Xg_Wi]VfYTj_Ze\UdYSi[ViZVeVPj]WeVQfYSfYSfYShZUgZTd[UdXRi\VhTOh[UeVPeSMh[TiYSjXTeVPhWQeWQk\WhXRgVPiVRdTMiWRgTOiUQhTOiVQeOIhQJjWQfRLkTPkUPgTOgTNiQKgQKjTPgPIhRLhMIhPJfNHgQMeLIjOKhRMgNHgPJgNIgMHfLHiPLjTOgNIiOJhJFfKHiQLeLGkOKkNJjKEhHCmOKhKFiJEjOKgLHoHDjJFlJFmMIoMHkLGsEB~}|}||~|~~|~~~~z~~|~{||~Dn?KkGKkGJqFIkDJjDHhDIjEPnKJhDLiFGcBKiGKfGJiFRmLLgHMhHLcGPkJRiMNiISiNSiMMfGNhIOeJOjJVlPPfKUlQRhNPfKOhIRkNTkORfKTiOQeKRjMOgKQhLTjPUhQOdIOgJWhRXiTQhLTiNVhPYhSUfPUcPSfNUiOWgPQcKUdNUeNTgMZjTXdQXfRVfQYhR\gUTcMSeMXgRUfN[iU[jTWePZkU\iVWdP\hUYgTZfS[gT]iW]jVWeQ^hW[fU]hVYfR[fU_hX]gV\eU[gT[hUakZ_k[YfR]gY^jW^iXcl]]gVek^^hW`hY_iZcj]agZdn_fn`cj\ch\cj\am[bk[ch\dl^dk_gm`el]ck]ek]fk`el_ilbej]hnagk`imbcj]fn`gkahl`iocgnbloelodlrfgl`kmdlodlpcej\lqenqfkmcnoeprhkpeprhqsjorforgpsistjttkprgqriqogpqhtulwzqrritumvxoutlttjtulyyquumvwnwvpssitulvvnutltrkuumvvnxxqutlutkvuntsktskrphrphurlsohtphqofnmdqogqngqngpnfsphqmgqognibpmenicnjbnibnicroimicmhali`ojcke^kh`mhamg`mhbnickd]ke^mf_ib\ie]gbZkb\kc]ld^jc\mf_ib\lf`f\Tib\gaZja[f^WicZi`Yjb[h`Yg_Wjd\h]Wl_Yk_Yd]Uia[ja\h]Wk`ZjaZl^Xnc]h^XdYRl]Vg_Wj_XhZTh\Wi[Uf[Rj^XeYSk]XgYTiZSeYSh[UhYTgVRgXSjXTjYTgWPdRLjYShYRjYTbTNgZUeXQjXThWQdSMhTMl]XmZVfTOgUPkYUgRNiVPiSNiUQcOIiUOhQLhXRlZUhQMeOJcPJiQLgRLjSNhPLeMGlRMfPKePIhQMdOIfPLjQKeNHiPLhQMjQLfMIhOIjPJjKGeJEjNIjLHlPKjSNeJDdJEhKGfLGmNJkIElKFjGBhGCkHDpMJoOKmHCrB@~~}}}}}{}~}~{}z~~}~}~AmJmGOjJInEGiDNlIMjHKhFPmMKjELeGLiIPhJKkHLfHPkLQmNPiLHiEQiJMjHLeGLkFOiJUkPNfJPiKPgLOhKPiLNhJOeJUkQPgJQfLThPQgMRhOSgMMdGNgISeMWgRQgLUgQWhTViRXkRTiNVfQUeOScNUgNVhQVjQVgRYgSWfQVgPVeQ]hXXgRQdLZgSWfQWeOZiUZhTVaNYeQXdSWfQWeQYdRYeR_iYVeP[iV[gV[iVZhS^hV[cTWcO\gVZhT`jZZfT]iW]hW]eX_hX^hXcj\]gU^gWal[_jZ_fV^hW\cS_hWahYbi[ah[ck\ahZag[`iZ`eYgl_^dW_fY_eWdj\biZci]`hZ]cUfk^ck]ch\dg]di\hkach\fl^ei^dj\gkach[eh]afXjlbfj]`eXhj`ei]gk`hk`ek^hh_eh^ijagi_mofijahi^ikaeg\jj`jlbjlaij`kmdijakh`mmcgh_hk_eh^gh]lmdjj`lkckkbhi`fh_kjcjg_kkaomgljbgd\ljckjbjh`pngig_nkbmjajg_if_hg^khbjh_ig_ih_ig_hd\id^khagf]ig_ic\he]hd\jg_gc\ge]ie]kg`ic[he]gb\fbZliaie^d`Xic[gb[hc[je]jd]ia[gcZgaZkd_b]ViaYhaZi`Yjc\hb[haZh]Ve]Wg^Vh_Yd[Ukc\i_Yh`Xi_Yd[Td[Uf\Vj^Wh\Vd[Sd[TgZUh\Uh[Tf[UgZTdVNcUMk_Zh\VgYTjZVgYShYRj\Wi]Xl\VbULgZTe\UhWQeXQiXReUOhYTj[UgXRgWQhXQeUPgWRbQLfUNfUNcRMfSOgVQbTNjXSiUPhSOdRLfSNgTOhUPgTOgTOeSNeNIgSOhQKjVRiSMeQLkTOhZTgOKkRNiQLhOJiQKkQMgOJmSNjQLgPMhPJlRNePIkPKeNIhOKbKFmOIhKGiLGnPLiIFiKGgLHnQNkNJiLGhMIjLHfIDkLGt@<|}~|~|~}~~}~~}~~}~Br?LkIKkFNlIIgEIkDMoIHgCKkFOlKOiKKhFJhGGeCNiJKkFQlNOjKMkHMjIMgHSjOLfGQjMTiPTgOQgKQhLQjKNfJPfKPgJNcHQgLPdKSiNQdKTiORjNTgNUhPSiOTgOUgPShNViPViRYjTTfOQbLVjQWiRViQQdMXhSWgPXgRVcPUdOVgPUeNXeSYgSZhTXeRVgPVfPWdP[gTXeSWfQ[hVYfSXeRXdR]hV[eU[hVZfT\hV[hVZjU[jWZgT[hV[fT`kZ[dU]iW\gV[dVaj[`iZ`jZ]gW[fV^hWbi\]fW]fWel`]gVbiZaiZbhZ_iY_gY`iY\cUdj]cg[]dVag[ej]bi\`fXafZdh\_gYdi]aeWgmabhZcg[bgZdk]_dVek_cj]gi^gi_dk]cfZgm`fi^ei]ci[ilbgj_kldhj`gkajlbhj`hh_fi_hladh[fg\fh^gi_kmcimahi_ilaee[ij`ljagi^hi_hh_hh^fh^ih`ikabeYhh_gd[hi_jiahi_khaklcjh`gf]jkbfd\ihakg`kiakh`ih`fbYje^hd\lg_jg_hd]gd]gd\khblgajg^fe\jd^ic]jf_kh_fc[jc\hbZhbZhdZjd\ng`iaZlhajd\hc[ic\c]Umf^ib[ic]g`Ylf_ke_ke^f_Ye^Xe^Xic\ib[hb[k]Xic\h`Yf_Ve]VgZUhbZi^Wg[Uf\Vg[Uh^Wi^Xg]Wg^Xoc^d[Tg^WfZUf[VeYTi^Xg\VgZSg[UfYUgZTh\Vi[UeZUfZTgUOgYRdSNgXRfXRg[Um]XeXRgUPgUPfTOlYUgWRgWQj[UfUOfYSlZWi[VhVQhTOiWQeRMeSNeTOfRLkYShWQeRMfTPiSNhUPkVRbNHlTOgQLgPKfRMgSNjSNfPJiOJfNIjQMeNJhOIjQMgOIkPKdPKhOJdJFjRLiOKhNHlNKkOKkPLjSNgNJiKFgFBnPKgEBhJGmKEkKGlMJeKGnKFsC?}}}}~~}~|{|}|}{{~{ ?s;~}~{}~~}~}~}~}|~||~z{~|?u;MkIMjIKjGJjFQlMLkHIfEMiJNkIUlPNkILgIRlMOgJMgGKfEFcBLgHMhHNiJQiLQkMTjPQhLNeHOfJRhMNfIQjLPgKSgMNcHRkOOeJSjOScMOcJXkRTeOVfRReMUkPWkQSeNSdNSgMRgMTfNWiRWjQUePXiSTeNUgQVgQVePZfSWhSVfQYjUXgRYfSYgSXfRZfTXeSYgTXdQZhT[gUWhR^hX[fUZeT^hWZgTUaN[jWYgS^iW]hX]gU`iYYbRbk]\hW\gVYbT^iX^jY\dU^fW]gV`jYaj\`iYak\_fW^fV\dT`eX[dTbhZ^fWaiZ^gXdk^ahZah[cj]_eWck]`cWdi]bgYbi\ah[_aVbeYfj^`eYej^bgZej_di\aeYaeW`gYcg\dg]`fYdh\eh\dg\fi^cfZfh^hkadi\eh\fh^klbef]bbXjkbeg]hjacf[gj`gg]fh^efZfj_gf^gi_hi_de[ef\gh]kmddh]fbZbbYliaed[gh_hg_if^hf\gg^ge]hh_ee[ecYecYjh_ig`ebZih_ge]ga[hd\hcZih`jf_ih_kf^jf_fbYhd\fdZgaZeaYkg_je]ie^hf]eaYkd^ic]jg^eaYd`Yh`Yic\kd^gbZid\f^Wg`Xg_Yd[Tg`YeaXe^We^Wja[f]Vjc\ja[faYh`Zk_Yja[g`Yg]Vh_WaYRh^WdXRe[Ud]Vf]Vg[UdYRcWRdXQfYSe[Vg_Yg\Wg[Tf[VgYTg]WfYTgWQeXRg[Th[VeZSbUPgWPfWRfYRj[Wj[WfVOhXSdUOjXScTNi[TfYTdWPdUOfUPfWSiYUkVPeSMgYSfUNcNIhWQfWRgTOiTOdRMcQLhSMgRNeNKiRLiSNdRMgOJhQMdPJgQLgRNfRMhQKhPLfQLlRMfMHgQLeMHkPMiNHkPLjQLgOKiSLjQLiLGjOJgKGhNJhNJkOLjMHiLGiKGiJEjKGiJFmNJlFDs>:}{}{~}}|~}|}}}~}~}~~Ao>KjGLmIGjCJjGLjHKkFMiHMhJNhHMkHObHQiLMfHKfGPjKPlKMhIOhKLfHPgLNhJQiKQcKSjORfLNfITkPRgMTkPShNQdKRgNPgJOeJRkNTiPTfOQfMQeLUhPOeIThOSeNPdKWkRUgPYjTUeOTcMTdNUdPYjUUePVgR[iUVfPWfSXeQVeQZhTVgRYhSWgRXeSXhSZfT_iY\gVZfTZhU[gW[fT_kZ]hX`iZWaQ\eSVcN\gVbmZ\eV_jY\fU_gX]gV]gW]kV[dS_eX[dT]fW`j[^gW\gV`fYaiZ]gW`iZ\eV`iZbj]bg[ck\agYafYbh[ch]_hY_gY`i[ah[bh\bj\fk^bh[fk_afZcg[_dXbh[ci[cg\fi^`dWdg]ch\fk`afZcj]fg\bf\fh^ei]hkafi^glaei^eg\ch\fh^ei^ge]ikaei^df[eg]hh_fg]ef\ef]ff\dh]hg]fe]ih`ee\hi^hg_ceZff]gg]hj`ih^fe\fg]eeZig_gf\fd[bcYjiahf^hf\ig_jg_hg`daZje^liafc[ed[fe[he^gbYfc[kgahe]he\kf_fd\d`WfbZd`Xgb[fdZfd\ke^gc\f_WgcZjd\id\faYg`Xf_Xd[Uhc\f`Yib\kf^haZg`Yja]f`Yf^Wc^Vf_Xe`Xf^XiaZhb\d\Ug]Wf]WfZTh]Wk_YiaZe[Th\Ug^Wd[Te[Uh_Xh_Xh`Yj]XeZTeXRg\Vi]XcYQg]Vg[Th\Vk]XfVQgYThVPg[UfTOh\Vd[UiZUk[VgYUgXRhYUl^YcRLgXTfYShWRbRLbUObVPh[UgUPeSMgWQeRLfVPhVQaPIiWSfUOhSNhUOfQLfRNhVPiRNfQLhTOnVReOKeMIhQMjRNhUPmRMfMHjPKhQMgQLjRNcLGfSOgPLfOJdLGfMIeHDfMHjNJiPKjOKgMIgKGhKHlMHkNKgJFhKGjNJgKFiJElJEqA>~~~}~}~~~~}}}}{}~~|~~}~~{ >o:HkCKmFIlEJkFHdEMkGNiJKgHMiINiIMhGNjIOkKPiLLeGQhMOjKRiNRiMLdHMfHRhLPkKMhITiPRjMLdFPeIQfMMdHThPQgKVjQUiNRfMOcJTiNRhMWfRVgQRbMThNRhLQcKTkQTfOTePQdKYjTYfSXfSWgQVfPUdNWhRWgRWiRYgTZkVYhTYfSZiUYhTXgTYeSZiT[gURaK[gVWbPYeS]kW\hV]iXYeSWeR\fUYeR]iWZdU^hX_hY^fY[dT_jYYdR_kY\gU\iW[dU[eT^hWck]]dWahZ\cSai[dl^ahZ]dU^fW]fW^eW^gX`h[`hZagZbi[aj[_hWcj[ci]afY_fYdh\agZci\]dUbf[agX`fYincek^dj^cf\dh]ci\hj`eg]cdZdh\gj`eh]dg]acXadZadXdh]jkadg\cf]eg^dg\de[dh]ed[fg\cdYgi^hi`ff^ih_eg^gf\ccWef\hh_dbZgf\ge]hi_dd[jh`ee]hg^jiafc[cbXfe\ef]ebYgf^ge^ge\nicfd[hc^hf_hc]ig_gb[ed\ecZjc]fc[hg^ie^ff\jg_e_Wgd\fc[hc\he^ih`hc[hc\gbZhbZje_gb[g`Ye^Xgb[ge\ja[b\Ue^Wf`ZgaYg_Yc[Slb\h`Zf]Wi^Xf_Xh_YgaZg^Xd[Ug_Xe[Tf_WcZSi_Xd\VhaZe[Vf\WaWPg]Vi^WcWRi`Ze[TfZTi[Wh\Vg\We\Tj_Zf[SeYTg[Uf[UdWRhZUfZUfXSgYRi]WeYSgZSeXRiZUgVQcTPj\WgUPhVQj\WhUQfUOgVPi\WfXRfUPfSOkYTgXQgWPjUPiWQgWQhTPgSNgUOgRMePKeWQeOKgPLiQLePKfPKhUQdNIiQLfOIfPJhPKkUPfRNiQLeNIiOKdPJfOJjPLfNIlQNjLIjQMlRMhLHmNLdJEhMJiLFiIEfJDeFAlLHhLHjLHs@=}|~}|~}{~{|~}|}}}}~|}~}~ + Cu@HiDKiGMkJLiGKgFKiFHcEMjIKhFLhHTlPQjMNlKPiLNjKKfGJdERfMNiINfKMgINdINcIRiMPiLTgOTlPSlOMaHNeIQhMNhINbISiOVjRTgPTiNOdJUiQWjRTePWhQUgQWjRPeLWhQTeNViQWgQQfMWdPTgNXgRYiTWfPTdOWgQUePZhTZhUXeTTeNTeNXhTUdOVgQYfTYfS\gV]iWZdQZjU[gUYiT]iW\gV\gV\dWWdPYeUZcT\hUZfT]jX`gZ]iXW_N\eU^hX^gW^hY`fY]gWagZ\dV\eTbj]`fY_aW[dV`iZ`hZ`gZ]fV`fY_gXaj\`gX`fZah[_fYdj\bg\`eXch[bgZ`fX`eYcg\dh\eh]df\`dWdj]bf[bf[be[fi]ce\eg]ek_eh]cfZdd\bfZei^ee\cg\hh_eg^ef\^bUde\dg]hh_cg\eg\cdZfg^hg^df\ac[fg]eeZfg]ff[ec[fc\c`Xhi_hh_jg`ff\fe]ef\hf]fbZii`fd\hg_ie^fd\fd\cbXhe^dbYfd[dbYfe\gc\fbYgbZgc\hd]je^fcZge]fbZgd]faYb`Whe^hb[jf_fbYia\je^g`YfaZfaZb_Vhb[h`[a\Td_Xg`Ze]Vc^Wke]e^Wg^XgaZi`Ye^Xjc]e]Vf]Vjd]jd^mb\h_Xia\g^Yi^YcVPh`Yf[Ud[Tk_ZfXRj`Zi^YbYRe\VgYTi`Yd]UeYSh]WcWRh[Vd[UcXRh]WeWPk[Wi[WfUPgZTcZSiZUj\WeWQh[VdSMfXSgYTeXSfWRhXUbRLfWReRMkYUjYUgVPeWShWRfSOcQLeRLiVSfSNiWRgWQgRMgTOfRNdMIgTOgPKfPKfTNdOKePMhROhSPhRLgQNiSMeSNhSNiSNiRMhLHiOJkSNhPKcJEgMHhQNiMHhNIjLHlNJhNJdJFjNIiKGhJFiNJiJFgLHiIEn>9~|}}}}~~}~|~~}~~|~||}}|}~}| { Ap>HcCQmMNlJMkHMjHIhEJfEJdEKfHPiLMhJMcHMgHQkLPjLOgKNeHRkNOmKNiJPhLTiPOeJOhKNeHOgJShOTjPRfNPeKRgOQgKPgKRhMQeLTiPSeMVhRTiPWjSVgQThOSeNTeOThOVeQXjRXhSSgOVfQTeMTfOXiSWgRR`KThP]jX\hVWfRWeQScMScMVeQYiTYgTYeRWcRZgUZeT[hVZeTZgV[dVZiU\eU\lW\gVYdS\hVYfSZdS^dW[dU_kY\eUZdTai[^eVaiZ`gZ_hY_iYYdT_fX_fX_hYbk]`hZadX\eU^fXcj]_fXbi\bgZci\bh\_iYbg\aiZch\ci]bh\ch]_eXaeXbgZ_eYch\`h[cf[`cWde[adXhj^fi_ah[gkaci]fh_bbYef]eg]bdZff]gi_bdZdeZcc[gi`df\ef[de[ii`jiadf[fh]fh]eg\fe]gi`cbXbe[eg[fe]ef\de\fg^ee\kh`cc[dfZfe]dd[ee\ed[jh`he]hg_ddZdb[fd[ig_hh`ie^gbZhf^fd\c`XdbYif^ge]kf`ebYfd[d_Xjg^fb[jc]haYhd]jf_ebYd_Xjc]d`Xje]ib\e_XdaXid]g`Ye`Yh_Yhb[b_Vd^We^Vf_Wd^Ue\Ve^Xf_We`Xd]Vf_Wh_[d[Sg\Wi_Zg[Vf]Vg^Yf]Xh]Xg^Vg[Ug[Vf]Wh_Zj_Zg^Xg\Wj_Zf]Ve\UeWQaXPdXReZTe[Ti_Ze\UeXRh[We[TgXSm_[h[TgZVdVQkZVfXRhYTcUPgYTf[UhYSbRM`SMhTMhSNfTOgUPgVReWQiVRgVPcQMbOJkYTfSNhTOiYThUPeTPhTOfRNePKeQMcOKgTNmWSgRMiOKeNJeNJeRMjRNhPKhQNdLGeLEgPMfMGfOJiPKfMHfKGeGClLIeLHjROgIEhMHkPLlLHmRNhKGhOIlJFkLHs?=|}}~}~~~~~||||~~{z~~~|}~}~~}~~;o8JfEGhBIhEHhDFiBIgEJeGPjLMgIMhGNjJPeLLfGSjNPkLLeHSjOHeDNgJQkMRbLPeKOiKNeISiOQeMShNQeLShOMdIRkOUhQPhMTeNVgRTgPRfMSgPRfMQdLVhQSfNOdLXeRShNSfNQdLXkTUfOVeQWeRXfSUdPRcLUcPXdRVfRXiTWhPWeQZjUWeRXfT\gWZeTZeTZdTYdTXeTXfRYhT[hV\gUZdTZfUZhU_iY[dU]gW\fWWdQ[gUYcS_gZ\dVaiZ\fW\fV[fU^gX]fW^gX^hY^fW[aS\gV]eV\eUbiZahZ`hZ`gY^eV_hY_hYbf[`hZcg]`fZbhZ]cT_eWagZag[cj\cgZbdZ`dXcg]bg\_dW_bVbh\cg[beYfh_bdXcg[eh]cdZeh^dh]bcXdg[`cYeh]_eWeg]deZdeZdf\ef\jkbdg^de[bdZdd[ed\ff^ccZff]gh`dcYed\gg]bcYgf\ee[ig]aeYge]ff]ccYec\cdZff]ccYb`Yfe]ff]ge^dc[hf]ed[gf^fd[ebYig`eg\ebYgd\gd]fbZgc\jd_jgad`Yfb\e`XdaXgd]fc[gb[gc[ie]hc\d`YhaZd]Vb^VeaYf_WaYRkg`ga[h_Yi_Yf`Yh^Xjc]e`Vc_Wg`Zj`Zia[f\Wh`Ze[Td[Uh_Yh^Xd^Wj`[haZbZRh]Vh_Zg_Yf]We[Wg\We[Ug\Vf[Tf[Vg\Vd\Ug\VcYSi`ZcWPdWRj]XhXTfYSj\VfWRfWQgYSg[Ui[VeXQeVQfVPgZUkYUfVQgXSfWRaSNhURiXSdUPgWRiWSiWRkUPjYVfSNiUQhUQdSNfSPhUQhQLgTOcRKfRMhTOiTPgRMeNJePKfNKhRNkTPjSNgTPiOJiRNgNJjQLiRMdIDhPMfQLgMIgKGcJEiMJfGBgJEgLGjJEiOJhLGgDAiMImQLiLFsDB}}~~}}}}}}~}}~~~~~~||~}}~}~ z9l6IgDGgCNgJPmMOiINiHIfEPhKLfHLgHDd@OkLMeIIcDLfFMgIMgJNdHMgHMgINfISiOOgKRfNMfIShMQgLPgKShNQhLQjMSdNSfNTgOPgLThPVjQSdLSgOVhRRfMXkTWeRUgQXiSScMXdSYjTXfSWdRVgPTcOWiSTfPTePVeQYhTVhQXhSXfSXfSWcQZhUVePYdS[eUXfSZfTWfS[gVZgTZfT\gW[fUZfUXdSYdS]gW[fSYcR]fW[fVYaS\cU^gW_hY]fW_hX^eXXeS\gW\dT]dVY`Q_hX^cV^fX_eXagZ_gW_eX[cS_gY[eVafYfm`_dX`eYbf[]bUdg]af[_dX_cXbi\bh[`cYah[cf[cg[df\bfZcg\eh^ce\dg]eh]acZbeZdf\df\acXcf\bf[fg^bbXdh]`cXacXgg^gf^ee[ce[acYadYdcZfe]ed\hh_ee[ef]ddZfe\ff\ff\ef^gh^de\deZed\gf]fe]fe[fc\edZif^ccZdcZcaXdc[a_VdaYig`dbYb`WfbYif_ebYfaZgb[ie_gc[e`Yhb\id]ebZgc\gc\haZif_hb\hb]jgafaZb_Wd\Vga[kf`ga\if_ha\faZe_XfaZic]f_Uc]V`\TeZUe^Xd_Xg`Zlc]g^Ye^Xf^Yg_Zh_Zg^Xf]Vf^Xg`YbZTlb\f]Vf_Xf^Xd[Uh]We]Vd[Tj_YdYSeYSdZUfZTgZUf[UeWRfYUj]WgXTh]WeYSdWQj[VcXQiXSdTOdYRfVPfVRcUOgWSdUOhXSdUPiXTiYTgUQhRNiUPcSNgUPhUQdWPcTOhWRfSMjZUfSNiWRfUOeSMhUQfTPgPJeOJcPJiRNiSOiRMhTOiTPhSOgOKjPKeMIbLGlPLdMIfQLjPMgOKjQLjNKhLGmSOiOKgLGlMHhKFjRPgMIkLHiHCgJFfHDk<9}~}}~~~}~}~~~{}~}~~~}}}|:n7NhJJiGCh@LgHIfFKqHJkFLiHNjJIgENjJNeJKfGMjINdIPiLOgJOhKKiGRiNSfORgMRiNNeJOhKNeIRdMOeKPeLRfMRjNPgKZhTSiNRfMTiPXjSSgOTgOUhPSeOTfPTeORgNTeOWeQXhTXdRYjUVgPReNZhUUfOXgSXgSVcQXfSYgR]fU[gWTaOWfR[hVZfTZgVUaOZiUWdS_iZZeS[eUZeUXeS]fWZdU\gW]dV^gWYgT^hX[dV_hY_hX\eU]hW\fW^hW[dV^gY\dUahZ]eU]fW`hZdj\`i[^dWW_Q_iZ\dT]cWai[^eV`hZcj]bg[_eX`gZ_iX`fZch]`fY`hZag[agZafZhja`fY_eX_cWdg\aeZ]bT]cVbdZce[aeY`dY`eXafZadZfg^dg\bd[cf[bdYcd[baX]_Tdh\df[eh_cc[_bYhj`cf[ed[ee]eh^ce[bbXfh]eg\dd[de[kibgf^de[ee[cdYdc\gd^dbZiiadd\gg]ihagf]ebYfc[daYhc]eaYeb[hg_b\UbbYebYdbZbbZb_Vfc[e`ZeaYhd\a\Tgb\faZa\UgaZeaXeaZfb\haZb^WfaZeaYic\hb[g`Yc]Vb]Ug]Wfb[g`[je^d]We`Yd`XgaYd\Uh]Xh_Yjb]e[Tf]Wg_Xc[Uh_Yf^Xg\Vg`Yg[VeYTjb]g_Yf\Uh[UeZTfZUf]We]Vg\Vh[Vf[UdZSeXSfZTeUPdWPgYThXSeVQeYTh[VfYTeWQhYTdXShYThXRfWPi[VfTPfWSdTOj\WhVPgTObQKi[VkYUfPKjXTfTNdSNfYTgWRfRMdQLiUPeRMiWScPLfPKgRMfQKdPLhRNhOKgRMdOKfNIfQMfPKfRNlROeMIcJFeLGhOJiPMeKGgNHgLHkOLgMHfJFkOKjJDjNIhMHhJGfJFgKGgKGoA=~{~~}~~}~~~|~~}|}z~~}~}}}}|}z @q||~~}}}||~~~~z~y~||{}}|}~~}}{~} | ;x {y~y~~}~~~}~}}~}~|~}|}~~~~||}~}}|{{ y ?o;xyy{z}}{~~~|}|~}|~}|}~~{~|}~~}~~~}}}||}yy{}zx{ v >kl9PhLNiKMiJMfIKhHJbFLhHPhLMdILeHUgRIcEOcKMdIQgMTfPRhOVhR[mXPeLUhRTfQUhRTdPTfQSdNPcKUfQTeOSdPZgVScOTeQUeQ[jXXeSSbOXfUVfR]jZYeUZeVXeT[iWXbSXdT\hX^iY[gWZgWZfUZhV]gXak\al\\gWWcSXdSal]^fY[fV_iZ^gZ^gZaj\WcR^fYck_[eW^fY_gZ`h[[eWaj\[cV^fZbj]_gYaj]`i\ai[aj\ZcUagZ\eWek`cj^ci^biZdh^`g[bi\agZei_`h\_fXbe[bh]glbilbeh_fg_ild_cXeh^gkacf^fi_fj`dh]cg]fjadg]cg\dd\hlccg^de\cg^ef^gi`cf\fhace\df\eh_cd[dg_gh`fh_hg`dg]gg`df\fh`ee\hiaihaikcgd_fh`ef]fe]ff]eg^ijcge^dh^ea[hhaihbgg_jjbhf`ff]ed]hg_gg_fd]dd[igaihahc]fc]fc]dc\jibge_kicje`jhaic]ge_if`kgajg`gd^fa[gc]he^fa[hc^gc]ic_hd_b^Whf_hd^gc_gb]lhbic_g_YdaZjc^jd`gb\gb]hb[h`\f`[ib]e`Zgb]ha]g`\g`[h_Zd]Xi`[c^Wg^Yg`\g_Zg^Yha\f_Zld_ha\ha\ja]i`[g\Xkb]i^Zh\YdWTh^Zka\f\Wi^[eYTg[Vg]Ye\Wl_[cVQf^YbYTf[Vg[Vi\Wj]ZfZVhZVg\WfZUcUQj[Wm]ZcRNgVShWThXScUPeWRfXThWSeUPhVRbSNiWTiXVfRMgTQeSOfRNcNJiWSbLGdOKePLjXUdMIfPLcOKdNKcLIhQNeOLgQOfNJjPMhOLgMJeLGdJFfJGn;7vwxzwy|z{|y{~~~~~|~~||}||}~~{~~~{~}~~~~~~}}}z}z|z{wwwvt;j7QiNJeFKfGLhJNfKLeIPgLKhHOcMOgLNgKPhMRePQeNPgMOdKOdLXgTWiTVfRUfQVfSReNTeQTfPSbOXeSQaNXgSWfSUdQUeQ\iXYgUZjV\jYZgU[fVWgS^iY[gVYeUYgV^i[ZjW]iZ[fV[iW\gXYeUYdU^i[[fX[gX]gY\fW^jZ\fW]gX\fW\hW^i[]eX]hX_gZ^gY`i]]fX`g[`i[ai\\eWck^bj_ci^_fYbg^dj^`eZ^eY_eZag[ai]`e[ah\bi]bg]bi_cg^ah\dg]`f[`e[]cXei^ci^ci^bh\dh^ci^ae[fjaah\di_gkbeg]di_dg^hkbfh_ildild_dYfi`ae\gi`bf\ej`be\eh_giagkbhhailcgkaeg]gi`dg\dg]ae[fh`hiaef^jkckldef^ef_cd\hhblleghagg`gg_ijcgh_hjbed^hg`eg^igbff`if_fe^jjdhf`fe^gd]fe^ec\ig`kjcikcdaZhe_kjbfe^jhcid^gc]jhcfd]khbdb[ie`eb[hd_lgakd`jhage^if_ie_id_fa[mgbjeakf`kfaid_hd_f_Zhb]gd^if`gc]ke`kd_id^g`[f`\ha\je_ic^hc^ha\mfakb]gc^h`\hc^ha\kd_kfaf^Yc\Wf^Xkd`f]Xh\Yh`[f^Yj`\f`Yg\Xi`[i^[h]Zf]Yg\Xg^Zh`[i]Yh\Wg]Xj]Yi[Vg]YeYVk_\h\XeZTh[Wg[Wh]ZeXTj]ZdWRi^ZfUQfXSeXTgWTh\YeZUhWTeYUhZVeWSfSPiXTgTQh[WfUPcTOhVSfTQhTPdQMfWRgPLhWTiVSfSOiUQgRNfSPfQMdIFfPMgOKeLHdLIdMJbHEcGCcGDo>;u +vw|xxzx}}y}}}~~}}~~~~}|}{z~}|~~{~{|~}~~~|~}}{yyxxzxzw@n=OjLLeIPiNMdIIcFPfMQeLPeMNcJVhSViRUhRReNReORdOVhSVeRWjTRcOTePVfSZjVVeRUfRYhWVdSWfTYhU\iX[gWXfT]jYTfPVbRZeVYjVZgV[gV]hYYgVXeSZgUZfV]iY[iW\iX\jY]jZ^i[`j]_h[[gVVcR_i[\iX_i[_hZ\hX^iZck_]gY^gZ^eZ^hY\eW`g\^eY_j[^eZ`i\_d[aiZci_`f[bj][dWaf[[dVcj^ci]^dYah]embaf[`g\bg]di_ch]^eYbi^hlbcg^gkbdi^bg]jlech]ci^ek`joeeg^imcgkaej`ei^dg^fjafkaeh_kmedi_ikcfi`fi`ei`ei_ad[fha`cZeh^gh`ilccf]gkbfh`dg^hhahicjkcikdijcklefg_hi_hiafg_fiahibcd]iibgi`hiagf_ihaiiajibec]ee^jibgf_ff_lkffe^ljedd]ff_kicihaff^jickhbjidkhbhgamidie_ihajhcgc]kfaie_e`[gf`fb[jfahd_miejgcjf`ieaif`gb\lhbkfaeb]lfaif`kgbkgag`[jf`jc^gc]e_[ke`kfaf_Zg^Yib]mjeld`hb\b]Xid_jc^ic^fa[ha]ha[kc_g`[le`h`\d\Wib]kc_ic^f^Zi`\jb]kb^kb]f_Zh^Zg^Zma^h_[g^Yi^Zg]YdZVj_[f]Xg[WeZUf]Yh[Vg\Yg]Wf\Xg]XdXUi^[g]YfYUfZVf[WdYUhZUhZWgVSgZUg[VlZWdXTg[WfZVgYTdXUfVRhZVfTQfZVeWRcRNeTPeUPgSPiVRfUQcQMdTQdROjURfROgURfNKdOKiSQ`MIgNKfMJgOLeHDi:8uwvxvzyzz}|{}~||{|~|}~~~}~}}~~~|z}}~~~}~}|y{{zwxxtxus@l=JbFNfKSiPQeMUjQPiMThQRcOTfQQcMXhTVhSXfVWiTWfRWhTTdQTdPYhV\jZZhWXgU[hWXfTRcO^j[XhTZgWZgU\fXYgU\hXYdU]jZ\fX_i[]jZ[gW[fW^iZ`j\^hZXeUbk^VcQ[gX]gYZeT]gY_jZ`j[^gZ^gZ`i\bk^_g[\gXbj_^gY]gY^fYdk`dl``h\]eYbj^bh]]eXai\[aU]hX^eZekabi^cj_fkafj`_gZekabh]bh]fjadj_af\cg^ei`ci_fmbbf]jneej_fladh^eh_af[di_hmddh_hlchlcbe]eg_fi`ci_gmccj_hiaej`fg`fi`gkcikceg_dh_bh]bc[fj`hkcijbfjaeg_fg_eh_hjcikcfi_ggalmgikcllfiibklefhaihbed]ee^llfgj`ed]hiaiicef^ljdef^onilmfjjdljdjibjicigahf_jhbmkekhbifajgbgg_hgaljelkejhbjickhbfb]ge_igajhcifakidje_ihcge_fd\mkegc^igaie`kgankflgcmgbec^ea[ec]kiblgbeaZke`kgbkgbkgbke`jd_e_Zgc]hb]i`\kfbga]ia]ib^g`[e^Yia\jd_ha]kc^jc]ia]kd`gc^ka]h^[ha\jc^jc^e\Wg^[la^h^[f]Xh`[i_\kd`f^Ze\Xf^Yf_[f\Wg]Yka^g]Zi^Zh_[g]ZfZVi^ZeZUi^Zj^Zh^ZdYUh[We[Wk`\g]YiZVi]Xg^[fXTdXTfYU^QMeXTfYViYWbVRaSOfXUgXThYVcTQdVRfVShYWhXUfSOiWTdTPeWShTQeRPcSOfOLgTPeQOeTPdPLgOLhPMfLIm;8wsuvz|xy{z{}|~~~|}}|~}~|~||~}|}}|||}~~}~~~|~}xzzzxvvtqHjE]lZ^m\_k]^l\_j\co``k_^m\cnabm`an`dnbfqdal^cna`k^dnbfpdfndcmadoagqednafpddmafncdoahpfeobgodjqgenbiqgdlaiqfeobktiipgjqhjrggpejthioghoegoejpfhrglrjipfltjioflrimskkrhkpgnskkqhlqijrflqijpghoekqhmriotliofptmlqimqjpvmmsjnslqvnlphmskqtmiofpumptljqfoslmqjmpisyprwposkptmpumruoptmnqksxqtwqqunruopqjsuouwqsuntupsuotwotvprtnqsmuvprunrtnuwqttosuopqjpqkqtmrsmstopqkttostnvwrtvpvxssuprrmuwqvyrvwrvuqtuprunuxrwwrwxsrrlz{vxwsutostmqrlrrlstnstnwvqsrmrqlrqmwwrxwsxwrutouuptrnyxtxxtqpkvtpxurutpsqmvuqywtvurusoxtqvupywrqokvspusosrmurousovtpxvstrnurnusowspyvssplrqltqmxurrqlrmjvrnuqnywsupmurnyvsytprnjuqmuqmsnkurnrmjupmrnkrmjrmjrnkrnjqliqmjvqormjtolspmvpmpiftompkhvqntolvomtqnuolsmjpjgojfrmjqjgrliqlipjgtnksmkrkhsmkqlinheqjgqifsliqifpjgqhfrjgoecrigmebldarigpgdqigqgfpiflb`ngdngdqhflb_ogenebpgeqfdmdboecnecrgfmc`ka_la_mb_ja_j_]lb`pcbj][na_k][ma_i][k^\mb`j\[m_]m[ZnNLv tttvyxxxx{z{~{~~~{}~~}~~|~|x|~|~~~|{~}~~~{~|}zz{|}ywyvvwtuPsOnwmmulqypnwmqypnvmovnlvkpxoovnnulnulszrpwotzsqwpu{su{ttyrsyqrxqqwot{stzrtzsu{tv{ttzrszrtzsu{ty~wy~wy}ww{uuzsywu|tzxx}v{yz~yx|vx}vx|vy~ww}v}{{zz~xuzt~|{z{z}{z|z}|}{~{y{z}||z|z|y{y}||zz~x~}{{z}{}|~|}~}z}~||~z~~}}}~|~~~{~}}|}z~|~~~{y~}}zx~}~|{y|~}{z}|}{{y}{|xv~|}{|xv|{{y~zx}zx~}}yw~zx|wv|xv{vt{ut}wv}xv~ywyx{wu{wuzus|wv{wuyts{wu{us|wuzus{vu|vtytrztszvtysqzusztr|wuyrqwpovpnysrxpo{trzsrxrpzutzsrxqozsqxqpxqovonvnmwqoxrqvmlwpnwonvnmxpovPOutuwvxx{}wz~z~}~~}|~~~~|~~}~~z|{~~~~}~|~}{}~}~}|~~~~~|zz{zz~xxvvywoNtNmwllujmvloxnqxolvkovmpxomulqypnvlrzqpyorwprzqryqsyqrzqs{rtzsrxqt{ru{ssyqtzsxvszru{tv|uw}vv|tv|utyrsxqv|uw}vw|ux|vtyrw|uw{uywz}xw{uzyy~xy}wuzs{~yz~xx}v|{zyx{v{zzx|z{~yw|v}|}{z~x|z}}{{~x}}{|~z}{}|~}|z}{~y}xz}x}~}}~|~|~}{}}~~}z|}|~||z}|z}|{~}|z|{~~~}}zx~}~}~{y{y}zx~yw|z|{~}{y{z}wvzx}{{vt{y~zw~zx~zy~|~xv~xv~yx{vuzy~yx|wu}yw~yw~yw}xw|wu~xvxsq|us|vt|vuzsr|utwqo|utzus{tszrq}wuztrzrqxrpyrq{utyrq|utxqpxqoxpnyrpxpoxqpwpowomvonwnmxpoysqtlkxpovmkvlktjixRQvysxvuz{zy~y{{z}~~~|~|~}~~~z|~~}~~~}~}|~}~}}|~~|{{xxyzuvttPvOlukkvjqyoqzpnxmoxnoxnpyoszqqxpqxoownnvmrzprxqrxpt{rrxprzqtzrpwou|tw~vtzsv|tv|urypryqtzst{sv{ttzstysy~xv{uw}ux}wv{ty~xx}vv{t{zzxv|ty~wz~xv|u}|{yzy{zy~w|zy~w|{}{}z~x~|~|{yy}v~|z~}~~}~|}|}|y~x}||z~||zy}w}{~|~||}~~~}~{}~~}}}~~|}~}{~~|~}~||z}||z}{|z~{y}z}yv|z}xw|z|xv|{|xv{yzyzxzx}yw|wv~xv{vt{z{wu|z~ywzvu~yw~yxywytr{ut~zx|xvysr}wv{vt}xwztr}wv}vu|tsztszrp}wuwqo|utzrq|wu{tszrp{utzrqxpnztrwqpyqpyrqxpnxqoyrqwonztrwpoypoypoyqpyqp{rqvmkypnwnmvQPuxvwvvxxx{z~|~}}~}}~~}~|~~}~~{|~~}{~z~~|~~|{|y|xxxvwvvuOvNpzomwlmwlnwmjtimvkpwopxoowmqxppxopwnoxnmukrzqqypszrpvnmvlt{sv}ut{rv{tv}uw}vsyqv|st|rryqtzrtzstzrt{sw|uw}vsyqy}wx~vx}wx}wx~ww}vw|vyww}vzxx}vzy{x|y{zx|v}xwzxzx{y}}{~xz}x}|zx{~y|z|z~y~w}{yy}w~|~|~}|~||z}}{~}~~}~~}~{y~~~|~~|~|}~~~}|~|}}|z}{}z~||z~{y}|{}{~}|zx{y}{{y{y|{~yw}wv}z}|zvtzy|wv|wv|wu}xw{y~xv{vtzy|wu}wvzxyx{y|wuzrqztrzsrxpn|vu|vuztr{trzsrzts{trzsrysqysrysqxqpyrq{utyrq{sryrpwonwnmunmwpowpovnmyqpwlkuljxpoyqpvmltihvmlvNMuuxywwzzy{z|~~{~}}{~~~}~{~~|~|~|~~|{}~}~~~~{{}{z{|z{wvxzvsuOvOlwknymkvjnymnylktioynoynryplukrzppwnsyrqxoowmtzrs|rpwoqypu|sqxoqypv|urypu{tt{rt{st|st{sw}vt{sszqx~vu{tu|tw}uv{tzy{yv|tw|uy~wx|vx}vy~ww{uywx|vw|uy}w{yx|vx}vy~x|z{yx~w|z|{zyz~x{y~||z~~}{}{|}|}{~|~|}~}z~}~|}~~|}~|}~}~{~~}~~|}}~~}}}~|}}{}{|}{}~~||xv{x}{~}}}{|z~||z~|~{y~}zx}yw|xw{y|z~||z~zx|wu{zyx}yw}wu}yw|vu|wt{ut}xv}wu{us|wv}vtztrysqxrpysq}wv}xv|tsxrq{utztrwrowqpxqozsrwqoyrqwpozsrzrqzqpzsrxomyrqypowonwlkwlkxnmxpozrqxonwmlxmlxnmtNNuuwuxwx{{{}}z~|}|}}}}|~y~~~|}}{{}~|}}~~~}|z|}~}y}|yytvvvusNsNlxkiuhoynluklwkmvkqypqzplvkqypnwmqyppxoqyppyoqxosyqt{ss{qs{qu{sszrpwoszqqwosyrt|sx}ws{qv{tsyqv|uv}uszqw|usyqu|tx~wtzrw|uy~wv{tw|ux}vx~vy~wv{u|z{z}{{zx}vw}uw|uy~w{y}{}{x}w}{{y}zy~wzx}~||z}z{z|{}}{~|}~}{}~|~}~|~}~}~}z}~~|~}~}{y}}{|z}{~|~|z}{~}{}}{wu}{}{}|z|yw}{}yw~zxzx~zx|xvzx|{~yw{y~zx}xv{y}wv|wu|vtzx{vt|vu~xvztsyw}wu|vu|utxrp{us{us{usztr}wuxqo|vtzsrvomzqpypoztryrpzsqyrq{sryqpzqpypoxpowomumlypowmlxnmxmlvmmxonxnmymlvOMvuwwx{zyy{yx|}}z~}~~~|~~{{~~~{||zz}}~|}}}~~{}~}|~|~y~}x{xzzxutxsJvIlvkjvinxnjuirzqnxmoznktjpxonwmrzqnvnovmqxplukmvlryqrypqyprzqtyrt{rszqv|ttzsrxpw~vx}vrxprzqw|vu|tt{rtzrv|tv|tw|ux~wv|ux}vu{tx~ww~v{zx}vy}wx|vy~wy~w}{{z}x~v{y|z}u{s{zyx~|{y}|z~x|z}{}{}~||z}{~|~|}}~}~|~}}{~}}{}~}~|~~~~~~}~|~{}}{~}{}|~~|~}{~|~|~}~zx}{}}yw|z~|~|{y|z{z|y~}|z{y{y|z}xv~yv~{x|z{y~yw{y}yw{ut~yx|vtzy|wu{wuzutywzus}vu}wu{ts~xw{usxsqzyztszsr|vt~xwzsryqpxqoyrqxqo}uszts~wvxpozqpyrqwmlztswomzrqxonzqoxpoypoyqoxpn{ppxmlvkjyonxnmukixmlvPOvswxyxyz}zz|~|~~~~}{~~~~~}|}|||}}}|~~}~x~~~}~|z~|{x|zzywuxwxtNtNnymkujmxlkvjnxmpzomwkr{rlvkmwlowmowmpxorzqrzqpxopynrypszqpzotzrt{ssyrszru|tsyqu|su{sw|upxnu|sw}vrypryqx~vzxszrt|sv|uu{tzyw}vx~vx}v|zv|uuzsx|uw}v|{w~vyx{yz~xyx|z}}~|x|uzx~|~z~x|z}|z{z}~|~|}~}{}{}}~|z~|}}z~~}~}~~~}|~~|||z}{~|}|{wu|{~|}|zx{y}zw~||z~yw}{}xv{z|wu|{{y|zzxywzvt{vt}xv|z|xvzx}wvyx}vu{us{us{usyrp~wv|uszsq{ut{tr{tr|ut}ut}vtyrq{tr|vtyqp~vuyrq}uuxomxrpyrqysqzsryqpzrqunlzrqwmlzrqxon{qpvjiwmlypovkjxmlvljwnmyPOtvsvwwy|w|x{}~}}|~~~}|}}|~|||}{{}}~~~~~~}~~~}||}}{{{zvwuyvvuOwNkujnzmnxlmvlluklvjqyppzoqxoowmqzonxms{rpynowmqxoqypmvlt{rownrzqszqszrs|rrzpu|tt{rv|utzrt{rw}vx~wv}tx~wtzsrxpuzsy~wx|vt{sv}ux~wy~xzyv|tzyx}vz~xu{s}{y~x|z}{x}wx~vw}uy~vy~w{y|zz~x}{y}w~|{}{|z~|}|y}{~x}{|~|z~|~}z}~{}}}|~~~|}}}}~|~|{}~~~}{{y|{~|{y}{{y{yzxzy}{~|zx|y~zx~yw~zx~zx~yw{zzxzx~xv}vu~yw}yw|vt~yx{y}vt~xw{vt|vt}wu|vt}uszx~xw{tr}vu|utxrp|wu}xvzrqyrp|ut{sr~wuxpnyqpxqpyrqyqpyrpwomzrqxonzpnypoyrpzpo|trxnmxnmwnmxonxmlwnmwmlujixVUsvxtwzyzyx|}z|||~~~~~|}}~|}~~~}~{~}{~~}||{~|y}~z~~}}~~}~|~{|{|{{|zxxzutwtOxNpyonymoxnoynmxlmwlpyolvjlujpzopyos|rrzpqxoqzps{su}spyoszqrypryqt{rryqu|tpxorzqszqu}tw~vv|uu{st|sx}vx~vywzyx}vyww}uv}uy~xv|sw|uy~xv|tz}x{y{zzyx}v{z{z}{}{}||z|zy~w{zz~x}}{}{zx~|zx|z{y|{~~~}}|~|~|~|}{{~y}}{~}}~~}~}{}{~~{~~|}z~}~|}z}||z|z~{y|{{y{y|z~zx{z|{zx}{~yw{z}xv~|}xvzx|wv}xvzx~ywzxyw}wu|z~yx~xv|vu|vt|xv}wu~yw}vu~vtzsq}wv|ts|vt{tszsq{vs|ts}vu~xv~vuvpnzus}wvzsrxon{sqzrqyom|tsxqo{rqwnmxpnwpnwpoxmlzrp|rq{rqxnm{onwonvkjyonsgevLKwxtvxw{xz{z}~|~~~}|}~~~}~~~~~}{~|~~~~~|{||~~~~~~|~|z{}|xyxyxxsuOwNkvinxmmxlkvjoynnymoynkvjmwkoxnowmpxopynt|rrzqrzppynpyoryqqyqqypt|sszqw~vs{rszrqyou|su{srypu{styru|su|tt{su|stzsyxv~uu{tw}uy~wv|tyxx}vv{t~|zxyx{y{yx|v~|{yzx~}{yzxz~x}|x|vz~x{y{y~zx}{}~|~~~|}|z~|~~~|~||~}|}~~||~}~~~|~{}|z}}{~||~|z|y|z~}{|z}}|~|}{}}zw|z~|z~}xv{z}{}yw}wu}{}xv|z~ywzy|{~xv}xv}xv~xw}xu|vt}wu}wv|us}xv~xw}wuxw{ts|wu~xv|vuyrp|vt}vuzsr|ts~xwzsryrqztryrq{ts{usulkxqo|ts{tsxonypn{rq|usxom{rpsjhwljtljyonxnmzpovkjwnlzpoxnlzpowTStsuwtxyyzv|~~}}~|~~y~~~~|~|}~|~|}~~~z|~{}}}|{}{}{~~{{x{v|vvvxxQuPlvjnwlryqmwknxmnxmnxlnxlpxomwkszroznmwlmvknvlszqpynszqr{qr{qs{qt|sqxoqyos{rw~vqxos{roynszqv}uryps{qyxw~uw}vw~uy~wv|tyxv}tv|tw}uz~w}|y~wy~vx~vw}vy~w{yyw{y|z}zz~x|z}|zx|{w|vzxz~x{y}{}{~|~|{y}{~}|z}{}{}{y~~~~~||}~{~}}~|~}~}}~{}{~{}}}z~}~}{~|~}}z|y~}}{}|z|{~zx~|}~yx|z|{|xv|z|{|{}xw|xv~xv{z}{yw|vt}yw~yx|xv}xv}xv~xvyw}xv~wv}wu~wu|ut|vt~wv{tsxv}vu{vt}vu{tr|ut|vt}wuxqpxqpyrqzrpzrq|sr{srzpoxnmxpoxomzqoyonyqp{qpxomypoxonxnlwomyonypoxnmvlkwmluMLvuwxxvwzz{|||}|z}}~~~|}~~}}}}~~}~~~||{}|{}~}|~~~|{y~z|{xx{{xxvwvuPwOmxlmxkmxlnxmmvkmwkmxlpxoqzpoynnympyooxnpxns{rqxpszrqxos{qr{pqzppxot{sr{qrzpszqx}wt|sqxopxnt{sv}uv~uw{urzqsyqtzryxv|tw|uu}sx~vw}uy~w|{szqx|v{zz~xx}wzxw|uz~xzx{zzwyx|{{yzx|{{y{yx~w{z}|~|{y{y}{}}~|~|}{}~|~~|}~|z~{~|}{y~~}}~~|~~~}|z}~|~}}{~|}z~|z~{z~||z|~|}{|z{yzxzwt}z{y}{{y{zyx|z|{}|}vu~xv}{{y{tr{utzur|z|wu~zx|wu{ut}vu}wu}wuzrp~ut~yv{ts~vuzsr|ts{tr{sq}wu{srzrpzsqzsq|srzrpzrqyqoyqpzqp{sqyqpzqpwonxonzqoyon{poypnwlkxnmypoujixml{qpxlkuRQvvvyxyzw{{z{~}{~|~~~~}~}~||~~zz|~|~|}}}|{}~~}~~}|~~~}~|~{w}zyyzwxzxvQvPlvklvjmxlmwloxmmxlnwlpynmvlpzorzqqypr{qoxnt}soznrzprzqt|st{ru}trzqrzpqyolukpxnv~uszrpxot{rv}uqypywx~ww~vx}vxwx~vxwu|tv}uv{tw}utzsw}vv|tx}w{y{y{yzxy~xx}v|z{y}z~x|z}yw~}{x}v}{}{{y~|~{y|z~|~|z}x~}~|}{}}~~}~}~|}~~}~|~{}~~~}~{~{~~{|~|~|~{}}{~|~|}{}|zzy}|z|y|xv}|~yw~zx}zy{y~zx{yzx}zyx~yx}vu|utyx~xv{xzur~wv|us~xw~ywyw|vt}xw}wuzsq~xvzts{srzsqztr|vt}vuysqzsr}utyrpysq|usyqpypnzqozqqzqpxonyqoxonwomypoxom|trzsqxonzpoxmlzonypoxmlxmluihymmxRQtuwvxvzz{{z{~}|~}}~~}|~{~{|}}}~~|~|~}{|~}~}|~~y~~}}{zy~xvyxvxtuPuOlxkmwkoznoznmxlpzonymoxmmwlpxnmwkmuklxkpyoqyooxnr{pt|spxnqzps|rs|qu{tu|ss|rt{st}spxot{sszqrypwvv}tu|sv}uw}vw~vw~vy~wzxv~ux~vx}wxvv}uy~wywx~vzyzxzxw|u|zw}v|z{zx}vx~v{zy}w|zzx}{{y|z{y{x|z}{}|}{{y{~x|y~||~}~~|~~}~{y}{}~}~}~~|~~|~{}{~|}{}~}}|}~{}}{}{}}{~||zyx|z~|z}{{y~yx}{|wuzy|z{z~yx~xw{vtzy|us~yw}wv}xwzx~wu{y|vt~ywzy|vt}wv~xw~xwxqo{us|utztrxqo}vu|usyqozqpzrq{sqyqoxomypo{sqxpnxpnwmlxomyonxnmxpnxomypownl|srxnmwnmxomzqovlkwONuuxuxw{xx}{}|}}~~~~~{}~|~|}~}~~}|{~|{~{~~}~~|}}~}~~~}}~}~~}~x{zzwxzywuyvtQuPlwkmvllwkr{qoynnwmkvjmxlpzooynr{qoxnqypqzppynpzot}sqyos{qrzps{rrzqu|tszqt{sv}uw~vv|ut|stzrszqywv}uw}vt|rtzsx}wu{sv{tx~wzyw|tx}vx}vv|ttyqzxx~v|zu{tz~xw}uzx{y}|zxw}v|z|zx}{~}x~v}~~~|{y{y}||z~|}{|z~|y}w~||z{x~~|~|~|~~}~}}{~|~~~}}}~~}}~|y~~~||y~{~|}z~|}~|y}~}{~zx}{}ywzx}{|z{vtyw~{yx{y}|ywzx}xv|z}wu|xv~wv~ywywxw~yw}xv~xvyx|vu|tsywysq~wvyrpwv~xwyrp|vtypozqpyrp|us{tr}ut{tszrpzsqzqp|us{rqxon{rq{sq|tr{sqyonwnlyomypozpnwmlxpnuljvhhwkjxonvPOvutwvx{{|~||~|}~}~~||}~~}{}|{|}~{}{~~y}~}~{z}|{|}~~}|}{{yxv|{ywzytuMtLnxmlwkmxlpzomwkqyonwlkwjoznmvknxmpzopynr|qs|roympzos|rr{pqyps{qpzou|sqypv~us{ru|sv}tw|ut|su}ttzrv|tv}uv}uv}ux~wv{tx~vx~vxw|zw~vw}uy~wy~wv|uzx{yy~wzx{yzxz~x}{zx}{}{|z{y{~x|z}{|z{y{~x|y}~}}{~~|~|~~|~|~~~|~~}}~}~|~|~~~{~~~}}}~|~{~~|}}{~{~|}{}||z|z}{y}|zx}z}{y}{{yzx{yzxzx}xv{z}{|wu{y|xvyx{y~yw~xvywzx|zxw}us~wu{vt|vt{tr~xv~xwyxzsq~ywysqxrp~wv}vt{srzrpxpo|us{tswvzpozrp|ts{rpzrpyon|tswmlvljypo{rqxnmzqpvlkvkjwmkvmlynmynmwjiwkjxnmvNNvtvxyyxzyz~{|z}}}}}|~||}{~|||~~~z~z~|}~{}~~||}~}~{|{z|}zxtyxxtvMuMkvimxloynpyonwlnylnxmnympyoqzooxmqzps{rs{qt{snxlqzorzqr{qrzqpyorzppxnr{qt|rqxoqxoryps|ru{sw}uw|uszqszqtzrw}vwvt|rwvy}wv|tzxv|tyxu{sx~vxw{yywy~wy~x{y~|w}vzxy~w}||z}{}|x|u{y}{~|~|~~}}{}{|z|{|z|}}~}~|~{~}|y||~~~~}~}~{}~}{{x~|~}{}}{}~|{y~|}~||y}{}||z}}|{y{yzx}{{z}zw{x}wv}{ywzx|vu{z{us~yw~xv{z{ts~wuzy~wv}vu~wv~xvzsq|uszsq|utzsq{ts}ts|ut|usxsqxpo{tr|ts~wu~vtzqoyqoyqp{sqxpo{rqyqo{qp{rqxomyon{qp{sqyom{pozpnwnm{ppzonvkjwlkxonzpoxQPyxuxsxuzz{z}}}}~}~~z|~~||~{|~|}}|{}}{~}}|~~}~}}~}~~~~~|~zz{zx|yzwxwuwxOwOoynlwkoxmnwmpzoqzpnwmnzmnymoxnozmoymoxnoxmnxmt{sqzpqyotzrnwmpxnqypt|spxoqxou|srzpw~vt{ru|sv|tyxxwu|sqypyxv}ty~wx~vw}ux~vy~w{yx~w{yzxw}uyxx}v|{|zzxywz~w}{{yzxx|v~|{zzx~|{yz}w{y|z~|}{}{zy{y~|}{}|}|~{~~~}~}{|}{~{~~}~~~~|~||}{~|}|z}~}}z|y}~|z}{~|{~||z|y~{}{||z}~yw}{{z{y}vu~|zyzy~xv|wuzxzx{y|z}wu{zzx}xu}wvyxxw~vt|vu}wu}xv|sr~vuzsr{sq}wu}tszqo|vt|vtzrqypn~vuzqpypnzqp}ts|srwnmyqo|srzqpxnmzqpwpnypnyomzonwmlvlkwjixnmzpoynmwmluNMusxwwyx|zz|{z|}~~~~~}}}~{|}~~||||{{||}~z}~~~|~~~~}~|~{zuz{v|tvuvvNwMmxloznktjkxkmxllvkoynmxlnxmpzoowmr{pqzpr|qq{pqzpt}rrzpr{qrzqpxos{qq{pu|sszqt|sv|ttzrt|rv~uqzoyxszqu|sx~vw}vv|tpwnt{s{zxwy~ww~vyxv|txw}{zy{yxvxvx~v|z{yw{tx}vz~x{y}{{y~{y}}{zx|{z}{{y~|{y~||z}{~}}}~}}z~}{}}~~~~~~~~~~~}~}~~|~~~{|z|z~{y~{~|~}~|~{xzx~~|~|~|~{{yzx~|~|{yzx|{}{zxzx{z|{{y|zzxzx}ywyxzyyw}yv}vt~xw}xuxvzx}xvyxxw~vu|zzus}wu}wvzsq|sq{tr}vt}vt|sr{tr{tr}us~xvyqo|uszrqyqp{rqxonyrpxnmxpnzpozrpzqp{rq|tsvljzqo{rp{rqyonujhxmlvmkypoujixQQwxxyyww}x{}|{|~~}~~~}|~}}~~}||}}}|{}|}z|~~~}~}||~~~~~~}}}~{}}{zxywvxwttMrMoynoymmxlmvknxllxknxllujoynoxnnwmqzqqzos{rqzpmvkmvkpznpxos|rnwlqzot}ss{rszqt{ss{qs{qs{qrzps{ru}srzqu{su{sw}uszqu{sv}tw~ut{rv{tv~ux|vw~uy~xzyx~vyw{z~|z|zx}vzx{yy~x{y{y}{y~wzx|y~|{y~}|z|{}|}{~|{x~}~||~|}~|~|~|}}{~|~{}}|~}~~~}~~|~}}~}{~{~|~}{}~{y}|{{yzw}{y~yw~yx{y~}|z}xv|z}{|{yw~}~zw~zx{wuyw{z~xv}wuzx{y~xw|vt}wu~vt}wv{sq{ts}us}xv|vu~wv{tr{ts|ut}uszrq|utyqo{tr{trzqpypo{sr}ts|ts|rqzpn{srypnzpoyonypowmlxnmwmk{rqxnlwlkxlkwmlvkjtihwkitNMstvxzw{yzx{|{|}}~|}~~}z}|~|~~z~{~}{}{}{x~{~z}{}}}}|~~~y||~~~|~||y{ywuvuvwvPvOjvinwmlvjnxmrzqmxlp{op{ooynoyns|rpzomylrzqpyooxnt{rqzpr{qs{rszqt|sr{qrypr{qs|rr{ppwot{rw}vxws{qt{rw}vv}tuzryxu|tw~vx}vu{sx~wx~w{yu{s{zy~wzxy~ww}u{y{yy~w{y{y~|{yz~wz~x}|z{y|{yz}w|z}{~{~{|z}z}}}z~}||}~~~}~~}~}~~|~}~~~~{~{}}|z~~|x}}~|~~||y{y|y{y{y~{}yw|z}{~ywyx|z}{y|z|zzx~|}wu|z|{zx}wu}utywzus~xw~xv}|}vt|vtyxzx}wv~wu|vs|vuyrpzsq~vtzrqyrp|ts{rq{tr|usyqp{rqzqp|trypoxnm{qpyrpyon{rpwmkypoxpoyonypnzpoypoxonynmymlyonxmkxnlvlkzpovRQsuwwxz{{{{{|y}}~~|~~~~|}~}}}}~}|~{~~|~}}||}|{}~~}|}|~}~}}xzxxwyuvszOxOnymoynkwjlvkpyonymoznnxloynoynpzooxmnxmpynqypmvlrzprypu|ss{rszrrypt{rqyos|ru}ttzrt|ss{rszqv|txwu|sv}tszqyxw|uu|sv~tw~uy~ww~uw~ux~vx~vx~vywxw{xzxy~wv{tzy{y}{{y|zyx|z|{|z{y{y{yzx|{}z~|~}}z~|zx~{~~|~~{~{~~}}~~}~~}~}z~~|y~~~~~~~{}}|~}{~|y{y~zx}{z|xv|{|z~zxzy{y{z{wu|vtzx|zzx~xvzxyw}wu}xvzwzwyxzx}wu{usyx~xw~wuzxxw~wv|ut~xw|trywypo|ut}utyqp}ut{tqzpo{tr}usyrp{rp|rqzrqzrp}ts{sqyqp|rqxom{rqxnlxnmxnmzpownmxonyonyomynmyonvmkwlkuONxuvuw{|{wz|}|{|~~~~~~}~~~~{}}|}~{{~x|~|{}~}}~z||}}|z~{~{}}~~~~{}{~}{|z{yztzwtwwMvLoxmnymkujlxknwlmwkmylpzoqzpkuiqypoxnpxnr|qq{pr|qoyntsqypmvlryps{rpyopynw}vrypu}su}tu}tv}ut}sxvw~ut|sv~uw}uv}tw~uxvv~uw}uxwzxy~wzxx~vw~vw}uw}uyxzyzy{y|z|zzxy~w}{}{|z|{y~wzx{y{y|}|y~||z~||y}{~|z~}}~|~{}{}~|~~|~|}~~~}}~|~{}~|~{x~~~|~|~{~}z}|y}{}{|z~|}{}{~}}yv~||z{y|zzx|z{y}{yw~}zxzy|ut|z}xv}wuzxxwztr~xwxvzts~ywzy}vt|ut~xvxpoztr|ut|ts}vu{tr|us|us~vu{srxomwv}vt|tr}utyqp|sqypo{sr|ts}utwmk{sqwmlyonzrqwnlyonypozpoyonxmlyonzonxnmujhtONtwwuywyyz{zzz}}}~~~}z|||}z}~}~~}|~}|}}~{z}z|~~~~~}~~|}|}{zy{xvzwvxsNsLmxkoznlwkmwlmwloynp{os|rmwkrzqqzpnwlpynnxmpxnqyos}rr{pr{pt|sqyps{rtzrq{pt|st{sszprypw}ut{rs{qt|rs}rv}uu{su|su{rx~vzyxwv}tuzsywxwx~wyxx~vy}wx}vx~wt{r|z~|y~w|z{yz~w}{|z|zy~w~}{y~|}w}v}zxzx{y|{~|~||z||}}{~||}}|~}~~~}|z}z}z}{}}{~~}}{|}}{}{||z|y}}{}{z}{{y|{|z~||{{y}xvzx}~ywzy~xv}{yxyw}zxzx~xvyw~xv~xv}wuxw~xv~wvxv{us|tsyw{tr~wv{tr{ts|ts}vuzsq~wv|ut|ts{sq~vu}srzqo|ts|tszqp|ttypoxqoyonvnl{rpzqpzqpyomxnmxnmynmynmynmyonxnmxnlznmuLKsvuwzyxxy{|zx||}~}}~|{~~~~}|{}|{}~{~||{zy|{~~|{~{~~}~||{~{{||y{{}{xxxtsvNwMmwllwkq{pnylmxlmvkp{omvlpzonymmxlpyop{ot}sqzou~tt|roynnwls|rnult}srzps{qt{rrzqu~tv|us|qv|tu}ss{qv|uv|trzpu|sxvw~vu}tv}ty~wywx~vv}tw~vx~vx~vv|t{yv|t|z|z|zy}w{yzx{y{y~|zxzx~|yww|tzwy~w|z{y~|}~||z}||}}~|}}|}~}|~{}~~~{~}~~|~~}{~~{}~~|z~|{x|z~zx{y{y}{}||y~}~}{}}~zx{y~yw}|{yx~|}{~|~yw|z{y}xv|z}zxzx}wu|vtzyxwyw{us~wu}vt|usxv~xw|vtzsq|tr}wv~wvyrp}vt~vu}us{sq{sr{sr~utzqoyqo{rqyqowom}vtyom{qp|srynmxomwljwlk|rqxnlxnl{sqzqpxnlwlktigxnmvjivkjqMLuwqxxy}uz{z}y}}}~~~~~~}}}}~|z|}|{|z~}}}z}|z}z|~~z{{~~||~~}|}~}~~~}{{{{y{yzx{uwvuOwOjvijvipzolwkoynmwloxmkvipzolvkoxnpyooxms|rp{oq{ps{rqzou~tszqt}sqzor{qu|tu{spynv~uu}tt{rszqt|su|st{rszrt{ru}sszqt{rv|tv}uy~wt{rx~vx~wt|sw~uyw{yy~ww|vw}uv}u{yz~x~}}{z~xzx|z|zz~x{y|z|z~|{xzx~}z}z}}}{~~|}~|~~|~~}|}|~}z~|~~}~}~||~{x~}}}}}{~}}|~{y~|}}~{}{}{}{}{|z|z~}}|z}{~|}{{y|z|{~xv|wu~yv|{~yv|wu|z|wu|wu~xvyx|us~vuzyztq|zxw}wu}wuztrzx}wu}vu~xv|ts|usyw|trypn|us|ts}ts|sq|rq}us|ts}vu}tsyqownk{rpzqp{sqxnm{rqxnmxonzpoxomzonxomyonwmkznlxkjzqpxnmwlktPOsyyxyzyz{|{{~~}~~~}}~|~~z|~~x{}}~~}||}||~}z{~|}~z}~~~}yzz{xxwvwxyvvNvMmwllvkoynlwknxmmvlkwjoynpzonxmmylmvlpyoszqoxmnxmq{pmwlq{pr{pt|rr{qt{su}ss{rszqrxprzqx~vu}srypv|tt{sv}txwzxy~wxvv~uu|sy~wyww~ut{rw}ux}vzx|{v|tx}v|zv}uxvxwx~vzyzx{yzx|zzx}zx{y}z~|}}{}z~|}~|}{}z~{}{~|}~}~}}~{}}}}z}}~~~|~}z}~}}}~}~{|}}{~|}{}~}{yw|z~{|z}{}|z|z}{x|yzx}{~xv{y}yv~|~xv~xvzxzy~ywyw~xw}{zxzx~xvywzyyx}wuzuswu|tryx}vtxwytrxw|us}vtvu{trzsq{usyqozsqwvzrq{sq{tq~ts{qpwom}sqxomxpnzpo}srzsqzpoxomwmlxonvlkxnlwnlyonynm{qpxonzqpwPOwtvxxy{y}|}y|}|||}}~|}~}~|}z}{{||||{~}{{~|||}|~{|~|~~{~||~}{~}|~}}~~}}}y|w{{zxywxzvNvMnxmqzpozmpznpzooynnxmpxomwkoynnxmqzpq{ppyns|qpzooznoynqzonvls{ru}tv~ts|qt}su}tt{st{su}tr|qs}ruzsuzst{sv}tw~vu}st}sxww~vu{s{zv~tywv}tw}ux~vx~wy~wv|t|yxvw~uzx|zyx}{x}v|{|z}{|z~|}{zx~|}|z~|~}|y}~||{~|~|~|~~||}~~||~~}~~}}|~|}~~|z||~~~{|~||z}~|}{~~|~}}~}xu}||z}}yw~yw|z{y}{{y}{}xvzxyw|zxv~xw}vt{vtzsqzxyx}wu~ywztr}wv~xwxw{zwuxwwu}vt~wv~vu~xw~vt|us|us}ut}us{sqzsq{rp{qp~vt}us{sr}sr{qo{rpxpnxnlwonxljwmkvljzpoyon{qpwmlvkjwlkxnlvkivlkukjujiuONsvyxwvux{z{y|}}~~|}z~~~}~}||}zy~}z{{z}~}}||~}{~}~||}}}~}~}~~|~|}|z||yyxvuuuNtMnwmnxmp{olvknymivhmxkmxlpzor{qkvjqypr{pqzppynoxnt|soynqypmvlr{qqzpt|sqxos{rv}trzps{rrypt}ss{qszqu{su|tu{st|rt{ruzsryqw~tvttyqv}tw}vv|tyww}u{yyvy~wx~vzxw|u{yy~ww|uzyyw}}}{y~w{~x{y~||z}{|}{y|z~}~|~|~~}}}~{~~~|}~~~}~{~~~~||}}|}{}{}{}{y{y}z~zx}{~{x~|~}|zzy~|}{}{}{y{usyw|wu}|{|z{y~zxzx{vtzy~xv}wu{us}vuyw~wu~wv}xv}vt~yw{us~vuzx|ut{tr{tr~wu{trwuzsqyqp|us}ts~wuxpn{rq}ut{sqyqoyomwnm{qp{rqxonyqo}tsyon|srzqoypnwmkypnyom{rqwmkxom{poukjyonxnmsMLxww{wwzwz{{z{z{|}~|~~~}~~~}}}}}~}}||~||||yy|{~~|}|}}}||}|~~~}}|z~z||zxwxxwxtuPxOoxniuhlwknxmnwljvhnxloynp{nnzmoxnq{ppxopynoxnoxmryprzppzoqxnnxmq{ps|rrypr{qpyot{ru}ttzqt|rpxnt}rs{qt|ru{su}tt|sw}uv~uw}ux~vywzxw~uv|tv{tv|tu}s|z{z{yx}vxvy~wzx~}{yyxzy|z{y}y}wyx{~xyw{y~|}||z~{}~{}~}z~|}~|zx~~|~{y}~~~}}~}~}~~|}~~|~~||}z}{~~||{}~~|z|z|y~z}{|z}~|~|}{{y~}zxyxyw}wv~yw|wu}wu~xw|{{yyx|z~wu~wv}wu|us~}~wu~wuyx}wv|uszx|vu}ts|ut}vu}ut{tsww{tr{tr|tr{sq{rq|trzrp{rqypoypnzqozrq|rqyomypnzqpxom{rpzpoyonyomynmynmynlvkkvkjvkiwmltjivNNwwwvv{wywzw|{z}{{|~~~~}}}~~|}~}}~~}{{~~w{z~|{}z~||~}|}}{|~|~}}~}|}}x{xyyzvwuswOuNnymlwklvkqypmylmxlnzmmwlmwlpynoynpxnqyolvjmwlpyns|rs{qpyns|rt|sowns{qszrt|rv}tszqqyot{srzpw~uu}su}tu|tw~urzpt|ryxv}tyxv}uv}uv|tywt{rw}uw{tywx~vx}vw}tywx~vw{t|zzy}{}{y~v{y{y~yw{y~|zx|z}{}|zz~x|}{}{}}{~|~}z}{~|~}z|~{~~}{|~~~{~}}z~}~|~|}z~|z|z~|~||}{~~{}{yw{y|z}{|z|z{y}|z}xv|zyx{vt~|~yw{z~xv{yyw{y~xv|z~yv}wu{ur~zx}wu~wuzxyx~xv~vuwu{sr|ts|us}wv}tryqpwu|tr}wu|tr|sr|sr|rqzqozrqzqo{rpzqozqo}ts|sr{poxon{sr{qpxqovmkyonvmk}srzqoyonwlkvljxnmvRRvtvvvzyzyy{}}~|{~|~|~}{|~}~{|~}~|||}|~y{~}{{}{}~}x|~}}}||}~~~~~|y{}|}x{{zzwvvvrSxQpynoymqzonxmnxliugpzomwlrzqlvjmxloxnmwlownqzoqyopznowmrzqt|rpzor{qt{rs}rqzpt|ss{rr|pt{rs{rt{rv~tt{sxww~vw~uxvx~vx~vv~us{qywzxw}uv}tx~vy~ww}u{zzx{yw|ux}u|z{z{z|zy~wzy{y|y~|z~|{y|z|z{z}{~{{y~|~|~{|z|zw}~}~~{}}~~}|~}~~~~{|~}}~}|~}{~}}~{x~|~{}~|}|y}zx}{~|}|z}{}|~|{y}z}{{yzxyv}xv{xywzx{yzx|vtywzx{tryx~xwxv~wv}vt~wvxwywxv|tsxvyxzsq|us|us|us{sq}utyrp|sq|sq~wuyrqzqp{rqyqozpo{rp|sqxomzrpzqpwmlzpoypnwmkzqpwomzon{rpujiynmxljvkixnmyonxmlwQQuuxwwvyx~z}}}~~~~}~~~~~}|}}}z|}{y~z}||~|}||x{~xzz|~}~~}}~}~|~~|~}|~}yyz{ywyvzxvvuNuMoznmxlr{qkvioymmwkoymnymnymr|qv}uoxnoynpynnylpyoqypoymr|qs|qoyns{rt}snwmv~us{rt}su|srzqr|pv}tv|tqyow~uxvv}tszqv~uwuxvt|st{rxvw~uyxzyu{sx~vx}vyx|yzxyww~uzxxwzx|z|{{y{x|z}{|z{y{y|z}{}z}z~|{x}|y~||z}{|}{|~{~{}~{}x|}}{}~~|}}}~|~}{{~~}}z|y}~|y{y~||z}{|z}|z~|~|{y{z~{y{x|z{x~yv{y~yw}xv|{{y}{zxyw~xv~wuxwyw~wu}wu~wuzxxwxw}wv}vtwu}vuztr~wv~vu|tsypo~vu~wv|trzsqzrp|tszrp|ts|tsxpnzpo{rq{qovkjzqozqp|trwpn{rpxomxomynmzpowmkvjixnlwkjujiwlkxmlwRQsuxxyzvxvy}}}|~{~{~~~~|}}|~~|}}y~}{}y}~}{}yx|}}~{}~y|~~}~}{}}{~|}}~|~||||xx{xxtzxvwuvMtLmyloymmwlpyopzooynoznr|qpznpyopynpynqzpoznpxnpyoq{poymowmoxmoxmqzprzpt}spyor|qs{rw~ut}sw~vu|su}tv~uu}sszqv~tu|sw~uwvu|sw}vwvv}tyxzxx~vx~vw~uxvw~vy}vzx|zu{s{yz~w{y}{}z{yx|vy~w|z~|yxzy}|~{}{|z|z}z~|}{x~||}~|~{}z~}{~y|}~~{~~{~|~{}}}}}~}~~}}}|z~|}~||~}{}|y}}yw|z|z}{~}{y{y|vt}{|z~yw{y|wu{y{y|zxwyw~yw{y}wuywxvyw|sr}vtysq~xw{tr~wu}vt}us}vt|us}wvyxxrp{tr}vt|us~wuyqo|us|tr{po}us{ut}vu{rqzqo{rqzqo{rqzqozqo{sr{rpypnukj|rqxnmynmypoxnlwnmzqowmkvlkwmkuNMtuxwxyyz{{||z}|}}~~}}}~~}}}{|{z}~~z{y||zyy{||}~~|{}~~|~}~~~|~}~}~|{}}}{|}{y{yyvvwxyxvOvNnxmmwlq{pmukoznkvjp{oq{poxnoxnmwkpzonxlqzot|rrzpoxmqzou|sr{qt}sr{qrzps{rt|sv~uu}toyns|ru}srzqu|su|st|ss{qu|sv}uv}tv|tw~vx~vxwx~vw~uv|tw}uw}uy~wyww|uy~w|z}{}|x~v{z|zy~w}zy~ww}u}||z}|zzx|y|y}{|z~{}~|}|z}z~w~{~|}z~x}~~~~~~}~|~~~~|~~{~~}~}{|}{|y}z~}z}{|z|~~|y|y}{}{}{~|~zwzy~|{y~|{yyw{x~zx~yw{yzx|y|wuywxwyw}xu}wu~wuzxzx}wu}wv|utyx~wuxwyx}vt}wu{us}tr{sqzsrvt|ts~vuxpo{sqyqo|tr}tszrpzsq~ts|srtkiyomxpnypn|rpwljxnlxnlynmypozonzonzpo|tryomxnlwlkwjixljxmlujhwQPwwwvuwy{z|yz|~}|}~~~~{~~{~~|}||||z||{{|z|}z||z|~{}|~||x}}}}}~~~||~~}~}~~~{|}{wy}zywxxuxsQvPmxlkuinwlpyoiuhnxmnxmoynmvlnwmpzomxloxmq{ppyooynpznq{poxmr{ps{qqzpt}st|sqzoszqszqwvv~ut|rt|rs}qszqszqs{rw~vv|tr{qt|rzxw~uv|tx~vwvv}tywzxv}uy~wtzrw|ut{r~}xwv}tzxy~vyw}{{yyv}yw|zzxyxy~w{z{y~{{y~}{}{~|}}z}{}~|}{}~~}z~~}}z~|~}~}~~}}~}~~~}~~|}|~|~|~||~~|~}{}{}{x}~|}~|}}z~||z{y|yyw|y{z|z|z|z|zyx~|~ywywzxyw{yyx|us~wu{tr{zxwyw~xv|tsywzy~vu~wu}wu|tr}ut}ut{ts|ts{tszrpyqpzqoxqo}us|rq}tsypo}trzpnyrpyomxomypnyqozqp|sr{qoypnzpnzqowmlzonxnmvmlvkjyomxmlyonwSRuuwyyyvyzy||}}|~}z~{~~~~~~~~~|~z{}{}{{y|z}}{}|}}~||{~|}z}}}}|~~~{{||{zw{ywvyuyxuuMtLpynkwjlxklvjoynnympzonymmwlozns}rnymr{qqzorzqmxlqzos}rr{pr{qq{pr{pt|rs{rv~us}rv~tt{rszrrzpt|sszrw}vw}urzpvuyxv}txvywzxtzr{yu|s{y{yw{tx~v|{y}wywzxyxz~x~}|zy~wywy~w|{zx~|w}v}|zx}v~||zy}v~}}z~w~|}|~|~{y{y~}z~~~{~}~|~}}}~~~}}}~~}}~~~}}~~}z~{}~~{~{~|~||z|z{y}{}|z|z{y~zy}yw}{|wu}|~yw{xzx}xv{us|zxv}wu}wu|uszx~wu~yvywzx}ts~wuxvyw~xv{sr|us}wu~wu}vt}vt~vu|ut{sr{rq|ts|tr{tr}ut{srzrp|uszqozqpzrpypoypn{pozpo{qpzqpxomyonxnmyqpzqp{qqwlkxmlujivnlwlkwlkxQPuvvwwwwzx{~zx~}~~~~|~~}~~~|}{~{}|{{|}{|~}~~}z{~{y|}}}{}{~}}~~~}z~{~~~}|~~|||}xyxzvwuyxysJuIlvlnxmmwkoynlwlmxloznq{ooynpynnxmpznoynnyloxmkvjnwmowmozmr{pqzorypqzoqyot|su~su}svuqzpv}tt}rv}uu}svuu}tv~uw~vt|sw~uu|tsypw}uxvuzsu}sx~vzxzxy~wv{t{yzxyww}uyxy}w|z|zyx{yzx}~|zx~||zzx|y|y}{y~|}{|z{y}{~~~{}~~{|z}~{~|~||~~~}{~~}~}y|~~|}~{~}}}~|~}~~|z}z|z~|y{y~{}{{z}{}{y~wu|wt}{}zx|z~zx}wu{y{yxv~wuxvyw~xv~wt~wu|vt}vtwvwv{urzsr~vu}vt|vt}us~wv}wu~xv}us}us{sqxv{sr~vu{sq}vt{tr}vtzqoxon}sr|sryonzpnyqpxonzpotki{qoxnmxmkzqpwnmzrqyomzpozqpxlkxnlwmlxnluPOwvwxwx{xv{w{|}~}}{~~}~}|{~~~}}~|z~}}||{|||~|y{{|~~z|}}~}~yz}}|y{}~~~}~~z~|{{|z|x{yvwtwuxKwKmwkoynqyop{omvlmxlr{qkvir{qoymr{pnwmqxorzqnwmr{qmwlrzpr|qr|qrzprzpr{ppynt{ss{rxwt|rt|su}sv}us{qrypu|tu}tw~uxwywv}txvu|syxxwt{rzyv}tx~vx}vxvv|tx~v{yyw}{v|ty~w{yywyw|zzx{y|z}{|{~|~|{y|z}{~|}z~|z{x}}{~}}~{}z}{y}~|}}~~~~~|}}|~~~||~~~{x}{~}|~}~|~}z}||z}z~}}{~||z~|z}{{x~|}{}|y}}|}xvyxzw{z}{|zzxzx}xv{xzxxvzx}vt~ywzxyw{ywuzx~wu~wu}vt~vu}ut~wuxwzsq}us|tryqo~wuytqyqozqp|usyro}tr{qp|sr}tr}vt{ts{rqzpoyonzqoyqoxnmyonxmlzrpxpnwljzonwmkulkyonwmkwlkwmkuPOrwuuzyv{y{z|y~}|||~~~~~~}}}~|~}~~{||{|~z|{zyw|}|}|}zy}}~{~~}~~|}{|}~|}{~z|{{{{x|ywvuvwwytLuKkuilvjjuinympyokvjoynoxnjvinwmpzopznpznpynq{ppyoqzpozmoxns|qv~uv~tpxow}vnwmt}sr{qu|su}sqyow~uv~tw~uv}trypv}tw~uw~urzpwvzxw~uu|tt|sw~vv}u|zw}uyw|zywzx|{|z}|zzx|zzxyxzxz~x|zywx}u{x}{{yzx~|}z}}~|}{y{y|z||y~~~|~~}z}~~~{~~~}~z~~~|}|y}~}~~~}{~~~zw}|~{}{}z}~|}~|}}{{y|{}}{|z|yzx{y|z{y|z~ywzx~zw~ywyx|zzxyw~yw~xuzx|us~yw}vuyw}ut}vt~vt}wu}vt{ts}vt~xv~vu{rp}vt~vu~xv~vt|sq}us~vuzqp{trzpnypnzpoxpn{poypo|ts{sr|rq{qpyqozqpvnlwmlyonwmlvkjypn{qpxnmypoyomypnxnmzqowlkvPOvuwwyyx{y{|}x~|{~}~~}}~|~}}}|}|}}~|z{~y|}{y{{}~}~|~{~}~{}}~x|}}}~~~~}}|||}{z}|zxxxxwtvsNuMmvkoxmmxlnxmmwlnwmpyolwkoznnymoympyoqzor{qoyns|qmxlqzopznqyot}ss{qt{sr{pt}sqzprzqt|sw}ut{ss{roxmszqrzpw~us{qt{ru}tv}uv}tu|sywx}wx~wv}tt{r{y{yx~wywx~wzxzxzxzxzxzxw~u}{{y{yw}u}{~|~}{|z|~|}zz~x}{{y~|~~|~{~~|~|~{}~}~~}}~~~~}~}~~||~}}~~|~~|~~~}{~{~{}{~|~{~~|~{}}z|yxv{x||y|{|z|z}{~|~zw{y{y|xvzx~zwzw|z~}ywyxywzw}~xv~ywywyx}||us}xv~xv}wu|ut~wv~wv}vu~vt}wu}vt}xv~wu}us~xv~wuyrp|ts{sq|sr|tr~vu|tr}us|sq|srxnm|srzpo|rq|sr|rqzpoxonxonwnmzqownm|qpypnvjiyonzpovkjxmlxonvlktPOvtwvvwu{zx|y{|x{{~}~~}|}{|}~}~|~{~}~y}~|z{||z}y}~|}}|{y||{~}~~}~}~}~}~|~}|{{{y{zywxyuvuuvNuMlukmwklxkq{pnymmwloynoymqyoq{pqzppyos{rqzpr{pr|qoympynoyns|qr{qs{ru}spyos|qqyos|rs{qu{rrzqv}ts|qs{qt}sszqxws{qu|svux}vw~us{qu|sx~vw|uv|sywx~vyww}uw}u{yyx{y{yywy~v~||zzxyw{yxv{y{y~}{{y|zzx}{|~|~|{x}{~{~{}}~|}}z}}~~|~~{~||~~||~|~}~}{~{~}~~~{~{~~{~{}{}zzx}z}{}{}|~|{yzx{yzw|zyw{y}xv~zwyx}|yw|z}wu}wvzyxvyx|tr{y~wuyx|tr~wu{vt|vuxvxv~ut}ut~vu{sq|tr}ut|vt{us|tr|sq|srzqoxqoypn|usyrpyonypnypo|rqzpozpownl{rp{sqyonwmlynm{rqyonyonxlkvljylkwnmyomvmlzQQsxtvvzzw{|zz}}y|~|~}}~~}{}~|~}}|}x~}}{~{~{|z{x~~|~~z|~{{}~}}{~}~~~~~~~~|z{zxzyy{xzzxxwxuuPwOpyojuioynnxlkwjqzonwmpzomvkmwkpyooynv}tpynr{pqyonylr{qr{pt|rq{powmqzot{rt|rrypx~vpzou}st|rrypu}trzpr|qu}sw}uu}su{sw}vw~vt|r|zs{rw}uxww~vwuy~wyw{yzxyw|zv|syw}{{yw~v{z|zw}ux~v}zzxzx|z}{|y|z|z{y|z~||z~{y|y|z~{~x}z}}}{~|}~~{}~|}~|}~}~|~}}~}~|}{~}~{|y|z~|~~|}}}{|zzx|y{y}~|}~||z~|~xw}zzx~yw}{zx~|}{|z}{{y|{zxxvzw|ts{yzy{usyx{z}xv{sqxw}vu|ts|wu}vt|us~vuzrp}uszrp}vt}vu}vu|us}vu~wvvuyrpyqp|us~ut{qp{rqxom|sqxnmzqo|rqypoypo{rpxomvlkyon{rpynmvljzqpvljvmkvljvlkznmwljsONtvzuyxyvx{wz{}|}|~}}~|}|}}~}|~|~{}~}||}}~~zz{{|{}~}}}{~|}}y{{{}|~}}}~~~~}~~~~}|~~{z{||{z|zvyvyxystuNvNqzpmwlkvjlvknxlp{onyls|rnwmjuirzpnxmt{rozns|rpynq{pryppyoownqzou~tt}sqyov}urzqs{qt~sr{qu|su}tw~vv}tt|rxvv~uzyu}tv}tw~uv~tw}uv}tv}tw~uzxw~uv|tv|tzxw~vx~vy~wy~w}yww~u~|zx|yy~w{y|z{y}{}{{y{xzx|z{x}{y|z|y}}|{}~}{}{z~w}{}{~x}~{|~}}{}}}~}|}}|}~|~}|~{}~}~}|z~|}|y~zx~{}|~zx~{{y}|}{~|~zw{y~yw|y{y~ywzx}xv}vt{us|us~xv|wu}xv}|yx}xv}wv}wuwv~vtzyxv}ut~wu~wu}vu}vu|sqxw}ut{sq}ut|srzqp{rqzrq{rq{rpzrpypo|sr|rpxomxomzqpzpo|sr|rqzrp}trynmypowmkyonwnmvmlypnwlkxnmwmktigwLLutvvwxx{y|zz{}}z{}}}~~~~}z~z~~z~z|~{|~{y{|z{}y|{~}z|}||~}~{}}~}{~}|}}}~}~}}~|}~|{xyzzzyxxwtxsNtMlvjlvjlxkoynkvilvkqzpiugpzooynnxmlwkoynnxmqyoozmoxmmwlqzos{rs{qs{qt{sq{pt}ss{qt|rt|rw~uu{sv}ut{rv~ts{qv~uu}sw~uu|rzyv|sxwwuv|sw~uv|twvu|sw}uxvw~uzxxv|z|zx~vyw{xw{t}}{~||z{y}z{y}{|yy~w{z~|y~||{y~|}~|}}|z}{}}||~|}~|~|}~}~~~}~|}}}}z}}}|}}|~|}{y~{|}~}}|z|z}|z~{x}{y}{}{|z}z~|~ywzx~yw}{~|~xwyw}wu}vu}{}vt}vuzwzx}xu~xv{yxvzts|vt{tr}wv{us}vt|us~wuzur~xv~wv}vt~vtyqp|tr~wu|ut}vtzrp|tr|tsypo}ts{rqxnmyonzpowom{qp|rq{rq{qoxomzqpynlvmk{poynmwmlxlkwnlxmlynmwlkvNLuvqxtxywzy|z{|~~}~~}~~~}~}~}~~~~}~}|{}~}y~y{|zzzz||{||{xy|zwz}|~}}}~~|}}~}~~~{}~~~}||z{z|}|zyzyxxtuwxtwqOuNnxlnwlmwkmwknwlpyooynmxlnzmnwlnwllvkoynqzppynpynpynpxnt{spyot{roxnoyns~rqzprzps|roymt|rr{qv}tu}tt|st{rs{qywu|tzyw~ut|rv~tw|ux~vu|sx~vxvw~ux~wu}sxvyww|uywywy~wy~xzyzx{yz~xyw{xx}v|yzx|z~{}{|z|z}|y}}{~|}{zx}{~~~}~|y|z}}|~||~~~}{}~~~z~~~~~~~|}~}}}~~~{|~}zw~{}{}~{|~}{y~|}z~~|}{{y}{~yw~~zw|z}{~wv}xu|z{yzxzxyx{yzxzx}{|z}xv~wu|wuyx}xw|zxvyx|tr}vt~wu|tr{vs{y|ts~wu|us~wu{sq~xv{sq|ut|us{trzqp~wvyqo|ut|sr}tsxnlypn{rqzqpxomypoxnmxmlvmk|ts{srynmzrpynmxnlvkjwnmyonwnlzpovihynmxQQxvvsxwxzx{{{{y~|~~~~|~}}|{|}~y~~}|~~{}{}{{||zz}{|~|z{}}}{|~|}}}~~~|~z|zz|zwxzxwxvuPwOlwkkwjnxmmxlnymnwlmwloynrzpoynowmoympyor{qoxnqzonwmrzpr|qs{roynt}rs|roxmv~tr{qpyos{rs|qqypu}twvr|pnwlw}uv~tt{rx~vzxv|tywxwv|sxvt{rt{rv}tzxwuzxxw{zywwv}{v|t{yy~w|zzxzx{y|zzx|z{y}zy~w|z|y}|z~~||z}z~}{}{}|y|}z~|}~|~||}}~~|~{}~~~}}~~~~~|}~|~}}|}}}}~|~||z|y}}{}}}z{y}{}z|z~|{y}{|y}~zx~{|zzy|wu}{}wt|{zx|zzy{x|z~}~xvxv{yxvyw}wu}vt|vtywyxzx~xvyw~vu~vu~wvzrpwv{tr{rp{srzsq}vuzsq{sqzrpzrp}uszrp{rq|sqypoypoyqo|srxom{rpxmlzpo{qpynmvlj{poynmwnmvljvlkvjixnmyonyomxnmtPOvuuvwxwuwxz{}}}~}}~}}~~{{}{|{}~~}||~{|~}}{||}y~|{z||~{}}|}z}}}}||~~~~~}~~~|}~~}}|~y{|zyzyxwxwxwsuNuMlwknwlmxlkvjmymnwms}rmwkmwllvknxlnvlq{ooxmoznr{qpxnrzpnympxnoynqzorzprzpr{pr{qs{rqyos}rwvu}tw~vt|ru|sv}tv~ut{rx~wwvt|rw}vw}uv{tzxw~uyww}uyxzxxv{y{yu|sx~vx~vx~v{y{y}{z~xzwx}vzy}{}{}~|zx}{zx{y|yzw}}}z|y~{{y|{y|z~|}~{}|y}~|~~}|~~~||}~z|~~{|~}~{|}z~~~{||}}}~~|}~|}z}}{}z|~{~||y}{zx}z~}{{x~}|y}}{}{}{~zw{yyxyxxv~xvzx}z~|{y}{{y}yw~yw|z{y}wuzx~xvzx}wu~yw~wuzy{tr}vt~wu~xv~wu}wu{rq}vtxwxw|tryw|us{sq{sq|srzroypn{rq|sqzqp{rqxpn|sq{qpypnypnzqozpoypnwlkwljyqpypownlwmkxmlzqpwnlxonwmlxnmvmkuQOvwxxvwxwwy}x}|}z|}~~}}~}~z~}~}y}|~~}}}z}w|z{y}{{}z|yxz|}||}y{}z~}~~|}{~|}~~~}{~~~~}~}~~~}~{yzzzxyyvwtwsKvJmvkjuimwloxmmwloxnr{qnxmoxnq{pmwkoxmmwlqyooxnt|soxnmwlpzooynmwlqzopznp{os{qwvt}rr{pt{ss{rt{rqypv|tqxou}tx~vu}st{rt{ru|st{rw}ux~vyxv|sv}t{yxvzxx}uzxzxzxyww}uz~wzxy~w|z|z{yw|uxv~{zx~|{z}{|z~|}{z~w~|}}{}{}~||y}~|}|z|}z~{~~~~{}||}~{|~~~~~}|~~}}~|}|}~}|}~{~|~|z|~~}~{~|}{~zw}|}z}{{x||y~yw}{}|zx}|~yw}yv{yyx~{|yzx~xv|z~yw|{yw}xv~yv}vt~yv~wuzy}xv|wuywywzx}xu}vt~vt}vu~wv}vt~vu}ut}vu|srxw|ts~xv|us|tr{tr{tr{rqypn|tr{rq{sq|sr{rqyom}sqzpoyomzpozqoyrpypowmkwmk{sq{rqujhxnlxmlvljyomxnmukjxnmwnlrNMrwvxwwzzw{y|z|{wy|{}{~~~~}~||~}}|}~z{}}~z{}{||{{{}|z|}zy|zyy|}|{z~~}}{||{~|}~~~}|~{|}|{}zywvxvzwuvsNvMkuinxlmylmwloznnwmmwkkuilwkmwkoynmxlmyloymoynnxmoxnr{qr{qr{prypoxmqyopyor{pszqrzpv}ut{rt|su~tv}trzpv}ttzrt{rqyou}tu~tv}tyxzxw}vw}ux~vv|txwu|tszqu|sy~w|y{yv|sy~ww~u}{yx{x{y{x~}z~xx}vz}w~}z|z|z{y~|{~yz~w{y|{|y|~}|z|z~}{|z~}}|z{y~|~{}|z~{}z}}~~~}~}|}}~~}|~~~}~|~|}~}}{}{}{x~~{{y}zw}{}}}{y~|}}{~yw}{~}{}z~{|z~yw|wtzxzx{yyw{y{tr{yyw~xw}wu|vtyw{y{usxw}xvywzx|tr{tr~wuxv|uszrp|ut{tr}vu}us|ts{sq{tr}vu~utysqwuxonzrp|trwml}tryqo{rqzrpypoypnxnlyqo|trzon|sr{rqzqozpoxpowjixmlulkujiwnlwmlvPOvvxvwtvvz}yyy|{~}}~}~~~}~}}}~|}}|}y|||~{{x{{}}{xz{{y{}}{||}{}~|zz}}z|~{|}|}}~~|~~}~~~~~~}~|}~}~|z|zz{yyvvuuuvwLvKmxlnxmlvjlwkpyoqyomvloymoynoxnnxloynpxooympynrzps|rr{qu~tlwjs|rr{qs|rqxot{rs{qt~sqypqxoszqv~uqzpv}txww~uu|tu|sw~ut|sv}ut{rt{rywv|tv}tw~uyww}tw}uy~wu{rywx~vw~vx~wyw~|zy{yx}v{z{yzx~|z~wx~v}|z{yzxzxyw~|~|}{~}{|y~}|~|z~w~{}}}y}v~|z~||}}~||}||~~}}{|~~~}~z~|~~|}{}}~{~{~}}}~}}z|z|z|y~|{y~|zyw|z}{|z|zztryw}{ywzxzx|z~|~zw{z|{zxyw~yvxv~xvzx|utzxxwyx~xv~xv{z}wtzus{urywyw}wuzsq}vt}vt~wv~xv~xvztszrp~xv~vt{rp{sq|tr~vt{srzqoxom{sr{tr|rqxpnzqp{rpzqpwlj{rq{rpwkjzpoxmmxomzqpyonxnlvmlzqovmkwmltRQrvtwvvzxzz}y}{|{~}~~~}}~|~~{}||~~|~~}{||~}{|}}|}}{zz{|zx}{|||z|~y~|||z|y{}}}~{}{}~}{}~}~}}|~|}|~|}z|wz|yzyzxuuuNuNjuinxmnwmithr{pjwinxlnxlnylp{ot|spyooxmmwlnxmmwlr{qqzps|rmwkr|qoznr{qpyns|rr{pu|sq{pryprzpu|rx~vu|sw~ut|ss{ru}tw}uszqs{qu}ss{qu}tt|sw|tx~vw}uv|ty~wx~u|zu|tzxw|tzxw}uxvy~vw|tyw~|y~w|zx~v}||z{yz~wz~x}{{yzx|z}|y|z}|}}}z}{|~{}}{}~}z|~{~|}|}}~{~~~}}}~~}~~~}~|~~~z~~~~||~~{~|{~{}z}z}{}{|}~{x~|}~|y~}{~zw~{}|~zx~xv}{x~yw{xzx|z{yzxzxzx~xv{y~xv{y{yxv|xvxwzx~yw{y}xv}vt}wv~vt}vt{z{sr{rq|vt|vt}ut|ts{trzsq{trztr{sq}wvzsqutzpn{sr~ut}us}trxpozrqzpo{qo|rq{sr{tr{rqzrqvnlyom|squkjxnmzpoynmzpoynmypoypnulkyonujixonsNMrutxuxxy|xzzx}y}|{z~~~}~~}~|~{~{||{|y}|}{{{|{{}|z|z{xz{y}|{zzy{||}}{{|}|~}~~}~~}|}~|}||{~|{xzyywwvtwwwPwOkuikujlwkmwlnylkvjoznowmmwkr{qoynoxnpxnqzor{qrzqrzpt}sr{qoynryqr{ppynqzprypqyos}rpyor{qu|ts{qx~wt{rszqt|rpxnu|ttzrzyrxou|sw}uxvs{qyxx~vwvzxw}v|zv|ty~wz~xw~uzxx}vx|u~|t{rzxyw|z~|~|}{x}u|z{x}|z{y~~||zy~w{y|y{~x}~||z~|}{}|~||z~|}|z~~|~}|~}{}~|z|~~~~~~~}}~}~~}}~}}}}}||}}{}~{x~{}{x~{~|zzx~||z}{y|z{x}z~~||z}z{y{y{z}{}{{y~yw}{yw{vs|us|{}wu}xv~xvzx}xv~xv}vt}vu{us~wu|usysq}us|vs}utyw|vt|tr~wu}utzrp~vu{sr|vt}vu~wuzro|trxomzsq|tszpozqpxom{rq{po{rpynmzonypo{sqzqpxonxnmwmlwmlzqoyonwlkvlkwnmzqouhftNMvvwtwrxxzxwx{}{}||}}~~~~~~~~{}~}~{||}}{~||z{{|z|||z~}|{}|}}|{z|~{}~{}|z{|y|~~}|{}|}}|~~~z~}}~}}}}{y|y~|yyxyxuyxwuvsJsIpyopyonxmnxmnymnxmoxnkuimxlpzns{qq{pq{poynmxlt}spxnqzopynq{ppxoqzpr{pqzooymqyowuqyprzpu|sv~upwnt{rr{pv|tt|su|st{rv}uu|sxwt|rxvv}tv|tu|su|st{rx}u|zy~wzxu{s{yxvx~vv}tw~uy~wyw~|{y|zywzx{x|z~}}{~{yzx{y~||z|yzx}z|z}y~w~{}z~{}~~{}~}|||z}}~|~~~~}y{~|}|~~|~~{}}|||~~{|}~}|y}}z}|~|z}~{~||y~}}}{{y{x}{zx|z~||z|zzx|xuxw{y{x}{ywzx{vt|z~xv}{}xv|wu|z|vs~xu}vt{yyw}wu|ts{y|vt|vt~yw~vu~wu}wu}vt|tr~vt{sr}uswuzsq|us{rqztr|tr}vtypn{rq}srxqpwomzrp{rqvnlxpoyqoxomwnlzqo|srxmlzqpynlvkiynmwnmxmlypoxonvlkujhwmlxonuPOswpwywxx{z{yxy}|~~}~}}}~}}~|}}|}}|}{}|~||z{{{}~~y|}yz{||zy|z}yz}z}{{~yzy~|}~||}}{|||||}}~~}|}{~y|zzyvxuxvwwMsMmxklxknwmlwjmxkpyooxmoxmmxlpxokvjlvjmwknxmpyos{qt|rpznnxls}rt{rs|ru|spyoszqrzpqzpoxns|qqzorzpqypt|ru|ss|qxwq{pt|su{trypw~uv~tw}uu{sywzxyxw}tw~ux~vv}tw~tw}vw~vw~vywzxy~wy~vyxzxy~vzx~|{zy~wy~wzx{yyw~|}{|zz}w}~|y~w}{|y}{~||~y}{|~|~~|}z~|}}~}~||}|~||}~}~{{}~~~~~~{~~|}~}}~}{}|~~||}~|}~{~|~~|}~{{x~{{y}z~|z}{}|zxu~wu~|}{{y~yw|z~|~|zx}{{y~xwzx~xv}{}}xv|us}wu|vt}vt{vt}wu~wu{ur{us}wtwv}wuwu}yw|sr~vt}vuzrpyqo{tr|us~vtyrpzrpzpn|utzqp|sr}ts|sryonyqn}us{sq{rqyqoyqpzpoypnxomypnukjwomwlkwnlwljyrpwnlwlkwmkthgxmlwRQtsyvxvvw}zy|y~|z}y|{~|}~~||~~~|}~{}{||~|}yz{|zy{z}}y}~{x{yw|{{~~|~}}~}}~~~}}}|}|~~||z|}|}~zyvwzwytxuxvvLtKiuhkvjkuioxnnwmoynoxns|rmwlpynmvkpynoznowmrzpnwloxmoxmoxmrzqnwlszqs{qr|qqyor{qqyou~ts{rt{ru}spxnt|st|sw~uu|sszqv}tv}tu|sv}tu|sy~wx~vu|tzyy~wwvx~vu{su{sx~wyx}|y~vzxv}uywv|t}{xvx~v{y|{zxzx{yzx{y|z{y~||z}z{~x}{}|z{y~{|y}|y}v~|}{}z}z~{}~~z|}z}z}~|~|}~z}}|}~~~~~~~~}}~}~}~}~}~~}z~~}|}~~|}}~~|~||}z|y}|z|yv|y}yv~{|z~{xzw}{zx|z{yzx{y~|zx{x~yw~}~|~ywzx~xw|wu~yw}wuzus}vt~xw|z}vu}wu{y}us{tr}vu~xv|wuyw~wv}vt~xv{tr}vt|ts}vt}wu{sr{sq|uszrpyqoyrpzqo|tr}utzrp|trzsq}tr{sqxqnzrpyqoypoypoxnl|rqwnlwmkzrpxon{rpwlkxomwmlyonwmkzpnxnmvljxmlvNMstsxuwxzzww|zz~{}|}~~}}~}}~~}{x|z|||||}{}{{~~~|}y}|y||xy|}y}|yz{{{z|}{z{|}}z~~z{}|~~}~}}~~~~}~~}}~}~{}~zy|{zyzwzx{vtwtvsLtLnylktjlxkoxmmwkjuilvjmvkmyloxmoynpzorzpt|srzqqzpoxmpzoryqr|pryqs|qs{rr|qpzns|rs{qowns{qrzpv}ut{rw~uszqu|tt{rt{rt|sw}us{rw}uv~uv}uzxpynv~tv|tv|tx}vzy{zzxw}uy~vx}u|zx}uyxx~v}{x}uyx|{zwzx{y{y{z~{|z~||z~{~|}{zw|z~{}}z}~{|z~|}z~~{}}z~~{}{}z}~|~}{~~}~~z}}~~~~}~~}|~}}}z~|~~~{~{}~|}{}||y}~zw~|z}z}{~{~|z~|~|}{~|{z|z{yzx~yw{y{y~yw~zx~zx|z|z~yw{y{wtyw~xvzx{x}wu{y~wu}wu~wu~wvzsr{us~vt}wu|vt}vtyw~vu|vt~xv~vu}vu{us|tr~wvyqo{rq{sq|us{sq}srzsqxon}tszqoyon{sqxmlzsq{tr|srxon{qpzqoypoypownlyomzonwmkxomwljxnmxnmtkixlkxnmvlktjitQQswwxyvzwyy{~z||z||z}}}}~}~}~}}~|~~}}}}}}z}z~zzxyz}zz}|z{{zz{|||z|}{z|z{|z~|}}|}|}z|~}~|~~|}}~|~~}~y~y}yz|x|xzxwwvutqKtJlujnwmmvlkvinymkwjnxllujnymoxnq{pnxlpzop{onxlpxoqzps{rnvloymrzppxnpynt{rszrs{qr{qv|tszqr{qs{qtzru}tr{pw~vt{ru|sqypu{rw}us{ru|tqxow~urypx~vqyou|szyyxx}vszpw~uw~uzxxvyww~ux~vzxzyw}uzww|u|z~{ywzwv|s}{}~||{y~{}{~x~|{y}~|}{}z|}{}}~z}{}~~~}z}{}~}~~|}{}}~}|~}}~~~}~{}}~~~}}~{~~{}z}}|~{}{~{|y{x|z}z~{{y{x~{{y|z~||y|z{x{x~zw|z{y~}zzx}{|z|xu|vt}xu{yywzxyw~yvyx}wtxvzxwu|us}xv}wu~wuzxzsq}vt|ur}vt}ut~xv{srwpn}vuzsqxqoxomzqo{sqzrp{srzqpzrqzrp{srzrpzsq{rq}tszpo{rq|srxon{rqzrpyqozpoyonxomxnlxnlyonvlkwkjynlynmyomvkjvlkuNMuqwsvutwwx{z|{|y}~}~{~}~{}|~~}~~~}~~z}}|~~z||~{}z}z{{x}{|yz{{zzy{x|}|{}{y}~x~}z}}|}|}|}}~~{}}}~~|}z}~}}{~{{yzzy}zxzwwwvwuurLwKnxlmwlnxmmwlnzmoymnxmpzonwlnxmoxnpyoltkqyomwlpyoqzppyooxlszqtzqqzos{rr{pqzpv}us{rv}tnxmv}tpxntzrtzru|sszqryps{qu|sw}ux~wv~uw}uw~vxvv|tu|sxvv}urzpywy~wywywzyv|szxx~vv|ty~wx~w}z}{~{zxy~wz~xz~x~|y~vz~x|z}z{y|y~w{y~|~||z~|}z~||}z}w{y}|z}}~{{x}~~{}}~|~{~{~~~~}~~}~|}z|~~|~}~~|}z}{~}}~|}|y}~~z|||}~||y~~{x}}}{}z}}zzx~{|z~yw~|{x{y}{~xv|z}{{y}{}{{yzx~}~xv{y|us~ywzxyx|y~zw}zw~xvywyw~yw}vt~yv~wv|us~wvyw}vt{ur{us}vt|tr}tr}vt|ts}ut{rp~xv|usyqp}utzrp|tr{rpxpn}tsyqo{rqxpn{rqwom{rpvnmxonvmkxonxnlvmkukj{poyomwlkxpoxmlwom{qpwnlxmlynmvkjtPNtuxuxxuxzxz{z{xzy{|~z~}~~~~~}}~~|{{~~|}}}zz~~yz|{{x|y|z|{||{zz|z||~z}z{}||z{}~|}||}}~}~|}~~~~}~}|{{zxzzw{zxvxutwvtMtLlwjlvknxmirgmvkkujjuhjwiqyopxnmwlpznpyoowmqzoqzoqzppxnqxpnwlrzqpyorzpnxlrzprzprypu|sp{os{rqyou~tqzos{rw}uv~tx~vu|su{rt{rszqrypzxv}tu|tzxu{rv|tyx{ytzqz~wx}vx~vv}txvyw}{w}uxv~|y~w|yy}wx~u}y}v|z}|z|z}{xy}v|z~{|y|y}{}z|}z|y{x}{}~|~}}}|}}~}~~{|}|}~~{~}~~|}~|~{{{~~z}{~~|~~}|~~~{||}~}{~z~}}|~{|y~|}z~}z~zw}{|z{y~{x}{z~{~ywzxzx~yv{y}xu{xxw{x{yzwzx~xv~wuzx~xvyw}xv}wuyw{vszx~xw|vsxwyx{us~wv}us|ts|trzx|vu~vtxv}vt}us}uszrp}wt~vuzsp|ts{sq{srzqp}vt{sq|srzqpzqpzomxon{rqyonzqovmk{qoyqpuljvmkwnlwlkwmlwomvkjwnlvmlwmlvihwPOwwtwsuuwyzu{x}{{}|~{}~~}|~}~z~~~~~~~z}}}|~{}y|{|{{}|z|z{{zz|~y{{|{}|}x{z{~|z{{}z{{y}||{~~z{~{}~~~}z}~z~~}~|}}|}}~~|~~~z{|zywwxvwtuurtQvPjuhmvlkvikvijuimvknwmowmoymoymoynpyomyloymqyoowmrzprzqu|spyou}spynqyot|rpzos{rs{qpznt|rw~vt|rt{rzxrzpu{sw~ut|qr{qu|sr{qu|tw}uw~uu{syx{zx}uyww}vw}ux~vv|tzyy~wx~vy~vx}v{xywy~w|z{yzx|z{yx}uy~w}{{xzw~|zwv|sywzx}x~v|z}{{y~||}z}z~||~{}{z}v~{~||~y~{}}}}~||~y~{~}~{~~}~~~~}y~~}}}~{}}~~~|~|~z}}}{~{}|}~|||z}|y}~|~|}~|z}z~~||y{y|z~|~zw|y}zw~|{xzy}{|z}wu~zwyw}z|wu|wu}vt~yw{zzxzx|vt{y|vs}usyw{yyw~xw~vu|ut}vu|uszsq~wuyqo{sq{sr{sqyqo{sq~wv|ts{sr{sr{qp~wu{sq{srzqp{rqypn{sq{sqwom{qpyqpvnl|rqypnyonxonzpozpnwnlxpnyomvkjtjhynmynmxpovkisPOuvuuvvwz{|z|zyz~~z{||~}~~~|{|}~}~|~|~}{|{}}}|~}}{z||}|w{|z{{y|{y{~{|z||{{|{~}zz|}}~~{}}|~~}|~}|~~}~}}|{}~~~|~z|{|ww{y{uwtvttLsKlvjlujnxmoxnktikvjmxkmwkoxmpynpxolvjoxmoynpyns|qoynnxmqyou|tr{pnxlqzopyot|rqzps|qszqs{rt|rpxmx~vpyos{rr{pu|tv}utzr|zt{ru}tu|sw~uv|tr|qywxww}vzyv~tszqw}vv~uv|tv}t{xv{sx~v{z}{w}uyww~ux~v|yz}w|yzxw|t{z{y|yz~xzx{y}~|{y}z}z|z}z|~{|y}}{~||~|~{~y}|z~~z~}z~{}~~{~~}|~~}~|{}|~~}~|}}~~}|~{}{|~{~~}|}~{~||}~|}z}~~{~{|z}z|y}{zx}~}|z|z{y|z}{}{~|{x{y~yw}{|zyw}|~yw|{}yv|vtzxzxzyzx{y}xv~yw}vt~xw}vtwv{vs~xvyv|sq}wuwqoztr}ts}wuzrqzsq}vt}wu{srwu|tr{sqzrp{tszpn}uszrqwom{sr{srzrp{qpxnlxnm{sr{srvmkwnlypnxnmxmlxnlsihvljyonxnmvmlypoxmlwkkwlkrOOuuvuxxyvxzzz{{y}}|~|~|}}|~~}|}}~~}~|~|{}}{~~~~|{}}}~|~}|z||{yzx|z{x{|w|}~}}|{{{|}{y~~|{}z~}|||||~}|{}~~|~~~}|~}~||}}{y|z|zwxyvvwsuvwsurOuNmwllvjluklvjmwllvkmxlkujmvlmwlrzqpynpxnlxklujmwlpyor{pqzoqyopznv}ts{rt|spzou}srzpu}su}trzpqzorzpt|rpxnu|tqyot|rw}uu{st{ss{qv}tu{su|sw}vw}uw}uywv}tw}uy~ws{rywx}vx~v{yywwv{yw}uywx~vw}u|y}w}u{y|y}{yw~{y~w|y}|y~{~|{x|y}{}z}}{~|{x~{}{|y~|}{}~~{}~{~z}}}}}}~|y~~{}}}|~~|}}}~~~}|~~}}~}}~|y}}}~{||}{}~|y}~|}}}~|~}{|z~|}yv~||z~|}z|z}||z||yzxzx|wu|z}z{x~yv|z{vs~yw~wu~ywyx~ywzxzyzx|wu|xuyx~xv|vsztq|tr}vt{vt|vt}xv{vt~wvyxzrq|vs{us{rp}wu{sr{usztryqo{tr}vt|trzqo|trypnypn{tr{sryrp}utwomyqp{rpwnlzpownlyqowmlwmkzpozqowmkwmlypn{qpvnlxpnukiwnlukjvjitkitOOswvwvyxyxvwwz{|{~y{||~~{|}~}~~~{~~}|~}zz}y}~}{|z~~{|||y~|wx{z}z|yw~z~yx}y|{yx{{}||~~||}|~~~~~~~~}{}~~}|~~~{~~~}~~||zz|}{{yxyvxyvutstsMtLiuhlvkjuikujoymlvkpzokvikuiqypmvkqzpr{ppyonxmnxmoynoynrzqr{pkvjnxlqyou}snwlq{pszqu{sszqqyos{qt|rszqu|st|sryps{qw}ut|su{rywv}tyxw~ux~vw}ut{ry~wv{tw}ux}vv}ux~uv}tx}vy~wzxyww|uv{t}{|zzx{y{x|~yy~wy~w~{y{y}||z~w~|z~w}z|z}{|{x}{~}{}{z~x~~}z}~{~}}}}|}~{~|~{~~~{}~~}|}~}~}}{|~~}|~}~|{{}~z~}}|}{{}z}{~|~{|}|y~{~||z}}z{x~{|z~||y|}{~|{xyw}{}z~|zw{y}wuzw|xvzx|y{yzx|z~xv~wu}wuzx~xvztrzx}wuxwywyw}xv|vt{tr|vt{vsxvyqo}ut{ts~ut}wu|us|vt~vu{tryqo|tswomzrp{us}ts|tr|us~vtyqpwnmypozrp{sqyqpypnzon{rqzrpyonwnlzrqzpnuljzrqyomvmkxnmwnlyqoukixonwlkukjwSRtuuuxuvvvxw{yzyz|z~}}}}}||~}}z|~}||~}|yy~~~z|z~x}|~yz}{}z|}|x||~zy}zw{}xzzy||z~|~{{z|}}z~}~y{~|~|~}}|~~}|~z~|{}|{{||{}~{w{zwyuzuvxwwurQvPowmmvloxnnwmlvjnxmkujnwlkujnxmmvkkvipxnpxnoxmoxmowmszrrzpowmqyou}srzpu~ss|rpxou|su}tpwnszqu~tu}tqxos{rt{su|srzpw}txwszqu|ss|qt{qu|tu|swvu}sw|uu{rxww~uw}vu|rw~vywx~vw}uw{tzxywyw|z}{|zz~x}z{~x|z{xy~w{yy~wyw|z|z|y{yyw}~{}{|y|z|z~{~x}{}{}}z~|}z}|~||~}}z}|~|z|w}|~~~~{~|~~~{~~{}}}|~~z~~}}}~~}{}z~|}~}|}~~}|~}}}z~|y}}{{y~|~{}{|z|z{y~|}{|zw}{~|zzxzx{y{y}z}{{wt~yw~zw{y~yv}wt~yw|z{vs~xvzx}vt{y|us{vt|wuyw|z}vuysp}wv}wu|ts{tr}ut}ut|ut|us}vt{sq|uswomxrpzsr{tryqo{rqxpo{tryqoxqozrqzrpyrqyonxnlvnlwmkzqpypovmkvmlulkumkxpnvmkvmlxomwmlvlkxnluljwnmwmlvSSutuvuvyyzyvxy{z{zzz|}~z{{}~}~~~}~~}~~}}~||||~}|~|}{z|~|}{}||z{{yy{z|x|{{zyvv}z{~z}x{{}~|~z}~{{~~|||~}~|{~|{z}}|~~|~}~~}~~||~~z|~}{z|{{{y{xvvxywwuwtuvKrJlvklvklvjlwklwklwkpyonwmnymoymlwjlvkqypr{pnxlr{qmwkszqoyns{rpynoymqyopynt}srzpt{rqyou}ts{qt{rt{ss{qt{rt{rqyou|tt|su|ss|rzxx~wszqw}ux}vxwwu{yx}vw}ux}vu|sy~wxwv|txv{yy~wy~vx~vy~vv}tzxy~v}{y~wy|vyxx}vy}w}|}{|{~|}{{x}}}}{~}z}z}z|z~{|~|}y|z~}|~~{~{~{~{~{}~~~{~~}~}}{~}}~~~~}}~~}}}~}|}z~{|~}~{~~~}~{{y~~{}}~}~{}{}~{~{}{{y}z~||xu~}{|y|z~zw}z|z|z|z~|zx{zzw|yzw~zw|z~yw|wv{vs}{{z}yv}wu|us}ut|us}wuyxyx{us~xw}us{ts{usxw{tr}wtzts~wv}us{sq~wu}uszsq|ts{sr{us{tr{us}vu|tr|tr}vtzrq|srzrp}uszrpyonxpnzpozrq{qoxomzrpxpnzqozonxnlzqozpnwomwnlxmlzpowlkvlkwomzonujhvSRstuuwwxy{wzzyy~zz|z|{|||~{{~}~|~~~~}~~|~}|~~}}z|~~~}{|~|}{z{}yz}|}{zz{{{yz{x{yz|}x~zzz}{~z{~|~~~|zy||~{|{~}{~|}~}~~}~~}}~~z~~}~~y{y{z{{wzxyxuxutrtMtLkvimwlkvjnxmnxmoynrzplujpxnlxkoynr{qoxnpxnpzopynpzos{qryps{qqzpnxlszrpznv~ut|rrzpownqyov|tt}ru}trzqrzprypv}uw~uu|sw|ux~vs{qu{su|su|tu}tu|tw}us{rx~vu{ru}sxv{yx~wx~vy~wuzsy~wv{sz~w~||zz~w{yx}u}{yy~v}z|y{xz~x~|{yy}vy}v}{y~w{x{y}{~|~|~|~|||z}~|~z}{~|}~|}~~{|~{~{}{|}}}}}~~}~|}}~~~~~{}}||||~}~{~{~}}~{}~}~~{|}z~|}z}zw~{y|y|y}zw}zw}{}{||y~|y~zxzw{y}xv}xv~yw|yzx|y{y}{{y{yyw{z~yvzw{y}wu|zzvtywzsqyw}vtwu{vt~xv|vtyw{uszsqyw{sr|vu~vu{tr{sq|rq{sqyrp|ut{srzsqzsq{qp{sqxonumk|srzqpxnmypnxpnzqpvmk}vtypoxnm|srxnlujiukiwmkxpnwlkxnmukiwmkujisjhxonujirhfuTStvustwvxvux}z|{}}~{|}{}}~~}{}}~~{~~}|}||||||zz~{{z}}w}|}{{{{{|u|}yx|zx{{z{|{y{}{|{}|}~~{~~|~}|~~~~~}~}}~~~~~~{{{~{{~yuyvuvxuyxttttPvOmxlktilujoxmmvkoxmmwloxnlwkqypnxloympyonvlnymmxkszqpzooynmwkpyoqyopxnq{ppxnszqpyns}rw|unwmszqt{rqxoqyprzpszqu}ss{qu}stzrx~vt{ru{rs{qu{sszqw~vv~utzqyww|vw~ux}vxvv{sx~uywv}tzxzx{yy~wywz~xx}vx}vz~w{yx}uw|u{y|y|yzx{yy~w|y~{zw}{y}v|z{~xz~w}~|y}z|~{~|z||}z~}|~~{|~{~}}}~}z~~{~}~~~|}~}~}}|~}|~~|~}}}}~{~}}}z}}~}{~}}}~}zw|}z~}{}{~{}z{y}|y|zzx|y|z}~{zx}z|z~zw~{|y~yv{zzx{y~zw{vt~zxzx}yv|vtxvyw|vt}wu~{yyxxvyw|tryw~xvzsq}vt}vt~wuztr~wv~xvyrpztr|us{sq}usyrp}usyqpwpnyqo}uszqpzrpxpn{trzsq|sryrpxon{sqzrpyqoxpnxpnxonypownlwmlyqoxpnxnmwomvlkwnmxpnxnmujiwlkulkwlkuihvRQwtuuvwuw{yzwyzz{|}{|}||~~~}~}}z}|z~}~{{{|}}z}|z~}|z|~|xyzy|{xxz|}zy{y{{~{|{{{{{z|}y|~|{{z||}}~~{~}~}~}|}~~|}|}z}~}}}}~~{}|{z|||{ywz|ywywxxtuurOuNoymkuilvkmwlnxmkujhtgmxloymnwmnwmpynrypqzpktjnwmszqr{qpyoqzps{qs|qoxnpxnq{ppxnqxoqyorypt{rqyou|su|st|rs{qrzpu|ssyqrzpv}trxow~utzrv{tv~uw}uy~wzxw|ux~vt{rw}uv|t{yu{r{yu{styqw}uv|ty~w|zy~wv{sx}vy~vw|u}{{xy}vx}v~|zxy~wzy|yy}v~|{y|y}~{|y}{z}x}}z}}{~}{~|~{|}z|z}z~|z|}|~{|~{}|}~}~|~}~y}}}|~}{|~}y{{}{~~{~|{yu~z}~|||}~}}}~{}~{}~{}}z}~{~}{}~{|y~||{x~}yv|z~|}z}z~|zx~yv~||z}{yw~zx}xu}yw~xv~zwzx}{|vt}wuzy~wv}xuyw~yv|vt|us{ur|wuyw|us{sqysp|ts{us~xv|vt{ur~wuyrq{srzsqzrq~xvzsqxpn|us{srxom{trzrpxpnzrpzqpyrpypowomzpoxomvnlzpo{sryqpwomypnvnlwomwomvmlyqownlvjivkiujivlktjixnmujiwnmtQPstuvxuuxxywzxz|{z{}z~}}|{}~}~{}{||~z~~}~{}||~{}y|{{{y}}y{z}yz~uyy|{w|x|w{y{{|~y}zy{{}xy}}z{{~}~z~||~}}}~{~~{|}~~~~~z}|||~|~{{}z}|~{{{vxzywwuvpttLsKlvjnxllwjjuilvkkwjlvjkujoxmnvllukkvjmvklvjoxnpynqzopyoqypszqpxnt|snwlnwmqxnt|rrzpu}tu|ss|ru|tqyoqzpszqs{rv|sx~vu{rv}tt{rt{rv|tu|sx~vv}tw~uywu|tzxywzxw|uv{szxywxvx}uw~uu|sv}tv|tv|tzxz~x{yywzx}zy~vzx~{}|zx{x|z}||y|z~|||yy}vy}w~|~|~|~{}~{}~z}z~{|z|{~x|}~~||~{|}}~}~~{|}|}~|~|}~~}}|{~~}z}|~~~~}|}{~||}~z}}~{|~{|}}}~zw}|z~{~|~|~{}z{y|y~yw~xv|z|y{x}z}{~|~{x|{x}yv}|~||yzx}yvzxyw}xv~xv~xv~zw}{zxzxyrp}xv~wuzw}wu~xv|vsyw|wu~wu{tr{us}wuzur{sq|vt{tq}utyw}vtztr~wu|utztrxrozqo{sq{sqzrpyqozrp{srzrq|srzrpzsqyonxomxpnyqo|sqyqoypo{rqzrpxnlxnlypnwnmypnuljxonulkwmlypnvlkvkjvlksNMrsrtwwxvwzzzv|zz|}}{}}y~~|~}~}~~~|{{~}|~zz~~}|{||z{{{y||{x{}{|yy{||z{y~|yz}x{xz|}{}z|{~}z|y{}~||~{}~~{~{{}}~~|~}~}~||}|}}~~~~}{}x{zwyvxzwvtvvwwvsMuLoxnkuinwlmwklvknxlnxmlvkmvllvjnwmpxnqzonxmnxmszqt|rs{rt{rs{rqyoownqzppznrzps|rqxpryptzrszqs{rpwmt{rpyot{rv}tszqszqu{sv{tv|ts{qw~uv}tv{tv}tv|trxou{sx}vyww|tz~wu|sw}tw}uy~v{y{yxv{yzxw|t|z{yy~v{y{x}{y}v{yy}w|zw{t~z~x|zv{t|y}{|y|{xy}vzx|z|z}}|z|z{y|z|}}{}}|~x}}}~{}z~{|}}y}}~~~}}|~~{~~z|~|~|~~z~~{~{|~~~~~{~~}~{|~{|}z}z~|~{x}~|~z}z~|zv|y~{}{~|{y|z~zx~zw|z|y|z~||z~{y{y|zzwt|y~yw}{}{zx{xyw~ywzvtztq{x|z{yywyw}{zx{vtzx|us}xu|wu}vt{us~vtzw|us~xv}wu|us{us|vu|ts|vu|us{qo}wv{sq{us{sq{rqzrq|tryrqyon|uszqpyrqypo}usxpn{sq{sqzqoyqoyrpyqpxnmzpoyonymlwmlukiwonyomukiukjwnmwpnxnmvlkvmkvmksONrqtvtuvyxwuyxzz||{|{~x{~}~~~~}}~}}z~~~y~|{~{~}}}{~}~}~z}{~~z{{z}|yyzxzwyy{{x}y|~|zx{|||||{x}zz{}~|}{z{{|}~|~}}{~}|}~~~{~}|~~}{zz{|y{z{zwzyyvrtttRxQkuijuijvikuinwlkujlujkujoymmvllwkrzqowmpzoqypnxlp{ooxnmwlpzooynowmr{qs{qoxmr{qrzps{qv~upynpynrzqt{rt|ru}tqyos|qx}vv{tr{qt|ru|sv}tv|tt|su{rt{rv}ut|su{sw~uu{rz~xw}ux~vyww|uy~wv}ux}vx|uyxw}tzw|z{yy~w}zx~vzxzx{xzx~|}z{x{yy~w|y}}z{x|z~|{~x}z}w{x}~}}}{y}v|y}z|}z~|{~x}|}{~~{||~}}|}~z|~}}}}~z~z||}}}}~|~~z~~~z~}}z|~}~|}}|~|}}yw}z~~}~{~|}z~{|y~~{~|y~{~|}z}zw}zw~yw{wt}z~yw~{|y|y}{}zx}xu|zzxzx~zw~yv|zyw{x~xw|zzxzx|z{zzy{us~wu|vtztr}xvztr}wuyurxwzsq|vt|vt~vu}wu}ts}wuzts{tr{tr|vt|ts}uszsqzqp{rp}uszrp{tsyrpxqo{ur{sqwnmyrqzpo~vuzrpxon{srxonyrpwnmypnypnwmlyonxmmukjukjwmluljtjhvkiwomwmlskitRPsttuuxtwwxtzxwy{yxy}}}|~~y~~~~~}{z|{}z|||}}}{~~x}}xz|z{|||z}{|{y{}zzyyz{~~w|v}~|zz}yyzyz|yz{||}}||~}|z||}~~||}}~|z}|}}}}~~}~~}z}|~|~}}{|z{yzvy{xwyxuutvstsOwNjuilvjnxlkvjmwlmvlmvklvklvjlujnxmoxnkvjrzqqyooynpynrzqmvloxmpzoqzpryprzqqyorzpt{rrxprypqzou|ss{rt|sqyorypszqszqt{rywt{rs{qv|sv}tv}tu{srzpx}vv|ttzrt{rv|tywu{su{tw}uw}uw|tz~xzxywu|tv|tzww|u{yzw{yv{tzx{y{y|z{yzxx}uy}v|y}z{xx|v}{w|u}z{y}{{x{y|y}{{~x}{|y|~{}}z|~y}|y|z~~{{~}{}x}z}~~{}z{~}~}||}|}~}~z~~|~{}~}|}}}}y~}|~~||~{~||}}~{}|}~{}~{{}~{~{||}yw~}z~|~zw|y~}z|y}z}|y~{|}}z}{~{|y~||xv{x}{}z~zx|z|z|wt~yw~ywzx~yw|z}wuyw|z|ur~xvzy|vtzw}wu}wu}wu~ywztr|xu{uswu|ts{us~xv}vt|us|utyqo|vs~wuzsq|us{tr{sq|tr|tr|sqzsq}usxrp{sqzsqzts{sq{rqxomyqpwnlzsrxomvmk{sq{poyonxnmxomtihwmlwnmzrqynmypnxljrgevljtihvmltjiuPOsrwtvtvwx{zvzyy{{{x|~z|{~~~~}}~~}}{~~|z~|||z~{}}|}{|~{{{}{}|{yxzy}|zyx}{wwvy{{||~}|~z~z{}w{z~}y}~{z}||~||}~|}~|z|~~}|y}~}}~~}~|yy{z}zxyxuyvxxuxwurqvMsLpxomwlnvmktimwkmxloxmmwlnxmoxmoynpxnowmmvkmvkr{pmxkpyoowmpynmvkq{oqzopyorzprzqs{qs|qpyou|st{rpynqxopwnt{rtzru|sszqt{ru|st{rw~us{qu|sv|tv}tw~uzyw}utyqv}ux~vxwx}vv|tw~uzxzxt{ru|szwzxzxw}u|yyw~|{~xzxzy|z{~xx|v}|}zz~x}{x}w}{|~y{y~{|y~{|~y~|}{|z}{~||~x~z{}x|x~{{~y|}}|y|y~~~{~{~|~z}}}~z}z~}}}{~}}||~}~}}zz~}y~}~}~~}|}y~~~}}~z~{|~{}z}~|}|~~|}{w~{~~{~~{}{}~{|z~|||zv~{x}{y|y}{~{~|~|}yv{y~|}yw}z}{{y{y|zzy|xv{y~xv~xv|wt~wuxvzxzx{vsyx|vtzy~xv|ut~xv|xv|vt|vu~xv~wuztrzur{tr}wu|trysq|us~xv~xvxpozsqyqo|usyqoyrpzqo{ts{qpysqxomzrp{tr|tsxpnzqo{sryqpzqpyqozqpvmlwnmvnkvlkwnmzonyonwnmxnlvkiwnmsjiukivljujhyonrQOvruuxuxutwxyzy{z|z{z|||y~z}~|{}}~}~~{~~~|}~~~~{~}z|y}|~||z{~{{}w|z}}yyxz|{zyxyyx}|vyy{~}}|z{{||}~||{~~~|}~v|~x|~|~}~{|{}}{}{|}}~|}{}{zz|zwxuzyxvrwrtvsPvOmwllvjkvjjuijshkujmuklukmwllwknwlmwlmwloxnpxonxmt|spzopynqzoqzppxooynowmnwlowmqyprzpr{qrypt{rt|rt|rpxnrzppxntzrv~ttzrv|tv}tu|tu{sv}ts{qx~uw}uv{tx~vu{sy~wx}us{ru|syww~vywu{rx~vv{t{yx}vw~vy~ww|uuzry~wzx}{{yz~w{y|z|z{yz}wy~w{z}{~|{~x}y}w|y~~|~|}z}z}z~}{~{|~x~{}z|z}}{}z||y~{}}~{}~z~}{~}~z~}|}~{}~~~z~~{}{}}}~{|}|}x}~||}|z~}|}|{||~||}}|x}|}~|~{x|z~}|y}z~|~{|z|y}yv|z}~|}yw~zx{y{z|xu~|~{w}yw}xu|y|z~{xzx{y|z~yw{y{yzwyw}wu|xv{yzx~yv{usyrp~yw|vt{us{sr|vt{vt~xvwu~ywwqo}us|vu|ut|ut}xw{us{sr{trzsq{tszsq{tszsqzsqzrpzsqwpnypnyqoypnxonwomxomyqoyonypnzqpvnlvnlzpownlyomwmlyomvmlvkjwmlzonxmlujhxonxmltmkwjjwmluQPtutusuwxt{vuzy{yv}yz{w|}|~||}~{{}}}z{}~}}~}||{|z{}}{}y{{|~~|y}{||x||zyzy||x~zxyx|{zxz{x}yx{v{|}|z}x}{{}~}{}{|z~|~}|}~~}|~}~~~~{~~{||{z~~yy~{{zv{xyvxwsztsusvKvJkwipxnoxmmwlmwllvknvmoynqzoowmmvknwlmwkkvjkuinxlmvlmwllwjnxlnxlmwkowmowmt}ss{qpxoryqpynszqw}vpzou{txvrzpw~uu|sv|ttzrtyrrxos{qwvv|sxvu|sx~vw}uv|ts|qv}tv|trypx}vywzwx~wv}tu{sw|uw}uv|tv{sx}v{y{yx|u{~x}{|z{x|z{yy~wy~vw{uz~w|z|y|zzx}{}z}{|z|z}}z|z}z{yz}wy~v~{|z~||y|~y~{}z}z||x||~}z~x~|y|~}{~}z~~z}||~y|~}~}|~{~{||~}}~}~~}}~~~~~{~~{}|~|y}}~{}{}~{}z~|}z~}z|z|~|~{}}~~|~|||y~|y}{}z~~{x~{x|z}z~{|xu||z}{y~zx{y{y~yvzx|z|vs}yv{y|wu}xvzx~yw|vt~yw{y~xv~xvzy{us~yw~wv}xv|vtyrp~vt|tr~wu~xvyw|vt{tr}wv}vt|tr|us|vt~wu}usyqoyrpyqo{rp|us{tr{srxpn{sqwpn{tr{sqyonzsqyqpwnlzrpyqowmkxomyonzrqvlkxnmyqpxnlxpntjhwnlukjukjyqpyonsjiulkwRQrstvxrvxxyyvx{{xwx~y~z||}~}~}~}{~~}~{~~}{{|}{~||~y|xz{x}|~|{z}{|zxz{{~yz||y{|z|{{|zv~|x~}{zzz|zz|{}|z||}|}}||}|yz}{|~}~~~}}{~|~}{|xx}z{zzyzxxyywvuuttsrMsLnxmnxmmwlmvkqyplvkjshmwkjuhqxomukpxolvjoxnlukoymktiowmnymlukpxnqzpnylqzpt}spxnoxmqworzqt|soxmrypt{ss|rrypqypt{rt{ru}st|rv}tu}sxvw}vu}tv}tw}us{rqyox}ux~wzxtyquzsv{tx}vx}vzxw}ux|ux}uzxu|rz~wuyrw}ux}uy}vv|t{y}z|zzxx}vy}v}{{x~{}{y|v{~wx|u~{|y{xzx|y|y}}z~x{x|z{~x|}z|x{y}}z~|}}|~y|~y~||||~{~||}z~|~~{}}~z~|}z|}}||~||~z}}}}}~|}}{}~{~{~}}}|~}|~}}||~|}y|~}{~|y|y~{~{x|z}z~z~|y~{}{{y|z}z{x{x~yv{x}wu}z~yw~{x}{{x{z}zwyv|z{vtzsq~yw|xv}wu}yw|vt|wt{vt}xv~yw|wu~xv}vt{us}ywyrp|usysq}vt|vt}vuzrp{tr|ut~wv{tszsqysq|vtyrp}wvysq|us|vu|us|tsyqpxpoyrp{rqyqpzpn{sqvnlwmlyqozqpxpnwnlvomyonxpnypoxonumkypnvnlxnmwlkypnwomvkjukjxmlukiwmlsMLrstsuwwwztzxzwv{xy}{{~z~||~~~~}}~~~|~~~~~}~|~}z}}}|||{y|}}|||z|z{}{{{y}{zz{yzz}v{xz|x}xy{yz{z{yy{~~{|{y{~|}~}|||~}~}{y}~~}|~~~{~~~}|~~~{}z}~yyy}wzy|yyyyzywuutusrMsMkujmvljtilujnulmwkluklujoxnnwmnxlnwmovmmwkowmnympxnmvlrzqr{qownpxnrzpt|spxnqyppwoqxoqyot{rt{rr|qs{rqxoszqrzqrzpw}uv|tv}tu{su|su|spynu{stzrszqx|vw}uw}uv|tu|styryw{zw}ux|vtzrywx~vzxywzxw|u|yz}ww{tzx{yz~xy~vw}t{x{yx}u|y{x|y{y}{|z}zx{uzx|z|z}{y}w}}~|}~{x~||z~|}{}{}zz}w|}z~{}z}z|}~~|~{|~z~~{{|{}}{}|~|}}}}}}~}|}}}~~~~}{x||~|~{}}}z||}{w}z~}~{~{|~|}|}zw|y}z}y~||z}{}z|y~zx{y{xyw}{x}{{x}{~zwzx{y}yw|z{y}xv~zw}yvzxzx~xv}xv}xuxvzxzx}xv|wt|wu~yw|vt~yw}wu|vt~xw|us}wu{us}ut|vtzsq{ur{us{sq}wuzsq{sqztr{sq}vu{tr|sq|srwmkypo{sqyrp{rqzqpzsq{rqxnmxpnzsqzrpwnlwpnwlkwnlyqoxnlxnlwnmyomwnmvlktljvmksjhwnlvmltjiukjvmltNMrqurtsxvvwwyxzx|zz{}|~{~~z}{~~~|~|||~}|}||}~z}~~||||z}z~|z}}|}zz{zz||zz{y{yv{zv{|{z|y{|zz{|~{||z|||{|}z||y|{{z}z~~}}{~||}~~~|}}}}~}|~~{}x|zz{~{zz{yywvyxwyvvvtvtspOtNnwmlvjithnxmnwmlujnvlnxmkujkujmvkqyoqyooxmpynmvlrzpmvkqyoqyoq{pnxlowmrzpqzopxnsyppwnovmrzqu|ss{qr{qt|rqzpu{srzqs{qsypszru|suzrzyt{rt{qt{ru|sv|tzyx~vtzrx~vu}ttzqw}uu|rv|tx~vzxxwyww|t{yz~xw|tw|uzx|y|zzxy~w}|x|u|zv|t{yy}ww{t{xz~w{~x|{wz~x}{|{y~w}|y~{{}x~|z~w|z}z~|z|~~{}z~}}z}~|{||y}}}|~~{||~}}}}}~{~}~{}~~~~||{~|}z}|}|~z|}~{}~||y{|zw}|~{}{|zw~}|y~|~{}~{}z~{x}}~zx~{}z|y}z~|}xv}xv~{}{|y}{|y{y~zw{y~yw|z|~yw~yw}xv{y~zx~yw~xw~ywzurzvs|vt~ywyw|vs|wt}xv|vt|wu|us}wu|ts{us~yw~xv}wu|us|us{trzrpyrqxpn|trztrzsqzrqxpnyqpysqyrpypnxqo{sqzrpyon{rpysqwmlzqp|tszrpzqoxonzpowmkvmlxpnyqoynmvnlvmlzrqxomvljvljvkjvljvlkrigxontjiuONttrtuuxuvvxxx{xz~zx|}z|~z{}}~~|~}~}||~{}{}~||y|{~|||}||}~z{y|y{zz|}y|x|z|{yyzy|yy{zyvzxy}wyzz{|z{{zxz{{||}}~}z}|{|y{}~|~}|{}}}{~~~~~~}|y~|~}|~{}~z|zyzz{yyyzzyvvvuxuwsuusPsOlwklukjthlvjmullvkkvjoznkujnvlmwljtikuipxoqyomvkoynnxmpxonxmmwkq{pqxopxns{qowmv|tpwnqyooynu{trzpoxnqyoszqv|uw|ut{rv|tv|ttzqw~vrypw}vqyox~vu|rrxos{rv|tx}vu|sqyox}vx}ux~v{zw|ux~vy}vw|ux|ux|uy~wy}vy~wzxw}u{xzxw|ux}ux}ux}v~{|zw{u~|y~v|y~{}z~|}{|z}z|~{{y}{{~x~}|~y}{~|~{x~||~{|}}z|y~{|}}~z~}}~}|}~|{|~~{}|~}z~~}~}~{|}{w}y~|{~{||}|~{|~{}}||~|}yw~||}z|y}{~|y~{~{}~}z}zx}z~{x|yv~|{x}z}{y|z~yv}z~zw~{x}z~yv}{}{}wu~yx|y~{x|y}xu{wt|yzx|zyw|yyw|yv~xv{vs}wu{vs{x|wt~yw}wu{uryx|vt{vt}ut{tr{ts|wu}vt|trzurzqoxomyqo{tr{srvnl|trztryrq{usyqoxpnxqnxpnypoxpozrpzrp|tsyqpxomzqpypnzqpvnlvnlvmlypnwomxonvlkxpozpoypnxnmskivjiujhuljxpnwnlsigvkktONqrpuutwxvuzwvwv}xyz}~}}}|~{}}{}~}{~}~~z|{|||y}zz|}z|z}}{||~{{z{xz~|y|{yyz{x|yyyxz{wz|~z{{{|yy{zy}|x}}||{{{||zz|~}|{||z}~{~}z}~~~~{|}}|~||}~|}~~w{|xy|{xvywwzuusutssMvMowmkvihtgmukkujksiowmkujlwklwknwlr{qnxmlvjoynmxlnxmnxmkujoxmr{qpznowmpyoowmr{pmukpxntzrqyoqyot|st{qrypx~vpynv|tryou{srzpr{qv|tt{rt{rt{su}swvv|ut|rw}uw}urzqv{tw}uyww|urxpywywvztv}tx|uy~ww{uy}wx}vx}vtzry}v{y|yw{u|yywzx{~y{y|zy|vy}vy}v{y~{{x{yy~x{~x|z{x|y}z}~{~{~{|y||~{~||x|||~|||||~~{}~}z|~{~~}z~{}~}~{{}}{~z|{|}|}|}{{||x}~||||~}y~~~z~z~{~~~}z~{~{~z~}z~}|x{}z~{x|y~{x||y|~{}yw|~{x~~|yv|z|y}{}z}z}{}{|z{x}wu~|~xv~yw{x}xv~||zzx~zx~yw{y{yzx}xv{y|xu|vt{x|vt}xu}xu~yw|vt|vt|vs~xw{tr{usxqo~wv{sq{vs|us{us}ts{sq{usyrpwmlvomzsqyqo{rq}vt{sqxrpzrpxqn{rpxomxqowom{sqxom{sryqpyrpzrqypowonulkxnmxpoypnvnlwnmukizqpvnlwmluljypnukjvlkskisigrPOrqupuvvxywwtz}z{yyy{z|z~|z~~~{{{}~|}}~~|~}{zz~{|y}~||{}z}}|{{{}z{{zz||zy~w{{x{w{{x|wzzz{z|xy{y|{|yy{{z|||}|x}|{zz{|}|}z~|}y}}y{z||}~{}~~|{~||x|z|{}{z{|z{vzyyvxx{wtxvwvurstOsNkujktiltkkujoxnlvjnvlpynmwlowmlvjnxnjsilukqxolvjpynlujqyorzqowmnwmpxoryppxopxnqyoryprzpszqt|rrypqxopynr{pt|stzrrzpt{rqxoqxov}tszrrypv}urypt{ru}tsyqu{rzxu{ss{qv{sw}uu{sw}usypx~vrwpw{tyxw}vx|u{yx}vu|s|z~{w|t|z}{{y|zw|ux|u}{{yx}v}z|y}z}z~{{}w{y|yy|u}{|z}z|y{y{x|y|y}z~~|}{}z{||~||~x~{~}~z}~y~|||x}~z~{}~z|||}}~~}~{~}}~y}|~z~}~z|{{z|}}}~~|}~z~~z||}~}z}}~{}}}z~{}z~|y|y|y{|}z~}z}{}zw~{}{x|z}z~|y~{~}{|y}{~{xzx}{}{{y~{~{x}yw}{zx|z~zx|{{y}yv{y}{|yv}yw}{~xv{usyx}wu{us|ur~xv~yw{vs{us}wu|vt{vtxrp}vt}xu{urzsq}us{ts}xu}vuxqo{sr|ut}wu}ut~xv{sqzqoxomyqoypnzrq{tsxrpuljzrpxonyqoyrpxom~wuypn|utvmlyqovmkyomvnmypnvmktmkxnlxpntjhxonwnlskivkisljvlkukjwmktkivmlqLKqtqrvsvvxwytwwzzzxzz{|z~z{~~}}~}{}~~~}}}~{~z{{{~~~|z}}}{~}z|~||{|zvyy{|y{z{yy|xzyyzx{ww{{y|vy{{y}{yyy|xzzxzx|}||z}||{zy}|}~~}|{|{}z~}y~{|~}|}}}~}~{~|~|~}y}y~|zxxy|xu{yyxtrtvsstqMuLepckuklujlukmvknvljshnvmmwlmvkpzokvjnwmoxmoynr{qoxnpyoqyoowns{qnwloxmowmqxopynt{roynpyopxmpvmt{rpxnr{qt|rqzos{qpyot|sszqs{rrxorxpsyqu|su|tx~vt{rryprypszqv|ttzru|st|ru{szxtzrt{rzxu|sy~wv}uyxx}uuzr}{{z|zy~wy~wzx|zw|t{~xx|v{~x|z|y|zy}wz}w|y|z}{{yy}vy~w|~y~z~|}~{}yy}vy}v|z~|}~|~{}{~{~{}{|}~|}z{}~z}|~x||}~z~}~~|}x~|}~{{~|~{||~~{|{}}|~{~~~{}|{{}|~|}~{|z}}y}z~|zv~}y}|~|~z|}}~{x~|~{}|z||}|y~{y~||y~zx|z|zzx|yvzx{x|zv}{|z}yv~yv|z}{}xu}xv}wuzx}wu|xv{vt}yv}xv~xv{vt}wuyw}xuzusxvzx|vs}wu{tsyx}xv|tsztqztryqo}wuxro}vuyrpzsqzus|ut}vtzrp}wu{sqxpo{tr~xwzrp|srxqnzrpyqpwnm{rqxqouljzqovpnwmk{rqwnlvmkwlkxolxpnxnmulkyqovkjwnltkivkiukjvlkukjsjhulktONqsutuvvtwzvyvxx{x{yz}}y|}~|{{{}{{}{|~{~~{~||}}|~x|}~|{~{~|||{y{z}}{}}w{{w|zzwzyz{yyyxzy}zzyyzyyy{yzzxz|~{y{|}}}{y}|}{{|z}y}z}z~}|}~}~||~~~~|}~{|{}x~~~{yxz{xzyyzxxwvwwxspsspnJrImvlhtgjuinvmlvjnvlmujluknxmrzpmwlmwkoxmlukmvknwllvjoxnqzoovmovmoxnszrpxnnvlpynnvlt|st|soxmtzroxns{qu{sw}uqxot{rt|sszqv~tt|qt{rt{rv}uszqs{quzsszqv|tx{uszqw}uw~uzxywx~vx{vw|uy~wx}vv{sx|uw|ty~wv}ty~w}zv}tz~xy~wy}wy}vw|tx}v|zx}uy|vx}v}z{y{x{y{y}{}~|~{~{|y|~y{~x}z|y|z}w~|~{z}w||~y~||x|}z|~y~||~~}~y|~{}}y~{}~y}~z|}|}|}~|}~}}}~||}}{~~z~~}z}|{}~}y~~~}z~z~}||~{}z|~||z}|x}z~zw~{x{}z~{~{~zw}}z|y~||~|~||xu{y{y|z~zw{y{x|}zw}{~|{y~zw{y}yv{y}yv~xv~yw~zw|wu}yv}xvzw|z|y{vt|wt~zwyw~xw{yywztr|wu}xu{us}vu|wt~yw|us{tr{vt~wu{sqytr}vtyrpztr{sq{sqzrp|vtyrp{usypozrpysq{rqyqozrqvomvomypnxqowomypozqoxnmxpnwomxqo{sqxpnwomxnmxpnxomxnmukjvnmvnlukjwnmwomwmlwlkulkumkrQOtssvsuxxxutwxwyzw{|{z{|{}||w}{{}x}~}}~{{x~{{}{}{{||||{}{~y~zywzxyzy{z|{~{z}||{xw{x{yxzyz~{z{zu|{|yzyzzy{{y}|~||||z|~z{{|~~y|z~}z~~}|}}{}|z}|~||}{~|}y{|z}wzy|zyywwwutuwwrtsurOtNlujowmkvjjuilujmvllvkhsfowmnwmlvkjuimvklwkqyoqyomwlr{qnwmqypnvmpxnrzpqzoovmqyooymtzrqxonwlrypoxnqyoowmszqtzqryoszqszrv}tu|tt{rw~utzru|sw~uszqtzrw~uw~vv}uv{sx}vx|vzx{yv{tvztx}uw~uzyw{tx|u{yvzt{yx~wy~ww|tvys{xw}v}z|zy}wx|uz~xy~wy}v{y{~y|z|yx}u|z{}xz|v}zz~w|y~|}z~{|y~{y|v~{{w|~}z|z}z{|~{}~y}~z~{}}~{|}~z~}}z|~{~~|}y{{~~z|}}|~~z}|{{~||}}{~{}|~~{}{~z|}~}|}|x|}}z~{}~}y~z~{}}z~|x}z}{}z~||y|{x~{x}}yv~|~zx|y{x~{x~|{x||yw}yv|yzx}y{y~yw}ywzx~zx{yyx{wu|xu~yv|xvyx}xu{x}{{wt{y~yw|wu}xv|wt|vt|wt}vtzsqysq{vs{us|us|vtztq|vt|ut}uszsqwqozsqyrpzrq{usxqoztr{srxqozsqzsqwnlyrpzsq{srzrqxpnzsqypoxpnvnlxpnwom{sq{rqwnlypownlumktjiukjwmlxnmukixpozrqwonvkisjhukjwmlulkulkuRQsrqrrwvwxuxzwvzx{wy}||zw~{{}~{}{{|{|~|~~~~~y}}}~z}{|~zy}x{}z}{z{|yy{}|{z{zz{|}yy}yxxy{|{t|yzzy{wzyy{zyzwvxy~z}}}~{y|{zy|~}|zy~~}~|}x{zz{}}~}{|{||~~{}z|{yzx|{z{yyyzxyyvwwxxswtquqsNtMjuimvkjthirglukoxmlukpxonwmoynlujlvklujnwls{rnvmnwlpxnnwmoxmpwnsyqpwopyopzoowmr{pryps|rszqs{rrypt{rrypowmqyprzprxps{qqxoqxnt{rrypv}uw}uszqw~ut{ryvsyqv|tv|tv}tx~vw}ut{rz~xw|uw}tu{tv{tqyox}vvztw}vzxy}vyx|zx}vy~wzxx}vtyq{x{yy}vz~xy}w}z|z}{zw{~x|{~xz{v~{~{}z~}{|yz~w~~|~||~z{~x}|~x}~|y}z}|}{{~{|||}x~{~~z~||}~y|~{}|~}}}|~z~{~{z~|~x{~|{}~|{~~~~{}{~{|{}~{~{}~~{|~~{}|x~{|~{x|z~{}z}z~|}z|}~|y|yv~{}y~|y~|y~zw~zw~{x}zxzxzx~{x}{|y}wt~|}yw|z}{x~{x}yv}{}yw|y~yw}xv~xw}xv}yw}xv~zx{wt~xw}yv|vs}xv|wuytr{usysq|wu~yv|wuywyx|wtysq{vs{usyrpzur}xvztq|vt|vtwro{tr{sq|trzsqyrp|utyqozrp{us~vu{sqyqpxpnypo{sqxqoyqoxnlwom{rqyrpwomyrqxpnxpnyonulkvlkxonzpoumlxomvmlvkjvmktkjtljsjhumkuljulkvmkuljrNMqptruvwwvxvwxxyyz{xxw{z{~z}~~{|}}~}{}}}}|~~~~~|z}~}|}}||z}}}~|{}~{x{}|xy|{zu|yyxyyyxz{{{ywyxxyz|yvz{yy}zyyyz{x{{|}|z~y}}}~zz~{z~{zy~||~{}{~}y~z{}|z|~~z~y}yxz{|xyvzx{uxyuwvtstuuqrMsLishirgitgjuinwmlvjmvkmwlpyomukmwloxmltjmujnvlownmwkoxnoynpyonvllvkqxpoxmowmnwlpxnpwnqyorypryqt{rqxos{rszroxmnwmu{st{ruzsszqtyqv|tx~vw|uv|tszrtzry~wt{sw}vszrw}uw}uu{sv{tu{su|sx~vsyqv{t{zx}ux~v{~xx}ux~vy~wy}v|zy~vvysx|ux}vx|u{yz~xy}v{~x~|{~y~{y|zzx{~xx|vw{t{~y|zy}v{~x|~y|y{~x~|z~x~{}{|y~{}|y}z~|||~|}~y}~|}y~z~z}{}}{{~||~}~{||~{~{~}~~z}z~|~{|{}{}~||{{~}|~}y}~}y|~}{~{}~{~}z~~{}z}}~{~{x}{w|yv|y}{}z~|z|y~zw~|~{}zx}zy}z~{wt~yw}ywztr}yv~zw}yv}xv|xu{x}xu}xvzx|xu}xuyw}yvzw|wu~xw|wu|z|wt}xv|xu~xv{us|wuyw|vuytr{tr~xvxsq{urzx{ut}wu{ts{vtysq}vt{ur{trzrpzsq{qp}vtxpowpnyqoyspyqoysq|tsyqozrqyonuljyqpyqo{rq{rqzsq{rqwomuljvnlxonxqoukjwnmuljypnvmlwmkvnmunltjiwmlvmlulktkixomujiuONqstsuvuwvvxwyzxzyw{{{|y~z|y}z||}~z}|z~~|}~}}x|}|yx}xy||~{|z|zy|y|{z~z{|zy}x|y~z|||}xxvwyxvzzz{{{xw{z}yzzzxvyyyz{y|~y|||}z{~}|}{{|}{|}{{z|~}~~}~}}}{}|}yz{{{{{y{xxzzy|wzwwxvsxusqpqPuOjtinwlitglujktjlvjmwlmxlnwmnvllujoynlujnxlovmitgnwmlukqyoowmoxmoxnrzpnwlpwmpwnqzopxnpvnrxptzrtzrszqqypv|trypqxoqyorxpryppvmt{srxpu|rw}uqwotzqsyqrxptzrzyu{sx~vu|sx|vw~utzru{sw}tv|tuzsy~vv{sz~wx~vzxw|uw|u{yu{r}y}wz~wz}w{xv|t|zy}wyw{y}z|y|z~{|zz~xz~x}{|~y~{|~y~{}z}z|{yz}w~{|y|y~z~~}z{}w|y{u}|~{}|}x~~z||y~{}~y~{~z~z|}|}~{~{}~z||}~y|}~~~z~~z}}x{{}}{~}y~~}y~}z~z||||~~~|y~z}~}y~{x{{}z~}z~{~z}{x|}z~zw~|z}~|}z~{y|y~{}{|}{x}z}{~|~{x~zx{x}yv{yv}zx|y~zwzx~|zx}||y}zw~zw{x|xv}yw~xv}wu~yw}yv|wu{y}yv~yv}|}xv{vt{wt}vt|wu~xv|wu|vtzus{vs{vszvt}wtyxzx{tr{tr|ut{tr{usxrp}wu|vt|tr{sqyrpzsq{sq|usysqwpnyqozsq{sryrpzrp{qpxon{rqxomvomypnzrqzsqwomypozqovnlvnlwnlvljwonxonwonsjhwnlxpoxnmwmlvmlvmktkiukixmltjirMMqsqputvvxvvzxwxxyzyw}z{x}{{|}{~~}||~z||{~~~{~||~}|~|~~~}~}}||~}~{z{z{z{yzw{{zy{|zzz{{}y{uz{{zzvyyywyxzywy|y|||zy|{x}z}zz|{|zz}{|z}~||{|z~~~}{~}z~~|}~|z||z|{}z{{|{z|zv{ywzywvqsutwtrqLtKktinwmjshmvlhsgnvlkvjmwljtioxnnwmishpxnithoxmmvllujnwmqyplvkownpxonvlnvmqyoqypnwmszqownqzopxopvmqzoqyotzrt|sszqu|sszqw}vw|uqwns{rtyrv}uu{rx~vsyqv|tu{suyrv{stzrv|tu|szxw}uv{ty~wy}vx|ux|uvzsx}vw}uu{rx|vx|vx}vx}vx|vw|tx|u{xw|uy~wz~wvzsy}w|z|y}{|y}z{y{x{y}x|u|}{}{|zxzt}{{~y|z~w}y~|y|}z|z|z~{}}{{}x|}y|}z|||{}w~{}}y}|x~{~{||~~z~~{z{{||~{{}}}y{~{~{}{}z}}~{~~z||~}}}z}}z}~|y{|~|zw{zv}}z~}z~}{x}|}{x}|y|y~{|z~{~{x}{|y}{~zx~{||yv|z}z|y|{yv~{}{zxu}yw{x{y}xv}xv|wt{wt|wt|xu}wu~yv{xyusyvs|xu~zw~yv|vu|vt|vt|vt{us{us}yw~ywysp{us|vt|vt{sq|vu}vt}wvyrpztr|uszrpzsqztr|usyqoxqpzsr{trvnlwomztrzqovnk|uswnlzsqyqpzqozqpwomxpnvpnxomyqoyqowpnvomypouljukiyrpxpnvnlvlkvmlvnmtkiukjrhfvpntjhwmltjiqNMrtstsvvuvyxxuyxzzzzxw~z{y{{|{|z{|}}{|{}~||}{|{|||||{|}||{~|z{{}{z}x~|zz}{{z~x|}w{{{x{xz|{{{xxwzxx{zwx{|z{zz{}{zwx|v{|y|zz|z|x~~~}}|~}|{{}|yy|~}~~}~{~||{{}||z|}|~|{z{{{|yzyzxxvvxuvxssutrtrLrJishktimvklvkmwmmukmvllvknwmowmpwokujkujnvlpxnpxnnwlnwlkujpxnqypqxomwlpwnpwnrzqpwonwlqwooxms{qszqqyopxnsyqu}trzpmvku{stzrv|tszrryps{rswqowmv|tv{ttyrszrsyqrypv}uy~wv{tv|tx}uw|uu{ttzrx~vu{stzqw~vx|ux}vw|uy}wv{tv|sw|uy~wy}wzw{yv|tz~xz~x~{z~xz~wx|u}{|z|~y{yy}vy|v{x{xz}w|z|z}z{~x|y~||z{~x}{~}{~y{~zz}w||y|v|~y{|~{|{~x~}|~{|~y~{~{~~y{~~|}{|w{{}{|}}x}~~~y{~~z~z{}z~{|||x~z||{|||~{|}z}{w~|~z~z||}{}~|y|}zx~|y~}z|~{x}z~}z~|y}|xu}z}{~|y~{|z}zw{x~{x}zw~{~zx|z|y{y~{x~zw~zxzx}yw}yw~yw{y~yw~zxzx{y}xu}zw|wu~zx~yw{vt}yw}yv|z~xv~yv|wu|vuzx|vt|xu|vs~yw{ur|vt|vs}vt|usztr~xvywytq|usyrp{rq{ut}vuxqozsq{trwom|tsztr{rqxqoxqo{sqzqozrp{trwonzrpyqovljwnlwnlwomxpnwnlyqpxonvmlvomvmlvlkwnmulkumkwnmvlktkjukjukjwmlvlkvmlsihshgrPOquuqtuqyuvtvtv|yxz{zz{{|}|}{zz{~~}||||||~{~}|z|~|}{z~}}|{|}|}|{{}|yz|{zy|{{zyyy|{{zw|yxzyy{{zt{y{w|{zz||xxxxzz~zxzy|z|}~|z|y{z|~{yzx}|{|~~~}~}~}}{|||}~y|}{|{}{{{}{xzzxxu{xvvvwvwtsqqqrMsLkuilvkgrfishnvmirglvkoxnnwlnxmpxolvknvlmuloymnvlhsfpxnoxns{qksiqyomukqxoowmrypszqpxoqyoryps{rrzqt{rqxoqyoszpnvms{qrzqqwnuzsu|stzsu{sszqu{su{tqxou}tuzsw}uywsyqu|stzrx~vv}tu{su{sw}uz~xv|tv{tz~xx~vz~xu|sx}vv{sz~xy|v{y{y{yx}vy{v|y{}x{y|yzx{yy}wy}v{x|~yz}wx~vx|u~||}xz}w{~x|y~{y|vz}w}zy|v~|}~{}z|~yz|v|~y}z|~y}zz}x|}x|}y|y}zz{v~}~z}~~z|~{{{~z}~~z~|}}y{~~z}{}|{|~|{|~z~}~{|w}}y{|w~~{|~}y~}y|~}y|~{~~{~z|zv}{x~{}|x~z}|yv~{~{}z~{~{x|~{x}|z~{~{x}zw}~{{y}y~{x}z~zx}z|~{}z|y}yw|xv{xu|z}{{y|yzus|xu{yv~{x}wu}xvzus}xu|wuzur~yw~zx~yw|xu}xvztr}wu~xv|wtyqo{xu}wu~{xzurzsq|wtytq{trzts{us}vt}ut{sqyrp{rqzrqxrpysp{srwpo{urzsq{usxqpzrpxqozqpxpnyqpxonyrpyrqyqpwpoyqpypoxpnzsqtkiwnlxnlxpnyqpvmkvnlwomwnmwomukisihwnmypoxontkixnmtjitkishgrNMsstrwuuwtvwuzvwyyuyz|z|}|z|{~~~}|{~{}z}|~~}~yz}|{{zzz}~}{|~}|{~z}yzz}|wzy{}y{|}xxyxxyzy|wuyyyzzxwyzxwzzyxxz|v|xwy{|{z|x|~|}z|z~}z{{|}}~}|||{{~|{|z||}|{|~~|y|||{|z}{z{~xw}yzx{{vvyvxvvtuurtsqpMsLjshmvlishktjmukkuikuijtinvmnwmqxpnwmlvknwlnwmkujmvlpwnpvnnxmjthownoxmnwmnwlnvloxmpxnqxos{roxnpxopwnt{rrypt{ru|ts{qrypu|trzqszqszqx}vu{srzptyqu{rqxov{trzpt{rw{tv|tw}vuzry~wx}vw}uv{ttyrw|uv{t|yy~vszquzsw}u|zw{uw|u{xv{tx}vx}uz~wy}wy}wzx|zw}uy}w{yv{tz}w~|}zz~wy}v{~x}z|zx{t|y||y|~z|{}x}z|~{}z~|}z}z{~x}~z}~y}~y}{|}z{|~{|~z{|~z~~z|}y}||w}~y}}x{~}|{{||}~|~~z~~z}~~~z~z~{}}z~~z|~{zw}}|}{w}}y|}|}{x~{{}}{x}y|y}z~z|~{~|y}z~|}{}~{x|y}zw~zw{zv}zw}{~zw~zx~{y}z~|~{x~{x|z~yw~|y~zw}yv~zx|xv|yv~zw{yzx|vt|xu}xv|wu|wu~yv}xv|xvzx{wuzus|wu|vt|wu{us{us{xu|vs}wu}zwywzus|vtzurxsqxspytrytr|us{usyrqztryroxpn{tr{sqyrpysqxqoyrpypnwpnzrpxpnwomypnypnumkwonxpowomwomztrwonypoxpowmlxomulkwlkwmlvmkvnlulkyrpyonrigtkjsgfvlkwnluljumkwontljsPOpqtssvsuyyvxwyx{wxwywzz|||z|{|~}~{~{~||~z~}}~|~{}|}|~z{|x{|{~{{}{}}|zz{|yz~v}y}}}yw|zyzzz|zyx{zx{yx{w|yz{|x}{wz{z{~{{{w|y}}}z}{z{|w}}xy~y}|{{}|{~~{|w{|}}{z~}~z{{yxwyyxxyxyyxtsvsqsvtrrrrQsPirgisgjshoxmmwlisgmwlnwmltjmvlmvlmtkltkjshqzpmvlpxnlwjnvllukowmnvlpynmulmukowmqyoowmqzppxou|sqxoowmpwmszrqxorzqszqt{rtzsqxnszqtyrv{sw}uu{sv}uuysv}ttyrw}uu|st{rsypv}tv|szxw|uv|uu|sy}wy}wx}vzxtyqx}vzx}{y~vw|tx|uw|ux}v{~xy}v{y{}ww{tx{u{x}|z~x|zz~xy~w~{w|t{~w|}z|z{y}z}zy|v~}~z}z{}z}~{}y~{~{}~{~|~z|{~x~{|~z|~{{}|x}~y~{|}}y|~{|~y}}~~~z}}}~~z~}z{}}}}x}~y~{~z{}}}|{w~}y}~}z}|{|{w{~{|{|}~z~}z|~|y~{|{~}y~|y}y}|~}z|y|yv}}{}z}z}z|yv}z~|y|}zw}|y}zw~{~{|z}{|z}z~yv~{x{y}yv~zx|z|zzvtzwt|xv~{x~zx~yw}ywyw~{y}{}xv{us|vtzy}xv|us}xvytq|wu~yw|wu|wu{wt}vt|wu{vt}vtyqoxrpxsqysqyrozsq|wu|tsxqowpozsq|us~utzrqxomyrpwnkxpnvpmxqoypouomzsqvmkwnmzsqvnlxpnsjgxpnvlkvlkxonxqozqovmkvmkypouljvkjwmltkjulkukjvnlvmlrihtihukjshfwlksQPtqsqtuuuvvvzxyxxyxyw{yz||z{z|{{|{}|}{~~{}|z~z{~|~y}{{z~}|z|{}zzz}~|zz{{|z|~u|x~w|zyx|z{xyyyw{yy{xxzwzzvxx|xzzx|z{yz{{y|}x~||yzw|zy|||z|~}y}|}~zz{|~~}~{{|{}}z|{w|z~z~yywzyuwxyyyxxwxxtuvtuvvutpoqKnJlujlvkhsgmulhrfirglujlujowmnwmmwknwllvkqypoxnnwmmvknwllvkoxnqxoowmmuknvlqxopxnnxmnwmpyorzqqypqzooulrxppwnryqu{su{srzpovmpxnszqszqt|rrypt{rqxov|tszquzst{rszqw|usyquzrv{ttzrx~vw|tw|utzqw|uvzty}vw|uw|tx}vtzrz~wx}vw}uw{t{yx|uzwz~xuxr|zvzsy|v{x}z{~xy}wy|vz~x{yy}w|yy|v{~xy|v|y{}x{~y}{}zz}x{}xz}wz}w~{~{{}x~{}z}~{}z~}|}x}z~~z}z~~z}z|{}x~{}{|~~}y}~y}}y~{|}y{}}y}~x{~{|{~{}{}||x|}}|y|}|x}~z||}}y~{~}y}{}~{|~||||}}|xws}~|x~z{yv~|y~{|zv}z~{|y~{|y|zv{y~{~~~{~z{x}xv}yw|z~{{xzx~{x|xv}yw~yw|z}zw{vt~zx~zx}yw{yzx~{y|vt{wu|wt|wu|vs|vu}xvzsq|vt|vt}yw~xv|vtzsr{wuzur{vs{tr|usztr{tryqo{ur{usxrpxsqypo|vt|uszrqzsq{trypoyrp|trwnl|usxonyqpwpnwomxqpzqpwomwomyqpvnlxpoxqozrqwpnxonzqoxpnuljvomvnlwonxpovmlukiulkwmlvmluljwnmshfvmlwnlumlrjhvnmsQPtrrurvuvvwyy{vxzwxy{z|}|{~{}z{||z~~|}~}|~{}|~}}|}|~}z{~|~{~}|}}{|y{{y{zzy~zxyt|zyxyyzyyywzzzyyxwyw{zzzy|x{wvxzy{uzy}{zv|{{yy{}zzz~z{z}{|~}|{}}{|z|z|}{x}}|}}z|{|{|z}yy}t{xzyywwvyvvvuyrvssqpqNuMjsiktimvklvkmwlishmvkktilwklujlujnvlmwlpxomvkmwllujmvkktiovmmulnulowmqxppyoqxopxnoxnqxoqxoqxprzpoxmqxorzpt{sszqpxnqxow|utzrryotzrv}ts{ruzsryqszrx}vv{tw|upwnryptzrv{sy}vszqw|uw}uw{uu{sz~ww|uuystyqx}vx}vtxqw|uvzsy}vx}uz~w|z{y}zz}vw{uy}wv{sz~w}zx}v|yy}vz~xx{u~{~|x{t|z{yx|u~{|yz~x}z||~yy|v{y|~z{}x}z~{}{|w~{z}wy{v}z|}~z~{}{}x~|~~z|}|~~z~z~{z|w~z{{{|}~z{}}|{|}x}}x~~z|{w~z}|~{~~{|{w||w{|}z|}|}~~z~{~{y~z~{|}}{}z~|y}z~}z}z~}z}z}z|y|}z~{w|zv}z~|y}|y}{x~|~|y}zw}z|y}yv~{y|z}xv}zwzxt~||y}yw~zx{wu|z|vt|yv|wu|wuzxzx~zx{vt|wu}yv{vs|xv|xu}yw}ywzus}wu~zwytr{vt{ur|vt|wuzus|usxrp|wuxqoxqnzurwro|usztr{us|vuzsqzsqyrpzsqyqoxrpzrqyrpzrqzsqtmk|uszsqzsrtljxpnwnlvnlynmvnlxqnwomwnmvmlwpnvnlwonwonwomwlkumkwnlwomxmlrjhwmlvnmxonvlktkitkjukjvmltkjrONqrssuptuuvvxuvxzx{wwu{zyz{~{yz}|{z|zzz}|}}~~z}|{z{y{}z||{}{x|z||zy|{}y}y|}}}xy{|w{yxx|xx{zyx{z{t{yy|wzzvwzzzx{xxyz~xyyzy{z|zzyzw}~}|}}~z|vzz|{|||~|zz}z~}|}}{wz||xz|zzxw{xx|xwxvvwuusuqstpqLrKjsijuimvllwkkujlvjjtimwkhrfjthktiisgirgkujjtgovmnulovmnvllujmvkryppynowmszrnvmovmpxooxmnvlqyopwnpyoqzprypowmpzoryppxnszptyrszrtzrrxpsyqtzrtzqryqv|tv|tx}vsyqtyquzsx~vryqtzqt{rx~vu{sx}vw|ux}uw|uzxy~wu{rv{tw{uz~xy~xw{ux}vy}uwzu{yzwzxvzs}z}zx}v{yz}x|zz~xy|wz{v|zy|vy|v{|x{~wy|w}z{~x{~w{~y{~x}{}w}~z{~x|~{}}z|~y~}~{}z|z{v|}x{}~z}~z}~y}~y|}z|~y~|}|~y{~{~z|||w|}y{~|}x{{|~}y||~~z~{~z}~y}~z{~}z|{v~~~z}|x~}y|{w~~}y~{}}|}|y|z~{||}~{|}z|}{w}{x~{x}yw}z{xu}z~|x~{}{x~{~{~{y|y|y|wu~{x~{x~zx}{}z~zx|xv}yw{vt|wu{wu}xu{y}zx|yv}xv|wv|wu|xv}yv{ur|xu}xv{wuzurytr{vt|wt{vsztr|vt|ut{vtzurysq|vt|vuxpn~wu|trysqysqzrqztrysq{ts{trzsqwpnxqoztrxpnxqp|ts{rqwpmxpnxonwnlzsrzqpzpownlxonxpnxpnwonuljumkxonvmlxqownlvnlwnkwmlvmkskitljtkisigumktjhvmkshfvnmwnmtihsPOtrtptrtuqsswt|vxzzywwxx|y|{{yzz}zzy~~{z||~|~~~{{{}{~{}|{{zy~|yy}}{z||y{xx{yxzyzvzxyxy~ywyxwzxzxvywyzx{vzwyxx{wyx}z~ww{w{{|z|y}||{{}~}zz}|{}}{}}x||{{|~x{{}}y|}|||zz|z{yzz{xzytv{wywxsvsutssttrotOrNksiluknwmhsfnwlmvllwkjuioxnowmnvlownmuknvlpynltjmwlnvllvjownqyoovmovmovmnukowmownqyoqyorypnwlqxos|rtzrszrt{su}sqxorxpszrqyorxqt{ru{snulv|tw|urxpu{sv{sv|tsyqrxpv{st{st{rszrszqv|tw|tsypv{sx~vx}vrxovzttzrw|vx{uuzrz}wx}vu{sy}ww|uv|tzwz~wz~wy|v}zz}wy|vx{ux|v{}y{~y{~xy}w}y|z~x{~x}z}w~{z|w|y}{{~x}zz~xz}w}y{|x~~z~{}z|y{}x{}x|~y{|x~{}|{}x~~z}z}}~z{{w|{~{{~z||x~{{{w||~~z}~y~~z}|~~|~}~~z|}~z~||x}}y~z|~{~z}|{x|}}y~|y{}~~z~z}{x}{x~{~z~{x|zwzyu~{}zw{y~{x~{~z}{w~{~{zxu}z{x}zx}z}zw}yw~{x|y}yv}z|y~{y~{}z}yw|y{x~zw~zx}xv}xu~|y}zw~ywyur}zw}zx}{{wt|wt~{y|xu|xv|xv}xuzur{us}wu{ts{uszsq}wu|wuxrp|wuzur{tr}wu|uszsqyrpyrp{us{trwqozsrxqoyrpxrp{ts{ts|usyqoyrqyrpxpnzsqyqoxqoxpoxqoxqoyrpwmlwnlvmlyrqunluljvmkvnltljukjxqoumlvlkumktkjtkitjiukjvlksihvmkvnltkjtigsjivlkumksRQpptwstvtuwxvyttuuxwwvxy}yx{yz|}z}}~|{{|}}{||}}~w||z~}{}|{|}{z~~y{{{{zy{{|{xyyyz{vzx{wxz{xx{wxxvxyyzzxyy{{{{yzyxy|yy{{~{|x~zy{{{{{|||z{x{}|}|{||{|}|{}{{|}zxzzzz|zywz|vvxyy{xx{wutwuvprpsqqLrKktjjtiluklujksijthkviithnwmlukmvllujpwnjthlvjoxnowmqxnjrgnwlmwlpyoirgpynoxnovnowmpxnmukqwnrzqqxopyoovmpwnu{sovmsypw}usypt{rrxptzrt{rqxoszqsyqqxow|tu|stzqv|uu{sszpy}ww|uu{styqzxtzrw|tv|ty~wy}wx}wx}uuzsvztx|uw|tw{uz}ww{tw}uuzsvzsx|uz}wy|vx|vx|uvysx}v|zv{t~|w|u}z|y}z~|w{u{yz|w|z{}y{~x{~xz}w}|yz}w~{|z}z|z}}z|~y{{w|~{|}~y{|w|~x||}x~{}}~yz|w|~y~z||~|{w|}}z|{{|}z~z~~{~~z{zu}}y{~~z}}}}y~}y||~~~{}|{w~}z}|y~}y~}z||y|zv|}{x~}|x~}z|~}z}zw~}z}{x}|{w~|y|~{x}z~{|z}{}yv~|y~z}z~|y}yv|yw|y{x|yv|xu~{x~zw{yu}zw|z|xv~{y~{y}{w|xu}yw}zzw{vt{vszx{vt|yv|wtzx|wuyur{vt}yw}vtytr{us{sqzx~zw|vu|wu|vt|wuxqo|wt|vt|wt{urxqoysq}xvzus{usxqoyqowqnyrpzrq{tsxrpzrpwomxonxqoxonxrpyrpwpnzsqumkxpnypownlxpovnlvnlxpnvnlwnluomypownmvlkvmktjhulksjitjhtkivnlvkjulkvlkukjvmkujhtjiskjqLKrtppssrwuwwwswvy{xvw{xzy{}w~{y~{{y}~}|}}y~}{}|}y}}||z{}||}}zy{yyy}w{y|z|{||{zzxvz{||y{{vx{vy{x|{xyzvuy{w{vv{xxyywyxyzyz|z|{zy{|}{~|{z{z{}||{z|y|}{||{{~{|~z|~{}x||}y|{}}yzxvyyywztuwuxvuutsrsstnLpKmvljtinvlithjsimukirghsfishkvjjtilukktimvkktiksikujltjnvmpxnnumoxnowmszqpynpwnowmnwmpxnpxnqxopwnovloulsyqqypv|tw|umvkt{su{sryptzrtzrs{qqwntzsu{sw{uszruzrrypw}usypt|rv{sw|ux|uv{suzrrwpu|sv{tv{ty}wu{suzr|zw|uvzsw|tywz~xy}w{}wz~xy}vy|uy}vy~wx|uy~wy}vvzrzxzx{~xz~xw|u|y{~xwzt}{{~xy|v{}xz~w{~y|~yz}w{~yz|vy|v~z}z}{~{z}w{}w{}w}~{}y}|z{~y||}x|}}}z}z}z~~z~z}}z}~~z~~~y{{~z}}y}z|{~~z|}~~z{}{~~y}}y|}}y}}|x}{}}y}~z~}z~}z}|x}y||x}|x|}|x}~z|~{~{}{x|y~{|~z~|y{y|~{x}z|y|y|}z~zx}zw}z~{y~{x~{x|zw|zw|y|z|zv|z~{x{xt|wu~zw~zw~zw~{x}xv{us}ywyw~zwyur~yw|wu|wu|wt{vtyxztr~ywyurvqn}xuzus{vt{vt|xu}ywxsqzsqzus{usxrpzsq{vtzrqyqpyrpxqo{vtwpnytq|usyrpxqnyrp|vtwomyrp|vtzrqyrqwqovomwomvnmyqovmkxpnvpmzsqvnlyqpynmumkvomwnmulksjiumkwnltkitjiwnmwomukiukjwnlrhfqfetkiulkuljrigsihrgftQPsrosttuuvvuvzuyvzwxwyxyz|y}}xz~|y{{|z}|{|}}|}{}z}~x}y}y{|}|}}|zy{{x|zz||z{x{vx{}zzzzz|}{yz{zw{zyxuxywz{yxywwyyy{z|z{y{{z{ywy{zzwv~y{}x|{x|{zy||}|{{z}z~y~z{{{y{}y|{{|z{ywyyuvwxxwwwvututqrqqssOrNishdpcmuklujjshkuijtiksjnwmjshnwllsiktiowmmvlmvljthowmpwnnxmlvjoxmoumovnmvkjshqyppwnqyorxppyonvlqxoszqqxpovmnvlt{sqyoszqrypqwoqyorxptzrpvnt{rv|tpwnx|ut{sywtzrtxrv{sv}uw{ttyqv{tuzrx}vzxv{tvztx}vw|uw|uuzsx~vv{ty}wy}ww{ttyquzsw|uy}vy}ww|ux|uy}v|yx{ux{u|~yx{uz}w{~xz}wz}wy|vy{vy|v{~w|z}z{~x|~y~{xzt~{}z~~z{}x}|}{|~y|{}yz|w{~w|}~z~{~z~|~x}|{~~z~~z~{}~z|}y{|{{|wz||w{zv||w~}zz{v~}z}z~||y}}y~~z|{x}}y}~z}|y~}y}{w~z~{~}z~z~}}|y~|y~|y}{~{|~~y}~{}~{x}~}z|y~{}{x~|z{xu}z|z}{w|zv|z|yv~}y~{x}{~{~zw~{x|yv~|yzxu}{x~yw}zx~zw~{x}xv}yw}zw}zxzvt|y}zw}{zx|wt{wt{wt{vt|wt|wu~yw~ywztq~yv{wu}wu}wu}xv|wuyur}wu|wu~xwxqoyur|wu{us}wuzsryrq}wu{ut}wuwqnysqysqyrp{uswpn{tr{rqzrpyrp|utyrpyrqwpnzsqyrpzsqsmjyqoyrpyqoyqowonwpnwnlxqowomumltljxnmxpnukiwomumkvmktjhvmkuljvmktkjumluljvmktmktmksihrNMprqrsuvustwvwuzyxwyywy}||xzxzzz|y{|}{{{x|||~}}}{}{{yx{wz}{}}}|}{{y{{{xy|wy{{{|zz{xxzxzxvx{yxyx}y|xy{v|xxzzzxx{xzz{x{yyx|||{yz~||yzx|}{|{|{xz}z}||~~|~z|}{y}|}}{yzwzz{uz|zzvzxyxvwuvussssrqtrqpLrKisghrgkujhqfkujktjktjjtilujnvlktilvkkuioxnnvlnvlktjltjmvlovmrxpnvmqyolvkpwnowmrzpsyqovmoxmnvlqxooxmpwnu{snult{rsyqpxnowmtzrqzpsyqsyqrzppyotzrsxqszqu{sszqsyrv{tx}uw{tx|uu{svztsxqw}vv{sx}vuzstyqx|vx}vw|ux}vw{tu{tw}ux|vtzrv{swztx}v{~xuzrz~xx~vz~x{~yw{uy}wx{uy}vz~xw|ux{u||yz}w{xy|v{~y|y{~x{~xx{v}~z{}x|~yy{v~{|z~{~{}~z~{{~y}z{~x|}z~{xyt||x|}{~{~z~z|~y}z}z~~z||x}{{}|x}~z{|x}}y~~{|}}y~~z||w}|x~{}}y~}z|{}}y|{w|{w|}y{}{~{}|y~z}||}z|~}y|}{y{}~|y~{}{}z}{x|}z|yv~|y}{w}{x~~z}z}yv}z|yv~{x~|~{}zw~{x|zyws{wu{yu~{x}zx{xt~zw|xu}xv|zxur{wtzxzwu|ywzxu~zxztrzvs|xv}wu|xv|wuzvszvt{wu{wt|wuzus{xu~yw{ts~xv|vtzsq|wu{tr{vszus{vtztr{sqxrpwqnzsqysqysqzsqwpnxrpyrp{sryrp}vtyqoxpovpnyrpxpnvnlyqowomxrpvqnyrpvmlwpnypnypnwonvnlxrpvmkwonwomvnlwnlsihumkuljvmlvnlvkjtjhsigtkiukjtjitjitjivlkqfesSRqpqsssvttssvwwswxw{xz|xyy}x{{z{z|{y~{y~|x}}|{}|z~}}~{z|||~z{{{||xz{wz|zzz|x{z|zzywwxz|xzvyxzwwyyw}{xvwvyzuxx|y{wzwx{}xz|y{}y}zw{{{||{|}}|z{|{y{}z|z}|~}|z{}z{{y~z}~}z{{{zv{yyzxxxvuvuwsyuqtqssssoNpMirhhrfhsfiqgmukmulktjmukkuinvmlukluklujnvmmtlnwllvjnvlpxnpyoktimvkqyooxnqxoqxoltjqxot{rpxnqxonulszrryprzqszqqwnrypryppxnsyqpxns{rqxorxpownrxouzsu|su{sv|uv}tszqtzqu{sv|uw|uw|uy}vv|tx}vv|tw~vw|uz~wy~wv{tuyrvzsv|tv{ty}wv{tv|tv{sw{u{~xx|vz}wx|uuysx|uy}vwztz}wz}wx|u}{wzty}wz}wz|w~{||~y|zxzu|zz|wy|vx|u|z|w|~yy{u|~xy{v}zxzt|}y~z{}x~|~{z|w~z}}{~{|{{w~{}~y}~{}~{~{|}|}z|~y}}y}~z~z~{||x~~z|{}|y}}y~z||w}|y|~{{~~z}{x~}y||~}y~z}{}}z~{{zv}{w}{x}z~{}|y}z~{}z|y~|y|yw|y|~|~|{y{yu|zw}{x}zw~{|xv~{x|yv~{y|ywzx{wt{wt}z~zx~{~zx}yw{xu{yzws}yv{wt|yvzvsyur}xu|xuxtq|wuysqzx}zx|xv|wu}xu{vt{vszvsyrpztr{xu{vszus{uswpn|us|vu|wuysqysq{us|wtytrxrp{trysq{tszusxro{utyqoxqoyrqzsr|trxqoxpn{rqvnlxomumj{sqzrqyrpzqqxnlvnlumkuomumkunmwnmvmkwomvlkulkwmlwnmuljtkjsjitlksjhuljukjsjiukjukitjiqLKqvstrstttwuvxtsuz{zxyz{{{z|w{}yz{z||{z{zz|||{{}||xxzz~yuz|{z|}~y{{y~|yzwx{xz|yxzzzy|xy{yzy{vzwxvvuvzxsxxyx|{zxy{x{x|y{xyyu{zzx{y|{yx}|vxzy|}||z{~|yz|}}{|x{{}{z}}{{yz{xy|yzyyw{yyvxzuuvwtsturrsqsqKsKjthirgkujktikujlukiqhisgjrhjtiowmownnwlmxlkujmwkmvkowmnwmrzqpxnmvlpwnpxnovmmukrxpqxoowmpxnpxnpxnpxntzsnvlqwnt{sr{qt{rqxotzrpxnryoqxpqxorypszqryprypu{tv{tuzsrypsxpsyqt{rw|usypx|vu{sw|tuzsv{sw}vuyquzsx~wx|uw|tx~vy|ww|vw{uw|ux}ux{uuxry|vx|u|~yz}wvztxzux{u|zz~x}zz~wy|vy|v{}wz}x{~y{}x{~xx{uz}w|yz|w~||~y~|~{~{}{~xx{v|~y}yz|v}}{}~y|~y{}w~z{|}x}}~y}}}y|}z{{{w{}x}}y~}z~~z{}~y|}y{}x}{|w{|w||x}}y{~~{|}|x~z|{w~}y|~}y}}y~}}y}||x~{~}y}|y~~{}|y}|y{||y{~|z~z}z}}y{yu~{{yv~}z}{x~|x}yw|yv}z~{x~{x{xu}zw~|y|xu~{x|xv{y|yv|y|yv|zw~{x~zw|yv|z~{x{wt}zx{wuyurzvszvt{y{vs~yw}ywzvt~yv}yw}xv~zx}yw}yv|vtztr~yw~xv{us{us|wu~ywzus{wt{vs{urzsq{vt|usztqzvtztqzsqwom{us|utytryqp{sqyrqvpnyrp{tszsqzsqxqoxqovomxrpvnlvnluljwmkzqowpnxnmwomumlvonysqwnmtkjxpnsjhxnmtljwnmvlksjivmlulkukjrjhtljwmlulkukjrgfukjujisihqMLsorrutrruttxuvvwvvwxx{}|wy||zy{y}{|{~yy{{~|}{|{}{y}{}~~{}|x{}|{|||{z|yy}z{{xxyz||||vyuzw|yuzzxvyzyvywxvwyzzy{xyzwzz{ywzzz|x{wzy||{{{xzz{z{{w{~{yz|{z~|{|z~{z||z|{{{zyw|yzz{{{|xstuwuuuuwstrtquusqpLpKhrghrgjshlvkktjisgmvknwmjsgjtilukktimukmwllvjpwomulltjltjnwljshnvlnwmmwlpwnpxot{rnwmpwnnvlltjrxppwnpvmpwnpxnowmqyopyorxpsyqsxqtzrqxprxpu{srzptyrryppwnrypw|usyqtzrpwnw}ux}vx}vuzsx}vy~wu{styquzsw}uuyssxqw|uu{srxpx|vvzty}wuyrwztz~xvzty}wz}wz}wsxpy|ww{ty}vy}wy|u|~y|zz}wy|v|ywysz~w|~y}zy|wx{v|y{}x|{|x{}x{}x~{|}x{~xz|w~|z{v~{yzv}{y{v}z|}y}{~{{}xz|w}~y}z{|x}z{|x~|~||||xz~~z{}}y|}x}}zz{v|}x|{x|~~z{~}y|}~y~~z}}x}}x}}y}}}y}|y~{~|y~~z~}z}z~z|~}z}|x~}z{{v}z{zw{|zw}z{yv~|y}{x~}z~|x}{x~|y~~{x}{~|y~{|zw~{x~|y}z~{x}{x~{x}zwzvs|yv{xu{xu|z}yv~zx~{y{wt|z|yw|wu{vt|xu{wt|wt}xv}xv{wt{vt{wt{uszuszusyus{vtzur{z{wtyus}xvytr}wu{vt{tsysqwrpztryrq{tryspztrztrztrwomzsqvolytr{tswspzsrxonzsqxqoxpnwnmwpnyqpyqpypnzqpzrpypnxrpvomtkjwmlxqpxpovmlwlkwnmvnlvomtkiunlwnmtjhsjhulktjiulkrjhtkjukjuljulkqheukjtjhskipMLnqrtrtstvvvtszwwyvxxxwyw{||z|{w{{|zzz{|y{{|}}yv}{{z{{zzzz}~yz{y|{|w|{vz~zxy{|zxz{x{y{v{wwvxxzy{xywyyxxz{vyv{xzywyx{w|zz{{{{zxwy{}||y{{{|xywv|{{zyz}{x{}z|{{~{zzy|{}x|y~}{zzwywvwvywyvzwvuwuuvqqqsstoLqKdpchrfnulirglukjsihsglujkvjltjnxmmvlmulnvlmvlmvlnwljshisgnvlnvloxnlukpvnownnvkpwolujtzrqxopxnoxnpwnqyorzpqxopvmpwnryppwnszqqvoszqsyqqxoowmuzrv{trypszqpynz~xrxpw|usyqy}vv|tv{sv{tx}vtzsuzstzrsxpuzsw{usyqw{uw{tv{suzs{yz}wu|tx|uywx|vuzrvzsz}wx|uz}vw{uz~x{yx{uy|vy{vx|v{~xz}wz}wy}wy}w}zw{t{}w|~y{xvysz}wz}wy|v|zz}w{}xz}xz|w|}xz|w~~{{~x|}y~{~{}y}~z~{|~x~{~{{|w~{|~y~~z{}x|}|}x}}y||x|{|{}w}|y~~{}}y~{zzuzzv~zzyu~{|}x}|x~~z{|w~~z||y{|}x~}z~{{|{{w}{x|zv}}y}}x}|y}|y|zw{zv~}z|zw{~{~{y~}z|{w}{x}z|{wzyu|y~{x}{x~{~yw}z{xu|yv|y}{x{yv}zx~|x}yw}{w|xv~yv~zx{x~zx|yu~zxzwt|xu{x}yw~{yytq{wu{wt}yv}xu{xv{wu|yvyus{us|xvzurytq|wu|wtytq~yw{us{tr{us{us|wuyrp{us|vtxroytrxrpzsq|trzsrwpnztrxpnwpnyrpztqysqxrpwonvlkxqowqo|vtwpmyrpunlwomyqowpnzrpumkvomyqpvnlvmlvljxpovnmvmltmjvnlvmlwpntkjtkisjhtmkumkukjukjtlkxonrigtjhqigsihrNMsqtssrstsxuvuxxtutzxyyzwzxwy|y|}{zzzz}~{}}|}x{z|{}~}}{{xy|z||{{z|z|x{zy}vy{y{yxzuxwyzzywyy{wwzwyzxy{vzyzzzyzyx|y~|zz|wz{x{zz}{~|yz{}|~wwy{z|{z{}z|}wyy||{|xx|{x}}}x}xzzzxzwwxz{twxvtuuwttrrsqptrMrLisghrgltjkuiltkishkujkujmvlluklujkujlujlvklukktjmukmvlktimwlnvlovlnvlpwnmtkmvklwknvls{qovmnvlowmqxonwlqzopxnrxpownszqszqqworxoryoqwosyqsyprypsyqtyqsyqsxqsyqw|vszqv|tqwoszqtyrv{tqvnw|uszqsyqrwov{sw|ux}vu{suzrx|uuyrvztw|uuzrx{uw}ux{uy}wx{uy}wxzuv{t|zy}v{ywzs{yy|vz}wx|u{}xx|u|~yw{t{}wx{u{~xy{v|z|~yy{uyzvz}xz}x|}xz|v|y{}xz{v{~w{}x~z{|w{}x}z||~x~{z{v{}x~~z~{~}~z||w}~z{||x~~z||w||}x||x~z}}x}~z}}y~}y|}}x}}y~~z~{|y{{v{~{{~~z~z~~z~{zzv}|y~~y}}x{{x~{||yv}{x}z~|y|zw{~|x}z}|x|zw}{x~{y~z~|yzwt~{~{|zw~{|yv}{w{yv|xu}z}zw|yv}zw|yv|y}z{y|xu}zw{xu}yw~{x|wu~zx{xu|z|yv}yw{wt{wu}ywzus{wu{y}xvwtq|vt{vt{tr}xvysqvqozvs{vsztrxroysqxsq|wuyrp{vu|vt{trxqo{trxqo|vtzsrwrpztr{trxqnxqoysqyqo{trytrzvt|sryrpxqoxqozsrxqowomumkxpnwqowqovmlwonxrpuljypnunlrigvmkyrpvnlsigulkqjhukjtkitihxqpvmktljtkjsihvnltjiuljrhfsjhsigsOMrpprqtstqxtpvyvxuxywzwxu{y|z|zyxzxzzy|{|xz{|~}|{}}zzxy{yz|yzz{zz}{zyyxz}zx|xwz|zwzxy}{zyx{yzyzzvxzyyyyvyyy{wzzvwyy||{|zzzyx}{y{yx{||x{zxy{z{zxz|{x|z|}}{zz|}|}z{|zwy{xyyyv|xxvvyzxuxzuutsutrsqtpsqqLqKktjhrfgqfhrghsgishjshksilukltjktiktijtilujmuknwmlujltjnvmmvkpxonwmowmnvlmvkowmktjpxopxopvnqwopwnqypmulnulowmqxoqwopxnqzpsypszqryqqyopwnu{ss{qswpu{suzssypqxou{su{sv|tpwnszquzrtxrw|uv{tuzsryou{suysy}vv{svztv|tuyrv{tw}vx}vv{tvztuyrvztw{tx{u{~xz}wy}vv{tx}vwztvysz}xx{vz}wz~wz~xy|v}~yy|vy|v}zx{uy|vz}wy{v|z|yy|v}{|~y{}x{|x~{}~z~{{~x|}z|~y|}xxzu}~z{}x|~y}z~zz{v}~z~{~{~z}}y~z|}|y||}y||w}}~y~~z~}~y~}yyzv{}~y~}y~{|}x}}{{wzyu{{w~~z{~}y|}z}|x{zw~{~{|}z~~z}z~|x|zw~|x}|y|}z~z}{x~z~{y|yv~|y~|yzwt~|y}z}z{xu~zw|yv{yv~{x~zx}{xyws~zx~{x}zw{yu}{x{zv}yw{wt{wt|zw{wuzvszvszvt|ywyur}xv{vtyvs|y{us|wu}yw|xuztq{vszus{us{vt|uszvszsqwqo|wtytqztqztr{us{vtyqozusyspvomxqozrpwrpvpnztrysrxqpyrpxpnvpnwomyqpxonvnlvomwpnsljwpnvnlsmjwpnzrqxpowomwpntkiwomvnlxpownlumktlkvnlulkulkumktjitihtkitljvnlunlrigtkjsihsjhtjisjiqMLpqporussusttutyyuywwxx{xz}ywz|{{|{x}{{{|xzz{z{{}{}{z}|y|z|{||{yyyz{{yz{{x{z{zy|zwyyyvzzv|w{{yvyywxwwzyx{xvytzzxx{y{{y{|x{zzyx|zz{w||{z|}wy{yy}z|~|{z|zz{z}{{|{zyxyz|{xz{xy{vwzxvytuusursuuvqqqprpKpInumjtiksjktiktjjsiksiishmvkowmmwlktijsimukhqfmvllujnvlnvmmvkmvkovmnvlmukoxmownnwmnulpxnownv|trxppxnownszqrxpqxosyrszrtzrpwnsyrrxpryqowmpwnovmqxotzrqxouzrv|tv{tu{ssyqu{styrv{tsypu{sv{tw{uz~xw{tw{uw{tv|tw|uwzty|vy}wtyrx|uwztvzsy|vw{t|zuzsy|vw{tw{tw{tz}wx|vx}uz}wwzt{}xx|u|zx{ux{uz~w|yx{u{~xz}wy|v}yy|vy{vx|v}zyzuz}wxzux|v}z~{z|wy|v|~y}~y}zz|v}~zz{v{{w}~yz|w||{{w|}x}~zzzu~{{|x|}xy{v|~~z|}y||}x|}y}~~y~~z}}y|~~z{{w~{|{x}}y{{v{|{{w}{|w}}y~~z||x}|x}{x}}{x{{w|~|x}{x~{y|y|{w{zv|yv~{}z}{x~~{~}z~}z}|x~|y{xu|~{|zw~{x~|y|yv}yw}zw{y{wt}z|zw~|}yvzwtwuq}yv}zw}yw}xvzvs{xu|xuzvtyus}xv}yv}yw|xv|yv|yv}xv{vt|yv{wu~xv{vs|wv{vtxsp{trxqo{tr|wu{us{wuytrxsp{tr{us}usyrpzsrzusvpmvomxrpwqoyrqvpmxrpxsq|vuwqoumkvomxqovnlxqpzsqwomwpnypoxqoxpnwomxpnvomvnlumkvnlvonvnlwlkwomtjhwmlvmkumltljukiuljtkivlkofdtkhtkitkisjhtjiqhfsihqNNrrruprppttwwwtxxuxvywyzw{z{{~y{|zz}~|{z|||{{~~|zx~z}{z|zxx~yy|xz|~}{yzzwwyw{vzyvwyyy{yyxu{x{xxzuwvyv{zxvzxy|y{zyxxywyzx|yxzwzz}yyz|z{z|{{z{x~{|yxzxz|{{}}{||~zy}}|zz{zz{|wxv{v{vtvwvwvtvxrttrsqspqpLrKirhgpfisgjsijtigpeithlujmtkktjkrimvkjtiltklvknvljsinvlownktimukownoxnowmnvllujpxnowmnxmowmtyrnulownovmnulqxppxnrypqyppxoqxooumrzqszqrxpqwoszrqxpovmrwou{ssxqt{sqxntzrv}utyrsyqv{tsxpsyqqvnsyquzstyrw|uw|ux}vu{sx|vy}vx|uw{tzwsyqw{u{~xy}wx|uv{tv{sx|vx{uw{tz}wvysx{uz}wv{tx{u{}x|zvzsw{vx{uz}wz|w{~x}{z|w|~y|~yy}w{~x{~x{~y}{}zz}wz|vz|vz|v{|w~{}z}~y{}x}|}x|}x{}x}~z}}y}}yz|wzzu{}x{|w{|w}~z{{w}}y|}y~z}|x{~{|{zw||y{{w|{w||}}y~}z~{~{}}y~{zyu}~z{zw}z|~}z~}z}{x|zw}|y~}y~|y|}{xzxt~|y~{x}{x}zw}{x{yv}z~{x}z~{x~{x~{y~|y|{x{yv}zw}yv|xv|zw|yw|yu}z}zw~|yyvs|yw}yw}zx{xu~{y|yvzuszwt}ywyvs~{y|vtyvs{wtzus{vt{wuxsp{wu|wuxtq{vtxsq|xu~ywytqytq{vtytq|wuysq{vszvsvpn{trzvt|xvysqxqoxqoysq{tqztrysqzusxqozsq{usyrpyrp{tswpovolvmkwonwpnvonxpowpnvomunlxontlkwomtkjuljwomvomvmlrigumktmkulkwomwonsjhukjwpoulksjhtkjsihvmlumlvmlqgesjisjisjhnKIporqrsrttrtvtwwuxzxwwvuywywyzzvx{||yy||x|wzx{z{y|xxy|{y~y}}||y{|x|zyy{xw|yx{x{wyzwzyz{{ywyzxzzw{txyzwwuyzywxxywxyzzs{yyxxvzwxzyz{yz}zz|zyzx{}|{{{z}zz|yzzxyz{zy{zxz{}z{yxww|yxuxyvsvwutostrrrqrprpLsKltkishktjirgmulishnvljsilukithlukovmmvlktiirhlujisgoxnmwljuiltjlukmtknulrypnvlmukpwnownksipwopwnovnnvlrxprypszqv{tnwlrxotzrsyqnvlszqtzrs{rpwnqxoqyootmtzru{ssyqtzrsyqx|vrxpsyqv|ssxprxpy~wrxox|uvzsw|tx|uw|uw{ux{uv|s|yv|tx|vy}vx|vw{tuyruyrvzsv{ty{v{~xy}wy|wx|vx}vz}wx{uz~xz}wxzt{~x|y{~xx{u{~xz{w}~z{y}{{~xy}w|~yy{vy|v}~z}zy{uz|vz|v|}y|}x}z}~y{|w{{wz{w{}x|~y||x||x}~y}~z}}y}~~z}}y||}y~|||x~~zzzv~{{}x}~z||x}}x{}}y}~y}}zyyu|}x~{|{w{|w~{|zv{{}|{w}|x||x{yv{{yu||w}{x}{x}|x~}z|}|y~|y|zw~{xvs|zw~{{zv}z~|y{y}zw|yv}zxzxt|yv}zw}{x|yw~{x}zw}zw|z}{x}ywzvsytryus}yv|xu{y|yvzwt{vs{y~zx|xv}yw{xu|yv{vt|vt|xv}yw}xv{y}xv{wu|wu}wu|vtzvt}wu|vt{wuwqn{usxqozurxsp{vtxrpvpm{us|wuzusvpm{tryrqxpnysqysq|ts{sryrpysqytr|us|tsumkwqoyrpumkxqowomuomumkxonvnlvomvnlvomzqoxomwpnvnltljumktmlwnlwnltkiumltkiukjvmlsjitkjtljsjhtkiuljsjiskiskiqNMrqrssstutxwtwtuxyzxwyyx|wzzyy}~x|{y}y|{}z||yz{zyzw{yw}x{zz|w|twyzuy|zwyyxyxzxww{w|xwzwwwyz{u{xvy|wxwvzwv{yvz{}ywvwyyxw|yzxy|x{yzx}yw||zzy{y|y|z||}z|{x|{{~zy~z}x|yw{y{{xvywxzxzvwxwvrvtuvvvupsrppqqMrLishjsijshhqgltjirglujmvlltkkujishnukltjnulnulpxnownltjkshlvkoxnlvkmulnvlltjovmmukpwooxnqxonvmowmqxonvmqxppwnqxopxoovmoumpwnnvmovmtzrrxpqvontltyrrwprypqxopumrzprxpuzsqxopxosyqsxquzsvztuzsvzsv{tuzrsxqwztvysw|uuyrtyqy~wx|vw{uwzty|vuxqx|vz~xy|vx{uv{ty}wtxrz~yy|wuxrvzs{}xwzuy|vy|vx{uy|v{}x{}xy}wz~xz{v|zy|v{~xvxs{~y}{z|wz|wz|w|~yxzuz}wy|v}~z~|~{|~yz{wy{v~~z|}x|}yz{v}~z|z||x{{w~{{{w~{|}y}}y}}y||w||}x||x{{wz{v||x}~}z}}{~~z}|x|{x}z~{||x|{w|{w|yxs}~{|}{x}|y~{{yv|{{w{zu}z~zx~}y}z}|y}{x~}z~{y}zx}z}z|{w~{x|y|zw{yv{yv|zxzur~|z~{x|yv~{y{xu}z~yw{yv{xu|zv|xu}yv~zx|zv}zxyvszwtxtrytr}ywzvt{xu{y{xuzvtwrp{vt~yvzuswroxrpzvt{wu{vtytr|wtwroytryurztrwqnytrvpnzrqytqwpnztswroztsyrpvomxqoyrpzsqztrzsqwpnzsqxpnvolyqovpnxpnwpnrljwrowomxqpskixpowpnzrpsjhwontljwonulkxontkisljvmlrkivnlvmksigumkumkvkjvnmtkiukivnltkjsjirhgqheskiqMLsorsqqstutuvvttvtyuv{vxyx|vzy{z{zyyyz{z||z|z}~y||{z|{yz~z{y|}w{}}vz|zyz}{x}{zw|{wztwyyw{xywyxwyxwuuxyvyuwywwvyuxzvvuxwtwzzzy|zzzz|y~x{yw{{x|xyyz{}}y~|z|{zy||z|y}{z~xxx|zy{wwyyywvvzvvuvtststsrpsnqKoJirhfpehqgjshjtijthhrgkujirglvkhqfnvlktjmwlkujnvlmvlktiltjktjnvlkujltjktjltipwomukowmnvlovmnvlpxnsyqpwoqyoqwonvkrxpqxoovms{rqxopwmsxprwpryqqxorxorxprzqszqtzrsyqsyqx|vpwnsyqrxprxpv|tx~vv{tuyruysv{suyrz~xv{tw{tw}uy}wtxqtyrv{sv{sv{stwquxrw{uy}wxzux|vv{t{yy|vy|vy}ww{tz~xvzsy|vw{v|~yv{ty|vx{t{~xx|ux|uz|wz}wvzsz~w{}x{~x|~y|}xz|w{|wy{v{}x{}x}z~{||xz}w||xz{v}~z{|w~{{}wz|v~z{vz|w{|w{|w~~z||x{}~y|||x~z}~z||x~~z}|x{{{w~{}}y{yv~~z}}y{zvxxt~~z}|y~~z}z||x}|y|{w}||x|{w|zxu~}y~{}{x|yv|yv}zw|{x{}{w}|y~{{zv|{x|xv}z{wt|{w~{x|yw|yv}zw~yw{xu|{w{yv{zv{yu{zvzxu}yv}{|zw}zwzwt|yvzwt~zx|yzvs{xuzvs|xvyur}xv{wu}zwzvtzurzwt{wuzwt}xw}xvzus|xv{uszuszvszusysqzus{vt{uswqoxsqvpnytrwrpysrzsr{usztqzus{utxqovpnxrpysqvnlxspwpnwonwonzsqvomtnlvnlvnmwqoxpnunlvnlvnmumlumlvmlvmlvomxpovnmwpntjitljvnltljtkjvmktkiumlunlskjulktkjulkvmltkjsigqhfrhfrihuNMnoossrrsvrtsuurutuzwwywyzwy{zzyzyy|z|z}|z}{xyywz||xzy{{{vyzyxzy}zz|w{w{{zy{{zyxyzyywxyxzvwuxyxzywuztxxux{yx|xxxyzyxyuwyuyzyvzzyy{{z~x{zvz{zv{||z|ty{{{|||xy{~}zy{{zy|xxz|{{vzzvxxyvuvxuuursspqosrrqrKqIjsihqfjtiktijsiirhjtijshownithltklukjshjsioxnktjnvlktikujnulksimukqxpnvlmuknvmltjovlmukktimsjrxpowmpvnpwonvlnvlpxnpwnovmpwnltjsyqotlqxomtksyptzrsxqpwnryppvnszrsxqvzsu{stxqsyqw|utyrvztw{uw{uvztu{ssyqv|tu{styqw|uryqx}vuyruzsw{uy~ww|tx{uy}w|zx}vwzty|wy}wy}vvysy|vw{tz}w|~y{yx|ux|vz~wy|vwztvzt{}xy}v{~yxzu|z{}xz}xyytz{w|zz|vyytz|w|}y|}y|}y~z|}yxzu}}}y}~z|~y||y{{w~{}}yy{vyyu{|w{|w||x~~z||x|}xzzv}~y}|y|{|w|}x|}x|wws~~z{{w{{w~}y{{wyxt~}{~}y{{w}|y~|y}|y}|y}{w}|y~{{yv~|y{~||zw{zv|{x|z}|x~{x~|y{zwzxt|yw|yv}{x{xv|{w}{x{yv{wu}|y|{x~|z|yv{yv|yvzwtzwu}xv{yv|yv|xv|yv{wtzxtyvs{yyuryvs~|~ywxtqxtr{vs{vt}ywzvsyurztrwro{wuytrwspyus|vtztswrp|xu{uszus|vt{usxspzsqxrpysqzur|vuxspztrxqoyrpxrpwqowomvnlysqztrwpnwqowqowqnvpnvmkxqotlkyrpvnlwpnvnkupmyqowontljwnmxqotmkzrqwomxomwomunmumkuljvnmqigulkvnltkiskitljrigulkukisjhskjvomqhfqhfqgfrigskipNMroqsrsusutvuvuuswwxzwzyu{y{}|{}zzyz{xyz||vzz{|{}}wx{zyz}||z{||yyuxzy{zz|zy|wxz{|xyzxzzzvwyyxvxuzzwxxxwvxvzvxxxxyxzwvwxzzyzx|zy}wwxzyzwxwzx}xy||z{|y|{|}w|||yx}xxz}yyzxwvxyvvvxyuwxvyttvuwsussstronqInHktjishktjjshlukepdmtljshlskltjisglsjjsimulmuloxmmvlovmkripwnmvlownltjmulmvljtisyqrypnulqxoqxomukowllujqwnntlrypovmpxnpwnqxoqwoovmrwot{ssyqtzrtyrtyqrxpv|tu{stzrtzrrypuzsuzsuzssyrtzrrwptzrtyruzsw{tv{tx|uvztsyqw{tx|usxqy}vv{tz~xv{tw|ux|vvzsuzs|~yy|wx|vvzsy}vvzsx|vy{vy~wx{uvzttyry|wy{uy{uy|vxzuuxsvxs|}yz|vx|uz}wxzu{~y}z|}y|~y}z~|~{|}yy{uz{vxytz{v{|w~{{|x}z{}xy|v{}}y}}~y{|x{}xz|wxxs}}y||xyzu~z||xzzu~~z}}y{zv||x}}y}}y{{w~~zyyu~z~~z|{wyyu}z}{x{yvyyuyyu{zw}|yzzv~z~{{zw{zv|zw}|x}}y~{~{|{w{yv|zw|{w}{}{x~|x|zw|{w|zw|{w~|x|yv{xu|z}yw~{x|yv{y}{xxuq}{~zx{wu}yvzwtyuq{vt}{x|xv|xw|xv{wt{wu|xuzus{wtzwt|xvzvs{xu{wt}yvxtrzusysqzusyurwrp}yvytrzvswpmytrysqytrysq{vt{usztrxqpwrp{trvqoztrxsqzsqxqovomxqoysqwpnzsqxqoyrpxqovomwqowpntnkwonvomvomwomwpnxqosjhwnmwonvmltmkwnlvnltljtkitljtmkvmluljwmkulkvlkulkvlkrihtjirhgqhftjirigumltljumkqigrSRmrqqsrsrtvvttutwvvvzwv|wyzzw{xy{{zwwy|wv|zy}{yzv{|{z|~{{zz{}zx}x}vy{|yxxw|yx~zywzxzxw}yzyxwvwwzwx{vw}xstyyvx|yzvwzyyx{{|zxz|yzyy{ywywyux{x{}z{wzxy{|uzz{zwzxzyy~{{{yw{{yvzvvxzxzxxwxrssvtsssprrqopoNrMencirghsghrggqfhsgkujjrimukltjkujktjnvmnvlltjktintlksilukovmktimulnvlqxpqvolvkmvlmtkmtkowmmvlpxorxppwnoxmpwnovmpwnryprxppwnrxpqwoqxoqvouzsrwpqvnqwnrxqtyqqxorxpuzssxqpwnsxqrxpv{stzruzru{stzrtzrv{tsxpw|uvztuzsuzry|wvzsw{uw{tuzsu{sw|uvztuxry|vx{vx{uz~xw{tuxrw{uz|wvysw{uw{twzty|vw{txzuuysx{uz|vx|v}{y|vx{uxzuxzuy|uz|w{|x|~y{|wy{v{}x|~xy|v|~yyzuy{u}~z{|xz|w{{wz|w|}y{}x{{w{|x~{yzu~z}}y}|x{|wz{vzzw|}x||x~~z{|wz{v{|wyzu|{{w{{wzzv}yxt}}y|}x}|{w}}zzzv|~}z~{~~{}{x|{w~|zwt}|y|{x|zw|yyws}z~|y~}z}{xyxt}|y~}y}{x~|{yv~|y|yvzyu|zw}ywywt|yw|yvyvs}yv{xu{wt|yv{y}xw}zwzwt{wt}zw}xv{xv{xu|yvxsp|yv|xvzvs|yvytrzwt}xvytr|wt{vt{wu|wu{us}xvzusysqytrwrpzur{wuzvszvtytryur{vtztrvqnwqnwqoztrztrwrowpoxqoxpowqoxqovomyrpxrpvpoyrpzrqxpnwpnwpowqowomumkwpnwqowomumkumkxpnxqotkisljwomtmkvmlvljvnmtljsjiwompgeqgfsmjtljrhgvmlulkuljtkjtljtkitihphfsihrigskipNMrpqqprsustwtuuuwvuyyuzxvwvyyxxzzz|{}|yx~}w{{zzx{yyzx{|z|{z|zxy{{{xy{yvw{{yz|zuwzwxxvywvv{wzxxyuywxywwzuzuvzwxzyyzyw{xzxw{{uvyvzvx|zzyy{xy{y{z{x{z}y|zy}|{{|zyyyzyz}yyw}wwyyvxywwzuxvuvruqotppsqrsnqoMrLktiepdirhfqeirhlujlujgpemvkmulksjhqfkrijthlukksimvkktinvllukltkq{pktinvlowmoumnvlmtknulmukmtklsjpunowmlukovmqxopwnqworypqwnqxow|uqxopwntzqqxoqyppwnw|urxppvmqwou{ruzsrxqw{trxpswpt{ruzsx}vrxpuzsv{tsyqvzsv{tu|svztuzrtyrw{tvzty}wv{tx|uy|vtzruyrvyrx|uz~xy|ww{tx{utxr|yuysx{vu{sy}vx{u}z{~xvysxztz|ww{uwztz|w|~yyzuy{vy{vz}wxzuwzu|~y|}xz}w{|x{{w{}x{}x|}xy{v}~z||y|}x{}x{|xz|w{}x{|wz|w{|wz|w}}z|}x{|wwysz{v|{{v{{wzzu~}z|}x||x~|y{zv}|x}}y}}x{{w}z}}y~|x|{w~}z{yv|{x|{x~|y{zu}|x{yv~|y|zv{{w|zx}{x|{x~|z|{w{yv{zvzxu{zv~}y{zv|z|{x{yv|zw|zwzwt}{x|{x}z|zwywszxt|yvzwt}zwzyu}zxzwt}zx~ywzvt|zw{xu{wuzvs{vtyus|xu{vt}yv{vs|wuyur{wuzuszus}yw}zwzvs|vt{uswqozuswspzuszusxsqzusysqwqnysqztrysrysqzusytryrpvpn{tsxrpxrp|usvomysqxqpxpoztrwrpxqovomvnlvpnumkxqoxrpwonyrpskiumkvonwpnvnlumkvnlvmkulkvnlumksljsihvnlskisjhumkulkskiulktlkvkjskitljtljuljrfesihrhftljsihmKJpqqtqttrpquvvxustwxywwxxxzyyxwwwz|wzx{zyy|w}{~y{z}z||y|y}y{yzyzu}zww{xwxzy{yx{vzwyxx{xw|xyyvzwxxxxuvwwyywww{uxxxwx|zzwx{|vxwzyzxy{zz{yyy|y{ywy{zz{}yt||~yy|x{{||zxxy{yyz{x{vwvyxywwuxttvuorqqsorqqqqKnJhqggrfksiktjfremuljsijshjrhhrgktjnvmksijrijthotlithmvlltkmtlnvmmtkowmmukltknulmvknwmltjpwnqwopvnnulpvnowmqynpxnntkryprzpqwpqvorwppxnpwnnulovmuzspxoqwotxqrxosyquzssxquzsrwpsxqqvnvzssxpuzru{sqwnuzssyrv{tx}utzruzruzsuysx|vuyrvzstzrv{tu{swzty}vy~wuyruxruzsw{tw{t}zx|vy}vvzs|~yz}wwztuxrwztz|vvysy{uwys{~xz}wy|w|~ywyty|v{}xwysxztx|uz}wxzu{}x{}x{}x}zyzuy{vxztxzuyzvz|v{{w{}x{|x|}x{|x{}x||x|{x|}~y{|w~{}z}|y{~}y{{w~|y}z}~y{{w|}y~}y~z}|x}{x~~z|{xzyv||x{yv{yuzyv|zw~}z~|y||x~}z}{x|{w|zwywszxu|zv}{w|zx{zw~{y~|}zw}|y~{{yu{xu{zvzwt~|y|z|zw{yv}|yzvt{xv}zx~{x|y}yw{xuyur|yvzvsxtqzvtxurzvsytr{xu{wt|wuxtrzwtxur{vszuszvsyusyur~zw|wuzwtzvtzvs|wuytrwroxrp}xv{usxsqxrpxsqyusyrq{trztrzurxrpwqoxrpxqoyrpxqpwqowrpxrpytrxqnyrpvnlzsqvnmxrpumkwqoysqwonxqpsmkunlumlwpnxrpuljyqpyrqwqovnlrjhtmkuljumkwmkvnluljsigrhgtljsjhvmltlkuljskipgesjisjitjiskiqgfrignMLoppsqqrstuusttytuuywwxzzxx{xxxxy{v{{x|vzwzz}|{{{}zyy}z|y{|{zxx|yyxzyxw|zzzzzw{wzvzwvyyuwvwxwzxvzwuywvyxyuyyysw{uyyz{xyyxvyy{w{ywz{wxy{wy{||y}zy}zy|yyzy{{uwyzyyyz{yxxwzuzvyxxvxyvvtvuruvtqusurrqqqroLpKksjisgltjjrhhrgjshktiksilsjksikujltjmukmtlmukktiksjjsipwnksilsjnwmntloxnovmovmmuknukltjowmltjnvmowmrxpqxolujnumoumpwnpwmsyqpxnnulnultyrrxpsyqtzrryppunpwnsxqpunsxqsxqsyqsyqovmrxprypryprxpuzstzrsxqqvosyqw|uuzsrxptyrqvnuyrw{uw{trvpv{ty|wx{uw{ux|vvztwztx{uuxry|wvzsz}wwztz}ww|uy}wxzuy}wxzuz|w}~y{~yy{ux{uz~xwysx{vz{vx{v{|wz}wy|vy|w{~y{}xy{v|~y|}xx{uz|w{{wz|wvxs{|x|~zyzuyyuz|w{z{w{}x{}x{{wyzuxytz|wzzvzzu}|x|}y}~z~~{zzv|}}yzyu}~y~~zzzv||x{{wxxt|{w||x||xxxs{{wxws|zw{yu{zv{{v}|y{zv|zv~{zyu|yv|ywzzv|{w}|y}{x{yu|z|zw|z~{x~|yzvs{yv~{x~|yzwt{wuyxu|zwywt{xu{xu|yv}ywzvswrpyvszwt|xu{wu|xuzvs{xu{xvztr{wt|xv{wuxtq|xvzvtzwuzvsytr{wt|wuxtr{vtytr{us|ywytrzusxqoxspzsq|wuyuryur|vtxspxspyrpzus{trwqoxtqxpnvnlyrpuol{usyqowspuomwonwnlwqovomxqpxqoyrqvmlxqpunluomxporihvomtljvmlunlvpoumkumkrjhvnmulkumktmkrigtkjskitkjvlkrihtkjtkjulkphfulkqgfsihskjpfdrQPpppossrqstrsuuwrtvswvywywyv{{zyv{xxwzzxx{z|y{yt{|{yzz{z}ywxy{ywwzyxzyxyzyyuwuwwxywzwyxwxxxutzutwwxzxwyv{wwz{vwwuwyzzyywzyw|{y||z|w|yv||{yz{{z}w{yx{z~}{yz{y|yyyywyxvyzyx{yuyxvy{wytyssuursruvprqqppnMoLjshjshjsilukgqfjsihrgltjkujnvmkrijthmukirgmulhrgktilvkktjmvkntlmvlowmltkksipwnqxplrintlqypnulpxonukpxnpvnqwopwnmtjqxonulpumpvnqxopvnsyqqxoowmpvnszqpvmpwnrxptzrrxptzrqwox}vuzrszqrxpqxnrxosyqtyqvzssyqtyrtxqvzsqvnsxpx}vx{utxrx|vtxqtyqv{sy|wvzsz|wx|uy|wx|vy}w{{w|~yy{vz}wz}wy{vuzrwzuy|vy|vy|vwyty}w{~xz|x{}x{}xxyt|}x~~zy{vz}x~|y|wy{uvxsvys{}w|~y{}xz{wz|wwys}zyyuz{v{|wz|wzzv{}xyzvz{v|}xzzv|~y}~yz{w~{z{v||y|{w|}y{|x}}y}|x{{w~z||x|{w|}x|}x}|xzzuyws~~z||x}|y~}z{zv~|y|{x}{y|{w}{wzxt}z}|y{zw|zwzyu~}z}{x}|xzxu{yu{yv}{x|{wzwt{zv|{xyxt~{{yv|xv|yvyvs{xuyvszvs{xu~{xzvtyusyxuyvszwt|xu{xuzwt|xv}yvzwtxtq{wu{vs}yw{wuyurytqxspyurytryurzvsyuryusyusxrpyurxsqxtqwroysqzusxrqztr|vtwrpxrpwqpxrpxtryrpysqvpnwqntmjupmxrpysqwpnunlvomunkyrqtliwonvomtnlwpmxpowrpunlxpotmkvnmtmkwomvnlumktljumkunlwomvmkskjumlsmjrjhwnmunlumltkjsjiskitljrhgtkirihvnmpgeukisihrggsRQprspqrssssvsutwyvuuwuxxwyyyzyyxxyxzxzz{{yyw{{yyz{wzzx{zz}|yzy|xxxxyx{xyyyyxy|xwxxywwwxszywwzxyxwxuwwwxwxz{zwxywwyzzzxyzyz{ywyxyyyxyzwxx|{xvzzwy}~y{{zz{wyzwywxvzzwyxwwzzysuwxxywtxvswvrtstssursoqqopNqMiqgovnjshktjfpdgpehqgksiksiishjshltjjshjrhjrhnulovmjqhktjktjksiltjjsiovmktijrhpvnqwoksimtknvmnvlovmpxorxpnulqxopvnnwmw{tqvoqvooulrxpovmsxqrxpx|vsxqtyrtyqqwnszrpwnqworxpsyqovlrxpqyotzrsyquzstzstyquzruzrv{tu{souluzsu{rvzstyrwztswqx|uy}wv{ty|vv{tw{tvzsy|vv{sx|vz|wx|u|~yx|vy}vtwqx{uxzuy|vuwqx{uz|wz|wy{v}zwztxzuwztwztvzt{}w~zz|w~{{{w{|x|~z{|xy{u{{w|}y{|wz|w{{wy{vyzvz{w}~z|}y{{v|}y{{wxzu{{wzzvxyu|}y{{w}|y|~yyyuwxszzu|}}y|zw||x~}z}{x}}y{zwyxt{{wzyuzzu{zvzyuyxu|zw{zv|zv{{w~{}|y||x}|y}|x}}x{zvzyv{yu{zvyvs|yv{zw|zw|zx{yv{xu~{xyvs|xu|{xywt|yv|zw}{x~zw~zxzxu|xv|yw|yv{wu{xuzwt{xu{wu|xu{wu{wtywt~yw{xu|yv|xv{wtyvszvtyurvpmyur{wuxsqzvtzusyurxsqzvtxur{usxrpyspysqzusuqnxqovqn{utyuruomvolytrxrpzusvnlwpnxrpyrpvpnvpovqoxrpxqpvqovnmxrowpnwqovonvomxqorjhskixpovnlyqpumkwomvpnvnlvnmuomumkvmktljtljsjivnmskitlkrjhtkjsjhrihtkisjhtlkrihsjhtjirgeqhfqigoMLmpoosrstqvrstwrtutvxttwwvwyxxxzyxyxv||zzzzzz{{x{yz{xzzzzz|{|yx{zzx}zxx{xyzxwyzxxyuyxxywxzvxzwxzyxyyyxuwvwzywvxxuyzzxywzxzwzxx|vxxwwuzyxw{xx{}zw{w{}x{yuz{wyzz|yyuzyxwxz|vwxxyzxxvtywuutvvvtrtsrprrpnKqJhrgksiirhlsjmukgqfksijrhksijqhepcjshishmulksjmvlltjnvlgpepxnhrgltjnvlktilukmvlmtkmvlnvmnulnvmltknwlovmoumpvnqwoowmmtjrxprypouloumntlsyqrxppvnovmovmqwnsxqrwpqvopwnuzsqvotyrsxqtxqqwnsyptzrv{trwptyrrwpv{tuzsu{sqvntyrtzruzsqunsvovztvzsvztz}wx|vsxpvysx{uuyrw{tuzsx}vy}wtxpwzux{uy|wx{uy{vx{tx{vx{txzu{}xuxqx{uvyswztvxs{|xyzvz|vxztz}wy{u|~xzzv|}y{}y{|x~{{|w{|w|~y{}xx{u{}x{{w||xy{v|}y{|wvwr}~zyyu{|w||x~~zyzu}}yyyt}|xxxt{{wyxu{{w{|x|}y}|xzzv~~{zyuyyu~}z~{{|x|zv~{{{w|{xzyu{{w~}z|{w{yu{xvyyuzyv|ywzyu{zv{zu~|y{yuzyvzxu{yu|zw}}{x|zw~|z}yw|xu{zw~{xzwtyvrxvs|xv{xu|yvyvsyvs{y{xuzxu{xvzwt|xuzusxsq|yv{wtyvs{vtzus{vtzvtvro{vt|xv{wuzvs{wuztrxrpzusytrxsqyus{wuxur{wuysqxrpwqoxrpvqovnmwrpxrpvpnwpnztryrqvpnwpowpnxsqvomxqoxpo{uswqoyrpyrqvmlvmlvpnwpnvonxsqvnlumlvnlunmunmtkiupnuljunmtjiwnmvomtljqhfvmltkivlkthgtmjrjhulkrjhshfrigulkskiqfdqfdtjiphgsjipfdqKJprstootsvrstqtutuvtwvxvvxy|xvyxzxx{x|ywyzvyyw{{z|zy|zzxyy{{yx{xxwvyyxzxxzxx{ywyryyxwtzxxxxwwwuyzyxtvywvxxywuyvwuxtxwzyzxyx{wzuz{wxzyux{zwxzy{|xyzz{yyyy|zx|zy{|||||wx|wxxxxzwwwvutustssstsqsrsrqqqmnLoKhqggqfhrgjrhktjktjjsimukirgovmirgfpeksimtkjtiltjktjiqhmukktiltjktilsjqwonwmownnwlmvlnuloumnummwlqwopvnoxnpwopvnqxopvnsyqnulntlnulnvlntlsxqrwpszqqxprxpsyqsxprxpqwoswppvorvotyrvzsuysrxpv{ttyrtyrrwosxpsxpvzsy|vy|wx{ux|vuzrtxqw{tuyruzrv{tsxpw{twzuvzstxqvytvysy}wwzt{}wwztxztwzsx{ux{ux{vx{uy|vz}wvysz}wy{vwytx{u{}xvxs|}yy{uz{vwys{}xx{uwyu{~yy{vwyt{|xwyt}zz{vy{v|}yyzv{{wz|w||xxztzyv|{xz{v~{|}yz|w{{wz{vyzuz|wz{v{zvzzv}}yzyv{{w|{w}{x|~y}|y}|y|{w~~zxxtyzu}~y|yv~}z}{x{yv{zw}|x{xu|zw}{x}{xxxt{zw{yv}{x~{x{yv~|y{xv|{w~|y}zw{yu}zw|zw{yuzwtywtzxuyvsywtzxuyvt}{x{wuzxu|xv|yuxurzwt|ywzxu}ywytr{xu{xuxur{vt{zwzvs{xu|wuxurytr{us|xvytrytrzutyurzvtxsrzvszusytqytqxrpxsqvqoxsqysquqmxspzus{usytrzurxrp{usvpoxspyrpunlwqnwqovomyspvqntmkvpnwpnwonwomxpovomvomwomumkumkuljumkxpotljvomskivonunltmlrihunlsjiunlpigrigqjhrhgtlkukisjipgfumkuljpgeqihskiqigqgetjhpfdrhfrKJpqnpprppqssuvtvvwvwstwwwywwwxzxuwxwy{xy{vwyyxyxx{}z|xx{{|{y|zyzx{yu{yvzywuvxxzxw|xxxxxxyxzwxxxvuxuyzxxyxw{yyxwxuwxwwvxzyyywz{yuwz|vy{{w{wzzzx{zxxzx||xzz|xzvyzxyzxv{yyxywxvywyzxvvwtwwsuusrrrnoopqppJqIhqfjshkrihqfhqfkrjjsihqfjrhjsiksijrhjshjshjshirgjtimvkmukirgmuknvmktijshovmmskovnnvlovmmtkntlqxpovmoummtkrwprxopwoqwoqxopwnpvnsxqpvnsyqv|upwotzsrxopwnqxorxoqworxprxptxrqwoswptyrpvmpvmuzsuzsuzsuzstzrvztuyspuntyquzrswqw{tuzsvzsw|uv{tvystyrv{ttxqx{vtwqwztx|vvysx{uvyswztwzuvxrx{uxzuwyswzuvxrx|uy|wy{vwxsvzs|~yyzuxzty{vy{vy|wwzty{uz}wz|v{|xz{w|}yxzux{uwxsxxs{}x}}y{|x}}yxyt{|w||xz{wxztxyt{{w|}xz{wy{v{{v{|xxyt}|y||x|}x||x|~z~}z|{wzzv||wzyu|}xyyuzzu||yxwszyu{zw{zvzyv|zw}|y|zv||xxwt{yv|zx{yvyxu||xyws{zw{{w{zv}zwxvr{yu{zwzxu{ywxvswurzxu{zw}{x|zwzxuzxuwsqxvs~{xyus{yvyvswtq|wuzwu|xv|wuywswur}yvvspwsp}zxzvs|xv{xv|xv{wtyuszvtytrzvt}yw|wuvrowspzusvqoyuswrpxrowspxsqytrvqnysqxspyrpysrztrzuswpnvonuolxsqwqotnlxqpvnlyqoxqpvqowqoumkwpnwomwpnxspxqovomtkixrpwpovomumlunlwonwpntlkuljtnlumlwonrhgsjhtihvomvnmskiskitihtkitljrihtlkskjvmlsjhtjisjhukjrhgoecskirMLnnprqqntsvspvuxwttvvvwvyxwwxwxwwyxwx{y|zxz{zxzzwzzx{wz{ywyyyzv|{xxyyxwzyxx{zxzyxwvywy{yzwyvwyxwtvyxxwyvxxvwwv{vyxyxwxxzzxxtxz{uyzv|yx|zyyx{xwyyu}yxyzy{x{|{yzzyyv{yyx|x|vuxxuxuvwuwtussrvqrqsqpnqqpoGmFhrghqgfoektjktjksjksiishktjjsimulktjktimukjrhltkmvkksjmtklujltkownltjksilujltkmuloumntlkrinvmpvnnvmqxpmskovmnulpwomtkntkmukpwnqxppwnpwnpvnpvnqxoqxopvmpwotxqszqsxpqwosyqqwnqwotyssxqsyqqwouzssxqrxpqvnrxprvotwqrwpu{styqvzstyrv{suzsw{uuxrx}vvysvztwztv{ttxruxry{vuxrtxrx|uuysvysx{uy{vz|wx{uy|w|}xwytvysvyry{vy|v{}xz|wwztxytxyt|~ywztz|wz{v|~y{|w{|xz{vz{vxzuwztyzvz{w|~yzzvz{vyzu{{wz{w||x||w|}yzzvyzuyzu~~zyyuz{w{{w~{zzv{|x|zw{|wvvr{{w|{x{zv||xzzvxyuyyu}}y}{x|{xyyu|zwzyu{xuxxt|{w~zzzv||xzzv{yuzwt}{xzxu|{xzxu|{x}{xywszyuzxuzwt{yuyws|zwzzu{yvyvr{xvzwt{xu{xvzwtxvszwt{wuyvs}ywzvtxuqzvt|xv{vtyvs|yvzwtyusyur{wtytrxtryvsxtqzur{vt|xuyvsyvs|wuytr{wtwspxrpytrwqozvtxsqwroytrytqxqowpnxrpxpnxqovqnwqpupmvomysqwqouonxrpztrvomunlunlwqnvomwpnrkhwomxqpvmlumlsmkvnmsljvonvnlulkwpnuljuljskiskitjixonxonsjitlkskirihtmkskisjhvmlsjhrjhskjpgdsjirigrhgsigpfepgfqhfpLKopnpqqosrsrsuuwvsuwuvswuyuvwuyzxyw{zyxzxy{ywzx{yxyx{zxzyyxxwz|zxvx{wzzyzwxwwvzxzwwywyvwuvwxwwtvyvvvwyzwu{ywryxzxyyuyvxyxvyyyyzxvxyvyyywzyxyvx{{zyx{yzyxyvxwzyw}vwyxxttxwuwxutvuwuuvstrusttrrrrqpsqpnLqKfodfpekrjhqfhrgksijshirgmvkhqfishnulksiltkltjktjmtkovnksiirgmvllsjnvlnulnvmnulkriovmlsjnvmnvmnumpumovnpwnpwnrxqqwonulotmsyqlujovmownoumovnovnqxorxpownqwpovmowmqwouyrpvnrxptyrqwosxqqxootlsxqtzrqwotxru{stzruyrswprwoy{wwzuuzruxrw|utwpvystxrvzstxqx{uvxrvzsuzsuxruys|~yw{uuzrvzsx{uvysvysy|vx{vx{vz~xwzuz|wvysvxrx|vx{uy{vvxswysy|vz{vz}wwyt|~yyytwxsz|v{|xz{v|y|}y{|xz{vy{vyzuxytyyuy{vzzvyxuyyuyzu{|w{{w|}xwws~z}~zxzu{{wyxt|}yxxt{{w{zw{{wvvq||y|{w{zv{{v{zv||x}|yyzu}}y|{w{|w|{x{{w{zvzyvzxuxxt~}z}|y|zvywtzxt}{y|zwyxt{zv|yvywt{yvxur{xuzxuzvs{xt}zwyxt{xvxur{xv{xvzvs|zw{wt{xu|ywxurywtwuq{wu|yv|ywzxuyuszvt{wtwtrzvt}zw{vtwspwrozuszvtyurxtrytqwsq{vuzvtzvswqozusztrwqnxrpwrowqpysr{vtxsqzusunlwqoxrpxsqzusztrxrpwpowqoxqowpoxrptmkunkwpnwomvpnxpoumkvomuomumktmlwpnvnlskitlktkjtljumktkjtmkvomulkumkvnltkisjhtkirjhrjitlksihtjisjisljskjsjipgfpgeqjhrihqgfofetQQpopoprsprurstrsquwxvuxttywuww{vuwxxyyyxzzzzyyx{wz}zyy|w|vwyyuwxuyzxuxxxyyxvyy{uvyw{yxwxvyvvuxstyuvvtxyvvwyuzxxvwxzzv{zyzzyvzwyzwxx|xxxy|xxx{vywzwy|xzvyzy{yxy{yzxzyxywwwwwxuzvxuvsusquvwvsqnqptrppnnLnKgqfhrggqffpefpdksiishjrhfpejshjsijrhktjirhhpfhrgmukmtkktilukjsimvlkrinvlmuklsjnulmulmulltkmukpwnltjnumownntlmtkoumownryppwnpvnrwppvnrypqwomskqxoqwosypoumqwosxrqxoqvosxprxqrvotyrqvoqvnswpqvnswpuzsuzssxpuyrpwovzstxrw{uswptxqx|vw|urwpv{tuyswztrxpsxqx{utxqx{uwztx{ty|ww{utxqx{uvztvxsvysw{ty|wyzvxztwztwzty{vy{vy{wx{uvzswyswytwysy{vxzuz|wxzuvxsxzuz{w{|wwytxyty{vxzuy{vvwrz{vxyuyzu{{wz{w{{wyzv}zz{v{{w{}x}}yxxt}}y||x{{wzzuzyuyzv{zw{|x{{wz||xzyu}|x{{wzyuzyt{{wxvr{zvyxuxxszyvyxt|{wzyuzyt{yu|zwzyu{yvzwt|{w|zwyxt{yvxwt{xuzwt{yvxws|{w}zw{yv{xu|yv}ywyurzwt}zx}ywxuryvt|yv{wuzvtzxuwuryur}xv{wuzvt}zw}yw}zwwspxtqyurxtqvroyvrxtqzwtxsp{uszuszuszuryurvsp|vt{vtwrpwqozusxsqytqwolxrq}wuwpnxsqwpnvpnvomxrpwomvqnztrxrpsnkxrpvomtlkyrpvpnwomvomvnmwomumkwpnxqotjiwrpqjhvomvomtlkskitmjwnmvlksljsmjsljumksjirjirjhsjhqhftljvnmrjhqgfpgeskisjiskisihoecsiirihrhgoedpNMploontsrqsqpsrrtvtuuxvxuxuzwuz|sywzyx{y|yy{wvyvzvxyzzywyzvwxyxyxzxzzywwyywwxxy{wuyxwuxzxvyyzxwyxvvvxwvxvwywyuvywwvwxxtw{wzz{x{yzxy{zyxxxwyx}vw}zyxw{xxx{zyxwyyz{yyw{xtwxx|sxuxvusstvwttqussrrrsrppkpMpLiqghpfjrhiqhktihqfishjsijsilsjksjfqektilskiqgjtigpfiqghpfkujksjlsjnwllrjmtkmulovnmukovmouloumnulnulpwokripwomtkowmounqwolsjksiqvnoumqwpnulpvnoulowmrvpvztsyqrwonulsxqszrtzrtyqrvptxqrwpvzsuystxrrwpqvouyrsxqtyqv{ttyruzrtyquzsquntxrvztuyrw{uqvnuzsw{utwqwzuuxrw{tx|ux{uwztuzrz~xx{vwztrvo|}yz|wy{vz|wxzux{ux{uvxswysxzuwzuy{vuwry{vwytx{u{|wvysxytxytyzuz{vz|wz{vz|wxyuyzuxys{}xxytyyu|~yz{v}~z{{w}}yz{v}~zzzw{{wzzvxxtyyu~}yz{vyyuyyu}}y}}y|{x||w}|yzzuyws|{xwvrxws{zwyxu{{wyxu|zwzzvxwsywt{yu|zvzxu{zv{yv{zvwuqzyv}{x{xuywsyxtwur|{xyxuzyv{zvywt{yv{yu{yvyvswvryvszwtyvt|yvzvtywtwtq{yv{wuyusyvszxu{vtxtqzwuyvsyvt|yvwspxurxtqyurxtqzvtxtrxsqvqnytrzwtyurysqvqnwspzvtxrqwroytrwspxspxspwqovqovpnupnxsquomtnkvpnvqoxrptmkxroyqpvpnvomvnmvpntnlwomwrpvonuomwonrmjwqpunlunlvnltljwnmsmksljvnlrjiskitkjrjiumltmktmkumktkisihrhftlkqgeqigrjhukjqhfqhesjhpfeqhfqgepigpfepgfqMLnpnppoprsssrssuuwuwxqtvwvxwvuwv{vwwzxxzyxzzywu{{zxwy|vxyzxyz}yyyxyuxwzvwvyxw{vx{xzywywyutuwxuwyyxxvyxwvvyxuwxxyxyx{xwxxwzxyyxxvzx{xyztwxywxx{yy{z}xzzyx{wzvywxw{vxxxxwtywwvwxuwyuvruusttsrsqprtpnnmmJmIjtigoeirggqfgpfktjhqgiqhirhlsjhpglsjlujltjjtiksijshlukjshltjltkmulltkktjlsjltjnumksiksinulquomuknvlnummukqxpnuknulmukovmqxopvnpunqxptyrrwppvnrwpsyrrxpqwopwnqvopwnoumsyqsxqtxrryptyrswqrxpqwosyqtzrtxrtzrtzrswpw|uuxrvzsrxpswptxrswpuysuysvztw|uuzsw{uuzrx{uwzttxquyrx{uuzrw{uuyrwztxzuwztvwrwztwztx{uz}xwysx{vz|wvysvxr{}xvyruxrwytz{wwytxzuyzu}zxxs|{wwztyzuxzuwxsz{wy{vyzv{|xyzuwxtz{v{|w{|xwws{{wzyuvvr{{wzyuz{wzzv|{wxxtwwr{zvzzu{zv|}xzzvxwszzv}~zzyu{zwwwszzv}z||x{zw{{wzxtzxuzzvyzvyxtzyt}|y{zw}|yyxt|{xyyuywtywtyvs}{xyxuzwu~{yyvsywt{yvxwt|zx~{y{yu{xuvtp|xuxtqzxvywtyws|yzwtytswtqwuqzvt{yvzvtusoxurwqoyurwrovrp|yv{wtwqovrowsqwrpxurzusxurxrpxrpwroyurvrpyspxsq{usxsqytrytrvqoxsqwqoyurvpowqounlxpnvnlwpnwqpvnmwqowrowpovpnwqotmktmkxrq{rqtlktnkuomvmkvomvqnumkunltmktlksljrkiskiskjtmkunlvomskiwnmrjitljqjhrjitmkqigtlkrjipedrjhrigtkjsjhqhfqhfsjirigndcmJIopmqorrqtvtttsqtsztvttwwvwytwuxvuwzyxxyyyxzyzx{wxxzzz{{{yz|zwyvy{ywxzyzywyxwwxuvvzyywxwv{wvypxywywyyuwuzyxvvxztxzxywwxywtwsy{z{uwyvvzuxzxzwy{z{{zwuy{wvvzzxvxvyxyyxyxvyzxuvxtvwwstyptttvtqtpqpponnpnJoIgrfhrgfpehrghqghrfirgmtkjshirhltkirghpfmukksjksimtkirgksikrijrhkqimuklsjoumltkksjltjltkjrhkrhnulpummulmtkltjmukpwnnulnvlovmnulpxnownsxqvztrxprxppunqxopvnsxqsxqtyrqwosyqswqrwptyqrxptxrqvorxprxpuzsrvotxruyrsxpswqqvntxrqvntxqtxqvysvxstxquyruyrtzrwzuwzsvzswztv{tx{tuyrwztxzuswqvxrvyrwzuz|wuystxqwytw{uy{vy{vx{uz{wwzty{vvysuwrwytxzu{|wxzuz{w|~ywztxytxzuwztxztxyu|}yyzuwxtyzvxxt{|xvxsxzvz{vz{vz{v{{w{|xz{wyyvy{vzzv{|yzzvyytwxszyu{zwzyuxxt}|yxxtyyuzzv||xywszyu{{w{{wyyu{yv|zwyxtzyuyzu|zwyyuxvszxuwuqxurwvrzyvwtqywt}{xywt|{x{xuzyuywt{xuzyvzxtyxuywszxuzxv}ywyvsxuryur~{xzyvwtrzvtyvs{xv|yvxur{xuzvsyvs{xuwsqzwtytrytrxspwtqwsqzwtvrnzvt{wuxtqxsqzuszvtzusvspwrpzusupnwqnvpnwpnxrpzutyrpwqoxsqupmvpnxsqvnlyspwomwpoxrptomvonuoluomwomtmkvpntmkwonvqoxqoskiumkumkvomwqotnlunlumlvnlxnmvljtmkumksjitjhtlktmkskjqhgtljqherljrjhrihrihqhgulkqhfrhfpgfrihtkitljpgerihnMLnpoprnrurqqqtsuvusuwsvuxtxwuwzxyxzzz|{wwwyzwwxzyzwzyzzytvyz|{xxzuyyxxxzvxuyu{xzyxxxwvzwwxwxxzxxuywwtwxwvxxuuyzwvyvw{yxuxyzxvxxwxxxzxwxx{wzxyvvyyzz{yxwvwxzxyvz{vyxxuyvw{vyywuxwwvuttvsuqurqqrpqqrnonJpIgpegpfeodgpfjtijrhgqegqeisgishipgktihpfksiksiksijsilsjksjltjjsiktjmulnumnvlkshjrhjshksinulnulovmktjltjnulnuloumpwnnvmmukpvnqxonvmrwpnulqwonvloumrxpnulqvoqvopvnswprwpsyquysrwpqvoqvnntlpvntyssxqqwprwopvnvztswqv{tvysuysuztswpy}vuyrsxqsxpswqtxquysqwotxruzsvzssvpv{uswpxzuwzttxqtwqx{uw|uwztvysvyty}wwyty{vx{ux{uwyty|vuxry{vxzux{uuwqyzvwyt{|wxzuxzuxzu{}xyzuz|w|}yy{vxzuxzt{{wyzuzzvwvrz|w{|wxzuwws~~zxxty{vzzu{{w|wxtxxtzzvyxt}|y{{wxyt~|y{{wzzv~}z||xzzwzxt|{w|{w{zwzyuwws{yu{{wwws|zw}|xwvqzxuzyv|zw}{xzyuywtxvszxuzxuxwtzyv{zwxvsyvs{xu}zwzxuzxu{xvuro}zwyvsyvs{xuxur|xvxur{wu|zwzvt{xvwsq{ywyusxsp{wtyur{wtwspzvtwspzwt|wuyusyurwtqwrowspwrpytrxrpytrwrpwroxroxurwrowqovqnvrpvqnvqoxqouomvqoxqoxrpztrwrpxrpvqounlxsqwqpvomwrptomvomysqsljtmkunlvomvomsmjqjhskiwqosmkumkunltkjpigsljunlsljsjhrkitlktljrhfsljvmksjhskjwnmskitkjqigrihsihulkpgfqhfqhfqhgrigrjhqgeoMLmntpppqqurrtstursstrvtqxtttyyywwyyzxyxvwyyxvwxxyyywz{|wuzwzyyyxxxyywuzsywvwywyxuxyxuwxwvwytzywvxtuwwwwvtwyxyvuwsxzxuwvxwzwwvuxwxx{tyy}}wz|{{ywx{zyzxxyv{zxy{yzuwuzywzuwwxvswwvruusustsprurqpnroqqnnnLqKhqfirgksjgpejsifqefqeltjgpegqfjrhjsikrilsjjrhmtkkriktjmtliqgmukiqgksinulnulovmjshmsknumltjksjmtkltjlukiqgpwolsjovmqwomulmuloumqxopvnoumqwopwnqxprxppvnsxqpunrxooumqwontlpumqwpsyrrypswqmskrwov|trwpv{trwotyquyruxrtyrqvnoslvytw|tuysvysuzssxqvysx|vuxrtxqy{vswpy{vtwqruovysy|vx{utwqwxsvyswztuxrwytx{vxzuwzuwxsuwqy{wx{vuxry{wvytz{wvxsx{uxzuyzuxzt{|wz{vwxsz{wvysxytxzuxzu|}ywwsvwswytxzuz{w}~zz{wy{v||x{{w|{w{|x||x}|y{zvyzv{|x}}y}}yzyuzzvyzuyyuzyuyyuxwsyxtzzvvupyyu|zwzxu|{xyxt~|y{zw|{wyyuzyuywt|zwzyuxvsxws|zwzwuvuq{yv~{xyxt{{wzxuyvsywu~{yyvtyws|yvywtxtqyvsywt{xuxvszwtvspusp|zwwro|yvwtqusoxsqzxu{us|xvzvsytr{vtzwtxtqwspvrpwroytrzusvrpvomyurxspytrzusxspwspwqo{utytrytrvqovpnwroxsqxrpwqovrpvpnwqowrotnkvomwqovpntmjyrqtnkvqowpnvqoysqvnmuoluomtolrmjsljwpnunmtmkskitnltljumlunlunltnlulksljrkirjhtkitljqihsjhuljsjhqigsjiskitkjsjisihqgerigqjipgeqjhqihqhgqMLkpqppuoqrsrpussvutuuuxvutvxusuvvyvyxvu{xxxvyxyyyx{xyvzyyxxw|xytxuvxzwvvwwywxw{twvwwvyxvxyuxwuwwwuyywwxxxwxyuwxtuyvuxwyyu{xxz{yuwuwxyxzzwyyvxzzyy}xuzwzvzyzv{ywyxwwtxwxzvwwttuvqwtuuttrsvssrqqsorqolmLmJfoeishencipfhpgjrhmuljshirgnvmfpejshiqhjrimtkiqgmulgoeksiktjmukovnjshksiksiltjkriksinulltjnvmksimukpvnnulqxopvmoulmuloumqxopwonumqwontkqunrxptzsowmnvmqvoovmovmpvntzrsvpovmovmrxprwptyrswptyrsyqrwpqunsyquyrwzttyrotluzstxrswqxzuvxsvzsuysrwpy}wrvovztvzstxqtwqy|wtxqqvorwpuxrwytwztswqx{uvysxztwysvyswztvxswytw{uy{vx{vwztvxsxzuvysuxry{wwzty{vz{wwyuxytxzuxzuxyuuvqxyuy{v|}yyzvzzvyzu||xwyuyyuzzvwxszyvzzvtupxxtxytxyt{{wyyu{yv{{v{zvyyuzyuyxuzzvwwsxytwvr||y{zw{{wxws{{w}}y|{xzyvywt{zwyxt{yvyxtzyu~|xzxu{zwywtxuryvtzwtzwuyxtxvryxtxwtywtzxu{xuywsyus}yvywt|yvwtqzxuywtzvs{xu{yvyvswtqxsqvspwuryvs|xvxtqxurzurzwtxtqwrpyurvqnztrupnwrpxtqwrowspwrpxsqyvswspvqowrptnlxtruqntpmvpnxroupmwrpxtqwroysqwrowqovpnvqntnlyrpvomwpnupnwpowpntnlvqosljtnlunmsljunlwpoxqovnmtmkskiuljrkiumktmkskjtmlskiwpotkiqgeskjskirkhrjhuljumlrkiqgetkjpgfohesljsigqjgrjhtjiogeqhgnecqihskjpLKnoonsqnrrrsopsvsstttvuwuxyyvuv{xtww{wxv{wx{wxzxz|yuzyzyxvxwxzzuyxxwvuyvz{z{yyvxxwwuxxvuvvwtvvwuswwuurtxxvwtwvrxuxxyzxywxzwzyxxztwwxxuux{xwxvxvxxwvywx{xxwzvxxwyzyuuvyxxtwtxwuvwvustsstustrrqrlppmqqoMpLfpeirhhqghqghqghqgjsiepcirgksjkrifpeirhiqgjrhjsiktjlrjkrinuljrhjqhisgjrhltjltjkrinulmuklukovmltjltjlsjqxomukovmpwnqwooummtknulnulovmrwokrirwplsjpvnrwoqxoqxorwpqxoqwoqwotzqqvopwntwqtzrswposlqworvosxqswpsxqsxqtyqtxqsxqw{tswqtwqvztswptyrrvouyrwzttvqvztuyruxsvysvztx{usxpuyrwzutwqxzuuyrtwqx{uy{vuyswysvxswyt|~yz|wwztvyrtwqxyuy{vwzttvpwysxzuuwqxyuz{vz|wy|vwytxzuvwryzvwxtvwrwxsxxtzzvxzuz{v|}y{|xwwsuup{{w{{w|{xxxs{|w{{xzyuz{v{zwzyv~}z|{x{zw||yzzv|{wyzuvwsxyuzxu|{xyxtzzv||xzyuxvrzyuzxuxwtxxt{zwzxuxwtywsxurzxuwurxws{yvxwsyvs|zwyvtxurywtzyvyvtvtquspzvsxuryvszwturo{xuyuszxuwspxurzvtyvsywt|xvzwtwtq}xvuspzwtyvsxspxurytr{wu{vszusytrupmzvszvtvpnzuswsqxtrupnxsqxtqwqowrowpozusxrpwsquqnwspwqouomuomvpnwqovoltomwroumkxrpumlwpowqnwomunlsnlvpnunlvomtoltnlunlunmvpoumkskjunlskiskisljrkiumlumlrkitlktljrhfpgeqhfsljvmkrjirkitmlrjhqigrjhrihsjhskipgfpfepgfpgepMLnomnqqrqrtrqvtrsuttsuttxysuwxxuuzy{wwzyyzwywwvwxxyyzvvwuyzxwx{ywyzv|zwzwxwuvtyxyxzwxyvyxvuvxytvwvxwywuuywwvvvwtxyuzuyyxvwyxxyyzyxxwyu{xxxyvwytxzvxvyvx|uxvyyu{xvyxyvwwxwwwxvsrvtvssqutqvmpqqqqqromnnLpKhpffoegpejsiirggpfksinvllsjhpfishishmtkhrfktjirgirhjrhltkjshltkjsiovmlsilujlsjoumoummuljqhjrhmtkounltjmukmtknummsjpwnoumpvoqwomvlltkmskmtkrxprwopvnrxqsxqoulovmrwpsyrrxppvmrxqtxqsyqrwprwprwprwpuzsqwouyspumswqswqtxqv{spumsvptxrruotxqtxqwzuwztuysuzsvysruouysuystxqvytvzswzttyquxrvysx{vuyry|wswpuyrvxsrupx{uvzsy{vvysz|wyzvwysyzuwxtz}xyzvz{wxzuyzuwxsyzvwzty{vwxsvwr{|wyzvz{vz{wwxs{{wvws{{wxzuz{vz{wxyt||xxyuwxs{{wuvpvvrxxsvvqxxtzzvyxtzzvyxt}{xzyvwwswwrzyuvvr~|yxxtyyu{zvxwszyvzxt{yv|{xywtzxt|zv{zv{zvzxuxvsywt{ywvuqvtp{xvxurxvrvuq{xuzxtzxuxvr|zwwtpzyuywtxtrwur{xvwtq{xuyuryvsxuryvtvspzwt}ywxurzwtyurwsqvspyurytrupnzvtvspwroyusvroytqxtqwspytryusvrpvqnytrwspwqpwqpxtrxsqwqnzsr{tsvpnxrpxrpvqoupmzsqwqotnkunlvnmvpnvomvqpunlxqowqotnkskiunluljuonsljunltnltljumkqhfvpnwonqhfumlqhfsjhrjhskirjirjhrjhsjhrljrigofdqjhqihqhfskirjirjhskirigqgeofeofetkjqihogeoNMlnorqoossrqqrstrttussuusvuxvywwxxxuxuxvzyyyxxvxxuzwxzxxzyy}zyuxxzxwzwxywvvvyuwxuxvwyxxwxxsxvxxwuuxyvyxxzxvtyvvvxwvwwwuwwwuuxvxxxxxwvuyxyxywxvzx{yyvvwzxyxwvytwzwuxxwwwwxyvvtvutusustsruspsqqpoopqoonIqHksjhpfgneirhjrigpehqggpfjqhjqhhqgjshksijqhksiksiltjltjlsjovnirgltjksiksijtijrhovmltkltkktjoumntknvlishowmnvmjpgovmszqpunoumovmnulqworxpmsjlsjovolsjltknumnulsxqsxqswqnulpumqwoptmrwpuyspvnotmtxqsxqpunsxqqvosyquzstxruyrswptxqqvorwpuxstyrquoqunuzsrvorsnvzsw{utwrwztvzsqvntxqtxrvxrrvowysvxsuyrtwqxzuyzv{}xwzswzuxxtvysvxswxsxyuy{vwys|~yy|vxzuy{vvyswztyzuyzuxytwysz|wy{vvxsvwrwytxxs{}xwwsvuqzzvwxrxxsxxtyzuwyswxtzzv|{wzzvyyuxwswws|{w{zwxxsyzu{zw{{w}{x|zw{{x{zwzzvzyu{yv{|xzzv|{xwxsxxt||yyyuzyu~|y{zvxvsxxszvswuq|{xvspwuqyxtzvtzxuxvsyvt{xuyws{yw{xvzwtywtyvsywtxvsxvrxuryvtyvrxspyvsyvsuqnzvt{usyvszvtzvtxurwsqxsqytrzvtzvtyvswspvqnuqnytrytqztryusvrpuom{wuvqnyvtxsqxuswroysqxrpvqotpmvpmwpnupnvpnuolvpmunluomumkxsrvpnwqowqnunltmkupnunlsnlrkiunmunlvnmtmktljumktnltnlskitmkrljtmkqhgsljrjhrjhskjqigrjhrjhqigqjhuljsljqigqigsihqjhrhgqhfpgerhfrkimcasjipgfpignKKpmqpprsssouqpstssttsvwvywxuwxzxvxwytvwwyxyxx{wxvw{wx{xyyyxwxxwwywxwyzwwwwyuvxvxuwwwwyvwyxxuvuxwstytwxxvwwvxxxzvtxxzwwzttyvywxy{wywyyzwzzwwzvyvyywywywwwzxxuvwyyywzyxvwuwxuwutwtqsuputtptsqrturpoqqllHoGepdfodfndhrfktjjsiksjgqeiqgksjhqgjrhiqghpekrjhqglukjshksjltjhqfhofltjjsilskmulltjlukounltjnulmtkounmulotmmujlrjmtkovmntlnulrwpqwopvnpunqvorxpqwoltjntlqwoquorxpryppvntxrrxpsxqrxqqvoqwonsloumtyrsyqtyrswpsxqpunuzsqvnqvnrvov{tsypswpqvoswqtxrtwqswqtwquxrx|vtyqswqswpuxsrvouxswzttxqswquxry|vxzux{uxzuxytvxsuwrtwqvxsuxry{vvytuxrvysxyuuwrwxsvxsz{vyztxzuvxsxzuyzvvxsxzuwxszzvwxtz|wwxsz{wyzvz{wwxtxxswwsyyuyzuxytwxtzzv{{wzyuvvrzzvzyu{|xzzvyyuzxuyyu|{wwwrzyv{zw||xwxtzyuyyuwvryxt{yvyxuxvrzxuzxuxwt{zwwuryxtzxtywtyvtywtzyuzxuywtxwsxvr{xv}|y{yvwurzyuywtwtqzvtxurvspxvr|wuwtqxwtvroxurwtqzvsxurxurwsqyvsxurxuquqnzvtwspyvswspwrpwtqxsqwrpwtqytrwqoxsqvroxtrupnwspyurwroxsqwrouolwqoxsqxsqrliysptnlvpmwqouomvqnuomwpnunlvonwqoumlwrotmktlksljwqovomvomwrpvomtljvontlkwpnqhfwposkirjhtmkumlsmkrhgqjhpgesjhskjsjitmlphfskjqjhqihrkirjhqigpfepfdogeskiqhfqhfnfdqigrigogenKJmnmrnnmntrrqqrtrrrsuvtvvwuwwwxvyzxtwwyu{xtxwyxxzwsyywzvyyxzzyyxwz{vwyxwxvuxwywzvxxwyuzuutvuwwwxtuwvxvvvwuvvxv{wwxywvvvxuyv{vz{susywyuwvuzwxx{yyyyxzzzwtxyw{yuxvwyzvuwttxtwxtrtuutvtxwqourupqpqqqooqnJoIfpdhpggpfipgcmahqgiqhkrihpfjsifndiqhirhiqhksihqfktjiqglukirhipgoumownqvonulltjrxpltjnulmtknulnullujjshoumltkktjlsjpvontlmsjoumovmqvonulpvnpumpvnrxppumovmrxoqwooumtyroultxqrwprxpotlrworwprworwpsxqvystxqtxqswpsxpsxqtxquxrtyrrvosxptyrwzuqunvysswpswpuyrw{uuystxqx{utwqtxruxruyswztvztvysxzuuysvyswytvysvytxzuvysvyryzvy{vwzuwytuwqtxqw{txyuuwrxzuz|wxzuxzuvxsxyuvwsx{uxzuyzv{|wxytuwrxyuwytxxsy{wxxtwwrvwr{{xuwqxxsyytyyuxxtyyv{{xxxszzvyyu}}yz{wxyuyxt{zwwvs{zwyzvzzv}|yxwtyzvyxuzyvzyvzzv{yvywtyxtwurwvsxvsxwszwt{zwzxtzvtzxtzwtyxtzxtxwtzyu|zwtqn{xvvsqyvswurwtqxvsywtyvsvsqzwtvrozwuwtqxtrxurxuqytryvsyurvspyvswspyus{xuxtqvqowtqyuryurvrouqnxurxsqxsqvpmuqmsomysqxrpxrpytrwsqwrotolwrounluqnupmvpoxqoupnvomxqounlyrpuomrliuomsmkrkirljvpnsjhuomuomvnmrkhunlunluljwonwontljtlksmjsljsljsljvlkskiunlunlvmkrkjrkiqgeskiskirjhtmkqhgpfdqhfrjhqfepigrihpfeqigpfepfdphfoLKnnmonmmoqsrrqusvrstuwsvrsvuvxuwvuxxvxtvtx{yywwxyzwwuvxvywuywyzwxx{xwzvzwvxuwuwtwvuvyy{xwttuwuvwvvuyuuwxxvwwwyvvuvuvyxvvwwwuwxwsxxvvvyvxyvyzuvvvzwyxyuwvswuzxxvwxvuxvzvvvtuwwsvvvttrtrtqssprosrqrqonlLpLiqhhrgkrihofiqgirhhrgjrijrhgoedmchrgirgirgktiktjiqhjrhgpfmtlmsklsjmukksjksjmukhqgksimtkkqinulnulltjnullskownmtkmuloumoumnuloumovlmtlntkpwnntlrwppumrwpqwonumpvnpwnqwpqwootlqxoswpqwnqvnpumrvppvnrwovytqwoqvotyqsxqqvorxpswpswqptmvzstyrtwptxqsvpsvpwytruorvptxqwzuw{utwqvztvxtuxrruotwrvzttupxzuvysxzuvytvytwxsuxrwzty{wuwry|vwzuxyu{}xuwrvwry{vvxrwztyzvvxryzuyzvwxsvxs{}xy|vvwrwytuvq{|xvwruwqwwsyxuxyuxyuzyvyytxytzyuyyt{|xyyuyyuwwswwswwsxxt{zw{zvzzvxyuwvr{zwzyvwwsyyuyxtzyvxwswws{yvyzvxxu{zv|{wzyvyxuzyuyxuzyvxvszyvyxtzyvywtzyu{xvzxuywtzxuzxuvtpzwtywszwsywsxuqywtwtqzxuyvszvtzwsxururoxurxtqvspxurxtrxtqxurzwuytswrpwspyvtupnvqoupmuqoyvsyurxsqwspuqnvqowsqxtqysqxspvroxsqzuswqoupnuomxrpvpnuomupmvqowqowpnvomsnkuolvomwpnrljsmjrjhvomrlkpigrkiunlunltmkqihsljrkivomskiskjqihumlsljtjirkirihrkiqgfqifpgfskjpigrhgrkiqihskiqhfphfsjhpgfpfdqgeqgfphfqihqjipgeqfelKJnnpqmqosrorqptptuvvuuuuuvuwutwxxwxwyvw{xzxwwxw{yyxxvwwuvywywvwvwxtzxvzwwvwwvxyyttruwxtyvrwxuvvwxtwxwuvvvuwyxwxwxvvwvxwvzvxsxxvwwxxxvyvx{wyyy|yxvwwwy||vxvwwyvwwxxzwuvttvvuvtuvtvvvusrrsrpsqrqroommmnInHfoeirhhqfhrggoeiqgksigpfjrijsihqgjqhjrhirhkrikrhktjmtkksihpfksikqihqgmtlksiiqgkrijshltjntlmukmtkkrhlsjovmltjqwoltjounoumntlmsjpvnoumnvlounlriovmpummsktyrrxpovnmukrwprwpqunrxpotlryprwooumqvosxqquoquotwqtxqsvptwrrvopumtxrtwquysswquyrsvpptnuyrvysrvotwquxrsvprvowztvysrvpsvptyqwytw{uxytxzusvpvystvqvxsuxrxyuwytvyswyttvpx{vvxsuyswytvztsupyyt{|wuwqwwsxztvxrz{wvxsz|wy{vxytwxsxytvwry{vyyty{vxxtz|wzzvzzvwwsyyuyyuyzvyyuzzwzzvyyuyyu{{wyzvyyuxwtwwszzv{yvyytyyt|zx{zv{zvzyuyyuvuq{zwwwszzvxvrxwsyxtwvrvvqzyuxxtyyuxwszwtwurwurzxu{xvyxtxwsywtxuryurxvsxtqwtqzvtxtrywswtqwuqwtqwurxuryvtwuqwspytr}xvzxuvsqyusxsqzwtxsqxuruqnytrvspxtqyusxtqwspysqwsqwrozwtytrwspztrxsqupmvrptomzusvqpupnuolvqnvroupnvqoxrpupnwqoupnvpnvpnupntmluomtmksnluomtomxqpumlvomuomunlqkhtnkxpntljunlsljumkskjtlktmksjirljrkiumkrkirjhqigsihrjitkjqigskiskipgfsjitlkqhgogerihtljqigqhfogeqhfrihpJIopmqoonqpssqtqrswvuvutuuxvvvwwuxwuuvxvxyxyxxwzvzywtzwv|wzywywuvyvxxuxvwyutxztutwyuxxvvuvwvvxvwxxvrzuwwxuuuvxtxvxvxvxuxtwuwxvwv{xxvuwxxwyvx}yvwxy{ywxvuwxvuzvxuyvywvyyvvwyvrtttrvqvvtprtsruqpppqmppmmIoHfodfqdgodipghqggpegoegpeirhlukiqfirgjrhiqhksjhpfjtiirhiqhjqhlsjjsimtlhqfkqhksilsjmtkmtkhpfksiovmltjmsknvloummtkmtklsjpwnpumovmmslmtkpvorwootmotloumovnmsjmrjoumpunqwosyqpunqwopvnqwoovmotmqwosxqrwppunqvosyquyrrvorwprwptyrrvotvqtxqqvorvptwqqvnwztvysvztswqvyswzuswqvxstwqqunvztuxrrsntwpwzuuxruysvyssvpy{vuysx{vxytwzuvxswzuwytwytwyttvqyzuuwqyyvwytvxsyzuxzuvys{}xy{vvwr{{wxxtyyvxyuwxtwztyyuz{vyyuyzvxyuvxswwrxwsxwsxytwvrxxtz{wuuqxxtyxtyzvyyuyyuyzuyzuxxtxwswwrzyvzxu||xxwsxwszxuywtyxuyxtyxtyxtyxuxwtzwtyvs{xuyxu{zwwvrzwuwvrxvsywtzxu{wtywtywtwvrvsptrnxwszvtvtpzwuzvtxuswsqxurxvsxurxurwtqxtqyusxrpuroxurxurvsptqnuspytruqoxtrxtrwsqwspvqovrpwspxtrtomtoltpmzvtwqpwrpwsqwqoxrpwrovpntomwspwqoupmwrpvqoxrpunlwpovomuomrlivomvontomtmkslktnlunlrljrjhtmksmkvomuomvomumktmltmlvomtnltmkrjhrhgrigskjrkiqihulksmkrkiqhfrigrihrihqhgrkjphgpecqhgrhglcbrjiofdoedpgfohfpNMmonnrpqrqqqoqrtstrussupyxtuvtvwvvyzuxuuvvwxwxxtywz{vxwwxyuxwxswywxwytxtzwzwwvuvwtvuvuvvttuuvxwxyxvuuuusytvtwwuvuwwwtwsvwxvtwvxuuwwvxyzvyzvwxwvxxvwuxwxyzvvyzzvvtywtxuwvwvusxuswwtptqrrtqqpsroppoplojJnIdnchqghpfiqhgqegqfhofgqfjrhjrhgpeirhkrjkrigqfjrhmtkksjirhkrijqhlsjkrilsjltjoumkrikrilskjqhmulkqilripvnmtlmskltjntlmtlnulpvnlsjovmnumqwppvnltjnumnulntkoumoumsxqnskntkotmoumtzrqvoqwpoumqvosxquyroumquotxrrvoptntyrrvoqvnswptyrtyrtyrqvnv{suysuzsrvpuxrswqtyrrvouxruxrswpuwqsuptyruxrvztv{truntwruxstwqxyuwytuyrx{uwxtvxsvxrvysxytvxsvvrxzuwxsvwstvqvystupvwruwrwxsxxuz|wwxsyyuyyutvqzzvxzvwxsxxtvurzzuxxtxyu{{wxxsvxryxuxxtxytvuqyyuxytxxtwxs{zwwwsxvsvvr{zwvur{zvxwtxytyyuyxt{zvvvqyxtwwsvvrzxuyxtyxtwurwuqxvsywtywtyvszxuywsxvsyvtwvryyuzxuzvsvuqyuswuqxurxurzxuwurzyv|ywwuryvswtqxvryvszwtvrpzwuwtrwurzvsxusxtrxvsyurwsqtqnwqourotpmvqoytryvsvqovpnxsqytrupnwrpwrpxsqwqovrowqowspvroupnuomupnvroupmtomupmtolsmkvrpwrptnlxqounluomuomtmjtnlslkqjhslkuontmkslkvomsljsmjsljunlvomsmjskiunlqigumlsljrjhskirmkqjhrigtlkqgerigumkskjpgfqgeoferigofdnfdpfdpigqhgogeqjhofepednLKnnnronrmpqqpsrutssqwtuvtrsuvuxswwuwxxwuwywyxwuxwwyuzvwzwyvzzwtwyxxywyswxwxwwxt{vvyvyxwuwwuvwuyvwywuwwwvyswtwswxuxyvvysuywwvvwxvuwzwxxwwwvwywwyyzz{uwyxwuuuwuwwyxvxwxuvuvuvsvuxstqsstturssrppoqonolomJnIgoehqgdmbeodjqhdobhpfhqghpfjsijqhkrihqfjrhhpfhrgjqhirghqgirgksimullsjnvlirglsjmtkksjjqhksinvljrhpvnpwopvnltjnumoummtkoumltkovmlsjmtkoumpvnntlovmptmnslqvnpvmntlqwomtkqvooulrxppunoumotlpvnpvnpunqvosxpsxqqvoptmpumqwnrwpptmuysvysswquzsptmuwsswpsvqrvotwqxzuvysrvotxrwyttwqtxqruouwruxruyrvxsvysuxruwqtwqvyswytvysvxswxtxyuxytvxtvxswysuwrvxry{vvxstvpz{wwytvvrz{wtvpxytxyuvwswxsyyutupwysvxrz{vvvqyzuwwrxxswwswwsyzvyyuvvqxwsvvrzzv|{xxxtwws{zwwxtzzvwvrxxtzyvxwtywtvvrzzvxwtxxszyuwvr{zvvspxvsuuqywtzyuxwtxvsrplusowuqyurwurvtpwvrywtwurxws{xvvuq{xvxwswtpurnxvsxusyvsywsxvswtqwrpxurvsoxtqzutzvtxsq{xuxtqwtrxuqyuryvsyuswsqyur{wuxrpvqovqnysrvspvqovqoytrwrptpnvqovqouomwrotomwrosnktonwrpysquomupmtnlvqowqowqpvqnvpnsmkrliwpouomuonunlrljsnktnltljsljvomtmkrjhtmksljrljrkiqjhtlkqjhsljvpntljtmlumkrhgtmkskiqjhsljqigqhgrigrigphfqgfofeqhgqhfqhgofephgogephfofeqjiqihnKJopqmmrqoprpsnuqrrsssustsvvtvvtwuuvvwx{zvyxuzwwwyxyuxywvxwtxsuvyuxvwxxvvuv{uywuwuyxwwvwyvxwvuwwssvutuvswsuuyyyvvwwzsxvuxysxyxwttwwyvvzuyvxwwwyxwvyywxwyvwvvtuutxvxvvwswvxswtvtuuuuxsvqstpoqsnnpnpnomlJmHfndfoegofgneiqghqggoehqfltjfpefoehqghpfjrhhqgksjjriirgjqhntljqijqhiqgksjmulmtknulksijsilsjovmmvknulowmntlnulovnnslkqimskltjpvnlripummtjpunnulksipvnrxposlpunpvnlsjpvnpumoumpvnsxqpunqxpsxqryprwpqvorvopumsxqswqswqrwprvoovmqtnrvotxqqvnrwpvxssvpuxstwqwxtswptwqtwqqtmvyssvpxzutwqtxqtwqsvptvquxstxrsvpuxrtwquwrwytuxstwquxrvxsuvqvwruxry{vsuouwqvyry{vxzuxzuyyuwxtxxtuvqxyutupvxryzuvxsuwrwwsxxszzvyzvxzuwxtwxszzvvwrxwsuupyzuxxttuqyyvxxtxxuwvs|{wyxtyxuyyuttpxxtxxtyzvvuqxvsxvs{zvwurvtqxxtyxuzyuttpyxtwvrzxuyxtwuqyxtxvs}zwxuryvsywuuqnwuqxwsvuqutpzxuwurwtq|zwyvtwurwvrvspwvsxurwuqywtxurwtrvrovrovspzwtvspxusurovroxtrxsqwspupnvqowsqxtqxsqvqnuroxsqwqoupmvqoqljvrovqnwrpxsqwqoupmvqouomxrptolsokwrpwqpsnlvonwrpuomsmjwpotnlumkwqpvomvomqkitmktmktmlsljrkiqigvpmtlkrkjrjhunlrjhrkirjhsmjrihskiqkjpjgskitmkrihqjhpgerigrjhqigqigpjhsljqhfnedqjirihodcqhfphfpgfpfepfepMLplmppqppoprrrpustqtqtqsvrvttvvvuuwxtxwxtvvvtytvxuzwxw{uzzyyuvwxtuwyyxtvwwxvvxxwvuuvvtwwtuxwuwvuuwstvuwwzvuvyyvwtwvwvwvuvvwuwuvwwvwxwyvutyvywwytxvuuvvwwwxvxuzwwzxzvuuxuvttrvuuvsusrssrtqrmnpppnnnpllJnIfndhqggpefodfndfoeipgfpehqgjrhgpfjriiqhjqhirgksjhqfksihqfnumjqhmtklsjjsijrilsjksjjrhlsjkrikrijqhksioumipgnvljqhowmkrimtklsjmtkoumrwpkrimsknulntllrjqwootmoummulntlqwopunqvooumpvnotlrwpntlqvnoumrwppunswqqvnrwpotmvystxqvzstyrtxqpunuxrptmptnrwptvqvystxqsvpsxqtvqswqvysvxstvpuyruzrsvowystvquwqtvpvytxztvysuxrxzuswquwrvysuxruwrwztuvqwztuxrvxsxytuwquxrwytuvqvxstvq{|xwwsyyuuupxyuvwrvvrxytyzvuvqxxsxxtxyuxxtxwsttpwytwxsyzuuvqwxtxxtxxtwvszzvzyuxvswvswurwwsvuqywtutoxxswwswvrwxtywtzxuxwsxurwurxwsyyuyvtyyu{yvzwtutp|zwyxtyvsxvsywtwvsyxuzxtyusxurwtqzvsvspxvrusptrowtqzvtxspvspurotqnwtqzusxtqxusuqmyvswtqxurxtrwtrvqoxtrvqowsqxvsvroytrwsptpnytruqnuqntpmvpmsolsnktqnxtqtpmxsquqosolxrpvpnwqotnlvposnlwsqupntlksnltmksljunluolsnktnlvpnrkirjitnltmktmkvonsmjrkirkiunltkitnktmkqjhsljrjhtkjtkjskirkjtlkrjitljrkhqhgsljskjphfrigpgfphfqjhnfdrigofeogfnedqhfphfphgphgoKJnllpononpppsqsurtsrttuvuuutuvwtyyvvwyvyuwyyuwzux{vvwxzyxy{wxywvvx}vxtxvtwwxzvxvvttvyuvuvwxtwttwxvvvwuvywyxvxttwvytwtyxwvxyvxxyvwyxxwwwuvxuywxuvxuwwtxytwtxwwvvxxvvusxwwvswwqtssurtrrpsqqpurnrqoppmlmInHirhksjhqgepddlbdnbfpdeodhrghpggpejrhksiithhpghqfipfjrhjrijrhjsiksjhqfjrhlsjnuliqglqiiqgirhntljqhmtklsjnumpwomtkoumntllsjnvmmtkmrjotlntlpwnlsjoumpunntlpwoqxppunntkrwomtknskqwopvmqvopunqwnpunrvprvprxprvosvqrvoqvouyrswqquntxrrvoqunswqrxpsxqrvotwqsvprtntxrruoqvoqvntwqsvpwztuwqtwquyswytw{uptmswpuvqvysvyttwqwysvyswztuwry|vuxrxzuvwrwytvwswztwyttvpvwruxsxzuwwsvxsuwqxxttuptupvvrvvqyzvvwsxzuuvrvvrxxtxytwvswvsz{wwwsxxtwxsxwswuqyytzzvxxtxxtwwrvuqyxuvvrxwsyyuwwswvrvuqwvrzyuxvszxuwvrzxuyxuvvqtspxvswvswvsyxuywtzxvxvrwuqyvsxvsyxuyxuywtvvrwvswurxvsusowurvroywtvuqwsqyuswtqvrp{wtvrowtqwtqxuszvtzvtxuryvsuqouqnwspvtqxtqxtrwtqwspupmytswspvrowrpvqouqnzusvomxtrxrqtpmtolxrpwsqvqouqotmkuomysqupnvpntnksnlwpntomsljupntmlvqptoluomwpntnlxsqumlvomsmktmktmlsljtlkpigtnlvontlkphfrihtkjumlskitjisljpigoigskirigpigqigphfrjiqhgqihqihrihnfdqhgpgfogfoedphfphfqhfnfdnfdmKJmnpmqoopmpospqspstvturwurvvutswsuuvutwvuwutwvwsyutuyuxwwvxtvzxwty{xwuxxswwwwxvvwywxuwtwtvtvvvuuvvutuuvvutwuuwyvwwuuvuuwvvvxxwvuuwwuwywwxxvwxuxwuywuvxvvwxvxtwxvtxuvvwrtwuwututtrrssqurrsrrqqmoopokomGkFgpfemcjrhgpfeodhqfeocksimtkgpeirhipghpfhqfgpfhpfkriipgfpeksimuliqfmtkksjjpgksiirhlskirhhqfiqgmtkoumhqflrjmskmuloumjphoulovmoumnulmrkntlotmlrjnulltjoummtkpvontlntlnslrwppumoslntlrwootmrvoptnqvoswqotmrwpptmrxqpuntxqqunvztswqotltxqtxqotmtxrsvptwqvztuxrrwovzsuyrtvpsvpruosuotwqtyrrvosupuwruwqtxqsvpuwrvxsvysvystxqvxtvxsuwruwrrtosspxytxzvtupxyuvxstwqwytvxsuwruxruvqvxsyzuvwrwxtwxsuupvxsuuqyyuyyuwwswxsyzvuvruwryxu{yvyyuwwswwsyzuvvrxwswvryyuxwtxwtvuqxxuxxtywsyxtvurxxt{yvvtqxwsyxtxwsvurutqwvrywsyxtxvswvrwvsttousoutpwtrywtxwtxvrvtp{xvwsqwvryxtwuqywtxtqvspxvsvtqvtpvspwtqvsqzwtxuswsprplyvsxurxuruspwsqwtruqowtqvqoyusvrotqnuqowrpxtqwrpwspwsqwrpvqoupnwsqwrpupnrnkvpnwrptomupnytrupmsmkwqounlupnvpntomvpnwqosnktnlvqptnkvpnwqounltmktljtnltmkpigvpntmksljtmkqigtljpjhrkitlktnlunlrkiqkhrjhrkirljskjofeumlrjhphfqhfqfdrjhsjirihqhgqihogeqgfpgfogfqhfoedqhgmdboLKnpolpmsopoppqrpqupqsrsutwuruxxuvwwuwvvuwwvvutzxvvuuywwwvxww{wwxtyvwvwusyuywvywxvuuyyvwuuuvusyvwvtttuvtuxttwuuvvvxuxvvvyvuuxvwxuyvwvsyzuysywvzvuzyxvwuwxzxwvvuvyytxxtuuxtuvtwtttspssrsrqtsorroqpnmnmkKmJendbm`irghpghrgjsiiqggqfgpfhrgjsihqghqgjqhhpfksjfodiqgksiiqgjrhlrjkrijriksiltjjrglrjjrhkrjnulkqhlrjipgjrhmskmtklskmtkpvnksjlsjnulovnpvnqwoovmotmotmmtljqhpumlrjovnoumotmrwpouloummtkqvoosloultxrrvootlptmqunrwpqunqvorxpqwopumsvpswpsvptxrrwptxrsxqrwpquorvouxstwrsupwytuzsvytswpsvpuxsvxsvyssvpuwrx{uuxrtxrvytuxssvotwqvwswytvwrtwpvxspsluwrsvpxxttvpsuotwqvvrvwrxyutvqz|w{|xvwryzvwytsuoz{wwxtzzvxytwwrvwrvvrwvsyzuwwrvwqyyvyyustozyvwxszyuwwsyyuvupwxszyuxvsvwrzyuxxtzyvz{wzxuxvsxurvurxwtxwtywtwvqxwsvrpzxuxvtvuqyxtzxuxvswurwurvvrywtyvsxvsyvstrnxwsvtqxvswtqxurxvswtqvspwtqwurvspxurvtpwuqxurwsqxvsvspvrozwutpmvspwtqwtrwtqtomzvtvrpwtqwspvqoupnvrotpmysqupmvqnvpnzusuomuomvqouomvqnxrqsmkxtrvqowqptmkunmtomtnlsljtmkrljtnlupntnkqlivomrkjrkitljumlrkismktkjsmkumlsmksljsljpgesoltnmqigqkirkiskiphfqigrjhqhfpgfpigtlkqhgqhgphgofdphfohfrhgqfeqgfphfoecpgfogfofeqihoLKmlppopppqrrrqquourqossvsvtuvtrvwswyxvuwvwvxwvxvwxuywzuywutvvuuvvuxuuvxzyuuruywuuxz{xwwxtwyvyvwuuwtyxwuwxuxvwsuwuuwvwvxwsvuuxzyxzxwvwyxxxwstwxwxwyvw{yxutwsvutwyvvwtsstwruvtursusstuqrpsqqpqopqomoonlKlJeociqggqeencirheodhpfhqfhpggpfkrjfqeiqgfpejqijrhgpejrigpeipgksjfndltjmskltjjqhgpehqgksjhoejqijrhjrihpfkrinvlltjksinsklrjkqimsjlskmtkkrjnskmtkpvnmskntlmtkosllsjpvnrwpqvopunnsllrkltjmsjquootlpvnpvnntlqvorwptxqpummrktyspvntvpuxsrunpsmtxrrvppunsxptyrqvnrvpwytrvpwztrwptwrtwqtxquxruxruvqtwrvxstwruwrswpsvpotmyzutwquxrtvpuxqtwqwytvxsxzusvptuquxruwruxrxyuvxssupxytvwsuwqyzvuvqwytzzwuxryyuvwswwsxxtvvrwvstvqyyuxxtxxtxyuxyuyzvyyuwwsyyuyyuvvrxwtvuqvvrzyvvuryxuyyuwvryyuvuqutqzzvwxtvuqutpwvrzyuxvsxxuxuswtqwupwvrywtwvsyvswwsxvsxvsxwtwspvtpyxttrnxuswtqwtqvsp{xvwurvspsqnxurvspxtrvsqyvsxtruqnwsptrovspxtryvsvrpwsqspmvqowsqwsqvpnvpnytrtomuqnuqnvqnwrpvpnvqowrpuomtpmsnlvqovonsnlupnwrpwrovpnxsqsmkvqouomrmjupntmkqjguomsmkvpnuonsmktmkvomtmktmkvnltmjslkrjhtmkrljrkiqjisljpgeskjrjiunmtkjuomogeskiskjpigskirigrihphgqigrhfqjhrjhqhfofenfdpfeqigqihqignfdohfnfdqfeqNLlnnmppnnqpqrrrrrrutvttsrtsuuwvuvvwwwtu{vvxuwxxyvvtyvuvvwyxwxvwvyxwuxstuvutvwvuwvuwxvvsuxxtvvvwvxvyswyvsxsvvwvvuxvqvswvxzwvwvsyxvzxzvyrwxwxsvwxwwwvvwtszwtuvvyuutuwwwvsuswstuussutrrrqrtqpqqpnnonnljlLoKhqgfpegoegofhqgfndhqfgoeendgpfhqfhpghpgiqgjrihpgksiiqhjphfodiqhksijqhjrhmukiqglsjkqikqijthmrkksjkrilsjkrijrhksimtlpunmsklsjlrjlrjmskovmntlpunoummsknulnslpunntlntlqwopvnntloumnrktzsotlrvopumpunruoptmqworwoqvoswprvonrkqvorwpsvprvpqunrvprwoswpsvpptmptmprltwruxrswpsuoqtosvpuwrsupqtmtwqtwqsvoqunuwrxzvswpuwrxyuuxsvxssupy|vuxruwruwrqsmwytwxstwqwxsuwruvrvwryzutvqzzvuvqwxtuwrvwrvwrwxtuwrxwsxxtxyuvvrwytwxsxyuvuqxxuvvrxxtwwrvvqxxtxxtyyuwxtwwrvvryxuxxtutpuuq{{wvtpvuqwwtzyutupyxtwvsxxtuuqxvsxwtvuqxwswur{xvxwswsqwurxvsxvsxurvtqzxuutpvuqyvtxvsvspwtpxusxvsyvsxurwuryvswtqyvsvtqvrpwtrvspxurvspuqovtqxtqwtqxuswtqvspwtqtpmurowsqvqovqnwspwsptpnvqowqotomupntpmwqovqouomupnsplvqnvpnuomsnlvqnxsqsmkuomwrpuomuonsmksnlsmjuomrljsljqliunmvontnlsmkuomtnlsmktljpjhqjhqjhqgfsmkqjhskiqjhtmkqigskirjhqihqihumkrkiqhgpihrjirihsjhrihqhfpgfqigpfeofdqhfpgengeogepihqhhpgfkJImlokmmnnopnoorrqrrpvvuuuutuvutvwuuvwtxutwwxvwxutwwwwz{xtxvwvxwvwxxxvvuwtytrvtvxvtrwxuvvrtutwuuvuysyttvuwxwutuvwvxuyxvuwxxusvtywxyvxswuyvuswuuwswwwxvvtyuxvxwyxvxtuwrtvtuuuwqtstvsuuprqspnooprmnokmlmIlHfndfoehqgfoeiqgjrifodjrhiqggqfjrigpfksjjrhksjgpfgpfhqgltjiqgiqgmtlhpfkrihpfjqhmtkmtkjrhmtkkriipgntlkrimtkksjksintljsinulntmntllrimuknulmskkqiotmnuloumqwomtknulqwomskqwoqvopunpwnotlqworvpntlptnqvoqvnrvptxrovmptmpsmrvpquorwouyrqunrvpswqquoswqrwpqunqunuvqqvnsvotwqrtorvptwqvysvxsuxrptmuwrtwqqvovyswysruotwquwruxruxsxxtuwruvrtvptvqxyuuwruvquwrxzuxxtrtoxyttvquwruwrvwsxzuwxtuwrxxtvxryyuuwrwwsyzuvwrvxryzvzzvstowxtuuputpuvqvwsuuqwxstupvuqwvrvxswvswvstupvvqyxuxxtvvqzyvwurxwtttpvuqvtqvuqutputpvtpxvsvuqywtvurvuqusowvrutpwurwuqxwtvsqwtrsqmxvswtquspurowtqxtqvspwtpwtqwtquroyusxusvtqusowtqsolvsptqnxurvqntqnsplyuryurupnsqmvsqtpmxtqxtrvrpuqnsolvsquolwrovrovrpvqoupnvqosnlsolvrpsmktnlsmktomuomvqosomtnktmkunlvonvqosnltnlsljrljsmkqjhtmltnlunlrljtmkpihqjiunlpjhqjhqjhrigslkrjhsmkrihrkirjhsjhofeskirjiqjhrjhtnlsjisjiohfqihoferigofdofeohfqhgpgemecphfnbandckHGmjmmqpnpqprrrpqquuptvrvssttuvuvvtyuuzvuxvxtvvwwuyvvuvtuxwuxuwxwuxwwxxuuvxtuwwxwwyxxxwuxwxvvvtwvvvvwvwvwtuwtutwwwwuuvvvurwvyvwvvwxvuzyzxywvwvwxtxvvvxwuwuuwsusuvruuvsvqutvussursrqqtpuqqrtopnpkommmnjIoHeodencembgpfgpfgpfgofeochpflskhqghpfiqhfoeencktjhpgjqhjqhiqggpejrijrhjrikrihpfmulltkjrhlsjltkksjiqfjqhkrijqhnulkrilsjntllsjpvnpunkrhmtlmuloumnulmtkksiqwpounntlltjouloumqunmskoumqvorupptmpunmskswqpuntxrqvonslnslqunqvooslrvoswpuysptmsxqruoquosxqvzsrvpsvpsvpqtoruorvovxswyttvqqunvytruotxrsupsvpvytuwrsuovyssvpuwrsuptvqvystupsupvvqwxsstouwruwqwxtxzuwwsuvruxrvwsxyuvxsvxrwvrvxsttowxtvwsvwsuwqtuqwxstsowwsuupwwsuvqyyuvuryzvstoxwtwvswvswvsvvruvqxwtyzuwvrxwtwws{yv{zwxxtwuqxwtwurxvsvvrtsovtqxwswuqxurxvsvurxwtxvswtqywtwurvtqvspvtqwvrtqnwvrspmwuqxtqxvstrowtqxurxusxtqvspvtpvspuroxusxusxurtolsomwtqvspvrovrovrourowsqvqouqovpntqnupnuqowtruomwrpwsqvqouqntpntpnsnlspmuomytrwqouomuomtolwqoxrpvqnvpnqmjtnlsmjupmrljtmlwpnxrqunltmlsmksnlumlsljtmltnlsjhqjhsmkqhgrkirkirkirihqigpigrjhsmktkjtljqihskjqigqigqhfqhgqigrihogepgfphfqigtkjqigpgfqhgrjiphgofepgeoedpgflIHklkonnlqomprqprqqtttstutssutwtrwuvrvuuwwyusvwxswwruxxuwwyvwvvvwuvuwutuxwxuwwxtzvxvxvtuwvuxvuyutvvvxtuuuvwwsvsvuwquwtxwuwxvvtxxvxwxutwuuuvwvwvvxxvxvtwwyvxurvuuxvwttwwuusuuswtusrssrpqqpnopsonooqomklHmGgofhpfgoffoehofhofhqfhpfgpffodiqgirgiqhhpfipgjpiiqhemcjrhgneksihofjriksiirhjqgjsiksilsjltjktjjpgkrijrhjphjqgjpgkqimtkmsklrjrxpntlntlkqhmrkptmnslkqiotmkqilrjqunlrjksiqvnptmmrjswppuootlotmotmoslqwpsxqntlnskpunswptwrpumptmqunptmrvosvpsvpotmsvqrvprvopumtxrsvptwqquorvoqtnsuotwquwrswptwqtxrstovxsvwrrtnuwrtvquxrtwrsuovxsstortovxsuxrttpwyttvqstovwsvwsuvqvwrwxsvwrtupuvrvwsvxswyttvquuqvwsvwsvvrwwswwsxytvwrzzwyyuvwqwxtvwruupxxtrsnxxtwvswvrwwsuuqyyvvtpuvqvvrvvruvqyyuvvrwurvvrvvrwvrtsousozwttupvuqxxtusotsowurvuqyxuxwsyvtvurtsoxurxvsvspvtqzxtvspzxuurovuquspywtxurwurvqovqnvspvururoxsqyvsuspwtqtpmwtqvsqvspvrpwsqwrptqnuqntpnxtrwrqwspvrousourouqouqovroxtrvqormjsnlwrpxsqtomuomtnlvqpwrpuomsmktpmqlismjunmsmkrkiwqorljtomqkitpmslktnmsljsolrigtmksmjrkjsljtmksljumksljrkiqkiqjgumksljqhfrkirihpigqjipigrkirkiqgfsjhskipgfpigmdbofdqhfofeogeqihnecofdnfendcmdckIHlllmknopqqsqosrsunsurtsrsutsvvsutuutwytwyuxtuuvuuuwvxxxvwvwuxvxwwxvwuxxwzvwxwxuuxtwwvwvtwuvxuuuwvvvvuxtwquuvtxxuxxuuwxwuyvtvsvvvxuvtxvuwwtvuywuwxutwxuwtxtxwuvqwztuwtrtruswrrrrrsuvtssuropnpoomoplllHlGgofgofgpegofdncipgeodhpfhoffodhpffodgpfgqeipgiphjqhhpgjqhjqhjqhiqghrgjqhksiipghpfiqhkrijpgktjkrhmtkipgkrioummtklsjlrjmskmsknslmskmrknullrjkrioumoumoumnulmskosmquopumpunoslnslntlpunptmpvnorkqvopunqunpunsxqptnrwpptmotmnslswqotmrvorupswqoslrvptxqrvptxrrvpsvptwrswqrupsvpswprvprupruoxzuuwrtwrx{vuxstwruxrsvptwrwytuxrsupuwrvxsvwrrtoqrmuxrprlrtnvvsvxstvquwruvruvqxyuvvruvqwytrtosupwxsxyuuvqyyuttpxxtuwrzzwttpssovxswxtvwrwwsyyuwwswvsttpwwrwwsvuquvrwvsuuqxwswvsvwrywtvtqwxswvrxwtxwswurutqxvswtrvurtrovtqvtqvuqvtqywtwvrwuruspzyvzwuwtqwtqxvsurovspvsqtrousoxwsurowtquqnvrowurvtqxurwurvspvtqtomywtwsquroxsrzvttrowtrvrourpytrwrpvqovrpyusvqovqowrptnlvrpvqousovrpupnwsqxtqvpntpmsoltpmtoltomtomrljsljvpnrlivonrljtomrlismjsljsljskismjrljtomvnmrjiqhfsljsljtomtnlrkiumkrkismkpjhsmkpgeqhgqjirjiqkiqigqihqigtmlqignecqhgpifpgfpgepgfogdphgpedpigpfeofdnedldbmdbogfoKKmllooolopomoporsrppsssswuuururwqtvvsxuuuuvxvvyvuuwxxvwwwvuxwtuvwwvswwuvxvuxuuuqxssvsuwvttxwutwsuvvswsvwyvutxvtvvrwsvvuvzwvxyvvvuvuvxxuvyztwuztwurwuvwuztzwurvvvutwxwstvuupuuutsrrtroppsnooqppnmkmljkIlHirhfmdfoefodgqegpffodirghpfirgiqhgpfhofgpfmskhpgfodjqhiqhlskjqhjrhgoeiqhgoekriiqhirhfpemskjrhlrioumiqhpumkqilqijqioumlsjlrjnslotlounhpflrjotmnuljqhotmqwosyqpuootloumpunpumntllrjpunqvonslpunrxpotmmrkpvnpunnskqvoswqotmrvoptmqunorlptnsvpruoswpswqpumsvpsvqrupquouwqtwquyssuorupquntwqqtnsvptvqtwqrvpuwryzvtvqtvqvxsuwrvwruwrsvpuvrrtouwrrrmsupvxstvqvxsvysuupstoyyuvxsxzurtoxyuuvqwvstupvwrxyutuptupwxsvvrvuruvqwxtuuquuquuqssnwwrvxsttpyyuxytvvrzxtvuqtsoxwtuuqutptsovurxusuvqwwsvtqvtqvuqwvrvtpxvrwvswvrvspttputputpvtqssovtqxvsutowtqwtqwurwspvsqvurwtqusowvrwtqwsqwtrvtpyxuwurwsqxusurourpuroxurtpmxurtpnwspwtrwsqwrpwspupntqnvqowqovqospmsolupnvrptolupnvqowrptpnroluqotnluomuomwrprljtnlrmjtontnlsnlskitnlsnkrljrmktmltmkuolqkisnltljtmkskjtnmqkiupnpjitmkrkiunmqjhphfskjtkjphfogfrjiqihqjhrjhtlksljsjjqhgsljphfrjirjipfephfpgfnfdmcaqigofdphgpgenedpfflcbmdbnfdlKJlmnlmmooqpqqrorsqrtssswrsrtvuyuvtvwxvwwutwvwxuuwuwwtwvwwvxxvvvvutuzvvvwvvvvvuvvtsvtwtvstxuxvtwssxuuvwuwtvwvwtwxxuuxwuyvutwvvvwuuwxsxwwwsvzxuwuvwwttuwwwvswtwususuwwtuvxxttssuvtroqstppqppqponqplmmikImGdmchpfeodgoeeodhoefoegofgpejrhgnejphhpfgoeipgiqglsjjqhjqhipgkrienciogjrhiqgjqhhqghpfkqihpgjphksjntljqiktjlskotmkrjmskjphmskntlquolqjntlmskmskkqioumpunmskmtklsjnulqvootmpwnotmqvontkpunotlqvoqunrvoorlmrjrvpptmqvnqvnotmpunquoqunpunotmquouyssxqptnrvpqunptmuxrpsmptmuwspsltwrvxspsmrvoquntxrruotwquvrsvptwquystuptvpqsnuwrtwqvwruwrsvqsuotuqtuquwquvrwyuvxrstptupuuquwrrsnxytuvrvwruvrwvsvvrwxsxwsuuqxyuutpuuqtvqyxuwwswwsvvryyuvvrvvrwvrutpvvrwwsssnuuquspxwtssottptqozyvxwtxwsvtpvtqrrmwurxvsutpvuryxuwurwvstspwuqwuqutptqnxwstrowurxurvurvtqwwsvtqvurwuqvspvsqwurwuquspurotqnxtrwsqzvtrnjurpxururpwsqvrpurourourotqnwspvrovrpxtrtqmuqnvqovroupnsmjsmktomtpntnlywtupnuqouomupmsomupnuqnuomuqnuonunlsnkvqotnmupntnlpkhvpnsmksmjsmjrmjpjhsnlrljtmksljrljtmkrkirljpjhrljrljrkirjhsljrkislkrkjphgmecmfdphfqjhrkiqhgpigqhgqihogemecpgfmecphfnecphfrjiqjhphfnfdogeqhfngepgfmJIlllmnppptnnorrqurrvtqtustwvtvvvttuvtwsvtwvuvvuuuwtsvvxvtvxxuvuwsyzuvwxvvuuwywxuutsuursxvvxwsvsvtvtzrwwwwxusvstvwuwyyvwwyvvvvuuuvwwvuwxtzxvywtvuu{vwrvuwwwsvtyvvtvuyurswquqrqtspusqrssppqppormpmnmmnkKnJfnebladnbdncioffodhpffoehqfjqihqfgoffodiqhjqhiqgjqikriirhjqhipggoejriiqgnumltkkqijrhjqhlsjlsjkqiksilsjlrjjrhlrjirhlsjmtklrilsimtlkrintlkrilqjmsklrioummtkmrkpunqvooslotlotmptmptmoumntlswqnulounmrkotlqvomrklqiqunsxqsvpnrkrvoptmtwqpuntwrptnprltwqswqruoptmsvpruoquoqtoormtwqquosvptvqvysrtntvqruorunvwrtuqruovysuwrvyswxttuptuquxrtvqtvpvxstupuvqtvquvruvruxrtupuwsuwruvquxsuvrvwswwstupstpvvrxzvtvqwxtuvquvrvvrvvrxxtxxuvwswwsuupyyuyxuxxtvuqstottotsowuqwvrvurvuqwvsxwswvrvuqxwtwvsyyuwwstsovvrwvrrplzyvvurusovuqwvsvuqvtqwvrvrovuqwtqutpywtxtqvrowurwuryurvurxvt{yvwtrywtuqnxtrwtqwsqvspwtrvtqvspxurspmspmtomvsqvqovspxtrvrptpntqntpmurouqosmkwspuqntomuqnuqoxsqupntpntpmuqotqntnlxsqsnjvpnupnxsquomuomtmjqkismktnlvpnrljskitnltmksljskjuomsnlunltmlqkiqjhqigrljrlirjisljqhfsmkrjhtmkohfsljoigpjhrjiphfqigqhgskiqihslkrkingerihpfeoecpferkjnedqigpgepfdnfenfdpihoecmLKjilojpnnqrrpqotoprsqrsssrstptuvutwuttvquyuvtsssuxtwuwuvstuvuxzxtwywuuvvvuxxtxvwsxxrwuvuvvswuuvtvwuuvtxtqtvxxurswtwuvvwusxuwtwuutvvwrvuvutvwuwtuvuxuutwwwttwyswxvuwsuvvuvtvtuorttssusqnoqnopnqppnnplkHkGdncfpegoedmbgoeiqhgoegpfendhpfjqihpfishgqfhqggqfhofgoegnegoeksjltkiqghpfipgiofiqhjrijrijqhiqhipgjphjqhlsknummslmsklrkkrijphpvomtkntllsjjphmtklqiqvooumpunoumlsjotmntloumntlkqiotmnskpvnrwppumrvpqwootmoumswpnskqunqvoruopuoqvopunrwqqvoptnpumqtmsvpqunsvposlsxpruouyrswqrvoquotvqrtotwqsvpuwrtvqptmrtortnstpruoqtmstotwqwzutvqtvpuxsuwruwrrtnuwrsupuvrwxsuwrstosuowwssupsvptvqwwsxyuvwswxsrrmqsnwxsvvrzzvttpwwsuvrwvrvwruuqvwruuqwvrwwswvswwstuquvrvuqzyvvvrwvsxxuuupyxuwvrwwsxvsvuqxwtxwsvuqsrnwurutqutqvtqtrnusoutprqmvuqvuqxurwwsuuqxusvuqvtqvsqvtqxusxurvtqwuqvsqxvrwtqwtqvspwururourowtqvrpurovqourpvrptpnwspwsqvsppkhuqovrouqnvrpsnltpmtpnvrptmkuqnwrptpnupntpntomwqptomvposnltnmupnrljtomtonrmksnluomvrotmkqljslktnluomrljuomtnlsmkuomuomskiqjhqkiuomtnlskjsljrkirkiulkqkirlktlksljskiqjgskioigpgfqjhrjiqigrjiofdphfqkiphfofendcnedngemfdofeohfphfphfogfndbndcnedkKJmknnoonoqqpoopqrmqqssrqsstrqwtvtvtwutxwswvutwxwvtuwswxyvxtvrsuurwstrywstwwsvtyvtvwswvvvttusswvvwvwvuvssxutytvttuuttxxvuwuvtruvquwxuswwxtuvwuvvwtwswvwttuvwuzwvtvvxvsurxsrvwsrstvrqtororprrononjolkimHjGfodgpfgpehqgeodgofeoddmbgoejrihqgiqghofgnedlbjqhhqghpfjrhjqhjqhkriipgioggoeipgiqfksilsjjrijqhiqgkriksijrhkrilrjjphiqgjrhkqikrimsknslntlpuonskjqhpunntlotmnummrjpunnullrjntlnslnslnskptmlsknrlpvoqvorvpotmotmrvpquoquorwposlsvqosmoslsvqqunsvpptmotmptmruprvpptmptntxqptmqtnuwrsuptxqosmsupuwrvxttwpptmqtntwrsupuvruvqtvqtvqsvptuqsvquwrtwqtvquvrrtntvqsvpvwsuvrrrnuwrttpvwrwwsrtosuosuotvqwytttptvqtupwwsvvrwxswwtyxuvvqwvsvvqxxtvwrwwsyvtttpuupvvsvurutqwwsvurutpwwrvvrtsoxwsvurrqmvtqyytttpusputpwvrsroyxturovursrnyxuwvrwusvtqxvsuspwtqywtsrousousotsovtqtrnxvswtqvururowtquroqnkvurvtqurotqnsoltrnurovrowtquqowsqrnkurowsqupouqnwrpsoltqnwtrvrowrpxsqxrqvqosomtnltpmvpotmlvrptomupntnkupmtomuomsnlsnltmkwspsljtpmtnltnlupnqjgtmkrkjrmktnlskirljtnlsjitnltmlsmkslkqkislkrkjqigslkslkqigtnmpigofdqihrjingeofdogfrjiqigpgfphfrjiqjhoigpgeofdnfdqihnfeofdqhgnfdohfqhgmfdlIHijokopnonporrqrqppqossosruustursvsrstvtuuuwwwtuwuvurvuwwtxvvvvtrxxyuwvuvzwtwxuxwtswurwsvuvvuuwwwutttuvvsusuttvuuwyyuyvrttxtxyutuvuwwxxwxxxvtwvwwuwvuvvvxvutvvvsxtvuustrttpssutouqqqtpqrooopmqmonlkmjGiGendfoeencendfpeendfpeeodeodhpfjqhhpffndhqghpghofipghpfgqfiqhendiqhgneiqhkrijrhhofltjipgipgksjosllrjgneotmkrimtklqjhpflqjjphmskioglqimtlotmntmlqjpunoumlrjntkmsjlsjotmnskrupotmpunpumpunrvpqunquootmotnqvopumoumkrirvomsjqunswprvooslrvptvqquoqtntvqquoquoqtntxrsupruowytqvnsuoruorvptvqruoruosvqtvqtwqtxrrvpwytrtouwrtvqtvqvxsuxsrtovwrvvrtuptvqvwssvpuvrstouwrvxswytutprsouvqxxtwwstvqtuqrrnwwstuqvwrwxttuprrmtuqvvrvvrssnxwsutpwvrqqmwvswvruvqxvswwtvvrvurvtqttossoxurwwsuvqvtqttpwvspokwwsywttrotsozwuwvrvspwurvtqrpmtsputpwurutqtqnwurusozyvwuryvtrpmvspurovspxussrnuqouqnvsqtrosqnuqoxtrwsqxvsspmwururoupntrnuspsolwtquqnwsqsomwtqvqotpntomxsqtpmurormkvrovqotpmtpnuqoupmtomsnkvqouqornksnkrlivpntomunlsnlsmksnlwrpuomrljtnlrkiupnskjrljpjhrkipjhrljrljohfqjhqjhohfqkirkirihrihqigsmkpihpigphgqkiogeogephgphgphfnfdrihpihlcaphfogeofeofephgofenfdofdnecngeofeofelb`lIIlmnjmoooqpnnppprpqqrrsspsurstttwtsssutrtvuwtxvssttvtuxrvvvsuututtvwxuuvuvuurusuuvytvwyttxstvtryrwxxvrsttxuvvuvwqttwutstrttuvwsuwuxuzwxyyvytuwsuvvvwuuwuutvvssutsuwuusutsrsswrtqqqqrqotqqomnpomlljmnlHkGeodendeoddncgnefodhpfcmaendemcgoeelchqfjrijqignehqgjphfnciqgjpgiqhgpeirhjqhjqihpfhqfjqhksikrjiqgkrjlsjjphkrikriotlkrjksjlsjipglrjlrilsjlqjotmntlmskiphnskntmotmmsknslnslotmlqjpsnpunpumoummsjptmkqhptmptmotmoumpumlrjptnptnquooslnslqtntwqruotvqrwpqsnqvovytsvqtxrswqorlrvouxrtxquwrprlpsmtvqruorsnrtnsuptuqtvqruosupuvrrsostosuovxsuvrtuprsnxzusuptwrtvqstotuptupsupuvrvwsrtouvrssovwstwquvrsupuuqwxtxxtyzvtupvwruvqvwrvwsstowvrwwswvsuuquuqwwsuuqxytssntsouuqttpvuqutpwurttqtspwvstspuspvuqvtqvuqutpvurvtqvtqxwtwvssqnwvrutquspvtquspwurwspvuqvtqsrnvtqxururotpmtroutquspurotqnxuswurspmtqnwspvspwtqspmvsptqnuspsoluqornkvrpxtqrnkuqnsnktnlqmjsoltnlvrosoltomsmjspmtpmuqnsomupnsnkmfcrljtomupnsolsmkpjhtnlsmkqjhrljuomqkiuonunmpiguomoiftmkrkiqjhqlitolqjhrkjrljrkjqjisnlrljrjhqihqjhskiohfrjhqihqigphfqigqigofepigpigogfqfephfnfdnedphfohfogeogenfdoedogemecofeofeldcmKKkljjnmmnnmoopqoomsqrrtsrpwsqtrruvtvsvttuvvuwtwrvvwwvvuwsttvwwsvsuuuvwztutxutuwwsxwvtuuwttvsvtvsutrvutwwvvtuvsrtvuvuwuwuuvwssvtsuutwvwsuxvxxuvtwvsvuvvqtxrtuvuuttvuywssvtustrqrprqpqsqpqmoqoonmmjnkjjImHfneencgpfeoddmbdmcdlbiqhepdhpfiqhfodgofgoegpegneiqhemcgpehpfiqghqggnejrijshmtlltkipgkrikqimrkksijqhmskgoegpekrijogjpglskmskiogmsklsjntllrjlrjkrinsllsjntllrjlqjmsknslmrkotmotmmskmqjmskmsjorlnslquonrloslmqkpunpunrvpqunnslptmqunqvnquopunquouxsrvpqtnruprtorvoquoswqruorvoqtnsvpqunpsmruopslqtnuwruwruwruxssupsvqrsnpsmsvpuwrsvptwqtwruwrsuptuptupwxtuwrvwrtupyzvrsnvwsrtostouwrvuqstpuwqtupttpwvrstpwwsuvrttouvruuqtupuuqvvrtupttowwrvvruuquuqvvqvurvvrwvrvuquuqsrnutptupwwtutputpvurxvsywtvuqvurvtqwwsywtuspsqmttpuspuspwurvtqttputpxvsttpusovspuspxvsusoxvrurovtpuqospnvrotrourowtqvspvtquqovspurourosoltpnuqovroxsqtpnvrovqptpnsomwspsomurotpltnltolqnkspmsnksomuqosnlrljtpnsmksnluqorljtpmsomrmjtomtomunlrliuontnlslktmkwpnqkitmkumlpihsmkrljsnlqkiohfrkjrljqljsljpjhohfohfqjhslkqjhqjhsjhoigqihqigqjhngephfogeoigqjiogeqjhohgnedogendcqignedpgfnedoedlb`mecmbanfdmLKjlllnnnolomppqpsoopqsqssuotsurwuvussyrutuxvxuvxuxuvtxwwuwurtxvsuxwrsrtvvvusuuyuwwtwrvvsuttvwxsvutvxusxvwswtuwwxuyurtvvuuuuwurussvwrtuxvwuuvqsuttwwvuuurwvwvuvsrruwutsuturssqptutoqqprqqqpompommmlmjkEjEenceodencdmbcmagnegnehoghpffldclafnddlcfodiphhpghpgkriksjkqiiqgipgjpghnfksjiqgmslipgkriipgjqgjrijqhjriipgipgjqhkrjkqinsllrjjqhmskjogksikqilrjntlpunmrjnsmjpglrjoumoslotmnsknrlpunruonslnrkovnqvomrjnslqunmqkruonslntlnrlotmquosvpqvoqunptmrupruouxstvrqtnuwrqtnpsmruoswqrvpsvpquoswqsvoruotwqqtnsvpqtnsvptvqsupqtnvytvxsorlqsmsupuwrstouvrtwrquntvquxrtuptupsupuuqstpvwsvvrttprtnrtotvquvqtuquuqvvrxytvuqvwsvvqwwsuvquuqxxtwwsvvrttpvvsttpwvsvvruuqvuqwvruvqvuqtsouupssoutpttpvvrvurwurvvsrplvurwuqutqutpxvsusptsowurwurvuqutpvurtroutptqnwurtrnvspwspusptqnxustrovspxusurpxurtqnurospmvsouspurowtqvsquqotomuqotqnvqosolsqmusptomwsqtomvrosnkwsqvrpysqqlivqptomvqosnlvsquontpnwqormjtpmrljuomrljsmkuomsomuomoigpkhrmksmkqkirmkrnlsmkrljpigsmkrljqkiqjhrmksmkrkiohfnigqigpifphfrigskiqigqjhqigqjiqihtkjrgfrkipigogfnedqigphfnecnecpgfpigndcohfphflcapfelcaogfohgldbmecldboLKklklmlnlqnmppqqnqorprurqqstpstsuqtutyvtvurutvtrsvuxvtxrruvtttruuuvwwxvusuuusuruvvtutvvuuvwtvuwuvxuuvuusttsttuwqruuvtwsuuvustwyvutvuvtuvvvuwwvuvuvvvuvtrwuvvywtstrrspquuusttruvsqpsoqqnqqpmmjmlmpknlkJjIendcmbiqhclbencdmchpgfodfoefndlsjhpffodhpfcmbencipgiqgjqhgoeiqgiqhipflrjgpfgoehpgkrijqhipglrkmskmskhqggnekriltkkqilsjmskjqhiqgmskmsklrjlsjnsllqjotmnslnslntlptmoslnrlpunmqjnslnrlouloslntmptmmrkmsjqvorwpjphqunotmotmmskotmorlqtnnslptnptmoslpslorknslswqquoqvoosmptnptmsvpsuposlrtoqtnqtnosmuwrruosvprupqsmqsmtvptwqqtnuwruvqruoqtntuqtvqtvqvyssuptvpwxtqtnvxsvwsuvrttpuvruvrtvqtupuuqttpuwrwxtxxtsupuvruvqttpqqlvwrtuqvtqwwsuvqvvrstpuuquvquuqttpttpzyvuuqvtqwwsssouuqutqtspvvsvvrttpttpusptspvtqvurywtvuqttpurowtqwurusowtqwurutquspzwuxvstrntrotqovrousourovuqvtquspuspuqovsqurotqntqnspmurptrovspvroxtqroltqnspmwurwsqtqnupmurptqnuqouqovrotpnsoltpmtqntpmspmuqotnmpkhrnksnksomupntomsmkupntnltpmtmlqjhtmlupnsmkpjhslkrjhsnksnlsmksnlpkismksljpiftnlsmjqkhsnlpifohfsnlrljqigpjhsmkqihrkiqjiqkipigqigphfpigphfngeskjpgfnfengeoferigoedofenfdofdogfnfemecofelcbngenfdmKJjllnonnqpqnooqqrqqpstqstptqqvwutuuuttvtvvwtysuuttuxvuuvtvtswvuuuutvvutyvwwsutvuttvvstvttuvvtutsswuvruxrqrtsrwvvuxuutvuqwuswwvwxvtvstvruvttttvutvwwwvtwttssvuwwwoutrsustqtstrrtnmpqqplqoppoppnkkmkkljGjFenddlbdmbeocfndgpfgnefneenchofeodhofgnegnejqhendiphioghofgrfjqhhofhofjqhiqghpfhnffoeipgeodlsjlsjkrjipglsjkqijqhjrhiqhipgoslntklrkmskjqhotmpunmrjntknskjqhntlotmotmnrkounlqjoslosmquopunrupotmlrjlrjntloslpunosmrvposmsvpnrkquopunrtoqunrwposlprlrvppsmruoqtnrunqunqunqtmnrlruortoqsnquoqtosvqsvqtvqruouwrsvptvqprmruovxssuprtnstovxstvqtvqtvpsuptuprtntuqtuquwrsvpuwsuvrvwrtuqsupwwsssovwsttpsuouvqsuostowxtstouuquuqwwsvwsvvrvvrssnrrmvvrtuqvvrwwsssouuqwwsstoutpzxuyxutspuuqtsowwsutpxvsutqvtpwvstsorplsrnusoqplssowurxvsusqvuqutpvtqvspwurwuquspurovtqrpmusqwrpvrowtrtqnusputptrotpmvtquqosnkwrpuqotqnspnspmtpmvspuqnspmupnrmksnluqotqnvqouqovrpupntomtnltolsnltpnrmktnlsmksnltomtomtnlupnsmlvqornkrmjsmkqkitnlsnlrmksmkqljrmkpigrlirkisnlsljrmjrkiqkhsmkphfrkisljpjhohfrjhrkjqkipjhqjhrkiqkipgeqihrkiohfpignfdogfmecpjhnfdrjiofepgfphgmecrihphgnfeogfnecnfdnedpfelcblJIikmmnoononmqprqntpoortsrsorssvsutsttrtustuurtruurxvuutuuuyuttvxuuvvvruvuutyuvqtwsutrsvuuuvtsvxsvqvuurtuuvwuvustwutwvvvtuuttswvwvttwrssuuuusyttuvvsutuutvtttuunstsutqqqupuqroqpqrqqrrqqpppmnmlolknkkiHlGgofgpegpfencfpecmbhnfgoeencfoegofhoegofhoggoehoghofipgfndjrijqhiqhgoefndiqhipgfndhpfhpflrjhoflsjkriipgkqilsjjqhkrimskiphnslmskjphotmlrjmskntlkqimskoslmrknumntlntlnskntllsjmtkqunntloumnsllrjquopumnrkptmntlptnmqkqwopvnmqjqunoqknrlosmpsmnrlsvporlptnnsksvpquomrkqtnruoptmorlruortoqtnqsmruntwqorlruppsmqsmqsnruosupqtotvqqsmsupsupuwrtwqrtntwrssouvquwroqkstotvqtvrtuptupuwryzvsupvuqvvrrtnqrnvursupvvqvvsuuqvwrrtowwstsossouupuuqxwtvvrvuqutqtsosrnxwtwwsvuruuqssovvrutqvvrutpvurtqntrnvurusputqtsosqmtsoyxuvuqusputpvsptroutpusptqowtqtsourotqntrospmtrotroxusyvsvspspmtrourotqnxvstqmupnrolurotqmvtqtpnwsqwspspmtqmtpmromvsptomuqourorolvqovqosnlsolvrpsnkuqnrmjvqoqljunlqmksmltomsolqlitonsmktomrmjsmktomqkjpkirlirkiqjhpignhesmksmktomrkiqjhqkirljskjogepigsmjrkipgerkjpifpjhrmkpkiohfnfcpigskiphgohfpihpgfrihohfqihpignecphgqjhogfohfnedmecpignedpigmecmcanfenedlKJkklmomnmlnmrpnrmqpqqosrsrssrtuqtsvsrvtqrxpuvrytvvuytrttwwuwvvvuytwsvvwwxuvqvsutttuwuuvvvvsvstvruwvrurtvtvtuwuquwtsttuttuwwwtrvtwvswuvuwuwstwtswvtvvuutuvvvxrurtsututuqrsoprsupqqqpnppnolooqnonnnnlkkIjHendfneendcmbdlbgoffndfndfndhpfhqgiphhqgjqhgnejqhjrihofipgjqhfodipfkqikqihofiphiqggpegoelsjjrijqhlrjmrkkqijpiipglsjjqglqjlrjjpgkrikrikrikrjjphjqhjriptmkrhlrjotmotmkqilqjmrknskoumosmosmmqjquoqvonskptnjogpumoslkphosmpsmnqlrvoqtnsvpptnpsmptmrvpqtnptnruoptnqtnqunsupruostouwruvrrtoruoswpqsmsuptvqqtnrtoruoqsnpqltuqqrmvxsrtosupsupstoruortortotvqttptvpqsntvqsuptvqvvssuouuqvvrqsmtupstovwssupsupvwstuqwxtstouvrstotvqssnuvrssovuqwvrwwtrsnwvsuuqxxtttptupwvrvurvvrwvsvvrrrnwvsttottpvuqttpsroutpuuqwtqvurwurvtquspxwtvurywtutpxvsutpvtqutptrnvtqtrovsptrousqvtqwurtqnvspurourovsqxvstqnrnkroluqotrosqmpmjuqoupntqnvtqqnktpnvspqmktpnuqnqljtomspmuqnromrmjuqouqoqliuqotnlxtqsolpkisnlrmjqkiqkiqkitnlsomrmjtmlqmjqljrkismkqjhsnlrkirljslkqlismkslkrkirjhoigtlktnlpigqjhqkiqkhphfpigngeqhgqihmedrjhofeqjhqjhqkiqjipfemecnfdqihogfpgfpihogfogfmcbogeofenedoedlbancbqihmcbmJJmhjmqlnnpooppmnqsrpporpspsutqqtursttuvvsvuvtstvutttuvvvuvuyusurxxxvxvwusuwttrvxuuvtrqvttsttvuutttsutuuvsutuuuptsuuwsxvuxtstxwtwvvvytttuxstrvyuuvytuuuvwvvususptvruptsttqtstvrsoqpnqrornponnpnnmonmmkHjGeldbkabmaendirhdmcencfndhpgemdhpfhpfhpgfodiqhgpelskfndgoejpghogiqgbj_jqhipgjqhiphhpfhofkqiiqhipgkqijphipgnsljpilrjkrjlsjmskkrjltjnsllqiioglrjlrjlqjmqjkrilrjmsklrjnslmrkqvomskpunqtomrkosmptmnslptmnrkswqptnrvppsmquontloslnslquoptnnrkruooslnqlqtoqunsuposluxsptnquortoorkorlrtoqtmuwroslrtnuwsrupptmsupoqkprlsuortouwrrtouwrtvqorlqtnsuptuqquosuprsntuprsnrtoqrmtupstoqsnuvrrsowxutuquvrstpqqmtuqvvrvvrutqtupwwsttpttpuvqutpuvrvvruurttpqrmtuqvurwwsutpwwsqrmrrnwvsuuqwvsutqvtqusorrnttotspvurwvsusputqutpuspuspsrnrplsrnwurtqnttpusptrnvspuspvtqusputqrplusptomuroroluspvsprolvrousowtrxusvrpxtrvtqtqnwurrpmspmspnurorpmsoluqouqosnksolsomuqnsolsmkqnkvqosolsmjrljvqpsomtomvrptnltomtoltomupmsnkpjhqlirmksnltompjhqljslksnlqkhqkhqjgqjhtnlpigphfqjhqjhrlkpigpigqkiogepigqjgpigpigpigqkioigpjiphfogfngeqhfogephgogfogfofeqihngepigqihnecogephgmdcnfephgphfmfdohfkdbngelMLjlmmmllmolqppqnmoqoqprrssqqsqurttruusuvruusuuuvsrsurtusvrvurwvtvvuwuttvssuwwtxuuvtuuusxrstrtssrwquuusvwrwtvvtvttvruswustvsuuvrvxvvtwrwvxvwtuwttswtuvtvtusuututtwsusrsspqsqrsqqssrprppmoonplljmnjklmiHlGaj_endemcdmcfodgneclagoegoegqfdmcfoeencendgnegofhqggofemcjqhiqhfndjqhhoehnfjrijqignehpgksjiofjqhgoejrhjqijphmsknsljrijpikrimskkqhkrimskoumjphmskjphjqhotmmrkmrjoslkrimrkmqjquontlmtkmrjlsjmrkmrkpunpumnrkptnrvpptmpumntlptmoslorlqsnruopsmpsmsupruoptmorlquoqtorupsvptxrrtonrlqsmsuprunpsmwwstvqqtorvppsmqtmprnruoqtntvrstoqtnruotvrqsmqtnsuosupqrmrtouwquwrpsmttpstostotvpssorrnrsntupstpwxtuuqstpuwrttottptupssottpxxtttprrnwwttsovvrwvsvvrttottputqvurxwtsqmuuqywttsoqrmssotsouuquuqtrouspvuqvtprqmtsotrnxwsvurywtuuqutquurvuqsqnsqmtrosqmvtqtroupntrovtqurovrpurouspuspvsqsolurospmuqotrotpmsoltqnsomurosqntqnsqmvrptrourptomtqntpmuqovqnsomwrqrnktomsnlvqpsnltpnsmlrmjsnkrmkunlsnlsnlsnkspmunmrmkrmjpkisnkrljsmkqliqkipkiqkiqkirmkqkiqkiohfsmkrjhqjhqjipjhqigsljpjhphfohfpigpjhqjiqjipjhrjhnfdqhgphfqihnecofeqhgmcaldcnfengfpigrihofdqhgmecmecpgenedldblcbpgfofeofemKJjjknlpnplmnnpooqppssrrpospottstrstsutqttutsrutrvvwtutyquvtxwwvsrsuvxusuurtuvwvvutxwurstuuwtpuuvrttryvwvtvqswxtustuursvsttutstrtruwvtwtsqtttstttuussuutytsuuswttrupsstrqoqstrrqurpqporponolnmlnmmmijjHkHdmcemdfneclbgoefmdgnefndfoefndiogfndiqhhpggoedlchofjqhgpfgoefndfoejrhhoehnehofiqgjriksjiqhjqhjqhipgiqhjphmskipgkqilsjmtkipglskmrkipgkpilrjmskmsklrjnslmrkotmkqimsklqjmskmskmrjotmkpimrjpunotmrvpjphmrjnslquontlorllqjpsmotmprmmqjoumlqjswpnrlptnqtnptnmqjquoruoorlqtnptmprmstoruorupquotvqsupsvpruortotvqruprupstotwrttpstoqsnvwrprmquosuprvpstosuoqrmqqmuvqtwqsspvytuvrstnstotupsupssoprlqsmsuptuqtupwxtssoutppqlssouvrstouvqwwstuqtsotspvurwvstspuwrvvrttpuupstntsovvrwvsqplxvswvswurvurttotspwuruspuuqwtrurosqnqolurovurvtqwtrsqnuspwvstrorqmutpuspuspvtqurpwtrurorolurotrotqmroltroqnjtqntqnrpmuroqnktrospmvrpspnwtrspmsnlupmsolvrotqnrolsomsomtomtomsoluomsnktpnsmkrnlsqmsnlrnlspntomrmkqkhtomqjhqkiqljuompjhngfqkhrmksmkoifqkiokhrljrmkqkhrljrkiqjhqjhtmlqkiohgrjirkimfdrjinfdoigpgfpigphfphfohfogeogenfdpigqihmecrjhpignfeogemcangfqjhpgfla`mdcmedmdbofeoedlcaofemJHmjjmlmomplnomoqqrpotqqrpqqturpwrstrwtuvrsrtrrwrqtuywqrrttsqruvwtuuuwututuuwuvvttttuwtsttrsuuxwtuwtvvuruutwvuvwuwtxsssvtwwuvvtttwtttsspuswuputxusswssxuuvruwssvrsstrssqrrrrpqnqpqmrnoploomnmnolmmmnjiIkIelcgpfdmbdmcelcfoecmafndfndgoegpeipgencfndgoefneendjqhjrhiphfmdfneipgfndhofipghpgjqijrijphhofiphkriiogipgnuljpggoelrjipfntlkrimrkmqjkqimrkntmkrjlrkmsljphnslntlmrklqimrkmtkptnotmlpimrknsloumorlnslptnmpkptmnrknrlotmmsknrlsvppunosmosmqtnormptnorltvqptmoslqtoqtnosmosmpsmpsmoslsvpqtnqsnpsnqtnqrnqsmrvotuprtoqtnrsouvqprlsupruopsmvvrtuquwrqsntvqruotupstpvvrtvqstptwquvqpqluwsstptuqtuqwwstuqvvrrtouuqssousquuqttpssossovvrttpssntuqtspttqqrntupttpuuqwvrttputqutqttpsrnvurtsovsqxwtsqnvuqvspvvrrrnvurvtqrqmsqntspuspsqnutqwursqnusqspmtrnrpmutqwururotsoqnjtrntqnvsqvsptqnrpmuqotrouspvsqtqovrouspsolspnuqotqnuqoqnjvrqtolupnuqorolsomsnkpkhplitpmspmrnksolsnlrljtomrmjqlisnlsnlrolrmjqmjrmjrmktnlqlirljtontomrnkqkiqljsmkqjipigsmkqkipjhrljrkirlioifsmkrljohfmgdqljphfohfnhfmdbrkimebrjiqjhpigskipigogeogeoedogfogepigqihnedpfdoedpgeofeogfkbamfeoednedmfemedlb`kcalJJhhmmlmonkopqnpopqqpqrqpssrptqssvvsuuuttsvtvwvsvvsqquvurqtwtuusvvsuswuvtutuwrtvxtvrsussvuwuvwsvvvturrtsqttrsttuqwtuwrutvvwxsstvuvvvvuwvtttwutvvvutwtststuuuuuputtsupqrutrupnrrorqppnpnpnpqmkllmljklkiHjGckadlbbmadmbdlbemddmbfndfnegofgoefneemcfodgoegoeendhofgpffneeodjqhjqhfndfndgoejpigmehofiqggoekrjiqhipgkqiipgkphmslkpilrkjphjphhnfjphkpikrikrjkqiiogkriipglrjnslmrklqjkqimrknrlosmoumotmnrkotnmskqvomrjptmoslmrkmqjlpinslruoqtnnrlnskqvppunpsnoslptnpsmnrkrvpnrkptnsvposmsupqtnruoptnqtnrtoqtnptnqtnpsmoqlquosvpqtnrtortntvqsuptuquvqruoqsmuxssupuwrtupptmsvqsupuvrqrmstpvwstupvvrstopqmuurtupuvrtvquuqtuquvquuqwwsvwsvvrtuqssotuprqmxxtutpssovvrvurvtqrsnvvswwsutqwwsuuqtrnssoutpsrnrpluuqvursrovuqttpvtrtsotsptsossntrotrotsospmurputquspsqmusputqsrovrovtrurovsqtqovtrurpusptrnsolpmjrolurovspwtqtqnwurspmuqntqnspmqmjroltqntqnsomuqotpnrmkuqnsolupnsomsnkvrpupouqoqlisoluomrnlsmktomrljupnrmjqljpigqkiqkirmksnlqjhsmkohfrljrljtmlrliqjhrkjpigrljqjhojgqihpigqljogfrljskipigojgnigqjhpiglcaphgqihphfrjingephfofeogeohfofdnfdphfmecofemdcmecmecnecngenfdldbnedmdcncbogfjJIkjnlmlmkonmnonooqqqqovqqttrqrtrsrpttsuturrstvuptvqwxvutusuvttvsuwtuvyuttrusstvqssrvtuwsusttuvupwutwuuswvvsrwwsvttsvuwvsutstwwrtvvpuvvtvvtxwwxutsutrtsuturwqttqrutsqptprqsurqqrtrrqnooompoonmnjllmjkkFjEcmbclaemcdlcfoeai_krifndfnefpeemcfndhofgnehpfgnehoggnefndemcfmdhofhoghpfhofgneiqgfmdjphjqhiphjqhiphjqhjqhiogipgmtlmskmrklrjlrjmtljrijqinslkpimrjlpikqikqjmtllrinrlotmpumnslkqilriounounmrkmrkotmmskkphosmlqjoslmrjnrkmrknqknslmpjnrkoslptmrupruoptmptnoslqtnormoslpsmqtnruoprmoslquoqsnmqkwytpsmtvqnpkstpqtnsvqrtostoqtntupsupruppsmqsmtvqprmquoqrnstpsupttpqsnqsnuwssupqrmuvrtuptuprtnstotuprsnuvrtvqssotspstovwstuquvrtupuuruuquuqstprsouuqttpwwtuuqtsosrnvvsutputqttqttpvuqsrorqnrrnwvsspmwvsuspsrorpmrrnvsquspurovtqutpvsputqsqmtsptqnsqmsqmtqotrosqmvtqxustqnvsqsqnuspupmxustpnvsptrospmurospmtqoroltqnspmvrpwtrvqospmtqnqljsomsomplitqntqnrnlsnltpnrmktnlrmkuqnpkisolsmkspmtomrmkuomuqoupnrnlrkipkhrljqkipignherljrmjsnlrlkrlirkiqjhqljpkiqkipihpjhrkjqjhqljrkingeqjipigphengeqkirlipjhogfngeogeohfpignfdmdbpihogeogengeofenfdmednfdmeclcaldblcbmdbnfemcajbanedlcbnNMikkklolnnmolpnppqqprnqrsrrprqrrqrssrvstvsqsttvtrtvvussrtwryvvuuvxuvuusuuvtussvwuuwssuvttrstvvuurttuqttttvttvvtutvtwxtwvuuxuuttswsuttttstuxttvuuvtysuvurrsuutvssuvvsrttqqsrrposopqlpqnmqqmpmomnlkmjkkIkHelcclbfneblahpgdncdlbemdhofcmbendfneencfndhofhogfndhpgipgiphfndgnefoeinfgpfhofiofipgipgiogjqihpfjphiqhjpgirhiqhiphkqilqjlqjjpghpfjphkrjmqkotllrjlqjkrjkqikqimskmrklrinsklrjntlntliofmrjotmmrkptnmskmqkmqjptmruoptnntlotmqunorlpunptmosmptmormpsmqvoptmoslpsmptnorlrtoqtnnslruoosmstpqtopsmtwrrvpruporlqsnqsmsupruoruorsntvqqsmtvrsuptvqqtntvqprlqtnruotwrrtotvqrsossorsnstouvqrsnrtouuqvvrvvrrsoopkstotupssostostosrouurrtorrmqqmtuqqrmrsowwtsrnqqmttpsrnvuruuquuquupuspsrntsosrntsprsnwwsrqmtsouvrtsotsoutqttpwvsqqmutpwvrsqnvurusptsotqosrnspmuspqokxurvspsqntqnuspspmrolvtqtqntqntsospmusptqntrotqospntroqmkspmrpmsomuqospmuqnwrpspmrnlsomrmksolvqosomrnltpnpliqljpkipkhtomqljqkiupmqmkrljsmksnltnlrkiqkjqljokhslksmlsnltnlpjhrljoifqkiqlirkjohfphgqkipihpigmigslkrjiohgohfqifpigngeqjhqihogfngeqihpigqihnednfdqjimecqhfohfmecnfdnedngfphgmednfdndcmeclcbmfdmecnfdlb`kJIjljlkpnkoolqppnpqomroororssstnsptstssrrrtrstttrsssttuuusrwuttvuuswxqvrttqwuttstvturrwruvsvxpuvuusrrttvutttwvvvusvvuuuwvtrutvtrttuqvsuvuuuvuusutstttrustsrttsttsquqqusqsrrssrpqqqpompompmlonookmmklimGjGdlcemdgoegoffoecmbak`goeioggoffneemcencemcfnefndhpfdlbipffodjriiqhemciqhfndhnelrjjqijqhipgioghofjriemdiogjrijpghogiqhlrjkriipgjphkrijqhjpgkpintllrjmskkqikqilsjosmkqikqimrkorlotmmrknrknrlntmnslptmorlquosvqosmmrjnrkpunmqknslpsmpsmoslqtnqtmquoruonqkqtnqunptnotmqtnruorupqtnptnprmpsmoqlnrlsupprlsupsvpsupquortnptmqrnquopsmuwrrtosvpstpqsnrtouvqqrmuvqstostprtnrsnuvrutpstpuuqssnqrmrtoqqlstopqlssouuquvrtuprsowvsssovwstsoqrmrsossorqmtsprqmstottptsoutptupttputquuqutqttpsqnrrnutqvurtsosqnttquspsrosomutqsrntsosrowurwursqnvuqtrntrotqotsospmutqvurtrosqntqnrolurowsqqnkurotroqnjtqotqouspxtqtpmtpnspmspmspmspmuspsmktomqmjsolsomrolsnktolpjhtomsomsolplitomsnlrljrnktnlpliqliupnrnlsolqmkrmjqkiojhqljpkiqkjrljoigpkiqljqjhpjirkirljqjhpjhsmkqkiohfpigogfqkimgdnhfogepihmgdohfrkirkiofdqjhofdngeqkjmfdmfcofemfdmfeogeogfnfdoedmecmfelecnfdohfnedmdcldboedledkcbja_gGFjjknllommmlmmnnprqrqopqqrstortsqttstrqvsrsrttwrtturwsutsxuuussusvxuuttututvpsssusvuqtxtvwututttuttrttvtuswsswsrssuututuutuwvutsuvsutsvttvuwtvruuuuusstsussturvvqtusqutottoqqrooppqpnqpnmnnmmlnnmljkjFiEbmackbclbgmeiphdmbfodfoeclbfmdgoefnefndfmdemceodhpfgneendiphfndfndhnegofkqifndfmdgofgpfhofhofkrjjqhfnchpghpfmrkjrhhogiqhhpgipgjphntlkqhmskmskotmnrljrijphmsllqjjoglqjjohkphotmmqjotmnrlpunntljohmrknsllqjkohosmptnquojohlpilqjosmnrlnrknqkmpjoslpsmqtnnslpsmrupotnormqsnorlqsnqtntvqqsnpsmorlruortorvpsupptnqsnrtorupqsnnqkqrnpqlprlruostporlprmprmtvqtupsuppsmrsouvqrtotuqqtnuvqqsnrtnuvrrsnuwrqrnstouuqtvqttpuuqrsouurssottprsnuuqstowvsutqrrnvvrvvrttpuvrtuqsrnuuqutqtuputqttoxxtuuquuqtrosqnsrovurtrotsowurwurtspvtqtrorqmsqnsolsrouspsqorpmtrospmsqmspmtroqolwusurpspmspmspmusprqmurosqnroltqosolwsqtpntpmrnlspmuqnsoltpmtpmsolpkitpmrnksolrljtolrmkvrpqljrnkrlisnlsmlqlivrpqkirmktmltomsnlrmkplirljsnlsljrkjqkhpifrmjrkiqljohfqkimgepigphgojgpjhqihqkipjhmgeqkirjhpigrkingemdcpigoifpihmfdohgogengeogeogfogepihogenfemecogeqjhngeldbmednfeldbnfdnednfdmdblcanfdmdciHGiklkkknmknqknroqnrosqorsqrrqqqssrrssuqqsuttrrstsrttrsrvsststututpqtuyvvqvvvvvwvwswsuxtwvvrstxuqvtuttwtuurutuswuvuusvuwuustutwtuvtttwrqusvuswstwqqwtttsutpvsrrrrttrprststursptqroqrpooqnmqllmlklpmmgjHkFckaaj_ckadlbgneendhpghpffodclafnehoffndfndendencelcgnfdmcdlbgnegoefndgoeipgipggnfjphjqhhpfencjphgnemskiogemcinfgmejphlrkgnekqiiphlqjkpijphnskhnfkriipgkqjmrklqjmrkmrjkqilrjlqjmrkkpinrlmskmqkosmmqkmqjlpjosmnslosmosmosmnskqtnmqkosloslnrkptnnqkpsmptnorlpsmruopsmqtonqkptnnrkruppsmnqlqtnpsmqsmqsnorlqsnpsmrsnsuptuqqtnnrlqsnsupqrmrtorrntvqrsntvquvrstpqrnvvrsuorsnrrnuvrprmstortottptuqprluuqssostorsnuurppltuqrrnstptuqtuqtspvvsrsnqrnstpvvrsspvvrttpssouuqtspqpltsoqqltsottptsoqoltsputqtsosqnvuqrpmvtrsrosrnutpuspqpltqntrorolsqmromtqntrosqnwsquspwtrusqrpmtrotpnsqnsrouqoqnkrolspmtqnspntpnrmksolpmjtpmroltqouqosolpmjtpnqmjokhsolsomrnlrolsolrmkpkholirmksmkrmkpjhsnkpjhrmkpkhqliqmjrnkrmjpmjpkipjhpkisnlrljnjgrljqkiqigqigsnlqjhqljpjhpjhpkipigqkiqjhqjhngepihnfdngepjhohfphgogepjhnfdnfepigmdbnfdnfengemfdmfdmdcqigogekcaphglecmdcnfdlcamdclcbldbofdngeneclcakIGillkmlklllrmpnplonrrqrsqorqrrsrsrsssussrqttrtwsuurtvwsstuttttsuututuuvswvvuwvvuttqtsvsuwutvttswququussstsqrrssuuruyvrptuttusqtvtsvturqttpvssrqtqttvutqsusrusuussrpssqoqroturpqoopqpnpmonommnllljhgjhHkGemcak_gnefnefndemcemddncgnehofdmcgnfclbhpggofhogiogfndgnfdmcjphencfndgofhpghofckaelcfnehpgipggofipgkqjhogiogiohjphjqhjqiioglrjioglrjjqhipgipgjphlqimrkjphnsllrjkpinslkpikpilqjnsllpjmqjmskmrjlqjlpjounmskkpipummqkquoruolqinrkorlqtomqinrkorlosmqunoslruoprmoqkosllpiruoorlprmoqlorlqtnqtnorlquoprmruppsmprmqtnrtoruoqtnqtmpqltvqsupstpssoqrnsvprtotupqsmrtoprmstprrnstpoqlssortorsouvruvqsspvvrqsnookutpvvrrqmrsnstouurvvsuuqttptuqtspsrnvtqttprrntrotspqqmtrorqmrqmsrnpokutpqolwvssqntspqpltrnvuqsroqplsrnssotrorqmsqnpoksqosqntspusprplqoltqnwtrsqmuspqolsqovspusptqntrosrospmspmqnkusptpmsrovqnrpmtrnrnkqnktrpsomsoltqntpmtpntpntpnrnkrnkokhvqoqmjrmktolrmktomrmktomrkisnkqmksolpliqljtomojgrmkqkioigrljqljpigrmkrkirmksmkrkiqkisljnecsljrmjpjhnheqigngfpjhpjhohfmgeohgpihphfpihngenfdnfdqjhphgqjhpigogfnhfohfogfmfdnecnfdnfengeogfmcbndckbaogfogeogfmdckb`ngelcaja`jKJjjkklllmnkmooppmsorsprsprtsqrpqrrttsttsspsppsrvssttuswutuutsrsrvsruvstsvruqvrtustsqvusqusvvwsuuuttttprtvuusutwutqsoupwsusuruvvuvwvtqpvusvttutsuutrqvutqsoqssrqtrsrrrsrpqrtonpoqrnoppnrnqnmlnlnmllkjkHiGckbclbfmdclbfnddmbendbk`clbdmcelbelcjqicmbfndemcelcioggmeckahpggneiqggneemdhofgoejphiphgofhpffmdhpfgoejrikriinflrkkrjlsjjrhhnfiogkqjlqjkpijqhjqijoglqjkpiinfiogmrklrjnsljqhmskmrknrkkqilrjpunjohotmjphnslmslnqjloiorlrtompjnrkmqjmqknqjmrklpjnqkptmnqkptnpsnnqkqsnoqlosmoqlruprtonqknrlqtnrsoormptnqsnorlnqjpsmqsnoqlquotwrruoorlorkstpqtnorlqsnrsnpqlrsossosupstprrnrsnrsnrsnrrnrsnrsosuprsorsostpttpvvsqqmqrnrrnstoqrnopkqsntsprroutptrossorqnstpssnrrnssoqrmuvqtrosrnttpttprpmvurtsouspuspssorqnsrntrosqnqoktrotspuspusorpltrotsotspttpqoktqosqntrosqnsolurptqntqnvsqsqnspmtqnsolsqntpmspmurpuqopmjqmjqmksmkspmtqntpnrlktpmuqnuqoqmjroluqnsomrljsomtpmqmkrnkrnkrmjsolplisnksmkrmjrmlrmkqkirnkrmkqlirljqljpkhrkioigpkirmkqljpjhrljqkjqkimhetolnhfqjhpkiqkiqljnhfqigmecohfqjhoigqjhpigogfpjhohfogenfdogeqihmedphfmfdogfnfdnfenfdlbamfemcblcaldbnedlcalcbldbmecogemdcnediIHgijmkklmnnnlonrnmopoqmoorprtpqsqtvrwrttsssuvqusuqusstusuvqrussvuwqttuststtvututsswvqsrtuttsurtrtvrtstttrtrvvrvsstrsstwtrurrswrwvwuqwuurststvuttsuswtsvsssquwspqtsotqsqqrnsqrnoqqqommqmnolmmimmkljkihFhEdlcclbeldfndgpfgoebjaemddlbelcbj`hofemdal`emdckaemcfneiqgdmbhnggnehpfhoggmefndemcgoegoegoeiphiogjqiiqhiogiphioggneipggneiogjphipgiphkqilqjlqijpikqinsknrkkpijqijqilpilqjnrklqjlqikogkphjohotmkpilqinrllqjlpinslnrkloiptmpsmpsmotmosmorlnrlmqjnrknqlosmmrkptmrupnrkorlquoqunnrlorlorlqsnpsmrtoruoqtnprmrtortoopkosmpsmsupsuppqlqsnrrntuqnpkprmorlqtnrsortortortnpqlttpnoioqkqqmrsostpqsnrtorsnrsorrnrrnpplstppqlstovvrqqmttquvrvtqtsputprsnttqqplttprrnuursrosrntspuvrwvsuspsqnsrnstpqqmsqntrouuqtsprqnrplqokutqvtqsrntqnsrntsptrotqotroqolusotqorpntrourosrosqmqnkwtrvtqurptrorolsomsqnqokupnqmjsomtrotpnuspsomqnkspmqmksomvsprnkqnkqmjrmkpnjrmkrmkrmkqmkqmjtontpmsnlqmkrljrlinjgupnrmksmksololjojhrljojgrljpihqjhpjhpjhqkipigqjiojhpkipkismknigqjhpihpjhphgngengengeohgoigoigngfmecogepjhngfqihmdcogfmfdqignfdmdcnecpgenfcnecnfekcbphgmedmfdjb`ofekdbnfeja`nedmdckcakb`kKJiinjjllplmollpnotqpppqorqpprrqstrssuststurruqsqrqrtrusuuttstrwstrvvsuustrstsuvsvsutsttsuqttvssttssututuvttssruvttturtusturvrsuxsswsurvusqrvsuttvrsttvpqtrtsqqsprsntstooqqouonppnospopnmonmlokklllhjkJlHclbfmddmcdmbdmbdncbj`eoddncgneclbdmbgnebk`fnehoggoefnegpffnedmbfmdfoefmdhpghnfjphdlbjpihpgiogflcgnehnfjqihofhogmrkioghnfipgipgioghnekphjpgkrikqinsllrjjphlpjjohlrimpjjohlsjnslmrklsjhpflqiosmingkqhnqkmskmrkkohpsnnslosmkohnqkosmnslpsmnrkorlnslnqlqtnnrkpslpsmpsmptnsupnqkrupoqlptnruoqsnqsmqsmqtoqsnrtopsmpsmqtnorlqtosuqqsnrtorsnqtnstpqsnrsoprltvrqrmuvrpqmnqlstoqrmrsorsnstpprmtuqpplrsnprmrsnstptupsrntuqrqmrtotuqssotsopqlookqrmrqmtsossovuqsrorrnttptsponjtuqtspvurrqmssputqttpusqsqnqqmsrnpplsrntrnsrntroqqmrpmsrnsqnvtqsropmjsrntrorpltrnspnsolrpnsrntrptroqolqliwussqnpnktqornlsqnuqorolpnjspmuqotpnspmrnlpkitomqnkqnjrmktpnrnksoluroqolurotolsomqljrmkpliqmjrljsomqkiojhrnksnlsnlqliqkiqljrljsmkpkipljrkirnlohfrljqkirkjpkipjhsmkoigpkiohfpjhofemheohfngeohgoihohfnfdohfnhfngeohfogephfnednedohfmfdmecogeogemecngeqjhjbamedmednfemdcogfja_mfeldblecnedlcbkb`lKJihlkkijlmnmomljqqoooponqprrpssqpqstqrsqtrstqstrvrrvsuurtssvvsvrtrsuutvtsptqutvtsuusvrtwutssvsrpvvuvutsrrwstvuqtttrtstuuvswutruwwtststttsvuqstrtsruvuqsrqrpsnstorqsstqqqnquqnnnpppmooqpplmlmmjmjlkjiiEiDclbencdlbemdendenddkbdlbemddkbelddmcfneemcfmdclbhpfingdkbgnejqhhpgipggoegmeiogiogfmdgneiohkrjemdhnfjqikpiiphhnfkpijqhkqilqjjpgjqhnrljohhofjphkqikqjlpjlqjlrkjphinglrjkrilrknsljoglqjmqjlpjmqknrlpunosllrjnrllpioslmqjosmosmmrkoslquoosmnrklpinrlnpjnrlotlmqjqtoorlqrmqtootmmsknqkprmrtoprmosmrtoqsnpsmqsnorlqtnorlprmosmqsnqsnqrnprmqsnrsnqsmrtotvqoqlstpqrnrsnssossostprtpqrnssostpuuqstotuqqrmtvqrrnrsorsnrsnttpssossorrorrnqrmutpssoqqmwwtrrnttprrnvvrrqmtsputpstoutpqplrrnwusrrnuuqsqnrqnrrnrpmsqntrorrntrntrosqouspsrnppksqnsrorqmrolsqnspmtrnqpmvururptqoqpltqnpnkrnktqntqnqnktomspmrnltpnqnkpmjpmjsolurosolpmisomrnlspntpnrmkqmjrnlokhtolrmkplirmjqkiromqmksomuomqljokhpkipkiqkirljsnlpjhrmksnlpigsmkqkipigohgoigqkhrljngerkjqkjrkjqkinifqljnigpihogeqkioigpjhohfohgohfpigpjhpigmgeniglfclfdnedldbngfmecohfkdblfcmdcnfemfdogelcbmedmfdmdcnedmdcmecmedmdcneclccmedlJJkillkmmnomnlnmnonomnoqropqrttsqrrqtpqsruptquqqsvtrrtrqtsrtsutysutqstustrtvtqusrrvssutrswtstuvusttwssvrrrtuutsutvuqsssttvtuutstwursuutsrtuusvqvrstrtsuupstrrvqtqoqqpunpnnpqrromrpolnmoomnppolojjjjjjiDgCdlbdmcemcfndemdemcak`fmdjqhdmbfmdfoddmbemcfneelcenddlbfodhofhofhoghmehofhpggofgofjrihpfgoeipgjqhjqhipggnehnfkqiipgjpikqiingfnekqikqijphjohkphlqjkqikrjhnekpikpikphnrllpimrklqkkphkphotmmqjotmmqkipglqjlpinrlrvpnrlquomqjoslptnlqiqupmqjpsmosmnrloslosmmrjnqkmqknqkqtonqlnrlquolqjqsmqtnmqkpsmqtoqrmosmrtnrsnormqsnqrmpslmpjprmvxspsmqtnsupstosuqstoprmrsnrsnprmstoqsnttqqrnrtoopkssopqlrsoqrmtuprqmqrmpqlrsnqqmrsosrosrnssossoqrnqqmrrnutptsopqmttptsorqnuurqrnqrmqplutqqplsrnusptroqplttptsotrottprpmutqsrotrosroppkqqmsrotrorqmqokrqmtrotrovtrtomrpmpolqnkspmqpmqnlsqnqomrpmtsptqospmtqotrotrnsqnrolqnkspmrnksqoqnlurpsnlsnlpkitpmrompmkrolsnlsmkplirmkqmjsolsmkqmkpkhrlkpkiplipkhqljrljrnlqnkrmkoignhernkrljqjhrljrljqjiojgrlioignhfngeqliogfnigqljpigoigpkimfcqjiphfnhflfcnfeofdmgeqjhngelecohfmedofemedmedpignfenfdmecphgnedmeclecngelcbkcbogfmedjb`lcakb`kbaka_nddkKKjiikiokmnnnnnmonnnpqponorproqsqpsrrrsqrsotrqstrsssvtuururturvssuqtutuvuswtuttsporrqquvtttsvrusrvtuqsssqxuqssuquvrtrrvtturtttssruustsruuvstusstursuruutsurttqrtpsqtqqqqsppqornqqqqpppnrlonmllklklkikiGkF_h]ckabk`emdbladlcclbdkbclbhnghofckafndfneelcckbhofckadmcgpffmdgpfiphhnfhnfiphgnehofiqhgnehofioghnfipgiqgjqhhnefldipgjohjqhjohlrkipgipghofjphkqiipglqjiogkqijqhioglrilqjlqjosmkphnrliognskkphlqjnskkphptnkphlqjmqjlqinskjnglpioqlnpkruolqiorlosloslnslnrkorlmqkorlquoprlptnosmpsmoqlosmqsoquooqlpqlsuopsmruporlpqlprmprmstpormsuorsotuqorlrtnqsnqsnstortoqrnpqmrtoqsnstprtortossortoqrmrsortossopplrsnssosroqrmttpssopqlsrorqnrqmssostprqmrrntspqrmsrnttptuqvuqrsnsrnqqlqqmwvtrqmrrnrpmrqnrpltsotsotrotsopplrqnrqnqqmtpnsqnrpmrpmtqntroqplsrnqokspmromtqnqnkrolspmsqnrnkqolrpmqoktpnqmktqnqmjrpnrolrnlqnlqmjspmrmkrnksqnqnkrolrmkrolrmkrnksolqmksnlqmjqmkqmjojgrljsolqljqlirmkqmjrmjrnksmlnjhrmkrljrnlpljqljnjhoigrmkrljoifoignhgnhfsmkqljnfdqlinhfpjgpihpignhfphfnhephgohfmecmecphgofepjhnfdogenfengeoihnhfngeldbnfenfdmdcpihnfdogfmdbkcalcbmdcmedmedkbaldcnedjbalbaldciIHihjilkjnmmnlpnmmoqpnonrrpqqrrosrpooqsrttruwtrtqttvrurrusvrtrwwvssssustursuwstsvsstqstqrrsqttttsutsrvrtssrrvurtrsrstutrtsvurtstttttururtrurrtvtrtttsusssstutrrruuqrsqpsqrqrqqooqnpompmnlmnkmmlkmklliiKlJckadkbckadmcblabj`encdlbgpedmbgnehofemcgneblafnehogemcemcfmdhpfgmddlcjphgnegofgoegoehqgkpignehofiofhofgmeioghpfkqikqifldjqhhnfgnejphjphkqilrjlqjlrjlqjkoimqjkriioglpilpilrkkohhnflpimsklqjlpinrlkqikoinrllpilpjjmgmqklqjmpjorlmqjmqkptnorlnslqsnosloslosmmqkpsmqsonqknrklpjqtnnqkquoorknqlqtnrsopsnruomqkprmnqkrsotvqtuqpqlqsnopktuqopknqknojopkrtnprmrrnoqlqsoqsnoojqsnstouwrttpssossnrsotuqssotuprsouurpqlqqlrsnrrnttptuqssoutprrnsrorrmrqmssotuqrrnrsorrnssosrovurqplsrovurpnksroqplqqmtrosrosqnpokspmusptrosrotrntrotroutqsrnrrnrplspnpoltqntqospmrpmsqnsqnspmspmrpmrpmurorolqokspmrpnqnlrplsomqnktqoqmkrnlspmspnqnlrolsolqmkrnktpntqnsolqnkspnsomtpnqmksomrmkspmrolrmksnlqljqljrmktomqmjqliqmjnfdpkioigpjhpjipkiojiqljoigoigqljpjhohfpihmgdoigoigohfpjhmifpihpjhngeohfohfngeohfqkiojhogfqjhofdohfldbogenfemdbldblbamdblcaogfngemecmfekb`medofekdbogfla`lcbkcaldckb`lMLjklkklklllpklloomqmlqqopqptpqrrqsqtswrsrsussutuvttutoqustvrttrrvrttuswtustprvsttrtuourvqvstqttquutwqsutqpvrvrsusrwtsttptrrtqurtqwuswuvptvwststsustvqrrsvrrrtsrrsquqsqopsqosqopqoponnnollollmkjkkiljjIlGdmcbl`_i^dndcmbdlbemcdkbckadlbemcfndckafmefnegnfcjbgoeipgfnehqfdlcgoefnegmehpggneiohfmdkrigmegmejpifnehoggneelcfmdfndjphhofjphiogjphjphkpiinglpjkqikpiiphjphioglqjipglqjkpiimgnslmrkmqjlqjmqkorlmrkkohkohmrlmqjlqjorlmrknslptnnrlmqjnrlorlorlmrknrknrlorloqlqtoswqkqiorlorlptnpsmruoorlmpjorlptnpqlmpkqtolpimqjqtoqrmprmqtnoqloqkstpoqlrsoprmqrmqrmsupopkqrmqrmqsnssoqsnqrnprmqsmrtoqsnpplstpqrmtuqssnnnippkrsostpttpqqmqrnrrnrqnoqlrrmrsoqrmtuqssoqrmrqnsrnrrnsrorqmutpookrpmqqlrqnpoksrntrorrmutqoojspnrqmtrorpmonjqoltrorpmrqmpnkrqnsrotsppokqoltqnspmsqnrpmspmrpmspmspmutqtqnspntsorolsnlspmromtqnrpmrolrpmqmktqnrmkqmjrnkpkhsnlspnrmkqmjqolpkhrmkqmjqkirmktomokipkiokhpliokipkipjhqmjrmkpjhnigoigrmkolioigoigokhojhojgqkjqjipkioihpkipjhmhfqkiogepjhskjpigoigqljnhfqihnhfpjhnhfohfmecohfngephgldbohfohfpigngfohgmfdmgeldcib`ohgnfemdbjb_j`_nfdneclecmdckcaka`mfdmedhHFjijjjkloklmlkopnnoqomooopprqoqvpsqpnqqrqrutqurwtsuwtrsqrvrrsttqrtussttutsvxrqsrsrvqtutssrtsupqtpttsqsxssrrvqvvqsrsssquptqquttttuutrtvsurrrsrsqtrqrtrrtsroqutqvrsqsrqspsqnprpoqooormnloonpkllmklifiihHjGclabj`clbgmfemcdlcdmcdmbemdclbdlbclbfndelcioggnfhpffmdendfnehofhofdmbfmegnegnfhofendfmdiohioghpgipgipgjphipggnehnfjphlqkjphelcjohingjqhmrkjphjphiogkpikpiingiogosmjnhnrllqilqjkqinrllqjnrlgldnsknslnrlloikqiiognqknsllpiorlmpjnrlloiqtopsmkohmqkprmnqkpsnoqlnrlptmmqjoslqtnnrksuptuqqtooqlpsmorlnrlnpkprmmoimqjorlqrnormrsooqlqrnqsnnpjqsnrsoqtnoqlqrnpqlprmqsmqrmnpjssotuppqlrrmssorsnsupqqmqpmstprsnopksspnmittqqqmrqmsupqrmrrnrqnpqltsotuqsrostorrnvvrsrnrqmtqnsrotspqqmqqmutpsrorrnrqmrqntsorrorqnrqnqqmrpmsrnsrosqmtqosqnooktroqpmsqnrpmolispmtrnrpmqolrolspmtomsqnsompolpnkrolspmqmjqmjroltqntqnsomspmqnkrolrnlnigrolqmjrnltnlsnlpmjqmkpljokiqnlrmkrnlokhtpntpmpkiqljoigrmkpjhrmksnlpmjqmkoifpkisolsmkqmjpjhqkiqljpkiohfoigmedoigqjipigpkiqljpkirmkohfngeohgohgohfoignignfdnhgohfphgmfdkcangenfepignfdmednedmedmdbnfeohgmecnfekbaldbmecmdblcanedmfdkb`ldbja_neckcajHGijhjiklknoomlomooonpqpopqrpopqqtrsrrsqtsqssuvvqsturutptsuutuvrtuustrsorqusttssuututwouurvtststtuvtvusttrrurqpstssusrrtrtswnstussststttttssrttstsvsvrstqspprrqrosorrtoqtponooqononopjommnmpmnmlkkjkkiIkHdmcai_bjadlbdmcdmcaj`bjadlbclbfmegneclafnefmdfnedkbdmcbk`emcfmdgneelbgoehpgemdjphjohemcgofjqhkqifmdipggnfgofiogiphhogiogkpihnffmcgofhneiogiogjphjphioghofkphnsljohkpilqjingmrkjphnslkphjnhlpjjpgotmnqkmrknqkmqjmqjjngnrkosmnqlnrlmqkmrkmqjoqmmqkjngpsnnqkruomqjpsnpsmormormprmoqlnqjnqkorlpsmqsnprmnqkrsoprmqsnoqlpsmprmprmqsnnqlprloqlqrmstooqlprmrtnorlqsnrsnrsnoqlkmgttpprmnniqrmqrmpplstppqmssorrnrtprsopqmqrnrsostprtorrnttqrrnssoqqmssoqqmsrnpokstpssoqqmrqnsqnooksrnrqmsspsqnsrotqnrqmqoltrnrqmrqmpnkpolrrnvurtrorpnrqnrpmrqmurosqospmtrotqnrplqolpnksqntqnrpmrplrpmrpmrolurpqnkrolqmjsomspnrolrpmqmjokitpnrmkrnlpliqmkqmknjgrnktpnrmlsomrnlsomokirnlrnkqmksomrnkpkiqmjtompkioigsnmpjhplingesmkoigpjgsljlfcpkhngepkismkmgelfdojgpjhnigpjhnfepjinigofengfpignhgohfpjhqjhngengenhfoigmecmfemedoigohgqihlcameclfdldbleclcbkcamedmfdnfdlecmfdnedka_nfdka_jbakcbkcakcbjIHkhkjjhlklnkoommlonnoqopqpsoqoqrsqqqqosrptusrrsrsrqqtsqstuqsvurpuuvqsrstsusrtsturwsustrsssrrrrupussoqusussrssrvrurrutsurvtqutrqrtrurtrsstrtprvsstrstrrrtqtsprtpstrqsqpqpnpqpppsqonoololmmomomknlikilhKlJckaaj`emcbj`dlbfoedlcemdcladkcclbdlbdlbckafmdcmbfneemdfmdfndcjagofhnfgoegnefndemcgnfjqhfndiohfmdiphjphhofhofjphkohkqilrkhofjpgjphiogiogipgjpgemcflclrkimfkphhnfnrkjohinfingjoglrjlqjkpihnfkphnrkmrkosmlpjnsmmqkkpimqjnrkkpiptnpsnnqknqkrtonrlnqkorlorlosmnrlosmmpjqsnpsmpsmprmorlnqkprmprnnqkqsnnpjqsosupormoqlprmqsnorlqsnqrnqrnqqmoqlqsnprmoqlprmpqmoqkprmqrmnpkrsoprmrrorsoqsnrsnstonpkqsnrsnrrnpplqrmstprsorrnssosrnrrnrrnookttpssoqrnrrmtuqrsosrnuvrtspsrotspssoqqlsrnsqnqqmqplqrmsqnsrossossoqplsrnrpmrqnrrnrpmqolsrosqnpnkrqmsqnpokpmjsrnrpnsrnrolrpmtpmtrosqntroqmjpnkqnltpntsprqmokhpnkqmkqnkrolqmjolhpnkspnsnlsomqnkqolqnjrolqmktpnsomplinifqljsnlqmjpljqmkqnlqkirnktomqljrljojhpkinifrnlojhmifojhpljqkiojgoignhfpjhpkipkinjhpjinhfpigledmgenhfnhflgdpjhpjipjhohflbaohflfdpigohfmfemfeohgmgeldbohflfdkbapiglecngelecjb_medofeldbnfemedkbamedi^\medkb`mfdj`^i`^hHGijjiijlmmmlkmnoponoopnqnosnnrrprqtsqqrtrpspsrtosoospqtsuutrsvrtrutsruusttqsruwvtttrsquttsvsturututswutsurrustrruqrvrssstrtsvrstrtruusttqutrstuutsrsssrqnsrrqqrqqsuprpssonsqroonqonmnmmmllnojllnkheifIhHdmcckablackadlcfmcbi`clbdmcdlbemcenddlbencfmegnffmdclaendemdfndfodfnegoffmdgneelcfndiogipggnegofhnffldiogfldfmdhnfjqhkpikphingipgkpiipgkqikpiioggneiogjqhlqjinflqkmrkjnhkohjohnsllqjmrklqjkoijohmrklqjlqjkohjngkoiormnqklqjmqkmqkpsmnqknpkosmmrknrlnqkorlloiprlmrkoqlorlprmmpjptnpsmprmnpkmpknqksuprtoqtnloilojpsmprmormnpjprlqsnnpkprmqrmqrmqrnqsnpqlqrnstpopjrsnuvrprmstppqmstorsoopkrsorsopplqrmpqmssouurqqmrsnutqssorsostopqlpplrrnstoqqmrqnrqnrqmqrnqqmoojookqolrqmsrorrnrqltspqpmooktsprqnrpmqpmqqmooktrottqqolrqntrorpmpolsqnuropqmspmspnqoltrosqnrpmqolromqnkspmrpmtrornktqnurornkqolpnkpnkplisomupnspntqoqnkrpmrmkqmkqljtpnpkhqmksomqkiqljrolsnlokiqnkpkisomqljrnkqmjqnlqkirnkoigpjhpihsomojhnigrnlrmkqljoigpjhpjgrljnheojhoigoihqkjqkipjhmgeoignifpjhnigpjhmfcpjgogeoigmfdoigoigmdcmfdldcogengenhfogfngelecoiglcbmedldbmecldckdbkcameclcblcamdclb`jcakb`jcaldcjIGijikiinjkmlnjmmpqnpqmnppppooppppqsrptpqqrsstrstsusqsrssuvttststtrtrwuvuquutuusttrtrrtvqrsuvstqrttqsrtuutttuusrtsvsutpqsprrusptuusqrsqvsrsururstpqqtuutquqqsovqstsnunoopsnmpppopnmnqlnolmnpolmijlkghhHiGbja`j^emcfmebkaaj_bj`emcckbdjbclackbelcemdemdfoeioghpgdmcdlbak`ckahngfneemcjqignefmdelcipgiogioghogfmdiohjohgldjphhofhofkoiioghnfgnejphipghofjqijphjqhnsllqjmrkjpilpikqiipglqkjohnsmlpikpiosmlrkmrkkpikpioslquonrlnrkptnnrlptmlqjmqklqjmpjosmlpimqkpsnoqknqknrkmqkmqjmrknqkmpjmpjosloqlqtnoqlpsmnrknokormpsnnpknqkqtoormnqlnpjnqkstpoqmqsmqsoqrnqsnoqlqsnnojprnuvrqrlqsnpqlsupqqmrtooojlnhrtoqqmpqlsspstppqmrsoopkrsnopkrqnmnirrnpokqpmrqnqrnrrnsrossotroqplonjssoqpmrpmrqnrqmrplpolqqmrqmpokurprpmtspqqmtroqqmrqntrprplsqnuspsqntqoqolomjqokpnkqnktrotqopolpmjsqnqokomjrpmqnjpnkrpmrplqmkrnlpmjrpmtpnqnkurpokiqmjpmjrolqmksomsnlpljqmjpljpmknjgnjhpljqmjsomrompljrnlpkiojhqljqmjnjhqmjrkjpjhqljqljrmkpjhnhfoifngepkinjgqljpkhsljpkiojhpjhpjhmgengeqkioignhgmfdnhfoigpihnigoigohfpigmfdnhfngeogepigmecngfngelfdngenfdldbkdcoedmdcmcbldckdcja`ngemdcngfmdcmdckdbja_lcbkbakHGhjjhjjlkhlnnnmmoponnonorrupqssssqnpqqsoqrrrroqrqrsqsqrvqsrruttqrrursrrtuuvsrtsvuusrsurrssttmqttpsvqrttrrstssustruqqttsssrtstsutvttsrqpruvrsvsstptvsttrqqproprstqqprprrrpqqpopnlokjoopjlnmkljkkjljlhjIiHckackabkaaj`ckaelcckbbk`endemccladlcfndemcckbeldfnefldgnffldfmdgnegnfjqihpgfmdgnehoggnffmdhnfhofgnekoiipghofkqjioglqjiogjphhmfiogingingipgjngkpikphlqjingjqhkohmrkhoflqjlpjjngmrkmqjmrklqilqjinflpikpiorlloiiogmpkosmnqkkoilqjnrklpiloinpkormorlknhmpjorlprlprmloiorlnqkorlqsnoqlpsmqsnoqlorlpqmoplorlpsmnrlrsopsmqsnprmorlprmqtoprnmoirsoprmqsnsupoplqrmqqnqrnssorsooqltuqrrnrrnrrnsrnqqmprmnniqqnopkqqmnokrrnqplsrnqrnoqlqqnssottpnnirrntspnoionjrrnrrnpokopkssprqmrqnookpplrpmsrosrottpqolpnjtsprqmtqnpplonjtroonjqpmrpmsqnqplrpmqpltroqolrpmtqnrpmtsprnlsomsqmuspromsomtqnrpmpmkrolpmjomjtqoqlispmqnkrmkqolrnktpnpkipmkqmjrpmsolsomromrnkrolokiqmkqkiqljpljpkiqlirlkrlkqmkojhnigpkirmkqljpkhpkinigrnlmifpkjqljplioigojhojgqkirljnheokinhfngepjhojgphgoigpihnhfnfdlfdmecpihoedmfemgemecmdbmfdmfdnhgofemecnfdkcanfdkdclcbmeckcbmedkdbmeclcbldcmfdnedmdckbamecldckcbldciIHkhkkkjjljilnlkonponnpmpoppnpqsqpsrnpqrrnrprpqtvrrrrrorttqstqsqqsrsrqvtrsvqstsstsstqrusrrstprqvqrqrottssrrvqtpvssttvtqrsqsrqstsuutssutstpstrrqqqrutstsurrusssqrrnsoqqorsqrmnpopnmpnmlnnmmllmjnmlmkifiHhGbj`ckaelcfmdemd_i^fnddmbbkafneemdcjadlcckaaj_gnefmdendfmdfneemcelchoffmdelcfmdelcfldhpgfmegnfelbfmdiphgnfemcjphiohjphiohhnfingjogiofingfmdjogkqikqjjohmrjjphlrklrjlpjglemrliogmpkmrklqjkpikogmqkmqklrjnskjohlpikpikpimpjlqjnrllpkpsnlpimpjqtonrlmrknpkmpjormnqlnrlqtnloiptnoqlmpkorlnpkormnqknqklojmoioqlnokprlmojruprtolnioplprmmpjqrmoqltupqqmormstprsoopkssoqsoprlpokqrmprmqsnsroqqmtuqookpqmprmoqlrqnoplqqmqqmstprsopokssorrnnnjqqmttqpplqpmtsppolssoppkqplookrrnsrotsprqmrqmrqmsrorrmpolqplrpmqpmrpmsqnqplusqqolonjomjpnktsosqntqovspqokromuqosrospnromrnkpoksqnrolpnkrplnkhpnksnlqmjrolspmpnkromqnlqnlpnkqnkpmksomolipmjpnkspmrnlnigrmkqliqmkpmjsompkiqljsmkqnknjgrmkplioliojhqljqmkojhqljokhoifojhrmlpkhojhpkinigpihnhfnheojgqkioigmherkjrljmfdmedngenhfnhgoigohfmgengfngeojhnfdnedogfmdclecnedldbnfepigmfdlcbmdckcamfdmecmdcmfdkbamecleckcaldcldckcbkcaja`ka`k`_iGFiglljklkljnnmnnmpooooqmpporqorproqppsssqsqssqqqqqtrsssrqrtsurtrtstutrrwstsqrstrtrusrssturtsstsqututsqrvrrvupurrrsrtsrstuturuptrruqrsrruoquqsuttrtrprtsssrqpqtqptpspqqpqqpppononopnnqnopkomlmliihhjkfGgFbk`ckbdkbckbfmeaj_blacjadkbckbbi`dmcclagnffmdenddlbdkbfmdgnefldemchofdlcfldfmegoeiphgmehnghnfemdgneembgnfelcgnehnfjpignfgmejoggnfhnfjphipglqjhofgmeimfhnfjphmqkjohhnglpjiogkpijohlqjjmgjpijogiogkpimqkjogjngnrllqjkoimpkkohpsnorlnpjlqjmqjlqjmqknpklojmslnpkpsnmpjmqjkohnqkpsnprnoqlqtompjorlorlnqjloinpkormnokosmmpjprmorlopkpqlqrnsvqqtnpqnprmtuqqsnprmprlorlrrnrsoprmpqmqrnpqlqrmopkpqmqrnssorsostpqrnrrnssoqrnuurqsnrqmqqmrrmopkssoqolsspppkrroqrmpplrqnsspsroqqmqplspnpoksroqolqolsrnomjqpmpokrrmonjrplrpmtrorpmrpmsropnksrorolonjrnlsrnpokqolqpmromrqnsomrpmusqqolpljpnkrolrpnpokspmromomjromqnkspmpnkrnlokirnkomiqmkqljnjgromojhokhrnlqljqmksnlqljqljrnlqmksolpmjqmkpljqmkojgojgokiokhpmjnifojgpkipkjpkioiglgeojgojgoignhepihmgepjhpjhoigoifmgeqjiohfogfnhfpjhnifmhfngemcbnfdlfdohfnhgngenfdlfdkdbmgelecmgfmecmedngekbalecldbngejb`kcalcbjdbjb`kdbldblcbja_kbaib`hJIhhiiklklljlkllklmlmnooprpmppqotprnpqoqrotsqssusrqruptsqstrsrqsrrqqrtttvtqqstttsottutqtrvuutrtrutqsqpvquqqstpsususvotqspttuttusrrssrourqsrvstttruqsosssttprqsrppprpqonpqpqqpnropmomomonolmmjijljkjikhHiFbj`clabkaai_ai`ckaaj`fldclbfmeclbaj_elcdlbbk`emcfndelcfmdfmdgofdkcipggnefmdhpgemdgmeelcgnefneemcgnfgnfgneflckqjgmeimgjphiphkrjingkpiiogfldjphgmekpijnhjphipgingkqijohjogjnglpikqikphfkcnrllrjjohkpinrlloijphmqkinglpjlpjlpipsnnpknslnrlmojptnmpjormloimpjpsmmpjoqmnrkorloqlmpjlnjmqkqsnqsnoqlqtonqkloinpjnpkpplnqlnqkoqlqrnpqmnojstooqloqlnpjoqlqsnprmnplpplnpkqsnqrmpqlrtostpqrmtspqrmtuqnniookpplsroqqmqrnqrnqqmqqmookrqnrrmqpmnnjrsnppkrrnookrrnqrnqpmttqqqmrsnqplrqmpqlrrnqqmsrorrnpplttpqqmsrorqnutqsqnsrotropolrpnusqpmjrplsqntrptpnsqnpoktspspnpnjqolspmqolomjplivqppmkpljqolqnkqljrokrolpljqnkqnkqmjroltpnspmqmkromrnlpmkqlkqnlokiqmjsmlrnlqmkqljpkiqljplipkirmkqnkojgojhpkhpliqmkpkiqljnlioigrkjrljnigoigojhokhngermknignjhmfdnignhflgdkecojgngelednfenigogfnfdmecmgeojhpihmfdngemfdnfephfmdbjb`ib`ldbldbmednfemfdkdbledlcbldcjbajb`ldbi`^jbajbamdbjcbldbkcbja_jHGgkjhlilljinqjlmkmqlnmponmnonprrmproppqptptpqqssrrsvppqsrsqtqtsusqqqsstsssvutuutssurstquvvrstsqtqssrutrtrqurtpnrurqrqrtturpssqssvtrusrtuqrqsqtsrpqqsqrrrrpsrrqsrqonppoppnnomnpoqqnnonnjmlpkkkljjijjjhEgCcka`j^dlbemdclaendemcbj`emcdkbbkabk`dlbelcipgekcdkbgofemdhofemdfldgnfemcglegnfgnfgnfgmeemcgnehoffmdipgiofhogjphhofhnffmdgnejohhmfgmelqjiogjohipghmfhmfiohjnhlqkkoihnfkpikqikqilqjlqjkpimrklqjkpinsljohlqjmqkjnhinglqjkpilpimrkinfmqjpsmmojprmnqkmpknrlmqknrlnqkoqlnrlorlnqloqkorlnqknqkqsnprnqsoprmprnoqkqtooqmoqlmqkrupormqsnmoinqknpkprmrsomoioqlnoknqkorlpqlpqmqrnprnrsopqmqrnnojmnjqrmopkqrnpqlssoooknojssortprqmpplsrnssosspqrnsropplpqmtsoooksroqplrrnrqntspsrossotrosrorrnsropplqplrpmsqnrpmqpmrqmmlitsprqnqolrpmrpmsrorpmomiqolpnksqmqolqolqolqnlspmtqoromsomnkhrpmpnkrolnkhrolnkhqmkpmkqnktpmspmrolqmjspmqmkspmpmiromqmjrolokipkiojhqnkpmjrmjokhpljnjgrnlqljpljpljrmkolipkhpjgojhpjhpkipjhpljoignjhojhpigniflfdqkipjhojhoignigngfmgepjhlecmgeohfnhelgejcangeojhnfdnhfmedmfdpjipjhngemfdkcalecmecmfdmgekcbjb`mdckdblcakeckcbmcbldbkdbia_kbakcbldcja_i`_jbajb`ka`hJHhhjjihjlkklmnnojmkomoonnnqponmoqpsqqoqrrtmsosrrorqsqqqtttssqusrurottqqrsqqtpprurrstrrstutrqvsupststsrsrsssvrsutrpqstsqsrtrrqrrrttrsrpttvtqsuqutssuqtrqqrtqqoqporsproqonsonoponmponoomlnnmnljjgjijhjeHkGai_dlcemcbk`dlbai_aj`ckabladkbgneemcemdaj_dkbemchnfelcbjaemdhnfdlbemdgneelchofgoeemdiogemcekcfnegmeelcgnefmdgnehnfgmehmeinggmeiogkqifldjohgldingiogjohgmeiogioglqilqjknhioglpimqjkqjkpiioginflqilpjjphlpinrljohmqkkqimpjlqjorlilemqknrlosmptnnqkmpjmqjmpknpkoqlprmnqllpimpjnqknpkmqjopknqknqkmpjnpkoqmnqjpsnrsoprnoqkprnnojormrsooqloqloqlrtonpknpkoqlnnjtuqopkprnnojpqmopkqsnqqmopkoplpqmrsoqqlpplprmqqmqrmppluuqpqmrroqrnpoknoksrorqnrqnrqnppmsrorqnqqmrqnqplpplpokpplnmiooktspsrosropokpplpolsroonkrqnsqnsrnonjqolomjqolqolrolqqmqnkomiomjrpmqnkqnkpplqolsqnpnksrnrnlqolspnrolpmjrolrpmqolqnlsompljromplirolnjhspmnkhpljqmkpmjrpmpljqnkpmjqolrnkokhrmkqmkqmjpjhrmkojgojgmifrnlrnlojiqljplimheqmkohfpjiokhqkiogemgenhfojhmhfojhmedpigoignhfohgohfniglecoignhflfcleclfdohfnfekecngfkecmfdmfenedngfngfldbldcmdcmedlcamedja`lecleclcamdbkbaldbkbakcaldbmcbldblbaldcjbai`^jJIgkjjjllijkjlnkqlmnnplpooopnqksoqpqorpprrpsqqrprqrqsppqqsppsrrssssrtsstttqrstssttusttousruutrsssurvsvrursssqsutsrrsqqsvssssqttssvrrsqrsrturqrvrrtqrqsutrqrnrsqqlttsqqpopnomqlppomopomlolhlijmkljjjiggGiFckackaaj_blbckadlcbk`endcjadmdbk`clbfldbkacjaemcdkbdkbfmdfmdemdfmdckagmegofhnfekcgnefkdclbfndelcjphgneelcfndhnfekdgmeiphipggmegnfgnfgmdlqjhnfjohingjohkqikpiingkoijphhogkpijognrllqjkoihmflpjkohnrlnrllqjhnfmqklpijngmqjlpjnqlosmloilpjmqkmpklrjmpjmojpsmnrkmqknqkmqkmpjlpjprnmojmpjnpkorlnrlmnioqlnqlmpjnqlormmpimpjorlnpkoqlrsoopkprmloirsolpjpqlpqlnplnokpokoqkpqmqrmstppplnpknpkqrnpqlprmmniprmopkqrmoojqrnpplqrnrsnrrommhooksropplqqnrqmpplrqnpolqolrrnookpokqqmrqmqplqpmqplrqnrrmrrnookqqmrrnpnkqqlqolusprpmrqnssoqplqnkpnkqpmqmjqolpmjtroqolonjrolpnjspmolirolpmjomjolitqoqolpmiqnkpmjtropmjoliqnlrmkplipmjrnlsomrnlpmjqmkpmjokhqmjpliqmkpkhqnkpkipljokhokipjhokipkipmkojhplipljrmkpkioigpjhpkinigojhniglgenigoihnjgqljpjipjhpjhokhnhfmfdoigoignifmgdmgengeoigmgdngflfdldbldbkdbngelecogekcalecohglgelecmfdlgekcanfelcbmedmfejb`ldcjbamedib`kcbi_]i`^kb`ldckbaja`iHGghhhjikllhklnljonlnmsnrnprorrqqqrnpqrorrrrpqtrrsrtqrqsrsrrpouvptrvrtrrsruqourqtrtttstttutqrutrqpvrvrtrqrsmtrrssuttvuussutssvqssrsqurrqsstrstnqrrrwtstrtrssrrrposrrprnnpqoplnonnpnplplolmlmjklkihihgeDiCcka`i_elcdlcbkacmb`j_dkbckadkbclbdkbclafneflddlbgneai_gnegofclbfmdclbekcdmcfkdfldgnffndfmegmehofhmfgmegmehngfmdhoggnfhnegnffldgmffldjphekchnfjohjphgmegkdkqjhnfkpiinfflcjphmrklqjlpiingkpilqjiogmpkhnfgmempjnsljohlpjlojnrlmpjjnhnrknrknqljohnrklpinqknqkkpinrllojmojmojloijnhnqknpkmojknhmpknqknpklojnqkqsnnpjqsnmpjmojknhqsnpplnojopkorlpsmrsooqlnnimojrtonokorloplqrnpplrsnsspnoknojnpjpqlppkpqmrsnrqnpqmpplsspnnirrnopkopkqrmqpmsspqplqpmopkrpmpplpokonkrrosroppmqolssoqqmrqnvurqplqqmnmiqqmsrorplqpmsqnsqntqosrorpmpnjqomqplpolpnkqoltrpomjqolqolpnknkgqnkqolmkhqnlspnrpmqololirolrolpnkolipnkolipnjrnlqmjpkispnpmjpmjplispnqmjpljokiqnlnjgrljpkirnkrmlpljpliqmkojgpkiqlksmkpkirnlnjgojhokipjhnifnhfnifojhmiglgepjhqkjpjhmfdokhojhmfepjhohfoihngelfdoigoigldbohgnhfpiglfdohglfdlfdmfdkecleckdblcbjb_mfdmgemfdldbkcakcamfekb`ia_jcbkb`kdbkb`kdcjb`kbaia_ja`jb`ia_j`^hGGhihkhkljjlnolnmnonojonoqolqromnroqrqrpsrpsutotsupsqrqqprqpsurttusqvqrttrrrqqrsrvrqrsusttssrvutssqtssrrrsrrrsuussrrrtpqosrruqssrstrstuvpsptptsuqrtqstpsqqtqtptrqrqoqproqpnpnnpmmopnppokmklmmkkiijihhgHjGbi`bka_h^`h]aj`emcckbaj`bla]g[cjabkaemddkbdkbckagmeckafmefmdfmeelcfnegnegldfmdgnefmeiohelcelcgnecjagnehnfhneingfmcinggmegnfjohiphhngdlbhofgldingjogkpiioginghmfiogkpimqkioglpilrjioghnfjogjngkqikpiingjogjohkohkoikpikoilpijohnqlmpjosmmqjlpjmqkmqklpjmpklpjmqkpsmlpjnpkmqkptnprmnrlnrlormorlnpkmpjmojoqloplkmgnqknpjnpkmojmojprmpplqsnnqlrtppqmmniqsnpqmqsnrsoopknojqrmnokmnioplppmnpknpjlmhqqmpplpplookpqmnpkpplpqmprmpplpqmookqqmqqnpplstpqpmooknojttqqqmssopokssoqpmlkgnnjrqmrroqpmpoksropokomjqolrqnqomsqnomjqolrqnsoltrorpmnlisqnpolooktrpqomqnkqolpnkqmkpmjqnkpnlpnkrpmrpmoljomjpnkqolqokpmktrosomrmktpnqnkqmkpnjqnkqnkqnkpmjqljqljplinkholipljpljrnlrmkqljoigokipmkrmkqlkojhqljrolnigojhpljnigojgnjgnhfpjioigojhnhfpihmhflgemigmfdlgdmhfngemhfojhojhkeckdbnhfnhfmhenhfmgemgenfelgeldckecoigmgemfdmfengekdbmfdkb`mfdledkecleckcblcblcbjb`kdblcbka`jcakbakcajb`h_^iJIiifjikljmkjllklpllnnmoolopmonloqqrrpqsqqpqtpqpquprqtrnrsssutqqttstptsrrroqsrsrprtuptssqqsturtsrsptqqstsqssuqurtstprruutoustussqrusvsrpvtrussswrqrrspsqqpppptpprosorpoqpqsoommmnnolkpmnjmkkkjiklkijjiGiFbj`dmcbj`bj`aj`ai_`j_ckbcla`j_elddlcdlbai_cjbcjagneemdcjagnegpfdlbdkbhnfgnfgnegmehnfemcflddkbgnejpifmdhnfgoegnfhnfgmeelchnfiogelcgofjphiogjphjohkpiiohhmejoiinghmeimgkoilpjlpjlqjkpiiphingkoikqilpjioglpjlpijohjohmqjlpimpjlpjkohmqjlpjlpjjlglojmpkjngmrkorllpjmojmqjorlnpkmpknrlmpjnrlmqkoplnpkopknpkpsnorlnqlormoqlloinpkookoqlruprsnprmqrmormqtnqsnnplopkqqmpqlnoknojqrmrsopqmmojqrnstprsopqmmoiqrnrrmpplppmnojnojqpmpplqrnqqnpokrrnpolrrnssppplrrnssorrnqqmooksspookpokssosqnsspnnjutqpnjrpmqolpnknmiqplrpmqqmqplpnkrpnqpmonjusppnjqolomjqolonjrpmrqnsomrolqomomipmjpmkqolqnkpnjpljrompnkpmjspnnmjokipmjpmkokhqolrommifqljoliolioljqnkpljqmkqnkpljpmjpljolhpkipmjokikgdpkiokiojgpkipkiojhnjhpmjnigokiokhpkjnjhnhfmgenhgnifpkhnhfqkinhflecnhfmfeniglfdmgeogfngelfdmgdohfphfmfemfdkbanfelecmecldbjeblecjcanfekdbmfeja_h`_leckb`mfeldbkdbldbledkcbi_^ldbledia_jb`ia_i_^hGFhhghijkjljkkmjkklnpllpnpmmpnqopqqpmrpnqrsssrorqsqqtroqrqqsrrnpqrsrquusqsuqrttrutussptqqrsustssrtqsqtprsovuqsssrtrsqutnsqtstsrrsqsrsrrtsssqsqsrrrrsspqspqqqrqpqsmspqupqpqrmnpomnnnokmnkkknhjkjiijihjiGkF_h^`i_dlc`h^_h]dkbckaelcckaaj`bj`ckbak`fmdeldgmfdlbbj`fnefmefmeckbfneflddkbfmdemdfldfmehmgemdgmeeldelchnfckaipgipggldfldfkdkqjfldingioggmegmehnfiogiphjqhinghnfhmfjohkpihnfimfjogjnhknhkoikpijohimfkpikpikpikpimqknqljngjphknhmqjnsmloimqjprmlpjmojorlkoiorlnpknpkmoiopkloimpjnpkmojnqkmqkmojnplmpjklhloilninpkprmlpiprmqrnmojpqmpqloplnokoqlnnjoqmprmnpkpqlmnipqmnpknnjmnjqrnpqmrqmnnjoqlookppmookrrnqpmmmipplqplpokookookpqlqrnqqmookrrnpqmtrpnnjqplqpmssprsoookqomppmooksroonjpokoolnmjqolrqmrqnpplpolrqnnmjpokrpmrqonliqnkrqnpokqpmpnkqolpnkpnjomjpmjqolspmpmjolipmjpmjpnkolirqnpolpnkqnkqnlqnkqnlqnkqolnkhqnkqnlokholiomjnjhpmkpmjomjpmjqmkqmjpmksompkiqnlqmknkhokhpkjrljokipjholjnjhmhfpljmgeojgpjhojhmhfnignhfojhoignjhngfmhelgdmgemfdpjhledpkinhgojhnfepjhmfdpihngengeldckcalfdngfmfdpihkdcmgfledlecmdcldckdbnedjcaib`kbajb`lcbmfdledkbakcbkcbjbaia`kb`ldbmedlcbiHGghhigiljjllmkmmlqkolnmonmnqoprppptnooprsqprrsrnrsuppqptsttttrtspsqssstuvorruurrtqqqtvsrtstqtsprrttrrqrprnttutqpwurqrwqrpsorrppsssrrpqrsssssqtrtnvpqrsrsrpqssrnrospprpoqpnnononppnolnmlmlmmlikgikgjgiEjD`j_aj`_h]ckaemdaj_dlcblabjabj`dlcckbemdbjagmeckbdlbdkcglefkddkbemcdkbdkbgmebjaelcekcfldemdelcfmdhmfhmffldgmeelcgmeelcjohjphgldhogkoijpijohjphhofhnfjogingglehmekpilqkkoihmfjngjnhkoihngkpikpiinfjogjoglpjnqkkphkpimqklpjjngkpijohlqjloimpjloimpkmpjlpjmpjqtooqlmpjmnikoilpjnqkmojlqinpkqtnnpknpkknhnqlorlorlnqlopknpknokpqlpsnqsossonpkqrnnqkpqmprmopkpsnoqlpqmprmoqkpplnojoploploplnojmmhsronminnjssonokmmhttppokqpmrrnnnjqqmtspookqpmookqqmoplookrqnpplqplrqnrpmpokrqnnnikkgrqnpokonjqpmrqnqqmsqnonjrqnrqnpolqpmnlhsqoqolsqospnpnkrpmqnkqplolipnjpnkpnkqolqplrnlomjusppnkpnkoliqmkqolspnpmkpmjolispntqopnkqnlpljojhqmjtqopmjokinigokimigpljpkipjhokinigqljokinjhpkimifojhnjgojhojilfdpkiojhqljmgepljojhpkimheqljmfdojhoignjhphgoigpjhmfdnigpihoigoigmhfmfepjhmecoigmfdmfdmhfldcmfdkcaogfmfdmgejcakcblecogflecmfejb`kdcledmfdlecmdckcakbakcaib`h`^ldcjbakcah_]ia_kcai`_hGFhighkikmjijmlmoomlmpklmoqonmonsopqpppooopostqrrsprrqssprqsprrrrttusrursrstrtqrsqqspuvwusturutptqrsqutsrrspsrtvtqtqtqtrsurrvrrwtpsqtqutrtrtusrqsqtqttqporpsnorqprtorloonpnopmmooolpnnmnnmjmjgjkjikhhgEgD`i_ai_clbcjbckbai`ckbdlcbkaai_ai_cjadkcbi`clbckabj`ckbdkcdlbckbfldemcelcdlbdkbingfmdgmeckacj`fmdhngeldfmdgmegmehnfhnfgnegnehnghnggnegmfinghnfkqjgmehofhnfkpigmehngkqihmfingingjngjohkpiingjohkoilpjimgimglojkoihkejphmqkmpkmqkmpjkoilojosmlojlpjlojlpjmqkmqljohlojmpkorlloiloinqkormnpkmojnqlmojqsnrtopqlloioqlpsnmpjoqloqkloiprmqsnorlknhnqlnojprmmoimqkmpkqrnpqmrtpoplpplmnjmnioqlpqmoqlopkmnioqlmnjrrnpqloplmminpkookookpolpplqrnqqmpqmookpplmmiqqmqqnqqnqomrqnrrnsroqqmonjqqnpnkrpmpokrqnpolpmjpokqolrpmrrnsropnlqplpolrpmnmipokpolrpmsomomjomjqolrpnrompmkqnlominlinlhqnkpnkokirnlromrnknlioljpnkpkiokhnkipmjmheronpnkokipkiojhqmkrnlpkhqnkpliojhpljmhfpkiokhnjhpkirnlnjhpljnigokhokhojhojhniglfdmifmgemhfpkilgdmgengfnigojgmhfngenhfmifnigqjhmgflgekdbnigmgengfkecngfleclcbnfengelfdkfdojhicalfdnfdmdckcalfdkcakcblcbkcakdbjdbi`^ldbmecj`_ldcmedi`_ja`lecia_k`_i`_gEDfhghikkmljikmmkmommnokmkmmqqrnnoqnppntqrosqqpqrrrprrtrqqrstroqrsrsrovnsqtrrstpsruqrssttstsqtrpsprrsrstttqrosqtrrsuurusptsusvoowssrqrpspvrptqoorrrtrorrppponpopomormqnqppnooonmollmknjmmklilkhikgihfhChBbja^h]aj`ai`ckaemdckabj``i_bkaelcdlbdkcbi`ckaelddkbckadkadkbfmdbk`ckbdkcdlcfnefndfneelcckagnfgmeemchnfgmeelcfmdfnedkbhmfelcioggmdflcgmehnfingipggleingkphelclpjiohjmgkpihogknhjphinghnfkpimpjimfjoilqjkoijmglpjkpjkphjohknilpjmqkkqikohimfnqkknhimflojoqlloikohoqlloimpknqkknhlpiorlloilnhlnikmhnqkloimojopkpqmnqlnpkmpjormmojpqmnpknqlnpkoqlqsonpkmnjpqmpqmopknojormqsnookpqmnojoqlnokpqmqsnpqmqqmnojrrnookpploqlrrnqqmpqmonjnnjoolrsoqplrqnpploplqqmonjpplspnqplqpmmmhqpmpolnlirqnqpmpokrrnpnkpnkpplqpmqolonkqpmpplpmjpljrpnnkhonkrpmonjomiqokomjpokqolrpmomjpmkqnlqnkqnlokhnlhpmjqnlpmjmkipmjolinljolirpmrnlrnloliqnkqmkqljokipkimjgqmjpljplimjgnjgpljoigokholjolhnigqmjpkiokinjhmhfojhlgenigmhflgenhfoigpkinhfnhfojhnignignhfnigmigmedmgelfdpihmgengemgengfledmfdmfenhfnigkebkcbkdalfdkcamfemednfdkdclecmfdlecmedlecmfdjbai`_kbalecib`jbakbajbakdbmedkdch`^h`_kcbg^]fDCfgkihhkkikkkkllnkojmnmommmqqqoooqnqppooprorpqrrqrtrsqrtpsurotrqqptqrrrtqrstsrspqrtqrornqrsrssstsrqqrvsprsrrrptrqssurrrtqqtpnprtonusqpqrqqtrtsqrprrrqppprppsqqsppqqrrsnonoommonpmlimllmklmhkiljhiggheFhEaj`cka`h_`h^ai`bj`bj`ai_ai`dmcckabkackaaj_ai_elcdkbeldbjadlbelcdlcemddkbdmcdkcgnfgnfelcfldfmeiogdlcdkbhofhmfhmffkdhmfhnfekbhngjohglcjnghnfjphjohlqjfkcjohkpikpiimginfjphgmeloigmekoihngkohlqijogkoilpijohjmgmqklnikpiloijmgjlgjohjohkohormmqkmqkmqkmpjoqlnrlkpilojmpjmpjlnilnimqknpkknhmpknqknqlkmhkoiloinpkoplmojmojprmpqmmoiknhopknpkoqlpqloplqrnpqmnojqrnqrmlniqrnpploplpqmmnioolprmqrnpplookmnimnjoolopknojoqkqqmlmhpqlqpmookklfoplpokqplonjnokqpmqqmssokkgnnjqqmssopplqpmqplonjqplrpmqolrrnqqmqnlpolqpmoljpolpolpnkonjqpmrpnonjomjtspomjpnjsqnrollieqnkqnlomjomjrompliqolqololiomjpljpmknkhpnkmjgqolpmkokhlifomjokhnliqololipmjpmjromokipmkplipljpljnjhmheoihojhnjgqljpljkfcojhqkiqljqljnjhnigokiojhlhenhenjgmhfnhflgemgflgemgeolilhemhflgekeclecmhfojhohgnhfmfdmgelecmhflfdmfdmfeledkdbngenfekdclecmfdnfemfelecldbkdcldcja`kbakdcjcblecmgei`_ib`kcakbai`_kcbja_ja_hFEgfiiijimijkjmnlknnmnlnopmqpqnoppornrqnnpssspspsppsuuopssqqqrrrqstrsrrqrruspqqqssrstssrossrpsrrtsstrtqrtqrssstotustqrrqsqvsqrttquqsqrnprpsmprnqqqsqoprtqrpooqprpopqpoqppppnnqonkpnlknmlmlllliljkijighGhGbja`h^`i_dlb`i^clbbj`ah_dmcaj`aj_hlfdkbcjbbjaelcelcbk`elceldfmdcjafnedlcelcemceldfmdgmedkbfldgmeeldhnfhogfmdelcekcipggnfinghnffkcingingiofkohgkdfldingglegmeingiohinginghmfhmflqjinginglqimpkkoiimfkoikpikoijpikoilpilpjmqknqllpilpjkohmpjnqkimgormnqklojmpjmojlpjmpklpjnqknpkmpjormlnhmojoqllojpsnlpjmojoqmnpkoplopkpqlmpkmqkpqmqrnormrtonplrrnqsopplpplnojqsnoplnojqrnpqlpqmqqmssonokpplpqmprmooknpknnjnnjqrnqqnqqmoplnnjqqmpokppmnmjpplpokrrnqqnqpmnninoksrolkgookrqnqplpokpmjqqmpplpokonkrpmrrnrqnoplookrpnpnksqnrqmrpmpokpnkpnkomjomiqpmpnknmionkqolnlipnkromqolpolnlionksolrpnnjhpnkspnpmkpmkqnlqmkpmkolinjhnigokinkhpmjrolqljqnlqmkoljmjfolipkiplipljpljpjhnhfpkipljpljpkioigngeqmjoigojgpljokimiflheokingengfpkimgfnhgnhfmhfnhfmgelecnhflecnhflfckdbkfdngemgekecmgejcalfcmigmfdlecngfjb`leckeclecmedlgeldcldclfdmfdjbajcbkecjb`i`^ia_ia_jb`ia_kcaha`h_]ia_jdbia_kLKggjghijkjjljlkmlloomnpmommnponnrqqoqqrqpqrssqprprqqrrrrsotrspqppuuqqpssturrsquqqpptotqsvrquqstqrrqqqsrssssssoursqqssrrqppssoroqsqqqrqqpsqrrssustpptqppppqpqqqnqrpqqqoplonmomrnlmonnkkmkmkjjiihkkjhfgIiH`h^]g\bi`cja`i^ai__g]bkadkbckbbkadlccjbdkcckbdlbelcaj`fneemddkbdlcdlbciaeldflddkcgmfcjagnefldgldbi`cjbgmejphingfmefnegmehngflcfmehnfgnffkdiogjohgmfhnfkpiinffldjpihlflpjgleingkohiogjnhmqjkpijphjngjnhimgkoilpilpiingkpimqkkohinfimfmqjnrlmojorljnhloiloimoilpjnpjloilojmpjloiormmpkorlmpjloimojprmormlojnqkloimpjorlormmojmojnqklniopkqrnlninokoploqlmnjoqlpplrsomnikmgopkrromnjnpknokpqlookmnjrqnookqqnoolmmisropplookqqmrsonojnniqrnrqnpplqpmomjqpmnninminmipplpolqpmsspqqmqomqqmpolqpmonkpnkonkqpmmlgspmpnkonjpnkomjoolrpmqnkomjoliomjpmjqololiomjqnkonjpnkpnkqolomjromnlispnqnlnkhnjholiqnknjhpmkrpmpljoljplinjhpljnjhqolqmkqmkqnlrnlokhqompmjnjgpmjpljpljojhpljmheokimhfnigojgnjhnigojgnjhnigpkiojgmignigojgnhenignigkfdlhemhfnhglgekfcmfemfdmfdjecmgejeblecndckfdlfdkecmgelfdlecnhfohgkdbjbakeckdckcbldbmecmedi`^jcbldci`^jcajbakdbkcbh`_jbaldcldbkbakbai_^h`^ldcgFEfigihilglmjklkkllnmlomlnqpnmmomopppqqqptqqpprsrnorqutqpssqtttsoupprrqoqrorrsqqqstssrtsrrqqprtstvqssrstrrqsrqrprsrrrtpqpsrrstrrpsrprqorqssoquprtqspprmnqprsmsqpppnopsrqnnppplmmnmmmlknnjklmjkljhjigfhDhCbj`ai__h^`i__i^ckackadlb`i^dkbcjabj`ekccladlcblaai_fmecjaelcdkbdlcekbflddkbdjbemdemcfnegnffldekchnfdlbinghnffmegnffldiohfnehnfkpilqjekcioginggmfkpigmehoghnfiogjpijohjphjnghlelqjinghmfmpklqjmrlknhgmejohlpjjnglpiimfloiknhlojkohmqklojknhlojlpiloiormlpimpjlnimoilojlniimglniloiloimpjknhkniormnojlpjmpjnoknploqlmpjoqlkmhopkmnjnokmokoqlopkoplnpjmojnpkoplmpjoplnpkrroqrnqpmqroppknokopkookpqmmmhopkoplpplmminnjpqmpplqpmpolookppmmmipplppmnmjnnionkoplrqnooirqnpqlookpplnmjomjpokqqmpokpnkromnmjomisqnnnjqolonjpnlpnkrpmnmjpnkqolqnlpnkpmkpokomjomjoljqmknkiqmkomjqnkokhpmjmkhpljspnomjsqopljnkhrolpmjpmknjholipkipljpmknjhnkiojhnlisommifnjgnkhojgpmjojhpljnjgnjhpkjokhpljmignjhnigojinigmhfnhflgeojgmhfmifokhpjhmgdojhnigkecngfmgeoihpjingfmhfmfdlfclfdmfdmgenhfjcamecjcakfdlecjdblfdledogfkdbleckeckdblcbkcbkcamedjcakcag_^icbjbanfei`^icajbaia`ha_ia`h`_i`_h`_h`^hHGgdgikikjhiiimkklkollmolmpnppnopnnpnnpopprrrprrporpprrqrppppqsrqrsqpqsqrtsuspsqqqrttssqqptrtrspqtptrqptsssssrqsrpsrtqrupspsssporsrusrqrrtrrpprpqqrtssrrsppoopspspqpopnpqooonqpokninmkjllijlkjkjhjhiggCeB`h^ai`ai`ai_`i_aj`ckbbjacjadkbdkbdkbcja`h^fmdcjbckbemcekd`h_emddkb_h]ckafmddlbdkbbi`dkbhogfldekcflddkcfldflddkbflegmehmfekcjohhmggmeglehofinfjphjngglehnfjngjoghmgimflpjingkoikpiingingingfkdkoilqjjmglpjjlfkpilqjknhkohknhloikoiimgloilpjnpkmqkjmgnpjlpjkoioqllojmojlpiknhormnpkmpjknhlojloikpimojoplnpknpkmpjnpjoplkmhmokoplmpjmnioqlookopknpjoqlnpjnokpqmnpklmhqrnppmlniopkqrnrropplqqnppkqqmnnjookpqmooknpkoojlnionkrqnnnjqqmqqmqpmpplqrnnojoplmmjnnjonjmnimlhpolpokpolnnjookpplpplsqoonjqpmrqnrpnrpnqompolqnlqnknmiomjnlhpnlrpmnlhomjlkgonkpmjpmkrolmjglkhqnlonkpolonjqomnlinkhqolrpmoljqnlqolpnkolipmkpmkpmjnjgpmjoljokhpmkpljolinkiojhoignignigqmknjhojhokhqljnigokhqlinjhmgfkfcmifokhpjinhfojhokiniglgenhfjecmhfkdbmgfoignhfojhlfdmgemhemgemheoigmgemgelecnhgkdcmgeldcleckecjcakb`kdbkcamgfkb_kcbkeclcbkdbib`ngeh`^ldcledldbkbai`_i`_jb`jcbkdbib`ja`kcbh_^kdcjbafFEfighijhhkjmlmmlmmmlnlnmnoonnmnmopmqppqnqqoororsporpoqsqsrsqqtsrpotsqssssrnrpsusrqsssorrusssrrqsqtsursuqrsqttsstprpsspsorqrtprssnpsssrqorrspouorrptrqqoqmrpoopooqompooononomonnkkmnmlkilklkhhjkigiijfEgD_g^_h^`i^ai`bjabj`bj`cjaeldbjabjabkadkcckbdkcdkbdkbfmdelceldbh_elcfldeldfmecjafldgmegmeciaelcdkbgmefkdfnefldelccjagnfiohfldhnfekchmfgldhnfingjohhofglehmfjnhglehmfflckpifldgmelqkjngknhkpijmgingkoilpjingkpjmqkknhknhlpjkoiloimpjmpkjnhnpklpjmqkmojlojkoimpkmpjlpjkohmpjhkempjkniloijmgmpklnimpjnqljngnpkormlniloioqlormnqloplpqmoplpqlpqlnokprmppmmojlnioplnojoplnojnpknqknpkmnipqmpplprnnokoplnokookmmimmilmgpolpplppmqoloqlnojooloplrromnjssoqoloolnnjpplqqlnojpolonkonjonjonkqolljgomjpnkqpmnmiqpmrqoqolpokpplmlhqolqqnpnkqolqolpolnmjomionkqolnlipmjqnlqolokiolioliqolnkhplinlipmjqolpololirolokipmkrompljmjgpljpmknkipljpljmjgokinkhmigqmkpljmjhqnlokimhemigmigkebojhlgelgenjgqmknigmifoigmhfpljojhmhfmifjcanhgmigpjhnkhlgeoihnifmhfmgejcalfdohfngeoihmecjcalebohgkecmgenfdmfeledkdblfdjbamfdlecjcamdcia`ledja_jcakcalecmfekcaja`icaldci_^ldckdbh`^h_^jb`ibah_^h`_gGFghieiijkkklmlkimlnnonoooonmonnnmoqopproqpnnpqtqsmqrrrspsqprttspopotporpopsprrroqpqtqotopqssrsqqrtsrtuqsstqrqqrspqvsrqprqqstrrrmsqprqqpqrqsppqpqqnqssrrsoonnoqmonnqqompolkomooonlkmkkkmkmkhjjigjhgigfEhD`h^ai_bj`aj`cja`h^bkackabj`ai_bjabj`ekc_i^bj`dkbelddkbckafmeemdgmeemdekcdlbdlcgmeeldgmefmegnffmehnffkdfldciaemcdjbfldgmegmeinghmfflehoggmehnginghngjohhmfhmfhmfhmfhnfkoiingjoijohlqkjnhlpjknhjohjohjngjnglnikoiingjohmpkknhnrlnrmlpjlpjnrllqjkohlnilpjjnhkpimpkkoiknhkoimojoqlmpknplloikoilojprmnqknplmojmojmpkloiloikninpklnhlnhknhmpknojopllninoknojnokpqlnplrrnmmippmoploplnpkoplprmmmimniookopkllhnnjoplnojqqmmniooknmjrropolooknnjopkpqmqolonkqqnonjnmjpqlqqmqqmmmipolnminnjqoknmjpplmlipnkqqnpplpolpnkominminnjomjpnkomjrronmjnlinlirpmpnkomjpmkomjljfnliqnlnlhpmkolinlinlimkholioljoljqnlokhnkhmjfqolomjoljpljnkhnkhpmkoljokioljoljpmjsnlokhmjgokhojhkgdnignjhpljmifnigojhmifojhokipkjmiglhfpjhmhfnhgmhflgenjhlgemhfnigmhfnhgmfdlfdkecngfnhgmfelfdnigohgmgekdbleclfelecoihkcaldbjcakeckdckdbmfdmfemfdldcldcja_ledha_ldcleckbaia`ledldci`_jcai`_h`^h^]ha_ib`i`_jbahGGfefigjikjimmnnkmkkhmolkknlonoonoonornqprrrqqpprtqqrrspqrqrtprtsssqqprtvqrsppqsrrrptusrrtrottqutoqstsrrqqpptospsqprrqspsssusorqpqqtqportsqtqqpsrrqprrppprprppppnpnolmnormnpmmomnmmnkkkmkinjkkkgjhjgfiFeE^g]bk`aj`ai_`h^ckbckb`h^bjabi`ai`ekcai`dmcelcbjaelccjacjbckadlbckafmedjbcja`i^ckaelchmfgmefmedkbfkdekcgnfhnffldhogdjbekcgnegmeinfhnfgmegmegleinghmfjohinghnghmgingkoiinggldgkeinhfkdjoijnggmelpiknhjohimfjmgkpikpimpjnqlmpjimgmpkkohinglojlpjlpjprmlnilnioqlkoijnhkniknhoqlknhjnhmpkmpjlnilnilnhoploqmmojnpknpklninpjoqllojlnimojqsnoqlloimojprmlmhnpklmhnpllminoklmhnoknojnpkopkqrnopkmojprmnnjookppllniookmmilmhpqmpqmnnjookpolpplpqmpplnnjomjpoloplookqpmllhqqmnnjpolookpolpokpnknmionknnjqpmomjomjonkrqnppmpnkqompokpolpnlomjpnknliqolnnjrqnpmjolipnkmkhnkinkinlipmkpolqnkrolqnknliqmkolinigoliolinjgqmkolinkhpljromoljlifokinkhmhfnjhnjhnjhnkinjhpljojhokjokhmhfpkhmjhmhfpljpkikgdnigoiglheojhnigmhflgekfdkfcnigmigmfdmifoignigmgemgelhengelgelecmgdnhfjcalfdlfdlfdmfejcakdbmfdjdbledjcalfdib`ldbnhgkeckb`kdcmfeleckcaja`kcbjcai`_jb`kcbh`_kbah_^kb`hb`i_^ia_ja`h`^jKIhjefihgkjmikllnkllmnklmnmmopnoqlorooprsprppqpoqorssonlsrrsqrsrnrrrossqsssoosrrqqrpqrrrpsqqqsqpotrpporpqroqqsqtrspqprqsopunrqqrruprqqprrorrnrqpnsnrqsqorqsqopnqoqoonpmompmkonmommolmkklkljjijjihjhffhEhDbj`^h]bkaaj`ckbckadlc`g^_h]ai_dkc`h^bjackbdmbdlcah_dkbbj`ckaci``g^fldcjadkbcjbdkbckbdkbfkdcjacjacjbglehmfelcgmffldgleiogdjbinghnfeldekcjnhgldinginginghmfjnhhlejohinggnelpjimfjohinfjohhmgkoijohimgmqkkoiloimqkknhhlfjnhkoimpkgmeimfingnqlimgloklpjknhimfknilninqllpjmpklojnqkprmloilniknikoimokknhmpkoqmoqlmnjormlnhknioqlnpkoqlknhkmhloinpkmojopllnjnnjlmioplsspnplnokoqlmminojmnjppmmnjopkpqmnnjpqmmnjrromojqqmookmnimmippmpolpplqqmpplnnjpolqpmqqnrqnkkfppmnnjmkgqolppmqpmpolrqnpolsropolpolrpmpokpokpnknmjonkrrnpolnlinliqpnqompmkqpmnmjomjqolnmioljpmjoljomjnlhpnknlinjhqnkomjqmkqololjokimkhqnkljgligokhmkholjmjhqmkoljojhnkhnkiojhlhfnhfpmkpkimigokinkhmifqljnjhokiokhkfdlgenigojhlgdnhfnhfnigokioliplioigmgelgekecnhfnhflfdlgekecmhfnigmgehb`ngfmgfkdclfdkeckdcjcalfdmfeledledmgfjcakeckedldcldclbaldblfdha_jb`jb`kdbkdcldci`_kdbjcbg^]ldbia`h_^jbakdch_]kb`jbaeCBcghjhhhkmlkmkknklmjlmnjlmnnnlmprmnompkmppsoorpqqoqrtqsspoqqrrrmsqtppqrpnrqtqpttsrrupqorrsuqoqqpostqrprqtsrqtrspqrnqqsqqpnqrtqqtrqpnqqppqpsqqqpqoporpprrooqoronnoorlnqmmnnlmoommmmkmlmmliiijiihigfghdGhF`i_ai_`i^bja_h^`h^clb^f\bjaeldbi`dkbbi`bkackaclbai_ckbdlcai`aj`aj`cladkbfldbkadkbelcdkcckbdjbekcdlbgnefldgmehnfgmefkdbi`ekchnfhnfinhjnghmfkpiimfkpifmdgkdjohingiohfkdhngjohimginghkejngjmhlqjjnhjohkpiimgingkpikoiknglpkhlfekclojkniknijngjnhknhloihmfkoikninpkjngloimniormlnijmgmpjmpkkmhlojjlgloilnilnijmhmojmojkmhormoplmojnpknpknojlnjnpkmnimojmojmojnpkmojmnjmojnojnpklniookoplpqmookpqmmnippmqqnnnjoolpqmnnkpqmnokonkopkppmpqmqqnppmmmimmipolnnjnnjookmmionknmjoolqqmqqmpolpolnnjrpmpolqpmpnkonkpolomjpolpolnnjpnkllhnmjomjpnkolinlioljpmjnmjpnkpmjqompmjnkhmkholjpnlnmjnljpnkpmjrompmiqmkpljoljplkqnlmjgnkhrnlolinkimjhnkhmifmifoljnjhpljolilhepljmigmignjhlhfnjgokiokinkhmhgnhglhfmjgnjhoiglfdpkjmgdoigmifmgenignjgjfcpjhmgdlfdmgenigpihmgemedmfelfdkcangelfenhgib`lfemgfleckdcledkdbkecmfekdbjcajdbldckcbjcakdcjcbh`^ledledia`j`_jb`jbajcbjbajcaf^\kcah_^ja`f][gGFfghfijlijkkikljmlpmmmmnmmmmoplmnprnqrposppsqpoprmrpqqtqpqpqvmrrqpsspssspmsorqrstrosquqssrurrptoqqqouqqsrqqrprprprtqsqqqtrupqossrsrsqrssusrorotqonpqqroqqpmpnqppoqppnpnmoooqnmkokmlllmknljkgkjglihhggFhE`i_`i^bja`i_bjabi`bka^g]dkbbkackadlcdlcckadkceldemdckaah_aj``h_ciacjaglefmdfldgmfckadkbdjbgneelciogfldfldeldgnfeldiogekdgmehmfglefkdhnfekcglejnhfldinghnfhngjohhmeinghmfinglpjhmfknhjmhingingimginfjohimgkohjnhlpjjohknhloikohjnhkohkmhknikmhloiimglojkoilnimojilfknhknimpklojormjnhmqkoqljmgnpknpkmpkprmoqlmpkmpklnjloimpknqlmpkoqlkngoqlkmglniopllnjopkooknpknojopkqrnnokoplookpplnnjnokopllnhnojqqmnnknokoollmhnokonkllhnpknmjqqnpqlpqlrrnpplrrommimmioolqrnlmilmhppmnokpnknmiqqmnmjoolonkookpnkpolrqnsqnnnjnmjoljookomjqololimlionkpolpolpnkomjomjrpnpolpnkpolpmkpnkpminkinlikielkgqmknkimkhqnkmjgqnlokiokhojhqmkpljnkgnjholimifjfcojhojgokilhemhgnjhmhfokilgdnkhnignkiqkinjhnihkgdmignhgmifmhfmgenjhmgeojhmgdmgelgdlfdnigmhfmfenhfnigjdbmfdlfdmhfmhfmgfmgekeckdcjcajcbkebhc`lecmgekcajdbledkfdjb`kdbledkcbmfdib`ia_kcbldcmdcldcjb`ia_g_^kbaja`ja`ib`ja`g_]jb`h`^g_]fHGdiieffkihlikjkliklmplmpnpnonpnlloopnornroqppoprqooqrsppqpqqrroprtqrqrqqrrpsorprqrpqrrqqprqqomrpquttqtqvssrtqtsrqpptqssuoqrovstoqpqsrqsspqqoqqnrqoospqorrpornponoonoooppoloknonpkmkklkknkkkgihhhjhhhfGgFaj``h^bj`aj_ah_ai_]g\claai_`h^ai_dkbbja_g]ai`bjadlbai`ekcckbciadjbbj`gmfemddkbdkbelcbj`fmdeldhmghnfdjcgnehnggneekcfldekcfldfldgldimghoghnfflejohgmeioggmehnfimgjohingjnhingiogkoiimglpjmrkknijnhimfimgimgimghmejngilflojjohlojmpjiogknhhmfkmhmojnqlloiloiloimojknilpjlnikmiikeknhilflninokmpjprnpqmmnjnqloqloqmmojknhpqnnplprnmojmojnqlnpkkmhopllninojoplnoknoknnjpqmnnjqrmlniookmojlmhmojoplmmimmipollmhnojmmhpqmnojppmnnjnnjmniookonkookonkmmionklmhnnkpqmpqmomjonkonjookoolnmjonjonkpnkonkmmipokomkrqnpplomjookomjqolpnkqolqompnknminmjqpmmkgmigqolpmjqpmqnkpnlnmipmlpnlmjgomknkinkholipolokinlimjgqnlpnkmigpmkpljolinkhomjolimjgnjholjnjhokipliqljmhflhfmiglhenjgojhojiojhokhliflgemhfojhniglgemhfnjhkfdmgelgemgfjfdojhlfenigpjioigmgeohflecnifkeckfdleclecogfmgelfckecmfdkecmfekcalfdkedmgekecldcjcbledmecia_medlecjcakdblecldcjcaja`ja_kdbf^]jcah`^g`^ia`ha_ja`h_^gIHfghghghhjjkiljkijllmlmlnlmmmomoornoomqpqqqopspoosroppoooqsrssqpooqtrtppoprrqqrnrossqussqrpprrpsvqpsqrtpstnruonrqqtpoqpsqqrqqpsqqqrqrqpqorootorqoorprpnornnqmqopppoolonnqooninljjlkloliikmjkijiiiggggEfDai`_h]ai`_h]`h^ai_dkbbi`aj`ai_bj`bj`bjabj`_g]ciacjbekccjbdjcfmecjaciacjadkcah_elcdkcciafmddlchmffldfmdhmfglefmdhoggmehngjohfldemdfldinggmehmfinginghmfhmgfldjngfkdlpjinggmejohinhimginginglpjhmfhlfloiimgglekoijohjnhilfknhlpjknhjmgkoiimgloilpklnijngimflojmpiloikmhjmgmojkoiknhlniknhlnilnimpklnhknhikflojlnijmglnhmokoqmprnklhnplopllmimminqlnokpqmmojnnjnolnnjoplkmhnoknnjmojmnimniqrnoqmoolnnjopkoolmminokmminnjooknpkooksspqqmookonknnjppmmmionjonjonkpolnmjnnjsroomjnmjonknnjmliqqmnmjonknnkomjnmjmkgnlipnkoljonkpnkpmknlirpnpnkpmkpolqmkoljpnkomjpnlokimliqnkpmjnmimkgnkgomjpnkljgnkinlhmjgnliqnlpmjmjgnkhnkhokiliflifmjhnjhlheolimignlinkhnkhmigpljpljpljmhfokimiglgenigmhfokhmifmiflgepjiojhogfmifnihpkiojipljmhfledoigmfdkecmhfjecjdcnhgjcalfdkeclfenhflfekfejdbmgelfdlgejbajdblgekecjcaja`kdbkbaib`lfdkdbkdcjcbh_]ia_jb`hc`ib`h_^h_^i`_h_]kbag^\jbai_^h_^ha_iJIdififeijlhiljlkolnmlolnlloqmkoonlonnmrqnpqopmpqqpnqqrprnrqoqqprqurrrttpprtrqrprrpsqrqqrsrqrprqqrqrqussqqptpqqsrtprqqsrstrrqrprpqspsorqroprrqoqoopqqqqmooppnoppnsnnnomnnnlmnoimjmolkiikkkkihhhhigggfhIhH^g\_i^_g]ai``h^ai`bi`bi`_g^dkcbjadkbai`cja_h]cjabiacjackbdkbcjbekccjabjabj`dkbgnffkcbjadkcekcfldfldfkdfldekcgmfgnffkdckadjbejcgleiohgmefldgmeflchmfhmfgmegleimgfldekckniingingimgjnhinhjnggkefkdkoiingjnhjngimfglejnhilgmpkkoijmhjngkoiknhkmhmqkknijnhknhjnhkoijnhimfmojjmhlojmpjknhimglnilojnpkmojkmhmojmojmojnpkklglnhnpkmnjmpkoqloqmnpklnimnimnioqmlmilnimnjpqmmnjmmimojjlgklgjkfnokklhmnjmnjpqmonjnpknokklgpplnojpqmonknnjrrooplllhonjnnjmmiqpmpplpplnnkpplrqnooknojqolnmjrqnqqnonkmminmjnnjmlionkpnkmlhlkgpnkonkmlhpnkkheqpmllhonkmkhomjomjomjqpnlkholimkimkhpmjnliolipljrolnkhnmiomjomkpljpnkqmkomjljgmjgljgmhfpljljgnjhpmklhenjgmjgnjhnkioljniglhenjhokimjhojhnkhligkfcojhkgenignigojhmgenigmhfkgdoljnigmiglhekechc`lgemhfmhfmgelfdmifmgeniglgejdbledkecidblgemgfib`lfdkcbmfeledjdbkdckdbjbajcakdbjcakdbkbajcalecleckedjb`lfdib`ha`jb`kcbia_g^]ia`ha`j`_i_^ha_i`_hFEegigigikihjgikkmlkmmnmmlnojommkonoppromnqproqqqqppqooqrpqqrrrroqqqqosqorptotqprqrrspttqrqspspqsssqorrqqrqrqpqptrrqrpssorqqrqrrqrprpqqqsorrrpoplsosmnqoqpoqorqmnmooomolmokkkmmonkklljjlljkkjjihhhjgffEeDai_^h]_h^_h^ai`ai_ai_bkabka`h_bja^f\dlcdlc`h^`h^`h^bjabi`ciabjacjabi`gnfeld`i_dkbeldci`ekcdkbcjafldfmegmedkbdjafkdeldfmefldfldgldhlfhnfinggmeglegnfdkchmffkdiohjnhhmfingdjaflehmfhmfjnhilfglfileinginfjohkoiimgjohmojimglniknijmhkohimgknhjohjnhkoijnhlojjmgloimojnpkknilniprmlojklhlpjlojjmglpjloikniloilmimojlnimnjlninpklojjmgmojnplmnjlninpknplnplnnjmnioplnnjnnkmojmojmninojmnipqlnnjookoplnnjmnioplpplnojpqmmmippmmnjoollniqpmpolnnjmniopmpplmmjooklmhppmpolqpmnmjonkqqnqpmonkonjrpnrqnqplnnjookpolonknmjljgpnkmkhookomkonjomkqpmnmipokmkhpmkpmjpnkpolonkomjpmknmjmjhpmkmkhonknkionkolimkgpljokinjhomkokinkholjnjhnkhnigokiqmknkhlhfokinkimkhmignjhmigmjhokilgenjhpljpkiojgmjhpljmhfniglgfokimhfnjgmiglhfmgelhelhfmgemgemgekeclgelgemhglfdkedjecojhlgemgemgemgeledmgekdbledjcalfdmgeicamfemgfjcajb`kdbkdbibaib_ja`jbaja`ib`h_]ia_ja_kdbjb`h`_f\[kcaha_i`^h`^h`_i`^hHGefgegihjiigkjljmmkmmmlknmnjnmnomppooomoqqnonopqqqqpoqrqtpqqrqrqrltrnpqoprpsrrqqnqrrsrrortnrqqsqqspqprqnqqrostrrsotqpqpqsrnpqpppqsqppmqnqqrqrpqoppopqprqqnqopoooonoopoonpnmmmokomjkmmmlljliiiighihideGgFai__g^_h^bi`ckb_g]ekcbj`ai``h_ckbcjadlc`i_dkcbkabi`dkbbjaekcbi_dkcbj`elcekdfmefmdelcdkbdkcdlcciaciaekccjbelddkbiogfleemdfkdiogingekcimgfldgkdhmfglegkdhnfgleinginghlfjnhgmfhlfhogimgfldmpkimgjmhimgknhkoijnhhlfmqkjohmojjnhkoijnhkohnqkkohkmglojlpjjmhjmglojknhjnhlnjnrllojjmgmpjlnimojjmgoplmpknpklpinpknpklninpkmojmojoqloqljlgmmimojnpkprmmmjoqlmpkkmhmmjmnjnoknokmmjmnimnjkninoklmhklgoplmminnjnojooknoknnjnnjonkookmmilmiklhnmjpokoolnnjonkookoplookpnknnjonjonknnjonjookpolpnlmmhmlinmiookpnknnjonknmkomjpnkmkhpnknlinmjmlipnkoljomjpnlqnlmlinljmkhmlipnkmignkhnliokipmjmkhmjgmjgpmjlifnkhnkhmjhpmkokikifnjhnkhokipmkolimhfokinjhmjhnjgokilifnjhnkhmignjhlgemhfpkjmhejecmhfnigmigmhekgdnigkgelgelhfnignhfpkingeoihmfdnjhjecnigmhgnhfmgflgekcblfdkfdmgfkgekfcleclfdnhgkcblfdlfdkecjbakdclfdledlgeibaja`jb`kdbledhb`ledia`ledia`g^]h^]ha_h`_h`_h`_ja`kcbg`^ia_g]\f\[eDCgehgihhjjihjlklljjlljlnlolpmmnnlmonopqnmoplqpqqqqpqonsroqqrrsqrtoqqrqrpupprssrqrorqrosssqrpqqoupsqqqqnqrqqtqroorqroqpsqsrqoqqsqrprrqprprqqqoppprporpopqorplnqqoqpqnnnqlkmonnonokkjlmkkhiljjjijhggghfDdC`g^`i^]f\`h^`i_^g\]g\bi`ai_cjaai`bh`cjbbjabjaekcdkcelddkbcjadkbbjabi`ckafmeekcfmdcjaflddjccjagmeejcfldbiafkdekcekchngfmedkcgneimgfnefldgmffkdglehmfgldjohelcglefkdfkdhmfglehmfgkehkeglehmegldhlfingjnhkpjkoijmhlpjjmhknijnhjnhimgjmgjnhimglpjjmgjnhkohoqlknimojnqlmojimgjmhimglpjmpjjmgnpkjmgnokmojlojoqmknillhknhloiknhnokmojnoklnilnillhmnjkniklhlmhkmhopkmnioplmnjnolmojoplmojopllmhoplookmnjnoknokmminokonknnjmnjnnjmmhlmhllhppmnnjklhnnjnnjnlipolpolookllimnjooknmionkmmjnmionkonjqollkhpolomkqpmooknmjmkhljgpolonknliqnlnliljgqpmmkhmkhpoknljlkgpnkljgnliomjpnkqolomkpmjmkhkhemkhnkgmkhomjnkholjomjnjhmkhmjgnkimkhpljolinjhmjhmignlinjhnjhnjgoliojhnignihmigmignjhokiokiojhlhfnifpkikfdkgdlhflhfnkilgemhfmfdmhfmhfnhflgekfdlgemgfmfelfdledlgemgfkgengeleckdckednhgjb`kfdlfdlgekecleclgeledkdbjdbjcbia_leckedjcakcbkcbia_kdbjbajcbf^\j`_icaf]\h`_f^\ibah`^h`^g]\g^\fGFehhfijhhkjhmkjkjmlmnikklnmlmnnpomonnokmjnpppoomonqpoprpqqrqqqoontroropqpqppqqqrquqspqqsrqsornpsqtrrqrqprrqpssrspqssqrrrpqprsqqrnrropqqprnpspppsorppoqqqpnmpponplpnnnnolnmmkmmnlnknkjkjkkjikkhihhggeeDdC_g^ai_]g\`h_^g]`h^dkb`i_ai`_h^`h^ai_`i_ah_cjaelcai`aj`fjdbiabi`djbcjbbjahngcjaciacjadkbelcekcckbciagmeeldelddiafkddkchmfglegmeglegmedkcfleiohgmfgkefldgmeioghlffkdglegkdhmfingglegkefkdhmfglehlfhlfjohknhlpjhlfimgknhknhnpkkoigjdkmhjmgimfjlgknhimghlfhlejmhingkoiimfloilnikmhlnilnijmhjlgoqmnpkjmhoplnokoqmmoilnioqlmoiknikmhklglnioplnpkkoimnioplnoknpknokkmhmnjlmhpqmmnjnpllmhoplnnjnpkmnjoplmninojmmjppmooknnjmnjnokpqmnnjnnjnokmnjonknmipplookppllkhmnjoplkkgpolnnkpnkmlipnkpnlsropoknnjmlionkmlinnjqnkpnknmjmkhpokqpmpnkpnlpmknmjomjpolpnknlipljnjhmlhpmjqolnjhmkhljgpmkmjhomknjhnlioliljgmjholinjhnkinliomjlhfmjhlheomjlifnkimjgnjholilhfpliokhmjhlhfnjholjmjhmhfmhfkgenhgmjglhekfdmignigmignifmhfkgelecnjhmfelfdlfdkgelgelgejdbkgejdaib`mgfmgekfdkecjcakeclfdkfdjedlecjcakcbjcajb`kdcjcalfdlfdja`ibalfdh`^icajcakcbjbakbah`^ib`kcbjb`h_^ia_h`^ia`ia_f][i`_h`_i_^gFFehfifhjjihkijkkjmkkmllmmmpmmnmoollqnmoonnlormoppqmpppptqqpotqqqprponqmrporqsqnrrqrssoopqqrprslprrpprqtrrrnsspqrrpqqstqqqqttoppqorsrrorrorqqnpoqpmqnonpnmmoonpqpnqponmmommlolnmlojmjkhlkkjijijkjghhgeIiH`i__f]_h]ah_bi`ai`cjaai`bi``h^ai_ai`ai_bjacka_h^aj`bkabj`cjadkcekcekcelccjadjbdjbgledldfmdglddkcdkbfldbi`djbdjbekdelcdjagmehnfekchmffleglegmfekcfkdfmegkehlfinghmffkcimgjnhhlejohingjngimgkoijmhjohmqkilfkoijnggkdjmgloiingmpkgmekniknhkniilgilfjmgjohimgkniloiknhilfjnhknhknhknhloinpkjmgkmglojnpkmojmpknplnojmojloiknhnplnpkoqmmojnpklnilniornmojoqlnpknpllmijkfmokllhlmilmillhnokmnjlmhnokmnippmmmimnjllgqrnpolnpkoplmmioolppmnnknoknmjmlhpoloplnmjmminlimminmjnnjpolqpmpolnmjllhnnjonknmjnmjkjfpolnnjonjnmjnnjonkpokonknmjpolpmknnjnnkmlinljoljnmjmkhnlinjhnliomkmigqnmnliolipmknkhlifpkjnljkieoljmkhmjgljgnliolinkilifnkhmjgokinjgnkiomjnjhmhfmjgpmjiebkhfmjgokikfdmhfmhfmhfokipljnjhmihnignigmhfojhmigniglhenjhlfemhflhelfdngfkedkfdlgenhfmgfjdbkfdjdblfdkgdlfdkecmfekdbjdbledkdbkdcjdclfdia_jb`jdbjcaib`mhfkbajdcjcahb`kcbkcakcalcbh^]jb`h`^h`^h_^jcbkdbh_^ia_h_]fEDgdehggjihkikkkklmkmllilmmlpommloonronpolmqomnpnnnoopqqortqpnpssnonqprrosqqpqoooqsprqopqrorrssrpoptpslqorsqruoprrqqrppprrroprspqrqppqqpoopqpnsqsooonlpnopolonpopromlnkmlmmmnnmnmolkllhkjjkijfgihghggeFiEai``h_ai`ai`\f[bjaai_djb`i_`i_`h^_h]bia`i^`h^bh`bj`^e\aj`biaciadkcfldekdbi`dkbcjadkbekcelddjbch`dkbejcdkbelddjbci`cibfldekcdjcejckpigkegleglefkdfjdingjohimghnfhmfimghmfgldgmfingjmghmfhlfhkfimglojkoiilfinhjmhinhinhmqkjmhlojhlfglehmfkniknhknijlgkoimojjngjmgknhknhjnhilgjmglliknhikfloiilglojmokmojoqmoplnpklniknimnjlmilmhnpknokjlgnpknpkopllmhopklmirsonplnojoplppmkmilmhoqmmnimnjllhmnjppmllinokpolnnjlmipplnokoplpolooknnjmniookmnjpommlimlhllhkkfmliooknnjnlimmikjgppmnmjmmjljfmliomkookonjmlimmjnmilkgnlimjgonkonjmlipnknmjpokomjmkgomknlinlimkhmkhnkiolinliokhljgominkhpnllhenkholjmkhmigoljljgnkhomjomjmjgnjhpljnkhnlinkhojhmhfnkimiglhekhemjgoljmifnkinigmhfnigmignkikhenjhmifniglhfnifkgekgdidbmhflhejdblgelhfkgejdblfdkecjcalgeokiicakgdjdblfdmigg_^ledhc`kdckecnhgkeclfdicakecib`ib`kdbia_ibakeckecjcaia_ha_ia_g_]jbakcbib`h_^ldcg^\jbag_]jbah`^g]]ja`ha_eFEefehgehfijhikjlkkmkjmmkkmmkknnlqnllmnnrppopqsponnosnroqrpqqqqoqrsrpptqqqqpqsqnrqpqtoprqsqrqqqrrpsrqrsqtpussorrmoqrrpqrrorornnqqopqprqqqlnnrnpprrqpqmnnqnpnporqmknoonmmllnmmlnmlloginojihljhjhhjfhfheEfD_h^`h^ah_^f]_g^_h^ai`bjaai`^g]ah_`h^`h_ah``g^fleaj_ai`biadjb`h_biabh`ckbdkbcjackbhogelddjbdkccjbfldcjafkddjbekcejcekcgmedjbgledkcciaiohhlehlffkdimfhmgglfjnhgmeingfkdimfhlfjlghlfhmfimgimgglelojgkegmfingimgkmhingkoijngimgingknhgkejmhloijmhloijnhjnhmqkjmgglejmhknijmgknhlnijlgkninpkkoijnhknhjlgkniloimokknhoplmmjmojjlgoplqsomojhkemokprmmnjklhlminnjmnjllglmimoklmhnokopkmnjnojoplnpknokopkkkgqolnokooknnjnokmlinnkoolkkgnnjonkmminnkqpmmmillhnnjnmjnnjkjgnmjmmionknlionknmjpolqpllmimmjomjomjookonkmmimljnliomjomkmlimlimkhllhmlilkhmkhpolnmimmioliqomomkqolpmjpnlomjlkhnkimjgpmjnlimjhomjmkhnjhnkholiokipljmjhmkiljgomkkignlinjhmjhkhepkimhfnigkgekgenjinjhkhenigkgemhflhfmgemhgkgelfdmifjfdlgelfdlgemhfmiflgemgemgelfdnigkfdkdcmgemfdmhfmhfmhfleckecmfdjcajdbjcaicamgemfdjcajcbkdbicakdbmfdhb`ia`hcah`^i`_ldbkcbjbah`^ia`kbai`^ja`ja`ia_g_^ja`g^]jcag^]f_^h`_f][fIHdegghghhhijjjkjjjljkkmqkmnnkmjkompppmppoomqnnqpprnrpoqoosppqpoptptqprrorsrqqorpqrqrqpsrrrpnsrsrpssootrsoqnqoprrpqrrppsprrrnsrrmmrspqqsnntqqqonronrpqnpqqpmopplmonpnnmmommklmmllmlklkimhkhihhffdhghfeCcA`h^ah_`h__h^ai__g]`h_`g^`i^ai`ah``i_cjabi``g^ckbbiaai_^g\bj`djbai`bh`ekcdjbelcdjbbiadkbdjbcjacjaekdekcfkdbj`fldhnfdjbekbhnggleekdfkdhmfdkbekcfkdgleglegleimfgmegleglehkehmfimgjoihmfhlfhmfimfgjdgkejnhilfhmfhlfingjnhjnhilgimfhlfjmgkojkmhkoijmgjmhkniilgjmhloihkfjmhlnihlfmnjlojknikmhlnijmgmqkkmhjlglnhnpkopkkmhmoknqklniknhmojnqljlgnoklmhikfmmimnjnpllminokoplijflmhnoknnkmnjpqmmnilnjllhnmjnojnnjoolqpmjjfoolmmjmmhoplmnjnokookmnionknnkoplnnknokpplpplpplnnjllhoolkjgnmjqomonknljnmionknmjnnkmmjmlinlillhnmjonkonknlipmkonkomjoljmkhromomjmkiromnmjljfomjmjgmkgnljoljonkmkhomjoljnkhmliomjmigljfmjgomjljgmigolipljmjglifmjglifnkijfcnkiligokiokinkimignjhojhmifnhflhfkfdnigkgelgemhglgenjhmhflgeojilfdlgelgemhfmhfoihpjhjeclfelhfmgfjcblfelgejdbmgejdblgeledkdcjbakfeha_kdcledjcaldcja`kdcjdbib_lecib`jdbia_jdcia`icajcbjcbkedg_^ia_ha_h`^f]\ia_ia`ha_h_^g^]h_^ha_dFEefgfekhkiijhkijjlnhinmlmomlnkolmomknpqooqnnmnpoqqooknqppqqqopprqoqpqprrsppprrsppsotrqqqrrqppnsqorvqrrpsrtqptorqpropsprspnorsprroqsrpsqorronppqpnooqrrolpooooqmqonmnkqmlklnllllilklljlikjjiiigfiedgheDeCai_`g^^f\_h^`h^^g]_f]_g]cjb`g^_g]ai`ai`bja`h^dkcbi`ai_`h^ah_`h^cjabiaai_ckadjbbiaciacjadjbciaah_ciacibdkbejcelddkbflegleeldejcckbhlfimgfldgmeejbhmfgkeeldfkdflefkdgleimgglehmffkdkojkoiimfknhgkdjnhhmggkegkegleikfimgkmhimgknilojknhjmhlojmojkmhjnhkngmqkhlfmmiilflninpkloilojknijmgloimojnokknhgjeknhklglniijeilfjlgknilnimokkmhkmhnokjmhlminpkjkfjkfnojmnjmojklhklhnnjlmhlmimojmniookjkgmnjmnjppmoplklhmmjllimmjpplmnjmmimmimminnjppmllhonknokklgookooklminnjmmionjnmjoolllhnmjmlikkfmlhnnjnmjnnjpolonkpolmlinmionkpplmlipokolimlhmkhomjnlinlinlimlhnmipolnkhlifmkhnlinkiolimjgmkhljfmjhmjgolikifljfmjgmjhlifnjhmkiliflifolilignjgmigmigmjgmhgmigokipljolikhenjhlhelhfokimiglhfmhgkfdmgemhfmigmhglhfkfdmhfmhflhflgeidbjeckgenigkfdkedjfdhb`hdakedjecjbakgeicakeckfdkecibakcbidbibajcalecledkdcjdbjdbicbjdbledldcjb`ha`ha_ia_ia`ha_g_^ib`g_^g`^h_^ibaia`g_]h`_h_^h_^f]\hIHeefiffigihlhhjjjikjljkklmmmnlmmpnmmmropnmnoqlpomqnmmopnppropnqoqpsoslosrppqrqosqspqtroqsrqpqsspprsspqpmprrrrtporsrpprrsprqtoprporrqropnrpnonppnntomoppmmmnooopnpqnpnlnonnmljomlhmnjkhjkhijkiiiifggefCdBah_^h^_h__g]`i_cja`g^_h^`h^ah_`g^ckbcjabiabj`ah`dkcai`elddjbdjbdjbbi`dkcdkbekcdkcdkcciacjacjbdjbdjbdjbfldgmeejcdkbcj`ciafkdfkcgmffkddjbfjcfldgleekcfjdjnhfkdhnffldhmfgleimgimfhmflqjimglojimghlfhlfkoijnhimhjmghmfilfimgjmgjmhlnikohlniijflojjlgmpkkohjlflojlniknhloiimfkniilgknhknhfjdlojmoknpkkmimojknikmhnpkmpklmimnkprnloilnjkmhlnimnjlmhjmgjmglnimnilminoknpknnklnimnjppmmmjnoknokmnjqrooplmmillhnokpplmmiooknnknojlliklhmlipolllinnkpqmmmjnmjqpmmnjqqmoplnlimlhqpmpolooknmjnnilkhqqmomjnmjljgnljmmioljqnlmkhlkhonkomkmlipmkkkgmkilkhmkhnmjjieqommmimkhmkhmkilifmjgljgnmjljgpmknkinlioljnjhnjhomjljgljgnjhmjhnjgolinljnjhmjhljglifnkhmignjhjgdkgdmigmignjhkgdmignkimjhlifkheokjmignihniglgelgemhfniglhfkgenigic`migmifjebmgflgemhfjdbkfdnhfib`kebkfdkgdkdbledjcakecledlgejdbjdbjbakcag`^jcbjcaha_jcbia_jb`jbakdbjcah_]h`^g_^jbajbai`_g`^jcbia_g^\ia_jcbia`ia`f\[g`^gHGehghghfijikhjkijjnliklmqloonkknommmoopoloqpoppponpooormppqppoqprsppqspqnqsqtrrtpsropqpqpsrporrrrrosososptqtprooqpqrrrqrosmqrrrprprponoqopoporqpqporppploqqronlolloomomommomkljlkljmliijfghjhhihffgfdBdA^f]_i^_g^_g^`i`]f\`h_ai`ai_bjabja^g]ah_biabjabi`ai_bj`bj`cia`g^cjbbi`ag_djbdkbcjbbi`ah_cjadkbfmeekddjbdjbdibejcekccjafkdciagleciaglefkcfkdgledjbhmfhmffldfkdhlfdhagleilgekcingfldknhfkcinhgldgleglegkeknhjmghlfimgimgjnhimginhjnhkohhlgmojhlfhkekmhimgjlghlfkmhmokkmhjlghkemokikeilgjnhknimojlojmoknqljmhknikmhlnjlmhmnijlgmnjjlfknhnokmninoknnjkmhlmimnjpqnmojlmimmimnjmnjllikmhmojllhnnjookklhnokoplmnjmnjmmhjkfmnjnmimojnnjlminmjllillillhookmlhlkgmmjmnjomjnmjookmmjnnkookonjnlinmjonkonkpolpnknmjnlinmjmliomkpololjnlioljpolnmjnlikiekjfnmimlinmjnliolimjhonklifpljpmkmkilifomjmlilifkifomkoljnkiomjnkhpmknkijheomjnjhokinkhlifnjhmjgmjhligokimjgnkinkiliflhfoljjfcnjhmiglgdmjgkfdlhfmhflifkgemhgmiglhfnjhlgenjhmhflgekfdkfdmiglfenhgkecjdcmgehc`jcakecjcbjdclfdnhfjdbnhgicbjbajcajecjedicaicajcajdbib`ledja`jcag_]f_]jbakdcg_]i_^ha_jbah_^h`_ja`h_^kdbdZYha_g^]g_^fHGfeghehhhiggkjkiklkkimijommmnommoooqkmnmpnnpqmrnpnqnomssoopnqnqmrqsosppsrsrrsppprqqqooqppprqrrrrqproqqrrqqqqsqspqpprrpsqrqrpoqooqpsmpmpsnmpomqpqnoppomppmomnmollmplpmnlonllmmllklkjjjikhljkhigehhfdgeDfC^f\]f[ciaai_`i_bi``h^_g^`g^bi`]f\`h_biabja`h_ah_cjbai`ekdbi`ah`ckbai`cjacjbdjbdjbdjcdjbfldcjadjcdjcbi`gleelcejcbi`ejchlfekddjbgmfgldglehmgflefkdfkcekcekchlfejchlefkeglehlfgmfjnhgkejlgkoijnhjniilfkoihmfhlfjmghkfimgkoikmhimglnijlgmokkoijnhilghkfhkeilfjlhlojknimojjmgkoiimgkmhmojmojknhlojlmhlniknioplmojlnioplimfoplnqmjlgmnjmojmokkmhlojnolkmhlnilmimnjnollniklhlminoklninoklnjmnjklglmippmlmhnmjnnjmnjnnkmmioolppmnnjnojmlimnjllhllhppmnnjpolnnjmmjnnjmlimlimmjoolnnjomjljgpollmionkookjifkjgnmjlkhonkmlipplllhonkmminmjonjnlimkhkifnljomkoljlifnmjmjhnmjnlinkiomjkienlimkhnkimkhlkgnkimigjhenkinkilifmjgnkiljgnkikheolikifmifnjhnlimifnjgmkhojhmjgmiglhfmigmifolknignjhmihnjhlhelhfkfekgelhfjecmhfjecnigkfdkecjcamfdmhflfdidblgekfdia_jdblgeicakfdkfdjeclecjdbkgdkdbkeckecmfeib`ia`jechb_jcbg_]ldcha_icaibaha_hb`ibaf^]ia_ja`h`^f_\g^\ha_h^]h_^hb`kcbg^\ha_ia`e^\fIHeffehhhhihhfjjkjililkkhgmlnolmmpmollnqppooqopmoronpqqsrooqrqooqpqrrssnqprqqpporpqrqposqprqqqsnpprpsqpnqqpsprrqrooqrqqssprrrqpqrqqppppqpqpoonqnpqpqpqomonrpmmqonpmkmlmkmnjoljijmjjlikkjjjihiifihgegffEfD`h__h^_g^`h_`h_]e[_i^_g^bi`ah_bjaai`bjabj`bi`ai_ag_^f\ag^cjbbi`bi``i_dlcekceldbi`emdekbdkcai`dkcejcekcbh`fmeekcekcdibejcfmddjbejcejcgkefkdimgfkddibhmfgmfgleglegkdhmfhmfhmfgleglehkfhmfimghleimgilfhkfgjdimgglejmhgldgkefibkoihlfjnhimgjmghlfilgjmhilghmfjmhikfjnhhkeknijmggkdlniknikmhhjelmiilfilgknijmhmojkmhjlgmojlniklgjlglnjmoklninokmmimnjikfmminpkmnjmmioplkkgklgmmiikfnpkmnjlmilmimnjjlflmilminnjlkhoolkkfmlhllinnjllhonlmnjnljmminnkmmimmimmillimlinnknmjlkhnnjpololjopknnkomkmmimlionlpnkmkimnjonkkjfpnkpnkonknnknljomjnmjonkmkhmkhljgnlikkgnkimkhpnlnlioljmjhmkikhfljfmkhnljmkimljoljljgnkinljnlimkhkheljgkifnljmjhojikhfmjgmkhmhflifnignjhkhelhflgdnjhjfcpljjfcniglhfifckgdmjgkgelgekfekgejfdjeclgelfdlgejecmgemhfkhemhflgejdblfdkfdkfdkednhgidakebjdbjdbidbjecidbkdbicakeckdbicajdbhb_ha_jcbjbaha_ha`ia`g^]g^]jbaha_ib`ib`g`_ia_g^]jcag][f]\ha`i`_g_^h_^f][gFEdffgegihgjjihjjjlkimlkkmjllljnmpnnlolnonmpqonoomoqpnmpqmpoqqqppnqopqrqqrppopqrrsrqqrprropppqrpqtosqrrmqroqprpqrroqprqqqoptpqoqqsqpnqpqoqpoporqqpompqpppooopmlonolomoponnmkmkkllkkjjkjjihiiifhggffhfdDgD[dY]f[^g]`g^`i_aj`ai_^e\`h_`g^bj`ai_`h_`g^`h^`i__g^bjaai`ah`ah`ah_aj`fleciadjcfkdbi`ciacjbckbdibdkcdkbciagmfejcekcfldcjbdjbdjbhmffldejbekcejcfmehmfgleejcgmehmffkdimgfldglefjdhmegldgkdhmfimgilgingimgjnhimfjmghlfilfknhgkeilgimgjlggkeimgjmhjlhkmhficjmgmpkjnhloiilflmhmpkkniknhimglnijmhhkejlglmikmhlnjlnikmhklhmnjklhnokklhprnmnkkmhlmiikflmhllhmojnpklmiklglmiklgnokkmhlmioolnnjnoknpklmhopljlglmioollmijlgmmjnnjlliookoplpnkklhnokklhmmjmmimminnjmminnkmmjonknnkmmionkmlhlkhlkhllhomkmlhnmjlkhnlimlinmjonkmlillhonkllhmmimjhmlipolllhpnlnmimjhnlimkhkifnkiljgmkhnkinljomjlifkifnkhmjhlifmjhmjgmkhomkmjgkifligmigomjjfdljgnkinkhmigokiljgomkkifkifnjikgekhemigmhfkhemifolilhfjgelgemhfmigjdbmjhmhfmhfligmhflhemhfkgelgekgelfekfdkeclfdkeckecmgflgeledlfelecldckfdjcajdclfdlfdicaha_icajdbkdbhb_jcbjdbjbahbaibakedjcbjcaia`ia_h_^ib`ha_ha_g_]h`_h`_h_^f_]h`_ha_h_^h`^eDDbfdigcfjiihhhklkjjjnkjljkkmllnnmnmoooolnnonoqpronmnpnqpnnorpppqppqqoppqsorrnqpqsrpqrrmqrqrspqsrqrqnopoprpqpqqosrqrpqppqpoqoqqppqqonorponoooppppnpomnoorpoolpnnloooomnllllmmmmmjkihjlliiiliigghfhfghdDfC_h^\eZ^g]_g]ai_\eZah__h^`i_`g^bj`_g^_h^bi`ah_bj``h_ai`bi`biacjaciackbai`ciaciadjbdjccjabh`fldcjadjbcjahmfekcdkbekcdibfkehlfejcfleejcinhfldhmffldekcjpifkdekdejcfjdgleingglehlfhlfglehkejnhjniglekohinhhlefkdfkdfkdimhhlfjnhjlgikfhkfknhhkfilglniimglnjkoiimgilglojknijnhloijnhjmgjlfkniilgnokjlhjlgllhlnilniklhklhlnilmiklglliklhikgjkgnmjmojlnioplmojlnimnjmnjmokmnjmoklnillillhnokmnjookmmjmnjmmjkmhnnjmnjnnjllhooklmimnjmminmjmnjmmjnnknnjooloolmmjlifmlinnjlkgllhoolihepolonlkjfoolpnlmmjmkhnmilkgmjhmlhnmimlilignmjmkhllhpollkgomjnmjnlinliqomlifmkioljmkhlkhmkhkifpmknmimjhmlimkhmjgoljnlimjgoljlifmkhnkiplknigmhfljhmiglifoljmhfnjhmjhkgemjhlhfmigligkhemigoljmigmigmigmigmjhnhfjeckfdkfdkfdmifkfejeckfdjecjfdjecjecmhgmgfidblfdlgdlfdlfekedicbkfdjcakdckecjecjfdhbajdcib`ibakedi`_jcbkfdkbalfdkdbjbaga_ha_h^]i`_h_^jb`ib`ibahb`ib`ha_g_^jcbg_^h`^e^\g_^i_^jbag^]hGFgfdghihggghihilklllkkkjlmnlokmlmmonkpmoqnqnppnnoqpnonprpppqqpppproqqqoorppppoppspstqtqqqpnpspsoprqqqmrrsposqrosrrroprqqqnpqoopsnootmpqnpopponnonnnpqorlqooomkmmommllnklkoioklkojmkiikkhjihhihfeifffcEgD\f[_g^_g]^g]]f\`g_]f\_g^`f^_g^bh`cjaah`bjaai`bi`cjb`h^ah`ai`djbag_bi``h^biabiabi`biacjaflefkdah`bh`ejcci``f^ekddjbejcejcdjbdjbgleekdfldgleflehlfhmfimgfkegkeinggkegjdgledjbfkdgjehlfgleilgfkdjngjnihlffjdglehlfingjmgjmhlnikniilgjlgjmhgjejmhjnhimgjnhkoiknijmhknijmglojilgkoikmhmpklnjnpkmnjmnjkmhjlghkejmgficmojlmikmhimglmijlgmojlmimojikekmhopllmijmgkkgmnjklhlnjmnjqrnnnkllilnjmmiookmnjlmillhnolmnkllimnjklhkkgnnjllgnoklmiijfonknnkllhkkgnokmnjjjgnmjmminlimlilminmjllhmlilkgoolmkhnlionknmjoolnlimlhnlinlionkomkmljmlilkhmkhmkimkhmliomjnljoljnljnmjmkhmkhomklkgmkhkjgnljljhomkpmkliglifligmkilifmjgmkimkhnkhkifljfolimjhlhfmigmigmigkhemifokikgemigjgdlgemjhkgeomkligmjhlhfkfdnjhmigmhfkgeidbmifkgemhfjecjdbjeckfdjdclecjeckfdlhfjecidbmigkfdjcakdblhfnhfjdbidbjcbjedlgekcajcaibakecicajcbjeckdcjb`kech`^ga_icajdbg_]ha`g`^ia_i`^jcbg_^ha`h`^f]\g_^h_^f^]g_]h`^dDDdhegffjhhiikikjjikmkjkmmolnkinmjpnnpmmmnnnonnpnopnooomonqqnnqmoqpppqprorqrnoqoppnqoqpqnsqqpqqrpprrqooqpprroqqrqqrnporrpurqropqqrpqrnqonnpqpqnopqnopjnnonlpnpoqlompmknomolnkmlljkljhijiihgggijhfhfhdcCeB_h^]f\]f\_i^`h_`i_^g]^g\ah_cjbbh``g_ai`bja`h^djbai``h_biabjaai`emebh`ekcekdbjadkbbhadibekcdjcbi`ciaekdflddibdiachahmfgmfchaekdfjcimghmgglefkdhlffkdfkdgmfimgfkdfkcgkeimgimggkegjdhleekcjmhhlfgmfgkdhlfhlfjnhkniimghkeglehlehleimgjnhimgilggkejmhilgknikmhilgimgimghkeimgkniimghkejlgilflojlnjjlgklgmojkmhikfkmimmjmnjklhlnjklglminplllhkmilmiklhlmikmhkmhmojjkgjlgkmillimnjlkhlmjkmhmnjkkgmnjkkgmnjlmilmhjjgnmikkgmlilmipplkjgnnkmmijjflkhmlinojklhmlinnjnnknnkmmillhlmimminnjljgmmjonkomjljgomknlinmkmkimljmkionkpnkmkhllhonkomjljgmlionkonjnmknkhnljmlinkionkomjmkhjgdmlimjgnkinkimjhnkimkhnjhmkhkheomjjgdmkhkifpljoljmkhkgelifmignkhokimjgmjglhfnjhokinkikhekhekfdlheligoihnkimhfmjglhemhfmhgmhgmhfmhgnjhicakfdjcbmhglgdlfekgeicajfdkfdjeckfdjdbmhficalfdjecjdbkcbjdckecibahb`jb`jdbidbledidcidbjdbga_jcbibaib`jcbicbia`jbaha`ib`g`^h`_g_]g_^h`_h`_f^\h`_f^]g_^g^]f^\eEDegggfhigkhihhijkjjjjjkknlmmlnmmonpmknnoonlmoppnqnomoqmpqrononpqqpqqponsrtosrrprrpsqsrppopmsqpqqrqrrpoqqsrroprtqqoqnnuqpqpqpspqqoppqpqooonoonnoqpnnooolpmnonnnllnollmomllnmmljklikkhhliigiihiigffgeedCdB_h^^f]`g^^g]ah_ai_ai_^g]`h_`i_ai_^g]ah`ah`ah_ah_]f\_g]cja_g^ejc`f^ah_bi`bh`cjbfkdcjbciadjbckaciadibdicdkcciaejcag_fldflddjcgmfekcfidekcdjbimgglfgleingfkdimffkcfkdejcfjdgkehnghlfilfhmfilfhlfglegleflejmghlfkoijmhjnhfjdhkfkniknijnijnhjmhlojjnhjmgkninokilgknhloijlgjlgjmgkmhkniikgknikmhlnijlgjkfkmijlgkmilnijkfjlgkmhmokmojlojmnjlmhikgjlgkmhlmilnimojooklmiklhmmillhlmilmipqmklhnploollmimnjlmilminnkkkgmmillhmmjklgnnjlminmjlmionklkhlmimlhmnjjjfnmjlkgookonkmmimmjnljnmjnmjnmjmlinlipolmlhlkhllhpollkgnljmlinmjnmjmlhlkglkhmkgkjglkhmkhomjljhnlillhkiglkhnkimlhmjhkieoljmigmkhljgmkhonkmkiljgljgljgmjhmjhlignjinkiljgnkimjhlhfoljmjhmigljgnjhkgemifliflhflhglignjhlhflhfkgelhfkfemigmigkgemigkfdidbhb_lgehcakecnhgjgdjgelgfkecieclgeicakedjfdjecjdblfdlfdjedidckfcg`_hb`ib`lfejdbhbakcakdbicag`^icaia`hb`ib`jbajcaha_g`_g_^lccja`h`^g_]h``i`_g`_f^\h_^f^\e[Zf^\f\[iKJedefffhhighkijihijjkjmjnjljollmnjokmolnppjonmpnoloooonopslnpnnomqqsoppppprrosqoqpnnsrppqroroqpnrompqpstppprsoqpqqnprppqmrpqrqqppmnrooqpnqnpononmoplolonlpromloponmoonoljmmmljkkkknkjijkikhjhgggggfdeBdA\eZ^f]_g]`h__f]ai_^g\ai`ah``g^ai_`h_`g^ag`ah_cib_h]ah_ah`ai`ag_biaciacibbiacjabi`ai`djcdjcfleelddjbcjaekddjbdibfkdekcdkbdibdibciafleejcfkeglegldejcekcflehleglehmfekdjnhgkefkdfkdgkeimfimgimgjmheibgjdimghmfglfjnhhlfjmhjlhimggjeimgimhkmhknhjmhknijlgmpkjmhhkflpjlnjjmgikflniilgilfikfmojilgmojjlgjlgjkfmnkklhjmhmnjkmhnojlmhnokjlglmijlglmiknijlgjlgmpklmilnilmiklhnnkllimmiklhllhmokmmjkmhmmimmiklhnnkopllnillimmjmnjlmimnjnmjllhpolnmjoolmmillhklgppmmlilkhnmjkkhnoknmjnmjlkhpolnnkonlnmjlkhnmjlkhmmimlimliljhmlhmjhllhmlillhlkhljglkgmlinmjnkinmjnlionkmkgomkkiennkolinlioljmkhnkimkhljgnkhmjgnkinljoljpljmjgkheljgligmkinjhmjgoljiebpmkmkijfdkhejfdkhfkfdlhfmigmhgmiglgejfdlgemifkfdkgdnigmjhlhfjeckgejeckgekfdjfclfdlgeiebkfejdbjdbmhflgekechb`kedkecib`jecjecidbidbjcblecia`jbaidaib`ib`ia`jcbhb`ga_h`_g`^jcaibah`^g`^ga_h`^ha_g_]g`_jcbha_f]\g`^h`^h`_g_]g^]f]\dDDdiefigigjihikkkjikkmjjmmjkknmknlmoommlnkonqopnpnopnoooqonmomqonpooopqpprqrqrrppqppsrpssosqpqoqsqrpsrptpnsqqqqrqoqqnqpmrpoosprnppppornpoqpopnoppqpplmnqmpmmlnkommnlokklmnklkollmljkkihigijiiiigfhheccAd@_g]YcX]f\]f\^g]^f]^f\_g^`g_ai`bja]f\_g^cjb_g]^f\`h_ai`ag_ckbah`cjbbh`cjbcjaai_ah`cjacibdjbbh`cjafkdciabiadiaekdejcekdciafldbi`fkdjoidiaekceibgleekcejcgkejnieldgkegmffjchmfhlfgleficfidgjeinghmfhmgjmhkniilglpjgkdilfilfgjdfhcimghkekniilfgkelnijnhikfkmhknhjlgjlgilfklhilgikfikfkmilmilmijlgjlgjlgklhlmioolilfloijkflmhlnijlgmojmnjjlhllijmhjlhlnjmnjmnkklhmnklmjllinnjklhlmikmhlmimnjlmilnjlmjmlimmjnnjookklglmhpqmkkgnnkllhlmihjejkgnnjljgmmjkkhmmimmjmlillhnnjomjlkhnnknokkkflkhmlhpolnlionkmlionkkjgonkljgmlilkgmlinmklkhkifmkhpnkmkipmknkinlimkinlilkglkhlkhlkhnlinmjmkhnljmigifcljgkgemjgkheljglignkimjhmjhligokinjhljgoljjgeligkhemjhlifmigjfdjfdjdblifnjhkgdmjhlhflgekgdlhflhenjhlgelgejfemhfkfdlfdiecmigjfdlfdkgelgekgelfdjdbkfdjedjdbhcalgejdcidblgelhficbkdckfdibakdbicajcbhbajcbjdbhbaga`ha`ga_ia_ib`hb`ib`hb`ib`ia_ibakedgb`h_^h`_i`_i`_ibag`_h`_g_^f^]h`_dEDeffcgfhgjiijjijkmjhjmjlmkkilkkmkkmollknnnolnnonpplnpopnpnqoplpupmqqqsopsrppqrnosqppqqqosqqrqrnqqqqrqqooqosmqropmqqrqqqpooqqqopmoqpoooonnnnmnnqqlpmomqomonolpplnlonmmmljkmmkjnkkmikkjkihkhiihfhghbeedEcD^g]]g\`g^_g^\e[`h_]e[`g_ah_cjb_f]`i_ah_cjbbjaciabja_f]ai`_g]cjbdjbdjbciaag_elcciacjbbiadibekccibciafkdciafkdfldbg_bjaejcbh`flehmgfkddibchadibciaglegkdchahlfimgfkdejchlfgkdfkdhlgfjdejchkfhlfhlegkegkefjdgkehkeilgimgingfjdhjedibjnhknihkejmgknihjekmhjmhilfjlgilgilfikfilfkmhklhjlgjmhjmhikelnjjmhjlhjmhikfkmiklhkmhkmiklhmokklhjmglmiklhikfmnjjlgllhkmhnnjhkejkgllikmhnojmnjlmjlminokjkgllimnkmlillhooklmioolmminokllhoolppmmmjmnkklgmmimmilmippmmnjjjfnokkkgnnkmmilmilliklhlkhmkhonllkhkkgmkilliljgmkhljgmlinmjpnlljgllijifljgkjfljhnmjomknmjmjhnliomkljgkhemkhlkhlifnliomkljglkhpmkmjhligligomkkhelkhmjhnjhmjgoljjgdnljliglhfliflhfligjfdlhfkhflhfnkilhfmigkgfnkikgelhfkhelhflhflhfkfdlhfkhfoiglgelhfkeckfdjebkfdjcbkgekgeidbicaieckgemgfkfdlfejcbkecicaicahb`jcbjcahcajcbjdcjdbkdcjdbhbajcaha_icajcbg`^g`^h`_ia_ia`ibaf_^ibaga_kcbg`^g^]h`_h`_f^]g`_g^]f]\f]\f]\g_^dDCgeeefgjijfiihiijhikjlllkmkjknlmoolklomlokmnnomlmpmppmmokqponpopposorppooonnqoqorroqnorppoppmrspsoomprpqnpoorqpopnpqpnqrrqqqsrponrponroonplnpnoqpmpmnnnmpplpmomnlmknlmlnljmkmkkkkhmjkigglihjggfhgfegdDfC_g^_f]]f\_h^[dY_g]`h^bja_h^_g]aj`ai`ah_`g^_f]cjaah`bi`ciaag_bjabg`^e[biabh`fledjbbi`djcbh`dibciacjadibeicejcciadjbejccjbfledjbfkdekdglefkdgkehlffkcfkegkefkdhlffkdhmfhmfekcglehmffleimgejcfkdgmfjoilojgkeimgfjdfjdimgkmhhjejlgjmhhkfknigkekmhilglojjlhilgfichkfjngikfkoiilgkmhknhknijnhjlgjlgjlgklhkmhgjdjlgilgklgkmhlnikmhjlgklhmnjlnjjkgjlgmnjlnjmokmnjmnklmjkmhjkgjkgmnjkmhlmiooljlgklhjkgkmhlmikkgmnilninoklmhmmjiidkkgmlimmimnjlmhppmmmilkhlkglmiooknmjmmjllikkhlmimlimkhkifllikkglkhljgnnkmmjnmjmkimlimkhllhljgkjfnkhnljljgkiflkhlkhnljmlimkhljgmjhljgmkhmjhmjgnkijiemjhlifkifmjhkifljgmjhlhfkifkigmkhlhfkhemiholjplknkilhfmjgkgeokimhgkifjgdnjhmigmjgmjgmigkfdlhflgekgekhelgekhekgelhfkgekgdiecjdbjeckhflgeidblfelgekgeidbieckgekfdkecjeckdcjdbkecjcbkfdjcaibajdbjecia_icbkecib`idbicbkdbkdcicaib`kedha_ib`ha_ha`jdbga_ia`ibah_]ha`f^\h`_g`^h_^g^]f_^g^]f^]f]\d\ZeEDeeeegfiighjjiifihilliikihmljmjmlnollmlmompomlnmommllpmonrqpoqmnopnoooproronmpoooqqlorsrqsppopppnnmtpoqrnqpqroprqpoqosrqqmoqnmrnpprqopooononoqnmmpornoonpmmnponoklkomkllmllljmjkklljjkjhhhkghjgggefccBfA^g]_f]_g^\e[_g^`h_`g__f]ah`_g^^f\_f]ag_ckb`g_cjbbi`dib`h_bh``h_cibbi`ciaah`bh`elcchaciach`cibekdekcejdelcdibekddjbglfekdekcejcglfch`ejcciagkedibejcfkdfjchmgeichkfgkegkefjdgkehlfgkehkfhkegjdgkefkdhlffkdimgimgilfkniilfilgjmgjmhhlfjniklgilghleikfilgilgkniilfgjdhlfjlhmokkmhkmhhjeknilmijlgilgjmhmnjlnikmhikfoolklhlnilmiklhmnjlmikmhjlflniikfmokjkfoollmhjjfmnjmnillhmmilmiopmmmimnjmmjmmiklhllhlniookmnjnnknnkoommmjnnklkgmlikkgjjfmmjllhkkgllimlikjgkkgllhmmilkhoolnnkmljkifpolllhlkhnmjnmkmkilkglkgmlhljhmlipnlnlimlhlkhmlhmlimlinmjmkhmlilkhkigmkhnlimjhmjhlkhlkgmjhmjhljgnjhljglhenkiljhnkjkifnkikhfkifnjhnljmigkhekhelgfkhekhfnjhkhfmjglhfjgdlhfkhenkijgeljhkedkgelhekgdkfckfdkgenjhjfdmhfmigkgekedjeclgelgejeckgejeclfdkfdicbmigkedlgfjedjecicaidbkecicbkeckecicbjcbib`jdcga_ga_icahb`jedib`ib`g`_ha_ib`g`^g`_jcbh`^ha_h`_g`^h`_i`_h`_ia`f_]g_^g_^ha_g_^e\[g`_dFFcddeefgfifkjhhjhhkjgkkjllpmkjjjklnlppmnnllnpmnoqmpnppoqmoknmopnoppmpqnopqqpsqoqmqpoopqqoqpsoppqpqoqpsonoqqqpnqppqroqqosmptorrqnqpppnnpqqqnppmqopqormmomnrnponnknmnnliljnmllmjnjmhiiihjigiifhhegifgdcCfB^f\^f\_g^]f[ah`_f]_g^^f]]f\ah``g^_g^ai`^f]ah`bh_`h^biabiacjbdjcah_biabiaciabi`bjaah``f^cjbejdekddkcdkcekccjaejddjceicfkefkdejcejcekdhmffleekcdhachaejcfkdekcgkegkegledjbfjdfjdgjdhlfglehlfhlfgkeejchlfilghkeilggjdhkfgkehkegjefkdilgimgjmhkniilfgkeilfjmgikfhkfhkegjdkmhkmijlgikfhkejmhjlhnpmjlhklhmoklniklhilghkekmhkmimnjlnihjeklhklhkmhklhkkgllhklhjkgmmimokkmhlminplmnjmmijkgmnjklhkkglmimnjjkglninnkmmjlkgkkgjiennklkhnmjmnjllhllhnmjlkhmminmjjjfnmjjjfkkgonkmlimmjlkhlkilkhnkikjgljglkhnnjnlinmjpnklkgnljkjgjiflkhljglkhlkhmlimkhljglkhnlilkhmkimkhlkhnkinlinljnliomkmkhlkhkifmjgnjhokjmkhnljmkiligliflhflifljgmjhliglifmjgkjgmjhmiglifkfenjhlhfnkilifmigmigjgekhelhglhekhfkhejfdhdblhgidajgehdblhejeckfdgcajecifckgekfeidbkedjecidbjecjcbiecjdckecjdbhcahcalfejdbhb`icbib`jdckfdjcbhb_jcbia`icaha_g_]h`_jecicah`^ibaibajbag_^jbai`_h_^g_^g_^f^]f^]g_^f_]dZXf^\g^]dBBdgdfhdfihehijjmijiihlkjjkllkjjmlllmmonlkpnmkmkpmommmpnomnoooonqpoqmoonomqrqpprpoorppqpqrrpqqtrpprtronrrpnooqrqrqoooonprmoqnpooqopppopnopnpnnppmonnommpoplplonkmmljknmlimlgklijligjjhkjiihghggifdfedaCeC^f\]e\\e[ah_^g]_g]`i_ag_bh``g^bh`_h^`g^ah_`h^`g__g^`g^ah_ah_ah_`g^bhacjabh`gle`h_cjbbha`f^dibekdekcdkcdjbfledjceicdkcgkedibdicdibdibhkedibhlgfkeeicdicimheibfkdeibfjdgkeimgfjcfjdkmijnhjmhhkffjcimgimgjmhhkffjdhlfimggkehlfhkfilfjnihkfilgknhjmhilfimgkmhilfgjekniilfjmgmpklnjhkfmnjnojjlglniikejmhjlgikgmokjlghjeilghjemojjlgikglninnkklhlnikmilmijlgklhlniklhlmikmiklglmilmikkgklglmjlmiklhnnkjjfkkgmmjlniihennkkkgmmimlimmjmmjmmikkglmjnnknmjkjgkjgmlimmipolmnjmlinnklkhkjgnmklkhlmimlimlimmikifmlimlionklkhjifnljllhkiflkikhfljgnkiomjljgmlimkhnliljglignlikignmjljholjljgnkinkiliglhfnkikjgnjhljgokimkholjkgdmiglifokjmjhmjhlignjhkhemihligkgejhfjgdkgemigkfdmjhlfekhfkhelhgjediecmhfkgejeckfdkgdkeckgekecjgeidbkgelgejfdmighbaidbiecjcbmhfkfdicajecledkfdkeckfdia_hb`icbib`hbajcbhcakecjcbh`_jbag_]ib`jbaib`ibahb`g_^ia`h`_f^]g_^g_^f_^g`^f^]h`_ib`g]\g^]g]\g^\e\ZeFEfdfgeeiiifehgijiijjkkjikmimjjmmmlnllmlmnnllnnroonmmplmonppnqprpnpoooonuplmqpooprpqqpopprrpqpopnroqqqppprqsrpprsrooqnoqmnopqqooompmnrppmpooonnpnpnnnqmmnjmmjnkmlnlmokmljlmlljljmjkjkkijihijigghggeddcDeC^g][dZ[eY^g]_f]ai`_f^^e\]f\`g^ag_cjbah`_h^ag`_h^bh``h_ai`cja`f^ah``g_bi``g^ah`ciabh`dkcciafleekcfkdcjbbi`eldfkegkefkddjbejcfkeciaejcejdgledibfkeejcejdgkfejchmffkdfidekdgkdhlfknihkegkefjdgkefidimghkfhlfhngfjdhkehkehkfimgkniknifkdhkfhkeilfkniknikmihmfjmhhkfhkfjmhknihkfkmilnjlnikmhilgkmiklhkmhgjdjmhjlhlojknikmijlgkmgkmhmoklnjknhjlgllinoklnikmilmimniklhikfmnjlmiklhllhjkglmijkgllhllhlkhklhlkhlkhopljjfmnjmnkklhmninmjklglmilkijkfnmjmkhmmimlimminmjnnjljgmmjonklkhjjfkjgnmjmlhmlhnljnlikkgkignmjmmjmlinljllhmlimkhmlinmjomkljhmkikifmljlkhnlinljomkihdnmjnljlifmkhmjhljgmigmkhlkhkifkhfkifmkhmjhljgkjgnlimkilifligkifkifkhelignigmjhlhfifdlgenjhkgekfdkgfkhfjecligkgelhgligkfdkedjecmhghdblhgiecjfdhcajedjfdlhflhfkeclgejfdkfdidbjfdkgejdbiecjdcicbkfehb`jdbjeckdcidbmgfjcakedkdcidbjcbha_jdbia_ha_jcbha`g`_h`_g`^i`_h`_ib`g`^f_]g`^g`_ia`g`^e][f^\d[Ze^\g_^e[[cCAedhggggifiehjhkhilkkllkkmlkmmmommmllmjppmmmmknnqonlnponooqonpppsoqopomppmnqrppqmrnpqoorppqrnooqprrqrlrppoqpqqopnnpqrqpopoqqppopoqnqopopmqomooqonoommoommpmmnomnmjlmnnlnnllljjkkijjikkjiihiiifhheddfdFeE_f]`h^^f]_g]^f\bia]e\ag_]g\ag_`h_cia_f]cja`g^ah`^f\`g_ag_ah`ah`_g^ciaciabh`bia_f]bg`djcdjbdjbcjbdjbdkcdjbcibcibdicgmfdjbejcdiaciaejcfkdchadibdhbhkegkeekcglfeibhkfgkehmfgkegjegkfekcfkdimghkfhlfgkehlfhlfjmhimhhlghlejlgjlghkfingjmhilgjmhgjdgjejmhgjdhkfikfjkgkminplhjdhkflnijlgfidjlhlniikfknjikfmojklgjlgjlhlniklhlmiklhhiekmilnijlgjkgklhjkglmilmiijflliikgklhkkhlnjlmjkjfkmhlmiklhkkhjkglmilmhlmikkglmjlmhkkgllhkmhmnjklhlmjpqmnmjmmimljmlinmjllimljllhmmilkhllilljkkgllhllinnknmjlkhmkhmlilkhnmjnmjnmjjjfkkgllimkhkifllhonlljhmkinmjmkhiienljljhljhjheljgkheomkpmkljgmkhljgkjgligjgelifmkiligkhfligljglifokilifljgkgemjhnkhkhfkhfkhemigmigkheiecjgdkgemjhmigjgdlhekfekgekhgjgemhfmigkfdhebheclhgmigjecjfdjeclgejecjfdhc`kfckfdjfdjdbmhfjdbiecha_kedjdcidbha`kedhcakechdajdbjcbga_ga_gb`idbjdcjdbhb`icaib`icbga_g`_ibag`_f^\i`_ib`g`^f_^ia`f]\d[Yf^^g`^f^\f^\g_^f\[fEDddfdffighfeiiiihjhkkjmnmmnjlmmlnlnmmlmonnmlllonnnonqnnnnolpmmolppprnmnprqrqpqnqsqponpqopmospnrsqpqqoonqopppqqoooqpppoonoonroqrppopooonnnootoplqlmoopnmpnonnnnpnmnolljlmikmjjljjljjifjklihggheggffefeAe@_f^[dZ^f]_h^`h__g^]e[`g^`g^ah`ciaah`ah_`g^ah_`g_bi`ai__f^biaag_`f^ciaaf_djbcjbbhadibbia^e\dibdibdkcejcdibdibekdejcdibfkddibciafkdfjdejcejceicekdejdeichlfdjbfjdekddibfkdglfjmhfjdimgfjddicglfhlfilfkoigkehkfilghkfgjdjlgilfjmgilggkehkfgjdgjefjdhlfhkfeicilfilgilgjmgjmhikfjlgklhjlgkmijlgilgkmihlfikfikfikflnijlgilgkmhhkfijfkmimnjikfklhikfjkflniklhklhjmhikfoplkkglnjklhklilliklgklhnoklmiklhlmimmjlmiklhklhllijkfllimmjllhllhkkhlkhjjgmmjonkllhkkhllimlhlkhmkhlkhomjmmillinmjkjflkhnljmlijhemmjjjgmjhlkiljgnmjkjfpnkjhfnnkljgomkmlinkinljkifmkhljgkifnkiqomljgljgnlinljligmkimkikhepmklifjhfkifnkiliflkhnkikhflhfkgejfdjgdmjhlifliglhfkhflhfliflhfkhekgekhflhfkgekgekfejgdkigiebmigkfdlgejfdjfdkfdjfdidbkgekfdjfdidbnjhkedhdahdbjeckedkfdkfeidcjdbkedkfdkecha_gb`ib`jecicajfcicalfdjdbhbaia`hb`ga`ha`icbjcahb`g`^f^]h`_f_]g_^h`_g_^e]\g`_g`_g`^c\Zg`_f]\g_]h`_g_^g_]dEDddgefgfjiihhhihijmmikhmkjnlmkkljnnmnnljpnpqonnqpmopooqmmplpoonoooonoponpqpospmqopnqrptrrpnrqqpppponroqorooorppoqnppoppqprqpqppnqnpqpprrqnqomnolmokmlpppnlonlknollklklklmmlljkoikjikjkgkhighjheegebdeBdA\e[^f]_g^^f\]e\_h^_g^`h_`h_`g^bia]e\ah`ah`ah`_g^bia`h_ai`bh``g_ah_bha_f]ekcbg`djbfleejcejcbhadicah_ekcdjbah`ciagkehmgcjbfjdglebh`dibbhadjbejchlfgkefkdilghlffjddibhlfimgfjdhkfgkegkegkehlfgkegkehlffidgjdhkfeibhkeglffidhlgilgjlhimgjmhjmhikgilgilgilgjlghkegieikfjlglmijlgjmhilgjlgklhfickmhikfhkejmhkmiklhkkhlnjjkgikfklhkmhikgklhjkgklgjlgjlglmilkhklhklhjkgklhjmhllikkhmnkjkglmimmjkjgklhmmiklikkhijfkmimmjkkhllhllimmjkkgjjgkkgmlikjgmmjmmjhhdlkhllikkhkkhmmillhlkhlkhllhkjfiiflkhmmjjifonlmljnmjmlilkhlkhkjgljgmliifcnmjkigkjgnmkmkhmkhmlimkhmkimlimliigemkhmljnmjmjhljgmkimkikifljhnkimjhnmjnkikhfjgeoljlignlinljmigkigkhenkijfdljgnjilihlhfkhfligjgejgelhgmigifdjgemhfjfdjfdjfdkhfkfdlgekfejfdiecmigjeclhfjfdlgekgemhgjedjcbjdckeclgejdcidbjeciecmgfjecidbicbkedjedic`kdcjecgb`f_]ga`ha_hb`ia`icag`^hb`g`_ha_kdbha_f_^e^\hb`f_^f^\g^]d\Zg_^g`_f^\g]\f^]g^]d\Ze\[cCBeeaehgfefgiigijiiihlmjikjkjmkmljnkknolmnlnmnmokpmlommonloolooqnqpmlsmqlooponnoqspppmpoqormppnroopqpppqqoorrroqqpprrpqoqqpoqonnoronmmmrpoooonnnmnmmmoomlkonmnokmmpkmmnkmkjllkjjjiijjiihhhhhhghfeedgdgDeC]f\^g]]e[^e\_g^_g^`g__g^]e\ah`bjabi``f^ah``g^`h__g]ai`ah_`g_cibbhaciadibciadjbbh`chacjbcibdibaf_ciabh`dibdkccjbbg`dicfkdfkdchaimgbg`gleeicfkdgkefkdgkefjeflefldimggkefjdgkehlfhlggjegkeejcgjefjdfjdhlfimhhlefidjlhilfjlggkeilfhlfhkfhkeimggkeimhhlfknikligidjmghjfilgjmhlmihjejnhilgknikmhkmhikfjkhjlhjlghkfjlggkeikgkmhlmikmiikgklimnjlmjlmhlmimoklmijlgkkgjkgklhmmjnnklmilmijkgklgjjfkkgklhjkgmnimliklhklhkkhnnkkjgllijkglmikmikkhjkgkkglmhllilmimnjllinnkmmiiiemmjmljlljllimlikjgkjgmnjmkikkhmkhlkhjifkjgkifjifkjhmkhljhnlimkhmlimjhmkikifljhlkhnmjkjgihejhemkhnkjmkhkigiiejhfkhfnljljglifnljnljligjhekhfkifljgkigmjhjfdnkiligkhekhfligjgejfdmiglhfjfcnjikhfkhelhflhfligifcjfdkgekgekgejgelhfjgekgeidbjfdkgeiecjfdkgfkedlgehb`jgegcakfdjedkfdkfejecjeckfejcbhcaicaiebkfejdbhb`ga`idbkedh`^ib`f`^ha`ibahb`kfdha_g_^g`^h_^ha_g_^g_]f_]g`^g_]d][g`^f^]g`^g_]g^]f_]g_^e][eDDegddfggfhgihhiijjkiijkillkkkjlnmlnnnkmlnllnmnmlononnnnmqnponqpprpoppqqopppsprrnprpoponmppppromqpsoqmsqnqooqnqopqnpqqrqmonqopnonomosnmpnqomonmnomlnpnqnolnqmkmonnllklmikllkmjkjjjkkkikjfgekgffffddgecCeB[dZ[eZZeY^e\_g]_g]_g]bia\d[_g]bh``g__f^`g__g]ah`ah`bia`f^bh`ah`bh`dib_f^ai`^e\bhabi`bg`cibah_djcdicejcflebh`cjbciaekcbjadjcejcdhagkddhbdibhkfgkefjdhlfdibimhfkdhkfejcglfgkefjdhlfglfgjdfkddibfjdilgilgjlgeicfjdgjdficjlhfjdjniilghkeilfjmhjlggjdjlhhjfjlghkfhlfhlfhkeikghjejmhjlhklhjmgjmgfhcmokkmhjmhkmhjmgilfklhijfjlhlnjjlgjkgjlgjkgmoklmijkgklhikgmninokjlgikgjlgjlgllhjkgnnkijflmijjfikfklhlmilmillilmimlimmjlkhkkhjjflkhlmillhkkgkkhkkgklhmnjmmimlillillinnjlkhlkhklhmliihenmjjifmlillikifllillhkkhkjgkjgkkhmlillijjgmmjnljljglkhlkhnmjligmjhligkheljgmlilkhkifmlilkhjhekhekjgkjgnkimjgmkhkhejheligjhekigkheliglifjgfjhemjgjgelhfligmjhkhfkhekgejgelgejfdlhflhfjhflhfkgejfdkhfkhfjgekfdjedkhfjgekfdkgelhfmjhkgekfeidbjdbjfdjfdjedhdbibaiechdbjdchcajedieblfehdbidbfa_jcbidcibag`_hbahb`ibakdcha`ia`ha`g_^g`^ha`hb`ha`f`^hb`ia`ga_ha_g_]g_^f]\h`_e_]d[Zf^]g^]d[Zf]\cBAdcddgfbfghifhfjhjljgjjklmmjnjgmkklmnlkkopnonmonmpmpnnqmoqnooloomqpoposoonoppopqnqpqsporrqpnpnpmqoopoqqoopmpoooqponpppqnqoplnqpnnlnopnnoopqmmomoqqonnmpmmmrmnmopmnmlinkmkllkkklljjiilkhhigggfgfgfdggbCdB]d[^f]\dZ`g_ai`\e[\e[`h_`g_`g_ag_]f[ah`_g^]e[ah`bia_f]ah_bhaah_dib_f]ag`ah`chacibbhaag_ejcbh`ciabhadjbfkdeicbhadjcbi`chafjdejcchafkedibeibdjcgkegledibfjcciahkegkeflehlfgkegkegkeejchjeficdhbhkfimggkegkehkfhkfeibhlfgkegkehmfilgilghjehkfilgjlhjlhijfikfkmigjeilhjmhjmhkniilghjefidjlgfidmokikgilgkmiilgkkhijfjlgkmhnokijflmjjlgllhjkgjkgkliklhlmikmihjdlnjjkghiejkgikfnnkmmillhmnjklhllihjfklhlminnkkmhlmijkfijfmmjjjflkhnmjjkgmnjjifnnkllhllillimlilkhklhklhlmjlkhnnkjjfihejifkjglkhijejhelkhnnkmmjkjglkhlkhnmjmmimlikigkignmjmkhligjjgjjgligkifnkimlimkiligmkinjhligmjhljhmkhlkhmkhkigmkhmjhligifdmjhkigkigigdjgdligligkigljglhflhemjgkifjhfhdbkhfnjhkiglgejgelgflhgkgejfdkhfgdbifdlhfjdckgekfdkgeifckedkfejecidclfekfdlgeidcjecjecjdckfdhbajechcbkgeicaidblgeiecha_ga_idbg`^gb`ga_ha`hbahcajdcidbhbaha`hbaha_g`_f`^e^]f`^h`_g_^e][g_]f_^g`_f^\d[Zf]\f^]c[Yf^]e\[cZXdFDcedgefgiffifijighkhijljmklknllmlklomllomlmmpmonnnmnmmlmnoonqmnpnonommsqqponqqmpqpoonrpnopopppnpsoppqplroorrrprpmnrronorqmnrpopnnooqoqrrmnoommmonpnnnnmmmmnknmklkllhmjllkjihjjfijjiiiiiiggegfhdhddfddDdB]d[_g]_f^\fZ_f]ag`^f\_h^^f^_g^`g_ag`ag__f]]f\ah_bha_g^biaah`djcbh`ciaag_cjaekdah_ag`bhadibejcchafkebh`bg_chadicejdfkdekddjbchafjefjdejcglffjdfjdfkefkdgkegkeeicgjefjdimgilggkfgkeilhgkehlfgkefidfjdfidhkfimhilghlfikffidhkfjlghkfhkfhlfjlgilfikggidfjdjlghjfgjegjefidknjjkgilggidlojhjfklhjkgikgjlhlmjilfkmihkfjlgklhklhkmikminoljlhkmijlglmhklhjkgmmjjkgjjglmiklhjlhijfklgjlgllilmilminmjklhmnjikflnjkkhoolnnjiifmlimlimmikkhkjgkkhlmillilkhklhllihhdnnkmkihhdonkjkgllijifllijjfmlikjgmliljgjjflkhmlinmjljglkhljhljhljhnlikjgjjgmlinljmlijgejhelkhnljlkhkifomkmkiljgljgligljgkigmkhlkhnmjkigligmjgljhjhelifljgifcifdkhfifdligigehfcligliglhfligjhfkgeliglhfkhfkifidbkgekgekgekgekfdnihjfdlgelgejecidbkgeidbidblgekeclgeiedhcaicblgekfdjfdkfdhcakfdjecjdcidbhcahcaidbjecidbjdbjecidcibahcajdcf`^hb`kdchbaf`^ibag`_h`_h`_g`^e_]e^\e^]f^\f^]f^]e]\f_^e\Zd]\e][f^]e\[g^]dZXdDCcdecegffehgijjghjknjjjkjkmkhmjlmlmomonmnmknmpnnmnpnonmsplnmnonopoooonnoqnpooppqopoqonnotoqoprpqoqnrppprponqooqsqrrnmpppopomppopooomnolmqnnoollqnponkqomllkknmlookmmlljmkllkjjkiihijgjhihgghgfhgefeehEeD]d\^g]]f]\e[_g^]e\`g_]d[_f]^f]ag_bha_f]cib`g^bh`ag_bia`g__g]ag__f^_g^`g_cjbcibdibciaejcdicdjbaf_ciabg_ciaejccibdibejcdibchafkegjefjddibeiccgabh`fjcdhbfkdgkeeicgkehkedibhkfgkfilheicgkegkegjejlhgkehkeikfdhbhlfehbfhcjlghjeilgfjdjmhjlgilfgkejnhhlfilfhkejlgilgikfilgkniknilojjlgkmihkfknijlghkfjlgikfikfmokklhijfmnjjlglmilliijfhjfkkgijfjkgnnkkmijkghiemnjllhlmihjenoknnklmilmjlliklhlmiklhjjgkkhllilnjjlgjjfiiellhlkhkkhjkgllhmmikjgkjfkkhihdlkikjgkkgkjgmljllillijifllilkhljgmkhonklkhkjgljgkkhmkijifmlilkhlkhomkkjgjifkjgjifkkhkifkjglighgdkifljhligkifkifiiejhekifnkiifdkifljhmjgkhemkikjfkifnkinkijiflhfkhfkhfligifcjheljgmhgkgekgejfdmhgligkgeligifdiecjfdkhfjeckgehdbmihjecjfejfdjfdligkhfkgeiecieciecmigkfeifckfdjgekfeicakechb`hbajdchdblgeicbhbajecjfdkfejecga_ibaidbidbg`_jdchbagcaha`jecf_^f`^hbaha`ib`f_^ha_g`^g`^f`^g`_g`_e^]e]\f`^f_^f^]e]\d[Zg^^e][e\[dFEdebcfggfdghhhgihiihjikjiilkkkjkjkkmpnmkmmmkkmnmlnloonmpnmqnsnnnpomoqopponmppqqoqoopoorrnroporqpqppnpooppnoppqpopopqosnqnprqoonqnppmlonmronnmnnonnkkoomplommmokmmmlklkkmikjikkkljiijgggjigigehgedcfecAa@\d[_g^_f^\dZ]e\]e[^f]_g^_g^_f]`h^_f]`h_]e\_g]_e]ah`bi``g^`f_bh`ag`cibchadjcciaciaciaciadjbdjcekdejcbhafjddibekcejdejcdibdjbdicglffjdfkedibdibeicgkegkehlfgkegkedibfidgjehlfhlfhlfejdgkefjdilfeichlfhkfilfimgilgilggkeilghkfilfhkehjfhkfhjegkejmhhjfjmgjmhikfjmhilfkmihjejlhklhgjeklhjlggidgjdjlhknjilglnjklijlgllijkhjlgkmiikfklhjlhilgikgkkhkmilmigiemmilmimnjkkgklhklhikgjlgklhjkgmnjjjfkkhjlglliklhlmjkkgkjfllhklhkkhkkgkkhklgllillilmimnjmlimmimlillhjjfjjgkjflkhkkhnokllinmjljgljgjiflkhljhjjgllilkhmlilkhljgkjglkhkjgljhjgemjhllilkhjiejhepomkigjifkigmkiljgkhfmkimjhljgljgmkhjhekignljjhfljgmkiliglhfligmiglifkifkgekifigdmjggdamigkgekhfkgekhfjhejgelhflhglifjgehecligkhfkgdjfdkfenjhjeckgeiecjgeiecidbjeckfdkgejedjedhb`khfiebkfdkfejdbhcahcahcajdbjedhcakfdibajedidbhdbkecga_gb`hcaidbicaicbga`ga_ibaha_ga_ia`hcaha_g_^f^]ha_g`_g`_g`_f^]e\\g^]e[Zf_^d][d\[cZXeFEcecfefdgeggghhhihhfhjjllijkmjkllmkklmjkmololllokpnnnlonnpmmmpponopppononoqooolpoplnpqpqqppqoqqoqpnmopqqnqslnqpkpqqpoqopnpnopqnnnoppnpooqolmlmplpnlpnknopmnnnkmnminkkmjkkkjkjkjjkhigjhjihjigghhfghdceDeCZcX]f\]e[ah_\e[_g^`g_`e^_g^_g^`g_^e\]d\\d[^f]_g^`f^djccibaf`chbcha`g^cia_e]cjb`f_bh`dibdibciacibdibch`fjeekcdibbh`ejdfkedicdibdhbdibfjcfjddjbficfjdgjfekcimghlfdibfkdfidgjdekcfjdeichkffjdeibhlfdhbfjdhlfgjeilfilgjnhfjegkeikggkehkfilgjmhklhhkfikfgjejlhikgjkggidikfgjdilghjekmijkgficikghjejlhhjehkfjlhklhjkghieijfijfikgjkggidklhjlhjmhlmilliklhikfjmgklhmmjkliklglnjiieklhmmjjkgklhkmhmmjkmillhmmilkhgidmmjmmjmlillillikkhlmikkhkjgllimmjkjhonllliklhjifkkglkhjjfkkgkkhkjhkkglkhmmjlkhkjgkjgkjgkigonkkjgjifkiglkhjhflkhkjhljhkjgkifmkikjgjhekjglkhmkikifkjfkifljgnjhlkhljhigdmigkigkhemlimkhkifnljligljhjhenkimkhligljhkifigclifnjhifdligligjgekhfkifkigkhekhfgdbkgfmjhnjhjfdjeckgekgeieclhfmhfkfejedjgekgeidbjfdifdiedlgegb`jfdhecieckgeicbkgejeckfdidbicbgcajfdidcicaibajdbhcahbaga`g`_jdcf`^hb`ga`icbf`_g`^e_]ha`hb`ga_e_]ga`ha_f_^e]\g^]d\Zf]\g_^f^]g`^g`^g^]dZYcDCcbeffffhhfigghjjijhgkkikljjmlmmlljkkonmjmklnnpmmmlmnmloomkononnnnonnnoopnpppopmppnoppoppspnooqpqqrqoqopopnorpplpopopqnopqlqpsopqopmnonqmnnmnkoonomnolnmlmmnmjklmljkllkjjkkjjjhjjkhjijhhighghhcedededDcC\dZZbX]f[^f]_g^_g]^f]\e[ah`]e\_g^]e[^f]_f^ah`^e]ai``f^_e]bgaah`biaah`bh`af_dibejcchabh``e^biaehbejcejccibcibdjcchaejcfjddjbdibfjdfjedhbdicfkdfjdgkefjdejcfjdehcgkefjdgjehlffidfjdgjehkfgkefjdglehlgdhbjmigidjmhgjegjefjdilghlfjmhhkfdhbgjejlhkmhilgkmhgiehlfhkfgiehkfikfjmhilgjmhhkeikggjejlgjlgjkgklhjlgilfilghieikfkmhikfkmhikgkmiijfikfjlhjlhhjejkgmmjjkghhejkhlmiklhkkgmmiklhikgkkhjkgjkhlmjlmikjgkjgllhllimmjmnjkkhlmjklhjjgnnjllillhmmjjiglkhlliklhkkgkjhklhlkhlkhmlinmjlkhkiflkhjifiiellikkhjifkjgkjhmlikjhnljlkhigdlkhljgmkhkjgljhljgkhflkhlkilkhkifjifjifljgigdmlikignlikifkigligljhljgjgelkhmjhljhlifjgdkigljhmjhkigjgekheligkigjgejfdjgdlhgjhfkhfjgdjgekgekhfjgdkfekgejecgdbiebkfdkfekfdjecjfdhdbiecjfcjfdhcakfeidcifchdbidbhbajecidbkgfidbkgehcahcbiecgb`icajedhb`jcbhb`hb_hcaicaga_hb`ga_ha_hbaga_g_^ga_f^]ha`icbidbf_]ga_e][e][d\[f^]g`_f_]g`_e]\f^]d\Zc[ZcB@dededeeifffhfhihgiiijhjkklklmmilmlnkmnnmnnlnmmmnmnqmonmoooqnmppnmpplntrppjpopnqopmoponrnpoqopqqqppmponprqnoppmpqlqpomppompnnonnnolsonqlnonnmlnmjnqmmnknnojpmmlhnnkjkmklkjlkljhljhlgijgggighidfddfdeaBdA\e[]e[\e[]e[^e\]e[^e\_f^^f]_g^_f^_f^^f]`g^bha`h`af_chabhaag`bh`ciabh`ag_ag`ciabhabh`cibbh`dibdjcdicbhacibciafkddibchaejcejcfjdhlfchaeicfjdfkegkefjddhafkddhbdibgkffjchkfhkfgjegkeglegkegieeicfjdhkehlghkfhkggjdfjeikgjlhhkfgkehkffjdgjeikfgidhkegjejmhilggkejlhjlghlfjlgjlhikgilgjlhjlhgidjkgkmhijfikgjmhjlhllhilghjelnjkmhkkhjjgjkgikfjkgkmijlhklhijfikgjlhlmjklhijflmijkhlmikkgkkhmmjkkhmnjlliijfijfjkglmillilmjmmjkjgijfkkgllikmimljlkhklhllilkhllijjfjjgmmjkjgmlikkgkkhjifjjfmliiieiiekjgljgkkhiieljhiifjiflkhmlilkhlkhmlijjfljhnljkigllijifkhfljgkjgkjhkigmjhjgdkigkjgkhfigdjifkifkhfligljhkhfkjfigdigdnljjhekifjgekgekhemjhligjheigdiedkhfjgeligmigkgekhfkheliglhfjgeifdlhgkhfkgemigieckgejfdkgejfdidbjfdidckgfkfehdbhdbjgejeckgeidbhcblgeiechdbjfdidcjfdhcajdbhdchbagb`icbhbaha`ga_icbia`icbg`^fa_ga`f`^idbga_ga_g_^g`_g`_d]\f_]g_^f^]b[Yf`^haae]\f^^f]\d\[f^^f_]eHHcccfdchghijgghhgighjghjhklkkkkimmjnnnojnmmknknlmononmnnmpqmkmmpnnoonopnononmnpmoppopsnnnmqnnsqnsqroqppoonooommrsqpnpnpnopkmoqqpnpopolnmopmmoolnmnmllnmmoomnmomkllkkkmjlllkkkkjlkjkfiiffiffedgfhdgdcbBcA]d[[dZ\dZ]e\]f\_g^_f]`g_]d[`h_bia`g^^d]ah`chaag__f^^d\af``g_`f^`f_ag_bg`^f]ag_ag_bg`chabhabh`eicdhbchadjcdhbciadhbejdbhagkeejcejceicejcglfejcdibchadibfjddibeicfjdhkfgkeeicfjdfkdfjdgkeficejcficjmhgkejmhcg`ilgilghlfhlghjfhiefidgjeimggieijfikfhkfhkfijfikfhkfhkfikfikfikgfidjmhgjejmhjlhikgjlgjlhjlglmikmijlgjkgkliikgllijlhijfkmikmiklhikfgidklimnkmnjikfmnjlnjllimmjlmiikfkmijkgijfkmimnkklhlmilliijfmlillijkglkhhielmimlighckkgiifkkgkmillimmjlkgkjgmlilkhlkhjjgkjgkifjjgkiflkilkilkhjifmkjjhfkjgllikiflkhljgkjgmkijifkjgkjgihejifihdjifmkiiifljhkifkjgljhhgdkifkhfkigmjhhfcligligkhelkikifkifjhdljhjhejhfmkhmkilhfjgdjgekifkhfjgekhfkhfjgemjgjfdigdjfdkgejgeieckhfigeliglhfkgeigdlhgjfdiecjedifdidbiecgcajeciecf`^hebjgehcahdbkediechdbkfejdcjecjdchbahcahdbidbjdbicakedga_idbga`jdcjfeidchbahbaicbfa`icbha`f_^f_^e]\g`_ha`f`^e^]f_]f^]e]\f^]e]\f]\e]\e^]d]\e^\c[ZdFEccfcfefgdhhhhihighiiilkjhjilhkllmllkmplmjkkmmnmnlolnlmonoqpnnonmnnopmmnnomrmppooppporoqqplpqrqpqnpropqqqoppqopnoqppmmsononomonooopnnlppopmojplklnnnlnnnklnmpnknmjllllklmljgiijiijkkhhjfhjfgfefddccdbFeF\e[\e[^f\]e\^f]`g_]f\^f]]e\bia_f]ag``g_`f^_f^ah_ah``g_`g_ah_cibah`_e^dibdicah`chaaf_chbcibbhachadhbeicchaeicejddhbeicdibciaejcchaeicfjddibcibgkffkehkfejceiceibfjeeicfjdficikffjdjmhilffjdgkegkfilghlfhkfhlfgjeilgjmhehdgjekmiilghjfhkfhjffidhkfhjfilgjlhhkfhjeijfikfhjfhjfikgimhgjejlglmijmhhiegidkmiijfjlhjlgjjglnjlmilmiikfikgkmhklhjkglmjjjfjlgikgkkgkmilliklhklijjglkijkhjkhikfmmjjjfjifmmjjkgjlhlmiklhhhejkgkkhiifkkhkkhnnkllijjfkkgmliklhkkgmkimmjonkjifnmjlkhllikjgljhkjgmljkjhlkhmmjmlijifjifllilkhkigmkhkigkjgjifljhjhfkheihfmlijgejhekjgkifmkhkjgljhnmkjhemjhmkikjhhfcjifomkkifljhljgkigligihdljhifdligligjgejhekifkhejheljgkhfifdmjhjfdkhflgfieclhggdbjgekhfifdjgejfekhfhecidbligjgdkhfheclhglhgmigiecjfdhdbjfdidbkgehdbhcakfdifdidbhcakgejedhbaidbhdchbajeciecidcicbicbhcbicbga_hb`ga_gb`hbaibaidbhb`h`_hbahb`ga`ia`f`^ga`d\Zg`_f^]f`^e][d[Ze^\e^]f]\d[Zd\[cCBaddfcfgegghigiihjijkjjjlijmkmikkllimnlmjjllnmmlljpolloimnmpoknnmppoqpqnqpmlpoomqqonopqppqonnoqnppqoomrqpopqopoqpnrrpqmrnnnmponqonkqnnqpmmlnmnkompmmmlnlmkijklmnkklkkkgllmiljjihikihgiiiefhgfgffgfdeb?c>\cZ[cZ\d[]d[[cY]d\^e]^f]^f]ag``g^`h_`g_`f_`g_`f_ag_ah`chabiaag`bhacibbh``f_biaekdciaag_ekddicdic`f^chadhbdhbchbejcdibdiceicejdbgaeicdicdibgjdhlfhlffjefkeejdeicdhbfiddicdhbilgfjdhjfeicfidfjdhkfehcgkehkfehchjehkfhkfgjegjegkfgjegjegjdhkfikghjeilhikfilgjlgjlhilghjfkmjikgilgjkhilglmiikfilghkfkmiilgklhlmiikgjlgijfjkgijfjkhilgjlhjjghjfilgijfjlhjlhkmilminnkikfjkgjkgkkhkkgnnlmmjijfkkhmmjikfklhjlhjlhiiejjgjkgkkhnmkmmjmmjllijjgmljkkgkkhjifkkgiifiieonlkkhjkhlkikjgkkgkjgkkgkjhllinljiiemliihfmkhkjgjjfkjhjhfjjgkjgiifllikigkiflkhlkhomkkjgljhkigjhekigjhfligkjglkhjhfkhfkifkjgkifkigjheljgljhkigjhfkhgmjhkhfjhekhfkgeigdkhfjfcjhfligmkiigdlifkhfkheiedligjfekgekgfljglhfjhejecifdidbiecjfekfdiedjfdifdkgelhfiecjecieciedkgfjeckfejediecjfdicbhb`jedidcidcidbicbhcakedicajedf`^hdbjecf`_gb`hbahcbga_g`_hbaga_hb`hbaha`f`^e_^f_^e^\g`_ha`e_]e^]d\[g^]e]\d^]f^\bZYf^]bDCceheeefgfhehhghhijjiifkikkilmmlmjomlpmlmlnmomomnlompmokmpoolopoponplpoknopmoomooqmpppnqqoonqnpooqpoqppopmpqqqoonmnoonpkmonqpmolnpmlpmpnmnnnmllnnplkmomkmklmljnlljjjjjnkkjjjkkljljghjhihghfgfggdeedebBcB[dY[dZ_g^\d[^e]\e[ag_ag``g^]e\ag`ag_^e]_f]ag_`g_cia^c[_f^`f^`g_bg`fjdbhaekdae_diccgabhachaag`dhbdic`e_chadhcbf`dhbdicdibeiceicdibfjdgkeeicchaejcdhbfjdgjeeicgkefidehbgkeeidejdilgehcegbgjeikgeicikggjdilgimhfidilgehchkfilgfjdgidegcgjdhjfikgdgaikggjegkfhkfjlhimgdhbhjfikfhkfkmhlmifhcikfikggidklhkkhkmihjeijfikfijfilghkejlhjkgikfgidklhkmiijfjlglmiklhjjgikgiiejkhjkgklhjkgjjgikfjkgiifmlilmijkgkkgijfkkhjifklhjjgmmjkjgklikkgjjgjjglmikkhlkikkhklhkjgjhfllijifkkhkjgjhelkilkhjifllhmkinljlkhmliiifmkillilkhllikjgkjgnnkljhjiflkhljglkhjifjiflkhkjgnljligkigkjgjgekjgjhenmjkigigeljhjjgljhjhejgekigkhfkhfjfdkifkhejhejhflifligkigmjhjhfkigmjhifdkhgjgelighdbifdmihkigieciedieckgeifdliggcajhfhbajgekgejfejfdjfdkhfidbjfdheckfejfdidbidbidckgfhdbgbakgehdbhdbgb_iecibaidbidbiecga`idcgbaidbhcahb`ia`f^]gbaga_hbaf_^f`_ha`f_^h``f`^hbad^]d][g`_e]\e]\g_^f]\g^]f]\f^]d][cCBdedeedefffiggigkhfjhjkjkjkgkmljlmmnjopnlmknlnmlimnnmmnnnmlonpoplpnooopoonoqqnmoqpporpnpoqspprmqoqsmnqolnmpmnplrroopploonpopmnmlnmnmponknmpmmlolnlnonnlnnnlmlmlmmkklilkjlmijlligjgihiigggggfehgfefdcdDcC]e\YbX]e[\eZ^e\^g]ag_]e\_g^^f]ah`^c\_f^^e]ah_bga`g^_e]djcag__d]cha`g_cha_f^af_dibag`dibbhaeicchadhbbgacgacgafjechadicdjceidciadgbejcfjdeicfkeeicfkefleehcgkffjdcgagkffjddibeidfjdfjdeicgjdhlgimhfjdgkegidfidhkfhkfgidgkffidgjefidhkffjehkfhkgilghlfjmhikfhkfikgilfgjehkfjlgjkgilghkfijfhjejlhhjfgidgidgidhjehjehjfghdklhkmihidijfikgjkghkfjkgikfijflmihiehkfjkgkkhjlhikgklhijgijgijfllijjgiifjjgkkhlkiikghieiiellijjfkkhkkhlmijjfkkgjjfjieiiflkhoolkkhlkhlkhllhmlijkgiiflkhlkilkhkjgjjglkhkjhlljlkiljgljhkjglkimlimljkjglkikjfljgkkhmkilkhljhjiglkihhdkifkifjhfmkhomkmkihgdkhfigdigdljhkignljljhjgeligjhejgemkikhfkigigejhekgeifdkhfifdigejhejfdifcjgejfdjfdhfchdbkhfjgekfejeciedkfejgekgehdbjgejecjeclhghdbgcahcajedkgeiechdbkfejedjeciecga_fa_idbhcakedgb`kgfhcbicbidbkgfidbhdbga_hcbhcaga_ga`f_]hdbga`hbae_^gb`f^]hbaga`ga_ibaha`g`_f_^e_]f_]e\\ha`e^\f^\d]\e\[cZYf]\cCBcdeedfgfegffefhgihhjikkgihhkjlljjlollmklomklkmmmkmloomlpkmnlmmomlnmnnmnlnopnoopoommlponqpmqpotnqnpnppqplopqqppnonnnnqonronqoonnlmnokknoonlmmolpmpnollnkmlmknlmlnkljlkjjkiklkjijkiihjjgighdgfffgffdcdDdC[cZ\dZ[dZ^f]]e\_g^\d[^e]^f]`g_ah`]d\`f_`g__c]_g]_f^bha`g_ag`cib`g_cibdjbag`bg`bhaaf_dibag_cgaejdejdeicdicfjdejccibdiccgabg`chafkechbeidgkedibehcdhbeidgjecfadibbg`fjdejdhkfdhbfieilhfideicfhdfjdgkfikgejcgjegjefjdilghkghjegjegidhkfgjeikgfjegjeijgghdhlggjejmhkmhkmigiegkehiehiekligjehjfjlghjfhieklhhjffidijgjkhkkgijfjkghjfijfikgjlhlmilnjjlhhiejkghjejjgllhkmijjgjkgkliklhlmjjjgklijkgijfmmkiifmmjllhjkhkkhkkhlkijkgklhklhjjgmnjkkhmmjkkhihejjgllilkhkkhjjfiielkhkjgkjgkkgmmihiejiglkhnkilkhkjgjkgkkhkjflkilkikkhkjhjifmkijifjifkjgkjgjhfjhfigelkhkjgkigkjgjhfmlijhfjhfkigkigjheljhjifmjijgekigjfemjhjgfmigjheiheigdlihigdkhfkhfifdlhfkhfligigelhfjhelhfjgejheifdheckhfkhflihieciechfcifdjfejfdjfdkedkigjfdgdbgc`gbakgfjfdieckfdjediedgcafb`gcahcbidbicbga_iecga`hbaga_jedfa_hcbgb`iecha`f_^hcbhcae^]hbaha`gb`ga`ha`e^\h`_h`_ga_e^\ha`b[Yga_d][c][e]\d][e]\d\\e]\f]\bBAbbcgdfffedghgjhhjgjkkkllllijlklkkjlmnlmklknojnmloomlnokmpnlmlmnmpmmomloononpmpmrqmoonoplmppooppnoooplponppnonoonoooponmoomoooopkmoplmlnpnonpmmnllnmllkmmlnlljmklilklkklkljhikjjhjigehidgifgeifgecbbeFeEX`V^e]]e\]e\^e]`f_\d[_f^_g^^e\`h_`g_bha^e\ah`_f^_f^_e]`h_biacia_e^`e^_e]cib`f^af^fjdeicfjdbg`bg`cgabhabhabgacgachachbejddhbeideiddhbcgaeideicfiddhbejdeidcgafjdgjedhagjefidfjdejcglfjlhdhbhlgeicfjehlggidgjegjehjfhjfilgilgilgijfilgdhbjmhilgfidhkfikghkfhkfijeilghjfhkfkmifidikgikggjeilgkmiijfgidjkggidklhjkhhkfhjekkhhkflliijflmiilghkfhiejkgghdijflliijgklijlhjkhijfkkhmmjkkhjjgjkgkkhikgjkgjjfjjfjkglmifgclliiifjkgkkgkkhlkhkkhllhjkhiieklhjjglkhmmjllihhejjfkjgmmjmlilkilkhmlikjgjifmmjjjgljhjjgkjglljkjhkjgljhjhfjgejhfihelkhljgihfigeljhjjglkhljgjifkigjiflkhkifkigkhemjhjgeihekigkhfkhfmjhjhfjhfihekigjhgkifjgejgeifcjgekhfjhekgekhekgfligkhfjfekgfkhfjfdifdljgifchdbifdieclhgjgeiecgdbjfelhfjfdjfehcaifdkhelgfidbjedhdbjedgcahcakgfjeciechcaicbib`ifcjfdgbajdbidcjedieciecicbgb`g`^idbfa_ga`hdbgbag`_f_^g`^ga_e`^g_^hbaibaf`^g`_h`_f`^f_^d][g`_f_^d\Zf_^e]\e]\dFEbcddgegeffjghhgfigiihkjjlkjkjkkmklijjinkmnjmlllmklmknmnonmmmnlpoqmnojmoosooppoonnpmoqqmopnqnpqrolqpqonoppronlppqnnppmmolnpmnonlopompnmloklmolnmpmkonlnlgkimkljmkklkkjmjmjkjlllhjiiihjifhfgfgdedcgeebEdD^g\]e\]e\_g^_f^]d\^g^ah_]d\`g__f^]e\\cZ_f]ag`cibag_bhaaf__f]chabh`ag``f_chachachbaf`bf`bgadicdhbaf_dhbbf`eidejdcgacgadiceidchbeicdhcehcfidehcgkffjegkegieehdfjefidfidfideicehceicfidgkegkeilgdgafidfhchkfeicfidgjefidhjfhjfilggjejmhimgikgjkggjehkfjlhklhikghidilghkfikfjlhhkfhkfjlhgjeikgfhcikfikghjfhjfhjegidkmijlhijflmihifjkgklhjkgikgjjgjkgikgjkgkmikmikkhijfjlgjkghiejkgmmjlmillikkhjjfjkgkjgiifiifllhkkgkkhijfmmjkjhiiekjgkjgmliihejifjjgjifijfjjfjjfkkhiifmlijjfihekkhmkilkikkhkjgmmjjifjjgonkmlilkiihenlijifljgkjgljgjhekjhkjgkjgkifjhfjhflkhkigkhfkjghgdkigigdmkijgfjififdlkhhfdjhemjhkigljhigdkhfkhfjhfkhfkhfigdkgfhfdlifjheifdkhfkhfkgekigjgdkgeheclihhfckgeifdkhfifdkigjgeifdkgfjfdjfdjgekgekgehechdcjedjedjfdgb`idciechdbhdckgegb`idchdblhgjfdhdbhdbiechcagbakgehbahcagb`icaidchb`d_]gbaidbgb`hb`ha`gbaga`e_]gb`f_^fa_g`_gb`f_^d][f`^f^\e_^dZYf^]d[ZdZYe]\bFEbeccdddgghjgfgghggijjiiijiljliknllkmllklhmkllknllmllnnppomnpnkmpnnomoponqpooopoonpnpomoonopqomommpomprponpnpqoonpnrknpponnolnononmpnolomnnnopmlommmnnklmlklmnlmjkjkkkkimhjikimjhjjjgighghffggggdgddbCdC[cY[dZ]d[[cZ_f^_f^]f\ag_^f]^e\`f^^e\`g_af__f^ag_`f^af`_e]`f^bhaejcbiabgadicbg`ag`dhcag_cibcgabf`dibdicag`cgachbdhcdibdgadibdhbehcgkfgkffidbg`ejdeicgjedhbdicfhcgjegjefjdfjdhkfhkffjehkggjdgjefidehcgjefhcdhbehcgjehkffidikggjegjegkffidikghkfgjehjegieikgjkgjlhikfhkfikfgjegidikghjejlhhieikgikfhjfgidgidjlhikfjlhhieikgjkhilgijfgicikgkkhjlgkjgkliklhiifijfhieijgjjghiehiejkhikglliklikkgkkhkkgkkhjkgijfikghiemmjklhkkhkkhklhkkhjjgjjgnmkjifjjgllikkhkjgjjgkkhkjgkjhjifjjgjjgljhkjhjjfkjhljhkjgkjhhgdkkhjheiifjjgkkhjifjifkjglkhkjgljgkjgkigihfjhfjifkjgjhejhfjhekjgkjhkhfligigdjhfhecigeigejgeligkheifdkigkifigejhfiecjhemkhifdjgeieckhfkhfiecjgeligkhgigelhghfdhecjecjfekhfgcajgejgejgejfekhfjgejfdhdbkgfgcakgejfdjfdifdiechcbieckfehcaiedgcahdajedhcaicbhdbjfdhcahdbjechcbhcahcbgb`e_^idbhcahbahbaga`icbga`fa`e_]ga_ha`e`_hb`hb`g`^f`^hbaf`_e_]f_^e^]d\[f_]d[Ze]\cZYcDCdbdeddceffggghihgihjiihkkhjillnjklilimkklkmlllmomkmnmmkmnomnjkmlnnmmmomopooprnonnpnpoqqqppnqolqoqrppoppppnoopqnooppoomqmnnmkononnlonkmpomqoomnoknimmlolkjlmnmmklijkjklljlhkjjihjgkhgihifgfghedcedcebDdCZcY^e]]d\]e\]d[\d[\c[`g_^f]]e\`f__f^bh`_e]ag`_f^ag`ag_dic`f^chbcha`e^chabg`chacgabgabgadib`e^dicdibdgbdibfjddicchbdicdicgkeehcfidfjdeideicdhbejdfjegkedgbfidfjdeicfjdhlggjegjefidgjechbhkffkdfiehlfgkeikfgjehjfehcficgjegkfgjehkfhjfgkehjfjlhehcfjdilhilhikffidijfjmhhjfhiehiehjeiifjlhkmihjfikgjkhgjeikgjlggidiifklhjkgklhjlhikghiejkgjkghieiifhjfjkgijfkkhkmihjfjkhklijjgjkgklhhiehiejkgkkhjkgjjgjkgikgmljnmkiifijfjkhjjgjjfkkhiiflmjlkhlliihfjifjigkkhhgdlkhhhejjgllikjgkkhkkikkhiifkkhhheihekjgkjgjigkjgjjgihelkhkjgihelkijifljhjifkjgihfkjgihfigdlkikjgjiglkikigihfjgfkhfjifiheigeligjhfigemkihfdjhehfdifdljhifdjhfkhfkigjhfigejhfifdjgekhghecjhfiecheclhgheckhfjgeifdjgejgeifdiedhdbgdbjgekhfjfeheckgfhdbifdeb`hdbidbhdckgejfdhdbidcjfdgb`jfdidbhdbidchcbjecidbiedhdbhcahdbidchcagdbgb`d_]gb`hcaidbfa_ga`e^\g`_ga`gb`f`_f_^f_^e^\ha`e_]g_^d][f^]d^]g^]d]\d[Zd][d][cEDddcddfegedgfgghgkjihgjihjjhmkkkhjjlmjlmlnkmmlllnlmnnmmnknmnmomnommqlnllnnnonnppqmonmnqopoolonoqpnrooonpolplpononopmoopoonknmmopnmpnjmpmnnpmlolnlmllnnlnmljnmmlolmikllljkikjjkjkiihhhfeghehggefegedbd?a>ZcYYbWZbY_e]^e\^d\]d\_f^_f^^f]^f\`f_]d[ag`chaah`af`_f_bgacga_f^`f__e]bf`cgacgadhcaf`chaeicchaejddicbhacgadhcdhbchbgjecgagjedhbeiddgadhbeicgkfehbchaejdfjefjddhbdgbfjefjefjefkdgjedhcgkeeicehbehcehdehccgafidgjegjfgkegjfdhbfjdgjehjfhjfgiegjdfidilgfhdgiehieijggjeklijlhgjehjfikfjkggjejlhjlhgidjlhikgijfjjgikghkfhieikfkmiijfkkhklhjlhjkgjlhhkfkkhkkhkkhjjgjkgllijkhhhdklhfgcijfiifhidlmilmjjjglkhmmjklhnmjjjgklhkkhijfhielljkkhggdhielkhihellilliiifkkgjifiheiheihellimlikkhkjhjkgllhkkhkjglkikjgkifjiflkijhfhgdlkhljhkjhjifmkikigkkhjhfkigkhfhfcihejhfihejigheckifljhkighfckigljhkighfdkhfkigjgfkigigejifkhfjgekgejhemkikigjgekhfifdkhfkheifdhecifdjfeifdkhgifdlhfhebhgdkhfjecjgehdbhecjgeiedjfdiedjgekhfjfdjgegdbiebkgfjfdiecjfdjfdjfehdcjfeiecidbgcaiechcahcbgcafb`fa`hdbhdbfa_f`_hcbidcgcagbahcahcafb`hbagb`ga`ga`g``d^\hb`fa_icag`_e_^f_^d\[d][b[Ye]\bZYe\[cZYd[ZdDCbdddcgdegghgfgighhggeigjijgjlkklkkkljomjllmmolnllknlonnnnollomnnlmlommplmompnolpmpoqnqnonoqnnqonplqoonpprnpqonoqomopmpornolmmlonmmnmpnnkmomoqnlmlllmkmmmonilkjkmlkmkljkjgkikhihiihhhijhiieegfeeefccbAb@[cZ\d[[dZ^f]]e\_f^^e\]d\_f^_e]`f^^e]ag_`f_ag`_f^ag``f^_e^bg`cib`f_bhacgbaf_biacgabgacgadicdicchbcgachbbf`eiccgaejdfjdfjeeidehcejdehcfjddhccgafjefidfjechbdicehcdiceicfjdgjeeicehcgidejdgjeeicgjehkfgjejmhfichjfgjeeidimghkfhkffidfhdfidilgilghkfgjegiegjehkffjdgjegiegjeijgijfhjfklhilgilghkfjkhhkfikgjkhhjgjkgikghieikgijgjkgjkgjlhijfihekkgghdjlhjkgklhklijjghjejkhhheijfikgjkgjlhiifikfiifjjgiifjkgllijkgkkhjjflljkkhijfiifiifmmjjjgmljiifijgiifkigkjgkkhmljjifjkgiielkimljiifllikkhjighgdkjhkkhiheigdlkiljgjjgkjhjjgkjgmkilkiiiejifjhejhfkjgigelkhkkhljhljhkifigdkjghfdkjgjhfjhfkighfdifdkifkjgligkhgigekigmkiifelihigehecjgeligjfdjgejhfifdjgeifdiecjgekhgkhfifdhfdhecifdgdbifdifdifdieckhfgdbifdiecjfejgehedifeiecifdjfdhdcgcbhebkfehdbiechecidciechdcgdbhdbhbaidbidbhcbhdbfa`gcagb`hdcifegcahcbhcbiedhcahbaf`_f`^ga_fa_e^]gbae_]d\[g`_e`^f_^e^\e^]c[Zd\[cZYbYXe\[cA@cddddgdegdhfhhihjigiiihihhiijijkkkljhmllnnomlmkmllmmmjnnkmllnmlnnnopoopmoooppmlnonoonnqonopppqoponoqolnmnnpqprnnonnooolnnpoonnoolmolnnnmilmjknkjomkklnnlmkkkjnhkmkkliiijjkgiikgjjiiggeghgfgedeefedaaBbA\d[ZbY\e[^d\^f]]d[^f]_f]]c[_e__f^ag``f^`f^_e^bgaaf`ag``e_bg``f_af`bhacgadhcbha`f^cgachbdiccgadhccgadhbchabgadhbdhcchacgaeiceicdhccgadhbfidcgaehcdgbhjefjdejdhkfejdeidhjfeicgiefiddhbfidgieikggkeehcgjffhdfhdfidfhddhbgjehkfhkffjdfhdgjegjehkfilggidgiehjfhkffidgjegiehjfgieikggiehifikgkkhklijlhhjfjkhhiehieklhjlhgjeilfjkgikgikghjegidijfhjfklijlhiifghdgiejlhilgjifikgjkgkkhkliiifjjghjejkhijfllilliiifjjghiejjgjjgihehiekkgijfjkgjjhjjfkjgkjhklikjhmmjjigkkhkjgihfkkhmljjkgjjgiifjjgkkhlkhjifjifjjglkikjhmkikjghhejifkjhigdmkikjhjifkigjifjifkigkigljhkigkjhkjhihfiheljhigejhfkjhkhfjhejifjhelkhkjgljhjgejififcgecjgekhghfcjgejhfjgekhfigegcakhfhdbmjikhfifdiecifdhfdgdbiecjgekhfifdjhfifdifehebkhfiedhdbiediecfbajfeifdjgfgcagdbjgdjfehdbiecidcjfdhcahcbhbaicbidchdbiediechcbgb`gbajdcgb`hdbgbajedfa^ga`iedgcahbad^\e`^f_^hcafa_g`^g`_hbae^]fa_e^]d_]e\[f^]e^]aXVbYXbBAcbcceeehhgggghhhigjiilhjiijijkjmkjjkmjnmmoomkkmnmlnjmnlopnmlpmilnoojmmmopmlonopnppoopppsnopmqlqoppksmqmmpmqmpqonnornmmmomlnnomnnlmmnlnnlonmonnmnlioomllmlmjlkijljkjkjkjkiihijjhjhihhhghifgdffeddedcfBbA\cZ^f][dZ]d\]e\_f^_e^^e]ag``f^ag_^d\^d]]d[bgachbaf_ag`_e^bgabhabgabg`chaejdbgadhcbhabf`eicchaeideiddgbcgbdgbdhcdhceiddicdhbdicdhcgkfdicdhbehccgabgafieeiceichkffjdgjfgjefjdgjegkehlgfidfidhkfhiefhdfjdfiddibjlhikfilgfhcikgfidgjegiegiegidfidhkggjeijfhjfilgfhdjkgilgehcikgjkgjkghjfjkggiehjfikgghehjfhjfijfhkfikfijfjjghieijfijfiifijfhiekmiijfjkgkmiijfikfklighdjkgjkhikgllijkhkkiikghiejjgklhijglkhijfkkhiifhhehhenmjjjgijgiifjjglmjijfklhjigiiflliihejjglkihiejifjjghiejjgmljiifkjgjjghhegfckjgggdihehgdkifmkiihfjifjifkjhhgeihfhgdkjhiheihekhfihegfcjigifdkhflkijhekigkgfmjhkigljhjifigeigdigehecigehfckhfkigkigiedjgeifdkigjgfifdigejgeifdkhfjgejifhecjgekgfjhfiecjgekhfkhfkhfhdbifdifdjgeiecjgeiechecjfdjgekgfjgeheckfejgejgegdbiecgcahcbgb`hfdgcahdbgcaifeiediecgcbgdbidbgcaidchdbhcbhcbjedf`^e`_f`^hcbf`_e`^ea_fa`fa_g`_c]\ga`f`^d^]ga_d^\e^]f`^c]\d[Ze^\e]\d\[cEDbbcdfdghfefhhfiigihfhjjjihikgkikkkkjkljkjkmlkmkljnoomllpnoolnommmlponomonnkomqooopmoopqmqqoonppnrlpoonlmnonoponnplmlnmronkpnmoolknnpmmnllpmkokjomllknllmjkolkjnlmkllmjjjlhhjjiigiijjijffggfeghfedcab@b?ZcY\d[\dZ^e\]d[_e^\cZ]c\_d]`f__f^_e^bgabg`af`dib`f^`e^bgadhb_e^chbchbdhbdjdbgaae_dhbdibag`dhbdhbeidchabg`dhbcgabgafjeehcdhcehcdhcfidfjdhkfehcfhdehcfideicfiddhbehcdgbehchkfgjefjeehcehcgkfeicgieeicilgehbfidfjdgjeilhegchjfjlhehcdgbikfgidfidehchkfhjfgiejlhhjfgiehjegjegjeilghjfjkhikgijghjfhiegiehjflliijfikgjlhjlgiifikfklhjkhjlhikgikgjkgiiekjgjjgjjgkkhjkhhiejlhkkhmnkjkghieiiflmikliijfjkglmjghdkkhjjgkkhlljiifjkgiifjjgjjgllijkgiifkkhkkhiifhfdkkhiifkkhjjgkjgiifhifjjghhdiifkjglkhkjgljhjjgggdkkihgdiheihfmkiihekjhjjgjiggebigdljhigeiifjifmkigfcmkihfckigkjhlihjifjhffebmkilkiifdjhfkjhjhfifdifdjgejhfkigkigkhfjhfkhfifdheciechfdhfcjgeigeigekhfkhfigekhfifdjhfkgfgebigehdcgdciechechecifdkgeifdhechdchdciediedidbkhfifdheciechcahdchdbkfejfdgecidcea_hdcgbaifdhdbhcagb`hdcgcahcbgbagbahcahcbgcafa_hdchdbe_^fa`hbad]\d^]g`_e_^g`_e`^d_]b[Ze_^d][f`^d^]e]\d\[cZYcCBbfdeeffhghggghhhehihlhijhjhjjikjhkjkjiljlnlkmmlllmnlmmknnnomlmoknmmnmnnmmnpnlopoonppqqomopposnpqnqpoqnnnopoppnmnmlnnompnmnnokmmnmpomoomlmlloommnkmmmlmmmkklllljmliliiiijhhihkjhhgghghgffghdfffddddbd?a>ZbY[dZ]e\\d[^e]]c[_e^`f__e]af`af`af_`e^ae__f^`f_bfadhbbgabgabg`cgacgabfadhcbgacfabgacha`f_bg`dhbeicbf`dicbfabgabe`eiddgaeiccgaehcdhbbg`fidfiecfaehcgiecgbeicdhceichkffiedgbdfaehceidfjefidehcehcdgbfidgiefidilgdhbgieikgeicfidgiehjfjlhgjehjfhkfgjeikgegbfidijfhiejkhhiegjeikggjeikgfgcghdhjegiehiejlhgidhiffgcikgklhjkhkmiklhikghieghdhhdkkhjjghielliikfikgklhllihieijgggdkkiijgklhjkgjjgjjgklijkhllikkghheklijjgiiefgchiejjgjjgjkghhdkjglkijkhiifjifmljjifkjhiifjjgkjhjigihekigjifiheljhigejifkkhihfhgdihfjifjigiifjheifdihfiifjigkjhkjhkigjhejjghfdkifgfciheigekihjifihfjheljhkigigeligiiflihkgfffckigjhfkhfifdjhfhecjhfkhfkigjhfifdjhekhfihehecjgeifdjhfigejgeifdhebkhgjgeigeifdifdgdbhechechecjhfifdkhfjfdjfeheciechdcgdbiecieciecidcidcgdbhcbhcbhdciedgdbfbahdcidciecgcaicbhcbhdce`^ga`hbafa`gdbgbahcagcafb`fb`icbe`_d^]gbaga`d_]hbbe^]e`^ga`d_^d\[e_^d][d]\d][d[ZbBAccbeddfdhhfgigghhiigiigihljkikjkllkkhinkkmjllmmjjolmlpmnnplqnonqoloknnoolnokqoonmnmpmoonlonnnopqpnmnnnqnoqpmnomommplonqonnononpnopnnlmllmkmjmmmlkikknknlllmjikllkklijikjihijgiijihghihhggffgeefebcbbCdB[dZ\d[_f^]d\]c\_f^]c[bgaag`]d\af`cha_d]bf``e_chbcgaag`dhcag`bg`chbaf`dgbehcchbchbbgadhbdhbbg`cgadhcag`dgbdibeicejddgbgiedhbgjeehdfhddhbdgbdhccgacgagjegjefjddgbdhbejdeicdgbehcgkfdgbfjdfiefiddgbficfjdgkfeidgjfdhbhjfgidgjfgidgidhjffhcgiehjfkmigiegiehjfgiefhdgiefhdghdijggiegieikggidijfjlhhjffhdhjfjjfgheijfgidhieegcfjekkhghdghdijgfhcgieijgghdjlhjkgjlhjlhgfcghdgiejkgklhlkijkgijfiiejkhjjgjkgiifkkhkkhjkgjjgklhggckjgkkhjjgllihhejkgjjfjjgkkhijflliiifkjhkkhkjhiifjhflkhiifjifihehhdkjgiifkjgiheljhhecjifkjhllijighgdkjhkjghfdkigihehhejhflihkigiifjifkjgjhgjgfigelkikjgjigjigigeliglkhgdbjgekifjhfigekhfjigjgegecjhfjfdjgeigeigejhfhecjgeigdhechechecigdifdieckigifejhfifdkgfheckhfifdhechecifdhdcjfeifdifdiedgcbifdjfegdbgdbhdbifdhdchdcfb`fa`hdchcbgcbgdcgb`gb`iecidchdcfa`ea_e`^fb`gbagcafbahbafa`idcfa`g`_e_]gb`gcbga`e_]fa`gbae_]gb`e^]e`_e_^c^\e^]f`^e_]d[ZaA@bdacbfeefgfehehgifiighhkhhjjijjkmllkjigklnkmlkllkklmmljkklnmkmmnonnjomknkqpomnnlnoopoompnnpmopqomjnoqoqmopmnqnopplmlnoqromoponnmjommljmmllnmpjnnlkngmllkmkklkgjjhmilkmjjihhgijhggifghgggihjhffgdbddbBeAYbX\cZ]d\]d[]c[_d^`f_`e_af`af`^d]_d^ae_`f^bgacgaag``e^bf`af`ae_dhbbg`bgaeicbf`chbbfa`f^cfadicdhcdgbbgadhc`d^bhacgbcfacgadibbf`fjecgabg`ehchkgdhbehcfidcfafideiddgcehceicdgbgjfdhbfhdgieehcgiegieehcfhdikggjffjegiehkggjefiefhdhjfhjffidfidfidgjeegbhifklihkfgidjlhgjefhdfhdghdfhdikgikggieijggieikgghejkgikggjffgchifhjfijgiiehjfklhjkggiehieijgjkhiifiifikgijfijfhieklikkhijfiifijgikgijghgeijfijfjjfijgiifllillihieijfhhejkgjjgihfjjgiifigeiifkjgghdiifgfcgfciigkigiifihfkigiheiheihejifhhdiiejjghfciifjifihfjjfigelkhjjgljhljihgdlkhjifkjgjigiifkigjhejigjifjhfkjhkifhgdihekjhifdjhfigekigjhfigehfdjhfifekjhkigjgfigekihigekigkgeihfhecjhfjgehfdhecifeifdjgejgegdbgdbiedgecifdhfciedifdjhfkhghdcfb`jfejgfhecjgfhdcifdkgfifdifeifdfb`ifdiecgbaiechdbidcgcbhdcgcahcbhdchdbhdciecfbagcahcaidcidbgbafb`fa_hcbga`e`_fb`fbafb`gbac`^fb`gb`gb`fa_d^]e`_e`_e_^f`_f_^e^]cYXc[YaBAbc`eeffhdffeeghegfjghhhkjgjkijjmkmjlnkmmkikllllllllnllnnmnnlmlnoqoononmoponmnomolnooononollnooponqlpoqnoqnnnopnopmmlnpknopnlnmmmlplnnonlonplmkkjlllimklkjnkkljljnmjklhhjiijjikhikijihhhgfggfffedddddBbB\d\^d\^e]_e^`f_ae_af``f`bga`e_af`bgabgadhcbgabhaae_cgaae`ae_ae_chbcgbaf`cfabfadhcbe`cgabgabf`cgbgjecgadgbdhcdhbdhceiddhbdgccgbdicdhbfhdeidfiefiedgbfidgjeeiddhceicehcfjefidegcfidhjfjlhegbfhdhiffhdghegiedhbehcfhdfhcijffidehcehcfidfiehiffhdgiegiegieghdhjgghdikggiegiefhdhjgijfhiejkhhjfhkfikgghegheikgfhdhjfhifhiejjggiehjfgieikggiehhehifgieijgijfhjfiifjjgjkhjkhiifjkhlmjjjgijgiifjkgiifmnkkliiifjkhhjeijfijgiifkkhiifjjgijgkkhllijkhjigiifiifihfkkhiiekkhjjgjjhllikkikjgjjgiiflkikigkjhjighhdkjhihfihellikkijjghheihfihejifiifhgdhgdjhfhfdihfkjhhfdfecjighgdkjgjhfigehgdkjhjhejhfhgdkjhkigigehfdjifjhejhfhfdhfdhfcigefcakigigeigehfdigehecifehdchechecigeigehechfdhecigejgfiedifdhfdjgfjfehechdcjfejhfgcbjgfiedjfehfcgcbifdgdchecfb`hfdjedjgffcahdchdbhdcheciecfcagdchdcfa`fb`gcbfc`fcahdcgbagcaga`gdbgcbidcgcagbafa_idcea_ea`d`^hdbgbaea_f`_e`^d_^fa`f`_f`^d]\d\[cFEbddafdedefeghehehiihhhkjjhjjimjkliknlkkmmklljmjlmnlnmmnmknnlnklllpmonomoooomppnompokomnooonnmmnpnnooomlnnopponnnnpoolomlnnmnnnnmnmomlmnlnklllnjnglkjlmnjlljjkkklmfilijkkijljkihjjhffhfhegfghdceedcdf@c?`f`^d]ae__d^ae`ag`cgaaf`^c]dgc`e_bf`bfachbaf`bfabfabg`cgacgbcfadhbdhcbeachbehccgbbg`cgacgbcfacgbehcdhcdhcfiechbfidehcdhcfjedhbgjffidcfagiedhbegceicfidhkffiddicehcehcdgbfieehcfiefidfidgiedhbfidfidfhcgiehkffidehcfjefhdeidhkffidgjfhiegjegjeikhfhdfhdhjfhiegiefhdfhdfidjlhjlhgjegiehiehjfgjehiejlhhifhjfikghieikgfgcjkgiheijgjkhhjfjkhijfkmiklijlighdijghifhifijgijgjkhjjglliijgllijjgkkiikgkkhkkhiifijfihejkgjjgklilkijjgiifhgdlkhlljjjgjigihekkhkjhiifnljjigjigjjgkjgiifhhekkhjjgiifkkhjjgjifjjfjjglkilkijhflkhiiflkhiifihehgekighgeigehgdhfckihkjgiheljhigejgfjiggdbigdhgdkigjighfdjhfhfdkigkigigdjhfhfdmjijhfkhgjigjhfjhfifdiheigekhgkigihfifdhecifdfdbjhffdbhecifejfejhfjgehdbhdbhecgcafdajhfjfeifdhedhdbgcajgehfdgcaheciedgdbiedhdbgcaifdgcbhedhdbgbafa_fbahedifdhecgdbe`_fbahdbfbafa_d`^hdciedfcafbagbahcbgbaea_hcbfb`hbae`_e`_eb`gbbfb`f`_f`_fa_e`_ga`c_]gbac^]dFFcdceedfdfghghhfghikgfgjiijjfijkjkkijkljlkllllmmkjmmnjmkknmmmpmkplnonloopoqplpplpnpoopmpppnonolqqopkqomnprnoploomnmlooplloolommmolmllknlkojkpmoloklmlmllklolmkkkjjlliiiiiihihkhigjhihiheheegeffedccc,g+lvksxrpvoswqv{uuysrvpswrw{vy~yx|vuysw{vuyswzuvytx{ww{vuyty}xx{wuxsx|wy{wy~xsvrz}xvyuvytx|wy|wx{vwyux{vwyuwzvy|wz}yz}xy|wuxsy}xz~yz~xy|xy}xz|xz}x{}y{~ywzu{~zy}w{~yy|x}{{}xz}y{~yz}x{~zz}x|~zy|x{}yxzv{}y|}z{}y}}{}{|~zy{w}z{}y~|{}yyzvz{w}{~{}|~z}{|~z{~y}~z{}y~|}}{~{}y|}~z~||~z|}z{}x}{}y||y}{~|}}~{}}z|~z|}yy{w|}~z}}z~{}}z}}~{~~{~~{~~{~{~~{~~{||z}~{||}}~z}|}~{~||z~{|x|~|}}z}}~z||x||y~~{~}}~z}|{y|}|z|||y|}|y}~}z~}|z}}z~|~|z}|{y~}{{zw~|||{y~|~{~}{}~|z}|z~|}|z}}{|{x~~|~{~|z}{~}{~}{}{y~|z}|y}{~}{y~|}zx}{x~|z{yw~{~|z|yw|yw|{}|~}{|zx|zx}{~|}{y~{y~{z}{}{y}zx|{y~}{ywvs}zx}{y{yw|ywzxu~{y}zy}{z~{y{xv|yw}zx{yw{xv{y}zyzwu|xw}yx|yw|yx|{~zyzvt~zy}zy~|zzvt{xw}xwzwuyvsyutzut{xvzvt{xvzwuxtr{wvwtr{wuxtrzvuxsrxtryuswrqzvtxtsxtszvuzvtwrqwrqxrqtomxome.-acfddfeeefdgighihhgeiilhihkljkinjglllnjlklllkmlmknmoollmjlmokolrnomkplkpmpnlmlpmopoonnnpoplpqompknoomoqonmonmnooommkpolmknnnnnnlmolonjolkmllmjllilmllnkjlllljlinjkkjijjhjjlljhjhggiifghfffgegcddd0g0kujrxpqxpuzssyrryqu{tuysy~xrwpwzuqvouztu{ttxrswquxsvztvytv{tx|vuysx|vtxrwzuv{ux|vw{uz}yz}xx|wx|ww{ux|wz~yx|v{yw{vx{vy}xy|xz}xx|v{~y{zz~xz}yz}x{~z}|z~yy|wvyt{~yx{vw{vx|w{~y}|{}yz|x{~z{~yz|x|}yy|w~|{~y}z}x{~z|}yy}xz|xz|w|z|~}~z}{}y|~z|{|}y|}~{~||~y|}{~{~yy|w~||z}~~||z}}~||~z}}~z~|}~z~{~{{}y~{}{}~{~|~~{}~z}|}}z}{~{~}{||~|}~|}~~{}}z~~{~|}~{|~{~~~{|}y{}}}}y}|~|~}{}}z}{}}z}}z~}z~}~{}|~}{|}}~}|{x~{{{x{zw~}z~}z~}z|z|}~}z}{x~{|zw}{}{~}z~}z~|}{}{|z}{y}}~|z~|}{y|{y~{y|{~|}}|y~{~|}zy~|}{}zy}|}zx|zw|yw|zxzwu}zx~{z~|}{y|yw{xv|zw~{y|{}zx|yw{yw~{y{wu~{y|zw{xv{xv}zxzvu|xvyvt}zx|z~{y{wv|xw}xw|z~{y{wvyus|vuyutyut~{z|ywzut{wu{wvzvt{vuzvtwtrzvtzvtzutuomztszvuzut|wvzvt{utwrq|vuwqoyqq~yxxsryrqzsrvkjf0/cbecffgefefffehggjijgiijglhkjjijjklijlnjkmnkllmklknmlljnlnkmlollmlmmlknomlonollmoppoompimlmnnpmpomkpnnoooononmlomnpmnopomonnolokmknmlknkmmmlmmklmmhljjmkjklhmmlkjkjkjjiiihjiiiifhkfgghegfgfgded/g.kujltktysqxpryqtyrryqu|uw}vu{ttzttzsuzsuzty}wu{stzsvztx|vy~xw|utyry~xsxr{zv{uw{vz~xx|vx}wuzsvzt{~yy|wwzu{~yy}xx{vw{uz~yy}wy~xx{vz}xx{vx|v{y}|vzt{~yz~yy|w}|{}x~|y|w{}y}|x|vy}w{}y|~z~|{y|~zz~xy}xz~xwzu}{{|y{~y}{z}xwzu~{|~z{}x|~y~}{y|v|{}x{~y}{|}{~|}{}z}{~|}}{}{}{~y~|~{}|~|}{|}{{x|{|x~}}~{~|~y|~z|{|~~z~{|~}}z||x~~{}~{{~|}~}~}}y~~{}}z}}z}|||~~{}~~z}|y}{|}}}}~}~|~}z}{}~|z}}y~}z~}{|~{}{zw}}|}z~|~|}~{yw~{~{~|~|~}{~|z}~}z~|}~|~|}|yw}{y~|~|z~|z}{x}|z}~{|z|z~}{~|z~{y|z~|y|z~{y{xv}{}z~|}zy}yx|yx|z~{z~||zw{wvzxu}zy{zyut|yw~zx}{}zx|ywyut{z~{y{wu}yw~zy{z|yx{wv{wu{wuyuszwu}yw{xvzutxsq|xvzy|xv{vtxrq{vu|xv{vt{wu{vuztr{ut|wvxsrztszts|vuwqpvpoxsqzsrzsrzsqxmmc-,dfededdfhgchgfhfgfihjgjkjighihiijkklijlkmnjlklnlllmknmnnmmomnlommnjlknlmqmmppnoonopmnnopoooooqponpononnnnrpopooplnooorkkmnmnomlmomokomklmjkmlllljljlllmmlllkjklkilkjjiihjeigigighfhffgebieefd4g4pynszrpvoqwptzrqxpszssyqtzrsyrtzrsxqy~wx}wsxqx~wv{tv|utyrsxqx|vw|uuzsuzsx{vx}wx{vw|uw|vy|wy}wzy{yx|v{yw{uy}xx|vy}wy}wz~xy}x~|y~xy|wy|wz}x~}{~yz~x|{|{z}xzy~|{~y~|yz~x{~yzyz}x~y{w~||z|z}z{y}z}{{}x{~y{}x{~y|~y|~z~|}z}{}|{}y|w}{}~{{}y||}{}~z}~|}|}y}~z{}y~|}}z~|~~||~y~{|}|~z}{|~z|~yz|w}~|~~|}}~y}}z~|}~}|~{||}~}|~~{}~}{~~{}{~~~~~|~{|~}{~~{|}}}|}~{~{~|~{|~{}}~{~{~|~~}z}z}~}z}z|}~|}{~|}}{}{}{~~|}{}{}}{~}~}{y~{}{||{x~}|z~||z|zw{y}|~{y}{}{}{~zw~|~zy~|z}zx}}yw}{y}{}{}{y{y~|y~|~zx|xv}zx}{~{y~zx{z~{y}zx}yw|ywzvu~zy}xvzvt|z}yw~zy}yx{wv|wu|yw{wu{vt|yw{vu}xv|wv~yx~zx~zx{vt~yx}xvzut{vuzutytr|wu{ut{vtzsrzuswrpwqo{tsyrqytszusyrqzts|utwnmf//dddedfhdfegfihiggkkjjhhjliikikjljljljkkmmkmjlmllmllkmlkkllmllknmlllmlnknpnpnonlmnpnmnpollmpnonmnqpnpnoolqlmnpnonlnooonomonpnnlmnmnlmllmmlkknkmklhllhmllliijkkljjijhkhjjihighjigegheeffecede7i7pzov}uv|uv|ut{rtzrw}ux}vu|tx}wu{tv|uw}uuzsv|tw}v{zy~ww|vuzty~xw|u|zx|vx|vw}vy~wtyrz}xtxqtyrv{uz~y{yx|vz}xy~wy}w{yz~x|z{z}z~yz~x{z{~yvzty}wx}w{~xy|w{z}{{yy}w|z{y}{|~y{y}z}~|z}x|z|~yz}x{~y~|y}x|~z|z~{}{z~xwzt}{~|~y~{~|}~|~}}~{}~z~{~z|x|~y~|~{~|~{~|~y}|}x}}~~~~}~|~~{~}|~}}~||~}|}~~z||~~{~{|~}~||}z||x~|~|~|~{~z}~}|y}|y~{}}}z}~~}z}}~~|z~~z~}|~|~|~}~~{}{~{}}~}z~~{~}}}{}{}~|}{~|}}|zw~{y|y~|y~{x~{y~|y~zx}}zw|y}{~||yw{z}zx~|~||yw|z~yw~|~{y~{~zy}yx{y}zx{yvzvs|xv}yw|z|xv|xw~yx|z|wv|z~zx}yw~zx{y{y{wu{z{wu{vu~zy}yw~yxzvt}zx~yw~yx|yv|xv}wvzus|vuzts}xwytr}xw}xv{us{wuytr{ut|vu{vtysq|ut|wuxqpxrpysq{rqk99edeeffefegffgihfigjijjjikjekjjklijkkmjmmkilllmklmllmmmmljponjnjllonnlmnlnqnompmlpopqpnpmorpoonlpnopnopnmomoonnlnnoknoomljrmnlnolmlolmlmkkljokljlklmlkmimljiikjjijikkjhgihhkefjhhffgffdffd7i7pxnt|sv|uu{tv{uy~xtzru{sszru{ttzruzsw|vw}vv|ux~ww}vuzsv|tx}wpvnx~wvzty~xv{uw|ux|vv{uw|vtyr{ztzsx}wzyy~wy~x{zx|v|z}{}|z~x|zy}w{y~z}x}{y}wy}wz}xy}xy}w}w|u|z|z{}y}z~y~|~{|~y|z{~y}{~|~|}}~|{~y~{~y|}{}~|}{|z|z{~x~{~|}{~|}}}~}{~{||~{}z}~}}z}~~|{~~|~{~|}||~~{}~~~{||}x|~||~~~~}~{~}}~{}~}z}}||y}}~}~|~{~{~{|}}~}~}z~~{|}~~}}|y~{}}|~|}z||z}}||~||~|z~|y~{|z}z~||z~|}~{}{~|~~{y}{~{y~{y|zw|y}{}}~|z~{y~||{~{y~{y~|y}{|~zx{y~|{y}{}{|wuyx|xv{y}yw{z}{}yw|xwyx|z}xw~{y}yxzy~zy}xw{x}yv|xv}xv~zx|z{y|vu}yw|wu}wu{utzy}ywyw{vt{wuzy|wv|vuzus}xw~yx|xvzy{vtxrqwpo~xw|vu~xw|utzsr|ut|utwmlh54eeeeeehihggihifggiihihjkkkjjjljkjliljklllkkljjknjnolmnmnlpnokonlknmmnmmoononokoommoopmopknnoqonpnlnnooqmolqpmpmnmplmklnlmmkmmmllklmmmmmlkkmmlklklmljkmmijklkikkhjjjhihjiighfgiggggfgfge8l7qzosxqw}uv|uu{ssyqszrv|uv{ux~wtzsu{su{sy}ww~vv{utzrx}vv{tuzsw}vuzsw|uy~wyxx}vz~xzyx|vy~xw|u}{{yy~w{z|zv{tz~yzyy~xx|vz~x{y}{}{|{zx|z}{|{}zx|yz}x||z}||z{~x|z}{~}z~|}{}|z|~z|z~{y~{}{}z}z}{}{}|}~|}z|~z|}~||~y}z}{}}~z}{~|}}~z}|~y}|z~}}~{~}||}}}{~}{}}~~~}~~~|}y~~~}}~{}~~~}|}{}}}|}y~|}~{}}~{~|~}}~||~~~~|z~~}~|~~|~|}}}{~~{}~|}}~{}}|||z|z}{}{}|}{~zx~||z}~|}~||z}{{y}{}{~}zx~||z}{~}{}~zx}{|z|z~|~}}{~zx|z~yx~yx}xw}yx}xv{z|wu}|zx|xvzx~zx|xv~yxyx|{|zzx|wuzyzx~xw~xw{wu}xv}vu{vu}wv{zzus{vt{yztr}wv|utzts~xw}wv}xvzsrztsysqxqpwomj<;egefdfgfefgiejjhjjkkhgjkhimilljjklkimilmljlllmmmmmnmjhmjmmllmoklommmonooqopmnnmomoqmnpomnomomqmnnmnnolmomnmlpnmplkmlmomnmmmnkmklmollkjojmklmijmjklilkjjjjkjjjjjkkihhiiigggifhfgfgeecg7h6pzosyqv}uu|tszru{tpwntzsw}vv|tv{ttyrw|uw}vzxszqzxw|ux~wv{tx~wu{sv{tw|v{yx}vy~x{zw}v{zx}v{y|zx~wy~xx}vx}w}{zxy~w}||{y}w|{z~xx|vyxz~x~}}{{yy~x~|~|{zy|vz}xz}w|z~|~{}{~{}{}zz~x~|}|y}|z}|~||}{~}~}~|}{~~|~}z~}}}}}|}}~~~||~y~~}}~~}~}}}|}}~||~{|{~~z~~z~}{~}~|~}z||~|~}~|z}}~{{~{~|~{}}}}|z~|~}z~{y~|~|~{~||~|}}{}~|}{~||z}{}|z|~}}{}|z~~||z~|z{y|z~|z}{}||xv}z~|~zx~yx|xv}{{wu|z~yx{y~zy}yv~zx~{y{y|z~zx~yw{y~zx|xv~yx}wv|z}xv}xw}xv|xu}yw}wu~wvzx~yw~zx~wvywzut|ut{vt|vu}wv|vtyx}wvwonyqp}vu~yx|vuyrp|vu|tsj<;geedffhghfggihjhihiiihikjjjijkjljikjkkjlmjlljnmkmmnkoknnnkkknmmooollnmlknnmlmonnooppomooplqpnqnonnmlnlnnnmpnnlmojmnmknkllpllnknkmllnknnjklnmlhkjjliilikihjjikiikhijekhjghggggfhhegc;j:vut{su|tqypu}tw~vv|tx~ww}uv|tw|uyxsyqzxzxv}utzsryqw}vx|uzytzs|zx}v{zw|u|{v|uv|t{y}{w{u|zy~wy~w|zx~vy~xv|uzxz~x|zzx|zy~w|zzxz~xy}w~||z}{y~xy|v}|{}z}w~||z~|{y}z}|z}{{~x~~|}z{}x~||~||y|z|z|z{y~{~}}{}~|{}z|~|z~~}~}}}}y|w}~|}~||{}w}~{~{~|||}~}|~~~}}|~{}~~~}{~~}~}|}}~}z~~}~~~~~|~}}|}z}}~}}{|||~~|~{}|}{x~||}}~|x|}~~}z}{}{}z}}{~|~{x~{y{y|z|z|yw{y|z~{y|y~|{y|{~|~zx|z}||yw}yw}{~zx|zzy~{|y~xv{y{y}xv|{{y}wu~}{y~zy~xwzyyx{y{y~zx~yw}wu~xv~yx~zxzus}wv~xw}xv}xv~yx{vt}utzsr{usysr~xw{vs|vu}wv}wv}xvzrqyw|us~wv|tsm>=fffhehgiihhhhhhhijiikmjkihljiiiikjllllmlmkkmikkkolmkmmlmllllmlmonjmmomlmnlmoompknqmoppnppmmmnnonoooomnnpmmnmmomlnnlllmlnoommnllnkknliljlnknljklljljjikkmliiiigjhikhjhihehgfhghffd;k:pzouzrx~vw}vtzsqwou{su{stzsx~vyxw}v{zx~vx~wyww~vx~ww|uy~wx}vy~x{yyxw}uzxw}vzxy}wv}ty~vz}x{zy}wx}vw|uy~w{y{z{y|z~|}{{yx|v|y|z}||zzx{y~||z~|~|~{{yzx}z~|}{|z|{y~|{~x|z|z}~{~||z}{|~{}~}z~~}~{~~}~|~|y{||~}}{~{~~{~{~~~|~{|~y}~{~{~|~~}~|~}}|~}~}}}~~~~{}}~~~~}}~}~z~~~~}z}~~{}~|}z~~|~||~||~~~|~~~~~|~}{~}{}{}z|z{y}|}{~{y}|~|}z}{x~{|y{y~|z{y}~}{~|}z}{~}zx{zyx{y}||{}yw~zx}xw|z{zzx}wv|{{y~xw}wuzx}xv}wv{vtzy{us{ts}vu|wu|vt{vt~yw}xw}wv|utzsr{z~ywzy~xv~xv{us|vt{tr|ut{rqm@?dgffghgggeghfkhihijjlmlljkikhlkkikmjjnklllilmnkmklmlllmlmkklmlmolmonomnmnlmnponkooqpmomolqmoompnoooknkmolommkomnoomnnommllojmklmljklmmljlkljlhkkklllljiijjkilghiigigghighehfefd=k=v~ut{rw~vw}uw}uu{sx~wv{sw~vw}utzrw}vyxw}uzyyxw}vx}vx}v|zw}uw}v{zy~wx}vw|u{y|zw|uzyx~w|{{xyw{y|zz~x{z|zy~w|z}y~x~|x|u~||y}|~|zx{yy~x{y~|~}|z~~z~xzxy}w|z~}~{}{~|}z}}{}{}w~}{}~z}z~||z|z~|~}~~|~}~{~~{~}z}z|~|}|y{~{|~~~~}~~}~|~|~~z|}{~}~}}~{}~~}y|~~~|~}}}}~}~{|||}}~||~~}}~{x}||z~~}{~{~}}z||z}zx~|{y~{y|z~}~~{|z~~yv}xw}{~||z~{y~zxzw|z~yw~yw~|{yzx{y|z}yw{y~||z~xv}wu|{{us~zx}wu~}~ywzx}wu|vt{yzx~yw{y~yw{vu|xv|utyw|utyx{utzsq{zzyxx~xw}wvztszy{ts~yw|z|vu|usl@?fggegfiiggjhijiiiikkkhjhjjlkkjlljkkkjjllmjljmmlinmmmllknpllmlopmlnknnmnnnnnnlpmnqmnnmpmmommpnonnnpmllnmnmnnmnmnmonlnknnnmlnnkkmnmlkjjlkhkkjjkkhljlhhjjliiijjikjhfjgfgfgfhgfdfAm@w}uv|trxpv|uy~wszru{tv}uzyw~vx}v}|zxv}tzy|{zyy~wx~v{zywzxx}vy~xzxzyzxy~wy~wx~wy~w}{{yzxzx{y~|}{|z|{{yzx|zy}w{z}{~|}z|zx}v|}||z|z~}}{w{t{~x|z}}~~{}{z}w}}{~|}z}{}~|}{~||~y|~|}z||z~|}z~|~}z~|}~||~y~||~~}}z~~}~}z}|~}z~~~~~|~|~~}|}}}|}}}~}~}}|~~}}~}~}~|}}{~|~{|y|~|}~}{~}z~|{|z~~~}~{~|z~{{y}{|y|{}xv}{{y|z|z{x~}yw~||y}{}yw|z~zx|z~zx}{zx}|}{}|}{|wuzx|{zx~xw~xvzx}|~yw~xw}wu{yzx~xv{uszyzxzx~ywyx{y{ts{tr}wu}wv~wvzts|vt}wu|vt|uszrqi=l=u}ttzrs{rywx~ww~vt{rxwv}utzrv|tw~uzy{y{yx~vw~vzy{y{yx~vyxzxzx|{x~vy~w{y{y{y|{x~vzy~}~}{y}{}{y}~|z~w{y|z}zx}{~}|z}~|}|zyx~|}{{yz~x}{{y}~|~|}{|z|y~|{~x~||z|~}{}{{y~{|~{}}||}~}|~~}~~~~}}~{{|~|~}}}}~|{~{||~}~~~~}~|}~|~~~{}z}}||y}~}{~|~{y|z{y~{}}|z||~~|}}{~|{{yzy|z}{{yzxzx|zzy~||y}{{y|z~ywyxzyzx~|z|z|y|vt|{}|}{}xv|z~wv{yzxzx~yw|wu|vt~wv{yzx~xv}wv~|ywzx|wvxvyx|wu~xwzx|z}vu~xv|utlDCfhgghhhhiifgiiiilkgghhjhikkklllkkjlimmljljllmlkmmmlljlmmlknlmlllklllooookplnnmormolpnpmkmomommomoqlklmqnmmonnmmmolkmlmkkmllllmnkplijllilklmmjjlijfiiihkiijhkjgggghghehg@j?w~vu|tu{sx~wx~wyxv|tu{szxv{tw~ux}wzyzx|zx}vy~w{yzx|z{y{zv|uzxv|uyw|z}{{yy~wyxzy{z}~}|z{y|yzx~}||zzx{yy~w{y~}~|~{|yy~w~|~{}{}z~||z~}{}|}|~|}}z}}z~{}~{~|}~{}z~~}}~}z|~~|~{|~}}z~~~~}}~~}}~~~~}{~}~~~~|}}|}~~}~~}~~~}}{}}~|}~~|}|}}||{y~}{|}|~|~{~|}{}}z~}}{~{}{}{~|}z{y~yw}~|~}}{|z}{|zx~ywzx}{{y}{~ywzy}|{y~xw|xu~|}wu}|}xu}wu{y~zxyw{x~ywywzy~ywywyxzx{y|vuztr}wv~ywxv|tsyw~vu~xv}xw~xw{z|vuzrqrKJhgeejgfggihihjiijjijhkihijjllhjkjnkkikjlmlmmllqkolllpjllmmnmplnmnnolmmnnnmnonomnpnnnnnmopoknnoplmnkmonomnmnlokmomjmmkmmljmmjljmkkmlnkknikihiklikhgkgijjihhihhiigegfhfGoFszqx~vyxzxv}uzyx~wx~wywx}v{yzx}|y~wzy{y|{y~w{yzxyw}{{z~|x}uw~uzyxw}{|z|z}{{z{y{y{yzx}|{y~|{x|{}z|zz~x~|{z}{y~w|z~|}y}w}z}{|z}{}{~|~~{~|~}}~}}z}}z|y~}}~|~|~~|~~{}{}~}~~~~|~|~~~}y~{~~~~~|}~~~}}~}{~~~}}||~~~|}}}~{~~~|}{~|z}}}~|~{}}}z}~~|~|}{~~|}|}||z|{}|z|z~zx}{~~zw{z|~|}{y}{|{zy}xv~|zy|y{z|z|vt|z~|~xv{yzy{tryw{y}|zxyx{us}wu~ywyw~xvzxxv~xw|vuxw~xvywzxzy~xv|us|{}wvxw~yw{uslHHfeggghgfiighgkiijikfjimjkhjkniklkliiinjljjinmmmmjmljlmmmmlolmmmlnmllmnlpnnpoonmmmolnqmlopmlomomolmpppqnmkjomknlnnkjllllmmkmlnjmojljjjijmjijkklkjkghihjiejjhkhhhggggEmDv}ux~ww~vw}uw}uv}tzyv}t{yzx{y|{v|txwy~wyxxwyx}|}|yxzy{yyx{y|{y~wy~w}|x~v|z}{}{y|zy~w~}zx~|~|~|zzxzw}{|{y~x|{y~|}z}}{~|}|y}w~||z}{}{~~|{y~|~}~~}}~|~|~||~{~~}~{}|~~}}~~}|~}~~}|~~}~}~z~}~|~}z}}}z~~}~~z|~~~}}z}~{~}}{~|}}}zx}~|~{y}zx~{}}~|y|z|z}{~|}}~zx}}{yyw{y}{}}{{z}|z}||z|z{y}wu~|yw~xvxw|z|z{z|vt{y|zzxyw~xv{y~wu{yzxzx~yw~xv~ywzxzx{sr}wu|vu~wv}wv~xw{srxwqIIehiiighjhgiijfliiijlhlkilkiklkoiimjjlnlkjjmjklmknllmmmmllmlnmmkmlomnonooknmknponpmnmmoompmlnnmjnmlnkpnnnkmmjkmlmklnlnlkmjmjklmmjlkkiijkmllkiihkfiihiihhiihgghfggdHnGw}uw~vzxzyv}uy~wy~vx~v{zzyzxywu{sx~vx~wxww~vzxyx~|yxyx|zzy}{x~vy~wzx}{{y{yzxyxy~w|{~|zzx{yx~v}|~|{y{y~||z}{~||z|y{y}{|z}{zx}{}|z~~~|}{~{y~}}~|~~|~~}z~}~{~||~}~~~}|~|~}~~}|~~~~~|~~~z}}}}|~}~~~|}}|~||~}}{}z~{~{}z|~}|~~|~|~|z}|}{~~}vtzx~{|z|z|{|y}|z{y|z{y}|{}{~|}{~}~||z|z}{|{{y|{{z~xv{z}{|zxvzxzy~xv~ywzx}{zx|z{yzx~ywyxywyxyw~vuyw}xu~xv~wuzy~xvywoKIfefhhhggghhjikhijghhjjijjijknklijjjkljkllmlmmlniljlnnmlnonnmnlomolmllmmmmnpomomnmponoomlnmnmolloommmllpnmomlllnmlkkmilnklklklkjjllnlhjljjikjhjkklhhhjjgehjggffgHoHw~ux~vw|uw~vt{sv}uszqu{sv{sx~vw}uyxx~wzy{y}{zyx}v|{zx|{{y~||zyx|z}{~|}zxv{yy~v|z}{~|{}|zzx~{z|{|zz~w~|zx}{}{}z~~|{y~}{~~|}}~|}}|~||{y~|~|}}~|}z}z}}|~{}~~{}~~~}}~}~}|}|}~}~~{|}~|}~{~~}||}}}}}z~|}~}~{~zw~~}}{}}z}}|||{~{|wt~}~{z}zx}|z}wu{yzx{y}{}{zx}|~|}zzx{y{y{y}||zzxzx}{|vt{y{zzy~xw~~ywyxzy{trxw~wuyw~xwxw{tr}vt}vu~xvoHGhfkiihhfhijjijiihhijijilmjkljkimllkmmkjkkljojlmlonkmnnnmoomlnmkpolokmnoorollmlponnmlnnolnkpmkonompmmnnnojklmlnmmlkmllkikmmjnmiljijkjjiillhjiiiikjgfkhgggihjjeNqMxwyww}uw}vzxv}tx~vw}ux~v{zx~vxw{y|z}{|z{y{z|z|z|zzx{zzxyw}{{yyx~|yx|{~}zx{z~}{yxwy~w|z~}zx~|~zx~|}{~|}~}}}~|~{~}|z~|~~}~}}~}}~~{~~|~~~~~}{|}||}}~}~{{}}y~|~~~}}~~~}~~}||}~}z~~|~}~{~~~{~}{{z~~}{|}}z~||z}|z~~|{|z}~}~}~||zzx}{|z|{}z~{z{y}{{y}z{y|y~||~|ywyw|{zx~yx{zzxzx{yzy|zzxzxyxzyzy{y|usyxxvxw~|{zywzxpNMghggiiiihkihijkjijjikjhlkjjkmimlmmikkljjllmkonlmjlmknmmllljlknollkmmnmkonnkmpkoolnnomnnnpmnmmlnlllnolmklmllmnkmljmkmlnmlkjlllkkikjjjjgijiigikhijjiiiggiihecOsOyxx~vw~uv|uyx}{w~vw}vv|t{yy~wywxw{y|zzy|z}{}|zxzyw~uzxywzx|z{y{y|zzxzy}{|z}zx}{zx|z~|}{~|}zx}|z~{y}}z~~|z}}{}}~~|z}|}}{|y~{~{~z}v|y~}|}|~}}~z~}~}}}~~~}~~~~~~}|}~|}|~~|~{~~{~~|}~|~~||{}~{}z}}{}}~|}{~~yx}{{y}~}|~~|{y~{y|z~|}{zy~yw~~}}wu}{}{~}zx{yzx}z{y}|{z|{}{}||{}xvzy{y~zw~wv}wt}wu{yywyx~ywzx~yw~xv|z~wv{utqPOgfghhifikjighiiliklkjijlglhklljjkjjjjkjkmjlllmlnmlmnmmmkllmnmlomnlppnlnmlnmmonponolnmnjnmkmmmnmmmnooknnmjlnnnmljmmkllljljllljkljkgjjlgjkkjhjihijghiiiihhgRsQ{yx~w{y{zzxu|tx~vyxyx~||z{yywywzxxwzyywzy|zzx}zy|z|{{y}z|zzx~}{{yzx~}}{|z~|y}{|z~~{~}~|}z}z}~}{y~w~|~~|~}{}~~{~||z~|z~|~|~~~|~|}~{~~~|~}z~}~{}z|}~~}~|~~~~~}}~~~}}}~~|~}~||~~}{~|}}~||~|{y~|~|}|{~|}~|~xv~}~|~|~}{y~}{~|}|~|}{}{}|z}{|{~|}{{x|z~|ywyx{yzx~|}wuywzx{y|z|y}||z}{{y~yw|z}{ywzy~wv|{yx|vsyx|z{z~xwyw~xvqRPgghhgfhiijikkgjkiijhjjjlikknjlljljllmkmjmlknmkljmknlklnnmlnkmnpmlnllomlomonooknlmlnopllkplmomnlpkmijnmnnnlinkkklkkkljlnljmkkiijjhimhjhijihjhhiehhhigiihUsTu|sx~vxwywywywxwywy~w{zu|szx}{|zzxu}szx~|{zz~x{y~|xwxww}u~|zx}y~w{y|{}{|z~|~}|~||z~|~|~}|z|z{z~~|}~}{}}~~~|z}~|~~}~{}|z~|~~}{|}~~~~}~|~~~|}|~~}}}}~|~}~|}}~}{~}{}z}{}~{y}}{}||z~||{~{y~}~|}{|z|zzx{y}|z}{zw}{~|zx~{{y|z|{yw~|yw~xw|zyxyw}wuzxzxyw~|{zywzx|zzyyw~xvyxyx|zrSSffgihihikjhgfjjjjjikijiijijllmnkkjiiklkmkklklmjnklmnklnnmnnlknnplmmllpomlniqmpmmmmoomklmrmkmkmmojlmlmnjlnnmljkllljlmmkklmjjlkkklggknkjjkkkghjfjhhjjdfSsQzyxwv}uzxw~uxwywzyzyyxxw{yzxzx{y{z|z~}~}{yzx}}}{yx|z{y}|{yyw|z{z{z}~|~~|}~||{}{}{}{}{|z~|~}||}{~}~}~|}z~~~{~~~}|}|~~~~~~~~}~~}~|~~~~~}~~~~{}~~~|}~{}~{~|~~~~}}{}|{y}~|}}z|z}{{y}{}{}~||}{{xzx}|~{||y~||z|z{y{zzx{z}{}{}{zy|z}|~|}{|z{yzy~xvzyyw|zyw~xv|vtzxxw|zzy~wv~xvzyrTRihgjhgijihihijhjhhkiijkhljkhiomkkomkmnkmjmmllmmokommlmllmlomnmkkmoonomonllmmpmlnkmlnmmnokmlnomllllmjlmmnllmmkkmjknjlklnlljmmkiiijkkijiijkhhihihhhhgUuUu~txwzxzxzyzxy~w{zzxzx~}w}u|zxvx~v~||z~|zx~|zx{zyv|{xv{yx}v{y~||z~|x~u|z{y}{}{~{z|zy~w~|~{y~|v}s{x~}{|{|z}~|}~{~}{}~}~}{}}~}~~}~~~|{}}{~~~~{~}}}~|~|{}|~}{~}{~~|{y|{~|{}~}}{}{|{|}{y~|~|}{}{}{~}{y}{~yw}|}{{y}{y|zzxzx|z~|}~{|{~ywyxyxzy~yw|wu{yxw{yzx{zyx~xv}wuzy}wu~wu~wurVUfkghfhgjhjiikikijjjkkkjjkkljlklkljkjknnmlllmmmmllomjlklljmjlmlnoklmopnlmponlommmknlllmmmnlmolmmkklmkjllllnlkjmmmkmjjllkllkhhjjhjhlghijgflgfhgihghWtV{zy~w|{x~vw~vx~v{yw~vy~wyvywu}tzxyxzx{y~||zyw|zzx}{}|}z{yzy~|z}{}{}{|y~||{~}}{~|}{|z~{}|~}||}{|z}~~~|~{}~~|y}~}~}~|~|}}{|~}z~~}|}~~~~~}~~~|~~~~~~~~~}}~|}}}~{y~~|~}~|z~}~~|}~}|}~|}z{y|~|}{~|{y}{}{y}~||z~||z~}{}{z{y|{zy~}~xv~xvyw|{{zzxzyywzx}{xwxv}{zy}{zxtXWhihiiihjkikiigjmkjllkkkkiikllkllmikllknlnmkllllmlmnkmnmlnollokklnooqoroomomonnmolnpllmmnlnklmmnllmjlmmmjjmmkjknkjllllmljlllikghgjjkfjhhikghijigVsUzyv|tv|uy~w|{zxyxzx~yw}{{y|{x~wzyx~v|{|zyx~}~|}|{{y}|zxyw~|~}}~||{|z|z}{|z}|}~|~|}{{y}{|{}~|}~~|}~|~~~{}{~|}|~|~~|~~}}~z~~}|~~}~|~}}{}~zw|z~}{|}~}}~}~|}~{}{~|~}}{{yzx}{~|~|~|}z}{y}{~yv|z~||y|z}{|{zy{y|z|zzx~}yx|z{zyx}yv|zyw{yyw}||uszyyw|vtywv\[giiejhiihfkhjhjkjjilkjkljmklijkljkkmkmolkljllkknklklkmlknlnjoomnmlmmmnnomlplnmnklnmnmmmnllkmmmlokjllmjklmljnjllljiljljgijkkjhhkkkiihjkgfkhifgYtXyxzy{yw~v}{{yxww~v{zywzyy~w{y|{{zxvzxyw}|zzw~|{z{yzx|z~|~||z|zxw{y|z}}}|yv~~|~~|{y}~|~}~|~{}}|~|}~~|y~{}~}}}|~}~~}~~~~~~~~~~z~}~~~|z~}}}}~~~}{|z}~~~{~~|{}{~|}}}{x~|{y~||z}{{z|z|z}{y{yzx}|}{{xzx{yzxzy|~wu{yzx|z}{|zxv~xv{yzy|xu|ts{y{zzxw^]igjhejhhjjiihijkmjijiikjkjkkkjkllkkjjllnmlmnknmlmkmllllmnonmmpmnlnnnnnmmnnnomnkmlnmmommjmmlknkmjlimmlhmlilkijlkjjhkijkkijhkikhjjiiihhijfihg\v[zyy~wyw{zyxw~u{y~}ywzxzx|{|z}{{yzy}{{z}{yw}yx|y{yx~vw}u{y|z|z~~|zx}{|z{zzx~}{~~}z}{}{~||~|~||~}{~|~}~|z~~}}|||}~|~~~~}~~~~}z}~~|~~{}|~}~{}}|y~{~}{|z|y}}|z~{|~|}{~zy~}{~}}}{}{zx~}yv~}{xzx|{}{xw{y{y}}{~{z~yv}{~xw~|||zxywzxzy{z}{|zxwyw}wuv]\hfihgklhijhihjljkikliiilkklmjihmkikmlljkjnljllimmnnnmkmmmjlnmllnomnomjojkoomllmmmlmmonnplllkmmmkllklmmjllkmjkklkhjklljgljjlkkkhkfijlihhg g \u[xwzx{yxwyw{yxwywxw{yzxzx{y~|{y|z{y}{zx}{}{y}{~}|y{zzxzxy~w}{|z|z}}}{}{}|yw}~~{y~|}z~||z~|z}~~}{~|}~~~~{~|~{~~|}~~}~}}}~}|~~|~|~||y}z}{~|~~~{~|z}~|}~}}}{}~{~|~}~{x}}{~{y}}}|}||z|{~}{}|z~{z|z{yzw{yyw|z{z~}|yzx{y|z~wu{yyxzyyw|{zx{zu^]g jhfighjjihjikhiiklkjiikjknlkklmnnllkmmllkmmmlkkokklnmmlmnompmonmklpnomklmomlllmjlnlmkkkomllokmkmklhjkmjmilmjllimmjjjhiiiikglhikhjjiifjZuX|{{yzyzx|zzxzwywzyzxyxw}uyx|z}zx}{{zzyywyw~}yw~{z~|}|~|}|}{|y}{~}}{}~|~}|}}~}{}z~~}~~{y}}{}~|~~}~}~~~|{~|}}~~~}~~~|~|~~{~~|}{|y~|~|~{~zy|{~|z}|}}}}{~|}|{}~}{ywzx}}{~|zy{yyw|zzx{zzxyw}{{y~zxzx}|z}yxywxw{y{y|{ycbj gijgjjhgfkihilljkhihjihjljljkklllilklnpmmmlnlknlnlnmmlnlnmlomlllnnkmnlkqknmklmnlnmllkllmknjkmkknmhnljimiijnmklgjjkijljkiihjikhkihhij`x_v}t|zy~w{z~ywv~u{zyw{z{y~}|z|zx~v{yzxxw}|~|{y{y}{{y}{|z}{~|}|{y~||z|zw|u{y{y}|~|}~{~}|z}~|z~~}}{~|}~}~~~~}}~}}{~}{}~{}~~~~~|}~~~~}~~{|~}z~|~{|~}~~|{x}yw|~{}|}{}}~|~}{}~|}|}|{xzy}|}{|yyw|z}|z}~}yw}|~}zx{y~}yw{y{z{yxw~yxzx~xvu^]ikigjjklgikjjjiigjhmlikijmlkjkkklmkmllllkillllkkmlknlmmmmlonlnonmpmllklmlkllnljnllmmlmknkkkkmmnnjjkkmkmlliikijiihhlkkfkjjkjhhhijhghe{ex~v|{zxzxyx}{{y}|zy}|yw~|~}{yzyzx}{zx}{}{}|zzx|z{zyw}{~zxyw}z}{}}{~||z}{~~~}{~~}|~~|~~}~|}}~~}~}~~~~}|~|}~~~|~~~}~~|}{~{~~~~|}{~}}{yw}}{}||{}|~|~|~|~|}{}{}{~|zx|z}{}|}}{yxzx~|}{{yxw{z|z~wuzx{y~}zxzxycaihgiggjlhhijihhiijiliilljjjminilllkljjlilkjnllmkjlnklmlljlnnoonnmommoonlmlnnknmmlklmmlljklinmkkjkkkijkkmkkjijkjklihhghhijklghhkf j `v_|zyx{y|{{zzyw~u}{|{}{zx}{}{{y{y}zxyx{y}{}{zx|z|z{y~}}|w~uzx|z}|zzy|z~|}}~|}|z}|z}}~}}~}}|~{}~}}{y}~|~~~~~~}~~~|~~~~}~~|}}}~~~|}~|}~{}~}zw~|}{~|}~}~|}|}}{zw|z~||{~|yx}{}wu|z}|{yyw}|z~||z}{{y}{}|xwzxzx{y{yzxwb`hikkgjjiiiigjkijmmiilljjijllkliljjlmlilillmllmnlkkkmllmkloljlnmoomoolmmlnknlllnjlmklmkllmjjjmkjjjkklkkjijkhjjmjkjjfiijghhihjih f _t^{z{z{z}||zzxzx|{w}u|z{z{z|{zxzy}|~|z}|z}|}{u}s}}{}~~|}{~|~|~}}~|~|~|{y}{}|~|~~{~}~}|{}~~~}z}~~|~~~~}|~~}~|}|y~{y{y}}|y~}~{}}}{}}~|~yw}}}{}{~|}{~~||zzy|{}}{|z}{~}|}|}|~}{z|yzyzx~}}{xw{z{yyedihkjijjijjhhjljkkijjjjikijkjlmjloimlkhjnmlmimnmookmpnnmnmnmmlnomnmlmmoqnolmkkklmlknmlnllkjkiknlilmkkjkkjkjlkkgiiiljihiikjhjgidwcxwx~wzy}{|{xw{yzx|{|{{y~|x~u~}}~}{y|z{y~|}yx|y{z~{y{x}||{zy{y{yyx|{|z~|z~|~|}}|~}{~~}}~{|~}~~|~|}~~}~~|}{~~xu}~}~~}}~|~~|z~}}~|}||z{y~|}{~|}|{}{}{}||z~|}~|}{{z}{ywyw|z~{yzx{y|{{zzyzxxw{hgkglikgilihhkjijlikilikmklllklljjjjjkkkkjlllojmnmmlmnjmmjmonnmmkoklnlnnmmkmnnmlilmlpknijlknjmjmlkjlliljkokkkjkjkhiijkhhgjjhicxc|{|zzxxw|z}{zxwv~}}{{yzx{yywzy}{z}~|}{~|yw}{|z{yzy}{{y|{~}}|~}}zw~}~|~~{~|~}}~|}|}~}}~~~~~{~}~|~}~}}}~~||}{}}|y}{~|{z{y}~|~}|}{{x}~|z}{}zzx{y~~|~}|}{{y}{|zzxzx}zyxw{y}zxxv~xv~wv|z}vtyxxediiiggljkjgjhjkkkghkjjkkklljljkmjkklmilmlllkkonmlolnllmmlooonqnmnpnnomnlnllmkimmkkmljkkmhkjmmlmllimligiijihklhlhiljiihhfijcwb{yyxywywzyu}tyw}{yx}{|z{y{y~{y~xw~~}~}}{~}|}{|z~}{|y}{{y}}~|}~{}{~~|~~}~~~}~{}}~}}}~~~}{|}}~|}{}~}}}{~~~|~|~|y~~|{z~|yw}}~|}{y|y~|}{~|}{~xv|{~||z~|zx~}~zx{yywzx{z{yzyzyxw~wuyw{yxwxecghjhjjhkkjjkkjkkikiklkkkikkjmkkilllmkilklkklmjlojlnjnloklnnknmoommnkmnlnlklmlmlmkljkkmilkkjmikljjikgijkjiijijikfjjijjhih{g}{{z{z|{zy|z|z}{yx~||zyw~||z~}x~v~|}~|zx{yzxyx{y~|~}}}z|z}~|z~~|}~||z~~|}{~|}~}~~~}~~~~{|~~~~}~~~~~~}|~~|~|~}{y~|~}}{}}{}z|{}~~zx~~|{y}{{y}{}{{y~~{z}~}yw{yzy|z~|~wu}{}{|{}|{z}{{igihjhhigjkikmjilkhhkikllljljklnmllnkjmnknkkmmlknnnkminkmonoplnomlmlkllmkqkmhmmiljlnhjklkmjkjjlkjkjjjkjljiijhjjhiihjfeifzevu|z{z|z}{~zy}{~|}{y~w}{}~|}}{{y{y}|}|}{}|~|~|}|~}|}{~~~~|z~}~}~}}~|}~|}|~~~~}~~}~}}}~~|~~~}|z~~~|~}}}}~|}{~|}|}|}|z|z~~}{y~}~|~}yx~~xvxwzx~}}{yw|zzxxw|zzy{yyw|zxighiigijlhgkjiikkikljhjijllhkkkkjlkkjmlklpkkknnknljknnonoommolplpllllmnomlmmllmmljjkkjkmlklkijilljikiljhgjjhjjigjjjjhgzg~}}{{y~|xv|{|z|{{y|{|{~|zx~}}||{~|~|}~|~|}{|{|zzy}~}~|~{}{~|}}{}{~{~~}~}{y}{~}}~~{~}~~~~~~|}~~~|}|}~~~|~}~||z}}}~||y}|z}{~}{}{y{y}}{}{}{zy|z}~|}{}{~~|~}~|zyw}{|z}|}{zy||}{|z{y{y{zzy{jigghhjjkhkjkjklhhmkjkjlkjlnllkmkkklmjnkklmklkjlnlmonnoilnknpmlnomokjnnljmjnlkmmikjjkkmljljlkjhmjkkjkkjiljijklhjjghjyhw}u|zzw{y|z|zzyx~w}|{y{y}|{z~}zx}z}{y|{}zxzx{z|z}{~|}~|~~~|~||z~~|zx~{~}}|z}~|~~~}~~}~~{y~|~}~~}}}{|}~|~~}|}{}||z|z~|~~|}{}z}|{}zx}|z}|{y|{|{{y}|{{z~wu}{}vu|z|{xw{z{yygfihjjijkhigjijiklhkljjihiklimmlljllkkikjnlmlmmhmnlnloookolmnmmqklommjjlkmllmklkmnlkllmjljllljhkkkkiijjikkihkijijl{kx~wx~v}{ywzx~}|z|z}|{z~|{~zx{x{z}|~}{|z}{{y|y|z}{~|~~{z|z~}~|}}}z|}~|}~~}~}}~|~~}~~~|}~{|y}}{}|}~}~}}{~}{~~|~|}~}|{|z}{~|zx}~||{{y}|zzx~|{y{y~}~|{y}|}vt~wvyw~wuxw}|xv|lkjlikkikjiijhlikjllikjkjmojlimmjnlmlkkkljjkmkmkllkmmlojnnmponnmnmkkklmllllllljnmkkkljjikjikkljkkihlikkkijhhjhhm|l{zyw~yw|{}{{y{yw~u~|zy{yzxzx|z|{zx~}{y{z~}~|}{}}{~||z~}}{~|~~~}}}|}|}|~~~}~~}|y~~~~~~~}~~}~{}}~}{}}{|y}}}}{~||z}{~~~}|z}{zx{z}{~}~|}{}{~||{{y|z~}||zzx|z|{zxxv~||{|{{y|ljk&&hjijkiikhjkkjjgijhkgjljijljjljljmmmlomnkmlkjojmlklmnlonnnnnkmlmlkknklkllnkjljkjikklijjklkjkjmkkkiigjhiijgikziyww~v{yzxyxzxzxxw}{|z{z}|y{z{y~}~}|zzy|y}{}{~|}{~|}{|z}z}{|z~||z}~|}{}{~|z}~}{}~~~}~~|}~|~~||z~~~~~|z~|}~~}~|~}~|~||~~|}{}}~|{~{~|{z~}}{}{zy|{}|~~{zx{zyw~zx{y|z~}|y~}|}{{y{nmi$$jiihijkjiijlljkhkjgkkijlkkkjkmmmlkmlillknommjmnlmomkmmnlnmnlmlknlnmlkmnkmmmkkljllmklkkjkkikijhjjhihiihhjm|k}|x~w~|}|zy~|zx~}~|zx~}}{|z|zy~v~|}|}~|~|~|~}~}|}{|z~}~|}z~|~|}~|}~~}}~|}z}}~~~~~}~|~~}~~|}|~||~|}~|z}{~~|}{}{~||{}|~{~{y{y~|~}}}{~}~xvxw{y~|yw~|zy}wu|z}{{z{lkk&%giihjkhiijhjkhgjijjmkkkmilkjkinllkllkjmjjmlnnnjkkkmnmmnljkllklkkkmmljmjkkkklkkljijikjjlljkjijkhkkgjgh!h lzj{z}{yx~|zx|{|zxw}~|~|~}{~}{y}}{}{y~|}|~}|~}{}|~~|~}}{}}{}}}}~|z}{}{}}}}~~}{~~~{~~}~||~~~~~|~}{~}{~}~|~}~~~{y~~|{z|z|{|z~~~}{z}}|~}~~xw}|}}||z{z{y~wvzxyw{z{zzkjm%%ghgjjhjjhimkjikjijjijliljijlkmkmljnlkiklknllkkononmkjlmlllnnllmllmjlmlmjllklmkliijjjjjiikijikhiiigh)l)o}nyxzyyw|{|{zyzy|{~|}z|z~|~}{y~|y}|~||z~~|z~}~|~|~~|z~}}{}{~}}|}~~~|}}}|z~~||~~~|~~~~~~|~~~~~|~|}~|~||z}~|{~|~~}{z~}|~|~|}{}{}{~||zzxzyzx|z|{|z{y|{zx{y{z}trl''khikhjhjkkkkkhkjkhkkhlijlmlkjijkmlkjkmmnmlnkkkllolmllomkknlooonkklkkllkjmkjklljlihjijhikkkjkkijij&m%n|m|z{z{zyxw~u~|}|}|~|}|~}|{{z}{~~|{}{y~|}{|z~}|}|y|{~}{~~~~{~~}~~}{~~~||z~~~~~~~|~{}~}~|~|}~}|~zy}|~|{y}{zw}|}~{yzy{y{y}{~|z}{zx{z{z|{~wv~}zx|z|pnk))jihkijkkiijkkgihkkjiilmlilmjhjlkmnllllkjnnklommlpnllmllmlmlljjkjlkjljjkijklkhkijhjkjjljhiijkikk&j&lzj{y{z|z|zw}u}{}{{z}{}|~||{|zzx|z~}}{yw~|}{~{}~}}{}~~|~~|~}z~~}~~{~~}~~}~|~~~~~~}~||z~}{}}~~|{z~}{~|z~|~|~}~|~|{z{y{xzy{y~|}{{y|zyw~}~|}ut|{wv}poj--kiljiijigkkiihkjlmkijkklklljkklmklljkmllnlmklkmjlnnlolknmknkjkjmikjjkkjikjikjjjkiijiijliiiijh-l-q~oyw{zzyyx{z|z|z}}|{yzy}{{z}{}{~}||{{y~|zx~~|~}}}{~}~|~~~|~}~}~~~~|~}~~}}}~|~{~{y}z|z|z}{~}~|}}{~|}}|~|z|z|z{z}{{y~|{y~|~}}{zx}{~|{zzy{z{z~rpl+*jjfhjkjhjkhjkiijkkllilmhkjiljlkllmjiknnmmlollmmkjmlklmmmmmllkkljjljnmkjljjkjgliiiljjlijgjik%j$ts|{}{{yzx{yw}u{z{z}{~|~|{z}|~|}~|z~}{}{y~}{~|}~|~~}~}~|}}}~|}}||}~||~~~~}zx~}{~|{~}~}}}{{y{y}|}~}z|z}z~|}{}zy}{~|z|z|zzx{y{x}|~|{yzx{z|poo11iijgiikjiijijjijjiljllnjlmjkllmnllkkjklmknmkhjklmolmlmjkjnljjljklilmimlhijhikkjlkhjjhiijj+l*xvzx}|zyzy~||z|{~|{~~|}{~|{y~|~|~|z}}|{y}{{y~|yx}|~|}{}~|{y~}~|~}|}~|~}~}|}~}~{}|~}}||{}~}|}||z~}{|{|zzx|{{y}|zx{y}|}|~wu~trk)(ihgiihgjhjjkljilikkmklkjlljmkmlkmkkkmlknlmlmnnkkkljmnkkllkljkmjjlklllklkjljjihiikhhijhg/m.us|{}{zy}|}{zy|{|z{zxv}{~}~|{z|z}{|z}{}|~~||z~}||z|z}z~|~~~~}~~~|}~~|~|~~~}~}{~~~~~}{~~}{{z~||z~}~~}~~||{}|}|z|z}{}{}{~}~||{{z|{yx}{~wvutm22ihgjijkhihhhjjiljmlmjklkkkmlmlljkkkmkknnlmmkllljnkljlijmmkllkjkjlkjhmkkjmhjjikilkiigh/l.u~syx{zyw{z}|}zx~|zx}}{}{}|}}{}{~}|{y~}{~|z}|z~}~}~|~~}{|}~}{~~}~}{}~{~~~{y}|{}|z~|~|z~{y}~~|z~||z~|}}{z}~}~|}|zyw}{~|}{~}}z{y|{zx}zxwvm22giihiiijkjijjjihilljklkjlkjlmkinlnkkmnlnjmnminmljkljkkkklkkjlklhjmkjjjlijkhjjjikjgg0m0tsyx{y{y}{{z}{yw{y}{zx}{~|~|~|z~}}}~~}|}}{~}~|}{}|}~}~|~|~}|||~}}}}~~|~~~~~~~~{y~}|z}}}yw}{~|z~|{y}{}|{z~|~}}}||z~|}|~|}{z~wv{z}{|z|qpm33hjijjjhjhlkjjjjjkmlllijikkkkllkkklknnklknmnnnkmlklklmjjkmlmjjkkjifkjkkihiljjhjjij4l3tszxw~u}~}x~v{y|{zx|z|{|{~|{}~}{~~}|~~|z~|}~}}|~~~|}~}~}~}~}}~{~~~}~|~}{~}{~|{y~}~~}~}~}|z~||z|z}~|z}{{y}~}}zzyyx{z|z}}{zy|z}sro65jfikilkihikjjlhkjlkgikjmljlklmoomiklmnmmonmklkljlmlmgmljkjlhkljjjiljjhjjjkjiikh:n9vtzx{z}||z{y}yx}{}|~|~|{z}~|}{y~|~|}{}{{y~}~}~~}~|z||{|}{~~~}~}~}~|~|~~|~}{~}{z~|{y}}{}{}|}{{y}{{z}|{}{}{~||zzy{y{zzy{zp98ghjhjiihkkijjkljijjjmlkkkilkkkmkmmmmnmnlmnllmkjjljkkklklklljkjlikjjijijjjiijj:n9s}qxw|z|{zy~}~|{z{zzy}|{y~|}|{~xw~~}}{}}|~|~|z}}~~~~~~~~~~~~}|{}}{~}~~|}{}~|}{y~{z}~~|}}|}|~}~||{|z|{zx|z}{|{{yzxzx{z}||{~vul65fiiiiikjijiiljiiijmjhkkklkklikllljmmnnmljmllljlmkmlmkjklimkkkkikhjjhilkkihh2l1r|p|zzx|zzx{z~}|z{z~~~zy}|}{|{~|{~}~|}~~~~|{z}{~~}}~~}}~~~~~~~~}~|z}~|~}~~}}}{}~{z~}|~~|~|}|}{zy}|~|}{zyx{z}{}{yx|{}|vuk77ljkijkihjiihhjlkkiihijmjlkmjjkimmnkjlkmnmmlmlkkkmkmlkkkjlmkkklkgjhkjkijhk?r?yw}}|yw}|{z}|{y}{{z~||z~|z}}|}{~|}~|z}{~|}|~~|}~}}~~~}~~~~|}{~}}|~}~~~|~~|z}{~||z|{~|z}zx}{z~}zx~}}{y}~||zzxvum98jhghiiiikliijjlkmkjnklkkkkmjkmnlnommllllmlmmmllkjijjhkkjlhmijkkjkjkjjhk>o=}||{}}{zy{y{y|z}|{z~~~}|}}~}|}|}}{}{~|}|{}}}~~~{y|{~~~}}}}~~~~~~~}}}~~~~~~~{}}|~~|z}}}~|}{|{}{|z~|~xv|zzy}~}zx{y{z}|{zutn>=ihikkhljjkhjkkhkkilmkikkmmimlkllmmkoljjkmlkikmlkllhiihmlhkhijjlijihhhBqAv~u{z}|zxyw{y|{{y~}{}{~~}~}}{}|}|~|}{{y}{}{}z|z~~|}~~|}~~~~~}~~~~~~~}}}{~{~|z~{y}|}{}{~~}{}}{xv~}{}~|~|~|{z|z~|zzx~}{yxzxqBAjhiiijhkjkkjljlkjkjjjklkimkmkmkjlnolnmkllllklmkklljmknmkiijljijihhj@o?zy|{}|}zx{z{z~|~}~}{{z}zy}{}|~~}|~}~}{|z|z}|~~|}}{~~~~~~~~~~}~~~|~|~~~}~}~|~}}{~}~|{}|zx~~zy}{}|}|z}||z{y|zzy{y~ywwvpAAjggijijikjkijkikilkkkjjljjlmknllmmmlmkmkkmjjkijkkjjijjnjkiijihjih?m>yw|zxw}{}||{}|~|{yzx|{|z~}}~{y}{}~|}{zy~~~}{y~{|{~~~~~}~~~}~~}{y~}{~|}{~~}~||zzy|{}{}|~|}~}zy|z}{{y~wv}{|zvupCBkgiijjihjjlllkjilijkllmlnjnnlnoomllmlmmhllihnimiijiljiilkhjijhiCpBw~u|z{y}{x~|yw{y}||z}{zx}{z~{z}|}{zx~}{}}{}{~}{~~}~|~~~}{x~~}~|~~~|~{y|z|z~}}|}{}|zzy|z}{~||{|{~}|~}{~wusFEhhkhijjlkhjiklkjkjlklkkkkkmjjknnnkjkklnlkjlljijhjjihiijikhkjiItHzx}{~|xwzy~}zy~}ywzx}zxv}{{y}{{z~~|~}{|z~}}~}~}~~}~|~}~~~~~~~~}{y~}}{~}~}|~|~|{~|{zxw}{~}yw{z}|{zoCCijihgikilkhhljjkjjlknljkmmlknmmlmllljlkkklijllikgjkijjikjjiDoCzxzy|{~}}|~||z|{|{{z~}~|{}|~|~|~~}|{~}~~|}|z~~}{}~}~{~~~~}}~}}~~~}}~|~~}~}{~}{|z~}~|}{~|}||{}|}|zx}|{x~vuxw{zrIHjjjkgihkkkilkkkjilkkkmllllmjnkmmlkklkkljljkkkljkfhiiiggjiIqHzx{zzxzx{x{z}|~{z~|z{z}|}{{y~|~{~|~|~~~~~}~}~}~~~|y~~|}|~}}}{}~|{z}{|z|z|z{y}{~|z|{}|~}|z~{yxvsJJkiiiijjjjjklijijjklkkljlmkjmmlmkkilkkmjkiikilijhikjhiijGqFyw}|zxw}u}||z|z{zzx|{{z}|~~}}~|~}|z}{~~~~~{y~|z}{~|~}{z~}}{~~}|{xw}|{yzx~~|z}|wv}{{y~|{z~ywzyzypJIijjijhhijkijjjjkkljjkikkkhnjilkkjkjljkjikilhhljhhkiijGoF{yzxzyzy{z{y}{}{u}t|z}|{z~}|}||{}|}~{x~|}|~}~}}}{}|z~~~|~~~}}|}}~|~}~~}}}~~}~|~|~|}|}{}{}|z{z~||z|z|{|ztQPgihkhhgiihlkjjlljimlikkkkjljnnjkklkmjkkkjjjjlkjhkjhOtO{x~}~||z}}~|{z|{}~}{|{}}|~|z}~~}}{~~~}}~~}~~|~~~~~}}{}~|}}{~~}~}}~|~}|z~|}~}}{~}|z~||z}}{~}{{z|zzy~yxpIHjjikhhjikjkjkjjjmlllmllkkkkjjklmjlnjllkkkhhjihhlhOsMzyyx}{wu{zyw{y}{{z}{~}||{~|~~|~}{}|}{~|{y}{~|}{}~}}{~|~~{~|~~}~~{z~~|~|}|z}{|zzx}|~}|{|{}|{{zzx{yyw~~xv}|sNMiijiijhkhmhjkjjjmlnkjjjklljkkkjmkkllliijkiiiiihJqIxwzx}yxzy}{|{{y~}~|}{}|{~~|~~|~}~}}}~|~~}~}~~~}~~||}|~~}}{~~|~~}~~|z}}~}|~}{}|}|{y|{qNMhhhijjjkjllhjimlllkjlljnklmkkkhkljijhjhiiikjiOsNzx~}{zzx{zyw}{|{}|}|}|~}zy~|~~~|}|~~|}~|~~~}~~~~~|~~}}~}~|~|~~|}~|}|}|}{z~}|{|z|{~vtzysPOgkiiikiiiijjljjkklkmnkmkjkkljlkiiijjjhikhjiPsO{z{y{z{z}|zx}{|z{y}{~}~}~}}{{y|{~~zx~~~{~|~|~}~~}}~|~~~}{~~}~}~}{}|}{|z{y|zzy~|{}|~}}|ywzy}{ysNNjgihjfkkkkjjjlkkmnlkjilmkllnjjkilklijhhijVtU|z}|zy{y}{}{}{}|~||{|{~||z~}||{~}~|~|{~|}~|~}~|}}{~~}~|~}}{~~}|~}{}{{y}}||{}}{z~}}}|yxyxsTSkhijkikjiiikjkmkkjlljnlkjliikkjjkhhkijjStRxw{z{z}|{zzx|zzy~}}{}|}||{|z}{~~||{}~}~}{}~}~}}~|}|z~|~|}{~}|{|{}{{y|{|{|{|{~}|z}|tTTijkjiiiijkhmkjjjlmlmmkilkjikkikiijhhjRrQyx|{{z|{}|z~}|{|y}{x|z}{~|~|{~~~}}~~~}~}~~|~|{}~zx}}|~}|{z{z{z~}||{{z~|{uVUilihiijkihjjjnknllnklljikkiikijhfjiXuW}{|z|{}||{~}~~}|y}|~|~~}|z{y|{|z~zy}|~~|}|{z}~|}}}{~|}{~}~~~~}|{~~}}{}|{z}|}{~vuyx|zvYXigililiijmjmkkmmkllkiklkgjjjlgijhYwX}||z{y~}|}{{z}}{}{}||z}||}{~}zx}{~}}~~~~~}|~}~|~~|{}{~}{{z~}|}{yzx~}~}|{y}{}|}zx{ysUTijhijgggkliljmlknmkljkihigjjgijXsWywxvzx{z~|}|{z~|{y~}~}~}~~~|~~|~}~|{~~||}{~}}|}~}~}{yzy{z~}uZYjgjiiiijjhjhkmmkjjnjjikkjiiih]w\|{{zzy{z~|z~{y}~}{z~~|~~~~}}~}|y}{~}~}}~}~}{z}{~|}|}{}|}|w^]hgjjjjjlljkkhkkllmijikijjjfZuY|{~|zy~}|{}|{}{~}~~~}~~}~~~}}|}{~|}~|}~}~|}}|}{}~}|{{z~|}|ya`igigkhjkkjjlokljmkikjhjij_w^{y}|}}}|~|~}|{~}{~}|~}~|~|{}~~~~~}}{}|~}wv|{~}|z||~}}|}|~wvx__ihkjikjkkkkmilkjjjiiiii_w_zxyx|{|{yx~|~~~}~}{z}|}{~|~}~~~|}~~|~~zx}|}|~|}~~|zywbaikhjhiijjkljljhkmhiiiaw`{y|{|{{y{z}|}|{z~|{z~~~~~~~|~|~~}~|~}}|y{z|{}{}|{z{zzxxa`i hhilhkljkmkijijhijcyby~w}|{}{z|{}|~|z}}{~}~}}~~~}|~}}~|zy~||z{z~}yx|zyfejijgkkkikkljjkjkkbxa}{~yw|z{y|z}|}{~}}|~|}|~~~~~{y~}~|~~}~||{}|}}{|{xwyedg jgkllmjkiihii i cyb}|~}|{~|~|}{}{~~}~}~}|{}|~~{y~}~}{}zy~}{fejjikklmkkhhkjeye|z|z|{{{~}|~~~~|{}|z~~|}~~}{yxfdihijmjljhihcwa}{{z~}~~~}~~}~{z}{z{ihhhkjnhijhi{h}|{z}|~}}~}~~|}|~}zyydcjjijlkih{g|z~|~~}~~~|z}{|lkhjjjkjzi{{~}~~}}lkjk!i!k|j~|lkk!!qp}kj \ No newline at end of file diff --git a/assets/test_area_light1.json b/assets/test_area_light1.json new file mode 100644 index 0000000..4e2f229 --- /dev/null +++ b/assets/test_area_light1.json @@ -0,0 +1,70 @@ +{ + "geometry":[{ + "type":"rectangle", + "p1":[-20, -1, 0], + "p2":[20, -1, 0], + "p3":[20, -1, -20], + "p4":[-20, -1, -20], + + + "ac":[1,0,0], + "dc":[1,0,0], + "sc":[1,1,1], + + "ka":0.1, + "kd":1, + "ks":1, + + "pc":10 + + }, + { + "type":"sphere", + "centre":[0, 0, -4], + "radius":1, + "ac":[1,1,1], + "dc":[0,0,1], + "sc":[1,1,1], + + "ka":0, + "kd":1, + "ks":1, + "pc":100 + + } + + ], + "light":[ + { + "type":"area", + "p1":[-2, 7, -6], + "p2":[0, 7, -6], + "p4":[-2, 7, -4], + "p3":[0, 7, -4], + "id":[1, 1, 1], + "is":[1, 1, 1], + "usecenter":false, + "n":10 + }, + { + "type":"point", + "centre":[1,0.5,0], + "id":[1, 1, 1], + "is":[1, 1, 1] + } + ], + "output":[{ + "filename":"test_area_light1.ppm", + "size":[500,500], + "lookat":[0,0,-1], + "up":[0,1,0], + "fov":60, + "centre":[0,0.5,0], + "ai":[1,1,1], + "bkc":[0.5,0.5,0.5], + + "globalillum": false, + "raysperpixel": [10, 10] + } + ] +} diff --git a/assets/test_area_light1.ppm b/assets/test_area_light1.ppm new file mode 100644 index 0000000..ac7d333 --- /dev/null +++ b/assets/test_area_light1.ppm @@ -0,0 +1,2279 @@ +P6 +500 500 +255 +  + +  + +  + +  + +   ""##$$$$%%%%$$##""!!  + +  ##&&)),,..0011223333221100..,,**''$$!!  + + !!%%))--115588;;>>@@AABBCCCCBBAA??<<::6633//++''## + + ##((--2277<<@@EEHHLLOOQQSSTTTTTTSSQQNNKKHHDD??;;6611,,''"" + + + + ""((..44::@@FFKKQQVVZZ^^aacceeffffeeddaa^^ZZVVQQLLFF@@::55//))$$ + +  &&,,33::AAHHNNUU\\bbggllppssvvwwxxwwvvttqqmmiicc^^XXQQJJDD==6600**$$  ""((//66>>FFMMUU]]ddkkrrxx}}{{vvppiibb[[TTLLEE==66//))##  ##))1188@@IIQQZZcckksszz{{sslldd\\SSKKCC;;44--''!! + + ""))1188AAJJSS\\eennww{{ssjjbbYYPPHH@@8800**##  + +!!((//77@@IIRR\\eeooxxxxooff]]TTKKCC::33,,%%   %%,,44==FFOOYYccmmvv{{rrhh__VVMMDD<<44--''!!  ""))0088AAJJTT^^hhrr||{{rrii__VVMMEE<<55--''!! + + $$++33;;DDMMWWaakkuu~~yyppgg^^UULLDD<<44--''!! + + + +  &&--55==FFOOXXbblluu~~~~vvmmdd[[RRJJBB::33,,&&  + +  ''..55==FFOOXXaajjtt||xxpphh__WWNNFF??7700**$$  !!''..55==EEMMVV__ggppxxyyqqiiaaYYQQJJBB;;44..((""   &&--44;;CCKKSS[[cckkrryy}}vvppiiaaZZSSKKDD==7700**%%  + + %%++1188??GGNNVV]]ddkkqqww||||wwrrllff``YYRRLLEE>>8822,,''"" + + ##((..55;;BBIIPPVV]]cchhmmrrvvyy||}}~~~~~~||zzxxttppllggbb\\VVPPJJDD>>8822--((##  !!&&++1177==CCIIOOTTZZ__ccggkkmmooqqqqqqqqoommkkhhdd``\\WWRRMMGGBB==7722--((## + + + + ""'',,2277<>==;;88663311..++((%%""  + + !!$$&&)),,..002244556677778877776655331100--++))&&$$!!  + + !!##%%''))**,,--....////....--,,++))((&&$$""  + +  + + !!""##%%%%&&&&''''&&&&%%$$##""!! + +  + +   + +   + +  + +  + +  + + + +  + +  + + + + + + + +  + + + + + + + + + + + + + + + + + + ~||~{y}}ywy~xvtzvwtru{wsqqw|}romrx}qnlmsx}}mjhnty~ligioty~|mhfdjpuy~kgdbekpuy~yhca_ekpuy~ic`^`flpuy}uc_][aglquy}{d^[Y[aglpuy}p_ZXV\bglpuy|v\ZWUV\bglptx|zkVTRV\bgkptx{~qVSQPW]bgkosw{~vdRPNQW]bfkoswz~ykROMKQW]afjnrvz}|p[NLJKQW\afjnruy|teKIGKQW\aeimqux{wjKHFEKQW\`eimptw{~zo\GECEKQV[`dhlpsvz}}rdHDBAEKQV[_cgkorvy|uiNDA?>EKPUZ^cgjnqux{~xl[@>=?EKPUY^bfimptwz}zpaA=<:>EJOTY]aeilosvy||sfJ=;98>DJOTX\`dhkorux{~~ujW:867>DINSW[_cgjmqtwz}xm^7547>CIMRVZ^bfilpsvy|zpb74317=CHMQUY]aehkorux{} + + + + + + + + + + + + |rfQ42006<BGLPTX\`dgjnqtwy| + +  + + + + ~ujY1/./6<AFKOSW[_cfilpsvx{~ + +  + + wl^.,+/5;@EJNSVZ^aehknqtwz} + +  + + yob.+*).5:@DIMRUY]`dgjmpsvy|~  {reQ+)(&.4:?DHLQTX\_cfilorux{} + +  !!!!!!!!  + + }thW(&%&-39>CGKPSW[^behknqtwz| + + !!##%%&&''((((((((''&&$$##!! vk\&$#&,28=BFJORVZ]adgjmpsvy{~ + +  ##%%((**,,--//000000////--,,**''%%"" xn`%#"!%,27<AEINQUY\`cfiloruxz} + +  ##&&)),,//224466778899998877664411//,,))%%"" zpcK#!%+16;@DHMPTX[_behknqtwy|~ + + !!%%))--004477::==??AABBCCCCBBAA??==::774400,,(($$  {rfS $*05:?CHLOSWZ^adgjmpsvx{} + + ""''++//4488<<@@DDGGIIKKMMMMMMMMKKIIGGDD@@<<8833//**&&!! + +}tiX#)/49>BGKNRVY]`cfiloruwz} ##((--2277<>DDJJOOTTYY]]``cceeffffeeccaa]]YYUUOOJJDD>>8822--''"" wm_"(-37<@EIMPTW[^adgjmpsvx{} + + ""((--3399@@FFMMSSYY__ddiimmpprrssssrrppmmjjee``ZZTTMMGG@@9933,,''!! yoa!'-27;@DHLOSWZ]`cgjloruwz} !!'',,3399@@GGOOVV]]ddjjppuuzz}}~~{{vvqqllee^^WWOOHH@@9922,,&&  + +zqdM &,16:?CGKORVY\`cfilnqtwy|~ + + %%++1188@@GGOOWW__ggoovv||~~xxppiiaaXXPPHH@@8811**$$ |rfR%+059>BFJNQUX\_behknqsvy{~ ##))//66>>FFNNWW``iiqqzz||ttkkbbXXOOFF>>66//((!! }thV%*/49=AEIMQTW[^adgjmpsux{} + +  &&,,33;;CCLLUU__hhrr||~~uukkaaWWMMDD;;33,,%% + +~ujY$).38<@DHLPSWZ]`cgiloruwz| + + ##))0088@@IIRR\\ffqq{{~~ttii^^TTJJ@@88//((!! vk\#).37<@DHKOSVY]`cfiloqtwy|~ %%,,33<BFJNQUX[_behkmpsvx{} + + ##**1199CCMMWWccnn{{rrffZZNNDD::11))"" yoa +!',059>BFIMQTW[^adgjmpruxz} + + $$++33<>HHSS^^kkww||nnaaUUJJ??55--%% zpcJ +   %*/48=AEHLPSVZ]`cfilortwz|  ''..77@@JJUUaamm{{rrddXXLLAA77..&& + +{qdM  %*/38<@DHLOSVY]`cfilnqtwy|~ !!((//88AAKKWWccoo}}ttffYYMMBB88//''  + +{reO $).37;@DGKORVY\_behknqtvy{~ !!((0088BBLLWWccpp~~uuggZZNNCC9900((  + +|rfQ $).27;?CGKNRUY\_behknqsvy{~ !!((0088BBLLWWddpp~~uuhh[[NNCC9900((!! + +|rfR +#(-26;?CGJNQUX[_behkmpsvx{} !!((//88AALLWWccpp}}uuggZZNNCC9900''  + +|sgS +#(-16:>BFJMQTX[^adgjmpsux{} !!''..77@@JJUUaann{{sseeYYMMBB88//''  + +|sgS "',15:>BFIMQTW[^adgjmpruxz}  &&--66??IISS__kkxx~~ppccWWKK@@66..&& + +|sgS "',059=AEIMPTWZ^adgjmoruwz} %%,,44==FFQQ\\hhttzzmm``TTII>>55,,%% |sgS!&+059=AEILPSWZ]`cfiloruwz| + + ##**22::CCMMXXddpp||uuhh\\PPFF<<33**## |sgS!&+048=AEHLPSVZ]`cfilortwz| + + ""((//77@@JJTT__jjvv{{ooccWWLLBB9900((!! |rfR %*/48<@DHLOSVY]`cfiloqtwy|~  &&--44==FFOOZZddoo{{ttii]]RRHH>>55--&& + +|rfQ %*/38<@DHKORVY\_cfiknqtvy|~ ##**1199AAJJTT^^hhss}}xxmmbbWWMMCC::22**## + +{reP %*.37<@DGKORUY\_behknqtvy{~ + + !!''--55<>66..''!! {qdN $).37;?CGKNRUX\_behknqsvy{~ $$**0088??HHPPYYbbkktt}}xxooff]]SSJJAA9911**$$ + +zpcK $)-27;?CGJNQUX[_behkmpsvx{} + + !!&&,,33::AAIIQQZZbbjjrryy}}uunnee]]TTLLDD<<44--&&  yobG #(-26:>BFJNQUX[^adgjmpsux{} ""((..44;;BBJJQQYY``ggnnttyy~~||wwqqjjcc\\TTLLDD==66//((## yoa +#(-16:>BFJMQTW[^adgjmpruxz} + + $$))//55<BEIMPTWZ^adgjmoruwz}  %%**//55;;AAGGMMRRXX\\aaddggiijjkkjjhhffbb^^ZZTTOOIICC<<6600**%%  + +wl^ !',059=AEILPSWZ]`cfilortwz| + +  %%**//4499>>DDIIMMRRUUXX[[]]^^^^]]\\ZZWWSSOOJJEE@@;;5500**%%  ~vk\!&+048=AEHLPSVZ]`cfiloqtwy|~ + +  $$))--2277;;??DDGGKKMMPPQQRRRRRRPPNNLLHHEEAA<<8833..))%%  + +}ujZ %*/48<@DHLOSVY\`cfiknqtvy|~  ##''++//3377;;>>AACCEEFFGGGGGGEEDDAA??<<884400,,(($$  + +|shW %*/37<@DGKORUY\_behknqsvy{~ ""%%)),,//225588::;;<<======<<::88663300--))&&"" + + {rfS $).27;?CGJNRUX[_behkmpsvx{}  ##%%((++--//112233444444331100..++))&&##  zpdO #(-26:>BFJNQTX[^adgjmpruxz}  ""$$&&(())++++,,,,++++**((&&$$""  xobH #(,16:>BFIMPTWZ^adgjloruwz|  !!##$$$$%%%%$$$$##!!  + + wm_ "',059=AEILPSWZ]`cfiloqtwy|~ + +  + +~uk\!&+048<@DHLOSVY\`cfiknqtvy{~ + +  + + |shX %*/38<@DGKORUY\_behknpsvx{} + +  + +zqfT $).27;?CGJNQUX[^adgjmpruxz} + +  + + yocN #(-26:>BFJMQTW[^adgjloruwz| + + + + + + wm`? +"',159=AEILPSWZ]`cfilnqtvy|~ + + + + + + + + + + + + + + }uj\ !&+048<@DHLORVY\_behknqsvx{}{rgW %*/37;?CGKNRUX[_begjmpsuxz}ypdR $)-26:?BFJMQTW[^adgjlortwz|wm`I "(,159>AEILPSWZ]`cfilnqtvy{~|tj\ !&+048<@DHLORVY\_behknpsvx{}zrgW %*/37;?CGKNQUX[^adgjmoruwz|xocQ $)-26:>BFJMPTWZ]`cfiloqtvy{~}uk_F +"',159=AEHLOSVY\_behknpsvx{}{rhZ!&+/48<@DGKNRUX[^adgjmpruwz|xodT $).27;?BFJMQTWZ]`cfiloqtvy{~}ul`J #(,159=AEILPSVY\_behknpsuxz}zrhZ !&+/48<@DGKNRUX[^adgjmoruwz|~wodT $).27;?BFJMQTWZ]`cfilnqtvy{}|tk_J #(,159=AEHLOSVY\_behkmpsuxz|yqgY !&+/48<@DGKNQUX[^adgiloqtwy{~}vmbR $).26:>BFIMPSWZ]`cfhknpsuxz}zsi]G "',059=ADHKORUY\_bdgjmortwy|~~woeW  %*/37;?CGJNQTWZ]`cfiknqsvx{}{tk`N  #(-16:>AEILOSVY\_behjmpruwy|~xpfY + + +!&+048<@DGKNQUX[^acfilnqsvx{}{tlaR + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +$).26:>BFIMPSVY\_behjmpruwz|~xpg[E + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +  "',049<@DHKNRUX[^adfilnqsvx{}{tlbT + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +  %*.37;?BFIMPSVZ]_behjmpruwy|~~xqh\I + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +  #(,159=ADHKORUX[^adfilnqsvx{}{tlbU + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +  %*/37;?BFJMPSWZ]_behjmprtwy|~~xph\J + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +  #(,159=ADHKORUX[^adfilnqsvxz}ztlbU + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +  !%*/37;?BFJMPSVY\_begjmortwy{}}wog\J + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +  #(,159=ADHKNRUX[^`cfiknpsuwz|~yskaT  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +   %*/37;?BFIMPSVY\_bdgjloqtvx{}|unf[I  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +  #(,159=@DGKNQTWZ]`cfhkmpruwy{~~xqi`R  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +  %*.37;>BEILOSVY\^adgilnqsuxz|~ztmdYF + + + + + + + + + +  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +  "',048<@CGJNQTWZ]_behjmortvx{}|vog^P + + + + + + + + + + + + + + + + + + + + + + + +  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +  %).26:>AEHLORUX[^acfhkmpruwy{~~xrjbV@ + + + + + + + + + + + + + + + + + + + + + + + + + + + +  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +  "'+048<?CFJMPSVY\_adgilnqsuxz|~ztme[L + + + + + + + + + + + + + + + + + + + + + + + + + + + +  + + + + + + + + + + + + + + + + + + + + + + + + + + + + $(-159=ADHKNQTWZ]`behjmoqtvxz}{voh_R + + + + + + + + + + + + + + + + + + + + + + + + + +  + + + + + + + + + + + + + + + + + + + + + + + + + + + +  +!&*/37;>BEILORUX[^acfhkmprtwy{}}wqjbWF + + + + + + + + + + + + + + + + + + + + + + + + + +  + + + + + + + + + + + + + + + + + + + + + + + + + +  #',048<@CGJMPSVY\_adgilnpsuwy|~~ysle[M + + + + + + + + + + + + + + + + + + + + + + + + + +  + + + + + + + + + + + + + + + + + + + + + + + + + + + +  $).26:=ADHKNQTWZ]_begjloqsuxz|~ztng^S: + + + + + + + + + + + + + + + + + + + + + + + + + +  + + + + + + + + + + + + + + + + + + + + + + + + + + + +  !&+/37;>BEILORUX[^`cehjmoqtvxz|~{vpiaVF + + + + + + + + + + + + + + + + + + + + + + + + + +  + + + + + + + + + + + + + + + + + + + +  #(,048<@CFJMPSVY\^acfhkmprtvx{}|wqkcZL + + + + + + + + + + + + + + + + + + + + + + + + + +  + + + + + + + + + +  %)-269=ADGKNQTWY\_adgiknpruwy{}}xrle\Q6 + + + + + + + + + + + + + + + + + + + + + + + +   +!&*/37:>BEHKORTWZ]_begilnpsuwy{}}xsmf^TC + + + + + + + + + + + + + + + + + + + + + + + +   #',048;?BFILORUX[]`begjlnqsuwy{}~ytnh`WI + + + + + + + + + + + + + + + + + + + + + + + + + +  $(-159<@CGJMPSVX[^`cehjloqsuwy{}~ytoibYL + + + + + + + + + + + + + + + + + + + + + + + + + +    %*.26:=ADGJMPSVY\^acfhjmoqsuxz|~~zupjcZO: + + + + + + + + + + + + + + + + + + + + + + + + + +   "&+/37:>AEHKNQTWY\_adfhkmoqsvxz|~~zupjd\RA + + + + + + + + + + + + + + + + + + + + + + + +   #'+047;?BEHKNQTWZ\_adfikmoqtvxz|}~zupkd]SE + + + + + + + + + + + + + + + + + + + + + + + + + +  $(,048<?BFILORUWZ]_bdfikmoqtvxz{}~zupke^UH + + + + + + + + + + + + + + + + + + + + + + + +    $)-159<@CFILORUWZ]_bdfikmoqsuwy{}}yupke^VJ + + + + + + + + + + + + + + + + + + + + + + + +  + %).259=@CFJLORUXZ]_bdfikmoqsuwy{}}yupke^VK5 + + + + + + + + + + + + + + + + + + + + + + + +  !&*.269=@DGJMPRUXZ]_bdfikmoqsuwy{}~|ytpke_WL: + + + + + + + + + + + + + + + + + + + + + +  "&+/26:=ADGJMPRUXZ]_bdfhkmoqsuwy{|~|xtoje_WM= + + + + + + + + + + + + + + + + + + + + + + + +  "'+/36:=ADGJMPRUXZ]_adfhjmoqsuvxz|~~{wsoje^WM> + + + + + + + + + + + + + + + + + + + + + + + +   #'+/37:>ADGJMPRUXZ]_adfhjlnprtvxz{}}zvrnid^WM? + + + + + + + + + + + + + + + + + + + + + + + +  #'+/37:>ADGJMPRUWZ\_acehjlnprtvwy{}~|yurmic]VM? + + + + + + + + + + + + + + + + + + + + + + + +  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!#'+/37:=ADGJMORUWZ\^acegikmoqsuwyz|~~{xtplhb\UL?  + + + + + + + + + + + + + + + + + + + + + + + +  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!""""""""""""""""""""!!!!#'+/37:=ADGJLORTWY\^`begikmoqstvxz{}~}zwsokfa[TK> + + + + + +  + + + + + + + + + + + + + + + + + + + + + +  !!!!!!!!!!!!!!!!!!!!!!!!!!""""""""""""""""""""""""""""""""""""""""""""""!!!!!!#'+/36:=@CFILOQTVY[]`bdfhjlnprtuwyz|~~|yurnje`ZSJ= + + + +  + + + + + + + + + + + + + + + + + + + + + + + +  !!!!!!!!!!!!!!!!!!!!!!!!""""""""""""""""""""""""""""##############################""""""!!!! #'+/369=@CFILNQSVX[]_acfhjlmoqsuvxz{}~}zwtpmhd_YRI;y + +  + + + + + + + + + + + + + + + + + + + + + + + +  !!!!!!!!!!!!!!!!!!!!""""""""""""""""""""""""##############################$$$$$$$$$$$$########""""""!!!! "'+.269<?BEHKNPSUXZ\^acegikmnprtuwyz|}~{xurokgb]WPG8pppwwz + +  + + + + + + + + + + + + + + + + + + + + + +  !!!!!!!!!!!!!!!!!!""""""""""""""""""""""##########################$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$######""""!!  "&*.259<?BEHJMPRUWY\^`bdfhjlnoqstvxy{|~~|ywtpmiea[UNE4iikkkppuxx + + + +  + + + + + + + + + + + + + + + + + + + + + + + +  !!!!!!!!!!!!!!!!!!""""""""""""""""""""######################$$$$$$$$$$$$$$$$$$$$$$$$$$%%%%%%%%%%%%%%%%%%%%$$$$$$$$##""""!!!! !%*-158;>ADGJLOQTVX[]_acegikmnprsuwxz{|~|zwurokgc_YSLB.iiiiiiillqqqxy~ + + + +  + + + + + + + + + + + + + + + + + + + + + + + +  !!!!!!!!!!!!!!!!!!""""""""""""""""""####################$$$$$$$$$$$$$$$$$$$$$$%%%%%%%%%%%%%%%%%%%%%%%%%%%%&&%%%%%%%%%%$$$$$$##""""!! zrf ^   %)-047:>ACFILNQSUXZ\^`bdfhjlmoqrtuwxz{}~}zxuspmiea\WQI?jjjjjjjjjjjjlloqqvy| + +  + + + + + + + + + + + + + + + + + + + + + + + +  !!!!!!!!!!!!!!!!!!""""""""""""""""####################$$$$$$$$$$$$$$$$$$$$%%%%%%%%%%%%%%%%%%%%%%&&&&&&&&&&&&&&&&&&&&&&&&&&%%%%%%$$$$##""""!! wm` V O + +G= + $(,/36:=@CEHKMPRTWY[]_acegijlnoqstvwyz{}~}zxvsqnjgc_ZUNF;jjjjjjjjjjjjjjjjmmorrwz| + +  + + + + + + + + + + + + + + + + + + + + + +  !!!!!!!!!!!!!!!!""""""""""""""""##################$$$$$$$$$$$$$$$$$$%%%%%%%%%%%%%%%%%%%%%%&&&&&&&&&&&&&&&&&&&&&&&&''''''''''&&''&&&&&&%%$$$$##""!! uk^ Q + +I D:3-( #'+.259<?BDGJLOQSVXZ\^`bdfgikmnpqstvwxz{|~~|zxvtqnkhea\XRKC6kkkkkkkkkkkkkkkkkkkkmmpruw} + + + +  + + + + + + + + + + + + + + + + + + + + + +  !!!!!!!!!!!!!!!!""""""""""""""""################$$$$$$$$$$$$$$$$$$%%%%%%%%%%%%%%%%%%%%&&&&&&&&&&&&&&&&&&&&''''''''''''''''''''''''''''''''&&&&%%$$%%##""""!!|rh[ Q G B:0+&#"&*-147;>@CFHKMPRTWY[]_acdfhjkmnpqstvwxz{|}~}|zxvtqolifb^ZUOH?.kkkkkkkkkkkkkkkkkkkkkkkknnpsux} + +  + + + + + + + + + + + + + + + + + + + + + +  !!!!!!!!!!!!!!!!""""""""""""""""##############$$$$$$$$$$$$$$$$$$%%%%%%%%%%%%%%%%%%&&&&&&&&&&&&&&&&&&''''''''''''''''''''''((((((((((((((((((((''''&&&&%%%%$$""""!!zrf[ Q G B80+#!  $(,0369<?BEGJLOQSUWY[]_acefhjkmnpqstuwxyz{}~~}{ywusqolifc_[WRLD:lllllllllllllllllllllllllllllnnqsv{~ + +  + + + + + + + + + + + + + + + + + + + + + +  !!!!!!!!!!!!!!!!""""""""""""""################$$$$$$$$$$$$$$$$%%%%%%%%%%%%%%%%&&&&&&&&&&&&&&&&&&''''''''''''''''''''(((((((((((((((((((((())))((((((((((''''&&%%%%##""!!zuf[ Q G B80(#! +#'+.258;>ACFHKMORTVXZ\^`aceghjkmnpqrtuvwxz{|}~~}{zxwusqnlifc`\XTNH@3llllllllllllllllllllllllllllllllooqtvy~ + + + +  + + + + + + + + + + + + + + + + + + + + + +  !!!!!!!!!!!!!!""""""""""""""##############$$$$$$$$$$$$$$$$%%%%%%%%%%%%%%%%&&&&&&&&&&&&&&&&''''''''''''''''''(((((((((((((((((((())))))))))))))))))))))))))((((''''%%%%$$""""  T G B80(#!%)-0369<?BDGILNPRTVXZ\^`bcefhjklnoprstuwxyz{|}~~~}{zywutrpnkifc`]YUPKD:'lllmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmoorww| + + + +  + + + + + + + + + + + + + + + + + + + + + + !!!!!!!!!!!!!!""""""""""""""##############$$$$$$$$$$$$$$$$%%%%%%%%%%%%%%&&&&&&&&&&&&&&&&''''''''''''''''''(((((((((((((((((())))))))))))))))))))**************))))))((''&&&&%%##""!! + + 0(# #'+.258;=@CEHJLOQSUWY[\^`acefhiklmopqrstvwxyzz{|}~~~}|{zywvtsqomkhfc`]ZVQLF?3mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmpprww} + +  + + + + + + + + + + + + + + + + !!!!!!!!!!!!!!""""""""""""##############$$$$$$$$$$$$$$%%%%%%%%%%%%%%%%&&&&&&&&&&&&&&''''''''''''''''(((((((((((((((((())))))))))))))))))********************++++******))))((''''&&$$##""  ytom!%),0369<>ADFHKMOQSUWYZ\^`acdfgijklnopqrstuvwxyz{{|}}~~~}}|{zyxwutsqonljhec`]ZVRMHA8&mmmmmmmmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnppsxx} + +  + + + + + + + + + + !!!!!!!!!!!!!!""""""""""""""##############$$$$$$$$$$$$$$%%%%%%%%%%%%%%&&&&&&&&&&&&&&''''''''''''''''(((((((((((((((())))))))))))))))******************++++++++++++++++++++++**))))((((&&%%$$""!!  + +|wrmkhhh #'*.147:<?BDFIKMOQSUWYZ\^_abdefhijlmnopqrstuvvwxyyz{{||}}}~~~~~~}}||{zyyxwvusrqonljhfdb_\YVRNIC;0nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnqsvx} + +  + + + + !!!!!!!!!!!!!!""""""""""""##############$$$$$$$$$$$$$$%%%%%%%%%%%%%%&&&&&&&&&&&&&&''''''''''''''(((((((((((((((())))))))))))))))****************++++++++++++++++++++,,,,,,,,,,++++****))))''&&%%##""!! zsnkiiiiiii $(+/258:=?BDGIKMOQSUVXZ[]_`acdeghijklnoopqrsttuvwwxxyyzzz{{{{{||||||{{{{zzzyyxxwvutsrqpomljigeca^[XURNID=4nnnnnnnnnnnnnnnoooooooooooooooooooooooooooooooooooooqtvy~ + +   !!!!!!!!!!!!!!""""""""""""##############$$$$$$$$$$$$%%%%%%%%%%%%%%&&&&&&&&&&&&&&''''''''''''''(((((((((((((())))))))))))))))****************++++++++++++++++++,,,,,,,,,,,,,,,,,,--,,,,,,++**))((''%%$$##!!  + +}upniiiiiiiiiiii +"%),/258;=@BDGIKMOQRTVWY[\^_`bcdeghijklmnoopqrrsttuuvvvwwwwxxxxxxxxxwwwwvvuutssrqponlkjhgeca_]ZWTQMID>6'ooooooooooooooooooooooooooooooooooooooooooooooooooooooortw|~ + + + +   !!!!!!!!!!!!!!""""""""""""############$$$$$$$$$$$$$$%%%%%%%%%%%%&&&&&&&&&&&&&&''''''''''''''(((((((((((((())))))))))))))****************++++++++++++++++,,,,,,,,,,,,,,,,,,----------------,,,,++**))((''%%$$##!!  {vnliiiiiijjjjjjjjj "&)-0358;=@BDFHJLNPRSUWXZ[]^_`bcdefghijkllmnooppqqrrssssttttttttttsssrrqqpponmlkjigfeca_][YVSPLHC>6+oooooooooooooooooooooppppppppppppppppppppppppppppppppppppppruw| + +   !!!!!!!!!!!!!!""""""""""""############$$$$$$$$$$$$%%%%%%%%%%%%%%&&&&&&&&&&&&''''''''''''''(((((((((((((())))))))))))))**************++++++++++++++++,,,,,,,,,,,,,,,,------------------........------,,++**))''&&$$##!!  yqoijjjjjjjjjjjjjjjjkkk #&*-0358;=?ADFHJKMOQRTUWXZ[\^_`abcdefghiijkklmmmnnoooopppppppppooonnmmllkjihgfecb`_][YWTQNKGB=6,ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppssux} + +   !!!!!!!!!!!!!!""""""""""""############$$$$$$$$$$$$%%%%%%%%%%%%&&&&&&&&&&&&&&''''''''''''(((((((((((((())))))))))))))**************++++++++++++++,,,,,,,,,,,,,,,,----------------......................----,,++**((''&&$$##!!  yqljjjjjjjjjjjkkkkkkkkkkkk #&*-0258:<?ACEGIJLNPQSTUWXY[\]^_`abcdeefgghhiijjkkkklllllllkkkkjjiihggfedcba_^\ZXVTROLIEA<5+ppppppppppppppppppppppppppppqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqsvx} + + + +   !!!!!!!!!!!!""""""""""""############$$$$$$$$$$$$%%%%%%%%%%%%&&&&&&&&&&&&''''''''''''''(((((((((((())))))))))))))**************++++++++++++++,,,,,,,,,,,,,,----------------................//////////////....--,,++))((''&&$$##""  tomjjjjjkkkkkkkkkkkkkkkkklllll #&),/2479;>@BDFGIKLNPQRTUVWYZ[\]^__`abbcddeefffggggggggggggffeeddcbba`_]\[YWVTROMJFC?:3*ppqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqtvy~ + +   !!!!!!!!!!!!""""""""""""############$$$$$$$$$$$$%%%%%%%%%%%%&&&&&&&&&&&&''''''''''''(((((((((((((())))))))))))**************++++++++++++,,,,,,,,,,,,,,----------------................////////////////00000000//....,,++**((''&&%%##!!!! upjkkkkkkkkkkkkkkkklllllllllllllll "%(+.1368:<>@BDFGIKLNOPRSTUVWXYZ[\]]^__``aaabbbbcccccbbbbaa``_^^]\[ZYWVTRQNLJGD@<70&qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrtwy| + +   !!!!!!!!!!!!""""""""""""############$$$$$$$$$$$$%%%%%%%%%%%%&&&&&&&&&&&&''''''''''''(((((((((((())))))))))))))************++++++++++++,,,,,,,,,,,,,,--------------................//////////////00000000000000000011////..--++**))((&&%%##""!! upkkkkkkkkkkkllllllllllllllllmmmmmmmmm !$'*-/2469;=?@BDEGIJKMNOPQRSTUVWXYYZZ[[\\]]]]^^^^^]]]]\\[[ZZYXWVUSRPOMKIFC@=83, qqqqqqqqqrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrruw| + +   !!!!!!!!!!!!""""""""""""##########$$$$$$$$$$$$%%%%%%%%%%%%&&&&&&&&&&&&''''''''''''(((((((((((())))))))))))************++++++++++++++,,,,,,,,,,,,--------------..............//////////////00000000000000001111111111111100//..--,,++**''&&&&##""!! upkkkkkllllllllllllllllmmmmmmmmmmmmmmmmmnn +"%(+.02579;<>@BCEFGIJKLMNOPQRSSTUUVVWWXXXXXXXXXXXXWWVVUTSSRPONLKIGEB?<84.&rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrssssssssssssssssssssssssssssssssssssuxz + +   !!!!!!!!!!!!""""""""""""############$$$$$$$$$$$$%%%%%%%%%%&&&&&&&&&&&&''''''''''''(((((((((((())))))))))))************++++++++++++,,,,,,,,,,,,--------------..............//////////////000000000000001111111111111111222222221100//..,,++**((''&&####!! xqllllllllllllllllmmmmmmmmmmmmmmmmnnnnnnnnnnnn  #&)+.02468:<=?@BCDFGHIJKLMMNOOPQQQRRRSSSSSSRRRRQQPOONMLJIHFDB@=:73.(rrrrrrrrrrrrrrrrrssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssv{} + +   !!!!!!!!!!!!""""""""""############$$$$$$$$$$$$%%%%%%%%%%%%&&&&&&&&&&''''''''''''(((((((((((())))))))))))************++++++++++++,,,,,,,,,,,,------------..............//////////////0000000000000011111111111111222222222222222233110000//,,++++))''&&&&""!!!! {qllllllllllmmmmmmmmmmmmmmmmnnnnnnnnnnnnnnnnnoooooo #&(+-/13578:;=>?ABCDEFGHHIJJKKLLLLMMMMMLLLKKJJIHGFEDBA?=:851-'rrsssssssssssssssssssssssssssssssssssssssssssssssssssssstttttttttttttttttttttttttttttttttvy~   !!!!!!!!!!""""""""""""############$$$$$$$$$$%%%%%%%%%%%%&&&&&&&&&&&&''''''''''(((((((((((())))))))))))************++++++++++,,,,,,,,,,,,--------------............////////////00000000000000111111111111112222222222222222333333333333221100//--,,++**((''&&##""!! qlllllmmmmmmmmmmmmmmmnnnnnnnnnnnnnnnnnoooooooooooooooo "%')+-/134679:;<=>?@ABCCDDEEEFFFFFFFEEEDDCBA@?><;9641.)$sssssssssssssssssssssssssstttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttty~  !!!!!!!!!!!!""""""""""""##########$$$$$$$$$$$$%%%%%%%%%%&&&&&&&&&&&&''''''''''''(((((((((())))))))))))************++++++++++,,,,,,,,,,,,------------............//////////////0000000000001111111111111122222222222222333333333333333344444444110000..,,++++((''''$$""""  + +wmmmmmmmmmmmmmmmnnnnnnnnnnnnnnnnoooooooooooooooooppppppppppp  "%')+,.013456789:;;<==>>>>???>>>>==<;:987531/,)$sssssssssssstttttttttttttttttttttttttttttttttttttttttttttttttttttttttttuuuuuuuuuuuuuuuuuuuuuuttttttz + +  !!!!!!!!!!!!""""""""""############$$$$$$$$$$%%%%%%%%%%%%&&&&&&&&&&''''''''''''(((((((((())))))))))))************++++++++++,,,,,,,,,,,,------------............////////////00000000000011111111111111222222222222223333333333333344444444444444555522110011--,,,,))''''&&##"""" mmmmmmmmmmnnnnnnnnnnnnnnnooooooooooooooooppppppppppppppppppqqqqq !#%'(*+-./012334555666666655443210.,*(%!ssttttttttttttttttttttttttttttttttttttuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuw + + !!!!!!!!""""""""""""##########$$$$$$$$$$$$%%%%%%%%%%&&&&&&&&&&&&''''''''''(((((((((((())))))))))************++++++++++,,,,,,,,,,,,------------............////////////00000000000011111111111122222222222233333333333333444444444444444455555555555533111111..,,--++((((((##"""" rmmmmnnnnnnnnnnnnnnnooooooooooooooooppppppppppppppppqqqqqqqqqqqqqqqqqqr !"$%&'()**++,,,,,,++**)(&%# tttttttttttttttttttttttuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuux !!""""""""""""##########$$$$$$$$$$$$%%%%%%%%%%&&&&&&&&&&''''''''''''(((((((((())))))))))))**********++++++++++++,,,,,,,,,,------------..........////////////0000000000001111111111112222222222222233333333333344444444444444555555555555556666666655222222//------(((((($$####!! pnnnnnnnnnnnnnoooooooooooooooppppppppppppppppqqqqqqqqqqqqqqqqqqrrrrrrrrrrrrrrr  tttttttttttttttuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv{ """"""############$$$$$$$$$$%%%%%%%%%%%%&&&&&&&&&&''''''''''(((((((((((())))))))))**********++++++++++++,,,,,,,,,,------------..........////////////000000000000111111111111222222222222333333333333444444444444445555555555555566666666666666777733222200......**))))&&$$#### vqnnnnnnnooooooooooooooopppppppppppppppqqqqqqqqqqqqqqqqqrrrrrrrrrrrrrrrrrrsssssssssssssssssssstttttttttttttttttttttttuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv~ ############$$$$$$$$$$%%%%%%%%%%&&&&&&&&&&&&''''''''''(((((((((())))))))))))**********++++++++++,,,,,,,,,,,,----------............//////////000000000000111111111111222222222233333333333333444444444444555555555555666666666666667777777777777744333333////..++**))))%%$$$$  + +~snnooooooooooooooopppppppppppppppqqqqqqqqqqqqqqqqrrrrrrrrrrrrrrrrrsssssssssssssssssssttttttttttttttttttttttuuuuuuuuuuuuuuuuuuuuuuuuuuvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwy ####$$$$$$$$$$$$%%%%%%%%%%&&&&&&&&&&''''''''''''(((((((((())))))))))**********++++++++++++,,,,,,,,,,----------............//////////00000000000011111111112222222222223333333333334444444444445555555555556666666666666677777777777777888888885544444400////..++****&&%%$$""  {tooooooooooopppppppppppppppqqqqqqqqqqqqqqqrrrrrrrrrrrrrrrrrssssssssssssssssssttttttttttttttttttttuuuuuuuuuuuuuuuuuuuuuuuvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwz| $$$$$$$$$$%%%%%%%%%%&&&&&&&&&&''''''''''(((((((((((())))))))))**********++++++++++,,,,,,,,,,------------..........//////////000000000000111111111122222222222233333333333344444444444455555555555566666666666677777777777777888888888888889966555544110000//,,++++((&&&&%%!!  + +ytoooooppppppppppppppqqqqqqqqqqqqqqqqrrrrrrrrrrrrrrrrssssssssssssssssstttttttttttttttttttuuuuuuuuuuuuuuuuuuuuuuvvvvvvvvvvvvvvvvvvvvvvvvvvwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx} $$$$%%%%%%%%%%&&&&&&&&&&''''''''''(((((((((())))))))))))**********++++++++++,,,,,,,,,,----------..........////////////000000000011111111112222222222223333333333444444444444555555555555666666666666777777777777778888888888889999999999999966665533221100--,,,,++((''&&""!!  wuppppppppppppppqqqqqqqqqqqqqqrrrrrrrrrrrrrrrrsssssssssssssssssttttttttttttttttttuuuuuuuuuuuuuuuuuuuuvvvvvvvvvvvvvvvvvvvvvvvvwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx{ + + %%%%%%%%&&&&&&&&&&''''''''''(((((((((())))))))))**********++++++++++,,,,,,,,,,,,----------..........//////////00000000001111111111112222222222333333333344444444444455555555555566666666666677777777777788888888888899999999999999::::::::8877666633221100----,,))''''%%""!!!! }wuppppppppqqqqqqqqqqqqqqrrrrrrrrrrrrrrrrsssssssssssssssstttttttttttttttttuuuuuuuuuuuuuuuuuuuvvvvvvvvvvvvvvvvvvvvvvwwwwwwwwwwwwwwwwwwwwwwwwwwxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy{~ + + %%&&&&&&&&&&''''''''''(((((((((())))))))))**********++++++++++,,,,,,,,,,----------..........//////////000000000000111111111122222222223333333333444444444444555555555566666666666677777777777788888888888899999999999999::::::::::::;;;;9988777755332222//..--++))((''$$"""" }xuppqqqqqqqqqqqqqqqrrrrrrrrrrrrrrsssssssssssssssstttttttttttttttttuuuuuuuuuuuuuuuuuuvvvvvvvvvvvvvvvvvvvvwwwwwwwwwwwwwwwwwwwwwwwwxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy|~ + + &&&&&&''''''''''(((((((((())))))))))**********++++++++++,,,,,,,,,,----------..........//////////00000000001111111111222222222233333333333344444444445555555555666666666666777777777777888888888888999999999999::::::::::::;;;;;;;;;;;;;;9988886655333311//..--++))((&&$$##"" + +xvsqqqqqqqqqqrrrrrrrrrrrrrrssssssssssssssssttttttttttttttttuuuuuuuuuuuuuuuuuvvvvvvvvvvvvvvvvvvvwwwwwwwwwwwwwwwwwwwwwwxxxxxxxxxxxxxxxxxxxxxxxxxxxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz| + + + + ''''''''''(((((((((())))))))))**********++++++++++,,,,,,,,,,----------..........//////////0000000000111111111122222222223333333333444444444455555555556666666666667777777777888888888888999999999999::::::::::::;;;;;;;;;;;;;;<<<<<<<<::999999665544331100..,,++))((&&$$##!! yvtqqqqrrrrrrrrrrrrrrrssssssssssssssstttttttttttttttuuuuuuuuuuuuuuuuuvvvvvvvvvvvvvvvvvvwwwwwwwwwwwwwwwwwwwwxxxxxxxxxxxxxxxxxxxxxxxxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz} + + + + ''''(((((((((())))))))))**********++++++++++,,,,,,,,----------..........//////////0000000000111111111122222222223333333333444444444455555555555566666666667777777777888888888888999999999999::::::::::::;;;;;;;;;;;;<<<<<<<<<<<<====<<;;::9988666644221100//,,****((&&$$##  ywtrrrrrrrrrrrrrssssssssssssssstttttttttttttttuuuuuuuuuuuuuuuuvvvvvvvvvvvvvvvvvwwwwwwwwwwwwwwwwwwwxxxxxxxxxxxxxxxxxxxxxxyyyyyyyyyyyyyyyyyyyyyyyyyyyyzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{} + + + + (((((((())))))))))**********++++++++,,,,,,,,,,----------..........//////////000000000011111111112222222222333333333344444444445555555555666666666677777777778888888888889999999999::::::::::::;;;;;;;;;;;;<<<<<<<<<<<<==============<<;;::9988776644221100..--++**((&&%%##!!  ywtrrrrrrrssssssssssssssstttttttttttttttuuuuuuuuuuuuuuuvvvvvvvvvvvvvvvvvwwwwwwwwwwwwwwwwwwxxxxxxxxxxxxxxxxxxxxyyyyyyyyyyyyyyyyyyyyyyyyyzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{~ + + (())))))))))**********++++++++,,,,,,,,,,----------..........//////////0000000000111111112222222222333333333344444444445555555555666666666677777777777788888888889999999999::::::::::::;;;;;;;;;;;;<<<<<<<<<<==============>>>>>>>>==<<;;;;9988776644222211..--,,**((&&%%##!! zwursssssssssssssstttttttttttttttuuuuuuuuuuuuuuuvvvvvvvvvvvvvvvvwwwwwwwwwwwwwwwwwxxxxxxxxxxxxxxxxxxxxyyyyyyyyyyyyyyyyyyyyyyzzzzzzzzzzzzzzzzzzzzzzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{|||||||||||||||||||||||||||||||||~ + + ))))))**********++++++++,,,,,,,,,,----------..........//////////00000000111111111122222222223333333333444444444455555555556666666666777777777788888888889999999999::::::::::::;;;;;;;;;;<<<<<<<<<<<<============>>>>>>>>>>>>????>>====<<;;::88886655332211..----**((''&&##""  + +zxussssssssssttttttttttttttuuuuuuuuuuuuuuuvvvvvvvvvvvvvvvwwwwwwwwwwwwwwwwwxxxxxxxxxxxxxxxxxxyyyyyyyyyyyyyyyyyyyyyzzzzzzzzzzzzzzzzzzzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| **********++++++++,,,,,,,,,,----------..........////////00000000001111111111222222222233333333334444444455555555556666666666777777777788888888889999999999::::::::::::;;;;;;;;;;<<<<<<<<<<<<==========>>>>>>>>>>>>??????????????>>>>====<<::::997755443300//..--**))''&&$$!!  + +}xvvsssttttttttttttttuuuuuuuuuuuuuuuvvvvvvvvvvvvvvvwwwwwwwwwwwwwwwwxxxxxxxxxxxxxxxxxxyyyyyyyyyyyyyyyyyyyzzzzzzzzzzzzzzzzzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||}}}}}}}}}}}}}}}}}| + + ****++++++++++,,,,,,,,----------..........////////00000000001111111111222222222233333333444444444455555555556666666666777777777788888888889999999999::::::::::;;;;;;;;;;<<<<<<<<<<============>>>>>>>>>>>>????????????@@@@@@@@@@????>>>><<;;::99776655331100//--++**((&&$$""  + +~{yvttttttttttttuuuuuuuuuuuuuuvvvvvvvvvvvvvvvwwwwwwwwwwwwwwwxxxxxxxxxxxxxxxxxyyyyyyyyyyyyyyyyyyyzzzzzzzzzzzzzzzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{{||||||||||||||||||||||||||||||||||||}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} + + ++++++++,,,,,,,,----------..........////////000000000011111111112222222233333333334444444444555555555566666666777777777788888888889999999999::::::::::;;;;;;;;;;<<<<<<<<<<============>>>>>>>>>>????????????@@@@@@@@@@@@AAAAAA@@@@????>>==;;;;99776655332200//--,,**))''$$##  + +~ywwttttttuuuuuuuuuuuuuvvvvvvvvvvvvvvvwwwwwwwwwwwwwwwxxxxxxxxxxxxxxxxyyyyyyyyyyyyyyyyyyzzzzzzzzzzzzzzzzzzz{{{{{{{{{{{{{{{{{{{{{{{|||||||||||||||||||||||||||||}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} + + ++,,,,,,,,,,--------..........////////0000000000111111111122222222333333333344444444445555555566666666667777777777888888888899999999::::::::::;;;;;;;;;;<<<<<<<<<<<<==========>>>>>>>>>>????????????@@@@@@@@@@@@AAAAAAAAAAAABB@@@@??@@>>==<<<<::99886644332200..,,++**&&%%##"" ~yywuuuuuuuuuuuuuuvvvvvvvvvvvvvvwwwwwwwwwwwwwwwxxxxxxxxxxxxxxxxyyyyyyyyyyyyyyyyzzzzzzzzzzzzzzzzzzz{{{{{{{{{{{{{{{{{{{{{|||||||||||||||||||||||||}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + ,,,,,,--------..........//////////00000000111111111122222222333333333344444444555555555566666666667777777788888888889999999999::::::::::;;;;;;;;;;<<<<<<<<<<==========>>>>>>>>>>????????????@@@@@@@@@@AAAAAAAAAAAABBBBBBBBBBBBAAAA@@@@>>====<<;;99887755332211//--,,))''%%$$""  + +zzwuuuuuuuuvvvvvvvvvvvvvvwwwwwwwwwwwwwwxxxxxxxxxxxxxxxyyyyyyyyyyyyyyyyyzzzzzzzzzzzzzzzzz{{{{{{{{{{{{{{{{{{{{|||||||||||||||||||||||}}}}}}}}}}}}}}}}}}}}}}}}}}}}}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + --------..........//////////00000000111111111122222222333333333344444444555555555566666666667777777788888888889999999999::::::::;;;;;;;;;;<<<<<<<<<<==========>>>>>>>>>>????????????@@@@@@@@@@AAAAAAAAAAAABBBBBBBBBBCCCCCCCCBBBBAAAA@@??>>>><<;;99998855443311//..--**((&&&&##!! zxxuuvvvvvvvvvvvvvwwwwwwwwwwwwwwxxxxxxxxxxxxxxxyyyyyyyyyyyyyyyyzzzzzzzzzzzzzzzzz{{{{{{{{{{{{{{{{{{|||||||||||||||||||||}}}}}}}}}}}}}}}}}}}}}}}}}}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + ----........//////////000000001111111111222222223333333333444444445555555555666666667777777777888888888899999999::::::::::;;;;;;;;;;<<<<<<<<<<==========>>>>>>>>>>??????????@@@@@@@@@@AAAAAAAAAABBBBBBBBBBBBCCCCCCCCCCCCDDDDCCCCBBBBAA@@????==<<::::776655441100//--**))''&&##""  {{xxvvvvvvvvvwwwwwwwwwwwwwwxxxxxxxxxxxxxxyyyyyyyyyyyyyyyyzzzzzzzzzzzzzzzz{{{{{{{{{{{{{{{{{||||||||||||||||||||}}}}}}}}}}}}}}}}}}}}}}}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + + +   ......//////////000000001111111111222222223333333333444444445555555555666666667777777777888888889999999999::::::::::;;;;;;;;<<<<<<<<<<==========>>>>>>>>>>??????????@@@@@@@@@@AAAAAAAAAABBBBBBBBBBBBCCCCCCCCCCDDDDDDDDDDDDDDDDCCCCBBBBAA??@@>><<;;;;99777744330000..,,))))''%%""!! + +{{yyvvvwwwwwwwwwwwwwwxxxxxxxxxxxxxxyyyyyyyyyyyyyyyzzzzzzzzzzzzzzz{{{{{{{{{{{{{{{{{|||||||||||||||||||}}}}}}}}}}}}}}}}}}}}}~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +  ..////////000000000011111111222222222233333333444444445555555555666666667777777777888888889999999999::::::::;;;;;;;;;;<<<<<<<<<<==========>>>>>>>>??????????@@@@@@@@@@AAAAAAAAAABBBBBBBBBBBBCCCCCCCCCCDDDDDDDDDDDDEEEEEEEEEEDDDDDDCCBBAAAA@@??==<<;;::887755331111//,,****((%%##""  + +|yywwwwwwwwwwwxxxxxxxxxxxxxxyyyyyyyyyyyyyyyzzzzzzzzzzzzzzz{{{{{{{{{{{{{{{{||||||||||||||||||}}}}}}}}}}}}}}}}}}}}~~~~~~~~~~~~~~~~~~~~~~~ + +  ////000000000011111111222222222233333333444444444455555555666666667777777777888888889999999999::::::::;;;;;;;;;;<<<<<<<<==========>>>>>>>>>>??????????@@@@@@@@@@AAAAAAAAAABBBBBBBBBBCCCCCCCCCCDDDDDDDDDDEEEEEEEEEEEEFFFFFFEEEEEEDDDDCCBBAAAA??>>>><<::99887744441100----**))&&%%##"" + +~|zzwwwwwxxxxxxxxxxxxxxyyyyyyyyyyyyyyzzzzzzzzzzzzzzz{{{{{{{{{{{{{{{{|||||||||||||||||}}}}}}}}}}}}}}}}}}~~~~~~~~~~~~~~~~~~~~~~ + +  !!!!!!!!!!!!!!!! 0000000011111111112222222233333333444444444455555555666666667777777777888888889999999999::::::::;;;;;;;;;;<<<<<<<<==========>>>>>>>>??????????@@@@@@@@@@AAAAAAAAAABBBBBBBBBBCCCCCCCCCCDDDDDDDDDDEEEEEEEEEEEEFFFFFFFFFFFFGGFFFFFFEEDDDDCCBBBB@@??>>>>;;::888866442211//--++**((&&$$""!! |zzxxxxxxxxxxxxxyyyyyyyyyyyyyyzzzzzzzzzzzzzz{{{{{{{{{{{{{{{|||||||||||||||||}}}}}}}}}}}}}}}}}}~~~~~~~~~~~~~~~~~~~~ + + + +  !!!!!!!!!!!!!!!!!!!!!!!!!! 0011111111112222222233333333334444444455555555666666666677777777888888889999999999::::::::;;;;;;;;;;<<<<<<<<==========>>>>>>>>??????????@@@@@@@@AAAAAAAAAABBBBBBBBBBCCCCCCCCCCDDDDDDDDDDEEEEEEEEEEEEFFFFFFFFFFGGGGGGGGGGGGGGFFFFFFEEEEDDCCCCAA@@??>><<<<::887766441111..--++))''&&##"" }z{{xxxxxxyyyyyyyyyyyyyzzzzzzzzzzzzzz{{{{{{{{{{{{{{{||||||||||||||||}}}}}}}}}}}}}}}}}~~~~~~~~~~~~~~~~~~~ + + + +  !!!!!!!!!!""!!""!!""!!!!!!!!!!!!!! 1111112222222233333333334444444455555555666666666677777777888888889999999999::::::::;;;;;;;;;;<<<<<<<<========>>>>>>>>>>????????@@@@@@@@@@AAAAAAAAAABBBBBBBBBBCCCCCCCCCCDDDDDDDDDDEEEEEEEEEEFFFFFFFFFFGGGGGGGGGGGGHHHHHHHHHHGGGGGGFFEEEEDDDDBBAA@@??>><<<<99886655332200..--++))''%%$$!! }{{{yyyyyyyyyyyyyzzzzzzzzzzzzzz{{{{{{{{{{{{{{||||||||||||||||}}}}}}}}}}}}}}}}~~~~~~~~~~~~~~~~~~ + + + +  !!!! !!!!!!!!""""""""""""""""""""""!!!!!!!! 2222222222333333334444444455555555556666666677777777888888888899999999::::::::;;;;;;;;;;<<<<<<<<========>>>>>>>>>>????????@@@@@@@@@@AAAAAAAABBBBBBBBBBCCCCCCCCCCDDDDDDDDDDEEEEEEEEEEFFFFFFFFFFGGGGGGGGGGHHHHHHHHHHHHIIIIIIHHHHHHGGGGFFEEEEDDDDBBBB@@??>><<<<::9966663322////,,**((''$$""  + + ~{{{yyyyyyyzzzzzzzzzzzzzz{{{{{{{{{{{{{{|||||||||||||||}}}}}}}}}}}}}}}}~~~~~~~~~~~~~~~~~ + +  !!!!!!""!!""""""""""""""""""""""""""""""!!!!!!!! 2222333333334444444444555555556666666677777777888888888899999999::::::::;;;;;;;;;;<<<<<<<<========>>>>>>>>>>????????@@@@@@@@@@AAAAAAAABBBBBBBBBBCCCCCCCCDDDDDDDDDDEEEEEEEEEEFFFFFFFFFFGGGGGGGGGGHHHHHHHHHHHHIIIIIIIIIIJJJJIIIIIIHHGGGGFFFFEEDDCCBBBB@@@@====;;::7766553311//--++**((''####  + + |||yzzzzzzzzzzzzzz{{{{{{{{{{{{{|||||||||||||||}}}}}}}}}}}}}}}~~~~~~~~~~~~~~~~~ + + + +  !!!!!!""""""##""""####""######""##""""""""""""!!!!!!!!!! 3333333344444444555555556666666677777777778888888899999999::::::::;;;;;;;;;;<<<<<<<<========>>>>>>>>>>????????@@@@@@@@AAAAAAAAAABBBBBBBBCCCCCCCCCCDDDDDDDDDDEEEEEEEEFFFFFFFFFFGGGGGGGGGGHHHHHHHHHHHHIIIIIIIIIIJJJJJJJJJJJJJJJJIIJJIIHHGGGGFFEEDDCCCCAA@@>>>><<::99887744330000--,,((((%%$$!!  ||zzzzzzzzz{{{{{{{{{{{{{||||||||||||||}}}}}}}}}}}}}}}~~~~~~~~~~~~~~~~ + + + +  !!!!""""""""""""############################""""""""""!!!!!!!!!! 3344444444555555555566666666777777778888888899999999::::::::::;;;;;;;;<<<<<<<<========>>>>>>>>>>????????@@@@@@@@AAAAAAAAAABBBBBBBBCCCCCCCCCCDDDDDDDDEEEEEEEEEEFFFFFFFFFFGGGGGGGGGGHHHHHHHHHHIIIIIIIIIIJJJJJJJJJJKKKKKKKKKKKKKKJJJJJJIIHHHHHHFFFFDDDDBBAA@@??>><<;;888866442211//--,,))((%%%%!!!! + + + +}}}zz{{{{{{{{{{{{{||||||||||||||}}}}}}}}}}}}}}~~~~~~~~~~~~~~~~ + +  !!!!""""""""####################$$$$##############""""""""""!!!!!!!!!! 444444555555556666666677777777888888889999999999::::::::;;;;;;;;<<<<<<<<========>>>>>>>>>>????????@@@@@@@@AAAAAAAAAABBBBBBBBCCCCCCCCDDDDDDDDDDEEEEEEEEEEFFFFFFFFGGGGGGGGGGHHHHHHHHHHIIIIIIIIIIJJJJJJJJJJKKKKKKKKKKKKLLLLLLKKLLKKKKJJJJJJIIIIGGGGEEDDEEBBBB@@??==<<::999966553311..--++))''&&##"" + + + +}}}{{{{{{{{{||||||||||||||}}}}}}}}}}}}}}~~~~~~~~~~~~~~~    !!""""""""##########$$$$$$$$$$$$$$$$$$$$$$$$##$$########""""""""""!!!!!!!!!! 555555556666666666777777778888888899999999::::::::;;;;;;;;<<<<<<<<==========>>>>>>>>????????@@@@@@@@AAAAAAAAAABBBBBBBBCCCCCCCCDDDDDDDDDDEEEEEEEEFFFFFFFFFFGGGGGGGGGGHHHHHHHHIIIIIIIIIIJJJJJJJJJJKKKKKKKKKKKKLLLLLLLLLLMMMMLLLLLLLLLLKKKKIIIIIIGGGGFFEECCCCAA@@@@==<<;;::8866442211....,,**&&&&##"" ~~~{{|||||||||||||}}}}}}}}}}}}}}~~~~~~~~~~~~~~~  !!!!!!""""########$$##$$$$$$%%$$$$$$$$$$%%$$$$$$$$$$$$$$########""""""""""!!!!!!!!!! 555566666666777777778888888899999999::::::::;;;;;;;;;;<<<<<<<<========>>>>>>>>????????@@@@@@@@AAAAAAAAAABBBBBBBBCCCCCCCCDDDDDDDDDDEEEEEEEEFFFFFFFFFFGGGGGGGGHHHHHHHHHHIIIIIIIIIIJJJJJJJJJJKKKKKKKKKKLLLLLLLLLLMMMMMMMMMMNNMMMMMMMMMMKKKKKKJJJJHHHHGGFFFFDDDDAAAA??>><<;;;;7777443300//,,,,))''&&$$!! + +~~~||||||||||}}}}}}}}}}}}}~~~~~~~~~~~~~~ + +  !!!!!!""""##########$$$$$$%%$$%%%%%%%%%%%%%%%%%%%%%%$$$$$$$$$$$$########""""""""""!!!!!!!!!! 66666677777777888888888899999999::::::::;;;;;;;;<<<<<<<<========>>>>>>>>????????@@@@@@@@AAAAAAAAAABBBBBBBBCCCCCCCCDDDDDDDDEEEEEEEEEEFFFFFFFFGGGGGGGGGGHHHHHHHHIIIIIIIIIIJJJJJJJJJJKKKKKKKKKKLLLLLLLLLLMMMMMMMMMMNNNNNNNNNNNNNNNNMMMMMMLLLLKKKKIIIIIIGGGGEEDDDDBBBB@@>><<<<998866553311//----**((%%$$!! + +|||}}}}}}}}}}}}}~~~~~~~~~~~~~~ + + + +  !!!!!!""""######$$$$$$%%$$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$$$$$$$$$$########""""""""""!!!!!!!!!! 66777777778888888899999999::::::::;;;;;;;;<<<<<<<<========>>>>>>>>??????????@@@@@@@@AAAAAAAABBBBBBBBCCCCCCCCDDDDDDDDEEEEEEEEEEFFFFFFFFGGGGGGGGGGHHHHHHHHIIIIIIIIIIJJJJJJJJKKKKKKKKKKLLLLLLLLLLMMMMMMMMMMNNNNNNNNNNNNOOOOOOOOOOOONNNNNNMMMMLLLLLLJJJJIIHHGGFFEECCCC@@@@>>==<<::8877552222//--,,**''%%##""!! }}}}}}}}}~~~~~~~~~~~~~~ + + + +  !!""""""####$$$$$$%%$$%%%%%%%%&&%%%%&&&&%%&&&&&&&&&&%%&&%%%%%%%%%%$$$$$$$$$$##########""""""""!!!!!!!!!! 77778888888899999999::::::::::;;;;;;;;<<<<<<<<========>>>>>>>>????????@@@@@@@@AAAAAAAABBBBBBBBCCCCCCCCDDDDDDDDEEEEEEEEEEFFFFFFFFGGGGGGGGHHHHHHHHHHIIIIIIIIJJJJJJJJJJKKKKKKKKKKLLLLLLLLMMMMMMMMMMNNNNNNNNNNNNOOOOOOOOOOPPPPPPOOOOPPOOOONNNNNNLLMMKKKKJJIIIIFFFFEEDDCCAA@@??==;;::997755332200..++++))&&$$""  }}~~~~~~~~~~~~~~  !!!!""""""######$$$$$$%%%%%%&&&&%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%%%%%%%$$$$$$$$$$##########""""""""!!!!!!!!!! 8888888899999999::::::::;;;;;;;;<<<<<<<<========>>>>>>>>????????@@@@@@@@AAAAAAAABBBBBBBBCCCCCCCCDDDDDDDDDDEEEEEEEEFFFFFFFFGGGGGGGGHHHHHHHHHHIIIIIIIIJJJJJJJJJJKKKKKKKKLLLLLLLLLLMMMMMMMMMMNNNNNNNNNNOOOOOOOOOOPPPPPPPPPPQQQQQQPPPPPPPPPPNNOONNMMLLLLKKJJJJIIGGGGFFEECCBB@@@@??;;;;998855443322..,,++))''$$""  ~~~~~~~~~  !!!!""""####$$$$$$%%%%%%%%&&%%&&&&&&&&''&&''''''''''&&''''&&&&&&&&&&&&&&%%%%%%%%$$$$$$$$$$##########""""""""!!!!!!!!!! 8899999999::::::::;;;;;;;;<<<<<<<<========>>>>>>>>????????@@@@@@@@AAAAAAAABBBBBBBBCCCCCCCCCCDDDDDDDDEEEEEEEEFFFFFFFFGGGGGGGGHHHHHHHHHHIIIIIIIIJJJJJJJJKKKKKKKKKKLLLLLLLLMMMMMMMMMMNNNNNNNNNNOOOOOOOOOOPPPPPPPPPPQQQQQQQQQQQQRRQQQQQQQQQQPPOOPPOONNMMMMLLKKJJIIHHFFFFFFCCBBAA@@>><<<<::9966442222//,,++))''$$##!!  ~~ + +  !!""""""""##$$$$$$$$$$%%%%&&&&&&''''''''''''''''''''''''''''''''''''&&''&&&&&&&&%%%%%%%%$$$$$$$$$$##########""""""""!!!!!!!!!! 999999::::::::;;;;;;;;<<<<<<<<========>>>>>>>>????????@@@@@@@@AAAAAAAABBBBBBBBCCCCCCCCDDDDDDDDEEEEEEEEFFFFFFFFGGGGGGGGHHHHHHHHIIIIIIIIIIJJJJJJJJKKKKKKKKKKLLLLLLLLMMMMMMMMMMNNNNNNNNOOOOOOOOOOPPPPPPPPPPQQQQQQQQQQQQRRRRRRRRRRRRRRRRQQRRQQPPPPOOPPNNMMMMLLLLJJIIIIGGFFEEDDCCAA@@??==;;::886655333311--++**((''$$!!   !!""""""####$$$$$$%%%%%%&&&&''''&&''''''((((''((((((((((((((((((''''''''''''''&&&&&&&&%%%%%%%%$$$$$$$$$$########""""""""""!!!!!!!!!! ::::::::;;;;;;;;<<<<<<<<========>>>>>>>>????????@@@@@@@@AAAAAAAABBBBBBBBCCCCCCCCDDDDDDDDEEEEEEEEFFFFFFFFGGGGGGGGHHHHHHHHHHIIIIIIIIJJJJJJJJKKKKKKKKLLLLLLLLLLMMMMMMMMNNNNNNNNNNOOOOOOOOOOPPPPPPPPPPQQQQQQQQQQRRRRRRRRRRSSSSSSSSSSSSSSSSRRRRRRQQQQPPPPOONNNNMMLLKKJJJJHHGGFFDDDDBB@@@@>><<;;99886633331100++**((''%%""   + +  """"""""####$$%%%%%%%%&&''''''''''''((((((((((((((((((((((((((((((((((((''''''''''''&&&&&&&&%%%%%%%%$$$$$$$$$$########""""""""""!!!!!!!!!! ::::;;;;;;;;<<<<<<<<========>>>>>>>>????????@@@@@@@@AAAAAABBBBBBBBCCCCCCCCDDDDDDDDEEEEEEEEFFFFFFFFGGGGGGGGHHHHHHHHHHIIIIIIIIJJJJJJJJKKKKKKKKLLLLLLLLLLMMMMMMMMNNNNNNNNNNOOOOOOOOPPPPPPPPPPQQQQQQQQQQRRRRRRRRRRSSSSSSSSSSTTTTTTTTSSTTTTSSSSRRSSRRQQQQPPPPOOOOMMLLLLKKIIIIGGGGFFCCCCAA@@@@<<<<::998855221100..++))''''##   + +  !!""""####$$$$%%%%&&%%&&&&''''''''(((((((((((())))))))))))))))))))))(())((((((((((''''''''''&&&&&&&&%%%%%%%%$$$$$$$$$$########""""""""""!!!!!!!!!! ;;;;;;<<<<<<<<========>>>>>>>>????????@@@@@@@@AAAAAAAABBBBBBBBCCCCCCCCDDDDDDDDEEEEEEEEFFFFFFFFGGGGGGGGHHHHHHHHIIIIIIIIJJJJJJJJKKKKKKKKLLLLLLLLLLMMMMMMMMNNNNNNNNOOOOOOOOOOPPPPPPPPPPQQQQQQQQRRRRRRRRRRSSSSSSSSSSTTTTTTTTTTTTUUUUUUTTTTUUTTTTSSSSSSRRRRPPQQPPOONNLLMMLLKKIIGGGGGGEECCAA@@@@==;;::99996633221100,,**((((&&!!   + +  """"######$$%%%%%%&&&&&&''''''(((((())(())))))))))))))))))))))))))))))))))))))))((((((((''''''''''&&&&&&&&%%%%%%%%$$$$$$$$$$########""""""""""!!!!!!!!!! ;;<<<<<<<<========>>>>>>>>????????@@@@@@AAAAAAAABBBBBBBBCCCCCCCCDDDDDDDDEEEEEEEEFFFFFFFFGGGGGGGGHHHHHHHHIIIIIIIIJJJJJJJJKKKKKKKKLLLLLLLLMMMMMMMMMMNNNNNNNNOOOOOOOOOOPPPPPPPPQQQQQQQQQQRRRRRRRRRRSSSSSSSSSSTTTTTTTTTTUUUUUUUUUUVVVVUUUUUUVVUUUUTTSSTTSSSSQQPPQQPPOOMMMMLLLLJJHHGGGGFFDDBBAAAA@@<<;;::999944221100--++))((''""!!    !!########$$$$&&&&&&&&''''(((((((((())))))))))****************************))))))))))))))((((((((''''''''&&&&&&&&&&%%%%%%%%$$$$$$$$$$########""""""""""!!!!!!!!!! <<<<<<======>>>>>>>>????????@@@@@@@@AAAAAAAABBBBBBBBCCCCCCCCDDDDDDEEEEEEEEFFFFFFFFGGGGGGGGHHHHHHHHIIIIIIIIJJJJJJJJKKKKKKKKLLLLLLLLMMMMMMMMMMNNNNNNNNOOOOOOOOPPPPPPPPPPQQQQQQQQRRRRRRRRRRSSSSSSSSSSTTTTTTTTTTUUUUUUUUUUVVVVVVVVVVVVWWVVVVVVVVVVUUUUTTTTTTSSRRQQQQQQOONNMMMMLLJJIIHHHHGGDDCCBBBBAA>>;;::99995544221100--++))''&&""   + +  !!""########$$%%&&&&&&&&''''(((((((())))))**))**************++++**++****************))**))))))))((((((((''''''''&&&&&&&&&&%%%%%%%%$$$$$$$$$$########""""""""""!!!!!!!!!! ========>>>>>>>>????????@@@@@@AAAAAAAABBBBBBBBCCCCCCCCDDDDDDDDEEEEEEEEFFFFFFFFGGGGGGGGHHHHHHIIIIIIIIJJJJJJJJKKKKKKKKLLLLLLLLLLMMMMMMMMNNNNNNNNOOOOOOOOPPPPPPPPPPQQQQQQQQRRRRRRRRRRSSSSSSSSTTTTTTTTTTUUUUUUUUUUVVVVVVVVVVWWWWWWWWWWWWXXWWWWWWVVWWVVVVUUTTUUTTSSRRRRQQPPOONNNNMMLLJJIIIIHHGGDDBBBBAA@@==;;::::9955331100//++**((''$$!!  + + + +  !!!!####$$$$$$$$&&&&''''''''(())))))))))**********++++++++++++++++++++++++++++++++++************))))))))((((((((''''''''&&&&&&&&&&%%%%%%%%$$$$$$$$##########""""""""""!!!!!!!! ====>>>>>>????????@@@@@@@@AAAAAAAABBBBBBBBCCCCCCDDDDDDDDEEEEEEEEFFFFFFFFGGGGGGGGHHHHHHHHIIIIIIIIJJJJJJJJKKKKKKKKLLLLLLLLMMMMMMMMNNNNNNNNOOOOOOOOPPPPPPPPQQQQQQQQQQRRRRRRRRSSSSSSSSSSTTTTTTTTTTUUUUUUUUVVVVVVVVVVVVWWWWWWWWWWXXXXXXXXXXXXXXXXXXWWWWWWWWVVUUUUTTTTSSSSRRQQPPOOOONNMMKKJJIIHHGGFFDDCCBBAA??<<::::997744220000--,,**((((##  + +  + + + + + +  !!!!!!##$$$$$$%%%%''''''''(((())))**))****++++++++++++++,,++,,++++,,,,,,,,,,,,++,,++++++++++**++********))))))))((((((((''''''''&&&&&&&&&&%%%%%%%%$$$$$$$$##########""""""""""!!!!!!!! >>>>>>????????@@@@@@@@AAAAAABBBBBBBBCCCCCCCCDDDDDDDDEEEEEEEEFFFFFFGGGGGGGGHHHHHHHHIIIIIIIIJJJJJJJJKKKKKKKKLLLLLLLLMMMMMMMMNNNNNNNNOOOOOOOOPPPPPPPPQQQQQQQQQQRRRRRRRRSSSSSSSSSSTTTTTTTTUUUUUUUUUUVVVVVVVVVVWWWWWWWWWWXXXXXXXXXXYYYYYYYYYYXXYYYYYYXXWWXXXXWWVVVVUUUUTTSSSSRRQQPPPPOOMMNNKKJJIIHHHHDDCCBBAAAA>>==;;::::7744222211,,++))((''##   + + + + + +  !!!!""$$$$$$%%%%&&''((''(((())))**********++++++++++++,,,,,,,,,,,,,,--,,,,,,,,,,,,,,,,,,,,++++++++++**********))))))))((((((((''''''''&&&&&&&&%%%%%%%%%%$$$$$$$$##########""""""""""!!!!!!!! >>??????@@@@@@@@AAAAAAAABBBBBBBBCCCCCCCCDDDDDDEEEEEEEEFFFFFFFFGGGGGGGGHHHHHHHHIIIIIIJJJJJJJJKKKKKKKKLLLLLLLLMMMMMMMMNNNNNNNNOOOOOOOOPPPPPPPPQQQQQQQQQQRRRRRRRRSSSSSSSSTTTTTTTTTTUUUUUUUUVVVVVVVVVVWWWWWWWWWWXXXXXXXXXXYYYYYYYYYYYYZZZZZZZZYYZZZZZZYYXXXXYYXXWWVVVVVVUUTTTTSSSSQQPPOONNNNLLKKJJIIIIGGDDCCBBBB@@==<<::::8866442222//++**))))$$""""!!!! + +  + + + + + +  !!""""##$$%%%%&&&&''(((((((())))**++**++**++,,,,,,,,,,,,--,,--------------------------,,--,,,,,,,,,,++++++++********))))))))))((((((((''''''''&&&&&&&&%%%%%%%%%%$$$$$$$$##########""""""""!!!!!!!!!! ????@@@@@@@@AAAAAAAABBBBBBCCCCCCCCDDDDDDDDEEEEEEEEFFFFFFGGGGGGGGHHHHHHHHIIIIIIIIJJJJJJJJKKKKKKKKLLLLLLMMMMMMMMNNNNNNNNOOOOOOOOPPPPPPPPQQQQQQQQQQRRRRRRRRSSSSSSSSTTTTTTTTTTUUUUUUUUVVVVVVVVVVWWWWWWWWWWXXXXXXXXYYYYYYYYYYYYZZZZZZZZZZ[[[[[[ZZZZZZ[[[[ZZYYYYYYYYXXWWWWWWVVTTUUTTTTRRQQPPOOOOOOKKJJIIIIIIFFDDBBBBCC??==;;;;;;7755332222..++**))))$$"""""" + +   + +  !!!!""""##$$%%%%&&&&&&(((((())))))**++**++++++,,,,,,--,,--------------............--..--------------,,,,,,,,,,++++++++********))))))))((((((((((''''''''&&&&&&&&%%%%%%%%%%$$$$$$$$##########""""""""!!!!!!!!!! @@@@@@@@AAAAAABBBBBBBBCCCCCCCCDDDDDDEEEEEEEEFFFFFFFFGGGGGGGGHHHHHHIIIIIIIIJJJJJJJJKKKKKKKKLLLLLLLLMMMMMMMMNNNNNNNNOOOOOOOOPPPPPPPPQQQQQQQQRRRRRRRRSSSSSSSSTTTTTTTTUUUUUUUUUUVVVVVVVVWWWWWWWWWWXXXXXXXXXXYYYYYYYYYYZZZZZZZZZZ[[[[[[[[[[\\\\\\[[[[[[\\\\[[ZZZZZZZZYYXXXXXXWWUUUUTTTTUURRQQPPPPPPMMKKJJJJJJHHEECCCCCCBB>>==<<<<::6655444411..,,++++(($$$$#### + + + + + + !!!!""""##$$&&%%&&&&&&''))))))))))**,,++++,,++,,------------..............//........................----------,,,,,,,,++++++++********))))))))((((((((''''''''''&&&&&&&&%%%%%%%%$$$$$$$$$$########""""""""""!!!!!!!!!! @@AAAAAAAABBBBBBBBCCCCCCDDDDDDDDEEEEEEEEFFFFFFFFGGGGGGHHHHHHHHIIIIIIIIJJJJJJJJKKKKKKLLLLLLLLMMMMMMMMNNNNNNNNOOOOOOOOPPPPPPPPQQQQQQQQRRRRRRRRSSSSSSSSTTTTTTTTUUUUUUUUUUVVVVVVVVWWWWWWWWWWXXXXXXXXYYYYYYYYYYZZZZZZZZZZ[[[[[[[[[[\\\\\\\\\\\\]]]]\\\\\\\\]]\\[[[[[[ZZZZYYYYYYYYWWVVUUUUUUSSRRPPQQQQQQMMKKKKKKKKGGDDDDDDDD??====<<<<7755554444//----,,++&&%%%%$$## + + + + + +  """"""####$$&&&&&&''''((**))))****++,,,,,,,,,,--......--....//////..////////////////////////....//..........--------,,,,,,,,++++++++********))))))))((((((((''''''''''&&&&&&&&%%%%%%%%$$$$$$$$$$########""""""""""!!!!!!!!!! AAAAAABBBBBBCCCCCCCCDDDDDDDDEEEEEEFFFFFFFFGGGGGGGGHHHHHHHHIIIIIIJJJJJJJJKKKKKKKKLLLLLLLLMMMMMMNNNNNNNNOOOOOOOOPPPPPPPPQQQQQQQQRRRRRRRRSSSSSSSSTTTTTTTTUUUUUUUUUUVVVVVVVVWWWWWWWWXXXXXXXXXXYYYYYYYYYYZZZZZZZZ[[[[[[[[[[[[\\\\\\\\\\]]]]]]]]]]^^^^]]]]]]]]^^]]\\\\\\\\ZZYYYYZZZZXXWWVVVVVVVVRRQQQQQQQQNNLLKKKKKKIIFFEEEEDDCC??>>>>====7766665555//..--,,**''&&%%$$""  + + + +  + +  ""########$$''''''''((((**********++,,----,,,,----//........//0000//////////0000//////000000//////////////..........--------,,,,,,,,++++++++********))))))))((((((((''''''''&&&&&&&&&&%%%%%%%%$$$$$$$$$$########""""""""""!!!!!!!!BBBBBBBBCCCCCCCCDDDDDDEEEEEEEEFFFFFFFFGGGGGGHHHHHHHHIIIIIIIIJJJJJJJJKKKKKKLLLLLLLLMMMMMMMMNNNNNNNNOOOOOOPPPPPPPPQQQQQQQQRRRRRRRRSSSSSSSSTTTTTTTTUUUUUUUUUUVVVVVVVVWWWWWWWWXXXXXXXXXXYYYYYYYYZZZZZZZZZZ[[[[[[[[[[\\\\\\\\\\]]]]]]]]]]^^^^^^^^^^^^__^^^^^^^^^^^^]]]]]]]][[ZZZZZZ[[[[XXWWWWWWWWTTRRRRRRRRRRMMMMLLLLLLIIGGFFFFEEBB??>>>>>>::8888666633////----))((''%%%%""!!  + +   + + + + + +  !!####$$$$$$%%(((((((((())++++++++++,,....------..////////////001100000000000011000000000011000000//000000//////////........--------,,,,,,,,++++++++********))))))))((((((((''''''''&&&&&&&&%%%%%%%%%%$$$$$$$$##########""""""""""!!!!BBBBCCCCCCDDDDDDDDEEEEEEEEFFFFFFGGGGGGGGHHHHHHHHIIIIIIJJJJJJJJKKKKKKKKLLLLLLLLMMMMMMNNNNNNNNOOOOOOOOPPPPPPPPQQQQQQQQRRRRRRSSSSSSSSTTTTTTTTUUUUUUUUUUVVVVVVVVWWWWWWWWXXXXXXXXYYYYYYYYYYZZZZZZZZ[[[[[[[[[[\\\\\\\\\\]]]]]]]]]]^^^^^^^^^^^^__________``__________^^]]^^^^^^]][[[[[[[[\\YYWWXXXXXXXXTTSSSSSSSSPPMMNNMMMMJJHHGGFFFFFFAA@@@@????9988887766110000//..**((((''&&##!!!!   + + + + + +  ""$$$$%%%%%%&&))))(())))**,,,,,,,,,,--..........//00000000//00111111111100112211111111111111111100000011000000////////////........------,,,,,,,,++++++++********))))))))))((((((((''''''''&&&&&&&&%%%%%%%%%%$$$$$$$$##########""""""""!!CCCCCCDDDDDDDDEEEEEEFFFFFFFFGGGGGGGGHHHHHHIIIIIIIIJJJJJJJJKKKKKKLLLLLLLLMMMMMMMMNNNNNNOOOOOOOOPPPPPPPPQQQQQQQQRRRRRRRRSSSSSSSSTTTTTTTTUUUUUUUUVVVVVVVVWWWWWWWWXXXXXXXXYYYYYYYYYYZZZZZZZZ[[[[[[[[[[\\\\\\\\\\]]]]]]]]]]^^^^^^^^^^__________``````````````````````__^^________\\\\\\\\\\\\XXXXXXYYYYVVTTSSTTTTTTOONNNNMMMMJJIIHHHHGGCCBB@@@@??<<;;9999885522110000..++**))))&&$$##""""  + + + +  !! !!!!!!$$%%%%&&&&&&))))))))))**++--,,--------//////////001111110000002222222211111122222222111111222222111111111111110000000000////////......--------,,,,,,,,++++++++********))))))))((((((((((''''''''&&&&&&&&%%%%%%%%%%$$$$$$$$##########""""""CCDDDDDDDDEEEEEEFFFFFFFFGGGGGGHHHHHHHHIIIIIIIIJJJJJJKKKKKKKKLLLLLLLLMMMMMMNNNNNNNNOOOOOOOOPPPPPPQQQQQQQQRRRRRRRRSSSSSSSSTTTTTTTTUUUUUUUUVVVVVVVVWWWWWWWWXXXXXXXXYYYYYYYYYYZZZZZZZZ[[[[[[[[\\\\\\\\\\]]]]]]]]]]^^^^^^^^^^__________````````````aaaaaaaaaa``aaaaaaaaaa____``````^^]]]]]]]]]]ZZYYYYYYYYYYUUUUTTTTTTQQPPOOOOOOLLIIIIHHIIHHDDCCAAAAAA<<;;;;99994433220000--,,,,))))''&&&&##""!!  + + + + + + + + + + !!!!!!!!""##&&&&&&&&''''********++++----..------//0000000000112222111111112233222222222233333322222222333322222222222222111111111100000000//////........--------,,,,,,,,++++++++********))))))))((((((((''''''''''&&&&&&&&%%%%%%%%$$$$$$$$$$########""""DDDDEEEEEEEEFFFFFFGGGGGGGGHHHHHHHHIIIIIIJJJJJJJJKKKKKKKKLLLLLLMMMMMMMMNNNNNNNNOOOOOOPPPPPPPPQQQQQQQQRRRRRRSSSSSSSSTTTTTTTTUUUUUUUUVVVVVVVVWWWWWWWWXXXXXXXXYYYYYYYYZZZZZZZZZZ[[[[[[[[\\\\\\\\\\]]]]]]]]^^^^^^^^^^__________````````````aaaaaaaaaabbbbbbbbbbaaaabbbbbbbb````````aaaa^^^^^^^^^^]][[ZZZZZZZZWWVVVVUUUUTTRRQQQQPPPPKKJJJJIIIIGGDDCCCCAA??==<<<<;;885544443311..,,,,++))((''&&%%$$##!!  + + + +  + + + + + +  """"##$$##$$''''''((((((++++++,,++,,..........//0011110011001122222222222244333333332233444433333333334433333322223333222222112211111111000000////////........--------,,,,,,,,++++++++********))))))))((((((((''''''''&&&&&&&&&&%%%%%%%%$$$$$$$$$$########EEEEEEEEFFFFFFGGGGGGGGHHHHHHIIIIIIIIJJJJJJJJKKKKKKLLLLLLLLMMMMMMNNNNNNNNOOOOOOOOPPPPPPQQQQQQQQRRRRRRRRSSSSSSSSTTTTTTTTUUUUUUVVVVVVVVWWWWWWWWXXXXXXXXYYYYYYYYYYZZZZZZZZ[[[[[[[[\\\\\\\\]]]]]]]]]]^^^^^^^^^^__________``````````aaaaaaaaaabbbbbbbbbbbbccccccccccbbccccccccaaaaaaaaaabb____________\\\\[[[[[[YYXXWWWWVVVVSSRRQQQQPPOOMMKKKKJJJJGGEEDDDDCC@@>><<<<;;88664444442200//--,,++**((&&&&%%%%##!!!!  + +  + + + + + + + +  ""$$$$$$$$%%''(((())(())**,,,,,,,,----////////////2222112211223333333333333344444444334444554444444433554444444433334433333333222222222211111100000000////////........--------,,,,,,,,++++++++********))))))))((((((((''''''''&&&&&&&&%%%%%%%%%%$$$$$$$$######EEFFFFFFFFGGGGGGGGHHHHHHIIIIIIIIJJJJJJKKKKKKKKLLLLLLMMMMMMMMNNNNNNNNOOOOOOPPPPPPPPQQQQQQQQRRRRRRSSSSSSSSTTTTTTTTUUUUUUUUVVVVVVVVWWWWWWWWXXXXXXXXYYYYYYYYZZZZZZZZ[[[[[[[[\\\\\\\\]]]]]]]]]]^^^^^^^^__________``````````aaaaaaaaaabbbbbbbbbbbbccccccccccddddddddddccccddddddddbbbbbbbbbbcc____``````]]\\]]\\\\\\YYXXWWWWXXUUSSSSRRRRQQOOMMMMKKKKIIGGGGDDDDBBAA@@>>====9988774444221111..--,,++**((&&&&%%%%##""!!  + + + + + + + + + +  !!""##$$$$%%%%&&&&))))))))**++----------....0000000011112222332233224444444444444455555544554455665555554444555555554444444444444433333333332222222211111100000000////////........------,,,,,,,,++++++++********))))))))((((((((((''''''''&&&&&&&&%%%%%%%%%%$$$$$$$$##FFFFFFGGGGGGHHHHHHHHIIIIIIJJJJJJJJKKKKKKKKLLLLLLMMMMMMMMNNNNNNOOOOOOOOPPPPPPPPQQQQQQRRRRRRRRSSSSSSSSTTTTTTUUUUUUUUVVVVVVVVWWWWWWWWXXXXXXXXYYYYYYYYZZZZZZZZ[[[[[[[[\\\\\\\\]]]]]]]]]]^^^^^^^^__________````````aaaaaaaaaabbbbbbbbbbbbccccccccccddddddddddddeeeeeeeeddddddeeeeeeccccccccccccaa``````aaaa^^]]]]\\]][[ZZYYXXXXXXUUTTTTSSSSQQOONNNNMMLLHHGGGGFFEEDDAA@@@@??<<998888775544111100//..--++++**((&&%%%%$$""""  + + + + + +  + +   !!!!!!####$$%%%%%%''''(())****++++,,........////111111112211223333333333445555555555555566665555555577666666555555666666555555555555554444444444333333332222221111111100000000////////......--------,,,,,,,,++++++++********))))))))((((((((''''''''''&&&&&&&&%%%%%%%%$$$$$$$$FFGGGGGGHHHHHHHHIIIIIIJJJJJJJJKKKKKKLLLLLLLLMMMMMMNNNNNNNNOOOOOOOOPPPPPPQQQQQQQQRRRRRRSSSSSSSSTTTTTTTTUUUUUUUUVVVVVVWWWWWWWWXXXXXXXXYYYYYYYYZZZZZZZZ[[[[[[[[\\\\\\\\]]]]]]]]]]^^^^^^^^________``````````aaaaaaaaaabbbbbbbbbbccccccccccddddddddddddeeeeeeeeeeeeffffffeeeeeeeeffffeeddddddddddccbbaaaaaaaa``__^^^^]]]][[[[ZZZZYYYYWWTTTTSSSSRRPPOOOONNNNJJIIHHHHGGDDCCAAAA??>>;;88888877554422220000..,,,,++**))''''&&%%%%!!!!!!!!  + + + + + + + + + + + +  + + + + + + + + !! !!""####$$$$%%&&''''((((((**++,,,,,,--,,//////////00222222222233444444444444446666666666666677666666666677777777666666777766666666556666555555554444444444333333222222221111111100000000//////........--------,,,,,,,,++++++++********))))))))((((((((''''''''&&&&&&&&&&%%%%%%%%$$$$GGGGHHHHHHIIIIIIIIJJJJJJJJKKKKKKLLLLLLLLMMMMMMNNNNNNNNOOOOOOPPPPPPPPQQQQQQRRRRRRRRSSSSSSSSTTTTTTUUUUUUUUVVVVVVVVWWWWWWWWXXXXXXYYYYYYYYZZZZZZZZ[[[[[[[[\\\\\\\\]]]]]]]]^^^^^^^^^^________``````````aaaaaaaabbbbbbbbbbccccccccccddddddddddddeeeeeeeeeeffffffffffffggggggggffffffffggggffeeeeeeeeeeddccbbbbbbbb````____^^]]\\\\[[[[ZZXXWWUUUUUUTTSSQQOOOONNMMLLKKHHHHGGFFDDAAAAAA??==<<::998866664422111111..--,,++++++))''&&&&&&%%##""!!!!  + + + + + + + + + + + +  + + + + + + + + + + + + + + + + + + + +  !!!!##$$$$$$$$$$&&''((((((((****--,,------..//0000000011223333333344445555555555666677777777667788887777777777888888777777778877777777667777666666665555555555444444443333332222222211111111000000////////........--------,,,,,,,,++++++++********))))))))((((((((''''''''&&&&&&&&%%%%%%%%%%HHHHHHIIIIIIIIJJJJJJKKKKKKKKLLLLLLMMMMMMMMNNNNNNOOOOOOOOPPPPPPQQQQQQQQRRRRRRRRSSSSSSTTTTTTTTUUUUUUUUVVVVVVWWWWWWWWXXXXXXXXYYYYYYYYZZZZZZ[[[[[[[[\\\\\\\\]]]]]]]]]]^^^^^^^^________````````aaaaaaaaaabbbbbbbbbbccccccccccddddddddddeeeeeeeeeeffffffffffffgggggggggggghhhhhhgggggggggghhggffffffffffeeddddccccccbbaaaa``````^^]]]][[\\ZZYYXXXXVVVVSSSSRRQQPPPPMMLLLLKKIIGGFFEEDDBBAA??>>>><<::::777766553322111100....++++++**))((''&&&&$$$$####"" !!!!!!""""""%%%%$$%%&&%%(((())((**)),,++,,--......//00111111113322334444444455556666666677777788888877888899889988888899999988888888889988888877777788777777666666666655555555444444333333332222222211111100000000////////........------,,,,,,,,++++++++********))))))))((((((((((''''''''&&&&&&&&%%%%%%HHIIIIIIIIJJJJJJKKKKKKKKLLLLLLMMMMMMMMNNNNNNOOOOOOOOPPPPPPQQQQQQQQRRRRRRSSSSSSSSTTTTTTUUUUUUUUVVVVVVVVWWWWWWXXXXXXXXYYYYYYYYZZZZZZZZ[[[[[[[[\\\\\\\\]]]]]]]]^^^^^^^^________````````aaaaaaaaaabbbbbbbbccccccccccddddddddddeeeeeeeeeeffffffffffffgggggggggghhhhhhhhhhhhhhiiiiiihhhhhhhhhhiihhggggggggggffeeeeddddddccbbbbaaaaaa^^]]]]\\\\\\ZZYYYYWWVVUUTTSSSSRRPPOOMMMMKKKKHHGGEEEEDDDDAA>>>>====<<;;888866664422221100//--------,,**((((((''&&%%%%$$$$##!!!!   !!""""""""##$$$$%%&&&&&&''(((())******,,,,,,--....00//0000112233334433445555555566666677777788888899999988998899::::9999999999::9999999999::9999998888889988888877777777777766666655555555444444333333332222221111111100000000//////........--------,,,,,,,,++++++++********))))))))((((((((''''''''''&&&&&&&&%%IIIIIIJJJJJJKKKKKKLLLLLLLLMMMMMMNNNNNNNNOOOOOOPPPPPPPPQQQQQQRRRRRRRRSSSSSSTTTTTTTTUUUUUUUUVVVVVVWWWWWWWWXXXXXXXXYYYYYYZZZZZZZZ[[[[[[[[\\\\\\\\]]]]]]]]^^^^^^^^________````````aaaaaaaaaabbbbbbbbccccccccccddddddddeeeeeeeeeeffffffffffffgggggggggghhhhhhhhhhhhiiiiiiiiiiiiiijjjjiiiiiiiiiiiijjhhgghhhhhhhhggffffeeeeeeddbbccaabbbb``^^^^]]]]\\\\YYYYXXXXWWVVSSSSRRRRPPMMMMMMLLKKIIGGFFEEEECCAA??>>======::88777777664433111111//--------,,))((((((((''%%%%%%%%$$##""""""!!!! ""##########$$%%&&&&&&&&''(())))**))**,,,,,,------//1100001111224444444444555577666677667788998899998899::::99::99::;;;;::::::::::;;;;::::::::::::::::::99999999999999888888888877777766666666555555444444443333332222222211111111000000////////........--------,,,,,,,,++++++++********))))))))((((((((''''''''&&&&&&&&JJJJJJJJKKKKKKLLLLLLLLMMMMMMNNNNNNNNOOOOOOPPPPPPPPQQQQQQRRRRRRRRSSSSSSTTTTTTTTUUUUUUVVVVVVVVWWWWWWWWXXXXXXYYYYYYYYZZZZZZZZ[[[[[[\\\\\\\\]]]]]]]]^^^^^^^^________````````aaaaaaaaaabbbbbbbbccccccccddddddddddeeeeeeeeeeffffffffffgggggggggghhhhhhhhhhhhiiiiiiiiiiiijjjjjjjjjjjjkkkkkkjjjjjjjjjjjjiiiihhhhiiiihhhhggggggffddddccccccbbaaaa``____^^\\\\[[ZZZZYYWWWWTTTTSSSSQQQQNNNNLLKKKKJJGGGGEEDDDDBB@@@@>>>><<::::99777777555533332222////..----++++++))((((''''&&&&%%$$$$$$##""""""""  !!!!!!!!""""$$$$$$$$%%%%&&&&&&''((((******))++++--------......001111112222444455555555557788777788779999::99::::99::;;;;::;;;;;;;;<<;;;;;;;;;;;;<<;;;;;;;;;;;;;;;;;;::::::::::::::99999999998888888877777766666666555555444444443333332222222211111100000000////////........--------,,,,,,++++++++**********))))))))((((((((''''''''&&&&JJJJKKKKKKLLLLLLLLMMMMMMNNNNNNOOOOOOOOPPPPPPQQQQQQQQRRRRRRSSSSSSSSTTTTTTUUUUUUUUVVVVVVWWWWWWWWXXXXXXXXYYYYYYZZZZZZZZ[[[[[[[[\\\\\\\\]]]]]]^^^^^^^^________````````aaaaaaaaaabbbbbbbbccccccccddddddddddeeeeeeeeffffffffffgggggggggghhhhhhhhhhhhiiiiiiiiiijjjjjjjjjjjjjjkkkkkkkkkkkkllllllkkkkkkkkkkkkjjjjiiiijjjjhhiigggghhffeeeeddddddccbbbbaa````^^]]]]\\\\[[YYXXXXWWVVUUSSRRRRQQOONNLLLLLLJJIIHHEEEECCCC@@??????====::999999886644444433332200////..--,,,,++++****((((''&&&&%%%%$$$$########""!!  !!!!!!""""""######$$%%%%&&&&&&&&(((((((())))++++**++,,,,--........////00112233333344555566666677778888889999::::::;;::;;;;;;;;;;<<;;<<<<<<<<<<<<==<<<<<<<<==<<==<<<<<<<<<<<<<<;;;;;;;;;;;;;;::::::::99::9999998888887777777766666655555555444444333333332222221111111100000000////////......--------,,,,,,,,++++++++********))))))))((((((((((''''''''KKKKKKLLLLLLMMMMMMMMNNNNNNOOOOOOOOPPPPPPQQQQQQQQRRRRRRSSSSSSSSTTTTTTUUUUUUUUVVVVVVWWWWWWWWXXXXXXYYYYYYYYZZZZZZZZ[[[[[[\\\\\\\\]]]]]]]]^^^^^^^^________````````aaaaaaaabbbbbbbbccccccccddddddddddeeeeeeeeffffffffffgggggggggghhhhhhhhhhiiiiiiiiiijjjjjjjjjjjjkkkkkkkkkkkkllllllllllllllmmmmmmllllllllllllkkkkjjjjjjkkiiiihhhhhhhhffffeeeeeeeeccccccaaaa``^^^^^^]]]][[YYYYWWWWWWVVRRRRQQQQQQPPLLLLKKKKKKGGFFFFDDDDBB????>>>>>><<99999999996644444444332211111111//------,,,,++****((((((''&&&&%%%%%%$$$$$$####""!!!!!!   !!!!""""""""####$$$$$$$$%%%%%%&&''''''''''(())))))))))++,,,,,,,,,,--..//00////0011222233223355555566667777888888998899::;;;;;;;;<<;;<<<<<<<<<<==============>>>>>>==========>>================<<<<<<<<<<<<<<;;;;;;::;;::::::999999998888887777776666666655555544444444333333332222221111111100000000//////........--------,,,,,,,,++++++++********))))))))((((((((''''''KKLLLLLLMMMMMMMMNNNNNNOOOOOOOOPPPPPPQQQQQQRRRRRRRRSSSSSSTTTTTTTTUUUUUUVVVVVVVVWWWWWWXXXXXXXXYYYYYYYYZZZZZZ[[[[[[[[\\\\\\]]]]]]]]^^^^^^^^________````````aaaaaaaabbbbbbbbccccccccddddddddeeeeeeeeeeffffffffffgggggggghhhhhhhhhhiiiiiiiiiijjjjjjjjjjjjkkkkkkkkkkkkllllllllllllmmmmmmmmmmmmmmnnnnmmmmmmmmmmmmmmllllkkkkkkkkjjjjjjiiiiiiggggggffffffccccccbbbbbb``^^^^]]]]]][[YYYYXXXXXXUUTTSSRRRRRROONNLLKKKKKKGGGGEEEEEEEEBBBB@@>>>>>><<<<;;999988777744444433332211111100//..----------,,++++++++))))((((((((((&&&&&&&&&&&&############""""""""""!!""""""""""""""!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!! !!""""""""""############$$%%%%%%$$$$$$&&&&&&&&&&&&''''(((((((((())))********++,,--------..//00////0011112233332233446666666677778899999999::::<<<<<<;;<<<<<<============>>>>>>>>>>>>>>??????>>>>>>>>??????>>>>>>>>>>>>>>==============<<<<<<<<;;;;;;;;;;::::::9999998888888877777766666666555555444444443333332222222211111111000000////////........--------,,,,,,,,++++++++********))))))))((((((((''LLLLMMMMMMMMNNNNNNOOOOOOPPPPPPPPQQQQQQRRRRRRRRSSSSSSTTTTTTTTUUUUUUVVVVVVVVWWWWWWXXXXXXXXYYYYYYZZZZZZZZ[[[[[[\\\\\\\\]]]]]]]]^^^^^^________````````aaaaaaaabbbbbbbbccccccccddddddddeeeeeeeeeeffffffffgggggggggghhhhhhhhhhiiiiiiiiiijjjjjjjjjjkkkkkkkkkkkkllllllllllllmmmmmmmmmmmmnnnnnnnnnnnnnnnnoonnnnnnnnnnnnnnmmmmmmllllllkkkkkkjjjjjjiihhhhggggggeeddddcccccccc``__^^^^^^\\\\ZZYYYYYYWWWWUUSSSSRRQQQQNNMMMMLLJJJJHHFFFFEEEEDDBBAAAA@@@@==<<<<<<;;;;887777666666443333222222110000........----,,,,,,++++))))))))((((((((((((''''''''''&&%%%%%%%%%%$$$$$$$$$$$$$$$$$$$$##########################""""""############$$$$$$$$$$##$$$$$$$$$$$$%%%%%%&&&&%%&&&&&&&&''''((''''''((((((****))******,,,,++,,,,,,////....//////11111111222244444433555555777777888888::::::::;;;;;;======<<======??>>>>>>>>>>??@@@@????????@@@@@@????@@??@@@@@@????????????????>>>>>>>>>>>>>>======<<==<<<<<<;;;;;;::::::::9999998888887777777766666655555555444444333333332222222211111100000000////////......--------,,,,,,,,++++++++********))))))))((((((((MMMMMMMMNNNNNNOOOOOOPPPPPPPPQQQQQQRRRRRRRRSSSSSSTTTTTTUUUUUUUUVVVVVVWWWWWWWWXXXXXXYYYYYYYYZZZZZZ[[[[[[[[\\\\\\\\]]]]]]^^^^^^^^________````````aaaaaabbbbbbbbccccccccddddddddddeeeeeeeeffffffffgggggggggghhhhhhhhiiiiiiiiiijjjjjjjjjjkkkkkkkkkkkkllllllllllmmmmmmmmmmmmnnnnnnnnnnnnnnooooooooooooooooppnnoooooooooooonnnnnnmmmmmmllllllkkkkkkjjjjiiiiggggggffeeeeddddddbbbb``^^^^^^]]]][[YYYYYYXXXXVVTTTTTTRRQQPPMMMMLLLLJJIIGGGGFFFFEEDDAAAAAAAA????========;;8888888888775555554444331111111111//........----,,,,,,,,****))))))))))))((((((((((''&&&&&&&&&&&&%%%%%%%%%%$$$$$$$$######$$$$$$$$$$$$%%%%%%%%%%%%%%%%%%%%%%%%&&&&&&&&&&%%&&''''''''''(())))))(((())))********++++,,,,,,,,----........--0000111100001122333322333355555555556677779999999999;;::<<<<<<<<====>>>>>>==>>>>??@@????????@@@@AAAA@@@@AAAAAAAAAAAA@@AAAAAAAAAA@@@@AA@@@@@@@@@@??@@??????????>>>>>>==>>======<<<<<<<<;;;;;;::::::999999998888887777777766666655555544444444333333332222221111111100000000//////........--------,,,,,,,,++++++++********))))))))((((MMNNNNNNNNOOOOOOPPPPPPPPQQQQQQRRRRRRSSSSSSSSTTTTTTUUUUUUUUVVVVVVWWWWWWXXXXXXXXYYYYYYZZZZZZZZ[[[[[[[[\\\\\\]]]]]]]]^^^^^^________````````aaaaaaaabbbbbbbbccccccccddddddddeeeeeeeeffffffffgggggggghhhhhhhhhhiiiiiiiiiijjjjjjjjjjkkkkkkkkkkllllllllllmmmmmmmmmmmmnnnnnnnnnnnnooooooooooooooppppppppppppppppqqqqppppppppppppoooooooonnnnmmmmmmmmlllllljjkkiihhhhhhggggggffddddccccccbb____^^^^^^\\[[ZZXXXXXXWWUUTTSSSSSSQQPPNNLLLLLLKKIIGGGGGGGGEEDDBBBBAAAA@@@@>>>>====<<<<::::::99999977777777664433333333222211000000////........--,,++++++++****************))))))))))))))))))))))))))))))((''((((((((((''(((((((((((((((((())))))********++**++++++++,,,,,,,,,,,,............//000000//////1122222211113333444433333366777766666688889999::::99<<<<<<<<====<<>>??>>??????@@@@@@@@AA@@@@AAAABBAABBBBAABBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBAAAAAAAAAAAAAA@@@@@@@@@@@@??????????>>>>>>======<<<<<<;;;;;;;;::::::9999998888888877777766666666555555444444443333332222222211111111000000////////........--------,,,,,,,,++++++++********))))))))NNNNNNOOOOOOPPPPPPPPQQQQQQRRRRRRSSSSSSSSTTTTTTUUUUUUVVVVVVVVWWWWWWXXXXXXXXYYYYYYZZZZZZZZ[[[[[[\\\\\\\\]]]]]]^^^^^^^^________``````aaaaaaaabbbbbbbbccccccccddddddddeeeeeeeeffffffffgggggggghhhhhhhhhhiiiiiiiijjjjjjjjjjkkkkkkkkkkllllllllllmmmmmmmmmmmmnnnnnnnnnnnnooooooooooooppppppppppppppqqqqqqqqqqqqqqqqqqrrppqqqqqqqqqqppppppppoooooonnnnnnnnmmmmkkkkkkkkiiiigggggghheeeeeeddddddbbaaaa^^^^^^]][[[[YYYYYYYYVVVVSSSSSSSSPPPPNNNNLLLLJJJJHHHHHHGGDDDDDDCCCCBB@@@@@@????>><<<<<<;;;;::::998888887777776655554444444444443333332222221111111111110000//////////////////////....................----------------......------............//............////0000////000011111111111122222233333333444455555555666677888888889988::::;;::;;<<==>>====>>??>>??@@@@??@@AA@@AABBAAAABBBBBBBBCCCCBBCCCCBBDDCCCCCCCCCCCCDDCCCCCCCCCCCCCCCCBBBBCCBBBBBBBBBBAABBAAAAAA@@@@@@??@@??????>>>>>>>>======<<<<<<;;;;;;::::::::9999998888887777777766666655555555444444333333332222222211111100000000////////......--------,,,,,,,,++++++++********))))))NNOOOOOOPPPPPPQQQQQQQQRRRRRRSSSSSSSSTTTTTTUUUUUUVVVVVVVVWWWWWWXXXXXXYYYYYYYYZZZZZZ[[[[[[[[\\\\\\]]]]]]]]^^^^^^^^______````````aaaaaaaabbbbbbccccccccddddddddeeeeeeeeffffffffgggggggghhhhhhhhhhiiiiiiiijjjjjjjjjjkkkkkkkkkkllllllllllmmmmmmmmmmnnnnnnnnnnnnooooooooooooppppppppppppqqqqqqqqqqqqqqqqrrrrrrrrrrrrrrrrssqqqqrrrrrrrrrrqqqqqqqqppppnnnnoooooommmmlllllllljjjjhhhhhhhhggffddddddddddaa``````____\\ZZZZZZYYYYVVUUUUUUTTSSRROOOOOONNNNMMKKKKKKJJHHGGFFFFFFDDCCCCBBBBBB@@????>>>>>><<;;;;;;;;;;99888888888877555555555555444444444433222222222222111111000000////////////////............//////////..////////////00000000////0000000000001122111111112233333322222233444455554455666666776666778888::9999::;;::::<<<<<<<<<<====????>>??@@@@@@AAAAAAAABBBBCCCCCCCCCCCCCCEEDDDDDDCCDDDDEEEEDDDDDDDDDDEEEEEEDDDDDDDDEEDDDDDDCCDDCCDDCCCCCCBBCCBBBBBBBBAAAAAAAAAA@@@@@@??????>>>>>>======<<<<<<<<;;;;;;::::::999999998888887777777766666655555544444444333333332222221111111100000000//////........--------,,,,,,,,++++++++********))OOOOPPPPPPQQQQQQQQRRRRRRSSSSSSTTTTTTTTUUUUUUVVVVVVWWWWWWWWXXXXXXYYYYYYYYZZZZZZ[[[[[[[[\\\\\\]]]]]]]]^^^^^^________``````aaaaaaaabbbbbbbbccccccccddddddeeeeeeeeffffffffgggggggggghhhhhhhhiiiiiiiijjjjjjjjjjkkkkkkkkllllllllllmmmmmmmmmmnnnnnnnnnnnnooooooooooppppppppppppqqqqqqqqqqqqqqrrrrrrrrrrrrrrrrssssssssssssssssssttrrrrrrssssssqqrrrrrrrrqqqqoooooooooonnmmmmmmmmmmlliiiiiiiiiiggffeeeeeeeeeeccaa````````^^[[[[[[[[[[XXUUUUUUUUUUTTQQPPPPPPOONNMMKKKKKKKKJJIIGGGGGGGGFFDDCCCCCCCCBB@@????????==<<<<<<<<<<<<;;999999999988666666666655555555554433333333333322221133222211111111222211111100221111111111222222221111112222222233334433333333444455554444555566666655667788888888999999::::9999::<<<<<<<<;;<<==>>>>====>>??AA@@@@@@@@AAAACCCCBBBBBBCCCCEEEEDDDDDDEEFFFFEEEEEEEEEEFFFFFFFFEEEEFFGGFFFFFFEEEEFFEEFFEEEEEEDDEEEEEEEEDDDDDDDDDDCCCCCCBBBBBBBBBBAAAAAA@@@@@@????????>>>>>>======<<<<<<;;;;;;;;::::::9999998888888877777766666666555555444444443333332222222211111100000000////////........--------,,,,,,,,++++++********PPPPPPQQQQQQQQRRRRRRSSSSSSTTTTTTTTUUUUUUVVVVVVWWWWWWWWXXXXXXYYYYYYZZZZZZZZ[[[[[[\\\\\\\\]]]]]]^^^^^^^^______````````aaaaaaaabbbbbbccccccccddddddddeeeeeeeeffffffffgggggggghhhhhhhhiiiiiiiijjjjjjjjkkkkkkkkkkllllllllllmmmmmmmmmmnnnnnnnnnnooooooooooppppppppppppqqqqqqqqqqqqrrrrrrrrrrrrrrssssssssssssssssttttttttttttttttttttssssssssttttttrrrrssssssqqppppppppppppoonnnnnnnnnnllkkjjjjjjjjiiggggeeeeeeeeddbbaaaaaaaa__^^]][[[[[[[[XXXXVVVVVVUUSSSSQQPPPPPPNNNNMMLLKKKKJJJJIIGGGGGGGGGGFFFFDDDDDDDDDDCCAAAAAAAAAAAA@@@@????????>>>>>>>>>>==<<<<<<<<<<<<<<<<;;;;;;;;;;;;;;;;;;::::::::::::::::999999999999998888888888889999998888888899999999888899999999998888::::::::::::99<<;;;;;;;;;;;;<<==========>>>>??????????@@AABBBBAAAABBDDCCDDDDDDCCDDFFEEFFFFFFEEEEGGGGGGGGFFFFFFGGGGHHGGGGGGFFHHGGHHHHGGGGGGGGGGGGGGGGFFFFFFFFFFFFFFEEEEEEEEEEDDDDDDDDCCCCCCCCCCBBBBBBAAAAAA@@@@@@??????>>>>>>>>======<<<<<<;;;;;;::::::::9999998888887777777766666655555555444444333333332222221111111100000000////////......--------,,,,,,,,++++++++****PPQQQQQQQQRRRRRRSSSSSSTTTTTTTTUUUUUUVVVVVVWWWWWWWWXXXXXXYYYYYYZZZZZZZZ[[[[[[\\\\\\\\]]]]]]^^^^^^^^______````````aaaaaabbbbbbbbccccccccddddddeeeeeeeeffffffffgggggggghhhhhhhhiiiiiiiijjjjjjjjkkkkkkkkkkllllllllmmmmmmmmmmnnnnnnnnnnooooooooooppppppppppppqqqqqqqqqqqqrrrrrrrrrrrrssssssssssssssssttttttttttttttttuuuuuuuuuuuuuuuuuuuuttttttttttuussssssssssssttqqqqqqqqqqqqppnnnnnnnnnnnnkkkkkkjjjjjjggggggffffffffccccccaaaaaa^^^^^^]]]]]]YYYYYYWWWWWWVVSSSSSSQQQQQQOONNNNMMMMMMJJJJJJIIIIIIHHGGGGFFFFFFEEDDDDCCCCCCBBAAAAAAAAAAAAAA????????????>>==========<<<<<<<<;;;;;;;;;;;;;;;;::::::::::::::::999999::::::::::::99::::::::::::;;;;::::::::::;;;;::<<;;;;<<<<<<<<==<<<<======>>>>==>>??????@@????AAAAAA@@AAAABBDDDDCCCCDDDDFFFFFFFFFFFFFFHHGGGGGGGGGGGGIIHHHHHHHHHHHHIIIIIIHHIIHHHHJJIIIIIIHHHHHHHHIIHHHHHHGGGGHHHHHHGGGGGGFFFFFFFFFFEEEEEEDDEEDDDDDDCCCCCCBBBBBBAAAAAAAA@@@@@@??????>>>>>>======<<<<<<<<;;;;;;::::::9999999988888877777766666666555555444444443333332222222211111111000000////////........--------,,,,,,,,++++++++QQQQQQRRRRRRSSSSSSTTTTTTTTUUUUUUVVVVVVWWWWWWXXXXXXXXYYYYYYZZZZZZZZ[[[[[[\\\\\\]]]]]]]]^^^^^^________``````aaaaaaaabbbbbbccccccccddddddddeeeeeeeeffffffgggggggghhhhhhhhiiiiiiiijjjjjjjjjjkkkkkkkkllllllllmmmmmmmmmmnnnnnnnnnnooooooooooppppppppppqqqqqqqqqqqqrrrrrrrrrrrrssssssssssssttttttttttttttttuuuuuuuuuuuuuuuuuuvvvvvvvvvvvvvvvvvvuuuuuuuuuuuuuuttttttttttttttrrrrrrrrrrrrppoooooooooooollllllllkkkkiihhhhhhhhffffccccccccccbb``________]]\\ZZZZZZZZYYWWUUTTTTTTTTSSQQPPPPPPPPNNMMLLLLKKKKJJIIIIHHHHHHHHGGFFEEEEEEEEDDCCBBBBBBBBBBBBAA@@@@@@@@@@??????>>>>>>========<<<<;;;;;;;;;;<<<<<<;;;;;;;;<<<<<<<<<<;;;;<<<<<<<<<<<<==<<<<<<<<<<<<>>>>>>======>>??????>>>>>>??@@@@@@??@@@@BBBBBBAABBBBCCDDCCCCCCEEEEFFFFFFFFFFHHGGGGHHHHGGGGIIIIHHIIIIIIHHJJJJIIJJJJIIIIKKJJJJKKJJJJJJKKKKJJJJJJJJIIJJJJJJJJIIIIIIHHIIIIIIHHHHHHGGHHHHGGGGGGFFFFFFFFFFEEEEEEDDDDDDCCCCCCBBBBBBAAAAAA@@@@@@????????>>>>>>======<<<<<<;;;;;;;;::::::9999998888888877777766666655555555444444333333332222222211111100000000////////........------,,,,,,,,++++++QQRRRRRRSSSSSSTTTTTTUUUUUUUUVVVVVVWWWWWWXXXXXXXXYYYYYYZZZZZZ[[[[[[[[\\\\\\]]]]]]]]^^^^^^______````````aaaaaabbbbbbbbccccccccddddddeeeeeeeeffffffffgggggggghhhhhhhhiiiiiiiijjjjjjjjkkkkkkkkllllllllmmmmmmmmmmnnnnnnnnooooooooooppppppppppqqqqqqqqqqqqrrrrrrrrrrssssssssssssssttttttttttttttuuuuuuuuuuuuuuvvvvvvvvvvvvvvvvvvvvwwwwwwwwwwwwwwwwwwvvvvvvvvvvvvvvuuuuuuuuuuuuuuttrrrrrrrrrrrrqqppppppppppnnmmmmmmmmmmmmjjhhhhhhhhhhggddddddddddbbaa__________]][[[[ZZZZZZYYWWVVVVVVVVVVVVSSQQQQQQQQQQNNNNMMMMMMMMKKKKJJJJIIIIIIHHHHFFFFFFFFEEEECCCCCCCCCCCCCCAAAAAABBBBBBAAAA@@@@AAAAAA@@@@@@AAAAAA????????@@@@????>>>>>>??????????>>????@@@@@@@@@@@@BBAAAAAAAAAAAABBBBBBBBBBBBCCDDDDDDDDDDDDEEFFFFFFEEEEFFGGHHHHHHGGGGHHJJJJIIIIIIIIIIKKKKKKJJJJJJKKLLLLLLKKKKKKKKMMMMLLLLLLKKKKLLLLLLLLKKKKKKKKLLKKKKKKJJJJJJKKKKJJJJJJIIIIIIIIIIHHHHHHGGGGGGGGGGFFFFFFEEEEEEDDDDDDCCCCCCCCBBBBBBAAAAAA@@@@@@??????>>>>>>========<<<<<<;;;;;;::::::::9999998888887777777766666655555555444444333333332222221111111100000000//////........--------,,,,,,,,++RRRRSSSSSSTTTTTTUUUUUUUUVVVVVVWWWWWWXXXXXXXXYYYYYYZZZZZZ[[[[[[[[\\\\\\]]]]]]^^^^^^^^______````````aaaaaabbbbbbbbccccccddddddddeeeeeeeeffffffgggggggghhhhhhhhiiiiiiiijjjjjjjjkkkkkkkkllllllllmmmmmmmmmmnnnnnnnnooooooooooppppppppppqqqqqqqqqqrrrrrrrrrrssssssssssssttttttttttttttuuuuuuuuuuuuuuvvvvvvvvvvvvvvvvwwwwwwwwwwwwwwwwwwwwxxxxxxxxxxxxxxxxxxxxwwwwwwwwwwwwvvvvvvvvvvvvvvttttssssssssssrrrrppppppppoooommmmmmmmmmlllljjiiiiiiggggggeeddddddbbbbaa______^^^^^^\\[[[[YYYYYYWWVVVVVVVVVVTTTTSSSSSSRRRRQQPPOOOOOOOOOOOONNMMMMMMMMMMLLKKKKKKKKKKKKJJIIIIIIIIIIIIIIIIHHHHHHHHHHHHHHGGGGGGGGGGGGFFFFFFFFFFFFEEEEEEEEEEEEFFFFEEEEEEEEFFFFFFEEEEEEEEFFFFEEEEEEEEEEFFGGGGFFFFFFFFGGHHGGGGGGGGGGGGHHIIIIIIIIJJJJJJKKKKKKJJKKLLLLMMLLLLLLLLMMMMNNMMMMMMMMMMNNNNNNNNMMMMMMMMMMNNMMMMMMLLMMMMMMMMMMLLLLLLLLLLLLLLKKKKKKJJJJKKJJJJJJIIIIIIIIIIHHHHHHGGGGGGFFFFFFEEEEEEDDDDDDCCCCCCBBBBBBAAAAAA@@@@@@@@??????>>>>>>======<<<<<<<<;;;;;;::::::9999998888888877777766666666555555444444443333332222222211111111000000////////........--------,,,,,, \ No newline at end of file diff --git a/assets/test_scene1.json b/assets/test_scene1.json new file mode 100644 index 0000000..427690b --- /dev/null +++ b/assets/test_scene1.json @@ -0,0 +1,36 @@ +{ + "geometry":[{ + "type":"sphere", + "centre":[0, 0, -4], + "radius":2, + + "ac":[0,1,0], + "dc":[1,0,0], + "sc":[1,1,1], + + "ka":1, + "kd":1, + "ks":1, + + "pc":10 + } + ], + "light":[{ + "type":"point", + "centre":[0, 0, 0], + "id":[1, 1, 1], + "is":[1, 1, 1] + + }], + "output":[{ + "filename":"test_scene1.ppm", + "size":[500,500], + "lookat":[0,0,-1], + "up":[0,1,0], + "fov":90, + "centre":[0,0,0], + "ai":[1,1,1], + "bkc":[1,1,1] + } + ] +} diff --git a/assets/test_scene1.ppm b/assets/test_scene1.ppm new file mode 100644 index 0000000..14faaa8 --- /dev/null +++ b/assets/test_scene1.ppm @@ -0,0 +1,632 @@ +P6 +500 500 +255 +    !!"""######"""!!   !"#$%&'(())***++++++++++***))(('&%$#"!  "#%&')*+,,-.//0011122222222222211100//.-,,+*)'&%#"   "$&')*,-./0123345566777888899999988887776655433210/.-,*)'&$"   #%')*,./01345667899:;;<<====>>>>>>>>>>>>====<<;;:99876654310/.,*)'%#   #%')+-/02345789:;;<=>>?@@AAABBBCCCCCCCCCCCCCCBBBAAA@@?>>=<;;:98754320/-+)'%#  !$&)+-/0245689:;<=>?@ABBCCDEEFFFGGGHHHHHHHHHHHHHHGGGFFFEEDCCBBA@?>=<;:9865420/-+)&$! "%'*,.024578:;<=>@ABBCDEFFGHHIIJJKKKLLLLLMMMMMMMMLLLLLKKKJJIIHHGFFEDCBBA@>=<;:875420.,*'%"!%'*,/134689;<>?@ABDEEFGHIJJKLLMMNNOOOPPPPQQQQQQQQQQQQPPPPOOONNMMLLKJJIHGFEEDBA@?><;986431/,*'%!  $'*,/13579:<=?@BCDEFGHIJKLMMNOOPPQQRRSSSTTTTUUUUUUUUUUUUTTTTSSSRRQQPPOONMMLKJIHGFEDCB@?=<:97531/,*'$  #&),.13579;<>@ABDEFGIJKLMNNOPQQRSSTTUUVVWWWXXXXXYYYYYYYYYYXXXXXWWWVVUUTTSSRQQPONNMLKJIGFEDBA@><;97531.,)&# $(+-02579;=>@ACDFGHJKLMNOPQRRSTUUVWWXXYYZZZ[[[\\\\\\\]]]]\\\\\\\[[[ZZZYYXXWWVUUTSRRQPONMLKJHGFDCA@>=;97520-+($ "%),/1468:<>@BCEFHIJLMNOPQRSTUVVWXXYZZ[[\\]]^^^____``````````````____^^^]]\\[[ZZYXXWVVUTSRQPONMLJIHFECB@><:8641/,)%"#&*-02579<>?ACEFHIKLMNPQRSTUVWXXYZ[[\]]^^__``aaabbbccccccccddccccccccbbbaaa``__^^]]\[[ZYXXWVUTSRQPNMLKIHFECA?><97520-*&##'*.1368:=?ABDFHIKLMOPQRTUVWXYZZ[\]^^_``aabbccdddeeefffffggggggggggfffffeeedddccbbaa``_^^]\[ZZYXWVUTRQPOMLKIHFDBA?=:8631.*'##'+.1469;=@BCEGIJLMOPQSTUVWXYZ[\]^_``abbcddeeffggghhhiiiiijjjjjjjjjjjjiiiiihhhgggffeeddcbba``_^]\[ZYXWVUTSQPOMLJIGECB@=;9641.+'##'+.1479<>@BDFHJKMNPQSTUVXYZ[\]^_`aabcddeffgghhiijjkkklllllmmmmmmmmmmmmmmlllllkkkjjiihhggffeddcbaa`_^]\[ZYXVUTSQPNMKJHFDB@><9741.+'##'+.147:<>ACEGIJLNOQRTUVXYZ[\]^_`abcdeefghhiijkklllmmnnnoooooppppppppppppppooooonnnmmlllkkjiihhgfeedcba`_^]\[ZYXVUTRQONLJIGECA><:741.+'# "&*.147:<?ACEGIKMNPRSUVWYZ[\^_`abcdeefghiijkklmmnnoooppqqqrrrrrssssssssssssssrrrrrqqqppooonnmmlkkjiihgfeedcba`_^\[ZYWVUSRPNMKIGECA?<:741.*&" !%*-147:<?ACEHIKMOQRTUWXZ[\]_`abcdefghiijkllmnnoopqqrrrssttttuuuuuvvvvvvvvvvvvuuuuuttttssrrrqqpoonnmllkjiihgfedcba`_]\[ZXWUTRQOMKIHECA?<:741-*%!$)-0369<?ACFHJLNOQSTVWYZ\]^_abcdefghijkllmnoopqqrrssttuuvvvwwwxxxxxxyyyyyyyyyyxxxxxxwwwvvvuuttssrrqqpoonmllkjihgfedcba_^]\ZYWVTSQONLJHFCA?<9630-)$ #'+/369<>ACEHJLNPQSUVXY[\^_`bcdefghijklmnoopqrrsstuuvvwwxxxyyyzzzz{{{{{{{{{{{{{{{{{{zzzzyyyxxxwwvvuutssrrqpoonmlkjihgfedcb`_^\[YXVUSQPNLJHECA><963/+'#  &*.258;>@CEGJLNPQSUWXZ[]^`abcefghijklmnopqqrsttuvvwwxyyyzz{{||||}}}}~~~~~~~~~~~~~~~~}}}}||||{{zzyyyxwwvvuttsrqqponmlkjihgfecba`^][ZXWUSQPNLJGEC@>;852.*&  #(,047:=@BEGIKNOQSUWXZ\]_`acdeghijklmnopqrsstuvvwxxyzz{{||}}}~~~~}}}||{{zzyxxwvvutssrqponmlkjihgedca`_]\ZXWUSQONKIGEB@=:740,(# !&+/269<?BDFIKMOQSUWXZ\]_`bcdfghiklmnopqrstuuvwxxyzz{||}}~~~~}}||{zzyxxwvuutsrqponmlkihgfdcb`_]\ZXWUSQOMKIFDB?<962/+&! #(-148;>ACFHJMOQSUWXZ\]_abcefgijklnopqrstuvvwxyzz{||}~~~~}||{zzyxwvvutsrqponlkjigfecba_]\ZXWUSQOMJHFCA>;841-(#  &*/369=?BEGJLNPRTVXZ\]_abdefhijlmnopqrstuvwxyz{{|}~~~~}|{{zyxwvutsrqponmljihfedba_]\ZXVTRPNLJGEB?=963/*& #(,048;>ADFIKNPRTVXZ[]_`bdeghiklmnpqrstuvwxyz{||}~~}||{zyxwvutsrqpnmlkihgedb`_][ZXVTRPNKIFDA>;840,(# %*.269=@BEHJMOQSUWY[]_`bdeghiklmopqrtuvwxyz{|}}~~}}|{zyxwvutrqpomlkihgedb`_][YWUSQOMJHEB@=962.*% !&+047;>ADFILNPRUWY[\^`bcefhiklnopqstuvwxyz{|}~~}|{zyxwvutsqponlkihfecb`^\[YWURPNLIFDA>;740+&!#(-159<?BEHJMOQTVXZ\^_acefhiklnoprstuvxyz{|}~~}|{zyxvutsrponlkihfeca_^\ZXVTQOMJHEB?<951-(#$).26:=@CFIKNPSUWY[]_abdfgiklmoprstuwxyz{|}~~}|{zyxwutsrpomlkigfdba_][YWUSPNKIFC@=:62.)$ &+/47;>ADGJMOQTVXZ\^`bdegijlmoprstvwxyz|}~~}|zyxwvtsrpomljigedb`^\ZXVTQOMJGDA>;74/+& !',058<?BEHKNPRUWY[]_acefhjkmnpqstuwxyz|}~~}|zyxwutsqpnmkjhfeca_][YWURPNKHEB?<850,'!"(-169=@CFILNQSVXZ\^`bdfgiklnoqrtuwxyz|}~~}|zyxwutrqonlkigfdb`^\ZXVSQNLIFC@=961-("#).26:>ADGJMORTWY[]_aceghjlmoqrtuvxyz|}~~}|zyxvutrqomljhgeca_][YWTROMJGDA>:62.)#$*/37;>BEHKMPSUWZ\^`bdfhikmnprsuvwyz{}~~}{zywvusrpnmkihfdb`^\ZWUSPMKHEB>;73/*$%*/48<?BFIKNQSVXZ]_aceghjlnoqrtvwxz{}~~}{zxwvtrqonljhgeca_]ZXVSQNKIFB?<84/*%%+048<@CFILOQTVY[]_acegikmnprsuvxy{|~~|{yxvusrpnmkigeca_][YVTQOLIFC@<840+%&+059=@DGJMORUWY\^`bdfhjlnoqstvwyz|}~~}|zywvtsqonljhfdb`^\YWUROMJGD@=950+&&,159=ADGJMPSUXZ\_acegiklnprsuwxz{}~~}{zxwusrpnlkigeca_\ZXUSPMJGDA=951,&&,159=ADHKNPSVXZ]_acegikmoqrtvwyz|}}|zywvtrqomkigeca_]ZXVSPNKHDA=951,&&,15:>AEHKNQSVX[]`bdfhjlnpqsuvxz{}~~}{zxvusqpnljhfdb`][XVSQNKHEA>:51,&&,16:>AEHKNQTVY[^`bdfhjlnprtuwyz|}}|zywutrpnljhfdb`^[YVTQNKHEA>:61,&&,16:>AEHKNQTWY\^`cegikmoqrtvxy{|~~|{yxvtrqomkigec`^\YWTQNKHEA>:61,&&,15:>BEHLOQTWY\^acegikmoqsuvxz{}}{zxvusqomkigeca^\YWTQOLHEB>:51,&%+15:>AEHLORTWZ\_acehjlnprsuwyz|~~|zywusrpnljheca_\ZWTROLHEA>:51+%%+059>AEHLORTWZ\_acfhjlnprtvwy{}~~}{ywvtrpnljhfca_\ZWTROLHEA>950+%$*059=AEHLORTWZ\_adfhjlnprtvxz{}}{zxvtrpnljhfda_\ZWTROLHEA=950*$#*/49=AEHKORTWZ\_adfhjmoqstvxz|}}|zxvtsqomjhfda_\ZWTROKHEA=94/*# ")/48=ADHKNQTWZ\_adfhkmoqsuwxz|~ ~|zxwusqomkhfda_\ZWTQNKHDA=84/)" !(.38<@DHKNQTWZ\_adfhkmoqsuwyz|~ + + + + + + + + + + + + + + + + + + ~|zywusqomkhfda_\ZWTQNKHD@<83.(!'-27<@DGKNQTWZ\_adfhkmoqsuwy{}~ + + + + + + + + + + + + + + + + ~}{ywusqomkhfda_\ZWTQNKGD@<72-'&,16;?CGJNQTWY\_adfhkmoqsuwy{} + + + + + + + + + + }{ywusqomkhfda_\YWTQNJGC?;61,&$+06:>BFJMPSVY\_adfhkmoqsuwy{} + + + + + + + + }{ywusqomkhfda_\YVSPMJFB>:60+$ #)/59>BFIMPSVY\^acfhkmoqsuwy{} + + + +  + + + + }{ywusqomkhfca^\YVSPMIFB>95/)# !(.48=AEILOSVX[^acfhjmoqsuwy{} + + +  + + + }{ywusqomjhfca^[XVSOLIEA=84.(!&-27<@DHKORUX[^`cehjmoqsuwy{} + + +  + + + }{ywusqomjhec`^[XUROKHD@<72-&%+16;?CGKNQUXZ]`cehjloqsuwy{} + + +  + + + }{ywusqoljhec`]ZXUQNKGC?;61+% #*05:>BFJMQTWZ]`begjlnqsuwy{} + + +  + + + }{ywusqnljgeb`]ZWTQMJFB>:50*#  (.49=AEIMPSVY\_bdgilnpsuwy{} + + +  + + + }{ywuspnligdb_\YVSPMIEA=94.( &,27<@DHLOSVY\_adfiknprtwy{} + + +  + + + }{ywtrpnkifda_\YVSOLHD@<72,& #*06;?CGKNRUX[^acfhkmprtvxz} + +  + + }zxvtrpmkhfca^[XURNKGC?;60*# !(/49>BFJNQTWZ]`cehjmortvxz|~ + +  + + ~|zxvtromjhec`]ZWTQNJFB>94/(!&-38=AEIMPSWZ]_begjloqsvxz|~ + +  + + ~|zxvsqoljgeb_]ZWSPMIEA=83-& #+16;@DHKORVY\_adgilnqsuwz|~ + + +  + + + ~|zwusqnligda_\YVROKHD@;61+#  (/49>BFJNQUX[^acfiknpruwy{} + +  + + }{ywurpnkifca^[XUQNJFB>94/( &,28=AEIMPTWZ]`cehkmprtvy{} + +  !!!!!!!!!!  + + }{yvtrpmkhec`]ZWTPMIEA=82,&#*06;?DHLOSVY\_begjloqtvxz} + +  !!!"""""##########"""""!!!  + + }zxvtqoljgeb_\YVSOLHD?;60*#'.49>BFJNQUX[^adgilnqsuxz|~ + +  !!"""###$$$$%%%%%%%%%%%%$$$$###"""!!  + + ~|zxusqnligda^[XUQNJFB>94.' $+27<AEIMPTWZ]`cfhknpruwy{~ + +  !!""##$$%%%&&&&''''''''''''''&&&&%%%$$##""!!  + + ~{ywurpnkhfc`]ZWTPMIEA<72+$ !)/5:?CGKORVY\_behjmortvy{} + +  !!"##$$%%&&'''((()))))******)))))((('''&&%%$$##"!!  + + }{yvtromjheb_\YVROKGC?:5/)!%-38=BFJNQUX[^adgilnqsvxz| + +  !"##$%%&&'(()))***++++,,,,,,,,,,++++***)))(('&&%%$##"!  + + |zxvsqnligda^[XUQNJFB=83-%"*06;@DHLPSWZ]`cfhknpsuwz|~ +  !""#$%%&''())**++,,----..............----,,++**))(''&%%$#""!  + ~|zwuspnkhfc`]ZWSPLHD@;60*"&-39>BFJNRUY\_begjmortwy{} +  !"#$$%&''()**+,,--..///000011111111110000///..--,,+**)(''&%$$#"!  + }{ywtromjgeb_\YURNJFB>93-&#*16<@EIMPTW[^adfilnqsvxz} +  !"#$%&&'()**+,--.//001122233333444444333332221100//.--,+**)('&&%$#"!  + }zxvsqnlifda^[WTPMIE@<61*#'.49>CGKORVY\_behkmpruwz|~ + +  !"#$%&'())*+,-../00122334455566666666666666555443322100/..-,+*))('&%$#"!  + + ~|zwurpmkheb_\YVROKGC>94.'#+17<AEIMQTX[^adgjlortvy{} + +  !"#$%&'()*+,--./01123445566778889999999999998887766554432110/.--,+*)('&%$#"!  + + }{yvtroljgda^[XTQMIEA<71+#'.4:?CGKOSVZ]`cfiknqsvxz} + +  !"#$%&'()*+,-./01223456678899::;;;;<<<<<<<<<<;;;;::99887665432210/.-,+*)('&%$#"!  + + }zxvsqnkifc`]ZVSOKGC?:4.'#+17<AEJNQUX[_begjmoruwy|~ + +  !"#%&'()*+,-./01234567789::;<<===>>>??????????>>>===<<;::98776543210/.-,+*)('&%#"!  + + ~|ywuromjgeb_[XUQNJEA<71+#'.4:?CHLOSWZ]`cfilnqtvx{} +  !"#$%&()*+,-./1234567889:;<<=>>?@@@AAABBBBBBBBBBAAA@@@?>>=<<;:9887654321/.-,+*)(&%$#"!  + }{xvtqnlifc`]ZWSOLHC?:4.'#+17<AFJNQUX\_behkmpruwz|~ +  !"$%&'(*+,-.0123456789:;<=>??@AABCCCDDEEEEEEEEEEEEDDCCCBAA@??>=<;:9876543210.-,+*('&%$"!  + ~|zwurpmkheb_\XUQNJFA<71+#'.4:?CHLPSWZ]`dfiloqtvy{~ +  "#$%'()*,-./12345789:;<=>?@ABBCDDEFFGGGHHHHHIIHHHHHGGGFFEDDCBBA@?>=<;:98754321/.-,*)('%$#"  + ~{yvtqolifd`]ZWSPLHC?:4.'#*17<AEJNQUX\_behkmpsuxz} +  !"#%&')*+,./02345789:;=>?@ABCDEEFGHHIIJJKKKKLLLLLLKKKKJJIIHHGFEEDCBA@?>=;:98754320/.,+*)'&%#"!  + }zxuspmkheb_\XUQNJEA<71*#&.49>CHLPSWZ]adgilortwy{~ +  !"$%&()*,-/01345789:<=>?ABCDEFGHHIJKKLMMNNNOOOOOOOOOONNNMMLKKJIHHGFEDCBA?>=<:98754310/-,*)(&%$"!  + ~{ywtroligda]ZWSPLHC>94.&"*16<AEINQUX\_behknpsuxz} + +  !#$%'(*+,./1245689:<=>@ABCEFGHIJKLLMNOOPPQQRRRRRSSRRRRRQQPPOONMLLKJIHGFECBA@>=<:9865421/.,+*('%$#!  + + }zxuspnkheb_\XUQNIEA<61*"%-39>CGKOSWZ]adgilortwy|~ + +  "#$&')*,-.0134679:<=>@ABDEFGIJKLMNOPQQRSSTTUUUVVVVVVVVUUUTTSSRQQPONMLKJIGFEDBA@>=<:9764310.-,*)'&$#"  + + ~|ywtroligda]ZWSOKGC>93-% )06;@EIMQUX\_behknpsvxz} +  "#%&()*,-/124578:;=>@ACDEGHIKLMNOPQRSTUUVWWXXYYYYZZZZYYYYXXWWVUUTSRQPONMLKIHGEDCA@>=;:875421/-,*)(&%#"  + }zxvspnkheb_\XUQMIE@;60)  $,28=BGKOSVZ]`cfilortwy|~ +  "#%&()+,./134679;<>?ABDEGHJKLNOPQRSTUVWXYZZ[[\\]]]]]]]]]]\\[[ZZYXWVUTSRQPONLKJHGEDBA?><;976431/.,+)(&%#"  + ~|ywtrolifc`]ZVSOKGB=82,$ (/5:@DIMQTX[_behkmpsuxz} + + !"#%&(*+-.023568:;=?@BCEGHJKMNOQRSTVWXYZ[\\]^^__```aaaaaa```__^^]\\[ZYXWVTSRQONMKJHGECB@?=;:865320.-+*(&%#"! + + }zxuspmkheb_[XTQMID@:5/(#+17=BFJNRVY]`cfiloqtwy|~ + +  "#%'(*+-/024579:<>@ACEFHIKMNPQRTUWXYZ[\]^_`aabccddddeeeeddddccbaa`_^]\[ZYXWUTRQPNMKIHFECA@><:975420/-+*('%#"  + + ~|ywtqolifc`]YVRNJFB=71+#&-49?CHLPTW[^adgjmpsuxz} +  "#%'(*+-/024679;=?@BDFGIKLNPQSTVWXZ[\^_`abcddeffgghhhhhhhhhhggffeddcba`_^\[ZXWVTSQPNLKIGFDB@?=;976420/-+*('%#"  + }zxuspmjgda^[WTPLHC?94-& )06<AEJNRUY\`cfilnqtvy|~ +  "#%'(*+-/12468:;=?ACEFHJLMOQSTVWYZ\]_`abcdefghiijkkkllllllllkkkjiihgfedcba`_]\ZYWVTSQOMLJHFECA?=;:86421/-+*('%#"  + ~|yvtqnlifc`\YURNJEA<60) $,28>BGKOSWZ^adgjmpruxz} + +  "#%&(*+-/13468:<>@BCEGIKMOPRTVWY[\^_abcefghijklmmnnooppppppppoonnmmlkjihgfecba_^\[YWVTRPOMKIGECB@><:86431/-+*(&%#"  + + }zxurpmjgda^ZWSOKGB>82,$'.5:?DIMQUX\_behknqtvy{~ +  !#%&(*+-/13568:<>@BDFHJLNPQSUWYZ\^_acdeghiklmnoppqrrsssttttttsssrrqpponmlkihgedca_^\ZYWUSQPNLJHFDB@><:86531/-+*(&%#!  + ~{yvtqnkheb_\XUQMID?:5.'!*17<AFJNRVZ]`cgiloruwz| + +  !#$&(*+-/13578:<>@BDFHJLNPRTVXZ\^_acdfgijlmnoqrrstuvvwwwxxxxxxwwwvvutsrrqonmljigfdca_^\ZXVTRPNLJHFDB@><:87531/-+*(&$#!  + + |zwuroligc`]ZVRNJFA<71*! %,39>CHLPTW[^behknpsvx{} + !"$&()+-/13579;=?ACEGIKMOQSUWY[]_acdfhiklnoqrstuvwxyyz{{{||||||{{{zyyxwvutsrqonlkihfdca_][YWUSQOMKIGECA?=;97531/-+)(&$"! + }{xvspnkheb^[WTPLHC>93,% '/5;@EIMQUY\_cfiloqtwy|~ +  "$%')+-/02468;=?ACEGIKNPRTVXZ\^`bdfhikmnprstvwxyz{|}}~~}}|{zyxwvtsrpnmkihfdb`^\ZXVTRPNKIGECA?=;86420/-+)'%$"  + ~|ywtqolifc_\YUQMIE@;5/'"*17=BFKOSVZ]adgjmpruxz} +  "#%')*,.02468:=?ACEGJLNPRUWY[]_acegikmoprtuwxy{|}~~}|{yxwutrpomkigeca_][YWURPNLJGECA?=:86420.,*)'%#"  + }zxurpmjgda]ZVSOKFB=71*" %,39>CHLPTX[_behknqsvy{~ +  !#%&(*,.02468:93,% '/5;@EIMQUY\`cfilortwz| + + !"$&(*,-/2468:<>ACEGJLNQSUXZ\_acegjlnprtvwy{|~~|{ywvtrpnljgeca_\ZXUSQNLJGECA><:8642/-,*(&$"! + + |zwtrolifc`\YUQMIE@;5/'!*17<AFKOSVZ^adgjmpsux{} +  "$%')+-/1357:<>@CEGJLNQSVXZ]_adfhkmoqsuwy{}~~}{ywusqomkhfda_]ZXVSQNLJGEC@><:7531/-+)'%$"  + }{xuspmjgda^ZVSOKFA<71*!$,39>CHLPTX[_behknqtvy|~ + +  !#%')*,.13579;>@BEGJLNQSVX[]`bdgiknprtvy{}~~}{yvtrpnkigdb`][XVSQNLJGEB@>;97531.,*)'%#!  + + ~|yvtqnkheb_[XTPLHC>93,$&.4:@DIMQUY\`cfiloruwz} + !"$&(*,.02469;=@BDGILNQSVX[]`begjlnqsuxz|~~|zxusqnljgeb`][XVSQNLIGDB@=;96420.,*(&$"! + }zwurolifc`\YUQMID@:4.& )06<AFJNRVZ]adgjmpsvx{} + +  "#%')+-/1468:=?BDFIKNQSVX[]`cehjmortvy{}}{yvtromjhec`][XVSQNKIFDB?=:8641/-+)'%#"  + + }{xvspmjgda]ZVRNJFA<60) #+28=BGLPTW[^behknqtvy|~ + !#%&(*,/1357:@CEHJMPRUXZ]`cehkmpruxz}}zxurpmkhec`]ZXURPMJHEC@>;97420.,*(&$"  + |zwurolifc_\XUQMHD?94-% '/5;@EJNRVY]`dgjmpsux{} + !#%')+-/1468;=@BEGJLORUWZ]`behkmpsux{}}{xuspmkheb`]ZWUROLJGEB@=;8641/-+)'%#! + }{xuspmjgd`]YVRNJE@;5/' )07<BFKOSWZ^aehknqsvy{~ +  "$&(*,.0357:CGLPTX[_beiloqtwz| + + !#%')+-/2469;>@CFHKNPSVY\_adgjmpsvx{~~{xvspmjgda_\YVSPNKHFC@>;9642/-+)'%#! + + |zwtqolieb_[XTPLGC>82+# %-4:?DIMQUY\`cfiloruxz} +  "$&(*,.1358:=?BEGJMPRUX[^adgjmprux{~~{xurpmjgda^[XURPMJGEB?=:8531.,*(&$"  + }zxurolifc`\YUQMID?:4-% '/5;@EJNRVZ]adgjmpsvx{~ + !#%')+-02479<>ACFILOQTWZ]`cfilorux{~~{xurolifc`]ZWTQOLIFCA><97420-+)'%#! + ~{xvspmjgda]ZVRNJE@;5/' )06<AFKOSWZ^aehknqtvy|~ +  "$&(*,.1358:=@BEHKMPSVY\_behknrux{~~{xurnkheb_\YVSPMKHEB@=:8531.,*(&$"  + ~|yvtqnkhea^ZWSOKFA<60) "*28=BGLPTX[_beilortwz| + !#%')+-/2479<>ADGILORUX[^adgknqtwz}}zwtqnkgda^[XUROLIGDA><9742/-+)'%#! + |zwtrolieb_[XTPLGB=82*"$,39>DHMQUX\`cfiloruxz} +  "$&(*,.1358:=@CEHKNQTWZ]`cfjmpsvy}}yvspmjfc`]ZWTQNKHEC@=:8531.,*(&$"  + }zxurolifc`\XUQMHD>93,$ &.4:@EINRVY]`dgjmpsvx{~ +  "$&)+-/2479<>ADGJMPSVY\_behloruy||yurolheb_\YVSPMJGDA><9742/-+)&$"  + ~{xvspmjgd`]YVRNIE@:4.& '/5;AEJNRVZ^adhknqsvy|~ + !#%'),.0358:=@BEHKNQTWZ^adgknqtx{~~{xtqnkgda^ZWTQNKHEB@=:8530.,)'%#! + ~|yvsqnkhda^ZVRNJEA;5/' )07<BFKOSW[^behknqtwz| +  "$&(*-/1469;>ADGJMPSVY\_cfilpsvz}}zvsplifc_\YVSPMJGDA>;9641/-*(&$"  + |zwtqnkheb^[WSOKFB<70) "*18=BGLPTX[_bfiloruwz} + + !#%')+-0257:=?BEHKNQTW[^adhknruy||yurnkhda^[WTQNKHEB?=:7520-+)'%#! + + }zwurolifb_[XTPLGB=81*"#,39>CHMQUX\`cfimorux{} + !#%'*,.1368;>ACFILORVY\_cfimptw{~~{wtpmifc_\YVROLIFCA>;8631.,*'%#! + }{xuromifc`\XUQMHC>93,#%-4:?DIMQUY]`dgjmpsvy{~ +  "$&(*-/2479ADGJMPSWZ]adgknrvy}}yvrnkgda]ZWSPMJGDA>;8631.,*'%#! + |ywtqnkhea^ZWSOJFA;6/')06<BFKOSW[^behlortwz} +  "$&(*-/1479CHLPTX\_cfilorux{} + !#%'),.0368;>ADGJMPSWZ^aehloswz~~zwsolhea^ZWSPMJGDA>;8630.,)'%#! + }{xurolifc_\XTPLHC>82+"#,39>CHMQUY\`cgjmpsvx{~ + !#%(*,/146993,#$,39?DIMQUY]`dgjmpsvy|~ +  "$&(*-/247:ADGJMQTW[^beimqtx||xtqmieb^[WTQMJGDA>;8530.+)'%"  + |ywtqnkhda^ZVRNJE@;5.& '/5;AFJOSWZ^aehknqtwz| + !#%'),.1369<>ADHKNQUX\_cfjnruy}}yurnjfc_\XUQNKHDA><9631.,)'%#! + |zwtqnkhea^ZWSOJFA;5/'(/6<AFKOSW[^behlortwz} + !#%'*,/1469ADGJNQTX[_cfjnrvy}}yvrnjfc_[XTQNJGDA>;8530-+)&$"  + ~{xurolifc_\XTPLGB=71*!!*18=CHLPTX\`cfimpsux{~ +  "$')+.0368;>ADGKNQUX\_cgknrvz~~zvrnkgc_\XUQNKGDA>;8630.+)'$"  + ~{xuspmifc`\XTPLHC=81*!"*28>CHLQUX\`cfjmpsvx{~ +  "%')+.0369;>AEHKNRUY\`dgkosw{{wsokgd`\YURNKHEA>;9630.+)'%"  + ~{xvspmjfc`\XUQLHC>82*""+28>CHLQUY\`cgjmpsvy{~ + !#%'),.136982+""+28>CHMQUY\`cgjmpsvy{~ + !#%'),.136982+"#+29>CHMQUY\`cgjmpsvy{~ + !#%'*,.146992+##+29>CHMQUY]`cgjmpsvy{~ + !#%'*,.146992+##+29>CHMQUY]`dgjmpsvy{~ + !#%'*,.146992+##+29>CHMQUY]`dgjmpsvy{~ + !#%'*,.146992+##+29>CHMQUY]`cgjmpsvy{~ + !#%'*,.146992+##+29>CHMQUY\`cgjmpsvy{~ + !#%'*,.146992+#"+28>CHMQUY\`cgjmpsvy{~ + !#%'),.136982+""+28>CHLQUY\`cgjmpsvy{~ + !#%'),.136982+""*28>CHLQUX\`cfjmpsvx{~ +  "%')+.0369;>AEHKNRUY\`dgkosw{{wsokgd`\YURNKHEA>;9630.+)'%"  + ~{xvspmjfc`\XUQLHC>82*"!*18=CHLPTX\`cfimpsux{~ +  "$')+.0368;>ADGKNQUX\_cgknrvz~~zvrnkgc_\XUQNKGDA>;8630.+)'$"  + ~{xuspmifc`\XTPLHC=81*!!*17=BGLPTX\_cfilorux{~ +  "$&)+-0358;>ADGJNQTX[_cfjnrvy}}yvrnjfc_[XTQNJGDA>;8530-+)&$"  + ~{xurolifc_\XTPLGB=71*! )17=BGLPTX\_cfilorux{} + +  "$&(+-0258;=@CGJMPTW[^bfimquy}}yuqmifb^[WTPMJGC@=;8520-+(&$"  + + }{xurolifc_\XTPLGB=71)  )07=BGKPTX[_bfiloruxz} +  "$&(*-/257:=@CFIMPSWZ^aeimptx||xtpmiea^ZWSPMIFC@=:752/-*(&$"  + }zxurolifb_[XTPKGB=70) (06<AFKOSW[_beiloruxz} + !#&(*-/247:=@CFILOSVZ]adhlpsw{{wsplhda]ZVSOLIFC@=:742/-*(&#! + }zxurolieb_[WSOKFA<60((/6<AFKOSW[^behlortwz} + !#%'*,/1469ADHKNQUX\_cfjnruy}}yurnjfc_\XUQNKHDA><9631.,)'%#! + |zwtqnkhea^ZWSOJFA;5/' &.5;@EJNRVZ^adhknqtwy| +  "%')+.0358;>ADGJMQTW[^beimqtx||xtqmieb^[WTQMJGDA>;8530.+)'%"  + |ywtqnkhda^ZVRNJE@;5.& %-4:@EINRVZ]adgknqtvy| +  "$&)+-0258:=@CFILPSVZ]adhlosw{~~{wsolhda]ZVSPLIFC@=:8520-+)&$"  + |yvtqnkgda]ZVRNIE@:4-%$,39?DIMQUY]`dgjmpsvy|~ +  "$&(*-/247:CHMQUY\`cgjmpsvx{~ + !#%(*,/146993,#"+28>CHLPTX\_cfilorux{} + !#%'),.0368;>ADGJMPSWZ^aehloswz~~zwsolhea^ZWSPMJGDA>;8630.,)'%#! + }{xurolifc_\XTPLHC>82+"!*17=BGLPTX[_bfiloruxz} +  "$&)+-0257:=@CFILORVY\`cgjnruy||yurnjgc`\YVROLIFC@=:7520-+)&$"  + }zxurolifb_[XTPLGB=71*!)06<BFKOSW[^behlortwz} +  "$&(*-/1479ADGJMPSWZ]adgknrvy}}yvrnkgda]ZWSPMJGDA>;8631.,*'%#! + |ywtqnkhea^ZWSOJFA;6/' &.5;@EJNRVZ]adgknqsvy|~ + !#%')+.0258:=@CFILORUX\_cfimptw{~~{wtpmifc_\XUROLIFC@=:8520.+)'%#! + ~|yvsqnkgda]ZVRNJE@;5.& %-4:?DIMQUY]`dgjmpsvy{~ +  "$&(*-/2479CHMQUX\`cfimorux{} + !#%'*,.1368;>ACFILORVY\_cfimptw{~~{wtpmifc_\YVROLIFCA>;8631.,*'%#! + }{xuromifc`\XUQMHC>93,#"*18=BGLPTX[_bfiloruwz} + + !#%')+-0257:=?BEHKNQTW[^adhknruy||yurnkhda^[WTQNKHEB?=:7520-+)'%#! + + }zwurolifb_[XTPLGB=81*" )07<BFKOSW[^behknqtwz| +  "$&(*-/1469;>ADGJMPSVY\_cfilpsvz}}zvsplifc_\YVSPMJGDA>;9641/-*(&$"  + |zwtqnkheb^[WSOKFB<70) '/5;AEJNRVZ^adhknqsvy|~ + !#%'),.0358:=@BEHKNQTWZ^adgknqtx{~~{xtqnkgda^ZWTQNKHEB@=:8530.,)'%#! + ~|yvsqnkhda^ZVRNJEA;5/' &.4:@EINRVY]`dgjmpsvx{~ +  "$&)+-/2479<>ADGJMPSVY\_behloruy||yurolheb_\YVSPMJGDA><9742/-+)&$"  + ~{xvspmjgd`]YVRNIE@:4.& $,39>DHMQUX\`cfiloruxz} +  "$&(*,.1358:=@CEHKNQTWZ]`cfjmpsvy}}yvspmjfc`]ZWTQNKHEC@=:8531.,*(&$"  + }zxurolifc`\XUQMHD>93,$"*28=BGLPTX[_beilortwz| + !#%')+-/2479<>ADGILORUX[^adgknqtwz}}zwtqnkgda^[XUROLIGDA><9742/-+)'%#! + |zwtrolieb_[XTPLGB=82*" )06<AFKOSWZ^aehknqtvy|~ +  "$&(*,.1358:=@BEHKMPSVY\_behknrux{~~{xurnkheb_\YVSPMKHEB@=:8531.,*(&$"  + ~|yvtqnkhea^ZWSOKFA<60) '/5;@EJNRVZ]adgjmpsvx{~ + !#%')+-02479<>ACFILOQTWZ]`cfilorux{~~{xurolifc`]ZWTQOLIFCA><97420-+)'%#! + ~{xvspmjgda]ZVRNJE@;5/' %-4:?DIMQUY\`cfiloruxz} +  "$&(*,.1358:=?BEGJMPRUX[^adgjmprux{~~{xurpmjgda^[XURPMJGEB?=:8531.,*(&$"  + }zxurolifc`\YUQMID?:4-% #+28>CGLPTX[_beiloqtwz| + + !#%')+-/2469;>@CFHKNPSVY\_adgjmpsvx{~~{xvspmjgda_\YVSPNKHFC@>;9642/-+)'%#! + + |zwtqolieb_[XTPLGC>82+# )07<BFKOSWZ^aehknqsvy{~ +  "$&(*,.0357:@CEHJMPRUXZ]`cehkmpruxz}}zxurpmkhec`]ZXURPMJHEC@>;97420.,*(&$"  + |zwurolifc_\XUQMHD?94-% #+28=BGLPTW[^behknqtvy|~ + !#%&(*,/1357:CHLPTX[_behknqtvy|~ + +  !#%')*,.13579;>@BEGJLNQSVX[]`bdgiknprtvy{}~~}{yvtrpnkigdb`][XVSQNLJGEB@>;97531.,*)'%#!  + + ~|yvtqnkheb_[XTPLHC>93,$!*17<AFKOSVZ^adgjmpsux{} +  "$%')+-/1357:<>@CEGJLNQSVXZ]_adfhkmoqsuwy{}~~}{ywusqomkhfda_]ZXVSQNLJGEC@><:7531/-+)'%$"  + }{xuspmjgda^ZVSOKFA<71*!'/5;@EIMQUY\`cfilortwz| + + !"$&(*,-/2468:<>ACEGJLNQSUXZ\_acegjlnprtvwy{|~~|{ywvtrpnljgeca_\ZXUSQNLJGECA><:8642/-,*(&$"! + + |zwtrolifc`\YUQMIE@;5/' %,39>CHLPTX[_behknqsvy{~ +  !#%&(*,.02468:93,% "*17=BFKOSVZ]adgjmpruxz} +  "#%')*,.02468:=?ACEGJLNPRUWY[]_acegikmoprtuwxy{|}~~}|{yxwutrpomkigeca_][YWURPNLJGECA?=:86420.,*)'%#"  + }zxurpmjgda]ZVSOKFB=71*"'/5;@EIMQUY\_cfiloqtwy|~ +  "$%')+-/02468;=?ACEGIKNPRTVXZ\^`bdfhikmnprstvwxyz{|}}~~}}|{zyxwvtsrpnmkihfdb`^\ZXVTRPNKIGECA?=;86420/-+)'%$"  + ~|ywtqolifc_\YUQMIE@;5/' %,39>CHLPTW[^behknpsvx{} + !"$&()+-/13579;=?ACEGIKMOQSUWY[]_acdfhiklnoqrstuvwxyyz{{{||||||{{{zyyxwvutsrqonlkihfdca_][YWUSQOMKIGECA?=;97531/-+)(&$"! + }{xvspnkheb^[WTPLHC>93,% !*17<AFJNRVZ]`cgiloruwz| + +  !#$&(*+-/13578:<>@BDFHJLNPRTVXZ\^_acdfgijlmnoqrrstuvvwwwxxxxxxwwwvvutsrrqonmljigfdca_^\ZXVTRPNLJHFDB@><:87531/-+*(&$#!  + + |zwuroligc`]ZVRNJFA<71*!'.5:?DIMQUX\_behknqtvy{~ +  !#%&(*+-/13568:<>@BDFHJLNPQSUWYZ\^_acdeghiklmnoppqrrsssttttttsssrrqpponmlkihgedca_^\ZYWUSQPNLJHFDB@><:86531/-+*(&%#!  + ~{yvtqnkheb_\XUQMID?:5.'$,28>BGKOSWZ^adgjmpruxz} + +  "#%&(*+-/13468:<>@BCEGIKMOPRTVWY[\^_abcefghijklmmnnooppppppppoonnmmlkjihgfecba_^\[YWVTRPOMKIGECB@><:86431/-+*(&%#"  + + }zxurpmjgda^ZWSOKGB>82,$ )06<AEJNRUY\`cfilnqtvy|~ +  "#%'(*+-/12468:;=?ACEFHJLMOQSTVWYZ\]_`abcdefghiijkkkllllllllkkkjiihgfedcba`_]\ZYWVTSQOMLJHFECA?=;:86421/-+*('%#"  + ~|yvtqnlifc`\YURNJEA<60) &-49?CHLPTW[^adgjmpsuxz} +  "#%'(*+-/024679;=?@BDFGIKLNPQSTVWXZ[\^_`abcddeffgghhhhhhhhhhggffeddcba`_^\[ZXWVTSQPNLKIGFDB@?=;976420/-+*('%#"  + }zxuspmjgda^[WTPLHC?94-&#+17=BFJNRVY]`cfiloqtwy|~ + +  "#%'(*+-/024579:<>@ACEFHIKMNPQRTUWXYZ[\]^_`aabccddddeeeeddddccbaa`_^]\[ZYXWUTRQPNMKIHFECA@><:975420/-+*('%#"  + + ~|ywtqolifc`]YVRNJFB=71+#(/5:@DIMQTX[_behkmpsuxz} + + !"#%&(*+-.023568:;=?@BCEGHJKMNOQRSTVWXYZ[\\]^^__```aaaaaa```__^^]\\[ZYXWVTSRQONMKJHGECB@?=;:865320.-+*(&%#"! + + }zxuspmkheb_[XTQMID@:5/( $,28=BGKOSVZ]`cfilortwy|~ +  "#%&()+,./134679;<>?ABDEGHJKLNOPQRSTUVWXYZZ[[\\]]]]]]]]]]\\[[ZZYXWVUTSRQPONLKJHGEDBA?><;976431/.,+)(&%#"  + ~|ywtrolifc`]ZVSOKGB=82,$  )06;@EIMQUX\_behknpsvxz} +  "#%&()*,-/124578:;=>@ACDEGHIKLMNOPQRSTUUVWWXXYYYYZZZZYYYYXXWWVUUTSRQPONMLKIHGEDCA@>=;:875421/-,*)(&%#"  + }zxvspnkheb_\XUQMIE@;60) %-39>CGKOSWZ]adgilortwy|~ + +  "#$&')*,-.0134679:<=>@ABDEFGIJKLMNOPQQRSSTTUUUVVVVVVVVUUUTTSSRQQPONMLKJIGFEDBA@>=<:9764310.-,*)'&$#"  + + ~|ywtroligda]ZWSOKGC>93-%"*16<AEINQUX\_behknpsuxz} + +  !#$%'(*+,./1245689:<=>@ABCEFGHIJKLLMNOOPPQQRRRRRSSRRRRRQQPPOONMLLKJIHGFECBA@>=<:9865421/.,+*('%$#!  + + }zxuspnkheb_\XUQNIEA<61*"&.49>CHLPSWZ]adgilortwy{~ +  !"$%&()*,-/01345789:<=>?ABCDEFGHHIJKKLMMNNNOOOOOOOOOONNNMMLKKJIHHGFEDCBA?>=<:98754310/-,*)(&%$"!  + ~{ywtroligda]ZWSPLHC>94.&#*17<AEJNQUX\_behkmpsuxz} +  !"#%&')*+,./02345789:;=>?@ABCDEEFGHHIIJJKKKKLLLLLLKKKKJJIIHHGFEEDCBA@?>=;:98754320/.,+*)'&%#"!  + }zxuspmkheb_\XUQNJEA<71*#'.4:?CHLPSWZ]`dfiloqtvy{~ +  "#$%'()*,-./12345789:;<=>?@ABBCDDEFFGGGHHHHHIIHHHHHGGGFFEDDCBBA@?>=<;:98754321/.-,*)('%$#"  + ~{yvtqolifd`]ZWSPLHC?:4.'#+17<AFJNQUX\_behkmpruwz|~ +  !"$%&'(*+,-.0123456789:;<=>??@AABCCCDDEEEEEEEEEEEEDDCCCBAA@??>=<;:9876543210.-,+*('&%$"!  + ~|zwurpmkheb_\XUQNJFA<71+#'.4:?CHLOSWZ]`cfilnqtvx{} +  !"#$%&()*+,-./1234567889:;<<=>>?@@@AAABBBBBBBBBBAAA@@@?>>=<<;:9887654321/.-,+*)(&%$#"!  + }{xvtqnlifc`]ZWSOLHC?:4.'#+17<AEJNQUX[_begjmoruwy|~ + +  !"#%&'()*+,-./01234567789::;<<===>>>??????????>>>===<<;::98776543210/.-,+*)('&%#"!  + + ~|ywuromjgeb_[XUQNJEA<71+#'.4:?CGKOSVZ]`cfiknqsvxz} + +  !"#$%&'()*+,-./01223456678899::;;;;<<<<<<<<<<;;;;::99887665432210/.-,+*)('&%$#"!  + + }zxvsqnkifc`]ZVSOKGC?:4.'#+17<AEIMQTX[^adgjlortvy{} + +  !"#$%&'()*+,--./01123445566778889999999999998887766554432110/.--,+*)('&%$#"!  + + }{yvtroljgda^[XTQMIEA<71+#'.49>CGKORVY\_behkmpruwz|~ + +  !"#$%&'())*+,-../00122334455566666666666666555443322100/..-,+*))('&%$#"!  + + ~|zwurpmkheb_\YVROKGC>94.'#*16<@EIMPTW[^adfilnqsvxz} +  !"#$%&&'()**+,--.//001122233333444444333332221100//.--,+**)('&&%$#"!  + }zxvsqnlifda^[WTPMIE@<61*#&-39>BFJNRUY\_begjmortwy{} +  !"#$$%&''()**+,,--..///000011111111110000///..--,,+**)(''&%$$#"!  + }{ywtromjgeb_\YURNJFB>93-&"*06;@DHLPSWZ]`cfhknpsuwz|~ +  !""#$%%&''())**++,,----..............----,,++**))(''&%%$#""!  + ~|zwuspnkhfc`]ZWSPLHD@;60*"%-38=BFJNQUX[^adgilnqsvxz| + +  !"##$%%&&'(()))***++++,,,,,,,,,,++++***)))(('&&%%$##"!  + + |zxvsqnligda^[XUQNJFB=83-%!)/5:?CGKORVY\_behjmortvy{} + +  !!"##$$%%&&'''((()))))******)))))((('''&&%%$$##"!!  + + }{yvtromjheb_\YVROKGC?:5/)! $+27<AEIMPTWZ]`cfhknpruwy{~ + +  !!""##$$%%%&&&&''''''''''''''&&&&%%%$$##""!!  + + ~{ywurpnkhfc`]ZWTPMIEA<72+$ '.49>BFJNQUX[^adgilnqsuxz|~ + +  !!"""###$$$$%%%%%%%%%%%%$$$$###"""!!  + + ~|zxusqnligda^[XUQNJFB>94.'#*06;?DHLOSVY\_begjloqtvxz} + +  !!!"""""##########"""""!!!  + + }zxvtqoljgeb_\YVSOLHD?;60*#&,28=AEIMPTWZ]`cehkmprtvy{} + +  !!!!!!!!!!  + + }{yvtrpmkhec`]ZWTPMIEA=82,& (/49>BFJNQUX[^acfiknpruwy{} + +  + + }{ywurpnkifca^[XUQNJFB>94/(  #+16;@DHKORVY\_adgilnqsuwz|~ + + +  + + + ~|zwusqnligda_\YVROKHD@;61+# &-38=AEIMPSWZ]_begjloqsvxz|~ + +  + + ~|zxvsqoljgeb_]ZWSPMIEA=83-&!(/49>BFJNQTWZ]`cehjmortvxz|~ + +  + + ~|zxvtromjhec`]ZWTQNJFB>94/(! #*06;?CGKNRUX[^acfhkmprtvxz} + +  + + }zxvtrpmkhfca^[XURNKGC?;60*# &,27<@DHLOSVY\_adfiknprtwy{} + + +  + + + }{ywtrpnkifda_\YVSOLHD@<72,& (.49=AEIMPSVY\_bdgilnpsuwy{} + + +  + + + }{ywuspnligdb_\YVSPMIEA=94.(  #*05:>BFJMQTWZ]`begjlnqsuwy{} + + +  + + + }{ywusqnljgeb`]ZWTQMJFB>:50*# %+16;?CGKNQUXZ]`cehjloqsuwy{} + + +  + + + }{ywusqoljhec`]ZXUQNKGC?;61+%&-27<@DHKORUX[^`cehjmoqsuwy{} + + +  + + + }{ywusqomjhec`^[XUROKHD@<72-&!(.48=AEILOSVX[^acfhjmoqsuwy{} + + +  + + + }{ywusqomjhfca^[XVSOLIEA=84.(! #)/59>BFIMPSVY\^acfhkmoqsuwy{} + + + +  + + + + }{ywusqomkhfca^\YVSPMIFB>95/)# $+06:>BFJMPSVY\_adfhkmoqsuwy{} + + + + + + + + }{ywusqomkhfda_\YVSPMJFB>:60+$&,16;?CGJNQTWY\_adfhkmoqsuwy{} + + + + + + + + + + }{ywusqomkhfda_\YWTQNJGC?;61,&'-27<@DGKNQTWZ\_adfhkmoqsuwy{}~ + + + + + + + + + + + + + + + + ~}{ywusqomkhfda_\ZWTQNKGD@<72-'!(.38<@DHKNQTWZ\_adfhkmoqsuwyz|~ + + + + + + + + + + + + + + + + + + ~|zywusqomkhfda_\ZWTQNKHD@<83.(! ")/48=ADHKNQTWZ\_adfhkmoqsuwxz|~ ~|zxwusqomkhfda_\ZWTQNKHDA=84/)" #*/49=AEHKORTWZ\_adfhjmoqstvxz|}}|zxvtsqomjhfda_\ZWTROKHEA=94/*#$*059=AEHLORTWZ\_adfhjlnprtvxz{}}{zxvtrpnljhfda_\ZWTROLHEA=950*$%+059>AEHLORTWZ\_acfhjlnprtvwy{}~~}{ywvtrpnljhfca_\ZWTROLHEA>950+%%+15:>AEHLORTWZ\_acehjlnprsuwyz|~~|zywusrpnljheca_\ZWTROLHEA>:51+%&,15:>BEHLOQTWY\^acegikmoqsuvxz{}}{zxvusqomkigeca^\YWTQOLHEB>:51,&&,16:>AEHKNQTWY\^`cegikmoqrtvxy{|~~|{yxvtrqomkigec`^\YWTQNKHEA>:61,&&,16:>AEHKNQTVY[^`bdfhjlnprtuwyz|}}|zywutrpnljhfdb`^[YVTQNKHEA>:61,&&,15:>AEHKNQSVX[]`bdfhjlnpqsuvxz{}~~}{zxvusqpnljhfdb`][XVSQNKHEA>:51,&&,159=ADHKNPSVXZ]_acegikmoqrtvwyz|}}|zywvtrqomkigeca_]ZXVSPNKHDA=951,&&,159=ADGJMPSUXZ\_acegiklnprsuwxz{}~~}{zxwusrpnlkigeca_\ZXUSPMJGDA=951,&&+059=@DGJMORUWY\^`bdfhjlnoqstvwyz|}~~}|zywvtsqonljhfdb`^\YWUROMJGD@=950+&%+048<@CFILOQTVY[]_acegikmnprsuvxy{|~~|{yxvusrpnmkigeca_][YVTQOLIFC@<840+%%*/48<?BFIKNQSVXZ]_aceghjlnoqrtvwxz{}~~}{zxwvtrqonljhgeca_]ZXVSQNKIFB?<84/*%$*/37;>BEHKMPSUWZ\^`bdfhikmnprsuvwyz{}~~}{zywvusrpnmkihfdb`^\ZWUSPMKHEB>;73/*$#).26:>ADGJMORTWY[]_aceghjlmoqrtuvxyz|}~~}|zyxvutrqomljhgeca_][YWTROMJGDA>:62.)#"(-169=@CFILNQSVXZ\^`bdfgiklnoqrtuwxyz|}~~}|zyxwutrqonlkigfdb`^\ZXVSQNLIFC@=961-("!',058<?BEHKNPRUWY[]_acefhjkmnpqstuwxyz|}~~}|zyxwutsqpnmkjhfeca_][YWURPNKHEB?<850,'! &+/47;>ADGJMOQTVXZ\^`bdegijlmoprstvwxyz|}~~}|zyxwvtsrpomljigedb`^\ZXVTQOMJGDA>;74/+& $).26:=@CFIKNPSUWY[]_abdfgiklmoprstuwxyz{|}~~}|{zyxwutsrpomlkigfdba_][YWUSPNKIFC@=:62.)$#(-159<?BEHJMOQTVXZ\^_acefhiklnoprstuvxyz{|}~~}|{zyxvutsrponlkihfeca_^\ZXVTQOMJHEB?<951-(#!&+047;>ADFILNPRUWY[\^`bcefhiklnopqstuvwxyz{|}~~}|{zyxwvutsqponlkihfecb`^\[YWURPNLIFDA>;740+&! %*.269=@BEHJMOQSUWY[]_`bdeghiklmopqrtuvwxyz{|}}~~}}|{zyxwvutrqpomlkihgedb`_][YWUSQOMJHEB@=962.*% #(,048;>ADFIKNPRTVXZ[]_`bdeghiklmnpqrstuvwxyz{||}~~}||{zyxwvutsrqpnmlkihgedb`_][ZXVTRPNKIFDA>;840,(# &*/369=?BEGJLNPRTVXZ\]_abdefhijlmnopqrstuvwxyz{{|}~~~~}|{{zyxwvutsrqponmljihfedba_]\ZXVTRPNLJGEB?=963/*&  #(-148;>ACFHJMOQSUWXZ\]_abcefgijklnopqrstuvvwxyzz{||}~~~~}||{zzyxwvvutsrqponlkjigfecba_]\ZXWUSQOMJHFCA>;841-(# !&+/269<?BDFIKMOQSUWXZ\]_`bcdfghiklmnopqrstuuvwxxyzz{||}}~~~~}}||{zzyxxwvuutsrqponmlkihgfdcb`_]\ZXWUSQOMKIFDB?<962/+&! #(,047:=@BEGIKNOQSUWXZ\]_`acdeghijklmnopqrsstuvvwxxyzz{{||}}}~~~~}}}||{{zzyxxwvvutssrqponmlkjihgedca`_]\ZXWUSQONKIGEB@=:740,(#  &*.258;>@CEGJLNPQSUWXZ[]^`abcefghijklmnopqqrsttuvvwwxyyyzz{{||||}}}}~~~~~~~~~~~~~~~~}}}}||||{{zzyyyxwwvvuttsrqqponmlkjihgfecba`^][ZXWUSQPNLJGEC@>;852.*&  #'+/369<>ACEHJLNPQSUVXY[\^_`bcdefghijklmnoopqrrsstuuvvwwxxxyyyzzzz{{{{{{{{{{{{{{{{{{zzzzyyyxxxwwvvuutssrrqpoonmlkjihgfedcb`_^\[YXVUSQPNLJHECA><963/+'# $)-0369<?ACFHJLNOQSTVWYZ\]^_abcdefghijkllmnoopqqrrssttuuvvvwwwxxxxxxyyyyyyyyyyxxxxxxwwwvvvuuttssrrqqpoonmllkjihgfedcba_^]\ZYWVTSQONLJHFCA?<9630-)$!%*-147:<?ACEHIKMOQRTUWXZ[\]_`abcdefghiijkllmnnoopqqrrrssttttuuuuuvvvvvvvvvvvvuuuuuttttssrrrqqpoonnmllkjiihgfedcba`_]\[ZXWUTRQOMKIHECA?<:741-*%! "&*.147:<?ACEGIKMNPRSUVWYZ[\^_`abcdeefghiijkklmmnnoooppqqqrrrrrssssssssssssssrrrrrqqqppooonnmmlkkjiihgfeedcba`_^\[ZYWVUSRPNMKIGECA?<:741.*&" #'+.147:<>ACEGIJLNOQRTUVXYZ[\]^_`abcdeefghhiijkklllmmnnnoooooppppppppppppppooooonnnmmlllkkjiihhgfeedcba`_^]\[ZYXVUTRQONLJIGECA><:741.+'##'+.1479<>@BDFHJKMNPQSTUVXYZ[\]^_`aabcddeffgghhiijjkkklllllmmmmmmmmmmmmmmlllllkkkjjiihhggffeddcbaa`_^]\[ZYXVUTSQPNMKJHFDB@><9741.+'##'+.1469;=@BCEGIJLMOPQSTUVWXYZ[\]^_``abbcddeeffggghhhiiiiijjjjjjjjjjjjiiiiihhhgggffeeddcbba``_^]\[ZYXWVUTSQPOMLJIGECB@=;9641.+'##'*.1368:=?ABDFHIKLMOPQRTUVWXYZZ[\]^^_``aabbccdddeeefffffggggggggggfffffeeedddccbbaa``_^^]\[ZZYXWVUTRQPOMLKIHFDBA?=:8631.*'##&*-02579<>?ACEFHIKLMNPQRSTUVWXXYZ[[\]]^^__``aaabbbccccccccddccccccccbbbaaa``__^^]]\[[ZYXXWVUTSRQPNMLKIHFECA?><97520-*&#"%),/1468:<>@BCEFHIJLMNOPQRSTUVVWXXYZZ[[\\]]^^^____``````````````____^^^]]\\[[ZZYXXWVVUTSRQPONMLJIHFECB@><:8641/,)%" $(+-02579;=>@ACDFGHJKLMNOPQRRSTUUVWWXXYYZZZ[[[\\\\\\\]]]]\\\\\\\[[[ZZZYYXXWWVUUTSRRQPONMLKJHGFDCA@>=;97520-+($ #&),.13579;<>@ABDEFGIJKLMNNOPQQRSSTTUUVVWWWXXXXXYYYYYYYYYYXXXXXWWWVVUUTTSSRQQPONNMLKJIGFEDBA@><;97531.,)&#  $'*,/13579:<=?@BCDEFGHIJKLMMNOOPPQQRRSSSTTTTUUUUUUUUUUUUTTTTSSSRRQQPPOONMMLKJIHGFEDCB@?=<:97531/,*'$  !%'*,/134689;<>?@ABDEEFGHIJJKLLMMNNOOOPPPPQQQQQQQQQQQQPPPPOOONNMMLLKJJIHGFEEDBA@?><;986431/,*'%!"%'*,.024578:;<=>@ABBCDEFFGHHIIJJKKKLLLLLMMMMMMMMLLLLLKKKJJIIHHGFFEDCBBA@>=<;:875420.,*'%" !$&)+-/0245689:;<=>?@ABBCCDEEFFFGGGHHHHHHHHHHHHHHGGGFFFEEDCCBBA@?>=<;:9865420/-+)&$!  #%')+-/02345789:;;<=>>?@@AAABBBCCCCCCCCCCCCCCBBBAAA@@?>>=<;;:98754320/-+)'%#   #%')*,./01345667899:;;<<====>>>>>>>>>>>>====<<;;:99876654310/.,*)'%#   "$&')*,-./0123345566777888899999988887776655433210/.-,*)'&$"   "#%&')*+,,-.//0011122222222222211100//.-,,+*)'&%#"  !"#$%&'(())***++++++++++***))(('&%$#"!   !!"""######"""!!     \ No newline at end of file diff --git a/assets/test_scene1B.json b/assets/test_scene1B.json new file mode 100644 index 0000000..f61a7f0 --- /dev/null +++ b/assets/test_scene1B.json @@ -0,0 +1,44 @@ +{ + "geometry":[{ + "type":"sphere", + "centre":[2, 0, -6], + "radius":2, + + "ac":[0,1,0], + "dc":[0,0,1], + "sc":[1,1,1], + + "ka":0, + "kd":1, + "ks":1, + + "pc":100 + } + ], + "light":[{ + "type":"point", + "centre":[0, 0, 0], + "id":[0.5, 0.5, 0.5], + "is":[1, 1, 1] + + }, + { + "type":"point", + "centre":[2, 4, 0], + "id":[0.5, 0.5, 0.5], + "is":[1, 1, 1] + + } + ], + "output":[{ + "filename":"test_scene1B.ppm", + "size":[1000,500], + "lookat":[0,0,-1], + "up":[0,1,0], + "fov":60, + "centre":[0,0,0], + "ai":[1,1,1], + "bkc":[0.4,0.4,0.4] + } + ] +} diff --git a/assets/test_scene1B.ppm b/assets/test_scene1B.ppm new file mode 100644 index 0000000..df907fb --- /dev/null +++ b/assets/test_scene1B.ppm @@ -0,0 +1,469 @@ +P6 +1000 500 +255 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffTY[]_`bcddefffgggggfffedcb`^YffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffTY\_acefhijklmnoppqqrrrsssssssrrrqqpponmlkigeb\fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffUZ]`cegijlmopqrstuvvwxxyyyzzz{{{{{{{{{{zzzyyxwwvutsrpomkheafffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffMUZ^adfhjlnoqrstvwxyyz{||}~~~~}}|{zyxwutrpnkhcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffQW\_begjlnoqrtuwxyz{|}~~}|{zxwusqnkg`fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffPW[_behjlnprsuvxyz|}~}|zywurolhafffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffKTY]adgiknprsuwxz{|~}{ywurolf[ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffNUZ^begjloqstvxy{|~}{ywtqnibffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffNUZ^behjmoqsuwyz|}}{xvsojdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffMTY]adgjloqsuwyz|~~{yvsojcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffJRW\`cfilnqsuwyz|~~|yvsoiaffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffCNUZ^behkmprtvxz|}~{yurmgffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffIQW[_cfilnqsuwy{}~}{xtpkcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff=LSX\`dgjmoqtvxz|~|yvrmgffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffCMTY]adgjmprtvy{|~}{wtoi]fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffENTY]aehkmpruwy{}~|xupkafffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffFNTY]aehkmpruwy{}|yuqkcfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffENTY]adgjmpruwy{}}yvqlcfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffDMSX\`dgjmprtwy{}}zvqlcfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffCLRW[_cfilortvy{}}yvqkbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff@JPVZ^beilnqsvxz|~|yupj`fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff<GOTY]adhkmpsuwz|~|xtohZfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4DLRW\_cfjlortwy{}{wsnffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffAIPUZ^behknqsvxz|~zvrlcfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff;FMSX\`cgjmpruwy|~}yupi]fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0BJPUZ^behknqsvxz}{wsmffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff<FMSW\`cfjmoruwy|~}zuqj`fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3AIOUY]adhknpsvxz||xsnffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff;ELQV[_bfiloqtvy{}}zupj`fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0@HNSX\`cgjmpruwz|~{wsmffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8CJPUY]adhknpsvxz}}yupi^ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff<ELQVZ^behknqtvy{}~{vrlcfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3?GMRW[_cfilortwy{~|xsngXffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7AINSX\`cgjmpruwz|~}yupi_ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff:CJOTY]`dgjmpsuxz|~zvqkcfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff/<DKPUY]adhknpsvxz}{wrmefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3>FLQVZ^aehknqsvx{}|xtng\ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5?FLQVZ^behknqtvy{}}ytoi_ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7@GMRV[^behlnqtvy{}}yupjafffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff(8AHMRW[_beilnqtvy{}~zvqkcfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff,9AHMRW[_bfiloqtvy{~~zvrldSffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff.:BHNRW[_bfiloqtvy{~~{wrleXffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff/:BHNRW[_beilnqtvy{}{wrmfZffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0:BHNRW[^behknqtvy{}{wsmf\ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0:BHMRVZ^behknqtvy{}{wsmg]ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0:BHMRVZ^aehknqsvx{}{wsmg]ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0:AGMQVZ^adhknpsvxz}{wsmg]ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff/9AGLQUY]adgjmpsuxz|{wrmg]ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff/9@FLPUY]`dgjmpruwz|~~{wrmf]ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff.8?EKPTX\`cfilortwy|~~zvrlf\ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff,7>EJOSX[_bfiloqtvy{~~zvqle[ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff+6=DINSW[^behknqsvx{}}zuqkdZffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)4<CHMRVZ^adhkmpsuxz}}yupkdYffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff'3;BGLQUY]`dgjmpruwz|~|xtojbWffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff%1:@FKPTX\`cfilortwy{~|xsoiaTffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"08?EJOSW[_behknqsvx{}~{wsnh`Qffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff.7>DINRVZ^adgjmpsuxz|~zvrmf^fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff+5<BHMQUY]`cgjlortwy|~}yuqke\ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)3;AFKPTX\_bfilnqtvy{}|xtpjcZffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff&19?EJOSW[^aehkmpsuxz} {wsnibWffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff".7=CHMRVY]`dgjmortwy|~ + + + + + + + + + + + + + + ~zvrmg`Tffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff,5<BGLPTX\_bfilnqtvy{} + + + + + + + + }yuqlf^Nffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)2:@EJOSW[^aehjmpsuxz| + +  + + |xtojd[ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff%07>DIMQUY]`cfilortwy{~ + +  + + ~zwsnhbXffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff!-5<BGLPTX[_behknqsvxz} + +  + + }yuqlf_Tffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff*3:@EJNRVZ^adgjmoruwy|~ + +  + + |xtpjd]Nffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff&07>CHMQUY\`cfilnqtvx{} + +  !!!!""""""""""""!!  + + ~zwsnibZffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"-5;AFKOSW[^aehjmpruwz|~ !!""##%%&&''''((((((((((''''&&%%$$##!!  + + }yuqlg`Vffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff*29?DIMRVY]`cfiloqtvy{} + + !!##$$&&(())++,,--....//////....--,,++**((''%%##!!  + + {xtojd]Qffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff&/6=BGLPTX[_behkmpsuxz|~ + + !!$$&&((**,,..001133445566666666665544332200//--++))''%%""  }zvrmhbZffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",4:@EJNRVZ]`cfiloqtvy{} + + !!$$'')),,..1133557799::<<====>>>>>>>>==<<;;9988664411//--**''%%""  |xuplf_Vffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff(18>CHLPTX[_behknpsuxz| + +  ##&&)),,//225577::<CHLQTX\_behknpsuxz|~ + +  ##&&**--115588<<@@CCGGJJMMPPRRUUVVXXYYZZZZZZYYXXWWUUSSQQNNKKHHEEAA==::6622..++''$$!! ~{wsoje^Tffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff&/6<AFJOSVZ]`dgiloqtvy{} + +  ##''++//3377;;??CCGGKKOOSSVVYY\\^^``bbccddddddddccaa__]]ZZWWTTPPMMIIEEAA<<884400,,(($$!! + + }yvrmhb[Nffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"+39?DHMQTX\_behkmpsuwz|~ + +  $$((,,004499==BBFFKKOOTTXX\\``ccffiikkmmnnoooooonnmmlliiggddaa]]YYUUQQLLHHCC>>::5511--))%%!! + + ~{xtpkf_Wffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff'/6<AFJOSVZ]`cfiloqtvy{}  $$((,,0055::??DDIINNSSXX\\aaeeiimmppssvvxxyyzzzzzzzzxxvvttqqnnjjffbb^^YYTTOOJJEE@@;;6622--))%%!! + +}yvrmic\Qffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff#,39?DHMQTX[_behjmpruwz|~ + + ##'',,0055::??EEJJPPUU[[``eejjoossww{{~~||xxuuppllggaa\\WWQQLLFFAA<<6622--(($$  ~{xtpkf`XJfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff(06<AFJNRVZ]`cfilnqsvxz} + + ##''++0055::@@EEKKQQWW]]cciinnttyy~~zzuuppjjdd^^XXRRMMGGAA;;6611,,((## + +}yvrnic]Sffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff#,39?DHLPTX[^adgjmortwy{~ !!&&**//44::??EEKKRRXX^^eekkqqww}}~~yyssllff``YYSSMMFF@@;;5500++''"" ~{xtpkf`YMffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff (06<AFJNRVY\`cfhknpsuxz|~ + +  $$))..3388>>DDKKQQXX__ffllsszz{{uunngg``YYRRLLFF??9944//**%%!! + +|yvrnid]Tffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff$,39>CHLPTW[^adgjloqtvy{} ##'',,1177==CCIIPPWW^^ffmmtt{{}}uunngg__XXQQJJDD>>8822--((## ~{wtpkf`YNffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff(/6;AEJNQUY\_behkmpruwz|~ + + !!%%**//55;;AAGGNNUU]]ddlltt||}}uummff^^VVOOHHBB;;5500++&&!! + +|yurmic]UBfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff#,28>CGKOSWZ]`cfilnqsvxz} ##((--2288>>EELLSS[[bbjjrr{{||sskkcc[[TTMMFF??9933--((## }zwsokf`YOffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff(/5;@EIMQTX[^bdgjmortwy{}  %%**//55;;BBIIPPXX``hhppxxyyqqhh``XXQQIIBB<<5500**%%!! |xuqmhc]UEfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff#+28=BFKORVY\`cfhknpsuwz|~ + + ""'',,2288>>EELLTT\\ddmmuu~~vvmmee\\TTMMEE>>8822,,''"" + +}zvsojf`YOffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff'.4:?DHLPTWZ^adgiloqtvxz} $$))..44::AAHHPPWW``hhqqzzzzqqii``XXPPHHAA::44..))$$ ~{xtplhb\TFfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"*17<AEJNQUX\_behjmortwy{} !!%%**0066<CGKOSVZ]`cfhknpsuwz|~ + + ""'',,2288>>FFMMUU^^ffooyyxxooff]]UUMMEE>>8811,,&&"" + +}zwsplgb[SEfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff!)06;@DIMPTW[^adgiloqsvxz} + + ##((--3399@@HHOOWW``iirr||{{rrhh__WWOOGG@@9933--''## + +~{xuqmid^WMffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff $,28=BFJNRUY\_begjmortwy{} + + $$))..44;;BBIIQQYYbbkktt~~}}ssjjaaXXPPHHAA::44..((## + +|yvsokfaZRCfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff'.4:?CGKOSVZ]`cfhknpsuwy|~  %%**//55<>8822,,''"" + +~{xuqmie`ZSIffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff&-38=AEIMQTW[^`cfiknpsuwy|~ ##((--3399??FFMMUU]]eennvv{{rrjjaaYYQQJJCC<<6600++&&!! + +~|yurokfb\VM;fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff !)/49>BFJNRUX[^adgilnqsuxz|~ ""'',,1177==DDKKRRZZbbjjss{{wwooff^^VVOOHHAA::44//))%%  + +|yvsplhc^XQEffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff$+06;?DHKORVY\_begjloqtvxz|~ + + !!&&++0055;;BBHHPPWW__ffooww{{rrjjbbZZSSLLEE>>8822--((## }zwtqmie`ZSJffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff &,27<@EILPSVZ]`behjmortvx{} + +  $$))..3399??FFLLTT[[bbjjrrzz}}uummff^^WWOOHHBB<<6600++&&"" ~{xuqnjfa\VN?fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff !(.38=AFIMQTWZ]`cfhkmprtwy{} + + ##'',,1177==CCIIPPWW^^eemmtt||wwpphhaaYYRRLLEE??9933..))$$  + +~{yurokgc^XPFffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff#*05:>BFJNQUX[^acfiknpsuwy{} ""&&**//44::@@FFLLSSZZ``hhoovv}}xxqqjjcc\\UUNNHHAA;;6600,,''## + +|yvsplhd_YSJffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +%+16;?CGKORUX\^adgilnqsuwz|~  $$((--2277==BBHHNNUU[[bbiioovv||~~xxqqjjdd]]VVPPJJDD>>8833..))%%!! }zwtpmie`[UM@fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff  '-27<@DHLOSVY\_bdgjloqsvxz|~ + + ""&&++//4499??DDJJPPVV\\cciioouu{{||vvppjjdd]]WWQQKKEE??::5500++''"" + +}zwtqnjfb\WOEffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"(.38=AEIMPSWZ]_behjmoqtvxz|~ + + !!$$((--1166;;@@FFKKQQWW]]cchhnnssyy~~~~yyttnniicc]]WWQQLLFFAA;;6611--(($$  }{xurnkgc^XRIffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +#*/59>BFJMQTWZ]`cehjmortvxz| + + ""&&**..3388<>BBGGKKPPTTYY]]aaeehhllooqqttuuwwxxxxxxxxwwuussqqnnkkhhdd``\\XXSSOOJJEEAA<<8833//++''##  + + |ywtpmiea\WPGffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff !(.38<@DHLORVY\^adfiknpruwy{} + +  ##''**..225599>>BBFFJJNNRRVVZZ]]``ccffhhjjllmmnnnnnnnnmmlljjhheebb__\\XXTTPPLLHHDD??;;7733//++''$$  |zwtqnjfb]XRJ>::6622..++''$$!! + +}zwuqnkgc^YSLAffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff$*059>BFIMPSVY\_begjlnqsuwy{} + +  ##%%((++//225599<BFJMQTWZ]_begjloqsuwz|~ + + !!$$&&)),,//224477::==@@CCEEHHJJLLNNPPQQRRSSTTTTTTSSRRQQPPNNLLJJHHEEBB??<<99663300,,))&&##  }{xurolhd`[VOG5fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff + ',26;?CGJNQTWZ]`behjloqsuxz|~ + +  ""$$'')),,..11336699;;==@@BBDDFFGGIIJJKKKKLLLLLLKKJJIIHHGGEECCAA>><<99664411..++((%%""  ~{xvspliea\WQI=fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff "(-27;@CGKNQUXZ]`cehjmoqsvxz|~ + + + + !!##%%''))++..0022446688::<<>>??AABBCCDDDDDDEEDDDDCCBBAA@@>><<::88663311..,,))''$$!! + +~{yvspmifb]XRK@ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff#).38<@DHKORUX[^`cehjmoqtvxz|~ + +  ""$$%%''))++--//002244667788::;;<<====>>>>>>====<<;;::998866442200..,,))''%%""  + + ~|yvspmjfb^YSLCffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff$*/48=ADHLORUX[^acfhkmoqtvxz|~ + +  !!##$$&&''))**,,--//0011334455666677778888777777665544332200..--++))''%%##!! + + ~|ywtqnjgc^ZTNE5fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff %+049=AEHLORUX[^acfhkmortvxz|~ + + + +  !!""##%%&&''(())**,,--..////0011112222222222111100//..--,,++))((&&$$##!! + + ~|ywtqnkgc_ZUOG;fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff  &+059>BEILOSVY[^acfhkmortvxz|~ + +  !!""##$$%%&&''(((())**++++,,,,--------------,,,,++**))((''&&%%##""  + + |zwtqnkgd`[VPI>ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff!',16:>BFIMPSVY\^adfikmprtvxz|~ + +  !!""""##$$$$%%%%&&&&''''(((((())))))))))))))))((((''&&&&%%$$##""  + + |zwtrnkhd`\WQJAffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff!'-26:>BFIMPSVY\_adfikmprtvxz|~ + +  !!!!""######$$$$$$%%%%%%%%&&&&&&&&&&&&&&&&&&&&&&%%%%%%$$$$##""""!!  + + |zwurolhea\XRKC/fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +"(-27;?CFJMPSVY\_adfikmprtvxz|~ + +  !!!!""##$$$$%%%%%%&&&&&&&&&&&&&&&&&&%%%%%%%%%%%%$$$$$$####""""!!!!  + + |zwurolhea]XSMD7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff #).37;?CGJMPSVY\_adfikmprtvxz|~  ""##$$%%&&&&''(((((())))))))((((((((''''&&&&%%%%$$$$####""""!!!!  + + |zwuroliea]YTMF:fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff $).37<?CGJMQTWY\_adfikmprtvxz|~ + +  ""##%%&&''(())**++,,,,,,------,,,,,,++++**))))((''&&%%%%$$##""!!  + + |zxurolieb^YTNG=ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff$*/38<@CGJNQTWY\_adfikmprtvxz|~ + + !!##%%&&((**++--..//0000111122221111110000//..--,,++**))''&&%%$$##""!!  + + + + |zxurolifb^ZUOH?ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff%*/48<@DGJNQTWZ\_adfikmprtvxz|~ + + !!##%%''))++--//112244556666777777777766665544332211//..,,++))((&&%%##""!! + + + + |zxurolifb^ZUPI@ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff  %+048<@DGKNQTWZ\_adfikmprtvxz|~ + +  ##%%((**--//1133557799::;;<<====>>>>====<<;;::998866553311//..,,**((&&$$##!! + + + + |zxurolifb_ZVPJB3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff  &+049=@DGKNQTWZ\_adfikmortvxz|~ + + ""$$''**--//225577::<<>>??AABBCCDDDDEEDDDDCCCCBB@@??==;;9977553311//,,**((&&$$""  + + |zxuromifc_[VQKC7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff !&+059=@DGKNQTWZ\_adfikmoqtvxz|} + +  ##&&)),,//225588;;>>@@CCEEGGHHJJKKLLLLLLLLKKKKJJHHGGEECCAA??<<::775522//--**((%%##!! + + + + ~|zwuromifc_[VQKD9fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff!',059=ADGKNQTWZ\_adfikmoqsuxy{}  $$''**..115588;;??BBEEHHJJMMOOPPRRSSTTTTTTTTSSRRQQPPNNLLIIGGDDBB??<<99663300--**''%%""  + + ~|zwuromjfc_[WRLE;ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff!',159=ADHKNQTWY\_adfhkmoqsuwy{} !!$$((++//3377::>>BBFFIILLOORRUUWWYY[[\\]]]]]]]]\\[[YYWWUUSSPPNNKKGGDDAA==::773300--**''$$!! + + ~|zwuromjfc_[WRLE>BBGGLLPPTTYY]]``ddggiillmmooppppppoonnmmkkiiffcc``\\XXTTPPLLHHDD??;;7733//,,((%%"" + + ~|ywurolifc_[WRMF>.fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff "(,159=ADGKNQTVY\^acfhjloqsuwy{}~  $$((,,0055::??DDIINNSSXX\\aaeeiimmppssuuwwyyzzzzzzyyxxvvttrrookkhhdd``[[WWRRNNIIDD@@;;7733//++''$$  + + ~|ywtrolifc_[WSMG?1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff "(,159=ADGKNQTVY\^acfhjlnqsuwyz|~ + + ##''++0055::??DDJJOOUUZZ__ddiinnrrvvzz}}~~{{xxttppllggcc^^YYTTNNIIDD??;;6622--))&&"" + +~{ywtrolifc_[WSMG?3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff  #(-159=ADGJNQSVY[^acehjlnprtvxz|~ ""&&**//4499??DDJJPPVV\\bbggmmrrww||}}yyttoojjee__ZZTTOOIIDD??::5500,,(($$!! + +}{yvtqolifc_[WSNG@4fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff  #(-159=@DGJMPSVY[^`cegjlnprtvxz|~ + +  $$))..3388>>DDJJPPVV]]cciioouu{{||wwqqllff``ZZTTNNHHCC==8833//**&&"" + + }{yvtqolifc_[WSNH@6fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff  #(-159=@DGJMPSVY[^`cegilnprtvxz|} ##'',,1177<>EEKKRRZZaaiippxxzzsskkdd]]VVOOIICC==7722--(($$  ~|zxusqnkheb_[WSNHA8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff!$',159<@CFJMPRUXZ]_bdfikmoqsuwy{|~  %%**//55;;BBIIPPWW__ggoowwyyqqiibbZZSSLLFF@@::44//**%%!! ~|zwuspnkheb^[WRNHA8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff!$(,058<@CFILORUXZ]_adfhjmoqsuwxz|~ + + ""'',,2288>>EELLTT\\ddlltt}}~~vvnnff__WWPPIICC<<6611,,''## + +~|ywurpmkheb^[WRMHA8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"%',048<?CFILORUWZ\_acfhjlnprtvxz|~ + + $$))..44::AAHHPPXX``hhqqzz{{sskkcc[[SSLLEE??9933--))$$  + + }{ywurpmjgda^ZVRMHA9$fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"%(,048<?BFILORTWY\^acehjlnprtvxz{} !!%%**0066==DDKKSS[[ddmmvvwwooff^^WWOOHHAA;;55//**%%!! + + }{yvtromjgda^ZVRMHA9(fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"%(,048;?BEIKNQTWY\^`cegilnprtuwy{} ""'',,2288??FFNNVV__ggqqzz{{rrjjaaYYRRJJCC==6611++&&"" |zxvtqoljgda]ZVRMGA9)fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff "%(+047;?BEHKNQTVY[^`begikmoqsuwy{|~ ##((--33::AAIIPPYYbbkktt}}vvmmdd\\TTLLEE>>8822,,''## ~|zxvsqolifc`]YVQMGA9*fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff "%(*/37;>BEHKNQSVX[]`bdgikmoqsuwxz|~ + + $$))//55<ADGJMPSUX[]_bdfhjlnprtvxz|} + +  $$**0066==DDLLTT]]ffppyy{{rrhh``WWOOHHAA::44..))$$  + +}{ywuspnkhfc`\YUQLG@8+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +"%(+.36:=ADGJMPRUXZ]_acfhjlnprtvxy{} + +  %%**0077>>EEMMVV^^hhqq{{}}ssjjaaYYQQIIBB;;55//**%%  + +}{ywtrpmkheb_\XTPLF@8+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +"%(+-26:=@DGJLORUWZ\^acegjlnprsuwy{|~ + + !!%%++1177>>FFNNVV__iirr||~~ttkkbbYYQQJJBB<<55//**%%  + +~|zxvtromjheb_[XTPKF@8+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +"%(+.259=@CFILORTWY\^`cegikmoqsuwxz|~ + + !!&&++1188??FFNNWW``iiss}}~~uukkbbZZRRJJCC<<5500**%%!! + +~|zxvsqoljgda^[WTOKE?7*fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +"%(+-159<?CFILNQTVY[^`bdfikmoqstvxz{} + + !!&&++1188??FFNNWW``iiss}}~~uukkbbZZRRJJCC<<5500**%%!! + +}{ywusqnligda^ZWSOJE?7*fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +"%(+-158<?BEHKNQSVX[]_bdfhjlnprtvxy{}~ + + !!%%++1177>>FFNNVV__iirr||~~ttkkbbYYQQJJBB;;55//**%%  + +}{ywurpnkifc`]ZVSNJD>6)fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +"%(+-/48;>BEHKMPSUXZ]_acfhjlnprsuwyz|~ + +  %%**0077>>EEMMVV^^hhqq{{||ssjjaaYYPPIIBB;;55//))%%  + +~|zxvtrpmkhfc`]YVRNID>6(fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +"%(+-047;>ADGJMPRUWZ\^acegikmoqsuvxz|} + +  $$**0066==DDLLTT]]ffppyy{{qqhh``WWOOHHAA::44..))$$  ~|zxvtqomjheb_\YUQMIC=5'fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff "%(*-/37:=ADGJLORTWY\^`bdgikmoprtvxy{}~ + + $$))//55<>8822,,''"" ~|{ywurpnligda^[XTPLGB<3%fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"%(*-/259<?CFHKNQSVXZ]_acehjlmoqsuwxz|} ""'',,2288??FFNNVV__ggqqzz{{rrjjaaYYQQJJCC<<6600++&&"" + + ~|zxvtrpmkhfc`]ZWSPKGA;3#fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"%(*-/158<?BEHKMPSUWZ\^acegikmoqrtvxy{}~ !!%%**0066==DDKKSS[[ddmmvvwwnnff^^VVOOGGAA::44//))%%  + +}{ywusqomjhec`]ZVSOKF@:2!fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"%'*,/148;>ADGJMORTWY\^`bdfhjlnprtuwy{|~ + + $$))..44::AAHHPPXX``hhqqzz{{ssjjbbZZSSLLEE>>8822--((## + +~|{ywusqnljgeb_\YVRNJE@90fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff!$'*,/137:>ADGILOQTVY[]_bdfhjlnoqsuwxz|} + + ""'',,2288>>EELLTT\\ddlltt}}~~vvnnff^^WWOOHHBB<<6600++&&"" ~|zxvtrpnkigda^[XUQMID?8/ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff!$'*,.136:=@CFIKNQSVXZ]_acegikmoqrtvxy{}~  %%**//55;;BBIIPPWW__ggoowwxxppiiaaZZSSLLEE??9933..))$$  + + }{ywusqomkhfca^[XTQMHC>7.ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff!$'),.0269<?BEHKMPRUWZ\^`bdgijlnprtuwyz|~ + + ##((--2288>>EEKKRRZZaaiippxxyyrrkkcc\\UUNNHHBB<<6611,,''## + +~|zywusqoljhec`]ZWSPLGC=6-fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff!$'),.0258;?BDGJMORTWY[]`bdfhjlnoqsuvxz{}~ + + !!%%**//55::AAGGNNTT\\ccjjqqxxyyrrkkee^^WWPPJJDD>>8833..))%%!! }|zxvtrpnligdb_\YVSOKGB<5+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff  #&)+.0247;>ADGILOQTVX[]_acegikmoqrtvwy{|~ ##'',,1177<>DDJJPPVV\\cciioouu{{{{vvppjjdd^^XXRRLLGGAA<<6611--(($$  ~|zxwusqoljhec`^[XTQMIE@:2(fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff  #&(+-02469<?BEHKMPRUWY[^`bdfhjlmoqstvxy{}~ ""&&**//4499??DDJJPPVV\\aaggmmrrww{{||xxssnnhhcc]]XXRRMMGGBB<<7733..**%%"" + + }{yxvtrpnligeb_]ZWSPLHD?91&fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff "%(+-/1358;?ADGJLOQTVX[]_acegikmoprtuwyz|} + + ##''++0055::??DDJJOOUUZZ__ddiinnrrvvyy}}}}zzwwssoojjffaa\\WWQQLLGGBB==8833//**&&## ~|zywusqomkifda_\YVSOKGC=70#fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff "%(*-/1357;>ADFILNQSUXZ\^`bdfhjlnpqsuvxz{}~  $$((,,0055::??DDIINNSSXX\\aaeeiimmppssuuwwxxyyyyyyxxwwuussppmmjjffbb^^YYTTPPKKFFAA==8844//++''##  + + }{zxvtrpnljhec`^[XURNJFB<6. fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"%'*,/1357:=@CEHKMPRUWY[]`bdfhikmoqrtvwyz|} + + !!$$((,,005599>>BBGGLLPPTTXX\\``ccffiikkmmnnoooooonnmmkkiiggddaa]]ZZVVRRMMIIEE@@<<8833//++''$$  ~|{ywutrpnkigeb`]ZWTQMIE@;5,fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff!$'*,.13569<?BEGJMOQTVX[]_acegijlnprsuwxz{}~ + + !!$$((,,004488<ADGILNQSUXZ\^`bdfhjlmoqstvwy{|~ !!$$((++//3377::>>BBEEIILLOORRTTVVXXZZ[[[[\\\\[[ZZYYWWUUSSPPMMJJGGDD@@==995522..++''$$!! + + ~|{ywvtrpnljhec`^[XUROKGC>82(fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff #&)+.024689=@CFHKMPRTWY[]_acegikmnprsuwxz{}~  $$''**..114488;;>>BBDDGGJJLLNNPPQQRRSSSSSSRRQQPPOOMMKKHHFFCC@@==::773300--**&&##  + + }|zxwusqomkigdb`]ZWTQNJFB=70&fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff  #&(+-024679<?BEGJLOQTVXZ\^`bdfhjlnoqstvwy{|} + +  ##&&)),,//225588;;==@@BBDDFFGGIIIIJJJJJJJJIIHHGGEECCAA??<<::774411..++((%%""  ~}{yxvtrpnljhfda_\YVSPMIE@;6.#fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff "%(+-/13579;>ADGILNPSUWY\^`bdegikmnprsuwxz{}~ + + !!$$''**,,//22447799;;==>>@@AABBBBBBBBBBAA@@??>><<::88663311..,,))''$$!! }|zxwusqomkigec`^[XUROLHD?:4, fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff "%(*,/13578:=@CFHKMPRTVY[]_aceghjlnoqstvwyz|} + +  ""%%''**,,..00224466779999::;;;;;;;;::99887755442200..,,))''%%""  + +~|{yxvtrpomkhfdb_]ZWTQNJGB>92*fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff!$'*,.03468:<?BEGJLOQSVXZ\^`bdfhikmoprsuwxz{}~ + +  ##%%''))++,,..00112233334444444433332200//..,,**((''%%""  + +}|zxwusqpnljgeca^\YVSPMIEA<71(ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff!$'),.024689;>ADFIKNPRUWY[]_acegijlnoqstvwyz|} + +  ""$$%%''((**++,,----......----,,,,++))((''%%$$""  ~|{yxvtrqomkigdb`][XUROLHD@;5/%fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff  #&)+-024679;=@CEHJMOQTVXZ\^`bdfhikmoprsuwxz{|~ + + !!""##$$%%&&''''((((((((''''&&%%$$##""!! + + ~}{zxwusqpnljhfca_\ZWTQNJGC>94-#fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff "%(+-/13579:<?BDGILNQSUWY[]_acegijlnoqstvwyz|}~ + +  !!""""########""""!!  + + ~|{ywvtrqomkigeb`^[YVSPMIFA=82+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +"%(*,/13578:<>ACFHKMPRTVXZ\^`bdfhikmnprsuvxy{|~ + +  + + ~}{zxvusqpnljhfda_]ZWUROKHD@<60(fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff!$'),.02468:;=@BEGJLOQSUWY[]_acegijlnoqrtuwxz{}~ + +  + + }|zywvtrpomkigec`^\YVTQNJGC?:5.&fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff #&)+.024679;<?ADFIKNPRTVXZ\^`bdfhikmnprsuvxyz|} + +  + + ~|{yxvusqonljhfdb_]ZXUROLIEA=83,#fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff  #&(+-/13579:<>@CEHJMOQSUWZ\]_aceghjlmoqrtuwxz{|~ + + + +  + + ~}{zxwutrpnmkigec`^\YWTQNKHD@<71*fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff "%(*,/13578:<=?BDGILNPRTVY[]^`bdfgikmnpqstvwyz{}~ + +  + + + + }|{yxvtsqomljhfdb_][XVSPMJFC>:5/'fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff!$'*,.02468:;=>ACFHJMOQSUXZ\]_aceghjlmoprsuvxy{|} + + + + + + ~|{zxwusrpnlkigeca^\ZWTROLHEA=83-$fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff #&)+.024679;<>?BEGILNPRTWY[\^`bdfgiklnoqrtuwxz{|~ + + + + + + + + + + + + + + ~}|zywvtrqomkjhfdb_][XVSPMJGC@;61*!fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff  #&(+-/13579:<=?ACFHKMOQSUWY[]_acefhjkmnprstvwyz{}~ }|{yxvusqpnljigec`^\ZWUROLIFB>:5/(fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +"%'*,.13468:;=>@BEGILNPRTVXZ\^`bdegijlmoqrtuvxy{|}~~|{zxwutrpomkigfda_][XVSQNKHD@<83-%fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff!$'),.024689;<>?ADFHKMOQSUWY[]_acdfhiklnpqstuwxz{|~~}{zywvtsqonljhfdb`^\ZWUROLIFC?;61*"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff #&)+-/13579:<=?@BEGJLNPRTVXZ\^`bceghjkmoprstvwyz{}~~}|zyxvusqpnmkigeca_][XVSQNKHEA=94.(fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff "%(*,/13568:;=>@ADFHKMOQSUWY[]_`bdfgijlnoqrsuvxyz|}~}|{yxwutrpomkjhfdb`^\YWUROMJFC?;72,%fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff !$'),.024689;<>?ABEGILNPRTVXZ\^_acefhikmnpqrtuwxy{|}~~|{zxwutrqonljigeca_][XVSQNKHEA>:50*"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff #&)+-/13579:<=?@BDFHJMOQSUWY[]^`bceghjlmopqstvwxz{|}~}{zywvtsqpnmkigfdb`^[YWUROMJGC@<83.'fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff "%(*-/13568:;=>@ACEGIKNPRTVXZ[]_abdfgijlnoprsuvwyz{|~~}|zyxvusrpomkjhfdba^\ZXVSQNKHEB>:61+$fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +!$'),.024679;<>?ABCEHJLOQSUWXZ\^`acefhiklnoqrtuvxyz{}~~}|{yxwutrqonljigeca_][YWTROMJGC@<84/)!fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff #&)+-/13579:<=?@BCEGIKMOQSUWY[]^`bdeghjkmnpqstuwxyz|}~}|{zxwutsqpnlkigfdb`^\ZXUSPNKHEB>:62,&fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff "%(*,/13468:;=>@ABDEHJLNPRTVXZ\]_abdfgijlmopqstvwxy{|}~~|{zxwvtsrpnmkjhfdca_][YVTROLJGC@=94/*#fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +!$'),.024579:<>?@BCDFIKMOQSUWYZ\^`acefhiklnoprstvwxz{|}~~|{zywvusrpomljhgeca_][YWUSPNKHEB>;72-'fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff #&(+-/13578:;=>@ACDEGJLNPRTVWY[]^`bceghjklnoqrsuvwxz{|}~~}{zyxvutrqonlkigfdb`^\ZXVSQOLIFC@=950+$fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff "%'*,.024689;<>?ABCEFHJLOPRTVXZ\]_abdeghjkmnpqrtuvwyz{|}~}|zyxvutrqpnmkihfdca_][YWTRPMJHEB>;72.(!fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff !$&)+-/13578:<=?@ACDEGIKMOQSUWYZ\^_acdfgijlmnpqstuvxyz{|}~}|zyxwutsqpnmkjhfeca_]\YWUSQNLIFC@<950+%fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff #%(*-/134689;<>?ABCEFHJLNPRTVWY[]^`acefhiklmopqstuvxyz{|}~}|{yxwvtsqpomljigedb`^\ZXVTQOMJGDA>:72.("fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff !$'),.024579:<=?@ACDEFIKMOQRTVXZ[]_`bcefhiklnoprstuwxyz{|~~}|{yxwvtsrpomljigfdb`_][YWURPNKHFC?<950+%fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff #&(+-/13568:;=>?ABCEFGIKMOQSUWXZ\]_abdeghjklnoprstuwxyz{|~~}|{yxwvtsrponlkihfdca_][YWUSQNLIGDA>:62.)"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff "%'*,.024679:<=?@ACDEFHJLNPRTUWY[\^_acdfghjkmnoqrstvwxyz{|}~}|{yxwvusrqonlkihfeca`^\ZXVTROMJHEB?<840+&fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff !$&)+-/13568:;=>?ABCEFGHKMNPRTVXY[]^`acdfgijkmnoqrstvwxyz{|}~~}|{yxwvusrqonmkjhgecb`^\ZYWTRPNKIFC@=:62.)#fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"%(*,.024679:<=?@ACDEFHIKMOQSUVXZ[]_`bcefgijlmnoqrstvwxyz{|}~~}|{yxwvusrqpnmkjhgedb`_][YWUSQNLJGDA>;840+&fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff !$&)+-/13568:;=>?ABCEFGHJLNPQSUWXZ\]_`bcefhijlmnpqrstvwxyz{|}~~}|zyxwvusrqpnmkjigfdba_][ZXVTQOMJHEC@<962-("fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff #%(*,.024679:<=?@ACDEFGIJLNPRTUWYZ\^_abdefhijlmnpqrstvwxyz{|}~~}{zyxwvusrqpnmljigfdca_^\ZXVTRPNKIFDA>:73/+%fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff !$')+-/13568:;=>?ABCDFGHIKMOPRTVWY[\^_abdeghiklmnpqrstvwxyz{|}~~}|{zyxwvusrqpnmljigfdca`^\ZXWUSPNLJGDB?<851-("fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff #%(*,.024679:<=?@ACDEFGHIKMOQSTVXY[\^`abdeghiklmnpqrstuwxyz{|}~~}|{zyxwvusrqpnmljihfeca`^\[YWUSQOMJHEC@=:63/*%ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff !$')+-/13568:;<>?ABCDEGHIJLNOQSUVXZ[]^`acdeghiklmnpqrstuvxyz{|}~~}|{zyxwvtsrqpnmljihfecb`^][YWUSQOMKIFCA>;840,'"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff #%(*,.024679:<=>@ABDEFGHIJKNPRSUWXZ[]^`acdeghiklmnpqrstuvwxyz{|}~~}|{zyxwutsrqpnmljihfecb`_][YXVTRPNKIGDB?<952.)$ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff !$')+-/135689;<>?@BCDEFGIJKMNPRTUWXZ[]^`acdeghiklmnoqrstuvwxyz{|}~~}}|{zywvutsrqpnmljihfecb`_][ZXVTRPNLJGEB@=:73/+&!fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff #%(*,.024579:;=>@ABCDFGHIJKMOPRTUWYZ\]_`acdeghiklmnoqrstuvwxyz{|}~~}|{zyxwvutsrqonmljihfedb`_]\ZXVUSQOMJHFC@>;841-(#ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff !$')+-/134689;<=?@ACDEFGHIJKMOQRTVWYZ\]_`acdeghiklmnopqstuvwxyz{|}}~~}|{zyxwvutsrponmljihfedba_]\ZXWUSQOMKIFDA><952.*% fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff #%(*,.023578:;=>?ABCDEFGIJKLMOQSTVWYZ\]_`acdeghijlmnopqrstvwxxyz{|}~~}}|{zyxwvutsqponmljihfedba_^\ZYWUSQOMKIGDB?<:63/+'"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff !$&)+-/124679:<=>@ABCEFGHIJKLNOQSTVWYZ\]_`acdeghijlmnopqrstuvwxyz{|}~~}|{zyxxwutsrqponmkjihfedba_^\ZYWUSRPNLIGEB@=:741-)$fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff "%'*,.0135689;<>?@ACDEFGHIJKLNPQSTVWYZ\]_`acdeghijklnopqrstuvwxyz{||}~~~}|{zyxwvutsrqponlkjigfecba_^\[YWUTRPNLJHEC@>;852.*&!ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff !#&(*-.024578:;=>?ABCDEFGHIJKLMPQSUVXYZ\]_`acdefhijklmnpqrstuvwxxyz{|}~~}|{{zyxwvutsrqpomlkjigfecba_^\[YWVTRPNLJHFCA><963/+'# fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"%')+-/134689:<=>@ABCDFGHIJKLMNPQSUVXYZ\]_`acdefgijklmnopqrstuvwxyz{||}~~~}|{zyxwvvutsrponmlkjhgfecba_^\[YWVTRPNLJHFDA?<:740-)$ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff  #&(*,.023578:;<>?@ACDEFGHIJKLMNPQSUVXYZ\]_`abdefghjklmnopqrstuvwxyyz{|}~~~}|{{zyxwvutsrqponmlkihgfdcb`_^\[YWVTRPOMKIFDB?=:741.*&! +fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff!$&)+-/124679:;=>?@BCDEFGHIJKLMNPRSUVXYZ\]^`abcefghijlmnopqrstuvvwxyz{||}~~}}|{zyxxwvutsrqponmkjihgfdcb`_]\ZYWVTRQOMKIGEB@=;852/+'"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff + #%'*,./134689:<=>@ABCDEFGHIJKLMNPRSUVWYZ\]^`abcdfghijklmnopqrstuvwxyyz{|}}~~~}|{zzyxwvutsrqponmlkjihgedca`_]\ZYWVTRQOMKIGEC@>;963/,($ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff !#&(*,.0235789;<=?@ABCEFGHIJKKLMNPRSTVWYZ[]^_abcdeghijklmnopqrstuvvwxyz{{|}~~~~}||{zyxwwvutsrqponmlkjigfedca`_]\ZYWVTRQOMKIGECA><9630-)%  fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"$')+-/124578:;=>?@ACDEFGHIJKLLMNPQSTVWYZ[]^_`bcdefghjklmnopqqrstuvwxxyz{||}~~~}||{zyyxwvutssrqponmlkihgfedba`^]\ZYWVTRQOMKIGECA?<9741.*&"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff  #%(*,./134679:<=>?ABCDEFGHIJKLMMNPQSTVWXZ[\^_`acdefghijklmnopqrstuuvwxyyz{||}~~~}}|{zzyxwvvutsrqponmlkjihgfdcba_^][ZYWUTRQOMKIGECA?<:741.+'#fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff!$&(*,.0235689;<=>@ABCDEFGHIJKLMNNOQSTVWXZ[\]_`abcdfghijklmnopqqrstuvwwxyzz{||}~~~}}|{zzyxwwvutsrrqponmlkjihfedcb`_^][ZXWUTRQOMKIGECA?=:852/,($  fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff "$')+-/024578:;<=?@ABCDEFGHIJKLMNNOQSTUWXY[\]^`abcdefghijklmnopqrsttuvwwxyzz{||}~~~}}|{{zyxxwvuttsrqponmlkjihgfedca`_^\[ZXWUTRPOMKIHFCA?=:852/,)%!ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff  #%'*,-/134678:;<>?@ABCDEFGHIJKLMNNOQRTUVXYZ\]^_`bcdefghijklmnoppqrstuuvwxxyzz{||}~~~~}}|{{zyxxwvuutsrqqponmlkjihgfecba`_]\[YXVUSRPOMKIGFDA?=;8630-)&" fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff!$&(*,.0134679:;=>?@ABDEFGHHIJKLMNNOQRTUVXYZ[]^_`abcdefhiijklmnopqrrstuuvwxxyzz{||}~~~~}||{{zyyxwvvutsrrqponmlkjihgfedcba_^]\ZYXVUSRPNMKIGFDB?=;8630-*&" fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +"$')+-.0235689:<=>?@BCDEFGHIIJKLMNNOQRSUVWXZ[\]^`abcdefghijklmnnopqrsstuvvwxxyzz{||}}~~}}||{zzyyxwvvutssrqponnmlkjihgfedca`_^][ZYWVTSQPNMKIGEDB?=;9631.*'#ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff  #%')+-/0245789;<=>?ABCDEFGHIIJKLMNNOPRSTVWXY[\]^_`abcefghhijklmnoppqrsstuvvwxxyzz{{|}}~~~~}}||{zzyxxwvvuttsrqpponmlkjihgfedcba`_]\[ZXWVTSQPNLKIGECA?=;9641.+($  fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff!#%(*,-/124578:;<=>@ABCDEFGHIIJKLMNNOPQSTUWXYZ[]^_`abcdefghijkllmnoppqrsstuvvwxxyyz{{||}}~~~~}}||{{zzyxxwvvuttsrqqponmllkjihgfedcb`_^]\[YXWUTRQONLKIGECA?=;9641.+($! fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff !$&(*,.0134678:;<=?@ABCDEFGHIIJKLMNNOPQRTUVWYZ[\]^_`abcdefghijklmmnopqqrsstuvvwwxyyzz{{|}}~~~~~}}||{zzyyxxwvvuttsrqqponmmlkjihgfedcba`_^][ZYXVUSRQONLJIGECA?=;9641.+(%! ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff "$')+,.0134679:;<>?@ABCDEFGHIIJKLMMNOPPRSUVWXYZ\]^_`abcdefghiijklmnnopqqrsstuuvwwxxyzz{{||}}~~~~~}}||{{zzyxxwwvuutssrqqponnmlkjihhgfedcba_^]\[ZXWVTSRPOMLJHGECA?=;9641/,)%" fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff  #%')+-.0235679:;=>?@ABCDEFGHIIJKLMMNOPPRSTUWXYZ[\]^_`abcdefghijjklmnnopqqrsstuuvvwxxyyzz{{||}}~~~~~~}}||{{zzyyxxwvvuutssrqqponnmlkjjihgfedcba`_^]\ZYXWUTSQPNMKJHFECA?=;9641/,)&" +fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff!#%')+-/0235689:;=>?@ABCDEFGHIIJKLMMNOOPQRTUVWXY[\]^_`abcdeefghijkklmnnoppqrrsttuvvwwxxyyzz{{||}}}~~~~~~}}}||{{zzyyxxwwvvuttssrqqponnmlkkjihgfedcba`_^]\[ZYWVUTRQONLKIHFDCA?=;8641/,)&" ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +!$&(*,-/1245689:;=>?@ABCDEFGHHIJKLLMNOOPQRSTVWXYZ[\]^_`abcdefgghijkklmnnoppqrrsttuuvvwwxxyyzz{{|||}}}~~~~~~}}}|||{{zzyyxxwwvvuuttsrrqpponnmlkkjihgffedcba`_^]\ZYXWVTSRPONLKIGFDB@>=:8641/,)&# ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff "$&(*,./1245789:<=>?@ABCDEFGHHIJKLLMNNOPPQSTUVWXY[\]^_``abcdefgghijkklmmnoppqqrssttuuvvwwxxyyzzz{{|||}}}~~~~~~}}}|||{{{zzyyxxwwvvuuttssrqqpponnmlkkjihggfedcba`_^]\[ZYXVUTSQPOMLJIGEDB@><:8641/,)&#fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff  "$&(*,./1245789:<=>?@ABCDEFGGHIJKKLMNNOPPQRSTVWXYZ[\]^_`abccdefghhijkklmmnoopqqrrssttuuvvwwxxyyyzz{{{|||}}}}~~~~~~~~}}}}|||{{{zzyyyxxwwvvvuttssrrqqpoonmmlkkjihggfedcba`_^]\[ZYXWVUSRQONMKJHGECB@><:8631/,)&# +fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff "%')+,.01345789:<=>?@ABCDEFFGHIJJKLMMNOOPQRRTUVWXYZ[\]^_`abcddefgghijjkllmnnoppqqrrssttuuvvwwxxxyyyzzz{{{||||}}}}~~~~~~~~~~~~~~}}}}||||{{{zzzyyyxxxwwvvuutttsrrqqpponnmllkjjihggfedcbba`_^]\[ZYWVUTSQPOMLKIHFDCA?><:8531.,)&#  ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff  #%')+,.01345789:<=>?@ABCDEEFGHIJJKLLMNOOPPQRSTUWXYZ[\]]^_`abcddefgghijjkllmmnooppqqrrssttuuvvvwwxxxyyyzzzz{{{{|||||}}}}}}}}~~~~~~~~~~~~~~~~~~}}}}}}}}|||||{{{{zzzzyyyxxxwwwvvuuttsssrqqppoonmmllkjjihggfedccba`_^]\[ZYXWVTSRQPNMLJIGFDBA?=;97531.,)&#  ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +!#%')+-.01345789:<=>?@ABCDDEFGHIIJKLLMNNOPPQRSTUVWXYZ[\]^__`abcddefgghiijkklmmnnooppqqrrssttuuuvvwwwxxxxyyyyzzzz{{{{{{||||||||||||||||||||||||||||{{{{{{zzzzyyyyxxxxwwwvvuuuttssrrqqppoonnmmlkkjiihgffedccba`_^]\[ZYXWVUTSQPONLKJHGEDB@>=;97530.+)&#  ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff !#%')+-.01345789:;=>?@ABCCDEFGHHIJKKLMMNOOPPQRSTUVWXYZ[\]^__`abccdeffghhijjkllmmnnooppqqrrsssttuuuvvvwwwwxxxxyyyyyzzzzzzz{{{{{{{{{{{{{{{{{{{{zzzzzzzyyyyyxxxxwwwwvvvuuutttssrrqqppoonnmmllkjjihhgffedcbba`_^]\[[ZYWVUTSRQPNMLJIHFECA@><:86420.+(&# fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff !#&()+-.01345789:;<>?@AABCDEFGGHIJJKLLMNNOPPQQRSTUVWXYZ[\]^__`abccdeefgghiijkkllmmnnooppqqrrrssstttuuuvvvwwwwwxxxxxxyyyyyyyyyyyyzzzzyyyyyyyyyyyyxxxxxxwwwwwvvvuuuuttsssrrrqqppoonnmmllkkjiihggfeedcbba`_^]]\[ZYXWVUTRQPONLKJHGEDBA?=<:86420-+(%" fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff !$&()+-.01345789:;<=>?@ABCDEFFGHIIJKKLMMNOOPPQQRTUVWXYYZ[\]^__`abbcdeefgghhijjkkllmmnnoopppqqrrrsssttttuuuuvvvvvwwwwwwwxxxxxxxxxxxxxxxxxxxxwwwwwwwvvvvvuuuuttttsssrrrqqpppoonnmmllkkjjihhgffeddcbaa`_^]]\[ZYXWVUTSRPONMLJIHFECB@?=;97631/-*(%" +fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"$&()+-.01345789:;<=>?@ABCDEEFGHHIJKKLMMNNOOPQQRSTUVWXYYZ[\]^^_`aabcddeffgghiijjkkllmmnnnoopppqqqrrrssssttttuuuuuuvvvvvvvvvvvvvwwvvvvvvvvvvvvvuuuuuuttttssssrrrqqqpppoonnnmmllkkjjihhggfeedccbaa`_^]]\[ZYXWVUTSRQPOMLKJHGFDCA@><;97531/,*'%" ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"$&(*+-.01345689:;<=>?@ABCCDEFGGHIJJKLLMMNOOPPQQRRSUVWXYYZ[\]^^_``abccddeffgghiijjkklllmmnnnooppppqqqrrrrssssstttttttuuuuuuuuuuuuuuuuuuuutttttttsssssrrrrqqqppppoonnnmmllkkkjjiihggffeddcbba``_^]\\[ZYXWVUTSRQPONMKJIHFECB@?=<:86420.,*'$" ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff "$&(*+-.01345689:;<=>?@ABBCDEFFGHIIJKKLLMNNOOPPQQRRTUVWXYYZ[\]]^_``abbccdeeffgghhiijjkklllmmnnnoooppppqqqqqrrrrrrssssssssssssssssssssssssssrrrrrrqqqqqpppoooonnnmmlllkkjjiihhggffeedccbaa`__^]\[[ZYXWVUTSRQPONMLKIHGEDCA@>=;986420.+)'$! ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff  "$&()+-.01245678:;<=>?@@ABCDEEFGHHIJJKKLMMNNOOPPQQRSTUVWXXYZ[\\]^^_``abbcddeeffgghhiijjjkklllmmmnnnnoooopppppqqqqqqqqrrrrrrrrrrrrrrrrqqqqqqqqpppppoooonnnnmmmlllkkjjjiihhggffeedccbba``_^^]\[ZZYXWVUTSRQPONMLKJIGFECB@?=<:97531/-+(&#! ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff + "$&()+-.012456789:;<=>?@ABCCDEFFGHIIJJKLLMMNNOOPPQQRSTUVWWXYZ[[\]]^__`aabbcddeeffgghhhiijjjkkklllmmmmnnnnnooooooppppppppppppppppppppppppoooooonnnnnmmmmlllkkkjjjiihhgggffeedccbbaa`__^]\\[ZYYXWVUTSRRQPNMLKJIHFEDBA@>=;:86421.,*(%#  ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff + "$&()+,./12356789:;<=>?@ABBCDEEFGHHIIJKKLLMNNOOPPPQQRSTUVVWXYZZ[\\]^^_``aabbccddeeffgghhhiiijjjkkkkllllmmmmmnnnnnnnnnnoooooooooonnnnnnnnnnmmmmmllllkkkkjjjiiihhgggffeeddccbbaa`__^]]\[[ZYXXWVUTSRQQPONLKJIHGFDCB@?=<:975420.,)'%" ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +"$&')+,./12346789:;<=>?@@ABCDDEFFGHHIJJKKLMMNNOOPPPQQRSTUUVWXXYZ[[\]]^^_``aabbccddeeeffggghhhiiijjjjkkkkklllllllmmmmmmmmmmmmmmmmmmmmlllllllkkkkkjjjjiiihhhgggffeeeddccbbaa`__^^]\\[ZZYXWWVUTSRQPPONMKJIHGFECBA?>=;986531/-+)&$! ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +"$%')+,./02345679:;<<=>?@ABBCDEEFGGHIIJJKLLMMNNOOOPPQQRSTTUVWWXYYZ[[\]]^^__`aaabbccddeeefffggghhhhiiiijjjjjjkkkkkkkkkkkkkkkkkkkkkkkkkkjjjjjjiiiihhhhgggfffeedddccbbaa``__^^]\\[ZZYXXWVUUTSRQPONNMLJIHGFEDBA@>=<:975420.,*(&#  ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +!#%')*,-/013456789:;<=>?@@ABCDDEFFGHHIIJKKLLMMNNNOOPPQQQSSTUVVWXXYZZ[[\]]^^__``aabbbccdddeeeffffgggghhhhhiiiiiiiiijjjjjjjjjjjjiiiiiiiiihhhhhggggffffeeedddccbbaaa``__^^]\\[[ZYYXWWVUTTSRQPONMLKJIHGFEDCA@?><;986531/-+)'%#  ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +!#%'(*,-.012356789:;<=>>?@ABBCDEEFFGHHIIJKKLLMMNNNOOPPPQQRRTTUVVWXXYZZ[[\\]]^^__``aaabbcccddddeeefffffggggggghhhhhhhhhhhhhhhhhhhhgggggggffffeeeeddddcccbbaaa``__^^]]\\[[ZYYXWWVUUTSRRQPONMLKJIHGFEDCB@?>=;:875420.,+(&$! ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +!#%&(*+-./12345689::;<=>?@@ABCCDEEFGGHHIJJKKLLMMMNNOOOPPQQQSSTUUVWWXXYZZ[[\\]]^^^__```aabbbbcccdddddeeeeeeffffffffffffffffffffffffeeeeeeddddccccbbbaaa```__^^]]\\[[ZZYYXWWVVUTSSRQPPONMLKJIHGFEDCBA?>=<:976431/-,*(%#! ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff !#$&()+,./023456789:;<=>>?@AABCDDEFFGGHHIJJKKKLLMMNNNOOPPPQQRSSTUUVWWXXYYZZ[[\\]]^^^___```aaabbbbbcccccdddddddddddeeeeeedddddddddddcccccbbbbaaaa```___^^]]]\\[[ZZYYXWWVVUTTSRQQPONNMLKJIHGFEDCBA@>=<:9865320.,+)'$"! ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff  "$&')+,-/012456789:;;<=>??@ABBCDDEFFGGHHIIJJKKLLMMMNNOOOPPPQQRSSTUUVVWWXYYYZZ[[\\\]]^^^____````aaaaabbbbbbbbccccccccccccccbbbbbbbbaaaaa````___^^^]]]\\\[[ZZYYXXWWVUUTTSRRQPOONMLLKJIHGFEDCBA@>=<;9875421/-+*(&#"  ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff "$%')*,-.0123456789:;<==>?@@ABCCDDEFFGGHHIIJJKKLLLMMNNNOOOPPPPRRSSTUUVVWWXXYYYZZ[[[\\\]]]^^^^____```````aaaaaaaaaaaaaaaaaaa```````_____^^^^]]]\\\[[[ZZYYXXWWVVUUTTSRRQPPONMMLKJIIHGFEDCBA@>=<;:875431/.,*(&$#"  ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff!#%'(*+-./023456789::;<=>>?@AABCCDDEFFGGHHIIJJKKKLLMMMNNNOOOPPPQQRSSTTUUVVWWXXXYYZZZ[[[\\\\]]]]]^^^^^^______________________^^^^^^]]]]]\\\[[[ZZZYYYXXWWVVUUTTSSRRQPPONNMLKKJIHGFEEDCBA?>=<;:8764310.-+)'%$#!  +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff !#%&()+,-/0123456789:;<<=>??@AABCCDDEFFGGHHIIIJJKKLLLMMMNNNNOOOPPQQRRSSTTUUVVWWWXXXYYYZZZ[[[[[\\\\\]]]]]]]]]]]]]]]]]]]]]]]]]\\\\\\[[[[ZZZZYYYXXWWWVVUUTTSSRRQQPPONNMLLKJIHHGFEDCBA@?>=<;:8765320/-+*(&%$"! +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff  "$&')*,-./0234567899:;<==>??@AABCCDDEEFGGGHHIIJJJKKLLLMMMMNNNOOOOPPQQRRSSTTUUUVVVWWWXXXYYYYZZZZZZ[[[[[[[[[[[\\\[[[[[[[[[[[[ZZZZZYYYYXXXXWWWVVVUUTTSSSRRQPPOONNMLLKJIIHGFEEDCBA@?>=<;:8765320/-**)'&%#"! ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff  "#%'(*+,./0123456789::;<==>?@@AABCCDDEEFFGGHHIIIJJJKKLLLLMMMNNNNNOOOPPQQRRSSSTTUUUVVVVWWWWXXXXXYYYYYYYYYZZZZZZZZZYYYYYYYYYYXXXXXWWWWVVVUUUTTTSSRRQQPPOONNMMLKKJIIHGFFEDCBAA@?>=<:98765321/.,+)('%$#"  ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff !#%&()*,-./0234566789:;;<=>>?@@AABCCDDEEFFGGGHHIIIJJJKKKLLLLMMMMNNNNNOOPPQQQRRSSSTTTTUUUVVVVVWWWWWWWWWXXXXXXXXXXXXWWWWWWWWVVVVVUUUUTTTSSSRRRQQPPOONNMMLLKKJIIHGGFEDCCBA@?>=<;:98764321/.,+*)'&%$"!  ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff  "$&'(*+,./01234567889:;;<=>>?@@AABBCCDDEEFFGGGHHIIIJJJKKKKLLLLMMMMMNNNNNOOOPQQQRRRSSSSTTTTTUUUUUUUUVVVVVVVVVVVVVUUUUUUUUTTTTTSSSSRRRQQQPPPOONNMMLLKKJJIHHGFFEDDCBA@@?>=<;:98754321/.,+*)('&%#"! ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff  "#%&()*,-./01234567899:;<<=>>??@AABBCCDDEEFFFGGGHHIIIIJJJKKKKLLLLLMMMMMMMNNNOOPPPQQQQRRRRRSSSSSSSSTTTTTTTTTTTTTTSSSSSSSRRRRRQQQQPPPOOONNMMMLLKKJJIIHGGFFEDDCBAA@?>=<;:987654320/.-,+*)(&%$#!  ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +!"$&'(*+,-/012344567899:;<<==>??@@AABBCCDDEEFFFGGGHHHIIIIJJJJKKKKKLLLLLLMMMMMNNNNOOOPPPPPQQQQQQQQRRRRRRRRRRRRRQQQQQQQQPPPPPOOOONNNMMMLLKKKJJIIHHGFFEEDCCBAA@?>=<<;:987654310/.-,+*)('&%#"! ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff "#%&()*,-./012345567899:;;<==>??@@AABBCCDDDEEEFFGGGGHHHIIIIJJJJJKKKKKKKLLLLLLLLLMMMNNNNOOOOOOOOPPPPPPPPPPPPPOOOOOOOONNNNNMMMLLLLKKJJJIIHHGGFFEEDDCBBA@@?>==<;:9876543210/.-,,+*)'&%$#"  ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff !#$&'(*+,-./012345667899:;;<==>>??@@AABBCCDDDEEEFFFGGGGHHHHIIIIIJJJJJJJKKKKKKKKKKKKLLLLMMMMMMMMNNNNNNNNNNNMMMMMMMMLLLLLKKKKJJJIIIHHGGGFFEEDDCCBAA@??>==<;:98876543210/..-,+*)('&%#"!  fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff + "#%&')*+,-./012345667899:;;<<==>??@@AAABBCCCDDDEEEFFFGGGGHHHHHHIIIIIIIJJJJJJJJJJJJJJJJJKKKKKKKKLLLLLLLKKKKKKKKKJJJJJIIIIHHHHGGFFFEEDDCCBBAA@@?>>=<<;:9887654332100/.-,+*)('&%$#!  ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff !"$%'()*+-./0012345667889::;<<==>>??@@AAABBCCCDDDEEEEFFFFGGGGGHHHHHHHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHHHHHGGGGFFFEEEDDCCCBBAA@@?>>==<:;:98876554332100/.-,++*)('%$#"! +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff  !#$&'()+,-./01123455678899:;;<<==>>??@@@AABBBCCCDDDDEEEEFFFFFFGGGGGGGGHHHHHHHHHHHHHHHHHHHHHGGGGGGGGFGGGGGGFFFFFFEEEEDDDBCCBBBAA@@??>>==;;;:9988766554332100/.-,,+*)('&%$"!  ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff  "#%&'(*+,-./01123455677899::;;<<==>>??@@@AAABBBCCCCDDDDEEEEEEFFFFFFFFFGGGGGGGGGGGGGGGGGFFFFFFFFFEEEEEEDDDDDDCCCBCBABAAA@@@??>>==<<;;::99887766544332100/.--,+*)('&%$#"  ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff !"$%&')*+,-./001234456678899::;;<<==>>???@@@AAABBBBCCCCDDDDDDEEEEEEEEEEEFFFFFFFFFFFEEEEEEEEEEEDDDDDDCCCCCBBBBAAAA@@@???>>===<<;;;::99887765544322100/.--,+*)('&%$#"!  ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff  !#$%&()*+,-.//012334556778899::;;<<==>>>???@@@AAAABBBBBCCCCCCDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDCCCCCCBBBBBAAAA@@@@???>>>===<<;;;::998877665543322100/.--,+*)('&%$#"!  +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff + !#$%&()*+,-../0122344566778899::;;<<===>>>????@@@@AAAABBBBBBBCCCCCCCCCCCCCCCCCCCCCCCCCCBBBBBBBAAAAA@@@@????>>>===<<<;;;::998877665544332110//.-,,+*)(''&%#"!  ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff  "#$%&()*+,,-./01123345566778899::;;;<<===>>>>????@@@@@AAAAAAAABBBBBBBBBBBBBBBBBBBBAAAAAAAA@@@@@@????>>>>===<<<;;;:::9988777665543322100/..-,,+*)(''&%$#!  fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff  "#$%&')**+,-.//01223445566778899:::;;;<<<====>>>>?????@@@@@@@@@@AAAAAAAAAAAA@@@@@@@@@@??????>>>>>====<<<;;;:::999887776655443321100/..-,++*)('&&%$#!  ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff + "#$%&'()*+,-../0012234455667788899:::;;;<<<<=====>>>>>>???????????????????????????>>>>>>>====<<<<<;;;:::9998887766655443322100//.--,+**)('&%$$"!  ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff  !#$%&'()*+,,-.//011223345556677888999:::;;;;<<<<<========>>>>>>>>>>>>>>>>>>>>========<<<<<;;;;::::99988877766554443322100//..-,,+*))('&%$#"!  fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff  !"$%&'())*+,--.//01122334455666777888999::::;;;;;;<<<<<<<<<<<========<<<<<<<<<<<;;;;;;::::99998888777665554433222100//..-,,+**)(''&%$#"!  fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff  !"#$%&'()*++,--.//001223334455666777788899999:::::::;;;;;;;;;;;;;;;;;;;;;;;:::::::99998888877766655544433221100//..--,++*))('&%%$#"!  +fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff !"#$%&'(()*++,--.//0011223334455566667777888889999999999:::::::::::999999999988888777776665555443332221100//..--,++*))(''&%$#""!  +fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff  !"#$%&'(()*++,--..//0011222334444555666667777778888888888888888888888877777766666555544443332211100//..--,,++**)(('&%%$#"!  +fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff !"#$$%&'(()**+,,--..//00111222333444455555566666666667777777666666666665555554444333322211100///..--,,++*))(('&%%$#"!!  +fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff  !"#$%%&'(()**++,,--..//000111222233333444444455555555555555555544444443333322221111000//...--,,++**))(''&%%$##"!  fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +  !"#$$%&''())**++,,--...///000111112222223333333333333333333333322222211110000///...---,,++**))((''&%%$##"!  fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff  !"##$%&&''())**+++,,---...////0000011111111111111111111111111100000////....---,,+++**))((''&&%$$#""!  +fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff  !""#$$%&&''(())**+++,,,----.....////////00000000000/////////.....----,,,+++***))((''&&%%$##"!!  fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff  !""#$$%&&''((())***++++,,,,,-------.............--------,,,,,++++***)))(('''&&%%$##""!  +fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +  !""#$$%%&&&''((())))****++++++++,,,,,,,,,,,,++++++++*****))))(((''&&&%%$$##""!  ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +  !!"##$$$%%&&&''''(((())))))))**********))))))))(((((''''&&&%%%$$##""!!  ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +  !!""###$$$%%%&&&&&'''''''''''''''''''''''&&&&&%%%%$$$###""!!  ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff  !!!"""###$$$$$$%%%%%%%%%%%%%%%%%%$$$$$####"""!!!  +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff  !!!!"""""""""######""""""""!!!!!  fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff   +fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +  fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +  +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff  +fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +  + ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff + + + + + + + + + fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff \ No newline at end of file diff --git a/assets/test_scene2.json b/assets/test_scene2.json new file mode 100644 index 0000000..fd53f59 --- /dev/null +++ b/assets/test_scene2.json @@ -0,0 +1,38 @@ +{ + "geometry":[{ + "type":"rectangle", + "p1":[-2, 2, -4], + "p2":[-2, -2, -4], + "p3":[2, -2, -4], + "p4":[2, 2, -4], + + + "ac":[0,1,0], + "dc":[1,0,0], + "sc":[1,1,1], + + "ka":0.1, + "kd":1, + "ks":1, + + "pc":10 + + }], + "light":[{ + "type":"point", + "centre":[0, 0, 0], + "id":[1, 1, 1], + "is":[1, 1, 1] + }], + "output":[{ + "filename":"test_scene2.ppm", + "size":[500,500], + "lookat":[0,0,-1], + "up":[0,1,0], + "fov":90, + "centre":[0,0,0], + "ai":[1,1,1], + "bkc":[1,1,1] + } + ] +} diff --git a/assets/test_scene2.ppm b/assets/test_scene2.ppm new file mode 100644 index 0000000..9e70775 --- /dev/null +++ b/assets/test_scene2.ppm @@ -0,0 +1,4 @@ +P6 +500 500 +255 +;";"<"<#=#=$>$>%?%?&@&@'A'A(B(B)C)C*D*D+E+E,F,F-G-G.H.H/I/I0J0K1K2L2L3M3M4N4N5O5O6P6P7Q7R8R9S9S:T:T;U;UX>X?Y?Y@Z@ZA[A[B\B\C]C]D^D^E_E_F`F`GaGaHbHbIbIcIcJdJdKeKeKeLfLfMfMgMgNgNhNhOhOiOiOiPjPjPjQjQkQkQkQkRkRlRlRlRlSlSlSmSmSmSmSmSmTmTmTmTmTmTmTmTmTmTmTmTmTmTmSmSmSmSmSlSlSlSlRlRlRkRkRkQkQkQjQjQjPjPiPiOiOhOhOhNgNgNgMfMfMfLeLeKeKdKdJcJcIbIbIbHaHaG`G`F_F_E^E^D]D]C\C\B[B[AZAZ@Y@Y?X?X>W>W=V=V%>$=$=#<#<";";";"<"<#=#=$>$>%?%?&@&@'A'A(B(B)C)C*D*D+E+E,F,F-G-G.H/I/I0J0J1K1K2L2L3M3M4N4O5O6P6P7Q7Q8R8R9S9S:T:U;UX>X?Y?Y@Z@ZA[A[B\B\C]C]D^D^E_E_F`F`GaGaHbHbIcIcJdJdKdKeKeLfLfMfMgMgNhNhNhOiOiOiPjPjPjQkQkQkRkRlRlRlSlSmSmSmSmTmTmTnTnTnTnTnUnUnUnUnUnUoUoUoUoUoUoUoUoUnUnUnUnUnUnUnTnTnTnTmTmTmTmSmSmSlSlSlRlRkRkRkQkQjQjPjPiPiOiOhOhNhNgNgMfMfMfLeLeKdKdKdJcJcIbIbHaHaG`G`F_F_E^E^D]D]C\C\B[B[AZAZ@Y@Y?X?X>W>W=V=V%>$=$=#<#<";"<"<#=#=$>$>%?%?&@&@'A'A(B(B)C)C*D*D+E+E,F,G-G.H.H/I/I0J0J1K1K2L2M3M4N4N5O5O6P6P7Q7R8R9S9S:T:T;U;UX>X?Y?Y@Z@ZA[A[B\B\C]C^D^E_E_F`F`GaGaHbHbIbIcIcJdJdKeKeLfLfMfMgMgNhNhOhOiOiPjPjPjQkQkQkRlRlRlSlSmSmSmTmTnTnTnUnUnUoUoUoUoVoVoVoVpVpVpVpVpVpVpVpVpVpVpVpVpVpVpVpVpVpVoVoVoVoVoUoUoUnUnUnUnTnTmTmTmSmSlSlSlRlRkRkQkQjQjPjPiPiOhOhOhNgNgMfMfMfLeLeKdKdJcJcIbIbIbHaHaG`G`F_F_E^E^D]C\C\B[B[AZAZ@Y@Y?X?X>W>W=V%>$=$=#<#<"<#=#=$>$>%?%?&@&@'A'A(B(B)C)C*D*D+E+F,F-G-G.H.H/I/I0J0J1K2L2L3M3M4N4N5O5P6P7Q7Q8R8R9S9S:T;U;UX?Y?Y@Z@ZA[A[B\B\C]C]D^E_E_F`F`GaGaHbHbIcIcJdJdKeKeLeLfLfMgMgNhNhOiOiOiPjPjQjQkQkRlRlRlSmSmSmTmTnTnTnUnUoUoUoVoVpVpVpVpWpWpWqWqWqWqWqXqXqXqXqXqXqXqXqXqXqXqXqXqXqXqXqWqWqWqWpWpWpWpVpVpVoVoVoUoUnUnUnTnTmTmTmSmSlSlRlRkRkQjQjQjPiPiOiOhOhNgNgMfMfLeLeLeKdKdJcJcIbIbHaHaG`G`F_F_E^E]D]C\C\B[B[AZAZ@Y@Y?X?W>W=V=V%>$=$=#<#=#=$>$>%?%?&@&@'A'A(B(B)C)C*D*E+E,F,F-G-G.H.H/I/I0J1K1K2L2L3M3M4N4O5O6P6P7Q7Q8R9S9S:T:T;U;UX>X?Y?Z@ZA[A[B\B\C]C]D^D_E_F`F`GaGaHbHbIcIcJdJdKeKeLfLfMgMgNhNhOhOiOiPjPjQkQkQkRlRlSlSmSmTmTnTnUnUoUoVoVpVpVpWpWqWqWqWqXqXrXrXrXrXrYrYrYrYrYsYsYsYsYsYsYsYsYsYsYsYsYrYrYrYrYrYrXrXrXrXqXqXqWqWqWpWpWpVpVoVoVoUnUnUnTmTmTmSlSlSlRkRkQkQjQjPiPiOhOhOhNgNgMfMfLeLeKdKdJcJcIbIbHaHaG`G`F_F_E^D]D]C\C\B[B[AZAZ@Y?X?X>W>W=V=U%>$=$=#=$>$>%?%?&@&@'A'A(B(B)C)C*D+E+E,F,F-G-G.H.H/I/J0J1K1K2L2L3M3N4N5O5O6P6P7Q8R8R9S9S:T;U;UX?Y?Y@Z@ZA[B\B\C]C]D^D^E_F`F`GaGaHbHbIcIcJdJdKeKeLfLfMgMgNhNhOiOiPjPjQkQkQkRlRlSmSmTmTnTnUnUoUoVoVpVpWpWqWqWqXqXrXrXrYrYsYsYsYsZsZsZsZtZtZtZtZtZt[t[t[t[t[t[t[t[t[t[tZtZtZtZtZsZsZsZsZsYsYsYrYrYrXrXqXqXqWqWpWpWpVoVoVoUnUnUnTmTmTmSlSlRkRkQkQjQjPiPiOhOhNgNgMfMfLeLeKdKdJcJcIbIbHaHaG`G`F_F^E^D]D]C\C\B[BZAZ@Y@Y?X?X>W=V=V%>$=$>$>%?%?&@&@'A'A(B(B)C)D*D+E+E,F,F-G-G.H.I/I0J0J1K1K2L2M3M4N4N5O5O6P7Q7Q8R8R9S:T:T;U;UX>X?Y@Z@ZA[A[B\B]C]D^D^E_E_F`GaGaHbHbIcIcJdJdKeKfLfMgMgNhNhOiOiPjPjPjQkQkRlRlSmSmTnTnTnUoUoVoVpVpWpWqWqXqXrXrYrYsYsYsZsZtZtZtZt[t[t[u[u[u[u\u\u\u\u\u\u\v\v\v\v\v\v\u\u\u\u\u\u\u\u[u[u[t[t[t[tZtZtZsZsZsYsYrYrYrXqXqXqWpWpWpVoVoVoUnUnTnTmTmSlSlRkRkQjQjPjPiPiOhOhNgNgMfMfLeKdKdJcJcIbIbHaHaG`G_F_E^E^D]D]C\B[B[AZAZ@Y@X?X>W>W=V=U%>$>%?%?&@&@'A'A(B(B)C*D*D+E+E,F,F-G-G.H/I/I0J0J1K1K2L3M3M4N4N5O6P6P7Q7Q8R9S9S:T:T;UX?Y?Y@Z@[A[B\B\C]C^D^E_E_F`FaGaHbHbIcIcJdJdKeLfLfMgMgNhNhOiOiPjPjQkQkRlRlSmSmTnTnTnUoUoVpVpWpWqWqXqXrXrYrYsYsZsZtZtZt[t[u[u[u\u\v\v\v\v]v]v]v]w]w]w]w]w]w]w]w]w^w^w]w]w]w]w]w]w]w]v]v]v]v]v\v\v\u\u\u[u[t[t[tZtZsZsZsYrYrYrXqXqXqWpWpWpVoVoUnUnTnTmTmSlSlRkRkQjQjPiPiOhOhNgNgMfMfLeLdKdJcJcIbIbHaHaG`F_F_E^E^D]C\C\B[B[AZ@Y@Y?X?X>W=V=V%?%?&@&@'A'A(B(B)C*D*D+E+E,F,F-G-G.H/I/I0J0J1K1L2L3M3M4N4O5O6P6P7Q8R8R9S9S:T;U;UX>X?Y@Z@ZA[A\B\C]C]D^D_E_F`F`GaGbHbIcIcJdJdKeLfLfMgMgNhNhOiOiPjPjQkQkRlRlSmSmTnTnUoUoVpVpWqWqWqXrXrYrYsYsZtZtZt[t[u[u\u\v\v\v]v]w]w]w]w^w^w^x^x^x^x_x_x_x_x_x_x_x_x_x_x_x_x_x_x_x_x_x_x^x^x^w^w^w^w]w]w]v]v]v\v\u\u\u[t[t[tZtZsZsYrYrYrXqXqWqWpWpVoVoUnUnTmTmSlSlRkRkQjQjPiPiOhOhNgNgMfMfLeLdKdJcJcIbIbHaG`G`F_F_E^D]D]C\C\B[AZAZ@Y@X?X>W>W=VX?Y?Y@Z@[A[B\B\C]D^D^E_E`F`GaGaHbIcIcJdJdKeKfLfMgMgNhNhOiOjPjQkQkRlRlSmSmTnTnUoUoVpVpWqWqWqXrXrYsYsZsZtZt[u[u[u\v\v\v]v]w]w^w^x^x^x^x_x_y_y_y_y`y`y`y`z`z`z`z`z`z`z`z`z`z`z`z`z`z`z`z`y`y`y`y`y_y_y_x_x_x^x^x^w^w^w]v]v]v\v\u\u[u[t[tZsZsZsYrYrXqXqWqWpWpVoVoUnUnTmTmSlSlRkRkQjQjPiOhOhNgNgMfMfLeKdKdJcJcIbIaHaG`G`F_E^E^D]D\C\B[B[AZ@Y@Y?X?W>W=V=VX>X?Y?Z@ZA[A\B\C]C]D^E_E_F`FaGaHbHbIcJdJdKeKeLfMgMgNhNhOiPjPjQkQkRlRlSmSmTnTnUoUoVpVpWqWqXrXrYsYsZtZt[t[u[u\v\v\v]w]w]w^x^x^x_x_y_y_y`y`z`z`zazaza{a{a{a{a{b{b{b{b{b{b{b{b{b{b{b{b{b{b{b{b{a{a{a{azazazaz`z`y`y`y_y_x_x_x^x^w^w]w]v]v\v\u\u[t[t[tZsZsYrYrXqXqWpWpVoVoUnUnTmTmSlSlRkRkQjQjPiPhOhNgNgMfMeLeKdKdJcJbIbHaHaG`F_F_E^E]D]C\C\B[AZAZ@Y?X?X>W>V=VX>Y?Y@Z@ZA[B\B\C]D^D^E_F`F`GaGbHbIcIdJdKeKeLfLgMgNhNhOiPjPjQkQkRlRlSmTnTnUoUoVpVpWqWqXrXrYsYsZtZt[u[u[u\v\v]w]w]w^x^x_x_y_y`y`z`z`zaza{a{a{b{b|b|b|b|c|c|c|c}c}c}c}c}c}c}c}c}c}c}c}c}c}c}c}c|c|c|c|c|b|b|b{b{b{a{azazaz`z`y`y`y_x_x_x^w^w]w]v]v\u\u[u[t[tZsZsYrYrXqXqWpWpVoVoUnUnTmTlSlRkRkQjQjPiPhOhNgNgMfLeLeKdKdJcIbIbHaG`G`F_F^E^D]D\C\B[BZAZ@Y@Y?X>W>W=VX?Y?Y@ZA[A[B\C]C]D^E_E_F`GaGaHbHcIcJdJeKeLfLfMgNhNhOiOjPjQkQkRlRmSmTnTnUoUoVpVpWqXrXrYsYsZtZt[u[u[u\v\v]w]w^x^x^x_y_y`y`z`zaza{a{b{b|b|b|c|c}c}c}d}d}d~d~d~d~d~e~e~e~e~e~e~e~e~e~e~e~e~e~e~e~e~d~d~d~d}d}d}d}c}c|c|c|b|b{b{b{azazaz`y`y`y_x_x^x^w^w]v]v\u\u[u[t[tZsZsYrYrXqXpWpVoVoUnUnTmTmSlRkRkQjQjPiOhOhNgNfMfLeLeKdJcJcIbHaHaG`G_F_E^E]D]C\C[B[AZAY@Y?X?W>W=V=UX?Y?Z@ZA[A\B\C]C^D^E_F`F`GaHbHbIcJdJdKeKfLfMgMhNhOiOiPjQkQkRlRmSmTnTnUoUpVpWqWqXrXrYsYsZtZt[u[u\v\v]w]w^x^x_y_y_y`z`za{a{a{b|b|b|c}c}c}d}d~d~d~e~eeeeffffffffffffffffffffffffeee~e~e~d~d}d}d}c}c|c|b|b{b{a{azaz`y`y_y_x_x^w^w]v]v\u\u[t[tZsZsYrYrXqXqWpWpVoUnUnTmTmSlRkRkQjQiPiOhOhNgMfMfLeKdKdJcJbIbHaH`G`F_F^E^D]C\C\B[AZAZ@Y?X?X>W=V=VX>X?Y@Z@[A[B\B]C]D^D_E_F`FaGaHbIcIcJdKeKeLfMgMgNhOiOiPjPkQkRlRmSmTnTnUoUpVpWqWqXrXrYsZtZt[u[u\v\v]w]w^x^x_y_y`z`z`za{a{b|b|b|c}c}d}d~d~e~eeeffffggggggghhhhhhhhhhhhhhhhgggggggffffee~e~e~d}d}d}c|c|b|b{b{azaz`z`y`y_x_x^w^w]v]v\u\u[t[tZsZrYrXqXqWpWpVoUnUnTmTmSlRkRkQjPiPiOhOgNgMfMeLeKdKcJcIbIaHaG`F_F_E^D]D]C\B[B[AZ@Y@X?X>W>V=VX>Y?Y@ZA[A[B\C]C]D^E_E`F`GaGbHbIcJdJdKeLfLfMgNhNhOiPjPjQkRlRlSmTnTnUoUpVpWqWqXrYsYsZtZt[u[u\v\w]w^x^x_y_y`z`za{a{a{b|b|c}c}d}d~d~eeefffgggghhhhhiiiiiiiiiijjjjiiiiiiiiiihhhhhggggfffee~e~d}d}d}c|c|b{b{a{azaz`y`y_x_x^w^w]v\u\u[t[tZsZsYrYqXqWpWpVoUnUnTmTlSlRkRjQjPiPhOhNgNfMfLeLdKdJcJbIbHaG`G`F_E^E]D]C\C[B[AZAY@Y?X>W>W=VX?Y?Y@ZA[A\B\C]C^D^E_F`FaGaHbHcIcJdKeKeLfMgMhNhOiOjPjQkQlRlSmSnTnUoUpVpWqWqXrYsYsZtZt[u\v\v]w]w^x^x_y_y`z`za{a{b|b|c}c}d~d~eeeffggghhhhiiiijjjjjjkkkkkkkkkkkkkkkkkkjjjjjjiiiihhhhgggffee~e~d}d}c|c|b{b{azaz`y`y_x_x^w^w]v]v\u\t[tZsZsYrYqXqWpWpVoUnUnTmSlSlRkQjQjPiOhOhNgMfMeLeKdKcJcIbHaHaG`F_F^E^D]C\C\B[AZAY@Y?X?W>W=VX?Y?Z@ZA[B\B\C]D^D_E_F`GaGaHbIcIdJdKeLfLfMgNhNiOiPjPkQkRlSmSmTnUoUoVpWqWqXrYsYsZtZu[u\v\v]w]x^x_y_y`z`za{a{b|b|c}c}d~d~eefffgghhhiiijjjjkkkkllllllllmmmmmmmmmmllllllllkkkkjjjjiiihhhggfffe~e~d}d}c|c|b{b{azaz`y`y_x_x^w]v]v\u\u[tZsZsYrYqXqWpWoVoUnUmTmSlSkRkQjPiPiOhNgNfMfLeLdKdJcIbIaHaG`G_F_E^D]D\C\B[BZAZ@Y?X?W>W=V=UX?Y@Z@ZA[B\B]C]D^E_E`F`GaHbHbIcJdJeKeLfMgMhNhOiOjPjQkRlRmSmTnToUoVpVqWqXrXsYsZtZu[u\v\v]w^x^x_y_y`za{a{b|b|c}c}d~d~eeffgghhhiijjjkkkkllllmmmmmnnnnnnnnnnnnnnnnnnnnmmmmmllllkkkkjjjiihhhggffe~e~d}d}c|c|b{b{azay`y_x_x^w^v]v\u\u[tZsZsYrXqXqWpVoVoUnTmTmSlRkRjQjPiOhOhNgMfMeLeKdJcJbIbHaH`G`F_E^E]D]C\B[BZAZ@Y@X?X>W=V=UX?Y@Z@[A[B\C]C^D^E_F`F`GaHbHcIcJdKeKfLfMgNhNiOiPjQkQlRlSmSnTnUoVpVpWqXrXsYsZtZu[u\v\w]w^x^x_y`z`za{a{b|b}c}d~d~eeffgghhiiijjkkklllmmmnnnnnooooooppppppppppppppoooooonnnnnmmmlllkkkjjiiihhggffe~e~d}d}c|b{b{azaz`y`x_x^w^w]v\u\u[tZsZsYrXqXpWpVoVnUnTmSlSlRkQjQiPiOhNgNfMfLeKdKcJcIbHaH`G`F_F^E^D]C\C[B[AZ@Y@X?X>W=V=VX>X?Y@Z@[A[B\C]C^D^E_F`FaGaHbIcIdJdKeLfLgMgNhOiOjPjQkRlRmSmTnUoUpVpWqWrXrYsZtZt[u\v\v]w^x^x_y`z`za{a|b|c}c}d~deffgghhiijjkkkllmmmnnnoooopppppqqqqqqqqqqqqqqqqqqqqqqpppppoooonnnmmmllkkkjjiihhggffe~d}d}c|c|b{azaz`y`x_x^w^v]v\u\t[tZsZrYrXqWpWpVoUnUmTmSlRkRjQjPiOhOgNgMfLeLdKdJcIbIaHaG`F_F^E^D]C\C[B[AZ@Y@X?X>W>V=VX>Y?Y@ZA[A\B\C]D^D_E_F`GaGbHbIcJdJeKeLfMgMhNhOiPjPkQkRlSmTnTnUoVpVqWqXrYsYtZt[u\v\v]w^x^x_y`z`za{b|b|c}c~d~eeffghhiijjkklllmmnnnooppppqqqqrrrrrssssssssssssssssssrrrrrqqqqppppoonnnmmlllkkjjiihhgffe~e~d}c|c|b{bzaz`y`x_x^w^v]v\u\t[tZsYrYqXqWpVoVnUnTmTlSkRkQjPiPhOhNgMfMeLeKdJcJbIbHaG`G_F_E^D]D\C\B[AZAY@Y?X>W>V=VX>Y?Y@ZA[A\B\C]D^D_E_F`GaGbHcIcJdKeKfLfMgNhNiOjPjQkRlRmSmTnUoUpVpWqXrXsYsZt[u[v\v]w]x^x_y`z`za{b|b|c}d~d~eefgghhijjkkllmmnnnoopppqqqrrrsssstttttttuuuuuuuuuuuutttttttssssrrrqqqpppoonnnmmllkkjjihhggfe~e~d}d|c|b{bzaz`y`x_x^w]v]v\u[t[sZsYrXqXpWpVoUnUmTmSlRkRjQjPiOhNgNfMfLeKdKcJcIbHaG`G_F_E^D]D\C\B[AZAY@Y?X>W>V=VX>Y?Y@ZA[A\B\C]D^D_E`F`GaHbHcIcJdKeLfLgMgNhOiOjPkQkRlSmSnTnUoVpWqWrXrYsZtZu[u\v]w]x^x_y_z`za{b|b|c}d~d~effgghiijjkllmmnnoopppqqrrrsssttttuuuuvvvvvvvvvvvvvvvvvvvvvvuuuuttttsssrrrqqpppoonnmmllkjjiihggff~e~d}d|c|b{bzaz`y_x_x^w]v]u\u[tZsZrYrXqWpWoVnUnTmSlSkRkQjPiOhOgNgMfLeLdKcJcIbHaH`G`F_E^D]D\C\B[AZAY@Y?X>W>V=VX>Y?Y@ZA[A\B]C]D^E_E`F`GaHbIcIdJdKeLfMgMhNhOiPjQkQlRlSmTnUoUpVpWqXrXsYsZt[u\v\w]w^x_y_z`za{a|b|c}d~d~effghhijjkkllmnnooppqqrrrsstttuuuvvvvwwwwwwxxxxxxxxxxxxxxxxwwwwwwvvvvuuutttssrrrqqppoonnmllkkjjihhgff~e~d}d|c|b{azaz`y_x_w^w]v\u\t[sZsYrXqXpWpVoUnUmTlSlRkQjQiPhOhNgMfMeLdKdJcIbIaH`G`F_E^E]D]C\B[AZAY@Y?X>W>V=VX>Y?Y@ZA[A\B]C]D^E_E`FaGaHbIcIdJeKeLfMgNhNiOiPjQkRlRmSmTnUoVpVqWrXrYsZtZu[u\v]w^x^y_y`za{a|b|c}c~d~effghhijjkllmmnooppqqrrsstttuuvvvwwwwxxxxyyyyyyyzzzzzzzzzzyyyyyyyxxxxwwwwvvvuutttssrrqqppoonmmllkjjihhgff~e~d}c|c|b{azay`y_x^w^v]u\u[tZsZrYrXqWpVoVnUmTmSlRkRjQiPiOhNgNfMeLeKdJcIbIaHaG`F_E^E]D]C\B[AZAY@Y?X>W>V=VX>Y?Y@ZA[A\B]C]D^E_E`FaGaHbIcJdJeKfLfMgNhNiOjPjQkRlSmSnToUoVpWqXrXsYsZt[u\v\w]w^x_y`z`{a{b|c}c~d~effghhijjkllmnnoopqqrrssttuuvvvwwxxxyyyyzzzzz{{{{{{{{{{{{{{{{{{{{zzzzzyyyyxxxwwvvvuuttssrrqqpoonnmllkjjihhgff~e~d}c|c{b{az`y`x_w^w]v\u\t[sZsYrXqXpWoVoUnTmSlSkRjQjPiOhNgNfMfLeKdJcJbIaHaG`F_E^E]D]C\B[AZAY@Y?X>W>V=VX>Y?Y@ZA[A\B]C]D^E_F`FaGaHbIcJdJeKfLfMgNhOiOjPkQkRlSmTnToUpVpWqXrYsYtZu[u\v]w^x^y_y`za{b|b}c}d~eefghhijjklmmnnoppqrrssttuuvvwwxxxyyzzzz{{{|||||}}}}}}}}}}}}}}}}}}|||||{{{zzzzyyxxxwwvvuuttssrrqpponnmmlkjjihhgfe~e}d}c|b{bzay`y_x^w^v]u\u[tZsYrYqXpWpVoUnTmTlSkRkQjPiOhOgNfMfLeKdJcJbIaHaG`F_F^E]D]C\B[AZAY@Y?X>W>V=UY?Y@ZA[A\B]C]D^E_F`FaGbHbIcJdKeKfLgMgNhOiPjPkQlRmSmTnUoVpVqWrXrYsZt[u[v\w]w^x_y`z`{a|b|c}d~defgghijjklmmnoopqqrrsttuuvvwwxxyyzzz{{||||}}}}~~~~~~~~~~~~}}}}||||{{zzzyyxxwwvvuuttsrrqqpoonmmlkjjihggfe~d}d|c|b{az`y`x_w^w]v\u[t[sZrYrXqWpVoVnUmTmSlRkQjPiPhOgNgMfLeKdKcJbIbHaG`F_F^E]D]C\B[AZAY@Y?X>W=V=UX?Y@ZA[A\B]C]D^E_F`FaGbHbIcJdKeKfLgMhNhOiPjQkQlRmSnTnUoVpWqWrXsYtZt[u\v]w]x^y_y`za{b|b}c~d~effghijjklmmnoopqqrsstuuvvwwxxyyzz{{|||}}~~~~~~~~}}|||{{zzyyxxwwvvuutssrqqpoonmmlkjjihgff~e~d}c|b{bzay`y_x^w]v]u\t[tZsYrXqWpWoVnUnTmSlRkQjQiPhOhNgMfLeKdKcJbIbHaG`F_F^E]D]C\B[AZAY@X?X>W=V=UX?Y@ZA[A\B]C]D^E_F`FaGbHbIcJdKeLfLgMhNhOiPjQkRlRmSnToUoVpWqXrYsYtZu[v\v]w^x_y_z`{a|b|c}d~eefghiijkllmnoopqrrsttuvvwwxxyzz{{|||}}~~~~~~}}|||{{zzyxxwwvvuttsrrqpoonmllkjiihgfe~e}d|c|b{az`y_x_w^v]v\u[tZsYrYqXpWoVoUnTmSlRkRjQiPhOhNgMfLeLdKcJbIbHaG`F_F^E]D]C\B[AZAY@X?X>W=VX?Y@Z@[A\B\C]D^E_E`FaGbHbIcJdKeLfLgMhNiOiPjQkRlSmSnToUpVqWqXrYsZt[u[v\w]x^x_y`za{b|b}c~d~efgghijkllmnoopqrrsttuvvwxxyyz{{||}}~~~~}}||{{zyyxxwvvuttsrrqpoonmllkjihggf~e~d}c|b{bzay`x_x^w]v\u[t[sZrYqXqWpVoUnTmSlSkRjQiPiOhNgMfLeLdKcJbIbHaG`F_E^E]D\C\B[AZ@Y@X?W>W=VX?Y@Z@[A\B\C]D^E_E`FaGbHbIcJdKeLfLgMhNiOiPjQkRlSmTnToUpVqWrXrYsZt[u\v]w]x^y_z`{a{b|c}d~eefghijjklmnnopqrrstuuvwwxyyzz{||}}~~~~}}||{zzyyxwwvuutsrrqponnmlkjjihgfe~e}d|c{b{az`y_x^w]v]u\t[sZrYrXqWpVoUnTmTlSkRjQiPiOhNgMfLeLdKcJbIbHaG`F_E^E]D\C\B[AZ@Y@X?W>W=VX?Y?Z@[A[B\C]D^D_E`FaGaHbIcJdKeLfLgMhNiOjPjQkRlSmTnUoUpVqWrXsYtZt[u\v]w^x_y`z`{a|b}c}d~efghhijklmmnopqqrstuuvwwxyyz{{|}}~~~~}}|{{zyyxwwvuutsrqqponmmlkjihhgf~e}d}c|b{az`y`x_w^v]u\t[tZsYrXqWpVoUnUmTlSkRjQjPiOhNgMfLeLdKcJbIaHaG`F_E^D]D\C[B[AZ@Y?X?W>V=VX>Y?Z@ZA[B\C]D^D_E`FaGaHbIcJdKeLfLgMhNiOjPjQkRlSmTnUoVpWqWrXsYtZu[v\v]w^x_y`za{b|b}c~defghijkklmnoppqrsttuvwwxyzz{||}~~~~}||{zzyxwwvuttsrqpponmlkkjihgfe~d}c|b{bzay`x_w^v]v\u[tZsYrXqWpWoVnUmTlSkRjQjPiOhNgMfLeLdKcJbIaHaG`F_E^D]D\C[BZAZ@Y?X>W>V=UY?Y@ZA[B\C]C^D_E`F`GaHbIcJdKeKfLgMhNiOjPjQkRlSmTnUoVpWqXrXsYtZu[v\w]x^y_y`za{b|c}d~effghijklmnnopqrsttuvwwxyzz{|}}~~}}|{zzyxwwvuttsrqponnmlkjihgff~e}d|c{bzay`y_x^w]v\u[tZsYrXqXpWoVnUmTlSkRjQjPiOhNgMfLeKdKcJbIaH`G`F_E^D]C\C[BZAY@Y?X>W=V=UX?Y@ZA[B\B]C^D_E_F`GaHbIcJdJeKfLgMhNiOjPjQkRlSmTnUoVpWqXrYsYtZu[v\w]x^y_z`{a|b|c}d~efghijjklmnopqrrstuvwwxyzz{|}}~~}}|{zzyxwwvutsrrqponmlkjjihgf~e}d|c|b{az`y_x^w]v\u[tZsYrYqXpWoVnUmTlSkRjQjPiOhNgMfLeKdJcJbIaH`G_F_E^D]C\B[BZAY@X?X>W=VX?Y@ZA[A\B]C^D^E_F`GaHbIcIdJeKfLgMhNiOiPjQkRlSmTnUoVpWqXrYsZt[u[v\w]x^y_z`{a|b}c~defghijklmnnopqrstuvvwxyzz{|}~~~~}|{zzyxwvvutsrqponnmlkjihgfe~d}c|b{az`y_x^w]v\u[t[sZrYqXpWoVnUmTlSkRjQiPiOhNgMfLeKdJcIbIaH`G_F^E^D]C\B[AZAY@X?W>W=VX?Y?Z@[A\B\C]D^E_F`GaGbHcIdJeKfLgMhNhOiPjQkRlSmTnUoVpWqXrYsZt[u\v]w^x_y_z`{a|b}c~defghijklmnopqrsstuvwxyyz{|}~~~~}|{zyyxwvutssrqponmlkjihgfe~d}c|b{az`y_x_w^v]u\t[sZrYqXpWoVnUmTlSkRjQiPhOhNgMfLeKdJcIbHaG`G_F^E]D\C\B[AZ@Y?X?W>V=VX>Y?Z@[A[B\C]D^E_F`FaGbHcIdJeKfLfMgNhOiPjQkRlSmTnUoVpWqXrYsZt[u\v]w^x_y`za{b|c}d~efgghijklmnopqrstuvwwxyz{|}}~~}}|{zyxwwvutsrqponmlkjihggf~e}d|c{bzay`x_w^v]u\t[sZrYqXpWoVnUmTlSkRjQiPhOgNfMfLeKdJcIbHaG`F_F^E]D\C[B[AZ@Y?X>W>V=UY?Y@ZA[B\C]C^D_E`FaGbHcIcJdKeLfMgNhOiPjQkRlSmTnUoVpWqXrYsZt[u\v]w^x_y`za{b|c}d~efghijklmnopqqrstuvwxyz{||}~~}||{zyxwvutsrqqponmlkjihgf~e}d|c{bzay`x_w^v]u\t[sZrYqXpWoVnUmTlSkRjQiPhOgNfMeLdKcJcIbHaG`F_E^D]C\C[BZAY@Y?X>W=VX?Y@ZA[A\B]C^D_E`F`GaHbIcJdKeLfMgNhOiPjQkRlSmTnUoVpWqXrYsZt[u\v]w^x_y`za{b|c}d~efghijklmnopqrstuvwxxyz{|}~~}|{zyxxwvutsrqponmlkjihgf~e}d|c{bzay`x_w^v]u\t[sZrYqXpWoVnUmTlSkRjQiPhOgNfMeLdKcJbIaH`G`F_E^D]C\B[AZAY@X?W>W=VX?Y?Z@[A\B]C]D^E_F`GaHbIcJdKeLfMgNhNiOjPkQlRmSnToUpWqXrYsZt[u\v]w^x_y`za{b|c}d~efghijklmnopqrstuvwxyz{|}~~~~}|{zyxwvutsrqponmlkjihgf~e}d|c{bzay`x_w^v]u\t[sZrYqXpWoUnTmSlRkQjPiOhNgNfMeLdKcJbIaH`G_F^E]D]C\B[AZ@Y?X?W>V=UY?Z@ZA[B\C]D^E_F`GaHbHcIdJeKfLgMhNiOjPkQlRmSnToUpVqWrXsYt[u\v]w^x_y`za{b|c}d~efghijklmnopqrstuvwxyz{|}~~}|{zyxwvutsrqponmlkjihgf~e}d|c{bzay`x_w^v]u\t[sYrXqWpVoUnTmSlRkQjPiOhNgMfLeKdJcIbHaH`G_F^E]D\C[BZAZ@Y?X>W=V=UX?Y@ZA[B\C]C^D_E`FaGbHcIdJeKfLgMhNiOjPkQlRmSnToUpVqWrXsYtZu[v]w^x_y`za{b|c}defghijklmopqrstuvwxyz{|}~~}|{zyxwvutsrqpomlkjihgfe}d|c{bzay`x_w^v]u[tZsYrXqWpVoUnTmSlRkQjPiOhNgMfLeKdJcIbHaG`F_E^D]C\C[BZAY@X?X>W=VX?Y@Z@[A\B]C^D_E`FaGaHbIcJdKeLfMgNhOiPjQkRmSnToUpVqWrXsYtZu[v\w^x_y`za{b|c}defghijkmnopqrstuvwxyz{|}~~}|{zyxwvutsrqponmkjihgfe}d|c{bzay`x_w^v\u[tZsYrXqWpVoUnTmSkRjQiPhOgNfMeLdKcJbIaHaG`F_E^D]C\B[AZ@Y@X?W>V=UY?Z@[A\B\C]D^E_F`GaHbIcJdKeLfMgNhOiPjQkRlSmTnUoVqWrXsYtZu[v\w]x_y`za{b|c}defghijlmnopqrstuvwxyz{|}~~}|{zyxwvutsrqponmljihgfe}d|c{bzay`x_w]v\u[tZsYrXqWoVnUmTlSkRjQiPhOgNfMeLdKcJbIaH`G_F^E]D\C\B[AZ@Y?X>W=V=UX?Y@ZA[B\C]D^E_F`FaGbHcIdJeKfLgMhNiOjQkRlSmTnUoVpWqXrYtZu[v\w]x^y_za{b|c}d~efghijlmnopqrstuvxyz{|}~~}|{zyxvutsrqponmljihgf~e}d|c{bzay_x^w]v\u[tZrYqXpWoVnUmTlSkRjQiOhNgMfLeKdJcIbHaG`F_F^E]D\C[BZAY@X?X>W=VX?Y@Z@[A\B]C^D_E`FaGbHcIdJeKfLgMhNiOjPkQlRmSnToVpWqXrYsZt[v\w]x^y_z`{b|c}d~efghijlmnopqrstvwxyz{|}~~}|{zyxwvtsrqponmljihgf~e}d|c{bz`y_x^w]v\t[sZrYqXpWoVnTmSlRkQjPiOhNgMfLeKdJcIbHaG`F_E^D]C\B[AZ@Y@X?W>V=UY?Z@[A\B\C]D^E_F`GaHbIcJdKeLfMgNhOjPkQlRmSnToUpVqWrYsZt[u\v]x^y_z`{a|c}d~efghijlmnopqrsuvwxyz{|}~~}|{zyxwvusrqponmljihgf~e}d|c{az`y_x^v]u\t[sZrYqWpVoUnTmSlRkQjPhOgNfMeLdKcJbIaH`G_F^E]D\C\B[AZ@Y?X>W=VX?Y@ZA[B\C]D^E_F`GaHbIcJdKeLfMgNhOiPjQkRlSmToUpVqWrXsYt[u\v]w^y_z`{a|b}d~efghijlmnopqrtuvwxyz{|~~|{zyxwvutrqponmljihgf~e}d|b{az`y_w^v]u\t[sYrXqWpVoUmTlSkRjQiPhOgNfMeLdKcJbIaH`G_F^E]D\C[BZAY@X?W>W=VX?Y?Z@[A\B]C^D_E`FaGbHcIdJeKfLgMhNiOjPkRlSmTnUoVpWrXsYtZu[v]w^x_y`{a|b}c~efghijkmnopqrtuvwxyz|}~~}|zyxwvutrqponmkjihgf~e}c|b{ay`x_w^v]u[tZsYrXpWoVnUmTlSkRjPiOhNgMfLeKdJcIbHaG`F_E^D]C\B[AZ@Y?X?W>V=UY?Z@ZA[B\C]D^E_F`GaHbIcJdKeLfMhNiOjPkQlRmSnUoVpWqXrYtZu[v\w]x_y`za|b}c~dfghijkmnopqrtuvwxyz|}~¨¨©©éééêêêêêêêêêêééé©©¨¨~}|zyxwvutrqponmkjihgf~d}c|bzay`x_w]v\u[tZrYqXpWoVnUmSlRkQjPiOhNfMeLdKcJbIaH`G_F^E]D\C[BZAZ@Y?X>W=VX?Y@ZA[B\B]C^D_E`FaGbHcJdKeLfMgNhOiPjQkRmSnToUpVqXrYsZt[v\w]x^y`za{b|c~deghijklnopqrtuvwxy{|}~¨©©éêêĪĪīīūūūūŬŬŬŬŬŬūūūūīīĪĪêêé©©¨~}|{yxwvutrqponlkjihge~d|c{bzay`x^w]v\t[sZrYqXpVoUnTmSkRjQiPhOgNfMeLdKcJbHaG`F_E^D]C\B[BZAY@X?W>V=W=X>Y?Z@[A\B]C^D_E`FaGbHcIdJeKfLgMhNiOjQkRlSmTnUpVqWrXsYt[u\v]x^y_z`{b|c}defgijklmopqrsuvwxy{|}~¨©éêêĪīūūŬƬƬƭƭƭǭǭǭǭǭǭǭǭǭǭǭǭƭƭƭƬƬŬūūīĪêê驨~}|{yxwvusrqpomlkjigfe}d|c{bz`y_x^v]u\t[sYrXqWpVnUmTlSkRjQiOhNgMfLeKdJcIbHaG`F_E^D]C\B[AZ@Y?X>W=W>X?Y@ZA[B\C]D^E_F`GaHbIcJdKeLfMhNiOjPkQlRmTnUoVpWrXsYtZu[v]w^x_z`{a|b}d~efghjklmopqrsuvwxy{|}~¨©éêĪīūŬƬƭƭǭǮǮȮȮȯȯȯȯɯɯɯɯɯɯɯɯȯȯȯȯȮȮǮǮǭƭƭƬŬūīĪê驨~}|{yxwvusrqpomlkjhgf~e}d|b{az`x_w^v]u[tZsYrXpWoVnUmTlRkQjPiOhNfMeLdKcJbIaH`G_F^E]D\C[BZAY@X?W>X>Y?Z@[A\B]C^D_E`FaGbHcIdJeKfMgNhOiPjQlRmSnToUpWqXrYsZu[v\w]x_y`{a|b}c~efghiklmnpqrstvwxy{|}~¨©éêīūŬƬƭǭǮǮȮȯɯɯɰɰʰʰʱʱʱʱʱ˱˱˱˱ʱʱʱʱʱʰʰɰɰɯɯȯȮǮǮǭƭƬŬūīê驨~}|{yxwvtsrqpnmlkihgf~e}c|b{ay`x_w]v\u[sZrYqXpWoUnTmSlRjQiPhOgNfMeKdJcIbHaG`F_E^D]C\B[AZ@Y?X>X?Y@ZA[B\C]D^E_F`GaHbIdJeKfLgMhNiOjPkRlSmTnUpVqWrXsZt[u\w]x^y_za{b}c~dfghijlmnoqrstvwxyz|}~¨éêĪūŬƬƭǭǮȮȯɯɰʰʰʱ˱˱˲˲̲̲̲̳̳̳̳̳̳̳̳̳̳̲̲̲˲˲˱˱ʱʰʰɰɯȯȮǮǭƭƬŬūĪêé¨~}|zyxwvtsrqonmljihgf~d}c{bzay_x^w]u\t[sZrXqWpVnUmTlSkRjPiOhNgMfLeKdJbIaH`G_F^E]D\C[BZAY@X?Y?Z@[A\B]C^D_E`FaGbIcJdKeLfMgNhOjPkQlRmSnUoVpWrXsYtZu\v]w^y_z`{b|c}defhijkmnoprstuwxyz|}~©éĪīūƬƭǭǮȯɯɰʰʱ˱˱˲̲̳̳ͳͳʹʹδδδεεεεεεεεδδδʹʹͳͳ̳̳̲˲˱˱ʱʰɰɯȯǮǭƭƬūīĪé©~}|zyxwutsrponmkjihfe}d|c{bz`y_w^v]u\tZsYrXpWoVnUmSlRkQjPhOgNfMeLdKcJbIaG`F_E^D]C\B[AZ@Y?Y@ZA[B\C]D^E_FaGbHcIdJeKfLgMhOiPjQkRmSnToUpVqXrYsZu[v\w^x_y`{a|b}d~efgijklnopqstuvxyz|}~©éĪūŬƬǭǮȮɯɰʰʱ˱˲̲̳ͳʹʹδεεϵϵ϶϶жжжжжжжжжжжж϶϶ϵϵεεδʹʹͳ̳̲˲˱ʱʰɰɯȮǮǭƬŬūĪé©~}|zyxvutsqponlkjigf~e}d|b{ay`x_w^v\u[sZrYqXpVoUnTmSkRjQiPhOgMfLeKdJcIbHaG_F^E]D\C[BZAY@Z@[A\B]C^D_F`GaHbIcJdKeLfMhNiOjPkQlSmTnUpVqWrXsZt[u\w]x^y`za|b}c~efghjklmopqrtuvxyz{}~©éĪūŬƭǭȮȯɰʰʱ˱˲̳ͳʹδεεϵ϶жжзѷѷѷѸѸѸҸҸҸҸҸҸҸҸѸѸѸѷѷѷзжж϶ϵεεδʹͳ̳˲˱ʱʰɰȯȮǭƭŬūĪé©~}{zyxvutrqpomlkjhgf~e}c|bzay`x^w]u\t[sZrXqWpVnUmTlSkQjPiOhNfMeLdKcJbIaH`G_F^D]C\B[AZ@ZA[B\C]D_E`FaGbHcIdJeKfLgNhOiPjQlRmSnToVpWqXsYtZu\v]w^y_z`{b|c~deghijlmnpqrsuvwyz{|~¨éĪūŬƭǮȮɯɰʱ˱˲̲ͳʹδεϵ϶жзѷѸѸҸҹҹӹӹӹӺӺӺӺԺԺԺԺӺӺӺӺӹӹӹҹҹҸѸѸѷзж϶ϵεδʹͳ̲˲˱ʱɰɯȮǮƭŬūĪé¨~|{zywvusrqpnmljihge~d|c{bz`y_w^v]u\tZsYqXpWoVnTmSlRjQiPhOgNfLeKdJcIbHaG`F_E]D\C[BZA[A\B]C^E_F`GaHbIcJdKeLgMhNiOjPkRlSmToUpVqWrYsZu[v\w^x_y`{a|b}d~efhijkmnoqrstvwxz{|~¨éĪīŬƭǮȮɯɰʱ˱̲̳ʹδεϵ϶зѷѸҸҸҹӹӺӺԺԻԻջջջռռռռռռռռռռջջջԻԻԺӺӺӹҹҸҸѸѷз϶ϵεδʹ̳̲˱ʱɰɯȮǮƭŬīĪé¨~|{zxwvtsrqonmkjihf~e}d|b{ay`x_w^v\u[sZrYqWpVoUmTlSkRjPiOhNgMeLdKcJbIaH`G_F^E]C\B[A[B\C^D_E`FaGbHcIdJeKfMgNhOiPkQlRmSnUoVpWrXsYt[u\w]x^y`za|b}c~efghjklnopqstuwxy{|}©êīŬƭǭȮɯɰʱ˲̲ͳʹεϵ϶жѷѸҸҹӹӺԺԻԻջռּּֽֽֽ׽׽׽׽׾׾׾׾׽׽׽׽ּּֽֽֽռջԻԻԺӺӹҹҸѸѷж϶ϵεʹͳ̲˲ʱɰɯȮǭƭŬīê©}|{yxwutsqponlkjhgf~e}c|bzay`x^w]u\t[sYrXpWoVnUmSlRkQiPhOgNfMeKdJcIbHaG`F_E^D\C[B\B]C^E_F`GaHbIcJdKfLgMhNiOjQkRlSnToUpVqXrYtZu[v]w^y_z`{b|c~deghiklmnpqrtuvxyz|}~¨éĪūƬǭȮȯɰʱ˲̲ͳʹεϵжзѸҸҹӹӺԺԻջռּֽ׽׽׾ؾؾؿؿؿٿٿٿٿٿٿٿٿٿٿؿؿؿؾؾ׾׽׽ּֽռջԻԺӺӹҹҸѸзжϵεʹͳ̲˲ʱɰȯȮǭƬūĪé¨~}|zyxvutrqpnmlkihge~d|c{bz`y_w^v]u[tZrYqXpVoUnTlSkRjQiOhNgMfLdKcJbIaH`G_F^E]C\B\C]D_E`FaGbHcIdJeLfMgNhOjPkQlRmTnUoVqWrXsZt[v\w]x_y`{a|b}d~efgijkmnoqrsuvwyz{}~©êīŬƭǮȯɰʱ˱̲ͳδε϶жѷѸҹӹӺԺջռּֽ׽׾ؾؾؿٿٿٿٿؿؾؾ׾׽ּֽռջԺӺӹҹѸѷж϶εδͳ̲˱ʱɰȯǮƭŬīê©~}{zywvusrqonmkjigf~e}d|b{ay`x_w]v\t[sZrXqWoVnUmTlRkQjPhOgNfMeLdJcIbHaG`F_E]D\C]C^D_F`GaHbIcJdKfLgMhNiPjQkRmSnToUpWqXsYtZu\v]x^y_za{b}c~dfghjklnoprstvwxz{|~éĪūƬǭȮɯʰ˱̲ͳʹε϶жѷҸҹӹԺԻռּֽ׽׾ؾؿٿٿؿؾ׾׽ּֽռԻԺӹҹҸѷж϶εʹͳ̲˱ʰɯȮǭƬūĪé~|{zxwvtsrponlkjhgf~d}c{bzay_x^v]u\tZsYqXpWoUnTmSkRjQiPhNgMfLdKcJbIaH`G_F^D]C]D^E`FaGbHcIdJeLfMgNhOjPkQlRmTnUpVqWrXsZt[v\w]x_z`{a|c}defhijlmnpqstuwxy{|}¨éīŬƭǮȯɰʱ˲̳ʹεϵжѷҸҹӺԺջռּ׽׾ؾؿؿؾ׾׽ּռջԺӺҹҸѷжϵεʹ̳˲ʱɰȯǮƭŬīé¨}|{yxwutsqpnmljihfe}d|c{az`x_w]v\t[sZrXqWpVnUmTlRkQjPhOgNfMeLdJcIbHaG`F^E]D^D_E`GaHbIcJdKfLgMhNiPjQkRmSnToUpWqXsYtZu\v]x^y_za|b}c~efgijkmnoqrsuvxyz|}~©êīŬǭȮɯʰ˱̲ͳδϵжѷѸҹӺԺջռֽ׽ؾؿٿٿؿؾ׽ֽռջԺӺҹѸѷжϵδͳ̲˱ʰɯȮǭŬīê©~}|zyxvusrqonmkjigf~e}c|bzay_x^v]u\tZsYqXpWoUnTmSkRjQiPhNgMfLdKcJbIaH`G_E^D^E_FaGbHcIdJeKfMgNhOjPkQlRmTnUpVqWrYsZu[v\w^x_z`{a|c~deghiklmoprstvwxz{}~©êūƬǭȯɰʱ˲̳ʹε϶зѸҹӹԺջּֽ׾ؾٿٿؾ׾ּֽջԺӹҹѸз϶εʹ̳˲ʱɰȯǭƬūê©~}{zxwvtsrpomlkihge~d|c{az`x_w^v\u[sZrYqWpVnUmTlRkQjPhOgNfMeKdJcIbHaG_F^E_E`FaHbIcJdKfLgMhNiOjQkRmSnToUpWqXsYtZu\v]x^y`za|b}c~efgijlmnpqrtuwxy{|~©ĪūƭǮȯɰ˱̲ͳδϵжѷҸӹԺջռֽ׾ؾٿٿؾ׾ֽռջԺӹҸѷжϵδͳ̲˱ɰȯǮƭūĪ©~|{yxwutrqpnmljigf~e}c|bzay`x^v]u\tZsYqXpWoUnTmSkRjQiOhNgMfLdKcJbIaH`F_E_F`GbHcIdJeKfMgNhOjPkQlRmTnUpVqWrYsZu[v\w^x_z`{b|c~dfghjklnoprsuvwyz|}éĪŬƭǮɯʰ˱̲ʹε϶зѸҹӺԻռֽ׽ؾٿٿؾ׽ֽռԻӺҹѸз϶εʹ̲˱ʰɯǮƭŬĪé}|zywvusrponlkjhgf~d|c{bz`x_w^v\u[sZrYqWpVnUmTlRkQjPhOgNfMeKdJcIbH`G_F`FaGbIcJdKeLgMhNiOjQkRlSnToUpWqXsYtZu\w]x^y`za|b}d~efhijlmnpqstvwxz{}~éĪŬƭȮɯʰ˲̳ʹϵжѷҸӹԺջּ׽ؾؿؿؾ׽ּջԺӹҸѷжϵʹ̳˲ʰɯȮƭŬĪé~}{zxwvtsqpnmljihf~e}d|bzay`x^w]u\tZsYqXpWoUnTlSkRjQiOhNgMeLdKcJbIaG`F`GaHbIdJeKfLgNhOiPkQlRmTnUpVqWrYsZu[v\w^x_z`{b|c~dfghjklnoqrtuvxy{|~éĪŬƭȮɯʱ˲ͳδϵжѸҹӺԻռֽ׾ؿؿ׾ֽռԻӺҹѸжϵδͳ˲ʱɯȮƭŬĪé~|{yxvutrqonlkjhgf~d|c{bz`x_w^v\u[sZrYqWpVnUmTlRkQiPhOgNfLeKdJbIaH`GaGbHcIdKeLfMhNiOjPkRlSnToUpWqXsYtZu\v]x^y`za|b}d~efhijlmopqstvwyz|}~éĪŬǭȮɰʱ̲ͳδ϶зѸҹԺջּ׽ؾٿٿؾ׽ּջԺҹѸз϶δͳ̲ʱɰȮǭŬĪé~}|zywvtsqpomljihf~e}d|bzay`x^v]u\tZsYqXpWoUnTlSkRjPiOhNfMeLdKcIbHaGaHbIcJeKfLgMhOiPjQlRmSnUoVqWrXsZt[v\w^x_z`{b|c~dfghjkmnoqrtuwxy{|~éĪŬǭȮɰʱ̲ͳε϶зҸӹԺջֽ׾ؿؿ׾ֽջԺӹҸз϶εͳ̲ʱɰȮǭŬĪé~|{yxwutrqonmkjhgf~d|c{bz`x_w^v\t[sZrXqWoVnUmSlRjQiPhOgMfLeKcJbIaHbHcIdJeLfMgNiOjPkQlSmToUpVqXrYtZu\v]x^y`za|b}d~efhijlmoprstvwyz|}©ĪŬƭȮɰʱ̲ͳε϶ѷҸӹԻռֽ׾ؿؿ׾ֽռԻӹҸѷ϶εͳ̲ʱɰȮƭŬĪ©}|zywvtsrpomljihf~e}d|bzay`x^v]u\tZrYqXpVoUmTlSkQjPiOgNfMeLdJcIbHbIcJdKeLgMhNiPjQkRmSnToVpWrXsZt[v\w]x_z`{a|c~dfghjkmnoqrtuwxz{}~©ĪŬƭȮɰʱ̲ͳε϶ѷҸӺԻռ׽ؾٿٿؾ׽ռԻӺҸѷ϶εͳ̲ʱɰȮƭŬĪ©~}{zxwutrqonmkjhgf~d|c{az`x_w]v\t[sZrXpWoVnTmSkRjQiPhNgMeLdKcJbIbIdJeKfLgNhOjPkQlRmTnUpVqXrYtZu[v]x^y_za|b}c~efhijlmoprsuvwyz|}©êūƭȮɯʱ̲ͳε϶ѷҹӺԻּ׽ؾؾ׽ּԻӺҹѷ϶εͳ̲ʱɯȮƭūê©}|zywvusrpomljihf~e}c|bzay_x^v]u[tZrYqXpVnUmTlRkQjPhOgNfLeKdJbIcIdKeLfMhNiOjPkRlSnToUpWrXsYt[u\w]x_y`{a|c~deghjkmnoqrtuwxz{}~¨êūƭǮɯʱ̲ͳε϶ѷҹӺջּ׽ؿؿ׽ּջӺҹѷ϶εͳ̲ʱɯǮƭūê¨~}{zxwutrqonmkjhge~d|c{ay`x_w]u\t[sYrXpWoUnTlSkRjPiOhNfMeLdKcIcJdKfLgMhOiPjQlRmSnUoVqWrYsZu[v\w^y_za{b}c~efgijlmoprsuvwyz|~éīƬǮɯʰ˲ͳε϶ѷҹӺջּ׾ؿؿ׾ּջӺҹѷ϶εͳ˲ʰɯǮƬīé~|zywvusrpomljigf~e}c{bzay_w^v\u[sZrYqWoVnUmSlRjQiPhOgMfLdKcJdJeKfMgNhOjPkQlSmToUpVqXsYtZu\w]x^y`{a|b}deghjklnoqrtuwxz{}~éīŬǭȯʰ˲ͳδ϶ѷҸӺջּ׾ؿؿ׾ּջӺҸѷ϶δͳ˲ʰȯǭŬīé~}{zxwutrqonlkjhge}d|b{ay`x^w]u\tZsYqXpVoUmTlSkQjPhOgNfMeKdJdKeLfMhNiOjQkRmSnToVpWrXsZt[v\w^x_z`{b}c~dfgijlmnpqstvwyz|~©ĪŬǭȯɰ˱̳δ϶зҸӺԻּ׾ؿؿ׾ּԻӺҸз϶δ̳˱ɰȯǭŬĪ©~|zywvtsqpnmljigf~d}c{bz`x_w^v\t[sZrXpWoVnTmSkRjQiOhNfMeLdKeKfLgMhOiPkQlRmTnUpVqWrYtZu[v]x^y_za|b}defhiklnoqrtuwxz{}~¨êūƭȮɰ˱̲ʹϵзҸӹԻּ׽ؿؿ׽ּԻӹҸзϵʹ̲˱ɰȮƭūê¨~}{zxwutrqonlkihfe}d|bzay_x^v]u[tZrYqWpVnUmTlRkQiPhOgMfLeKeKfMgNiOjPkQlSnToUpWqXsYt[u\w]x_y`{a|c~dfghjkmnpqstvwyz|}éīƬǮɯʱ̲ʹϵжѸӹԻռ׽ؿؿ׽ռԻӹѸжϵʹ̲ʱɯǮƬīé}|zywvtsqpnmkjhgf~d|c{ay`x_w]u\t[sYqXpWoUnTlSkQjPiOgNfMeKeLfMhNiOjQkRmSnToVqWrXsZu[v\w^y_z`{b}c~efhijlmoprsuvxy{}~©ĪŬǭȯʰ˲ͳεжѸҹԺռ׽ؾؾ׽ռԺҹѸжεͳ˲ʰȯǭŬĪ©~}{yxvusrpomljihf~e}c{bz`y_w^v\u[sZrXqWoVnTmSkRjQiOhNfMeLfLgMhOiPkQlRmTnUpVqWrYtZu[v]x^y`za|b}deghjklnoqrtvwyz|}¨êūƭȮɰ˱̳δ϶ѷҹԺջֽؾؾֽջԺҹѷ϶δ̳˱ɰȮƭūê¨}|zywvtrqonlkjhge}d|bzay`x^v]u[tZrYqWpVnUmTlRkQiPhOgMfLfMgNhOjPkQlSnToUpWqXsYt[u\w]x_z`{a|c~dfgijlmoprsuvxy{|~éīƬǮɯʱ̲ʹϵзҸӺջֽ׾ٿٿ׾ֽջӺҸзϵʹ̲ʱɯǮƬīé~|{yxvusrpomljigf~d|c{az`x_w]u\t[sYqXpWoUnTlSkQjPhOgNfMfMhNiOjQkRmSnToVqWrXsZu[v\w^y_za{b}c~efhiklnoqrtuwxz{}¨ĪŬǭȯʰ˲ͳεжѸӹԻּ׾ؿؿ׾ּԻӹѸжεͳ˲ʰȯǭŬ΍}{zxwutrqonlkihf~e}c{bzay_w^v\u[sZrXqWoVnTmSkRjQiOhNfMgMhNiPjQlRmTnUpVqWrYtZu[v]x^y`{a|b}deghjkmnpqstvwyz|~éīƭȮɰ˱̳δ϶ѷҹԺռ׽ؿؿ׽ռԺҹѷ϶δ̳˱ɰȮƭīé~|zywvtsqpnmkjhge}d|b{ay`x^v]u[tZrYqWpVnUmTlRjQiPhNgMgNhOjPkQlSmToUpWqXsYt[u\w]x_z`{a|c~dfgijlmoprsuvxy{}~©ĪŬǭȯʱ̲ʹϵзҸӺջֽؾؾֽջӺҸзϵʹ̲ʱȯǭŬĪ©~}{yxvusrpomljigf~d|c{az`x_w]u\t[sYqXpWoUmTlSkQjPhOgNgNiOjPkRlSnToVpWrXsZt[v\w^y_z`{b}c~efhiklnoqrtuwxz|}éūƭȮɰ˱ͳεжѸӹԻּ׾ٿٿ׾ּԻӹѸжεͳ˱ɰȮƭūé}|zxwutrqonlkihf~e}c{bz`y_w^v\t[sZrXpWoVnTlSkRjPiOgNhNiOjQlRmSnUoVqWrYsZu[v]x^y_za|b}deghjkmnpqstvwy{|~©ĪŬǮɯʱ̲ʹϵѷҹԺռ׽ؿؿ׽ռԺҹѷϵʹ̲ʱɯǮŬĪ©~|{ywvtsqpnmkjhge}d|bzay_x^v]u[sZrYqWoVnUmSlRjQiOhNhOiPkQlRmTnUpVqXrYtZu\w]x^y`{a|c~dfgijlmoprsuvxz{}~éūƭȮɰ˲ͳεжѸӹջֽؾؾֽջӹѸжεͳ˲ɰȮƭūé~}{zxvusrpomljigf~d|c{ay`x^w]u\tZrYqXpVnUmTlRkQiPhOhOjPkQlSmToUpWqXsYt[v\w]x_z`{b}c~efhiklnoqrtuwxz|}©ĪŬǮɯʱ̲δ϶ѷҹԺռ׽ؿؿ׽ռԺҹѷ϶δ̲ʱɯǮŬĪ©}|zxwutrqonlkihf~e}c{bz`x_w]v\t[sYqXpWoUmTlSkQjPhOiOjPkRmSnToVpWrXsZu[v\w^y_za|b}defhiklnpqstvwy{|~éūƭȮɰ˲ͳεжҸӺջֽؾؾֽջӺҸжεͳ˲ɰȮƭūé~|{ywvtsqpnlkihfe}d|bzay_w^v\u[sZrXpWoVnTmSkRjPiOiOjQlRmSnUoVqWrYtZu[v]x^y`{a|b}deghjkmnprsuvxy{}~¨ĪŬǭɯʱ̲ʹ϶ѷҹԺּ׾ٿٿ׾ּԺҹѷ϶ʹ̲ʱɯǭŬ΍~}{yxvusrpnmkjhge}d|b{ay`x^v]u[tZrYqWoVnUmSlRjQiOiPkQlRmTnUpVqXrYtZu\w]x_y`{a|c~dfgijlmoprtuwxz|}éīƬȮɰ˱ͳεжҸӺջֽؾؾֽջӺҸжεͳ˱ɰȮƬīé}|zxwutrpomljigf~d|c{ay`x_w]u\tZrYqXpVnUmTlRkQiPjPkQlSmToUpWqXsYt[v\w]x_z`{b}c~efhiklnoqrtvwyz|~¨êūǭȯʱ̲ʹϵѷҹԺռ׾ٿٿ׾ռԺҹѷϵʹ̲ʱȯǭūê¨~|zywvtrqonlkihf~e}c{bz`x_w]v\t[sYqXpWoUmTlSkQjPjPkRlSnToVpWrXsZt[v\w^y_za|b}deghjkmnpqstvxy{|~©ĪƬǮɰ˱̳εжѸӹջֽؾؾֽջӹѸжε̳˱ɰǮƬĪ©~|{yxvtsqpnmkjhge}d|bzay_w^v\t[sZrXpWoVnTlSkRjPjQkRmSnToVqWrYsZu[v]x^y`za|b}deghjkmnprsuvxz{}éūƭȮʰ˲ʹϵзҹԺռ׽ٿٿ׽ռԺҹзϵʹ˲ʰȮƭūé}{zxvusrpnmkjhge}d|bzay`x^v]u[sZrYqWoVnTmSkRjQjQlRmSnUpVqWrYtZu\v]x^y`{a|c~dfgijlmoprtuwxz|}¨êŬǭɯʱ̲δ϶ѸӹԻּؾؾּԻӹѸ϶δ̲ʱɯǭŬê¨}|zxwutrpomljigf~d|c{ay`x^v]u\tZrYqWpVnUmSlRjQkQlRmTnUpVqXsYtZu\w]x_z`{b}c~efhiklnoqrtvwyz|~©īƬǮɰ˱ͳεжҸӺռ׽ؿؿ׽ռӺҸжεͳ˱ɰǮƬī©~|zywvtrqonlkihf~e}c{bz`x_w]u\tZsYqXpVnUmTlRkQkQlSmToUpWqXsYt[v\w^x_z`{b}c~efhiklnpqstvxy{|~éūƭȯʰ˲ʹϵѷҹԺּ׾ٿٿ׾ּԺҹѷϵʹ˲ʰȯƭūé~|{yxvtsqpnlkihf~e}c{bz`x_w^v\t[sYqXpWoUmTlSkQkQlSnToUpWrXsZt[v\w^y_za|b}deghjkmnpqsuvxz{}~¨êŬǭɯʱ̳δ϶ѸӹջֽؾؾֽջӹѸ϶δ̳ʱɯǭŬê¨~}{zxvusqpnmkjhge}d|bzay_w^v\t[sZrXpWoUnTlSkQkRmSnToVqWrXsZu[v]x^y_za|b}deghjkmoprsuwxz|}©ĪƬǮɰ˱ͳεзҸӺռ׽ؿؿ׽ռӺҸзεͳ˱ɰǮƬĪ©}|zxwusrpomkjhge}d|bzay_x^v]u[sZrXqWoVnTmSkRkRmSnUoVqWrYtZu[v]x^y`{a|c~dfgijlmoprtuwyz|~éīƭȮʰ˲ʹϵѷҹԺּ׾׾ּԺҹѷϵʹ˲ʰȮƭīé~|zywutrpomljigf~d|c{ay`x^v]u[tZrYqWoVnUmSkRlRmSnUpVqWrYtZu\w]x^y`{a|c~dfgijlnoqrtvwyz|~êūǭȯʱ̲δ϶ѸӹԻֽؾؾֽԻӹѸ϶δ̲ʱȯǭūê~|zywvtrqonljigf~d|c{ay`x^w]u\tZrYqWpVnUmSlRlRmTnUpVqXsYtZu\w]x_z`{b}c~efhiklnoqstvwy{|~¨êŬǮɯ˱̳εжҸӺջ׽ؿؿ׽ջӺҸжε̳˱ɯǮŬê¨~|{ywvtsqonlkihf~e}c{bz`x_w]u\tZsYqXpVnUmTlRlRmToUpVqXsYt[v\w]x_z`{b}c~efhiklnpqstvxy{}~©ĪƬǮɰ˱ͳεзҸԺռ׾ٿٿ׾ռԺҸзεͳ˱ɰǮƬĪ©~}{yxvtsqpnlkihf~e}c{bz`x_w]v\t[sYqXpVoUmTlRlSmToUpWrXsYt[v\w^y_za|b}deghjkmnpqsuvxz{}©īƭȮʰ˲ʹϵѷҹԻּؾؾּԻҹѷϵʹ˲ʰȮƭī©}{zxvusqpnmkjhge}d|bzay_w^v\t[sYrXpWoUmTlSlSnToUpWrXsZt[v\w^y_za|b}deghjkmnprsuwxz|}éūƭȯʰ̲ʹ϶ѸӹԻֽؾؾֽԻӹѸ϶ʹ̲ʰȯƭūé}|zxwusrpnmkjhge}d|bzay_w^v\t[sZrXpWoUnTlSlSnToVpWrXsZu[v]w^y_za|b}deghjlmoprtuwxz|}êūǭɯʱ̳δжѸӺջ׽ؿؿ׽ջӺѸжδ̳ʱɯǭūê}|zxwutrpomljhge}d|bzay_w^v]u[sZrXpWoVnTlSmSnToVqWrXsZu[v]x^y`{a|c~dfgijlmoprtuwyz|~¨êŬǮɯ˱̳εжҸӺռ׽ٿٿ׽ռӺҸжε̳˱ɯǮŬê¨~|zywutrpomljigf~d|c{ay`x^v]u[sZrXqWoVnTmSmSnToVqWrYsZu[v]x^y`{a|c~dfgijlmoqrtvwyz|~¨ĪƬǮɰ˱ͳεзҹԺּ׾ٿٿ׾ּԺҹзεͳ˱ɰǮƬ΍~|zywvtrqomljigf~d|c{ay`x^v]u[sZrYqWoVnTmSmSnUoVqWrYtZu\v]x^y`{a|c~dfgijlnoqrtvwy{|~©ĪƬȮɰ˲ͳϵѷҹԻּؾؾּԻҹѷϵͳ˲ɰȮƬĪ©~|{ywvtrqonljigf~d|c{ay`x^v]u\tZrYqWoVnUmSmSnUpVqWrYtZu\w]x_y`{a|c~dfgiklnoqstvwy{}~©īƭȮʰ˲ʹϵѷӹԻֽؾؾֽԻӹѷϵʹ˲ʰȮƭī©~}{ywvtsqonlkigf~d|c{ay`x_w]u\tZrYqWpVnUmSmSnUpVqXrYtZu\w]x_z`{b}c~efhiklnoqstvxy{}~éīƭȯʰ̲ʹ϶ѷӹջֽؿؿֽջӹѷ϶ʹ̲ʰȯƭīé~}{yxvtsqonlkihf~e}c{bz`x_w]u\tZrYqXpVnUmSmTnUpVqXrYtZu\w]x_z`{b}c~efhiklnpqstvxy{}~éūƭȯʱ̲δ϶ѸӹջֽؿؿֽջӹѸ϶δ̲ʱȯƭūé~}{yxvtsqpnlkihf~e}c{bz`x_w]u\tZrYqXpVnUmTmTnUpVqXsYtZu\w]x_z`{b}c~efhiklnpqsuvxy{}éūǭȯʱ̲δжѸӺջ׽ؿؿ׽ջӺѸжδ̲ʱȯǭūé}{yxvusqpnlkihf~e}c{bz`x_w]u\tZsYqXpVnUmTmTnUpVqXsYt[u\w]x_z`{b}c~efhikmnpqsuvxz{}êūǭȯʱ̳δжѸӺռ׽ٿٿ׽ռӺѸжδ̳ʱȯǭūê}{zxvusqpnmkihf~e}c{bz`x_w]u\t[sYqXpVnUmTmToUpVqXsYt[u\w]x_z`{b}c~efhikmnpqsuvxz{}êūǭɯʱ̳εжҸӺռ׽ٿٿ׽ռӺҸжε̳ʱɯǭūê}{zxvusqpnmkihf~e}c{bz`x_w]u\t[sYqXpVoUmTmToUpVqXsYt[v\w]x_z`{b}c~efhikmnpqsuvxz{}êŬǭɯʱ̳εжҸӺռ׽ٿٿ׽ռӺҸжε̳ʱɯǭŬê}{zxvusqpnmkihf~e}c{bz`x_w]v\t[sYqXpVoUmTmToUpVqXsYt[v\w]x_z`{b}c~efhjkmnpqsuvxz{}êŬǭɯ˱̳εжҸԺռ׾ٿٿ׾ռԺҸжε̳˱ɯǭŬê}{zxvusqpnmkjhf~e}c{bz`x_w]v\t[sYqXpVoUmTmToUpVqXsYt[v\w^x_z`{b}c~efhjkmnpqsuvxz{}êŬǭɯ˱̳εжҸԺռ׾ٿٿ׾ռԺҸжε̳˱ɯǭŬê}{zxvusqpnmkjhf~e}c{bz`x_w^v\t[sYqXpVoUmTmToUpVqXsYt[v\w^x_z`{b}c~efhjkmnpqsuvxz{}êŬǭɯ˱̳εжҸԺռ׾ٿٿ׾ռԺҸжε̳˱ɯǭŬê}{zxvusqpnmkjhf~e}c{bz`x_w^v\t[sYqXpVoUmTmToUpVqXsYt[v\w]x_z`{b}c~efhjkmnpqsuvxz{}êŬǭɯ˱̳εжҸԺռ׾ٿٿ׾ռԺҸжε̳˱ɯǭŬê}{zxvusqpnmkjhf~e}c{bz`x_w]v\t[sYqXpVoUmTmToUpVqXsYt[v\w]x_z`{b}c~efhikmnpqsuvxz{}êŬǭɯʱ̳εжҸӺռ׽ٿٿ׽ռӺҸжε̳ʱɯǭŬê}{zxvusqpnmkihf~e}c{bz`x_w]v\t[sYqXpVoUmTmToUpVqXsYt[u\w]x_z`{b}c~efhikmnpqsuvxz{}êūǭɯʱ̳εжҸӺռ׽ٿٿ׽ռӺҸжε̳ʱɯǭūê}{zxvusqpnmkihf~e}c{bz`x_w]u\t[sYqXpVoUmTmTnUpVqXsYt[u\w]x_z`{b}c~efhikmnpqsuvxz{}êūǭȯʱ̳δжѸӺռ׽ٿٿ׽ռӺѸжδ̳ʱȯǭūê}{zxvusqpnmkihf~e}c{bz`x_w]u\t[sYqXpVnUmTmTnUpVqXsYtZu\w]x_z`{b}c~efhiklnpqsuvxy{}éūǭȯʱ̲δжѸӺջ׽ؿؿ׽ջӺѸжδ̲ʱȯǭūé}{yxvusqpnlkihf~e}c{bz`x_w]u\tZsYqXpVnUmTmTnUpVqXrYtZu\w]x_z`{b}c~efhiklnpqstvxy{}~éūƭȯʱ̲δ϶ѸӹջֽؿؿֽջӹѸ϶δ̲ʱȯƭūé~}{yxvtsqpnlkihf~e}c{bz`x_w]u\tZrYqXpVnUmTmSnUpVqXrYtZu\w]x_z`{b}c~efhiklnoqstvxy{}~éīƭȯʰ̲ʹ϶ѷӹջֽؿؿֽջӹѷ϶ʹ̲ʰȯƭīé~}{yxvtsqonlkihf~e}c{bz`x_w]u\tZrYqXpVnUmSmSnUpVqWrYtZu\w]x_y`{a|c~dfgiklnoqstvwy{}~©īƭȮʰ˲ʹϵѷӹԻֽؾؾֽԻӹѷϵʹ˲ʰȮƭī©~}{ywvtsqonlkigf~d|c{ay`x_w]u\tZrYqWpVnUmSmSnUoVqWrYtZu\v]x^y`{a|c~dfgijlnoqrtvwy{|~©ĪƬȮɰ˲ͳϵѷҹԻּؾؾּԻҹѷϵͳ˲ɰȮƬĪ©~|{ywvtrqonljigf~d|c{ay`x^v]u\tZrYqWoVnUmSmSnToVqWrYsZu[v]x^y`{a|c~dfgijlmoqrtvwyz|~¨ĪƬǮɰ˱ͳεзҹԺּ׾ٿٿ׾ּԺҹзεͳ˱ɰǮƬ΍~|zywvtrqomljigf~d|c{ay`x^v]u[sZrYqWoVnTmSmSnToVqWrXsZu[v]x^y`{a|c~dfgijlmoprtuwyz|~¨êŬǮɯ˱̳εжҸӺռ׽ٿٿ׽ռӺҸжε̳˱ɯǮŬê¨~|zywutrpomljigf~d|c{ay`x^v]u[sZrXqWoVnTmSlSnToVpWrXsZu[v]w^y_za|b}deghjlmoprtuwxz|}êūǭɯʱ̳δжѸӺջ׽ؿؿ׽ջӺѸжδ̳ʱɯǭūê}|zxwutrpomljhge}d|bzay_w^v]u[sZrXpWoVnTlSlSnToUpWrXsZt[v\w^y_za|b}deghjkmnprsuwxz|}éūƭȯʰ̲ʹ϶ѸӹԻֽؾؾֽԻӹѸ϶ʹ̲ʰȯƭūé}|zxwusrpnmkjhge}d|bzay_w^v\t[sZrXpWoUnTlSlSmToUpWrXsYt[v\w^y_za|b}deghjkmnpqsuvxz{}©īƭȮʰ˲ʹϵѷҹԻּؾؾּԻҹѷϵʹ˲ʰȮƭī©}{zxvusqpnmkjhge}d|bzay_w^v\t[sYrXpWoUmTlSlRmToUpVqXsYt[v\w]x_z`{b}c~efhiklnpqstvxy{}~©ĪƬǮɰ˱ͳεзҸԺռ׾ٿٿ׾ռԺҸзεͳ˱ɰǮƬĪ©~}{yxvtsqpnlkihf~e}c{bz`x_w]v\t[sYqXpVoUmTlRlRmTnUpVqXsYtZu\w]x_z`{b}c~efhiklnoqstvwy{|~¨êŬǮɯ˱̳εжҸӺջ׽ؿؿ׽ջӺҸжε̳˱ɯǮŬê¨~|{ywvtsqonlkihf~e}c{bz`x_w]u\tZsYqXpVnUmTlRlRmSnUpVqWrYtZu\w]x^y`{a|c~dfgijlnoqrtvwyz|~êūǭȯʱ̲δ϶ѸӹԻֽؾؾֽԻӹѸ϶δ̲ʱȯǭūê~|zywvtrqonljigf~d|c{ay`x^w]u\tZrYqWpVnUmSlRkRmSnUoVqWrYtZu[v]x^y`{a|c~dfgijlmoprtuwyz|~éīƭȮʰ˲ʹϵѷҹԺּ׾׾ּԺҹѷϵʹ˲ʰȮƭīé~|zywutrpomljigf~d|c{ay`x^v]u[tZrYqWoVnUmSkRkRmSnToVqWrXsZu[v]x^y_za|b}deghjkmoprsuwxz|}©ĪƬǮɰ˱ͳεзҸӺռ׽ؿؿ׽ռӺҸзεͳ˱ɰǮƬĪ©}|zxwusrpomkjhge}d|bzay_x^v]u[sZrXqWoVnTmSkRkQlSnToUpWrXsZt[v\w^y_za|b}deghjkmnpqsuvxz{}~¨êŬǭɯʱ̳δ϶ѸӹջֽؾؾֽջӹѸ϶δ̳ʱɯǭŬê¨~}{zxvusqpnmkjhge}d|bzay_w^v\t[sZrXpWoUnTlSkQkQlSmToUpWqXsYt[v\w^x_z`{b}c~efhiklnpqstvxy{|~éūƭȯʰ˲ʹϵѷҹԺּ׾ٿٿ׾ּԺҹѷϵʹ˲ʰȯƭūé~|{yxvtsqpnlkihf~e}c{bz`x_w^v\t[sYqXpWoUmTlSkQkQlRmTnUpVqXsYtZu\w]x_z`{b}c~efhiklnoqrtvwyz|~©īƬǮɰ˱ͳεжҸӺռ׽ؿؿ׽ռӺҸжεͳ˱ɰǮƬī©~|zywvtrqonlkihf~e}c{bz`x_w]u\tZsYqXpVnUmTlRkQjQlRmSnUpVqWrYtZu\v]x^y`{a|c~dfgijlmoprtuwxz|}¨êŬǭɯʱ̲δ϶ѸӹԻּؾؾּԻӹѸ϶δ̲ʱɯǭŬê¨}|zxwutrpomljigf~d|c{ay`x^v]u\tZrYqWpVnUmSlRjQjQkRmSnToVqWrYsZu[v]x^y`za|b}deghjkmnprsuvxz{}éūƭȮʰ˲ʹϵзҹԺռ׽ٿٿ׽ռԺҹзϵʹ˲ʰȮƭūé}{zxvusrpnmkjhge}d|bzay`x^v]u[sZrYqWoVnTmSkRjQjPkRlSnToVpWrXsZt[v\w^y_za|b}deghjkmnpqstvxy{|~©ĪƬǮɰ˱̳εжѸӹջֽؾؾֽջӹѸжε̳˱ɰǮƬĪ©~|{yxvtsqpnmkjhge}d|bzay_w^v\t[sZrXpWoVnTlSkRjPjPkQlSmToUpWqXsYt[v\w]x_z`{b}c~efhiklnoqrtvwyz|~¨êūǭȯʱ̲ʹϵѷҹԺռ׾ٿٿ׾ռԺҹѷϵʹ̲ʱȯǭūê¨~|zywvtrqonlkihf~e}c{bz`x_w]v\t[sYqXpWoUmTlSkQjPiPkQlRmTnUpVqXrYtZu\w]x_y`{a|c~dfgijlmoprtuwxz|}éīƬȮɰ˱ͳεжҸӺջֽؾؾֽջӺҸжεͳ˱ɰȮƬīé}|zxwutrpomljigf~d|c{ay`x_w]u\tZrYqXpVnUmTlRkQiPiOjQlRmSnUoVqWrYtZu[v]x^y`{a|b}deghjkmnprsuvxy{}~¨ĪŬǭɯʱ̲ʹ϶ѷҹԺּ׾ٿٿ׾ּԺҹѷ϶ʹ̲ʱɯǭŬ΍~}{yxvusrpnmkjhge}d|b{ay`x^v]u[tZrYqWoVnUmSlRjQiOiOjPkRmSnToVpWrXsZu[v\w^y_za|b}defhiklnpqstvwy{|~éūƭȮɰ˲ͳεжҸӺջֽؾؾֽջӺҸжεͳ˲ɰȮƭūé~|{ywvtsqpnlkihfe}d|bzay_w^v\u[sZrXpWoVnTmSkRjPiOhOjPkQlSmToUpWqXsYt[v\w]x_z`{b}c~efhiklnoqrtuwxz|}©ĪŬǮɯʱ̲δ϶ѷҹԺռ׽ؿؿ׽ռԺҹѷ϶δ̲ʱɯǮŬĪ©}|zxwutrqonlkihf~e}c{bz`x_w]v\t[sYqXpWoUmTlSkQjPhOhOiPkQlRmTnUpVqXrYtZu\w]x^y`{a|c~dfgijlmoprsuvxz{}~éūƭȮɰ˲ͳεжѸӹջֽؾؾֽջӹѸжεͳ˲ɰȮƭūé~}{zxvusrpomljigf~d|c{ay`x^w]u\tZrYqXpVnUmTlRkQiPhOhNiOjQlRmSnUoVqWrYsZu[v]x^y_za|b}deghjkmnpqstvwy{|~©ĪŬǮɯʱ̲ʹϵѷҹԺռ׽ؿؿ׽ռԺҹѷϵʹ̲ʱɯǮŬĪ©~|{ywvtsqpnmkjhge}d|bzay_x^v]u[sZrYqWoVnUmSlRjQiOhNgNiOjPkRlSnToVpWrXsZt[v\w^y_z`{b}c~efhiklnoqrtuwxz|}éūƭȮɰ˱ͳεжѸӹԻּ׾ٿٿ׾ּԻӹѸжεͳ˱ɰȮƭūé}|zxwutrqonlkihf~e}c{bz`y_w^v\t[sZrXpWoVnTlSkRjPiOgNgNhOjPkQlSmToUpWqXsYt[u\w]x_z`{a|c~dfgijlmoprsuvxy{}~©ĪŬǭȯʱ̲ʹϵзҸӺջֽؾؾֽջӺҸзϵʹ̲ʱȯǭŬĪ©~}{yxvusrpomljigf~d|c{az`x_w]u\t[sYqXpWoUmTlSkQjPhOgNgMhNiPjQlRmTnUpVqWrYtZu[v]x^y`{a|b}deghjkmnpqstvwyz|~éīƭȮɰ˱̳δ϶ѷҹԺռ׽ؿؿ׽ռԺҹѷ϶δ̳˱ɰȮƭīé~|zywvtsqpnmkjhge}d|b{ay`x^v]u[tZrYqWpVnUmTlRjQiPhNgMfMhNiOjQkRmSnToVqWrXsZu[v\w^y_za{b}c~efhiklnoqrtuwxz{}¨ĪŬǭȯʰ˲ͳεжѸӹԻּ׾ؿؿ׾ּԻӹѸжεͳ˲ʰȯǭŬ΍}{zxwutrqonlkihf~e}c{bzay_w^v\u[sZrXqWoVnTmSkRjQiOhNfMfMgNhOjPkQlSnToUpWqXsYt[u\w]x_z`{a|c~dfgijlmoprsuvxy{|~éīƬǮɯʱ̲ʹϵзҸӺջֽ׾ٿٿ׾ֽջӺҸзϵʹ̲ʱɯǮƬīé~|{yxvusrpomljigf~d|c{az`x_w]u\t[sYqXpWoUnTlSkQjPhOgNfMfLgMhOiPkQlRmTnUpVqWrYtZu[v]x^y`za|b}deghjklnoqrtvwyz|}¨êūƭȮɰ˱̳δ϶ѷҹԺջֽؾؾֽջԺҹѷ϶δ̳˱ɰȮƭūê¨}|zywvtrqonlkjhge}d|bzay`x^v]u[tZrYqWpVnUmTlRkQiPhOgMfLeLfMhNiOjQkRmSnToVqWrXsZu[v\w^y_z`{b}c~efhijlmoprsuvxy{}~©ĪŬǭȯʰ˲ͳεжѸҹԺռ׽ؾؾ׽ռԺҹѸжεͳ˲ʰȯǭŬĪ©~}{yxvusrpomljihf~e}c{bz`y_w^v\u[sZrXqWoVnTmSkRjQiOhNfMeLeKfMgNiOjPkQlSnToUpWqXsYt[u\w]x_y`{a|c~dfghjkmnpqstvwyz|}éīƬǮɯʱ̲ʹϵжѸӹԻռ׽ؿؿ׽ռԻӹѸжϵʹ̲ʱɯǮƬīé}|zywvtsqpnmkjhgf~d|c{ay`x_w]u\t[sYqXpWoUnTlSkQjPiOgNfMeKeKfLgMhOiPkQlRmTnUpVqWrYtZu[v]x^y_za|b}defhiklnoqrtuwxz{}~¨êūƭȮɰ˱̲ʹϵзҸӹԻּ׽ؿؿ׽ּԻӹҸзϵʹ̲˱ɰȮƭūê¨~}{zxwutrqonlkihfe}d|bzay_x^v]u[tZrYqWpVnUmTlRkQiPhOgMfLeKdKeLfMhNiOjQkRmSnToVpWrXsZt[v\w^x_z`{b}c~dfgijlmnpqstvwyz|~©ĪŬǭȯɰ˱̳δ϶зҸӺԻּ׾ؿؿ׾ּԻӺҸз϶δ̳˱ɰȯǭŬĪ©~|zywvtsqpnmljigf~d}c{bz`x_w^v\t[sZrXpWoVnTmSkRjQiOhNfMeLdKdJeKfMgNhOjPkQlSmToUpVqXsYtZu\w]x^y`{a|b}deghjklnoqrtuwxz{}~éīŬǭȯʰ˲ͳδ϶ѷҸӺջּ׾ؿؿ׾ּջӺҸѷ϶δͳ˲ʰȯǭŬīé~}{zxwutrqonlkjhge}d|b{ay`x^w]u\tZsYqXpVoUmTlSkQjPhOgNfMeKdJcJdKfLgMhOiPjQlRmSnUoVqWrYsZu[v\w^y_za{b}c~efgijlmoprsuvwyz|~éīƬǮɯʰ˲ͳε϶ѷҹӺջּ׾ؿؿ׾ּջӺҹѷ϶εͳ˲ʰɯǮƬīé~|zywvusrpomljigf~e}c{bzay_w^v\u[sZrYqWoVnUmSlRjQiPhOgMfLdKcJcIdKeLfMhNiOjPkRlSnToUpWrXsYt[u\w]x_y`{a|c~deghjkmnoqrtuwxz{}~¨êūƭǮɯʱ̲ͳε϶ѷҹӺջּ׽ؿؿ׽ּջӺҹѷ϶εͳ̲ʱɯǮƭūê¨~}{zxwutrqonmkjhge~d|c{ay`x_w]u\t[sYrXpWoUnTlSkRjPiOhNfMeLdKcIbIdJeKfLgNhOjPkQlRmTnUpVqXrYtZu[v]x^y_za|b}c~efhijlmoprsuvwyz|}©êūƭȮɯʱ̲ͳε϶ѷҹӺԻּ׽ؾؾ׽ּԻӺҹѷ϶εͳ̲ʱɯȮƭūê©}|zywvusrpomljihf~e}c|bzay_x^v]u[tZrYqXpVnUmTlRkQjPhOgNfLeKdJbIbIcJdKeLgMhNiPjQkRmSnToVpWrXsZt[v\w]x_z`{a|c~dfghjkmnoqrtuwxz{}~©ĪŬƭȮɰʱ̲ͳε϶ѷҸӺԻռ׽ؾٿٿؾ׽ռԻӺҸѷ϶εͳ̲ʱɰȮƭŬĪ©~}{zxwutrqonmkjhgf~d|c{az`x_w]v\t[sZrXpWoVnTmSkRjQiPhNgMeLdKcJbIbHcIdJeLfMgNiOjPkQlSmToUpVqXrYtZu\v]x^y`za|b}d~efhijlmoprstvwyz|}©ĪŬƭȮɰʱ̲ͳε϶ѷҸӹԻռֽ׾ؿؿ׾ֽռԻӹҸѷ϶εͳ̲ʱɰȮƭŬĪ©}|zywvtsrpomljihf~e}d|bzay`x^v]u\tZrYqXpVoUmTlSkQjPiOgNfMeLdJcIbHaHbIcJeKfLgMhOiPjQlRmSnUoVqWrXsZt[v\w^x_z`{b|c~dfghjkmnoqrtuwxy{|~éĪŬǭȮɰʱ̲ͳε϶зҸӹԺջֽ׾ؿؿ׾ֽջԺӹҸз϶εͳ̲ʱɰȮǭŬĪé~|{yxwutrqonmkjhgf~d|c{bz`x_w^v\t[sZrXqWoVnUmSlRjQiPhOgMfLeKcJbIaHaGbHcIdKeLfMhNiOjPkRlSnToUpWqXsYtZu\v]x^y`za|b}d~efhijlmopqstvwyz|}~éĪŬǭȮɰʱ̲ͳδ϶зѸҹԺջּ׽ؾٿٿؾ׽ּջԺҹѸз϶δͳ̲ʱɰȮǭŬĪé~}|zywvtsqpomljihf~e}d|bzay`x^v]u\tZsYqXpWoUnTlSkRjPiOhNfMeLdKcIbHaG`GaHbIdJeKfLgNhOiPkQlRmTnUpVqWrYsZu[v\w^x_z`{b|c~dfghjklnoqrtuvxy{|~éĪŬƭȮɯʱ˲ͳδϵжѸҹӺԻռֽ׾ؿؿ׾ֽռԻӺҹѸжϵδͳ˲ʱɯȮƭŬĪé~|{yxvutrqonlkjhgf~d|c{bz`x_w^v\u[sZrYqWpVnUmTlRkQiPhOgNfLeKdJbIaH`G`FaGbIcJdKeLgMhNiOjQkRlSnToUpWqXsYtZu\w]x^y`za|b}d~efhijlmnpqstvwxz{}~éĪŬƭȮɯʰ˲̳ʹϵжѷҸӹԺջּ׽ؾؿؿؾ׽ּջԺӹҸѷжϵʹ̳˲ʰɯȮƭŬĪé~}{zxwvtsqpnmljihf~e}d|bzay`x^w]u\tZsYqXpWoUnTlSkRjQiOhNgMeLdKcJbIaG`F_F`GbHcIdJeKfMgNhOjPkQlRmTnUpVqWrYsZu[v\w^x_z`{b|c~dfghjklnoprsuvwyz|}éĪŬƭǮɯʰ˱̲ʹε϶зѸҹӺԻռֽ׽ؾٿٿؾ׽ֽռԻӺҹѸз϶εʹ̲˱ʰɯǮƭŬĪé}|zywvusrponlkjhgf~d|c{bz`x_w^v\u[sZrYqWpVnUmTlRkQjPhOgNfMeKdJcIbH`G_F_E`FaHbIcJdKfLgMhNiOjQkRmSnToUpWqXsYtZu\v]x^y`za|b}c~efgijlmnpqrtuwxy{|~©ĪūƭǮȯɰ˱̲ͳδϵжѷҸӹԺջռֽ׾ؾٿٿؾ׾ֽռջԺӹҸѷжϵδͳ̲˱ɰȯǮƭūĪ©~|{yxwutrqpnmljigf~e}c|bzay`x^v]u\tZsYqXpWoUnTmSkRjQiOhNgMfLdKcJbIaH`F_E^E_FaGbHcIdJeKfMgNhOjPkQlRmTnUpVqWrYsZu[v\w^x_z`{a|c~deghiklmoprstvwxz{}~©êūƬǭȯɰʱ˲̳ʹε϶зѸҹӹԺջּֽ׾ؾٿٿؾ׾ּֽջԺӹҹѸз϶εʹ̳˲ʱɰȯǭƬūê©~}{zxwvtsrpomlkihge~d|c{az`x_w^v\u[sZrYqWpVnUmTlRkQjPhOgNfMeKdJcIbHaG_F^E^D_E`GaHbIcJdKfLgMhNiPjQkRmSnToUpWqXsYtZu\v]x^y_za|b}c~efgijkmnoqrsuvxyz|}~©êīŬǭȮɯʰ˱̲ͳδϵжѷѸҹӺԺջռֽ׽ؾؿٿٿؿؾ׽ֽռջԺӺҹѸѷжϵδͳ̲˱ʰɯȮǭŬīê©~}|zyxvusrqonmkjigf~e}c|bzay_x^v]u\tZsYqXpWoUnTmSkRjQiPhNgMfLdKcJbIaH`G_E^D]D^E`FaGbHcIdJeLfMgNhOjPkQlRmTnUpVqWrXsZt[v\w]x_z`{a|c}defhijlmnpqstuwxy{|}¨éīŬƭǮȯɰʱ˲̳ʹεϵжѷҸҹӺԺջռּ׽׾ؾؿؿؾ׾׽ּռջԺӺҹҸѷжϵεʹ̳˲ʱɰȯǮƭŬīé¨}|{yxwutsqpnmljihfe}d|c{az`x_w]v\t[sZrXqWpVnUmTlRkQjPhOgNfMeLdJcIbHaG`F^E]D]C^D_F`GaHbIcJdKfLgMhNiPjQkRmSnToUpWqXsYtZu\v]x^y_za{b}c~dfghjklnoprstvwxz{|~éĪūƬǭȮɯʰ˱̲ͳʹε϶жѷҸҹӹԺԻռּֽ׽׾ؾؿٿٿؿؾ׾׽ּֽռԻԺӹҹҸѷж϶εʹͳ̲˱ʰɯȮǭƬūĪé~|{zxwvtsrponlkjhgf~d}c{bzay_x^v]u\tZsYqXpWoUnTmSkRjQiPhNgMfLdKcJbIaH`G_F^D]C\C]D_E`FaGbHcIdJeLfMgNhOjPkQlRmTnUoVqWrXsZt[v\w]x_y`{a|b}d~efgijkmnoqrsuvwyz{}~©êīŬƭǮȯɰʱ˱̲ͳδε϶жѷѸҹӹӺԺջռּֽ׽׾ؾؾؿٿٿٿٿؿؾؾ׾׽ּֽռջԺӺӹҹѸѷж϶εδͳ̲˱ʱɰȯǮƭŬīê©~}{zywvusrqonmkjigf~e}d|b{ay`x_w]v\t[sZrXqWoVnUmTlRkQjPhOgNfMeLdJcIbHaG`F_E]D\C\B]C^E_F`GaHbIcJdKfLgMhNiOjQkRlSnToUpVqXrYtZu[v]w^y_z`{b|c~deghiklmnpqrtuvxyz|}~¨éĪūƬǭȮȯɰʱ˲̲ͳʹεϵжзѸҸҹӹӺԺԻջռּֽ׽׽׾ؾؾؿؿؿٿٿٿٿٿٿٿٿٿٿؿؿؿؾؾ׾׽׽ּֽռջԻԺӺӹҹҸѸзжϵεʹͳ̲˲ʱɰȯȮǭƬūĪé¨~}|zyxvutrqpnmlkihge~d|c{bz`y_w^v]u[tZrYqXpVoUnTlSkRjQiOhNgMfLdKcJbIaH`G_F^E]C\B[B\C^D_E`FaGbHcIdJeKfMgNhOiPkQlRmSnUoVpWrXsYt[u\w]x^y`za|b}c~efghjklnopqstuwxy{|}©êīŬƭǭȮɯɰʱ˲̲ͳʹεϵ϶жѷѸҸҹӹӺԺԻԻջռּּֽֽֽ׽׽׽׽׾׾׾׾׽׽׽׽ּּֽֽֽռջԻԻԺӺӹҹҸѸѷж϶ϵεʹͳ̲˲ʱɰɯȮǭƭŬīê©}|{yxwutsqponlkjhgf~e}c|bzay`x^w]u\t[sYrXpWoVnUmSlRkQiPhOgNfMeKdJcIbHaG`F_E^D\C[B[A\B]C^E_F`GaHbIcJdKeLgMhNiOjPkRlSmToUpVqWrYsZu[v\w^x_y`{a|b}d~efhijkmnoqrstvwxz{|~¨éĪīŬƭǮȮɯɰʱ˱̲̳ʹδεϵ϶зѷѸҸҸҹӹӺӺԺԻԻջջջռռռռռռռռռռջջջԻԻԺӺӺӹҹҸҸѸѷз϶ϵεδʹ̳̲˱ʱɰɯȮǮƭŬīĪé¨~|{zxwvtsrqonmkjihf~e}d|b{ay`x_w^v\u[sZrYqWpVoUmTlSkRjPiOhNgMeLdKcJbIaH`G_F^E]C\B[AZA[B\C]D_E`FaGbHcIdJeKfLgNhOiPjQlRmSnToVpWqXsYtZu\v]w^y_z`{b|c~deghijlmnpqrsuvwyz{|~¨éĪūŬƭǮȮɯɰʱ˱˲̲ͳʹδεϵ϶жзѷѸѸҸҹҹӹӹӹӺӺӺӺԺԺԺԺӺӺӺӺӹӹӹҹҹҸѸѸѷзж϶ϵεδʹͳ̲˲˱ʱɰɯȮǮƭŬūĪé¨~|{zywvusrqpnmljihge~d|c{bz`y_w^v]u\tZsYqXpWoVnTmSlRjQiPhOgNfLeKdJcIbHaG`F_E]D\C[BZAZ@[A\B]C^D_F`GaHbIcJdKeLfMhNiOjPkQlSmTnUpVqWrXsZt[u\w]x^y`za|b}c~efghjklmopqrtuvxyz{}~©éĪūŬƭǭȮȯɰʰʱ˱˲̳ͳʹδεεϵ϶жжзѷѷѷѸѸѸҸҸҸҸҸҸҸҸѸѸѸѷѷѷзжж϶ϵεεδʹͳ̳˲˱ʱʰɰȯȮǭƭŬūĪé©~}{zyxvutrqpomlkjhgf~e}c|bzay`x^w]u\t[sZrXqWpVnUmTlSkQjPiOhNfMeLdKcJbIaH`G_F^D]C\B[AZ@Y@ZA[B\C]D^E_FaGbHcIdJeKfLgMhOiPjQkRmSnToUpVqXrYsZu[v\w^x_y`{a|b}d~efgijklnopqstuvxyz|}~©éĪūŬƬǭǮȮɯɰʰʱ˱˲̲̳ͳʹʹδεεϵϵ϶϶жжжжжжжжжжжж϶϶ϵϵεεδʹʹͳ̳̲˲˱ʱʰɰɯȮǮǭƬŬūĪé©~}|zyxvutsqponlkjigf~e}d|b{ay`x_w^v\u[sZrYqXpVoUnTmSkRjQiPhOgMfLeKdJcIbHaG_F^E]D\C[BZAY@Y?Z@[A\B]C^D_E`FaGbIcJdKeLfMgNhOjPkQlRmSnUoVpWrXsYtZu\v]w^y_z`{b|c}defhijkmnoprstuwxyz|}~©éĪīūƬƭǭǮȯɯɰʰʱ˱˱˲̲̳̳ͳͳʹʹδδδεεεεεεεεδδδʹʹͳͳ̳̳̲˲˱˱ʱʰɰɯȯǮǭƭƬūīĪé©~}|zyxwutsrponmkjihfe}d|c{bz`y_w^v]u\tZsYrXpWoVnUmSlRkQjPhOgNfMeLdKcJbIaG`F_E^D]C\B[AZ@Y?X?Y@ZA[B\C]D^E_F`GaHbIdJeKfLgMhNiOjPkRlSmTnUpVqWrXsZt[u\w]x^y_za{b}c~dfghijlmnoqrstvwxyz|}~¨éêĪūŬƬƭǭǮȮȯɯɰʰʰʱ˱˱˲˲̲̲̲̳̳̳̳̳̳̳̳̳̳̲̲̲˲˲˱˱ʱʰʰɰɯȯȮǮǭƭƬŬūĪêé¨~}|zyxwvtsrqonmljihgf~d}c{bzay_x^w]u\t[sZrXqWpVnUmTlSkRjPiOhNgMfLeKdJbIaH`G_F^E]D\C[BZAY@X?X>Y?Z@[A\B]C^D_E`FaGbHcIdJeKfMgNhOiPjQlRmSnToUpWqXrYsZu[v\w]x_y`{a|b}c~efghiklmnpqrstvwxy{|}~¨©éêīūŬƬƭǭǮǮȮȯɯɯɰɰʰʰʱʱʱʱʱ˱˱˱˱ʱʱʱʱʱʰʰɰɰɯɯȯȮǮǮǭƭƬŬūīê驨~}|{yxwvtsrqpnmlkihgf~e}c|b{ay`x_w]v\u[sZrYqXpWoUnTmSlRjQiPhOgNfMeKdJcIbHaG`F_E^D]C\B[AZ@Y?X>W>X?Y@ZA[B\C]D^E_F`GaHbIcJdKeLfMhNiOjPkQlRmTnUoVpWrXsYtZu[v]w^x_z`{a|b}d~efghjklmopqrsuvwxy{|}~¨©éêĪīūŬƬƭƭǭǮǮȮȮȯȯȯȯɯɯɯɯɯɯɯɯȯȯȯȯȮȮǮǮǭƭƭƬŬūīĪê驨~}|{yxwvusrqpomlkjhgf~e}d|b{az`x_w^v]u[tZsYrXpWoVnUmTlRkQjPiOhNfMeLdKcJbIaH`G_F^E]D\C[BZAY@X?W>W=X>Y?Z@[A\B]C^D_E`FaGbHcIdJeKfLgMhNiOjQkRlSmTnUpVqWrXsYt[u\v]x^y_z`{b|c}defgijklmopqrsuvwxy{|}~¨©éêêĪīūūŬƬƬƭƭƭǭǭǭǭǭǭǭǭǭǭǭǭƭƭƭƬƬŬūūīĪêê驨~}|{yxwvusrqpomlkjigfe}d|c{bz`y_x^v]u\t[sYrXqWpVnUmTlSkRjQiOhNgMfLeKdJcIbHaG`F_E^D]C\B[AZ@Y?X>W=V=W>X?Y@ZA[B\B]C^D_E`FaGbHcJdKeLfMgNhOiPjQkRmSnToUpVqXrYsZt[v\w]x^y`za{b|c~deghijklnopqrtuvwxy{|}~¨©©éêêĪĪīīūūūūŬŬŬŬŬŬūūūūīīĪĪêêé©©¨~}|{yxwvutrqponlkjihge~d|c{bzay`x^w]v\t[sZrYqXpVoUnTmSkRjQiPhOgNfMeLdKcJbHaG`F_E^D]C\B[BZAY@X?W>V=VY?Z@ZA[B\C]D^E_F`GaHbIcJdKeLfMhNiOjPkQlRmSnUoVpWqXrYtZu[v\w]x_y`za|b}c~dfghijkmnopqrtuvwxyz|}~¨¨©©éééêêêêêêêêêêééé©©¨¨~}|zyxwvutrqponmkjihgf~d}c|bzay`x_w]v\u[tZrYqXpWoVnUmSlRkQjPiOhNfMeLdKcJbIaH`G_F^E]D\C[BZAZ@Y?X>W=VX?Y?Z@[A\B]C^D_E`FaGbHcIdJeKfLgMhNiOjPkRlSmTnUoVpWrXsYtZu[v]w^x_y`{a|b}c~efghijkmnopqrtuvwxyz|}~~}|zyxwvutrqponmkjihgf~e}c|b{ay`x_w^v]u[tZsYrXpWoVnUmTlSkRjPiOhNgMfLeKdJcIbHaG`F_E^D]C\B[AZ@Y?X?W>V=UX?Y@ZA[B\C]D^E_F`GaHbIcJdKeLfMgNhOiPjQkRlSmToUpVqWrXsYt[u\v]w^y_z`{a|b}d~efghijlmnopqrtuvwxyz{|~~|{zyxwvutrqponmljihgf~e}d|b{az`y_w^v]u\t[sYrXqWpVoUmTlSkRjQiPhOgNfMeLdKcJbIaH`G_F^E]D\C[BZAY@X?W>W=VY?Z@[A\B\C]D^E_F`GaHbIcJdKeLfMgNhOjPkQlRmSnToUpVqWrYsZt[u\v]x^y_z`{a|c}d~efghijlmnopqrsuvwxyz{|}~~}|{zyxwvusrqponmljihgf~e}d|c{az`y_x^v]u\t[sZrYqWpVoUnTmSlRkQjPhOgNfMeLdKcJbIaH`G_F^E]D\C\B[AZ@Y?X>W=VX?Y@Z@[A\B]C^D_E`FaGbHcIdJeKfLgMhNiOjPkQlRmSnToVpWqXrYsZt[v\w]x^y_z`{b|c}d~efghijlmnopqrstvwxyz{|}~~}|{zyxwvtsrqponmljihgf~e}d|c{bz`y_x^w]v\t[sZrYqXpWoVnTmSlRkQjPiOhNgMfLeKdJcIbHaG`F_E^D]C\B[AZ@Y@X?W>V=UX?Y@ZA[B\C]D^E_F`FaGbHcIdJeKfLgMhNiOjQkRlSmTnUoVpWqXrYtZu[v\w]x^y_za{b|c}d~efghijlmnopqrstuvxyz{|}~~}|{zyxvutsrqponmljihgf~e}d|c{bzay_x^w]v\u[tZrYqXpWoVnUmTlSkRjQiOhNgMfLeKdJcIbHaG`F_F^E]D\C[BZAY@X?X>W=VY?Z@[A\B\C]D^E_F`GaHbIcJdKeLfMgNhOiPjQkRlSmTnUoVqWrXsYtZu[v\w]x_y`za{b|c}defghijlmnopqrstuvwxyz{|}~~}|{zyxwvutsrqponmljihgfe}d|c{bzay`x_w]v\u[tZsYrXqWoVnUmTlSkRjQiPhOgNfMeLdKcJbIaH`G_F^E]D\C\B[AZ@Y?X>W=V=UX?Y@Z@[A\B]C^D_E`FaGaHbIcJdKeLfMgNhOiPjQkRmSnToUpVqWrXsYtZu[v\w^x_y`za{b|c}defghijkmnopqrstuvwxyz{|}~~}|{zyxwvutsrqponmkjihgfe}d|c{bzay`x_w^v\u[tZsYrXqWpVoUnTmSkRjQiPhOgNfMeLdKcJbIaHaG`F_E^D]C\B[AZ@Y@X?W>V=UX?Y@ZA[B\C]C^D_E`FaGbHcIdJeKfLgMhNiOjPkQlRmSnToUpVqWrXsYtZu[v]w^x_y`za{b|c}defghijklmopqrstuvwxyz{|}~~}|{zyxwvutsrqpomlkjihgfe}d|c{bzay`x_w^v]u[tZsYrXqWpVoUnTmSlRkQjPiOhNgMfLeKdJcIbHaG`F_E^D]C\C[BZAY@X?X>W=VY?Z@ZA[B\C]D^E_F`GaHbHcIdJeKfLgMhNiOjPkQlRmSnToUpVqWrXsYt[u\v]w^x_y`za{b|c}d~efghijklmnopqrstuvwxyz{|}~~}|{zyxwvutsrqponmlkjihgf~e}d|c{bzay`x_w^v]u\t[sYrXqWpVoUnTmSlRkQjPiOhNgMfLeKdJcIbHaH`G_F^E]D\C[BZAZ@Y?X>W=V=UX?Y?Z@[A\B]C]D^E_F`GaHbIcJdKeLfMgNhNiOjPkQlRmSnToUpWqXrYsZt[u\v]w^x_y`za{b|c}d~efghijklmnopqrstuvwxyz{|}~~~~}|{zyxwvutsrqponmlkjihgf~e}d|c{bzay`x_w^v]u\t[sZrYqXpWoUnTmSlRkQjPiOhNgNfMeLdKcJbIaH`G_F^E]D]C\B[AZ@Y?X?W>V=UX?Y@ZA[A\B]C^D_E`F`GaHbIcJdKeLfMgNhOiPjQkRlSmTnUoVpWqXrYsZt[u\v]w^x_y`za{b|c}d~efghijklmnopqrstuvwxxyz{|}~~}|{zyxxwvutsrqponmlkjihgf~e}d|c{bzay`x_w^v]u\t[sZrYqXpWoVnUmTlSkRjQiPhOgNfMeLdKcJbIaH`G`F_E^D]C\B[AZAY@X?W>W=VY?Y@ZA[B\C]C^D_E`FaGbHcIcJdKeLfMgNhOiPjQkRlSmTnUoVpWqXrYsZt[u\v]w^x_y`za{b|c}d~efghijklmnopqqrstuvwxyz{||}~~}||{zyxwvutsrqqponmlkjihgf~e}d|c{bzay`x_w^v]u\t[sZrYqXpWoVnUmTlSkRjQiPhOgNfMeLdKcJcIbHaG`F_E^D]C\C[BZAY@Y?X>W=VX>Y?Z@[A[B\C]D^E_F`FaGbHcIdJeKfLfMgNhOiPjQkRlSmTnUoVpWqXrYsZt[u\v]w^x_y`za{b|c}d~efgghijklmnopqrstuvwwxyz{|}}~~}}|{zyxwwvutsrqponmlkjihggf~e}d|c{bzay`x_w^v]u\t[sZrYqXpWoVnUmTlSkRjQiPhOgNfMfLeKdJcIbHaG`F_F^E]D\C[B[AZ@Y?X>W>V=UX?Y?Z@[A\B\C]D^E_F`GaGbHcIdJeKfLgMhNhOiPjQkRlSmTnUoVpWqXrYsZt[u\v]w^x_y_z`{a|b}c~defghijklmnopqrsstuvwxyyz{|}~~~~}|{zyyxwvutssrqponmlkjihgfe~d}c|b{az`y_x_w^v]u\t[sZrYqXpWoVnUmTlSkRjQiPhOhNgMfLeKdJcIbHaG`G_F^E]D\C\B[AZ@Y?X?W>V=VX?Y@ZA[A\B]C^D^E_F`GaHbIcIdJeKfLgMhNiOiPjQkRlSmTnUoVpWqXrYsZt[u[v\w]x^y_z`{a|b}c~defghijklmnnopqrstuvvwxyzz{|}~~~~}|{zzyxwvvutsrqponnmlkjihgfe~d}c|b{az`y_x^w]v\u[t[sZrYqXpWoVnUmTlSkRjQiPiOhNgMfLeKdJcIbIaH`G_F^E^D]C\B[AZAY@X?W>W=VX?Y@ZA[B\B]C^D_E_F`GaHbIcJdJeKfLgMhNiOjPjQkRlSmTnUoVpWqXrYsYtZu[v\w]x^y_z`{a|b|c}d~efghijjklmnopqrrstuvwwxyzz{|}}~~}}|{zzyxwwvutsrrqponmlkjjihgf~e}d|c|b{az`y_x^w]v\u[tZsYrYqXpWoVnUmTlSkRjQjPiOhNgMfLeKdJcJbIaH`G_F_E^D]C\B[BZAY@X?X>W=VY?Y@ZA[B\C]C^D_E`F`GaHbIcJdKeKfLgMhNiOjPjQkRlSmTnUoVpWqXrXsYtZu[v\w]x^y_y`za{b|c}d~effghijklmnnopqrsttuvwwxyzz{|}}~~}}|{zzyxwwvuttsrqponnmlkjihgff~e}d|c{bzay`y_x^w]v\u[tZsYrXqXpWoVnUmTlSkRjQjPiOhNgMfLeKdKcJbIaH`G`F_E^D]C\C[BZAY@Y?X>W=V=UX>Y?Z@ZA[B\C]D^D_E`FaGaHbIcJdKeLfLgMhNiOjPjQkRlSmTnUoVpWqWrXsYtZu[v\v]w^x_y`za{b|b}c~defghijkklmnoppqrsttuvwwxyzz{||}~~~~}||{zzyxwwvuttsrqpponmlkkjihgfe~d}c|b{bzay`x_w^v]v\u[tZsYrXqWpWoVnUmTlSkRjQjPiOhNgMfLeLdKcJbIaHaG`F_E^D]D\C[BZAZ@Y?X>W>V=UX?Y?Z@[A[B\C]D^D_E`FaGaHbIcJdKeLfLgMhNiOjPjQkRlSmTnUoUpVqWrXsYtZt[u\v]w^x_y`z`{a|b}c}d~efghhijklmmnopqqrstuuvwwxyyz{{|}}~~~~}}|{{zyyxwwvuutsrqqponmmlkjihhgf~e}d}c|b{az`y`x_w^v]u\t[tZsYrXqWpVoUnUmTlSkRjQjPiOhNgMfLeLdKcJbIaHaG`F_E^D]D\C[B[AZ@Y?X?W>V=VX?Y@Z@[A\B\C]D^E_E`FaGbHbIcJdKeLfLgMhNiOiPjQkRlSmTnToUpVqWrXrYsZt[u\v]w]x^y_z`{a{b|c}d~eefghijjklmnnopqrrstuuvwwxyyzz{||}}~~~~}}||{zzyyxwwvuutsrrqponnmlkjjihgfe~e}d|c{b{az`y_x^w]v]u\t[sZrYrXqWpVoUnTmTlSkRjQiPiOhNgMfLeLdKcJbIbHaG`F_E^E]D\C\B[AZ@Y@X?W>W=VX?Y@Z@[A\B\C]D^E_E`FaGbHbIcJdKeLfLgMhNiOiPjQkRlSmSnToUpVqWqXrYsZt[u[v\w]x^x_y`za{b|b}c~d~efgghijkllmnoopqrrsttuvvwxxyyz{{||}}~~~~}}||{{zyyxxwvvuttsrrqpoonmllkjihggf~e~d}c|b{bzay`x_x^w]v\u[t[sZrYqXqWpVoUnTmSlSkRjQiPiOhNgMfLeLdKcJbIbHaG`F_E^E]D\C\B[AZ@Y@X?W>W=VX?Y@ZA[A\B]C]D^E_F`FaGbHbIcJdKeLfLgMhNhOiPjQkRlRmSnToUoVpWqXrYsYtZu[v\v]w^x_y_z`{a|b|c}d~eefghiijkllmnoopqrrsttuvvwwxxyzz{{|||}}~~~~~~}}|||{{zzyxxwwvvuttsrrqpoonmllkjiihgfe~e}d|c|b{az`y_x_w^v]v\u[tZsYrYqXpWoVoUnTmSlRkRjQiPhOhNgMfLeLdKcJbIbHaG`F_F^E]D]C\B[AZAY@X?X>W=VX?Y@ZA[A\B]C]D^E_F`FaGbHbIcJdKeKfLgMhNhOiPjQkQlRmSnTnUoVpWqWrXsYtZt[u\v]w]x^y_y`za{b|b}c~d~effghijjklmmnoopqqrsstuuvvwwxxyyzz{{|||}}~~~~~~~~}}|||{{zzyyxxwwvvuutssrqqpoonmmlkjjihgff~e~d}c|b{bzay`y_x^w]v]u\t[tZsYrXqWpWoVnUnTmSlRkQjQiPhOhNgMfLeKdKcJbIbHaG`F_F^E]D]C\B[AZAY@X?X>W=V=UY?Y@ZA[A\B]C]D^E_F`FaGbHbIcJdKeKfLgMgNhOiPjPkQlRmSmTnUoVpVqWrXrYsZt[u[v\w]w^x_y`z`{a|b|c}d~defgghijjklmmnoopqqrrsttuuvvwwxxyyzzz{{||||}}}}~~~~~~~~~~~~}}}}||||{{zzzyyxxwwvvuuttsrrqqpoonmmlkjjihggfe~d}d|c|b{az`y`x_w^w]v\u[t[sZrYrXqWpVoVnUmTmSlRkQjPiPhOgNgMfLeKdKcJbIbHaG`F_F^E]D]C\B[AZAY@Y?X>W=V=UX>Y?Y@ZA[A\B]C]D^E_F`FaGaHbIcJdJeKfLfMgNhOiOjPkQkRlSmTnToUpVpWqXrYsYtZu[u\v]w^x^y_y`za{b|b}c}d~eefghhijjklmmnnoppqrrssttuuvvwwxxxyyzzzz{{{|||||}}}}}}}}}}}}}}}}}}|||||{{{zzzzyyxxxwwvvuuttssrrqpponnmmlkjjihhgfe~e}d}c|b{bzay`y_x^w^v]u\u[tZsYrYqXpWpVoUnTmTlSkRkQjPiOhOgNfMfLeKdJcJbIaHaG`F_F^E]D]C\B[AZAY@Y?X>W>V=UX>Y?Y@ZA[A\B]C]D^E_E`FaGaHbIcJdJeKfLfMgNhNiOjPjQkRlSmSnToUoVpWqXrXsYsZt[u\v\w]w^x_y`z`{a{b|c}c~d~effghhijjkllmnnoopqqrrssttuuvvvwwxxxyyyyzzzzz{{{{{{{{{{{{{{{{{{{{zzzzzyyyyxxxwwvvvuuttssrrqqpoonnmllkjjihhgff~e~d}c|c{b{az`y`x_w^w]v\u\t[sZsYrXqXpWoVoUnTmSlSkRjQjPiOhNgNfMfLeKdJcJbIaHaG`F_E^E]D]C\B[AZAY@Y?X>W>V=VX>Y?Y@ZA[A\B]C]D^E_E`FaGaHbIcIdJeKeLfMgNhNiOiPjQkRlRmSmTnUoVpVqWrXrYsZtZu[u\v]w^x^y_y`za{a|b|c}c~d~effghhijjkllmmnooppqqrrsstttuuvvvwwwwxxxxyyyyyyyzzzzzzzzzzyyyyyyyxxxxwwwwvvvuutttssrrqqppoonmmllkjjihhgff~e~d}c|c|b{azay`y_x^w^v]u\u[tZsZrYrXqWpVoVnUmTmSlRkRjQiPiOhNgNfMeLeKdJcIbIaHaG`F_E^E]D]C\B[AZAY@Y?X>W>V=VX>Y?Y@ZA[A\B]C]D^E_E`F`GaHbIcIdJdKeLfMgMhNhOiPjQkQlRlSmTnUoUpVpWqXrXsYsZt[u\v\w]w^x_y_z`za{a|b|c}d~d~effghhijjkkllmnnooppqqrrrsstttuuuvvvvwwwwwwxxxxxxxxxxxxxxxxwwwwwwvvvvuuutttssrrrqqppoonnmllkkjjihhgff~e~d}d|c|b{azaz`y_x_w^w]v\u\t[sZsYrXqXpWpVoUnUmTlSlRkQjQiPhOhNgMfMeLdKdJcIbIaH`G`F_E^E]D]C\B[AZAY@Y?X>W>V=VX>Y?Y@ZA[A\B\C]D^D_E`F`GaHbHcIcJdKeLfLgMgNhOiOjPkQkRlSmSnTnUoVpWqWrXrYsZtZu[u\v]w]x^x_y_z`za{b|b|c}d~d~effgghiijjkllmmnnoopppqqrrrsssttttuuuuvvvvvvvvvvvvvvvvvvvvvvuuuuttttsssrrrqqpppoonnmmllkjjiihggff~e~d}d|c|b{bzaz`y_x_x^w]v]u\u[tZsZrYrXqWpWoVnUnTmSlSkRkQjPiOhOgNgMfLeLdKcJcIbHaH`G`F_E^D]D\C\B[AZAY@Y?X>W>V=VX>Y?Y@ZA[A\B\C]D^D_E_F`GaGbHcIcJdKeKfLfMgNhNiOjPjQkRlRmSmTnUoUpVpWqXrXsYsZt[u[v\v]w]x^x_y`z`za{b|b|c}d~d~eefgghhijjkkllmmnnnoopppqqqrrrsssstttttttuuuuuuuuuuuutttttttssssrrrqqqpppoonnnmmllkkjjihhggfe~e~d}d|c|b{bzaz`y`x_x^w]v]v\u[t[sZsYrXqXpWpVoUnUmTmSlRkRjQjPiOhNgNfMfLeKdKcJcIbHaG`G_F_E^D]D\C\B[AZAY@Y?X>W>V=VX>Y?Y@ZA[A\B\C]D^D_E_F`GaGbHbIcJdJeKeLfMgMhNhOiPjPkQkRlSmTnTnUoVpVqWqXrYsYtZt[u\v\v]w^x^x_y`z`za{b|b|c}c~d~eeffghhiijjkklllmmnnnooppppqqqqrrrrrssssssssssssssssssrrrrrqqqqppppoonnnmmlllkkjjiihhgffe~e~d}c|c|b{bzaz`y`x_x^w^v]v\u\t[tZsYrYqXqWpVoVnUnTmTlSkRkQjPiPhOhNgMfMeLeKdJcJbIbHaG`G_F_E^D]D\C\B[AZAY@Y?X>W>V=VX>X?Y@Z@[A[B\C]C^D^E_F`FaGaHbIcIdJdKeLfLgMgNhOiOjPjQkRlRmSmTnUoUpVpWqWrXrYsZtZt[u\v\v]w^x^x_y`z`za{a|b|c}c}d~deffgghhiijjkkkllmmmnnnoooopppppqqqqqqqqqqqqqqqqqqqqqqpppppoooonnnmmmllkkkjjiihhggffe~d}d}c|c|b{azaz`y`x_x^w^v]v\u\t[tZsZrYrXqWpWpVoUnUmTmSlRkRjQjPiOhOgNgMfLeLdKdJcIbIaHaG`F_F^E^D]C\C[B[AZ@Y@X?X>W>V=VX?Y@Z@[A[B\C]C^D^E_F`F`GaHbHcIcJdKeKfLfMgNhNiOiPjQkQlRlSmSnTnUoVpVpWqXrXsYsZtZu[u\v\w]w^x^x_y`z`za{a{b|b}c}d~d~eeffgghhiiijjkkklllmmmnnnnnooooooppppppppppppppoooooonnnnnmmmlllkkkjjiiihhggffe~e~d}d}c|b{b{azaz`y`x_x^w^w]v\u\u[tZsZsYrXqXpWpVoVnUnTmSlSlRkQjQiPiOhNgNfMfLeKdKcJcIbHaH`G`F_F^E^D]C\C[B[AZ@Y@X?X>W=V=VX?Y@Z@ZA[B\B]C]D^E_E`F`GaHbHbIcJdJeKeLfMgMhNhOiOjPjQkRlRmSmTnToUoVpVqWqXrXsYsZtZu[u\v\v]w^x^x_y_y`za{a{b|b|c}c}d~d~eeffgghhhiijjjkkkkllllmmmmmnnnnnnnnnnnnnnnnnnnnmmmmmllllkkkkjjjiihhhggffe~e~d}d}c|c|b{b{azay`y_x_x^w^v]v\u\u[tZsZsYrXqXqWpVoVoUnTmTmSlRkRjQjPiOhOhNgMfMeLeKdJcJbIbHaH`G`F_E^E]D]C\B[BZAZ@Y@X?X>W=V=UX?Y?Z@ZA[B\B\C]D^D_E_F`GaGaHbIcIdJdKeLfLfMgNhNiOiPjPkQkRlSmSmTnUoUoVpWqWqXrYsYsZtZu[u\v\v]w]x^x_y_y`z`za{a{b|b|c}c}d~d~eefffgghhhiiijjjjkkkkllllllllmmmmmmmmmmllllllllkkkkjjjjiiihhhggfffe~e~d}d}c|c|b{b{azaz`y`y_x_x^w]v]v\u\u[tZsZsYrYqXqWpWoVoUnUmTmSlSkRkQjPiPiOhNgNfMfLeLdKdJcIbIaHaG`G_F_E^D]D\C\B[BZAZ@Y?X?W>W=V=UX?Y?Y@ZA[A\B\C]C^D^E_F`FaGaHbHcIcJdKeKeLfMgMhNhOiOjPjQkQlRlSmSnTnUoUpVpWqWqXrYsYsZtZt[u\v\v]w]w^x^x_y_y`z`za{a{b|b|c}c}d~d~eeeffggghhhhiiiijjjjjjkkkkkkkkkkkkkkkkkkjjjjjjiiiihhhhgggffee~e~d}d}c|c|b{b{azaz`y`y_x_x^w^w]v]v\u\t[tZsZsYrYqXqWpWpVoUnUnTmSlSlRkQjQjPiOhOhNgMfMeLeKdKcJcIbHaHaG`F_F^E^D]C\C\B[AZAY@Y?X?W>W=VX>Y?Y@ZA[A[B\C]C]D^E_E`F`GaGbHbIcJdJdKeLfLfMgNhNhOiPjPjQkRlRlSmTnTnUoUpVpWqWqXrYsYsZtZt[u[u\v\w]w^x^x_y_y`z`za{a{a{b|b|c}c}d}d~d~eeefffgggghhhhhiiiiiiiiiijjjjiiiiiiiiiihhhhhggggfffee~e~d}d}d}c|c|b{b{a{azaz`y`y_x_x^w^w]v\u\u[t[tZsZsYrYqXqWpWpVoUnUnTmTlSlRkRjQjPiPhOhNgNfMfLeLdKdJcJbIbHaG`G`F_E^E]D]C\C[B[AZAY@Y?X>W>W=VX>X?Y@Z@[A[B\B]C]D^D_E_F`FaGaHbIcIcJdKeKeLfMgMgNhOiOiPjPkQkRlRmSmTnTnUoUpVpWqWqXrXrYsZtZt[u[u\v\v]w]w^x^x_y_y`z`z`za{a{b|b|b|c}c}d}d~d~e~eeeffffggggggghhhhhhhhhhhhhhhhgggggggffffee~e~e~d}d}d}c|c|b|b{b{azaz`z`y`y_x_x^w^w]v]v\u\u[t[tZsZrYrXqXqWpWpVoUnUnTmTmSlRkRkQjPiPiOhOgNgMfMeLeKdKcJcIbIaHaG`F_F_E^D]D]C\B[B[AZ@Y@X?X>W>V=VX?Y?Z@ZA[A\B\C]C^D^E_F`F`GaHbHbIcJdJdKeKfLfMgMhNhOiOiPjQkQkRlRmSmTnTnUoUpVpWqWqXrXrYsYsZtZt[u[u\v\v]w]w^x^x_y_y_y`z`za{a{a{b|b|b|c}c}c}d}d~d~d~e~eeeeffffffffffffffffffffffffeee~e~e~d~d}d}d}c}c|c|b|b{b{a{azaz`y`y_y_x_x^w^w]v]v\u\u[t[tZsZsYrYrXqXqWpWpVoUnUnTmTmSlRkRkQjQiPiOhOhNgMfMfLeKdKdJcJbIbHaH`G`F_F^E^D]C\C\B[AZAZ@Y?X?X>W=V=VX?Y?Y@ZA[A[B\C]C]D^E_E_F`GaGaHbHcIcJdJeKeLfLfMgNhNhOiOjPjQkQkRlRmSmTnTnUoUoVpVpWqXrXrYsYsZtZt[u[u[u\v\v]w]w^x^x^x_y_y`y`z`zaza{a{b{b|b|b|c|c}c}c}d}d}d~d~d~d~d~e~e~e~e~e~e~e~e~e~e~e~e~e~e~e~e~d~d~d~d}d}d}d}c}c|c|c|b|b{b{b{azazaz`y`y`y_x_x^x^w^w]v]v\u\u[u[t[tZsZsYrYrXqXpWpVoVoUnUnTmTmSlRkRkQjQjPiOhOhNgNfMfLeLeKdJcJcIbHaHaG`G_F_E^E]D]C\C[B[AZAY@Y?X?W>W=V=UX>Y?Y@Z@ZA[B\B\C]D^D^E_F`F`GaGbHbIcIdJdKeKeLfLgMgNhNhOiPjPjQkQkRlRlSmTnTnUoUoVpVpWqWqXrXrYsYsZtZt[u[u[u\v\v]w]w]w^x^x_x_y_y`y`z`z`zaza{a{a{b{b|b|b|b|c|c|c|c}c}c}c}c}c}c}c}c}c}c}c}c}c}c}c}c|c|c|c|c|b|b|b{b{b{a{azazaz`z`y`y`y_x_x_x^w^w]w]v]v\u\u[u[t[tZsZsYrYrXqXqWpWpVoVoUnUnTmTlSlRkRkQjQjPiPhOhNgNgMfLeLeKdKdJcIbIbHaG`G`F_F^E^D]D\C\B[BZAZ@Y@Y?X>W>W=VX>X?Y?Z@ZA[A\B\C]C]D^E_E_F`FaGaHbHbIcJdJdKeKeLfMgMgNhNhOiPjPjQkQkRlRlSmSmTnTnUoUoVpVpWqWqXrXrYsYsZtZt[t[u[u\v\v\v]w]w]w^x^x^x_x_y_y_y`y`z`z`zazaza{a{a{a{a{b{b{b{b{b{b{b{b{b{b{b{b{b{b{b{b{a{a{a{azazazaz`z`y`y`y_y_x_x_x^x^w^w]w]v]v\v\u\u[t[t[tZsZsYrYrXqXqWpWpVoVoUnUnTmTmSlSlRkRkQjQjPiPhOhNgNgMfMeLeKdKdJcJbIbHaHaG`F_F_E^E]D]C\C\B[AZAZ@Y?X?X>W>V=VX?Y?Y@Z@[A[B\B\C]D^D^E_E`F`GaGaHbIcIcJdJdKeKfLfMgMgNhNhOiOjPjQkQkRlRlSmSmTnTnUoUoVpVpWqWqWqXrXrYsYsZsZtZt[u[u[u\v\v\v]v]w]w^w^x^x^x^x_x_y_y_y_y`y`y`y`z`z`z`z`z`z`z`z`z`z`z`z`z`z`z`z`y`y`y`y`y_y_y_x_x_x^x^x^w^w^w]v]v]v\v\u\u[u[t[tZsZsZsYrYrXqXqWqWpWpVoVoUnUnTmTmSlSlRkRkQjQjPiOhOhNgNgMfMfLeKdKdJcJcIbIaHaG`G`F_E^E^D]D\C\B[B[AZ@Y@Y?X?W>W=V=VX>X?Y@Z@ZA[A\B\C]C]D^D_E_F`F`GaGbHbIcIcJdJdKeLfLfMgMgNhNhOiOiPjPjQkQkRlRlSmSmTnTnUoUoVpVpWqWqWqXrXrYrYsYsZtZtZt[t[u[u\u\v\v\v]v]w]w]w]w^w^w^x^x^x^x_x_x_x_x_x_x_x_x_x_x_x_x_x_x_x_x_x_x^x^x^w^w^w^w]w]w]v]v]v\v\u\u\u[t[t[tZtZsZsYrYrYrXqXqWqWpWpVoVoUnUnTmTmSlSlRkRkQjQjPiPiOhOhNgNgMfMfLeLdKdJcJcIbIbHaG`G`F_F_E^D]D]C\C\B[AZAZ@Y@X?X>W>W=V%?%?&@&@'A'A(B(B)C*D*D+E+E,F,F-G-G.H/I/I0J0J1K1K2L3M3M4N4N5O6P6P7Q7Q8R9S9S:T:T;UX?Y?Y@Z@[A[B\B\C]C^D^E_E_F`FaGaHbHbIcIcJdJdKeLfLfMgMgNhNhOiOiPjPjQkQkRlRlSmSmTnTnTnUoUoVpVpWpWqWqXqXrXrYrYsYsZsZtZtZt[t[u[u[u\u\v\v\v\v]v]v]v]w]w]w]w]w]w]w]w]w^w^w]w]w]w]w]w]w]w]v]v]v]v]v\v\v\u\u\u[u[t[t[tZtZsZsZsYrYrYrXqXqXqWpWpWpVoVoUnUnTnTmTmSlSlRkRkQjQjPiPiOhOhNgNgMfMfLeLdKdJcJcIbIbHaHaG`F_F_E^E^D]C\C\B[B[AZ@Y@Y?X?X>W=V=V%>$>%?%?&@&@'A'A(B(B)C)D*D+E+E,F,F-G-G.H.I/I0J0J1K1K2L2M3M4N4N5O5O6P7Q7Q8R8R9S:T:T;U;UX>X?Y@Z@ZA[A[B\B]C]D^D^E_E_F`GaGaHbHbIcIcJdJdKeKfLfMgMgNhNhOiOiPjPjPjQkQkRlRlSmSmTnTnTnUoUoVoVpVpWpWqWqXqXrXrYrYsYsYsZsZtZtZtZt[t[t[u[u[u[u\u\u\u\u\u\u\v\v\v\v\v\v\u\u\u\u\u\u\u\u[u[u[t[t[t[tZtZtZsZsZsYsYrYrYrXqXqXqWpWpWpVoVoVoUnUnTnTmTmSlSlRkRkQjQjPjPiPiOhOhNgNgMfMfLeKdKdJcJcIbIbHaHaG`G_F_E^E^D]D]C\B[B[AZAZ@Y@X?X>W>W=V=U%>$=$>$>%?%?&@&@'A'A(B(B)C)C*D+E+E,F,F-G-G.H.H/I/J0J1K1K2L2L3M3N4N5O5O6P6P7Q8R8R9S9S:T;U;UX?Y?Y@Z@ZA[B\B\C]C]D^D^E_F`F`GaGaHbHbIcIcJdJdKeKeLfLfMgMgNhNhOiOiPjPjQkQkQkRlRlSmSmTmTnTnUnUoUoVoVpVpWpWqWqWqXqXrXrXrYrYsYsYsYsZsZsZsZtZtZtZtZtZt[t[t[t[t[t[t[t[t[t[tZtZtZtZtZsZsZsZsZsYsYsYrYrYrXrXqXqXqWqWpWpWpVoVoVoUnUnUnTmTmTmSlSlRkRkQkQjQjPiPiOhOhNgNgMfMfLeLeKdKdJcJcIbIbHaHaG`G`F_F^E^D]D]C\C\B[BZAZ@Y@Y?X?X>W=V=V%>$=$=#=$>$>%?%?&@&@'A'A(B(B)C)C*D*E+E,F,F-G-G.H.H/I/I0J1K1K2L2L3M3M4N4O5O6P6P7Q7Q8R9S9S:T:T;U;UX>X?Y?Z@ZA[A[B\B\C]C]D^D_E_F`F`GaGaHbHbIcIcJdJdKeKeLfLfMgMgNhNhOhOiOiPjPjQkQkQkRlRlSlSmSmTmTnTnUnUoUoVoVpVpVpWpWqWqWqWqXqXrXrXrXrXrYrYrYrYrYsYsYsYsYsYsYsYsYsYsYsYsYrYrYrYrYrYrXrXrXrXqXqXqWqWqWpWpWpVpVoVoVoUnUnUnTmTmTmSlSlSlRkRkQkQjQjPiPiOhOhOhNgNgMfMfLeLeKdKdJcJcIbIbHaHaG`G`F_F_E^D]D]C\C\B[B[AZAZ@Y?X?X>W>W=V=U%>$=$=#<#=#=$>$>%?%?&@&@'A'A(B(B)C)C*D*D+E+F,F-G-G.H.H/I/I0J0J1K2L2L3M3M4N4N5O5P6P7Q7Q8R8R9S9S:T;U;UX?Y?Y@Z@ZA[A[B\B\C]C]D^E_E_F`F`GaGaHbHbIcIcJdJdKeKeLeLfLfMgMgNhNhOiOiOiPjPjQjQkQkRlRlRlSmSmSmTmTnTnTnUnUoUoUoVoVpVpVpVpWpWpWqWqWqWqWqXqXqXqXqXqXqXqXqXqXqXqXqXqXqXqXqWqWqWqWpWpWpWpVpVpVoVoVoUoUnUnUnTnTmTmTmSmSlSlRlRkRkQjQjQjPiPiOiOhOhNgNgMfMfLeLeLeKdKdJcJcIbIbHaHaG`G`F_F_E^E]D]C\C\B[B[AZAZ@Y@Y?X?W>W=V=V%>$=$=#<#<"<#=#=$>$>%?%?&@&@'A'A(B(B)C)C*D*D+E+E,F,G-G.H.H/I/I0J0J1K1K2L2M3M4N4N5O5O6P6P7Q7R8R9S9S:T:T;U;UX>X?Y?Y@Z@ZA[A[B\B\C]C^D^E_E_F`F`GaGaHbHbIbIcIcJdJdKeKeLfLfMfMgMgNhNhOhOiOiPjPjPjQkQkQkRlRlRlSlSmSmSmTmTnTnTnUnUnUoUoUoUoVoVoVoVpVpVpVpVpVpVpVpVpVpVpVpVpVpVpVpVpVpVoVoVoVoVoUoUoUnUnUnUnTnTmTmTmSmSlSlSlRlRkRkQkQjQjPjPiPiOhOhOhNgNgMfMfMfLeLeKdKdJcJcIbIbIbHaHaG`G`F_F_E^E^D]C\C\B[B[AZAZ@Y@Y?X?X>W>W=V%>$=$=#<#<";"<"<#=#=$>$>%?%?&@&@'A'A(B(B)C)C*D*D+E+E,F,F-G-G.H/I/I0J0J1K1K2L2L3M3M4N4O5O6P6P7Q7Q8R8R9S9S:T:U;UX>X?Y?Y@Z@ZA[A[B\B\C]C]D^D^E_E_F`F`GaGaHbHbIcIcJdJdKdKeKeLfLfMfMgMgNhNhNhOiOiOiPjPjPjQkQkQkRkRlRlRlSlSmSmSmSmTmTmTnTnTnTnTnUnUnUnUnUnUoUoUoUoUoUoUoUoUnUnUnUnUnUnUnTnTnTnTmTmTmTmSmSmSlSlSlRlRkRkRkQkQjQjPjPiPiOiOhOhNhNgNgMfMfMfLeLeKdKdKdJcJcIbIbHaHaG`G`F_F_E^E^D]D]C\C\B[B[AZAZ@Y@Y?X?X>W>W=V=V%>$=$=#<#<";";";"<"<#=#=$>$>%?%?&@&@'A'A(B(B)C)C*D*D+E+E,F,F-G-G.H.H/I/I0J0K1K2L2L3M3M4N4N5O5O6P6P7Q7R8R9S9S:T:T;U;UX>X?Y?Y@Z@ZA[A[B\B\C]C]D^D^E_E_F`F`GaGaHbHbIbIcIcJdJdKeKeKeLfLfMfMgMgNgNhNhOhOiOiOiPjPjPjQjQkQkQkQkRkRlRlRlRlSlSlSmSmSmSmSmSmTmTmTmTmTmTmTmTmTmTmTmTmTmTmSmSmSmSmSlSlSlSlRlRlRkRkRkQkQkQjQjQjPjPiPiOiOhOhOhNgNgNgMfMfMfLeLeKeKdKdJcJcIbIbIbHaHaG`G`F_F_E^E^D]D]C\C\B[B[AZAZ@Y@Y?X?X>W>W=V=V%>$=$=#<#<";";" \ No newline at end of file diff --git a/assets/test_scene3.json b/assets/test_scene3.json new file mode 100644 index 0000000..37ce67a --- /dev/null +++ b/assets/test_scene3.json @@ -0,0 +1,62 @@ +{ + "geometry":[{ + "type":"rectangle", + "p1":[-20, -1, 0], + "p2":[20, -1, 0], + "p3":[20, -1, -20], + "p4":[-20, -1, -20], + + + "ac":[0,1,0], + "dc":[1,0,0], + "sc":[1,1,1], + + "ka":1, + "kd":1, + "ks":1, + + "pc":10 + }, + { + "type":"sphere", + "centre":[0, 0, -4], + "radius":1, + "ac":[1,0,0], + "dc":[0,0,1], + "sc":[1,1,1], + + "ka":0.2, + "kd":1, + "ks":1, + + "pc":10 + + } + + ], + "light":[ + { + "type":"point", + "centre":[0, 7, -5], + "id":[1, 1, 1], + "is":[1, 1, 1] + }, + { + "type":"point", + "centre":[0,0.5,0], + "id":[1, 1, 1], + "is":[1, 1, 1] + } + ], + "output":[{ + "filename":"test_scene3.ppm", + "size":[500,500], + "lookat":[0,0,-1], + "up":[0,1,0], + "fov":60, + "centre":[0,0.5,0], + "ai":[1,1,1], + "bkc":[1,1,1] + } + ] +} diff --git a/assets/test_scene3.ppm b/assets/test_scene3.ppm new file mode 100644 index 0000000..586e3a9 --- /dev/null +++ b/assets/test_scene3.ppm @@ -0,0 +1,1160 @@ +P6 +500 500 +255 +Y&^+b/e2g4i6k8l9m:m:m:m:l9k8i6g4e2b/^+Y&U"\)b/g4l9p=tAwD{H}JMOQSTUVVVVUTSQOM}J{HwDtAp=l9g4b/\)U"S [(a.g4l9r?vC{HLQTX[^adfhikllmmllkihfda^[XTQL{HvCr?l9g4a.[(S HRY&`-f3k8q>vC|INSW\`dhkoruwy{}~~}{ywurokhd`\WSN|IvCq>k8f3`-Y&RHLS Z'`-f3l9r?wD}JOUZ_dhmquy}ÐđđđđЏ}yuqmhd_ZUO}JwDr?l9f3`-Z'S LKQX%^+d1j7p=uB{HNSY^dinsx|Œȕ˘͚ϜўҟӠԡԡԡԡӠҟўϜ͚˘ȕŒ|xsnid^YSN{HuBp=j7d1^+X%QKGNT!Z'`-e2k8q>wD}JPU[aflqw|Œɖ͚НӠ֣٦ۨݪ߬߬ݪۨ٦֣ӠН͚ɖŒ|wqlfa[UP}JwDq>k8e2`-Z'T!NGCIOU"Z'`-f3k8q>wD}JPV[agmrx}ŒɖΛҟ֣٦ݪݪ٦֣ҟΛɖŒ}xrmga[VP}JwDq>k8f3`-Z'U"OIC< DIOT!Y&_,d1j7p=vC{HNTZ`flrx}Ɠ˘Нԡ٦ݪݪ٦ԡН˘Ɠ}xrlf`ZTN{HvCp=j7d1_,Y&T!OID< > CHMRX%]*b/h5m:s@yFLRX^djpv|Œ˘НբڧޫޫڧբН˘Œ|vpjd^XRLyFs@m:h5b/]*X%RMHC> = +BGLPU"Z'_,e2j7p=vC{HNTZ`flrx~ÐȕΛӠ٦ޫޫ٦ӠΛȕÐ~xrlf`ZTN{HvCp=j7e2_,Z'U"PLGB= +< AEINRW$\)a.f3l9q>wD}JPV\bhntzŒ˘Н֣֣ۨۨН˘Œztnhb\VP}JwDq>l9f3a.\)W$RNIEA< ;? CGKOT!X%]*b/h5m:r?xE~KPV\bhou{Ɠ̙ҟפݪݪפҟ̙Ɠ{uohb\VP~KxEr?m:h5b/]*X%T!OKGC? ;9= +ADHLPU"Y&^+c0h5m:s@xE~KQV\bhou{Ɠ̙ҟإݪݪإҟ̙Ɠ{uohb\VQ~KxEs@m:h5c0^+Y&U"PLHDA= +98;> BEIMQU"Y&^+c0h5m:r?xE}JPV\bhntzƓ˘ўפݪݪפў˘Ɠztnhb\VP}JxEr?m:h5c0^+Y&U"QMIEB> ;869< ? BFIMQU"Y&^+c0g4l9r?wD|IOU[agmsyđʗН֣ܩܩ֣Нʗđysmga[UO|IwDr?l9g4c0^+Y&U"QMIFB? < 967:= +@ CFIMQU"Y&]*b/g4k8q>vC{HNSY_ekqw}ȕΛԡڧڧԡΛȕ}wqke_YSN{HvCq>k8g4b/]*Y&U"QMIFC@ = +:768;= +@ CFILPT!X%\)a.e2j7o @ CEHKNQU"X%\)`-e2i6m:r?wD|INSX^cintzđʗϜբۨۨբϜʗđztnic^XSN|IwDr?m:i6e2`-\)X%U"QNKHEC@ > < :87644578:;= +? BDGJMPS W$Z'^+b/f3k8o @ BDGILORV#Y&]*a.e2i6m:r?vC{HMRW\aflqw|Œ˘Н֣֣ۨۨН˘Œ|wqlfa\WRM{HvCr?m:i6e2a.]*Y&V#ROLIGDB@ > < :986543345678:;= +? ACEHKMPT!W$Z'^+b/f3j7n;s@wD|IMRW\bglqw|ŒʗНբڧڧբНʗŒ|wqlgb\WRM|IwDs@n;j7f3b/^+Z'W$T!PMKHECA? = +;:8765433456789;< > @ BDFILNQU"X%[(_,c0g4k8o < ;98765433455679:;= +? ACEGJLORU"Y&\)`-c0g4k8p=tAxE}JNSX]bglqv|đɖΛӠإݪݪإӠΛɖđ|vqlgb]XSN}JxEtAp=k8g4c0`-\)Y&U"ROLJGECA? = +;:976554334456789;< > ? ACFHKMPS V#Y&]*`-d1h5l9p=tAxE}JOSX]bglqv{Ðȕ͚ҟפܩܩפҟ͚ȕÐ{vqlgb]XSO}JxEtAp=l9h5d1`-]*Y&V#S PMKHFCA? > < ;9876544334456789:;= +> @ BDFIKNQT!W$Z']*a.d1h5l9p=tAyF}JOSX]afkpuzǔ̙ў֣ڧ߬߬ڧ֣ў̙ǔzupkfa]XSO}JyFtAp=l9h5d1a.]*Z'W$T!QNKIFDB@ > = +;:987654433344556789:< = +? ACEGILNQT!W$Z'^+a.e2h5l9p=tAyF}JNSW\afkoty~ŒʗϜԡ٦ݪݪ٦ԡϜʗŒ~ytokfa\WSN}JyFtAp=l9h5e2a.^+Z'W$T!QNLIGECA? = +< :98765544333334456778:;< > ? ACEGJLOQT!W$[(^+a.e2h5l9p=tAxE}JNRW\`ejosx}đɖ͚ҟפۨۨפҟ͚ɖđ}xsoje`\WRN}JxEtAp=l9h5e2a.^+[(W$T!QOLJGECA? > < ;:877654433333344556789:;= +> @ BCFHJLORU"X%[(^+a.e2h5l9p=tAxE|INRV[_dinrw|ǔ˘Нբ٦ݪݪ٦բН˘ǔ|wrnid_[VRN|IxEtAp=l9h5e2a.^+[(X%U"ROLJHFCB@ > = +;:9876554433333344566789:< = +? @ BDFHJMORU"X%[(^+a.e2h5l9p=tAxE|IMQVZ_chlqvzŒɖΛҟפۨ߬߬ۨפҟΛɖŒzvqlhc_ZVQM|IxEtAp=l9h5e2a.^+[(X%U"ROMJHFDB@ ? = +< :9876654433333344556788:;< = +? @ BDFHJMORU"X%[(^+a.e2h5l9o ? ABDFHKMORU"X%[(^+a.d1h5k8o < ;:9876554443333333445566789:;< > ? ACDFHKMORU"W$Z']*a.d1g4k8n;r?vCzG~KOSW[`dhmqvzÐǔ̙Нԡإܩ߬߬ܩإԡН̙ǔÐzvqmhd`[WSO~KzGvCr?n;k8g4d1a.]*Z'W$U"ROMKHFDCA? > < ;:987665544333333333445567789:;= +> ? ACEFIKMORU"W$Z']*`-d1g4j7n;r?uByF}JNRVZ_cgkpty}Œɖ͚ўբ٦ݪݪ٦բў͚ɖŒ}ytpkgc_ZVRN}JyFuBr?n;j7g4d1`-]*Z'W$U"ROMKIFECA? > = +;:98776554433333333334445567889:< = +> @ ACEFIKMORT!W$Z']*`-c0f3j7m:q>tAxE|IMQUY]afjnrw{Ðǔ˘ϜӠ֣ڧޫޫڧ֣ӠϜ˘ǔÐ{wrnjfa]YUQM|IxEtAq>m:j7f3c0`-]*Z'W$T!ROMKIFECA@ > = +< :9887655444333333333334455667899;< = +> @ ACEFHKMORT!W$Z'\)`-c0f3i6m:p=tAwD{HLPTX\`dhmquy}Œɖ͚НԡפۨޫޫۨפԡН͚ɖŒ}yuqmhd`\XTPL{HwDtAp=m:i6f3c0`-\)Z'W$T!ROMKHFECA@ > = +< ;99876655443333333333334445566789:;< = +> @ ACEFHJMOQT!V#Y&\)_,b/e2i6l9o = +< ;:98766554443333333333334445566789:;< = +> @ ACEFHJLOQT!V#Y&\)_,b/e2h5k8o = +< ;:987665544433333333333334445566789:;< = +> @ ACDFHJLNQS V#X%[(^+a.d1g4k8n;q>uBxE|IMPTX\`dhlptx|Ɠɖ͚НӠ֣٦ܩ߬߬ܩ٦֣ӠН͚ɖƓ|xtplhd`\XTPM|IxEuBq>n;k8g4d1a.^+[(X%V#S QNLJHFDCA@ > = +< ;:98766554443333333333333334445567789:;< = +> @ ACDFHJLNQS U"X%[(^+`-d1g4j7m:p=tAwD{HLOSW[_cfjnrvz~ÐǔʗΛўԡפڧݪ߬߬ݪڧפԡўΛʗǔÐ~zvrnjfc_[WSOL{HwDtAp=m:j7g4d1`-^+[(X%U"S QNLJHFDCA@ > = +< ;:9877655444333333333}333333344455567789:;< = +> @ ACDFHJLNPS U"X%Z']*`-c0f3i6l9p=s@wDzG~KNRVZ]aeimqtx|Œȕ˘Ϝҟբפڧݪ߬߬ݪڧפբҟϜ˘ȕŒ|xtqmiea]ZVRN~KzGwDs@p=l9i6f3c0`-]*Z'X%U"S PNLJHFDCA@ > = +< ;:9877655544433333333}3333333344455667789:;< = +> @ ABDFHJLNPRU"W$Z']*_,b/e2h5l9o = +< ;:987766554443333333333333333344455667789:;< = +> ? ABDFGIKMPRT!W$Y&\)_,b/e2h5k8n;q>uBxE|ILPTW[_bfjnquy|đǔʗ͚НӠ֣إڧݪ߬߬ݪڧإ֣ӠН͚ʗǔđ|yuqnjfb_[WTPL|IxEuBq>n;k8h5e2b/_,\)Y&W$T!RPMKIGFDBA? > = +< ;:987766554443333333333x33333333344455667789:;< = +> ? ABDEGIKMORT!V#Y&\)^+a.d1g4j7m:q>tAwD{H~KOSVZ]aeilptw{~Ɠɖ˘Λўԡ֣إۨݪޫޫݪۨإ֣ԡўΛ˘ɖƓ~{wtpliea]ZVSO~K{HwDtAq>m:j7g4d1a.^+\)Y&V#T!ROMKIGEDBA? > = +< ;:987766554443333333333x3l333333333344455667789:;< = +> ? ABDEGIKMOQT!V#Y&[(^+a.d1g4j7m:p=s@wDzG~KNRUY\`dgkorvz}đǔʗ͚Ϝҟԡפ٦ۨݪޫޫݪۨ٦פԡҟϜ͚ʗǔđ}zvrokgd`\YURN~KzGwDs@p=m:j7g4d1a.^+[(Y&V#T!QOMKIGEDBA? > = +< ;:9877665544433333333333l3y333333333444455667789:;< = +> ? ABDEGIKMOQS V#X%[(]*`-c0f3i6l9o = +< ;:9877665544443333333333y3q3333333333444455667789:;< = +> ? @ BCEGIJLOQS U"X%Z']*`-c0f3i6l9o = +< ;:98776655444433333333333q3`3x3333333333444455667789:;< = +> ? @ BCEGHJLNPS U"X%Z']*_,b/e2h5k8n;r?uBxE{HLOSVZ]aehlosvz}ÐƓȕ˘͚Нҟԡ֣إ٦ۨܩݪޫ߬߬ޫݪܩۨ٦إ֣ԡҟН͚˘ȕƓÐ}zvsolhea]ZVSOL{HxEuBr?n;k8h5e2b/_,]*Z'X%U"S PNLJHGECB@ ? > = +< ;:98776655444433333333333x3`3q3}3333333333444455667789:;< = +> ? @ BCEFHJLNPS U"W$Z'\)_,b/e2h5k8n;q>tAxE{H~KORVY]`dgknruy|đǔʗ̙ϜўӠբפإڧۨܩݪޫ߬߬߬߬ޫݪܩۨڧإפբӠўϜ̙ʗǔđ|yurnkgd`]YVRO~K{HxEtAq>n;k8h5e2b/_,\)Z'W$U"S PNLJHFECB@ ? > = +< ;:98776655444433333333333}3q3f3w33333333333444455667789:;;= +> ? @ BCEFHJLNPRU"W$Z'\)_,b/e2g4j7n;q>tAwDzG~KNRUY\`cgjnqux{đƓɖ˘ΛНҟԡ֣פ٦ڧۨܩݪޫޫ߬߬߬߬ޫޫݪܩۨڧ٦פ֣ԡҟНΛ˘ɖƓđ{xuqnjgc`\YURN~KzGwDtAq>n;j7g4e2b/_,\)Z'W$U"RPNLJHFECB@ ? > = +;;:987766554444333333333333w3f3o3{33333333333444455667789::;< > ? @ BCEFHJLNPRT!W$Y&\)_,a.d1g4j7m:p=tAwDzG}JNQUX\_cfjmqtw{~ÐƓȕ˘͚ϜўӠբ֣إ٦ڧۨܩݪݪޫޫޫޫݪݪܩۨڧ٦إ֣բӠўϜ͚˘ȕƓÐ~{wtqmjfc_\XUQN}JzGwDtAp=m:j7g4d1a._,\)Y&W$T!RPNLJHFECB@ ? > < ;::987766554444333333333333{3o3e3t3~33333333333444455667789::;< > ? @ ACEFHJLNPRT!W$Y&\)_,a.d1g4j7m:p=s@wDzG}JNQTX[_bfimptwz}Œȕʗ̙Λўҟԡ֣פ٦ڧۨܩܩݪݪݪݪݪݪܩܩۨڧ٦פ֣ԡҟўΛ̙ʗȕŒ}zwtpmifb_[XTQN}JzGwDs@p=m:j7g4d1a._,\)Y&W$T!RPNLJHFECA@ ? > < ;::987766554444333333333333~3t3e3l3w333333333333444455667789::;< > ? @ ACDFHJLNPRT!W$Y&\)^+a.d1g4j7m:p=s@vCzG}JMQTX[_bfimpswz}Œǔʗ̙ΛНҟԡբפإ٦ڧۨܩܩݪݪݪݪܩܩۨڧ٦إפբԡҟНΛ̙ʗǔŒ}zwspmifb_[XTQM}JzGvCs@p=m:j7g4d1a.^+\)Y&W$T!RPNLJHFDCA@ ? > < ;::9877665544443333333333333w3l3c3p3z333333333333444455667789::;< > ? @ ACDFHJLNPRT!W$Y&\)^+a.d1g4j7m:p=s@vCzG}JMQTX[_bfilpswz}Œǔɖ̙ΛНҟԡբפإ٦ڧۨܩܩܩݪݪܩܩܩۨڧ٦إפբԡҟНΛ̙ɖǔŒ}zwsplifb_[XTQM}JzGvCs@p=m:j7g4d1a.^+\)Y&W$T!RPNLJHFDCA@ ? > < ;::9877665544443333333333333z3p3c3S3i3t3|333333333333444455667789::;< > ? @ ACEFHJLNPRT!W$Y&\)^+a.d1g4j7m:p=s@vCzG}JMQTX[_bfilpswz}Œǔɖ̙ΛНҟԡբפإ٦ڧۨܩܩݪݪݪݪܩܩۨڧ٦إפբԡҟНΛ̙ɖǔŒ}zwsplifb_[XTQM}JzGvCs@p=m:j7g4d1a.^+\)Y&W$T!RPNLJHFECA@ ? > < ;::9877665544443333333333333|3t3i3S3_3m3v3~333333333333444455667789::;= +> ? @ BCEFHJLNPRT!W$Y&\)_,a.d1g4j7m:p=s@wDzG}JNQTX[_bfimpswz}Œǔʗ̙ΛНҟԡբפإ٦ڧۨܩܩݪݪݪݪܩܩۨڧ٦إפբԡҟНΛ̙ʗǔŒ}zwspmifb_[XTQN}JzGwDs@p=m:j7g4d1a._,\)Y&W$T!RPNLJHFECB@ ? > = +;::9877665544443333333333333~3v3m3_3P3d3o3x3333333333333444455667789:;< = +> ? @ BCEFHJLNPRU"W$Z'\)_,b/d1g4j7m:p=tAwDzG~KNQUX\_cfjmptwz~Œȕʗ̙Ϝўҟԡ֣פ٦ڧۨܩܩݪݪݪݪݪݪܩܩۨڧ٦פ֣ԡҟўϜ̙ʗȕŒ~zwtpmjfc_\XUQN~KzGwDtAp=m:j7g4d1b/_,\)Z'W$U"RPNLJHFECB@ ? > = +< ;:98776655444433333333333333x3o3d3P3Z3h3r3z3333333333333444455667789:;< = +> ? @ BCEFHJLNPRU"W$Z'\)_,b/e2h5k8n;q>tAwD{H~KNRUY\`cgjmqtx{~ÐƓȕ˘͚ϜўӠբ֣إ٦ڧۨܩݪݪޫޫޫޫݪݪܩۨڧ٦إ֣բӠўϜ͚˘ȕƓÐ~{xtqmjgc`\YURN~K{HwDtAq>n;k8h5e2b/_,\)Z'W$U"RPNLJHFECB@ ? > = +< ;:98776655444433333333333333z3r3h3Z3K3`3k3s3{3333333333333444555667789:;< = +> ? @ BCEGHJLNPS U"X%Z']*_,b/e2h5k8n;q>tAxE{H~KORVY]`dgknrux|đƓɖ˘ΛНҟԡ֣פ٦ڧۨܩݪޫޫ߬߬߬߬ޫޫݪܩۨڧ٦פ֣ԡҟНΛ˘ɖƓđ|xurnkgd`]YVRO~K{HxEtAq>n;k8h5e2b/_,]*Z'X%U"S PNLJHGECB@ ? > = +< ;:98776655544433333333333333{3s3k3`3K3U3c3m3u3|3333333333333444555667889:;< = +> ? ABDEGIKLOQS U"X%Z']*`-c0e2h5k8o = +< ;:98876655544433333333333333|3u3m3c3U3A3Z3f3o3v3}3333333333333444555667889:;< = +> ? ABDEGIKMOQS V#X%[(]*`-c0f3i6l9o = +< ;:98876655544433333333333333}3v3o3f3Z3A3O3^3h3p3w3}3333333333334444555667889:;< = +> @ ABDFGIKMOQT!V#Y&[(^+a.d1f3i6m:p=s@vCzG}JMQTX[_cfjmqtx{~đǔʗ̙ϜўӠբפ٦ۨܩޫ߬߬ޫܩۨ٦פբӠўϜ̙ʗǔđ~{xtqmjfc_[XTQM}JzGvCs@p=m:i6f3d1a.^+[(Y&V#T!QOMKIGFDBA@ > = +< ;:98876655544443333333333333}3w3p3h3^3O3T3`3i3q3x3~3333333333334444555677899:;< = +? @ ACDFHJKMPRT!W$Y&\)^+a.d1g4j7m:p=tAwDzG~KNRUY\`dgknruy|ÐŒȕ˘ΛНҟբפ٦ڧܩޫ߬߬ޫܩڧ٦פբҟНΛ˘ȕŒÐ|yurnkgd`\YURN~KzGwDtAp=m:j7g4d1a.^+\)Y&W$T!RPMKJHFDCA@ ? = +< ;:99877655544443333333333333~3x3q3i3`3T3G3X3b3k3r3x3~3333333333334444556677899:;< > ? @ ACEFHJLNPRU"W$Z'\)_,b/e2h5k8n;q>uBxE{HLOSVZ]aehloswz~đǔʗ̙Ϝҟԡ֣إڧܩޫ߬߬ޫܩڧإ֣ԡҟϜ̙ʗǔđ~zwsolhea]ZVSOL{HxEuBq>n;k8h5e2b/_,\)Z'W$U"RPNLJHFECA@ ? > < ;:99877665544443333333333333~3x3r3k3b3X3G3M3Z3d3l3r3y3~333333333333444455667789:;< = +> ? @ BCEGHJLNQS U"X%Z']*`-c0f3i6l9o = +< ;:9877665544443333333333333~3y3r3l3d3Z3M3=3Q3\3e3l3s3y3~333333333333444455667789:;< = +> ? ABDEGIKMOQS V#X%[(^+`-c0f3i6m:p=s@vCzG}JNQUY\`dgkorvy}đǔʗ͚НӠբإڧܩޫޫܩڧإբӠН͚ʗǔđ}yvrokgd`\YUQN}JzGvCs@p=m:i6f3c0`-^+[(X%V#S QOMKIGEDBA? > = +< ;:9877665544443333333333333~3y3s3l3e3\3Q3=3E3S3^3f3m3s3y3~333333333333444555667889:;< = +> @ ABDFGIKMORT!V#Y&\)^+a.d1g4j7m:q>tAwD{H~KORVZ]aeilptw{ÐƓɖ̙Ϝҟԡפ٦ܩޫޫܩ٦פԡҟϜ̙ɖƓÐ{wtpliea]ZVRO~K{HwDtAq>m:j7g4d1a.^+\)Y&V#T!ROMKIGFDBA@ > = +< ;:9887665554443333333333333~3y3s3m3f3^3S3E3I3U3_3f3m3s3y3~333333333333444555667889:;< = +? @ ACDFHJLNPRU"W$Z'\)_,b/e2h5k8n;r?uBxE|IMPTW[_cfjnruy}Œȕ˘Λўԡ֣٦ܩޫޫܩ٦֣ԡўΛ˘ȕŒ}yurnjfc_[WTPM|IxEuBr?n;k8h5e2b/_,\)Z'W$U"RPNLJHFDCA@ ? = +< ;:9887665554443333333333333~3y3s3m3f3_3U3I3;3L3W3`3g3n3s3y3~333333333334444556677899:;< > ? @ BCEFHJLNQS U"X%Z']*`-c0f3i6l9o < ;:9987766554444333333333333~3y3s3n3g3`3W3L3;3@3N3X3`3g3n3s3y3~33333333333444455667789:;< = +> ? ABDEGIKMOQT!V#Y&[(^+a.d1g4j7m:q>tAwD{H~KOSVZ^bfimquy}Œɖ̙ϜҟբإۨݪݪۨإբҟϜ̙ɖŒ}yuqmifb^ZVSO~K{HwDtAq>m:j7g4d1a.^+[(Y&V#T!QOMKIGEDBA? > = +< ;:987766554444333333333333~3y3s3n3g3`3X3N3@3+3D3P3Y3a3h3n3s3y3}33333333333444455667789:;< = +> ? ABDFGIKMPRT!W$Y&\)_,b/e2h5k8n;r?uByF|IMPTX\_cgkosw{~đǔ˘ΛўԡפڧݪݪڧפԡўΛ˘ǔđ~{wsokgc_\XTPM|IyFuBr?n;k8h5e2b/_,\)Y&W$T!RPMKIGFDBA? > = +< ;:987766554444333333333333}3y3s3n3h3a3Y3P3D3+363F3Q3Z3a3h3n3s3x3}33333333333444555667889:;< = +? @ ACDFHJLNPS U"X%Z']*`-c0f3i6l9o ? @ BCEGHJLOQS V#X%[(^+a.d1g4j7m:q>tAwD{HLOSW[_cgkosvz~đȕ̙ϜӠ֣٦ܩ߬߬ܩ٦֣ӠϜ̙ȕđ~zvsokgc_[WSOL{HwDtAq>m:j7g4d1a.^+[(X%V#S QOLJHGECB@ ? > < ;:998776555444333333333333}3x3s3m3h3a3Z3R3H3:3#3=3I3S3Z3a3g3m3r3w3|3333333333444455667789:;< = +> ? ABDEGIKMORT!W$Y&\)_,b/e2h5k8n;r?uByF|IMQUY\`dhlptx|ÐǔʗΛўբإۨ߬߬ۨإբўΛʗǔÐ|xtplhd`\YUQM|IyFuBr?n;k8h5e2b/_,\)Y&W$T!ROMKIGEDBA? > = +< ;:98776655444433333333333|3w3r3m3g3a3Z3S3I3=3#3.3?3J3S3[3a3g3m3r3w3{3333333333444455667789:;< = +> @ ABDFHJLNPRU"W$Z']*`-c0f3i6l9o = +< ;:98776655444433333333333{3w3r3m3g3a3[3S3J3?3.323A3K3S3[3a3g3l3q3v3{3333333333444555667889:;< = +? @ ACEFHJLNQS U"X%[(^+a.d1g4j7m:q>tAxE{HLPTX\`dhlptx|Ðǔ˘ϜӠ֣ڧݪݪڧ֣ӠϜ˘ǔÐ|xtplhd`\XTPL{HxEtAq>m:j7g4d1a.^+[(X%U"S QNLJHFECA@ ? = +< ;:98876655544433333333333{3v3q3l3g3a3[3S3K3A32353B3K3S3Z3a3g3l3q3v3z3~333333333444555677899:;< > ? @ BCEGIKMOQT!V#Y&\)_,b/e2h5k8n;r?uByF}JMQUY]aeinrvz~Ɠɖ͚ўբ٦ܩ߬߬ܩ٦բў͚ɖƓ~zvrniea]YUQM}JyFuBr?n;k8h5e2b/_,\)Y&V#T!QOMKIGECB@ ? > < ;:9987765554443333333333~3z3v3q3l3g3a3Z3S3K3B353#373B3L3S3Z3`3f3k3p3u3y3~33333333444455667789:;< = +> ? ABDEGIKMPRT!W$Z']*_,b/f3i6l9p=s@wDzG~KOSW[_cgkotx|đȕ̙НӠפۨޫޫۨפӠН̙ȕđ|xtokgc_[WSO~KzGwDs@p=l9i6f3b/_,]*Z'W$T!RPMKIGEDBA? > = +< ;:987766554444333333333~3y3u3p3k3f3`3Z3S3L3B373#3(383C3L3S3Z3`3f3k3p3t3y3}33333333444455667789:;< = +> @ ACDFHJLNPS U"X%[(]*`-c0g4j7m:q>tAxE|ILPTX\`eimquz~ƓʗΛҟ֣ڧݪݪڧ֣ҟΛʗƓ~zuqmie`\XTPL|IxEtAq>m:j7g4c0`-]*[(X%U"S PNLJHFDCA@ > = +< ;:987766554444333333333}3y3t3p3k3f3`3Z3S3L3C383(3+393C3L3S3Y3_3e3j3o3s3x3|33333333444455667889:;< = +? @ ACEFHJLOQS V#Y&[(^+a.d1h5k8n;r?uByF}JNRVZ^bfjosw|đȕ̙НԡإܩܩإԡН̙ȕđ|wsojfb^ZVRN}JyFuBr?n;k8h5d1a.^+[(Y&V#S QOLJHFECA@ ? = +< ;:988766554444333333333|3x3s3o3j3e3_3Y3S3L3C393+3-3:3C3K3S3Y3_3d3i3n3s3w3{33333333444555667899:;< > ? @ BCEGIKMORT!W$Y&\)_,b/e2i6l9o < ;:998766555444333333333{3w3s3n3i3d3_3Y3S3K3C3:3-33.3:3C3K3R3X3^3c3h3m3r3v3z3~333333344455667789:;< = +> ? ABDFGIKNPRU"W$Z']*`-c0f3j7m:q>tAr?|IyFPMYTX\`drv{|đ̙բʗݪԡ͚ۨۨʗբ̙đ|{vrd`\XTYMPyF|Ir?tAq>m:j7f3c0`-]*Z'W$U"RPNKIGFDBA? > = +< ;:9877665544433333333~3z3v3r3m3h3c3^3X3R3K3C3:3.3stttttttuuuuuuuvvvvvvvwwwwwwwxxxxxxxyyyyyyyyzzzzzzz{{{{{{{{|||||||}}}}}}}}~~~~~~~~33/3:3C3K3R3X3]3c3h3l3q3u3y3}3333334444556677899;;= +> @ ACDFHJLLNPS U"X%[(]*`-c0f3i6m:p=s@wDzG~KOSWZ^bfjnrw{Œɖ͚ўԡإۨޫޫۨإԡў͚ɖŒ{wrnjfb^ZWSO~KzGwDs@p=m:i6f3c0`-]*[(X%U"S PNLLJHFDCA@ > = +;;99877665544443333333}3y3u3q3l3h3c3]3X3R3K3C3:3/3~~~~~~~~}}}}}}}}|||||||{{{{{{{{zzzzzzzyyyyyyyyxxxxxxxwwwwwwwvvvvvvvuuuuuuutttttttswwwxxxxxxxyyyyyyyzzzzzzz{{{{{{{|||||||}}}}}}}~~~~~~~3"303:3C3J3Q3W3]3b3g3k3p3t3x3|333333444455667789:;< = +> ? @ BCEGIKMOQT!V#Y&\)^+a.d1h5k8n;q>uByF|IMQUX\`dimquy}đȕ̙Нԡפۨ߬߬ۨפԡН̙ȕđ}yuqmid`\XUQM|IyFuBq>n;k8h5d1a.^+\)Y&V#T!QOMKIGECB@ ? > = +< ;:9877665544443333333|3x3t3p3k3g3b3]3W3Q3J3C3:303"~~~~~~~}}}}}}}|||||||{{{{{{{zzzzzzzyyyyyyyxxxxxxxwww{{{{{{||||||}}}}}}}~~~~~~~3#303:3C3J3P3V3\3a3f3j3o3s3w3{333333444455667789:;< = +> ? ABDFGIKNPRU"W$Z']*_,b/f3i6l9o = +< ;:9877665544443333333{3w3s3o3j3f3a3\3V3P3J3C3:303#~~~~~~~}}}}}}}||||||{{{{{{~~33$303:3B3I3P3V3\3a3f3k3p3t3x3|333333444555667889:;< = +? @ ACDFHJLNQS U"X%[(^+a.d1g4j7m:q>tAxE|ILPTX\`dimquz~ƓʗΛҟ֣ڧޫޫڧ֣ҟΛʗƓ~zuqmid`\XTPL|IxEtAq>m:j7g4d1a.^+[(X%U"S QNLJHFDCA@ ? = +< ;:9887665554443333333|3x3t3p3k3f3a3\3V3P3I3B3:303$3~~33%313;3C3K3Q3W3]3b3g3l3p3u3y3}333333444555667899:;< > ? @ BCEGIKMOQT!V#Y&\)_,b/e2h5k8o < ;:9987665554443333333}3y3u3p3l3g3b3]3W3Q3K3C3;313%333(333=3E3L3R3X3^3c3h3m3q3v3z3~33333444455667789:;< = +> ? ABDEGIKMPRT!W$Z']*`-c0f3i6l9p=s@wD{HLOSW\`dhlquz~ǔ˘ϜӠפۨ߬߬ۨפӠϜ˘ǔ~zuqlhd`\WSOL{HwDs@p=l9i6f3c0`-]*Z'W$T!RPMKIGEDBA? > = +< ;:987766554444333333~3z3v3q3m3h3c3^3X3R3L3E3=333(333*353>3F3M3T3Z3_3d3i3n3r3v3{3~33333444455667789:;< = +> @ ACDFHJLNPS U"X%[(]*`-d1g4j7m:q>uBxE|IMQUY]afjnsw{Œɖ͚ҟ֣ڧޫޫڧ֣ҟ͚ɖŒ{wsnjfa]YUQM|IxEuBq>m:j7g4d1`-]*[(X%U"S PNLJHFDCA@ > = +< ;:987766554444333333~3{3v3r3n3i3d3_3Z3T3M3F3>353*333,373@3G3N3U3[3`3e3j3o3s3w3{333333444455667889:;< = +? @ ACEFHJLOQS V#Y&[(^+a.d1h5k8n;r?vCyF}JNRVZ_cglpty}ǔ˘ϜԡإܩܩإԡϜ˘ǔ}ytplgc_ZVRN}JyFvCr?n;k8h5d1a.^+[(Y&V#S QOLJHFECA@ ? = +< ;:9887665544443333333{3w3s3o3j3e3`3[3U3N3G3@373,33 3.383A3I3O3V3[3a3f3k3o3t3x3|333333444555667889:;< > ? @ BCEGIKMOQT!W$Y&\)_,b/e2i6l9o < ;:9887665554443333333|3x3t3o3k3f3a3[3V3O3I3A383.3 3 3#303:3B3J3P3W3\3b3g3l3p3t3y3}333333444555677899:;= +> ? @ BDEGIKMPRU"W$Z']*`-c0f3i6m:p=tAxE|IMQUY]afjosx|Ɠ˘ϜԡإܩܩإԡϜ˘Ɠ|xsojfa]YUQM|IxEtAp=m:i6f3c0`-]*Z'W$U"RPMKIGEDB@ ? > = +;:9987765554443333333}3y3t3p3l3g3b3\3W3P3J3B3:303#3 33%313;3C3K3Q3W3]3b3g3l3q3u3y3}33333344455667789:;< = +> ? ABDFHILNPS U"X%[(]*`-d1g4j7n;q>uByF}JNRVZ^cglpuy~Ðȕ̙ўբڧޫޫڧբў̙ȕÐ~yuplgc^ZVRN}JyFuBq>n;j7g4d1`-]*[(X%U"S PNLIHFDBA? > = +< ;:987766554443333333}3y3u3q3l3g3b3]3W3Q3K3C3;313%333'333<3D3L3R3X3^3c3h3m3q3v3z3~33333444455667789:;< = +> @ ACDFHJLNQS V#X%[(^+a.d1h5k8n;r?vCzG~KOSW[_dhmqv{ŒɖΛӠפܩܩפӠΛɖŒ{vqmhd_[WSO~KzGvCr?n;k8h5d1a.^+[(X%V#S QNLJHFDCA@ > = +< ;:987766554444333333~3z3v3q3m3h3c3^3X3R3L3D3<333'333(343=3E3L3S3Y3_3d3i3m3r3v3z3~33333444455667789:;< = +> @ ACDFHJLOQS V#Y&\)_,b/e2h5l9o = +< ;:987766554444333333~3z3v3r3m3i3d3_3Y3S3L3E3=343(333*353>3F3M3T3Z3_3d3i3n3r3w3{333333444455667889:;< = +? @ ACEGHKMOQT!V#Y&\)_,b/e2i6l9p=tAwD{HLPTY]afjotx}Ðȕ̙ў֣ڧ߬߬ڧ֣ў̙ȕÐ}xtojfa]YTPL{HwDtAp=l9i6e2b/_,\)Y&V#T!QOMKHGECA@ ? = +< ;:9887665544443333333{3w3r3n3i3d3_3Z3T3M3F3>353*333+363?3G3N3T3Z3`3e3j3n3s3w3{333333444455667889:;< = +? @ BCEGIKMORT!W$Z']*`-c0f3i6m:p=tAxE|IMQUZ^bgkpuy~đɖ͚ҟפۨۨפҟ͚ɖđ~yupkgb^ZUQM|IxEtAp=m:i6f3c0`-]*Z'W$T!ROMKIGECB@ ? = +< ;:9887665544443333333{3w3s3n3j3e3`3Z3T3N3G3?363+333,373@3H3O3U3[3`3e3j3o3s3x3|333333444555667899:;< > ? @ BCEGIKMPRU"W$Z']*`-c0f3j7m:q>uByF}JNRVZ_chlquzŒʗΛӠإݪݪإӠΛʗŒzuqlhc_ZVRN}JyFuBq>m:j7f3c0`-]*Z'W$U"RPMKIGECB@ ? > < ;:9987665554443333333|3x3s3o3j3e3`3[3U3O3H3@373,333-383A3H3O3U3[3a3f3k3o3t3x3|333333444555667899:;= +> ? @ BDEGIKNPRU"X%Z']*`-d1g4j7n;q>uByF}JNRW[_dhmqv{Ɠ˘Ϝԡ٦ޫޫ٦ԡϜ˘Ɠ{vqmhd_[WRN}JyFuBq>n;j7g4d1`-]*Z'X%U"RPNKIGEDB@ ? > = +;:9987665554443333333|3x3t3o3k3f3a3[3U3O3H3A383-333!3.393A3I3P3V3\3a3f3k3p3t3x3|33333344455567789::< = +> ? ABDFGILNPS U"X%[(^+a.d1g4k8n;r?vCzG~KOSW[`dimrw|ǔ˘НբڧޫޫڧբН˘ǔ|wrmid`[WSO~KzGvCr?n;k8g4d1a.^+[(X%U"S PNLIGFDBA? > = +< ::987765554443333333|3x3t3p3k3f3a3\3V3P3I3A393.3!333"3/393B3I3P3V3\3b3g3k3p3t3y3}33333344455567789:;< = +> ? ABDFHJLNPS U"X%[(^+a.d1h5k8o = +< ;:987765554443333333}3y3t3p3k3g3b3\3V3P3I3B393/3"33 3#303:3B3J3P3W3\3b3g3l3p3u3y3}33333344455667789:;< = +> ? ABDFHJLNPS V#X%[(^+a.d1h5k8o = +< ;:987766554443333333}3y3u3p3l3g3b3\3W3P3J3B3:303#3 33#303:3C3J3Q3W3]3b3g3l3p3u3y3}33333344455667789:;< = +> ? ABDFHJLNQS V#X%[(^+a.e2h5k8o = +< ;:987766554443333333}3y3u3p3l3g3b3]3W3Q3J3C3:303#333$313;3C3J3Q3W3]3b3g3l3q3u3y3}33333344455667789:;< = +> @ ACDFHJLNQS V#Y&[(^+a.e2h5l9o = +< ;:987766554443333333}3y3u3q3l3g3b3]3W3Q3J3C3;313$333$313;3C3K3Q3W3]3b3g3l3q3u3y3}33333344455667789:;< = +> @ ACDFHJLNQS V#Y&[(^+b/e2h5l9o = +< ;:987766554443333333}3y3u3q3l3g3b3]3W3Q3K3C3;313$333%313;3C3K3Q3X3]3c3h3l3q3u3y3}33333444455667789:;< = +> @ ACDFHJLNQS V#Y&[(^+b/e2h5l9o = +< ;:987766554444333333}3y3u3q3l3h3c3]3X3Q3K3C3;313%333%313;3C3K3Q3X3]3c3h3l3q3u3y3}33333444455667789:;< = +> @ ACDFHJLNQS V#Y&[(^+b/e2h5l9o = +< ;:987766554444333333}3y3u3q3l3h3c3]3X3Q3K3C3;313%333%313;3D3K3R3X3]3c3h3l3q3u3y3}33333444455667789:;< = +> @ ACDFHJLNQS V#X%[(^+a.e2h5k8o = +< ;:987766554444333333}3y3u3q3l3h3c3]3X3R3K3D3;313%333%313;3C3K3Q3X3]3c3h3l3q3u3y3}33333344455667789:;< = +> ? ABDFHJLNQS V#X%[(^+a.d1h5k8o = +< ;:987766554443333333}3y3u3q3l3h3c3]3X3Q3K3C3;313%333%313;3C3K3Q3W3]3b3g3l3q3u3y3}33333344455667789:;< = +> ? ABDFHJLNPS U"X%[(^+a.d1h5k8o = +< ;:987766554443333333}3y3u3q3l3g3b3]3W3Q3K3C3;313%333%313;3C3K3Q3W3]3b3g3l3q3u3y3}33333344455667789:;< = +> ? ABDFHJLNPS U"X%[(^+a.d1g4k8n;r?vCyF}JNSW[`dhmrv{Ɠ˘Ϝԡ٦ݪݪ٦ԡϜ˘Ɠ{vrmhd`[WSN}JyFvCr?n;k8g4d1a.^+[(X%U"S PNLJHFDBA? > = +< ;:987766554443333333}3y3u3q3l3g3b3]3W3Q3K3C3;313%333$313;3C3J3Q3W3]3b3g3l3p3u3y3}33333344455567789:;< = +> ? ABDFGIKNPRU"X%[(]*`-d1g4j7n;q>uByF}JNRV[_chlqvzŒʗΛӠإܩܩإӠΛʗŒzvqlhc_[VRN}JyFuBq>n;j7g4d1`-]*[(X%U"RPNKIGFDBA? > = +< ;:987765554443333333}3y3u3p3l3g3b3]3W3Q3J3C3;313$333$303:3C3J3Q3W3]3b3g3l3p3u3y3}33333344455567789::;= +> ? ABDEGIKMPRU"W$Z']*`-c0g4j7m:q>uBxE|IMQVZ^cglpuy~đɖ͚ҟפۨۨפҟ͚ɖđ~yuplgc^ZVQM|IxEuBq>m:j7g4c0`-]*Z'W$U"RPMKIGEDBA? > = +;::987765554443333333}3y3u3p3l3g3b3]3W3Q3J3C3:303$33 3#303:3B3J3P3W3\3b3g3k3p3t3x3}333333444555667899:;< > ? @ BDEGIKMORT!W$Z']*`-c0f3i6m:p=tAxE|IMQUY]bfkotx}Ðǔ̙ўբڧޫޫڧբў̙ǔÐ}xtokfb]YUQM|IxEtAp=m:i6f3c0`-]*Z'W$T!ROMKIGEDB@ ? > < ;:9987665554443333333}3x3t3p3k3g3b3\3W3P3J3B3:303#3 3 +3"3/393B3I3P3V3\3a3f3k3p3t3x3|333333444555667899:;< > ? @ BCEGIKMORT!W$Y&\)_,b/f3i6l9p=s@wD{HLPTX]aejnsw|Ɠ˘ϜԡإݪݪإԡϜ˘Ɠ|wsnjea]XTPL{HwDs@p=l9i6f3b/_,\)Y&W$T!ROMKIGECB@ ? > < ;:9987665554443333333|3x3t3p3k3f3a3\3V3P3I3B393/3"3 +33!3.393A3I3P3V3\3a3f3k3o3t3x3|333333444555667889:;< = +? @ BCEGHJMOQT!V#Y&\)_,b/e2h5l9o @ ACDFHJLNPS U"X%[(^+a.d1g4j7n;q>uByF|IMQUY^bfkotx|ƓʗϜӠإܩܩإӠϜʗƓ|xtokfb^YUQM|IyFuBq>n;j7g4d1a.^+[(X%U"S PNLJHFDCA@ > = +< ;:9877665544443333333{3w3s3n3j3e3`3[3U3N3H3@373,333+363?3G3N3T3Z3_3e3i3n3r3w3{333333444455667789:;< = +> ? ABDFGIKNPRU"W$Z']*`-c0f3i6m:p=tAxE{HLPTX\aeinrv{đɖ͚ў֣ڧޫޫڧ֣ў͚ɖđ{vrniea\XTPL{HxEtAp=m:i6f3c0`-]*Z'W$U"RPNKIGFDBA? > = +< ;:9877665544443333333{3w3r3n3i3e3_3Z3T3N3G3?363+333*353>3F3M3S3Y3_3d3i3m3r3v3z3~33333444455667789:;< = +> ? ABDEGIKMORT!W$Z'\)_,b/e2i6l9o = +< ;:987766554444333333~3z3v3r3m3i3d3_3Y3S3M3F3>353*333)343=3E3L3S3Y3^3c3h3m3q3v3z3~333333444555677899:;< > ? @ BCEGIKMOQT!V#Y&\)^+a.e2h5k8n;r?vCyF}JNRVZ^bfkosw|Œɖ͚ўբ٦ݪݪ٦բў͚ɖŒ|wsokfb^ZVRN}JyFvCr?n;k8h5e2a.^+\)Y&V#T!QOMKIGECB@ ? > < ;:9987765554443333333~3z3v3q3m3h3c3^3Y3S3L3E3=343)333'333<3D3K3R3X3]3c3h3l3q3u3y3}333333444555667889:;< = +? @ ACEFHJLNQS V#X%[(^+a.d1g4j7m:q>tAxE|IMPTX\`eimqvz~ǔ˘ϜӠפۨ߬߬ۨפӠϜ˘ǔ~zvqmie`\XTPM|IxEtAq>m:j7g4d1a.^+[(X%V#S QNLJHFECA@ ? = +< ;:9887665554443333333}3y3u3q3l3h3c3]3X3R3K3D3<333'333%313;3C3J3Q3W3]3b3g3l3p3t3x3|333333444555667889:;< = +> @ ACDFHJLNPRU"W$Z']*`-c0f3i6l9p=s@wDzG~KOSW[_cgkotx|đȕ̙НԡإܩܩإԡН̙ȕđ|xtokgc_[WSO~KzGwDs@p=l9i6f3c0`-]*Z'W$U"RPNLJHFDCA@ > = +< ;:9887665554443333333|3x3t3p3l3g3b3]3W3Q3J3C3;313%333#303:3B3I3P3V3\3a3f3k3o3t3x3|333333444455667789:;< = +> ? ABDEGIKMORT!W$Y&\)_,b/e2h5k8o = +< ;:9877665544443333333|3x3t3o3k3f3a3\3V3P3I3B3:303#333!3.383A3H3O3U3[3`3e3j3o3s3w3{333333444455667789:;< = +> ? @ BCEGIKMOQS V#X%[(^+a.d1g4j7m:q>tAxE{HLPTW[_cgkptx|Ðǔ˘ϜӠ֣ڧݪݪڧ֣ӠϜ˘ǔÐ|xtpkgc_[WTPL{HxEtAq>m:j7g4d1a.^+[(X%V#S QOMKIGECB@ ? > = +< ;:9877665544443333333{3w3s3o3j3e3`3[3U3O3H3A383.3!333,373@3G3N3T3Z3_3d3i3n3r3v3z3~333334444555677899:;< = +? @ ACEFHJLNPS U"X%Z']*`-c0f3i6l9o3F3M3S3Y3^3d3h3m3q3v3z3}333333444555667889:;< = +> @ ABDFGIKMPRT!W$Y&\)_,b/e2h5k8n;q>uBxE|ILPTX[_cgkosw{Œɖ͚НԡפڧޫޫڧפԡН͚ɖŒ{wsokgc_[XTPL|IxEuBq>n;k8h5e2b/_,\)Y&W$T!RPMKIGFDBA@ > = +< ;:9887665554443333333}3z3v3q3m3h3d3^3Y3S3M3F3>353*333(343=3E3L3R3X3]3c3g3l3p3u3y3}333333444455667789:;< = +> ? ABDEGIKMOQS V#X%[(^+`-c0f3i6m:p=s@wDzG~KNRVY]aeimqux|Ɠʗ͚ўԡפڧݪݪڧפԡў͚ʗƓ|xuqmiea]YVRN~KzGwDs@p=m:i6f3c0`-^+[(X%V#S QOMKIGEDBA? > = +< ;:9877665544443333333}3y3u3p3l3g3c3]3X3R3L3E3=343(333&323;3C3J3Q3W3\3b3f3k3p3t3x3|333333444455667789::;< > ? @ BCEFHJLNPRU"W$Z']*_,b/e2h5k8n;r?uBxE|ILPTW[_cfjnrvz}ÐƓʗ͚НԡפڧݪݪڧפԡН͚ʗƓÐ}zvrnjfc_[WTPL|IxEuBr?n;k8h5e2b/_,]*Z'W$U"RPNLJHFECB@ ? > < ;::9877665544443333333|3x3t3p3k3f3b3\3W3Q3J3C3;323&333#30393B3I3P3V3[3`3e3j3o3s3w3{3333334444555667889:;< = +> @ ACDFGIKMORT!V#Y&[(^+a.d1g4j7m:p=s@wDzG~KNRUY]`dhlosw{~ÐƓʗ͚НӠ֣٦ܩޫޫܩ٦֣ӠН͚ʗƓÐ~{wsolhd`]YURN~KzGwDs@p=m:j7g4d1a.^+[(Y&V#T!ROMKIGFDCA@ > = +< ;:98876655544443333333{3w3s3o3j3e3`3[3V3P3I3B39303#333 3-373@3G3N3T3Z3_3d3i3n3r3v3z3~333333444555667889:;< = +> ? ABCEGIJLNQS U"X%Z']*`-b/e2h5k8n;r?uBxE|ILPSWZ^beimptx{ÐƓɖ͚Нҟբإۨݪ߬߬ݪۨإբҟН͚ɖƓÐ{xtpmieb^ZWSPL|IxEuBr?n;k8h5e2b/`-]*Z'X%U"S QNLJIGECBA? > = +< ;:9887665554443333333~3z3v3r3n3i3d3_3Z3T3N3G3@373-3 333+353>3F3M3S3Y3^3c3h3m3q3u3y3}333333444455667789::;< > ? @ ACDFHJLNPRT!W$Y&\)^+a.d1g4j7m:p=s@vCzG}JMQTX\_cfjmqux|ÐƓɖ̙Ϝўԡפ٦ۨݪ߬߬ݪۨ٦פԡўϜ̙ɖƓÐ|xuqmjfc_\XTQM}JzGvCs@p=m:j7g4d1a.^+\)Y&W$T!RPNLJHFDCA@ ? > < ;::9877665544443333333}3y3u3q3m3h3c3^3Y3S3M3F3>353+333(333<3D3K3R3W3]3b3g3k3p3t3x3|3333334444556677899:;< = +> @ ABDEGIKMOQS U"X%Z']*`-b/e2h5k8n;q>tAxE{H~KORVY]`dgknruy|Œȕ˘ΛНӠբפ٦ۨݪ߬߬ݪۨ٦פբӠНΛ˘ȕŒ|yurnkgd`]YVRO~K{HxEtAq>n;k8h5e2b/`-]*Z'X%U"S QOMKIGEDBA@ > = +< ;:99877665544443333333|3x3t3p3k3g3b3]3W3R3K3D3<333(333%313:3B3J3P3V3\3a3f3j3o3s3w3{3333333444555667889:;< = +> ? @ BCEFHJLNPRT!W$Y&\)^+a.d1g4i6l9o = +< ;:98876655544433333333{3w3s3o3j3f3a3\3V3P3J3B3:313%33 +3!3.383@3H3N3U3Z3_3d3i3m3r3v3z3}333333444455667789::;< = +? @ ACDFGIKMOQS U"X%Z']*_,b/e2h5k8n;q>tAwDzG}JMQTW[^aehloruy|ÐƓȕʗ͚ϜўӠԡ֣إ٦ڧۨܩݪݪޫޫޫޫޫޫݪݪܩۨڧ٦إ֣ԡӠўϜ͚ʗȕƓÐ|yurolhea^[WTQM}JzGwDtAq>n;k8h5e2b/_,]*Z'X%U"S QOMKIGFDCA@ ? = +< ;::9877665544443333333}3z3v3r3m3i3d3_3Z3U3N3H3@383.3!3 +33+363>3F3M3S3Y3^3c3h3l3p3u3y3|3333334444555667889:;< = +> ? ABCEGHJLNPRT!W$Y&[(^+a.c0f3i6l9o = +< ;:98876655544443333333|3y3u3p3l3h3c3^3Y3S3M3F3>363+333(333<3D3K3Q3W3\3b3f3k3o3s3w3{3333333444555667789:;;= +> ? @ ACDFGIKMOQS U"X%Z'\)_,b/d1g4j7m:p=s@vCyF|ILORUY\_behlorux{}đƓȕʗ̙͚ϜНўҟӠԡԡբբբբբբԡԡӠҟўНϜ͚̙ʗȕƓđ}{xurolheb_\YUROL|IyFvCs@p=m:j7g4d1b/_,\)Z'X%U"S QOMKIGFDCA@ ? > = +;;:98776655544433333333{3w3s3o3k3f3b3\3W3Q3K3D3<333(333%303:3B3I3P3U3[3`3e3j3n3r3v3z3~3333334444556677899:;< = +> ? ABCEGHJLNPRT!V#Y&[(]*`-c0e2h5k8n;p=s@vCyF|ILPSVY\_behknqtwz|đƓǔɖʗ˘̙͚ΛϜННННННННϜΛ͚̙˘ʗɖǔƓđ|zwtqnkheb_\YVSPL|IyFvCs@p=n;k8h5e2c0`-]*[(Y&V#T!RPNLJHGECBA? > = +< ;:99877665544443333333~3z3v3r3n3j3e3`3[3U3P3I3B3:303%333 3-373@3G3N3T3Y3_3c3h3m3q3u3y3|3333334444555667889:;< = +> ? @ ACDFGIKMOQS U"W$Y&\)^+a.c0f3i6l9n;q>tAwDzG}JMPSVY\_behknpsvx{~ÐđƓǔȕɖʗʗ˘˘̙̙̙̙˘˘ʗʗɖȕǔƓđÐ~{xvspnkheb_\YVSPM}JzGwDtAq>n;l9i6f3c0a.^+\)Y&W$U"S QOMKIGFDCA@ ? > = +< ;:98876655544443333333|3y3u3q3m3h3c3_3Y3T3N3G3@373-3 333*353=3E3L3R3X3]3b3g3k3o3s3w3{33333334445556677899:;< = +> ? ABCEFHJLMOQT!V#X%Z']*_,b/d1g4i6l9o = +< ;:998776655544433333333{3w3s3o3k3g3b3]3X3R3L3E3=353*333&323;3C3J3P3V3[3`3e3j3n3r3v3z3~3333334444555667889:;< = +> ? @ ACDFGIKLNPRT!V#Y&[(]*`-b/e2g4j7m:o = +< ;:98876655544443333333~3z3v3r3n3j3e3`3[3V3P3J3C3;323&33 3"3.383@3G3N3T3Y3_3c3h3l3q3u3x3|33333344445556677899:;< = +> ? ABCEFHIKMOQS U"W$Y&\)^+`-c0e2h5k8m:p=r?uBxE{H}JMPSUX[^`cehjmortvxz|~~|zxvtromjhec`^[XUSPM}J{HxEuBr?p=m:j7h5e2c0`-^+\)Y&W$U"S QOMKIHFECBA? > = +< ;:998776655544443333333|3x3u3q3l3h3c3_3Y3T3N3G3@383.3"3 33+353>3E3L3R3X3]3b3f3k3o3s3w3{3~3333334444556677889:;< = +> ? @ ABDEGHJLNPRT!V#X%Z'\)_,a.c0f3h5k8m:p=s@uBxE{H}JMPRUXZ]_bdgiknprtvxy{|~~|{yxvtrpnkigdb_]ZXURPM}J{HxEuBs@p=m:k8h5f3c0a._,\)Z'X%V#T!RPNLJHGEDBA@ ? > = +< ;:98877665544443333333~3{3w3s3o3k3f3b3]3X3R3L3E3>353+333'323;3C3J3P3V3[3`3e3i3n3r3v3y3}33333344445556677899:;< = +> ? @ BCDFGIKLNPRT!V#X%Z']*_,a.d1f3i6k8n;p=s@uBxEzG}JMORTWY\^acegjlnpqsuwxy{|}~~}|{yxwusqpnljgeca^\YWTROM}JzGxEuBs@p=n;k8i6f3d1a._,]*Z'X%V#T!RPNLKIGFDCB@ ? > = +< ;:998776655544443333333}3y3v3r3n3i3e3`3[3V3P3J3C3;323'33 3"3.383@3G3N3T3Y3^3c3h3l3p3t3x3{33333334444556677889:;< < = +? @ ABDEFHJKMOQS U"W$Y&[(]*_,b/d1f3i6k8n;p=s@uBxEzG}JLOQTVX[]_adfhjlmoqrtuvwxyz{{|||}}|||{{zyxwvutrqomljhfda_][XVTQOL}JzGxEuBs@p=n;k8i6f3d1b/_,]*[(Y&W$U"S QOMKJHFEDBA@ ? = +< < ;:988776655444433333333{3x3t3p3l3h3c3^3Y3T3N3G3@383.3"3 33*353=3E3K3Q3W3\3a3f3j3n3r3v3z3~33333344445556677899:;< = +> ? @ ACDEGHJLMOQS U"W$Y&[(]*`-b/d1f3i6k8n;p=r?uBwDzG|I~KNPSUWY\^`bdfgiklnoqrstuvvwwxxxxxxwwvvutsrqonlkigfdb`^\YWUSPN~K|IzGwDuBr?p=n;k8i6f3d1b/`-]*[(Y&W$U"S QOMLJHGEDCA@ ? > = +< ;:998776655544443333333~3z3v3r3n3j3f3a3\3W3Q3K3E3=353*333&313:3B3I3O3U3Z3_3d3h3m3q3u3x3|33333334444556667889::;< = +> ? ABCDFGIJLNPQS U"W$Y&[(^+`-b/d1f3i6k8m:p=r?tAwDyF{H~KMOQTVXZ\^`bceghjklmnopqrrssssssssrrqponmlkjhgecb`^\ZXVTQOM~K{HyFwDtAr?p=m:k8i6f3d1b/`-^+[(Y&W$U"S QPNLJIGFDCBA? > = +< ;::988766655444433333333|3x3u3q3m3h3d3_3Z3U3O3I3B3:313&33 +3!3-373?3F3M3S3X3]3b3g3k3o3s3w3z3~33333344445556677899:;< = +> ? @ ABCEFHIKLNPRT!V#X%Z'\)^+`-b/d1f3i6k8m:otAvCxEzG}JLNPRTVXZ\^_acdeghijklmmnnnoooonnnmmlkjihgedca_^\ZXVTRPNL}JzGxEvCtAq>o = +< ;:998776655544443333333~3z3w3s3o3k3g3b3]3X3S3M3F3?373-3!3 +33)333<3C3J3P3V3[3`3e3i3m3q3u3y3|33333334444555667889::;< = +> ? @ ACDEGHJKMNPRT!V#X%Z'\)^+`-b/d1f3h5j7m:os@uBwDyF|I~KMOQSTVXZ[]^`abdefgghiijjjjjjjjiihggfedba`^][ZXVTSQOM~K|IyFwDuBs@q>o = +< ;::988766555444433333333|3y3u3q3m3i3e3`3[3V3P3J3C3<333)333$3/393A3G3N3T3Y3^3c3g3k3o3s3w3{3~33333344445556677889:;;< = +> ? @ BCDEGHJKMOPRT!V#X%Z'\)^+`-b/d1f3h5j7l9n;p=r?tAvCxEzG|I~KMOQSTVWYZ\]^_`abcddeeffffffeeddcba`_^]\ZYWVTSQOM~K|IzGxEvCtAr?p=n;l9j7h5f3d1b/`-^+\)Z'X%V#T!RPOMKJHGEDCB@ ? > = +< ;;:988776655544443333333~3{3w3s3o3k3g3c3^3Y3T3N3G3A393/3$333+353=3E3K3Q3W3\3a3e3i3n3r3u3y3|333333344445556677899:;< = +> ? @ ABCDFGIJLMOQRT!V#X%Z'[(]*_,a.c0e2g4i6k8m:os@uBwDyF{H}J~KMOPRTUVXYZ[\]^__``aaaaaaaa``__^]\[ZYXVUTRPOM~K}J{HyFwDuBs@q>o = +< ;:9987766555444433333333|3y3u3r3n3i3e3a3\3W3Q3K3E3=353+333&313:3B3H3O3T3Y3^3c3g3l3p3s3w3{3~33333344445556667889::;< = +> ? @ ABCEFGIJLMOQRT!V#X%Y&[(]*_,a.c0e2g4i6j7l9n;p=r?tAvCwDyF{H}J~KMNPQSTUVWXYZ[[\\]]]]]]]]\\[[ZYXWVUTSQPNM~K}J{HyFwDvCtAr?p=n;l9j7i6g4e2c0a._,]*[(Y&X%V#T!RQOMLJIGFECBA@ ? > = +< ;::988766655544443333333~3{3w3s3p3l3g3c3^3Y3T3O3H3B3:313&33 +3 3-363>3E3L3R3W3\3a3e3j3n3r3u3y3|333333344445556677889::;< = +> ? @ ABDEFGIJLMOQRT!V#W$Y&[(]*^+`-b/d1f3h5j7k8m:or?tAvCxEyF{H|I~KLMOPQRSTUVVWXXXYYYYYYXXXWVVUTSRQPOML~K|I{HyFxEvCtAr?q>o = +< ;::9887766555444433333333|3y3u3r3n3j3e3a3\3W3R3L3E3>363-3 3 +33(323;3B3I3O3U3Z3_3c3g3l3p3s3w3{3~333333444445556677899:;;< = +> ? @ ABDEFHIJLMOPRT!U"W$Y&Z'\)^+`-a.c0e2g4h5j7l9n;os@tAvCwDyFzG{H}J~KLMNOPQRRSSTTTUUUUTTTSSRRQPONML~K}J{HzGyFwDvCtAs@q>o = +< ;;:9987766555444443333333~3{3w3s3p3l3g3c3_3Z3U3O3I3B3;323(3 33"3.373?3F3L3R3W3\3a3e3j3n3q3u3y3|3333333444455566678899:;< = += +> ? @ ACDEFHIJLMOPRS U"W$X%Z'\)]*_,a.b/d1f3g4i6k8l9n;or?tAuBwDxEyFzG{H|I}J~KLMNNOOPPPQQQQPPPOONNML~K}J|I{HzGyFxEwDuBtAr?q>o = += +< ;:99887666555444433333333|3y3u3q3n3j3e3a3\3W3R3L3F3?373.3"3  33)333;3C3I3O3U3Z3_3c3g3k3o3s3w3z3~333333344445556677889::;< = +> > ? @ BCDEFHIJLMOPQS U"V#X%Y&[(]*^+`-a.c0e2f3h5i6k8l9n;o > = +< ;::9887766555444433333333~3z3w3s3o3k3g3c3_3Z3U3O3I3C3;333)3  + +33#3.373?3F3L3R3W3\3a3e3i3m3q3u3x3|3333333444445556677889::;< = +> ? @ ABCDEFGIJKMNPQS T!V#W$Y&Z'\)]*_,`-b/c0e2f3h5i6k8l9m:n;p=q>r?s@tAuBvCwDxExEyFzGzG{H{H{H|I|I|I|I|I|I{H{H{HzGzGyFxExEwDvCuBtAs@r?q>p=n;m:l9k8i6h5f3e2c0b/`-_,]*\)Z'Y&W$V#T!S QPNMKJIGFEDCBA@ ? > = +< ;::98877665554444433333333|3x3u3q3m3i3e3a3\3W3R3L3F3?373.3#3 + +  + + + + + + + + + + + +33)333;3C3I3O3T3Y3^3c3g3k3o3s3v3z3}3333333444455566677889::;< = +> ? @ ABCDEFGIJKMNOQRT!U"V#X%Y&[(\)^+_,a.b/c0e2f3h5i6j7k8l9n;or?s@s@tAuBuBvCvCwDwDxExExExExExExExEwDwDvCvCuBuBtAs@s@r?q>p=o = +< ;::98877666555444433333333}3z3v3s3o3k3g3c3^3Y3T3O3I3C3;333)3 + + + + + + + + + + + +  + + + + + + + + + + + + + + + + + + 33#3.373?3F3L3Q3W3\3`3e3i3m3p3t3x3{3~3333333444455566677899:;;< = +> ? @ ABCDEFGHJKLNOPRS T!V#W$X%Z'[(]*^+_,a.b/c0e2f3g4h5i6j7k8l9m:n;oq>r?r?s@s@tAtAtAtAtAtAtAtAtAtAs@s@r?r?q>q>p=o = +< ;;:99877666555444433333333~3{3x3t3p3m3i3e3`3\3W3Q3L3F3?373.3#3 + + + + + + + + + + + + + + + + + +  + + + + + + + + + + + + + + + + + + 33)333;3B3I3N3T3Y3^3b3f3j3n3r3u3y3|33333334444455566778899:;;< = +> ? @ ABCDEFGHIKLMNPQRT!U"V#X%Y&Z'[(]*^+_,`-b/c0d1e2f3g4h5i6j7k8l9l9m:n;n;oq>q>q>p=p=p=p=o = +< ;;:998877665554444433333333|3y3u3r3n3j3f3b3^3Y3T3N3I3B3;333)3 + + + + + + + + + + + + + + + + + +  + + + + + + + + + + + + + + + + 33"3.373>3E3K3Q3V3[3`3d3h3l3p3s3w3z3}33333334444455566778899:;;< = +> ? @ @ ABCDFGHIJKMNOPQS T!U"V#X%Y&Z'[(]*^+_,`-a.b/c0d1e2f3g4h5h5i6j7j7k8k8l9l9m:m:m:m:m:m:m:m:m:m:l9l9k8k8j7j7i6h5h5g4f3e2d1c0b/a.`-_,^+]*[(Z'Y&X%V#U"T!S QPONMKJIHGFDCBA@ @ ? > = +< ;;:998877665554444433333333}3z3w3s3p3l3h3d3`3[3V3Q3K3E3>373.3"3 + + + + + + + + + + + + + + + +  + + + + + + + + + + + + + + + + 33(323:3A3H3N3S3X3]3a3e3i3m3q3u3x3{3~33333334444555566778899:;;< = +> ? ? @ ABCDEFGIJKLMNOQRS T!U"W$X%Y&Z'[(\)]*^+_,`-a.b/c0d1e2e2f3g4g4h5h5i6i6i6i6j7j7j7j7j7j7i6i6i6i6h5h5g4g4f3e2e2d1c0b/a.`-_,^+]*\)[(Z'Y&X%W$U"T!S RQONMLKJIGFEDCBA@ ? ? > = +< ;;:998877665555444433333333~3{3x3u3q3m3i3e3a3]3X3S3N3H3A3:323(3 + + + + + + + + + + + + + + + +  + + + + + + + + + + + + + + + 33!3-363=3D3J3P3U3Z3_3c3g3k3o3r3v3y3|333333334444555666778899:;;< = +> > ? @ ABCDEFGHIJKLNOPQRS T!U"V#X%Y&Z'[(\)]*]*^+_,`-a.b/b/c0c0d1d1e2e2f3f3f3f3f3f3f3f3f3f3f3f3e2e2d1d1c0c0b/b/a.`-_,^+]*]*\)[(Z'Y&X%V#U"T!S RQPONLKJIHGFEDCBA@ ? > > = +< ;;:9988776665554444333333333|3y3v3r3o3k3g3c3_3Z3U3P3J3D3=363-3!3 + + + + + + + + + + + + + + +  + + + + + + + + + + + + + + + 33&31393@3G3M3R3W3\3`3d3h3l3p3s3w3z3}333333344444555666778899:;;< = += +> ? @ ABCDEFGHIJKLMNOPQRS T!U"V#W$X%Y&Z'[(\)\)]*^+_,_,`-`-a.a.b/b/c0c0c0c0c0c0c0c0c0c0c0c0b/b/a.a.`-`-_,_,^+]*\)\)[(Z'Y&X%W$V#U"T!S RQPONMLKJIHGFEDCBA@ ? > = += +< ;;:9988776665554444433333333}3z3w3s3p3l3h3d3`3\3W3R3M3G3@39313&3 + + + + + + + + + + + + + + +  + + + + + + + + + + + + + + 3 33+343<3C3I3O3T3Y3]3b3f3j3m3q3t3x3{3~333333344444555666778899:;;< = += +> ? @ AABCDEFGHIJKLMNOPQRS T!U"V#V#W$X%Y&Z'Z'[(\)\)]*^+^+^+_,_,`-`-`-`-`-`-`-`-`-`-`-`-_,_,^+^+^+]*\)\)[(Z'Z'Y&X%W$V#V#U"T!S RQPONMLKJIHGFEDCBAA@ ? > = += +< ;;:9988776665554444433333333~3{3x3t3q3m3j3f3b3]3Y3T3O3I3C3<343+33  + + + + + + + + + + + + + +  + + + + + + + + + + + + + + 33$3/373?3E3K3Q3V3Z3_3c3g3k3o3r3u3y3|3333333344444555666778899::;< < = +> ? ? @ ABCDEEFGHIJKLMNOPQRRS T!U"V#V#W$X%X%Y&Z'Z'[([(\)\)\)]*]*]*]*]*]*]*]*]*]*]*]*\)\)\)[([(Z'Z'Y&X%X%W$V#V#U"T!S RRQPONMLKJIHGFEEDCBA@ ? ? > = +< < ;::99887766655544444333333333|3y3u3r3o3k3g3c3_3Z3V3Q3K3E3?373/3$3 + + + + + + + + + + + + + +  + + + + + + + + + + + + + + 33)323:3A3H3M3R3W3\3`3d3h3l3p3s3v3y3}3333333344444555666778899::;< < = +> > ? @ ABBCDEFGHHIJKLMNOOPQRS S T!U"U"V#V#W$X%X%X%Y&Y&Z'Z'Z'Z'Z'Z'Z'Z'Z'Z'Z'Z'Z'Z'Y&Y&X%X%X%W$V#V#U"U"T!S S RQPOONMLKJIHHGFEDCBBA@ ? > > = +< < ;::99887766655544444333333333}3y3v3s3p3l3h3d3`3\3W3R3M3H3A3:323)3 + + + + + + + + + + + + + +  + + + + + + + + + + + + + 33!3-353=3D3I3O3T3Y3]3a3e3i3m3p3t3w3z3}3333333344444555666778899::;;< = += +> ? @ @ ABCCDEFGHHIJKLMMNOPPQRRS S T!U"U"U"V#V#W$W$W$W$X%X%X%X%X%X%X%X%W$W$W$W$V#V#U"U"U"T!S S RRQPPONMMLKJIHHGFEDCCBA@ @ ? > = += +< ;;::99887766655544444333333333}3z3w3t3p3m3i3e3a3]3Y3T3O3I3D3=353-3!3 + + + + + + + + + + + + +  + + + + + + + + + + + + + + 33&30383?3F3K3Q3V3Z3^3c3f3j3n3q3u3x3{3~3333333344444555666778889::;;< < = +> > ? @ AABCDDEFGHHIJKKLMMNOOPQQRRS S S T!T!T!U"U"U"U"U"U"U"U"U"U"U"U"T!T!T!S S S RRQQPOONMMLKKJIHHGFEDDCBAA@ ? > > = +< < ;;::98887766655544444333333333~3{3x3u3q3n3j3f3c3^3Z3V3Q3K3F3?38303&3 + + + + + + + + + + + + + +  + + + + + + + + + + + + + + 333*333;3A3G3M3R3W3[3`3d3g3k3o3r3u3x3{3~33333333444445556667778899::;< < = += +> ? ? @ ABBCDDEFGGHIIJKKLMMNNOOPPQQQRRRRRS S S S S S RRRRRQQQPPOONNMMLKKJIIHGGFEDDCBBA@ ? ? > = += +< < ;::998877766655544444333333333~3{3x3u3r3o3k3g3d3`3[3W3R3M3G3A3;333*33 + + + + + + + + + + + + + +  + + + + + + + + + + + + + + 33"3-353=3C3I3N3S3X3\3a3e3h3l3o3s3v3y3|333333334444445556667778899::;;< < = +> > ? @ @ ABBCDDEFFGHHIJJKKLLMMNNNOOOPPPPPPPPPPPPPPOOONNNMMLLKKJJIHHGFFEDDCBBA@ @ ? > > = +< < ;;::9988777666555444444333333333|3y3v3s3o3l3h3e3a3\3X3S3N3I3C3=353-3"3 + + + + + + + + + + + + + +  + + + + + + + + + + + + + 33&30383?3E3K3P3U3Y3]3a3e3i3m3p3s3v3y3|3333333344444455556667788999::;< < = += +> > ? @ @ ABBCCDEEFGGHHIIJJKKLLLMMMMNNNNNNNNNNNNMMMMLLLKKJJIIHHGGFEEDCCBBA@ @ ? > > = += +< < ;::99988776665555444444333333333|3y3v3s3p3m3i3e3a3]3Y3U3P3K3E3?38303&3 + + + + + + + + + + + + +  + + + + + + + + + + + + + 333)323:3@3F3L3Q3V3Z3^3b3f3j3m3p3t3w3z3}3333333334444455556667788899::;;< < = += +> ? ? @ @ AABCCDDEEFFGGHHIIJJJKKKKKLLLLLLLLLLKKKKKJJJIIHHGGFFEEDDCCBAA@ @ ? ? > = += +< < ;;::99888776665555444443333333333}3z3w3t3p3m3j3f3b3^3Z3V3Q3L3F3@3:323)33 + + + + + + + + + + + + +  + + + + + + + + + + + + + 33!3,343<3B3H3M3R3W3[3_3c3g3j3n3q3t3w3z3}33333333344444555566677788999::;;< < = += +> ? ? @ @ AABBCCDDEEFFGGGHHHIIIIIJJJJJJJJJJIIIIIHHHGGGFFEEDDCCBBAA@ @ ? ? > = += +< < ;;::999887776665555444443333333333}3z3w3t3q3n3j3g3c3_3[3W3R3M3H3B3<343,3!3 + + + + + + + + + + + + +  + + + + + + + + + + + + + 33$3.363=3C3I3N3S3W3\3`3d3g3k3n3q3t3w3z3}33333333344444555566667788899::;;;< < = += +> > ? ? @ @ AABBCCDDDEEFFFGGGGGHHHHHHHHHHHHGGGGGFFFEEDDDCCBBAA@ @ ? ? > > = += +< < ;;;::998887766665555444443333333333}3z3w3t3q3n3k3g3d3`3\3W3S3N3I3C3=363.3$3 + + + + + + + + + + + + +  + + + + + + + + + + + + 33'30383?3E3J3O3T3X3\3`3d3h3k3n3q3t3w3z3}333333333444444555566677788899::;;;< < = += +> > ? ? @ @ @ AABBCCCDDDEEEEEFFFFFFFFFFFFFFEEEEEDDDCCCBBAA@ @ @ ? ? > > = += +< < ;;;::9988877766655554444443333333333}3z3w3t3q3n3k3h3d3`3\3X3T3O3J3E3?38303'3 + + + + + + + + + + + +  + + + + + + + + + + + + + 333)32393@3F3K3P3U3Y3]3a3d3h3k3o3r3u3x3z3}3333333334444445555666677788999::;;;< < = += +> > > ? ? @ @ @ AAABBBCCCCDDDDDDDDDDDDDDDDDDCCCCBBBAAA@ @ @ ? ? > > > = += +< < ;;;::99988777666655554444443333333333}3z3x3u3r3o3k3h3d3a3]3Y3U3P3K3F3@39323)33 + + + + + + + + + + + + +  + + + + + + + + + + + + 33 3+333;3A3G3L3Q3U3Y3]3a3e3h3l3o3r3u3x3z3}33333333344444455555666777888999::;;;< < < = += +> > > ? ? ? @ @ @ AAAABBBBBCCCCCCCCCCCCBBBBBAAAA@ @ @ ? ? ? > > > = += +< < < ;;;::999888777666555554444443333333333}3z3x3u3r3o3l3h3e3a3]3Y3U3Q3L3G3A3;333+3 3 + + + + + + + + + + + +  + + + + + + + + + + + + 33#3-353<3B3G3L3Q3V3Z3^3a3e3h3l3o3r3u3w3z3}333333333444444455556666777888999:::;;;< < = += += +> > > > ? ? ? @ @ @ @ @ AAAAAAAAAAAAAAAAAA@ @ @ @ @ ? ? ? > > > > = += += +< < ;;;:::9998887776666555544444443333333333}3z3w3u3r3o3l3h3e3a3^3Z3V3Q3L3G3B3<353-3#3 + + + + + + + + + + + +  + + + + + + + + + + + + 33%3.363=3B3H3M3R3V3Z3^3b3e3h3l3o3r3u3w3z3}3333333333444444555556666777888999:::;;;< < < < = += += +> > > > ? ? ? ? ? ? @ @ @ @ @ @ @ @ @ @ @ @ @ @ ? ? ? ? ? ? > > > > = += += +< < < < ;;;:::99988877766665555544444433333333333}3z3w3u3r3o3l3h3e3b3^3Z3V3R3M3H3B3=363.3%3 + + + + + + + + + + + +  + + + + + + + + + + + + 33&3/373=3C3H3M3R3V3Z3^3b3e3h3l3o3q3t3w3z3|333333333344444445555666677778888999:::;;;;< < < < = += += += +> > > > > > > > ? ? ? ? ? ? ? ? > > > > > > > > = += += += +< < < < ;;;;:::9998888777766665555444444433333333333|3z3w3t3q3o3l3h3e3b3^3Z3V3R3M3H3C3=373/3&3 + + + + + + + + + + + +  + + + + + + + + + + + + 333(30373>3D3I3N3R3V3Z3^3b3e3h3k3n3q3t3w3y3|3~3333333334444444555556666777788889999::::;;;;< < < < < = += += += += += += += += += += += += += += += += += += += += += +< < < < < ;;;;::::99998888777766665555544444443333333333~3|3y3w3t3q3n3k3h3e3b3^3Z3V3R3N3I3D3>37303(33 + + + + + + + + + + + + + + + + + + + + + + + + 3 33)31383>3D3I3N3R3V3Z3^3a3e3h3k3n3q3t3v3y3{3~333333333344444445555566666777788889999:::::;;;;;;< < < < < < < < < < < < < < < < < < < < ;;;;;;:::::9999888877776666655555444444433333333333~3{3y3v3t3q3n3k3h3e3a3^3Z3V3R3N3I3D3>38313)33  + + + + + + + + + + + + + + + + + + + + + + + + 333)31383?3D3I3N3R3V3Z3^3a3e3h3k3n3p3s3v3x3{3}333333333344444444555556666677777888899999::::::;;;;;;;;;;;;;;;;;;;;;;::::::9999988887777766666555554444444433333333333}3{3x3v3s3p3n3k3h3e3a3^3Z3V3R3N3I3D3?38313)33 + + + + + + + + + + + + + + + + + + + + + + + + 33 3*32393?3D3I3N3R3V3Z3]3a3d3g3j3m3p3s3u3x3z3|33333333333444444445555566666677777888889999999::::::::::::::::::::::999999988888777776666665555544444444333333333333|3z3x3u3s3p3m3j3g3d3a3]3Z3V3R3N3I3D3?39323*3 3 + + + + + + + + + + + + + + + + + + + + + 33 3*32393?3D3I3N3R3V3Z3]3`3d3g3j3m3o3r3u3w3y3|3~33333333333444444445555556666677777788888889999999999999999999999999988888887777776666655555544444444333333333333~3|3y3w3u3r3o3m3j3g3d3`3]3Z3V3R3N3I3D3?39323*3 3 + + + + + + + + + + + + + + 33!3*32393?3D3I3M3Q3U3Y3]3`3c3f3i3l3o3q3t3v3y3{3}333333333334444444445555556666666777777788888888888899999988888888888877777776666666555555444444444333333333333}3{3y3v3t3q3o3l3i3f3c3`3]3Y3U3Q3M3I3D3?39323*3!3 + + + + + + + 33!3*32383>3C3H3M3Q3U3Y3\3_3c3f3h3k3n3q3s3u3x3z3|3~33333333333444444444555555566666666777777777888888888888888888777777777666666665555555444444444333333333333~3|3z3x3u3s3q3n3k3h3f3c3_3\3Y3U3Q3M3H3C3>38323*3!3 + + 33 3*31383>3C3H3L3P3T3X3[3_3b3e3h3j3m3p3r3t3w3y3{3}333333333333444444444455555555666666666777777777777777777777777776666666665555555544444444443333333333333}3{3y3w3t3r3p3m3j3h3e3b3_3[3X3T3P3L3H3C3>38313*3 3 33 3)31373=3B3G3K3P3S3W3[3^3a3d3g3j3l3o3q3s3v3x3z3|3~33333333333344444444445555555555666666666666666777777666666666666666555555555544444444443333333333333~3|3z3x3v3s3q3o3l3j3g3d3a3^3[3W3S3P3K3G3B3=37313)3 3 MMMM333(30373<3B3F3K3O3S3V3Z3]3`3c3f3h3k3n3p3r3u3w3y3{3}333333333333334444444444455555555555666666666666666666666666665555555555544444444444333333333333333}3{3y3w3u3r3p3n3k3h3f3c3`3]3Z3V3S3O3K3F3B3<37303(33MMMM  MMNNNNNN333'3/363;3A3E3J3N3R3U3Y3\3_3b3e3g3j3l3o3q3s3v3x3z3|3}33333333333333444444444444555555555555555555556655555555555555555555444444444444333333333333333}3|3z3x3v3s3q3o3l3j3g3e3b3_3\3Y3U3R3N3J3E3A3;363/3'33NNNNNNMM   NNNNNNNNNNNN3 33&3.353:3?3D3I3M3P3T3W3[3^3a3c3f3i3k3n3p3r3t3v3x3z3|3~3333333333333334444444444444455555555555555555555555555555555444444444444443333333333333333~3|3z3x3v3t3r3p3n3k3i3f3c3a3^3[3W3T3P3M3I3D3?3:353.3&33 NNNNNNNNNNNN   NNNNNNNNNOOOOOOO333%3,33393>3C3G3K3O3S3V3Y3\3_3b3e3g3j3l3n3q3s3u3w3y3z3|3~333333333333333344444444444444444455555555555555555544444444444444444433333333333333333~3|3z3y3w3u3s3q3n3l3j3g3e3b3_3\3Y3V3S3O3K3G3C3>39333,3%33OOOOOOONNNNNNNNN   !!OOOOOOOOOOOOOOOOOOOOO33#3+32383=3B3F3J3N3Q3U3X3[3^3a3c3f3h3k3m3o3q3s3u3w3y3{3|3~33333333333333333444444444444444444444444444444444444444444444444333333333333333333~3|3{3y3w3u3s3q3o3m3k3h3f3c3a3^3[3X3U3Q3N3J3F3B3=38323+3#3OOOOOOOOOOOOOOOOOOOOO!!   !!!!!!OOOOOOOOOOOOOOPPPPPPPPPP33 3)30363;3@3D3H3L3P3S3V3Z3\3_3b3d3g3i3k3m3p3r3s3u3w3y3{3|3~3333333333333333333444444444444444444444444444444444444444433333333333333333333~3|3{3y3w3u3s3r3p3m3k3i3g3d3b3_3\3Z3V3S3P3L3H3D3@3;36303)3 3PPPPPPPPPPOOOOOOOOOOOOOO!!!!!!   !!!!!!!!OOPPPPPPPPPPPPPPPPPPPPPPPPPP333'3.34393>3C3G3K3N3R3U3X3[3^3`3c3e3g3j3l3n3p3r3t3u3w3y3z3|3}333333333333333333333344444444444444444444444444444433333333333333333333333}3|3z3y3w3u3t3r3p3n3l3j3g3e3c3`3^3[3X3U3R3N3K3G3C3>39343.3'33PPPPPPPPPPPPPPPPPPPPPPPPPPOO!!!!!!!!   !!!!!!!""""PPPPPPPPPPPPPPPPPPPQQQQQQQQQQQQ3 33$3+32373<3A3E3I3L3P3S3V3Y3\3^3a3c3f3h3j3l3n3p3r3s3u3w3x3z3{3}3~333333333333333333333333333444444444444443333333333333333333333333333~3}3{3z3x3w3u3s3r3p3n3l3j3h3f3c3a3^3\3Y3V3S3P3L3I3E3A3<37323+3$33 QQQQQQQQQQQQPPPPPPPPPPPPPPPPPPP""""!!!!!!!  !!!!!!!"""""""PPPPPPQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ33!3)3/353:3?3C3G3J3N3Q3T3W3Z3\3_3a3d3f3h3j3l3n3p3q3s3u3v3x3y3{3|3}3~333333333333333333333333333333333333333333333333333333333333333~3}3|3{3y3x3v3u3s3q3p3n3l3j3h3f3d3a3_3\3Z3W3T3Q3N3J3G3C3?3:353/3)3!3QQQQQQQQQQQQQQQQQQQQQQQQQQQQQPPPPPP"""""""!!!!!!!  !!!!!!!""""""""##QQQQQQQQQQQQQQQQQQQQQQQQRRRRRRRRRRRRRR333%3,32383<3A3E3H3L3O3R3U3X3Z3]3_3b3d3f3h3j3l3m3o3q3r3t3u3w3x3z3{3|3}3~333333333333333333333333333333333333333333333333333333333~3}3|3{3z3x3w3u3t3r3q3o3m3l3j3h3f3d3b3_3]3Z3X3U3R3O3L3H3E3A3<38323,3%33RRRRRRRRRRRRRRQQQQQQQQQQQQQQQQQQQQQQQQ##""""""""!!!!!!!  !!!!!!!"""""""#####QQQQQQQQQQQRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR333"3)3/353:3>3B3F3I3M3P3S3U3X3[3]3_3b3d3f3h3i3k3m3o3p3r3s3u3v3w3x3z3{3|3}3~333333333333333333333333333333333333333333333333333~3}3|3{3z3x3w3v3u3s3r3p3o3m3k3i3h3f3d3b3_3]3[3X3U3S3P3M3I3F3B3>3:353/3)3"33RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRQQQQQQQQQQQ#####"""""""!!!!!!!  !!!!!!!"""""""#######$RRRRRRRRRRRRRRRRRRRRRRRRRRRRSSSSSSSSSSSSSSSSS333&3,32373;3@3C3G3J3M3P3S3V3X3[3]3_3a3c3e3g3i3k3l3n3o3q3r3s3u3v3w3x3y3z3{3|3}3~3333333333333333333333333333333333333333333~3}3|3{3z3y3x3w3v3u3s3r3q3o3n3l3k3i3g3e3c3a3_3]3[3X3V3S3P3M3J3G3C3@3;37323,3&33SSSSSSSSSSSSSSSSSRRRRRRRRRRRRRRRRRRRRRRRRRRRR$#######"""""""!!!!!!!  !!!!!!!""""""#######$$$$RRRRRRRRRRRRRRRSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS333!3(3.34383=3A3D3H3K3N3Q3S3V3X3Z3]3_3a3c3e3f3h3j3k3m3n3o3q3r3s3t3v3w3x3y3y3z3{3|3}3}3~333333333333333333333333333333333~3}3}3|3{3z3y3y3x3w3v3t3s3r3q3o3n3m3k3j3h3f3e3c3a3_3]3Z3X3V3S3Q3N3K3H3D3A3=38343.3(3!33SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSRRRRRRRRRRRRRRR$$$$#######""""""!!!!!!!  !!!!!!"""""""######$$$$$$$RRRRSSSSSSSSSSSSSSSSSSSSSSSSSSSSSTTTTTTTTTTTTTTTTTTT333$3*3035393=3A3E3H3K3N3P3S3U3X3Z3\3^3`3b3d3e3g3h3j3k3m3n3o3p3r3s3t3u3v3w3w3x3y3z3z3{3|3|3}3}3}3~3~33333333333333333~3~3}3}3}3|3|3{3z3z3y3x3w3w3v3u3t3s3r3p3o3n3m3k3j3h3g3e3d3b3`3^3\3Z3X3U3S3P3N3K3H3E3A3=3935303*3$33TTTTTTTTTTTTTTTTTTTSSSSSSSSSSSSSSSSSSSSSSSSSSSSSRRRR$$$$$$$######"""""""!!!!!!  !!!!!!"""""""######$$$$$$$%%SSSSSSSSSSSSSSSSSSSSTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTUU333&3,31363:3>3A3E3H3K3N3P3S3U3W3Y3[3]3_3a3b3d3f3g3i3j3k3l3n3o3p3q3r3s3t3t3u3v3w3w3x3x3y3y3z3z3{3{3{3{3|3|3|3|3|3|3|3|3|3|3{3{3{3{3z3z3y3y3x3x3w3w3v3u3t3t3s3r3q3p3o3n3l3k3j3i3g3f3d3b3a3_3]3[3Y3W3U3S3P3N3K3H3E3A3>3:36313,3&33UUTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTSSSSSSSSSSSSSSSSSSSS%%$$$$$$$######"""""""!!!!!!  !!!!!!"""""""######$$$$$$%%%%%%SSSSSSSSTTTTTTTTTTTTTTTTTTTTTTTTTTTTTUUUUUUUUUUUUUUUUUUUUU3 33!3'3-32363:3>3A3E3H3J3M3O3R3T3V3X3Z3\3^3_3a3c3d3e3g3h3i3j3l3m3n3o3o3p3q3r3s3s3t3t3u3u3v3v3w3w3w3x3x3x3x3x3x3x3x3x3x3x3x3w3w3w3v3v3u3u3t3t3s3s3r3q3p3o3o3n3m3l3j3i3h3g3e3d3c3a3_3^3\3Z3X3V3T3R3O3M3J3H3E3A3>3:36323-3'3!33 UUUUUUUUUUUUUUUUUUUUUTTTTTTTTTTTTTTTTTTTTTTTTTTTTTSSSSSSSS%%%%%%$$$$$$######"""""""!!!!!!  !!!!!!"""""""######$$$$$$%%%%%%&&TTTTTTTTTTTTTTTTTTTTTTTTUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUVVVV333"3(3-32363:3>3A3D3G3J3L3O3Q3S3U3W3Y3[3\3^3_3a3b3d3e3f3g3h3i3j3k3l3m3n3n3o3p3p3q3q3r3r3s3s3s3t3t3t3t3t3t3t3t3t3t3t3t3s3s3s3r3r3q3q3p3p3o3n3n3m3l3k3j3i3h3g3f3e3d3b3a3_3^3\3[3Y3W3U3S3Q3O3L3J3G3D3A3>3:36323-3(3"33VVVVUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUTTTTTTTTTTTTTTTTTTTTTTTT&&%%%%%%$$$$$$######"""""""!!!!!!  !!!!!!""""""######$$$$$$%%%%%%&&&&&TTTTTTTTTTTTUUUUUUUUUUUUUUUUUUUUUUUUUUUUUVVVVVVVVVVVVVVVVVVVVVVVV333"3(3-32363:3=3@3C3F3I3K3M3O3R3T3U3W3Y3Z3\3]3_3`3a3c3d3e3f3g3h3i3i3j3k3l3l3m3m3n3n3o3o3o3o3p3p3p3p3p3p3p3p3p3p3o3o3o3o3n3n3m3m3l3l3k3j3i3i3h3g3f3e3d3c3a3`3_3]3\3Z3Y3W3U3T3R3O3M3K3I3F3C3@3=3:36323-3(3"33VVVVVVVVVVVVVVVVVVVVVVVVUUUUUUUUUUUUUUUUUUUUUUUUUUUUUTTTTTTTTTTTT&&&&&%%%%%%$$$$$$######""""""!!!!!!  !!!!!!""""""######$$$$$$%%%%%%&&&&&&'TTTUUUUUUUUUUUUUUUUUUUUUUUUUVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVWWWWWWW333"3(3-3135393<3?3B3E3G3I3L3N3P3R3T3U3W3X3Z3[3]3^3_3`3a3b3c3d3e3f3f3g3h3h3i3i3j3j3k3k3k3k3l3l3l3l3l3l3l3l3k3k3k3k3j3j3i3i3h3h3g3f3f3e3d3c3b3a3`3_3^3]3[3Z3X3W3U3T3R3P3N3L3I3G3E3B3?3<3935313-3(3"33WWWWWWWVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUUUUUUUUUUUUUUUUUUUUUUUUUTTT'&&&&&&%%%%%%$$$$$$######""""""!!!!!!  !!!!!""""""######$$$$$$%%%%%%&&&&&&''''UUUUUUUUUUUUUUUUVVVVVVVVVVVVVVVVVVVVVVVVVVVVVWWWWWWWWWWWWWWWWWWWWWWWWWWW333!3'3,3034373;3>3@3C3E3H3J3L3N3P3Q3S3U3V3W3Y3Z3[3\3]3^3_3`3a3b3b3c3d3d3e3e3f3f3f3g3g3g3g3g3g3g3g3g3g3g3g3f3f3f3e3e3d3d3c3b3b3a3`3_3^3]3\3[3Z3Y3W3V3U3S3Q3P3N3L3J3H3E3C3@3>3;3734303,3'3!33WWWWWWWWWWWWWWWWWWWWWWWWWWWVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUUUUUUUUUUUUUUUU''''&&&&&&%%%%%%$$$$$$######""""""!!!!!  !!!!!!""""""#####$$$$$$%%%%%%&&&&&&''''''(UUUUUUVVVVVVVVVVVVVVVVVVVVVVVVVWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWXXXXXXXXX3 333%3*3.3235393<3>3A3C3E3H3I3K3M3O3P3R3S3U3V3W3X3Y3Z3[3\3]3^3^3_3_3`3`3a3a3b3b3b3b3b3c3c3c3c3b3b3b3b3b3a3a3`3`3_3_3^3^3]3\3[3Z3Y3X3W3V3U3S3R3P3O3M3K3I3H3E3C3A3>3<3935323.3*3%333 XXXXXXXXXWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWVVVVVVVVVVVVVVVVVVVVVVVVVUUUUUU(''''''&&&&&&%%%%%%$$$$$$#####""""""!!!!!!  !!!!!""""""######$$$$$%%%%%%&&&&&&''''''(((VVVVVVVVVVVVVVVVVVVVWWWWWWWWWWWWWWWWWWWWWWWWWWWWWXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX3333#3(3,303336393<3>3A3C3E3G3I3J3L3M3O3P3Q3S3T3U3V3W3W3X3Y3Z3Z3[3[3\3\3]3]3]3]3^3^3^3^3^3^3]3]3]3]3\3\3[3[3Z3Z3Y3X3W3W3V3U3T3S3Q3P3O3M3L3J3I3G3E3C3A3>3<393633303,3(3#333XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXWWWWWWWWWWWWWWWWWWWWWWWWWWWWWVVVVVVVVVVVVVVVVVVVV(((''''''&&&&&&%%%%%%$$$$$######""""""!!!!!  !!!!!!""""""#####$$$$$$%%%%%&&&&&&''''''((((()VVVVVVVVVVWWWWWWWWWWWWWWWWWWWWWWWWWXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXYYYYYYYYYYYYY3333%3)3-303336393;3>3@3B3D3E3G3H3J3K3M3N3O3P3Q3R3S3S3T3U3U3V3V3W3W3X3X3X3X3X3X3X3X3X3X3X3X3W3W3V3V3U3U3T3S3S3R3Q3P3O3N3M3K3J3H3G3E3D3B3@3>3;393633303-3)3%333YYYYYYYYYYYYYXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXWWWWWWWWWWWWWWWWWWWWWWWWWVVVVVVVVVV)(((((''''''&&&&&&%%%%%$$$$$$#####""""""!!!!!!  !!!!!!"""""######$$$$$%%%%%%&&&&&''''''(((((()))VWWWWWWWWWWWWWWWWWWWWWWWXXXXXXXXXXXXXXXXXXXXXXXXXXXXXYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY3333!3%3)3-303335383:3<3>3@3B3C3E3F3G3I3J3K3L3M3M3N3O3P3P3Q3Q3R3R3R3R3S3S3S3S3S3S3R3R3R3R3Q3Q3P3P3O3N3M3M3L3K3J3I3G3F3E3C3B3@3>3<3:383533303-3)3%3!333YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYXXXXXXXXXXXXXXXXXXXXXXXXXXXXXWWWWWWWWWWWWWWWWWWWWWWWV)))((((((''''''&&&&&%%%%%%$$$$$######"""""!!!!!!  !!!!!""""""#####$$$$$$%%%%%&&&&&&'''''(((((()))))*WWWWWWWWWWWWWXXXXXXXXXXXXXXXXXXXXXXXXXXYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYZZZZZZZZZZZZZZZZ3 333 3$3(3+3.313336383:3<3=3?3@3B3C3D3E3F3G3H3I3I3J3J3K3K3L3L3L3L3M3M3M3M3L3L3L3L3K3K3J3J3I3I3H3G3F3E3D3C3B3@3?3=3<3:383633313.3+3(3$3 333 ZZZZZZZZZZZZZZZZYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYXXXXXXXXXXXXXXXXXXXXXXXXXXWWWWWWWWWWWWW*)))))(((((('''''&&&&&&%%%%%$$$$$$#####""""""!!!!!  !!!!!""""""#####$$$$$%%%%%%&&&&&''''''((((())))))***WWWWXXXXXXXXXXXXXXXXXXXXXXXYYYYYYYYYYYYYYYYYYYYYYYYYYYYYZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ3 3333"3&3)3,3.31333537383:3;3<3>3?3@3A3B3B3C3D3D3E3E3E3F3F3F3F3F3F3F3F3E3E3E3D3D3C3B3B3A3@3?3>3<3;3:38373533313.3,3)3&3"3333 ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZYYYYYYYYYYYYYYYYYYYYYYYYYYYYYXXXXXXXXXXXXXXXXXXXXXXXWWWW***))))))(((((''''''&&&&&%%%%%%$$$$$#####""""""!!!!!  !!!!!"""""######$$$$$%%%%%&&&&&&'''''((((())))))*****+XXXXXXXXXXXXXXXXXYYYYYYYYYYYYYYYYYYYYYYYYYZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ[[[[[[[[[[[[[[[[[[[[[33333"3%3(3*3-3/303234353638393:3:3;3<3=3=3=3>3>3>3?3?3?3?3>3>3>3=3=3=3<3;3:3:393836353432303/3-3*3(3%3"3333[[[[[[[[[[[[[[[[[[[[[ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZYYYYYYYYYYYYYYYYYYYYYYYYYXXXXXXXXXXXXXXXXX+*****))))))((((('''''&&&&&&%%%%%$$$$$######"""""!!!!!  !!!!!"""""######$$$$$%%%%%&&&&&''''''((((()))))******+++XXXXXXXYYYYYYYYYYYYYYYYYYYYYYYZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[33333 3#3%3'3)3+3,3.3/3031323334343535363636363636363635353434333231303/3.3,3+3)3'3%3#3 3333[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZYYYYYYYYYYYYYYYYYYYYYYYXXXXXXX+++******)))))(((((''''''&&&&&%%%%%$$$$$######"""""!!!!!  !!!!!!"""""#####$$$$$$%%%%%&&&&&'''''((((())))))*****+++++,YYYYYYYYYYYYYYYYYYYYZZZZZZZZZZZZZZZZZZZZZZZZZZ[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[\\\\\\\\\\\\\\\\\\\\\\\\\\\33333333!3#3%3&3'3(3)3*3*3+3+3,3,3,3,3,3,3+3+3*3*3)3(3'3&3%3#3!3333333\\\\\\\\\\\\\\\\\\\\\\\\\\\[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[ZZZZZZZZZZZZZZZZZZZZZZZZZZYYYYYYYYYYYYYYYYYYYY,+++++*****))))))((((('''''&&&&&%%%%%$$$$$$#####"""""!!!!!!  !!!!!"""""#####$$$$$%%%%%%&&&&&'''''((((()))))*****++++++,,,,YYYYYYYYYYZZZZZZZZZZZZZZZZZZZZZZZ[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\33 333333333333333333333333333 3\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[ZZZZZZZZZZZZZZZZZZZZZZZYYYYYYYYYY,,,,++++++*****)))))((((('''''&&&&&%%%%%%$$$$$#####"""""!!!!!  !!!!!"""""#####$$$$$%%%%%&&&&&&'''''((((()))))*****+++++,,,,,--YZZZZZZZZZZZZZZZZZZZZZZ[[[[[[[[[[[[[[[[[[[[[[[[[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\[[[[[[[[[[[[[[[[[[[[[[[[[ZZZZZZZZZZZZZZZZZZZZZZY--,,,,,+++++*****)))))((((('''''&&&&&&%%%%%$$$$$#####"""""!!!!!  !!!!!"""""#####$$$$$%%%%%&&&&&'''''(((((()))))*****+++++,,,,,----ZZZZZZZZZZZZZ[[[[[[[[[[[[[[[[[[[[[[[[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\[[[[[[[[[[[[[[[[[[[[[[[[ZZZZZZZZZZZZZ----,,,,,+++++*****)))))(((((('''''&&&&&%%%%%$$$$$#####"""""!!!!!  !!!!!"""""#####$$$$$%%%%%&&&&&'''''((((()))))*****+++++,,,,,-----..ZZZZZ[[[[[[[[[[[[[[[[[[[[[\\\\\\\\\\\\\\\\\\\\\\\\\\]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]\\\\\\\\\\\\\\\\\\\\\\\\\\[[[[[[[[[[[[[[[[[[[[[ZZZZZ..-----,,,,,+++++*****)))))((((('''''&&&&&%%%%%$$$$$#####"""""!!!!!  !!!!!"""""#####$$$$$%%%%%&&&&&'''''((((()))))*****+++++,,,,,-----.....[[[[[[[[[[[[[[[[\\\\\\\\\\\\\\\\\\\\\\\]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]\\\\\\\\\\\\\\\\\\\\\\\[[[[[[[[[[[[[[[[.....-----,,,,,+++++*****)))))((((('''''&&&&&%%%%%$$$$$#####"""""!!!!!  !!!!!"""""#####$$$$$%%%%%&&&&&'''''((((()))))*****+++++,,,,,-----.....//[[[[[[[\\\\\\\\\\\\\\\\\\\\\\]]]]]]]]]]]]]]]]]]]]]]]]]]^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^______________________________________________________________________________^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^]]]]]]]]]]]]]]]]]]]]]]]]]]\\\\\\\\\\\\\\\\\\\\\\[[[[[[[//.....-----,,,,,+++++*****)))))((((('''''&&&&&%%%%%$$$$$#####"""""!!!!!  !!!!!!"""""#####$$$$$%%%%%&&&&'''''((((()))))*****+++++,,,,,----...../////0\\\\\\\\\\\\\\\\\\\]]]]]]]]]]]]]]]]]]]]]]]^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^__________________________________________________________________________________________________________________________^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^]]]]]]]]]]]]]]]]]]]]]]]\\\\\\\\\\\\\\\\\\\0/////.....----,,,,,+++++*****)))))((((('''''&&&&%%%%%$$$$$#####"""""!!!!!!  !!!!!"""""#####$$$$$%%%%%&&&&&''''((((()))))*****+++++,,,,-----...../////000\\\\\\\\\\]]]]]]]]]]]]]]]]]]]]]]^^^^^^^^^^^^^^^^^^^^^^^^^^__________________________________________``````````````````````````````````````````````````````````````````````__________________________________________^^^^^^^^^^^^^^^^^^^^^^^^^^]]]]]]]]]]]]]]]]]]]]]]\\\\\\\\\\000/////.....-----,,,,+++++*****)))))(((((''''&&&&&%%%%%$$$$$#####"""""!!!!!  !!!!!"""""#####$$$$$%%%%%&&&&&'''''(((()))))*****+++++,,,,-----...../////000011\]]]]]]]]]]]]]]]]]]]]^^^^^^^^^^^^^^^^^^^^^^^^________________________________````````````````````````````````````````````````````````````````````````````````````````````````````````````````````________________________________^^^^^^^^^^^^^^^^^^^^^^^^]]]]]]]]]]]]]]]]]]]]\110000/////.....-----,,,,+++++*****)))))(((('''''&&&&&%%%%%$$$$$#####"""""!!!!!  !!!!!"""""#####$$$$$%%%%%&&&&&'''''(((()))))*****+++++,,,,-----.....////0000011111]]]]]]]]]]]]^^^^^^^^^^^^^^^^^^^^^^___________________________````````````````````````````````````````````aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa````````````````````````````````````````````___________________________^^^^^^^^^^^^^^^^^^^^^^]]]]]]]]]]]]1111100000////.....-----,,,,+++++*****)))))(((('''''&&&&&%%%%%$$$$$#####"""""!!!!!  !!!!!"""""#####$$$$$%%%%&&&&&'''''((((())))*****+++++,,,,-----.....////000001111122]]]]^^^^^^^^^^^^^^^^^^^^________________________`````````````````````````````````aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa`````````````````````````````````________________________^^^^^^^^^^^^^^^^^^^^]]]]221111100000////.....-----,,,,+++++*****))))((((('''''&&&&&%%%%$$$$$#####"""""!!!!!  !!!!!"""""#####$$$$$%%%%%&&&&'''''((((())))*****+++++,,,,-----.....////000001111222223^^^^^^^^^^^^^^^______________________```````````````````````````aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa```````````````````````````______________________^^^^^^^^^^^^^^^322222111100000////.....-----,,,,+++++*****))))((((('''''&&&&%%%%%$$$$$#####"""""!!!!!  !!!!!!""""#####$$$$$%%%%%&&&&&''''((((()))))****+++++,,,,-----.....////000001111222223333^^^^^^____________________`````````````````````````aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa`````````````````````````____________________^^^^^^333322222111100000////.....-----,,,,+++++****)))))(((((''''&&&&&%%%%%$$$$$#####""""!!!!!!  !!!!!"""""#####$$$$$%%%%&&&&&'''''(((()))))****+++++,,,,,----.....////00000111122222333344__________________``````````````````````aaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbccccccccccccccccccccccccccccccccbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaaaaaaaaaaaaaaaaaaaaaaa``````````````````````__________________44333322222111100000////.....----,,,,,+++++****)))))(((('''''&&&&&%%%%$$$$$#####"""""!!!!!  !!!!!"""""#####$$$$$%%%%%&&&&'''''((((())))*****++++,,,,,----.....////00000111122222333344444_________````````````````````aaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaaaaaaaaaaaaaaaaaaaa````````````````````_________44444333322222111100000////.....----,,,,,++++*****))))((((('''''&&&&%%%%%$$$$$#####"""""!!!!!  !!!!!"""""#####$$$$%%%%%&&&&&''''((((()))))****+++++,,,,----.....////00000111122222333344444555````````````````````aaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaaaaaaaaaaaaaaaaa````````````````````55544444333322222111100000////.....----,,,,+++++****)))))(((((''''&&&&&%%%%%$$$$#####"""""!!!!!  !!!!!"""""#####$$$$$%%%%%&&&&'''''(((()))))****+++++,,,,-----..../////0000111122222333344444555566```````````aaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbccccccccccccccccccccccccccccccccccccddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddccccccccccccccccccccccccccccccccccccbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaaaaaaaaaaaaaaa```````````6655554444433332222211110000/////....-----,,,,+++++****)))))(((('''''&&&&%%%%%$$$$$#####"""""!!!!!  !!!!!"""""#####$$$$%%%%%&&&&&''''((((())))*****++++,,,,,----..../////0000111122222333344444555566666``aaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbccccccccccccccccccccccccccccccddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddccccccccccccccccccccccccccccccbbbbbbbbbbbbbbbbbbbbbbaaaaaaaaaaaaaaaaaaaa``6666655554444433332222211110000/////....----,,,,,++++*****))))(((((''''&&&&&%%%%%$$$$#####"""""!!!!!  !!!!!"""""#####$$$$$%%%%%&&&&'''''(((()))))****+++++,,,,----.....////0000111112222333344444555566667777aaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbcccccccccccccccccccccccccdddddddddddddddddddddddddddddddddddddddeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeedddddddddddddddddddddddddddddddddddddddcccccccccccccccccccccccccbbbbbbbbbbbbbbbbbbbbbaaaaaaaaaaaaa7777666655554444433332222111110000////.....----,,,,+++++****)))))(((('''''&&&&%%%%%$$$$$#####"""""!!!!!  !!!!!"""""#####$$$$%%%%%&&&&&''''((((())))*****++++,,,,-----....////0000011112222333344444555566667777788aaaabbbbbbbbbbbbbbbbbbbbcccccccccccccccccccccccddddddddddddddddddddddddddddddeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeddddddddddddddddddddddddddddddcccccccccccccccccccccccbbbbbbbbbbbbbbbbbbbbaaaa8877777666655554444433332222111100000////....-----,,,,++++*****))))(((((''''&&&&&%%%%%$$$$#####"""""!!!!!  !!!!!""""#####$$$$$%%%%%&&&&'''''(((()))))****++++,,,,,----..../////000011112222333334444555566666777788889bbbbbbbbbbbbbbbcccccccccccccccccccccddddddddddddddddddddddddddeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeddddddddddddddddddddddddddcccccccccccccccccccccbbbbbbbbbbbbbbb988887777666665555444433333222211110000/////....----,,,,,++++****)))))(((('''''&&&&%%%%%$$$$$#####""""!!!!!  !!!!!"""""#####$$$$$%%%%&&&&&''''((((())))*****++++,,,,-----....////000011112222233334444555566666777788889999bbbbbbccccccccccccccccccccddddddddddddddddddddddddeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeddddddddddddddddddddddddccccccccccccccccccccbbbbbb999988887777666665555444433332222211110000////....-----,,,,++++*****))))(((((''''&&&&&%%%%$$$$$#####"""""!!!!! !!!!!"""""####$$$$$%%%%%&&&&'''''(((()))))****++++,,,,,----....////0000011112222333344445555566667777888899999:::ccccccccccccccccdddddddddddddddddddddeeeeeeeeeeeeeeeeeeeeeeeeeeefffffffffffffffffffffffffffffffffffffffffffffggggggggggggggggggggggggggggggggggggggggggggggggggggggfffffffffffffffffffffffffffffffffffffffffffffeeeeeeeeeeeeeeeeeeeeeeeeeeedddddddddddddddddddddcccccccccccccccc:::9999988887777666655555444433332222111100000////....----,,,,,++++****)))))(((('''''&&&&%%%%%$$$$$####"""""!!!!! !!!"""""#####$$$$$%%%%&&&&&''''((((())))*****++++,,,,----.....////000011112222333334444555566667777888899999::::;;ccccccccddddddddddddddddddddeeeeeeeeeeeeeeeeeeeeeeefffffffffffffffffffffffffffffffffggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggfffffffffffffffffffffffffffffffffeeeeeeeeeeeeeeeeeeeeeeeddddddddddddddddddddcccccccc;;::::999998888777766665555444433333222211110000////.....----,,,,++++*****))))(((((''''&&&&&%%%%$$$$$#####"""""!!!!"""""#####$$$$%%%%%&&&&&''''(((()))))****++++,,,,,----....////000001111222233334444555566667777888889999::::;;;;>eeeeeeeeeeefffffffffffffffffffffgggggggggggggggggggggggghhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiihhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhggggggggggggggggggggggggfffffffffffffffffffffeeeeeeeeeee>>====<<<<;;;;:::::9999888877776666555544443333222211110000////....----,,,,,++++****)))))((((''''&&&&&%%%%%$$$$#####$$$$$%%%%%&&&&'''''(((())))*****++++,,,,----..../////0000111122223333444455556666777788889999::::;;;;<<<<====>>>>??eefffffffffffffffffffggggggggggggggggggggggghhhhhhhhhhhhhhhhhhhhhhhhhhhhhiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiihhhhhhhhhhhhhhhhhhhhhhhhhhhhhgggggggggggggggggggggggfffffffffffffffffffee??>>>>====<<<<;;;;::::9999888877776666555544443333222211110000/////....----,,,,++++*****))))(((('''''&&&&%%%%%$$$$$#$$$$%%%%&&&&&''''((((())))****+++++,,,,----....////0000111122223333444455556666777788889999::::;;;;<<<<====>>>>????@fffffffffffffgggggggggggggggggggghhhhhhhhhhhhhhhhhhhhhhhhhhiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiijjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiihhhhhhhhhhhhhhhhhhhhhhhhhhggggggggggggggggggggfffffffffffff@????>>>>====<<<<;;;;::::9999888877776666555544443333222211110000////....----,,,,+++++****))))(((((''''&&&&&%%%%$$$$$$%%%%&&&&&''''(((()))))****++++,,,,-----....////0000111122223333444455556666777788889999:::;;;;<<<<====>>>>?????@@@@fffgggggggggggggggggggghhhhhhhhhhhhhhhhhhhhhhhiiiiiiiiiiiiiiiiiiiiiiiiiiiiiijjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjiiiiiiiiiiiiiiiiiiiiiiiiiiiiiihhhhhhhhhhhhhhhhhhhhhhhggggggggggggggggggggfff@@@@?????>>>>====<<<<;;;;:::9999888877776666555544443333222211110000////....-----,,,,++++****)))))((((''''&&&&&%%%%$$%%%%&&&&'''''(((()))))****++++,,,,----....////0000111122223333444455556666777788889999::::;;;;<<<<====>>>>????@@@@AAAgggggggggggggghhhhhhhhhhhhhhhhhhhhhiiiiiiiiiiiiiiiiiiiiiiiiiijjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjiiiiiiiiiiiiiiiiiiiiiiiiiihhhhhhhhhhhhhhhhhhhhhggggggggggggggAAA@@@@????>>>>====<<<<;;;;::::9999888877776666555544443333222211110000////....----,,,,++++****)))))(((('''''&&&&%%%%%%&&&&'''''(((())))*****++++,,,,----....////000011112222333344445555666677778888999::::;;;;<<<<====>>>>????@@@@AAAABBBggggghhhhhhhhhhhhhhhhhhhhiiiiiiiiiiiiiiiiiiiiiiijjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjiiiiiiiiiiiiiiiiiiiiiiihhhhhhhhhhhhhhhhhhhhgggggBBBAAAA@@@@????>>>>====<<<<;;;;::::999888877776666555544443333222211110000////....----,,,,++++*****))))(((('''''&&&&%%&&&&''''((((())))****+++++,,,,----....////000011112222333344445556666777788889999::::;;;;<<<<===>>>>????@@@@AAAABBBBCChhhhhhhhhhhhhhhhiiiiiiiiiiiiiiiiiiiiijjjjjjjjjjjjjjjjjjjjjjjjjjjkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkllllllllllllllllllllllllllllllllllkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkjjjjjjjjjjjjjjjjjjjjjjjjjjjiiiiiiiiiiiiiiiiiiiiihhhhhhhhhhhhhhhhCCBBBBAAAA@@@@????>>>>===<<<<;;;;::::999988887777666655544443333222211110000////....----,,,,+++++****))))(((((''''&&&&&&''''((((())))****++++,,,,-----....////00001111222333344445555666677778888999::::;;;;<<<<====>>>>????@@@@AAABBBBCCCCDDhhhhhhiiiiiiiiiiiiiiiiiiiijjjjjjjjjjjjjjjjjjjjjjjjjkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkjjjjjjjjjjjjjjjjjjjjjjjjjiiiiiiiiiiiiiiiiiiiihhhhhhDDCCCCBBBBAAA@@@@????>>>>====<<<<;;;;::::99988887777666655554444333322211110000////....-----,,,,++++****))))(((((''''&&''''(((()))))****++++,,,,----....////000011112222333344445555666677788889999::::;;;;<<<<===>>>>????@@@@AAAABBBBCCCCDDDDEiiiiiiiiiiiiiiiiijjjjjjjjjjjjjjjjjjjjjkkkkkkkkkkkkkkkkkkkkkkkkkkkkkllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllkkkkkkkkkkkkkkkkkkkkkkkkkkkkkjjjjjjjjjjjjjjjjjjjjjiiiiiiiiiiiiiiiiiEDDDDCCCCBBBBAAAA@@@@????>>>>===<<<<;;;;::::999988887776666555544443333222211110000////....----,,,,++++****)))))((((''''''(((())))*****++++,,,,----....////000011112222333344445556666777788889999:::;;;;<<<<====>>>>???@@@@AAAABBBBCCCCDDDDEEEEFiiiiiiijjjjjjjjjjjjjjjjjjjjkkkkkkkkkkkkkkkkkkkkkkkkklllllllllllllllllllllllllllllllllllllmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmlllllllllllllllllllllllllllllllllllllkkkkkkkkkkkkkkkkkkkkkkkkkjjjjjjjjjjjjjjjjjjjjiiiiiiiFEEEEDDDDCCCCBBBBAAAA@@@@???>>>>====<<<<;;;;:::999988887777666655544443333222211110000////....----,,,,++++*****))))((((''(((())))*****++++,,,,----....////00001111222233334445555666677778888999::::;;;;<<<<===>>>>????@@@@AAAABBBCCCCDDDDEEEEFFFFGjjjjjjjjjjjjjjjjjkkkkkkkkkkkkkkkkkkkkkkklllllllllllllllllllllllllllllmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmlllllllllllllllllllllllllllllkkkkkkkkkkkkkkkkkkkkkkkjjjjjjjjjjjjjjjjjGFFFFEEEEDDDDCCCCBBBAAAA@@@@????>>>>===<<<<;;;;::::99988887777666655554443333222211110000////....----,,,,++++*****))))(((((())))****+++++,,,,----....////00001111222333344445555666677788889999::::;;;<<<<====>>>>???@@@@AAAABBBBCCCCDDDEEEEFFFFGGGGHjjjjjjjjkkkkkkkkkkkkkkkkkkkkklllllllllllllllllllllllllmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmlllllllllllllllllllllllllkkkkkkkkkkkkkkkkkkkkkjjjjjjjjHGGGGFFFFEEEEDDDCCCCBBBBAAAA@@@@???>>>>====<<<<;;;::::99998888777666655554444333322211110000////....----,,,,+++++****))))(())))****++++,,,,-----....////00011112222333344445555666777788889999:::;;;;<<<<====>>>????@@@@AAABBBBCCCCDDDDEEEEFFFFGGGHHHHIkkkkkkkkkkkkkkkkkklllllllllllllllllllllllmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmlllllllllllllllllllllllkkkkkkkkkkkkkkkkkkIHHHHGGGFFFFEEEEDDDDCCCCBBBBAAA@@@@????>>>====<<<<;;;;:::99998888777766655554444333322221111000////....-----,,,,++++****))))))****++++,,,,----....////00001111222233334444555666677778888999::::;;;;<<<====>>>>????@@@AAAABBBBCCCDDDDEEEEFFFFGGGGHHHHIIIIkkkkkkkkklllllllllllllllllllllmmmmmmmmmmmmmmmmmmmmmmmmmmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnoooooooooooooooooooooooooooooooooooooooooooonnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmmmmmmmmmmmmmmmmmmmmmmmmmmlllllllllllllllllllllkkkkkkkkkIIIIHHHHGGGGFFFFEEEEDDDDCCCBBBBAAAA@@@????>>>>====<<<;;;;::::99988887777666655544443333222211110000////....----,,,,++++****))****++++,,,,----....////00001111222233334445555666677778889999::::;;;<<<<====>>>????@@@@AAABBBBCCCCDDDDEEEFFFFGGGGHHHHIIIIJJJJlllllllllllllllllllmmmmmmmmmmmmmmmmmmmmmmmmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooonnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmmmmmmmmmmmmmmmmmmmmmmmmlllllllllllllllllllJJJJIIIIHHHHGGGGFFFFEEEDDDDCCCCBBBBAAA@@@@????>>>====<<<<;;;::::99998887777666655554443333222211110000////....----,,,,++++******++++,,,,----....////00001111222233334445555666677778889999::::;;;<<<<===>>>>????@@@AAAABBBBCCCDDDDEEEEFFFFGGGHHHHIIIIJJJJKKKKllllllllllmmmmmmmmmmmmmmmmmmmmmnnnnnnnnnnnnnnnnnnnnnnnnnnnnoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooonnnnnnnnnnnnnnnnnnnnnnnnnnnnmmmmmmmmmmmmmmmmmmmmmllllllllllKKKKJJJJIIIIHHHHGGGFFFFEEEEDDDDCCCBBBBAAAA@@@????>>>>===<<<<;;;::::99998887777666655554443333222211110000////....----,,,,++++**++++,,,,----....////00001111222233344445555666677788889999:::;;;;<<<<===>>>>???@@@@AAAABBBCCCCDDDDEEEFFFFGGGGHHHHIIIJJJJKKKKLLLLlmmmmmmmmmmmmmmmmmmmmnnnnnnnnnnnnnnnnnnnnnnnnooooooooooooooooooooooooooooooooooooppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppoooooooooooooooooooooooooooooooooooonnnnnnnnnnnnnnnnnnnnnnnnmmmmmmmmmmmmmmmmmmmmlLLLLKKKKJJJJIIIHHHHGGGGFFFFEEEDDDDCCCCBBBAAAA@@@@???>>>>===<<<<;;;;:::99998888777666655554444333222211110000////....----,,,,++++++,,,,----....////0000111122233334444555566677778888999::::;;;;<<<====>>>>???@@@@AAABBBBCCCCDDDEEEEFFFFGGGHHHHIIIIJJJJKKKLLLLMMMMmmmmmmmmmmmnnnnnnnnnnnnnnnnnnnnnnoooooooooooooooooooooooooooooppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppooooooooooooooooooooooooooooonnnnnnnnnnnnnnnnnnnnnnmmmmmmmmmmmMMMMLLLLKKKJJJJIIIIHHHHGGGFFFFEEEEDDDCCCCBBBBAAA@@@@???>>>>====<<<;;;;::::9998888777766655554444333322211110000////....----,,,,++,,,,----....////0000111122233334444555566677778888999::::;;;;<<<====>>>????@@@AAAABBBBCCCDDDDEEEFFFFGGGGHHHIIIIJJJJKKKKLLLMMMMNNNNOmnnnnnnnnnnnnnnnnnnnnoooooooooooooooooooooooooppppppppppppppppppppppppppppppppppppppppqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqppppppppppppppppppppppppppppppppppppppppooooooooooooooooooooooooonnnnnnnnnnnnnnnnnnnnmONNNNMMMMLLLKKKKJJJJIIIIHHHGGGGFFFFEEEDDDDCCCBBBBAAAA@@@????>>>====<<<;;;;::::9998888777766655554444333322211110000////....----,,,,,,----....////0000111122233334444555566677778888999::::;;;<<<<===>>>>????@@@AAAABBBCCCCDDDEEEEFFFFGGGHHHHIIIIJJJKKKKLLLLMMMMNNNNOOOPnnnnnnnnnnnoooooooooooooooooooooooppppppppppppppppppppppppppppppqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqppppppppppppppppppppppppppppppooooooooooooooooooooooonnnnnnnnnnnPOOONNNNMMMMLLLLKKKKJJJIIIIHHHHGGGFFFFEEEEDDDCCCCBBBAAAA@@@????>>>>===<<<<;;;::::9998888777766655554444333322211110000////....----,,----....////0000111222233334444555666677778889999::::;;;<<<<===>>>>???@@@@AAABBBBCCCCDDDEEEEFFFGGGGHHHIIIIJJJJKKKLLLLMMMMNNNNOOOOPPPPnnoooooooooooooooooooooppppppppppppppppppppppppppqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqppppppppppppppppppppppppppooooooooooooooooooooonnPPPPOOOONNNNMMMMLLLLKKKJJJJIIIIHHHGGGGFFFEEEEDDDCCCCBBBBAAA@@@@???>>>>===<<<<;;;::::9999888777766665554444333322221110000////....------....////0000111222233334444555666677778889999:::;;;;<<<<===>>>>???@@@@AAABBBBCCCDDDDEEEFFFFGGGHHHHIIIIJJJKKKKLLLLMMMNNNNOOOOPPPPQQQQRoooooooooooppppppppppppppppppppppppqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqppppppppppppppppppppppppoooooooooooRQQQQPPPPOOOONNNNMMMLLLLKKKKJJJIIIIHHHHGGGFFFFEEEDDDDCCCBBBBAAA@@@@???>>>>===<<<<;;;;:::9999888777766665554444333322221110000////....--....////0000111222233334444555666677778889999:::;;;;<<<====>>>>???@@@@AAABBBBCCCDDDDEEEFFFFGGGHHHHIIIJJJJKKKLLLLMMMMNNNOOOOPPPPQQQQRRRRSoopppppppppppppppppppppqqqqqqqqqqqqqqqqqqqqqqqqqqqqrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrqqqqqqqqqqqqqqqqqqqqqqqqqqqqpppppppppppppppppppppooSRRRRQQQQPPPPOOOONNNMMMMLLLLKKKJJJJIIIHHHHGGGFFFFEEEDDDDCCCBBBBAAA@@@@???>>>>====<<<;;;;:::9999888777766665554444333322221110000////......////0000111222233334444555666677778889999:::;;;;<<<====>>>????@@@AAAABBBCCCCDDDEEEEFFFGGGGHHHIIIIJJJKKKKLLLLMMMNNNNOOOOPPPQQQQRRRRSSSSTTppppppppppppqqqqqqqqqqqqqqqqqqqqqqqqrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrqqqqqqqqqqqqqqqqqqqqqqqqppppppppppppTTSSSSRRRRQQQQPPPOOOONNNNMMMLLLLKKKKJJJIIIIHHHGGGGFFFEEEEDDDCCCCBBBAAAA@@@????>>>====<<<;;;;:::9999888777766665554444333322221110000////..////0000111222233334444555666677778889999:::;;;;<<<====>>>????@@@AAAABBBCCCCDDDEEEEFFFGGGHHHHIIIJJJJKKKKLLLMMMMNNNOOOOPPPPQQQRRRRSSSSTTTTUUUpqqqqqqqqqqqqqqqqqqqqqqrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrqqqqqqqqqqqqqqqqqqqqqqpUUUTTTTSSSSRRRRQQQPPPPOOOONNNMMMMLLLKKKKJJJJIIIHHHHGGGFFFEEEEDDDCCCCBBBAAAA@@@????>>>====<<<;;;;:::9999888777766665554444333322221110000//////0000111222233334444555666677778889999:::;;;;<<<====>>>????@@@AAAABBBCCCDDDDEEEFFFFGGGHHHHIIIJJJJKKKLLLLMMMNNNNOOOPPPPQQQQRRRRSSSTTTTUUUUVVVVqqqqqqqqqqqqrrrrrrrrrrrrrrrrrrrrrrrrrsssssssssssssssssssssssssssssssssssssssssttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttsssssssssssssssssssssssssssssssssssssssssrrrrrrrrrrrrrrrrrrrrrrrrrqqqqqqqqqqqqVVVVUUUUTTTTSSSRRRRQQQQPPPPOOONNNNMMMLLLLKKKJJJJIIIHHHHGGGFFFFEEEDDDDCCCBBBAAAA@@@????>>>====<<<;;;;:::9999888777766665554444333322221110000//0000111222233334444555666677788889999:::;;;;<<<====>>>????@@@AAABBBBCCCDDDDEEEFFFFGGGHHHIIIIJJJKKKKLLLMMMMNNNOOOOPPPPQQQRRRRSSSSTTTTUUUVVVVWWWWXqrrrrrrrrrrrrrrrrrrrrrrrsssssssssssssssssssssssssssssssttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttsssssssssssssssssssssssssssssssrrrrrrrrrrrrrrrrrrrrrrrqXWWWWVVVVUUUTTTTSSSSRRRRQQQPPPPOOOONNNMMMMLLLKKKKJJJIIIIHHHGGGFFFFEEEDDDDCCCBBBBAAA@@@????>>>====<<<;;;;:::999988887776666555444433332222111000000111222233334444555666677778889999:::;;;;<<<====>>>???@@@@AAABBBBCCCDDDDEEEFFFGGGGHHHIIIIJJJKKKKLLLMMMNNNNOOOOPPPQQQQRRRSSSSTTTTUUUUVVVVWWWWXXXXYrrrrrrrrrrrrssssssssssssssssssssssssssttttttttttttttttttttttttttttttttttttttttttttttttttuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuttttttttttttttttttttttttttttttttttttttttttttttttttssssssssssssssssssssssssssrrrrrrrrrrrrYXXXXWWWWVVVVUUUUTTTTSSSSRRRQQQQPPPOOOONNNNMMMLLLKKKKJJJIIIIHHHGGGGFFFEEEDDDDCCCBBBBAAA@@@@???>>>====<<<;;;;:::99998887777666655544443333222211100111122233334444555666677778889999:::;;;;<<<====>>>???@@@@AAABBBBCCCDDDEEEEFFFGGGGHHHIIIJJJJKKKLLLLMMMNNNNOOOPPPPQQQRRRRSSSSTTTUUUUVVVVWWWWXXXXYYYYZZrsssssssssssssssssssssssttttttttttttttttttttttttttttttttttuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuttttttttttttttttttttttttttttttttttsssssssssssssssssssssssrZZYYYYXXXXWWWWVVVVUUUUTTTSSSSRRRRQQQPPPPOOONNNNMMMLLLLKKKJJJJIIIHHHGGGGFFFEEEEDDDCCCBBBBAAA@@@@???>>>====<<<;;;;:::9999888777766665554444333322211111122233334444555666677778889999:::;;;;<<<====>>>???@@@@AAABBBBCCCDDDEEEEFFFGGGHHHHIIIJJJJKKKLLLMMMMNNNOOOOPPPQQQQRRRSSSSTTTTUUUVVVVWWWWXXXXYYYYZZZZ[[[ssssssssssssttttttttttttttttttttttttttttuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuttttttttttttttttttttttttttttssssssssssss[[[ZZZZYYYYXXXXWWWWVVVVUUUTTTTSSSSRRRQQQQPPPOOOONNNMMMMLLLKKKJJJJIIIHHHHGGGFFFEEEEDDDCCCBBBBAAA@@@@???>>>====<<<;;;;:::999988877776666555444433332221122233334444555666677778889999:::;;;;<<<====>>>???@@@@AAABBBBCCCDDDEEEEFFFGGGHHHHIIIJJJKKKKLLLMMMMNNNOOOPPPPQQQRRRRSSSSTTTUUUUVVVWWWWXXXXYYYYZZZZ[[[[\\\\tttttttttttttttttttttttttuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuttttttttttttttttttttttttt\\\\[[[[ZZZZYYYYXXXXWWWWVVVUUUUTTTSSSSRRRRQQQPPPPOOONNNMMMMLLLKKKKJJJIIIHHHHGGGFFFEEEEDDDCCCBBBBAAA@@@@???>>>====<<<;;;;:::99998887777666655544443333222223334444555566677778889999:::;;;;<<<====>>>???@@@@AAABBBCCCCDDDEEEEFFFGGGHHHHIIIJJJKKKKLLLMMMNNNNOOOPPPPQQQRRRRSSSTTTTUUUVVVVWWWWXXXYYYYZZZZ[[[[\\\\]]]]^^tttttttttttuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuttttttttttt^^]]]]\\\\[[[[ZZZZYYYYXXXWWWWVVVVUUUTTTTSSSRRRRQQQPPPPOOONNNNMMMLLLKKKKJJJIIIHHHHGGGFFFEEEEDDDCCCCBBBAAA@@@@???>>>====<<<;;;;:::9999888777766655554444333223334444555566677778889999:::;;;;<<<====>>>???@@@@AAABBBCCCCDDDEEEFFFFGGGHHHIIIIJJJKKKLLLLMMMNNNOOOOPPPQQQQRRRSSSSTTTUUUUVVVWWWWXXXXYYYZZZZ[[[[\\\\]]]]^^^^^__uuuuuuuuuuuuuuuuuuuuuuuuuvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvuuuuuuuuuuuuuuuuuuuuuuuuu__^^^^^]]]]\\\\[[[[ZZZZYYYXXXXWWWWVVVUUUUTTTSSSSRRRQQQQPPPOOOONNNMMMLLLLKKKJJJIIIIHHHGGGFFFFEEEDDDCCCCBBBAAA@@@@???>>>====<<<;;;;:::999988877776665555444433334444555566677778889999:::;;;;<<<====>>>???@@@@AAABBBCCCCDDDEEEFFFFGGGHHHIIIIJJJKKKLLLLMMMNNNOOOOPPPQQQRRRRSSSTTTTUUUVVVVWWWXXXXYYYYZZZZ[[[\\\\]]]]^^^^^____````uuuuuuuuuuuvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvuuuuuuuuuuu````____^^^^^]]]]\\\\[[[ZZZZYYYYXXXXWWWVVVVUUUTTTTSSSRRRRQQQPPPOOOONNNMMMLLLLKKKJJJIIIIHHHGGGFFFFEEEDDDCCCCBBBAAA@@@@???>>>====<<<;;;;:::99998887777666555544443444555566677778889999:::;;;;<<<====>>>???@@@@AAABBBCCCCDDDEEEFFFFGGGHHHIIIIJJJKKKLLLMMMMNNNOOOPPPPQQQRRRRSSSTTTUUUUVVVWWWWXXXXYYYZZZZ[[[[\\\\]]]]^^^^____````aaaabbvvvvvvvvvvvvvvvvvvvvvvvvvwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwvvvvvvvvvvvvvvvvvvvvvvvvvbbaaaa````____^^^^]]]]\\\\[[[[ZZZZYYYXXXXWWWWVVVUUUUTTTSSSRRRRQQQPPPPOOONNNMMMMLLLKKKJJJIIIIHHHGGGFFFFEEEDDDCCCCBBBAAA@@@@???>>>====<<<;;;;:::9999888777766655554444555566667778888999::::;;;<<<====>>>????@@@AAABBBBCCCDDDEEEFFFFGGGHHHIIIJJJJKKKLLLMMMMNNNOOOPPPPQQQRRRSSSSTTTUUUUVVVWWWWXXXYYYYZZZ[[[[\\\\]]]]^^^^____````aaaabbbbbcccvvvvvvvvvvwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwvvvvvvvvvvcccbbbbbaaaa````____^^^^]]]]\\\\[[[[ZZZYYYYXXXWWWWVVVUUUUTTTSSSSRRRQQQPPPPOOONNNMMMMLLLKKKJJJJIIIHHHGGGFFFFEEEDDDCCCBBBBAAA@@@????>>>====<<<;;;::::999888877766665555455566667778888999::::;;;<<<<===>>>????@@@AAABBBBCCCDDDEEEFFFFGGGHHHIIIJJJJKKKLLLMMMMNNNOOOPPPQQQQRRRSSSTTTTUUUVVVVWWWXXXXYYYZZZZ[[[\\\\]]]]^^^^____````aaaabbbbcccccdddddwwwwwwwwwwwwwwwwwwwwwwwwwxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxwwwwwwwwwwwwwwwwwwwwwwwwwdddddcccccbbbbaaaa````____^^^^]]]]\\\\[[[ZZZZYYYXXXXWWWVVVVUUUTTTTSSSRRRQQQQPPPOOONNNMMMMLLLKKKJJJJIIIHHHGGGFFFFEEEDDDCCCBBBBAAA@@@????>>>===<<<<;;;::::99988887776666555566667778888999::::;;;<<<<===>>>????@@@AAABBBBCCCDDDEEEFFFFGGGHHHIIIJJJJKKKLLLMMMNNNNOOOPPPQQQQRRRSSSTTTTUUUVVVWWWWXXXYYYYZZZ[[[[\\\\]]]^^^^____````aaaabbbbcccccddddeeeeeffwwwwwwwwwxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxwwwwwwwwwffeeeeeddddcccccbbbbaaaa````____^^^^]]]\\\\[[[[ZZZYYYYXXXWWWWVVVUUUTTTTSSSRRRQQQQPPPOOONNNNMMMLLLKKKJJJJIIIHHHGGGFFFFEEEDDDCCCBBBBAAA@@@????>>>===<<<<;;;::::9998888777666656667777888999::::;;;<<<<===>>>????@@@AAABBBBCCCDDDEEEEFFFGGGHHHIIIJJJJKKKLLLMMMNNNNOOOPPPQQQRRRRSSSTTTUUUUVVVWWWXXXXYYYZZZZ[[[\\\\]]]]^^^____````aaaabbbbcccccddddeeeefffffgggggxxxxxxxxxxxxxxxxxxxxxxxxxxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxxxxxxxxxxxxxxxxxxxxxxxxxxgggggfffffeeeeddddcccccbbbbaaaa````____^^^]]]]\\\\[[[ZZZZYYYXXXXWWWVVVUUUUTTTSSSRRRRQQQPPPOOONNNNMMMLLLKKKJJJJIIIHHHGGGFFFEEEEDDDCCCBBBBAAA@@@????>>>===<<<<;;;::::9998887777666677778889999:::;;;;<<<===>>>>???@@@AAAABBBCCCDDDEEEEFFFGGGHHHIIIJJJJKKKLLLMMMNNNNOOOPPPQQQRRRRSSSTTTUUUVVVVWWWXXXXYYYZZZ[[[[\\\\]]]^^^^____```aaaabbbbcccccddddeeeefffffgggghhhhhhiixxxxxxxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxxxxxxxiihhhhhhggggfffffeeeeddddcccccbbbbaaaa```____^^^^]]]\\\\[[[[ZZZYYYXXXXWWWVVVVUUUTTTSSSRRRRQQQPPPOOONNNNMMMLLLKKKJJJJIIIHHHGGGFFFEEEEDDDCCCBBBAAAA@@@???>>>>===<<<;;;;:::9999888777767778889999:::;;;;<<<===>>>>???@@@AAAABBBCCCDDDEEEEFFFGGGHHHIIIIJJJKKKLLLMMMNNNNOOOPPPQQQRRRSSSSTTTUUUVVVVWWWXXXYYYYZZZ[[[[\\\]]]]^^^____````aaaabbbbccccddddeeeeffffggggghhhhhiiiiijjjjjyyyyyyyyyyyyyyyyyyyyyyyyyyyzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzyyyyyyyyyyyyyyyyyyyyyyyyyyyjjjjjiiiiihhhhhgggggffffeeeeddddccccbbbbaaaa````____^^^]]]]\\\[[[[ZZZYYYYXXXWWWVVVVUUUTTTSSSSRRRQQQPPPOOONNNNMMMLLLKKKJJJIIIIHHHGGGFFFEEEEDDDCCCBBBAAAA@@@???>>>>===<<<;;;;:::999988877778888999:::;;;;<<<====>>>???@@@@AAABBBCCCDDDDEEEFFFGGGHHHIIIIJJJKKKLLLMMMNNNNOOOPPPQQQRRRSSSSTTTUUUVVVWWWWXXXYYYZZZZ[[[\\\\]]]^^^^___````aaaabbbbccccddddeeeeffffggggghhhhiiiiijjjjjkkkkkkllyyyyyyzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzyyyyyyllkkkkkkjjjjjiiiiihhhhgggggffffeeeeddddccccbbbbaaaa````___^^^^]]]\\\\[[[ZZZZYYYXXXWWWWVVVUUUTTTSSSSRRRQQQPPPOOONNNNMMMLLLKKKJJJIIIIHHHGGGFFFEEEDDDDCCCBBBAAA@@@@???>>>====<<<;;;;:::99988887888999::::;;;<<<====>>>???@@@@AAABBBCCCDDDDEEEFFFGGGHHHIIIIJJJKKKLLLMMMNNNNOOOPPPQQQRRRSSSTTTTUUUVVVWWWWXXXYYYZZZZ[[[\\\]]]]^^^____````aaabbbbccccddddeeeeffffgggghhhhhiiiiijjjjjkkkkklllllmmmmmmzzzzzzzzzzzzzzzzzzzzzzzzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzzzzzzzzzzzzzzzzzzzzzzzzzzzzmmmmmmlllllkkkkkjjjjjiiiiihhhhhggggffffeeeeddddccccbbbbaaa````____^^^]]]]\\\[[[ZZZZYYYXXXWWWWVVVUUUTTTTSSSRRRQQQPPPOOONNNNMMMLLLKKKJJJIIIIHHHGGGFFFEEEDDDDCCCBBBAAA@@@@???>>>====<<<;;;::::9998888999::::;;;<<<<===>>>????@@@AAABBBCCCCDDDEEEFFFGGGHHHHIIIJJJKKKLLLMMMNNNNOOOPPPQQQRRRSSSTTTTUUUVVVWWWXXXXYYYZZZ[[[[\\\]]]^^^^___````aaaabbbccccddddeeeeffffgggghhhhhiiiijjjjjkkkkklllllmmmmmmnnnnnnoooozz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzoooonnnnnnmmmmmmlllllkkkkkjjjjjiiiihhhhhggggffffeeeeddddccccbbbaaaa````___^^^^]]]\\\[[[[ZZZYYYXXXXWWWVVVUUUTTTTSSSRRRQQQPPPOOONNNNMMMLLLKKKJJJIIIHHHHGGGFFFEEEDDDCCCCBBBAAA@@@????>>>===<<<<;;;::::9998999:::;;;<<<<===>>>????@@@AAABBBBCCCDDDEEEFFFGGGGHHHIIIJJJKKKLLLMMMNNNNOOOPPPQQQRRRSSSTTTTUUUVVVWWWXXXYYYYZZZ[[[\\\\]]]^^^^___````aaabbbbccccdddeeeeffffgggghhhhhiiiijjjjjkkkklllllmmmmmmnnnnnnoooooopppppppqq{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{qqpppppppoooooonnnnnnmmmmmmlllllkkkkjjjjjiiiihhhhhggggffffeeeedddccccbbbbaaa````___^^^^]]]\\\\[[[ZZZYYYYXXXWWWVVVUUUTTTTSSSRRRQQQPPPOOONNNNMMMLLLKKKJJJIIIHHHGGGGFFFEEEDDDCCCBBBBAAA@@@????>>>===<<<<;;;:::9999:::;;;;<<<===>>>>???@@@AAABBBBCCCDDDEEEFFFFGGGHHHIIIJJJKKKLLLMMMMNNNOOOPPPQQQRRRSSSTTTTUUUVVVWWWXXXYYYYZZZ[[[\\\]]]]^^^____```aaaabbbccccddddeeeefffgggghhhhhiiiijjjjkkkkklllllmmmmmnnnnnoooooopppppppqqqqqqqrrrrrrr||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||rrrrrrrqqqqqqqpppppppoooooonnnnnmmmmmlllllkkkkkjjjjiiiihhhhhggggfffeeeeddddccccbbbaaaa```____^^^]]]]\\\[[[ZZZYYYYXXXWWWVVVUUUTTTTSSSRRRQQQPPPOOONNNMMMMLLLKKKJJJIIIHHHGGGFFFFEEEDDDCCCBBBBAAA@@@???>>>>===<<<;;;;:::9::;;;;<<<====>>>???@@@AAAABBBCCCDDDEEEEFFFGGGHHHIIIJJJKKKLLLMMMMNNNOOOPPPQQQRRRSSSTTTTUUUVVVWWWXXXYYYZZZZ[[[\\\]]]]^^^___````aaabbbbcccddddeeeeffffgggghhhhiiiijjjjkkkkkllllmmmmmnnnnnooooooppppppqqqqqqqrrrrrrrsssssssssstttttt||||||||||||||||||||||||||||||||||||||||||||||||||||ttttttssssssssssrrrrrrrqqqqqqqppppppoooooonnnnnmmmmmllllkkkkkjjjjiiiihhhhggggffffeeeeddddcccbbbbaaa````___^^^]]]]\\\[[[ZZZZYYYXXXWWWVVVUUUTTTTSSSRRRQQQPPPOOONNNMMMMLLLKKKJJJIIIHHHGGGFFFEEEEDDDCCCBBBAAAA@@@???>>>====<<<;;;;:::;;;<<<====>>>???@@@@AAABBBCCCDDDDEEEFFFGGGHHHIIIJJJKKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTTUUUVVVWWWXXXYYYZZZZ[[[\\\]]]^^^^___```aaaabbbccccddddeeeffffgggghhhhiiiijjjjkkkklllllmmmmmnnnnnoooooppppppqqqqqqrrrrrrrssssssssttttttttttuuuuuuuuuuuuuuuvvvvvvv}}}}}}}}}}}}}}vvvvvvvuuuuuuuuuuuuuuuttttttttttssssssssrrrrrrrqqqqqqppppppooooonnnnnmmmmmlllllkkkkjjjjiiiihhhhggggffffeeeddddccccbbbaaaa```___^^^^]]]\\\[[[ZZZZYYYXXXWWWVVVUUUTTTTSSSRRRQQQPPPOOONNNMMMLLLKKKKJJJIIIHHHGGGFFFEEEDDDDCCCBBBAAA@@@@???>>>====<<<;;;:;;<<<<===>>>????@@@AAABBBCCCCDDDEEEFFFGGGHHHIIIJJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTTUUUVVVWWWXXXYYYZZZ[[[[\\\]]]^^^____```aaaabbbccccdddeeeefffgggghhhhiiiijjjjkkkklllllmmmmnnnnnoooooppppppqqqqqrrrrrrrsssssssttttttttuuuuuuuuuuuvvvvvvvvvvvvvvvvvvvvvvvvwwwwvvvvvvvvvvvvvvvvvvvvvvvvuuuuuuuuuuuttttttttsssssssrrrrrrrqqqqqppppppooooonnnnnmmmmlllllkkkkjjjjiiiihhhhggggfffeeeedddccccbbbaaaa```____^^^]]]\\\[[[[ZZZYYYXXXWWWVVVUUUTTTTSSSRRRQQQPPPOOONNNMMMLLLKKKJJJJIIIHHHGGGFFFEEEDDDCCCCBBBAAA@@@????>>>===<<<<;;;<<<===>>>>???@@@AAABBBBCCCDDDEEEFFFGGGHHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSSTTTUUUVVVWWWXXXYYYZZZ[[[[\\\]]]^^^____```aaabbbbcccddddeeeffffgggghhhiiiijjjjkkkklllllmmmmnnnnnooooopppppqqqqqrrrrrrssssssstttttttuuuuuuuuuvvvvvvvvvvvvwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwvvvvvvvvvvvvuuuuuuuuutttttttsssssssrrrrrrqqqqqpppppooooonnnnnmmmmlllllkkkkjjjjiiiihhhggggffffeeeddddcccbbbbaaa```____^^^]]]\\\[[[[ZZZYYYXXXWWWVVVUUUTTTSSSSRRRQQQPPPOOONNNMMMLLLKKKJJJIIIHHHHGGGFFFEEEDDDCCCBBBBAAA@@@???>>>>===<<<;<<====>>>???@@@AAAABBBCCCDDDEEEFFFGGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[[\\\]]]^^^___````aaabbbccccdddeeeefffgggghhhhiiiijjjjkkkkllllmmmmnnnnooooopppppqqqqqrrrrrrsssssstttttttuuuuuuuvvvvvvvvvvwwwwwwwwwwwwwxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxwwwwwwwwwwwwwvvvvvvvvvvuuuuuuutttttttssssssrrrrrrqqqqqpppppooooonnnnmmmmllllkkkkjjjjiiiihhhhggggfffeeeedddccccbbbaaa````___^^^]]]\\\[[[[ZZZYYYXXXWWWVVVUUUTTTSSSRRRRQQQPPPOOONNNMMMLLLKKKJJJIIIHHHGGGGFFFEEEDDDCCCBBBAAAA@@@???>>>====<<====>>>???@@@@AAABBBCCCDDDEEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\\]]]^^^___````aaabbbccccdddeeeffffgggghhhiiiijjjjkkkkllllmmmmnnnnoooooppppqqqqqrrrrrrssssstttttttuuuuuuuvvvvvvvvwwwwwwwwwwxxxxxxxxxxxxxxxxxyyyyyyyyyyyyyyyyyyyyyyxxxxxxxxxxxxxxxxxwwwwwwwwwwvvvvvvvvuuuuuuutttttttsssssrrrrrrqqqqqppppooooonnnnmmmmllllkkkkjjjjiiiihhhggggffffeeedddccccbbbaaa````___^^^]]]\\\\[[[ZZZYYYXXXWWWVVVUUUTTTSSSRRRQQQPPPPOOONNNMMMLLLKKKJJJIIIHHHGGGFFFEEEEDDDCCCBBBAAA@@@@???>>>======>>>????@@@AAABBBCCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\\]]]^^^___```aaaabbbcccddddeeeffffggghhhhiiijjjjkkkkllllmmmmnnnnoooooppppqqqqqrrrrrsssssttttttuuuuuuuvvvvvvvwwwwwwwwxxxxxxxxxxxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxxxxxxxxxxxwwwwwwwwvvvvvvvuuuuuuuttttttsssssrrrrrqqqqqppppooooonnnnmmmmllllkkkkjjjjiiihhhhgggffffeeeddddcccbbbaaaa```___^^^]]]\\\\[[[ZZZYYYXXXWWWVVVUUUTTTSSSRRRQQQPPPOOONNNMMMMLLLKKKJJJIIIHHHGGGFFFEEEDDDCCCCBBBAAA@@@????>>>==>>>>???@@@AAABBBBCCCDDDEEEFFFGGGHHHIIIJJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\\]]]^^^___```aaabbbbcccdddeeeefffgggghhhiiiijjjjkkkllllmmmmnnnnoooooppppqqqqqrrrrsssssstttttuuuuuuvvvvvvwwwwwwwwxxxxxxxxxyyyyyyyyyyyyzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzyyyyyyyyyyyyxxxxxxxxxwwwwwwwwvvvvvvuuuuuutttttssssssrrrrqqqqqppppooooonnnnmmmmllllkkkjjjjiiiihhhggggfffeeeedddcccbbbbaaa```___^^^]]]\\\\[[[ZZZYYYXXXWWWVVVUUUTTTSSSRRRQQQPPPOOONNNMMMLLLKKKJJJJIIIHHHGGGFFFEEEDDDCCCBBBBAAA@@@???>>>> \ No newline at end of file diff --git a/assets/test_scene3B.json b/assets/test_scene3B.json new file mode 100644 index 0000000..ea0ec2c --- /dev/null +++ b/assets/test_scene3B.json @@ -0,0 +1,79 @@ +{ + "geometry":[{ + "type":"rectangle", + "p1":[-20, -1, 0], + "p2":[20, -1, 0], + "p3":[20, -1, -20], + "p4":[-20, -1, -20], + + + "ac":[1,0,0], + "dc":[1,0,0], + "sc":[1,1,1], + + "ka":0.1, + "kd":1, + "ks":1, + + "pc":10 + + }, + { + "type":"sphere", + "centre":[0, 0, -4], + "radius":1, + "ac":[1,1,1], + "dc":[0,0,1], + "sc":[1,1,1], + + "ka":0, + "kd":1, + "ks":1, + "pc":100 + + } + + ], + "light":[ + { + "type":"point", + "centre":[-1, 7, -5], + "id":[1, 1, 1], + "is":[1, 1, 1] + }, + { + "type":"point", + "centre":[1,0.5,0], + "id":[1, 1, 1], + "is":[1, 1, 1] + } + ], + "output":[{ + "filename":"test_scene3B.ppm", + "size":[500,500], + "lookat":[0,0,-1], + "up":[0,1,0], + "fov":60, + "centre":[0,0.5,0], + "ai":[1,1,1], + "bkc":[0.5,0.5,0.5], + + "globalillum": false, + "raysperpixel": [10, 10] + }, + { + "filename":"test_scene3B_aa.ppm", + "size":[500,500], + "lookat":[0,0,-1], + "up":[0,1,0], + "fov":60, + "centre":[0,0.5,0], + "ai":[1,1,1], + "bkc":[0.5,0.5,0.5], + + "globalillum": false, + "antialiasing":true, + "raysperpixel": [10, 10] + } + ] +} diff --git a/assets/test_scene3B.ppm b/assets/test_scene3B.ppm new file mode 100644 index 0000000..5bef6a2 --- /dev/null +++ b/assets/test_scene3B.ppm @@ -0,0 +1,1865 @@ +P6 +500 500 +255 + + +  + +  + +  + + + + !!##%%&&''''&&%%##!!  ""&&++//22558899999988663300,,(($$   + +  &&,,2288>>CCGGKKNNOOPPOOMMJJFFBB<<7711++&&   &&--55==EELLTTZZ``ddggiiiihheeaa\\VVOOGG@@8811**$$  + + ##++44==FFPPZZccllttzz~~yyrrkkbbYYPPFF==55--%%  + +&&..88BBNNYYeepp{{uujj__TTJJ??66--%%  + +''00::EERR__llyy{{nnaaUUII>>44++## + + &&//::FFSSaaoo~~{{mm__RRFF;;11((   $$--77CCPP__nn~~vvggYYLL@@55,,$$ + + + + ))33??KKZZiiyy}}mm^^QQDD99//&&  $$--88DDRRaaqqppaaSSFF;;11((   + +''11<>KKYYhhxxooaaSSFF;;11((   ""**44??LLYYhhxxzzkk]]PPDD99//''  ""**44??KKXXffttttffXXLLAA66--%%  !!))22==HHTTaaoo}}yykk^^RRGG<<33**##   ''0099DDOO[[hhtt{{nnbbVVKKAA77..''  + + %%--55??IITT__kkvvyynnccXXNNDD::22**##  ""))0099BBLLVV``jjtt}}}}ttkkaaWWNNEE<<44,,%% + + + + %%++33;;CCLLUU]]ffnnuu{{{{ttmmee]]UULLDD<<44--&&    &&--44;;BBJJQQXX__eekkoorruuvvvvttrrnniidd^^WWPPIIAA::33--''!! + + + + !!'',,3399??FFLLQQVV[[__aaccddddbb``]]YYTTOOJJDD>>7711,,&&!!  !!&&++0055;;@@DDIILLOORRSSTTSSRRPPNNJJGGBB==8833..))$$    $$((--115599<<:?EJPTY]aeilpsvy|~vl_C=;98>DJOTX\`dhkorux{~ypdQ:878>DINSW[_cgjnqtwz}|shY7547>CINRVZ^bfilpsvy|~~vl^74317=CHMQUZ]aehkoruxz} + + + + + + + + + + + + yocN42007=BGLPTY\`dgjmqtvy| + +  + + + + {rgV1/./6<AFKOSW[_bfilorux{} + +  + + ~uj\.-+/5;@EJNRVZ^aehknqtwz| + +  + + wm`.,*).5:@DIMQUY]`cgjmpsvx{~  zpdP+)(&.49?CHLPTX[_beiloqtwz| + +  !!!!!!!!  + + |sgV('%&-38>BGKOSWZ^adgjmpsvx{} + + !!##%%&&''((((((((''&&$$##!! ~uj[&$#&,27=AFJNRUY\`cfilortwz| + +  ##%%((**,,--//000000////--,,**''%%"" wm_&#" %+16;@DIMPTX[^behkmpsvx{} + +  ##&&)),,//224466778899998877664411//,,))%%"" ypcK#!$*05:?CGKOSVZ]`cfiloqtwy|~ + + !!%%))--004477::==??AABBCCCCBBAA??==::774400,,(($$  {rfR #)/49>BFJNQUX\_behkmpsuxz} + + ""''++//4488<<@@DDGGIIKKMMMMMMMMKKIIGGDD@@<<8833//**&&!! + +}thW"(.38<AEILPTWZ]`cfiloqtvy{~ ##((--2277<>DDJJOOTTYY]]``cceeffffeeccaa]]YYUUOOJJDD>>8822--''"" wm_ &+05:>BFJMQTWZ^`cfilnqsvx{} + + ""((--3399@@FFMMSSYY__ddiimmpprrssssrrppmmjjee``ZZTTMMGG@@9933,,''!! yoa%*/48=ADHLOSVY\_begjmortwy{~ !!'',,3399@@GGOOVV]]ddjjppuuzz}}~~{{vvqqllee^^WWOOHH@@9922,,&&  + +zqdM#).27;?CGJNQTW[]`cfiknpsuxz|~ + + %%++1188@@GGOOWW__ggoovv||~~xxppiiaaXXPPHH@@8811**$$ |rfR"',15:>BEILPSVY\_bdgjloqtvx{} ##))//66>>FFNNWW``iiqqzz||ttkkbbXXOOFF>>66//((!! }thV!&+048<@DGKNQTWZ]`cfhkmpruwz} + +  &&,,33;;CCLLUU__hhrr||~~uukkaaWWMMDD;;33,,%% + +~ujY $).27;>BFILPSVY\^adgjmpruxz} + + ##))0088@@IIRR\\ffqq{{~~ttii^^TTJJ@@88//((!! vk\ + #(,159=ADHKNQTW[^adgjmpsux{} %%,,33<BFJNQUX[_behknpsvx{~ + + ##**1199CCMMWWccnn{{rrffZZNNDD::11))"" yoa #(-26;?CGJNQUX\_behknqsvy{~ + + $$++33<>HHSS^^kkww||nnaaUUJJ??55--%% zpcJ $).27;?CGKNRUY\_behknqtvy|~  ''..77@@JJUUaamm{{rrddXXLLAA77..&& + +{qdM $).37;?CGKORUY\_behknqtvy|~ !!((//88AAKKWWccoo}}ttffYYMMBB88//''  + +{reO $).37;@CGKORVY\_bfhknqtwy|~ !!((0088BBLLWWccpp~~uuggZZNNCC9900((  + +|rfQ $).37<@DGKORVY\_cfiknqtwy|~ !!((0088BBLLWWddpp~~uuhh[[NNCC9900((!! + +|rfR %*.37<@DGKORVY\_cfilnqtwy|~ !!((//88AALLWWccpp}}uuggZZNNCC9900''  + +|sgS %*.37<@DHKORVY\`cfilnqtwy|~ !!''..77@@JJUUaann{{sseeYYMMBB88//''  + +|sgS %*.37<@DHKORVY\`cfilnqtwy|~  &&--66??IISS__kkxx~~ppccWWKK@@66..&& + +|sgS %*.37<@DGKORVY\_cfilnqtwy|~ %%,,44==FFQQ\\hhttzzmm``TTII>>55,,%% |sgS %*.37<@DGKORVY\_cfiknqtwy|~ + + ##**22::CCMMXXddpp||uuhh\\PPFF<<33**## |sgS $).37;@DGKORVY\_behknqtvy|~ + + ""((//77@@JJTT__jjvv{{ooccWWLLBB9900((!! |rfR $).37;?CGKORUY\_behknqtvy|~  &&--44==FFOOZZddoo{{ttii]]RRHH>>55--&& + +|rfQ $).37;?CGKNRUY\_behknqsvy{~ ##**1199AAJJTT^^hhss}}xxmmbbWWMMCC::22**## + +{reP $).27;?CGKNRUX\_behknqsvy{~ + + !!''--55<>66..''!! {qdN $)-26;?CGJNQUX[_behknpsvx{~ $$**0088??HHPPYYbbkktt}}xxooff]]SSJJAA9911**$$ + +zpcK #(-26:?CFJNQUX[^behjmpsvx{} + + !!&&,,33::AAIIQQZZbbjjrryy}}uunnee]]TTLLDD<<44--&&  yobG #(-16:>BFJMQTX[^adgjmpsux{} ""((..44;;BBJJQQYY``ggnnttyy~~||wwqqjjcc\\TTLLDD==66//((## yoa +"(,15:>BFIMQTW[^adgjmpruxz} + + $$))//55<BEIMPTWZ^adgjmoruwz}  %%**//55;;AAGGMMRRXX\\aaddggiijjkkjjhhffbb^^ZZTTOOIICC<<6600**%%  + +wl^ !'+059=AEILPSWZ]`cfilortwz| + +  %%**//4499>>DDIIMMRRUUXX[[]]^^^^]]\\ZZWWSSOOJJEE@@;;5500**%%  ~vk\!&+048=AEHLPSVZ]`cfiloqtwy|~ + +  $$))--2277;;??DDGGKKMMPPQQRRRRRRPPNNLLHHEEAA<<8833..))%%  + +}ujZ %*/48<@DHLOSVY\`cfiknqtvy|~  ##''++//3377;;>>AACCEEFFGGGGGGEEDDAA??<<884400,,(($$  + +|shW %*/37<@DGKORUY\_behknqsvy{~ ""%%)),,//225588::;;<<======<<::88663300--))&&"" + + {rfS $).27;?CGJNRUX[_behkmpsvx{}  ##%%((++--//112233444444331100..++))&&##  zpdO #(-26:>BFJNQTX[^adgjmpruxz}  ""$$&&(())++++,,,,++++**((&&$$""  xobH #(,16:>BFIMPTWZ^adgjloruwz|  !!##$$$$%%%%$$$$##!!  + + wm_ "',059=AEILPSWZ]`cfiloqtwy|~ + +  + +~uk\!&+048<@DHLOSVY\`cfiknqtvy{~ + +  + + |shX %*/38<@DGKORUY\_behknpsvx{} + +  + +zqfT $).27;?CGJNQUX[^adgjmpruxz} + +  + + yocN #(-26:>BFJMQTW[^adgjloruwz| + + + + + + wm`? +"',159=AEILPSWZ]`cfilnqtvy|~ + + + + + + + + + + + + + + }uj\ !&+048<@DHLORVY\_behknqsvx{}{rgW %*/37;?CGKNRUX[_begjmpsuxz}ypdR $)-26:?BFJMQTW[^adgjlortwz|wm`I "(,159>AEILPSWZ]`cfilnqtvy{~|tj\ !&+048<@DHLORVY\_behknpsvx{}zrgW %*/37;?CGKNQUX[^adgjmoruwz|xocQ $)-26:>BFJMPTWZ]`cfiloqtvy{~}uk_F +"',159=AEHLOSVY\_behknpsvx{}{rhZ!&+/48<@DGKNRUX[^adgjmpruwz|xodT $).27;?BFJMQTWZ]`cfiloqtvy{~}ul`J #(,159=AEILPSVY\_behknpsuxz}zrhZ !&+/48<@DGKNRUX[^adgjmoruwz|~wodT $).27;?BFJMQTWZ]`cfilnqtvy{}|tk_J #(,159=AEHLOSVY\_behkmpsuxz|yqgY !&+/48<@DGKNQUX[^adgiloqtwy{~}vmbR $).26:>BFIMPSWZ]`cfhknpsuxz}zsi]G "',059=ADHKORUY\_bdgjmortwy|~~woeW %*/37;?CGJNQTWZ]`cfiknqsvx{}{tk`N  #(-16:>AEILOSVY\_behjmpruwy|~xpfY  +!&+048<@DGKNQUX[^acfilnqsvx{}{tlaR + + + + + + + + + + + +$).26:>BFIMPSVY\_behjmpruwz|~xpg[E + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + "',049<@DHKNRUX[^adfilnqsvx{}{tlbT + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +  %*.37;?BFIMPSVZ]_behjmpruwy|~~xqh\I + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +  #(,159=ADHKORUX[^adfilnqsvx{}{tlbU + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +  %*/37;?BFJMPSWZ]_behjmprtwy|~~xph\J + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +  #(,159=ADHKORUX[^adfilnqsvxz}ztlbU + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +  !%*/37;?BFJMPSVY\_begjmortwy{}}wog\J + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +  #(,159=ADHKNRUX[^`cfiknpsuwz|~yskaT + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +   %*/37;?BFIMPSVY\_bdgjloqtvx{}|unf[I  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +  #(,159=@DGKNQTWZ]`cfhkmpruwy{~~xqi`R  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +  %*.37;>BEILOSVY\^adgilnqsuxz|~ztmdYF  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +  "',048<@CGJNQTWZ]_behjmortvx{}|vog^P + + + + + + + + + + + + + +  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +  %).26:>AEHLORUX[^acfhkmpruwy{~~xrjbV@ + + + + + + + + + + + + + + + + + + + + + + + +  + + + + + + + + + + + + + + + + + + + + + + + + + + + +  "'+048<?CFJMPSVY\_adgilnqsuxz|~ztme[L + + + + + + + + + + + + + + + + + + + + + + + + + + + +  + + + + + + + + + + + + + + + + + + + + + + + + + + + + $(-159=ADHKNQTWZ]`behjmoqtvxz}{voh_R + + + + + + + + + + + + + + + + + + + + + + + + + + + +  + + + + + + + + + + + + + + + + + + + + + + + + + + + +  +!&*/37;>BEILORUX[^acfhkmprtwy{}}wqjbWF + + + + + + + + + + + + + + + + + + + + + + + + + + + +  + + + + + + + + + + + + + + + + + + + + + + + + + + + +  #',048<@CGJMPSVY\_adgilnpsuwy|~~ysle[M + + + + + + + + + + + + + + + + + + + + + + + + + + + +  + + + + + + + + + + + + + + + + + + + + + + + + + +  $).26:=ADHKNQTWZ]_begjloqsuxz|~ztng^S: + + + + + + + + + + + + + + + + + + + + + + + + + +  + + + + + + + + + + + + + + + + + + + + + + + + + +  !&+/37;>BEILORUX[^`cehjmoqtvxz|~{vpiaVF + + + + + + + + + + + + + + + + + + + + + + + + + +  + + + + + + + + + + + + + + + + + + + + + + + + + +  #(,048<@CFJMPSVY\^acfhkmprtvx{}|wqkcZL + + + + + + + + + + + + + + + + + + + + + + + +  + + + + + + + + + + + + + + + + + + + +  %)-269=ADGKNQTWY\_adgiknpruwy{}}xrle\Q6 + + + + + + + + + + + + + + + + + + + + + + + + + +  + + + + + + + + + +  +!&*/37:>BEHKORTWZ]_begilnpsuwy{}}xsmf^TC + + + + + + + + + + + + + + + + + + + + + + + +   #',048;?BFILORUX[]`begjlnqsuwy{}~ytnh`WI + + + + + + + + + + + + + + + + + + + + + + + +  $(-159<@CGJMPSVX[^`cehjloqsuwy{}~ytoibYL + + + + + + + + + + + + + + + + + + + + + + + +    %*.26:=ADGJMPSVY\^acfhjmoqsuxz|~~zupjcZO: + + + + + + + + + + + + + + + + + + + + + + + +   "&+/37:>AEHKNQTWY\_adfhkmoqsvxz|~~zupjd\RA + + + + + + + + + + + + + + + + + + + + + + + +   #'+047;?BEHKNQTWZ\_adfikmoqtvxz|}~zupkd]SE + + + + + + + + + + + + + + + + + + + + + + + +  $(,048<?BFILORUWZ]_bdfikmoqtvxz{}~zupke^UH + + + + + + + + + + + + + + + + + + + + + + + +    $)-159<@CFILORUWZ]_bdfikmoqsuwy{}}yupke^VJ + + + + + + + + + + + + + + + + + + + + + + + +   + %).259=@CFJLORUXZ]_bdfikmoqsuwy{}}yupke^VK5 + + + + + + + + + + + + + + + + + + + + + + + +  !&*.269=@DGJMPRUXZ]_bdfikmoqsuwy{}~|ytpke_WL: + + + + + + + + + + + + + + + + + + + + + +  "&+/26:=ADGJMPRUXZ]_bdfhkmoqsuwy{|~|xtoje_WM= + + + + + + + + + + + + + + + + + + + + + + + +  "'+/36:=ADGJMPRUXZ]_adfhjmoqsuvxz|~~{wsoje^WM> + + + + + + + + + + + + + + + + + + + + + +  #'+/37:>ADGJMPRUXZ]_adfhjlnprtvxz{}}zvrnid^WM? + + + + + + + + + + + + + + + + + + + + + + + +  #'+/37:>ADGJMPRUWZ\_acehjlnprtvwy{}~|yurmic]VM? + + + + + + + + + + + + + + + + + + + + + +  !!!!!!!!!!!!!!!!!!!!!!!!!!#'+/37:=ADGJMORUWZ\^acegikmoqsuwyz|~~{xtplhb\UL?ffff + + + + + + + + + + + + + + + + + + + + + + + +  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!""""""""""""""""""#'+/37:=ADGJLORTWY\^`begikmoqstvxz{}~}zwsokfa[TK>ggggggggg + + + + + + + + + + + + + + + + + + + + + +  !!!!!!!!!!!!!!!!!!!!!!!!!!!!""""""""""""""""""""""""""""""""""""###########'+/36:=@CFILOQTVY[]`bdfhjlnprtuwyz|~~|yurnje`ZSJ=gggggggggggggg + + + + + + + + + + + + + + + + + + + + + + + +  !!!!!!!!!!!!!!!!!!!!!!!!""""""""""""""""""""""""""""###########################################'+/369=@CFILNQSVX[]_acfhjlmoqsuvxz{}~}zwtpmhd_YRI;hhhhhhhhhhhhhhhhhhh + + + + + + + + + + + + + + + + + + + + + + + +  !!!!!!!!!!!!!!!!!!!!!!""""""""""""""""""""""""##############################$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$"'+.269<?BEHKNPSUXZ\^acegikmnprtuwyz|}~{xurokgb]WPG8hhhhhhhhhhhhhhhhhhhhhhh + + + + + + + + + + + + + + + + + + + + + +  !!!!!!!!!!!!!!!!!!!!""""""""""""""""""""""########################$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% "&*.259<?BEHJMPRUWY\^`bdfhjlnoqstvxy{|~~|ywtpmiea[UNE4iiiiiiiiiiiiiiiiiiiiiiiiiii + + + + + + + + + + + + + + + + + + + + + +  !!!!!!!!!!!!!!!!!!""""""""""""""""""""######################$$$$$$$$$$$$$$$$$$$$$$$$$$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%&&&&&&&&&&&&&&&&&& !%*-158;>ADGJLOQTVX[]_acegikmnprsuwxz{|~|zwurokgc_YSLB.iiiiiiiiiiiiiiiiiiiiiiiiiiiiiii + + + + + + + + + + + + + + + + + + + + + + + +  !!!!!!!!!!!!!!!!""""""""""""""""""####################$$$$$$$$$$$$$$$$$$$$$$$$%%%%%%%%%%%%%%%%%%%%%%%%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&''  %)-047:>ACFILNQSUXZ\^`bdfhjlmoqrtuwxz{}~}zxuspmiea\WQI?jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj + + + + + + + + + + + + + + + + + + + + + + + +  !!!!!!!!!!!!!!!!""""""""""""""""""##################$$$$$$$$$$$$$$$$$$$$%%%%%%%%%%%%%%%%%%%%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&'''''''''''''''''''''''''''''' + $(,/36:=@CEHKMPRTWY[]_acegijlnoqstvwyz{}~}zxvsqnjgc_ZUNF;jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj + + + + + + + + + + + + + + + + + + + + + + + +  !!!!!!!!!!!!!!!!""""""""""""""""##################$$$$$$$$$$$$$$$$$$%%%%%%%%%%%%%%%%%%%%%%&&&&&&&&&&&&&&&&&&&&&&''''''''''''''''''''''''''''''(((((((((((((((( #'+.259<?BDGJLOQSVXZ\^`bdfgikmnpqstvwxz{|~~|zxvtqnkhea\XRKC6kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk + + + + + + + + + + + + + + + + + + + + + +  !!!!!!!!!!!!!!!!""""""""""""""##################$$$$$$$$$$$$$$$$%%%%%%%%%%%%%%%%%%%%&&&&&&&&&&&&&&&&&&&&''''''''''''''''''''''''(((((((((((((((((((((((((((((((())))"&*-147;>@CFHKMPRTWY[]_acdfhjkmnpqstvwxz{|}~}|zxvtqolifb^ZUOH?.kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk + + + + + + + + + + + + + + + + + + + + + +  !!!!!!!!!!!!!!""""""""""""""""################$$$$$$$$$$$$$$$$%%%%%%%%%%%%%%%%%%&&&&&&&&&&&&&&&&&&''''''''''''''''''''''(((((((((((((((((((((((())))))))))))))))))))))))))  $(,0369<?BEGJLOQSUWY[]_acefhjkmnpqstuwxyz{}~~}{ywusqolifc_[WRLD:llllllllllllllllllllllllllllllllllllllllllllllllllll + + + + + + + + + + + + + + + + + + + + + +  !!!!!!!!!!!!!!""""""""""""""################$$$$$$$$$$$$$$$$%%%%%%%%%%%%%%%%&&&&&&&&&&&&&&&&&&''''''''''''''''''(((((((((((((((((((((())))))))))))))))))))))))))****************fff +#'+.258;>ACFHKMORTVXZ\^`aceghjkmnpqrtuvwxz{|}~~}{zxwusqnlifc`\XTNH@3lllllllllllllllllllllllllllllllllllllllllllllllllllllll + + + + + + + + + + + + + + + + + + + + + +  !!!!!!!!!!!!!!""""""""""""""################$$$$$$$$$$$$$$%%%%%%%%%%%%%%%%&&&&&&&&&&&&&&&&''''''''''''''''''(((((((((((((((((((())))))))))))))))))))))**************************++++++ffffggg!%)-0369<?BDGILNPRTVXZ\^`bcefhjklnoprstuwxyz{|}~~~}{zywutrpnkifc`]YUPKD:'lllmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm + + + + + + + + + + + + + + + + + + + + + +  !!!!!!!!!!!!!!""""""""""""##############$$$$$$$$$$$$$$$$%%%%%%%%%%%%%%&&&&&&&&&&&&&&&&''''''''''''''''(((((((((((((((((())))))))))))))))))))**********************++++++++++++++++++++++++ggggggggggg #'+.258;=@CEHJLOQSUWY[\^`acefhiklmopqrstvwxyzz{|}~~~}|{zywvtsqomkhfc`]ZVQLF?3mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm + + + + + + + + + + + + + + + + + + + + + +  !!!!!!!!!!!!!!""""""""""""""############$$$$$$$$$$$$$$%%%%%%%%%%%%%%%%&&&&&&&&&&&&&&''''''''''''''''(((((((((((((((())))))))))))))))))********************++++++++++++++++++++++++,,,,,,,,,,,,,,,,ggggggggghhhhhh!%),0369<>ADFHKMOQSUWYZ\^`acdfgijklnopqrstuvwxyz{{|}}~~~}}|{zyxwutsqonljhec`]ZVRMHA8&mmmmmmmmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn + + + + + + + + + + + + + + + + + + !!!!!!!!!!!!!!""""""""""""##############$$$$$$$$$$$$$$%%%%%%%%%%%%%%&&&&&&&&&&&&&&''''''''''''''(((((((((((((((())))))))))))))))******************++++++++++++++++++++++,,,,,,,,,,,,,,,,,,,,,,,,------gggghhhhhhhhhhhhhhh #'*.147:<?BDFIKMOQSUWYZ\^_abdefhijlmnopqrstuvvwxyyz{{||}}}~~~~~~}}||{zyyxwvusrqonljhfdb_\YVRNIC;0nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn + + + + + + + + + + + + !!!!!!!!!!!!""""""""""""""############$$$$$$$$$$$$$$%%%%%%%%%%%%%%&&&&&&&&&&&&''''''''''''''''(((((((((((((())))))))))))))))****************++++++++++++++++++++,,,,,,,,,,,,,,,,,,,,----------------------hhhhhhhhhhhhhhhhiiiiiii $(+/258:=?BDGIKMOQSUVXZ[]_`acdeghijklnoopqrsttuvwwxxyyzzz{{{{{||||||{{{{zzzyyxxwvutsrqpomljigeca^[XURNID=4nnnnnnnnnnnnnnnoooooooooooooooooooooooooooooooooooooooooooooooooooooooooo + + + + + + + + !!!!!!!!!!!!""""""""""""##############$$$$$$$$$$$$%%%%%%%%%%%%%%&&&&&&&&&&&&''''''''''''''(((((((((((((((())))))))))))))****************++++++++++++++++,,,,,,,,,,,,,,,,,,,,--------------------................hhhhhhhhhhiiiiiiiiiiiiiiiii +"%),/258;=@BDGIKMOQRTVWY[\^_`bcdeghijklmnoopqrrsttuuvvvwwwwxxxxxxxxxwwwwvvuutssrqponlkjhgeca_]ZWTQMID>6'oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo + + !!!!!!!!!!!!""""""""""""############$$$$$$$$$$$$$$%%%%%%%%%%%%&&&&&&&&&&&&&&''''''''''''(((((((((((((())))))))))))))****************++++++++++++++++,,,,,,,,,,,,,,,,--------------------......................////////hhhhiiiiiiiiiiiiiiiiijjjjjjjjj "&)-0358;=@BDFHJLNPRSUWXZ[]^_`bcdefghijkllmnooppqqrrssssttttttttttsssrrqqpponmlkjigfeca_][YVSPLHC>6+oooooooooooooooooooooppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp  !!!!!!!!!!!!""""""""""""############$$$$$$$$$$$$%%%%%%%%%%%%%%&&&&&&&&&&&&''''''''''''''(((((((((((())))))))))))))**************++++++++++++++++,,,,,,,,,,,,,,,,----------------....................//////////////////////iiiiiiiiiiiiiiiijjjjjjjjjjjjjjjjkkk #&*-0358;=?ADFHJKMOQRTUWXZ[\^_`abcdefghiijkklmmmnnoooopppppppppooonnmmllkjihgfecb`_][YWTQNKGB=6,ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp  !!!!!!!!!!!!""""""""""""############$$$$$$$$$$$$%%%%%%%%%%%%&&&&&&&&&&&&&&''''''''''''(((((((((((())))))))))))))**************++++++++++++++,,,,,,,,,,,,,,,,----------------................////////////////////0000000000000000iiiiiiiiiijjjjjjjjjjjjjjjjkkkkkkkkkkkk #&*-0258:<?ACEGIJLNPQSTUWXY[\]^_`abcdeefgghhiijjkkkklllllllkkkkjjiihggfedcba_^\ZXVTROLIEA<5+ppppppppppppppppppppppppppppqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqpppp  !!!!!!!!!!!!""""""""""""############$$$$$$$$$$$$%%%%%%%%%%%%&&&&&&&&&&&&''''''''''''(((((((((((((())))))))))))**************++++++++++++++,,,,,,,,,,,,,,--------------................//////////////////000000000000000000001111111111iiiiijjjjjjjjjjjjjjjkkkkkkkkkkkkkkkkklllll #&),/2479;>@BDFGIKLNPQRTUVWYZ[\]^__`abbcddeefffggggggggggggffeeddcbba`_]\[YWVTROMJFC?:3*ppqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq  !!!!!!!!!!""""""""""""############$$$$$$$$$$$$%%%%%%%%%%%%&&&&&&&&&&&&''''''''''''(((((((((((())))))))))))**************++++++++++++,,,,,,,,,,,,,,--------------................////////////////000000000000000000111111111111111111112222jjjjjjjjjjjjjjjkkkkkkkkkkkkkkkklllllllllllllll "%(+.1368:<>@BDFGIKLNOPRSTUVWXYZ[\]]^__``aaabbbbcccccbbbbaa``_^^]\[ZYWVTRQNLJGD@<70&qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrqqqqqqqq  !!!!!!!!!!!!""""""""""""##########$$$$$$$$$$$$%%%%%%%%%%%%&&&&&&&&&&&&''''''''''''(((((((((((())))))))))))************++++++++++++++,,,,,,,,,,,,--------------..............////////////////0000000000000000111111111111111111222222222222222222jjjjjjjjjkkkkkkkkkkkkkkkkllllllllllllllllmmmmmmmmm !$'*-/2469;=?@BDEGIJKMNOPQRSTUVWXYYZZ[[\\]]]]^^^^^]]]]\\[[ZZYXWVUSRPOMKIFC@=83, qqqqqqqqqrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr  !!!!!!!!!!!!""""""""""""############$$$$$$$$$$%%%%%%%%%%%%&&&&&&&&&&&&''''''''''''(((((((((((())))))))))))************++++++++++++,,,,,,,,,,,,--------------..............//////////////00000000000000001111111111111111222222222222222222333333333333jjjjkkkkkkkkkkkkkkkllllllllllllllllmmmmmmmmmmmmmmmmmnn +"%(+.02579;<>@BCEFGIJKLMNOPQRSSTUUVVWWXXXXXXXXXXXXWWVVUTSSRPONLKIGEB?<84.&rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrssssssssssssssssssssssssssssssssssssssssssssrrrrrrrrrrrrr  !!!!!!!!!!!!""""""""""############$$$$$$$$$$$$%%%%%%%%%%&&&&&&&&&&&&''''''''''''(((((((((((())))))))))************++++++++++++,,,,,,,,,,,,,,------------............//////////////000000000000000011111111111111222222222222222222333333333333333333444444kkkkkkkkkkkkkkllllllllllllllllmmmmmmmmmmmmmmmmnnnnnnnnnnnn  #&)+.02468:<=?@BCDFGHIJKLMMNOOPQQQRRRSSSSSSRRRRQQPOONMLJIHFDB@=:73.(rrrrrrrrrrrrrrrrrssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss  !!!!!!!!!!""""""""""""##########$$$$$$$$$$$$%%%%%%%%%%%%&&&&&&&&&&''''''''''''(((((((((((())))))))))************++++++++++++,,,,,,,,,,,,------------............//////////////00000000000000111111111111112222222222222222333333333333333344444444444444444444kkkkkkkkklllllllllllllllmmmmmmmmmmmmmmmmnnnnnnnnnnnnnnnnnoooooo #&(+-/13578:;=>?ABCDEFGHHIJJKKLLLLMMMMMLLLKKJJIHGFEDBA?=:851-'rrsssssssssssssssssssssssssssssssssssssssssssssssssssssstttttttttttttttttttttttttttttttttttssssssssssssssssss  !!!!!!!!!!!!""""""""""############$$$$$$$$$$%%%%%%%%%%%%&&&&&&&&&&&&''''''''''(((((((((((())))))))))************++++++++++++,,,,,,,,,,,,------------............////////////0000000000000011111111111111222222222222223333333333333333444444444444444455555555555555kkkklllllllllllllllmmmmmmmmmmmmmmmnnnnnnnnnnnnnnnnnoooooooooooooooo "%')+-/134679:;<=>?@ABCCDDEEEFFFFFFFEEEDDCBA@?><;9641.)$ssssssssssssssssssssssssssttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttt  !!!!!!!!!!""""""""""""##########$$$$$$$$$$$$%%%%%%%%%%&&&&&&&&&&&&''''''''''(((((((((((())))))))))************++++++++++++,,,,,,,,,,------------............////////////000000000000001111111111112222222222222233333333333333444444444444444455555555555555555566666666llllllllllllllmmmmmmmmmmmmmmmnnnnnnnnnnnnnnnnoooooooooooooooooppppppppppp  "%')+,.013456789:;;<==>>>>???>>>>==<;:987531/,)$sssssssssssstttttttttttttttttttttttttttttttttttttttttttttttttttttttttttuuuuuuuuuuuuuuuuuuuuuutttttttttttttttttttttttttt !!!!!!!!!!""""""""""""##########$$$$$$$$$$$$%%%%%%%%%%&&&&&&&&&&''''''''''''(((((((((())))))))))))**********++++++++++++,,,,,,,,,,------------............////////////000000000000111111111111222222222222223333333333333344444444444444555555555555555566666666666666666677lllllllllmmmmmmmmmmmmmmmnnnnnnnnnnnnnnnooooooooooooooooppppppppppppppppppqqqqq !#%'(*+-./012334555666666655443210.,*(%!ssttttttttttttttttttttttttttttttttttttuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu!!!!!!!!!!!!""""""""""############$$$$$$$$$$%%%%%%%%%%&&&&&&&&&&&&''''''''''(((((((((((())))))))))**********++++++++++++,,,,,,,,,,------------............//////////0000000000001111111111112222222222222233333333333344444444444444555555555555555566666666666666667777777777777777lllmmmmmmmmmmmmmmmnnnnnnnnnnnnnnnooooooooooooooooppppppppppppppppqqqqqqqqqqqqqqqqqqr !"$%&'()**++,,,,,,++**)(&%# tttttttttttttttttttttttuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu!!!!!!""""""""""##########$$$$$$$$$$$$%%%%%%%%%%&&&&&&&&&&''''''''''''(((((((((())))))))))************++++++++++,,,,,,,,,,------------..........////////////0000000000001111111111112222222222223333333333334444444444444455555555555555666666666666667777777777777777888888888888mmmmmmmmmmmmmnnnnnnnnnnnnnnnoooooooooooooooppppppppppppppppqqqqqqqqqqqqqqqqqqrrrrrrrrrrrrrrr  tttttttttttttttuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv""""""""""##########$$$$$$$$$$%%%%%%%%%%%%&&&&&&&&&&''''''''''(((((((((((())))))))))**********++++++++++,,,,,,,,,,,,----------..........////////////0000000000001111111111222222222222333333333333444444444444445555555555556666666666666677777777777777778888888888888888999999mmmmmmmmnnnnnnnnnnnnnnnooooooooooooooopppppppppppppppqqqqqqqqqqqqqqqqqrrrrrrrrrrrrrrrrrrsssssssssssssssssssstttttttttttttttttttttttuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv""""##########$$$$$$$$$$%%%%%%%%%%%%&&&&&&&&&&''''''''''(((((((((())))))))))**********++++++++++++,,,,,,,,,,----------............//////////0000000000111111111111222222222222333333333333444444444444555555555555666666666666667777777777777788888888888888999999999999999999::mmmnnnnnnnnnnnnnnooooooooooooooopppppppppppppppqqqqqqqqqqqqqqqqrrrrrrrrrrrrrrrrrsssssssssssssssssssttttttttttttttttttttttuuuuuuuuuuuuuuuuuuuuuuuuuuvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww########$$$$$$$$$$%%%%%%%%%%&&&&&&&&&&''''''''''''(((((((((())))))))))**********++++++++++,,,,,,,,,,------------..........//////////0000000000111111111111222222222222333333333344444444444455555555555566666666666666777777777777888888888888889999999999999999::::::::::::::nnnnnnnnnnnnooooooooooooooopppppppppppppppqqqqqqqqqqqqqqqrrrrrrrrrrrrrrrrrssssssssssssssssssttttttttttttttttttttuuuuuuuuuuuuuuuuuuuuuuuvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww##$$$$$$$$$$%%%%%%%%%%&&&&&&&&&&''''''''''(((((((((())))))))))))**********++++++++++,,,,,,,,,,----------..........//////////000000000000111111111122222222223333333333334444444444445555555555556666666666667777777777778888888888888899999999999999::::::::::::::::;;;;;;;;;;nnnnnnnooooooooooooooppppppppppppppqqqqqqqqqqqqqqqqrrrrrrrrrrrrrrrrssssssssssssssssstttttttttttttttttttuuuuuuuuuuuuuuuuuuuuuuvvvvvvvvvvvvvvvvvvvvvvvvvvwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx$$$$$$%%%%%%%%%%&&&&&&&&&&''''''''''(((((((((())))))))))**********++++++++++,,,,,,,,,,----------..........////////////000000000011111111112222222222333333333333444444444455555555555566666666666677777777777788888888888899999999999999::::::::::::::;;;;;;;;;;;;;;;;<<<<<<<>>>>>>>>>>>ppppppppppppppqqqqqqqqqqqqqqrrrrrrrrrrrrrrssssssssssssssssttttttttttttttttuuuuuuuuuuuuuuuuuvvvvvvvvvvvvvvvvvvvwwwwwwwwwwwwwwwwwwwwwwxxxxxxxxxxxxxxxxxxxxxxxxxxxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzyyyyyy &&''''''''''(((((((((())))))))))********++++++++++,,,,,,,,,,----------..........//////////00000000001111111122222222223333333333444444444444555555555566666666667777777777888888888888999999999999::::::::::;;;;;;;;;;;;;;<<<<<<<<<<<<==============>>>>>>>>>>>>>>????????pppppppppqqqqqqqqqqqqqqrrrrrrrrrrrrrrrssssssssssssssstttttttttttttttuuuuuuuuuuuuuuuuuvvvvvvvvvvvvvvvvvvwwwwwwwwwwwwwwwwwwwwxxxxxxxxxxxxxxxxxxxxxxxxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz!! ''''''(((((((((())))))))))********++++++++++,,,,,,,,,,----------..........////////000000000011111111112222222222333333333344444444445555555555666666666677777777778888888888889999999999::::::::::::;;;;;;;;;;;;<<<<<<<<<<<<============>>>>>>>>>>>>>>????????????????@@@@ppppqqqqqqqqqqqqqqrrrrrrrrrrrrrrssssssssssssssstttttttttttttttuuuuuuuuuuuuuuuuvvvvvvvvvvvvvvvvvwwwwwwwwwwwwwwwwwwwxxxxxxxxxxxxxxxxxxxxxxyyyyyyyyyyyyyyyyyyyyyyyyyyyyzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzzzzzzzzzz!!!!!! (((((((((())))))))))********++++++++++,,,,,,,,,,----------........//////////0000000000111111111122222222223333333344444444445555555555666666666677777777778888888888889999999999::::::::::::;;;;;;;;;;<<<<<<<<<<<<============>>>>>>>>>>>>>>??????????????@@@@@@@@@@@@@@@@qqqqqqqqqqqqqrrrrrrrrrrrrrssssssssssssssstttttttttttttttuuuuuuuuuuuuuuuvvvvvvvvvvvvvvvvvwwwwwwwwwwwwwwwwwwxxxxxxxxxxxxxxxxxxxxyyyyyyyyyyyyyyyyyyyyyyyyyzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{!!!!!!!!!! (((())))))))))********++++++++++,,,,,,,,,,----------........//////////00000000001111111122222222223333333333444444444455555555556666666666777777777788888888889999999999::::::::::;;;;;;;;;;;;<<<<<<<<<<<<==========>>>>>>>>>>>>>>????????????@@@@@@@@@@@@@@AAAAAAAAAAAAAAqqqqqqqqrrrrrrrrrrrrrsssssssssssssstttttttttttttttuuuuuuuuuuuuuuuvvvvvvvvvvvvvvvvwwwwwwwwwwwwwwwwwxxxxxxxxxxxxxxxxxxxxyyyyyyyyyyyyyyyyyyyyyyzzzzzzzzzzzzzzzzzzzzzzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{|||||||||||||||||||||||||||||||||||||||||{{{{{{{{{{{{{{{{{{""""!!!!!!!! ))))))))********++++++++++,,,,,,,,,,--------..........//////////000000001111111111222222222233333333334444444455555555556666666666777777777788888888889999999999::::::::::;;;;;;;;;;;;<<<<<<<<<<============>>>>>>>>>>>>????????????@@@@@@@@@@@@@@AAAAAAAAAAAAAABBBBBBBBBBqqrrrrrrrrrrrrrrssssssssssssssttttttttttttttuuuuuuuuuuuuuuuvvvvvvvvvvvvvvvwwwwwwwwwwwwwwwwwxxxxxxxxxxxxxxxxxxyyyyyyyyyyyyyyyyyyyyyzzzzzzzzzzzzzzzzzzzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||""""""""!!!!!!!!!! ))********++++++++++,,,,,,,,,,--------..........//////////0000000011111111112222222222333333334444444444555555555566666666667777777788888888889999999999::::::::::;;;;;;;;;;;;<<<<<<<<<<==========>>>>>>>>>>>>????????????@@@@@@@@@@@@AAAAAAAAAAAAAABBBBBBBBBBBBBBCCCCCCCCrrrrrrrrrrrsssssssssssssttttttttttttttuuuuuuuuuuuuuuuvvvvvvvvvvvvvvvwwwwwwwwwwwwwwwwxxxxxxxxxxxxxxxxxxyyyyyyyyyyyyyyyyyyyzzzzzzzzzzzzzzzzzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||}}}}}}}}}}}}}}}}}||||||||||||||||||||||||||||####""""""""!!!!!!!!!! ******++++++++,,,,,,,,,,--------..........//////////0000000011111111112222222233333333334444444444555555556666666666777777777788888888889999999999::::::::::;;;;;;;;;;<<<<<<<<<<==========>>>>>>>>>>>>??????????@@@@@@@@@@@@AAAAAAAAAAAAAABBBBBBBBBBBBBBCCCCCCCCCCCCCCDDDDrrrrrrsssssssssssssttttttttttttttuuuuuuuuuuuuuuvvvvvvvvvvvvvvvwwwwwwwwwwwwwwwxxxxxxxxxxxxxxxxxyyyyyyyyyyyyyyyyyyyzzzzzzzzzzzzzzzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{{||||||||||||||||||||||||||||||||||||}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}########""""""""""!!!!!!!!!! ++++++++,,,,,,,,,,----------........//////////00000000111111111122222222333333333344444444445555555566666666667777777788888888889999999999::::::::::;;;;;;;;;;<<<<<<<<<<==========>>>>>>>>>>????????????@@@@@@@@@@@@AAAAAAAAAAAABBBBBBBBBBBBCCCCCCCCCCCCCCDDDDDDDDDDDDDDEErsssssssssssssttttttttttttttuuuuuuuuuuuuuvvvvvvvvvvvvvvvwwwwwwwwwwwwwwwxxxxxxxxxxxxxxxxyyyyyyyyyyyyyyyyyyzzzzzzzzzzzzzzzzzzz{{{{{{{{{{{{{{{{{{{{{{{|||||||||||||||||||||||||||||}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}$$########""""""""""!!!!!!!!!! ++++,,,,,,,,----------........//////////00000000111111111122222222333333333344444444555555555566666666777777777788888888889999999999::::::::;;;;;;;;;;<<<<<<<<<<==========>>>>>>>>>>????????????@@@@@@@@@@AAAAAAAAAAAABBBBBBBBBBBBCCCCCCCCCCCCDDDDDDDDDDDDDDEEEEEEEEEEEEEEssssssssstttttttttttttuuuuuuuuuuuuuuvvvvvvvvvvvvvvwwwwwwwwwwwwwwwxxxxxxxxxxxxxxxxyyyyyyyyyyyyyyyyzzzzzzzzzzzzzzzzzzz{{{{{{{{{{{{{{{{{{{{{|||||||||||||||||||||||||}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~$$$$$$##########""""""""!!!!!!!!!! ,,,,,,----------........//////////000000001111111111222222223333333333444444445555555555666666667777777777888888889999999999::::::::::;;;;;;;;;;<<<<<<<<==========>>>>>>>>>>????????????@@@@@@@@@@AAAAAAAAAAAABBBBBBBBBBCCCCCCCCCCCCDDDDDDDDDDDDDDEEEEEEEEEEEEEEFFFFFFFFFFsssstttttttttttttuuuuuuuuuuuuuuvvvvvvvvvvvvvvwwwwwwwwwwwwwwxxxxxxxxxxxxxxxyyyyyyyyyyyyyyyyyzzzzzzzzzzzzzzzzz{{{{{{{{{{{{{{{{{{{{|||||||||||||||||||||||}}}}}}}}}}}}}}}}}}}}}}}}}}}}}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~%%$$$$$$$$##########""""""""""!!!!!!!! ,,--------..........////////000000001111111111222222223333333333444444445555555555666666667777777777888888889999999999::::::::;;;;;;;;;;<<<<<<<<<<==========>>>>>>>>>>??????????@@@@@@@@@@AAAAAAAAAABBBBBBBBBBBBCCCCCCCCCCCCDDDDDDDDDDDDEEEEEEEEEEEEFFFFFFFFFFFFFFGGGGGGGGGGtttttttttttuuuuuuuuuuuuuuvvvvvvvvvvvvvwwwwwwwwwwwwwwxxxxxxxxxxxxxxxyyyyyyyyyyyyyyyyzzzzzzzzzzzzzzzzz{{{{{{{{{{{{{{{{{{|||||||||||||||||||||}}}}}}}}}}}}}}}}}}}}}}}}}}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~%%%%%%$$$$$$$$$$########""""""""""!!!!!!!!!! ----..........////////000000000011111111222222223333333333444444445555555555666666667777777777888888889999999999::::::::;;;;;;;;;;<<<<<<<<==========>>>>>>>>>>??????????@@@@@@@@@@AAAAAAAAAABBBBBBBBBBBBCCCCCCCCCCDDDDDDDDDDDDEEEEEEEEEEEEFFFFFFFFFFFFFFGGGGGGGGGGGGGGHHHHHHtttttttuuuuuuuuuuuuuvvvvvvvvvvvvvwwwwwwwwwwwwwwxxxxxxxxxxxxxxyyyyyyyyyyyyyyyyzzzzzzzzzzzzzzzz{{{{{{{{{{{{{{{{{||||||||||||||||||||}}}}}}}}}}}}}}}}}}}}}}}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~&&%%%%%%%%$$$$$$$$$$########""""""""""!!!!!!!!!! ........////////0000000000111111112222222233333333334444444455555555556666666677777777888888888899999999::::::::::;;;;;;;;<<<<<<<<<<==========>>>>>>>>??????????@@@@@@@@@@AAAAAAAAAABBBBBBBBBBCCCCCCCCCCCCDDDDDDDDDDEEEEEEEEEEEEFFFFFFFFFFFFGGGGGGGGGGGGGGHHHHHHHHHHHHHHIIIIttuuuuuuuuuuuuuvvvvvvvvvvvvvwwwwwwwwwwwwwwxxxxxxxxxxxxxxyyyyyyyyyyyyyyyzzzzzzzzzzzzzzz{{{{{{{{{{{{{{{{{|||||||||||||||||||}}}}}}}}}}}}}}}}}}}}}~~~~~~~~~~~~~~~~~~~~~~~~~~~&&&&&&%%%%%%%%%%$$$$$$$$##########""""""""!!!!!!!!!! ..//////////00000000111111112222222222333333334444444455555555556666666677777777888888888899999999::::::::::;;;;;;;;<<<<<<<<<<========>>>>>>>>>>??????????@@@@@@@@AAAAAAAAAABBBBBBBBBBCCCCCCCCCCCCDDDDDDDDDDEEEEEEEEEEEEFFFFFFFFFFFFGGGGGGGGGGGGHHHHHHHHHHHHIIIIIIIIIIIIIIIIJJuuuuuuuuuvvvvvvvvvvvvvwwwwwwwwwwwwwxxxxxxxxxxxxxxyyyyyyyyyyyyyyyzzzzzzzzzzzzzzz{{{{{{{{{{{{{{{{||||||||||||||||||}}}}}}}}}}}}}}}}}}}}~~~~~~~~~~~~~~~~~~~~~~~''&&&&&&&&%%%%%%%%%%$$$$$$$$##########""""""""""!!!!!!!! //////00000000111111111122222222333333334444444455555555556666666677777777888888888899999999::::::::;;;;;;;;;;<<<<<<<<==========>>>>>>>>??????????@@@@@@@@@@AAAAAAAAAABBBBBBBBBBCCCCCCCCCCDDDDDDDDDDEEEEEEEEEEFFFFFFFFFFFFGGGGGGGGGGGGHHHHHHHHHHHHIIIIIIIIIIIIIIJJJJJJJJJJJJJJuuuuvvvvvvvvvvvvvwwwwwwwwwwwwwxxxxxxxxxxxxxxyyyyyyyyyyyyyyzzzzzzzzzzzzzzz{{{{{{{{{{{{{{{{|||||||||||||||||}}}}}}}}}}}}}}}}}}~~~~~~~~~~~~~~~~~~~~~~''''''&&&&&&&&&&%%%%%%%%$$$$$$$$$$########""""""""""!!!!!!!!!! 00000000111111111122222222333333334444444444555555556666666677777777888888888899999999::::::::;;;;;;;;;;<<<<<<<<==========>>>>>>>>??????????@@@@@@@@AAAAAAAAAABBBBBBBBBBCCCCCCCCCCDDDDDDDDDDEEEEEEEEEEFFFFFFFFFFGGGGGGGGGGGGHHHHHHHHHHHHIIIIIIIIIIIIJJJJJJJJJJJJJJKKKKKKKKKKKKvvvvvvvvvvvvwwwwwwwwwwwwwxxxxxxxxxxxxxxyyyyyyyyyyyyyyzzzzzzzzzzzzzz{{{{{{{{{{{{{{{|||||||||||||||||}}}}}}}}}}}}}}}}}}~~~~~~~~~~~~~~~~~~~~((''''''''&&&&&&&&&&%%%%%%%%$$$$$$$$$$########""""""""""!!!!!!!!!! 00001111111122222222333333333344444444555555556666666677777777778888888899999999::::::::;;;;;;;;;;<<<<<<<<========>>>>>>>>>>????????@@@@@@@@@@AAAAAAAAAABBBBBBBBCCCCCCCCCCDDDDDDDDDDEEEEEEEEEEFFFFFFFFFFGGGGGGGGGGGGHHHHHHHHHHIIIIIIIIIIIIJJJJJJJJJJJJJJKKKKKKKKKKKKKKLLLLLLLLLLvvvvvvvwwwwwwwwwwwwwxxxxxxxxxxxxxyyyyyyyyyyyyyzzzzzzzzzzzzzz{{{{{{{{{{{{{{{||||||||||||||||}}}}}}}}}}}}}}}}}~~~~~~~~~~~~~~~~~~~((((((''''''''''&&&&&&&&%%%%%%%%$$$$$$$$$$##########""""""""!!!!!!!!!! 11111122222222223333333344444444555555556666666666777777778888888899999999::::::::;;;;;;;;;;<<<<<<<<========>>>>>>>>>>????????@@@@@@@@@@AAAAAAAABBBBBBBBBBCCCCCCCCDDDDDDDDDDEEEEEEEEEEFFFFFFFFFFGGGGGGGGGGGGHHHHHHHHHHIIIIIIIIIIIIJJJJJJJJJJJJKKKKKKKKKKKKLLLLLLLLLLLLLLMMMMMMMMvvwwwwwwwwwwwwwxxxxxxxxxxxxxyyyyyyyyyyyyyzzzzzzzzzzzzzz{{{{{{{{{{{{{{||||||||||||||||}}}}}}}}}}}}}}}}~~~~~~~~~~~~~~~~~~))((((((((((''''''''&&&&&&&&%%%%%%%%%%$$$$$$$$##########""""""""!!!!!!!!!! 11222222223333333344444444555555555566666666777777778888888899999999::::::::::;;;;;;;;<<<<<<<<========>>>>>>>>>>????????@@@@@@@@AAAAAAAAAABBBBBBBBCCCCCCCCCCDDDDDDDDDDEEEEEEEEFFFFFFFFFFGGGGGGGGGGHHHHHHHHHHHHIIIIIIIIIIJJJJJJJJJJJJKKKKKKKKKKKKLLLLLLLLLLLLLLMMMMMMMMMMMMMMNNNNNNwwwwwwwwwxxxxxxxxxxxxxyyyyyyyyyyyyyzzzzzzzzzzzzzz{{{{{{{{{{{{{{|||||||||||||||}}}}}}}}}}}}}}}}~~~~~~~~~~~~~~~~~))))))))((((((((''''''''&&&&&&&&%%%%%%%%%%$$$$$$$$##########""""""""!!!!!!!!!! 22223333333333444444445555555566666666777777778888888899999999::::::::::;;;;;;;;<<<<<<<<========>>>>>>>>>>????????@@@@@@@@AAAAAAAAAABBBBBBBBCCCCCCCCDDDDDDDDDDEEEEEEEEEEFFFFFFFFFFGGGGGGGGGGHHHHHHHHHHIIIIIIIIIIJJJJJJJJJJKKKKKKKKKKKKLLLLLLLLLLLLMMMMMMMMMMMMMMNNNNNNNNNNNNNNOOOOOOwwwwxxxxxxxxxxxxyyyyyyyyyyyyyzzzzzzzzzzzzzz{{{{{{{{{{{{{|||||||||||||||}}}}}}}}}}}}}}}~~~~~~~~~~~~~~~~~******))))))))((((((((''''''''&&&&&&&&&&%%%%%%%%$$$$$$$$##########""""""""""!!!!!!!! 3333333344444444555555556666666677777777888888888899999999::::::::;;;;;;;;<<<<<<<<========>>>>>>>>>>????????@@@@@@@@AAAAAAAABBBBBBBBBBCCCCCCCCDDDDDDDDDDEEEEEEEEFFFFFFFFFFGGGGGGGGGGHHHHHHHHHHIIIIIIIIIIJJJJJJJJJJKKKKKKKKKKKKLLLLLLLLLLLLMMMMMMMMMMMMNNNNNNNNNNNNOOOOOOOOOOOOOOOOPPxxxxxxxxxxxxyyyyyyyyyyyyzzzzzzzzzzzzzz{{{{{{{{{{{{{||||||||||||||}}}}}}}}}}}}}}}~~~~~~~~~~~~~~~~++********))))))))((((((((''''''''&&&&&&&&&&%%%%%%%%$$$$$$$$##########""""""""""!!!!!!!! 3344444444555555555566666666777777778888888899999999::::::::;;;;;;;;<<<<<<<<========>>>>>>>>>>????????@@@@@@@@AAAAAAAABBBBBBBBBBCCCCCCCCDDDDDDDDEEEEEEEEEEFFFFFFFFGGGGGGGGGGHHHHHHHHHHIIIIIIIIIIJJJJJJJJJJKKKKKKKKKKLLLLLLLLLLLLMMMMMMMMMMMMNNNNNNNNNNNNOOOOOOOOOOOOOOPPPPPPPPPPPPPPQQxxxxxxyyyyyyyyyyyyyzzzzzzzzzzzzz{{{{{{{{{{{{{||||||||||||||}}}}}}}}}}}}}}~~~~~~~~~~~~~~~~++++++********))))))))((((((((''''''''&&&&&&&&&&%%%%%%%%$$$$$$$$$$########""""""""""!!!!!!!! 4444445555555566666666777777778888888899999999::::::::;;;;;;;;<<<<<<<<==========>>>>>>>>????????@@@@@@@@AAAAAAAABBBBBBBBCCCCCCCCCCDDDDDDDDEEEEEEEEEEFFFFFFFFGGGGGGGGGGHHHHHHHHIIIIIIIIIIJJJJJJJJJJKKKKKKKKKKLLLLLLLLLLLLMMMMMMMMMMNNNNNNNNNNNNOOOOOOOOOOOOOOPPPPPPPPPPPPQQQQQQQQQQQQQQQQxyyyyyyyyyyyyzzzzzzzzzzzzz{{{{{{{{{{{{{||||||||||||||}}}}}}}}}}}}}}~~~~~~~~~~~~~~~,,,,++++++++********))))))))((((((((''''''''''&&&&&&&&%%%%%%%%$$$$$$$$$$########""""""""""!!!!!!!! 555555556666666677777777888888888899999999::::::::;;;;;;;;<<<<<<<<========>>>>>>>>????????@@@@@@@@AAAAAAAABBBBBBBBCCCCCCCCCCDDDDDDDDEEEEEEEEFFFFFFFFFFGGGGGGGGHHHHHHHHHHIIIIIIIIIIJJJJJJJJKKKKKKKKKKLLLLLLLLLLLLMMMMMMMMMMNNNNNNNNNNNNOOOOOOOOOOOOPPPPPPPPPPPPQQQQQQQQQQQQQQRRRRRRRRRRRRyyyyyyyyyzzzzzzzzzzzz{{{{{{{{{{{{{|||||||||||||}}}}}}}}}}}}}}~~~~~~~~~~~~~~~,,,,,,,,++++++++********))))))))((((((((''''''''''&&&&&&&&%%%%%%%%$$$$$$$$$$########""""""""""!!!!!!!!!! 555566666666777777778888888899999999::::::::;;;;;;;;<<<<<<<<========>>>>>>>>????????@@@@@@@@AAAAAAAABBBBBBBBCCCCCCCCCCDDDDDDDDEEEEEEEEFFFFFFFFGGGGGGGGGGHHHHHHHHIIIIIIIIIIJJJJJJJJJJKKKKKKKKKKLLLLLLLLLLMMMMMMMMMMNNNNNNNNNNOOOOOOOOOOOOPPPPPPPPPPPPQQQQQQQQQQQQRRRRRRRRRRRRRRSSSSSSSSSSSSyyyzzzzzzzzzzzzz{{{{{{{{{{{{||||||||||||||}}}}}}}}}}}}}~~~~~~~~~~~~~~------,,,,,,,,++++++++********))))))))((((((((''''''''''&&&&&&&&%%%%%%%%$$$$$$$$$$########""""""""""!!!!!!!!!! 666666777777778888888899999999::::::::;;;;;;;;<<<<<<<<========>>>>>>>>????????@@@@@@@@AAAAAAAABBBBBBBBCCCCCCCCCCDDDDDDDDEEEEEEEEFFFFFFFFGGGGGGGGGGHHHHHHHHIIIIIIIIIIJJJJJJJJKKKKKKKKKKLLLLLLLLLLMMMMMMMMMMNNNNNNNNNNOOOOOOOOOOPPPPPPPPPPPPQQQQQQQQQQQQRRRRRRRRRRRRRRSSSSSSSSSSSSSSTTTTTTTTTTzzzzzzzzzz{{{{{{{{{{{{{|||||||||||||}}}}}}}}}}}}}~~~~~~~~~~~~~~..--------,,,,,,,,++++++++********))))))))((((((((''''''''''&&&&&&&&%%%%%%%%$$$$$$$$$$########""""""""""!!!!!!!!!! 66777777778888888899999999::::::::;;;;;;;;<<<<<<<<========>>>>>>>>????????@@@@@@@@AAAAAAAABBBBBBBBCCCCCCCCDDDDDDDDEEEEEEEEFFFFFFFFGGGGGGGGHHHHHHHHHHIIIIIIIIJJJJJJJJJJKKKKKKKKLLLLLLLLLLMMMMMMMMMMNNNNNNNNNNOOOOOOOOOOPPPPPPPPPPPPQQQQQQQQQQRRRRRRRRRRRRRRSSSSSSSSSSSSTTTTTTTTTTTTTTTTUUUUUUUUzzzzz{{{{{{{{{{{{|||||||||||||}}}}}}}}}}}}}~~~~~~~~~~~~~~........--------,,,,,,,,++++++++********))))))))((((((((((''''''''&&&&&&&&%%%%%%%%$$$$$$$$$$########""""""""""!!!!!!!!!! 77778888888899999999::::::::;;;;;;;;<<<<<<<<========>>>>>>>>????????@@@@@@@@AAAAAAAABBBBBBBBCCCCCCCCDDDDDDDDEEEEEEEEFFFFFFFFGGGGGGGGHHHHHHHHHHIIIIIIIIJJJJJJJJKKKKKKKKKKLLLLLLLLMMMMMMMMMMNNNNNNNNNNOOOOOOOOOOPPPPPPPPPPQQQQQQQQQQQQRRRRRRRRRRRRSSSSSSSSSSSSTTTTTTTTTTTTTTUUUUUUUUUUUUUUVVVVVVVV{{{{{{{{{{{{||||||||||||}}}}}}}}}}}}}~~~~~~~~~~~~~~//////........--------,,,,,,,,++++++++********))))))))((((((((((''''''''&&&&&&&&%%%%%%%%$$$$$$$$$$########""""""""""!!!!!!!!!! 8888888899999999::::::::;;;;;;<<<<<<<<========>>>>>>>>????????@@@@@@@@AAAAAAAABBBBBBBBCCCCCCCCDDDDDDDDEEEEEEEEFFFFFFFFGGGGGGGGHHHHHHHHHHIIIIIIIIJJJJJJJJKKKKKKKKKKLLLLLLLLMMMMMMMMMMNNNNNNNNOOOOOOOOOOPPPPPPPPPPQQQQQQQQQQQQRRRRRRRRRRSSSSSSSSSSSSTTTTTTTTTTTTUUUUUUUUUUUUUUVVVVVVVVVVVVVVVVWWWWWW{{{{{{|||||||||||||}}}}}}}}}}}}}~~~~~~~~~~~~~0000////////......--------,,,,,,,,++++++++********))))))))((((((((((''''''''&&&&&&&&%%%%%%%%$$$$$$$$$$########""""""""""!!!!!!!!!! 8899999999::::::::;;;;;;;;<<<<<<<<========>>>>>>>>????????@@@@@@AAAAAAAABBBBBBBBCCCCCCCCDDDDDDDDEEEEEEEEFFFFFFFFGGGGGGGGHHHHHHHHIIIIIIIIIIJJJJJJJJKKKKKKKKLLLLLLLLLLMMMMMMMMNNNNNNNNNNOOOOOOOOOOPPPPPPPPQQQQQQQQQQQQRRRRRRRRRRSSSSSSSSSSSSTTTTTTTTTTUUUUUUUUUUUUUUVVVVVVVVVVVVVVWWWWWWWWWWWWWWWWXXXX{||||||||||||}}}}}}}}}}}}}~~~~~~~~~~~~~1100000000////////......--------,,,,,,,,++++++++********))))))))((((((((((''''''''&&&&&&&&%%%%%%%%$$$$$$$$$$########""""""""""!!!!!!!!!! 999999::::::::;;;;;;<<<<<<<<========>>>>>>>>????????@@@@@@@@AAAAAAAABBBBBBBBCCCCCCDDDDDDDDEEEEEEEEFFFFFFFFGGGGGGGGHHHHHHHHIIIIIIIIIIJJJJJJJJKKKKKKKKLLLLLLLLMMMMMMMMMMNNNNNNNNOOOOOOOOOOPPPPPPPPPPQQQQQQQQQQRRRRRRRRRRSSSSSSSSSSTTTTTTTTTTTTUUUUUUUUUUUUVVVVVVVVVVVVWWWWWWWWWWWWWWXXXXXXXXXXXXXXXXYYYY||||||||}}}}}}}}}}}}~~~~~~~~~~~~~1111111100000000////////......--------,,,,,,,,++++++++********))))))))((((((((''''''''''&&&&&&&&%%%%%%%%$$$$$$$$$$########""""""""""!!!!!!!!!! ::::::::;;;;;;;;<<<<<<<<========>>>>>>>>??????@@@@@@@@AAAAAAAABBBBBBBBCCCCCCCCDDDDDDDDEEEEEEEEFFFFFFFFGGGGGGGGHHHHHHHHIIIIIIIIJJJJJJJJKKKKKKKKLLLLLLLLMMMMMMMMMMNNNNNNNNOOOOOOOOPPPPPPPPPPQQQQQQQQQQRRRRRRRRRRSSSSSSSSSSTTTTTTTTTTUUUUUUUUUUUUVVVVVVVVVVVVWWWWWWWWWWWWWWXXXXXXXXXXXXXXYYYYYYYYYYYYYYYYZZZZ||}}}}}}}}}}}}~~~~~~~~~~~~~2222221111111100000000////////......--------,,,,,,,,++++++++********))))))))((((((((''''''''''&&&&&&&&%%%%%%%%$$$$$$$$$$########""""""""""!!!!!!!! ::::;;;;;;;;<<<<<<========>>>>>>>>????????@@@@@@@@AAAAAABBBBBBBBCCCCCCCCDDDDDDDDEEEEEEEEFFFFFFFFGGGGGGGGHHHHHHHHIIIIIIIIJJJJJJJJKKKKKKKKLLLLLLLLMMMMMMMMNNNNNNNNNNOOOOOOOOPPPPPPPPPPQQQQQQQQRRRRRRRRRRSSSSSSSSSSTTTTTTTTTTUUUUUUUUUUUUVVVVVVVVVVWWWWWWWWWWWWWWXXXXXXXXXXXXYYYYYYYYYYYYYYYYZZZZZZZZZZZZZZZZ[[}}}}}}}}}~~~~~~~~~~~~3333332222221111111100000000////////......--------,,,,,,,,++++++++********))))))))((((((((''''''''''&&&&&&&&%%%%%%%%$$$$$$$$$$########""""""""""!!!!!!!! ;;;;;;<<<<<<<<========>>>>>>>>??????@@@@@@@@AAAAAAAABBBBBBBBCCCCCCCCDDDDDDEEEEEEEEFFFFFFFFGGGGGGGGHHHHHHHHIIIIIIIIJJJJJJJJKKKKKKKKLLLLLLLLMMMMMMMMNNNNNNNNOOOOOOOOOOPPPPPPPPQQQQQQQQQQRRRRRRRRSSSSSSSSSSTTTTTTTTTTUUUUUUUUUUUUVVVVVVVVVVWWWWWWWWWWWWXXXXXXXXXXXXYYYYYYYYYYYYYYZZZZZZZZZZZZZZ[[[[[[[[[[[[[[[[[[}}}~~~~~~~~~~~~~4444333333332222221111111100000000////////......--------,,,,,,,,++++++++********))))))))((((((((''''''''''&&&&&&&&%%%%%%%%$$$$$$$$$$########""""""""""!!!!!!!! ;;<<<<<<<<======>>>>>>>>????????@@@@@@@@AAAAAABBBBBBBBCCCCCCCCDDDDDDDDEEEEEEEEFFFFFFGGGGGGGGHHHHHHHHIIIIIIIIJJJJJJJJKKKKKKKKLLLLLLLLMMMMMMMMNNNNNNNNOOOOOOOOOOPPPPPPPPQQQQQQQQRRRRRRRRRRSSSSSSSSSSTTTTTTTTTTUUUUUUUUUUVVVVVVVVVVWWWWWWWWWWXXXXXXXXXXXXYYYYYYYYYYYYYYZZZZZZZZZZZZ[[[[[[[[[[[[[[[[\\\\\\\\\\\\\\\\\\~~~~~~~~~5544444444333333332222221111111100000000////////......--------,,,,,,,,++++++++********))))))))((((((((''''''''&&&&&&&&&&%%%%%%%%$$$$$$$$##########""""""""""!!!!!!!! <<<<========>>>>>>>>??????@@@@@@@@AAAAAAAABBBBBBBBCCCCCCDDDDDDDDEEEEEEEEFFFFFFFFGGGGGGGGHHHHHHIIIIIIIIJJJJJJJJKKKKKKKKLLLLLLLLMMMMMMMMNNNNNNNNOOOOOOOOOOPPPPPPPPQQQQQQQQRRRRRRRRRRSSSSSSSSTTTTTTTTTTUUUUUUUUUUVVVVVVVVVVWWWWWWWWWWXXXXXXXXXXXXYYYYYYYYYYYYZZZZZZZZZZZZ[[[[[[[[[[[[[[\\\\\\\\\\\\\\\\]]]]]]]]]]]]]]]]~~~~6655555544444444333333332222221111111100000000//////........--------,,,,,,,,++++++++********))))))))((((((((''''''''&&&&&&&&&&%%%%%%%%$$$$$$$$##########""""""""!!!!!!!!!! ========>>>>>>????????@@@@@@@@AAAAAABBBBBBBBCCCCCCCCDDDDDDDDEEEEEEFFFFFFFFGGGGGGGGHHHHHHHHIIIIIIIIJJJJJJKKKKKKKKLLLLLLLLMMMMMMMMNNNNNNNNOOOOOOOOPPPPPPPPPPQQQQQQQQRRRRRRRRSSSSSSSSSSTTTTTTTTUUUUUUUUUUVVVVVVVVVVWWWWWWWWWWXXXXXXXXXXYYYYYYYYYYYYZZZZZZZZZZZZ[[[[[[[[[[[[[[\\\\\\\\\\\\\\]]]]]]]]]]]]]]]]^^^^^^^^^^^^^^6666666655555544444444333333332222221111111100000000//////........--------,,,,,,,,++++++++********))))))))((((((((''''''''&&&&&&&&&&%%%%%%%%$$$$$$$$##########""""""""!!!!!!!!!! ==>>>>>>>>????????@@@@@@AAAAAAAABBBBBBBBCCCCCCDDDDDDDDEEEEEEEEFFFFFFFFGGGGGGHHHHHHHHIIIIIIIIJJJJJJJJKKKKKKKKLLLLLLLLMMMMMMNNNNNNNNOOOOOOOOOOPPPPPPPPQQQQQQQQRRRRRRRRSSSSSSSSTTTTTTTTTTUUUUUUUUVVVVVVVVVVWWWWWWWWWWXXXXXXXXXXYYYYYYYYYYYYZZZZZZZZZZ[[[[[[[[[[[[\\\\\\\\\\\\\\]]]]]]]]]]]]]]^^^^^^^^^^^^^^^^^^______________7777776666666655555544444444333333332222221111111100000000//////........--------,,,,,,,,++++++++********))))))))((((((((''''''''&&&&&&&&%%%%%%%%%%$$$$$$$$##########""""""""!!!!!!!!!! >>>>>>??????@@@@@@@@AAAAAAAABBBBBBCCCCCCCCDDDDDDDDEEEEEEFFFFFFFFGGGGGGGGHHHHHHHHIIIIIIJJJJJJJJKKKKKKKKLLLLLLLLMMMMMMMMNNNNNNNNOOOOOOOOPPPPPPPPQQQQQQQQRRRRRRRRSSSSSSSSTTTTTTTTTTUUUUUUUUVVVVVVVVVVWWWWWWWWXXXXXXXXXXYYYYYYYYYYYYZZZZZZZZZZ[[[[[[[[[[[[\\\\\\\\\\\\]]]]]]]]]]]]]]^^^^^^^^^^^^^^__________________``````````````888888887777776666666655555544444444333333222222221111111100000000//////........--------,,,,,,,,++++++++********))))))))((((((((''''''''&&&&&&&&%%%%%%%%%%$$$$$$$$##########""""""""!!!!!!!!!! ????????@@@@@@@@AAAAAABBBBBBBBCCCCCCCCDDDDDDEEEEEEEEFFFFFFFFGGGGGGHHHHHHHHIIIIIIIIJJJJJJKKKKKKKKLLLLLLLLMMMMMMMMNNNNNNNNOOOOOOOOPPPPPPPPQQQQQQQQRRRRRRRRSSSSSSSSTTTTTTTTUUUUUUUUUUVVVVVVVVWWWWWWWWWWXXXXXXXXXXYYYYYYYYYYZZZZZZZZZZ[[[[[[[[[[\\\\\\\\\\\\]]]]]]]]]]]]^^^^^^^^^^^^^^________________``````````````````aaaaaaaaaaaa9999998888888877777766666666555555444444443333332222222211111111000000////////........--------,,,,,,,,++++++++********))))))))((((((((''''''''&&&&&&&&%%%%%%%%$$$$$$$$$$########""""""""""!!!!!!!!!! ????@@@@@@AAAAAAAABBBBBBBBCCCCCCDDDDDDDDEEEEEEFFFFFFFFGGGGGGGGHHHHHHIIIIIIIIJJJJJJJJKKKKKKKKLLLLLLMMMMMMMMNNNNNNNNOOOOOOOOPPPPPPPPQQQQQQQQRRRRRRRRSSSSSSSSTTTTTTTTUUUUUUUUVVVVVVVVVVWWWWWWWWXXXXXXXXXXYYYYYYYYYYZZZZZZZZZZ[[[[[[[[[[\\\\\\\\\\\\]]]]]]]]]]]]^^^^^^^^^^^^______________````````````````aaaaaaaaaaaaaaaaaabbbbbbbbbbbb::::::9999998888888877777766666666555555444444443333332222222211111111000000////////........--------,,,,,,,,++++++********))))))))((((((((((''''''''&&&&&&&&%%%%%%%%$$$$$$$$$$########""""""""""!!!!!!!!!! @@@@@@AAAAAAAABBBBBBCCCCCCCCDDDDDDEEEEEEEEFFFFFFFFGGGGGGHHHHHHHHIIIIIIIIJJJJJJKKKKKKKKLLLLLLLLMMMMMMMMNNNNNNOOOOOOOOPPPPPPPPQQQQQQQQRRRRRRRRSSSSSSSSTTTTTTTTUUUUUUUUVVVVVVVVVVWWWWWWWWXXXXXXXXXXYYYYYYYYZZZZZZZZZZ[[[[[[[[[[\\\\\\\\\\]]]]]]]]]]]]^^^^^^^^^^^^____________````````````````aaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbcccccccccc;;;;;;::::::::9999998888888877777766666666555555444444443333332222222211111100000000////////........------,,,,,,,,++++++++********))))))))((((((((''''''''''&&&&&&&&%%%%%%%%$$$$$$$$$$########""""""""""!!!!!!!! @@AAAAAABBBBBBBBCCCCCCDDDDDDDDEEEEEEEEFFFFFFGGGGGGGGHHHHHHHHIIIIIIJJJJJJJJKKKKKKKKLLLLLLMMMMMMMMNNNNNNNNOOOOOOPPPPPPPPQQQQQQQQRRRRRRRRSSSSSSSSTTTTTTTTUUUUUUUUVVVVVVVVWWWWWWWWWWXXXXXXXXYYYYYYYYYYZZZZZZZZ[[[[[[[[[[\\\\\\\\\\]]]]]]]]]]]]^^^^^^^^^^____________``````````````aaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbccccccccccccccccccccccdddddddd<<<<<<<<;;;;;;::::::::9999998888887777777766666655555555444444333333332222222211111100000000////////........------,,,,,,,,++++++++********))))))))((((((((''''''''&&&&&&&&&&%%%%%%%%$$$$$$$$##########""""""""""!!!!!!!! AAAABBBBBBBBCCCCCCDDDDDDDDEEEEEEFFFFFFFFGGGGGGGGHHHHHHIIIIIIIIJJJJJJKKKKKKKKLLLLLLLLMMMMMMNNNNNNNNOOOOOOOOPPPPPPPPQQQQQQRRRRRRRRSSSSSSSSTTTTTTTTUUUUUUUUVVVVVVVVWWWWWWWWWWXXXXXXXXYYYYYYYYZZZZZZZZZZ[[[[[[[[[[\\\\\\\\\\]]]]]]]]]]^^^^^^^^^^____________````````````aaaaaaaaaaaaaabbbbbbbbbbbbbbccccccccccccccccccddddddddddddddddddddddeeeeeeee======<<<<<<<<;;;;;;::::::999999998888887777777766666655555555444444333333332222222211111100000000////////......--------,,,,,,,,++++++++********))))))))((((((((''''''''&&&&&&&&&&%%%%%%%%$$$$$$$$##########""""""""!!!!!!!!!! BBBBBBCCCCCCCCDDDDDDEEEEEEEEFFFFFFFFGGGGGGHHHHHHHHIIIIIIJJJJJJJJKKKKKKKKLLLLLLMMMMMMMMNNNNNNNNOOOOOOPPPPPPPPQQQQQQQQRRRRRRRRSSSSSSTTTTTTTTUUUUUUUUVVVVVVVVWWWWWWWWWWXXXXXXXXYYYYYYYYZZZZZZZZZZ[[[[[[[[\\\\\\\\\\]]]]]]]]]]^^^^^^^^^^__________````````````aaaaaaaaaaaaaabbbbbbbbbbbbccccccccccccccccddddddddddddddddddeeeeeeeeeeeeeeeeeeeeeeeeeeffff??>>>>>>======<<<<<<<<;;;;;;::::::999999998888887777777766666655555555444444333333332222221111111100000000//////........--------,,,,,,,,++++++++********))))))))((((((((''''''''&&&&&&&&%%%%%%%%%%$$$$$$$$##########""""""""!!!!!!!!!!BBCCCCCCCCDDDDDDEEEEEEEEFFFFFFGGGGGGGGHHHHHHIIIIIIIIJJJJJJJJKKKKKKLLLLLLLLMMMMMMNNNNNNNNOOOOOOOOPPPPPPQQQQQQQQRRRRRRRRSSSSSSSSTTTTTTTTUUUUUUUUVVVVVVWWWWWWWWWWXXXXXXXXYYYYYYYYZZZZZZZZ[[[[[[[[[[\\\\\\\\]]]]]]]]]]^^^^^^^^^^__________````````````aaaaaaaaaaaabbbbbbbbbbbbccccccccccccccddddddddddddddddeeeeeeeeeeeeeeeeeeeeffffffffffffffffffffffffffff@@????????>>>>>>======<<<<<<<<;;;;;;::::::999999998888887777777766666655555555444444333333332222221111111100000000//////........--------,,,,,,,,++++++++********))))))))((((((((''''''''&&&&&&&&%%%%%%%%$$$$$$$$$$########""""""""""!!!!!!CCCCDDDDDDDDEEEEEEFFFFFFFFGGGGGGGGHHHHHHIIIIIIIIJJJJJJKKKKKKKKLLLLLLMMMMMMMMNNNNNNNNOOOOOOPPPPPPPPQQQQQQQQRRRRRRSSSSSSSSTTTTTTTTUUUUUUUUVVVVVVVVWWWWWWWWXXXXXXXXYYYYYYYYZZZZZZZZ[[[[[[[[\\\\\\\\\\]]]]]]]]]]^^^^^^^^__________````````````aaaaaaaaaabbbbbbbbbbbbccccccccccccccddddddddddddddeeeeeeeeeeeeeeeeffffffffffffffffffffffggggggggggggggggggggggggggAAAA@@@@@@??????>>>>>>>>======<<<<<<;;;;;;;;::::::9999999988888877777766666666555555444444443333332222222211111111000000////////........--------,,,,,,++++++++********))))))))((((((((((''''''''&&&&&&&&%%%%%%%%$$$$$$$$$$########""""""""""!!DDDDDDDDEEEEEEFFFFFFFFGGGGGGHHHHHHHHIIIIIIJJJJJJJJKKKKKKLLLLLLLLMMMMMMNNNNNNNNOOOOOOOOPPPPPPQQQQQQQQRRRRRRRRSSSSSSTTTTTTTTUUUUUUUUVVVVVVVVWWWWWWWWXXXXXXXXYYYYYYYYZZZZZZZZ[[[[[[[[\\\\\\\\\\]]]]]]]]^^^^^^^^^^__________``````````aaaaaaaaaabbbbbbbbbbbbccccccccccccddddddddddddeeeeeeeeeeeeeeeeffffffffffffffffgggggggggggggggggggggghhhhhhhhhhhhhhhhhhhhhhhhhhhhBBBBBBAAAAAA@@@@@@??????>>>>>>>>======<<<<<<;;;;;;;;::::::9999998888888877777766666666555555444444443333332222222211111100000000////////........------,,,,,,,,++++++++********))))))))((((((((''''''''&&&&&&&&&&%%%%%%%%$$$$$$$$##########""""""""DDEEEEEEEEFFFFFFGGGGGGGGHHHHHHIIIIIIIIJJJJJJKKKKKKKKLLLLLLLLMMMMMMNNNNNNNNOOOOOOPPPPPPPPQQQQQQRRRRRRRRSSSSSSSSTTTTTTUUUUUUUUVVVVVVVVWWWWWWWWXXXXXXXXYYYYYYYYZZZZZZZZ[[[[[[[[\\\\\\\\]]]]]]]]]]^^^^^^^^__________``````````aaaaaaaaaabbbbbbbbbbccccccccccccddddddddddddeeeeeeeeeeeeeeffffffffffffffffgggggggggggggggggghhhhhhhhhhhhhhhhhhhhhhhhiiiiiiiiiiiiiiiiiiiiiiiiCCCCCCBBBBBBAAAAAAAA@@@@@@??????>>>>>>>>======<<<<<<;;;;;;::::::::9999998888888877777766666655555555444444333333332222222211111100000000////////......--------,,,,,,,,++++++++********))))))))((((((((''''''''&&&&&&&&&&%%%%%%%%$$$$$$$$##########""""EEEEEEFFFFFFGGGGGGGGHHHHHHIIIIIIIIJJJJJJKKKKKKKKLLLLLLMMMMMMMMNNNNNNOOOOOOOOPPPPPPQQQQQQQQRRRRRRRRSSSSSSTTTTTTTTUUUUUUUUVVVVVVWWWWWWWWXXXXXXXXYYYYYYYYZZZZZZZZ[[[[[[[[\\\\\\\\]]]]]]]]]]^^^^^^^^__________````````aaaaaaaaaabbbbbbbbbbccccccccccccddddddddddddeeeeeeeeeeeeffffffffffffffgggggggggggggggghhhhhhhhhhhhhhhhhhiiiiiiiiiiiiiiiiiiiiiiiiiijjjjjjjjjjjjjjjjjjjjjjjjEEDDDDDDCCCCCCBBBBBBAAAAAAAA@@@@@@??????>>>>>>========<<<<<<;;;;;;::::::::9999998888887777777766666655555555444444333333332222221111111100000000//////........--------,,,,,,,,++++++++********))))))))((((((((''''''''&&&&&&&&%%%%%%%%%%$$$$$$$$##########EEFFFFFFGGGGGGHHHHHHHHIIIIIIJJJJJJJJKKKKKKLLLLLLLLMMMMMMNNNNNNNNOOOOOOPPPPPPPPQQQQQQRRRRRRRRSSSSSSSSTTTTTTUUUUUUUUVVVVVVVVWWWWWWWWXXXXXXYYYYYYYYZZZZZZZZ[[[[[[[[\\\\\\\\]]]]]]]]^^^^^^^^^^________``````````aaaaaaaaaabbbbbbbbbbccccccccccddddddddddeeeeeeeeeeeeffffffffffffffgggggggggggggghhhhhhhhhhhhhhhhiiiiiiiiiiiiiiiiiiiijjjjjjjjjjjjjjjjjjjjjjjjjjjjjjkkkkkkkkkkkkkkkkkkkkFFFFEEEEEEEEDDDDDDCCCCCCBBBBBBAAAAAA@@@@@@@@??????>>>>>>========<<<<<<;;;;;;::::::9999999988888877777777666666555555554444443333333322222211111111000000////////........--------,,,,,,,,++++++********))))))))((((((((((''''''''&&&&&&&&%%%%%%%%$$$$$$$$$$######FFFFGGGGGGHHHHHHHHIIIIIIJJJJJJJJKKKKKKLLLLLLLLMMMMMMNNNNNNNNOOOOOOPPPPPPPPQQQQQQRRRRRRRRSSSSSSTTTTTTTTUUUUUUVVVVVVVVWWWWWWWWXXXXXXXXYYYYYYZZZZZZZZ[[[[[[[[\\\\\\\\]]]]]]]]^^^^^^^^^^________````````aaaaaaaaaabbbbbbbbbbccccccccccddddddddddeeeeeeeeeeeeffffffffffffgggggggggggghhhhhhhhhhhhhhhhiiiiiiiiiiiiiiiijjjjjjjjjjjjjjjjjjjjjjkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkllllllllllllllGGGGGGFFFFFFEEEEEEEEDDDDDDCCCCCCBBBBBBAAAAAA@@@@@@@@??????>>>>>>======<<<<<<<<;;;;;;::::::9999999988888877777766666666555555444444443333332222222211111111000000////////........------,,,,,,,,++++++++********))))))))((((((((''''''''''&&&&&&&&%%%%%%%%$$$$$$$$$$##GGGGGGHHHHHHHHIIIIIIJJJJJJKKKKKKKKLLLLLLMMMMMMMMNNNNNNOOOOOOOOPPPPPPQQQQQQQQRRRRRRSSSSSSSSTTTTTTUUUUUUUUVVVVVVVVWWWWWWXXXXXXXXYYYYYYYYZZZZZZZZ[[[[[[\\\\\\\\]]]]]]]]^^^^^^^^^^________````````aaaaaaaaaabbbbbbbbccccccccccddddddddddeeeeeeeeeeeeffffffffffgggggggggggghhhhhhhhhhhhhhiiiiiiiiiiiiiiiijjjjjjjjjjjjjjjjkkkkkkkkkkkkkkkkkkkkkkkkllllllllllllllllllllllllllllllllllllllllllllllllllIIIIHHHHHHGGGGGGFFFFFFEEEEEEDDDDDDDDCCCCCCBBBBBBAAAAAA@@@@@@????????>>>>>>======<<<<<<;;;;;;;;::::::9999998888888877777766666666555555444444443333332222222211111100000000////////......--------,,,,,,,,++++++++********))))))))((((((((''''''''&&&&&&&&&&%%%%%%%%$$$$$$$$GGHHHHHHIIIIIIIIJJJJJJKKKKKKKKLLLLLLMMMMMMMMNNNNNNOOOOOOPPPPPPPPQQQQQQRRRRRRRRSSSSSSTTTTTTTTUUUUUUVVVVVVVVWWWWWWWWXXXXXXYYYYYYYYZZZZZZZZ[[[[[[[[\\\\\\\\]]]]]]]]^^^^^^^^________````````aaaaaaaabbbbbbbbbbccccccccccddddddddeeeeeeeeeeeeffffffffffgggggggggggghhhhhhhhhhhhiiiiiiiiiiiiiijjjjjjjjjjjjjjjjkkkkkkkkkkkkkkkkkkllllllllllllllllllllllllllmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmJJJJJJIIIIIIIIHHHHHHGGGGGGFFFFFFEEEEEEDDDDDDCCCCCCCCBBBBBBAAAAAA@@@@@@??????>>>>>>>>======<<<<<<;;;;;;;;::::::9999998888888877777766666655555555444444333333332222221111111100000000//////........--------,,,,,,,,++++++++********))))))))((((((((''''''''&&&&&&&&%%%%%%%%%%$$$$HHHHIIIIIIIIJJJJJJKKKKKKLLLLLLLLMMMMMMNNNNNNNNOOOOOOPPPPPPPPQQQQQQRRRRRRRRSSSSSSTTTTTTTTUUUUUUVVVVVVVVWWWWWWXXXXXXXXYYYYYYYYZZZZZZ[[[[[[[[\\\\\\\\]]]]]]]]^^^^^^^^________````````aaaaaaaabbbbbbbbbbccccccccddddddddddeeeeeeeeeeffffffffffgggggggggghhhhhhhhhhhhiiiiiiiiiiiiiijjjjjjjjjjjjjjkkkkkkkkkkkkkkkkllllllllllllllllllllmmmmmmmmmmmmmmmmmmmmmmmmmmmmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnLLLLKKKKKKJJJJJJIIIIIIIIHHHHHHGGGGGGFFFFFFEEEEEEDDDDDDCCCCCCBBBBBBBBAAAAAA@@@@@@??????>>>>>>========<<<<<<;;;;;;::::::::99999988888877777777666666555555554444443333333322222211111111000000////////........--------,,,,,,,,++++++********))))))))((((((((((''''''''&&&&&&&&%%%%%%%%$$IIIIIIIIJJJJJJKKKKKKLLLLLLLLMMMMMMNNNNNNOOOOOOOOPPPPPPQQQQQQQQRRRRRRSSSSSSSSTTTTTTUUUUUUUUVVVVVVWWWWWWWWXXXXXXYYYYYYYYZZZZZZZZ[[[[[[\\\\\\\\]]]]]]]]^^^^^^^^________````````aaaaaaaabbbbbbbbccccccccccddddddddeeeeeeeeeeffffffffffgggggggggghhhhhhhhhhhhiiiiiiiiiiiijjjjjjjjjjjjkkkkkkkkkkkkkkkkllllllllllllllllmmmmmmmmmmmmmmmmmmmmmmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnooooooooooooooooooooooooooooooooooooooooNNMMMMMMLLLLLLKKKKKKJJJJJJIIIIIIHHHHHHHHGGGGGGFFFFFFEEEEEEDDDDDDCCCCCCBBBBBBAAAAAAAA@@@@@@??????>>>>>>========<<<<<<;;;;;;::::::9999999988888877777766666666555555444444443333332222222211111100000000////////........------,,,,,,,,++++++++********))))))))((((((((''''''''&&&&&&&&&&%%%%%%IIJJJJJJJJKKKKKKLLLLLLLLMMMMMMNNNNNNOOOOOOOOPPPPPPQQQQQQRRRRRRRRSSSSSSTTTTTTTTUUUUUUVVVVVVVVWWWWWWXXXXXXXXYYYYYYZZZZZZZZ[[[[[[[[\\\\\\]]]]]]]]^^^^^^^^________````````aaaaaaaabbbbbbbbccccccccccddddddddeeeeeeeeeeffffffffgggggggggghhhhhhhhhhhhiiiiiiiiiijjjjjjjjjjjjkkkkkkkkkkkkkkllllllllllllllllmmmmmmmmmmmmmmmmnnnnnnnnnnnnnnnnnnnnnnnnooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOONNNNNNMMMMMMLLLLLLKKKKKKJJJJJJIIIIIIHHHHHHGGGGGGGGFFFFFFEEEEEEDDDDDDCCCCCCBBBBBBAAAAAA@@@@@@@@??????>>>>>>======<<<<<<<<;;;;;;::::::9999998888888877777766666666555555444444443333332222222211111100000000////////......--------,,,,,,,,++++++++********))))))))((((((((''''''''&&&&&&&&%%%%JJJJJJKKKKKKLLLLLLMMMMMMMMNNNNNNOOOOOOPPPPPPPPQQQQQQRRRRRRRRSSSSSSTTTTTTUUUUUUUUVVVVVVWWWWWWWWXXXXXXYYYYYYYYZZZZZZZZ[[[[[[\\\\\\\\]]]]]]]]^^^^^^________````````aaaaaaaabbbbbbbbccccccccccddddddddeeeeeeeeffffffffffgggggggggghhhhhhhhhhiiiiiiiiiijjjjjjjjjjjjkkkkkkkkkkkkllllllllllllllmmmmmmmmmmmmmmmmnnnnnnnnnnnnnnnnnnooooooooooooooooooooooooooppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppQQQQPPPPPPOOOOOOOONNNNNNMMMMMMLLLLLLKKKKKKJJJJJJIIIIIIHHHHHHGGGGGGFFFFFFFFEEEEEEDDDDDDCCCCCCBBBBBBAAAAAA@@@@@@????????>>>>>>======<<<<<<;;;;;;;;::::::9999998888888877777766666655555555444444333333332222221111111100000000//////........--------,,,,,,,,++++++++********))))))))((((((((''''''''&&&&&&&&JJKKKKKKLLLLLLMMMMMMMMNNNNNNOOOOOOPPPPPPPPQQQQQQRRRRRRSSSSSSSSTTTTTTUUUUUUUUVVVVVVWWWWWWWWXXXXXXYYYYYYYYZZZZZZ[[[[[[[[\\\\\\]]]]]]]]^^^^^^^^________``````aaaaaaaabbbbbbbbccccccccccddddddddeeeeeeeeffffffffffgggggggghhhhhhhhhhiiiiiiiiiijjjjjjjjjjjjkkkkkkkkkkkkllllllllllllmmmmmmmmmmmmmmnnnnnnnnnnnnnnnnooooooooooooooooooooppppppppppppppppppppppppppppqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqppppppppppSSSSRRRRRRQQQQQQPPPPPPOOOOOONNNNNNNNMMMMMMLLLLLLKKKKKKJJJJJJIIIIIIHHHHHHGGGGGGFFFFFFEEEEEEDDDDDDDDCCCCCCBBBBBBAAAAAA@@@@@@??????>>>>>>>>======<<<<<<;;;;;;::::::::99999988888877777777666666555555444444443333332222222211111111000000////////........------,,,,,,,,++++++++********))))))))((((((((''''''''''&&&&KKKKLLLLLLMMMMMMNNNNNNNNOOOOOOPPPPPPQQQQQQQQRRRRRRSSSSSSSSTTTTTTUUUUUUVVVVVVVVWWWWWWXXXXXXXXYYYYYYZZZZZZZZ[[[[[[\\\\\\\\]]]]]]^^^^^^^^________````````aaaaaaaabbbbbbbbccccccccddddddddeeeeeeeeffffffffgggggggggghhhhhhhhhhiiiiiiiiiijjjjjjjjjjkkkkkkkkkkllllllllllllmmmmmmmmmmmmmmnnnnnnnnnnnnnnooooooooooooooooppppppppppppppppppppppqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqUUUUUUTTTTTTSSSSSSRRRRRRQQQQQQPPPPPPOOOOOONNNNNNMMMMMMMMLLLLLLKKKKKKJJJJJJIIIIIIHHHHHHGGGGGGFFFFFFEEEEEEDDDDDDCCCCCCBBBBBBBBAAAAAA@@@@@@??????>>>>>>======<<<<<<<<;;;;;;::::::9999999988888877777766666666555555444444443333332222222211111100000000////////......--------,,,,,,,,++++++++********))))))))((((((((''''''''&&LLLLLLMMMMMMNNNNNNNNOOOOOOPPPPPPQQQQQQQQRRRRRRSSSSSSTTTTTTTTUUUUUUVVVVVVWWWWWWWWXXXXXXYYYYYYYYZZZZZZ[[[[[[[[\\\\\\]]]]]]]]^^^^^^^^______````````aaaaaaaabbbbbbbbccccccccddddddddeeeeeeeeffffffffgggggggggghhhhhhhhiiiiiiiiiijjjjjjjjjjkkkkkkkkkkllllllllllllmmmmmmmmmmmmnnnnnnnnnnnnooooooooooooooooppppppppppppppppppqqqqqqqqqqqqqqqqqqqqqqrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrqqqqqqqqqqqqqqWWWWWWVVVVVVVVUUUUUUTTTTTTSSSSSSRRRRRRQQQQQQPPPPPPOOOOOONNNNNNMMMMMMLLLLLLKKKKKKKKJJJJJJIIIIIIHHHHHHGGGGGGFFFFFFEEEEEEDDDDDDCCCCCCBBBBBBAAAAAA@@@@@@@@??????>>>>>>======<<<<<<;;;;;;;;::::::9999998888888877777766666655555555444444333333332222221111111100000000//////........--------,,,,,,,,++++++++********))))))))((((((((''''''LLMMMMMMNNNNNNNNOOOOOOPPPPPPQQQQQQQQRRRRRRSSSSSSTTTTTTTTUUUUUUVVVVVVWWWWWWWWXXXXXXYYYYYYZZZZZZZZ[[[[[[\\\\\\\\]]]]]]^^^^^^^^________``````aaaaaaaabbbbbbbbccccccccddddddddeeeeeeeeffffffffgggggggghhhhhhhhhhiiiiiiiijjjjjjjjjjkkkkkkkkkkllllllllllllmmmmmmmmmmnnnnnnnnnnnnnnooooooooooooppppppppppppppppqqqqqqqqqqqqqqqqqqrrrrrrrrrrrrrrrrrrrrrrrrrrssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssrrrrrrrrrrrrrrrrrrrrrrrrrrqqqqqqqqZZYYYYYYXXXXXXWWWWWWVVVVVVVVUUUUUUTTTTTTSSSSSSRRRRRRQQQQQQPPPPPPOOOOOONNNNNNMMMMMMLLLLLLKKKKKKJJJJJJIIIIIIHHHHHHHHGGGGGGFFFFFFEEEEEEDDDDDDCCCCCCBBBBBBAAAAAA@@@@@@??????>>>>>>>>======<<<<<<;;;;;;::::::::99999988888877777777666666555555444444443333332222222211111111000000////////........--------,,,,,,++++++++********))))))))((((((((''''MMMMNNNNNNNNOOOOOOPPPPPPQQQQQQRRRRRRRRSSSSSSTTTTTTUUUUUUUUVVVVVVWWWWWWXXXXXXXXYYYYYYZZZZZZZZ[[[[[[\\\\\\\\]]]]]]^^^^^^^^______````````aaaaaaaabbbbbbccccccccddddddddeeeeeeeeffffffffgggggggghhhhhhhhhhiiiiiiiijjjjjjjjjjkkkkkkkkkkllllllllllmmmmmmmmmmnnnnnnnnnnnnooooooooooooppppppppppppppqqqqqqqqqqqqqqqqrrrrrrrrrrrrrrrrrrrrssssssssssssssssssssssssssssssttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttssssssssssssssssssssssssssssssrrrrrrrrrrrrrrrrrrrrqqqqqqqq\\\\\\\\[[[[[[ZZZZZZYYYYYYXXXXXXWWWWWWVVVVVVVVUUUUUUTTTTTTSSSSSSRRRRRRQQQQQQPPPPPPOOOOOONNNNNNMMMMMMLLLLLLKKKKKKJJJJJJIIIIIIHHHHHHGGGGGGFFFFFFEEEEEEDDDDDDDDCCCCCCBBBBBBAAAAAA@@@@@@??????>>>>>>========<<<<<<;;;;;;::::::9999999988888877777766666666555555444444443333332222222211111100000000////////......--------,,,,,,,,++++++++********))))))))((((((((NNNNNNOOOOOOOOPPPPPPQQQQQQRRRRRRRRSSSSSSTTTTTTUUUUUUUUVVVVVVWWWWWWXXXXXXXXYYYYYYZZZZZZ[[[[[[[[\\\\\\]]]]]]]]^^^^^^________``````aaaaaaaabbbbbbbbccccccddddddddeeeeeeeeffffffffgggggggghhhhhhhhhhiiiiiiiijjjjjjjjkkkkkkkkkkllllllllllmmmmmmmmmmnnnnnnnnnnnnooooooooooooppppppppppppqqqqqqqqqqqqqqrrrrrrrrrrrrrrrrrrssssssssssssssssssssttttttttttttttttttttttttttttttttttttttttuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuttttttttttttttttttttttttttttttttttttttssssssssssssssssssssrrrrrrrrrrrrrrrrqqqqqqqqqqqqqq______^^^^^^]]]]]]\\\\\\\\[[[[[[ZZZZZZYYYYYYXXXXXXWWWWWWVVVVVVVVUUUUUUTTTTTTSSSSSSRRRRRRQQQQQQPPPPPPOOOOOONNNNNNMMMMMMLLLLLLKKKKKKJJJJJJIIIIIIHHHHHHGGGGGGFFFFFFEEEEEEDDDDDDCCCCCCBBBBBBAAAAAAAA@@@@@@??????>>>>>>======<<<<<<;;;;;;;;::::::9999998888888877777766666655555555444444333333332222221111111100000000//////........--------,,,,,,,,++++++++********))))))))((((NNOOOOOOOOPPPPPPQQQQQQRRRRRRRRSSSSSSTTTTTTUUUUUUVVVVVVVVWWWWWWXXXXXXYYYYYYYYZZZZZZ[[[[[[\\\\\\\\]]]]]]^^^^^^^^______````````aaaaaabbbbbbbbccccccccddddddddeeeeeeffffffffgggggggghhhhhhhhhhiiiiiiiijjjjjjjjkkkkkkkkkkllllllllllmmmmmmmmnnnnnnnnnnnnooooooooooppppppppppppqqqqqqqqqqqqqqrrrrrrrrrrrrrrssssssssssssssssssttttttttttttttttttttttttuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuttttttttttttttttttttttttssssssssssssssssrrrrrrrrrrrrrrrrqqqqqqqqqqqqppppppppppccccccbbbbbbaaaaaa````````______^^^^^^]]]]]]]]\\\\\\[[[[[[ZZZZZZYYYYYYXXXXXXWWWWWWVVVVVVUUUUUUUUTTTTTTSSSSSSRRRRRRQQQQQQPPPPPPOOOOOONNNNNNMMMMMMLLLLLLKKKKKKJJJJJJIIIIIIHHHHHHGGGGGGFFFFFFEEEEEEDDDDDDCCCCCCBBBBBBAAAAAA@@@@@@????????>>>>>>======<<<<<<;;;;;;::::::::99999988888877777777666666555555444444443333332222222211111111000000////////........------,,,,,,,,++++++++********))))))))((OOOOOOPPPPPPQQQQQQRRRRRRSSSSSSSSTTTTTTUUUUUUVVVVVVVVWWWWWWXXXXXXYYYYYYZZZZZZZZ[[[[[[\\\\\\\\]]]]]]^^^^^^________``````aaaaaaaabbbbbbbbccccccddddddddeeeeeeeeffffffffgggggggghhhhhhhhiiiiiiiijjjjjjjjkkkkkkkkkkllllllllmmmmmmmmmmnnnnnnnnnnooooooooooppppppppppppqqqqqqqqqqqqrrrrrrrrrrrrrrssssssssssssssssttttttttttttttttttuuuuuuuuuuuuuuuuuuuuuuuuuuvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvuuuuuuuuuuuuuuuuuuuuuuuuuuttttttttttttttttttssssssssssssssssrrrrrrrrrrrrqqqqqqqqqqqqppppppppppppoooooooooonnnnnnnnnnmmmmmmmmlliiiihhhhhhhhggggggggffffffeeeeeeeeddddddccccccccbbbbbbaaaaaaaa``````______^^^^^^]]]]]]]]\\\\\\[[[[[[ZZZZZZYYYYYYXXXXXXWWWWWWVVVVVVUUUUUUTTTTTTSSSSSSRRRRRRQQQQQQPPPPPPOOOOOONNNNNNMMMMMMLLLLLLKKKKKKJJJJJJIIIIIIIIHHHHHHGGGGGGFFFFFFEEEEEEDDDDDDCCCCCCBBBBBBAAAAAA@@@@@@??????>>>>>>========<<<<<<;;;;;;::::::9999999988888877777766666666555555444444443333332222222211111100000000////////......--------,,,,,,,,++++++++********))))))OOPPPPPPQQQQQQRRRRRRSSSSSSSSTTTTTTUUUUUUVVVVVVWWWWWWWWXXXXXXYYYYYYZZZZZZZZ[[[[[[\\\\\\]]]]]]]]^^^^^^________``````aaaaaaaabbbbbbccccccccddddddeeeeeeeeffffffffgggggggghhhhhhhhiiiiiiiijjjjjjjjkkkkkkkkllllllllllmmmmmmmmnnnnnnnnnnooooooooooppppppppppppqqqqqqqqqqqqrrrrrrrrrrrrssssssssssssssttttttttttttttttuuuuuuuuuuuuuuuuuuuuvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvuuuuuuuuuuuuuuuuuuuuttttttttttttttttssssssssssssrrrrrrrrrrrrrrqqqqqqqqqqppppppppppoooooooooonnnnnnnnnnmmmmmmmmllllllllllkkkkkkkkjjjjjjjjiiiiiiiihhhhhhggggggggffffffffeeeeeeddddddddccccccbbbbbbbbaaaaaa``````______^^^^^^^^]]]]]]\\\\\\[[[[[[ZZZZZZYYYYYYXXXXXXWWWWWWVVVVVVUUUUUUTTTTTTSSSSSSRRRRRRQQQQQQPPPPPPOOOOOONNNNNNMMMMMMLLLLLLKKKKKKJJJJJJIIIIIIHHHHHHGGGGGGFFFFFFEEEEEEDDDDDDCCCCCCBBBBBBBBAAAAAA@@@@@@??????>>>>>>======<<<<<<;;;;;;;;::::::99999988888888777777666666555555554444443333333322222211111111000000////////........--------,,,,,,,,++++++++********))PPPPQQQQQQRRRRRRSSSSSSSSTTTTTTUUUUUUVVVVVVWWWWWWWWXXXXXXYYYYYYZZZZZZ[[[[[[[[\\\\\\]]]]]]^^^^^^^^______````````aaaaaabbbbbbbbccccccddddddddeeeeeeeeffffffgggggggghhhhhhhhiiiiiiiijjjjjjjjkkkkkkkkllllllllllmmmmmmmmnnnnnnnnnnooooooooooppppppppppqqqqqqqqqqrrrrrrrrrrrrssssssssssssssttttttttttttttuuuuuuuuuuuuuuuuuuvvvvvvvvvvvvvvvvvvvvwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwxxxxxxxxxxxxxxxxwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwvvvvvvvvvvvvvvvvvvvvvvuuuuuuuuuuuuuuuuttttttttttttttttssssssssssssrrrrrrrrrrrrqqqqqqqqqqppppppppppoooooooooonnnnnnnnmmmmmmmmllllllllllkkkkkkkkjjjjjjiiiiiiiihhhhhhhhggggggggffffffeeeeeeeeddddddccccccbbbbbbbbaaaaaa``````______^^^^^^^^]]]]]]\\\\\\[[[[[[ZZZZZZYYYYYYXXXXXXWWWWWWVVVVVVUUUUUUTTTTTTSSSSSSRRRRRRQQQQQQPPPPPPOOOOOONNNNNNMMMMMMLLLLLLKKKKKKJJJJJJIIIIIIHHHHHHGGGGGGFFFFFFEEEEEEDDDDDDCCCCCCBBBBBBAAAAAA@@@@@@????????>>>>>>======<<<<<<;;;;;;::::::::99999988888877777777666666555555444444443333332222222211111100000000////////........------,,,,,,,,++++++++********QQQQQQRRRRRRSSSSSSSSTTTTTTUUUUUUVVVVVVWWWWWWXXXXXXXXYYYYYYZZZZZZ[[[[[[[[\\\\\\]]]]]]^^^^^^^^______``````aaaaaaaabbbbbbccccccccddddddeeeeeeeeffffffffgggggggghhhhhhiiiiiiiijjjjjjjjkkkkkkkkllllllllllmmmmmmmmnnnnnnnnnnooooooooppppppppppqqqqqqqqqqrrrrrrrrrrrrssssssssssssttttttttttttttuuuuuuuuuuuuuuvvvvvvvvvvvvvvvvvvwwwwwwwwwwwwwwwwwwwwwwwwxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxwwwwwwwwwwwwwwwwwwwwwwwwvvvvvvvvvvvvvvvvvvuuuuuuuuuuuuuuuuttttttttttttssssssssssssrrrrrrrrrrqqqqqqqqqqppppppppppoooooooooonnnnnnnnmmmmmmmmllllllllkkkkkkkkjjjjjjjjiiiiiiiihhhhhhggggggggffffffeeeeeeeeddddddccccccccbbbbbbaaaaaa``````______^^^^^^^^]]]]]]\\\\\\[[[[[[ZZZZZZYYYYYYXXXXXXWWWWWWVVVVVVUUUUUUTTTTTTSSSSSSRRRRRRQQQQQQPPPPPPOOOOOONNNNNNMMMMMMLLLLLLKKKKKKJJJJJJIIIIIIHHHHHHGGGGGGFFFFFFEEEEEEDDDDDDCCCCCCBBBBBBAAAAAA@@@@@@??????>>>>>>========<<<<<<;;;;;;::::::9999998888888877777766666666555555444444333333332222221111111100000000//////........--------,,,,,,,,++++++++****QQRRRRRRSSSSSSSSTTTTTTUUUUUUVVVVVVWWWWWWXXXXXXXXYYYYYYZZZZZZ[[[[[[\\\\\\\\]]]]]]^^^^^^________``````aaaaaabbbbbbbbccccccddddddddeeeeeeeeffffffgggggggghhhhhhhhiiiiiiiijjjjjjkkkkkkkkllllllllllmmmmmmmmnnnnnnnnooooooooooppppppppppqqqqqqqqqqrrrrrrrrrrssssssssssssttttttttttttuuuuuuuuuuuuuuvvvvvvvvvvvvvvvvwwwwwwwwwwwwwwwwwwxxxxxxxxxxxxxxxxxxxxxxxxxxxxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxxxxxxxxxxxxxxxxxxxxxxxxxxwwwwwwwwwwwwwwwwwwwwvvvvvvvvvvvvvvvvuuuuuuuuuuuuttttttttttttssssssssssssrrrrrrrrrrqqqqqqqqqqppppppppoooooooooonnnnnnnnmmmmmmmmllllllllkkkkkkkkjjjjjjjjiiiiiihhhhhhhhggggggffffffffeeeeeeddddddccccccccbbbbbbaaaaaa``````________^^^^^^]]]]]]\\\\\\[[[[[[ZZZZZZYYYYYYXXXXXXWWWWWWVVVVVVUUUUUUTTTTTTSSSSSSRRRRRRQQQQQQPPPPPPOOOOOONNNNMMMMMMLLLLLLKKKKKKJJJJJJIIIIIIHHHHHHGGGGGGFFFFFFEEEEEEDDDDDDCCCCCCBBBBBBAAAAAAAA@@@@@@??????>>>>>>======<<<<<<;;;;;;;;::::::99999988888877777777666666555555554444443333333322222211111111000000////////........--------,,,,,,++++++++**RRRRSSSSSSSSTTTTTTUUUUUUVVVVVVWWWWWWXXXXXXXXYYYYYYZZZZZZ[[[[[[\\\\\\\\]]]]]]^^^^^^______````````aaaaaabbbbbbbbccccccddddddddeeeeeeffffffffgggggghhhhhhhhiiiiiiiijjjjjjjjkkkkkkkkllllllllmmmmmmmmnnnnnnnnooooooooooppppppppqqqqqqqqqqrrrrrrrrrrssssssssssssttttttttttuuuuuuuuuuuuuuvvvvvvvvvvvvvvwwwwwwwwwwwwwwwwxxxxxxxxxxxxxxxxxxxxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxxxxxxxxxxxxxxxxxxxxwwwwwwwwwwwwwwwwvvvvvvvvvvvvvvuuuuuuuuuuuuuuttttttttttssssssssssrrrrrrrrrrqqqqqqqqqqppppppppoooooooooonnnnnnnnmmmmmmmmllllllllkkkkkkjjjjjjjjiiiiiiiihhhhhhggggggggffffffeeeeeeddddddddccccccbbbbbbaaaaaa``````________^^^^^^]]]]]]\\\\\\[[[[[[ZZZZZZYYYYYYXXXXXXWWWWWWVVVVVVUUUUUUTTTTTTSSSSSSRRRRQQQQQQPPPPPPOOOOOONNNNNNMMMMMMLLLLLLKKKKKKJJJJJJIIIIIIHHHHHHGGGGGGFFFFFFEEEEEEDDDDDDCCCCCCBBBBBBAAAAAA@@@@@@??????>>>>>>>>======<<<<<<;;;;;;::::::9999999988888877777766666666555555444444443333332222222211111100000000////////......--------,,,,,,,,++++++SSSSSSSSTTTTTTUUUUUUVVVVVVWWWWWWXXXXXXXXYYYYYYZZZZZZ[[[[[[\\\\\\]]]]]]]]^^^^^^______````````aaaaaabbbbbbccccccccddddddeeeeeeeeffffffgggggggghhhhhhhhiiiiiijjjjjjjjkkkkkkkkllllllllmmmmmmmmnnnnnnnnooooooooooppppppppqqqqqqqqqqrrrrrrrrrrssssssssssttttttttttuuuuuuuuuuuuvvvvvvvvvvvvvvwwwwwwwwwwwwwwxxxxxxxxxxxxxxxxxxyyyyyyyyyyyyyyyyyyyyyyzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzyyyyyyyyyyyyyyyyyyyyyyxxxxxxxxxxxxxxxxwwwwwwwwwwwwwwvvvvvvvvvvvvvvuuuuuuuuuuuuttttttttttssssssssssrrrrrrrrrrqqqqqqqqppppppppoooooooonnnnnnnnnnmmmmmmllllllllkkkkkkkkjjjjjjiiiiiiiihhhhhhggggggggffffffeeeeeeeeddddddccccccbbbbbbaaaaaa``````________^^^^^^]]]]]]\\\\\\[[[[[[ZZZZZZYYYYYYXXXXXXWWWWWWVVVVUUUUUUTTTTTTSSSSSSRRRRRRQQQQQQPPPPPPOOOOOONNNNNNMMMMMMLLLLLLKKKKKKJJJJJJIIIIIIHHHHHHGGGGGGFFFFFFEEEEEEDDDDDDCCCCCCBBBBBBAAAAAA@@@@@@??????>>>>>>======<<<<<<<<;;;;;;::::::9999998888888877777766666655555555444444333333332222221111111100000000//////........--------,,,,,,,,++ \ No newline at end of file diff --git a/assets/test_scene3B_aa.ppm b/assets/test_scene3B_aa.ppm new file mode 100644 index 0000000..6648f7c --- /dev/null +++ b/assets/test_scene3B_aa.ppm @@ -0,0 +1,1905 @@ +P6 +500 500 +255 + + +  + +  + +  + +  + + !!$$%%&&''''&&%%##!!  ""''++//22558899::9988663300,,(($$   + +  &&,,2288>>CCHHKKNNOOPPOOMMJJFFBB==7711++&&   &&--55==EEMMTTZZ``ddggiiiihheeaa\\VVOOHH@@9911**$$ + + + + ##++44==FFPPZZccllttzz~~yyrrkkbbYYPPFF==55--%%  + +&&..88BBNNYYeepp{{uujj__TTJJ??66--%%  + +''00::EERR__llyy{{nnaaUUII>>44++$$ + + &&//::FFSSaaoo~~{{mm__RRFF;;11((   $$--77CCPP__nn~~vvggYYLL@@55,,$$ + + + + ))33??KKZZiiyy||mm^^QQDD99//&&  $$--88DDRRaaqqppaaSSFF;;11((   + +''11<>KKYYhhxxooaaSSFF;;11((   ""**44??LLYYhhxxzzkk]]PPDD99//''  ""**44??KKXXffttttffXXLLAA66--%%  !!))22==HHTTaaoo}}yykk^^RRGG<<33**##   ''0099DDOO[[hhtt{{nnbbVVKKAA77..''  + + %%--55??IITT__kkvvyynnccXXNNDD::22**##  ""))0099BBLLVV``jjtt}}}}ttkkaaXXNNEE<<44,,%% + + + + %%++33;;CCLLUU]]ffnnuu{{{{ttmmee]]UULLDD<<44--&&    &&--44;;BBJJQQXX__eekkoorruuvvvvttrrnniidd^^WWPPIIAA::33--''!! + + + + !!'',,3399??FFLLQQVV[[__aaccddddcc``]]YYUUOOJJDD>>7711,,&&!!  !!&&++0055;;@@DDIILLOORRSSTTSSRRPPNNKKGGBB==9933..))$$    $$((--115599<<;?EJPTY]aeilpsvy|~vl_N=;99>DJOTX\`dhkorux{~ypdR<:878>DINSW[_cgjnqtwz}|shXH97547>CINRVZ^bfilpsvy|~~vl^M74327=CHMQUZ]aehkoruxz} + + + + + + + + + + + + yocR542007=BGLPTX\`dgjmqtvy| + +  + + + + {rgUE31/.06<AFKOSW[_bfilorux{} + +  + + }uj[J0.-+/5;@EJNRVZ^aehknqtwz| + +  + + wm`O.,*).5:@DIMQUY]`cgjmpsvx{~  + +zpdS+)((.49?CHLPTX[_beiloqtwz| + +  !!!!!!!!  + + |sgUv('%'-38>BGKOSWZ^adgjmpsvx{} + + !!##%%&&''((((((((''&&$$##!! ~uj[ Y&$#&,27<AFJNRUY\`cfilortwy| + +  ##%%((**,,..//000000////--,,**''%%"" wm_b;#"!%+16;@DIMPTX[^aehkmpsvx{} + +  ##&&)),,//224466778899998877664411//,,))%%"" yobA1!$*05:?CGKOSVZ]`cfiloqtwy|~ + + !!%%))--004477::==??AABBCCCCBBAA??==::774400,,(($$  {rf"C#)/49>BFJNQUX\_behkmpsuxz} + + ##''++//4488<<@@DDGGIIKKMMMMMMMMKKIIGGDD@@<<8833//**&&!! + +}thT"(.38<AEILPTWZ]`cfiloqtvy{~ ##((--2277<>DDJJOOTTYY]]``cceeffffeeccaa]]YYUUOOJJDD>>8822--''"" wm^{W  &+05:>BFJMQTWZ^`cfilnqsvx{} + + ""((--3399@@FFMMSSYY__ddiimmpprrssssrrppmmjjee``ZZTTMMGG@@9933,,''!! yoa`'?%*/48=ADHLOSVY\_begjmortwy{~ !!'',,3399@@GGOOVV]]ddjjppuuzz}}~~{{vvqqllee^^WWOOHH@@9922,,&&  + +zpdF4'#).27;?CGJNQTW[]`cfiknpsuxz|~ + + %%++1188@@GGOOWW__ggoovv||~~xxppiiaaXXPPHH@@8811**$$ |rf+A"',15:>BEILPSVY\_bdgjloqtvx{} ##))//66>>FFNNWW``iiqqzz||ttkkbbXXOOFF>>66//((!! }thN!&+048<@DGKNQTWZ]`cfhkmpruwz} + +  &&,,33;;CCLLUU__hhrr||~~uukkaaWWMMDD;;33,,%% + +~uiX $).27;>BFILPSVY\^adgjmpruxz} + + ##))0088@@IIRR\\ffqq{{~~ttii^^TTJJ@@88//((!! vk[ + + #(,159=ADGKNQTX[^adgjmpsux{} %%,,33<BFJNQUX[_behknpsvx{~ + + ##**1199CCMMWWccnn{{rrffZZNNDD::11))"" yoa}!b #(-26;?CGJNQUX\_behknqsvy{~ + + %%++33<>HHSS^^kkww||nnaaUUJJ??55--%% zpc`.L $).27;?CGKNRUY\_behknqtvy|~  ''..77@@JJUUaammzzrrddXXLLAA77..&& + +{qdQ5B $).37;?CGKORUY\_behknqtvy|~ !!((//88AAKKWWccoo}}ttffYYMMBB88//''  + +{reI9: $).37;@CGKORVY\_bfhknqtwy|~ !!((0088BBLLWWccpp~~uuggZZNNCC9900((  + +|reA<2 $).37<@DGKORVY\_cfiknqtwy|~ !!((0088BBLLWWddpp~~uuhh[[NNCC9900((!! + +|rf9@/ %*.37<@DGKORVY\_cfilnqtwy|~ !!((//88AALLWWccpp}}uuggZZNNCC9900''  + +|sf4B, %*.37<@DHKORVY\`cfilnqtwy|~ !!''//77@@JJUUaann{{sseeYYMMBB88//''  + +|sf1D+ %*.37<@DHKORVY\`cfilnqtwy|~  &&--66??IISS__kkxx~~ppccWWKK@@66..&& + +|sg0D, %*.37<@DGKORVY\_cfiknqtwy|~ %%,,44==FFQQ\\hhttzzmm``TTII>>55,,%% |sf1D/ %*.37<@DGKORVY\_cfiknqtwy|~ + + ##**22::CCMMXXddpp||uuhh\\PPFF<<33**## |sf3C5 $).37;@DGKORVY\_behknqtvy|~ + + ""((//77@@JJTT__jjvv{{ooccWWLLBB9900((!! |rf9A: $).37;?CGKORUY\_behknqtvy|~  &&--44==FFOOZZddoo{{ttii]]RRHH>>55--&& + +{reD=F $).37;?CGKNRUY\_behknqsvy{~ ##**1199AAJJTT^^hhss}}xxmmbbWWMMCC::22**## + +{qeJ;Q $).27;?CGKNRUX\_behknqsvy{~ + + !!''--55==EENNWWaakktt~~yyooee[[QQGG>>66..''!! {qdY6^ $)-26;?CGJNQUX[_behknpsvx{~ $$**0088??HHPPYYbbkktt}}xxooff]]SSJJAA9911**$$ + +zpcf1o #(-26:?CFJNQUX[^behjmpsvx{} + + !!&&,,33::AAIIQQZZbbjjrryy}}uunnee]]TTLLDD<<44--&&!! yobv+ #(-16:>BFJMQTX[^adgjmpsux{} ""((..44;;BBJJQQYY``ggnnttyy~~||vvqqjjcc\\TTLLDD==66//((## yna% +"(,15:>BFIMQTW[^adgjmpruxz} + + $$))//55<AEIMPTWZ^adgjmoruwz}  %%**//55;;AAGGMMRRXX\\aaddggiijjkkjjhhffbb^^ZZTTOOIICC<<6600**%%  + +wl] !'+059=AEILPSWZ]`cfilortwz| + +  %%**//4499>>DDIIMMRRUUXX[[]]^^^^]]\\ZZWWSSOOJJEE@@;;5500**%%  ~vk[!&+048=AEHLOSVZ]`cfiloqtwy|~  $$))--2277;;??DDGGKKMMPPQQRRRRRRPPNNLLIIEEAA<<8833..))%%  + +}uiY %*/48<@DHKOSVY\`cfiknqtvy|~  ##''++//3377;;>>AACCEEFFGGGGGGEEDDAA??<<884400,,(($$  + +|sh +R(  %*/37<@DGKORUY\_behknqsvy{~ ""%%)),,//225588::;;<<======<<::88663300--))&&"" {rf'GK $).27;?CGJNRUX[_behkmpsvx{}  ##&&((++--//112233444444331100..++))&&##  zpdL:p #(-26:>BFJNQTX[^adgjmpruxz}  ""$$&&(())++++,,,,++++**((&&$$""  xnan. #(,16:>BFIMPTWZ^adgjloruwz|  !!##$$$$%%%%$$$$##!!  + + wm_  "',059=AEILPSWZ]`cfiloqtwy|~ + +  + +~uj[!&+048<@DHLOSVY\`cfiknqtvy{~ + +  + + |shW %*/38<@DGKORUY\_behknpsvx{} + +  + +zqfKL $).27;?CGJNQUX[^adgjmpruxz} + +  + + + + yocJ: #(-16:>BFJMQTW[^adgjlortwz| + + + + + + wm_}( +"',159=AEILPSWZ]`cfilnqtvy|~ + + + + + + + + + + + + + + }tj[!&+048<@DHLORVY\_behknqsvx{}{rgV* %*/37;?CGKNRUX[_begjmpsuxz}ypd(Fc $)-26:?BFJMQTW[^adgjlortwz|wm`c1 "(,159>AEILPSWZ]`cfilnqtvy{~|tj\ !&+048<@DHLORVY\_behknpsvx{}zqgV + %*/37;?CGKNQUX[^adgjmoruwz|xoc*Eo $)-26:>BFJMPTWZ]`cfiloqtvy{~}uk^o- +"',059=AEHLOSVY\_behknpsvx{}{rhY !&+/48<@DGKNRUX[^adgjmpruwz|xod OS $).27;?BFJMQTWZ]`cfiloqtvy{~}ul_T6 #(,159=AEILPSVY\_behknpsuxz}zrhZ !&+/48<@DGKNRUX[^adgjmoruwz|~wodQO $).27;?BFJMQTWZ]`cfilnqtvy{}|tk_N7 #(,159=AEHLOSVY\_behkmpsuxz|yqgY !&+/48<@DGKNQUX[^adgiloqtwy{~}vmb N` $).26:>BFIMPSWZ]`cfhknpsuxz}zri]`1 "',059=ADHKORUY\_bdgjmortwy|~~woeV& %*/37;?CGJNQTWZ]`cfiknqsvx{}{tk_'C  #(-16:>AEILOSVY\_behjmpruwy|~xpfY#  !&+048<@DGKNQUX[^acfilnqsvx{}{tla N + + + + + + + + + + + + +b$).26:>BFIMPSVY\_behjmpruwz|~xpg[c0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + "',049<@DHKNRUX[^adfilnqsvx{}{tlbS + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + D %*.37;?BFIMPSVZ]_behjmpruwy|~~xph\E9 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +  #(,159=ADHKORUX[^adfilnqsvx{}{tlbT + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 4 %*/37;?BFJMPSWZ]_behjmprtwy|~~wpg\5> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +  #(,159=ADHKORUX[^adfilnqsvxz}ztlbT + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -  %*/37;?BFJMPSVY\_begjmortwy{}}wog\,@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +  #(,159=ADHKNRUX[^`cfiknpsuwz|~yskaS + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3  %*/37;?BFIMPSVY\_bdgjloqtvx{}|uneZ4=  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +  + + #(,159=@DGKNQTWZ]`cfhkmpruwy{~~xqi`R  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + F %*.37;>BEILOSVY\^adgilnqsuxz|~ztldXG7  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +   "',048<@CGJNQTWZ]_behjmortvx{}|vog]N + + + + + + + + + + + +  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + h %).26:>AEHLORUX[^acfhkmpruwy{~~xrjaVf. + + + + + + + + + + + + + + + + + + + + + + + +  + + + + + + + + + + + + + + + + + + + + + + + + + + + +  "'+048<?CFJMPSVY\_adgilnqsuxz|~ztme[G + + + + + + + + + + + + + + + + + + + + + + + + + + + + +  + + + + + + + + + + + + + + + + + + + + + + + + + + + +  + +$(-159=ADHKNQTWZ]`behjmoqtvxz}{voh_R" + + + + + + + + + + + + + + + + + + + + + + + + + + + +  + + + + + + + + + + + + + + + + + + + + + + + + + + + + 8 +!&*/37;>BEILORUX[^acfhkmprtwy{}}wqjbW5; + + + + + + + + + + + + + + + + + + + + + + + + + + + +  + + + + + + + + + + + + + + + + + + + + + + + + + + + +  #',048<@CGJMPSVY\_adgilnpsuwy|~~ysle[K + + + + + + + + + + + + + + + + + + + + + + + + + + + + +  + + + + + + + + + + + + + + + + + + + + + + + + + + y  $)-26:=ADHKNQTWZ]_begjloqsuxz|~ztng^Rx* + + + + + + + + + + + + + + + + + + + + + + + + + +  + + + + + + + + + + + + + + + + + + + + + + + + + + ) +!&+/37;>BEILORUX[^`cehjmoqtvxz|~{vpiaV(>  + + + + + + + + + + + + + + + + + + + + + + + + + +  + + + + + + + + + + + + + + + + + + + + + + + + + +  #(,048<@CFJMPSVY\^acfhkmprtvx{}|wqkcYJ  + + + + + + + + + + + + + + + + + + + + + + + +  + + + + + + + + + + + + + + + + + + + + | + + %)-269=ADGKNQTWY\_adgiknpruwy{}}xrle\P{) + + + + + + + + + + + + + + + + + + + + + + + + + +  + + + + + + + + + + 5 +!&*/37:>BEHKORTWZ]_begilnpsuwy{}}xsmf^T5: + + + + + + + + + + + + + + + + + + + + + + + +    #',048;?BFILORUX[]`begjlnqsuwy{}~ytnh`V E  + + + + + + + + + + + + + + + + + + + + + + + +  $(-159<@CGJMPSVX[^`cehjloqsuwy{}~ytoiaXL +! + + + + + + + + + + + + + + + + + + + + + + + +  i + +  %*.26:=ADGJMPSVY\^acfhjmoqsuxz|~~zupjcZOg- + + + + + + + + + + + + + + + + + + + + + + + +  5 !&+/37:>AEHKNQTWY\_adfhkmoqsvxz|~~zupjd\Q69 + + + + + + + + + + + + + + + + + + + + + + + +   #'+047;?BEHKNQTWZ\_adfikmoqtvxz|}~zupkd]SA + + + + + + + + + + + + + + + + + + + + + + + +  #(,048<?BFILORUWZ]_bdfikmoqtvxz{}~zupke]TF + + + + + + + + + + + + + + + + + + + + + + + +    $)-159<@CFILORUWZ]_bdfikmoqsuwy{}}yupke^UI # + + + + + + + + + + + + + + + + + + + + + + + +  t  + %).259=@CFJLORUXZ]_bdfikmoqsuwy{}}yupke^VKs + + + + + + + + + + + + + + + + + + + + + + + + + T  !&*.269=@DGJMPRUXZ]_bdfikmoqsuwy{}~|ytpke_WLT1 + + + + + + + + + + + + + + + + + + + + + + = "&*/26:=ADGJMPRUXZ]_bdfhkmoqsuwyz|~|xtoje^WM>5 + + + + + + + + + + + + + + + + + + + + + + + + 0 "'+/36:=ADGJMPRUXZ]_adfhjmoqsuvxz|~~{wsojd^WM/8 + + + + + + + + + + + + + + + + + + + + + + % "'+/37:>ADGJMPRUXZ]_adfhjlnprtvxz{}}zvrnid^VM&: + + + + + + + + + + + + + + + + + + + + + + + +  !#'+/37:>ADGJMPRUWZ\_acehjlnprtvwy{}~|yuqmhc]VM9 + + + + + + + + + + + + + + + + + + + + + +  !!!!!!!!!!!!!!!!!!!!!!!!#'+/37:=ADGJMORUWZ\^acegikmoqsuwyz|~~{xtplhb\UL 7Yk + + + + + + + + + + + + + + + + + + + + + + + + + +  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!""""""""""""""""#'+/37:=ADGILORTWY\^`begikmoqstvxz{}~}zwsokfa[TK 7Ygggggg~  + + + + + + + + + + + + + + + + + + + + + +  !!!!!!!!!!!!!!!!!!!!!!!!!!!!""""""""""""""""""""""""""""""""""""########%#'+/36:=@CFILOQTVY[]`bdfhjlnprtuwyz|~~{xurnje`ZSJ4[ggggggggggg|  + + + + + + + + + + + + + + + + + + + + + + + +  !!!!!!!!!!!!!!!!!!!!!!!!""""""""""""""""""""""""""""######################################## .#'+/369=@CFILNQSVX[]_acfhjkmoqsuvxz{}~}zwtplhd_YRH1_hhhhhhhhhhhhhhhj  + + + + + + + + + + + + + + + + + + + + + + + +  !!!!!!!!!!!!!!!!!!!!!!""""""""""""""""""""""""##############################$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$""<"'+.269<?BEHKNPSUXZ\^acegikmnprtuwyz|}~{xurokgb]WPF,ahhhhhhhhhhhhhhhhhhhhs + + + + + + + + + + + + + + + + + + + + + +  !!!!!!!!!!!!!!!!!!!!""""""""""""""""""""""########################$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$%%%%%%%%%%%%%%%%%%%%%%%%%%$$E + + "&*.259<?BEHJMPRUWY\^`bdfhjlnoqstvxy{|~~|ywtpmie`[UND!&eiiiiiiiiiiiiiiiiiiiiiiiil  + + + + + + + + + + + + + + + + + + + + + +  !!!!!!!!!!!!!!!!!!""""""""""""""""""""######################$$$$$$$$$$$$$$$$$$$$$$$$$$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%&&&&&&&&&&&&&&$$R   !%)-158;>ADGJLOQTVX[]_acegikmnprsuwxz{|~|zwurokgc_YSLA/hiiiiiiiiiiiiiiiiiiiiiiiiiiiij  + + + + + + + + + + + + + + + + + + + + + + + +  !!!!!!!!!!!!!!!!""""""""""""""""""####################$$$$$$$$$$$$$$$$$$$$$$$$%%%%%%%%%%%%%%%%%%%%%%%%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&p$  %)-047:=@CFILNQSUXZ\^`bdfhjlmoqrtuwxz{}~}zxuspmiea\WQI=?jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj  + + + + + + + + + + + + + + + + + + + + + + + +  !!!!!!!!!!!!!!!!""""""""""""""""""##################$$$$$$$$$$$$$$$$$$$$%%%%%%%%%%%%%%%%%%%%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&''''''''''''''''''''''''''%%C +$(,/36:=@BEHKMPRTWY[]_acegijlnoqstvwyz{}~}zxvsqnjgc_ZUNF6O jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjm + + + + + + + + + + + + + + + + + + + + + + + +  !!!!!!!!!!!!!!!!""""""""""""""""##################$$$$$$$$$$$$$$$$$$%%%%%%%%%%%%%%%%%%%%%%&&&&&&&&&&&&&&&&&&&&&&''''''''''''''''''''''''''''''((((((((((((((##( #'+.259<?BDGJLOQSVXZ\^`bdfgikmnpqstvwxz{|~~|zxvtqnkhea\XRKC,^kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkt  + + + + + + + + + + + + + + + + + + + + + +  !!!!!!!!!!!!!!!!""""""""""""""##################$$$$$$$$$$$$$$$$%%%%%%%%%%%%%%%%%%%%&&&&&&&&&&&&&&&&&&&&''''''''''''''''''''''''(((((((((((((((((((((((((((((((())!!i +"&*-147;>@CFHKMPRTWY[]_acdfhjkmnpqstvwxz{|}~}|zxvtqolifb^ZUOH>* hkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk + + + + + + + + + + + + + + + + + + + + + +  !!!!!!!!!!!!!!""""""""""""""""################$$$$$$$$$$$$$$$$%%%%%%%%%%%%%%%%%%&&&&&&&&&&&&&&&&&&''''''''''''''''''''''(((((((((((((((((((((((()))))))))))))))))))))))) \   $(,0369<?BEGJLOQSUWY[]_acefhjkmnpqstuwxyz{}~~}{ywusqolifc_[WRLD7Ellllllllllllllllllllllllllllllllllllllllllllllllls  + + + + + + + + + + + + + + + + + + + + + +  !!!!!!!!!!!!!!""""""""""""""################$$$$$$$$$$$$$$$$%%%%%%%%%%%%%%%%&&&&&&&&&&&&&&&&&&''''''''''''''''''(((((((((((((((((((((())))))))))))))))))))))))))**************"" fX3 +#'+.258;>ACFHKMORTVXZ\^`aceghjkmnpqrtuvwxz{|}~~}{zxwusqnlifc`\XTNH?*\lllllllllllllllllllllllllllllllllllllllllllllllllllll + + + + + + + + + + + + + + + + + + + + + +  !!!!!!!!!!!!!!""""""""""""""################$$$$$$$$$$$$$$%%%%%%%%%%%%%%%%&&&&&&&&&&&&&&&&''''''''''''''''''(((((((((((((((((((())))))))))))))))))))))**************************++++$$gffggZ6 !%)-0369<?BDGILNPRTVXZ\^`bcefhjklnoprstuwxyz{|}~~~}{zywutrpnkifc`]YUPJC95jllmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm + + + + + + + + + + + + + + + + + + + + + +  !!!!!!!!!!!!!!""""""""""""##############$$$$$$$$$$$$$$$$%%%%%%%%%%%%%%&&&&&&&&&&&&&&&&''''''''''''''''(((((((((((((((((())))))))))))))))))))**********************++++++++++++++++++++++((jgggggggg_< #'+.258;=@CEHJLOQSUWY[\^`acefhiklmopqrstvwxyzz{|}~~~}|{zxwvtrqomkhfc`]ZVQLF>,U mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmz  + + + + + + + + + + + + + + + + + + + + + +  !!!!!!!!!!!!!!""""""""""""""############$$$$$$$$$$$$$$%%%%%%%%%%%%%%%%&&&&&&&&&&&&&&''''''''''''''''(((((((((((((((())))))))))))))))))********************++++++++++++++++++++++++,,,,,,,,,,,,,,rgggggggghhhhcC" !%),0369<>ACFHKMOQSUWYZ\^`acdfgijklnopqrstuvwxyz{{|}}~~~}}|{zyxwutsqonljhec`]ZVRMHA72jmmmmmmmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnx  + + + + + + + + + + + + + + + + + + !!!!!!!!!!!!!!""""""""""""##############$$$$$$$$$$$$$$%%%%%%%%%%%%%%&&&&&&&&&&&&&&''''''''''''''(((((((((((((((())))))))))))))))******************++++++++++++++++++++++,,,,,,,,,,,,,,,,,,,,,,,,----$$ ggghhhhhhhhhhhhhfL) #'*.147:<?BDFIKMOQSUWYZ\^_abdefhijlmnopqrstuvvwxyyz{{||}}}~~~~~~}}||{zyyxwvusrqonljhfdb_\YVRNIC;'Xnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnny  + + + + + + + + + + + + !!!!!!!!!!!!""""""""""""""############$$$$$$$$$$$$$$%%%%%%%%%%%%%%&&&&&&&&&&&&''''''''''''''''(((((((((((((())))))))))))))))****************++++++++++++++++++++,,,,,,,,,,,,,,,,,,,,--------------------,,jhhhhhhhhhhhhhhiiiiiiW6  $(+/258:=?BDGIKMOQSUVXZ[]_`acdeghijklnoopqrsttuvwwxxyyzzz{{{{{||||||{{{{zzzyyxwwvutsrqpomljigeca^[XURNIC=0@mnnnnnnnnnnnnnooooooooooooooooooooooooooooooooooooooooooooooooooooooooo} + + + + + + + + !!!!!!!!!!!!""""""""""""##############$$$$$$$$$$$$%%%%%%%%%%%%%%&&&&&&&&&&&&''''''''''''''(((((((((((((((())))))))))))))****************++++++++++++++++,,,,,,,,,,,,,,,,,,,,--------------------..............&&hhhhhhhhhiiiiiiiiiiiiiiibB" + +"%),/258;=@BDGIKMOQRTVWY[\^_`bcdeghijklmnoopqrrsttuuvvvwwwwxxxxxxxxxwwwvvvuutsrrqponlkjhgeca_]ZWTQMID=4-foooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo + + !!!!!!!!!!!!""""""""""""############$$$$$$$$$$$$$$%%%%%%%%%%%%&&&&&&&&&&&&&&''''''''''''(((((((((((((())))))))))))))****************++++++++++++++++,,,,,,,,,,,,,,,,--------------------......................//////mhhhiiiiiiiiiiiiiiiiijjjjjjjiQ1 "&)-0358;=@BDFHJLNPRSUWXZ[\^_`bcdefghijkllmnooppqqrrssssttttttttttsssrrqqpponmlkjigfdca_][XVSPLHC=6![oooooooooooooooooooopppppppppppppppppppppppppppppppppppppppppppppppppppppppppp  !!!!!!!!!!!!""""""""""""############$$$$$$$$$$$$%%%%%%%%%%%%%%&&&&&&&&&&&&''''''''''''''(((((((((((())))))))))))))**************++++++++++++++++,,,,,,,,,,,,,,,,----------------....................////////////////////--iiiiiiiiiiiiiiijjjjjjjjjjjjjjjjkaB$ #&*-0358:=?ADFHJKMOQRTUWXZ[\^_`abcdefghiijkkllmmnnoooopppppppppooonnmmllkjihgfecb`_][YWTQNKGB=5$Q +pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppu   !!!!!!!!!!!!""""""""""""############$$$$$$$$$$$$%%%%%%%%%%%%&&&&&&&&&&&&&&''''''''''''(((((((((((())))))))))))))**************++++++++++++++,,,,,,,,,,,,,,,,----------------................////////////////////00000000000000))iiiiiiiiijjjjjjjjjjjjjjjjkkkkkkkkkkjV8 #&*-0258:<?ACEGIJLNPQSTUWXY[\]^_`abcdeefgghhiijjkkkklllllllkkkkjjiihggfedcb`_^\ZXVTROLIEA;4$M pppppppppppppppppppppppppppqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqppp  !!!!!!!!!!!!""""""""""""############$$$$$$$$$$$$%%%%%%%%%%%%&&&&&&&&&&&&''''''''''''(((((((((((((())))))))))))**************++++++++++++++,,,,,,,,,,,,,,--------------................//////////////////0000000000000000000011111111$$tiiiijjjjjjjjjjjjjjjkkkkkkkkkkkkkkkkklllhN0 #&),/2479;>@BDFGIKLNPQRTUVWYZ[\]^__`abbcddeefffggggggggggggffeeddcbaa`^]\[YWVTQOMJFC>92"N pqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqr   !!!!!!!!!!""""""""""""############$$$$$$$$$$$$%%%%%%%%%%%%&&&&&&&&&&&&''''''''''''(((((((((((())))))))))))**************++++++++++++,,,,,,,,,,,,,,--------------................////////////////0000000000000000001111111111111111111122mjjjjjjjjjjjjjjkkkkkkkkkkkkkkkkllllllllllllldI- "%(+.1368:<>@BDFGIKLNOPRSTUVWXYZ[\]]^__``aaabbbbbcccbbbbbaa``_^^]\[ZYWVTRPNLJGC@<6/ U qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrqqqqqqq  !!!!!!!!!!!!""""""""""""##########$$$$$$$$$$$$%%%%%%%%%%%%&&&&&&&&&&&&''''''''''''(((((((((((())))))))))))************++++++++++++++,,,,,,,,,,,,--------------..............////////////////00000000000000001111111111111111112222222222222222kjjjjjjjjkkkkkkkkkkkkkkkkllllllllllllllllmmmmmmmdH, + !$'*-/2469;=?@BDEGIJKMNOPQRSTUVWXYYZZ[[\\]]]]]^^^^]]]]\\[[ZZYXWVUSRPOMKIFC@<83*0`qqqqqqqqrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrru  !!!!!!!!!!!!""""""""""""############$$$$$$$$$$%%%%%%%%%%%%&&&&&&&&&&&&''''''''''''(((((((((((())))))))))))************++++++++++++,,,,,,,,,,,,--------------..............//////////////000000000000000011111111111111112222222222222222223333333333kjjjkkkkkkkkkkkkkkkllllllllllllllllmmmmmmmmmmmmmmmmmeL1 "%(+.02479;<>@ACEFGIJKLMNOPQRSSTUUVVWWXXXXXXXXXXXXWWVVUTSRQPONLKIGDB?<84. Clrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrssssssssssssssssssssssssssssssssssssssssssssrrrrrrrrrrrr  !!!!!!!!!!!!""""""""""############$$$$$$$$$$$$%%%%%%%%%%&&&&&&&&&&&&''''''''''''(((((((((((())))))))))************++++++++++++,,,,,,,,,,,,,,------------............//////////////0000000000000000111111111111112222222222222222223333333333333333334444 kkkkkkkkkkkkkkllllllllllllllllmmmmmmmmmmmmmmmmnnnnnnnnnnjS:"   #&)+.02468:;=?@BCDEGHIJKLMMNOOPPQQRRRRSSSSSRRRRQQPONNMLJIHFDB@=:73. %1\rrrrrrrrrrrrrrrrsssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss  !!!!!!!!!!""""""""""""##########$$$$$$$$$$$$%%%%%%%%%%%%&&&&&&&&&&''''''''''''(((((((((((())))))))))************++++++++++++,,,,,,,,,,,,------------............//////////////000000000000001111111111111122222222222222223333333333333333444444444444444444%%nkkkkkkkklllllllllllllllmmmmmmmmmmmmmmmmnnnnnnnnnnnnnnnnnooon_G0   #&(+-/13578:;=>?ABCDEFGGHIJJKKKLLLLMMMMLLLKKJJIHGFEDBA?=:851,$*P psssssssssssssssssssssssssssssssssssssssssssssssssssssstttttttttttttttttttttttttttttttttttsssssssssssssssssx  !!!!!!!!!!!!""""""""""############$$$$$$$$$$%%%%%%%%%%%%&&&&&&&&&&&&''''''''''(((((((((((())))))))))************++++++++++++,,,,,,,,,,,,------------............////////////00000000000000111111111111112222222222222233333333333333334444444444444444555555555555,,rkkklllllllllllllllmmmmmmmmmmmmmmmnnnnnnnnnnnnnnnnnoooooooooooooomYC. + "%')+-/134679:;<=>?@ABCCDDEEEFFFFFFFEEEDDCBA@?><:9641-) + .Rpssssssssssssssssssssssssttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttt  !!!!!!!!!!""""""""""""##########$$$$$$$$$$$$%%%%%%%%%%&&&&&&&&&&&&''''''''''(((((((((((())))))))))************++++++++++++,,,,,,,,,,------------............////////////000000000000001111111111112222222222222233333333333333444444444444444455555555555555555566666633lllllllllllllmmmmmmmmmmmmmmmnnnnnnnnnnnnnnnnoooooooooooooooooppppppppmZH3!   "%')+,.012456789:;;<==>>>>>??>>>>==<;:987531.,("=]sssssssssstttttttttttttttttttttttttttttttttttttttttttttttttttttttttttuuuuuuuuuuuuuuuuuuuuuuttttttttttttttttttttttttt  !!!!!!!!!!""""""""""""##########$$$$$$$$$$$$%%%%%%%%%%&&&&&&&&&&''''''''''''(((((((((())))))))))))**********++++++++++++,,,,,,,,,,------------............////////////000000000000111111111111222222222222223333333333333344444444444444555555555555555566666666666666666677llllllllmmmmmmmmmmmmmmmnnnnnnnnnnnnnnnooooooooooooooooppppppppppppppppppqqpeSA0  !#%&(*+,./01233445566666665544321/.,*'$:Votttttttttttttttttttttttttttttttttttuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu + +!!!!!!!!!!!!""""""""""############$$$$$$$$$$%%%%%%%%%%&&&&&&&&&&&&''''''''''(((((((((((())))))))))**********++++++++++++,,,,,,,,,,------------............//////////00000000000011111111111122222222222222333333333333444444444444445555555555555555666666666666666677777777777777%%lllmmmmmmmmmmmmmmmnnnnnnnnnnnnnnnooooooooooooooooppppppppppppppppqqqqqqqqqqqqqqqqhXJ;-    "#%&'())*+++,,,,,++**)'&$" +3Ibsttttttttttttttttttttuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu + +!!!!!!""""""""""##########$$$$$$$$$$$$%%%%%%%%%%&&&&&&&&&&''''''''''''(((((((((())))))))))************++++++++++,,,,,,,,,,------------..........////////////0000000000001111111111112222222222223333333333334444444444444455555555555555666666666666667777777777777777888888888855zmmmmmmmmmmmmnnnnnnnnnnnnnnnoooooooooooooooppppppppppppppppqqqqqqqqqqqqqqqqqqrrrrrrrrrrrl`TI>4+    )8 HYkttttttttttttuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv + +""""""""""##########$$$$$$$$$$%%%%%%%%%%%%&&&&&&&&&&''''''''''(((((((((((())))))))))**********++++++++++,,,,,,,,,,,,----------..........////////////0000000000001111111111222222222222333333333333444444444444445555555555556666666666666677777777777777778888888888888888999999mmmmmmmnnnnnnnnnnnnnnnooooooooooooooopppppppppppppppqqqqqqqqqqqqqqqqqrrrrrrrrrrrrrrrrrrssssssssssmg`[VSMIFCB?A@>=>>ADHMU[cltttttttuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv """"##########$$$$$$$$$$%%%%%%%%%%%%&&&&&&&&&&''''''''''(((((((((())))))))))**********++++++++++++,,,,,,,,,,----------............//////////000000000011111111111122222222222233333333333344444444444455555555555566666666666666777777777777778888888888888899999999999999999933qmmnnnnnnnnnnnnnnooooooooooooooopppppppppppppppqqqqqqqqqqqqqqqqrrrrrrrrrrrrrrrrrsssssssssssssssssssttttttttttttttttttttttuuuuuuuuuuuuuuuuuuuuuuuuuuvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww########$$$$$$$$$$%%%%%%%%%%&&&&&&&&&&''''''''''''(((((((((())))))))))**********++++++++++,,,,,,,,,,------------..........//////////0000000000111111111111222222222222333333333344444444444455555555555566666666666666777777777777888888888888889999999999999999::::::::::::::nnnnnnnnnnnooooooooooooooopppppppppppppppqqqqqqqqqqqqqqqrrrrrrrrrrrrrrrrrssssssssssssssssssttttttttttttttttttttuuuuuuuuuuuuuuuuuuuuuuuvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwz##$$$$$$$$$$%%%%%%%%%%&&&&&&&&&&''''''''''(((((((((())))))))))))**********++++++++++,,,,,,,,,,----------..........//////////000000000000111111111122222222223333333333334444444444445555555555556666666666667777777777778888888888888899999999999999::::::::::::::::;;;;;;;;77tnnnnnnooooooooooooooppppppppppppppqqqqqqqqqqqqqqqqrrrrrrrrrrrrrrrrssssssssssssssssstttttttttttttttttttuuuuuuuuuuuuuuuuuuuuuuvvvvvvvvvvvvvvvvvvvvvvvvvvwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx$$$$$$%%%%%%%%%%&&&&&&&&&&''''''''''(((((((((())))))))))**********++++++++++,,,,,,,,,,----------..........////////////000000000011111111112222222222333333333333444444444455555555555566666666666677777777777788888888888899999999999999::::::::::::::;;;;;;;;;;;;;;;;<<<<<<##noooooooooooooopppppppppppppppqqqqqqqqqqqqqqrrrrrrrrrrrrrrrrsssssssssssssssssttttttttttttttttttuuuuuuuuuuuuuuuuuuuuvvvvvvvvvvvvvvvvvvvvvvvvwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx%%%%%%%%%%&&&&&&&&&&''''''''''(((((((((())))))))))**********++++++++++,,,,,,,,,,----------..........//////////0000000000111111111122222222222233333333334444444444555555555555666666666677777777777788888888888899999999999999::::::::::::::;;;;;;;;;;;;;;<<<<<<<<<<<<<<<<== ooooooooooppppppppppppppqqqqqqqqqqqqqqrrrrrrrrrrrrrrrrsssssssssssssssstttttttttttttttttuuuuuuuuuuuuuuuuuuuvvvvvvvvvvvvvvvvvvvvvvwwwwwwwwwwwwwwwwwwwwwwwwwwxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyx%%%%&&&&&&&&&&''''''''''(((((((((())))))))))**********++++++++++,,,,,,,,,,----------..........//////////000000000011111111112222222222333333333344444444445555555555556666666666777777777777888888888888999999999999::::::::::::;;;;;;;;;;;;;;<<<<<<<<<<<<<<==============88qooooppppppppppppppqqqqqqqqqqqqqqqrrrrrrrrrrrrrrsssssssssssssssstttttttttttttttttuuuuuuuuuuuuuuuuuuvvvvvvvvvvvvvvvvvvvvwwwwwwwwwwwwwwwwwwwwwwwwxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy &&&&&&&&''''''''''(((((((((())))))))))**********++++++++,,,,,,,,,,----------..........//////////0000000000111111111122222222223333333333444444444455555555555566666666667777777777778888888888999999999999::::::::::::;;;;;;;;;;;;;;<<<<<<<<<<<<<<==============>>>>>>>>>>))ppppppppppppppqqqqqqqqqqqqqqrrrrrrrrrrrrrrssssssssssssssssttttttttttttttttuuuuuuuuuuuuuuuuuvvvvvvvvvvvvvvvvvvvwwwwwwwwwwwwwwwwwwwwwwxxxxxxxxxxxxxxxxxxxxxxxxxxxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzyyyyy &&''''''''''(((((((((())))))))))********++++++++++,,,,,,,,,,----------..........//////////00000000001111111122222222223333333333444444444444555555555566666666667777777777888888888888999999999999::::::::::;;;;;;;;;;;;;;<<<<<<<<<<<<==============>>>>>>>>>>>>>>????????pppppppppqqqqqqqqqqqqqrrrrrrrrrrrrrrrssssssssssssssstttttttttttttttuuuuuuuuuuuuuuuuuvvvvvvvvvvvvvvvvvvwwwwwwwwwwwwwwwwwwwwxxxxxxxxxxxxxxxxxxxxxxxxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz{ ''''''(((((((((())))))))))********++++++++++,,,,,,,,,,----------..........////////000000000011111111112222222222333333333344444444445555555555666666666677777777778888888888889999999999::::::::::::;;;;;;;;;;;;<<<<<<<<<<<<============>>>>>>>>>>>>>>????????????????@@@@pppqqqqqqqqqqqqqqrrrrrrrrrrrrrrssssssssssssssstttttttttttttttuuuuuuuuuuuuuuuuvvvvvvvvvvvvvvvvvwwwwwwwwwwwwwwwwwwwxxxxxxxxxxxxxxxxxxxxxxyyyyyyyyyyyyyyyyyyyyyyyyyyyyzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzzzzzzzzz !!!!!! (((((((((())))))))))********++++++++++,,,,,,,,,,----------........//////////0000000000111111111122222222223333333344444444445555555555666666666677777777778888888888889999999999::::::::::::;;;;;;;;;;<<<<<<<<<<<<============>>>>>>>>>>>>>>??????????????@@@@@@@@@@@@@@@@ qqqqqqqqqqqqrrrrrrrrrrrrrssssssssssssssstttttttttttttttuuuuuuuuuuuuuuuvvvvvvvvvvvvvvvvvwwwwwwwwwwwwwwwwwwxxxxxxxxxxxxxxxxxxxxyyyyyyyyyyyyyyyyyyyyyyyyyzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{|!!!!!!!! (((())))))))))********++++++++++,,,,,,,,,,----------........//////////00000000001111111122222222223333333333444444444455555555556666666666777777777788888888889999999999::::::::::;;;;;;;;;;;;<<<<<<<<<<<<==========>>>>>>>>>>>>>>????????????@@@@@@@@@@@@@@AAAAAAAAAAAAAAzqqqqqqqrrrrrrrrrrrrrsssssssssssssstttttttttttttttuuuuuuuuuuuuuuuvvvvvvvvvvvvvvvvwwwwwwwwwwwwwwwwwxxxxxxxxxxxxxxxxxxxxyyyyyyyyyyyyyyyyyyyyyyzzzzzzzzzzzzzzzzzzzzzzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{|||||||||||||||||||||||||||||||||||||||||{{{{{{{{{{{{{{{{{""""!!!!!!!! ))))))))********++++++++++,,,,,,,,,,--------..........//////////000000001111111111222222222233333333334444444455555555556666666666777777777788888888889999999999::::::::::;;;;;;;;;;;;<<<<<<<<<<============>>>>>>>>>>>>????????????@@@@@@@@@@@@@@AAAAAAAAAAAAAABBBBBBBBBBuqqrrrrrrrrrrrrrssssssssssssssttttttttttttttuuuuuuuuuuuuuuuvvvvvvvvvvvvvvvwwwwwwwwwwwwwwwwwxxxxxxxxxxxxxxxxxxyyyyyyyyyyyyyyyyyyyyyzzzzzzzzzzzzzzzzzzzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||""""""""!!!!!!!!!! ))********++++++++++,,,,,,,,,,--------..........//////////0000000011111111112222222222333333334444444444555555555566666666667777777788888888889999999999::::::::::;;;;;;;;;;;;<<<<<<<<<<==========>>>>>>>>>>>>????????????@@@@@@@@@@@@AAAAAAAAAAAAAABBBBBBBBBBBBBBCCCCCCCCurrrrrrrrrrsssssssssssssttttttttttttttuuuuuuuuuuuuuuuvvvvvvvvvvvvvvvwwwwwwwwwwwwwwwwxxxxxxxxxxxxxxxxxxyyyyyyyyyyyyyyyyyyyzzzzzzzzzzzzzzzzzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||}}}}}}}}}}}}}}}}}||||||||||||||||||||||||||||##""""""""!!!!!!!!!! ******++++++++,,,,,,,,,,--------..........//////////0000000011111111112222222233333333334444444444555555556666666666777777777788888888889999999999::::::::::;;;;;;;;;;<<<<<<<<<<==========>>>>>>>>>>>>??????????@@@@@@@@@@@@AAAAAAAAAAAAAABBBBBBBBBBBBBBCCCCCCCCCCCCCCDDDD}rrrrrsssssssssssssttttttttttttttuuuuuuuuuuuuuuvvvvvvvvvvvvvvvwwwwwwwwwwwwwwwxxxxxxxxxxxxxxxxxyyyyyyyyyyyyyyyyyyyzzzzzzzzzzzzzzzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{{||||||||||||||||||||||||||||||||||||}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}######""""""""""!!!!!!!!!! ++++++++,,,,,,,,,,----------........//////////00000000111111111122222222333333333344444444445555555566666666667777777788888888889999999999::::::::::;;;;;;;;;;<<<<<<<<<<==========>>>>>>>>>>????????????@@@@@@@@@@@@AAAAAAAAAAAABBBBBBBBBBBBCCCCCCCCCCCCCCDDDDDDDDDDDDDDEE + +sssssssssssssttttttttttttttuuuuuuuuuuuuuvvvvvvvvvvvvvvvwwwwwwwwwwwwwwwxxxxxxxxxxxxxxxxyyyyyyyyyyyyyyyyyyzzzzzzzzzzzzzzzzzzz{{{{{{{{{{{{{{{{{{{{{{{|||||||||||||||||||||||||||||}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} $$########""""""""""!!!!!!!!!! ++++,,,,,,,,----------........//////////00000000111111111122222222333333333344444444555555555566666666777777777788888888889999999999::::::::;;;;;;;;;;<<<<<<<<<<==========>>>>>>>>>>????????????@@@@@@@@@@AAAAAAAAAAAABBBBBBBBBBBBCCCCCCCCCCCCCCDDDDDDDDDDDDEEEEEEEEEEEEEEsssssssstttttttttttttuuuuuuuuuuuuuuvvvvvvvvvvvvvvwwwwwwwwwwwwwwwxxxxxxxxxxxxxxxxyyyyyyyyyyyyyyyyzzzzzzzzzzzzzzzzzzz{{{{{{{{{{{{{{{{{{{{{|||||||||||||||||||||||||}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~$$$$$$##########""""""""!!!!!!!!!! ,,,,,,----------........//////////000000001111111111222222223333333333444444445555555555666666667777777777888888889999999999::::::::::;;;;;;;;;;<<<<<<<<==========>>>>>>>>>>????????????@@@@@@@@@@AAAAAAAAAAAABBBBBBBBBBCCCCCCCCCCCCDDDDDDDDDDDDDDEEEEEEEEEEEEEEFFFFFFFFFF ssstttttttttttttuuuuuuuuuuuuuuvvvvvvvvvvvvvvwwwwwwwwwwwwwwxxxxxxxxxxxxxxxyyyyyyyyyyyyyyyyyzzzzzzzzzzzzzzzzz{{{{{{{{{{{{{{{{{{{{|||||||||||||||||||||||}}}}}}}}}}}}}}}}}}}}}}}}}}}}}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~!!$$$$$$$$##########""""""""""!!!!!!!! ,,--------..........////////000000001111111111222222223333333333444444445555555555666666667777777777888888889999999999::::::::;;;;;;;;;;<<<<<<<<<<==========>>>>>>>>>>??????????@@@@@@@@@@AAAAAAAAAABBBBBBBBBBBBCCCCCCCCCCCCDDDDDDDDDDDDEEEEEEEEEEEEFFFFFFFFFFFFFFGGGGGGGG00tttttttttttuuuuuuuuuuuuuuvvvvvvvvvvvvvwwwwwwwwwwwwwwxxxxxxxxxxxxxxxyyyyyyyyyyyyyyyyzzzzzzzzzzzzzzzzz{{{{{{{{{{{{{{{{{{|||||||||||||||||||||}}}}}}}}}}}}}}}}}}}}}}}}}}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~%%%%$$$$$$$$$$########""""""""""!!!!!!!!!! ----..........////////000000000011111111222222223333333333444444445555555555666666667777777788888888889999999999::::::::;;;;;;;;;;<<<<<<<<==========>>>>>>>>>>??????????@@@@@@@@@@AAAAAAAAAABBBBBBBBBBBBCCCCCCCCCCDDDDDDDDDDDDEEEEEEEEEEEEFFFFFFFFFFFFFFGGGGGGGGGGGGGGHHHHCCuttttttuuuuuuuuuuuuuvvvvvvvvvvvvvwwwwwwwwwwwwwwxxxxxxxxxxxxxxyyyyyyyyyyyyyyyyzzzzzzzzzzzzzzzz{{{{{{{{{{{{{{{{{||||||||||||||||||||}}}}}}}}}}}}}}}}}}}}}}}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~%%%%%%%%$$$$$$$$$$########""""""""""!!!!!!!!!! ........////////0000000000111111112222222233333333334444444455555555556666666677777777888888888899999999::::::::::;;;;;;;;<<<<<<<<<<==========>>>>>>>>??????????@@@@@@@@@@AAAAAAAAAABBBBBBBBBBCCCCCCCCCCCCDDDDDDDDDDEEEEEEEEEEEEFFFFFFFFFFFFGGGGGGGGGGGGGGHHHHHHHHHHHHHHIIIItuuuuuuuuuuuuuvvvvvvvvvvvvvwwwwwwwwwwwwwwxxxxxxxxxxxxxxyyyyyyyyyyyyyyyzzzzzzzzzzzzzzz{{{{{{{{{{{{{{{{{|||||||||||||||||||}}}}}}}}}}}}}}}}}}}}}~~~~~~~~~~~~~~~~~~~~~~~~~~~&&&&%%%%%%%%%%$$$$$$$$##########""""""""!!!!!!!!!! ..//////////00000000111111112222222222333333334444444455555555556666666677777777888888888899999999::::::::::;;;;;;;;<<<<<<<<<<========>>>>>>>>>>??????????@@@@@@@@AAAAAAAAAABBBBBBBBBBCCCCCCCCCCCCDDDDDDDDDDEEEEEEEEEEEEFFFFFFFFFFFFGGGGGGGGGGGGHHHHHHHHHHHHIIIIIIIIIIIIIIII,,uuuuuuuuuvvvvvvvvvvvvvwwwwwwwwwwwwwxxxxxxxxxxxxxxyyyyyyyyyyyyyyyzzzzzzzzzzzzzzz{{{{{{{{{{{{{{{{||||||||||||||||||}}}}}}}}}}}}}}}}}}}}~~~~~~~~~~~~~~~~~~~~~~~&&&&&&&&%%%%%%%%%%$$$$$$$$##########""""""""""!!!!!!!! //////00000000111111111122222222333333334444444455555555556666666677777777888888888899999999::::::::;;;;;;;;;;<<<<<<<<==========>>>>>>>>??????????@@@@@@@@@@AAAAAAAAAABBBBBBBBBBCCCCCCCCCCDDDDDDDDDDEEEEEEEEEEFFFFFFFFFFFFGGGGGGGGGGGGHHHHHHHHHHHHIIIIIIIIIIIIIIJJJJJJJJJJJJFF{uuuvvvvvvvvvvvvvwwwwwwwwwwwwwxxxxxxxxxxxxxxyyyyyyyyyyyyyyzzzzzzzzzzzzzzz{{{{{{{{{{{{{{{{|||||||||||||||||}}}}}}}}}}}}}}}}}}~~~~~~~~~~~~~~~~~~~~~~''''&&&&&&&&&&%%%%%%%%$$$$$$$$$$########""""""""""!!!!!!!!!! 00000000111111111122222222333333334444444444555555556666666677777777888888888899999999::::::::;;;;;;;;;;<<<<<<<<==========>>>>>>>>??????????@@@@@@@@AAAAAAAAAABBBBBBBBBBCCCCCCCCCCDDDDDDDDDDEEEEEEEEEEFFFFFFFFFFGGGGGGGGGGGGHHHHHHHHHHHHIIIIIIIIIIIIJJJJJJJJJJJJJJKKKKKKKKKKKKvvvvvvvvvvvwwwwwwwwwwwwwxxxxxxxxxxxxxxyyyyyyyyyyyyyyzzzzzzzzzzzzzz{{{{{{{{{{{{{{{|||||||||||||||||}}}}}}}}}}}}}}}}}}~~~~~~~~~~~~~~~~~~~~$$''''''''&&&&&&&&&&%%%%%%%%$$$$$$$$$$########""""""""""!!!!!!!!!! 00001111111122222222333333333344444444555555556666666677777777778888888899999999::::::::;;;;;;;;;;<<<<<<<<========>>>>>>>>>>????????@@@@@@@@@@AAAAAAAAAABBBBBBBBCCCCCCCCCCDDDDDDDDDDEEEEEEEEEEFFFFFFFFFFGGGGGGGGGGGGHHHHHHHHHHIIIIIIIIIIIIJJJJJJJJJJJJJJKKKKKKKKKKKKKKLLLLLLLLCCxvvvvvvwwwwwwwwwwwwwxxxxxxxxxxxxxyyyyyyyyyyyyyzzzzzzzzzzzzzz{{{{{{{{{{{{{{{||||||||||||||||}}}}}}}}}}}}}}}}}~~~~~~~~~~~~~~~~~~~((((((''''''''''&&&&&&&&%%%%%%%%$$$$$$$$$$##########""""""""!!!!!!!!!! 11111122222222223333333344444444555555556666666666777777778888888899999999::::::::;;;;;;;;;;<<<<<<<<========>>>>>>>>>>????????@@@@@@@@@@AAAAAAAABBBBBBBBBBCCCCCCCCDDDDDDDDDDEEEEEEEEEEFFFFFFFFFFGGGGGGGGGGGGHHHHHHHHHHIIIIIIIIIIIIJJJJJJJJJJJJKKKKKKKKKKKKLLLLLLLLLLLLLLMMMMMMMM vwwwwwwwwwwwwwxxxxxxxxxxxxxyyyyyyyyyyyyyzzzzzzzzzzzzzz{{{{{{{{{{{{{{||||||||||||||||}}}}}}}}}}}}}}}}~~~~~~~~~~~~~~~~~~ + +))((((((((((''''''''&&&&&&&&%%%%%%%%%%$$$$$$$$##########""""""""!!!!!!!!!! 11222222223333333344444444555555555566666666777777778888888899999999::::::::::;;;;;;;;<<<<<<<<========>>>>>>>>>>????????@@@@@@@@AAAAAAAAAABBBBBBBBCCCCCCCCCCDDDDDDDDDDEEEEEEEEFFFFFFFFFFGGGGGGGGGGHHHHHHHHHHHHIIIIIIIIIIJJJJJJJJJJJJKKKKKKKKKKKKLLLLLLLLLLLLLLMMMMMMMMMMMMMMNNNNHHwwwwwwwwxxxxxxxxxxxxxyyyyyyyyyyyyyzzzzzzzzzzzzzz{{{{{{{{{{{{{{|||||||||||||||}}}}}}}}}}}}}}}}~~~~~~~~~~~~~~~~~))))))))((((((((''''''''&&&&&&&&%%%%%%%%%%$$$$$$$$##########""""""""!!!!!!!!!! 22223333333333444444445555555566666666777777778888888899999999::::::::::;;;;;;;;<<<<<<<<========>>>>>>>>>>????????@@@@@@@@AAAAAAAAAABBBBBBBBCCCCCCCCDDDDDDDDDDEEEEEEEEEEFFFFFFFFFFGGGGGGGGGGHHHHHHHHHHIIIIIIIIIIJJJJJJJJJJKKKKKKKKKKKKLLLLLLLLLLLLMMMMMMMMMMMMMMNNNNNNNNNNNNNNOOOO//wwwwxxxxxxxxxxxxyyyyyyyyyyyyyzzzzzzzzzzzzzz{{{{{{{{{{{{{|||||||||||||||}}}}}}}}}}}}}}}~~~~~~~~~~~~~~~~~!!****))))))))((((((((''''''''&&&&&&&&&&%%%%%%%%$$$$$$$$##########""""""""""!!!!!!!! 3333333344444444555555556666666677777777888888888899999999::::::::;;;;;;;;<<<<<<<<========>>>>>>>>>>????????@@@@@@@@AAAAAAAABBBBBBBBBBCCCCCCCCDDDDDDDDDDEEEEEEEEFFFFFFFFFFGGGGGGGGGGHHHHHHHHHHIIIIIIIIIIJJJJJJJJJJKKKKKKKKKKKKLLLLLLLLLLLLMMMMMMMMMMMMNNNNNNNNNNNNOOOOOOOOOOOOOOOOOOxxxxxxxxxxxyyyyyyyyyyyyzzzzzzzzzzzzzz{{{{{{{{{{{{{||||||||||||||}}}}}}}}}}}}}}}~~~~~~~~~~~~~~~~**********))))))))((((((((''''''''&&&&&&&&&&%%%%%%%%$$$$$$$$##########""""""""""!!!!!!!! 3344444444555555555566666666777777778888888899999999::::::::;;;;;;;;<<<<<<<<========>>>>>>>>>>????????@@@@@@@@AAAAAAAABBBBBBBBBBCCCCCCCCDDDDDDDDEEEEEEEEEEFFFFFFFFGGGGGGGGGGHHHHHHHHHHIIIIIIIIIIJJJJJJJJJJKKKKKKKKKKLLLLLLLLLLLLMMMMMMMMMMMMNNNNNNNNNNNNOOOOOOOOOOOOOOPPPPPPPPPPPPPPGGxxxxxyyyyyyyyyyyyyzzzzzzzzzzzzz{{{{{{{{{{{{{||||||||||||||}}}}}}}}}}}}}}~~~~~~~~~~~~~~~~++++++********))))))))((((((((''''''''&&&&&&&&&&%%%%%%%%$$$$$$$$$$########""""""""""!!!!!!!! 4444445555555566666666777777778888888899999999::::::::;;;;;;;;<<<<<<<<==========>>>>>>>>????????@@@@@@@@AAAAAAAABBBBBBBBCCCCCCCCCCDDDDDDDDEEEEEEEEEEFFFFFFFFGGGGGGGGGGHHHHHHHHIIIIIIIIIIJJJJJJJJJJKKKKKKKKKKLLLLLLLLLLLLMMMMMMMMMMNNNNNNNNNNNNOOOOOOOOOOOOOOPPPPPPPPPPPPQQQQQQQQQQQQQQ88yyyyyyyyyyyyyzzzzzzzzzzzzz{{{{{{{{{{{{{||||||||||||||}}}}}}}}}}}}}}~~~~~~~~~~~~~~~'',,++++++++********))))))))((((((((''''''''''&&&&&&&&%%%%%%%%$$$$$$$$$$########""""""""""!!!!!!!! 555555556666666677777777888888888899999999::::::::;;;;;;;;<<<<<<<<========>>>>>>>>????????@@@@@@@@AAAAAAAABBBBBBBBCCCCCCCCCCDDDDDDDDEEEEEEEEFFFFFFFFFFGGGGGGGGHHHHHHHHHHIIIIIIIIIIJJJJJJJJKKKKKKKKKKLLLLLLLLLLLLMMMMMMMMMMNNNNNNNNNNNNOOOOOOOOOOOOPPPPPPPPPPPPQQQQQQQQQQQQQQRRRRRRRRRRRR((yyyyyyyyzzzzzzzzzzzz{{{{{{{{{{{{{|||||||||||||}}}}}}}}}}}}}}~~~~~~~~~~~~~~~,,,,,,,,++++++++********))))))))((((((((''''''''''&&&&&&&&%%%%%%%%$$$$$$$$$$########""""""""""!!!!!!!!!! 555566666666777777778888888899999999::::::::;;;;;;;;<<<<<<<<========>>>>>>>>????????@@@@@@@@AAAAAAAABBBBBBBBCCCCCCCCCCDDDDDDDDEEEEEEEEFFFFFFFFGGGGGGGGGGHHHHHHHHIIIIIIIIIIJJJJJJJJJJKKKKKKKKKKLLLLLLLLLLMMMMMMMMMMNNNNNNNNNNOOOOOOOOOOOOPPPPPPPPPPPPQQQQQQQQQQQQRRRRRRRRRRRRRRSSSSSSSSSSSSyyzzzzzzzzzzzzz{{{{{{{{{{{{||||||||||||||}}}}}}}}}}}}}~~~~~~~~~~~~~~''----,,,,,,,,++++++++********))))))))((((((((''''''''''&&&&&&&&%%%%%%%%$$$$$$$$$$########""""""""""!!!!!!!!!! 666666777777778888888899999999::::::::;;;;;;;;<<<<<<<<========>>>>>>>>????????@@@@@@@@AAAAAAAABBBBBBBBCCCCCCCCCCDDDDDDDDEEEEEEEEFFFFFFFFGGGGGGGGGGHHHHHHHHIIIIIIIIIIJJJJJJJJKKKKKKKKKKLLLLLLLLLLMMMMMMMMMMNNNNNNNNNNOOOOOOOOOOPPPPPPPPPPPPQQQQQQQQQQQQRRRRRRRRRRRRRRSSSSSSSSSSSSSSTTTTTTTTQQzzzzzzzzz{{{{{{{{{{{{{|||||||||||||}}}}}}}}}}}}}~~~~~~~~~~~~~~..--------,,,,,,,,++++++++********))))))))((((((((''''''''''&&&&&&&&%%%%%%%%$$$$$$$$$$########""""""""""!!!!!!!!!! 66777777778888888899999999::::::::;;;;;;;;<<<<<<<<========>>>>>>>>????????@@@@@@@@AAAAAAAABBBBBBBBCCCCCCCCDDDDDDDDEEEEEEEEFFFFFFFFGGGGGGGGHHHHHHHHHHIIIIIIIIJJJJJJJJJJKKKKKKKKLLLLLLLLLLMMMMMMMMMMNNNNNNNNNNOOOOOOOOOOPPPPPPPPPPPPQQQQQQQQQQRRRRRRRRRRRRRRSSSSSSSSSSSSTTTTTTTTTTTTTTTTUUUUUUQQzzzz{{{{{{{{{{{{|||||||||||||}}}}}}}}}}}}}~~~~~~~~~~~~~~,,......--------,,,,,,,,++++++++********))))))))((((((((''''''''''&&&&&&&&%%%%%%%%$$$$$$$$$$########""""""""""!!!!!!!!!! 77778888888899999999::::::::;;;;;;;;<<<<<<<<========>>>>>>>>????????@@@@@@@@AAAAAAAABBBBBBBBCCCCCCCCDDDDDDDDEEEEEEEEFFFFFFFFGGGGGGGGHHHHHHHHHHIIIIIIIIJJJJJJJJKKKKKKKKKKLLLLLLLLMMMMMMMMMMNNNNNNNNNNOOOOOOOOOOPPPPPPPPPPQQQQQQQQQQQQRRRRRRRRRRRRSSSSSSSSSSSSTTTTTTTTTTTTTTUUUUUUUUUUUUUUVVVVVVQQ{{{{{{{{{{{||||||||||||}}}}}}}}}}}}}~~~~~~~~~~~~~~""////........--------,,,,,,,,++++++++********))))))))((((((((((''''''''&&&&&&&&%%%%%%%%$$$$$$$$$$########""""""""""!!!!!!!!!! 8888888899999999::::::::;;;;;;<<<<<<<<========>>>>>>>>????????@@@@@@@@AAAAAAAABBBBBBBBCCCCCCCCDDDDDDDDEEEEEEEEFFFFFFFFGGGGGGGGHHHHHHHHHHIIIIIIIIJJJJJJJJKKKKKKKKKKLLLLLLLLMMMMMMMMMMNNNNNNNNOOOOOOOOOOPPPPPPPPPPQQQQQQQQQQQQRRRRRRRRRRSSSSSSSSSSSSTTTTTTTTTTTTUUUUUUUUUUUUUUVVVVVVVVVVVVVVVVWWWWRR{{{{{|||||||||||||}}}}}}}}}}}}}~~~~~~~~~~~~~0000////////......--------,,,,,,,,++++++++********))))))))((((((((((''''''''&&&&&&&&%%%%%%%%$$$$$$$$$$########""""""""""!!!!!!!!!! 8899999999::::::::;;;;;;;;<<<<<<<<========>>>>>>>>????????@@@@@@AAAAAAAABBBBBBBBCCCCCCCCDDDDDDDDEEEEEEEEFFFFFFFFGGGGGGGGHHHHHHHHIIIIIIIIIIJJJJJJJJKKKKKKKKLLLLLLLLLLMMMMMMMMNNNNNNNNNNOOOOOOOOOOPPPPPPPPQQQQQQQQQQQQRRRRRRRRRRSSSSSSSSSSSSTTTTTTTTTTUUUUUUUUUUUUUUVVVVVVVVVVVVVVWWWWWWWWWWWWWWWWXXUU||||||||||||}}}}}}}}}}}}}~~~~~~~~~~~~~ //00000000////////......--------,,,,,,,,++++++++********))))))))((((((((((''''''''&&&&&&&&%%%%%%%%$$$$$$$$$$########""""""""""!!!!!!!!!! 999999::::::::;;;;;;<<<<<<<<========>>>>>>>>????????@@@@@@@@AAAAAAAABBBBBBBBCCCCCCDDDDDDDDEEEEEEEEFFFFFFFFGGGGGGGGHHHHHHHHIIIIIIIIIIJJJJJJJJKKKKKKKKLLLLLLLLMMMMMMMMMMNNNNNNNNOOOOOOOOOOPPPPPPPPPPQQQQQQQQQQRRRRRRRRRRSSSSSSSSSSTTTTTTTTTTTTUUUUUUUUUUUUVVVVVVVVVVVVWWWWWWWWWWWWWWXXXXXXXXXXXXXXXXYYXX''|||||||}}}}}}}}}}}}~~~~~~~~~~~~~--11111100000000////////......--------,,,,,,,,++++++++********))))))))((((((((((''''''''&&&&&&&&%%%%%%%%$$$$$$$$$$########""""""""""!!!!!!!!!! ::::::::;;;;;;;;<<<<<<<<========>>>>>>>>??????@@@@@@@@AAAAAAAABBBBBBBBCCCCCCCCDDDDDDDDEEEEEEEEFFFFFFFFGGGGGGGGHHHHHHHHIIIIIIIIJJJJJJJJKKKKKKKKLLLLLLLLMMMMMMMMMMNNNNNNNNOOOOOOOOPPPPPPPPPPQQQQQQQQQQRRRRRRRRRRSSSSSSSSSSTTTTTTTTTTUUUUUUUUUUUUVVVVVVVVVVVVWWWWWWWWWWWWWWXXXXXXXXXXXXXXYYYYYYYYYYYYYYYYZZ55|}}}}}}}}}}}}~~~~~~~~~~~~~))22221111111100000000////////......--------,,,,,,,,++++++++********))))))))((((((((''''''''''&&&&&&&&%%%%%%%%$$$$$$$$$$########""""""""""!!!!!!!! ::::;;;;;;;;<<<<<<========>>>>>>>>????????@@@@@@@@AAAAAABBBBBBBBCCCCCCCCDDDDDDDDEEEEEEEEFFFFFFFFGGGGGGGGHHHHHHHHIIIIIIIIJJJJJJJJKKKKKKKKLLLLLLLLMMMMMMMMNNNNNNNNNNOOOOOOOOPPPPPPPPPPQQQQQQQQRRRRRRRRRRSSSSSSSSSSTTTTTTTTTTUUUUUUUUUUUUVVVVVVVVVVWWWWWWWWWWWWWWXXXXXXXXXXXXYYYYYYYYYYYYYYYYZZZZZZZZZZZZZZZZGG }}}}}}}}~~~~~~~~~~~~((33332222221111111100000000////////......--------,,,,,,,,++++++++********))))))))((((((((''''''''''&&&&&&&&%%%%%%%%$$$$$$$$$$########""""""""""!!!!!!!! ;;;;;;<<<<<<<<========>>>>>>>>??????@@@@@@@@AAAAAAAABBBBBBBBCCCCCCCCDDDDDDEEEEEEEEFFFFFFFFGGGGGGGGHHHHHHHHIIIIIIIIJJJJJJJJKKKKKKKKLLLLLLLLMMMMMMMMNNNNNNNNOOOOOOOOOOPPPPPPPPQQQQQQQQQQRRRRRRRRSSSSSSSSSSTTTTTTTTTTUUUUUUUUUUUUVVVVVVVVVVWWWWWWWWWWWWXXXXXXXXXXXXYYYYYYYYYYYYYYZZZZZZZZZZZZZZ[[[[[[[[[[[[[[[[TT}}~~~~~~~~~~~~~''44333333332222221111111100000000////////......--------,,,,,,,,++++++++********))))))))((((((((''''''''''&&&&&&&&%%%%%%%%$$$$$$$$$$########""""""""""!!!!!!!! ;;<<<<<<<<======>>>>>>>>????????@@@@@@@@AAAAAABBBBBBBBCCCCCCCCDDDDDDDDEEEEEEEEFFFFFFGGGGGGGGHHHHHHHHIIIIIIIIJJJJJJJJKKKKKKKKLLLLLLLLMMMMMMMMNNNNNNNNOOOOOOOOOOPPPPPPPPQQQQQQQQRRRRRRRRRRSSSSSSSSSSTTTTTTTTTTUUUUUUUUUUVVVVVVVVVVWWWWWWWWWWXXXXXXXXXXXXYYYYYYYYYYYYYYZZZZZZZZZZZZ[[[[[[[[[[[[[[[[\\\\\\\\\\\\\\\\22~~~~~~~~))44444444333333332222221111111100000000////////......--------,,,,,,,,++++++++********))))))))((((((((''''''''&&&&&&&&&&%%%%%%%%$$$$$$$$##########""""""""""!!!!!!!! <<<<========>>>>>>>>??????@@@@@@@@AAAAAAAABBBBBBBBCCCCCCDDDDDDDDEEEEEEEEFFFFFFFFGGGGGGGGHHHHHHIIIIIIIIJJJJJJJJKKKKKKKKLLLLLLLLMMMMMMMMNNNNNNNNOOOOOOOOOOPPPPPPPPQQQQQQQQRRRRRRRRRRSSSSSSSSTTTTTTTTTTUUUUUUUUUUVVVVVVVVVVWWWWWWWWWWXXXXXXXXXXXXYYYYYYYYYYYYZZZZZZZZZZZZ[[[[[[[[[[[[[[\\\\\\\\\\\\\\\\]]]]]]]]]]]]]]LL~~~--55555544444444333333332222221111111100000000//////........--------,,,,,,,,++++++++********))))))))((((((((''''''''&&&&&&&&&&%%%%%%%%$$$$$$$$##########""""""""!!!!!!!!!! ========>>>>>>????????@@@@@@@@AAAAAABBBBBBBBCCCCCCCCDDDDDDDDEEEEEEFFFFFFFFGGGGGGGGHHHHHHHHIIIIIIIIJJJJJJKKKKKKKKLLLLLLLLMMMMMMMMNNNNNNNNOOOOOOOOPPPPPPPPPPQQQQQQQQRRRRRRRRSSSSSSSSSSTTTTTTTTUUUUUUUUUUVVVVVVVVVVWWWWWWWWWWXXXXXXXXXXYYYYYYYYYYYYZZZZZZZZZZZZ[[[[[[[[[[[[[[\\\\\\\\\\\\\\]]]]]]]]]]]]]]]]^^^^^^^^^^^^\\.. 1166666655555544444444333333332222221111111100000000//////........--------,,,,,,,,++++++++********))))))))((((((((''''''''&&&&&&&&&&%%%%%%%%$$$$$$$$##########""""""""!!!!!!!!!! ==>>>>>>>>????????@@@@@@AAAAAAAABBBBBBBBCCCCCCDDDDDDDDEEEEEEEEFFFFFFFFGGGGGGHHHHHHHHIIIIIIIIJJJJJJJJKKKKKKKKLLLLLLLLMMMMMMNNNNNNNNOOOOOOOOOOPPPPPPPPQQQQQQQQRRRRRRRRSSSSSSSSTTTTTTTTTTUUUUUUUUVVVVVVVVVVWWWWWWWWWWXXXXXXXXXXYYYYYYYYYYYYZZZZZZZZZZ[[[[[[[[[[[[\\\\\\\\\\\\\\]]]]]]]]]]]]]]^^^^^^^^^^^^^^^^^^____________NN6677776666666655555544444444333333332222221111111100000000//////........--------,,,,,,,,++++++++********))))))))((((((((''''''''&&&&&&&&%%%%%%%%%%$$$$$$$$##########""""""""!!!!!!!!!! >>>>>>??????@@@@@@@@AAAAAAAABBBBBBCCCCCCCCDDDDDDDDEEEEEEFFFFFFFFGGGGGGGGHHHHHHHHIIIIIIJJJJJJJJKKKKKKKKLLLLLLLLMMMMMMMMNNNNNNNNOOOOOOOOPPPPPPPPQQQQQQQQRRRRRRRRSSSSSSSSTTTTTTTTTTUUUUUUUUVVVVVVVVVVWWWWWWWWXXXXXXXXXXYYYYYYYYYYYYZZZZZZZZZZ[[[[[[[[[[[[\\\\\\\\\\\\]]]]]]]]]]]]]]^^^^^^^^^^^^^^__________________````````````::##8888887777776666666655555544444444333333222222221111111100000000//////........--------,,,,,,,,++++++++********))))))))((((((((''''''''&&&&&&&&%%%%%%%%%%$$$$$$$$##########""""""""!!!!!!!!!! ????????@@@@@@@@AAAAAABBBBBBBBCCCCCCCCDDDDDDEEEEEEEEFFFFFFFFGGGGGGHHHHHHHHIIIIIIIIJJJJJJKKKKKKKKLLLLLLLLMMMMMMMMNNNNNNNNOOOOOOOOPPPPPPPPQQQQQQQQRRRRRRRRSSSSSSSSTTTTTTTTUUUUUUUUUUVVVVVVVVWWWWWWWWWWXXXXXXXXXXYYYYYYYYYYZZZZZZZZZZ[[[[[[[[[[\\\\\\\\\\\\]]]]]]]]]]]]^^^^^^^^^^^^^^________________``````````````````aaaaaaaaaaZZ)) 0099998888888877777766666666555555444444443333332222222211111111000000////////........--------,,,,,,,,++++++++********))))))))((((((((''''''''&&&&&&&&%%%%%%%%$$$$$$$$$$########""""""""""!!!!!!!!!! ????@@@@@@AAAAAAAABBBBBBBBCCCCCCDDDDDDDDEEEEEEFFFFFFFFGGGGGGGGHHHHHHIIIIIIIIJJJJJJJJKKKKKKKKLLLLLLMMMMMMMMNNNNNNNNOOOOOOOOPPPPPPPPQQQQQQQQRRRRRRRRSSSSSSSSTTTTTTTTUUUUUUUUVVVVVVVVVVWWWWWWWWXXXXXXXXXXYYYYYYYYYYZZZZZZZZZZ[[[[[[[[[[\\\\\\\\\\\\]]]]]]]]]]]]^^^^^^^^^^^^______________````````````````aaaaaaaaaaaaaaaaaabbbbbbbbbbRR88::::9999998888888877777766666666555555444444443333332222222211111111000000////////........--------,,,,,,,,++++++********))))))))((((((((((''''''''&&&&&&&&%%%%%%%%$$$$$$$$$$########""""""""""!!!!!!!!!! @@@@@@AAAAAAAABBBBBBCCCCCCCCDDDDDDEEEEEEEEFFFFFFFFGGGGGGHHHHHHHHIIIIIIIIJJJJJJKKKKKKKKLLLLLLLLMMMMMMMMNNNNNNOOOOOOOOPPPPPPPPQQQQQQQQRRRRRRRRSSSSSSSSTTTTTTTTUUUUUUUUVVVVVVVVVVWWWWWWWWXXXXXXXXXXYYYYYYYYZZZZZZZZZZ[[[[[[[[[[\\\\\\\\\\]]]]]]]]]]]]^^^^^^^^^^^^____________````````````````aaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbccccccccII //;;;;::::::::9999998888888877777766666666555555444444443333332222222211111100000000////////........------,,,,,,,,++++++++********))))))))((((((((''''''''''&&&&&&&&%%%%%%%%$$$$$$$$$$########""""""""""!!!!!!!! @@AAAAAABBBBBBBBCCCCCCDDDDDDDDEEEEEEEEFFFFFFGGGGGGGGHHHHHHHHIIIIIIJJJJJJJJKKKKKKKKLLLLLLMMMMMMMMNNNNNNNNOOOOOOPPPPPPPPQQQQQQQQRRRRRRRRSSSSSSSSTTTTTTTTUUUUUUUUVVVVVVVVWWWWWWWWWWXXXXXXXXYYYYYYYYYYZZZZZZZZ[[[[[[[[[[\\\\\\\\\\]]]]]]]]]]]]^^^^^^^^^^____________``````````````aaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbccccccccccccccccccccccddddddFF!!;;<<<<;;;;;;::::::::9999998888887777777766666655555555444444333333332222222211111100000000////////........------,,,,,,,,++++++++********))))))))((((((((''''''''&&&&&&&&&&%%%%%%%%$$$$$$$$##########""""""""""!!!!!!!! AAAABBBBBBBBCCCCCCDDDDDDDDEEEEEEFFFFFFFFGGGGGGGGHHHHHHIIIIIIIIJJJJJJKKKKKKKKLLLLLLLLMMMMMMNNNNNNNNOOOOOOOOPPPPPPPPQQQQQQRRRRRRRRSSSSSSSSTTTTTTTTUUUUUUUUVVVVVVVVWWWWWWWWWWXXXXXXXXYYYYYYYYZZZZZZZZZZ[[[[[[[[[[\\\\\\\\\\]]]]]]]]]]^^^^^^^^^^____________````````````aaaaaaaaaaaaaabbbbbbbbbbbbbbccccccccccccccccccddddddddddddddddddddddeeeeeeEE77====<<<<<<<<;;;;;;::::::999999998888887777777766666655555555444444333333332222222211111100000000////////......--------,,,,,,,,++++++++********))))))))((((((((''''''''&&&&&&&&&&%%%%%%%%$$$$$$$$##########""""""""!!!!!!!!!! BBBBBBCCCCCCCCDDDDDDEEEEEEEEFFFFFFFFGGGGGGHHHHHHHHIIIIIIJJJJJJJJKKKKKKKKLLLLLLMMMMMMMMNNNNNNNNOOOOOOPPPPPPPPQQQQQQQQRRRRRRRRSSSSSSTTTTTTTTUUUUUUUUVVVVVVVVWWWWWWWWWWXXXXXXXXYYYYYYYYZZZZZZZZZZ[[[[[[[[\\\\\\\\\\]]]]]]]]]]^^^^^^^^^^__________````````````aaaaaaaaaaaaaabbbbbbbbbbbbccccccccccccccccddddddddddddddddddeeeeeeeeeeeeeeeeeeeeeeeeeeeeJJ11>>>>>>======<<<<<<<<;;;;;;::::::999999998888887777777766666655555555444444333333332222221111111100000000//////........--------,,,,,,,,++++++++********))))))))((((((((''''''''&&&&&&&&%%%%%%%%%%$$$$$$$$##########""""""""!!!!!!!!!!BBCCCCCCCCDDDDDDEEEEEEEEFFFFFFGGGGGGGGHHHHHHIIIIIIIIJJJJJJJJKKKKKKLLLLLLLLMMMMMMNNNNNNNNOOOOOOOOPPPPPPQQQQQQQQRRRRRRRRSSSSSSSSTTTTTTTTUUUUUUUUVVVVVVWWWWWWWWWWXXXXXXXXYYYYYYYYZZZZZZZZ[[[[[[[[[[\\\\\\\\]]]]]]]]]]^^^^^^^^^^__________````````````aaaaaaaaaaaabbbbbbbbbbbbccccccccccccccddddddddddddddddeeeeeeeeeeeeeeeeeeeeffffffffffffffffffffffffffRR$$ ,,????????>>>>>>======<<<<<<<<;;;;;;::::::999999998888887777777766666655555555444444333333332222221111111100000000//////........--------,,,,,,,,++++++++********))))))))((((((((''''''''&&&&&&&&%%%%%%%%$$$$$$$$$$########""""""""""!!!!!!CCCCDDDDDDDDEEEEEEFFFFFFFFGGGGGGGGHHHHHHIIIIIIIIJJJJJJKKKKKKKKLLLLLLMMMMMMMMNNNNNNNNOOOOOOPPPPPPPPQQQQQQQQRRRRRRSSSSSSSSTTTTTTTTUUUUUUUUVVVVVVVVWWWWWWWWXXXXXXXXYYYYYYYYZZZZZZZZ[[[[[[[[\\\\\\\\\\]]]]]]]]]]^^^^^^^^__________````````````aaaaaaaaaabbbbbbbbbbbbccccccccccccccddddddddddddddeeeeeeeeeeeeeeeeffffffffffffffffffffffgggggggggggggggggggggggg\\00 **@@@@@@@@??????>>>>>>>>======<<<<<<;;;;;;;;::::::9999999988888877777766666666555555444444443333332222222211111111000000////////........--------,,,,,,++++++++********))))))))((((((((((''''''''&&&&&&&&%%%%%%%%$$$$$$$$$$########""""""""""!!DDDDDDDDEEEEEEFFFFFFFFGGGGGGHHHHHHHHIIIIIIJJJJJJJJKKKKKKLLLLLLLLMMMMMMNNNNNNNNOOOOOOOOPPPPPPQQQQQQQQRRRRRRRRSSSSSSTTTTTTTTUUUUUUUUVVVVVVVVWWWWWWWWXXXXXXXXYYYYYYYYZZZZZZZZ[[[[[[[[\\\\\\\\\\]]]]]]]]^^^^^^^^^^__________``````````aaaaaaaaaabbbbbbbbbbbbccccccccccccddddddddddddeeeeeeeeeeeeeeeeffffffffffffffffgggggggggggggggggggggghhhhhhhhhhhhhhhhhhhhhhhheeAA ,,AABBAAAAAA@@@@@@??????>>>>>>>>======<<<<<<;;;;;;;;::::::9999998888888877777766666666555555444444443333332222222211111100000000////////........------,,,,,,,,++++++++********))))))))((((((((''''''''&&&&&&&&&&%%%%%%%%$$$$$$$$##########""""""""DDEEEEEEEEFFFFFFGGGGGGGGHHHHHHIIIIIIIIJJJJJJKKKKKKKKLLLLLLLLMMMMMMNNNNNNNNOOOOOOPPPPPPPPQQQQQQRRRRRRRRSSSSSSSSTTTTTTUUUUUUUUVVVVVVVVWWWWWWWWXXXXXXXXYYYYYYYYZZZZZZZZ[[[[[[[[\\\\\\\\]]]]]]]]]]^^^^^^^^__________``````````aaaaaaaaaabbbbbbbbbbccccccccccccddddddddddddeeeeeeeeeeeeeeffffffffffffffffgggggggggggggggggghhhhhhhhhhhhhhhhhhhhhhhhiiiiiiiiiiiiiiiiiiiiiiVV--22CCCCBBBBBBAAAAAAAA@@@@@@??????>>>>>>>>======<<<<<<;;;;;;::::::::9999998888888877777766666655555555444444333333332222222211111100000000////////......--------,,,,,,,,++++++++********))))))))((((((((''''''''&&&&&&&&&&%%%%%%%%$$$$$$$$##########""""EEEEEEFFFFFFGGGGGGGGHHHHHHIIIIIIIIJJJJJJKKKKKKKKLLLLLLMMMMMMMMNNNNNNOOOOOOOOPPPPPPQQQQQQQQRRRRRRRRSSSSSSTTTTTTTTUUUUUUUUVVVVVVWWWWWWWWXXXXXXXXYYYYYYYYZZZZZZZZ[[[[[[[[\\\\\\\\]]]]]]]]]]^^^^^^^^__________````````aaaaaaaaaabbbbbbbbbbccccccccccccddddddddddddeeeeeeeeeeeeffffffffffffffgggggggggggggggghhhhhhhhhhhhhhhhhhiiiiiiiiiiiiiiiiiiiiiiiiiijjjjjjjjjjjjjjjjjjjjggEE::DDDDDDCCCCCCBBBBBBAAAAAAAA@@@@@@??????>>>>>>========<<<<<<;;;;;;::::::::9999998888887777777766666655555555444444333333332222221111111100000000//////........--------,,,,,,,,++++++++********))))))))((((((((''''''''&&&&&&&&%%%%%%%%%%$$$$$$$$##########EEFFFFFFGGGGGGGGHHHHHHIIIIIIJJJJJJJJKKKKKKLLLLLLLLMMMMMMNNNNNNNNOOOOOOPPPPPPPPQQQQQQRRRRRRRRSSSSSSSSTTTTTTUUUUUUUUVVVVVVVVWWWWWWWWXXXXXXYYYYYYYYZZZZZZZZ[[[[[[[[\\\\\\\\]]]]]]]]^^^^^^^^^^________``````````aaaaaaaaaabbbbbbbbbbccccccccccddddddddddeeeeeeeeeeeeffffffffffffffgggggggggggggghhhhhhhhhhhhhhhhiiiiiiiiiiiiiiiiiiiijjjjjjjjjjjjjjjjjjjjjjjjjjjjjjkkkkkkkkkkkkkkkkaa<< ))BBEEEEEEEEDDDDDDCCCCCCBBBBBBAAAAAA@@@@@@@@??????>>>>>>========<<<<<<;;;;;;::::::9999999988888877777777666666555555554444443333333322222211111111000000////////........--------,,,,,,,,++++++********))))))))((((((((((''''''''&&&&&&&&%%%%%%%%$$$$$$$$$$######FFFFGGGGGGHHHHHHHHIIIIIIJJJJJJJJKKKKKKLLLLLLLLMMMMMMNNNNNNNNOOOOOOPPPPPPPPQQQQQQRRRRRRRRSSSSSSTTTTTTTTUUUUUUVVVVVVVVWWWWWWWWXXXXXXXXYYYYYYZZZZZZZZ[[[[[[[[\\\\\\\\]]]]]]]]^^^^^^^^^^________````````aaaaaaaaaabbbbbbbbbbccccccccccddddddddddeeeeeeeeeeeeffffffffffffgggggggggggghhhhhhhhhhhhhhhhiiiiiiiiiiiiiiiijjjjjjjjjjjjjjjjjjjjjjkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkllllllllll\\7799GGGGFFFFFFEEEEEEEEDDDDDDCCCCCCBBBBBBAAAAAA@@@@@@@@??????>>>>>>======<<<<<<<<;;;;;;::::::9999999988888877777766666666555555444444443333332222222211111111000000////////........------,,,,,,,,++++++++********))))))))((((((((''''''''''&&&&&&&&%%%%%%%%$$$$$$$$$$##GGGGGGHHHHHHHHIIIIIIJJJJJJKKKKKKKKLLLLLLMMMMMMMMNNNNNNOOOOOOOOPPPPPPQQQQQQQQRRRRRRSSSSSSSSTTTTTTUUUUUUUUVVVVVVVVWWWWWWXXXXXXXXYYYYYYYYZZZZZZZZ[[[[[[\\\\\\\\]]]]]]]]^^^^^^^^^^________````````aaaaaaaaaabbbbbbbbccccccccccddddddddddeeeeeeeeeeeeffffffffffgggggggggggghhhhhhhhhhhhhhiiiiiiiiiiiiiiiijjjjjjjjjjjjjjjjkkkkkkkkkkkkkkkkkkkkkkkkllllllllllllllllllllllllllllllllllllllllllllll[[8811FFHHHHHHGGGGGGFFFFFFEEEEEEDDDDDDDDCCCCCCBBBBBBAAAAAA@@@@@@????????>>>>>>======<<<<<<;;;;;;;;::::::9999998888888877777766666666555555444444443333332222222211111100000000////////......--------,,,,,,,,++++++++********))))))))((((((((''''''''&&&&&&&&&&%%%%%%%%$$$$$$$$GGHHHHHHIIIIIIIIJJJJJJKKKKKKKKLLLLLLMMMMMMMMNNNNNNOOOOOOPPPPPPPPQQQQQQRRRRRRRRSSSSSSTTTTTTTTUUUUUUVVVVVVVVWWWWWWWWXXXXXXYYYYYYYYZZZZZZZZ[[[[[[[[\\\\\\\\]]]]]]]]^^^^^^^^________````````aaaaaaaabbbbbbbbbbccccccccccddddddddeeeeeeeeeeeeffffffffffgggggggggggghhhhhhhhhhhhiiiiiiiiiiiiiijjjjjjjjjjjjjjjjkkkkkkkkkkkkkkkkkkllllllllllllllllllllllllllmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm``>>--EEJJIIIIIIIIHHHHHHGGGGGGFFFFFFEEEEEEDDDDDDCCCCCCCCBBBBBBAAAAAA@@@@@@??????>>>>>>>>======<<<<<<;;;;;;;;::::::9999998888888877777766666655555555444444333333332222221111111100000000//////........--------,,,,,,,,++++++++********))))))))((((((((''''''''&&&&&&&&%%%%%%%%%%$$$$HHHHIIIIIIIIJJJJJJKKKKKKLLLLLLLLMMMMMMNNNNNNNNOOOOOOPPPPPPPPQQQQQQRRRRRRRRSSSSSSTTTTTTTTUUUUUUVVVVVVVVWWWWWWXXXXXXXXYYYYYYYYZZZZZZ[[[[[[[[\\\\\\\\]]]]]]]]^^^^^^^^________````````aaaaaaaabbbbbbbbbbccccccccddddddddddeeeeeeeeeeffffffffffgggggggggghhhhhhhhhhhhiiiiiiiiiiiiiijjjjjjjjjjjjjjkkkkkkkkkkkkkkkkllllllllllllllllllllmmmmmmmmmmmmmmmmmmmmmmmmmmmmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnhhJJ++ //GGKKKKKKJJJJJJIIIIIIIIHHHHHHGGGGGGFFFFFFEEEEEEDDDDDDCCCCCCBBBBBBBBAAAAAA@@@@@@??????>>>>>>========<<<<<<;;;;;;::::::::99999988888877777777666666555555554444443333333322222211111111000000////////........--------,,,,,,,,++++++********))))))))((((((((((''''''''&&&&&&&&%%%%%%%%$$IIIIIIIIJJJJJJKKKKKKLLLLLLLLMMMMMMNNNNNNOOOOOOOOPPPPPPQQQQQQQQRRRRRRSSSSSSSSTTTTTTUUUUUUUUVVVVVVWWWWWWWWXXXXXXYYYYYYYYZZZZZZZZ[[[[[[\\\\\\\\]]]]]]]]^^^^^^^^________````````aaaaaaaabbbbbbbbccccccccccddddddddeeeeeeeeeeffffffffffgggggggggghhhhhhhhhhhhiiiiiiiiiiiijjjjjjjjjjjjkkkkkkkkkkkkkkkkllllllllllllllllmmmmmmmmmmmmmmmmmmmmmmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnoooooooooooooooooooooooooooooooooonn[[<<44JJMMMMLLLLLLKKKKKKJJJJJJIIIIIIHHHHHHHHGGGGGGFFFFFFEEEEEEDDDDDDCCCCCCBBBBBBAAAAAAAA@@@@@@??????>>>>>>========<<<<<<;;;;;;::::::9999999988888877777766666666555555444444443333332222222211111100000000////////........------,,,,,,,,++++++++********))))))))((((((((''''''''&&&&&&&&&&%%%%%%IIJJJJJJJJKKKKKKLLLLLLLLMMMMMMNNNNNNOOOOOOOOPPPPPPQQQQQQRRRRRRRRSSSSSSTTTTTTTTUUUUUUVVVVVVVVWWWWWWXXXXXXXXYYYYYYZZZZZZZZ[[[[[[[[\\\\\\]]]]]]]]^^^^^^^^________````````aaaaaaaabbbbbbbbccccccccccddddddddeeeeeeeeeeffffffffgggggggggghhhhhhhhhhhhiiiiiiiiiijjjjjjjjjjjjkkkkkkkkkkkkkkllllllllllllllllmmmmmmmmmmmmmmmmnnnnnnnnnnnnnnnnnnnnnnnnoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooollSS88))@@NNOONNNNNNMMMMMMLLLLLLKKKKKKJJJJJJIIIIIIHHHHHHGGGGGGGGFFFFFFEEEEEEDDDDDDCCCCCCBBBBBBAAAAAA@@@@@@@@??????>>>>>>======<<<<<<<<;;;;;;::::::9999998888888877777766666666555555444444443333332222222211111100000000////////......--------,,,,,,,,++++++++********))))))))((((((((''''''''&&&&&&&&%%%%JJJJJJKKKKKKLLLLLLMMMMMMMMNNNNNNOOOOOOPPPPPPPPQQQQQQRRRRRRRRSSSSSSTTTTTTUUUUUUUUVVVVVVWWWWWWWWXXXXXXYYYYYYYYZZZZZZZZ[[[[[[\\\\\\\\]]]]]]]]^^^^^^________````````aaaaaaaabbbbbbbbccccccccccddddddddeeeeeeeeffffffffffgggggggggghhhhhhhhhhiiiiiiiiiijjjjjjjjjjjjkkkkkkkkkkkkllllllllllllllmmmmmmmmmmmmmmmmnnnnnnnnnnnnnnnnnnooooooooooooooooooooooooooppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppllTT88 %%::NNPPPPPPOOOOOOOONNNNNNMMMMMMLLLLLLKKKKKKJJJJJJIIIIIIHHHHHHGGGGGGFFFFFFFFEEEEEEDDDDDDCCCCCCBBBBBBAAAAAA@@@@@@????????>>>>>>======<<<<<<;;;;;;;;::::::9999998888888877777766666655555555444444333333332222221111111100000000//////........--------,,,,,,,,++++++++********))))))))((((((((''''''''&&&&&&&&JJKKKKKKLLLLLLMMMMMMMMNNNNNNOOOOOOPPPPPPPPQQQQQQRRRRRRSSSSSSSSTTTTTTUUUUUUUUVVVVVVWWWWWWWWXXXXXXYYYYYYYYZZZZZZ[[[[[[[[\\\\\\]]]]]]]]^^^^^^^^________``````aaaaaaaabbbbbbbbccccccccccddddddddeeeeeeeeffffffffffgggggggghhhhhhhhhhiiiiiiiiiijjjjjjjjjjjjkkkkkkkkkkkkllllllllllllmmmmmmmmmmmmmmnnnnnnnnnnnnnnnnooooooooooooooooooooppppppppppppppppppppppppppppqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqppppoo]]DD++((;;NNRRRRRRQQQQQQPPPPPPOOOOOONNNNNNNNMMMMMMLLLLLLKKKKKKJJJJJJIIIIIIHHHHHHGGGGGGFFFFFFEEEEEEDDDDDDDDCCCCCCBBBBBBAAAAAA@@@@@@??????>>>>>>>>======<<<<<<;;;;;;::::::::99999988888877777777666666555555444444443333332222222211111111000000////////........------,,,,,,,,++++++++********))))))))((((((((''''''''''&&&&KKKKLLLLLLMMMMMMNNNNNNNNOOOOOOPPPPPPQQQQQQQQRRRRRRSSSSSSSSTTTTTTUUUUUUVVVVVVVVWWWWWWXXXXXXXXYYYYYYZZZZZZZZ[[[[[[\\\\\\\\]]]]]]^^^^^^^^________````````aaaaaaaabbbbbbbbccccccccddddddddeeeeeeeeffffffffgggggggggghhhhhhhhhhiiiiiiiiiijjjjjjjjjjkkkkkkkkkkllllllllllllmmmmmmmmmmmmmmnnnnnnnnnnnnnnooooooooooooooooppppppppppppppppppppppqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrqqqqqqqqqqqqqqqqqqqqqqqqqqqqkkUU==(( 22CCSSTTTTTTSSSSSSRRRRRRQQQQQQPPPPPPOOOOOONNNNNNMMMMMMMMLLLLLLKKKKKKJJJJJJIIIIIIHHHHHHGGGGGGFFFFFFEEEEEEDDDDDDCCCCCCBBBBBBBBAAAAAA@@@@@@??????>>>>>>======<<<<<<<<;;;;;;::::::9999999988888877777766666666555555444444443333332222222211111100000000////////......--------,,,,,,,,++++++++********))))))))((((((((''''''''&&LLLLLLMMMMMMNNNNNNNNOOOOOOPPPPPPQQQQQQQQRRRRRRSSSSSSTTTTTTTTUUUUUUVVVVVVWWWWWWWWXXXXXXYYYYYYYYZZZZZZ[[[[[[[[\\\\\\]]]]]]]]^^^^^^^^______````````aaaaaaaabbbbbbbbccccccccddddddddeeeeeeeeffffffffgggggggggghhhhhhhhiiiiiiiiiijjjjjjjjjjkkkkkkkkkkllllllllllllmmmmmmmmmmmmnnnnnnnnnnnnooooooooooooooooppppppppppppppppppqqqqqqqqqqqqqqqqqqqqqqrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrqqqqqqqqkkXXCC.. 11BBRRVVVVVVVVUUUUUUTTTTTTSSSSSSRRRRRRQQQQQQPPPPPPOOOOOONNNNNNMMMMMMLLLLLLKKKKKKKKJJJJJJIIIIIIHHHHHHGGGGGGFFFFFFEEEEEEDDDDDDCCCCCCBBBBBBAAAAAA@@@@@@@@??????>>>>>>======<<<<<<;;;;;;;;::::::9999998888888877777766666655555555444444333333332222221111111100000000//////........--------,,,,,,,,++++++++********))))))))((((((((''''''LLMMMMMMNNNNNNNNOOOOOOPPPPPPQQQQQQQQRRRRRRSSSSSSTTTTTTTTUUUUUUVVVVVVWWWWWWWWXXXXXXYYYYYYZZZZZZZZ[[[[[[\\\\\\\\]]]]]]^^^^^^^^________``````aaaaaaaabbbbbbbbccccccccddddddddeeeeeeeeffffffffgggggggghhhhhhhhhhiiiiiiiijjjjjjjjjjkkkkkkkkkkllllllllllllmmmmmmmmmmnnnnnnnnnnnnnnooooooooooooppppppppppppppppqqqqqqqqqqqqqqqqqqrrrrrrrrrrrrrrrrrrrrrrrrrrssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssrrrrrrrrrrrrrrrrrrrrrrrrrrqqeeRR??--  **::IIWWYYXXXXXXWWWWWWVVVVVVVVUUUUUUTTTTTTSSSSSSRRRRRRQQQQQQPPPPPPOOOOOONNNNNNMMMMMMLLLLLLKKKKKKJJJJJJIIIIIIHHHHHHHHGGGGGGFFFFFFEEEEEEDDDDDDCCCCCCBBBBBBAAAAAA@@@@@@??????>>>>>>>>======<<<<<<;;;;;;::::::::99999988888877777777666666555555444444443333332222222211111111000000////////........--------,,,,,,++++++++********))))))))((((((((''''MMMMNNNNNNNNOOOOOOPPPPPPQQQQQQRRRRRRRRSSSSSSTTTTTTUUUUUUUUVVVVVVWWWWWWXXXXXXXXYYYYYYZZZZZZZZ[[[[[[\\\\\\\\]]]]]]^^^^^^^^______````````aaaaaaaabbbbbbccccccccddddddddeeeeeeeeffffffffgggggggghhhhhhhhhhiiiiiiiijjjjjjjjjjkkkkkkkkkkllllllllllmmmmmmmmmmnnnnnnnnnnnnooooooooooooppppppppppppppqqqqqqqqqqqqqqqqrrrrrrrrrrrrrrrrrrrrssssssssssssssssssssssssssssssttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttssssssssssssssssssssssssssssssrrrrrrrrrrrrrrrrrrrrjjZZJJ99++  + +$$11??LLYY[[[[[[ZZZZZZYYYYYYXXXXXXWWWWWWVVVVVVVVUUUUUUTTTTTTSSSSSSRRRRRRQQQQQQPPPPPPOOOOOONNNNNNMMMMMMLLLLLLKKKKKKJJJJJJIIIIIIHHHHHHGGGGGGFFFFFFEEEEEEDDDDDDDDCCCCCCBBBBBBAAAAAA@@@@@@??????>>>>>>========<<<<<<;;;;;;::::::9999999988888877777766666666555555444444443333332222222211111100000000////////......--------,,,,,,,,++++++++********))))))))((((((((NNNNNNOOOOOOOOPPPPPPQQQQQQRRRRRRRRSSSSSSTTTTTTUUUUUUUUVVVVVVWWWWWWXXXXXXXXYYYYYYZZZZZZ[[[[[[[[\\\\\\]]]]]]]]^^^^^^________``````aaaaaaaabbbbbbbbccccccddddddddeeeeeeeeffffffffgggggggghhhhhhhhhhiiiiiiiijjjjjjjjkkkkkkkkkkllllllllllmmmmmmmmmmnnnnnnnnnnnnooooooooooooppppppppppppqqqqqqqqqqqqqqrrrrrrrrrrrrrrrrrrssssssssssssssssssssttttttttttttttttttttttttttttttttttttttttuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuttttttttttttttttttttttttttttttttttttttssssssssssssssssssssrrrrrrrrrrrrrrrrqqqqooaaTTFF88--  + +##//::EEQQ\\^^^^]]]]]]\\\\\\\\[[[[[[ZZZZZZYYYYYYXXXXXXWWWWWWVVVVVVVVUUUUUUTTTTTTSSSSSSRRRRRRQQQQQQPPPPPPOOOOOONNNNNNMMMMMMLLLLLLKKKKKKJJJJJJIIIIIIHHHHHHGGGGGGFFFFFFEEEEEEDDDDDDCCCCCCBBBBBBAAAAAAAA@@@@@@??????>>>>>>======<<<<<<;;;;;;;;::::::9999998888888877777766666655555555444444333333332222221111111100000000//////........--------,,,,,,,,++++++++********))))))))((((NNOOOOOOOOPPPPPPQQQQQQRRRRRRRRSSSSSSTTTTTTUUUUUUVVVVVVVVWWWWWWXXXXXXYYYYYYYYZZZZZZ[[[[[[\\\\\\\\]]]]]]^^^^^^^^______````````aaaaaabbbbbbbbccccccccddddddddeeeeeeffffffffgggggggghhhhhhhhhhiiiiiiiijjjjjjjjkkkkkkkkkkllllllllllmmmmmmmmnnnnnnnnnnnnooooooooooppppppppppppqqqqqqqqqqqqqqrrrrrrrrrrrrrrssssssssssssssssssttttttttttttttttttttttttuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuttttttttttttttttttttttttssssssssssssssssrrrrrrrrrrrrrrrrqqqqqqqqqqooddZZPPEE==44**##  ""**22::BBKKTT]]aaaaaa````````______^^^^^^]]]]]]]]\\\\\\[[[[[[ZZZZZZYYYYYYXXXXXXWWWWWWVVVVVVUUUUUUUUTTTTTTSSSSSSRRRRRRQQQQQQPPPPPPOOOOOONNNNNNMMMMMMLLLLLLKKKKKKJJJJJJIIIIIIHHHHHHGGGGGGFFFFFFEEEEEEDDDDDDCCCCCCBBBBBBAAAAAA@@@@@@????????>>>>>>======<<<<<<;;;;;;::::::::99999988888877777777666666555555444444443333332222222211111111000000////////........------,,,,,,,,++++++++********))))))))((OOOOOOPPPPPPQQQQQQRRRRRRSSSSSSSSTTTTTTUUUUUUVVVVVVVVWWWWWWXXXXXXYYYYYYZZZZZZZZ[[[[[[\\\\\\\\]]]]]]^^^^^^________``````aaaaaaaabbbbbbbbccccccddddddddeeeeeeeeffffffffgggggggghhhhhhhhiiiiiiiijjjjjjjjkkkkkkkkkkllllllllmmmmmmmmmmnnnnnnnnnnooooooooooppppppppppppqqqqqqqqqqqqrrrrrrrrrrrrrrssssssssssssssssttttttttttttttttttuuuuuuuuuuuuuuuuuuuuuuuuuuvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvuuuuuuuuuuuuuuuuuuuuuuuuuuttttttttttttttttttssssssssssssssssrrrrrrrrrrrrqqqqqqqqqqqqppppppppppppoooonnhhaa[[VVQQMMHHEE@@==;;8866331100//........////1122446699;;==AAEEJJLLRRVV\\aaeeeeeeeeeeddddddccccccccbbbbbbaaaaaaaa``````______^^^^^^]]]]]]]]\\\\\\[[[[[[ZZZZZZYYYYYYXXXXXXWWWWWWVVVVVVUUUUUUTTTTTTSSSSSSRRRRRRQQQQQQPPPPPPOOOOOONNNNNNMMMMMMLLLLLLKKKKKKJJJJJJIIIIIIIIHHHHHHGGGGGGFFFFFFEEEEEEDDDDDDCCCCCCBBBBBBAAAAAA@@@@@@??????>>>>>>========<<<<<<;;;;;;::::::9999999988888877777766666666555555444444443333332222222211111100000000////////......--------,,,,,,,,++++++++********))))))OOPPPPPPQQQQQQRRRRRRSSSSSSSSTTTTTTUUUUUUVVVVVVWWWWWWWWXXXXXXYYYYYYZZZZZZZZ[[[[[[\\\\\\]]]]]]]]^^^^^^________``````aaaaaaaabbbbbbccccccccddddddeeeeeeeeffffffffgggggggghhhhhhhhiiiiiiiijjjjjjjjkkkkkkkkllllllllllmmmmmmmmnnnnnnnnnnooooooooooppppppppppppqqqqqqqqqqqqrrrrrrrrrrrrssssssssssssssttttttttttttttttuuuuuuuuuuuuuuuuuuuuvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvuuuuuuuuuuuuuuuuuuuuttttttttttttttttssssssssssssrrrrrrrrrrrrrrqqqqqqqqqqppppppppppoooooooooonnnnnnnnnnmmmmmmmmllllllllllkkkkkkkkjjjjjjjjiiiiiiiihhhhhhggggggggffffffffeeeeeeddddddddccccccbbbbbbbbaaaaaa``````______^^^^^^^^]]]]]]\\\\\\[[[[[[ZZZZZZYYYYYYXXXXXXWWWWWWVVVVVVUUUUUUTTTTTTSSSSSSRRRRRRQQQQQQPPPPPPOOOOOONNNNNNMMMMMMLLLLLLKKKKKKJJJJJJIIIIIIHHHHHHGGGGGGFFFFFFEEEEEEDDDDDDCCCCCCBBBBBBBBAAAAAA@@@@@@??????>>>>>>======<<<<<<;;;;;;;;::::::99999988888888777777666666555555554444443333333322222211111111000000////////........--------,,,,,,,,++++++++********))PPPPQQQQQQRRRRRRSSSSSSSSTTTTTTUUUUUUVVVVVVWWWWWWWWXXXXXXYYYYYYZZZZZZ[[[[[[[[\\\\\\]]]]]]^^^^^^^^______````````aaaaaabbbbbbbbccccccddddddddeeeeeeeeffffffgggggggghhhhhhhhiiiiiiiijjjjjjjjkkkkkkkkllllllllllmmmmmmmmnnnnnnnnnnooooooooooppppppppppqqqqqqqqqqrrrrrrrrrrrrssssssssssssssttttttttttttttuuuuuuuuuuuuuuuuuuvvvvvvvvvvvvvvvvvvvvwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwxxxxxxxxxxxxxxxxwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwvvvvvvvvvvvvvvvvvvvvvvuuuuuuuuuuuuuuuuttttttttttttttttssssssssssssrrrrrrrrrrrrqqqqqqqqqqppppppppppoooooooooonnnnnnnnmmmmmmmmllllllllllkkkkkkkkjjjjjjiiiiiiiihhhhhhhhggggggggffffffeeeeeeeeddddddccccccbbbbbbbbaaaaaa``````______^^^^^^^^]]]]]]\\\\\\[[[[[[ZZZZZZYYYYYYXXXXXXWWWWWWVVVVVVUUUUUUTTTTTTSSSSSSRRRRRRQQQQQQPPPPPPOOOOOONNNNNNMMMMMMLLLLLLKKKKKKJJJJJJIIIIIIHHHHHHGGGGGGFFFFFFEEEEEEDDDDDDCCCCCCBBBBBBAAAAAA@@@@@@????????>>>>>>======<<<<<<;;;;;;::::::::99999988888877777777666666555555444444443333332222222211111100000000////////........------,,,,,,,,++++++++********QQQQQQRRRRRRSSSSSSSSTTTTTTUUUUUUVVVVVVWWWWWWXXXXXXXXYYYYYYZZZZZZ[[[[[[[[\\\\\\]]]]]]^^^^^^^^______``````aaaaaaaabbbbbbccccccccddddddeeeeeeeeffffffffgggggggghhhhhhiiiiiiiijjjjjjjjkkkkkkkkllllllllllmmmmmmmmnnnnnnnnnnooooooooppppppppppqqqqqqqqqqrrrrrrrrrrrrssssssssssssttttttttttttttuuuuuuuuuuuuuuvvvvvvvvvvvvvvvvvvwwwwwwwwwwwwwwwwwwwwwwwwxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxwwwwwwwwwwwwwwwwwwwwwwwwvvvvvvvvvvvvvvvvvvuuuuuuuuuuuuuuuuttttttttttttssssssssssssrrrrrrrrrrqqqqqqqqqqppppppppppoooooooooonnnnnnnnmmmmmmmmllllllllkkkkkkkkjjjjjjjjiiiiiiiihhhhhhggggggggffffffeeeeeeeeddddddccccccccbbbbbbaaaaaa``````______^^^^^^^^]]]]]]\\\\\\[[[[[[ZZZZZZYYYYYYXXXXXXWWWWWWVVVVVVUUUUUUTTTTTTSSSSSSRRRRRRQQQQQQPPPPPPOOOOOONNNNNNMMMMMMLLLLLLKKKKKKJJJJJJIIIIIIHHHHHHGGGGGGFFFFFFEEEEEEDDDDDDCCCCCCBBBBBBAAAAAA@@@@@@??????>>>>>>========<<<<<<;;;;;;::::::9999998888888877777766666666555555444444333333332222221111111100000000//////........--------,,,,,,,,++++++++****QQRRRRRRSSSSSSSSTTTTTTUUUUUUVVVVVVWWWWWWXXXXXXXXYYYYYYZZZZZZ[[[[[[\\\\\\\\]]]]]]^^^^^^________``````aaaaaabbbbbbbbccccccddddddddeeeeeeeeffffffgggggggghhhhhhhhiiiiiiiijjjjjjkkkkkkkkllllllllllmmmmmmmmnnnnnnnnooooooooooppppppppppqqqqqqqqqqrrrrrrrrrrssssssssssssttttttttttttuuuuuuuuuuuuuuvvvvvvvvvvvvvvvvwwwwwwwwwwwwwwwwwwxxxxxxxxxxxxxxxxxxxxxxxxxxxxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxxxxxxxxxxxxxxxxxxxxxxxxxxwwwwwwwwwwwwwwwwwwwwvvvvvvvvvvvvvvvvuuuuuuuuuuuuttttttttttttssssssssssssrrrrrrrrrrqqqqqqqqqqppppppppoooooooooonnnnnnnnmmmmmmmmllllllllkkkkkkkkjjjjjjjjiiiiiihhhhhhhhggggggffffffffeeeeeeddddddccccccccbbbbbbaaaaaa``````________^^^^^^]]]]]]\\\\\\[[[[[[ZZZZZZYYYYYYXXXXXXWWWWWWVVVVVVUUUUUUTTTTTTSSSSSSRRRRRRQQQQQQPPPPPPOOOOOONNNNNNMMMMLLLLLLKKKKKKJJJJJJIIIIIIHHHHHHGGGGGGFFFFFFEEEEEEDDDDDDCCCCCCBBBBBBAAAAAAAA@@@@@@??????>>>>>>======<<<<<<;;;;;;;;::::::99999988888877777777666666555555554444443333333322222211111111000000////////........--------,,,,,,++++++++**RRRRSSSSSSSSTTTTTTUUUUUUVVVVVVWWWWWWXXXXXXXXYYYYYYZZZZZZ[[[[[[\\\\\\\\]]]]]]^^^^^^______````````aaaaaabbbbbbbbccccccddddddddeeeeeeffffffffgggggghhhhhhhhiiiiiiiijjjjjjjjkkkkkkkkllllllllmmmmmmmmnnnnnnnnooooooooooppppppppqqqqqqqqqqrrrrrrrrrrssssssssssssttttttttttuuuuuuuuuuuuuuvvvvvvvvvvvvvvwwwwwwwwwwwwwwwwxxxxxxxxxxxxxxxxxxxxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxxxxxxxxxxxxxxxxxxxxwwwwwwwwwwwwwwwwvvvvvvvvvvvvvvuuuuuuuuuuuuuuttttttttttssssssssssrrrrrrrrrrqqqqqqqqqqppppppppoooooooooonnnnnnnnmmmmmmmmllllllllkkkkkkjjjjjjjjiiiiiiiihhhhhhggggggggffffffeeeeeeddddddddccccccbbbbbbaaaaaa``````________^^^^^^]]]]]]\\\\\\[[[[[[ZZZZZZYYYYYYXXXXXXWWWWWWVVVVVVUUUUUUTTTTTTSSSSSSRRRRQQQQQQPPPPPPOOOOOONNNNNNMMMMMMLLLLLLKKKKKKJJJJJJIIIIIIHHHHHHGGGGGGFFFFFFEEEEEEDDDDDDCCCCCCBBBBBBAAAAAA@@@@@@??????>>>>>>>>======<<<<<<;;;;;;::::::9999999988888877777766666666555555444444443333332222222211111100000000////////......--------,,,,,,,,++++++SSSSSSSSTTTTTTUUUUUUVVVVVVWWWWWWXXXXXXXXYYYYYYZZZZZZ[[[[[[\\\\\\]]]]]]]]^^^^^^______````````aaaaaabbbbbbccccccccddddddeeeeeeeeffffffgggggggghhhhhhhhiiiiiijjjjjjjjkkkkkkkkllllllllmmmmmmmmnnnnnnnnooooooooooppppppppqqqqqqqqqqrrrrrrrrrrssssssssssttttttttttuuuuuuuuuuuuvvvvvvvvvvvvvvwwwwwwwwwwwwwwxxxxxxxxxxxxxxxxxxyyyyyyyyyyyyyyyyyyyyyyzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzyyyyyyyyyyyyyyyyyyyyyyxxxxxxxxxxxxxxxxwwwwwwwwwwwwwwvvvvvvvvvvvvvvuuuuuuuuuuuuttttttttttssssssssssrrrrrrrrrrqqqqqqqqppppppppoooooooooonnnnnnnnmmmmmmllllllllkkkkkkkkjjjjjjiiiiiiiihhhhhhggggggggffffffeeeeeeeeddddddccccccbbbbbbaaaaaa``````________^^^^^^]]]]]]\\\\\\[[[[[[ZZZZZZYYYYYYXXXXXXWWWWWWVVVVUUUUUUTTTTTTSSSSSSRRRRRRQQQQQQPPPPPPOOOOOONNNNNNMMMMMMLLLLLLKKKKKKJJJJJJIIIIIIHHHHHHGGGGGGFFFFFFEEEEEEDDDDDDCCCCCCBBBBBBAAAAAA@@@@@@??????>>>>>>======<<<<<<<<;;;;;;::::::9999998888888877777766666655555555444444333333332222221111111100000000//////........--------,,,,,,,,++ \ No newline at end of file diff --git a/external/json.hpp b/external/json.hpp new file mode 100644 index 0000000..92308c5 --- /dev/null +++ b/external/json.hpp @@ -0,0 +1,22100 @@ +/* + __ _____ _____ _____ + __| | __| | | | JSON for Modern C++ +| | |__ | | | | | | version 3.10.5 +|_____|_____|_____|_|___| https://github.com/nlohmann/json + +Licensed under the MIT License . +SPDX-License-Identifier: MIT +Copyright (c) 2013-2022 Niels Lohmann . + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +*/ + +/****************************************************************************\ + * Note on documentation: The source files contain links to the online * + * documentation of the public API at https://json.nlohmann.me. This URL * + * contains the most recent documentation and should also be applicable to * + * previous versions; documentation for deprecated functions is not * + * removed, but marked deprecated. See "Generate documentation" section in * + * file doc/README.md. * +\****************************************************************************/ + +#ifndef INCLUDE_NLOHMANN_JSON_HPP_ +#define INCLUDE_NLOHMANN_JSON_HPP_ + +#define NLOHMANN_JSON_VERSION_MAJOR 3 +#define NLOHMANN_JSON_VERSION_MINOR 10 +#define NLOHMANN_JSON_VERSION_PATCH 5 + +#include // all_of, find, for_each +#include // nullptr_t, ptrdiff_t, size_t +#include // hash, less +#include // initializer_list +#ifndef JSON_NO_IO + #include // istream, ostream +#endif // JSON_NO_IO +#include // random_access_iterator_tag +#include // unique_ptr +#include // accumulate +#include // string, stoi, to_string +#include // declval, forward, move, pair, swap +#include // vector + +// #include + + +#include +#include + +// #include + + +#include // transform +#include // array +#include // forward_list +#include // inserter, front_inserter, end +#include // map +#include // string +#include // tuple, make_tuple +#include // is_arithmetic, is_same, is_enum, underlying_type, is_convertible +#include // unordered_map +#include // pair, declval +#include // valarray + +// #include + + +#include // exception +#include // runtime_error +#include // to_string +#include // vector + +// #include + + +#include // array +#include // size_t +#include // uint8_t +#include // string + +namespace nlohmann +{ +namespace detail +{ +/////////////////////////// +// JSON type enumeration // +/////////////////////////// + +/*! +@brief the JSON type enumeration + +This enumeration collects the different JSON types. It is internally used to +distinguish the stored values, and the functions @ref basic_json::is_null(), +@ref basic_json::is_object(), @ref basic_json::is_array(), +@ref basic_json::is_string(), @ref basic_json::is_boolean(), +@ref basic_json::is_number() (with @ref basic_json::is_number_integer(), +@ref basic_json::is_number_unsigned(), and @ref basic_json::is_number_float()), +@ref basic_json::is_discarded(), @ref basic_json::is_primitive(), and +@ref basic_json::is_structured() rely on it. + +@note There are three enumeration entries (number_integer, number_unsigned, and +number_float), because the library distinguishes these three types for numbers: +@ref basic_json::number_unsigned_t is used for unsigned integers, +@ref basic_json::number_integer_t is used for signed integers, and +@ref basic_json::number_float_t is used for floating-point numbers or to +approximate integers which do not fit in the limits of their respective type. + +@sa see @ref basic_json::basic_json(const value_t value_type) -- create a JSON +value with the default value for a given type + +@since version 1.0.0 +*/ +enum class value_t : std::uint8_t +{ + null, ///< null value + object, ///< object (unordered set of name/value pairs) + array, ///< array (ordered collection of values) + string, ///< string value + boolean, ///< boolean value + number_integer, ///< number value (signed integer) + number_unsigned, ///< number value (unsigned integer) + number_float, ///< number value (floating-point) + binary, ///< binary array (ordered collection of bytes) + discarded ///< discarded by the parser callback function +}; + +/*! +@brief comparison operator for JSON types + +Returns an ordering that is similar to Python: +- order: null < boolean < number < object < array < string < binary +- furthermore, each type is not smaller than itself +- discarded values are not comparable +- binary is represented as a b"" string in python and directly comparable to a + string; however, making a binary array directly comparable with a string would + be surprising behavior in a JSON file. + +@since version 1.0.0 +*/ +inline bool operator<(const value_t lhs, const value_t rhs) noexcept +{ + static constexpr std::array order = {{ + 0 /* null */, 3 /* object */, 4 /* array */, 5 /* string */, + 1 /* boolean */, 2 /* integer */, 2 /* unsigned */, 2 /* float */, + 6 /* binary */ + } + }; + + const auto l_index = static_cast(lhs); + const auto r_index = static_cast(rhs); + return l_index < order.size() && r_index < order.size() && order[l_index] < order[r_index]; +} +} // namespace detail +} // namespace nlohmann + +// #include + + +#include +// #include + + +#include // declval, pair +// #include + + +/* Hedley - https://nemequ.github.io/hedley + * Created by Evan Nemerson + * + * To the extent possible under law, the author(s) have dedicated all + * copyright and related and neighboring rights to this software to + * the public domain worldwide. This software is distributed without + * any warranty. + * + * For details, see . + * SPDX-License-Identifier: CC0-1.0 + */ + +#if !defined(JSON_HEDLEY_VERSION) || (JSON_HEDLEY_VERSION < 15) +#if defined(JSON_HEDLEY_VERSION) + #undef JSON_HEDLEY_VERSION +#endif +#define JSON_HEDLEY_VERSION 15 + +#if defined(JSON_HEDLEY_STRINGIFY_EX) + #undef JSON_HEDLEY_STRINGIFY_EX +#endif +#define JSON_HEDLEY_STRINGIFY_EX(x) #x + +#if defined(JSON_HEDLEY_STRINGIFY) + #undef JSON_HEDLEY_STRINGIFY +#endif +#define JSON_HEDLEY_STRINGIFY(x) JSON_HEDLEY_STRINGIFY_EX(x) + +#if defined(JSON_HEDLEY_CONCAT_EX) + #undef JSON_HEDLEY_CONCAT_EX +#endif +#define JSON_HEDLEY_CONCAT_EX(a,b) a##b + +#if defined(JSON_HEDLEY_CONCAT) + #undef JSON_HEDLEY_CONCAT +#endif +#define JSON_HEDLEY_CONCAT(a,b) JSON_HEDLEY_CONCAT_EX(a,b) + +#if defined(JSON_HEDLEY_CONCAT3_EX) + #undef JSON_HEDLEY_CONCAT3_EX +#endif +#define JSON_HEDLEY_CONCAT3_EX(a,b,c) a##b##c + +#if defined(JSON_HEDLEY_CONCAT3) + #undef JSON_HEDLEY_CONCAT3 +#endif +#define JSON_HEDLEY_CONCAT3(a,b,c) JSON_HEDLEY_CONCAT3_EX(a,b,c) + +#if defined(JSON_HEDLEY_VERSION_ENCODE) + #undef JSON_HEDLEY_VERSION_ENCODE +#endif +#define JSON_HEDLEY_VERSION_ENCODE(major,minor,revision) (((major) * 1000000) + ((minor) * 1000) + (revision)) + +#if defined(JSON_HEDLEY_VERSION_DECODE_MAJOR) + #undef JSON_HEDLEY_VERSION_DECODE_MAJOR +#endif +#define JSON_HEDLEY_VERSION_DECODE_MAJOR(version) ((version) / 1000000) + +#if defined(JSON_HEDLEY_VERSION_DECODE_MINOR) + #undef JSON_HEDLEY_VERSION_DECODE_MINOR +#endif +#define JSON_HEDLEY_VERSION_DECODE_MINOR(version) (((version) % 1000000) / 1000) + +#if defined(JSON_HEDLEY_VERSION_DECODE_REVISION) + #undef JSON_HEDLEY_VERSION_DECODE_REVISION +#endif +#define JSON_HEDLEY_VERSION_DECODE_REVISION(version) ((version) % 1000) + +#if defined(JSON_HEDLEY_GNUC_VERSION) + #undef JSON_HEDLEY_GNUC_VERSION +#endif +#if defined(__GNUC__) && defined(__GNUC_PATCHLEVEL__) + #define JSON_HEDLEY_GNUC_VERSION JSON_HEDLEY_VERSION_ENCODE(__GNUC__, __GNUC_MINOR__, __GNUC_PATCHLEVEL__) +#elif defined(__GNUC__) + #define JSON_HEDLEY_GNUC_VERSION JSON_HEDLEY_VERSION_ENCODE(__GNUC__, __GNUC_MINOR__, 0) +#endif + +#if defined(JSON_HEDLEY_GNUC_VERSION_CHECK) + #undef JSON_HEDLEY_GNUC_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_GNUC_VERSION) + #define JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_GNUC_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_MSVC_VERSION) + #undef JSON_HEDLEY_MSVC_VERSION +#endif +#if defined(_MSC_FULL_VER) && (_MSC_FULL_VER >= 140000000) && !defined(__ICL) + #define JSON_HEDLEY_MSVC_VERSION JSON_HEDLEY_VERSION_ENCODE(_MSC_FULL_VER / 10000000, (_MSC_FULL_VER % 10000000) / 100000, (_MSC_FULL_VER % 100000) / 100) +#elif defined(_MSC_FULL_VER) && !defined(__ICL) + #define JSON_HEDLEY_MSVC_VERSION JSON_HEDLEY_VERSION_ENCODE(_MSC_FULL_VER / 1000000, (_MSC_FULL_VER % 1000000) / 10000, (_MSC_FULL_VER % 10000) / 10) +#elif defined(_MSC_VER) && !defined(__ICL) + #define JSON_HEDLEY_MSVC_VERSION JSON_HEDLEY_VERSION_ENCODE(_MSC_VER / 100, _MSC_VER % 100, 0) +#endif + +#if defined(JSON_HEDLEY_MSVC_VERSION_CHECK) + #undef JSON_HEDLEY_MSVC_VERSION_CHECK +#endif +#if !defined(JSON_HEDLEY_MSVC_VERSION) + #define JSON_HEDLEY_MSVC_VERSION_CHECK(major,minor,patch) (0) +#elif defined(_MSC_VER) && (_MSC_VER >= 1400) + #define JSON_HEDLEY_MSVC_VERSION_CHECK(major,minor,patch) (_MSC_FULL_VER >= ((major * 10000000) + (minor * 100000) + (patch))) +#elif defined(_MSC_VER) && (_MSC_VER >= 1200) + #define JSON_HEDLEY_MSVC_VERSION_CHECK(major,minor,patch) (_MSC_FULL_VER >= ((major * 1000000) + (minor * 10000) + (patch))) +#else + #define JSON_HEDLEY_MSVC_VERSION_CHECK(major,minor,patch) (_MSC_VER >= ((major * 100) + (minor))) +#endif + +#if defined(JSON_HEDLEY_INTEL_VERSION) + #undef JSON_HEDLEY_INTEL_VERSION +#endif +#if defined(__INTEL_COMPILER) && defined(__INTEL_COMPILER_UPDATE) && !defined(__ICL) + #define JSON_HEDLEY_INTEL_VERSION JSON_HEDLEY_VERSION_ENCODE(__INTEL_COMPILER / 100, __INTEL_COMPILER % 100, __INTEL_COMPILER_UPDATE) +#elif defined(__INTEL_COMPILER) && !defined(__ICL) + #define JSON_HEDLEY_INTEL_VERSION JSON_HEDLEY_VERSION_ENCODE(__INTEL_COMPILER / 100, __INTEL_COMPILER % 100, 0) +#endif + +#if defined(JSON_HEDLEY_INTEL_VERSION_CHECK) + #undef JSON_HEDLEY_INTEL_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_INTEL_VERSION) + #define JSON_HEDLEY_INTEL_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_INTEL_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_INTEL_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_INTEL_CL_VERSION) + #undef JSON_HEDLEY_INTEL_CL_VERSION +#endif +#if defined(__INTEL_COMPILER) && defined(__INTEL_COMPILER_UPDATE) && defined(__ICL) + #define JSON_HEDLEY_INTEL_CL_VERSION JSON_HEDLEY_VERSION_ENCODE(__INTEL_COMPILER, __INTEL_COMPILER_UPDATE, 0) +#endif + +#if defined(JSON_HEDLEY_INTEL_CL_VERSION_CHECK) + #undef JSON_HEDLEY_INTEL_CL_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_INTEL_CL_VERSION) + #define JSON_HEDLEY_INTEL_CL_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_INTEL_CL_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_INTEL_CL_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_PGI_VERSION) + #undef JSON_HEDLEY_PGI_VERSION +#endif +#if defined(__PGI) && defined(__PGIC__) && defined(__PGIC_MINOR__) && defined(__PGIC_PATCHLEVEL__) + #define JSON_HEDLEY_PGI_VERSION JSON_HEDLEY_VERSION_ENCODE(__PGIC__, __PGIC_MINOR__, __PGIC_PATCHLEVEL__) +#endif + +#if defined(JSON_HEDLEY_PGI_VERSION_CHECK) + #undef JSON_HEDLEY_PGI_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_PGI_VERSION) + #define JSON_HEDLEY_PGI_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_PGI_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_PGI_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_SUNPRO_VERSION) + #undef JSON_HEDLEY_SUNPRO_VERSION +#endif +#if defined(__SUNPRO_C) && (__SUNPRO_C > 0x1000) + #define JSON_HEDLEY_SUNPRO_VERSION JSON_HEDLEY_VERSION_ENCODE((((__SUNPRO_C >> 16) & 0xf) * 10) + ((__SUNPRO_C >> 12) & 0xf), (((__SUNPRO_C >> 8) & 0xf) * 10) + ((__SUNPRO_C >> 4) & 0xf), (__SUNPRO_C & 0xf) * 10) +#elif defined(__SUNPRO_C) + #define JSON_HEDLEY_SUNPRO_VERSION JSON_HEDLEY_VERSION_ENCODE((__SUNPRO_C >> 8) & 0xf, (__SUNPRO_C >> 4) & 0xf, (__SUNPRO_C) & 0xf) +#elif defined(__SUNPRO_CC) && (__SUNPRO_CC > 0x1000) + #define JSON_HEDLEY_SUNPRO_VERSION JSON_HEDLEY_VERSION_ENCODE((((__SUNPRO_CC >> 16) & 0xf) * 10) + ((__SUNPRO_CC >> 12) & 0xf), (((__SUNPRO_CC >> 8) & 0xf) * 10) + ((__SUNPRO_CC >> 4) & 0xf), (__SUNPRO_CC & 0xf) * 10) +#elif defined(__SUNPRO_CC) + #define JSON_HEDLEY_SUNPRO_VERSION JSON_HEDLEY_VERSION_ENCODE((__SUNPRO_CC >> 8) & 0xf, (__SUNPRO_CC >> 4) & 0xf, (__SUNPRO_CC) & 0xf) +#endif + +#if defined(JSON_HEDLEY_SUNPRO_VERSION_CHECK) + #undef JSON_HEDLEY_SUNPRO_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_SUNPRO_VERSION) + #define JSON_HEDLEY_SUNPRO_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_SUNPRO_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_SUNPRO_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_EMSCRIPTEN_VERSION) + #undef JSON_HEDLEY_EMSCRIPTEN_VERSION +#endif +#if defined(__EMSCRIPTEN__) + #define JSON_HEDLEY_EMSCRIPTEN_VERSION JSON_HEDLEY_VERSION_ENCODE(__EMSCRIPTEN_major__, __EMSCRIPTEN_minor__, __EMSCRIPTEN_tiny__) +#endif + +#if defined(JSON_HEDLEY_EMSCRIPTEN_VERSION_CHECK) + #undef JSON_HEDLEY_EMSCRIPTEN_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_EMSCRIPTEN_VERSION) + #define JSON_HEDLEY_EMSCRIPTEN_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_EMSCRIPTEN_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_EMSCRIPTEN_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_ARM_VERSION) + #undef JSON_HEDLEY_ARM_VERSION +#endif +#if defined(__CC_ARM) && defined(__ARMCOMPILER_VERSION) + #define JSON_HEDLEY_ARM_VERSION JSON_HEDLEY_VERSION_ENCODE(__ARMCOMPILER_VERSION / 1000000, (__ARMCOMPILER_VERSION % 1000000) / 10000, (__ARMCOMPILER_VERSION % 10000) / 100) +#elif defined(__CC_ARM) && defined(__ARMCC_VERSION) + #define JSON_HEDLEY_ARM_VERSION JSON_HEDLEY_VERSION_ENCODE(__ARMCC_VERSION / 1000000, (__ARMCC_VERSION % 1000000) / 10000, (__ARMCC_VERSION % 10000) / 100) +#endif + +#if defined(JSON_HEDLEY_ARM_VERSION_CHECK) + #undef JSON_HEDLEY_ARM_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_ARM_VERSION) + #define JSON_HEDLEY_ARM_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_ARM_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_ARM_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_IBM_VERSION) + #undef JSON_HEDLEY_IBM_VERSION +#endif +#if defined(__ibmxl__) + #define JSON_HEDLEY_IBM_VERSION JSON_HEDLEY_VERSION_ENCODE(__ibmxl_version__, __ibmxl_release__, __ibmxl_modification__) +#elif defined(__xlC__) && defined(__xlC_ver__) + #define JSON_HEDLEY_IBM_VERSION JSON_HEDLEY_VERSION_ENCODE(__xlC__ >> 8, __xlC__ & 0xff, (__xlC_ver__ >> 8) & 0xff) +#elif defined(__xlC__) + #define JSON_HEDLEY_IBM_VERSION JSON_HEDLEY_VERSION_ENCODE(__xlC__ >> 8, __xlC__ & 0xff, 0) +#endif + +#if defined(JSON_HEDLEY_IBM_VERSION_CHECK) + #undef JSON_HEDLEY_IBM_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_IBM_VERSION) + #define JSON_HEDLEY_IBM_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_IBM_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_IBM_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_TI_VERSION) + #undef JSON_HEDLEY_TI_VERSION +#endif +#if \ + defined(__TI_COMPILER_VERSION__) && \ + ( \ + defined(__TMS470__) || defined(__TI_ARM__) || \ + defined(__MSP430__) || \ + defined(__TMS320C2000__) \ + ) +#if (__TI_COMPILER_VERSION__ >= 16000000) + #define JSON_HEDLEY_TI_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000)) +#endif +#endif + +#if defined(JSON_HEDLEY_TI_VERSION_CHECK) + #undef JSON_HEDLEY_TI_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_TI_VERSION) + #define JSON_HEDLEY_TI_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_TI_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_TI_CL2000_VERSION) + #undef JSON_HEDLEY_TI_CL2000_VERSION +#endif +#if defined(__TI_COMPILER_VERSION__) && defined(__TMS320C2000__) + #define JSON_HEDLEY_TI_CL2000_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000)) +#endif + +#if defined(JSON_HEDLEY_TI_CL2000_VERSION_CHECK) + #undef JSON_HEDLEY_TI_CL2000_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_TI_CL2000_VERSION) + #define JSON_HEDLEY_TI_CL2000_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_CL2000_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_TI_CL2000_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_TI_CL430_VERSION) + #undef JSON_HEDLEY_TI_CL430_VERSION +#endif +#if defined(__TI_COMPILER_VERSION__) && defined(__MSP430__) + #define JSON_HEDLEY_TI_CL430_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000)) +#endif + +#if defined(JSON_HEDLEY_TI_CL430_VERSION_CHECK) + #undef JSON_HEDLEY_TI_CL430_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_TI_CL430_VERSION) + #define JSON_HEDLEY_TI_CL430_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_CL430_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_TI_CL430_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_TI_ARMCL_VERSION) + #undef JSON_HEDLEY_TI_ARMCL_VERSION +#endif +#if defined(__TI_COMPILER_VERSION__) && (defined(__TMS470__) || defined(__TI_ARM__)) + #define JSON_HEDLEY_TI_ARMCL_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000)) +#endif + +#if defined(JSON_HEDLEY_TI_ARMCL_VERSION_CHECK) + #undef JSON_HEDLEY_TI_ARMCL_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_TI_ARMCL_VERSION) + #define JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_ARMCL_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_TI_CL6X_VERSION) + #undef JSON_HEDLEY_TI_CL6X_VERSION +#endif +#if defined(__TI_COMPILER_VERSION__) && defined(__TMS320C6X__) + #define JSON_HEDLEY_TI_CL6X_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000)) +#endif + +#if defined(JSON_HEDLEY_TI_CL6X_VERSION_CHECK) + #undef JSON_HEDLEY_TI_CL6X_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_TI_CL6X_VERSION) + #define JSON_HEDLEY_TI_CL6X_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_CL6X_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_TI_CL6X_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_TI_CL7X_VERSION) + #undef JSON_HEDLEY_TI_CL7X_VERSION +#endif +#if defined(__TI_COMPILER_VERSION__) && defined(__C7000__) + #define JSON_HEDLEY_TI_CL7X_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000)) +#endif + +#if defined(JSON_HEDLEY_TI_CL7X_VERSION_CHECK) + #undef JSON_HEDLEY_TI_CL7X_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_TI_CL7X_VERSION) + #define JSON_HEDLEY_TI_CL7X_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_CL7X_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_TI_CL7X_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_TI_CLPRU_VERSION) + #undef JSON_HEDLEY_TI_CLPRU_VERSION +#endif +#if defined(__TI_COMPILER_VERSION__) && defined(__PRU__) + #define JSON_HEDLEY_TI_CLPRU_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000)) +#endif + +#if defined(JSON_HEDLEY_TI_CLPRU_VERSION_CHECK) + #undef JSON_HEDLEY_TI_CLPRU_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_TI_CLPRU_VERSION) + #define JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_CLPRU_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_CRAY_VERSION) + #undef JSON_HEDLEY_CRAY_VERSION +#endif +#if defined(_CRAYC) + #if defined(_RELEASE_PATCHLEVEL) + #define JSON_HEDLEY_CRAY_VERSION JSON_HEDLEY_VERSION_ENCODE(_RELEASE_MAJOR, _RELEASE_MINOR, _RELEASE_PATCHLEVEL) + #else + #define JSON_HEDLEY_CRAY_VERSION JSON_HEDLEY_VERSION_ENCODE(_RELEASE_MAJOR, _RELEASE_MINOR, 0) + #endif +#endif + +#if defined(JSON_HEDLEY_CRAY_VERSION_CHECK) + #undef JSON_HEDLEY_CRAY_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_CRAY_VERSION) + #define JSON_HEDLEY_CRAY_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_CRAY_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_CRAY_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_IAR_VERSION) + #undef JSON_HEDLEY_IAR_VERSION +#endif +#if defined(__IAR_SYSTEMS_ICC__) + #if __VER__ > 1000 + #define JSON_HEDLEY_IAR_VERSION JSON_HEDLEY_VERSION_ENCODE((__VER__ / 1000000), ((__VER__ / 1000) % 1000), (__VER__ % 1000)) + #else + #define JSON_HEDLEY_IAR_VERSION JSON_HEDLEY_VERSION_ENCODE(__VER__ / 100, __VER__ % 100, 0) + #endif +#endif + +#if defined(JSON_HEDLEY_IAR_VERSION_CHECK) + #undef JSON_HEDLEY_IAR_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_IAR_VERSION) + #define JSON_HEDLEY_IAR_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_IAR_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_IAR_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_TINYC_VERSION) + #undef JSON_HEDLEY_TINYC_VERSION +#endif +#if defined(__TINYC__) + #define JSON_HEDLEY_TINYC_VERSION JSON_HEDLEY_VERSION_ENCODE(__TINYC__ / 1000, (__TINYC__ / 100) % 10, __TINYC__ % 100) +#endif + +#if defined(JSON_HEDLEY_TINYC_VERSION_CHECK) + #undef JSON_HEDLEY_TINYC_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_TINYC_VERSION) + #define JSON_HEDLEY_TINYC_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TINYC_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_TINYC_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_DMC_VERSION) + #undef JSON_HEDLEY_DMC_VERSION +#endif +#if defined(__DMC__) + #define JSON_HEDLEY_DMC_VERSION JSON_HEDLEY_VERSION_ENCODE(__DMC__ >> 8, (__DMC__ >> 4) & 0xf, __DMC__ & 0xf) +#endif + +#if defined(JSON_HEDLEY_DMC_VERSION_CHECK) + #undef JSON_HEDLEY_DMC_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_DMC_VERSION) + #define JSON_HEDLEY_DMC_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_DMC_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_DMC_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_COMPCERT_VERSION) + #undef JSON_HEDLEY_COMPCERT_VERSION +#endif +#if defined(__COMPCERT_VERSION__) + #define JSON_HEDLEY_COMPCERT_VERSION JSON_HEDLEY_VERSION_ENCODE(__COMPCERT_VERSION__ / 10000, (__COMPCERT_VERSION__ / 100) % 100, __COMPCERT_VERSION__ % 100) +#endif + +#if defined(JSON_HEDLEY_COMPCERT_VERSION_CHECK) + #undef JSON_HEDLEY_COMPCERT_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_COMPCERT_VERSION) + #define JSON_HEDLEY_COMPCERT_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_COMPCERT_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_COMPCERT_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_PELLES_VERSION) + #undef JSON_HEDLEY_PELLES_VERSION +#endif +#if defined(__POCC__) + #define JSON_HEDLEY_PELLES_VERSION JSON_HEDLEY_VERSION_ENCODE(__POCC__ / 100, __POCC__ % 100, 0) +#endif + +#if defined(JSON_HEDLEY_PELLES_VERSION_CHECK) + #undef JSON_HEDLEY_PELLES_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_PELLES_VERSION) + #define JSON_HEDLEY_PELLES_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_PELLES_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_PELLES_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_MCST_LCC_VERSION) + #undef JSON_HEDLEY_MCST_LCC_VERSION +#endif +#if defined(__LCC__) && defined(__LCC_MINOR__) + #define JSON_HEDLEY_MCST_LCC_VERSION JSON_HEDLEY_VERSION_ENCODE(__LCC__ / 100, __LCC__ % 100, __LCC_MINOR__) +#endif + +#if defined(JSON_HEDLEY_MCST_LCC_VERSION_CHECK) + #undef JSON_HEDLEY_MCST_LCC_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_MCST_LCC_VERSION) + #define JSON_HEDLEY_MCST_LCC_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_MCST_LCC_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_MCST_LCC_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_GCC_VERSION) + #undef JSON_HEDLEY_GCC_VERSION +#endif +#if \ + defined(JSON_HEDLEY_GNUC_VERSION) && \ + !defined(__clang__) && \ + !defined(JSON_HEDLEY_INTEL_VERSION) && \ + !defined(JSON_HEDLEY_PGI_VERSION) && \ + !defined(JSON_HEDLEY_ARM_VERSION) && \ + !defined(JSON_HEDLEY_CRAY_VERSION) && \ + !defined(JSON_HEDLEY_TI_VERSION) && \ + !defined(JSON_HEDLEY_TI_ARMCL_VERSION) && \ + !defined(JSON_HEDLEY_TI_CL430_VERSION) && \ + !defined(JSON_HEDLEY_TI_CL2000_VERSION) && \ + !defined(JSON_HEDLEY_TI_CL6X_VERSION) && \ + !defined(JSON_HEDLEY_TI_CL7X_VERSION) && \ + !defined(JSON_HEDLEY_TI_CLPRU_VERSION) && \ + !defined(__COMPCERT__) && \ + !defined(JSON_HEDLEY_MCST_LCC_VERSION) + #define JSON_HEDLEY_GCC_VERSION JSON_HEDLEY_GNUC_VERSION +#endif + +#if defined(JSON_HEDLEY_GCC_VERSION_CHECK) + #undef JSON_HEDLEY_GCC_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_GCC_VERSION) + #define JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_GCC_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_HAS_ATTRIBUTE) + #undef JSON_HEDLEY_HAS_ATTRIBUTE +#endif +#if \ + defined(__has_attribute) && \ + ( \ + (!defined(JSON_HEDLEY_IAR_VERSION) || JSON_HEDLEY_IAR_VERSION_CHECK(8,5,9)) \ + ) +# define JSON_HEDLEY_HAS_ATTRIBUTE(attribute) __has_attribute(attribute) +#else +# define JSON_HEDLEY_HAS_ATTRIBUTE(attribute) (0) +#endif + +#if defined(JSON_HEDLEY_GNUC_HAS_ATTRIBUTE) + #undef JSON_HEDLEY_GNUC_HAS_ATTRIBUTE +#endif +#if defined(__has_attribute) + #define JSON_HEDLEY_GNUC_HAS_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_HAS_ATTRIBUTE(attribute) +#else + #define JSON_HEDLEY_GNUC_HAS_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_GCC_HAS_ATTRIBUTE) + #undef JSON_HEDLEY_GCC_HAS_ATTRIBUTE +#endif +#if defined(__has_attribute) + #define JSON_HEDLEY_GCC_HAS_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_HAS_ATTRIBUTE(attribute) +#else + #define JSON_HEDLEY_GCC_HAS_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_HAS_CPP_ATTRIBUTE) + #undef JSON_HEDLEY_HAS_CPP_ATTRIBUTE +#endif +#if \ + defined(__has_cpp_attribute) && \ + defined(__cplusplus) && \ + (!defined(JSON_HEDLEY_SUNPRO_VERSION) || JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,15,0)) + #define JSON_HEDLEY_HAS_CPP_ATTRIBUTE(attribute) __has_cpp_attribute(attribute) +#else + #define JSON_HEDLEY_HAS_CPP_ATTRIBUTE(attribute) (0) +#endif + +#if defined(JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS) + #undef JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS +#endif +#if !defined(__cplusplus) || !defined(__has_cpp_attribute) + #define JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS(ns,attribute) (0) +#elif \ + !defined(JSON_HEDLEY_PGI_VERSION) && \ + !defined(JSON_HEDLEY_IAR_VERSION) && \ + (!defined(JSON_HEDLEY_SUNPRO_VERSION) || JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,15,0)) && \ + (!defined(JSON_HEDLEY_MSVC_VERSION) || JSON_HEDLEY_MSVC_VERSION_CHECK(19,20,0)) + #define JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS(ns,attribute) JSON_HEDLEY_HAS_CPP_ATTRIBUTE(ns::attribute) +#else + #define JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS(ns,attribute) (0) +#endif + +#if defined(JSON_HEDLEY_GNUC_HAS_CPP_ATTRIBUTE) + #undef JSON_HEDLEY_GNUC_HAS_CPP_ATTRIBUTE +#endif +#if defined(__has_cpp_attribute) && defined(__cplusplus) + #define JSON_HEDLEY_GNUC_HAS_CPP_ATTRIBUTE(attribute,major,minor,patch) __has_cpp_attribute(attribute) +#else + #define JSON_HEDLEY_GNUC_HAS_CPP_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_GCC_HAS_CPP_ATTRIBUTE) + #undef JSON_HEDLEY_GCC_HAS_CPP_ATTRIBUTE +#endif +#if defined(__has_cpp_attribute) && defined(__cplusplus) + #define JSON_HEDLEY_GCC_HAS_CPP_ATTRIBUTE(attribute,major,minor,patch) __has_cpp_attribute(attribute) +#else + #define JSON_HEDLEY_GCC_HAS_CPP_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_HAS_BUILTIN) + #undef JSON_HEDLEY_HAS_BUILTIN +#endif +#if defined(__has_builtin) + #define JSON_HEDLEY_HAS_BUILTIN(builtin) __has_builtin(builtin) +#else + #define JSON_HEDLEY_HAS_BUILTIN(builtin) (0) +#endif + +#if defined(JSON_HEDLEY_GNUC_HAS_BUILTIN) + #undef JSON_HEDLEY_GNUC_HAS_BUILTIN +#endif +#if defined(__has_builtin) + #define JSON_HEDLEY_GNUC_HAS_BUILTIN(builtin,major,minor,patch) __has_builtin(builtin) +#else + #define JSON_HEDLEY_GNUC_HAS_BUILTIN(builtin,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_GCC_HAS_BUILTIN) + #undef JSON_HEDLEY_GCC_HAS_BUILTIN +#endif +#if defined(__has_builtin) + #define JSON_HEDLEY_GCC_HAS_BUILTIN(builtin,major,minor,patch) __has_builtin(builtin) +#else + #define JSON_HEDLEY_GCC_HAS_BUILTIN(builtin,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_HAS_FEATURE) + #undef JSON_HEDLEY_HAS_FEATURE +#endif +#if defined(__has_feature) + #define JSON_HEDLEY_HAS_FEATURE(feature) __has_feature(feature) +#else + #define JSON_HEDLEY_HAS_FEATURE(feature) (0) +#endif + +#if defined(JSON_HEDLEY_GNUC_HAS_FEATURE) + #undef JSON_HEDLEY_GNUC_HAS_FEATURE +#endif +#if defined(__has_feature) + #define JSON_HEDLEY_GNUC_HAS_FEATURE(feature,major,minor,patch) __has_feature(feature) +#else + #define JSON_HEDLEY_GNUC_HAS_FEATURE(feature,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_GCC_HAS_FEATURE) + #undef JSON_HEDLEY_GCC_HAS_FEATURE +#endif +#if defined(__has_feature) + #define JSON_HEDLEY_GCC_HAS_FEATURE(feature,major,minor,patch) __has_feature(feature) +#else + #define JSON_HEDLEY_GCC_HAS_FEATURE(feature,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_HAS_EXTENSION) + #undef JSON_HEDLEY_HAS_EXTENSION +#endif +#if defined(__has_extension) + #define JSON_HEDLEY_HAS_EXTENSION(extension) __has_extension(extension) +#else + #define JSON_HEDLEY_HAS_EXTENSION(extension) (0) +#endif + +#if defined(JSON_HEDLEY_GNUC_HAS_EXTENSION) + #undef JSON_HEDLEY_GNUC_HAS_EXTENSION +#endif +#if defined(__has_extension) + #define JSON_HEDLEY_GNUC_HAS_EXTENSION(extension,major,minor,patch) __has_extension(extension) +#else + #define JSON_HEDLEY_GNUC_HAS_EXTENSION(extension,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_GCC_HAS_EXTENSION) + #undef JSON_HEDLEY_GCC_HAS_EXTENSION +#endif +#if defined(__has_extension) + #define JSON_HEDLEY_GCC_HAS_EXTENSION(extension,major,minor,patch) __has_extension(extension) +#else + #define JSON_HEDLEY_GCC_HAS_EXTENSION(extension,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_HAS_DECLSPEC_ATTRIBUTE) + #undef JSON_HEDLEY_HAS_DECLSPEC_ATTRIBUTE +#endif +#if defined(__has_declspec_attribute) + #define JSON_HEDLEY_HAS_DECLSPEC_ATTRIBUTE(attribute) __has_declspec_attribute(attribute) +#else + #define JSON_HEDLEY_HAS_DECLSPEC_ATTRIBUTE(attribute) (0) +#endif + +#if defined(JSON_HEDLEY_GNUC_HAS_DECLSPEC_ATTRIBUTE) + #undef JSON_HEDLEY_GNUC_HAS_DECLSPEC_ATTRIBUTE +#endif +#if defined(__has_declspec_attribute) + #define JSON_HEDLEY_GNUC_HAS_DECLSPEC_ATTRIBUTE(attribute,major,minor,patch) __has_declspec_attribute(attribute) +#else + #define JSON_HEDLEY_GNUC_HAS_DECLSPEC_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_GCC_HAS_DECLSPEC_ATTRIBUTE) + #undef JSON_HEDLEY_GCC_HAS_DECLSPEC_ATTRIBUTE +#endif +#if defined(__has_declspec_attribute) + #define JSON_HEDLEY_GCC_HAS_DECLSPEC_ATTRIBUTE(attribute,major,minor,patch) __has_declspec_attribute(attribute) +#else + #define JSON_HEDLEY_GCC_HAS_DECLSPEC_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_HAS_WARNING) + #undef JSON_HEDLEY_HAS_WARNING +#endif +#if defined(__has_warning) + #define JSON_HEDLEY_HAS_WARNING(warning) __has_warning(warning) +#else + #define JSON_HEDLEY_HAS_WARNING(warning) (0) +#endif + +#if defined(JSON_HEDLEY_GNUC_HAS_WARNING) + #undef JSON_HEDLEY_GNUC_HAS_WARNING +#endif +#if defined(__has_warning) + #define JSON_HEDLEY_GNUC_HAS_WARNING(warning,major,minor,patch) __has_warning(warning) +#else + #define JSON_HEDLEY_GNUC_HAS_WARNING(warning,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_GCC_HAS_WARNING) + #undef JSON_HEDLEY_GCC_HAS_WARNING +#endif +#if defined(__has_warning) + #define JSON_HEDLEY_GCC_HAS_WARNING(warning,major,minor,patch) __has_warning(warning) +#else + #define JSON_HEDLEY_GCC_HAS_WARNING(warning,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) +#endif + +#if \ + (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)) || \ + defined(__clang__) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,0,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) || \ + JSON_HEDLEY_PGI_VERSION_CHECK(18,4,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,7,0) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(2,0,1) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,1,0) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,0,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + JSON_HEDLEY_CRAY_VERSION_CHECK(5,0,0) || \ + JSON_HEDLEY_TINYC_VERSION_CHECK(0,9,17) || \ + JSON_HEDLEY_SUNPRO_VERSION_CHECK(8,0,0) || \ + (JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) && defined(__C99_PRAGMA_OPERATOR)) + #define JSON_HEDLEY_PRAGMA(value) _Pragma(#value) +#elif JSON_HEDLEY_MSVC_VERSION_CHECK(15,0,0) + #define JSON_HEDLEY_PRAGMA(value) __pragma(value) +#else + #define JSON_HEDLEY_PRAGMA(value) +#endif + +#if defined(JSON_HEDLEY_DIAGNOSTIC_PUSH) + #undef JSON_HEDLEY_DIAGNOSTIC_PUSH +#endif +#if defined(JSON_HEDLEY_DIAGNOSTIC_POP) + #undef JSON_HEDLEY_DIAGNOSTIC_POP +#endif +#if defined(__clang__) + #define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma("clang diagnostic push") + #define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma("clang diagnostic pop") +#elif JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma("warning(push)") + #define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma("warning(pop)") +#elif JSON_HEDLEY_GCC_VERSION_CHECK(4,6,0) + #define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma("GCC diagnostic push") + #define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma("GCC diagnostic pop") +#elif \ + JSON_HEDLEY_MSVC_VERSION_CHECK(15,0,0) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) + #define JSON_HEDLEY_DIAGNOSTIC_PUSH __pragma(warning(push)) + #define JSON_HEDLEY_DIAGNOSTIC_POP __pragma(warning(pop)) +#elif JSON_HEDLEY_ARM_VERSION_CHECK(5,6,0) + #define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma("push") + #define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma("pop") +#elif \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,4,0) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,1,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) + #define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma("diag_push") + #define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma("diag_pop") +#elif JSON_HEDLEY_PELLES_VERSION_CHECK(2,90,0) + #define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma("warning(push)") + #define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma("warning(pop)") +#else + #define JSON_HEDLEY_DIAGNOSTIC_PUSH + #define JSON_HEDLEY_DIAGNOSTIC_POP +#endif + +/* JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_ is for + HEDLEY INTERNAL USE ONLY. API subject to change without notice. */ +#if defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_) + #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_ +#endif +#if defined(__cplusplus) +# if JSON_HEDLEY_HAS_WARNING("-Wc++98-compat") +# if JSON_HEDLEY_HAS_WARNING("-Wc++17-extensions") +# if JSON_HEDLEY_HAS_WARNING("-Wc++1z-extensions") +# define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(xpr) \ + JSON_HEDLEY_DIAGNOSTIC_PUSH \ + _Pragma("clang diagnostic ignored \"-Wc++98-compat\"") \ + _Pragma("clang diagnostic ignored \"-Wc++17-extensions\"") \ + _Pragma("clang diagnostic ignored \"-Wc++1z-extensions\"") \ + xpr \ + JSON_HEDLEY_DIAGNOSTIC_POP +# else +# define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(xpr) \ + JSON_HEDLEY_DIAGNOSTIC_PUSH \ + _Pragma("clang diagnostic ignored \"-Wc++98-compat\"") \ + _Pragma("clang diagnostic ignored \"-Wc++17-extensions\"") \ + xpr \ + JSON_HEDLEY_DIAGNOSTIC_POP +# endif +# else +# define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(xpr) \ + JSON_HEDLEY_DIAGNOSTIC_PUSH \ + _Pragma("clang diagnostic ignored \"-Wc++98-compat\"") \ + xpr \ + JSON_HEDLEY_DIAGNOSTIC_POP +# endif +# endif +#endif +#if !defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(x) x +#endif + +#if defined(JSON_HEDLEY_CONST_CAST) + #undef JSON_HEDLEY_CONST_CAST +#endif +#if defined(__cplusplus) +# define JSON_HEDLEY_CONST_CAST(T, expr) (const_cast(expr)) +#elif \ + JSON_HEDLEY_HAS_WARNING("-Wcast-qual") || \ + JSON_HEDLEY_GCC_VERSION_CHECK(4,6,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) +# define JSON_HEDLEY_CONST_CAST(T, expr) (__extension__ ({ \ + JSON_HEDLEY_DIAGNOSTIC_PUSH \ + JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL \ + ((T) (expr)); \ + JSON_HEDLEY_DIAGNOSTIC_POP \ + })) +#else +# define JSON_HEDLEY_CONST_CAST(T, expr) ((T) (expr)) +#endif + +#if defined(JSON_HEDLEY_REINTERPRET_CAST) + #undef JSON_HEDLEY_REINTERPRET_CAST +#endif +#if defined(__cplusplus) + #define JSON_HEDLEY_REINTERPRET_CAST(T, expr) (reinterpret_cast(expr)) +#else + #define JSON_HEDLEY_REINTERPRET_CAST(T, expr) ((T) (expr)) +#endif + +#if defined(JSON_HEDLEY_STATIC_CAST) + #undef JSON_HEDLEY_STATIC_CAST +#endif +#if defined(__cplusplus) + #define JSON_HEDLEY_STATIC_CAST(T, expr) (static_cast(expr)) +#else + #define JSON_HEDLEY_STATIC_CAST(T, expr) ((T) (expr)) +#endif + +#if defined(JSON_HEDLEY_CPP_CAST) + #undef JSON_HEDLEY_CPP_CAST +#endif +#if defined(__cplusplus) +# if JSON_HEDLEY_HAS_WARNING("-Wold-style-cast") +# define JSON_HEDLEY_CPP_CAST(T, expr) \ + JSON_HEDLEY_DIAGNOSTIC_PUSH \ + _Pragma("clang diagnostic ignored \"-Wold-style-cast\"") \ + ((T) (expr)) \ + JSON_HEDLEY_DIAGNOSTIC_POP +# elif JSON_HEDLEY_IAR_VERSION_CHECK(8,3,0) +# define JSON_HEDLEY_CPP_CAST(T, expr) \ + JSON_HEDLEY_DIAGNOSTIC_PUSH \ + _Pragma("diag_suppress=Pe137") \ + JSON_HEDLEY_DIAGNOSTIC_POP +# else +# define JSON_HEDLEY_CPP_CAST(T, expr) ((T) (expr)) +# endif +#else +# define JSON_HEDLEY_CPP_CAST(T, expr) (expr) +#endif + +#if defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED) + #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED +#endif +#if JSON_HEDLEY_HAS_WARNING("-Wdeprecated-declarations") + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("clang diagnostic ignored \"-Wdeprecated-declarations\"") +#elif JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("warning(disable:1478 1786)") +#elif JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED __pragma(warning(disable:1478 1786)) +#elif JSON_HEDLEY_PGI_VERSION_CHECK(20,7,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("diag_suppress 1215,1216,1444,1445") +#elif JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("diag_suppress 1215,1444") +#elif JSON_HEDLEY_GCC_VERSION_CHECK(4,3,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"") +#elif JSON_HEDLEY_MSVC_VERSION_CHECK(15,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED __pragma(warning(disable:4996)) +#elif JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("diag_suppress 1215,1444") +#elif \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("diag_suppress 1291,1718") +#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,13,0) && !defined(__cplusplus) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("error_messages(off,E_DEPRECATED_ATT,E_DEPRECATED_ATT_MESS)") +#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,13,0) && defined(__cplusplus) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("error_messages(off,symdeprecated,symdeprecated2)") +#elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("diag_suppress=Pe1444,Pe1215") +#elif JSON_HEDLEY_PELLES_VERSION_CHECK(2,90,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("warn(disable:2241)") +#else + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED +#endif + +#if defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS) + #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS +#endif +#if JSON_HEDLEY_HAS_WARNING("-Wunknown-pragmas") + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("clang diagnostic ignored \"-Wunknown-pragmas\"") +#elif JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("warning(disable:161)") +#elif JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS __pragma(warning(disable:161)) +#elif JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress 1675") +#elif JSON_HEDLEY_GCC_VERSION_CHECK(4,3,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("GCC diagnostic ignored \"-Wunknown-pragmas\"") +#elif JSON_HEDLEY_MSVC_VERSION_CHECK(15,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS __pragma(warning(disable:4068)) +#elif \ + JSON_HEDLEY_TI_VERSION_CHECK(16,9,0) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,0,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,3,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress 163") +#elif JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress 163") +#elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress=Pe161") +#elif JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress 161") +#else + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS +#endif + +#if defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES) + #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES +#endif +#if JSON_HEDLEY_HAS_WARNING("-Wunknown-attributes") + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("clang diagnostic ignored \"-Wunknown-attributes\"") +#elif JSON_HEDLEY_GCC_VERSION_CHECK(4,6,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"") +#elif JSON_HEDLEY_INTEL_VERSION_CHECK(17,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("warning(disable:1292)") +#elif JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES __pragma(warning(disable:1292)) +#elif JSON_HEDLEY_MSVC_VERSION_CHECK(19,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES __pragma(warning(disable:5030)) +#elif JSON_HEDLEY_PGI_VERSION_CHECK(20,7,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("diag_suppress 1097,1098") +#elif JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("diag_suppress 1097") +#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,14,0) && defined(__cplusplus) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("error_messages(off,attrskipunsup)") +#elif \ + JSON_HEDLEY_TI_VERSION_CHECK(18,1,0) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,3,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("diag_suppress 1173") +#elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("diag_suppress=Pe1097") +#elif JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("diag_suppress 1097") +#else + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES +#endif + +#if defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL) + #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL +#endif +#if JSON_HEDLEY_HAS_WARNING("-Wcast-qual") + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL _Pragma("clang diagnostic ignored \"-Wcast-qual\"") +#elif JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL _Pragma("warning(disable:2203 2331)") +#elif JSON_HEDLEY_GCC_VERSION_CHECK(3,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL _Pragma("GCC diagnostic ignored \"-Wcast-qual\"") +#else + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL +#endif + +#if defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION) + #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION +#endif +#if JSON_HEDLEY_HAS_WARNING("-Wunused-function") + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION _Pragma("clang diagnostic ignored \"-Wunused-function\"") +#elif JSON_HEDLEY_GCC_VERSION_CHECK(3,4,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION _Pragma("GCC diagnostic ignored \"-Wunused-function\"") +#elif JSON_HEDLEY_MSVC_VERSION_CHECK(1,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION __pragma(warning(disable:4505)) +#elif JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION _Pragma("diag_suppress 3142") +#else + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION +#endif + +#if defined(JSON_HEDLEY_DEPRECATED) + #undef JSON_HEDLEY_DEPRECATED +#endif +#if defined(JSON_HEDLEY_DEPRECATED_FOR) + #undef JSON_HEDLEY_DEPRECATED_FOR +#endif +#if \ + JSON_HEDLEY_MSVC_VERSION_CHECK(14,0,0) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) + #define JSON_HEDLEY_DEPRECATED(since) __declspec(deprecated("Since " # since)) + #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) __declspec(deprecated("Since " #since "; use " #replacement)) +#elif \ + (JSON_HEDLEY_HAS_EXTENSION(attribute_deprecated_with_message) && !defined(JSON_HEDLEY_IAR_VERSION)) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(4,5,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(5,6,0) || \ + JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,13,0) || \ + JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(18,1,0) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(18,1,0) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,3,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,3,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_DEPRECATED(since) __attribute__((__deprecated__("Since " #since))) + #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) __attribute__((__deprecated__("Since " #since "; use " #replacement))) +#elif defined(__cplusplus) && (__cplusplus >= 201402L) + #define JSON_HEDLEY_DEPRECATED(since) JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[deprecated("Since " #since)]]) + #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[deprecated("Since " #since "; use " #replacement)]]) +#elif \ + JSON_HEDLEY_HAS_ATTRIBUTE(deprecated) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,1,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) || \ + JSON_HEDLEY_IAR_VERSION_CHECK(8,10,0) + #define JSON_HEDLEY_DEPRECATED(since) __attribute__((__deprecated__)) + #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) __attribute__((__deprecated__)) +#elif \ + JSON_HEDLEY_MSVC_VERSION_CHECK(13,10,0) || \ + JSON_HEDLEY_PELLES_VERSION_CHECK(6,50,0) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) + #define JSON_HEDLEY_DEPRECATED(since) __declspec(deprecated) + #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) __declspec(deprecated) +#elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) + #define JSON_HEDLEY_DEPRECATED(since) _Pragma("deprecated") + #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) _Pragma("deprecated") +#else + #define JSON_HEDLEY_DEPRECATED(since) + #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) +#endif + +#if defined(JSON_HEDLEY_UNAVAILABLE) + #undef JSON_HEDLEY_UNAVAILABLE +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(warning) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(4,3,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_UNAVAILABLE(available_since) __attribute__((__warning__("Not available until " #available_since))) +#else + #define JSON_HEDLEY_UNAVAILABLE(available_since) +#endif + +#if defined(JSON_HEDLEY_WARN_UNUSED_RESULT) + #undef JSON_HEDLEY_WARN_UNUSED_RESULT +#endif +#if defined(JSON_HEDLEY_WARN_UNUSED_RESULT_MSG) + #undef JSON_HEDLEY_WARN_UNUSED_RESULT_MSG +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(warn_unused_result) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,4,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + (JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,15,0) && defined(__cplusplus)) || \ + JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_WARN_UNUSED_RESULT __attribute__((__warn_unused_result__)) + #define JSON_HEDLEY_WARN_UNUSED_RESULT_MSG(msg) __attribute__((__warn_unused_result__)) +#elif (JSON_HEDLEY_HAS_CPP_ATTRIBUTE(nodiscard) >= 201907L) + #define JSON_HEDLEY_WARN_UNUSED_RESULT JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[nodiscard]]) + #define JSON_HEDLEY_WARN_UNUSED_RESULT_MSG(msg) JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[nodiscard(msg)]]) +#elif JSON_HEDLEY_HAS_CPP_ATTRIBUTE(nodiscard) + #define JSON_HEDLEY_WARN_UNUSED_RESULT JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[nodiscard]]) + #define JSON_HEDLEY_WARN_UNUSED_RESULT_MSG(msg) JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[nodiscard]]) +#elif defined(_Check_return_) /* SAL */ + #define JSON_HEDLEY_WARN_UNUSED_RESULT _Check_return_ + #define JSON_HEDLEY_WARN_UNUSED_RESULT_MSG(msg) _Check_return_ +#else + #define JSON_HEDLEY_WARN_UNUSED_RESULT + #define JSON_HEDLEY_WARN_UNUSED_RESULT_MSG(msg) +#endif + +#if defined(JSON_HEDLEY_SENTINEL) + #undef JSON_HEDLEY_SENTINEL +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(sentinel) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(4,0,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(5,4,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_SENTINEL(position) __attribute__((__sentinel__(position))) +#else + #define JSON_HEDLEY_SENTINEL(position) +#endif + +#if defined(JSON_HEDLEY_NO_RETURN) + #undef JSON_HEDLEY_NO_RETURN +#endif +#if JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) + #define JSON_HEDLEY_NO_RETURN __noreturn +#elif \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_NO_RETURN __attribute__((__noreturn__)) +#elif defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L + #define JSON_HEDLEY_NO_RETURN _Noreturn +#elif defined(__cplusplus) && (__cplusplus >= 201103L) + #define JSON_HEDLEY_NO_RETURN JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[noreturn]]) +#elif \ + JSON_HEDLEY_HAS_ATTRIBUTE(noreturn) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,2,0) || \ + JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + JSON_HEDLEY_IAR_VERSION_CHECK(8,10,0) + #define JSON_HEDLEY_NO_RETURN __attribute__((__noreturn__)) +#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,10,0) + #define JSON_HEDLEY_NO_RETURN _Pragma("does_not_return") +#elif \ + JSON_HEDLEY_MSVC_VERSION_CHECK(13,10,0) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) + #define JSON_HEDLEY_NO_RETURN __declspec(noreturn) +#elif JSON_HEDLEY_TI_CL6X_VERSION_CHECK(6,0,0) && defined(__cplusplus) + #define JSON_HEDLEY_NO_RETURN _Pragma("FUNC_NEVER_RETURNS;") +#elif JSON_HEDLEY_COMPCERT_VERSION_CHECK(3,2,0) + #define JSON_HEDLEY_NO_RETURN __attribute((noreturn)) +#elif JSON_HEDLEY_PELLES_VERSION_CHECK(9,0,0) + #define JSON_HEDLEY_NO_RETURN __declspec(noreturn) +#else + #define JSON_HEDLEY_NO_RETURN +#endif + +#if defined(JSON_HEDLEY_NO_ESCAPE) + #undef JSON_HEDLEY_NO_ESCAPE +#endif +#if JSON_HEDLEY_HAS_ATTRIBUTE(noescape) + #define JSON_HEDLEY_NO_ESCAPE __attribute__((__noescape__)) +#else + #define JSON_HEDLEY_NO_ESCAPE +#endif + +#if defined(JSON_HEDLEY_UNREACHABLE) + #undef JSON_HEDLEY_UNREACHABLE +#endif +#if defined(JSON_HEDLEY_UNREACHABLE_RETURN) + #undef JSON_HEDLEY_UNREACHABLE_RETURN +#endif +#if defined(JSON_HEDLEY_ASSUME) + #undef JSON_HEDLEY_ASSUME +#endif +#if \ + JSON_HEDLEY_MSVC_VERSION_CHECK(13,10,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) + #define JSON_HEDLEY_ASSUME(expr) __assume(expr) +#elif JSON_HEDLEY_HAS_BUILTIN(__builtin_assume) + #define JSON_HEDLEY_ASSUME(expr) __builtin_assume(expr) +#elif \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,2,0) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(4,0,0) + #if defined(__cplusplus) + #define JSON_HEDLEY_ASSUME(expr) std::_nassert(expr) + #else + #define JSON_HEDLEY_ASSUME(expr) _nassert(expr) + #endif +#endif +#if \ + (JSON_HEDLEY_HAS_BUILTIN(__builtin_unreachable) && (!defined(JSON_HEDLEY_ARM_VERSION))) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(4,5,0) || \ + JSON_HEDLEY_PGI_VERSION_CHECK(18,10,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(13,1,5) || \ + JSON_HEDLEY_CRAY_VERSION_CHECK(10,0,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_UNREACHABLE() __builtin_unreachable() +#elif defined(JSON_HEDLEY_ASSUME) + #define JSON_HEDLEY_UNREACHABLE() JSON_HEDLEY_ASSUME(0) +#endif +#if !defined(JSON_HEDLEY_ASSUME) + #if defined(JSON_HEDLEY_UNREACHABLE) + #define JSON_HEDLEY_ASSUME(expr) JSON_HEDLEY_STATIC_CAST(void, ((expr) ? 1 : (JSON_HEDLEY_UNREACHABLE(), 1))) + #else + #define JSON_HEDLEY_ASSUME(expr) JSON_HEDLEY_STATIC_CAST(void, expr) + #endif +#endif +#if defined(JSON_HEDLEY_UNREACHABLE) + #if \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,2,0) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(4,0,0) + #define JSON_HEDLEY_UNREACHABLE_RETURN(value) return (JSON_HEDLEY_STATIC_CAST(void, JSON_HEDLEY_ASSUME(0)), (value)) + #else + #define JSON_HEDLEY_UNREACHABLE_RETURN(value) JSON_HEDLEY_UNREACHABLE() + #endif +#else + #define JSON_HEDLEY_UNREACHABLE_RETURN(value) return (value) +#endif +#if !defined(JSON_HEDLEY_UNREACHABLE) + #define JSON_HEDLEY_UNREACHABLE() JSON_HEDLEY_ASSUME(0) +#endif + +JSON_HEDLEY_DIAGNOSTIC_PUSH +#if JSON_HEDLEY_HAS_WARNING("-Wpedantic") + #pragma clang diagnostic ignored "-Wpedantic" +#endif +#if JSON_HEDLEY_HAS_WARNING("-Wc++98-compat-pedantic") && defined(__cplusplus) + #pragma clang diagnostic ignored "-Wc++98-compat-pedantic" +#endif +#if JSON_HEDLEY_GCC_HAS_WARNING("-Wvariadic-macros",4,0,0) + #if defined(__clang__) + #pragma clang diagnostic ignored "-Wvariadic-macros" + #elif defined(JSON_HEDLEY_GCC_VERSION) + #pragma GCC diagnostic ignored "-Wvariadic-macros" + #endif +#endif +#if defined(JSON_HEDLEY_NON_NULL) + #undef JSON_HEDLEY_NON_NULL +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(nonnull) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,3,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) + #define JSON_HEDLEY_NON_NULL(...) __attribute__((__nonnull__(__VA_ARGS__))) +#else + #define JSON_HEDLEY_NON_NULL(...) +#endif +JSON_HEDLEY_DIAGNOSTIC_POP + +#if defined(JSON_HEDLEY_PRINTF_FORMAT) + #undef JSON_HEDLEY_PRINTF_FORMAT +#endif +#if defined(__MINGW32__) && JSON_HEDLEY_GCC_HAS_ATTRIBUTE(format,4,4,0) && !defined(__USE_MINGW_ANSI_STDIO) + #define JSON_HEDLEY_PRINTF_FORMAT(string_idx,first_to_check) __attribute__((__format__(ms_printf, string_idx, first_to_check))) +#elif defined(__MINGW32__) && JSON_HEDLEY_GCC_HAS_ATTRIBUTE(format,4,4,0) && defined(__USE_MINGW_ANSI_STDIO) + #define JSON_HEDLEY_PRINTF_FORMAT(string_idx,first_to_check) __attribute__((__format__(gnu_printf, string_idx, first_to_check))) +#elif \ + JSON_HEDLEY_HAS_ATTRIBUTE(format) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,1,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(5,6,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_PRINTF_FORMAT(string_idx,first_to_check) __attribute__((__format__(__printf__, string_idx, first_to_check))) +#elif JSON_HEDLEY_PELLES_VERSION_CHECK(6,0,0) + #define JSON_HEDLEY_PRINTF_FORMAT(string_idx,first_to_check) __declspec(vaformat(printf,string_idx,first_to_check)) +#else + #define JSON_HEDLEY_PRINTF_FORMAT(string_idx,first_to_check) +#endif + +#if defined(JSON_HEDLEY_CONSTEXPR) + #undef JSON_HEDLEY_CONSTEXPR +#endif +#if defined(__cplusplus) + #if __cplusplus >= 201103L + #define JSON_HEDLEY_CONSTEXPR JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(constexpr) + #endif +#endif +#if !defined(JSON_HEDLEY_CONSTEXPR) + #define JSON_HEDLEY_CONSTEXPR +#endif + +#if defined(JSON_HEDLEY_PREDICT) + #undef JSON_HEDLEY_PREDICT +#endif +#if defined(JSON_HEDLEY_LIKELY) + #undef JSON_HEDLEY_LIKELY +#endif +#if defined(JSON_HEDLEY_UNLIKELY) + #undef JSON_HEDLEY_UNLIKELY +#endif +#if defined(JSON_HEDLEY_UNPREDICTABLE) + #undef JSON_HEDLEY_UNPREDICTABLE +#endif +#if JSON_HEDLEY_HAS_BUILTIN(__builtin_unpredictable) + #define JSON_HEDLEY_UNPREDICTABLE(expr) __builtin_unpredictable((expr)) +#endif +#if \ + (JSON_HEDLEY_HAS_BUILTIN(__builtin_expect_with_probability) && !defined(JSON_HEDLEY_PGI_VERSION)) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(9,0,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) +# define JSON_HEDLEY_PREDICT(expr, value, probability) __builtin_expect_with_probability( (expr), (value), (probability)) +# define JSON_HEDLEY_PREDICT_TRUE(expr, probability) __builtin_expect_with_probability(!!(expr), 1 , (probability)) +# define JSON_HEDLEY_PREDICT_FALSE(expr, probability) __builtin_expect_with_probability(!!(expr), 0 , (probability)) +# define JSON_HEDLEY_LIKELY(expr) __builtin_expect (!!(expr), 1 ) +# define JSON_HEDLEY_UNLIKELY(expr) __builtin_expect (!!(expr), 0 ) +#elif \ + (JSON_HEDLEY_HAS_BUILTIN(__builtin_expect) && !defined(JSON_HEDLEY_INTEL_CL_VERSION)) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,0,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + (JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,15,0) && defined(__cplusplus)) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,7,0) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(3,1,0) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,1,0) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(6,1,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + JSON_HEDLEY_TINYC_VERSION_CHECK(0,9,27) || \ + JSON_HEDLEY_CRAY_VERSION_CHECK(8,1,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) +# define JSON_HEDLEY_PREDICT(expr, expected, probability) \ + (((probability) >= 0.9) ? __builtin_expect((expr), (expected)) : (JSON_HEDLEY_STATIC_CAST(void, expected), (expr))) +# define JSON_HEDLEY_PREDICT_TRUE(expr, probability) \ + (__extension__ ({ \ + double hedley_probability_ = (probability); \ + ((hedley_probability_ >= 0.9) ? __builtin_expect(!!(expr), 1) : ((hedley_probability_ <= 0.1) ? __builtin_expect(!!(expr), 0) : !!(expr))); \ + })) +# define JSON_HEDLEY_PREDICT_FALSE(expr, probability) \ + (__extension__ ({ \ + double hedley_probability_ = (probability); \ + ((hedley_probability_ >= 0.9) ? __builtin_expect(!!(expr), 0) : ((hedley_probability_ <= 0.1) ? __builtin_expect(!!(expr), 1) : !!(expr))); \ + })) +# define JSON_HEDLEY_LIKELY(expr) __builtin_expect(!!(expr), 1) +# define JSON_HEDLEY_UNLIKELY(expr) __builtin_expect(!!(expr), 0) +#else +# define JSON_HEDLEY_PREDICT(expr, expected, probability) (JSON_HEDLEY_STATIC_CAST(void, expected), (expr)) +# define JSON_HEDLEY_PREDICT_TRUE(expr, probability) (!!(expr)) +# define JSON_HEDLEY_PREDICT_FALSE(expr, probability) (!!(expr)) +# define JSON_HEDLEY_LIKELY(expr) (!!(expr)) +# define JSON_HEDLEY_UNLIKELY(expr) (!!(expr)) +#endif +#if !defined(JSON_HEDLEY_UNPREDICTABLE) + #define JSON_HEDLEY_UNPREDICTABLE(expr) JSON_HEDLEY_PREDICT(expr, 1, 0.5) +#endif + +#if defined(JSON_HEDLEY_MALLOC) + #undef JSON_HEDLEY_MALLOC +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(malloc) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,1,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(12,1,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_MALLOC __attribute__((__malloc__)) +#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,10,0) + #define JSON_HEDLEY_MALLOC _Pragma("returns_new_memory") +#elif \ + JSON_HEDLEY_MSVC_VERSION_CHECK(14,0,0) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) + #define JSON_HEDLEY_MALLOC __declspec(restrict) +#else + #define JSON_HEDLEY_MALLOC +#endif + +#if defined(JSON_HEDLEY_PURE) + #undef JSON_HEDLEY_PURE +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(pure) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(2,96,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) +# define JSON_HEDLEY_PURE __attribute__((__pure__)) +#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,10,0) +# define JSON_HEDLEY_PURE _Pragma("does_not_write_global_data") +#elif defined(__cplusplus) && \ + ( \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(2,0,1) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(4,0,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) \ + ) +# define JSON_HEDLEY_PURE _Pragma("FUNC_IS_PURE;") +#else +# define JSON_HEDLEY_PURE +#endif + +#if defined(JSON_HEDLEY_CONST) + #undef JSON_HEDLEY_CONST +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(const) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(2,5,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_CONST __attribute__((__const__)) +#elif \ + JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,10,0) + #define JSON_HEDLEY_CONST _Pragma("no_side_effect") +#else + #define JSON_HEDLEY_CONST JSON_HEDLEY_PURE +#endif + +#if defined(JSON_HEDLEY_RESTRICT) + #undef JSON_HEDLEY_RESTRICT +#endif +#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) && !defined(__cplusplus) + #define JSON_HEDLEY_RESTRICT restrict +#elif \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,1,0) || \ + JSON_HEDLEY_MSVC_VERSION_CHECK(14,0,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ + JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,2,4) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,1,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + (JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,14,0) && defined(__cplusplus)) || \ + JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) || \ + defined(__clang__) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_RESTRICT __restrict +#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,3,0) && !defined(__cplusplus) + #define JSON_HEDLEY_RESTRICT _Restrict +#else + #define JSON_HEDLEY_RESTRICT +#endif + +#if defined(JSON_HEDLEY_INLINE) + #undef JSON_HEDLEY_INLINE +#endif +#if \ + (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)) || \ + (defined(__cplusplus) && (__cplusplus >= 199711L)) + #define JSON_HEDLEY_INLINE inline +#elif \ + defined(JSON_HEDLEY_GCC_VERSION) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(6,2,0) + #define JSON_HEDLEY_INLINE __inline__ +#elif \ + JSON_HEDLEY_MSVC_VERSION_CHECK(12,0,0) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,1,0) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(3,1,0) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,2,0) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,0,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_INLINE __inline +#else + #define JSON_HEDLEY_INLINE +#endif + +#if defined(JSON_HEDLEY_ALWAYS_INLINE) + #undef JSON_HEDLEY_ALWAYS_INLINE +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(always_inline) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(4,0,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) || \ + JSON_HEDLEY_IAR_VERSION_CHECK(8,10,0) +# define JSON_HEDLEY_ALWAYS_INLINE __attribute__((__always_inline__)) JSON_HEDLEY_INLINE +#elif \ + JSON_HEDLEY_MSVC_VERSION_CHECK(12,0,0) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) +# define JSON_HEDLEY_ALWAYS_INLINE __forceinline +#elif defined(__cplusplus) && \ + ( \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(6,1,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) \ + ) +# define JSON_HEDLEY_ALWAYS_INLINE _Pragma("FUNC_ALWAYS_INLINE;") +#elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) +# define JSON_HEDLEY_ALWAYS_INLINE _Pragma("inline=forced") +#else +# define JSON_HEDLEY_ALWAYS_INLINE JSON_HEDLEY_INLINE +#endif + +#if defined(JSON_HEDLEY_NEVER_INLINE) + #undef JSON_HEDLEY_NEVER_INLINE +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(noinline) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(4,0,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) || \ + JSON_HEDLEY_IAR_VERSION_CHECK(8,10,0) + #define JSON_HEDLEY_NEVER_INLINE __attribute__((__noinline__)) +#elif \ + JSON_HEDLEY_MSVC_VERSION_CHECK(13,10,0) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) + #define JSON_HEDLEY_NEVER_INLINE __declspec(noinline) +#elif JSON_HEDLEY_PGI_VERSION_CHECK(10,2,0) + #define JSON_HEDLEY_NEVER_INLINE _Pragma("noinline") +#elif JSON_HEDLEY_TI_CL6X_VERSION_CHECK(6,0,0) && defined(__cplusplus) + #define JSON_HEDLEY_NEVER_INLINE _Pragma("FUNC_CANNOT_INLINE;") +#elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) + #define JSON_HEDLEY_NEVER_INLINE _Pragma("inline=never") +#elif JSON_HEDLEY_COMPCERT_VERSION_CHECK(3,2,0) + #define JSON_HEDLEY_NEVER_INLINE __attribute((noinline)) +#elif JSON_HEDLEY_PELLES_VERSION_CHECK(9,0,0) + #define JSON_HEDLEY_NEVER_INLINE __declspec(noinline) +#else + #define JSON_HEDLEY_NEVER_INLINE +#endif + +#if defined(JSON_HEDLEY_PRIVATE) + #undef JSON_HEDLEY_PRIVATE +#endif +#if defined(JSON_HEDLEY_PUBLIC) + #undef JSON_HEDLEY_PUBLIC +#endif +#if defined(JSON_HEDLEY_IMPORT) + #undef JSON_HEDLEY_IMPORT +#endif +#if defined(_WIN32) || defined(__CYGWIN__) +# define JSON_HEDLEY_PRIVATE +# define JSON_HEDLEY_PUBLIC __declspec(dllexport) +# define JSON_HEDLEY_IMPORT __declspec(dllimport) +#else +# if \ + JSON_HEDLEY_HAS_ATTRIBUTE(visibility) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,3,0) || \ + JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(13,1,0) || \ + ( \ + defined(__TI_EABI__) && \ + ( \ + (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) \ + ) \ + ) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) +# define JSON_HEDLEY_PRIVATE __attribute__((__visibility__("hidden"))) +# define JSON_HEDLEY_PUBLIC __attribute__((__visibility__("default"))) +# else +# define JSON_HEDLEY_PRIVATE +# define JSON_HEDLEY_PUBLIC +# endif +# define JSON_HEDLEY_IMPORT extern +#endif + +#if defined(JSON_HEDLEY_NO_THROW) + #undef JSON_HEDLEY_NO_THROW +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(nothrow) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,3,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_NO_THROW __attribute__((__nothrow__)) +#elif \ + JSON_HEDLEY_MSVC_VERSION_CHECK(13,1,0) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) + #define JSON_HEDLEY_NO_THROW __declspec(nothrow) +#else + #define JSON_HEDLEY_NO_THROW +#endif + +#if defined(JSON_HEDLEY_FALL_THROUGH) + #undef JSON_HEDLEY_FALL_THROUGH +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(fallthrough) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(7,0,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_FALL_THROUGH __attribute__((__fallthrough__)) +#elif JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS(clang,fallthrough) + #define JSON_HEDLEY_FALL_THROUGH JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[clang::fallthrough]]) +#elif JSON_HEDLEY_HAS_CPP_ATTRIBUTE(fallthrough) + #define JSON_HEDLEY_FALL_THROUGH JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[fallthrough]]) +#elif defined(__fallthrough) /* SAL */ + #define JSON_HEDLEY_FALL_THROUGH __fallthrough +#else + #define JSON_HEDLEY_FALL_THROUGH +#endif + +#if defined(JSON_HEDLEY_RETURNS_NON_NULL) + #undef JSON_HEDLEY_RETURNS_NON_NULL +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(returns_nonnull) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(4,9,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_RETURNS_NON_NULL __attribute__((__returns_nonnull__)) +#elif defined(_Ret_notnull_) /* SAL */ + #define JSON_HEDLEY_RETURNS_NON_NULL _Ret_notnull_ +#else + #define JSON_HEDLEY_RETURNS_NON_NULL +#endif + +#if defined(JSON_HEDLEY_ARRAY_PARAM) + #undef JSON_HEDLEY_ARRAY_PARAM +#endif +#if \ + defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) && \ + !defined(__STDC_NO_VLA__) && \ + !defined(__cplusplus) && \ + !defined(JSON_HEDLEY_PGI_VERSION) && \ + !defined(JSON_HEDLEY_TINYC_VERSION) + #define JSON_HEDLEY_ARRAY_PARAM(name) (name) +#else + #define JSON_HEDLEY_ARRAY_PARAM(name) +#endif + +#if defined(JSON_HEDLEY_IS_CONSTANT) + #undef JSON_HEDLEY_IS_CONSTANT +#endif +#if defined(JSON_HEDLEY_REQUIRE_CONSTEXPR) + #undef JSON_HEDLEY_REQUIRE_CONSTEXPR +#endif +/* JSON_HEDLEY_IS_CONSTEXPR_ is for + HEDLEY INTERNAL USE ONLY. API subject to change without notice. */ +#if defined(JSON_HEDLEY_IS_CONSTEXPR_) + #undef JSON_HEDLEY_IS_CONSTEXPR_ +#endif +#if \ + JSON_HEDLEY_HAS_BUILTIN(__builtin_constant_p) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,4,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_TINYC_VERSION_CHECK(0,9,19) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(13,1,0) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(6,1,0) || \ + (JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,10,0) && !defined(__cplusplus)) || \ + JSON_HEDLEY_CRAY_VERSION_CHECK(8,1,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_IS_CONSTANT(expr) __builtin_constant_p(expr) +#endif +#if !defined(__cplusplus) +# if \ + JSON_HEDLEY_HAS_BUILTIN(__builtin_types_compatible_p) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,4,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(13,1,0) || \ + JSON_HEDLEY_CRAY_VERSION_CHECK(8,1,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(5,4,0) || \ + JSON_HEDLEY_TINYC_VERSION_CHECK(0,9,24) +#if defined(__INTPTR_TYPE__) + #define JSON_HEDLEY_IS_CONSTEXPR_(expr) __builtin_types_compatible_p(__typeof__((1 ? (void*) ((__INTPTR_TYPE__) ((expr) * 0)) : (int*) 0)), int*) +#else + #include + #define JSON_HEDLEY_IS_CONSTEXPR_(expr) __builtin_types_compatible_p(__typeof__((1 ? (void*) ((intptr_t) ((expr) * 0)) : (int*) 0)), int*) +#endif +# elif \ + ( \ + defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L) && \ + !defined(JSON_HEDLEY_SUNPRO_VERSION) && \ + !defined(JSON_HEDLEY_PGI_VERSION) && \ + !defined(JSON_HEDLEY_IAR_VERSION)) || \ + (JSON_HEDLEY_HAS_EXTENSION(c_generic_selections) && !defined(JSON_HEDLEY_IAR_VERSION)) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(4,9,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(17,0,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(12,1,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(5,3,0) +#if defined(__INTPTR_TYPE__) + #define JSON_HEDLEY_IS_CONSTEXPR_(expr) _Generic((1 ? (void*) ((__INTPTR_TYPE__) ((expr) * 0)) : (int*) 0), int*: 1, void*: 0) +#else + #include + #define JSON_HEDLEY_IS_CONSTEXPR_(expr) _Generic((1 ? (void*) ((intptr_t) * 0) : (int*) 0), int*: 1, void*: 0) +#endif +# elif \ + defined(JSON_HEDLEY_GCC_VERSION) || \ + defined(JSON_HEDLEY_INTEL_VERSION) || \ + defined(JSON_HEDLEY_TINYC_VERSION) || \ + defined(JSON_HEDLEY_TI_ARMCL_VERSION) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(18,12,0) || \ + defined(JSON_HEDLEY_TI_CL2000_VERSION) || \ + defined(JSON_HEDLEY_TI_CL6X_VERSION) || \ + defined(JSON_HEDLEY_TI_CL7X_VERSION) || \ + defined(JSON_HEDLEY_TI_CLPRU_VERSION) || \ + defined(__clang__) +# define JSON_HEDLEY_IS_CONSTEXPR_(expr) ( \ + sizeof(void) != \ + sizeof(*( \ + 1 ? \ + ((void*) ((expr) * 0L) ) : \ +((struct { char v[sizeof(void) * 2]; } *) 1) \ + ) \ + ) \ + ) +# endif +#endif +#if defined(JSON_HEDLEY_IS_CONSTEXPR_) + #if !defined(JSON_HEDLEY_IS_CONSTANT) + #define JSON_HEDLEY_IS_CONSTANT(expr) JSON_HEDLEY_IS_CONSTEXPR_(expr) + #endif + #define JSON_HEDLEY_REQUIRE_CONSTEXPR(expr) (JSON_HEDLEY_IS_CONSTEXPR_(expr) ? (expr) : (-1)) +#else + #if !defined(JSON_HEDLEY_IS_CONSTANT) + #define JSON_HEDLEY_IS_CONSTANT(expr) (0) + #endif + #define JSON_HEDLEY_REQUIRE_CONSTEXPR(expr) (expr) +#endif + +#if defined(JSON_HEDLEY_BEGIN_C_DECLS) + #undef JSON_HEDLEY_BEGIN_C_DECLS +#endif +#if defined(JSON_HEDLEY_END_C_DECLS) + #undef JSON_HEDLEY_END_C_DECLS +#endif +#if defined(JSON_HEDLEY_C_DECL) + #undef JSON_HEDLEY_C_DECL +#endif +#if defined(__cplusplus) + #define JSON_HEDLEY_BEGIN_C_DECLS extern "C" { + #define JSON_HEDLEY_END_C_DECLS } + #define JSON_HEDLEY_C_DECL extern "C" +#else + #define JSON_HEDLEY_BEGIN_C_DECLS + #define JSON_HEDLEY_END_C_DECLS + #define JSON_HEDLEY_C_DECL +#endif + +#if defined(JSON_HEDLEY_STATIC_ASSERT) + #undef JSON_HEDLEY_STATIC_ASSERT +#endif +#if \ + !defined(__cplusplus) && ( \ + (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L)) || \ + (JSON_HEDLEY_HAS_FEATURE(c_static_assert) && !defined(JSON_HEDLEY_INTEL_CL_VERSION)) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(6,0,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + defined(_Static_assert) \ + ) +# define JSON_HEDLEY_STATIC_ASSERT(expr, message) _Static_assert(expr, message) +#elif \ + (defined(__cplusplus) && (__cplusplus >= 201103L)) || \ + JSON_HEDLEY_MSVC_VERSION_CHECK(16,0,0) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) +# define JSON_HEDLEY_STATIC_ASSERT(expr, message) JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(static_assert(expr, message)) +#else +# define JSON_HEDLEY_STATIC_ASSERT(expr, message) +#endif + +#if defined(JSON_HEDLEY_NULL) + #undef JSON_HEDLEY_NULL +#endif +#if defined(__cplusplus) + #if __cplusplus >= 201103L + #define JSON_HEDLEY_NULL JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(nullptr) + #elif defined(NULL) + #define JSON_HEDLEY_NULL NULL + #else + #define JSON_HEDLEY_NULL JSON_HEDLEY_STATIC_CAST(void*, 0) + #endif +#elif defined(NULL) + #define JSON_HEDLEY_NULL NULL +#else + #define JSON_HEDLEY_NULL ((void*) 0) +#endif + +#if defined(JSON_HEDLEY_MESSAGE) + #undef JSON_HEDLEY_MESSAGE +#endif +#if JSON_HEDLEY_HAS_WARNING("-Wunknown-pragmas") +# define JSON_HEDLEY_MESSAGE(msg) \ + JSON_HEDLEY_DIAGNOSTIC_PUSH \ + JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS \ + JSON_HEDLEY_PRAGMA(message msg) \ + JSON_HEDLEY_DIAGNOSTIC_POP +#elif \ + JSON_HEDLEY_GCC_VERSION_CHECK(4,4,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) +# define JSON_HEDLEY_MESSAGE(msg) JSON_HEDLEY_PRAGMA(message msg) +#elif JSON_HEDLEY_CRAY_VERSION_CHECK(5,0,0) +# define JSON_HEDLEY_MESSAGE(msg) JSON_HEDLEY_PRAGMA(_CRI message msg) +#elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) +# define JSON_HEDLEY_MESSAGE(msg) JSON_HEDLEY_PRAGMA(message(msg)) +#elif JSON_HEDLEY_PELLES_VERSION_CHECK(2,0,0) +# define JSON_HEDLEY_MESSAGE(msg) JSON_HEDLEY_PRAGMA(message(msg)) +#else +# define JSON_HEDLEY_MESSAGE(msg) +#endif + +#if defined(JSON_HEDLEY_WARNING) + #undef JSON_HEDLEY_WARNING +#endif +#if JSON_HEDLEY_HAS_WARNING("-Wunknown-pragmas") +# define JSON_HEDLEY_WARNING(msg) \ + JSON_HEDLEY_DIAGNOSTIC_PUSH \ + JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS \ + JSON_HEDLEY_PRAGMA(clang warning msg) \ + JSON_HEDLEY_DIAGNOSTIC_POP +#elif \ + JSON_HEDLEY_GCC_VERSION_CHECK(4,8,0) || \ + JSON_HEDLEY_PGI_VERSION_CHECK(18,4,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) +# define JSON_HEDLEY_WARNING(msg) JSON_HEDLEY_PRAGMA(GCC warning msg) +#elif \ + JSON_HEDLEY_MSVC_VERSION_CHECK(15,0,0) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) +# define JSON_HEDLEY_WARNING(msg) JSON_HEDLEY_PRAGMA(message(msg)) +#else +# define JSON_HEDLEY_WARNING(msg) JSON_HEDLEY_MESSAGE(msg) +#endif + +#if defined(JSON_HEDLEY_REQUIRE) + #undef JSON_HEDLEY_REQUIRE +#endif +#if defined(JSON_HEDLEY_REQUIRE_MSG) + #undef JSON_HEDLEY_REQUIRE_MSG +#endif +#if JSON_HEDLEY_HAS_ATTRIBUTE(diagnose_if) +# if JSON_HEDLEY_HAS_WARNING("-Wgcc-compat") +# define JSON_HEDLEY_REQUIRE(expr) \ + JSON_HEDLEY_DIAGNOSTIC_PUSH \ + _Pragma("clang diagnostic ignored \"-Wgcc-compat\"") \ + __attribute__((diagnose_if(!(expr), #expr, "error"))) \ + JSON_HEDLEY_DIAGNOSTIC_POP +# define JSON_HEDLEY_REQUIRE_MSG(expr,msg) \ + JSON_HEDLEY_DIAGNOSTIC_PUSH \ + _Pragma("clang diagnostic ignored \"-Wgcc-compat\"") \ + __attribute__((diagnose_if(!(expr), msg, "error"))) \ + JSON_HEDLEY_DIAGNOSTIC_POP +# else +# define JSON_HEDLEY_REQUIRE(expr) __attribute__((diagnose_if(!(expr), #expr, "error"))) +# define JSON_HEDLEY_REQUIRE_MSG(expr,msg) __attribute__((diagnose_if(!(expr), msg, "error"))) +# endif +#else +# define JSON_HEDLEY_REQUIRE(expr) +# define JSON_HEDLEY_REQUIRE_MSG(expr,msg) +#endif + +#if defined(JSON_HEDLEY_FLAGS) + #undef JSON_HEDLEY_FLAGS +#endif +#if JSON_HEDLEY_HAS_ATTRIBUTE(flag_enum) && (!defined(__cplusplus) || JSON_HEDLEY_HAS_WARNING("-Wbitfield-enum-conversion")) + #define JSON_HEDLEY_FLAGS __attribute__((__flag_enum__)) +#else + #define JSON_HEDLEY_FLAGS +#endif + +#if defined(JSON_HEDLEY_FLAGS_CAST) + #undef JSON_HEDLEY_FLAGS_CAST +#endif +#if JSON_HEDLEY_INTEL_VERSION_CHECK(19,0,0) +# define JSON_HEDLEY_FLAGS_CAST(T, expr) (__extension__ ({ \ + JSON_HEDLEY_DIAGNOSTIC_PUSH \ + _Pragma("warning(disable:188)") \ + ((T) (expr)); \ + JSON_HEDLEY_DIAGNOSTIC_POP \ + })) +#else +# define JSON_HEDLEY_FLAGS_CAST(T, expr) JSON_HEDLEY_STATIC_CAST(T, expr) +#endif + +#if defined(JSON_HEDLEY_EMPTY_BASES) + #undef JSON_HEDLEY_EMPTY_BASES +#endif +#if \ + (JSON_HEDLEY_MSVC_VERSION_CHECK(19,0,23918) && !JSON_HEDLEY_MSVC_VERSION_CHECK(20,0,0)) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) + #define JSON_HEDLEY_EMPTY_BASES __declspec(empty_bases) +#else + #define JSON_HEDLEY_EMPTY_BASES +#endif + +/* Remaining macros are deprecated. */ + +#if defined(JSON_HEDLEY_GCC_NOT_CLANG_VERSION_CHECK) + #undef JSON_HEDLEY_GCC_NOT_CLANG_VERSION_CHECK +#endif +#if defined(__clang__) + #define JSON_HEDLEY_GCC_NOT_CLANG_VERSION_CHECK(major,minor,patch) (0) +#else + #define JSON_HEDLEY_GCC_NOT_CLANG_VERSION_CHECK(major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_CLANG_HAS_ATTRIBUTE) + #undef JSON_HEDLEY_CLANG_HAS_ATTRIBUTE +#endif +#define JSON_HEDLEY_CLANG_HAS_ATTRIBUTE(attribute) JSON_HEDLEY_HAS_ATTRIBUTE(attribute) + +#if defined(JSON_HEDLEY_CLANG_HAS_CPP_ATTRIBUTE) + #undef JSON_HEDLEY_CLANG_HAS_CPP_ATTRIBUTE +#endif +#define JSON_HEDLEY_CLANG_HAS_CPP_ATTRIBUTE(attribute) JSON_HEDLEY_HAS_CPP_ATTRIBUTE(attribute) + +#if defined(JSON_HEDLEY_CLANG_HAS_BUILTIN) + #undef JSON_HEDLEY_CLANG_HAS_BUILTIN +#endif +#define JSON_HEDLEY_CLANG_HAS_BUILTIN(builtin) JSON_HEDLEY_HAS_BUILTIN(builtin) + +#if defined(JSON_HEDLEY_CLANG_HAS_FEATURE) + #undef JSON_HEDLEY_CLANG_HAS_FEATURE +#endif +#define JSON_HEDLEY_CLANG_HAS_FEATURE(feature) JSON_HEDLEY_HAS_FEATURE(feature) + +#if defined(JSON_HEDLEY_CLANG_HAS_EXTENSION) + #undef JSON_HEDLEY_CLANG_HAS_EXTENSION +#endif +#define JSON_HEDLEY_CLANG_HAS_EXTENSION(extension) JSON_HEDLEY_HAS_EXTENSION(extension) + +#if defined(JSON_HEDLEY_CLANG_HAS_DECLSPEC_DECLSPEC_ATTRIBUTE) + #undef JSON_HEDLEY_CLANG_HAS_DECLSPEC_DECLSPEC_ATTRIBUTE +#endif +#define JSON_HEDLEY_CLANG_HAS_DECLSPEC_ATTRIBUTE(attribute) JSON_HEDLEY_HAS_DECLSPEC_ATTRIBUTE(attribute) + +#if defined(JSON_HEDLEY_CLANG_HAS_WARNING) + #undef JSON_HEDLEY_CLANG_HAS_WARNING +#endif +#define JSON_HEDLEY_CLANG_HAS_WARNING(warning) JSON_HEDLEY_HAS_WARNING(warning) + +#endif /* !defined(JSON_HEDLEY_VERSION) || (JSON_HEDLEY_VERSION < X) */ + +// #include + + +#include + +// #include + + +namespace nlohmann +{ +namespace detail +{ +template struct make_void +{ + using type = void; +}; +template using void_t = typename make_void::type; +} // namespace detail +} // namespace nlohmann + + +// https://en.cppreference.com/w/cpp/experimental/is_detected +namespace nlohmann +{ +namespace detail +{ +struct nonesuch +{ + nonesuch() = delete; + ~nonesuch() = delete; + nonesuch(nonesuch const&) = delete; + nonesuch(nonesuch const&&) = delete; + void operator=(nonesuch const&) = delete; + void operator=(nonesuch&&) = delete; +}; + +template class Op, + class... Args> +struct detector +{ + using value_t = std::false_type; + using type = Default; +}; + +template class Op, class... Args> +struct detector>, Op, Args...> +{ + using value_t = std::true_type; + using type = Op; +}; + +template class Op, class... Args> +using is_detected = typename detector::value_t; + +template class Op, class... Args> +struct is_detected_lazy : is_detected { }; + +template class Op, class... Args> +using detected_t = typename detector::type; + +template class Op, class... Args> +using detected_or = detector; + +template class Op, class... Args> +using detected_or_t = typename detected_or::type; + +template class Op, class... Args> +using is_detected_exact = std::is_same>; + +template class Op, class... Args> +using is_detected_convertible = + std::is_convertible, To>; +} // namespace detail +} // namespace nlohmann + + +// This file contains all internal macro definitions +// You MUST include macro_unscope.hpp at the end of json.hpp to undef all of them + +// exclude unsupported compilers +#if !defined(JSON_SKIP_UNSUPPORTED_COMPILER_CHECK) + #if defined(__clang__) + #if (__clang_major__ * 10000 + __clang_minor__ * 100 + __clang_patchlevel__) < 30400 + #error "unsupported Clang version - see https://github.com/nlohmann/json#supported-compilers" + #endif + #elif defined(__GNUC__) && !(defined(__ICC) || defined(__INTEL_COMPILER)) + #if (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__) < 40800 + #error "unsupported GCC version - see https://github.com/nlohmann/json#supported-compilers" + #endif + #endif +#endif + +// C++ language standard detection +// if the user manually specified the used c++ version this is skipped +#if !defined(JSON_HAS_CPP_20) && !defined(JSON_HAS_CPP_17) && !defined(JSON_HAS_CPP_14) && !defined(JSON_HAS_CPP_11) + #if (defined(__cplusplus) && __cplusplus >= 202002L) || (defined(_MSVC_LANG) && _MSVC_LANG >= 202002L) + #define JSON_HAS_CPP_20 + #define JSON_HAS_CPP_17 + #define JSON_HAS_CPP_14 + #elif (defined(__cplusplus) && __cplusplus >= 201703L) || (defined(_HAS_CXX17) && _HAS_CXX17 == 1) // fix for issue #464 + #define JSON_HAS_CPP_17 + #define JSON_HAS_CPP_14 + #elif (defined(__cplusplus) && __cplusplus >= 201402L) || (defined(_HAS_CXX14) && _HAS_CXX14 == 1) + #define JSON_HAS_CPP_14 + #endif + // the cpp 11 flag is always specified because it is the minimal required version + #define JSON_HAS_CPP_11 +#endif + +#if !defined(JSON_HAS_FILESYSTEM) && !defined(JSON_HAS_EXPERIMENTAL_FILESYSTEM) + #ifdef JSON_HAS_CPP_17 + #if defined(__cpp_lib_filesystem) + #define JSON_HAS_FILESYSTEM 1 + #elif defined(__cpp_lib_experimental_filesystem) + #define JSON_HAS_EXPERIMENTAL_FILESYSTEM 1 + #elif !defined(__has_include) + #define JSON_HAS_EXPERIMENTAL_FILESYSTEM 1 + #elif __has_include() + #define JSON_HAS_FILESYSTEM 1 + #elif __has_include() + #define JSON_HAS_EXPERIMENTAL_FILESYSTEM 1 + #endif + + // std::filesystem does not work on MinGW GCC 8: https://sourceforge.net/p/mingw-w64/bugs/737/ + #if defined(__MINGW32__) && defined(__GNUC__) && __GNUC__ == 8 + #undef JSON_HAS_FILESYSTEM + #undef JSON_HAS_EXPERIMENTAL_FILESYSTEM + #endif + + // no filesystem support before GCC 8: https://en.cppreference.com/w/cpp/compiler_support + #if defined(__GNUC__) && !defined(__clang__) && __GNUC__ < 8 + #undef JSON_HAS_FILESYSTEM + #undef JSON_HAS_EXPERIMENTAL_FILESYSTEM + #endif + + // no filesystem support before Clang 7: https://en.cppreference.com/w/cpp/compiler_support + #if defined(__clang_major__) && __clang_major__ < 7 + #undef JSON_HAS_FILESYSTEM + #undef JSON_HAS_EXPERIMENTAL_FILESYSTEM + #endif + + // no filesystem support before MSVC 19.14: https://en.cppreference.com/w/cpp/compiler_support + #if defined(_MSC_VER) && _MSC_VER < 1914 + #undef JSON_HAS_FILESYSTEM + #undef JSON_HAS_EXPERIMENTAL_FILESYSTEM + #endif + + // no filesystem support before iOS 13 + #if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) && __IPHONE_OS_VERSION_MIN_REQUIRED < 130000 + #undef JSON_HAS_FILESYSTEM + #undef JSON_HAS_EXPERIMENTAL_FILESYSTEM + #endif + + // no filesystem support before macOS Catalina + #if defined(__MAC_OS_X_VERSION_MIN_REQUIRED) && __MAC_OS_X_VERSION_MIN_REQUIRED < 101500 + #undef JSON_HAS_FILESYSTEM + #undef JSON_HAS_EXPERIMENTAL_FILESYSTEM + #endif + #endif +#endif + +#ifndef JSON_HAS_EXPERIMENTAL_FILESYSTEM + #define JSON_HAS_EXPERIMENTAL_FILESYSTEM 0 +#endif + +#ifndef JSON_HAS_FILESYSTEM + #define JSON_HAS_FILESYSTEM 0 +#endif + +// disable documentation warnings on clang +#if defined(__clang__) + #pragma clang diagnostic push + #pragma clang diagnostic ignored "-Wdocumentation" + #pragma clang diagnostic ignored "-Wdocumentation-unknown-command" +#endif + +// allow disabling exceptions +#if (defined(__cpp_exceptions) || defined(__EXCEPTIONS) || defined(_CPPUNWIND)) && !defined(JSON_NOEXCEPTION) + #define JSON_THROW(exception) throw exception + #define JSON_TRY try + #define JSON_CATCH(exception) catch(exception) + #define JSON_INTERNAL_CATCH(exception) catch(exception) +#else + #include + #define JSON_THROW(exception) std::abort() + #define JSON_TRY if(true) + #define JSON_CATCH(exception) if(false) + #define JSON_INTERNAL_CATCH(exception) if(false) +#endif + +// override exception macros +#if defined(JSON_THROW_USER) + #undef JSON_THROW + #define JSON_THROW JSON_THROW_USER +#endif +#if defined(JSON_TRY_USER) + #undef JSON_TRY + #define JSON_TRY JSON_TRY_USER +#endif +#if defined(JSON_CATCH_USER) + #undef JSON_CATCH + #define JSON_CATCH JSON_CATCH_USER + #undef JSON_INTERNAL_CATCH + #define JSON_INTERNAL_CATCH JSON_CATCH_USER +#endif +#if defined(JSON_INTERNAL_CATCH_USER) + #undef JSON_INTERNAL_CATCH + #define JSON_INTERNAL_CATCH JSON_INTERNAL_CATCH_USER +#endif + +// allow overriding assert +#if !defined(JSON_ASSERT) + #include // assert + #define JSON_ASSERT(x) assert(x) +#endif + +// allow to access some private functions (needed by the test suite) +#if defined(JSON_TESTS_PRIVATE) + #define JSON_PRIVATE_UNLESS_TESTED public +#else + #define JSON_PRIVATE_UNLESS_TESTED private +#endif + +/*! +@brief macro to briefly define a mapping between an enum and JSON +@def NLOHMANN_JSON_SERIALIZE_ENUM +@since version 3.4.0 +*/ +#define NLOHMANN_JSON_SERIALIZE_ENUM(ENUM_TYPE, ...) \ + template \ + inline void to_json(BasicJsonType& j, const ENUM_TYPE& e) \ + { \ + static_assert(std::is_enum::value, #ENUM_TYPE " must be an enum!"); \ + static const std::pair m[] = __VA_ARGS__; \ + auto it = std::find_if(std::begin(m), std::end(m), \ + [e](const std::pair& ej_pair) -> bool \ + { \ + return ej_pair.first == e; \ + }); \ + j = ((it != std::end(m)) ? it : std::begin(m))->second; \ + } \ + template \ + inline void from_json(const BasicJsonType& j, ENUM_TYPE& e) \ + { \ + static_assert(std::is_enum::value, #ENUM_TYPE " must be an enum!"); \ + static const std::pair m[] = __VA_ARGS__; \ + auto it = std::find_if(std::begin(m), std::end(m), \ + [&j](const std::pair& ej_pair) -> bool \ + { \ + return ej_pair.second == j; \ + }); \ + e = ((it != std::end(m)) ? it : std::begin(m))->first; \ + } + +// Ugly macros to avoid uglier copy-paste when specializing basic_json. They +// may be removed in the future once the class is split. + +#define NLOHMANN_BASIC_JSON_TPL_DECLARATION \ + template class ObjectType, \ + template class ArrayType, \ + class StringType, class BooleanType, class NumberIntegerType, \ + class NumberUnsignedType, class NumberFloatType, \ + template class AllocatorType, \ + template class JSONSerializer, \ + class BinaryType> + +#define NLOHMANN_BASIC_JSON_TPL \ + basic_json + +// Macros to simplify conversion from/to types + +#define NLOHMANN_JSON_EXPAND( x ) x +#define NLOHMANN_JSON_GET_MACRO(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, _50, _51, _52, _53, _54, _55, _56, _57, _58, _59, _60, _61, _62, _63, _64, NAME,...) NAME +#define NLOHMANN_JSON_PASTE(...) NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_GET_MACRO(__VA_ARGS__, \ + NLOHMANN_JSON_PASTE64, \ + NLOHMANN_JSON_PASTE63, \ + NLOHMANN_JSON_PASTE62, \ + NLOHMANN_JSON_PASTE61, \ + NLOHMANN_JSON_PASTE60, \ + NLOHMANN_JSON_PASTE59, \ + NLOHMANN_JSON_PASTE58, \ + NLOHMANN_JSON_PASTE57, \ + NLOHMANN_JSON_PASTE56, \ + NLOHMANN_JSON_PASTE55, \ + NLOHMANN_JSON_PASTE54, \ + NLOHMANN_JSON_PASTE53, \ + NLOHMANN_JSON_PASTE52, \ + NLOHMANN_JSON_PASTE51, \ + NLOHMANN_JSON_PASTE50, \ + NLOHMANN_JSON_PASTE49, \ + NLOHMANN_JSON_PASTE48, \ + NLOHMANN_JSON_PASTE47, \ + NLOHMANN_JSON_PASTE46, \ + NLOHMANN_JSON_PASTE45, \ + NLOHMANN_JSON_PASTE44, \ + NLOHMANN_JSON_PASTE43, \ + NLOHMANN_JSON_PASTE42, \ + NLOHMANN_JSON_PASTE41, \ + NLOHMANN_JSON_PASTE40, \ + NLOHMANN_JSON_PASTE39, \ + NLOHMANN_JSON_PASTE38, \ + NLOHMANN_JSON_PASTE37, \ + NLOHMANN_JSON_PASTE36, \ + NLOHMANN_JSON_PASTE35, \ + NLOHMANN_JSON_PASTE34, \ + NLOHMANN_JSON_PASTE33, \ + NLOHMANN_JSON_PASTE32, \ + NLOHMANN_JSON_PASTE31, \ + NLOHMANN_JSON_PASTE30, \ + NLOHMANN_JSON_PASTE29, \ + NLOHMANN_JSON_PASTE28, \ + NLOHMANN_JSON_PASTE27, \ + NLOHMANN_JSON_PASTE26, \ + NLOHMANN_JSON_PASTE25, \ + NLOHMANN_JSON_PASTE24, \ + NLOHMANN_JSON_PASTE23, \ + NLOHMANN_JSON_PASTE22, \ + NLOHMANN_JSON_PASTE21, \ + NLOHMANN_JSON_PASTE20, \ + NLOHMANN_JSON_PASTE19, \ + NLOHMANN_JSON_PASTE18, \ + NLOHMANN_JSON_PASTE17, \ + NLOHMANN_JSON_PASTE16, \ + NLOHMANN_JSON_PASTE15, \ + NLOHMANN_JSON_PASTE14, \ + NLOHMANN_JSON_PASTE13, \ + NLOHMANN_JSON_PASTE12, \ + NLOHMANN_JSON_PASTE11, \ + NLOHMANN_JSON_PASTE10, \ + NLOHMANN_JSON_PASTE9, \ + NLOHMANN_JSON_PASTE8, \ + NLOHMANN_JSON_PASTE7, \ + NLOHMANN_JSON_PASTE6, \ + NLOHMANN_JSON_PASTE5, \ + NLOHMANN_JSON_PASTE4, \ + NLOHMANN_JSON_PASTE3, \ + NLOHMANN_JSON_PASTE2, \ + NLOHMANN_JSON_PASTE1)(__VA_ARGS__)) +#define NLOHMANN_JSON_PASTE2(func, v1) func(v1) +#define NLOHMANN_JSON_PASTE3(func, v1, v2) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE2(func, v2) +#define NLOHMANN_JSON_PASTE4(func, v1, v2, v3) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE3(func, v2, v3) +#define NLOHMANN_JSON_PASTE5(func, v1, v2, v3, v4) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE4(func, v2, v3, v4) +#define NLOHMANN_JSON_PASTE6(func, v1, v2, v3, v4, v5) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE5(func, v2, v3, v4, v5) +#define NLOHMANN_JSON_PASTE7(func, v1, v2, v3, v4, v5, v6) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE6(func, v2, v3, v4, v5, v6) +#define NLOHMANN_JSON_PASTE8(func, v1, v2, v3, v4, v5, v6, v7) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE7(func, v2, v3, v4, v5, v6, v7) +#define NLOHMANN_JSON_PASTE9(func, v1, v2, v3, v4, v5, v6, v7, v8) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE8(func, v2, v3, v4, v5, v6, v7, v8) +#define NLOHMANN_JSON_PASTE10(func, v1, v2, v3, v4, v5, v6, v7, v8, v9) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE9(func, v2, v3, v4, v5, v6, v7, v8, v9) +#define NLOHMANN_JSON_PASTE11(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE10(func, v2, v3, v4, v5, v6, v7, v8, v9, v10) +#define NLOHMANN_JSON_PASTE12(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE11(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) +#define NLOHMANN_JSON_PASTE13(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE12(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12) +#define NLOHMANN_JSON_PASTE14(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE13(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13) +#define NLOHMANN_JSON_PASTE15(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE14(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14) +#define NLOHMANN_JSON_PASTE16(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE15(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15) +#define NLOHMANN_JSON_PASTE17(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE16(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16) +#define NLOHMANN_JSON_PASTE18(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE17(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17) +#define NLOHMANN_JSON_PASTE19(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE18(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18) +#define NLOHMANN_JSON_PASTE20(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE19(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19) +#define NLOHMANN_JSON_PASTE21(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE20(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20) +#define NLOHMANN_JSON_PASTE22(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE21(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21) +#define NLOHMANN_JSON_PASTE23(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE22(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22) +#define NLOHMANN_JSON_PASTE24(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE23(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23) +#define NLOHMANN_JSON_PASTE25(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE24(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24) +#define NLOHMANN_JSON_PASTE26(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE25(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25) +#define NLOHMANN_JSON_PASTE27(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE26(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26) +#define NLOHMANN_JSON_PASTE28(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE27(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27) +#define NLOHMANN_JSON_PASTE29(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE28(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28) +#define NLOHMANN_JSON_PASTE30(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE29(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29) +#define NLOHMANN_JSON_PASTE31(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE30(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30) +#define NLOHMANN_JSON_PASTE32(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE31(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31) +#define NLOHMANN_JSON_PASTE33(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE32(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32) +#define NLOHMANN_JSON_PASTE34(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE33(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33) +#define NLOHMANN_JSON_PASTE35(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE34(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34) +#define NLOHMANN_JSON_PASTE36(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE35(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35) +#define NLOHMANN_JSON_PASTE37(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE36(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36) +#define NLOHMANN_JSON_PASTE38(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE37(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37) +#define NLOHMANN_JSON_PASTE39(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE38(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38) +#define NLOHMANN_JSON_PASTE40(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE39(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39) +#define NLOHMANN_JSON_PASTE41(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE40(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40) +#define NLOHMANN_JSON_PASTE42(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE41(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41) +#define NLOHMANN_JSON_PASTE43(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE42(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42) +#define NLOHMANN_JSON_PASTE44(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE43(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43) +#define NLOHMANN_JSON_PASTE45(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE44(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44) +#define NLOHMANN_JSON_PASTE46(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE45(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45) +#define NLOHMANN_JSON_PASTE47(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE46(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46) +#define NLOHMANN_JSON_PASTE48(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE47(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47) +#define NLOHMANN_JSON_PASTE49(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE48(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48) +#define NLOHMANN_JSON_PASTE50(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE49(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49) +#define NLOHMANN_JSON_PASTE51(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE50(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50) +#define NLOHMANN_JSON_PASTE52(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE51(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51) +#define NLOHMANN_JSON_PASTE53(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE52(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52) +#define NLOHMANN_JSON_PASTE54(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE53(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53) +#define NLOHMANN_JSON_PASTE55(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE54(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54) +#define NLOHMANN_JSON_PASTE56(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE55(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55) +#define NLOHMANN_JSON_PASTE57(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE56(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56) +#define NLOHMANN_JSON_PASTE58(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE57(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57) +#define NLOHMANN_JSON_PASTE59(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE58(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58) +#define NLOHMANN_JSON_PASTE60(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE59(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59) +#define NLOHMANN_JSON_PASTE61(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE60(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60) +#define NLOHMANN_JSON_PASTE62(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE61(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61) +#define NLOHMANN_JSON_PASTE63(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61, v62) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE62(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61, v62) +#define NLOHMANN_JSON_PASTE64(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61, v62, v63) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE63(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61, v62, v63) + +#define NLOHMANN_JSON_TO(v1) nlohmann_json_j[#v1] = nlohmann_json_t.v1; +#define NLOHMANN_JSON_FROM(v1) nlohmann_json_j.at(#v1).get_to(nlohmann_json_t.v1); + +/*! +@brief macro +@def NLOHMANN_DEFINE_TYPE_INTRUSIVE +@since version 3.9.0 +*/ +#define NLOHMANN_DEFINE_TYPE_INTRUSIVE(Type, ...) \ + friend void to_json(nlohmann::json& nlohmann_json_j, const Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } \ + friend void from_json(const nlohmann::json& nlohmann_json_j, Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM, __VA_ARGS__)) } + +/*! +@brief macro +@def NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE +@since version 3.9.0 +*/ +#define NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(Type, ...) \ + inline void to_json(nlohmann::json& nlohmann_json_j, const Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } \ + inline void from_json(const nlohmann::json& nlohmann_json_j, Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM, __VA_ARGS__)) } + + +// inspired from https://stackoverflow.com/a/26745591 +// allows to call any std function as if (e.g. with begin): +// using std::begin; begin(x); +// +// it allows using the detected idiom to retrieve the return type +// of such an expression +#define NLOHMANN_CAN_CALL_STD_FUNC_IMPL(std_name) \ + namespace detail { \ + using std::std_name; \ + \ + template \ + using result_of_##std_name = decltype(std_name(std::declval()...)); \ + } \ + \ + namespace detail2 { \ + struct std_name##_tag \ + { \ + }; \ + \ + template \ + std_name##_tag std_name(T&&...); \ + \ + template \ + using result_of_##std_name = decltype(std_name(std::declval()...)); \ + \ + template \ + struct would_call_std_##std_name \ + { \ + static constexpr auto const value = ::nlohmann::detail:: \ + is_detected_exact::value; \ + }; \ + } /* namespace detail2 */ \ + \ + template \ + struct would_call_std_##std_name : detail2::would_call_std_##std_name \ + { \ + } + +#ifndef JSON_USE_IMPLICIT_CONVERSIONS + #define JSON_USE_IMPLICIT_CONVERSIONS 1 +#endif + +#if JSON_USE_IMPLICIT_CONVERSIONS + #define JSON_EXPLICIT +#else + #define JSON_EXPLICIT explicit +#endif + +#ifndef JSON_DIAGNOSTICS + #define JSON_DIAGNOSTICS 0 +#endif + + +namespace nlohmann +{ +namespace detail +{ + +/*! +@brief replace all occurrences of a substring by another string + +@param[in,out] s the string to manipulate; changed so that all + occurrences of @a f are replaced with @a t +@param[in] f the substring to replace with @a t +@param[in] t the string to replace @a f + +@pre The search string @a f must not be empty. **This precondition is +enforced with an assertion.** + +@since version 2.0.0 +*/ +inline void replace_substring(std::string& s, const std::string& f, + const std::string& t) +{ + JSON_ASSERT(!f.empty()); + for (auto pos = s.find(f); // find first occurrence of f + pos != std::string::npos; // make sure f was found + s.replace(pos, f.size(), t), // replace with t, and + pos = s.find(f, pos + t.size())) // find next occurrence of f + {} +} + +/*! + * @brief string escaping as described in RFC 6901 (Sect. 4) + * @param[in] s string to escape + * @return escaped string + * + * Note the order of escaping "~" to "~0" and "/" to "~1" is important. + */ +inline std::string escape(std::string s) +{ + replace_substring(s, "~", "~0"); + replace_substring(s, "/", "~1"); + return s; +} + +/*! + * @brief string unescaping as described in RFC 6901 (Sect. 4) + * @param[in] s string to unescape + * @return unescaped string + * + * Note the order of escaping "~1" to "/" and "~0" to "~" is important. + */ +static void unescape(std::string& s) +{ + replace_substring(s, "~1", "/"); + replace_substring(s, "~0", "~"); +} + +} // namespace detail +} // namespace nlohmann + +// #include + + +#include // size_t + +namespace nlohmann +{ +namespace detail +{ +/// struct to capture the start position of the current token +struct position_t +{ + /// the total number of characters read + std::size_t chars_read_total = 0; + /// the number of characters read in the current line + std::size_t chars_read_current_line = 0; + /// the number of lines read + std::size_t lines_read = 0; + + /// conversion to size_t to preserve SAX interface + constexpr operator size_t() const + { + return chars_read_total; + } +}; + +} // namespace detail +} // namespace nlohmann + +// #include + + +namespace nlohmann +{ +namespace detail +{ +//////////////// +// exceptions // +//////////////// + +/// @brief general exception of the @ref basic_json class +/// @sa https://json.nlohmann.me/api/basic_json/exception/ +class exception : public std::exception +{ + public: + /// returns the explanatory string + const char* what() const noexcept override + { + return m.what(); + } + + /// the id of the exception + const int id; // NOLINT(cppcoreguidelines-non-private-member-variables-in-classes) + + protected: + JSON_HEDLEY_NON_NULL(3) + exception(int id_, const char* what_arg) : id(id_), m(what_arg) {} // NOLINT(bugprone-throw-keyword-missing) + + static std::string name(const std::string& ename, int id_) + { + return "[json.exception." + ename + "." + std::to_string(id_) + "] "; + } + + template + static std::string diagnostics(const BasicJsonType& leaf_element) + { +#if JSON_DIAGNOSTICS + std::vector tokens; + for (const auto* current = &leaf_element; current->m_parent != nullptr; current = current->m_parent) + { + switch (current->m_parent->type()) + { + case value_t::array: + { + for (std::size_t i = 0; i < current->m_parent->m_value.array->size(); ++i) + { + if (¤t->m_parent->m_value.array->operator[](i) == current) + { + tokens.emplace_back(std::to_string(i)); + break; + } + } + break; + } + + case value_t::object: + { + for (const auto& element : *current->m_parent->m_value.object) + { + if (&element.second == current) + { + tokens.emplace_back(element.first.c_str()); + break; + } + } + break; + } + + case value_t::null: // LCOV_EXCL_LINE + case value_t::string: // LCOV_EXCL_LINE + case value_t::boolean: // LCOV_EXCL_LINE + case value_t::number_integer: // LCOV_EXCL_LINE + case value_t::number_unsigned: // LCOV_EXCL_LINE + case value_t::number_float: // LCOV_EXCL_LINE + case value_t::binary: // LCOV_EXCL_LINE + case value_t::discarded: // LCOV_EXCL_LINE + default: // LCOV_EXCL_LINE + break; // LCOV_EXCL_LINE + } + } + + if (tokens.empty()) + { + return ""; + } + + return "(" + std::accumulate(tokens.rbegin(), tokens.rend(), std::string{}, + [](const std::string & a, const std::string & b) + { + return a + "/" + detail::escape(b); + }) + ") "; +#else + static_cast(leaf_element); + return ""; +#endif + } + + private: + /// an exception object as storage for error messages + std::runtime_error m; +}; + +/// @brief exception indicating a parse error +/// @sa https://json.nlohmann.me/api/basic_json/parse_error/ +class parse_error : public exception +{ + public: + /*! + @brief create a parse error exception + @param[in] id_ the id of the exception + @param[in] pos the position where the error occurred (or with + chars_read_total=0 if the position cannot be + determined) + @param[in] what_arg the explanatory string + @return parse_error object + */ + template + static parse_error create(int id_, const position_t& pos, const std::string& what_arg, const BasicJsonType& context) + { + std::string w = exception::name("parse_error", id_) + "parse error" + + position_string(pos) + ": " + exception::diagnostics(context) + what_arg; + return {id_, pos.chars_read_total, w.c_str()}; + } + + template + static parse_error create(int id_, std::size_t byte_, const std::string& what_arg, const BasicJsonType& context) + { + std::string w = exception::name("parse_error", id_) + "parse error" + + (byte_ != 0 ? (" at byte " + std::to_string(byte_)) : "") + + ": " + exception::diagnostics(context) + what_arg; + return {id_, byte_, w.c_str()}; + } + + /*! + @brief byte index of the parse error + + The byte index of the last read character in the input file. + + @note For an input with n bytes, 1 is the index of the first character and + n+1 is the index of the terminating null byte or the end of file. + This also holds true when reading a byte vector (CBOR or MessagePack). + */ + const std::size_t byte; + + private: + parse_error(int id_, std::size_t byte_, const char* what_arg) + : exception(id_, what_arg), byte(byte_) {} + + static std::string position_string(const position_t& pos) + { + return " at line " + std::to_string(pos.lines_read + 1) + + ", column " + std::to_string(pos.chars_read_current_line); + } +}; + +/// @brief exception indicating errors with iterators +/// @sa https://json.nlohmann.me/api/basic_json/invalid_iterator/ +class invalid_iterator : public exception +{ + public: + template + static invalid_iterator create(int id_, const std::string& what_arg, const BasicJsonType& context) + { + std::string w = exception::name("invalid_iterator", id_) + exception::diagnostics(context) + what_arg; + return {id_, w.c_str()}; + } + + private: + JSON_HEDLEY_NON_NULL(3) + invalid_iterator(int id_, const char* what_arg) + : exception(id_, what_arg) {} +}; + +/// @brief exception indicating executing a member function with a wrong type +/// @sa https://json.nlohmann.me/api/basic_json/type_error/ +class type_error : public exception +{ + public: + template + static type_error create(int id_, const std::string& what_arg, const BasicJsonType& context) + { + std::string w = exception::name("type_error", id_) + exception::diagnostics(context) + what_arg; + return {id_, w.c_str()}; + } + + private: + JSON_HEDLEY_NON_NULL(3) + type_error(int id_, const char* what_arg) : exception(id_, what_arg) {} +}; + +/// @brief exception indicating access out of the defined range +/// @sa https://json.nlohmann.me/api/basic_json/out_of_range/ +class out_of_range : public exception +{ + public: + template + static out_of_range create(int id_, const std::string& what_arg, const BasicJsonType& context) + { + std::string w = exception::name("out_of_range", id_) + exception::diagnostics(context) + what_arg; + return {id_, w.c_str()}; + } + + private: + JSON_HEDLEY_NON_NULL(3) + out_of_range(int id_, const char* what_arg) : exception(id_, what_arg) {} +}; + +/// @brief exception indicating other library errors +/// @sa https://json.nlohmann.me/api/basic_json/other_error/ +class other_error : public exception +{ + public: + template + static other_error create(int id_, const std::string& what_arg, const BasicJsonType& context) + { + std::string w = exception::name("other_error", id_) + exception::diagnostics(context) + what_arg; + return {id_, w.c_str()}; + } + + private: + JSON_HEDLEY_NON_NULL(3) + other_error(int id_, const char* what_arg) : exception(id_, what_arg) {} +}; + +} // namespace detail +} // namespace nlohmann + +// #include + +// #include + + +#include // size_t +#include // conditional, enable_if, false_type, integral_constant, is_constructible, is_integral, is_same, remove_cv, remove_reference, true_type +#include // index_sequence, make_index_sequence, index_sequence_for + +// #include + + +namespace nlohmann +{ +namespace detail +{ + +template +using uncvref_t = typename std::remove_cv::type>::type; + +#ifdef JSON_HAS_CPP_14 + +// the following utilities are natively available in C++14 +using std::enable_if_t; +using std::index_sequence; +using std::make_index_sequence; +using std::index_sequence_for; + +#else + +// alias templates to reduce boilerplate +template +using enable_if_t = typename std::enable_if::type; + +// The following code is taken from https://github.com/abseil/abseil-cpp/blob/10cb35e459f5ecca5b2ff107635da0bfa41011b4/absl/utility/utility.h +// which is part of Google Abseil (https://github.com/abseil/abseil-cpp), licensed under the Apache License 2.0. + +//// START OF CODE FROM GOOGLE ABSEIL + +// integer_sequence +// +// Class template representing a compile-time integer sequence. An instantiation +// of `integer_sequence` has a sequence of integers encoded in its +// type through its template arguments (which is a common need when +// working with C++11 variadic templates). `absl::integer_sequence` is designed +// to be a drop-in replacement for C++14's `std::integer_sequence`. +// +// Example: +// +// template< class T, T... Ints > +// void user_function(integer_sequence); +// +// int main() +// { +// // user_function's `T` will be deduced to `int` and `Ints...` +// // will be deduced to `0, 1, 2, 3, 4`. +// user_function(make_integer_sequence()); +// } +template +struct integer_sequence +{ + using value_type = T; + static constexpr std::size_t size() noexcept + { + return sizeof...(Ints); + } +}; + +// index_sequence +// +// A helper template for an `integer_sequence` of `size_t`, +// `absl::index_sequence` is designed to be a drop-in replacement for C++14's +// `std::index_sequence`. +template +using index_sequence = integer_sequence; + +namespace utility_internal +{ + +template +struct Extend; + +// Note that SeqSize == sizeof...(Ints). It's passed explicitly for efficiency. +template +struct Extend, SeqSize, 0> +{ + using type = integer_sequence < T, Ints..., (Ints + SeqSize)... >; +}; + +template +struct Extend, SeqSize, 1> +{ + using type = integer_sequence < T, Ints..., (Ints + SeqSize)..., 2 * SeqSize >; +}; + +// Recursion helper for 'make_integer_sequence'. +// 'Gen::type' is an alias for 'integer_sequence'. +template +struct Gen +{ + using type = + typename Extend < typename Gen < T, N / 2 >::type, N / 2, N % 2 >::type; +}; + +template +struct Gen +{ + using type = integer_sequence; +}; + +} // namespace utility_internal + +// Compile-time sequences of integers + +// make_integer_sequence +// +// This template alias is equivalent to +// `integer_sequence`, and is designed to be a drop-in +// replacement for C++14's `std::make_integer_sequence`. +template +using make_integer_sequence = typename utility_internal::Gen::type; + +// make_index_sequence +// +// This template alias is equivalent to `index_sequence<0, 1, ..., N-1>`, +// and is designed to be a drop-in replacement for C++14's +// `std::make_index_sequence`. +template +using make_index_sequence = make_integer_sequence; + +// index_sequence_for +// +// Converts a typename pack into an index sequence of the same length, and +// is designed to be a drop-in replacement for C++14's +// `std::index_sequence_for()` +template +using index_sequence_for = make_index_sequence; + +//// END OF CODE FROM GOOGLE ABSEIL + +#endif + +// dispatch utility (taken from ranges-v3) +template struct priority_tag : priority_tag < N - 1 > {}; +template<> struct priority_tag<0> {}; + +// taken from ranges-v3 +template +struct static_const +{ + static constexpr T value{}; +}; + +template +constexpr T static_const::value; // NOLINT(readability-redundant-declaration) + +} // namespace detail +} // namespace nlohmann + +// #include + + +namespace nlohmann +{ +namespace detail +{ +// dispatching helper struct +template struct identity_tag {}; +} // namespace detail +} // namespace nlohmann + +// #include + + +#include // numeric_limits +#include // false_type, is_constructible, is_integral, is_same, true_type +#include // declval +#include // tuple + +// #include + + +// #include + + +#include // random_access_iterator_tag + +// #include + +// #include + + +namespace nlohmann +{ +namespace detail +{ +template +struct iterator_types {}; + +template +struct iterator_types < + It, + void_t> +{ + using difference_type = typename It::difference_type; + using value_type = typename It::value_type; + using pointer = typename It::pointer; + using reference = typename It::reference; + using iterator_category = typename It::iterator_category; +}; + +// This is required as some compilers implement std::iterator_traits in a way that +// doesn't work with SFINAE. See https://github.com/nlohmann/json/issues/1341. +template +struct iterator_traits +{ +}; + +template +struct iterator_traits < T, enable_if_t < !std::is_pointer::value >> + : iterator_types +{ +}; + +template +struct iterator_traits::value>> +{ + using iterator_category = std::random_access_iterator_tag; + using value_type = T; + using difference_type = ptrdiff_t; + using pointer = T*; + using reference = T&; +}; +} // namespace detail +} // namespace nlohmann + +// #include + + +// #include + + +namespace nlohmann +{ +NLOHMANN_CAN_CALL_STD_FUNC_IMPL(begin); +} // namespace nlohmann + +// #include + + +// #include + + +namespace nlohmann +{ +NLOHMANN_CAN_CALL_STD_FUNC_IMPL(end); +} // namespace nlohmann + +// #include + +// #include + +// #include +#ifndef INCLUDE_NLOHMANN_JSON_FWD_HPP_ +#define INCLUDE_NLOHMANN_JSON_FWD_HPP_ + +#include // int64_t, uint64_t +#include // map +#include // allocator +#include // string +#include // vector + +/*! +@brief namespace for Niels Lohmann +@see https://github.com/nlohmann +@since version 1.0.0 +*/ +namespace nlohmann +{ +/*! +@brief default JSONSerializer template argument + +This serializer ignores the template arguments and uses ADL +([argument-dependent lookup](https://en.cppreference.com/w/cpp/language/adl)) +for serialization. +*/ +template +struct adl_serializer; + +/// a class to store JSON values +/// @sa https://json.nlohmann.me/api/basic_json/ +template class ObjectType = + std::map, + template class ArrayType = std::vector, + class StringType = std::string, class BooleanType = bool, + class NumberIntegerType = std::int64_t, + class NumberUnsignedType = std::uint64_t, + class NumberFloatType = double, + template class AllocatorType = std::allocator, + template class JSONSerializer = + adl_serializer, + class BinaryType = std::vector> +class basic_json; + +/// @brief JSON Pointer defines a string syntax for identifying a specific value within a JSON document +/// @sa https://json.nlohmann.me/api/json_pointer/ +template +class json_pointer; + +/*! +@brief default specialization +@sa https://json.nlohmann.me/api/json/ +*/ +using json = basic_json<>; + +/// @brief a minimal map-like container that preserves insertion order +/// @sa https://json.nlohmann.me/api/ordered_map/ +template +struct ordered_map; + +/// @brief specialization that maintains the insertion order of object keys +/// @sa https://json.nlohmann.me/api/ordered_json/ +using ordered_json = basic_json; + +} // namespace nlohmann + +#endif // INCLUDE_NLOHMANN_JSON_FWD_HPP_ + + +namespace nlohmann +{ +/*! +@brief detail namespace with internal helper functions + +This namespace collects functions that should not be exposed, +implementations of some @ref basic_json methods, and meta-programming helpers. + +@since version 2.1.0 +*/ +namespace detail +{ +///////////// +// helpers // +///////////// + +// Note to maintainers: +// +// Every trait in this file expects a non CV-qualified type. +// The only exceptions are in the 'aliases for detected' section +// (i.e. those of the form: decltype(T::member_function(std::declval()))) +// +// In this case, T has to be properly CV-qualified to constraint the function arguments +// (e.g. to_json(BasicJsonType&, const T&)) + +template struct is_basic_json : std::false_type {}; + +NLOHMANN_BASIC_JSON_TPL_DECLARATION +struct is_basic_json : std::true_type {}; + +////////////////////// +// json_ref helpers // +////////////////////// + +template +class json_ref; + +template +struct is_json_ref : std::false_type {}; + +template +struct is_json_ref> : std::true_type {}; + +////////////////////////// +// aliases for detected // +////////////////////////// + +template +using mapped_type_t = typename T::mapped_type; + +template +using key_type_t = typename T::key_type; + +template +using value_type_t = typename T::value_type; + +template +using difference_type_t = typename T::difference_type; + +template +using pointer_t = typename T::pointer; + +template +using reference_t = typename T::reference; + +template +using iterator_category_t = typename T::iterator_category; + +template +using to_json_function = decltype(T::to_json(std::declval()...)); + +template +using from_json_function = decltype(T::from_json(std::declval()...)); + +template +using get_template_function = decltype(std::declval().template get()); + +// trait checking if JSONSerializer::from_json(json const&, udt&) exists +template +struct has_from_json : std::false_type {}; + +// trait checking if j.get is valid +// use this trait instead of std::is_constructible or std::is_convertible, +// both rely on, or make use of implicit conversions, and thus fail when T +// has several constructors/operator= (see https://github.com/nlohmann/json/issues/958) +template +struct is_getable +{ + static constexpr bool value = is_detected::value; +}; + +template +struct has_from_json < BasicJsonType, T, enable_if_t < !is_basic_json::value >> +{ + using serializer = typename BasicJsonType::template json_serializer; + + static constexpr bool value = + is_detected_exact::value; +}; + +// This trait checks if JSONSerializer::from_json(json const&) exists +// this overload is used for non-default-constructible user-defined-types +template +struct has_non_default_from_json : std::false_type {}; + +template +struct has_non_default_from_json < BasicJsonType, T, enable_if_t < !is_basic_json::value >> +{ + using serializer = typename BasicJsonType::template json_serializer; + + static constexpr bool value = + is_detected_exact::value; +}; + +// This trait checks if BasicJsonType::json_serializer::to_json exists +// Do not evaluate the trait when T is a basic_json type, to avoid template instantiation infinite recursion. +template +struct has_to_json : std::false_type {}; + +template +struct has_to_json < BasicJsonType, T, enable_if_t < !is_basic_json::value >> +{ + using serializer = typename BasicJsonType::template json_serializer; + + static constexpr bool value = + is_detected_exact::value; +}; + + +/////////////////// +// is_ functions // +/////////////////// + +// https://en.cppreference.com/w/cpp/types/conjunction +template struct conjunction : std::true_type { }; +template struct conjunction : B1 { }; +template +struct conjunction +: std::conditional, B1>::type {}; + +// https://en.cppreference.com/w/cpp/types/negation +template struct negation : std::integral_constant < bool, !B::value > { }; + +// Reimplementation of is_constructible and is_default_constructible, due to them being broken for +// std::pair and std::tuple until LWG 2367 fix (see https://cplusplus.github.io/LWG/lwg-defects.html#2367). +// This causes compile errors in e.g. clang 3.5 or gcc 4.9. +template +struct is_default_constructible : std::is_default_constructible {}; + +template +struct is_default_constructible> + : conjunction, is_default_constructible> {}; + +template +struct is_default_constructible> + : conjunction, is_default_constructible> {}; + +template +struct is_default_constructible> + : conjunction...> {}; + +template +struct is_default_constructible> + : conjunction...> {}; + + +template +struct is_constructible : std::is_constructible {}; + +template +struct is_constructible> : is_default_constructible> {}; + +template +struct is_constructible> : is_default_constructible> {}; + +template +struct is_constructible> : is_default_constructible> {}; + +template +struct is_constructible> : is_default_constructible> {}; + + +template +struct is_iterator_traits : std::false_type {}; + +template +struct is_iterator_traits> +{ + private: + using traits = iterator_traits; + + public: + static constexpr auto value = + is_detected::value && + is_detected::value && + is_detected::value && + is_detected::value && + is_detected::value; +}; + +template +struct is_range +{ + private: + using t_ref = typename std::add_lvalue_reference::type; + + using iterator = detected_t; + using sentinel = detected_t; + + // to be 100% correct, it should use https://en.cppreference.com/w/cpp/iterator/input_or_output_iterator + // and https://en.cppreference.com/w/cpp/iterator/sentinel_for + // but reimplementing these would be too much work, as a lot of other concepts are used underneath + static constexpr auto is_iterator_begin = + is_iterator_traits>::value; + + public: + static constexpr bool value = !std::is_same::value && !std::is_same::value && is_iterator_begin; +}; + +template +using iterator_t = enable_if_t::value, result_of_begin())>>; + +template +using range_value_t = value_type_t>>; + +// The following implementation of is_complete_type is taken from +// https://blogs.msdn.microsoft.com/vcblog/2015/12/02/partial-support-for-expression-sfinae-in-vs-2015-update-1/ +// and is written by Xiang Fan who agreed to using it in this library. + +template +struct is_complete_type : std::false_type {}; + +template +struct is_complete_type : std::true_type {}; + +template +struct is_compatible_object_type_impl : std::false_type {}; + +template +struct is_compatible_object_type_impl < + BasicJsonType, CompatibleObjectType, + enable_if_t < is_detected::value&& + is_detected::value >> +{ + using object_t = typename BasicJsonType::object_t; + + // macOS's is_constructible does not play well with nonesuch... + static constexpr bool value = + is_constructible::value && + is_constructible::value; +}; + +template +struct is_compatible_object_type + : is_compatible_object_type_impl {}; + +template +struct is_constructible_object_type_impl : std::false_type {}; + +template +struct is_constructible_object_type_impl < + BasicJsonType, ConstructibleObjectType, + enable_if_t < is_detected::value&& + is_detected::value >> +{ + using object_t = typename BasicJsonType::object_t; + + static constexpr bool value = + (is_default_constructible::value && + (std::is_move_assignable::value || + std::is_copy_assignable::value) && + (is_constructible::value && + std::is_same < + typename object_t::mapped_type, + typename ConstructibleObjectType::mapped_type >::value)) || + (has_from_json::value || + has_non_default_from_json < + BasicJsonType, + typename ConstructibleObjectType::mapped_type >::value); +}; + +template +struct is_constructible_object_type + : is_constructible_object_type_impl {}; + +template +struct is_compatible_string_type +{ + static constexpr auto value = + is_constructible::value; +}; + +template +struct is_constructible_string_type +{ + static constexpr auto value = + is_constructible::value; +}; + +template +struct is_compatible_array_type_impl : std::false_type {}; + +template +struct is_compatible_array_type_impl < + BasicJsonType, CompatibleArrayType, + enable_if_t < + is_detected::value&& + is_iterator_traits>>::value&& +// special case for types like std::filesystem::path whose iterator's value_type are themselves +// c.f. https://github.com/nlohmann/json/pull/3073 + !std::is_same>::value >> +{ + static constexpr bool value = + is_constructible>::value; +}; + +template +struct is_compatible_array_type + : is_compatible_array_type_impl {}; + +template +struct is_constructible_array_type_impl : std::false_type {}; + +template +struct is_constructible_array_type_impl < + BasicJsonType, ConstructibleArrayType, + enable_if_t::value >> + : std::true_type {}; + +template +struct is_constructible_array_type_impl < + BasicJsonType, ConstructibleArrayType, + enable_if_t < !std::is_same::value&& + !is_compatible_string_type::value&& + is_default_constructible::value&& +(std::is_move_assignable::value || + std::is_copy_assignable::value)&& +is_detected::value&& +is_iterator_traits>>::value&& +is_detected::value&& +// special case for types like std::filesystem::path whose iterator's value_type are themselves +// c.f. https://github.com/nlohmann/json/pull/3073 +!std::is_same>::value&& + is_complete_type < + detected_t>::value >> +{ + using value_type = range_value_t; + + static constexpr bool value = + std::is_same::value || + has_from_json::value || + has_non_default_from_json < + BasicJsonType, + value_type >::value; +}; + +template +struct is_constructible_array_type + : is_constructible_array_type_impl {}; + +template +struct is_compatible_integer_type_impl : std::false_type {}; + +template +struct is_compatible_integer_type_impl < + RealIntegerType, CompatibleNumberIntegerType, + enable_if_t < std::is_integral::value&& + std::is_integral::value&& + !std::is_same::value >> +{ + // is there an assert somewhere on overflows? + using RealLimits = std::numeric_limits; + using CompatibleLimits = std::numeric_limits; + + static constexpr auto value = + is_constructible::value && + CompatibleLimits::is_integer && + RealLimits::is_signed == CompatibleLimits::is_signed; +}; + +template +struct is_compatible_integer_type + : is_compatible_integer_type_impl {}; + +template +struct is_compatible_type_impl: std::false_type {}; + +template +struct is_compatible_type_impl < + BasicJsonType, CompatibleType, + enable_if_t::value >> +{ + static constexpr bool value = + has_to_json::value; +}; + +template +struct is_compatible_type + : is_compatible_type_impl {}; + +template +struct is_constructible_tuple : std::false_type {}; + +template +struct is_constructible_tuple> : conjunction...> {}; + +// a naive helper to check if a type is an ordered_map (exploits the fact that +// ordered_map inherits capacity() from std::vector) +template +struct is_ordered_map +{ + using one = char; + + struct two + { + char x[2]; // NOLINT(cppcoreguidelines-avoid-c-arrays,hicpp-avoid-c-arrays,modernize-avoid-c-arrays) + }; + + template static one test( decltype(&C::capacity) ) ; + template static two test(...); + + enum { value = sizeof(test(nullptr)) == sizeof(char) }; // NOLINT(cppcoreguidelines-pro-type-vararg,hicpp-vararg) +}; + +// to avoid useless casts (see https://github.com/nlohmann/json/issues/2893#issuecomment-889152324) +template < typename T, typename U, enable_if_t < !std::is_same::value, int > = 0 > +T conditional_static_cast(U value) +{ + return static_cast(value); +} + +template::value, int> = 0> +T conditional_static_cast(U value) +{ + return value; +} + +} // namespace detail +} // namespace nlohmann + +// #include + + +#if JSON_HAS_EXPERIMENTAL_FILESYSTEM +#include +namespace nlohmann::detail +{ +namespace std_fs = std::experimental::filesystem; +} // namespace nlohmann::detail +#elif JSON_HAS_FILESYSTEM +#include +namespace nlohmann::detail +{ +namespace std_fs = std::filesystem; +} // namespace nlohmann::detail +#endif + +namespace nlohmann +{ +namespace detail +{ +template +void from_json(const BasicJsonType& j, typename std::nullptr_t& n) +{ + if (JSON_HEDLEY_UNLIKELY(!j.is_null())) + { + JSON_THROW(type_error::create(302, "type must be null, but is " + std::string(j.type_name()), j)); + } + n = nullptr; +} + +// overloads for basic_json template parameters +template < typename BasicJsonType, typename ArithmeticType, + enable_if_t < std::is_arithmetic::value&& + !std::is_same::value, + int > = 0 > +void get_arithmetic_value(const BasicJsonType& j, ArithmeticType& val) +{ + switch (static_cast(j)) + { + case value_t::number_unsigned: + { + val = static_cast(*j.template get_ptr()); + break; + } + case value_t::number_integer: + { + val = static_cast(*j.template get_ptr()); + break; + } + case value_t::number_float: + { + val = static_cast(*j.template get_ptr()); + break; + } + + case value_t::null: + case value_t::object: + case value_t::array: + case value_t::string: + case value_t::boolean: + case value_t::binary: + case value_t::discarded: + default: + JSON_THROW(type_error::create(302, "type must be number, but is " + std::string(j.type_name()), j)); + } +} + +template +void from_json(const BasicJsonType& j, typename BasicJsonType::boolean_t& b) +{ + if (JSON_HEDLEY_UNLIKELY(!j.is_boolean())) + { + JSON_THROW(type_error::create(302, "type must be boolean, but is " + std::string(j.type_name()), j)); + } + b = *j.template get_ptr(); +} + +template +void from_json(const BasicJsonType& j, typename BasicJsonType::string_t& s) +{ + if (JSON_HEDLEY_UNLIKELY(!j.is_string())) + { + JSON_THROW(type_error::create(302, "type must be string, but is " + std::string(j.type_name()), j)); + } + s = *j.template get_ptr(); +} + +template < + typename BasicJsonType, typename ConstructibleStringType, + enable_if_t < + is_constructible_string_type::value&& + !std::is_same::value, + int > = 0 > +void from_json(const BasicJsonType& j, ConstructibleStringType& s) +{ + if (JSON_HEDLEY_UNLIKELY(!j.is_string())) + { + JSON_THROW(type_error::create(302, "type must be string, but is " + std::string(j.type_name()), j)); + } + + s = *j.template get_ptr(); +} + +template +void from_json(const BasicJsonType& j, typename BasicJsonType::number_float_t& val) +{ + get_arithmetic_value(j, val); +} + +template +void from_json(const BasicJsonType& j, typename BasicJsonType::number_unsigned_t& val) +{ + get_arithmetic_value(j, val); +} + +template +void from_json(const BasicJsonType& j, typename BasicJsonType::number_integer_t& val) +{ + get_arithmetic_value(j, val); +} + +template::value, int> = 0> +void from_json(const BasicJsonType& j, EnumType& e) +{ + typename std::underlying_type::type val; + get_arithmetic_value(j, val); + e = static_cast(val); +} + +// forward_list doesn't have an insert method +template::value, int> = 0> +void from_json(const BasicJsonType& j, std::forward_list& l) +{ + if (JSON_HEDLEY_UNLIKELY(!j.is_array())) + { + JSON_THROW(type_error::create(302, "type must be array, but is " + std::string(j.type_name()), j)); + } + l.clear(); + std::transform(j.rbegin(), j.rend(), + std::front_inserter(l), [](const BasicJsonType & i) + { + return i.template get(); + }); +} + +// valarray doesn't have an insert method +template::value, int> = 0> +void from_json(const BasicJsonType& j, std::valarray& l) +{ + if (JSON_HEDLEY_UNLIKELY(!j.is_array())) + { + JSON_THROW(type_error::create(302, "type must be array, but is " + std::string(j.type_name()), j)); + } + l.resize(j.size()); + std::transform(j.begin(), j.end(), std::begin(l), + [](const BasicJsonType & elem) + { + return elem.template get(); + }); +} + +template +auto from_json(const BasicJsonType& j, T (&arr)[N]) // NOLINT(cppcoreguidelines-avoid-c-arrays,hicpp-avoid-c-arrays,modernize-avoid-c-arrays) +-> decltype(j.template get(), void()) +{ + for (std::size_t i = 0; i < N; ++i) + { + arr[i] = j.at(i).template get(); + } +} + +template +void from_json_array_impl(const BasicJsonType& j, typename BasicJsonType::array_t& arr, priority_tag<3> /*unused*/) +{ + arr = *j.template get_ptr(); +} + +template +auto from_json_array_impl(const BasicJsonType& j, std::array& arr, + priority_tag<2> /*unused*/) +-> decltype(j.template get(), void()) +{ + for (std::size_t i = 0; i < N; ++i) + { + arr[i] = j.at(i).template get(); + } +} + +template::value, + int> = 0> +auto from_json_array_impl(const BasicJsonType& j, ConstructibleArrayType& arr, priority_tag<1> /*unused*/) +-> decltype( + arr.reserve(std::declval()), + j.template get(), + void()) +{ + using std::end; + + ConstructibleArrayType ret; + ret.reserve(j.size()); + std::transform(j.begin(), j.end(), + std::inserter(ret, end(ret)), [](const BasicJsonType & i) + { + // get() returns *this, this won't call a from_json + // method when value_type is BasicJsonType + return i.template get(); + }); + arr = std::move(ret); +} + +template::value, + int> = 0> +void from_json_array_impl(const BasicJsonType& j, ConstructibleArrayType& arr, + priority_tag<0> /*unused*/) +{ + using std::end; + + ConstructibleArrayType ret; + std::transform( + j.begin(), j.end(), std::inserter(ret, end(ret)), + [](const BasicJsonType & i) + { + // get() returns *this, this won't call a from_json + // method when value_type is BasicJsonType + return i.template get(); + }); + arr = std::move(ret); +} + +template < typename BasicJsonType, typename ConstructibleArrayType, + enable_if_t < + is_constructible_array_type::value&& + !is_constructible_object_type::value&& + !is_constructible_string_type::value&& + !std::is_same::value&& + !is_basic_json::value, + int > = 0 > +auto from_json(const BasicJsonType& j, ConstructibleArrayType& arr) +-> decltype(from_json_array_impl(j, arr, priority_tag<3> {}), +j.template get(), +void()) +{ + if (JSON_HEDLEY_UNLIKELY(!j.is_array())) + { + JSON_THROW(type_error::create(302, "type must be array, but is " + std::string(j.type_name()), j)); + } + + from_json_array_impl(j, arr, priority_tag<3> {}); +} + +template < typename BasicJsonType, typename T, std::size_t... Idx > +std::array from_json_inplace_array_impl(BasicJsonType&& j, + identity_tag> /*unused*/, index_sequence /*unused*/) +{ + return { { std::forward(j).at(Idx).template get()... } }; +} + +template < typename BasicJsonType, typename T, std::size_t N > +auto from_json(BasicJsonType&& j, identity_tag> tag) +-> decltype(from_json_inplace_array_impl(std::forward(j), tag, make_index_sequence {})) +{ + if (JSON_HEDLEY_UNLIKELY(!j.is_array())) + { + JSON_THROW(type_error::create(302, "type must be array, but is " + std::string(j.type_name()), j)); + } + + return from_json_inplace_array_impl(std::forward(j), tag, make_index_sequence {}); +} + +template +void from_json(const BasicJsonType& j, typename BasicJsonType::binary_t& bin) +{ + if (JSON_HEDLEY_UNLIKELY(!j.is_binary())) + { + JSON_THROW(type_error::create(302, "type must be binary, but is " + std::string(j.type_name()), j)); + } + + bin = *j.template get_ptr(); +} + +template::value, int> = 0> +void from_json(const BasicJsonType& j, ConstructibleObjectType& obj) +{ + if (JSON_HEDLEY_UNLIKELY(!j.is_object())) + { + JSON_THROW(type_error::create(302, "type must be object, but is " + std::string(j.type_name()), j)); + } + + ConstructibleObjectType ret; + const auto* inner_object = j.template get_ptr(); + using value_type = typename ConstructibleObjectType::value_type; + std::transform( + inner_object->begin(), inner_object->end(), + std::inserter(ret, ret.begin()), + [](typename BasicJsonType::object_t::value_type const & p) + { + return value_type(p.first, p.second.template get()); + }); + obj = std::move(ret); +} + +// overload for arithmetic types, not chosen for basic_json template arguments +// (BooleanType, etc..); note: Is it really necessary to provide explicit +// overloads for boolean_t etc. in case of a custom BooleanType which is not +// an arithmetic type? +template < typename BasicJsonType, typename ArithmeticType, + enable_if_t < + std::is_arithmetic::value&& + !std::is_same::value&& + !std::is_same::value&& + !std::is_same::value&& + !std::is_same::value, + int > = 0 > +void from_json(const BasicJsonType& j, ArithmeticType& val) +{ + switch (static_cast(j)) + { + case value_t::number_unsigned: + { + val = static_cast(*j.template get_ptr()); + break; + } + case value_t::number_integer: + { + val = static_cast(*j.template get_ptr()); + break; + } + case value_t::number_float: + { + val = static_cast(*j.template get_ptr()); + break; + } + case value_t::boolean: + { + val = static_cast(*j.template get_ptr()); + break; + } + + case value_t::null: + case value_t::object: + case value_t::array: + case value_t::string: + case value_t::binary: + case value_t::discarded: + default: + JSON_THROW(type_error::create(302, "type must be number, but is " + std::string(j.type_name()), j)); + } +} + +template +std::tuple from_json_tuple_impl_base(BasicJsonType&& j, index_sequence /*unused*/) +{ + return std::make_tuple(std::forward(j).at(Idx).template get()...); +} + +template < typename BasicJsonType, class A1, class A2 > +std::pair from_json_tuple_impl(BasicJsonType&& j, identity_tag> /*unused*/, priority_tag<0> /*unused*/) +{ + return {std::forward(j).at(0).template get(), + std::forward(j).at(1).template get()}; +} + +template +void from_json_tuple_impl(BasicJsonType&& j, std::pair& p, priority_tag<1> /*unused*/) +{ + p = from_json_tuple_impl(std::forward(j), identity_tag> {}, priority_tag<0> {}); +} + +template +std::tuple from_json_tuple_impl(BasicJsonType&& j, identity_tag> /*unused*/, priority_tag<2> /*unused*/) +{ + return from_json_tuple_impl_base(std::forward(j), index_sequence_for {}); +} + +template +void from_json_tuple_impl(BasicJsonType&& j, std::tuple& t, priority_tag<3> /*unused*/) +{ + t = from_json_tuple_impl_base(std::forward(j), index_sequence_for {}); +} + +template +auto from_json(BasicJsonType&& j, TupleRelated&& t) +-> decltype(from_json_tuple_impl(std::forward(j), std::forward(t), priority_tag<3> {})) +{ + if (JSON_HEDLEY_UNLIKELY(!j.is_array())) + { + JSON_THROW(type_error::create(302, "type must be array, but is " + std::string(j.type_name()), j)); + } + + return from_json_tuple_impl(std::forward(j), std::forward(t), priority_tag<3> {}); +} + +template < typename BasicJsonType, typename Key, typename Value, typename Compare, typename Allocator, + typename = enable_if_t < !std::is_constructible < + typename BasicJsonType::string_t, Key >::value >> +void from_json(const BasicJsonType& j, std::map& m) +{ + if (JSON_HEDLEY_UNLIKELY(!j.is_array())) + { + JSON_THROW(type_error::create(302, "type must be array, but is " + std::string(j.type_name()), j)); + } + m.clear(); + for (const auto& p : j) + { + if (JSON_HEDLEY_UNLIKELY(!p.is_array())) + { + JSON_THROW(type_error::create(302, "type must be array, but is " + std::string(p.type_name()), j)); + } + m.emplace(p.at(0).template get(), p.at(1).template get()); + } +} + +template < typename BasicJsonType, typename Key, typename Value, typename Hash, typename KeyEqual, typename Allocator, + typename = enable_if_t < !std::is_constructible < + typename BasicJsonType::string_t, Key >::value >> +void from_json(const BasicJsonType& j, std::unordered_map& m) +{ + if (JSON_HEDLEY_UNLIKELY(!j.is_array())) + { + JSON_THROW(type_error::create(302, "type must be array, but is " + std::string(j.type_name()), j)); + } + m.clear(); + for (const auto& p : j) + { + if (JSON_HEDLEY_UNLIKELY(!p.is_array())) + { + JSON_THROW(type_error::create(302, "type must be array, but is " + std::string(p.type_name()), j)); + } + m.emplace(p.at(0).template get(), p.at(1).template get()); + } +} + +#if JSON_HAS_FILESYSTEM || JSON_HAS_EXPERIMENTAL_FILESYSTEM +template +void from_json(const BasicJsonType& j, std_fs::path& p) +{ + if (JSON_HEDLEY_UNLIKELY(!j.is_string())) + { + JSON_THROW(type_error::create(302, "type must be string, but is " + std::string(j.type_name()), j)); + } + p = *j.template get_ptr(); +} +#endif + +struct from_json_fn +{ + template + auto operator()(const BasicJsonType& j, T&& val) const + noexcept(noexcept(from_json(j, std::forward(val)))) + -> decltype(from_json(j, std::forward(val))) + { + return from_json(j, std::forward(val)); + } +}; +} // namespace detail + +/// namespace to hold default `from_json` function +/// to see why this is required: +/// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4381.html +namespace // NOLINT(cert-dcl59-cpp,fuchsia-header-anon-namespaces,google-build-namespaces) +{ +constexpr const auto& from_json = detail::static_const::value; // NOLINT(misc-definitions-in-headers) +} // namespace +} // namespace nlohmann + +// #include + + +#include // copy +#include // begin, end +#include // string +#include // tuple, get +#include // is_same, is_constructible, is_floating_point, is_enum, underlying_type +#include // move, forward, declval, pair +#include // valarray +#include // vector + +// #include + +// #include + + +#include // size_t +#include // input_iterator_tag +#include // string, to_string +#include // tuple_size, get, tuple_element +#include // move + +// #include + +// #include + + +namespace nlohmann +{ +namespace detail +{ +template +void int_to_string( string_type& target, std::size_t value ) +{ + // For ADL + using std::to_string; + target = to_string(value); +} +template class iteration_proxy_value +{ + public: + using difference_type = std::ptrdiff_t; + using value_type = iteration_proxy_value; + using pointer = value_type * ; + using reference = value_type & ; + using iterator_category = std::input_iterator_tag; + using string_type = typename std::remove_cv< typename std::remove_reference().key() ) >::type >::type; + + private: + /// the iterator + IteratorType anchor; + /// an index for arrays (used to create key names) + std::size_t array_index = 0; + /// last stringified array index + mutable std::size_t array_index_last = 0; + /// a string representation of the array index + mutable string_type array_index_str = "0"; + /// an empty string (to return a reference for primitive values) + const string_type empty_str{}; + + public: + explicit iteration_proxy_value(IteratorType it) noexcept + : anchor(std::move(it)) + {} + + /// dereference operator (needed for range-based for) + iteration_proxy_value& operator*() + { + return *this; + } + + /// increment operator (needed for range-based for) + iteration_proxy_value& operator++() + { + ++anchor; + ++array_index; + + return *this; + } + + /// equality operator (needed for InputIterator) + bool operator==(const iteration_proxy_value& o) const + { + return anchor == o.anchor; + } + + /// inequality operator (needed for range-based for) + bool operator!=(const iteration_proxy_value& o) const + { + return anchor != o.anchor; + } + + /// return key of the iterator + const string_type& key() const + { + JSON_ASSERT(anchor.m_object != nullptr); + + switch (anchor.m_object->type()) + { + // use integer array index as key + case value_t::array: + { + if (array_index != array_index_last) + { + int_to_string( array_index_str, array_index ); + array_index_last = array_index; + } + return array_index_str; + } + + // use key from the object + case value_t::object: + return anchor.key(); + + // use an empty key for all primitive types + case value_t::null: + case value_t::string: + case value_t::boolean: + case value_t::number_integer: + case value_t::number_unsigned: + case value_t::number_float: + case value_t::binary: + case value_t::discarded: + default: + return empty_str; + } + } + + /// return value of the iterator + typename IteratorType::reference value() const + { + return anchor.value(); + } +}; + +/// proxy class for the items() function +template class iteration_proxy +{ + private: + /// the container to iterate + typename IteratorType::reference container; + + public: + /// construct iteration proxy from a container + explicit iteration_proxy(typename IteratorType::reference cont) noexcept + : container(cont) {} + + /// return iterator begin (needed for range-based for) + iteration_proxy_value begin() noexcept + { + return iteration_proxy_value(container.begin()); + } + + /// return iterator end (needed for range-based for) + iteration_proxy_value end() noexcept + { + return iteration_proxy_value(container.end()); + } +}; +// Structured Bindings Support +// For further reference see https://blog.tartanllama.xyz/structured-bindings/ +// And see https://github.com/nlohmann/json/pull/1391 +template = 0> +auto get(const nlohmann::detail::iteration_proxy_value& i) -> decltype(i.key()) +{ + return i.key(); +} +// Structured Bindings Support +// For further reference see https://blog.tartanllama.xyz/structured-bindings/ +// And see https://github.com/nlohmann/json/pull/1391 +template = 0> +auto get(const nlohmann::detail::iteration_proxy_value& i) -> decltype(i.value()) +{ + return i.value(); +} +} // namespace detail +} // namespace nlohmann + +// The Addition to the STD Namespace is required to add +// Structured Bindings Support to the iteration_proxy_value class +// For further reference see https://blog.tartanllama.xyz/structured-bindings/ +// And see https://github.com/nlohmann/json/pull/1391 +namespace std +{ +#if defined(__clang__) + // Fix: https://github.com/nlohmann/json/issues/1401 + #pragma clang diagnostic push + #pragma clang diagnostic ignored "-Wmismatched-tags" +#endif +template +class tuple_size<::nlohmann::detail::iteration_proxy_value> + : public std::integral_constant {}; + +template +class tuple_element> +{ + public: + using type = decltype( + get(std::declval < + ::nlohmann::detail::iteration_proxy_value> ())); +}; +#if defined(__clang__) + #pragma clang diagnostic pop +#endif +} // namespace std + +// #include + +// #include + +// #include + + +#if JSON_HAS_EXPERIMENTAL_FILESYSTEM +#include +namespace nlohmann::detail +{ +namespace std_fs = std::experimental::filesystem; +} // namespace nlohmann::detail +#elif JSON_HAS_FILESYSTEM +#include +namespace nlohmann::detail +{ +namespace std_fs = std::filesystem; +} // namespace nlohmann::detail +#endif + +namespace nlohmann +{ +namespace detail +{ +////////////////// +// constructors // +////////////////// + +/* + * Note all external_constructor<>::construct functions need to call + * j.m_value.destroy(j.m_type) to avoid a memory leak in case j contains an + * allocated value (e.g., a string). See bug issue + * https://github.com/nlohmann/json/issues/2865 for more information. + */ + +template struct external_constructor; + +template<> +struct external_constructor +{ + template + static void construct(BasicJsonType& j, typename BasicJsonType::boolean_t b) noexcept + { + j.m_value.destroy(j.m_type); + j.m_type = value_t::boolean; + j.m_value = b; + j.assert_invariant(); + } +}; + +template<> +struct external_constructor +{ + template + static void construct(BasicJsonType& j, const typename BasicJsonType::string_t& s) + { + j.m_value.destroy(j.m_type); + j.m_type = value_t::string; + j.m_value = s; + j.assert_invariant(); + } + + template + static void construct(BasicJsonType& j, typename BasicJsonType::string_t&& s) + { + j.m_value.destroy(j.m_type); + j.m_type = value_t::string; + j.m_value = std::move(s); + j.assert_invariant(); + } + + template < typename BasicJsonType, typename CompatibleStringType, + enable_if_t < !std::is_same::value, + int > = 0 > + static void construct(BasicJsonType& j, const CompatibleStringType& str) + { + j.m_value.destroy(j.m_type); + j.m_type = value_t::string; + j.m_value.string = j.template create(str); + j.assert_invariant(); + } +}; + +template<> +struct external_constructor +{ + template + static void construct(BasicJsonType& j, const typename BasicJsonType::binary_t& b) + { + j.m_value.destroy(j.m_type); + j.m_type = value_t::binary; + j.m_value = typename BasicJsonType::binary_t(b); + j.assert_invariant(); + } + + template + static void construct(BasicJsonType& j, typename BasicJsonType::binary_t&& b) + { + j.m_value.destroy(j.m_type); + j.m_type = value_t::binary; + j.m_value = typename BasicJsonType::binary_t(std::move(b)); + j.assert_invariant(); + } +}; + +template<> +struct external_constructor +{ + template + static void construct(BasicJsonType& j, typename BasicJsonType::number_float_t val) noexcept + { + j.m_value.destroy(j.m_type); + j.m_type = value_t::number_float; + j.m_value = val; + j.assert_invariant(); + } +}; + +template<> +struct external_constructor +{ + template + static void construct(BasicJsonType& j, typename BasicJsonType::number_unsigned_t val) noexcept + { + j.m_value.destroy(j.m_type); + j.m_type = value_t::number_unsigned; + j.m_value = val; + j.assert_invariant(); + } +}; + +template<> +struct external_constructor +{ + template + static void construct(BasicJsonType& j, typename BasicJsonType::number_integer_t val) noexcept + { + j.m_value.destroy(j.m_type); + j.m_type = value_t::number_integer; + j.m_value = val; + j.assert_invariant(); + } +}; + +template<> +struct external_constructor +{ + template + static void construct(BasicJsonType& j, const typename BasicJsonType::array_t& arr) + { + j.m_value.destroy(j.m_type); + j.m_type = value_t::array; + j.m_value = arr; + j.set_parents(); + j.assert_invariant(); + } + + template + static void construct(BasicJsonType& j, typename BasicJsonType::array_t&& arr) + { + j.m_value.destroy(j.m_type); + j.m_type = value_t::array; + j.m_value = std::move(arr); + j.set_parents(); + j.assert_invariant(); + } + + template < typename BasicJsonType, typename CompatibleArrayType, + enable_if_t < !std::is_same::value, + int > = 0 > + static void construct(BasicJsonType& j, const CompatibleArrayType& arr) + { + using std::begin; + using std::end; + + j.m_value.destroy(j.m_type); + j.m_type = value_t::array; + j.m_value.array = j.template create(begin(arr), end(arr)); + j.set_parents(); + j.assert_invariant(); + } + + template + static void construct(BasicJsonType& j, const std::vector& arr) + { + j.m_value.destroy(j.m_type); + j.m_type = value_t::array; + j.m_value = value_t::array; + j.m_value.array->reserve(arr.size()); + for (const bool x : arr) + { + j.m_value.array->push_back(x); + j.set_parent(j.m_value.array->back()); + } + j.assert_invariant(); + } + + template::value, int> = 0> + static void construct(BasicJsonType& j, const std::valarray& arr) + { + j.m_value.destroy(j.m_type); + j.m_type = value_t::array; + j.m_value = value_t::array; + j.m_value.array->resize(arr.size()); + if (arr.size() > 0) + { + std::copy(std::begin(arr), std::end(arr), j.m_value.array->begin()); + } + j.set_parents(); + j.assert_invariant(); + } +}; + +template<> +struct external_constructor +{ + template + static void construct(BasicJsonType& j, const typename BasicJsonType::object_t& obj) + { + j.m_value.destroy(j.m_type); + j.m_type = value_t::object; + j.m_value = obj; + j.set_parents(); + j.assert_invariant(); + } + + template + static void construct(BasicJsonType& j, typename BasicJsonType::object_t&& obj) + { + j.m_value.destroy(j.m_type); + j.m_type = value_t::object; + j.m_value = std::move(obj); + j.set_parents(); + j.assert_invariant(); + } + + template < typename BasicJsonType, typename CompatibleObjectType, + enable_if_t < !std::is_same::value, int > = 0 > + static void construct(BasicJsonType& j, const CompatibleObjectType& obj) + { + using std::begin; + using std::end; + + j.m_value.destroy(j.m_type); + j.m_type = value_t::object; + j.m_value.object = j.template create(begin(obj), end(obj)); + j.set_parents(); + j.assert_invariant(); + } +}; + +///////////// +// to_json // +///////////// + +template::value, int> = 0> +void to_json(BasicJsonType& j, T b) noexcept +{ + external_constructor::construct(j, b); +} + +template::value, int> = 0> +void to_json(BasicJsonType& j, const CompatibleString& s) +{ + external_constructor::construct(j, s); +} + +template +void to_json(BasicJsonType& j, typename BasicJsonType::string_t&& s) +{ + external_constructor::construct(j, std::move(s)); +} + +template::value, int> = 0> +void to_json(BasicJsonType& j, FloatType val) noexcept +{ + external_constructor::construct(j, static_cast(val)); +} + +template::value, int> = 0> +void to_json(BasicJsonType& j, CompatibleNumberUnsignedType val) noexcept +{ + external_constructor::construct(j, static_cast(val)); +} + +template::value, int> = 0> +void to_json(BasicJsonType& j, CompatibleNumberIntegerType val) noexcept +{ + external_constructor::construct(j, static_cast(val)); +} + +template::value, int> = 0> +void to_json(BasicJsonType& j, EnumType e) noexcept +{ + using underlying_type = typename std::underlying_type::type; + external_constructor::construct(j, static_cast(e)); +} + +template +void to_json(BasicJsonType& j, const std::vector& e) +{ + external_constructor::construct(j, e); +} + +template < typename BasicJsonType, typename CompatibleArrayType, + enable_if_t < is_compatible_array_type::value&& + !is_compatible_object_type::value&& + !is_compatible_string_type::value&& + !std::is_same::value&& + !is_basic_json::value, + int > = 0 > +void to_json(BasicJsonType& j, const CompatibleArrayType& arr) +{ + external_constructor::construct(j, arr); +} + +template +void to_json(BasicJsonType& j, const typename BasicJsonType::binary_t& bin) +{ + external_constructor::construct(j, bin); +} + +template::value, int> = 0> +void to_json(BasicJsonType& j, const std::valarray& arr) +{ + external_constructor::construct(j, std::move(arr)); +} + +template +void to_json(BasicJsonType& j, typename BasicJsonType::array_t&& arr) +{ + external_constructor::construct(j, std::move(arr)); +} + +template < typename BasicJsonType, typename CompatibleObjectType, + enable_if_t < is_compatible_object_type::value&& !is_basic_json::value, int > = 0 > +void to_json(BasicJsonType& j, const CompatibleObjectType& obj) +{ + external_constructor::construct(j, obj); +} + +template +void to_json(BasicJsonType& j, typename BasicJsonType::object_t&& obj) +{ + external_constructor::construct(j, std::move(obj)); +} + +template < + typename BasicJsonType, typename T, std::size_t N, + enable_if_t < !std::is_constructible::value, // NOLINT(cppcoreguidelines-avoid-c-arrays,hicpp-avoid-c-arrays,modernize-avoid-c-arrays) + int > = 0 > +void to_json(BasicJsonType& j, const T(&arr)[N]) // NOLINT(cppcoreguidelines-avoid-c-arrays,hicpp-avoid-c-arrays,modernize-avoid-c-arrays) +{ + external_constructor::construct(j, arr); +} + +template < typename BasicJsonType, typename T1, typename T2, enable_if_t < std::is_constructible::value&& std::is_constructible::value, int > = 0 > +void to_json(BasicJsonType& j, const std::pair& p) +{ + j = { p.first, p.second }; +} + +// for https://github.com/nlohmann/json/pull/1134 +template>::value, int> = 0> +void to_json(BasicJsonType& j, const T& b) +{ + j = { {b.key(), b.value()} }; +} + +template +void to_json_tuple_impl(BasicJsonType& j, const Tuple& t, index_sequence /*unused*/) +{ + j = { std::get(t)... }; +} + +template::value, int > = 0> +void to_json(BasicJsonType& j, const T& t) +{ + to_json_tuple_impl(j, t, make_index_sequence::value> {}); +} + +#if JSON_HAS_FILESYSTEM || JSON_HAS_EXPERIMENTAL_FILESYSTEM +template +void to_json(BasicJsonType& j, const std_fs::path& p) +{ + j = p.string(); +} +#endif + +struct to_json_fn +{ + template + auto operator()(BasicJsonType& j, T&& val) const noexcept(noexcept(to_json(j, std::forward(val)))) + -> decltype(to_json(j, std::forward(val)), void()) + { + return to_json(j, std::forward(val)); + } +}; +} // namespace detail + +/// namespace to hold default `to_json` function +/// to see why this is required: +/// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4381.html +namespace // NOLINT(cert-dcl59-cpp,fuchsia-header-anon-namespaces,google-build-namespaces) +{ +constexpr const auto& to_json = detail::static_const::value; // NOLINT(misc-definitions-in-headers) +} // namespace +} // namespace nlohmann + +// #include + +// #include + + +namespace nlohmann +{ + +/// @sa https://json.nlohmann.me/api/adl_serializer/ +template +struct adl_serializer +{ + /// @brief convert a JSON value to any value type + /// @sa https://json.nlohmann.me/api/adl_serializer/from_json/ + template + static auto from_json(BasicJsonType && j, TargetType& val) noexcept( + noexcept(::nlohmann::from_json(std::forward(j), val))) + -> decltype(::nlohmann::from_json(std::forward(j), val), void()) + { + ::nlohmann::from_json(std::forward(j), val); + } + + /// @brief convert a JSON value to any value type + /// @sa https://json.nlohmann.me/api/adl_serializer/from_json/ + template + static auto from_json(BasicJsonType && j) noexcept( + noexcept(::nlohmann::from_json(std::forward(j), detail::identity_tag {}))) + -> decltype(::nlohmann::from_json(std::forward(j), detail::identity_tag {})) + { + return ::nlohmann::from_json(std::forward(j), detail::identity_tag {}); + } + + /// @brief convert any value type to a JSON value + /// @sa https://json.nlohmann.me/api/adl_serializer/to_json/ + template + static auto to_json(BasicJsonType& j, TargetType && val) noexcept( + noexcept(::nlohmann::to_json(j, std::forward(val)))) + -> decltype(::nlohmann::to_json(j, std::forward(val)), void()) + { + ::nlohmann::to_json(j, std::forward(val)); + } +}; +} // namespace nlohmann + +// #include + + +#include // uint8_t, uint64_t +#include // tie +#include // move + +namespace nlohmann +{ + +/// @brief an internal type for a backed binary type +/// @sa https://json.nlohmann.me/api/byte_container_with_subtype/ +template +class byte_container_with_subtype : public BinaryType +{ + public: + using container_type = BinaryType; + using subtype_type = std::uint64_t; + + /// @sa https://json.nlohmann.me/api/byte_container_with_subtype/byte_container_with_subtype/ + byte_container_with_subtype() noexcept(noexcept(container_type())) + : container_type() + {} + + /// @sa https://json.nlohmann.me/api/byte_container_with_subtype/byte_container_with_subtype/ + byte_container_with_subtype(const container_type& b) noexcept(noexcept(container_type(b))) + : container_type(b) + {} + + /// @sa https://json.nlohmann.me/api/byte_container_with_subtype/byte_container_with_subtype/ + byte_container_with_subtype(container_type&& b) noexcept(noexcept(container_type(std::move(b)))) + : container_type(std::move(b)) + {} + + /// @sa https://json.nlohmann.me/api/byte_container_with_subtype/byte_container_with_subtype/ + byte_container_with_subtype(const container_type& b, subtype_type subtype_) noexcept(noexcept(container_type(b))) + : container_type(b) + , m_subtype(subtype_) + , m_has_subtype(true) + {} + + /// @sa https://json.nlohmann.me/api/byte_container_with_subtype/byte_container_with_subtype/ + byte_container_with_subtype(container_type&& b, subtype_type subtype_) noexcept(noexcept(container_type(std::move(b)))) + : container_type(std::move(b)) + , m_subtype(subtype_) + , m_has_subtype(true) + {} + + bool operator==(const byte_container_with_subtype& rhs) const + { + return std::tie(static_cast(*this), m_subtype, m_has_subtype) == + std::tie(static_cast(rhs), rhs.m_subtype, rhs.m_has_subtype); + } + + bool operator!=(const byte_container_with_subtype& rhs) const + { + return !(rhs == *this); + } + + /// @brief sets the binary subtype + /// @sa https://json.nlohmann.me/api/byte_container_with_subtype/set_subtype/ + void set_subtype(subtype_type subtype_) noexcept + { + m_subtype = subtype_; + m_has_subtype = true; + } + + /// @brief return the binary subtype + /// @sa https://json.nlohmann.me/api/byte_container_with_subtype/subtype/ + constexpr subtype_type subtype() const noexcept + { + return m_has_subtype ? m_subtype : static_cast(-1); + } + + /// @brief return whether the value has a subtype + /// @sa https://json.nlohmann.me/api/byte_container_with_subtype/has_subtype/ + constexpr bool has_subtype() const noexcept + { + return m_has_subtype; + } + + /// @brief clears the binary subtype + /// @sa https://json.nlohmann.me/api/byte_container_with_subtype/clear_subtype/ + void clear_subtype() noexcept + { + m_subtype = 0; + m_has_subtype = false; + } + + private: + subtype_type m_subtype = 0; + bool m_has_subtype = false; +}; + +} // namespace nlohmann + +// #include + +// #include + +// #include + +// #include + + +#include // uint8_t +#include // size_t +#include // hash + +// #include + +// #include + + +namespace nlohmann +{ +namespace detail +{ + +// boost::hash_combine +inline std::size_t combine(std::size_t seed, std::size_t h) noexcept +{ + seed ^= h + 0x9e3779b9 + (seed << 6U) + (seed >> 2U); + return seed; +} + +/*! +@brief hash a JSON value + +The hash function tries to rely on std::hash where possible. Furthermore, the +type of the JSON value is taken into account to have different hash values for +null, 0, 0U, and false, etc. + +@tparam BasicJsonType basic_json specialization +@param j JSON value to hash +@return hash value of j +*/ +template +std::size_t hash(const BasicJsonType& j) +{ + using string_t = typename BasicJsonType::string_t; + using number_integer_t = typename BasicJsonType::number_integer_t; + using number_unsigned_t = typename BasicJsonType::number_unsigned_t; + using number_float_t = typename BasicJsonType::number_float_t; + + const auto type = static_cast(j.type()); + switch (j.type()) + { + case BasicJsonType::value_t::null: + case BasicJsonType::value_t::discarded: + { + return combine(type, 0); + } + + case BasicJsonType::value_t::object: + { + auto seed = combine(type, j.size()); + for (const auto& element : j.items()) + { + const auto h = std::hash {}(element.key()); + seed = combine(seed, h); + seed = combine(seed, hash(element.value())); + } + return seed; + } + + case BasicJsonType::value_t::array: + { + auto seed = combine(type, j.size()); + for (const auto& element : j) + { + seed = combine(seed, hash(element)); + } + return seed; + } + + case BasicJsonType::value_t::string: + { + const auto h = std::hash {}(j.template get_ref()); + return combine(type, h); + } + + case BasicJsonType::value_t::boolean: + { + const auto h = std::hash {}(j.template get()); + return combine(type, h); + } + + case BasicJsonType::value_t::number_integer: + { + const auto h = std::hash {}(j.template get()); + return combine(type, h); + } + + case BasicJsonType::value_t::number_unsigned: + { + const auto h = std::hash {}(j.template get()); + return combine(type, h); + } + + case BasicJsonType::value_t::number_float: + { + const auto h = std::hash {}(j.template get()); + return combine(type, h); + } + + case BasicJsonType::value_t::binary: + { + auto seed = combine(type, j.get_binary().size()); + const auto h = std::hash {}(j.get_binary().has_subtype()); + seed = combine(seed, h); + seed = combine(seed, static_cast(j.get_binary().subtype())); + for (const auto byte : j.get_binary()) + { + seed = combine(seed, std::hash {}(byte)); + } + return seed; + } + + default: // LCOV_EXCL_LINE + JSON_ASSERT(false); // NOLINT(cert-dcl03-c,hicpp-static-assert,misc-static-assert) LCOV_EXCL_LINE + return 0; // LCOV_EXCL_LINE + } +} + +} // namespace detail +} // namespace nlohmann + +// #include + + +#include // generate_n +#include // array +#include // ldexp +#include // size_t +#include // uint8_t, uint16_t, uint32_t, uint64_t +#include // snprintf +#include // memcpy +#include // back_inserter +#include // numeric_limits +#include // char_traits, string +#include // make_pair, move +#include // vector + +// #include + +// #include + + +#include // array +#include // size_t +#include // strlen +#include // begin, end, iterator_traits, random_access_iterator_tag, distance, next +#include // shared_ptr, make_shared, addressof +#include // accumulate +#include // string, char_traits +#include // enable_if, is_base_of, is_pointer, is_integral, remove_pointer +#include // pair, declval + +#ifndef JSON_NO_IO + #include // FILE * + #include // istream +#endif // JSON_NO_IO + +// #include + +// #include + + +namespace nlohmann +{ +namespace detail +{ +/// the supported input formats +enum class input_format_t { json, cbor, msgpack, ubjson, bson }; + +//////////////////// +// input adapters // +//////////////////// + +#ifndef JSON_NO_IO +/*! +Input adapter for stdio file access. This adapter read only 1 byte and do not use any + buffer. This adapter is a very low level adapter. +*/ +class file_input_adapter +{ + public: + using char_type = char; + + JSON_HEDLEY_NON_NULL(2) + explicit file_input_adapter(std::FILE* f) noexcept + : m_file(f) + {} + + // make class move-only + file_input_adapter(const file_input_adapter&) = delete; + file_input_adapter(file_input_adapter&&) noexcept = default; + file_input_adapter& operator=(const file_input_adapter&) = delete; + file_input_adapter& operator=(file_input_adapter&&) = delete; + ~file_input_adapter() = default; + + std::char_traits::int_type get_character() noexcept + { + return std::fgetc(m_file); + } + + private: + /// the file pointer to read from + std::FILE* m_file; +}; + + +/*! +Input adapter for a (caching) istream. Ignores a UFT Byte Order Mark at +beginning of input. Does not support changing the underlying std::streambuf +in mid-input. Maintains underlying std::istream and std::streambuf to support +subsequent use of standard std::istream operations to process any input +characters following those used in parsing the JSON input. Clears the +std::istream flags; any input errors (e.g., EOF) will be detected by the first +subsequent call for input from the std::istream. +*/ +class input_stream_adapter +{ + public: + using char_type = char; + + ~input_stream_adapter() + { + // clear stream flags; we use underlying streambuf I/O, do not + // maintain ifstream flags, except eof + if (is != nullptr) + { + is->clear(is->rdstate() & std::ios::eofbit); + } + } + + explicit input_stream_adapter(std::istream& i) + : is(&i), sb(i.rdbuf()) + {} + + // delete because of pointer members + input_stream_adapter(const input_stream_adapter&) = delete; + input_stream_adapter& operator=(input_stream_adapter&) = delete; + input_stream_adapter& operator=(input_stream_adapter&&) = delete; + + input_stream_adapter(input_stream_adapter&& rhs) noexcept + : is(rhs.is), sb(rhs.sb) + { + rhs.is = nullptr; + rhs.sb = nullptr; + } + + // std::istream/std::streambuf use std::char_traits::to_int_type, to + // ensure that std::char_traits::eof() and the character 0xFF do not + // end up as the same value, e.g. 0xFFFFFFFF. + std::char_traits::int_type get_character() + { + auto res = sb->sbumpc(); + // set eof manually, as we don't use the istream interface. + if (JSON_HEDLEY_UNLIKELY(res == std::char_traits::eof())) + { + is->clear(is->rdstate() | std::ios::eofbit); + } + return res; + } + + private: + /// the associated input stream + std::istream* is = nullptr; + std::streambuf* sb = nullptr; +}; +#endif // JSON_NO_IO + +// General-purpose iterator-based adapter. It might not be as fast as +// theoretically possible for some containers, but it is extremely versatile. +template +class iterator_input_adapter +{ + public: + using char_type = typename std::iterator_traits::value_type; + + iterator_input_adapter(IteratorType first, IteratorType last) + : current(std::move(first)), end(std::move(last)) + {} + + typename std::char_traits::int_type get_character() + { + if (JSON_HEDLEY_LIKELY(current != end)) + { + auto result = std::char_traits::to_int_type(*current); + std::advance(current, 1); + return result; + } + + return std::char_traits::eof(); + } + + private: + IteratorType current; + IteratorType end; + + template + friend struct wide_string_input_helper; + + bool empty() const + { + return current == end; + } +}; + + +template +struct wide_string_input_helper; + +template +struct wide_string_input_helper +{ + // UTF-32 + static void fill_buffer(BaseInputAdapter& input, + std::array::int_type, 4>& utf8_bytes, + size_t& utf8_bytes_index, + size_t& utf8_bytes_filled) + { + utf8_bytes_index = 0; + + if (JSON_HEDLEY_UNLIKELY(input.empty())) + { + utf8_bytes[0] = std::char_traits::eof(); + utf8_bytes_filled = 1; + } + else + { + // get the current character + const auto wc = input.get_character(); + + // UTF-32 to UTF-8 encoding + if (wc < 0x80) + { + utf8_bytes[0] = static_cast::int_type>(wc); + utf8_bytes_filled = 1; + } + else if (wc <= 0x7FF) + { + utf8_bytes[0] = static_cast::int_type>(0xC0u | ((static_cast(wc) >> 6u) & 0x1Fu)); + utf8_bytes[1] = static_cast::int_type>(0x80u | (static_cast(wc) & 0x3Fu)); + utf8_bytes_filled = 2; + } + else if (wc <= 0xFFFF) + { + utf8_bytes[0] = static_cast::int_type>(0xE0u | ((static_cast(wc) >> 12u) & 0x0Fu)); + utf8_bytes[1] = static_cast::int_type>(0x80u | ((static_cast(wc) >> 6u) & 0x3Fu)); + utf8_bytes[2] = static_cast::int_type>(0x80u | (static_cast(wc) & 0x3Fu)); + utf8_bytes_filled = 3; + } + else if (wc <= 0x10FFFF) + { + utf8_bytes[0] = static_cast::int_type>(0xF0u | ((static_cast(wc) >> 18u) & 0x07u)); + utf8_bytes[1] = static_cast::int_type>(0x80u | ((static_cast(wc) >> 12u) & 0x3Fu)); + utf8_bytes[2] = static_cast::int_type>(0x80u | ((static_cast(wc) >> 6u) & 0x3Fu)); + utf8_bytes[3] = static_cast::int_type>(0x80u | (static_cast(wc) & 0x3Fu)); + utf8_bytes_filled = 4; + } + else + { + // unknown character + utf8_bytes[0] = static_cast::int_type>(wc); + utf8_bytes_filled = 1; + } + } + } +}; + +template +struct wide_string_input_helper +{ + // UTF-16 + static void fill_buffer(BaseInputAdapter& input, + std::array::int_type, 4>& utf8_bytes, + size_t& utf8_bytes_index, + size_t& utf8_bytes_filled) + { + utf8_bytes_index = 0; + + if (JSON_HEDLEY_UNLIKELY(input.empty())) + { + utf8_bytes[0] = std::char_traits::eof(); + utf8_bytes_filled = 1; + } + else + { + // get the current character + const auto wc = input.get_character(); + + // UTF-16 to UTF-8 encoding + if (wc < 0x80) + { + utf8_bytes[0] = static_cast::int_type>(wc); + utf8_bytes_filled = 1; + } + else if (wc <= 0x7FF) + { + utf8_bytes[0] = static_cast::int_type>(0xC0u | ((static_cast(wc) >> 6u))); + utf8_bytes[1] = static_cast::int_type>(0x80u | (static_cast(wc) & 0x3Fu)); + utf8_bytes_filled = 2; + } + else if (0xD800 > wc || wc >= 0xE000) + { + utf8_bytes[0] = static_cast::int_type>(0xE0u | ((static_cast(wc) >> 12u))); + utf8_bytes[1] = static_cast::int_type>(0x80u | ((static_cast(wc) >> 6u) & 0x3Fu)); + utf8_bytes[2] = static_cast::int_type>(0x80u | (static_cast(wc) & 0x3Fu)); + utf8_bytes_filled = 3; + } + else + { + if (JSON_HEDLEY_UNLIKELY(!input.empty())) + { + const auto wc2 = static_cast(input.get_character()); + const auto charcode = 0x10000u + (((static_cast(wc) & 0x3FFu) << 10u) | (wc2 & 0x3FFu)); + utf8_bytes[0] = static_cast::int_type>(0xF0u | (charcode >> 18u)); + utf8_bytes[1] = static_cast::int_type>(0x80u | ((charcode >> 12u) & 0x3Fu)); + utf8_bytes[2] = static_cast::int_type>(0x80u | ((charcode >> 6u) & 0x3Fu)); + utf8_bytes[3] = static_cast::int_type>(0x80u | (charcode & 0x3Fu)); + utf8_bytes_filled = 4; + } + else + { + utf8_bytes[0] = static_cast::int_type>(wc); + utf8_bytes_filled = 1; + } + } + } + } +}; + +// Wraps another input apdater to convert wide character types into individual bytes. +template +class wide_string_input_adapter +{ + public: + using char_type = char; + + wide_string_input_adapter(BaseInputAdapter base) + : base_adapter(base) {} + + typename std::char_traits::int_type get_character() noexcept + { + // check if buffer needs to be filled + if (utf8_bytes_index == utf8_bytes_filled) + { + fill_buffer(); + + JSON_ASSERT(utf8_bytes_filled > 0); + JSON_ASSERT(utf8_bytes_index == 0); + } + + // use buffer + JSON_ASSERT(utf8_bytes_filled > 0); + JSON_ASSERT(utf8_bytes_index < utf8_bytes_filled); + return utf8_bytes[utf8_bytes_index++]; + } + + private: + BaseInputAdapter base_adapter; + + template + void fill_buffer() + { + wide_string_input_helper::fill_buffer(base_adapter, utf8_bytes, utf8_bytes_index, utf8_bytes_filled); + } + + /// a buffer for UTF-8 bytes + std::array::int_type, 4> utf8_bytes = {{0, 0, 0, 0}}; + + /// index to the utf8_codes array for the next valid byte + std::size_t utf8_bytes_index = 0; + /// number of valid bytes in the utf8_codes array + std::size_t utf8_bytes_filled = 0; +}; + + +template +struct iterator_input_adapter_factory +{ + using iterator_type = IteratorType; + using char_type = typename std::iterator_traits::value_type; + using adapter_type = iterator_input_adapter; + + static adapter_type create(IteratorType first, IteratorType last) + { + return adapter_type(std::move(first), std::move(last)); + } +}; + +template +struct is_iterator_of_multibyte +{ + using value_type = typename std::iterator_traits::value_type; + enum + { + value = sizeof(value_type) > 1 + }; +}; + +template +struct iterator_input_adapter_factory::value>> +{ + using iterator_type = IteratorType; + using char_type = typename std::iterator_traits::value_type; + using base_adapter_type = iterator_input_adapter; + using adapter_type = wide_string_input_adapter; + + static adapter_type create(IteratorType first, IteratorType last) + { + return adapter_type(base_adapter_type(std::move(first), std::move(last))); + } +}; + +// General purpose iterator-based input +template +typename iterator_input_adapter_factory::adapter_type input_adapter(IteratorType first, IteratorType last) +{ + using factory_type = iterator_input_adapter_factory; + return factory_type::create(first, last); +} + +// Convenience shorthand from container to iterator +// Enables ADL on begin(container) and end(container) +// Encloses the using declarations in namespace for not to leak them to outside scope + +namespace container_input_adapter_factory_impl +{ + +using std::begin; +using std::end; + +template +struct container_input_adapter_factory {}; + +template +struct container_input_adapter_factory< ContainerType, + void_t()), end(std::declval()))>> + { + using adapter_type = decltype(input_adapter(begin(std::declval()), end(std::declval()))); + + static adapter_type create(const ContainerType& container) +{ + return input_adapter(begin(container), end(container)); +} + }; + +} // namespace container_input_adapter_factory_impl + +template +typename container_input_adapter_factory_impl::container_input_adapter_factory::adapter_type input_adapter(const ContainerType& container) +{ + return container_input_adapter_factory_impl::container_input_adapter_factory::create(container); +} + +#ifndef JSON_NO_IO +// Special cases with fast paths +inline file_input_adapter input_adapter(std::FILE* file) +{ + return file_input_adapter(file); +} + +inline input_stream_adapter input_adapter(std::istream& stream) +{ + return input_stream_adapter(stream); +} + +inline input_stream_adapter input_adapter(std::istream&& stream) +{ + return input_stream_adapter(stream); +} +#endif // JSON_NO_IO + +using contiguous_bytes_input_adapter = decltype(input_adapter(std::declval(), std::declval())); + +// Null-delimited strings, and the like. +template < typename CharT, + typename std::enable_if < + std::is_pointer::value&& + !std::is_array::value&& + std::is_integral::type>::value&& + sizeof(typename std::remove_pointer::type) == 1, + int >::type = 0 > +contiguous_bytes_input_adapter input_adapter(CharT b) +{ + auto length = std::strlen(reinterpret_cast(b)); + const auto* ptr = reinterpret_cast(b); + return input_adapter(ptr, ptr + length); +} + +template +auto input_adapter(T (&array)[N]) -> decltype(input_adapter(array, array + N)) // NOLINT(cppcoreguidelines-avoid-c-arrays,hicpp-avoid-c-arrays,modernize-avoid-c-arrays) +{ + return input_adapter(array, array + N); +} + +// This class only handles inputs of input_buffer_adapter type. +// It's required so that expressions like {ptr, len} can be implicitly cast +// to the correct adapter. +class span_input_adapter +{ + public: + template < typename CharT, + typename std::enable_if < + std::is_pointer::value&& + std::is_integral::type>::value&& + sizeof(typename std::remove_pointer::type) == 1, + int >::type = 0 > + span_input_adapter(CharT b, std::size_t l) + : ia(reinterpret_cast(b), reinterpret_cast(b) + l) {} + + template::iterator_category, std::random_access_iterator_tag>::value, + int>::type = 0> + span_input_adapter(IteratorType first, IteratorType last) + : ia(input_adapter(first, last)) {} + + contiguous_bytes_input_adapter&& get() + { + return std::move(ia); // NOLINT(hicpp-move-const-arg,performance-move-const-arg) + } + + private: + contiguous_bytes_input_adapter ia; +}; +} // namespace detail +} // namespace nlohmann + +// #include + + +#include +#include // string +#include // move +#include // vector + +// #include + +// #include + + +namespace nlohmann +{ + +/*! +@brief SAX interface + +This class describes the SAX interface used by @ref nlohmann::json::sax_parse. +Each function is called in different situations while the input is parsed. The +boolean return value informs the parser whether to continue processing the +input. +*/ +template +struct json_sax +{ + using number_integer_t = typename BasicJsonType::number_integer_t; + using number_unsigned_t = typename BasicJsonType::number_unsigned_t; + using number_float_t = typename BasicJsonType::number_float_t; + using string_t = typename BasicJsonType::string_t; + using binary_t = typename BasicJsonType::binary_t; + + /*! + @brief a null value was read + @return whether parsing should proceed + */ + virtual bool null() = 0; + + /*! + @brief a boolean value was read + @param[in] val boolean value + @return whether parsing should proceed + */ + virtual bool boolean(bool val) = 0; + + /*! + @brief an integer number was read + @param[in] val integer value + @return whether parsing should proceed + */ + virtual bool number_integer(number_integer_t val) = 0; + + /*! + @brief an unsigned integer number was read + @param[in] val unsigned integer value + @return whether parsing should proceed + */ + virtual bool number_unsigned(number_unsigned_t val) = 0; + + /*! + @brief a floating-point number was read + @param[in] val floating-point value + @param[in] s raw token value + @return whether parsing should proceed + */ + virtual bool number_float(number_float_t val, const string_t& s) = 0; + + /*! + @brief a string value was read + @param[in] val string value + @return whether parsing should proceed + @note It is safe to move the passed string value. + */ + virtual bool string(string_t& val) = 0; + + /*! + @brief a binary value was read + @param[in] val binary value + @return whether parsing should proceed + @note It is safe to move the passed binary value. + */ + virtual bool binary(binary_t& val) = 0; + + /*! + @brief the beginning of an object was read + @param[in] elements number of object elements or -1 if unknown + @return whether parsing should proceed + @note binary formats may report the number of elements + */ + virtual bool start_object(std::size_t elements) = 0; + + /*! + @brief an object key was read + @param[in] val object key + @return whether parsing should proceed + @note It is safe to move the passed string. + */ + virtual bool key(string_t& val) = 0; + + /*! + @brief the end of an object was read + @return whether parsing should proceed + */ + virtual bool end_object() = 0; + + /*! + @brief the beginning of an array was read + @param[in] elements number of array elements or -1 if unknown + @return whether parsing should proceed + @note binary formats may report the number of elements + */ + virtual bool start_array(std::size_t elements) = 0; + + /*! + @brief the end of an array was read + @return whether parsing should proceed + */ + virtual bool end_array() = 0; + + /*! + @brief a parse error occurred + @param[in] position the position in the input where the error occurs + @param[in] last_token the last read token + @param[in] ex an exception object describing the error + @return whether parsing should proceed (must return false) + */ + virtual bool parse_error(std::size_t position, + const std::string& last_token, + const detail::exception& ex) = 0; + + json_sax() = default; + json_sax(const json_sax&) = default; + json_sax(json_sax&&) noexcept = default; + json_sax& operator=(const json_sax&) = default; + json_sax& operator=(json_sax&&) noexcept = default; + virtual ~json_sax() = default; +}; + + +namespace detail +{ +/*! +@brief SAX implementation to create a JSON value from SAX events + +This class implements the @ref json_sax interface and processes the SAX events +to create a JSON value which makes it basically a DOM parser. The structure or +hierarchy of the JSON value is managed by the stack `ref_stack` which contains +a pointer to the respective array or object for each recursion depth. + +After successful parsing, the value that is passed by reference to the +constructor contains the parsed value. + +@tparam BasicJsonType the JSON type +*/ +template +class json_sax_dom_parser +{ + public: + using number_integer_t = typename BasicJsonType::number_integer_t; + using number_unsigned_t = typename BasicJsonType::number_unsigned_t; + using number_float_t = typename BasicJsonType::number_float_t; + using string_t = typename BasicJsonType::string_t; + using binary_t = typename BasicJsonType::binary_t; + + /*! + @param[in,out] r reference to a JSON value that is manipulated while + parsing + @param[in] allow_exceptions_ whether parse errors yield exceptions + */ + explicit json_sax_dom_parser(BasicJsonType& r, const bool allow_exceptions_ = true) + : root(r), allow_exceptions(allow_exceptions_) + {} + + // make class move-only + json_sax_dom_parser(const json_sax_dom_parser&) = delete; + json_sax_dom_parser(json_sax_dom_parser&&) = default; // NOLINT(hicpp-noexcept-move,performance-noexcept-move-constructor) + json_sax_dom_parser& operator=(const json_sax_dom_parser&) = delete; + json_sax_dom_parser& operator=(json_sax_dom_parser&&) = default; // NOLINT(hicpp-noexcept-move,performance-noexcept-move-constructor) + ~json_sax_dom_parser() = default; + + bool null() + { + handle_value(nullptr); + return true; + } + + bool boolean(bool val) + { + handle_value(val); + return true; + } + + bool number_integer(number_integer_t val) + { + handle_value(val); + return true; + } + + bool number_unsigned(number_unsigned_t val) + { + handle_value(val); + return true; + } + + bool number_float(number_float_t val, const string_t& /*unused*/) + { + handle_value(val); + return true; + } + + bool string(string_t& val) + { + handle_value(val); + return true; + } + + bool binary(binary_t& val) + { + handle_value(std::move(val)); + return true; + } + + bool start_object(std::size_t len) + { + ref_stack.push_back(handle_value(BasicJsonType::value_t::object)); + + if (JSON_HEDLEY_UNLIKELY(len != static_cast(-1) && len > ref_stack.back()->max_size())) + { + JSON_THROW(out_of_range::create(408, "excessive object size: " + std::to_string(len), *ref_stack.back())); + } + + return true; + } + + bool key(string_t& val) + { + // add null at given key and store the reference for later + object_element = &(ref_stack.back()->m_value.object->operator[](val)); + return true; + } + + bool end_object() + { + ref_stack.back()->set_parents(); + ref_stack.pop_back(); + return true; + } + + bool start_array(std::size_t len) + { + ref_stack.push_back(handle_value(BasicJsonType::value_t::array)); + + if (JSON_HEDLEY_UNLIKELY(len != static_cast(-1) && len > ref_stack.back()->max_size())) + { + JSON_THROW(out_of_range::create(408, "excessive array size: " + std::to_string(len), *ref_stack.back())); + } + + return true; + } + + bool end_array() + { + ref_stack.back()->set_parents(); + ref_stack.pop_back(); + return true; + } + + template + bool parse_error(std::size_t /*unused*/, const std::string& /*unused*/, + const Exception& ex) + { + errored = true; + static_cast(ex); + if (allow_exceptions) + { + JSON_THROW(ex); + } + return false; + } + + constexpr bool is_errored() const + { + return errored; + } + + private: + /*! + @invariant If the ref stack is empty, then the passed value will be the new + root. + @invariant If the ref stack contains a value, then it is an array or an + object to which we can add elements + */ + template + JSON_HEDLEY_RETURNS_NON_NULL + BasicJsonType* handle_value(Value&& v) + { + if (ref_stack.empty()) + { + root = BasicJsonType(std::forward(v)); + return &root; + } + + JSON_ASSERT(ref_stack.back()->is_array() || ref_stack.back()->is_object()); + + if (ref_stack.back()->is_array()) + { + ref_stack.back()->m_value.array->emplace_back(std::forward(v)); + return &(ref_stack.back()->m_value.array->back()); + } + + JSON_ASSERT(ref_stack.back()->is_object()); + JSON_ASSERT(object_element); + *object_element = BasicJsonType(std::forward(v)); + return object_element; + } + + /// the parsed JSON value + BasicJsonType& root; + /// stack to model hierarchy of values + std::vector ref_stack {}; + /// helper to hold the reference for the next object element + BasicJsonType* object_element = nullptr; + /// whether a syntax error occurred + bool errored = false; + /// whether to throw exceptions in case of errors + const bool allow_exceptions = true; +}; + +template +class json_sax_dom_callback_parser +{ + public: + using number_integer_t = typename BasicJsonType::number_integer_t; + using number_unsigned_t = typename BasicJsonType::number_unsigned_t; + using number_float_t = typename BasicJsonType::number_float_t; + using string_t = typename BasicJsonType::string_t; + using binary_t = typename BasicJsonType::binary_t; + using parser_callback_t = typename BasicJsonType::parser_callback_t; + using parse_event_t = typename BasicJsonType::parse_event_t; + + json_sax_dom_callback_parser(BasicJsonType& r, + const parser_callback_t cb, + const bool allow_exceptions_ = true) + : root(r), callback(cb), allow_exceptions(allow_exceptions_) + { + keep_stack.push_back(true); + } + + // make class move-only + json_sax_dom_callback_parser(const json_sax_dom_callback_parser&) = delete; + json_sax_dom_callback_parser(json_sax_dom_callback_parser&&) = default; // NOLINT(hicpp-noexcept-move,performance-noexcept-move-constructor) + json_sax_dom_callback_parser& operator=(const json_sax_dom_callback_parser&) = delete; + json_sax_dom_callback_parser& operator=(json_sax_dom_callback_parser&&) = default; // NOLINT(hicpp-noexcept-move,performance-noexcept-move-constructor) + ~json_sax_dom_callback_parser() = default; + + bool null() + { + handle_value(nullptr); + return true; + } + + bool boolean(bool val) + { + handle_value(val); + return true; + } + + bool number_integer(number_integer_t val) + { + handle_value(val); + return true; + } + + bool number_unsigned(number_unsigned_t val) + { + handle_value(val); + return true; + } + + bool number_float(number_float_t val, const string_t& /*unused*/) + { + handle_value(val); + return true; + } + + bool string(string_t& val) + { + handle_value(val); + return true; + } + + bool binary(binary_t& val) + { + handle_value(std::move(val)); + return true; + } + + bool start_object(std::size_t len) + { + // check callback for object start + const bool keep = callback(static_cast(ref_stack.size()), parse_event_t::object_start, discarded); + keep_stack.push_back(keep); + + auto val = handle_value(BasicJsonType::value_t::object, true); + ref_stack.push_back(val.second); + + // check object limit + if (ref_stack.back() && JSON_HEDLEY_UNLIKELY(len != static_cast(-1) && len > ref_stack.back()->max_size())) + { + JSON_THROW(out_of_range::create(408, "excessive object size: " + std::to_string(len), *ref_stack.back())); + } + + return true; + } + + bool key(string_t& val) + { + BasicJsonType k = BasicJsonType(val); + + // check callback for key + const bool keep = callback(static_cast(ref_stack.size()), parse_event_t::key, k); + key_keep_stack.push_back(keep); + + // add discarded value at given key and store the reference for later + if (keep && ref_stack.back()) + { + object_element = &(ref_stack.back()->m_value.object->operator[](val) = discarded); + } + + return true; + } + + bool end_object() + { + if (ref_stack.back()) + { + if (!callback(static_cast(ref_stack.size()) - 1, parse_event_t::object_end, *ref_stack.back())) + { + // discard object + *ref_stack.back() = discarded; + } + else + { + ref_stack.back()->set_parents(); + } + } + + JSON_ASSERT(!ref_stack.empty()); + JSON_ASSERT(!keep_stack.empty()); + ref_stack.pop_back(); + keep_stack.pop_back(); + + if (!ref_stack.empty() && ref_stack.back() && ref_stack.back()->is_structured()) + { + // remove discarded value + for (auto it = ref_stack.back()->begin(); it != ref_stack.back()->end(); ++it) + { + if (it->is_discarded()) + { + ref_stack.back()->erase(it); + break; + } + } + } + + return true; + } + + bool start_array(std::size_t len) + { + const bool keep = callback(static_cast(ref_stack.size()), parse_event_t::array_start, discarded); + keep_stack.push_back(keep); + + auto val = handle_value(BasicJsonType::value_t::array, true); + ref_stack.push_back(val.second); + + // check array limit + if (ref_stack.back() && JSON_HEDLEY_UNLIKELY(len != static_cast(-1) && len > ref_stack.back()->max_size())) + { + JSON_THROW(out_of_range::create(408, "excessive array size: " + std::to_string(len), *ref_stack.back())); + } + + return true; + } + + bool end_array() + { + bool keep = true; + + if (ref_stack.back()) + { + keep = callback(static_cast(ref_stack.size()) - 1, parse_event_t::array_end, *ref_stack.back()); + if (keep) + { + ref_stack.back()->set_parents(); + } + else + { + // discard array + *ref_stack.back() = discarded; + } + } + + JSON_ASSERT(!ref_stack.empty()); + JSON_ASSERT(!keep_stack.empty()); + ref_stack.pop_back(); + keep_stack.pop_back(); + + // remove discarded value + if (!keep && !ref_stack.empty() && ref_stack.back()->is_array()) + { + ref_stack.back()->m_value.array->pop_back(); + } + + return true; + } + + template + bool parse_error(std::size_t /*unused*/, const std::string& /*unused*/, + const Exception& ex) + { + errored = true; + static_cast(ex); + if (allow_exceptions) + { + JSON_THROW(ex); + } + return false; + } + + constexpr bool is_errored() const + { + return errored; + } + + private: + /*! + @param[in] v value to add to the JSON value we build during parsing + @param[in] skip_callback whether we should skip calling the callback + function; this is required after start_array() and + start_object() SAX events, because otherwise we would call the + callback function with an empty array or object, respectively. + + @invariant If the ref stack is empty, then the passed value will be the new + root. + @invariant If the ref stack contains a value, then it is an array or an + object to which we can add elements + + @return pair of boolean (whether value should be kept) and pointer (to the + passed value in the ref_stack hierarchy; nullptr if not kept) + */ + template + std::pair handle_value(Value&& v, const bool skip_callback = false) + { + JSON_ASSERT(!keep_stack.empty()); + + // do not handle this value if we know it would be added to a discarded + // container + if (!keep_stack.back()) + { + return {false, nullptr}; + } + + // create value + auto value = BasicJsonType(std::forward(v)); + + // check callback + const bool keep = skip_callback || callback(static_cast(ref_stack.size()), parse_event_t::value, value); + + // do not handle this value if we just learnt it shall be discarded + if (!keep) + { + return {false, nullptr}; + } + + if (ref_stack.empty()) + { + root = std::move(value); + return {true, &root}; + } + + // skip this value if we already decided to skip the parent + // (https://github.com/nlohmann/json/issues/971#issuecomment-413678360) + if (!ref_stack.back()) + { + return {false, nullptr}; + } + + // we now only expect arrays and objects + JSON_ASSERT(ref_stack.back()->is_array() || ref_stack.back()->is_object()); + + // array + if (ref_stack.back()->is_array()) + { + ref_stack.back()->m_value.array->emplace_back(std::move(value)); + return {true, &(ref_stack.back()->m_value.array->back())}; + } + + // object + JSON_ASSERT(ref_stack.back()->is_object()); + // check if we should store an element for the current key + JSON_ASSERT(!key_keep_stack.empty()); + const bool store_element = key_keep_stack.back(); + key_keep_stack.pop_back(); + + if (!store_element) + { + return {false, nullptr}; + } + + JSON_ASSERT(object_element); + *object_element = std::move(value); + return {true, object_element}; + } + + /// the parsed JSON value + BasicJsonType& root; + /// stack to model hierarchy of values + std::vector ref_stack {}; + /// stack to manage which values to keep + std::vector keep_stack {}; + /// stack to manage which object keys to keep + std::vector key_keep_stack {}; + /// helper to hold the reference for the next object element + BasicJsonType* object_element = nullptr; + /// whether a syntax error occurred + bool errored = false; + /// callback function + const parser_callback_t callback = nullptr; + /// whether to throw exceptions in case of errors + const bool allow_exceptions = true; + /// a discarded value for the callback + BasicJsonType discarded = BasicJsonType::value_t::discarded; +}; + +template +class json_sax_acceptor +{ + public: + using number_integer_t = typename BasicJsonType::number_integer_t; + using number_unsigned_t = typename BasicJsonType::number_unsigned_t; + using number_float_t = typename BasicJsonType::number_float_t; + using string_t = typename BasicJsonType::string_t; + using binary_t = typename BasicJsonType::binary_t; + + bool null() + { + return true; + } + + bool boolean(bool /*unused*/) + { + return true; + } + + bool number_integer(number_integer_t /*unused*/) + { + return true; + } + + bool number_unsigned(number_unsigned_t /*unused*/) + { + return true; + } + + bool number_float(number_float_t /*unused*/, const string_t& /*unused*/) + { + return true; + } + + bool string(string_t& /*unused*/) + { + return true; + } + + bool binary(binary_t& /*unused*/) + { + return true; + } + + bool start_object(std::size_t /*unused*/ = static_cast(-1)) + { + return true; + } + + bool key(string_t& /*unused*/) + { + return true; + } + + bool end_object() + { + return true; + } + + bool start_array(std::size_t /*unused*/ = static_cast(-1)) + { + return true; + } + + bool end_array() + { + return true; + } + + bool parse_error(std::size_t /*unused*/, const std::string& /*unused*/, const detail::exception& /*unused*/) + { + return false; + } +}; +} // namespace detail + +} // namespace nlohmann + +// #include + + +#include // array +#include // localeconv +#include // size_t +#include // snprintf +#include // strtof, strtod, strtold, strtoll, strtoull +#include // initializer_list +#include // char_traits, string +#include // move +#include // vector + +// #include + +// #include + +// #include + + +namespace nlohmann +{ +namespace detail +{ +/////////// +// lexer // +/////////// + +template +class lexer_base +{ + public: + /// token types for the parser + enum class token_type + { + uninitialized, ///< indicating the scanner is uninitialized + literal_true, ///< the `true` literal + literal_false, ///< the `false` literal + literal_null, ///< the `null` literal + value_string, ///< a string -- use get_string() for actual value + value_unsigned, ///< an unsigned integer -- use get_number_unsigned() for actual value + value_integer, ///< a signed integer -- use get_number_integer() for actual value + value_float, ///< an floating point number -- use get_number_float() for actual value + begin_array, ///< the character for array begin `[` + begin_object, ///< the character for object begin `{` + end_array, ///< the character for array end `]` + end_object, ///< the character for object end `}` + name_separator, ///< the name separator `:` + value_separator, ///< the value separator `,` + parse_error, ///< indicating a parse error + end_of_input, ///< indicating the end of the input buffer + literal_or_value ///< a literal or the begin of a value (only for diagnostics) + }; + + /// return name of values of type token_type (only used for errors) + JSON_HEDLEY_RETURNS_NON_NULL + JSON_HEDLEY_CONST + static const char* token_type_name(const token_type t) noexcept + { + switch (t) + { + case token_type::uninitialized: + return ""; + case token_type::literal_true: + return "true literal"; + case token_type::literal_false: + return "false literal"; + case token_type::literal_null: + return "null literal"; + case token_type::value_string: + return "string literal"; + case token_type::value_unsigned: + case token_type::value_integer: + case token_type::value_float: + return "number literal"; + case token_type::begin_array: + return "'['"; + case token_type::begin_object: + return "'{'"; + case token_type::end_array: + return "']'"; + case token_type::end_object: + return "'}'"; + case token_type::name_separator: + return "':'"; + case token_type::value_separator: + return "','"; + case token_type::parse_error: + return ""; + case token_type::end_of_input: + return "end of input"; + case token_type::literal_or_value: + return "'[', '{', or a literal"; + // LCOV_EXCL_START + default: // catch non-enum values + return "unknown token"; + // LCOV_EXCL_STOP + } + } +}; +/*! +@brief lexical analysis + +This class organizes the lexical analysis during JSON deserialization. +*/ +template +class lexer : public lexer_base +{ + using number_integer_t = typename BasicJsonType::number_integer_t; + using number_unsigned_t = typename BasicJsonType::number_unsigned_t; + using number_float_t = typename BasicJsonType::number_float_t; + using string_t = typename BasicJsonType::string_t; + using char_type = typename InputAdapterType::char_type; + using char_int_type = typename std::char_traits::int_type; + + public: + using token_type = typename lexer_base::token_type; + + explicit lexer(InputAdapterType&& adapter, bool ignore_comments_ = false) noexcept + : ia(std::move(adapter)) + , ignore_comments(ignore_comments_) + , decimal_point_char(static_cast(get_decimal_point())) + {} + + // delete because of pointer members + lexer(const lexer&) = delete; + lexer(lexer&&) = default; // NOLINT(hicpp-noexcept-move,performance-noexcept-move-constructor) + lexer& operator=(lexer&) = delete; + lexer& operator=(lexer&&) = default; // NOLINT(hicpp-noexcept-move,performance-noexcept-move-constructor) + ~lexer() = default; + + private: + ///////////////////// + // locales + ///////////////////// + + /// return the locale-dependent decimal point + JSON_HEDLEY_PURE + static char get_decimal_point() noexcept + { + const auto* loc = localeconv(); + JSON_ASSERT(loc != nullptr); + return (loc->decimal_point == nullptr) ? '.' : *(loc->decimal_point); + } + + ///////////////////// + // scan functions + ///////////////////// + + /*! + @brief get codepoint from 4 hex characters following `\u` + + For input "\u c1 c2 c3 c4" the codepoint is: + (c1 * 0x1000) + (c2 * 0x0100) + (c3 * 0x0010) + c4 + = (c1 << 12) + (c2 << 8) + (c3 << 4) + (c4 << 0) + + Furthermore, the possible characters '0'..'9', 'A'..'F', and 'a'..'f' + must be converted to the integers 0x0..0x9, 0xA..0xF, 0xA..0xF, resp. The + conversion is done by subtracting the offset (0x30, 0x37, and 0x57) + between the ASCII value of the character and the desired integer value. + + @return codepoint (0x0000..0xFFFF) or -1 in case of an error (e.g. EOF or + non-hex character) + */ + int get_codepoint() + { + // this function only makes sense after reading `\u` + JSON_ASSERT(current == 'u'); + int codepoint = 0; + + const auto factors = { 12u, 8u, 4u, 0u }; + for (const auto factor : factors) + { + get(); + + if (current >= '0' && current <= '9') + { + codepoint += static_cast((static_cast(current) - 0x30u) << factor); + } + else if (current >= 'A' && current <= 'F') + { + codepoint += static_cast((static_cast(current) - 0x37u) << factor); + } + else if (current >= 'a' && current <= 'f') + { + codepoint += static_cast((static_cast(current) - 0x57u) << factor); + } + else + { + return -1; + } + } + + JSON_ASSERT(0x0000 <= codepoint && codepoint <= 0xFFFF); + return codepoint; + } + + /*! + @brief check if the next byte(s) are inside a given range + + Adds the current byte and, for each passed range, reads a new byte and + checks if it is inside the range. If a violation was detected, set up an + error message and return false. Otherwise, return true. + + @param[in] ranges list of integers; interpreted as list of pairs of + inclusive lower and upper bound, respectively + + @pre The passed list @a ranges must have 2, 4, or 6 elements; that is, + 1, 2, or 3 pairs. This precondition is enforced by an assertion. + + @return true if and only if no range violation was detected + */ + bool next_byte_in_range(std::initializer_list ranges) + { + JSON_ASSERT(ranges.size() == 2 || ranges.size() == 4 || ranges.size() == 6); + add(current); + + for (auto range = ranges.begin(); range != ranges.end(); ++range) + { + get(); + if (JSON_HEDLEY_LIKELY(*range <= current && current <= *(++range))) + { + add(current); + } + else + { + error_message = "invalid string: ill-formed UTF-8 byte"; + return false; + } + } + + return true; + } + + /*! + @brief scan a string literal + + This function scans a string according to Sect. 7 of RFC 8259. While + scanning, bytes are escaped and copied into buffer token_buffer. Then the + function returns successfully, token_buffer is *not* null-terminated (as it + may contain \0 bytes), and token_buffer.size() is the number of bytes in the + string. + + @return token_type::value_string if string could be successfully scanned, + token_type::parse_error otherwise + + @note In case of errors, variable error_message contains a textual + description. + */ + token_type scan_string() + { + // reset token_buffer (ignore opening quote) + reset(); + + // we entered the function by reading an open quote + JSON_ASSERT(current == '\"'); + + while (true) + { + // get next character + switch (get()) + { + // end of file while parsing string + case std::char_traits::eof(): + { + error_message = "invalid string: missing closing quote"; + return token_type::parse_error; + } + + // closing quote + case '\"': + { + return token_type::value_string; + } + + // escapes + case '\\': + { + switch (get()) + { + // quotation mark + case '\"': + add('\"'); + break; + // reverse solidus + case '\\': + add('\\'); + break; + // solidus + case '/': + add('/'); + break; + // backspace + case 'b': + add('\b'); + break; + // form feed + case 'f': + add('\f'); + break; + // line feed + case 'n': + add('\n'); + break; + // carriage return + case 'r': + add('\r'); + break; + // tab + case 't': + add('\t'); + break; + + // unicode escapes + case 'u': + { + const int codepoint1 = get_codepoint(); + int codepoint = codepoint1; // start with codepoint1 + + if (JSON_HEDLEY_UNLIKELY(codepoint1 == -1)) + { + error_message = "invalid string: '\\u' must be followed by 4 hex digits"; + return token_type::parse_error; + } + + // check if code point is a high surrogate + if (0xD800 <= codepoint1 && codepoint1 <= 0xDBFF) + { + // expect next \uxxxx entry + if (JSON_HEDLEY_LIKELY(get() == '\\' && get() == 'u')) + { + const int codepoint2 = get_codepoint(); + + if (JSON_HEDLEY_UNLIKELY(codepoint2 == -1)) + { + error_message = "invalid string: '\\u' must be followed by 4 hex digits"; + return token_type::parse_error; + } + + // check if codepoint2 is a low surrogate + if (JSON_HEDLEY_LIKELY(0xDC00 <= codepoint2 && codepoint2 <= 0xDFFF)) + { + // overwrite codepoint + codepoint = static_cast( + // high surrogate occupies the most significant 22 bits + (static_cast(codepoint1) << 10u) + // low surrogate occupies the least significant 15 bits + + static_cast(codepoint2) + // there is still the 0xD800, 0xDC00 and 0x10000 noise + // in the result, so we have to subtract with: + // (0xD800 << 10) + DC00 - 0x10000 = 0x35FDC00 + - 0x35FDC00u); + } + else + { + error_message = "invalid string: surrogate U+D800..U+DBFF must be followed by U+DC00..U+DFFF"; + return token_type::parse_error; + } + } + else + { + error_message = "invalid string: surrogate U+D800..U+DBFF must be followed by U+DC00..U+DFFF"; + return token_type::parse_error; + } + } + else + { + if (JSON_HEDLEY_UNLIKELY(0xDC00 <= codepoint1 && codepoint1 <= 0xDFFF)) + { + error_message = "invalid string: surrogate U+DC00..U+DFFF must follow U+D800..U+DBFF"; + return token_type::parse_error; + } + } + + // result of the above calculation yields a proper codepoint + JSON_ASSERT(0x00 <= codepoint && codepoint <= 0x10FFFF); + + // translate codepoint into bytes + if (codepoint < 0x80) + { + // 1-byte characters: 0xxxxxxx (ASCII) + add(static_cast(codepoint)); + } + else if (codepoint <= 0x7FF) + { + // 2-byte characters: 110xxxxx 10xxxxxx + add(static_cast(0xC0u | (static_cast(codepoint) >> 6u))); + add(static_cast(0x80u | (static_cast(codepoint) & 0x3Fu))); + } + else if (codepoint <= 0xFFFF) + { + // 3-byte characters: 1110xxxx 10xxxxxx 10xxxxxx + add(static_cast(0xE0u | (static_cast(codepoint) >> 12u))); + add(static_cast(0x80u | ((static_cast(codepoint) >> 6u) & 0x3Fu))); + add(static_cast(0x80u | (static_cast(codepoint) & 0x3Fu))); + } + else + { + // 4-byte characters: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx + add(static_cast(0xF0u | (static_cast(codepoint) >> 18u))); + add(static_cast(0x80u | ((static_cast(codepoint) >> 12u) & 0x3Fu))); + add(static_cast(0x80u | ((static_cast(codepoint) >> 6u) & 0x3Fu))); + add(static_cast(0x80u | (static_cast(codepoint) & 0x3Fu))); + } + + break; + } + + // other characters after escape + default: + error_message = "invalid string: forbidden character after backslash"; + return token_type::parse_error; + } + + break; + } + + // invalid control characters + case 0x00: + { + error_message = "invalid string: control character U+0000 (NUL) must be escaped to \\u0000"; + return token_type::parse_error; + } + + case 0x01: + { + error_message = "invalid string: control character U+0001 (SOH) must be escaped to \\u0001"; + return token_type::parse_error; + } + + case 0x02: + { + error_message = "invalid string: control character U+0002 (STX) must be escaped to \\u0002"; + return token_type::parse_error; + } + + case 0x03: + { + error_message = "invalid string: control character U+0003 (ETX) must be escaped to \\u0003"; + return token_type::parse_error; + } + + case 0x04: + { + error_message = "invalid string: control character U+0004 (EOT) must be escaped to \\u0004"; + return token_type::parse_error; + } + + case 0x05: + { + error_message = "invalid string: control character U+0005 (ENQ) must be escaped to \\u0005"; + return token_type::parse_error; + } + + case 0x06: + { + error_message = "invalid string: control character U+0006 (ACK) must be escaped to \\u0006"; + return token_type::parse_error; + } + + case 0x07: + { + error_message = "invalid string: control character U+0007 (BEL) must be escaped to \\u0007"; + return token_type::parse_error; + } + + case 0x08: + { + error_message = "invalid string: control character U+0008 (BS) must be escaped to \\u0008 or \\b"; + return token_type::parse_error; + } + + case 0x09: + { + error_message = "invalid string: control character U+0009 (HT) must be escaped to \\u0009 or \\t"; + return token_type::parse_error; + } + + case 0x0A: + { + error_message = "invalid string: control character U+000A (LF) must be escaped to \\u000A or \\n"; + return token_type::parse_error; + } + + case 0x0B: + { + error_message = "invalid string: control character U+000B (VT) must be escaped to \\u000B"; + return token_type::parse_error; + } + + case 0x0C: + { + error_message = "invalid string: control character U+000C (FF) must be escaped to \\u000C or \\f"; + return token_type::parse_error; + } + + case 0x0D: + { + error_message = "invalid string: control character U+000D (CR) must be escaped to \\u000D or \\r"; + return token_type::parse_error; + } + + case 0x0E: + { + error_message = "invalid string: control character U+000E (SO) must be escaped to \\u000E"; + return token_type::parse_error; + } + + case 0x0F: + { + error_message = "invalid string: control character U+000F (SI) must be escaped to \\u000F"; + return token_type::parse_error; + } + + case 0x10: + { + error_message = "invalid string: control character U+0010 (DLE) must be escaped to \\u0010"; + return token_type::parse_error; + } + + case 0x11: + { + error_message = "invalid string: control character U+0011 (DC1) must be escaped to \\u0011"; + return token_type::parse_error; + } + + case 0x12: + { + error_message = "invalid string: control character U+0012 (DC2) must be escaped to \\u0012"; + return token_type::parse_error; + } + + case 0x13: + { + error_message = "invalid string: control character U+0013 (DC3) must be escaped to \\u0013"; + return token_type::parse_error; + } + + case 0x14: + { + error_message = "invalid string: control character U+0014 (DC4) must be escaped to \\u0014"; + return token_type::parse_error; + } + + case 0x15: + { + error_message = "invalid string: control character U+0015 (NAK) must be escaped to \\u0015"; + return token_type::parse_error; + } + + case 0x16: + { + error_message = "invalid string: control character U+0016 (SYN) must be escaped to \\u0016"; + return token_type::parse_error; + } + + case 0x17: + { + error_message = "invalid string: control character U+0017 (ETB) must be escaped to \\u0017"; + return token_type::parse_error; + } + + case 0x18: + { + error_message = "invalid string: control character U+0018 (CAN) must be escaped to \\u0018"; + return token_type::parse_error; + } + + case 0x19: + { + error_message = "invalid string: control character U+0019 (EM) must be escaped to \\u0019"; + return token_type::parse_error; + } + + case 0x1A: + { + error_message = "invalid string: control character U+001A (SUB) must be escaped to \\u001A"; + return token_type::parse_error; + } + + case 0x1B: + { + error_message = "invalid string: control character U+001B (ESC) must be escaped to \\u001B"; + return token_type::parse_error; + } + + case 0x1C: + { + error_message = "invalid string: control character U+001C (FS) must be escaped to \\u001C"; + return token_type::parse_error; + } + + case 0x1D: + { + error_message = "invalid string: control character U+001D (GS) must be escaped to \\u001D"; + return token_type::parse_error; + } + + case 0x1E: + { + error_message = "invalid string: control character U+001E (RS) must be escaped to \\u001E"; + return token_type::parse_error; + } + + case 0x1F: + { + error_message = "invalid string: control character U+001F (US) must be escaped to \\u001F"; + return token_type::parse_error; + } + + // U+0020..U+007F (except U+0022 (quote) and U+005C (backspace)) + case 0x20: + case 0x21: + case 0x23: + case 0x24: + case 0x25: + case 0x26: + case 0x27: + case 0x28: + case 0x29: + case 0x2A: + case 0x2B: + case 0x2C: + case 0x2D: + case 0x2E: + case 0x2F: + case 0x30: + case 0x31: + case 0x32: + case 0x33: + case 0x34: + case 0x35: + case 0x36: + case 0x37: + case 0x38: + case 0x39: + case 0x3A: + case 0x3B: + case 0x3C: + case 0x3D: + case 0x3E: + case 0x3F: + case 0x40: + case 0x41: + case 0x42: + case 0x43: + case 0x44: + case 0x45: + case 0x46: + case 0x47: + case 0x48: + case 0x49: + case 0x4A: + case 0x4B: + case 0x4C: + case 0x4D: + case 0x4E: + case 0x4F: + case 0x50: + case 0x51: + case 0x52: + case 0x53: + case 0x54: + case 0x55: + case 0x56: + case 0x57: + case 0x58: + case 0x59: + case 0x5A: + case 0x5B: + case 0x5D: + case 0x5E: + case 0x5F: + case 0x60: + case 0x61: + case 0x62: + case 0x63: + case 0x64: + case 0x65: + case 0x66: + case 0x67: + case 0x68: + case 0x69: + case 0x6A: + case 0x6B: + case 0x6C: + case 0x6D: + case 0x6E: + case 0x6F: + case 0x70: + case 0x71: + case 0x72: + case 0x73: + case 0x74: + case 0x75: + case 0x76: + case 0x77: + case 0x78: + case 0x79: + case 0x7A: + case 0x7B: + case 0x7C: + case 0x7D: + case 0x7E: + case 0x7F: + { + add(current); + break; + } + + // U+0080..U+07FF: bytes C2..DF 80..BF + case 0xC2: + case 0xC3: + case 0xC4: + case 0xC5: + case 0xC6: + case 0xC7: + case 0xC8: + case 0xC9: + case 0xCA: + case 0xCB: + case 0xCC: + case 0xCD: + case 0xCE: + case 0xCF: + case 0xD0: + case 0xD1: + case 0xD2: + case 0xD3: + case 0xD4: + case 0xD5: + case 0xD6: + case 0xD7: + case 0xD8: + case 0xD9: + case 0xDA: + case 0xDB: + case 0xDC: + case 0xDD: + case 0xDE: + case 0xDF: + { + if (JSON_HEDLEY_UNLIKELY(!next_byte_in_range({0x80, 0xBF}))) + { + return token_type::parse_error; + } + break; + } + + // U+0800..U+0FFF: bytes E0 A0..BF 80..BF + case 0xE0: + { + if (JSON_HEDLEY_UNLIKELY(!(next_byte_in_range({0xA0, 0xBF, 0x80, 0xBF})))) + { + return token_type::parse_error; + } + break; + } + + // U+1000..U+CFFF: bytes E1..EC 80..BF 80..BF + // U+E000..U+FFFF: bytes EE..EF 80..BF 80..BF + case 0xE1: + case 0xE2: + case 0xE3: + case 0xE4: + case 0xE5: + case 0xE6: + case 0xE7: + case 0xE8: + case 0xE9: + case 0xEA: + case 0xEB: + case 0xEC: + case 0xEE: + case 0xEF: + { + if (JSON_HEDLEY_UNLIKELY(!(next_byte_in_range({0x80, 0xBF, 0x80, 0xBF})))) + { + return token_type::parse_error; + } + break; + } + + // U+D000..U+D7FF: bytes ED 80..9F 80..BF + case 0xED: + { + if (JSON_HEDLEY_UNLIKELY(!(next_byte_in_range({0x80, 0x9F, 0x80, 0xBF})))) + { + return token_type::parse_error; + } + break; + } + + // U+10000..U+3FFFF F0 90..BF 80..BF 80..BF + case 0xF0: + { + if (JSON_HEDLEY_UNLIKELY(!(next_byte_in_range({0x90, 0xBF, 0x80, 0xBF, 0x80, 0xBF})))) + { + return token_type::parse_error; + } + break; + } + + // U+40000..U+FFFFF F1..F3 80..BF 80..BF 80..BF + case 0xF1: + case 0xF2: + case 0xF3: + { + if (JSON_HEDLEY_UNLIKELY(!(next_byte_in_range({0x80, 0xBF, 0x80, 0xBF, 0x80, 0xBF})))) + { + return token_type::parse_error; + } + break; + } + + // U+100000..U+10FFFF F4 80..8F 80..BF 80..BF + case 0xF4: + { + if (JSON_HEDLEY_UNLIKELY(!(next_byte_in_range({0x80, 0x8F, 0x80, 0xBF, 0x80, 0xBF})))) + { + return token_type::parse_error; + } + break; + } + + // remaining bytes (80..C1 and F5..FF) are ill-formed + default: + { + error_message = "invalid string: ill-formed UTF-8 byte"; + return token_type::parse_error; + } + } + } + } + + /*! + * @brief scan a comment + * @return whether comment could be scanned successfully + */ + bool scan_comment() + { + switch (get()) + { + // single-line comments skip input until a newline or EOF is read + case '/': + { + while (true) + { + switch (get()) + { + case '\n': + case '\r': + case std::char_traits::eof(): + case '\0': + return true; + + default: + break; + } + } + } + + // multi-line comments skip input until */ is read + case '*': + { + while (true) + { + switch (get()) + { + case std::char_traits::eof(): + case '\0': + { + error_message = "invalid comment; missing closing '*/'"; + return false; + } + + case '*': + { + switch (get()) + { + case '/': + return true; + + default: + { + unget(); + continue; + } + } + } + + default: + continue; + } + } + } + + // unexpected character after reading '/' + default: + { + error_message = "invalid comment; expecting '/' or '*' after '/'"; + return false; + } + } + } + + JSON_HEDLEY_NON_NULL(2) + static void strtof(float& f, const char* str, char** endptr) noexcept + { + f = std::strtof(str, endptr); + } + + JSON_HEDLEY_NON_NULL(2) + static void strtof(double& f, const char* str, char** endptr) noexcept + { + f = std::strtod(str, endptr); + } + + JSON_HEDLEY_NON_NULL(2) + static void strtof(long double& f, const char* str, char** endptr) noexcept + { + f = std::strtold(str, endptr); + } + + /*! + @brief scan a number literal + + This function scans a string according to Sect. 6 of RFC 8259. + + The function is realized with a deterministic finite state machine derived + from the grammar described in RFC 8259. Starting in state "init", the + input is read and used to determined the next state. Only state "done" + accepts the number. State "error" is a trap state to model errors. In the + table below, "anything" means any character but the ones listed before. + + state | 0 | 1-9 | e E | + | - | . | anything + ---------|----------|----------|----------|---------|---------|----------|----------- + init | zero | any1 | [error] | [error] | minus | [error] | [error] + minus | zero | any1 | [error] | [error] | [error] | [error] | [error] + zero | done | done | exponent | done | done | decimal1 | done + any1 | any1 | any1 | exponent | done | done | decimal1 | done + decimal1 | decimal2 | decimal2 | [error] | [error] | [error] | [error] | [error] + decimal2 | decimal2 | decimal2 | exponent | done | done | done | done + exponent | any2 | any2 | [error] | sign | sign | [error] | [error] + sign | any2 | any2 | [error] | [error] | [error] | [error] | [error] + any2 | any2 | any2 | done | done | done | done | done + + The state machine is realized with one label per state (prefixed with + "scan_number_") and `goto` statements between them. The state machine + contains cycles, but any cycle can be left when EOF is read. Therefore, + the function is guaranteed to terminate. + + During scanning, the read bytes are stored in token_buffer. This string is + then converted to a signed integer, an unsigned integer, or a + floating-point number. + + @return token_type::value_unsigned, token_type::value_integer, or + token_type::value_float if number could be successfully scanned, + token_type::parse_error otherwise + + @note The scanner is independent of the current locale. Internally, the + locale's decimal point is used instead of `.` to work with the + locale-dependent converters. + */ + token_type scan_number() // lgtm [cpp/use-of-goto] + { + // reset token_buffer to store the number's bytes + reset(); + + // the type of the parsed number; initially set to unsigned; will be + // changed if minus sign, decimal point or exponent is read + token_type number_type = token_type::value_unsigned; + + // state (init): we just found out we need to scan a number + switch (current) + { + case '-': + { + add(current); + goto scan_number_minus; + } + + case '0': + { + add(current); + goto scan_number_zero; + } + + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + { + add(current); + goto scan_number_any1; + } + + // all other characters are rejected outside scan_number() + default: // LCOV_EXCL_LINE + JSON_ASSERT(false); // NOLINT(cert-dcl03-c,hicpp-static-assert,misc-static-assert) LCOV_EXCL_LINE + } + +scan_number_minus: + // state: we just parsed a leading minus sign + number_type = token_type::value_integer; + switch (get()) + { + case '0': + { + add(current); + goto scan_number_zero; + } + + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + { + add(current); + goto scan_number_any1; + } + + default: + { + error_message = "invalid number; expected digit after '-'"; + return token_type::parse_error; + } + } + +scan_number_zero: + // state: we just parse a zero (maybe with a leading minus sign) + switch (get()) + { + case '.': + { + add(decimal_point_char); + goto scan_number_decimal1; + } + + case 'e': + case 'E': + { + add(current); + goto scan_number_exponent; + } + + default: + goto scan_number_done; + } + +scan_number_any1: + // state: we just parsed a number 0-9 (maybe with a leading minus sign) + switch (get()) + { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + { + add(current); + goto scan_number_any1; + } + + case '.': + { + add(decimal_point_char); + goto scan_number_decimal1; + } + + case 'e': + case 'E': + { + add(current); + goto scan_number_exponent; + } + + default: + goto scan_number_done; + } + +scan_number_decimal1: + // state: we just parsed a decimal point + number_type = token_type::value_float; + switch (get()) + { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + { + add(current); + goto scan_number_decimal2; + } + + default: + { + error_message = "invalid number; expected digit after '.'"; + return token_type::parse_error; + } + } + +scan_number_decimal2: + // we just parsed at least one number after a decimal point + switch (get()) + { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + { + add(current); + goto scan_number_decimal2; + } + + case 'e': + case 'E': + { + add(current); + goto scan_number_exponent; + } + + default: + goto scan_number_done; + } + +scan_number_exponent: + // we just parsed an exponent + number_type = token_type::value_float; + switch (get()) + { + case '+': + case '-': + { + add(current); + goto scan_number_sign; + } + + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + { + add(current); + goto scan_number_any2; + } + + default: + { + error_message = + "invalid number; expected '+', '-', or digit after exponent"; + return token_type::parse_error; + } + } + +scan_number_sign: + // we just parsed an exponent sign + switch (get()) + { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + { + add(current); + goto scan_number_any2; + } + + default: + { + error_message = "invalid number; expected digit after exponent sign"; + return token_type::parse_error; + } + } + +scan_number_any2: + // we just parsed a number after the exponent or exponent sign + switch (get()) + { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + { + add(current); + goto scan_number_any2; + } + + default: + goto scan_number_done; + } + +scan_number_done: + // unget the character after the number (we only read it to know that + // we are done scanning a number) + unget(); + + char* endptr = nullptr; // NOLINT(cppcoreguidelines-pro-type-vararg,hicpp-vararg) + errno = 0; + + // try to parse integers first and fall back to floats + if (number_type == token_type::value_unsigned) + { + const auto x = std::strtoull(token_buffer.data(), &endptr, 10); + + // we checked the number format before + JSON_ASSERT(endptr == token_buffer.data() + token_buffer.size()); + + if (errno == 0) + { + value_unsigned = static_cast(x); + if (value_unsigned == x) + { + return token_type::value_unsigned; + } + } + } + else if (number_type == token_type::value_integer) + { + const auto x = std::strtoll(token_buffer.data(), &endptr, 10); + + // we checked the number format before + JSON_ASSERT(endptr == token_buffer.data() + token_buffer.size()); + + if (errno == 0) + { + value_integer = static_cast(x); + if (value_integer == x) + { + return token_type::value_integer; + } + } + } + + // this code is reached if we parse a floating-point number or if an + // integer conversion above failed + strtof(value_float, token_buffer.data(), &endptr); + + // we checked the number format before + JSON_ASSERT(endptr == token_buffer.data() + token_buffer.size()); + + return token_type::value_float; + } + + /*! + @param[in] literal_text the literal text to expect + @param[in] length the length of the passed literal text + @param[in] return_type the token type to return on success + */ + JSON_HEDLEY_NON_NULL(2) + token_type scan_literal(const char_type* literal_text, const std::size_t length, + token_type return_type) + { + JSON_ASSERT(std::char_traits::to_char_type(current) == literal_text[0]); + for (std::size_t i = 1; i < length; ++i) + { + if (JSON_HEDLEY_UNLIKELY(std::char_traits::to_char_type(get()) != literal_text[i])) + { + error_message = "invalid literal"; + return token_type::parse_error; + } + } + return return_type; + } + + ///////////////////// + // input management + ///////////////////// + + /// reset token_buffer; current character is beginning of token + void reset() noexcept + { + token_buffer.clear(); + token_string.clear(); + token_string.push_back(std::char_traits::to_char_type(current)); + } + + /* + @brief get next character from the input + + This function provides the interface to the used input adapter. It does + not throw in case the input reached EOF, but returns a + `std::char_traits::eof()` in that case. Stores the scanned characters + for use in error messages. + + @return character read from the input + */ + char_int_type get() + { + ++position.chars_read_total; + ++position.chars_read_current_line; + + if (next_unget) + { + // just reset the next_unget variable and work with current + next_unget = false; + } + else + { + current = ia.get_character(); + } + + if (JSON_HEDLEY_LIKELY(current != std::char_traits::eof())) + { + token_string.push_back(std::char_traits::to_char_type(current)); + } + + if (current == '\n') + { + ++position.lines_read; + position.chars_read_current_line = 0; + } + + return current; + } + + /*! + @brief unget current character (read it again on next get) + + We implement unget by setting variable next_unget to true. The input is not + changed - we just simulate ungetting by modifying chars_read_total, + chars_read_current_line, and token_string. The next call to get() will + behave as if the unget character is read again. + */ + void unget() + { + next_unget = true; + + --position.chars_read_total; + + // in case we "unget" a newline, we have to also decrement the lines_read + if (position.chars_read_current_line == 0) + { + if (position.lines_read > 0) + { + --position.lines_read; + } + } + else + { + --position.chars_read_current_line; + } + + if (JSON_HEDLEY_LIKELY(current != std::char_traits::eof())) + { + JSON_ASSERT(!token_string.empty()); + token_string.pop_back(); + } + } + + /// add a character to token_buffer + void add(char_int_type c) + { + token_buffer.push_back(static_cast(c)); + } + + public: + ///////////////////// + // value getters + ///////////////////// + + /// return integer value + constexpr number_integer_t get_number_integer() const noexcept + { + return value_integer; + } + + /// return unsigned integer value + constexpr number_unsigned_t get_number_unsigned() const noexcept + { + return value_unsigned; + } + + /// return floating-point value + constexpr number_float_t get_number_float() const noexcept + { + return value_float; + } + + /// return current string value (implicitly resets the token; useful only once) + string_t& get_string() + { + return token_buffer; + } + + ///////////////////// + // diagnostics + ///////////////////// + + /// return position of last read token + constexpr position_t get_position() const noexcept + { + return position; + } + + /// return the last read token (for errors only). Will never contain EOF + /// (an arbitrary value that is not a valid char value, often -1), because + /// 255 may legitimately occur. May contain NUL, which should be escaped. + std::string get_token_string() const + { + // escape control characters + std::string result; + for (const auto c : token_string) + { + if (static_cast(c) <= '\x1F') + { + // escape control characters + std::array cs{{}}; + static_cast((std::snprintf)(cs.data(), cs.size(), "", static_cast(c))); // NOLINT(cppcoreguidelines-pro-type-vararg,hicpp-vararg) + result += cs.data(); + } + else + { + // add character as is + result.push_back(static_cast(c)); + } + } + + return result; + } + + /// return syntax error message + JSON_HEDLEY_RETURNS_NON_NULL + constexpr const char* get_error_message() const noexcept + { + return error_message; + } + + ///////////////////// + // actual scanner + ///////////////////// + + /*! + @brief skip the UTF-8 byte order mark + @return true iff there is no BOM or the correct BOM has been skipped + */ + bool skip_bom() + { + if (get() == 0xEF) + { + // check if we completely parse the BOM + return get() == 0xBB && get() == 0xBF; + } + + // the first character is not the beginning of the BOM; unget it to + // process is later + unget(); + return true; + } + + void skip_whitespace() + { + do + { + get(); + } + while (current == ' ' || current == '\t' || current == '\n' || current == '\r'); + } + + token_type scan() + { + // initially, skip the BOM + if (position.chars_read_total == 0 && !skip_bom()) + { + error_message = "invalid BOM; must be 0xEF 0xBB 0xBF if given"; + return token_type::parse_error; + } + + // read next character and ignore whitespace + skip_whitespace(); + + // ignore comments + while (ignore_comments && current == '/') + { + if (!scan_comment()) + { + return token_type::parse_error; + } + + // skip following whitespace + skip_whitespace(); + } + + switch (current) + { + // structural characters + case '[': + return token_type::begin_array; + case ']': + return token_type::end_array; + case '{': + return token_type::begin_object; + case '}': + return token_type::end_object; + case ':': + return token_type::name_separator; + case ',': + return token_type::value_separator; + + // literals + case 't': + { + std::array true_literal = {{static_cast('t'), static_cast('r'), static_cast('u'), static_cast('e')}}; + return scan_literal(true_literal.data(), true_literal.size(), token_type::literal_true); + } + case 'f': + { + std::array false_literal = {{static_cast('f'), static_cast('a'), static_cast('l'), static_cast('s'), static_cast('e')}}; + return scan_literal(false_literal.data(), false_literal.size(), token_type::literal_false); + } + case 'n': + { + std::array null_literal = {{static_cast('n'), static_cast('u'), static_cast('l'), static_cast('l')}}; + return scan_literal(null_literal.data(), null_literal.size(), token_type::literal_null); + } + + // string + case '\"': + return scan_string(); + + // number + case '-': + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + return scan_number(); + + // end of input (the null byte is needed when parsing from + // string literals) + case '\0': + case std::char_traits::eof(): + return token_type::end_of_input; + + // error + default: + error_message = "invalid literal"; + return token_type::parse_error; + } + } + + private: + /// input adapter + InputAdapterType ia; + + /// whether comments should be ignored (true) or signaled as errors (false) + const bool ignore_comments = false; + + /// the current character + char_int_type current = std::char_traits::eof(); + + /// whether the next get() call should just return current + bool next_unget = false; + + /// the start position of the current token + position_t position {}; + + /// raw input token string (for error messages) + std::vector token_string {}; + + /// buffer for variable-length tokens (numbers, strings) + string_t token_buffer {}; + + /// a description of occurred lexer errors + const char* error_message = ""; + + // number values + number_integer_t value_integer = 0; + number_unsigned_t value_unsigned = 0; + number_float_t value_float = 0; + + /// the decimal point + const char_int_type decimal_point_char = '.'; +}; +} // namespace detail +} // namespace nlohmann + +// #include + +// #include + + +#include // size_t +#include // declval +#include // string + +// #include + +// #include + + +namespace nlohmann +{ +namespace detail +{ +template +using null_function_t = decltype(std::declval().null()); + +template +using boolean_function_t = + decltype(std::declval().boolean(std::declval())); + +template +using number_integer_function_t = + decltype(std::declval().number_integer(std::declval())); + +template +using number_unsigned_function_t = + decltype(std::declval().number_unsigned(std::declval())); + +template +using number_float_function_t = decltype(std::declval().number_float( + std::declval(), std::declval())); + +template +using string_function_t = + decltype(std::declval().string(std::declval())); + +template +using binary_function_t = + decltype(std::declval().binary(std::declval())); + +template +using start_object_function_t = + decltype(std::declval().start_object(std::declval())); + +template +using key_function_t = + decltype(std::declval().key(std::declval())); + +template +using end_object_function_t = decltype(std::declval().end_object()); + +template +using start_array_function_t = + decltype(std::declval().start_array(std::declval())); + +template +using end_array_function_t = decltype(std::declval().end_array()); + +template +using parse_error_function_t = decltype(std::declval().parse_error( + std::declval(), std::declval(), + std::declval())); + +template +struct is_sax +{ + private: + static_assert(is_basic_json::value, + "BasicJsonType must be of type basic_json<...>"); + + using number_integer_t = typename BasicJsonType::number_integer_t; + using number_unsigned_t = typename BasicJsonType::number_unsigned_t; + using number_float_t = typename BasicJsonType::number_float_t; + using string_t = typename BasicJsonType::string_t; + using binary_t = typename BasicJsonType::binary_t; + using exception_t = typename BasicJsonType::exception; + + public: + static constexpr bool value = + is_detected_exact::value && + is_detected_exact::value && + is_detected_exact::value && + is_detected_exact::value && + is_detected_exact::value && + is_detected_exact::value && + is_detected_exact::value && + is_detected_exact::value && + is_detected_exact::value && + is_detected_exact::value && + is_detected_exact::value && + is_detected_exact::value && + is_detected_exact::value; +}; + +template +struct is_sax_static_asserts +{ + private: + static_assert(is_basic_json::value, + "BasicJsonType must be of type basic_json<...>"); + + using number_integer_t = typename BasicJsonType::number_integer_t; + using number_unsigned_t = typename BasicJsonType::number_unsigned_t; + using number_float_t = typename BasicJsonType::number_float_t; + using string_t = typename BasicJsonType::string_t; + using binary_t = typename BasicJsonType::binary_t; + using exception_t = typename BasicJsonType::exception; + + public: + static_assert(is_detected_exact::value, + "Missing/invalid function: bool null()"); + static_assert(is_detected_exact::value, + "Missing/invalid function: bool boolean(bool)"); + static_assert(is_detected_exact::value, + "Missing/invalid function: bool boolean(bool)"); + static_assert( + is_detected_exact::value, + "Missing/invalid function: bool number_integer(number_integer_t)"); + static_assert( + is_detected_exact::value, + "Missing/invalid function: bool number_unsigned(number_unsigned_t)"); + static_assert(is_detected_exact::value, + "Missing/invalid function: bool number_float(number_float_t, const string_t&)"); + static_assert( + is_detected_exact::value, + "Missing/invalid function: bool string(string_t&)"); + static_assert( + is_detected_exact::value, + "Missing/invalid function: bool binary(binary_t&)"); + static_assert(is_detected_exact::value, + "Missing/invalid function: bool start_object(std::size_t)"); + static_assert(is_detected_exact::value, + "Missing/invalid function: bool key(string_t&)"); + static_assert(is_detected_exact::value, + "Missing/invalid function: bool end_object()"); + static_assert(is_detected_exact::value, + "Missing/invalid function: bool start_array(std::size_t)"); + static_assert(is_detected_exact::value, + "Missing/invalid function: bool end_array()"); + static_assert( + is_detected_exact::value, + "Missing/invalid function: bool parse_error(std::size_t, const " + "std::string&, const exception&)"); +}; +} // namespace detail +} // namespace nlohmann + +// #include + +// #include + + +namespace nlohmann +{ +namespace detail +{ + +/// how to treat CBOR tags +enum class cbor_tag_handler_t +{ + error, ///< throw a parse_error exception in case of a tag + ignore, ///< ignore tags + store ///< store tags as binary type +}; + +/*! +@brief determine system byte order + +@return true if and only if system's byte order is little endian + +@note from https://stackoverflow.com/a/1001328/266378 +*/ +static inline bool little_endianness(int num = 1) noexcept +{ + return *reinterpret_cast(&num) == 1; +} + + +/////////////////// +// binary reader // +/////////////////// + +/*! +@brief deserialization of CBOR, MessagePack, and UBJSON values +*/ +template> +class binary_reader +{ + using number_integer_t = typename BasicJsonType::number_integer_t; + using number_unsigned_t = typename BasicJsonType::number_unsigned_t; + using number_float_t = typename BasicJsonType::number_float_t; + using string_t = typename BasicJsonType::string_t; + using binary_t = typename BasicJsonType::binary_t; + using json_sax_t = SAX; + using char_type = typename InputAdapterType::char_type; + using char_int_type = typename std::char_traits::int_type; + + public: + /*! + @brief create a binary reader + + @param[in] adapter input adapter to read from + */ + explicit binary_reader(InputAdapterType&& adapter) noexcept : ia(std::move(adapter)) + { + (void)detail::is_sax_static_asserts {}; + } + + // make class move-only + binary_reader(const binary_reader&) = delete; + binary_reader(binary_reader&&) = default; // NOLINT(hicpp-noexcept-move,performance-noexcept-move-constructor) + binary_reader& operator=(const binary_reader&) = delete; + binary_reader& operator=(binary_reader&&) = default; // NOLINT(hicpp-noexcept-move,performance-noexcept-move-constructor) + ~binary_reader() = default; + + /*! + @param[in] format the binary format to parse + @param[in] sax_ a SAX event processor + @param[in] strict whether to expect the input to be consumed completed + @param[in] tag_handler how to treat CBOR tags + + @return whether parsing was successful + */ + JSON_HEDLEY_NON_NULL(3) + bool sax_parse(const input_format_t format, + json_sax_t* sax_, + const bool strict = true, + const cbor_tag_handler_t tag_handler = cbor_tag_handler_t::error) + { + sax = sax_; + bool result = false; + + switch (format) + { + case input_format_t::bson: + result = parse_bson_internal(); + break; + + case input_format_t::cbor: + result = parse_cbor_internal(true, tag_handler); + break; + + case input_format_t::msgpack: + result = parse_msgpack_internal(); + break; + + case input_format_t::ubjson: + result = parse_ubjson_internal(); + break; + + case input_format_t::json: // LCOV_EXCL_LINE + default: // LCOV_EXCL_LINE + JSON_ASSERT(false); // NOLINT(cert-dcl03-c,hicpp-static-assert,misc-static-assert) LCOV_EXCL_LINE + } + + // strict mode: next byte must be EOF + if (result && strict) + { + if (format == input_format_t::ubjson) + { + get_ignore_noop(); + } + else + { + get(); + } + + if (JSON_HEDLEY_UNLIKELY(current != std::char_traits::eof())) + { + return sax->parse_error(chars_read, get_token_string(), + parse_error::create(110, chars_read, exception_message(format, "expected end of input; last byte: 0x" + get_token_string(), "value"), BasicJsonType())); + } + } + + return result; + } + + private: + ////////// + // BSON // + ////////// + + /*! + @brief Reads in a BSON-object and passes it to the SAX-parser. + @return whether a valid BSON-value was passed to the SAX parser + */ + bool parse_bson_internal() + { + std::int32_t document_size{}; + get_number(input_format_t::bson, document_size); + + if (JSON_HEDLEY_UNLIKELY(!sax->start_object(static_cast(-1)))) + { + return false; + } + + if (JSON_HEDLEY_UNLIKELY(!parse_bson_element_list(/*is_array*/false))) + { + return false; + } + + return sax->end_object(); + } + + /*! + @brief Parses a C-style string from the BSON input. + @param[in,out] result A reference to the string variable where the read + string is to be stored. + @return `true` if the \x00-byte indicating the end of the string was + encountered before the EOF; false` indicates an unexpected EOF. + */ + bool get_bson_cstr(string_t& result) + { + auto out = std::back_inserter(result); + while (true) + { + get(); + if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format_t::bson, "cstring"))) + { + return false; + } + if (current == 0x00) + { + return true; + } + *out++ = static_cast(current); + } + } + + /*! + @brief Parses a zero-terminated string of length @a len from the BSON + input. + @param[in] len The length (including the zero-byte at the end) of the + string to be read. + @param[in,out] result A reference to the string variable where the read + string is to be stored. + @tparam NumberType The type of the length @a len + @pre len >= 1 + @return `true` if the string was successfully parsed + */ + template + bool get_bson_string(const NumberType len, string_t& result) + { + if (JSON_HEDLEY_UNLIKELY(len < 1)) + { + auto last_token = get_token_string(); + return sax->parse_error(chars_read, last_token, parse_error::create(112, chars_read, exception_message(input_format_t::bson, "string length must be at least 1, is " + std::to_string(len), "string"), BasicJsonType())); + } + + return get_string(input_format_t::bson, len - static_cast(1), result) && get() != std::char_traits::eof(); + } + + /*! + @brief Parses a byte array input of length @a len from the BSON input. + @param[in] len The length of the byte array to be read. + @param[in,out] result A reference to the binary variable where the read + array is to be stored. + @tparam NumberType The type of the length @a len + @pre len >= 0 + @return `true` if the byte array was successfully parsed + */ + template + bool get_bson_binary(const NumberType len, binary_t& result) + { + if (JSON_HEDLEY_UNLIKELY(len < 0)) + { + auto last_token = get_token_string(); + return sax->parse_error(chars_read, last_token, parse_error::create(112, chars_read, exception_message(input_format_t::bson, "byte array length cannot be negative, is " + std::to_string(len), "binary"), BasicJsonType())); + } + + // All BSON binary values have a subtype + std::uint8_t subtype{}; + get_number(input_format_t::bson, subtype); + result.set_subtype(subtype); + + return get_binary(input_format_t::bson, len, result); + } + + /*! + @brief Read a BSON document element of the given @a element_type. + @param[in] element_type The BSON element type, c.f. http://bsonspec.org/spec.html + @param[in] element_type_parse_position The position in the input stream, + where the `element_type` was read. + @warning Not all BSON element types are supported yet. An unsupported + @a element_type will give rise to a parse_error.114: + Unsupported BSON record type 0x... + @return whether a valid BSON-object/array was passed to the SAX parser + */ + bool parse_bson_element_internal(const char_int_type element_type, + const std::size_t element_type_parse_position) + { + switch (element_type) + { + case 0x01: // double + { + double number{}; + return get_number(input_format_t::bson, number) && sax->number_float(static_cast(number), ""); + } + + case 0x02: // string + { + std::int32_t len{}; + string_t value; + return get_number(input_format_t::bson, len) && get_bson_string(len, value) && sax->string(value); + } + + case 0x03: // object + { + return parse_bson_internal(); + } + + case 0x04: // array + { + return parse_bson_array(); + } + + case 0x05: // binary + { + std::int32_t len{}; + binary_t value; + return get_number(input_format_t::bson, len) && get_bson_binary(len, value) && sax->binary(value); + } + + case 0x08: // boolean + { + return sax->boolean(get() != 0); + } + + case 0x0A: // null + { + return sax->null(); + } + + case 0x10: // int32 + { + std::int32_t value{}; + return get_number(input_format_t::bson, value) && sax->number_integer(value); + } + + case 0x12: // int64 + { + std::int64_t value{}; + return get_number(input_format_t::bson, value) && sax->number_integer(value); + } + + default: // anything else not supported (yet) + { + std::array cr{{}}; + static_cast((std::snprintf)(cr.data(), cr.size(), "%.2hhX", static_cast(element_type))); // NOLINT(cppcoreguidelines-pro-type-vararg,hicpp-vararg) + return sax->parse_error(element_type_parse_position, std::string(cr.data()), parse_error::create(114, element_type_parse_position, "Unsupported BSON record type 0x" + std::string(cr.data()), BasicJsonType())); + } + } + } + + /*! + @brief Read a BSON element list (as specified in the BSON-spec) + + The same binary layout is used for objects and arrays, hence it must be + indicated with the argument @a is_array which one is expected + (true --> array, false --> object). + + @param[in] is_array Determines if the element list being read is to be + treated as an object (@a is_array == false), or as an + array (@a is_array == true). + @return whether a valid BSON-object/array was passed to the SAX parser + */ + bool parse_bson_element_list(const bool is_array) + { + string_t key; + + while (auto element_type = get()) + { + if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format_t::bson, "element list"))) + { + return false; + } + + const std::size_t element_type_parse_position = chars_read; + if (JSON_HEDLEY_UNLIKELY(!get_bson_cstr(key))) + { + return false; + } + + if (!is_array && !sax->key(key)) + { + return false; + } + + if (JSON_HEDLEY_UNLIKELY(!parse_bson_element_internal(element_type, element_type_parse_position))) + { + return false; + } + + // get_bson_cstr only appends + key.clear(); + } + + return true; + } + + /*! + @brief Reads an array from the BSON input and passes it to the SAX-parser. + @return whether a valid BSON-array was passed to the SAX parser + */ + bool parse_bson_array() + { + std::int32_t document_size{}; + get_number(input_format_t::bson, document_size); + + if (JSON_HEDLEY_UNLIKELY(!sax->start_array(static_cast(-1)))) + { + return false; + } + + if (JSON_HEDLEY_UNLIKELY(!parse_bson_element_list(/*is_array*/true))) + { + return false; + } + + return sax->end_array(); + } + + ////////// + // CBOR // + ////////// + + /*! + @param[in] get_char whether a new character should be retrieved from the + input (true) or whether the last read character should + be considered instead (false) + @param[in] tag_handler how CBOR tags should be treated + + @return whether a valid CBOR value was passed to the SAX parser + */ + bool parse_cbor_internal(const bool get_char, + const cbor_tag_handler_t tag_handler) + { + switch (get_char ? get() : current) + { + // EOF + case std::char_traits::eof(): + return unexpect_eof(input_format_t::cbor, "value"); + + // Integer 0x00..0x17 (0..23) + case 0x00: + case 0x01: + case 0x02: + case 0x03: + case 0x04: + case 0x05: + case 0x06: + case 0x07: + case 0x08: + case 0x09: + case 0x0A: + case 0x0B: + case 0x0C: + case 0x0D: + case 0x0E: + case 0x0F: + case 0x10: + case 0x11: + case 0x12: + case 0x13: + case 0x14: + case 0x15: + case 0x16: + case 0x17: + return sax->number_unsigned(static_cast(current)); + + case 0x18: // Unsigned integer (one-byte uint8_t follows) + { + std::uint8_t number{}; + return get_number(input_format_t::cbor, number) && sax->number_unsigned(number); + } + + case 0x19: // Unsigned integer (two-byte uint16_t follows) + { + std::uint16_t number{}; + return get_number(input_format_t::cbor, number) && sax->number_unsigned(number); + } + + case 0x1A: // Unsigned integer (four-byte uint32_t follows) + { + std::uint32_t number{}; + return get_number(input_format_t::cbor, number) && sax->number_unsigned(number); + } + + case 0x1B: // Unsigned integer (eight-byte uint64_t follows) + { + std::uint64_t number{}; + return get_number(input_format_t::cbor, number) && sax->number_unsigned(number); + } + + // Negative integer -1-0x00..-1-0x17 (-1..-24) + case 0x20: + case 0x21: + case 0x22: + case 0x23: + case 0x24: + case 0x25: + case 0x26: + case 0x27: + case 0x28: + case 0x29: + case 0x2A: + case 0x2B: + case 0x2C: + case 0x2D: + case 0x2E: + case 0x2F: + case 0x30: + case 0x31: + case 0x32: + case 0x33: + case 0x34: + case 0x35: + case 0x36: + case 0x37: + return sax->number_integer(static_cast(0x20 - 1 - current)); + + case 0x38: // Negative integer (one-byte uint8_t follows) + { + std::uint8_t number{}; + return get_number(input_format_t::cbor, number) && sax->number_integer(static_cast(-1) - number); + } + + case 0x39: // Negative integer -1-n (two-byte uint16_t follows) + { + std::uint16_t number{}; + return get_number(input_format_t::cbor, number) && sax->number_integer(static_cast(-1) - number); + } + + case 0x3A: // Negative integer -1-n (four-byte uint32_t follows) + { + std::uint32_t number{}; + return get_number(input_format_t::cbor, number) && sax->number_integer(static_cast(-1) - number); + } + + case 0x3B: // Negative integer -1-n (eight-byte uint64_t follows) + { + std::uint64_t number{}; + return get_number(input_format_t::cbor, number) && sax->number_integer(static_cast(-1) + - static_cast(number)); + } + + // Binary data (0x00..0x17 bytes follow) + case 0x40: + case 0x41: + case 0x42: + case 0x43: + case 0x44: + case 0x45: + case 0x46: + case 0x47: + case 0x48: + case 0x49: + case 0x4A: + case 0x4B: + case 0x4C: + case 0x4D: + case 0x4E: + case 0x4F: + case 0x50: + case 0x51: + case 0x52: + case 0x53: + case 0x54: + case 0x55: + case 0x56: + case 0x57: + case 0x58: // Binary data (one-byte uint8_t for n follows) + case 0x59: // Binary data (two-byte uint16_t for n follow) + case 0x5A: // Binary data (four-byte uint32_t for n follow) + case 0x5B: // Binary data (eight-byte uint64_t for n follow) + case 0x5F: // Binary data (indefinite length) + { + binary_t b; + return get_cbor_binary(b) && sax->binary(b); + } + + // UTF-8 string (0x00..0x17 bytes follow) + case 0x60: + case 0x61: + case 0x62: + case 0x63: + case 0x64: + case 0x65: + case 0x66: + case 0x67: + case 0x68: + case 0x69: + case 0x6A: + case 0x6B: + case 0x6C: + case 0x6D: + case 0x6E: + case 0x6F: + case 0x70: + case 0x71: + case 0x72: + case 0x73: + case 0x74: + case 0x75: + case 0x76: + case 0x77: + case 0x78: // UTF-8 string (one-byte uint8_t for n follows) + case 0x79: // UTF-8 string (two-byte uint16_t for n follow) + case 0x7A: // UTF-8 string (four-byte uint32_t for n follow) + case 0x7B: // UTF-8 string (eight-byte uint64_t for n follow) + case 0x7F: // UTF-8 string (indefinite length) + { + string_t s; + return get_cbor_string(s) && sax->string(s); + } + + // array (0x00..0x17 data items follow) + case 0x80: + case 0x81: + case 0x82: + case 0x83: + case 0x84: + case 0x85: + case 0x86: + case 0x87: + case 0x88: + case 0x89: + case 0x8A: + case 0x8B: + case 0x8C: + case 0x8D: + case 0x8E: + case 0x8F: + case 0x90: + case 0x91: + case 0x92: + case 0x93: + case 0x94: + case 0x95: + case 0x96: + case 0x97: + return get_cbor_array(static_cast(static_cast(current) & 0x1Fu), tag_handler); + + case 0x98: // array (one-byte uint8_t for n follows) + { + std::uint8_t len{}; + return get_number(input_format_t::cbor, len) && get_cbor_array(static_cast(len), tag_handler); + } + + case 0x99: // array (two-byte uint16_t for n follow) + { + std::uint16_t len{}; + return get_number(input_format_t::cbor, len) && get_cbor_array(static_cast(len), tag_handler); + } + + case 0x9A: // array (four-byte uint32_t for n follow) + { + std::uint32_t len{}; + return get_number(input_format_t::cbor, len) && get_cbor_array(static_cast(len), tag_handler); + } + + case 0x9B: // array (eight-byte uint64_t for n follow) + { + std::uint64_t len{}; + return get_number(input_format_t::cbor, len) && get_cbor_array(detail::conditional_static_cast(len), tag_handler); + } + + case 0x9F: // array (indefinite length) + return get_cbor_array(static_cast(-1), tag_handler); + + // map (0x00..0x17 pairs of data items follow) + case 0xA0: + case 0xA1: + case 0xA2: + case 0xA3: + case 0xA4: + case 0xA5: + case 0xA6: + case 0xA7: + case 0xA8: + case 0xA9: + case 0xAA: + case 0xAB: + case 0xAC: + case 0xAD: + case 0xAE: + case 0xAF: + case 0xB0: + case 0xB1: + case 0xB2: + case 0xB3: + case 0xB4: + case 0xB5: + case 0xB6: + case 0xB7: + return get_cbor_object(static_cast(static_cast(current) & 0x1Fu), tag_handler); + + case 0xB8: // map (one-byte uint8_t for n follows) + { + std::uint8_t len{}; + return get_number(input_format_t::cbor, len) && get_cbor_object(static_cast(len), tag_handler); + } + + case 0xB9: // map (two-byte uint16_t for n follow) + { + std::uint16_t len{}; + return get_number(input_format_t::cbor, len) && get_cbor_object(static_cast(len), tag_handler); + } + + case 0xBA: // map (four-byte uint32_t for n follow) + { + std::uint32_t len{}; + return get_number(input_format_t::cbor, len) && get_cbor_object(static_cast(len), tag_handler); + } + + case 0xBB: // map (eight-byte uint64_t for n follow) + { + std::uint64_t len{}; + return get_number(input_format_t::cbor, len) && get_cbor_object(detail::conditional_static_cast(len), tag_handler); + } + + case 0xBF: // map (indefinite length) + return get_cbor_object(static_cast(-1), tag_handler); + + case 0xC6: // tagged item + case 0xC7: + case 0xC8: + case 0xC9: + case 0xCA: + case 0xCB: + case 0xCC: + case 0xCD: + case 0xCE: + case 0xCF: + case 0xD0: + case 0xD1: + case 0xD2: + case 0xD3: + case 0xD4: + case 0xD8: // tagged item (1 bytes follow) + case 0xD9: // tagged item (2 bytes follow) + case 0xDA: // tagged item (4 bytes follow) + case 0xDB: // tagged item (8 bytes follow) + { + switch (tag_handler) + { + case cbor_tag_handler_t::error: + { + auto last_token = get_token_string(); + return sax->parse_error(chars_read, last_token, parse_error::create(112, chars_read, exception_message(input_format_t::cbor, "invalid byte: 0x" + last_token, "value"), BasicJsonType())); + } + + case cbor_tag_handler_t::ignore: + { + // ignore binary subtype + switch (current) + { + case 0xD8: + { + std::uint8_t subtype_to_ignore{}; + get_number(input_format_t::cbor, subtype_to_ignore); + break; + } + case 0xD9: + { + std::uint16_t subtype_to_ignore{}; + get_number(input_format_t::cbor, subtype_to_ignore); + break; + } + case 0xDA: + { + std::uint32_t subtype_to_ignore{}; + get_number(input_format_t::cbor, subtype_to_ignore); + break; + } + case 0xDB: + { + std::uint64_t subtype_to_ignore{}; + get_number(input_format_t::cbor, subtype_to_ignore); + break; + } + default: + break; + } + return parse_cbor_internal(true, tag_handler); + } + + case cbor_tag_handler_t::store: + { + binary_t b; + // use binary subtype and store in binary container + switch (current) + { + case 0xD8: + { + std::uint8_t subtype{}; + get_number(input_format_t::cbor, subtype); + b.set_subtype(detail::conditional_static_cast(subtype)); + break; + } + case 0xD9: + { + std::uint16_t subtype{}; + get_number(input_format_t::cbor, subtype); + b.set_subtype(detail::conditional_static_cast(subtype)); + break; + } + case 0xDA: + { + std::uint32_t subtype{}; + get_number(input_format_t::cbor, subtype); + b.set_subtype(detail::conditional_static_cast(subtype)); + break; + } + case 0xDB: + { + std::uint64_t subtype{}; + get_number(input_format_t::cbor, subtype); + b.set_subtype(detail::conditional_static_cast(subtype)); + break; + } + default: + return parse_cbor_internal(true, tag_handler); + } + get(); + return get_cbor_binary(b) && sax->binary(b); + } + + default: // LCOV_EXCL_LINE + JSON_ASSERT(false); // NOLINT(cert-dcl03-c,hicpp-static-assert,misc-static-assert) LCOV_EXCL_LINE + return false; // LCOV_EXCL_LINE + } + } + + case 0xF4: // false + return sax->boolean(false); + + case 0xF5: // true + return sax->boolean(true); + + case 0xF6: // null + return sax->null(); + + case 0xF9: // Half-Precision Float (two-byte IEEE 754) + { + const auto byte1_raw = get(); + if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format_t::cbor, "number"))) + { + return false; + } + const auto byte2_raw = get(); + if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format_t::cbor, "number"))) + { + return false; + } + + const auto byte1 = static_cast(byte1_raw); + const auto byte2 = static_cast(byte2_raw); + + // code from RFC 7049, Appendix D, Figure 3: + // As half-precision floating-point numbers were only added + // to IEEE 754 in 2008, today's programming platforms often + // still only have limited support for them. It is very + // easy to include at least decoding support for them even + // without such support. An example of a small decoder for + // half-precision floating-point numbers in the C language + // is shown in Fig. 3. + const auto half = static_cast((byte1 << 8u) + byte2); + const double val = [&half] + { + const int exp = (half >> 10u) & 0x1Fu; + const unsigned int mant = half & 0x3FFu; + JSON_ASSERT(0 <= exp&& exp <= 32); + JSON_ASSERT(mant <= 1024); + switch (exp) + { + case 0: + return std::ldexp(mant, -24); + case 31: + return (mant == 0) + ? std::numeric_limits::infinity() + : std::numeric_limits::quiet_NaN(); + default: + return std::ldexp(mant + 1024, exp - 25); + } + }(); + return sax->number_float((half & 0x8000u) != 0 + ? static_cast(-val) + : static_cast(val), ""); + } + + case 0xFA: // Single-Precision Float (four-byte IEEE 754) + { + float number{}; + return get_number(input_format_t::cbor, number) && sax->number_float(static_cast(number), ""); + } + + case 0xFB: // Double-Precision Float (eight-byte IEEE 754) + { + double number{}; + return get_number(input_format_t::cbor, number) && sax->number_float(static_cast(number), ""); + } + + default: // anything else (0xFF is handled inside the other types) + { + auto last_token = get_token_string(); + return sax->parse_error(chars_read, last_token, parse_error::create(112, chars_read, exception_message(input_format_t::cbor, "invalid byte: 0x" + last_token, "value"), BasicJsonType())); + } + } + } + + /*! + @brief reads a CBOR string + + This function first reads starting bytes to determine the expected + string length and then copies this number of bytes into a string. + Additionally, CBOR's strings with indefinite lengths are supported. + + @param[out] result created string + + @return whether string creation completed + */ + bool get_cbor_string(string_t& result) + { + if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format_t::cbor, "string"))) + { + return false; + } + + switch (current) + { + // UTF-8 string (0x00..0x17 bytes follow) + case 0x60: + case 0x61: + case 0x62: + case 0x63: + case 0x64: + case 0x65: + case 0x66: + case 0x67: + case 0x68: + case 0x69: + case 0x6A: + case 0x6B: + case 0x6C: + case 0x6D: + case 0x6E: + case 0x6F: + case 0x70: + case 0x71: + case 0x72: + case 0x73: + case 0x74: + case 0x75: + case 0x76: + case 0x77: + { + return get_string(input_format_t::cbor, static_cast(current) & 0x1Fu, result); + } + + case 0x78: // UTF-8 string (one-byte uint8_t for n follows) + { + std::uint8_t len{}; + return get_number(input_format_t::cbor, len) && get_string(input_format_t::cbor, len, result); + } + + case 0x79: // UTF-8 string (two-byte uint16_t for n follow) + { + std::uint16_t len{}; + return get_number(input_format_t::cbor, len) && get_string(input_format_t::cbor, len, result); + } + + case 0x7A: // UTF-8 string (four-byte uint32_t for n follow) + { + std::uint32_t len{}; + return get_number(input_format_t::cbor, len) && get_string(input_format_t::cbor, len, result); + } + + case 0x7B: // UTF-8 string (eight-byte uint64_t for n follow) + { + std::uint64_t len{}; + return get_number(input_format_t::cbor, len) && get_string(input_format_t::cbor, len, result); + } + + case 0x7F: // UTF-8 string (indefinite length) + { + while (get() != 0xFF) + { + string_t chunk; + if (!get_cbor_string(chunk)) + { + return false; + } + result.append(chunk); + } + return true; + } + + default: + { + auto last_token = get_token_string(); + return sax->parse_error(chars_read, last_token, parse_error::create(113, chars_read, exception_message(input_format_t::cbor, "expected length specification (0x60-0x7B) or indefinite string type (0x7F); last byte: 0x" + last_token, "string"), BasicJsonType())); + } + } + } + + /*! + @brief reads a CBOR byte array + + This function first reads starting bytes to determine the expected + byte array length and then copies this number of bytes into the byte array. + Additionally, CBOR's byte arrays with indefinite lengths are supported. + + @param[out] result created byte array + + @return whether byte array creation completed + */ + bool get_cbor_binary(binary_t& result) + { + if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format_t::cbor, "binary"))) + { + return false; + } + + switch (current) + { + // Binary data (0x00..0x17 bytes follow) + case 0x40: + case 0x41: + case 0x42: + case 0x43: + case 0x44: + case 0x45: + case 0x46: + case 0x47: + case 0x48: + case 0x49: + case 0x4A: + case 0x4B: + case 0x4C: + case 0x4D: + case 0x4E: + case 0x4F: + case 0x50: + case 0x51: + case 0x52: + case 0x53: + case 0x54: + case 0x55: + case 0x56: + case 0x57: + { + return get_binary(input_format_t::cbor, static_cast(current) & 0x1Fu, result); + } + + case 0x58: // Binary data (one-byte uint8_t for n follows) + { + std::uint8_t len{}; + return get_number(input_format_t::cbor, len) && + get_binary(input_format_t::cbor, len, result); + } + + case 0x59: // Binary data (two-byte uint16_t for n follow) + { + std::uint16_t len{}; + return get_number(input_format_t::cbor, len) && + get_binary(input_format_t::cbor, len, result); + } + + case 0x5A: // Binary data (four-byte uint32_t for n follow) + { + std::uint32_t len{}; + return get_number(input_format_t::cbor, len) && + get_binary(input_format_t::cbor, len, result); + } + + case 0x5B: // Binary data (eight-byte uint64_t for n follow) + { + std::uint64_t len{}; + return get_number(input_format_t::cbor, len) && + get_binary(input_format_t::cbor, len, result); + } + + case 0x5F: // Binary data (indefinite length) + { + while (get() != 0xFF) + { + binary_t chunk; + if (!get_cbor_binary(chunk)) + { + return false; + } + result.insert(result.end(), chunk.begin(), chunk.end()); + } + return true; + } + + default: + { + auto last_token = get_token_string(); + return sax->parse_error(chars_read, last_token, parse_error::create(113, chars_read, exception_message(input_format_t::cbor, "expected length specification (0x40-0x5B) or indefinite binary array type (0x5F); last byte: 0x" + last_token, "binary"), BasicJsonType())); + } + } + } + + /*! + @param[in] len the length of the array or static_cast(-1) for an + array of indefinite size + @param[in] tag_handler how CBOR tags should be treated + @return whether array creation completed + */ + bool get_cbor_array(const std::size_t len, + const cbor_tag_handler_t tag_handler) + { + if (JSON_HEDLEY_UNLIKELY(!sax->start_array(len))) + { + return false; + } + + if (len != static_cast(-1)) + { + for (std::size_t i = 0; i < len; ++i) + { + if (JSON_HEDLEY_UNLIKELY(!parse_cbor_internal(true, tag_handler))) + { + return false; + } + } + } + else + { + while (get() != 0xFF) + { + if (JSON_HEDLEY_UNLIKELY(!parse_cbor_internal(false, tag_handler))) + { + return false; + } + } + } + + return sax->end_array(); + } + + /*! + @param[in] len the length of the object or static_cast(-1) for an + object of indefinite size + @param[in] tag_handler how CBOR tags should be treated + @return whether object creation completed + */ + bool get_cbor_object(const std::size_t len, + const cbor_tag_handler_t tag_handler) + { + if (JSON_HEDLEY_UNLIKELY(!sax->start_object(len))) + { + return false; + } + + if (len != 0) + { + string_t key; + if (len != static_cast(-1)) + { + for (std::size_t i = 0; i < len; ++i) + { + get(); + if (JSON_HEDLEY_UNLIKELY(!get_cbor_string(key) || !sax->key(key))) + { + return false; + } + + if (JSON_HEDLEY_UNLIKELY(!parse_cbor_internal(true, tag_handler))) + { + return false; + } + key.clear(); + } + } + else + { + while (get() != 0xFF) + { + if (JSON_HEDLEY_UNLIKELY(!get_cbor_string(key) || !sax->key(key))) + { + return false; + } + + if (JSON_HEDLEY_UNLIKELY(!parse_cbor_internal(true, tag_handler))) + { + return false; + } + key.clear(); + } + } + } + + return sax->end_object(); + } + + ///////////// + // MsgPack // + ///////////// + + /*! + @return whether a valid MessagePack value was passed to the SAX parser + */ + bool parse_msgpack_internal() + { + switch (get()) + { + // EOF + case std::char_traits::eof(): + return unexpect_eof(input_format_t::msgpack, "value"); + + // positive fixint + case 0x00: + case 0x01: + case 0x02: + case 0x03: + case 0x04: + case 0x05: + case 0x06: + case 0x07: + case 0x08: + case 0x09: + case 0x0A: + case 0x0B: + case 0x0C: + case 0x0D: + case 0x0E: + case 0x0F: + case 0x10: + case 0x11: + case 0x12: + case 0x13: + case 0x14: + case 0x15: + case 0x16: + case 0x17: + case 0x18: + case 0x19: + case 0x1A: + case 0x1B: + case 0x1C: + case 0x1D: + case 0x1E: + case 0x1F: + case 0x20: + case 0x21: + case 0x22: + case 0x23: + case 0x24: + case 0x25: + case 0x26: + case 0x27: + case 0x28: + case 0x29: + case 0x2A: + case 0x2B: + case 0x2C: + case 0x2D: + case 0x2E: + case 0x2F: + case 0x30: + case 0x31: + case 0x32: + case 0x33: + case 0x34: + case 0x35: + case 0x36: + case 0x37: + case 0x38: + case 0x39: + case 0x3A: + case 0x3B: + case 0x3C: + case 0x3D: + case 0x3E: + case 0x3F: + case 0x40: + case 0x41: + case 0x42: + case 0x43: + case 0x44: + case 0x45: + case 0x46: + case 0x47: + case 0x48: + case 0x49: + case 0x4A: + case 0x4B: + case 0x4C: + case 0x4D: + case 0x4E: + case 0x4F: + case 0x50: + case 0x51: + case 0x52: + case 0x53: + case 0x54: + case 0x55: + case 0x56: + case 0x57: + case 0x58: + case 0x59: + case 0x5A: + case 0x5B: + case 0x5C: + case 0x5D: + case 0x5E: + case 0x5F: + case 0x60: + case 0x61: + case 0x62: + case 0x63: + case 0x64: + case 0x65: + case 0x66: + case 0x67: + case 0x68: + case 0x69: + case 0x6A: + case 0x6B: + case 0x6C: + case 0x6D: + case 0x6E: + case 0x6F: + case 0x70: + case 0x71: + case 0x72: + case 0x73: + case 0x74: + case 0x75: + case 0x76: + case 0x77: + case 0x78: + case 0x79: + case 0x7A: + case 0x7B: + case 0x7C: + case 0x7D: + case 0x7E: + case 0x7F: + return sax->number_unsigned(static_cast(current)); + + // fixmap + case 0x80: + case 0x81: + case 0x82: + case 0x83: + case 0x84: + case 0x85: + case 0x86: + case 0x87: + case 0x88: + case 0x89: + case 0x8A: + case 0x8B: + case 0x8C: + case 0x8D: + case 0x8E: + case 0x8F: + return get_msgpack_object(static_cast(static_cast(current) & 0x0Fu)); + + // fixarray + case 0x90: + case 0x91: + case 0x92: + case 0x93: + case 0x94: + case 0x95: + case 0x96: + case 0x97: + case 0x98: + case 0x99: + case 0x9A: + case 0x9B: + case 0x9C: + case 0x9D: + case 0x9E: + case 0x9F: + return get_msgpack_array(static_cast(static_cast(current) & 0x0Fu)); + + // fixstr + case 0xA0: + case 0xA1: + case 0xA2: + case 0xA3: + case 0xA4: + case 0xA5: + case 0xA6: + case 0xA7: + case 0xA8: + case 0xA9: + case 0xAA: + case 0xAB: + case 0xAC: + case 0xAD: + case 0xAE: + case 0xAF: + case 0xB0: + case 0xB1: + case 0xB2: + case 0xB3: + case 0xB4: + case 0xB5: + case 0xB6: + case 0xB7: + case 0xB8: + case 0xB9: + case 0xBA: + case 0xBB: + case 0xBC: + case 0xBD: + case 0xBE: + case 0xBF: + case 0xD9: // str 8 + case 0xDA: // str 16 + case 0xDB: // str 32 + { + string_t s; + return get_msgpack_string(s) && sax->string(s); + } + + case 0xC0: // nil + return sax->null(); + + case 0xC2: // false + return sax->boolean(false); + + case 0xC3: // true + return sax->boolean(true); + + case 0xC4: // bin 8 + case 0xC5: // bin 16 + case 0xC6: // bin 32 + case 0xC7: // ext 8 + case 0xC8: // ext 16 + case 0xC9: // ext 32 + case 0xD4: // fixext 1 + case 0xD5: // fixext 2 + case 0xD6: // fixext 4 + case 0xD7: // fixext 8 + case 0xD8: // fixext 16 + { + binary_t b; + return get_msgpack_binary(b) && sax->binary(b); + } + + case 0xCA: // float 32 + { + float number{}; + return get_number(input_format_t::msgpack, number) && sax->number_float(static_cast(number), ""); + } + + case 0xCB: // float 64 + { + double number{}; + return get_number(input_format_t::msgpack, number) && sax->number_float(static_cast(number), ""); + } + + case 0xCC: // uint 8 + { + std::uint8_t number{}; + return get_number(input_format_t::msgpack, number) && sax->number_unsigned(number); + } + + case 0xCD: // uint 16 + { + std::uint16_t number{}; + return get_number(input_format_t::msgpack, number) && sax->number_unsigned(number); + } + + case 0xCE: // uint 32 + { + std::uint32_t number{}; + return get_number(input_format_t::msgpack, number) && sax->number_unsigned(number); + } + + case 0xCF: // uint 64 + { + std::uint64_t number{}; + return get_number(input_format_t::msgpack, number) && sax->number_unsigned(number); + } + + case 0xD0: // int 8 + { + std::int8_t number{}; + return get_number(input_format_t::msgpack, number) && sax->number_integer(number); + } + + case 0xD1: // int 16 + { + std::int16_t number{}; + return get_number(input_format_t::msgpack, number) && sax->number_integer(number); + } + + case 0xD2: // int 32 + { + std::int32_t number{}; + return get_number(input_format_t::msgpack, number) && sax->number_integer(number); + } + + case 0xD3: // int 64 + { + std::int64_t number{}; + return get_number(input_format_t::msgpack, number) && sax->number_integer(number); + } + + case 0xDC: // array 16 + { + std::uint16_t len{}; + return get_number(input_format_t::msgpack, len) && get_msgpack_array(static_cast(len)); + } + + case 0xDD: // array 32 + { + std::uint32_t len{}; + return get_number(input_format_t::msgpack, len) && get_msgpack_array(static_cast(len)); + } + + case 0xDE: // map 16 + { + std::uint16_t len{}; + return get_number(input_format_t::msgpack, len) && get_msgpack_object(static_cast(len)); + } + + case 0xDF: // map 32 + { + std::uint32_t len{}; + return get_number(input_format_t::msgpack, len) && get_msgpack_object(static_cast(len)); + } + + // negative fixint + case 0xE0: + case 0xE1: + case 0xE2: + case 0xE3: + case 0xE4: + case 0xE5: + case 0xE6: + case 0xE7: + case 0xE8: + case 0xE9: + case 0xEA: + case 0xEB: + case 0xEC: + case 0xED: + case 0xEE: + case 0xEF: + case 0xF0: + case 0xF1: + case 0xF2: + case 0xF3: + case 0xF4: + case 0xF5: + case 0xF6: + case 0xF7: + case 0xF8: + case 0xF9: + case 0xFA: + case 0xFB: + case 0xFC: + case 0xFD: + case 0xFE: + case 0xFF: + return sax->number_integer(static_cast(current)); + + default: // anything else + { + auto last_token = get_token_string(); + return sax->parse_error(chars_read, last_token, parse_error::create(112, chars_read, exception_message(input_format_t::msgpack, "invalid byte: 0x" + last_token, "value"), BasicJsonType())); + } + } + } + + /*! + @brief reads a MessagePack string + + This function first reads starting bytes to determine the expected + string length and then copies this number of bytes into a string. + + @param[out] result created string + + @return whether string creation completed + */ + bool get_msgpack_string(string_t& result) + { + if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format_t::msgpack, "string"))) + { + return false; + } + + switch (current) + { + // fixstr + case 0xA0: + case 0xA1: + case 0xA2: + case 0xA3: + case 0xA4: + case 0xA5: + case 0xA6: + case 0xA7: + case 0xA8: + case 0xA9: + case 0xAA: + case 0xAB: + case 0xAC: + case 0xAD: + case 0xAE: + case 0xAF: + case 0xB0: + case 0xB1: + case 0xB2: + case 0xB3: + case 0xB4: + case 0xB5: + case 0xB6: + case 0xB7: + case 0xB8: + case 0xB9: + case 0xBA: + case 0xBB: + case 0xBC: + case 0xBD: + case 0xBE: + case 0xBF: + { + return get_string(input_format_t::msgpack, static_cast(current) & 0x1Fu, result); + } + + case 0xD9: // str 8 + { + std::uint8_t len{}; + return get_number(input_format_t::msgpack, len) && get_string(input_format_t::msgpack, len, result); + } + + case 0xDA: // str 16 + { + std::uint16_t len{}; + return get_number(input_format_t::msgpack, len) && get_string(input_format_t::msgpack, len, result); + } + + case 0xDB: // str 32 + { + std::uint32_t len{}; + return get_number(input_format_t::msgpack, len) && get_string(input_format_t::msgpack, len, result); + } + + default: + { + auto last_token = get_token_string(); + return sax->parse_error(chars_read, last_token, parse_error::create(113, chars_read, exception_message(input_format_t::msgpack, "expected length specification (0xA0-0xBF, 0xD9-0xDB); last byte: 0x" + last_token, "string"), BasicJsonType())); + } + } + } + + /*! + @brief reads a MessagePack byte array + + This function first reads starting bytes to determine the expected + byte array length and then copies this number of bytes into a byte array. + + @param[out] result created byte array + + @return whether byte array creation completed + */ + bool get_msgpack_binary(binary_t& result) + { + // helper function to set the subtype + auto assign_and_return_true = [&result](std::int8_t subtype) + { + result.set_subtype(static_cast(subtype)); + return true; + }; + + switch (current) + { + case 0xC4: // bin 8 + { + std::uint8_t len{}; + return get_number(input_format_t::msgpack, len) && + get_binary(input_format_t::msgpack, len, result); + } + + case 0xC5: // bin 16 + { + std::uint16_t len{}; + return get_number(input_format_t::msgpack, len) && + get_binary(input_format_t::msgpack, len, result); + } + + case 0xC6: // bin 32 + { + std::uint32_t len{}; + return get_number(input_format_t::msgpack, len) && + get_binary(input_format_t::msgpack, len, result); + } + + case 0xC7: // ext 8 + { + std::uint8_t len{}; + std::int8_t subtype{}; + return get_number(input_format_t::msgpack, len) && + get_number(input_format_t::msgpack, subtype) && + get_binary(input_format_t::msgpack, len, result) && + assign_and_return_true(subtype); + } + + case 0xC8: // ext 16 + { + std::uint16_t len{}; + std::int8_t subtype{}; + return get_number(input_format_t::msgpack, len) && + get_number(input_format_t::msgpack, subtype) && + get_binary(input_format_t::msgpack, len, result) && + assign_and_return_true(subtype); + } + + case 0xC9: // ext 32 + { + std::uint32_t len{}; + std::int8_t subtype{}; + return get_number(input_format_t::msgpack, len) && + get_number(input_format_t::msgpack, subtype) && + get_binary(input_format_t::msgpack, len, result) && + assign_and_return_true(subtype); + } + + case 0xD4: // fixext 1 + { + std::int8_t subtype{}; + return get_number(input_format_t::msgpack, subtype) && + get_binary(input_format_t::msgpack, 1, result) && + assign_and_return_true(subtype); + } + + case 0xD5: // fixext 2 + { + std::int8_t subtype{}; + return get_number(input_format_t::msgpack, subtype) && + get_binary(input_format_t::msgpack, 2, result) && + assign_and_return_true(subtype); + } + + case 0xD6: // fixext 4 + { + std::int8_t subtype{}; + return get_number(input_format_t::msgpack, subtype) && + get_binary(input_format_t::msgpack, 4, result) && + assign_and_return_true(subtype); + } + + case 0xD7: // fixext 8 + { + std::int8_t subtype{}; + return get_number(input_format_t::msgpack, subtype) && + get_binary(input_format_t::msgpack, 8, result) && + assign_and_return_true(subtype); + } + + case 0xD8: // fixext 16 + { + std::int8_t subtype{}; + return get_number(input_format_t::msgpack, subtype) && + get_binary(input_format_t::msgpack, 16, result) && + assign_and_return_true(subtype); + } + + default: // LCOV_EXCL_LINE + return false; // LCOV_EXCL_LINE + } + } + + /*! + @param[in] len the length of the array + @return whether array creation completed + */ + bool get_msgpack_array(const std::size_t len) + { + if (JSON_HEDLEY_UNLIKELY(!sax->start_array(len))) + { + return false; + } + + for (std::size_t i = 0; i < len; ++i) + { + if (JSON_HEDLEY_UNLIKELY(!parse_msgpack_internal())) + { + return false; + } + } + + return sax->end_array(); + } + + /*! + @param[in] len the length of the object + @return whether object creation completed + */ + bool get_msgpack_object(const std::size_t len) + { + if (JSON_HEDLEY_UNLIKELY(!sax->start_object(len))) + { + return false; + } + + string_t key; + for (std::size_t i = 0; i < len; ++i) + { + get(); + if (JSON_HEDLEY_UNLIKELY(!get_msgpack_string(key) || !sax->key(key))) + { + return false; + } + + if (JSON_HEDLEY_UNLIKELY(!parse_msgpack_internal())) + { + return false; + } + key.clear(); + } + + return sax->end_object(); + } + + //////////// + // UBJSON // + //////////// + + /*! + @param[in] get_char whether a new character should be retrieved from the + input (true, default) or whether the last read + character should be considered instead + + @return whether a valid UBJSON value was passed to the SAX parser + */ + bool parse_ubjson_internal(const bool get_char = true) + { + return get_ubjson_value(get_char ? get_ignore_noop() : current); + } + + /*! + @brief reads a UBJSON string + + This function is either called after reading the 'S' byte explicitly + indicating a string, or in case of an object key where the 'S' byte can be + left out. + + @param[out] result created string + @param[in] get_char whether a new character should be retrieved from the + input (true, default) or whether the last read + character should be considered instead + + @return whether string creation completed + */ + bool get_ubjson_string(string_t& result, const bool get_char = true) + { + if (get_char) + { + get(); // TODO(niels): may we ignore N here? + } + + if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format_t::ubjson, "value"))) + { + return false; + } + + switch (current) + { + case 'U': + { + std::uint8_t len{}; + return get_number(input_format_t::ubjson, len) && get_string(input_format_t::ubjson, len, result); + } + + case 'i': + { + std::int8_t len{}; + return get_number(input_format_t::ubjson, len) && get_string(input_format_t::ubjson, len, result); + } + + case 'I': + { + std::int16_t len{}; + return get_number(input_format_t::ubjson, len) && get_string(input_format_t::ubjson, len, result); + } + + case 'l': + { + std::int32_t len{}; + return get_number(input_format_t::ubjson, len) && get_string(input_format_t::ubjson, len, result); + } + + case 'L': + { + std::int64_t len{}; + return get_number(input_format_t::ubjson, len) && get_string(input_format_t::ubjson, len, result); + } + + default: + auto last_token = get_token_string(); + return sax->parse_error(chars_read, last_token, parse_error::create(113, chars_read, exception_message(input_format_t::ubjson, "expected length type specification (U, i, I, l, L); last byte: 0x" + last_token, "string"), BasicJsonType())); + } + } + + /*! + @param[out] result determined size + @return whether size determination completed + */ + bool get_ubjson_size_value(std::size_t& result) + { + switch (get_ignore_noop()) + { + case 'U': + { + std::uint8_t number{}; + if (JSON_HEDLEY_UNLIKELY(!get_number(input_format_t::ubjson, number))) + { + return false; + } + result = static_cast(number); + return true; + } + + case 'i': + { + std::int8_t number{}; + if (JSON_HEDLEY_UNLIKELY(!get_number(input_format_t::ubjson, number))) + { + return false; + } + result = static_cast(number); // NOLINT(bugprone-signed-char-misuse,cert-str34-c): number is not a char + return true; + } + + case 'I': + { + std::int16_t number{}; + if (JSON_HEDLEY_UNLIKELY(!get_number(input_format_t::ubjson, number))) + { + return false; + } + result = static_cast(number); + return true; + } + + case 'l': + { + std::int32_t number{}; + if (JSON_HEDLEY_UNLIKELY(!get_number(input_format_t::ubjson, number))) + { + return false; + } + result = static_cast(number); + return true; + } + + case 'L': + { + std::int64_t number{}; + if (JSON_HEDLEY_UNLIKELY(!get_number(input_format_t::ubjson, number))) + { + return false; + } + result = static_cast(number); + return true; + } + + default: + { + auto last_token = get_token_string(); + return sax->parse_error(chars_read, last_token, parse_error::create(113, chars_read, exception_message(input_format_t::ubjson, "expected length type specification (U, i, I, l, L) after '#'; last byte: 0x" + last_token, "size"), BasicJsonType())); + } + } + } + + /*! + @brief determine the type and size for a container + + In the optimized UBJSON format, a type and a size can be provided to allow + for a more compact representation. + + @param[out] result pair of the size and the type + + @return whether pair creation completed + */ + bool get_ubjson_size_type(std::pair& result) + { + result.first = string_t::npos; // size + result.second = 0; // type + + get_ignore_noop(); + + if (current == '$') + { + result.second = get(); // must not ignore 'N', because 'N' maybe the type + if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format_t::ubjson, "type"))) + { + return false; + } + + get_ignore_noop(); + if (JSON_HEDLEY_UNLIKELY(current != '#')) + { + if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format_t::ubjson, "value"))) + { + return false; + } + auto last_token = get_token_string(); + return sax->parse_error(chars_read, last_token, parse_error::create(112, chars_read, exception_message(input_format_t::ubjson, "expected '#' after type information; last byte: 0x" + last_token, "size"), BasicJsonType())); + } + + return get_ubjson_size_value(result.first); + } + + if (current == '#') + { + return get_ubjson_size_value(result.first); + } + + return true; + } + + /*! + @param prefix the previously read or set type prefix + @return whether value creation completed + */ + bool get_ubjson_value(const char_int_type prefix) + { + switch (prefix) + { + case std::char_traits::eof(): // EOF + return unexpect_eof(input_format_t::ubjson, "value"); + + case 'T': // true + return sax->boolean(true); + case 'F': // false + return sax->boolean(false); + + case 'Z': // null + return sax->null(); + + case 'U': + { + std::uint8_t number{}; + return get_number(input_format_t::ubjson, number) && sax->number_unsigned(number); + } + + case 'i': + { + std::int8_t number{}; + return get_number(input_format_t::ubjson, number) && sax->number_integer(number); + } + + case 'I': + { + std::int16_t number{}; + return get_number(input_format_t::ubjson, number) && sax->number_integer(number); + } + + case 'l': + { + std::int32_t number{}; + return get_number(input_format_t::ubjson, number) && sax->number_integer(number); + } + + case 'L': + { + std::int64_t number{}; + return get_number(input_format_t::ubjson, number) && sax->number_integer(number); + } + + case 'd': + { + float number{}; + return get_number(input_format_t::ubjson, number) && sax->number_float(static_cast(number), ""); + } + + case 'D': + { + double number{}; + return get_number(input_format_t::ubjson, number) && sax->number_float(static_cast(number), ""); + } + + case 'H': + { + return get_ubjson_high_precision_number(); + } + + case 'C': // char + { + get(); + if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format_t::ubjson, "char"))) + { + return false; + } + if (JSON_HEDLEY_UNLIKELY(current > 127)) + { + auto last_token = get_token_string(); + return sax->parse_error(chars_read, last_token, parse_error::create(113, chars_read, exception_message(input_format_t::ubjson, "byte after 'C' must be in range 0x00..0x7F; last byte: 0x" + last_token, "char"), BasicJsonType())); + } + string_t s(1, static_cast(current)); + return sax->string(s); + } + + case 'S': // string + { + string_t s; + return get_ubjson_string(s) && sax->string(s); + } + + case '[': // array + return get_ubjson_array(); + + case '{': // object + return get_ubjson_object(); + + default: // anything else + { + auto last_token = get_token_string(); + return sax->parse_error(chars_read, last_token, parse_error::create(112, chars_read, exception_message(input_format_t::ubjson, "invalid byte: 0x" + last_token, "value"), BasicJsonType())); + } + } + } + + /*! + @return whether array creation completed + */ + bool get_ubjson_array() + { + std::pair size_and_type; + if (JSON_HEDLEY_UNLIKELY(!get_ubjson_size_type(size_and_type))) + { + return false; + } + + if (size_and_type.first != string_t::npos) + { + if (JSON_HEDLEY_UNLIKELY(!sax->start_array(size_and_type.first))) + { + return false; + } + + if (size_and_type.second != 0) + { + if (size_and_type.second != 'N') + { + for (std::size_t i = 0; i < size_and_type.first; ++i) + { + if (JSON_HEDLEY_UNLIKELY(!get_ubjson_value(size_and_type.second))) + { + return false; + } + } + } + } + else + { + for (std::size_t i = 0; i < size_and_type.first; ++i) + { + if (JSON_HEDLEY_UNLIKELY(!parse_ubjson_internal())) + { + return false; + } + } + } + } + else + { + if (JSON_HEDLEY_UNLIKELY(!sax->start_array(static_cast(-1)))) + { + return false; + } + + while (current != ']') + { + if (JSON_HEDLEY_UNLIKELY(!parse_ubjson_internal(false))) + { + return false; + } + get_ignore_noop(); + } + } + + return sax->end_array(); + } + + /*! + @return whether object creation completed + */ + bool get_ubjson_object() + { + std::pair size_and_type; + if (JSON_HEDLEY_UNLIKELY(!get_ubjson_size_type(size_and_type))) + { + return false; + } + + string_t key; + if (size_and_type.first != string_t::npos) + { + if (JSON_HEDLEY_UNLIKELY(!sax->start_object(size_and_type.first))) + { + return false; + } + + if (size_and_type.second != 0) + { + for (std::size_t i = 0; i < size_and_type.first; ++i) + { + if (JSON_HEDLEY_UNLIKELY(!get_ubjson_string(key) || !sax->key(key))) + { + return false; + } + if (JSON_HEDLEY_UNLIKELY(!get_ubjson_value(size_and_type.second))) + { + return false; + } + key.clear(); + } + } + else + { + for (std::size_t i = 0; i < size_and_type.first; ++i) + { + if (JSON_HEDLEY_UNLIKELY(!get_ubjson_string(key) || !sax->key(key))) + { + return false; + } + if (JSON_HEDLEY_UNLIKELY(!parse_ubjson_internal())) + { + return false; + } + key.clear(); + } + } + } + else + { + if (JSON_HEDLEY_UNLIKELY(!sax->start_object(static_cast(-1)))) + { + return false; + } + + while (current != '}') + { + if (JSON_HEDLEY_UNLIKELY(!get_ubjson_string(key, false) || !sax->key(key))) + { + return false; + } + if (JSON_HEDLEY_UNLIKELY(!parse_ubjson_internal())) + { + return false; + } + get_ignore_noop(); + key.clear(); + } + } + + return sax->end_object(); + } + + // Note, no reader for UBJSON binary types is implemented because they do + // not exist + + bool get_ubjson_high_precision_number() + { + // get size of following number string + std::size_t size{}; + auto res = get_ubjson_size_value(size); + if (JSON_HEDLEY_UNLIKELY(!res)) + { + return res; + } + + // get number string + std::vector number_vector; + for (std::size_t i = 0; i < size; ++i) + { + get(); + if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format_t::ubjson, "number"))) + { + return false; + } + number_vector.push_back(static_cast(current)); + } + + // parse number string + using ia_type = decltype(detail::input_adapter(number_vector)); + auto number_lexer = detail::lexer(detail::input_adapter(number_vector), false); + const auto result_number = number_lexer.scan(); + const auto number_string = number_lexer.get_token_string(); + const auto result_remainder = number_lexer.scan(); + + using token_type = typename detail::lexer_base::token_type; + + if (JSON_HEDLEY_UNLIKELY(result_remainder != token_type::end_of_input)) + { + return sax->parse_error(chars_read, number_string, parse_error::create(115, chars_read, exception_message(input_format_t::ubjson, "invalid number text: " + number_lexer.get_token_string(), "high-precision number"), BasicJsonType())); + } + + switch (result_number) + { + case token_type::value_integer: + return sax->number_integer(number_lexer.get_number_integer()); + case token_type::value_unsigned: + return sax->number_unsigned(number_lexer.get_number_unsigned()); + case token_type::value_float: + return sax->number_float(number_lexer.get_number_float(), std::move(number_string)); + case token_type::uninitialized: + case token_type::literal_true: + case token_type::literal_false: + case token_type::literal_null: + case token_type::value_string: + case token_type::begin_array: + case token_type::begin_object: + case token_type::end_array: + case token_type::end_object: + case token_type::name_separator: + case token_type::value_separator: + case token_type::parse_error: + case token_type::end_of_input: + case token_type::literal_or_value: + default: + return sax->parse_error(chars_read, number_string, parse_error::create(115, chars_read, exception_message(input_format_t::ubjson, "invalid number text: " + number_lexer.get_token_string(), "high-precision number"), BasicJsonType())); + } + } + + /////////////////////// + // Utility functions // + /////////////////////// + + /*! + @brief get next character from the input + + This function provides the interface to the used input adapter. It does + not throw in case the input reached EOF, but returns a -'ve valued + `std::char_traits::eof()` in that case. + + @return character read from the input + */ + char_int_type get() + { + ++chars_read; + return current = ia.get_character(); + } + + /*! + @return character read from the input after ignoring all 'N' entries + */ + char_int_type get_ignore_noop() + { + do + { + get(); + } + while (current == 'N'); + + return current; + } + + /* + @brief read a number from the input + + @tparam NumberType the type of the number + @param[in] format the current format (for diagnostics) + @param[out] result number of type @a NumberType + + @return whether conversion completed + + @note This function needs to respect the system's endianness, because + bytes in CBOR, MessagePack, and UBJSON are stored in network order + (big endian) and therefore need reordering on little endian systems. + */ + template + bool get_number(const input_format_t format, NumberType& result) + { + // step 1: read input into array with system's byte order + std::array vec{}; + for (std::size_t i = 0; i < sizeof(NumberType); ++i) + { + get(); + if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(format, "number"))) + { + return false; + } + + // reverse byte order prior to conversion if necessary + if (is_little_endian != InputIsLittleEndian) + { + vec[sizeof(NumberType) - i - 1] = static_cast(current); + } + else + { + vec[i] = static_cast(current); // LCOV_EXCL_LINE + } + } + + // step 2: convert array into number of type T and return + std::memcpy(&result, vec.data(), sizeof(NumberType)); + return true; + } + + /*! + @brief create a string by reading characters from the input + + @tparam NumberType the type of the number + @param[in] format the current format (for diagnostics) + @param[in] len number of characters to read + @param[out] result string created by reading @a len bytes + + @return whether string creation completed + + @note We can not reserve @a len bytes for the result, because @a len + may be too large. Usually, @ref unexpect_eof() detects the end of + the input before we run out of string memory. + */ + template + bool get_string(const input_format_t format, + const NumberType len, + string_t& result) + { + bool success = true; + for (NumberType i = 0; i < len; i++) + { + get(); + if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(format, "string"))) + { + success = false; + break; + } + result.push_back(static_cast(current)); + } + return success; + } + + /*! + @brief create a byte array by reading bytes from the input + + @tparam NumberType the type of the number + @param[in] format the current format (for diagnostics) + @param[in] len number of bytes to read + @param[out] result byte array created by reading @a len bytes + + @return whether byte array creation completed + + @note We can not reserve @a len bytes for the result, because @a len + may be too large. Usually, @ref unexpect_eof() detects the end of + the input before we run out of memory. + */ + template + bool get_binary(const input_format_t format, + const NumberType len, + binary_t& result) + { + bool success = true; + for (NumberType i = 0; i < len; i++) + { + get(); + if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(format, "binary"))) + { + success = false; + break; + } + result.push_back(static_cast(current)); + } + return success; + } + + /*! + @param[in] format the current format (for diagnostics) + @param[in] context further context information (for diagnostics) + @return whether the last read character is not EOF + */ + JSON_HEDLEY_NON_NULL(3) + bool unexpect_eof(const input_format_t format, const char* context) const + { + if (JSON_HEDLEY_UNLIKELY(current == std::char_traits::eof())) + { + return sax->parse_error(chars_read, "", + parse_error::create(110, chars_read, exception_message(format, "unexpected end of input", context), BasicJsonType())); + } + return true; + } + + /*! + @return a string representation of the last read byte + */ + std::string get_token_string() const + { + std::array cr{{}}; + static_cast((std::snprintf)(cr.data(), cr.size(), "%.2hhX", static_cast(current))); // NOLINT(cppcoreguidelines-pro-type-vararg,hicpp-vararg) + return std::string{cr.data()}; + } + + /*! + @param[in] format the current format + @param[in] detail a detailed error message + @param[in] context further context information + @return a message string to use in the parse_error exceptions + */ + std::string exception_message(const input_format_t format, + const std::string& detail, + const std::string& context) const + { + std::string error_msg = "syntax error while parsing "; + + switch (format) + { + case input_format_t::cbor: + error_msg += "CBOR"; + break; + + case input_format_t::msgpack: + error_msg += "MessagePack"; + break; + + case input_format_t::ubjson: + error_msg += "UBJSON"; + break; + + case input_format_t::bson: + error_msg += "BSON"; + break; + + case input_format_t::json: // LCOV_EXCL_LINE + default: // LCOV_EXCL_LINE + JSON_ASSERT(false); // NOLINT(cert-dcl03-c,hicpp-static-assert,misc-static-assert) LCOV_EXCL_LINE + } + + return error_msg + " " + context + ": " + detail; + } + + private: + /// input adapter + InputAdapterType ia; + + /// the current character + char_int_type current = std::char_traits::eof(); + + /// the number of characters read + std::size_t chars_read = 0; + + /// whether we can assume little endianness + const bool is_little_endian = little_endianness(); + + /// the SAX parser + json_sax_t* sax = nullptr; +}; +} // namespace detail +} // namespace nlohmann + +// #include + +// #include + +// #include + + +#include // isfinite +#include // uint8_t +#include // function +#include // string +#include // move +#include // vector + +// #include + +// #include + +// #include + +// #include + +// #include + +// #include + +// #include + + +namespace nlohmann +{ +namespace detail +{ +//////////// +// parser // +//////////// + +enum class parse_event_t : std::uint8_t +{ + /// the parser read `{` and started to process a JSON object + object_start, + /// the parser read `}` and finished processing a JSON object + object_end, + /// the parser read `[` and started to process a JSON array + array_start, + /// the parser read `]` and finished processing a JSON array + array_end, + /// the parser read a key of a value in an object + key, + /// the parser finished reading a JSON value + value +}; + +template +using parser_callback_t = + std::function; + +/*! +@brief syntax analysis + +This class implements a recursive descent parser. +*/ +template +class parser +{ + using number_integer_t = typename BasicJsonType::number_integer_t; + using number_unsigned_t = typename BasicJsonType::number_unsigned_t; + using number_float_t = typename BasicJsonType::number_float_t; + using string_t = typename BasicJsonType::string_t; + using lexer_t = lexer; + using token_type = typename lexer_t::token_type; + + public: + /// a parser reading from an input adapter + explicit parser(InputAdapterType&& adapter, + const parser_callback_t cb = nullptr, + const bool allow_exceptions_ = true, + const bool skip_comments = false) + : callback(cb) + , m_lexer(std::move(adapter), skip_comments) + , allow_exceptions(allow_exceptions_) + { + // read first token + get_token(); + } + + /*! + @brief public parser interface + + @param[in] strict whether to expect the last token to be EOF + @param[in,out] result parsed JSON value + + @throw parse_error.101 in case of an unexpected token + @throw parse_error.102 if to_unicode fails or surrogate error + @throw parse_error.103 if to_unicode fails + */ + void parse(const bool strict, BasicJsonType& result) + { + if (callback) + { + json_sax_dom_callback_parser sdp(result, callback, allow_exceptions); + sax_parse_internal(&sdp); + + // in strict mode, input must be completely read + if (strict && (get_token() != token_type::end_of_input)) + { + sdp.parse_error(m_lexer.get_position(), + m_lexer.get_token_string(), + parse_error::create(101, m_lexer.get_position(), + exception_message(token_type::end_of_input, "value"), BasicJsonType())); + } + + // in case of an error, return discarded value + if (sdp.is_errored()) + { + result = value_t::discarded; + return; + } + + // set top-level value to null if it was discarded by the callback + // function + if (result.is_discarded()) + { + result = nullptr; + } + } + else + { + json_sax_dom_parser sdp(result, allow_exceptions); + sax_parse_internal(&sdp); + + // in strict mode, input must be completely read + if (strict && (get_token() != token_type::end_of_input)) + { + sdp.parse_error(m_lexer.get_position(), + m_lexer.get_token_string(), + parse_error::create(101, m_lexer.get_position(), exception_message(token_type::end_of_input, "value"), BasicJsonType())); + } + + // in case of an error, return discarded value + if (sdp.is_errored()) + { + result = value_t::discarded; + return; + } + } + + result.assert_invariant(); + } + + /*! + @brief public accept interface + + @param[in] strict whether to expect the last token to be EOF + @return whether the input is a proper JSON text + */ + bool accept(const bool strict = true) + { + json_sax_acceptor sax_acceptor; + return sax_parse(&sax_acceptor, strict); + } + + template + JSON_HEDLEY_NON_NULL(2) + bool sax_parse(SAX* sax, const bool strict = true) + { + (void)detail::is_sax_static_asserts {}; + const bool result = sax_parse_internal(sax); + + // strict mode: next byte must be EOF + if (result && strict && (get_token() != token_type::end_of_input)) + { + return sax->parse_error(m_lexer.get_position(), + m_lexer.get_token_string(), + parse_error::create(101, m_lexer.get_position(), exception_message(token_type::end_of_input, "value"), BasicJsonType())); + } + + return result; + } + + private: + template + JSON_HEDLEY_NON_NULL(2) + bool sax_parse_internal(SAX* sax) + { + // stack to remember the hierarchy of structured values we are parsing + // true = array; false = object + std::vector states; + // value to avoid a goto (see comment where set to true) + bool skip_to_state_evaluation = false; + + while (true) + { + if (!skip_to_state_evaluation) + { + // invariant: get_token() was called before each iteration + switch (last_token) + { + case token_type::begin_object: + { + if (JSON_HEDLEY_UNLIKELY(!sax->start_object(static_cast(-1)))) + { + return false; + } + + // closing } -> we are done + if (get_token() == token_type::end_object) + { + if (JSON_HEDLEY_UNLIKELY(!sax->end_object())) + { + return false; + } + break; + } + + // parse key + if (JSON_HEDLEY_UNLIKELY(last_token != token_type::value_string)) + { + return sax->parse_error(m_lexer.get_position(), + m_lexer.get_token_string(), + parse_error::create(101, m_lexer.get_position(), exception_message(token_type::value_string, "object key"), BasicJsonType())); + } + if (JSON_HEDLEY_UNLIKELY(!sax->key(m_lexer.get_string()))) + { + return false; + } + + // parse separator (:) + if (JSON_HEDLEY_UNLIKELY(get_token() != token_type::name_separator)) + { + return sax->parse_error(m_lexer.get_position(), + m_lexer.get_token_string(), + parse_error::create(101, m_lexer.get_position(), exception_message(token_type::name_separator, "object separator"), BasicJsonType())); + } + + // remember we are now inside an object + states.push_back(false); + + // parse values + get_token(); + continue; + } + + case token_type::begin_array: + { + if (JSON_HEDLEY_UNLIKELY(!sax->start_array(static_cast(-1)))) + { + return false; + } + + // closing ] -> we are done + if (get_token() == token_type::end_array) + { + if (JSON_HEDLEY_UNLIKELY(!sax->end_array())) + { + return false; + } + break; + } + + // remember we are now inside an array + states.push_back(true); + + // parse values (no need to call get_token) + continue; + } + + case token_type::value_float: + { + const auto res = m_lexer.get_number_float(); + + if (JSON_HEDLEY_UNLIKELY(!std::isfinite(res))) + { + return sax->parse_error(m_lexer.get_position(), + m_lexer.get_token_string(), + out_of_range::create(406, "number overflow parsing '" + m_lexer.get_token_string() + "'", BasicJsonType())); + } + + if (JSON_HEDLEY_UNLIKELY(!sax->number_float(res, m_lexer.get_string()))) + { + return false; + } + + break; + } + + case token_type::literal_false: + { + if (JSON_HEDLEY_UNLIKELY(!sax->boolean(false))) + { + return false; + } + break; + } + + case token_type::literal_null: + { + if (JSON_HEDLEY_UNLIKELY(!sax->null())) + { + return false; + } + break; + } + + case token_type::literal_true: + { + if (JSON_HEDLEY_UNLIKELY(!sax->boolean(true))) + { + return false; + } + break; + } + + case token_type::value_integer: + { + if (JSON_HEDLEY_UNLIKELY(!sax->number_integer(m_lexer.get_number_integer()))) + { + return false; + } + break; + } + + case token_type::value_string: + { + if (JSON_HEDLEY_UNLIKELY(!sax->string(m_lexer.get_string()))) + { + return false; + } + break; + } + + case token_type::value_unsigned: + { + if (JSON_HEDLEY_UNLIKELY(!sax->number_unsigned(m_lexer.get_number_unsigned()))) + { + return false; + } + break; + } + + case token_type::parse_error: + { + // using "uninitialized" to avoid "expected" message + return sax->parse_error(m_lexer.get_position(), + m_lexer.get_token_string(), + parse_error::create(101, m_lexer.get_position(), exception_message(token_type::uninitialized, "value"), BasicJsonType())); + } + + case token_type::uninitialized: + case token_type::end_array: + case token_type::end_object: + case token_type::name_separator: + case token_type::value_separator: + case token_type::end_of_input: + case token_type::literal_or_value: + default: // the last token was unexpected + { + return sax->parse_error(m_lexer.get_position(), + m_lexer.get_token_string(), + parse_error::create(101, m_lexer.get_position(), exception_message(token_type::literal_or_value, "value"), BasicJsonType())); + } + } + } + else + { + skip_to_state_evaluation = false; + } + + // we reached this line after we successfully parsed a value + if (states.empty()) + { + // empty stack: we reached the end of the hierarchy: done + return true; + } + + if (states.back()) // array + { + // comma -> next value + if (get_token() == token_type::value_separator) + { + // parse a new value + get_token(); + continue; + } + + // closing ] + if (JSON_HEDLEY_LIKELY(last_token == token_type::end_array)) + { + if (JSON_HEDLEY_UNLIKELY(!sax->end_array())) + { + return false; + } + + // We are done with this array. Before we can parse a + // new value, we need to evaluate the new state first. + // By setting skip_to_state_evaluation to false, we + // are effectively jumping to the beginning of this if. + JSON_ASSERT(!states.empty()); + states.pop_back(); + skip_to_state_evaluation = true; + continue; + } + + return sax->parse_error(m_lexer.get_position(), + m_lexer.get_token_string(), + parse_error::create(101, m_lexer.get_position(), exception_message(token_type::end_array, "array"), BasicJsonType())); + } + + // states.back() is false -> object + + // comma -> next value + if (get_token() == token_type::value_separator) + { + // parse key + if (JSON_HEDLEY_UNLIKELY(get_token() != token_type::value_string)) + { + return sax->parse_error(m_lexer.get_position(), + m_lexer.get_token_string(), + parse_error::create(101, m_lexer.get_position(), exception_message(token_type::value_string, "object key"), BasicJsonType())); + } + + if (JSON_HEDLEY_UNLIKELY(!sax->key(m_lexer.get_string()))) + { + return false; + } + + // parse separator (:) + if (JSON_HEDLEY_UNLIKELY(get_token() != token_type::name_separator)) + { + return sax->parse_error(m_lexer.get_position(), + m_lexer.get_token_string(), + parse_error::create(101, m_lexer.get_position(), exception_message(token_type::name_separator, "object separator"), BasicJsonType())); + } + + // parse values + get_token(); + continue; + } + + // closing } + if (JSON_HEDLEY_LIKELY(last_token == token_type::end_object)) + { + if (JSON_HEDLEY_UNLIKELY(!sax->end_object())) + { + return false; + } + + // We are done with this object. Before we can parse a + // new value, we need to evaluate the new state first. + // By setting skip_to_state_evaluation to false, we + // are effectively jumping to the beginning of this if. + JSON_ASSERT(!states.empty()); + states.pop_back(); + skip_to_state_evaluation = true; + continue; + } + + return sax->parse_error(m_lexer.get_position(), + m_lexer.get_token_string(), + parse_error::create(101, m_lexer.get_position(), exception_message(token_type::end_object, "object"), BasicJsonType())); + } + } + + /// get next token from lexer + token_type get_token() + { + return last_token = m_lexer.scan(); + } + + std::string exception_message(const token_type expected, const std::string& context) + { + std::string error_msg = "syntax error "; + + if (!context.empty()) + { + error_msg += "while parsing " + context + " "; + } + + error_msg += "- "; + + if (last_token == token_type::parse_error) + { + error_msg += std::string(m_lexer.get_error_message()) + "; last read: '" + + m_lexer.get_token_string() + "'"; + } + else + { + error_msg += "unexpected " + std::string(lexer_t::token_type_name(last_token)); + } + + if (expected != token_type::uninitialized) + { + error_msg += "; expected " + std::string(lexer_t::token_type_name(expected)); + } + + return error_msg; + } + + private: + /// callback function + const parser_callback_t callback = nullptr; + /// the type of the last read token + token_type last_token = token_type::uninitialized; + /// the lexer + lexer_t m_lexer; + /// whether to throw exceptions in case of errors + const bool allow_exceptions = true; +}; + +} // namespace detail +} // namespace nlohmann + +// #include + + +// #include + + +#include // ptrdiff_t +#include // numeric_limits + +// #include + + +namespace nlohmann +{ +namespace detail +{ +/* +@brief an iterator for primitive JSON types + +This class models an iterator for primitive JSON types (boolean, number, +string). It's only purpose is to allow the iterator/const_iterator classes +to "iterate" over primitive values. Internally, the iterator is modeled by +a `difference_type` variable. Value begin_value (`0`) models the begin, +end_value (`1`) models past the end. +*/ +class primitive_iterator_t +{ + private: + using difference_type = std::ptrdiff_t; + static constexpr difference_type begin_value = 0; + static constexpr difference_type end_value = begin_value + 1; + + JSON_PRIVATE_UNLESS_TESTED: + /// iterator as signed integer type + difference_type m_it = (std::numeric_limits::min)(); + + public: + constexpr difference_type get_value() const noexcept + { + return m_it; + } + + /// set iterator to a defined beginning + void set_begin() noexcept + { + m_it = begin_value; + } + + /// set iterator to a defined past the end + void set_end() noexcept + { + m_it = end_value; + } + + /// return whether the iterator can be dereferenced + constexpr bool is_begin() const noexcept + { + return m_it == begin_value; + } + + /// return whether the iterator is at end + constexpr bool is_end() const noexcept + { + return m_it == end_value; + } + + friend constexpr bool operator==(primitive_iterator_t lhs, primitive_iterator_t rhs) noexcept + { + return lhs.m_it == rhs.m_it; + } + + friend constexpr bool operator<(primitive_iterator_t lhs, primitive_iterator_t rhs) noexcept + { + return lhs.m_it < rhs.m_it; + } + + primitive_iterator_t operator+(difference_type n) noexcept + { + auto result = *this; + result += n; + return result; + } + + friend constexpr difference_type operator-(primitive_iterator_t lhs, primitive_iterator_t rhs) noexcept + { + return lhs.m_it - rhs.m_it; + } + + primitive_iterator_t& operator++() noexcept + { + ++m_it; + return *this; + } + + primitive_iterator_t const operator++(int) noexcept // NOLINT(readability-const-return-type) + { + auto result = *this; + ++m_it; + return result; + } + + primitive_iterator_t& operator--() noexcept + { + --m_it; + return *this; + } + + primitive_iterator_t const operator--(int) noexcept // NOLINT(readability-const-return-type) + { + auto result = *this; + --m_it; + return result; + } + + primitive_iterator_t& operator+=(difference_type n) noexcept + { + m_it += n; + return *this; + } + + primitive_iterator_t& operator-=(difference_type n) noexcept + { + m_it -= n; + return *this; + } +}; +} // namespace detail +} // namespace nlohmann + + +namespace nlohmann +{ +namespace detail +{ +/*! +@brief an iterator value + +@note This structure could easily be a union, but MSVC currently does not allow +unions members with complex constructors, see https://github.com/nlohmann/json/pull/105. +*/ +template struct internal_iterator +{ + /// iterator for JSON objects + typename BasicJsonType::object_t::iterator object_iterator {}; + /// iterator for JSON arrays + typename BasicJsonType::array_t::iterator array_iterator {}; + /// generic iterator for all other types + primitive_iterator_t primitive_iterator {}; +}; +} // namespace detail +} // namespace nlohmann + +// #include + + +#include // iterator, random_access_iterator_tag, bidirectional_iterator_tag, advance, next +#include // conditional, is_const, remove_const + +// #include + +// #include + +// #include + +// #include + +// #include + +// #include + +// #include + + +namespace nlohmann +{ +namespace detail +{ +// forward declare, to be able to friend it later on +template class iteration_proxy; +template class iteration_proxy_value; + +/*! +@brief a template for a bidirectional iterator for the @ref basic_json class +This class implements a both iterators (iterator and const_iterator) for the +@ref basic_json class. +@note An iterator is called *initialized* when a pointer to a JSON value has + been set (e.g., by a constructor or a copy assignment). If the iterator is + default-constructed, it is *uninitialized* and most methods are undefined. + **The library uses assertions to detect calls on uninitialized iterators.** +@requirement The class satisfies the following concept requirements: +- +[BidirectionalIterator](https://en.cppreference.com/w/cpp/named_req/BidirectionalIterator): + The iterator that can be moved can be moved in both directions (i.e. + incremented and decremented). +@since version 1.0.0, simplified in version 2.0.9, change to bidirectional + iterators in version 3.0.0 (see https://github.com/nlohmann/json/issues/593) +*/ +template +class iter_impl // NOLINT(cppcoreguidelines-special-member-functions,hicpp-special-member-functions) +{ + /// the iterator with BasicJsonType of different const-ness + using other_iter_impl = iter_impl::value, typename std::remove_const::type, const BasicJsonType>::type>; + /// allow basic_json to access private members + friend other_iter_impl; + friend BasicJsonType; + friend iteration_proxy; + friend iteration_proxy_value; + + using object_t = typename BasicJsonType::object_t; + using array_t = typename BasicJsonType::array_t; + // make sure BasicJsonType is basic_json or const basic_json + static_assert(is_basic_json::type>::value, + "iter_impl only accepts (const) basic_json"); + + public: + + /// The std::iterator class template (used as a base class to provide typedefs) is deprecated in C++17. + /// The C++ Standard has never required user-defined iterators to derive from std::iterator. + /// A user-defined iterator should provide publicly accessible typedefs named + /// iterator_category, value_type, difference_type, pointer, and reference. + /// Note that value_type is required to be non-const, even for constant iterators. + using iterator_category = std::bidirectional_iterator_tag; + + /// the type of the values when the iterator is dereferenced + using value_type = typename BasicJsonType::value_type; + /// a type to represent differences between iterators + using difference_type = typename BasicJsonType::difference_type; + /// defines a pointer to the type iterated over (value_type) + using pointer = typename std::conditional::value, + typename BasicJsonType::const_pointer, + typename BasicJsonType::pointer>::type; + /// defines a reference to the type iterated over (value_type) + using reference = + typename std::conditional::value, + typename BasicJsonType::const_reference, + typename BasicJsonType::reference>::type; + + iter_impl() = default; + ~iter_impl() = default; + iter_impl(iter_impl&&) noexcept = default; + iter_impl& operator=(iter_impl&&) noexcept = default; + + /*! + @brief constructor for a given JSON instance + @param[in] object pointer to a JSON object for this iterator + @pre object != nullptr + @post The iterator is initialized; i.e. `m_object != nullptr`. + */ + explicit iter_impl(pointer object) noexcept : m_object(object) + { + JSON_ASSERT(m_object != nullptr); + + switch (m_object->m_type) + { + case value_t::object: + { + m_it.object_iterator = typename object_t::iterator(); + break; + } + + case value_t::array: + { + m_it.array_iterator = typename array_t::iterator(); + break; + } + + case value_t::null: + case value_t::string: + case value_t::boolean: + case value_t::number_integer: + case value_t::number_unsigned: + case value_t::number_float: + case value_t::binary: + case value_t::discarded: + default: + { + m_it.primitive_iterator = primitive_iterator_t(); + break; + } + } + } + + /*! + @note The conventional copy constructor and copy assignment are implicitly + defined. Combined with the following converting constructor and + assignment, they support: (1) copy from iterator to iterator, (2) + copy from const iterator to const iterator, and (3) conversion from + iterator to const iterator. However conversion from const iterator + to iterator is not defined. + */ + + /*! + @brief const copy constructor + @param[in] other const iterator to copy from + @note This copy constructor had to be defined explicitly to circumvent a bug + occurring on msvc v19.0 compiler (VS 2015) debug build. For more + information refer to: https://github.com/nlohmann/json/issues/1608 + */ + iter_impl(const iter_impl& other) noexcept + : m_object(other.m_object), m_it(other.m_it) + {} + + /*! + @brief converting assignment + @param[in] other const iterator to copy from + @return const/non-const iterator + @note It is not checked whether @a other is initialized. + */ + iter_impl& operator=(const iter_impl& other) noexcept + { + if (&other != this) + { + m_object = other.m_object; + m_it = other.m_it; + } + return *this; + } + + /*! + @brief converting constructor + @param[in] other non-const iterator to copy from + @note It is not checked whether @a other is initialized. + */ + iter_impl(const iter_impl::type>& other) noexcept + : m_object(other.m_object), m_it(other.m_it) + {} + + /*! + @brief converting assignment + @param[in] other non-const iterator to copy from + @return const/non-const iterator + @note It is not checked whether @a other is initialized. + */ + iter_impl& operator=(const iter_impl::type>& other) noexcept // NOLINT(cert-oop54-cpp) + { + m_object = other.m_object; + m_it = other.m_it; + return *this; + } + + JSON_PRIVATE_UNLESS_TESTED: + /*! + @brief set the iterator to the first value + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ + void set_begin() noexcept + { + JSON_ASSERT(m_object != nullptr); + + switch (m_object->m_type) + { + case value_t::object: + { + m_it.object_iterator = m_object->m_value.object->begin(); + break; + } + + case value_t::array: + { + m_it.array_iterator = m_object->m_value.array->begin(); + break; + } + + case value_t::null: + { + // set to end so begin()==end() is true: null is empty + m_it.primitive_iterator.set_end(); + break; + } + + case value_t::string: + case value_t::boolean: + case value_t::number_integer: + case value_t::number_unsigned: + case value_t::number_float: + case value_t::binary: + case value_t::discarded: + default: + { + m_it.primitive_iterator.set_begin(); + break; + } + } + } + + /*! + @brief set the iterator past the last value + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ + void set_end() noexcept + { + JSON_ASSERT(m_object != nullptr); + + switch (m_object->m_type) + { + case value_t::object: + { + m_it.object_iterator = m_object->m_value.object->end(); + break; + } + + case value_t::array: + { + m_it.array_iterator = m_object->m_value.array->end(); + break; + } + + case value_t::null: + case value_t::string: + case value_t::boolean: + case value_t::number_integer: + case value_t::number_unsigned: + case value_t::number_float: + case value_t::binary: + case value_t::discarded: + default: + { + m_it.primitive_iterator.set_end(); + break; + } + } + } + + public: + /*! + @brief return a reference to the value pointed to by the iterator + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ + reference operator*() const + { + JSON_ASSERT(m_object != nullptr); + + switch (m_object->m_type) + { + case value_t::object: + { + JSON_ASSERT(m_it.object_iterator != m_object->m_value.object->end()); + return m_it.object_iterator->second; + } + + case value_t::array: + { + JSON_ASSERT(m_it.array_iterator != m_object->m_value.array->end()); + return *m_it.array_iterator; + } + + case value_t::null: + JSON_THROW(invalid_iterator::create(214, "cannot get value", *m_object)); + + case value_t::string: + case value_t::boolean: + case value_t::number_integer: + case value_t::number_unsigned: + case value_t::number_float: + case value_t::binary: + case value_t::discarded: + default: + { + if (JSON_HEDLEY_LIKELY(m_it.primitive_iterator.is_begin())) + { + return *m_object; + } + + JSON_THROW(invalid_iterator::create(214, "cannot get value", *m_object)); + } + } + } + + /*! + @brief dereference the iterator + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ + pointer operator->() const + { + JSON_ASSERT(m_object != nullptr); + + switch (m_object->m_type) + { + case value_t::object: + { + JSON_ASSERT(m_it.object_iterator != m_object->m_value.object->end()); + return &(m_it.object_iterator->second); + } + + case value_t::array: + { + JSON_ASSERT(m_it.array_iterator != m_object->m_value.array->end()); + return &*m_it.array_iterator; + } + + case value_t::null: + case value_t::string: + case value_t::boolean: + case value_t::number_integer: + case value_t::number_unsigned: + case value_t::number_float: + case value_t::binary: + case value_t::discarded: + default: + { + if (JSON_HEDLEY_LIKELY(m_it.primitive_iterator.is_begin())) + { + return m_object; + } + + JSON_THROW(invalid_iterator::create(214, "cannot get value", *m_object)); + } + } + } + + /*! + @brief post-increment (it++) + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ + iter_impl const operator++(int) // NOLINT(readability-const-return-type) + { + auto result = *this; + ++(*this); + return result; + } + + /*! + @brief pre-increment (++it) + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ + iter_impl& operator++() + { + JSON_ASSERT(m_object != nullptr); + + switch (m_object->m_type) + { + case value_t::object: + { + std::advance(m_it.object_iterator, 1); + break; + } + + case value_t::array: + { + std::advance(m_it.array_iterator, 1); + break; + } + + case value_t::null: + case value_t::string: + case value_t::boolean: + case value_t::number_integer: + case value_t::number_unsigned: + case value_t::number_float: + case value_t::binary: + case value_t::discarded: + default: + { + ++m_it.primitive_iterator; + break; + } + } + + return *this; + } + + /*! + @brief post-decrement (it--) + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ + iter_impl const operator--(int) // NOLINT(readability-const-return-type) + { + auto result = *this; + --(*this); + return result; + } + + /*! + @brief pre-decrement (--it) + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ + iter_impl& operator--() + { + JSON_ASSERT(m_object != nullptr); + + switch (m_object->m_type) + { + case value_t::object: + { + std::advance(m_it.object_iterator, -1); + break; + } + + case value_t::array: + { + std::advance(m_it.array_iterator, -1); + break; + } + + case value_t::null: + case value_t::string: + case value_t::boolean: + case value_t::number_integer: + case value_t::number_unsigned: + case value_t::number_float: + case value_t::binary: + case value_t::discarded: + default: + { + --m_it.primitive_iterator; + break; + } + } + + return *this; + } + + /*! + @brief comparison: equal + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ + template < typename IterImpl, detail::enable_if_t < (std::is_same::value || std::is_same::value), std::nullptr_t > = nullptr > + bool operator==(const IterImpl& other) const + { + // if objects are not the same, the comparison is undefined + if (JSON_HEDLEY_UNLIKELY(m_object != other.m_object)) + { + JSON_THROW(invalid_iterator::create(212, "cannot compare iterators of different containers", *m_object)); + } + + JSON_ASSERT(m_object != nullptr); + + switch (m_object->m_type) + { + case value_t::object: + return (m_it.object_iterator == other.m_it.object_iterator); + + case value_t::array: + return (m_it.array_iterator == other.m_it.array_iterator); + + case value_t::null: + case value_t::string: + case value_t::boolean: + case value_t::number_integer: + case value_t::number_unsigned: + case value_t::number_float: + case value_t::binary: + case value_t::discarded: + default: + return (m_it.primitive_iterator == other.m_it.primitive_iterator); + } + } + + /*! + @brief comparison: not equal + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ + template < typename IterImpl, detail::enable_if_t < (std::is_same::value || std::is_same::value), std::nullptr_t > = nullptr > + bool operator!=(const IterImpl& other) const + { + return !operator==(other); + } + + /*! + @brief comparison: smaller + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ + bool operator<(const iter_impl& other) const + { + // if objects are not the same, the comparison is undefined + if (JSON_HEDLEY_UNLIKELY(m_object != other.m_object)) + { + JSON_THROW(invalid_iterator::create(212, "cannot compare iterators of different containers", *m_object)); + } + + JSON_ASSERT(m_object != nullptr); + + switch (m_object->m_type) + { + case value_t::object: + JSON_THROW(invalid_iterator::create(213, "cannot compare order of object iterators", *m_object)); + + case value_t::array: + return (m_it.array_iterator < other.m_it.array_iterator); + + case value_t::null: + case value_t::string: + case value_t::boolean: + case value_t::number_integer: + case value_t::number_unsigned: + case value_t::number_float: + case value_t::binary: + case value_t::discarded: + default: + return (m_it.primitive_iterator < other.m_it.primitive_iterator); + } + } + + /*! + @brief comparison: less than or equal + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ + bool operator<=(const iter_impl& other) const + { + return !other.operator < (*this); + } + + /*! + @brief comparison: greater than + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ + bool operator>(const iter_impl& other) const + { + return !operator<=(other); + } + + /*! + @brief comparison: greater than or equal + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ + bool operator>=(const iter_impl& other) const + { + return !operator<(other); + } + + /*! + @brief add to iterator + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ + iter_impl& operator+=(difference_type i) + { + JSON_ASSERT(m_object != nullptr); + + switch (m_object->m_type) + { + case value_t::object: + JSON_THROW(invalid_iterator::create(209, "cannot use offsets with object iterators", *m_object)); + + case value_t::array: + { + std::advance(m_it.array_iterator, i); + break; + } + + case value_t::null: + case value_t::string: + case value_t::boolean: + case value_t::number_integer: + case value_t::number_unsigned: + case value_t::number_float: + case value_t::binary: + case value_t::discarded: + default: + { + m_it.primitive_iterator += i; + break; + } + } + + return *this; + } + + /*! + @brief subtract from iterator + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ + iter_impl& operator-=(difference_type i) + { + return operator+=(-i); + } + + /*! + @brief add to iterator + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ + iter_impl operator+(difference_type i) const + { + auto result = *this; + result += i; + return result; + } + + /*! + @brief addition of distance and iterator + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ + friend iter_impl operator+(difference_type i, const iter_impl& it) + { + auto result = it; + result += i; + return result; + } + + /*! + @brief subtract from iterator + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ + iter_impl operator-(difference_type i) const + { + auto result = *this; + result -= i; + return result; + } + + /*! + @brief return difference + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ + difference_type operator-(const iter_impl& other) const + { + JSON_ASSERT(m_object != nullptr); + + switch (m_object->m_type) + { + case value_t::object: + JSON_THROW(invalid_iterator::create(209, "cannot use offsets with object iterators", *m_object)); + + case value_t::array: + return m_it.array_iterator - other.m_it.array_iterator; + + case value_t::null: + case value_t::string: + case value_t::boolean: + case value_t::number_integer: + case value_t::number_unsigned: + case value_t::number_float: + case value_t::binary: + case value_t::discarded: + default: + return m_it.primitive_iterator - other.m_it.primitive_iterator; + } + } + + /*! + @brief access to successor + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ + reference operator[](difference_type n) const + { + JSON_ASSERT(m_object != nullptr); + + switch (m_object->m_type) + { + case value_t::object: + JSON_THROW(invalid_iterator::create(208, "cannot use operator[] for object iterators", *m_object)); + + case value_t::array: + return *std::next(m_it.array_iterator, n); + + case value_t::null: + JSON_THROW(invalid_iterator::create(214, "cannot get value", *m_object)); + + case value_t::string: + case value_t::boolean: + case value_t::number_integer: + case value_t::number_unsigned: + case value_t::number_float: + case value_t::binary: + case value_t::discarded: + default: + { + if (JSON_HEDLEY_LIKELY(m_it.primitive_iterator.get_value() == -n)) + { + return *m_object; + } + + JSON_THROW(invalid_iterator::create(214, "cannot get value", *m_object)); + } + } + } + + /*! + @brief return the key of an object iterator + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ + const typename object_t::key_type& key() const + { + JSON_ASSERT(m_object != nullptr); + + if (JSON_HEDLEY_LIKELY(m_object->is_object())) + { + return m_it.object_iterator->first; + } + + JSON_THROW(invalid_iterator::create(207, "cannot use key() for non-object iterators", *m_object)); + } + + /*! + @brief return the value of an iterator + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ + reference value() const + { + return operator*(); + } + + JSON_PRIVATE_UNLESS_TESTED: + /// associated JSON instance + pointer m_object = nullptr; + /// the actual iterator of the associated instance + internal_iterator::type> m_it {}; +}; +} // namespace detail +} // namespace nlohmann + +// #include + +// #include + + +#include // ptrdiff_t +#include // reverse_iterator +#include // declval + +namespace nlohmann +{ +namespace detail +{ +////////////////////// +// reverse_iterator // +////////////////////// + +/*! +@brief a template for a reverse iterator class + +@tparam Base the base iterator type to reverse. Valid types are @ref +iterator (to create @ref reverse_iterator) and @ref const_iterator (to +create @ref const_reverse_iterator). + +@requirement The class satisfies the following concept requirements: +- +[BidirectionalIterator](https://en.cppreference.com/w/cpp/named_req/BidirectionalIterator): + The iterator that can be moved can be moved in both directions (i.e. + incremented and decremented). +- [OutputIterator](https://en.cppreference.com/w/cpp/named_req/OutputIterator): + It is possible to write to the pointed-to element (only if @a Base is + @ref iterator). + +@since version 1.0.0 +*/ +template +class json_reverse_iterator : public std::reverse_iterator +{ + public: + using difference_type = std::ptrdiff_t; + /// shortcut to the reverse iterator adapter + using base_iterator = std::reverse_iterator; + /// the reference type for the pointed-to element + using reference = typename Base::reference; + + /// create reverse iterator from iterator + explicit json_reverse_iterator(const typename base_iterator::iterator_type& it) noexcept + : base_iterator(it) {} + + /// create reverse iterator from base class + explicit json_reverse_iterator(const base_iterator& it) noexcept : base_iterator(it) {} + + /// post-increment (it++) + json_reverse_iterator const operator++(int) // NOLINT(readability-const-return-type) + { + return static_cast(base_iterator::operator++(1)); + } + + /// pre-increment (++it) + json_reverse_iterator& operator++() + { + return static_cast(base_iterator::operator++()); + } + + /// post-decrement (it--) + json_reverse_iterator const operator--(int) // NOLINT(readability-const-return-type) + { + return static_cast(base_iterator::operator--(1)); + } + + /// pre-decrement (--it) + json_reverse_iterator& operator--() + { + return static_cast(base_iterator::operator--()); + } + + /// add to iterator + json_reverse_iterator& operator+=(difference_type i) + { + return static_cast(base_iterator::operator+=(i)); + } + + /// add to iterator + json_reverse_iterator operator+(difference_type i) const + { + return static_cast(base_iterator::operator+(i)); + } + + /// subtract from iterator + json_reverse_iterator operator-(difference_type i) const + { + return static_cast(base_iterator::operator-(i)); + } + + /// return difference + difference_type operator-(const json_reverse_iterator& other) const + { + return base_iterator(*this) - base_iterator(other); + } + + /// access to successor + reference operator[](difference_type n) const + { + return *(this->operator+(n)); + } + + /// return the key of an object iterator + auto key() const -> decltype(std::declval().key()) + { + auto it = --this->base(); + return it.key(); + } + + /// return the value of an iterator + reference value() const + { + auto it = --this->base(); + return it.operator * (); + } +}; +} // namespace detail +} // namespace nlohmann + +// #include + +// #include + + +#include // all_of +#include // isdigit +#include // max +#include // accumulate +#include // string +#include // move +#include // vector + +// #include + +// #include + +// #include + +// #include + + +namespace nlohmann +{ + +/// @brief JSON Pointer defines a string syntax for identifying a specific value within a JSON document +/// @sa https://json.nlohmann.me/api/json_pointer/ +template +class json_pointer +{ + // allow basic_json to access private members + NLOHMANN_BASIC_JSON_TPL_DECLARATION + friend class basic_json; + + public: + /// @brief create JSON pointer + /// @sa https://json.nlohmann.me/api/json_pointer/json_pointer/ + explicit json_pointer(const std::string& s = "") + : reference_tokens(split(s)) + {} + + /// @brief return a string representation of the JSON pointer + /// @sa https://json.nlohmann.me/api/json_pointer/to_string/ + std::string to_string() const + { + return std::accumulate(reference_tokens.begin(), reference_tokens.end(), + std::string{}, + [](const std::string & a, const std::string & b) + { + return a + "/" + detail::escape(b); + }); + } + + /// @brief return a string representation of the JSON pointer + /// @sa https://json.nlohmann.me/api/json_pointer/operator_string/ + operator std::string() const + { + return to_string(); + } + + /// @brief append another JSON pointer at the end of this JSON pointer + /// @sa https://json.nlohmann.me/api/json_pointer/operator_slasheq/ + json_pointer& operator/=(const json_pointer& ptr) + { + reference_tokens.insert(reference_tokens.end(), + ptr.reference_tokens.begin(), + ptr.reference_tokens.end()); + return *this; + } + + /// @brief append an unescaped reference token at the end of this JSON pointer + /// @sa https://json.nlohmann.me/api/json_pointer/operator_slasheq/ + json_pointer& operator/=(std::string token) + { + push_back(std::move(token)); + return *this; + } + + /// @brief append an array index at the end of this JSON pointer + /// @sa https://json.nlohmann.me/api/json_pointer/operator_slasheq/ + json_pointer& operator/=(std::size_t array_idx) + { + return *this /= std::to_string(array_idx); + } + + /// @brief create a new JSON pointer by appending the right JSON pointer at the end of the left JSON pointer + /// @sa https://json.nlohmann.me/api/json_pointer/operator_slash/ + friend json_pointer operator/(const json_pointer& lhs, + const json_pointer& rhs) + { + return json_pointer(lhs) /= rhs; + } + + /// @brief create a new JSON pointer by appending the unescaped token at the end of the JSON pointer + /// @sa https://json.nlohmann.me/api/json_pointer/operator_slash/ + friend json_pointer operator/(const json_pointer& lhs, std::string token) // NOLINT(performance-unnecessary-value-param) + { + return json_pointer(lhs) /= std::move(token); + } + + /// @brief create a new JSON pointer by appending the array-index-token at the end of the JSON pointer + /// @sa https://json.nlohmann.me/api/json_pointer/operator_slash/ + friend json_pointer operator/(const json_pointer& lhs, std::size_t array_idx) + { + return json_pointer(lhs) /= array_idx; + } + + /// @brief returns the parent of this JSON pointer + /// @sa https://json.nlohmann.me/api/json_pointer/parent_pointer/ + json_pointer parent_pointer() const + { + if (empty()) + { + return *this; + } + + json_pointer res = *this; + res.pop_back(); + return res; + } + + /// @brief remove last reference token + /// @sa https://json.nlohmann.me/api/json_pointer/pop_back/ + void pop_back() + { + if (JSON_HEDLEY_UNLIKELY(empty())) + { + JSON_THROW(detail::out_of_range::create(405, "JSON pointer has no parent", BasicJsonType())); + } + + reference_tokens.pop_back(); + } + + /// @brief return last reference token + /// @sa https://json.nlohmann.me/api/json_pointer/back/ + const std::string& back() const + { + if (JSON_HEDLEY_UNLIKELY(empty())) + { + JSON_THROW(detail::out_of_range::create(405, "JSON pointer has no parent", BasicJsonType())); + } + + return reference_tokens.back(); + } + + /// @brief append an unescaped token at the end of the reference pointer + /// @sa https://json.nlohmann.me/api/json_pointer/push_back/ + void push_back(const std::string& token) + { + reference_tokens.push_back(token); + } + + /// @brief append an unescaped token at the end of the reference pointer + /// @sa https://json.nlohmann.me/api/json_pointer/push_back/ + void push_back(std::string&& token) + { + reference_tokens.push_back(std::move(token)); + } + + /// @brief return whether pointer points to the root document + /// @sa https://json.nlohmann.me/api/json_pointer/empty/ + bool empty() const noexcept + { + return reference_tokens.empty(); + } + + private: + /*! + @param[in] s reference token to be converted into an array index + + @return integer representation of @a s + + @throw parse_error.106 if an array index begins with '0' + @throw parse_error.109 if an array index begins not with a digit + @throw out_of_range.404 if string @a s could not be converted to an integer + @throw out_of_range.410 if an array index exceeds size_type + */ + static typename BasicJsonType::size_type array_index(const std::string& s) + { + using size_type = typename BasicJsonType::size_type; + + // error condition (cf. RFC 6901, Sect. 4) + if (JSON_HEDLEY_UNLIKELY(s.size() > 1 && s[0] == '0')) + { + JSON_THROW(detail::parse_error::create(106, 0, "array index '" + s + "' must not begin with '0'", BasicJsonType())); + } + + // error condition (cf. RFC 6901, Sect. 4) + if (JSON_HEDLEY_UNLIKELY(s.size() > 1 && !(s[0] >= '1' && s[0] <= '9'))) + { + JSON_THROW(detail::parse_error::create(109, 0, "array index '" + s + "' is not a number", BasicJsonType())); + } + + std::size_t processed_chars = 0; + unsigned long long res = 0; // NOLINT(runtime/int) + JSON_TRY + { + res = std::stoull(s, &processed_chars); + } + JSON_CATCH(std::out_of_range&) + { + JSON_THROW(detail::out_of_range::create(404, "unresolved reference token '" + s + "'", BasicJsonType())); + } + + // check if the string was completely read + if (JSON_HEDLEY_UNLIKELY(processed_chars != s.size())) + { + JSON_THROW(detail::out_of_range::create(404, "unresolved reference token '" + s + "'", BasicJsonType())); + } + + // only triggered on special platforms (like 32bit), see also + // https://github.com/nlohmann/json/pull/2203 + if (res >= static_cast((std::numeric_limits::max)())) // NOLINT(runtime/int) + { + JSON_THROW(detail::out_of_range::create(410, "array index " + s + " exceeds size_type", BasicJsonType())); // LCOV_EXCL_LINE + } + + return static_cast(res); + } + + JSON_PRIVATE_UNLESS_TESTED: + json_pointer top() const + { + if (JSON_HEDLEY_UNLIKELY(empty())) + { + JSON_THROW(detail::out_of_range::create(405, "JSON pointer has no parent", BasicJsonType())); + } + + json_pointer result = *this; + result.reference_tokens = {reference_tokens[0]}; + return result; + } + + private: + /*! + @brief create and return a reference to the pointed to value + + @complexity Linear in the number of reference tokens. + + @throw parse_error.109 if array index is not a number + @throw type_error.313 if value cannot be unflattened + */ + BasicJsonType& get_and_create(BasicJsonType& j) const + { + auto* result = &j; + + // in case no reference tokens exist, return a reference to the JSON value + // j which will be overwritten by a primitive value + for (const auto& reference_token : reference_tokens) + { + switch (result->type()) + { + case detail::value_t::null: + { + if (reference_token == "0") + { + // start a new array if reference token is 0 + result = &result->operator[](0); + } + else + { + // start a new object otherwise + result = &result->operator[](reference_token); + } + break; + } + + case detail::value_t::object: + { + // create an entry in the object + result = &result->operator[](reference_token); + break; + } + + case detail::value_t::array: + { + // create an entry in the array + result = &result->operator[](array_index(reference_token)); + break; + } + + /* + The following code is only reached if there exists a reference + token _and_ the current value is primitive. In this case, we have + an error situation, because primitive values may only occur as + single value; that is, with an empty list of reference tokens. + */ + case detail::value_t::string: + case detail::value_t::boolean: + case detail::value_t::number_integer: + case detail::value_t::number_unsigned: + case detail::value_t::number_float: + case detail::value_t::binary: + case detail::value_t::discarded: + default: + JSON_THROW(detail::type_error::create(313, "invalid value to unflatten", j)); + } + } + + return *result; + } + + /*! + @brief return a reference to the pointed to value + + @note This version does not throw if a value is not present, but tries to + create nested values instead. For instance, calling this function + with pointer `"/this/that"` on a null value is equivalent to calling + `operator[]("this").operator[]("that")` on that value, effectively + changing the null value to an object. + + @param[in] ptr a JSON value + + @return reference to the JSON value pointed to by the JSON pointer + + @complexity Linear in the length of the JSON pointer. + + @throw parse_error.106 if an array index begins with '0' + @throw parse_error.109 if an array index was not a number + @throw out_of_range.404 if the JSON pointer can not be resolved + */ + BasicJsonType& get_unchecked(BasicJsonType* ptr) const + { + for (const auto& reference_token : reference_tokens) + { + // convert null values to arrays or objects before continuing + if (ptr->is_null()) + { + // check if reference token is a number + const bool nums = + std::all_of(reference_token.begin(), reference_token.end(), + [](const unsigned char x) + { + return std::isdigit(x); + }); + + // change value to array for numbers or "-" or to object otherwise + *ptr = (nums || reference_token == "-") + ? detail::value_t::array + : detail::value_t::object; + } + + switch (ptr->type()) + { + case detail::value_t::object: + { + // use unchecked object access + ptr = &ptr->operator[](reference_token); + break; + } + + case detail::value_t::array: + { + if (reference_token == "-") + { + // explicitly treat "-" as index beyond the end + ptr = &ptr->operator[](ptr->m_value.array->size()); + } + else + { + // convert array index to number; unchecked access + ptr = &ptr->operator[](array_index(reference_token)); + } + break; + } + + case detail::value_t::null: + case detail::value_t::string: + case detail::value_t::boolean: + case detail::value_t::number_integer: + case detail::value_t::number_unsigned: + case detail::value_t::number_float: + case detail::value_t::binary: + case detail::value_t::discarded: + default: + JSON_THROW(detail::out_of_range::create(404, "unresolved reference token '" + reference_token + "'", *ptr)); + } + } + + return *ptr; + } + + /*! + @throw parse_error.106 if an array index begins with '0' + @throw parse_error.109 if an array index was not a number + @throw out_of_range.402 if the array index '-' is used + @throw out_of_range.404 if the JSON pointer can not be resolved + */ + BasicJsonType& get_checked(BasicJsonType* ptr) const + { + for (const auto& reference_token : reference_tokens) + { + switch (ptr->type()) + { + case detail::value_t::object: + { + // note: at performs range check + ptr = &ptr->at(reference_token); + break; + } + + case detail::value_t::array: + { + if (JSON_HEDLEY_UNLIKELY(reference_token == "-")) + { + // "-" always fails the range check + JSON_THROW(detail::out_of_range::create(402, + "array index '-' (" + std::to_string(ptr->m_value.array->size()) + + ") is out of range", *ptr)); + } + + // note: at performs range check + ptr = &ptr->at(array_index(reference_token)); + break; + } + + case detail::value_t::null: + case detail::value_t::string: + case detail::value_t::boolean: + case detail::value_t::number_integer: + case detail::value_t::number_unsigned: + case detail::value_t::number_float: + case detail::value_t::binary: + case detail::value_t::discarded: + default: + JSON_THROW(detail::out_of_range::create(404, "unresolved reference token '" + reference_token + "'", *ptr)); + } + } + + return *ptr; + } + + /*! + @brief return a const reference to the pointed to value + + @param[in] ptr a JSON value + + @return const reference to the JSON value pointed to by the JSON + pointer + + @throw parse_error.106 if an array index begins with '0' + @throw parse_error.109 if an array index was not a number + @throw out_of_range.402 if the array index '-' is used + @throw out_of_range.404 if the JSON pointer can not be resolved + */ + const BasicJsonType& get_unchecked(const BasicJsonType* ptr) const + { + for (const auto& reference_token : reference_tokens) + { + switch (ptr->type()) + { + case detail::value_t::object: + { + // use unchecked object access + ptr = &ptr->operator[](reference_token); + break; + } + + case detail::value_t::array: + { + if (JSON_HEDLEY_UNLIKELY(reference_token == "-")) + { + // "-" cannot be used for const access + JSON_THROW(detail::out_of_range::create(402, "array index '-' (" + std::to_string(ptr->m_value.array->size()) + ") is out of range", *ptr)); + } + + // use unchecked array access + ptr = &ptr->operator[](array_index(reference_token)); + break; + } + + case detail::value_t::null: + case detail::value_t::string: + case detail::value_t::boolean: + case detail::value_t::number_integer: + case detail::value_t::number_unsigned: + case detail::value_t::number_float: + case detail::value_t::binary: + case detail::value_t::discarded: + default: + JSON_THROW(detail::out_of_range::create(404, "unresolved reference token '" + reference_token + "'", *ptr)); + } + } + + return *ptr; + } + + /*! + @throw parse_error.106 if an array index begins with '0' + @throw parse_error.109 if an array index was not a number + @throw out_of_range.402 if the array index '-' is used + @throw out_of_range.404 if the JSON pointer can not be resolved + */ + const BasicJsonType& get_checked(const BasicJsonType* ptr) const + { + for (const auto& reference_token : reference_tokens) + { + switch (ptr->type()) + { + case detail::value_t::object: + { + // note: at performs range check + ptr = &ptr->at(reference_token); + break; + } + + case detail::value_t::array: + { + if (JSON_HEDLEY_UNLIKELY(reference_token == "-")) + { + // "-" always fails the range check + JSON_THROW(detail::out_of_range::create(402, + "array index '-' (" + std::to_string(ptr->m_value.array->size()) + + ") is out of range", *ptr)); + } + + // note: at performs range check + ptr = &ptr->at(array_index(reference_token)); + break; + } + + case detail::value_t::null: + case detail::value_t::string: + case detail::value_t::boolean: + case detail::value_t::number_integer: + case detail::value_t::number_unsigned: + case detail::value_t::number_float: + case detail::value_t::binary: + case detail::value_t::discarded: + default: + JSON_THROW(detail::out_of_range::create(404, "unresolved reference token '" + reference_token + "'", *ptr)); + } + } + + return *ptr; + } + + /*! + @throw parse_error.106 if an array index begins with '0' + @throw parse_error.109 if an array index was not a number + */ + bool contains(const BasicJsonType* ptr) const + { + for (const auto& reference_token : reference_tokens) + { + switch (ptr->type()) + { + case detail::value_t::object: + { + if (!ptr->contains(reference_token)) + { + // we did not find the key in the object + return false; + } + + ptr = &ptr->operator[](reference_token); + break; + } + + case detail::value_t::array: + { + if (JSON_HEDLEY_UNLIKELY(reference_token == "-")) + { + // "-" always fails the range check + return false; + } + if (JSON_HEDLEY_UNLIKELY(reference_token.size() == 1 && !("0" <= reference_token && reference_token <= "9"))) + { + // invalid char + return false; + } + if (JSON_HEDLEY_UNLIKELY(reference_token.size() > 1)) + { + if (JSON_HEDLEY_UNLIKELY(!('1' <= reference_token[0] && reference_token[0] <= '9'))) + { + // first char should be between '1' and '9' + return false; + } + for (std::size_t i = 1; i < reference_token.size(); i++) + { + if (JSON_HEDLEY_UNLIKELY(!('0' <= reference_token[i] && reference_token[i] <= '9'))) + { + // other char should be between '0' and '9' + return false; + } + } + } + + const auto idx = array_index(reference_token); + if (idx >= ptr->size()) + { + // index out of range + return false; + } + + ptr = &ptr->operator[](idx); + break; + } + + case detail::value_t::null: + case detail::value_t::string: + case detail::value_t::boolean: + case detail::value_t::number_integer: + case detail::value_t::number_unsigned: + case detail::value_t::number_float: + case detail::value_t::binary: + case detail::value_t::discarded: + default: + { + // we do not expect primitive values if there is still a + // reference token to process + return false; + } + } + } + + // no reference token left means we found a primitive value + return true; + } + + /*! + @brief split the string input to reference tokens + + @note This function is only called by the json_pointer constructor. + All exceptions below are documented there. + + @throw parse_error.107 if the pointer is not empty or begins with '/' + @throw parse_error.108 if character '~' is not followed by '0' or '1' + */ + static std::vector split(const std::string& reference_string) + { + std::vector result; + + // special case: empty reference string -> no reference tokens + if (reference_string.empty()) + { + return result; + } + + // check if nonempty reference string begins with slash + if (JSON_HEDLEY_UNLIKELY(reference_string[0] != '/')) + { + JSON_THROW(detail::parse_error::create(107, 1, "JSON pointer must be empty or begin with '/' - was: '" + reference_string + "'", BasicJsonType())); + } + + // extract the reference tokens: + // - slash: position of the last read slash (or end of string) + // - start: position after the previous slash + for ( + // search for the first slash after the first character + std::size_t slash = reference_string.find_first_of('/', 1), + // set the beginning of the first reference token + start = 1; + // we can stop if start == 0 (if slash == std::string::npos) + start != 0; + // set the beginning of the next reference token + // (will eventually be 0 if slash == std::string::npos) + start = (slash == std::string::npos) ? 0 : slash + 1, + // find next slash + slash = reference_string.find_first_of('/', start)) + { + // use the text between the beginning of the reference token + // (start) and the last slash (slash). + auto reference_token = reference_string.substr(start, slash - start); + + // check reference tokens are properly escaped + for (std::size_t pos = reference_token.find_first_of('~'); + pos != std::string::npos; + pos = reference_token.find_first_of('~', pos + 1)) + { + JSON_ASSERT(reference_token[pos] == '~'); + + // ~ must be followed by 0 or 1 + if (JSON_HEDLEY_UNLIKELY(pos == reference_token.size() - 1 || + (reference_token[pos + 1] != '0' && + reference_token[pos + 1] != '1'))) + { + JSON_THROW(detail::parse_error::create(108, 0, "escape character '~' must be followed with '0' or '1'", BasicJsonType())); + } + } + + // finally, store the reference token + detail::unescape(reference_token); + result.push_back(reference_token); + } + + return result; + } + + private: + /*! + @param[in] reference_string the reference string to the current value + @param[in] value the value to consider + @param[in,out] result the result object to insert values to + + @note Empty objects or arrays are flattened to `null`. + */ + static void flatten(const std::string& reference_string, + const BasicJsonType& value, + BasicJsonType& result) + { + switch (value.type()) + { + case detail::value_t::array: + { + if (value.m_value.array->empty()) + { + // flatten empty array as null + result[reference_string] = nullptr; + } + else + { + // iterate array and use index as reference string + for (std::size_t i = 0; i < value.m_value.array->size(); ++i) + { + flatten(reference_string + "/" + std::to_string(i), + value.m_value.array->operator[](i), result); + } + } + break; + } + + case detail::value_t::object: + { + if (value.m_value.object->empty()) + { + // flatten empty object as null + result[reference_string] = nullptr; + } + else + { + // iterate object and use keys as reference string + for (const auto& element : *value.m_value.object) + { + flatten(reference_string + "/" + detail::escape(element.first), element.second, result); + } + } + break; + } + + case detail::value_t::null: + case detail::value_t::string: + case detail::value_t::boolean: + case detail::value_t::number_integer: + case detail::value_t::number_unsigned: + case detail::value_t::number_float: + case detail::value_t::binary: + case detail::value_t::discarded: + default: + { + // add primitive value with its reference string + result[reference_string] = value; + break; + } + } + } + + /*! + @param[in] value flattened JSON + + @return unflattened JSON + + @throw parse_error.109 if array index is not a number + @throw type_error.314 if value is not an object + @throw type_error.315 if object values are not primitive + @throw type_error.313 if value cannot be unflattened + */ + static BasicJsonType + unflatten(const BasicJsonType& value) + { + if (JSON_HEDLEY_UNLIKELY(!value.is_object())) + { + JSON_THROW(detail::type_error::create(314, "only objects can be unflattened", value)); + } + + BasicJsonType result; + + // iterate the JSON object values + for (const auto& element : *value.m_value.object) + { + if (JSON_HEDLEY_UNLIKELY(!element.second.is_primitive())) + { + JSON_THROW(detail::type_error::create(315, "values in object must be primitive", element.second)); + } + + // assign value to reference pointed to by JSON pointer; Note that if + // the JSON pointer is "" (i.e., points to the whole value), function + // get_and_create returns a reference to result itself. An assignment + // will then create a primitive value. + json_pointer(element.first).get_and_create(result) = element.second; + } + + return result; + } + + /*! + @brief compares two JSON pointers for equality + + @param[in] lhs JSON pointer to compare + @param[in] rhs JSON pointer to compare + @return whether @a lhs is equal to @a rhs + + @complexity Linear in the length of the JSON pointer + + @exceptionsafety No-throw guarantee: this function never throws exceptions. + */ + friend bool operator==(json_pointer const& lhs, + json_pointer const& rhs) noexcept + { + return lhs.reference_tokens == rhs.reference_tokens; + } + + /*! + @brief compares two JSON pointers for inequality + + @param[in] lhs JSON pointer to compare + @param[in] rhs JSON pointer to compare + @return whether @a lhs is not equal @a rhs + + @complexity Linear in the length of the JSON pointer + + @exceptionsafety No-throw guarantee: this function never throws exceptions. + */ + friend bool operator!=(json_pointer const& lhs, + json_pointer const& rhs) noexcept + { + return !(lhs == rhs); + } + + /// the reference tokens + std::vector reference_tokens; +}; +} // namespace nlohmann + +// #include + + +#include +#include + +// #include + + +namespace nlohmann +{ +namespace detail +{ +template +class json_ref +{ + public: + using value_type = BasicJsonType; + + json_ref(value_type&& value) + : owned_value(std::move(value)) + {} + + json_ref(const value_type& value) + : value_ref(&value) + {} + + json_ref(std::initializer_list init) + : owned_value(init) + {} + + template < + class... Args, + enable_if_t::value, int> = 0 > + json_ref(Args && ... args) + : owned_value(std::forward(args)...) + {} + + // class should be movable only + json_ref(json_ref&&) noexcept = default; + json_ref(const json_ref&) = delete; + json_ref& operator=(const json_ref&) = delete; + json_ref& operator=(json_ref&&) = delete; + ~json_ref() = default; + + value_type moved_or_copied() const + { + if (value_ref == nullptr) + { + return std::move(owned_value); + } + return *value_ref; + } + + value_type const& operator*() const + { + return value_ref ? *value_ref : owned_value; + } + + value_type const* operator->() const + { + return &** this; + } + + private: + mutable value_type owned_value = nullptr; + value_type const* value_ref = nullptr; +}; +} // namespace detail +} // namespace nlohmann + +// #include + +// #include + +// #include + +// #include + +// #include + + +#include // reverse +#include // array +#include // isnan, isinf +#include // uint8_t, uint16_t, uint32_t, uint64_t +#include // memcpy +#include // numeric_limits +#include // string +#include // move + +// #include + +// #include + +// #include + + +#include // copy +#include // size_t +#include // back_inserter +#include // shared_ptr, make_shared +#include // basic_string +#include // vector + +#ifndef JSON_NO_IO + #include // streamsize + #include // basic_ostream +#endif // JSON_NO_IO + +// #include + + +namespace nlohmann +{ +namespace detail +{ +/// abstract output adapter interface +template struct output_adapter_protocol +{ + virtual void write_character(CharType c) = 0; + virtual void write_characters(const CharType* s, std::size_t length) = 0; + virtual ~output_adapter_protocol() = default; + + output_adapter_protocol() = default; + output_adapter_protocol(const output_adapter_protocol&) = default; + output_adapter_protocol(output_adapter_protocol&&) noexcept = default; + output_adapter_protocol& operator=(const output_adapter_protocol&) = default; + output_adapter_protocol& operator=(output_adapter_protocol&&) noexcept = default; +}; + +/// a type to simplify interfaces +template +using output_adapter_t = std::shared_ptr>; + +/// output adapter for byte vectors +template> +class output_vector_adapter : public output_adapter_protocol +{ + public: + explicit output_vector_adapter(std::vector& vec) noexcept + : v(vec) + {} + + void write_character(CharType c) override + { + v.push_back(c); + } + + JSON_HEDLEY_NON_NULL(2) + void write_characters(const CharType* s, std::size_t length) override + { + std::copy(s, s + length, std::back_inserter(v)); + } + + private: + std::vector& v; +}; + +#ifndef JSON_NO_IO +/// output adapter for output streams +template +class output_stream_adapter : public output_adapter_protocol +{ + public: + explicit output_stream_adapter(std::basic_ostream& s) noexcept + : stream(s) + {} + + void write_character(CharType c) override + { + stream.put(c); + } + + JSON_HEDLEY_NON_NULL(2) + void write_characters(const CharType* s, std::size_t length) override + { + stream.write(s, static_cast(length)); + } + + private: + std::basic_ostream& stream; +}; +#endif // JSON_NO_IO + +/// output adapter for basic_string +template> +class output_string_adapter : public output_adapter_protocol +{ + public: + explicit output_string_adapter(StringType& s) noexcept + : str(s) + {} + + void write_character(CharType c) override + { + str.push_back(c); + } + + JSON_HEDLEY_NON_NULL(2) + void write_characters(const CharType* s, std::size_t length) override + { + str.append(s, length); + } + + private: + StringType& str; +}; + +template> +class output_adapter +{ + public: + template> + output_adapter(std::vector& vec) + : oa(std::make_shared>(vec)) {} + +#ifndef JSON_NO_IO + output_adapter(std::basic_ostream& s) + : oa(std::make_shared>(s)) {} +#endif // JSON_NO_IO + + output_adapter(StringType& s) + : oa(std::make_shared>(s)) {} + + operator output_adapter_t() + { + return oa; + } + + private: + output_adapter_t oa = nullptr; +}; +} // namespace detail +} // namespace nlohmann + + +namespace nlohmann +{ +namespace detail +{ +/////////////////// +// binary writer // +/////////////////// + +/*! +@brief serialization to CBOR and MessagePack values +*/ +template +class binary_writer +{ + using string_t = typename BasicJsonType::string_t; + using binary_t = typename BasicJsonType::binary_t; + using number_float_t = typename BasicJsonType::number_float_t; + + public: + /*! + @brief create a binary writer + + @param[in] adapter output adapter to write to + */ + explicit binary_writer(output_adapter_t adapter) : oa(std::move(adapter)) + { + JSON_ASSERT(oa); + } + + /*! + @param[in] j JSON value to serialize + @pre j.type() == value_t::object + */ + void write_bson(const BasicJsonType& j) + { + switch (j.type()) + { + case value_t::object: + { + write_bson_object(*j.m_value.object); + break; + } + + case value_t::null: + case value_t::array: + case value_t::string: + case value_t::boolean: + case value_t::number_integer: + case value_t::number_unsigned: + case value_t::number_float: + case value_t::binary: + case value_t::discarded: + default: + { + JSON_THROW(type_error::create(317, "to serialize to BSON, top-level type must be object, but is " + std::string(j.type_name()), j)); + } + } + } + + /*! + @param[in] j JSON value to serialize + */ + void write_cbor(const BasicJsonType& j) + { + switch (j.type()) + { + case value_t::null: + { + oa->write_character(to_char_type(0xF6)); + break; + } + + case value_t::boolean: + { + oa->write_character(j.m_value.boolean + ? to_char_type(0xF5) + : to_char_type(0xF4)); + break; + } + + case value_t::number_integer: + { + if (j.m_value.number_integer >= 0) + { + // CBOR does not differentiate between positive signed + // integers and unsigned integers. Therefore, we used the + // code from the value_t::number_unsigned case here. + if (j.m_value.number_integer <= 0x17) + { + write_number(static_cast(j.m_value.number_integer)); + } + else if (j.m_value.number_integer <= (std::numeric_limits::max)()) + { + oa->write_character(to_char_type(0x18)); + write_number(static_cast(j.m_value.number_integer)); + } + else if (j.m_value.number_integer <= (std::numeric_limits::max)()) + { + oa->write_character(to_char_type(0x19)); + write_number(static_cast(j.m_value.number_integer)); + } + else if (j.m_value.number_integer <= (std::numeric_limits::max)()) + { + oa->write_character(to_char_type(0x1A)); + write_number(static_cast(j.m_value.number_integer)); + } + else + { + oa->write_character(to_char_type(0x1B)); + write_number(static_cast(j.m_value.number_integer)); + } + } + else + { + // The conversions below encode the sign in the first + // byte, and the value is converted to a positive number. + const auto positive_number = -1 - j.m_value.number_integer; + if (j.m_value.number_integer >= -24) + { + write_number(static_cast(0x20 + positive_number)); + } + else if (positive_number <= (std::numeric_limits::max)()) + { + oa->write_character(to_char_type(0x38)); + write_number(static_cast(positive_number)); + } + else if (positive_number <= (std::numeric_limits::max)()) + { + oa->write_character(to_char_type(0x39)); + write_number(static_cast(positive_number)); + } + else if (positive_number <= (std::numeric_limits::max)()) + { + oa->write_character(to_char_type(0x3A)); + write_number(static_cast(positive_number)); + } + else + { + oa->write_character(to_char_type(0x3B)); + write_number(static_cast(positive_number)); + } + } + break; + } + + case value_t::number_unsigned: + { + if (j.m_value.number_unsigned <= 0x17) + { + write_number(static_cast(j.m_value.number_unsigned)); + } + else if (j.m_value.number_unsigned <= (std::numeric_limits::max)()) + { + oa->write_character(to_char_type(0x18)); + write_number(static_cast(j.m_value.number_unsigned)); + } + else if (j.m_value.number_unsigned <= (std::numeric_limits::max)()) + { + oa->write_character(to_char_type(0x19)); + write_number(static_cast(j.m_value.number_unsigned)); + } + else if (j.m_value.number_unsigned <= (std::numeric_limits::max)()) + { + oa->write_character(to_char_type(0x1A)); + write_number(static_cast(j.m_value.number_unsigned)); + } + else + { + oa->write_character(to_char_type(0x1B)); + write_number(static_cast(j.m_value.number_unsigned)); + } + break; + } + + case value_t::number_float: + { + if (std::isnan(j.m_value.number_float)) + { + // NaN is 0xf97e00 in CBOR + oa->write_character(to_char_type(0xF9)); + oa->write_character(to_char_type(0x7E)); + oa->write_character(to_char_type(0x00)); + } + else if (std::isinf(j.m_value.number_float)) + { + // Infinity is 0xf97c00, -Infinity is 0xf9fc00 + oa->write_character(to_char_type(0xf9)); + oa->write_character(j.m_value.number_float > 0 ? to_char_type(0x7C) : to_char_type(0xFC)); + oa->write_character(to_char_type(0x00)); + } + else + { + write_compact_float(j.m_value.number_float, detail::input_format_t::cbor); + } + break; + } + + case value_t::string: + { + // step 1: write control byte and the string length + const auto N = j.m_value.string->size(); + if (N <= 0x17) + { + write_number(static_cast(0x60 + N)); + } + else if (N <= (std::numeric_limits::max)()) + { + oa->write_character(to_char_type(0x78)); + write_number(static_cast(N)); + } + else if (N <= (std::numeric_limits::max)()) + { + oa->write_character(to_char_type(0x79)); + write_number(static_cast(N)); + } + else if (N <= (std::numeric_limits::max)()) + { + oa->write_character(to_char_type(0x7A)); + write_number(static_cast(N)); + } + // LCOV_EXCL_START + else if (N <= (std::numeric_limits::max)()) + { + oa->write_character(to_char_type(0x7B)); + write_number(static_cast(N)); + } + // LCOV_EXCL_STOP + + // step 2: write the string + oa->write_characters( + reinterpret_cast(j.m_value.string->c_str()), + j.m_value.string->size()); + break; + } + + case value_t::array: + { + // step 1: write control byte and the array size + const auto N = j.m_value.array->size(); + if (N <= 0x17) + { + write_number(static_cast(0x80 + N)); + } + else if (N <= (std::numeric_limits::max)()) + { + oa->write_character(to_char_type(0x98)); + write_number(static_cast(N)); + } + else if (N <= (std::numeric_limits::max)()) + { + oa->write_character(to_char_type(0x99)); + write_number(static_cast(N)); + } + else if (N <= (std::numeric_limits::max)()) + { + oa->write_character(to_char_type(0x9A)); + write_number(static_cast(N)); + } + // LCOV_EXCL_START + else if (N <= (std::numeric_limits::max)()) + { + oa->write_character(to_char_type(0x9B)); + write_number(static_cast(N)); + } + // LCOV_EXCL_STOP + + // step 2: write each element + for (const auto& el : *j.m_value.array) + { + write_cbor(el); + } + break; + } + + case value_t::binary: + { + if (j.m_value.binary->has_subtype()) + { + if (j.m_value.binary->subtype() <= (std::numeric_limits::max)()) + { + write_number(static_cast(0xd8)); + write_number(static_cast(j.m_value.binary->subtype())); + } + else if (j.m_value.binary->subtype() <= (std::numeric_limits::max)()) + { + write_number(static_cast(0xd9)); + write_number(static_cast(j.m_value.binary->subtype())); + } + else if (j.m_value.binary->subtype() <= (std::numeric_limits::max)()) + { + write_number(static_cast(0xda)); + write_number(static_cast(j.m_value.binary->subtype())); + } + else if (j.m_value.binary->subtype() <= (std::numeric_limits::max)()) + { + write_number(static_cast(0xdb)); + write_number(static_cast(j.m_value.binary->subtype())); + } + } + + // step 1: write control byte and the binary array size + const auto N = j.m_value.binary->size(); + if (N <= 0x17) + { + write_number(static_cast(0x40 + N)); + } + else if (N <= (std::numeric_limits::max)()) + { + oa->write_character(to_char_type(0x58)); + write_number(static_cast(N)); + } + else if (N <= (std::numeric_limits::max)()) + { + oa->write_character(to_char_type(0x59)); + write_number(static_cast(N)); + } + else if (N <= (std::numeric_limits::max)()) + { + oa->write_character(to_char_type(0x5A)); + write_number(static_cast(N)); + } + // LCOV_EXCL_START + else if (N <= (std::numeric_limits::max)()) + { + oa->write_character(to_char_type(0x5B)); + write_number(static_cast(N)); + } + // LCOV_EXCL_STOP + + // step 2: write each element + oa->write_characters( + reinterpret_cast(j.m_value.binary->data()), + N); + + break; + } + + case value_t::object: + { + // step 1: write control byte and the object size + const auto N = j.m_value.object->size(); + if (N <= 0x17) + { + write_number(static_cast(0xA0 + N)); + } + else if (N <= (std::numeric_limits::max)()) + { + oa->write_character(to_char_type(0xB8)); + write_number(static_cast(N)); + } + else if (N <= (std::numeric_limits::max)()) + { + oa->write_character(to_char_type(0xB9)); + write_number(static_cast(N)); + } + else if (N <= (std::numeric_limits::max)()) + { + oa->write_character(to_char_type(0xBA)); + write_number(static_cast(N)); + } + // LCOV_EXCL_START + else if (N <= (std::numeric_limits::max)()) + { + oa->write_character(to_char_type(0xBB)); + write_number(static_cast(N)); + } + // LCOV_EXCL_STOP + + // step 2: write each element + for (const auto& el : *j.m_value.object) + { + write_cbor(el.first); + write_cbor(el.second); + } + break; + } + + case value_t::discarded: + default: + break; + } + } + + /*! + @param[in] j JSON value to serialize + */ + void write_msgpack(const BasicJsonType& j) + { + switch (j.type()) + { + case value_t::null: // nil + { + oa->write_character(to_char_type(0xC0)); + break; + } + + case value_t::boolean: // true and false + { + oa->write_character(j.m_value.boolean + ? to_char_type(0xC3) + : to_char_type(0xC2)); + break; + } + + case value_t::number_integer: + { + if (j.m_value.number_integer >= 0) + { + // MessagePack does not differentiate between positive + // signed integers and unsigned integers. Therefore, we used + // the code from the value_t::number_unsigned case here. + if (j.m_value.number_unsigned < 128) + { + // positive fixnum + write_number(static_cast(j.m_value.number_integer)); + } + else if (j.m_value.number_unsigned <= (std::numeric_limits::max)()) + { + // uint 8 + oa->write_character(to_char_type(0xCC)); + write_number(static_cast(j.m_value.number_integer)); + } + else if (j.m_value.number_unsigned <= (std::numeric_limits::max)()) + { + // uint 16 + oa->write_character(to_char_type(0xCD)); + write_number(static_cast(j.m_value.number_integer)); + } + else if (j.m_value.number_unsigned <= (std::numeric_limits::max)()) + { + // uint 32 + oa->write_character(to_char_type(0xCE)); + write_number(static_cast(j.m_value.number_integer)); + } + else if (j.m_value.number_unsigned <= (std::numeric_limits::max)()) + { + // uint 64 + oa->write_character(to_char_type(0xCF)); + write_number(static_cast(j.m_value.number_integer)); + } + } + else + { + if (j.m_value.number_integer >= -32) + { + // negative fixnum + write_number(static_cast(j.m_value.number_integer)); + } + else if (j.m_value.number_integer >= (std::numeric_limits::min)() && + j.m_value.number_integer <= (std::numeric_limits::max)()) + { + // int 8 + oa->write_character(to_char_type(0xD0)); + write_number(static_cast(j.m_value.number_integer)); + } + else if (j.m_value.number_integer >= (std::numeric_limits::min)() && + j.m_value.number_integer <= (std::numeric_limits::max)()) + { + // int 16 + oa->write_character(to_char_type(0xD1)); + write_number(static_cast(j.m_value.number_integer)); + } + else if (j.m_value.number_integer >= (std::numeric_limits::min)() && + j.m_value.number_integer <= (std::numeric_limits::max)()) + { + // int 32 + oa->write_character(to_char_type(0xD2)); + write_number(static_cast(j.m_value.number_integer)); + } + else if (j.m_value.number_integer >= (std::numeric_limits::min)() && + j.m_value.number_integer <= (std::numeric_limits::max)()) + { + // int 64 + oa->write_character(to_char_type(0xD3)); + write_number(static_cast(j.m_value.number_integer)); + } + } + break; + } + + case value_t::number_unsigned: + { + if (j.m_value.number_unsigned < 128) + { + // positive fixnum + write_number(static_cast(j.m_value.number_integer)); + } + else if (j.m_value.number_unsigned <= (std::numeric_limits::max)()) + { + // uint 8 + oa->write_character(to_char_type(0xCC)); + write_number(static_cast(j.m_value.number_integer)); + } + else if (j.m_value.number_unsigned <= (std::numeric_limits::max)()) + { + // uint 16 + oa->write_character(to_char_type(0xCD)); + write_number(static_cast(j.m_value.number_integer)); + } + else if (j.m_value.number_unsigned <= (std::numeric_limits::max)()) + { + // uint 32 + oa->write_character(to_char_type(0xCE)); + write_number(static_cast(j.m_value.number_integer)); + } + else if (j.m_value.number_unsigned <= (std::numeric_limits::max)()) + { + // uint 64 + oa->write_character(to_char_type(0xCF)); + write_number(static_cast(j.m_value.number_integer)); + } + break; + } + + case value_t::number_float: + { + write_compact_float(j.m_value.number_float, detail::input_format_t::msgpack); + break; + } + + case value_t::string: + { + // step 1: write control byte and the string length + const auto N = j.m_value.string->size(); + if (N <= 31) + { + // fixstr + write_number(static_cast(0xA0 | N)); + } + else if (N <= (std::numeric_limits::max)()) + { + // str 8 + oa->write_character(to_char_type(0xD9)); + write_number(static_cast(N)); + } + else if (N <= (std::numeric_limits::max)()) + { + // str 16 + oa->write_character(to_char_type(0xDA)); + write_number(static_cast(N)); + } + else if (N <= (std::numeric_limits::max)()) + { + // str 32 + oa->write_character(to_char_type(0xDB)); + write_number(static_cast(N)); + } + + // step 2: write the string + oa->write_characters( + reinterpret_cast(j.m_value.string->c_str()), + j.m_value.string->size()); + break; + } + + case value_t::array: + { + // step 1: write control byte and the array size + const auto N = j.m_value.array->size(); + if (N <= 15) + { + // fixarray + write_number(static_cast(0x90 | N)); + } + else if (N <= (std::numeric_limits::max)()) + { + // array 16 + oa->write_character(to_char_type(0xDC)); + write_number(static_cast(N)); + } + else if (N <= (std::numeric_limits::max)()) + { + // array 32 + oa->write_character(to_char_type(0xDD)); + write_number(static_cast(N)); + } + + // step 2: write each element + for (const auto& el : *j.m_value.array) + { + write_msgpack(el); + } + break; + } + + case value_t::binary: + { + // step 0: determine if the binary type has a set subtype to + // determine whether or not to use the ext or fixext types + const bool use_ext = j.m_value.binary->has_subtype(); + + // step 1: write control byte and the byte string length + const auto N = j.m_value.binary->size(); + if (N <= (std::numeric_limits::max)()) + { + std::uint8_t output_type{}; + bool fixed = true; + if (use_ext) + { + switch (N) + { + case 1: + output_type = 0xD4; // fixext 1 + break; + case 2: + output_type = 0xD5; // fixext 2 + break; + case 4: + output_type = 0xD6; // fixext 4 + break; + case 8: + output_type = 0xD7; // fixext 8 + break; + case 16: + output_type = 0xD8; // fixext 16 + break; + default: + output_type = 0xC7; // ext 8 + fixed = false; + break; + } + + } + else + { + output_type = 0xC4; // bin 8 + fixed = false; + } + + oa->write_character(to_char_type(output_type)); + if (!fixed) + { + write_number(static_cast(N)); + } + } + else if (N <= (std::numeric_limits::max)()) + { + std::uint8_t output_type = use_ext + ? 0xC8 // ext 16 + : 0xC5; // bin 16 + + oa->write_character(to_char_type(output_type)); + write_number(static_cast(N)); + } + else if (N <= (std::numeric_limits::max)()) + { + std::uint8_t output_type = use_ext + ? 0xC9 // ext 32 + : 0xC6; // bin 32 + + oa->write_character(to_char_type(output_type)); + write_number(static_cast(N)); + } + + // step 1.5: if this is an ext type, write the subtype + if (use_ext) + { + write_number(static_cast(j.m_value.binary->subtype())); + } + + // step 2: write the byte string + oa->write_characters( + reinterpret_cast(j.m_value.binary->data()), + N); + + break; + } + + case value_t::object: + { + // step 1: write control byte and the object size + const auto N = j.m_value.object->size(); + if (N <= 15) + { + // fixmap + write_number(static_cast(0x80 | (N & 0xF))); + } + else if (N <= (std::numeric_limits::max)()) + { + // map 16 + oa->write_character(to_char_type(0xDE)); + write_number(static_cast(N)); + } + else if (N <= (std::numeric_limits::max)()) + { + // map 32 + oa->write_character(to_char_type(0xDF)); + write_number(static_cast(N)); + } + + // step 2: write each element + for (const auto& el : *j.m_value.object) + { + write_msgpack(el.first); + write_msgpack(el.second); + } + break; + } + + case value_t::discarded: + default: + break; + } + } + + /*! + @param[in] j JSON value to serialize + @param[in] use_count whether to use '#' prefixes (optimized format) + @param[in] use_type whether to use '$' prefixes (optimized format) + @param[in] add_prefix whether prefixes need to be used for this value + */ + void write_ubjson(const BasicJsonType& j, const bool use_count, + const bool use_type, const bool add_prefix = true) + { + switch (j.type()) + { + case value_t::null: + { + if (add_prefix) + { + oa->write_character(to_char_type('Z')); + } + break; + } + + case value_t::boolean: + { + if (add_prefix) + { + oa->write_character(j.m_value.boolean + ? to_char_type('T') + : to_char_type('F')); + } + break; + } + + case value_t::number_integer: + { + write_number_with_ubjson_prefix(j.m_value.number_integer, add_prefix); + break; + } + + case value_t::number_unsigned: + { + write_number_with_ubjson_prefix(j.m_value.number_unsigned, add_prefix); + break; + } + + case value_t::number_float: + { + write_number_with_ubjson_prefix(j.m_value.number_float, add_prefix); + break; + } + + case value_t::string: + { + if (add_prefix) + { + oa->write_character(to_char_type('S')); + } + write_number_with_ubjson_prefix(j.m_value.string->size(), true); + oa->write_characters( + reinterpret_cast(j.m_value.string->c_str()), + j.m_value.string->size()); + break; + } + + case value_t::array: + { + if (add_prefix) + { + oa->write_character(to_char_type('[')); + } + + bool prefix_required = true; + if (use_type && !j.m_value.array->empty()) + { + JSON_ASSERT(use_count); + const CharType first_prefix = ubjson_prefix(j.front()); + const bool same_prefix = std::all_of(j.begin() + 1, j.end(), + [this, first_prefix](const BasicJsonType & v) + { + return ubjson_prefix(v) == first_prefix; + }); + + if (same_prefix) + { + prefix_required = false; + oa->write_character(to_char_type('$')); + oa->write_character(first_prefix); + } + } + + if (use_count) + { + oa->write_character(to_char_type('#')); + write_number_with_ubjson_prefix(j.m_value.array->size(), true); + } + + for (const auto& el : *j.m_value.array) + { + write_ubjson(el, use_count, use_type, prefix_required); + } + + if (!use_count) + { + oa->write_character(to_char_type(']')); + } + + break; + } + + case value_t::binary: + { + if (add_prefix) + { + oa->write_character(to_char_type('[')); + } + + if (use_type && !j.m_value.binary->empty()) + { + JSON_ASSERT(use_count); + oa->write_character(to_char_type('$')); + oa->write_character('U'); + } + + if (use_count) + { + oa->write_character(to_char_type('#')); + write_number_with_ubjson_prefix(j.m_value.binary->size(), true); + } + + if (use_type) + { + oa->write_characters( + reinterpret_cast(j.m_value.binary->data()), + j.m_value.binary->size()); + } + else + { + for (size_t i = 0; i < j.m_value.binary->size(); ++i) + { + oa->write_character(to_char_type('U')); + oa->write_character(j.m_value.binary->data()[i]); + } + } + + if (!use_count) + { + oa->write_character(to_char_type(']')); + } + + break; + } + + case value_t::object: + { + if (add_prefix) + { + oa->write_character(to_char_type('{')); + } + + bool prefix_required = true; + if (use_type && !j.m_value.object->empty()) + { + JSON_ASSERT(use_count); + const CharType first_prefix = ubjson_prefix(j.front()); + const bool same_prefix = std::all_of(j.begin(), j.end(), + [this, first_prefix](const BasicJsonType & v) + { + return ubjson_prefix(v) == first_prefix; + }); + + if (same_prefix) + { + prefix_required = false; + oa->write_character(to_char_type('$')); + oa->write_character(first_prefix); + } + } + + if (use_count) + { + oa->write_character(to_char_type('#')); + write_number_with_ubjson_prefix(j.m_value.object->size(), true); + } + + for (const auto& el : *j.m_value.object) + { + write_number_with_ubjson_prefix(el.first.size(), true); + oa->write_characters( + reinterpret_cast(el.first.c_str()), + el.first.size()); + write_ubjson(el.second, use_count, use_type, prefix_required); + } + + if (!use_count) + { + oa->write_character(to_char_type('}')); + } + + break; + } + + case value_t::discarded: + default: + break; + } + } + + private: + ////////// + // BSON // + ////////// + + /*! + @return The size of a BSON document entry header, including the id marker + and the entry name size (and its null-terminator). + */ + static std::size_t calc_bson_entry_header_size(const string_t& name, const BasicJsonType& j) + { + const auto it = name.find(static_cast(0)); + if (JSON_HEDLEY_UNLIKELY(it != BasicJsonType::string_t::npos)) + { + JSON_THROW(out_of_range::create(409, "BSON key cannot contain code point U+0000 (at byte " + std::to_string(it) + ")", j)); + static_cast(j); + } + + return /*id*/ 1ul + name.size() + /*zero-terminator*/1u; + } + + /*! + @brief Writes the given @a element_type and @a name to the output adapter + */ + void write_bson_entry_header(const string_t& name, + const std::uint8_t element_type) + { + oa->write_character(to_char_type(element_type)); // boolean + oa->write_characters( + reinterpret_cast(name.c_str()), + name.size() + 1u); + } + + /*! + @brief Writes a BSON element with key @a name and boolean value @a value + */ + void write_bson_boolean(const string_t& name, + const bool value) + { + write_bson_entry_header(name, 0x08); + oa->write_character(value ? to_char_type(0x01) : to_char_type(0x00)); + } + + /*! + @brief Writes a BSON element with key @a name and double value @a value + */ + void write_bson_double(const string_t& name, + const double value) + { + write_bson_entry_header(name, 0x01); + write_number(value); + } + + /*! + @return The size of the BSON-encoded string in @a value + */ + static std::size_t calc_bson_string_size(const string_t& value) + { + return sizeof(std::int32_t) + value.size() + 1ul; + } + + /*! + @brief Writes a BSON element with key @a name and string value @a value + */ + void write_bson_string(const string_t& name, + const string_t& value) + { + write_bson_entry_header(name, 0x02); + + write_number(static_cast(value.size() + 1ul)); + oa->write_characters( + reinterpret_cast(value.c_str()), + value.size() + 1); + } + + /*! + @brief Writes a BSON element with key @a name and null value + */ + void write_bson_null(const string_t& name) + { + write_bson_entry_header(name, 0x0A); + } + + /*! + @return The size of the BSON-encoded integer @a value + */ + static std::size_t calc_bson_integer_size(const std::int64_t value) + { + return (std::numeric_limits::min)() <= value && value <= (std::numeric_limits::max)() + ? sizeof(std::int32_t) + : sizeof(std::int64_t); + } + + /*! + @brief Writes a BSON element with key @a name and integer @a value + */ + void write_bson_integer(const string_t& name, + const std::int64_t value) + { + if ((std::numeric_limits::min)() <= value && value <= (std::numeric_limits::max)()) + { + write_bson_entry_header(name, 0x10); // int32 + write_number(static_cast(value)); + } + else + { + write_bson_entry_header(name, 0x12); // int64 + write_number(static_cast(value)); + } + } + + /*! + @return The size of the BSON-encoded unsigned integer in @a j + */ + static constexpr std::size_t calc_bson_unsigned_size(const std::uint64_t value) noexcept + { + return (value <= static_cast((std::numeric_limits::max)())) + ? sizeof(std::int32_t) + : sizeof(std::int64_t); + } + + /*! + @brief Writes a BSON element with key @a name and unsigned @a value + */ + void write_bson_unsigned(const string_t& name, + const BasicJsonType& j) + { + if (j.m_value.number_unsigned <= static_cast((std::numeric_limits::max)())) + { + write_bson_entry_header(name, 0x10 /* int32 */); + write_number(static_cast(j.m_value.number_unsigned)); + } + else if (j.m_value.number_unsigned <= static_cast((std::numeric_limits::max)())) + { + write_bson_entry_header(name, 0x12 /* int64 */); + write_number(static_cast(j.m_value.number_unsigned)); + } + else + { + JSON_THROW(out_of_range::create(407, "integer number " + std::to_string(j.m_value.number_unsigned) + " cannot be represented by BSON as it does not fit int64", j)); + } + } + + /*! + @brief Writes a BSON element with key @a name and object @a value + */ + void write_bson_object_entry(const string_t& name, + const typename BasicJsonType::object_t& value) + { + write_bson_entry_header(name, 0x03); // object + write_bson_object(value); + } + + /*! + @return The size of the BSON-encoded array @a value + */ + static std::size_t calc_bson_array_size(const typename BasicJsonType::array_t& value) + { + std::size_t array_index = 0ul; + + const std::size_t embedded_document_size = std::accumulate(std::begin(value), std::end(value), static_cast(0), [&array_index](std::size_t result, const typename BasicJsonType::array_t::value_type & el) + { + return result + calc_bson_element_size(std::to_string(array_index++), el); + }); + + return sizeof(std::int32_t) + embedded_document_size + 1ul; + } + + /*! + @return The size of the BSON-encoded binary array @a value + */ + static std::size_t calc_bson_binary_size(const typename BasicJsonType::binary_t& value) + { + return sizeof(std::int32_t) + value.size() + 1ul; + } + + /*! + @brief Writes a BSON element with key @a name and array @a value + */ + void write_bson_array(const string_t& name, + const typename BasicJsonType::array_t& value) + { + write_bson_entry_header(name, 0x04); // array + write_number(static_cast(calc_bson_array_size(value))); + + std::size_t array_index = 0ul; + + for (const auto& el : value) + { + write_bson_element(std::to_string(array_index++), el); + } + + oa->write_character(to_char_type(0x00)); + } + + /*! + @brief Writes a BSON element with key @a name and binary value @a value + */ + void write_bson_binary(const string_t& name, + const binary_t& value) + { + write_bson_entry_header(name, 0x05); + + write_number(static_cast(value.size())); + write_number(value.has_subtype() ? static_cast(value.subtype()) : static_cast(0x00)); + + oa->write_characters(reinterpret_cast(value.data()), value.size()); + } + + /*! + @brief Calculates the size necessary to serialize the JSON value @a j with its @a name + @return The calculated size for the BSON document entry for @a j with the given @a name. + */ + static std::size_t calc_bson_element_size(const string_t& name, + const BasicJsonType& j) + { + const auto header_size = calc_bson_entry_header_size(name, j); + switch (j.type()) + { + case value_t::object: + return header_size + calc_bson_object_size(*j.m_value.object); + + case value_t::array: + return header_size + calc_bson_array_size(*j.m_value.array); + + case value_t::binary: + return header_size + calc_bson_binary_size(*j.m_value.binary); + + case value_t::boolean: + return header_size + 1ul; + + case value_t::number_float: + return header_size + 8ul; + + case value_t::number_integer: + return header_size + calc_bson_integer_size(j.m_value.number_integer); + + case value_t::number_unsigned: + return header_size + calc_bson_unsigned_size(j.m_value.number_unsigned); + + case value_t::string: + return header_size + calc_bson_string_size(*j.m_value.string); + + case value_t::null: + return header_size + 0ul; + + // LCOV_EXCL_START + case value_t::discarded: + default: + JSON_ASSERT(false); // NOLINT(cert-dcl03-c,hicpp-static-assert,misc-static-assert) + return 0ul; + // LCOV_EXCL_STOP + } + } + + /*! + @brief Serializes the JSON value @a j to BSON and associates it with the + key @a name. + @param name The name to associate with the JSON entity @a j within the + current BSON document + */ + void write_bson_element(const string_t& name, + const BasicJsonType& j) + { + switch (j.type()) + { + case value_t::object: + return write_bson_object_entry(name, *j.m_value.object); + + case value_t::array: + return write_bson_array(name, *j.m_value.array); + + case value_t::binary: + return write_bson_binary(name, *j.m_value.binary); + + case value_t::boolean: + return write_bson_boolean(name, j.m_value.boolean); + + case value_t::number_float: + return write_bson_double(name, j.m_value.number_float); + + case value_t::number_integer: + return write_bson_integer(name, j.m_value.number_integer); + + case value_t::number_unsigned: + return write_bson_unsigned(name, j); + + case value_t::string: + return write_bson_string(name, *j.m_value.string); + + case value_t::null: + return write_bson_null(name); + + // LCOV_EXCL_START + case value_t::discarded: + default: + JSON_ASSERT(false); // NOLINT(cert-dcl03-c,hicpp-static-assert,misc-static-assert) + return; + // LCOV_EXCL_STOP + } + } + + /*! + @brief Calculates the size of the BSON serialization of the given + JSON-object @a j. + @param[in] value JSON value to serialize + @pre value.type() == value_t::object + */ + static std::size_t calc_bson_object_size(const typename BasicJsonType::object_t& value) + { + std::size_t document_size = std::accumulate(value.begin(), value.end(), static_cast(0), + [](size_t result, const typename BasicJsonType::object_t::value_type & el) + { + return result += calc_bson_element_size(el.first, el.second); + }); + + return sizeof(std::int32_t) + document_size + 1ul; + } + + /*! + @param[in] value JSON value to serialize + @pre value.type() == value_t::object + */ + void write_bson_object(const typename BasicJsonType::object_t& value) + { + write_number(static_cast(calc_bson_object_size(value))); + + for (const auto& el : value) + { + write_bson_element(el.first, el.second); + } + + oa->write_character(to_char_type(0x00)); + } + + ////////// + // CBOR // + ////////// + + static constexpr CharType get_cbor_float_prefix(float /*unused*/) + { + return to_char_type(0xFA); // Single-Precision Float + } + + static constexpr CharType get_cbor_float_prefix(double /*unused*/) + { + return to_char_type(0xFB); // Double-Precision Float + } + + ///////////// + // MsgPack // + ///////////// + + static constexpr CharType get_msgpack_float_prefix(float /*unused*/) + { + return to_char_type(0xCA); // float 32 + } + + static constexpr CharType get_msgpack_float_prefix(double /*unused*/) + { + return to_char_type(0xCB); // float 64 + } + + //////////// + // UBJSON // + //////////// + + // UBJSON: write number (floating point) + template::value, int>::type = 0> + void write_number_with_ubjson_prefix(const NumberType n, + const bool add_prefix) + { + if (add_prefix) + { + oa->write_character(get_ubjson_float_prefix(n)); + } + write_number(n); + } + + // UBJSON: write number (unsigned integer) + template::value, int>::type = 0> + void write_number_with_ubjson_prefix(const NumberType n, + const bool add_prefix) + { + if (n <= static_cast((std::numeric_limits::max)())) + { + if (add_prefix) + { + oa->write_character(to_char_type('i')); // int8 + } + write_number(static_cast(n)); + } + else if (n <= (std::numeric_limits::max)()) + { + if (add_prefix) + { + oa->write_character(to_char_type('U')); // uint8 + } + write_number(static_cast(n)); + } + else if (n <= static_cast((std::numeric_limits::max)())) + { + if (add_prefix) + { + oa->write_character(to_char_type('I')); // int16 + } + write_number(static_cast(n)); + } + else if (n <= static_cast((std::numeric_limits::max)())) + { + if (add_prefix) + { + oa->write_character(to_char_type('l')); // int32 + } + write_number(static_cast(n)); + } + else if (n <= static_cast((std::numeric_limits::max)())) + { + if (add_prefix) + { + oa->write_character(to_char_type('L')); // int64 + } + write_number(static_cast(n)); + } + else + { + if (add_prefix) + { + oa->write_character(to_char_type('H')); // high-precision number + } + + const auto number = BasicJsonType(n).dump(); + write_number_with_ubjson_prefix(number.size(), true); + for (std::size_t i = 0; i < number.size(); ++i) + { + oa->write_character(to_char_type(static_cast(number[i]))); + } + } + } + + // UBJSON: write number (signed integer) + template < typename NumberType, typename std::enable_if < + std::is_signed::value&& + !std::is_floating_point::value, int >::type = 0 > + void write_number_with_ubjson_prefix(const NumberType n, + const bool add_prefix) + { + if ((std::numeric_limits::min)() <= n && n <= (std::numeric_limits::max)()) + { + if (add_prefix) + { + oa->write_character(to_char_type('i')); // int8 + } + write_number(static_cast(n)); + } + else if (static_cast((std::numeric_limits::min)()) <= n && n <= static_cast((std::numeric_limits::max)())) + { + if (add_prefix) + { + oa->write_character(to_char_type('U')); // uint8 + } + write_number(static_cast(n)); + } + else if ((std::numeric_limits::min)() <= n && n <= (std::numeric_limits::max)()) + { + if (add_prefix) + { + oa->write_character(to_char_type('I')); // int16 + } + write_number(static_cast(n)); + } + else if ((std::numeric_limits::min)() <= n && n <= (std::numeric_limits::max)()) + { + if (add_prefix) + { + oa->write_character(to_char_type('l')); // int32 + } + write_number(static_cast(n)); + } + else if ((std::numeric_limits::min)() <= n && n <= (std::numeric_limits::max)()) + { + if (add_prefix) + { + oa->write_character(to_char_type('L')); // int64 + } + write_number(static_cast(n)); + } + // LCOV_EXCL_START + else + { + if (add_prefix) + { + oa->write_character(to_char_type('H')); // high-precision number + } + + const auto number = BasicJsonType(n).dump(); + write_number_with_ubjson_prefix(number.size(), true); + for (std::size_t i = 0; i < number.size(); ++i) + { + oa->write_character(to_char_type(static_cast(number[i]))); + } + } + // LCOV_EXCL_STOP + } + + /*! + @brief determine the type prefix of container values + */ + CharType ubjson_prefix(const BasicJsonType& j) const noexcept + { + switch (j.type()) + { + case value_t::null: + return 'Z'; + + case value_t::boolean: + return j.m_value.boolean ? 'T' : 'F'; + + case value_t::number_integer: + { + if ((std::numeric_limits::min)() <= j.m_value.number_integer && j.m_value.number_integer <= (std::numeric_limits::max)()) + { + return 'i'; + } + if ((std::numeric_limits::min)() <= j.m_value.number_integer && j.m_value.number_integer <= (std::numeric_limits::max)()) + { + return 'U'; + } + if ((std::numeric_limits::min)() <= j.m_value.number_integer && j.m_value.number_integer <= (std::numeric_limits::max)()) + { + return 'I'; + } + if ((std::numeric_limits::min)() <= j.m_value.number_integer && j.m_value.number_integer <= (std::numeric_limits::max)()) + { + return 'l'; + } + if ((std::numeric_limits::min)() <= j.m_value.number_integer && j.m_value.number_integer <= (std::numeric_limits::max)()) + { + return 'L'; + } + // anything else is treated as high-precision number + return 'H'; // LCOV_EXCL_LINE + } + + case value_t::number_unsigned: + { + if (j.m_value.number_unsigned <= static_cast((std::numeric_limits::max)())) + { + return 'i'; + } + if (j.m_value.number_unsigned <= static_cast((std::numeric_limits::max)())) + { + return 'U'; + } + if (j.m_value.number_unsigned <= static_cast((std::numeric_limits::max)())) + { + return 'I'; + } + if (j.m_value.number_unsigned <= static_cast((std::numeric_limits::max)())) + { + return 'l'; + } + if (j.m_value.number_unsigned <= static_cast((std::numeric_limits::max)())) + { + return 'L'; + } + // anything else is treated as high-precision number + return 'H'; // LCOV_EXCL_LINE + } + + case value_t::number_float: + return get_ubjson_float_prefix(j.m_value.number_float); + + case value_t::string: + return 'S'; + + case value_t::array: // fallthrough + case value_t::binary: + return '['; + + case value_t::object: + return '{'; + + case value_t::discarded: + default: // discarded values + return 'N'; + } + } + + static constexpr CharType get_ubjson_float_prefix(float /*unused*/) + { + return 'd'; // float 32 + } + + static constexpr CharType get_ubjson_float_prefix(double /*unused*/) + { + return 'D'; // float 64 + } + + /////////////////////// + // Utility functions // + /////////////////////// + + /* + @brief write a number to output input + @param[in] n number of type @a NumberType + @tparam NumberType the type of the number + @tparam OutputIsLittleEndian Set to true if output data is + required to be little endian + + @note This function needs to respect the system's endianness, because bytes + in CBOR, MessagePack, and UBJSON are stored in network order (big + endian) and therefore need reordering on little endian systems. + */ + template + void write_number(const NumberType n) + { + // step 1: write number to array of length NumberType + std::array vec{}; + std::memcpy(vec.data(), &n, sizeof(NumberType)); + + // step 2: write array to output (with possible reordering) + if (is_little_endian != OutputIsLittleEndian) + { + // reverse byte order prior to conversion if necessary + std::reverse(vec.begin(), vec.end()); + } + + oa->write_characters(vec.data(), sizeof(NumberType)); + } + + void write_compact_float(const number_float_t n, detail::input_format_t format) + { +#ifdef __GNUC__ +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wfloat-equal" +#endif + if (static_cast(n) >= static_cast(std::numeric_limits::lowest()) && + static_cast(n) <= static_cast((std::numeric_limits::max)()) && + static_cast(static_cast(n)) == static_cast(n)) + { + oa->write_character(format == detail::input_format_t::cbor + ? get_cbor_float_prefix(static_cast(n)) + : get_msgpack_float_prefix(static_cast(n))); + write_number(static_cast(n)); + } + else + { + oa->write_character(format == detail::input_format_t::cbor + ? get_cbor_float_prefix(n) + : get_msgpack_float_prefix(n)); + write_number(n); + } +#ifdef __GNUC__ +#pragma GCC diagnostic pop +#endif + } + + public: + // The following to_char_type functions are implement the conversion + // between uint8_t and CharType. In case CharType is not unsigned, + // such a conversion is required to allow values greater than 128. + // See for a discussion. + template < typename C = CharType, + enable_if_t < std::is_signed::value && std::is_signed::value > * = nullptr > + static constexpr CharType to_char_type(std::uint8_t x) noexcept + { + return *reinterpret_cast(&x); + } + + template < typename C = CharType, + enable_if_t < std::is_signed::value && std::is_unsigned::value > * = nullptr > + static CharType to_char_type(std::uint8_t x) noexcept + { + static_assert(sizeof(std::uint8_t) == sizeof(CharType), "size of CharType must be equal to std::uint8_t"); + static_assert(std::is_trivial::value, "CharType must be trivial"); + CharType result; + std::memcpy(&result, &x, sizeof(x)); + return result; + } + + template::value>* = nullptr> + static constexpr CharType to_char_type(std::uint8_t x) noexcept + { + return x; + } + + template < typename InputCharType, typename C = CharType, + enable_if_t < + std::is_signed::value && + std::is_signed::value && + std::is_same::type>::value + > * = nullptr > + static constexpr CharType to_char_type(InputCharType x) noexcept + { + return x; + } + + private: + /// whether we can assume little endianness + const bool is_little_endian = little_endianness(); + + /// the output + output_adapter_t oa = nullptr; +}; +} // namespace detail +} // namespace nlohmann + +// #include + +// #include + + +#include // reverse, remove, fill, find, none_of +#include // array +#include // localeconv, lconv +#include // labs, isfinite, isnan, signbit +#include // size_t, ptrdiff_t +#include // uint8_t +#include // snprintf +#include // numeric_limits +#include // string, char_traits +#include // setfill, setw +#include // is_same +#include // move + +// #include + + +#include // array +#include // signbit, isfinite +#include // intN_t, uintN_t +#include // memcpy, memmove +#include // numeric_limits +#include // conditional + +// #include + + +namespace nlohmann +{ +namespace detail +{ + +/*! +@brief implements the Grisu2 algorithm for binary to decimal floating-point +conversion. + +This implementation is a slightly modified version of the reference +implementation which may be obtained from +http://florian.loitsch.com/publications (bench.tar.gz). + +The code is distributed under the MIT license, Copyright (c) 2009 Florian Loitsch. + +For a detailed description of the algorithm see: + +[1] Loitsch, "Printing Floating-Point Numbers Quickly and Accurately with + Integers", Proceedings of the ACM SIGPLAN 2010 Conference on Programming + Language Design and Implementation, PLDI 2010 +[2] Burger, Dybvig, "Printing Floating-Point Numbers Quickly and Accurately", + Proceedings of the ACM SIGPLAN 1996 Conference on Programming Language + Design and Implementation, PLDI 1996 +*/ +namespace dtoa_impl +{ + +template +Target reinterpret_bits(const Source source) +{ + static_assert(sizeof(Target) == sizeof(Source), "size mismatch"); + + Target target; + std::memcpy(&target, &source, sizeof(Source)); + return target; +} + +struct diyfp // f * 2^e +{ + static constexpr int kPrecision = 64; // = q + + std::uint64_t f = 0; + int e = 0; + + constexpr diyfp(std::uint64_t f_, int e_) noexcept : f(f_), e(e_) {} + + /*! + @brief returns x - y + @pre x.e == y.e and x.f >= y.f + */ + static diyfp sub(const diyfp& x, const diyfp& y) noexcept + { + JSON_ASSERT(x.e == y.e); + JSON_ASSERT(x.f >= y.f); + + return {x.f - y.f, x.e}; + } + + /*! + @brief returns x * y + @note The result is rounded. (Only the upper q bits are returned.) + */ + static diyfp mul(const diyfp& x, const diyfp& y) noexcept + { + static_assert(kPrecision == 64, "internal error"); + + // Computes: + // f = round((x.f * y.f) / 2^q) + // e = x.e + y.e + q + + // Emulate the 64-bit * 64-bit multiplication: + // + // p = u * v + // = (u_lo + 2^32 u_hi) (v_lo + 2^32 v_hi) + // = (u_lo v_lo ) + 2^32 ((u_lo v_hi ) + (u_hi v_lo )) + 2^64 (u_hi v_hi ) + // = (p0 ) + 2^32 ((p1 ) + (p2 )) + 2^64 (p3 ) + // = (p0_lo + 2^32 p0_hi) + 2^32 ((p1_lo + 2^32 p1_hi) + (p2_lo + 2^32 p2_hi)) + 2^64 (p3 ) + // = (p0_lo ) + 2^32 (p0_hi + p1_lo + p2_lo ) + 2^64 (p1_hi + p2_hi + p3) + // = (p0_lo ) + 2^32 (Q ) + 2^64 (H ) + // = (p0_lo ) + 2^32 (Q_lo + 2^32 Q_hi ) + 2^64 (H ) + // + // (Since Q might be larger than 2^32 - 1) + // + // = (p0_lo + 2^32 Q_lo) + 2^64 (Q_hi + H) + // + // (Q_hi + H does not overflow a 64-bit int) + // + // = p_lo + 2^64 p_hi + + const std::uint64_t u_lo = x.f & 0xFFFFFFFFu; + const std::uint64_t u_hi = x.f >> 32u; + const std::uint64_t v_lo = y.f & 0xFFFFFFFFu; + const std::uint64_t v_hi = y.f >> 32u; + + const std::uint64_t p0 = u_lo * v_lo; + const std::uint64_t p1 = u_lo * v_hi; + const std::uint64_t p2 = u_hi * v_lo; + const std::uint64_t p3 = u_hi * v_hi; + + const std::uint64_t p0_hi = p0 >> 32u; + const std::uint64_t p1_lo = p1 & 0xFFFFFFFFu; + const std::uint64_t p1_hi = p1 >> 32u; + const std::uint64_t p2_lo = p2 & 0xFFFFFFFFu; + const std::uint64_t p2_hi = p2 >> 32u; + + std::uint64_t Q = p0_hi + p1_lo + p2_lo; + + // The full product might now be computed as + // + // p_hi = p3 + p2_hi + p1_hi + (Q >> 32) + // p_lo = p0_lo + (Q << 32) + // + // But in this particular case here, the full p_lo is not required. + // Effectively we only need to add the highest bit in p_lo to p_hi (and + // Q_hi + 1 does not overflow). + + Q += std::uint64_t{1} << (64u - 32u - 1u); // round, ties up + + const std::uint64_t h = p3 + p2_hi + p1_hi + (Q >> 32u); + + return {h, x.e + y.e + 64}; + } + + /*! + @brief normalize x such that the significand is >= 2^(q-1) + @pre x.f != 0 + */ + static diyfp normalize(diyfp x) noexcept + { + JSON_ASSERT(x.f != 0); + + while ((x.f >> 63u) == 0) + { + x.f <<= 1u; + x.e--; + } + + return x; + } + + /*! + @brief normalize x such that the result has the exponent E + @pre e >= x.e and the upper e - x.e bits of x.f must be zero. + */ + static diyfp normalize_to(const diyfp& x, const int target_exponent) noexcept + { + const int delta = x.e - target_exponent; + + JSON_ASSERT(delta >= 0); + JSON_ASSERT(((x.f << delta) >> delta) == x.f); + + return {x.f << delta, target_exponent}; + } +}; + +struct boundaries +{ + diyfp w; + diyfp minus; + diyfp plus; +}; + +/*! +Compute the (normalized) diyfp representing the input number 'value' and its +boundaries. + +@pre value must be finite and positive +*/ +template +boundaries compute_boundaries(FloatType value) +{ + JSON_ASSERT(std::isfinite(value)); + JSON_ASSERT(value > 0); + + // Convert the IEEE representation into a diyfp. + // + // If v is denormal: + // value = 0.F * 2^(1 - bias) = ( F) * 2^(1 - bias - (p-1)) + // If v is normalized: + // value = 1.F * 2^(E - bias) = (2^(p-1) + F) * 2^(E - bias - (p-1)) + + static_assert(std::numeric_limits::is_iec559, + "internal error: dtoa_short requires an IEEE-754 floating-point implementation"); + + constexpr int kPrecision = std::numeric_limits::digits; // = p (includes the hidden bit) + constexpr int kBias = std::numeric_limits::max_exponent - 1 + (kPrecision - 1); + constexpr int kMinExp = 1 - kBias; + constexpr std::uint64_t kHiddenBit = std::uint64_t{1} << (kPrecision - 1); // = 2^(p-1) + + using bits_type = typename std::conditional::type; + + const auto bits = static_cast(reinterpret_bits(value)); + const std::uint64_t E = bits >> (kPrecision - 1); + const std::uint64_t F = bits & (kHiddenBit - 1); + + const bool is_denormal = E == 0; + const diyfp v = is_denormal + ? diyfp(F, kMinExp) + : diyfp(F + kHiddenBit, static_cast(E) - kBias); + + // Compute the boundaries m- and m+ of the floating-point value + // v = f * 2^e. + // + // Determine v- and v+, the floating-point predecessor and successor if v, + // respectively. + // + // v- = v - 2^e if f != 2^(p-1) or e == e_min (A) + // = v - 2^(e-1) if f == 2^(p-1) and e > e_min (B) + // + // v+ = v + 2^e + // + // Let m- = (v- + v) / 2 and m+ = (v + v+) / 2. All real numbers _strictly_ + // between m- and m+ round to v, regardless of how the input rounding + // algorithm breaks ties. + // + // ---+-------------+-------------+-------------+-------------+--- (A) + // v- m- v m+ v+ + // + // -----------------+------+------+-------------+-------------+--- (B) + // v- m- v m+ v+ + + const bool lower_boundary_is_closer = F == 0 && E > 1; + const diyfp m_plus = diyfp(2 * v.f + 1, v.e - 1); + const diyfp m_minus = lower_boundary_is_closer + ? diyfp(4 * v.f - 1, v.e - 2) // (B) + : diyfp(2 * v.f - 1, v.e - 1); // (A) + + // Determine the normalized w+ = m+. + const diyfp w_plus = diyfp::normalize(m_plus); + + // Determine w- = m- such that e_(w-) = e_(w+). + const diyfp w_minus = diyfp::normalize_to(m_minus, w_plus.e); + + return {diyfp::normalize(v), w_minus, w_plus}; +} + +// Given normalized diyfp w, Grisu needs to find a (normalized) cached +// power-of-ten c, such that the exponent of the product c * w = f * 2^e lies +// within a certain range [alpha, gamma] (Definition 3.2 from [1]) +// +// alpha <= e = e_c + e_w + q <= gamma +// +// or +// +// f_c * f_w * 2^alpha <= f_c 2^(e_c) * f_w 2^(e_w) * 2^q +// <= f_c * f_w * 2^gamma +// +// Since c and w are normalized, i.e. 2^(q-1) <= f < 2^q, this implies +// +// 2^(q-1) * 2^(q-1) * 2^alpha <= c * w * 2^q < 2^q * 2^q * 2^gamma +// +// or +// +// 2^(q - 2 + alpha) <= c * w < 2^(q + gamma) +// +// The choice of (alpha,gamma) determines the size of the table and the form of +// the digit generation procedure. Using (alpha,gamma)=(-60,-32) works out well +// in practice: +// +// The idea is to cut the number c * w = f * 2^e into two parts, which can be +// processed independently: An integral part p1, and a fractional part p2: +// +// f * 2^e = ( (f div 2^-e) * 2^-e + (f mod 2^-e) ) * 2^e +// = (f div 2^-e) + (f mod 2^-e) * 2^e +// = p1 + p2 * 2^e +// +// The conversion of p1 into decimal form requires a series of divisions and +// modulos by (a power of) 10. These operations are faster for 32-bit than for +// 64-bit integers, so p1 should ideally fit into a 32-bit integer. This can be +// achieved by choosing +// +// -e >= 32 or e <= -32 := gamma +// +// In order to convert the fractional part +// +// p2 * 2^e = p2 / 2^-e = d[-1] / 10^1 + d[-2] / 10^2 + ... +// +// into decimal form, the fraction is repeatedly multiplied by 10 and the digits +// d[-i] are extracted in order: +// +// (10 * p2) div 2^-e = d[-1] +// (10 * p2) mod 2^-e = d[-2] / 10^1 + ... +// +// The multiplication by 10 must not overflow. It is sufficient to choose +// +// 10 * p2 < 16 * p2 = 2^4 * p2 <= 2^64. +// +// Since p2 = f mod 2^-e < 2^-e, +// +// -e <= 60 or e >= -60 := alpha + +constexpr int kAlpha = -60; +constexpr int kGamma = -32; + +struct cached_power // c = f * 2^e ~= 10^k +{ + std::uint64_t f; + int e; + int k; +}; + +/*! +For a normalized diyfp w = f * 2^e, this function returns a (normalized) cached +power-of-ten c = f_c * 2^e_c, such that the exponent of the product w * c +satisfies (Definition 3.2 from [1]) + + alpha <= e_c + e + q <= gamma. +*/ +inline cached_power get_cached_power_for_binary_exponent(int e) +{ + // Now + // + // alpha <= e_c + e + q <= gamma (1) + // ==> f_c * 2^alpha <= c * 2^e * 2^q + // + // and since the c's are normalized, 2^(q-1) <= f_c, + // + // ==> 2^(q - 1 + alpha) <= c * 2^(e + q) + // ==> 2^(alpha - e - 1) <= c + // + // If c were an exact power of ten, i.e. c = 10^k, one may determine k as + // + // k = ceil( log_10( 2^(alpha - e - 1) ) ) + // = ceil( (alpha - e - 1) * log_10(2) ) + // + // From the paper: + // "In theory the result of the procedure could be wrong since c is rounded, + // and the computation itself is approximated [...]. In practice, however, + // this simple function is sufficient." + // + // For IEEE double precision floating-point numbers converted into + // normalized diyfp's w = f * 2^e, with q = 64, + // + // e >= -1022 (min IEEE exponent) + // -52 (p - 1) + // -52 (p - 1, possibly normalize denormal IEEE numbers) + // -11 (normalize the diyfp) + // = -1137 + // + // and + // + // e <= +1023 (max IEEE exponent) + // -52 (p - 1) + // -11 (normalize the diyfp) + // = 960 + // + // This binary exponent range [-1137,960] results in a decimal exponent + // range [-307,324]. One does not need to store a cached power for each + // k in this range. For each such k it suffices to find a cached power + // such that the exponent of the product lies in [alpha,gamma]. + // This implies that the difference of the decimal exponents of adjacent + // table entries must be less than or equal to + // + // floor( (gamma - alpha) * log_10(2) ) = 8. + // + // (A smaller distance gamma-alpha would require a larger table.) + + // NB: + // Actually this function returns c, such that -60 <= e_c + e + 64 <= -34. + + constexpr int kCachedPowersMinDecExp = -300; + constexpr int kCachedPowersDecStep = 8; + + static constexpr std::array kCachedPowers = + { + { + { 0xAB70FE17C79AC6CA, -1060, -300 }, + { 0xFF77B1FCBEBCDC4F, -1034, -292 }, + { 0xBE5691EF416BD60C, -1007, -284 }, + { 0x8DD01FAD907FFC3C, -980, -276 }, + { 0xD3515C2831559A83, -954, -268 }, + { 0x9D71AC8FADA6C9B5, -927, -260 }, + { 0xEA9C227723EE8BCB, -901, -252 }, + { 0xAECC49914078536D, -874, -244 }, + { 0x823C12795DB6CE57, -847, -236 }, + { 0xC21094364DFB5637, -821, -228 }, + { 0x9096EA6F3848984F, -794, -220 }, + { 0xD77485CB25823AC7, -768, -212 }, + { 0xA086CFCD97BF97F4, -741, -204 }, + { 0xEF340A98172AACE5, -715, -196 }, + { 0xB23867FB2A35B28E, -688, -188 }, + { 0x84C8D4DFD2C63F3B, -661, -180 }, + { 0xC5DD44271AD3CDBA, -635, -172 }, + { 0x936B9FCEBB25C996, -608, -164 }, + { 0xDBAC6C247D62A584, -582, -156 }, + { 0xA3AB66580D5FDAF6, -555, -148 }, + { 0xF3E2F893DEC3F126, -529, -140 }, + { 0xB5B5ADA8AAFF80B8, -502, -132 }, + { 0x87625F056C7C4A8B, -475, -124 }, + { 0xC9BCFF6034C13053, -449, -116 }, + { 0x964E858C91BA2655, -422, -108 }, + { 0xDFF9772470297EBD, -396, -100 }, + { 0xA6DFBD9FB8E5B88F, -369, -92 }, + { 0xF8A95FCF88747D94, -343, -84 }, + { 0xB94470938FA89BCF, -316, -76 }, + { 0x8A08F0F8BF0F156B, -289, -68 }, + { 0xCDB02555653131B6, -263, -60 }, + { 0x993FE2C6D07B7FAC, -236, -52 }, + { 0xE45C10C42A2B3B06, -210, -44 }, + { 0xAA242499697392D3, -183, -36 }, + { 0xFD87B5F28300CA0E, -157, -28 }, + { 0xBCE5086492111AEB, -130, -20 }, + { 0x8CBCCC096F5088CC, -103, -12 }, + { 0xD1B71758E219652C, -77, -4 }, + { 0x9C40000000000000, -50, 4 }, + { 0xE8D4A51000000000, -24, 12 }, + { 0xAD78EBC5AC620000, 3, 20 }, + { 0x813F3978F8940984, 30, 28 }, + { 0xC097CE7BC90715B3, 56, 36 }, + { 0x8F7E32CE7BEA5C70, 83, 44 }, + { 0xD5D238A4ABE98068, 109, 52 }, + { 0x9F4F2726179A2245, 136, 60 }, + { 0xED63A231D4C4FB27, 162, 68 }, + { 0xB0DE65388CC8ADA8, 189, 76 }, + { 0x83C7088E1AAB65DB, 216, 84 }, + { 0xC45D1DF942711D9A, 242, 92 }, + { 0x924D692CA61BE758, 269, 100 }, + { 0xDA01EE641A708DEA, 295, 108 }, + { 0xA26DA3999AEF774A, 322, 116 }, + { 0xF209787BB47D6B85, 348, 124 }, + { 0xB454E4A179DD1877, 375, 132 }, + { 0x865B86925B9BC5C2, 402, 140 }, + { 0xC83553C5C8965D3D, 428, 148 }, + { 0x952AB45CFA97A0B3, 455, 156 }, + { 0xDE469FBD99A05FE3, 481, 164 }, + { 0xA59BC234DB398C25, 508, 172 }, + { 0xF6C69A72A3989F5C, 534, 180 }, + { 0xB7DCBF5354E9BECE, 561, 188 }, + { 0x88FCF317F22241E2, 588, 196 }, + { 0xCC20CE9BD35C78A5, 614, 204 }, + { 0x98165AF37B2153DF, 641, 212 }, + { 0xE2A0B5DC971F303A, 667, 220 }, + { 0xA8D9D1535CE3B396, 694, 228 }, + { 0xFB9B7CD9A4A7443C, 720, 236 }, + { 0xBB764C4CA7A44410, 747, 244 }, + { 0x8BAB8EEFB6409C1A, 774, 252 }, + { 0xD01FEF10A657842C, 800, 260 }, + { 0x9B10A4E5E9913129, 827, 268 }, + { 0xE7109BFBA19C0C9D, 853, 276 }, + { 0xAC2820D9623BF429, 880, 284 }, + { 0x80444B5E7AA7CF85, 907, 292 }, + { 0xBF21E44003ACDD2D, 933, 300 }, + { 0x8E679C2F5E44FF8F, 960, 308 }, + { 0xD433179D9C8CB841, 986, 316 }, + { 0x9E19DB92B4E31BA9, 1013, 324 }, + } + }; + + // This computation gives exactly the same results for k as + // k = ceil((kAlpha - e - 1) * 0.30102999566398114) + // for |e| <= 1500, but doesn't require floating-point operations. + // NB: log_10(2) ~= 78913 / 2^18 + JSON_ASSERT(e >= -1500); + JSON_ASSERT(e <= 1500); + const int f = kAlpha - e - 1; + const int k = (f * 78913) / (1 << 18) + static_cast(f > 0); + + const int index = (-kCachedPowersMinDecExp + k + (kCachedPowersDecStep - 1)) / kCachedPowersDecStep; + JSON_ASSERT(index >= 0); + JSON_ASSERT(static_cast(index) < kCachedPowers.size()); + + const cached_power cached = kCachedPowers[static_cast(index)]; + JSON_ASSERT(kAlpha <= cached.e + e + 64); + JSON_ASSERT(kGamma >= cached.e + e + 64); + + return cached; +} + +/*! +For n != 0, returns k, such that pow10 := 10^(k-1) <= n < 10^k. +For n == 0, returns 1 and sets pow10 := 1. +*/ +inline int find_largest_pow10(const std::uint32_t n, std::uint32_t& pow10) +{ + // LCOV_EXCL_START + if (n >= 1000000000) + { + pow10 = 1000000000; + return 10; + } + // LCOV_EXCL_STOP + if (n >= 100000000) + { + pow10 = 100000000; + return 9; + } + if (n >= 10000000) + { + pow10 = 10000000; + return 8; + } + if (n >= 1000000) + { + pow10 = 1000000; + return 7; + } + if (n >= 100000) + { + pow10 = 100000; + return 6; + } + if (n >= 10000) + { + pow10 = 10000; + return 5; + } + if (n >= 1000) + { + pow10 = 1000; + return 4; + } + if (n >= 100) + { + pow10 = 100; + return 3; + } + if (n >= 10) + { + pow10 = 10; + return 2; + } + + pow10 = 1; + return 1; +} + +inline void grisu2_round(char* buf, int len, std::uint64_t dist, std::uint64_t delta, + std::uint64_t rest, std::uint64_t ten_k) +{ + JSON_ASSERT(len >= 1); + JSON_ASSERT(dist <= delta); + JSON_ASSERT(rest <= delta); + JSON_ASSERT(ten_k > 0); + + // <--------------------------- delta ----> + // <---- dist ---------> + // --------------[------------------+-------------------]-------------- + // M- w M+ + // + // ten_k + // <------> + // <---- rest ----> + // --------------[------------------+----+--------------]-------------- + // w V + // = buf * 10^k + // + // ten_k represents a unit-in-the-last-place in the decimal representation + // stored in buf. + // Decrement buf by ten_k while this takes buf closer to w. + + // The tests are written in this order to avoid overflow in unsigned + // integer arithmetic. + + while (rest < dist + && delta - rest >= ten_k + && (rest + ten_k < dist || dist - rest > rest + ten_k - dist)) + { + JSON_ASSERT(buf[len - 1] != '0'); + buf[len - 1]--; + rest += ten_k; + } +} + +/*! +Generates V = buffer * 10^decimal_exponent, such that M- <= V <= M+. +M- and M+ must be normalized and share the same exponent -60 <= e <= -32. +*/ +inline void grisu2_digit_gen(char* buffer, int& length, int& decimal_exponent, + diyfp M_minus, diyfp w, diyfp M_plus) +{ + static_assert(kAlpha >= -60, "internal error"); + static_assert(kGamma <= -32, "internal error"); + + // Generates the digits (and the exponent) of a decimal floating-point + // number V = buffer * 10^decimal_exponent in the range [M-, M+]. The diyfp's + // w, M- and M+ share the same exponent e, which satisfies alpha <= e <= gamma. + // + // <--------------------------- delta ----> + // <---- dist ---------> + // --------------[------------------+-------------------]-------------- + // M- w M+ + // + // Grisu2 generates the digits of M+ from left to right and stops as soon as + // V is in [M-,M+]. + + JSON_ASSERT(M_plus.e >= kAlpha); + JSON_ASSERT(M_plus.e <= kGamma); + + std::uint64_t delta = diyfp::sub(M_plus, M_minus).f; // (significand of (M+ - M-), implicit exponent is e) + std::uint64_t dist = diyfp::sub(M_plus, w ).f; // (significand of (M+ - w ), implicit exponent is e) + + // Split M+ = f * 2^e into two parts p1 and p2 (note: e < 0): + // + // M+ = f * 2^e + // = ((f div 2^-e) * 2^-e + (f mod 2^-e)) * 2^e + // = ((p1 ) * 2^-e + (p2 )) * 2^e + // = p1 + p2 * 2^e + + const diyfp one(std::uint64_t{1} << -M_plus.e, M_plus.e); + + auto p1 = static_cast(M_plus.f >> -one.e); // p1 = f div 2^-e (Since -e >= 32, p1 fits into a 32-bit int.) + std::uint64_t p2 = M_plus.f & (one.f - 1); // p2 = f mod 2^-e + + // 1) + // + // Generate the digits of the integral part p1 = d[n-1]...d[1]d[0] + + JSON_ASSERT(p1 > 0); + + std::uint32_t pow10{}; + const int k = find_largest_pow10(p1, pow10); + + // 10^(k-1) <= p1 < 10^k, pow10 = 10^(k-1) + // + // p1 = (p1 div 10^(k-1)) * 10^(k-1) + (p1 mod 10^(k-1)) + // = (d[k-1] ) * 10^(k-1) + (p1 mod 10^(k-1)) + // + // M+ = p1 + p2 * 2^e + // = d[k-1] * 10^(k-1) + (p1 mod 10^(k-1)) + p2 * 2^e + // = d[k-1] * 10^(k-1) + ((p1 mod 10^(k-1)) * 2^-e + p2) * 2^e + // = d[k-1] * 10^(k-1) + ( rest) * 2^e + // + // Now generate the digits d[n] of p1 from left to right (n = k-1,...,0) + // + // p1 = d[k-1]...d[n] * 10^n + d[n-1]...d[0] + // + // but stop as soon as + // + // rest * 2^e = (d[n-1]...d[0] * 2^-e + p2) * 2^e <= delta * 2^e + + int n = k; + while (n > 0) + { + // Invariants: + // M+ = buffer * 10^n + (p1 + p2 * 2^e) (buffer = 0 for n = k) + // pow10 = 10^(n-1) <= p1 < 10^n + // + const std::uint32_t d = p1 / pow10; // d = p1 div 10^(n-1) + const std::uint32_t r = p1 % pow10; // r = p1 mod 10^(n-1) + // + // M+ = buffer * 10^n + (d * 10^(n-1) + r) + p2 * 2^e + // = (buffer * 10 + d) * 10^(n-1) + (r + p2 * 2^e) + // + JSON_ASSERT(d <= 9); + buffer[length++] = static_cast('0' + d); // buffer := buffer * 10 + d + // + // M+ = buffer * 10^(n-1) + (r + p2 * 2^e) + // + p1 = r; + n--; + // + // M+ = buffer * 10^n + (p1 + p2 * 2^e) + // pow10 = 10^n + // + + // Now check if enough digits have been generated. + // Compute + // + // p1 + p2 * 2^e = (p1 * 2^-e + p2) * 2^e = rest * 2^e + // + // Note: + // Since rest and delta share the same exponent e, it suffices to + // compare the significands. + const std::uint64_t rest = (std::uint64_t{p1} << -one.e) + p2; + if (rest <= delta) + { + // V = buffer * 10^n, with M- <= V <= M+. + + decimal_exponent += n; + + // We may now just stop. But instead look if the buffer could be + // decremented to bring V closer to w. + // + // pow10 = 10^n is now 1 ulp in the decimal representation V. + // The rounding procedure works with diyfp's with an implicit + // exponent of e. + // + // 10^n = (10^n * 2^-e) * 2^e = ulp * 2^e + // + const std::uint64_t ten_n = std::uint64_t{pow10} << -one.e; + grisu2_round(buffer, length, dist, delta, rest, ten_n); + + return; + } + + pow10 /= 10; + // + // pow10 = 10^(n-1) <= p1 < 10^n + // Invariants restored. + } + + // 2) + // + // The digits of the integral part have been generated: + // + // M+ = d[k-1]...d[1]d[0] + p2 * 2^e + // = buffer + p2 * 2^e + // + // Now generate the digits of the fractional part p2 * 2^e. + // + // Note: + // No decimal point is generated: the exponent is adjusted instead. + // + // p2 actually represents the fraction + // + // p2 * 2^e + // = p2 / 2^-e + // = d[-1] / 10^1 + d[-2] / 10^2 + ... + // + // Now generate the digits d[-m] of p1 from left to right (m = 1,2,...) + // + // p2 * 2^e = d[-1]d[-2]...d[-m] * 10^-m + // + 10^-m * (d[-m-1] / 10^1 + d[-m-2] / 10^2 + ...) + // + // using + // + // 10^m * p2 = ((10^m * p2) div 2^-e) * 2^-e + ((10^m * p2) mod 2^-e) + // = ( d) * 2^-e + ( r) + // + // or + // 10^m * p2 * 2^e = d + r * 2^e + // + // i.e. + // + // M+ = buffer + p2 * 2^e + // = buffer + 10^-m * (d + r * 2^e) + // = (buffer * 10^m + d) * 10^-m + 10^-m * r * 2^e + // + // and stop as soon as 10^-m * r * 2^e <= delta * 2^e + + JSON_ASSERT(p2 > delta); + + int m = 0; + for (;;) + { + // Invariant: + // M+ = buffer * 10^-m + 10^-m * (d[-m-1] / 10 + d[-m-2] / 10^2 + ...) * 2^e + // = buffer * 10^-m + 10^-m * (p2 ) * 2^e + // = buffer * 10^-m + 10^-m * (1/10 * (10 * p2) ) * 2^e + // = buffer * 10^-m + 10^-m * (1/10 * ((10*p2 div 2^-e) * 2^-e + (10*p2 mod 2^-e)) * 2^e + // + JSON_ASSERT(p2 <= (std::numeric_limits::max)() / 10); + p2 *= 10; + const std::uint64_t d = p2 >> -one.e; // d = (10 * p2) div 2^-e + const std::uint64_t r = p2 & (one.f - 1); // r = (10 * p2) mod 2^-e + // + // M+ = buffer * 10^-m + 10^-m * (1/10 * (d * 2^-e + r) * 2^e + // = buffer * 10^-m + 10^-m * (1/10 * (d + r * 2^e)) + // = (buffer * 10 + d) * 10^(-m-1) + 10^(-m-1) * r * 2^e + // + JSON_ASSERT(d <= 9); + buffer[length++] = static_cast('0' + d); // buffer := buffer * 10 + d + // + // M+ = buffer * 10^(-m-1) + 10^(-m-1) * r * 2^e + // + p2 = r; + m++; + // + // M+ = buffer * 10^-m + 10^-m * p2 * 2^e + // Invariant restored. + + // Check if enough digits have been generated. + // + // 10^-m * p2 * 2^e <= delta * 2^e + // p2 * 2^e <= 10^m * delta * 2^e + // p2 <= 10^m * delta + delta *= 10; + dist *= 10; + if (p2 <= delta) + { + break; + } + } + + // V = buffer * 10^-m, with M- <= V <= M+. + + decimal_exponent -= m; + + // 1 ulp in the decimal representation is now 10^-m. + // Since delta and dist are now scaled by 10^m, we need to do the + // same with ulp in order to keep the units in sync. + // + // 10^m * 10^-m = 1 = 2^-e * 2^e = ten_m * 2^e + // + const std::uint64_t ten_m = one.f; + grisu2_round(buffer, length, dist, delta, p2, ten_m); + + // By construction this algorithm generates the shortest possible decimal + // number (Loitsch, Theorem 6.2) which rounds back to w. + // For an input number of precision p, at least + // + // N = 1 + ceil(p * log_10(2)) + // + // decimal digits are sufficient to identify all binary floating-point + // numbers (Matula, "In-and-Out conversions"). + // This implies that the algorithm does not produce more than N decimal + // digits. + // + // N = 17 for p = 53 (IEEE double precision) + // N = 9 for p = 24 (IEEE single precision) +} + +/*! +v = buf * 10^decimal_exponent +len is the length of the buffer (number of decimal digits) +The buffer must be large enough, i.e. >= max_digits10. +*/ +JSON_HEDLEY_NON_NULL(1) +inline void grisu2(char* buf, int& len, int& decimal_exponent, + diyfp m_minus, diyfp v, diyfp m_plus) +{ + JSON_ASSERT(m_plus.e == m_minus.e); + JSON_ASSERT(m_plus.e == v.e); + + // --------(-----------------------+-----------------------)-------- (A) + // m- v m+ + // + // --------------------(-----------+-----------------------)-------- (B) + // m- v m+ + // + // First scale v (and m- and m+) such that the exponent is in the range + // [alpha, gamma]. + + const cached_power cached = get_cached_power_for_binary_exponent(m_plus.e); + + const diyfp c_minus_k(cached.f, cached.e); // = c ~= 10^-k + + // The exponent of the products is = v.e + c_minus_k.e + q and is in the range [alpha,gamma] + const diyfp w = diyfp::mul(v, c_minus_k); + const diyfp w_minus = diyfp::mul(m_minus, c_minus_k); + const diyfp w_plus = diyfp::mul(m_plus, c_minus_k); + + // ----(---+---)---------------(---+---)---------------(---+---)---- + // w- w w+ + // = c*m- = c*v = c*m+ + // + // diyfp::mul rounds its result and c_minus_k is approximated too. w, w- and + // w+ are now off by a small amount. + // In fact: + // + // w - v * 10^k < 1 ulp + // + // To account for this inaccuracy, add resp. subtract 1 ulp. + // + // --------+---[---------------(---+---)---------------]---+-------- + // w- M- w M+ w+ + // + // Now any number in [M-, M+] (bounds included) will round to w when input, + // regardless of how the input rounding algorithm breaks ties. + // + // And digit_gen generates the shortest possible such number in [M-, M+]. + // Note that this does not mean that Grisu2 always generates the shortest + // possible number in the interval (m-, m+). + const diyfp M_minus(w_minus.f + 1, w_minus.e); + const diyfp M_plus (w_plus.f - 1, w_plus.e ); + + decimal_exponent = -cached.k; // = -(-k) = k + + grisu2_digit_gen(buf, len, decimal_exponent, M_minus, w, M_plus); +} + +/*! +v = buf * 10^decimal_exponent +len is the length of the buffer (number of decimal digits) +The buffer must be large enough, i.e. >= max_digits10. +*/ +template +JSON_HEDLEY_NON_NULL(1) +void grisu2(char* buf, int& len, int& decimal_exponent, FloatType value) +{ + static_assert(diyfp::kPrecision >= std::numeric_limits::digits + 3, + "internal error: not enough precision"); + + JSON_ASSERT(std::isfinite(value)); + JSON_ASSERT(value > 0); + + // If the neighbors (and boundaries) of 'value' are always computed for double-precision + // numbers, all float's can be recovered using strtod (and strtof). However, the resulting + // decimal representations are not exactly "short". + // + // The documentation for 'std::to_chars' (https://en.cppreference.com/w/cpp/utility/to_chars) + // says "value is converted to a string as if by std::sprintf in the default ("C") locale" + // and since sprintf promotes floats to doubles, I think this is exactly what 'std::to_chars' + // does. + // On the other hand, the documentation for 'std::to_chars' requires that "parsing the + // representation using the corresponding std::from_chars function recovers value exactly". That + // indicates that single precision floating-point numbers should be recovered using + // 'std::strtof'. + // + // NB: If the neighbors are computed for single-precision numbers, there is a single float + // (7.0385307e-26f) which can't be recovered using strtod. The resulting double precision + // value is off by 1 ulp. +#if 0 + const boundaries w = compute_boundaries(static_cast(value)); +#else + const boundaries w = compute_boundaries(value); +#endif + + grisu2(buf, len, decimal_exponent, w.minus, w.w, w.plus); +} + +/*! +@brief appends a decimal representation of e to buf +@return a pointer to the element following the exponent. +@pre -1000 < e < 1000 +*/ +JSON_HEDLEY_NON_NULL(1) +JSON_HEDLEY_RETURNS_NON_NULL +inline char* append_exponent(char* buf, int e) +{ + JSON_ASSERT(e > -1000); + JSON_ASSERT(e < 1000); + + if (e < 0) + { + e = -e; + *buf++ = '-'; + } + else + { + *buf++ = '+'; + } + + auto k = static_cast(e); + if (k < 10) + { + // Always print at least two digits in the exponent. + // This is for compatibility with printf("%g"). + *buf++ = '0'; + *buf++ = static_cast('0' + k); + } + else if (k < 100) + { + *buf++ = static_cast('0' + k / 10); + k %= 10; + *buf++ = static_cast('0' + k); + } + else + { + *buf++ = static_cast('0' + k / 100); + k %= 100; + *buf++ = static_cast('0' + k / 10); + k %= 10; + *buf++ = static_cast('0' + k); + } + + return buf; +} + +/*! +@brief prettify v = buf * 10^decimal_exponent + +If v is in the range [10^min_exp, 10^max_exp) it will be printed in fixed-point +notation. Otherwise it will be printed in exponential notation. + +@pre min_exp < 0 +@pre max_exp > 0 +*/ +JSON_HEDLEY_NON_NULL(1) +JSON_HEDLEY_RETURNS_NON_NULL +inline char* format_buffer(char* buf, int len, int decimal_exponent, + int min_exp, int max_exp) +{ + JSON_ASSERT(min_exp < 0); + JSON_ASSERT(max_exp > 0); + + const int k = len; + const int n = len + decimal_exponent; + + // v = buf * 10^(n-k) + // k is the length of the buffer (number of decimal digits) + // n is the position of the decimal point relative to the start of the buffer. + + if (k <= n && n <= max_exp) + { + // digits[000] + // len <= max_exp + 2 + + std::memset(buf + k, '0', static_cast(n) - static_cast(k)); + // Make it look like a floating-point number (#362, #378) + buf[n + 0] = '.'; + buf[n + 1] = '0'; + return buf + (static_cast(n) + 2); + } + + if (0 < n && n <= max_exp) + { + // dig.its + // len <= max_digits10 + 1 + + JSON_ASSERT(k > n); + + std::memmove(buf + (static_cast(n) + 1), buf + n, static_cast(k) - static_cast(n)); + buf[n] = '.'; + return buf + (static_cast(k) + 1U); + } + + if (min_exp < n && n <= 0) + { + // 0.[000]digits + // len <= 2 + (-min_exp - 1) + max_digits10 + + std::memmove(buf + (2 + static_cast(-n)), buf, static_cast(k)); + buf[0] = '0'; + buf[1] = '.'; + std::memset(buf + 2, '0', static_cast(-n)); + return buf + (2U + static_cast(-n) + static_cast(k)); + } + + if (k == 1) + { + // dE+123 + // len <= 1 + 5 + + buf += 1; + } + else + { + // d.igitsE+123 + // len <= max_digits10 + 1 + 5 + + std::memmove(buf + 2, buf + 1, static_cast(k) - 1); + buf[1] = '.'; + buf += 1 + static_cast(k); + } + + *buf++ = 'e'; + return append_exponent(buf, n - 1); +} + +} // namespace dtoa_impl + +/*! +@brief generates a decimal representation of the floating-point number value in [first, last). + +The format of the resulting decimal representation is similar to printf's %g +format. Returns an iterator pointing past-the-end of the decimal representation. + +@note The input number must be finite, i.e. NaN's and Inf's are not supported. +@note The buffer must be large enough. +@note The result is NOT null-terminated. +*/ +template +JSON_HEDLEY_NON_NULL(1, 2) +JSON_HEDLEY_RETURNS_NON_NULL +char* to_chars(char* first, const char* last, FloatType value) +{ + static_cast(last); // maybe unused - fix warning + JSON_ASSERT(std::isfinite(value)); + + // Use signbit(value) instead of (value < 0) since signbit works for -0. + if (std::signbit(value)) + { + value = -value; + *first++ = '-'; + } + +#ifdef __GNUC__ +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wfloat-equal" +#endif + if (value == 0) // +-0 + { + *first++ = '0'; + // Make it look like a floating-point number (#362, #378) + *first++ = '.'; + *first++ = '0'; + return first; + } +#ifdef __GNUC__ +#pragma GCC diagnostic pop +#endif + + JSON_ASSERT(last - first >= std::numeric_limits::max_digits10); + + // Compute v = buffer * 10^decimal_exponent. + // The decimal digits are stored in the buffer, which needs to be interpreted + // as an unsigned decimal integer. + // len is the length of the buffer, i.e. the number of decimal digits. + int len = 0; + int decimal_exponent = 0; + dtoa_impl::grisu2(first, len, decimal_exponent, value); + + JSON_ASSERT(len <= std::numeric_limits::max_digits10); + + // Format the buffer like printf("%.*g", prec, value) + constexpr int kMinExp = -4; + // Use digits10 here to increase compatibility with version 2. + constexpr int kMaxExp = std::numeric_limits::digits10; + + JSON_ASSERT(last - first >= kMaxExp + 2); + JSON_ASSERT(last - first >= 2 + (-kMinExp - 1) + std::numeric_limits::max_digits10); + JSON_ASSERT(last - first >= std::numeric_limits::max_digits10 + 6); + + return dtoa_impl::format_buffer(first, len, decimal_exponent, kMinExp, kMaxExp); +} + +} // namespace detail +} // namespace nlohmann + +// #include + +// #include + +// #include + +// #include + +// #include + +// #include + + +namespace nlohmann +{ +namespace detail +{ +/////////////////// +// serialization // +/////////////////// + +/// how to treat decoding errors +enum class error_handler_t +{ + strict, ///< throw a type_error exception in case of invalid UTF-8 + replace, ///< replace invalid UTF-8 sequences with U+FFFD + ignore ///< ignore invalid UTF-8 sequences +}; + +template +class serializer +{ + using string_t = typename BasicJsonType::string_t; + using number_float_t = typename BasicJsonType::number_float_t; + using number_integer_t = typename BasicJsonType::number_integer_t; + using number_unsigned_t = typename BasicJsonType::number_unsigned_t; + using binary_char_t = typename BasicJsonType::binary_t::value_type; + static constexpr std::uint8_t UTF8_ACCEPT = 0; + static constexpr std::uint8_t UTF8_REJECT = 1; + + public: + /*! + @param[in] s output stream to serialize to + @param[in] ichar indentation character to use + @param[in] error_handler_ how to react on decoding errors + */ + serializer(output_adapter_t s, const char ichar, + error_handler_t error_handler_ = error_handler_t::strict) + : o(std::move(s)) + , loc(std::localeconv()) + , thousands_sep(loc->thousands_sep == nullptr ? '\0' : std::char_traits::to_char_type(* (loc->thousands_sep))) + , decimal_point(loc->decimal_point == nullptr ? '\0' : std::char_traits::to_char_type(* (loc->decimal_point))) + , indent_char(ichar) + , indent_string(512, indent_char) + , error_handler(error_handler_) + {} + + // delete because of pointer members + serializer(const serializer&) = delete; + serializer& operator=(const serializer&) = delete; + serializer(serializer&&) = delete; + serializer& operator=(serializer&&) = delete; + ~serializer() = default; + + /*! + @brief internal implementation of the serialization function + + This function is called by the public member function dump and organizes + the serialization internally. The indentation level is propagated as + additional parameter. In case of arrays and objects, the function is + called recursively. + + - strings and object keys are escaped using `escape_string()` + - integer numbers are converted implicitly via `operator<<` + - floating-point numbers are converted to a string using `"%g"` format + - binary values are serialized as objects containing the subtype and the + byte array + + @param[in] val value to serialize + @param[in] pretty_print whether the output shall be pretty-printed + @param[in] ensure_ascii If @a ensure_ascii is true, all non-ASCII characters + in the output are escaped with `\uXXXX` sequences, and the result consists + of ASCII characters only. + @param[in] indent_step the indent level + @param[in] current_indent the current indent level (only used internally) + */ + void dump(const BasicJsonType& val, + const bool pretty_print, + const bool ensure_ascii, + const unsigned int indent_step, + const unsigned int current_indent = 0) + { + switch (val.m_type) + { + case value_t::object: + { + if (val.m_value.object->empty()) + { + o->write_characters("{}", 2); + return; + } + + if (pretty_print) + { + o->write_characters("{\n", 2); + + // variable to hold indentation for recursive calls + const auto new_indent = current_indent + indent_step; + if (JSON_HEDLEY_UNLIKELY(indent_string.size() < new_indent)) + { + indent_string.resize(indent_string.size() * 2, ' '); + } + + // first n-1 elements + auto i = val.m_value.object->cbegin(); + for (std::size_t cnt = 0; cnt < val.m_value.object->size() - 1; ++cnt, ++i) + { + o->write_characters(indent_string.c_str(), new_indent); + o->write_character('\"'); + dump_escaped(i->first, ensure_ascii); + o->write_characters("\": ", 3); + dump(i->second, true, ensure_ascii, indent_step, new_indent); + o->write_characters(",\n", 2); + } + + // last element + JSON_ASSERT(i != val.m_value.object->cend()); + JSON_ASSERT(std::next(i) == val.m_value.object->cend()); + o->write_characters(indent_string.c_str(), new_indent); + o->write_character('\"'); + dump_escaped(i->first, ensure_ascii); + o->write_characters("\": ", 3); + dump(i->second, true, ensure_ascii, indent_step, new_indent); + + o->write_character('\n'); + o->write_characters(indent_string.c_str(), current_indent); + o->write_character('}'); + } + else + { + o->write_character('{'); + + // first n-1 elements + auto i = val.m_value.object->cbegin(); + for (std::size_t cnt = 0; cnt < val.m_value.object->size() - 1; ++cnt, ++i) + { + o->write_character('\"'); + dump_escaped(i->first, ensure_ascii); + o->write_characters("\":", 2); + dump(i->second, false, ensure_ascii, indent_step, current_indent); + o->write_character(','); + } + + // last element + JSON_ASSERT(i != val.m_value.object->cend()); + JSON_ASSERT(std::next(i) == val.m_value.object->cend()); + o->write_character('\"'); + dump_escaped(i->first, ensure_ascii); + o->write_characters("\":", 2); + dump(i->second, false, ensure_ascii, indent_step, current_indent); + + o->write_character('}'); + } + + return; + } + + case value_t::array: + { + if (val.m_value.array->empty()) + { + o->write_characters("[]", 2); + return; + } + + if (pretty_print) + { + o->write_characters("[\n", 2); + + // variable to hold indentation for recursive calls + const auto new_indent = current_indent + indent_step; + if (JSON_HEDLEY_UNLIKELY(indent_string.size() < new_indent)) + { + indent_string.resize(indent_string.size() * 2, ' '); + } + + // first n-1 elements + for (auto i = val.m_value.array->cbegin(); + i != val.m_value.array->cend() - 1; ++i) + { + o->write_characters(indent_string.c_str(), new_indent); + dump(*i, true, ensure_ascii, indent_step, new_indent); + o->write_characters(",\n", 2); + } + + // last element + JSON_ASSERT(!val.m_value.array->empty()); + o->write_characters(indent_string.c_str(), new_indent); + dump(val.m_value.array->back(), true, ensure_ascii, indent_step, new_indent); + + o->write_character('\n'); + o->write_characters(indent_string.c_str(), current_indent); + o->write_character(']'); + } + else + { + o->write_character('['); + + // first n-1 elements + for (auto i = val.m_value.array->cbegin(); + i != val.m_value.array->cend() - 1; ++i) + { + dump(*i, false, ensure_ascii, indent_step, current_indent); + o->write_character(','); + } + + // last element + JSON_ASSERT(!val.m_value.array->empty()); + dump(val.m_value.array->back(), false, ensure_ascii, indent_step, current_indent); + + o->write_character(']'); + } + + return; + } + + case value_t::string: + { + o->write_character('\"'); + dump_escaped(*val.m_value.string, ensure_ascii); + o->write_character('\"'); + return; + } + + case value_t::binary: + { + if (pretty_print) + { + o->write_characters("{\n", 2); + + // variable to hold indentation for recursive calls + const auto new_indent = current_indent + indent_step; + if (JSON_HEDLEY_UNLIKELY(indent_string.size() < new_indent)) + { + indent_string.resize(indent_string.size() * 2, ' '); + } + + o->write_characters(indent_string.c_str(), new_indent); + + o->write_characters("\"bytes\": [", 10); + + if (!val.m_value.binary->empty()) + { + for (auto i = val.m_value.binary->cbegin(); + i != val.m_value.binary->cend() - 1; ++i) + { + dump_integer(*i); + o->write_characters(", ", 2); + } + dump_integer(val.m_value.binary->back()); + } + + o->write_characters("],\n", 3); + o->write_characters(indent_string.c_str(), new_indent); + + o->write_characters("\"subtype\": ", 11); + if (val.m_value.binary->has_subtype()) + { + dump_integer(val.m_value.binary->subtype()); + } + else + { + o->write_characters("null", 4); + } + o->write_character('\n'); + o->write_characters(indent_string.c_str(), current_indent); + o->write_character('}'); + } + else + { + o->write_characters("{\"bytes\":[", 10); + + if (!val.m_value.binary->empty()) + { + for (auto i = val.m_value.binary->cbegin(); + i != val.m_value.binary->cend() - 1; ++i) + { + dump_integer(*i); + o->write_character(','); + } + dump_integer(val.m_value.binary->back()); + } + + o->write_characters("],\"subtype\":", 12); + if (val.m_value.binary->has_subtype()) + { + dump_integer(val.m_value.binary->subtype()); + o->write_character('}'); + } + else + { + o->write_characters("null}", 5); + } + } + return; + } + + case value_t::boolean: + { + if (val.m_value.boolean) + { + o->write_characters("true", 4); + } + else + { + o->write_characters("false", 5); + } + return; + } + + case value_t::number_integer: + { + dump_integer(val.m_value.number_integer); + return; + } + + case value_t::number_unsigned: + { + dump_integer(val.m_value.number_unsigned); + return; + } + + case value_t::number_float: + { + dump_float(val.m_value.number_float); + return; + } + + case value_t::discarded: + { + o->write_characters("", 11); + return; + } + + case value_t::null: + { + o->write_characters("null", 4); + return; + } + + default: // LCOV_EXCL_LINE + JSON_ASSERT(false); // NOLINT(cert-dcl03-c,hicpp-static-assert,misc-static-assert) LCOV_EXCL_LINE + } + } + + JSON_PRIVATE_UNLESS_TESTED: + /*! + @brief dump escaped string + + Escape a string by replacing certain special characters by a sequence of an + escape character (backslash) and another character and other control + characters by a sequence of "\u" followed by a four-digit hex + representation. The escaped string is written to output stream @a o. + + @param[in] s the string to escape + @param[in] ensure_ascii whether to escape non-ASCII characters with + \uXXXX sequences + + @complexity Linear in the length of string @a s. + */ + void dump_escaped(const string_t& s, const bool ensure_ascii) + { + std::uint32_t codepoint{}; + std::uint8_t state = UTF8_ACCEPT; + std::size_t bytes = 0; // number of bytes written to string_buffer + + // number of bytes written at the point of the last valid byte + std::size_t bytes_after_last_accept = 0; + std::size_t undumped_chars = 0; + + for (std::size_t i = 0; i < s.size(); ++i) + { + const auto byte = static_cast(s[i]); + + switch (decode(state, codepoint, byte)) + { + case UTF8_ACCEPT: // decode found a new code point + { + switch (codepoint) + { + case 0x08: // backspace + { + string_buffer[bytes++] = '\\'; + string_buffer[bytes++] = 'b'; + break; + } + + case 0x09: // horizontal tab + { + string_buffer[bytes++] = '\\'; + string_buffer[bytes++] = 't'; + break; + } + + case 0x0A: // newline + { + string_buffer[bytes++] = '\\'; + string_buffer[bytes++] = 'n'; + break; + } + + case 0x0C: // formfeed + { + string_buffer[bytes++] = '\\'; + string_buffer[bytes++] = 'f'; + break; + } + + case 0x0D: // carriage return + { + string_buffer[bytes++] = '\\'; + string_buffer[bytes++] = 'r'; + break; + } + + case 0x22: // quotation mark + { + string_buffer[bytes++] = '\\'; + string_buffer[bytes++] = '\"'; + break; + } + + case 0x5C: // reverse solidus + { + string_buffer[bytes++] = '\\'; + string_buffer[bytes++] = '\\'; + break; + } + + default: + { + // escape control characters (0x00..0x1F) or, if + // ensure_ascii parameter is used, non-ASCII characters + if ((codepoint <= 0x1F) || (ensure_ascii && (codepoint >= 0x7F))) + { + if (codepoint <= 0xFFFF) + { + // NOLINTNEXTLINE(cppcoreguidelines-pro-type-vararg,hicpp-vararg) + static_cast((std::snprintf)(string_buffer.data() + bytes, 7, "\\u%04x", + static_cast(codepoint))); + bytes += 6; + } + else + { + // NOLINTNEXTLINE(cppcoreguidelines-pro-type-vararg,hicpp-vararg) + static_cast((std::snprintf)(string_buffer.data() + bytes, 13, "\\u%04x\\u%04x", + static_cast(0xD7C0u + (codepoint >> 10u)), + static_cast(0xDC00u + (codepoint & 0x3FFu)))); + bytes += 12; + } + } + else + { + // copy byte to buffer (all previous bytes + // been copied have in default case above) + string_buffer[bytes++] = s[i]; + } + break; + } + } + + // write buffer and reset index; there must be 13 bytes + // left, as this is the maximal number of bytes to be + // written ("\uxxxx\uxxxx\0") for one code point + if (string_buffer.size() - bytes < 13) + { + o->write_characters(string_buffer.data(), bytes); + bytes = 0; + } + + // remember the byte position of this accept + bytes_after_last_accept = bytes; + undumped_chars = 0; + break; + } + + case UTF8_REJECT: // decode found invalid UTF-8 byte + { + switch (error_handler) + { + case error_handler_t::strict: + { + JSON_THROW(type_error::create(316, "invalid UTF-8 byte at index " + std::to_string(i) + ": 0x" + hex_bytes(byte | 0), BasicJsonType())); + } + + case error_handler_t::ignore: + case error_handler_t::replace: + { + // in case we saw this character the first time, we + // would like to read it again, because the byte + // may be OK for itself, but just not OK for the + // previous sequence + if (undumped_chars > 0) + { + --i; + } + + // reset length buffer to the last accepted index; + // thus removing/ignoring the invalid characters + bytes = bytes_after_last_accept; + + if (error_handler == error_handler_t::replace) + { + // add a replacement character + if (ensure_ascii) + { + string_buffer[bytes++] = '\\'; + string_buffer[bytes++] = 'u'; + string_buffer[bytes++] = 'f'; + string_buffer[bytes++] = 'f'; + string_buffer[bytes++] = 'f'; + string_buffer[bytes++] = 'd'; + } + else + { + string_buffer[bytes++] = detail::binary_writer::to_char_type('\xEF'); + string_buffer[bytes++] = detail::binary_writer::to_char_type('\xBF'); + string_buffer[bytes++] = detail::binary_writer::to_char_type('\xBD'); + } + + // write buffer and reset index; there must be 13 bytes + // left, as this is the maximal number of bytes to be + // written ("\uxxxx\uxxxx\0") for one code point + if (string_buffer.size() - bytes < 13) + { + o->write_characters(string_buffer.data(), bytes); + bytes = 0; + } + + bytes_after_last_accept = bytes; + } + + undumped_chars = 0; + + // continue processing the string + state = UTF8_ACCEPT; + break; + } + + default: // LCOV_EXCL_LINE + JSON_ASSERT(false); // NOLINT(cert-dcl03-c,hicpp-static-assert,misc-static-assert) LCOV_EXCL_LINE + } + break; + } + + default: // decode found yet incomplete multi-byte code point + { + if (!ensure_ascii) + { + // code point will not be escaped - copy byte to buffer + string_buffer[bytes++] = s[i]; + } + ++undumped_chars; + break; + } + } + } + + // we finished processing the string + if (JSON_HEDLEY_LIKELY(state == UTF8_ACCEPT)) + { + // write buffer + if (bytes > 0) + { + o->write_characters(string_buffer.data(), bytes); + } + } + else + { + // we finish reading, but do not accept: string was incomplete + switch (error_handler) + { + case error_handler_t::strict: + { + JSON_THROW(type_error::create(316, "incomplete UTF-8 string; last byte: 0x" + hex_bytes(static_cast(s.back() | 0)), BasicJsonType())); + } + + case error_handler_t::ignore: + { + // write all accepted bytes + o->write_characters(string_buffer.data(), bytes_after_last_accept); + break; + } + + case error_handler_t::replace: + { + // write all accepted bytes + o->write_characters(string_buffer.data(), bytes_after_last_accept); + // add a replacement character + if (ensure_ascii) + { + o->write_characters("\\ufffd", 6); + } + else + { + o->write_characters("\xEF\xBF\xBD", 3); + } + break; + } + + default: // LCOV_EXCL_LINE + JSON_ASSERT(false); // NOLINT(cert-dcl03-c,hicpp-static-assert,misc-static-assert) LCOV_EXCL_LINE + } + } + } + + private: + /*! + @brief count digits + + Count the number of decimal (base 10) digits for an input unsigned integer. + + @param[in] x unsigned integer number to count its digits + @return number of decimal digits + */ + inline unsigned int count_digits(number_unsigned_t x) noexcept + { + unsigned int n_digits = 1; + for (;;) + { + if (x < 10) + { + return n_digits; + } + if (x < 100) + { + return n_digits + 1; + } + if (x < 1000) + { + return n_digits + 2; + } + if (x < 10000) + { + return n_digits + 3; + } + x = x / 10000u; + n_digits += 4; + } + } + + /*! + * @brief convert a byte to a uppercase hex representation + * @param[in] byte byte to represent + * @return representation ("00".."FF") + */ + static std::string hex_bytes(std::uint8_t byte) + { + std::string result = "FF"; + constexpr const char* nibble_to_hex = "0123456789ABCDEF"; + result[0] = nibble_to_hex[byte / 16]; + result[1] = nibble_to_hex[byte % 16]; + return result; + } + + // templates to avoid warnings about useless casts + template ::value, int> = 0> + bool is_negative_number(NumberType x) + { + return x < 0; + } + + template < typename NumberType, enable_if_t ::value, int > = 0 > + bool is_negative_number(NumberType /*unused*/) + { + return false; + } + + /*! + @brief dump an integer + + Dump a given integer to output stream @a o. Works internally with + @a number_buffer. + + @param[in] x integer number (signed or unsigned) to dump + @tparam NumberType either @a number_integer_t or @a number_unsigned_t + */ + template < typename NumberType, detail::enable_if_t < + std::is_integral::value || + std::is_same::value || + std::is_same::value || + std::is_same::value, + int > = 0 > + void dump_integer(NumberType x) + { + static constexpr std::array, 100> digits_to_99 + { + { + {{'0', '0'}}, {{'0', '1'}}, {{'0', '2'}}, {{'0', '3'}}, {{'0', '4'}}, {{'0', '5'}}, {{'0', '6'}}, {{'0', '7'}}, {{'0', '8'}}, {{'0', '9'}}, + {{'1', '0'}}, {{'1', '1'}}, {{'1', '2'}}, {{'1', '3'}}, {{'1', '4'}}, {{'1', '5'}}, {{'1', '6'}}, {{'1', '7'}}, {{'1', '8'}}, {{'1', '9'}}, + {{'2', '0'}}, {{'2', '1'}}, {{'2', '2'}}, {{'2', '3'}}, {{'2', '4'}}, {{'2', '5'}}, {{'2', '6'}}, {{'2', '7'}}, {{'2', '8'}}, {{'2', '9'}}, + {{'3', '0'}}, {{'3', '1'}}, {{'3', '2'}}, {{'3', '3'}}, {{'3', '4'}}, {{'3', '5'}}, {{'3', '6'}}, {{'3', '7'}}, {{'3', '8'}}, {{'3', '9'}}, + {{'4', '0'}}, {{'4', '1'}}, {{'4', '2'}}, {{'4', '3'}}, {{'4', '4'}}, {{'4', '5'}}, {{'4', '6'}}, {{'4', '7'}}, {{'4', '8'}}, {{'4', '9'}}, + {{'5', '0'}}, {{'5', '1'}}, {{'5', '2'}}, {{'5', '3'}}, {{'5', '4'}}, {{'5', '5'}}, {{'5', '6'}}, {{'5', '7'}}, {{'5', '8'}}, {{'5', '9'}}, + {{'6', '0'}}, {{'6', '1'}}, {{'6', '2'}}, {{'6', '3'}}, {{'6', '4'}}, {{'6', '5'}}, {{'6', '6'}}, {{'6', '7'}}, {{'6', '8'}}, {{'6', '9'}}, + {{'7', '0'}}, {{'7', '1'}}, {{'7', '2'}}, {{'7', '3'}}, {{'7', '4'}}, {{'7', '5'}}, {{'7', '6'}}, {{'7', '7'}}, {{'7', '8'}}, {{'7', '9'}}, + {{'8', '0'}}, {{'8', '1'}}, {{'8', '2'}}, {{'8', '3'}}, {{'8', '4'}}, {{'8', '5'}}, {{'8', '6'}}, {{'8', '7'}}, {{'8', '8'}}, {{'8', '9'}}, + {{'9', '0'}}, {{'9', '1'}}, {{'9', '2'}}, {{'9', '3'}}, {{'9', '4'}}, {{'9', '5'}}, {{'9', '6'}}, {{'9', '7'}}, {{'9', '8'}}, {{'9', '9'}}, + } + }; + + // special case for "0" + if (x == 0) + { + o->write_character('0'); + return; + } + + // use a pointer to fill the buffer + auto buffer_ptr = number_buffer.begin(); // NOLINT(llvm-qualified-auto,readability-qualified-auto,cppcoreguidelines-pro-type-vararg,hicpp-vararg) + + number_unsigned_t abs_value; + + unsigned int n_chars{}; + + if (is_negative_number(x)) + { + *buffer_ptr = '-'; + abs_value = remove_sign(static_cast(x)); + + // account one more byte for the minus sign + n_chars = 1 + count_digits(abs_value); + } + else + { + abs_value = static_cast(x); + n_chars = count_digits(abs_value); + } + + // spare 1 byte for '\0' + JSON_ASSERT(n_chars < number_buffer.size() - 1); + + // jump to the end to generate the string from backward, + // so we later avoid reversing the result + buffer_ptr += n_chars; + + // Fast int2ascii implementation inspired by "Fastware" talk by Andrei Alexandrescu + // See: https://www.youtube.com/watch?v=o4-CwDo2zpg + while (abs_value >= 100) + { + const auto digits_index = static_cast((abs_value % 100)); + abs_value /= 100; + *(--buffer_ptr) = digits_to_99[digits_index][1]; + *(--buffer_ptr) = digits_to_99[digits_index][0]; + } + + if (abs_value >= 10) + { + const auto digits_index = static_cast(abs_value); + *(--buffer_ptr) = digits_to_99[digits_index][1]; + *(--buffer_ptr) = digits_to_99[digits_index][0]; + } + else + { + *(--buffer_ptr) = static_cast('0' + abs_value); + } + + o->write_characters(number_buffer.data(), n_chars); + } + + /*! + @brief dump a floating-point number + + Dump a given floating-point number to output stream @a o. Works internally + with @a number_buffer. + + @param[in] x floating-point number to dump + */ + void dump_float(number_float_t x) + { + // NaN / inf + if (!std::isfinite(x)) + { + o->write_characters("null", 4); + return; + } + + // If number_float_t is an IEEE-754 single or double precision number, + // use the Grisu2 algorithm to produce short numbers which are + // guaranteed to round-trip, using strtof and strtod, resp. + // + // NB: The test below works if == . + static constexpr bool is_ieee_single_or_double + = (std::numeric_limits::is_iec559 && std::numeric_limits::digits == 24 && std::numeric_limits::max_exponent == 128) || + (std::numeric_limits::is_iec559 && std::numeric_limits::digits == 53 && std::numeric_limits::max_exponent == 1024); + + dump_float(x, std::integral_constant()); + } + + void dump_float(number_float_t x, std::true_type /*is_ieee_single_or_double*/) + { + auto* begin = number_buffer.data(); + auto* end = ::nlohmann::detail::to_chars(begin, begin + number_buffer.size(), x); + + o->write_characters(begin, static_cast(end - begin)); + } + + void dump_float(number_float_t x, std::false_type /*is_ieee_single_or_double*/) + { + // get number of digits for a float -> text -> float round-trip + static constexpr auto d = std::numeric_limits::max_digits10; + + // the actual conversion + // NOLINTNEXTLINE(cppcoreguidelines-pro-type-vararg,hicpp-vararg) + std::ptrdiff_t len = (std::snprintf)(number_buffer.data(), number_buffer.size(), "%.*g", d, x); + + // negative value indicates an error + JSON_ASSERT(len > 0); + // check if buffer was large enough + JSON_ASSERT(static_cast(len) < number_buffer.size()); + + // erase thousands separator + if (thousands_sep != '\0') + { + // NOLINTNEXTLINE(readability-qualified-auto,llvm-qualified-auto): std::remove returns an iterator, see https://github.com/nlohmann/json/issues/3081 + const auto end = std::remove(number_buffer.begin(), number_buffer.begin() + len, thousands_sep); + std::fill(end, number_buffer.end(), '\0'); + JSON_ASSERT((end - number_buffer.begin()) <= len); + len = (end - number_buffer.begin()); + } + + // convert decimal point to '.' + if (decimal_point != '\0' && decimal_point != '.') + { + // NOLINTNEXTLINE(readability-qualified-auto,llvm-qualified-auto): std::find returns an iterator, see https://github.com/nlohmann/json/issues/3081 + const auto dec_pos = std::find(number_buffer.begin(), number_buffer.end(), decimal_point); + if (dec_pos != number_buffer.end()) + { + *dec_pos = '.'; + } + } + + o->write_characters(number_buffer.data(), static_cast(len)); + + // determine if we need to append ".0" + const bool value_is_int_like = + std::none_of(number_buffer.begin(), number_buffer.begin() + len + 1, + [](char c) + { + return c == '.' || c == 'e'; + }); + + if (value_is_int_like) + { + o->write_characters(".0", 2); + } + } + + /*! + @brief check whether a string is UTF-8 encoded + + The function checks each byte of a string whether it is UTF-8 encoded. The + result of the check is stored in the @a state parameter. The function must + be called initially with state 0 (accept). State 1 means the string must + be rejected, because the current byte is not allowed. If the string is + completely processed, but the state is non-zero, the string ended + prematurely; that is, the last byte indicated more bytes should have + followed. + + @param[in,out] state the state of the decoding + @param[in,out] codep codepoint (valid only if resulting state is UTF8_ACCEPT) + @param[in] byte next byte to decode + @return new state + + @note The function has been edited: a std::array is used. + + @copyright Copyright (c) 2008-2009 Bjoern Hoehrmann + @sa http://bjoern.hoehrmann.de/utf-8/decoder/dfa/ + */ + static std::uint8_t decode(std::uint8_t& state, std::uint32_t& codep, const std::uint8_t byte) noexcept + { + static const std::array utf8d = + { + { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 00..1F + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 20..3F + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 40..5F + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 60..7F + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, // 80..9F + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, // A0..BF + 8, 8, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, // C0..DF + 0xA, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x4, 0x3, 0x3, // E0..EF + 0xB, 0x6, 0x6, 0x6, 0x5, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, // F0..FF + 0x0, 0x1, 0x2, 0x3, 0x5, 0x8, 0x7, 0x1, 0x1, 0x1, 0x4, 0x6, 0x1, 0x1, 0x1, 0x1, // s0..s0 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, // s1..s2 + 1, 2, 1, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, // s3..s4 + 1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 1, 1, 1, 1, 1, // s5..s6 + 1, 3, 1, 1, 1, 1, 1, 3, 1, 3, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 // s7..s8 + } + }; + + JSON_ASSERT(byte < utf8d.size()); + const std::uint8_t type = utf8d[byte]; + + codep = (state != UTF8_ACCEPT) + ? (byte & 0x3fu) | (codep << 6u) + : (0xFFu >> type) & (byte); + + std::size_t index = 256u + static_cast(state) * 16u + static_cast(type); + JSON_ASSERT(index < 400); + state = utf8d[index]; + return state; + } + + /* + * Overload to make the compiler happy while it is instantiating + * dump_integer for number_unsigned_t. + * Must never be called. + */ + number_unsigned_t remove_sign(number_unsigned_t x) + { + JSON_ASSERT(false); // NOLINT(cert-dcl03-c,hicpp-static-assert,misc-static-assert) LCOV_EXCL_LINE + return x; // LCOV_EXCL_LINE + } + + /* + * Helper function for dump_integer + * + * This function takes a negative signed integer and returns its absolute + * value as unsigned integer. The plus/minus shuffling is necessary as we can + * not directly remove the sign of an arbitrary signed integer as the + * absolute values of INT_MIN and INT_MAX are usually not the same. See + * #1708 for details. + */ + inline number_unsigned_t remove_sign(number_integer_t x) noexcept + { + JSON_ASSERT(x < 0 && x < (std::numeric_limits::max)()); // NOLINT(misc-redundant-expression) + return static_cast(-(x + 1)) + 1; + } + + private: + /// the output of the serializer + output_adapter_t o = nullptr; + + /// a (hopefully) large enough character buffer + std::array number_buffer{{}}; + + /// the locale + const std::lconv* loc = nullptr; + /// the locale's thousand separator character + const char thousands_sep = '\0'; + /// the locale's decimal point character + const char decimal_point = '\0'; + + /// string buffer + std::array string_buffer{{}}; + + /// the indentation character + const char indent_char; + /// the indentation string + string_t indent_string; + + /// error_handler how to react on decoding errors + const error_handler_t error_handler; +}; +} // namespace detail +} // namespace nlohmann + +// #include + +// #include + +// #include + + +#include // less +#include // initializer_list +#include // input_iterator_tag, iterator_traits +#include // allocator +#include // for out_of_range +#include // enable_if, is_convertible +#include // pair +#include // vector + +// #include + + +namespace nlohmann +{ + +/// ordered_map: a minimal map-like container that preserves insertion order +/// for use within nlohmann::basic_json +template , + class Allocator = std::allocator>> + struct ordered_map : std::vector, Allocator> +{ + using key_type = Key; + using mapped_type = T; + using Container = std::vector, Allocator>; + using iterator = typename Container::iterator; + using const_iterator = typename Container::const_iterator; + using size_type = typename Container::size_type; + using value_type = typename Container::value_type; + + // Explicit constructors instead of `using Container::Container` + // otherwise older compilers choke on it (GCC <= 5.5, xcode <= 9.4) + ordered_map(const Allocator& alloc = Allocator()) : Container{alloc} {} + template + ordered_map(It first, It last, const Allocator& alloc = Allocator()) + : Container{first, last, alloc} {} + ordered_map(std::initializer_list init, const Allocator& alloc = Allocator() ) + : Container{init, alloc} {} + + std::pair emplace(const key_type& key, T&& t) + { + for (auto it = this->begin(); it != this->end(); ++it) + { + if (it->first == key) + { + return {it, false}; + } + } + Container::emplace_back(key, t); + return {--this->end(), true}; + } + + T& operator[](const Key& key) + { + return emplace(key, T{}).first->second; + } + + const T& operator[](const Key& key) const + { + return at(key); + } + + T& at(const Key& key) + { + for (auto it = this->begin(); it != this->end(); ++it) + { + if (it->first == key) + { + return it->second; + } + } + + JSON_THROW(std::out_of_range("key not found")); + } + + const T& at(const Key& key) const + { + for (auto it = this->begin(); it != this->end(); ++it) + { + if (it->first == key) + { + return it->second; + } + } + + JSON_THROW(std::out_of_range("key not found")); + } + + size_type erase(const Key& key) + { + for (auto it = this->begin(); it != this->end(); ++it) + { + if (it->first == key) + { + // Since we cannot move const Keys, re-construct them in place + for (auto next = it; ++next != this->end(); ++it) + { + it->~value_type(); // Destroy but keep allocation + new (&*it) value_type{std::move(*next)}; + } + Container::pop_back(); + return 1; + } + } + return 0; + } + + iterator erase(iterator pos) + { + return erase(pos, std::next(pos)); + } + + iterator erase(iterator first, iterator last) + { + const auto elements_affected = std::distance(first, last); + const auto offset = std::distance(Container::begin(), first); + + // This is the start situation. We need to delete elements_affected + // elements (3 in this example: e, f, g), and need to return an + // iterator past the last deleted element (h in this example). + // Note that offset is the distance from the start of the vector + // to first. We will need this later. + + // [ a, b, c, d, e, f, g, h, i, j ] + // ^ ^ + // first last + + // Since we cannot move const Keys, we re-construct them in place. + // We start at first and re-construct (viz. copy) the elements from + // the back of the vector. Example for first iteration: + + // ,--------. + // v | destroy e and re-construct with h + // [ a, b, c, d, e, f, g, h, i, j ] + // ^ ^ + // it it + elements_affected + + for (auto it = first; std::next(it, elements_affected) != Container::end(); ++it) + { + it->~value_type(); // destroy but keep allocation + new (&*it) value_type{std::move(*std::next(it, elements_affected))}; // "move" next element to it + } + + // [ a, b, c, d, h, i, j, h, i, j ] + // ^ ^ + // first last + + // remove the unneeded elements at the end of the vector + Container::resize(this->size() - static_cast(elements_affected)); + + // [ a, b, c, d, h, i, j ] + // ^ ^ + // first last + + // first is now pointing past the last deleted element, but we cannot + // use this iterator, because it may have been invalidated by the + // resize call. Instead, we can return begin() + offset. + return Container::begin() + offset; + } + + size_type count(const Key& key) const + { + for (auto it = this->begin(); it != this->end(); ++it) + { + if (it->first == key) + { + return 1; + } + } + return 0; + } + + iterator find(const Key& key) + { + for (auto it = this->begin(); it != this->end(); ++it) + { + if (it->first == key) + { + return it; + } + } + return Container::end(); + } + + const_iterator find(const Key& key) const + { + for (auto it = this->begin(); it != this->end(); ++it) + { + if (it->first == key) + { + return it; + } + } + return Container::end(); + } + + std::pair insert( value_type&& value ) + { + return emplace(value.first, std::move(value.second)); + } + + std::pair insert( const value_type& value ) + { + for (auto it = this->begin(); it != this->end(); ++it) + { + if (it->first == value.first) + { + return {it, false}; + } + } + Container::push_back(value); + return {--this->end(), true}; + } + + template + using require_input_iter = typename std::enable_if::iterator_category, + std::input_iterator_tag>::value>::type; + + template> + void insert(InputIt first, InputIt last) + { + for (auto it = first; it != last; ++it) + { + insert(*it); + } + } +}; + +} // namespace nlohmann + + +#if defined(JSON_HAS_CPP_17) + #include +#endif + +/*! +@brief namespace for Niels Lohmann +@see https://github.com/nlohmann +@since version 1.0.0 +*/ +namespace nlohmann +{ + +/*! +@brief a class to store JSON values + +@internal +@invariant The member variables @a m_value and @a m_type have the following +relationship: +- If `m_type == value_t::object`, then `m_value.object != nullptr`. +- If `m_type == value_t::array`, then `m_value.array != nullptr`. +- If `m_type == value_t::string`, then `m_value.string != nullptr`. +The invariants are checked by member function assert_invariant(). + +@note ObjectType trick from https://stackoverflow.com/a/9860911 +@endinternal + +@since version 1.0.0 + +@nosubgrouping +*/ +NLOHMANN_BASIC_JSON_TPL_DECLARATION +class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-special-member-functions) +{ + private: + template friend struct detail::external_constructor; + friend ::nlohmann::json_pointer; + + template + friend class ::nlohmann::detail::parser; + friend ::nlohmann::detail::serializer; + template + friend class ::nlohmann::detail::iter_impl; + template + friend class ::nlohmann::detail::binary_writer; + template + friend class ::nlohmann::detail::binary_reader; + template + friend class ::nlohmann::detail::json_sax_dom_parser; + template + friend class ::nlohmann::detail::json_sax_dom_callback_parser; + friend class ::nlohmann::detail::exception; + + /// workaround type for MSVC + using basic_json_t = NLOHMANN_BASIC_JSON_TPL; + + JSON_PRIVATE_UNLESS_TESTED: + // convenience aliases for types residing in namespace detail; + using lexer = ::nlohmann::detail::lexer_base; + + template + static ::nlohmann::detail::parser parser( + InputAdapterType adapter, + detail::parser_callback_tcb = nullptr, + const bool allow_exceptions = true, + const bool ignore_comments = false + ) + { + return ::nlohmann::detail::parser(std::move(adapter), + std::move(cb), allow_exceptions, ignore_comments); + } + + private: + using primitive_iterator_t = ::nlohmann::detail::primitive_iterator_t; + template + using internal_iterator = ::nlohmann::detail::internal_iterator; + template + using iter_impl = ::nlohmann::detail::iter_impl; + template + using iteration_proxy = ::nlohmann::detail::iteration_proxy; + template using json_reverse_iterator = ::nlohmann::detail::json_reverse_iterator; + + template + using output_adapter_t = ::nlohmann::detail::output_adapter_t; + + template + using binary_reader = ::nlohmann::detail::binary_reader; + template using binary_writer = ::nlohmann::detail::binary_writer; + + JSON_PRIVATE_UNLESS_TESTED: + using serializer = ::nlohmann::detail::serializer; + + public: + using value_t = detail::value_t; + /// JSON Pointer, see @ref nlohmann::json_pointer + using json_pointer = ::nlohmann::json_pointer; + template + using json_serializer = JSONSerializer; + /// how to treat decoding errors + using error_handler_t = detail::error_handler_t; + /// how to treat CBOR tags + using cbor_tag_handler_t = detail::cbor_tag_handler_t; + /// helper type for initializer lists of basic_json values + using initializer_list_t = std::initializer_list>; + + using input_format_t = detail::input_format_t; + /// SAX interface type, see @ref nlohmann::json_sax + using json_sax_t = json_sax; + + //////////////// + // exceptions // + //////////////// + + /// @name exceptions + /// Classes to implement user-defined exceptions. + /// @{ + + using exception = detail::exception; + using parse_error = detail::parse_error; + using invalid_iterator = detail::invalid_iterator; + using type_error = detail::type_error; + using out_of_range = detail::out_of_range; + using other_error = detail::other_error; + + /// @} + + + ///////////////////// + // container types // + ///////////////////// + + /// @name container types + /// The canonic container types to use @ref basic_json like any other STL + /// container. + /// @{ + + /// the type of elements in a basic_json container + using value_type = basic_json; + + /// the type of an element reference + using reference = value_type&; + /// the type of an element const reference + using const_reference = const value_type&; + + /// a type to represent differences between iterators + using difference_type = std::ptrdiff_t; + /// a type to represent container sizes + using size_type = std::size_t; + + /// the allocator type + using allocator_type = AllocatorType; + + /// the type of an element pointer + using pointer = typename std::allocator_traits::pointer; + /// the type of an element const pointer + using const_pointer = typename std::allocator_traits::const_pointer; + + /// an iterator for a basic_json container + using iterator = iter_impl; + /// a const iterator for a basic_json container + using const_iterator = iter_impl; + /// a reverse iterator for a basic_json container + using reverse_iterator = json_reverse_iterator; + /// a const reverse iterator for a basic_json container + using const_reverse_iterator = json_reverse_iterator; + + /// @} + + + /// @brief returns the allocator associated with the container + /// @sa https://json.nlohmann.me/api/basic_json/get_allocator/ + static allocator_type get_allocator() + { + return allocator_type(); + } + + /// @brief returns version information on the library + /// @sa https://json.nlohmann.me/api/basic_json/meta/ + JSON_HEDLEY_WARN_UNUSED_RESULT + static basic_json meta() + { + basic_json result; + + result["copyright"] = "(C) 2013-2022 Niels Lohmann"; + result["name"] = "JSON for Modern C++"; + result["url"] = "https://github.com/nlohmann/json"; + result["version"]["string"] = + std::to_string(NLOHMANN_JSON_VERSION_MAJOR) + "." + + std::to_string(NLOHMANN_JSON_VERSION_MINOR) + "." + + std::to_string(NLOHMANN_JSON_VERSION_PATCH); + result["version"]["major"] = NLOHMANN_JSON_VERSION_MAJOR; + result["version"]["minor"] = NLOHMANN_JSON_VERSION_MINOR; + result["version"]["patch"] = NLOHMANN_JSON_VERSION_PATCH; + +#ifdef _WIN32 + result["platform"] = "win32"; +#elif defined __linux__ + result["platform"] = "linux"; +#elif defined __APPLE__ + result["platform"] = "apple"; +#elif defined __unix__ + result["platform"] = "unix"; +#else + result["platform"] = "unknown"; +#endif + +#if defined(__ICC) || defined(__INTEL_COMPILER) + result["compiler"] = {{"family", "icc"}, {"version", __INTEL_COMPILER}}; +#elif defined(__clang__) + result["compiler"] = {{"family", "clang"}, {"version", __clang_version__}}; +#elif defined(__GNUC__) || defined(__GNUG__) + result["compiler"] = {{"family", "gcc"}, {"version", std::to_string(__GNUC__) + "." + std::to_string(__GNUC_MINOR__) + "." + std::to_string(__GNUC_PATCHLEVEL__)}}; +#elif defined(__HP_cc) || defined(__HP_aCC) + result["compiler"] = "hp" +#elif defined(__IBMCPP__) + result["compiler"] = {{"family", "ilecpp"}, {"version", __IBMCPP__}}; +#elif defined(_MSC_VER) + result["compiler"] = {{"family", "msvc"}, {"version", _MSC_VER}}; +#elif defined(__PGI) + result["compiler"] = {{"family", "pgcpp"}, {"version", __PGI}}; +#elif defined(__SUNPRO_CC) + result["compiler"] = {{"family", "sunpro"}, {"version", __SUNPRO_CC}}; +#else + result["compiler"] = {{"family", "unknown"}, {"version", "unknown"}}; +#endif + +#ifdef __cplusplus + result["compiler"]["c++"] = std::to_string(__cplusplus); +#else + result["compiler"]["c++"] = "unknown"; +#endif + return result; + } + + + /////////////////////////// + // JSON value data types // + /////////////////////////// + + /// @name JSON value data types + /// The data types to store a JSON value. These types are derived from + /// the template arguments passed to class @ref basic_json. + /// @{ + + /// @brief object key comparator type + /// @sa https://json.nlohmann.me/api/basic_json/object_comparator_t/ +#if defined(JSON_HAS_CPP_14) + // Use transparent comparator if possible, combined with perfect forwarding + // on find() and count() calls prevents unnecessary string construction. + using object_comparator_t = std::less<>; +#else + using object_comparator_t = std::less; +#endif + + /// @brief a type for an object + /// @sa https://json.nlohmann.me/api/basic_json/object_t/ + using object_t = ObjectType>>; + + /// @brief a type for an array + /// @sa https://json.nlohmann.me/api/basic_json/array_t/ + using array_t = ArrayType>; + + /// @brief a type for a string + /// @sa https://json.nlohmann.me/api/basic_json/string_t/ + using string_t = StringType; + + /// @brief a type for a boolean + /// @sa https://json.nlohmann.me/api/basic_json/boolean_t/ + using boolean_t = BooleanType; + + /// @brief a type for a number (integer) + /// @sa https://json.nlohmann.me/api/basic_json/number_integer_t/ + using number_integer_t = NumberIntegerType; + + /// @brief a type for a number (unsigned) + /// @sa https://json.nlohmann.me/api/basic_json/number_unsigned_t/ + using number_unsigned_t = NumberUnsignedType; + + /// @brief a type for a number (floating-point) + /// @sa https://json.nlohmann.me/api/basic_json/number_float_t/ + using number_float_t = NumberFloatType; + + /// @brief a type for a packed binary type + /// @sa https://json.nlohmann.me/api/basic_json/binary_t/ + using binary_t = nlohmann::byte_container_with_subtype; + + /// @} + + private: + + /// helper for exception-safe object creation + template + JSON_HEDLEY_RETURNS_NON_NULL + static T* create(Args&& ... args) + { + AllocatorType alloc; + using AllocatorTraits = std::allocator_traits>; + + auto deleter = [&](T * obj) + { + AllocatorTraits::deallocate(alloc, obj, 1); + }; + std::unique_ptr obj(AllocatorTraits::allocate(alloc, 1), deleter); + AllocatorTraits::construct(alloc, obj.get(), std::forward(args)...); + JSON_ASSERT(obj != nullptr); + return obj.release(); + } + + //////////////////////// + // JSON value storage // + //////////////////////// + + JSON_PRIVATE_UNLESS_TESTED: + /*! + @brief a JSON value + + The actual storage for a JSON value of the @ref basic_json class. This + union combines the different storage types for the JSON value types + defined in @ref value_t. + + JSON type | value_t type | used type + --------- | --------------- | ------------------------ + object | object | pointer to @ref object_t + array | array | pointer to @ref array_t + string | string | pointer to @ref string_t + boolean | boolean | @ref boolean_t + number | number_integer | @ref number_integer_t + number | number_unsigned | @ref number_unsigned_t + number | number_float | @ref number_float_t + binary | binary | pointer to @ref binary_t + null | null | *no value is stored* + + @note Variable-length types (objects, arrays, and strings) are stored as + pointers. The size of the union should not exceed 64 bits if the default + value types are used. + + @since version 1.0.0 + */ + union json_value + { + /// object (stored with pointer to save storage) + object_t* object; + /// array (stored with pointer to save storage) + array_t* array; + /// string (stored with pointer to save storage) + string_t* string; + /// binary (stored with pointer to save storage) + binary_t* binary; + /// boolean + boolean_t boolean; + /// number (integer) + number_integer_t number_integer; + /// number (unsigned integer) + number_unsigned_t number_unsigned; + /// number (floating-point) + number_float_t number_float; + + /// default constructor (for null values) + json_value() = default; + /// constructor for booleans + json_value(boolean_t v) noexcept : boolean(v) {} + /// constructor for numbers (integer) + json_value(number_integer_t v) noexcept : number_integer(v) {} + /// constructor for numbers (unsigned) + json_value(number_unsigned_t v) noexcept : number_unsigned(v) {} + /// constructor for numbers (floating-point) + json_value(number_float_t v) noexcept : number_float(v) {} + /// constructor for empty values of a given type + json_value(value_t t) + { + switch (t) + { + case value_t::object: + { + object = create(); + break; + } + + case value_t::array: + { + array = create(); + break; + } + + case value_t::string: + { + string = create(""); + break; + } + + case value_t::binary: + { + binary = create(); + break; + } + + case value_t::boolean: + { + boolean = static_cast(false); + break; + } + + case value_t::number_integer: + { + number_integer = static_cast(0); + break; + } + + case value_t::number_unsigned: + { + number_unsigned = static_cast(0); + break; + } + + case value_t::number_float: + { + number_float = static_cast(0.0); + break; + } + + case value_t::null: + { + object = nullptr; // silence warning, see #821 + break; + } + + case value_t::discarded: + default: + { + object = nullptr; // silence warning, see #821 + if (JSON_HEDLEY_UNLIKELY(t == value_t::null)) + { + JSON_THROW(other_error::create(500, "961c151d2e87f2686a955a9be24d316f1362bf21 3.10.5", basic_json())); // LCOV_EXCL_LINE + } + break; + } + } + } + + /// constructor for strings + json_value(const string_t& value) : string(create(value)) {} + + /// constructor for rvalue strings + json_value(string_t&& value) : string(create(std::move(value))) {} + + /// constructor for objects + json_value(const object_t& value) : object(create(value)) {} + + /// constructor for rvalue objects + json_value(object_t&& value) : object(create(std::move(value))) {} + + /// constructor for arrays + json_value(const array_t& value) : array(create(value)) {} + + /// constructor for rvalue arrays + json_value(array_t&& value) : array(create(std::move(value))) {} + + /// constructor for binary arrays + json_value(const typename binary_t::container_type& value) : binary(create(value)) {} + + /// constructor for rvalue binary arrays + json_value(typename binary_t::container_type&& value) : binary(create(std::move(value))) {} + + /// constructor for binary arrays (internal type) + json_value(const binary_t& value) : binary(create(value)) {} + + /// constructor for rvalue binary arrays (internal type) + json_value(binary_t&& value) : binary(create(std::move(value))) {} + + void destroy(value_t t) + { + if (t == value_t::array || t == value_t::object) + { + // flatten the current json_value to a heap-allocated stack + std::vector stack; + + // move the top-level items to stack + if (t == value_t::array) + { + stack.reserve(array->size()); + std::move(array->begin(), array->end(), std::back_inserter(stack)); + } + else + { + stack.reserve(object->size()); + for (auto&& it : *object) + { + stack.push_back(std::move(it.second)); + } + } + + while (!stack.empty()) + { + // move the last item to local variable to be processed + basic_json current_item(std::move(stack.back())); + stack.pop_back(); + + // if current_item is array/object, move + // its children to the stack to be processed later + if (current_item.is_array()) + { + std::move(current_item.m_value.array->begin(), current_item.m_value.array->end(), std::back_inserter(stack)); + + current_item.m_value.array->clear(); + } + else if (current_item.is_object()) + { + for (auto&& it : *current_item.m_value.object) + { + stack.push_back(std::move(it.second)); + } + + current_item.m_value.object->clear(); + } + + // it's now safe that current_item get destructed + // since it doesn't have any children + } + } + + switch (t) + { + case value_t::object: + { + AllocatorType alloc; + std::allocator_traits::destroy(alloc, object); + std::allocator_traits::deallocate(alloc, object, 1); + break; + } + + case value_t::array: + { + AllocatorType alloc; + std::allocator_traits::destroy(alloc, array); + std::allocator_traits::deallocate(alloc, array, 1); + break; + } + + case value_t::string: + { + AllocatorType alloc; + std::allocator_traits::destroy(alloc, string); + std::allocator_traits::deallocate(alloc, string, 1); + break; + } + + case value_t::binary: + { + AllocatorType alloc; + std::allocator_traits::destroy(alloc, binary); + std::allocator_traits::deallocate(alloc, binary, 1); + break; + } + + case value_t::null: + case value_t::boolean: + case value_t::number_integer: + case value_t::number_unsigned: + case value_t::number_float: + case value_t::discarded: + default: + { + break; + } + } + } + }; + + private: + /*! + @brief checks the class invariants + + This function asserts the class invariants. It needs to be called at the + end of every constructor to make sure that created objects respect the + invariant. Furthermore, it has to be called each time the type of a JSON + value is changed, because the invariant expresses a relationship between + @a m_type and @a m_value. + + Furthermore, the parent relation is checked for arrays and objects: If + @a check_parents true and the value is an array or object, then the + container's elements must have the current value as parent. + + @param[in] check_parents whether the parent relation should be checked. + The value is true by default and should only be set to false + during destruction of objects when the invariant does not + need to hold. + */ + void assert_invariant(bool check_parents = true) const noexcept + { + JSON_ASSERT(m_type != value_t::object || m_value.object != nullptr); + JSON_ASSERT(m_type != value_t::array || m_value.array != nullptr); + JSON_ASSERT(m_type != value_t::string || m_value.string != nullptr); + JSON_ASSERT(m_type != value_t::binary || m_value.binary != nullptr); + +#if JSON_DIAGNOSTICS + JSON_TRY + { + // cppcheck-suppress assertWithSideEffect + JSON_ASSERT(!check_parents || !is_structured() || std::all_of(begin(), end(), [this](const basic_json & j) + { + return j.m_parent == this; + })); + } + JSON_CATCH(...) {} // LCOV_EXCL_LINE +#endif + static_cast(check_parents); + } + + void set_parents() + { +#if JSON_DIAGNOSTICS + switch (m_type) + { + case value_t::array: + { + for (auto& element : *m_value.array) + { + element.m_parent = this; + } + break; + } + + case value_t::object: + { + for (auto& element : *m_value.object) + { + element.second.m_parent = this; + } + break; + } + + case value_t::null: + case value_t::string: + case value_t::boolean: + case value_t::number_integer: + case value_t::number_unsigned: + case value_t::number_float: + case value_t::binary: + case value_t::discarded: + default: + break; + } +#endif + } + + iterator set_parents(iterator it, typename iterator::difference_type count_set_parents) + { +#if JSON_DIAGNOSTICS + for (typename iterator::difference_type i = 0; i < count_set_parents; ++i) + { + (it + i)->m_parent = this; + } +#else + static_cast(count_set_parents); +#endif + return it; + } + + reference set_parent(reference j, std::size_t old_capacity = static_cast(-1)) + { +#if JSON_DIAGNOSTICS + if (old_capacity != static_cast(-1)) + { + // see https://github.com/nlohmann/json/issues/2838 + JSON_ASSERT(type() == value_t::array); + if (JSON_HEDLEY_UNLIKELY(m_value.array->capacity() != old_capacity)) + { + // capacity has changed: update all parents + set_parents(); + return j; + } + } + + // ordered_json uses a vector internally, so pointers could have + // been invalidated; see https://github.com/nlohmann/json/issues/2962 +#ifdef JSON_HEDLEY_MSVC_VERSION +#pragma warning(push ) +#pragma warning(disable : 4127) // ignore warning to replace if with if constexpr +#endif + if (detail::is_ordered_map::value) + { + set_parents(); + return j; + } +#ifdef JSON_HEDLEY_MSVC_VERSION +#pragma warning( pop ) +#endif + + j.m_parent = this; +#else + static_cast(j); + static_cast(old_capacity); +#endif + return j; + } + + public: + ////////////////////////// + // JSON parser callback // + ////////////////////////// + + /// @brief parser event types + /// @sa https://json.nlohmann.me/api/basic_json/parse_event_t/ + using parse_event_t = detail::parse_event_t; + + /// @brief per-element parser callback type + /// @sa https://json.nlohmann.me/api/basic_json/parser_callback_t/ + using parser_callback_t = detail::parser_callback_t; + + ////////////////// + // constructors // + ////////////////// + + /// @name constructors and destructors + /// Constructors of class @ref basic_json, copy/move constructor, copy + /// assignment, static functions creating objects, and the destructor. + /// @{ + + /// @brief create an empty value with a given type + /// @sa https://json.nlohmann.me/api/basic_json/basic_json/ + basic_json(const value_t v) + : m_type(v), m_value(v) + { + assert_invariant(); + } + + /// @brief create a null object + /// @sa https://json.nlohmann.me/api/basic_json/basic_json/ + basic_json(std::nullptr_t = nullptr) noexcept + : basic_json(value_t::null) + { + assert_invariant(); + } + + /// @brief create a JSON value from compatible types + /// @sa https://json.nlohmann.me/api/basic_json/basic_json/ + template < typename CompatibleType, + typename U = detail::uncvref_t, + detail::enable_if_t < + !detail::is_basic_json::value && detail::is_compatible_type::value, int > = 0 > + basic_json(CompatibleType && val) noexcept(noexcept( // NOLINT(bugprone-forwarding-reference-overload,bugprone-exception-escape) + JSONSerializer::to_json(std::declval(), + std::forward(val)))) + { + JSONSerializer::to_json(*this, std::forward(val)); + set_parents(); + assert_invariant(); + } + + /// @brief create a JSON value from an existing one + /// @sa https://json.nlohmann.me/api/basic_json/basic_json/ + template < typename BasicJsonType, + detail::enable_if_t < + detail::is_basic_json::value&& !std::is_same::value, int > = 0 > + basic_json(const BasicJsonType& val) + { + using other_boolean_t = typename BasicJsonType::boolean_t; + using other_number_float_t = typename BasicJsonType::number_float_t; + using other_number_integer_t = typename BasicJsonType::number_integer_t; + using other_number_unsigned_t = typename BasicJsonType::number_unsigned_t; + using other_string_t = typename BasicJsonType::string_t; + using other_object_t = typename BasicJsonType::object_t; + using other_array_t = typename BasicJsonType::array_t; + using other_binary_t = typename BasicJsonType::binary_t; + + switch (val.type()) + { + case value_t::boolean: + JSONSerializer::to_json(*this, val.template get()); + break; + case value_t::number_float: + JSONSerializer::to_json(*this, val.template get()); + break; + case value_t::number_integer: + JSONSerializer::to_json(*this, val.template get()); + break; + case value_t::number_unsigned: + JSONSerializer::to_json(*this, val.template get()); + break; + case value_t::string: + JSONSerializer::to_json(*this, val.template get_ref()); + break; + case value_t::object: + JSONSerializer::to_json(*this, val.template get_ref()); + break; + case value_t::array: + JSONSerializer::to_json(*this, val.template get_ref()); + break; + case value_t::binary: + JSONSerializer::to_json(*this, val.template get_ref()); + break; + case value_t::null: + *this = nullptr; + break; + case value_t::discarded: + m_type = value_t::discarded; + break; + default: // LCOV_EXCL_LINE + JSON_ASSERT(false); // NOLINT(cert-dcl03-c,hicpp-static-assert,misc-static-assert) LCOV_EXCL_LINE + } + set_parents(); + assert_invariant(); + } + + /// @brief create a container (array or object) from an initializer list + /// @sa https://json.nlohmann.me/api/basic_json/basic_json/ + basic_json(initializer_list_t init, + bool type_deduction = true, + value_t manual_type = value_t::array) + { + // check if each element is an array with two elements whose first + // element is a string + bool is_an_object = std::all_of(init.begin(), init.end(), + [](const detail::json_ref& element_ref) + { + return element_ref->is_array() && element_ref->size() == 2 && (*element_ref)[0].is_string(); + }); + + // adjust type if type deduction is not wanted + if (!type_deduction) + { + // if array is wanted, do not create an object though possible + if (manual_type == value_t::array) + { + is_an_object = false; + } + + // if object is wanted but impossible, throw an exception + if (JSON_HEDLEY_UNLIKELY(manual_type == value_t::object && !is_an_object)) + { + JSON_THROW(type_error::create(301, "cannot create object from initializer list", basic_json())); + } + } + + if (is_an_object) + { + // the initializer list is a list of pairs -> create object + m_type = value_t::object; + m_value = value_t::object; + + for (auto& element_ref : init) + { + auto element = element_ref.moved_or_copied(); + m_value.object->emplace( + std::move(*((*element.m_value.array)[0].m_value.string)), + std::move((*element.m_value.array)[1])); + } + } + else + { + // the initializer list describes an array -> create array + m_type = value_t::array; + m_value.array = create(init.begin(), init.end()); + } + + set_parents(); + assert_invariant(); + } + + /// @brief explicitly create a binary array (without subtype) + /// @sa https://json.nlohmann.me/api/basic_json/binary/ + JSON_HEDLEY_WARN_UNUSED_RESULT + static basic_json binary(const typename binary_t::container_type& init) + { + auto res = basic_json(); + res.m_type = value_t::binary; + res.m_value = init; + return res; + } + + /// @brief explicitly create a binary array (with subtype) + /// @sa https://json.nlohmann.me/api/basic_json/binary/ + JSON_HEDLEY_WARN_UNUSED_RESULT + static basic_json binary(const typename binary_t::container_type& init, typename binary_t::subtype_type subtype) + { + auto res = basic_json(); + res.m_type = value_t::binary; + res.m_value = binary_t(init, subtype); + return res; + } + + /// @brief explicitly create a binary array + /// @sa https://json.nlohmann.me/api/basic_json/binary/ + JSON_HEDLEY_WARN_UNUSED_RESULT + static basic_json binary(typename binary_t::container_type&& init) + { + auto res = basic_json(); + res.m_type = value_t::binary; + res.m_value = std::move(init); + return res; + } + + /// @brief explicitly create a binary array (with subtype) + /// @sa https://json.nlohmann.me/api/basic_json/binary/ + JSON_HEDLEY_WARN_UNUSED_RESULT + static basic_json binary(typename binary_t::container_type&& init, typename binary_t::subtype_type subtype) + { + auto res = basic_json(); + res.m_type = value_t::binary; + res.m_value = binary_t(std::move(init), subtype); + return res; + } + + /// @brief explicitly create an array from an initializer list + /// @sa https://json.nlohmann.me/api/basic_json/array/ + JSON_HEDLEY_WARN_UNUSED_RESULT + static basic_json array(initializer_list_t init = {}) + { + return basic_json(init, false, value_t::array); + } + + /// @brief explicitly create an object from an initializer list + /// @sa https://json.nlohmann.me/api/basic_json/object/ + JSON_HEDLEY_WARN_UNUSED_RESULT + static basic_json object(initializer_list_t init = {}) + { + return basic_json(init, false, value_t::object); + } + + /// @brief construct an array with count copies of given value + /// @sa https://json.nlohmann.me/api/basic_json/basic_json/ + basic_json(size_type cnt, const basic_json& val) + : m_type(value_t::array) + { + m_value.array = create(cnt, val); + set_parents(); + assert_invariant(); + } + + /// @brief construct a JSON container given an iterator range + /// @sa https://json.nlohmann.me/api/basic_json/basic_json/ + template < class InputIT, typename std::enable_if < + std::is_same::value || + std::is_same::value, int >::type = 0 > + basic_json(InputIT first, InputIT last) + { + JSON_ASSERT(first.m_object != nullptr); + JSON_ASSERT(last.m_object != nullptr); + + // make sure iterator fits the current value + if (JSON_HEDLEY_UNLIKELY(first.m_object != last.m_object)) + { + JSON_THROW(invalid_iterator::create(201, "iterators are not compatible", basic_json())); + } + + // copy type from first iterator + m_type = first.m_object->m_type; + + // check if iterator range is complete for primitive values + switch (m_type) + { + case value_t::boolean: + case value_t::number_float: + case value_t::number_integer: + case value_t::number_unsigned: + case value_t::string: + { + if (JSON_HEDLEY_UNLIKELY(!first.m_it.primitive_iterator.is_begin() + || !last.m_it.primitive_iterator.is_end())) + { + JSON_THROW(invalid_iterator::create(204, "iterators out of range", *first.m_object)); + } + break; + } + + case value_t::null: + case value_t::object: + case value_t::array: + case value_t::binary: + case value_t::discarded: + default: + break; + } + + switch (m_type) + { + case value_t::number_integer: + { + m_value.number_integer = first.m_object->m_value.number_integer; + break; + } + + case value_t::number_unsigned: + { + m_value.number_unsigned = first.m_object->m_value.number_unsigned; + break; + } + + case value_t::number_float: + { + m_value.number_float = first.m_object->m_value.number_float; + break; + } + + case value_t::boolean: + { + m_value.boolean = first.m_object->m_value.boolean; + break; + } + + case value_t::string: + { + m_value = *first.m_object->m_value.string; + break; + } + + case value_t::object: + { + m_value.object = create(first.m_it.object_iterator, + last.m_it.object_iterator); + break; + } + + case value_t::array: + { + m_value.array = create(first.m_it.array_iterator, + last.m_it.array_iterator); + break; + } + + case value_t::binary: + { + m_value = *first.m_object->m_value.binary; + break; + } + + case value_t::null: + case value_t::discarded: + default: + JSON_THROW(invalid_iterator::create(206, "cannot construct with iterators from " + std::string(first.m_object->type_name()), *first.m_object)); + } + + set_parents(); + assert_invariant(); + } + + + /////////////////////////////////////// + // other constructors and destructor // + /////////////////////////////////////// + + template, + std::is_same>::value, int> = 0 > + basic_json(const JsonRef& ref) : basic_json(ref.moved_or_copied()) {} + + /// @brief copy constructor + /// @sa https://json.nlohmann.me/api/basic_json/basic_json/ + basic_json(const basic_json& other) + : m_type(other.m_type) + { + // check of passed value is valid + other.assert_invariant(); + + switch (m_type) + { + case value_t::object: + { + m_value = *other.m_value.object; + break; + } + + case value_t::array: + { + m_value = *other.m_value.array; + break; + } + + case value_t::string: + { + m_value = *other.m_value.string; + break; + } + + case value_t::boolean: + { + m_value = other.m_value.boolean; + break; + } + + case value_t::number_integer: + { + m_value = other.m_value.number_integer; + break; + } + + case value_t::number_unsigned: + { + m_value = other.m_value.number_unsigned; + break; + } + + case value_t::number_float: + { + m_value = other.m_value.number_float; + break; + } + + case value_t::binary: + { + m_value = *other.m_value.binary; + break; + } + + case value_t::null: + case value_t::discarded: + default: + break; + } + + set_parents(); + assert_invariant(); + } + + /// @brief move constructor + /// @sa https://json.nlohmann.me/api/basic_json/basic_json/ + basic_json(basic_json&& other) noexcept + : m_type(std::move(other.m_type)), + m_value(std::move(other.m_value)) + { + // check that passed value is valid + other.assert_invariant(false); + + // invalidate payload + other.m_type = value_t::null; + other.m_value = {}; + + set_parents(); + assert_invariant(); + } + + /// @brief copy assignment + /// @sa https://json.nlohmann.me/api/basic_json/operator=/ + basic_json& operator=(basic_json other) noexcept ( + std::is_nothrow_move_constructible::value&& + std::is_nothrow_move_assignable::value&& + std::is_nothrow_move_constructible::value&& + std::is_nothrow_move_assignable::value + ) + { + // check that passed value is valid + other.assert_invariant(); + + using std::swap; + swap(m_type, other.m_type); + swap(m_value, other.m_value); + + set_parents(); + assert_invariant(); + return *this; + } + + /// @brief destructor + /// @sa https://json.nlohmann.me/api/basic_json/~basic_json/ + ~basic_json() noexcept + { + assert_invariant(false); + m_value.destroy(m_type); + } + + /// @} + + public: + /////////////////////// + // object inspection // + /////////////////////// + + /// @name object inspection + /// Functions to inspect the type of a JSON value. + /// @{ + + /// @brief serialization + /// @sa https://json.nlohmann.me/api/basic_json/dump/ + string_t dump(const int indent = -1, + const char indent_char = ' ', + const bool ensure_ascii = false, + const error_handler_t error_handler = error_handler_t::strict) const + { + string_t result; + serializer s(detail::output_adapter(result), indent_char, error_handler); + + if (indent >= 0) + { + s.dump(*this, true, ensure_ascii, static_cast(indent)); + } + else + { + s.dump(*this, false, ensure_ascii, 0); + } + + return result; + } + + /// @brief return the type of the JSON value (explicit) + /// @sa https://json.nlohmann.me/api/basic_json/type/ + constexpr value_t type() const noexcept + { + return m_type; + } + + /// @brief return whether type is primitive + /// @sa https://json.nlohmann.me/api/basic_json/is_primitive/ + constexpr bool is_primitive() const noexcept + { + return is_null() || is_string() || is_boolean() || is_number() || is_binary(); + } + + /// @brief return whether type is structured + /// @sa https://json.nlohmann.me/api/basic_json/is_structured/ + constexpr bool is_structured() const noexcept + { + return is_array() || is_object(); + } + + /// @brief return whether value is null + /// @sa https://json.nlohmann.me/api/basic_json/is_null/ + constexpr bool is_null() const noexcept + { + return m_type == value_t::null; + } + + /// @brief return whether value is a boolean + /// @sa https://json.nlohmann.me/api/basic_json/is_boolean/ + constexpr bool is_boolean() const noexcept + { + return m_type == value_t::boolean; + } + + /// @brief return whether value is a number + /// @sa https://json.nlohmann.me/api/basic_json/is_number/ + constexpr bool is_number() const noexcept + { + return is_number_integer() || is_number_float(); + } + + /// @brief return whether value is an integer number + /// @sa https://json.nlohmann.me/api/basic_json/is_number_integer/ + constexpr bool is_number_integer() const noexcept + { + return m_type == value_t::number_integer || m_type == value_t::number_unsigned; + } + + /// @brief return whether value is an unsigned integer number + /// @sa https://json.nlohmann.me/api/basic_json/is_number_unsigned/ + constexpr bool is_number_unsigned() const noexcept + { + return m_type == value_t::number_unsigned; + } + + /// @brief return whether value is a floating-point number + /// @sa https://json.nlohmann.me/api/basic_json/is_number_float/ + constexpr bool is_number_float() const noexcept + { + return m_type == value_t::number_float; + } + + /// @brief return whether value is an object + /// @sa https://json.nlohmann.me/api/basic_json/is_object/ + constexpr bool is_object() const noexcept + { + return m_type == value_t::object; + } + + /// @brief return whether value is an array + /// @sa https://json.nlohmann.me/api/basic_json/is_array/ + constexpr bool is_array() const noexcept + { + return m_type == value_t::array; + } + + /// @brief return whether value is a string + /// @sa https://json.nlohmann.me/api/basic_json/is_string/ + constexpr bool is_string() const noexcept + { + return m_type == value_t::string; + } + + /// @brief return whether value is a binary array + /// @sa https://json.nlohmann.me/api/basic_json/is_binary/ + constexpr bool is_binary() const noexcept + { + return m_type == value_t::binary; + } + + /// @brief return whether value is discarded + /// @sa https://json.nlohmann.me/api/basic_json/is_discarded/ + constexpr bool is_discarded() const noexcept + { + return m_type == value_t::discarded; + } + + /// @brief return the type of the JSON value (implicit) + /// @sa https://json.nlohmann.me/api/basic_json/operator_value_t/ + constexpr operator value_t() const noexcept + { + return m_type; + } + + /// @} + + private: + ////////////////// + // value access // + ////////////////// + + /// get a boolean (explicit) + boolean_t get_impl(boolean_t* /*unused*/) const + { + if (JSON_HEDLEY_LIKELY(is_boolean())) + { + return m_value.boolean; + } + + JSON_THROW(type_error::create(302, "type must be boolean, but is " + std::string(type_name()), *this)); + } + + /// get a pointer to the value (object) + object_t* get_impl_ptr(object_t* /*unused*/) noexcept + { + return is_object() ? m_value.object : nullptr; + } + + /// get a pointer to the value (object) + constexpr const object_t* get_impl_ptr(const object_t* /*unused*/) const noexcept + { + return is_object() ? m_value.object : nullptr; + } + + /// get a pointer to the value (array) + array_t* get_impl_ptr(array_t* /*unused*/) noexcept + { + return is_array() ? m_value.array : nullptr; + } + + /// get a pointer to the value (array) + constexpr const array_t* get_impl_ptr(const array_t* /*unused*/) const noexcept + { + return is_array() ? m_value.array : nullptr; + } + + /// get a pointer to the value (string) + string_t* get_impl_ptr(string_t* /*unused*/) noexcept + { + return is_string() ? m_value.string : nullptr; + } + + /// get a pointer to the value (string) + constexpr const string_t* get_impl_ptr(const string_t* /*unused*/) const noexcept + { + return is_string() ? m_value.string : nullptr; + } + + /// get a pointer to the value (boolean) + boolean_t* get_impl_ptr(boolean_t* /*unused*/) noexcept + { + return is_boolean() ? &m_value.boolean : nullptr; + } + + /// get a pointer to the value (boolean) + constexpr const boolean_t* get_impl_ptr(const boolean_t* /*unused*/) const noexcept + { + return is_boolean() ? &m_value.boolean : nullptr; + } + + /// get a pointer to the value (integer number) + number_integer_t* get_impl_ptr(number_integer_t* /*unused*/) noexcept + { + return is_number_integer() ? &m_value.number_integer : nullptr; + } + + /// get a pointer to the value (integer number) + constexpr const number_integer_t* get_impl_ptr(const number_integer_t* /*unused*/) const noexcept + { + return is_number_integer() ? &m_value.number_integer : nullptr; + } + + /// get a pointer to the value (unsigned number) + number_unsigned_t* get_impl_ptr(number_unsigned_t* /*unused*/) noexcept + { + return is_number_unsigned() ? &m_value.number_unsigned : nullptr; + } + + /// get a pointer to the value (unsigned number) + constexpr const number_unsigned_t* get_impl_ptr(const number_unsigned_t* /*unused*/) const noexcept + { + return is_number_unsigned() ? &m_value.number_unsigned : nullptr; + } + + /// get a pointer to the value (floating-point number) + number_float_t* get_impl_ptr(number_float_t* /*unused*/) noexcept + { + return is_number_float() ? &m_value.number_float : nullptr; + } + + /// get a pointer to the value (floating-point number) + constexpr const number_float_t* get_impl_ptr(const number_float_t* /*unused*/) const noexcept + { + return is_number_float() ? &m_value.number_float : nullptr; + } + + /// get a pointer to the value (binary) + binary_t* get_impl_ptr(binary_t* /*unused*/) noexcept + { + return is_binary() ? m_value.binary : nullptr; + } + + /// get a pointer to the value (binary) + constexpr const binary_t* get_impl_ptr(const binary_t* /*unused*/) const noexcept + { + return is_binary() ? m_value.binary : nullptr; + } + + /*! + @brief helper function to implement get_ref() + + This function helps to implement get_ref() without code duplication for + const and non-const overloads + + @tparam ThisType will be deduced as `basic_json` or `const basic_json` + + @throw type_error.303 if ReferenceType does not match underlying value + type of the current JSON + */ + template + static ReferenceType get_ref_impl(ThisType& obj) + { + // delegate the call to get_ptr<>() + auto* ptr = obj.template get_ptr::type>(); + + if (JSON_HEDLEY_LIKELY(ptr != nullptr)) + { + return *ptr; + } + + JSON_THROW(type_error::create(303, "incompatible ReferenceType for get_ref, actual type is " + std::string(obj.type_name()), obj)); + } + + public: + /// @name value access + /// Direct access to the stored value of a JSON value. + /// @{ + + /// @brief get a pointer value (implicit) + /// @sa https://json.nlohmann.me/api/basic_json/get_ptr/ + template::value, int>::type = 0> + auto get_ptr() noexcept -> decltype(std::declval().get_impl_ptr(std::declval())) + { + // delegate the call to get_impl_ptr<>() + return get_impl_ptr(static_cast(nullptr)); + } + + /// @brief get a pointer value (implicit) + /// @sa https://json.nlohmann.me/api/basic_json/get_ptr/ + template < typename PointerType, typename std::enable_if < + std::is_pointer::value&& + std::is_const::type>::value, int >::type = 0 > + constexpr auto get_ptr() const noexcept -> decltype(std::declval().get_impl_ptr(std::declval())) + { + // delegate the call to get_impl_ptr<>() const + return get_impl_ptr(static_cast(nullptr)); + } + + private: + /*! + @brief get a value (explicit) + + Explicit type conversion between the JSON value and a compatible value + which is [CopyConstructible](https://en.cppreference.com/w/cpp/named_req/CopyConstructible) + and [DefaultConstructible](https://en.cppreference.com/w/cpp/named_req/DefaultConstructible). + The value is converted by calling the @ref json_serializer + `from_json()` method. + + The function is equivalent to executing + @code {.cpp} + ValueType ret; + JSONSerializer::from_json(*this, ret); + return ret; + @endcode + + This overloads is chosen if: + - @a ValueType is not @ref basic_json, + - @ref json_serializer has a `from_json()` method of the form + `void from_json(const basic_json&, ValueType&)`, and + - @ref json_serializer does not have a `from_json()` method of + the form `ValueType from_json(const basic_json&)` + + @tparam ValueType the returned value type + + @return copy of the JSON value, converted to @a ValueType + + @throw what @ref json_serializer `from_json()` method throws + + @liveexample{The example below shows several conversions from JSON values + to other types. There a few things to note: (1) Floating-point numbers can + be converted to integers\, (2) A JSON array can be converted to a standard + `std::vector`\, (3) A JSON object can be converted to C++ + associative containers such as `std::unordered_map`.,get__ValueType_const} + + @since version 2.1.0 + */ + template < typename ValueType, + detail::enable_if_t < + detail::is_default_constructible::value&& + detail::has_from_json::value, + int > = 0 > + ValueType get_impl(detail::priority_tag<0> /*unused*/) const noexcept(noexcept( + JSONSerializer::from_json(std::declval(), std::declval()))) + { + auto ret = ValueType(); + JSONSerializer::from_json(*this, ret); + return ret; + } + + /*! + @brief get a value (explicit); special case + + Explicit type conversion between the JSON value and a compatible value + which is **not** [CopyConstructible](https://en.cppreference.com/w/cpp/named_req/CopyConstructible) + and **not** [DefaultConstructible](https://en.cppreference.com/w/cpp/named_req/DefaultConstructible). + The value is converted by calling the @ref json_serializer + `from_json()` method. + + The function is equivalent to executing + @code {.cpp} + return JSONSerializer::from_json(*this); + @endcode + + This overloads is chosen if: + - @a ValueType is not @ref basic_json and + - @ref json_serializer has a `from_json()` method of the form + `ValueType from_json(const basic_json&)` + + @note If @ref json_serializer has both overloads of + `from_json()`, this one is chosen. + + @tparam ValueType the returned value type + + @return copy of the JSON value, converted to @a ValueType + + @throw what @ref json_serializer `from_json()` method throws + + @since version 2.1.0 + */ + template < typename ValueType, + detail::enable_if_t < + detail::has_non_default_from_json::value, + int > = 0 > + ValueType get_impl(detail::priority_tag<1> /*unused*/) const noexcept(noexcept( + JSONSerializer::from_json(std::declval()))) + { + return JSONSerializer::from_json(*this); + } + + /*! + @brief get special-case overload + + This overloads converts the current @ref basic_json in a different + @ref basic_json type + + @tparam BasicJsonType == @ref basic_json + + @return a copy of *this, converted into @a BasicJsonType + + @complexity Depending on the implementation of the called `from_json()` + method. + + @since version 3.2.0 + */ + template < typename BasicJsonType, + detail::enable_if_t < + detail::is_basic_json::value, + int > = 0 > + BasicJsonType get_impl(detail::priority_tag<2> /*unused*/) const + { + return *this; + } + + /*! + @brief get special-case overload + + This overloads avoids a lot of template boilerplate, it can be seen as the + identity method + + @tparam BasicJsonType == @ref basic_json + + @return a copy of *this + + @complexity Constant. + + @since version 2.1.0 + */ + template::value, + int> = 0> + basic_json get_impl(detail::priority_tag<3> /*unused*/) const + { + return *this; + } + + /*! + @brief get a pointer value (explicit) + @copydoc get() + */ + template::value, + int> = 0> + constexpr auto get_impl(detail::priority_tag<4> /*unused*/) const noexcept + -> decltype(std::declval().template get_ptr()) + { + // delegate the call to get_ptr + return get_ptr(); + } + + public: + /*! + @brief get a (pointer) value (explicit) + + Performs explicit type conversion between the JSON value and a compatible value if required. + + - If the requested type is a pointer to the internally stored JSON value that pointer is returned. + No copies are made. + + - If the requested type is the current @ref basic_json, or a different @ref basic_json convertible + from the current @ref basic_json. + + - Otherwise the value is converted by calling the @ref json_serializer `from_json()` + method. + + @tparam ValueTypeCV the provided value type + @tparam ValueType the returned value type + + @return copy of the JSON value, converted to @tparam ValueType if necessary + + @throw what @ref json_serializer `from_json()` method throws if conversion is required + + @since version 2.1.0 + */ + template < typename ValueTypeCV, typename ValueType = detail::uncvref_t> +#if defined(JSON_HAS_CPP_14) + constexpr +#endif + auto get() const noexcept( + noexcept(std::declval().template get_impl(detail::priority_tag<4> {}))) + -> decltype(std::declval().template get_impl(detail::priority_tag<4> {})) + { + // we cannot static_assert on ValueTypeCV being non-const, because + // there is support for get(), which is why we + // still need the uncvref + static_assert(!std::is_reference::value, + "get() cannot be used with reference types, you might want to use get_ref()"); + return get_impl(detail::priority_tag<4> {}); + } + + /*! + @brief get a pointer value (explicit) + + Explicit pointer access to the internally stored JSON value. No copies are + made. + + @warning The pointer becomes invalid if the underlying JSON object + changes. + + @tparam PointerType pointer type; must be a pointer to @ref array_t, @ref + object_t, @ref string_t, @ref boolean_t, @ref number_integer_t, + @ref number_unsigned_t, or @ref number_float_t. + + @return pointer to the internally stored JSON value if the requested + pointer type @a PointerType fits to the JSON value; `nullptr` otherwise + + @complexity Constant. + + @liveexample{The example below shows how pointers to internal values of a + JSON value can be requested. Note that no type conversions are made and a + `nullptr` is returned if the value and the requested pointer type does not + match.,get__PointerType} + + @sa see @ref get_ptr() for explicit pointer-member access + + @since version 1.0.0 + */ + template::value, int>::type = 0> + auto get() noexcept -> decltype(std::declval().template get_ptr()) + { + // delegate the call to get_ptr + return get_ptr(); + } + + /// @brief get a value (explicit) + /// @sa https://json.nlohmann.me/api/basic_json/get_to/ + template < typename ValueType, + detail::enable_if_t < + !detail::is_basic_json::value&& + detail::has_from_json::value, + int > = 0 > + ValueType & get_to(ValueType& v) const noexcept(noexcept( + JSONSerializer::from_json(std::declval(), v))) + { + JSONSerializer::from_json(*this, v); + return v; + } + + // specialization to allow calling get_to with a basic_json value + // see https://github.com/nlohmann/json/issues/2175 + template::value, + int> = 0> + ValueType & get_to(ValueType& v) const + { + v = *this; + return v; + } + + template < + typename T, std::size_t N, + typename Array = T (&)[N], // NOLINT(cppcoreguidelines-avoid-c-arrays,hicpp-avoid-c-arrays,modernize-avoid-c-arrays) + detail::enable_if_t < + detail::has_from_json::value, int > = 0 > + Array get_to(T (&v)[N]) const // NOLINT(cppcoreguidelines-avoid-c-arrays,hicpp-avoid-c-arrays,modernize-avoid-c-arrays) + noexcept(noexcept(JSONSerializer::from_json( + std::declval(), v))) + { + JSONSerializer::from_json(*this, v); + return v; + } + + /// @brief get a reference value (implicit) + /// @sa https://json.nlohmann.me/api/basic_json/get_ref/ + template::value, int>::type = 0> + ReferenceType get_ref() + { + // delegate call to get_ref_impl + return get_ref_impl(*this); + } + + /// @brief get a reference value (implicit) + /// @sa https://json.nlohmann.me/api/basic_json/get_ref/ + template < typename ReferenceType, typename std::enable_if < + std::is_reference::value&& + std::is_const::type>::value, int >::type = 0 > + ReferenceType get_ref() const + { + // delegate call to get_ref_impl + return get_ref_impl(*this); + } + + /*! + @brief get a value (implicit) + + Implicit type conversion between the JSON value and a compatible value. + The call is realized by calling @ref get() const. + + @tparam ValueType non-pointer type compatible to the JSON value, for + instance `int` for JSON integer numbers, `bool` for JSON booleans, or + `std::vector` types for JSON arrays. The character type of @ref string_t + as well as an initializer list of this type is excluded to avoid + ambiguities as these types implicitly convert to `std::string`. + + @return copy of the JSON value, converted to type @a ValueType + + @throw type_error.302 in case passed type @a ValueType is incompatible + to the JSON value type (e.g., the JSON value is of type boolean, but a + string is requested); see example below + + @complexity Linear in the size of the JSON value. + + @liveexample{The example below shows several conversions from JSON values + to other types. There a few things to note: (1) Floating-point numbers can + be converted to integers\, (2) A JSON array can be converted to a standard + `std::vector`\, (3) A JSON object can be converted to C++ + associative containers such as `std::unordered_map`.,operator__ValueType} + + @since version 1.0.0 + */ + template < typename ValueType, typename std::enable_if < + detail::conjunction < + detail::negation>, + detail::negation>>, + detail::negation>, + detail::negation>, + detail::negation>>, + +#if defined(JSON_HAS_CPP_17) && (defined(__GNUC__) || (defined(_MSC_VER) && _MSC_VER >= 1910 && _MSC_VER <= 1914)) + detail::negation>, +#endif + detail::is_detected_lazy + >::value, int >::type = 0 > + JSON_EXPLICIT operator ValueType() const + { + // delegate the call to get<>() const + return get(); + } + + /// @brief get a binary value + /// @sa https://json.nlohmann.me/api/basic_json/get_binary/ + binary_t& get_binary() + { + if (!is_binary()) + { + JSON_THROW(type_error::create(302, "type must be binary, but is " + std::string(type_name()), *this)); + } + + return *get_ptr(); + } + + /// @brief get a binary value + /// @sa https://json.nlohmann.me/api/basic_json/get_binary/ + const binary_t& get_binary() const + { + if (!is_binary()) + { + JSON_THROW(type_error::create(302, "type must be binary, but is " + std::string(type_name()), *this)); + } + + return *get_ptr(); + } + + /// @} + + + //////////////////// + // element access // + //////////////////// + + /// @name element access + /// Access to the JSON value. + /// @{ + + /// @brief access specified array element with bounds checking + /// @sa https://json.nlohmann.me/api/basic_json/at/ + reference at(size_type idx) + { + // at only works for arrays + if (JSON_HEDLEY_LIKELY(is_array())) + { + JSON_TRY + { + return set_parent(m_value.array->at(idx)); + } + JSON_CATCH (std::out_of_range&) + { + // create better exception explanation + JSON_THROW(out_of_range::create(401, "array index " + std::to_string(idx) + " is out of range", *this)); + } + } + else + { + JSON_THROW(type_error::create(304, "cannot use at() with " + std::string(type_name()), *this)); + } + } + + /// @brief access specified array element with bounds checking + /// @sa https://json.nlohmann.me/api/basic_json/at/ + const_reference at(size_type idx) const + { + // at only works for arrays + if (JSON_HEDLEY_LIKELY(is_array())) + { + JSON_TRY + { + return m_value.array->at(idx); + } + JSON_CATCH (std::out_of_range&) + { + // create better exception explanation + JSON_THROW(out_of_range::create(401, "array index " + std::to_string(idx) + " is out of range", *this)); + } + } + else + { + JSON_THROW(type_error::create(304, "cannot use at() with " + std::string(type_name()), *this)); + } + } + + /// @brief access specified object element with bounds checking + /// @sa https://json.nlohmann.me/api/basic_json/at/ + reference at(const typename object_t::key_type& key) + { + // at only works for objects + if (JSON_HEDLEY_LIKELY(is_object())) + { + JSON_TRY + { + return set_parent(m_value.object->at(key)); + } + JSON_CATCH (std::out_of_range&) + { + // create better exception explanation + JSON_THROW(out_of_range::create(403, "key '" + key + "' not found", *this)); + } + } + else + { + JSON_THROW(type_error::create(304, "cannot use at() with " + std::string(type_name()), *this)); + } + } + + /// @brief access specified object element with bounds checking + /// @sa https://json.nlohmann.me/api/basic_json/at/ + const_reference at(const typename object_t::key_type& key) const + { + // at only works for objects + if (JSON_HEDLEY_LIKELY(is_object())) + { + JSON_TRY + { + return m_value.object->at(key); + } + JSON_CATCH (std::out_of_range&) + { + // create better exception explanation + JSON_THROW(out_of_range::create(403, "key '" + key + "' not found", *this)); + } + } + else + { + JSON_THROW(type_error::create(304, "cannot use at() with " + std::string(type_name()), *this)); + } + } + + /// @brief access specified array element + /// @sa https://json.nlohmann.me/api/basic_json/operator%5B%5D/ + reference operator[](size_type idx) + { + // implicitly convert null value to an empty array + if (is_null()) + { + m_type = value_t::array; + m_value.array = create(); + assert_invariant(); + } + + // operator[] only works for arrays + if (JSON_HEDLEY_LIKELY(is_array())) + { + // fill up array with null values if given idx is outside range + if (idx >= m_value.array->size()) + { +#if JSON_DIAGNOSTICS + // remember array size & capacity before resizing + const auto old_size = m_value.array->size(); + const auto old_capacity = m_value.array->capacity(); +#endif + m_value.array->resize(idx + 1); + +#if JSON_DIAGNOSTICS + if (JSON_HEDLEY_UNLIKELY(m_value.array->capacity() != old_capacity)) + { + // capacity has changed: update all parents + set_parents(); + } + else + { + // set parent for values added above + set_parents(begin() + static_cast(old_size), static_cast(idx + 1 - old_size)); + } +#endif + assert_invariant(); + } + + return m_value.array->operator[](idx); + } + + JSON_THROW(type_error::create(305, "cannot use operator[] with a numeric argument with " + std::string(type_name()), *this)); + } + + /// @brief access specified array element + /// @sa https://json.nlohmann.me/api/basic_json/operator%5B%5D/ + const_reference operator[](size_type idx) const + { + // const operator[] only works for arrays + if (JSON_HEDLEY_LIKELY(is_array())) + { + return m_value.array->operator[](idx); + } + + JSON_THROW(type_error::create(305, "cannot use operator[] with a numeric argument with " + std::string(type_name()), *this)); + } + + /// @brief access specified object element + /// @sa https://json.nlohmann.me/api/basic_json/operator%5B%5D/ + reference operator[](const typename object_t::key_type& key) + { + // implicitly convert null value to an empty object + if (is_null()) + { + m_type = value_t::object; + m_value.object = create(); + assert_invariant(); + } + + // operator[] only works for objects + if (JSON_HEDLEY_LIKELY(is_object())) + { + return set_parent(m_value.object->operator[](key)); + } + + JSON_THROW(type_error::create(305, "cannot use operator[] with a string argument with " + std::string(type_name()), *this)); + } + + /// @brief access specified object element + /// @sa https://json.nlohmann.me/api/basic_json/operator%5B%5D/ + const_reference operator[](const typename object_t::key_type& key) const + { + // const operator[] only works for objects + if (JSON_HEDLEY_LIKELY(is_object())) + { + JSON_ASSERT(m_value.object->find(key) != m_value.object->end()); + return m_value.object->find(key)->second; + } + + JSON_THROW(type_error::create(305, "cannot use operator[] with a string argument with " + std::string(type_name()), *this)); + } + + /// @brief access specified object element + /// @sa https://json.nlohmann.me/api/basic_json/operator%5B%5D/ + template + JSON_HEDLEY_NON_NULL(2) + reference operator[](T* key) + { + // implicitly convert null to object + if (is_null()) + { + m_type = value_t::object; + m_value = value_t::object; + assert_invariant(); + } + + // at only works for objects + if (JSON_HEDLEY_LIKELY(is_object())) + { + return set_parent(m_value.object->operator[](key)); + } + + JSON_THROW(type_error::create(305, "cannot use operator[] with a string argument with " + std::string(type_name()), *this)); + } + + /// @brief access specified object element + /// @sa https://json.nlohmann.me/api/basic_json/operator%5B%5D/ + template + JSON_HEDLEY_NON_NULL(2) + const_reference operator[](T* key) const + { + // at only works for objects + if (JSON_HEDLEY_LIKELY(is_object())) + { + JSON_ASSERT(m_value.object->find(key) != m_value.object->end()); + return m_value.object->find(key)->second; + } + + JSON_THROW(type_error::create(305, "cannot use operator[] with a string argument with " + std::string(type_name()), *this)); + } + + /// @brief access specified object element with default value + /// @sa https://json.nlohmann.me/api/basic_json/value/ + /// using std::is_convertible in a std::enable_if will fail when using explicit conversions + template < class ValueType, typename std::enable_if < + detail::is_getable::value + && !std::is_same::value, int >::type = 0 > + ValueType value(const typename object_t::key_type& key, const ValueType& default_value) const + { + // at only works for objects + if (JSON_HEDLEY_LIKELY(is_object())) + { + // if key is found, return value and given default value otherwise + const auto it = find(key); + if (it != end()) + { + return it->template get(); + } + + return default_value; + } + + JSON_THROW(type_error::create(306, "cannot use value() with " + std::string(type_name()), *this)); + } + + /// @brief access specified object element with default value + /// @sa https://json.nlohmann.me/api/basic_json/value/ + /// overload for a default value of type const char* + string_t value(const typename object_t::key_type& key, const char* default_value) const + { + return value(key, string_t(default_value)); + } + + /// @brief access specified object element via JSON Pointer with default value + /// @sa https://json.nlohmann.me/api/basic_json/value/ + template::value, int>::type = 0> + ValueType value(const json_pointer& ptr, const ValueType& default_value) const + { + // at only works for objects + if (JSON_HEDLEY_LIKELY(is_object())) + { + // if pointer resolves a value, return it or use default value + JSON_TRY + { + return ptr.get_checked(this).template get(); + } + JSON_INTERNAL_CATCH (out_of_range&) + { + return default_value; + } + } + + JSON_THROW(type_error::create(306, "cannot use value() with " + std::string(type_name()), *this)); + } + + /// @brief access specified object element via JSON Pointer with default value + /// @sa https://json.nlohmann.me/api/basic_json/value/ + /// overload for a default value of type const char* + JSON_HEDLEY_NON_NULL(3) + string_t value(const json_pointer& ptr, const char* default_value) const + { + return value(ptr, string_t(default_value)); + } + + /// @brief access the first element + /// @sa https://json.nlohmann.me/api/basic_json/front/ + reference front() + { + return *begin(); + } + + /// @brief access the first element + /// @sa https://json.nlohmann.me/api/basic_json/front/ + const_reference front() const + { + return *cbegin(); + } + + /// @brief access the last element + /// @sa https://json.nlohmann.me/api/basic_json/back/ + reference back() + { + auto tmp = end(); + --tmp; + return *tmp; + } + + /// @brief access the last element + /// @sa https://json.nlohmann.me/api/basic_json/back/ + const_reference back() const + { + auto tmp = cend(); + --tmp; + return *tmp; + } + + /// @brief remove element given an iterator + /// @sa https://json.nlohmann.me/api/basic_json/erase/ + template < class IteratorType, typename std::enable_if < + std::is_same::value || + std::is_same::value, int >::type + = 0 > + IteratorType erase(IteratorType pos) + { + // make sure iterator fits the current value + if (JSON_HEDLEY_UNLIKELY(this != pos.m_object)) + { + JSON_THROW(invalid_iterator::create(202, "iterator does not fit current value", *this)); + } + + IteratorType result = end(); + + switch (m_type) + { + case value_t::boolean: + case value_t::number_float: + case value_t::number_integer: + case value_t::number_unsigned: + case value_t::string: + case value_t::binary: + { + if (JSON_HEDLEY_UNLIKELY(!pos.m_it.primitive_iterator.is_begin())) + { + JSON_THROW(invalid_iterator::create(205, "iterator out of range", *this)); + } + + if (is_string()) + { + AllocatorType alloc; + std::allocator_traits::destroy(alloc, m_value.string); + std::allocator_traits::deallocate(alloc, m_value.string, 1); + m_value.string = nullptr; + } + else if (is_binary()) + { + AllocatorType alloc; + std::allocator_traits::destroy(alloc, m_value.binary); + std::allocator_traits::deallocate(alloc, m_value.binary, 1); + m_value.binary = nullptr; + } + + m_type = value_t::null; + assert_invariant(); + break; + } + + case value_t::object: + { + result.m_it.object_iterator = m_value.object->erase(pos.m_it.object_iterator); + break; + } + + case value_t::array: + { + result.m_it.array_iterator = m_value.array->erase(pos.m_it.array_iterator); + break; + } + + case value_t::null: + case value_t::discarded: + default: + JSON_THROW(type_error::create(307, "cannot use erase() with " + std::string(type_name()), *this)); + } + + return result; + } + + /// @brief remove elements given an iterator range + /// @sa https://json.nlohmann.me/api/basic_json/erase/ + template < class IteratorType, typename std::enable_if < + std::is_same::value || + std::is_same::value, int >::type + = 0 > + IteratorType erase(IteratorType first, IteratorType last) + { + // make sure iterator fits the current value + if (JSON_HEDLEY_UNLIKELY(this != first.m_object || this != last.m_object)) + { + JSON_THROW(invalid_iterator::create(203, "iterators do not fit current value", *this)); + } + + IteratorType result = end(); + + switch (m_type) + { + case value_t::boolean: + case value_t::number_float: + case value_t::number_integer: + case value_t::number_unsigned: + case value_t::string: + case value_t::binary: + { + if (JSON_HEDLEY_LIKELY(!first.m_it.primitive_iterator.is_begin() + || !last.m_it.primitive_iterator.is_end())) + { + JSON_THROW(invalid_iterator::create(204, "iterators out of range", *this)); + } + + if (is_string()) + { + AllocatorType alloc; + std::allocator_traits::destroy(alloc, m_value.string); + std::allocator_traits::deallocate(alloc, m_value.string, 1); + m_value.string = nullptr; + } + else if (is_binary()) + { + AllocatorType alloc; + std::allocator_traits::destroy(alloc, m_value.binary); + std::allocator_traits::deallocate(alloc, m_value.binary, 1); + m_value.binary = nullptr; + } + + m_type = value_t::null; + assert_invariant(); + break; + } + + case value_t::object: + { + result.m_it.object_iterator = m_value.object->erase(first.m_it.object_iterator, + last.m_it.object_iterator); + break; + } + + case value_t::array: + { + result.m_it.array_iterator = m_value.array->erase(first.m_it.array_iterator, + last.m_it.array_iterator); + break; + } + + case value_t::null: + case value_t::discarded: + default: + JSON_THROW(type_error::create(307, "cannot use erase() with " + std::string(type_name()), *this)); + } + + return result; + } + + /// @brief remove element from a JSON object given a key + /// @sa https://json.nlohmann.me/api/basic_json/erase/ + size_type erase(const typename object_t::key_type& key) + { + // this erase only works for objects + if (JSON_HEDLEY_LIKELY(is_object())) + { + return m_value.object->erase(key); + } + + JSON_THROW(type_error::create(307, "cannot use erase() with " + std::string(type_name()), *this)); + } + + /// @brief remove element from a JSON array given an index + /// @sa https://json.nlohmann.me/api/basic_json/erase/ + void erase(const size_type idx) + { + // this erase only works for arrays + if (JSON_HEDLEY_LIKELY(is_array())) + { + if (JSON_HEDLEY_UNLIKELY(idx >= size())) + { + JSON_THROW(out_of_range::create(401, "array index " + std::to_string(idx) + " is out of range", *this)); + } + + m_value.array->erase(m_value.array->begin() + static_cast(idx)); + } + else + { + JSON_THROW(type_error::create(307, "cannot use erase() with " + std::string(type_name()), *this)); + } + } + + /// @} + + + //////////// + // lookup // + //////////// + + /// @name lookup + /// @{ + + /// @brief find an element in a JSON object + /// @sa https://json.nlohmann.me/api/basic_json/find/ + template + iterator find(KeyT&& key) + { + auto result = end(); + + if (is_object()) + { + result.m_it.object_iterator = m_value.object->find(std::forward(key)); + } + + return result; + } + + /// @brief find an element in a JSON object + /// @sa https://json.nlohmann.me/api/basic_json/find/ + template + const_iterator find(KeyT&& key) const + { + auto result = cend(); + + if (is_object()) + { + result.m_it.object_iterator = m_value.object->find(std::forward(key)); + } + + return result; + } + + /// @brief returns the number of occurrences of a key in a JSON object + /// @sa https://json.nlohmann.me/api/basic_json/count/ + template + size_type count(KeyT&& key) const + { + // return 0 for all nonobject types + return is_object() ? m_value.object->count(std::forward(key)) : 0; + } + + /// @brief check the existence of an element in a JSON object + /// @sa https://json.nlohmann.me/api/basic_json/contains/ + template < typename KeyT, typename std::enable_if < + !std::is_same::type, json_pointer>::value, int >::type = 0 > + bool contains(KeyT && key) const + { + return is_object() && m_value.object->find(std::forward(key)) != m_value.object->end(); + } + + /// @brief check the existence of an element in a JSON object given a JSON pointer + /// @sa https://json.nlohmann.me/api/basic_json/contains/ + bool contains(const json_pointer& ptr) const + { + return ptr.contains(this); + } + + /// @} + + + /////////////// + // iterators // + /////////////// + + /// @name iterators + /// @{ + + /// @brief returns an iterator to the first element + /// @sa https://json.nlohmann.me/api/basic_json/begin/ + iterator begin() noexcept + { + iterator result(this); + result.set_begin(); + return result; + } + + /// @brief returns an iterator to the first element + /// @sa https://json.nlohmann.me/api/basic_json/begin/ + const_iterator begin() const noexcept + { + return cbegin(); + } + + /// @brief returns a const iterator to the first element + /// @sa https://json.nlohmann.me/api/basic_json/cbegin/ + const_iterator cbegin() const noexcept + { + const_iterator result(this); + result.set_begin(); + return result; + } + + /// @brief returns an iterator to one past the last element + /// @sa https://json.nlohmann.me/api/basic_json/end/ + iterator end() noexcept + { + iterator result(this); + result.set_end(); + return result; + } + + /// @brief returns an iterator to one past the last element + /// @sa https://json.nlohmann.me/api/basic_json/end/ + const_iterator end() const noexcept + { + return cend(); + } + + /// @brief returns an iterator to one past the last element + /// @sa https://json.nlohmann.me/api/basic_json/cend/ + const_iterator cend() const noexcept + { + const_iterator result(this); + result.set_end(); + return result; + } + + /// @brief returns an iterator to the reverse-beginning + /// @sa https://json.nlohmann.me/api/basic_json/rbegin/ + reverse_iterator rbegin() noexcept + { + return reverse_iterator(end()); + } + + /// @brief returns an iterator to the reverse-beginning + /// @sa https://json.nlohmann.me/api/basic_json/rbegin/ + const_reverse_iterator rbegin() const noexcept + { + return crbegin(); + } + + /// @brief returns an iterator to the reverse-end + /// @sa https://json.nlohmann.me/api/basic_json/rend/ + reverse_iterator rend() noexcept + { + return reverse_iterator(begin()); + } + + /// @brief returns an iterator to the reverse-end + /// @sa https://json.nlohmann.me/api/basic_json/rend/ + const_reverse_iterator rend() const noexcept + { + return crend(); + } + + /// @brief returns a const reverse iterator to the last element + /// @sa https://json.nlohmann.me/api/basic_json/crbegin/ + const_reverse_iterator crbegin() const noexcept + { + return const_reverse_iterator(cend()); + } + + /// @brief returns a const reverse iterator to one before the first + /// @sa https://json.nlohmann.me/api/basic_json/crend/ + const_reverse_iterator crend() const noexcept + { + return const_reverse_iterator(cbegin()); + } + + public: + /// @brief wrapper to access iterator member functions in range-based for + /// @sa https://json.nlohmann.me/api/basic_json/items/ + /// @deprecated This function is deprecated since 3.1.0 and will be removed in + /// version 4.0.0 of the library. Please use @ref items() instead; + /// that is, replace `json::iterator_wrapper(j)` with `j.items()`. + JSON_HEDLEY_DEPRECATED_FOR(3.1.0, items()) + static iteration_proxy iterator_wrapper(reference ref) noexcept + { + return ref.items(); + } + + /// @brief wrapper to access iterator member functions in range-based for + /// @sa https://json.nlohmann.me/api/basic_json/items/ + /// @deprecated This function is deprecated since 3.1.0 and will be removed in + /// version 4.0.0 of the library. Please use @ref items() instead; + /// that is, replace `json::iterator_wrapper(j)` with `j.items()`. + JSON_HEDLEY_DEPRECATED_FOR(3.1.0, items()) + static iteration_proxy iterator_wrapper(const_reference ref) noexcept + { + return ref.items(); + } + + /// @brief helper to access iterator member functions in range-based for + /// @sa https://json.nlohmann.me/api/basic_json/items/ + iteration_proxy items() noexcept + { + return iteration_proxy(*this); + } + + /// @brief helper to access iterator member functions in range-based for + /// @sa https://json.nlohmann.me/api/basic_json/items/ + iteration_proxy items() const noexcept + { + return iteration_proxy(*this); + } + + /// @} + + + ////////////// + // capacity // + ////////////// + + /// @name capacity + /// @{ + + /// @brief checks whether the container is empty. + /// @sa https://json.nlohmann.me/api/basic_json/empty/ + bool empty() const noexcept + { + switch (m_type) + { + case value_t::null: + { + // null values are empty + return true; + } + + case value_t::array: + { + // delegate call to array_t::empty() + return m_value.array->empty(); + } + + case value_t::object: + { + // delegate call to object_t::empty() + return m_value.object->empty(); + } + + case value_t::string: + case value_t::boolean: + case value_t::number_integer: + case value_t::number_unsigned: + case value_t::number_float: + case value_t::binary: + case value_t::discarded: + default: + { + // all other types are nonempty + return false; + } + } + } + + /// @brief returns the number of elements + /// @sa https://json.nlohmann.me/api/basic_json/size/ + size_type size() const noexcept + { + switch (m_type) + { + case value_t::null: + { + // null values are empty + return 0; + } + + case value_t::array: + { + // delegate call to array_t::size() + return m_value.array->size(); + } + + case value_t::object: + { + // delegate call to object_t::size() + return m_value.object->size(); + } + + case value_t::string: + case value_t::boolean: + case value_t::number_integer: + case value_t::number_unsigned: + case value_t::number_float: + case value_t::binary: + case value_t::discarded: + default: + { + // all other types have size 1 + return 1; + } + } + } + + /// @brief returns the maximum possible number of elements + /// @sa https://json.nlohmann.me/api/basic_json/max_size/ + size_type max_size() const noexcept + { + switch (m_type) + { + case value_t::array: + { + // delegate call to array_t::max_size() + return m_value.array->max_size(); + } + + case value_t::object: + { + // delegate call to object_t::max_size() + return m_value.object->max_size(); + } + + case value_t::null: + case value_t::string: + case value_t::boolean: + case value_t::number_integer: + case value_t::number_unsigned: + case value_t::number_float: + case value_t::binary: + case value_t::discarded: + default: + { + // all other types have max_size() == size() + return size(); + } + } + } + + /// @} + + + /////////////// + // modifiers // + /////////////// + + /// @name modifiers + /// @{ + + /// @brief clears the contents + /// @sa https://json.nlohmann.me/api/basic_json/clear/ + void clear() noexcept + { + switch (m_type) + { + case value_t::number_integer: + { + m_value.number_integer = 0; + break; + } + + case value_t::number_unsigned: + { + m_value.number_unsigned = 0; + break; + } + + case value_t::number_float: + { + m_value.number_float = 0.0; + break; + } + + case value_t::boolean: + { + m_value.boolean = false; + break; + } + + case value_t::string: + { + m_value.string->clear(); + break; + } + + case value_t::binary: + { + m_value.binary->clear(); + break; + } + + case value_t::array: + { + m_value.array->clear(); + break; + } + + case value_t::object: + { + m_value.object->clear(); + break; + } + + case value_t::null: + case value_t::discarded: + default: + break; + } + } + + /// @brief add an object to an array + /// @sa https://json.nlohmann.me/api/basic_json/push_back/ + void push_back(basic_json&& val) + { + // push_back only works for null objects or arrays + if (JSON_HEDLEY_UNLIKELY(!(is_null() || is_array()))) + { + JSON_THROW(type_error::create(308, "cannot use push_back() with " + std::string(type_name()), *this)); + } + + // transform null object into an array + if (is_null()) + { + m_type = value_t::array; + m_value = value_t::array; + assert_invariant(); + } + + // add element to array (move semantics) + const auto old_capacity = m_value.array->capacity(); + m_value.array->push_back(std::move(val)); + set_parent(m_value.array->back(), old_capacity); + // if val is moved from, basic_json move constructor marks it null, so we do not call the destructor + } + + /// @brief add an object to an array + /// @sa https://json.nlohmann.me/api/basic_json/operator+=/ + reference operator+=(basic_json&& val) + { + push_back(std::move(val)); + return *this; + } + + /// @brief add an object to an array + /// @sa https://json.nlohmann.me/api/basic_json/push_back/ + void push_back(const basic_json& val) + { + // push_back only works for null objects or arrays + if (JSON_HEDLEY_UNLIKELY(!(is_null() || is_array()))) + { + JSON_THROW(type_error::create(308, "cannot use push_back() with " + std::string(type_name()), *this)); + } + + // transform null object into an array + if (is_null()) + { + m_type = value_t::array; + m_value = value_t::array; + assert_invariant(); + } + + // add element to array + const auto old_capacity = m_value.array->capacity(); + m_value.array->push_back(val); + set_parent(m_value.array->back(), old_capacity); + } + + /// @brief add an object to an array + /// @sa https://json.nlohmann.me/api/basic_json/operator+=/ + reference operator+=(const basic_json& val) + { + push_back(val); + return *this; + } + + /// @brief add an object to an object + /// @sa https://json.nlohmann.me/api/basic_json/push_back/ + void push_back(const typename object_t::value_type& val) + { + // push_back only works for null objects or objects + if (JSON_HEDLEY_UNLIKELY(!(is_null() || is_object()))) + { + JSON_THROW(type_error::create(308, "cannot use push_back() with " + std::string(type_name()), *this)); + } + + // transform null object into an object + if (is_null()) + { + m_type = value_t::object; + m_value = value_t::object; + assert_invariant(); + } + + // add element to object + auto res = m_value.object->insert(val); + set_parent(res.first->second); + } + + /// @brief add an object to an object + /// @sa https://json.nlohmann.me/api/basic_json/operator+=/ + reference operator+=(const typename object_t::value_type& val) + { + push_back(val); + return *this; + } + + /// @brief add an object to an object + /// @sa https://json.nlohmann.me/api/basic_json/push_back/ + void push_back(initializer_list_t init) + { + if (is_object() && init.size() == 2 && (*init.begin())->is_string()) + { + basic_json&& key = init.begin()->moved_or_copied(); + push_back(typename object_t::value_type( + std::move(key.get_ref()), (init.begin() + 1)->moved_or_copied())); + } + else + { + push_back(basic_json(init)); + } + } + + /// @brief add an object to an object + /// @sa https://json.nlohmann.me/api/basic_json/operator+=/ + reference operator+=(initializer_list_t init) + { + push_back(init); + return *this; + } + + /// @brief add an object to an array + /// @sa https://json.nlohmann.me/api/basic_json/emplace_back/ + template + reference emplace_back(Args&& ... args) + { + // emplace_back only works for null objects or arrays + if (JSON_HEDLEY_UNLIKELY(!(is_null() || is_array()))) + { + JSON_THROW(type_error::create(311, "cannot use emplace_back() with " + std::string(type_name()), *this)); + } + + // transform null object into an array + if (is_null()) + { + m_type = value_t::array; + m_value = value_t::array; + assert_invariant(); + } + + // add element to array (perfect forwarding) + const auto old_capacity = m_value.array->capacity(); + m_value.array->emplace_back(std::forward(args)...); + return set_parent(m_value.array->back(), old_capacity); + } + + /// @brief add an object to an object if key does not exist + /// @sa https://json.nlohmann.me/api/basic_json/emplace/ + template + std::pair emplace(Args&& ... args) + { + // emplace only works for null objects or arrays + if (JSON_HEDLEY_UNLIKELY(!(is_null() || is_object()))) + { + JSON_THROW(type_error::create(311, "cannot use emplace() with " + std::string(type_name()), *this)); + } + + // transform null object into an object + if (is_null()) + { + m_type = value_t::object; + m_value = value_t::object; + assert_invariant(); + } + + // add element to array (perfect forwarding) + auto res = m_value.object->emplace(std::forward(args)...); + set_parent(res.first->second); + + // create result iterator and set iterator to the result of emplace + auto it = begin(); + it.m_it.object_iterator = res.first; + + // return pair of iterator and boolean + return {it, res.second}; + } + + /// Helper for insertion of an iterator + /// @note: This uses std::distance to support GCC 4.8, + /// see https://github.com/nlohmann/json/pull/1257 + template + iterator insert_iterator(const_iterator pos, Args&& ... args) + { + iterator result(this); + JSON_ASSERT(m_value.array != nullptr); + + auto insert_pos = std::distance(m_value.array->begin(), pos.m_it.array_iterator); + m_value.array->insert(pos.m_it.array_iterator, std::forward(args)...); + result.m_it.array_iterator = m_value.array->begin() + insert_pos; + + // This could have been written as: + // result.m_it.array_iterator = m_value.array->insert(pos.m_it.array_iterator, cnt, val); + // but the return value of insert is missing in GCC 4.8, so it is written this way instead. + + set_parents(); + return result; + } + + /// @brief inserts element into array + /// @sa https://json.nlohmann.me/api/basic_json/insert/ + iterator insert(const_iterator pos, const basic_json& val) + { + // insert only works for arrays + if (JSON_HEDLEY_LIKELY(is_array())) + { + // check if iterator pos fits to this JSON value + if (JSON_HEDLEY_UNLIKELY(pos.m_object != this)) + { + JSON_THROW(invalid_iterator::create(202, "iterator does not fit current value", *this)); + } + + // insert to array and return iterator + return insert_iterator(pos, val); + } + + JSON_THROW(type_error::create(309, "cannot use insert() with " + std::string(type_name()), *this)); + } + + /// @brief inserts element into array + /// @sa https://json.nlohmann.me/api/basic_json/insert/ + iterator insert(const_iterator pos, basic_json&& val) + { + return insert(pos, val); + } + + /// @brief inserts copies of element into array + /// @sa https://json.nlohmann.me/api/basic_json/insert/ + iterator insert(const_iterator pos, size_type cnt, const basic_json& val) + { + // insert only works for arrays + if (JSON_HEDLEY_LIKELY(is_array())) + { + // check if iterator pos fits to this JSON value + if (JSON_HEDLEY_UNLIKELY(pos.m_object != this)) + { + JSON_THROW(invalid_iterator::create(202, "iterator does not fit current value", *this)); + } + + // insert to array and return iterator + return insert_iterator(pos, cnt, val); + } + + JSON_THROW(type_error::create(309, "cannot use insert() with " + std::string(type_name()), *this)); + } + + /// @brief inserts range of elements into array + /// @sa https://json.nlohmann.me/api/basic_json/insert/ + iterator insert(const_iterator pos, const_iterator first, const_iterator last) + { + // insert only works for arrays + if (JSON_HEDLEY_UNLIKELY(!is_array())) + { + JSON_THROW(type_error::create(309, "cannot use insert() with " + std::string(type_name()), *this)); + } + + // check if iterator pos fits to this JSON value + if (JSON_HEDLEY_UNLIKELY(pos.m_object != this)) + { + JSON_THROW(invalid_iterator::create(202, "iterator does not fit current value", *this)); + } + + // check if range iterators belong to the same JSON object + if (JSON_HEDLEY_UNLIKELY(first.m_object != last.m_object)) + { + JSON_THROW(invalid_iterator::create(210, "iterators do not fit", *this)); + } + + if (JSON_HEDLEY_UNLIKELY(first.m_object == this)) + { + JSON_THROW(invalid_iterator::create(211, "passed iterators may not belong to container", *this)); + } + + // insert to array and return iterator + return insert_iterator(pos, first.m_it.array_iterator, last.m_it.array_iterator); + } + + /// @brief inserts elements from initializer list into array + /// @sa https://json.nlohmann.me/api/basic_json/insert/ + iterator insert(const_iterator pos, initializer_list_t ilist) + { + // insert only works for arrays + if (JSON_HEDLEY_UNLIKELY(!is_array())) + { + JSON_THROW(type_error::create(309, "cannot use insert() with " + std::string(type_name()), *this)); + } + + // check if iterator pos fits to this JSON value + if (JSON_HEDLEY_UNLIKELY(pos.m_object != this)) + { + JSON_THROW(invalid_iterator::create(202, "iterator does not fit current value", *this)); + } + + // insert to array and return iterator + return insert_iterator(pos, ilist.begin(), ilist.end()); + } + + /// @brief inserts range of elements into object + /// @sa https://json.nlohmann.me/api/basic_json/insert/ + void insert(const_iterator first, const_iterator last) + { + // insert only works for objects + if (JSON_HEDLEY_UNLIKELY(!is_object())) + { + JSON_THROW(type_error::create(309, "cannot use insert() with " + std::string(type_name()), *this)); + } + + // check if range iterators belong to the same JSON object + if (JSON_HEDLEY_UNLIKELY(first.m_object != last.m_object)) + { + JSON_THROW(invalid_iterator::create(210, "iterators do not fit", *this)); + } + + // passed iterators must belong to objects + if (JSON_HEDLEY_UNLIKELY(!first.m_object->is_object())) + { + JSON_THROW(invalid_iterator::create(202, "iterators first and last must point to objects", *this)); + } + + m_value.object->insert(first.m_it.object_iterator, last.m_it.object_iterator); + } + + /// @brief updates a JSON object from another object, overwriting existing keys + /// @sa https://json.nlohmann.me/api/basic_json/update/ + void update(const_reference j, bool merge_objects = false) + { + update(j.begin(), j.end(), merge_objects); + } + + /// @brief updates a JSON object from another object, overwriting existing keys + /// @sa https://json.nlohmann.me/api/basic_json/update/ + void update(const_iterator first, const_iterator last, bool merge_objects = false) + { + // implicitly convert null value to an empty object + if (is_null()) + { + m_type = value_t::object; + m_value.object = create(); + assert_invariant(); + } + + if (JSON_HEDLEY_UNLIKELY(!is_object())) + { + JSON_THROW(type_error::create(312, "cannot use update() with " + std::string(type_name()), *this)); + } + + // check if range iterators belong to the same JSON object + if (JSON_HEDLEY_UNLIKELY(first.m_object != last.m_object)) + { + JSON_THROW(invalid_iterator::create(210, "iterators do not fit", *this)); + } + + // passed iterators must belong to objects + if (JSON_HEDLEY_UNLIKELY(!first.m_object->is_object())) + { + JSON_THROW(type_error::create(312, "cannot use update() with " + std::string(first.m_object->type_name()), *first.m_object)); + } + + for (auto it = first; it != last; ++it) + { + if (merge_objects && it.value().is_object()) + { + auto it2 = m_value.object->find(it.key()); + if (it2 != m_value.object->end()) + { + it2->second.update(it.value(), true); + continue; + } + } + m_value.object->operator[](it.key()) = it.value(); +#if JSON_DIAGNOSTICS + m_value.object->operator[](it.key()).m_parent = this; +#endif + } + } + + /// @brief exchanges the values + /// @sa https://json.nlohmann.me/api/basic_json/swap/ + void swap(reference other) noexcept ( + std::is_nothrow_move_constructible::value&& + std::is_nothrow_move_assignable::value&& + std::is_nothrow_move_constructible::value&& + std::is_nothrow_move_assignable::value + ) + { + std::swap(m_type, other.m_type); + std::swap(m_value, other.m_value); + + set_parents(); + other.set_parents(); + assert_invariant(); + } + + /// @brief exchanges the values + /// @sa https://json.nlohmann.me/api/basic_json/swap/ + friend void swap(reference left, reference right) noexcept ( + std::is_nothrow_move_constructible::value&& + std::is_nothrow_move_assignable::value&& + std::is_nothrow_move_constructible::value&& + std::is_nothrow_move_assignable::value + ) + { + left.swap(right); + } + + /// @brief exchanges the values + /// @sa https://json.nlohmann.me/api/basic_json/swap/ + void swap(array_t& other) // NOLINT(bugprone-exception-escape) + { + // swap only works for arrays + if (JSON_HEDLEY_LIKELY(is_array())) + { + std::swap(*(m_value.array), other); + } + else + { + JSON_THROW(type_error::create(310, "cannot use swap() with " + std::string(type_name()), *this)); + } + } + + /// @brief exchanges the values + /// @sa https://json.nlohmann.me/api/basic_json/swap/ + void swap(object_t& other) // NOLINT(bugprone-exception-escape) + { + // swap only works for objects + if (JSON_HEDLEY_LIKELY(is_object())) + { + std::swap(*(m_value.object), other); + } + else + { + JSON_THROW(type_error::create(310, "cannot use swap() with " + std::string(type_name()), *this)); + } + } + + /// @brief exchanges the values + /// @sa https://json.nlohmann.me/api/basic_json/swap/ + void swap(string_t& other) // NOLINT(bugprone-exception-escape) + { + // swap only works for strings + if (JSON_HEDLEY_LIKELY(is_string())) + { + std::swap(*(m_value.string), other); + } + else + { + JSON_THROW(type_error::create(310, "cannot use swap() with " + std::string(type_name()), *this)); + } + } + + /// @brief exchanges the values + /// @sa https://json.nlohmann.me/api/basic_json/swap/ + void swap(binary_t& other) // NOLINT(bugprone-exception-escape) + { + // swap only works for strings + if (JSON_HEDLEY_LIKELY(is_binary())) + { + std::swap(*(m_value.binary), other); + } + else + { + JSON_THROW(type_error::create(310, "cannot use swap() with " + std::string(type_name()), *this)); + } + } + + /// @brief exchanges the values + /// @sa https://json.nlohmann.me/api/basic_json/swap/ + void swap(typename binary_t::container_type& other) // NOLINT(bugprone-exception-escape) + { + // swap only works for strings + if (JSON_HEDLEY_LIKELY(is_binary())) + { + std::swap(*(m_value.binary), other); + } + else + { + JSON_THROW(type_error::create(310, "cannot use swap() with " + std::string(type_name()), *this)); + } + } + + /// @} + + public: + ////////////////////////////////////////// + // lexicographical comparison operators // + ////////////////////////////////////////// + + /// @name lexicographical comparison operators + /// @{ + + /// @brief comparison: equal + /// @sa https://json.nlohmann.me/api/basic_json/operator_eq/ + friend bool operator==(const_reference lhs, const_reference rhs) noexcept + { +#ifdef __GNUC__ +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wfloat-equal" +#endif + const auto lhs_type = lhs.type(); + const auto rhs_type = rhs.type(); + + if (lhs_type == rhs_type) + { + switch (lhs_type) + { + case value_t::array: + return *lhs.m_value.array == *rhs.m_value.array; + + case value_t::object: + return *lhs.m_value.object == *rhs.m_value.object; + + case value_t::null: + return true; + + case value_t::string: + return *lhs.m_value.string == *rhs.m_value.string; + + case value_t::boolean: + return lhs.m_value.boolean == rhs.m_value.boolean; + + case value_t::number_integer: + return lhs.m_value.number_integer == rhs.m_value.number_integer; + + case value_t::number_unsigned: + return lhs.m_value.number_unsigned == rhs.m_value.number_unsigned; + + case value_t::number_float: + return lhs.m_value.number_float == rhs.m_value.number_float; + + case value_t::binary: + return *lhs.m_value.binary == *rhs.m_value.binary; + + case value_t::discarded: + default: + return false; + } + } + else if (lhs_type == value_t::number_integer && rhs_type == value_t::number_float) + { + return static_cast(lhs.m_value.number_integer) == rhs.m_value.number_float; + } + else if (lhs_type == value_t::number_float && rhs_type == value_t::number_integer) + { + return lhs.m_value.number_float == static_cast(rhs.m_value.number_integer); + } + else if (lhs_type == value_t::number_unsigned && rhs_type == value_t::number_float) + { + return static_cast(lhs.m_value.number_unsigned) == rhs.m_value.number_float; + } + else if (lhs_type == value_t::number_float && rhs_type == value_t::number_unsigned) + { + return lhs.m_value.number_float == static_cast(rhs.m_value.number_unsigned); + } + else if (lhs_type == value_t::number_unsigned && rhs_type == value_t::number_integer) + { + return static_cast(lhs.m_value.number_unsigned) == rhs.m_value.number_integer; + } + else if (lhs_type == value_t::number_integer && rhs_type == value_t::number_unsigned) + { + return lhs.m_value.number_integer == static_cast(rhs.m_value.number_unsigned); + } + + return false; +#ifdef __GNUC__ +#pragma GCC diagnostic pop +#endif + } + + /// @brief comparison: equal + /// @sa https://json.nlohmann.me/api/basic_json/operator_eq/ + template::value, int>::type = 0> + friend bool operator==(const_reference lhs, ScalarType rhs) noexcept + { + return lhs == basic_json(rhs); + } + + /// @brief comparison: equal + /// @sa https://json.nlohmann.me/api/basic_json/operator_eq/ + template::value, int>::type = 0> + friend bool operator==(ScalarType lhs, const_reference rhs) noexcept + { + return basic_json(lhs) == rhs; + } + + /// @brief comparison: not equal + /// @sa https://json.nlohmann.me/api/basic_json/operator_ne/ + friend bool operator!=(const_reference lhs, const_reference rhs) noexcept + { + return !(lhs == rhs); + } + + /// @brief comparison: not equal + /// @sa https://json.nlohmann.me/api/basic_json/operator_ne/ + template::value, int>::type = 0> + friend bool operator!=(const_reference lhs, ScalarType rhs) noexcept + { + return lhs != basic_json(rhs); + } + + /// @brief comparison: not equal + /// @sa https://json.nlohmann.me/api/basic_json/operator_ne/ + template::value, int>::type = 0> + friend bool operator!=(ScalarType lhs, const_reference rhs) noexcept + { + return basic_json(lhs) != rhs; + } + + /// @brief comparison: less than + /// @sa https://json.nlohmann.me/api/basic_json/operator_lt/ + friend bool operator<(const_reference lhs, const_reference rhs) noexcept + { + const auto lhs_type = lhs.type(); + const auto rhs_type = rhs.type(); + + if (lhs_type == rhs_type) + { + switch (lhs_type) + { + case value_t::array: + // note parentheses are necessary, see + // https://github.com/nlohmann/json/issues/1530 + return (*lhs.m_value.array) < (*rhs.m_value.array); + + case value_t::object: + return (*lhs.m_value.object) < (*rhs.m_value.object); + + case value_t::null: + return false; + + case value_t::string: + return (*lhs.m_value.string) < (*rhs.m_value.string); + + case value_t::boolean: + return (lhs.m_value.boolean) < (rhs.m_value.boolean); + + case value_t::number_integer: + return (lhs.m_value.number_integer) < (rhs.m_value.number_integer); + + case value_t::number_unsigned: + return (lhs.m_value.number_unsigned) < (rhs.m_value.number_unsigned); + + case value_t::number_float: + return (lhs.m_value.number_float) < (rhs.m_value.number_float); + + case value_t::binary: + return (*lhs.m_value.binary) < (*rhs.m_value.binary); + + case value_t::discarded: + default: + return false; + } + } + else if (lhs_type == value_t::number_integer && rhs_type == value_t::number_float) + { + return static_cast(lhs.m_value.number_integer) < rhs.m_value.number_float; + } + else if (lhs_type == value_t::number_float && rhs_type == value_t::number_integer) + { + return lhs.m_value.number_float < static_cast(rhs.m_value.number_integer); + } + else if (lhs_type == value_t::number_unsigned && rhs_type == value_t::number_float) + { + return static_cast(lhs.m_value.number_unsigned) < rhs.m_value.number_float; + } + else if (lhs_type == value_t::number_float && rhs_type == value_t::number_unsigned) + { + return lhs.m_value.number_float < static_cast(rhs.m_value.number_unsigned); + } + else if (lhs_type == value_t::number_integer && rhs_type == value_t::number_unsigned) + { + return lhs.m_value.number_integer < static_cast(rhs.m_value.number_unsigned); + } + else if (lhs_type == value_t::number_unsigned && rhs_type == value_t::number_integer) + { + return static_cast(lhs.m_value.number_unsigned) < rhs.m_value.number_integer; + } + + // We only reach this line if we cannot compare values. In that case, + // we compare types. Note we have to call the operator explicitly, + // because MSVC has problems otherwise. + return operator<(lhs_type, rhs_type); + } + + /// @brief comparison: less than + /// @sa https://json.nlohmann.me/api/basic_json/operator_lt/ + template::value, int>::type = 0> + friend bool operator<(const_reference lhs, ScalarType rhs) noexcept + { + return lhs < basic_json(rhs); + } + + /// @brief comparison: less than + /// @sa https://json.nlohmann.me/api/basic_json/operator_lt/ + template::value, int>::type = 0> + friend bool operator<(ScalarType lhs, const_reference rhs) noexcept + { + return basic_json(lhs) < rhs; + } + + /// @brief comparison: less than or equal + /// @sa https://json.nlohmann.me/api/basic_json/operator_le/ + friend bool operator<=(const_reference lhs, const_reference rhs) noexcept + { + return !(rhs < lhs); + } + + /// @brief comparison: less than or equal + /// @sa https://json.nlohmann.me/api/basic_json/operator_le/ + template::value, int>::type = 0> + friend bool operator<=(const_reference lhs, ScalarType rhs) noexcept + { + return lhs <= basic_json(rhs); + } + + /// @brief comparison: less than or equal + /// @sa https://json.nlohmann.me/api/basic_json/operator_le/ + template::value, int>::type = 0> + friend bool operator<=(ScalarType lhs, const_reference rhs) noexcept + { + return basic_json(lhs) <= rhs; + } + + /// @brief comparison: greater than + /// @sa https://json.nlohmann.me/api/basic_json/operator_gt/ + friend bool operator>(const_reference lhs, const_reference rhs) noexcept + { + return !(lhs <= rhs); + } + + /// @brief comparison: greater than + /// @sa https://json.nlohmann.me/api/basic_json/operator_gt/ + template::value, int>::type = 0> + friend bool operator>(const_reference lhs, ScalarType rhs) noexcept + { + return lhs > basic_json(rhs); + } + + /// @brief comparison: greater than + /// @sa https://json.nlohmann.me/api/basic_json/operator_gt/ + template::value, int>::type = 0> + friend bool operator>(ScalarType lhs, const_reference rhs) noexcept + { + return basic_json(lhs) > rhs; + } + + /// @brief comparison: greater than or equal + /// @sa https://json.nlohmann.me/api/basic_json/operator_ge/ + friend bool operator>=(const_reference lhs, const_reference rhs) noexcept + { + return !(lhs < rhs); + } + + /// @brief comparison: greater than or equal + /// @sa https://json.nlohmann.me/api/basic_json/operator_ge/ + template::value, int>::type = 0> + friend bool operator>=(const_reference lhs, ScalarType rhs) noexcept + { + return lhs >= basic_json(rhs); + } + + /// @brief comparison: greater than or equal + /// @sa https://json.nlohmann.me/api/basic_json/operator_ge/ + template::value, int>::type = 0> + friend bool operator>=(ScalarType lhs, const_reference rhs) noexcept + { + return basic_json(lhs) >= rhs; + } + + /// @} + + /////////////////// + // serialization // + /////////////////// + + /// @name serialization + /// @{ +#ifndef JSON_NO_IO + /// @brief serialize to stream + /// @sa https://json.nlohmann.me/api/basic_json/operator_ltlt/ + friend std::ostream& operator<<(std::ostream& o, const basic_json& j) + { + // read width member and use it as indentation parameter if nonzero + const bool pretty_print = o.width() > 0; + const auto indentation = pretty_print ? o.width() : 0; + + // reset width to 0 for subsequent calls to this stream + o.width(0); + + // do the actual serialization + serializer s(detail::output_adapter(o), o.fill()); + s.dump(j, pretty_print, false, static_cast(indentation)); + return o; + } + + /// @brief serialize to stream + /// @sa https://json.nlohmann.me/api/basic_json/operator_ltlt/ + /// @deprecated This function is deprecated since 3.0.0 and will be removed in + /// version 4.0.0 of the library. Please use + /// operator<<(std::ostream&, const basic_json&) instead; that is, + /// replace calls like `j >> o;` with `o << j;`. + JSON_HEDLEY_DEPRECATED_FOR(3.0.0, operator<<(std::ostream&, const basic_json&)) + friend std::ostream& operator>>(const basic_json& j, std::ostream& o) + { + return o << j; + } +#endif // JSON_NO_IO + /// @} + + + ///////////////////// + // deserialization // + ///////////////////// + + /// @name deserialization + /// @{ + + /// @brief deserialize from a compatible input + /// @sa https://json.nlohmann.me/api/basic_json/parse/ + template + JSON_HEDLEY_WARN_UNUSED_RESULT + static basic_json parse(InputType&& i, + const parser_callback_t cb = nullptr, + const bool allow_exceptions = true, + const bool ignore_comments = false) + { + basic_json result; + parser(detail::input_adapter(std::forward(i)), cb, allow_exceptions, ignore_comments).parse(true, result); + return result; + } + + /// @brief deserialize from a pair of character iterators + /// @sa https://json.nlohmann.me/api/basic_json/parse/ + template + JSON_HEDLEY_WARN_UNUSED_RESULT + static basic_json parse(IteratorType first, + IteratorType last, + const parser_callback_t cb = nullptr, + const bool allow_exceptions = true, + const bool ignore_comments = false) + { + basic_json result; + parser(detail::input_adapter(std::move(first), std::move(last)), cb, allow_exceptions, ignore_comments).parse(true, result); + return result; + } + + JSON_HEDLEY_WARN_UNUSED_RESULT + JSON_HEDLEY_DEPRECATED_FOR(3.8.0, parse(ptr, ptr + len)) + static basic_json parse(detail::span_input_adapter&& i, + const parser_callback_t cb = nullptr, + const bool allow_exceptions = true, + const bool ignore_comments = false) + { + basic_json result; + parser(i.get(), cb, allow_exceptions, ignore_comments).parse(true, result); + return result; + } + + /// @brief check if the input is valid JSON + /// @sa https://json.nlohmann.me/api/basic_json/accept/ + template + static bool accept(InputType&& i, + const bool ignore_comments = false) + { + return parser(detail::input_adapter(std::forward(i)), nullptr, false, ignore_comments).accept(true); + } + + /// @brief check if the input is valid JSON + /// @sa https://json.nlohmann.me/api/basic_json/accept/ + template + static bool accept(IteratorType first, IteratorType last, + const bool ignore_comments = false) + { + return parser(detail::input_adapter(std::move(first), std::move(last)), nullptr, false, ignore_comments).accept(true); + } + + JSON_HEDLEY_WARN_UNUSED_RESULT + JSON_HEDLEY_DEPRECATED_FOR(3.8.0, accept(ptr, ptr + len)) + static bool accept(detail::span_input_adapter&& i, + const bool ignore_comments = false) + { + return parser(i.get(), nullptr, false, ignore_comments).accept(true); + } + + /// @brief generate SAX events + /// @sa https://json.nlohmann.me/api/basic_json/sax_parse/ + template + JSON_HEDLEY_NON_NULL(2) + static bool sax_parse(InputType&& i, SAX* sax, + input_format_t format = input_format_t::json, + const bool strict = true, + const bool ignore_comments = false) + { + auto ia = detail::input_adapter(std::forward(i)); + return format == input_format_t::json + ? parser(std::move(ia), nullptr, true, ignore_comments).sax_parse(sax, strict) + : detail::binary_reader(std::move(ia)).sax_parse(format, sax, strict); + } + + /// @brief generate SAX events + /// @sa https://json.nlohmann.me/api/basic_json/sax_parse/ + template + JSON_HEDLEY_NON_NULL(3) + static bool sax_parse(IteratorType first, IteratorType last, SAX* sax, + input_format_t format = input_format_t::json, + const bool strict = true, + const bool ignore_comments = false) + { + auto ia = detail::input_adapter(std::move(first), std::move(last)); + return format == input_format_t::json + ? parser(std::move(ia), nullptr, true, ignore_comments).sax_parse(sax, strict) + : detail::binary_reader(std::move(ia)).sax_parse(format, sax, strict); + } + + /// @brief generate SAX events + /// @sa https://json.nlohmann.me/api/basic_json/sax_parse/ + /// @deprecated This function is deprecated since 3.8.0 and will be removed in + /// version 4.0.0 of the library. Please use + /// sax_parse(ptr, ptr + len) instead. + template + JSON_HEDLEY_DEPRECATED_FOR(3.8.0, sax_parse(ptr, ptr + len, ...)) + JSON_HEDLEY_NON_NULL(2) + static bool sax_parse(detail::span_input_adapter&& i, SAX* sax, + input_format_t format = input_format_t::json, + const bool strict = true, + const bool ignore_comments = false) + { + auto ia = i.get(); + return format == input_format_t::json + // NOLINTNEXTLINE(hicpp-move-const-arg,performance-move-const-arg) + ? parser(std::move(ia), nullptr, true, ignore_comments).sax_parse(sax, strict) + // NOLINTNEXTLINE(hicpp-move-const-arg,performance-move-const-arg) + : detail::binary_reader(std::move(ia)).sax_parse(format, sax, strict); + } +#ifndef JSON_NO_IO + /// @brief deserialize from stream + /// @sa https://json.nlohmann.me/api/basic_json/operator_gtgt/ + /// @deprecated This stream operator is deprecated since 3.0.0 and will be removed in + /// version 4.0.0 of the library. Please use + /// operator>>(std::istream&, basic_json&) instead; that is, + /// replace calls like `j << i;` with `i >> j;`. + JSON_HEDLEY_DEPRECATED_FOR(3.0.0, operator>>(std::istream&, basic_json&)) + friend std::istream& operator<<(basic_json& j, std::istream& i) + { + return operator>>(i, j); + } + + /// @brief deserialize from stream + /// @sa https://json.nlohmann.me/api/basic_json/operator_gtgt/ + friend std::istream& operator>>(std::istream& i, basic_json& j) + { + parser(detail::input_adapter(i)).parse(false, j); + return i; + } +#endif // JSON_NO_IO + /// @} + + /////////////////////////// + // convenience functions // + /////////////////////////// + + /// @brief return the type as string + /// @sa https://json.nlohmann.me/api/basic_json/type_name/ + JSON_HEDLEY_RETURNS_NON_NULL + const char* type_name() const noexcept + { + switch (m_type) + { + case value_t::null: + return "null"; + case value_t::object: + return "object"; + case value_t::array: + return "array"; + case value_t::string: + return "string"; + case value_t::boolean: + return "boolean"; + case value_t::binary: + return "binary"; + case value_t::discarded: + return "discarded"; + case value_t::number_integer: + case value_t::number_unsigned: + case value_t::number_float: + default: + return "number"; + } + } + + + JSON_PRIVATE_UNLESS_TESTED: + ////////////////////// + // member variables // + ////////////////////// + + /// the type of the current element + value_t m_type = value_t::null; + + /// the value of the current element + json_value m_value = {}; + +#if JSON_DIAGNOSTICS + /// a pointer to a parent value (for debugging purposes) + basic_json* m_parent = nullptr; +#endif + + ////////////////////////////////////////// + // binary serialization/deserialization // + ////////////////////////////////////////// + + /// @name binary serialization/deserialization support + /// @{ + + public: + /// @brief create a CBOR serialization of a given JSON value + /// @sa https://json.nlohmann.me/api/basic_json/to_cbor/ + static std::vector to_cbor(const basic_json& j) + { + std::vector result; + to_cbor(j, result); + return result; + } + + /// @brief create a CBOR serialization of a given JSON value + /// @sa https://json.nlohmann.me/api/basic_json/to_cbor/ + static void to_cbor(const basic_json& j, detail::output_adapter o) + { + binary_writer(o).write_cbor(j); + } + + /// @brief create a CBOR serialization of a given JSON value + /// @sa https://json.nlohmann.me/api/basic_json/to_cbor/ + static void to_cbor(const basic_json& j, detail::output_adapter o) + { + binary_writer(o).write_cbor(j); + } + + /// @brief create a MessagePack serialization of a given JSON value + /// @sa https://json.nlohmann.me/api/basic_json/to_msgpack/ + static std::vector to_msgpack(const basic_json& j) + { + std::vector result; + to_msgpack(j, result); + return result; + } + + /// @brief create a MessagePack serialization of a given JSON value + /// @sa https://json.nlohmann.me/api/basic_json/to_msgpack/ + static void to_msgpack(const basic_json& j, detail::output_adapter o) + { + binary_writer(o).write_msgpack(j); + } + + /// @brief create a MessagePack serialization of a given JSON value + /// @sa https://json.nlohmann.me/api/basic_json/to_msgpack/ + static void to_msgpack(const basic_json& j, detail::output_adapter o) + { + binary_writer(o).write_msgpack(j); + } + + /// @brief create a UBJSON serialization of a given JSON value + /// @sa https://json.nlohmann.me/api/basic_json/to_ubjson/ + static std::vector to_ubjson(const basic_json& j, + const bool use_size = false, + const bool use_type = false) + { + std::vector result; + to_ubjson(j, result, use_size, use_type); + return result; + } + + /// @brief create a UBJSON serialization of a given JSON value + /// @sa https://json.nlohmann.me/api/basic_json/to_ubjson/ + static void to_ubjson(const basic_json& j, detail::output_adapter o, + const bool use_size = false, const bool use_type = false) + { + binary_writer(o).write_ubjson(j, use_size, use_type); + } + + /// @brief create a UBJSON serialization of a given JSON value + /// @sa https://json.nlohmann.me/api/basic_json/to_ubjson/ + static void to_ubjson(const basic_json& j, detail::output_adapter o, + const bool use_size = false, const bool use_type = false) + { + binary_writer(o).write_ubjson(j, use_size, use_type); + } + + /// @brief create a BSON serialization of a given JSON value + /// @sa https://json.nlohmann.me/api/basic_json/to_bson/ + static std::vector to_bson(const basic_json& j) + { + std::vector result; + to_bson(j, result); + return result; + } + + /// @brief create a BSON serialization of a given JSON value + /// @sa https://json.nlohmann.me/api/basic_json/to_bson/ + static void to_bson(const basic_json& j, detail::output_adapter o) + { + binary_writer(o).write_bson(j); + } + + /// @brief create a BSON serialization of a given JSON value + /// @sa https://json.nlohmann.me/api/basic_json/to_bson/ + static void to_bson(const basic_json& j, detail::output_adapter o) + { + binary_writer(o).write_bson(j); + } + + /// @brief create a JSON value from an input in CBOR format + /// @sa https://json.nlohmann.me/api/basic_json/from_cbor/ + template + JSON_HEDLEY_WARN_UNUSED_RESULT + static basic_json from_cbor(InputType&& i, + const bool strict = true, + const bool allow_exceptions = true, + const cbor_tag_handler_t tag_handler = cbor_tag_handler_t::error) + { + basic_json result; + detail::json_sax_dom_parser sdp(result, allow_exceptions); + auto ia = detail::input_adapter(std::forward(i)); + const bool res = binary_reader(std::move(ia)).sax_parse(input_format_t::cbor, &sdp, strict, tag_handler); + return res ? result : basic_json(value_t::discarded); + } + + /// @brief create a JSON value from an input in CBOR format + /// @sa https://json.nlohmann.me/api/basic_json/from_cbor/ + template + JSON_HEDLEY_WARN_UNUSED_RESULT + static basic_json from_cbor(IteratorType first, IteratorType last, + const bool strict = true, + const bool allow_exceptions = true, + const cbor_tag_handler_t tag_handler = cbor_tag_handler_t::error) + { + basic_json result; + detail::json_sax_dom_parser sdp(result, allow_exceptions); + auto ia = detail::input_adapter(std::move(first), std::move(last)); + const bool res = binary_reader(std::move(ia)).sax_parse(input_format_t::cbor, &sdp, strict, tag_handler); + return res ? result : basic_json(value_t::discarded); + } + + template + JSON_HEDLEY_WARN_UNUSED_RESULT + JSON_HEDLEY_DEPRECATED_FOR(3.8.0, from_cbor(ptr, ptr + len)) + static basic_json from_cbor(const T* ptr, std::size_t len, + const bool strict = true, + const bool allow_exceptions = true, + const cbor_tag_handler_t tag_handler = cbor_tag_handler_t::error) + { + return from_cbor(ptr, ptr + len, strict, allow_exceptions, tag_handler); + } + + + JSON_HEDLEY_WARN_UNUSED_RESULT + JSON_HEDLEY_DEPRECATED_FOR(3.8.0, from_cbor(ptr, ptr + len)) + static basic_json from_cbor(detail::span_input_adapter&& i, + const bool strict = true, + const bool allow_exceptions = true, + const cbor_tag_handler_t tag_handler = cbor_tag_handler_t::error) + { + basic_json result; + detail::json_sax_dom_parser sdp(result, allow_exceptions); + auto ia = i.get(); + // NOLINTNEXTLINE(hicpp-move-const-arg,performance-move-const-arg) + const bool res = binary_reader(std::move(ia)).sax_parse(input_format_t::cbor, &sdp, strict, tag_handler); + return res ? result : basic_json(value_t::discarded); + } + + /// @brief create a JSON value from an input in MessagePack format + /// @sa https://json.nlohmann.me/api/basic_json/from_msgpack/ + template + JSON_HEDLEY_WARN_UNUSED_RESULT + static basic_json from_msgpack(InputType&& i, + const bool strict = true, + const bool allow_exceptions = true) + { + basic_json result; + detail::json_sax_dom_parser sdp(result, allow_exceptions); + auto ia = detail::input_adapter(std::forward(i)); + const bool res = binary_reader(std::move(ia)).sax_parse(input_format_t::msgpack, &sdp, strict); + return res ? result : basic_json(value_t::discarded); + } + + /// @brief create a JSON value from an input in MessagePack format + /// @sa https://json.nlohmann.me/api/basic_json/from_msgpack/ + template + JSON_HEDLEY_WARN_UNUSED_RESULT + static basic_json from_msgpack(IteratorType first, IteratorType last, + const bool strict = true, + const bool allow_exceptions = true) + { + basic_json result; + detail::json_sax_dom_parser sdp(result, allow_exceptions); + auto ia = detail::input_adapter(std::move(first), std::move(last)); + const bool res = binary_reader(std::move(ia)).sax_parse(input_format_t::msgpack, &sdp, strict); + return res ? result : basic_json(value_t::discarded); + } + + template + JSON_HEDLEY_WARN_UNUSED_RESULT + JSON_HEDLEY_DEPRECATED_FOR(3.8.0, from_msgpack(ptr, ptr + len)) + static basic_json from_msgpack(const T* ptr, std::size_t len, + const bool strict = true, + const bool allow_exceptions = true) + { + return from_msgpack(ptr, ptr + len, strict, allow_exceptions); + } + + JSON_HEDLEY_WARN_UNUSED_RESULT + JSON_HEDLEY_DEPRECATED_FOR(3.8.0, from_msgpack(ptr, ptr + len)) + static basic_json from_msgpack(detail::span_input_adapter&& i, + const bool strict = true, + const bool allow_exceptions = true) + { + basic_json result; + detail::json_sax_dom_parser sdp(result, allow_exceptions); + auto ia = i.get(); + // NOLINTNEXTLINE(hicpp-move-const-arg,performance-move-const-arg) + const bool res = binary_reader(std::move(ia)).sax_parse(input_format_t::msgpack, &sdp, strict); + return res ? result : basic_json(value_t::discarded); + } + + /// @brief create a JSON value from an input in UBJSON format + /// @sa https://json.nlohmann.me/api/basic_json/from_ubjson/ + template + JSON_HEDLEY_WARN_UNUSED_RESULT + static basic_json from_ubjson(InputType&& i, + const bool strict = true, + const bool allow_exceptions = true) + { + basic_json result; + detail::json_sax_dom_parser sdp(result, allow_exceptions); + auto ia = detail::input_adapter(std::forward(i)); + const bool res = binary_reader(std::move(ia)).sax_parse(input_format_t::ubjson, &sdp, strict); + return res ? result : basic_json(value_t::discarded); + } + + /// @brief create a JSON value from an input in UBJSON format + /// @sa https://json.nlohmann.me/api/basic_json/from_ubjson/ + template + JSON_HEDLEY_WARN_UNUSED_RESULT + static basic_json from_ubjson(IteratorType first, IteratorType last, + const bool strict = true, + const bool allow_exceptions = true) + { + basic_json result; + detail::json_sax_dom_parser sdp(result, allow_exceptions); + auto ia = detail::input_adapter(std::move(first), std::move(last)); + const bool res = binary_reader(std::move(ia)).sax_parse(input_format_t::ubjson, &sdp, strict); + return res ? result : basic_json(value_t::discarded); + } + + template + JSON_HEDLEY_WARN_UNUSED_RESULT + JSON_HEDLEY_DEPRECATED_FOR(3.8.0, from_ubjson(ptr, ptr + len)) + static basic_json from_ubjson(const T* ptr, std::size_t len, + const bool strict = true, + const bool allow_exceptions = true) + { + return from_ubjson(ptr, ptr + len, strict, allow_exceptions); + } + + JSON_HEDLEY_WARN_UNUSED_RESULT + JSON_HEDLEY_DEPRECATED_FOR(3.8.0, from_ubjson(ptr, ptr + len)) + static basic_json from_ubjson(detail::span_input_adapter&& i, + const bool strict = true, + const bool allow_exceptions = true) + { + basic_json result; + detail::json_sax_dom_parser sdp(result, allow_exceptions); + auto ia = i.get(); + // NOLINTNEXTLINE(hicpp-move-const-arg,performance-move-const-arg) + const bool res = binary_reader(std::move(ia)).sax_parse(input_format_t::ubjson, &sdp, strict); + return res ? result : basic_json(value_t::discarded); + } + + /// @brief create a JSON value from an input in BSON format + /// @sa https://json.nlohmann.me/api/basic_json/from_bson/ + template + JSON_HEDLEY_WARN_UNUSED_RESULT + static basic_json from_bson(InputType&& i, + const bool strict = true, + const bool allow_exceptions = true) + { + basic_json result; + detail::json_sax_dom_parser sdp(result, allow_exceptions); + auto ia = detail::input_adapter(std::forward(i)); + const bool res = binary_reader(std::move(ia)).sax_parse(input_format_t::bson, &sdp, strict); + return res ? result : basic_json(value_t::discarded); + } + + /// @brief create a JSON value from an input in BSON format + /// @sa https://json.nlohmann.me/api/basic_json/from_bson/ + template + JSON_HEDLEY_WARN_UNUSED_RESULT + static basic_json from_bson(IteratorType first, IteratorType last, + const bool strict = true, + const bool allow_exceptions = true) + { + basic_json result; + detail::json_sax_dom_parser sdp(result, allow_exceptions); + auto ia = detail::input_adapter(std::move(first), std::move(last)); + const bool res = binary_reader(std::move(ia)).sax_parse(input_format_t::bson, &sdp, strict); + return res ? result : basic_json(value_t::discarded); + } + + template + JSON_HEDLEY_WARN_UNUSED_RESULT + JSON_HEDLEY_DEPRECATED_FOR(3.8.0, from_bson(ptr, ptr + len)) + static basic_json from_bson(const T* ptr, std::size_t len, + const bool strict = true, + const bool allow_exceptions = true) + { + return from_bson(ptr, ptr + len, strict, allow_exceptions); + } + + JSON_HEDLEY_WARN_UNUSED_RESULT + JSON_HEDLEY_DEPRECATED_FOR(3.8.0, from_bson(ptr, ptr + len)) + static basic_json from_bson(detail::span_input_adapter&& i, + const bool strict = true, + const bool allow_exceptions = true) + { + basic_json result; + detail::json_sax_dom_parser sdp(result, allow_exceptions); + auto ia = i.get(); + // NOLINTNEXTLINE(hicpp-move-const-arg,performance-move-const-arg) + const bool res = binary_reader(std::move(ia)).sax_parse(input_format_t::bson, &sdp, strict); + return res ? result : basic_json(value_t::discarded); + } + /// @} + + ////////////////////////// + // JSON Pointer support // + ////////////////////////// + + /// @name JSON Pointer functions + /// @{ + + /// @brief access specified element via JSON Pointer + /// @sa https://json.nlohmann.me/api/basic_json/operator%5B%5D/ + reference operator[](const json_pointer& ptr) + { + return ptr.get_unchecked(this); + } + + /// @brief access specified element via JSON Pointer + /// @sa https://json.nlohmann.me/api/basic_json/operator%5B%5D/ + const_reference operator[](const json_pointer& ptr) const + { + return ptr.get_unchecked(this); + } + + /// @brief access specified element via JSON Pointer + /// @sa https://json.nlohmann.me/api/basic_json/at/ + reference at(const json_pointer& ptr) + { + return ptr.get_checked(this); + } + + /// @brief access specified element via JSON Pointer + /// @sa https://json.nlohmann.me/api/basic_json/at/ + const_reference at(const json_pointer& ptr) const + { + return ptr.get_checked(this); + } + + /// @brief return flattened JSON value + /// @sa https://json.nlohmann.me/api/basic_json/flatten/ + basic_json flatten() const + { + basic_json result(value_t::object); + json_pointer::flatten("", *this, result); + return result; + } + + /// @brief unflatten a previously flattened JSON value + /// @sa https://json.nlohmann.me/api/basic_json/unflatten/ + basic_json unflatten() const + { + return json_pointer::unflatten(*this); + } + + /// @} + + ////////////////////////// + // JSON Patch functions // + ////////////////////////// + + /// @name JSON Patch functions + /// @{ + + /// @brief applies a JSON patch + /// @sa https://json.nlohmann.me/api/basic_json/patch/ + basic_json patch(const basic_json& json_patch) const + { + // make a working copy to apply the patch to + basic_json result = *this; + + // the valid JSON Patch operations + enum class patch_operations {add, remove, replace, move, copy, test, invalid}; + + const auto get_op = [](const std::string & op) + { + if (op == "add") + { + return patch_operations::add; + } + if (op == "remove") + { + return patch_operations::remove; + } + if (op == "replace") + { + return patch_operations::replace; + } + if (op == "move") + { + return patch_operations::move; + } + if (op == "copy") + { + return patch_operations::copy; + } + if (op == "test") + { + return patch_operations::test; + } + + return patch_operations::invalid; + }; + + // wrapper for "add" operation; add value at ptr + const auto operation_add = [&result](json_pointer & ptr, basic_json val) + { + // adding to the root of the target document means replacing it + if (ptr.empty()) + { + result = val; + return; + } + + // make sure the top element of the pointer exists + json_pointer top_pointer = ptr.top(); + if (top_pointer != ptr) + { + result.at(top_pointer); + } + + // get reference to parent of JSON pointer ptr + const auto last_path = ptr.back(); + ptr.pop_back(); + basic_json& parent = result[ptr]; + + switch (parent.m_type) + { + case value_t::null: + case value_t::object: + { + // use operator[] to add value + parent[last_path] = val; + break; + } + + case value_t::array: + { + if (last_path == "-") + { + // special case: append to back + parent.push_back(val); + } + else + { + const auto idx = json_pointer::array_index(last_path); + if (JSON_HEDLEY_UNLIKELY(idx > parent.size())) + { + // avoid undefined behavior + JSON_THROW(out_of_range::create(401, "array index " + std::to_string(idx) + " is out of range", parent)); + } + + // default case: insert add offset + parent.insert(parent.begin() + static_cast(idx), val); + } + break; + } + + // if there exists a parent it cannot be primitive + case value_t::string: // LCOV_EXCL_LINE + case value_t::boolean: // LCOV_EXCL_LINE + case value_t::number_integer: // LCOV_EXCL_LINE + case value_t::number_unsigned: // LCOV_EXCL_LINE + case value_t::number_float: // LCOV_EXCL_LINE + case value_t::binary: // LCOV_EXCL_LINE + case value_t::discarded: // LCOV_EXCL_LINE + default: // LCOV_EXCL_LINE + JSON_ASSERT(false); // NOLINT(cert-dcl03-c,hicpp-static-assert,misc-static-assert) LCOV_EXCL_LINE + } + }; + + // wrapper for "remove" operation; remove value at ptr + const auto operation_remove = [this, &result](json_pointer & ptr) + { + // get reference to parent of JSON pointer ptr + const auto last_path = ptr.back(); + ptr.pop_back(); + basic_json& parent = result.at(ptr); + + // remove child + if (parent.is_object()) + { + // perform range check + auto it = parent.find(last_path); + if (JSON_HEDLEY_LIKELY(it != parent.end())) + { + parent.erase(it); + } + else + { + JSON_THROW(out_of_range::create(403, "key '" + last_path + "' not found", *this)); + } + } + else if (parent.is_array()) + { + // note erase performs range check + parent.erase(json_pointer::array_index(last_path)); + } + }; + + // type check: top level value must be an array + if (JSON_HEDLEY_UNLIKELY(!json_patch.is_array())) + { + JSON_THROW(parse_error::create(104, 0, "JSON patch must be an array of objects", json_patch)); + } + + // iterate and apply the operations + for (const auto& val : json_patch) + { + // wrapper to get a value for an operation + const auto get_value = [&val](const std::string & op, + const std::string & member, + bool string_type) -> basic_json & + { + // find value + auto it = val.m_value.object->find(member); + + // context-sensitive error message + const auto error_msg = (op == "op") ? "operation" : "operation '" + op + "'"; + + // check if desired value is present + if (JSON_HEDLEY_UNLIKELY(it == val.m_value.object->end())) + { + // NOLINTNEXTLINE(performance-inefficient-string-concatenation) + JSON_THROW(parse_error::create(105, 0, error_msg + " must have member '" + member + "'", val)); + } + + // check if result is of type string + if (JSON_HEDLEY_UNLIKELY(string_type && !it->second.is_string())) + { + // NOLINTNEXTLINE(performance-inefficient-string-concatenation) + JSON_THROW(parse_error::create(105, 0, error_msg + " must have string member '" + member + "'", val)); + } + + // no error: return value + return it->second; + }; + + // type check: every element of the array must be an object + if (JSON_HEDLEY_UNLIKELY(!val.is_object())) + { + JSON_THROW(parse_error::create(104, 0, "JSON patch must be an array of objects", val)); + } + + // collect mandatory members + const auto op = get_value("op", "op", true).template get(); + const auto path = get_value(op, "path", true).template get(); + json_pointer ptr(path); + + switch (get_op(op)) + { + case patch_operations::add: + { + operation_add(ptr, get_value("add", "value", false)); + break; + } + + case patch_operations::remove: + { + operation_remove(ptr); + break; + } + + case patch_operations::replace: + { + // the "path" location must exist - use at() + result.at(ptr) = get_value("replace", "value", false); + break; + } + + case patch_operations::move: + { + const auto from_path = get_value("move", "from", true).template get(); + json_pointer from_ptr(from_path); + + // the "from" location must exist - use at() + basic_json v = result.at(from_ptr); + + // The move operation is functionally identical to a + // "remove" operation on the "from" location, followed + // immediately by an "add" operation at the target + // location with the value that was just removed. + operation_remove(from_ptr); + operation_add(ptr, v); + break; + } + + case patch_operations::copy: + { + const auto from_path = get_value("copy", "from", true).template get(); + const json_pointer from_ptr(from_path); + + // the "from" location must exist - use at() + basic_json v = result.at(from_ptr); + + // The copy is functionally identical to an "add" + // operation at the target location using the value + // specified in the "from" member. + operation_add(ptr, v); + break; + } + + case patch_operations::test: + { + bool success = false; + JSON_TRY + { + // check if "value" matches the one at "path" + // the "path" location must exist - use at() + success = (result.at(ptr) == get_value("test", "value", false)); + } + JSON_INTERNAL_CATCH (out_of_range&) + { + // ignore out of range errors: success remains false + } + + // throw an exception if test fails + if (JSON_HEDLEY_UNLIKELY(!success)) + { + JSON_THROW(other_error::create(501, "unsuccessful: " + val.dump(), val)); + } + + break; + } + + case patch_operations::invalid: + default: + { + // op must be "add", "remove", "replace", "move", "copy", or + // "test" + JSON_THROW(parse_error::create(105, 0, "operation value '" + op + "' is invalid", val)); + } + } + } + + return result; + } + + /// @brief creates a diff as a JSON patch + /// @sa https://json.nlohmann.me/api/basic_json/diff/ + JSON_HEDLEY_WARN_UNUSED_RESULT + static basic_json diff(const basic_json& source, const basic_json& target, + const std::string& path = "") + { + // the patch + basic_json result(value_t::array); + + // if the values are the same, return empty patch + if (source == target) + { + return result; + } + + if (source.type() != target.type()) + { + // different types: replace value + result.push_back( + { + {"op", "replace"}, {"path", path}, {"value", target} + }); + return result; + } + + switch (source.type()) + { + case value_t::array: + { + // first pass: traverse common elements + std::size_t i = 0; + while (i < source.size() && i < target.size()) + { + // recursive call to compare array values at index i + auto temp_diff = diff(source[i], target[i], path + "/" + std::to_string(i)); + result.insert(result.end(), temp_diff.begin(), temp_diff.end()); + ++i; + } + + // We now reached the end of at least one array + // in a second pass, traverse the remaining elements + + // remove my remaining elements + const auto end_index = static_cast(result.size()); + while (i < source.size()) + { + // add operations in reverse order to avoid invalid + // indices + result.insert(result.begin() + end_index, object( + { + {"op", "remove"}, + {"path", path + "/" + std::to_string(i)} + })); + ++i; + } + + // add other remaining elements + while (i < target.size()) + { + result.push_back( + { + {"op", "add"}, + {"path", path + "/-"}, + {"value", target[i]} + }); + ++i; + } + + break; + } + + case value_t::object: + { + // first pass: traverse this object's elements + for (auto it = source.cbegin(); it != source.cend(); ++it) + { + // escape the key name to be used in a JSON patch + const auto path_key = path + "/" + detail::escape(it.key()); + + if (target.find(it.key()) != target.end()) + { + // recursive call to compare object values at key it + auto temp_diff = diff(it.value(), target[it.key()], path_key); + result.insert(result.end(), temp_diff.begin(), temp_diff.end()); + } + else + { + // found a key that is not in o -> remove it + result.push_back(object( + { + {"op", "remove"}, {"path", path_key} + })); + } + } + + // second pass: traverse other object's elements + for (auto it = target.cbegin(); it != target.cend(); ++it) + { + if (source.find(it.key()) == source.end()) + { + // found a key that is not in this -> add it + const auto path_key = path + "/" + detail::escape(it.key()); + result.push_back( + { + {"op", "add"}, {"path", path_key}, + {"value", it.value()} + }); + } + } + + break; + } + + case value_t::null: + case value_t::string: + case value_t::boolean: + case value_t::number_integer: + case value_t::number_unsigned: + case value_t::number_float: + case value_t::binary: + case value_t::discarded: + default: + { + // both primitive type: replace value + result.push_back( + { + {"op", "replace"}, {"path", path}, {"value", target} + }); + break; + } + } + + return result; + } + + /// @} + + //////////////////////////////// + // JSON Merge Patch functions // + //////////////////////////////// + + /// @name JSON Merge Patch functions + /// @{ + + /// @brief applies a JSON Merge Patch + /// @sa https://json.nlohmann.me/api/basic_json/merge_patch/ + void merge_patch(const basic_json& apply_patch) + { + if (apply_patch.is_object()) + { + if (!is_object()) + { + *this = object(); + } + for (auto it = apply_patch.begin(); it != apply_patch.end(); ++it) + { + if (it.value().is_null()) + { + erase(it.key()); + } + else + { + operator[](it.key()).merge_patch(it.value()); + } + } + } + else + { + *this = apply_patch; + } + } + + /// @} +}; + +/// @brief user-defined to_string function for JSON values +/// @sa https://json.nlohmann.me/api/basic_json/to_string/ +NLOHMANN_BASIC_JSON_TPL_DECLARATION +std::string to_string(const NLOHMANN_BASIC_JSON_TPL& j) +{ + return j.dump(); +} + +} // namespace nlohmann + +/////////////////////// +// nonmember support // +/////////////////////// + +namespace std // NOLINT(cert-dcl58-cpp) +{ + +/// @brief hash value for JSON objects +/// @sa https://json.nlohmann.me/api/basic_json/std_hash/ +NLOHMANN_BASIC_JSON_TPL_DECLARATION +struct hash +{ + std::size_t operator()(const nlohmann::NLOHMANN_BASIC_JSON_TPL& j) const + { + return nlohmann::detail::hash(j); + } +}; + +// specialization for std::less +template<> +struct less< ::nlohmann::detail::value_t> // do not remove the space after '<', see https://github.com/nlohmann/json/pull/679 +{ + /*! + @brief compare two value_t enum values + @since version 3.0.0 + */ + bool operator()(nlohmann::detail::value_t lhs, + nlohmann::detail::value_t rhs) const noexcept + { + return nlohmann::detail::operator<(lhs, rhs); + } +}; + +// C++20 prohibit function specialization in the std namespace. +#ifndef JSON_HAS_CPP_20 + +/// @brief exchanges the values of two JSON objects +/// @sa https://json.nlohmann.me/api/basic_json/std_swap/ +NLOHMANN_BASIC_JSON_TPL_DECLARATION +inline void swap(nlohmann::NLOHMANN_BASIC_JSON_TPL& j1, nlohmann::NLOHMANN_BASIC_JSON_TPL& j2) noexcept( // NOLINT(readability-inconsistent-declaration-parameter-name) + is_nothrow_move_constructible::value&& // NOLINT(misc-redundant-expression) + is_nothrow_move_assignable::value) +{ + j1.swap(j2); +} + +#endif + +} // namespace std + +/// @brief user-defined string literal for JSON values +/// @sa https://json.nlohmann.me/api/basic_json/operator_literal_json/ +JSON_HEDLEY_NON_NULL(1) +inline nlohmann::json operator "" _json(const char* s, std::size_t n) +{ + return nlohmann::json::parse(s, s + n); +} + +/// @brief user-defined string literal for JSON pointer +/// @sa https://json.nlohmann.me/api/basic_json/operator_literal_json_pointer/ +JSON_HEDLEY_NON_NULL(1) +inline nlohmann::json::json_pointer operator "" _json_pointer(const char* s, std::size_t n) +{ + return nlohmann::json::json_pointer(std::string(s, n)); +} + +// #include + + +// restore clang diagnostic settings +#if defined(__clang__) + #pragma clang diagnostic pop +#endif + +// clean up +#undef JSON_ASSERT +#undef JSON_INTERNAL_CATCH +#undef JSON_CATCH +#undef JSON_THROW +#undef JSON_TRY +#undef JSON_PRIVATE_UNLESS_TESTED +#undef JSON_HAS_CPP_11 +#undef JSON_HAS_CPP_14 +#undef JSON_HAS_CPP_17 +#undef JSON_HAS_CPP_20 +#undef JSON_HAS_FILESYSTEM +#undef JSON_HAS_EXPERIMENTAL_FILESYSTEM +#undef NLOHMANN_BASIC_JSON_TPL_DECLARATION +#undef NLOHMANN_BASIC_JSON_TPL +#undef JSON_EXPLICIT +#undef NLOHMANN_CAN_CALL_STD_FUNC_IMPL + +// #include + + +#undef JSON_HEDLEY_ALWAYS_INLINE +#undef JSON_HEDLEY_ARM_VERSION +#undef JSON_HEDLEY_ARM_VERSION_CHECK +#undef JSON_HEDLEY_ARRAY_PARAM +#undef JSON_HEDLEY_ASSUME +#undef JSON_HEDLEY_BEGIN_C_DECLS +#undef JSON_HEDLEY_CLANG_HAS_ATTRIBUTE +#undef JSON_HEDLEY_CLANG_HAS_BUILTIN +#undef JSON_HEDLEY_CLANG_HAS_CPP_ATTRIBUTE +#undef JSON_HEDLEY_CLANG_HAS_DECLSPEC_DECLSPEC_ATTRIBUTE +#undef JSON_HEDLEY_CLANG_HAS_EXTENSION +#undef JSON_HEDLEY_CLANG_HAS_FEATURE +#undef JSON_HEDLEY_CLANG_HAS_WARNING +#undef JSON_HEDLEY_COMPCERT_VERSION +#undef JSON_HEDLEY_COMPCERT_VERSION_CHECK +#undef JSON_HEDLEY_CONCAT +#undef JSON_HEDLEY_CONCAT3 +#undef JSON_HEDLEY_CONCAT3_EX +#undef JSON_HEDLEY_CONCAT_EX +#undef JSON_HEDLEY_CONST +#undef JSON_HEDLEY_CONSTEXPR +#undef JSON_HEDLEY_CONST_CAST +#undef JSON_HEDLEY_CPP_CAST +#undef JSON_HEDLEY_CRAY_VERSION +#undef JSON_HEDLEY_CRAY_VERSION_CHECK +#undef JSON_HEDLEY_C_DECL +#undef JSON_HEDLEY_DEPRECATED +#undef JSON_HEDLEY_DEPRECATED_FOR +#undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL +#undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_ +#undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED +#undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES +#undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS +#undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION +#undef JSON_HEDLEY_DIAGNOSTIC_POP +#undef JSON_HEDLEY_DIAGNOSTIC_PUSH +#undef JSON_HEDLEY_DMC_VERSION +#undef JSON_HEDLEY_DMC_VERSION_CHECK +#undef JSON_HEDLEY_EMPTY_BASES +#undef JSON_HEDLEY_EMSCRIPTEN_VERSION +#undef JSON_HEDLEY_EMSCRIPTEN_VERSION_CHECK +#undef JSON_HEDLEY_END_C_DECLS +#undef JSON_HEDLEY_FLAGS +#undef JSON_HEDLEY_FLAGS_CAST +#undef JSON_HEDLEY_GCC_HAS_ATTRIBUTE +#undef JSON_HEDLEY_GCC_HAS_BUILTIN +#undef JSON_HEDLEY_GCC_HAS_CPP_ATTRIBUTE +#undef JSON_HEDLEY_GCC_HAS_DECLSPEC_ATTRIBUTE +#undef JSON_HEDLEY_GCC_HAS_EXTENSION +#undef JSON_HEDLEY_GCC_HAS_FEATURE +#undef JSON_HEDLEY_GCC_HAS_WARNING +#undef JSON_HEDLEY_GCC_NOT_CLANG_VERSION_CHECK +#undef JSON_HEDLEY_GCC_VERSION +#undef JSON_HEDLEY_GCC_VERSION_CHECK +#undef JSON_HEDLEY_GNUC_HAS_ATTRIBUTE +#undef JSON_HEDLEY_GNUC_HAS_BUILTIN +#undef JSON_HEDLEY_GNUC_HAS_CPP_ATTRIBUTE +#undef JSON_HEDLEY_GNUC_HAS_DECLSPEC_ATTRIBUTE +#undef JSON_HEDLEY_GNUC_HAS_EXTENSION +#undef JSON_HEDLEY_GNUC_HAS_FEATURE +#undef JSON_HEDLEY_GNUC_HAS_WARNING +#undef JSON_HEDLEY_GNUC_VERSION +#undef JSON_HEDLEY_GNUC_VERSION_CHECK +#undef JSON_HEDLEY_HAS_ATTRIBUTE +#undef JSON_HEDLEY_HAS_BUILTIN +#undef JSON_HEDLEY_HAS_CPP_ATTRIBUTE +#undef JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS +#undef JSON_HEDLEY_HAS_DECLSPEC_ATTRIBUTE +#undef JSON_HEDLEY_HAS_EXTENSION +#undef JSON_HEDLEY_HAS_FEATURE +#undef JSON_HEDLEY_HAS_WARNING +#undef JSON_HEDLEY_IAR_VERSION +#undef JSON_HEDLEY_IAR_VERSION_CHECK +#undef JSON_HEDLEY_IBM_VERSION +#undef JSON_HEDLEY_IBM_VERSION_CHECK +#undef JSON_HEDLEY_IMPORT +#undef JSON_HEDLEY_INLINE +#undef JSON_HEDLEY_INTEL_CL_VERSION +#undef JSON_HEDLEY_INTEL_CL_VERSION_CHECK +#undef JSON_HEDLEY_INTEL_VERSION +#undef JSON_HEDLEY_INTEL_VERSION_CHECK +#undef JSON_HEDLEY_IS_CONSTANT +#undef JSON_HEDLEY_IS_CONSTEXPR_ +#undef JSON_HEDLEY_LIKELY +#undef JSON_HEDLEY_MALLOC +#undef JSON_HEDLEY_MCST_LCC_VERSION +#undef JSON_HEDLEY_MCST_LCC_VERSION_CHECK +#undef JSON_HEDLEY_MESSAGE +#undef JSON_HEDLEY_MSVC_VERSION +#undef JSON_HEDLEY_MSVC_VERSION_CHECK +#undef JSON_HEDLEY_NEVER_INLINE +#undef JSON_HEDLEY_NON_NULL +#undef JSON_HEDLEY_NO_ESCAPE +#undef JSON_HEDLEY_NO_RETURN +#undef JSON_HEDLEY_NO_THROW +#undef JSON_HEDLEY_NULL +#undef JSON_HEDLEY_PELLES_VERSION +#undef JSON_HEDLEY_PELLES_VERSION_CHECK +#undef JSON_HEDLEY_PGI_VERSION +#undef JSON_HEDLEY_PGI_VERSION_CHECK +#undef JSON_HEDLEY_PREDICT +#undef JSON_HEDLEY_PRINTF_FORMAT +#undef JSON_HEDLEY_PRIVATE +#undef JSON_HEDLEY_PUBLIC +#undef JSON_HEDLEY_PURE +#undef JSON_HEDLEY_REINTERPRET_CAST +#undef JSON_HEDLEY_REQUIRE +#undef JSON_HEDLEY_REQUIRE_CONSTEXPR +#undef JSON_HEDLEY_REQUIRE_MSG +#undef JSON_HEDLEY_RESTRICT +#undef JSON_HEDLEY_RETURNS_NON_NULL +#undef JSON_HEDLEY_SENTINEL +#undef JSON_HEDLEY_STATIC_ASSERT +#undef JSON_HEDLEY_STATIC_CAST +#undef JSON_HEDLEY_STRINGIFY +#undef JSON_HEDLEY_STRINGIFY_EX +#undef JSON_HEDLEY_SUNPRO_VERSION +#undef JSON_HEDLEY_SUNPRO_VERSION_CHECK +#undef JSON_HEDLEY_TINYC_VERSION +#undef JSON_HEDLEY_TINYC_VERSION_CHECK +#undef JSON_HEDLEY_TI_ARMCL_VERSION +#undef JSON_HEDLEY_TI_ARMCL_VERSION_CHECK +#undef JSON_HEDLEY_TI_CL2000_VERSION +#undef JSON_HEDLEY_TI_CL2000_VERSION_CHECK +#undef JSON_HEDLEY_TI_CL430_VERSION +#undef JSON_HEDLEY_TI_CL430_VERSION_CHECK +#undef JSON_HEDLEY_TI_CL6X_VERSION +#undef JSON_HEDLEY_TI_CL6X_VERSION_CHECK +#undef JSON_HEDLEY_TI_CL7X_VERSION +#undef JSON_HEDLEY_TI_CL7X_VERSION_CHECK +#undef JSON_HEDLEY_TI_CLPRU_VERSION +#undef JSON_HEDLEY_TI_CLPRU_VERSION_CHECK +#undef JSON_HEDLEY_TI_VERSION +#undef JSON_HEDLEY_TI_VERSION_CHECK +#undef JSON_HEDLEY_UNAVAILABLE +#undef JSON_HEDLEY_UNLIKELY +#undef JSON_HEDLEY_UNPREDICTABLE +#undef JSON_HEDLEY_UNREACHABLE +#undef JSON_HEDLEY_UNREACHABLE_RETURN +#undef JSON_HEDLEY_VERSION +#undef JSON_HEDLEY_VERSION_DECODE_MAJOR +#undef JSON_HEDLEY_VERSION_DECODE_MINOR +#undef JSON_HEDLEY_VERSION_DECODE_REVISION +#undef JSON_HEDLEY_VERSION_ENCODE +#undef JSON_HEDLEY_WARNING +#undef JSON_HEDLEY_WARN_UNUSED_RESULT +#undef JSON_HEDLEY_WARN_UNUSED_RESULT_MSG +#undef JSON_HEDLEY_FALL_THROUGH + + + +#endif // INCLUDE_NLOHMANN_JSON_HPP_ diff --git a/external/simpleppm.cpp b/external/simpleppm.cpp new file mode 100644 index 0000000..2aecd35 --- /dev/null +++ b/external/simpleppm.cpp @@ -0,0 +1,25 @@ +#include "simpleppm.h" + +/* + This code was adapted from here: + https://rosettacode.org/wiki/Bitmap/Write_a_PPM_file#C.2B.2B + */ + +using namespace std; + +int save_ppm(std::string file_name, const std::vector& buffer, int dimx, int dimy) { + + ofstream ofs(file_name, ios_base::out | ios_base::binary); + ofs << "P6" << endl << dimx << ' ' << dimy << endl << "255" << endl; + + for (unsigned int j = 0; j < dimy; ++j) + for (unsigned int i = 0; i < dimx; ++i) + ofs << (char) (255.0 * buffer[3*j*dimx+3*i+0]) << (char) (255.0 * buffer[3*j*dimx+3*i+1]) << (char) (255.0 * buffer[3*j*dimx+3*i+2]); + + ofs.close(); + + return 0; +} + + + diff --git a/external/simpleppm.h b/external/simpleppm.h new file mode 100644 index 0000000..ec0e12f --- /dev/null +++ b/external/simpleppm.h @@ -0,0 +1,9 @@ + +#include +#include +#include +#include + +int save_ppm(std::string file_name, const std::vector& buffer, int dimx, int dimy); + +int test_save_ppm(); diff --git a/external/test_eigen.cpp b/external/test_eigen.cpp new file mode 100644 index 0000000..fb3cc4f --- /dev/null +++ b/external/test_eigen.cpp @@ -0,0 +1,42 @@ + + + + +#include +#include +#include + +#include + +using namespace std; + + +int print_eigen(Eigen::Matrix4d m) +{ + // Eigen Matrices do have rule to print them with std::cout + std::cout << m << std::endl; + return 0; +} + +int test_eigen() +{ + + + Eigen::Matrix4d test; //4 by 4 double precision matrix initialization + + // Let's make it a symmetric matrix + for(int i=0; i<4; i++) + { + for(int j=0; j<4; j++) + test(i,j) = (i+1)*(1+j); + } + + // Print + print_eigen(test); + + return 0; +} + + + + diff --git a/external/test_json.cpp b/external/test_json.cpp new file mode 100644 index 0000000..15e86fb --- /dev/null +++ b/external/test_json.cpp @@ -0,0 +1,169 @@ + + + + +#include +#include +#include + +#include "json.hpp" +#include "simpleppm.h" + +#include + +using namespace std; +using namespace nlohmann; + + + +bool test_parse_geometry(json& j){ + cout<<"Geometry: "<contains("type")){ + // type = static_cast((*itr)["type"]); + type = (*itr)["type"].get(); + } else { + cout<<"Fatal error: geometry shoudl always contain a type!!!"<(); + } else { + cout<<"Warning: Too many entries in centre"<contains("type")){ + // type = static_cast((*itr)["type"]); + type = (*itr)["type"].get(); + } else { + cout<<"Fatal error: light shoudl always contain a type!!!"<(); + } else { + cout<<"Warning: Too many entries in centre"<contains("filename")){ + // filename = static_cast((*itr)["filename"]); + filename = (*itr)["filename"].get(); + } else { + cout<<"Fatal error: output shoudl always contain a filename!!!"<(); + } else { + cout<<"Warning: Too many entries in size"<(); + } else { + cout<<"Warning: Too many entries in centre"<(); + cout<<"B"< +#include +#include + +#include "json.hpp" +#include "simpleppm.h" + +#include + +using namespace std; +using namespace nlohmann; + + +int test_save_ppm(){ + int dimx = 800; + int dimy = 600; + + int w = 100; + + std::vector buffer(3*dimx*dimy); + for(int j=0;j +#include +#include +#include + +#include "external/json.hpp" +#include "external/simpleppm.h" + + +using namespace std; + +int test_eigen(); +int test_save_ppm(); +int test_json(nlohmann::json& j); + +int main(int argc, char* argv[]) +{ + if(argc!=2){ + cout<<"Invalid number of arguments"< rt(j); + cout<<"Running!"<