From c0ed33ca1710354231d48cdfa07ac5a48ddb2df4 Mon Sep 17 00:00:00 2001 From: HappyTanuki Date: Mon, 26 May 2025 02:07:44 +0900 Subject: [PATCH] =?UTF-8?q?init=20tick=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .clang-format | 7 + .editorconfig | 14 + .gitignore | 3 + CMakeLists.txt | 11 + Client/CMakeLists.txt | 80 + Client/Shaders.cmake | 31 + Client/assets/background.fbx | Bin 0 -> 791692 bytes Client/assets/bullet.fbx | Bin 0 -> 18620 bytes Client/assets/player.fbx | Bin 0 -> 18988 bytes Client/assets/player_flame.fbx | Bin 0 -> 18748 bytes Client/include/asset/loader.h | 22 + Client/include/asset/object/material.h | 10 + Client/include/asset/object/model.h | 156 + Client/include/glfw/glfw_initialization.h | 12 + Client/include/glfw/glfw_monitor.h | 12 + Client/include/glfw/glfw_window.h | 23 + Client/include/precomp.h | 16 + Client/include/stb/stb_image.h | 8422 +++++++++++++++++ Client/include/utilities.h | 8 + Client/include/vulkan/buffer_handle.h | 12 + Client/include/vulkan/coordinate.h | 39 + Client/include/vulkan/engine.h | 52 + Client/include/vulkan/graphics.h | 193 + Client/include/vulkan/physics.h | 20 + Client/include/vulkan/texture_handle.h | 14 + .../include/vulkan/uniform_transformations.h | 8 + Client/include/vulkan/vertex.h | 38 + Client/shaders/basic.frag | 11 + Client/shaders/basic.vert | 16 + Client/shaders/common.glsl | 7 + Client/src/asset/loader.cpp | 65 + Client/src/asset/object/model.cpp | 30 + Client/src/glfw/glfw_initialization.cpp | 21 + Client/src/glfw/glfw_moniotr.cpp | 34 + Client/src/glfw/glfw_window.cpp | 50 + Client/src/main.cpp | 199 + Client/src/stb/stb_image.cpp | 2 + Client/src/utilities.cpp | 28 + Client/src/vulkan/buffers.cpp | 332 + Client/src/vulkan/class.cpp | 102 + Client/src/vulkan/coordinate.cpp | 62 + Client/src/vulkan/devices_and_queues.cpp | 166 + Client/src/vulkan/drawing.cpp | 191 + Client/src/vulkan/engine.cpp | 184 + Client/src/vulkan/graphics.cpp | 11 + Client/src/vulkan/graphics_pipeline.cpp | 306 + Client/src/vulkan/instance_and_extensions.cpp | 102 + Client/src/vulkan/physics.cpp | 112 + Client/src/vulkan/presentation.cpp | 176 + Client/src/vulkan/texture.cpp | 259 + Client/src/vulkan/validation_layers.cpp | 73 + Client/src/vulkan/vk_function_ext_impl.cpp | 25 + 52 files changed, 11767 insertions(+) create mode 100644 .clang-format create mode 100644 .editorconfig create mode 100644 .gitignore create mode 100644 CMakeLists.txt create mode 100644 Client/CMakeLists.txt create mode 100644 Client/Shaders.cmake create mode 100644 Client/assets/background.fbx create mode 100644 Client/assets/bullet.fbx create mode 100644 Client/assets/player.fbx create mode 100644 Client/assets/player_flame.fbx create mode 100644 Client/include/asset/loader.h create mode 100644 Client/include/asset/object/material.h create mode 100644 Client/include/asset/object/model.h create mode 100644 Client/include/glfw/glfw_initialization.h create mode 100644 Client/include/glfw/glfw_monitor.h create mode 100644 Client/include/glfw/glfw_window.h create mode 100644 Client/include/precomp.h create mode 100644 Client/include/stb/stb_image.h create mode 100644 Client/include/utilities.h create mode 100644 Client/include/vulkan/buffer_handle.h create mode 100644 Client/include/vulkan/coordinate.h create mode 100644 Client/include/vulkan/engine.h create mode 100644 Client/include/vulkan/graphics.h create mode 100644 Client/include/vulkan/physics.h create mode 100644 Client/include/vulkan/texture_handle.h create mode 100644 Client/include/vulkan/uniform_transformations.h create mode 100644 Client/include/vulkan/vertex.h create mode 100644 Client/shaders/basic.frag create mode 100644 Client/shaders/basic.vert create mode 100644 Client/shaders/common.glsl create mode 100644 Client/src/asset/loader.cpp create mode 100644 Client/src/asset/object/model.cpp create mode 100644 Client/src/glfw/glfw_initialization.cpp create mode 100644 Client/src/glfw/glfw_moniotr.cpp create mode 100644 Client/src/glfw/glfw_window.cpp create mode 100644 Client/src/main.cpp create mode 100644 Client/src/stb/stb_image.cpp create mode 100644 Client/src/utilities.cpp create mode 100644 Client/src/vulkan/buffers.cpp create mode 100644 Client/src/vulkan/class.cpp create mode 100644 Client/src/vulkan/coordinate.cpp create mode 100644 Client/src/vulkan/devices_and_queues.cpp create mode 100644 Client/src/vulkan/drawing.cpp create mode 100644 Client/src/vulkan/engine.cpp create mode 100644 Client/src/vulkan/graphics.cpp create mode 100644 Client/src/vulkan/graphics_pipeline.cpp create mode 100644 Client/src/vulkan/instance_and_extensions.cpp create mode 100644 Client/src/vulkan/physics.cpp create mode 100644 Client/src/vulkan/presentation.cpp create mode 100644 Client/src/vulkan/texture.cpp create mode 100644 Client/src/vulkan/validation_layers.cpp create mode 100644 Client/src/vulkan/vk_function_ext_impl.cpp diff --git a/.clang-format b/.clang-format new file mode 100644 index 0000000..eddcc98 --- /dev/null +++ b/.clang-format @@ -0,0 +1,7 @@ +# Google C/C++ Code Style Settings + +Language: Cpp +BasedOnStyle: Google +Standard: c++20 +UseTab: Never +ColumnLimit: 80 \ No newline at end of file diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..6a88fb6 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,14 @@ +root = true + +[*.{cpp,h,hpp,c}] +indent_style = space +indent_size = 2 +insert_final_newline = true +tab_width = 2 +charset = utf-8 +trim_trailing_whitespace = true + +[*.{vert,frag,glsl}] +indent_style = space +indent_size = 4 +tab_width = 4 \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9a2c2b6 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +build/* +.vs +out \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..077a882 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,11 @@ +cmake_minimum_required(VERSION 3.5) + +set(PROJECT_NAME "Asteroid") +if(NOT CMAKE_BUILD_TYPE) + set(CMAKE_BUILD_TYPE Release CACHE STRING "Choose the type of build." FORCE) +endif() + +project(${PROJECT_NAME}) + +add_subdirectory(Client) +# add_subdirectory(Server) \ No newline at end of file diff --git a/Client/CMakeLists.txt b/Client/CMakeLists.txt new file mode 100644 index 0000000..6bd6807 --- /dev/null +++ b/Client/CMakeLists.txt @@ -0,0 +1,80 @@ +cmake_minimum_required(VERSION 3.22) +set(PROJECT_NAME "Client") +project(${PROJECT_NAME}) + +find_package(Vulkan REQUIRED) + +include(Shaders.cmake) +include(FetchContent) + +FetchContent_Declare( + glm + GIT_REPOSITORY "https://github.com/g-truc/glm.git" + GIT_TAG "1.0.1" + GIT_SHALLOW ON +) +FetchContent_MakeAvailable(glm) + +FetchContent_Declare( + spdlog + GIT_REPOSITORY "https://github.com/gabime/spdlog.git" + GIT_TAG "v1.15.2" + GIT_SHALLOW ON +) +FetchContent_MakeAvailable(spdlog) + +FetchContent_Declare( + glfw + GIT_REPOSITORY "https://github.com/glfw/glfw.git" + GIT_TAG "3.4" + GIT_SHALLOW ON +) +FetchContent_MakeAvailable(glfw) + +FetchContent_Declare( + GSL + GIT_REPOSITORY "https://github.com/microsoft/GSL.git" + GIT_TAG "v4.2.0" + GIT_SHALLOW ON +) +FetchContent_MakeAvailable(GSL) + +FetchContent_Declare( + ASSIMP + GIT_REPOSITORY "https://github.com/assimp/assimp.git" + GIT_TAG "v5.4.3" + GIT_SHALLOW ON +) +FetchContent_MakeAvailable(ASSIMP) + +file(GLOB_RECURSE Sources CONFIGURE_DEPENDS + "${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp" +) + +add_executable(${PROJECT_NAME} ${Sources}) +target_link_libraries(${PROJECT_NAME} PRIVATE Vulkan::Vulkan) +target_link_libraries(${PROJECT_NAME} PRIVATE glm) +target_link_libraries(${PROJECT_NAME} PRIVATE glfw) +target_link_libraries(${PROJECT_NAME} PRIVATE Microsoft.GSL::GSL) +target_link_libraries(${PROJECT_NAME} PRIVATE spdlog) +target_link_libraries(${PROJECT_NAME} PRIVATE assimp::assimp) + +target_include_directories(${PROJECT_NAME} PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/include") +target_compile_features(${PROJECT_NAME} PRIVATE cxx_std_20) + +target_precompile_headers(${PROJECT_NAME} PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/include/precomp.h") + +file(GLOB_RECURSE ShaderSources CONFIGURE_DEPENDS + "${CMAKE_CURRENT_SOURCE_DIR}/shaders/*.vert" + "${CMAKE_CURRENT_SOURCE_DIR}/shaders/*.frag" +) + +add_shaders(Shaders ${ShaderSources}) +add_dependencies(${PROJECT_NAME} Shaders) + +add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy_directory + "${CMAKE_CURRENT_SOURCE_DIR}/assets" + "${CMAKE_CURRENT_BINARY_DIR}/assets" + COMMENT "Copying assets to build directory" +) \ No newline at end of file diff --git a/Client/Shaders.cmake b/Client/Shaders.cmake new file mode 100644 index 0000000..c5650b2 --- /dev/null +++ b/Client/Shaders.cmake @@ -0,0 +1,31 @@ +function(add_shaders TARGET_NAME) + set(SHADER_SOURCE_FILES ${ARGN}) + list(LENGTH SHADER_SOURCE_FILES FILE_COUNT) + if(FILE_COUNT EQUAL 0) + message(FATAL_ERROR "Cannot add shaders target without shader files!") + endif() + + set(SHADER_COMMANDS) + set(SHADER_PRODUCTS) + + foreach(SHADER_SOURCE IN LISTS SHADER_SOURCE_FILES) + cmake_path(ABSOLUTE_PATH SHADER_SOURCE NORMALIZE) + cmake_path(GET SHADER_SOURCE FILENAME SHADER_NAME) + + # COMMANDS + list(APPEND SHADER_COMMANDS COMMAND) + list(APPEND SHADER_COMMANDS Vulkan::glslc) + list(APPEND SHADER_COMMANDS "${SHADER_SOURCE}") + list(APPEND SHADER_COMMANDS "-o") + list(APPEND SHADER_COMMANDS "${CMAKE_CURRENT_BINARY_DIR}/${SHADER_NAME}.spv") + # PRODUCTS + list(APPEND SHADER_PRODUCTS "${CMAKE_CURRENT_BINARY_DIR}/${SHADER_NAME}.spv") + endforeach() + + add_custom_target(${TARGET_NAME} ALL + ${SHADER_COMMANDS} + COMMENT "Compiling shaders..." + SOURCES ${SHADER_SOURCE_FILES} + BYPRODUCTS ${SHADER_PRODUCTS} + ) +endfunction() \ No newline at end of file diff --git a/Client/assets/background.fbx b/Client/assets/background.fbx new file mode 100644 index 0000000000000000000000000000000000000000..747e50ec3e26cf9a85b987f4b650ef8a66608c32 GIT binary patch literal 791692 zcmbqb2RxPE|9@<b;k_v(B5epCIv|MTkcJoh>0^FE*RIiK@6pYu8ANz2N|*2>+AT}{cDUC9Au^$3G_YDfqZp@l`XH4cOKXq@-tIu6dx4j!0HK75dio1S7z3WAp;n+8J2@`8)Z&<24* zXrPd;hHzVsI=fn1Im168yuWiuLCy&egu99r+KLrW!tJ007a=TsL)=^mY%VOU?_#zE zKZt>-w-Tui0&N9j*=|?b4=01@xC7c5VF(k);=Cp?^t5(F*q}Eva&a<<6+O}RKq4?f zEzWyVEricmS9e>F&748p90P=x1FVCaImc)}2y93J35Ecpi4&0#4f8r!$DxX@}2&WK+$A66$E zEvW)Xpw$o$xPUy#z)joA18r#Kg|OYGbN3Mc&@Na?-%0+Tz3YvI*2i$ev>o&>+V_j@ zt;3=#V$i{iupQ%@^U3e}mka0@+`qaQIM`(WEr+fC{Er>{42yjYgUtqR-*pFP0O^7; z;e~*Ed>dwu140#PGZln~6WZ0y?6|rr`>FAi((&Af=Ij%Z2@}az*iYzcoHP@gj7uC3 z3pE=Ly*+t8cOp3o{GE&q9nZM=`N6~S)P(VZXfrowD<6dWK`<|%Yys?_BsyR#U{eq4 zJ~7OuhOGe&c-~)pV7!dG@o80k!GU}H-@Y8hmV>*5;)j_R?oL?!1%(fRf9!{_g8&Q# z;Ycjef1bsN;TZ^=3@P{p zsksA3Zf^g~XDG zVn|>PU=l+&D->|Y-O-zE(b{|kBWyl^`=-kQ-=RBL01@yE>VyUJH-M|#w)6#^qt&3F zp$RNKPG>87dZ1lh)ZBpx48R2b`_7h906^O$DOiEAiEPU)^AH6Mg)Js5Eh1&$_MkV- z1V1PYJA16)BHb#itt_1mTT^JWEt}5v-%k(@{11kz2-E;eY#+F=axnx;4jY6X#v6t; z*!6G6c(YsP01eC$wlnC#qvB@ADxw@*KzG`X0<-YrRPpKG0C3}eNK(Kjgrf*o7X;efM-Z5kpY=SJ z6xLrF?1bZU9N_|HW1xZX$XB!W)itnrwA_4;jjdLZyJ&k;WQ?% z@~;OPpmH#r3I+~-R8n&F1`E{9aeWeucvp8(mCeC{`C$l({L0u^Z-Z#%{a+E&03zH@ zA#i~v!?s@E-N6NpG@JzMG;0TE2ei+o<*{~k#V(&f8EA8?bz+GRV2I&9QwA=v2fLxY zm96VpkL~DaK?lH<3Sj8q*}(u|g8=65ca)&ypQK)HjE2D030I5YN?}v#?1t49_yvyf zc#Wm|r3%4gum%*|N&-CQ^Ikr3qk!TA&AD zMbQEm=nr@h8MvaY;E}0^M0z05|FxqtvA~)bV7RZgfb|``T>mrf>c4T}Ssu8C|37{W zfIWc)p@HES?h!2R|BKxi01J2eK@2Qx368s4p*%pJ01;zM_0QB6l!HdFEaCJG4(wga$WT`I8aO2$sKaD0h;>*Ak#kqIt09Y zSUkd*roqDkUM^`PP`{_@rXUts*v+j6a%JFaHF?%KLw7%bQo*{O)SxTB0r{im z)B+HAp2bcz@akOK)zwK6y%lcS^ilsA6I{nqVW(i&LY;8KxS_wK6Xe7Q50Jw~8LrsS z-u3LymQQ#f&jVXr3R4`+Igl>G4ynED9Hf7dTF+=8i!4VuINJs1{^G%%CJ}CUFR~ z^;AH#>}Pz!1ZP1>oGAs4A!*w)X4c>?8rfR{9}Ymj)_;!4H88+tG075(KX{ zqlDY+-M|!^xb0YSUJN-bZXK}kv^!4KPFKV=6K>wdWv^u~FZ#j=AH zDcn3P+#hkH2xJKlYaDJ=KtRLO<5$A@SLFSBEItUp!41IS1`GE`+`PeZql%FYY`HfL zjGGm3GqBr+Ka~$CxS9TKWOjqO117=xlyK74S?k-l&I#zCf;w1mfSk7TFu{}lzFqJ%A{xh5ySnh0!= zg8igljUq9HQ2+sJ7_1527MA*)NU0W>T zA4y~r`1gOzfg!{L#VEjqJL|&DIgao~d%7boVP{vEADl^7A4>`LKz=gm!m|#Tbm4AOxO4vtgryMF2+I4Y(@5jQ(MXVFw5h!*V}y5**#y z#ZZM}OekN;>4-IWkb8to>Ik&cDO^8Nop#|H)h?&$p(ba?oJ!M^3{Z`a!rSSlPf zgsB|dV2@=R4FSl1l8nI=01q(O#lW?NFq0=8Y!R+;pl-MT`~t@kYGLUp!Rvo7Kj5wf zmT(i`2t3JP(+@U~3QT-BvVb3r9Bk3{+b^nN6jdx0@IqkChYgoH!okiS{cAE`EEz9` z3>KQc6{rhV$e$jM2k)W$ABkWYDcXP|L>}9jDwyaqmI!MnVWQ0wXq)H2e$6B|@b_Rb zU=0;)ZVbUW+&`c^{UaqT73|3a81Gl--cqrYfNNNuaGm<#`c=a2Fol;6`T)`-B(q~5~V`c}#xybJ&x02?0{aFK!xv;!D@wp*N9g14A7Q}yHh z`+NCq-fxx1=Krhw_xF#m9Ka_j>GWNlee7IOFe3=>%>bYSthsQa!Q3{vg=Mw|;(wz! zv_z`5b_kE37Ka@)n1lz!EVnEz-DdPe)p>KZhFP6zz%}rI81hz`@8=Q`AVUTxgK+b7 zC0yJc`<4Mb@4|XY@V8cAwF|rHn@$ro$W!w9p=tN9WON{l@%zcie-dIwA&7z=cU5t4 z2af*-EEx|VBf&83VGFkmPVnmM=V?Zs5!-TD$P`$@pNseB2;l8`uw$?#7%E)hojAEE zxYIbo{XuX(*bLZCV+03loj7TO)2v_C@@~6Yim?bx-)n(K25v1|5^ny}x&Zw) z$>9jbDsq8*@Ifp%uBz=Yvb0%vb1wor^K9mPpLSGa|L(f)eKZP)CglFE<_9PA5ukw8 zOcz|hvw)4^f7wA%NK;VRs^R+sHK-KER>xq&n*PT-C~ZW%yim}|>hECRA8fFwY8X^_ z3GqMepqOlNit}&}V8Uh(ST0x!JHZY6{l=f}cL54$0E>d-3jXG7&ek}DsW%fT==H6! zx8v_^gw3JAg_B3NnRndE3G*rTVQdy`x=65_7s_~M*tc+}k|=wEFPwox3fp^6K9Gh1pw06j*5KO(J9qf=QV4IWgdv<;iNoA?&4c0JV>94- zDSp^jfd#&~gR+K0`_D#u0G_te4~mNb#(&d3f?UvLuyXx=j{p=(-#n)OuZL1B99$jN z!`|9J`E4-oXRGuDfCo2F1cL{gqbbHvEE;ccbo1y4)FdV-YvX85O0h8Wh}iQ zra@%j_B{an%fRnpg*GfH?BN4hz%%Q2(m#qFA6DQ7Vt{oQ?j8UE53j!?z5hubNPq~- z1FX4VMA#eu8}Sb$0?Kcj%mJIQUvv;$B-mJxc3;f{KA6Ig8T_%f@<3SFz~9eVfQ11Z zKZfwOf<|zmQNSG@xWjf8Gd;r$VoPiWNtB%(-0+k!rQmjaHzBXUkHgpucJNG&rP_4y ze^WOCOScEm5$Pao9jrDj``KGbq_qp~PXIfQ#p47BGzJLx%L2@o$0+zydsguFm*o22NA5qqn^guGuz+yp znBN4@V8L&n62ZEc0Ave*i)d34+IuH0U_T1lURay{2Ha((fEySe9zU3lB?M1!j+!cX zz@{JU_F<3#H^3ZRKvUuJzYawG_ddW@kGWZadSO=Ky2-vr4>u>)LTuLezTfPl|6cD5 z7VkgyeH7>tnA6BcaxiU!FOr-LLLfM- z?WFzNnvZQl_H9>gKa|>WpNK?$R}R&|*N>$i?g$cHsDCctXJs){~o!I=!($(>z2G^UHsK{kSZEX$ao^x0i zcGb9(6kp4rYo>|Vc_P!FW4!38&!uA1dxafx%j6+GE<8=1Ntuy0WMteNN@|pd6O+nA}9^0zNe9Y!!*ipU86ktfj z_=L!}^IgB`s#E|Z(*Aaq(#?%DYB!%>-%y`iO2wMrowozjd5!Ls(M)NBpj(KowT^;8 z0;gr=@<4DSb5l3*0M?WXzVN)WlJ=s9ISQ(My%(o%?wB zd83rT9kp<0NRCiNgNCd+g63FIKl$L0QY5_rsTCRLDH^5tP@cQrtT=;6RS1czlQP6^ z1d^ner8dyvt3cJ3c^PrxZ4_DJewyW}2C3ux@155669h_C6@5*qm|Fa{JSTN_isf~h zeAW2)$m^8eIghtRoePVP%WB-NIPWEhvvsd3EHb~7a$QRx4eW_VUa#?H_Nqm})g# z6C!AJrEl#ECRA9G2$J^1E*|a)lj1lPtD&Tb8jjlIYUX4*-tJmWK$C%KnsW*W~wp;{tg?_BJ9F}iTRU_3{s&d5jc8 z&~+MaXp}Xd9<(2>{qQ<$dU8X8pxrHj_|v)M6~E|+z9Yp0-uKQDl(fn1u_-*$*B)JD zp~tRK>hbh+a{4~+EDuVT%u8Q8c+@JJmV_B8YC3xx)rH-Ry2_??RJih~yE{S|@GFNq z5#%qThT_(*GL1B+$)`Eg-YO{!q#&tjd>Tw`S&^LTg9zv&C~$N3pC_S+ag3%NFzWdt z+jT#bhbWZ&VJdaA(M)W3+n&cyQum2@C_1g(z(g@g6apc;;y-$G6P|i? zOz+;=uCjoJHl){^FMUUuya^RrOHMkiW%^FuOh>Ihc=f<_KB@MO7$Zer zayxchW5zEU~U0TOl4d9!=21i^Rj7Q9D9vS}xFVXrz}5@~wO7$%tc*w z(MO*RQ_T$S);EyILL<*U{kv<hIO^jvFG1CEZ zPIGi0eziq=(v5v25vQX<1r|Si>raFleO1>IyhL4GgcHtK+Vh;JfF8<9=EqPh*V*kAN{GUYTE<^q&L^lcsAMchB z=|+naWVZ2*YK}SQ$cdYeNh96%P&pY0GpF}Oo76j1ww453E$NupgJdDJVEf$E<6#`o ztDbI@Go8^?TP+-PmLL*;=|IpWkYI%kx*lEK zLhGfQGt&HINJ&&n(f06Z#tZh(KkL-yst8cv^Sa!U%tMej4hr$-?NtlYhT=3ouz98X zl=oyrEU!&kKVV{hW7*|L!JPbVMrhqn-&NabUr=Yl=wbW?{_0Lb`*&Sk+1#SkA|6X4 z%p181C29)3IY%JctJZGXqSVWpVR9DBrsKS~Y0}cnPp7bsP48TgdeY0Aph>SQey^qX z%r$XFuj|vM(Hg~gd;D#BS`q}N#MM5>4XHI)GA7ALBqhE&SJhl{fHAvOAwT4_C27I> zWjrYYcDz9jQO&=uKRDSQCiWG*+7wqSaIvSPdZBVRvU@_C~Wj_lMU|W%9q&=AYK#ADc)d>X$k_f@kRvVAv_`?dXXb*YL9^&dM;qneB_{ zaSrlQ8}Lf5Ier=C8u#YZ_(Ku$B9if_>3x!u#^jF@2TJGq9|%#PgI=59&G0}HK}@2W zRBCq`Z@x`gbCEKO?XW~1bC)Yjg~KOPx( zWnh(5VLzprctJ(Uh>_81_y%4V_pNc2=S_?XO)Tn2k6N1cm$$A`wjfilAw|7?0$6N&4py?-FCwgdU|X=w&Q8Y zn!^fZ7de(zT3SxqH&KZmluliI?t3tB-}FPi-lF$>(awe3EEcqQ?NMi3Nbd){+hNgU zd6x(|e5(28%R}S%q5}B3c#*!EdGafbqG1=_zt<{mXkdC{K>TdVEGdN_^8VIwz0ULX znSOmYGpWkUU|?sQKk|I&P!M4j-Isg2vqw%-R+lf=ca;<>GjF7xbncgI$QEIw2tO&> z^2R3PiIAZFY5BR1Hiv-{Z6{K9Vn`s@McB(i<-}1n;xvw18zc&J5PdPEZ$0>V;I z+X#B72$uFnPms74X0Wbgnmj(2FQWc7{`@_0`ws;Vr9`u%Lm#}Rx~FOVSCr;B{q!5C}yqOv*`JEfz#B+K|Iz6FOCy z__#OJZl97e4QsUNr=ldvmXxY#r25I#v%pT7DVM+T>^b-N$+i9gCyMsR_Yfatjf-0B z_lg(CD&#Ht(hL~p`7=M7nmTm+QpK^ni3DG75+@n9k0a$NM*aSVq*2$ET4G&ZUg3HE z_{xXnh`^O4N71U0uC66++H;iEhiT$Mrq9y_O+ya@eNkQu?8Cy(-uINRj1p@U9GbKa3dZ<1T3flFubyQ&>4R47& zYhFxr5r02qY|*WqqjpgCu$Y@n&;aDd9O=HlQ+4fm*m;%+*x+?C7sL?Q{= z8Q1b2>z0pwHT_s(P!M%><13qF^w(qjA$A8`8YPR(w6c8C_dJsLs=pYMp|&eIDn|C9 zkI*O!GxN?aO;M?eg1geC7NHZR>StqsCWaqcp4Z#C3y?(PD-1_-AF=`ywK^3?i@gd(R8XT^M!k_Z?nx z5t8$a3imanAvCive%hQ`F=&xwVw^J2xF%(YUKg`IHBhm^Pd#hZf0lPOT+yd&tz%}7 zNtMW4MNNTB-O-3Jo>2c6#%+P9EMeo>g?xgC<}`is*GT2;$sQU>YTizGJJDuv3Y9=T zKd&Au`iA~h;!rFfUW>HADN|S5nIxW1bfi|09^O1xECHV5zMYqM@TqX`+R?2NOWZ2v zB8Z=Uvn^x1J7>KaMgQ@us)y*|Jv~k8dA9Q>Gz0q&jun=_v_iErjfKa-G{@fta^T_x?1_-!i?{}_F)l|3XmP%H_mm z;0#hKbcp$^QGtb=K2_`T+{n0lJW7D@#OgBgCh1@MqGL1sQpQlp%8lVBeod2#kD61Y z%TF`)+}mAdadt#aG0W#^eSSu_#QB;aci)=MTQ@VN7WQ{CPpB&yj9y`Q6e-wA-%4uz zUSB?8fNZc&spW1Wb$OkHYgWbS>BY$#Jg+V9k`S}tS3Yap(BNAr7+EbF$$3EFeK|d( z)32{`7ft9Hb3Mvgl$}*TKrP(|SC8ekH6!FMqk|S{b>E(f6paZ8K! z+o74DEP|@o9JT}{Y&n5Jy3v=p>EmT@P`nK6-F-TKDo|-+Ivy7lB<2)!K)T z-W$`Gzw&Naa?`HQ6sC^qWXG_Pr%3xoX^%4ni#r~SQpzCpi8-p9~<@3+x9( zW=MmMzdX}VmELT$LIz#N>!SGZ&EEcX!VaawHI53Y3L*k z1EG>Z$t26b{Q&!6osf)TrqWM`AlJ`ir=}+^nLc0}Bg=}R%yyd}Wn5V?aFdlQc$~=W zeFjN+W4NO*$)n@O-08iv=SVG|m84q<37m@0{HpF`kF*etFd0vcWW9i2pJ^6>2MM=a zzm@lbj=0)s%shmEA&7$ZDt9minMBjOhhGX$<;|yTNYn;pun`osw$TFvtM9Z?k~3$( zhX~}C6k9ZH7uS9NzFvXLrLtmg;KEv!0K~0-Brd5+Lh_X3$Nty4QM5sfc!&5xV}t#n zN7?tqz51Rx=KJpIrMh+Ve2u03J2u&(nHFfTWUoxbAv>D3#ESI!FT=NRbx#^1Sp> zx7tKDO;9J~O&@dwA}92p`(#Kj@AtVU7Zv}_$hX7M(^Jj_>Dc{^`YD-uNMeX~ufzbG zGtJ)W%g2t8t#Cs5hN~Yk>eAYvcZKKAYu)pnKNqw@>OCJeE}Ce%Qp}X~m?9;6HA(KI z42OCb4a@!4P5iN)2R!bGKdw94tL0kan7N#eerv^2#^=LkmSq9W@rs1CCC$F=YrV4b z2BGams*CsSd@kPW2RqQErr}|#lkxNtiAnERO;iM zFTdD;K%9icpfR6RWxVQ(H6o+vcr({4k@pw(U4N~%FH=WrkC%0r3%RCfNrxq8#s%LC z_9AhS2Q~S;)L!j?uI3Rj7+TzVd3_-IWk7yx&8q5GW(tz`#)*_I6&#%S>iCU~xzZYv zOsoN@&XwV4DQOu=0e(bb7r%bv==!sv8|TK>G-4%tw4jdNyN18@*j}(9^py+hh0Khq z=_&iKHC6LN{*mW3kh0H0`S)8qK=N9aKY8n(bgNCxUtGGpUo1He9anfgs#2olXjSR8 z#4H5(-zk?gpk_#4RIA~1_Jc76y&`CE_0*9kM$wZ+6?>!lCs^d~GX-=z_P(i4uCYYx z=gillYHFfKYeHs)sFa0HCtBD-H=1?XOqzC?rwBb#w$h5x(m3~WAuo8`yra>C^Yh)1 zz=+n4==e6_BZ)OFCf=G(!87!<%xiLoD5$>LxS=WT71~5brG#IhW3YH;eDG4^XZ+!l z9Sd!adxB3eej-r3@1Xh&Wn6}+ncXSN1Le8oEqm?b>@8DJu{e4-Yon^3^Huh~`Ist_ zT5snO)&7tuQ*p*Ud~$_1xK8BUJUd8ymr#mKf&N%{qRdl1#~aeaiYyi~z4jw_KEEDJ zVpg<_D{@Krdc^s2zQa zc>9Jx?XJmec`}8O`~0{`i&WtHlfxCR_B~G!!*>UJ6G@sn?o@RO2Fx_ZIYqgUDq7$3QI%Y=peOm=H`gU6E`t9SosTql{gZlNLJ)W4)2=hG0tHjPoTruR@AhjWl?ljG)9k-5gTA3KQJuh1-E6%<}t2J+W zEmpN;x%NiNnYsI%M-Rz1x%sQ6w)r&4%1FvT@JV>B&*f{I|7J#Q_lb_?x3MizUdWIb+rG}a&+B`xi9X(VS%Yi`c7 z+r*5j@upSn@@&8t9;o4Nrhs8)Y3PG0yQ)VvRf~xrEEU&GLnu?3{HfeLH6`+S*NmG0 z3)N+syB4D4NL|sn#)U`SPnaBtGpUcg@gESBzI=;7taUfrP8Ayi(qz(Hf1)f;s_Kcx z57xEncQTSkX8VrpE-CFmJvif{b(%KRsf?i@G>8sFnZy(=PMN;EK$8@#?1axNFS&ABlbyx z9uoiNOX?pJx=Zq{^aOf(KJY@p^~Iq}=i62cQw`+fl+b3MBTXeYsOPv%1wEUizgXWr zE8Bj`_g3nmPCn-JXBGDt6v}P-u;FC$~6YWxoD?>H1xoSBOYd z^)haY4SKhvzqwZE<^GwFzfMj2+W|@J)N%0!%g*!~S3<C}CLAtY`-RYrP`g!?Fbr z_MwbDtgX4)ns5DU+nL1Bm!gsOtSa0qhWFGt*_ih-PsqP+42Va7;HT2!wR8{7!j{Ho z?55H_-=5pvJKk2AKOE`ibH?XhyKdR3oHhaGM{=?P_vea>h)`hBLnYyY@3qC4-lOo z(y2=d;Uo^pAhvU4tR5Ge(~9fhQJm+@tZa+z3m1H`gLdui;L_DkP2Vnry+!9{pWRs* z#d%GGpy%k3ikPr&hen};HlAEulJ2UCDz>K0`ea(mJ2d(BXJwRli9efWxaW{{wY714 zs_d%Ikc^{wJsa~L8bVS&Lhja+ZY1o4iq2t#8hln-WFUOPXO9eUv8rh&BP)1ETsZ&y z^_Lb(=5!&M)oTwKK15sfuBcmZdW|a_U}GDLwz(~IA)}w0(~8;AX-+o~sIBNF zbgOFr7rX;CBW(o+D@M>f!IDS2vE&ohn;&%dCi}e{JU8tU??1)jddC@bqfdJ66CMsR zJ}u3&{3=GG`mZUK2swCcgC@ReN~m-3DkO2FmA<}?bOxa)M-A0X+TLqNNgv(_S|sIA zbLLYnw72al6L`;0*=$rNmv!W?(t|q`RXM;%h3mu$e51{sJLK%~^Ml3hBtQ5~N=~0V zz|lF$!pc^pe(?rS8nuNzyS1QUCtk!Y1S8a>}V ze(4gAD0lFC=Mt^43z~}^8qDc-x~ZISU>In0pMJ;81bgzHdeGtJRA)PE|q*%L1iD#duy9| z7r`=p!^Bd)Tk?|JWC(j3`)8PV<39;ZW~2_1asJ;m_Rs_wv+5%cKUz zS6g;eGJGaGko|Q^Q~PV2WzTF=J8wBc<*x_LGRHb~D5xmtT3v#dQ)fqn8pr=aeC0&lwVc#bYtE(79P@OWqmO-BYaD4?TUd? zocsPyMe43dniv)RS+OEjYNtn>1p1K0+uXe~veV3_ZH5B$%Ob@dXs87V!vbi$==E7(%7!M zy!Ew~_C_i6p^f@|!8F0u{^615OlbP{5vf8-^<`J0RIf&=9z&a{a}>li5)tm#J8-I4 zm#(#~m5V+hHDxSPr@}P&&G?KDhHJG0k?BgWW3A^nMm!zntbW?|=ThRE<&pNv@a4ks-)L*HDR z%~DQFRP>v>cdCzFsF)i0n%r#s;+97_ah0i44F50@r|;7Bw2F<-=PvcWm9~tV%0CfP z+nQ;(xKNuJC?+o9{~?~9-uqKG-_2C%;MOn4Zm&dG@~$dC=yL>NP2#!vxgUBO@lzj( zh3vlHG}QCK)Jy!jpV%pZfb2o3fj;9?en*T1J|>!!Y9dYh_Jt3}3^~^IS=9$h&Kq*M zJg|6lt?xANEn|_?$1*HM(-hraDyFk^cmoNk$rbNjyF4D;W`C?^{qUvzQdB#5NS1F6-7uRz z)H%n74%p}o9=$Nu&6G`VTXwR~RO`w;GGAF)x#JEY6&=fE-4YI2v-pYvBlMR-!x%Vw zZfHL-xwf=u(87B4O4zzB#o9}5-)m%{N*o_qse$LwQFPdL$BQ}5@qsGu$(6;Z<9nh4 zT4gQDJD@>!)+k}GTQ!!#j0Rs4Sc`H~3lMz=2`fylM4pPLY$%#yP-1xyy2N)r?ez_o zs?kTgcMdse<>buW`9!g5<)f+WK$&GiQzN2NR8`#DNC%asy4^>!b_fXasnaZ%F_503 zsT+{Ena7n zcl4Jm+2gA9Ep`wD$VI-OyOKd_99o_G-YIGXcC4Li;p{8( zYOUtv5zk&N2K42wi`eY+O4PaS(!*i*^G z$|!)hL`A!%PRfaI1}*DeS=F318=K!inTSw?>wejrRFh~^N21-m9veWt!R_Q(8z;Z37L+Ox5 ze@RltfwUJ3JI%5LvP|NO8TTAu(r*&WO)}98ihSdMI$t&&Cal#cFLuiAk^@kP%Uf%x z3(M9i@}((D*`6<@W|-A~6>;69u4k6+j@@oyxd)M9apJjIqV+p>9CxqKHk)<#@;t_L zVd~wPp3jG#^fLDGBUbTR2nJms)PVaD3&I&nsPnP8(RAI@&licW^sbCuw7YMs^)|C= zygOEyv4@FR37WzmIvKRL0_@?0puRRF$xSg?BF|B!>p3<#9T}6PS2<3@;jE$JLN0Av z6NgV^UtnOFcfsUTqwMRb(?MZhWGEDwB=e>=Dmt`!-p`*CoryCrxQH)$(bS2CFt!8C z>tWYO?$D|G?tgq_M+|xAVg_DAZY5!-Mb7X-$hA+;1pIuBUG~~;WThZ_TF!JqrwIlH zA+V_kEp>F&*X!+$k8d>1tZAvuy(4;nDLT(-*sO*x4&o#6GqfOj&(zr|Um+&xs{4)E zQEf@HdF7(eil&gareEJX#&VZC&KqC?@1KLJMm*Y+i4u+*jl;J~TxP`MPz+)S zjTF2ZrP`9FXurm9IxFt@%O}s3h`qL4 z6=`{+Odu!M(Q&y;Z{R`EUewL_{_*(^JX$=rUFm*!D>OliBElLftPcuIE}gqqx;N=w zIaQJjN_uBN69{~No2onFKf4$>msz)QV_>CgFmNgFGON1Uy_6zXi5v=&PrU7OzM=)8 z1z9xtMYosI5ik8Ld_OOZ89n)kF6o^d@NN4xRonQ1bG)rql_o&SopeUns@D-l5NSB>{HizWe28K)wzID-kSU0YJY-w7j zPaWU(jW@|BglV@z*C?U#J(FWa(W$zd?9*H+5;4D-Y(|zQ_N^pQq1gSKb(wH8f+T|r@;k3>~8}MrG?W#!F z(^H`(grX7&U)V`4=ER#zd-zcCnF3j{kU>1d8Lb^q)U|PI!IbklK|}Ecj|QorTz z%X`WF@xX?~>a;}a*9HMYr(IDeU!IG$#q&=lp7(RR?bg0ZGzdA!$`6Tt86oK&QLWF84|taNQmYcGQnIU1=?Fp$`(Srl)w4 zRzsGzTr4E-@tIf8{NZgKA@Tbj!*31}bTRH_TD^beKow?;du!_UCoPOtwEtV(L^_A`}fY7mYBpsOay^T2zW; zBd#$7ZXC0v|9Mgio~Jvx&WC$_y=40SQrYLZxOv_3&s;-`XgRi^I=pW?UpavT@Tmlr z{&*o71jY?WrVYeBRA4BFh_A^%;~cU*e2+`FGmp>3&qjB^$%&sI*iUu|U+)$591 zAg8EI4oVht^1gTs&4^Dptizy5b({U;4pnf_L{n7ug(37Q$*A4k!T%+fcMn#3Puydp$hDn_H_O1-e zpX(l&EODoiR0yN-!B4%eq)qlT)ZoB1A?X%PjvGRjXIxmns51gDHlADRK1t`ChvvOU z{x4tV+0Lr(W@%Vx4{uu;SDBB?@gPs0ytSy^zMM+)indeYRSo1<)_1z}_#*T5)zW|~ z!;hSbMGr$GdOA8;cu~-(O*j{kNn=}R{3Hjn48m5Zf+hAviYDLcJ+sUHN}>Z}D+l=0 zcQP&Urn~Dqh&P{XcxSn*hC=bdxYuj4h5Gw08bp@iiD?G85ply@`)^nuS}A+kC?sfh z#An`E&EbgQ>^F<9`j59>EoQ_iwVrwJeMD?7IxbN*h$qW4Nj;&&F}ynW((zZ?CtNOW zR7_m=orrbp?~QSIbfEx$FimsJvn)dG8IMJlqHjWE%%SSk{K4hV_@aS)EJalwp2#~k zqONSmU&g1)>OJ@zpFUQ)_G+dynL=z2+Hur*SA6`p!mC$DpeF^N2!x>uFoWYm6fVsT zx+$?qKCy`rP`oA|1IzB15d_pIl%JRUc#&8++Sn=a-NlZ-h730zJhkurL^xkL?NnCW z(0CNjUtRMIHQrIzTqy_SL(TK7yHgG7WvIAmW0Cuj_D$fJV@{a}B=)Exf;eKrUJ9Mf zz7oWK=wKu=a&=@=Cg0Tth0N?dXV0NlJ)OGUa!(wjzgmyHZ@fYrX~E5| z-I&b%{8C!LAo)2NmmoS}l0nx*pYFLe>SdK|InIZv5&ngto*b51=dTEIM1u88?!wzh z9(j#HyICG1sZ^oZwismPhZ|3{%U|7kUp1)K=XGB0mhf3}XNNNSy(KU9XSK@)35n9Y zHI*aLry9)_t1opnmUPPCRZre1cQHdVX^QQ>Scs-|<2$6cE{{h$n!b;Z2%mlY2#h!#J23Zc3xUeI5sAE|lr zx_ZATXJs2v*20svZ%_S6T-S}bj7Y8ujbUyX$0t)G zGwtPW<_*O5a*OQ(cDZe(F?uXMJV6$`ElnyV2+JEG_F|%>gzxry>w4czlt1HwntGJp zpi;{0*gIgMQ}E`sljJIcdP{!iXQC_V2hV-YHjsFgtxps*@4L^&fIYLK=&;x<%h`%4 zN;JA)gc3RuG>iP0ePlH&KX+;&SH|Vm8h*c5aYm!{%?#FB?FwEuoggh?|A(1FM^~7Z z&c>$)GMD9r3cfgrrdK4zYwB`~OY#bkAK|a4ZKQ^lJ~VzayU*OaH1YAdaFAh=r>4`S zup4Xjf}Z@0YV+vi;AjT2>zbc=eti0@Y4P6Dk}}rNWlS7WLn9lbr>&Xw)|lIN zU>8}~I=|M%v!Mb^c%raRH&^+hv1;SPe50O@6Vv1K88z< z$zPV~(z~8C&2%B!y)ofRLzZQ-&2u8lPutXvY$!Jy1-@TedEd~P&o6rO)X2l*aY!8e+4=kX+7uLc@A2D~by3`Oi= zgV_g9-hb352);v^sXSYeX>pB_AOo_TS{Dj@n|J%c;*NtNm)yg3OF9ok2Xf6tNJdQ8 zUA@|Rj(FWqalY3;KaJt`tEpIaIwgW7yR7*&&GC^$pX=vMpi8229_AxMH&br1L$1)w znWmL}c|OrKX#_KiM#H;{)qF!lkzb2=_}41h?wIE#zWX|-x>&^2b4-uUM1<~wdYxxL z-sj@zvrcL0b7eB87u=ESz*9MWy=k{r%=o$J$o1jwv2k!JILYS`oBR-aCqa}s5*$M( zX}<9CQ{Q}mK9mY z3%BPV?~U8LJYup|d6dVUSIJ`x_+j3^3tE$e2`t`DekY9kr6^idg}MORr~_F5)|VaE zynszKj&ZBW%HGM_-KC{9D)3|c%kX`<^pmf%nHe^`kZjGu(C%frq4wbF$fIAQ%40-3 zROG<+rSJH8^$*d^4IlG3gOKV;xNpZ!ac)qC#~Q#MIig-04p8YfgyCDN$3vfo^=k)q zH{sfQl3b|q>r(Ky|4{l|Mxha2-NfZ7p#pwi>pdMl`y4ZdQ2oC0V(F9s*=8OCA|{v4 zW!`mz;Z|u--isB>padcOkl{H0d-m|w+}!RLrTw9`rBX?mlnQVLe?B#2kj)A0?7|T z&YrZuFtkGA#E0-px-;Q!3fe*uIHPv}8@GL%vc={N>zJ49J|F1H+Wo0dSA8;%C|3RF z!euR63Zi8`kMj4K?0>Ui#|n2&@Qya(O_IlFtXlua$JY(*a@* zIWC{3ro1opCYRQ%7mshxau(Sx1M>0V{0O@zRTiGm0iku}i1`4c*))wZFo~Qk2DZ1+ zgj0(%H{7QSjjV>B!x!u(7QVlE%*lwzC5P$~SP8aTJCza6+TNa0&D4C`)N$I0?uyizXBcZJ5Rb4o}c53z3NTg;>JyWwdMe{w&E{SB?LsQaeL` zM%W3EHrmHYQOoq30*|3$p9p?Hp0t!Lm00ZU0{W5)e?=0&rNd?fOL5_y;wdkTji=uO zk}?9nb0EFf^BTS=8w9Aa&eb51r2~T0r3Z#IAI*l+9Djx$dxqITzw1EL)gsxiL|c;l zYsv-~%NiEeUQv?>5idgIY9|CvZBu7Da@CCX(Z-$=W*&`EF5cmQ0O&UR6ao7`SU+=K zwfN#*q|mmro9KGp_0xo?)4ViW+n}o_n;x7&!=OyG+wAyy6jxAf-=fVpl*zmqxxw-D zDub#cK057_@H2xf<_PyM^>}I`jYk0_9Tt^&)i-lW2`kJ8i{*`Zm>gDp=dS5|(vp*? zV)S9y)rbf7I^}+jUmh_4Z|IbZKQCZ)Xz6(~^JV$KMVi3*V&={Za=axoluxPe*gesX zR$p5a4~=SS+KT}d_AkIsFwKWZ@`(UcO3}&3nM^9|}1Qd`M|w;<+yF#ZrqEE$N~Bz;u=z zC3!3*KB^e3+Q?U!l8Z}AABp{?(&FG7Gh;ytIj$rs)E zorbR>PBAiVAtT#*e|Jt=N}9cPr@b~>qxqhl`~n%`l0t8F+UyMS))Ye}1mMSg)|{ua zJ|@(Z#5LWL=8o{2z%y|s+haC^&%|MMomEz8hO%m z?y5zSAF+4M^F_GTecFaq+rD`GsKa8a+EWD$?+N706-_t4)x2If^XR&za=;pf9sgr$ zG^Pp9$-#EI&_;hD?vT$D31pY2+xTXem-Q#7)Fub3Y4ZE{D`rT+ckb0&=Q{lWk{oID z2umnYz(nc;B9aqaw;|qn1mG2+o5t!wJYcEuNxbo9!i)A<oz!;EaV-4PLb<^FwH*2%1;!HO&7#1o@^=hPSZ z)cC`e9Al3+k{6$f8Vh zea_{?2=PBIUl`i$C<>Nb^5x#)0rK#J$!Vy+S8pvb_c~T{j#X-TRV`fjZ$dZDMXvT> znP}Wyvfl6uGzt24CU^DLAH&K3%3U6^;68hs(Of+Y16^PD%sgKAB+XXfxk}E_fV>2N z6pfJ%@e!4|uV&vcZ$7fk<%tIxq7Hw!cVk9FHixB>tKs#PWwm3DbjEe zmn%L2%_3^ZvInFd3lq8RZwsZ1`0JKmoUj*dX({chg{}5K+R#*cLM?`SR(`g2HYYUN zL)obx5rRYz&+h=_(hq;d`?=Tbw;IV-T$;vTJC0LczASvRh0Oht9<%sSKz8!i104zV z(?=r?Ak0NF=w}#ewSDQT@p2C^emHs-KZS`reCHFca~mrT2|3BJfXn_;VnLRY0%ndd zzpya()E$z=>%FMs#u`JZDkp;1ae9n!&K}qz8q}gt>-J{Rd7lBX{FUo{KWupg$@3S> z@Hl$rD^nGz*Xfu)fD5tE15a^!jsBW|KUZ)CqO;@{$*-F&T%3*)$aQ5+?7u}QG@iFD z`yDpbKg{Gj6p{!pwH4q2gc-u_gHpCD@bPPlv8QWdt$0Ig%*Am3-T9}GB3D7=E46JZ zhp&qZ;Ax9(2=n$@#H_oIdk3DMyZ8*w0bAG@urTidasEk{dOWubo zyEM&U#(+SD7@9(94W~=;X1CpdX}4w3l$=?q({8=n+Tgd(Mphs4cxuBPaaTU8J!#>< z@-lTG<*7m-9h~M-vz{N^JH#+$Z&gVM=Lfep8ykqa>HC|b-$|gsoJ(8#_7i>mB1F;O zRYGO|+~QzD=g6EV$$h|RW#rrycRG?JUTXg_DGD}IQ4G$LE94=PrX?jd-**+CQUvsr zfIfkrD_5`on6Led*_-H2b6HQjl&6vp@c+xxvOH`$G$risBr(aglMq(mU145Fyf^;F zsqh#WQm~gzL;@7y5WersQdWANU~=Sp0XMDtU3xn32|d*Q$_9#f+O@wK$#dbA0NV2q zI_7by9pvBZqJ|br%Am@;)3SwS`$;>kooe-RhhISr?+L!RQR8;MXY10y&52w}iwU!* z?V+Njrh+{sCDJfuab|TCZ*OivAEl+s`StA)4;fh}CcXs4Ms58&!>g&_GHl~)YJTq9 zgDP%(a=4yzYgk;d-}0@Vbq15|=8!Z#<;=Xcu?F-bZ)*B(j5}4OE+l2_G-5OAqRRDA zAIQ@s9v^5FZ_j#U{b(iBlc5tsqNiiYD&V5nB@V&Z6WBmjO(}=t9IL*_sdC))wq9jf5 zxM4n-msv?p{9(brOk1zR8|7U`#u@RIW+RlT z_g{V5@RyMc01OQq?cKkO*HdSoTyE=Y)mcICgU(0Dd7riX5(V@Dbr0s>^q5uv8RR8zgi>jFU<;NVz7uGCPpXI2?|FS&bb7-c1 zVvfvGZv&04F>Sj+d_DQs=NJ41WSV1e5kAz>CS3p@pL`PJK-fR&DUY$!-&a8kR2V3K zjZ)=J@`2P2TX#}EAE%A zhuCYwhA&IM$?d+r|Cv92mt#;~KYyux0+q@R%ef4@e>6ZsOX7a|NG)` z+QY=sS6E#@g+daa3RfNXaqM2j@OpRJdDZQa*MXlaY<4its9A(7V{*>`&d9EqRTkMz zorF>lzK8UO9wUkxK&cbzw0QE|3iszR`8o9Qf!59KazcM$#*=2iZ zXm~iPo}QjQTuDg@g~mSIM@viRl4oHd_awT%li|Jcx1F z5r4mc3o=N`eGz*znCZgvV<9;{E^XPw-a^lO3)fZE>|VyFaXCBV%`~7lO|rpBIb|2m#CpAnW0A+TC^NbrC*PtFC7>wl>Y^KVjhnR1f$w1reKpvys2SZ^nEHFd%)0Hd2p zywRPKs5j%`>$}&aph@_4OpE*6c)QQ>^EZlPER`k}&WNMXtfAd#eobb?Dup30LDF~A zuwh@acLvgMqm2$$A}Jb5(>Lwn!(Xek#6QBO^)*FHR3!g7FKHf80}WMl-c)S$zYkQ# z;fzS}p!1JYu6G_R{WjgvRK!*I3x7sbbvs6*Iw|6zh}0P z5GQu@`q8Hw%yB>DAST^BcHq&+x3}86ebqGj?;U46+dMh!$`jgr-(cIIzI%Sx^t=JA zxw-R%a55x+iNwqQec%4+sP$~y{}KBpn4#(^7y3t&RMbfSqA-{{b}HuG%#=RoU!lcp zZNAB!j6ikCc9B1$zi9cg1=U{zAjgwBEv@yJ*&D1TgK=cDaUEou@cGUI&8&2GlMw?% z#cJn%|AaO)tIo-&K&2_44((EV)aHz~a6{kw@D)7VMyH_4eJaTJ1L22apX*_Do{8O) z>w%>{=Jbyo@$diAsBO;;-)UBn`(4UvQ2eaqt|Ry>*~g@ue12O>uf@MaRdBhSY`;B; zqz2?r5wTUneK3i(!YdZ)+KDacfi|pNx!Tpx+VB;7@x}^Dwcya&1pasJk;vFM+R?E{ z+PUr;MLFRa>{8T-V z8=UA3R&9j5U%ZnJO>kV`4P=K1YK(9U!{v|QouBmhY51yjZTR^%h%@ej)He2v3=v^O z0m7(_(c+y!;-4cF_+#hi-I=Q^Or6ciY!8`9C+CZ?S7Ie3DyH4HC{)U5)cGc-IK9%`Z*BQR| zDdmCVStR>_!zBI*g|)3>=jBj0EM(6GMr}CRHG`_#c5Y8^({_YT80+U6NN+lh=JT>y zh)ZL{LKg@T#5m#QDhRV<`{l#@PMKWMRpHkzKTh{Dh-&)aEguZlHnm-EKD-fL{lO*rw$sWOm8Dz*DECt@E#^2X}v;5Z0*v+2AI%huY|(SAFo1d*)-H z&P<$X4R6#Ids)L=66|J0Sj_nznGx?Ny2{hpyl%XWF@1=IZLqE>dShXtxi&`llh3k~VfDi^mcBS|_e=E2!12i~ zKKGgXw^=EN*aWp`&yU09n!fOX`}D}bC_wDV^4S@4NgE<{?l zFi~Z1XvyJ+&P3%~4(6G>GsDtjh7Tk#%TW8aF5_nJw|SfxRWeJfmcgWnPXJL7UOkX3 z@85hG-xxEqsZf@u-lVUj+(mwZi=UqdH*6!%AOGeBbgF*O*?vm$_0X-U)BIhHXcCh7 z0E?+SOMX1{tSG&+nv3f+*gdBLU!P;~v3dCxxfSZt{U`-b+eP6seK~3^&?0LF^Vf zCBg^ZuNa+>uc>DeUYMcK?mNA`HgdnoN_p)SJQh+>{BGC;A;P&1KwoSF4<&2O-eYjh z;%^9e`72CW7TdPUxvrhpYo+u9`-`RYzh(l~aoEOCs1q3q)56ltqjJCXRBL+gYii6N zN%7~!NV1}UI(OwCxU)E)UM9V(*dW8EFyO<$fIwCJfdvtVMUwTT2p?a6YiJbI^RWut=k~w49u*u6lj)`FNG%#(kI55PRLF zJTWOE#3d5w>|lL3^L%-^{e0;n>)%j?3FsiRuV^Y_Sy`N3;GddbU)We)NS5o1D8hj{ zahmiKw_G&pPC4iU&UVeaX2rb)uwFw%Q9w^>wQg0BhafJ!X8vgU$=I#oD^uP;cO69* z=BH&pXT47kj1x-PI3TVAL2Qy0M6`VJH22|Gau`0Ei4qz!=nMEDxqgtxQyyt<` zw6+@A)f_r&lrF4|5!aqLr9_wl6U{V44+RMO+S=xYec*4>0XRG zcs!#~3ITkCPy>EuX5c#w;UBClsjwm2qf)371grp7u{PZSk3(w6rhW|Wxt-u_?^6G` znj4aV^eMN_)7EvlkIBjM(emjznFGhyoCE}EH8piV!}jKVK1la+AqN#r-epj{n<7fN z2&MFnXc<4)%!BC_a;odF)mrrwZe1~GqRNvSIqD@C=fyctlqlm;dCif0NexN2ZCw4ew+V}G`~-b43p^#HYQdvIu8p@C^nS5kr^wNI=F+1=;dKRN5@OQWU@*~n3pw{C-YIfz_b1D0D~azA@tF zATXGib6uMvk^JJ|bN08O9_-rVVOzhx$8zVNbz@wbCFo|_SnD2v(j=VFnZiAALQl^x z=5dq1@NSRX>%?QWk^E-;1j#AE9cGlo>Q*zhI@dqzxdI~L?;r11pTE~RY=I$5wo2-8 z9pK3;+p@@$(+WODJ9V0gz1Lo?|H>ugb8-bhC^p>_P zZ?}@sCHaNZT4w34Ck_Kf@b@e96!+J5T#M(N6SM8vut>v7_*B?G^Ml=8_=4GSs)WB# zwbFp;-3R+pbC#U(DofY+&yK}i=}kGT+Tj5gm-o%oQU0u@;h0@8Fy^aKaTlbdvx>Xe z6;WZFrE(XwUu4exrJ6k8R4uVs5+SOU7l3|q!=}HJ27T!5ArwL0WXZ1A7)bvH(3JDX z>pq)gt`uHDLECX5_zU{nEH4yP3EAGe-+Ijgo|A-Ebx@mR>h0*sfi|0S4cxN7Q}qvG zC_Z`leyP1bLDL)}{1fM+DR&*2gBdSB-QYtul2SC8O4>euH1(O8WJ!|uSd^uZW9~8s zK{YNnY%hWJ*nh8YN+r}aZHAA-Jyt>vaq&v^T5#X1lQl(7ph|a1ru2IPxPYLpnzmB4 zB`zH_XWDhuR1>dj9AE)7)3$}VD!w2T08%$mUe=u$f=1IV6rgf)b0{_ip8iL;u<-ZS zhRd^t`eFbJL9IdB&#zpAgmwWe`ZAD{z}@VZ2hVB+=DDJcM!F2H+mCG?i-WJb z@OcDciJCMkj4rEmD8ZDOhyy_1o9MF>D_g~m9FE)1jAqq4tu|aaI7}pm^m>y|@Dht6 zPpf;QyMUUo#MgBSPWKai{YsXmzjWIH>mD(nhHJZN=Qr`id-~4`lPk1z)G99>23_!H0K1MB=lR2P&}c2^}*w-`m)`vHVB{WRnz!FD{g1lqlvMJyyjR_xh(c~ zKtqyxLmtsJgsYw$Nw(?McT?)*E2nr@r$JglXXg&itXFb@?I3!rJmUw_N$KeuPViNl zAeBg4YokwNqIvBaX;;dt!AN_@DoHhHh($rQ_o!0DEct!mb7#YBX5GyBD|oqz^6QiL z;c!6;_R;6jsfeADVL_^8m&Q$V{WDz4<6$(8s|U)zvJDH+@m)?SYy>gvzPCx}X_p}@ ze)Jo%<*_HsQOhiH?xG>?UWP@Bk9Y<`mMujT)gA-FeX%eOi35#o1s5`6q|E<0-`jlr z)ujI>t7u9{PXHqT$w0y9@&o{nP8ERR!e+n$WtWKn4aRFG5G5#>6+v$@g#J0=!+CDl ze5_-*y=wcKiF*@?tN_{HwAP??Xbb4`O!;u_4`C$HMP5irRfu!AEy*DH&$x0ws=l71 zOa@D1!t0u9WYtDFYUSgGTD5A$T{hN(EaUnN%$uyi+;7mAy%Oa2Ar*hTN7K1EqC!f# z97U6ja>{#B%TnoenSnp^$|Em(6?OHO?hLKC~LM`9L2@ADBG3Y zmeF5mu^)fAJUw_of4D%bo*HoGJwCzgz>>9NK?;iV-cmAs3m-Pn6Lr z6KR5L5obH;B&u2#BphJucD+HOsQQRR-CgP*Bon`21KUvVA`O+&tsu4{4+W$UoX#UvK1gG-H!Oj8dqNaRIA9|uhf@rKv z;)HEpH6Q@>hGwGtGCv zXv7BpT*R8j#N=gTig>CS=vHXU@NBL&XhYwW))ZeJICrku=SSv?eVgG zVC1H%Y9xZq|)clV@nd`0cD?c_qDXhh>vuk`8IbLhncJ z%d0;HG<)Hi_5=b%eO74ZuP?Ol0jY2lfb#%AAj)PFu(tz-3XGm&Ao(oB8+l=ljLy&= z%JB+ixmd!wcK4KwCp+yg+X*=iD~+os%x(RV!_OUB6oJe(1rGTku?9Ro`IorvfbQm5 z*w*oZ<-)3~>LL&6{K^Q3KAYWUVBdV>3+B7-ypPjee!H14G`aaLK{r{ZX^1L8B%3yF z*+%003|5v)9&ap930Z#myK$A*0PGzFE(ze(E@j+)s}r%%78wAp7vRTn&7{{YdUb6; z&OBdhW;c#H7RpL6ary#)rzghJPnfW}CwdKDi1dw$KBA`GI0H_l#s@+yQM}M2D~Y#)&*(5+)E4yey7#g< z2=N8a@{smpNWdSQ*ho_obnO53weKWXmCH$xTcZNmVIqvZJz$cOjhx?3A3%rC; z(YI5^9;PmI&7^!r)(;3q;RuOn<)YeCH5^*>>U=AzI_nxHyp#s1v7VhCAJDzWK@bB> z>XZE<9IRFn@!T6(9?bQ>-Ktj>xf+K^Nq4dH@!ZW_KR+Y=zX}xe1yE}Y6VzTqC#KA; zMRy-4qT$1ltYUs}7*!X&u{p||HE#adS3Eo+IF2Qt%U@|akb3l8mIRj|6LkQF^44Da-u)d#=SAKp=2oM?Lc$$ujbIM;dm<`PZiBF)JBBk zV6t2jd|En|Duw^MUus7QQ&Oz9L)YHAVZ`m_?FsWHlNgdV!B_PLj#kDzWykN_ph9*v9rqE|4bwM35*a~{BlkY*Op;Kovt$J5LwNh)g!NX1?6%+-oz z^K(ZQ!ADFb%8BowKbYWz6=F@>|=k^EiKL_$8+2KpNhsP;(54I=j_Ix<5Se-~n#FIM&VyqNmy5lV@H2 ztga*8^$m%w-XLNSd(I=J*f;oC_Svbwz6$zJ)iCOUz_BkIwnUFlToZv`cb*YohyS0Y zl9H~T4^dQ%w$6?{Ack^qA|=BiB?l#Kjv#BkBgG{JnA&M7hpJsUgj?h2Ri6(UYY%D6 zgnyW8L+f4xV8SLZ@qvN>Q^037MP1wY!S;Ctjj%Fx$MHq2DAL1^VlQrub9X2E-)c4_ zP`5W9Ex1-dGqtRdJ}PHlQki;f{4AkuZEdZ-KvPy+@lJ7$Ywigm&e(sg9#1+~e$$7K z&9isyUky=Ao$}v~cgK$PXquE;_Li&kvxJ(MEz$YA_7NySp*uc9AMDJo5MeP@dP$rY z^E-*f?v&6oepq*7vw6Q}G{3uGfpegul6}!y~T?M$`kw zkVZQFnLc2;nR2gpQg!65sinJ}Ya%HPE%UsZE*CpxX<55Fk z9T(!-LSWbH8(uvJZujE}4{2bJ^ID*4w>QAh-^1-#F5zhQx4&E4%ex~>$)bP2oxvwe zP}0Q#j{2gbY~RjFc!4R6X1C5qWaUT=m^1h!9W&t8)UZz_UbGv{FXu;2T4TtvX1`@mG1YhAUP zPaZfz^!E$*pA(0_`1}o#YK`-8_6?zaNi7+v9MWLqswgyKzqD^Rdk2BCf(V$Q? zIp=Pb{X_Qs-qX1dVXmpfBRMa=7hZbwIElM1;Xe>_W=Q)c28Y_8if>2l?>+(+KBpdi zP$S1v0|C?FL8N-o=qj@qK{_nEo=+s8+~4iWi`!4gMEicO2PQ5^D98hYH3 zk`$3y;pFvWxy{yp=~&dyY@&?wI}l&USPtxM#XRLnD=#9+>tj;NZ2iMazV|o~N-Fwjw zSp2IrkkP40=E0u=uJRL;%fRh>P|_MDBG86u4O1O8hmzMgB~#<{kf~@JCM3#+MEZV@ zBUV%~rp^g!3kd%4!IVcalSHgu;$Cskqc9U3MDXW#M~3dPZ}1R1=010lcjw%IF2qd{ zcrT(LUM@Z{?1pYU7Zt|#uZ%aJLFe*-(_jZHn8!y!{;mwy9rPKgJ=gWNH_f<@Ssfli z{9n@stBPL5jnu0X>$k0CIgBde`wE{eu(!>Aotc>{+p0rCjE4phY_Of}|Jg>z+iENU zwKOG#M8zi4x${rT#Pg3HIiFR)*%YXZ1kW>qY`*o?#O_E(a{t$}tbRgTg|A5AKmg&zP9 zBU6Sx<+7S7&d#bt?mNY?3Q&crpbjyBN{CDiK5Cwm4elYfS?!~R_4)AIda!){!AO}k zZtQJOHVU=YDv6Szr4AKOwD$V}=b!>%m`_;?c)T!Bg`3Fc3(=$MGC3Hq)SEQS)YXyq zQR`g22t^W=Lu~M_#4c{>6I-64yjjd&;;F0MD#<-rv}$$1_OF?_n{OQhkM}mlQRx_L63*O%di^ynE%q5SSj~SrNtC* z5lI|9yfuC_iIiqe&n!WYecFq=!#C)97$8LSk}DfbQ46F7J^L?Sy)xvmJ|E8bJpQ<7 z>0iDwP4+tK0p_;y{-hTJCPidqYxbOfxu4s&u!GbAkAQD<$C~L511G5_=3Q+0AG%+%YZs*y>zjl! zM3sHfR&DR#=7XGR> zL$JDyWG&@wh!o?F0hBYz{A%F`ra^D*DQb_ehrn_5fPgGvlm%qC_WeJgz#!j~ui{Q% zrS%Fumm-O6&>uy3FF-dkoF77W5hXGpnDW!^(q?`@abW%^TTB}a@16w{0bErm8B6WZ zsCuo8e9spnmjSo%S<-vwiMjG(U0&~N6&?^JRU|;&9~m%FU`?tzDlShQCrSO<4j&Yr zO`qtD@TE%hAD$CPClwXzJtGCS+SoKk-I--6M(23M+YLIaC-zM>o$YdVD}NVd)z}!n zrUm4<_5sn?F5n+UmZ6HVp^T&Ob(g`Z4g?)bqAyD4S3#QhVhHhT68reOb5yox)NX@x zvzQ-N-~0d@{S8@2@kS9&n+*q+^UW9^RN8vsBo*|dX-#q58XEGe%VB*i`$&4+NIG1Z zKD)+z~hk0rdzlbG5jqU;-uqIKhpkolS6PsgsA9qa7e!l#BUKJ(tUGjx!i z11krc00(Q9EMIC}x7Uw3OznZ*G*2RFJavKD6CXByHLY#1_^hAp*+GQLmwPDUC#r=W zW9f4zcrNcdz`o^Wp7DY=F}hA2^r0z%j37T1xs1=24w^6)x%}&pnqnSG?S-zfSPvPZ z{m8HenA!vel5;KH>^#`LQ$iG+CqhfCXXe~t#^P@y?exk@a9SEc z-_HB=LHJQj(!Qpvt&6GL5-qx?OM>c$P7l5tZLzN?^5%#01UnaD}Z<%augUn|gD`+7p$@@+%sSdA+v_z?dK z#Sv<;c!Ow7E9R#-*ErGjo~DhDh?ym%=cbGgi8&|GC!9D;oAclz4vAp~k+9^Odo}_X z_x;-KiwGHqx<}BOhz3|V*XuWBvbq^RTcXKBe)h-`s?rA1t)pEg= zFCuft=)D9`zOb{kM&01lMmq0z<7wjO#k8tdoH*NujleWl`vhBl%NQ)U3W-l#G{xzf zJ(?=pvH%MGjJ8K+*;tfOV3XmKYFS5%v)4T>a2-q#|7sOzNg~3&6u%SUJ3YOQ%0&Dl zNwi9(@A;DWqXi*5%>A@9VA$=VGPJG}rl_3}k#s%wiGhbgV8ntxfkknwmXo>tLU*gC z?^NU%tEV5`>8|qDW^7ZE<7}J0oL%!|E`};&m5p0XC}D#R0?SO1|2KD$Wa0DJjokBk z-Fls9eA3yj^#l@kX+n(jWJTpR(U}>&i zR|ZT55M`L!$gSV5J)t&Otnq-_-gl`+$V?wjmjV2Xmp=882T@_}@;vV{H&scc=R^1f zfj-TVxRAQ?H{Xz=b&`+sbIbWqM{q#_X2D$azneuDnoCrNeuKiVx~I{_{K(rULenyT zpv~mA{_n?@?+WP4q;ZhP12BQN90aG=4=>lIh=?En8`1$bP-Ej$d-#chtCyBj*&+p;w`mNx(xYo zZ}oA5xWQIH_uI%*byr*3VOURo9+6d8p)|&BYujCF?xu_Z{`v%K2K1joeYD4^A zSoyuL51?o54|D(fAaM}pzHG(om1xQ)C67x8?HR30jgwfbBi4!wvw>)dC*S9@nx}S13}CZOV1%Do^2pdjAM+Vrto4yOE5~3`iG?8 z`&qUvA9B<%!Ma0t{7b&76wb3|sPJu{XXn>?v2D>4ZK0F-0AVN^91_w55WQEF(}s#X zx`z{k4Uo-|9v-gMCr(Wu#%$8V>E<**nHs!`J6wiKUl}6Y_a}ADc7deiX5p!39ODn) zueAwlBUjXt@fR0Y;_94i7TdMA9$sX$Kf(#jP}?>}6HzvM%U>VM1a0RUfZDcN{**_Aqm_FnpPyb}B9M2mBBi zlhjajkqhw`J7X$MDsIZVAj+e6@J<{-P4B#ry4@IeyyvL_`1+b~07yHa+cQjb-8qqo ze@KAbPP02%4z7-AJ4uh*buV% zi>>xRJ|unaS|-{-(lKTr`DJZQXh3l=etXQm)agyX^!!ho^453O*7vMkI|!%khYU*S zcXy;mG95NTwq14yeQ3I{J9JaH!d*o0a{4%K0KzX$Vsj(A(87k0r6l%Lu&9hId!?(O7lvOfP;>JYWFs-U{fQYBRi6FF2OfGht7+x*=OT= zn(qCqmxkZ!z{~Fubfw(GU$hzpBB2qK;08*mh4Nd{uz~;5j5B(i*mM{p9xqOGwi2BQ zPw958`mok@qa^dnVrJy5s(xh4*{%BJu8JchDzRX;R4K3Xu#qr_&wp^uGq3Xmk+s>} zZ1;dAVnuz>SI6YyMR3+*wYLh=0RygaR6z!1M#dHYInN*tzO+Jo4U@!~b;85byzqx5 z(bLSuXSo0sC^ct*dstfkM-Bf!E%hM)KI&uX12FxbJ5TqTd+<@(48CNUXmpO&hk z|I1_i@6|*Z51Bw8!&q}~{T*fRPJXT{M>7SZeB9gRSe;B7C)+Qt9IXz|=~Ynu zIgUu5+Fv1#pl;RKrXw53 z?Yuw`@ILmUPL0{fi5YxV|3dC>|AidHnX4E_GnZ67SE?}a`b*6w*coYd&KL-bC=vjE zAQ#l*tL!T*h&`kwDvZtrKp9EQ!Oi{|P7q_06;2R=Qgh_)&prS!pyM`SSeEkWJg@}Y ziO0Al564JXoPsUhEH~^5!@7MCH%L{J(|N|3U)iJ#p5+!p73!Gfkn{K8x~^1pgY{(U zhfo1}(w4TUA^s6CRfxo4+?smbqr{}>*_L< zlH(e*5z~@Y4Z?|W?bXhgSwlT{aM0LCgRP0#(DC$U|8Zet8h6KN!FoU{xN;~ARFt7u z3|!UDuaqf|6$v&Elqc$R6W@$Wryba5o^9@?<^-1G<;Z?Ey1rW?r80s(|H*hFt<)YW zQClWa_84DKZj`r$xoTCG6_e?2zP?Z8WRrpNeRXjSu#jwd;par7hFh`D^>6ET%H+`( z1!iIq_-@*$u!w)Bn3$V$Ew#gWN{~xd9z~ioJK2JUN;3PC94mWUi7y$Fg2ZBiHmTPN z;2TVi@H{K!hW3W8(xwkt?>4sPSft?4<>ptA^{SBOH3mjUL zdkIV{PJ($4YE=U?(;4$_15{-=lK#Lf;AFgF%zsiHs~8gvTawlQPlWl`X}|zhku0Bh zVAtQ7;td%9av}jx)#Q}ryfa*1hmMX$=0-;9D(1x#2-LQ8Dk4q@$fgDD>+`bwVwrzI zZ`|$QmjTtHfIj@-De!#w`l*MThkId1IZ2L?5bqo~`roSo`YnaHr*xYfEiQrjp9ppW z4xLA?BgQRgTSM!Gzlul6%%euVGPJcSBm5s%65SmwoZe`zg!|$Hz9Z91+P4Bx?JLq zj)c~x^|LCKvq;$UO{`*v>SFGfwn#!HohyD{Rv8h;JQy=a+=*#As8LJ^x6zN40C&1+ z^NUFe`7HCnjo)yGy%c7-PC^qdxx!0eOSmYV!%$1aNSOIgnRx12z|oDSEmg>aupNx# zutF0nLN^e|%GDfl1h+Jb-pjj|DQCeC2B-0_tRO^X0)m2}QFhbXxw_hht%6)ly!;$p zu#I}1?TIWEd{rX!#mu|*S+`#AsW-n}NtJBJ&~Z(yV8pu0FJiO1X|*DSa2%j-s{Dj& zth!h=h|ZNl*IcwhJF*#Ro_2-9jV-t;t_RprsL5)DhkNyjGMi8n*BX7LW}{Y3ujQq_ zK%lM#7EYtUX!hWhN@ht!B4j4ZS=5yi2)M~P_tQR?LhF3Sv0f>=Ai2IKU%}Q_VKt%H z*qvA#S6kk~dV?V+%}#oRxscwgzCh-qRJE#ti<`ZN!*;c*iU$4VN`HB8OTGwYW4F4( z7MXhpBAD#f@NLWknFmZZ;CSblD)k>&5FyraZ>}IyDPVVwtcoAWc-2M{@;3+bnaQ3h z(-M{w5Q>l3tvh#S$k7UeGZmB?`b=f$Ok^Z!*xVGg!i6n}2D(6K{jmC19xcJAlptbr zIsXzBh5*ZefN2Vfj^OF5$*q|dOXtJwuL{bOM&2}))n=C<9~c9eS0wwbnBwefgz>s5j$U(Z{ zj}ODW5o-3eLo&L8Gc&o7KjX~MbB1~OliC0F(?sfiRL~C@;M>V&N3t6KdtR#e{tvQh zj$(X%S7{=T(3>gV=mk|6mivqJPe@=@sgLS;Sm=&CzR>%{Ut`XzMUD1dsyq+Ta3ARH zKN7DAr`E}i0!;xNq>J^Wi?cA)38d9YA34sxNb9dEGyWDYxgXUQ6Czdhiwt86w%SJg zOIhkTBc0sH0^2@F(A4%QG(V2Wm=#Y|$0p&W1Z(+_JCJdb&dPvz-(6#h)Xa8SNi0@N zMhUoetcwqdpp3MsX>HAHxN51!Bt3etoMjtGRl^qVz7pb%W6GavF=KwDEWRs-wtoH} zrrt8Dt?&6B4pN{%k+xWIN|EBly;yPABEd;mNLl~zMfvT}po_RTEr>juV%6oT_7T(v;o2&&By_&XKIA3ySrw$uIVuuWB4U4k(a zhG>2yW3(QxvuUgeamtHR4d4p3h zb%07=y~G>x_S!ui=6cX$BG4H`A`ACMBTpvV8wpe=JIEg_Uu@shuoVwFr&uZC?2l@GL=h4E8L+4xK)gcJ@hlI`F40pqcG_td-~Kdsl+_9tn?j%rrDa z(%hTH%>yO?0WoyaM5{mc!!lN7mRepmIOWd!}C4}VTCReFEZQvBP3{Yw3rVV?xYV~F8A3R?nFJjbt zxvGq~Pal<^Pm-3tmI&Y0m(y!bZCzNkw_Rk;>M1-rM`}U!?FIlMQ%?(9pVqYEu06X8 zn>n-D16k>paE)qhjm*xPfWO=zc51N2X_;{t$W^%5g?VF@$$CNCw9Ou#yQ1k#g|xKU zCPJcZe*$cSJYQn~GA%T}7IgO47wT1x6yXtyds^?}A;g0(jMRad0jFylceC4illeTJ z2b9XC_V$c#elDT^}x$k()#rh*7Y!yiR$vvk{hLs|#`s3D1JH zbwZ@+6Q$`1d+X=}2(_;H*(QM~9-)Hu!Xi_s#bkZ+kB{Z>!P$J(o1i~lq7Hjgb}6lT zkueuat#W>9d~VGLTS7#PAT?AADstWLtYZ5<_rT|fb#BCYJ9eZQukIFsn{cbqaq*7v z$MM<5^v?Ny=K>k2zQA&QQ{H_!MCD;rU(juvQ*~JB8v!cEa?P#Q27Jn~H%^v$wS6V4 z`m33rSWf=!=Mf!rl&0JlF2`u`*-KA*3n$W00 z8r8DZk&bxE(M5&erOH2KhSYhMF^JB|dLrZpIUMx+2W^Cb`?D$z#ZCVGa zqi0N>KUgriv(5KL0(&5h1|sVZe<*XP5aG zzKsbpRR}Uwu;v{|<(hF2SM=e(ef`tiFpzYc4ULYrPSR78UQ>1nCU*IBfkix(%j>I7 zehriE%EIjq8;!mO(mUFHk6{q0=8G40l%c;lWLjHu0ctGYwb9zpnb3?g^YZJvfc4|W z(d;2bzf&p6P!59Jmv@B!P$LKBd18P^uFNdoUy(@LzheNL+0WYSboqk}*~1LU!zgkY zgMBj!VF*v*tk`^7teElRLyO~h*(u$tqTv0yVojyYT~~W>rc7&E2YCpgf8JHJ2NSQT zuxRCo3C$U;|4qx?*81qmcyE5ki_yH^>1fte)k@Rzz^g961C5#T6kfDVbs)GCz|HN` zCfnha)K6CRwcp%PJbrUimz}H9%+vbG-X6*@s+wg%poN0~kopC)5)>ZohLDT=E}P`g z>y*IUO#S6>w!^vzo+Immqa9vh_;%}YkJf#CUB3)}Dlrzp9 zO$Y+>_$@&3Io^M$S-kWURscEQNQTx*TS^~EjDhjTuBm;o3bhe43p=bDyg>t?^6O-- z_OqT0t!t{6c~~pd8=bi*dRdM3Lx-CnYstmEmIJO_&s?K~(O#O-t3eQ%JQwaP((Z@B z-NyOp4MKvy?YLNeR6XbMCYfwnFs~`z+mrxK)kTS@EUX==_jc^hibD_DPsD~#0_z$R zXWnHgu_CRNAso|Dm$LVfIH61P0e!yrpn93nVL@@_9qgBN!c>;(d~u}Ht* zxxFv$8CzQrnl2m$g&QRz)%R$qxqz{N3V;Fn`^NI8{|Jho$OpUtCss2zt*&%S zUvLUJt{8BY8S8U?0y;im9$CGc!`w(TY<%j{}bb&pD@;)?cK6^AFyG+kaH?;zeOx|_= zW?D+*g-MJwNEq#k+JleG?Gb+4h-YEqxNx+N8OpECt?(DpKGGO_WErg>>XXi_LFC4`NH>Z#Cked-@=`-&GIW!6oD zFDEup)Or6pxKNqivfu!%{FGrYK@*MafmLhf!N&4(=DU>TOD*tJEcl2y;+W~j2HDw8 zs`9O`8t-3i1JCpu;{)%&(ZcbdI#BE?!wvOCP9BSq?+sS;bmK zRR7-gzbh+Di3&hYKKrBFoaKUGWKNwzM4cjQix>6-aHx2#Rm{Z(do#e3mYYFYdIHW#dA?@|2#D3K6*%%VRq5n8!x?XzLIpT%PiL z*y$+Lc)3{(F+fiARjJ1WF-tW{rZpgDIn>7IC8wEa3v8V~81sM@qrZwrjmaVpA;+-D z;T@qkL)&<~pCHLT=k(cp+k<9SD&hRlYHUIn!+!M^yZlGA;V`Q`33cqhb(aiB|L9-| zA-7Zk#XU7vhH8ohd*;k^quLPsg$~#udj==Jmx*JSz&u`&6(>E05EW<25x%F zIn>kF>vJayv23!&fQ`O}03v$Hy7oot7jC9`L3LB-FQ=)`Mf@t=sA$C|o~(dHwks$3 zE??!IaK`ietDJFI=?h+Iw>#(OXWaDu>36F?nk~sCFqAa)*mD#K5lz*q^bmvgp0wz) zZt9a;g1F*Me%$@El7t?ucocO_*u3IZr=_fV=|YPE9H1~1wycS(;<~#9vyD#GB+`0# zd=Im`a$9ajiW*(`R-U+3;-F!UEA0JtyP0tsohyZ+Sb{{|QtlR?G%#G4Luf7HF5bcP z(C*kmq%&Rx8_!SoCuQ1Z%c&YgDg_RlY_2~U z&F}MHHW)ei;GQ68czmZQA5~hxb=pgCb!NB|Q0|nX`x^V)MV*ZHaK{dHi@aN$oEBM} z>>2O{wVsyTN`I1$%8np%)>L}H4Dm;sF^WeDj+0-W-F)7@$RCDcPbW+VxDI3#^LRDG zkfX1%9@J!J5hLXOI~t~s#JtOP2fbcXZbOKheWhiHi8w*YlDCNQ;;@sGr}2DQ7pnhq zp9np$_P2FX;~OxvtVaU*9Y<##{*x1+g`){!uE+s`04M^(eJv9cipfn#LJ5zKu;#D& zv!5`^MZ!7CzA>sgvXxJfKO!kAkt!+4lMCe*J}}P6Nn_kS<}iM00oAcz=lmNP^Us6< z9=k+9Fep4USE@Q7Jhyo8{!h;EoneYAG`O-B|8}W>u@3y{|8W7>FMPo>fzVC7bu?5m zbfj~MVj-_AUWYgF@z~QImK~v0S(SzYHyPId)B0NI$k2#F03NuK6x&D-}a6@zv3Z=spFt#4nF8qH}xZ zQZ(6o{IdK!)Ty?mISA1m zSM>yTEJqL!%6myT8+1$ z-Z{yvSN_2-PiNGjZmsYbF@DC}-+J?Mc<*T_j2;y~85WImGEx8^P$g}9FCYN7J>pEi z_g|@sS~WNLrQ#0)4K5Eq}4>4LM# zK=EyKSD+%`2>m#D)S2dPG()T3c5?uRQgP44W<;s*50BZDa`N7WA$-8fgP_wO;gc`LoKcV*a z#6t9p`oCuDziW!}A3V!}=e6+3PRv(8x_MeUZBwi!OK>Q9Yi!AH@Dmhzbg{qm`@_^X zxKp(W-KbQ{HvNe6C{8(O)(=6;VQ}Y0!k$=kYJ22ftyy5O<^uD%3nD(v6$jbSm zw3Ua&+uVLKE-v;Fu5TWwO@+FmK7>*M(EkV(^w2?=cgQul#DBxSOgW9R=pstW)1`ue zuhXhhM)eF~KR$QiqnNSVai4iu0B#<3O4PEZ#kEIc83q(ZSlE21>B$RdWdH*aLE+b7 zi$ypSMi#+~UR@^z+p(r7bNMk=SXEEgsW81QI3m4vaW2ZfP{+fR!KQ z>{mb|VVXb3VOSHJu$5frVEY*N2R*oJkb{?bv7?8@?z~FH^^XWJ()s`Q?8!I;q=qb7 z{sN^5x@>~BsM1&fS9BWk>fIb$z0RBrM!>BBC|j9 zb$*z9103qMtG@*YDZTZ~PkHxoP-L=!YVl-yaU)JhP?*=-$!)9AJ((8|j*@5n+?%?T ztr@1Y%Vln(3fF1l+CX9HTt01*dVi?rDzHrza9Cxw8);;FSM1_`{EK;cU5~@iWR5p| zhcBd^0{pebzi>+$?L1zpSl<^%uMIn@hED^j@dT71eoLOsqj^DeoY{r z{&bdmx^xH&l4(q@_EjNDeHU=urw9oCZGZQScoF~#n7ZiM7Bda_$`f!q(CyQdc3(CX z7U#CC$-!JmHxE{NT*f(rx*=rN#iRnb>ZwF&tlI}8QY6>#PH}$3@aED!19DzsS&mF8``c`ryaJ8hictQ zGpU4szxW(Z1;DY0loR4;r~D-zx}0{qL|&moYV>1RzglK`YP3YX9UB|vrfT{3#@<8K zp98Rpcap@lK}LSu=R^z$Et&Nf251DA1)I`mzL0gf?SDV|gE;<-5Fo@_aBcR(AV2}9 zF=b>sC+x8K!Y5exXpZA_Xy%+hb%fPB)}@Bb%KK?`>BdW?|2`^W%!Fs>_HA6i-+K%9 z995s*lJX>LmG}oDBoD47P)!5W+>*ENQM1(~cJPp&cQ#Yq5BeL_i2+gHC&mZ>=91SK zA!IbvW>0#RyIFuP<0aRq6|R(3g5Jq#ffyVDzfbt_E7eBW z(e64k{jFw!9NwmCw#uZ={-l|n+2mf#TfS*Q5v}p@o3{I#(OO=Fbdf)Rrugzt!7ow5 zt&;C^?e{c=``c&Pl5hpDR=xW;m`$jVL10B;0n zya5jr4(9SY3#vKZ*B|8IdSxX}m@`Z5FX{hRXwpU9@GknZIQ_jb@{EVF(NraLGZc=I z3r6UC828lhFc!)qG{uo;y{-cm65nfc5(nDni534amxr7`6TLKh+^^!X;isFCs^g(Ull~pSSbOzT z&lz%b`%PK4g_qLH17vN)fkHvgk$=jNmCr!5bcf*!803bX=S zTx8$=-H_p!1LWKAe4}7v+P3`kqu_$HunE1ah68dE{{n1;CT5CWE}a3Yp5ISNVrXuv zvi)|1^MMxhhN;}c1OOo+*3CZg(`NbKDZfeuBd6TmIXrN3zO~lfeB`MpY37T-0N`t* znvSoNM_(81ajTpNg>az;_JkC1jSM+{#f*Nx=bgk0(8(f-y6Lw8%uUbFPrTB6Cj!q}u?505-VVRy7|RTiR%LUwY|j zonwzz>h6}>^($C|+sua4tVbiJ7Cr!p)jowq!t@|)*X;f1bRn=6(V5<`9qB>ilp-b}> zJvRI@Q*^<1unG;5H-&F;UskL%7Cf8xQ4uB4o~Ct$r728wIFI_}p%;0bseb^f!Cp!> zPd(aa5|!|+?)Nfez~9v*OVj`zcQ3c%{L*+FM$ZNko2|X|9BZx-)1= zUMh+YqU6hl0qmk^PUD@im?cXJdj4P5i-`v__{QUv!gE<;)*z>Ze5D;Vi^J+nEWK=% zvGvem-d*EMomo}^azoZ+wgfpZbGJF-x>hEgifRoogHzy)stoLyHW=@Jskx<=3u3g> zb(rA-J}$MdEr_6~elAW9xMV03k-B>K{PmpsrTyKl#=a@hl^Y`1=YT24(uJi3J*}I_ z#@qpp8_{uHHoQkQ^{d&NdnH88>CoEwqEqhoQV7Q&7{YPavTW_Kz$xVeB)V@fq9iU+ z<&*dPI&LdEW9Yo#A%9JB`z7$Cuee;+@nq=m3lZ15ftQ@W;lhfhw)AbrDu(3Q6FY$n zD&&P|U3@C6C_ah?NskVRT$AmQ=9TyV3IHkDRn$Af8ENcCL18JrT`9s#NlmO)%R~&I z3>!VcB>p(-r4-Zjq(@by02B`z5J1!p0t|iQi~iGIfPYC6vq^f@LeBVPhq2?Zjm8Go zH@@&#P_WmM%UO|$z_Sk0ZK$Pa5}GTZ;>r~=x^!{>f>7}18rH!ScCPf(N|ka4qTe2C z#WV*_+pUnastHye$vZdkJkV9HRHeJl!kdAhmNe1iXxQFu%%oW|Fv&?HK>1+PCSTiU z0HKsyVq$7${S^_fqF_EV>~_kz{9EaI^x^Y4cZevt&`oGW+ zb$r?qcH0bSA!v`6j%sisw_r<;G{^lEgR83BE*!?K+QS|91O>S~W4TfrQNu$WH+li{ zfR$}bg%qZei6!cO9d-e7{b^AhIbV=i;X#7^f~<=6;}8DSn*imv!Vf#n!ICm|DnuQf z1L(fuWRwSLO$&;}>dD%e^UZ=D$#Qn4O~eeFBEp?}QdJbt)dq~oNqA6z?1-pfE9 zU`n}4j?Xzrw)Hwk3NhI3t>!#xHLxIk5yuJl7&}5CPB4R-PGNFON&u;Pyz0iDdA|9q z_y3ml{TQ_@U4RL|FoMWf5dWhM27nh|CS8jYudpnBR7LsULeTTkLI4B=1jg7a({WY6 z5Ds$bfU~>v^QVgO+ju}u9HNd?5c$He6H^HFTU8-4bpdNF2TP}8E9M6pj6BZ*KX_R9@wKk5L|U9}qN%W$Y?yie^14Sm^#z(gq`7&i4G!O7 z$eSMBn|AU#wD)$iD_QLRnF=C(co|fA-8SntcQtb66xi=MApdZ7n{DcOw=hDPAM81M z@+;B^=yCqX?rI5mO0)k24KE%oH|JgR|HJn_l{fiM!uf_jzr7b~f2*}`#- zZqNTfT)|}`Qe&pj!IckQiQK!kkW25gJlE2utyHyz=wR<<3cW{LIbiJy+(#oj^7Y~O zhWP(tXDH5#6tobW3jljm(a)#___*yWU*@YNxVSk9Oa;>^_a$4w;yw7HjroCJ(0KOA zpX_IoEh5>2Y`#lE7%QU8d1Atwa_}cVM$EZhBb~4A$)%d4-+eA`%e62a2q3YB&qc#y z1Ot7+GG3&|2Uhe^F?k>7Kgq8z!63TKmKL4<{@}X*a{ExaP&IvjQM>~zfFSenCnD-N zua?Wdnob!%!K}p2J9~EeYb7zo$R}~bLpC+YyM>`ni!?^kR3oKJ+@mAMGyBHb(RvvZZhjCWscW(NUx(PV?a&{0?hSA~XmL=;7=5bmh16l!N>U zJgC!6KJZt)_OI>%FF}Oi$E13<+>~iV`T{x8C!llSJ$DGTjV61jA{qD)MbjQ>s? z)Z?lw2?DOgzbav7+gCKbwZ=U;E%dn~Y0W+0;L+s)k&+_khW6(jBpxC2Jz!9%2)Tn* zEB;>K_(f7Qq6oRK8heOGdkRv_Z#LEOAeiISkSlFwF!#gLU9l-vUZ{)(YU5nv%f^ zbqfCjMZzOAKmfX*z45caNt=u{@$%vg|1UR9{wP5Od3N6BHjF7asekivrSp6!Fo@vz z)BEjK<1U|2@N(1Ym2@&CC1BTe;?{bWiW;k{8TEu&lh1Sohi(A@`{TT$c_sBKU1Nuu zKERjvJ_fr}3e01y!0%o^Z-_Ma5d%H@UTYmn*?VQrt;H*u^6fsN zJHO&b`-?$`HWa5iY7?p@095|7XGL@byN&uZF+DRRVx+ZDF*37}_h901Q7 zX=8tbs;}?pLev#mi^42M&HoC90Y6mMXkYI*m$jA7#EU@Eif6WG{7QKC?+ufVMZE|u zMN=nTp;qe~;up(N3PQ=LOWMa5pB{7H86My*MseNmuZJ!M@5d$LgyN*Nl0N+Jzb2AJ zlK})hX*WVU$1XN&vjRk|MStuJTt1GWgnKUe1nc|nIhzWLOfBRntqmc0#C*3FqstHW zk0b*w@2-BghAEd{xi|UtRw3GcEd~|=2g_(2jc}_`A$D7I*L>Y$)Y}C?u~GLldHMQl zAmiWD?{Tc*`6s5rWxE=XhU#m~0P(c$~IPj3ADw{!~YsJQm_h= z%TwK0RtEB)v}L|^tM^-|nYn!H*;$)b=kB)9c6?^2#_{p%M{$oD!x$M6=o>3+L@h0niH5+5DimxQD&*&%uxwUtJ>M|uDkwhQ~xd~qYcl-vv5kv(!g3I`{roopkcB0&KG zXjMzg&2$eqm8;Sj)uc%u4U}{yk2O!@{~Y7B$M~c&SMJ78!h4}jjhW!yxVB6$(M?}~ zNcQ!4re>^Y4!eMWg(T|i)~cKvR-4b6saf_TfyHw<#k(pjuU<(7&8dS`8zDe6%Zm~~ z>CIXZFg3Y3KO3-kKK_5}TCWEA2w|<*0qOyB^&p>&WS!6sduI_E5Wc*yW#wiLqC*&( z>AI}^?Wv&UWX&GxMjex*c~seXOZZyz#)1!>DS-g;kY9ixjP|`3t`IT+R+H%Np~oxp zF{;jfID5#E;)*)svDDMM&zKVIpA#_}42s@0G7NrbFPDpEpk2%4)Ps9y930v~?^Gel z@xZ@KJEBs77Jt?VxJV=Rs!&c+6k)|hz`nejr&m@coB~hnROD0AizkQ6ogm8KE> z->|8msynUXmt)*nvNb&HUQ2g8^!G19*vPv|$v3hu&pn|Ev+)A3jOWuj1)3d4{qV?q zVP^@i!->v7^&G#g8bs646e4(CwCG{8qgPGb({^`)SKA$a!J!c`v-Ja^umc;)joH*)_r-2T3vw(4no zb4z;SRco5|<0k1*xdRK!1Eu8T{j4$~cJJeLaLfTJcXVxDt2I%y1AhGcv+BQmcLUc2JRQk^QD9iAyn_K?kYna1?y!jFklV^Th0S?OMnY9S6YG;uf4pbQ;(% zdv{=R;7F}n+#Qxvl^Aqmde|6QAmj77{29OtW$ZFPEbMPBt?jG`tIf_z?ys;CW2*MO z-?$sN5l7*(>6TeHD|16RQo~~g7^JvmPoWaTB|qG>i71p7l7VLLT^oOgVxg#SwUx%%YRCt^@37Cp~pWH3ts+}{nd-hm-jEZ zx(ng08zz55+upAf-hR~9ObOO{De>VOeM@HzK7dQiV`VdLHBooOlw6;r+wzr;?l9=| z#v4Sc-`4i04%u2LyT9MF^D#NA<5r61N%ho>6sz{HzrSXg1^O$V{^SYxu-X}&y%TvL z#^%60)-QR(JV*zAvgz_%Q$yM`G;PU1SUF8jXorjS z3Ce;{qcQQ6EtcfJlP-MLrw(leW-0Gv)1Di*+JOEPHZMXh%JxR$>+oLwQ}vf`p^u1*TM>RYRaDhc&og?9uutGT^`%jYxpil)ncGbST99aZok3) zR^1lkjR<@k<%Fp74h@zuWaYlK3oA4*gm3H_Wuhwe;Bq&wQJ9z4N%R>Rua=UCiqzbU zs?uk*q=)p`M~h&SL*D;YP~0m6SRq*Ya4SAS?hutsg-BPXo?mZNZyLm#~1ZHL`Xi+k-MXEn{x_h&(H82`< z(Dq{co-;UUS@%%3Bs&&8i0dX&^&k4#xlG#(i8_*dBrU8fj-=`;sFd1!WX=0tC9h#^ zZhb<_0(}p3l!6*l46N#jJ|jGEim~54$f?pVjf1#-0RaLIi$S9jTVRLsse4CfzjfD< z`CN|Tjp4xDgE`5?#PQES5AQm9(pYm#OAPn3!3-l{Pv2X5#0CK_4v)**7(VGlYrci%4!Ep` zTRDN38{qyY&qY_|0H$oY9K()^s!Nl}I$HN8j;bd*llJTVQ$`}9q9XnxqSo^MYy~L} z0e&>7{!}7+xpTl>f9#7Zw-M$oGBVyN+)el!r6NUEdjQIZWk&M(MRIBCRXG2z&-&K* zu_KdTx{qsPY3F-88S|yza@eKAxy?2k^_Df`5A)D$aK>Ngr><`4yiGg&bm$Px<~;M# z%imZx>t#X>T=;%{+eS~VY}5Y<_AhS@{ z2C|>E^;^Q%Bf63uX7KxZF3E559u`O?eJc%r)UHPzb9xQ>glX+4I02!=8mz8>j4Whr zz4CbDg4cx1`f9=R6))_c}FlQ;LLN>?R2-zG;<8|>%A zm7ht)_nApN(<7_UswqT@$n-|Ue(A;f#b2&p6NE+|g%}sFs8jcg$M0KS_#=>TEy+Ap z7Z;c?NS_V&@gThL?g|yZt|GlXmp!HrAEx-Rzqm|)dR(cv+^Xkiu9Z~#efK)2O3)3~ zR6g*-aK4=L8;xWT6|Vkwmxsl>Xv}SVS5-NCW!z>z5$<<6u#WrJLbbt|`iB(VZ9gRN z&pqPm1i(S`#Iq9LT`tjJE_jw@#n($crxmro<&qNF>t-#)ab@CW`l^IJf4i|`P7n#Y z6Y4SeFIl?7^vA-U&+CvP-4gj1zoJ2-l@hLpo$IIp!{@D&>&aL7xmm){uS)_7jz4*P zPEHSfpyX8K4zv_hEo~4m64VSgGUb`8-}^HD^#>WPNJH>wRcRuNJb`JnxWCsg2$*7m z@5lC8-(Hh#mPIle9G{4^a`=(SaE4DnloZ~m1w|tpy zEIj3YcbvD}VX2Q_y-hnGTS|DKN-jj?Cuc*Hy*xx?5LUDnZIk z@?|<@h*j?O*|^UwFTiGIm`>;MGm2kR%#KZu$2_#r#NmUhKrHdA=M`xvOLI2Vk!PP= zHTTR_b%|`Y)?l@H5NUGCwefmzXKUmUPm(Qx()M%8acN~S_|dgmvu6O2eE4qz%UV`} zT>fCRUjQoLyh3xNGk#MoXze?ghB~B(&Xzv%i1Xxxlzj6Lo=cSI?_uWfvhHE^oO7R& zqPyeX-{rVnB5r>^KH-qY%HzfQi{y-qECDk8nLLycxw9%O)J&=I?^ehghttJO0E_o4 zn3|G$5i@CPlBgpQ-K)JpAIzg8UGk;t3X?E{z%FqQw) zNn$d{K)lNS;?P;pQlltaH*^`HEhdfWTK0F#_Ec*fo%tiWh*9>+9E5fz94*kUkJwHh+E1{32|ouCco5OJk$3imIB0job5B_nJNj$56CSc23gX z`eYNW;(w10KB$947qYX*a#Z@P*qOAW$ywRW=a+G{bIG`_^#?qp?!UGgWc?vsPdTdz z8h)1g7Nf`N-xeRALp4`60R-qi%psSNA-R%%+fm1c^6@z5>~=uhR>~vk?BBy8fuY|lWAmRXxIjFwA`yuVe)?*y1Sb? zUkqq7&b*sC@&mcCh;f)f%JkI0Q+~UB940@}#ECs8#G8deFaSWp6`>GJ#W%*`uFnTb zug6DNhuyNrV)9A8yf^?aAIa@IT}+vZ-;8i`?xOzn@W#XwY35imhTN9zRc0DNzwG1> z&PFJ#qR!$-gX_yB&HJOaUw;<^F_&KJn|(q^?ZfK{{UdKTKYu20^=W{!@Yk`v3G>m; zu5L*cZ)izvwd6?l-}Vy-?zLm8uhhvc$!!|lg9QL*A35?z5zUPdh=3?G>ZIS+xIyR( ziowpqD;_(Y%D++Vi}RFwq=V#1Nr|+!u1kb6tZ^epdBUL67AnJh_qcSWD>}5&ld2Kl z&|o|=dgJRDomsjb{dZhhnJsJ_!rJ12ueHb%1t$d{=f++=Lc_p0k3P9dFFU z6=k2L@+m75CE-l$F;_BkWQ&aelMD?FnOj)kzIgG%!p=)VvcA@jDSJ35#{E)#kixxA zb763_S*Mhvj|g*B1izgGu#B_v2B5|G?UUwc8B5UZv0+7C@x{l~oBF*3AQ1VNP~#B4Y(iAaoUN0Fcg9rFCR4b3 zHfb3QgJ8}G8P>7jg%9O@Lj%RGqSZy$UE;Z=UYlBwIMjp%9j08GDDWi4@Xq;rhFqHO z4&N}PWTOcHmFO;P+w48UMq4>M=H+op2lGB*%FI$8DTf4crMN;M4dJj9^gW}GIE`^} z^xTkIEEvg#hd6KZpX>XJgCR+0=Q7FTzdgtZ?s`wiCELT|Atvx7+`sWrUqn|C?-6sA z@_9RE$SuGaGwJo$@L0NBDuR+nPJPbGfdO)?f^KEBy6tM!er9qP$q-NI#t!V_nbY8q z)7`2b(mr<#Y!D8UEWo>dN?G!9oosM0;Th?JN%?wM{4r?&b_4@4D}`cLjZYCjxhif-|(e~h|OQL z|HAL%eb2qZ7}E1c?~DJ18LrhHTk?0~C9^9UproeockcHYOx5#LX|sa7+sxbBw0<{> z=i;U=HAtwyvJq6c7|8u>aGar=$66rR+%577Yp@8H}#FxDJ@J#rZ zshT7|0hJ%}<><-qv>0A2U>!9A_uHKOqe?sxk zw=_Y|6LTdJLA@Yu$e*~>c#c4}^!)x^m=aTEwjRuG<1y6MG6h{+Bq`q4nNsbh%I(Aq zBJo@EZd*BlCZYAZL}rOgr~&%eKK9n-M#;B5f_o&h0x1{GL zcdmvv1%cVib~XSN8qw>osFajG4G=)x{s=e*0UiinS!0CchD2gv%~-F=4b*?{LkvCv z6>U6A-t>@J8ru5PQWddzQ9fCk4G-q!Z}!-p1TjBsbiW>5Mh;`=-I*c+j(e{V_hZ_F zroxRZq3^Cs^<*T~JFNjtnZV z`q=2b?fE)yHa@S#iEq=hRWN@R?(S<+9LatkwY1dsw(kJSkqS%KdU#>(eC6lxhcn@* zG`Fw*Mx|c;#ddg(Ra{^fUyrw7z55=UJ>0;=r0a5x?>r)wn~bZ|pe1~N4O4*B=1+AC zyI_6Iw$4b~mmDMjS3rg|Q8Q?J7SZo@bwRr@vK0hrg&?P~uka!J)HLr+y|JB9W(Ha@ zCfS(|1KiJSX43?h#viUK>^M|;=dAy%U3c_K8gi8;j8Dln5tk}VCkv?=JhpRDdHt;kZ(pd`+vwKN$S=KS=|Tj+_c!#=i|(PE|vLif(vVidIsR)mI}y z`U3UpsA0Z=-fY>AD#7Zvhzk!$P=L?xy`zNvoyWBwU%%pAy!F?3C)~i_p|N|lp&#Wp znPz7*d{Xdk3O-v6GBfk>aB=zM;li!>jXuikd=qjR0a?6v;um16k1C^t6;|wlJWZfU zvlm6D$U9l!?3vSriI??`C#})0l|8v<(wft$s^(koR$jZ0ihHKEQVWX6jhj;+d*fRr z0p_;WKWQKH4Hr767N2i1k6K<#Od3%7zbaiX;+DL`FYM(q3$RccVK0+_7qEIOx?i+$ zbS-jjpFN|`C^;R^acWT$975?34YU~wrB)ZmbgUJXeEnPl-Q@)FZNU=YAj#G?-vrl( zHzsR`Wvn#tcSG)!!uLa`TbG&0=?mVPL3`qfGb?RxKK9 z02a{OzsnCWX>b|T!}I)g{aEng;%XZL>>&4SY$$$oYWYRHmFqFNKdX8sK;NDH#swo} z31`0lFrBLL8^Yt$Cq zEv&VY?r>LmsovwF(h4BPd+cL5&#I-Kml5O`I1zPGn%E1R*Buc8u?P)#FtJ^?il4IBSEmy>`p0YwHqj7s< zo=TuvNU)jUOpBNN6=T+hD3STe8gZ z%LSNTp|774nxbk15qc?Qwh%Dwg3Uwof{j83L==}4X%nDR13}N zXlBw18Pe~SSV!X%`@c^ij=YZX&4 z8LPY8TP(lJ3vbU1-zAM%!Fmw>WQqYq}b^7?8=h*;U?1^X#Cz+(WzhUeX%P4{&UFo~gox zTP@wpsh_HTHqSCJM8HlzY|Y1)J)B(R_;S?{-R9=!q}(^(sNvE-PH+!x8B1`THFZ=s z2EbmftqIclGS~~|dI-;}uya1jnpy}(@W-eBT;*y_h_qAutmdaH4*M}2HL~%S@kKhx z{Ol_(fzSs$RxZG`KfqT(C9;ZuLsgLpyn(xI$3QHvqC4BPU<4ItZMaK~b&oCTU;9^& zeCX1|3Sm(V&}b~?bV{8rZJG$lrfV_(<2?%m1ox5Oz8Mh~T1TLFVRNdfiAzt=o169aEk=Q|Glo0_mKaCK7xM_m;e>($= z(ev~2@+9_BX-mFLs}kyI)g0aB6R69+u5fM6ecRgm%p_jPNT|G?a+I#+tV2(rb;>R= zX#SmMW`65KR!YjX=g53;yuD#!VM%gMjU);kmPFQ@J_;)7|COEn+D-1=jE+UwUhr=SfL1Deu%!$IJ~( z3V2?{td_&#i|vGhelNtBJ&Wr;y*QsM&kGDRsAf+(&_;%ejCi>1RvRK0f#mfJiJQ+% z1fS4wzj^|C7LH@|0mq_95j`X0Hw8FXjMZXdLqR~%yrv7#0dT*kU1drMSkHLPe zQB`Y$IYz`N2k^S=C6q5KLFZcpW#E(Hu!h%?Y-jmSH@cz-);8ex<6fu2XPp$hv21Q$ zwmlgijr&o8PV)dSdQpKIGYMXS9@OWL3L;}WcJ|(_&{KX4z(D}M8o3+j~Y&8j<9Ub{$)_Qyhz$LBrCvl&Jbq4?&CxJ@Qm~_+BsUXvZR{XdE@k zuB4VP!^1Mo7W2++FK^FpU`Z`lUj;1p|Izf-VNrci*F#823QBi}(p`dtAR!^$L&wma z0s@lK9g@eh9T5B_vGfNzDaOloAQBRd0 zU4=MFxY1zD%UR2xja|7!<;~Ro}WeZg6csPF}%e*J#L_KP-9Md z)|ow$`EeiQ#e0K~rD?^OtVOsqlHB5qMkj5=Tp(udj7-ZVibAg&zx4qH>vuWzminrc9bLc9@O-^46 zKYT`zC_O8eP!^1DK^!+&USzM(lXY*wYG-Yk*&j#t)Z?yox(B{Lnt7+(dGg;Ts@ig7 zLT&H0-q68~Dk?UpgLA}#-axu0nLGrLbZj(41wQ!5Xqp}O9U*}PF=?+dq|*R$BGQA2 znUC$^9Wfk#bdyK$y%|a82apOtCzWRa41Y0#o32i1aaR=4mVP-&^pTngca8CS`%fgD zp<@eq-#xro-Jlf1Krxrh+1(NkFZ!WwD?PCNk`?i`@S$2d!kAFqh_P_PG}Z7klX{!I zB=hz2OjI8Hc&8VhgSyJ-tgJzJO7e+u&03k!!VWNsnw>IA`N$}bh9;yCfq@cmGedLh zSnmHb(W_tr{@duHNa{cp-Y2rUajSLYk7LK7gzB0_U@2)_F8<|Q(&I5mI}^X6trxP` zTFGAY=2s+fI@WOj=flt*rh}jWKf&sWvDRXXlk=3q-Lu|B@#oyixep|MY{S|zb`^DC z;-UwxTh+g;*d(A6xt=*+q&A#RcaR5G=2ckm-`Xf3zU8HVMXcu%!%@$Nsg*e zX#1=8guont;J9p2@xzOlfOqwpqHyAGH-D=rLK=7DBN{s*d|+&EJzg9#_*XU>LDYJW zyZb5AQ$!o|+GxJmehAVJ7*UY?81UzLIOyBUz2u9(Wk=c*!_te@o7qy3K}AWe4XM!T zIQH2_l?Pbz@sANcf#`Fg?Y3}UORg1KjR<++kY-Qo6*T%>-_(H(cEXH>)M%U2!s3KZ zARJ(Tg7TeM3zaZgC#56a(3*#Pd&e{z3q~`+e|Iz*C@GVJg8g10RIvst$&1I7Yw|L; z`rAxZw%pgsTQsWmE(=ex`TAv0+b1`H4nbOR=|{%3 zF-`Z5A7|UNr>|HoA{k_4{#2vGBt7mVM58_!rA+qkGEBfs`U<>|I_`TglJZ-?qJZUhWqfwe=<&#!J@2xSq_h9gkW&UL>v7o@n5@ zQ_S#w$@97nj8W@n*ojqyL!-+f{o!C>wEhM%gW5xpPgEK*HA*z(eD zklz86mmMP+19D^Cj4MnEd{_7o^yBO~SzUq+b;t*;R}K5drgNuCDSM`2VpmL%c?9#X zU8AdaWA^BIo2m52_sICt^%>HIO0*=v*HUL(Jv}>n7Mo{qO!!ZzyBr5sO8@sMeRf%H zCjQdcr|OAD^zU-NAAhfIS{jryTfmznn{T`W?&B1r@-}z2uk>}{EE;b=d|JIEpRVn|k2j|PC_xY6C{%-6b%W7= zlGFiQSNQ`O`}qkVZAkI)p@0IuyFLlPxh4Q>*P?&M8O1jmaIU8bqBT{Z&k9)eDq(DA z%XJ|{*Dv@+Mz)zbqtihn$Orq;HKRN$5H63^wTt?^KZ&iEc)<^U=fbom=@$Lba4aK! z{pjD%1W49wCFE9hE$u~_W?vM=%&<-?eyB5J5}58rut5N3q@YpAzeMV+BE6tVNqE48Q(-!XNljg&jk2qV{{y%R$jW zB{aPpm%`dK`Y@)~49XUH_DMS8Tg+i)oGRzLM=sJh)uEB$O$9|%f}Ez#k^7|`MAl5) z-RI+l(j{}w{;VEU(-hNF1*htVIPybcnP;6r-lz_ZG91OXsL6IEiX{Vsx4-m=VHm!L z2FmTz_7mkUUgJF;)%<0e*EE;VBKxsJtHj|KgO=sDgVL05H&gBUW2K%_S$f-7X}^4o zpCP)`Q~rYZLqd*rBKg0a=X3@@_!`k;ZZcc74_dli3Y6sHmwd(tarF>^*gzi?cl9Js z2>}u$cf^&;XX?fv{*RX>-$nkG=8Rb)(N$0^1Of%9ho3(t_^{Wh&sqW`!S;UkE?JGX zgs7L!Q-RZ^ZzD@BR!0Du^sDeh+yrAR+vdN1#!ZvMplLsq2JXb^ZbeaYP@ncxRqy78 zzU}GnB`cNtHkaKy__FzDho6(S!eq3NTH9Hf#|J1J=k2uHEL-7A8R4+|y9H9PBa#zI zr*^NE)p0W9T@P@w@qg06;r{rY`p&mktE!_M?{Y5B{J+kF#y%1$xbfmTYZVb0*;pBWb0vrOd^`oM@_}ft0yzqs zk0PD-IK^T0vGJI-&nVB3TGT??3YqQtnecu@oef{I1k5_&`f11c`7RxC0e_Q~9t3>a@keEdy$P)DM+Y_IQ&w&dmsLTS>4P56( zv}JIRGhU_@N*H88+dL({NLf2jQ`=511T`8BgYE`Mmh5VGKUL%v$Jo z`t?t{K463n;Z=4u@%Bg2PhXPc4#N}o4mc1~_zvJlC-Nh{h+3E9^u*Sq;8!}gYO!vr zsTqJ<1LfQ_oHyYJ-cZuvID7QuHVUl4qbI)VBJnmVAvuMo7=Z}32Pkog+mbaR&tjB@ zEQ}kJi!_%Dy2%B#5_i7&UR2{>!Psdwd*gz9SlV%)|F5^b8a+9 z$&Mj~7{;v0ESu^)aEjR&9+th392m1cRpEzWF0$^ZM?LXv6XD)ho7-tEjtwAQ@421g z4J!~d@&Pq@QlAo)k=_<$Nri{*_10Q@Ac?Asw15wGOV}rDapF#@3mn>0 z2beV@*$;cNiXM0y-m1Oyhi7NMYWi8g>MpD5%Ps_Vac~{%+c+yBJ?TvUzRS;P7SCm2 z_a6yvDO~^Y1E&aD$#tKc)3!Tr5E#2D8>wS}^d2v(##o!gw{l=Ue*9~D%J|p8bWr}X z+9X8A>dcw`g~@5`lip=)uwpRHGm*^mk;lMC^!6&uP6E&<%Gm0+p|+OP`kC+BEZ3Ki z>Ha~1>zjW!OhLXNKdR2U29Bpz(hp6gV544Mqg?ZIS8RFb0IqdoX0V;$!q{;D)X3qp zpY+rKgYVm@JFU%qOf$+VR1SCopLUvjX{s348#KuIVs~e&h!qIFdSXf`=~mnFe?35xW2R4n*9U38TFK z9Ma74q6B70DGqAou41d6(Y$=~?Hp-DxG*UdoA!uUdbwNpe&)7+m!tHZR3ng2+?Jdq z0*4sg2`30OsMqq%n_`9b@o9uQ^VO138-~yQ1gsf#HCuVwhi-YdRE`}{au7J;Z(fkI zP;Q}-N%;6SwfiTPzjo=j4BL`)xLEqp%=GJ+;#8u+8*)Ldgw||(Qa7FqYodEv!1p)U znxbiz)5*2h4PQ00$vc5Iakz5p?3S7(3(-ZIsU{R&=EQ=9sC4om-#)NXrmZ49INZfZ zz>YXs-NK{+u)gG@2C6Q~i8u&>%0*~-tBx>zmML32BzSRO;~LnUd8c=1H19)z)@tjv z=vnZjm8%B%GdfWEPcc_ic-p$*;8LiDS^!>Aevf)+v0f*9*i+bJEw7k~9T7yw5W#V)fZUN*TvJ-`{X$)~OR49nEQA~!W z5Y067v0{`ShV0M}_74nPCQ6M#ZSOR0p4Yln6u(l5!CirRJUfyf1|X;ekkRNODHla? zO$ep1_QJ~AMs_#3aoIe!RH*5ap<;DN3+;cFDZjE?43Ji4Vpm;IDrpWrdZ>qqqwLaS z-z2A%wW(`N!LoiTe8l{KK~mgok9GP2PUM*`EjCQ5pOxj>X!2gPset;X*}@T0EJF{Y z$DrHOzL(jBZPY2u{-sF-D02g7vK|d7-G^xvY6tmmyr=bh0y;Xp=$bNebQ?s^az_TN zp+k@!wgO82pAHWRiJD_@aovz^D0}7{OS1%BdrTCO zX#a_WB%B~-d-4EeE!*{NR(|Utkfv2jTkTIEruSRRK!lz`G;pIPHA!1OZ_ZrDeBSN7>Khy(Mk*R&QCT<>0&lRTKU{iGd zr(unXf%?M%2lga15tLOFd)uHi*3hM)4ZzMV@?z10?b0Dxpe5c2phn4rytfBg*CW+T zA5$-gKe(DSX_y|cDX)Hh{lWx0y)Cu^lJ#0W;N;=olwr&=RZMhZWAQh%V4A)Zg{P^W znDH&G1-4)0cG-onMs+LEQKnYrze2?qi)fDl%)9>JImMq6P3}R36RzcNuWsG-CIRLY`cN921Wqwba$!EiIn+%1Jl<+n$rOrTk5y&SSOKTH8 z`1XrsR5NEowly`=P4NOCe2-?AU&bg-FM{C3_!{KtOF&z;QhBnETWx&M}beob1G5+I;zYa?zn z@{yKelKK%?Mm$R?T5RNbpmUZ{9$OqsC6Um!H%4$+_Ca2UEaWaC21}QF1{}|2PM&rwt`m^mYo$t!S!h;-H0(W%m>I9a zdW&-O%f;Ffz^BOfoJ#?jS1+N6l%+)|`{m3mBFArk-%;ChPrd1vuFZLn#_j6`KcXY4 zxQyJ7|ID5}kA5>IOMlY9QvNQaDN7o!-u@j4%ALn+%L653P7!@=xED@i%YeJW^xv4X zWbB<+>b93xk{;DFz{g4R7l#vj+0OlLnu(%o!Fj4~33$U0K!)t9E`C@ zW5HvdcdO5Ry=YOt8@ypWDpM_7x=lCh42N~84x3xjEc2d^8)`=k4oN*N9)jCV^Y2W_ z?!z3o`zt+gTpn!=ci0akE0&Rrj&7$_-VjSXzl9=-6;@b+pqQ+I8W^XRwEw=2FH;%W zaX?2iFBuh&Bg(+(;G+Bcdq7*uNUq}d4%3tJm zlY+xZPV7t$LZWM~dBWDQBfimY<>4StRm;~HzojT?GMurEs`Yr|a*#AUqF^8>Xo+^Y zP~vk-AqqBz5=+69UQ_V}et49#(Y;|MW{;}#APx>;(`N^|YtcdtekDQ{?eOm0>|>W6 zK3s!dQs20;6Fl3DyQ8#X%I`L0P}fw~X62WB%du#$Uj2Bbu1NAX)Rc@%2?g|yVZBDR z%8JKWZ`7Q)3m-+~Q6E}olH?&R~ARmzj8kLG0{&8;p4#0q5M3GgJKFDz&@HLtYr9}n3Uo}vBy-cAoZRq?(0SI-| z7o)beD=ybB7n<>6kY$5^8B-H(Vq#RQbOMyxhvrG{igaFyLZ{_2r*{2K#nyb5uMx=) zLaQH1LxW{u8fWO6G7<25o$SJ}D{uwDzw$Tv#p{qb+WiKMJrDhGcY9^-7^uga7q_~V z;MIK3N^}$3;T<)Aa6f|S6XRONrkGh=Mz7p2W2f&r`C0#ytE;|i;$c9hdY*pfJ_bEd z>99EW&KcgEQW6M1w0{FI3+MeL*uSNX+B-N}HZ~5?bc4Ee`Ga>l`fnd)mhp^n=hkls?(%%_(JFS zlxPc+OhB3=KT9KjmXe6j>D2k=JjXK%_#*$Vim%uJDTQ z@9#227DSRpu2kN5kb9na!`y3fUg9UWkCLKW`Ng;fsF>QTtUg5NpU5V=CUQh#fD!9O zFd=bq$``k24S3e|X@b@~F0P3=i<#&e{ zw5h#K#=XAv1~-#JVqDdrqtZED89S+BCy8;<_QN zlzQUG8XbciMM;EpuI0!#5+qN0ir&>WWTcZ^w4p&sAe2rLdSxa$ZVb$GIw@zp(Y5ci ze;pan$FNs0f;^Fd?raw*W99Fb;2B>0g=#R8D(^})=*qNbE|+&D0OVcEoF8w$5H~pq zNgn46T(b~B6=Z&hSXl&%_atfMkk%ha$8f1BucKJimb)b^?=gYc9X>n64jtD}p`1n6 z5JuNXZbt{Exju1^+!AKFn#vlfI0&<`juo^^0Ttp32nn;>WE*?Q{^3+RX#a;4eA3|F4I}w^D>m z#%?pbm;Qz?`fF+;k8ws;OP;d_lxw*6tfgxEQq0XT+$Mvo$Xps@!u+qx%Hb5`aKUp- zkf_;VTZO3rL)#QY1gZqd<=opKLNX8hwzY9osamxSev zgK=t6)`k;PckJy{B^4DVazM~__73wlPJN(SftAy50~|?YZ^IajIrqN$K_oZGklTb>$U61vxd@_ zh1XS`M99TSctF_s52G2WTjl5Y=s{jB#U!ezrG3r=Ef@ommFA?egnn~qK8tTrD3P>5 zpE*xdG`GLEyY3G>n&*$Tw0&r?@+|>cck3*JKM5YPh)+wjxgEq8`d;b^)%?lZ2e10c zINu(=i4sJKCUr4T?=6Jo;nw)%G*`eyzes?`%`R= z0Q=)7*5;%%^pl~x84tjeBXTf(WF~cHcKCOF=CnZFBzki?e<(&E$7ek6rXu4_Ti_jLAbh{pZBmH=;)?u?tKb|R`#FX{blTA3S5q#0m-kD7yg@;yp} zH!fa8!{pE{xLSy$ByTi3XgShAVMYe__$^gLXY@rx-km`(4eX+Qxj~79aC~}^>xxn3 z4G%2B#*VZ@)L%|~p)01_B41+t9cOhmYxuM>>ZaS^TNs;Q4rhQWBfL>#lx0V$V8KP( z&W`Y%)xaQ&~B(J3JZ(sJ8LiY9jP%X zB_jPGBn0ye1cVI8-~-MC%eVI*0zn@{UrRAS7!0a zV#ZpHrh$fXk1#_T-PbJCr`Mg#R3hG%jpN`*xj68rVayr2M3;0!Me$jcXITdzMJ5pU zgCWykp%`U&(f<`A!3utoo9|&OGAjJ~wcG5JVC439l8eIZrE9v9rN6(g zKIdij&!6yCByWsPil9W`;dB!iq#i}3e#Cg`T0v{8#)KIC4k@&}HS^W6EJUMXOp}l- zF0dNm3x;zIwKT>K1l8Pl<2AC8mB;$Z6wtA>T`r=Ne2Xg9+X zxB+pdvO-QoHwX=b)f9s@G$|MLME+Xx>4MSr_1~9|9zHNxokww?vZqFQWWlxBT?g|k zNe+T7Y#XJ<(b$fE>acHFxUNKvH^t?N@{BlsIGFO^u2XlRLzq%ymLlz-IuQn4gS_6p zLpYM`+uE&z0PRM<$5Xo`JQsPR0kn*}VhQTkb4$xZ5|HA{UzXcl-q+i+-}coKxSggO z&HMLRZJ)i|p)8^{hG=&5u=Njo;*sVyJUgvjGn(4%@!F?C+p+a6g>SMQR2>Zco4eMc zC4ywIJLT7WYE(+tW7O#BOle12ve+yt!qQ@T=@j~Uey%1eZ(z6Y$^QXZHQNC~7@q>V z%lymA=!j(d|A80eG}ykS6f@Nqs(%C~Lt1B$YV(uM@`?D%d+i{H|MoHy-f4mHTCy=`uHm$IgDds+ zcZ#dLlD%mUbQdB89W?a{IVSio8>V zF=t2uUW{H17`dHQqV07F``$*IM~s(9n0W$k(N-NZHUOoZ)Ctu8KPj?Hy_=-_RO{!Ru z&MG5DF!>6&Jj9YC28R!^^%2VgN*dXQeqIQT)x8$-0@kG1aGqBG8{tLakgdhtw#^{I)N1euSRJ8KoAeb@N zEVr?-ap~&n3Jj8Xu@aomLO$xx05V770x<>Yf)Fn@5=ys6l$BK-1SdeXRF9>TR`KGY zP{*=OSKH&0yF|snbvLy^_Uthn4gPOl?SF4^yy4bggowSnR*G4Rm1vKUPOx`vPaYM; z&8B}lMmErWm^dCFh5cR2?bnv&)vBKAZK;VboB>q8fJaX^(#87OYp?HeXPW_8auV*V z3797Pdm-T}WW~3#U*c6!J}YU^IHvii2=%BQX@1H}5&l$up0O#wH{+U<1O)aI zJgR@4k{r8cWy&65H7YWXA(DcZWvlaXdjEe{ky}V4tS1Fy*vi zQTvCN_oMt<)=gMbB)y^pD~7h=0%gHWnP9g7?=hiMw?_#1Xe~!46OsV#ZzcLT z?zXnrFy7{$PFIduHP787Pitp*_v|Bc;#qY#wIqLS15MmVCPwo88}?sVpXLGvxfv&1 zD)u+tj)nRta)KIc=*CMfRz#1A_$~sXG3>Nvh5OGaIh`JgWsI%Yt zctP+eZU}V2n9zNFMR1R(lqi=4Ct5tY;8U~n%kAYb7DPFxJXw@thP?q-GxtG~^iZhjpn|1l+^(*Tt#>7s- zBS<%5L8G8F`>CtbmKZ8gS3NP0t&1!A5|t{+lMM|!NfB?`!;Nn*_eWKf%tvD5CZ|LA zWyWGR*wQ5DRU9Qc@r6iwY#ET;mi?GFCV4?(J+CQfAix z(X+C=Akn*&S}OZ9PK$*4vy4B%_}oo%X&J1D^zf~6enHXvjx8{|-j{tLBlCyizu~lE zTf<7pX3S38X7WnJb$+$mLZb(GOl~=Jb&F(j|7@1NK)bThVf$$*&w~CXIM>j|H7xOd zzH&i%wW<1~B;`I0ZcE;JZ2hmP0;zWw7z&Sc@)mSXH_zT7tFJw6hgW^;ZiR zJ&;Z})@8hDoAP9H7-KcCzfgpzRIxfwTz$KAImZgpTL^YrXb;dNL(w9KCX*E;CxTBA znzs7T#eDVjih+>d0y)eWf5|iHMbAf{b(+;X_iow@(rvH-$YUB4|K}?)$cz4+mF?Zq z+{RQi@$rB9G77=fD^!$S&EE?J1SmF~!Mloo9QpgG>^*?z)>i2A{6t&L{cVgC)H9EU z(vG(Bl8~3zt{VZoYb9jsu1y?JxhWj<{wa}$k}-cSEWq)p>9A*Cqxi>htli$RJM{S( zu(ZrF*Zp#QukU-z3(yvYM|E{|#V6f96cF*!C9b_66vHs^4-z}Q^;4lSAX2;On;dO5 zB0c(2Eg_SM?xIGm3Sc5BGP19b7MrqGyO9ibUiNL05n33YMiy}uxo${bB*s=GyF7SXKu~h1=ra9r@#xY%`HpYT_j*Bu zFBXN*1KEV6n9zrPpp9tu!FW_m?NB&h=pQ$B7nd(DukfiRND^}eIq2Er?x5MVvMKJD z#RZd;^R=R0o=1m#$wJH^5kooW{7sp|RAauQ59{UH!#|;6)o2Y-b74i%P*X3p@Vn~z znU0rf*T`PPNI+TeC8)9Np#t0FMW;y6?@WtSQysZ42DOG#t zQG=`f=c!Hy2QOTY26(gtqKc%2b&x)D-$@RL%B645&1^Q9SJ#8zmK;NBc0G$7s#Bx` zsy!={ud-*q_h;>UTrD0o&cRDW2iv9z4XNeR)8LG_Wrk2S-5n3g=Giu~-qur!zg$Y9 zGlpsdeN*Kndo^%2I8;47+t!tq`iU32Yibw_dcyBCM%IB$E0euL`fdE$m$OZ@dU0~^ zW4Q}Z7uRWwHkHOH)U*hjQw>lk?z?q9_HtoQibu%Btms8O|3dSwTdqI6>T&Q$$Rwps z5ogH-U*F2ZvO{0Z!LzX;aZfqfqqZX>9wL5M zm8nZR_KWo+&$8D@E!1udU0iL<wEZ_}$+#NDu%y8m;mQ zvn8MMczTbpes`})S1WbX!z|%E`VA(4U*^5Vq*e?`&(1+PkpK_50!0Vt!F`}bbo230 za`z{WQ?X@|FpKQPj`XK_RsTV?oeKJvQgQbAR<*#oR2&Mc=PPNs>ZZM#YZt@oU&lu5 z6V9HJ$4`bZf8+g@=^39GOK`=T23@;s-F@#&N`%5FsM8gti(#~JrDk3vdp4S?!V02r zM#Tg?C?}VYSjNEI)pf`i-im(7n~^Nr3q71vkjb8vrJoYWiy$Z$`GhM7FIysTl?OVs z{BlX|O(|>v?eM{05N0PT#K&ug;#ALVN@9y>bl4P*6?e;%G%(PGHGF1+!AZcRE1r^1 z+kqZ|;ys=T8l20*flg$d)uDO_Lyp^`gyX<*lJk43Dvp5g&3s_a66c&xR99V{IY=L0 zIE6@BffSiV{ALGiks@f>u^^q@Vl`zq~@va@DM5 zto|y)lQ$cBhu4;wvfv?(X z!q3d~mcQg(g;?O~z@8?_o)tNGS?emqcxQBbc`9{K{B7n)w8f;2D6V%k6W*Z;j3r_w z6#x3wIMC-r0TgOl3*&;$$r-yFbxfp2zb`4?AR*9K96*meL4vQwl~vnL(f*wExMhm# zluKAMy9H?a{-p9&ow#pUCtZtXveH{TzAPqpY>2H+`rA0Zf6!RKZU`NBSD~mSPkr#T zn=fn15#9@s=1;Ho=p0vC)YON{8cy=NSa+mWFu`&?t9?BK*>*8hY=*h|XUD}PT3sbN zs`PJ9a)B?m$SbpZjaQ@bu_t<8OmM#?QFrz-qd704w)1G_`#UW3Uis-ir{hn}r{mv0 z5Ec-g6BeKVODl_T>k^UM>@=P=98e zXIJ+~&PbLwk5g-zg`fWb@zfttRw*luuX&>O9+~V31T0$8Zf@=o+#aLo%iNb5oc^c0 z#t#?zPhEIowCMH{17QXSR`mwKbl#fH6@2EEg2_mw$G`3-wM4Ol1@ zq~LbYiX_m91?8eTN!UcCX*Eh2sF=VdjCsDxlY$|k+?@Pej{H4se@Oi6xaAmbf9gUO zCu6hiw^gR>9lPb`FC`r>@LP3z`#ct>FGW@xT&v7s@fD{Fhb^wvAG%=+HrLFysDjrP zXIq0lbbAF9a?sXMj{%dZ2A_#b)_w1=-DTm1lq%b8abMHe1xoBGEPuVxcDhC4|4w8V z$@;e*G4f732S!IHhfltZuLWF(8 zM&4V9X(RncvIZ5!NRQW-Wv5^DyRk2HEZ*@bE_8dqj4PAke2a|yh6jx#cFmf zSUs0r<}yervCh+z=2(av+g#ia`#-VoM=_5W`8=#m>`9@taBnu_OPdww{L?CZumBH< zwm)X0KQWfkB0iN8`#LLKPn@4Wj4ci+tIl)XNYL&uDh^N+%HSd$qny+nQ%Mpyz2sIH z5A>auvebu)AI}Y4dIPPunlJhe)pFD9YIKzaDIjYPNrt1w$PAciN9?N5dBoxT z{6mm;IL)0fV^NZ{giNRCao|S$sDO{M+Gsvgm34-Y?L_xS+|IfetICRzxsAy_y34My zVy7z?F|J^GK^1JASS1|1(k4iw8Vg#i12M&7?Bhu;vD9I5k(Rs_BWrMB{I;_6g%M*{ zv(}#MqPp&6_IG(i7Zi*ZBQ?M?YQ}xc zKmI1=Rjm#V}AnbSv%1($$r{sio!YbF;xyJ#JSAPS=U3 z6v;buQ)`h+C3u2(h)qnuFL#|Wr9v=t@dq%dYUKXk7vz$8qM4y5AkFA}Yf!$j6qtU*wNHd<=F~#Jbx*JC?HXt&})sk)STo?Po z8lnR`2HdFBrub!xj?Y&Ek9qjTl5)wYGBPR1vM6?s&&38`EwN!wdIxvnJ&N=$_&&cDT>ZG#1;kgbUwTZ@z&xk z(A6`v+Yj@rCXt6373alY{DzM~50|qbVQvG2HnW##=;%DWlascVmJ5_*WG)(|Nw33b z9qb|BFNcvG>|eKIgO@o&y@(^0QPQ4&H9Sp@rSV=uBLB^Y!#_&|o2K0~*Vh+n&j<=2 zBLbI5&M{E{?g+}!`qFPzD4FOzVsH`mts;_1Ei2y?lN*pd-9 zZB_x#aMi$pY(ebH&05papzb1zEHT$Ny(3wzXMNvY@p6PZ9%@jUr>xq~=f-1F#kSFR z>Ygv~if7e1YayoDJ#Nh5B_#?N$RIJFz53NRrg}wn2^G&Re{dK25B?R>{Y~Pw)Fh|J zF+nAW<|eYPY~a=gaTv6@mG-&vCCZSuC%_i=>Yt|%)>v%puSMFb>jl0SFubQ9pUMI< z?pi`wBQocSYEMX+c5MEDCx7$er{yabDq3MAZULmvgN*jyF`rF{;IIwMk&(PCpNAYM!|6`rgp>OQQ@9zH` zI}$x|N?hC&WP(oS1MkoYXX~^T2OG3~+poS<7wd0t?~Y_T7K=KjTZv{=_FOW zoX+3Qj}BMNwal&7#uFAPs`HSqJ9fVzC^857IO-0N1v|;Sg`did!sSG8UDckizi_vm z2UmtCHQcQ2lSC>}NQ$Q^vVgC=UtujJqIYJchElor@CzFMo?oXfnNRq)L2c}yW6%wl z&RGuQlwNV5h*~1RK=S5hy*RxqkVYCU2oie~XYLmh8;!K} znzi??CTn{s{(R}Femh_1%Guch)?~!tuZeZ~wZLk`Q1NeYLuyQhk#~m>Z2h`ia7*O_ z-^dP(CDVJh`mswj5V)q!^(u!ArSK=@ezE{A8Bl>wo1-W<7tK-I+SSinvZH=_xShjN zzj_A(OoBh>qB~u9N?!cDWFh#VmjBt~dH!IIhBR4(Ap&<%u~|_8C*g$uGfS!(TWWvk z*BKEp4VE`?5QmD_z=*G0?x6q@=E^3>(yaaTWda#|wDGh1Rx#7-ARCZ8#)Te=m@#>! z35XUonj515w}G2_vghIMHi~%kVxT2vTM<%jxoFP0C{h-pp41>$m$}?J8|LfJJbAgwuH5R)%^iGp2w_ zUXIFBiFdA9EXI;I97G|o;I**xrE-{__?>Y}r>me>^iL1Vd_97POPS~6>7!P6qbXl5 zc<;en8c$Cf#^Ppm2kr_l03DV#QcTm9rDY5wdTQpB>Ch|{$o;T-9#WDeAr{p_6*Zu434P54s@>k_4T|f@C4D!*<1Ofw>@@OFaAn zm@AOpTB9|c8N;94*sGYPPivv$}@dNq1te-B~oep!f* zi}6Vc|4F&@;5laIt{friy>}KcQ!Vy%)rgrt$24spqj#!6axRH}HPy zRKc6uXJJKQ{8#qMEF_2@JQT^zG}mlXdoB{wckX`;N2kj_J?)pk7hhCAv#QOxM=5yJ zwSydhAQ=>YhbOz5oL%tiJ_tu|sP~mzo}|IVqI#Y*L9+r_%g$JK)E5N!bjkg+#y_LXCHRtU5Qb_L_-69-_uEg;((2f z9f9#*GVRPv0P7}s*x8e_iS8rdP2^2N&Hm$R!L#5gIWIiT<1?K}@N+@RSNz;Sb34tJ z{3Q8e^@ycIYXC29aEC{`vU*MIA&!^Olwu#DC7RY0>mb$(P`<*p=j?JEDt&-#>hb6x*;(k_ z;dV2tqSicYp<+R7dc?lrzv_#NwFt`lYVWK#Y;1~z&}}3g-1_G0v$HcjbsUbIifc~z z*fWfwpy3TQwcoX9rl$yEm8|fmN31*Gz@B?yPa`% z4npj%i@T;cz1il(|E^t+5silY&ub}BdhwhJmA#7}7b!Bb`bfb6IS~PBSn-UY01|1i zC`yn6tB#@+1`;?gN z@;J(lgzuH-xLk!i}<^ufx=AFMyj~i46eUh5|hJE6B1sA4Jz0v;t=b3u%y71>@^P2RKTNXsQmTC)OL-wpdRT%J9eRy@5cgfi0f_rq#N}7KcY(X)&n*v^=u~qz zcPMzF!&k#cQ&Ft5?vpvbEAM+;nb6PIQs&i`JiN&2(5<*c{P92Vo|8y=VF-?@t|^3v zJKZZuZiVv*{irqhM6e|$YF*@a+C$gnmPny*@Wza`lIuYcS^zlf4xu zy!KN&{^}1yI0)!59tm>{G{HPZUj^+F?c{Gzx{63H>>3Qq55kVE3HHJuVO;(sXgM zxhA;|Imx09&1Jd&lUqp~8Mkx|>y5mY^iiq{<$?uQ64@86=wPw-%FVd`_~hMJDAv^Y zg6WiF*id=cwz5?Ah=RS9>S zTU;XaXN`h+uVp+{wrqg?oAt@Mw9M?DpWjWD@GQo+b%X1vj0_D$m6AqcW1^$9`n1K# zvz@6QfFgTF^Uv4oEnixInT+|F2fel`=*d}<`BX>p-cObSFui#}ehLbIsf)wU`*Du; zub<}dLOKX!N{aCDW%3N!v87Op7?Kj`8UFnY;YHUtN5@m+?4zFq1_`{)guafIxi=+j zR+p<5qHkWWpH1KRADXT*sLi(N26qY+E$*bnp|}@!0>!nsI}~@<2Z9$Xgd)Y=t+*8_ z?(XjT-S3ZYCRb+o!({eO_S!w??AfCbn+T59Hy_XFH>QJE!3}0qki=hl>V3yBoI8P3 zT@#YG&vg7~ltp;R=1OrXK*VIN-3a1Tp5lMlLDb!JL)7~^?B z5T8ZN?k9SFFzuU8&JQQO;TIxhCES>@hpbGdv*a(!NYSO*9& zQlhjpHhJoC3~@b4NeLW8`+!26Drm4dmBdHv0FbOQCKAV?MO261|!UZedk+NCp_ z$5ns9T$kRoeD>=N+4h{z{RDgcc1fny!&8C6VW)nBy;c5l@!R#H0+99Shx8 zdc5hD5V;de5Myb5D1-*Fa6{=(mk^qD5|femNl@7kmPWc1yw3G8Qt3DaMv0A4^X%yT z{+-s%98>){_6%W0L!ppUtX{)%^_sD5Xb~};Ir{TL=1fT=$%6IQ4*e;+(~;pw4Az-Y zs~7>B`AXv*8rdN)d53|QfHzr`^i43@ZV9d{MPj+4(6=MWB|Nma%swd-79-byg|C&G z>T$3EFi-z#?mP`!CnNop3r6aOcT0IR?=m|-l}Fu~lDcejyyt}njn-o-LwelFw`)kQ z@9s>#Tj6XK^z!}9jX2_SvSY+00eJ{Mo$Neof%C$wjVS-Qpf9!i$1KV$Cjj5I_F80| zF?}c_G8FDNyfz9>&HX-{8@9UYjdrrgx}EKO3-<$ zLBdsV=z#}`{a4}3mqf!(f^jEjBiBl-bX`BSGjY%I=ITjLhcsb`HEs1jS8>69xq>tC z&`+ROO3)e2`dlbZfOIGZ1hpv@X#i5if;P~wE|9v@+@RQsU0?fl|2N4#PyX_++(2U! zm-k8C$lW5dBVBQ-_R5VMqO#HQ*1(n{eJ^5V_4~YBKmgH^44=z7E@u{=T){0lg zQH##F)N1!XTEJzI9?k3Og?D9~K z%&4b+#F9;4fRe%9?sD@dk0dtvkIanRtQ@b|&J4R(xkFJ9>>KJhKyVF^ zL2p*%E1g)fK_9=2nQW7F(U-r+$6~F3XB3@Wh474=Pibn8A-WKP|9-6(>>}g?B z(mSVb*!5^JJ5_F8^?_j{pPHP!kYdu1IP_&}Ty`A~0B4eN=7()x!JwjyFyC?NVe`t&cCo6|OvrlB%vAWAg{%YnhT~a6ld1^?N#w7yOj}n4Y1Ad3_z>Ms&0H-&k zMQpmtEW50lz?zYjUf3KZ_nDUiyvM+RrbuJP5bvV9!oH{ZG5^21Si=--@v?)ol{H5x zdFTDH%k$ZB)6nwCC$%VhM!-6Fej_p?mIob5C5=8 zj9Oy6#3M8(KJ32E&jZaPbti7?(>&aPM7}y0@N%t~gv<`x{Q(H_YwTk{&CrUOul!+T zY-aTcO1)ZP8Ozl}UAm!n)Towoa8v2mjrVuN$qdR}h(t$Fs{^SaMrOOLd6-S(yV zUvR)%SXowI@?M(r^NiOIkyqkz;a75f-)A^|zFQnZWr~5JX-ntlQTkdZ^POey{AZX; zF(o+li>RC_!}#M+`zQ|8JDIL{qDIwR&)?j@M0mMv?m; znZ#|9Wl{V5@THykiq)qh9z7ku|Ap3NL1ySq?bZ)pK?*8QA1Y2F9ieKrt^=<#*ArBi zEVpz>H~^`wDA!1GgZwb(6wpDAC=phvs-*_nt+Vb36ioGB)gSg8JxDv9*=CkZv`Wn@boTv{yo6e_JgIZQ zdglgoBvDkYy4f88BYWho5l|bdnCQffqTpV5q5bQe;Jdl#Ob6)*4Hwi%m;0VAx3`lo zGh2g=dJXqD6*t8z}yN~p=7DYc5HBL;lHK?d!v4G02RPSvNTSd84?E?R0cWHC&ht&vF8)@>eBb_KPA2R{vId-l z9G#wpJ}fWyvbLJ9mz3=_ZU@UfoByaBNNmHFIp5xY=<))+F(bZ&K`u>GVH6tjNXy(q z)7Is)8`;0pRg)Xfoo_>LRg|FtdG)VQ4((#s->h)= z$iNVfU5&@t7=JN=EleH-;f8{#|KNVsZum+%yS%jA#6$4)&wt8|)18(rj-zv1Omq9o zeaCTBEgvIA7$aX>sRTw?YDCe3LH@^m%|2Ek?AoE2h5!#zQk)Uwp(-eioQf>=tgmff6t~r5H%yW z71-0!oOMS<3@|UKYHl(_os}0a!QY=CUcZaa5%5crF}ib^er_v+%A0dpXDEB+Lu-s< z!K+UyZ==cIgWZi<-8|Ultm1wqCtsiHv+*{cES=PF3JPzbOAM#VH#LMo_ax+l04i*@ z5nY`4uw318LNcEHM^<_rTp=hF)S&!BkhCWBM6?|@B1CyvStPFG3v8xd?T2?6tfzcV zq_V!h?3UT5`wC6n_Qz+M)_>b}p0jAmNGoKGqhoR)YY?LG(SPq5eH~I>29DR^e9DR2 z{M#mc?y!0vG8k99Q7671lJjv3q7B?sHK=tJ3@C5q7cgF|B<}&3%BPKCi;W)5g*RI9 zYm{HC`r3!cD;g92dNXIW*x!KLbFumK^xuonIFR5uSh^mXH+}kb!O?mTIX)|nmBocN ztF?$w)O$R*0L89GRMae`_V3sC7wh_9p+?+&pyE3cZK>0Foh>Ot5@=|OS69f=s<2BH zZQh8WWQy1gSzND0)-Js>EdR|htR{QodOcsg*(;O4x^`E&)^^z!@H%|C_jaLxB=W41 zifu1b=P!KcaMu+3sqgi)cvKhI0U%w+Sk2Zl#477e5+?n`Apgg?)qH0rW4iDCFBLXQ zVQ0Y0qdk%+TJr0Njot^eDzGJi&AT?Pt`KdI4z@cXu=P^>f6Dn z_hr8KodF#EAViZoO#!AaPxMxuh*p&HXngTlOAse$=$^K0bAy}RXEVKzd)gl-eQw86 z&tq+TYW#+Q`?Jn;CA;pWuW9$22go>`kSW%pVqtXG9glF|8MYLsPVGs9ZavVM23mf% zt`4GjEf9T4u9|ZE>A-GiL>D*Tvn=xY-WVr5pjz!xG{C*=dL`yl7C^ojygg1yUnIxl zQ)X_8I-^P!qA?ps;3TWU_JU z?9-UziT_&D!1nxk6&Wc71#ogG$SKAzP!HoT43s>M9%Ok?*+UW)F@Ca5r>qq?}lOrf9}-Bj_HFR-r*EOG+%HcL#a5T+VPV0VI^C-O-af( zFY&9bsNBX;9Rf$0EOyVIt6JE7x3U3_)i<;G91_a2ToTIMEDBO#q0a)GqW?R>0s^93 zJUpU;A|j%K96X}D{2~EXF24Q_-;U1#;mbnER>4DvDea%~A@;V@(`zngGyrH@bXfKj zSdlNdlhr-!dpd1>H{n0DG8<_r4A&KxKkHFE);A^=;A48xvtu!=#6IdjC-r>X{*WWb ztUhgjw!HtcB~ZLC{a`1>U%)s0vnIRh&CPeYWKZzGmvpXmP96UD;@Oe=c08A@+{{@5 z);mkkb0l02D8z@2#qc3%Ln;5yQRoV%+C*lif)aaskLy{>6$!`?a~*f7=JoLEZlyEh z+A@b^pU9HuIb#W>{Z~9}W+h^e!RUI1apgzzPLWrviV{Lk&jHuo#e5W!koO}zpwGs| zNK4~MOrNE;w^8hsw7@9x-YXI_}0SzGS8!D7A!rkMVx{VXNvJ}Tq zMT#K?f@p$4#<6Ps=~AEogz~r7?Y@yrJ*Y{#@-c?~o3JGaP@9jkFx8 z!P$*XO1pJ~k>G!ZZBs8taxjB~*RfP+<=w5c*wpSo_O0!w z-8tn{`pCytZw2HTnZ{KzZyB zk8q&>Nr^8BsF(fcYi4R?BZ+V)KgmXFVStV3EB!*Dm3R^z@`>}Ws23lbU%bL_uHk97 zr;DUza=1SWxLj=yI;HAmntUHKm}uV|?i$4gVb;DQz-ZJHipk=m{g9=0%Q*347C6|- zEI-hcvkg#HvJKePRtvt~kn5z9Fo=9%1;hAsIV!e9ev~t2`xZnDIj0EBKP>UxIDS&V zcefFl=eMjclN1;3tla*NcjI+vpPPLNITEYZY>xF9!F`{*Twk-S`RS=c2L+H>*^UgH z*Q$JtEc9_F6{6n1t^=!iyUo|%T>u?dd`APn1m_#ql6^C8kNg)$6TJiK2j%S1q>a$z zD$#B=t3s$SzYzBZ^c^``&c6(Y2htMu4k@vh`g zJS!+8)m!~z{AM=nZloBx7p}V}QJw&QKOa@Q*U?XF^)~q8?iE-219Q6ThcH(`EXNfH z`+v6g≶l-;+Iv)J?ZM7vwuknnVMpgY-hu9n}P}1i+s+fQ! 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

5JKc2#6ti+ zeDaCYKQud6qqo=_`NKi55syzzafvgYjLVQ^4owHjs)qe?6=h9_U>pDkzyLs>zdWOx z(YsE?1=_{98~u*tn7@2#=6$qZgiZseB?u49+@!YBZ-_w3*-0hqhB7^I;>7>_@zZFn zM@*J7aalSRkIA)7Z#W3@IQny zx7L|!YVH*Cb_k?c63eH z=(pMDo5^94%>45b`ha9W*6oQvkUW2&Ro9yqjR&fKRJ8p(kvbRyU#CSrQNXD zL{9Hb5cbRKF<6Py)XHU{>v5s$)4Hyo5W0SY5aLE5M7L3!@T#rUNZuPc{0|D9GRD~H z*|lSQ59^U0&GOs0b3eft9&IDUEJ*4x~ry?OPDn&n%q=k%rAwO|V+}u$A73I$uP+ z{N3d6AP3L|APb-XVCT~EstD_Tcxj8-l@mc;AJTXBXuyf}G$VUz$7A=_6jf9r`ghwF zu}gz=8=pWRkSzCaUA$UXGxo^!N3R(I@c#(lZ2-Cfd>6n6PoF*WEhl~6cAs%lH(vey z$lxFoLddct#nOocPsZaymL&)wpr|SY7}AM2rbqiVRZ;Tm+l4m>;4R5`Y(SE@Qm!f} z6f4*(S5Z=RfN==MWFc4qz&`@`o6B<-Hkysct(daWBwgZTl6wR~82E+~00;zvBf_ZO z7_t%=biz>c!>BlZXmXqZuZhQEFHgkc&(d_gr&y`zilW_9u2%oc?DFy%A%sShLW-F{ zG~vXv+BxEOWp-HT*hrZ};zyEMv>(wciD)y8}F0r+_U&lW%mzzl%|4s_Eh{8Suw57oJ=-69=#xA857aB+tUf zhopxHQNJ`}1e5?kAdsMOe6F2#i}T>nK#DVdAeYU&ASTOiQZ(⪳~PsM;q4#GlVC zEiDiy5Wkz{cRT&m$-oVVW8ySDv^|#shB5H%z^6 z?euzW7xc9{?q+s=kk*}a1<41ep6>?V5N#3&1VVW9#{&;MfVaQ-EgV1^KuTO`Zm$5? zf8yNPs@((WM*eR*JIl;vf@aUW<2A2ls?envm&TaDn`KFQb1EM1OUC1>Byljtpy@go zV@M|x80pQ6@u5C`aAYtw)Zdfp&S$x%3!J?;hm&V!u)ed0{i=>CB$O2m#j3KeYWjy6 zWB=tJKK9qEwex7_|F>EryL(JFVszHSjf8Fj(RonE#c3M}1b1P#XL6W&VAl7Ec4F*K z9sawyj+a;0E3+%B^Qxx*4^0<;tLfs8RbBtDs-}Nk7uY5)AbvONP}!krGFY8As+^Md zMm}$+FMYEuS zBM`zu7iPvq2>@hd5=hXvMn`sU^cXRQgRqW52tA)lmloX@SX+41Y08k-e=xLIto_CVgL_IB-j1G@*=zkKKG zlXt!DbyHo*)a|)s;#d1}nP(37bn$`i9QyKC4)S|*S@d@0(c9I9o~}Ild%7{$*Mt7v zZsc-VFvd_WS0Hp9=|mjaR1)b#3^M0n5M>B)N!RsNUDq|M`%=H=wd-7eX`o#~gxUB4 z`7b~FcQ;MkoTyX~hQpSi%H=Tes}og@Xn)9`?8JTcLq~@xQ6sE2QIKpeGp$bSRJ98- zJy<=+Y;?Qb=tU~4W7UOzEd%@YOfvDhfqd@3f&M-|IXuXwh6gb*Jcx=2n<5arWNfGUg9mXgcE(@-UAt=)=JHH8U3;A@ zgct=xS_rH>cIL?~;-2X7JHeavciNz;zoBSV4mnL9MrCrN@e{3*ydgwyU)xm=p|uP) z-`Rb()3>3Wpr=;-RLur4++M@+;gJ~UY!pBW!1C%Ad z;BP80CUL$6VCnSSLW!g#fplZ|jLmv z0KW;~dXmSTq343!~o?5UaLw18GyJux>z`uKmyNV1to@zcczLq}zWSt#M(>Ln7-NHA?3cmthYaiw z0o(;ArlH;d03ZNKL_t(wC~CUI&8l~VXxSxBR{ZsYz9<2Jj50!q1dUe*H&mk19~?h& zSiWXza#G^#7rHX(m-ptfFYC$Ye(`zFyyfR^yX6_(v_k&Tpi`NCc6v1v@0s7TcG=x# z^lCc?+sf@MGYJH><@}A5ayRmMvMGq4Xpe)j$6oLt(R1+j$W9>G3ArAG-ot+0oQQY# zcMlE@J#*r~*o&{7p1l3|;X}7yfB4Yt*G^CUye#vVFou@_xDCM2#ONp^E+AbIB$-Yi zJJ65$n>iREK8PMo2eD;NnE2F4pL)06)9iDtO5oSGa5{0~1Q=uBSAGOz3<5w^)v#Z# zVDHM0*x4`cZWZ=swhH^-UESLG$>Q3^?#jj{*0*-BQ`pCTv4s6n8T+L&_V!EI-7liB zU&4N=yv}s}`=?Gne(J-2^EZ|HdDNHoZ&dEzjgtPg&#hgzC?)|+4D~0*2m6l1Bz}83 z9(!3b9($=Q^Iw!We}=?)&JP}UqGg_$XPY^9A^)2Ec{ly_R`g|-_NWCwNQ?q6zaO>r zqViwv&`QAeh{lu)n<93Ph zu+fCsGU-N3qPbZLhtR!4L&&F7s8*{` zRaF2GpZLc2M3m?5^<2W%62MKJSg#+wnupoosS{(G7#ri+gpARA8nc^)X9D>3m@Gdn z5s&F$44NjOXsW2HYEskm2_eK~0KX653zrraMU;4ebcFx>NBbQenhJX>M>po;)jCB{ zc6NG9_<;u=z#H#)Ed#)GA(*D?5JHHhwRPR-{Ji8-E9Lv^b%UAm_3cX3H@dOj$ksFR z`+B?Zh9ifWuIsOoCH{eYI(1W5CauYm1TcVciRnV@?Ul+iyT$SkHG%JJ@0G?N^mmN) z_Z*!Z8NlRlKl<}os7e)uy*=#i6|uRyhsBK@v0f;CMc4KBJ#y~+!_DT~E_PS1Uz>g3 zj81mCtxu3KG1NaOgm_Cb9(zMJnLH{>Qclw~06#&%zUaER55W5#zA$@|Y&!xWd~{6- z03@(z9|F1$VWp3-JH&qC_>seDRnuOQOQ&By(A#q&Cd(6rVi9}A@`Jh%|KY)tC%_KC?yWLF&DSj$B6?(FOmSveAnoBoY1S|V`CX1#POso zO?D+?Qg=FWJR!?(kYn<+B+IC%I(AA`?3F7hRVq+b4Z5zM1n@opU$l|{Kyozr`pL|} zja^=$BmlB;XzlzRrN1_H|atQYPwz#LYxKg_|n>Xxl?GrmH*#J7u9~Y zSrUMiTkG}jKRP*a3uo-kOfoTQM+f`Sm(L;@mr*PhvAw;G?ZQ5G_DZ{3`=y7risi5By7=b{^Or9=VJEk;ADbl% zn6*`-#^Y1NgX03?{fSuY?YUHv$r49JQK4$umjJxyDf)xsM-KCHwVdtAbzh%|$A4W2@tRVlnyV<)e-}dh!RhnozhlMljiO;{mxhB# zN`jJdtZO( zz;Gs?N$J%}RVb?ZZ9x3ly0>FasWABMyonK2Q zlT@7GKiXpg*;*t62|taAk>Te8c$Y53&6=)n3nBg)z&|Xlt#5WBZ&}ertzrsB(dhd} zCnvHJV}0plB9Tocg~U0)7&w=p>blt2DX42(JJ-b|{+8Zs`nLY=eBV%CZ@jxJ2Y@N1 za#`Ii?1`=2UAA8=@rt58rfK?LmNorfb%FH@m*=WZ*~(TA_G`c2NeKXlM~BA*@Y``& zdP_PH?_!LhRH>FLih3V_51n6JKGmtRp7asHO}cQKzBp|af#8pTu!=@TpwmKv`rP<~ z$IqSD&(F^93c(*Mma1ReFIE1wT&aGzs;Ku>Rc(=0$T=Ezo5rnt-^tr@wEsWd8?Mnh z*Z!@(pJk)(wc4xNesIm?bh~FY>NRG!ng`K}eSV{P(%ij*%z2CnjHOeF<9$8d(}Vqe zhx>cGkMwnS9qjGuN*d*PyN6ZnzHddYkSq!pUpTd2wLMbn`?9*lpN+=O7-x(z9%G^_ z9g`;d(y{9fb|nuT9mJuY2OW16TAdfd-W7`7o2!MYF@Bn~|0F+LPXBee%CoTaQ zErEacCqK3K#KlXqKY8NJ+3!5`=(%q_`0%-J{rI7C-}vE=&wb~?hnDA8)(_`Xi5Cra z=bqV{&yM8NsW>38w_g%Fd&QGmd&PU!cJ@B9y1n<&_1)rMZ|#>pv0W^G@19S8dhzPv zzfoGWO0#C3-)vo?sM8r^dz`WF2!YR6Rc)@KsH=*me?`^wuPK_o8D!byb_~}{iwN?4 zqhZ5%Y1=nT)^duzC;_0u2$R+>7;9(daLB75g54}of|C#>&e=CPV}HUp`;UyVk28kZ zAkayt$f-s=T7O6!R30H6@zYN8)&H+Q@NcxQR@bo6A%3HAnBB8hz59&Nota>Fl;pY} z2|Q#E(H`4{Byo)aJE>%1EuYKi`CJCsOa_^BO3kLzj_CYW^ER4PY9)by?8flwPrJ{l z4PZB-k#@;;X2;U#c@x7!QlhJGusao>9L^=PlYJTW*jN{?JJ^e369YIlIfQGb#&Bd} z6w?QWaA2?xJ-IAWi8x}i1WDqMWr<{O#B_oi$xdPM(+C8o_@tE&15*0m@L03mrjr8GifB^F;o>r zTiM)RT;ACFS4C0(EFP2oQ%vH2EKB^4WX?YxllYvO*o6_l#VLEXS)3(|2}lM|V8H#V zru}WPQvG4EQhh|z^}88kpJiaHe#u26XDD8_#cTIovhBj>`vz49w4yIF&!q%_fEWU1 zGGIrR5t(btp3U~d-=4EAEA zuM1t7B;qoME_5iG22Iy|m3ai`*VPFgu)}|T`e_8>Uo-S-)PFb1XI@r-2^$T#F^90m z`DT}vE3-?>8<&??mKRsoR+iS*3rlP3dQkSrjTnAVE{D}7V48hyPd+dAG5+5OZwS`rD8=@Pbr%ANk!A{Ry6G=7nfIdFRiR-K^UW3drKg=rT?5vF0uMt zN&pCm;Idj$ChWocpfF|-Gq%FEr_?rpc+CiHSm8A{%74`-D3}exSxICt;wVJDd{hwT zXT*`UN|SE%*mHvJ+u0almEYv3xwBtE+V4)<<3h1iDwZohSX$fo%%e}9|Najjed5wj zPM^E{@R^y#N6ySt?Ch5lG(ibB!Q%tB0$^_3&a^|5t@O5$=k(_@iQ%s7(|fyeFC8E1 zJ#=V%h)+!nV{~*7J$=2%bmfuGq>#_0(bttlPcDs2A_j>wsH%!`wF*U5J&|d|58kY+ z6Sf)c71>Z$Cbf;c8W56az);Ww&Q==8dnIn=ju%QTfr zic~78$#P6rbb&&pTHV|)&FvJ+-_nHs@njiKKt?YLzTgeEVu(RI&@)z~&ma4xq)|>vV zo2CcS*G>-Lz;F+`dix;f`oN?lG*!diUJWOdb_ei!vnn- z8y>{q&=4|x!-#bafoBK6(s}TB0&*;dSX_oAF#x*4guWzn{fV-oZfTlEMBBmqXSdY} zfn+w>cFwO8wbLLQI!I$TTUo|TOG+br(5&60k%WTUmP>Z$t|)3*QPi1ARe7XPDxKUe z?0;*ku>aWyAAkG@%?|&q9>CYynzeSV6BQrHk8u|_9y^x4@z}BHr+(5_dBN>!o1Gv_ zr$>fj(<4I%r$>ganI0MH4moKt09^p40Sp6>jryH89G;eLI6O6U!{O=U$B!Jo`S_8e z*Bn1`v^%Kwnpygy1b~nlGo*aNZGhS>CFu2Gf4jdEJraUyBsmojure+RM0m4a?QRy< zA97d?`day3qmp#(61eQ@2fI}P!Ya?rBzjQGn&|6?Fw5UdORM^sxdrv?+(Pxj;&S!k z@``%VhnvSvl~;A5QVGF5z3W6D)7n6Cqqa(R6C-WVVhlZ_w{7j0ev3=e3%c^Tcvnw1 zGF^R$~_x(!YLyv+GWN_)lAOKaqT?0KW;~hUqJ} z=)(#D;1qzr18_fpJrnzo1lZ35_&orB1mOPwaQ*QkM_pSFFX@XC077KAGz-wU?Ra*| zO*%K`=9It>`WlllL~x46%?8+<>UC{K<`UfpHyBc%@m>3GyN;!i{;@_6p^fxKw%R+{ zj`MDX2cx2gtX7KXWPS_t9uwNHja3;&x{_?`+8bDAZMFIvop!1?$r6{carrRg`~}HG zd@`5I%IS0lu|x`7PC$S|S5>H$GOFb=%B3<&bKk`P9zdnu+0?wUL@71=J^H+O4)|mVQs2eRA*A z*(ZN;=EAuz&Cbt#acO1o$9p>)dqL%iR)_mets9|%jV?<)vMfDEmZcN2EOiHoZ=Ldo zLqt0aKn%cBS<&Ie?9z&uU0S(3yR`D{*`<|7W|vkBw;YirDJDzOF%j2X8b&#>R5i$cbh-+icqY-kgLvnO^8AS*QPM0Rgjobaggk&{ko zqq4?kf>B1t(&$E`(H0R#N-Q@k&uo@%TeTMmlC9Cnde&ig7e*N6<<3K)VVHl(^$O60w*_#A5nWKOzWxY4$x4syev~ z;64B!0r2?DlDCxyZ@qS!z2Nu}{)(S_8h_1mZ|1ihKf;fW4)e*u0p>AHA{mQ`xGd`u zXAnZ@Lf3^5-n)Ws&;}&{1k?$oxpmIk+I8@pyg3^NLz@s>gUHQtazUaaKW=$+0v~xX zN25VQGh;D&OUz0iGb4_@nVxx_B#+(b8y98%3FA6Yz%w7ibF z#T8tfU&6xb26pz#Qc2bL>UM#VG$H=;ivI}i`kP+ro*-ZF39J1O)wmSJ%fh)HcE;K6 z)_FVGWrfEYy|YpEL^ot*7%JM<%PV={6fL@$#N#z) zmR2e=ODpGRmR25_Sz1~5^4-rqG9fFfdbFx2uPm3!uP+u$cb3YP*HsnuMO9TB_R==IH+HeIwuQNc zHJrJ)h*Rh1@%YSwIKQxl)$QHl)?QKBDC`qa5y;l3JtA6wcjf&%sVWztvwhKepT5yS zbnWk)F6m!uznN_t5ajA}R@TNy42Iw+<^kLT;9dX=&HMzX^@rVdnWO`pMJkzyrxJGJ3$@Drj7vAlELqY<8~o_~7sTUVM3D`!~n>a=&}ik%^&W2S+f{mq$L6 z0B0QKs)CK3JuI(n;quZd=2thcytS)s6pD}T6ifeFtg2s#N&LZ?*;$n+FkJG?X_?~{ z{}IThiuzi3xt4zI8`(s}r&h<@%EoS#MBD89W?Be3-KLZHgg`Qb=-DXV`jT6-nx?%g zl}i22*yvzSI-SPs!V1pM&OcfzRo?S&k3IP>L|@K;DgZ=Wn0bw$+@ymcpDx z<`p$`fhM8(PW^|*`DiKa5an?TTj@SMY*EIcxSWJFdDwTS1cQ*aZk)E#1 zaBmm-yK~5<5?~N0l`B}=+QH`T-VNiw?W~onYDv-b@2wVu-W^6ONddR5?06~c-kWWGA1UVBGyzQmW%c`pSu52dr zAEqY8x^vkKE?!>3nG17|7E9&#eEp%v|HaR}YxVcA$s$SsAP{^EBt+G4Aq5ybS|bP8 z{^3NUHKg_R&v~hU=ltFAcyCtBsdFx%!7Z=g5{tv7+-JpH;=k)u`2#OcdFLE%M` z2?U~{;NaHlkEB&qeN!f#{*CeBf#GaAr7W#)%5zJr50@*-pPZbX|8}R*kz4dd2>>K; z2(ZS^Lmk%RkYI<=jSt^eJ~@F){P9O9fmPm=hnIp?=aTuMot z?{O}DTax&L(8Z>%X{xGenkK}BLRtCI`s(~1$#{}qe(@izHH|$;^R;vHo@6M2_|zR+ z+GyOtO6vqC?LNQum*fwDXeV4aesDCVsM>Y8OzOt*!TwApmDE?acG$w|=4z#?{P_IJ z>SdxYXTXWvf+z#EhlGB9X`WILC z%}Nm1jE-#f%tpGl*5<1HssHTK@}l_s7e04h2=N(JQSVc#%8wOAIbT(jA5|*luNL?B zJ_${^rz?~E`)n$4cP0`0_u;Peeyj0xdXLU1`ps_aX{Xaflx4l!d+RmrnCZWLRo1#~ zFW6nDM&l%q9UEr(=p~=k+I?>Gvs?2be}j13FWMp9V-1hbEh@=)?D0e__NjP0_OV1F z{txk({P(gfeMy%20@=sT(HB(!2&h1_(`zS8nM+QNl`_u#8y{uM1>Zn&`bNB+e&6q zyNuzm(TZ0vlOayFc1zFewR`ZU5z?P%9cdNyv{Oq2X-J3?G`i*A7dr>;y zOPSs-pg;}@=~}PtF_Ll7qiL`A)Q%m~DSYPCyp2@6G0N9Yw6(Kht1T`siuuKPF*iR) zr4I?7$qqkSHw9sB{61LmGvFT8vewP~YqFa=Q|@(g(xo3XUmw>nl87Hw{bM!0W@LRx zo`r+|!gO(jXsWaPZYO1t8#0*^06K`UI&G|Bz3opRc)<%+c);nt=UzBvt#0=l4OX|x zqHffSzTPo0YpAxXNI*KTu|r&+6>s&HdZWaFARF_PS?rBXLj36L9?*J5i)WndYf7@q zSzD-)-O}y`Wzb70Tdf2XB>o{8*crBjQT{W+YhgY_4@%-|l;7>2_)0pvtbJ6BE+WiHZ2pi3$1W!~~0q|JY718V#xjsr6fs1J`teGJLYrsGa8q z{{_tsiK5LzJY|1f>iw=}{Ozf=_J29nmV%6{PtGs66Cg&UbHb%=?+ERTgjRuaBSCa8 zX{>%sjmBt4rdn}=8jXqg(7v8Ax))}8Z`HoXtixXa`9@B2C+JJ3Y!(9PB9e{a+JJq> z001BWNkl*dCJ(;fyV=HWy?blOX2{QD@ZW6)#xM&1?Vz3_8vB)2;= zZZLgt;#mOR4PXbrpU=$Ao+DZzL`@E|$ zc@h}jCXW}XO^PLep z3ERO)Sm?)zadr}~kX-OD=0R~aqCr~M@cJ9HzR{HDZtm&i_`z!cyb3@Oz!xrEo?DH1*7uIZpqbFW!}9SLnrd1+kI_Y^E1^ z^`$KvmG2LmE#OoiS+7cn8R@I*#(2y)jz(yKO0E&emN52rw`G@G=L556KRS zzMtl$A0G6$3DG^FlVt#{Kf#MVX=l5+(VnONo!f;%al25M-!2puw+n?zQ0R~ngh>`T z3C@7?5TZz15M1Y~(Ls}whg)6>DguGvtl?ty0KZwORksZbGjhzT9C1pa)&`~P|LvBH zi+Zrd>ipa)pJYXsMyaKP6FlhUO}MDu{v>>e6FkU2DdVDixTf$>A*2NL9b zhHJjHe%9jJrdV9v++JMWJhQgBb8)9oe6&z3FBkSp8gZ+0{B5OzlMx%$%)Wbdh)a6J zc^Yy$arx?doahtY$$lw~FIruG%Fz{=;@jInlt==MU*W0#J^^?;^v{S~F(L;i;@P-@N(qX4#GjkxDgT06uZy^8978t-aS7POQT%$F5;u?0^vBdPPyX%hhU0)Ah3q?EJ?+^BJX+WJ0S0 z`9{C5w;iq6pUre`GnY0{*FLw_UhukYKqte9&FgiW9yfJ;822Zr&vt8UPPcg?M8odzvh86f>w_rUt$wWo z9RONibE@h@v_N{5;ANc5Z&_pod}d)$kfG{-iBT(?9F^X{q&Nr!GCrJCxK?|^JN=GU z&k19Yw9(((D8cIFXImZYH!JJk=upD~BwRTR?8cSDK}UlER&18A={h$K;M7jaf9K>W@xxQ6^@q=%)1RE3)6dN>M9x<> zvM%)p`>k|Pv%~mCzcZ?rjo4gn-jWEjtaOWy+a(US`g;%#-r6PRHcGS%Qi7k`enJ?7 znVsPChDo-#!7pC4JtPqC&^pkX69}E)Lv*ryup1`}djc^NLUa^Cj0_IS0Hy(q0hk9c zv$VRZ1yNuGwQPjZcZ8*kiIcZ<2?Rfli6GFh5xzGgJDPpg?C+hPkJ$r9v+ppvjzKp- z%lxXYulI4#{hKUN~NWpjosZ!C(A4`Wkj>h zF*Q1r0&tW8;|!1?Ag-Q=bH)G&2A~RH2Ec{$ORGxM)<5tG03&@p?8<&HN#Y!wF>nBk zF>ubo7y}rCE`(mLRJDcmjg}J{85~Rl_!R&z1@L76pIlm9Es;_okO4yo%U*fizbI(I zwfexZ-CnSb=GW}G?F`UX!EYyf8ygL>hmGc~-0G-5Kxnm}UaebSKF@Ha6gUH*ZtU*r zQIhGTPY7-~_e59j^IuSOco^3q>d7W{=3@4MWnyrEC*v_`q_3L|^>rbgN&x^?x3)3A zvLQ<4igx#BKCid44ZK`?(tXjOVIv8lL81eqJLmjoTF3C&g-*%-AoqVJ5D4MXqm+0a z99he6+~D{ImI` z<^3o!90`ujGhmtp&?&IqSx&AKx9~ef7MZz)W@L|=mA`d*{$_$0VbTS5%R082t5BOKPXthh=Ymopjk&MTlG2GYHKiJ!)r&CD?0jzE9 z@P*aQ&2pvk;N743{H130RaE_&DDb^qzcVOFLIhgpPSUkej*T?)0}0;oImroHry#8r zt#df-%1-bD2=3t6_{c#4ykBDctua~RoO1wxrt45u4VtDw2)zt}{|eww&MvKPMNOUr zHUVH_Xn-Z-akgJBPw7JZIs;xSNjxnvu5t!&#vySAFeZbs0)T(fbn#ii_$5h>?Sb>s znF|+G0LbTZED?(_FwRoRSU-Sw0(cdGPXPGH+`>}P>ZZEA(WIDy8JO_XxoUTtwbgB5 zv-C^!7YqlNj2ri5rU&A_Y7aL|9vBDkUYYY>OUC1IS(X6?D5{2XrHZOjg|6vK0^%;)Esobz|&=@bib4`(FDltNr2Ieb1=EwIc7$mLaYEsr_BM zH83(ZBkSOVEUbS{Gg;N>d(Gz2Onx<6C!_OfX3W*f(pE`VLDpAZ+AMy_ghs!&GZv@U zn`oo`9LSC!gb_iupPN-QvdiOUebRRCQ#CycU^9r2F`o2c~Xfq$xt$A8`hMVtoi!a@laY3>R z3Et7Bm$srApO6q7-Y3u+(moN4+LHCLPdj@Tb-RP;)uvq|00;qq3C7r!cJg2l0CXWB z1TF}OuLxa#R0vVEY7e!Gefzn$wkrS}9v|ZXG62%-N8NK(VS~ud42q74`eYO7%>sTGdoli|e|cWenFd zU=k3YQWW)1me1#q>@0peKiY`pPd&-Aie3IEkkx)@2*SAh z97D6x?ybhtlgUpG_vW5AJvQ*lo?PZ7>0~0uz_7ZtjY~^w+dKQ^ua#B(%c>CHS>4#U zOp??bq(g{C{KM4n;6VuSeo2zv znuy0Z=Ny`*L)Z1wLWnQuy8i8ArFwF4b8C}JlB%hyaBH9aq65n<0B*eI2z$nL$FhTc zeb>ihv6sgr>1`6{zrh*1gEMx}$}=bWdsCAGeMcqEUMzF|%W;W6Jr$4fOfrsKI)&bR z4t?Eu^mgUYozJ2xmq9+0LN1j=cQ%cI?i@x3dT?N%C)1rxy&xt_|C_}5J2_)-l{kMr z1A7L5IKcK}vDm&4LIm;f-%eRQJKygFcvUje>Af}kj7BB6t(H=Ea_ofGv{_#U)9RWx zDqrpe%{x)L$s|AQxYj3v{q22k{x8-TKS6lnLm*TSYx$VOK=VzDJ9y&j_ICFk> z;q3hK`pj;z^kY@i{)sVs?!GU7`7-$-?%CR2x2y206u#ZIihj|bm+w73J(0wS;w$%k1SeW%5)V+^z^n1O-M+Qc zP*GH+qH2p}MLk`rDi@07%K5!=?Q(qvhmgKMy(qMb9OSC%{W)Jhgr=Ix|%(w+4tm)l=*79caz*)mu~hm0_V!EfFYFgTP%Ky8 zr)v6t(}ez`&wTMqMY~CSeg@FYzS}Eb(ofmZEP>PSL_aUrA;5=fF#yj7@NNLF05Ad| z-j~m_pawGu?%GRU?<>(!v~0&H+UkBKu@OiH(b_luPNR!-oviva@7Hwk`>L*gK+&{&cPrIPKbe`;=him#s;Y~quBW9I05@NAw2O0oEGF|eGRA&| z2@L4Ej;f+S(X_{e5bt|@=F%64r=qj$Ar{d^UqzE{opoE)4ed zBA3k|E=v%)hHANlVzG!)xe6}HNG6j=CR0!}flJG4I6J?L&D}lhSE|r84eFJjJ)w(_ z>O%k1#g&!$b^#KY zy~4fhVdZ7t@>b7xvXy{U9p_}LhE{tQu*XTq+(I#mV) zeI3l|L|R{Sc=oYFi~&sIj4=Te%4O^n%R)$Mv%O9R!Tf5Yo%au2FcO%g z@59hQABG3}(3Q&~8IM6z6zmmtvAMN_jqP11ngEmHV3LfoqT%w|CN3?lVSRTGd!;fo zU5C(h=tArZU3|Q%RR3yuee-;GE?eH%-Xe#Fl#V6E6IA8pbZ;F(xSeLBbm~_!OAvY6 zh>|wTXN?XZTODS*Rl45EXPSMM)9*I3W>#)oHLLnSGSq*g*UNsTlr-m^%(g1`qM*N= z)=!iOLA)BaeI%XhFAWEoUz|?FA=&Y>m>wHT0r*V-?-0NjRaO1d%PT9(B%uglv?U3h zr6ULgLU3eoJxFelJf%JJAKc7D?|99tyEh7j=W4qCa>m#%aK@%&Ns_?;P1CEoE>7#Z z_^zhurW}QV?w+2VvT{NPdxk7YnPfbMTBrb$H%15Y z80pJluse;ObR0>Ug9#ngs)Ay^U7;EeSN0E()iRHELwz_f)Q6#g9`yC(kk2KNOUIB;OXx~T$i_M1Ooy&k zQ7V_QUn-+qQJ`r$AOtu7i2)1(Lg-~(=sS|cH-*sK-v0NZtYj;Kqw*->6dsKZ{G3)6 z&2A*tAL=@xq)E91$7wU$U)8UJd^AfxUHUC!fNs|H4EYWM>e(qA9<7w)&aC;6%@OCvDzF z$(vD>Jx&~kdp$QhiEwTtrFWXH@M@j{`2X2^^C-El@?P|}_c^DkN42JIbxW<*WZ8JY zBiJzzz+fSC=ecxKWY;{+i;oIN5zy14M1?*D5Clv5) z05$R+L}|)okd3u4&7)bgAz7aLOwFh5^TNE=5GWT2FZ+I)RVlY6iqjs)(ZJiOyex7) z(hdQj55Uy`-l>3_O~&5L!G2juIqC|xRINE!uGZYD?L1Mnoqw&^&bRg+nRs&l(PK+N zm}^;PziC;|Gfi_#$+Eh-ySmWV+k@2u{aCklHP)?LgSG3{VAbl?=;`lASGk0e378Pz z(gBwaARGwSLA6%JQl)~bZ9_`=90C9X05IS%fNv<^N1XHdv`>B1^CE0w+^&IuD1JlX z=ag{N6V1AfRuU&CJ5?r=NZOJ-bsZH--Ou%+Y|i<;zE@Dx3WB;>Gfn*o{xFCG?Gle> zJ|T@n-cPXT7iA#meS#Ei{30dzy`ai_`#5m8c!eco-J zUwfuIzRX)eG|d89v(ZC3?j7eCg{T{7QNLf5f?ZZN)h4H><>d7A?Bw+HGn3QPQxntE zg1kp@DNWsr`}zDFh$(6eOdHL~@i$ByMF*=oQ#U$UFUclF^Ld11nQmSk$No%O#FT1% z0DkMp@ECyiGsfP?87pzd%8X$RH;l5u`I)Z+$Dr^jSBlTnT=(#uU;av^83Viu^E)<= zzKk*UCuP%k$v{sRh6nnvWq2K)w{0VKY}tq{n>S+p&>*_{2f#UlSU!cysac$wnZoq3 z8B9!_#EC^4r)}W)vW?@5Rm@jxELUw=snwiX%~p;ORVn2+gi?Q36XJ1$v6Vv;la$nu zan+{0aa^<2eVT0!25B^iy5UMrJiBrocB8cu*R+)`1>up-dGk@$*X#31%w7+QSm1ZI zuiqK1x=#4luSr@no;qP3SXSRL$Y>9ejr3x%c6OIy6e6;5L|IyssP|4=o|3YyI^L6X zkBF#vF=E_@1&D}g42qc?iRB4a1P8X~MEBSfvsy%YtcIuuKc4 zX@YYGrUaC5AYBKJ?VwVzv9waf;_{iFrIjj{SE^X4)=;U{P;;C)A>?%&vtV13*xaKU3=#RgY$0P%Tu1hb)`KWd>)MHOP>;%~lkc6xOB%6~ zZl0Ibae+F?vjKoJrZ{7QGv>1AVDyy&q?E1{@~D*ZTMX)-Ow;^vsbtD}g>NiEG&2Tc zn>HC+Mo0S@*m}lT+296D!-Qd)V1@~B4h04wB!uI@sVt+mw1~>e3YJ!?IK5QGsihiD zE!S{rxr) zyS9uBui3hBWcAjKBPK~YQBh;Fq@N{A&%R}N*xI&nWc8&xw-3Gi@{5LEddUSFE8gXpnvLa}bEW~HW}{NG-Ac`#IC%8f{(VO#rk))? zy!7n&VWCS%k~Vg&Ht8t9`;T{SHMct~&viBd#O=`H?vSf*1R!S|pPt9Hj&ZJ8&<*dT zWmlI@>po@fXY=1r!$h-&JHNV|WU`v26D7^~_$2`4EI)gYdxS;D@Y10y#$;KJ33WANQd~lmlrN8S6W`B$8uRU-IYwIJy=bE% z-S|6=xHt=^w=yP696%p{ivZjT;Ozj0Ns@{3q7P)70}#U|0Pg_sVE`X`?!W(C0WSs6 zm9%Z9I5~Nr-0I&H_vAMh@O$7Uz&%Rsb=2bNwJt?BO@UESCB=KkK^_x1Ml++MOuzo~#*g_KuFrK~(ADM3&Jf+7N> z5tC&(p3Q1ACJ|AbMT8(|NKs;WzsqGGYJ1ai-Wm1mJRPGT_}x=+=))001BWNkl9|f?(#kgYIq@F^ z<~PhnW&J(;@--fKfZY?*voa~09%r*iC(7TNzFrQX+}qPLVi?8+jIkLhu6SP`HM4cTAzWjw(^hqh-U$V>( zuj%jYFIy%~&oAKA{QMKHD?a?AXZPP*RQntji7{>4PDJ(~ujGjUz!;Vp!@~f+2!_uC z_&k6wGR7X}oLA}@)2E?=36)3fzb9T_+tjaipR0=i6#o}@WGba~tWO@$c$ByIR z(K9~>j-J4QV<&KE<`j;dUdG&V4f7QTOH~KUH3wD4h2y%*3hEIl#e-9`Gskr@j0{WX zk)Kn8^*RvMXn4)`uK%|mo%8cMI$2lzWH(FC7UV>86x-X(=Y&0tT7N>^?|U?E{-3>f zP`K8{Ald75e*H6g!T5)s}R zWWkn%eb1ms8?AIQ@9>RTj%TBGViOU?X?N0+J>6r7{MyH&`|mhLvibeH#|e23U^Rd- z0NVkK;><~LmeiWYCFglS1&E7IEiKDaOUo4ihXC9M;JW}$k(DJPDqegmgjf(lJfW0& zi~)}_hMzI8-3&O)0EbqJh$z3gfG%PTl5sW(;73xapSeQ*#CF}ER&D2J727FXd_W_G z^DC>J#J@Dh1;$C92mm@?uo(kKhlkfNhAaAey07c$DqnAz<~e1{LRYzju2LE0l7;Sa z3BBE2D48at6sX!ZmX<46TwcNA$_i?>10f|`A>ayun&ZL|@}Q9Nua+v+uguLapH!me z#JRXc*)?!^UE9XuP}mtm&5D+JfafOaJo^;p^s=A7N70#9C-|HFEzY%yx_KXF4O*cM zke%oZn{dU27hKC3`;(GoUDZ`CIRNfoS*d(_xl(z=G|i)rJ@c$v1YQ+Mrqh0xxY3x% z_7D;I_upRVWJKAvsk?XY#w~Aun+afxQfj-9qFV^D0AL@0V-wS}D(!b`05(C%z85bN z5fNp>PUQvRCeQhED;iwAdbMfror42?>(&pff>eqvE>|4Kb&oK{4*mS#VJB<3DYoPnFe~wC77JU5iV-B1KV*> zvmMlI8?Ng@N_n;kz;&e@cZGadNO^aq=IpLH?%d+yyq#3gOofZ=ID{;}yY7ukzdF|p z7QONF?V!FXambHOC$UyhH^GzII1i&Ue&G1)znk`kV>>$-1n%FjEg?$B2E;v*VRYlB z%K-cu1D?+qTLy5iRQTfLu}M0qmeH6j?Rd6`&6q@;tB-N$OOR_e+WIJ{VtFlAP@EB+ zKS|{QUUr@u1c->TYb(gkW|Ov!j&207RRMFh?e0G|J1uC<$gdO8+I2F2y{MB9&5@i2 z&#SXg7f6HJHUKmxZGL7D2T@4I7~eiNdJSjn4;kaX%sH2qX)4n+nQ55JG&nan0|OwW zgb)HkNC+vE5JI}HP(la@B~7W+j8gcFQtB>O$nmP}EYuv=SzMf#e>MWg3x|tve8xq#0v>SEfr-4St2CkRBHolYJ`}wgAofIS$K~KZ1 z#mI({RRA_ApkF}=r7(MZsWPQj=G~(3g<`T~;x^(JQ70A>;<8_1ZG4)i*|TT^(k!4w z-HanYL_|bHcD%SWwsB+0;QVy}-Ui?&jImE0oR~PVee}7p9o6ZC9RtB8U8CRBR3e&Q>IO7)pxIjU2 zB_)(nP*OoD1qL<67#@>S&AGzmQYu3Na|*ae0pFcCdQ6a*7T3V%#mEOK)U_(`g@ykQ zYmma6;v)w|fk4(AYdf@yb`35;PXD*ly;i<3>ZvHd%|cP%jdYvzyp#Au{O|09n}{e$ z+okhlKNUH$^{i=Z=9B*-A|fKnFAWV2ju@Q3plq6NHVl3pW9%u$*jJTOr(7Wn#}!-% zaa;k9%^W{IL-wDDh~m&ruSXDniHQ6Wk5dur|L&!f3^>AoI{@|(F!oW#*hi$4e_nO$ z`zy8DY^7$`s<@DTui#ehc`Ad9|mIw0bS zl5zICckljBKkXp+&;GyPCWywLv-kFMPhC_br|Z|IWl^W|ZWr3gQPlAQXLaQ4@9TdW z^;M_N)L*w=KmDL|=xT;)6<@YVhOXq65F+FS1360Ae$p$AQD;MYIAhWs+Td~8bI|yDWRl-REkL{lvL^oN62rS zoI7!xma+2!q`aK|Z>JMM^v8<_el{$_%>E|F8*bf+Px|5d{C+bQ1sQTW_mIPU|X5Vk-Qb0*m)Yz$& zoVN<<{UVllop>ptzaxrAemg1d%9>n-Y3}p0j!{rZyguW{f5$0L&0>rYpI-&wr2t+7 zU}N06((ajcjAKhX<|p(g@{2?i1N+I1b=BL5{L|*q&BpdETUK?KORKxfCDvUop{GC8{Lgsze`XmWld=j?3;VFhC z>7*a&bSLvEOd&pq4*Sums3*CCyhD%~#3a|Gb47T^b~2yFyym>cO}gKm3LvE8#5X<9 z9_2m4em7429T^&02jFEm(+Ke3)a>j5UHpn;&9fFqkv$+HA|lEUZ5F4nJwPgmZF*xronI^g{6D7-pQi=&FU8OJ&VBx9p2}Qvf1-Gr9L3d}bAAJupmLu$D zWsrONfjuXpWUv!>NxV)rE+Sr&E)o@s7h#*M&eF)x5C>2KzyZ{zW@kkwuTL6H3q-_2 zA|j$>XxrG>3m9Ynv!`TTx2mUH>MNI6w`qa_5K_XG5{?kC9f6ADqEfTr2=OhY@IUq* zIr2zed;q{z0IWD} z9AtC2$hIu(yJZEA&g*Y+Lb2A{mUc4J=!?Tb1p7rJpad^_MC%bRFQYaG>Kd^_vP?v> z(0OrG5WNTjfggouQD9%Aju4ufot0Cwv(>5D*_AA8{)f#Ub;Zv0NDoOt4U^v@`$a@V zlngPzU_hV2S-E5w%rZDQXW*Q{;2fMWaIiC^;Rj>1yU(9 zNx2GI_$;DMM@`t0;z?3abgdeE&i;R6=X;X#dCBikOhEh!Z=+i^`}w(c(KZRP*o@hU zI-eCjB^gH*c}@KwX0(dqqwp-Q8JkHqOT}@os5Z`z&+y9gqOM7^xHE}3xRYY5PP1P` zqyt3J$mCpEoQbkwpv$sg873HG;GDxS3~e3=Wp9MGJ4ZnZYXE@ z{pt@BwK{N6|F_0EQW`VAb;jC7(IxU@`scBeoh>%SvB%n}GLlHOqUdYUtRW!mseG>jK)a$)vw*qTvo(X1X@xitM5ps~64>CJ8Jw3b zZg9&mxM^_H;LL;qgpgg1a81`0ENKU$J2=d;-n1)p>C&Az1Bqt-tKGb&sIs8*9UFZ~ znAyBR&;f`j880%wf@HihA@-v*+r7Athcyt9MnM@gPbqoMMCUH3mWwB7Yqu zk0^q@NjeVF)li)$VoIr|38#*vHwbJvZ9Ie*=8VI$C&~w%$xs?yra_8)?M~`@&6_Eb zA=@%MbUp)awG89RvT0f+%ajJ^cFlG9O09N62ze)C>>CHCW~xP&=_K!6G<(x()5I?i z!ZgQ4L4=43LmT!ziSlO$X#G0RerF-M(gkJSi8%o2Y&K$;sMiRR|3*RH%9Ff!J!_cv zh~wR}9D5TH5fKp;FK)j2>Z@_V_H9>j&i-_DZ}%(Luj+?on2<`rFimjIuvDpHVQCpP z#|4yv!5Lg3u~eywn&W%{z()=oJ$A5Y`9zWP0rL5jj}Uc^40zeK##*$WL!MD&Fb{H> zR36@G#9IkqkWG89)5XN}c*!q}U#IXPuFog+4pC3RMVjw}As zaovwAr9Q%d--E)RD_|D@yXZ2VvpC{`3)(2RAd{>lB_$Yc8_9S2{U(so6-D$-R zioxPvBjS6p;?cC>^+{*55yM2iMmtozs0AHe@{*(v4|BjEXixTB*7V%N3kjT*gwh21hBlQljcg)Lem@kZ^^BD+C-@z!d^YDaIHK#$f4^ zgQR7nQ=5S)-Y>o_r8OqfG5$oioymh-MnyZM8g_HyK^CCd{BnZpq@bLrIKgKg(Im#F zXP3sOXP-GZJ@ep^xs%_2a&qbiKiPNip`RZ-{P6x`(~pi%&rThjnvq%1=}yt>yw1Cd zV*{(5P6Y{A!j9(f^Il=sgAyAm0(3&G6~r%ga{Q*N2{FsMn74$oX!4lE`y}Bjf=6#+TzX;&H865p=o}Psq00+-kJjjX(9jZ*0bCH+M~EahH5BQKu$kI`ls* z!iN`vR#E&yo=zxd;eC^Oo-|K=<#{G?Quhzrh@vBo*FA=)s4;I4y$Z{-W(}M{n?GAU z7oCpjJo`mNGTO=ZIV-ezWTUltWMkLnk&Wir-?>6e0{FB7K38$vV=FZW7283jW}{NG z;Rpc*1*rg6NYoq$728I&W;4eXmnx{+71XZ)=nZ0zynI&L4VQVcpMGNPBIR~O(c|@` zd;rN?w&kQ%owt*9CM)q#5!ZzWdD*xU{vaDDMGeRsJG9#Izg<#KhCX{n$*cGhwnI<% z$+|pmP%9zSa;4(BjxECSBu)sjECz?V<+{^0dg|Y~+3CJ!^PBR-i&l`uMA?rih~m-n zMt*ytYqa{T-(*mi&!TvY^xyC1Usg7^)8b)Vn!H(EMI#uV) z=6}s`;R*pEB@_V07#L$v0HjioN-?EWkCf_sspP1X($d8PopR8urjVBnalg;!w|-Ch zMU-@$O7$XtJfZO?#b4`A+^?u79`)t@LMM1Z3N=FfUGwn6>DB`jMcgJi-?GFfb@AAp+VOIa4CQ{1Gor) zS?}i+;3}m~Ij*QyZCg673#IUjAI2Cs=Pu`bku!FZGj>t|3sT9WLdw%ZN|7ad)`)Ug z|L?rWFXpNx=GGp#0G~N`Uj<`-1>mm$^_NPiPbj6nr=V7J zJ--eatFK$Os%?1L&SrH_qT=MlWFII#NsIqQ7=J>IB+=@hMcJjdrnFa;M2&8DLl|rF^-N;&v(J zf0s(VLn*a2FHKQ#ZX7mi)=uj=vnv02u(v_%T9zQCvj*=U^qOflWJhg6^?HX+j1_67 zI#J%@(WFlk68R<@z{3DO4d5pL-1@bgn4dqy8M_O>w}h1Qj^m)}IB;ACLP*yY;( zgS^yP(k8ZR*Dha)zn74;Dhkm_kh>EsWjnJ53zu)dUY0FX8n z3(wlF`0)6#WA}8j47Woo^NL4{YOmsYx1iT;_j&Re`qv_kO^Bq{k>r7RMMSbo6pfcj z#y#h4+0Gp4-U5a{=8SLQoIxoCDb*^cu=&lz@)E4 zMA^_mFPo$5`i&!7gY3PAeHOAWM6HPXojcJkNC-l4Kv?A6$kczP*_@;>JfiO2Vo}i3 z8Lfh4zs)*vL%pW0Ypr-paOTCfvvJ6Dm<_w2&qIwoL{VjkC_XzAWpl_2O)ISZ3FF7& zmZPlMs=0*)rIZquX`ZUpYWpg+>La#o?{Qu6gb?C%o@1G)aClKZlQ*A~hi3JljedDp z1KlU8bzDz3`bE?^lDgKB;zZ&V5y@`cHn~XgebCv^x)D^Wu5Ab@PYWTR7E@pNY0{dCirclG~-^P_SD~z>}Jptt;vCg7Xj386R{Fbgo0YaX%Ea>6htNGDL8_>8wc_@YsH@;a4WI<~Ng) zTh7_CRO$gK<)28UeqRCqFBJA<;a$V7NmAoLiePV|H1O$q-)1Kb^A^)a9s3vbK00l1 zW4@$oE@-=TP22Vn5fM>tohLt&R7?<;4+y|#0pOu zbT-xa?k*W8r$$>UDfFG?8WUz4DlUnCRZZJzG<_*)M@YCrI!$DU@4-OCue z`_Qpt-xc5&Bkg5E=SQ+Ux1e8f?ME3yu=UAuOLQVKr> z{Z_(FMlqVfsOK+H{?@hev}UUrW6j`UT75r=p0%5I- zife`xQD@mV+JK0c-&yf1X+KAvXIpndY|soTs+CzH%g>3j?lzqK3J zkd!@6>U6!I`{%7gJ4-s^7gE&^Doo=>zYesryv-!mg^)l#G5Y%J=2IN#7tIit+WCbn zo!p_*G4Z}5#lJ*p%3)L_OQPmHOL{i+u3bMA-~R3ccKzmmk~Q_Q4MSWixm`;6S|R0) zLaH02Qa384UIk#&<_&}F?6b#(q7!8Ezgb?J#Mndf3q(=ZKS?CsPM1R(fAS03s+4-I zQn*nmb;H>odFH=wdG6m=Z{0XDP?Y*fr_26-LICh{lDO6BMn7FNSv*Jm&C$kgxq!IsgqJIx^ z{V?~Ywad4hggv#_s@M>xP8VT@D^YSXp47=2UDu3)enCV;L`0NdUl&(wGrVpcE0@bA zKXcSleEv&ca+}3#?WozaT(E7c3BUj#o<210>hOa*Hjb1Oa06%Tz2%ZQY8ZxFvu&ed zJA0&*{|{sAfr**p%FBQHeZMfMI(}*(aUf`PvR)8h@*VePX&tu?Z{Q3tEz{s7%YXvl zxDu|AqGsFT=!rR*H=hx9G@P#d-S6jjY}(jwn#P+sW4~^h=0?jj9K$dG`~m@h*KAul zuJ|^9PaHaWY#(WK{)x8}mS#}o%{uD*G!Hb+0?GoldhR$n26Y(UwC58N1>#fN{HUI!107*naRJw0vO1;@Kj2DzF zb7#3!x}d96x}dwO>w=!H?hAUmx}H}ql`be**4C0`b>$)UCWMyu#Qh3gv%l91V%knR z56<69VJWFBX2S0m;@|JzbjeApMjt;Lym2-)qy;CgdKA+Cz!N<&@~1l zE;(q&&!o_2bly8kM{!VFNxmo+Y6)J>719PdEB|y3tcE!Q_T(Fs4k-n|?n?1G877 zGWnxqeZSvzE7Ae6JjdN}u5%nTvTiNguy#%NmJNdg&)>0S)s^S(yzt8Nx4-Mconybh zZFKneH>_Lz2R-G|@0td`k#l~2e^2j#Wm%~-00bF#sw)R?bx^9=D9Ofqd({XU-+?i9 zjso5c;Kin4luM?Gl4+q-Dxq8|p}VV$u5uaWQc0C8)3q#9r4@ttL162YJX{CyuuKSZ z!bI1+<-7&Qjk9&@|4l(nXFA@XG8Y%bWupwnHD^xOb^MIKi0k?DI!iC;a|b!4p0+M! zasGT%{>AmoNo=skrJqE4*DL6pvvkJln6l#^Ec1H0pa#SLs ztmrbysyA<<%!Y3K-pPffZXxAG3b@6xtoN5K^H$R^t}zYc`If<7#~9uZ;CBGL1HhID z>m>l}1MnRHdjPmP_))bTRNu_#~QZExy{kNL!{Lb+DHNSTG1v{_2`jYcEUU|`Z8!z0kWq5eq>K$E{ zd97g>?<`r?<%VHcX{?W5n_u7b6b1f2%-VY$;;i>u|K+)qngsA&1w8Hw;no}%Rog+; zwx9d2gPP;OaRqaQG=-2_n=r!iiE7Ewi8m9VsK&e%lz3zDGwX-}x}L8-;AzF*b|*pG zL4ObxtGLjr(<#XBgXm~clEEMyVicg}zetc&!$^{wQfVO8|&@_yIeF|R0QAV2mK-mI~E1~A`MgkIvqnqMEN;Uc;1FRAamU-U&Tk(4|a`i z*s%T`Z@zx}*5SbmyDjq-mcehc4E~!X!}!&b$uBIKM!&)Nix^|S1%}@N@OA}^MX>WO zfFA?61Hf(owhms*FIUw3a%FL0r82Qpsm`p_>`BKJ(_riuy*yTx9=F+wCVgETd-sE zMr;~dkAdD^X>enNF?JbaY?Lu(B%MzO%{P)Be-dRaCuWbUV{<2;H8}sY0{e2!6;D@c z_RMm%I=Qq`om^U}OfIfeCYLMKV^!Opa9nrBaa<=$dAN>->rN%6lxkT-@`CUQdJ3wQ z5C?$?O4?y1aauKqu^{R!$KQA|u-#l$zncePI+%6HW85dF2qr9jxeX$-d3>)h@011~ z!gQ}jeJ9et{OfEpTb)#V)QLP#T4(ZndYSBtznH95EEonpZ^zi!S^%#HFaqG-14oWL zQRI9j2^k|f)}N;*$x|x)6A=-SFC*T15o4^pVePtYrfIy=H2B43)95o8+rofLOoR8C zrUAw{qynT=aD+h3b>Rr{bEVXWzxc0r-|xrY`FWNohlkGkyPMy7qamewo@wyQSM_xD zmrItc)@;5~v*)Cgk1)m#{mU1>q{8~ZFehWPyw_0l8i}s@a9l`kWT(A(oi>lp9~&KZ zT=9GB*Q|QqmXRUrf^)Xw{ByRUt6akI6DM(K;us#^cSs(boPKDfX5W2!rTU$+X*@G^ z;)Ii?eEYQ{?QD^s&-qy^zXz(@J@2_=o6lFk3pit|IOoDJ4RFSx00=3W_=3O5sKB_|iXeETre&@xwRws+|Hrq!hIzc-_qQl`*w@a~tr$)pF-LQjcL8I%` z^;Yo8MEZCd1-3M7*J|9*KVeQwdnKW9+JdOM7BvwIVsGMX>>-^@Hc_YXMDhB;sIhO9 zQ8!*t@>$lstjlAXylU3C-OLZvpZ@U5OV$kxu-&_NLn^fvU@r&Q+Z5Q#$2M=-dc#}Z zRt_Uyd03Yu^pWgpwrxYR7&s2}J<8e7(Ab7SzGcJU`mv$G=Z&med(q(PfpgZb>R&~i zAtEYnyp-qMtFgiI?0>h8ZZ@`#ZXVpSY4oB^8-`zKTIS0*XE$1g@viQY_16CG(p9T_ z%Dt<)O6V<_=rRqI3=V@caK;?QFb$|@05$LROpP&KyLSk4y0j4~>a$<^vf!LO%Q^cZ zW9*Y0><-4*Cjs28fbp}N|6zQa-(0BOvo}K=sEU$5D@!&z3BQ&GygQLz-nANykybNYnlh2( zy%|sjV=o26hZ)1i7{mKHXBUxV6A{IupX6`C#|~{y(Ut*R!x;NL!{GnZFpOIb!?>us zWOl9Y>9*GO^_uJYy4kAk63T`F%V4k!4#oflb&`SI#ejcOz&@St;Ab{;yPC|^S6__- zlSjqB+SJSJ!A$ zu5+m3IIx9a3o8{qJ$D-WjvT{JpV^0}_KzPpy|DEE0r-8X@Fz;CudnLuIgvO2o7M3r ztv<8&$b{H?WTN)$_~F{q2M^UA-@Cu|vuF3#e*Wy<+LQbC*Y=Jdt{s?|a1KmNs5JBS zIQKz2&7S|45dc9KB#0u!RiM$O%uyAz83cB#>$c-Z-cC1r!H{HO%tI$7hV3A*yyVHx zsDUK(H*Kh{BFhF*Yn^Gd&tYNnh~GrIYyy-(c)5N`Z6Ee%ftW|7aQP@uiiDavXOC zj7@y*OLy56@278ziq6v{e32i>POmyfR@XVJ&-MImW2*r5Ta2*}n4GWYoF7q8|01RQ zDxmiLbpMehl71rcBScxx(SG%-&0GZ`pzg1y=}E z92d5bu%&V;wtJ#tJ3kgu{k?*EVDFJh;pJ=U@7b(Q(W(~h<+pVD%yvkL&7R$BbX8Ux zalPXEPS9T(517yO%EJ0=9^SB4DRooXvfkL=)7{(K-7QNcOPPl8uwn2|-v7fNJ^R{U zx`G{;oWb77NtG4(PNR`1Z{trW56=fNrIfFNP#B?Y-?K8O zv6GXwW^18ymUABTn2da9@ii)(c2EeVc14!z}pEwB{UlvfYmJluDHA zW@%0GC?C2Sd!o*94bs^2`q#XM&CSoNZJW28#|{2r&iFeG(V@^@Sz{_*jH6OWSg6Lp$Ckq^nA zAKE&)*#s~OV6#$+bB?VBWAE-OTQ6PH)6IKICQK+uC1JY~RmVle74tP$+*`4ouiCEI zJw7!(5oW`?)d;9|`JB$iIloN@t?ug;;|AqNR&~6{dff?oJbB@N(zT+X_Z!_XR8qiZ z%QQ!NySmJ>WhurvgphMT-+SYV4; zYLq}xVHX;qiGl_(jUx&C1W!Q%R-F_FqOX<{anEcc!T)I(?STLO_w=+|%%Ht>Q1goAO@y zQXJ!)uD<$eeEt6W6##I*vz}P*U8TW9;o)kiC7ec&*Gxkc;FrH@^yj=hNi+7&W z%YYXG>`ef>9>5I%t_N`0$lzdiUi39iS)=$;Z>|&PngqQ^QP(yueXtAzmcd!cGFeZ# zgr0J#TsF;}CBwLufxY3JjU&IbeRz0)q@Adf^eIYCOO%e!9-o|W$0sMoPpqu$0x-?M zx&T&krD9db#Y)Y_itV6cyQtU>Dz<}_sx2#3`^e(*%9DqukIx0MwO%n{(y?+Q9Df*o z27P9oIdL3%mgZQsupZWgJ_Uw5w&CUNtIrh7c5@ZdFF#eZc8mPR$+xsc> z$F&jeWz<{EF7z@AS#xZ8QN+B=Uem2pQT4SkP-v9TPI5Y(T(pQI;PqpxquRhulm}e} zswmx?oy4cGp9zXy;Wg)&lJ)HRk{~B)ba$wy9ZwZGJ`B1!@3qdl8hh%ldm6w!0R9LJ zf8f~mCo9$JUfXfO8C$k2qh^_g0)W@Q?hOn89M>IFz)gVqW2Myp0@OzVduXt`Lq8Vns?R0p*wmSC(mxDurKDz%5`H zAuS*x@@Ho#j!%x?zy8j5^7q_ylXdC2=a#R$@PhIiUi>0H)Yr3tG2Ez>`Yol@#g33_ z*|y!qs_iaR9W`IE<>{50J-=e}6I1dn# zJ<5*U1=)Xj;e{6%FS_*N(seI+QTh67ud!};^(%R&tZA#}op$?h&2oxn%@$sWEsfs~ zqEpST;q~354lorp*UvNkCj@|?kUT*P&v{yaFej)Q3kYG9sa-*@)pxwm6q15+_8Vk0 zZa!qu(8MLLMKw5n8((ysgwq}166w=!=geD({UJNoI* zedei8{>wios#WB820*u$K$m8-A58YR={z5b1F`sJ$ayi+OlYN^!o z9oM-~2sy|Yn}ouI0vxZnAx#uBqHO!fu;>?lV%AoWpI&ye=uwc7oGYa4B`qMLSTo(2ji@PawUKfkf%AD^YTBS>tuDyy(I*fJ*`PPR4K>W9)jyu;qqVzmm}^{8!%9=h|NA3eEEJ z#wLKc5nO^C79k{};u2Fz{ij82oZ;hlMpcoD`B7(fw%gDQ(i{*Zs7YeZlb`o)d=@{j zKom5j7c?Zv`>4gVC`CV-x0juF&+2+K+OQ(eYRkGlbfV72X&>9gYek)NtV2$8$(oLt z?{Pd+yLHW?uH{Mp+rf*+i4qZHE^D*z)qm%v8*eN###WmKFI%Q58Dq-;7M|FDK#UA+ z7*=e0FQ7_OA}0r=BnC+2=m+#;eJ zoqSK)e&ej2zwM@*7=Y^-W4}`}%?nGW={mwyRogZlDOL$7yQPq>lhn;tTPfTK z;8}yQ|D%*TV!JLEQY{N9mt7&;(@RULe!aqM;Kwl=x?OG=lyub7NuJ})Pr~w<>ihXz z>-u%N@}dh@Nhxo$EbF%ZzTTnkuJYrY^S@F`-T&2p|E?l^jAjFa*j>s$C=ZW=e$fEX z%-QNV;h$H*j9Res8?^Wh@^l*ZG!(1V2@7%_>B@8(8^7(=zL^Y>!6t_r=6bq6M}dXE z_l(Miq87aT@GZ{Rsa|TEI37x!;(%9p-$k6K9M}{^GD1}#8CcnI= zt7Mc+Q*tN?;3?BE9(eTGeJ8V&tB|adK8BHdFF6fT8z8xAPK>dEjqBE4%Q?G5NX4a6 z&jR@N^xVlQl3XInpFp*e6xXcYFTD4bo0(GTM$XvB%9gdGY?*L{K-IQUb6q&DIPFUL zJ=YcAa$NTzA>6WI7*_%~R&~V#^Yin|Ua_3t19o9@wlJIj%^K&z#+*U-7mDOFv-aG1 zj>kL6FX;Hb-?hHt{O7GvN`25YjSu$r^pwiw(m}@f?>_)FLDDw9CE&SXwU%A2cQICX=3(x zC5Y@~fd_t2F&dp$5XVN&fE+BzM1FW&6n!2U9PED1HroJ}rj8#MVfom|k4BrRtKp(u zlb)``g(zMNR~D-P($i-N>eVJOInuN&TUJy!}{mdVS#U1e4>4KN19&cOax zezy03$Xl*Lls_Bl*Dm^zLEUodwW(9Y(>q~&)VARv13;Hls^kjEq*6A3%GBIRK~hdc zv0vwGx?~LnuF+<{?_IYrrPON}W4~Lr%omnTvr9-})NEH)9ow$C?$3o(f9nc)?@G;H zG8hcbSs8!;Q2E!deO)$-)pR!j=tK(hdq2O2-@N|6o$pLj{)_0VDHboj?D&moFFkkX zfKuu`hGD#?tE;@hvaFvo#{Lpe_kQokk1ATj-I3AtqO4aMjek^AFBWNO0BCpGJ&(bv z4#-Zw-MP9uCEHyi?bCaC3pCO;dYgv^2LQYtz*Yd?0`QZG+2blHxaK%c33@?rQXtw{ z!EBQH6$IfXtl#S7aT7_sTUK~Dyng*<0A2;)Fc`aU`uOn$9dU=BF%&`m7Phd|3N3(q zb3PLNyx8R;+s(L7FU7U_-zslN8?7v>azMqAZ16njDf}?{6Q%e@%`c==L_`!X<~vi&)N!w zpxNI@cH@&*iZ_V-#I={~Jg2Oby2LQ}rR8$D$Fi(h#@LUPQU@P=^rx!R_*I1QCvn-; zEFlq*@92)((kteh=f$*_A!#?{{|L?phd^2UxaiS)y(w%)KKShuF zpD=|FofKs4i)wr{yw?(d2XJQd{}})(>V0+0*Vf64IM=?Dotn;Oiu&(_?S|CRz3vr! zowbos?(HXGjZ?O=Ca*!(It-6>yn7ta=uK<~fZs4Vzon~G+TL9%tu_t5jxpZ7ZeR_M zOK+p{qW&ky^_sctt`#E&^y5GM=2@+B6diIM zwMoIxcarj(I-6dyXp1^sr&`$@-A(6bujS>}sCY*C73n=u(lSPrK0Q5tc(G#J4>>~o zrI7Luq*5POO5Rtq?IR1z%ayP(o{pMC+MDTq>d`@cc;oN0q$3mu5GCyk8f!Z`Y7Bq> z>CdRg_aAV7x@T|o;m4n-{NN{#)jDnSzg3c_nCa8Z?pf`g_!O?v%NTx@=jL@iscf+Ju!yP3v0* zu$D1aGY#WsrfKeDU;@lE;?yI*KGko65XS~zWA}2q7$q(rlQr9yrZ4krmoutsL^0XM zR*gNn)-GsMNK%c-LHU_CTSOGC$;J!KFiW{1*|KcQSQI1_A|gMzK$!f1?1z4`O!Kh8 z*}aUhI~njbF!uC`g~jDvyLL&Pxs~6O-L2xfu)Ga&c*kp#E6P0^H^2NKhh|B}s8N9^ zicGZ9hqz>o;uAf#vQ<9OSQBeyuXX3;Ss})Z-Zg91pTBPH`sXpLw}VQ^H zil4*l)~;oY?dU3%*L0W54r6R~xmrDXc;>{?+P+>fH-Ad$;$N${BJMfI&HOmcIgYNw zS&1LWpJp=_^CKH!Mt4NjK|lBQGxya?_DCj)!uZE1`GQ~h)R`y6-B?|8|4Md(C~BOO zg@*5TvxP~VmjDOL&c^0G=97nCJ*+#op-W~+fKS-R~ZYH*__b!U=1woF`RhuBv zD{E2a&xaZFN-=40KKr#>ey$zGj%C?yHG8(5TgJ`@a4P@_;EsKVkL)3fkQ`A1Kn#K% z#wfSi2no{w5Tx)QCq$+no}@8ToG6%M3o9$SHjLT@AtXE53QE&>o}wjmol^Ad1l^7D zjx^^u`|H@Q5Te_bQqj0LahF$t)6W{~7^&kWzd`QRt}xrqmc%W)MQPk63YL2&l`Hve zB1mEbgW^0QBJUHzbf|#rN0euXYc_P4jq;>&EI%=ump}Hy!!WsN-gC=5$6LhnY{kA& z)`r$L9G}DT-Ov79JDam-Z)&A7{(#m%@WBb4Lqo1r$4iP_513-!f!fyfJ z>-+7lnbb*xumLYQnRJrjAo3Mt!^iK&L{R81l96I0(e30ViD#q}ww)($MT{+UGy(W6 z#2;I@Ok^=0QK#A-zdAhV+9v5r@8d=@Fq{ z5YhT()6d3fD@cwy!{-Ezhx|53HiLxDYHXz=@AGP;NGrD_^1sf+^YrXH=|Z|Ogr6Kf zEP_Mh_q~u;F4(%|BF5P5rfI&UR4OsUFr5!17Vao$8nx8$*O*N*`^=`tSrlC8YgEvHTL%_OJ3g(;?sl9icBI- zOG1XCps)D74iz2JwN;HXk9EjakW-1x?pv?R^*>&pCF%@$Z6{~sGn0#F@}_rWC(`A8 zR5UlQI4kJpe^_YnEX8oGc+%{rD7BBQK6{Wc6LDRe$iIwv#iK-edEPAFXtdppC-?p4 z^Fi{QdR^K&w7zf4;JO#Nj{Oz}b&YB8OM1%I#iN63F1>ii*rk`9yX~Tjc8p!MW8={4 z%BK0I?sE6GEW{h8VRo6^*wJN`&Rf&p-?O^Ex2I$p=QH3O#!wDxQ%UZF5g`C*G6-=A zso$U}&65UEA*)Df(+e7+HgH7gRHP9R*|K4N`Ro_kG^>#PG*dKP{&&(d#$7m}ImgM$ zMAGk+mC+|*{X&>$x%iwN27odE1)%o${sXep^g76zw1S`wo1cV<)7pK%6XBPmyx++1 zaJ>%LQ`6Ieq7r>N=XYjtE1e3{I2R;$C!%bm4FX#S`RNg)oM>y$BtVe*eK>r1vNK0P8z&Nm0Gg9pjU{o2WQyy*>_q111irup{n za%s4)x2Lpz^#IP>wi#PTM*sjPPS4B3$7WWZ-ar1-%!!kKXIa)g2aZk8M;!+c#V+3d zrt5YB_~^Pd18?85Y1nXtP!D14rT_pS07*naR8Q<1Upz1|{RPh1$3OblpE#69q|m$( zApk^lbYVN&bf2{II!)VnIyQ_lv^v?{EFkmZ2`OSabe8W~<9|E-X(o3>@$n<-iHZ77 z$X3s(qp>84T(q*4MET-JmQO!KeFnb?bCCJmajbFB(`!1>hq5ZSI#2Y)eQHo=lV-cm z1hDBN0Nw=P^#BGt-LLy;0IK)7aVETBuNxMvEa~`1=XE2#-$np$0dRe%>OdT8+NdY3 z@{eZd7mZB;y3jGgqWI8yW`{47Kjc?NTA>sMm9sD?bz$TAcKJ6^w(Un8F`D1;1kGeU z$Z6Gf_1z#SIlAm^vs$+<+a1+Ecar~Zh1j4oULv~`Z_RPuD_S+>wc3*jq9amD zOGvp%2r=dgQGygGn;auU>u}zVEx7EW^KjLr7xCwxyS;DA@cIh}2l{US@V22fYqqBu z^Uj`HU^6G@jj0nSjl)y3n4LR4>AK>}03Kk#yw188*__ry2mn3~D?lmREZf z$8%qN&W@`9d>B9lz{einf8dEui@$XGN1dntgUmu~^*(u)^|SBOUG8Qj!(hW}R+TN& z=wXZr083AdA8}iK|J-fcEQ9m@wF9e4YX$~XwN_)tW>3h4<>eLAFjmGVCw_r+F)}=S z8G!!=zy|QQQ`6JWP{bOKzUe3)1wm4ye3$aJM%q5QsSKbOfB>*`aPlZ2e#9VS?P^#- z#=ej)bhiBn3h(SS8#>CywO2kC2Ax$0;#j-7VidpZReL7=Nluq^BE%8}vnRyY{N)(! z_AmVUk9xY{S6(v)-~$Hd?+wV^ec;_r>K`y}rMD_inuBoxi#rzz2J}%Ga;y@3YD!>w5tH))nF> zV61lEt{+Q^lj0|80Ep=5ZoT;?4&Vv^*Geg;tF_wqr)Ez~t?KKoe*M1tR5RuG3If{| z&0E0|CZQBzHuwD)!89SODB$oXZ&3mf8WBWFW{UXL+mfSKLr46i@WGL4rq#!fNd>rWn@IMM3+=WW}zjdT7hYX?^Ce69h2ADca~ zvaq!LplKT48=st5Is4g>;o(gHUIM@c@X*xs^bC2z_;c8>vg`LmZzpd4x6A)176!JD zZhAg|YXQsvxc}hf(UYXD$;x0JP%9~S%w~-t$cTw%zCZ^Aevo)Ft_A?V{xE8M+6jjs ziV#l`pNOZO7GngBBcj;;H~-3ORzayN4bER}n#P;f_H>`SZPO55`H~mns!K1#(BL{q z#qiAjL-_WCKgQ3WJ%EYhr=DJ1ss2HC*}CU5U%6YQAy4bqtX~bKt}a{Fd41(FHw}KE zQgt3YI5TE_>{b%ESTb)$*icNw%cO0=nlDgyt0bS42qQLP0 zAwk~0h4s;XAV|IVp_E!yN*z#29a2hFiW+-0%2AkDwpr}vrQ=cZgI4i&V$}I+uh~&9S=V%zN;h?tN^dbt^95T*Mz(Dl8rr#OXz1L{8#Zj)ykWz@ zf5$lBwVLgmI&}&&Gc!1G z{5a<4Ph(|e1yTqw1~3M}IaB+OO{=tQX;0aj?3WC&;3ZUyy5IvtGV7fM&g{6IA{HwvtG^_FA@*3D$i*`Er)HA@1*9TtmL9Po+Atb zW{@WAyz@Q`GF)2k)^07M);fuZ;;6mQ#(zHRC|>e0b9zCYTv`#1P~$?#uPWf*mMgXC ziK8=kdhbE}{HeWo{HZ&-VY09;C`sgcTu0=!fjg_{sTcvJ#}cjPdR{-! z*Sk$f)pK%jSuR$p%5hyNz+k`xWB4r+hSCn=!Tl4DakJmw$a^XmIE7;JQmnmi0a;Tn~j+y4E-@*$A7IoVB@q zU0vOrvsZJ*ew#D)OPnzyj@T^Cu|Qt1>tXqs71(MW&k*Kao;ozHo;oxxpZlQ>Wx%(L zB@shpW&Bo}_f}HQDBw1r(tr9W@r{(a_0yAqSJESDC11p@w$M#c?Q7W1NaJn z)19cpN&1wqNQXM)KImw=PKCV915%xz^-L3KBB*?3A*S=Hx5xQxREs8_<xS<>U@jxa0E*lc%K`G;NQ z@{bu~^Efj$$g{xV)ijq>0v~jp&f3{ackbY~zw72reck0(^mTW=uD_@IW&J(foBMmZ zx$b9=(#)8&EbEf{tjKtj!e*W!t@G^vb;@@;Jqt6AAk88~kbCbtHnp^O^61aFX??Ti z%I{Sjcdz5hnoJpPkikNxyp_x$^Jzjgl)9{T3b zo_Y2=`;Q#nzvs{)honBeoW7YqX_d#flKEyef=;HeCz~3J&PDVKjk2-l@Wkw%!xKN+ zb9my(J%=YMoh~taQIazsrii5I~^ZHqt}gBuZaT zDfUS=2a9UEXpctkS~b@3bT;sL`3t3_BY@c+TEj3?t=Q$G~~|@Trk<4?AK%({X{F<)=JmH_%pxbZkowa60wn3g zl-8~qxWqE8*I1^p*)+`s1w2%#R=z)b^5pEQo?d%?d5IG3l=7CiatlARJ;^S%j~&{@ zDp?-um1m#i#rwEtZF}jY&ineQK?L=iBtw*w>X64qSr6Kv8HK{eUs119)R8Wv-$Z$l zF{)Q&Hx~BO#Fh1WD^Y%k8UPYXZlc1t=-w!81$U?$e$CHw`*{w(g%)xq>Bw-qb@xKT z@FVw8ApG-iVm?T5JI&`$^Td9Ub-h#VSYA)}r^TnBkh*@Gu>9JXW(BLp&ut&w)TMxT zF|ZGsoS$QIzK=2dg#teN^r7*@5CHO2NY2x#L9%i2>$c9up0H?T&Hn2*Ce(>mrc;Nb zUTe#S4U7Snkg``QwHAP37{-E9P(sQc!!QifG=%~dtJUhliTP8m>k2ykpQ3;Cv%wj* z0Y?Y=MJL$BC^;PYjC5kkG@1aCsAXhvE_+!0>6DnND9twQVmq(=Axy5PD+Y`ET6sXQ zBqGX-%=xJ|%mjl4Y5UF%H1F^X{*@jkZ0>b%}CVFbT9uvdz(n z6AR)^XmowgOVESDs@MO2>boMTri zS4j1wE99qb$Nfa5W`Aa-YCm16+9K<+6^6%NGS~`1K-aUzofzuWuP9A?Mb`CJv2ECq z9$qn_m%KF2-9Gynueq#w_pu>(+%FYgZWzXIbeGGw^>uf>yQf^bwWnNqaoIG)(n4UXf)8>DA{;qMZakE*+UioEIeXgGa8m5URX}yWlzJ}F3iu2NqkCK#4 zojTaAsUeN{M+cHm-gDx#V)?Y~M`Ily=TwuRPK0YMQcpvJ5mBQi2$p5spEoW1w^<3=Vyc!zWD zJ$H=rt#wxpcR1(l{e9p5#^2}mDy3eafCm7ac<}!F*na<|Ri3HR{Zv953@UCF@_B6( z763FzSb_{LlnXXg>ok-T=wiQLEJCutck+G4!V~55Dj!lgBA2~GM zKRrI)H9bDAmwNVUovT)Kyjty^npq6fEi17Qw=tGRr?=wc< zV~j+j)~Zzl$w8kd%`RpO@_eZk<*HrezSjHnl8pCK*i(u}iunSi^lY(LE7`VweTs^@ zjgTP1OBvC-8Ka+OjJ=D9egT9BKy<`3jCfBXp@klCpIZGs{31fN z+St@~9^cw&=TR}6Af%A@L#iK*_4l!{fxhl|Byxr`_5dTim56R40`29IAmZn(!sj91 zw+4kH0P5h-7Gv~EGw^CTEb4hsR|DC;|9ka(_D1Y!tMOPPjKO-0h$uA|GaM1o7~b$Z z`+Pr|L$&wQ>^%tT`b1+|qT||m z9S-80<7(EZ9;1w^-HTef`h|Ag_63WMo1C z?`K3m$ryn#1|kB0ued^d@Z8+hf9;CJob{cZu=BsoWX_8n?1hip0mZ5rugULOp9Gu-FK?!#Lie4_=T7bvCPAfu@xHE9mtmMX?M8B{p;DdC@cTWuT z9X{0GJ3ZdtJ3i9eo$QLow0rKk=SSB2!TaxJ58i)o_k;J}d-%coUNil`eXp5%{k^ZA ze(h^sH8R}a8)*l4>So+ekk$F&h=|rS$|~uBYT+EqIi}^%9LnjVVtnNH*@J|Gu7wAN z`}*RO!$aeDoj5x2l4sm}(=(1wyyDd4=sS*$5C6=>Q2)>Lr4m0Kk3}AgMI(0|o0{r7 zHZ`Stbc9*oo9@l z*EMZPDU}bC|Lti<_>q-b(JxwAF9uyaS4!SGNw>EnM0q)Q*}eL+SOUFPSla#Ht>t(2 z#{r7{ZoNlz2E{u;A>M@g{hKXw-D;r!z4&2%iqdM~p@TSn;vo4gtu_kgpz>5B?Z0K7ygm6E^}Ddm^9vbpc3v$@T0 zeB&E881TXS?==9t48Y5vR8j##D8-~wPXYLg`Q_E8nyJL)#H-aJ(1dah-yL52`6+z?NMl5b z7*j+vLqy+u^uoo>@Dy%OS*u0wSCZLQ^HJ*E0amVa+|QbZ_HgsgZZCzMt*}4U*koRw zqZXScC@r5Qc)@8DuC|;xb%t7d`@**jJTX_6zY=3(t#}ixb4`~0HA)Ah+e5N_P3^{ z{}p5O{eS%a6U+5v@E{zSdIwsog{*q*D_)iaFv5u9oO8vAxgc~a;7w5KjSA=ja1p@g zi0EsKXiX}WcZ47ixfQ`IM5bP8s78E>ukdAh% z6aX|c;2h-j{rpb7#yzwX-F|e6+phbDm}S0iY@qk#q2U2{WT2PDV^L;10&81o%q^{A zZfPyOvbl9>JCpr_0{-aSrAwDP)wvoNo9xzzh5)s*vXh;+*B3&FswV4duXBz|B@8Pi zApP1ZojTL8nStamc-5KqSgE4NMiut7ODAzF*>lIo$2b5YA}}IQVGMu*ARoJUDV(X- zrnT+1$ti059j77u&U*JO=R`p2Q0q)^v}djOo8oL~T$loGo+S$TGLPS$eWMvn3d z`Mf>pz>WZz93G&_kwG>w)ITuT)Ah6qG7ksw+vUaq)M_jS4c8MeWYrXacL4Yh zfDbCD4-wIO33w3^r8p5Z#zu6`U!!yWOGNbR0R9tz4-)Vp0^ZAjmvCY!&KMXGCxD=o zp_F3HP$-q4A}hhFx2p5u<(|tu$6g+Amo(1*R4Vm(rPPYw z`zi*hUMqBaJ&1_NV00^E^fQdutNY@SL?;GjTAfP4wR(~D{W`mxZP6)6A71vq9=4U& z?-Y~$a-(gE{cbhmV_HeRg3@=bWRH2h-@Rj&_CqdvMc=4q1k&E?`GJpZSIE$y0+pZm z?B~SUD|7Bsvsc_FW@g>TFI{#YyLd^2$^Z7X1M0!A#bm1;&eTRB(bYQ%6(rw2WlD75z@hu(PoW; z2`SXI;T`}_T$+)8{K-$dAOG}c-LtcEZmHzIAOEEh{Ll=Z3;8@a3KRjL9pIv_-^0T% zfBql{zam`uGwE#3%;odnl~TR;{lEK%f76V6^a=wS^nAV`A*=3x`AcslqIWW)7jnkN z8Dka^fr!8WFh*d+03s+TNU7jT2_Yo_0_O~z6+TZONTuKi0U_n%MDz*9*jE5toS9$T z36d{Es(-Mc8UAD-{nFOYF1)B@=zgLw$); zF4JEth+YR`PjOBAV=(@$v**%Rm3=Nue(a;}!NXC;`BARv1G-_7R6sVDhj4A;%CVv3 zjJiA%9{Qr1?mDl5-&RHdsJ0r~3*@;UINTujs+QjkvNF70=R!!e*<4k4 znEl{|4}(H0YgHR8O}jn-ABRHnbhX70|rLvCe&g`Vq+lH>Y zt6N*DUV0=vKSDYPXJ*Lf&7r!F02uBcAQX@W)co?2Y!ycMiI+ZSfQWwCb;UckcG8KR zO!iws%J==#W9Poyta~gKtg8g&RL?4TFV6ejci)YXzHTO5F#zB;jj>lUMz3Rx4KX4x z#=seaR_N-70w5J2c9Z`~sX~!J0ZQ}63jo|g0YF*-vkLeUfRD_~FP;xYw|R=S+7S_c z4Vro+TAHPE4uZqrbuMwc(7Rsw0`55O1CfaN>l34c$Hs>G0baG0FF8WaeC<2m&32M=b?1pGHkdGR>+~2NncKWmD7;ey z4UBU@%8jL~Dya4F8^G;^ImewGNN(qZYDmGYT{Y)K(1ks%2Hjn&4cH30E2PHpN-=)+ znjok)dD1F+v6^u+L0>0mU$GPUv)OvJ(MiHupWEvwE5F5V)vi%93hhI?uQg@2UVP@I zaIM_G>n+Re#1G-Pwc7ZwlWAgjm;n4ZfQOY*^N#C&W+$D#VCZ^!b!$sDiXV%`SVP_n zsgv!7kiY9kbsYh)oBTfv;1vL#Iov-GZ54-4DV0-7eNRgHc~^+f*^cuS+i~Wb>6Gq= z;wc5q=s)x(rR2+@)Of0Y zlxkfYKl~J=?%Y3Gpczyuuv?F=wn|X3K{+n<7%A1tXI&?a>j+x^)yv+h#IIhHrG7i5 z>n-;|@NCGBoke?nYp;4bh>=#Uq8E#u(?NBT78@;8tNse9KK^RCy=%37s`k0}%etSl zq7iG*NrCM~#v)tQKJ#KfmEyx{ZM$Mg!eRw$#pEF9_(MDEcrPPQ8>uf2>L{2NrVM}u z04o6U0A#(^w4BcH8y5(v{m+$yWYe}P3T`J-T@e6=`v(|+mjQSfz+(XZaDI7dxfLG# zp_lv^C!%i0b-OmVci853IxD4I{npvbnPv)krHai)RbBfL*4Mu3h;&9Q zN4hZzZg>CgccfI1s_-Hr@au_w_QMeX*c}1jN(mtZq*748mk9WvscGMHrQ`ry z0PeZDYb^&q-Og1@UMlIU84=-Enb+E>5){0Cr|?rPm3Gx!zm;Xc3+(Un&z$5+$=7kl z-y4rwC!-P5v0Z`fYz`Yc8Ere0d&Cv;1Lv<^`|BX?p%pr+k4_z-^Or8-u2V;+8R4D% z$>=K&5A_;nPM@-l9Y5CF-P2<+O~>l`1}#5Q z2i2JBADyC=YnL!GedaI`z1^^4Z-^#)#zsa)t?}_O#A7i?DX_M>hKrYH<*SwSN`9D#zOue}MFzp!espnAohz*}=Bbvmr_yModO)GK@<@eFu!lOW)6Nf{ zRfEt}35Bd0w6c&w>QwpjtM5B?J*u6<-t4t(HD9luwm>mmUX48%)OrP7l<5T_Fz7f% zkn7Wm`XlVZ^CwrO?4@#kMzuCvrQdC|POT@hz(L}r{d@TTyyvG$0eUhX(+2yxA*IC3 zwIwXCZnz+FzWR8uV;Gw;3Z|85Vt6BIzhUAY} zoqt~eSOV}p0OtYNwK#-9(kH+2b@5-n{I!+O{@pjvfB9RFKK;*6Uc9nD`QONUELMqG z>EHYBwOO4v1kxDM7$Z8uh)obtKN0EIVf>*0r4*!81=#=H?tfe_KG{VGV1&Y`0A6@q zM*%3j$H0jl=8V5yNcA%S-U8qbL)UmS9Pwt)(5gpQ_x^h?<%m@Cd&RnLDpfz1>LBsz z%-6aHtpe8>)V=uaa`MY#e&!O_%A-L!HhW+D`E4_uQJd-9`SqRjXXaPd|KRf6;zurA zng7VetBW65T;KYGbl(1a&T(ggx`&|Tx26MIDQjSO>{(nl9~vF#f8mkC<0nrao0^_J zJUTi)HfW8G3}AS$7sGws80tx~u9%gKn%Z>K(7TfnlW>4Z0cNUy^iERZp;$Ef;=%s@ zBS)tut(#9C!yTuO<5{r-w|B}kBU8k*Sh3`P zyLY`olH8qv$^%W z^w#FT%WSQ`E3>unuJrcy+qbuNUa+&ZlWL~S9|Zj{Ge5sQGe18&yRdL=eq|*aCjUFn zcCDAa-l#F%tsc5}E|{T}xlpFsvQN*N{N1AR0; z&=(ya=Bp zI!eG>71VnHya&K5vUz)KpsQP(7##4Oe5%C}Yqo-GMdPd#EPS~xu}U-0_XnNp<>0rH zq2cG*8fCNu0n<}1(b&j6^a>OH$i*4S8GAxw>?4M*{f24kzZJ2J--?*VZy6f@O-A%_ z#^`(}IaiGHh@ojOAjaO3h{tal9UQ>q_y|S@dXb1lp=%tZBp4)gMld*ssd3lTIc0M> z-tO{N%Xb)&#TkD-BYLZ8TDJ@g^s6INhjHTQ6iywR#7)O0am$Hm+;aLDZol~y&YU`d zsmVzU3=AR?je+Y%YV7dQuJMsUUhDoBgL*9Xo5hN=+TFnK#6WV;#cV+(5`tKZdIlEv z{(XP3SG!TA!ptD%diyCd@Kd1NF1B(j`E((*CNEX;a~jnd-3Xh>i+>SBfm=2DWIxPx zsbb!s1E|f^bB#hn@KTT*^hgUY@q>EBDax%wrDW}18@gB$xLqJ^Z#gnew;Y+aZay;I zeR}e6--$!x-Nz4&S)taiO-8-ykWzA0?#yXb|GAh9wTr#wHSXW2!iBfJ{yuikJ@**V zp5CM5hbP`JHaYcwjZ7W?)#1rwzdCwo;+GFijJ|q&VzfI*J>06JU_uJ1S+-R@nlujD zhz-AM)Z5d`dV6|#Z%;3U92z{;WduMw1lU^r9vg9g)k0Q{_I4Y@`SS?4hY?u-29#3I zCD4&V@_(1PcK>o+atr@fP`m#}K%ujLcSHc+9RUC$NCgNf;R*>UWntKkDtwy?KPHt_ z-*u(peuKr22-UH{Wy`ciw&* zP9B@a#Mm&pQgJXw*hy!xxV(zXGgt8B)93Km<4@oRk3X@xzP9>xO*wx9CBHm3d+}1x zd|oOETuqR*Rdsc_d6z-ouNR0!ulG@n4h~_~{_Q>#8<|xusoidC=w(z`E%sbHp5xVy zH40@Yq#*6OcIP8M=TcDqqFqP*?3IGZ<0EMCxMg&d-&I(=s#0r2ELMgaH zLP&{Sz<|OCf!#kD0i2i;QYj(jtb+O|5&eZ?lqNtUB0wSMxMFK{b2FF8hN!M*$x9-A%#?b`Kq=k+e@)k5O#Pqc1tImq4g?Wtkw<;8s(xElq)ajbmbac zN+A?BavfTMZaFe-0(hMQ-X?@NB!sx6pgscN3ukBNobXJqudb~{SNici8nIVl;y5_n z_}16m+yC_Z@-IB_vLAo@OP_al-_5t&LZeg1k+*F;^@B&;#VZ#-Lqz}aCw}EO&)0ID zQhQU0Pea>0)Q2Gjzn=#!{&W5NN2ZPtfCQj=q*8rQiYs82fQ5^fFR75Tf+H3xoYtgj z6K|CuW~+try!-CEv18|$QtB=c{WNFnr5fjh8s`y>v6#lWR)FqjHxmCqp|hVD`(aT4 zuEYEnUOFcj8i%eiXpBGrl$1BR|Amy0s(=~*RVV-;5EvuUI5Ey>gc02f;6Fg&*8#i_ zz^?)LKLB+!o42h-E3sB^9&4SASP3e(((JKnXF!%p-V}4#OU+AbH|M=tN6;^1(OxL< za`66M*QXOlFZgksz0S#O_MA;Wl+W9+ZHK3`Ic;TQ3$u$WczSjokDi~!BTrn!cOO58 z?>~6~k6)O0Bq*9SbEsZS2MnF{hY%$xdUOqvakqh7l06qcWcL4ke zfX7jo;u*M%9@O=&o=g{zA&!M5AEdXxeUWq`+1DKz=c5TD&TGg^QjpUVTle)#61-~OAYJrya>KK*k zW)EU6VUXPoL3GgX|6Gvp|MgyjR=RF2^S|q9K$csJM(;!3&bvxs&UM}II<83OZQI?+ zWMFVgk`zM(F6h@U+mwV z;;fcJN%6{K`{%tji>LjZ56#lA)trSvoMV21SYGU$QuLy`?u>#ka_{r*8H^ZODsS8N zkKKH7WpgJzuWNkeyH8&dt-$Mk&?>@UTSy^=RIR)e)1!WLO)I0y)a$;2n)O}Gek-*% z^;&~!5dppYuAlo3!fviqB-3vG%6|I(`3vHfBhya+IEzAei6j!`29?cD?Ea zJ=^aX#{iS*fyZtdfKbH%^a40SL?etb1t9Xn#^R8IB2ub75Ea@5F1?xeSdZ&-t{L6& zSa&iOy<6k_UI6z1YKk$Y5ei-XN~s$K00r3o-7bC33ef(0q`FW5puhld2I#w8kpLA6 z0D!`uN?tD`08khUaD!Eq0+P)br^E`bK%3V=^? z&cAx`%9XZ*6lpY{mFm7P_L*V*UT0t5%ap{WGZ--@Fu+QnEsD04Rb(&58L z3;@$abeLD$tQ9C!iB3_+gqQsxcVZLeB$brOKY|AotHu(KaN4CI-<=Qb5o71*Q$#TS}>v9 zm(mH`kNE|J?8An`r((~efzT~Mg|}5>FIrL-@qU_LSS}wR<5ipf0{u5 z@l#*^$8$m5d!t9egcMSEc7+50N2ZQw049m(sHX7<=X?vmQvl{3d*bnM1VDh)&;o!k ziQj&7XmD_li0;xkdlh5sHH^_9+tc|E6fXc^L?FhlC*yA<{}~EM02%`fjX~QT5pX^6 zudbI1>>>g1Lf3u)T|g;FdHs5Y5dp4{aAo18c1H!!?zKS#Ar*uWfWnP21PXLjDfMSU z$iI?GK6PzrX)ENrVD8hab6l=qz^^mWsdMVRI#|^tc@DCkJ7{w@gP`%TL(c&4Fn|>R zAHOm;dnG&_e{@e@{+c%=q;OtqM7w@MPxRh;^yu;aQ)h0$^z;-CjSiwK9)(U4+dDhB zI=_T-=g;A>M;~>r%+6fd+F1R1E}Q*hUDv<1ID1yrga7;@vm6xt(Ck2RvA|zwhc-sv zSCR)W$*+OIk(jA#htEuoy|}L{`L^+qft$vL2C%ukjVI4t+*n;(`>>%Kzw?*>@Xd`@ zT#t60H5kfBNS#E3{ryP*(~MXT<6IJG0l=lX`K!5Ro`v<0v1;a7dnr0U2sVsY{pV+W zf?mT)g?HuNFLiA{Xic>|gV%zD@caoW$k>gaBKCGjuD6q3Zbez%&m+&6J~W~f9=1&V z1<6=cmkLLIz`-~T$`|-oiFaj6@ zbWX5z4Kd3^)G}chIt;z=(sd2GuEErGL<}7f(?rZNk%*XxTPC8Gfv9B^zH1sV3=NuA zn5oPd17n5zz;00jpl;lk#t0f?&=~bI-~mQ>7ia9$^r6GlsC}px-vvGM#j8VJ?9XbP z>Fb{@_G)Fh3i=-W1~saM52|(EaijRHUb5Cnb2b}6+qwMHu9P2fg#7f}dSAH(+_eG-p6`Xs*dgD3Hw?>&m|Jn{&hc>Hl( zox8HOy}k8UN~+(3lHV_t{PzpVx8JF+2TXmt&hTxOxuw_l!z(;(IJex}UV05ud6kDs zpD{IUNMr2HoU?y7)Za68>gW`1yZIDuK6M;NCdSy|kwKaq8){h}r`??LTE{(wauiZa z24jd0F`~CHM!(5`4-nygB6K%OkCq#86ZEzGCS)t2=InoUntt$FC|_=Us(IFG{ls$f z#;f(U_S>^w>5cc_M~6p-*|9@o?D(N^HZ?lTCWZ&u_|O0w9~z))@2%Q3J;;7ic>exd z+utkSRfA;IN_J*D*p#ivBiCtbZGB~PedF_+YwPdZSXqAW=F0MWw>P%lx4oVD{PuQw z)r&4Jb{+&V3MTYD%fH`%x#=Ob+1XfY;YTYxV>=*$N=@fj^E!M?Cb3! zqBADfUaoQWAZKh++lBP!tT1m#LP1Kk+mVl56aWbjz`zP!{7}#sgU%TYM$kFI)EFX$ z4$Cw_j3F-+T!|Y{{!%HBDvSsyBp(YJh*M<~QyA$IEQ-C%#-2XgA^ga;%7!gwd{sh4LpPrey z+)TafM;CfIgZy-|R%0V~ntt$708yR zlZM7Q5lPn-kV-N@ISM$R%jce0-Pm^g@Njqzht%x7snthm#=W*1KXr->w8JQv(9a1e z)amG`{8Q-5w>Gsz0YFHtcVGpc@7x7_zR~Edr2mgoJQiC@Dcof-^v845n7- z?gs#3g|PsR5Xj~o>}2!U&e_P?4jdsN3wHvba37o)hyYH7u>+hKgp|m;(#|?!$rkc| zD&WI2SLYsYm3?W3VhjR~$d5BpP4!qi&#tZJFs$YO8nyQa9mXnjuEKM7FQvv#X-bMN zt{HbR#(y>vi9A1`SLf#{ z6{!Saql9NqNR9IELOweTZZEyUb<8x{`?}s?&kNo9j0ieoh#DFa5ffc83%!X5hPxA(80^8sU=Ien zlju#w(VI%3rz?rBR2RCEDI}9g#A7i;EenRGL1zS=5ex>HoDk6%;)aH#WuPl+B5oNl zH4a_l;Cy!kz>V<(g+c^F+bupYbi_;zQA0;W*9@JrG0td$6B*U+Zz}}^g61zT*J&iI z`F@zkW~{$o=xeVInU^3=sn1n%0D^etg9Kycbp(Z1gQ*tCORvt=eweoqYOy)z?&jPR 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

)}}LE)xbG9QS0AHgloDg#Uxkp%-^e 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

>q#o8e46Cw7$j8>^v9RFv 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 z

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�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

ndQ3L+<`X2p@Z$FqD{ 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

nA_kKpY62UpX{!#hSe|}KG1LsQ( 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�NKTt0#NPFP==2uLTi{p)x%1xMbnB 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 literal 0 HcmV?d00001 diff --git a/Client/assets/bullet.fbx b/Client/assets/bullet.fbx new file mode 100644 index 0000000000000000000000000000000000000000..03877b7b42fbf7f094622e8b2e56613bbc71f6df GIT binary patch literal 18620 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 G=Kmk6GQax( literal 0 HcmV?d00001 diff --git a/Client/include/asset/loader.h b/Client/include/asset/loader.h new file mode 100644 index 0000000..65eea2b --- /dev/null +++ b/Client/include/asset/loader.h @@ -0,0 +1,22 @@ +#pragma once + +#include "asset/object/model.h" +#include "assimp/Importer.hpp" +#include "assimp/postprocess.h" +#include "assimp/scene.h" + +namespace veng { + +typedef Model& inModel; + +class Loader { +public: + void setPath(std::string path); + void loadModel(inModel model); + std::vector readTexture(); + +private: + Assimp::Importer importer_; + const struct aiScene* scene_ = nullptr; +}; +} // namespace veng diff --git a/Client/include/asset/object/material.h b/Client/include/asset/object/material.h new file mode 100644 index 0000000..2fdfbbc --- /dev/null +++ b/Client/include/asset/object/material.h @@ -0,0 +1,10 @@ +#pragma once + +#include "vulkan/texture_handle.h" + +namespace veng { +struct Material { + TextureHandle texture_handle; + std::vector texture_image; +}; +} // namespace veng diff --git a/Client/include/asset/object/model.h b/Client/include/asset/object/model.h new file mode 100644 index 0000000..752b5a4 --- /dev/null +++ b/Client/include/asset/object/model.h @@ -0,0 +1,156 @@ +#pragma once +#include +#include +#include +#include + +#include "material.h" +#include "vulkan/buffer_handle.h" +#include "vulkan/vertex.h" + +namespace veng { +struct Model { + Model() : graphics_(nullptr) {} + Model(class Graphics* graphics) : graphics_(graphics) {} + ~Model(); + + Model(const Model& other) + : vertices(other.vertices), + vertex_buffer(other.vertex_buffer), + indices(other.indices), + index_buffer(other.index_buffer), + transform(other.transform), + position(other.position), + linear_velocity(other.linear_velocity), + linear_acceleration(other.linear_acceleration), + rotation(other.rotation), + angular_velocity(other.angular_velocity), + angular_acceleration(other.angular_acceleration), + scale(other.scale), + material(other.material), + original_offset(other.original_offset), + owner(other.owner), + radius(other.radius), + OnColision(other.OnColision), + visible(other.visible), + colision(other.colision) { + graphics_ = nullptr; + } + + Model(Model&& other) + : vertices(other.vertices), + vertex_buffer(other.vertex_buffer), + indices(other.indices), + index_buffer(other.index_buffer), + transform(other.transform), + position(other.position), + linear_velocity(other.linear_velocity), + linear_acceleration(other.linear_acceleration), + rotation(other.rotation), + angular_velocity(other.angular_velocity), + angular_acceleration(other.angular_acceleration), + scale(other.scale), + material(other.material), + original_offset(other.original_offset), + owner(other.owner), + radius(other.radius), + OnColision(other.OnColision), + visible(other.visible), + colision(other.colision) { + graphics_ = other.graphics_; + other.graphics_ = nullptr; + } + + Model& operator=(const Model& other) { + if (this != &other) { + vertices = other.vertices; + vertex_buffer = other.vertex_buffer; + indices = other.indices; + index_buffer = other.index_buffer; + transform = other.transform; + position = other.position; + linear_velocity = other.linear_velocity; + linear_acceleration = other.linear_acceleration; + rotation = other.rotation; + angular_velocity = other.angular_velocity; + angular_acceleration = other.angular_acceleration; + scale = other.scale; + material = other.material; + original_offset = other.original_offset; + owner = other.owner; + radius = other.radius; + OnColision = other.OnColision; + visible = other.visible; + colision = other.colision; + + graphics_ = nullptr; + } + return *this; + } + + Model& operator=(Model&& other) noexcept { + if (this != &other) { + vertices = std::move(other.vertices); + vertex_buffer = other.vertex_buffer; + indices = std::move(other.indices); + index_buffer = other.index_buffer; + transform = other.transform; + position = other.position; + linear_velocity = other.linear_velocity; + linear_acceleration = other.linear_acceleration; + rotation = other.rotation; + angular_velocity = other.angular_velocity; + angular_acceleration = other.angular_acceleration; + scale = other.scale; + material = std::move(other.material); + original_offset = other.original_offset; + owner = other.owner; + radius = other.radius; + OnColision = other.OnColision; + visible = other.visible; + colision = other.colision; + + // graphics_만 옮기고, 원본은 nullptr + graphics_ = other.graphics_; + other.graphics_ = nullptr; + } + return *this; + } + + std::vector vertices; + veng::BufferHandle vertex_buffer; + std::vector indices; + veng::BufferHandle index_buffer; + + glm::mat4 transform = glm::rotate(glm::mat4(1.0f), glm::radians(180.f), + glm::vec3(0.f, 0.f, 1.f)); + + glm::vec3 position = glm::vec3(0.f); + glm::vec3 linear_velocity = glm::vec3(0.f); + glm::vec3 linear_acceleration = glm::vec3(0.f); + + glm::quat rotation = glm::quat(1.0f, 0.0f, 0.0f, 0.0f); + glm::vec3 angular_velocity = glm::vec3(0.f); // 축 * 각속도(rad/s) + glm::vec3 angular_acceleration = glm::vec3(0.f); + + glm::vec3 scale = glm::vec3(1.f); + + Material material; + + void Update(float dt); + + glm::vec3 original_offset = glm::vec3(0.f); + + Model* owner = this; + + std::float_t radius = 0.f; + + std::function OnColision = nullptr; + + bool visible = true; + bool colision = false; + + private: + class Graphics* graphics_; +}; +} // namespace veng diff --git a/Client/include/glfw/glfw_initialization.h b/Client/include/glfw/glfw_initialization.h new file mode 100644 index 0000000..ac8113e --- /dev/null +++ b/Client/include/glfw/glfw_initialization.h @@ -0,0 +1,12 @@ +#pragma once + +namespace veng { +struct GlfwInitialization { + public: + GlfwInitialization(); + ~GlfwInitialization(); + + GlfwInitialization(const GlfwInitialization&) = delete; + GlfwInitialization& operator=(const GlfwInitialization&) = delete; +}; +} // namespace veng diff --git a/Client/include/glfw/glfw_monitor.h b/Client/include/glfw/glfw_monitor.h new file mode 100644 index 0000000..c8b9047 --- /dev/null +++ b/Client/include/glfw/glfw_monitor.h @@ -0,0 +1,12 @@ +#pragma once + +struct GLFWmonitor; +struct GLFWwindow; + +namespace veng { +gsl::span GetMonitors(); +glm::ivec2 GetMonitorPosition(gsl::not_null monitor); +glm::ivec2 GetMonitorWorkAreaSize(gsl::not_null monitor); +void MoveWindowToMonitor(gsl::not_null window, + gsl::not_null monitor); +} // namespace veng diff --git a/Client/include/glfw/glfw_window.h b/Client/include/glfw/glfw_window.h new file mode 100644 index 0000000..2bec0ea --- /dev/null +++ b/Client/include/glfw/glfw_window.h @@ -0,0 +1,23 @@ +#pragma once + +#include + +namespace veng { +class Window { + public: + Window(gsl::czstring name, glm::ivec2 size); + ~Window(); + + glm::ivec2 GetWindowSize() const; + glm::ivec2 GetFramebufferSize() const; + bool ShouldClose() const; + GLFWwindow* GetHandle() const; + + GLFWkeyfun SetKeyCallback(GLFWkeyfun key_callback); + + bool TryMoveToMonitor(std::uint16_t monitor_number); + + private: + GLFWwindow* window_; +}; +} // namespace veng diff --git a/Client/include/precomp.h b/Client/include/precomp.h new file mode 100644 index 0000000..6104642 --- /dev/null +++ b/Client/include/precomp.h @@ -0,0 +1,16 @@ +#pragma once +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "spdlog/spdlog.h" +#include "utilities.h" + +#define MAX_BUFFERED_FRAMES (2) diff --git a/Client/include/stb/stb_image.h b/Client/include/stb/stb_image.h new file mode 100644 index 0000000..fca597a --- /dev/null +++ b/Client/include/stb/stb_image.h @@ -0,0 +1,8422 @@ +/* stb_image - v2.30 - public domain image loader - http://nothings.org/stb + no warranty implied; use at your own risk + + Do this: + #define STB_IMAGE_IMPLEMENTATION + before you include this file in *one* C or C++ file to create the +implementation. + + // i.e. it should look like this: + #include ... + #include ... + #include ... + #define STB_IMAGE_IMPLEMENTATION + #include "stb_image.h" + + You can #define STBI_ASSERT(x) before the #include to avoid using assert.h. + And #define STBI_MALLOC, STBI_REALLOC, and STBI_FREE to avoid using +malloc,realloc,free + + + QUICK NOTES: + Primarily of interest to game developers and other people who can + avoid problematic images and only need the trivial interface + + JPEG baseline & progressive (12 bpc/arithmetic not supported, same as +stock IJG lib) PNG 1/2/4/8/16-bit-per-channel + + TGA (not sure what subset, if a subset) + BMP non-1bpp, non-RLE + PSD (composited view only, no extra channels, 8/16 bit-per-channel) + + GIF (*comp always reports as 4-channel) + HDR (radiance rgbE format) + PIC (Softimage PIC) + PNM (PPM and PGM binary only) + + Animated GIF still needs a proper API, but here's one way to do it: + http://gist.github.com/urraka/685d9a6340b26b830d49 + + - decode from memory or through FILE (define STBI_NO_STDIO to remove code) + - decode from arbitrary I/O callbacks + - SIMD acceleration on x86/x64 (SSE2) and ARM (NEON) + + Full documentation under "DOCUMENTATION" below. + + +LICENSE + + See end of file for license information. + +RECENT REVISION HISTORY: + + 2.30 (2024-05-31) avoid erroneous gcc warning + 2.29 (2023-05-xx) optimizations + 2.28 (2023-01-29) many error fixes, security errors, just tons of stuff + 2.27 (2021-07-11) document stbi_info better, 16-bit PNM support, bug +fixes 2.26 (2020-07-13) many minor fixes 2.25 (2020-02-02) fix warnings 2.24 +(2020-02-02) fix warnings; thread-local failure_reason and flip_vertically 2.23 +(2019-08-11) fix clang static analysis warning 2.22 (2019-03-04) gif fixes, fix +warnings 2.21 (2019-02-25) fix typo in comment 2.20 (2019-02-07) support utf8 +filenames in Windows; fix warnings and platform ifdefs 2.19 (2018-02-11) fix +warning 2.18 (2018-01-30) fix warnings 2.17 (2018-01-29) bugfix, 1-bit BMP, +16-bitness query, fix warnings 2.16 (2017-07-23) all functions have 16-bit +variants; optimizations; bugfixes 2.15 (2017-03-18) fix png-1,2,4; all Imagenet +JPGs; no runtime SSE detection on GCC 2.14 (2017-03-03) remove deprecated +STBI_JPEG_OLD; fixes for Imagenet JPGs 2.13 (2016-12-04) experimental 16-bit +API, only for PNG so far; fixes 2.12 (2016-04-02) fix typo in 2.11 PSD fix that +caused crashes 2.11 (2016-04-02) 16-bit PNGS; enable SSE2 in non-gcc x64 + RGB-format JPEG; remove white matting in PSD; + allocate large structures on the stack; + correct channel count for PNG & BMP + 2.10 (2016-01-22) avoid warning introduced in 2.09 + 2.09 (2016-01-16) 16-bit TGA; comments in PNM files; STBI_REALLOC_SIZED + + See end of file for full revision history. + + + ============================ Contributors ========================= + + Image formats Extensions, features + Sean Barrett (jpeg, png, bmp) Jetro Lauha (stbi_info) + Nicolas Schulz (hdr, psd) Martin "SpartanJ" Golini (stbi_info) + Jonathan Dummer (tga) James "moose2000" Brown (iPhone PNG) + Jean-Marc Lienher (gif) Ben "Disch" Wenger (io callbacks) + Tom Seddon (pic) Omar Cornut (1/2/4-bit PNG) + Thatcher Ulrich (psd) Nicolas Guillemot (vertical flip) + Ken Miller (pgm, ppm) Richard Mitton (16-bit PSD) + github:urraka (animated gif) Junggon Kim (PNM comments) + Christopher Forseth (animated gif) Daniel Gibson (16-bit TGA) + socks-the-fox (16-bit PNG) + Jeremy Sawicki (handle all ImageNet +JPGs) Optimizations & bugfixes Mikhail Morozov (1-bit BMP) + Fabian "ryg" Giesen Anael Seghezzi (is-16-bit query) + Arseny Kapoulkine Simon Breuss (16-bit PNM) + John-Mark Allen + Carmelo J Fdez-Aguera + + Bug & warning fixes + Marc LeBlanc David Woo Guillaume George Martins +Mozeiko Christpher Lloyd Jerry Jansson Joseph Thomson Blazej +Dariusz Roszkowski Phil Jordan Dave Moore Roy +Eltham Hayaki Saito Nathan Reed Won Chun Luke Graham Johan +Duparc Nick Verigakis the Horde3D community Thomas Ruf Ronny +Chevalier github:rlyeh Janez Zemva John +Bartholomew Michal Cichon github:romigrou Jonathan Blow Ken +Hamada Tero Hanninen github:svdijk Eugene Golushkov Laurent +Gomila Cort Stratton github:snagar Aruelien Pocheville Sergio +Gonzalez Thibault Reuille github:Zelex Cass Everitt Ryamond +Barbiero github:grim210 Paul Du Bois Engin +Manap Aldo Culquicondor github:sammyhw Philipp Wiesemann Dale +Weiler Oriol Ferrer Mesia github:phprus Josh Tobin Neil +Bickford Matthew Gregan github:poppolopoppo Julian Raschke Gregory +Mullen Christian Floisand github:darealshinji Baldur Karlsson Kevin +Schmidt JR Smith github:Michaelangel007 Brad Weinberger Matvey +Cherevko github:mosra Luca Sas Alexander Veselov Zack +Middleton [reserved] Ryan C. Gordon [reserved] [reserved] DO NOT +ADD YOUR NAME HERE + + Jacko Dirks + + To add your name to the credits, pick a random blank space in the middle and +fill it. 80% of merge conflicts on stb PRs are due to people adding their name +at the end of the credits. +*/ + +#ifndef STBI_INCLUDE_STB_IMAGE_H +#define STBI_INCLUDE_STB_IMAGE_H + +// DOCUMENTATION +// +// Limitations: +// - no 12-bit-per-channel JPEG +// - no JPEGs with arithmetic coding +// - GIF always returns *comp=4 +// +// Basic usage (see HDR discussion below for HDR usage): +// int x,y,n; +// unsigned char *data = stbi_load(filename, &x, &y, &n, 0); +// // ... process data if not NULL ... +// // ... x = width, y = height, n = # 8-bit components per pixel ... +// // ... replace '0' with '1'..'4' to force that many components per pixel +// // ... but 'n' will always be the number that it would have been if you +// said 0 stbi_image_free(data); +// +// Standard parameters: +// int *x -- outputs image width in pixels +// int *y -- outputs image height in pixels +// int *channels_in_file -- outputs # of image components in image file +// int desired_channels -- if non-zero, # of image components requested in +// result +// +// The return value from an image loader is an 'unsigned char *' which points +// to the pixel data, or NULL on an allocation failure or if the image is +// corrupt or invalid. The pixel data consists of *y scanlines of *x pixels, +// with each pixel consisting of N interleaved 8-bit components; the first +// pixel pointed to is top-left-most in the image. There is no padding between +// image scanlines or between pixels, regardless of format. The number of +// components N is 'desired_channels' if desired_channels is non-zero, or +// *channels_in_file otherwise. If desired_channels is non-zero, +// *channels_in_file has the number of components that _would_ have been +// output otherwise. E.g. if you set desired_channels to 4, you will always +// get RGBA output, but you can check *channels_in_file to see if it's trivially +// opaque because e.g. there were only 3 channels in the source image. +// +// An output image with N components has the following components interleaved +// in this order in each pixel: +// +// N=#comp components +// 1 grey +// 2 grey, alpha +// 3 red, green, blue +// 4 red, green, blue, alpha +// +// If image loading fails for any reason, the return value will be NULL, +// and *x, *y, *channels_in_file will be unchanged. The function +// stbi_failure_reason() can be queried for an extremely brief, end-user +// unfriendly explanation of why the load failed. Define STBI_NO_FAILURE_STRINGS +// to avoid compiling these strings at all, and STBI_FAILURE_USERMSG to get +// slightly more user-friendly ones. +// +// Paletted PNG, BMP, GIF, and PIC images are automatically depalettized. +// +// To query the width, height and component count of an image without having to +// decode the full file, you can use the stbi_info family of functions: +// +// int x,y,n,ok; +// ok = stbi_info(filename, &x, &y, &n); +// // returns ok=1 and sets x, y, n if image is a supported format, +// // 0 otherwise. +// +// Note that stb_image pervasively uses ints in its public API for sizes, +// including sizes of memory buffers. This is now part of the API and thus +// hard to change without causing breakage. As a result, the various image +// loaders all have certain limits on image size; these differ somewhat +// by format but generally boil down to either just under 2GB or just under +// 1GB. When the decoded image would be larger than this, stb_image decoding +// will fail. +// +// Additionally, stb_image will reject image files that have any of their +// dimensions set to a larger value than the configurable STBI_MAX_DIMENSIONS, +// which defaults to 2**24 = 16777216 pixels. Due to the above memory limit, +// the only way to have an image with such dimensions load correctly +// is for it to have a rather extreme aspect ratio. Either way, the +// assumption here is that such larger images are likely to be malformed +// or malicious. If you do need to load an image with individual dimensions +// larger than that, and it still fits in the overall size limit, you can +// #define STBI_MAX_DIMENSIONS on your own to be something larger. +// +// =========================================================================== +// +// UNICODE: +// +// If compiling for Windows and you wish to use Unicode filenames, compile +// with +// #define STBI_WINDOWS_UTF8 +// and pass utf8-encoded filenames. Call stbi_convert_wchar_to_utf8 to convert +// Windows wchar_t filenames to utf8. +// +// =========================================================================== +// +// Philosophy +// +// stb libraries are designed with the following priorities: +// +// 1. easy to use +// 2. easy to maintain +// 3. good performance +// +// Sometimes I let "good performance" creep up in priority over "easy to +// maintain", and for best performance I may provide less-easy-to-use APIs that +// give higher performance, in addition to the easy-to-use ones. Nevertheless, +// it's important to keep in mind that from the standpoint of you, a client of +// this library, all you care about is #1 and #3, and stb libraries DO NOT +// emphasize #3 above all. +// +// Some secondary priorities arise directly from the first two, some of which +// provide more explicit reasons why performance can't be emphasized. +// +// - Portable ("ease of use") +// - Small source code footprint ("easy to maintain") +// - No dependencies ("ease of use") +// +// =========================================================================== +// +// I/O callbacks +// +// I/O callbacks allow you to read from arbitrary sources, like packaged +// files or some other source. Data read from callbacks are processed +// through a small internal buffer (currently 128 bytes) to try to reduce +// overhead. +// +// The three functions you must define are "read" (reads some bytes of data), +// "skip" (skips some bytes of data), "eof" (reports if the stream is at the +// end). +// +// =========================================================================== +// +// SIMD support +// +// The JPEG decoder will try to automatically use SIMD kernels on x86 when +// supported by the compiler. For ARM Neon support, you must explicitly +// request it. +// +// (The old do-it-yourself SIMD API is no longer supported in the current +// code.) +// +// On x86, SSE2 will automatically be used when available based on a run-time +// test; if not, the generic C versions are used as a fall-back. On ARM targets, +// the typical path is to have separate builds for NEON and non-NEON devices +// (at least this is true for iOS and Android). Therefore, the NEON support is +// toggled by a build flag: define STBI_NEON to get NEON loops. +// +// If for some reason you do not want to use any of SIMD code, or if +// you have issues compiling it, you can disable it entirely by +// defining STBI_NO_SIMD. +// +// =========================================================================== +// +// HDR image support (disable by defining STBI_NO_HDR) +// +// stb_image supports loading HDR images in general, and currently the Radiance +// .HDR file format specifically. You can still load any file through the +// existing interface; if you attempt to load an HDR file, it will be +// automatically remapped to LDR, assuming gamma 2.2 and an arbitrary scale +// factor defaulting to 1; both of these constants can be reconfigured through +// this interface: +// +// stbi_hdr_to_ldr_gamma(2.2f); +// stbi_hdr_to_ldr_scale(1.0f); +// +// (note, do not use _inverse_ constants; stbi_image will invert them +// appropriately). +// +// Additionally, there is a new, parallel interface for loading files as +// (linear) floats to preserve the full dynamic range: +// +// float *data = stbi_loadf(filename, &x, &y, &n, 0); +// +// If you load LDR images through this interface, those images will +// be promoted to floating point values, run through the inverse of +// constants corresponding to the above: +// +// stbi_ldr_to_hdr_scale(1.0f); +// stbi_ldr_to_hdr_gamma(2.2f); +// +// Finally, given a filename (or an open file or memory block--see header +// file for details) containing image data, you can query for the "most +// appropriate" interface to use (that is, whether the image is HDR or +// not), using: +// +// stbi_is_hdr(char *filename); +// +// =========================================================================== +// +// iPhone PNG support: +// +// We optionally support converting iPhone-formatted PNGs (which store +// premultiplied BGRA) back to RGB, even though they're internally encoded +// differently. To enable this conversion, call +// stbi_convert_iphone_png_to_rgb(1). +// +// Call stbi_set_unpremultiply_on_load(1) as well to force a divide per +// pixel to remove any premultiplied alpha *only* if the image file explicitly +// says there's premultiplied data (currently only happens in iPhone images, +// and only if iPhone convert-to-rgb processing is on). +// +// =========================================================================== +// +// ADDITIONAL CONFIGURATION +// +// - You can suppress implementation of any of the decoders to reduce +// your code footprint by #defining one or more of the following +// symbols before creating the implementation. +// +// STBI_NO_JPEG +// STBI_NO_PNG +// STBI_NO_BMP +// STBI_NO_PSD +// STBI_NO_TGA +// STBI_NO_GIF +// STBI_NO_HDR +// STBI_NO_PIC +// STBI_NO_PNM (.ppm and .pgm) +// +// - You can request *only* certain decoders and suppress all other ones +// (this will be more forward-compatible, as addition of new decoders +// doesn't require you to disable them explicitly): +// +// STBI_ONLY_JPEG +// STBI_ONLY_PNG +// STBI_ONLY_BMP +// STBI_ONLY_PSD +// STBI_ONLY_TGA +// STBI_ONLY_GIF +// STBI_ONLY_HDR +// STBI_ONLY_PIC +// STBI_ONLY_PNM (.ppm and .pgm) +// +// - If you use STBI_NO_PNG (or _ONLY_ without PNG), and you still +// want the zlib decoder to be available, #define STBI_SUPPORT_ZLIB +// +// - If you define STBI_MAX_DIMENSIONS, stb_image will reject images greater +// than that size (in either width or height) without further processing. +// This is to let programs in the wild set an upper bound to prevent +// denial-of-service attacks on untrusted data, as one could generate a +// valid image of gigantic dimensions and force stb_image to allocate a +// huge block of memory and spend disproportionate time decoding it. By +// default this is set to (1 << 24), which is 16777216, but that's still +// very big. + +#ifndef STBI_NO_STDIO +#include +#endif // STBI_NO_STDIO + +#define STBI_VERSION 1 + +enum { + STBI_default = 0, // only used for desired_channels + + STBI_grey = 1, + STBI_grey_alpha = 2, + STBI_rgb = 3, + STBI_rgb_alpha = 4 +}; + +#include +typedef unsigned char stbi_uc; +typedef unsigned short stbi_us; + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef STBIDEF +#ifdef STB_IMAGE_STATIC +#define STBIDEF static +#else +#define STBIDEF extern +#endif +#endif + +////////////////////////////////////////////////////////////////////////////// +// +// PRIMARY API - works on images of any type +// + +// +// load image by filename, open file, or memory buffer +// + +typedef struct { + int (*read)(void *user, char *data, + int size); // fill 'data' with 'size' bytes. return number of + // bytes actually read + void (*skip)(void *user, int n); // skip the next 'n' bytes, or 'unget' the + // last -n bytes if negative + int (*eof)(void *user); // returns nonzero if we are at end of file/data +} stbi_io_callbacks; + +//////////////////////////////////// +// +// 8-bits-per-channel interface +// + +STBIDEF stbi_uc *stbi_load_from_memory(stbi_uc const *buffer, int len, int *x, + int *y, int *channels_in_file, + int desired_channels); +STBIDEF stbi_uc *stbi_load_from_callbacks(stbi_io_callbacks const *clbk, + void *user, int *x, int *y, + int *channels_in_file, + int desired_channels); + +#ifndef STBI_NO_STDIO +STBIDEF stbi_uc *stbi_load(char const *filename, int *x, int *y, + int *channels_in_file, int desired_channels); +STBIDEF stbi_uc *stbi_load_from_file(FILE *f, int *x, int *y, + int *channels_in_file, + int desired_channels); +// for stbi_load_from_file, file pointer is left pointing immediately after +// image +#endif + +#ifndef STBI_NO_GIF +STBIDEF stbi_uc *stbi_load_gif_from_memory(stbi_uc const *buffer, int len, + int **delays, int *x, int *y, int *z, + int *comp, int req_comp); +#endif + +#ifdef STBI_WINDOWS_UTF8 +STBIDEF int stbi_convert_wchar_to_utf8(char *buffer, size_t bufferlen, + const wchar_t *input); +#endif + +//////////////////////////////////// +// +// 16-bits-per-channel interface +// + +STBIDEF stbi_us *stbi_load_16_from_memory(stbi_uc const *buffer, int len, + int *x, int *y, int *channels_in_file, + int desired_channels); +STBIDEF stbi_us *stbi_load_16_from_callbacks(stbi_io_callbacks const *clbk, + void *user, int *x, int *y, + int *channels_in_file, + int desired_channels); + +#ifndef STBI_NO_STDIO +STBIDEF stbi_us *stbi_load_16(char const *filename, int *x, int *y, + int *channels_in_file, int desired_channels); +STBIDEF stbi_us *stbi_load_from_file_16(FILE *f, int *x, int *y, + int *channels_in_file, + int desired_channels); +#endif + +//////////////////////////////////// +// +// float-per-channel interface +// +#ifndef STBI_NO_LINEAR +STBIDEF float *stbi_loadf_from_memory(stbi_uc const *buffer, int len, int *x, + int *y, int *channels_in_file, + int desired_channels); +STBIDEF float *stbi_loadf_from_callbacks(stbi_io_callbacks const *clbk, + void *user, int *x, int *y, + int *channels_in_file, + int desired_channels); + +#ifndef STBI_NO_STDIO +STBIDEF float *stbi_loadf(char const *filename, int *x, int *y, + int *channels_in_file, int desired_channels); +STBIDEF float *stbi_loadf_from_file(FILE *f, int *x, int *y, + int *channels_in_file, + int desired_channels); +#endif +#endif + +#ifndef STBI_NO_HDR +STBIDEF void stbi_hdr_to_ldr_gamma(float gamma); +STBIDEF void stbi_hdr_to_ldr_scale(float scale); +#endif // STBI_NO_HDR + +#ifndef STBI_NO_LINEAR +STBIDEF void stbi_ldr_to_hdr_gamma(float gamma); +STBIDEF void stbi_ldr_to_hdr_scale(float scale); +#endif // STBI_NO_LINEAR + +// stbi_is_hdr is always defined, but always returns false if STBI_NO_HDR +STBIDEF int stbi_is_hdr_from_callbacks(stbi_io_callbacks const *clbk, + void *user); +STBIDEF int stbi_is_hdr_from_memory(stbi_uc const *buffer, int len); +#ifndef STBI_NO_STDIO +STBIDEF int stbi_is_hdr(char const *filename); +STBIDEF int stbi_is_hdr_from_file(FILE *f); +#endif // STBI_NO_STDIO + +// get a VERY brief reason for failure +// on most compilers (and ALL modern mainstream compilers) this is threadsafe +STBIDEF const char *stbi_failure_reason(void); + +// free the loaded image -- this is just free() +STBIDEF void stbi_image_free(void *retval_from_stbi_load); + +// get image dimensions & components without fully decoding +STBIDEF int stbi_info_from_memory(stbi_uc const *buffer, int len, int *x, + int *y, int *comp); +STBIDEF int stbi_info_from_callbacks(stbi_io_callbacks const *clbk, void *user, + int *x, int *y, int *comp); +STBIDEF int stbi_is_16_bit_from_memory(stbi_uc const *buffer, int len); +STBIDEF int stbi_is_16_bit_from_callbacks(stbi_io_callbacks const *clbk, + void *user); + +#ifndef STBI_NO_STDIO +STBIDEF int stbi_info(char const *filename, int *x, int *y, int *comp); +STBIDEF int stbi_info_from_file(FILE *f, int *x, int *y, int *comp); +STBIDEF int stbi_is_16_bit(char const *filename); +STBIDEF int stbi_is_16_bit_from_file(FILE *f); +#endif + +// for image formats that explicitly notate that they have premultiplied alpha, +// we just return the colors as stored in the file. set this flag to force +// unpremultiplication. results are undefined if the unpremultiply overflow. +STBIDEF void stbi_set_unpremultiply_on_load( + int flag_true_if_should_unpremultiply); + +// indicate whether we should process iphone images back to canonical format, +// or just pass them through "as-is" +STBIDEF void stbi_convert_iphone_png_to_rgb(int flag_true_if_should_convert); + +// flip the image vertically, so the first pixel in the output array is the +// bottom left +STBIDEF void stbi_set_flip_vertically_on_load(int flag_true_if_should_flip); + +// as above, but only applies to images loaded on the thread that calls the +// function this function is only available if your compiler supports +// thread-local variables; calling it will fail to link if your compiler doesn't +STBIDEF void stbi_set_unpremultiply_on_load_thread( + int flag_true_if_should_unpremultiply); +STBIDEF void stbi_convert_iphone_png_to_rgb_thread( + int flag_true_if_should_convert); +STBIDEF void stbi_set_flip_vertically_on_load_thread( + int flag_true_if_should_flip); + +// ZLIB client - used by PNG, available for other purposes + +STBIDEF char *stbi_zlib_decode_malloc_guesssize(const char *buffer, int len, + int initial_size, int *outlen); +STBIDEF char *stbi_zlib_decode_malloc_guesssize_headerflag(const char *buffer, + int len, + int initial_size, + int *outlen, + int parse_header); +STBIDEF char *stbi_zlib_decode_malloc(const char *buffer, int len, int *outlen); +STBIDEF int stbi_zlib_decode_buffer(char *obuffer, int olen, + const char *ibuffer, int ilen); + +STBIDEF char *stbi_zlib_decode_noheader_malloc(const char *buffer, int len, + int *outlen); +STBIDEF int stbi_zlib_decode_noheader_buffer(char *obuffer, int olen, + const char *ibuffer, int ilen); + +#ifdef __cplusplus +} +#endif + +// +// +//// end header file ///////////////////////////////////////////////////// +#endif // STBI_INCLUDE_STB_IMAGE_H + +#ifdef STB_IMAGE_IMPLEMENTATION + +#if defined(STBI_ONLY_JPEG) || defined(STBI_ONLY_PNG) || \ + defined(STBI_ONLY_BMP) || defined(STBI_ONLY_TGA) || \ + defined(STBI_ONLY_GIF) || defined(STBI_ONLY_PSD) || \ + defined(STBI_ONLY_HDR) || defined(STBI_ONLY_PIC) || \ + defined(STBI_ONLY_PNM) || defined(STBI_ONLY_ZLIB) +#ifndef STBI_ONLY_JPEG +#define STBI_NO_JPEG +#endif +#ifndef STBI_ONLY_PNG +#define STBI_NO_PNG +#endif +#ifndef STBI_ONLY_BMP +#define STBI_NO_BMP +#endif +#ifndef STBI_ONLY_PSD +#define STBI_NO_PSD +#endif +#ifndef STBI_ONLY_TGA +#define STBI_NO_TGA +#endif +#ifndef STBI_ONLY_GIF +#define STBI_NO_GIF +#endif +#ifndef STBI_ONLY_HDR +#define STBI_NO_HDR +#endif +#ifndef STBI_ONLY_PIC +#define STBI_NO_PIC +#endif +#ifndef STBI_ONLY_PNM +#define STBI_NO_PNM +#endif +#endif + +#if defined(STBI_NO_PNG) && !defined(STBI_SUPPORT_ZLIB) && \ + !defined(STBI_NO_ZLIB) +#define STBI_NO_ZLIB +#endif + +#include +#include +#include // ptrdiff_t on osx +#include +#include + +#if !defined(STBI_NO_LINEAR) || !defined(STBI_NO_HDR) +#include // ldexp, pow +#endif + +#ifndef STBI_NO_STDIO +#include +#endif + +#ifndef STBI_ASSERT +#include +#define STBI_ASSERT(x) assert(x) +#endif + +#ifdef __cplusplus +#define STBI_EXTERN extern "C" +#else +#define STBI_EXTERN extern +#endif + +#ifndef _MSC_VER +#ifdef __cplusplus +#define stbi_inline inline +#else +#define stbi_inline +#endif +#else +#define stbi_inline __forceinline +#endif + +#ifndef STBI_NO_THREAD_LOCALS +#if defined(__cplusplus) && __cplusplus >= 201103L +#define STBI_THREAD_LOCAL thread_local +#elif defined(__GNUC__) && __GNUC__ < 5 +#define STBI_THREAD_LOCAL __thread +#elif defined(_MSC_VER) +#define STBI_THREAD_LOCAL __declspec(thread) +#elif defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L && \ + !defined(__STDC_NO_THREADS__) +#define STBI_THREAD_LOCAL _Thread_local +#endif + +#ifndef STBI_THREAD_LOCAL +#if defined(__GNUC__) +#define STBI_THREAD_LOCAL __thread +#endif +#endif +#endif + +#if defined(_MSC_VER) || defined(__SYMBIAN32__) +typedef unsigned short stbi__uint16; +typedef signed short stbi__int16; +typedef unsigned int stbi__uint32; +typedef signed int stbi__int32; +#else +#include +typedef uint16_t stbi__uint16; +typedef int16_t stbi__int16; +typedef uint32_t stbi__uint32; +typedef int32_t stbi__int32; +#endif + +// should produce compiler error if size is wrong +typedef unsigned char validate_uint32[sizeof(stbi__uint32) == 4 ? 1 : -1]; + +#ifdef _MSC_VER +#define STBI_NOTUSED(v) (void)(v) +#else +#define STBI_NOTUSED(v) (void)sizeof(v) +#endif + +#ifdef _MSC_VER +#define STBI_HAS_LROTL +#endif + +#ifdef STBI_HAS_LROTL +#define stbi_lrot(x, y) _lrotl(x, y) +#else +#define stbi_lrot(x, y) (((x) << (y)) | ((x) >> (-(y) & 31))) +#endif + +#if defined(STBI_MALLOC) && defined(STBI_FREE) && \ + (defined(STBI_REALLOC) || defined(STBI_REALLOC_SIZED)) +// ok +#elif !defined(STBI_MALLOC) && !defined(STBI_FREE) && \ + !defined(STBI_REALLOC) && !defined(STBI_REALLOC_SIZED) +// ok +#else +#error \ + "Must define all or none of STBI_MALLOC, STBI_FREE, and STBI_REALLOC (or STBI_REALLOC_SIZED)." +#endif + +#ifndef STBI_MALLOC +#define STBI_MALLOC(sz) malloc(sz) +#define STBI_REALLOC(p, newsz) realloc(p, newsz) +#define STBI_FREE(p) free(p) +#endif + +#ifndef STBI_REALLOC_SIZED +#define STBI_REALLOC_SIZED(p, oldsz, newsz) STBI_REALLOC(p, newsz) +#endif + +// x86/x64 detection +#if defined(__x86_64__) || defined(_M_X64) +#define STBI__X64_TARGET +#elif defined(__i386) || defined(_M_IX86) +#define STBI__X86_TARGET +#endif + +#if defined(__GNUC__) && defined(STBI__X86_TARGET) && !defined(__SSE2__) && \ + !defined(STBI_NO_SIMD) +// gcc doesn't support sse2 intrinsics unless you compile with -msse2, +// which in turn means it gets to use SSE2 everywhere. This is unfortunate, +// but previous attempts to provide the SSE2 functions with runtime +// detection caused numerous issues. The way architecture extensions are +// exposed in GCC/Clang is, sadly, not really suited for one-file libs. +// New behavior: if compiled with -msse2, we use SSE2 without any +// detection; if not, we don't use it at all. +#define STBI_NO_SIMD +#endif + +#if defined(__MINGW32__) && defined(STBI__X86_TARGET) && \ + !defined(STBI_MINGW_ENABLE_SSE2) && !defined(STBI_NO_SIMD) +// Note that __MINGW32__ doesn't actually mean 32-bit, so we have to avoid +// STBI__X64_TARGET +// +// 32-bit MinGW wants ESP to be 16-byte aligned, but this is not in the +// Windows ABI and VC++ as well as Windows DLLs don't maintain that invariant. +// As a result, enabling SSE2 on 32-bit MinGW is dangerous when not +// simultaneously enabling "-mstackrealign". +// +// See https://github.com/nothings/stb/issues/81 for more information. +// +// So default to no SSE2 on 32-bit MinGW. If you've read this far and added +// -mstackrealign to your build settings, feel free to #define +// STBI_MINGW_ENABLE_SSE2. +#define STBI_NO_SIMD +#endif + +#if !defined(STBI_NO_SIMD) && \ + (defined(STBI__X86_TARGET) || defined(STBI__X64_TARGET)) +#define STBI_SSE2 +#include + +#ifdef _MSC_VER + +#if _MSC_VER >= 1400 // not VC6 +#include // __cpuid +static int stbi__cpuid3(void) { + int info[4]; + __cpuid(info, 1); + return info[3]; +} +#else +static int stbi__cpuid3(void) { + int res; + __asm { + mov eax,1 + cpuid + mov res,edx + } + return res; +} +#endif + +#define STBI_SIMD_ALIGN(type, name) __declspec(align(16)) type name + +#if !defined(STBI_NO_JPEG) && defined(STBI_SSE2) +static int stbi__sse2_available(void) { + int info3 = stbi__cpuid3(); + return ((info3 >> 26) & 1) != 0; +} +#endif + +#else // assume GCC-style if not VC++ +#define STBI_SIMD_ALIGN(type, name) type name __attribute__((aligned(16))) + +#if !defined(STBI_NO_JPEG) && defined(STBI_SSE2) +static int stbi__sse2_available(void) { + // If we're even attempting to compile this on GCC/Clang, that means + // -msse2 is on, which means the compiler is allowed to use SSE2 + // instructions at will, and so are we. + return 1; +} +#endif + +#endif +#endif + +// ARM NEON +#if defined(STBI_NO_SIMD) && defined(STBI_NEON) +#undef STBI_NEON +#endif + +#ifdef STBI_NEON +#include +#ifdef _MSC_VER +#define STBI_SIMD_ALIGN(type, name) __declspec(align(16)) type name +#else +#define STBI_SIMD_ALIGN(type, name) type name __attribute__((aligned(16))) +#endif +#endif + +#ifndef STBI_SIMD_ALIGN +#define STBI_SIMD_ALIGN(type, name) type name +#endif + +#ifndef STBI_MAX_DIMENSIONS +#define STBI_MAX_DIMENSIONS (1 << 24) +#endif + +/////////////////////////////////////////////// +// +// stbi__context struct and start_xxx functions + +// stbi__context structure is our basic context used by all images, so it +// contains all the IO context, plus some basic image information +typedef struct { + stbi__uint32 img_x, img_y; + int img_n, img_out_n; + + stbi_io_callbacks io; + void *io_user_data; + + int read_from_callbacks; + int buflen; + stbi_uc buffer_start[128]; + int callback_already_read; + + stbi_uc *img_buffer, *img_buffer_end; + stbi_uc *img_buffer_original, *img_buffer_original_end; +} stbi__context; + +static void stbi__refill_buffer(stbi__context *s); + +// initialize a memory-decode context +static void stbi__start_mem(stbi__context *s, stbi_uc const *buffer, int len) { + s->io.read = NULL; + s->read_from_callbacks = 0; + s->callback_already_read = 0; + s->img_buffer = s->img_buffer_original = (stbi_uc *)buffer; + s->img_buffer_end = s->img_buffer_original_end = (stbi_uc *)buffer + len; +} + +// initialize a callback-based context +static void stbi__start_callbacks(stbi__context *s, stbi_io_callbacks *c, + void *user) { + s->io = *c; + s->io_user_data = user; + s->buflen = sizeof(s->buffer_start); + s->read_from_callbacks = 1; + s->callback_already_read = 0; + s->img_buffer = s->img_buffer_original = s->buffer_start; + stbi__refill_buffer(s); + s->img_buffer_original_end = s->img_buffer_end; +} + +#ifndef STBI_NO_STDIO + +static int stbi__stdio_read(void *user, char *data, int size) { + return (int)fread(data, 1, size, (FILE *)user); +} + +static void stbi__stdio_skip(void *user, int n) { + int ch; + fseek((FILE *)user, n, SEEK_CUR); + ch = fgetc((FILE *)user); /* have to read a byte to reset feof()'s flag */ + if (ch != EOF) { + ungetc(ch, (FILE *)user); /* push byte back onto stream if valid. */ + } +} + +static int stbi__stdio_eof(void *user) { + return feof((FILE *)user) || ferror((FILE *)user); +} + +static stbi_io_callbacks stbi__stdio_callbacks = { + stbi__stdio_read, + stbi__stdio_skip, + stbi__stdio_eof, +}; + +static void stbi__start_file(stbi__context *s, FILE *f) { + stbi__start_callbacks(s, &stbi__stdio_callbacks, (void *)f); +} + +// static void stop_file(stbi__context *s) { } + +#endif // !STBI_NO_STDIO + +static void stbi__rewind(stbi__context *s) { + // conceptually rewind SHOULD rewind to the beginning of the stream, + // but we just rewind to the beginning of the initial buffer, because + // we only use it after doing 'test', which only ever looks at at most 92 + // bytes + s->img_buffer = s->img_buffer_original; + s->img_buffer_end = s->img_buffer_original_end; +} + +enum { STBI_ORDER_RGB, STBI_ORDER_BGR }; + +typedef struct { + int bits_per_channel; + int num_channels; + int channel_order; +} stbi__result_info; + +#ifndef STBI_NO_JPEG +static int stbi__jpeg_test(stbi__context *s); +static void *stbi__jpeg_load(stbi__context *s, int *x, int *y, int *comp, + int req_comp, stbi__result_info *ri); +static int stbi__jpeg_info(stbi__context *s, int *x, int *y, int *comp); +#endif + +#ifndef STBI_NO_PNG +static int stbi__png_test(stbi__context *s); +static void *stbi__png_load(stbi__context *s, int *x, int *y, int *comp, + int req_comp, stbi__result_info *ri); +static int stbi__png_info(stbi__context *s, int *x, int *y, int *comp); +static int stbi__png_is16(stbi__context *s); +#endif + +#ifndef STBI_NO_BMP +static int stbi__bmp_test(stbi__context *s); +static void *stbi__bmp_load(stbi__context *s, int *x, int *y, int *comp, + int req_comp, stbi__result_info *ri); +static int stbi__bmp_info(stbi__context *s, int *x, int *y, int *comp); +#endif + +#ifndef STBI_NO_TGA +static int stbi__tga_test(stbi__context *s); +static void *stbi__tga_load(stbi__context *s, int *x, int *y, int *comp, + int req_comp, stbi__result_info *ri); +static int stbi__tga_info(stbi__context *s, int *x, int *y, int *comp); +#endif + +#ifndef STBI_NO_PSD +static int stbi__psd_test(stbi__context *s); +static void *stbi__psd_load(stbi__context *s, int *x, int *y, int *comp, + int req_comp, stbi__result_info *ri, int bpc); +static int stbi__psd_info(stbi__context *s, int *x, int *y, int *comp); +static int stbi__psd_is16(stbi__context *s); +#endif + +#ifndef STBI_NO_HDR +static int stbi__hdr_test(stbi__context *s); +static float *stbi__hdr_load(stbi__context *s, int *x, int *y, int *comp, + int req_comp, stbi__result_info *ri); +static int stbi__hdr_info(stbi__context *s, int *x, int *y, int *comp); +#endif + +#ifndef STBI_NO_PIC +static int stbi__pic_test(stbi__context *s); +static void *stbi__pic_load(stbi__context *s, int *x, int *y, int *comp, + int req_comp, stbi__result_info *ri); +static int stbi__pic_info(stbi__context *s, int *x, int *y, int *comp); +#endif + +#ifndef STBI_NO_GIF +static int stbi__gif_test(stbi__context *s); +static void *stbi__gif_load(stbi__context *s, int *x, int *y, int *comp, + int req_comp, stbi__result_info *ri); +static void *stbi__load_gif_main(stbi__context *s, int **delays, int *x, int *y, + int *z, int *comp, int req_comp); +static int stbi__gif_info(stbi__context *s, int *x, int *y, int *comp); +#endif + +#ifndef STBI_NO_PNM +static int stbi__pnm_test(stbi__context *s); +static void *stbi__pnm_load(stbi__context *s, int *x, int *y, int *comp, + int req_comp, stbi__result_info *ri); +static int stbi__pnm_info(stbi__context *s, int *x, int *y, int *comp); +static int stbi__pnm_is16(stbi__context *s); +#endif + +static +#ifdef STBI_THREAD_LOCAL + STBI_THREAD_LOCAL +#endif + const char *stbi__g_failure_reason; + +STBIDEF const char *stbi_failure_reason(void) { return stbi__g_failure_reason; } + +#ifndef STBI_NO_FAILURE_STRINGS +static int stbi__err(const char *str) { + stbi__g_failure_reason = str; + return 0; +} +#endif + +static void *stbi__malloc(size_t size) { return STBI_MALLOC(size); } + +// stb_image uses ints pervasively, including for offset calculations. +// therefore the largest decoded image size we can support with the +// current code, even on 64-bit targets, is INT_MAX. this is not a +// significant limitation for the intended use case. +// +// we do, however, need to make sure our size calculations don't +// overflow. hence a few helper functions for size calculations that +// multiply integers together, making sure that they're non-negative +// and no overflow occurs. + +// return 1 if the sum is valid, 0 on overflow. +// negative terms are considered invalid. +static int stbi__addsizes_valid(int a, int b) { + if (b < 0) return 0; + // now 0 <= b <= INT_MAX, hence also + // 0 <= INT_MAX - b <= INTMAX. + // And "a + b <= INT_MAX" (which might overflow) is the + // same as a <= INT_MAX - b (no overflow) + return a <= INT_MAX - b; +} + +// returns 1 if the product is valid, 0 on overflow. +// negative factors are considered invalid. +static int stbi__mul2sizes_valid(int a, int b) { + if (a < 0 || b < 0) return 0; + if (b == 0) return 1; // mul-by-0 is always safe + // portable way to check for no overflows in a*b + return a <= INT_MAX / b; +} + +#if !defined(STBI_NO_JPEG) || !defined(STBI_NO_PNG) || \ + !defined(STBI_NO_TGA) || !defined(STBI_NO_HDR) +// returns 1 if "a*b + add" has no negative terms/factors and doesn't overflow +static int stbi__mad2sizes_valid(int a, int b, int add) { + return stbi__mul2sizes_valid(a, b) && stbi__addsizes_valid(a * b, add); +} +#endif + +// returns 1 if "a*b*c + add" has no negative terms/factors and doesn't overflow +static int stbi__mad3sizes_valid(int a, int b, int c, int add) { + return stbi__mul2sizes_valid(a, b) && stbi__mul2sizes_valid(a * b, c) && + stbi__addsizes_valid(a * b * c, add); +} + +// returns 1 if "a*b*c*d + add" has no negative terms/factors and doesn't +// overflow +#if !defined(STBI_NO_LINEAR) || !defined(STBI_NO_HDR) || !defined(STBI_NO_PNM) +static int stbi__mad4sizes_valid(int a, int b, int c, int d, int add) { + return stbi__mul2sizes_valid(a, b) && stbi__mul2sizes_valid(a * b, c) && + stbi__mul2sizes_valid(a * b * c, d) && + stbi__addsizes_valid(a * b * c * d, add); +} +#endif + +#if !defined(STBI_NO_JPEG) || !defined(STBI_NO_PNG) || \ + !defined(STBI_NO_TGA) || !defined(STBI_NO_HDR) +// mallocs with size overflow checking +static void *stbi__malloc_mad2(int a, int b, int add) { + if (!stbi__mad2sizes_valid(a, b, add)) return NULL; + return stbi__malloc(a * b + add); +} +#endif + +static void *stbi__malloc_mad3(int a, int b, int c, int add) { + if (!stbi__mad3sizes_valid(a, b, c, add)) return NULL; + return stbi__malloc(a * b * c + add); +} + +#if !defined(STBI_NO_LINEAR) || !defined(STBI_NO_HDR) || !defined(STBI_NO_PNM) +static void *stbi__malloc_mad4(int a, int b, int c, int d, int add) { + if (!stbi__mad4sizes_valid(a, b, c, d, add)) return NULL; + return stbi__malloc(a * b * c * d + add); +} +#endif + +// returns 1 if the sum of two signed ints is valid (between -2^31 and 2^31-1 +// inclusive), 0 on overflow. +static int stbi__addints_valid(int a, int b) { + if ((a >= 0) != (b >= 0)) + return 1; // a and b have different signs, so no overflow + if (a < 0 && b < 0) + return a >= INT_MIN - b; // same as a + b >= INT_MIN; INT_MIN - b cannot + // overflow since b < 0. + return a <= INT_MAX - b; +} + +// returns 1 if the product of two ints fits in a signed short, 0 on overflow. +static int stbi__mul2shorts_valid(int a, int b) { + if (b == 0 || b == -1) + return 1; // multiplication by 0 is always 0; check for -1 so SHRT_MIN/b + // doesn't overflow + if ((a >= 0) == (b >= 0)) + return a <= + SHRT_MAX / b; // product is positive, so similar to mul2sizes_valid + if (b < 0) return a <= SHRT_MIN / b; // same as a * b >= SHRT_MIN + return a >= SHRT_MIN / b; +} + +// stbi__err - error +// stbi__errpf - error returning pointer to float +// stbi__errpuc - error returning pointer to unsigned char + +#ifdef STBI_NO_FAILURE_STRINGS +#define stbi__err(x, y) 0 +#elif defined(STBI_FAILURE_USERMSG) +#define stbi__err(x, y) stbi__err(y) +#else +#define stbi__err(x, y) stbi__err(x) +#endif + +#define stbi__errpf(x, y) ((float *)(size_t)(stbi__err(x, y) ? NULL : NULL)) +#define stbi__errpuc(x, y) \ + ((unsigned char *)(size_t)(stbi__err(x, y) ? NULL : NULL)) + +STBIDEF void stbi_image_free(void *retval_from_stbi_load) { + STBI_FREE(retval_from_stbi_load); +} + +#ifndef STBI_NO_LINEAR +static float *stbi__ldr_to_hdr(stbi_uc *data, int x, int y, int comp); +#endif + +#ifndef STBI_NO_HDR +static stbi_uc *stbi__hdr_to_ldr(float *data, int x, int y, int comp); +#endif + +static int stbi__vertically_flip_on_load_global = 0; + +STBIDEF void stbi_set_flip_vertically_on_load(int flag_true_if_should_flip) { + stbi__vertically_flip_on_load_global = flag_true_if_should_flip; +} + +#ifndef STBI_THREAD_LOCAL +#define stbi__vertically_flip_on_load stbi__vertically_flip_on_load_global +#else +static STBI_THREAD_LOCAL int stbi__vertically_flip_on_load_local, + stbi__vertically_flip_on_load_set; + +STBIDEF void stbi_set_flip_vertically_on_load_thread( + int flag_true_if_should_flip) { + stbi__vertically_flip_on_load_local = flag_true_if_should_flip; + stbi__vertically_flip_on_load_set = 1; +} + +#define stbi__vertically_flip_on_load \ + (stbi__vertically_flip_on_load_set ? stbi__vertically_flip_on_load_local \ + : stbi__vertically_flip_on_load_global) +#endif // STBI_THREAD_LOCAL + +static void *stbi__load_main(stbi__context *s, int *x, int *y, int *comp, + int req_comp, stbi__result_info *ri, int bpc) { + memset(ri, 0, + sizeof(*ri)); // make sure it's initialized if we add new fields + ri->bits_per_channel = + 8; // default is 8 so most paths don't have to be changed + ri->channel_order = + STBI_ORDER_RGB; // all current input & output are this, but this is here + // so we can add BGR order + ri->num_channels = 0; + +// test the formats with a very explicit header first (at least a FOURCC +// or distinctive magic number first) +#ifndef STBI_NO_PNG + if (stbi__png_test(s)) return stbi__png_load(s, x, y, comp, req_comp, ri); +#endif +#ifndef STBI_NO_BMP + if (stbi__bmp_test(s)) return stbi__bmp_load(s, x, y, comp, req_comp, ri); +#endif +#ifndef STBI_NO_GIF + if (stbi__gif_test(s)) return stbi__gif_load(s, x, y, comp, req_comp, ri); +#endif +#ifndef STBI_NO_PSD + if (stbi__psd_test(s)) + return stbi__psd_load(s, x, y, comp, req_comp, ri, bpc); +#else + STBI_NOTUSED(bpc); +#endif +#ifndef STBI_NO_PIC + if (stbi__pic_test(s)) return stbi__pic_load(s, x, y, comp, req_comp, ri); +#endif + +// then the formats that can end up attempting to load with just 1 or 2 +// bytes matching expectations; these are prone to false positives, so +// try them later +#ifndef STBI_NO_JPEG + if (stbi__jpeg_test(s)) return stbi__jpeg_load(s, x, y, comp, req_comp, ri); +#endif +#ifndef STBI_NO_PNM + if (stbi__pnm_test(s)) return stbi__pnm_load(s, x, y, comp, req_comp, ri); +#endif + +#ifndef STBI_NO_HDR + if (stbi__hdr_test(s)) { + float *hdr = stbi__hdr_load(s, x, y, comp, req_comp, ri); + return stbi__hdr_to_ldr(hdr, *x, *y, req_comp ? req_comp : *comp); + } +#endif + +#ifndef STBI_NO_TGA + // test tga last because it's a crappy test! + if (stbi__tga_test(s)) return stbi__tga_load(s, x, y, comp, req_comp, ri); +#endif + + return stbi__errpuc("unknown image type", + "Image not of any known type, or corrupt"); +} + +static stbi_uc *stbi__convert_16_to_8(stbi__uint16 *orig, int w, int h, + int channels) { + int i; + int img_len = w * h * channels; + stbi_uc *reduced; + + reduced = (stbi_uc *)stbi__malloc(img_len); + if (reduced == NULL) return stbi__errpuc("outofmem", "Out of memory"); + + for (i = 0; i < img_len; ++i) + reduced[i] = (stbi_uc)((orig[i] >> 8) & + 0xFF); // top half of each byte is sufficient approx + // of 16->8 bit scaling + + STBI_FREE(orig); + return reduced; +} + +static stbi__uint16 *stbi__convert_8_to_16(stbi_uc *orig, int w, int h, + int channels) { + int i; + int img_len = w * h * channels; + stbi__uint16 *enlarged; + + enlarged = (stbi__uint16 *)stbi__malloc(img_len * 2); + if (enlarged == NULL) + return (stbi__uint16 *)stbi__errpuc("outofmem", "Out of memory"); + + for (i = 0; i < img_len; ++i) + enlarged[i] = (stbi__uint16)((orig[i] << 8) + + orig[i]); // replicate to high and low byte, + // maps 0->0, 255->0xffff + + STBI_FREE(orig); + return enlarged; +} + +static void stbi__vertical_flip(void *image, int w, int h, + int bytes_per_pixel) { + int row; + size_t bytes_per_row = (size_t)w * bytes_per_pixel; + stbi_uc temp[2048]; + stbi_uc *bytes = (stbi_uc *)image; + + for (row = 0; row < (h >> 1); row++) { + stbi_uc *row0 = bytes + row * bytes_per_row; + stbi_uc *row1 = bytes + (h - row - 1) * bytes_per_row; + // swap row0 with row1 + size_t bytes_left = bytes_per_row; + while (bytes_left) { + size_t bytes_copy = + (bytes_left < sizeof(temp)) ? bytes_left : sizeof(temp); + memcpy(temp, row0, bytes_copy); + memcpy(row0, row1, bytes_copy); + memcpy(row1, temp, bytes_copy); + row0 += bytes_copy; + row1 += bytes_copy; + bytes_left -= bytes_copy; + } + } +} + +#ifndef STBI_NO_GIF +static void stbi__vertical_flip_slices(void *image, int w, int h, int z, + int bytes_per_pixel) { + int slice; + int slice_size = w * h * bytes_per_pixel; + + stbi_uc *bytes = (stbi_uc *)image; + for (slice = 0; slice < z; ++slice) { + stbi__vertical_flip(bytes, w, h, bytes_per_pixel); + bytes += slice_size; + } +} +#endif + +static unsigned char *stbi__load_and_postprocess_8bit(stbi__context *s, int *x, + int *y, int *comp, + int req_comp) { + stbi__result_info ri; + void *result = stbi__load_main(s, x, y, comp, req_comp, &ri, 8); + + if (result == NULL) return NULL; + + // it is the responsibility of the loaders to make sure we get either 8 or 16 + // bit. + STBI_ASSERT(ri.bits_per_channel == 8 || ri.bits_per_channel == 16); + + if (ri.bits_per_channel != 8) { + result = stbi__convert_16_to_8((stbi__uint16 *)result, *x, *y, + req_comp == 0 ? *comp : req_comp); + ri.bits_per_channel = 8; + } + + // @TODO: move stbi__convert_format to here + + if (stbi__vertically_flip_on_load) { + int channels = req_comp ? req_comp : *comp; + stbi__vertical_flip(result, *x, *y, channels * sizeof(stbi_uc)); + } + + return (unsigned char *)result; +} + +static stbi__uint16 *stbi__load_and_postprocess_16bit(stbi__context *s, int *x, + int *y, int *comp, + int req_comp) { + stbi__result_info ri; + void *result = stbi__load_main(s, x, y, comp, req_comp, &ri, 16); + + if (result == NULL) return NULL; + + // it is the responsibility of the loaders to make sure we get either 8 or 16 + // bit. + STBI_ASSERT(ri.bits_per_channel == 8 || ri.bits_per_channel == 16); + + if (ri.bits_per_channel != 16) { + result = stbi__convert_8_to_16((stbi_uc *)result, *x, *y, + req_comp == 0 ? *comp : req_comp); + ri.bits_per_channel = 16; + } + + // @TODO: move stbi__convert_format16 to here + // @TODO: special case RGB-to-Y (and RGBA-to-YA) for 8-bit-to-16-bit case to + // keep more precision + + if (stbi__vertically_flip_on_load) { + int channels = req_comp ? req_comp : *comp; + stbi__vertical_flip(result, *x, *y, channels * sizeof(stbi__uint16)); + } + + return (stbi__uint16 *)result; +} + +#if !defined(STBI_NO_HDR) && !defined(STBI_NO_LINEAR) +static void stbi__float_postprocess(float *result, int *x, int *y, int *comp, + int req_comp) { + if (stbi__vertically_flip_on_load && result != NULL) { + int channels = req_comp ? req_comp : *comp; + stbi__vertical_flip(result, *x, *y, channels * sizeof(float)); + } +} +#endif + +#ifndef STBI_NO_STDIO + +#if defined(_WIN32) && defined(STBI_WINDOWS_UTF8) +STBI_EXTERN __declspec(dllimport) int __stdcall MultiByteToWideChar( + unsigned int cp, unsigned long flags, const char *str, int cbmb, + wchar_t *widestr, int cchwide); +STBI_EXTERN __declspec(dllimport) int __stdcall WideCharToMultiByte( + unsigned int cp, unsigned long flags, const wchar_t *widestr, int cchwide, + char *str, int cbmb, const char *defchar, int *used_default); +#endif + +#if defined(_WIN32) && defined(STBI_WINDOWS_UTF8) +STBIDEF int stbi_convert_wchar_to_utf8(char *buffer, size_t bufferlen, + const wchar_t *input) { + return WideCharToMultiByte(65001 /* UTF8 */, 0, input, -1, buffer, + (int)bufferlen, NULL, NULL); +} +#endif + +static FILE *stbi__fopen(char const *filename, char const *mode) { + FILE *f; +#if defined(_WIN32) && defined(STBI_WINDOWS_UTF8) + wchar_t wMode[64]; + wchar_t wFilename[1024]; + if (0 == MultiByteToWideChar(65001 /* UTF8 */, 0, filename, -1, wFilename, + sizeof(wFilename) / sizeof(*wFilename))) + return 0; + + if (0 == MultiByteToWideChar(65001 /* UTF8 */, 0, mode, -1, wMode, + sizeof(wMode) / sizeof(*wMode))) + return 0; + +#if defined(_MSC_VER) && _MSC_VER >= 1400 + if (0 != _wfopen_s(&f, wFilename, wMode)) f = 0; +#else + f = _wfopen(wFilename, wMode); +#endif + +#elif defined(_MSC_VER) && _MSC_VER >= 1400 + if (0 != fopen_s(&f, filename, mode)) f = 0; +#else + f = fopen(filename, mode); +#endif + return f; +} + +STBIDEF stbi_uc *stbi_load(char const *filename, int *x, int *y, int *comp, + int req_comp) { + FILE *f = stbi__fopen(filename, "rb"); + unsigned char *result; + if (!f) return stbi__errpuc("can't fopen", "Unable to open file"); + result = stbi_load_from_file(f, x, y, comp, req_comp); + fclose(f); + return result; +} + +STBIDEF stbi_uc *stbi_load_from_file(FILE *f, int *x, int *y, int *comp, + int req_comp) { + unsigned char *result; + stbi__context s; + stbi__start_file(&s, f); + result = stbi__load_and_postprocess_8bit(&s, x, y, comp, req_comp); + if (result) { + // need to 'unget' all the characters in the IO buffer + fseek(f, -(int)(s.img_buffer_end - s.img_buffer), SEEK_CUR); + } + return result; +} + +STBIDEF stbi__uint16 *stbi_load_from_file_16(FILE *f, int *x, int *y, int *comp, + int req_comp) { + stbi__uint16 *result; + stbi__context s; + stbi__start_file(&s, f); + result = stbi__load_and_postprocess_16bit(&s, x, y, comp, req_comp); + if (result) { + // need to 'unget' all the characters in the IO buffer + fseek(f, -(int)(s.img_buffer_end - s.img_buffer), SEEK_CUR); + } + return result; +} + +STBIDEF stbi_us *stbi_load_16(char const *filename, int *x, int *y, int *comp, + int req_comp) { + FILE *f = stbi__fopen(filename, "rb"); + stbi__uint16 *result; + if (!f) return (stbi_us *)stbi__errpuc("can't fopen", "Unable to open file"); + result = stbi_load_from_file_16(f, x, y, comp, req_comp); + fclose(f); + return result; +} + +#endif //! STBI_NO_STDIO + +STBIDEF stbi_us *stbi_load_16_from_memory(stbi_uc const *buffer, int len, + int *x, int *y, int *channels_in_file, + int desired_channels) { + stbi__context s; + stbi__start_mem(&s, buffer, len); + return stbi__load_and_postprocess_16bit(&s, x, y, channels_in_file, + desired_channels); +} + +STBIDEF stbi_us *stbi_load_16_from_callbacks(stbi_io_callbacks const *clbk, + void *user, int *x, int *y, + int *channels_in_file, + int desired_channels) { + stbi__context s; + stbi__start_callbacks(&s, (stbi_io_callbacks *)clbk, user); + return stbi__load_and_postprocess_16bit(&s, x, y, channels_in_file, + desired_channels); +} + +STBIDEF stbi_uc *stbi_load_from_memory(stbi_uc const *buffer, int len, int *x, + int *y, int *comp, int req_comp) { + stbi__context s; + stbi__start_mem(&s, buffer, len); + return stbi__load_and_postprocess_8bit(&s, x, y, comp, req_comp); +} + +STBIDEF stbi_uc *stbi_load_from_callbacks(stbi_io_callbacks const *clbk, + void *user, int *x, int *y, int *comp, + int req_comp) { + stbi__context s; + stbi__start_callbacks(&s, (stbi_io_callbacks *)clbk, user); + return stbi__load_and_postprocess_8bit(&s, x, y, comp, req_comp); +} + +#ifndef STBI_NO_GIF +STBIDEF stbi_uc *stbi_load_gif_from_memory(stbi_uc const *buffer, int len, + int **delays, int *x, int *y, int *z, + int *comp, int req_comp) { + unsigned char *result; + stbi__context s; + stbi__start_mem(&s, buffer, len); + + result = + (unsigned char *)stbi__load_gif_main(&s, delays, x, y, z, comp, req_comp); + if (stbi__vertically_flip_on_load) { + stbi__vertical_flip_slices(result, *x, *y, *z, *comp); + } + + return result; +} +#endif + +#ifndef STBI_NO_LINEAR +static float *stbi__loadf_main(stbi__context *s, int *x, int *y, int *comp, + int req_comp) { + unsigned char *data; +#ifndef STBI_NO_HDR + if (stbi__hdr_test(s)) { + stbi__result_info ri; + float *hdr_data = stbi__hdr_load(s, x, y, comp, req_comp, &ri); + if (hdr_data) stbi__float_postprocess(hdr_data, x, y, comp, req_comp); + return hdr_data; + } +#endif + data = stbi__load_and_postprocess_8bit(s, x, y, comp, req_comp); + if (data) return stbi__ldr_to_hdr(data, *x, *y, req_comp ? req_comp : *comp); + return stbi__errpf("unknown image type", + "Image not of any known type, or corrupt"); +} + +STBIDEF float *stbi_loadf_from_memory(stbi_uc const *buffer, int len, int *x, + int *y, int *comp, int req_comp) { + stbi__context s; + stbi__start_mem(&s, buffer, len); + return stbi__loadf_main(&s, x, y, comp, req_comp); +} + +STBIDEF float *stbi_loadf_from_callbacks(stbi_io_callbacks const *clbk, + void *user, int *x, int *y, int *comp, + int req_comp) { + stbi__context s; + stbi__start_callbacks(&s, (stbi_io_callbacks *)clbk, user); + return stbi__loadf_main(&s, x, y, comp, req_comp); +} + +#ifndef STBI_NO_STDIO +STBIDEF float *stbi_loadf(char const *filename, int *x, int *y, int *comp, + int req_comp) { + float *result; + FILE *f = stbi__fopen(filename, "rb"); + if (!f) return stbi__errpf("can't fopen", "Unable to open file"); + result = stbi_loadf_from_file(f, x, y, comp, req_comp); + fclose(f); + return result; +} + +STBIDEF float *stbi_loadf_from_file(FILE *f, int *x, int *y, int *comp, + int req_comp) { + stbi__context s; + stbi__start_file(&s, f); + return stbi__loadf_main(&s, x, y, comp, req_comp); +} +#endif // !STBI_NO_STDIO + +#endif // !STBI_NO_LINEAR + +// these is-hdr-or-not is defined independent of whether STBI_NO_LINEAR is +// defined, for API simplicity; if STBI_NO_LINEAR is defined, it always +// reports false! + +STBIDEF int stbi_is_hdr_from_memory(stbi_uc const *buffer, int len) { +#ifndef STBI_NO_HDR + stbi__context s; + stbi__start_mem(&s, buffer, len); + return stbi__hdr_test(&s); +#else + STBI_NOTUSED(buffer); + STBI_NOTUSED(len); + return 0; +#endif +} + +#ifndef STBI_NO_STDIO +STBIDEF int stbi_is_hdr(char const *filename) { + FILE *f = stbi__fopen(filename, "rb"); + int result = 0; + if (f) { + result = stbi_is_hdr_from_file(f); + fclose(f); + } + return result; +} + +STBIDEF int stbi_is_hdr_from_file(FILE *f) { +#ifndef STBI_NO_HDR + long pos = ftell(f); + int res; + stbi__context s; + stbi__start_file(&s, f); + res = stbi__hdr_test(&s); + fseek(f, pos, SEEK_SET); + return res; +#else + STBI_NOTUSED(f); + return 0; +#endif +} +#endif // !STBI_NO_STDIO + +STBIDEF int stbi_is_hdr_from_callbacks(stbi_io_callbacks const *clbk, + void *user) { +#ifndef STBI_NO_HDR + stbi__context s; + stbi__start_callbacks(&s, (stbi_io_callbacks *)clbk, user); + return stbi__hdr_test(&s); +#else + STBI_NOTUSED(clbk); + STBI_NOTUSED(user); + return 0; +#endif +} + +#ifndef STBI_NO_LINEAR +static float stbi__l2h_gamma = 2.2f, stbi__l2h_scale = 1.0f; + +STBIDEF void stbi_ldr_to_hdr_gamma(float gamma) { stbi__l2h_gamma = gamma; } +STBIDEF void stbi_ldr_to_hdr_scale(float scale) { stbi__l2h_scale = scale; } +#endif + +static float stbi__h2l_gamma_i = 1.0f / 2.2f, stbi__h2l_scale_i = 1.0f; + +STBIDEF void stbi_hdr_to_ldr_gamma(float gamma) { + stbi__h2l_gamma_i = 1 / gamma; +} +STBIDEF void stbi_hdr_to_ldr_scale(float scale) { + stbi__h2l_scale_i = 1 / scale; +} + +////////////////////////////////////////////////////////////////////////////// +// +// Common code used by all image loaders +// + +enum { STBI__SCAN_load = 0, STBI__SCAN_type, STBI__SCAN_header }; + +static void stbi__refill_buffer(stbi__context *s) { + int n = (s->io.read)(s->io_user_data, (char *)s->buffer_start, s->buflen); + s->callback_already_read += (int)(s->img_buffer - s->img_buffer_original); + if (n == 0) { + // at end of file, treat same as if from memory, but need to handle case + // where s->img_buffer isn't pointing to safe memory, e.g. 0-byte file + s->read_from_callbacks = 0; + s->img_buffer = s->buffer_start; + s->img_buffer_end = s->buffer_start + 1; + *s->img_buffer = 0; + } else { + s->img_buffer = s->buffer_start; + s->img_buffer_end = s->buffer_start + n; + } +} + +stbi_inline static stbi_uc stbi__get8(stbi__context *s) { + if (s->img_buffer < s->img_buffer_end) return *s->img_buffer++; + if (s->read_from_callbacks) { + stbi__refill_buffer(s); + return *s->img_buffer++; + } + return 0; +} + +#if defined(STBI_NO_JPEG) && defined(STBI_NO_HDR) && defined(STBI_NO_PIC) && \ + defined(STBI_NO_PNM) +// nothing +#else +stbi_inline static int stbi__at_eof(stbi__context *s) { + if (s->io.read) { + if (!(s->io.eof)(s->io_user_data)) return 0; + // if feof() is true, check if buffer = end + // special case: we've only got the special 0 character at the end + if (s->read_from_callbacks == 0) return 1; + } + + return s->img_buffer >= s->img_buffer_end; +} +#endif + +#if defined(STBI_NO_JPEG) && defined(STBI_NO_PNG) && defined(STBI_NO_BMP) && \ + defined(STBI_NO_PSD) && defined(STBI_NO_TGA) && defined(STBI_NO_GIF) && \ + defined(STBI_NO_PIC) +// nothing +#else +static void stbi__skip(stbi__context *s, int n) { + if (n == 0) return; // already there! + if (n < 0) { + s->img_buffer = s->img_buffer_end; + return; + } + if (s->io.read) { + int blen = (int)(s->img_buffer_end - s->img_buffer); + if (blen < n) { + s->img_buffer = s->img_buffer_end; + (s->io.skip)(s->io_user_data, n - blen); + return; + } + } + s->img_buffer += n; +} +#endif + +#if defined(STBI_NO_PNG) && defined(STBI_NO_TGA) && defined(STBI_NO_HDR) && \ + defined(STBI_NO_PNM) +// nothing +#else +static int stbi__getn(stbi__context *s, stbi_uc *buffer, int n) { + if (s->io.read) { + int blen = (int)(s->img_buffer_end - s->img_buffer); + if (blen < n) { + int res, count; + + memcpy(buffer, s->img_buffer, blen); + + count = (s->io.read)(s->io_user_data, (char *)buffer + blen, n - blen); + res = (count == (n - blen)); + s->img_buffer = s->img_buffer_end; + return res; + } + } + + if (s->img_buffer + n <= s->img_buffer_end) { + memcpy(buffer, s->img_buffer, n); + s->img_buffer += n; + return 1; + } else + return 0; +} +#endif + +#if defined(STBI_NO_JPEG) && defined(STBI_NO_PNG) && defined(STBI_NO_PSD) && \ + defined(STBI_NO_PIC) +// nothing +#else +static int stbi__get16be(stbi__context *s) { + int z = stbi__get8(s); + return (z << 8) + stbi__get8(s); +} +#endif + +#if defined(STBI_NO_PNG) && defined(STBI_NO_PSD) && defined(STBI_NO_PIC) +// nothing +#else +static stbi__uint32 stbi__get32be(stbi__context *s) { + stbi__uint32 z = stbi__get16be(s); + return (z << 16) + stbi__get16be(s); +} +#endif + +#if defined(STBI_NO_BMP) && defined(STBI_NO_TGA) && defined(STBI_NO_GIF) +// nothing +#else +static int stbi__get16le(stbi__context *s) { + int z = stbi__get8(s); + return z + (stbi__get8(s) << 8); +} +#endif + +#ifndef STBI_NO_BMP +static stbi__uint32 stbi__get32le(stbi__context *s) { + stbi__uint32 z = stbi__get16le(s); + z += (stbi__uint32)stbi__get16le(s) << 16; + return z; +} +#endif + +#define STBI__BYTECAST(x) \ + ((stbi_uc)((x) & 255)) // truncate int to byte without warnings + +#if defined(STBI_NO_JPEG) && defined(STBI_NO_PNG) && defined(STBI_NO_BMP) && \ + defined(STBI_NO_PSD) && defined(STBI_NO_TGA) && defined(STBI_NO_GIF) && \ + defined(STBI_NO_PIC) && defined(STBI_NO_PNM) +// nothing +#else +////////////////////////////////////////////////////////////////////////////// +// +// generic converter from built-in img_n to req_comp +// individual types do this automatically as much as possible (e.g. jpeg +// does all cases internally since it needs to colorspace convert anyway, +// and it never has alpha, so very few cases ). png can automatically +// interleave an alpha=255 channel, but falls back to this for other cases +// +// assume data buffer is malloced, so malloc a new one and free that one +// only failure mode is malloc failing + +static stbi_uc stbi__compute_y(int r, int g, int b) { + return (stbi_uc)(((r * 77) + (g * 150) + (29 * b)) >> 8); +} +#endif + +#if defined(STBI_NO_PNG) && defined(STBI_NO_BMP) && defined(STBI_NO_PSD) && \ + defined(STBI_NO_TGA) && defined(STBI_NO_GIF) && defined(STBI_NO_PIC) && \ + defined(STBI_NO_PNM) +// nothing +#else +static unsigned char *stbi__convert_format(unsigned char *data, int img_n, + int req_comp, unsigned int x, + unsigned int y) { + int i, j; + unsigned char *good; + + if (req_comp == img_n) return data; + STBI_ASSERT(req_comp >= 1 && req_comp <= 4); + + good = (unsigned char *)stbi__malloc_mad3(req_comp, x, y, 0); + if (good == NULL) { + STBI_FREE(data); + return stbi__errpuc("outofmem", "Out of memory"); + } + + for (j = 0; j < (int)y; ++j) { + unsigned char *src = data + j * x * img_n; + unsigned char *dest = good + j * x * req_comp; + +#define STBI__COMBO(a, b) ((a) * 8 + (b)) +#define STBI__CASE(a, b) \ + case STBI__COMBO(a, b): \ + for (i = x - 1; i >= 0; --i, src += a, dest += b) + // convert source image with img_n components to one with req_comp + // components; avoid switch per pixel, so use switch per scanline and + // massive macros + switch (STBI__COMBO(img_n, req_comp)) { + STBI__CASE(1, 2) { + dest[0] = src[0]; + dest[1] = 255; + } + break; + STBI__CASE(1, 3) { dest[0] = dest[1] = dest[2] = src[0]; } + break; + STBI__CASE(1, 4) { + dest[0] = dest[1] = dest[2] = src[0]; + dest[3] = 255; + } + break; + STBI__CASE(2, 1) { dest[0] = src[0]; } + break; + STBI__CASE(2, 3) { dest[0] = dest[1] = dest[2] = src[0]; } + break; + STBI__CASE(2, 4) { + dest[0] = dest[1] = dest[2] = src[0]; + dest[3] = src[1]; + } + break; + STBI__CASE(3, 4) { + dest[0] = src[0]; + dest[1] = src[1]; + dest[2] = src[2]; + dest[3] = 255; + } + break; + STBI__CASE(3, 1) { dest[0] = stbi__compute_y(src[0], src[1], src[2]); } + break; + STBI__CASE(3, 2) { + dest[0] = stbi__compute_y(src[0], src[1], src[2]); + dest[1] = 255; + } + break; + STBI__CASE(4, 1) { dest[0] = stbi__compute_y(src[0], src[1], src[2]); } + break; + STBI__CASE(4, 2) { + dest[0] = stbi__compute_y(src[0], src[1], src[2]); + dest[1] = src[3]; + } + break; + STBI__CASE(4, 3) { + dest[0] = src[0]; + dest[1] = src[1]; + dest[2] = src[2]; + } + break; + default: + STBI_ASSERT(0); + STBI_FREE(data); + STBI_FREE(good); + return stbi__errpuc("unsupported", "Unsupported format conversion"); + } +#undef STBI__CASE + } + + STBI_FREE(data); + return good; +} +#endif + +#if defined(STBI_NO_PNG) && defined(STBI_NO_PSD) +// nothing +#else +static stbi__uint16 stbi__compute_y_16(int r, int g, int b) { + return (stbi__uint16)(((r * 77) + (g * 150) + (29 * b)) >> 8); +} +#endif + +#if defined(STBI_NO_PNG) && defined(STBI_NO_PSD) +// nothing +#else +static stbi__uint16 *stbi__convert_format16(stbi__uint16 *data, int img_n, + int req_comp, unsigned int x, + unsigned int y) { + int i, j; + stbi__uint16 *good; + + if (req_comp == img_n) return data; + STBI_ASSERT(req_comp >= 1 && req_comp <= 4); + + good = (stbi__uint16 *)stbi__malloc(req_comp * x * y * 2); + if (good == NULL) { + STBI_FREE(data); + return (stbi__uint16 *)stbi__errpuc("outofmem", "Out of memory"); + } + + for (j = 0; j < (int)y; ++j) { + stbi__uint16 *src = data + j * x * img_n; + stbi__uint16 *dest = good + j * x * req_comp; + +#define STBI__COMBO(a, b) ((a) * 8 + (b)) +#define STBI__CASE(a, b) \ + case STBI__COMBO(a, b): \ + for (i = x - 1; i >= 0; --i, src += a, dest += b) + // convert source image with img_n components to one with req_comp + // components; avoid switch per pixel, so use switch per scanline and + // massive macros + switch (STBI__COMBO(img_n, req_comp)) { + STBI__CASE(1, 2) { + dest[0] = src[0]; + dest[1] = 0xffff; + } + break; + STBI__CASE(1, 3) { dest[0] = dest[1] = dest[2] = src[0]; } + break; + STBI__CASE(1, 4) { + dest[0] = dest[1] = dest[2] = src[0]; + dest[3] = 0xffff; + } + break; + STBI__CASE(2, 1) { dest[0] = src[0]; } + break; + STBI__CASE(2, 3) { dest[0] = dest[1] = dest[2] = src[0]; } + break; + STBI__CASE(2, 4) { + dest[0] = dest[1] = dest[2] = src[0]; + dest[3] = src[1]; + } + break; + STBI__CASE(3, 4) { + dest[0] = src[0]; + dest[1] = src[1]; + dest[2] = src[2]; + dest[3] = 0xffff; + } + break; + STBI__CASE(3, 1) { dest[0] = stbi__compute_y_16(src[0], src[1], src[2]); } + break; + STBI__CASE(3, 2) { + dest[0] = stbi__compute_y_16(src[0], src[1], src[2]); + dest[1] = 0xffff; + } + break; + STBI__CASE(4, 1) { dest[0] = stbi__compute_y_16(src[0], src[1], src[2]); } + break; + STBI__CASE(4, 2) { + dest[0] = stbi__compute_y_16(src[0], src[1], src[2]); + dest[1] = src[3]; + } + break; + STBI__CASE(4, 3) { + dest[0] = src[0]; + dest[1] = src[1]; + dest[2] = src[2]; + } + break; + default: + STBI_ASSERT(0); + STBI_FREE(data); + STBI_FREE(good); + return (stbi__uint16 *)stbi__errpuc("unsupported", + "Unsupported format conversion"); + } +#undef STBI__CASE + } + + STBI_FREE(data); + return good; +} +#endif + +#ifndef STBI_NO_LINEAR +static float *stbi__ldr_to_hdr(stbi_uc *data, int x, int y, int comp) { + int i, k, n; + float *output; + if (!data) return NULL; + output = (float *)stbi__malloc_mad4(x, y, comp, sizeof(float), 0); + if (output == NULL) { + STBI_FREE(data); + return stbi__errpf("outofmem", "Out of memory"); + } + // compute number of non-alpha components + if (comp & 1) + n = comp; + else + n = comp - 1; + for (i = 0; i < x * y; ++i) { + for (k = 0; k < n; ++k) { + output[i * comp + k] = + (float)(pow(data[i * comp + k] / 255.0f, stbi__l2h_gamma) * + stbi__l2h_scale); + } + } + if (n < comp) { + for (i = 0; i < x * y; ++i) { + output[i * comp + n] = data[i * comp + n] / 255.0f; + } + } + STBI_FREE(data); + return output; +} +#endif + +#ifndef STBI_NO_HDR +#define stbi__float2int(x) ((int)(x)) +static stbi_uc *stbi__hdr_to_ldr(float *data, int x, int y, int comp) { + int i, k, n; + stbi_uc *output; + if (!data) return NULL; + output = (stbi_uc *)stbi__malloc_mad3(x, y, comp, 0); + if (output == NULL) { + STBI_FREE(data); + return stbi__errpuc("outofmem", "Out of memory"); + } + // compute number of non-alpha components + if (comp & 1) + n = comp; + else + n = comp - 1; + for (i = 0; i < x * y; ++i) { + for (k = 0; k < n; ++k) { + float z = (float)pow(data[i * comp + k] * stbi__h2l_scale_i, + stbi__h2l_gamma_i) * + 255 + + 0.5f; + if (z < 0) z = 0; + if (z > 255) z = 255; + output[i * comp + k] = (stbi_uc)stbi__float2int(z); + } + if (k < comp) { + float z = data[i * comp + k] * 255 + 0.5f; + if (z < 0) z = 0; + if (z > 255) z = 255; + output[i * comp + k] = (stbi_uc)stbi__float2int(z); + } + } + STBI_FREE(data); + return output; +} +#endif + +////////////////////////////////////////////////////////////////////////////// +// +// "baseline" JPEG/JFIF decoder +// +// simple implementation +// - doesn't support delayed output of y-dimension +// - simple interface (only one output format: 8-bit interleaved RGB) +// - doesn't try to recover corrupt jpegs +// - doesn't allow partial loading, loading multiple at once +// - still fast on x86 (copying globals into locals doesn't help x86) +// - allocates lots of intermediate memory (full size of all components) +// - non-interleaved case requires this anyway +// - allows good upsampling (see next) +// high-quality +// - upsampled channels are bilinearly interpolated, even across blocks +// - quality integer IDCT derived from IJG's 'slow' +// performance +// - fast huffman; reasonable integer IDCT +// - some SIMD kernels for common paths on targets with SSE2/NEON +// - uses a lot of intermediate memory, could cache poorly + +#ifndef STBI_NO_JPEG + +// huffman decoding acceleration +#define FAST_BITS 9 // larger handles more cases; smaller stomps less cache + +typedef struct { + stbi_uc fast[1 << FAST_BITS]; + // weirdly, repacking this into AoS is a 10% speed loss, instead of a win + stbi__uint16 code[256]; + stbi_uc values[256]; + stbi_uc size[257]; + unsigned int maxcode[18]; + int delta[17]; // old 'firstsymbol' - old 'firstcode' +} stbi__huffman; + +typedef struct { + stbi__context *s; + stbi__huffman huff_dc[4]; + stbi__huffman huff_ac[4]; + stbi__uint16 dequant[4][64]; + stbi__int16 fast_ac[4][1 << FAST_BITS]; + + // sizes for components, interleaved MCUs + int img_h_max, img_v_max; + int img_mcu_x, img_mcu_y; + int img_mcu_w, img_mcu_h; + + // definition of jpeg image component + struct { + int id; + int h, v; + int tq; + int hd, ha; + int dc_pred; + + int x, y, w2, h2; + stbi_uc *data; + void *raw_data, *raw_coeff; + stbi_uc *linebuf; + short *coeff; // progressive only + int coeff_w, coeff_h; // number of 8x8 coefficient blocks + } img_comp[4]; + + stbi__uint32 code_buffer; // jpeg entropy-coded buffer + int code_bits; // number of valid bits + unsigned char marker; // marker seen while filling entropy buffer + int nomore; // flag if we saw a marker so must stop + + int progressive; + int spec_start; + int spec_end; + int succ_high; + int succ_low; + int eob_run; + int jfif; + int app14_color_transform; // Adobe APP14 tag + int rgb; + + int scan_n, order[4]; + int restart_interval, todo; + + // kernels + void (*idct_block_kernel)(stbi_uc *out, int out_stride, short data[64]); + void (*YCbCr_to_RGB_kernel)(stbi_uc *out, const stbi_uc *y, + const stbi_uc *pcb, const stbi_uc *pcr, int count, + int step); + stbi_uc *(*resample_row_hv_2_kernel)(stbi_uc *out, stbi_uc *in_near, + stbi_uc *in_far, int w, int hs); +} stbi__jpeg; + +static int stbi__build_huffman(stbi__huffman *h, int *count) { + int i, j, k = 0; + unsigned int code; + // build size list for each symbol (from JPEG spec) + for (i = 0; i < 16; ++i) { + for (j = 0; j < count[i]; ++j) { + h->size[k++] = (stbi_uc)(i + 1); + if (k >= 257) return stbi__err("bad size list", "Corrupt JPEG"); + } + } + h->size[k] = 0; + + // compute actual symbols (from jpeg spec) + code = 0; + k = 0; + for (j = 1; j <= 16; ++j) { + // compute delta to add to code to compute symbol id + h->delta[j] = k - code; + if (h->size[k] == j) { + while (h->size[k] == j) h->code[k++] = (stbi__uint16)(code++); + if (code - 1 >= (1u << j)) + return stbi__err("bad code lengths", "Corrupt JPEG"); + } + // compute largest code + 1 for this size, preshifted as needed later + h->maxcode[j] = code << (16 - j); + code <<= 1; + } + h->maxcode[j] = 0xffffffff; + + // build non-spec acceleration table; 255 is flag for not-accelerated + memset(h->fast, 255, 1 << FAST_BITS); + for (i = 0; i < k; ++i) { + int s = h->size[i]; + if (s <= FAST_BITS) { + int c = h->code[i] << (FAST_BITS - s); + int m = 1 << (FAST_BITS - s); + for (j = 0; j < m; ++j) { + h->fast[c + j] = (stbi_uc)i; + } + } + } + return 1; +} + +// build a table that decodes both magnitude and value of small ACs in +// one go. +static void stbi__build_fast_ac(stbi__int16 *fast_ac, stbi__huffman *h) { + int i; + for (i = 0; i < (1 << FAST_BITS); ++i) { + stbi_uc fast = h->fast[i]; + fast_ac[i] = 0; + if (fast < 255) { + int rs = h->values[fast]; + int run = (rs >> 4) & 15; + int magbits = rs & 15; + int len = h->size[fast]; + + if (magbits && len + magbits <= FAST_BITS) { + // magnitude code followed by receive_extend code + int k = ((i << len) & ((1 << FAST_BITS) - 1)) >> (FAST_BITS - magbits); + int m = 1 << (magbits - 1); + if (k < m) k += (~0U << magbits) + 1; + // if the result is small enough, we can fit it in fast_ac table + if (k >= -128 && k <= 127) + fast_ac[i] = (stbi__int16)((k * 256) + (run * 16) + (len + magbits)); + } + } + } +} + +static void stbi__grow_buffer_unsafe(stbi__jpeg *j) { + do { + unsigned int b = j->nomore ? 0 : stbi__get8(j->s); + if (b == 0xff) { + int c = stbi__get8(j->s); + while (c == 0xff) c = stbi__get8(j->s); // consume fill bytes + if (c != 0) { + j->marker = (unsigned char)c; + j->nomore = 1; + return; + } + } + j->code_buffer |= b << (24 - j->code_bits); + j->code_bits += 8; + } while (j->code_bits <= 24); +} + +// (1 << n) - 1 +static const stbi__uint32 stbi__bmask[17] = { + 0, 1, 3, 7, 15, 31, 63, 127, 255, + 511, 1023, 2047, 4095, 8191, 16383, 32767, 65535}; + +// decode a jpeg huffman value from the bitstream +stbi_inline static int stbi__jpeg_huff_decode(stbi__jpeg *j, stbi__huffman *h) { + unsigned int temp; + int c, k; + + if (j->code_bits < 16) stbi__grow_buffer_unsafe(j); + + // look at the top FAST_BITS and determine what symbol ID it is, + // if the code is <= FAST_BITS + c = (j->code_buffer >> (32 - FAST_BITS)) & ((1 << FAST_BITS) - 1); + k = h->fast[c]; + if (k < 255) { + int s = h->size[k]; + if (s > j->code_bits) return -1; + j->code_buffer <<= s; + j->code_bits -= s; + return h->values[k]; + } + + // naive test is to shift the code_buffer down so k bits are + // valid, then test against maxcode. To speed this up, we've + // preshifted maxcode left so that it has (16-k) 0s at the + // end; in other words, regardless of the number of bits, it + // wants to be compared against something shifted to have 16; + // that way we don't need to shift inside the loop. + temp = j->code_buffer >> 16; + for (k = FAST_BITS + 1;; ++k) + if (temp < h->maxcode[k]) break; + if (k == 17) { + // error! code not found + j->code_bits -= 16; + return -1; + } + + if (k > j->code_bits) return -1; + + // convert the huffman code to the symbol id + c = ((j->code_buffer >> (32 - k)) & stbi__bmask[k]) + h->delta[k]; + if (c < 0 || c >= 256) // symbol id out of bounds! + return -1; + STBI_ASSERT((((j->code_buffer) >> (32 - h->size[c])) & + stbi__bmask[h->size[c]]) == h->code[c]); + + // convert the id to a symbol + j->code_bits -= k; + j->code_buffer <<= k; + return h->values[c]; +} + +// bias[n] = (-1<code_bits < n) stbi__grow_buffer_unsafe(j); + if (j->code_bits < n) + return 0; // ran out of bits from stream, return 0s intead of continuing + + sgn = j->code_buffer >> 31; // sign bit always in MSB; 0 if MSB clear + // (positive), 1 if MSB set (negative) + k = stbi_lrot(j->code_buffer, n); + j->code_buffer = k & ~stbi__bmask[n]; + k &= stbi__bmask[n]; + j->code_bits -= n; + return k + (stbi__jbias[n] & (sgn - 1)); +} + +// get some unsigned bits +stbi_inline static int stbi__jpeg_get_bits(stbi__jpeg *j, int n) { + unsigned int k; + if (j->code_bits < n) stbi__grow_buffer_unsafe(j); + if (j->code_bits < n) + return 0; // ran out of bits from stream, return 0s intead of continuing + k = stbi_lrot(j->code_buffer, n); + j->code_buffer = k & ~stbi__bmask[n]; + k &= stbi__bmask[n]; + j->code_bits -= n; + return k; +} + +stbi_inline static int stbi__jpeg_get_bit(stbi__jpeg *j) { + unsigned int k; + if (j->code_bits < 1) stbi__grow_buffer_unsafe(j); + if (j->code_bits < 1) + return 0; // ran out of bits from stream, return 0s intead of continuing + k = j->code_buffer; + j->code_buffer <<= 1; + --j->code_bits; + return k & 0x80000000; +} + +// given a value that's at position X in the zigzag stream, +// where does it appear in the 8x8 matrix coded as row-major? +static const stbi_uc stbi__jpeg_dezigzag[64 + 15] = { + 0, 1, 8, 16, 9, 2, 3, 10, 17, 24, 32, 25, 18, 11, 4, 5, 12, 19, 26, 33, 40, + 48, 41, 34, 27, 20, 13, 6, 7, 14, 21, 28, 35, 42, 49, 56, 57, 50, 43, 36, + 29, 22, 15, 23, 30, 37, 44, 51, 58, 59, 52, 45, 38, 31, 39, 46, 53, 60, 61, + 54, 47, 55, 62, 63, + // let corrupt input sample past end + 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63}; + +// decode one 64-entry block-- +static int stbi__jpeg_decode_block(stbi__jpeg *j, short data[64], + stbi__huffman *hdc, stbi__huffman *hac, + stbi__int16 *fac, int b, + stbi__uint16 *dequant) { + int diff, dc, k; + int t; + + if (j->code_bits < 16) stbi__grow_buffer_unsafe(j); + t = stbi__jpeg_huff_decode(j, hdc); + if (t < 0 || t > 15) return stbi__err("bad huffman code", "Corrupt JPEG"); + + // 0 all the ac values now so we can do it 32-bits at a time + memset(data, 0, 64 * sizeof(data[0])); + + diff = t ? stbi__extend_receive(j, t) : 0; + if (!stbi__addints_valid(j->img_comp[b].dc_pred, diff)) + return stbi__err("bad delta", "Corrupt JPEG"); + dc = j->img_comp[b].dc_pred + diff; + j->img_comp[b].dc_pred = dc; + if (!stbi__mul2shorts_valid(dc, dequant[0])) + return stbi__err("can't merge dc and ac", "Corrupt JPEG"); + data[0] = (short)(dc * dequant[0]); + + // decode AC components, see JPEG spec + k = 1; + do { + unsigned int zig; + int c, r, s; + if (j->code_bits < 16) stbi__grow_buffer_unsafe(j); + c = (j->code_buffer >> (32 - FAST_BITS)) & ((1 << FAST_BITS) - 1); + r = fac[c]; + if (r) { // fast-AC path + k += (r >> 4) & 15; // run + s = r & 15; // combined length + if (s > j->code_bits) + return stbi__err("bad huffman code", + "Combined length longer than code bits available"); + j->code_buffer <<= s; + j->code_bits -= s; + // decode into unzigzag'd location + zig = stbi__jpeg_dezigzag[k++]; + data[zig] = (short)((r >> 8) * dequant[zig]); + } else { + int rs = stbi__jpeg_huff_decode(j, hac); + if (rs < 0) return stbi__err("bad huffman code", "Corrupt JPEG"); + s = rs & 15; + r = rs >> 4; + if (s == 0) { + if (rs != 0xf0) break; // end block + k += 16; + } else { + k += r; + // decode into unzigzag'd location + zig = stbi__jpeg_dezigzag[k++]; + data[zig] = (short)(stbi__extend_receive(j, s) * dequant[zig]); + } + } + } while (k < 64); + return 1; +} + +static int stbi__jpeg_decode_block_prog_dc(stbi__jpeg *j, short data[64], + stbi__huffman *hdc, int b) { + int diff, dc; + int t; + if (j->spec_end != 0) + return stbi__err("can't merge dc and ac", "Corrupt JPEG"); + + if (j->code_bits < 16) stbi__grow_buffer_unsafe(j); + + if (j->succ_high == 0) { + // first scan for DC coefficient, must be first + memset(data, 0, 64 * sizeof(data[0])); // 0 all the ac values now + t = stbi__jpeg_huff_decode(j, hdc); + if (t < 0 || t > 15) + return stbi__err("can't merge dc and ac", "Corrupt JPEG"); + diff = t ? stbi__extend_receive(j, t) : 0; + + if (!stbi__addints_valid(j->img_comp[b].dc_pred, diff)) + return stbi__err("bad delta", "Corrupt JPEG"); + dc = j->img_comp[b].dc_pred + diff; + j->img_comp[b].dc_pred = dc; + if (!stbi__mul2shorts_valid(dc, 1 << j->succ_low)) + return stbi__err("can't merge dc and ac", "Corrupt JPEG"); + data[0] = (short)(dc * (1 << j->succ_low)); + } else { + // refinement scan for DC coefficient + if (stbi__jpeg_get_bit(j)) data[0] += (short)(1 << j->succ_low); + } + return 1; +} + +// @OPTIMIZE: store non-zigzagged during the decode passes, +// and only de-zigzag when dequantizing +static int stbi__jpeg_decode_block_prog_ac(stbi__jpeg *j, short data[64], + stbi__huffman *hac, + stbi__int16 *fac) { + int k; + if (j->spec_start == 0) + return stbi__err("can't merge dc and ac", "Corrupt JPEG"); + + if (j->succ_high == 0) { + int shift = j->succ_low; + + if (j->eob_run) { + --j->eob_run; + return 1; + } + + k = j->spec_start; + do { + unsigned int zig; + int c, r, s; + if (j->code_bits < 16) stbi__grow_buffer_unsafe(j); + c = (j->code_buffer >> (32 - FAST_BITS)) & ((1 << FAST_BITS) - 1); + r = fac[c]; + if (r) { // fast-AC path + k += (r >> 4) & 15; // run + s = r & 15; // combined length + if (s > j->code_bits) + return stbi__err("bad huffman code", + "Combined length longer than code bits available"); + j->code_buffer <<= s; + j->code_bits -= s; + zig = stbi__jpeg_dezigzag[k++]; + data[zig] = (short)((r >> 8) * (1 << shift)); + } else { + int rs = stbi__jpeg_huff_decode(j, hac); + if (rs < 0) return stbi__err("bad huffman code", "Corrupt JPEG"); + s = rs & 15; + r = rs >> 4; + if (s == 0) { + if (r < 15) { + j->eob_run = (1 << r); + if (r) j->eob_run += stbi__jpeg_get_bits(j, r); + --j->eob_run; + break; + } + k += 16; + } else { + k += r; + zig = stbi__jpeg_dezigzag[k++]; + data[zig] = (short)(stbi__extend_receive(j, s) * (1 << shift)); + } + } + } while (k <= j->spec_end); + } else { + // refinement scan for these AC coefficients + + short bit = (short)(1 << j->succ_low); + + if (j->eob_run) { + --j->eob_run; + for (k = j->spec_start; k <= j->spec_end; ++k) { + short *p = &data[stbi__jpeg_dezigzag[k]]; + if (*p != 0) + if (stbi__jpeg_get_bit(j)) + if ((*p & bit) == 0) { + if (*p > 0) + *p += bit; + else + *p -= bit; + } + } + } else { + k = j->spec_start; + do { + int r, s; + int rs = stbi__jpeg_huff_decode( + j, hac); // @OPTIMIZE see if we can use the fast path here, + // advance-by-r is so slow, eh + if (rs < 0) return stbi__err("bad huffman code", "Corrupt JPEG"); + s = rs & 15; + r = rs >> 4; + if (s == 0) { + if (r < 15) { + j->eob_run = (1 << r) - 1; + if (r) j->eob_run += stbi__jpeg_get_bits(j, r); + r = 64; // force end of block + } else { + // r=15 s=0 should write 16 0s, so we just do + // a run of 15 0s and then write s (which is 0), + // so we don't have to do anything special here + } + } else { + if (s != 1) return stbi__err("bad huffman code", "Corrupt JPEG"); + // sign bit + if (stbi__jpeg_get_bit(j)) + s = bit; + else + s = -bit; + } + + // advance by r + while (k <= j->spec_end) { + short *p = &data[stbi__jpeg_dezigzag[k++]]; + if (*p != 0) { + if (stbi__jpeg_get_bit(j)) + if ((*p & bit) == 0) { + if (*p > 0) + *p += bit; + else + *p -= bit; + } + } else { + if (r == 0) { + *p = (short)s; + break; + } + --r; + } + } + } while (k <= j->spec_end); + } + } + return 1; +} + +// take a -128..127 value and stbi__clamp it and convert to 0..255 +stbi_inline static stbi_uc stbi__clamp(int x) { + // trick to use a single test to catch both cases + if ((unsigned int)x > 255) { + if (x < 0) return 0; + if (x > 255) return 255; + } + return (stbi_uc)x; +} + +#define stbi__f2f(x) ((int)(((x) * 4096 + 0.5))) +#define stbi__fsh(x) ((x) * 4096) + +// derived from jidctint -- DCT_ISLOW +#define STBI__IDCT_1D(s0, s1, s2, s3, s4, s5, s6, s7) \ + int t0, t1, t2, t3, p1, p2, p3, p4, p5, x0, x1, x2, x3; \ + p2 = s2; \ + p3 = s6; \ + p1 = (p2 + p3) * stbi__f2f(0.5411961f); \ + t2 = p1 + p3 * stbi__f2f(-1.847759065f); \ + t3 = p1 + p2 * stbi__f2f(0.765366865f); \ + p2 = s0; \ + p3 = s4; \ + t0 = stbi__fsh(p2 + p3); \ + t1 = stbi__fsh(p2 - p3); \ + x0 = t0 + t3; \ + x3 = t0 - t3; \ + x1 = t1 + t2; \ + x2 = t1 - t2; \ + t0 = s7; \ + t1 = s5; \ + t2 = s3; \ + t3 = s1; \ + p3 = t0 + t2; \ + p4 = t1 + t3; \ + p1 = t0 + t3; \ + p2 = t1 + t2; \ + p5 = (p3 + p4) * stbi__f2f(1.175875602f); \ + t0 = t0 * stbi__f2f(0.298631336f); \ + t1 = t1 * stbi__f2f(2.053119869f); \ + t2 = t2 * stbi__f2f(3.072711026f); \ + t3 = t3 * stbi__f2f(1.501321110f); \ + p1 = p5 + p1 * stbi__f2f(-0.899976223f); \ + p2 = p5 + p2 * stbi__f2f(-2.562915447f); \ + p3 = p3 * stbi__f2f(-1.961570560f); \ + p4 = p4 * stbi__f2f(-0.390180644f); \ + t3 += p1 + p4; \ + t2 += p2 + p3; \ + t1 += p2 + p4; \ + t0 += p1 + p3; + +static void stbi__idct_block(stbi_uc *out, int out_stride, short data[64]) { + int i, val[64], *v = val; + stbi_uc *o; + short *d = data; + + // columns + for (i = 0; i < 8; ++i, ++d, ++v) { + // if all zeroes, shortcut -- this avoids dequantizing 0s and IDCTing + if (d[8] == 0 && d[16] == 0 && d[24] == 0 && d[32] == 0 && d[40] == 0 && + d[48] == 0 && d[56] == 0) { + // no shortcut 0 seconds + // (1|2|3|4|5|6|7)==0 0 seconds + // all separate -0.047 seconds + // 1 && 2|3 && 4|5 && 6|7: -0.047 seconds + int dcterm = d[0] * 4; + v[0] = v[8] = v[16] = v[24] = v[32] = v[40] = v[48] = v[56] = dcterm; + } else { + STBI__IDCT_1D(d[0], d[8], d[16], d[24], d[32], d[40], d[48], d[56]) + // constants scaled things up by 1<<12; let's bring them back + // down, but keep 2 extra bits of precision + x0 += 512; + x1 += 512; + x2 += 512; + x3 += 512; + v[0] = (x0 + t3) >> 10; + v[56] = (x0 - t3) >> 10; + v[8] = (x1 + t2) >> 10; + v[48] = (x1 - t2) >> 10; + v[16] = (x2 + t1) >> 10; + v[40] = (x2 - t1) >> 10; + v[24] = (x3 + t0) >> 10; + v[32] = (x3 - t0) >> 10; + } + } + + for (i = 0, v = val, o = out; i < 8; ++i, v += 8, o += out_stride) { + // no fast case since the first 1D IDCT spread components out + STBI__IDCT_1D(v[0], v[1], v[2], v[3], v[4], v[5], v[6], v[7]) + // constants scaled things up by 1<<12, plus we had 1<<2 from first + // loop, plus horizontal and vertical each scale by sqrt(8) so together + // we've got an extra 1<<3, so 1<<17 total we need to remove. + // so we want to round that, which means adding 0.5 * 1<<17, + // aka 65536. Also, we'll end up with -128 to 127 that we want + // to encode as 0..255 by adding 128, so we'll add that before the shift + x0 += 65536 + (128 << 17); + x1 += 65536 + (128 << 17); + x2 += 65536 + (128 << 17); + x3 += 65536 + (128 << 17); + // tried computing the shifts into temps, or'ing the temps to see + // if any were out of range, but that was slower + o[0] = stbi__clamp((x0 + t3) >> 17); + o[7] = stbi__clamp((x0 - t3) >> 17); + o[1] = stbi__clamp((x1 + t2) >> 17); + o[6] = stbi__clamp((x1 - t2) >> 17); + o[2] = stbi__clamp((x2 + t1) >> 17); + o[5] = stbi__clamp((x2 - t1) >> 17); + o[3] = stbi__clamp((x3 + t0) >> 17); + o[4] = stbi__clamp((x3 - t0) >> 17); + } +} + +#ifdef STBI_SSE2 +// sse2 integer IDCT. not the fastest possible implementation but it +// produces bit-identical results to the generic C version so it's +// fully "transparent". +static void stbi__idct_simd(stbi_uc *out, int out_stride, short data[64]) { + // This is constructed to match our regular (generic) integer IDCT exactly. + __m128i row0, row1, row2, row3, row4, row5, row6, row7; + __m128i tmp; + +// dot product constant: even elems=x, odd elems=y +#define dct_const(x, y) _mm_setr_epi16((x), (y), (x), (y), (x), (y), (x), (y)) + +// out(0) = c0[even]*x + c0[odd]*y (c0, x, y 16-bit, out 32-bit) +// out(1) = c1[even]*x + c1[odd]*y +#define dct_rot(out0, out1, x, y, c0, c1) \ + __m128i c0##lo = _mm_unpacklo_epi16((x), (y)); \ + __m128i c0##hi = _mm_unpackhi_epi16((x), (y)); \ + __m128i out0##_l = _mm_madd_epi16(c0##lo, c0); \ + __m128i out0##_h = _mm_madd_epi16(c0##hi, c0); \ + __m128i out1##_l = _mm_madd_epi16(c0##lo, c1); \ + __m128i out1##_h = _mm_madd_epi16(c0##hi, c1) + +// out = in << 12 (in 16-bit, out 32-bit) +#define dct_widen(out, in) \ + __m128i out##_l = \ + _mm_srai_epi32(_mm_unpacklo_epi16(_mm_setzero_si128(), (in)), 4); \ + __m128i out##_h = \ + _mm_srai_epi32(_mm_unpackhi_epi16(_mm_setzero_si128(), (in)), 4) + +// wide add +#define dct_wadd(out, a, b) \ + __m128i out##_l = _mm_add_epi32(a##_l, b##_l); \ + __m128i out##_h = _mm_add_epi32(a##_h, b##_h) + +// wide sub +#define dct_wsub(out, a, b) \ + __m128i out##_l = _mm_sub_epi32(a##_l, b##_l); \ + __m128i out##_h = _mm_sub_epi32(a##_h, b##_h) + +// butterfly a/b, add bias, then shift by "s" and pack +#define dct_bfly32o(out0, out1, a, b, bias, s) \ + { \ + __m128i abiased_l = _mm_add_epi32(a##_l, bias); \ + __m128i abiased_h = _mm_add_epi32(a##_h, bias); \ + dct_wadd(sum, abiased, b); \ + dct_wsub(dif, abiased, b); \ + out0 = \ + _mm_packs_epi32(_mm_srai_epi32(sum_l, s), _mm_srai_epi32(sum_h, s)); \ + out1 = \ + _mm_packs_epi32(_mm_srai_epi32(dif_l, s), _mm_srai_epi32(dif_h, s)); \ + } + +// 8-bit interleave step (for transposes) +#define dct_interleave8(a, b) \ + tmp = a; \ + a = _mm_unpacklo_epi8(a, b); \ + b = _mm_unpackhi_epi8(tmp, b) + +// 16-bit interleave step (for transposes) +#define dct_interleave16(a, b) \ + tmp = a; \ + a = _mm_unpacklo_epi16(a, b); \ + b = _mm_unpackhi_epi16(tmp, b) + +#define dct_pass(bias, shift) \ + { \ + /* even part */ \ + dct_rot(t2e, t3e, row2, row6, rot0_0, rot0_1); \ + __m128i sum04 = _mm_add_epi16(row0, row4); \ + __m128i dif04 = _mm_sub_epi16(row0, row4); \ + dct_widen(t0e, sum04); \ + dct_widen(t1e, dif04); \ + dct_wadd(x0, t0e, t3e); \ + dct_wsub(x3, t0e, t3e); \ + dct_wadd(x1, t1e, t2e); \ + dct_wsub(x2, t1e, t2e); \ + /* odd part */ \ + dct_rot(y0o, y2o, row7, row3, rot2_0, rot2_1); \ + dct_rot(y1o, y3o, row5, row1, rot3_0, rot3_1); \ + __m128i sum17 = _mm_add_epi16(row1, row7); \ + __m128i sum35 = _mm_add_epi16(row3, row5); \ + dct_rot(y4o, y5o, sum17, sum35, rot1_0, rot1_1); \ + dct_wadd(x4, y0o, y4o); \ + dct_wadd(x5, y1o, y5o); \ + dct_wadd(x6, y2o, y5o); \ + dct_wadd(x7, y3o, y4o); \ + dct_bfly32o(row0, row7, x0, x7, bias, shift); \ + dct_bfly32o(row1, row6, x1, x6, bias, shift); \ + dct_bfly32o(row2, row5, x2, x5, bias, shift); \ + dct_bfly32o(row3, row4, x3, x4, bias, shift); \ + } + + __m128i rot0_0 = dct_const(stbi__f2f(0.5411961f), + stbi__f2f(0.5411961f) + stbi__f2f(-1.847759065f)); + __m128i rot0_1 = dct_const(stbi__f2f(0.5411961f) + stbi__f2f(0.765366865f), + stbi__f2f(0.5411961f)); + __m128i rot1_0 = dct_const(stbi__f2f(1.175875602f) + stbi__f2f(-0.899976223f), + stbi__f2f(1.175875602f)); + __m128i rot1_1 = + dct_const(stbi__f2f(1.175875602f), + stbi__f2f(1.175875602f) + stbi__f2f(-2.562915447f)); + __m128i rot2_0 = dct_const(stbi__f2f(-1.961570560f) + stbi__f2f(0.298631336f), + stbi__f2f(-1.961570560f)); + __m128i rot2_1 = + dct_const(stbi__f2f(-1.961570560f), + stbi__f2f(-1.961570560f) + stbi__f2f(3.072711026f)); + __m128i rot3_0 = dct_const(stbi__f2f(-0.390180644f) + stbi__f2f(2.053119869f), + stbi__f2f(-0.390180644f)); + __m128i rot3_1 = + dct_const(stbi__f2f(-0.390180644f), + stbi__f2f(-0.390180644f) + stbi__f2f(1.501321110f)); + + // rounding biases in column/row passes, see stbi__idct_block for explanation. + __m128i bias_0 = _mm_set1_epi32(512); + __m128i bias_1 = _mm_set1_epi32(65536 + (128 << 17)); + + // load + row0 = _mm_load_si128((const __m128i *)(data + 0 * 8)); + row1 = _mm_load_si128((const __m128i *)(data + 1 * 8)); + row2 = _mm_load_si128((const __m128i *)(data + 2 * 8)); + row3 = _mm_load_si128((const __m128i *)(data + 3 * 8)); + row4 = _mm_load_si128((const __m128i *)(data + 4 * 8)); + row5 = _mm_load_si128((const __m128i *)(data + 5 * 8)); + row6 = _mm_load_si128((const __m128i *)(data + 6 * 8)); + row7 = _mm_load_si128((const __m128i *)(data + 7 * 8)); + + // column pass + dct_pass(bias_0, 10); + + { + // 16bit 8x8 transpose pass 1 + dct_interleave16(row0, row4); + dct_interleave16(row1, row5); + dct_interleave16(row2, row6); + dct_interleave16(row3, row7); + + // transpose pass 2 + dct_interleave16(row0, row2); + dct_interleave16(row1, row3); + dct_interleave16(row4, row6); + dct_interleave16(row5, row7); + + // transpose pass 3 + dct_interleave16(row0, row1); + dct_interleave16(row2, row3); + dct_interleave16(row4, row5); + dct_interleave16(row6, row7); + } + + // row pass + dct_pass(bias_1, 17); + + { + // pack + __m128i p0 = _mm_packus_epi16(row0, row1); // a0a1a2a3...a7b0b1b2b3...b7 + __m128i p1 = _mm_packus_epi16(row2, row3); + __m128i p2 = _mm_packus_epi16(row4, row5); + __m128i p3 = _mm_packus_epi16(row6, row7); + + // 8bit 8x8 transpose pass 1 + dct_interleave8(p0, p2); // a0e0a1e1... + dct_interleave8(p1, p3); // c0g0c1g1... + + // transpose pass 2 + dct_interleave8(p0, p1); // a0c0e0g0... + dct_interleave8(p2, p3); // b0d0f0h0... + + // transpose pass 3 + dct_interleave8(p0, p2); // a0b0c0d0... + dct_interleave8(p1, p3); // a4b4c4d4... + + // store + _mm_storel_epi64((__m128i *)out, p0); + out += out_stride; + _mm_storel_epi64((__m128i *)out, _mm_shuffle_epi32(p0, 0x4e)); + out += out_stride; + _mm_storel_epi64((__m128i *)out, p2); + out += out_stride; + _mm_storel_epi64((__m128i *)out, _mm_shuffle_epi32(p2, 0x4e)); + out += out_stride; + _mm_storel_epi64((__m128i *)out, p1); + out += out_stride; + _mm_storel_epi64((__m128i *)out, _mm_shuffle_epi32(p1, 0x4e)); + out += out_stride; + _mm_storel_epi64((__m128i *)out, p3); + out += out_stride; + _mm_storel_epi64((__m128i *)out, _mm_shuffle_epi32(p3, 0x4e)); + } + +#undef dct_const +#undef dct_rot +#undef dct_widen +#undef dct_wadd +#undef dct_wsub +#undef dct_bfly32o +#undef dct_interleave8 +#undef dct_interleave16 +#undef dct_pass +} + +#endif // STBI_SSE2 + +#ifdef STBI_NEON + +// NEON integer IDCT. should produce bit-identical +// results to the generic C version. +static void stbi__idct_simd(stbi_uc *out, int out_stride, short data[64]) { + int16x8_t row0, row1, row2, row3, row4, row5, row6, row7; + + int16x4_t rot0_0 = vdup_n_s16(stbi__f2f(0.5411961f)); + int16x4_t rot0_1 = vdup_n_s16(stbi__f2f(-1.847759065f)); + int16x4_t rot0_2 = vdup_n_s16(stbi__f2f(0.765366865f)); + int16x4_t rot1_0 = vdup_n_s16(stbi__f2f(1.175875602f)); + int16x4_t rot1_1 = vdup_n_s16(stbi__f2f(-0.899976223f)); + int16x4_t rot1_2 = vdup_n_s16(stbi__f2f(-2.562915447f)); + int16x4_t rot2_0 = vdup_n_s16(stbi__f2f(-1.961570560f)); + int16x4_t rot2_1 = vdup_n_s16(stbi__f2f(-0.390180644f)); + int16x4_t rot3_0 = vdup_n_s16(stbi__f2f(0.298631336f)); + int16x4_t rot3_1 = vdup_n_s16(stbi__f2f(2.053119869f)); + int16x4_t rot3_2 = vdup_n_s16(stbi__f2f(3.072711026f)); + int16x4_t rot3_3 = vdup_n_s16(stbi__f2f(1.501321110f)); + +#define dct_long_mul(out, inq, coeff) \ + int32x4_t out##_l = vmull_s16(vget_low_s16(inq), coeff); \ + int32x4_t out##_h = vmull_s16(vget_high_s16(inq), coeff) + +#define dct_long_mac(out, acc, inq, coeff) \ + int32x4_t out##_l = vmlal_s16(acc##_l, vget_low_s16(inq), coeff); \ + int32x4_t out##_h = vmlal_s16(acc##_h, vget_high_s16(inq), coeff) + +#define dct_widen(out, inq) \ + int32x4_t out##_l = vshll_n_s16(vget_low_s16(inq), 12); \ + int32x4_t out##_h = vshll_n_s16(vget_high_s16(inq), 12) + +// wide add +#define dct_wadd(out, a, b) \ + int32x4_t out##_l = vaddq_s32(a##_l, b##_l); \ + int32x4_t out##_h = vaddq_s32(a##_h, b##_h) + +// wide sub +#define dct_wsub(out, a, b) \ + int32x4_t out##_l = vsubq_s32(a##_l, b##_l); \ + int32x4_t out##_h = vsubq_s32(a##_h, b##_h) + +// butterfly a/b, then shift using "shiftop" by "s" and pack +#define dct_bfly32o(out0, out1, a, b, shiftop, s) \ + { \ + dct_wadd(sum, a, b); \ + dct_wsub(dif, a, b); \ + out0 = vcombine_s16(shiftop(sum_l, s), shiftop(sum_h, s)); \ + out1 = vcombine_s16(shiftop(dif_l, s), shiftop(dif_h, s)); \ + } + +#define dct_pass(shiftop, shift) \ + { \ + /* even part */ \ + int16x8_t sum26 = vaddq_s16(row2, row6); \ + dct_long_mul(p1e, sum26, rot0_0); \ + dct_long_mac(t2e, p1e, row6, rot0_1); \ + dct_long_mac(t3e, p1e, row2, rot0_2); \ + int16x8_t sum04 = vaddq_s16(row0, row4); \ + int16x8_t dif04 = vsubq_s16(row0, row4); \ + dct_widen(t0e, sum04); \ + dct_widen(t1e, dif04); \ + dct_wadd(x0, t0e, t3e); \ + dct_wsub(x3, t0e, t3e); \ + dct_wadd(x1, t1e, t2e); \ + dct_wsub(x2, t1e, t2e); \ + /* odd part */ \ + int16x8_t sum15 = vaddq_s16(row1, row5); \ + int16x8_t sum17 = vaddq_s16(row1, row7); \ + int16x8_t sum35 = vaddq_s16(row3, row5); \ + int16x8_t sum37 = vaddq_s16(row3, row7); \ + int16x8_t sumodd = vaddq_s16(sum17, sum35); \ + dct_long_mul(p5o, sumodd, rot1_0); \ + dct_long_mac(p1o, p5o, sum17, rot1_1); \ + dct_long_mac(p2o, p5o, sum35, rot1_2); \ + dct_long_mul(p3o, sum37, rot2_0); \ + dct_long_mul(p4o, sum15, rot2_1); \ + dct_wadd(sump13o, p1o, p3o); \ + dct_wadd(sump24o, p2o, p4o); \ + dct_wadd(sump23o, p2o, p3o); \ + dct_wadd(sump14o, p1o, p4o); \ + dct_long_mac(x4, sump13o, row7, rot3_0); \ + dct_long_mac(x5, sump24o, row5, rot3_1); \ + dct_long_mac(x6, sump23o, row3, rot3_2); \ + dct_long_mac(x7, sump14o, row1, rot3_3); \ + dct_bfly32o(row0, row7, x0, x7, shiftop, shift); \ + dct_bfly32o(row1, row6, x1, x6, shiftop, shift); \ + dct_bfly32o(row2, row5, x2, x5, shiftop, shift); \ + dct_bfly32o(row3, row4, x3, x4, shiftop, shift); \ + } + + // load + row0 = vld1q_s16(data + 0 * 8); + row1 = vld1q_s16(data + 1 * 8); + row2 = vld1q_s16(data + 2 * 8); + row3 = vld1q_s16(data + 3 * 8); + row4 = vld1q_s16(data + 4 * 8); + row5 = vld1q_s16(data + 5 * 8); + row6 = vld1q_s16(data + 6 * 8); + row7 = vld1q_s16(data + 7 * 8); + + // add DC bias + row0 = vaddq_s16(row0, vsetq_lane_s16(1024, vdupq_n_s16(0), 0)); + + // column pass + dct_pass(vrshrn_n_s32, 10); + + // 16bit 8x8 transpose + { +// these three map to a single VTRN.16, VTRN.32, and VSWP, respectively. +// whether compilers actually get this is another story, sadly. +#define dct_trn16(x, y) \ + { \ + int16x8x2_t t = vtrnq_s16(x, y); \ + x = t.val[0]; \ + y = t.val[1]; \ + } +#define dct_trn32(x, y) \ + { \ + int32x4x2_t t = \ + vtrnq_s32(vreinterpretq_s32_s16(x), vreinterpretq_s32_s16(y)); \ + x = vreinterpretq_s16_s32(t.val[0]); \ + y = vreinterpretq_s16_s32(t.val[1]); \ + } +#define dct_trn64(x, y) \ + { \ + int16x8_t x0 = x; \ + int16x8_t y0 = y; \ + x = vcombine_s16(vget_low_s16(x0), vget_low_s16(y0)); \ + y = vcombine_s16(vget_high_s16(x0), vget_high_s16(y0)); \ + } + + // pass 1 + dct_trn16(row0, row1); // a0b0a2b2a4b4a6b6 + dct_trn16(row2, row3); + dct_trn16(row4, row5); + dct_trn16(row6, row7); + + // pass 2 + dct_trn32(row0, row2); // a0b0c0d0a4b4c4d4 + dct_trn32(row1, row3); + dct_trn32(row4, row6); + dct_trn32(row5, row7); + + // pass 3 + dct_trn64(row0, row4); // a0b0c0d0e0f0g0h0 + dct_trn64(row1, row5); + dct_trn64(row2, row6); + dct_trn64(row3, row7); + +#undef dct_trn16 +#undef dct_trn32 +#undef dct_trn64 + } + + // row pass + // vrshrn_n_s32 only supports shifts up to 16, we need + // 17. so do a non-rounding shift of 16 first then follow + // up with a rounding shift by 1. + dct_pass(vshrn_n_s32, 16); + + { + // pack and round + uint8x8_t p0 = vqrshrun_n_s16(row0, 1); + uint8x8_t p1 = vqrshrun_n_s16(row1, 1); + uint8x8_t p2 = vqrshrun_n_s16(row2, 1); + uint8x8_t p3 = vqrshrun_n_s16(row3, 1); + uint8x8_t p4 = vqrshrun_n_s16(row4, 1); + uint8x8_t p5 = vqrshrun_n_s16(row5, 1); + uint8x8_t p6 = vqrshrun_n_s16(row6, 1); + uint8x8_t p7 = vqrshrun_n_s16(row7, 1); + + // again, these can translate into one instruction, but often don't. +#define dct_trn8_8(x, y) \ + { \ + uint8x8x2_t t = vtrn_u8(x, y); \ + x = t.val[0]; \ + y = t.val[1]; \ + } +#define dct_trn8_16(x, y) \ + { \ + uint16x4x2_t t = vtrn_u16(vreinterpret_u16_u8(x), vreinterpret_u16_u8(y)); \ + x = vreinterpret_u8_u16(t.val[0]); \ + y = vreinterpret_u8_u16(t.val[1]); \ + } +#define dct_trn8_32(x, y) \ + { \ + uint32x2x2_t t = vtrn_u32(vreinterpret_u32_u8(x), vreinterpret_u32_u8(y)); \ + x = vreinterpret_u8_u32(t.val[0]); \ + y = vreinterpret_u8_u32(t.val[1]); \ + } + + // sadly can't use interleaved stores here since we only write + // 8 bytes to each scan line! + + // 8x8 8-bit transpose pass 1 + dct_trn8_8(p0, p1); + dct_trn8_8(p2, p3); + dct_trn8_8(p4, p5); + dct_trn8_8(p6, p7); + + // pass 2 + dct_trn8_16(p0, p2); + dct_trn8_16(p1, p3); + dct_trn8_16(p4, p6); + dct_trn8_16(p5, p7); + + // pass 3 + dct_trn8_32(p0, p4); + dct_trn8_32(p1, p5); + dct_trn8_32(p2, p6); + dct_trn8_32(p3, p7); + + // store + vst1_u8(out, p0); + out += out_stride; + vst1_u8(out, p1); + out += out_stride; + vst1_u8(out, p2); + out += out_stride; + vst1_u8(out, p3); + out += out_stride; + vst1_u8(out, p4); + out += out_stride; + vst1_u8(out, p5); + out += out_stride; + vst1_u8(out, p6); + out += out_stride; + vst1_u8(out, p7); + +#undef dct_trn8_8 +#undef dct_trn8_16 +#undef dct_trn8_32 + } + +#undef dct_long_mul +#undef dct_long_mac +#undef dct_widen +#undef dct_wadd +#undef dct_wsub +#undef dct_bfly32o +#undef dct_pass +} + +#endif // STBI_NEON + +#define STBI__MARKER_none 0xff +// if there's a pending marker from the entropy stream, return that +// otherwise, fetch from the stream and get a marker. if there's no +// marker, return 0xff, which is never a valid marker value +static stbi_uc stbi__get_marker(stbi__jpeg *j) { + stbi_uc x; + if (j->marker != STBI__MARKER_none) { + x = j->marker; + j->marker = STBI__MARKER_none; + return x; + } + x = stbi__get8(j->s); + if (x != 0xff) return STBI__MARKER_none; + while (x == 0xff) x = stbi__get8(j->s); // consume repeated 0xff fill bytes + return x; +} + +// in each scan, we'll have scan_n components, and the order +// of the components is specified by order[] +#define STBI__RESTART(x) ((x) >= 0xd0 && (x) <= 0xd7) + +// after a restart interval, stbi__jpeg_reset the entropy decoder and +// the dc prediction +static void stbi__jpeg_reset(stbi__jpeg *j) { + j->code_bits = 0; + j->code_buffer = 0; + j->nomore = 0; + j->img_comp[0].dc_pred = j->img_comp[1].dc_pred = j->img_comp[2].dc_pred = + j->img_comp[3].dc_pred = 0; + j->marker = STBI__MARKER_none; + j->todo = j->restart_interval ? j->restart_interval : 0x7fffffff; + j->eob_run = 0; + // no more than 1<<31 MCUs if no restart_interal? that's plenty safe, + // since we don't even allow 1<<30 pixels +} + +static int stbi__parse_entropy_coded_data(stbi__jpeg *z) { + stbi__jpeg_reset(z); + if (!z->progressive) { + if (z->scan_n == 1) { + int i, j; + STBI_SIMD_ALIGN(short, data[64]); + int n = z->order[0]; + // non-interleaved data, we just need to process one block at a time, + // in trivial scanline order + // number of blocks to do just depends on how many actual "pixels" this + // component has, independent of interleaved MCU blocking and such + int w = (z->img_comp[n].x + 7) >> 3; + int h = (z->img_comp[n].y + 7) >> 3; + for (j = 0; j < h; ++j) { + for (i = 0; i < w; ++i) { + int ha = z->img_comp[n].ha; + if (!stbi__jpeg_decode_block(z, data, z->huff_dc + z->img_comp[n].hd, + z->huff_ac + ha, z->fast_ac[ha], n, + z->dequant[z->img_comp[n].tq])) + return 0; + z->idct_block_kernel( + z->img_comp[n].data + z->img_comp[n].w2 * j * 8 + i * 8, + z->img_comp[n].w2, data); + // every data block is an MCU, so countdown the restart interval + if (--z->todo <= 0) { + if (z->code_bits < 24) stbi__grow_buffer_unsafe(z); + // if it's NOT a restart, then just bail, so we get corrupt data + // rather than no data + if (!STBI__RESTART(z->marker)) return 1; + stbi__jpeg_reset(z); + } + } + } + return 1; + } else { // interleaved + int i, j, k, x, y; + STBI_SIMD_ALIGN(short, data[64]); + for (j = 0; j < z->img_mcu_y; ++j) { + for (i = 0; i < z->img_mcu_x; ++i) { + // scan an interleaved mcu... process scan_n components in order + for (k = 0; k < z->scan_n; ++k) { + int n = z->order[k]; + // scan out an mcu's worth of this component; that's just determined + // by the basic H and V specified for the component + for (y = 0; y < z->img_comp[n].v; ++y) { + for (x = 0; x < z->img_comp[n].h; ++x) { + int x2 = (i * z->img_comp[n].h + x) * 8; + int y2 = (j * z->img_comp[n].v + y) * 8; + int ha = z->img_comp[n].ha; + if (!stbi__jpeg_decode_block(z, data, + z->huff_dc + z->img_comp[n].hd, + z->huff_ac + ha, z->fast_ac[ha], n, + z->dequant[z->img_comp[n].tq])) + return 0; + z->idct_block_kernel( + z->img_comp[n].data + z->img_comp[n].w2 * y2 + x2, + z->img_comp[n].w2, data); + } + } + } + // after all interleaved components, that's an interleaved MCU, + // so now count down the restart interval + if (--z->todo <= 0) { + if (z->code_bits < 24) stbi__grow_buffer_unsafe(z); + if (!STBI__RESTART(z->marker)) return 1; + stbi__jpeg_reset(z); + } + } + } + return 1; + } + } else { + if (z->scan_n == 1) { + int i, j; + int n = z->order[0]; + // non-interleaved data, we just need to process one block at a time, + // in trivial scanline order + // number of blocks to do just depends on how many actual "pixels" this + // component has, independent of interleaved MCU blocking and such + int w = (z->img_comp[n].x + 7) >> 3; + int h = (z->img_comp[n].y + 7) >> 3; + for (j = 0; j < h; ++j) { + for (i = 0; i < w; ++i) { + short *data = + z->img_comp[n].coeff + 64 * (i + j * z->img_comp[n].coeff_w); + if (z->spec_start == 0) { + if (!stbi__jpeg_decode_block_prog_dc( + z, data, &z->huff_dc[z->img_comp[n].hd], n)) + return 0; + } else { + int ha = z->img_comp[n].ha; + if (!stbi__jpeg_decode_block_prog_ac(z, data, &z->huff_ac[ha], + z->fast_ac[ha])) + return 0; + } + // every data block is an MCU, so countdown the restart interval + if (--z->todo <= 0) { + if (z->code_bits < 24) stbi__grow_buffer_unsafe(z); + if (!STBI__RESTART(z->marker)) return 1; + stbi__jpeg_reset(z); + } + } + } + return 1; + } else { // interleaved + int i, j, k, x, y; + for (j = 0; j < z->img_mcu_y; ++j) { + for (i = 0; i < z->img_mcu_x; ++i) { + // scan an interleaved mcu... process scan_n components in order + for (k = 0; k < z->scan_n; ++k) { + int n = z->order[k]; + // scan out an mcu's worth of this component; that's just determined + // by the basic H and V specified for the component + for (y = 0; y < z->img_comp[n].v; ++y) { + for (x = 0; x < z->img_comp[n].h; ++x) { + int x2 = (i * z->img_comp[n].h + x); + int y2 = (j * z->img_comp[n].v + y); + short *data = z->img_comp[n].coeff + + 64 * (x2 + y2 * z->img_comp[n].coeff_w); + if (!stbi__jpeg_decode_block_prog_dc( + z, data, &z->huff_dc[z->img_comp[n].hd], n)) + return 0; + } + } + } + // after all interleaved components, that's an interleaved MCU, + // so now count down the restart interval + if (--z->todo <= 0) { + if (z->code_bits < 24) stbi__grow_buffer_unsafe(z); + if (!STBI__RESTART(z->marker)) return 1; + stbi__jpeg_reset(z); + } + } + } + return 1; + } + } +} + +static void stbi__jpeg_dequantize(short *data, stbi__uint16 *dequant) { + int i; + for (i = 0; i < 64; ++i) data[i] *= dequant[i]; +} + +static void stbi__jpeg_finish(stbi__jpeg *z) { + if (z->progressive) { + // dequantize and idct the data + int i, j, n; + for (n = 0; n < z->s->img_n; ++n) { + int w = (z->img_comp[n].x + 7) >> 3; + int h = (z->img_comp[n].y + 7) >> 3; + for (j = 0; j < h; ++j) { + for (i = 0; i < w; ++i) { + short *data = + z->img_comp[n].coeff + 64 * (i + j * z->img_comp[n].coeff_w); + stbi__jpeg_dequantize(data, z->dequant[z->img_comp[n].tq]); + z->idct_block_kernel( + z->img_comp[n].data + z->img_comp[n].w2 * j * 8 + i * 8, + z->img_comp[n].w2, data); + } + } + } + } +} + +static int stbi__process_marker(stbi__jpeg *z, int m) { + int L; + switch (m) { + case STBI__MARKER_none: // no marker found + return stbi__err("expected marker", "Corrupt JPEG"); + + case 0xDD: // DRI - specify restart interval + if (stbi__get16be(z->s) != 4) + return stbi__err("bad DRI len", "Corrupt JPEG"); + z->restart_interval = stbi__get16be(z->s); + return 1; + + case 0xDB: // DQT - define quantization table + L = stbi__get16be(z->s) - 2; + while (L > 0) { + int q = stbi__get8(z->s); + int p = q >> 4, sixteen = (p != 0); + int t = q & 15, i; + if (p != 0 && p != 1) return stbi__err("bad DQT type", "Corrupt JPEG"); + if (t > 3) return stbi__err("bad DQT table", "Corrupt JPEG"); + + for (i = 0; i < 64; ++i) + z->dequant[t][stbi__jpeg_dezigzag[i]] = + (stbi__uint16)(sixteen ? stbi__get16be(z->s) : stbi__get8(z->s)); + L -= (sixteen ? 129 : 65); + } + return L == 0; + + case 0xC4: // DHT - define huffman table + L = stbi__get16be(z->s) - 2; + while (L > 0) { + stbi_uc *v; + int sizes[16], i, n = 0; + int q = stbi__get8(z->s); + int tc = q >> 4; + int th = q & 15; + if (tc > 1 || th > 3) + return stbi__err("bad DHT header", "Corrupt JPEG"); + for (i = 0; i < 16; ++i) { + sizes[i] = stbi__get8(z->s); + n += sizes[i]; + } + if (n > 256) + return stbi__err("bad DHT header", + "Corrupt JPEG"); // Loop over i < n would write past + // end of values! + L -= 17; + if (tc == 0) { + if (!stbi__build_huffman(z->huff_dc + th, sizes)) return 0; + v = z->huff_dc[th].values; + } else { + if (!stbi__build_huffman(z->huff_ac + th, sizes)) return 0; + v = z->huff_ac[th].values; + } + for (i = 0; i < n; ++i) v[i] = stbi__get8(z->s); + if (tc != 0) stbi__build_fast_ac(z->fast_ac[th], z->huff_ac + th); + L -= n; + } + return L == 0; + } + + // check for comment block or APP blocks + if ((m >= 0xE0 && m <= 0xEF) || m == 0xFE) { + L = stbi__get16be(z->s); + if (L < 2) { + if (m == 0xFE) + return stbi__err("bad COM len", "Corrupt JPEG"); + else + return stbi__err("bad APP len", "Corrupt JPEG"); + } + L -= 2; + + if (m == 0xE0 && L >= 5) { // JFIF APP0 segment + static const unsigned char tag[5] = {'J', 'F', 'I', 'F', '\0'}; + int ok = 1; + int i; + for (i = 0; i < 5; ++i) + if (stbi__get8(z->s) != tag[i]) ok = 0; + L -= 5; + if (ok) z->jfif = 1; + } else if (m == 0xEE && L >= 12) { // Adobe APP14 segment + static const unsigned char tag[6] = {'A', 'd', 'o', 'b', 'e', '\0'}; + int ok = 1; + int i; + for (i = 0; i < 6; ++i) + if (stbi__get8(z->s) != tag[i]) ok = 0; + L -= 6; + if (ok) { + stbi__get8(z->s); // version + stbi__get16be(z->s); // flags0 + stbi__get16be(z->s); // flags1 + z->app14_color_transform = stbi__get8(z->s); // color transform + L -= 6; + } + } + + stbi__skip(z->s, L); + return 1; + } + + return stbi__err("unknown marker", "Corrupt JPEG"); +} + +// after we see SOS +static int stbi__process_scan_header(stbi__jpeg *z) { + int i; + int Ls = stbi__get16be(z->s); + z->scan_n = stbi__get8(z->s); + if (z->scan_n < 1 || z->scan_n > 4 || z->scan_n > (int)z->s->img_n) + return stbi__err("bad SOS component count", "Corrupt JPEG"); + if (Ls != 6 + 2 * z->scan_n) return stbi__err("bad SOS len", "Corrupt JPEG"); + for (i = 0; i < z->scan_n; ++i) { + int id = stbi__get8(z->s), which; + int q = stbi__get8(z->s); + for (which = 0; which < z->s->img_n; ++which) + if (z->img_comp[which].id == id) break; + if (which == z->s->img_n) return 0; // no match + z->img_comp[which].hd = q >> 4; + if (z->img_comp[which].hd > 3) + return stbi__err("bad DC huff", "Corrupt JPEG"); + z->img_comp[which].ha = q & 15; + if (z->img_comp[which].ha > 3) + return stbi__err("bad AC huff", "Corrupt JPEG"); + z->order[i] = which; + } + + { + int aa; + z->spec_start = stbi__get8(z->s); + z->spec_end = stbi__get8(z->s); // should be 63, but might be 0 + aa = stbi__get8(z->s); + z->succ_high = (aa >> 4); + z->succ_low = (aa & 15); + if (z->progressive) { + if (z->spec_start > 63 || z->spec_end > 63 || + z->spec_start > z->spec_end || z->succ_high > 13 || z->succ_low > 13) + return stbi__err("bad SOS", "Corrupt JPEG"); + } else { + if (z->spec_start != 0) return stbi__err("bad SOS", "Corrupt JPEG"); + if (z->succ_high != 0 || z->succ_low != 0) + return stbi__err("bad SOS", "Corrupt JPEG"); + z->spec_end = 63; + } + } + + return 1; +} + +static int stbi__free_jpeg_components(stbi__jpeg *z, int ncomp, int why) { + int i; + for (i = 0; i < ncomp; ++i) { + if (z->img_comp[i].raw_data) { + STBI_FREE(z->img_comp[i].raw_data); + z->img_comp[i].raw_data = NULL; + z->img_comp[i].data = NULL; + } + if (z->img_comp[i].raw_coeff) { + STBI_FREE(z->img_comp[i].raw_coeff); + z->img_comp[i].raw_coeff = 0; + z->img_comp[i].coeff = 0; + } + if (z->img_comp[i].linebuf) { + STBI_FREE(z->img_comp[i].linebuf); + z->img_comp[i].linebuf = NULL; + } + } + return why; +} + +static int stbi__process_frame_header(stbi__jpeg *z, int scan) { + stbi__context *s = z->s; + int Lf, p, i, q, h_max = 1, v_max = 1, c; + Lf = stbi__get16be(s); + if (Lf < 11) return stbi__err("bad SOF len", "Corrupt JPEG"); // JPEG + p = stbi__get8(s); + if (p != 8) + return stbi__err("only 8-bit", + "JPEG format not supported: 8-bit only"); // JPEG baseline + s->img_y = stbi__get16be(s); + if (s->img_y == 0) + return stbi__err( + "no header height", + "JPEG format not supported: delayed height"); // Legal, but we don't + // handle it--but neither + // does IJG + s->img_x = stbi__get16be(s); + if (s->img_x == 0) + return stbi__err("0 width", "Corrupt JPEG"); // JPEG requires + if (s->img_y > STBI_MAX_DIMENSIONS) + return stbi__err("too large", "Very large image (corrupt?)"); + if (s->img_x > STBI_MAX_DIMENSIONS) + return stbi__err("too large", "Very large image (corrupt?)"); + c = stbi__get8(s); + if (c != 3 && c != 1 && c != 4) + return stbi__err("bad component count", "Corrupt JPEG"); + s->img_n = c; + for (i = 0; i < c; ++i) { + z->img_comp[i].data = NULL; + z->img_comp[i].linebuf = NULL; + } + + if (Lf != 8 + 3 * s->img_n) return stbi__err("bad SOF len", "Corrupt JPEG"); + + z->rgb = 0; + for (i = 0; i < s->img_n; ++i) { + static const unsigned char rgb[3] = {'R', 'G', 'B'}; + z->img_comp[i].id = stbi__get8(s); + if (s->img_n == 3 && z->img_comp[i].id == rgb[i]) ++z->rgb; + q = stbi__get8(s); + z->img_comp[i].h = (q >> 4); + if (!z->img_comp[i].h || z->img_comp[i].h > 4) + return stbi__err("bad H", "Corrupt JPEG"); + z->img_comp[i].v = q & 15; + if (!z->img_comp[i].v || z->img_comp[i].v > 4) + return stbi__err("bad V", "Corrupt JPEG"); + z->img_comp[i].tq = stbi__get8(s); + if (z->img_comp[i].tq > 3) return stbi__err("bad TQ", "Corrupt JPEG"); + } + + if (scan != STBI__SCAN_load) return 1; + + if (!stbi__mad3sizes_valid(s->img_x, s->img_y, s->img_n, 0)) + return stbi__err("too large", "Image too large to decode"); + + for (i = 0; i < s->img_n; ++i) { + if (z->img_comp[i].h > h_max) h_max = z->img_comp[i].h; + if (z->img_comp[i].v > v_max) v_max = z->img_comp[i].v; + } + + // check that plane subsampling factors are integer ratios; our resamplers + // can't deal with fractional ratios and I've never seen a non-corrupted JPEG + // file actually use them + for (i = 0; i < s->img_n; ++i) { + if (h_max % z->img_comp[i].h != 0) + return stbi__err("bad H", "Corrupt JPEG"); + if (v_max % z->img_comp[i].v != 0) + return stbi__err("bad V", "Corrupt JPEG"); + } + + // compute interleaved mcu info + z->img_h_max = h_max; + z->img_v_max = v_max; + z->img_mcu_w = h_max * 8; + z->img_mcu_h = v_max * 8; + // these sizes can't be more than 17 bits + z->img_mcu_x = (s->img_x + z->img_mcu_w - 1) / z->img_mcu_w; + z->img_mcu_y = (s->img_y + z->img_mcu_h - 1) / z->img_mcu_h; + + for (i = 0; i < s->img_n; ++i) { + // number of effective pixels (e.g. for non-interleaved MCU) + z->img_comp[i].x = (s->img_x * z->img_comp[i].h + h_max - 1) / h_max; + z->img_comp[i].y = (s->img_y * z->img_comp[i].v + v_max - 1) / v_max; + // to simplify generation, we'll allocate enough memory to decode + // the bogus oversized data from using interleaved MCUs and their + // big blocks (e.g. a 16x16 iMCU on an image of width 33); we won't + // discard the extra data until colorspace conversion + // + // img_mcu_x, img_mcu_y: <=17 bits; comp[i].h and .v are <=4 (checked + // earlier) so these muls can't overflow with 32-bit ints (which we require) + z->img_comp[i].w2 = z->img_mcu_x * z->img_comp[i].h * 8; + z->img_comp[i].h2 = z->img_mcu_y * z->img_comp[i].v * 8; + z->img_comp[i].coeff = 0; + z->img_comp[i].raw_coeff = 0; + z->img_comp[i].linebuf = NULL; + z->img_comp[i].raw_data = + stbi__malloc_mad2(z->img_comp[i].w2, z->img_comp[i].h2, 15); + if (z->img_comp[i].raw_data == NULL) + return stbi__free_jpeg_components(z, i + 1, + stbi__err("outofmem", "Out of memory")); + // align blocks for idct using mmx/sse + z->img_comp[i].data = + (stbi_uc *)(((size_t)z->img_comp[i].raw_data + 15) & ~15); + if (z->progressive) { + // w2, h2 are multiples of 8 (see above) + z->img_comp[i].coeff_w = z->img_comp[i].w2 / 8; + z->img_comp[i].coeff_h = z->img_comp[i].h2 / 8; + z->img_comp[i].raw_coeff = stbi__malloc_mad3( + z->img_comp[i].w2, z->img_comp[i].h2, sizeof(short), 15); + if (z->img_comp[i].raw_coeff == NULL) + return stbi__free_jpeg_components( + z, i + 1, stbi__err("outofmem", "Out of memory")); + z->img_comp[i].coeff = + (short *)(((size_t)z->img_comp[i].raw_coeff + 15) & ~15); + } + } + + return 1; +} + +// use comparisons since in some cases we handle more than one case (e.g. SOF) +#define stbi__DNL(x) ((x) == 0xdc) +#define stbi__SOI(x) ((x) == 0xd8) +#define stbi__EOI(x) ((x) == 0xd9) +#define stbi__SOF(x) ((x) == 0xc0 || (x) == 0xc1 || (x) == 0xc2) +#define stbi__SOS(x) ((x) == 0xda) + +#define stbi__SOF_progressive(x) ((x) == 0xc2) + +static int stbi__decode_jpeg_header(stbi__jpeg *z, int scan) { + int m; + z->jfif = 0; + z->app14_color_transform = -1; // valid values are 0,1,2 + z->marker = STBI__MARKER_none; // initialize cached marker to empty + m = stbi__get_marker(z); + if (!stbi__SOI(m)) return stbi__err("no SOI", "Corrupt JPEG"); + if (scan == STBI__SCAN_type) return 1; + m = stbi__get_marker(z); + while (!stbi__SOF(m)) { + if (!stbi__process_marker(z, m)) return 0; + m = stbi__get_marker(z); + while (m == STBI__MARKER_none) { + // some files have extra padding after their blocks, so ok, we'll scan + if (stbi__at_eof(z->s)) return stbi__err("no SOF", "Corrupt JPEG"); + m = stbi__get_marker(z); + } + } + z->progressive = stbi__SOF_progressive(m); + if (!stbi__process_frame_header(z, scan)) return 0; + return 1; +} + +static stbi_uc stbi__skip_jpeg_junk_at_end(stbi__jpeg *j) { + // some JPEGs have junk at end, skip over it but if we find what looks + // like a valid marker, resume there + while (!stbi__at_eof(j->s)) { + stbi_uc x = stbi__get8(j->s); + while (x == 0xff) { // might be a marker + if (stbi__at_eof(j->s)) return STBI__MARKER_none; + x = stbi__get8(j->s); + if (x != 0x00 && x != 0xff) { + // not a stuffed zero or lead-in to another marker, looks + // like an actual marker, return it + return x; + } + // stuffed zero has x=0 now which ends the loop, meaning we go + // back to regular scan loop. + // repeated 0xff keeps trying to read the next byte of the marker. + } + } + return STBI__MARKER_none; +} + +// decode image to YCbCr format +static int stbi__decode_jpeg_image(stbi__jpeg *j) { + int m; + for (m = 0; m < 4; m++) { + j->img_comp[m].raw_data = NULL; + j->img_comp[m].raw_coeff = NULL; + } + j->restart_interval = 0; + if (!stbi__decode_jpeg_header(j, STBI__SCAN_load)) return 0; + m = stbi__get_marker(j); + while (!stbi__EOI(m)) { + if (stbi__SOS(m)) { + if (!stbi__process_scan_header(j)) return 0; + if (!stbi__parse_entropy_coded_data(j)) return 0; + if (j->marker == STBI__MARKER_none) { + j->marker = stbi__skip_jpeg_junk_at_end(j); + // if we reach eof without hitting a marker, stbi__get_marker() below + // will fail and we'll eventually return 0 + } + m = stbi__get_marker(j); + if (STBI__RESTART(m)) m = stbi__get_marker(j); + } else if (stbi__DNL(m)) { + int Ld = stbi__get16be(j->s); + stbi__uint32 NL = stbi__get16be(j->s); + if (Ld != 4) return stbi__err("bad DNL len", "Corrupt JPEG"); + if (NL != j->s->img_y) return stbi__err("bad DNL height", "Corrupt JPEG"); + m = stbi__get_marker(j); + } else { + if (!stbi__process_marker(j, m)) return 1; + m = stbi__get_marker(j); + } + } + if (j->progressive) stbi__jpeg_finish(j); + return 1; +} + +// static jfif-centered resampling (across block boundaries) + +typedef stbi_uc *(*resample_row_func)(stbi_uc *out, stbi_uc *in0, stbi_uc *in1, + int w, int hs); + +#define stbi__div4(x) ((stbi_uc)((x) >> 2)) + +static stbi_uc *resample_row_1(stbi_uc *out, stbi_uc *in_near, stbi_uc *in_far, + int w, int hs) { + STBI_NOTUSED(out); + STBI_NOTUSED(in_far); + STBI_NOTUSED(w); + STBI_NOTUSED(hs); + return in_near; +} + +static stbi_uc *stbi__resample_row_v_2(stbi_uc *out, stbi_uc *in_near, + stbi_uc *in_far, int w, int hs) { + // need to generate two samples vertically for every one in input + int i; + STBI_NOTUSED(hs); + for (i = 0; i < w; ++i) out[i] = stbi__div4(3 * in_near[i] + in_far[i] + 2); + return out; +} + +static stbi_uc *stbi__resample_row_h_2(stbi_uc *out, stbi_uc *in_near, + stbi_uc *in_far, int w, int hs) { + // need to generate two samples horizontally for every one in input + int i; + stbi_uc *input = in_near; + + if (w == 1) { + // if only one sample, can't do any interpolation + out[0] = out[1] = input[0]; + return out; + } + + out[0] = input[0]; + out[1] = stbi__div4(input[0] * 3 + input[1] + 2); + for (i = 1; i < w - 1; ++i) { + int n = 3 * input[i] + 2; + out[i * 2 + 0] = stbi__div4(n + input[i - 1]); + out[i * 2 + 1] = stbi__div4(n + input[i + 1]); + } + out[i * 2 + 0] = stbi__div4(input[w - 2] * 3 + input[w - 1] + 2); + out[i * 2 + 1] = input[w - 1]; + + STBI_NOTUSED(in_far); + STBI_NOTUSED(hs); + + return out; +} + +#define stbi__div16(x) ((stbi_uc)((x) >> 4)) + +static stbi_uc *stbi__resample_row_hv_2(stbi_uc *out, stbi_uc *in_near, + stbi_uc *in_far, int w, int hs) { + // need to generate 2x2 samples for every one in input + int i, t0, t1; + if (w == 1) { + out[0] = out[1] = stbi__div4(3 * in_near[0] + in_far[0] + 2); + return out; + } + + t1 = 3 * in_near[0] + in_far[0]; + out[0] = stbi__div4(t1 + 2); + for (i = 1; i < w; ++i) { + t0 = t1; + t1 = 3 * in_near[i] + in_far[i]; + out[i * 2 - 1] = stbi__div16(3 * t0 + t1 + 8); + out[i * 2] = stbi__div16(3 * t1 + t0 + 8); + } + out[w * 2 - 1] = stbi__div4(t1 + 2); + + STBI_NOTUSED(hs); + + return out; +} + +#if defined(STBI_SSE2) || defined(STBI_NEON) +static stbi_uc *stbi__resample_row_hv_2_simd(stbi_uc *out, stbi_uc *in_near, + stbi_uc *in_far, int w, int hs) { + // need to generate 2x2 samples for every one in input + int i = 0, t0, t1; + + if (w == 1) { + out[0] = out[1] = stbi__div4(3 * in_near[0] + in_far[0] + 2); + return out; + } + + t1 = 3 * in_near[0] + in_far[0]; + // process groups of 8 pixels for as long as we can. + // note we can't handle the last pixel in a row in this loop + // because we need to handle the filter boundary conditions. + for (; i < ((w - 1) & ~7); i += 8) { +#if defined(STBI_SSE2) + // load and perform the vertical filtering pass + // this uses 3*x + y = 4*x + (y - x) + __m128i zero = _mm_setzero_si128(); + __m128i farb = _mm_loadl_epi64((__m128i *)(in_far + i)); + __m128i nearb = _mm_loadl_epi64((__m128i *)(in_near + i)); + __m128i farw = _mm_unpacklo_epi8(farb, zero); + __m128i nearw = _mm_unpacklo_epi8(nearb, zero); + __m128i diff = _mm_sub_epi16(farw, nearw); + __m128i nears = _mm_slli_epi16(nearw, 2); + __m128i curr = _mm_add_epi16(nears, diff); // current row + + // horizontal filter works the same based on shifted vers of current + // row. "prev" is current row shifted right by 1 pixel; we need to + // insert the previous pixel value (from t1). + // "next" is current row shifted left by 1 pixel, with first pixel + // of next block of 8 pixels added in. + __m128i prv0 = _mm_slli_si128(curr, 2); + __m128i nxt0 = _mm_srli_si128(curr, 2); + __m128i prev = _mm_insert_epi16(prv0, t1, 0); + __m128i next = + _mm_insert_epi16(nxt0, 3 * in_near[i + 8] + in_far[i + 8], 7); + + // horizontal filter, polyphase implementation since it's convenient: + // even pixels = 3*cur + prev = cur*4 + (prev - cur) + // odd pixels = 3*cur + next = cur*4 + (next - cur) + // note the shared term. + __m128i bias = _mm_set1_epi16(8); + __m128i curs = _mm_slli_epi16(curr, 2); + __m128i prvd = _mm_sub_epi16(prev, curr); + __m128i nxtd = _mm_sub_epi16(next, curr); + __m128i curb = _mm_add_epi16(curs, bias); + __m128i even = _mm_add_epi16(prvd, curb); + __m128i odd = _mm_add_epi16(nxtd, curb); + + // interleave even and odd pixels, then undo scaling. + __m128i int0 = _mm_unpacklo_epi16(even, odd); + __m128i int1 = _mm_unpackhi_epi16(even, odd); + __m128i de0 = _mm_srli_epi16(int0, 4); + __m128i de1 = _mm_srli_epi16(int1, 4); + + // pack and write output + __m128i outv = _mm_packus_epi16(de0, de1); + _mm_storeu_si128((__m128i *)(out + i * 2), outv); +#elif defined(STBI_NEON) + // load and perform the vertical filtering pass + // this uses 3*x + y = 4*x + (y - x) + uint8x8_t farb = vld1_u8(in_far + i); + uint8x8_t nearb = vld1_u8(in_near + i); + int16x8_t diff = vreinterpretq_s16_u16(vsubl_u8(farb, nearb)); + int16x8_t nears = vreinterpretq_s16_u16(vshll_n_u8(nearb, 2)); + int16x8_t curr = vaddq_s16(nears, diff); // current row + + // horizontal filter works the same based on shifted vers of current + // row. "prev" is current row shifted right by 1 pixel; we need to + // insert the previous pixel value (from t1). + // "next" is current row shifted left by 1 pixel, with first pixel + // of next block of 8 pixels added in. + int16x8_t prv0 = vextq_s16(curr, curr, 7); + int16x8_t nxt0 = vextq_s16(curr, curr, 1); + int16x8_t prev = vsetq_lane_s16(t1, prv0, 0); + int16x8_t next = + vsetq_lane_s16(3 * in_near[i + 8] + in_far[i + 8], nxt0, 7); + + // horizontal filter, polyphase implementation since it's convenient: + // even pixels = 3*cur + prev = cur*4 + (prev - cur) + // odd pixels = 3*cur + next = cur*4 + (next - cur) + // note the shared term. + int16x8_t curs = vshlq_n_s16(curr, 2); + int16x8_t prvd = vsubq_s16(prev, curr); + int16x8_t nxtd = vsubq_s16(next, curr); + int16x8_t even = vaddq_s16(curs, prvd); + int16x8_t odd = vaddq_s16(curs, nxtd); + + // undo scaling and round, then store with even/odd phases interleaved + uint8x8x2_t o; + o.val[0] = vqrshrun_n_s16(even, 4); + o.val[1] = vqrshrun_n_s16(odd, 4); + vst2_u8(out + i * 2, o); +#endif + + // "previous" value for next iter + t1 = 3 * in_near[i + 7] + in_far[i + 7]; + } + + t0 = t1; + t1 = 3 * in_near[i] + in_far[i]; + out[i * 2] = stbi__div16(3 * t1 + t0 + 8); + + for (++i; i < w; ++i) { + t0 = t1; + t1 = 3 * in_near[i] + in_far[i]; + out[i * 2 - 1] = stbi__div16(3 * t0 + t1 + 8); + out[i * 2] = stbi__div16(3 * t1 + t0 + 8); + } + out[w * 2 - 1] = stbi__div4(t1 + 2); + + STBI_NOTUSED(hs); + + return out; +} +#endif + +static stbi_uc *stbi__resample_row_generic(stbi_uc *out, stbi_uc *in_near, + stbi_uc *in_far, int w, int hs) { + // resample with nearest-neighbor + int i, j; + STBI_NOTUSED(in_far); + for (i = 0; i < w; ++i) + for (j = 0; j < hs; ++j) out[i * hs + j] = in_near[i]; + return out; +} + +// this is a reduced-precision calculation of YCbCr-to-RGB introduced +// to make sure the code produces the same results in both SIMD and scalar +#define stbi__float2fixed(x) (((int)((x) * 4096.0f + 0.5f)) << 8) +static void stbi__YCbCr_to_RGB_row(stbi_uc *out, const stbi_uc *y, + const stbi_uc *pcb, const stbi_uc *pcr, + int count, int step) { + int i; + for (i = 0; i < count; ++i) { + int y_fixed = (y[i] << 20) + (1 << 19); // rounding + int r, g, b; + int cr = pcr[i] - 128; + int cb = pcb[i] - 128; + r = y_fixed + cr * stbi__float2fixed(1.40200f); + g = y_fixed + (cr * -stbi__float2fixed(0.71414f)) + + ((cb * -stbi__float2fixed(0.34414f)) & 0xffff0000); + b = y_fixed + cb * stbi__float2fixed(1.77200f); + r >>= 20; + g >>= 20; + b >>= 20; + if ((unsigned)r > 255) { + if (r < 0) + r = 0; + else + r = 255; + } + if ((unsigned)g > 255) { + if (g < 0) + g = 0; + else + g = 255; + } + if ((unsigned)b > 255) { + if (b < 0) + b = 0; + else + b = 255; + } + out[0] = (stbi_uc)r; + out[1] = (stbi_uc)g; + out[2] = (stbi_uc)b; + out[3] = 255; + out += step; + } +} + +#if defined(STBI_SSE2) || defined(STBI_NEON) +static void stbi__YCbCr_to_RGB_simd(stbi_uc *out, stbi_uc const *y, + stbi_uc const *pcb, stbi_uc const *pcr, + int count, int step) { + int i = 0; + +#ifdef STBI_SSE2 + // step == 3 is pretty ugly on the final interleave, and i'm not convinced + // it's useful in practice (you wouldn't use it for textures, for example). + // so just accelerate step == 4 case. + if (step == 4) { + // this is a fairly straightforward implementation and not super-optimized. + __m128i signflip = _mm_set1_epi8(-0x80); + __m128i cr_const0 = _mm_set1_epi16((short)(1.40200f * 4096.0f + 0.5f)); + __m128i cr_const1 = _mm_set1_epi16(-(short)(0.71414f * 4096.0f + 0.5f)); + __m128i cb_const0 = _mm_set1_epi16(-(short)(0.34414f * 4096.0f + 0.5f)); + __m128i cb_const1 = _mm_set1_epi16((short)(1.77200f * 4096.0f + 0.5f)); + __m128i y_bias = _mm_set1_epi8((char)(unsigned char)128); + __m128i xw = _mm_set1_epi16(255); // alpha channel + + for (; i + 7 < count; i += 8) { + // load + __m128i y_bytes = _mm_loadl_epi64((__m128i *)(y + i)); + __m128i cr_bytes = _mm_loadl_epi64((__m128i *)(pcr + i)); + __m128i cb_bytes = _mm_loadl_epi64((__m128i *)(pcb + i)); + __m128i cr_biased = _mm_xor_si128(cr_bytes, signflip); // -128 + __m128i cb_biased = _mm_xor_si128(cb_bytes, signflip); // -128 + + // unpack to short (and left-shift cr, cb by 8) + __m128i yw = _mm_unpacklo_epi8(y_bias, y_bytes); + __m128i crw = _mm_unpacklo_epi8(_mm_setzero_si128(), cr_biased); + __m128i cbw = _mm_unpacklo_epi8(_mm_setzero_si128(), cb_biased); + + // color transform + __m128i yws = _mm_srli_epi16(yw, 4); + __m128i cr0 = _mm_mulhi_epi16(cr_const0, crw); + __m128i cb0 = _mm_mulhi_epi16(cb_const0, cbw); + __m128i cb1 = _mm_mulhi_epi16(cbw, cb_const1); + __m128i cr1 = _mm_mulhi_epi16(crw, cr_const1); + __m128i rws = _mm_add_epi16(cr0, yws); + __m128i gwt = _mm_add_epi16(cb0, yws); + __m128i bws = _mm_add_epi16(yws, cb1); + __m128i gws = _mm_add_epi16(gwt, cr1); + + // descale + __m128i rw = _mm_srai_epi16(rws, 4); + __m128i bw = _mm_srai_epi16(bws, 4); + __m128i gw = _mm_srai_epi16(gws, 4); + + // back to byte, set up for transpose + __m128i brb = _mm_packus_epi16(rw, bw); + __m128i gxb = _mm_packus_epi16(gw, xw); + + // transpose to interleave channels + __m128i t0 = _mm_unpacklo_epi8(brb, gxb); + __m128i t1 = _mm_unpackhi_epi8(brb, gxb); + __m128i o0 = _mm_unpacklo_epi16(t0, t1); + __m128i o1 = _mm_unpackhi_epi16(t0, t1); + + // store + _mm_storeu_si128((__m128i *)(out + 0), o0); + _mm_storeu_si128((__m128i *)(out + 16), o1); + out += 32; + } + } +#endif + +#ifdef STBI_NEON + // in this version, step=3 support would be easy to add. but is there demand? + if (step == 4) { + // this is a fairly straightforward implementation and not super-optimized. + uint8x8_t signflip = vdup_n_u8(0x80); + int16x8_t cr_const0 = vdupq_n_s16((short)(1.40200f * 4096.0f + 0.5f)); + int16x8_t cr_const1 = vdupq_n_s16(-(short)(0.71414f * 4096.0f + 0.5f)); + int16x8_t cb_const0 = vdupq_n_s16(-(short)(0.34414f * 4096.0f + 0.5f)); + int16x8_t cb_const1 = vdupq_n_s16((short)(1.77200f * 4096.0f + 0.5f)); + + for (; i + 7 < count; i += 8) { + // load + uint8x8_t y_bytes = vld1_u8(y + i); + uint8x8_t cr_bytes = vld1_u8(pcr + i); + uint8x8_t cb_bytes = vld1_u8(pcb + i); + int8x8_t cr_biased = vreinterpret_s8_u8(vsub_u8(cr_bytes, signflip)); + int8x8_t cb_biased = vreinterpret_s8_u8(vsub_u8(cb_bytes, signflip)); + + // expand to s16 + int16x8_t yws = vreinterpretq_s16_u16(vshll_n_u8(y_bytes, 4)); + int16x8_t crw = vshll_n_s8(cr_biased, 7); + int16x8_t cbw = vshll_n_s8(cb_biased, 7); + + // color transform + int16x8_t cr0 = vqdmulhq_s16(crw, cr_const0); + int16x8_t cb0 = vqdmulhq_s16(cbw, cb_const0); + int16x8_t cr1 = vqdmulhq_s16(crw, cr_const1); + int16x8_t cb1 = vqdmulhq_s16(cbw, cb_const1); + int16x8_t rws = vaddq_s16(yws, cr0); + int16x8_t gws = vaddq_s16(vaddq_s16(yws, cb0), cr1); + int16x8_t bws = vaddq_s16(yws, cb1); + + // undo scaling, round, convert to byte + uint8x8x4_t o; + o.val[0] = vqrshrun_n_s16(rws, 4); + o.val[1] = vqrshrun_n_s16(gws, 4); + o.val[2] = vqrshrun_n_s16(bws, 4); + o.val[3] = vdup_n_u8(255); + + // store, interleaving r/g/b/a + vst4_u8(out, o); + out += 8 * 4; + } + } +#endif + + for (; i < count; ++i) { + int y_fixed = (y[i] << 20) + (1 << 19); // rounding + int r, g, b; + int cr = pcr[i] - 128; + int cb = pcb[i] - 128; + r = y_fixed + cr * stbi__float2fixed(1.40200f); + g = y_fixed + cr * -stbi__float2fixed(0.71414f) + + ((cb * -stbi__float2fixed(0.34414f)) & 0xffff0000); + b = y_fixed + cb * stbi__float2fixed(1.77200f); + r >>= 20; + g >>= 20; + b >>= 20; + if ((unsigned)r > 255) { + if (r < 0) + r = 0; + else + r = 255; + } + if ((unsigned)g > 255) { + if (g < 0) + g = 0; + else + g = 255; + } + if ((unsigned)b > 255) { + if (b < 0) + b = 0; + else + b = 255; + } + out[0] = (stbi_uc)r; + out[1] = (stbi_uc)g; + out[2] = (stbi_uc)b; + out[3] = 255; + out += step; + } +} +#endif + +// set up the kernels +static void stbi__setup_jpeg(stbi__jpeg *j) { + j->idct_block_kernel = stbi__idct_block; + j->YCbCr_to_RGB_kernel = stbi__YCbCr_to_RGB_row; + j->resample_row_hv_2_kernel = stbi__resample_row_hv_2; + +#ifdef STBI_SSE2 + if (stbi__sse2_available()) { + j->idct_block_kernel = stbi__idct_simd; + j->YCbCr_to_RGB_kernel = stbi__YCbCr_to_RGB_simd; + j->resample_row_hv_2_kernel = stbi__resample_row_hv_2_simd; + } +#endif + +#ifdef STBI_NEON + j->idct_block_kernel = stbi__idct_simd; + j->YCbCr_to_RGB_kernel = stbi__YCbCr_to_RGB_simd; + j->resample_row_hv_2_kernel = stbi__resample_row_hv_2_simd; +#endif +} + +// clean up the temporary component buffers +static void stbi__cleanup_jpeg(stbi__jpeg *j) { + stbi__free_jpeg_components(j, j->s->img_n, 0); +} + +typedef struct { + resample_row_func resample; + stbi_uc *line0, *line1; + int hs, vs; // expansion factor in each axis + int w_lores; // horizontal pixels pre-expansion + int ystep; // how far through vertical expansion we are + int ypos; // which pre-expansion row we're on +} stbi__resample; + +// fast 0..255 * 0..255 => 0..255 rounded multiplication +static stbi_uc stbi__blinn_8x8(stbi_uc x, stbi_uc y) { + unsigned int t = x * y + 128; + return (stbi_uc)((t + (t >> 8)) >> 8); +} + +static stbi_uc *load_jpeg_image(stbi__jpeg *z, int *out_x, int *out_y, + int *comp, int req_comp) { + int n, decode_n, is_rgb; + z->s->img_n = 0; // make stbi__cleanup_jpeg safe + + // validate req_comp + if (req_comp < 0 || req_comp > 4) + return stbi__errpuc("bad req_comp", "Internal error"); + + // load a jpeg image from whichever source, but leave in YCbCr format + if (!stbi__decode_jpeg_image(z)) { + stbi__cleanup_jpeg(z); + return NULL; + } + + // determine actual number of components to generate + n = req_comp ? req_comp : z->s->img_n >= 3 ? 3 : 1; + + is_rgb = z->s->img_n == 3 && + (z->rgb == 3 || (z->app14_color_transform == 0 && !z->jfif)); + + if (z->s->img_n == 3 && n < 3 && !is_rgb) + decode_n = 1; + else + decode_n = z->s->img_n; + + // nothing to do if no components requested; check this now to avoid + // accessing uninitialized coutput[0] later + if (decode_n <= 0) { + stbi__cleanup_jpeg(z); + return NULL; + } + + // resample and color-convert + { + int k; + unsigned int i, j; + stbi_uc *output; + stbi_uc *coutput[4] = {NULL, NULL, NULL, NULL}; + + stbi__resample res_comp[4]; + + for (k = 0; k < decode_n; ++k) { + stbi__resample *r = &res_comp[k]; + + // allocate line buffer big enough for upsampling off the edges + // with upsample factor of 4 + z->img_comp[k].linebuf = (stbi_uc *)stbi__malloc(z->s->img_x + 3); + if (!z->img_comp[k].linebuf) { + stbi__cleanup_jpeg(z); + return stbi__errpuc("outofmem", "Out of memory"); + } + + r->hs = z->img_h_max / z->img_comp[k].h; + r->vs = z->img_v_max / z->img_comp[k].v; + r->ystep = r->vs >> 1; + r->w_lores = (z->s->img_x + r->hs - 1) / r->hs; + r->ypos = 0; + r->line0 = r->line1 = z->img_comp[k].data; + + if (r->hs == 1 && r->vs == 1) + r->resample = resample_row_1; + else if (r->hs == 1 && r->vs == 2) + r->resample = stbi__resample_row_v_2; + else if (r->hs == 2 && r->vs == 1) + r->resample = stbi__resample_row_h_2; + else if (r->hs == 2 && r->vs == 2) + r->resample = z->resample_row_hv_2_kernel; + else + r->resample = stbi__resample_row_generic; + } + + // can't error after this so, this is safe + output = (stbi_uc *)stbi__malloc_mad3(n, z->s->img_x, z->s->img_y, 1); + if (!output) { + stbi__cleanup_jpeg(z); + return stbi__errpuc("outofmem", "Out of memory"); + } + + // now go ahead and resample + for (j = 0; j < z->s->img_y; ++j) { + stbi_uc *out = output + n * z->s->img_x * j; + for (k = 0; k < decode_n; ++k) { + stbi__resample *r = &res_comp[k]; + int y_bot = r->ystep >= (r->vs >> 1); + coutput[k] = + r->resample(z->img_comp[k].linebuf, y_bot ? r->line1 : r->line0, + y_bot ? r->line0 : r->line1, r->w_lores, r->hs); + if (++r->ystep >= r->vs) { + r->ystep = 0; + r->line0 = r->line1; + if (++r->ypos < z->img_comp[k].y) r->line1 += z->img_comp[k].w2; + } + } + if (n >= 3) { + stbi_uc *y = coutput[0]; + if (z->s->img_n == 3) { + if (is_rgb) { + for (i = 0; i < z->s->img_x; ++i) { + out[0] = y[i]; + out[1] = coutput[1][i]; + out[2] = coutput[2][i]; + out[3] = 255; + out += n; + } + } else { + z->YCbCr_to_RGB_kernel(out, y, coutput[1], coutput[2], z->s->img_x, + n); + } + } else if (z->s->img_n == 4) { + if (z->app14_color_transform == 0) { // CMYK + for (i = 0; i < z->s->img_x; ++i) { + stbi_uc m = coutput[3][i]; + out[0] = stbi__blinn_8x8(coutput[0][i], m); + out[1] = stbi__blinn_8x8(coutput[1][i], m); + out[2] = stbi__blinn_8x8(coutput[2][i], m); + out[3] = 255; + out += n; + } + } else if (z->app14_color_transform == 2) { // YCCK + z->YCbCr_to_RGB_kernel(out, y, coutput[1], coutput[2], z->s->img_x, + n); + for (i = 0; i < z->s->img_x; ++i) { + stbi_uc m = coutput[3][i]; + out[0] = stbi__blinn_8x8(255 - out[0], m); + out[1] = stbi__blinn_8x8(255 - out[1], m); + out[2] = stbi__blinn_8x8(255 - out[2], m); + out += n; + } + } else { // YCbCr + alpha? Ignore the fourth channel for now + z->YCbCr_to_RGB_kernel(out, y, coutput[1], coutput[2], z->s->img_x, + n); + } + } else + for (i = 0; i < z->s->img_x; ++i) { + out[0] = out[1] = out[2] = y[i]; + out[3] = 255; // not used if n==3 + out += n; + } + } else { + if (is_rgb) { + if (n == 1) + for (i = 0; i < z->s->img_x; ++i) + *out++ = + stbi__compute_y(coutput[0][i], coutput[1][i], coutput[2][i]); + else { + for (i = 0; i < z->s->img_x; ++i, out += 2) { + out[0] = + stbi__compute_y(coutput[0][i], coutput[1][i], coutput[2][i]); + out[1] = 255; + } + } + } else if (z->s->img_n == 4 && z->app14_color_transform == 0) { + for (i = 0; i < z->s->img_x; ++i) { + stbi_uc m = coutput[3][i]; + stbi_uc r = stbi__blinn_8x8(coutput[0][i], m); + stbi_uc g = stbi__blinn_8x8(coutput[1][i], m); + stbi_uc b = stbi__blinn_8x8(coutput[2][i], m); + out[0] = stbi__compute_y(r, g, b); + out[1] = 255; + out += n; + } + } else if (z->s->img_n == 4 && z->app14_color_transform == 2) { + for (i = 0; i < z->s->img_x; ++i) { + out[0] = stbi__blinn_8x8(255 - coutput[0][i], coutput[3][i]); + out[1] = 255; + out += n; + } + } else { + stbi_uc *y = coutput[0]; + if (n == 1) + for (i = 0; i < z->s->img_x; ++i) out[i] = y[i]; + else + for (i = 0; i < z->s->img_x; ++i) { + *out++ = y[i]; + *out++ = 255; + } + } + } + } + stbi__cleanup_jpeg(z); + *out_x = z->s->img_x; + *out_y = z->s->img_y; + if (comp) + *comp = + z->s->img_n >= 3 ? 3 : 1; // report original components, not output + return output; + } +} + +static void *stbi__jpeg_load(stbi__context *s, int *x, int *y, int *comp, + int req_comp, stbi__result_info *ri) { + unsigned char *result; + stbi__jpeg *j = (stbi__jpeg *)stbi__malloc(sizeof(stbi__jpeg)); + if (!j) return stbi__errpuc("outofmem", "Out of memory"); + memset(j, 0, sizeof(stbi__jpeg)); + STBI_NOTUSED(ri); + j->s = s; + stbi__setup_jpeg(j); + result = load_jpeg_image(j, x, y, comp, req_comp); + STBI_FREE(j); + return result; +} + +static int stbi__jpeg_test(stbi__context *s) { + int r; + stbi__jpeg *j = (stbi__jpeg *)stbi__malloc(sizeof(stbi__jpeg)); + if (!j) return stbi__err("outofmem", "Out of memory"); + memset(j, 0, sizeof(stbi__jpeg)); + j->s = s; + stbi__setup_jpeg(j); + r = stbi__decode_jpeg_header(j, STBI__SCAN_type); + stbi__rewind(s); + STBI_FREE(j); + return r; +} + +static int stbi__jpeg_info_raw(stbi__jpeg *j, int *x, int *y, int *comp) { + if (!stbi__decode_jpeg_header(j, STBI__SCAN_header)) { + stbi__rewind(j->s); + return 0; + } + if (x) *x = j->s->img_x; + if (y) *y = j->s->img_y; + if (comp) *comp = j->s->img_n >= 3 ? 3 : 1; + return 1; +} + +static int stbi__jpeg_info(stbi__context *s, int *x, int *y, int *comp) { + int result; + stbi__jpeg *j = (stbi__jpeg *)(stbi__malloc(sizeof(stbi__jpeg))); + if (!j) return stbi__err("outofmem", "Out of memory"); + memset(j, 0, sizeof(stbi__jpeg)); + j->s = s; + result = stbi__jpeg_info_raw(j, x, y, comp); + STBI_FREE(j); + return result; +} +#endif + +// public domain zlib decode v0.2 Sean Barrett 2006-11-18 +// simple implementation +// - all input must be provided in an upfront buffer +// - all output is written to a single output buffer (can malloc/realloc) +// performance +// - fast huffman + +#ifndef STBI_NO_ZLIB + +// fast-way is faster to check than jpeg huffman, but slow way is slower +#define STBI__ZFAST_BITS 9 // accelerate all cases in default tables +#define STBI__ZFAST_MASK ((1 << STBI__ZFAST_BITS) - 1) +#define STBI__ZNSYMS 288 // number of symbols in literal/length alphabet + +// zlib-style huffman encoding +// (jpegs packs from left, zlib from right, so can't share code) +typedef struct { + stbi__uint16 fast[1 << STBI__ZFAST_BITS]; + stbi__uint16 firstcode[16]; + int maxcode[17]; + stbi__uint16 firstsymbol[16]; + stbi_uc size[STBI__ZNSYMS]; + stbi__uint16 value[STBI__ZNSYMS]; +} stbi__zhuffman; + +stbi_inline static int stbi__bitreverse16(int n) { + n = ((n & 0xAAAA) >> 1) | ((n & 0x5555) << 1); + n = ((n & 0xCCCC) >> 2) | ((n & 0x3333) << 2); + n = ((n & 0xF0F0) >> 4) | ((n & 0x0F0F) << 4); + n = ((n & 0xFF00) >> 8) | ((n & 0x00FF) << 8); + return n; +} + +stbi_inline static int stbi__bit_reverse(int v, int bits) { + STBI_ASSERT(bits <= 16); + // to bit reverse n bits, reverse 16 and shift + // e.g. 11 bits, bit reverse and shift away 5 + return stbi__bitreverse16(v) >> (16 - bits); +} + +static int stbi__zbuild_huffman(stbi__zhuffman *z, const stbi_uc *sizelist, + int num) { + int i, k = 0; + int code, next_code[16], sizes[17]; + + // DEFLATE spec for generating codes + memset(sizes, 0, sizeof(sizes)); + memset(z->fast, 0, sizeof(z->fast)); + for (i = 0; i < num; ++i) ++sizes[sizelist[i]]; + sizes[0] = 0; + for (i = 1; i < 16; ++i) + if (sizes[i] > (1 << i)) return stbi__err("bad sizes", "Corrupt PNG"); + code = 0; + for (i = 1; i < 16; ++i) { + next_code[i] = code; + z->firstcode[i] = (stbi__uint16)code; + z->firstsymbol[i] = (stbi__uint16)k; + code = (code + sizes[i]); + if (sizes[i]) + if (code - 1 >= (1 << i)) + return stbi__err("bad codelengths", "Corrupt PNG"); + z->maxcode[i] = code << (16 - i); // preshift for inner loop + code <<= 1; + k += sizes[i]; + } + z->maxcode[16] = 0x10000; // sentinel + for (i = 0; i < num; ++i) { + int s = sizelist[i]; + if (s) { + int c = next_code[s] - z->firstcode[s] + z->firstsymbol[s]; + stbi__uint16 fastv = (stbi__uint16)((s << 9) | i); + z->size[c] = (stbi_uc)s; + z->value[c] = (stbi__uint16)i; + if (s <= STBI__ZFAST_BITS) { + int j = stbi__bit_reverse(next_code[s], s); + while (j < (1 << STBI__ZFAST_BITS)) { + z->fast[j] = fastv; + j += (1 << s); + } + } + ++next_code[s]; + } + } + return 1; +} + +// zlib-from-memory implementation for PNG reading +// because PNG allows splitting the zlib stream arbitrarily, +// and it's annoying structurally to have PNG call ZLIB call PNG, +// we require PNG read all the IDATs and combine them into a single +// memory buffer + +typedef struct { + stbi_uc *zbuffer, *zbuffer_end; + int num_bits; + int hit_zeof_once; + stbi__uint32 code_buffer; + + char *zout; + char *zout_start; + char *zout_end; + int z_expandable; + + stbi__zhuffman z_length, z_distance; +} stbi__zbuf; + +stbi_inline static int stbi__zeof(stbi__zbuf *z) { + return (z->zbuffer >= z->zbuffer_end); +} + +stbi_inline static stbi_uc stbi__zget8(stbi__zbuf *z) { + return stbi__zeof(z) ? 0 : *z->zbuffer++; +} + +static void stbi__fill_bits(stbi__zbuf *z) { + do { + if (z->code_buffer >= (1U << z->num_bits)) { + z->zbuffer = z->zbuffer_end; /* treat this as EOF so we fail. */ + return; + } + z->code_buffer |= (unsigned int)stbi__zget8(z) << z->num_bits; + z->num_bits += 8; + } while (z->num_bits <= 24); +} + +stbi_inline static unsigned int stbi__zreceive(stbi__zbuf *z, int n) { + unsigned int k; + if (z->num_bits < n) stbi__fill_bits(z); + k = z->code_buffer & ((1 << n) - 1); + z->code_buffer >>= n; + z->num_bits -= n; + return k; +} + +static int stbi__zhuffman_decode_slowpath(stbi__zbuf *a, stbi__zhuffman *z) { + int b, s, k; + // not resolved by fast table, so compute it the slow way + // use jpeg approach, which requires MSbits at top + k = stbi__bit_reverse(a->code_buffer, 16); + for (s = STBI__ZFAST_BITS + 1;; ++s) + if (k < z->maxcode[s]) break; + if (s >= 16) return -1; // invalid code! + // code size is s, so: + b = (k >> (16 - s)) - z->firstcode[s] + z->firstsymbol[s]; + if (b >= STBI__ZNSYMS) return -1; // some data was corrupt somewhere! + if (z->size[b] != s) + return -1; // was originally an assert, but report failure instead. + a->code_buffer >>= s; + a->num_bits -= s; + return z->value[b]; +} + +stbi_inline static int stbi__zhuffman_decode(stbi__zbuf *a, stbi__zhuffman *z) { + int b, s; + if (a->num_bits < 16) { + if (stbi__zeof(a)) { + if (!a->hit_zeof_once) { + // This is the first time we hit eof, insert 16 extra padding btis + // to allow us to keep going; if we actually consume any of them + // though, that is invalid data. This is caught later. + a->hit_zeof_once = 1; + a->num_bits += 16; // add 16 implicit zero bits + } else { + // We already inserted our extra 16 padding bits and are again + // out, this stream is actually prematurely terminated. + return -1; + } + } else { + stbi__fill_bits(a); + } + } + b = z->fast[a->code_buffer & STBI__ZFAST_MASK]; + if (b) { + s = b >> 9; + a->code_buffer >>= s; + a->num_bits -= s; + return b & 511; + } + return stbi__zhuffman_decode_slowpath(a, z); +} + +static int stbi__zexpand(stbi__zbuf *z, char *zout, + int n) // need to make room for n bytes +{ + char *q; + unsigned int cur, limit, old_limit; + z->zout = zout; + if (!z->z_expandable) return stbi__err("output buffer limit", "Corrupt PNG"); + cur = (unsigned int)(z->zout - z->zout_start); + limit = old_limit = (unsigned)(z->zout_end - z->zout_start); + if (UINT_MAX - cur < (unsigned)n) + return stbi__err("outofmem", "Out of memory"); + while (cur + n > limit) { + if (limit > UINT_MAX / 2) return stbi__err("outofmem", "Out of memory"); + limit *= 2; + } + q = (char *)STBI_REALLOC_SIZED(z->zout_start, old_limit, limit); + STBI_NOTUSED(old_limit); + if (q == NULL) return stbi__err("outofmem", "Out of memory"); + z->zout_start = q; + z->zout = q + cur; + z->zout_end = q + limit; + return 1; +} + +static const int stbi__zlength_base[31] = { + 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, + 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0}; + +static const int stbi__zlength_extra[31] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, + 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, + 4, 4, 5, 5, 5, 5, 0, 0, 0}; + +static const int stbi__zdist_base[32] = { + 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, + 49, 65, 97, 129, 193, 257, 385, 513, 769, 1025, 1537, + 2049, 3073, 4097, 6145, 8193, 12289, 16385, 24577, 0, 0}; + +static const int stbi__zdist_extra[32] = {0, 0, 0, 0, 1, 1, 2, 2, 3, 3, + 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, + 9, 9, 10, 10, 11, 11, 12, 12, 13, 13}; + +static int stbi__parse_huffman_block(stbi__zbuf *a) { + char *zout = a->zout; + for (;;) { + int z = stbi__zhuffman_decode(a, &a->z_length); + if (z < 256) { + if (z < 0) + return stbi__err("bad huffman code", + "Corrupt PNG"); // error in huffman codes + if (zout >= a->zout_end) { + if (!stbi__zexpand(a, zout, 1)) return 0; + zout = a->zout; + } + *zout++ = (char)z; + } else { + stbi_uc *p; + int len, dist; + if (z == 256) { + a->zout = zout; + if (a->hit_zeof_once && a->num_bits < 16) { + // The first time we hit zeof, we inserted 16 extra zero bits into our + // bit buffer so the decoder can just do its speculative decoding. But + // if we actually consumed any of those bits (which is the case when + // num_bits < 16), the stream actually read past the end so it is + // malformed. + return stbi__err("unexpected end", "Corrupt PNG"); + } + return 1; + } + if (z >= 286) + return stbi__err( + "bad huffman code", + "Corrupt PNG"); // per DEFLATE, length codes 286 and 287 must not + // appear in compressed data + z -= 257; + len = stbi__zlength_base[z]; + if (stbi__zlength_extra[z]) + len += stbi__zreceive(a, stbi__zlength_extra[z]); + z = stbi__zhuffman_decode(a, &a->z_distance); + if (z < 0 || z >= 30) + return stbi__err( + "bad huffman code", + "Corrupt PNG"); // per DEFLATE, distance codes 30 and 31 must not + // appear in compressed data + dist = stbi__zdist_base[z]; + if (stbi__zdist_extra[z]) dist += stbi__zreceive(a, stbi__zdist_extra[z]); + if (zout - a->zout_start < dist) + return stbi__err("bad dist", "Corrupt PNG"); + if (len > a->zout_end - zout) { + if (!stbi__zexpand(a, zout, len)) return 0; + zout = a->zout; + } + p = (stbi_uc *)(zout - dist); + if (dist == 1) { // run of one byte; common in images. + stbi_uc v = *p; + if (len) { + do *zout++ = v; + while (--len); + } + } else { + if (len) { + do *zout++ = *p++; + while (--len); + } + } + } + } +} + +static int stbi__compute_huffman_codes(stbi__zbuf *a) { + static const stbi_uc length_dezigzag[19] = { + 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15}; + stbi__zhuffman z_codelength; + stbi_uc lencodes[286 + 32 + 137]; // padding for maximum single op + stbi_uc codelength_sizes[19]; + int i, n; + + int hlit = stbi__zreceive(a, 5) + 257; + int hdist = stbi__zreceive(a, 5) + 1; + int hclen = stbi__zreceive(a, 4) + 4; + int ntot = hlit + hdist; + + memset(codelength_sizes, 0, sizeof(codelength_sizes)); + for (i = 0; i < hclen; ++i) { + int s = stbi__zreceive(a, 3); + codelength_sizes[length_dezigzag[i]] = (stbi_uc)s; + } + if (!stbi__zbuild_huffman(&z_codelength, codelength_sizes, 19)) return 0; + + n = 0; + while (n < ntot) { + int c = stbi__zhuffman_decode(a, &z_codelength); + if (c < 0 || c >= 19) return stbi__err("bad codelengths", "Corrupt PNG"); + if (c < 16) + lencodes[n++] = (stbi_uc)c; + else { + stbi_uc fill = 0; + if (c == 16) { + c = stbi__zreceive(a, 2) + 3; + if (n == 0) return stbi__err("bad codelengths", "Corrupt PNG"); + fill = lencodes[n - 1]; + } else if (c == 17) { + c = stbi__zreceive(a, 3) + 3; + } else if (c == 18) { + c = stbi__zreceive(a, 7) + 11; + } else { + return stbi__err("bad codelengths", "Corrupt PNG"); + } + if (ntot - n < c) return stbi__err("bad codelengths", "Corrupt PNG"); + memset(lencodes + n, fill, c); + n += c; + } + } + if (n != ntot) return stbi__err("bad codelengths", "Corrupt PNG"); + if (!stbi__zbuild_huffman(&a->z_length, lencodes, hlit)) return 0; + if (!stbi__zbuild_huffman(&a->z_distance, lencodes + hlit, hdist)) return 0; + return 1; +} + +static int stbi__parse_uncompressed_block(stbi__zbuf *a) { + stbi_uc header[4]; + int len, nlen, k; + if (a->num_bits & 7) stbi__zreceive(a, a->num_bits & 7); // discard + // drain the bit-packed data into header + k = 0; + while (a->num_bits > 0) { + header[k++] = + (stbi_uc)(a->code_buffer & 255); // suppress MSVC run-time check + a->code_buffer >>= 8; + a->num_bits -= 8; + } + if (a->num_bits < 0) return stbi__err("zlib corrupt", "Corrupt PNG"); + // now fill header the normal way + while (k < 4) header[k++] = stbi__zget8(a); + len = header[1] * 256 + header[0]; + nlen = header[3] * 256 + header[2]; + if (nlen != (len ^ 0xffff)) return stbi__err("zlib corrupt", "Corrupt PNG"); + if (a->zbuffer + len > a->zbuffer_end) + return stbi__err("read past buffer", "Corrupt PNG"); + if (a->zout + len > a->zout_end) + if (!stbi__zexpand(a, a->zout, len)) return 0; + memcpy(a->zout, a->zbuffer, len); + a->zbuffer += len; + a->zout += len; + return 1; +} + +static int stbi__parse_zlib_header(stbi__zbuf *a) { + int cmf = stbi__zget8(a); + int cm = cmf & 15; + /* int cinfo = cmf >> 4; */ + int flg = stbi__zget8(a); + if (stbi__zeof(a)) + return stbi__err("bad zlib header", "Corrupt PNG"); // zlib spec + if ((cmf * 256 + flg) % 31 != 0) + return stbi__err("bad zlib header", "Corrupt PNG"); // zlib spec + if (flg & 32) + return stbi__err("no preset dict", + "Corrupt PNG"); // preset dictionary not allowed in png + if (cm != 8) + return stbi__err("bad compression", + "Corrupt PNG"); // DEFLATE required for png + // window = 1 << (8 + cinfo)... but who cares, we fully buffer output + return 1; +} + +static const stbi_uc stbi__zdefault_length[STBI__ZNSYMS] = { + 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8}; +static const stbi_uc stbi__zdefault_distance[32] = { + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5}; +/* +Init algorithm: +{ + int i; // use <= to match clearly with spec + for (i=0; i <= 143; ++i) stbi__zdefault_length[i] = 8; + for ( ; i <= 255; ++i) stbi__zdefault_length[i] = 9; + for ( ; i <= 279; ++i) stbi__zdefault_length[i] = 7; + for ( ; i <= 287; ++i) stbi__zdefault_length[i] = 8; + + for (i=0; i <= 31; ++i) stbi__zdefault_distance[i] = 5; +} +*/ + +static int stbi__parse_zlib(stbi__zbuf *a, int parse_header) { + int final, type; + if (parse_header) + if (!stbi__parse_zlib_header(a)) return 0; + a->num_bits = 0; + a->code_buffer = 0; + a->hit_zeof_once = 0; + do { + final = stbi__zreceive(a, 1); + type = stbi__zreceive(a, 2); + if (type == 0) { + if (!stbi__parse_uncompressed_block(a)) return 0; + } else if (type == 3) { + return 0; + } else { + if (type == 1) { + // use fixed code lengths + if (!stbi__zbuild_huffman(&a->z_length, stbi__zdefault_length, + STBI__ZNSYMS)) + return 0; + if (!stbi__zbuild_huffman(&a->z_distance, stbi__zdefault_distance, 32)) + return 0; + } else { + if (!stbi__compute_huffman_codes(a)) return 0; + } + if (!stbi__parse_huffman_block(a)) return 0; + } + } while (!final); + return 1; +} + +static int stbi__do_zlib(stbi__zbuf *a, char *obuf, int olen, int exp, + int parse_header) { + a->zout_start = obuf; + a->zout = obuf; + a->zout_end = obuf + olen; + a->z_expandable = exp; + + return stbi__parse_zlib(a, parse_header); +} + +STBIDEF char *stbi_zlib_decode_malloc_guesssize(const char *buffer, int len, + int initial_size, int *outlen) { + stbi__zbuf a; + char *p = (char *)stbi__malloc(initial_size); + if (p == NULL) return NULL; + a.zbuffer = (stbi_uc *)buffer; + a.zbuffer_end = (stbi_uc *)buffer + len; + if (stbi__do_zlib(&a, p, initial_size, 1, 1)) { + if (outlen) *outlen = (int)(a.zout - a.zout_start); + return a.zout_start; + } else { + STBI_FREE(a.zout_start); + return NULL; + } +} + +STBIDEF char *stbi_zlib_decode_malloc(char const *buffer, int len, + int *outlen) { + return stbi_zlib_decode_malloc_guesssize(buffer, len, 16384, outlen); +} + +STBIDEF char *stbi_zlib_decode_malloc_guesssize_headerflag(const char *buffer, + int len, + int initial_size, + int *outlen, + int parse_header) { + stbi__zbuf a; + char *p = (char *)stbi__malloc(initial_size); + if (p == NULL) return NULL; + a.zbuffer = (stbi_uc *)buffer; + a.zbuffer_end = (stbi_uc *)buffer + len; + if (stbi__do_zlib(&a, p, initial_size, 1, parse_header)) { + if (outlen) *outlen = (int)(a.zout - a.zout_start); + return a.zout_start; + } else { + STBI_FREE(a.zout_start); + return NULL; + } +} + +STBIDEF int stbi_zlib_decode_buffer(char *obuffer, int olen, + char const *ibuffer, int ilen) { + stbi__zbuf a; + a.zbuffer = (stbi_uc *)ibuffer; + a.zbuffer_end = (stbi_uc *)ibuffer + ilen; + if (stbi__do_zlib(&a, obuffer, olen, 0, 1)) + return (int)(a.zout - a.zout_start); + else + return -1; +} + +STBIDEF char *stbi_zlib_decode_noheader_malloc(char const *buffer, int len, + int *outlen) { + stbi__zbuf a; + char *p = (char *)stbi__malloc(16384); + if (p == NULL) return NULL; + a.zbuffer = (stbi_uc *)buffer; + a.zbuffer_end = (stbi_uc *)buffer + len; + if (stbi__do_zlib(&a, p, 16384, 1, 0)) { + if (outlen) *outlen = (int)(a.zout - a.zout_start); + return a.zout_start; + } else { + STBI_FREE(a.zout_start); + return NULL; + } +} + +STBIDEF int stbi_zlib_decode_noheader_buffer(char *obuffer, int olen, + const char *ibuffer, int ilen) { + stbi__zbuf a; + a.zbuffer = (stbi_uc *)ibuffer; + a.zbuffer_end = (stbi_uc *)ibuffer + ilen; + if (stbi__do_zlib(&a, obuffer, olen, 0, 0)) + return (int)(a.zout - a.zout_start); + else + return -1; +} +#endif + +// public domain "baseline" PNG decoder v0.10 Sean Barrett 2006-11-18 +// simple implementation +// - only 8-bit samples +// - no CRC checking +// - allocates lots of intermediate memory +// - avoids problem of streaming data between subsystems +// - avoids explicit window management +// performance +// - uses stb_zlib, a PD zlib implementation with fast huffman decoding + +#ifndef STBI_NO_PNG +typedef struct { + stbi__uint32 length; + stbi__uint32 type; +} stbi__pngchunk; + +static stbi__pngchunk stbi__get_chunk_header(stbi__context *s) { + stbi__pngchunk c; + c.length = stbi__get32be(s); + c.type = stbi__get32be(s); + return c; +} + +static int stbi__check_png_header(stbi__context *s) { + static const stbi_uc png_sig[8] = {137, 80, 78, 71, 13, 10, 26, 10}; + int i; + for (i = 0; i < 8; ++i) + if (stbi__get8(s) != png_sig[i]) + return stbi__err("bad png sig", "Not a PNG"); + return 1; +} + +typedef struct { + stbi__context *s; + stbi_uc *idata, *expanded, *out; + int depth; +} stbi__png; + +enum { + STBI__F_none = 0, + STBI__F_sub = 1, + STBI__F_up = 2, + STBI__F_avg = 3, + STBI__F_paeth = 4, + // synthetic filter used for first scanline to avoid needing a dummy row of 0s + STBI__F_avg_first +}; + +static stbi_uc first_row_filter[5] = { + STBI__F_none, STBI__F_sub, STBI__F_none, STBI__F_avg_first, + STBI__F_sub // Paeth with b=c=0 turns out to be equivalent to sub +}; + +static int stbi__paeth(int a, int b, int c) { + // This formulation looks very different from the reference in the PNG spec, + // but is actually equivalent and has favorable data dependencies and admits + // straightforward generation of branch-free code, which helps performance + // significantly. + int thresh = c * 3 - (a + b); + int lo = a < b ? a : b; + int hi = a < b ? b : a; + int t0 = (hi <= thresh) ? lo : c; + int t1 = (thresh <= lo) ? hi : t0; + return t1; +} + +static const stbi_uc stbi__depth_scale_table[9] = {0, 0xff, 0x55, 0, 0x11, + 0, 0, 0, 0x01}; + +// adds an extra all-255 alpha channel +// dest == src is legal +// img_n must be 1 or 3 +static void stbi__create_png_alpha_expand8(stbi_uc *dest, stbi_uc *src, + stbi__uint32 x, int img_n) { + int i; + // must process data backwards since we allow dest==src + if (img_n == 1) { + for (i = x - 1; i >= 0; --i) { + dest[i * 2 + 1] = 255; + dest[i * 2 + 0] = src[i]; + } + } else { + STBI_ASSERT(img_n == 3); + for (i = x - 1; i >= 0; --i) { + dest[i * 4 + 3] = 255; + dest[i * 4 + 2] = src[i * 3 + 2]; + dest[i * 4 + 1] = src[i * 3 + 1]; + dest[i * 4 + 0] = src[i * 3 + 0]; + } + } +} + +// create the png data from post-deflated data +static int stbi__create_png_image_raw(stbi__png *a, stbi_uc *raw, + stbi__uint32 raw_len, int out_n, + stbi__uint32 x, stbi__uint32 y, int depth, + int color) { + int bytes = (depth == 16 ? 2 : 1); + stbi__context *s = a->s; + stbi__uint32 i, j, stride = x * out_n * bytes; + stbi__uint32 img_len, img_width_bytes; + stbi_uc *filter_buf; + int all_ok = 1; + int k; + int img_n = s->img_n; // copy it into a local for later + + int output_bytes = out_n * bytes; + int filter_bytes = img_n * bytes; + int width = x; + + STBI_ASSERT(out_n == s->img_n || out_n == s->img_n + 1); + a->out = (stbi_uc *)stbi__malloc_mad3( + x, y, output_bytes, 0); // extra bytes to write off the end into + if (!a->out) return stbi__err("outofmem", "Out of memory"); + + // note: error exits here don't need to clean up a->out individually, + // stbi__do_png always does on error. + if (!stbi__mad3sizes_valid(img_n, x, depth, 7)) + return stbi__err("too large", "Corrupt PNG"); + img_width_bytes = (((img_n * x * depth) + 7) >> 3); + if (!stbi__mad2sizes_valid(img_width_bytes, y, img_width_bytes)) + return stbi__err("too large", "Corrupt PNG"); + img_len = (img_width_bytes + 1) * y; + + // we used to check for exact match between raw_len and img_len on + // non-interlaced PNGs, but issue #276 reported a PNG in the wild that had + // extra data at the end (all zeros), so just check for raw_len < img_len + // always. + if (raw_len < img_len) return stbi__err("not enough pixels", "Corrupt PNG"); + + // Allocate two scan lines worth of filter workspace buffer. + filter_buf = (stbi_uc *)stbi__malloc_mad2(img_width_bytes, 2, 0); + if (!filter_buf) return stbi__err("outofmem", "Out of memory"); + + // Filtering for low-bit-depth images + if (depth < 8) { + filter_bytes = 1; + width = img_width_bytes; + } + + for (j = 0; j < y; ++j) { + // cur/prior filter buffers alternate + stbi_uc *cur = filter_buf + (j & 1) * img_width_bytes; + stbi_uc *prior = filter_buf + (~j & 1) * img_width_bytes; + stbi_uc *dest = a->out + stride * j; + int nk = width * filter_bytes; + int filter = *raw++; + + // check filter type + if (filter > 4) { + all_ok = stbi__err("invalid filter", "Corrupt PNG"); + break; + } + + // if first row, use special filter that doesn't sample previous row + if (j == 0) filter = first_row_filter[filter]; + + // perform actual filtering + switch (filter) { + case STBI__F_none: + memcpy(cur, raw, nk); + break; + case STBI__F_sub: + memcpy(cur, raw, filter_bytes); + for (k = filter_bytes; k < nk; ++k) + cur[k] = STBI__BYTECAST(raw[k] + cur[k - filter_bytes]); + break; + case STBI__F_up: + for (k = 0; k < nk; ++k) cur[k] = STBI__BYTECAST(raw[k] + prior[k]); + break; + case STBI__F_avg: + for (k = 0; k < filter_bytes; ++k) + cur[k] = STBI__BYTECAST(raw[k] + (prior[k] >> 1)); + for (k = filter_bytes; k < nk; ++k) + cur[k] = STBI__BYTECAST(raw[k] + + ((prior[k] + cur[k - filter_bytes]) >> 1)); + break; + case STBI__F_paeth: + for (k = 0; k < filter_bytes; ++k) + cur[k] = STBI__BYTECAST( + raw[k] + prior[k]); // prior[k] == stbi__paeth(0,prior[k],0) + for (k = filter_bytes; k < nk; ++k) + cur[k] = STBI__BYTECAST(raw[k] + + stbi__paeth(cur[k - filter_bytes], prior[k], + prior[k - filter_bytes])); + break; + case STBI__F_avg_first: + memcpy(cur, raw, filter_bytes); + for (k = filter_bytes; k < nk; ++k) + cur[k] = STBI__BYTECAST(raw[k] + (cur[k - filter_bytes] >> 1)); + break; + } + + raw += nk; + + // expand decoded bits in cur to dest, also adding an extra alpha channel if + // desired + if (depth < 8) { + stbi_uc scale = (color == 0) + ? stbi__depth_scale_table[depth] + : 1; // scale grayscale values to 0..255 range + stbi_uc *in = cur; + stbi_uc *out = dest; + stbi_uc inb = 0; + stbi__uint32 nsmp = x * img_n; + + // expand bits to bytes first + if (depth == 4) { + for (i = 0; i < nsmp; ++i) { + if ((i & 1) == 0) inb = *in++; + *out++ = scale * (inb >> 4); + inb <<= 4; + } + } else if (depth == 2) { + for (i = 0; i < nsmp; ++i) { + if ((i & 3) == 0) inb = *in++; + *out++ = scale * (inb >> 6); + inb <<= 2; + } + } else { + STBI_ASSERT(depth == 1); + for (i = 0; i < nsmp; ++i) { + if ((i & 7) == 0) inb = *in++; + *out++ = scale * (inb >> 7); + inb <<= 1; + } + } + + // insert alpha=255 values if desired + if (img_n != out_n) stbi__create_png_alpha_expand8(dest, dest, x, img_n); + } else if (depth == 8) { + if (img_n == out_n) + memcpy(dest, cur, x * img_n); + else + stbi__create_png_alpha_expand8(dest, cur, x, img_n); + } else if (depth == 16) { + // convert the image data from big-endian to platform-native + stbi__uint16 *dest16 = (stbi__uint16 *)dest; + stbi__uint32 nsmp = x * img_n; + + if (img_n == out_n) { + for (i = 0; i < nsmp; ++i, ++dest16, cur += 2) + *dest16 = (cur[0] << 8) | cur[1]; + } else { + STBI_ASSERT(img_n + 1 == out_n); + if (img_n == 1) { + for (i = 0; i < x; ++i, dest16 += 2, cur += 2) { + dest16[0] = (cur[0] << 8) | cur[1]; + dest16[1] = 0xffff; + } + } else { + STBI_ASSERT(img_n == 3); + for (i = 0; i < x; ++i, dest16 += 4, cur += 6) { + dest16[0] = (cur[0] << 8) | cur[1]; + dest16[1] = (cur[2] << 8) | cur[3]; + dest16[2] = (cur[4] << 8) | cur[5]; + dest16[3] = 0xffff; + } + } + } + } + } + + STBI_FREE(filter_buf); + if (!all_ok) return 0; + + return 1; +} + +static int stbi__create_png_image(stbi__png *a, stbi_uc *image_data, + stbi__uint32 image_data_len, int out_n, + int depth, int color, int interlaced) { + int bytes = (depth == 16 ? 2 : 1); + int out_bytes = out_n * bytes; + stbi_uc *final; + int p; + if (!interlaced) + return stbi__create_png_image_raw(a, image_data, image_data_len, out_n, + a->s->img_x, a->s->img_y, depth, color); + + // de-interlacing + final = (stbi_uc *)stbi__malloc_mad3(a->s->img_x, a->s->img_y, out_bytes, 0); + if (!final) return stbi__err("outofmem", "Out of memory"); + for (p = 0; p < 7; ++p) { + int xorig[] = {0, 4, 0, 2, 0, 1, 0}; + int yorig[] = {0, 0, 4, 0, 2, 0, 1}; + int xspc[] = {8, 8, 4, 4, 2, 2, 1}; + int yspc[] = {8, 8, 8, 4, 4, 2, 2}; + int i, j, x, y; + // pass1_x[4] = 0, pass1_x[5] = 1, pass1_x[12] = 1 + x = (a->s->img_x - xorig[p] + xspc[p] - 1) / xspc[p]; + y = (a->s->img_y - yorig[p] + yspc[p] - 1) / yspc[p]; + if (x && y) { + stbi__uint32 img_len = ((((a->s->img_n * x * depth) + 7) >> 3) + 1) * y; + if (!stbi__create_png_image_raw(a, image_data, image_data_len, out_n, x, + y, depth, color)) { + STBI_FREE(final); + return 0; + } + for (j = 0; j < y; ++j) { + for (i = 0; i < x; ++i) { + int out_y = j * yspc[p] + yorig[p]; + int out_x = i * xspc[p] + xorig[p]; + memcpy(final + out_y * a->s->img_x * out_bytes + out_x * out_bytes, + a->out + (j * x + i) * out_bytes, out_bytes); + } + } + STBI_FREE(a->out); + image_data += img_len; + image_data_len -= img_len; + } + } + a->out = final; + + return 1; +} + +static int stbi__compute_transparency(stbi__png *z, stbi_uc tc[3], int out_n) { + stbi__context *s = z->s; + stbi__uint32 i, pixel_count = s->img_x * s->img_y; + stbi_uc *p = z->out; + + // compute color-based transparency, assuming we've + // already got 255 as the alpha value in the output + STBI_ASSERT(out_n == 2 || out_n == 4); + + if (out_n == 2) { + for (i = 0; i < pixel_count; ++i) { + p[1] = (p[0] == tc[0] ? 0 : 255); + p += 2; + } + } else { + for (i = 0; i < pixel_count; ++i) { + if (p[0] == tc[0] && p[1] == tc[1] && p[2] == tc[2]) p[3] = 0; + p += 4; + } + } + return 1; +} + +static int stbi__compute_transparency16(stbi__png *z, stbi__uint16 tc[3], + int out_n) { + stbi__context *s = z->s; + stbi__uint32 i, pixel_count = s->img_x * s->img_y; + stbi__uint16 *p = (stbi__uint16 *)z->out; + + // compute color-based transparency, assuming we've + // already got 65535 as the alpha value in the output + STBI_ASSERT(out_n == 2 || out_n == 4); + + if (out_n == 2) { + for (i = 0; i < pixel_count; ++i) { + p[1] = (p[0] == tc[0] ? 0 : 65535); + p += 2; + } + } else { + for (i = 0; i < pixel_count; ++i) { + if (p[0] == tc[0] && p[1] == tc[1] && p[2] == tc[2]) p[3] = 0; + p += 4; + } + } + return 1; +} + +static int stbi__expand_png_palette(stbi__png *a, stbi_uc *palette, int len, + int pal_img_n) { + stbi__uint32 i, pixel_count = a->s->img_x * a->s->img_y; + stbi_uc *p, *temp_out, *orig = a->out; + + p = (stbi_uc *)stbi__malloc_mad2(pixel_count, pal_img_n, 0); + if (p == NULL) return stbi__err("outofmem", "Out of memory"); + + // between here and free(out) below, exitting would leak + temp_out = p; + + if (pal_img_n == 3) { + for (i = 0; i < pixel_count; ++i) { + int n = orig[i] * 4; + p[0] = palette[n]; + p[1] = palette[n + 1]; + p[2] = palette[n + 2]; + p += 3; + } + } else { + for (i = 0; i < pixel_count; ++i) { + int n = orig[i] * 4; + p[0] = palette[n]; + p[1] = palette[n + 1]; + p[2] = palette[n + 2]; + p[3] = palette[n + 3]; + p += 4; + } + } + STBI_FREE(a->out); + a->out = temp_out; + + STBI_NOTUSED(len); + + return 1; +} + +static int stbi__unpremultiply_on_load_global = 0; +static int stbi__de_iphone_flag_global = 0; + +STBIDEF void stbi_set_unpremultiply_on_load( + int flag_true_if_should_unpremultiply) { + stbi__unpremultiply_on_load_global = flag_true_if_should_unpremultiply; +} + +STBIDEF void stbi_convert_iphone_png_to_rgb(int flag_true_if_should_convert) { + stbi__de_iphone_flag_global = flag_true_if_should_convert; +} + +#ifndef STBI_THREAD_LOCAL +#define stbi__unpremultiply_on_load stbi__unpremultiply_on_load_global +#define stbi__de_iphone_flag stbi__de_iphone_flag_global +#else +static STBI_THREAD_LOCAL int stbi__unpremultiply_on_load_local, + stbi__unpremultiply_on_load_set; +static STBI_THREAD_LOCAL int stbi__de_iphone_flag_local, + stbi__de_iphone_flag_set; + +STBIDEF void stbi_set_unpremultiply_on_load_thread( + int flag_true_if_should_unpremultiply) { + stbi__unpremultiply_on_load_local = flag_true_if_should_unpremultiply; + stbi__unpremultiply_on_load_set = 1; +} + +STBIDEF void stbi_convert_iphone_png_to_rgb_thread( + int flag_true_if_should_convert) { + stbi__de_iphone_flag_local = flag_true_if_should_convert; + stbi__de_iphone_flag_set = 1; +} + +#define stbi__unpremultiply_on_load \ + (stbi__unpremultiply_on_load_set ? stbi__unpremultiply_on_load_local \ + : stbi__unpremultiply_on_load_global) +#define stbi__de_iphone_flag \ + (stbi__de_iphone_flag_set ? stbi__de_iphone_flag_local \ + : stbi__de_iphone_flag_global) +#endif // STBI_THREAD_LOCAL + +static void stbi__de_iphone(stbi__png *z) { + stbi__context *s = z->s; + stbi__uint32 i, pixel_count = s->img_x * s->img_y; + stbi_uc *p = z->out; + + if (s->img_out_n == 3) { // convert bgr to rgb + for (i = 0; i < pixel_count; ++i) { + stbi_uc t = p[0]; + p[0] = p[2]; + p[2] = t; + p += 3; + } + } else { + STBI_ASSERT(s->img_out_n == 4); + if (stbi__unpremultiply_on_load) { + // convert bgr to rgb and unpremultiply + for (i = 0; i < pixel_count; ++i) { + stbi_uc a = p[3]; + stbi_uc t = p[0]; + if (a) { + stbi_uc half = a / 2; + p[0] = (p[2] * 255 + half) / a; + p[1] = (p[1] * 255 + half) / a; + p[2] = (t * 255 + half) / a; + } else { + p[0] = p[2]; + p[2] = t; + } + p += 4; + } + } else { + // convert bgr to rgb + for (i = 0; i < pixel_count; ++i) { + stbi_uc t = p[0]; + p[0] = p[2]; + p[2] = t; + p += 4; + } + } + } +} + +#define STBI__PNG_TYPE(a, b, c, d) \ + (((unsigned)(a) << 24) + ((unsigned)(b) << 16) + ((unsigned)(c) << 8) + \ + (unsigned)(d)) + +static int stbi__parse_png_file(stbi__png *z, int scan, int req_comp) { + stbi_uc palette[1024], pal_img_n = 0; + stbi_uc has_trans = 0, tc[3] = {0}; + stbi__uint16 tc16[3]; + stbi__uint32 ioff = 0, idata_limit = 0, i, pal_len = 0; + int first = 1, k, interlace = 0, color = 0, is_iphone = 0; + stbi__context *s = z->s; + + z->expanded = NULL; + z->idata = NULL; + z->out = NULL; + + if (!stbi__check_png_header(s)) return 0; + + if (scan == STBI__SCAN_type) return 1; + + for (;;) { + stbi__pngchunk c = stbi__get_chunk_header(s); + switch (c.type) { + case STBI__PNG_TYPE('C', 'g', 'B', 'I'): + is_iphone = 1; + stbi__skip(s, c.length); + break; + case STBI__PNG_TYPE('I', 'H', 'D', 'R'): { + int comp, filter; + if (!first) return stbi__err("multiple IHDR", "Corrupt PNG"); + first = 0; + if (c.length != 13) return stbi__err("bad IHDR len", "Corrupt PNG"); + s->img_x = stbi__get32be(s); + s->img_y = stbi__get32be(s); + if (s->img_y > STBI_MAX_DIMENSIONS) + return stbi__err("too large", "Very large image (corrupt?)"); + if (s->img_x > STBI_MAX_DIMENSIONS) + return stbi__err("too large", "Very large image (corrupt?)"); + z->depth = stbi__get8(s); + if (z->depth != 1 && z->depth != 2 && z->depth != 4 && z->depth != 8 && + z->depth != 16) + return stbi__err("1/2/4/8/16-bit only", + "PNG not supported: 1/2/4/8/16-bit only"); + color = stbi__get8(s); + if (color > 6) return stbi__err("bad ctype", "Corrupt PNG"); + if (color == 3 && z->depth == 16) + return stbi__err("bad ctype", "Corrupt PNG"); + if (color == 3) + pal_img_n = 3; + else if (color & 1) + return stbi__err("bad ctype", "Corrupt PNG"); + comp = stbi__get8(s); + if (comp) return stbi__err("bad comp method", "Corrupt PNG"); + filter = stbi__get8(s); + if (filter) return stbi__err("bad filter method", "Corrupt PNG"); + interlace = stbi__get8(s); + if (interlace > 1) + return stbi__err("bad interlace method", "Corrupt PNG"); + if (!s->img_x || !s->img_y) + return stbi__err("0-pixel image", "Corrupt PNG"); + if (!pal_img_n) { + s->img_n = (color & 2 ? 3 : 1) + (color & 4 ? 1 : 0); + if ((1 << 30) / s->img_x / s->img_n < s->img_y) + return stbi__err("too large", "Image too large to decode"); + } else { + // if paletted, then pal_n is our final components, and + // img_n is # components to decompress/filter. + s->img_n = 1; + if ((1 << 30) / s->img_x / 4 < s->img_y) + return stbi__err("too large", "Corrupt PNG"); + } + // even with SCAN_header, have to scan to see if we have a tRNS + break; + } + + case STBI__PNG_TYPE('P', 'L', 'T', 'E'): { + if (first) return stbi__err("first not IHDR", "Corrupt PNG"); + if (c.length > 256 * 3) return stbi__err("invalid PLTE", "Corrupt PNG"); + pal_len = c.length / 3; + if (pal_len * 3 != c.length) + return stbi__err("invalid PLTE", "Corrupt PNG"); + for (i = 0; i < pal_len; ++i) { + palette[i * 4 + 0] = stbi__get8(s); + palette[i * 4 + 1] = stbi__get8(s); + palette[i * 4 + 2] = stbi__get8(s); + palette[i * 4 + 3] = 255; + } + break; + } + + case STBI__PNG_TYPE('t', 'R', 'N', 'S'): { + if (first) return stbi__err("first not IHDR", "Corrupt PNG"); + if (z->idata) return stbi__err("tRNS after IDAT", "Corrupt PNG"); + if (pal_img_n) { + if (scan == STBI__SCAN_header) { + s->img_n = 4; + return 1; + } + if (pal_len == 0) return stbi__err("tRNS before PLTE", "Corrupt PNG"); + if (c.length > pal_len) + return stbi__err("bad tRNS len", "Corrupt PNG"); + pal_img_n = 4; + for (i = 0; i < c.length; ++i) palette[i * 4 + 3] = stbi__get8(s); + } else { + if (!(s->img_n & 1)) + return stbi__err("tRNS with alpha", "Corrupt PNG"); + if (c.length != (stbi__uint32)s->img_n * 2) + return stbi__err("bad tRNS len", "Corrupt PNG"); + has_trans = 1; + // non-paletted with tRNS = constant alpha. if header-scanning, we can + // stop now. + if (scan == STBI__SCAN_header) { + ++s->img_n; + return 1; + } + if (z->depth == 16) { + for (k = 0; k < s->img_n && k < 3; + ++k) // extra loop test to suppress false GCC warning + tc16[k] = + (stbi__uint16)stbi__get16be(s); // copy the values as-is + } else { + for (k = 0; k < s->img_n && k < 3; ++k) + tc[k] = (stbi_uc)(stbi__get16be(s) & 255) * + stbi__depth_scale_table[z->depth]; // non 8-bit images + // will be larger + } + } + break; + } + + case STBI__PNG_TYPE('I', 'D', 'A', 'T'): { + if (first) return stbi__err("first not IHDR", "Corrupt PNG"); + if (pal_img_n && !pal_len) return stbi__err("no PLTE", "Corrupt PNG"); + if (scan == STBI__SCAN_header) { + // header scan definitely stops at first IDAT + if (pal_img_n) s->img_n = pal_img_n; + return 1; + } + if (c.length > (1u << 30)) + return stbi__err("IDAT size limit", + "IDAT section larger than 2^30 bytes"); + if ((int)(ioff + c.length) < (int)ioff) return 0; + if (ioff + c.length > idata_limit) { + stbi__uint32 idata_limit_old = idata_limit; + stbi_uc *p; + if (idata_limit == 0) idata_limit = c.length > 4096 ? c.length : 4096; + while (ioff + c.length > idata_limit) idata_limit *= 2; + STBI_NOTUSED(idata_limit_old); + p = (stbi_uc *)STBI_REALLOC_SIZED(z->idata, idata_limit_old, + idata_limit); + if (p == NULL) return stbi__err("outofmem", "Out of memory"); + z->idata = p; + } + if (!stbi__getn(s, z->idata + ioff, c.length)) + return stbi__err("outofdata", "Corrupt PNG"); + ioff += c.length; + break; + } + + case STBI__PNG_TYPE('I', 'E', 'N', 'D'): { + stbi__uint32 raw_len, bpl; + if (first) return stbi__err("first not IHDR", "Corrupt PNG"); + if (scan != STBI__SCAN_load) return 1; + if (z->idata == NULL) return stbi__err("no IDAT", "Corrupt PNG"); + // initial guess for decoded data size to avoid unnecessary reallocs + bpl = (s->img_x * z->depth + 7) / 8; // bytes per line, per component + raw_len = bpl * s->img_y * s->img_n /* pixels */ + + s->img_y /* filter mode per row */; + z->expanded = (stbi_uc *)stbi_zlib_decode_malloc_guesssize_headerflag( + (char *)z->idata, ioff, raw_len, (int *)&raw_len, !is_iphone); + if (z->expanded == NULL) return 0; // zlib should set error + STBI_FREE(z->idata); + z->idata = NULL; + if ((req_comp == s->img_n + 1 && req_comp != 3 && !pal_img_n) || + has_trans) + s->img_out_n = s->img_n + 1; + else + s->img_out_n = s->img_n; + if (!stbi__create_png_image(z, z->expanded, raw_len, s->img_out_n, + z->depth, color, interlace)) + return 0; + if (has_trans) { + if (z->depth == 16) { + if (!stbi__compute_transparency16(z, tc16, s->img_out_n)) return 0; + } else { + if (!stbi__compute_transparency(z, tc, s->img_out_n)) return 0; + } + } + if (is_iphone && stbi__de_iphone_flag && s->img_out_n > 2) + stbi__de_iphone(z); + if (pal_img_n) { + // pal_img_n == 3 or 4 + s->img_n = pal_img_n; // record the actual colors we had + s->img_out_n = pal_img_n; + if (req_comp >= 3) s->img_out_n = req_comp; + if (!stbi__expand_png_palette(z, palette, pal_len, s->img_out_n)) + return 0; + } else if (has_trans) { + // non-paletted image with tRNS -> source image has (constant) alpha + ++s->img_n; + } + STBI_FREE(z->expanded); + z->expanded = NULL; + // end of PNG chunk, read and skip CRC + stbi__get32be(s); + return 1; + } + + default: + // if critical, fail + if (first) return stbi__err("first not IHDR", "Corrupt PNG"); + if ((c.type & (1 << 29)) == 0) { +#ifndef STBI_NO_FAILURE_STRINGS + // not threadsafe + static char invalid_chunk[] = "XXXX PNG chunk not known"; + invalid_chunk[0] = STBI__BYTECAST(c.type >> 24); + invalid_chunk[1] = STBI__BYTECAST(c.type >> 16); + invalid_chunk[2] = STBI__BYTECAST(c.type >> 8); + invalid_chunk[3] = STBI__BYTECAST(c.type >> 0); +#endif + return stbi__err(invalid_chunk, + "PNG not supported: unknown PNG chunk type"); + } + stbi__skip(s, c.length); + break; + } + // end of PNG chunk, read and skip CRC + stbi__get32be(s); + } +} + +static void *stbi__do_png(stbi__png *p, int *x, int *y, int *n, int req_comp, + stbi__result_info *ri) { + void *result = NULL; + if (req_comp < 0 || req_comp > 4) + return stbi__errpuc("bad req_comp", "Internal error"); + if (stbi__parse_png_file(p, STBI__SCAN_load, req_comp)) { + if (p->depth <= 8) + ri->bits_per_channel = 8; + else if (p->depth == 16) + ri->bits_per_channel = 16; + else + return stbi__errpuc("bad bits_per_channel", + "PNG not supported: unsupported color depth"); + result = p->out; + p->out = NULL; + if (req_comp && req_comp != p->s->img_out_n) { + if (ri->bits_per_channel == 8) + result = stbi__convert_format((unsigned char *)result, p->s->img_out_n, + req_comp, p->s->img_x, p->s->img_y); + else + result = stbi__convert_format16((stbi__uint16 *)result, p->s->img_out_n, + req_comp, p->s->img_x, p->s->img_y); + p->s->img_out_n = req_comp; + if (result == NULL) return result; + } + *x = p->s->img_x; + *y = p->s->img_y; + if (n) *n = p->s->img_n; + } + STBI_FREE(p->out); + p->out = NULL; + STBI_FREE(p->expanded); + p->expanded = NULL; + STBI_FREE(p->idata); + p->idata = NULL; + + return result; +} + +static void *stbi__png_load(stbi__context *s, int *x, int *y, int *comp, + int req_comp, stbi__result_info *ri) { + stbi__png p; + p.s = s; + return stbi__do_png(&p, x, y, comp, req_comp, ri); +} + +static int stbi__png_test(stbi__context *s) { + int r; + r = stbi__check_png_header(s); + stbi__rewind(s); + return r; +} + +static int stbi__png_info_raw(stbi__png *p, int *x, int *y, int *comp) { + if (!stbi__parse_png_file(p, STBI__SCAN_header, 0)) { + stbi__rewind(p->s); + return 0; + } + if (x) *x = p->s->img_x; + if (y) *y = p->s->img_y; + if (comp) *comp = p->s->img_n; + return 1; +} + +static int stbi__png_info(stbi__context *s, int *x, int *y, int *comp) { + stbi__png p; + p.s = s; + return stbi__png_info_raw(&p, x, y, comp); +} + +static int stbi__png_is16(stbi__context *s) { + stbi__png p; + p.s = s; + if (!stbi__png_info_raw(&p, NULL, NULL, NULL)) return 0; + if (p.depth != 16) { + stbi__rewind(p.s); + return 0; + } + return 1; +} +#endif + +// Microsoft/Windows BMP image + +#ifndef STBI_NO_BMP +static int stbi__bmp_test_raw(stbi__context *s) { + int r; + int sz; + if (stbi__get8(s) != 'B') return 0; + if (stbi__get8(s) != 'M') return 0; + stbi__get32le(s); // discard filesize + stbi__get16le(s); // discard reserved + stbi__get16le(s); // discard reserved + stbi__get32le(s); // discard data offset + sz = stbi__get32le(s); + r = (sz == 12 || sz == 40 || sz == 56 || sz == 108 || sz == 124); + return r; +} + +static int stbi__bmp_test(stbi__context *s) { + int r = stbi__bmp_test_raw(s); + stbi__rewind(s); + return r; +} + +// returns 0..31 for the highest set bit +static int stbi__high_bit(unsigned int z) { + int n = 0; + if (z == 0) return -1; + if (z >= 0x10000) { + n += 16; + z >>= 16; + } + if (z >= 0x00100) { + n += 8; + z >>= 8; + } + if (z >= 0x00010) { + n += 4; + z >>= 4; + } + if (z >= 0x00004) { + n += 2; + z >>= 2; + } + if (z >= 0x00002) { + n += 1; /* >>= 1;*/ + } + return n; +} + +static int stbi__bitcount(unsigned int a) { + a = (a & 0x55555555) + ((a >> 1) & 0x55555555); // max 2 + a = (a & 0x33333333) + ((a >> 2) & 0x33333333); // max 4 + a = (a + (a >> 4)) & 0x0f0f0f0f; // max 8 per 4, now 8 bits + a = (a + (a >> 8)); // max 16 per 8 bits + a = (a + (a >> 16)); // max 32 per 8 bits + return a & 0xff; +} + +// extract an arbitrarily-aligned N-bit value (N=bits) +// from v, and then make it 8-bits long and fractionally +// extend it to full full range. +static int stbi__shiftsigned(unsigned int v, int shift, int bits) { + static unsigned int mul_table[9] = { + 0, + 0xff /*0b11111111*/, + 0x55 /*0b01010101*/, + 0x49 /*0b01001001*/, + 0x11 /*0b00010001*/, + 0x21 /*0b00100001*/, + 0x41 /*0b01000001*/, + 0x81 /*0b10000001*/, + 0x01 /*0b00000001*/, + }; + static unsigned int shift_table[9] = { + 0, 0, 0, 1, 0, 2, 4, 6, 0, + }; + if (shift < 0) + v <<= -shift; + else + v >>= shift; + STBI_ASSERT(v < 256); + v >>= (8 - bits); + STBI_ASSERT(bits >= 0 && bits <= 8); + return (int)((unsigned)v * mul_table[bits]) >> shift_table[bits]; +} + +typedef struct { + int bpp, offset, hsz; + unsigned int mr, mg, mb, ma, all_a; + int extra_read; +} stbi__bmp_data; + +static int stbi__bmp_set_mask_defaults(stbi__bmp_data *info, int compress) { + // BI_BITFIELDS specifies masks explicitly, don't override + if (compress == 3) return 1; + + if (compress == 0) { + if (info->bpp == 16) { + info->mr = 31u << 10; + info->mg = 31u << 5; + info->mb = 31u << 0; + } else if (info->bpp == 32) { + info->mr = 0xffu << 16; + info->mg = 0xffu << 8; + info->mb = 0xffu << 0; + info->ma = 0xffu << 24; + info->all_a = 0; // if all_a is 0 at end, then we loaded alpha channel + // but it was all 0 + } else { + // otherwise, use defaults, which is all-0 + info->mr = info->mg = info->mb = info->ma = 0; + } + return 1; + } + return 0; // error +} + +static void *stbi__bmp_parse_header(stbi__context *s, stbi__bmp_data *info) { + int hsz; + if (stbi__get8(s) != 'B' || stbi__get8(s) != 'M') + return stbi__errpuc("not BMP", "Corrupt BMP"); + stbi__get32le(s); // discard filesize + stbi__get16le(s); // discard reserved + stbi__get16le(s); // discard reserved + info->offset = stbi__get32le(s); + info->hsz = hsz = stbi__get32le(s); + info->mr = info->mg = info->mb = info->ma = 0; + info->extra_read = 14; + + if (info->offset < 0) return stbi__errpuc("bad BMP", "bad BMP"); + + if (hsz != 12 && hsz != 40 && hsz != 56 && hsz != 108 && hsz != 124) + return stbi__errpuc("unknown BMP", "BMP type not supported: unknown"); + if (hsz == 12) { + s->img_x = stbi__get16le(s); + s->img_y = stbi__get16le(s); + } else { + s->img_x = stbi__get32le(s); + s->img_y = stbi__get32le(s); + } + if (stbi__get16le(s) != 1) return stbi__errpuc("bad BMP", "bad BMP"); + info->bpp = stbi__get16le(s); + if (hsz != 12) { + int compress = stbi__get32le(s); + if (compress == 1 || compress == 2) + return stbi__errpuc("BMP RLE", "BMP type not supported: RLE"); + if (compress >= 4) + return stbi__errpuc( + "BMP JPEG/PNG", + "BMP type not supported: unsupported compression"); // this includes + // PNG/JPEG modes + if (compress == 3 && info->bpp != 16 && info->bpp != 32) + return stbi__errpuc("bad BMP", + "bad BMP"); // bitfields requires 16 or 32 bits/pixel + stbi__get32le(s); // discard sizeof + stbi__get32le(s); // discard hres + stbi__get32le(s); // discard vres + stbi__get32le(s); // discard colorsused + stbi__get32le(s); // discard max important + if (hsz == 40 || hsz == 56) { + if (hsz == 56) { + stbi__get32le(s); + stbi__get32le(s); + stbi__get32le(s); + stbi__get32le(s); + } + if (info->bpp == 16 || info->bpp == 32) { + if (compress == 0) { + stbi__bmp_set_mask_defaults(info, compress); + } else if (compress == 3) { + info->mr = stbi__get32le(s); + info->mg = stbi__get32le(s); + info->mb = stbi__get32le(s); + info->extra_read += 12; + // not documented, but generated by photoshop and handled by mspaint + if (info->mr == info->mg && info->mg == info->mb) { + // ?!?!? + return stbi__errpuc("bad BMP", "bad BMP"); + } + } else + return stbi__errpuc("bad BMP", "bad BMP"); + } + } else { + // V4/V5 header + int i; + if (hsz != 108 && hsz != 124) return stbi__errpuc("bad BMP", "bad BMP"); + info->mr = stbi__get32le(s); + info->mg = stbi__get32le(s); + info->mb = stbi__get32le(s); + info->ma = stbi__get32le(s); + if (compress != + 3) // override mr/mg/mb unless in BI_BITFIELDS mode, as per docs + stbi__bmp_set_mask_defaults(info, compress); + stbi__get32le(s); // discard color space + for (i = 0; i < 12; ++i) + stbi__get32le(s); // discard color space parameters + if (hsz == 124) { + stbi__get32le(s); // discard rendering intent + stbi__get32le(s); // discard offset of profile data + stbi__get32le(s); // discard size of profile data + stbi__get32le(s); // discard reserved + } + } + } + return (void *)1; +} + +static void *stbi__bmp_load(stbi__context *s, int *x, int *y, int *comp, + int req_comp, stbi__result_info *ri) { + stbi_uc *out; + unsigned int mr = 0, mg = 0, mb = 0, ma = 0, all_a; + stbi_uc pal[256][4]; + int psize = 0, i, j, width; + int flip_vertically, pad, target; + stbi__bmp_data info; + STBI_NOTUSED(ri); + + info.all_a = 255; + if (stbi__bmp_parse_header(s, &info) == NULL) + return NULL; // error code already set + + flip_vertically = ((int)s->img_y) > 0; + s->img_y = abs((int)s->img_y); + + if (s->img_y > STBI_MAX_DIMENSIONS) + return stbi__errpuc("too large", "Very large image (corrupt?)"); + if (s->img_x > STBI_MAX_DIMENSIONS) + return stbi__errpuc("too large", "Very large image (corrupt?)"); + + mr = info.mr; + mg = info.mg; + mb = info.mb; + ma = info.ma; + all_a = info.all_a; + + if (info.hsz == 12) { + if (info.bpp < 24) psize = (info.offset - info.extra_read - 24) / 3; + } else { + if (info.bpp < 16) psize = (info.offset - info.extra_read - info.hsz) >> 2; + } + if (psize == 0) { + // accept some number of extra bytes after the header, but if the offset + // points either to before the header ends or implies a large amount of + // extra data, reject the file as malformed + int bytes_read_so_far = s->callback_already_read + + (int)(s->img_buffer - s->img_buffer_original); + int header_limit = + 1024; // max we actually read is below 256 bytes currently. + int extra_data_limit = 256 * 4; // what ordinarily goes here is a palette; + // 256 entries*4 bytes is its max size. + if (bytes_read_so_far <= 0 || bytes_read_so_far > header_limit) { + return stbi__errpuc("bad header", "Corrupt BMP"); + } + // we established that bytes_read_so_far is positive and sensible. + // the first half of this test rejects offsets that are either too small + // positives, or negative, and guarantees that info.offset >= + // bytes_read_so_far > 0. this in turn ensures the number computed in the + // second half of the test can't overflow. + if (info.offset < bytes_read_so_far || + info.offset - bytes_read_so_far > extra_data_limit) { + return stbi__errpuc("bad offset", "Corrupt BMP"); + } else { + stbi__skip(s, info.offset - bytes_read_so_far); + } + } + + if (info.bpp == 24 && ma == 0xff000000) + s->img_n = 3; + else + s->img_n = ma ? 4 : 3; + if (req_comp && req_comp >= 3) // we can directly decode 3 or 4 + target = req_comp; + else + target = s->img_n; // if they want monochrome, we'll post-convert + + // sanity-check size + if (!stbi__mad3sizes_valid(target, s->img_x, s->img_y, 0)) + return stbi__errpuc("too large", "Corrupt BMP"); + + out = (stbi_uc *)stbi__malloc_mad3(target, s->img_x, s->img_y, 0); + if (!out) return stbi__errpuc("outofmem", "Out of memory"); + if (info.bpp < 16) { + int z = 0; + if (psize == 0 || psize > 256) { + STBI_FREE(out); + return stbi__errpuc("invalid", "Corrupt BMP"); + } + for (i = 0; i < psize; ++i) { + pal[i][2] = stbi__get8(s); + pal[i][1] = stbi__get8(s); + pal[i][0] = stbi__get8(s); + if (info.hsz != 12) stbi__get8(s); + pal[i][3] = 255; + } + stbi__skip(s, info.offset - info.extra_read - info.hsz - + psize * (info.hsz == 12 ? 3 : 4)); + if (info.bpp == 1) + width = (s->img_x + 7) >> 3; + else if (info.bpp == 4) + width = (s->img_x + 1) >> 1; + else if (info.bpp == 8) + width = s->img_x; + else { + STBI_FREE(out); + return stbi__errpuc("bad bpp", "Corrupt BMP"); + } + pad = (-width) & 3; + if (info.bpp == 1) { + for (j = 0; j < (int)s->img_y; ++j) { + int bit_offset = 7, v = stbi__get8(s); + for (i = 0; i < (int)s->img_x; ++i) { + int color = (v >> bit_offset) & 0x1; + out[z++] = pal[color][0]; + out[z++] = pal[color][1]; + out[z++] = pal[color][2]; + if (target == 4) out[z++] = 255; + if (i + 1 == (int)s->img_x) break; + if ((--bit_offset) < 0) { + bit_offset = 7; + v = stbi__get8(s); + } + } + stbi__skip(s, pad); + } + } else { + for (j = 0; j < (int)s->img_y; ++j) { + for (i = 0; i < (int)s->img_x; i += 2) { + int v = stbi__get8(s), v2 = 0; + if (info.bpp == 4) { + v2 = v & 15; + v >>= 4; + } + out[z++] = pal[v][0]; + out[z++] = pal[v][1]; + out[z++] = pal[v][2]; + if (target == 4) out[z++] = 255; + if (i + 1 == (int)s->img_x) break; + v = (info.bpp == 8) ? stbi__get8(s) : v2; + out[z++] = pal[v][0]; + out[z++] = pal[v][1]; + out[z++] = pal[v][2]; + if (target == 4) out[z++] = 255; + } + stbi__skip(s, pad); + } + } + } else { + int rshift = 0, gshift = 0, bshift = 0, ashift = 0, rcount = 0, gcount = 0, + bcount = 0, acount = 0; + int z = 0; + int easy = 0; + stbi__skip(s, info.offset - info.extra_read - info.hsz); + if (info.bpp == 24) + width = 3 * s->img_x; + else if (info.bpp == 16) + width = 2 * s->img_x; + else /* bpp = 32 and pad = 0 */ + width = 0; + pad = (-width) & 3; + if (info.bpp == 24) { + easy = 1; + } else if (info.bpp == 32) { + if (mb == 0xff && mg == 0xff00 && mr == 0x00ff0000 && ma == 0xff000000) + easy = 2; + } + if (!easy) { + if (!mr || !mg || !mb) { + STBI_FREE(out); + return stbi__errpuc("bad masks", "Corrupt BMP"); + } + // right shift amt to put high bit in position #7 + rshift = stbi__high_bit(mr) - 7; + rcount = stbi__bitcount(mr); + gshift = stbi__high_bit(mg) - 7; + gcount = stbi__bitcount(mg); + bshift = stbi__high_bit(mb) - 7; + bcount = stbi__bitcount(mb); + ashift = stbi__high_bit(ma) - 7; + acount = stbi__bitcount(ma); + if (rcount > 8 || gcount > 8 || bcount > 8 || acount > 8) { + STBI_FREE(out); + return stbi__errpuc("bad masks", "Corrupt BMP"); + } + } + for (j = 0; j < (int)s->img_y; ++j) { + if (easy) { + for (i = 0; i < (int)s->img_x; ++i) { + unsigned char a; + out[z + 2] = stbi__get8(s); + out[z + 1] = stbi__get8(s); + out[z + 0] = stbi__get8(s); + z += 3; + a = (easy == 2 ? stbi__get8(s) : 255); + all_a |= a; + if (target == 4) out[z++] = a; + } + } else { + int bpp = info.bpp; + for (i = 0; i < (int)s->img_x; ++i) { + stbi__uint32 v = + (bpp == 16 ? (stbi__uint32)stbi__get16le(s) : stbi__get32le(s)); + unsigned int a; + out[z++] = STBI__BYTECAST(stbi__shiftsigned(v & mr, rshift, rcount)); + out[z++] = STBI__BYTECAST(stbi__shiftsigned(v & mg, gshift, gcount)); + out[z++] = STBI__BYTECAST(stbi__shiftsigned(v & mb, bshift, bcount)); + a = (ma ? stbi__shiftsigned(v & ma, ashift, acount) : 255); + all_a |= a; + if (target == 4) out[z++] = STBI__BYTECAST(a); + } + } + stbi__skip(s, pad); + } + } + + // if alpha channel is all 0s, replace with all 255s + if (target == 4 && all_a == 0) + for (i = 4 * s->img_x * s->img_y - 1; i >= 0; i -= 4) out[i] = 255; + + if (flip_vertically) { + stbi_uc t; + for (j = 0; j < (int)s->img_y >> 1; ++j) { + stbi_uc *p1 = out + j * s->img_x * target; + stbi_uc *p2 = out + (s->img_y - 1 - j) * s->img_x * target; + for (i = 0; i < (int)s->img_x * target; ++i) { + t = p1[i]; + p1[i] = p2[i]; + p2[i] = t; + } + } + } + + if (req_comp && req_comp != target) { + out = stbi__convert_format(out, target, req_comp, s->img_x, s->img_y); + if (out == NULL) return out; // stbi__convert_format frees input on failure + } + + *x = s->img_x; + *y = s->img_y; + if (comp) *comp = s->img_n; + return out; +} +#endif + +// Targa Truevision - TGA +// by Jonathan Dummer +#ifndef STBI_NO_TGA +// returns STBI_rgb or whatever, 0 on error +static int stbi__tga_get_comp(int bits_per_pixel, int is_grey, int *is_rgb16) { + // only RGB or RGBA (incl. 16bit) or grey allowed + if (is_rgb16) *is_rgb16 = 0; + switch (bits_per_pixel) { + case 8: + return STBI_grey; + case 16: + if (is_grey) return STBI_grey_alpha; + // fallthrough + case 15: + if (is_rgb16) *is_rgb16 = 1; + return STBI_rgb; + case 24: // fallthrough + case 32: + return bits_per_pixel / 8; + default: + return 0; + } +} + +static int stbi__tga_info(stbi__context *s, int *x, int *y, int *comp) { + int tga_w, tga_h, tga_comp, tga_image_type, tga_bits_per_pixel, + tga_colormap_bpp; + int sz, tga_colormap_type; + stbi__get8(s); // discard Offset + tga_colormap_type = stbi__get8(s); // colormap type + if (tga_colormap_type > 1) { + stbi__rewind(s); + return 0; // only RGB or indexed allowed + } + tga_image_type = stbi__get8(s); // image type + if (tga_colormap_type == 1) { // colormapped (paletted) image + if (tga_image_type != 1 && tga_image_type != 9) { + stbi__rewind(s); + return 0; + } + stbi__skip(s, + 4); // skip index of first colormap entry and number of entries + sz = stbi__get8(s); // check bits per palette color entry + if ((sz != 8) && (sz != 15) && (sz != 16) && (sz != 24) && (sz != 32)) { + stbi__rewind(s); + return 0; + } + stbi__skip(s, 4); // skip image x and y origin + tga_colormap_bpp = sz; + } else { // "normal" image w/o colormap - only RGB or grey allowed, +/- RLE + if ((tga_image_type != 2) && (tga_image_type != 3) && + (tga_image_type != 10) && (tga_image_type != 11)) { + stbi__rewind(s); + return 0; // only RGB or grey allowed, +/- RLE + } + stbi__skip(s, 9); // skip colormap specification and image x/y origin + tga_colormap_bpp = 0; + } + tga_w = stbi__get16le(s); + if (tga_w < 1) { + stbi__rewind(s); + return 0; // test width + } + tga_h = stbi__get16le(s); + if (tga_h < 1) { + stbi__rewind(s); + return 0; // test height + } + tga_bits_per_pixel = stbi__get8(s); // bits per pixel + stbi__get8(s); // ignore alpha bits + if (tga_colormap_bpp != 0) { + if ((tga_bits_per_pixel != 8) && (tga_bits_per_pixel != 16)) { + // when using a colormap, tga_bits_per_pixel is the size of the indexes + // I don't think anything but 8 or 16bit indexes makes sense + stbi__rewind(s); + return 0; + } + tga_comp = stbi__tga_get_comp(tga_colormap_bpp, 0, NULL); + } else { + tga_comp = stbi__tga_get_comp( + tga_bits_per_pixel, (tga_image_type == 3) || (tga_image_type == 11), + NULL); + } + if (!tga_comp) { + stbi__rewind(s); + return 0; + } + if (x) *x = tga_w; + if (y) *y = tga_h; + if (comp) *comp = tga_comp; + return 1; // seems to have passed everything +} + +static int stbi__tga_test(stbi__context *s) { + int res = 0; + int sz, tga_color_type; + stbi__get8(s); // discard Offset + tga_color_type = stbi__get8(s); // color type + if (tga_color_type > 1) goto errorEnd; // only RGB or indexed allowed + sz = stbi__get8(s); // image type + if (tga_color_type == 1) { // colormapped (paletted) image + if (sz != 1 && sz != 9) + goto errorEnd; // colortype 1 demands image type 1 or 9 + stbi__skip(s, + 4); // skip index of first colormap entry and number of entries + sz = stbi__get8(s); // check bits per palette color entry + if ((sz != 8) && (sz != 15) && (sz != 16) && (sz != 24) && (sz != 32)) + goto errorEnd; + stbi__skip(s, 4); // skip image x and y origin + } else { // "normal" image w/o colormap + if ((sz != 2) && (sz != 3) && (sz != 10) && (sz != 11)) + goto errorEnd; // only RGB or grey allowed, +/- RLE + stbi__skip(s, 9); // skip colormap specification and image x/y origin + } + if (stbi__get16le(s) < 1) goto errorEnd; // test width + if (stbi__get16le(s) < 1) goto errorEnd; // test height + sz = stbi__get8(s); // bits per pixel + if ((tga_color_type == 1) && (sz != 8) && (sz != 16)) + goto errorEnd; // for colormapped images, bpp is size of an index + if ((sz != 8) && (sz != 15) && (sz != 16) && (sz != 24) && (sz != 32)) + goto errorEnd; + + res = 1; // if we got this far, everything's good and we can return 1 instead + // of 0 + +errorEnd: + stbi__rewind(s); + return res; +} + +// read 16bit value and convert to 24bit RGB +static void stbi__tga_read_rgb16(stbi__context *s, stbi_uc *out) { + stbi__uint16 px = (stbi__uint16)stbi__get16le(s); + stbi__uint16 fiveBitMask = 31; + // we have 3 channels with 5bits each + int r = (px >> 10) & fiveBitMask; + int g = (px >> 5) & fiveBitMask; + int b = px & fiveBitMask; + // Note that this saves the data in RGB(A) order, so it doesn't need to be + // swapped later + out[0] = (stbi_uc)((r * 255) / 31); + out[1] = (stbi_uc)((g * 255) / 31); + out[2] = (stbi_uc)((b * 255) / 31); + + // some people claim that the most significant bit might be used for alpha + // (possibly if an alpha-bit is set in the "image descriptor byte") + // but that only made 16bit test images completely translucent.. + // so let's treat all 15 and 16bit TGAs as RGB with no alpha. +} + +static void *stbi__tga_load(stbi__context *s, int *x, int *y, int *comp, + int req_comp, stbi__result_info *ri) { + // read in the TGA header stuff + int tga_offset = stbi__get8(s); + int tga_indexed = stbi__get8(s); + int tga_image_type = stbi__get8(s); + int tga_is_RLE = 0; + int tga_palette_start = stbi__get16le(s); + int tga_palette_len = stbi__get16le(s); + int tga_palette_bits = stbi__get8(s); + int tga_x_origin = stbi__get16le(s); + int tga_y_origin = stbi__get16le(s); + int tga_width = stbi__get16le(s); + int tga_height = stbi__get16le(s); + int tga_bits_per_pixel = stbi__get8(s); + int tga_comp, tga_rgb16 = 0; + int tga_inverted = stbi__get8(s); + // int tga_alpha_bits = tga_inverted & 15; // the 4 lowest bits - unused + // (useless?) + // image data + unsigned char *tga_data; + unsigned char *tga_palette = NULL; + int i, j; + unsigned char raw_data[4] = {0}; + int RLE_count = 0; + int RLE_repeating = 0; + int read_next_pixel = 1; + STBI_NOTUSED(ri); + STBI_NOTUSED(tga_x_origin); // @TODO + STBI_NOTUSED(tga_y_origin); // @TODO + + if (tga_height > STBI_MAX_DIMENSIONS) + return stbi__errpuc("too large", "Very large image (corrupt?)"); + if (tga_width > STBI_MAX_DIMENSIONS) + return stbi__errpuc("too large", "Very large image (corrupt?)"); + + // do a tiny bit of precessing + if (tga_image_type >= 8) { + tga_image_type -= 8; + tga_is_RLE = 1; + } + tga_inverted = 1 - ((tga_inverted >> 5) & 1); + + // If I'm paletted, then I'll use the number of bits from the palette + if (tga_indexed) + tga_comp = stbi__tga_get_comp(tga_palette_bits, 0, &tga_rgb16); + else + tga_comp = stbi__tga_get_comp(tga_bits_per_pixel, (tga_image_type == 3), + &tga_rgb16); + + if (!tga_comp) // shouldn't really happen, stbi__tga_test() should have + // ensured basic consistency + return stbi__errpuc("bad format", "Can't find out TGA pixelformat"); + + // tga info + *x = tga_width; + *y = tga_height; + if (comp) *comp = tga_comp; + + if (!stbi__mad3sizes_valid(tga_width, tga_height, tga_comp, 0)) + return stbi__errpuc("too large", "Corrupt TGA"); + + tga_data = + (unsigned char *)stbi__malloc_mad3(tga_width, tga_height, tga_comp, 0); + if (!tga_data) return stbi__errpuc("outofmem", "Out of memory"); + + // skip to the data's starting position (offset usually = 0) + stbi__skip(s, tga_offset); + + if (!tga_indexed && !tga_is_RLE && !tga_rgb16) { + for (i = 0; i < tga_height; ++i) { + int row = tga_inverted ? tga_height - i - 1 : i; + stbi_uc *tga_row = tga_data + row * tga_width * tga_comp; + stbi__getn(s, tga_row, tga_width * tga_comp); + } + } else { + // do I need to load a palette? + if (tga_indexed) { + if (tga_palette_len == 0) { /* you have to have at least one entry! */ + STBI_FREE(tga_data); + return stbi__errpuc("bad palette", "Corrupt TGA"); + } + + // any data to skip? (offset usually = 0) + stbi__skip(s, tga_palette_start); + // load the palette + tga_palette = + (unsigned char *)stbi__malloc_mad2(tga_palette_len, tga_comp, 0); + if (!tga_palette) { + STBI_FREE(tga_data); + return stbi__errpuc("outofmem", "Out of memory"); + } + if (tga_rgb16) { + stbi_uc *pal_entry = tga_palette; + STBI_ASSERT(tga_comp == STBI_rgb); + for (i = 0; i < tga_palette_len; ++i) { + stbi__tga_read_rgb16(s, pal_entry); + pal_entry += tga_comp; + } + } else if (!stbi__getn(s, tga_palette, tga_palette_len * tga_comp)) { + STBI_FREE(tga_data); + STBI_FREE(tga_palette); + return stbi__errpuc("bad palette", "Corrupt TGA"); + } + } + // load the data + for (i = 0; i < tga_width * tga_height; ++i) { + // if I'm in RLE mode, do I need to get a RLE stbi__pngchunk? + if (tga_is_RLE) { + if (RLE_count == 0) { + // yep, get the next byte as a RLE command + int RLE_cmd = stbi__get8(s); + RLE_count = 1 + (RLE_cmd & 127); + RLE_repeating = RLE_cmd >> 7; + read_next_pixel = 1; + } else if (!RLE_repeating) { + read_next_pixel = 1; + } + } else { + read_next_pixel = 1; + } + // OK, if I need to read a pixel, do it now + if (read_next_pixel) { + // load however much data we did have + if (tga_indexed) { + // read in index, then perform the lookup + int pal_idx = + (tga_bits_per_pixel == 8) ? stbi__get8(s) : stbi__get16le(s); + if (pal_idx >= tga_palette_len) { + // invalid index + pal_idx = 0; + } + pal_idx *= tga_comp; + for (j = 0; j < tga_comp; ++j) { + raw_data[j] = tga_palette[pal_idx + j]; + } + } else if (tga_rgb16) { + STBI_ASSERT(tga_comp == STBI_rgb); + stbi__tga_read_rgb16(s, raw_data); + } else { + // read in the data raw + for (j = 0; j < tga_comp; ++j) { + raw_data[j] = stbi__get8(s); + } + } + // clear the reading flag for the next pixel + read_next_pixel = 0; + } // end of reading a pixel + + // copy data + for (j = 0; j < tga_comp; ++j) tga_data[i * tga_comp + j] = raw_data[j]; + + // in case we're in RLE mode, keep counting down + --RLE_count; + } + // do I need to invert the image? + if (tga_inverted) { + for (j = 0; j * 2 < tga_height; ++j) { + int index1 = j * tga_width * tga_comp; + int index2 = (tga_height - 1 - j) * tga_width * tga_comp; + for (i = tga_width * tga_comp; i > 0; --i) { + unsigned char temp = tga_data[index1]; + tga_data[index1] = tga_data[index2]; + tga_data[index2] = temp; + ++index1; + ++index2; + } + } + } + // clear my palette, if I had one + if (tga_palette != NULL) { + STBI_FREE(tga_palette); + } + } + + // swap RGB - if the source data was RGB16, it already is in the right order + if (tga_comp >= 3 && !tga_rgb16) { + unsigned char *tga_pixel = tga_data; + for (i = 0; i < tga_width * tga_height; ++i) { + unsigned char temp = tga_pixel[0]; + tga_pixel[0] = tga_pixel[2]; + tga_pixel[2] = temp; + tga_pixel += tga_comp; + } + } + + // convert to target component count + if (req_comp && req_comp != tga_comp) + tga_data = stbi__convert_format(tga_data, tga_comp, req_comp, tga_width, + tga_height); + + // the things I do to get rid of an error message, and yet keep + // Microsoft's C compilers happy... [8^( + tga_palette_start = tga_palette_len = tga_palette_bits = tga_x_origin = + tga_y_origin = 0; + STBI_NOTUSED(tga_palette_start); + // OK, done + return tga_data; +} +#endif + +// ************************************************************************************************* +// Photoshop PSD loader -- PD by Thatcher Ulrich, integration by Nicolas Schulz, +// tweaked by STB + +#ifndef STBI_NO_PSD +static int stbi__psd_test(stbi__context *s) { + int r = (stbi__get32be(s) == 0x38425053); + stbi__rewind(s); + return r; +} + +static int stbi__psd_decode_rle(stbi__context *s, stbi_uc *p, int pixelCount) { + int count, nleft, len; + + count = 0; + while ((nleft = pixelCount - count) > 0) { + len = stbi__get8(s); + if (len == 128) { + // No-op. + } else if (len < 128) { + // Copy next len+1 bytes literally. + len++; + if (len > nleft) return 0; // corrupt data + count += len; + while (len) { + *p = stbi__get8(s); + p += 4; + len--; + } + } else if (len > 128) { + stbi_uc val; + // Next -len+1 bytes in the dest are replicated from next source byte. + // (Interpret len as a negative 8-bit int.) + len = 257 - len; + if (len > nleft) return 0; // corrupt data + val = stbi__get8(s); + count += len; + while (len) { + *p = val; + p += 4; + len--; + } + } + } + + return 1; +} + +static void *stbi__psd_load(stbi__context *s, int *x, int *y, int *comp, + int req_comp, stbi__result_info *ri, int bpc) { + int pixelCount; + int channelCount, compression; + int channel, i; + int bitdepth; + int w, h; + stbi_uc *out; + STBI_NOTUSED(ri); + + // Check identifier + if (stbi__get32be(s) != 0x38425053) // "8BPS" + return stbi__errpuc("not PSD", "Corrupt PSD image"); + + // Check file type version. + if (stbi__get16be(s) != 1) + return stbi__errpuc("wrong version", "Unsupported version of PSD image"); + + // Skip 6 reserved bytes. + stbi__skip(s, 6); + + // Read the number of channels (R, G, B, A, etc). + channelCount = stbi__get16be(s); + if (channelCount < 0 || channelCount > 16) + return stbi__errpuc("wrong channel count", + "Unsupported number of channels in PSD image"); + + // Read the rows and columns of the image. + h = stbi__get32be(s); + w = stbi__get32be(s); + + if (h > STBI_MAX_DIMENSIONS) + return stbi__errpuc("too large", "Very large image (corrupt?)"); + if (w > STBI_MAX_DIMENSIONS) + return stbi__errpuc("too large", "Very large image (corrupt?)"); + + // Make sure the depth is 8 bits. + bitdepth = stbi__get16be(s); + if (bitdepth != 8 && bitdepth != 16) + return stbi__errpuc("unsupported bit depth", + "PSD bit depth is not 8 or 16 bit"); + + // Make sure the color mode is RGB. + // Valid options are: + // 0: Bitmap + // 1: Grayscale + // 2: Indexed color + // 3: RGB color + // 4: CMYK color + // 7: Multichannel + // 8: Duotone + // 9: Lab color + if (stbi__get16be(s) != 3) + return stbi__errpuc("wrong color format", "PSD is not in RGB color format"); + + // Skip the Mode Data. (It's the palette for indexed color; other info for + // other modes.) + stbi__skip(s, stbi__get32be(s)); + + // Skip the image resources. (resolution, pen tool paths, etc) + stbi__skip(s, stbi__get32be(s)); + + // Skip the reserved data. + stbi__skip(s, stbi__get32be(s)); + + // Find out if the data is compressed. + // Known values: + // 0: no compression + // 1: RLE compressed + compression = stbi__get16be(s); + if (compression > 1) + return stbi__errpuc("bad compression", + "PSD has an unknown compression format"); + + // Check size + if (!stbi__mad3sizes_valid(4, w, h, 0)) + return stbi__errpuc("too large", "Corrupt PSD"); + + // Create the destination image. + + if (!compression && bitdepth == 16 && bpc == 16) { + out = (stbi_uc *)stbi__malloc_mad3(8, w, h, 0); + ri->bits_per_channel = 16; + } else + out = (stbi_uc *)stbi__malloc(4 * w * h); + + if (!out) return stbi__errpuc("outofmem", "Out of memory"); + pixelCount = w * h; + + // Initialize the data to zero. + // memset( out, 0, pixelCount * 4 ); + + // Finally, the image data. + if (compression) { + // RLE as used by .PSD and .TIFF + // Loop until you get the number of unpacked bytes you are expecting: + // Read the next source byte into n. + // If n is between 0 and 127 inclusive, copy the next n+1 bytes + // literally. Else if n is between -127 and -1 inclusive, copy the next + // byte -n+1 times. Else if n is 128, noop. + // Endloop + + // The RLE-compressed data is preceded by a 2-byte data count for each row + // in the data, which we're going to just skip. + stbi__skip(s, h * channelCount * 2); + + // Read the RLE data by channel. + for (channel = 0; channel < 4; channel++) { + stbi_uc *p; + + p = out + channel; + if (channel >= channelCount) { + // Fill this channel with default data. + for (i = 0; i < pixelCount; i++, p += 4) *p = (channel == 3 ? 255 : 0); + } else { + // Read the RLE data. + if (!stbi__psd_decode_rle(s, p, pixelCount)) { + STBI_FREE(out); + return stbi__errpuc("corrupt", "bad RLE data"); + } + } + } + + } else { + // We're at the raw image data. It's each channel in order (Red, Green, + // Blue, Alpha, ...) where each channel consists of an 8-bit (or 16-bit) + // value for each pixel in the image. + + // Read the data by channel. + for (channel = 0; channel < 4; channel++) { + if (channel >= channelCount) { + // Fill this channel with default data. + if (bitdepth == 16 && bpc == 16) { + stbi__uint16 *q = ((stbi__uint16 *)out) + channel; + stbi__uint16 val = channel == 3 ? 65535 : 0; + for (i = 0; i < pixelCount; i++, q += 4) *q = val; + } else { + stbi_uc *p = out + channel; + stbi_uc val = channel == 3 ? 255 : 0; + for (i = 0; i < pixelCount; i++, p += 4) *p = val; + } + } else { + if (ri->bits_per_channel == 16) { // output bpc + stbi__uint16 *q = ((stbi__uint16 *)out) + channel; + for (i = 0; i < pixelCount; i++, q += 4) + *q = (stbi__uint16)stbi__get16be(s); + } else { + stbi_uc *p = out + channel; + if (bitdepth == 16) { // input bpc + for (i = 0; i < pixelCount; i++, p += 4) + *p = (stbi_uc)(stbi__get16be(s) >> 8); + } else { + for (i = 0; i < pixelCount; i++, p += 4) *p = stbi__get8(s); + } + } + } + } + } + + // remove weird white matte from PSD + if (channelCount >= 4) { + if (ri->bits_per_channel == 16) { + for (i = 0; i < w * h; ++i) { + stbi__uint16 *pixel = (stbi__uint16 *)out + 4 * i; + if (pixel[3] != 0 && pixel[3] != 65535) { + float a = pixel[3] / 65535.0f; + float ra = 1.0f / a; + float inv_a = 65535.0f * (1 - ra); + pixel[0] = (stbi__uint16)(pixel[0] * ra + inv_a); + pixel[1] = (stbi__uint16)(pixel[1] * ra + inv_a); + pixel[2] = (stbi__uint16)(pixel[2] * ra + inv_a); + } + } + } else { + for (i = 0; i < w * h; ++i) { + unsigned char *pixel = out + 4 * i; + if (pixel[3] != 0 && pixel[3] != 255) { + float a = pixel[3] / 255.0f; + float ra = 1.0f / a; + float inv_a = 255.0f * (1 - ra); + pixel[0] = (unsigned char)(pixel[0] * ra + inv_a); + pixel[1] = (unsigned char)(pixel[1] * ra + inv_a); + pixel[2] = (unsigned char)(pixel[2] * ra + inv_a); + } + } + } + } + + // convert to desired output format + if (req_comp && req_comp != 4) { + if (ri->bits_per_channel == 16) + out = (stbi_uc *)stbi__convert_format16((stbi__uint16 *)out, 4, req_comp, + w, h); + else + out = stbi__convert_format(out, 4, req_comp, w, h); + if (out == NULL) return out; // stbi__convert_format frees input on failure + } + + if (comp) *comp = 4; + *y = h; + *x = w; + + return out; +} +#endif + +// ************************************************************************************************* +// Softimage PIC loader +// by Tom Seddon +// +// See http://softimage.wiki.softimage.com/index.php/INFO:_PIC_file_format +// See http://ozviz.wasp.uwa.edu.au/~pbourke/dataformats/softimagepic/ + +#ifndef STBI_NO_PIC +static int stbi__pic_is4(stbi__context *s, const char *str) { + int i; + for (i = 0; i < 4; ++i) + if (stbi__get8(s) != (stbi_uc)str[i]) return 0; + + return 1; +} + +static int stbi__pic_test_core(stbi__context *s) { + int i; + + if (!stbi__pic_is4(s, "\x53\x80\xF6\x34")) return 0; + + for (i = 0; i < 84; ++i) stbi__get8(s); + + if (!stbi__pic_is4(s, "PICT")) return 0; + + return 1; +} + +typedef struct { + stbi_uc size, type, channel; +} stbi__pic_packet; + +static stbi_uc *stbi__readval(stbi__context *s, int channel, stbi_uc *dest) { + int mask = 0x80, i; + + for (i = 0; i < 4; ++i, mask >>= 1) { + if (channel & mask) { + if (stbi__at_eof(s)) + return stbi__errpuc("bad file", "PIC file too short"); + dest[i] = stbi__get8(s); + } + } + + return dest; +} + +static void stbi__copyval(int channel, stbi_uc *dest, const stbi_uc *src) { + int mask = 0x80, i; + + for (i = 0; i < 4; ++i, mask >>= 1) + if (channel & mask) dest[i] = src[i]; +} + +static stbi_uc *stbi__pic_load_core(stbi__context *s, int width, int height, + int *comp, stbi_uc *result) { + int act_comp = 0, num_packets = 0, y, chained; + stbi__pic_packet packets[10]; + + // this will (should...) cater for even some bizarre stuff like having data + // for the same channel in multiple packets. + do { + stbi__pic_packet *packet; + + if (num_packets == sizeof(packets) / sizeof(packets[0])) + return stbi__errpuc("bad format", "too many packets"); + + packet = &packets[num_packets++]; + + chained = stbi__get8(s); + packet->size = stbi__get8(s); + packet->type = stbi__get8(s); + packet->channel = stbi__get8(s); + + act_comp |= packet->channel; + + if (stbi__at_eof(s)) + return stbi__errpuc("bad file", "file too short (reading packets)"); + if (packet->size != 8) + return stbi__errpuc("bad format", "packet isn't 8bpp"); + } while (chained); + + *comp = (act_comp & 0x10 ? 4 : 3); // has alpha channel? + + for (y = 0; y < height; ++y) { + int packet_idx; + + for (packet_idx = 0; packet_idx < num_packets; ++packet_idx) { + stbi__pic_packet *packet = &packets[packet_idx]; + stbi_uc *dest = result + y * width * 4; + + switch (packet->type) { + default: + return stbi__errpuc("bad format", "packet has bad compression type"); + + case 0: { // uncompressed + int x; + + for (x = 0; x < width; ++x, dest += 4) + if (!stbi__readval(s, packet->channel, dest)) return 0; + break; + } + + case 1: // Pure RLE + { + int left = width, i; + + while (left > 0) { + stbi_uc count, value[4]; + + count = stbi__get8(s); + if (stbi__at_eof(s)) + return stbi__errpuc("bad file", + "file too short (pure read count)"); + + if (count > left) count = (stbi_uc)left; + + if (!stbi__readval(s, packet->channel, value)) return 0; + + for (i = 0; i < count; ++i, dest += 4) + stbi__copyval(packet->channel, dest, value); + left -= count; + } + } break; + + case 2: { // Mixed RLE + int left = width; + while (left > 0) { + int count = stbi__get8(s), i; + if (stbi__at_eof(s)) + return stbi__errpuc("bad file", + "file too short (mixed read count)"); + + if (count >= 128) { // Repeated + stbi_uc value[4]; + + if (count == 128) + count = stbi__get16be(s); + else + count -= 127; + if (count > left) + return stbi__errpuc("bad file", "scanline overrun"); + + if (!stbi__readval(s, packet->channel, value)) return 0; + + for (i = 0; i < count; ++i, dest += 4) + stbi__copyval(packet->channel, dest, value); + } else { // Raw + ++count; + if (count > left) + return stbi__errpuc("bad file", "scanline overrun"); + + for (i = 0; i < count; ++i, dest += 4) + if (!stbi__readval(s, packet->channel, dest)) return 0; + } + left -= count; + } + break; + } + } + } + } + + return result; +} + +static void *stbi__pic_load(stbi__context *s, int *px, int *py, int *comp, + int req_comp, stbi__result_info *ri) { + stbi_uc *result; + int i, x, y, internal_comp; + STBI_NOTUSED(ri); + + if (!comp) comp = &internal_comp; + + for (i = 0; i < 92; ++i) stbi__get8(s); + + x = stbi__get16be(s); + y = stbi__get16be(s); + + if (y > STBI_MAX_DIMENSIONS) + return stbi__errpuc("too large", "Very large image (corrupt?)"); + if (x > STBI_MAX_DIMENSIONS) + return stbi__errpuc("too large", "Very large image (corrupt?)"); + + if (stbi__at_eof(s)) + return stbi__errpuc("bad file", "file too short (pic header)"); + if (!stbi__mad3sizes_valid(x, y, 4, 0)) + return stbi__errpuc("too large", "PIC image too large to decode"); + + stbi__get32be(s); // skip `ratio' + stbi__get16be(s); // skip `fields' + stbi__get16be(s); // skip `pad' + + // intermediate buffer is RGBA + result = (stbi_uc *)stbi__malloc_mad3(x, y, 4, 0); + if (!result) return stbi__errpuc("outofmem", "Out of memory"); + memset(result, 0xff, x * y * 4); + + if (!stbi__pic_load_core(s, x, y, comp, result)) { + STBI_FREE(result); + result = 0; + } + *px = x; + *py = y; + if (req_comp == 0) req_comp = *comp; + result = stbi__convert_format(result, 4, req_comp, x, y); + + return result; +} + +static int stbi__pic_test(stbi__context *s) { + int r = stbi__pic_test_core(s); + stbi__rewind(s); + return r; +} +#endif + +// ************************************************************************************************* +// GIF loader -- public domain by Jean-Marc Lienher -- simplified/shrunk by stb + +#ifndef STBI_NO_GIF +typedef struct { + stbi__int16 prefix; + stbi_uc first; + stbi_uc suffix; +} stbi__gif_lzw; + +typedef struct { + int w, h; + stbi_uc *out; // output buffer (always 4 components) + stbi_uc *background; // The current "background" as far as a gif is concerned + stbi_uc *history; + int flags, bgindex, ratio, transparent, eflags; + stbi_uc pal[256][4]; + stbi_uc lpal[256][4]; + stbi__gif_lzw codes[8192]; + stbi_uc *color_table; + int parse, step; + int lflags; + int start_x, start_y; + int max_x, max_y; + int cur_x, cur_y; + int line_size; + int delay; +} stbi__gif; + +static int stbi__gif_test_raw(stbi__context *s) { + int sz; + if (stbi__get8(s) != 'G' || stbi__get8(s) != 'I' || stbi__get8(s) != 'F' || + stbi__get8(s) != '8') + return 0; + sz = stbi__get8(s); + if (sz != '9' && sz != '7') return 0; + if (stbi__get8(s) != 'a') return 0; + return 1; +} + +static int stbi__gif_test(stbi__context *s) { + int r = stbi__gif_test_raw(s); + stbi__rewind(s); + return r; +} + +static void stbi__gif_parse_colortable(stbi__context *s, stbi_uc pal[256][4], + int num_entries, int transp) { + int i; + for (i = 0; i < num_entries; ++i) { + pal[i][2] = stbi__get8(s); + pal[i][1] = stbi__get8(s); + pal[i][0] = stbi__get8(s); + pal[i][3] = transp == i ? 0 : 255; + } +} + +static int stbi__gif_header(stbi__context *s, stbi__gif *g, int *comp, + int is_info) { + stbi_uc version; + if (stbi__get8(s) != 'G' || stbi__get8(s) != 'I' || stbi__get8(s) != 'F' || + stbi__get8(s) != '8') + return stbi__err("not GIF", "Corrupt GIF"); + + version = stbi__get8(s); + if (version != '7' && version != '9') + return stbi__err("not GIF", "Corrupt GIF"); + if (stbi__get8(s) != 'a') return stbi__err("not GIF", "Corrupt GIF"); + + stbi__g_failure_reason = ""; + g->w = stbi__get16le(s); + g->h = stbi__get16le(s); + g->flags = stbi__get8(s); + g->bgindex = stbi__get8(s); + g->ratio = stbi__get8(s); + g->transparent = -1; + + if (g->w > STBI_MAX_DIMENSIONS) + return stbi__err("too large", "Very large image (corrupt?)"); + if (g->h > STBI_MAX_DIMENSIONS) + return stbi__err("too large", "Very large image (corrupt?)"); + + if (comp != 0) + *comp = 4; // can't actually tell whether it's 3 or 4 until we parse the + // comments + + if (is_info) return 1; + + if (g->flags & 0x80) + stbi__gif_parse_colortable(s, g->pal, 2 << (g->flags & 7), -1); + + return 1; +} + +static int stbi__gif_info_raw(stbi__context *s, int *x, int *y, int *comp) { + stbi__gif *g = (stbi__gif *)stbi__malloc(sizeof(stbi__gif)); + if (!g) return stbi__err("outofmem", "Out of memory"); + if (!stbi__gif_header(s, g, comp, 1)) { + STBI_FREE(g); + stbi__rewind(s); + return 0; + } + if (x) *x = g->w; + if (y) *y = g->h; + STBI_FREE(g); + return 1; +} + +static void stbi__out_gif_code(stbi__gif *g, stbi__uint16 code) { + stbi_uc *p, *c; + int idx; + + // recurse to decode the prefixes, since the linked-list is backwards, + // and working backwards through an interleaved image would be nasty + if (g->codes[code].prefix >= 0) stbi__out_gif_code(g, g->codes[code].prefix); + + if (g->cur_y >= g->max_y) return; + + idx = g->cur_x + g->cur_y; + p = &g->out[idx]; + g->history[idx / 4] = 1; + + c = &g->color_table[g->codes[code].suffix * 4]; + if (c[3] > 128) { // don't render transparent pixels; + p[0] = c[2]; + p[1] = c[1]; + p[2] = c[0]; + p[3] = c[3]; + } + g->cur_x += 4; + + if (g->cur_x >= g->max_x) { + g->cur_x = g->start_x; + g->cur_y += g->step; + + while (g->cur_y >= g->max_y && g->parse > 0) { + g->step = (1 << g->parse) * g->line_size; + g->cur_y = g->start_y + (g->step >> 1); + --g->parse; + } + } +} + +static stbi_uc *stbi__process_gif_raster(stbi__context *s, stbi__gif *g) { + stbi_uc lzw_cs; + stbi__int32 len, init_code; + stbi__uint32 first; + stbi__int32 codesize, codemask, avail, oldcode, bits, valid_bits, clear; + stbi__gif_lzw *p; + + lzw_cs = stbi__get8(s); + if (lzw_cs > 12) return NULL; + clear = 1 << lzw_cs; + first = 1; + codesize = lzw_cs + 1; + codemask = (1 << codesize) - 1; + bits = 0; + valid_bits = 0; + for (init_code = 0; init_code < clear; init_code++) { + g->codes[init_code].prefix = -1; + g->codes[init_code].first = (stbi_uc)init_code; + g->codes[init_code].suffix = (stbi_uc)init_code; + } + + // support no starting clear code + avail = clear + 2; + oldcode = -1; + + len = 0; + for (;;) { + if (valid_bits < codesize) { + if (len == 0) { + len = stbi__get8(s); // start new block + if (len == 0) return g->out; + } + --len; + bits |= (stbi__int32)stbi__get8(s) << valid_bits; + valid_bits += 8; + } else { + stbi__int32 code = bits & codemask; + bits >>= codesize; + valid_bits -= codesize; + // @OPTIMIZE: is there some way we can accelerate the non-clear path? + if (code == clear) { // clear code + codesize = lzw_cs + 1; + codemask = (1 << codesize) - 1; + avail = clear + 2; + oldcode = -1; + first = 0; + } else if (code == clear + 1) { // end of stream code + stbi__skip(s, len); + while ((len = stbi__get8(s)) > 0) stbi__skip(s, len); + return g->out; + } else if (code <= avail) { + if (first) { + return stbi__errpuc("no clear code", "Corrupt GIF"); + } + + if (oldcode >= 0) { + p = &g->codes[avail++]; + if (avail > 8192) { + return stbi__errpuc("too many codes", "Corrupt GIF"); + } + + p->prefix = (stbi__int16)oldcode; + p->first = g->codes[oldcode].first; + p->suffix = (code == avail) ? p->first : g->codes[code].first; + } else if (code == avail) + return stbi__errpuc("illegal code in raster", "Corrupt GIF"); + + stbi__out_gif_code(g, (stbi__uint16)code); + + if ((avail & codemask) == 0 && avail <= 0x0FFF) { + codesize++; + codemask = (1 << codesize) - 1; + } + + oldcode = code; + } else { + return stbi__errpuc("illegal code in raster", "Corrupt GIF"); + } + } + } +} + +// this function is designed to support animated gifs, although stb_image +// doesn't support it two back is the image from two frames ago, used for a very +// specific disposal format +static stbi_uc *stbi__gif_load_next(stbi__context *s, stbi__gif *g, int *comp, + int req_comp, stbi_uc *two_back) { + int dispose; + int first_frame; + int pi; + int pcount; + STBI_NOTUSED(req_comp); + + // on first frame, any non-written pixels get the background colour + // (non-transparent) + first_frame = 0; + if (g->out == 0) { + if (!stbi__gif_header(s, g, comp, 0)) + return 0; // stbi__g_failure_reason set by stbi__gif_header + if (!stbi__mad3sizes_valid(4, g->w, g->h, 0)) + return stbi__errpuc("too large", "GIF image is too large"); + pcount = g->w * g->h; + g->out = (stbi_uc *)stbi__malloc(4 * pcount); + g->background = (stbi_uc *)stbi__malloc(4 * pcount); + g->history = (stbi_uc *)stbi__malloc(pcount); + if (!g->out || !g->background || !g->history) + return stbi__errpuc("outofmem", "Out of memory"); + + // image is treated as "transparent" at the start - ie, nothing overwrites + // the current background; background colour is only used for pixels that + // are not rendered first frame, after that "background" color refers to the + // color that was there the previous frame. + memset(g->out, 0x00, 4 * pcount); + memset(g->background, 0x00, + 4 * pcount); // state of the background (starts transparent) + memset(g->history, 0x00, + pcount); // pixels that were affected previous frame + first_frame = 1; + } else { + // second frame - how do we dispose of the previous one? + dispose = (g->eflags & 0x1C) >> 2; + pcount = g->w * g->h; + + if ((dispose == 3) && (two_back == 0)) { + dispose = 2; // if I don't have an image to revert back to, default to + // the old background + } + + if (dispose == 3) { // use previous graphic + for (pi = 0; pi < pcount; ++pi) { + if (g->history[pi]) { + memcpy(&g->out[pi * 4], &two_back[pi * 4], 4); + } + } + } else if (dispose == 2) { + // restore what was changed last frame to background before that frame; + for (pi = 0; pi < pcount; ++pi) { + if (g->history[pi]) { + memcpy(&g->out[pi * 4], &g->background[pi * 4], 4); + } + } + } else { + // This is a non-disposal case eithe way, so just + // leave the pixels as is, and they will become the new background + // 1: do not dispose + // 0: not specified. + } + + // background is what out is after the undoing of the previou frame; + memcpy(g->background, g->out, 4 * g->w * g->h); + } + + // clear my history; + memset(g->history, 0x00, + g->w * g->h); // pixels that were affected previous frame + + for (;;) { + int tag = stbi__get8(s); + switch (tag) { + case 0x2C: /* Image Descriptor */ + { + stbi__int32 x, y, w, h; + stbi_uc *o; + + x = stbi__get16le(s); + y = stbi__get16le(s); + w = stbi__get16le(s); + h = stbi__get16le(s); + if (((x + w) > (g->w)) || ((y + h) > (g->h))) + return stbi__errpuc("bad Image Descriptor", "Corrupt GIF"); + + g->line_size = g->w * 4; + g->start_x = x * 4; + g->start_y = y * g->line_size; + g->max_x = g->start_x + w * 4; + g->max_y = g->start_y + h * g->line_size; + g->cur_x = g->start_x; + g->cur_y = g->start_y; + + // if the width of the specified rectangle is 0, that means + // we may not see *any* pixels or the image is malformed; + // to make sure this is caught, move the current y down to + // max_y (which is what out_gif_code checks). + if (w == 0) g->cur_y = g->max_y; + + g->lflags = stbi__get8(s); + + if (g->lflags & 0x40) { + g->step = 8 * g->line_size; // first interlaced spacing + g->parse = 3; + } else { + g->step = g->line_size; + g->parse = 0; + } + + if (g->lflags & 0x80) { + stbi__gif_parse_colortable(s, g->lpal, 2 << (g->lflags & 7), + g->eflags & 0x01 ? g->transparent : -1); + g->color_table = (stbi_uc *)g->lpal; + } else if (g->flags & 0x80) { + g->color_table = (stbi_uc *)g->pal; + } else + return stbi__errpuc("missing color table", "Corrupt GIF"); + + o = stbi__process_gif_raster(s, g); + if (!o) return NULL; + + // if this was the first frame, + pcount = g->w * g->h; + if (first_frame && (g->bgindex > 0)) { + // if first frame, any pixel not drawn to gets the background color + for (pi = 0; pi < pcount; ++pi) { + if (g->history[pi] == 0) { + g->pal[g->bgindex][3] = + 255; // just in case it was made transparent, undo that; It + // will be reset next frame if need be; + memcpy(&g->out[pi * 4], &g->pal[g->bgindex], 4); + } + } + } + + return o; + } + + case 0x21: // Comment Extension. + { + int len; + int ext = stbi__get8(s); + if (ext == 0xF9) { // Graphic Control Extension. + len = stbi__get8(s); + if (len == 4) { + g->eflags = stbi__get8(s); + g->delay = + 10 * + stbi__get16le( + s); // delay - 1/100th of a second, saving as 1/1000ths. + + // unset old transparent + if (g->transparent >= 0) { + g->pal[g->transparent][3] = 255; + } + if (g->eflags & 0x01) { + g->transparent = stbi__get8(s); + if (g->transparent >= 0) { + g->pal[g->transparent][3] = 0; + } + } else { + // don't need transparent + stbi__skip(s, 1); + g->transparent = -1; + } + } else { + stbi__skip(s, len); + break; + } + } + while ((len = stbi__get8(s)) != 0) { + stbi__skip(s, len); + } + break; + } + + case 0x3B: // gif stream termination code + return (stbi_uc *)s; // using '1' causes warning on some compilers + + default: + return stbi__errpuc("unknown code", "Corrupt GIF"); + } + } +} + +static void *stbi__load_gif_main_outofmem(stbi__gif *g, stbi_uc *out, + int **delays) { + STBI_FREE(g->out); + STBI_FREE(g->history); + STBI_FREE(g->background); + + if (out) STBI_FREE(out); + if (delays && *delays) STBI_FREE(*delays); + return stbi__errpuc("outofmem", "Out of memory"); +} + +static void *stbi__load_gif_main(stbi__context *s, int **delays, int *x, int *y, + int *z, int *comp, int req_comp) { + if (stbi__gif_test(s)) { + int layers = 0; + stbi_uc *u = 0; + stbi_uc *out = 0; + stbi_uc *two_back = 0; + stbi__gif g; + int stride; + int out_size = 0; + int delays_size = 0; + + STBI_NOTUSED(out_size); + STBI_NOTUSED(delays_size); + + memset(&g, 0, sizeof(g)); + if (delays) { + *delays = 0; + } + + do { + u = stbi__gif_load_next(s, &g, comp, req_comp, two_back); + if (u == (stbi_uc *)s) u = 0; // end of animated gif marker + + if (u) { + *x = g.w; + *y = g.h; + ++layers; + stride = g.w * g.h * 4; + + if (out) { + void *tmp = + (stbi_uc *)STBI_REALLOC_SIZED(out, out_size, layers * stride); + if (!tmp) + return stbi__load_gif_main_outofmem(&g, out, delays); + else { + out = (stbi_uc *)tmp; + out_size = layers * stride; + } + + if (delays) { + int *new_delays = (int *)STBI_REALLOC_SIZED(*delays, delays_size, + sizeof(int) * layers); + if (!new_delays) + return stbi__load_gif_main_outofmem(&g, out, delays); + *delays = new_delays; + delays_size = layers * sizeof(int); + } + } else { + out = (stbi_uc *)stbi__malloc(layers * stride); + if (!out) return stbi__load_gif_main_outofmem(&g, out, delays); + out_size = layers * stride; + if (delays) { + *delays = (int *)stbi__malloc(layers * sizeof(int)); + if (!*delays) return stbi__load_gif_main_outofmem(&g, out, delays); + delays_size = layers * sizeof(int); + } + } + memcpy(out + ((layers - 1) * stride), u, stride); + if (layers >= 2) { + two_back = out - 2 * stride; + } + + if (delays) { + (*delays)[layers - 1U] = g.delay; + } + } + } while (u != 0); + + // free temp buffer; + STBI_FREE(g.out); + STBI_FREE(g.history); + STBI_FREE(g.background); + + // do the final conversion after loading everything; + if (req_comp && req_comp != 4) + out = stbi__convert_format(out, 4, req_comp, layers * g.w, g.h); + + *z = layers; + return out; + } else { + return stbi__errpuc("not GIF", "Image was not as a gif type."); + } +} + +static void *stbi__gif_load(stbi__context *s, int *x, int *y, int *comp, + int req_comp, stbi__result_info *ri) { + stbi_uc *u = 0; + stbi__gif g; + memset(&g, 0, sizeof(g)); + STBI_NOTUSED(ri); + + u = stbi__gif_load_next(s, &g, comp, req_comp, 0); + if (u == (stbi_uc *)s) u = 0; // end of animated gif marker + if (u) { + *x = g.w; + *y = g.h; + + // moved conversion to after successful load so that the same + // can be done for multiple frames. + if (req_comp && req_comp != 4) + u = stbi__convert_format(u, 4, req_comp, g.w, g.h); + } else if (g.out) { + // if there was an error and we allocated an image buffer, free it! + STBI_FREE(g.out); + } + + // free buffers needed for multiple frame loading; + STBI_FREE(g.history); + STBI_FREE(g.background); + + return u; +} + +static int stbi__gif_info(stbi__context *s, int *x, int *y, int *comp) { + return stbi__gif_info_raw(s, x, y, comp); +} +#endif + +// ************************************************************************************************* +// Radiance RGBE HDR loader +// originally by Nicolas Schulz +#ifndef STBI_NO_HDR +static int stbi__hdr_test_core(stbi__context *s, const char *signature) { + int i; + for (i = 0; signature[i]; ++i) + if (stbi__get8(s) != signature[i]) return 0; + stbi__rewind(s); + return 1; +} + +static int stbi__hdr_test(stbi__context *s) { + int r = stbi__hdr_test_core(s, "#?RADIANCE\n"); + stbi__rewind(s); + if (!r) { + r = stbi__hdr_test_core(s, "#?RGBE\n"); + stbi__rewind(s); + } + return r; +} + +#define STBI__HDR_BUFLEN 1024 +static char *stbi__hdr_gettoken(stbi__context *z, char *buffer) { + int len = 0; + char c = '\0'; + + c = (char)stbi__get8(z); + + while (!stbi__at_eof(z) && c != '\n') { + buffer[len++] = c; + if (len == STBI__HDR_BUFLEN - 1) { + // flush to end of line + while (!stbi__at_eof(z) && stbi__get8(z) != '\n'); + break; + } + c = (char)stbi__get8(z); + } + + buffer[len] = 0; + return buffer; +} + +static void stbi__hdr_convert(float *output, stbi_uc *input, int req_comp) { + if (input[3] != 0) { + float f1; + // Exponent + f1 = (float)ldexp(1.0f, input[3] - (int)(128 + 8)); + if (req_comp <= 2) + output[0] = (input[0] + input[1] + input[2]) * f1 / 3; + else { + output[0] = input[0] * f1; + output[1] = input[1] * f1; + output[2] = input[2] * f1; + } + if (req_comp == 2) output[1] = 1; + if (req_comp == 4) output[3] = 1; + } else { + switch (req_comp) { + case 4: + output[3] = 1; /* fallthrough */ + case 3: + output[0] = output[1] = output[2] = 0; + break; + case 2: + output[1] = 1; /* fallthrough */ + case 1: + output[0] = 0; + break; + } + } +} + +static float *stbi__hdr_load(stbi__context *s, int *x, int *y, int *comp, + int req_comp, stbi__result_info *ri) { + char buffer[STBI__HDR_BUFLEN]; + char *token; + int valid = 0; + int width, height; + stbi_uc *scanline; + float *hdr_data; + int len; + unsigned char count, value; + int i, j, k, c1, c2, z; + const char *headerToken; + STBI_NOTUSED(ri); + + // Check identifier + headerToken = stbi__hdr_gettoken(s, buffer); + if (strcmp(headerToken, "#?RADIANCE") != 0 && + strcmp(headerToken, "#?RGBE") != 0) + return stbi__errpf("not HDR", "Corrupt HDR image"); + + // Parse header + for (;;) { + token = stbi__hdr_gettoken(s, buffer); + if (token[0] == 0) break; + if (strcmp(token, "FORMAT=32-bit_rle_rgbe") == 0) valid = 1; + } + + if (!valid) + return stbi__errpf("unsupported format", "Unsupported HDR format"); + + // Parse width and height + // can't use sscanf() if we're not using stdio! + token = stbi__hdr_gettoken(s, buffer); + if (strncmp(token, "-Y ", 3)) + return stbi__errpf("unsupported data layout", "Unsupported HDR format"); + token += 3; + height = (int)strtol(token, &token, 10); + while (*token == ' ') ++token; + if (strncmp(token, "+X ", 3)) + return stbi__errpf("unsupported data layout", "Unsupported HDR format"); + token += 3; + width = (int)strtol(token, NULL, 10); + + if (height > STBI_MAX_DIMENSIONS) + return stbi__errpf("too large", "Very large image (corrupt?)"); + if (width > STBI_MAX_DIMENSIONS) + return stbi__errpf("too large", "Very large image (corrupt?)"); + + *x = width; + *y = height; + + if (comp) *comp = 3; + if (req_comp == 0) req_comp = 3; + + if (!stbi__mad4sizes_valid(width, height, req_comp, sizeof(float), 0)) + return stbi__errpf("too large", "HDR image is too large"); + + // Read data + hdr_data = + (float *)stbi__malloc_mad4(width, height, req_comp, sizeof(float), 0); + if (!hdr_data) return stbi__errpf("outofmem", "Out of memory"); + + // Load image data + // image data is stored as some number of sca + if (width < 8 || width >= 32768) { + // Read flat data + for (j = 0; j < height; ++j) { + for (i = 0; i < width; ++i) { + stbi_uc rgbe[4]; + main_decode_loop: + stbi__getn(s, rgbe, 4); + stbi__hdr_convert(hdr_data + j * width * req_comp + i * req_comp, rgbe, + req_comp); + } + } + } else { + // Read RLE-encoded data + scanline = NULL; + + for (j = 0; j < height; ++j) { + c1 = stbi__get8(s); + c2 = stbi__get8(s); + len = stbi__get8(s); + if (c1 != 2 || c2 != 2 || (len & 0x80)) { + // not run-length encoded, so we have to actually use THIS data as a + // decoded pixel (note this can't be a valid pixel--one of RGB must be + // >= 128) + stbi_uc rgbe[4]; + rgbe[0] = (stbi_uc)c1; + rgbe[1] = (stbi_uc)c2; + rgbe[2] = (stbi_uc)len; + rgbe[3] = (stbi_uc)stbi__get8(s); + stbi__hdr_convert(hdr_data, rgbe, req_comp); + i = 1; + j = 0; + STBI_FREE(scanline); + goto main_decode_loop; // yes, this makes no sense + } + len <<= 8; + len |= stbi__get8(s); + if (len != width) { + STBI_FREE(hdr_data); + STBI_FREE(scanline); + return stbi__errpf("invalid decoded scanline length", "corrupt HDR"); + } + if (scanline == NULL) { + scanline = (stbi_uc *)stbi__malloc_mad2(width, 4, 0); + if (!scanline) { + STBI_FREE(hdr_data); + return stbi__errpf("outofmem", "Out of memory"); + } + } + + for (k = 0; k < 4; ++k) { + int nleft; + i = 0; + while ((nleft = width - i) > 0) { + count = stbi__get8(s); + if (count > 128) { + // Run + value = stbi__get8(s); + count -= 128; + if ((count == 0) || (count > nleft)) { + STBI_FREE(hdr_data); + STBI_FREE(scanline); + return stbi__errpf("corrupt", "bad RLE data in HDR"); + } + for (z = 0; z < count; ++z) scanline[i++ * 4 + k] = value; + } else { + // Dump + if ((count == 0) || (count > nleft)) { + STBI_FREE(hdr_data); + STBI_FREE(scanline); + return stbi__errpf("corrupt", "bad RLE data in HDR"); + } + for (z = 0; z < count; ++z) scanline[i++ * 4 + k] = stbi__get8(s); + } + } + } + for (i = 0; i < width; ++i) + stbi__hdr_convert(hdr_data + (j * width + i) * req_comp, + scanline + i * 4, req_comp); + } + if (scanline) STBI_FREE(scanline); + } + + return hdr_data; +} + +static int stbi__hdr_info(stbi__context *s, int *x, int *y, int *comp) { + char buffer[STBI__HDR_BUFLEN]; + char *token; + int valid = 0; + int dummy; + + if (!x) x = &dummy; + if (!y) y = &dummy; + if (!comp) comp = &dummy; + + if (stbi__hdr_test(s) == 0) { + stbi__rewind(s); + return 0; + } + + for (;;) { + token = stbi__hdr_gettoken(s, buffer); + if (token[0] == 0) break; + if (strcmp(token, "FORMAT=32-bit_rle_rgbe") == 0) valid = 1; + } + + if (!valid) { + stbi__rewind(s); + return 0; + } + token = stbi__hdr_gettoken(s, buffer); + if (strncmp(token, "-Y ", 3)) { + stbi__rewind(s); + return 0; + } + token += 3; + *y = (int)strtol(token, &token, 10); + while (*token == ' ') ++token; + if (strncmp(token, "+X ", 3)) { + stbi__rewind(s); + return 0; + } + token += 3; + *x = (int)strtol(token, NULL, 10); + *comp = 3; + return 1; +} +#endif // STBI_NO_HDR + +#ifndef STBI_NO_BMP +static int stbi__bmp_info(stbi__context *s, int *x, int *y, int *comp) { + void *p; + stbi__bmp_data info; + + info.all_a = 255; + p = stbi__bmp_parse_header(s, &info); + if (p == NULL) { + stbi__rewind(s); + return 0; + } + if (x) *x = s->img_x; + if (y) *y = s->img_y; + if (comp) { + if (info.bpp == 24 && info.ma == 0xff000000) + *comp = 3; + else + *comp = info.ma ? 4 : 3; + } + return 1; +} +#endif + +#ifndef STBI_NO_PSD +static int stbi__psd_info(stbi__context *s, int *x, int *y, int *comp) { + int channelCount, dummy, depth; + if (!x) x = &dummy; + if (!y) y = &dummy; + if (!comp) comp = &dummy; + if (stbi__get32be(s) != 0x38425053) { + stbi__rewind(s); + return 0; + } + if (stbi__get16be(s) != 1) { + stbi__rewind(s); + return 0; + } + stbi__skip(s, 6); + channelCount = stbi__get16be(s); + if (channelCount < 0 || channelCount > 16) { + stbi__rewind(s); + return 0; + } + *y = stbi__get32be(s); + *x = stbi__get32be(s); + depth = stbi__get16be(s); + if (depth != 8 && depth != 16) { + stbi__rewind(s); + return 0; + } + if (stbi__get16be(s) != 3) { + stbi__rewind(s); + return 0; + } + *comp = 4; + return 1; +} + +static int stbi__psd_is16(stbi__context *s) { + int channelCount, depth; + if (stbi__get32be(s) != 0x38425053) { + stbi__rewind(s); + return 0; + } + if (stbi__get16be(s) != 1) { + stbi__rewind(s); + return 0; + } + stbi__skip(s, 6); + channelCount = stbi__get16be(s); + if (channelCount < 0 || channelCount > 16) { + stbi__rewind(s); + return 0; + } + STBI_NOTUSED(stbi__get32be(s)); + STBI_NOTUSED(stbi__get32be(s)); + depth = stbi__get16be(s); + if (depth != 16) { + stbi__rewind(s); + return 0; + } + return 1; +} +#endif + +#ifndef STBI_NO_PIC +static int stbi__pic_info(stbi__context *s, int *x, int *y, int *comp) { + int act_comp = 0, num_packets = 0, chained, dummy; + stbi__pic_packet packets[10]; + + if (!x) x = &dummy; + if (!y) y = &dummy; + if (!comp) comp = &dummy; + + if (!stbi__pic_is4(s, "\x53\x80\xF6\x34")) { + stbi__rewind(s); + return 0; + } + + stbi__skip(s, 88); + + *x = stbi__get16be(s); + *y = stbi__get16be(s); + if (stbi__at_eof(s)) { + stbi__rewind(s); + return 0; + } + if ((*x) != 0 && (1 << 28) / (*x) < (*y)) { + stbi__rewind(s); + return 0; + } + + stbi__skip(s, 8); + + do { + stbi__pic_packet *packet; + + if (num_packets == sizeof(packets) / sizeof(packets[0])) return 0; + + packet = &packets[num_packets++]; + chained = stbi__get8(s); + packet->size = stbi__get8(s); + packet->type = stbi__get8(s); + packet->channel = stbi__get8(s); + act_comp |= packet->channel; + + if (stbi__at_eof(s)) { + stbi__rewind(s); + return 0; + } + if (packet->size != 8) { + stbi__rewind(s); + return 0; + } + } while (chained); + + *comp = (act_comp & 0x10 ? 4 : 3); + + return 1; +} +#endif + +// ************************************************************************************************* +// Portable Gray Map and Portable Pixel Map loader +// by Ken Miller +// +// PGM: http://netpbm.sourceforge.net/doc/pgm.html +// PPM: http://netpbm.sourceforge.net/doc/ppm.html +// +// Known limitations: +// Does not support comments in the header section +// Does not support ASCII image data (formats P2 and P3) + +#ifndef STBI_NO_PNM + +static int stbi__pnm_test(stbi__context *s) { + char p, t; + p = (char)stbi__get8(s); + t = (char)stbi__get8(s); + if (p != 'P' || (t != '5' && t != '6')) { + stbi__rewind(s); + return 0; + } + return 1; +} + +static void *stbi__pnm_load(stbi__context *s, int *x, int *y, int *comp, + int req_comp, stbi__result_info *ri) { + stbi_uc *out; + STBI_NOTUSED(ri); + + ri->bits_per_channel = + stbi__pnm_info(s, (int *)&s->img_x, (int *)&s->img_y, (int *)&s->img_n); + if (ri->bits_per_channel == 0) return 0; + + if (s->img_y > STBI_MAX_DIMENSIONS) + return stbi__errpuc("too large", "Very large image (corrupt?)"); + if (s->img_x > STBI_MAX_DIMENSIONS) + return stbi__errpuc("too large", "Very large image (corrupt?)"); + + *x = s->img_x; + *y = s->img_y; + if (comp) *comp = s->img_n; + + if (!stbi__mad4sizes_valid(s->img_n, s->img_x, s->img_y, + ri->bits_per_channel / 8, 0)) + return stbi__errpuc("too large", "PNM too large"); + + out = (stbi_uc *)stbi__malloc_mad4(s->img_n, s->img_x, s->img_y, + ri->bits_per_channel / 8, 0); + if (!out) return stbi__errpuc("outofmem", "Out of memory"); + if (!stbi__getn( + s, out, + s->img_n * s->img_x * s->img_y * (ri->bits_per_channel / 8))) { + STBI_FREE(out); + return stbi__errpuc("bad PNM", "PNM file truncated"); + } + + if (req_comp && req_comp != s->img_n) { + if (ri->bits_per_channel == 16) { + out = (stbi_uc *)stbi__convert_format16((stbi__uint16 *)out, s->img_n, + req_comp, s->img_x, s->img_y); + } else { + out = stbi__convert_format(out, s->img_n, req_comp, s->img_x, s->img_y); + } + if (out == NULL) return out; // stbi__convert_format frees input on failure + } + return out; +} + +static int stbi__pnm_isspace(char c) { + return c == ' ' || c == '\t' || c == '\n' || c == '\v' || c == '\f' || + c == '\r'; +} + +static void stbi__pnm_skip_whitespace(stbi__context *s, char *c) { + for (;;) { + while (!stbi__at_eof(s) && stbi__pnm_isspace(*c)) *c = (char)stbi__get8(s); + + if (stbi__at_eof(s) || *c != '#') break; + + while (!stbi__at_eof(s) && *c != '\n' && *c != '\r') + *c = (char)stbi__get8(s); + } +} + +static int stbi__pnm_isdigit(char c) { return c >= '0' && c <= '9'; } + +static int stbi__pnm_getinteger(stbi__context *s, char *c) { + int value = 0; + + while (!stbi__at_eof(s) && stbi__pnm_isdigit(*c)) { + value = value * 10 + (*c - '0'); + *c = (char)stbi__get8(s); + if ((value > 214748364) || (value == 214748364 && *c > '7')) + return stbi__err( + "integer parse overflow", + "Parsing an integer in the PPM header overflowed a 32-bit int"); + } + + return value; +} + +static int stbi__pnm_info(stbi__context *s, int *x, int *y, int *comp) { + int maxv, dummy; + char c, p, t; + + if (!x) x = &dummy; + if (!y) y = &dummy; + if (!comp) comp = &dummy; + + stbi__rewind(s); + + // Get identifier + p = (char)stbi__get8(s); + t = (char)stbi__get8(s); + if (p != 'P' || (t != '5' && t != '6')) { + stbi__rewind(s); + return 0; + } + + *comp = + (t == '6') ? 3 : 1; // '5' is 1-component .pgm; '6' is 3-component .ppm + + c = (char)stbi__get8(s); + stbi__pnm_skip_whitespace(s, &c); + + *x = stbi__pnm_getinteger(s, &c); // read width + if (*x == 0) + return stbi__err("invalid width", + "PPM image header had zero or overflowing width"); + stbi__pnm_skip_whitespace(s, &c); + + *y = stbi__pnm_getinteger(s, &c); // read height + if (*y == 0) + return stbi__err("invalid width", + "PPM image header had zero or overflowing width"); + stbi__pnm_skip_whitespace(s, &c); + + maxv = stbi__pnm_getinteger(s, &c); // read max value + if (maxv > 65535) + return stbi__err("max value > 65535", + "PPM image supports only 8-bit and 16-bit images"); + else if (maxv > 255) + return 16; + else + return 8; +} + +static int stbi__pnm_is16(stbi__context *s) { + if (stbi__pnm_info(s, NULL, NULL, NULL) == 16) return 1; + return 0; +} +#endif + +static int stbi__info_main(stbi__context *s, int *x, int *y, int *comp) { +#ifndef STBI_NO_JPEG + if (stbi__jpeg_info(s, x, y, comp)) return 1; +#endif + +#ifndef STBI_NO_PNG + if (stbi__png_info(s, x, y, comp)) return 1; +#endif + +#ifndef STBI_NO_GIF + if (stbi__gif_info(s, x, y, comp)) return 1; +#endif + +#ifndef STBI_NO_BMP + if (stbi__bmp_info(s, x, y, comp)) return 1; +#endif + +#ifndef STBI_NO_PSD + if (stbi__psd_info(s, x, y, comp)) return 1; +#endif + +#ifndef STBI_NO_PIC + if (stbi__pic_info(s, x, y, comp)) return 1; +#endif + +#ifndef STBI_NO_PNM + if (stbi__pnm_info(s, x, y, comp)) return 1; +#endif + +#ifndef STBI_NO_HDR + if (stbi__hdr_info(s, x, y, comp)) return 1; +#endif + +// test tga last because it's a crappy test! +#ifndef STBI_NO_TGA + if (stbi__tga_info(s, x, y, comp)) return 1; +#endif + return stbi__err("unknown image type", + "Image not of any known type, or corrupt"); +} + +static int stbi__is_16_main(stbi__context *s) { +#ifndef STBI_NO_PNG + if (stbi__png_is16(s)) return 1; +#endif + +#ifndef STBI_NO_PSD + if (stbi__psd_is16(s)) return 1; +#endif + +#ifndef STBI_NO_PNM + if (stbi__pnm_is16(s)) return 1; +#endif + return 0; +} + +#ifndef STBI_NO_STDIO +STBIDEF int stbi_info(char const *filename, int *x, int *y, int *comp) { + FILE *f = stbi__fopen(filename, "rb"); + int result; + if (!f) return stbi__err("can't fopen", "Unable to open file"); + result = stbi_info_from_file(f, x, y, comp); + fclose(f); + return result; +} + +STBIDEF int stbi_info_from_file(FILE *f, int *x, int *y, int *comp) { + int r; + stbi__context s; + long pos = ftell(f); + stbi__start_file(&s, f); + r = stbi__info_main(&s, x, y, comp); + fseek(f, pos, SEEK_SET); + return r; +} + +STBIDEF int stbi_is_16_bit(char const *filename) { + FILE *f = stbi__fopen(filename, "rb"); + int result; + if (!f) return stbi__err("can't fopen", "Unable to open file"); + result = stbi_is_16_bit_from_file(f); + fclose(f); + return result; +} + +STBIDEF int stbi_is_16_bit_from_file(FILE *f) { + int r; + stbi__context s; + long pos = ftell(f); + stbi__start_file(&s, f); + r = stbi__is_16_main(&s); + fseek(f, pos, SEEK_SET); + return r; +} +#endif // !STBI_NO_STDIO + +STBIDEF int stbi_info_from_memory(stbi_uc const *buffer, int len, int *x, + int *y, int *comp) { + stbi__context s; + stbi__start_mem(&s, buffer, len); + return stbi__info_main(&s, x, y, comp); +} + +STBIDEF int stbi_info_from_callbacks(stbi_io_callbacks const *c, void *user, + int *x, int *y, int *comp) { + stbi__context s; + stbi__start_callbacks(&s, (stbi_io_callbacks *)c, user); + return stbi__info_main(&s, x, y, comp); +} + +STBIDEF int stbi_is_16_bit_from_memory(stbi_uc const *buffer, int len) { + stbi__context s; + stbi__start_mem(&s, buffer, len); + return stbi__is_16_main(&s); +} + +STBIDEF int stbi_is_16_bit_from_callbacks(stbi_io_callbacks const *c, + void *user) { + stbi__context s; + stbi__start_callbacks(&s, (stbi_io_callbacks *)c, user); + return stbi__is_16_main(&s); +} + +#endif // STB_IMAGE_IMPLEMENTATION + +/* + revision history: + 2.20 (2019-02-07) support utf8 filenames in Windows; fix warnings and + platform ifdefs 2.19 (2018-02-11) fix warning 2.18 (2018-01-30) fix + warnings 2.17 (2018-01-29) change sbti__shiftsigned to avoid clang -O2 bug + 1-bit BMP + *_is_16_bit api + avoid warnings + 2.16 (2017-07-23) all functions have 16-bit variants; + STBI_NO_STDIO works again; + compilation fixes; + fix rounding in unpremultiply; + optimize vertical flip; + disable raw_len validation; + documentation fixes + 2.15 (2017-03-18) fix png-1,2,4 bug; now all Imagenet JPGs decode; + warning fixes; disable run-time SSE detection on gcc; + uniform handling of optional "return" values; + thread-safe initialization of zlib tables + 2.14 (2017-03-03) remove deprecated STBI_JPEG_OLD; fixes for Imagenet + JPGs 2.13 (2016-11-29) add 16-bit API, only supported for PNG right now 2.12 + (2016-04-02) fix typo in 2.11 PSD fix that caused crashes 2.11 (2016-04-02) + allocate large structures on the stack remove white matting for transparent + PSD fix reported channel count for PNG & BMP re-enable SSE2 in non-gcc 64-bit + support RGB-formatted JPEG + read 16-bit PNGs (only as 8-bit) + 2.10 (2016-01-22) avoid warning introduced in 2.09 by STBI_REALLOC_SIZED + 2.09 (2016-01-16) allow comments in PNM files + 16-bit-per-pixel TGA (not bit-per-component) + info() for TGA could break due to .hdr handling + info() for BMP to shares code instead of sloppy parse + can use STBI_REALLOC_SIZED if allocator doesn't support + realloc code cleanup 2.08 (2015-09-13) fix to 2.07 cleanup, reading RGB PSD + as RGBA 2.07 (2015-09-13) fix compiler warnings partial animated GIF support + limited 16-bpc PSD support + #ifdef unused functions + bug with < 92 byte PIC,PNM,HDR,TGA + 2.06 (2015-04-19) fix bug where PSD returns wrong '*comp' value + 2.05 (2015-04-19) fix bug in progressive JPEG handling, fix warning + 2.04 (2015-04-15) try to re-enable SIMD on MinGW 64-bit + 2.03 (2015-04-12) extra corruption checking (mmozeiko) + stbi_set_flip_vertically_on_load (nguillemot) + fix NEON support; fix mingw support + 2.02 (2015-01-19) fix incorrect assert, fix warning + 2.01 (2015-01-17) fix various warnings; suppress SIMD on gcc 32-bit + without -msse2 2.00b (2014-12-25) fix STBI_MALLOC in progressive JPEG 2.00 + (2014-12-25) optimize JPG, including x86 SSE2 & NEON SIMD (ryg) progressive + JPEG (stb) PGM/PPM support (Ken Miller) STBI_MALLOC,STBI_REALLOC,STBI_FREE + GIF bugfix -- seemingly never worked + STBI_NO_*, STBI_ONLY_* + 1.48 (2014-12-14) fix incorrectly-named assert() + 1.47 (2014-12-14) 1/2/4-bit PNG support, both direct and paletted (Omar + Cornut & stb) optimize PNG (ryg) fix bug in interlaced PNG with + user-specified channel count (stb) 1.46 (2014-08-26) fix broken tRNS chunk + (colorkey-style transparency) in non-paletted PNG 1.45 (2014-08-16) fix + MSVC-ARM internal compiler error by wrapping malloc 1.44 (2014-08-07) + various warning fixes from Ronny Chevalier + 1.43 (2014-07-15) + fix MSVC-only compiler problem in code changed in 1.42 + 1.42 (2014-07-09) + don't define _CRT_SECURE_NO_WARNINGS (affects user code) + fixes to stbi__cleanup_jpeg path + added STBI_ASSERT to avoid requiring assert.h + 1.41 (2014-06-25) + fix search&replace from 1.36 that messed up comments/error + messages 1.40 (2014-06-22) fix gcc struct-initialization warning 1.39 + (2014-06-15) fix to TGA optimization when req_comp != number of components in + TGA; fix to GIF loading because BMP wasn't rewinding (whoops, no GIFs in my + test suite) add support for BMP version 5 (more ignored fields) 1.38 + (2014-06-06) suppress MSVC warnings on integer casts truncating values fix + accidental rename of 'skip' field of I/O 1.37 (2014-06-04) remove duplicate + typedef 1.36 (2014-06-03) convert to header file single-file library if + de-iphone isn't set, load iphone images color-swapped instead of returning + NULL 1.35 (2014-05-27) various warnings fix broken STBI_SIMD path fix bug + where stbi_load_from_file no longer left file pointer in correct place fix + broken non-easy path for 32-bit BMP (possibly never used) TGA optimization by + Arseny Kapoulkine 1.34 (unknown) use STBI_NOTUSED in + stbi__resample_row_generic(), fix one more leak in tga failure case 1.33 + (2011-07-14) make stbi_is_hdr work in STBI_NO_HDR (as specified), minor + compiler-friendly improvements 1.32 (2011-07-13) support for "info" function + for all supported filetypes (SpartanJ) 1.31 (2011-06-20) a few more leak + fixes, bug in PNG handling (SpartanJ) 1.30 (2011-06-11) added ability to + load files via callbacks to accomidate custom input streams (Ben Wenger) + removed deprecated format-specific test/load functions + removed support for installable file formats (stbi_loader) -- + would have been broken for IO callbacks anyway error cases in bmp and tga + give messages and don't leak (Raymond Barbiero, grisha) fix inefficiency in + decoding 32-bit BMP (David Woo) 1.29 (2010-08-16) various warning fixes from + Aurelien Pocheville 1.28 (2010-08-01) fix bug in GIF palette transparency + (SpartanJ) 1.27 (2010-08-01) cast-to-stbi_uc to fix warnings 1.26 + (2010-07-24) fix bug in file buffering for PNG reported by SpartanJ 1.25 + (2010-07-17) refix trans_data warning (Won Chun) 1.24 (2010-07-12) perf + improvements reading from files on platforms with lock-heavy fgetc() minor + perf improvements for jpeg deprecated type-specific functions so we'll get + feedback if they're needed attempt to fix trans_data warning (Won Chun) 1.23 + fixed bug in iPhone support 1.22 (2010-07-10) removed image *writing* + support stbi_info support from Jetro Lauha GIF support from Jean-Marc Lienher + iPhone PNG-extensions from James Brown + warning-fixes from Nicolas Schulz and Janez Zemva (i.stbi__err. + Janez (U+017D)emva) 1.21 fix use of 'stbi_uc' in header (reported by jon + blow) 1.20 added support for Softimage PIC, by Tom Seddon 1.19 bug in + interlaced PNG corruption check (found by ryg) 1.18 (2008-08-02) fix a + threading bug (local mutable static) 1.17 support interlaced PNG 1.16 + major bugfix - stbi__convert_format converted one too many pixels 1.15 + initialize some fields for thread safety 1.14 fix threadsafe conversion + bug header-file-only version (#define STBI_HEADER_FILE_ONLY before including) + 1.13 threadsafe + 1.12 const qualifiers in the API + 1.11 Support installable IDCT, colorspace conversion routines + 1.10 Fixes for 64-bit (don't use "unsigned long") + optimized upsampling by Fabian "ryg" Giesen + 1.09 Fix format-conversion for PSD code (bad global variables!) + 1.08 Thatcher Ulrich's PSD code integrated by Nicolas Schulz + 1.07 attempt to fix C++ warning/errors again + 1.06 attempt to fix C++ warning/errors again + 1.05 fix TGA loading to return correct *comp and use good luminance + calc 1.04 default float alpha is 1, not 255; use 'void *' for + stbi_image_free 1.03 bugfixes to STBI_NO_STDIO, STBI_NO_HDR 1.02 support + for (subset of) HDR files, float interface for preferred access to them 1.01 + fix bug: possible bug in handling right-side up bmps... not sure fix bug: the + stbi__bmp_load() and stbi__tga_load() functions didn't work at all 1.00 + interface to zlib that skips zlib header 0.99 correct handling of alpha in + palette 0.98 TGA loader by lonesock; dynamically add loaders (untested) + 0.97 jpeg errors on too large a file; also catch another malloc failure + 0.96 fix detection of invalid v value - particleman@mollyrocket forum + 0.95 during header scan, seek to markers in case of padding + 0.94 STBI_NO_STDIO to disable stdio usage; rename all #defines the same + 0.93 handle jpegtran output; verbose errors + 0.92 read 4,8,16,24,32-bit BMP files of several formats + 0.91 output 24-bit Windows 3.0 BMP files + 0.90 fix a few more warnings; bump version number to approach 1.0 + 0.61 bugfixes due to Marc LeBlanc, Christopher Lloyd + 0.60 fix compiling as c++ + 0.59 fix warnings: merge Dave Moore's -Wall fixes + 0.58 fix bug: zlib uncompressed mode len/nlen was wrong endian + 0.57 fix bug: jpg last huffman symbol before marker was >9 bits but + less than 16 available 0.56 fix bug: zlib uncompressed mode len vs. nlen + 0.55 fix bug: restart_interval not initialized to 0 + 0.54 allow NULL for 'int *comp' + 0.53 fix bug in png 3->4; speedup png decoding + 0.52 png handles req_comp=3,4 directly; minor cleanup; jpeg comments + 0.51 obey req_comp requests, 1-component jpegs return as 1-component, + on 'test' only check type, not whether we support this variant + 0.50 (2006-11-19) + first released version +*/ + +/* +------------------------------------------------------------------------------ +This software is available under 2 licenses -- choose whichever you prefer. +------------------------------------------------------------------------------ +ALTERNATIVE A - MIT License +Copyright (c) 2017 Sean Barrett +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +------------------------------------------------------------------------------ +ALTERNATIVE B - Public Domain (www.unlicense.org) +This is free and unencumbered software released into the public domain. +Anyone is free to copy, modify, publish, use, compile, sell, or distribute this +software, either in source code form or as a compiled binary, for any purpose, +commercial or non-commercial, and by any means. +In jurisdictions that recognize copyright laws, the author or authors of this +software dedicate any and all copyright interest in the software to the public +domain. We make this dedication for the benefit of the public at large and to +the detriment of our heirs and successors. We intend this dedication to be an +overt act of relinquishment in perpetuity of all present and future rights to +this software under copyright law. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN +ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +------------------------------------------------------------------------------ +*/ diff --git a/Client/include/utilities.h b/Client/include/utilities.h new file mode 100644 index 0000000..831c597 --- /dev/null +++ b/Client/include/utilities.h @@ -0,0 +1,8 @@ +#pragma once + +#include + +namespace veng { +bool streq(gsl::czstring left, gsl::czstring right); +std::vector ReadFile(std::filesystem::path shader_path); +} diff --git a/Client/include/vulkan/buffer_handle.h b/Client/include/vulkan/buffer_handle.h new file mode 100644 index 0000000..2a20ec8 --- /dev/null +++ b/Client/include/vulkan/buffer_handle.h @@ -0,0 +1,12 @@ +#pragma once + +#include + +namespace veng { + +struct BufferHandle { + VkBuffer buffer = VK_NULL_HANDLE; + VkDeviceMemory memory = VK_NULL_HANDLE; +}; + +} // namespace veng diff --git a/Client/include/vulkan/coordinate.h b/Client/include/vulkan/coordinate.h new file mode 100644 index 0000000..2b9ef5f --- /dev/null +++ b/Client/include/vulkan/coordinate.h @@ -0,0 +1,39 @@ +#pragma once + +#include + +#include "asset/object/model.h" + +namespace std { +template <> +struct hash { + std::size_t operator()(const glm::i64vec3& v) const noexcept { + std::size_t h1 = std::hash()(v.x); + std::size_t h2 = std::hash()(v.y); + std::size_t h3 = std::hash()(v.z); + return h1 ^ (h2 << 1) ^ (h3 << 2); + } +}; +} // namespace std + +namespace veng { + +class Coord { + public: + Coord() : seg(glm::i64vec3(0)), pos(glm::vec3(0.f)) {} + Coord(glm::vec3 _pos) : seg(glm::i64vec3(0)), pos(_pos) {} + Coord(glm::i64vec3 _seg, glm::vec3 _pos) : seg(_seg), pos(_pos) {} + + glm::i64vec3 seg; + glm::vec3 pos; + + Coord operator+(const Coord& other) const; + Coord operator-(const Coord& other) const; + + std::unordered_map coord_system; + + private: + const std::float_t border = 1000.f; +}; + +} // namespace veng diff --git a/Client/include/vulkan/engine.h b/Client/include/vulkan/engine.h new file mode 100644 index 0000000..c22bd87 --- /dev/null +++ b/Client/include/vulkan/engine.h @@ -0,0 +1,52 @@ +#pragma once + +#include "asset/loader.h" +#include "physics.h" +#include "graphics.h" + +namespace veng { + +class Engine { + public: + Engine(gsl::not_null vulkan_graphics) + : vulkan_graphics(vulkan_graphics) {} + + void init(); + + void LoadModelAsset(std::string path, std::string name); + const Model* GetStaticModel(std::string name); + + Model* SpawnModel(std::string asset_name, std::string name); + Model* SpawnLifedModel(std::string asset_name, std::string name, + std::float_t lifespan); + Model* GetSpawnedObject(std::string name); + + void Update(); + + std::function BeginPlay = [](Engine& engine) {}; + std::function Tick = + [](Engine& engine, std::float_t delta_time) {}; + + glm::mat4 view = + glm::lookAt(glm::vec3(0.f, 0.f, -5.f), glm::vec3(0.f, 0.f, 0.f), + glm::vec3(0.f, -1.f, 0.f)); + glm::mat4 projection = + glm::perspective(glm::radians(103.f), 800.f / 600.f, 0.1f, 1000.f); + + gsl::not_null vulkan_graphics; + private: + Loader asset_loader_; + + Physics physics_controller_; + + glm::ivec2 window_size_ = {0, 0}; + std::double_t last_frame_time_ = 0.0; + + std::unordered_map model_assets_; + + std::unordered_map dynamic_immortal_models_; + std::unordered_map> + dynamic_models_; +}; + +} // namespace veng diff --git a/Client/include/vulkan/graphics.h b/Client/include/vulkan/graphics.h new file mode 100644 index 0000000..60de666 --- /dev/null +++ b/Client/include/vulkan/graphics.h @@ -0,0 +1,193 @@ +#pragma once +#include + +#include "buffer_handle.h" +#include "glfw/glfw_window.h" +#include "precomp.h" +#include "texture_handle.h" +#include "vertex.h" + +namespace veng { + +struct Frame { + VkSemaphore image_available_signal = VK_NULL_HANDLE; + VkSemaphore render_finished_signal = VK_NULL_HANDLE; + VkFence still_rendering_fence = VK_NULL_HANDLE; + + VkCommandBuffer command_buffer = VK_NULL_HANDLE; + + VkDescriptorSet uniform_set = VK_NULL_HANDLE; + BufferHandle uniform_buffer; + void* uniform_buffer_location; +}; + +class Graphics final { + public: + Graphics(gsl::not_null window); + ~Graphics(); + + bool BeginFrame(); + void SetModelMatrix(glm::mat4 model); + void SetViewProjection(glm::mat4 view, glm::mat4 projection); + void SetTexture(TextureHandle handle); + void RenderBuffer(BufferHandle handle, std::uint32_t vertex_count); + void RenderIndexedBuffer(BufferHandle vertex_buffer, + BufferHandle index_buffer, std::uint32_t count); + void RenderModel(struct Model* model); + void EndFrame(); + + BufferHandle CreateVertexBuffer(gsl::span vertices); + BufferHandle CreateIndexBuffer(gsl::span indices); + void DestroyBuffer(BufferHandle handle); + TextureHandle CreateTexture(gsl::czstring path); + TextureHandle CreateTexture(std::vector image_file_data); + TextureHandle CreateTexture(gsl::span image_file_data); + void DestroyTexture(TextureHandle handle); + + gsl::not_null window; + private: + struct QueueFamilyIndices { + std::optional graphics_family = std::nullopt; + std::optional presentation_family = std::nullopt; + + bool IsValid() const { + return graphics_family.has_value() && presentation_family.has_value(); + } + }; + + struct SwapChainProperties { + VkSurfaceCapabilitiesKHR capabilities = {}; + std::vector formats; + std::vector present_modes; + + bool IsValid() const { return !formats.empty() && !present_modes.empty(); } + }; + + // 초기화 + + void InitializeVulkan(); + void CreateInstance(); + void SetupDebugMessenger(); + void PickPhysicalDevice(); + void CreateLogicalDeviceAndQueues(); + void CreateSurface(); + void CreateSwapChain(); + void CreateImageViews(); + void CreateRenderPass(); + void CreateGraphicsPipeline(); + void CreateFramebuffers(); + void CreateCommandPool(); + void CreateCommandBuffer(); + void CreateSignals(); + void CreateDescriptorSetLayouts(); + void CreateDescriptorPools(); + void CreateDescriptorSets(); + void CreateTextureSampler(); + void CreateDepthResources(); + + void RecreateSwapChain(); + void CleanupSwapChain(); + + // 랜더링 + + void BeginCommands(); + void EndCommands(); + + std::vector GetRequiredInstanceExtentions(); + + static gsl::span GetSuggestedInstanceExtentions(); + static std::vector GetSupprotedInstanceExtensions(); + static bool AreAllExtensionsSupported(gsl::span extensions); + + static std::vector GetSupprotedValidationLayers(); + static bool AreAllLayersSupported(gsl::span extensions); + + QueueFamilyIndices FindQueueFamilies(VkPhysicalDevice device); + SwapChainProperties GetSwapChainProperties(VkPhysicalDevice device); + bool IsDeviceSuitable(VkPhysicalDevice device); + std::vector GetAvailableDevices(); + bool AreAllDeviceExtensionsSupported(VkPhysicalDevice device); + std::vector GetDeviceAvailableExtensions( + VkPhysicalDevice device); + + VkSurfaceFormatKHR ChooseSwapSurfaceFormat( + gsl::span formats); + VkPresentModeKHR ChooseSwapPresentMode( + gsl::span present_modes); + VkExtent2D ChooseSwapExtent(const VkSurfaceCapabilitiesKHR& capabilities); + std::uint32_t ChooseSwapImageCount( + const VkSurfaceCapabilitiesKHR& capabilities); + + VkShaderModule CreateShaderModule(gsl::span buffer); + + std::uint32_t FindMemoryType(std::uint32_t type_bits_filter, + VkMemoryPropertyFlags required_properties); + + BufferHandle CreateBuffer(VkDeviceSize size, VkBufferUsageFlags usage, + VkMemoryPropertyFlags properties); + VkCommandBuffer BeginTransientCommandBuffer(); + void EndTransientCommandBuffer(VkCommandBuffer command_buffer); + void CreateUniformBuffers(); + + TextureHandle CreateImage(glm::ivec2 size, VkFormat image_format, + VkBufferUsageFlags usage, + VkMemoryPropertyFlags properties); + void TransitionImageLayout(VkImage image, VkImageLayout old_layout, + VkImageLayout new_layout); + void CopyBufferToImage(VkBuffer buffer, VkImage image, glm::ivec2 image_size); + VkImageView CreateImageView(VkImage image, VkFormat format, + VkImageAspectFlags aspect_flag); + + VkViewport GetViewport(); + VkRect2D GetScissor(); + + std::array required_device_extentions_ = { + VK_KHR_SWAPCHAIN_EXTENSION_NAME}; + + VkInstance instance_ = VK_NULL_HANDLE; + VkDebugUtilsMessengerEXT debug_messenger_; + + VkPhysicalDevice physical_device_ = VK_NULL_HANDLE; + VkDevice logical_device_ = VK_NULL_HANDLE; + VkQueue graphics_queue_ = VK_NULL_HANDLE; + VkQueue present_queue_ = VK_NULL_HANDLE; + + VkSurfaceKHR surface_ = VK_NULL_HANDLE; + VkSwapchainKHR swap_chain_ = VK_NULL_HANDLE; + VkSurfaceFormatKHR surface_format_; + VkPresentModeKHR present_mode_; + VkExtent2D extent_; + + std::vector swap_chain_images_; + std::vector swap_chain_image_views_; + std::vector swap_chain_framebuffers_; + + VkPipelineLayout pipeline_layout_ = VK_NULL_HANDLE; + VkRenderPass render_pass_ = VK_NULL_HANDLE; + VkPipeline pipeline_ = VK_NULL_HANDLE; + VkDescriptorSetLayout descriptor_set_layout_ = VK_NULL_HANDLE; + + VkCommandPool command_pool_ = VK_NULL_HANDLE; + + std::uint32_t current_image_index_ = 0; + + VkDescriptorSetLayout uniform_set_layout_ = VK_NULL_HANDLE; + VkDescriptorPool uniform_pool_ = VK_NULL_HANDLE; + + + VkDescriptorSetLayout texture_set_layout_ = VK_NULL_HANDLE; + VkDescriptorPool texture_pool_ = VK_NULL_HANDLE; + VkSampler texture_sampler_ = VK_NULL_HANDLE; + TextureHandle depth_texture_; + + std::array frames_; + std::int32_t current_frame_ = 0; + + bool validation_enabled_ = false; +}; + +VkDebugUtilsMessengerCreateInfoEXT GetCreateMessengerInfo(); +bool IsExtensionSupported(gsl::span extensions, + gsl::czstring name); + +} // namespace veng diff --git a/Client/include/vulkan/physics.h b/Client/include/vulkan/physics.h new file mode 100644 index 0000000..24906e8 --- /dev/null +++ b/Client/include/vulkan/physics.h @@ -0,0 +1,20 @@ +#pragma once + +#include "asset/object/model.h" +#include "vulkan/vertex.h" + +namespace veng { +class Physics { + public: + void invokeOnColisionEvent(gsl::span models); + + bool RayTrace(const glm::vec3& rayOrigin, const glm::vec3& rayDir, + const glm::vec3& v0, const glm::vec3& v1, const glm::vec3& v2, + std::float_t& outDistance); + + private: + bool IsPointInsideMesh_(const glm::vec3& point, + const std::vector& vertices, + const std::vector& indices); +}; +} // namespace veng diff --git a/Client/include/vulkan/texture_handle.h b/Client/include/vulkan/texture_handle.h new file mode 100644 index 0000000..f4e2013 --- /dev/null +++ b/Client/include/vulkan/texture_handle.h @@ -0,0 +1,14 @@ +#pragma once + +#include + +namespace veng { + +struct TextureHandle { + VkImage image = VK_NULL_HANDLE; + VkImageView image_view = VK_NULL_HANDLE; + VkDeviceMemory memory = VK_NULL_HANDLE; + VkDescriptorSet set = VK_NULL_HANDLE; +}; + +} // namespace veng diff --git a/Client/include/vulkan/uniform_transformations.h b/Client/include/vulkan/uniform_transformations.h new file mode 100644 index 0000000..c66961a --- /dev/null +++ b/Client/include/vulkan/uniform_transformations.h @@ -0,0 +1,8 @@ +#pragma once + +namespace veng { +struct UniformTransformations { + glm::mat4 view; + glm::mat4 projection; +}; +} // namespace veng diff --git a/Client/include/vulkan/vertex.h b/Client/include/vulkan/vertex.h new file mode 100644 index 0000000..0aae4ab --- /dev/null +++ b/Client/include/vulkan/vertex.h @@ -0,0 +1,38 @@ +#pragma once + +#include + +namespace veng { +struct Vertex { + Vertex() : position(glm::vec3(0.f)), uv(glm::vec2(0.f)) {} + Vertex(glm::vec3 _position, glm::vec2 _uv) : position(_position), uv(_uv) {} + + glm::vec3 position; + glm::vec2 uv; + + static VkVertexInputBindingDescription GetBindingDescription() { + VkVertexInputBindingDescription description = {}; + description.binding = 0; + description.stride = sizeof(Vertex); + description.inputRate = VK_VERTEX_INPUT_RATE_VERTEX; + + return description; + } + + static std::array GetAttributeDescriptions() { + std::array descriptions = {}; + + descriptions[0].binding = 0; + descriptions[0].location = 0; + descriptions[0].format = VK_FORMAT_R32G32B32_SFLOAT; + descriptions[0].offset = offsetof(Vertex, position); + + descriptions[1].binding = 0; + descriptions[1].location = 1; + descriptions[1].format = VK_FORMAT_R32G32_SFLOAT; + descriptions[1].offset = offsetof(Vertex, uv); + + return descriptions; + } +}; +} // namespace veng diff --git a/Client/shaders/basic.frag b/Client/shaders/basic.frag new file mode 100644 index 0000000..5fd1c36 --- /dev/null +++ b/Client/shaders/basic.frag @@ -0,0 +1,11 @@ +#version 450 +#include "common.glsl" + +layout(location = 0) in vec2 vertex_uv; +layout(location = 0) out vec4 out_color; + +layout(set = 1, binding = 0) uniform sampler2D texture_sampler; + +void main() { + out_color = texture(texture_sampler, vertex_uv); +} \ No newline at end of file diff --git a/Client/shaders/basic.vert b/Client/shaders/basic.vert new file mode 100644 index 0000000..5f21328 --- /dev/null +++ b/Client/shaders/basic.vert @@ -0,0 +1,16 @@ +#version 450 +#include "common.glsl" + +layout(location = 0) in vec3 input_position; +layout(location = 1) in vec2 input_uv; + +layout(location = 0) out vec2 vertex_uv; + +layout(push_constant) uniform Model { + mat4 transformation; +} model; + +void main() { + gl_Position = camera.projection * camera.view * model.transformation * vec4(input_position, 1.0); + vertex_uv = input_uv; +} \ No newline at end of file diff --git a/Client/shaders/common.glsl b/Client/shaders/common.glsl new file mode 100644 index 0000000..0576e07 --- /dev/null +++ b/Client/shaders/common.glsl @@ -0,0 +1,7 @@ +#extension GL_KHR_vulkan_glsl : enable + +layout(set = 0, binding = 0) uniform UniformTransformations { + mat4 view; + mat4 projection; +} +camera; \ No newline at end of file diff --git a/Client/src/asset/loader.cpp b/Client/src/asset/loader.cpp new file mode 100644 index 0000000..ec12848 --- /dev/null +++ b/Client/src/asset/loader.cpp @@ -0,0 +1,65 @@ +#include "asset/loader.h" + +#include "stb/stb_image.h" + +namespace veng { + +void Loader::setPath(std::string path) { + scene_ = importer_.ReadFile( + path.c_str(), aiProcess_CalcTangentSpace | aiProcess_Triangulate | + aiProcess_JoinIdenticalVertices | + aiProcess_SortByPType | aiProcess_FlipUVs); + if (scene_ == nullptr || !scene_->HasMeshes()) + throw std::runtime_error(importer_.GetErrorString()); +} +void Loader::loadModel(inModel model) { + aiMesh* mesh = scene_->mMeshes[0]; + + for (std::uint32_t i = 0; i < mesh->mNumVertices; i++) { + glm::vec2 uv = {mesh->mTextureCoords[0][i].x, mesh->mTextureCoords[0][i].y}; + model.vertices.emplace_back( + glm::vec3{mesh->mVertices[i].x, mesh->mVertices[i].y, + mesh->mVertices[i].z}, + uv); + } + + for (Vertex& const it : model.vertices) { + model.original_offset.x += it.position.x / model.vertices.size(); + model.original_offset.y += it.position.y / model.vertices.size(); + model.original_offset.z += it.position.z / model.vertices.size(); + } + + for (Vertex& vertex : model.vertices) { + vertex.position -= model.original_offset; + model.radius = (model.radius < glm::length(vertex.position)) + ? glm::length(vertex.position) + : model.radius; + } + + for (std::uint32_t i = 0; i < mesh->mNumFaces; i++) { + aiFace face = mesh->mFaces[i]; + for (unsigned int j = 0; j < face.mNumIndices; ++j) { + model.indices.push_back(face.mIndices[j]); + } + } +} + +std::vector Loader::readTexture() { + aiString texture_path; + if (scene_->mMaterials[scene_->mMeshes[0]->mMaterialIndex]->GetTexture( + aiTextureType_DIFFUSE, 0, &texture_path) != AI_SUCCESS) { + spdlog::warn("No texture"); + } + + if (scene_->mNumTextures > 0 || texture_path.C_Str()[0] == '*') { + const aiTexture* texture = scene_->GetEmbeddedTexture(texture_path.C_Str()); + + return std::vector( + (std::uint8_t*)texture->pcData, + (std::uint8_t*)texture->pcData + texture->mWidth); + } + + return ReadFile(texture_path.C_Str()); +} + +} // namespace veng diff --git a/Client/src/asset/object/model.cpp b/Client/src/asset/object/model.cpp new file mode 100644 index 0000000..b867264 --- /dev/null +++ b/Client/src/asset/object/model.cpp @@ -0,0 +1,30 @@ +#include "asset/object/model.h" + +#include "vulkan/graphics.h" + +namespace veng { + +Model::~Model() { + if (graphics_ == nullptr) return; + + graphics_->DestroyTexture(material.texture_handle); + graphics_->DestroyBuffer(vertex_buffer); + graphics_->DestroyBuffer(index_buffer); +} + +void veng::Model::Update(float dt) { + linear_velocity += linear_acceleration * dt; + position += linear_velocity * dt; + + angular_velocity += angular_acceleration * dt; + if (glm::length(angular_velocity) > 1e-6f) { + rotation = + glm::normalize(glm::rotate(rotation, glm::length(angular_velocity * dt), + glm::normalize(angular_velocity))); + } + + transform = glm::translate(glm::mat4(1.0f), position) * + glm::mat4_cast(rotation) * glm::scale(glm::mat4(1.0f), scale); +} + +} // namespace veng diff --git a/Client/src/glfw/glfw_initialization.cpp b/Client/src/glfw/glfw_initialization.cpp new file mode 100644 index 0000000..297f4cf --- /dev/null +++ b/Client/src/glfw/glfw_initialization.cpp @@ -0,0 +1,21 @@ +#include "glfw/glfw_initialization.h" + +#include + +#include + +#include "precomp.h" + +namespace veng { +void glfw_error_callback(std::int32_t error_code, gsl::czstring message) { + spdlog::error("Glfw Validation: {}", message); +} + +GlfwInitialization::GlfwInitialization() { + glfwSetErrorCallback(glfw_error_callback); + if (glfwInit() != GLFW_TRUE) std::exit(EXIT_FAILURE); +} + +GlfwInitialization::~GlfwInitialization() { glfwTerminate(); } + +} // namespace veng diff --git a/Client/src/glfw/glfw_moniotr.cpp b/Client/src/glfw/glfw_moniotr.cpp new file mode 100644 index 0000000..7702b99 --- /dev/null +++ b/Client/src/glfw/glfw_moniotr.cpp @@ -0,0 +1,34 @@ +#include + +#include "glfw/glfw_monitor.h" +#include "precomp.h" + +namespace veng { +gsl::span GetMonitors() { + std::int32_t monitor_count = 0; + GLFWmonitor **monitor_pointers = glfwGetMonitors(&monitor_count); + return gsl::span(monitor_pointers, monitor_count); +} + +glm::ivec2 GetMonitorPosition(gsl::not_null monitor) { + glm::ivec2 monitor_position; + glfwGetMonitorPos(monitor, &monitor_position.x, &monitor_position.y); + return monitor_position; +} +glm::ivec2 GetMonitorWorkAreaSize(gsl::not_null monitor) { + glm::ivec2 monitor_size; + glfwGetMonitorWorkarea(monitor, nullptr, nullptr, &monitor_size.x, + &monitor_size.y); + return monitor_size; +} + +void MoveWindowToMonitor(gsl::not_null window, + gsl::not_null monitor) { + glm::ivec2 window_size; + glfwGetWindowSize(window, &window_size.x, &window_size.y); + const glm::ivec2 window_new_position = GetMonitorPosition(monitor) + + (GetMonitorWorkAreaSize(monitor) / 2) - + (window_size / 2); + glfwSetWindowPos(window, window_new_position.x, window_new_position.y); +} +} // namespace veng diff --git a/Client/src/glfw/glfw_window.cpp b/Client/src/glfw/glfw_window.cpp new file mode 100644 index 0000000..953224b --- /dev/null +++ b/Client/src/glfw/glfw_window.cpp @@ -0,0 +1,50 @@ +#include "glfw/glfw_window.h" + +#include + +#include "glfw/glfw_monitor.h" +#include "precomp.h" + +namespace veng { + +Window::Window(gsl::czstring name, glm::ivec2 size) { + // glfwWindowHint(GLFW_RESIZABLE, GLFW_FALSE); + glfwWindowHint(GLFW_CLIENT_API, GLFW_NO_API); + + window_ = glfwCreateWindow(size.x, size.y, name, nullptr, nullptr); + if (window_ == nullptr) std::exit(EXIT_FAILURE); +} + +Window::~Window() { glfwDestroyWindow(window_); } + +glm::ivec2 Window::GetWindowSize() const { + glm::ivec2 window_size; + glfwGetWindowSize(window_, &window_size.x, &window_size.y); + return window_size; +} + +glm::ivec2 Window::GetFramebufferSize() const { + glm::ivec2 size; + glfwGetFramebufferSize(window_, &size.x, &size.y); + return size; +} + +bool Window::ShouldClose() const { return glfwWindowShouldClose(window_); } + +GLFWwindow* Window::GetHandle() const { return window_; } + +GLFWkeyfun Window::SetKeyCallback(GLFWkeyfun key_callback) { + return glfwSetKeyCallback(window_, key_callback); +} + +bool Window::TryMoveToMonitor(std::uint16_t monitor_number) { + gsl::span monitors = veng::GetMonitors(); + + if (monitor_number < monitors.size()) { + veng::MoveWindowToMonitor(window_, monitors[monitor_number]); + return true; + } + return false; +} + +} // namespace veng diff --git a/Client/src/main.cpp b/Client/src/main.cpp new file mode 100644 index 0000000..27402f2 --- /dev/null +++ b/Client/src/main.cpp @@ -0,0 +1,199 @@ +#include + +#include +#include +#include + +#include "asset/loader.h" +#include "glfw/glfw_initialization.h" +#include "glfw/glfw_monitor.h" +#include "glfw/glfw_window.h" +#include "precomp.h" +#include "vulkan/coordinate.h" +#include "vulkan/engine.h" +#include "vulkan/graphics.h" +#include "vulkan/physics.h" + +void BeginPlay(veng::Engine& engine) { + veng::Model* const player = engine.SpawnModel("player", "player"); + player->scale = glm::vec3(.02f); + player->colision = true; + veng::Model* const player_flame = + engine.SpawnModel("player_flame", "player_flame"); + player_flame->scale = player->scale; + player_flame->colision = false; + + std::cout << "player addr: " << player << std::endl; + + veng::Model* const other_player = engine.SpawnModel("player", "other_player"); + other_player->position = glm::vec3(1.f, 0.f, 0.f); + other_player->scale = glm::vec3(.02f); + other_player->colision = true; + other_player->OnColision = [](veng::Model* self, veng::Model* other) { + if (other->owner == self) return; + std::cout << self << " and " << other << " is Nearby." << std::endl; + + std::cout << self << "'s owner: " << self->owner << std::endl; + std::cout << other << "'s owner: " << other->owner << std::endl; + + std::cout << "Colided." << std::endl; + other->colision = false; + other->visible = false; + }; + + std::cout << "other player addr: " << other_player << std::endl; + + veng::Model* const camera_lag = engine.SpawnModel("", "camera_lag"); + camera_lag->colision = false; + camera_lag->position = player->position; + + veng::Model* const background = engine.SpawnModel("", "background"); + background->colision = false; + background->position = {background->position.x, background->position.y, 30.f}; + background->scale *= 100; + + veng::Model* const background0 = + engine.SpawnModel("background", "background0"); + background0->scale = background->scale; + veng::Model* const background1 = + engine.SpawnModel("background", "background1"); + background1->scale = background->scale; + veng::Model* const background2 = + engine.SpawnModel("background", "background2"); + background2->scale = background->scale; + veng::Model* const background3 = + engine.SpawnModel("background", "background3"); + background3->scale = background->scale; +} + +void Tick(veng::Engine& engine, std::float_t delta_time) { + static std::float_t bullet_cooldown = 0.f; + + veng::Model* const player = engine.GetSpawnedObject("player"); + veng::Model* const player_flame = engine.GetSpawnedObject("player_flame"); + veng::Model* const camera_lag = engine.GetSpawnedObject("camera_lag"); + + veng::Model* const background = engine.GetSpawnedObject("background"); + veng::Model* const background0 = engine.GetSpawnedObject("background0"); + veng::Model* const background1 = engine.GetSpawnedObject("background1"); + veng::Model* const background2 = engine.GetSpawnedObject("background2"); + veng::Model* const background3 = engine.GetSpawnedObject("background3"); + + glm::vec3 forward = player->rotation * glm::vec3(0, 1, 0); + glm::vec3 right = player->rotation * glm::vec3(1, 0, 0); + + std::float_t stiffness = + 500.0f * ((glm::length(player->linear_velocity) > 1.f) + ? glm::length(player->linear_velocity) + : 1.f); // 더 크면 빠르게 따라감 + std::float_t damping = 10.f * glm::sqrt(stiffness); // 임계 감쇠 + + // 감쇠 스프링 업데이트 + glm::vec3 displacement = camera_lag->position - player->position; + + camera_lag->linear_velocity += + (-stiffness * displacement - damping * camera_lag->linear_velocity) * + delta_time; + + engine.view = glm::lookAt( + glm::vec3(camera_lag->position.x, camera_lag->position.y, -5.f), + camera_lag->position, glm::vec3(0.f, -1.f, 0.f)); + + if (glfwGetKey(engine.vulkan_graphics->window->GetHandle(), GLFW_KEY_W) == + GLFW_PRESS) { + player->linear_acceleration = glm::normalize(forward) * 10.f; + player_flame->visible = true; + } else { + player->linear_acceleration = forward * .0f; + player_flame->visible = false; + } + + if (bullet_cooldown > std::numeric_limits::epsilon()) { + bullet_cooldown -= delta_time; + } + if (glfwGetKey(engine.vulkan_graphics->window->GetHandle(), GLFW_KEY_SPACE) == + GLFW_PRESS) { + if (bullet_cooldown > std::numeric_limits::epsilon()) { + bullet_cooldown - delta_time; + } else { + bullet_cooldown = .2f; + veng::Model* const bullet = + engine.SpawnLifedModel("bullet", "bullet", 10.f); + bullet->linear_velocity = player->linear_velocity + forward * 10.f; + bullet->position = player->position + forward * player->scale.x * 10.f; + bullet->owner = player; + bullet->scale = player->scale; + bullet->colision = true; + + std::cout << "bullet address: " << bullet << std::endl; + } + } + if (glfwGetKey(engine.vulkan_graphics->window->GetHandle(), GLFW_KEY_A) == + GLFW_PRESS) { + right = player->rotation * glm::vec3(0, 0, 1); + player->angular_velocity = right * 6.f; + } else if (glfwGetKey(engine.vulkan_graphics->window->GetHandle(), + GLFW_KEY_D) == GLFW_PRESS) { + right = player->rotation * glm::vec3(0, 0, 1); + player->angular_velocity = right * -6.f; + } else { + right = player->rotation * glm::vec3(0, 0, 1); + player->angular_velocity = right * 0.f; + } + + player_flame->rotation = player->rotation; + player_flame->position = + player->position + player->rotation * player_flame->original_offset * + 0.5f * player_flame->scale; + + if (player->position.x - background->position.x >= background->scale.x) + background->position += glm::vec3(2.f, 0.f, 0.f) * background->scale; + if (player->position.x - background->position.x < -background->scale.x) + background->position -= glm::vec3(2.f, 0.f, 0.f) * background->scale; + if (player->position.y - background->position.y >= background->scale.y) + background->position += glm::vec3(0.f, 2.f, 0.f) * background->scale; + if (player->position.y - background->position.y < -background->scale.y) + background->position -= glm::vec3(0.f, 2.f, 0.f) * background->scale; + + glm::vec3 sparse; + + sparse = glm::vec3(1.f, 1.f, 0.f); + background0->position = background->position + sparse * background->scale; + + sparse = glm::vec3(-1.f, 1.f, 0.f); + background1->position = background->position + sparse * background->scale; + + sparse = glm::vec3(1.f, -1.f, 0.f); + background2->position = background->position + sparse * background->scale; + + sparse = glm::vec3(-1.f, -1.f, 0.f); + background3->position = background->position + sparse * background->scale; +} + +std::int32_t main(std::int32_t argc, gsl::zstring* argv) { + const veng::GlfwInitialization _glfw; + + veng::Window window("Vulkan Engine", {800, 600}); + window.TryMoveToMonitor(0); + + veng::Graphics graphics(&window); + veng::Engine engine(&graphics); + + engine.LoadModelAsset("assets/player.fbx", "player"); + engine.LoadModelAsset("assets/player_flame.fbx", "player_flame"); + engine.LoadModelAsset("assets/bullet.fbx", "bullet"); + engine.LoadModelAsset("assets/background.fbx", "background"); + + engine.BeginPlay = BeginPlay; + engine.Tick = Tick; + + engine.init(); + + while (!window.ShouldClose()) { + glfwPollEvents(); + + engine.Update(); + } + + return EXIT_SUCCESS; +} diff --git a/Client/src/stb/stb_image.cpp b/Client/src/stb/stb_image.cpp new file mode 100644 index 0000000..38c72e9 --- /dev/null +++ b/Client/src/stb/stb_image.cpp @@ -0,0 +1,2 @@ +#define STB_IMAGE_IMPLEMENTATION +#include "stb/stb_image.h" diff --git a/Client/src/utilities.cpp b/Client/src/utilities.cpp new file mode 100644 index 0000000..1f8410f --- /dev/null +++ b/Client/src/utilities.cpp @@ -0,0 +1,28 @@ +#include "utilities.h" + +#include + +#include "precomp.h" + +namespace veng { +bool streq(gsl::czstring left, gsl::czstring right) { + return std::strcmp(left, right) == 0; +} +std::vector ReadFile(std::filesystem::path shader_path) { + if (!std::filesystem::exists(shader_path)) return {}; + if (!std::filesystem::is_regular_file(shader_path)) return {}; + + std::ifstream file(shader_path, std::ios::binary); + + if (!file.is_open()) return {}; + + std::uintmax_t file_size = std::filesystem::file_size(shader_path); + if (file_size > std::numeric_limits::max()) return {}; // 방어 + + std::uint32_t size = static_cast(file_size); + std::vector buffer(size); + file.read(reinterpret_cast(buffer.data()), size); + + return buffer; +} +} // namespace veng diff --git a/Client/src/vulkan/buffers.cpp b/Client/src/vulkan/buffers.cpp new file mode 100644 index 0000000..8dc87bc --- /dev/null +++ b/Client/src/vulkan/buffers.cpp @@ -0,0 +1,332 @@ +#include + +#include "asset/object/model.h" +#include "precomp.h" +#include "vulkan/graphics.h" +#include "vulkan/uniform_transformations.h" + +namespace veng { + +std::uint32_t Graphics::FindMemoryType( + std::uint32_t type_bits_filter, VkMemoryPropertyFlags required_properties) { + VkPhysicalDeviceMemoryProperties memory_properties; + vkGetPhysicalDeviceMemoryProperties(physical_device_, &memory_properties); + gsl::span memory_types(memory_properties.memoryTypes, + memory_properties.memoryTypeCount); + + for (std::uint32_t i = 0; i < memory_types.size(); i++) { + bool passes_filter = type_bits_filter & (1 << i); + bool has_property_flags = + memory_types[i].propertyFlags & required_properties; + + if (passes_filter && has_property_flags) return i; + } + + throw std::runtime_error("Cannot find memory type!"); +} + +BufferHandle Graphics::CreateBuffer(VkDeviceSize size, VkBufferUsageFlags usage, + VkMemoryPropertyFlags properties) { + BufferHandle handle = {}; + + VkBufferCreateInfo buffer_info = {}; + buffer_info.sType = VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO; + buffer_info.size = size; + buffer_info.usage = usage; + buffer_info.sharingMode = VK_SHARING_MODE_EXCLUSIVE; + + VkResult result = + vkCreateBuffer(logical_device_, &buffer_info, nullptr, &handle.buffer); + if (result != VK_SUCCESS) + throw std::runtime_error("Failed to create vertex buffer!"); + + VkMemoryRequirements memory_requirements; + vkGetBufferMemoryRequirements(logical_device_, handle.buffer, + &memory_requirements); + + std::uint32_t chosen_memory_type = + FindMemoryType(memory_requirements.memoryTypeBits, properties); + + VkMemoryAllocateInfo allocation_info = {}; + allocation_info.sType = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO; + allocation_info.allocationSize = memory_requirements.size; + allocation_info.memoryTypeIndex = chosen_memory_type; + + VkResult allocation_result = vkAllocateMemory( + logical_device_, &allocation_info, nullptr, &handle.memory); + if (allocation_result != VK_SUCCESS) + throw std::runtime_error("Failed to allocate buffer memory!"); + + vkBindBufferMemory(logical_device_, handle.buffer, handle.memory, 0); + + return handle; +} + +BufferHandle Graphics::CreateVertexBuffer(gsl::span vertices) { + VkDeviceSize size = sizeof(Vertex) * vertices.size(); + BufferHandle staging_handle = CreateBuffer( + size, + VK_BUFFER_USAGE_VERTEX_BUFFER_BIT | VK_BUFFER_USAGE_TRANSFER_SRC_BIT, + VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | + VK_MEMORY_PROPERTY_HOST_COHERENT_BIT); + + void* data; + vkMapMemory(logical_device_, staging_handle.memory, 0, size, 0, &data); + std::memcpy(data, vertices.data(), size); + vkUnmapMemory(logical_device_, staging_handle.memory); + + BufferHandle gpu_handle = CreateBuffer( + size, + VK_BUFFER_USAGE_VERTEX_BUFFER_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT, + VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT); + + VkCommandBuffer transient_commands = BeginTransientCommandBuffer(); + + VkBufferCopy copy_info = {}; + copy_info.srcOffset = 0; + copy_info.dstOffset = 0; + copy_info.size = size; + vkCmdCopyBuffer(transient_commands, staging_handle.buffer, gpu_handle.buffer, + 1, ©_info); + + EndTransientCommandBuffer(transient_commands); + + DestroyBuffer(staging_handle); + + return gpu_handle; +} + +BufferHandle Graphics::CreateIndexBuffer(gsl::span indices) { + VkDeviceSize size = sizeof(std::uint32_t) * indices.size(); + BufferHandle staging_handle = + CreateBuffer(size, VK_BUFFER_USAGE_TRANSFER_SRC_BIT, + VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | + VK_MEMORY_PROPERTY_HOST_COHERENT_BIT); + + void* data; + vkMapMemory(logical_device_, staging_handle.memory, 0, size, 0, &data); + std::memcpy(data, indices.data(), size); + vkUnmapMemory(logical_device_, staging_handle.memory); + + BufferHandle gpu_handle = CreateBuffer( + size, VK_BUFFER_USAGE_INDEX_BUFFER_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT, + VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT); + + VkCommandBuffer transient_commands = BeginTransientCommandBuffer(); + + VkBufferCopy copy_info = {}; + copy_info.srcOffset = 0; + copy_info.dstOffset = 0; + copy_info.size = size; + vkCmdCopyBuffer(transient_commands, staging_handle.buffer, gpu_handle.buffer, + 1, ©_info); + + EndTransientCommandBuffer(transient_commands); + + DestroyBuffer(staging_handle); + + return gpu_handle; +} + +void Graphics::DestroyBuffer(BufferHandle handle) { + vkDeviceWaitIdle(logical_device_); + vkDestroyBuffer(logical_device_, handle.buffer, nullptr); + vkFreeMemory(logical_device_, handle.memory, nullptr); +} + +void Graphics::SetModelMatrix(glm::mat4 model) { + // for (Frame& frame : frames_) + vkCmdPushConstants(frames_[current_frame_].command_buffer, pipeline_layout_, + VK_SHADER_STAGE_VERTEX_BIT, 0, sizeof(glm::mat4), &model); +} + +void Graphics::SetViewProjection(glm::mat4 view, glm::mat4 projection) { + UniformTransformations transformations{view, projection}; + for (Frame& frame : frames_) + std::memcpy(frame.uniform_buffer_location, &transformations, + sizeof(UniformTransformations)); +} + +void Graphics::RenderBuffer(BufferHandle handle, std::uint32_t vertex_count) { + VkDeviceSize offset = 0; + vkCmdBindDescriptorSets(frames_[current_frame_].command_buffer, + VK_PIPELINE_BIND_POINT_GRAPHICS, pipeline_layout_, 0, + 1, &frames_[current_frame_].uniform_set, 0, nullptr); + vkCmdBindVertexBuffers(frames_[current_frame_].command_buffer, 0, 1, + &handle.buffer, &offset); + vkCmdDraw(frames_[current_frame_].command_buffer, vertex_count, 1, 0, 0); +} + +void Graphics::RenderIndexedBuffer(BufferHandle vertex_buffer, + BufferHandle index_buffer, + std::uint32_t count) { + VkDeviceSize offset = 0; + vkCmdBindDescriptorSets(frames_[current_frame_].command_buffer, + VK_PIPELINE_BIND_POINT_GRAPHICS, pipeline_layout_, 0, + 1, &frames_[current_frame_].uniform_set, 0, nullptr); + vkCmdBindVertexBuffers(frames_[current_frame_].command_buffer, 0, 1, + &vertex_buffer.buffer, &offset); + vkCmdBindIndexBuffer(frames_[current_frame_].command_buffer, + index_buffer.buffer, 0, VK_INDEX_TYPE_UINT32); + vkCmdDrawIndexed(frames_[current_frame_].command_buffer, count, 1, 0, 0, 0); + SetModelMatrix(glm::mat4(1.f)); +} +void Graphics::RenderModel(Model* model) { + if (!model->visible) return; + SetTexture(model->material.texture_handle); + SetModelMatrix(model->transform); + RenderIndexedBuffer(model->vertex_buffer, model->index_buffer, + model->indices.size()); +} + +VkCommandBuffer Graphics::BeginTransientCommandBuffer() { + VkCommandBufferAllocateInfo allocation_info = {}; + allocation_info.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO; + allocation_info.level = VK_COMMAND_BUFFER_LEVEL_PRIMARY; + allocation_info.commandPool = command_pool_; + allocation_info.commandBufferCount = 1; + + VkCommandBuffer buffer; + vkAllocateCommandBuffers(logical_device_, &allocation_info, &buffer); + + VkCommandBufferBeginInfo begin_info = {}; + begin_info.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO; + begin_info.flags = VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT; + vkBeginCommandBuffer(buffer, &begin_info); + + return buffer; +} + +void Graphics::EndTransientCommandBuffer(VkCommandBuffer command_buffer) { + vkEndCommandBuffer(command_buffer); + + VkSubmitInfo submit_info = {}; + submit_info.sType = VK_STRUCTURE_TYPE_SUBMIT_INFO; + submit_info.commandBufferCount = 1; + submit_info.pCommandBuffers = &command_buffer; + + vkQueueSubmit(graphics_queue_, 1, &submit_info, VK_NULL_HANDLE); + vkQueueWaitIdle(graphics_queue_); + vkFreeCommandBuffers(logical_device_, command_pool_, 1, &command_buffer); +} + +void Graphics::CreateUniformBuffers() { + VkDeviceSize buffer_size = sizeof(UniformTransformations); + for (Frame& frame : frames_) { + frame.uniform_buffer = + CreateBuffer(buffer_size, VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT, + VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | + VK_MEMORY_PROPERTY_HOST_COHERENT_BIT); + + vkMapMemory(logical_device_, frame.uniform_buffer.memory, 0, buffer_size, 0, + &frame.uniform_buffer_location); + } +} + +void Graphics::CreateDescriptorSetLayouts() { + VkDescriptorSetLayoutBinding uniform_layout_binding = {}; + uniform_layout_binding.binding = 0; + uniform_layout_binding.descriptorType = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER; + uniform_layout_binding.descriptorCount = 1; + uniform_layout_binding.stageFlags = VK_SHADER_STAGE_ALL_GRAPHICS; + + VkDescriptorSetLayoutCreateInfo uniform_layout_info = {}; + uniform_layout_info.sType = + VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO; + uniform_layout_info.bindingCount = 1; + uniform_layout_info.pBindings = &uniform_layout_binding; + + if (vkCreateDescriptorSetLayout(logical_device_, &uniform_layout_info, + nullptr, + &uniform_set_layout_) != VK_SUCCESS) { + std::exit(EXIT_FAILURE); + } + + VkDescriptorSetLayoutBinding texture_layout_binding = {}; + texture_layout_binding.binding = 0; + texture_layout_binding.descriptorType = + VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER; + texture_layout_binding.descriptorCount = 1; + texture_layout_binding.stageFlags = VK_SHADER_STAGE_FRAGMENT_BIT; + + VkDescriptorSetLayoutCreateInfo texture_layout_info = {}; + texture_layout_info.sType = + VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO; + texture_layout_info.bindingCount = 1; + texture_layout_info.pBindings = &texture_layout_binding; + + if (vkCreateDescriptorSetLayout(logical_device_, &texture_layout_info, + nullptr, + &texture_set_layout_) != VK_SUCCESS) { + std::exit(EXIT_FAILURE); + } +} + +void Graphics::CreateDescriptorPools() { + VkDescriptorPoolSize uniform_pool_size = {}; + uniform_pool_size.type = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER; + uniform_pool_size.descriptorCount = MAX_BUFFERED_FRAMES; + + VkDescriptorPoolCreateInfo uniform_create_info = {}; + uniform_create_info.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO; + uniform_create_info.poolSizeCount = 1; + uniform_create_info.pPoolSizes = &uniform_pool_size; + uniform_create_info.maxSets = MAX_BUFFERED_FRAMES; + + if (vkCreateDescriptorPool(logical_device_, &uniform_create_info, nullptr, + &uniform_pool_) != VK_SUCCESS) { + std::exit(EXIT_FAILURE); + } + + VkPhysicalDeviceProperties properties = {}; + vkGetPhysicalDeviceProperties(physical_device_, &properties); + + VkDescriptorPoolSize texture_pool_size = {}; + texture_pool_size.type = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER; + texture_pool_size.descriptorCount = + properties.limits.maxSamplerAllocationCount; + + VkDescriptorPoolCreateInfo texture_create_info = {}; + texture_create_info.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO; + texture_create_info.poolSizeCount = 1; + texture_create_info.pPoolSizes = &texture_pool_size; + texture_create_info.maxSets = properties.limits.maxSamplerAllocationCount; + texture_create_info.flags = VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT; + + if (vkCreateDescriptorPool(logical_device_, &texture_create_info, nullptr, + &texture_pool_) != VK_SUCCESS) { + std::exit(EXIT_FAILURE); + } +} + +void Graphics::CreateDescriptorSets() { + for (Frame& frame : frames_) { + VkDescriptorSetAllocateInfo set_info = {}; + set_info.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO; + set_info.descriptorPool = uniform_pool_; + set_info.descriptorSetCount = 1; + set_info.pSetLayouts = &uniform_set_layout_; + + VkResult result = vkAllocateDescriptorSets(logical_device_, &set_info, + &frame.uniform_set); + if (result != VK_SUCCESS) std::exit(EXIT_FAILURE); + + VkDescriptorBufferInfo buffer_info = {}; + buffer_info.buffer = frame.uniform_buffer.buffer; + buffer_info.offset = 0; + buffer_info.range = sizeof(UniformTransformations); + + VkWriteDescriptorSet descriptor_write = {}; + descriptor_write.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET; + descriptor_write.dstSet = frame.uniform_set; + descriptor_write.dstBinding = 0; + descriptor_write.dstArrayElement = 0; + descriptor_write.descriptorType = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER; + descriptor_write.descriptorCount = 1; + descriptor_write.pBufferInfo = &buffer_info; + + vkUpdateDescriptorSets(logical_device_, 1, &descriptor_write, 0, nullptr); + } +} + +} // namespace veng diff --git a/Client/src/vulkan/class.cpp b/Client/src/vulkan/class.cpp new file mode 100644 index 0000000..b052b65 --- /dev/null +++ b/Client/src/vulkan/class.cpp @@ -0,0 +1,102 @@ +#include + +#include "precomp.h" +#include "vulkan/graphics.h" + +namespace veng { + +Graphics::Graphics(gsl::not_null window) : window(window) { +#if !defined(NDEBUG) + validation_enabled_ = true; +#endif + InitializeVulkan(); +} + +Graphics::~Graphics() { + if (logical_device_ != VK_NULL_HANDLE) { + vkDeviceWaitIdle(logical_device_); + CleanupSwapChain(); + DestroyTexture(depth_texture_); + + if (texture_pool_ != VK_NULL_HANDLE) + vkDestroyDescriptorPool(logical_device_, texture_pool_, nullptr); + + if (texture_set_layout_ != VK_NULL_HANDLE) + vkDestroyDescriptorSetLayout(logical_device_, texture_set_layout_, + nullptr); + + if (texture_sampler_ != VK_NULL_HANDLE) + vkDestroySampler(logical_device_, texture_sampler_, nullptr); + + if (uniform_pool_ != VK_NULL_HANDLE) + vkDestroyDescriptorPool(logical_device_, uniform_pool_, nullptr); + + for (Frame& frame : frames_) { + DestroyBuffer(frame.uniform_buffer); + + if (frame.image_available_signal != VK_NULL_HANDLE) + vkDestroySemaphore(logical_device_, frame.image_available_signal, + nullptr); + + if (frame.render_finished_signal != VK_NULL_HANDLE) + vkDestroySemaphore(logical_device_, frame.render_finished_signal, + nullptr); + + if (frame.still_rendering_fence != VK_NULL_HANDLE) + vkDestroyFence(logical_device_, frame.still_rendering_fence, nullptr); + } + + if (uniform_set_layout_ != VK_NULL_HANDLE) + vkDestroyDescriptorSetLayout(logical_device_, uniform_set_layout_, + nullptr); + + if (command_pool_ != VK_NULL_HANDLE) + vkDestroyCommandPool(logical_device_, command_pool_, nullptr); + + if (logical_device_ != VK_NULL_HANDLE) + vkDestroyPipeline(logical_device_, pipeline_, nullptr); + + if (pipeline_layout_ != VK_NULL_HANDLE) + vkDestroyPipelineLayout(logical_device_, pipeline_layout_, nullptr); + + if (render_pass_ != VK_NULL_HANDLE) + vkDestroyRenderPass(logical_device_, render_pass_, nullptr); + + vkDestroyDevice(logical_device_, nullptr); + } + if (instance_ != VK_NULL_HANDLE) { + if (surface_ != VK_NULL_HANDLE) + vkDestroySurfaceKHR(instance_, surface_, nullptr); + + if (debug_messenger_ != VK_NULL_HANDLE) + vkDestroyDebugUtilsMessengerEXT(instance_, debug_messenger_, nullptr); + + vkDestroyInstance(instance_, nullptr); + } +} + +void Graphics::InitializeVulkan() { + CreateInstance(); + SetupDebugMessenger(); + CreateSurface(); + PickPhysicalDevice(); + CreateLogicalDeviceAndQueues(); + CreateSwapChain(); + CreateImageViews(); + CreateRenderPass(); + CreateDescriptorSetLayouts(); + CreateGraphicsPipeline(); + CreateDepthResources(); + CreateFramebuffers(); + CreateCommandPool(); + CreateCommandBuffer(); + CreateSignals(); + CreateUniformBuffers(); + CreateDescriptorPools(); + CreateDescriptorSets(); + CreateTextureSampler(); + TransitionImageLayout(depth_texture_.image, VK_IMAGE_LAYOUT_UNDEFINED, + VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL); +} + +} // namespace veng diff --git a/Client/src/vulkan/coordinate.cpp b/Client/src/vulkan/coordinate.cpp new file mode 100644 index 0000000..f7e969d --- /dev/null +++ b/Client/src/vulkan/coordinate.cpp @@ -0,0 +1,62 @@ +#include "vulkan/coordinate.h" + +namespace veng { +Coord Coord::operator+(const Coord& other) const { + Coord result; + result.seg.x = this->seg.x + other.seg.x; + result.seg.y = this->seg.y + other.seg.y; + result.seg.z = this->seg.z + other.seg.z; + + if (this->pos.x + other.pos.x > border) { + result.seg.x += 1; + result.pos.x += glm::mod(this->pos.x, border); + result.pos.x += glm::mod(other.pos.x, border); + } else { + result.pos.x = this->pos.x + other.pos.x; + } + if (this->pos.y + other.pos.y > border) { + result.seg.y += 1; + result.pos.y += glm::mod(this->pos.y, border); + result.pos.y += glm::mod(other.pos.y, border); + } else { + result.pos.y = this->pos.y + other.pos.y; + } + if (this->pos.z + other.pos.z > border) { + result.seg.z += 1; + result.pos.z += glm::mod(this->pos.z, border); + result.pos.z += glm::mod(other.pos.z, border); + } else { + result.pos.z = this->pos.z + other.pos.z; + } + return result; +} +Coord Coord::operator-(const Coord& other) const { + Coord result; + result.seg.x = this->seg.x - other.seg.x; + result.seg.y = this->seg.y - other.seg.y; + result.seg.z = this->seg.z - other.seg.z; + + if (this->pos.x - other.pos.x < -border) { + result.seg.x -= 1; + result.pos.x -= glm::mod(this->pos.x, border); + result.pos.x -= glm::mod(other.pos.x, border); + } else { + result.pos.x = this->pos.x - other.pos.x; + } + if (this->pos.y - other.pos.y < -border) { + result.seg.y -= 1; + result.pos.y -= glm::mod(this->pos.y, border); + result.pos.y -= glm::mod(other.pos.y, border); + } else { + result.pos.y = this->pos.y - other.pos.y; + } + if (this->pos.z - other.pos.z < -border) { + result.seg.z -= 1; + result.pos.z -= glm::mod(this->pos.z, border); + result.pos.z -= glm::mod(other.pos.z, border); + } else { + result.pos.z = this->pos.z - other.pos.z; + } + return result; +} +} // namespace veng diff --git a/Client/src/vulkan/devices_and_queues.cpp b/Client/src/vulkan/devices_and_queues.cpp new file mode 100644 index 0000000..358419a --- /dev/null +++ b/Client/src/vulkan/devices_and_queues.cpp @@ -0,0 +1,166 @@ +#include + +#include "precomp.h" +#include "vulkan/graphics.h" + +namespace veng { + +Graphics::QueueFamilyIndices Graphics::FindQueueFamilies( + VkPhysicalDevice device) { + std::uint32_t queue_familiy_count = 0; + vkGetPhysicalDeviceQueueFamilyProperties(device, &queue_familiy_count, + nullptr); + std::vector families(queue_familiy_count); + vkGetPhysicalDeviceQueueFamilyProperties(device, &queue_familiy_count, + families.data()); + + auto graphics_family_it = + std::find_if(families.begin(), families.end(), + [](const VkQueueFamilyProperties& props) { + return props.queueFlags & + (VK_QUEUE_GRAPHICS_BIT | VK_QUEUE_TRANSFER_BIT); + }); + + QueueFamilyIndices result; + result.graphics_family = graphics_family_it - families.begin(); + + for (std::uint32_t i = 0; i < families.size(); i++) { + VkBool32 has_presentation_support = false; + vkGetPhysicalDeviceSurfaceSupportKHR(device, i, surface_, + &has_presentation_support); + if (has_presentation_support) { + result.presentation_family = i; + break; + } + } + + return result; +} + +Graphics::SwapChainProperties Graphics::GetSwapChainProperties( + VkPhysicalDevice device) { + SwapChainProperties properties; + + vkGetPhysicalDeviceSurfaceCapabilitiesKHR(device, surface_, + &properties.capabilities); + + std::uint32_t format_count; + vkGetPhysicalDeviceSurfaceFormatsKHR(device, surface_, &format_count, + nullptr); + properties.formats.resize(format_count); + vkGetPhysicalDeviceSurfaceFormatsKHR(device, surface_, &format_count, + properties.formats.data()); + + std::uint32_t modes_count; + vkGetPhysicalDeviceSurfacePresentModesKHR(device, surface_, &modes_count, + nullptr); + properties.present_modes.resize(modes_count); + vkGetPhysicalDeviceSurfacePresentModesKHR(device, surface_, &modes_count, + properties.present_modes.data()); + + return properties; +} + +std::vector Graphics::GetDeviceAvailableExtensions( + VkPhysicalDevice device) { + std::uint32_t available_extentions_count; + vkEnumerateDeviceExtensionProperties(device, nullptr, + &available_extentions_count, nullptr); + std::vector available_extentions( + available_extentions_count); + vkEnumerateDeviceExtensionProperties(device, nullptr, + &available_extentions_count, + available_extentions.data()); + return available_extentions; +} + +bool Graphics::AreAllDeviceExtensionsSupported(VkPhysicalDevice device) { + std::vector available_extentions = + GetDeviceAvailableExtensions(device); + return std::all_of( + required_device_extentions_.begin(), required_device_extentions_.end(), + std::bind_front(IsExtensionSupported, available_extentions)); +} + +bool Graphics::IsDeviceSuitable(VkPhysicalDevice device) { + QueueFamilyIndices families = FindQueueFamilies(device); + return families.IsValid() && AreAllDeviceExtensionsSupported(device) && + GetSwapChainProperties(device).IsValid(); +} + +void Graphics::PickPhysicalDevice() { + std::vector devices = GetAvailableDevices(); + + std::erase_if( + devices, std::not_fn(std::bind_front(&Graphics::IsDeviceSuitable, this))); + + if (devices.empty()) { + spdlog::error("No physical devices that match the criteria"); + std::exit(EXIT_FAILURE); + } + + physical_device_ = devices[0]; +} + +std::vector Graphics::GetAvailableDevices() { + std::uint32_t device_count; + vkEnumeratePhysicalDevices(instance_, &device_count, nullptr); + + if (device_count == 0) return {}; + + std::vector devices(device_count); + vkEnumeratePhysicalDevices(instance_, &device_count, devices.data()); + + return devices; +} + +void Graphics::CreateLogicalDeviceAndQueues() { + QueueFamilyIndices picked_device_families = + FindQueueFamilies(physical_device_); + + if (!picked_device_families.IsValid()) { + std::exit(EXIT_FAILURE); + } + + std::set unique_queue_families = { + picked_device_families.graphics_family.value(), + picked_device_families.presentation_family.value(), + }; + + std::float_t queue_priority = 1.f; + + std::vector queue_create_infos; + for (std::uint32_t unique_queue_family : unique_queue_families) { + VkDeviceQueueCreateInfo queue_info = {}; + queue_info.sType = VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO; + queue_info.queueFamilyIndex = unique_queue_family; + queue_info.queueCount = 1; + queue_info.pQueuePriorities = &queue_priority; + queue_create_infos.push_back(queue_info); + } + + VkPhysicalDeviceFeatures required_features = {}; + required_features.depthBounds = true; + required_features.depthClamp = true; + + VkDeviceCreateInfo device_info = {}; + device_info.sType = VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO; + device_info.queueCreateInfoCount = queue_create_infos.size(); + device_info.pQueueCreateInfos = queue_create_infos.data(); + device_info.pEnabledFeatures = &required_features; + device_info.enabledExtensionCount = required_device_extentions_.size(); + device_info.ppEnabledExtensionNames = required_device_extentions_.data(); + + VkResult result = + vkCreateDevice(physical_device_, &device_info, nullptr, &logical_device_); + if (result != VK_SUCCESS) std::exit(EXIT_FAILURE); + + vkGetDeviceQueue(logical_device_, + picked_device_families.graphics_family.value(), 0, + &graphics_queue_); + vkGetDeviceQueue(logical_device_, + picked_device_families.presentation_family.value(), 0, + &present_queue_); +} + +} // namespace veng diff --git a/Client/src/vulkan/drawing.cpp b/Client/src/vulkan/drawing.cpp new file mode 100644 index 0000000..6433918 --- /dev/null +++ b/Client/src/vulkan/drawing.cpp @@ -0,0 +1,191 @@ +#include + +#include "precomp.h" +#include "vulkan/graphics.h" + +namespace veng { + +void Graphics::CreateFramebuffers() { + swap_chain_framebuffers_.resize(swap_chain_image_views_.size()); + + for (std::uint32_t i = 0; i < swap_chain_image_views_.size(); i++) { + std::array attachments = {swap_chain_image_views_[i], + depth_texture_.image_view}; + + VkFramebufferCreateInfo info = {}; + info.sType = VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO; + info.renderPass = render_pass_; + info.attachmentCount = attachments.size(); + info.pAttachments = attachments.data(); + info.width = extent_.width; + info.height = extent_.height; + info.layers = 1; + + VkResult result = vkCreateFramebuffer(logical_device_, &info, nullptr, + &swap_chain_framebuffers_[i]); + if (result != VK_SUCCESS) std::exit(EXIT_FAILURE); + } +} + +void Graphics::CreateCommandPool() { + QueueFamilyIndices indices = FindQueueFamilies(physical_device_); + VkCommandPoolCreateInfo pool_info = {}; + pool_info.sType = VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO; + pool_info.flags = VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT; + pool_info.queueFamilyIndex = indices.graphics_family.value(); + + VkResult result = + vkCreateCommandPool(logical_device_, &pool_info, nullptr, &command_pool_); + if (result != VK_SUCCESS) std::exit(EXIT_FAILURE); +} + +void Graphics::CreateCommandBuffer() { + VkCommandBufferAllocateInfo info = {}; + info.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO; + info.commandPool = command_pool_; + info.level = VK_COMMAND_BUFFER_LEVEL_PRIMARY; + info.commandBufferCount = 1; + + for (Frame& frame : frames_) { + VkResult result = + vkAllocateCommandBuffers(logical_device_, &info, &frame.command_buffer); + if (result != VK_SUCCESS) std::exit(EXIT_FAILURE); + } +} + +void Graphics::BeginCommands() { + vkResetCommandBuffer(frames_[current_frame_].command_buffer, 0); + + VkCommandBufferBeginInfo begin_info = {}; + begin_info.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO; + + VkResult result = vkBeginCommandBuffer( + frames_[current_frame_].command_buffer, &begin_info); + if (result != VK_SUCCESS) + throw std::runtime_error("Failed to begin command buffer!"); + + std::array clear_values; + clear_values[0].color = {{0.f, 0.f, 0.f, 1.f}}; + clear_values[1].depthStencil = {1.f, 0}; + + VkRenderPassBeginInfo render_pass_begin_info = {}; + render_pass_begin_info.sType = VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO; + render_pass_begin_info.renderPass = render_pass_; + render_pass_begin_info.framebuffer = + swap_chain_framebuffers_[current_image_index_]; + render_pass_begin_info.renderArea.offset = {0, 0}; + render_pass_begin_info.renderArea.extent = extent_; + render_pass_begin_info.clearValueCount = clear_values.size(); + render_pass_begin_info.pClearValues = clear_values.data(); + + vkCmdBeginRenderPass(frames_[current_frame_].command_buffer, + &render_pass_begin_info, + VK_SUBPASS_CONTENTS_INLINE); + vkCmdBindPipeline(frames_[current_frame_].command_buffer, + VK_PIPELINE_BIND_POINT_GRAPHICS, + pipeline_); + VkViewport viewport = GetViewport(); + VkRect2D scissor = GetScissor(); + + vkCmdSetViewport(frames_[current_frame_].command_buffer, 0, 1, &viewport); + vkCmdSetScissor(frames_[current_frame_].command_buffer, 0, 1, &scissor); +} + +void Graphics::EndCommands() { + vkCmdEndRenderPass(frames_[current_frame_].command_buffer); + VkResult result = vkEndCommandBuffer(frames_[current_frame_].command_buffer); + if (result != VK_SUCCESS) + throw std::runtime_error("Failed to record command buffer!"); +} + +void Graphics::CreateSignals() { + for (Frame& frame : frames_) { + VkSemaphoreCreateInfo semafore_info = {}; + semafore_info.sType = VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO; + + if (vkCreateSemaphore(logical_device_, &semafore_info, nullptr, + &frame.image_available_signal) != + VK_SUCCESS) + std::exit(EXIT_FAILURE); + if (vkCreateSemaphore(logical_device_, &semafore_info, nullptr, + &frame.render_finished_signal) != + VK_SUCCESS) + std::exit(EXIT_FAILURE); + + VkFenceCreateInfo fence_info = {}; + fence_info.sType = VK_STRUCTURE_TYPE_FENCE_CREATE_INFO; + fence_info.flags = VK_FENCE_CREATE_SIGNALED_BIT; + + if (vkCreateFence(logical_device_, &fence_info, nullptr, + &frame.still_rendering_fence) != + VK_SUCCESS) + std::exit(EXIT_FAILURE); + } +} + +bool Graphics::BeginFrame() { + vkWaitForFences(logical_device_, 1, + &frames_[current_frame_].still_rendering_fence, VK_TRUE, + UINT64_MAX); + VkResult image_acquire_result = vkAcquireNextImageKHR(logical_device_, swap_chain_, UINT64_MAX, + frames_[current_frame_].image_available_signal, + VK_NULL_HANDLE, ¤t_image_index_); + + if (image_acquire_result == VK_ERROR_OUT_OF_DATE_KHR) { + RecreateSwapChain(); + return false; + } + + if (image_acquire_result != VK_SUCCESS && + image_acquire_result != VK_SUBOPTIMAL_KHR) + throw std::runtime_error("Couldn't acquire render image!"); + + vkResetFences(logical_device_, 1, + &frames_[current_frame_].still_rendering_fence); + + BeginCommands(); + SetModelMatrix(glm::mat4(1.f)); + + return true; +} + +void veng::Graphics::EndFrame() { + EndCommands(); + VkSubmitInfo submit_info = {}; + submit_info.sType = VK_STRUCTURE_TYPE_SUBMIT_INFO; + + VkPipelineStageFlags wait_stage = VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT; + submit_info.waitSemaphoreCount = 1; + submit_info.pWaitSemaphores = &frames_[current_frame_].image_available_signal; + submit_info.pWaitDstStageMask = &wait_stage; + submit_info.commandBufferCount = 1; + submit_info.pCommandBuffers = &frames_[current_frame_].command_buffer; + submit_info.signalSemaphoreCount = 1; + submit_info.pSignalSemaphores = + &frames_[current_frame_].render_finished_signal; + + VkResult submit_result = + vkQueueSubmit(graphics_queue_, 1, &submit_info, + frames_[current_frame_].still_rendering_fence); + if (submit_result != VK_SUCCESS) + throw std::runtime_error("failed to submit draw commands!"); + + VkPresentInfoKHR present_info = {}; + present_info.sType = VK_STRUCTURE_TYPE_PRESENT_INFO_KHR; + present_info.waitSemaphoreCount = 1; + present_info.pWaitSemaphores = + &frames_[current_frame_].render_finished_signal; + present_info.swapchainCount = 1; + present_info.pSwapchains = &swap_chain_; + present_info.pImageIndices = ¤t_image_index_; + + VkResult result = vkQueuePresentKHR(present_queue_, &present_info); + if (result == VK_ERROR_OUT_OF_DATE_KHR || result == VK_SUBOPTIMAL_KHR) + RecreateSwapChain(); + else if (result != VK_SUCCESS) + throw std::runtime_error("Failed to present swap chain image!"); + + current_frame_ = (current_frame_++) % MAX_BUFFERED_FRAMES; +} + +} // namespace veng diff --git a/Client/src/vulkan/engine.cpp b/Client/src/vulkan/engine.cpp new file mode 100644 index 0000000..bc08521 --- /dev/null +++ b/Client/src/vulkan/engine.cpp @@ -0,0 +1,184 @@ +#include "vulkan/engine.h" + +#include "precomp.h" + +namespace veng { + +void Engine::init() { + glm::ivec2 window_size_ = vulkan_graphics->window->GetFramebufferSize(); + view = glm::lookAt(glm::vec3(0.f, 0.f, -5.f), glm::vec3(0.f, 0.f, 0.f), + glm::vec3(0.f, -1.f, 0.f)); + projection = glm::perspective( + glm::radians(103.f), + (std::float_t)window_size_.x / (std::float_t)window_size_.y, 0.1f, + 1000.f); + vulkan_graphics->SetViewProjection(view, projection); + + for (auto it = model_assets_.begin(); it != model_assets_.end();) { + it->second.vertex_buffer = + vulkan_graphics->CreateVertexBuffer(it->second.vertices); + it->second.index_buffer = + vulkan_graphics->CreateIndexBuffer(it->second.indices); + it->second.material.texture_handle = + vulkan_graphics->CreateTexture(it->second.material.texture_image); + + ++it; + } + + if (BeginPlay != nullptr) BeginPlay(*this); +} + +void Engine::LoadModelAsset(std::string path, std::string name) { + veng::Model model(vulkan_graphics); + asset_loader_.setPath(path); + asset_loader_.loadModel(model); + model.material.texture_image = asset_loader_.readTexture(); + model_assets_[name] = std::move(model); +} + +const Model* Engine::GetStaticModel(std::string name) { + if (model_assets_.find(name) != model_assets_.end()) + return &model_assets_[name]; + return nullptr; +} + +Model* Engine::SpawnModel(std::string asset_name, std::string name) { + if (asset_name == "") { + Model model_to_spawn(nullptr); + model_to_spawn.visible = false; + dynamic_immortal_models_[name] = std::move(model_to_spawn); + return &dynamic_immortal_models_[name]; + } + + if (dynamic_immortal_models_.find(name) == dynamic_immortal_models_.end()) { + Model model_to_spawn(*GetStaticModel(asset_name)); + dynamic_immortal_models_[name] = std::move(model_to_spawn); + return &dynamic_immortal_models_[name]; + } + + std::uint32_t i = 0; + for (i = 0; i < std::numeric_limits::max();) { + if (dynamic_immortal_models_.find(name + std::to_string(i)) == + dynamic_immortal_models_.end()) { + Model model_to_spawn(*GetStaticModel(asset_name)); + dynamic_immortal_models_[name + std::to_string(i)] = + std::move(model_to_spawn); + break; + } + i++; + } + + if (i == std::numeric_limits::max() - 1) + return nullptr; + else + return &dynamic_immortal_models_[name + std::to_string(i)]; +} + +Model* Engine::SpawnLifedModel(std::string asset_name, std::string name, + std::float_t lifespan) { + if (asset_name == "") { + Model model_to_spawn(nullptr); + model_to_spawn.visible = false; + dynamic_models_[name] = std::make_pair(std::move(model_to_spawn), lifespan); + return &dynamic_models_[name].first; + } + if (dynamic_models_.find(name) == dynamic_models_.end()) { + Model model_to_spawn(*GetStaticModel(asset_name)); + dynamic_models_[name] = std::make_pair(std::move(model_to_spawn), lifespan); + return &dynamic_models_[name].first; + } + + std::uint32_t i = 0; + for (i = 0; i < std::numeric_limits::max();) { + if (dynamic_models_.find(name + std::to_string(i)) == + dynamic_models_.end()) { + Model model_to_spawn(*GetStaticModel(asset_name)); + dynamic_models_[name + std::to_string(i)] = + std::make_pair(std::move(model_to_spawn), lifespan); + break; + } + i++; + } + + if (i == std::numeric_limits::max() - 1) + return nullptr; + else + return &dynamic_models_[name + std::to_string(i)].first; +} + +Model* Engine::GetSpawnedObject(std::string name) { + for (auto it = dynamic_immortal_models_.begin(); + it != dynamic_immortal_models_.end();) { + if (it->first == name) return &it->second; + ++it; + } + + for (auto it = dynamic_models_.begin(); it != dynamic_models_.end();) { + if (it->first == name) return &it->second.first; + ++it; + } + + return nullptr; +} + +void Engine::Update() { + glm::ivec2 framebuffer_size = vulkan_graphics->window->GetFramebufferSize(); + if (framebuffer_size != window_size_ && framebuffer_size.x != 0 && + framebuffer_size.y != 0) { + window_size_ = framebuffer_size; + auto grater = (framebuffer_size.x > framebuffer_size.y) + ? framebuffer_size.x + : framebuffer_size.y; + view = glm::lookAt(glm::vec3(0.f, 0.f, -5.f), glm::vec3(0.f, 0.f, 0.f), + glm::vec3(0.f, -1.f, 0.f)); + projection = glm::perspective( + glm::radians(103.f), + (std::float_t)framebuffer_size.x / (std::float_t)framebuffer_size.y, + 0.1f, 1000.f); + } + vulkan_graphics->SetViewProjection(view, projection); + + if (vulkan_graphics->BeginFrame()) { + std::double_t current_time = glfwGetTime(); + std::float_t delta_time = + static_cast(current_time - last_frame_time_); + last_frame_time_ = current_time; + + if (Tick != nullptr) Tick(*this, delta_time); + + std::vector models; + models.reserve(dynamic_immortal_models_.size() + + dynamic_models_.size()); + + for (auto it = dynamic_immortal_models_.begin(); + it != dynamic_immortal_models_.end();) { + models.push_back(&it->second); + + ++it; + } + + for (auto it = dynamic_models_.begin(); it != dynamic_models_.end();) { + if (it->second.second < 0.f) { + it = dynamic_models_.erase(it); + continue; + } + else { + it->second.second -= delta_time; + } + models.push_back(&it->second.first); + + ++it; + } + + for (auto it : models) { + it->Update(delta_time); + vulkan_graphics->RenderModel(it); + } + + physics_controller_.invokeOnColisionEvent({models.data(), models.size()}); + + vulkan_graphics->EndFrame(); + } +} + +} // namespace veng diff --git a/Client/src/vulkan/graphics.cpp b/Client/src/vulkan/graphics.cpp new file mode 100644 index 0000000..9f688fb --- /dev/null +++ b/Client/src/vulkan/graphics.cpp @@ -0,0 +1,11 @@ +#include "vulkan/graphics.h" + +#include + +#include + +#include "precomp.h" + +namespace veng { + +} // namespace veng diff --git a/Client/src/vulkan/graphics_pipeline.cpp b/Client/src/vulkan/graphics_pipeline.cpp new file mode 100644 index 0000000..cb64a7a --- /dev/null +++ b/Client/src/vulkan/graphics_pipeline.cpp @@ -0,0 +1,306 @@ +#include + +#include "precomp.h" +#include "vulkan/graphics.h" + +namespace veng { + +VkShaderModule Graphics::CreateShaderModule(gsl::span buffer) { + if (buffer.empty()) return VK_NULL_HANDLE; + + VkShaderModuleCreateInfo info = {}; + info.sType = VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO; + info.codeSize = buffer.size(); + info.pCode = reinterpret_cast(buffer.data()); + + VkShaderModule shader_module; + VkResult result = + vkCreateShaderModule(logical_device_, &info, nullptr, &shader_module); + if (result != VK_SUCCESS) return VK_NULL_HANDLE; + + return shader_module; +} + +VkViewport Graphics::GetViewport() { + VkViewport viewport = {}; + viewport.x = 0.f; + viewport.y = 0.f; + viewport.width = static_cast(extent_.width); + viewport.height = static_cast(extent_.height); + viewport.minDepth = 0.f; + viewport.maxDepth = 1.f; + + return viewport; +} + +VkRect2D Graphics::GetScissor() { + VkRect2D scissor = {}; + scissor.offset = {0, 0}; + scissor.extent = extent_; + + return scissor; +} + +void Graphics::CreateGraphicsPipeline() { + std::vector basic_vertex_data = ReadFile("./basic.vert.spv"); + VkShaderModule vertex_shader = CreateShaderModule(basic_vertex_data); + gsl::final_action _destroy_vertex([this, vertex_shader]() { + vkDestroyShaderModule(logical_device_, vertex_shader, nullptr); + }); + + std::vector basic_fragment_data = ReadFile("./basic.frag.spv"); + VkShaderModule fragment_shader = CreateShaderModule(basic_fragment_data); + gsl::final_action _destroy_fragment([this, fragment_shader]() { + vkDestroyShaderModule(logical_device_, fragment_shader, nullptr); + }); + + if (vertex_shader == VK_NULL_HANDLE || fragment_shader == VK_NULL_HANDLE) + std::exit(EXIT_FAILURE); + + VkPipelineShaderStageCreateInfo vertex_stage_info = {}; + vertex_stage_info.sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO; + vertex_stage_info.stage = VK_SHADER_STAGE_VERTEX_BIT; + vertex_stage_info.module = vertex_shader; + vertex_stage_info.pName = "main"; + + VkPipelineShaderStageCreateInfo fragment_stage_info = {}; + fragment_stage_info.sType = + VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO; + fragment_stage_info.stage = VK_SHADER_STAGE_FRAGMENT_BIT; + fragment_stage_info.module = fragment_shader; + fragment_stage_info.pName = "main"; + + std::array stage_infos = { + vertex_stage_info, fragment_stage_info}; + + std::array dynamic_states = {VK_DYNAMIC_STATE_VIEWPORT, + VK_DYNAMIC_STATE_SCISSOR}; + + VkPipelineDynamicStateCreateInfo dynamic_state_info = {}; + dynamic_state_info.sType = + VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO; + dynamic_state_info.dynamicStateCount = dynamic_states.size(); + dynamic_state_info.pDynamicStates = dynamic_states.data(); + + VkViewport viewport = GetViewport(); + + VkRect2D scissor = GetScissor(); + + VkPipelineViewportStateCreateInfo viewport_info = {}; + viewport_info.sType = VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO; + viewport_info.viewportCount = 1; + viewport_info.pViewports = &viewport; + viewport_info.scissorCount = 1; + viewport_info.pScissors = &scissor; + + auto vertex_binding_description = Vertex::GetBindingDescription(); + auto vertex_attribute_descriptions = Vertex::GetAttributeDescriptions(); + + VkPipelineVertexInputStateCreateInfo vertex_input_info = {}; + vertex_input_info.sType = + VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO; + vertex_input_info.vertexBindingDescriptionCount = 1; + vertex_input_info.pVertexBindingDescriptions = &vertex_binding_description; + vertex_input_info.vertexAttributeDescriptionCount = + vertex_attribute_descriptions.size(); + vertex_input_info.pVertexAttributeDescriptions = + vertex_attribute_descriptions.data(); + + VkPipelineInputAssemblyStateCreateInfo input_assembly_info = {}; + input_assembly_info.sType = + VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO; + input_assembly_info.topology = VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST; + input_assembly_info.primitiveRestartEnable = VK_FALSE; + + VkPipelineRasterizationStateCreateInfo rasterization_state_info = {}; + rasterization_state_info.sType = + VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO; + rasterization_state_info.depthClampEnable = VK_FALSE; + rasterization_state_info.rasterizerDiscardEnable = VK_FALSE; + rasterization_state_info.polygonMode = VK_POLYGON_MODE_FILL; + rasterization_state_info.lineWidth = 1.f; + rasterization_state_info.cullMode = VK_CULL_MODE_NONE; + rasterization_state_info.frontFace = VK_FRONT_FACE_CLOCKWISE; + rasterization_state_info.depthBiasEnable = VK_FALSE; + + VkPipelineMultisampleStateCreateInfo multisampling_info = {}; + multisampling_info.sType = + VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO; + multisampling_info.sampleShadingEnable = VK_FALSE; + multisampling_info.rasterizationSamples = VK_SAMPLE_COUNT_1_BIT; + + VkPipelineColorBlendAttachmentState color_blend_attachment = {}; + color_blend_attachment.colorWriteMask = + VK_COLOR_COMPONENT_R_BIT | VK_COLOR_COMPONENT_G_BIT | + VK_COLOR_COMPONENT_B_BIT | VK_COLOR_COMPONENT_A_BIT; + color_blend_attachment.blendEnable = VK_TRUE; + color_blend_attachment.srcColorBlendFactor = VK_BLEND_FACTOR_SRC_ALPHA; + color_blend_attachment.dstColorBlendFactor = + VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA; + color_blend_attachment.colorBlendOp = VK_BLEND_OP_ADD; + color_blend_attachment.srcAlphaBlendFactor = VK_BLEND_FACTOR_ONE; + color_blend_attachment.dstAlphaBlendFactor = VK_BLEND_FACTOR_ZERO; + color_blend_attachment.alphaBlendOp = VK_BLEND_OP_ADD; + + VkPipelineColorBlendStateCreateInfo color_blending_info = {}; + color_blending_info.sType = + VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO; + color_blending_info.logicOpEnable = VK_FALSE; + color_blending_info.attachmentCount = 1; + color_blending_info.pAttachments = &color_blend_attachment; + + VkPipelineDepthStencilStateCreateInfo depth_stencil_info = {}; + depth_stencil_info.sType = + VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO; + depth_stencil_info.depthTestEnable = VK_TRUE; + depth_stencil_info.depthWriteEnable = VK_TRUE; + depth_stencil_info.depthCompareOp = VK_COMPARE_OP_LESS; + depth_stencil_info.depthBoundsTestEnable = VK_TRUE; + depth_stencil_info.minDepthBounds = 0.f; + depth_stencil_info.maxDepthBounds = 1.f; + depth_stencil_info.stencilTestEnable = VK_FALSE; + + VkPushConstantRange model_matrix_range = {}; + model_matrix_range.offset = 0; + model_matrix_range.size = sizeof(glm::mat4); + model_matrix_range.stageFlags = VK_SHADER_STAGE_VERTEX_BIT; + + std::array set_layouts = {uniform_set_layout_, + texture_set_layout_}; + + VkPipelineLayoutCreateInfo layout_info = {}; + layout_info.sType = VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO; + layout_info.pushConstantRangeCount = 1; + layout_info.pPushConstantRanges = &model_matrix_range; + layout_info.setLayoutCount = set_layouts.size(); + layout_info.pSetLayouts = set_layouts.data(); + + VkResult layout_result = vkCreatePipelineLayout(logical_device_, &layout_info, + nullptr, &pipeline_layout_); + if (layout_result != VK_SUCCESS) std::exit(EXIT_FAILURE); + + VkGraphicsPipelineCreateInfo pipeline_info = {}; + pipeline_info.sType = VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO; + pipeline_info.stageCount = stage_infos.size(); + pipeline_info.pStages = stage_infos.data(); + pipeline_info.pVertexInputState = &vertex_input_info; + pipeline_info.pInputAssemblyState = &input_assembly_info; + pipeline_info.pViewportState = &viewport_info; + pipeline_info.pRasterizationState = &rasterization_state_info; + pipeline_info.pMultisampleState = &multisampling_info; + pipeline_info.pDepthStencilState = &depth_stencil_info; + pipeline_info.pColorBlendState = &color_blending_info; + pipeline_info.pDynamicState = &dynamic_state_info; + pipeline_info.layout = pipeline_layout_; + pipeline_info.renderPass = render_pass_; + pipeline_info.subpass = 0; + + VkResult pipline_result = vkCreateGraphicsPipelines( + logical_device_, VK_NULL_HANDLE, 1, &pipeline_info, nullptr, &pipeline_); + if (pipline_result != VK_SUCCESS) std::exit(EXIT_FAILURE); +} + +void Graphics::CreateRenderPass() { + VkAttachmentDescription color_attachment = {}; + color_attachment.format = surface_format_.format; + color_attachment.samples = VK_SAMPLE_COUNT_1_BIT; + color_attachment.loadOp = VK_ATTACHMENT_LOAD_OP_CLEAR; + color_attachment.storeOp = VK_ATTACHMENT_STORE_OP_STORE; + color_attachment.stencilLoadOp = VK_ATTACHMENT_LOAD_OP_DONT_CARE; + color_attachment.stencilStoreOp = VK_ATTACHMENT_STORE_OP_DONT_CARE; + color_attachment.initialLayout = VK_IMAGE_LAYOUT_UNDEFINED; + color_attachment.finalLayout = VK_IMAGE_LAYOUT_PRESENT_SRC_KHR; + + VkAttachmentReference color_attachment_ref = {}; + color_attachment_ref.attachment = 0; + color_attachment_ref.layout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL; + + VkAttachmentDescription depth_attachment = {}; + depth_attachment.format = VK_FORMAT_D32_SFLOAT; + depth_attachment.samples = VK_SAMPLE_COUNT_1_BIT; + depth_attachment.loadOp = VK_ATTACHMENT_LOAD_OP_CLEAR; + depth_attachment.storeOp = VK_ATTACHMENT_STORE_OP_DONT_CARE; + depth_attachment.stencilLoadOp = VK_ATTACHMENT_LOAD_OP_DONT_CARE; + depth_attachment.stencilStoreOp = VK_ATTACHMENT_STORE_OP_DONT_CARE; + depth_attachment.initialLayout = VK_IMAGE_LAYOUT_UNDEFINED; + depth_attachment.finalLayout = + VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL; + + VkAttachmentReference depth_attachment_ref = {}; + depth_attachment_ref.attachment = 1; + depth_attachment_ref.layout = + VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL; + + VkSubpassDescription main_subpass = {}; + main_subpass.pipelineBindPoint = VK_PIPELINE_BIND_POINT_GRAPHICS; + main_subpass.colorAttachmentCount = 1; + main_subpass.pColorAttachments = &color_attachment_ref; + main_subpass.pDepthStencilAttachment = &depth_attachment_ref; + + VkSubpassDependency dependency = {}; + dependency.srcSubpass = VK_SUBPASS_EXTERNAL; + dependency.dstSubpass = 0; + dependency.srcStageMask = VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT | + VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT; + dependency.srcAccessMask = 0; + dependency.dstStageMask = VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT | + VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT; + dependency.dstAccessMask = VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT | + VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT; + + std::array attachments = {color_attachment, + depth_attachment}; + + VkRenderPassCreateInfo render_pass_info = {}; + render_pass_info.sType = VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO; + render_pass_info.attachmentCount = attachments.size(); + render_pass_info.pAttachments = attachments.data(); + render_pass_info.subpassCount = 1; + render_pass_info.pSubpasses = &main_subpass; + render_pass_info.dependencyCount = 1; + render_pass_info.pDependencies = &dependency; + + VkResult result = vkCreateRenderPass(logical_device_, &render_pass_info, + nullptr, &render_pass_); + if (result != VK_SUCCESS) std::exit(EXIT_FAILURE); +} + +void veng::Graphics::RecreateSwapChain() { + glm::ivec2 size = window->GetFramebufferSize(); + while (size.x == 0 || size.y == 0) { + size = window->GetFramebufferSize(); + // glfwWaitEvents(); + return; + } + + vkDeviceWaitIdle(logical_device_); + CleanupSwapChain(); + + CreateSwapChain(); + CreateImageViews(); + CreateDepthResources(); + CreateFramebuffers(); +} + +void veng::Graphics::CleanupSwapChain() { + if (logical_device_ == VK_NULL_HANDLE) return; + + for (VkFramebuffer framebuffer : swap_chain_framebuffers_) + vkDestroyFramebuffer(logical_device_, framebuffer, nullptr); + + for (VkImageView image_view : swap_chain_image_views_) + vkDestroyImageView(logical_device_, image_view, nullptr); + + if (swap_chain_ != VK_NULL_HANDLE) + vkDestroySwapchainKHR(logical_device_, swap_chain_, nullptr); + + vkDeviceWaitIdle(logical_device_); + vkDestroyImageView(logical_device_, depth_texture_.image_view, nullptr); + depth_texture_.image_view = VK_NULL_HANDLE; + vkDestroyImage(logical_device_, depth_texture_.image, nullptr); + depth_texture_.image = VK_NULL_HANDLE; + vkFreeMemory(logical_device_, depth_texture_.memory, nullptr); + depth_texture_.memory = VK_NULL_HANDLE; +} + +} // namespace veng diff --git a/Client/src/vulkan/instance_and_extensions.cpp b/Client/src/vulkan/instance_and_extensions.cpp new file mode 100644 index 0000000..5806859 --- /dev/null +++ b/Client/src/vulkan/instance_and_extensions.cpp @@ -0,0 +1,102 @@ +#include + +#include "precomp.h" +#include "vulkan/graphics.h" + +namespace veng { + +gsl::span Graphics::GetSuggestedInstanceExtentions() { + std::uint32_t glfw_extention_count = 0; + gsl::czstring* glfw_extentions = + glfwGetRequiredInstanceExtensions(&glfw_extention_count); + return {glfw_extentions, glfw_extention_count}; +} + +std::vector Graphics::GetRequiredInstanceExtentions() { + gsl::span suggested_extentions = + GetSuggestedInstanceExtentions(); + std::vector required_extentions(suggested_extentions.size()); + std::copy(suggested_extentions.begin(), suggested_extentions.end(), + required_extentions.begin()); + + if (validation_enabled_) + required_extentions.push_back(VK_EXT_DEBUG_UTILS_EXTENSION_NAME); + + if (!AreAllExtensionsSupported(suggested_extentions)) std::exit(EXIT_FAILURE); + + return required_extentions; +} + +std::vector Graphics::GetSupprotedInstanceExtensions() { + std::uint32_t count; + vkEnumerateInstanceExtensionProperties(nullptr, &count, nullptr); + + if (count == 0) return {}; + + std::vector properties(count); + vkEnumerateInstanceExtensionProperties(nullptr, &count, properties.data()); + return properties; +} + +bool ExtentionMatchesName(gsl::czstring name, + const VkExtensionProperties& properties) { + return streq(properties.extensionName, name); +} + +bool IsExtensionSupported(gsl::span extensions, + gsl::czstring name) { + return std::any_of(extensions.begin(), extensions.end(), + std::bind_front(ExtentionMatchesName, name)); +} + +bool Graphics::AreAllExtensionsSupported(gsl::span extensions) { + std::vector supported_extensions = + GetSupprotedInstanceExtensions(); + + return std::all_of( + extensions.begin(), extensions.end(), + std::bind_front(IsExtensionSupported, supported_extensions)); +} + +void Graphics::CreateInstance() { + std::array validation_layers = { + "VK_LAYER_KHRONOS_validation"}; + + if (!AreAllLayersSupported(validation_layers)) validation_enabled_ = false; + + std::vector required_extentions = + GetRequiredInstanceExtentions(); + + VkApplicationInfo app_info = {}; + app_info.sType = VK_STRUCTURE_TYPE_APPLICATION_INFO; + app_info.pNext = nullptr; + app_info.pApplicationName = "Udemy Course"; + app_info.applicationVersion = VK_MAKE_API_VERSION(0, 0, 0, 0); + app_info.pEngineName = "VEng"; + app_info.engineVersion = VK_MAKE_API_VERSION(0, 1, 0, 0); + app_info.apiVersion = VK_API_VERSION_1_0; + + VkInstanceCreateInfo instance_creation_info = {}; + instance_creation_info.sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO; + instance_creation_info.pNext = nullptr; + instance_creation_info.pApplicationInfo = &app_info; + instance_creation_info.enabledExtensionCount = required_extentions.size(); + instance_creation_info.ppEnabledExtensionNames = required_extentions.data(); + + VkDebugUtilsMessengerCreateInfoEXT messenger_create_info = + GetCreateMessengerInfo(); + if (validation_enabled_) { + instance_creation_info.pNext = &messenger_create_info; + instance_creation_info.enabledLayerCount = validation_layers.size(); + instance_creation_info.ppEnabledLayerNames = validation_layers.data(); + } else { + instance_creation_info.enabledLayerCount = 0; + instance_creation_info.ppEnabledLayerNames = nullptr; + } + + VkResult result = + vkCreateInstance(&instance_creation_info, nullptr, &instance_); + if (result != VK_SUCCESS) std::exit(EXIT_FAILURE); +} + +} // namespace veng diff --git a/Client/src/vulkan/physics.cpp b/Client/src/vulkan/physics.cpp new file mode 100644 index 0000000..8376c38 --- /dev/null +++ b/Client/src/vulkan/physics.cpp @@ -0,0 +1,112 @@ +#include "vulkan/physics.h" + +#include +#include + +#include "precomp.h" + +namespace veng { +void Physics::invokeOnColisionEvent(gsl::span models) { + const std::float_t EPSILON = std::numeric_limits::epsilon(); + + for (int first = 0; first < models.size(); first++) { + if (!models[first]->colision) continue; + for (int second = first + 1; second < models.size(); second++) { + if (!models[second]->colision) continue; + std::float_t distance = + glm::distance(models[first]->position, models[second]->position); + std::float_t model1_radius = + models[first]->radius * models[first]->scale.x; + std::float_t model2_radius = + models[second]->radius * models[second]->scale.x; + if (distance <= model1_radius + model2_radius) { + if (models[first]->OnColision != nullptr) + models[first]->OnColision(models[first], models[second]); + if (models[second]->OnColision != nullptr) + models[second]->OnColision(models[second], models[first]); + break; + } + } + } +} + +bool Physics::RayTrace(const glm::vec3& rayOrigin, const glm::vec3& rayDir, + const glm::vec3& v0, const glm::vec3& v1, + const glm::vec3& v2, std::float_t& outDistance) { + const std::float_t EPSILON = std::numeric_limits::epsilon(); + + // 삼각형 엣지와 노멀 계산 + glm::vec3 edge1 = v1 - v0; + glm::vec3 edge2 = v2 - v0; + glm::vec3 normal = glm::cross(edge1, edge2); + + // 평행 여부 판단 + glm::vec3 h = glm::cross(rayDir, edge2); + std::float_t a = glm::dot(edge1, h); + + if (fabs(a) < EPSILON) { + // 광선 방향과 삼각형 평면이 거의 평행 → coplanar 검사 + // 시작점이 평면 위에 있는지 + std::float_t distToPlane = glm::dot(normal, rayOrigin - v0); + if (fabs(distToPlane) < EPSILON) { + // 평면 위에 있다면, 점이 삼각형 내부에 있는지 검사 + auto pointInTri = [&](const glm::vec3& P) { + // 엣지마다 P가 같은 반대 방향 노멀 쪽에 있는지 + glm::vec3 c0 = glm::cross(v1 - v0, P - v0); + glm::vec3 c1 = glm::cross(v2 - v1, P - v1); + glm::vec3 c2 = glm::cross(v0 - v2, P - v2); + + std::float_t f0 = glm::dot(normal, c0); + std::float_t f1 = glm::dot(normal, c1); + std::float_t f2 = glm::dot(normal, c2); + + return (f0 >= EPSILON && f1 >= EPSILON && f2 >= EPSILON); + }; + if (pointInTri(rayOrigin)) { + outDistance = 0.0f; + return true; + } + } + return false; + } + + // 기존 Möller–Trumbore 알고리즘 + std::float_t f = 1.0f / a; + glm::vec3 s = rayOrigin - v0; + std::float_t u = f * glm::dot(s, h); + if (u < 0.0f || u > 1.0f) return false; + + glm::vec3 q = glm::cross(s, edge1); + std::float_t v = f * glm::dot(rayDir, q); + if (v < 0.0f || u + v > 1.0f) return false; + + std::float_t t = f * glm::dot(edge2, q); + if (t > EPSILON) { + outDistance = t; + return true; + } + + return false; +} + +bool Physics::IsPointInsideMesh_(const glm::vec3& point, + const std::vector& vertices, + const std::vector& indices) { + glm::vec3 rayDir = glm::vec3(1.0f, 0.0f, 0.0f); // X+ 방향 광선 + int intersectionCount = 0; + + for (size_t i = 0; i < indices.size(); i += 3) { + const glm::vec3& v0 = vertices[indices[i + 0]].position; + const glm::vec3& v1 = vertices[indices[i + 1]].position; + const glm::vec3& v2 = vertices[indices[i + 2]].position; + + std::float_t t; + if (RayTrace(point, rayDir, v0, v1, v2, t)) { + intersectionCount++; + } + } + + return (intersectionCount % 2 == 1); // 홀수면 내부} +} + +} // namespace veng diff --git a/Client/src/vulkan/presentation.cpp b/Client/src/vulkan/presentation.cpp new file mode 100644 index 0000000..92e7c85 --- /dev/null +++ b/Client/src/vulkan/presentation.cpp @@ -0,0 +1,176 @@ +#include "vulkan/graphics.h" +#include + +#include "precomp.h" + +namespace veng { + +void Graphics::CreateSurface() { + VkResult result = glfwCreateWindowSurface(instance_, window->GetHandle(), + nullptr, &surface_); + if (result != VK_SUCCESS) std::exit(EXIT_FAILURE); +} + +bool IsRgbaTypeFormat(const VkSurfaceFormatKHR& format_properties) { + return format_properties.format == VK_FORMAT_R8G8B8A8_SRGB || + format_properties.format == VK_FORMAT_B8G8R8A8_SRGB; +} + +bool IsSrgbColorSpace(const VkSurfaceFormatKHR& format_properties) { + return format_properties.colorSpace == VK_COLORSPACE_SRGB_NONLINEAR_KHR; +} + +bool IsCorrectFormat(const VkSurfaceFormatKHR& format_properties) { + return IsSrgbColorSpace(format_properties) && + IsRgbaTypeFormat(format_properties); +} + +VkSurfaceFormatKHR Graphics::ChooseSwapSurfaceFormat( + gsl::span formats) { + if (formats.size() == 1 && formats[0].format == VK_FORMAT_UNDEFINED) { + return {VkFormat::VK_FORMAT_R8G8B8A8_SRGB, + VkColorSpaceKHR::VK_COLORSPACE_SRGB_NONLINEAR_KHR}; + } + + auto it = std::find_if(formats.begin(), formats.end(), IsCorrectFormat); + if (it != formats.end()) return *it; + + for (const VkSurfaceFormatKHR& format : formats) { + if (format.format == VK_FORMAT_R8G8B8A8_SRGB && + format.colorSpace == VK_COLORSPACE_SRGB_NONLINEAR_KHR) { + return format; + } + } + + return formats[0]; +} + +VkPresentModeKHR Graphics::ChooseSwapPresentMode( + gsl::span present_modes) { + constexpr std::array preferred_modes = { + VK_PRESENT_MODE_MAILBOX_KHR, VK_PRESENT_MODE_IMMEDIATE_KHR, + VK_PRESENT_MODE_FIFO_KHR}; + + for (const auto& preferred : preferred_modes) + if (std::find(present_modes.begin(), present_modes.end(), preferred) != + present_modes.end()) + return preferred; + + return VK_PRESENT_MODE_FIFO_KHR; +} + +VkExtent2D Graphics::ChooseSwapExtent( + const VkSurfaceCapabilitiesKHR& capabilities) { + constexpr std::uint32_t kInvalidSize = + std::numeric_limits::max(); + + if (capabilities.currentExtent.width != kInvalidSize) { + return capabilities.currentExtent; + } else { + glm::ivec2 size = window->GetFramebufferSize(); + VkExtent2D actual_extent = {static_cast(size.x), + static_cast(size.y)}; + + actual_extent.width = + std::clamp(actual_extent.width, capabilities.minImageExtent.width, + capabilities.maxImageExtent.width); + actual_extent.height = + std::clamp(actual_extent.height, capabilities.minImageExtent.height, + capabilities.maxImageExtent.height); + + return actual_extent; + } +} + +std::uint32_t Graphics::ChooseSwapImageCount( + const VkSurfaceCapabilitiesKHR& capabilities) { + std::uint32_t image_count = capabilities.minImageCount + 1; + if (capabilities.maxImageCount > 0 && + capabilities.maxImageCount < image_count) + image_count = capabilities.maxImageCount; + + return image_count; +} + +void Graphics::CreateSwapChain() { + SwapChainProperties properties = GetSwapChainProperties(physical_device_); + + surface_format_ = ChooseSwapSurfaceFormat(properties.formats); + present_mode_ = ChooseSwapPresentMode(properties.present_modes); + extent_ = ChooseSwapExtent(properties.capabilities); + + std::uint32_t image_count = ChooseSwapImageCount(properties.capabilities); + + VkSwapchainCreateInfoKHR info = {}; + info.sType = VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR; + info.surface = surface_; + info.minImageCount = image_count; + info.imageFormat = surface_format_.format; + info.imageColorSpace = surface_format_.colorSpace; + info.imageExtent = extent_; + info.imageArrayLayers = 1; + info.imageUsage = VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT; + info.presentMode = present_mode_; + info.preTransform = properties.capabilities.currentTransform; + info.compositeAlpha = VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR; + info.clipped = VK_TRUE; + info.oldSwapchain = VK_NULL_HANDLE; + + QueueFamilyIndices indices = FindQueueFamilies(physical_device_); + + if (indices.graphics_family != indices.presentation_family) { + std::array family_indices = { + indices.graphics_family.value(), indices.presentation_family.value()}; + info.imageSharingMode = VK_SHARING_MODE_CONCURRENT; + info.queueFamilyIndexCount = family_indices.size(); + info.pQueueFamilyIndices = family_indices.data(); + } else { + info.imageSharingMode = VK_SHARING_MODE_EXCLUSIVE; + } + + VkResult result = + vkCreateSwapchainKHR(logical_device_, &info, nullptr, &swap_chain_); + if (result != VK_SUCCESS) std::exit(EXIT_FAILURE); + + std::uint32_t actual_image_count; + vkGetSwapchainImagesKHR(logical_device_, swap_chain_, &actual_image_count, + nullptr); + swap_chain_images_.resize(actual_image_count); + vkGetSwapchainImagesKHR(logical_device_, swap_chain_, &actual_image_count, + swap_chain_images_.data()); +} + +VkImageView Graphics::CreateImageView(VkImage image, VkFormat format, VkImageAspectFlags aspect_flag) { + VkImageViewCreateInfo info = {}; + info.sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO; + info.image = image; + info.viewType = VK_IMAGE_VIEW_TYPE_2D; + info.format = format; + info.components.r = VK_COMPONENT_SWIZZLE_IDENTITY; + info.components.g = VK_COMPONENT_SWIZZLE_IDENTITY; + info.components.b = VK_COMPONENT_SWIZZLE_IDENTITY; + info.components.a = VK_COMPONENT_SWIZZLE_IDENTITY; + info.subresourceRange.aspectMask = aspect_flag; + info.subresourceRange.baseMipLevel = 0; + info.subresourceRange.levelCount = 1; + info.subresourceRange.baseArrayLayer = 0; + info.subresourceRange.layerCount = 1; + + VkImageView view; + VkResult result = vkCreateImageView(logical_device_, &info, nullptr, &view); + if (result != VK_SUCCESS) std::exit(EXIT_FAILURE); + return view; +} + +void Graphics::CreateImageViews() { + swap_chain_image_views_.resize(swap_chain_images_.size()); + + auto image_view_it = swap_chain_image_views_.begin(); + for (VkImage image : swap_chain_images_) { + *image_view_it = CreateImageView(image, surface_format_.format, VK_IMAGE_ASPECT_COLOR_BIT); + + std::advance(image_view_it, 1); + } +} + +} // namespace veng diff --git a/Client/src/vulkan/texture.cpp b/Client/src/vulkan/texture.cpp new file mode 100644 index 0000000..e20616b --- /dev/null +++ b/Client/src/vulkan/texture.cpp @@ -0,0 +1,259 @@ +#include + +#include "stb/stb_image.h" +#include "vulkan/graphics.h" + +namespace veng { + +void Graphics::CreateTextureSampler() { + VkSamplerCreateInfo sampler_info = {}; + sampler_info.sType = VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO; + sampler_info.magFilter = VK_FILTER_LINEAR; + sampler_info.minFilter = VK_FILTER_LINEAR; + sampler_info.addressModeU = VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE; + sampler_info.addressModeV = VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE; + sampler_info.addressModeW = VK_SAMPLER_ADDRESS_MODE_REPEAT; + sampler_info.anisotropyEnable = VK_FALSE; + sampler_info.maxAnisotropy = 1.f; + sampler_info.borderColor = VK_BORDER_COLOR_FLOAT_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_LINEAR; + sampler_info.mipLodBias = 0.f; + sampler_info.minLod = 0.f; + sampler_info.maxLod = 0.f; + + if (vkCreateSampler(logical_device_, &sampler_info, nullptr, + &texture_sampler_) != VK_SUCCESS) { + std::exit(EXIT_FAILURE); + } +} + +TextureHandle Graphics::CreateTexture(gsl::czstring path) { + std::vector data = ReadFile(path); + return CreateTexture({data.data(), data.size()}); +} + +TextureHandle Graphics::CreateTexture( + std::vector image_file_data) { + return CreateTexture({image_file_data.data(), image_file_data.size()}); +} + +TextureHandle Graphics::CreateTexture(gsl::span image_file_data) { + glm::ivec2 image_extents; + std::int32_t channels; + stbi_uc* pixel_data = stbi_load_from_memory( + image_file_data.data(), image_file_data.size(), &image_extents.x, + &image_extents.y, &channels, STBI_rgb_alpha); + + VkDeviceSize buffer_size = image_extents.x * image_extents.y * 4; + BufferHandle staging = + CreateBuffer(buffer_size, VK_BUFFER_USAGE_TRANSFER_SRC_BIT, + VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | + VK_MEMORY_PROPERTY_HOST_COHERENT_BIT); + void* data_location; + vkMapMemory(logical_device_, staging.memory, 0, buffer_size, 0, + &data_location); + std::memcpy(data_location, pixel_data, buffer_size); + vkUnmapMemory(logical_device_, staging.memory); + + stbi_image_free(pixel_data); + + TextureHandle handle = + CreateImage(image_extents, VK_FORMAT_R8G8B8A8_SRGB, + VK_IMAGE_USAGE_TRANSFER_DST_BIT | VK_IMAGE_USAGE_SAMPLED_BIT, + VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT); + + TransitionImageLayout(handle.image, VK_IMAGE_LAYOUT_UNDEFINED, + VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL); + CopyBufferToImage(staging.buffer, handle.image, image_extents); + TransitionImageLayout(handle.image, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, + VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL); + + handle.image_view = CreateImageView(handle.image, VK_FORMAT_R8G8B8A8_SRGB, + VK_IMAGE_ASPECT_COLOR_BIT); + + VkDescriptorSetAllocateInfo set_info = {}; + set_info.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO; + set_info.descriptorPool = texture_pool_; + set_info.descriptorSetCount = 1; + set_info.pSetLayouts = &texture_set_layout_; + + VkResult result = + vkAllocateDescriptorSets(logical_device_, &set_info, &handle.set); + if (result != VK_SUCCESS) std::exit(EXIT_FAILURE); + + VkDescriptorImageInfo image_info = {}; + image_info.imageLayout = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL; + image_info.imageView = handle.image_view; + image_info.sampler = texture_sampler_; + + VkWriteDescriptorSet descriptor_write = {}; + descriptor_write.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET; + descriptor_write.dstSet = handle.set; + descriptor_write.dstBinding = 0; + descriptor_write.dstArrayElement = 0; + descriptor_write.descriptorType = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER; + descriptor_write.descriptorCount = 1; + descriptor_write.pImageInfo = &image_info; + + vkUpdateDescriptorSets(logical_device_, 1, &descriptor_write, 0, nullptr); + + DestroyBuffer(staging); + return handle; +} + +void Graphics::DestroyTexture(TextureHandle handle) { + vkDeviceWaitIdle(logical_device_); + + if (handle.set != VK_NULL_HANDLE) + vkFreeDescriptorSets(logical_device_, texture_pool_, 1, &handle.set); + + if (handle.image_view != VK_NULL_HANDLE) + vkDestroyImageView(logical_device_, handle.image_view, nullptr); + + if (handle.image != VK_NULL_HANDLE) + vkDestroyImage(logical_device_, handle.image, nullptr); + + if (handle.memory != VK_NULL_HANDLE) + vkFreeMemory(logical_device_, handle.memory, nullptr); +} + +void Graphics::SetTexture(TextureHandle handle) { + vkCmdBindDescriptorSets(frames_[current_frame_].command_buffer, + VK_PIPELINE_BIND_POINT_GRAPHICS, + pipeline_layout_, 1, 1, &handle.set, 0, nullptr); +} + +void Graphics::TransitionImageLayout(VkImage image, VkImageLayout old_layout, + VkImageLayout new_layout) { + VkCommandBuffer local_command_buffer = BeginTransientCommandBuffer(); + + VkImageMemoryBarrier barrier = {}; + barrier.sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER; + barrier.oldLayout = old_layout; + barrier.newLayout = new_layout; + barrier.srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED; + barrier.dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED; + barrier.image = image; + barrier.subresourceRange.baseArrayLayer = 0; + barrier.subresourceRange.baseMipLevel = 0; + barrier.subresourceRange.levelCount = 1; + barrier.subresourceRange.layerCount = 1; + + VkPipelineStageFlags source_stage = {}; + VkPipelineStageFlags destination_stage = {}; + + if (old_layout == VK_IMAGE_LAYOUT_UNDEFINED && + new_layout == VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL) { + barrier.srcAccessMask = 0; + barrier.dstAccessMask = VK_ACCESS_TRANSFER_WRITE_BIT; + source_stage = VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT; + destination_stage = VK_PIPELINE_STAGE_TRANSFER_BIT; + } else if (old_layout == VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL && + new_layout == VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL) { + barrier.srcAccessMask = VK_ACCESS_TRANSFER_WRITE_BIT; + barrier.dstAccessMask = VK_ACCESS_SHADER_READ_BIT; + source_stage = VK_PIPELINE_STAGE_TRANSFER_BIT; + destination_stage = VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT; + } else if (old_layout == VK_IMAGE_LAYOUT_UNDEFINED && + new_layout == VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL) { + barrier.srcAccessMask = 0; + barrier.dstAccessMask = VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT | + VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT; + source_stage = VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT; + destination_stage = VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT; + } + + if (new_layout == VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL) + barrier.subresourceRange.aspectMask = VK_IMAGE_ASPECT_DEPTH_BIT; + else + barrier.subresourceRange.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT; + + vkCmdPipelineBarrier(local_command_buffer, source_stage, destination_stage, 0, + 0, nullptr, 0, nullptr, 1, &barrier); + + EndTransientCommandBuffer(local_command_buffer); +} + +void Graphics::CopyBufferToImage(VkBuffer buffer, VkImage image, + glm::ivec2 image_size) { + VkCommandBuffer local_command_buffer = BeginTransientCommandBuffer(); + + VkBufferImageCopy region = {}; + region.bufferOffset = 0; + region.bufferRowLength = 0; + region.bufferImageHeight = 0; + region.imageSubresource.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT; + region.imageSubresource.mipLevel = 0; + region.imageSubresource.baseArrayLayer = 0; + region.imageSubresource.layerCount = 1; + region.imageOffset = {0, 0, 0}; + region.imageExtent = {static_cast(image_size.x), + static_cast(image_size.y), 1}; + + vkCmdCopyBufferToImage(local_command_buffer, buffer, image, + VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, 1, ®ion); + + EndTransientCommandBuffer(local_command_buffer); +} + +TextureHandle Graphics::CreateImage(glm::ivec2 size, VkFormat image_format, + VkBufferUsageFlags usage, + VkMemoryPropertyFlags properties) { + TextureHandle handle = {}; + + VkImageCreateInfo image_info = {}; + image_info.sType = VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO; + image_info.usage = usage; + image_info.sharingMode = VK_SHARING_MODE_EXCLUSIVE; + image_info.imageType = VK_IMAGE_TYPE_2D; + image_info.extent.width = size.x; + image_info.extent.height = size.y; + image_info.extent.depth = 1; + image_info.mipLevels = 1; + image_info.arrayLayers = 1; + image_info.format = image_format; + image_info.tiling = VK_IMAGE_TILING_OPTIMAL; + image_info.initialLayout = VK_IMAGE_LAYOUT_UNDEFINED; + image_info.samples = VK_SAMPLE_COUNT_1_BIT; + image_info.flags = 0; + + VkResult result = + vkCreateImage(logical_device_, &image_info, nullptr, &handle.image); + if (result != VK_SUCCESS) + throw std::runtime_error("Failed to create vertex buffer!"); + + VkMemoryRequirements memory_requirements; + vkGetImageMemoryRequirements(logical_device_, handle.image, + &memory_requirements); + + std::uint32_t chosen_memory_type = + FindMemoryType(memory_requirements.memoryTypeBits, properties); + + VkMemoryAllocateInfo allocation_info = {}; + allocation_info.sType = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO; + allocation_info.allocationSize = memory_requirements.size; + allocation_info.memoryTypeIndex = chosen_memory_type; + + VkResult allocation_result = vkAllocateMemory( + logical_device_, &allocation_info, nullptr, &handle.memory); + if (allocation_result != VK_SUCCESS) + throw std::runtime_error("Failed to allocate image memory!"); + + vkBindImageMemory(logical_device_, handle.image, handle.memory, 0); + + return handle; +} + +void Graphics::CreateDepthResources() { + VkFormat kDepthFormat = VK_FORMAT_D32_SFLOAT; + depth_texture_ = CreateImage({extent_.width, extent_.height}, kDepthFormat, + VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT, + VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT); + depth_texture_.image_view = CreateImageView( + depth_texture_.image, kDepthFormat, VK_IMAGE_ASPECT_DEPTH_BIT); +} + +} // namespace veng diff --git a/Client/src/vulkan/validation_layers.cpp b/Client/src/vulkan/validation_layers.cpp new file mode 100644 index 0000000..b37c94e --- /dev/null +++ b/Client/src/vulkan/validation_layers.cpp @@ -0,0 +1,73 @@ +#include "precomp.h" +#include "vulkan/graphics.h" + +namespace veng { + +static VKAPI_ATTR VkBool32 VKAPI_CALL +ValidationCallback(VkDebugUtilsMessageSeverityFlagBitsEXT messageSeverity, + VkDebugUtilsMessageTypeFlagsEXT messageTypes, + const VkDebugUtilsMessengerCallbackDataEXT* pCallbackData, + void* pUserData) { + if (messageSeverity & VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT) { + spdlog::warn("Vulkan Validation: {}", pCallbackData->pMessage); + } else { + spdlog::error("Vulkan Validation: {}", pCallbackData->pMessage); + } + return VK_FALSE; +} + +VkDebugUtilsMessengerCreateInfoEXT GetCreateMessengerInfo() { + VkDebugUtilsMessengerCreateInfoEXT creation_info = {}; + creation_info.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT; + creation_info.messageSeverity = + VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT | + VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT; + creation_info.messageType = VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT | + VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT; + creation_info.pfnUserCallback = ValidationCallback; + creation_info.pUserData = nullptr; + + return creation_info; +} + +std::vector Graphics::GetSupprotedValidationLayers() { + std::uint32_t count; + vkEnumerateInstanceLayerProperties(&count, nullptr); + + if (count == 0) return {}; + + std::vector properties(count); + vkEnumerateInstanceLayerProperties(&count, properties.data()); + return properties; +} + +bool LayerMatchesName(gsl::czstring name, const VkLayerProperties& properties) { + return streq(properties.layerName, name); +} + +bool IsLayerSupported(gsl::span layers, gsl::czstring name) { + return std::any_of(layers.begin(), layers.end(), + std::bind_front(LayerMatchesName, name)); +} + +bool Graphics::AreAllLayersSupported(gsl::span layers) { + std::vector supported_layers = + GetSupprotedValidationLayers(); + + return std::all_of(layers.begin(), layers.end(), + std::bind_front(IsLayerSupported, supported_layers)); +} + +void Graphics::SetupDebugMessenger() { + if (!validation_enabled_) return; + + VkDebugUtilsMessengerCreateInfoEXT info = GetCreateMessengerInfo(); + VkResult result = vkCreateDebugUtilsMessengerEXT(instance_, &info, nullptr, + &debug_messenger_); + if (result != VK_SUCCESS) { + spdlog::error("Cannot create debug messenger"); + return; + } +} + +} // namespace veng diff --git a/Client/src/vulkan/vk_function_ext_impl.cpp b/Client/src/vulkan/vk_function_ext_impl.cpp new file mode 100644 index 0000000..d4517a5 --- /dev/null +++ b/Client/src/vulkan/vk_function_ext_impl.cpp @@ -0,0 +1,25 @@ +#include "precomp.h" +#include "vulkan/graphics.h" + +VKAPI_ATTR VkResult VKAPI_CALL vkCreateDebugUtilsMessengerEXT( + VkInstance instance, const VkDebugUtilsMessengerCreateInfoEXT* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkDebugUtilsMessengerEXT* pMessenger) { + PFN_vkCreateDebugUtilsMessengerEXT function = + reinterpret_cast( + vkGetInstanceProcAddr(instance, "vkCreateDebugUtilsMessengerEXT")); + if (function != nullptr) { + return function(instance, pCreateInfo, pAllocator, pMessenger); + } else { + return VK_ERROR_EXTENSION_NOT_PRESENT; + } +} + +VKAPI_ATTR void VKAPI_CALL vkDestroyDebugUtilsMessengerEXT( + VkInstance instance, VkDebugUtilsMessengerEXT messenger, + const VkAllocationCallbacks* pAllocator) { + PFN_vkDestroyDebugUtilsMessengerEXT function = + reinterpret_cast( + vkGetInstanceProcAddr(instance, "vkDestroyDebugUtilsMessengerEXT")); + if (function != nullptr) function(instance, messenger, pAllocator); +}