From 40f6ec20d745ddb97c9d929886c5f690d4d2cbc4 Mon Sep 17 00:00:00 2001 From: Sora Date: Fri, 27 May 2022 12:51:04 +0200 Subject: [PATCH] =?UTF-8?q?Pr=C3=A9paration=20du=20projet?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CMakeLists.txt | 26 + Source/pdex.bin | Bin 0 -> 496 bytes .../api/v1/query/client-vscode/query.json | 1 + .../reply/cache-v2-67806f595a89659dd2f1.json | 1135 +++++++++++++++++ .../codemodel-v2-186d0c6b10b2e5895177.json | 60 + ...irectory-.-Debug-d0094a50bb2071803777.json | 14 + .../reply/index-2022-05-25T20-54-29-0470.json | 110 ++ ...ate_DEVICE-Debug-75a2fb39341eb2bd14e0.json | 325 +++++ .../toolchains-v1-c2c88990de69a07c1984.json | 48 + build/.ninja_deps | Bin 0 -> 6624 bytes build/.ninja_log | 4 + build/build.ninja | 154 +++ build/c_template_DEVICE | Bin 0 -> 126124 bytes src/main.c | 59 + 14 files changed, 1936 insertions(+) create mode 100644 CMakeLists.txt create mode 100644 Source/pdex.bin create mode 100644 build/.cmake/api/v1/query/client-vscode/query.json create mode 100644 build/.cmake/api/v1/reply/cache-v2-67806f595a89659dd2f1.json create mode 100644 build/.cmake/api/v1/reply/codemodel-v2-186d0c6b10b2e5895177.json create mode 100644 build/.cmake/api/v1/reply/directory-.-Debug-d0094a50bb2071803777.json create mode 100644 build/.cmake/api/v1/reply/index-2022-05-25T20-54-29-0470.json create mode 100644 build/.cmake/api/v1/reply/target-c_template_DEVICE-Debug-75a2fb39341eb2bd14e0.json create mode 100644 build/.cmake/api/v1/reply/toolchains-v1-c2c88990de69a07c1984.json create mode 100644 build/.ninja_deps create mode 100644 build/.ninja_log create mode 100644 build/build.ninja create mode 100644 build/c_template_DEVICE create mode 100644 src/main.c diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..9d477bf --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.14) +set(CMAKE_C_STANDARD 11) + +# Initial Variables +set(SDK $ENV{PLAYDATE_SDK}) + +# Game Name Customization +set(PLAYDATE_GAME_NAME c_template) +set(PLAYDATE_GAME_DEVICE c_template_DEVICE) + +# Source files +#TODO include a txt from src that keeps an updated list of files to compile +file( + GLOB_RECURSE + SOURCE_FILES + src/*.c +) + +# Configure project +project(${PLAYDATE_GAME_NAME} C ASM) +add_executable(${PLAYDATE_GAME_DEVICE} ${SDK}/C_API/buildsupport/setup.c ${SOURCE_FILES}) + +# Make sure we get rid of any existing builds on clean +set_property(DIRECTORY APPEND PROPERTY ADDITIONAL_MAKE_CLEAN_FILES "../${PLAYDATE_GAME_NAME}.pdx" "../Source/pdex.bin") + +include(${SDK}/C_API/buildsupport/playdate_game.cmake) \ No newline at end of file diff --git a/Source/pdex.bin b/Source/pdex.bin new file mode 100644 index 0000000000000000000000000000000000000000..d70bec23c20a2711a33ab290481391816c12f31e GIT binary patch literal 496 zcmbQp$dK>>hy|D!5`JuD*#Bb>$DVm^1@6dfkJOx;e1-7*qMQ^(1|ZN6t}HG|&DD3y z&nqd`cP!3GEz8WwN!1Nb%q!M4G|_d+&q>iMNGk!U1p#Ic7Vl;!rVGs8%o`=#3*15W zfiOsp)q~AjTIwc0_`TzT^|193Z8(BQoe`aW4R8}q!*b6fU zXjlTrR#tE6jjW!mVEMf-I2`_eKfj-0KggahK>I*yK5UiuY2LuBAm^)`A?G(cLppPY zyHbXB29M&T3~3LB$;KJea~YI&xGQI{C`kB2hh+s z#3XY<>CCQP!5EtbllO_8dW(s*W_ zf{6VLn+!H`f)`fjmbdFhrST)xpi-&uMDKDEe{i@7CvYM1R_Ib(RI9aGrAGJFcx>vt zDJ6Y5o}`H$*P?E4M^Fo@+$1tCl;+kclQ>ASpP)IrT+LIp{w8wr|M2Vd8Z99slV~0) z-4I3WLN}jj3&&1C6Yec9mZ#UW^OiTXa7ErxVr0r_%h>k-``SUA8 zTHtL6qGO(Q$_zXT9e??U&>DtFQrv9J8< zNTdR_3HGJ`*rC*Q>(Cd_@>J_YjK~Q%^f@$^cy8&QJ9zh3*lg^gczo8cJ-Q;)UtfAL`v^LHeFkML9op$3-oqMGefc5NT-Q^P ztIm7&F4kFK>`^Sm79V=-=_gLCXJ_I1Y;X=(0nP<0!74BWhQVrZ9#{j;2P5DDuojGh z3&BO;VsHsq2iAj2!DZlba0R#$Tm`NM*MKpw0c-@Dz-{1P=QEp2-V!G1j$CX%e3~J< z3I1Sb{@HO4%|F@&Q`1|vb%vn(J3~-fsNbg`%zH|=c{%)zwXNiTtctbX!J4!9y{wt) zALalIQ7P@|+t4^;XBd%F31V+S(_;-P$0)WBI*{`bzw&IM6J-R|?l=8wg{9aVe&c6# ztR)TDulv;rt!d)F7D4oyzu3{d8#>d{Z4p!Iu~+?Sk(AA}>}b8>SF7V!DYh3{v7cP; z#4vMFu7&EoTQ5V;<2!6+q|vn)d&yr6%Xhfv(;m-0l{NQ8=@G-SyzFJ?{p5Mm_RIa1*#0+ycfy063_CDyV^50rk_e zPyV_04&n2D`ey0V_UA^Pd1}CXdVJmOi$f;|YoA^?vcI`zz-Z7oHsypMC>=uslQn literal 0 HcmV?d00001 diff --git a/build/.ninja_log b/build/.ninja_log new file mode 100644 index 0000000..eae1a1e --- /dev/null +++ b/build/.ninja_log @@ -0,0 +1,4 @@ +# ninja log v5 +4 228 6749445182282233 CMakeFiles/c_template_DEVICE.dir/C_/Program_Files/PlaydateSDK/C_API/buildsupport/setup.c.obj e38c311519e902c3 +5 109 6749978027886999 CMakeFiles/c_template_DEVICE.dir/src/main.c.obj f39c622fce5e9e72 +110 228 6749978028628903 c_template_DEVICE 97fa6f5c91bbeda9 diff --git a/build/build.ninja b/build/build.ninja new file mode 100644 index 0000000..2bb35c6 --- /dev/null +++ b/build/build.ninja @@ -0,0 +1,154 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Ninja" Generator, CMake Version 3.23 + +# This file contains all the build statements describing the +# compilation DAG. + +# ============================================================================= +# Write statements declared in CMakeLists.txt: +# +# Which is the root file. +# ============================================================================= + +# ============================================================================= +# Project: c_template +# Configurations: Debug +# ============================================================================= + +############################################# +# Minimal version of Ninja required by this file + +ninja_required_version = 1.5 + + +############################################# +# Set configuration variable for custom commands. + +CONFIGURATION = Debug +# ============================================================================= +# Include auxiliary files. + + +############################################# +# Include rules file. + +include CMakeFiles/rules.ninja + +# ============================================================================= + +############################################# +# Logical path to working directory; prefix for absolute paths. + +cmake_ninja_workdir = C$:/Users/VBidolet.DEFO.000/Nextcloud/playdate_dev/template$ vsc/build/ +# ============================================================================= +# Object build statements for EXECUTABLE target c_template_DEVICE + + +############################################# +# Order-only phony target for c_template_DEVICE + +build cmake_object_order_depends_target_c_template_DEVICE: phony || CMakeFiles/c_template_DEVICE.dir + +build CMakeFiles/c_template_DEVICE.dir/C_/Program_Files/PlaydateSDK/C_API/buildsupport/setup.c.obj: C_COMPILER__c_template_DEVICE_Debug C$:/Program$ Files/PlaydateSDK/C_API/buildsupport/setup.c || cmake_object_order_depends_target_c_template_DEVICE + DEFINES = -DTARGET_EXTENSION=1 -DTARGET_PLAYDATE=1 + DEP_FILE = CMakeFiles\c_template_DEVICE.dir\C_\Program_Files\PlaydateSDK\C_API\buildsupport\setup.c.obj.d + FLAGS = -g -Wall -Wno-unknown-pragmas -O2 -mthumb -mcpu=cortex-m7 -mfloat-abi=hard -mfpu=fpv5-sp-d16 -D__FPU_USED=1 -falign-functions=16 -fomit-frame-pointer -gdwarf-2 -fverbose-asm -ffunction-sections -fdata-sections -std=gnu11 + INCLUDES = -I"C:/Program Files/PlaydateSDK/C_API" + OBJECT_DIR = CMakeFiles\c_template_DEVICE.dir + OBJECT_FILE_DIR = CMakeFiles\c_template_DEVICE.dir\C_\Program_Files\PlaydateSDK\C_API\buildsupport + +build CMakeFiles/c_template_DEVICE.dir/src/main.c.obj: C_COMPILER__c_template_DEVICE_Debug C$:/Users/VBidolet.DEFO.000/Nextcloud/playdate_dev/template$ vsc/src/main.c || cmake_object_order_depends_target_c_template_DEVICE + DEFINES = -DTARGET_EXTENSION=1 -DTARGET_PLAYDATE=1 + DEP_FILE = CMakeFiles\c_template_DEVICE.dir\src\main.c.obj.d + FLAGS = -g -Wall -Wno-unknown-pragmas -O2 -mthumb -mcpu=cortex-m7 -mfloat-abi=hard -mfpu=fpv5-sp-d16 -D__FPU_USED=1 -falign-functions=16 -fomit-frame-pointer -gdwarf-2 -fverbose-asm -ffunction-sections -fdata-sections -std=gnu11 + INCLUDES = -I"C:/Program Files/PlaydateSDK/C_API" + OBJECT_DIR = CMakeFiles\c_template_DEVICE.dir + OBJECT_FILE_DIR = CMakeFiles\c_template_DEVICE.dir\src + + +# ============================================================================= +# Link build statements for EXECUTABLE target c_template_DEVICE + + +############################################# +# Link the executable c_template_DEVICE + +build c_template_DEVICE: C_EXECUTABLE_LINKER__c_template_DEVICE_Debug CMakeFiles/c_template_DEVICE.dir/C_/Program_Files/PlaydateSDK/C_API/buildsupport/setup.c.obj CMakeFiles/c_template_DEVICE.dir/src/main.c.obj + FLAGS = -g + LINK_FLAGS = -mthumb -mcpu=cortex-m7 -mfloat-abi=hard -mfpu=fpv5-sp-d16 -D__FPU_USED=1 "-TC:/Program Files/PlaydateSDK/C_API/buildsupport/link_map.ld" -Wl,-Map=game.map,--cref,--gc-sections,--no-warn-mismatch + OBJECT_DIR = CMakeFiles\c_template_DEVICE.dir + POST_BUILD = cmd.exe /C "cd /D "C:\Users\VBidolet.DEFO.000\Nextcloud\playdate_dev\template vsc\build" && "C:\Users\VBidolet.DEFO.000\Nextcloud\playdate_dev\ARM_Toolchain\11.2 2022.02\bin\arm-none-eabi-objcopy.exe" -Obinary c_template_DEVICE "C:/Users/VBidolet.DEFO.000/Nextcloud/playdate_dev/template vsc/Source/pdex.bin" && cd /D "C:\Users\VBidolet.DEFO.000\Nextcloud\playdate_dev\template vsc" && "C:\Program Files\PlaydateSDK\bin\pdc" -sdkpath "C:/Program Files/PlaydateSDK" Source c_template.pdx" + PRE_LINK = cd . + TARGET_FILE = c_template_DEVICE + TARGET_PDB = c_template_DEVICE.dbg + + +############################################# +# Utility command for edit_cache + +build CMakeFiles/edit_cache.util: CUSTOM_COMMAND + COMMAND = cmd.exe /C "cd /D "C:\Users\VBidolet.DEFO.000\Nextcloud\playdate_dev\template vsc\build" && "C:\Program Files\CMake\bin\cmake-gui.exe" -S"C:\Users\VBidolet.DEFO.000\Nextcloud\playdate_dev\template vsc" -B"C:\Users\VBidolet.DEFO.000\Nextcloud\playdate_dev\template vsc\build"" + DESC = Running CMake cache editor... + pool = console + restat = 1 + +build edit_cache: phony CMakeFiles/edit_cache.util + + +############################################# +# Utility command for rebuild_cache + +build CMakeFiles/rebuild_cache.util: CUSTOM_COMMAND + COMMAND = cmd.exe /C "cd /D "C:\Users\VBidolet.DEFO.000\Nextcloud\playdate_dev\template vsc\build" && "C:\Program Files\CMake\bin\cmake.exe" --regenerate-during-build -S"C:\Users\VBidolet.DEFO.000\Nextcloud\playdate_dev\template vsc" -B"C:\Users\VBidolet.DEFO.000\Nextcloud\playdate_dev\template vsc\build"" + DESC = Running CMake to regenerate build system... + pool = console + restat = 1 + +build rebuild_cache: phony CMakeFiles/rebuild_cache.util + +# ============================================================================= +# Target aliases. + +# ============================================================================= +# Folder targets. + +# ============================================================================= + +############################################# +# Folder: C:/Users/VBidolet.DEFO.000/Nextcloud/playdate_dev/template vsc/build + +build all: phony c_template_DEVICE + +# ============================================================================= +# Built-in targets + + +############################################# +# Re-run CMake if any of its inputs changed. + +build build.ninja: RERUN_CMAKE | ../CMakeLists.txt C$:/Program$ Files/CMake/share/cmake-3.23/Modules/CMakeASMInformation.cmake C$:/Program$ Files/CMake/share/cmake-3.23/Modules/CMakeCInformation.cmake C$:/Program$ Files/CMake/share/cmake-3.23/Modules/CMakeCommonLanguageInclude.cmake C$:/Program$ Files/CMake/share/cmake-3.23/Modules/CMakeGenericSystem.cmake C$:/Program$ Files/CMake/share/cmake-3.23/Modules/CMakeInitializeConfigs.cmake C$:/Program$ Files/CMake/share/cmake-3.23/Modules/CMakeLanguageInformation.cmake C$:/Program$ Files/CMake/share/cmake-3.23/Modules/CMakeSystemSpecificInformation.cmake C$:/Program$ Files/CMake/share/cmake-3.23/Modules/CMakeSystemSpecificInitialize.cmake C$:/Program$ Files/CMake/share/cmake-3.23/Modules/Compiler/CMakeCommonCompilerMacros.cmake C$:/Program$ Files/CMake/share/cmake-3.23/Modules/Compiler/GNU-ASM.cmake C$:/Program$ Files/CMake/share/cmake-3.23/Modules/Compiler/GNU-C.cmake C$:/Program$ Files/CMake/share/cmake-3.23/Modules/Compiler/GNU.cmake C$:/Program$ Files/CMake/share/cmake-3.23/Modules/Platform/Generic.cmake C$:/Program$ Files/PlaydateSDK/C_API/buildsupport/arm_patched.cmake C$:/Program$ Files/PlaydateSDK/C_API/buildsupport/playdate.cmake C$:/Program$ Files/PlaydateSDK/C_API/buildsupport/playdate_game.cmake CMakeCache.txt CMakeFiles/3.23.1/CMakeASMCompiler.cmake CMakeFiles/3.23.1/CMakeCCompiler.cmake CMakeFiles/3.23.1/CMakeSystem.cmake + pool = console + + +############################################# +# A missing CMake input file is not an error. + +build ../CMakeLists.txt C$:/Program$ Files/CMake/share/cmake-3.23/Modules/CMakeASMInformation.cmake C$:/Program$ Files/CMake/share/cmake-3.23/Modules/CMakeCInformation.cmake C$:/Program$ Files/CMake/share/cmake-3.23/Modules/CMakeCommonLanguageInclude.cmake C$:/Program$ Files/CMake/share/cmake-3.23/Modules/CMakeGenericSystem.cmake C$:/Program$ Files/CMake/share/cmake-3.23/Modules/CMakeInitializeConfigs.cmake C$:/Program$ Files/CMake/share/cmake-3.23/Modules/CMakeLanguageInformation.cmake C$:/Program$ Files/CMake/share/cmake-3.23/Modules/CMakeSystemSpecificInformation.cmake C$:/Program$ Files/CMake/share/cmake-3.23/Modules/CMakeSystemSpecificInitialize.cmake C$:/Program$ Files/CMake/share/cmake-3.23/Modules/Compiler/CMakeCommonCompilerMacros.cmake C$:/Program$ Files/CMake/share/cmake-3.23/Modules/Compiler/GNU-ASM.cmake C$:/Program$ Files/CMake/share/cmake-3.23/Modules/Compiler/GNU-C.cmake C$:/Program$ Files/CMake/share/cmake-3.23/Modules/Compiler/GNU.cmake C$:/Program$ Files/CMake/share/cmake-3.23/Modules/Platform/Generic.cmake C$:/Program$ Files/PlaydateSDK/C_API/buildsupport/arm_patched.cmake C$:/Program$ Files/PlaydateSDK/C_API/buildsupport/playdate.cmake C$:/Program$ Files/PlaydateSDK/C_API/buildsupport/playdate_game.cmake CMakeCache.txt CMakeFiles/3.23.1/CMakeASMCompiler.cmake CMakeFiles/3.23.1/CMakeCCompiler.cmake CMakeFiles/3.23.1/CMakeSystem.cmake: phony + + +############################################# +# Clean all the built files. + +build clean: CLEAN + + +############################################# +# Print all primary targets available. + +build help: HELP + + +############################################# +# Make the all target the default. + +default all diff --git a/build/c_template_DEVICE b/build/c_template_DEVICE new file mode 100644 index 0000000000000000000000000000000000000000..5526f0e49807d43032d91042e17e6cc580f8b6c8 GIT binary patch literal 126124 zcmeFad7MrpT-;dr03UY-pxf_e9c_8yZ=7G!u znFlftWFE*oka-~UK<0tW1DOXh4`d$5Jdk-H^FZc-%mbMRG7n@P$UKmFAoD=xfy@J$ z2Qm+29>_e9c_8yZ=7G!unFlftWFE*oka-~UK<0tW1DOXh4`d$5Jdk-H^FZc-%mbMR zG7n@P$UKmFAoD=xfy@J$2Qm+29>_e9c_8yZ=7G!unFlftWFE*oka-~UK<0tW1DOXh z4`d$5Jdk-H^FZc-%mbMRG7n@P$UKmFAoD=xfy@J$2Qm+29>_e9c_8yZ=7G!unFlft zWFE*oka-~UK<0tW1DOXh4`d$5Jdk-H^FZc-%mbMRG7n@P$UKmFAoD=xfy@J$2Qm+2 z9>_e9c_8yZ=7G!unFlftWFE*oka-~UK<0tW1DOXh4`d$5Jdk-H^FZc-%mbMRG7n@P z$UKmFAoD=xfy@J$2Qm+29>_e9c_8yZ=7G!unFlftWFE*oka-~UK<0tW1DOXh4`d$5 zJdk-H^FZc-%mbMRG7n@P$UKmFAoD=xfy@J$2Qm+29>_e9c_8yZ=7G!unFlftWFE*o zka-~UK<0tW1DOXh4`d$5Jdk-H^FZc-%mbMRG7n@P$UKmFAoD=xfy@J$2Qm+29>_e9 zc_8yZ=7G!unFlftWFE*oka-~UK<0t}|9Idmlbib~en~@a?w7ab?)mbr@UBZHFP_pn zKXvzo3m4V4S+w86c>_7JQCl6l{{g%2GivgpeGk}w)WrSg?|#sNg$s9IZL3}O-G8;w zV^-U6(ZYEn7w>UE>V^E&V6)>kY&(CT^Pe2mJZX)&!{#=;GGW6fAb)F^ zd1cED*O^Vz&eg<_l;P(^!7UTCMWIw}i;wXS!cHd>!1vxVW*}_^IuQokb zbfxLGAqrc9is@te=G)B5roXA0L1xNE8?968nlfYS+N?#37Vb8Gmj(OQ_E@xE?ST2a z*Cy__4}QDNUvR+gyB%=ge!JI3j~==DYO8mzzWT`S)oWe5?6=Qqkc?h)*f7zI99^TX zd-UkhxhH06_j0+wd|1xq%2y7+9JQcB_}5^H7lyf9{*!zzXI5?N7E!pIqG9b2t<|;> zMGb|2p-@9ZX&@Y#za5F0-nJt(L1AtyL?56&vw1%bzac1Hwle;Nh3%nf2ul|M1wmoK zz6a#;Yjwcx{gs!i-Or%Oe~P9X+FDU(F25?;Y^b%a#r&O+G>mB7g89Fo`iAbxJm%L% z6%AYVS<3vOOrGs4)rGga0!R|% zi$NFCxSRxyb`f%Jwj=N%y!P7%_1*C9_+UAL&!HX zZ}L~rA@c^jL<#dI|2DG0?rk4X!o119gSLY`s$WyWyvcX01j(N5E)NOwCjV6g$@~EW zC}G~T9EfPE1$%|pK;)*g;f0llk(c>r0Pka878tnq1_JIIekCw;uj6m9$ZN}PbGSKJ z999CBP26WJ`=eyIz=}JUW%sl51-7}j8UgojI#OUY7Y;#Pt>#{&{6!HxQw&;>F9tUt zwT7LDsD$JR{Ao3e($7+9#2i$2VD!b{jk*E5BgN9V|4vkFfL%*#Tp4+5woWCHt`P+2u~*)GYDsj&Mui z(BK4LRk!69xQ7*Mc{n*8rFBP++HPcp?j9Q*ah}= zfr}m2PH>_9hrk2e_8iegOuIuCJQ(fE?eB!P#!tvI2V+S!2l&ZCVxhK|0h@*}~= z8+R4WFSn-&KFPSf==q;E{X+0k<342VKXVTVKGV1d+4xn>?+QNGxDz<7KX2)S(dIjs z8+S3M>KEZy!516%Cg=I;aA(1n8HbaATyU-1Tkw^}jiFzD%gI|jQm)rLZmO!ue-t=WLUxHKT_dZ~Ml=Y{j9#U~cmVHd2$oII>sHRqq(_xT&f0bTzSQ$L5;2FO%ol@g>jvCl z(qK9ad26`GXc0MX`EqB9?%CA3=U~$-M=dIU34ahJlD}4pabwbvdk6jz0v!N1DOJ^7 zp|0l94AuNgEZ2t>f4zpvnSuUs3CY3GS;H+Yq8a3y;!mp~;KsIs3wD6O8t!i@mWur_ z4~A4b#{EtzlQvP~Iili9;MTW7jn|3l4W#_ZYKb1u{{2<@_ox_HY$^OjVnu_fiO>(# zU| zWJ|bv&vL4Y!4WXfhPYvVKYY20e^AB~b(FqR8sS!|Gbg7gtT^JiB@Et?>KQBCU(XY)7nClxfm!p6T7lW{yq?g$m9SX@{_A$}i|uyq|fL#jnRfG?yHNLyJlF#Ja_~_kq~=3+?$|K%GAe z$JD~W{%<4S%)DtTHEfC!g~7(+aF{q8LvqP}I1-sY@1TdqLMqxzbdXQMNNnPG@;hh?B)p}QR?afLNJEW6{`kugp8i#BmD;&@&d+x(QkiaW*tuG##d zz&7_H98p-ypW; zur~-iz^%$oZskXGh})07n(e)DxN`{E!Z!XS2Pbg_2F!M%&UfM@?tc1mdyh}TNd^O@ z)i8n>6B0^taKY+W2!Te~PpFcFhl!P-`w|6;!HJMt!*G#pkBX}SDzX-e!CjJHE~bwl z-)fkDm*z}ht-2QgtT7mNBnf*1Wgm2{7?nEeYsFvz@;X|^PP(}th`conke(d}#;1z$T}b)UJ^y~@eAi!; zj&X4ogP+!I8A)o(CZpa3o~j!$zIqNKx;^%`{0x@XFwP>jjRxA0*Pb)nQt2q3}vCV@@NZFE!plj2VC;k@ivZeqziqF&II0oqU%CnLv6Q{`d{JSSiK03z5(eTOe-%B%ffpHstyS#Xb#dL)TVD>=*kc zjGDFv458R&IgxGaW5X!+YvQPKEze=UD;JxS{ZPV9!s02mHd4d=u5l<}rQ<`i(a;$* z9+WGt9I(}f&M=o}!D9bBTMAh?{}KDxUOfZ(X68-)1%^$>%9m5ZyeWspLH21tZE0}5 zr4cn)4oU9UmU4NnuHw-A&tV$UzTXmT33{Wc*i{^cWtlAIbSD2m(3qqj@7pAwzzg~0 zQkVzH9IpH1Ijrwu@;UaNQgS)AoG{n2JqjFM92@q9fxC*A^y9)ck>_|Hh69UhhYJM; zu7YNY>)Im)hVJiefaCpEQg(;3?D~F3OWZu{O2rL4thkRkvm1KjHn%rVM>cA{K&q;` zBe2gFH}>0Z&8>s36(@T**d0pGPVunI?T;(P;?(GRDLcY-Q@cs>kic%Y2PbyZWwIK8P$;CS~q-8!R*)7;QG!EHt3EqtFRxue;QE&X;s)dg@{ zaVrm}xi2|{S$4LRo#~!|n~Pi9`2uITdoUZt+4d-bbKH@1{5Jlod(aMUX~Y~_;3W*s z)5YKu=HUlz=S!f75c)E`6C5YK{77th?#Ag)n`lEGXY@$tf2a*lwe3`7kz`x5NHX8M~^DKrt5;#@2;g5b0SdkE>;BY z+F}8kWCr%KZSj1)AoM&)53gLXtL9cX4qGdXC41wLtEI- z1qQAKBPneeCOnLEhVCpJCQ4h`5dzC@11#y%tZ<6J#LdO&UTJH)o4|_uiZ#!UjuY7C zZa`p{=7by$Z%S^%(QWG=AJp7K)NbcD|G}8u=h1^m5?O(M!W^Wd27C_ zm+A3U%inO~I=*yt!duX8BTmh+j`@1a$E7W=ybQ;!(h`}Azzo1duiS!Nv2=o$bWm~% z8$Z!Y+9_GY@H$B)?GhfFG9FK{8%Qf<_ZWluR1Xt(B|~eehZXk;!{am$+uVZ;t<&xH zQnu>$W@w$^wKex|45oCZhlAZi*qcgcdD!JH9t?Q4ha(&}m(n?QKdGwQeZysOu02!W z828&E;Ca5GahUqo#fNJ{9WjA~{wxNo0a(KhiM(fbfNo>au?5xnP}xPqC)dTy;Zb1l zDx6mg4gtz@T1w0EY@+3-2>NpAqVRPn+(ej`eq!_R1E=UKoGp|t4MzzK+%cTM%fihC zhPm*kC}PdGNFzx&vl=$OE9XOiy8uWvtUFOMlH^%N3!idA&;6hna19g#3z6Eg6}6Rk z^0s3k?H}V}F>Gw~n_}2(j)yc^fcY@VNL1XA?0_vJNbbPUa7MTU+Hj@(j`&lqg>AM4 z#oZg!tt^4Vk)DrYVgIJ(bX8~I?qmy9uMOQKoZE!$9+n-Ssf8ULChn1efCD_NxF$AN z^RUg0#mt8TJ*?*P|3*NDgYsv>s%0q7A;yFw!oRXd-yoF3k;%W1XOHeeSHf;P8a`)_ z`r&vPj<#D04Bg)ln&IkpzQD4(hQ@2y;{+ydLj+$q#$F<@;tphg*DT*7u+3dG1aK|; zqQI(b2;n&Uxxkw1N8`0^pBmd8>==#VI^MX;y@n+puIu3lwgUai@a52B|e1pX$6g2Z0uwR#!2H5}deVuvXoGqnEOf&Z$f3gca7w zzI7EHqAGR~rA`*r9Z3086@v+?t?>u9xWs_rOm{`Jg7l%flwK35#y#T)`d90Ex>5CV z|IX{buIuSJ)w7Lsr|l1^k8a!8xGPYy6!VXV!U$87Y=NcHklc*z5f7cufZR6jxh{;# ziB0Sc$TS|3vn?Udl@Ljdhvsan2Z6f=tHf434Ba}|Eo~nU%enlk*oAH1{JyL$v^D#d zuWexO+6JYyj{~@OFfzNE;|UvA!cDkXup>PT+yLH67}Y_q@O0oWSWmV)x->^<8xL5Jv!m1T zxEE==dNW7C2f~waR&Lj5VJ90p+uYmuYsYwP&5eeY9V-sxL&!U^U)nW29GA=Q&91Lq zdkKYFn6KJ(LSFP}cgLsQMGr>j?E0yT09Vi14Ll6p8VD;p!M9m<-B^ouqKB1S{>N-& zO5=FcYt5EO<+L^8q)L*@_rJZ!ve>-ZjNYY568P-(NnwFcSJkEUCa^f+VrKs zN$z+C*>2u=s=JASKhHL;!U0Zmf35)TULGQFrabw!d)n~=XSo@yYQEh{;2d`qBV|F$ z0)acoQ**nQJzC&gc`j}j+GPUg$#ZeLkN3uW_Xm1oUwgA?7rJAxzuHCqhU;Q?2nYBh z`dp>L9PjqhH=Mv#+^lBYb&0`hAf0N7><` z$D`ks4Diu*ieNnYeTM7!Si75GJo?>^_Df{u^PPC~dk*V6QRX_|iATSjV*g7N70eeCLX znLSwWTgKgOftUOKzH8iZSe*7kd%Eb~H*P8Wdr@?y;E!+@m#fzrF389~VObsdid+>J zgGtEi6*AXZdO152d20@)M3N;r{3`}r{>5MqQF8J0Y$FgK2SKahp2CHc)^wp5b1kVc z4ZIXPVx_VpMX>!s&Q$hwY@JTxSX^E&rs0xzr~nsqo{PLc-HMvc>p;n7SnIhY#EQlXbvPt7 zVDH2>klbJ5g#{nk7jpSLHpHkc|4S6ew_UxLG@sMgfv*xsOmr04=rILs_RP;6aj2ry``LVd|6s^(! zP2`)IH!UxPx!jy+Y`ESCjAa4UYb7&~=U6tu8EZ7o&J`HAhf!O!wmn#2==8~S!fxck`dMjm#%zj7`o`Krb^$02O&yD?7vKiLkJs>ZulIayOY zoZvpK0Z#P|O>#%zbT8V(!>Miw$GfRrSISOvU$foK>@EUly5AE{vp*F$D;NF=F0PoV z7(y|49{FOhA@bJHnGwa1%n}LxDU$SZXb%z7uPWxkg!K^+=$zBXs#*dKROi-J^mkhQ z^~hU8r}oq%5rz^EiH;stUGLy}8`4&JK1Y|QwS6lk=s7LngR2z+Jo>APeUFBVn9liL z+tIJl<1{iSiq)}oE6H)Wr`yS7JD?O z`4)j?_ZiD>YyT_|?@=1S?d+EVD;lcXM~$Ocb6YNa0zGIobD-rfJxKim(qb?b5*-^` zj>N!U+RhUdCG15S7f02l?2I~t8=kz-lGc45RMz}~22!KE7bNg4%9x;S7Apo1Nd8VK z@nu>9@{f?$0N_BR9!UQUY0KZRflZ2b3I}$l+r`|L)se4n7rWR=0t0sw=W$oNy}(fS zhuy*-3oPsYFfTkyV4@qs?!IhAH-tUxuSDCX8^WIUQGr$U^8Dycfi>L_7TA9Z9IP9{ zULJP24(@4t+m_Mn7;?bOI=S7rIj6nyfyTS zmZ%@H(atO3-aRwV|RviJ1OUv2=?Gbl-@M&QqP=1ll05 zhJNWO0_#x_d^7WS;YMEWkB&6UAWM#B&BxfqMNJ6akZygCAOQ4Q+T zle3X$fUb*+l;{k5rNF>V1Ty`0@(;DF%l_VhslnQ3=U%k#GzmNzH#LVva?{{upwfh}lgQ%iJvnsWlvJPn#$*4Fau=BNr8dP=y|5tuDVqBcHCU zJIvpJlKBX%Tyj;yl{FN{sfJ{eJXh9Li0mNw3@fgX@KH-K;az;JtU*Ii-~IWUP&f}K z=c0$2>{xcN390T@(~#5KrIM3Gg6IL-%d!0j5>!EHes`{^hm)P8(s@X&IjUaasqjvZ z&vN-|IhVgnP8H*`#Q3LmWAR1)gI1V4(sZ4e+=5g)`BdGE7jf#&d<)m)qsbq{mapjL zUv-c?-u4kB&CHvYpJBhB7d;ssycR-hQ|u(s)9xhX8CpB@Ec6+Bp}@e6Lnubi*&79h zu9LMtZ@&{*)??obwlTbb>? z>fvCw4M+64oh4OuxodcId!ubHfg{|2X23VSw%Z*>7ry1SW89b)z<0u<#dw?>$3Fit zyiDMD*VzZ~U3-_n32slu|DW1k5;)0qAatVl?6(4^x&yc%-?yD>bAZ#__!{5`b{&B; z^=ST~_th*tntxD>F5#sS1|nV+lav93kcFi+oI`Cy z&Zi{KnZTd`l{K7IHSnA4P!Z3li!tIpT_t4+IDr@aV5DW^FwSFMU1wb+O_EYvC1_XKIy)-Wtxk zT6xb56EP=T#q}o8`~=Z)_Ep#WL}dp^^XD*Xzvws~`DW%#%MIAL+oG?+&meMN!b{QD zt-(6FE=LUo{Kl>%FmRK(0>1SSFVJH5i~eob5^dR?&(rnq><@nSpkn1qtJvqtcxp`LpVi|>AMdAHlyk`97k;IQG$c&L^`2t!m9;` zRavdhxaS3ztFl}hjr&$`Qr)F5?3;|OjAwn7>fYQ6k`%X9Wz%U+akVPzyT#aUv9DG4 z?u31-u~P&OuF6f2im|&1?yAaNkUr?2;1Sj4A+TS`gy#vy!^R^p(u&y=-6;lpA&)QO zkjLQwX+$w3`{R!~jKdOXuTZSVBP^GQCHDpnSS{-zr*q>2^ZL3aU7?osnpUuU1$t}f zpq~2BR2~9r=!af~edQ~Qjy_SH7q2N|x~8WlX$sX%7aiTCy55Un0i-&9x=r*PEAs6p ztqeicbo>IKnZR_kB9r(&>n1eZC1C4!4a8Nbvz@5f^Avmn= z#|av2`nvULU#{N9fE#M;8iJGR8$3B$#n{aSSE|<#cct~URbS{2Jlur4i@sVtlWTZY z(|WYvTJB1w53X*-9nMdp zu_k;(@VIIN`@g0MzZE<_7hVU?RLmn7UNN``d2D;gTSEs#6hrcYNazBQq#ph=1g#RA z^hRp@tr*iEYRt*iEAM*zpvqS0t)Z8CS>Kb)4H4BuIj)F@HA{;f=B3< zH$CldcUA7}&P?kYqY=7A+TU?ixgWZvu@_1C@m0Rt8*P=ApHTgRD`J)jZxj8b>ieC* zTc_ihnhPhuhZS*cF*qKB#!K)>#m#X1naFD}(P8R*fA{F8qT<}scWHsUk++84Q)3?+ z&x@E&RI$WGJwZbs!ay6MXVcnZgd+gcwAjd=W2oFIsC)-KM-Ko zuZy`dBd=Q^I{HtGtOSRoXKqU%)n3tms`t+tE{CA~DDFo)nvO>SnhDGRf7@XfW9){w zF6u&b=8_v2)5)=z`-bGfemMC^4#jR7Bz%LUkX#R&Vy=Bpp1vvhdNHH?N5-zS5$(&>ZP1BmKVw%D zoK)p}et*-pk>E=8G47)Wr1ovq)}g=$rnp+&m#6dxrR8hYzwp3*a9Vya-kn0j74r;I zd<}yB7lX%;w}u^zD2C)Uk+6#*iRd4QKM^r|s$zfES%APAc38#!gtH2Pp4hVQY1L~W z-#%d=1c#Z9*#ON1rehY4FO}$U6aEG=_2QAH^$CEw7mqUb4Z%TGu2haT_H)5uRW4PI zF}6HOy(rfz$C|c5f|Fdh0}LzXVWh=i6G`tyY7HxlD2Dtwk+4dUq(|g;Ma-I2?1%R? z#5z1SlGf3JeEUV*sg{`jV*#28Oh*^4FKf|>CVULC>c&MFoNSU;0XV#6EO3gk9}5nu zv$z$VYHYAE^V)0RwTdCc~vP*ltLw>JFSfxnP;XNl})~sSbybmDI;jxjl zjvVss3wf@7iCMW5pqaq5KU#q3Qq#UBMFggUFY7aTp!yy0&x{=-IIOP9W5ZR(ZYH=~<+rcV&rQoh!AZ5d2>eT9j}%;~?t>vl*BE=A z;I`^n9l+Nbd#&JVwIKlhm1(Y%-+Y|1&H=31S1ZXBO9nWKX9~|9m!o#LwdT!%-y45tD z3c!FYv%qb}{zPz~oA9rVy+ttIE#-XQp5k)#QC@T2VeI3gPpUWNf$ubJZwsze<%#8Q zQv0^*eLOhbmD*RUbBe%sr}ns;_$qo@F-uUq7(9Y}F*pi&YuKTPVo1&s3A-ecG@!2# zF?*t7@18p$Q1`G?X&uiZ-~K62bnY|Ne*iQSnD!b6c)xL_O<0P7uqtwqB;UL5=cD93 z6z&zdp!2(DGv zXMN9^(GLk8Tz#L1*5}Qb#|3v)&t>~BnC@o%10sqm2iv;5g zpNFY;Q(Uf|Nc<<$e4*%*>ZYvk&&J*;xKjN&1K_MsaCICHyMHll@pSgDtGXqZ?MG?(5!D}Y*?*kccUOPU@}H#kW2*f8Bl>HK z$5kiu-0Ra6Y+UO{LXZ}Cb(9;k2u#b^c}&2tL?<5q3eCYUDZLXzoB8sCxS;* zuVVfAhT;DZ++E$C_JszQ+nnPWqfuRKXs!t!SABuoY1rUb!T9RyTm?~sUj-AYxklhP z#gnT0^SaYD*bSxp)anf!e`AB)N$|Al1Kh@%8vJXeGj-LpG}w8f$D1ac13Xp21Qmnz zMlj_|4!9P>v)W?7M;SPLOkkQw?C{BGG2qiPJZ>A#l($v!QPg@&dAqS<9*}VQ7lzy_ zuRn2c(SO8Z5mLPRN1Y^}pj3L8ZkApR6$=if7a0i|aM03JNQ*%UJ!olyk85!`{1hVB z2jLSp`nQO4?vo*aO&$jBXt+0S_MeP~?#I|O;#U7&G(IT9786&jnaR0H++HVwrNezuj;Pl##AgeQP-XG{x%2R9hZWmTHDtuL7#WmIdyY0sU@gmTR=!|Ze zY)nR~HxFk)0at7Rsp{Ff>ggD$egpyNU?`@SAX!>BW@n<~)b0|oV}Hawu)C#h$8Kq* z*Q)WuV$AM|i(vdV^7#QR@JhexcgVLeKiKsT&)o{Lz2P?3-p)KdH45?MIyx>C7`Sd6 zIo*IkmkA8zqY786T_vzAv|n!Ez-t92ZWF9;H)z030xOLR58Nf^I@@m-*ygUm9Js+9 zzZF<@x3S$JLmm`ZLpS$K=mCCoRSZaqhtKSWGUe7$40yyT2K){mM__acuNhz{{<*jt zZu-o^J)eWQ|0LteIOj*3U=(KYXiDe*>^p^nDJ)CeP*+i9k-jZ$AZ zVK?9JNABsZG1T0v@UQ1H-2vTC`ApHW{5ubAdtSoc6sHZVDxaz8p*U?=t8F%l`~byi z!}PYr)bye_ZP>iuaU%MEp*U@Le`TInf(lhAP7g&MG^HZyp(%Y5Qqq*ZNJ~#s$~VUO`^wA3H~3ANv=9N^x4)H!Ncz^7}SYoE8>&tx}v87Kf{d zRw+&kKT6gUs1&D#{pS{I5Bjqo88;(JA4n-a>aw4^cortJ} z@eh&+q7^{*ofUrxJ?U(3}{83ekHeQ;m3A}K;tWtH2saI&?QWtH2saEcuxP`OPD zr{b$MY9|P{X|X^cw`t)_+Xn}dl-sm`Z`%bb zw`t+rrkw>Uw`t)#KLq7AEu7zUv}l#vw6Lt{e1XbsT3Bvx5~$p!g$wKl0+rjeaG}k` zY*)EW3l}vF7pUB(g-a?k1uC~`;ZnORV4d5va9QOD!N)7NY2k8vfna>#MsCx>Pn&KL zj1Sz%ZCd!5ds;9)a3i;A;i~3O1>*xZa+?-@-ZBtJ>^iq;;TPdV!T7-KO-y0o>QK2% z@qrt;O$*mL_0wm+rI$)UF89S@qyb( zIQ=NxL~5PewD4fKNc8x?johY%hh%1z+w@FSPz<=I zS;J)(U4VT767rnl^%hEaY=C4{k#Mo4TL^hh!E8VYk6y4L(Baw}XZ?IL0>y&iE- z4&@FJ1FpV^hZRW3b85}6DPaQ1r?O#@-VqOQD3>jbn~YYK(}E9(0hinN4gSOQT`}cS z?CH$+bKV_IFtUcr^!o-qwMx$0uOs$c$3JNAt@aWtuIC@Lk_v}$fRgw^e5b-1uKFJ= z^dI&Qi9NT4?>nS!3h#anD?L(h$G|%kNN!@&JaYFm1k3)=>sHRqq(_xT4$ov&Pr6b$ zLPgA>C=VvZVE4KKH<&b-PC(uo?lD?KX4jXySac*))*7FQ-r?N@FP+FdJUB`1N|EklHJf*!!0eM8RXY^bEDA}u;D1oYGjx=`0cEV=R;n{6 zvBHWYo>ao%6RDoD!u>VfXPS`5&00!U?3RYc_acQ5RSki;_LN(#7G!Ctwu8W*<`8P+@{5q@(1=R-p`QF@PFbqEw<-xfm*mtiv#otv%ea^*HHjtuw5@lCi*i`~&_$nzwQ+@{6R z;q?NQ+qAg4RrXTlHZ88

mrR$22`9#>#D49NYW{fy!-KT(kL~0+rjexRyV~Q*P7Z z+LqsLrrf5*bu8IiNP}_=4yEASn<7xTO^f5Ll9?*EX>t8%k!Y3Mw77wX%57Sl5dK)S z%57Sl7@j3ixlM~3d98Ar7AN_$MddavPPV@gW92q2PDx%6sNAN-smWIYmD>~)e4V%q zO}R~roBC5r{7?u1rVoLtf zR>M5WN+Tw)P~BSq);Rb%l0@PeH($^-e9$DyQBXkcEZYwA5a` z2>IrZP=j)tmO57c6(uj=7y@q7(jZHgNNs6wy`>Q~+yWbtJf$ruw`pl;{$`klwD;Vm z8==}#S8*(^4gRmVO-p0LPTU+3Zqw4Za6{xdUUHk3)(#I5sNANdb?qqvmD{v5-ftz! zZCYC2?`X(x%DZ1uC~`X|t#U&puLa)6(>&F#?s_v^1k>ra`z3i z+@_`Nn(r2<+@_`No1YgrU${+6JJ>%7RBqGKPWBst%57TOIqciU0V=m?X;(W^pmLj* zb_-_+JUkaNQgj`0jw8lb&u)Pg)di{QNocDo$&m$8cN2d~`yQgO7@Q(0Nf@kQTu6DJm{J&Y-AJfbW~@JtkwQ9hF zi;&sEip-_Ofb_y3)D~NwyK(x{CI%yqGkT=_rBc!l7lU;m!6rz#KO3Aa5>9fu$&u&O z8qTwNi~T~;!$iypj#w`w=5T!50%nY?&i>6QP*?gBN{^b0RC9RxlbkJIkkq< zFOsy!d@)pKj-jxEssRFPMpDe3EG^LvftHxDf-1eH8w07|UBebb($N1iZqu-TeijP% z4Z?v9e?ms~;jpu`9DR{}I2^3|a3cW4$HGa;WiC7Z6AVS%554>3m;`2jOuWP{S)%s@BV?< z2)D2X+a6iB$ZZ;K8CC@Nz`5tuMtmsvdD#Y+EVDF>#o^s`b4&5K_$7f%a}>l*;hn@FnEw zYjT^0hj@>W+msDbsVjq5mT91}xNw_>hvv^?eqAWTBbz=)-kKOU4z)~=uaw&~JUUqe zkNMc!t+1w`q8$hstdlp5>u(n}%n5I6}Bh!*lGB zQk8O>hUZ$omX4QMgxfSc&o@MFQ{{&xTWQ1u68aP0vH)1a4vBn)jbjVZu?5xnP}xVs z=hel`^>CXW47cWzUQ|HA}E<(h4?B;XWoQ@gSR4o6CEQ`^6Z=cL?n$Zcw?UaQ=u zw%tSJHnkldDz~W};GuGx+M0*TZE6R4=($bpp!~(?jdGjX5#iVD5xGt6$fSsidG_co zbj5bt^#m%nsU2;15~$p!c6H0|4e@z{aGTmS>=^=;+Z0bgekoA7P3@ZH#|0|4sa?yy zEl{~l?Ko>{tg0s5rgm*RP@r;~+I76Ka+}(9JydQ}JKjzdW4yXK90RGyBP|@?QNK>* zP~MA-! zRld}Dq9Ro(f2v|Ip~7A82e-JyfZH1^VyYrcvXbQ(#n1qQu^X4A@1ZmXPO4h$L{EMy(zww`o-I zP`OQ`J|22*)2MI$FxD1EHT#jTZD8-(2Bozrw`tUwe?;wv*y=!SeW(w3X?+zBJhy4o zmH!gzku zRTAYkjixs8G*-AxqfLe!1iMy4hn!k3A!obFZ5nMBu8mhvgxfTl?k}8_+ccVCH-(B@ z9=T1U&HY7}a+^joJydSfXv?PAVyxVz(N_M#Nx4m|3RdBGmD@Dh%^NGXX*AFF7p-!eM!T0s3si2?Xiqy;pmLi=^X<+8mD@C0 z&~l(avP%Ujw`sJ{ULjDqO{0ChH^obQ}lTBOK#KXXuFkQJo-bo^NH8A# zlG`*|A~Rp-HjPe{xvq1YMkmQ+*SSrjlYRd@w`sK0E|vQ5==UZrlGFO#Cm4@@$!!{) z?(u`lZ5o}Cye)b>`hAD`Gm{wmr2My*?~#xlO@Fbe!O~l-m?^M7;RScfPCKrqPA=Leamk+@>HTxZIXxAD(|Uxrkl_Hk*Ywf#d%a5-rS{?FEEI)VTnKml-RrN#r1 z$NzShO45hjYl)bvOzZFs&VZm*-ofIEOY7KOjJfF4*gqWlv52|&RO}slwurgv#MN@( zO^?1;i;infi+Gnl1c4s3x&G2-UlU`l5jEy<2;=;_7!z>0q{bF`kQ$_th&dQ@pT~b~ zDoPTSYE8^R%tH)PQF7_1viH64ZAC{uQq?hsB4oVA4RL^0Lo!nS)Sy1Iz3!{~2eMr_ zx)p=7r4ZwZi>23NIdAp5x}J-tm%gWFZ~2~Bl9rUe|7OV}KfZQ@RjY(Emzj3gS2eM& z;)+WjtL}h2;=gXp3s%&#pNP5Cv<`oAc`^k0oP?`RR4~2_d4IYUH=7TD{`cIbaa;a2 z6cBFHcxcrO$30~}A5(7Ac$LOhNURxvG-870K8L+>o5rh#iy#x?o_IBT3i3SRA*)9` z(q1J{xlQ9y;avii+cfUBuLuOU=@4Xa*AJ;Q(Boq?b%5wtk?MMf&6$vDJhSGsbJt3V z=Tk|<94g}H1Gv$TRJcv!HTwSr`QF^7@z`*a5f}@(P2;ta?U3hK$ZZ;rvkL_(w`sh# zJx-uPahmR&?~R z>Usy)$I!LP^EtXat<55j{V$cI!8Jg{bc$Bwd$gvA>74Ji4FY1wd}K}+tJCXNlH+nu zyLm2DI%YaHs^8I)D>nFKe@KPfG@e<#7x`Y?rtuc-&r#Bg+ce%P+cpndy+ce(S*R0&8 z@gfhE+caKmr%Blfxv&P0R1Dcm;YFEK(!Ao!Dx?v`kdx;WHvv;g>de^?=;YHOVyx#e zm>3q@r>>`m(#lRl-WqyEOVBu7Dp!b(E>d0Z6@3q+I-&GgTHC8qf^O@n4Nd<|#PpYn zxuVnP3L(X#@4C*f!EU+#^-sc+@|sQ_Fqy~xlQ9`cFi@|ZcVsNOZ$29c!Zw~3fzQLzuJ zCq>L|s#xZhk%F4u6F76$e<3-2O_Oyv2 zb0E;#IC4=zx(IpUHjOW>orQcaZqxYkCRVH5rty{GxG|Vva+}6i_1P79&M>)6_e6>AQpmLkWzw}VKP2+1kRBqGwS`U@mG``OMRLUy1X?(qh%556o7~L+~S}wdo zMnjTP{$x#lFTvnQ){5^>VPFlr7||9I@|@!NXDUfo^kE`q2gER4gJ(gYj$`X-9lt<6 zJrBOakhJmtjN3H6KmS`4&f|9rIM3Gf{4cwJ+{jMe#Hb; zP$1l<@x#epQt4u(7CJ5#KN%jk7D9{Mrt#D6T;v&A9U)M;P2=C&jRY#UY5bCh%556I?4fd-#;#CP|1rE)pmLkW@7hNM zDz|C;r?x)|RBqGwJ!{wI0F~P`e&3D~sNAOU2X?YR*Nz>CuW$sm~UFFbKnp`EoeL!mC9BLzSh9+^&gfR`3HJnv7@SE)FA|_p_ikX8o z*}cKE1kh?I;+%;Aq&W6+)PFOFUZ|x>XwH?l2j~?lVn7O2Ygl_kF(l+U#jK~2p3}B;gYFUowjo7Q z@g@-H{>0|e+U6oJ+@>+OO^*ZU&21Wk+jRcA_!yhqrZKop4+X$xB;2MkxJ^$LtlXwC zxJ_>rtlXwCxJ};_tlXwCxJ~VNmRD}m7~G~c!OCqKgWFWGa+~6IipR=r8iU((yx1$Z zX$)@DtpqE#X$)@DMS_*vGzPcnse+Z;GzPcn<%03B@nnp&V#r=v3=TpbXS~ScaDX(T z7!vZFs>3)ek@gD3dOX7NEV1O0=YZAnhoky8bxXQJE$cO{5dVLIr8RU&Pkm^r2?Fpr z)WuTRNBvOI(I;BOi#HT8UDH!jx`ekC9o?k5-izTtNOk;lo9H=K;{6B z+cXBZ>Gpz^+cXBZsn)05rZKopeT@oo5mwjd*wEb!ELJc%555h+f=b~ zo5tWay+X<>w`mM+(>nw!w`mM+(-#CQw`mM+Q@a7j1D=^X;hBng0mH=?@5p1@L*5#8 zIHDL5@|;>j7l=Qe%s}HS~uXb8_{{yBU?sP zX}!CMlzR((rKOg`9t94Dz#6(>1@YNZg6-2AX+2kqlqKmCE#L$2p1O*hqdj%W-2hEQ z;V%T(-D2@Nf>w`mM+(+31Aw`n}dxK{)#w`mM+(@zB}w`n}t*yf3>uTnjz zhWfy5x{6@sHjTk;y1roLHjTk;s(R%%jlpd?OZ3WZ8iU((kznOEji+G?6Rg~(F}O{& zzshYIgWFW=Q*P53+@{)JH`ZqsS- zVMSc4Os04V9zz#5!|@j*ufg;{DoyVbT_-BeJ^PXtcocd3f9|OyJ%GO{Vm7K1$N zNB?P&L5wmVU}r(9y`ukA@1HgN3IgFajlpgDB0!znRBk(f+qBPyxH{^JFw*}$w`mM+ z(^pZMa+}8BHhmVg2rFj{Zqs)F7}ex9jlpgD55dZ98iU(3M%&zH`4U+SZqq@6mD@B1 zx9Qq~mD@B1x9R4BmD@B1x2f7Iw`mM+Q^m?{8iU(Z%PY5O3~o~`57xp#=t#woy%b-A zp#Q~yG_2OJgAv7$ye|@VQ6v%l1M$B^%$8KlBPztr5Lm+oRqRhVyCBdLPPUy^y#eyV zZ5o5ybXS1h+@>+OO@9ZOdJ){FF9X!Q2yW941uM5{3~p01NxevJ)A$%;+XR=ZUzV8xKV6y!dVk~Y;ERv1wXIeAX;5-5s@Bt0U3Dq_~GVn4hR1Ufu6lGf3I zyl|Vw;5MBI(3{&d2Dj<&Aro%X7~H1s0dRQB+R$Ban|>u&xlLnmn_daba-!wm^G`|5ASn`b$Dzft)q;*aGS>9HXQ}fi`z5?x9Nry_2M>-!EO2l zWWsG4gWI(46df_SO=EDI4il{0rZKopCkR$<)A%Z5w-Kz|rZKop4-u@~rZKopPZ6x# zrZKopFBh!brt!7L-Y!_VO=EDIJ|$SWO=EDIsy%jzspw^^AzdkdEA0P+pu#s`NUdRi zBU(U0o>ObsW09msfKei5$5re%jmZ$Sn*EUSw?c`r(!h=o<4Gu$v_J#oIkkpe6iM2^ znIh)MRP1N$=MdpzeQfSO=EDIz75cu+cXBZ=?POYJ-3xH9pE-y2Ec$Mw`mM+ z)2jt5w`mM+(|ZLgw`mM+Q^m?{8iU*PCDALlX$)@Dj|D5YX$)>twO4M_7~H06uiU0F zxJ}g_cN5=3Pb=mu6bAu6^2Oj(QxlQ1n9&XbZ+@`G%=}~qq#xUb#(UaGQQ8Sh-DO zaGRRx?2mGr#^5&XD_FTrIX$)>t#ma3OgWFUwt~p1- zUHJb@(LA28%0z64JpMmZq!GoC&%z&FQXIBO)7Lll5Y>R;x!h%SmE<_d>Gt=H)O!pJ zaR0Mz#-K#y*NT|_(29MyJph3|F`#SGp8P?KIaoFJLHMZ{6L4IqaS3_hHjTk;Ivha9 zFo`D8y`I=mZqpdtrZ>+(RLpNi6oA`Qxl5JXGzPb+a+fN%X$)>tQ%3Z45 zrZKopmAh2AP2+D&mvWaXw`mM+Q{^sIZqpdtrpjHa+@>+OO_jS;xlLnmn<{sya+}8B zHdXFYPmnV{}~K=pxmbA za`+8I!fgtoPo)!3Zqss;hkt(ORiAiHg#c4mtofvZc}GHRBlrj zg->J1@`*FKO8K+tjsq zW92q=tud=rZd3MAxJ_LpzYp@|(5+<2Gpeojt+z^UQ`hF9=Qefy@_%F*yxwJJunf6P zUDday+@`L*K3H;_x{jEZ94tPBLQc3%-GF>w=E-g91||!U$BRx#@%|Iii2c?37s74o z28oGqo4U^AA~C;Q%x|K(ByYn%sD$YDB z#EU?0qcgf?vN0K{-aI7BD+aM6q^f7@s`s3wM?e5N7>em77?bBzjoF##46WjqV#of7 zdti5O-HzSTN^e)==fs%Z6BohwW8{U~w6R|`-U^-?&;oAL#{MB0ONHCCvAtc{OO@NS zv7H}_BI0e*B<3`mNH&+LXW<c{$VAXMNOJApPT9?4)RI(6#80X=)}PQRg8!Qz`J2 z2`r^=84!>jnlpV;0r=JCcFu#zN~z@K|EIlcjg9QO>t}3_)5N>ZZZ>J7hAQ4<^J=iY z-jpfSr}i>J)XIpnR}=A-mzm;P@pZPAfXn->jUD^fCLCiQPoO( z;8`R-6omK$2$g;)Dj)ceLWPh3mEZ4w9{0}dRthSW_`sFNbI&>ddmjJy|9{T4r3Nr> zb2WdDnoIImODjuNdBO7&s39CWRh6grm3rhe9B}DDP6S$A!3L;Dcp|*A^lmOVM>)pl z(I9Q3?tq%=*HQjud>(rpJ>7v$9-sKc3wM0|i7C{f7H^gw%(1pouTFkVse{KW*Cx=< z6MujPsl-68QoVDZgFSFYruPOK@Mld9{u=#M9vuQj4_u*Pn8m34Bg2nPp)oamSDsQ& z-jCwMiTWuw+9lI*Wz8$jS5ezEC} z`xO7I(_0=@EZuou<*_pr+}u@_@(fn5&RnR>%$UyDboOki?`Q79@=@^?HyA7Ko~pce zhTRtroqHS)eFp|Ue*rh|!HD-H14%;dfhz0yiQNigwSX!U0 znzK0YeO!E32}{qPnLxJ>6;&U5VRqxf^Jj>MhZic(pK-+Es#&Q@q}`uB4|e%~0{=VSr2Hq&{D{r}Dz|&#j2aJyI=k%*6EPS0K`lqRw|>>mK{~k5s@O zWW>jR9Pf=x-1W&7aMu&28vmVS0dio(itOaaz<+TuAV0lw7avyl;)BEmE~6Ud7QdjT zQ2$qZuAXX-dY;<(ssqCJC-Ly4`U(7=sQd?%Km`}7@u{?)y*bQun%z7;jKZY%LrV*n zFJHbH>sRv@3O5J6;4}B^PMR|t27mGf~D>viw=15YDm{O$IU@&~dc9;rCOI!7w9K^o;_Rmm_8M}Wd8BZG|8 zWvwLDhe?ozBU1njj6e(`op2?FesDHpG=kSTS(P+MEyA!jab z3uh+7aM7@4u7R)P#a#DM&h^}J)>_Qc*0;tb-$uTEQw;cRlAQllzE=Gpia|I4<* z9CLzHF-&i>ilQ&$9rSn|{R=&q(pT znBs+ryP@P|>a+!uOX&Q9=?GJQXLa@x2AQu;bFhom=?6LFMbnO{EL11wFzy+&-ZfW! z>jHmIOh3lG3H%_z%Nb{glMT^)xyT_46R z%Ks)z!)h>S(-OrX*-Eg-`h^&_vUFl%KvZ@E@q-LjlFNCvA(oP%C!7gH!EDU=b;D6j#PHO=URNM zd+6F?&#)4CVI82wgBcmVsbwb3{3IE`I)RJ8{HoQ{L25Y%lQs`+C%^-j9la`@=ybz) zNudhCBWqw)5VK&B?Ic1GJkg*TB?je22oEL@R>pWe_aHgZtgY+$UL>LiNiql|jWL5g zSjdDOZbtoRl!jblJ!nIKL^P}%fLR(XpgneIZ8nGSL7su!4Tf1~ot)49oKO}R2iDA_ z_6OiL?FAtZ4ttuyg6TM!Q1x0j)mU{&KDzH~>})skl#EBD z?k2##4lOCL{N*&I&d~WrpQ{9RNfsj@sNEUngJGU6Lt2kDNp3OPN(QIG`YS`w+mZGJ z*awqBWi^I}R3hwHa9T{=S{Y^d1ioZzM8G)mP8b%NW*uB0N=5K*hAVn2BZ3GgxvuJ{ z-I1Z8Ork+Yr$H}Ui-}-JG^CJ-Z<;5gLX}{u%e|A}G~3n06sNumKqXq0ni<4og!1l8jA3q#G>$P8UmfPoW_4q$Cw^fI7QKpP!Fh7 zC^sM`NVS@Rrzk~0Iv2Tfbi{d-wSPUzTb&iqb2o@VMl`RcL2NWZR*N#Tcvi6uY9Ve# zJ=lnn!Lf!yrzvJ5O3LyL*8pRbb-XU}wk0^plO*rdl9PBGvzgF~=*G-bjZVtS8AU91 zwG+g#?q#I$0L0-)?zWQ*d!b<_;nC|sZ>X2^4cN<90jRr%pQ-h*>^&|}bytRYp2YhD zkwVMlU18>z^y#jK7J_wvST#;F7!%9o)Fwi_t2zh=9f(tdLQ>YFTS=U#E|rI;rl_>C zhVOT25-1`G6bxE`Mi6Ty$U(_duwo06ESiMe(l9n$ByKOIf(NZFK8S~{A;eV7FJ;oI zchnm*gC&S3!KH|Bi=#jxH>=%%@1Wo$q^Cw+v*lhAw@Gandn$Gv&b2y$I1a0r7Dz<1 zhi|U&D&(ggWEpyQB=^f6lOO0?ZD~v^+5}&T!y^2%J?!=13a8y#l;%(}C6Wrggrw_9 z3fibH-2$+*-hO#!*O)YCb+BryY{461OvOas5Ifqf*EYfOLm+lP?#5(9AblBbOq3(w zE`$WNRMxO;);$r`Xw{!_#e_XXGKIKKN-+M5@aM-F+!{Kn)_z$Oy{&OR);GglE@Us^ zeKR=`v^k(A$aZ50BZ?W3k>Ny|1qn9EI`shNDKs{B)uJrhh>d0d z8n!lS8x|EXD%->U;jQFvbad~Coh|1%nG+#LbJZ^-*C6Z|CuEMHApzp5){W?QjTlbm%HUVeTC36t3L>xV8+fXw#FF%!0?ob8-fZT9krk z991i)LU|E*8JyB3(Km>X-`nBj|E6BPm)srj|ueDxtuG%f~K{gwvDP#)l zWAsqr7~4TPIZ;$b&!8w8V3iJJNr2&1s~D~^oC4#vF86wF^_b;8BL~s4&bT*P0Zg1* znJgAONHgShU>&MXm;*?4HHvpgQindI+*zk#)H8H>fjOtzATnSlqDSjhjKce#+|fcCqmoKZ{ zFcb&KlFVy#(bDwqKy5g@g9$WiO&bXCs z&QI;p!Q~uY?41reFX=QU^I$>Fr8Zgw09cP@Tr6DFLLv7#!AeF!7Io}ZqR93NuZ2+<<9nDk+rxD-xYD6Gf7lMD?O?~^22()Aw;whsaLyBCHRU>9k&ra zM%i_Q+;mTthhdc1WkL>%0NjY@o=*EwOwXg$(XB4Ej<+Qvp;x9PhqzG#?%I0^$dDn_ zQr+cN3ocHY7~hd9JJs#NY4@FBJ&*+Bdb?O-FO6VE(F?r|36DXktt1Pg7FTOIpR}ij zyv3|oEx#WhS^v!=ZoyKS!dxAJzr?S>T)ppalnH8Xpl6K$+`29B{KR%- zswp`DIKRy%hli?1;slwFLbsr{fou>LDB-}eP}q9O;0`JgXH1(BfL58{=(@Gj9W&6G>tj7WYE35ko5& zPfXk{#`PAyyT7;ojQ6-DtZS4gN4p9MMI_Ry3|o4=7i8ETlzH1|)kdL`M=qjJqeD0?k-@U#u_p2Rn1!=mMaTqkk5Qmd%Mnqm zBhx;aOpz%6^ZfSjgQZiE z7!1$cDw+yccT~CgtcNp?9`73n9;s|eV5bl)Re-hI_9wC~^D1XWc4@OnA>#}g;|@B9 zfK05bE%dvc@`Z>c>0VNo6aaXSfteCHNB)R;ed{@u;~I2k>_s6FCXMq9d_v&>$aG11 zZzO3?CTNgbXn^+xgCGVd_C&?*m{6B#CQRFPOR*qIE-K z*}8~FN*Ok6SRggCrI9-k3x|g{bsK`terZB%Smjgx^_}YosQPNzW^^5$gbCpQj7G3y z)@jH1oTSWcbV!i4H!?Z{(%jZY&K%loN?r(IymbltHrj}`bXK0KkyctmusXI6(4CF$ zi0v)dZKR~>ut@&M#<+y4rKe@14Vmy7sBr4o?>guK3+;`VBoHytU5$vL-3E`4V)Pbp z+X6F+t3g#R#)HZN!-?csZY-I-`r0++)TJ?d+#G_}=fN34y zQyWjT0+2C}&mkGTOKm`9UW8)xoq7kEMzQzQC?p{n)`ZnqyD{krL98Fx#F2_YCu%_j z_uy%i`>I9lD2MsrI9pK|5lPaeiHgvjj82pWaiKK`Zdk(TOUFyGSCa3A5| zAW>@E={%*yL?1TSCDK$*Qo_MENh%XniRSn7z#!uF5LI>uQF*&0=rD@hV?U#sZ;C6& z9EkN}U_1oaM!sXv)~Hg48^U7Q%z&&^ekb;zGg(VrINEOrM(n3&z9U!sg=w=O%km;w{KwM+-0{dw8A-xfbd(g#j-^3zowxbmrvtN_M6zYkexV_xmibkMI<0k zhVTe5F`5K!t=sW-C0=d0lNLU@vWYFfnciJ)tZr=hum*F2@v?+P-hT~lCzK}omO&(q z<@9aC?z>^5YsAh8km(4E;@mvhK`7_f7wg1{L3<#=93RM`E-g!<7n`;SK@|EMOm}WJ zp*Ptt<;VML&^Kk5S=da6k{v=91tQ z$_alISCA=er!*)KCMZr+8FzqfqCsUt!KjH54-81Rxhiw4gf`(uly^!(S+A8{ZZTL~ z`%Wwx(xdZO4hx|_w>jpxbCWq!QLN%{d1u_Q6bukFmt=E@D$5NRlktt5%JF0`AJc8Gy6>ab(ZFThR;vP}GDqBo-{X}2iY z-@+NtMSDUKiADOS^j;kf}m3ZuyDb(i3>s$6P$3_%HZy=KTIQ zbAKQ9XalP)#IOK`zi@wZ*p7@uJQ=|FA7js41BraAV=|e;LvK zx-VB%fby?-_^QDFQK|g|?T)|Q`tdJj4p5EjPW55@c4cx8`*-q$m)6v8qWl-W|7q#} zE583}^*OYE-S+4D|EE&_e~5NhX8**$n-A&3vU{H8as0CVz>hbfzEmp9zkWg4U8Ki9 zqu|!V_5ByhZhV&cr-RGoOJn6{QFi=s4)C8wnfx$?e$J!3G1h(!Ww)O56L+fbLm99Z zzM?v%_H$U@G0M;y2k1`S1Ah4s%9LNze?@&1Wn8}eGb7L6seTpZbC$o^-|wKz`MUZ2 z9?IlbSN;sj@zK1h`;g`7a5>Dl$d9;wIOF8di+*w0x zEj!*=MSYgzROLbozS!E;=KAjP)>?CA?Zu64Y#||QY*TX0yx)W;gA^~|!lc>mC5J(; z86sBCn!)f@#ME?rkpy2@x;;em2*>)G65HY67IH6etB`SThQogUR3&nrd*L#kEmgxi zjPj9Zns$b3+cnIO?qdlcL$_2P_Uk zn+;L7*(MVyj`@zCr3KE|wb?!`Z>8dW-w=5i;zp^3?6jW;hxpD@^WAZGExzQmAoG#m z3%4bWX}S%~OvCLdXWB|wH{&c=CNa(8x;gi8fs0WKz=c{^-rZWjjzbz9BHxBG_@GZO z4--Vn0cgR-ro9gi4^w^YOW0^^^9che8%6dWi}uyXaM{{Xc$qI{;LTnS01%?0Cd~r} zEWvL2i}J?sq`=cI*8#?xBSQj(YVCz|EoTE(iBnRG_bct0&xLSHL&N;`If5 zc<2B{I zgZsOG7^R1Udvpx$>wvo*KNH?~?`Gu9FIUv>!ab+|_!2%u(K&o*&#esMPO1O=N36pQ VhO)b*XIzH++*d2=Dc4wn`)_Fr(?9?K literal 0 HcmV?d00001 diff --git a/src/main.c b/src/main.c new file mode 100644 index 0000000..a3d80d3 --- /dev/null +++ b/src/main.c @@ -0,0 +1,59 @@ +// +// main.c +// Extension +// +// Created by Dave Hayden on 7/30/14. +// Copyright (c) 2014 Panic, Inc. All rights reserved. +// + +#include +#include + +#include "pd_api.h" + +static PlaydateAPI *pd = NULL; +static LCDFont *font; + +#define TEXT_WIDTH 86 +#define TEXT_HEIGHT 16 + +int x = (LCD_COLUMNS - TEXT_WIDTH) / 2; +int y = (LCD_ROWS - TEXT_HEIGHT) / 2; +int dx = 1; +int dy = 2; + +static int buttonstatus(int button) {} + +static int update(__attribute__((unused)) void *ud) +{ + pd->graphics->setDrawMode(kDrawModeFillWhite); + pd->graphics->drawText("Hello World!", strlen("Hello World!"), kASCIIEncoding, x, y); + pd->graphics->setDrawMode(kDrawModeFillBlack); + x += dx; + y += dy; + + if (x < 0 || x > LCD_COLUMNS - TEXT_WIDTH) + dx = -dx; + + if (y < 0 || y > LCD_ROWS - TEXT_HEIGHT) + dy = -dy; + + pd->graphics->drawText("Hello World!", strlen("Hello World!"), kASCIIEncoding, x, y); + pd->system->drawFPS(0, 0); + + return 1; +} + +int eventHandler(PlaydateAPI *playdate, PDSystemEvent event, __attribute__((unused)) uint32_t arg) +{ + if (event == kEventInit) + { + pd = playdate; + pd->display->setRefreshRate(0); + pd->system->setUpdateCallback(update, NULL); + + font = pd->graphics->loadFont("/System/Fonts/Asheville-Sans-14-Bold.pft", NULL); + } + + return 0; +} \ No newline at end of file