From 8ba886ea57128949b15d3dc5de311eb2a79ff430 Mon Sep 17 00:00:00 2001 From: Grzegorz-Smagacz-Mobica <133849001+Grzegorz-Smagacz-Mobica@users.noreply.github.com> Date: Fri, 15 Dec 2023 16:39:08 +0100 Subject: [PATCH] Implementing new sample: sparse-image and virtual textures (#811) * Initial commit. * MAJOR: removed entirely mesh calculation based on the trigonometric model. Instead, whole mesh is calculated using MVP transformation matrix which makes calculations way more trouble-proof. MINOR: some quick changes, using already written wrappers for some functionalities, and adding some descriptions here and there. * Major changes. Making use of GL_ARB_sparse_texture2 extension in the fragment shader - from now the shader checks if the required fragment is resident in the memory before sampling from it (no explicit calculations required,shader will sample from whatever is ACTUALLY available). On the CPU side, workload was divided into stages, many phases removed/rewritten. * update * Core functionalities are working as expected. To be reviewed. * Minor updates, mostly cleanup * Clang Tidy Check fixes * Clang Format Check fixes * * Rebased with main branch * Fixed run-time errors from validation layers * Changed .md to .adoc style * * Now loading the least detailed mip level is done before the first frame is rendered. * Removed transition_mip_layout() and replaced it with vkb::image_layout_transition(). * Minor bugs and typos. * * Added features from the UI level, now displaying memory-related stats + allow to toggle color highlighting * Added additional uniform buffer containing data needed by fragment shader * Removed call to bind_sparse_image() from free_unused_memory() as it is redundant * Merged UPDATE_AND_GENERATE and FREE_UNUSED_MEMORY stages * Removed virtual_texture.free_list as it is redundant * Replaced virtual_texture.bind_list with to_be_bound flag under the virtual_texture.page_table * Changed available_memory_index_list from std::list to std::vector * Minor bugs / code refactoring * * Fixed the bug that caused black-spots to appear on screen * Block update is now better prioritized to update the closest areas first * Refactoring * * Now memory is allocated dynamically during the run-time * Memory defragmentation can be enabled for the better memory management * * Fixed validation-layer-errors related to deframentation process * From now number of vertical/horizontal blocks can be changed from the UI * Number of blocks processed per-frame can be customized from UI too * Frame-counter mechanism can be enabled/disabled from the UI * Moved sparse_queue to separate (if possible) queue family, other than graphics queue * Introduced synchronization between binding the image and submitting the image * update_and_generate() was reduced to single command_buffer and one-time flush() * Several minor reworks/fixes for better code styling and efficiency * * Updated the screenshot * Put additional descriptions to README.adoc * Minor issues, cleanups & typo's * * Minor changes to match the PR's General & Sample Checklists * * Fixed Ubuntu compilation issues and Copyright checks * Minor typos and reworks * * Minor stylistic changes * * Rebase * unified copyrights * * missing static_cast * * minor rework, fixing a validation layer warning --- antora/modules/ROOT/nav.adoc | 1 + samples/CMakeLists.txt | 1 + .../extensions/sparse_image/CMakeLists.txt | 30 + samples/extensions/sparse_image/README.adoc | 161 ++ .../images/sparse_image_screenshot.png | Bin 0 -> 286224 bytes .../extensions/sparse_image/sparse_image.cpp | 1621 +++++++++++++++++ .../extensions/sparse_image/sparse_image.h | 399 ++++ shaders/sparse_image/sparse.frag | 60 + shaders/sparse_image/sparse.vert | 35 + 9 files changed, 2308 insertions(+) create mode 100644 samples/extensions/sparse_image/CMakeLists.txt create mode 100644 samples/extensions/sparse_image/README.adoc create mode 100644 samples/extensions/sparse_image/images/sparse_image_screenshot.png create mode 100644 samples/extensions/sparse_image/sparse_image.cpp create mode 100644 samples/extensions/sparse_image/sparse_image.h create mode 100644 shaders/sparse_image/sparse.frag create mode 100644 shaders/sparse_image/sparse.vert diff --git a/antora/modules/ROOT/nav.adoc b/antora/modules/ROOT/nav.adoc index d88df2359..4ea944695 100644 --- a/antora/modules/ROOT/nav.adoc +++ b/antora/modules/ROOT/nav.adoc @@ -74,6 +74,7 @@ ** xref:samples/extensions/ray_queries/README.adoc[Ray queries] ** xref:samples/extensions/ray_tracing_reflection/README.adoc[Ray tracing reflection] ** xref:samples/extensions/shader_object/README.adoc[Shader Object] +** xref:samples/extensions/sparse_image/README.adoc[Sparse Image] ** xref:samples/extensions/synchronization_2/README.adoc[Synchronization 2] ** xref:samples/extensions/timeline_semaphore/README.adoc[Timeline semaphore] ** xref:samples/extensions/vertex_dynamic_state/README.adoc[Vertex dynamic state] diff --git a/samples/CMakeLists.txt b/samples/CMakeLists.txt index 335cbf823..3fa451b19 100644 --- a/samples/CMakeLists.txt +++ b/samples/CMakeLists.txt @@ -87,6 +87,7 @@ set(ORDER_LIST "fragment_shader_barycentric" "gshader_to_mshader" "color_write_enable" + "sparse_image" #Performance Samples "swapchain_images" diff --git a/samples/extensions/sparse_image/CMakeLists.txt b/samples/extensions/sparse_image/CMakeLists.txt new file mode 100644 index 000000000..d8005c1ee --- /dev/null +++ b/samples/extensions/sparse_image/CMakeLists.txt @@ -0,0 +1,30 @@ +# Copyright (c) 2023, Mobica Limited +# +# SPDX-License-Identifier: Apache-2.0 +# +# Licensed under the Apache License, Version 2.0 the "License"; +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +get_filename_component(FOLDER_NAME ${CMAKE_CURRENT_LIST_DIR} NAME) +get_filename_component(PARENT_DIR ${CMAKE_CURRENT_LIST_DIR} PATH) +get_filename_component(CATEGORY_NAME ${PARENT_DIR} NAME) + +add_sample( + ID ${FOLDER_NAME} + CATEGORY ${CATEGORY_NAME} + AUTHOR "Mobica" + NAME "sparse_image" + DESCRIPTION "This sample is showcasing the potential usage of the sparse-image-binding and sparse-image-residency features. It works with the concept of Virtual Textures, allowing textures to be rendered without being entirely allocated in the memory." + SHADER_FILES_GLSL + "sparse_image/sparse.vert" + "sparse_image/sparse.frag") diff --git a/samples/extensions/sparse_image/README.adoc b/samples/extensions/sparse_image/README.adoc new file mode 100644 index 000000000..c32668a9f --- /dev/null +++ b/samples/extensions/sparse_image/README.adoc @@ -0,0 +1,161 @@ +//// +- Copyright (c) 2023, Mobica Limited +- +- SPDX-License-Identifier: Apache-2.0 +- +- Licensed under the Apache License, Version 2.0 the "License"; +- you may not use this file except in compliance with the License. +- You may obtain a copy of the License at +- +- http://www.apache.org/licenses/LICENSE-2.0 +- +- Unless required by applicable law or agreed to in writing, software +- distributed under the License is distributed on an "AS IS" BASIS, +- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +- See the License for the specific language governing permissions and +- limitations under the License. +- +//// + +== Sparse image + +ifdef::site-gen-antora[] +TIP: The source for this sample can be found in the https://github.com/KhronosGroup/Vulkan-Samples/tree/main/samples/extensions/sparse_image[Khronos Vulkan samples github repository]. +endif::[] + +image::./images/sparse_image_screenshot.png[Sample] + +== Overview + +The usage of +https://registry.khronos.org/vulkan/site/spec/latest/chapters/sparsemem.html[Sparse +Resources] allows for less restrict memory binding in comparison to a +standard resource. + +The key differences between standard and sparse resources, showcased in +this sample are: + +* Sparse resources can be bound non-contiguously to one or more +VkDeviceMemory allocations; +* Sparse resources can be re-bound to different memory allocations over +the lifetime of the resource; + +The sample demonstrates usage of the Sparse Image feature by rendering a +high-resolution texture with only a fraction of the total image size +actually allocated on the device's memory. This is possible by +dynamically loading required memory areas, generating mip levels for +outer parts, removing unused memory and finally: binding an image in +real-time. + +== Enabling features + +There are 3 features to be enabled: + +* sparseBinding; +* sparseResidencyImage2D; +* shaderResourceResidency; + +First two, are the key features required for the usage of the sparse +image resources. The last one - shaderResourceResidency, is required for +the fragment shader to be able to detect which parts of the image are +allocated in the memory. + +[source,c++] +---- +void SparseImage::request_gpu_features(vkb::PhysicalDevice &gpu) +{ + if (gpu.get_features().sparseBinding && gpu.get_features().sparseResidencyImage2D && gpu.get_features().shaderResourceResidency) + { + gpu.get_mutable_requested_features().sparseBinding = VK_TRUE; + gpu.get_mutable_requested_features().sparseResidencyImage2D = VK_TRUE; + gpu.get_mutable_requested_features().shaderResourceResidency = VK_TRUE; + } +---- + +== Enabling extensions + +There is a single extensions used in this sample: + +* GL_ARB_sparse_texture2; + +This extension is used only by the fragment shader, but requires +shaderResourceResidency feature to be enabled first. What this extension +does, is allowing the fragment to check if the memory for the particular +fragment is actually allocated or not. Because of this extension, it is +possible to keep checking the residency from the fragment shader, and +basically use the most detailed data available. + +[source,glsl] +---- +#extension GL_ARB_sparse_texture2 : enable +---- + +[source,glsl] +---- +for(; (lod <= maxLOD) && !sparseTexelsResidentARB(residencyCode); lod += 1) +{ + residencyCode = sparseTextureLodARB(texSampler, fragTexCoord, lod, color); +} +---- + + +== How is required LOD calculated? + +The whole method is well-described in the source file. In general, the +value of LOD is obtained by calculating: What is the ratio between x or y +movement on the screen, to the u or v movement on the texture? + +The idea is, that when moving pixel-by-pixel along the x or y axis +on-screen, if the small on-screen step causes a significant step +on-texture, then the area is far away from the observer and +a less-detailed mip-level is required. + +The formula used for those calculations is: + +LOD = log2 (max(dT / dx, dT / dy)); where: + +* dT is an on-texture-step in texels, +* dx, dy are on-screen-steps in pixels. + + +== User Interface + +The user can alter the application by using the GUI. + +These are available options: + +* Color highlight - if enabled, areas of a particular LOD usage are +color-highlighted. +* Memory defragmentation - if enabled, memory pages are reallocated from +low-occupied sectors to higher-occupied (but available) sectors to keep the +overall number of allocations as low as possible. +* Update prioritization - if enabled, the application is focused on +processing the most actual requests and discards remainings from the +previous requests. This can be observed when dynamically moving the +camera around. +* Blocks per cycle - describes up to how many blocks can be updated per +a single render cycle. The total number of blocks is defined as: (Vertical +blocks) * (Horizontal blocks). +* Vertical blocks - describes the number of columns the texture is +divided into. +* Horizontal blocks - describes the number of rows the texture is +divided into. + +Additionally, GUI contains memory usage data. It describes (in pages) +what are the virtual requirements (what if the whole image was allocated +in the memory) and what is the actual, current allocation on the +device. + + +== Conclusion + +The primary usage of the sparse image feature is generally speaking +dedicated for cases where too much device's memory is occupied. Keeping +a low-detailed mip-level constantly in the memory and dynamically +loading required areas when the camera changes, is the way to handle +terrain mega-textures. The downside of these solution is that there is a +possibility of a bottleneck problem when constantly transferring +required memory chunks from the CPU to the device. The other downside is +that since the application decides what memory is going to be allocated, +it must take care of the calculations such as: "`what level of detail is +required?`". This creates an unwanted CPU overhead. \ No newline at end of file diff --git a/samples/extensions/sparse_image/images/sparse_image_screenshot.png b/samples/extensions/sparse_image/images/sparse_image_screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..0d15e422874147fcfe16b134bcd7406e6d3bbb0b GIT binary patch literal 286224 zcmcG$byU<{7dA``(lCSqk^?h@pp??m4L2epAtfy>Ez%823=Im>1|2eVC`gN-l0zun z2uRm^2E3og=l%Zq*80}BmM)jfZ+>T=bN1Q$+Sk4gk(wGxq(oPVu&}U5Rg~qmu(0s3 zv9NG{5nKX4;h?HC2LE8YYAMNLmGm(zf&W0PW&V-D!YYp?J~qVz|0jH`tnZ42Mb?V> zi{0V$)&dLbEMG-lM*E5JY6f1awk`@KCvY~N=FK6v8Ts%-29o8&Ehr0w5GpH+1B3EF z4TI|I>%GCBnRShEqhXV&63I{RmM8x4{HA4eQY^8tCT6{nJLns>Jz2HebcdGYQt*d| zeE<0;tVeOQ!ZMT+`S%aOBaeS(K`j3J*!hv`2g41T0*-MjZK`78dI%XUL00^1;V>>6(@nrDsODV|JFNcl~z zU0%=h{ercljpk|!&*Qq^87oQeAip>KGjHlWg*k9tKR)X5JvsSyMS#eE$=?LG+|l+l zy(iGM{3PdhH3OFvD|u;0+Vn>)8%^qxguho)@s*N}yuM@i`*9-Wrn5b%v;Jo-y<;v{ zN8k&?B@~x*A8{&a~4rTvlD#1U|1CT@d3msB|14yiw}goJU?mJNO`6; zR6HqnGpv;sD@`jLYdTsNr&po5(e)M=Z83~J6@|#keRL0phnvpxfCU@INzapX?CG2s z@V^^A8u^h2o5E@-MHdGecb#y=dHsQnuoHN*1$cA0W?fMR_k_@A)gDNLDcjsKUfPe! z8?J<$G!{0v_vSN=tg>=RdX$ev{hGd@$Sp2U6YGeqdoE>YO}Qbut`!}9t+K2$@sIe& zj{e0B9)~PZjl-s;u_y(E>bDq6s=T2it5w|$*|4u#--N%-nCp5TiW{4poz^g=hdVYW z_rEH=(L0=W>LbwPNtcm{Q15UobF;a!&h|gl>Cw-AuDksJ{NuS)a;A-$H01Dfi?>$~Wfi7_3`Wqn4%l zff_a|mGFx9zJlUS5BL}bgI$N#gmbqC6|MGWZuHb`x0bKL-`c#i&!G8xVWU1?c{1E= zV3B`ECKQIX`R!P=n$3U`I_f_m`~~?+{B@^6J%{QBu6cgx(W8Tdh0NI=-sZ$FQfG#e zN2`Jd%Y~)iw~P>3urp1f7jbQOO^rQ{eKIZ4mv+sRBAMB|dwFOD(N68o*lCtR*eMCX zU`BKiUHH&9;i^$aZr``A6^7nAKFPjQ>M@yfE0tjrej6@LyK$o@ofe|G+pUM{h=)2~ zp8wC8G<^>I7dR}_ss!z{-`^nXMs?fWEcRe={gO*JG%RYS)LS>jJ|Fd2h<@9y-##)s z$*6GZ8S~=*JC1SM-_=7rv}Ld0twg0OqTpF<&1a{D$6GyLwq|0b@{+Lp3-@;oxb@=# zb_F`9p_0kG$^*^KDkN!$xP!|3L;8rjW7hWQmI?=yAa?QeV&5hyecCs$h{c)33HEw> zmgvSAkLAfcM)IuOgQmsV3{f{kQ!CixG{xiO`LwuDxTb-)@u@kA3toFibn@8>;*kfSr6u4I(^;!SQeH$+r7cL zII|$fxnv!m@V~J|L81bVO;<~&pn@~47c+l*V~#<_a&iR|Nkec|1UW&5%L~#N)8Kw$`ZiZkLj2 z&M0CDnY|(AB^yyFO`)95_-7!kylgBud}Dx+O4g9#ne=~5L$VU%vB11yH4>rI-I@?e zYXBk6$EQ|ts|bR|*Dpc{VG7vb8&QA8N3w>Wk58UK4a<8g1ICE9S81V^RgRO{BVhrC z7-DCX0UMaa=wy}ehO#0>s4(_jud~Jiv(g$FAS4D8&Q4$np?2rQiL8_+R3;e6@xFu^ zHI(lBt7KxEG6c1_3M|f-II#&~58S?Bfe-V_auTkDAjf4mBnV(j*#vMrQUnW3{`oqc zG*~ZcMYpd(P?wEGI6e&S3RY4^_U{)HHauEt!-LIE4s?;qDi47@z*8tuZmInCrsqzk z-wR8(BdiYZop|$!dOLKC$2w2Pl&>y&zEig&w$SzC0zDIx3wlb*D07^>>WQ=HKxt+= ztq31u_)DQd$9u@}t?h)DuU?G_$p-wfYsopU_I1*QCV(|oSbSXZxmJj^;iZ6z<56{^xg9EjZ1)`+GxwUfGKo9M&9 zU~kZ;j$>?CE-Oh!7}xsw#k;v&M)88LBfLB(CF|o{N@La4JB$)&QkJ5vx_&Xn49V~me$R#;-QI1Kx@d<yNkRUEGIn97u4f5Dt9jc!lIPK)rQvWRQ5P`a0U7EXp_Ys;HJ^bWAewa~id7 zsWTfp&%}Utm$|#=Na?>fIg`H2S3{2}56E9QZ8}{>4NJ(lxR^6IbeKK!i(8=zwxISu z-g=H|W~=t`nXTSv)(z^>+uL5q?0Lh_zr3AIW1@W|&?D4YIOTslfJ%>pG}PE89UrWe zqPE6!jp{m`ru?|4UP+ZgrpQ6|xs&O`%5`>_Vtcl{c-QVIlvq{b^!H}R*7loBRohUa zf{ES=^-on)l-&DFhMUUQU-H9Q+9qSG9Y^z@)e=^wOEjXFQN&52LXug#EV!j`l>j2{?iz*$tI%Gb9; zAW1t`zi~U4gMZgEQo}Pj*ssNfQ5w9L!SVCm$}8UZd5Kh;9hR3~-q(T*$dp$sFsDz? z5c)jCQDrEaDq z^{(6RdJi(7b6IeVe6XY#k{_RyY*`7B=h|_a@_o~t<8*L%jfF2x=8^rKXG|A?b=rP$ z78Bq4y9i~KPeJJ4ikFBB;E>v9`R7buZkR)m<)`1-5(i?@@8r;~cIl_7T~8!L{@CpZ z)%{WYbjSeZ2Q?p&YGdd|mfE9V%a1iGOK*EE1w3wrbLdt(HCLVn;(r&3=v-|T2^1ku zJhZxoeSIN`kudc^MINR1h*a`tN@xW+C3Jd_L^UsZO=Upt&$%MZXaLE80hGHTvr^Q7 z@X}5yLIRc~=vr_9b4bi_{k(VW z>x4Q>H*Odrb4!~FR38n(X+7zvpqa6I>&5In0fy=a9a6L1^Pg3tOoyg(jp_^RB|=~~ zTv@S8*T(WCU&`!GXD__Ew-C846UJtdHwFqtE+ylqDk@C|r>8D??sm2B9W%uG_H;|$ z`YveWT+^@ft*;YGl;s{6&Wm*SPJp!awjfc9uB*|)-%T?k@D&a!)5!`^<;8clCEY)z9$^d|X6u|tpU>FJ&!ch{{H zTxQ1+J|k~MX*X6u&0)o7SN;G7O-(FH07EQrVQr$|l-4R_CkMdIdnu8~^sEcifETFo z5CEbu4L+!BI`cE>czR8oI!;c!_Nb0JA=!$ci=;d&EEWl3JDpg$Gy#`{CM4b)19fr~ zF1%ukDx(c}1xbb`@Cr#zoUX>damhibh8a}0B36SHDoZ2`eC7=X488v|Prvi@yPBJT z9|9c?022)XfXM%3#UupD`tRVk#NxoX79y^hwZs~ke8FJE9AILBh%B^cap(Ri5<1{Vk56jxQ6R4Ilb z?l}#wEt-Jq+Mo6J7*N4ry8gyqDp_R>0PO-OHRW;@qi5$*OaN5U((b=l=Axh!(v0sQ zl`>8cOTa?Lxxti&5f7uU-m>`g>~ef!B7A*)-NUj9jdDns>q${-_B(-JyQVr+YQp

`-rU@bOHHMv6LWiOWT0q2UUS!DbtGGooJm42C@3h;ePzhj$i=0i z=s}h0GaB9-FNGYmdTRQ>yGGZ{=X=vA85yrTJ39+FO-j7e%nma0K07_RFTNY<;4HQL z{hhg8rhw(M2jQ;%b4j|ZCnsPx&Q~F^auK-Fu_a6)SbhIpwn*9d9mm@;kxjaOsU!@q=4~O%`302Rp+iNmwDj zuP)EF!uiLQ81SL z6fw;W&hm&aKY#v2xqgml4JR*j?XXV&#_WHb9rN5gL)2CAx=E9deu+^%yD7jg`{0A} zH8B=(|ARRi1e2Vc+#t%>*cf%<{p3mKM)TPXjytckk7UF@ia052*pq*VFrSwEDG{|s z*hPNfIkS$Km?7xKyAlG8r_qF5F><+&!-^(#vD=>ijBLdE4P3>Q~mb(pFshE zA1vQr-^naVuC^a#J=$GMP-60GLy^1-ClQsykxj31KJlClZtryT$-Gm-1k?GRP>kK z!o4_hT_hPJ=f0~Z1`C-*PzNd`7=D3Bc<&bZfOA7hNy!Qpw%RTj(w0X*?=I{(t~u(` z?oy~ztj%s{VUf3dHf-Xr@I@ZJwFxv-HjmT!-lkY0X% zenh_m-O~9?gNidT(^+lPHSrxB@>?C@N3ca(c6I{q(bp+4v@sYiH&?o^6BR$Tz3`>5 zx9Mg@Pldn~ilinw(jgL?)tz`P^o{#vKu%|3b@=x~gk015^#{S)`1`XfnY zJ0}Jj(}9EfNmJ}T}!_hR;#8zpqEs=Y3fisPDoa(q1N z(cXrx`KBd1Hg-FU{K56z;F;_O6qwA`@%ER(RS6z8@&4Y~u7tJSpPh}W(ovQXb0Hy+ z(R$C)?pZ;Au@8f11!K3ZlLMY#xvrJzOct{+QD!QK77CfYb&+&(4WH%a7(a4U6PvX^}a_QRV162oOd(Nj+L(G zs*4B`juh(hCf(92(B`Td2jOiHpU$6_7uwNE8>)C#t;?Kt zEiXHSf9$TUy|Q$t+Bj8iTN*M*_98zqoY$@Mi^gq)u)M4+0v@s1I!H+G$2`U=+d-{( zGDL0IY;a;QNoyPJ+E~>+L~G|WL93xqA2}~RE9&+ zP@wHu#HEPz=oBUp?wvNsSG}Be6Tk*IMDXP5QNJ^=Z>~8t53+~ruTComJ(7;(8@rP( zl3hY&+0}V9gj0c*D)`~+8G~xauJ7;e-G9xt&OBr)Av=@$pH(zdhlYm;aoWFLWp-jW@mbX?-44I^X|tIlclfu4rWN?@gFQ2 zpz#Z9)bEaePNhBwY zVwcNAoqLrpAs6RGpj4n~fG$GtVe+x-pI!iHLrfi5qS6HNyzFfh{hI5|4{XfA0goew5kFo!HE|i$ zdkmuHE_K8*r--`Fj}#lce-t;~iXKY zR4f0PVa;P192^|`qsMJMJ!+s)RPVOZ*w{D+@=)3Jv;CRa3ilPAdPx>Bu?La|vsCD< zH<^Cd{Es)o#h8y9+*guUCmRh;Pd5C~4%V-MOH``FTD)Iozp2&tCFO2iC5P3?r$q;aEYB1jtaE3Mwmab)^vNuKVTBX)XE zNVc?au0AyB+zK8SEXC)n{jz)F7&+Lm>Q$%_U?$e zs@M$!l=^k51*LN&p|w8%4gm;{yw!m1TPIV<+D=%Ygj&|HDaE|6l4Fobr0am$3E!^wd$9%)Gr?ilnQpnK-xrnSB8o! zansx}N6)_PAgw2hRCE6MHj|)L)Pt}rLHzE5awbaX*Ut^tTS(fF4xFDPJyuien8P&N zYJa@C>I=JEPTnb*J0ZdTW2D?XskhZL62o|1TKL%-?%*pEe2Fwqr}#lZ+de2Qt|jn^ zi0DZk|B|cs``4$b9o;?#LtXGE)UJbyx=4;=HW0`T|Q=-IiD|XO#d>o7X9PWHM?s{4pME(k5J!O*-?ECcO%+bw5 zu^^KhKDyAV5&XmE)5DdqrnZBNgiUSy$J8DkVCpI`wL!#)odrUZ7sr1oiw&G7l}i-X ziA1f^ zP<8rFA$>ca`RtBb-!}l&XW|d{2J$wqi*P}$fw9+2VGl=*05FVM1a2BchB&XJ{Ec_Q z_dg1#n(~J+vJ-i2exgZ2%IVu|Og7%H*T*qSHjEN|l7k)?#Eo8d`=VC)%c<(E z<6pAemcA~FJs$5$;3({sAW&LuO|MO1B#bC0^9FFAUExC$Y{)Gkh!%Wt9ACYk-|zT| z*XhB+;D|q`lA_o3!$mktO!Nvf-@^bB1`*8(69~JKjCda&`UlhQ>gYX7eY0BA)-cp= zk*ajBY?N!;i2|WO3F+RW?nJJwc6z6`B=U)xxf1&so|AVw1}1o?(=QSh5wqBm3_*F0 zw=)9Njeu|vW5&CIeK(mnE`*1l$6S`U6COoOZ~z$y6EMu39p=GCS38yFrSezufuL7# zzi`Z|>(-Dj2oe>b7^wHNLW+h*iCa*}TK)9lqc7+Gc?q18n>fRfS`#46pdE5?XAWWC z$o8-oup+~XRD5h64Xa3ZYFR+1n`Ri0#rXWy4rrml7*~D>rvSwOO@3GVF4(jh8rnjN zBWdPDP5O=xt1UGqHU1(rY(_3S9r8elT=b)lf z0|n%J2fBf`ciGS+%~mW2Q7#V?RmD*Yi9^K(JydrjvK>|cUYe+h&U<`8$8kw4=HbIa zwql{OTlCMQ7d~*oe>CmxtSE~a7* zff9kvC>JLuPDZdSFZKr{OisJDq~tS2BAfTqr&ipq{YfppvUKGo(NMvQT5TZ=2Z@Xt zXiNmH)-EZK%$QP;0a+mXjP1nSv>Q@q@|vY^poh(p{dru0<2C^-(f^a znE+DCwhTq;*VyNLOO^)jr(YD0OgUpY%WTU3(hu zdEtlYxR~cTbG^&K^I9TV1ieyQ>NvZge4F$;a&UP0fxEPUb*?+<8!C|L_S4QRnc(-| z!TuPX&3}H`6M&5?Fkx*x0Kn7ISXH5e7a)jS7W-kfekXNCQr6QTjY4^Oc}1P4r&Uqh;4FzmNCcX|M^ z0|SL~-Ndd{4Abp`UGsV1b;%gYAX3_OO2D$a6P%2>y(#|`;VGYQCD%*6R?9nPLBy}{ zKl7_HthD;)V7-20wlj{c0z?qElZ;TnoOO{)9kT%3r#3wQ^C!&zWG7{Hq`cM97chWu z7)-`t4~Q#N0jIY%_St^4Lc!M>)bUB+JDO;YLQMXYJo$ZZw85(ql`$)MaejgnH~?ST zy=V*v=Z9K@6KDICVM+k>79gjt-79sTX?NM2RzPe=?Sh=!1(0`P#TO{(S1@*7lC#ne zCAz#i1PHKuegF>R#04N9)v#OKF!Nd;uU$42^IT6aDXk3Hzz^~OMAOok=2POX1x{?h zsd&|TZNK)}>f&$#xM-($K6a=K}Y&!Mq?#FYP8W8Is12hcu0 z$Aw+~ple^QwD(mRC_3E1sT1GwF@tvUDkC~}M8Q6qU})2Z{psf@_cKrw-PeJ^CwkKa z1(O0mWgSK@&)T;G)-M6O*wPXy<_HI>y4VS|Ab4PfmoYgou zao@LAM=S5o&p0)oyv~CU$&F`+(BTkww4KJ?5BCK%SjY6r3O9!6)LM@gp42=FBxsc^ z`^U$p0o1n&*Jl_WGg44cYyncXu)=o65E)3|96n=Ca(mSYz%Z1D;K0DZ@<_}I?22Y_!I{@@_c^ykP}tH(6-J_&1wKa#3W&HJ{C7gued%rv zqe%f6Tub>FX+FP0J4{wVm}b@as{SP;MBQ%e{ksRRgq>bpQxUo&g6$PXY30){;xRG> z5cYQg`703mlAcBKC43vJK0SkGzedVOfMvhe69x&fDAFx`^&Q?2Zkt1FKkkYyOW)I%#i zfXvbhV^9zuGN<$Z-C5Qa!rLxsW^O*X_lPH<;iAUq-(DAJ zEOy}m6mY}H+XEm^W=N73gIMDHG%dZ5y=D&(dLez<1*|v}St>v4;U9$gP7A6!z~1qZ zF+!4IrM)coK5t$Xj1S;c5Zd#ePqR+cl-K8}Kx=-rx2XLofh>RYTS0}teMatGX}RN% zmOxvVq&PMuRZMFjnXxS*LZz4KCXg%qRJ_Q zf>kG>59AL(gB)A9M*=Jj;50Icaw=>`t`hzc6C!N(K;3aprgvVqk<@HbE~V zrVX+}9)BtSHKw%Jce`}U_IugN%Q%Q(xmjqu!Mr;-tViyN4lx$h4Ev6h&@GCi;HU!a zckz^-oj$E0v^CDDd={W(f^s0OV8sq6XD(@1Ym2JqR8!n#jBy7jWAGJN0LxA>i>}Y0 z_g#xbK`-Blu#Ze!f#~Y$RU6jcu@CA!~PFnxk;mf0?P6xsW0gGN2;!S)nJg#t8 zIjbM3{N~!t0I!Uqie+@*ELMZJ@@V8~D^`*BpUkwA4!)uyjNt#xN5w0E zV5%2GcxRTIci5ucDWNMM8Rqv<;82-evFw~*BN2E>3t3^=d+ZCk6xD>&n6^lfw9k}? za3bU-!VaL4?~MZfCh(1m6h2ETMgeqka(f?@fc>f21P#Jl7V0hD*rUdEqxQs<79wVp zl-v7ZNQchXf_puLw05Q7#EzlTgElX@C)lP2YRh*CwV!^gnj%%F&N0ZO0~B@QvlRhq z>~+ElHpXG|V`*1H!7hUf_XZNgFsRn|{>DWLuv}uCIIc0@RHWnmS#rq)DaAGH<8>F= zFLhnx%v8McP%$kUzIRap&NA)e7ybF>56m~y0K^5|;^!h5WCsWnTeJ&(Z-srLxHXM= zvY8Qm7yX~{Z~>UcfNj}z(q}EJa)inP=?raYoFog2wimf%oe=<919R)NGH@7KtPSZ$B9!(_Fq5_UpW7iaN;>V=2Lo2h*h+Aa=_8qfnR z3;(cQ3;{18oFG1b?4>4T5+jL>*mW{Er$gd>-DCkf8MKaw21>XtZcZFQpp1j&oS=u! zo5mIwGRG`$Q8qA%t*g&kqRu<_XDIjcc%iSvp@8W`8+T(G`Nu)5n&cQ8kE)9=FvZm) zEyd;KnAP(ZV=hPsIV%m1`^p7oc=2rp|1M=QxdvCG=W7Dyp zwTRE!u>W8NEmQqSL2T@?H9^)#zaAc}e#ASNsh*lm0lMhs)8l(32#%gWt^D^VjFDx> zIBnM-z>m&0&g@s>hl>*)_V`85*{P^(4OZEqEM*Pp{#{vlay%BUf<(!VPWNzBbb_SGm3LsnAHgib2ve=y(?p(~>uD8ksPrn48V^aO+x}wUVQUPL3x$ zU3|{`&=uYjb<-0~jSgv0UB$gWYo`*Mi(Q(7lB|L3_1QiUVC%!O>9IY zRTbJY1Wn8f8j{DbaFk<}fxi%ov?G(KnZd5#&V9sANn3~7?DuySXW8N34_!Ze*!sMN z-rBC7>ds$$6qzodaB_SyY%=#8FztD7-YloQe_F*bQK{rhw)jn{FFYi|`uUak8naNt znCSa+efXzGCg@G+dip+ncjx}XR#%#!i^YOQRcs+4 z;nu;Y=gY3&e=n&@__?3d#rp`yGTrYfcU>5ZiS%Wq-&8eBr;KVo{T1xv_cO>=T<=}{ z@$b*VwrAGICv!&tu%<;FoozFtcSES*b< zRyIEI?R}>2;-OV&%ifeO>n~8$X^nb!76m^N9ODfM?IO?gzp=iv3>1L#GTjG_n_&<7 zR7J}`(ys|F-<}^GE59v(vnlE}t30@Vwu`nM&D9q?nBKB{2~jt!QawFB@!Wj$UHLjb zDFY{SrWj%p=o2huiLUu9(zM}|*JTj61oGLY{fAJ+MeVy6Xg zVuwAHLuHbAGe?%B~)!T6QAkHh!0R+RzGw(|ufpeX6VVK=E>O6b1F z+O;5q-`H8u)0{wTydOpZ<1kRVAy&&in2Ku=% zXvZ!_KNlL3uQoX1jlI!iSAD9bofz-G4+t7%(J1Uk>*h!_C7~C@7)Iy7aklT{;Dk8( z>NuAg=q3%B4gGxk?%tsN2c)f@wQ@rlzja%VjL~0D%^;F3Vfy+`6I zd>`=PEb>eAJqk~|9J$kfhnM!NYQpVlAme!HXE%gAZ;pbCF?_=Ld-+`AH5taEYy3(_v5o_{QS0Ok2?5c)+X$F zNZ@%{11AnE7`?34_s&Qxh*&u|8`67b^5Be9<2?%^==CH_efd!R_J*$U0E+HOm18k4 zvERPw=F(S%T@YHwhP-atzqQ(}T1inLOXhy#cU2I}|7f$rWo&r3Bv#Bsok;dTDV^j$ z`x2Q>B%PJO9U=n!ofYHnoIjUY%QV%btv}Su;opymB9#5u5nG*%d$t+Azq^>db|<1T z`#)~1)+#IU|+>xc;8MqC9o6$E*ZUIb+_FJOy}?+g5D&z7US?Ts=@hQa!x)-Q4+ zGN+{x3`=z#kYRNx%$Q-{&J?gB|4NT-g9C((=~)Tj5&F6mCh$mzp0ff4NM-~Brxyz} z-MwgGtT8}HBb$yl@th2t7}>8gw*UK<`vZ{;={X5ELPUt`Xc#bWv54Z1Yys&U6jB!g zZC!bet#!PNC$KiU{>Bk73E1p<%`-5Ie^qpCgZ(NE-U=Kh7^mSC1j7(?F_p03aQ){3 zfiuDlhgY~?g;th`XhMwyV~LBRDNP`tOF%R2R6@>ELRNV)8>)dnS#67Z)-)BEbU~R-i^V zG~Q&|&q)iBbR9&l4G_=%TS{>mFRAl3s7 z(bo>RfL=}p1*sa~4yx9Go&d9_%BC_L3tPm0mM8IidHf%HP%KhYmW`0%WAD%Tx|}^e zl8otiQ0tO^yo+|Cq^5>DpixPn^{pZ=9|Er9d1__LhPs`&&sIb12XaDXhv$_+T`vHu zd^&+?d&wSyHfWw)IN6wo*3CZ)l11fu5cy|80I>uX#9yS6fafuxo_%OAR)cTm_!PIV z)V4E|&o3FoMqj3sQ*{&Qc5Q+FWg(A{xe=zEk90INOpl@$?kj1|h4AQCKtN zVHmeoKK)t5%J&8Fu-xG=Qc}8ni45mgx37!8tFOtn^EI6!PH+P2Dc$FHu;`o>FQGBC zf7&Y8!lahg1wi+8e!C-8JocFqQ?g&i=q#teDtCbCEwLwEOe z5oU`8-(Mf_3nuR3u;RJ^u5x*s-l+j*;&+gb(Kf`VroP=J&W=!5c`t`EUBj74MofIK zV;^`*5_L#on@|K22~D~j;h_9S{BDhR*8i2T_E?d_f}qREjTciv5OkTO--XP-gS@xT zKjjuOVZ)KC`Bri&p5i9}6`Y?TVHDF=DF8Y*AT-$q0u6A97f{U@7W{i%45Rq9151nE zG{g^ZQ?xXXe)eTKIq2*opa5l@0SOrpkbW;V7#`{%fwSydN97B9tm;+WS*7m*_aJ(u zTn#W<$67Jf7C`A0TK)p+!x46-E_ED7H0mEh=|pAoTF;G1+fi_xQXpEr!*kM0N#!F@ z#=Nym#-%zxK@oz}JRp;VkiZV2*A+06fgQwFMz%;K1SDTyKi(@0{;@LK@5kzjP0-sB z_+3^#P2iJbW15)z@>>!SSJV$ow@5YO?t|x`u{-|WCV|qlGe_`HuHTf=idhK$12iKX z)?#SqTH0NJ&~~sUv|R`ou4QVm0xKL?jEx81YAgS2j`O1Wi#m?k7DWf4vg2ff4F@*( znHh7Z{7uz35bV#7UEAnm_CKLnaqs*J9x~`dn*768DlKjazCH=;hp$|q0q;C%0$P01 z{lW5WfxE2eis{}cT7KC{Kuz0xe;XJ7C{?;`{MCyW1>Fxf!Lr<)B&N`Lr-d*u>5YHh z3nUN23w03rNZt_Uw!8tUYWNR8W7vQE54er)0n&dqA9FK~fJ-D@0WxnR zTK3}i%$*)oyT2|^YVz|>mJ-HUY%v`~ZKolU_3 ztw4E@1HbaosW+7$bxO-jZVn-%7vi~Sy9{m`gKP5!{!yf<^pt!oEYd2HK*OYo6Tf<% zXCf-Is2=wPXmo=5bI}-cT@I@CSR|OBcRNyMo%w0=_+Emgclg<}P-`PBoDTDUQu$<5 zM3wn1PEA)EfG(gD=z?rlDotB2-KUJo1gBE>>joxrqjM&BurqzORFYs%c31Up9bB@S z4&`jE1HI7sItYfZjrTz&Ha^|a68xRxCj|e9{iSH=0MEmF3Ns1r{V`+S33~avUBScl~n`!d@d8*=i~XFBTC^a6;RUXT z24g0I_gs`n766?qETD05U+^F&k#2^r4~Uxod6cvAl2J9069!bIn)!Vu{wGy!ZEbJ$ z6Wo0Xy9mymo(Lzy-c`pcin9nrBza(b=z9KnMDprr zl=q8hF-*c>$8!-Qvf(u!F~G4GV^N)tC0Tpf>-t|Xt4qyItC%l4fiHymW*yDt^JmDs zD7?7-euf)7Q9D4MN@K?QbkQw{BrpX*P*qHuXQZU1#ycvUO+& z2x(c?7wBa{S)Z*rJLF1m+|Ltnt^^D8aLae0of zM1o@2azxC~Cm+Oq1V)nkG_w16j2o@+y~v{}{=L(b@g>r$aL_FIj-nAlIZj*yWIxbj zg05a-f4^oe(DVXO0nB{6Ibt5$6+yvv4o*FQuncn{S@hE&9!q~0&2+l_r`qS_B>TF9SURVA;T+U> zAaibo&ZgHCI#WKrDJ?;D`xAGU8cr;}YVTYsPs$Seq^k@*%5VQP%QXpW%eNBP_6^VdbE?7jC{=S0|ohF3W3aJBN0@BXA=E@Hadd z>v&7D*1yJ=xx<`}l21}n(uiIFa(29ZXV91$@i1RCX%-}&_ON@r zDtoo@yYiU39mk2%PD-c&%`@GK6iS~u2kekcrJ!&?yWjSza;2vevU$5oG>UN6o&KKc zUtq${%KuX~u`QFVs%QMUIQ@-NwKuArO@r4~zKlx=#ycU@QqP2(o%VB{G!7t?MgyFa zT~!(wUKaBcxi1LRa!JM#JU1;@e@VT#oP-d4i|H6eGj(g5TL?IqWuC|D_UAwZ4(nl zK+$wwsEv&15du{vM%92RB+#coTgu_RyBY_QqCUz#E%AoY*pLv=d=Qe5B!cTc%Ahr0 zq*pF`vN~Q{S^VX_%{Ogk^HGY#&FPT@_J344us1)MW+Kgiz$t~s_=!xhKd5~Mg^*dG zAx$kMCB=2WAaQl9N==3TI6hV3Y9IX`?n0QiR*pQO0X;1c{EbaDcx_vNo+Kp$0}rSf z6MzJu;Ak9(fU2fuXD!^LrawLJ0e=ViA3MY#(4DGouCDhw+G-_0cgxlnbFa$t7Z9!& zY)gxmkWZ10ITvA+3YNmt3|DVH${I31(`)xcfr7?ns3`40thdYIZ<_HH;=NiH-L-= z&^snNTI6&Vx+R8pPd>J`&H;%|!JWPJiNVtcRkr!^pbOwv2pPm^zXFuyk3f=73JA)R z@IP(neQ`_8?|4%QK^pCP+wZt0UEH$|Wq%2WJiicm4^t5x+AFt!ds6Z$D(Sp!bi1+J zE#WO}cQBIx66B3(sX=cAUl(N4|pj`o05<*l#m*Xb8`!=9hGua4aHbpmQ^-8B>6 zog@ZHA3Y}jV`sz$bU%iL8Ysjipbp&Hl>ueSaAc7S1;h8xD zr&><`#rVSyqbYfSvVYeUJ6Nb&=)1c(AeRxm$vDF_%|t(=92OGtc16La*7*x2TODo8k!em)df&L01(QO*TJZBu2~h zE40_D9d|(y-R)nPc|WaJAJcz(KT&x(GwD8v`fUdURivtJ35*qlt+Jla4Mw-7jgRmm z#jidbPNw@AcZ7Jj#y~h(uFh&sHfhtU-ugzi&42X&u=U>IaK6#ME{RA4!AR8TGemDe z^cr1)=rwvBy=HWRiQb9cqPGd76QYY6y(Vgc!4O7wUf+G4y?@u)=Wn@kB{Prreb!p{ z=Uy-I@SBFi805nXpu+m*iEX`AqxfqRB@sQ@kC4t|*e&EtckfAUR^(bcavtrrJI7lTqiUeV(7;eqfe9f@V-!)d`}aztT7-SI);r2uoBV?YbA_aKoM zL;`oEqvaQA8EH3$OQPYs+#|^3E^akE;0ELe4(>9QI>YgCuZZ5hecJ$>zTj|2L5@&h z1X!M^W0~1t_fsB4L>fSW!UZA{IfFtoJA6X+4!(yBnHw$dw`gpun}F~)OS9_EzqU_W|fw= z`7{{9Z2)(vJFDGK(KV?{a+;GI%?Ad>_LQ?WiUP9t7~hdXvF5{wUHT9f!iRUPjd!>^ z@Hbq$_*rt8&(}Sl)3_&-xaJ3xDPL02upkG)1qN&e+yv=QR*&8r-2&v&G~)mL-pBFy zwzrYi#;4=(v;w)clvn8eRTY_Qr2QgImmF1{P50Dx7&YF}OkQJs=i6AVfNDf^j)1{h zO`nowj|qBjUjK@jFzL*l#Gasw%G04}wR+B9`ALDe$h2CAU;4qa5kav%%InlXN zcbWR)2g|1yZ>S+T#tSN1Q`kz)p3eF~Qkam9%B43e?2RDIz{wnq8>eNV(GxwE?NGsi zvQU-HwVaP`W(SPI?aQhA-%KrJmbOy+%aIW2wY>1HdL(2Ru>+aH1>Cr=kfiIc-C{iuk< z^4(p_A%+LYcs1QM=J@&u=snbB>=mWHzLf2w#Yt)IAIqA$Ax9z8iM>pcHX_Er-G>B;`B@Z}J77v`~~J0&EsGs53k2KqhPFnJI$ zWo#b;oA059NYrlkwY1Lj8Cf32uQhLTC6FD&sX!wECJ2BdhN44O2@h;JbZbnEt+vn4 z&PuH;N!P?iR+*}=@{2$% zSj5xwrH(rYu?BQR%fP2G~=Q`s6w4VnjCwLW#sn!_0iz zBARrom}z6EmF3P%QXVvU%xbdg{E)yOfB&sC0O3CW(zQlcL2UJdTKAIB+~`Bnk6|rU zNdt%CiOGXLp#$UZ)`&yKj)Z+?`CQrGnJg)%kkkY_tF)GrDLsrKZhhpvfR=baH8 zut@K2DRv7xq%tZtk#XnKQiIuMMx0t<(wKq`0;zH1m?gGtf8F7-k*^zvd%xW*)!!<8 zsER47x21q07$GUpnXww3S13JhZ06mxbb$x)?0WS zz({VhYOZm;A&+R`D;qWjwOBGrK8u5nJkkfADutj#1kip)-T~Xz z@Y0&)f;@Ld1E*9fjCtrHZyf=-s&tI&0JoAl4M?caEh9xdCVQ=#vpFWCsf(%E_QfEU>^~ST0zh*_S5qWV8zs}rT()djMyIsFq#;ZbAW+^m` z|M!}tdvudfDT~R$X*@-x_Z->f_W*_$P>T!wfbfU=#F!!NUevr>`PHjQvo@)JYHc4d zN^&4Bd6n+@M*_6@)yvWQAIs>QvfJKPD>x>+gOMxkMCZHxInf1|DT%{tG^N*a0+^j& zm~>wpXRPVC>a~W04Fc#A7X^~eVynO>*R*aPJH)~bZi!h-!f!`?YZ5C+3^(PkxKgA` zTkpCaquAdi_L=V;*FV=&yFiy%8LoG-lc^5(uJO@wkCXIUWI*Wq0z;RAABAPf+SLM$ zvpC*rx<0Iz2M;&o?#bXtPciI{*(x-154oZBS%4Jr%6DON4iQDRey<=rHW%@l_S4VM zY#`~=X0}S~D&Lw>sVEi68(kN{A!R{RJs2PK!vA$DE%Phh1%S~{wE&POOIt=5$O4PX zpTLa~o7b9QM*L*zojs*~)PTtkduIC4hZfvakY8AMX`aDe;_9J-gZai5}mR(Ke5`9`cx&9-bD1b{ZyHMkk4Kuea3Hq4J%t7s>1b8~N_> z-}ae)LMBCdlfqHA=uX7WUy%J$XC6w$ad9~&-k80o-Hr)eYN+7XN08Vvtn-`98!Xkm zG^6q-xS>32*0r_A0S%&TFzxnhECtymb623=M8I{&xYl%9Dx0(`IfA2DR5T3?b(C5_ zECCMIDnXkP;d`cq*8DRk?sAx;WV)p{3rxCKGehXt7LfDl)I{~dAsXK8r%xMiI4&!D zX3M#hxCK(bw~Htb)i!P(E+x2`Z;Lg5I$Aq3=3r$GBW4LsaJ2-!aX<6;%ZL?j%(dnG z%I{9|-}*og7p-UgzhdKcOY{lRynD}qZ+{{bO9rV26f>3s@eKALI51P$R0QZZ;!9a2 z_Sgp*;Xi~ej5>hdV(W{KdEd{iUv}Xj4#s0AwFU%LKVdW2C`$R+#lL%DNCSjS5)IRv zx+&h?c~sVqq~{n&i7Zy6I~e$%D#BWJo5KVsB zd&6)5aB{BIO;7g7*SLVTtd$PXvsI1p1Q>uY*X372mbm8kNFo)05P6~v$9k*$Df0#` zxBx9Gi)VYT0tt(6RoBCz-&p-J{*%utyH#v;!^&={qm>}NO-r6@t`g_{UuA(!$v8=f z05vjEC_*iPR|Pq|2gOEovnwHA8^1)UaN~G(_dZi>a+F+$US;qIyfO9&i7=L=8Ax|` zUeOby5>j6@qv6|M8!P6{pyBb73b$$#;gNMID037VM64$8E7)IB)n8poT7Lg()q6ZL zJLTB1wSM2>)HqA~s5qvJoW@;!iF&%xn&{Nm*jyFCeJ)?nB6Ma~$*)+ux9WXGjP`3U zZ1VQgZ~GFL+*8l@*JX8NZTXfnB_>j}J4}`DhG(<@l+8T&$uq!VE7GtGv9^L!JPzAK z4iYS@XqmY32c%`W88Qzh;VNr>UjUg_SN1%6n*{y%AaV#{1+1F5+c%Wa5B|pQ+M3RmH5hr(=?q3ceh-9&FE#KZXw}D4PP;GEng+W8P0RT~@ z&)ugC9e5r}5%MFXK1AvVAVm`Xn7QBIOVLyk6)z5r^({!rV9OkP-I3!*n+AVEs#HG%F(hZ| zpTgk3qYV2#@i+$tT-fY3iaz6SAS?7|Z3^wqob&!2sd9A6ru!AKfui~`Otwa%%7y;& z2FR~QqH@`WBUGSTvm7XOvZex#V_NB-`-yqOSoM2E8UEOKn+9gZK6vmNBk4rZPO#GY zWd$!mO$77{0T_@u1|?jN!@pf61lcWlpGdH7CHMnrBLr8;32bcg6p|6rSWG0@fat|N!(hj?`>fg+2lmJ--bz7q?7eAn@_wG}!ukVj6#ER5W*E5|J+a`$pPu(UaK#62zIBqhs357W7beAx zH^*~3s^>#V?8m3q@^8lxbD2Wf%TZ}8ARFR`R9u>nN`W`_I!B3Joqb=p!F|S-mZJWX zpbZz#=6i3UnZIj={yQVElH7DVk!vTLJV!NmU z4Wg|z_A7}?&bzLFuJKmC&2xI!vDw<#))G?NYI!s$QSbJFlK-uz zaEC`*)`}?B+A-nF6quP*`7K5Y_Dk(_CQ3ZH)^D|^bYmKCm|qfS&6|S^O|$tENRj$yY-&L z&9U4ZGcS2ow)~L|0N$rrO(`|t{L9(7nf~0kxUtlwH|?dn&g#|5!g!*jUzm4zVq+X7bMyVHx~or* zK{SCSKPaubT>I}eBss~^5)#+2e(!B}d*;e+DD6kCmU#BljLl)v`{IQmSspB6#-5MF zUAX2RX}A>bn$aYJQrh;Hm#g!v@`zxxe^cj@rg_}i;sS%1tFuL1$(Xf=99(|5V`MdW z{{ef6QOq2pLRuiWu8K;@FN5!chR)L$CQF}b&bBJt9MO8se>!JGyz;hk0GN1?Dtd|V z>m8890u08AlnpgZM67>MK z-v_jyz+nGO#7kxdv zlT~ID3)}^GvriIny{qW!wKupbjtiCF29%Hes@eq>tFBeNKpF~ibF{93)n9ztPCtcR zIBM+1|3(HJ-zzgh7M-r_mYy`;vZ&=JE7 zZ9(>{_E+}WN=tK-xT#8rH-`%M?#o{izV)__oF^amz7p3%;cUUNN@$YXkEFd-uSwCL zU#f=4coi>7?8_8|DWJ$ZpYa0*IC)&Ny+LBv#wBWtTqmm`mGP~QiCHmjruUPn6y)|& z1|t3c%2n=Lu~#f9FEEver>acFH-c}@cV>8xJ@{e;rX?KR|HbSqov7p}CFl|g$MqUhfx2M!NN z1E=iJpH4r}oX^U}DP^!VOr-};JLsm3I(w!P=1?bxO{RL0-CG+Ci-J`dfT-HuEjk57 zOXb#u_8b>)v8fR6^4NvjV02Rm@RzJ57r79B3M`hv%+M?GXuECnjDt?I)nB@lKX%5> z^9Lf04c?ra0za<~ZsSuR%J9`M5A5kO{REZDj*9F3M?8EsNak0H+fi9khoe?&LN-}) zVfzzr4zZ_j=x0fjH}0n&e&@i_*r(23E4(PEe>Lg0Oyar^g0WrC!6!;&dTr2_5T4~B zt=iaTpO;dD?fpJ00s=>hM3NVgkTtiK1hvG@H9 zXhh>^YLk#j!r75k!@cMwhWroDlxQba-n4Sht^frd!zs@Z%m1Lx6enJ@jAy~y2OF() zuLM%E8(GldR@nh$rV1;xyt4bleUvOzU3S5_{=XJ&C?(a851T_Qq8t1d%%}- zYJ4QHIn(a7CDa9$w$}$P8Gre~%Gn?j9bxV20+5*=ox7M~%*P16_ZBpf4V6G+*I3Lz zASK9nc)EocbHetO&<&q&;!l*4G?}w0NALdFh4(mm^)}V`YhS6G?vKY}{+k|9NreyM zXLR$8?+dOS`%@iyifCI7IGLw)L%g_>em&y{yP%)KTc2`jD4DEH=+oLx9| zh_JeKEs=q2*#?14Vzn_?y9vA$EzS*8i$J#&n|iy#?R`JWliQTi6=I+HT>q6pqJiM} z5LY5L1$mvh?_Jj+%Sc?QTETgC1#oza;;BsXd%X%;%`C}$3x|4=Ct-+tq zyer4W7hx%k60nH~6#vI zj~WBD?kCmS7-DlxD0$sm#{0+$x8FD;dSM!MPHU|$iD%JNz&uvIR8^V@|JheTn3unH zcFowvZ)K2(6OjkES*+2KA-mFd*zN=JL6Nc4)Fx|g(1t9L}}`=>@5 zGzg-*s9FGC-xyqZHeb{bPO;Z0~;i#whqwoG@M15a^@VI5|35WfCuaSk797} z@K+!mwA7Z)8zvdf&HF@#f{Ae^f!Z@pCiDyxu(3&^5O%f+6*ET%Vqa#}mPUu__7ah3 z*mDmtMd(4oF9s{Nl!;S;<1zDI%ZnbOO8vkm+gNr{?l1Xp3W?664A(CN^|w#tZQv@I zycFwu52~`6x-!X?EsGjB7F6XD8_!0cbM6b+e=@Av?g>PL1!B$Reqg&+X!RoB{t|)~ zfwMZ9_lkV8R@kH^=17 z*Tr*6r>rn?jWwh`V%6#NjGbM26RqqZP)#>uk!l)!OAcFL>z-=iH?v=h;+(D++~uB0 zJklN>E+o1&yummV4ctncb!rytJQJ`uxcPIfL%Bm=kA+x2js0Lsb#on9kI{TsF1z3b zWe-|Zkg1B~?p`bN#0NnmG2Z?B1e9)dhyeAGc|DG!fh}hQZtBTC&|}h5`(m<$riYNr zF3%b+{Osdug9?x3)#Is7;xLYKzh5?5^iDPxj*}a9UE|n}pFc}Zk9oDPrPzYU&UI0h z@P`WuuGV6$>S1h_0pzB~*?kzFo1|KmfxZ}T+h#pSY%StHfK+f|l| zN_;V9ft|*26PVLvp4I)o0!?X-C#!6Ay5^AI@~1Yw?bOOL!qJyxZO#oo1h6ruY$oE@ z42ERz+1+f<rikIl{lpv#o`16EXxYrH=(>#&&LaxxCiP)u6E<*^KCtv++VAr7;Yw z+)+F`{U}#L8TpJG5@+eI+DE=Kn`kVWs+hHz^Mpc3YOy~d%@n5Jmbh=pSWr*?m9e$Z z}tN+tM-ip^| zN4oT@ZZ`tO@867vdym_5)=s49&>51_RvMo%cyRK&+cV3PXJfIc?*5GtVFsshnmcFs z8f&}i%F&gh6iFK+k6-nV-*@N@JogZ8`;fS#ILDcGHKVw;i>k7i``hzu(D+kYysYu! z5L%6YgX%SKj30e->G<`(sh6G;*EiTc!-D&{)#9S>C*xNNt(AcKgwta-ck%tqVvE{t z`Jk*iUlgB?1!Dwk%L@S%f=-h7RaVA6zn(z1vMD<=EGlKnJoJH*p_2KJ)Xe9%wjX4dTc+;qXa`qmlL{j+t>8^NDoSZz3I^)ka zx(4py104`f;U-1==PkUqj917{3WXPIE68H7hb`-14N{f6Y(E7A;Ydyn+ev|RxIKW^ zsGF=Qry)}T6_%}*-u~O6UDU>(A-J2cTLs(qnf6zJM$zo!@1_5vVKbrzjyuriGl~zy zO()n$xFwr42{bwKC@U%UYdGTbI8xW|uxTDr4)qzX^f-0`hBw3*X2PFw>?I6aTBUM* zw8>%k8p?W3Gr>^oxP#ua(~!Xyv)r1NuNU0qG<2&axv6<17Mm1`P?SQMKKpTh|jO?&j!}| zTEG!mQLZM$^?1NcZLhUYB=nD#B-*c}Re*^*M!mC2x$Qw!E<5du+1Jg^Kt;$K5DCs| zNY$s7TFAG2B{;1cGhth)fSU(fUO*n;G|iTACZK7Rx6D%4q#ABh?Zvt&DuqzwQo#R+ zDD}}TYUh#=f1wQVj8G$zKw;H2wCb`(Yo2Y_BZQ5*CykpOPPnV68K=9^^QXhj`W#2N z0g5#GXTl1!F9(W&;aPIOn{cOpY*sqI4Co;yx#tZxt8nR}sRkp`2T#d%Q7e{{mSxu5 z%ht5u&YIWt;`#shLdZ*=2Eo(M){#g~miK(|;m}t58p+P4+u+M$kB^g+?ow}47#g|V za=}J#2PT_>*}e|fKd%qS!ErVNlrt|g7)Q}8Wo^+X8@zk7upDPw(mHx{Y zuIx%??FncaC842!mc{*@h3CHi5(0-)eb=G=^7_c_@s2eC`ye?Mm}r)6NDnQ(R>2d@ z_W@$nSL6&i+>Kfpq2Z<99s4P$NmlWP9Q~P}++CM@$J}y9E^#PsdFI>>u9yQ~1f&AJ zE9$AHkh)Y0AH&h!xe{yypT^@#WcyQ2*ZzJ=W^}55ZyLLyhf0DIkwaKRmD*%fW8c{;q69z-v?R(kJK~lYbI0{g=*ux=5jG zLMRr*K2T~}B||?K)w7B&P-8FTThCZaoZEXX%vYV8C0eUh{n|0bPzlz+9jw2Jw7O*f zZMgAo<+YpT5xtUMLrPC-yO6NHEvvBs$lztXg}eMfage7zSvip4B;a{$^FKa!*}Km@ zda=YXkh}6!6dWg}F9Rcb{MklXk_pw?m{#ZB{|VOCny4i>Xu)vfQ~Oy%(50VmQG{lI z1Ao53$m-Bcn0dP20BKN%=qVcZQAysY=RM-t&)TlwHoQ#bVA61y zbfdgzw*7-A`sPqv0R3l$dTi? z{A95Nb$_#^sRSFQGZajgdKqmYSjr;N-lCKx4=%8rqq7i+>d&Vr3&ygABd(s(ynt*7LQJ9Ve^Bb}wBjyA*e!nXy2S2?@Y_t8HJvye;~dgvWe-SQe?=>L zYFR7S4=V*3HjKKNUg?h1$Nr6gX_QxqGv7Yf%xSl${qz`l8Rcd^=0pRbwd!e11T&h~oN?zecewYdJVMHPeX-*s zN~XHx%wXI{nIb;*7&P<{W`t}rf=RYNx(5iNvVx0=`h2xygw%HIdy~TFfOl^`&_C($ z^y-Lv7qOnbB&hJD{ilA);LhmSCaZ~z=AuAal1l&Z$Gj6vma7u5=ZEmSK==O)U5)r< z_0t6!-QlDFvp70=Q5k{)06z#Rv+6jK{3XCMrtn(y*)Af606XYrahk~_GI*sOrt)7% z3o`^eXlDU@i{;3eS9EvGc8}-yAR>fWsQ;Fq-=U&Y>}-H^;qsT`d%56%@Xe)X!a^=7K#7Q#Ne<`Dm@z9%|Ic)JCp;*is5|9OY;qrc_3{llCPHuIW= zMgTUcyjSMvYY6A<`=-+Lv@k5M4!Spih4w=|o7XLfuD{;CwHuRU%7LMU;qB(_wD(o_ zG|H?Y(Ay>Rxnwi1{$78A(-n@D>s8PJ9^DJPh?5Cc39lsg_ou4^1J_6tJw7i#&roQL zCoVe8qR08;W=CpG(SE){rw~MNS|J4+_LiccC%4WNgX9D=p5|?eRq99Lkr#4cgcn52 zA~z|}HcXECY4IJwi)oRI_}<{PF1KgBg=5tA$ltcZ%{Ux6<__Vd&RXjL|iG~uUidmNN2KZDngHTMaGnlB3Ilzb{(6ab_kClcmU6Q z1&637|o={pnzPyil0aSI2q2a{%ou27*)zrhTvwfP(D~z`e^}89pW{Er~BDw>`K!NDdSHZyb z6r)+MMjzf((}>5YN}rFI?LIA?)U6Q`QBnOA2Q^Io9R6`X^?i-n%w{Hh2F}Z|NLxF8 z*>!6>CeFme&o>kqa~=8&rc;^$^SpKs4ZPXSMX+0@p?ruxcTp^It0nukEy|k5;=Y)_ ztCa-siPv{hD(KBpFU=)%9~3PYQ$Uns289p#UHUa!-Ar>Q?rVQB)e0%`A@J*G#wKc; ze;vZH8tj|MW38tqp+ zk}XJT&}FG!Py`mL;Vw(U9eSNR?e-Jim;W7yvIN7CT$Gl%GuB>;g}2aD4UYZ8*^eAe zWM`nx-hnZOJtd^5rhLPI9ffis4l-R~!4NebSV+WvRs42GcLOf2WHxQ(#hgX4qXDML zuQqR?hB|)%SQap?$@+(1T>>23f0?&aLFmH9tE5Q+#7)2@N+?6j7XdW})LxrFzN&s# zA?v>=kYA7v2XkqlM{k#%)y;1xTpdq`iZY;QC^+iUXC*Y7RUH7xtwVl`pO2Hpar zY;bjfN@)7H@G>v<|sa&TSm=+Zdj)YbAzeFP3e( z+(HF?y~evEt5NmaStM~{=*T@}R$<-k*)E#TZV(JzU0RFrZdIb_`=>(P%FSn<+cfLj z^?_(8nLIGrsKT+$7H_FlS?sdCY^Yi`vCVNl8F}2Wlq*%ER?hKi3YG+&`Q%ARdB6D2rFvfdrL5H;s zA|qpVZbOHkU0e(S2()&YJHTRV0Xo?kqT*o&28MEHAb1Gf4bIHW6xjygwhC13lgrQi zHnFOif@&aA(oKNwk52-`5CBuHbqV;8EdfLA4*w`VW`tnB*L_U9WWf*^BmxT)?zDgN zoq?Sm2P?)^{WpMic&a0gR-6qG^J(q6#wCnIj^zPn=^ctD-8*+{tL_~_HKcc!+iHnx z>Ic{fO~|S|U1H;1^eDbtMdN8ug+Gx}ufa(JrjX}wb?r6<&99*Jt*Zg)*fE|5Ogh@? z65XuxiPAIIK+w4lq-jK{cGQM^YaT7 zmT(PvPC2csDSwjiC)jx);ig6fXu3e^?tm$+6}FD&HKC=KiRxt`;6^(}IMd}oS;M={ zQyq30$LtUv%#w1=8Jf`U45!AFtOH5C3@|!*y|o00=Cm%8S>I`0 z0tdEql!%WAM7kU8D8gZp3H%bh$d5SgZ)UV0Mh$58+_=VsU_N;O(_H zWRC#t{dW=qkBigIWx!>)CUB|30wDme`q8{iZrO3)4VOt4Q#r7ONfrx zjf{*`&t(7s5s8{=B7fjlscL`m@b`CZQDj#$5QkBtx$J?H?koWD@|p#umH*)G$1I~9 zSlW~>w9yYD@#GD>VY;85wVJ}-KE?+Ci$JUXN?t+Nr_bEg3!d{2ape7YmSJ=Dyx#XW zjhT>peIg8K_Gnw@-JU`c6Pd9Rpj)kO;dgBh2AFPHbQf`Q?-wY(jGv$(#(91ez+nV@ zA0RVpT|!R%_}8>4s_?7GQ4Gin)~i>LOeRjRpEA5Z&*B!wqvZY~Mj{ z@#}aXnSI>CKd*C?rG|BOI?ay-7!N~5Q9GUPrxsWu<`Qqb0D^MK#OL>e1~L1o7m$&7 zt8lAFqN+INj*<>D9FS@Pye2^LHeY8EQFVQ%mkUYZGB&td_a!@J22nM+~E{zZJ-K?h}WpJfnUaK>|;$tSQutT%SMo=v>|x~ zo-BxC5eI5mIpjk4JN%N=pK%Up>@!D;=V{6f+$+iFgTMHjGh1~keebFIKsYR3&A1}F zn&Q$~#l}Ao`1h%>E!PR>yEkI1`&_{AZyK3?F66jskM2qjvEu9(8kPy2JcWEk1JfvX zfIa_UP{uvvLWBvtj&=EZ)#mbEsfGMomKNtTJY{u*0yqbO10TfL4kpJ7oYqm)mH zhvuA0POC=ds~@xz!%q{Z;P*EUvwpj|p`Hr2T2yB(epOfceY`)snYH~`c)L}e3%5EA zph-96e|R;g)Mj?a$1?)QQ2zf1XWv=}T;Aak5sM3VZgucnhySHk9~JYUlzi?)H8m;m z`kYxHu}QoZ@w*omuQLmA2!L$WLC57AE8L6obJp=#RZ)vT-1wk)`xp3vGk2;4E9x~d zdhCf6U?G$tV91uS1oG2|cPRt}I(pLNIrX+}eJDT@0~`8SyKEe7f=p?%SgOe>1OJ2` zy{}(ZyH^l)2H50~f>?h)9TWkXH|2Y4ty0a%iM!oADFSvY;T!*DdW&2%zz_01s^ymy z+h;Q`z%(f`8eMbLIHY?hEtbmA*o41zFCS>*KBs9gUCMl!94cV1*d}Y|us0zEN5;D_ zXr?@Yo$OerC>0NtSALyix=HmkuCf>#p(;fDj)pSDJ%k_p2?jM;BdHV)V=$}ZIS$r< zr#speAo_yWaqTZRa7Rq-!I|69+Ur;IF{p^Kt<9GO9GD*tK9a6ATCbPbbV=f3p%7re zy!Pf}DPGNei6|M)BNfo@JQ$8^* z2ie4$XJ$Nrtocjk-g@TC2~2V*mTG$|7S7hXR+WKv3QFd4#;lO-xRmiz#7ylT;QjSK z)ra)a7tp8CfBRuEC9M3-_js#J0uF~G07XiJu{H2`A^;Il`dj%xEDQXulz0Kzl8u#X+7M2%+F%F zvTGIlaI@qexcjC|W(k)lWQ^1*P^(utJ`gyD{wP!bduFYGYF>#s&)ibkOVRU1c7I(s zg?*XxpR9FK6Mp|0+^Y)edsuJ8jzFt>Q3Dy_whx^F3JCq17)pe9F%>llBk?*@OQR#B z$w;Q6&s0Eb-BauyyMa+FP?O~+9A^_Cu>r2aZ2UgGH|AF3FX5xx(5qj)>OE+Q{?MA~ zK)tPUHX-HdBn{Jv+&;wYJKEr`3kUoQexA)Q^Tauq$+ee8*`9i4W+;=|wbhMt zc-QTp7yMv$N%63jnBe1mPsU z22U!Pug`uWs?e*?@V{)DyHduH|A{<*1#CFVqlzN}b|KJa1jj4J`|1H8Dp2}sncGbi zygu4UdRy+g_X7o(^ZR)kE&PE)u=(vpzdxXEcU-g#dvj0bi*%(~NOY@`l%FdgK4~7x z;a}jbdsIXl_B{1K`+qq?`4RZM!SIQPd3)sgaX^H&p-Ps_R0jZ~CFF$p5jW9Z11ec` z67TMjiQTo70C{_o#i+cA6*iYJF;kpml0ryXP)Jg4WsLz1whg2*ngOp4f5wuFW|%o^VxTvJwdVWSAAZ9 z+7vqa3NKs=XzxU2_^&%?)ujnTlm~osrx(aOm(~gnsNl{Q1=p@{2aUF-yZI0vq5W{a zN%qE{N}^43+FKJ6nIkgX@4UbwPPXv>i%q|C{gRqEF1KjMC_GH~7%lJ>9O5Bky#jD!_U)0#?0WmTh*w=%8PguGw(Vgb&oLmjl-{i`W)#yYYleDrrbWK;Zg{@aENvBE z1~qjm1Jfbcpo>jW8f!uTd`$L__7F+MGWKw@){b$g5UK)~qye&o_lnfE z1sB}gskuErD78um*`3(4Llzt{J#IBuscH?Qh)X|CwC%hW@akc?h|l$DyG=!1w3!@$ zd08cpD3{!+SAmVdIu(CbUS^vvjuE7zWU@L2_AbTtk~5e2A#VluP~?P39b&W9phnq0 z232R8OwzBv@A_+qa_xL)7*FV4gsnI-SY=t#!`DTEBaa2&b8s=B}*n!CHZ6>_ux{{GY! z?V+|F=xqViCZ(R~?PQQ|1GV3I89@A>X(&PnNzLBVg%iVot%TYz9q{|F)+2W*@`u0GJ^7%Bo>@HjSC8-d&F@$7MZ}(c9SQRh4ljFvY>YWy z5+DH^oG4V7_UE(4>mwMpEy3aNxl_0Rn|4SoMiotfRX`O)wg)O^xVN|l;hHPu+P&B3 z1|SPnWo%xnA5NLf*cN~mqy3$z0N!i8f7p=E>K*tb9~~QPRaz(LHapAfpScYqo>*1p zP<($f2@nBzm<3zT6x3xno7J-Et}y(Q`#XPeQt@Kf%)W(VPh9KD9J8b#VrP4#rG;aM z+cPa@dOqgwj2QUrtKoL2mZ{jzOu~yLIv}Ckym=*(Qmyp)lp6ISknD1l(+|UjxJb!O3GMhuFM)!vc@o4INY{*GevW zQ?;=XZRXYoOF8uh=3-(z6y8z)U(%dkDucTyZ~cQJOJP*u<~4=Gi} z0*CtpXZ+SSqmPzMm+l)=v%dQ8yE-mNG6%k^6l~{55@mg%KbJGRRnduW;h3$D09jet zLvz~6l;~8VsMXer12ruudfL~-Z<#nm)|Op4qCL;%|{pG@*l-(|84jC?9+bo*(Z*Q zJ|W>!Oa47T>I$5Ha_tN{$Z};9C3PbsjS2ezP3BqU1X=u$aU6K90$Um+M!ycXniow9 z&-<}>$G9)lONnK^)Eu^^bobkJJaO}8cYTZO!-$eMy@^GAX0h?&j%QCWZ1CUj`~8e= zJ{zC)Gk6+i0=o&MW14f9 zQ_7%`4Q*U{=KFt-yvR}4ta}6$qEaAk`FXxmf-7BB@>8(zyd~N0wHU~}; zQPiIV)g}$^SZ*l)E`G&o-wR_IG;-K-Td&+OW=NOGiojvVvit}{RJl4XQg9Vbk2R|)OV0rc;MBLCSCNWz?zhc zK|%gs!aLewZTVlQ=U2epWS^qCpc7841U1XtQ_uzqS%T%eMEG+J^ zsPhw_cR&Cn#pNgylQ1M0O5jnUKFAhlKczlz6(2;w&Lj3d0{ofzLa~LGJI7cw64u^Q zenmcSOH1>UIj__}y8tAvE&0PXO5cT)`}HDHTkn*{TK}NcJe)0~x8={eG+$)^l=X}7 zYRFdbL)!S)4mOKwk3r7OThSYId=Oc$ny0yD{=Lq_jG1D+bMO~sNO;S(gVG_OT8YxM zA~N};L0SaXlj_T*GUSEk4qO}~{dAE8-IG?m?o(Kvw@m9xy;W*aqL*rm-oJL{?U6QZ zbNN%`R;_7FNK3s_7{6KL^Uv4$V59?=QWdp|OcZXSh<|An4dgps71ctI+RiTOtG0~e zmi*EiVP30R@Kogo1vVKRO3lcpN^7|_3}qGUrM9!I*X z|G{|=!g;@MjZHOabusjJ0j4#_s#BScLre6u@g?QQBV$X{$KL1aNrp|0&|>Bap8e47 zWNbjox7g%qHB_-z9~s%cwo+YeK)&BN9bkyBY+a1H5BY|@yZy;9rF?B3ZKc%YNJGlQ zcsJ;>Yfz#LhGakQSPcPa@8)pm2T+4j1SF&Ym;sA33eLIzK{@h(tfGibU;au*Rd@Dz#u^h)wE<&DsLW$Z z=))OhfY?=P0#)#xwOzE^C8^&;F;@g=0K9*b-)A}8gLh=&VPF5+;9n2b_e~oti)8BPA`OhmEyKbO&ZOX_q^;E2Qp5*BVJy z12eN49Igz;V0?+hZ-mDXpdtdV)aK5U7q{QATSsoQS51d809q%NrE^8RxvxX1#dd|} zR(LBNT8SL1_(h!7gr|2|$VO+*uA2+ENc>-Kx3PP|+wIEL@{V;?oxt7?m0b_Mtv`K~ zUW*kSgE053>ok(a#8bAZ4z#dqoKf67!}j&;&^*c=Y^PS@s>V5jcKmt>RQ{6B1+WlUUc*sWWvP<(KA z_tHXfcZcFu+}+*X-JKS9cXuh!;%_X4~d?h!;w)!SaCh@{+C5pyfyRo?Qz29YYzJ7^zk%-$FL3; zO0ovC5is&lH&Otp?Wwd9TawKrFhk=ysTnSc;yN+IP}tc0P|@9Idpy*&9kp|5svg1P zAQ4%1%CtI|hn$vfv>@AGYHW9W_hUk8=I)0j(eNLU=KRdcej#qS9Qed$-Brt99i$#x zcBrKp$ry}_CDZec8|XqEgH^&}4i(Rx_m#Oe9dO~w=Wgu)V2t{RKjg!YU(vxx(Okro z4ieDTJ6MJ@6~B&M*&*#c8tNvd;wAUtUQ?NBb>SQn3dta&E)PI==-xLlSst6=xoG4j zDV!qhnn=|>?c~TltHtbXz9ZPt9Q<)Vry1#5>&BI<%PW8|i&s)v-;xm_g@Ki4CM1GI zU5#ANhK^=IK4Bu@xTyyNuq*>7PvU=7Uh#oKG(#Vu+o;}8fnWt?*I#>|SG@K=-v4|o zpJZE&?zEuPQ$ULYcE}@EHQ}3$3DWW&ao(HsInrsWb041#6@n#=v$IyhJRsp)x;vaM z#q?OQJXqzyh2Yw5wScc4txQIW+oZ2ZP_eM1*T}hVC+=z~DQ+x1f<*G>pQ1}HZ9=H1 zYGJjD6V*kum1HX+LqPx!rTYM{>Ufm0ZV|Gm*a^lf;827BI%&Rb=;P*82)gmVbG7Qi zTVH5n^zL<4Lxqr11f9-JACWbJMVvTlAu z)Q!$$%h5JVWIWrhUI2Xu1_O<>a84#jzb&x%&Rr~mqi9Mqpty6dK`WLyk2H*N5%juq zovkq_)^~2Ae2_+I@s~9f4kJ+xH~J}Bn4Ox`f!KMI&w=l)OqYBqN-_)y=o)JST<4n8 zxHrTr+Fms}0VsCPwH<24cS3)+OG?uLsZM0m$4i|ipt6Hk=e!8jJC07uYBhp+`m z42|#1wgzM}!muM5Jqb9q)kvh>fzaC}5QM|~XMpA&eivTr%xbL+tz&na>U`~IhU*+< zyQ>@*LA_Fw?uA|o;0vmv#TnpO)dMAPxv!X|WP`PfhLJxn;J~rwl2L!*>agl2#9LHI zBv?qeuQy32I_e1% zB-Y0(T4*#FBGkDJ2KBAH*T<4z{0wVO5EZ<##f0G(4x+(CrBM7vr;H;EFKQj(X6Dp% zO1loPV9eez{sCJcBPvjaFNqK7*?fies-6Xf!A92E z$!|xb8<|f05^98q7Vo(D$l<7shps5f>fo-6$SN(RYH=-^4_wW@nfM=O7WC?ivoE!c zRyS08??XmGJjY$qv5dqt4qY9R!l(F?D9&U%49RK1iz}mJutodInS0d1YXN<)ISCgB1(PTZ4#7pZtbt zPaW8ymVJlvn3!`mPAFyEm{l8~L_Eo46c>B)-EK}jY5KKtgk^ToZKhW`Jat`{b5N!+(%;bxY) zR3!Cka&&ZvwU1lanKGX5etBxrQB%c45UN0Fs>{Llf3zi2Xgw$Um_d!$2XB#sEX=*j z5)zzWq6(|GQ1CKq0@3?8e$2uV9T$L|Hx$nsc~-ru9Y*sEZ-qRmYv_4jt$e-9SNBr? zlWGbWFxdzZ__0ZYrbA_}Vnns!OabrirFTabKFbUmDS|4)*!~665iBdfxN&u)tTv|O z>M_!5#~G@O=QS!FMD|r-e&jYQV;z18D(*z@(KdO|{istj%){&VJtBLRUwzs(omnDP zE*_&HOlGdOh3a1uN8-IVas-3Y+zT;!8X3S?;_7xR1W;ckrb7$Q8)!R`z&XVK|DVIy ze&%<5xq}2Nx0-$O&E}<>h23}EZBPnNn*vmi)~)T+OGN>oMz0V`y#~`uJW(o7sq}NT z)%wk~OSJ^m^2%UOJ7r;d_g(Kx&+9J;muu$7VJEGbx0d6F%S9#)=cdai4Vph0v))QU z^$cH4yv=hvzt^nJFNaLa#I1Y-pLPO^7q|34CYjGTnqC2^UfVt23-1A*>~`vPD7+{_ zt=v1Ui`un{)+92uHnU}Z`vXS=9RUR>_330lOVs@QKDc}`Xjqd@OKiQH+IKvpK1JMJ|H^x$d;G$Xnl^#1)^~`s z77Y~EeCp$uDM@>y66Z3~K;yDj@Pl%}M}EihTY~$<1O509sX66T$h&_dSDS@GfWd6; zM+{*G|2KIf$Ry9GQWzwT>VA2tPJ+mMrN?eTa1hKf~bkm zk6IQ`Jbfddu(G$)R>P-m>n+CoYqM^IGX5lYZL_<$P4nr|HS8=E{kH_IP$>@$0CU_y zx7g@zYp%-IJm{Y0Fg4iuVSf2$^_lmS2Lydsn-&y*jEQg=W-E>>I2?`uyQ(O)=khv( zv9|EZkmgy9QYdoryXYkvVy3J}?GWi5wX#T6Osz+8tvdqsH6c>~5T-tG7S5l1PrM53 zO+Bh68~=b^cZl0ST~i$L`57|XSyXLGL`{C9f+KfNJE{AGHDb1^89pNiaf!(rx|Ej> zN9CPd>prA|`JxCBWs35#(Wf+Kyr~r#g=|vMXKvA71>D8AHC+J(A=D;KE;1*hfZgEf zw_{taUhXFW5r12OYPcXJjX)49;vlmIslILxbI;37($mWX%hhcR0f^hNSPn`U=>_2H zTD08Azp?l`dirC}I$lp2e(k-#-S#E=z2==vfAov{Nx?_U%UKl4w?+7k?fnPt%B!cbaLP zFF-OT42Bn*7NKN-@}Fh4771RRI`7e+W*^kElnUwA5|@SF6sreIVL|n-i6FQg#b3;`E6o?E%MB zGR6eWXhFunUU*0nd+6BZKau^zJt0TK7g{b83!V;xP@USFu9GHZ<`A1yhSY;4x#ZxE z^mnGLAGH;sOaspOpTA9qg^cw9TZS$Jk%y-pu{MvJQaLDb*<41ym&-8sCL0F1%+Ga~ zGa{%KVD%-SER6Tx-rhcP0>qlek2n9WfRKqXVEJX^L;K$80}$h)^C1V5A^JqBvrIP+ zFBXcLqW$h)d6!%DyWxEi@mz;0DfL|{ckstAUQDSN%;HfJ9cpTq-)dqhjdXeev~|uF z+4jrox6mw`)hsE{QL}vD!c+o4*s#ob?T^?IFs-eMqrf$DC|VS!Qz?tSd&s1QB{q zx+~12+(((ETG6QVf*`;Q<>J}Al&N7q`4@eJosvF?UOhS4)@J`oclc-^-6IxH(Y;UJ zw++ZYl}gPU&1Gvj;2gbpb5c!PXHbRldrRzOcGK4FD~-$ilQ>H-iemi_NL`Mhn+~`msRE1n?|Q zw^u8}O1T$=YNh=-5tH&cHR1YG6hsI#PFxlb)4$I3NY%a7Ct_N4EgebM>ktu<#0`+8 zdpm$64w6w+eQz?ow{_!Yfz9e3IL{BT%~k6$3HX6?PF~ObnjrRHoHx5Pq3{WT3}QeK zXs!*c($71uW8FPHrGJMi@A_ae(N(w;e{(e7cwqXl+3F`1H>Za2lY`kg~R}luc(P zTldJ9Wg#aQetLce{*}4;77+Vm0dwmnW&qP{;+xq5jn)^1!;+ewj*IZ|qw+}qBk*Zb zfZDemyNIQlhLp6onHOMEBA}qCt?s-$EnY!FZn+V@0%A88rmw?UcHI_$GwQ#4e@%pD z_#*{Z2J(_puW>M7in`lq`$)vdBA&hly%>qaU-RCsV%fweOibD?udz(3}?7?HR!*ywfo<{G;s5)fS*Pj2}*cwiL)P=qYA zdrL7%9BR~b*R{V~jx_w(Pqg@{GTK`a0K5t7ANFSwR3O+B+ies~Ed9`X^$yn=qHD{crM?fV9QG6)j0xcImk4)aoK9Ld*w(d}72ujD0QaT?8g z(F?ue(+1UkzM=GA@VW_5fnmqxag;i4vG@flTxULT+ctQ^dta*Hf+eX1h)PhiCAnD$g*jbF%-Nf+R70 z$qaChP*PEqIR#*z06{-1i$F$<^)tXcWqM;5<&ja%f&=%#NIfcFCE)oRxuk);{|Vwj z9zetvc)2gqg)^1^PmtbwnARx=MF7V}xpPp2uL{6EZdMDD7O?#Q4Si z)Y|H&W=c88i(I2BijSDG;KM@XX1S)T5$tdtO3G;Ivn4P0q%Xl)!*c46zc0${s@Md8 zDcY83MRMy}{^1BGb}7sV$cc2-V6=%>vLsY)?o;8$Me8(pjOvY?@? z5#sVFQ%+o~Paw>_=+0i|kN~8C>idOgz%EKV5uy{f!JH<{F+Lmfo65QO7_`~eM7dB| z{t2>^JL_!+hU&gH%TsMA8R?qSDfD!WrvTnv|GJ_ocR&37ea%9{id&5d6y3dy??fcx zQaAmcRSV62HCOTA5CZQaAn7Ow2un|S3%&s$2X0Y09)9mtf0Z8ASH#_-o^%lL90;E1wKw5wxm@AK!?QwQVqOx!CC1RPQ)97c z7F?7*7TrzpXnCGjadGteA_G9c;+Iqk=#!@0*3hW(-wc~QI2QYr!=I$}`8wRb89{l* z9oCGiDm_|C_J;T7lVgrd)8<8V$4{bq=J$bjyg4b%Hd#`G1_B+&GjipH zwK_eU*$z8uML*q}y`-ip37wYo*VBN_uKvZ;?(f>9rF9#gsxa>ymCWG!Z`1cZ?5!8V5-%(nA}lTfRp&Ij zQBT3iSzBLI^De)XYs9WAC&Jw(JEil|nFnPmin?{f!Uk3Q7-!3|G z(2h3CUv338I~v^R1EJ01FT$poyWKkP*WFMJ!el>7b^-$VvdS-`pHWd!wMiOaf@eON zAq2kVxm)vii<{~h8W!sE4C(-CW*g82peCiqK&4v!>pRLAtO&UOhp8Er3WIe!0?6KT z+OC;vhk=a4`H~+E?+m=-(5z`8u(Wc+E(Vhl03DO#{5KLM)pUbI9C5Qtd?AxoqhcO_ znJ=q{2V!AdZh3-E#B>OPsizUCW`j;ZYHr#U&8M5&Fc$Hm#)%``Oek>>SN?Iw^JD$MuS}J`6 z?lSixU{Jr6y@SQHB1Qm%IU=n}(~6BIFy-sF`f@{)2>IIt#hMtP3#o7A)7FDhoBEdF za~OpeROhpE3lpKhkTwM`OSn_X{(4lZToHM4v6^_s4Pq9naKI$`VYZj>&cUm0nrL>h zyGfMBLn?891IA7(U%E8L>j-e6t~a-*3A4vz($#cT>X|332eLug*o=8m?eG6AXKJ>_ zsIn|vl)1){Xdf^q5}NE;_l;m}OrCE1OSgzhp{-{PI9fTAL5my{jd z=s5%OE(Zpn_;-VxvN&v%O`1pdg4PDRCrO>ofxK`-RN*@BhpUylH>x{cyAQ;bN+6Dq zt8k&{8$Q@_u2||{^LqfrUH6WRULlt^87j3>*bn z&RsTBDHIJJ38++sH2aA!BLw^1i#tO`TdQv4K1}z~B!$C}AXcP}24UWKP0fl_m=g_4 z2+AZ2kUBU`tIc8{h`NesV+i5cv6)*N{PVSbFc1s?=W-B(ehllE&7tv z$gQ+TLQ*KQFS?Jfow!4VIm|klBGt>ydfA;1XzSN2N!^siNDTXtu_@{vTp{th&a6=x`dBmpQUE7nn$0lUzYB~Ze4L5-I)({hx zYA8*?M?30!yJGqsh=@=Da=I*-;NpG~e#+SYxnF9M{Ap!EDA}b0r!xHGztLt4w|a=b zD)2vu#$<*48U+oyyNeSHk`C_-w0enCzs0$!HWSsqk8yZ>!}{@y%o#j{;OHqr*v=;e zY2LHBk`5BpgX3M`rOa$Ooq$l=f^aKwj>5WX{T|IBCPP0MUk9RP zCD#OsNa{b3AreglI3Txzzv2|x+5R_Btp@^-1#9mG8(q67Or?@k`L%8m?)ck3x*Y$B z_n$(f+S_X9S@c<@uV78h(`tUYA$|=|)tavW0I{=ovaP`7Fil?<+GRFzAJiz_nUGIe zP}h@A@v^gA-PAf?PIY#wRmP8Sn6yw`q}SjH2+cU+>u{auo?%D~0#=8rEWbEZ=;?Oy zG$n->y+6tg4mqi3NOQGYkt7G~wKj^OG10vMUk;RUVl>hExd)B<7cM=WT{k@-(oi!3 zXP9hpy*6293+{^D-5++lt_DW$8Q2DD^0MV>9RU=-0>J#mpgH#fo7Kt~?_a0zZ&fD{ zl)AYuy-(F`U?XL*C>z_gE~Wg_kMym#{@w9+0=6c_k*X>f(`ekFQpO3PjtoIp7hCJc zp0OMZy8c4ZNUfnY?9f;3T+eqo^qZz9?4fzxB!;#Co z;m-3q&?};b>D+KruZ^BlMS1_}QSNGaC&kfu6uxcN%wOk}Pmn){O?|p*omPLX(*z>~ zNn8kyYD>3w$*v`qD9H}6zIeC0V8oeDSrb-jsYdh+@VEj!oi803iEpX2zf$Z2;EWzK zisSnU5Sb*v>ms57{FoNuPfbnD%S=witl4T$_G?9EOpX>izZp3q_NGU;QSJHh_BRpu`g+%@9WXL^ z1Hqg+jK!jKMBL8q%xv&OjK%HHA5ijvhV!e#4h*w?cQgR6KOUYyEHv{MB_AUSQGRz5 z9VB;;Y>>nM2qh;U(SbvwGtv)bvgLy8wr^Y7empHJQajHKbD|qI`dz}8QP^N=7dp}W z2O(Fw_T`X1YS`=e13Y(afHtxvq=Z*i^jk4c;cn-B>zK7Zmt(lrO}Pq*lG0hHA30Ao zPl>-98TI#=_AgtwC;p8kWxOwW3;3-21|UdBrNly}%W)t~v!3&MUl@nb><^4zwX&MN z6hVZ@h97>`eUbTHX?B;^UqW{#SzlV?D^#TfomLXZF>07m>%-Raef#$Icv~qtNa!_i zN3)!VI5>N|?jr^bl92NCa45@fkd#5NXrWe9>x8{yTC?QoCUO}c&+g92Woxs;d)pJO z$gC4i2gnV!aqFo>`!RoU2T3o{IYsNf2fUki92vzQ{C`N}7tgHYC~-wZ7oRsWqQVqF zIv13)A+Oz|g=stHiM2nUF`uzFF>eSx2meafVVsLD?QnE#WR3bW0W( z3+%nHXic=F?=4I@_zI$CZ#Ki@tb=zADk*ws3SCA~9aUc9x*DGQHuQU5u4H&)V@8-# zNSJMw13n<8?(~f!NZQR2|C{33mVZud{hgn3#$IIcp_tP$sxd_7LS)4QsO~s3(M=Ne zr!eWDx?v(Y!G(n}$cOW_WM@M|+byrpafqsWnNmBk=AHfihZ{-Xe=t#6CM@kAA5XwC z+7S4l$AjFn`F%3AJC(dZbvI0Bz<4qU7)UrUaMhPnCY%6SWu5Z+FvUKOEmSfB(w~L< z7ekQ=+yg7eWHlS)WGF+WyQ${ z*@<6NHaf4fp`Tq?%)s;C5|A&Q(&~ShAKCq5xDfvm-hnx}nsAZk&7K(Lt%V*1BlxPB zwEepaF%Vq6n`+%>c2^232xro@@1qGZ_St45z+|tLI;QUD>XEY+sLP?bf^QKB?@i)y zX71U3k8)wLAnUeHR^sYlz>-lVQF`jzjDm<(>w-s4hq9H#_+AyUY88WzQ;+FjVVcdI zOHT8yOz2r|(}=gi!tk6~(tu^-(d7ZTO>o0ez@H%to3zc3lY<1y2#I+LH%dlD zd~19>qqWl(h1o7UuEHyIyL_Kphqn_>y^>=$a>`YwaU-VMoFsL_0?h^5j0J`+)R|%V4``{>1WQ zXlet0^HDG)dPoOb=q#(^Zv5A^T3j1%_dfYbl?UDfKj44rl=O*C4J zQaai?L_MJX@TddUEG$^Gz8rJ@nZQ_c@uwVt0a3y_Q7h1Z{A!vNM&N=&A*8LGK-kk- zYqDBAh)v2m2lCMT0oN~|x`d)Kh8BsEt}EcSGbL^BrvINi6p!4XlC{=2?n^cXG5m4( z$&R#b`e(C5dnQCgD(Mu#84o`gP1}I;wK5N#<#86S|;)@fJ`Xk6Y+7}bls)lZ}X`A9w?va(Agw-vybV!^eovf7pK|J?lB6$ny_ zw;vrE$h36ZZFgyPA$#6vOJ6ERPt4*JavWLUEpjt#pq4ybM2?956ToMGR`k-!YDvoM z%?rXgkRJ@OD2gBESHV^g0a3V2S!ZjrK`(MJ^){``IM^&I>#TPW9-vkZKKL-$@6TAS z8Rv1L)b!049XkZrZ0iKzE36K{A}YOHKcy@iaHYWy_3JSm4K!_OT!VZBTf ztuy=Vr6i!5Fp9xj+T)65@1orZbzzTHMer{C_16I7F2;d1qV%0Zi{T0Rr)PKPquaY- z80+6Zke?D$6sK~>b+e!OA;~oeQ+)q?p#tw3nsm8P=_i=1b@Om|{ymO`e1%+&NLBN0 z;QDP>s^fs675?dAo|nZskogY=w%%3Qvy6^!iPe*mA{KO5qm+fIQN&cHW`5xa=ep+? zflBSp7gH3D)(}UcSkaLy_D~gNC0}lSZ1v0-ZD?|@$`&TDTC!W{K*<#h zGkCJvWJOWut4sN(9LO(nN%&Sn+%hR+xe|^TBPEAV9>J%Oh|eMDi1^qj=vZMYSvc8Q zsS8yB;F?}5hh|N#7O3xL1GL z#ijAu=PmkvF%oQ-_jZD;b8aW%kAweO1&lxA9M2K7_{jH8u;j{S1?3rGTnymoTbfct zG1jz5qO*PoAMC~Dzi z%GX#)LI$L-!=_tFDLmV`kKZ)%balq)5KuuMyI@I$$kj?4erVMiiF#^Y9;5O!e2Cm8 zA^)=*+}A!xO^1&4J+9cxA>WuRfZ^cZ<71=Mgwbmm+}%E8!v&x8aB`#aCF7Ubd-+bH z5ZsiQ+E~&A>(N%S{A!}Hi8TM6{(g@F#k*&zC2<)f(p_Jt_NP)s&*tiBrmZyA7!bIjj5!_8GpHL?CdaGK67~BoB3dGGQ%p zwwPp8#s4jx(m$w7#a1qg5N$d`!eQoQ%`AH%aQl#XZ@)~bcVGT$FaR(-8=>;8uD7K9hi2-PVhc{vM? zk5D8unqp5A=>-wUd&Qsmz<>uTJ+i+!7WrbD#D&$#x02Yz^}IeJ_B=na<2-#jFWzmL zWU>D(5n)$(>R>iTzlQe-AKZ>A=$YiI$@ZiNjc3zwX-xLY1W4ek<8O%O|6R4;~4 zhZZ&5j6%C*u?|1$q68~qf1kZW(z+dzE%A_Nx(3zWHzb$m$$)f`gFK?=(40 zq_?Qtbgve=qDBz`!JhjmhzZm;QXq1yMyAvb4Z`H50FeSMXT!th zX2vjxcbp|$5R~-#b73xVsnEJmLnI1uC2{mFg>^Rx)aUbLcpIKm+(!sZj)GqYX3^)O zO1MlT6^_N1p-2aVxdKCzU?;M(TaC2@lRQ-I5hE=6?;gwbO9sls(<$^KL$M*5S-a^L zur~%ySsI0uo^`*5O!)mNw4FdYV!Kk5cI*hoWKs*Md^}_>l6KiypOJ7(qlbom{oDc# zxvjC1fL+f9h=!|RWiGA9EZ0a_2~ophl@RT#+R3{NvJQgV7N?#ANVbokB`#=rL4Hq< z72=t1zphF#Jnh(*LN69N@BfNf(P-dtXC%Cf9EqOy+Db@$(8-Z>_rQ}vO{#S~klyCT z77vxf4IR9}g&|r++5E-79l><7Nb#bKmdI}CQ6K+3%SRL2&*k_!y0=_`<}kJ_6h-jp z8L$no2F76cQ3Y#XT8u^yq=exx{q{H2ty3T!jSsWL=v$` z|3n>%c5q^U*dZQif@CgD2di4Ty^L?*i_y;k{>Rup2cH6}5=E#FC1^B_hcm*hu_5U7 z#)!ac=}acotOpz%Awx`Spz19TJo32122adZ>fz5{(3S6nG{eHpfomh>n zWG8wbMA@4smvB!h(YCW#J3-O;sCSit+ih=`#&oc+#KY-67B6(rIHkG@-jAbY8zT&{ zW>;<|UlY33e1|eoj6(CPX+p0IM{OAQrQluKk}y(){$8f^f<=Q&nve_yMKVKS zb1laDc|Qz-P1CZSpY&K_ZH0!^X)c3C(Nm})7BPp(vF=Z#;WYXXgOjJ~6nZBId%;V? zdqH-A_79ZZXH0gHiX5D?8lbU`V9D=Z>XLSU;P7%hcVA}e+}rK(a&0#P&QEkNLaHcy zk>dJWgbePPnb9`~skS;Q7B5eywC^vYST2EVJ&Qd;P2(}2F?DoB@&rs`(O>T(L=%UA zbpvv6UH|CgE^&I3Xf`72(caqx!AZgFC3DH4a*x4wAi%4jzFD4wxwZF}*Z0&U3 zZc5lipTo2@>c?YtOCg%4GeO{8wa8VKq^=*jgWGQH^&k1qHow2QGu320-$6Wn8qez7 z7A!^hI+c)_AJ9`C4#CPAAMbOOl3>PUk;gDT&*lEwfH2NO$6+*7LhGk|FyLslY{Dxu z`an_U5(OTfQnxylD9jTXlGadfX5^>WBW#Mq-nQ*1gh2Ses};kGr_jb?V9`4+n$524 zb2_8mr6-RpB~r~+xU!3h@cGe8f@%(9|3$I9!nG9)uSW&>Q^vjoQF9nqftbL#E;zlj`WEP@M&c|6fi44OUM3Y0G;5>M>xA(E!kN<{UTF6 z#2;*DSl(T~TwIa@IgR)32; zbB_A0Jc;6O_mVwS;_pe7I63Q~WPRiPi+N@xyGUwyh$YUtt#y5lv`D}IRxUo&7T<^# z-I|_DDBz(47`)9`J=zBi0mSeaR6+b;=WR0BXg`X+(OoS5T9$Dy- z=I01_RUPC`vmbe7B?mY0ISqibY?DBqFG`M1{$KeI7I{axKcq-Ppn7ZAE!PSg~UccsH)`MJ{uQw61>DkiKjnXEI4#$m`tl+Ns8C zcX1t8{Bf=CRXh%Q7CNG~pZ2550zaiL&>!7weNOl$=F3>AMYxP1F zj~=wQ+O>WFisw~j`sdvM_jyU%I~ZTQU6KWacS$qMlgX0GPH%*Uub(BV;Ah zu_79hHGZ&L?JCz@S!Jb(UeSk()`5{7Nqj$9k@LR;r2QeK)lVZ@$|AZ2J*%V+bDRT1&s<~f|6 zr<)}4IiMn0!=i(dc8odPkoidRHrBY}rvOcSWXMurm}x#BCA=DU?D`{YTLknU_Wjo| z{HqsuZbT{l`q+D>2TQ$yh+cYCTK`0O=Wj08s=k=NdN#pJF8Ir39vwBoRB8`4z%o4E zjB@MskSU*yP)uH9dUH1hS&qIdUh{g{Q0zxLb#;!W!3=s7o^3`pOkUushxwBzDfNXJ zW~=x>iczEEU02wRc#P+l?>dtj?o$s!W1pxV+CWXf!`go_zfBSPPD;Ux0fR_e_U&c{Hd=yWIw+mJZk(#W{if3EqAH=^W zg9{~@B`$(WCSNUqJcK;xJS#94k!g8zCTiTfw}BF;abLI9LsgbR_v8Mu4~3QBY<8nY zt%nUe+ctu%s1Z;kLKVED-p+_4iOmczIm^BOw`ymiBdB==obYs!>3Tm=r^r%217YWL zsu0w-^4&up9l<073;d@fz4kj%`Jd9Tu4XTE4~9excQ!NvRGY!UWsJ7(D)E6c9h0Hb zro2gZt-ma2X{Yu15KH+V(a6q5wtE~9Fm1F5!hI<({xt)GDuO|Is{49At~ z!2FiXsDNntWgy8nS29q|qvdI7} z-?ML9K%#Rzd?gk%L5n40=S!z@-x97@hqK_}a#FjKvT%}pjSBom14;zTm^C9g{Srb# z!F0IEb?ilp$kCDJS~*KuLdcm3J1_;N+rHesY!fwPH;R@AbO z+rW}eVf`ztzsby0=d=8|l|(m+7W^Cz=8lFrr;t?EAfLWQ>({;Oz21Y)_(-HfJTdff~DmT&$On90bt|{(ql} zO|%H(5Te!ati$J7V_X~-IvtD%T+h1ZYBfYM`7m^><1q|PML7Mly9%tm8^sv>!0&m# zEBTMp&uK8?A3tLioVagYwZRwRx_kDkU7gYfw`-7-FQHo~sKncU`Saa-)91J~tM;|i zqTR@MRsE{6jS?!6f%En^3400PO!pHYW^k<*j8LWuwu;9wU;mk0^KQOf3~t%SB6klv z=W%c*Faa?GpN&057qt!c`lQcoH{PBrxC1`yD`BAHlY}DEBW5>A+^+3xVcIm9sE6Kk z$w-;FD+)_w%o@C}TkMIY(n_Ko78Ou(LE1+p!A6qzqkY$)5V1Nmce{TpV_oKAxpDh& z?kBn|KW(}hX@ui*Ow?r)Dm(i@V9w#o9#%aorMm67L)lgB1hrP1eK6ua`bBt zEOz1wg)dGZZ`uSg*UK7P=%DBC(x7_3AX|MlA3~6wgo6Xaz5#int@xEFiB{U;=sT}_ zq{9Iwh;Xd!u8p@@t&;`B&H5LFW-~JIwHZq>78hxLm?Md8$Cg>sSIhN%39Hy zQj3!A_U%CmF|-$H@>E2%y0g5GJ5(~R!k}oLSonle@Dj0L>H2$^I+q)LuDlVIZ&Q%; zswV2chCz(#R5EN9_LIU;WJrYksv(THv zomW3t#gH!5rNFkJFe;0BZ*&S~cy!PAu--!~9$9B_!m)D~qU zcrP``e*Rf}AyP*#bprs&55^2D>AwwT0^pq*XNwyqH6&=1;{+#D}+D zzt?%%eJ1!U+Io#Xn0pYkK)JV<+Vmd%j{1=+#Whd^k# z4a1NHmW(P5JHXe%w{)>J_u}#T<4{VYS{JW{)JhVjC=7SM-PwrZtd{FZuWpIQ&pqm? zKY{u_h+me6)R7C*X22ot*OpHqFAbka@;M+p^3E*bZd@-UL*S@eURun%D`C?WO>WVEoX|;RzV1!2%pS-Hp=I7GS;YcgyN3BGigpE!LVujp*Ri)Yg>(~CNkXNnAJOFC{ z{vPKw&~&nQ_xj-Spr*(1Z95NJDgRl`fE41RAT8YwY@ROG9LU+(F#w4$#zI##0FUh7 z*dPXCfai%IfZ!J$2ghuNnPoChfW+_l7H6SS^IB&eSnyv0^35wqZdYu+7o@PeE#&Vd zpfffaip1)Fv9!Q{{2ddhsj+rA|A;As2?ImfPL8(J}tGFdAUd#(tHh-!sFN8ZE>D~^E_d$3g;E9A zHHqdqIq4&h#G>-4kM#p?$rv~tJ$w>YErc%qwZ3n~IiSS6(Zg~iSoj#YUF~JiWrmL%AQ4gNNgER$&k3$UzO19)pEn za+x$D^=;Ss^Lkzjl&Fmps1AVko9p{TD${+B-%CKfz5uP~&5T3pbDt>r*1(>zx6?WC z(@1o{=4gVXg2Kqd^+AXc7F_+No2SK3;hl^Z2T&`m(JTPgLXJJaOjvr8o;V-Q^yTa7 z#glJMpucrY{n423kjcoXFMXj-con|)S0b=7GdH}CT2fo)m9ZwT==rz%P~s}ke~R1h zGu>Nar*O}l8E|;mz+J$=F%BKDs!nPS)}q{u5$jJuqiuKo6LZjGf>$`UqwuSrm3}4w zEZ2$^arm7^bR>Je4e7U8?W$7K_u)r?0Nb~FLM-|jh@@)`;ZpkX zl3Rg`5=FAffoDP!%~TO`hlJIVPYHw`U*YOZq(>Lz&bMrrx;BK9Mi=z=WL+MT2UB=H z+#}SpOD`5x>%i|%gs>cVUZXge*a`Y4x3Ya!3G42-P5$z5K=MM&9L3m12h_IjOBC{k z0g+UA!$};j4_Kc`!1sZQxxMx9Zp`y^)vibEhjdEtZr5@6*)uRyn__~xjSC44-2tu$ z@%45Wml5E;7}4`DM90J&)D3AG;k4VBjEf=U0@c;k*&7^73Dff}G3&Mup1*HWp~d{_ zd>CI%5)nvDOe`rQvwOTzrOl~J~4gG=vM^%SGO~ruV25C ze)^Qy@y_a4jQsyF_E%ALby2$}io3h(LJ}+_A-H>RcZcBaZVPt^lHd{`xVyVcg1fux z!fWRHcdK2s+d1u=Tyl|%Ima4vjNYH;?Ns%*_xF;<#x&~X+P`=!LRNf%e+fT-qR7a| ze70Ljqnu=gNi6-8so))hPWq+q_2ucIDKIcl69AuN7bq{698q!p-Jjl-NkM-=joV>( zPU<6?oq`VUB#F$C5ngb#LiEBsjB&yrL7uyqH6gt3Rgh`z8p}z&ektK+WJr zb*e=IkRdemN`VX4&^&~z2Ojp2&o%{i%Qg7Gp{2{dpHI)g=_y9$R@5O4)knL2t4F`- zm|ag9jplt%CIe|vFtP{cg7a?K;tzRh#c9&SAqcTn$9$WZ*8S%m#IE)@AsZVvc>pD_N33e zGHgyo$Hv+7Ro|Vk8c+x%k2{^9l(^E(^u$?C2yf9KhwbcrHU7>?nkoiU^KrT7HC9Wp z5G{^Pf&iSnus%Uqbq*g9pLaewdhoXyz9K{mRlGHbYVSlC?RZ(3E459;`a`LUC2Pqy zgZ(y7oeho5`4MA1DDgA*7 z8*OK1G*qjd27V7AlXSGSu>Q}Nh}pQa=7i9PekwXYbGS zMQxvP9sGoVc}rw&J!Qt-&yrHkZmXuk(jtcPAqyEoT6*tVOMUxC4lHc?^y+J~(-Xt$ z*uMA~-_O!s&8j+<8*5xVZJ^HzT85+?_gKDXdn%7oL%1ra^I`nhshf zZrk>uEdYuGjq>2Ew78#7+_$=&M!vn?cUDzbZ^Dpi&73Y&i_WJS!WCFM zIyr4g8yyfKCxA|-8(!OrUjg-N1wMmW@OKt7ne^C7lOyeVr^h7?g`i(F5X*S!`}MoX zEimb4J|f^oFP9w{*ik6sqg*6U?sLEDzS0wahg_3a;AwgPzxGF)aB$Uq?2P$^;Z(ya zF@Bhs(1-+S>XtRtRDpn;c;7gZW{bA*RGKiOI-ftxPG^+QM>izA%-M=oyi~SbrNoIN zw)cO?FZs^axk38KN`p7F)(sLd*u+OcU74lma3w%Fsju)+nA?rW=O>5c#U(jURJXH@ zY|RaAsSpL{hfnC#gAI;GagXo4-L{FHgBvQxNRnpZ6~7s}y>9&V&iToOQ=L13aDTO) z;}OVe#9FM}9(l235TcE4)%}*ydC>+}Zep52xW$HWd2T?I-nkxhsCaiaA+8YY5!Ebo zW6bR7O%)i=j0j{7_2es?WhJ}#0v~PV8W1780bYKY-R%fa(?Ah#ecsXfiCE_57n>4e zg}R?WiD!Pp@ns;ziT;A~(47MQLQ(P^Jy zbYqtC`)-8A&AF$a$a+!BK>vryI+TfdOM1Kt&;z0tjGyxsn&0b@^&tkcOx8c}2P#6f zqc`kWtm8W_L(^e-js3bmJ~XGz0u|Z0o}|k;GEVPMPh5j^SssXDsbx~|Ed$lulvv8H z9IkmF@s>*KCILxmdFifiR7?oxb|_C?N7ChJ1{qj_^QTE0duPBC;5(8rCL{O%ft1Ei zzfo;6*kt_)+2!$?=H7%y-fm>6VQ+75#VfuH#xk4vO-gER4wv8SMhM7fh43A0zU&O+ zvZDDt9u^^-Dl02PAUia2b6>TUu3V}9wIf0z_WP>t6K2e-_z%(V`@$U1TQQDbFdU*f zdc}nkg!236zfl6Wa(3$n<{3*(MDfTyz6&3toaF$!aOrE&t`svQo*H;*PTGf-cn^Xq za~9S7Fq(j^%T|K|V_DUh z2C9_FV@#Vl+udXgbh$)f$TsaX?edPC*0X~q&FLQ$oJ6dJhSi-IQ6lx@>Fg;%LcduM zN`b-K3u9y{h4@WUbdT~eluNMgd8Z*gdVY@V7kFQoe?}V*Y;o^!#w^w+F1s{oscn+% z!fXF!JWJ7omswo*0C62<*Aj`^!fUEU286)XH1KQX(jXA9P2f%)te*$v!0}2}DpPjV zYxA#^%!@GUOJ4;dlsou$NqQV@1ya5}W&Ym<_dTp~;IFf#VV!UDSWj_mlqwG%lk$=U%#aPP9VyifkBA!*kHa!a72=zshh2Ci=l4>0|a z%8!vNVCpJ$O$9x^xJcY+zdlimBsEyf9})R@orgBi`S$wcJghME7zgeG2*xY!soTSO z>s(JoY9{F#tC_~{pdm8||^=yXGHP%hTdUUI2#p6w38sUlZ=QrEHF`r zqd1At=pbricFM`PN%Z*V%}s0Kd@ zPq%RR44G-Rvcg3Kf6oa~F@Pjy_|FI#mupLvsgO$F9??{{eCsrV1kO)&2A#^v?2a#S;~$#*0j~jf>EMX6$-iEghVDO20eZ zyP%nx@hbztX*hO+CdUQQFE#gEhO0HsR8HoHxAV`#d$rtaRc0%&->(sx8g*LT%6VO8 zV`=?Nh5fC|2h?YBWdf}$<$q*QUS3|)ZMOOju;V%*(=!Pzy}cf)=-%GV0WJb@gxdEm z;m>QWu?K6orXi9d_z^Ckpd*G?i^UqcI9qdTYwIaV8GSJ!ZF8LdI@iL&LN2ErBn5$w zE(eONQovb8Q9~iclN%rUcdYS)Wn98ByVjR4mVf#T^><)=uJ`1E7s70p>Nf3$Z`yNx zao*S44Z$G?;~6*rBTIN>gm9$aJs|f#^Ezxm*#lDwsQjY)OqUo+MQey=C`+mS=i(XA zfppigk#G~P^FmA}o?3IxThF7JeY;*$ z4k?0Q7lVJ5%v9T&IvJm|G;8R1-FDJ?3sBpc#xJ9&P({!?@cuZmDLzr}9N)|~9F0f@ zc4~o`Y%yvc-W-x6589iYOb*#px(@PVENSSjl-Ga>^M{2tiP@tEwdvaWMrL@aljQp-35i$6E zhbYooau{*QSneq^udGWzJskx^u@MYsPPXy^@ihIK@Yg&_zb4Z-1pE=9w)4|4jdC5m zXP_~Minutq!2`q&ssviK)ET+47I0aGn$ey4W%aG=>-suCD!)>wZyH{ZX5|9v>(`4BM&a z9e*SIh^MFdL>*=xZ^Jb^G6r2~Hzk3BmXOPNy~U?TtL^M2v8}M-OQuaB1@EEM-BkxC0xumJDWd4w&Qdmq#sR@ z8fR#g;uD<}*8x37m9cslI6hSavo1R1u8ST|wm^D_wWF`e`MBh zYpnW(7n{`RPWH~)F`0)F!-eIgl%I{m7{?YppK?~!-QflCOzL1g?IoSXIgg%G{0V3+ zQfzA+sen(a>jnki=rOzJm_T-`x7&8KnFybJ6XSe9ZWcx_sWANO#pYI~{Dt*uWMzcY zA4dJk3?5*prKZ4Wh^io%hg_m*5V^0~JC8q0CGT9!WaRlBaH3axulhT{cCe8; z*_Z@nA`^FrLjgxHAAw);o`Do3^XgT)U4tm5L0|(7;>x~A2{lU zCu}Dl-XOO!v89|Wse=WQ2o5WnYI$fjH-KEh2`^EBnwRf!hR z{A00eqU?H6wB`%1=}i*T$aMhGBniXh9+>GRI!m=JnHZxu-?=y5dCxZKbGS|3BhSC6 zg*&ash5QZ8*ZqNmu)ZA>l$fpPw!w2^Z&L&OmI~1tQa*KK|3$edHy+T-7q?C%l-i)R z?!-46&8tYjmH=vf{WecFyYF@R@*shEeu<5g?}#3)y}b)=22$a|&5$rJ<|14nkFhv+gCELEt|=P2!+4 z<1PeI@2JbsfXw&`zkFth4CeB%~VaT7tHK~K6TtpL}pYYLnxa7(x)`sns zNyYw_#f)ZCZWG&u9@UH`nU|rSqjGl~GNd`l%p{~Px#%@K!Zve>B|?rtt-t+M4!lGO zb{c{L3Lp|hrBO1sA#vg<{n-j(Zb>pbV#~Dr04(#EDbzA5pbOL`cqhCa zG84{R;V?xeEWiTZd~(XDz7IxbZnq1M`}zxX&B3~=?|NDKIsZnIn#mAKo-79Ua7?1k z_u3k^n_C9bzfBbpc!wR>+C(p!jcllfpse61r2pU)tc5iXV@4%^uh!FXRp?Nm`olbi zF4bB|XSfyiMWEql+Qm7ZR$^p_b7hqANo#vs5Hag~GHdsP1i)$8FHyv4l=U{c|1lH6 z($fD8)KbD6x+`t8{?&gY{1-2+7O+Ov+C%s zwqKKY2CVY^nV3Q@c|n7E*TzppKt^McnVez=mKGd=`CCV2iOoP|>c=w#ip4zK{eza? z$t*F8cv?I?-tHplPk{S47q08Hecnek^TOqBK$j4CqLbicK$}y|ZelV)Gjq#m;Lelcz>XvklP)yf!IH=dfBB`&79*mQGESV7 z5V?|Hu-I0Klwz8Vkp7UDu)l)W;tc^nn46FK2N_3s=?h8kVy#<%w(}Q`;cfcU7y_Q3(m)sIc#<85x1J$7EPf+Zc4HoRFw5T9D!Y_=azSIANDsgMD@kp8grrM! zORXGsFS-=|Ds?(bj0{+Gzm-HmoDD+8=MaW#I{G8K z%Tyh0^sdr5tlEa_y73DXz$m!qsDZby5(7#V~INv zt*ejQrMTu7Pnd5>)lg=hyZ>KciBu0tc%h(=uU3uH7qqDcsZ-Wm&8DO_%&VIRNnqMr z?cTF!lnQE%%?*;@@??2{A1TYYrrorx)Ish}2RBmP>*8u89D8xLMkg~h66!tPvY1cQrDjuVl^+Nh}xsoY;vs3Ap7yg3lq|>lkED^Yg6q|1otPod$v`~xi?tc5h zt8YC*0^kynG;6Wg6VAfrlpGV{?#uNkg~K>$EtXMMHN`fv>cg9HQ2GyY73-|f*MmtD zGAQ!(pBUbSU(^fd>=J-WZ9GmorTlq&Um4u5qMNCCHE8M5EmCl$(sUaA$wxHav$efG z8v^AjDX$C=pT8RpD;y1E!L82#!_Vv=)&tI&hwn!ilT~RYG%xhp(2C@B=cbqGW{6<* z7!cIE{?A>qtuHV)gjyj+{kcpUZi0;Qe^SK9t>pFosY-r z%^y>$I@LlOEYZSzM;#fK1O`Q@v@n!K5PHX^pYEPJUUhn6Ww!Axs;HVs;WMrGx zokW{wS9ZB;R7i6gYF+*Mx6%JEO9;>vy`?ur|CvB*_-h)_iZMLYNLnw8nU}lBg0bV8 zvH35O&V-wvyiW~H4h!7~3!}TdeDy>skKk~#)mgC9H+mblS>cak!??-6L>t}1NFnjr z>BCYczYnfC$$Cy#qiX+5S*i_d&7|HvNSTJT+{QY#(7CO`Qzv54#yQC-GoN=bMG>JP z>Zu%8Y=H@uY@$wpYaRRSCz~sclXtK{VYF6+o(P6$eirel!u{ThP<(GaA9h~nc;w-V ziGzi|6@4M)4q8`1jTAfht>?r1^#hKJ7w1+bSg89f%uQDO?>8yK>j-)EqcS*W*yi_? z&Vuy78xAUi$`r`}?-L5MP7Z4~?!$n;hHl#}4$HN8jXky(%(JV8t2fPLHt>VNOzhS@ zVa4jZv;FosF9(9$vcv=@=i3Q%Ukz^&%^Zhj@Ltu%nlx$QIi&TcTTE4IFmYZOMH^iE zzb@!cz)=z~g*Mp#fE1Y-9y*0r%n~)i8>fKo3pnk(@ASMJq44{C6;XY*uU*mJu&C{Zn8EdoFFr6tK2V++!Pu*XFxfaAHyFX9@Z% zQDeBRsdC~Mem%R0q%v(c^qYoFbtN9Ode_58tM$ zPr03{eX+wbG4u00#W#6&2(u@%ZhFf8*rOzTxS?+*wTfv<{uIB|$dstfA*$Sqz{Od| z_9t1=^W`rbVL@r^W>4-c*V`cxh|`)G4|PoghX{m#@H4%)SsIpcUrwlOmOev6drKmX z<4kOEJ7e9^qt-+xMOM5rb{xDuyP}vYh3)e3qlkiuiH~y0XLq@Va!urt_upE$yg#!| z`_Lu&i!u=<9Y{(GkTI$CK&z;fG3gNe^T(QS=$aOE!+a6N*T*^0&8E&ZTA15PIlIaq zS-?Rlpj3c{MT8CAj*Wr!d)!2f@%g9h>Hoj|oZ)48H>2Zrs#9WGTvp*!2d`sfyK#4` z2MjV&-Xxtz?k36Ji8+J6Uy=r2|7xRJT^gRAWQr{A!`2(-?Z^Ij{(zmUuYO@S-6Iq} z@(y&yJyRURk~}t5ty#U#3^SPe&U&grtl@E9IGxqDD&JGZ19<9Py*e}VzDzg?!m;5I zw>x&7-(xr}?nzv~8O}}Ece}u4E}A%$`&}1_HhccIGnlU9o>Z1OYpcFoLyEf+>H)+~ zl5Ek9$H~pVWyC%t9HHxTyL?ZTSG^rtFW#<_DNC*$Y#cBk0Toy3Ve4H&uUsbU*(kMzYl8r+kyth5{m!{GqYC&eRHM zVbwO=KAL%4kNBS?r0?`To3D#Lx?kH)v>7x@DUH1|Af7*xCfs-i<%=rtEp#BRfBQDV z6;QKd{r|K_c5EdKX1ok8q`c7PH<)x6c$+Og*~Dgt$Sk;KXxE^hu^(PYdG?gU@GEB@ zJ~oN3vl9hVngC(9pCDfdWk0hP4majExu&as_rmA1n(K$IwIW(Bi8#xemO*buw_f(q zuGrZ68)2c@N$-}u7&An=iR8``R4jy;>3~nZjl6DYvI+QgG&nw*FGj(~$Sd_ECBIE- zVmT~Bo19-S)@unOyI(dNy`XU_LNBY8DL_}3zUFeFZ{0D^L}mzurc`ZgPiU@2`CdGco6@QCthto4pXrAfneiU z3^de^e1@3Sga4G-@Cg_c<>u|7|lD`9P4QF7K| zua{pee>h;Yj3oufD|&eKCY15;L)hn1!aK18(;PU(9+$o$>pp;;Mu-*|Cv&2H@Zj!e zy;pN}mFGC(b2qq7rxB0r%F}|41`dJVDU%Z5FZp)gNQ{jqu1-3o8}k9*Rm#>=(z$dU zi`s~_1rm_af{ulM1hX6edi26`+lpH5|8GvQD74_!r)phuB|RgjSobtQd}kRHPler;GpejULH+zm(zJod?_(CAVNMS`Ee~}>aV&Pq*^7#lWhnn0 zBBB-e(0%rv152f}8bC{S$RlAPhFdPr@rjXwelKdY%R@9Wum5}i5DxW!F2I*Wy(uq) zD(AS+c4sa^=uB9)D-VB{72s-7VUrFgtg{TYka4vsEkwq@ZD^kFh&mCfV}n2$W(@uK z*&bsyU`;DXLqK>D{O&T?c#(`kqZELu5pG3gQV7=8pSudu*u5}MW6%*fyFQJ;ChR|Z z`Uv8LN@=22FTrOI$mKqIFmEaQ=FZ?A;IU{^E%g5}tjKjk#F`uc7duo z$PHZH2hB(V7Ho>Mk#fk*)1$3!9>G%`4ee9(MeXj(J8YTwQ$GsA_?5Vav>%pIQ+=Q@ zrV>2-ksm3z6>@%mYD{F{3{Y?;Hf@C%$MC7XLqmk?`2Q8KX2($zK9^x8E>f;V%vvLf zLrZrH8Kb%rS7^tG4$drVxh_6Qf#8vmXA<_*j4ZVSb#gnHU<`e?jnfn-@KV0jV`;QT zD0U^b(GZk7KJ{WZZEVE~`oHPXF8+JS1pkM_(ukgrbL$sBT>E-;S|{t8hxr)Y9`#95 z*T}mkis6Clix&c!+B>fFM>KiAea&>{MnfJ6U$S=GjSUjy`Kn_+S{7uL5<5LKaH&SW z|DjFRi~3?a>YQrX*mrs7nYhxvf)=L5-hxwVQW+s2<j}y(pRHvs%aMb zk>FN-#O$SC>4?Z)flPacchWhu-E2D$42s6dqAYkAjjzrHrm;2d8?6@ec6d1!j?xhgUjz-qr>oud2&pYO7TZW&x*x@sTsHILNqzpBhYhb<%;qus @;1K0sbEy6=Mo~#UFJ3 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%0A?R3v2hPZc79|%*h22FC> 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ⅇ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

aD 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%0Aoa_Mh7^TZ&5oyff^IfL`#vW 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

vh!_nMI5j!L10Brk`|5 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 JtoSget_format() == image_format); + VkExtent3D tex_extent = virtual_texture.raw_data_image->get_extent(); + VkDeviceSize image_size = tex_extent.width * tex_extent.height * 4U; + + virtual_texture.width = tex_extent.width; + virtual_texture.height = tex_extent.height; +} + +/** + * @brief Create a dedicated queue (if available) for sparse-binding. + */ +void SparseImage::create_sparse_bind_queue() +{ + const auto &queue_family_properties = device->get_gpu().get_queue_family_properties(); + + uint8_t sparse_queue_family_index = 0xFF; + for (uint32_t i = 0; i < static_cast(queue_family_properties.size()); i++) + { + if ((queue_family_properties[i].queueFlags & VK_QUEUE_TRANSFER_BIT) && (queue_family_properties[i].queueFlags & VK_QUEUE_SPARSE_BINDING_BIT) && !(queue_family_properties[i].queueFlags & VK_QUEUE_GRAPHICS_BIT)) + { + sparse_queue_family_index = i; + break; + } + } + + if (sparse_queue_family_index == 0xFF) + { + sparse_queue_family_index = get_device().get_queue_family_index(VK_QUEUE_SPARSE_BINDING_BIT); + } + vkGetDeviceQueue(get_device().get_handle(), sparse_queue_family_index, 0U, &sparse_queue); +} + +bool SparseImage::prepare(const vkb::ApplicationOptions &options) +{ + if (!ApiVulkanSample::prepare(options)) + { + return false; + } + + load_assets(); + + create_descriptor_set_layout(); + + create_vertex_buffer(); + create_index_buffer(); + create_uniform_buffers(); + + create_sparse_bind_queue(); + create_sparse_texture_image(); + create_texture_sampler(); + + create_descriptor_pool(); + create_descriptor_sets(); + + prepare_pipelines(); + build_command_buffers(); + + update_mvp(); + update_frag_settings(); + + load_least_detailed_level(); + + mesh_data = CalculateMipLevelData(current_mvp_transform, VkExtent2D({static_cast(virtual_texture.width), static_cast(virtual_texture.height)}), VkExtent2D({static_cast(width), static_cast(height)}), num_vertical_blocks, num_horizontal_blocks, virtual_texture.mip_levels); + + next_stage = Stages::Idle; + + prepared = true; + return true; +} + +/** + * @brief Setup the pipeline(s). + */ +void SparseImage::prepare_pipelines() +{ + VkPipelineLayoutCreateInfo layout_info = vkb::initializers::pipeline_layout_create_info(&descriptor_set_layout, 1); + VK_CHECK(vkCreatePipelineLayout(get_device().get_handle(), &layout_info, nullptr, &sample_pipeline_layout)); + + VkPipelineVertexInputStateCreateInfo vertex_input = vkb::initializers::pipeline_vertex_input_state_create_info(); + std::array vertex_input_bindings = {vkb::initializers::vertex_input_binding_description(0, sizeof(SimpleVertex), VK_VERTEX_INPUT_RATE_VERTEX)}; + + std::array vertex_input_attributes = { + vkb::initializers::vertex_input_attribute_description(0U, 0U, VK_FORMAT_R32G32_SFLOAT, offsetof(SimpleVertex, norm)), + vkb::initializers::vertex_input_attribute_description(0U, 1U, VK_FORMAT_R32G32_SFLOAT, offsetof(SimpleVertex, uv))}; + + vertex_input.vertexAttributeDescriptionCount = static_cast(vertex_input_attributes.size()); + vertex_input.pVertexAttributeDescriptions = vertex_input_attributes.data(); + vertex_input.vertexBindingDescriptionCount = static_cast(vertex_input_bindings.size()); + vertex_input.pVertexBindingDescriptions = vertex_input_bindings.data(); + + std::array dynamic_states{VK_DYNAMIC_STATE_VIEWPORT, VK_DYNAMIC_STATE_SCISSOR}; + + VkPipelineInputAssemblyStateCreateInfo input_assembly_state = vkb::initializers::pipeline_input_assembly_state_create_info(VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST, 0U, VK_FALSE); + VkPipelineRasterizationStateCreateInfo rasterization_state = vkb::initializers::pipeline_rasterization_state_create_info(VK_POLYGON_MODE_FILL, VK_CULL_MODE_BACK_BIT, VK_FRONT_FACE_CLOCKWISE); + VkPipelineColorBlendAttachmentState color_blend_attachment_state = vkb::initializers::pipeline_color_blend_attachment_state(VK_COLOR_COMPONENT_R_BIT | VK_COLOR_COMPONENT_G_BIT | VK_COLOR_COMPONENT_B_BIT | VK_COLOR_COMPONENT_A_BIT, VK_FALSE); + VkPipelineColorBlendStateCreateInfo color_blend_state = vkb::initializers::pipeline_color_blend_state_create_info(1U, &color_blend_attachment_state); + VkPipelineViewportStateCreateInfo viewport_state = vkb::initializers::pipeline_viewport_state_create_info(1U, 1U); + VkPipelineDepthStencilStateCreateInfo depth_stencil_state = vkb::initializers::pipeline_depth_stencil_state_create_info(VK_FALSE, VK_FALSE, VK_COMPARE_OP_NEVER); + VkPipelineMultisampleStateCreateInfo multisampling_state = vkb::initializers::pipeline_multisample_state_create_info(VK_SAMPLE_COUNT_1_BIT); + VkPipelineDynamicStateCreateInfo pipeline_dynamic_states = vkb::initializers::pipeline_dynamic_state_create_info(dynamic_states.data(), vkb::to_u32(dynamic_states.size())); + + std::array shader_stages{}; + + shader_stages[0] = load_shader("sparse_image/sparse.vert", VK_SHADER_STAGE_VERTEX_BIT); + shader_stages[1] = load_shader("sparse_image/sparse.frag", VK_SHADER_STAGE_FRAGMENT_BIT); + + VkGraphicsPipelineCreateInfo pipeline_create_info = vkb::initializers::pipeline_create_info(sample_pipeline_layout, render_pass); + pipeline_create_info.stageCount = vkb::to_u32(shader_stages.size()); + pipeline_create_info.pStages = shader_stages.data(); + pipeline_create_info.pVertexInputState = &vertex_input; + pipeline_create_info.pInputAssemblyState = &input_assembly_state; + pipeline_create_info.pRasterizationState = &rasterization_state; + pipeline_create_info.pColorBlendState = &color_blend_state; + pipeline_create_info.pMultisampleState = &multisampling_state; + pipeline_create_info.pViewportState = &viewport_state; + pipeline_create_info.pDepthStencilState = &depth_stencil_state; + pipeline_create_info.pDynamicState = &pipeline_dynamic_states; + + VK_CHECK(vkCreateGraphicsPipelines(get_device().get_handle(), pipeline_cache, 1U, &pipeline_create_info, nullptr, &sample_pipeline)); +} + +/** + * @brief Set camera type, translation speed and camera's initial position. + */ +void SparseImage::setup_camera() +{ + camera.type = vkb::CameraType::FirstPerson; + camera.set_perspective(FOV_DEGREES, static_cast(width) / static_cast(height), 0.1f, 1024.0f); + camera.set_rotation(glm::vec3(0.0f, 0.0f, 0.0f)); + camera.set_translation(glm::vec3(0.0f, 0.0f, -50.0f)); + camera.translation_speed = 20.0f; +} + +/** + * @brief Fill up the information on how the sparse image should be bound and call vkQueueBindSparse. + */ +void SparseImage::bind_sparse_image() +{ + for (size_t page_index = 0U; page_index < virtual_texture.page_table.size(); page_index++) + { + auto &page = virtual_texture.page_table[page_index]; + if (!page.gen_mip_required && page.render_required_set.empty()) + { + virtual_texture.sparse_image_memory_bind[page_index].memory = VK_NULL_HANDLE; + continue; + } + + if (page.valid) + { + continue; + } + + virtual_texture.memory_allocations.get_allocation(page.page_memory_info, page_index); + + virtual_texture.sparse_image_memory_bind[page_index].memory = page.page_memory_info.memory_sector->memory; + virtual_texture.sparse_image_memory_bind[page_index].memoryOffset = page.page_memory_info.offset; + } + + VkBindSparseInfo bind_sparse_info = vkb::initializers::bind_sparse_info(); + bind_sparse_info.bufferBindCount = 0U; + bind_sparse_info.pBufferBinds = nullptr; + + VkSparseImageMemoryBindInfo sparse_image_memory_bind_info{}; + sparse_image_memory_bind_info.image = virtual_texture.texture_image; + sparse_image_memory_bind_info.bindCount = static_cast(virtual_texture.sparse_image_memory_bind.size()); + sparse_image_memory_bind_info.pBinds = virtual_texture.sparse_image_memory_bind.data(); + + bind_sparse_info.imageBindCount = 1U; + bind_sparse_info.pImageBinds = &sparse_image_memory_bind_info; + + bind_sparse_info.signalSemaphoreCount = 1U; + bind_sparse_info.pSignalSemaphores = &bound_semaphore; + bind_sparse_info.waitSemaphoreCount = 1U; + bind_sparse_info.pWaitSemaphores = &submit_semaphore; + + VkFence fence; + VkFenceCreateInfo fence_info{}; + fence_info.sType = VK_STRUCTURE_TYPE_FENCE_CREATE_INFO; + fence_info.flags = VK_FLAGS_NONE; + + VK_CHECK(vkCreateFence(get_device().get_handle(), &fence_info, nullptr, &fence)); + vkQueueBindSparse(sparse_queue, 1U, &bind_sparse_info, fence); + VK_CHECK(vkWaitForFences(get_device().get_handle(), 1, &fence, VK_TRUE, DEFAULT_FENCE_TIMEOUT)); + vkDestroyFence(get_device().get_handle(), fence, nullptr); +} + +/** + * @brief Return information on what mip_level the particular page_index belongs to. + */ +uint8_t SparseImage::get_mip_level(size_t page_index) +{ + uint8_t mip_level = 0xFF; + if (virtual_texture.mip_levels == 1U) + { + return virtual_texture.base_mip_level; + } + + for (uint32_t i = virtual_texture.base_mip_level; i < virtual_texture.mip_levels; i++) + { + if (page_index < (virtual_texture.mip_properties[i].mip_base_page_index + virtual_texture.mip_properties[i].mip_num_pages)) + { + mip_level = i; + break; + } + } + return mip_level; +} + +/** + * @brief Calculate dependencies, fill the required lists and set required flags for the particular BLOCK to be updated on screen. + */ +void SparseImage::process_texture_block(const TextureBlock &texture_block) +{ + std::vector page_indices; + + // Old value calculations and removal from the render required list + page_indices = get_memory_dependency_for_the_block(texture_block.column, texture_block.row, static_cast(texture_block.old_mip_level)); + + for (auto page_index : page_indices) + { + if (!virtual_texture.page_table[page_index].fixed) + { + virtual_texture.page_table[page_index].render_required_set.erase({static_cast(texture_block.old_mip_level), texture_block.column, texture_block.row}); + } + } + page_indices.clear(); + + if (!texture_block.on_screen) + { + return; + } + + // New value calculations and placing into update and render_required lists + page_indices = get_memory_dependency_for_the_block(texture_block.column, texture_block.row, static_cast(texture_block.new_mip_level)); + + for (auto page_index : page_indices) + { + virtual_texture.page_table[page_index].render_required_set.insert({static_cast(texture_block.new_mip_level), texture_block.column, texture_block.row}); + + if (!virtual_texture.page_table[page_index].valid) + { + virtual_texture.update_set.insert(page_index); + + std::vector mipgen_required_vec; + MemPageDescription mem_page_description = get_mem_page_description(page_index); + + mipgen_required_vec.push_back(mem_page_description); + + while (!mipgen_required_vec.empty()) + { + mem_page_description = mipgen_required_vec.back(); + mipgen_required_vec.pop_back(); + + check_mip_page_requirements(mipgen_required_vec, mem_page_description); + } + } + } + page_indices.clear(); +} + +/** + * @brief Fill the MemPageDescription data structure. + */ +SparseImage::MemPageDescription SparseImage::get_mem_page_description(size_t page_index) +{ + MemPageDescription mem_page_description = {}; + uint8_t mip_level = get_mip_level(page_index); + + mem_page_description.mip_level = mip_level; + mem_page_description.x = (page_index - virtual_texture.mip_properties[mip_level].mip_base_page_index) % virtual_texture.mip_properties[mip_level].num_columns; + mem_page_description.y = (page_index - virtual_texture.mip_properties[mip_level].mip_base_page_index) / virtual_texture.mip_properties[mip_level].num_columns; + + return mem_page_description; +} + +/** + * @brief Get the page_index of the particular page based on the MemPageDescription data structure. + */ +size_t SparseImage::get_page_index(MemPageDescription mem_page_desc) +{ + return virtual_texture.mip_properties[mem_page_desc.mip_level].mip_base_page_index + virtual_texture.mip_properties[mem_page_desc.mip_level].num_columns * mem_page_desc.y + mem_page_desc.x; +} + +/** + * @brief Check if all the required resources (memory pages from the more detailed mip level) for the particular memory page to be rendered, are already allocated and valid in the memory. + */ +void SparseImage::check_mip_page_requirements(std::vector &mipgen_required_vec, MemPageDescription mem_page_desc) +{ + if (mem_page_desc.mip_level == 0U) + { + return; + } + + MemPageDescription req_mem_page_desc; + req_mem_page_desc.mip_level = mem_page_desc.mip_level - 1; + for (uint8_t y = 0U; y < 2U; y++) + { + for (uint8_t x = 0U; x < 2U; x++) + { + req_mem_page_desc.x = std::min((mem_page_desc.x * 2U) + x, virtual_texture.mip_properties[req_mem_page_desc.mip_level].num_columns - 1U); + req_mem_page_desc.y = std::min((mem_page_desc.y * 2U) + y, virtual_texture.mip_properties[req_mem_page_desc.mip_level].num_rows - 1U); + + size_t page_index = get_page_index(req_mem_page_desc); + + virtual_texture.page_table[page_index].gen_mip_required = true; + + if (!virtual_texture.page_table[page_index].valid) + { + if (req_mem_page_desc.mip_level > 0U) + { + mipgen_required_vec.push_back(req_mem_page_desc); + } + virtual_texture.update_set.insert(page_index); + } + } + } +} + +/** + * @brief Convert information from BLOCK-based into PAGE-based data. BLOCKS are just the abstraction units described by num_horizontal_blocks and num_vertical_blocks. PAGES are the actually allocated chunks of memory, their size is device-dependent. + */ +std::vector SparseImage::get_memory_dependency_for_the_block(size_t column, size_t row, uint8_t mip_level) +{ + std::vector dependencies; + + double height_on_screen_divider = 1.0 / num_vertical_blocks; + double width_on_screen_divider = 1.0 / num_horizontal_blocks; + + double x_low = width_on_screen_divider * column; + double x_high = width_on_screen_divider * (column + 1U); + + double y_low = height_on_screen_divider * row; + double y_high = height_on_screen_divider * (row + 1U); + + double texel_width = virtual_texture.mip_properties[mip_level].width; + double texel_height = virtual_texture.mip_properties[mip_level].height; + + double in_memory_row_pages = texel_height / virtual_texture.format_properties.imageGranularity.height; + double in_memory_column_pages = texel_width / virtual_texture.format_properties.imageGranularity.width; + + size_t mem_x_low = static_cast(floor(x_low * in_memory_column_pages)); + size_t mem_x_high = static_cast(ceil(x_high * in_memory_column_pages)); + + size_t mem_y_low = static_cast(floor(y_low * in_memory_row_pages)); + size_t mem_y_high = static_cast(ceil(y_high * in_memory_row_pages)); + + for (size_t y = mem_y_low; y < mem_y_high; y++) + { + for (size_t x = mem_x_low; x < mem_x_high; x++) + { + size_t page_index = virtual_texture.mip_properties[mip_level].mip_base_page_index + virtual_texture.mip_properties[mip_level].num_columns * y + x; + dependencies.push_back(page_index); + } + } + return dependencies; +} + +/** + * @brief Compare required and currently present mip_level for each BLOCK. + */ +void SparseImage::compare_mips_table() +{ + virtual_texture.texture_block_update_set.clear(); + + for (size_t y = 0U; y < virtual_texture.current_mip_table.size(); y++) + { + for (size_t x = 0U; x < virtual_texture.current_mip_table[y].size(); x++) + { + if (!virtual_texture.new_mip_table[y][x].on_screen && virtual_texture.current_mip_table[y][x].on_screen) + { + // The particular block is removed from all render_required_set`s in page_table[] entries, because it was previously visible on screen, and is not anymore. + TextureBlock texture_block = {y, x, virtual_texture.current_mip_table[y][x].mip_level, virtual_texture.new_mip_table[y][x].mip_level, false}; + process_texture_block(texture_block); + + virtual_texture.current_mip_table[y][x] = virtual_texture.new_mip_table[y][x]; // These tables are equal in size + update_required = true; + } + else if (virtual_texture.new_mip_table[y][x].on_screen && + (!virtual_texture.current_mip_table[y][x].on_screen || + (static_cast(virtual_texture.new_mip_table[y][x].mip_level) != static_cast(virtual_texture.current_mip_table[y][x].mip_level)))) + { + // The particular block is visible on screen and needs to be updated, because either it wasn't previously visible on screen or the required mip_level has changed. + TextureBlock texture_block = {y, x, virtual_texture.current_mip_table[y][x].mip_level, virtual_texture.new_mip_table[y][x].mip_level, true}; + virtual_texture.texture_block_update_set.insert(texture_block); + update_required = true; + } + } + } +} + +/** + * @brief Update UBO with the MVP data, based on the camera. + */ +void SparseImage::update_mvp() +{ + // Update MVP + new mip block calculations + MVP mvp_ubo = {}; + mvp_ubo.model = glm::mat4(1.0f); + mvp_ubo.view = camera.matrices.view; + mvp_ubo.proj = camera.matrices.perspective; + + mvp_buffer->update(&mvp_ubo, sizeof(mvp_ubo)); + + current_mvp_transform = mvp_ubo.proj * mvp_ubo.view * mvp_ubo.model; +} + +/** + * @brief Build draw-related command buffer(s). + */ +void SparseImage::build_command_buffers() +{ + VkCommandBufferBeginInfo command_buffer_begin_info = vkb::initializers::command_buffer_begin_info(); + + // Clear color and depth values. + VkClearValue clear_values[2]; + clear_values[0].color = {{0.0f, 0.0f, 0.0f, 0.0f}}; + clear_values[1].depthStencil = {0.0f, 0}; + + // Begin the render pass. + VkRenderPassBeginInfo render_pass_begin_info = vkb::initializers::render_pass_begin_info(); + render_pass_begin_info.renderPass = render_pass; + render_pass_begin_info.renderArea.offset.x = 0; + render_pass_begin_info.renderArea.offset.y = 0; + render_pass_begin_info.renderArea.extent.width = width; + render_pass_begin_info.renderArea.extent.height = height; + render_pass_begin_info.clearValueCount = 2U; + render_pass_begin_info.pClearValues = clear_values; + + for (size_t i = 0U; i < draw_cmd_buffers.size(); ++i) + { + auto cmd = draw_cmd_buffers[i]; + + // Begin command buffer. + vkBeginCommandBuffer(cmd, &command_buffer_begin_info); + + // Set framebuffer for this command buffer. + render_pass_begin_info.framebuffer = framebuffers[i]; + // We will add draw commands in the same command buffer. + vkCmdBeginRenderPass(cmd, &render_pass_begin_info, VK_SUBPASS_CONTENTS_INLINE); + + // Bind the graphics pipeline. + vkCmdBindPipeline(cmd, VK_PIPELINE_BIND_POINT_GRAPHICS, sample_pipeline); + + // Set viewport dynamically + VkViewport viewport = vkb::initializers::viewport(static_cast(width), static_cast(height), 0.0f, 1.0f); + vkCmdSetViewport(cmd, 0U, 1U, &viewport); + + // Set scissor dynamically + VkRect2D scissor = vkb::initializers::rect2D(width, height, 0, 0); + vkCmdSetScissor(cmd, 0U, 1U, &scissor); + + vkCmdBindDescriptorSets(draw_cmd_buffers[i], VK_PIPELINE_BIND_POINT_GRAPHICS, sample_pipeline_layout, 0U, 1U, &descriptor_set, 0U, NULL); + + VkDeviceSize offsets[1] = {0}; + vkCmdBindVertexBuffers(draw_cmd_buffers[i], 0U, 1U, &vertex_buffer->get_handle(), offsets); + vkCmdBindIndexBuffer(draw_cmd_buffers[i], index_buffer->get_handle(), 0U, VK_INDEX_TYPE_UINT16); + vkCmdDrawIndexed(draw_cmd_buffers[i], index_count, 1U, 0U, 0U, 0U); + + // Draw user interface. + draw_ui(draw_cmd_buffers[i]); + + // Complete render pass. + vkCmdEndRenderPass(cmd); + + // Complete the command buffer. + VK_CHECK(vkEndCommandBuffer(cmd)); + } +} + +/** + * @brief Run the update process for a number of blocks, described by blocks_to_update_per_cycle. + */ +void SparseImage::process_texture_blocks() +{ + uint8_t block_counter; + block_counter = std::min(blocks_to_update_per_cycle, virtual_texture.texture_block_update_set.size()); + frame_counter_per_transfer++; + + auto it = virtual_texture.texture_block_update_set.begin(); + for (; block_counter > 0U; it++, block_counter--) + { + process_texture_block(*it); + virtual_texture.current_mip_table[(*it).row][(*it).column] = virtual_texture.new_mip_table[(*it).row][(*it).column]; + } + virtual_texture.texture_block_update_set.erase(virtual_texture.texture_block_update_set.begin(), it); +} + +/** + * @brief Bind the image, update all of the required pages by either loading the original data via staging buffer or generating mipmaps. + */ +void SparseImage::update_and_generate() +{ + bind_sparse_image(); + uint8_t current_mip_level = 0xFF; + + std::vector temp_buffer(virtual_texture.page_size); + + size_t level_zero_count = std::count_if( + virtual_texture.update_set.begin(), virtual_texture.update_set.end(), [this](auto page_index) { return get_mip_level(page_index) == 0; }); + size_t level_zero_index = 0; + + std::unique_ptr multi_page_buffer; + if (0 < level_zero_count) + { + multi_page_buffer = std::make_unique(get_device(), level_zero_count * virtual_texture.page_size, VK_BUFFER_USAGE_TRANSFER_SRC_BIT, VMA_MEMORY_USAGE_CPU_TO_GPU, VMA_ALLOCATION_CREATE_MAPPED_BIT); + } + + VkCommandBuffer command_buffer = get_device().create_command_buffer(VK_COMMAND_BUFFER_LEVEL_PRIMARY, true); + + for (auto page_index : virtual_texture.update_set) + { + uint8_t mip_level = get_mip_level(page_index); + + VkImageSubresourceRange subresource_range{}; + + subresource_range.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT; + subresource_range.baseArrayLayer = 0U; + subresource_range.layerCount = 1U; + subresource_range.levelCount = 1U; + + if (current_mip_level != mip_level) + { + if (current_mip_level != 0xFF) + { + subresource_range.baseMipLevel = current_mip_level; + vkb::image_layout_transition(command_buffer, virtual_texture.texture_image, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL, subresource_range); + if (current_mip_level != 0) + { + subresource_range.baseMipLevel = current_mip_level - 1U; + vkb::image_layout_transition(command_buffer, virtual_texture.texture_image, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL, subresource_range); + } + } + + subresource_range.baseMipLevel = mip_level; + vkb::image_layout_transition(command_buffer, virtual_texture.texture_image, VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, subresource_range); + if (mip_level != 0) + { + subresource_range.baseMipLevel = mip_level - 1U; + vkb::image_layout_transition(command_buffer, virtual_texture.texture_image, VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, subresource_range); + } + + current_mip_level = mip_level; + } + + assert(virtual_texture.page_table[page_index].gen_mip_required || !virtual_texture.page_table[page_index].render_required_set.empty()); + assert(!virtual_texture.page_table[page_index].valid); + + VkExtent2D block_extent{}; + block_extent.height = virtual_texture.sparse_image_memory_bind[page_index].extent.height; + block_extent.width = virtual_texture.sparse_image_memory_bind[page_index].extent.width; + + VkOffset2D block_offset{}; + block_offset.x = virtual_texture.sparse_image_memory_bind[page_index].offset.x; + block_offset.y = virtual_texture.sparse_image_memory_bind[page_index].offset.y; + + if (mip_level == 0U) + { + // Copying a single raw data block + for (size_t row = 0U; row < block_extent.height; row++) + { + size_t position = (row + block_offset.y) * (virtual_texture.width * 4U) + block_offset.x * 4U; + memcpy(&temp_buffer[row * block_extent.width * 4U], &virtual_texture.raw_data_image->get_data()[position], block_extent.width * 4U); + } + + VkDeviceSize buffer_offset = level_zero_index++ * virtual_texture.page_size; + multi_page_buffer->update(temp_buffer, buffer_offset); + + VkBufferImageCopy region{}; + region.bufferOffset = buffer_offset; + region.bufferRowLength = 0U; + region.bufferImageHeight = 0U; + + region.imageSubresource.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT; + region.imageSubresource.mipLevel = 0U; + region.imageSubresource.baseArrayLayer = 0U; + region.imageSubresource.layerCount = 1U; + + region.imageOffset = VkOffset3D({block_offset.x, block_offset.y, 0}); + region.imageExtent = VkExtent3D({block_extent.width, block_extent.height, 1U}); + + vkCmdCopyBufferToImage(command_buffer, multi_page_buffer->get_handle(), virtual_texture.texture_image, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, 1U, ®ion); + + virtual_texture.page_table[page_index].valid = true; + } + else + { + VkImageBlit blit_cmd{}; + blit_cmd.srcOffsets[0] = {(block_offset.x) * 2, (block_offset.y) * 2, 0}; + blit_cmd.srcOffsets[1] = {(block_offset.x + static_cast(block_extent.width)) * 2, (block_offset.y + static_cast(block_extent.height)) * 2, 1}; + blit_cmd.srcSubresource.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT; + blit_cmd.srcSubresource.mipLevel = mip_level - 1U; + blit_cmd.srcSubresource.baseArrayLayer = 0U; + blit_cmd.srcSubresource.layerCount = 1U; + blit_cmd.dstOffsets[0] = {block_offset.x, block_offset.y, 0}; + blit_cmd.dstOffsets[1] = {block_offset.x + static_cast(block_extent.width), block_offset.y + static_cast(block_extent.height), 1}; + blit_cmd.dstSubresource.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT; + blit_cmd.dstSubresource.mipLevel = mip_level; + blit_cmd.dstSubresource.baseArrayLayer = 0U; + blit_cmd.dstSubresource.layerCount = 1U; + + vkCmdBlitImage(command_buffer, + virtual_texture.texture_image, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, + virtual_texture.texture_image, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, + 1U, &blit_cmd, + VK_FILTER_LINEAR); + + virtual_texture.page_table[page_index].valid = true; + } + } + virtual_texture.update_set.clear(); + + VkImageSubresourceRange subresource_range{}; + + subresource_range.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT; + subresource_range.baseArrayLayer = 0U; + subresource_range.layerCount = 1U; + subresource_range.levelCount = 1U; + + if (current_mip_level != 0xFF) + { + subresource_range.baseMipLevel = current_mip_level; + vkb::image_layout_transition(command_buffer, virtual_texture.texture_image, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL, subresource_range); + if (current_mip_level != 0) + { + subresource_range.baseMipLevel = current_mip_level - 1U; + vkb::image_layout_transition(command_buffer, virtual_texture.texture_image, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL, subresource_range); + } + } + + device->flush_command_buffer(command_buffer, queue, true); + + for (auto &page : virtual_texture.page_table) + { + page.gen_mip_required = false; + } +} + +/** + * @brief Leave only render-required pages, free empty memory sectors, run defragmentation (if enabled), bind the image. + */ +void SparseImage::free_unused_memory() +{ + for (size_t page_index = 0U; page_index < virtual_texture.page_table.size(); page_index++) + { + auto &page = virtual_texture.page_table[page_index]; + if (page.render_required_set.empty() && page.valid) + { + page.valid = false; + auto result = page.page_memory_info.memory_sector->available_offsets.insert(page.page_memory_info.offset); + page.page_memory_info.memory_sector->virt_page_indices.erase(page_index); + page.page_memory_info.memory_sector.reset(); + } + } + + std::set pages_to_reallocate; + uint8_t sectors_to_reallocate = 0U; + + auto §ors = virtual_texture.memory_allocations.get_memory_sectors(); + for (auto it = sectors.begin(); it != sectors.end();) + { + if ((*it).expired()) + { + it = sectors.erase(it); + continue; + } + + if (memory_defragmentation) + { + auto ptr = (*it).lock(); + if (ptr->available_offsets.size() > MEMORY_FRAGMENTATION_CAP) + { + if (sectors_to_reallocate > 0U) + { + ptr->available_offsets.clear(); // This sector will not be used to allocate any additional pages + pages_to_reallocate.insert(ptr->virt_page_indices.begin(), ptr->virt_page_indices.end()); + } + sectors_to_reallocate++; + } + } + it++; + } + + if (memory_defragmentation && !pages_to_reallocate.empty()) + { + std::unique_ptr reallocation_buffer = std::make_unique(get_device(), virtual_texture.page_size * pages_to_reallocate.size(), VK_BUFFER_USAGE_TRANSFER_DST_BIT | VK_BUFFER_USAGE_TRANSFER_SRC_BIT, VMA_MEMORY_USAGE_GPU_ONLY); + + VkCommandBuffer command_buffer = get_device().create_command_buffer(VK_COMMAND_BUFFER_LEVEL_PRIMARY, true); + + std::vector copy_infos; + + VkImageSubresourceLayers subresource_layers{}; + subresource_layers.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT; + subresource_layers.baseArrayLayer = 0U; + subresource_layers.layerCount = 1U; + + uint32_t index = 0U; + for (auto &page_index : pages_to_reallocate) + { + VkExtent2D block_extent{}; + block_extent.height = virtual_texture.sparse_image_memory_bind[page_index].extent.height; + block_extent.width = virtual_texture.sparse_image_memory_bind[page_index].extent.width; + + VkOffset2D block_offset{}; + block_offset.x = virtual_texture.sparse_image_memory_bind[page_index].offset.x; + block_offset.y = virtual_texture.sparse_image_memory_bind[page_index].offset.y; + + subresource_layers.mipLevel = get_mip_level(page_index); + + VkBufferImageCopy copy_info{}; + copy_info.bufferOffset = index * virtual_texture.page_size; + copy_info.bufferRowLength = 0U; + copy_info.bufferImageHeight = 0U; + copy_info.imageSubresource = subresource_layers; + copy_info.imageOffset = VkOffset3D({block_offset.x, block_offset.y, 0}); + copy_info.imageExtent = VkExtent3D({block_extent.width, block_extent.height, 1U}); + + copy_infos.push_back(copy_info); + index++; + } + + VkImageSubresourceRange subresource_range{}; + subresource_range.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT; + subresource_range.baseArrayLayer = 0U; + subresource_range.layerCount = 1U; + subresource_range.levelCount = virtual_texture.mip_levels; + subresource_range.baseMipLevel = virtual_texture.base_mip_level; + + vkb::image_layout_transition(command_buffer, virtual_texture.texture_image, VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, subresource_range); + vkCmdCopyImageToBuffer(command_buffer, virtual_texture.texture_image, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, reallocation_buffer->get_handle(), static_cast(copy_infos.size()), copy_infos.data()); + device->flush_command_buffer(command_buffer, queue, true); + + std::vector> temp_sectors; + for (auto &page_index : pages_to_reallocate) + { + auto &page = virtual_texture.page_table[page_index]; + + temp_sectors.push_back(page.page_memory_info.memory_sector); + + page.page_memory_info.memory_sector->virt_page_indices.erase(page_index); + page.page_memory_info.memory_sector.reset(); + page.valid = false; + } + + sectors.sort(MemSectorCompare()); + bind_sparse_image(); + + command_buffer = get_device().create_command_buffer(VK_COMMAND_BUFFER_LEVEL_PRIMARY, true); + + vkb::image_layout_transition(command_buffer, virtual_texture.texture_image, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, subresource_range); + vkCmdCopyBufferToImage(command_buffer, reallocation_buffer->get_handle(), virtual_texture.texture_image, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, static_cast(copy_infos.size()), copy_infos.data()); + vkb::image_layout_transition(command_buffer, virtual_texture.texture_image, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL, subresource_range); + device->flush_command_buffer(command_buffer, queue, true); + + for (auto &page_index : pages_to_reallocate) + { + virtual_texture.page_table[page_index].valid = true; + } + temp_sectors.clear(); + } + else + { + sectors.sort(MemSectorCompare()); + bind_sparse_image(); + } +} + +/** + * @brief Generate the least detailed mip level, set it as unremovable, bind the image. + */ +void SparseImage::load_least_detailed_level() +{ + set_least_detailed_level(); + compare_mips_table(); + while (!virtual_texture.texture_block_update_set.empty()) + { + process_texture_blocks(); + } + VkSubmitInfo submit_info = {VK_STRUCTURE_TYPE_SUBMIT_INFO}; + submit_info.signalSemaphoreCount = 1; + submit_info.pSignalSemaphores = &submit_semaphore; + VK_CHECK(vkQueueSubmit(queue, 1, &submit_info, VK_NULL_HANDLE)); + + update_and_generate(); +} + +/** + * @brief Handle the state machine. + */ +void SparseImage::process_stage(Stages next_stage) +{ + switch (next_stage) + { + case Stages::Idle: + this->next_stage = Stages::FreeMemory; + break; + + case Stages::CalculateMipsTable: + bind_sparse_image(); + calculate_mips_table(); + frame_counter_per_transfer = 0U; + this->next_stage = Stages::CompareMipsTable; + break; + + case Stages::CompareMipsTable: + bind_sparse_image(); + compare_mips_table(); + if (update_required) + { + this->next_stage = Stages::FreeMemory; + } + else + { + this->next_stage = Stages::CalculateMipsTable; + } + break; + + case Stages::FreeMemory: + free_unused_memory(); + if (virtual_texture.texture_block_update_set.empty()) + { + this->next_stage = Stages::CalculateMipsTable; + update_required = false; + } + else if (frame_counter_feature && (frame_counter_per_transfer > FRAME_COUNTER_CAP)) + { + this->next_stage = Stages::CalculateMipsTable; + } + else + { + this->next_stage = Stages::ProcessTextureBlocks; + } + break; + + case Stages::ProcessTextureBlocks: + bind_sparse_image(); + process_texture_blocks(); + this->next_stage = Stages::UpdateAndGenerate; + break; + + case Stages::UpdateAndGenerate: + update_and_generate(); + this->next_stage = Stages::FreeMemory; + break; + + default: + assert(false); + break; + } +} + +/** + * @brief Prepare and submit the frame. + */ +void SparseImage::draw() +{ + ApiVulkanSample::prepare_frame(); + submit_info.commandBufferCount = 1U; + submit_info.pCommandBuffers = &draw_cmd_buffers[current_buffer]; + + std::array wait_stage_masks = {VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT}; + std::array wait_semaphores = {bound_semaphore, semaphores.acquired_image_ready}; + std::array signal_semaphores = {submit_semaphore, semaphores.render_complete}; + + submit_info.waitSemaphoreCount = wait_semaphores.size(); + + submit_info.pWaitSemaphores = wait_semaphores.data(); + submit_info.pWaitDstStageMask = wait_stage_masks.data(); + submit_info.signalSemaphoreCount = static_cast(signal_semaphores.size()); + submit_info.pSignalSemaphores = signal_semaphores.data(); + + VK_CHECK(vkQueueSubmit(queue, 1U, &submit_info, VK_NULL_HANDLE)); + ApiVulkanSample::submit_frame(); +} + +void SparseImage::render(float delta_time) +{ + if (!prepared) + { + return; + } + if (camera.updated) + { + update_mvp(); + } + if (color_highlight_changed) + { + update_frag_settings(); + color_highlight_changed = false; + } + + process_stage(next_stage); + + draw(); +} + +std::unique_ptr create_sparse_image() +{ + return std::make_unique(); +} + +/** + * @brief Generate the mesh and calculate required mip level for each texture block. + */ +void SparseImage::calculate_mips_table() +{ + if ((num_vertical_blocks != num_vertical_blocks_upd) || (num_horizontal_blocks != num_horizontal_blocks_upd)) + { + num_vertical_blocks = num_vertical_blocks_upd; + num_horizontal_blocks = num_horizontal_blocks_upd; + + reset_mip_table(); + mesh_data = CalculateMipLevelData(current_mvp_transform, VkExtent2D({static_cast(virtual_texture.width), static_cast(virtual_texture.height)}), VkExtent2D({static_cast(width), static_cast(height)}), num_vertical_blocks, num_horizontal_blocks, virtual_texture.mip_levels); + } + else + { + mesh_data.mvp_transform = current_mvp_transform; + } + + mesh_data.calculate_mesh_coordinates(); + mesh_data.calculate_mip_levels(); + + virtual_texture.new_mip_table = mesh_data.mip_table; +} + +/** + * @brief Generate the mesh based on the current MVP transform and number of blocks. + */ +void SparseImage::CalculateMipLevelData::calculate_mesh_coordinates() +{ + glm::vec4 top_left(-100.0f, -100.0f, 0.0f, 1.0f); + glm::vec4 top_right(100.0f, -100.0f, 0.0f, 1.0f); + glm::vec4 bottom_left(-100.0f, 100.0f, 0.0f, 1.0f); + glm::vec4 bottom_right(100.0f, 100.0f, 0.0f, 1.0f); + + float h_interval = (top_right[0] - top_left[0]) / horizontal_num_blocks; + float v_interval = (bottom_left[1] - top_left[1]) / vertical_num_blocks; + + double half_width = screen_base_dim.width / 2.0; + double half_height = screen_base_dim.height / 2.0; + + for (size_t v_index = 0U; v_index < vertical_num_blocks + 1U; v_index++) + { + for (size_t h_index = 0U; h_index < horizontal_num_blocks + 1U; h_index++) + { + float x_norm = top_left[0] + h_index * h_interval; + float y_norm = top_left[1] + v_index * v_interval; + + glm::vec4 result = mvp_transform * glm::vec4(x_norm, y_norm, 0.0f, 1.0f); + + double x = 0.5 * screen_base_dim.width * result[0] / abs(result[3]); + double y = 0.5 * screen_base_dim.height * result[1] / abs(result[3]); + + mesh[v_index][h_index].x = x; + mesh[v_index][h_index].y = y; + + mesh[v_index][h_index].on_screen = (-half_width < x) && (x < half_width) && (-half_height < y) && (y < half_height) && (0.0 < result[3]); + } + } + + for (size_t v_index = 0U; v_index < ax_horizontal.size(); v_index++) + { + if (abs(mesh[v_index][0].x - mesh[v_index][1].x) < 0.01) + { + ax_horizontal[v_index] = 1000.0; + } + else + { + ax_horizontal[v_index] = (mesh[v_index][0].y - mesh[v_index][1].y) / (mesh[v_index][0].x - mesh[v_index][1].x); + } + } + + for (size_t h_index = 0U; h_index < ax_vertical.size(); h_index++) + { + if (abs(mesh[0][h_index].x - mesh[1][h_index].x) < 0.01) + { + ax_vertical[h_index] = 1000.0; + } + else + { + ax_vertical[h_index] = (mesh[0][h_index].y - mesh[1][h_index].y) / (mesh[0][h_index].x - mesh[1][h_index].x); + } + } +} + +/** + * @brief This is the very core function. It is responsible for calculating what level of detail is required for a particular BLOCK. + * + * BLOCKS are just the abstraction units used to describe the texture on-screen. Each block is the same size. + * Number of vertical and horizontal blocks is described by num_vertical_blocks and num_horizontal_blocks. + * These variables are completely arbitrary - the more blocks, the better precision, the greater calculation overhead. + * + * What this function does, is based on the mesh data created in calculate_mesh_coordinates(), for each node within a mesh it calculates: + * "What is the ratio between x/y movement on the screen to the u/v movement on the texture?". + * + * The idea is, that when moving pixel-by-pixel along the x or y axis on-screen, if the small on-screen step causes a significant step on-texture, then the area is far away from the observer and less-detailed mip-level is required. + * The formula used for those calculations is: + * + * LOD = log2 (max(dT / dx, dT / dy)); where: + * - dT is an on-texture-step in texels, + * - dx, dy are on-screen-steps in pixels. + * + * One thing that makes these calculations complicated is that with the data provided by the mesh we move from one node to the other. But those steps (either horizontal or vertical) does not neccesarily + * go along the x and y axis. Because of that each vertical and horizontal step needs to be digested into x and y movement. Given that fact, for each "rectangularish" block that holds information on LOD required, + * there need to be 4 movements calculated and compared with their counterparts on the texture side. + * + * Naming convention explained and method: + * - first mentioning of either "..vertical.." or "..horizontal.." in the variable name means that this variable is used in calculations related to moving one node down (vertical) or right (horizontal) from the current position. + * Calculations are handled from the top-left corner of the texture, so we are moving either to bottom or right (on the texture, not neccessarily on the screen). + * - pH stands for "point H". It is a separate point for the vertical and horizontal step, from which the step is splitted into x and y on-screen axis. + * - A is a vertice we start calculations from. From A we move to either bottom node (which is B) or to the right node (which is C). + * + * - IMPORTANT: I assume that: + * - each block is a parallelogram which is obviously not 1:1 true, but the more precise we get (the more blocks we split the texture into) the more accurate this statement is. + * - the image is not "stretched' within a single block, which has the same rules as stated above. + * + * With those assumption, I'm providing a parralel lines from the Ph point to the corresponding edges. This creates an another parrallelogram. + * + * Variables named: ..vertical_vertical.. or ..vertical_horizontal_top.. should be understood as: + * This relates to the vertical step (from A --> B) and describes (the edge from pH to the corresponding vertical edge) or (describes the edge from the pH to the corresponding horizontal-top edge). + * + * Assuming that the image is not stretched within a single block, I calculate the ratio of for example (...vertical_vertical... / AB_vertical) or (...vertical_horizontal_top... / AC_horizontal). + * I know, that each parrallelogram on-screen corresponds to the fixed-size rectangular on-texture. Given the ratio I calculated I can just get the on-texture step in texels from the right-triangle property and compare it to the x or y step of vertical/horizontal step in pixels on-screen. + */ +void SparseImage::CalculateMipLevelData::calculate_mip_levels() +{ + size_t num_rows = mesh.size() - 1U; + size_t num_columns = mesh[0].size() - 1U; + + mip_table.resize(num_rows); + for (auto &row : mip_table) + { + row.resize(num_columns); + } + + // Single, on-texture step in texels + double dTu = texture_base_dim.width / num_columns; + double dTv = texture_base_dim.height / num_rows; + + for (size_t row = 0U; row < num_rows; row += 1U) + { + for (size_t column = 0U; column < num_columns; column += 1U) + { + // Single, on-screen step in pixels + double dIx_vertical = mesh[row][column].x - mesh[row + 1][column].x; + double dIy_vertical = mesh[row][column].y - mesh[row + 1][column].y; + + double dIx_horizontal = mesh[row][column].x - mesh[row][column + 1].x; + double dIy_horizontal = mesh[row][column].y - mesh[row][column + 1].y; + + // On-screen distance between starting node (A) and the next horizontal (C) or vertical (B) one + double AB_vertical = sqrt(pow(dIx_vertical, 2) + pow(dIy_vertical, 2)); + double AC_horizontal = sqrt(pow(dIx_horizontal, 2) + pow(dIy_horizontal, 2)); + + // Coordinates of point H + double pH_vertical_x = mesh[row][column].x; + double pH_vertical_y = mesh[row + 1][column].y; + double pH_horizontal_x = mesh[row][column + 1].x; + double pH_horizontal_y = mesh[row][column].y; + + // Distance from horizontal and vertical point H, to A and C + double pH_vertical_to_A = sqrt(pow(mesh[row][column].x - pH_vertical_x, 2) + pow(mesh[row][column].y - pH_vertical_y, 2)); + double pH_vertical_to_B = sqrt(pow(mesh[row + 1][column].x - pH_vertical_x, 2) + pow(mesh[row + 1][column].y - pH_vertical_y, 2)); + double pH_horizontal_to_A = sqrt(pow(mesh[row][column].x - pH_horizontal_x, 2) + pow(mesh[row][column].y - pH_horizontal_y, 2)); + double pH_horizontal_to_C = sqrt(pow(mesh[row][column + 1].x - pH_horizontal_x, 2) + pow(mesh[row][column + 1].y - pH_horizontal_y, 2)); + + // 'a' coefficient of the linear equation ax + b = y + double a_vertical = ax_vertical[column]; + double a_horizontal = ax_horizontal[row]; + + // Coordinates of the point which is the common point of two lines: 1) AtoB or AtoC; 2) The line going through point H, parallel to AtoC or AtoB + double x_vertical_vertical = (a_vertical * mesh[row][column].x + pH_vertical_y - (pH_vertical_x * a_horizontal) - mesh[row][column].y) / (a_vertical - a_horizontal); + double y_vertical_vertical = (x_vertical_vertical - mesh[row][column].x) * a_vertical + mesh[row][column].y; + + double x_vertical_horizontal_top = (a_horizontal * mesh[row][column].x + pH_vertical_y - (pH_vertical_x * a_vertical) - mesh[row][column].y) / (a_horizontal - a_vertical); + double y_vertical_horizontal_top = (x_vertical_horizontal_top - mesh[row][column].x) * a_horizontal + mesh[row][column].y; + double x_vertical_horizontal_bottom = (a_horizontal * mesh[row + 1][column].x + pH_vertical_y - (pH_vertical_x * a_vertical) - mesh[row + 1][column].y) / (a_horizontal - a_vertical); + double y_vertical_horizontal_bottom = (x_vertical_horizontal_bottom - mesh[row + 1][column].x) * a_horizontal + mesh[row + 1][column].y; + + double x_horizontal_horizontal = (a_horizontal * mesh[row][column].x + pH_horizontal_y - (pH_horizontal_x * a_vertical) - mesh[row][column].y) / (a_horizontal - a_vertical); + double y_horizontal_horizontal = (x_horizontal_horizontal - mesh[row][column].x) * a_horizontal + mesh[row][column].y; + + double x_horizontal_vertical_left = (a_vertical * mesh[row][column].x + pH_horizontal_y - (pH_horizontal_x * a_horizontal) - mesh[row][column].y) / (a_vertical - a_horizontal); + double y_horizontal_vertical_left = (x_horizontal_vertical_left - mesh[row][column].x) * a_vertical + mesh[row][column].y; + double x_horizontal_vertical_right = (a_vertical * mesh[row][column + 1].x + pH_horizontal_y - (pH_horizontal_x * a_horizontal) - mesh[row][column + 1].y) / (a_vertical - a_horizontal); + double y_horizontal_vertical_right = (x_horizontal_vertical_right - mesh[row][column + 1].x) * a_vertical + mesh[row][column + 1].y; + + // On-screen distances from point H (vertical and horizontal) to the corresponding points calculated above + double on_screen_pH_vertical_vertical = sqrt(pow(pH_vertical_x - x_vertical_vertical, 2) + pow(pH_vertical_y - y_vertical_vertical, 2)); + double on_screen_pH_vertical_horizontal_top = sqrt(pow(pH_vertical_x - x_vertical_horizontal_top, 2) + pow(pH_vertical_y - y_vertical_horizontal_top, 2)); + double on_screen_pH_vertical_horizontal_bottom = sqrt(pow(pH_vertical_x - x_vertical_horizontal_bottom, 2) + pow(pH_vertical_y - y_vertical_horizontal_bottom, 2)); + double on_screen_pH_horizontal_horizontal = sqrt(pow(pH_horizontal_x - x_horizontal_horizontal, 2) + pow(pH_horizontal_y - y_horizontal_horizontal, 2)); + double on_screen_pH_horizontal_vertical_left = sqrt(pow(pH_horizontal_x - x_horizontal_vertical_left, 2) + pow(pH_horizontal_y - y_horizontal_vertical_left, 2)); + double on_screen_pH_horizontal_vertical_right = sqrt(pow(pH_horizontal_x - x_horizontal_vertical_right, 2) + pow(pH_horizontal_y - y_horizontal_vertical_right, 2)); + + // On-texture counterparts of distances above + double on_texture_pH_vertical_vertical = on_screen_pH_vertical_vertical / AC_horizontal * dTu; + double on_texture_pH_vertical_horizontal_top = on_screen_pH_vertical_horizontal_top / AB_vertical * dTv; + double on_texture_pH_vertical_horizontal_bottom = on_screen_pH_vertical_horizontal_bottom / AB_vertical * dTv; + double on_texture_pH_horizontal_horizontal = on_screen_pH_horizontal_horizontal / AB_vertical * dTv; + double on_texture_pH_horizontal_vertical_left = on_screen_pH_horizontal_vertical_left / AC_horizontal * dTu; + double on_texture_pH_horizontal_vertical_right = on_screen_pH_horizontal_vertical_right / AC_horizontal * dTu; + + // Texel-to-pixel ratios + double x_texture_to_screen_vertical_ratio = abs(pH_vertical_to_A) < 1.0 ? 0.0 : sqrt(pow(on_texture_pH_vertical_vertical, 2) + pow(on_texture_pH_vertical_horizontal_top, 2)) / abs(pH_vertical_to_A); + double y_texture_to_screen_vertical_ratio = abs(pH_vertical_to_B) < 1.0 ? 0.0 : sqrt(pow(on_texture_pH_vertical_vertical, 2) + pow(on_texture_pH_vertical_horizontal_bottom, 2)) / abs(pH_vertical_to_B); + double x_texture_to_screen_horizontal_ratio = abs(pH_horizontal_to_A) < 1.0 ? 0.0 : sqrt(pow(on_texture_pH_horizontal_horizontal, 2) + pow(on_texture_pH_horizontal_vertical_left, 2)) / abs(pH_horizontal_to_A); + double y_texture_to_screen_horizontal_ratio = abs(pH_horizontal_to_C) < 1.0 ? 0.0 : sqrt(pow(on_texture_pH_horizontal_horizontal, 2) + pow(on_texture_pH_horizontal_vertical_right, 2)) / abs(pH_horizontal_to_C); + + // Using the log2 formula to calculate required mip level + double delta = std::max(std::max(x_texture_to_screen_horizontal_ratio, y_texture_to_screen_horizontal_ratio), std::max(x_texture_to_screen_vertical_ratio, y_texture_to_screen_vertical_ratio)); + double mip_level = std::min(static_cast(mip_levels - 1U), std::max(log2(delta), 0.0)); + + mip_table[row][column].mip_level = mip_level; + mip_table[row][column].on_screen = mesh[row][column].on_screen || mesh[row + 1][column].on_screen || mesh[row][column + 1].on_screen || mesh[row + 1][column + 1].on_screen; + } + } +} + +/** + * @brief Create and update a vertex buffer. + */ +void SparseImage::create_vertex_buffer() +{ + std::array vertices; + VkDeviceSize vertices_size = sizeof(vertices[0]) * vertices.size(); + + vertices[0].norm = {-100.0f, -100.0f}; + vertices[1].norm = {100.0f, -100.0f}; + vertices[2].norm = {100.0f, 100.0f}; + vertices[3].norm = {-100.0f, 100.0f}; + + vertices[0].uv = {0.0f, 0.0f}; + vertices[1].uv = {1.0f, 0.0f}; + vertices[2].uv = {1.0f, 1.0f}; + vertices[3].uv = {0.0f, 1.0f}; + + std::unique_ptr staging_buffer; + staging_buffer = std::make_unique(get_device(), vertices_size, VK_BUFFER_USAGE_TRANSFER_SRC_BIT, VMA_MEMORY_USAGE_CPU_TO_GPU); + vertex_buffer = std::make_unique(get_device(), vertices_size, VK_BUFFER_USAGE_TRANSFER_DST_BIT | VK_BUFFER_USAGE_VERTEX_BUFFER_BIT, VMA_MEMORY_USAGE_GPU_ONLY); + + staging_buffer->update(vertices.data(), vertices_size); + + VkCommandBuffer command_buffer = get_device().create_command_buffer(VK_COMMAND_BUFFER_LEVEL_PRIMARY, true); + + VkBufferCopy copy_buffer_info{}; + copy_buffer_info.srcOffset = 0U; + copy_buffer_info.dstOffset = 0U; + copy_buffer_info.size = vertices_size; + + vkCmdCopyBuffer(command_buffer, staging_buffer->get_handle(), vertex_buffer->get_handle(), 1U, ©_buffer_info); + device->flush_command_buffer(command_buffer, queue, true); +} + +/** + * @brief Create and update an index buffer. + */ +void SparseImage::create_index_buffer() +{ + std::array indices = {0U, 1U, 2U, 2U, 3U, 0U}; + VkDeviceSize indices_size = sizeof(indices[0]) * indices.size(); + index_count = indices.size(); + + std::unique_ptr staging_buffer; + staging_buffer = std::make_unique(get_device(), indices_size, VK_BUFFER_USAGE_TRANSFER_SRC_BIT, VMA_MEMORY_USAGE_CPU_TO_GPU); + index_buffer = std::make_unique(get_device(), indices_size, VK_BUFFER_USAGE_TRANSFER_DST_BIT | VK_BUFFER_USAGE_INDEX_BUFFER_BIT, VMA_MEMORY_USAGE_GPU_ONLY); + + staging_buffer->update(indices.data(), indices_size); + + VkCommandBuffer command_buffer = get_device().create_command_buffer(VK_COMMAND_BUFFER_LEVEL_PRIMARY, true); + + VkBufferCopy copy_buffer_info{}; + copy_buffer_info.srcOffset = 0U; + copy_buffer_info.dstOffset = 0U; + copy_buffer_info.size = indices_size; + + vkCmdCopyBuffer(command_buffer, staging_buffer->get_handle(), index_buffer->get_handle(), 1U, ©_buffer_info); + device->flush_command_buffer(command_buffer, queue, true); +} + +/** + * @brief Creating descriptor pool with size adjusted to use uniform buffer and image sampler. + */ +void SparseImage::create_descriptor_pool() +{ + std::array pool_sizes = { + vkb::initializers::descriptor_pool_size(VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, 1U), + vkb::initializers::descriptor_pool_size(VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, 1U), + vkb::initializers::descriptor_pool_size(VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, 1U), + }; + + VkDescriptorPoolCreateInfo pool_info = + vkb::initializers::descriptor_pool_create_info( + static_cast(pool_sizes.size()), + pool_sizes.data(), + 1U); + + VK_CHECK(vkCreateDescriptorPool(get_device().get_handle(), &pool_info, VK_NULL_HANDLE, &descriptor_pool)); +} + +/** + * @brief Creating layout for descriptor sets. + */ +void SparseImage::create_descriptor_set_layout() +{ + std::array set_layout_bindings = { + vkb::initializers::descriptor_set_layout_binding( + VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, + VK_SHADER_STAGE_VERTEX_BIT, + 0U), + vkb::initializers::descriptor_set_layout_binding( + VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, + VK_SHADER_STAGE_FRAGMENT_BIT, + 1U), + vkb::initializers::descriptor_set_layout_binding( + VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, + VK_SHADER_STAGE_FRAGMENT_BIT, + 2U), + }; + + VkDescriptorSetLayoutCreateInfo set_layout_create_info = + vkb::initializers::descriptor_set_layout_create_info(set_layout_bindings.data(), static_cast(set_layout_bindings.size())); + + VK_CHECK(vkCreateDescriptorSetLayout(get_device().get_handle(), &set_layout_create_info, VK_NULL_HANDLE, &descriptor_set_layout)); +} + +/** + * @brief Creating descriptor set: + * 1. Uniform buffer (MVP). + * 2. Image sampler. + * 3. Uniform buffer (color_highlight and LOD data). + */ +void SparseImage::create_descriptor_sets() +{ + VkDescriptorSetAllocateInfo set_alloc_info = + vkb::initializers::descriptor_set_allocate_info( + descriptor_pool, + &descriptor_set_layout, + 1U); + + VK_CHECK(vkAllocateDescriptorSets(get_device().get_handle(), &set_alloc_info, &descriptor_set)); + + VkDescriptorBufferInfo mvp_buffer_desc_info = create_descriptor(*mvp_buffer); + VkDescriptorBufferInfo frag_settings_desc_info = create_descriptor(*frag_settings_data_buffer); + + VkDescriptorImageInfo image_info{}; + image_info.imageLayout = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL; + image_info.imageView = virtual_texture.texture_image_view; + image_info.sampler = texture_sampler; + + std::array write_descriptor_sets = { + vkb::initializers::write_descriptor_set( + descriptor_set, + VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, + 0U, + &mvp_buffer_desc_info, + 1U), + vkb::initializers::write_descriptor_set( + descriptor_set, + VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, + 1U, + &image_info, + 1U), + vkb::initializers::write_descriptor_set( + descriptor_set, + VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, + 2U, + &frag_settings_desc_info, + 1U)}; + + vkUpdateDescriptorSets(get_device().get_handle(), static_cast(write_descriptor_sets.size()), write_descriptor_sets.data(), 0U, nullptr); +} + +/** + * @brief Update UBO-data used by the fragment shader. + */ +void SparseImage::update_frag_settings() +{ + FragSettingsData frag_settings = {}; + frag_settings.color_highlight = color_highlight; + frag_settings.minLOD = virtual_texture.base_mip_level; + frag_settings.maxLOD = virtual_texture.base_mip_level + virtual_texture.mip_levels - 1U; + + frag_settings_data_buffer->update(&frag_settings, sizeof(FragSettingsData)); +} + +/** + * @brief Create UBO for MVP data and fragment shader settings. + */ +void SparseImage::create_uniform_buffers() +{ + VkDeviceSize buffer_size = sizeof(MVP); + mvp_buffer = std::make_unique(get_device(), buffer_size, VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT, VMA_MEMORY_USAGE_CPU_TO_GPU, VMA_ALLOCATION_CREATE_MAPPED_BIT); + + buffer_size = sizeof(FragSettingsData); + frag_settings_data_buffer = std::make_unique(get_device(), buffer_size, VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT, VMA_MEMORY_USAGE_CPU_TO_GPU, VMA_ALLOCATION_CREATE_MAPPED_BIT); +} + +/** + * @brief Create and setup the texture sampler. + */ +void SparseImage::create_texture_sampler() +{ + VkSamplerCreateInfo sampler_info = vkb::initializers::sampler_create_info(); + + sampler_info.magFilter = VK_FILTER_LINEAR; + sampler_info.minFilter = VK_FILTER_LINEAR; + sampler_info.addressModeU = VK_SAMPLER_ADDRESS_MODE_REPEAT; + sampler_info.addressModeV = VK_SAMPLER_ADDRESS_MODE_REPEAT; + sampler_info.addressModeW = VK_SAMPLER_ADDRESS_MODE_REPEAT; + sampler_info.anisotropyEnable = VK_FALSE; + sampler_info.maxAnisotropy = 1.0f; + sampler_info.borderColor = VK_BORDER_COLOR_INT_OPAQUE_BLACK; + sampler_info.unnormalizedCoordinates = VK_FALSE; + sampler_info.compareEnable = VK_FALSE; + sampler_info.compareOp = VK_COMPARE_OP_ALWAYS; + sampler_info.mipmapMode = VK_SAMPLER_MIPMAP_MODE_NEAREST; + sampler_info.mipLodBias = 0.0f; + sampler_info.minLod = static_cast(virtual_texture.base_mip_level); + sampler_info.maxLod = static_cast(virtual_texture.mip_levels - 1U); + + VK_CHECK(vkCreateSampler(get_device().get_handle(), &sampler_info, nullptr, &texture_sampler)); +} + +/** + * @brief Enable required GPU features. + */ +void SparseImage::request_gpu_features(vkb::PhysicalDevice &gpu) +{ + if (gpu.get_features().sparseBinding && gpu.get_features().sparseResidencyImage2D && gpu.get_features().shaderResourceResidency) + { + gpu.get_mutable_requested_features().sparseBinding = VK_TRUE; + gpu.get_mutable_requested_features().sparseResidencyImage2D = VK_TRUE; + gpu.get_mutable_requested_features().shaderResourceResidency = VK_TRUE; + } + else + { + throw std::runtime_error("Sparse binding not supported"); + } +} + +/** + * @brief Setup least detailed level to be required and unremovable from the memory. + */ +void SparseImage::set_least_detailed_level() +{ + // Setting the least detailed mip level to be constantly present in the memory (to avoid black spots on the screen) + size_t start_index = virtual_texture.mip_properties[virtual_texture.mip_levels - 1U].mip_base_page_index; + size_t num_pages = virtual_texture.mip_properties[virtual_texture.mip_levels - 1U].mip_num_pages; + + for (size_t page_index = start_index; page_index < (start_index + num_pages); page_index++) + { + virtual_texture.page_table[page_index].fixed = true; + } + + for (auto &column : virtual_texture.new_mip_table) + { + for (auto &block : column) + { + block.mip_level = virtual_texture.mip_levels - 1U; + } + } +} + +/** + * @brief Create and setup the sparse texture. + */ +void SparseImage::create_sparse_texture_image() +{ + //================================================================================================== + // Creating an Image + VkImageCreateInfo sparse_image_create_info = vkb::initializers::image_create_info(); + sparse_image_create_info.imageType = VK_IMAGE_TYPE_2D; + + sparse_image_create_info.extent.width = static_cast(virtual_texture.width); + sparse_image_create_info.extent.height = static_cast(virtual_texture.height); + sparse_image_create_info.extent.depth = 1U; + + /* + The number of mip-levels is arbitrary. + 5 LODs fit well the current design (6th would be used from too far away). + + Before incrementing this value, one should consider handling the mip tail and binding it correctly: + - vkGetImageSparseMemoryRequirements() + - VkSparseImageOpaqueMemoryBindInfo + */ + virtual_texture.base_mip_level = 0U; + virtual_texture.mip_levels = 5U; + + sparse_image_create_info.mipLevels = virtual_texture.mip_levels; + sparse_image_create_info.arrayLayers = 1U; + + sparse_image_create_info.flags = VK_IMAGE_CREATE_SPARSE_BINDING_BIT | VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT; + sparse_image_create_info.format = image_format; + sparse_image_create_info.tiling = VK_IMAGE_TILING_OPTIMAL; + sparse_image_create_info.initialLayout = VK_IMAGE_LAYOUT_PREINITIALIZED; + sparse_image_create_info.usage = image_usage; + sparse_image_create_info.samples = VK_SAMPLE_COUNT_1_BIT; + sparse_image_create_info.sharingMode = VK_SHARING_MODE_EXCLUSIVE; + + VK_CHECK(vkCreateImage(get_device().get_handle(), &sparse_image_create_info, nullptr, &virtual_texture.texture_image)); + + //================================================================================================== + // Calculating memory dependencies and defining total number of pages and page size + + std::vector sparse_image_memory_requirements; + VkMemoryRequirements memory_requirements; + + uint32_t sparse_memory_req_count; + uint32_t memory_req_count; + + vkGetImageSparseMemoryRequirements(device->get_handle(), virtual_texture.texture_image, &sparse_memory_req_count, sparse_image_memory_requirements.data()); + sparse_image_memory_requirements.resize(sparse_memory_req_count); + vkGetImageSparseMemoryRequirements(device->get_handle(), virtual_texture.texture_image, &sparse_memory_req_count, sparse_image_memory_requirements.data()); + + vkGetImageMemoryRequirements(get_device().get_handle(), virtual_texture.texture_image, &memory_requirements); + + virtual_texture.format_properties = sparse_image_memory_requirements[0].formatProperties; + + // calculate page size + virtual_texture.page_size = virtual_texture.format_properties.imageGranularity.height * virtual_texture.format_properties.imageGranularity.width * 4U; + + // calculate total number of pages + size_t num_total_pages = 0U; + size_t current_mip_height = virtual_texture.height; + size_t current_mip_width = virtual_texture.width; + + virtual_texture.mip_properties.resize(virtual_texture.mip_levels); + + for (uint32_t mip_level = 0U; mip_level < virtual_texture.mip_levels; mip_level++) + { + size_t numRows = current_mip_height / virtual_texture.format_properties.imageGranularity.height + (current_mip_height % virtual_texture.format_properties.imageGranularity.height == 0U ? 0U : 1U); + size_t numColumns = current_mip_width / virtual_texture.format_properties.imageGranularity.width + (current_mip_width % virtual_texture.format_properties.imageGranularity.width == 0U ? 0U : 1U); + + num_total_pages += numRows * numColumns; + + virtual_texture.mip_properties[mip_level].width = current_mip_width; + virtual_texture.mip_properties[mip_level].height = current_mip_height; + virtual_texture.mip_properties[mip_level].num_columns = numColumns; + virtual_texture.mip_properties[mip_level].num_rows = numRows; + virtual_texture.mip_properties[mip_level].mip_num_pages = numRows * numColumns; + virtual_texture.mip_properties[mip_level].mip_base_page_index = mip_level > 0U ? virtual_texture.mip_properties[mip_level - 1U].mip_base_page_index + virtual_texture.mip_properties[mip_level - 1U].mip_num_pages : 0U; + + if (current_mip_height > 1U) + { + current_mip_height /= 2U; + } + if (current_mip_width > 1U) + { + current_mip_width /= 2U; + } + } + + virtual_texture.width = virtual_texture.mip_properties[0].width; + virtual_texture.height = virtual_texture.mip_properties[0].height; + + virtual_texture.page_table.resize(num_total_pages); + virtual_texture.sparse_image_memory_bind.resize(num_total_pages); + + // Resize table and reset page_table data + reset_mip_table(); + + // Memory allocation required data + virtual_texture.memory_allocations.device = get_device().get_handle(); + virtual_texture.memory_allocations.page_size = virtual_texture.page_size; + virtual_texture.memory_allocations.memory_type_index = get_device().get_memory_type(memory_requirements.memoryTypeBits, VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT); + virtual_texture.memory_allocations.pages_per_allocation = PAGES_PER_ALLOC; + + // Setting the constant data for memory page binding via vkQueueBindSparse() + for (size_t page_index = 0U; page_index < virtual_texture.page_table.size(); page_index++) + { + uint32_t mipLevel = get_mip_level(page_index); + + auto &memory_bind_info = virtual_texture.sparse_image_memory_bind[page_index]; + auto &mip_properties = virtual_texture.mip_properties[mipLevel]; + + memory_bind_info.subresource.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT; + memory_bind_info.subresource.arrayLayer = 0U; + memory_bind_info.subresource.mipLevel = mipLevel; + memory_bind_info.flags = 0U; + + memory_bind_info.offset.x = ((page_index - mip_properties.mip_base_page_index) % mip_properties.num_columns) * virtual_texture.format_properties.imageGranularity.width; + memory_bind_info.offset.y = ((page_index - mip_properties.mip_base_page_index) / mip_properties.num_columns) * virtual_texture.format_properties.imageGranularity.height; + memory_bind_info.offset.z = 0; + + memory_bind_info.extent.depth = virtual_texture.format_properties.imageGranularity.depth; + memory_bind_info.extent.width = (mip_properties.width - memory_bind_info.offset.x < virtual_texture.format_properties.imageGranularity.width) ? mip_properties.width - memory_bind_info.offset.x : virtual_texture.format_properties.imageGranularity.width; + memory_bind_info.extent.height = (mip_properties.height - memory_bind_info.offset.y < virtual_texture.format_properties.imageGranularity.height) ? mip_properties.height - memory_bind_info.offset.y : virtual_texture.format_properties.imageGranularity.height; + } + + //================================================================================================== + // Creating texture image view + + VkImageViewCreateInfo view_info = vkb::initializers::image_view_create_info(); + view_info.image = virtual_texture.texture_image; + view_info.viewType = VK_IMAGE_VIEW_TYPE_2D; + view_info.format = image_format; + view_info.subresourceRange.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT; + view_info.subresourceRange.baseMipLevel = virtual_texture.base_mip_level; + view_info.subresourceRange.levelCount = virtual_texture.mip_levels; + view_info.subresourceRange.baseArrayLayer = 0U; + view_info.subresourceRange.layerCount = 1U; + + VK_CHECK(vkCreateImageView(get_device().get_handle(), &view_info, nullptr, &virtual_texture.texture_image_view)); + + VkCommandBuffer command_buffer = get_device().create_command_buffer(VK_COMMAND_BUFFER_LEVEL_PRIMARY, true); + VkImageSubresourceRange subresource_range{}; + + subresource_range.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT; + subresource_range.baseArrayLayer = 0U; + subresource_range.layerCount = 1U; + subresource_range.levelCount = virtual_texture.mip_levels; + subresource_range.baseMipLevel = virtual_texture.base_mip_level; + + vkb::image_layout_transition(command_buffer, virtual_texture.texture_image, VK_IMAGE_LAYOUT_PREINITIALIZED, VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL, subresource_range); + device->flush_command_buffer(command_buffer, queue, true); + + //================================================================================================== + // Synchronization primitives + + VkSemaphoreCreateInfo semaphore_create_info = vkb::initializers::semaphore_create_info(); + VK_CHECK(vkCreateSemaphore(get_device().get_handle(), &semaphore_create_info, nullptr, &submit_semaphore)); + VK_CHECK(vkCreateSemaphore(get_device().get_handle(), &semaphore_create_info, nullptr, &bound_semaphore)); +} + +/** + * @brief Clear and potentially resize both current and new mip tables. + */ +void SparseImage::reset_mip_table() +{ + virtual_texture.current_mip_table.clear(); + virtual_texture.current_mip_table.resize(num_vertical_blocks); + + virtual_texture.new_mip_table.clear(); + virtual_texture.new_mip_table.resize(num_vertical_blocks); + + for (size_t y = 0U; y < num_vertical_blocks; y++) + { + virtual_texture.current_mip_table[y].resize(num_horizontal_blocks); + virtual_texture.new_mip_table[y].resize(num_horizontal_blocks); + + for (size_t x = 0U; x < num_horizontal_blocks; x++) + { + virtual_texture.current_mip_table[y][x].on_screen = false; + virtual_texture.new_mip_table[y][x].on_screen = true; + } + } + + for (auto &page : virtual_texture.page_table) + { + if (!page.fixed) + { + page.render_required_set.clear(); + } + } +} + +void SparseImage::on_update_ui_overlay(vkb::Drawer &drawer) +{ + if (drawer.header("Settings")) + { + color_highlight_changed = drawer.checkbox("Color highlight", &color_highlight); + drawer.checkbox("Memory defragmentation", &memory_defragmentation); + drawer.checkbox("Update prioritization", &frame_counter_feature); + drawer.slider_int("Blocks per cycle", reinterpret_cast(&blocks_to_update_per_cycle), 1, 50); + drawer.slider_int("Vertical blocks", reinterpret_cast(&num_vertical_blocks_upd), 1, 100); + drawer.slider_int("Horizontal blocks", reinterpret_cast(&num_horizontal_blocks_upd), 1, 100); + } + if (drawer.header("Statistics")) + { + drawer.text("Memory usage in pages:"); + drawer.text("* Virtual: %zu ", virtual_texture.page_table.size()); + drawer.text("* Allocated: %zu ", virtual_texture.memory_allocations.get_size() * PAGES_PER_ALLOC); + } +} \ No newline at end of file diff --git a/samples/extensions/sparse_image/sparse_image.h b/samples/extensions/sparse_image/sparse_image.h new file mode 100644 index 000000000..d9a333d28 --- /dev/null +++ b/samples/extensions/sparse_image/sparse_image.h @@ -0,0 +1,399 @@ +/* Copyright (c) 2023, Mobica Limited + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 the "License"; + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#pragma once + +#include "api_vulkan_sample.h" + +class SparseImage : public ApiVulkanSample +{ + public: + enum class Stages + { + Idle, + CalculateMipsTable, + CompareMipsTable, + FreeMemory, + ProcessTextureBlocks, + UpdateAndGenerate, + }; + + struct MVP + { + alignas(16) glm::mat4 model; + alignas(16) glm::mat4 view; + alignas(16) glm::mat4 proj; + }; + + struct FragSettingsData + { + bool color_highlight; + int minLOD; + int maxLOD; + }; + + struct SimpleVertex + { + glm::vec2 norm; + glm::vec2 uv; + }; + + struct MipProperties + { + size_t num_rows; + size_t num_columns; + size_t mip_num_pages; + size_t mip_base_page_index; + size_t width; + size_t height; + }; + + struct TextureBlock + { + bool operator<(TextureBlock const &other) const + { + if (this->new_mip_level == other.new_mip_level) + { + if (this->column == other.column) + { + return this->row < other.row; + } + else + { + return this->column < other.column; + } + } + return this->new_mip_level < other.new_mip_level; + }; + + size_t row; + size_t column; + double old_mip_level; + double new_mip_level; + bool on_screen; + }; + + struct MemPageDescription + { + size_t x; + size_t y; + uint8_t mip_level; + }; + + struct Point + { + double x; + double y; + bool on_screen; + }; + + struct MipBlock + { + double mip_level; + bool on_screen; + }; + + struct MemSector; + + struct PageInfo + { + std::shared_ptr memory_sector = nullptr; + uint32_t offset = 0U; + }; + + struct PageTable + { + bool valid = false; // bound via vkQueueBindSparse() and contains valid data + bool gen_mip_required = false; // required for the mip generation + bool fixed = false; // not freed from the memory at any cases + PageInfo page_memory_info; // memory-related info + + std::set> render_required_set; // set holding information on what BLOCKS require this particular memory page to be valid for rendering + }; + + struct MemAllocInfo + { + VkDevice device = VK_NULL_HANDLE; + uint64_t page_size = 0U; + uint32_t memory_type_index = 0U; + size_t pages_per_allocation = 0U; + + void get_allocation(PageInfo &page_memory_info, size_t page_index) + { + if (memory_sectors.empty() || memory_sectors.front().expired() || memory_sectors.front().lock()->available_offsets.empty()) + { + page_memory_info.memory_sector = std::make_shared(*this); + page_memory_info.offset = *(page_memory_info.memory_sector->available_offsets.begin()); + + page_memory_info.memory_sector->available_offsets.erase(page_memory_info.offset); + page_memory_info.memory_sector->virt_page_indices.insert(page_index); + + memory_sectors.push_front(page_memory_info.memory_sector); + } + else + { + auto ptr = memory_sectors.front().lock(); + + page_memory_info.memory_sector = ptr; + page_memory_info.offset = *(page_memory_info.memory_sector->available_offsets.begin()); + + page_memory_info.memory_sector->available_offsets.erase(page_memory_info.offset); + page_memory_info.memory_sector->virt_page_indices.insert(page_index); + } + } + + uint32_t get_size() + { + return memory_sectors.size(); + } + + std::list> &get_memory_sectors() + { + return memory_sectors; + } + + private: + std::list> memory_sectors; + }; + + struct MemSector : public MemAllocInfo + { + VkDeviceMemory memory = VK_NULL_HANDLE; + + std::set available_offsets; + std::set virt_page_indices; + + MemSector(MemAllocInfo &mem_alloc_info) : + MemAllocInfo(mem_alloc_info) + { + VkMemoryAllocateInfo memory_allocate_info{}; + memory_allocate_info.sType = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO; + memory_allocate_info.allocationSize = page_size * pages_per_allocation; + memory_allocate_info.memoryTypeIndex = memory_type_index; + + VkDeviceMemory memory; + VK_CHECK(vkAllocateMemory(device, &memory_allocate_info, nullptr, &memory)); + this->memory = memory; + + for (size_t i = 0U; i < pages_per_allocation; i++) + { + available_offsets.insert(page_size * i); + } + } + + ~MemSector() + { + vkDeviceWaitIdle(device); + vkFreeMemory(device, memory, nullptr); + } + }; + + struct MemSectorCompare + { + bool operator()(const std::weak_ptr &left, const std::weak_ptr &right) + { + if (left.expired()) + { + return false; + } + else if (right.expired()) + { + return true; + } + return left.lock()->available_offsets.size() > right.lock()->available_offsets.size(); + }; + }; + + struct VirtualTexture + { + VkImage texture_image = VK_NULL_HANDLE; + VkImageView texture_image_view = VK_NULL_HANDLE; + MemAllocInfo memory_allocations; + + // Dimensions + size_t width = 0U; + size_t height = 0U; + + // Number of bytes per page + size_t page_size = 0U; + + uint8_t base_mip_level = 0U; + uint8_t mip_levels = 0U; + std::vector mip_properties; + + std::vector> current_mip_table; + std::vector> new_mip_table; + + // Image containing a single, most detailed mip, allocated in the CPU memory, coppied to VRAM via staging buffer in update_and_generate() + std::unique_ptr raw_data_image; + + // Key table that includes data on which page is allocated to what memory block from the textureMemory vector + std::vector page_table; + + // Set containing BLOCKS for which the required mip level has changed or/and its on-screen visibility changed + std::set texture_block_update_set; + + // Set containing information which pages from the page_table should be updated (either loaded from CPU memory or blitted) + std::set update_set; + + // Sparse-image-related format and memory properties + VkSparseImageFormatProperties format_properties{}; + + std::vector sparse_image_memory_bind; + }; + + struct CalculateMipLevelData + { + std::vector> mesh; + std::vector> mip_table; + + uint32_t vertical_num_blocks; + uint32_t horizontal_num_blocks; + + uint8_t mip_levels; + + std::vector ax_vertical; + std::vector ax_horizontal; + + glm::mat4 mvp_transform; + + VkExtent2D texture_base_dim; + VkExtent2D screen_base_dim; + + CalculateMipLevelData(const glm::mat4 &mvp_transform, const VkExtent2D &texture_base_dim, const VkExtent2D &screen_base_dim, uint32_t vertical_num_blocks, uint32_t horizontal_num_blocks, uint8_t mip_levels) : + mesh(vertical_num_blocks + 1U), vertical_num_blocks(vertical_num_blocks), horizontal_num_blocks(horizontal_num_blocks), mip_levels(mip_levels), ax_vertical(horizontal_num_blocks + 1U), ax_horizontal(vertical_num_blocks + 1U), mvp_transform(mvp_transform), texture_base_dim(texture_base_dim), screen_base_dim(screen_base_dim) + { + for (auto &row : mesh) + { + row.resize(horizontal_num_blocks + 1U); + } + } + + CalculateMipLevelData() : + mvp_transform(glm::mat4(0)), texture_base_dim(VkExtent2D{0U, 0U}), screen_base_dim(VkExtent2D{0U, 0U}), mesh{0}, vertical_num_blocks(0U), horizontal_num_blocks(0U), mip_levels(0U) + {} + void calculate_mesh_coordinates(); + void calculate_mip_levels(); + }; + + // UI related + bool color_highlight = true; + bool color_highlight_changed = false; + bool memory_defragmentation = true; + bool frame_counter_feature = true; + + size_t blocks_to_update_per_cycle = 25U; + + size_t num_vertical_blocks = 50U; + size_t num_horizontal_blocks = 50U; + + size_t num_vertical_blocks_upd = 50U; + size_t num_horizontal_blocks_upd = 50U; + + bool update_required = false; + + uint8_t frame_counter_per_transfer = 0U; + + const uint8_t FRAME_COUNTER_CAP = 10U; + const uint8_t MEMORY_FRAGMENTATION_CAP = 20U; + const uint8_t PAGES_PER_ALLOC = 50U; + const double FOV_DEGREES = 60.0; + + Stages next_stage = Stages::Idle; + + const VkFormat image_format = VK_FORMAT_R8G8B8A8_SRGB; + const VkImageUsageFlags image_usage = VK_IMAGE_USAGE_TRANSFER_DST_BIT | VK_IMAGE_USAGE_TRANSFER_SRC_BIT | VK_IMAGE_USAGE_SAMPLED_BIT; + + VirtualTexture virtual_texture; + + CalculateMipLevelData mesh_data; + + VkQueue sparse_queue; + + std::unique_ptr vertex_buffer; + + std::unique_ptr index_buffer; + size_t index_count; + + std::unique_ptr mvp_buffer; + std::unique_ptr frag_settings_data_buffer; + + glm::mat4 current_mvp_transform; + + VkPipeline sample_pipeline; + VkPipelineLayout sample_pipeline_layout; + + VkDescriptorSetLayout descriptor_set_layout; + VkDescriptorSet descriptor_set; + VkSampler texture_sampler; + + VkSemaphore bound_semaphore; + VkSemaphore submit_semaphore; + + //================================================================================================== + SparseImage(); + virtual ~SparseImage(); + + void setup_camera(); + void load_assets(); + + void prepare_pipelines(); + + void create_sparse_bind_queue(); + + void create_vertex_buffer(); + void create_index_buffer(); + + void create_uniform_buffers(); + void create_texture_sampler(); + + void create_descriptor_set_layout(); + void create_descriptor_pool(); + void create_descriptor_sets(); + + void create_sparse_texture_image(); + + void draw(); + + void update_mvp(); + void process_stage(enum Stages next_stage); + void free_unused_memory(); + void update_and_generate(); + void process_texture_blocks(); + struct MemPageDescription get_mem_page_description(size_t page_index); + void calculate_mips_table(); + void compare_mips_table(); + void process_texture_block(const TextureBlock &on_screen_block); + std::vector get_memory_dependency_for_the_block(size_t column, size_t row, uint8_t mip_level); + void check_mip_page_requirements(std::vector &mipgen_required_vec, MemPageDescription mip_dependency); + void bind_sparse_image(); + void load_least_detailed_level(); + void set_least_detailed_level(); + void update_frag_settings(); + uint8_t get_mip_level(size_t page_index); + size_t get_page_index(MemPageDescription mem_page_desc); + void reset_mip_table(); + + // Override basic framework functionalities + void build_command_buffers() override; + void render(float delta_time) override; + bool prepare(const vkb::ApplicationOptions &options) override; + void request_gpu_features(vkb::PhysicalDevice &gpu) override; + virtual void on_update_ui_overlay(vkb::Drawer &drawer) override; +}; + +std::unique_ptr create_sparse_image(); diff --git a/shaders/sparse_image/sparse.frag b/shaders/sparse_image/sparse.frag new file mode 100644 index 000000000..94359efe5 --- /dev/null +++ b/shaders/sparse_image/sparse.frag @@ -0,0 +1,60 @@ +/* Copyright (c) 2023, Mobica Limited + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 the "License"; + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#version 450 +#extension GL_ARB_sparse_texture2 : enable + +layout(binding = 1) uniform sampler2D texSampler; + +layout(binding = 2) uniform settingsData { + bool color_highlight; + int minLOD; + int maxLOD; +} settings; + +layout(location = 0) in vec2 fragTexCoord; +layout(location = 0) out vec4 fragOutColor; + +vec3 color_blend_table[5] = +{ + {1.00, 1.00, 1.00}, + {0.80, 0.60, 0.40}, + {0.60, 0.80, 0.60}, + {0.40, 0.60, 0.80}, + {0.20, 0.20, 0.20}, +}; + +void main() { + + vec4 color = vec4(0.0); + + int lod = settings.minLOD; + int residencyCode = sparseTextureLodARB(texSampler, fragTexCoord, lod, color); + + for(++lod; (lod <= settings.maxLOD) && !sparseTexelsResidentARB(residencyCode); ++lod) + { + residencyCode = sparseTextureLodARB(texSampler, fragTexCoord, lod, color); + } + + if (settings.color_highlight) + { + lod -= 1; + color.xyz = (color.xyz * color_blend_table[lod]); + } + + fragOutColor = color; +} \ No newline at end of file diff --git a/shaders/sparse_image/sparse.vert b/shaders/sparse_image/sparse.vert new file mode 100644 index 000000000..ce897ee62 --- /dev/null +++ b/shaders/sparse_image/sparse.vert @@ -0,0 +1,35 @@ +/* Copyright (c) 2023, Mobica Limited + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 the "License"; + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + #version 450 + +layout(binding = 0) uniform mvpTransform { + mat4 model; + mat4 view; + mat4 proj; +} mvp; + +layout(location = 0) in vec2 inPosition; +layout(location = 1) in vec2 inTexCoord; + +layout(location = 0) out vec2 fragTexCoord; + + +void main() { + gl_Position = mvp.proj * mvp.view * mvp.model * vec4(inPosition, 0.0, 1.0); + fragTexCoord = inTexCoord; +} \ No newline at end of file