From dd88ecddc1d3fcbef4abc95a22466c0478bead25 Mon Sep 17 00:00:00 2001 From: Julia <145168563+julia-aph@users.noreply.github.com> Date: Fri, 10 May 2024 02:38:08 -0500 Subject: [PATCH] ty tyuuyt --- .vscode/c_cpp_properties.json | 22 -- .vscode/settings.json | 63 ------ build.py | 193 +++++++++++------- checksums.txt | 2 +- debug.exe | Bin 0 -> 88287 bytes errors.txt | 1 + hi.exe | Bin 65720 -> 0 bytes objects/ctrl.o | Bin 4825 -> 2686 bytes objects/dictionary.o | Bin 0 -> 2389 bytes objects/event.o | Bin 0 -> 1458 bytes objects/fumocommon.o | Bin 0 -> 1487 bytes objects/fumoengine.o | Bin 0 -> 2397 bytes objects/fumotris.o | Bin 0 -> 2075 bytes objects/gametime.o | Bin 1217 -> 0 bytes objects/input.o | Bin 1519 -> 3062 bytes objects/main.o | Bin 3089 -> 0 bytes objects/parseinput.o | Bin 0 -> 1295 bytes objects/ringbuffer.o | Bin 0 -> 2108 bytes objects/term.o | Bin 2369 -> 0 bytes objects/terminal.o | Bin 0 -> 2764 bytes objects/tetr.o | Bin 1800 -> 2002 bytes objects/vector.o | Bin 0 -> 1444 bytes objects/win.o | Bin 1239 -> 4094 bytes objects/winhandler.o | Bin 3667 -> 0 bytes silly.exe | Bin 67171 -> 0 bytes source/fumoengine/input/ctrl.c | 40 ++-- source/fumoengine/input/ctrl.h | 36 +--- source/fumoengine/input/input.h | 26 ++- .../fumoengine/input/platforms/parseinput.c | 29 +-- source/fumotris/fumotris.c | 10 +- source/fumotris/fumotris.h | 80 ++++++-- test.exe | Bin 88290 -> 0 bytes 32 files changed, 236 insertions(+), 266 deletions(-) delete mode 100644 .vscode/c_cpp_properties.json delete mode 100644 .vscode/settings.json create mode 100644 debug.exe create mode 100644 errors.txt delete mode 100644 hi.exe create mode 100644 objects/dictionary.o create mode 100644 objects/event.o create mode 100644 objects/fumocommon.o create mode 100644 objects/fumoengine.o create mode 100644 objects/fumotris.o delete mode 100644 objects/gametime.o delete mode 100644 objects/main.o create mode 100644 objects/parseinput.o create mode 100644 objects/ringbuffer.o delete mode 100644 objects/term.o create mode 100644 objects/terminal.o create mode 100644 objects/vector.o delete mode 100644 objects/winhandler.o delete mode 100644 silly.exe delete mode 100644 test.exe diff --git a/.vscode/c_cpp_properties.json b/.vscode/c_cpp_properties.json deleted file mode 100644 index ae83481..0000000 --- a/.vscode/c_cpp_properties.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "configurations": [ - { - "name": "Win32", - "includePath": [ - "${workspaceFolder}/**", - "${workspaceFolder}/source/fumoengine/input" - ], - "defines": [ - "_DEBUG", - "UNICODE", - "_UNICODE" - ], - "windowsSdkVersion": "10.0.22000.0", - "compilerPath": "C:/mingw64/bin/gcc.exe", - "cStandard": "c17", - "cppStandard": "c++17", - "intelliSenseMode": "windows-gcc-x64" - } - ], - "version": 4 -} \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json deleted file mode 100644 index 94cdde1..0000000 --- a/.vscode/settings.json +++ /dev/null @@ -1,63 +0,0 @@ -{ - "files.associations": { - "pthread.h": "c", - "fumotris.h": "c", - "string.h": "c", - "input.h": "c", - "stdint.h": "c", - "iso646.h": "c", - "win.h": "c", - "array": "cpp", - "deque": "cpp", - "string": "cpp", - "unordered_map": "cpp", - "vector": "cpp", - "string_view": "cpp", - "atomic": "cpp", - "bit": "cpp", - "*.tcc": "cpp", - "cctype": "cpp", - "clocale": "cpp", - "cmath": "cpp", - "compare": "cpp", - "concepts": "cpp", - "cstdarg": "cpp", - "cstddef": "cpp", - "cstdint": "cpp", - "cstdio": "cpp", - "cstdlib": "cpp", - "cwchar": "cpp", - "cwctype": "cpp", - "exception": "cpp", - "algorithm": "cpp", - "functional": "cpp", - "iterator": "cpp", - "memory": "cpp", - "memory_resource": "cpp", - "numeric": "cpp", - "optional": "cpp", - "random": "cpp", - "system_error": "cpp", - "tuple": "cpp", - "type_traits": "cpp", - "utility": "cpp", - "initializer_list": "cpp", - "iosfwd": "cpp", - "limits": "cpp", - "new": "cpp", - "numbers": "cpp", - "ostream": "cpp", - "stdexcept": "cpp", - "streambuf": "cpp", - "typeinfo": "cpp", - "execution": "cpp", - "stdbool.h": "c", - "gametime.h": "c", - "stdlib.h": "c", - "stdio.h": "c", - "platform.h": "c", - "ringbuffer.h": "c", - "fumoengine.h": "c", - "fumocommon.h": "c" - } -} \ No newline at end of file diff --git a/build.py b/build.py index 23b9c28..b509c0d 100644 --- a/build.py +++ b/build.py @@ -1,94 +1,139 @@ -import os, sys -import json, hashlib +import hashlib +import json +import subprocess +from pathlib import Path -def walk_source(path): - source_paths = [] - subdirs = [] - - for dirpath, dirnames, filenames in os.walk(path): - source_paths += [os.path.join(dirpath, f) for f in filenames if f.endswith(".c")] - subdirs.append(dirpath) - - return (source_paths, subdirs) +GCC = "gcc" +ARGS = "-fdiagnostics-color -pthread -Wall -std=c17 -pedantic" -def get_checksums(source_files): - checksums = {} - - for path in source_files: - with open(path, "rb") as source_file: - source = source_file.read() - - checksum = hashlib.md5(source).hexdigest() - checksums[path] = checksum - - return checksums +SOURCE_DIR = Path("source/") +OBJECT_DIR = Path("objects/") +OUTPUT = Path("debug") -def read_checksum_file(): - checksums = {} - - if not os.path.exists("checksums.txt"): - return checksums - - with open("checksums.txt", "rb") as checksum_file: - checksums = json.loads(checksum_file.read()) - - return checksums +CHECKSUMS = Path("checksums.txt") +ERRORS = Path("errors.txt") -def write_checksum_file(checksums): - with open("checksums.txt", "w+") as checksum_file: - checksum_file.write(json.dumps(checksums)) +def disk_scan_chksms(sources: list[Path]) -> list[str]: + chksms: list[str] = [] + + for source in sources: + with open(source, "rb") as file: + raw = file.read() + chksms.append(hashlib.md5(raw).hexdigest()) + + return chksms -def get_object_names(path): - object_names = [] +def disk_read_chksms(txt: Path) -> tuple[list[Path], list[str]]: + sources: list[Path] + chksms: list[str] - for file in os.listdir(path): - if os.path.isfile(os.path.join(path, file)): - name = os.path.splitext(os.path.basename(file))[0] + if not txt.exists(): + return ([], []) - object_names.append(name) + with open(txt, "rb") as file: + zipped: dict[str, str] = json.loads(file.read()) - return object_names + sources, chksms = [Path(key) for key in zipped.keys()], zipped.values() + + return (sources, chksms) -def build(source_path, obj_path, out_path, recompile = False): - source_paths, subdirs = walk_source(source_path) +def disk_write_chksms(txt: Path, sources: list[Path], chksms: list[str]) -> None: + zipped = {str(source): chksm for source, chksm in zip(sources, chksms)} - if recompile: - result = os.system(f"gcc {' '.join(source_paths)} -I {' -I '.join(subdirs)} -o {out_path} -pthread -Wall -std=c17 -pedantic") - print(result) - return + with open(txt, "w+") as file: + file.write(json.dumps(zipped)) - checksums_before = read_checksum_file() - checksums_now = get_checksums(source_paths) - - object_names = get_object_names(obj_path) - compile_list = [] - - for path in checksums_now: - name = os.path.splitext(os.path.basename(path))[0] - - if path not in checksums_before or checksums_before[path] != checksums_now[path] or name not in object_names: - compile_list.append(path) - - if name in object_names: - object_names.remove(name) - - for object_name in object_names: - os.remove(f"{obj_path}\\{object_name}.o") - - for path in compile_list: - name = os.path.splitext(os.path.basename(path))[0] - - os.system(f"gcc -c {path} -I {' -I '.join(subdirs)} -o {obj_path}\\{name}.o -pthread -Wall -std=c17 -pedantic") - - write_checksum_file(checksums_now) - print(os.system(f"gcc {obj_path}\\*.o -o {out_path} -pthread -Wall -std=c17 -pedantic -g")) +def filter_chksms(sources, chksms, old_chksms) -> list[Path]: + difs = set(chksms).difference(old_chksms) + return [sources[chksms.index(dif)] for dif in difs] -build(sys.argv[1], sys.argv[2], sys.argv[3], True) \ No newline at end of file +def scan_sources(source_dir: Path) -> tuple[list[Path], list[Path]]: + sources = [source for source in source_dir.rglob("*.c")] + chksms = disk_scan_chksms(sources) + + old_sources, old_chksms = disk_read_chksms(CHECKSUMS) + updated_sources = filter_chksms(sources, chksms, old_chksms) + + disk_write_chksms(CHECKSUMS, sources, chksms) + return (updated_sources, sources) + + +def clean_objects(object_dir: Path, sources: list[Path]) -> None: + objects: list[Path] = [object for object in object_dir.rglob("*.o")] + + object_stems = [object.stem for object in objects] + source_stems = [source.stem for source in sources] + + for stem in set(object_stems).difference(source_stems): + objects[object_stems.index(stem)].unlink() + + +def compile(source: Path, includes: list[Path], object_dir: Path): + include_arg: str = " ".join(f"-I {dir}" for dir in includes) + output: Path = object_dir / source.with_suffix(".o").name + + args = f"{GCC} -c {source} {ARGS} {include_arg} -o {output}" + + return subprocess.Popen(args, stderr=subprocess.PIPE) + + +def disk_read_errors(txt: Path) -> dict[str, str]: + if not txt.exists(): + return {} + + with open(txt, "rb") as file: + return json.loads(file.read()) + + +def disk_write_errors(txt: Path, errs: dict[str, str]): + with open(txt, "w+") as file: + file.write(json.dumps(errs)) + + +def wait_compile_tasks(tasks, updated_sources) -> dict[str, str]: + errors = disk_read_errors(ERRORS) + + for task, source in zip(tasks, updated_sources): + out, err = task.communicate() + if err: + errors[str(source)] = err.decode("utf-8") + else: + errors[str(source)] = False + + disk_write_errors(ERRORS, errors) + return errors + + +def link(object_dir: Path, output: Path) -> None: + subprocess.run(f"{GCC} -g {object_dir}/*.o {ARGS} -o {output}") + + +def build(source_dir: Path, object_dir: Path, output: Path): + updated_sources, all_sources = scan_sources(source_dir) + includes = [path for path in source_dir.rglob("*") if path.is_dir()] + + + tasks = [] + for source in updated_sources: + tasks.append(compile(source, includes, object_dir)) + + errors = wait_compile_tasks(tasks, updated_sources).values() + + print("\n".join(err for err in errors if err is not False).strip("\n")) + + + clean_objects(object_dir, all_sources) + link(object_dir, output) + print(f"Compiled: {len(updated_sources)} Linked: {len(all_sources)}") + + +if __name__ == "__main__": + build(SOURCE_DIR, OBJECT_DIR, OUTPUT) \ No newline at end of file diff --git a/checksums.txt b/checksums.txt index 49259eb..42d39ab 100644 --- a/checksums.txt +++ b/checksums.txt @@ -1 +1 @@ -{"source\\main.c": "82d4037af47edc6a1ef16f061e8980c2", "source\\game\\gametime.c": "40eedcb0dd0e0ebd42a09860aeb24517", "source\\game\\tetr.c": "fee38bad904b2053644fddf0ba08cd5e", "source\\io\\ctrl.c": "a838d22152710a4be156b5c90c41863c", "source\\io\\input.c": "aca98b0ac5983206b3fad774dc4d6146", "source\\io\\term.c": "b8fa47ec18810973c2123e7ec3a3cec6", "source\\io\\platforms\\win.c": "5f8d684bbaae885edf7505a1d90d91e8", "source\\io\\platforms\\winhandler.c": "b0c21fa0370350172987a3ec39be1d20"} \ No newline at end of file +{"source\\fumoengine\\fumocommon.c": "3253ec40842eaf2b65cca13826e35118", "source\\fumoengine\\fumoengine.c": "e6c26dc323b01d0b8c2e7e2f64833eb7", "source\\fumoengine\\include\\dictionary.c": "aa85678a01e035d45c9f59b6fe917beb", "source\\fumoengine\\include\\event.c": "71e6818ecf285293cf01c791f13c4d00", "source\\fumoengine\\include\\ringbuffer.c": "306556649cea951ef769cdfc5ae2b60d", "source\\fumoengine\\include\\vector.c": "67e0cf60c3a359e6e8c8eb46e01e8513", "source\\fumoengine\\input\\ctrl.c": "87dbff7e38fc406cbf309717e63665ed", "source\\fumoengine\\input\\input.c": "5a57ebd313fc2fc0246a95ce6641e5e8", "source\\fumoengine\\input\\platforms\\parseinput.c": "c1562355adcec7d0dcb0a81e8d7ffcca", "source\\fumoengine\\input\\platforms\\win.c": "2014fc5cdb4c8770f510a63db779f8bf", "source\\fumoengine\\terminal\\terminal.c": "c213e73df14b8d5ebcf5f25d221c3fe6", "source\\fumotris\\fumotris.c": "defad533a34d69352e728dbda3306a79", "source\\fumotris\\tetr.c": "09dcf3a7119ccabe0cb69c0a8fd688e9"} \ No newline at end of file diff --git a/debug.exe b/debug.exe new file mode 100644 index 0000000000000000000000000000000000000000..15cf36511b81ad10f0f9d85c466178d678a6faa1 GIT binary patch literal 88287 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 literal 0 HcmV?d00001 diff --git a/errors.txt b/errors.txt new file mode 100644 index 0000000..57fad7c --- /dev/null +++ b/errors.txt @@ -0,0 +1 @@ +{"source\\fumoengine\\input\\platforms\\parseinput.c": false, "source\\fumoengine\\terminal\\terminal.c": false, "source\\fumoengine\\fumoengine.c": "In file included from \u001b[01m\u001b[Ksource\\fumoengine\\fumoengine.h:7\u001b[m\u001b[K,\n from \u001b[01m\u001b[Ksource\\fumoengine\\fumoengine.c:1\u001b[m\u001b[K:\n\u001b[01m\u001b[Ksource\\fumoengine\\include/vector.h:25:2:\u001b[m\u001b[K \u001b[01;31m\u001b[Kerror: \u001b[m\u001b[Kexpected '\u001b[01m\u001b[K;\u001b[m\u001b[K' before '\u001b[01m\u001b[K_Bool\u001b[m\u001b[K'\n 25 | g\n | \u001b[01;31m\u001b[K^\u001b[m\u001b[K\n | \u001b[32m\u001b[K;\u001b[m\u001b[K\n", "source\\fumoengine\\include\\vector.c": "In file included from \u001b[01m\u001b[Ksource\\fumoengine\\include\\vector.c:1\u001b[m\u001b[K:\n\u001b[01m\u001b[Ksource\\fumoengine\\include\\vector.h:25:2:\u001b[m\u001b[K \u001b[01;31m\u001b[Kerror: \u001b[m\u001b[Kexpected '\u001b[01m\u001b[K;\u001b[m\u001b[K' before '\u001b[01m\u001b[K_Bool\u001b[m\u001b[K'\n 25 | g\n | \u001b[01;31m\u001b[K^\u001b[m\u001b[K\n | \u001b[32m\u001b[K;\u001b[m\u001b[K\n", "source\\fumoengine\\include\\event.c": false, "source\\fumoengine\\fumocommon.c": false, "source\\fumoengine\\include\\ringbuffer.c": false, "source\\fumoengine\\input\\platforms\\win.c": false, "source\\fumotris\\fumotris.c": "In file included from \u001b[01m\u001b[Ksource\\fumoengine/fumoengine.h:7\u001b[m\u001b[K,\n from \u001b[01m\u001b[Ksource\\fumotris\\fumotris.h:2\u001b[m\u001b[K,\n from \u001b[01m\u001b[Ksource\\fumotris\\fumotris.c:1\u001b[m\u001b[K:\n\u001b[01m\u001b[Ksource\\fumoengine\\include/vector.h:25:2:\u001b[m\u001b[K \u001b[01;31m\u001b[Kerror: \u001b[m\u001b[Kexpected '\u001b[01m\u001b[K;\u001b[m\u001b[K' before '\u001b[01m\u001b[K_Bool\u001b[m\u001b[K'\n 25 | g\n | \u001b[01;31m\u001b[K^\u001b[m\u001b[K\n | \u001b[32m\u001b[K;\u001b[m\u001b[K\n", "source\\fumotris\\tetr.c": false, "source\\fumoengine\\input\\input.c": false, "source\\fumoengine\\input\\ctrl.c": false, "source\\fumoengine\\include\\dictionary.c": false} \ No newline at end of file diff --git a/hi.exe b/hi.exe deleted file mode 100644 index c6fb070c202a361cbad2f78d6622789f75354c02..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 65720 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 Y#>~wZ(#BO0)+M&sOS;Kg(l~|w4}CB$#{d8T literal 4825 zcmb7IZ)jWB6~D4%M@d@brCrcQ*1aqlxL~VFmZtXFY_j9G+@x`*HB%C3JXyBnT8m<9 z(i3$;LY=4%z9<5-b)~Qt%IMf1GUgA(HeqzK7iN=B&bKo1!3z`=><=z0t5!UFzjLp2 z^(33Fd+>D6{hf2qJ^$``PcM3N2czq44`bh!l#BVS*r+9G^%L01SgV7v2al=wUJM2c z_W7a_D`Jz|jtsD1!PlQoZ^yG^VI3J}@1o3Yu)m8>6w zluOmhk-i6zvtO_;@XQfA!dMW~TV-D>9Fhy2JIk-HHa9TF^S2Lx&Aox^96H_wpj7;T&M`<8h0#trkQ8DaL8QGnd|YwFCX21MM!$C=mE&H z=9)uFK5u$ci;&^jyN2G$FP6l;K@n=6Fuk4`vw09}J=3Ol!rXw#>vvq_keDkDkT==8 zek?o#14ns2aWDxhVQHx4v@rdrMNd1nY3FmxE-vOlwwx48cgR{=FUMS{or@(%G{9^O zP9^ByDroYmp1>CNf>|PcE6*VcrFxBX*t%3*-9lUCLVoVJ$3@VMaFi$Mr3pW?%-I!uo?;;l*DLaqU z^5bk6<}7Vvzdv;&dNH-3cx z0Y@daiEU6Nxd3id%-lm4xm-;$l%kTlMWLHAZ5m=}0#0HHqy^TP&7PT%F(`sANl%Ab zCW1|qWvi+ddHHAXg`(T6vijL4sA4V_wf%^YvcGOG4^*PI43xpm|7>mw^V6L9DQv~w zyQ->WJtI11>5+7pQcHee)q@QbpD+l6t6Tydv7 zb}}Aro)1#4p#zD}nMg@!nTuwb>6NRr&NCBm4R)AD=9_Xh9cXGdTQYm>!gQ)veh8$b z)#cnMI-BLnP$Y~FW&RXwoiBb!Hg}jM&-h_wk(Vz}2AQg}?A<_Z+{9A1m`8fNlpX^i zGY~Q_96Gc9B|^3m!QMJvw-IG~ysZ5;U%i>VRbP$FPMWNAPp&v7|8F1vPW!;e%#E#1 zp~g{nbx!rbDb>`<+4@{%w#2j7N-VQOWrlJEUjjI+vf-$nD65MU&Z#=~ip830<~f;U z6crB6Je`|=Bic3RriFkl=O$=iKP(G)%j-U`Uw6K4U8VX^P*|7`tyRnK6J!hM8b_7F zgpGPtH?~(5Qa0qd7hSg~)h$sK{Tk{fOww2^YivM0);RT6oyM_io6OoLSEz`r$xwF8 zSHk;MlnO9t%)N|44!UQl#1ZRiMSi*D9aClYzmsQcBA)4h`;CJ2b#z07oQ`A=H(HnI zge^a6Ucqb&#|sVx$m^L_ITrV`|8QX9%0ArKd2b@<+OAzy>VbOP7L{_dZB~^R$-d~# z1s}t%&9XCov4-rbZhq3MMmN18;PfK0XbY&4Y@uDx%g?VzzgJ9pS~aRip_f{>K>47A z5UK`LT0zn?%rgTDJu`pGi^6z|>P#Sq*=t2+^;YB|o-H|F|3S9YaP67#g0&-Ca#&BU z9Mvg@NpYOHl~y}4M+j0w=1*T+4Qi%Unk>gXe0?oWu)~f+j=`) z(N!-~!7DoIN1HsQuaACk_2IsUySY3%acuU1rtvJILfwVNKjEg=Ng7vi2SC%f*NMo1 zrtu}bSHWdD9>7!l0%#g7+(V#gTyDY$n#MzTMIQrA*NjJSYCqOr7ZFrG-n zqL8zLHPRLN{`hcoi@XB0Jn0PgU$l(<$Bf}jB9XLGj6~`&X$CuS{P=f`mY(?ViF0k| zjvg^a+mD8i9%;)Aq^!2&NIE{+mW~az8vU7g!ZP|V8(pc`z>sB}i3~?$sdTH6diH7K z(06=?eSW2{1G)JYNEhqZ)OAf=MOMBcxi>X632MK@K0po>_d`uBf>PX7jr~hg44G2g z=Rm2ootk=4bA`r!p{aK@_Ym@TKw8kLsi%<7gA(&;3RCt3ZYR8}P*}jeCNcW+qPSGA zih5FWy&9tmR$N1KX(xrXXsT6nDYS}9Rj#OZ&3!>*0ZnylF4x#;P0=|}Hvd>-^u$$~ z>0~HwpT?q^8q(Z^#*&({GD}LQ}UicT!_-YU*vxeMe*OY3hB={hh{c zYide!KhW5$rv9wCbP!{h(Y3M3*sG568CH<~#ou;$Iheud?V$eRku-%#_Ae?n8!hUwhfVWWasM6!7b>5%Sr-VxUbx z<_|Ue%4D!iz{9F!(prH~KazaC0#HRs`sX#sZ!uFg9lUbo3PbUn z98PAeuFT+IEX9UUZ{c_}Hf%9Uet0AmradGb8I7k|hCbfJ!WUzgE2JI%>B!}@6(6{0 n-ys~1UrL6!xH>2NP5*P diff --git a/objects/dictionary.o b/objects/dictionary.o new file mode 100644 index 0000000000000000000000000000000000000000..d97e0b01811d9eb29266ed9a263954414acf22eb GIT binary patch literal 2389 zcmb7GO=ufO6rR=+d~~n^}!Uty;*SnfJ~2zL|OR zW_DM#&nFm_-(X%AD8Vwm+wldK&03tXgu&QXN!dr2nXI^$sg?b*rW*%sR=k<1v|8hQ zI`=8*I-?UdAgCpD6=OEb+L`94t^>(E=)RBQdlh}sot_;XTSS*fnt=!L*(Dx4;JqW8 z2Zc!2O>rzTot|FU8>?pIH@^{hv{7Jats>kBMpr zT*w0FsJC~-{8Z>1o&UcG!$E|@OQG_HQ!z#EDHZReM0WV&KX73EoZt)nL7JT4Aj;Gy z6qCN;k?C;A)>BV;Ys@zH|DtVvcC-CTK6I=Q*C;xfLU8c5JhLw#p@WgpTptu86;GzT zMBKmwDDasGCt^uL#y{T>*?rWLk^K%fjY{@5 zsu|f|VJ%d$i+EzQk-ZQ67BJb}7#?I`vOlA~2TXPqFT*w9i%U!AOsi1ezPLKGIyY-} z=I5@=&Cax|oildB3 z@3it#c#@-6t3>n4OSzJqtx!&RDSOhJSE#7Gluzlsq|gV-yQa9BLYvClP+U_XUwJd@ z^~T^vJUM1;!>HA(etl=V>~%9$$f9y8vIa9*44EEROpr8}&UnI$lE^M=d{7`lH$rUHg;p=9*$Hfr@+ zW2ZV`a5`+=a|cHXnwTwjtJ>`9nvc=Rc=S(UYIk>+EqQL)cXR6K*#*p@b?bN(JK|uP a-cH5Ukh|6NyP`joUx1tqyDP4*uk|;Xt^)i3 literal 0 HcmV?d00001 diff --git a/objects/event.o b/objects/event.o new file mode 100644 index 0000000000000000000000000000000000000000..888b9b6334b078faff6746ac8cc601d2af6995e5 GIT binary patch literal 1458 zcmZ`(O=}ZD7@qBJ+l49yzbNQo4izFaYud)riifRb?Nm}&tg#0vnvabwrm1W;B^CrB zAcRn;|G6M8I%C(R zW-u%8YJt?%^igBXz<2@-2`!wtFRVf~$V$)olg-?HD_5zUk5G|!gsb%zOd|AYpg+@Q zN!xn;Kkhqle#q|vQV4e^)t~FaG(t=_0)BQzG=7TuA6qn*VxJif`ir8X;dDg(ZHHBd z_sBkpi>4D3%}hr$us}VuO$k(bECyo_*-X^G*{cU(RZdk^CQ7zs>0KZ=5X;zgM(mWv zk^ljiiKiP*5@0TxuBlc#CT71@(~;3S9+b=^h$%X%D%@=lZbyWdR8pp`2%{)*cZm&8 zH<3&G*rwPK8ba9rkttfoMq1m48J9^JFmuiBsb-!<$0EitFdh|$PKUa1l0rR{Mp^9A z`e6v|NHS_VZM9iDJk%)KFn4++>P`pyQVuxGIvxMZE;S~(da&CsnyC+(zM*UQfKs0f z^%3Llh(44XNNTS1KURLC^OPnCtu+j~6SOAqfkwmi1N1TI3-j~$czkKSys(m3nNIQA z%=Gi=RHB;qgTzL@n5cMb<2+YgF9kgJhClGV{93@5v*m*4SH`(Nb(>F2S(6rBS1Fe< zU%@cg2Ii|$JHUKRYM9tChK_hwqkD8w`iQ5B(sfcARZvl4u6#EmjYm;Bi;Bi0Z9Ixv z#r2X0i{$SqV=pyt%PR*~Ub&+AQmAQ+vjMu!XUGlssIwBo9I7){C{TZuhf;1~P`8z* z_f4Uqx<=ja{~3GV6Z-A-Gj{KNODOwHOwT()J=V48)4)>F`-Tj{r7+a}ewheOdL?yj zu|EiFBU>tMMlD3gSkd>oZAP3tzSj#P&wWHJpI))C?d@$g4@BU}HnN9ESDKs`%UheT Hyk77>OQ8P7 literal 0 HcmV?d00001 diff --git a/objects/fumocommon.o b/objects/fumocommon.o new file mode 100644 index 0000000000000000000000000000000000000000..d921a204b7cb230d5aed52bff3c675e3fb6b8c08 GIT binary patch literal 1487 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 literal 0 HcmV?d00001 diff --git a/objects/gametime.o b/objects/gametime.o deleted file mode 100644 index 82eb46f1f839a2d1fef021e79c38c17861a213a6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1217 zcmZ`(&1(};5TEUCHG;4as^s9|9Rk*ptg(%u6ohCAS&>3eL%h^AA1~=blZM?bra6dE z5JC`&M^FA8UQE@4f(8Exp@)KDPo9i3?`_gen-0v!oB7Sm%erj~v2U2NkjfhE z^SB}6-Us))f(ZiWOyi>HUkEVcns~qLo%Hx5bpcg;2CiuKew+Iz%_kQj#+5=x-LXKXi z0>1v@i?2UFteg7l0gBcD3#KLonXg~Ne%MpQjwwZUJP@Qr)cMG=rYiUYg#9FB2Y$*~ zB!NVF5BX}KKcJ2w6Y-;?2hsw_udlDM#SOcaFC|NvH0!KptV}w&TXno-d&jjqNtbUW zSY_AV_E=?)J#=_=%VST=tr~aS1at1)W_MSNWg{gk-bA&4tidKqdKC>0P|^%EWPnS^ zs<5RM!86@b6;k>rPg+zcZNPziJ?t7B_p&iVs;A6{XEfZiRhn0RUQlbthg0&$W^*O@zBH`;Ys$3ce`Dn hM{wJ`YBjhQ_FIwGpakAyZp03G-oHW~^OetoZ+>E>I!hrA8 zy9j_`7OjM)^La1pmx^d-cmoE(>_~vIpX_z(c)W0E!D|-=_8cN6FXNy z$-e6%lb`=mzfLv&QE5CmxCVV4I^tW^NNUd2x!`H z#JZ(gKT!HYxw?w6%K?RKM%E(Mk4~e2=t%UiLj8~l(I?;%w%k(Clo5vxKj*TRt1u(hdLx8ZzjB`@eT(73C5kR0xx6Gm9G z8b+@Oqb*wV6Tar{;d0>ne|L9lcm=M4F@s%T-n0wV`b}NlR#a;wsICkKZ_>6U*Y&WI z8bqz{9@xq@Qmzy+l}E3NNcQz}CVi=E$}vWUM{5Fpd5}u_>wPK&eT7OzLBDXI)N; zI`V)cH^_m8u6kL59}ww(U<~_}y*SQuaQK)b&RftGz&JPK?=N7SHR!#7alQt%qLPEd2O~`nJ(yQQ<=V~^ch-W)>OvgnWSdq z+ZE&VN#)e(P*^PvKgn9)xB)GQ$Jww_* z0V#x@g55kzXc*8jLd$@T6Z#TRE1{c!o+I=(Af7=8c6)-jHvsX-9|GdJd=BV&(!xNT z#2N%b?s4ccWbGi-;(s!kJs~)(KDTQYTD(1+!#p@rgckGVT$@06Ry;D6lxy){3`cl+ zT>Glv!U7ElZ78LuHIT49++}P=(lfb&8A@uC#XagGQSYlO*RSv`wFR)W{ey0Ode)o#Qh2xk0&Sf v47fV+DVUd`eKIGdF*BRnFQufGH;wE?5$HS=LkJW#ug_%SX;+eG3nu#y3;i%_ literal 1519 zcmZux&ubGw6rSy-8bxdnf3)gh4n-82HMX@B^{}*rZq-7tl!~;({Mg#9%O-55H1<@e zh*5(5Bm4_I6!g?m&)&WDB6tv*gNP^N_hxptyEG5pn{VFx=FQugeN%mNnvs0c8M`V` ziW$Og3W=4;XpD_OfA^{RSqz*No*UJYD8+capvek*M!C`G6^r|}i03C0au6N_dxl)( zGmU1FH;mxY30}@L>L+EN9*xm($1;fIgncS1=c>)(>m@mua=;GS>Ti z#%ksNVuUilj)G?h+K{+{DPHSN>D2eJA3`#?pCgS@jr!(8yf86e$>~_0fr~tX=j?CEw@m5NX%PPWmxkQxsShTd>pY~I_h69!ONequFOzaQA5*oil z&jq7~vl#@QnV!DKZ_YX1%wl$NVw^W8CyEo}+4YJqvh`ZSX=WSt>Ig5dJFej6SA5F1 zE31Ofm%OU&H%7RB_ZGi1W{es+B!i4WFG5qyf~DP3jPCrBM9*L^OSA@iMWQCG;%xyb z-a8=0`vydHrr00YA&FqvDX0!_i0B^AOCRM@(M*J>A{C`vDtbLaJc=4Cj%#B^@~_L- z3(fKB>%yogS7ZkQq@h>)=r8Lb*Wja5mmC?t0ZVtFJn@%+Qs^4p3HAT6#9skw8okF} z@fU!auO}zg{d8u!cHwxF0L43>+DO-^_mdLudU=YHL%p7q;Add;{^{DIWH6ZBkGwcT zR`(rGtb{J|*i9$)P?BdFy-=vRu40jgWKKo=d?nu~`1!`3Uz#-B;Z}FO3I*Ik1>s`VkZYmG+*uc4O5qBy z`JA#jDa_CwY*B=rX7{8VJ3JRApPggzEo1ob@UVE1hdmcD($JKWY@d`Q&vQ${B^Syc z%L5MgxWO%>S>(fzv31&V*)HjbZ-%;Zg%s$PsHkI&TsmBBTM)q%zVIz&sJMCy zx%S<;NI))%N54%Oj}jFX21SID;}AuZa^bagBp3NmE^#84T@|{_I##hU@9)jl`~FW~ zJ_wET+^z7w2(s2G*q{IAUr_5%2L|YnLtV`1_Ha=j-zTf$vy*QS5s%N`p(%-6-dwa7 z5{RW>IT(O$LeX}r+ zd53@c39YqPT;>8Q)#d+G`yNtGv$AFd4+^qD@{g=6O){-86<0hzK!H`j7rVM%Rs((U z;4^RqDaT7l-V)BXHx345JDG>B6B8<5oA2YOm)PoV`;+XE!E z6F^e?p`-m0h`Q@%Ujv;I=vScA0{sP~3RI4pOH>E+jNk%5&k1xM=n;V~06i9#4sL?U+YiN@0r+Bd{*Gn3jRUK=)L+q`2Fj#u2nz$=!Xu_^NE z(ld$vR3afcJB}0BiDTGK4)f75=B9^vUAsoXi=3USFKRzWV$xH(^TsRP^tLAs2`e6E z1CpGN`q|l8H=NLBBC*t{mSu!S;>po0i%!S0MN&Y?Mk0~e_(WEph)iY~N*&ZPlbusz zjLyF3bk}$^Q{?pw)jX()b1>yLgu`G;nhqgX>RNUv8rNA7_auP_^k_!!N#dgH)l@tw F(SP$LY}x<- diff --git a/objects/parseinput.o b/objects/parseinput.o new file mode 100644 index 0000000000000000000000000000000000000000..e9bae1fa60dfa3ec39adf68a5f6bcca5fdbd14a1 GIT binary patch literal 1295 zcmZ`(-%Hz26h3LsJG-$$mGC;%(Y#TVl5ju zI!1#G{9|P9(dolp{S)>wDEL3PopaO0#MT4%-0zR#kF=z#Mnfe? zYJC2bxQ6|i*eSmJIT8EuAGBjvU7niSmnmiZ98C5G%6|rhdcU83Qx8c|>YWLwqW)YJ zhU{o>z=CXE;Fe;fN(8IWPHbHqdnQPc2}u;xyJqCVGC4GwKj4@i&L=p>anSq*zbJw8 zT0Xzbl4Y~8wwd0{Wm#t__coVJw`-P@eqS@vw!WKU)wa3ku<8L@we;Gq!`3T}x^CGi zW-UHqPZs5jOvlEzDMTVj=siTwzsF;An!FgjhlghUEWM8xd*CDHXXpJ`(nl#jD;wsX zjw`b3zW_Tzt76%@*=V&Lx#q>m$A(Y<1`*oTTlQM7)Sq=sn|jANJU@q?I(ZX$h%4%& z7YW{SDk=)p->?O5I2{aegaHt|-L&mvIf0u^Jr)IqK5W5TJ%K4vpbet#hb=Q)(tk@7 uUWAjlTEQV(^oN-5cDq2$S#3K`v%%rZ=7H^)wRfQ9*E1VUZR7b;ko^yO7~Q7; literal 0 HcmV?d00001 diff --git a/objects/ringbuffer.o b/objects/ringbuffer.o new file mode 100644 index 0000000000000000000000000000000000000000..4c928c27e9df791b8aa5dbfbec95f6c6f61e090f GIT binary patch literal 2108 zcma)7&rcIU6rODhX@rD^pmH#A515ol*D8b%^ss^(212y~Dkg?te=N{I8{BRU;Dv<5 zWYdt47;hf@3-oF{37Y5;ZyvpvkjMcq+Kb@#X13cc^uVMu^S$rAdGp?z=}zuNE2Gwq zsav2B(`<9i7FZ6EAY&ngv2cr&X;NA8iIz*-X`fv)sI%lpEmJBr)A_kgvRi9(n1n%B z$Zy4%&f>bZ+GsZelN{`Z-S{p-Cc7I0jcdu@`!oKMdWt(g`PN~CI|=ku_oQQ}ykc~7 z$EaeC@Ctr3>0#dS4mxEIa+NFleCu;$?vq&Wu9b#KTF}iajQ8$wXWup1I*gy$qLK{5 z)OCqf91-k)pt$+p-v|Z)B+yfEW<M5!F2wk_^PM|;2O{)}0Sm^rlL|CZ?nHJF zZ}hPjuzsozC^v&!L^^>^$#(MIZ=O5HIO1Q7D!KlZhDYdOh7;Is51gvaOUlAA4&1WQ zIo8UyCRIO(LZK-S!Ut|uMc`XTl|rua+s2Xg3dr5+NS-;a1Z@njj9*7k4qXHkNaUwC zPjAvmP`S`)DLm}T8u^oY2o1FIepPF3alh)BkdIm>Z~uuT&!5Q~8GtWnIuwvcI2Xjd z)6kS~uqE6X3M%-+D4{?LA;C?#9O-MgEp)9d*g6u3yEc~3#>G@wodz@=J&WG%&UDqg z&}oj~8>71OGH@R-%@YB}hJa}f;9GPLcx-fZSdAv~#j)Ag?BIa9HZ(XtI1npmEjw1o zF2qXaQlFYB=T~esv#yRxx?%9YQE<@Q#`iwanTtP2gBR@Odz&bVpfZDzUZlph?27dI29@zfC8UB` z$gZx}Xw+H2XElNmvk6JF=q>Eo*w|oGIIIzISVm#hUiZmkrtOpN)9YS0zMISWq!}w+ XEaAL;)Pu6^-=>f+&X-I14U_!`^@hW6 literal 0 HcmV?d00001 diff --git a/objects/term.o b/objects/term.o deleted file mode 100644 index 5c22ee19568071dc266e028f547d38b67290d99f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2369 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 literal 1800 zcmZuyL2naB6rRDRb%3yr)T*mChdtzA)MT5|5QQG96=B6l;A&NpA{8P?oK0h4;%L25 z)0|L@DpspXIdb4Xz{%q1hKizIFo;7=Ra&W%qaf8sA1cE4X2#B%cqH$9@4au{y!qbl zc=4AH8I7sqjD0Lon%SYh9!jhqDaJ-QW3SW724oiVZrO|T;e3+U2RqEG+Y6OSpHPqM zF7eiT6OMo}s`u=W9X9URt4Dbrcz}vKf-Rr}f716(< z`es~2`K*X$%`1^>iP$xT@dzN=2F@-S|J98lW(+x5{3x6iao!YBMne#V!jXp%!qwl$ z=bq}^PA9kc!);SFd*4897%gdhMutquXw$aZv?X{$L~fHJu`?_R4WPE*RFElRqLK$O zQxu*9VZn33>uTAqVj&jK?h5`&d3Soe)otF5$W$Wsa$qz;Hfro%eT|N?^Nf+R@r<3> zKdtQR%AUgnMskf&tBVKXSNYBvwRHBr`@*QXFRHtS6mlne`P<)VqvrAIKgPhH_dTAB zHjYF^)opRL3lrzvma+Nz?ZE-OZS8e3aJP-k$8c|LL3F1pI$EL{dJzr180B*v@sZDr zz2Vr+LEs0FxV5*9J}9>tyOwr0_wH)9J|o0ex`a1WO>*~EW$>`VW^m$(?CC?b6!OTP zwp33^S!_tn=?I7B=%i}pzQ484aS}RW)os!_P1)iGAxg)$Q6maRs`GBs*!Zq| z|3Ai<37k27a`42!DcmY*T$-N#+REjNE0?Z~U7MV+)~62Zz+it%D^6! zKB`OkvR(91H%gVN=x`TV-Kf1(Ecvi#yggv-M;`iNU>B6<@M&nsnZ=HgoPEZp@R3%M zBjcZI)(4oCOjAIlrQ#%SXiA#mq-}5dVuj2z4w0e=FOYkSJ~@lBpscx`w|(< z^qi(Av6{9u#taM&4vB%mS^m9QDSAa|xqh-)zGIf^_3IhR^M!cLWWZ6lyi{_h%`Ds8 zPVy{JzJe#h{BA-g-jm7X-aORP|KjECg7ANd-9NVQmomaH42xhkBLXIlej36*I-?-M zpS=*fpD$Qr;E?p+S&)Xscfw3TJDus_pl~7leC7}}V`BH4y?PQJ!Q~M$yp5w&>^3Mo zq=XqP`mXV>Nf8~3ofglJ8;g;mb>s~K z3d;mSA;II&8zlnDIWBn~T{7G+Z<7Wao2fX6&&0maL{P{I|At(GCBEQy&YpF)rH#$`mE6kIByUbny_=fMHOj7+tCiPsb!UB)ml_*YkC%4% zYu72SdwjXLS#jL@D0e3w^RWqY+_Vr%%0tYzF%0$z^BsxkU$`sLD$qTNFtGs)UH%;k zrJ>)FHp*Dp=o?XpVks}(LD?Qeh)3R$$d-)|{TXVnxwcVtpppFTGWJ3H=#;%J*X$Kd zx!6#+YN%2QSzje|I&G62NqB^rDt&1ggGO~%mUyS2pt?ryK>guT;$4D%KK+W*;~hf3 zjuYz+bb_u?6_OI~41I9v8a*UcKPfLmm3p79EhL@LYQ<`GE2 vS!zzLyuH&4MwU4!rc2#wq}6J%8SL?#H}Zkl93qBLE%T1Y6na&u#JBweABgRJ literal 0 HcmV?d00001 diff --git a/objects/win.o b/objects/win.o index 049020862438a7324d38da9a7e09fe6c29707764..95b88453b716d5d79c749232515a5e0527f2a9ae 100644 GIT binary patch literal 4094 zcmbVPZD?E989vv#PTV9!YRJH4Yj?Z3tFy+cn`W8W2gtE+a$M|G*cJ)2og&NEl^R(x zS64I+3vJN6^&+%{LB|GNn;(TS=%9l&X);(9Cp2#NN8A4RM}L^?%O!<{L0UuIYR`Ml zy+`*}-k%*f_dMr$-*euN^P!{JANMdSf84>?qXOwH?pUWCf#oOJ&DgZY*eoWqwt@+kY{X~E<)ADU?0EP^(mNfVumIWX+rr8THkgPnbn3;nGd6UO)crCV zp=XEn2EqRjdPfi|m7S>YFY)L>(N&)$&>PST7NPgpw}KR-I5wg8dv89Zh$UjlM2frr z;MI?eD<8L7EnY+R7;81TD}dMM)s0qV``aYCJv1!Zt2F)!F~KpEbM!^C)bNLNzfH=# zdc%0;x@T_irn&jc_TXA-le^c{OiPXE%MIucDt%*p8tzr^Xg_K=o+G{MZ+?*q8#?z9 zgI!*Kqwhts21;1X-DSJyNO&NOO?*n=zgG+#1X(Mx8ly0Ihrliird zZSeZuB{&Cmo1FODobuVn_6H6EHUHt{{8sLR(mYqVtHS zv^#pa!E32rUVkFyE_+Jo*7k6XTAL*(LW^w`f9(uhL8I4kKG~m-70=CL)8$_rjY;?Yo+} z32nKLrm)F#yk6)#iN!LoSpD2x&spI+FIAR))>E6bi2{*rV(JdCYt|i5U)0({Mx#Xd33p8`)=_1XrBQ= z1Oj0eF0H|Lc!?HXH$TVmb^OQO~D*Ibp0PPDSA&wX}JO5-=q~PlHyZuj}U%uPVKe;75Mq0$8$=j!%x^r{1 zuU~9e0E2*BK6!s_y<-Nryu8Gf5L9u^&Fa}r=HET)qDee+{X)2CJ(2F71A0Wm#Vqh- z0Q-DQUy4O~G=pi$4jo^Ar*7?xY+LRc^mP2OG`}t9q@YUlL810F)LmY?inbS(+VA7E z^?B_pU5pI^Q~NK}?*UVLM#t#~ruHK0G%&TpxRFi*zYLwan`cS`wjc?ea2&t#}CBG)h$a5Ed93Y>^^+=2xKTU3iMUMO(>2cl6vP9 z`YDissM9Dq(CtbktdRSriy z9eRtmOFZx*r-yw+qn%Cf@Njw8>*8?@ow2YGJ*=|g$Y+_eKYJYIQ!=-dme1VnU}Axs z$Wae2#-2obh4Yw&oTbJFfKe#k`Zw;b)~_m6_;d zOT}^t2QgX5ICCX?eheC_bJTJstvTB&=O#0b#b)#6g^ZKUrSbE`Y{Zhz7Z)mRbqa4x zFrF(N_I)c;PH91E`poeR?1m!vg6rvYetsbhkEWbiE+Sx(8i6N{MdLFw1&h*WANNF4 zmNO#bn<&j%9%&XU^P`BQkXeM>$rqn3`}!1sH$Zqtd^(#uRd!CL=gYpmOfhQ}rWT9Y zoLwrGD&?_K+g!*Ek0$O&$)19xg7xIgb5_=2Wa)6laY{v&8kssUT}n+K84~OhrNy$7 a&z@qF&_7(6o3m_le!*D`^pDYh{Qm+6k3{zX literal 1239 zcmZ`(&2G~`5T30Q2oh4leFtd6;z4@$S0sl>{3IpBim6!PE;LzF;PCIT(%VO1l)=YGwXfZ>1-V$$^O}K)t54f)`4OnZ4ex5f)-m~O< zr!atct2I3mpoPmXxqPk06KnF-8vo$mh(7+w-p%5ZQ^Mb`=S|CbQ;{|YYy6o%{gmdi zCfgP3@P5Ube3SuM@2~P1bfJ6KD*H2ya74mNMzOSBFc=|U?*~d@Fsd+h!LjJQK+n+l&t7^T7>hVs4^YhvMqQ8<{r%G^6o+mnD|eEmtQ~uh zbtbEOb1T+IVmoJXa+c$ErYPIMK*{6B*(%hiPw#>WP0qqcEfbh4E!iiJ}u{8l$@-M diff --git a/objects/winhandler.o b/objects/winhandler.o deleted file mode 100644 index 0fb62c50b4a4562017666e6f38172b868632afd4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3667 zcmbVPZ){Ul6n}4hbrpu~h$M@Du);LVY~6q{r(&`(p4`PPPDY&~Shn_!)otz4zJ@_0 z3@e70m&SeZlQ9yah8REa!8lk*?0`5hBrfp_AtWp&CWG-|E=u}gQh(>(*Vor=A;z1$ zcYpVH&OP^>bI-kfjeJ@zQG02PB)!OyA_a79ROeW{&buY4R>tEI;|=KiQrDqCq*w2C z=&c4@q^@kBFPU`8e9nP|$4GCq)Zi#&w;wB2Zjl;V0wXK+_92XimVX;Dh3h3s^=RE2 zB3#=j{A;Oiw1*sY;eC4*y&yCGVCnmQW_0?DV3irHVy5b2#uPJ=AxX;5u=G{`!7By5 zix2Yod{Jg_C2P#mxqPbp0!^EDUqEuD(z&f%G)aPsq~tV1VPed?Q`tvYX_!`*zAR2Q zgG)|lPi4KIXR&GnJnlwZRV*`9jc_^<;BU-yF|*sl40VAS!5jkh|J+h0c_)Go2=^O4 zQ(YhnmuYyq%j2C;AM~elPp3SVt}+hWRqy`?`}$I6>BpkvcXEEcLH;=2uR zhh3VBKFsHNUCgVGQu_*O^PA0X*b(y>YEH~sM-+Tk3gy)-Hsj>|b5s+V@2k&H&-Z(l z8CSRkb4)_bP4e2Rxs0ucL!BsrYb-q{!_T>P<60}P$POdhVf@0pUtca`Q?q3qa<-$A z58W8LX$Dv(^X`95V(F}xP0cB=qs+lmiPc2rHX1ct9Rt>&n|`vWa)s<0othULy9 zDHo6wEQ@nt%!n|p4p#x{^=&#gW6(Qow)zZpoMnPzSn&**zV%N&e_Flc{ZYM>UXVY@ zruK@wk5k?`oci6(G8I1HGg#srGmv*!G_kUYm5o*(#&q@gnb<9s>Eefk8QjRcjFYG4 zWK+F~q`ac$ydS^LFQVlUin=gvvyA4U(h%2M%c8eZ^(}gRo%G^&)}r^lseW%gzj2b~ zi_BY_o!(>8w>YtaUxMsjNZnlATy7 zbCU+R9gz2Nd8PZCO4sA^28l+N{e-YX@$qP_K7zgi5B1;Ssj~W8=&SKi|1x&J!Rr46 z-U&?o<}xG=nEI=D=(mabJBlP70H*#dHfac$+RXa!lt8m>d)nGw^>68n#`g5o^)xm5 zN1K~MO^tP_a6+#ei6^6@bxCcY*58+k4(a~BqyAk9Ej*z6yL)31Es?DCCwA2Mw{8z? z3y@=I&sdKlH3L11N0D0bUe6JEDbNWZ`VCg3(>C{+jV{^fI?!`?6zL-ueNhlP3nZ*e z06ovSdq9*YMY@4#U*PC(Aj+d6$%tN{^)}iLB&>V@w2A8_Z0;n`X3pUyJ%PssI|bwc zdXjUrXF}?;5lMuU))Z38i$H!`O8yFNi;Ze+DJ4`$8*M~66_$6}T#Jo%+fvH2nA>3^ zstPf8pUu5%qXV||kj+JGG+;}qhJ@u28|k(*&>tPrFrxM_FG+{xBhlCZYGp`E1j2%+ zx7UI)cGM*o`2xbMNc@QSAjHNZ_tYqdlqs5p@e-^g3@U|Wa zk!W(HR}T*q##nIIP&_=yS9H1+3Pp!ULZO0pO^w_?!S2!YZarf8C#bfB)~jn&nZ12O z8h5r;5~6NRxBTslM>LS3@W5bF9}EpAEseceZ^TmJemG{9ShUoMdn2Ccj>ZlTX>av? asD*WDL?3_$kvFdMtVv+c7y>ODk!^O4{tM zEZM=JARbnPQ>7uTo15l}#%@iT6qh)}&@`0{#SS643Q38fv{8B~T_bX@0wgGn6W#we zkMr2GE7>ZS+w}VUv^z83eDl5Ln{OWH>`~Q@L6*%J%fV-Aim~HJ>GJUJ>A!kWy?E)< zi`lVx-(PmzQThF4^=;v}I~wb3jRo7?O~H&CS&NV9@_@qXVgcZGj3Q6;$^=Y(dx&0C(Brn~MGZA5$H#PeK(DYz3P?^h zh!5f2hL7p;5ZDvW7q8H;J{mVmm>(}%0A^LVpJaQn@Su~!U7U+ua3eqglC0ZDE()( zK!d;kU;X`6E`NVRer3PUUDjV!FnH%P9NhP&J6Vr$-0%F=A28-0aQ*=T!vK3=II-|4 za-(D?BHj4>r^pqOO~@yI@Ik^`vIRkX;NpH)@<~y?T$MX8dO_z~r9`K1($STN(ni$! z`$v+0dAXc^{C&^5brFhy@j+@2F}j5qr%4Q#|A4cV%Kc@_-QNBmRvvJAsCdA+hC@#v zcOB1-B>!SLDX|izLC`KTXrJ_*#hgbX9fL?GXlfKtza1Hog3;72iu-ngh@b~STU|mPhtQ^gR z!52QY6zIuc!Xo3hqUJ_k^T2Rd0SZe|5Jo_u76pI*3FJz6ZY0@rJ$3grt9QNi_Lao*PN}&;%9Fp?H#qp1yr&S=TiHeT8HAjzfc^LW72*(BQcLAs1@@ z!AtF!AHH@qwHHM%U!6Ri1^lO|&D3bJ`BKh6@&oFJhJ>k>tmO={;0F1>oth#CJGBCu ze+Vu(;G72){0ElIL4t}ntet#p9;Y-QIS(xP#lryfLz+eZM!A6{r;!Xee}M0b{!?i7 z)?9L{mpJst_=Xi1L005Yc^8-sI7bB7nLG=F4>-SyB3vq}d!QQOV4G->rEotjaN!)o z`9MhmB?)qQ-x}VuzyY**n-;*niIwA9sb;{lvu|>7_gv0r+|NP1qag9XaNZY&^PU_Y zFD4iWjUgQy@I*}LS8!18m>J#4DajFD=kI&d?>`V(?&+^`BLWo+_}qQN4*x;_$XGV@ z*lt)&>H+_xtQsz7U`dRqv%o!Y>E9zy21t_Hgf@~~ejOl03zDUxP52L7okg+{;w79# zb}Eh_<&xlqio=B8af&z$RE@z0sQp*Ks1M^6m>>4J^B!)Snwm-_hE}8glO!Zb2~8R% z;8+xk{2w#90)^oLA42g+@|SL)!uh4)oyS3SN?2{say`@1Qkb{&eoi}YsfVo@HbYtl z8}8UjRxThbyZr~&FT5Fq`+qUDV{~pd;jeh#$;r+hH-_CRS z-1u6w8>;2ik8oU+om8g6*}i=RY|nfGwE{GrOSzz|Jc7{0<2%wMI8mIZWV{<#zO!%V zZTB4^B8R95HrsuNTJr80MrqMCAkmW7F`WGR)s(qsxZgL#MJx0T?VYc3iQA|pnnMr~ z%NG$~=3K{(Ft%iv-CC*FM}uj0f;-)ngfcf!u&4oqeR zBgv&0v3ZZf0}uKgz6o8fvm^qSXWx}D#A@e#C5*)vyzK`g44~8F*OAce0KT2Kb3_OG z`B;X=z5X?FPNTW)q>lmwdHQL1SI+`c2W@T`9>0PnhabMtH|FrqJE6cQ-p<27h79eTKpq#xch%N^6RWW=|8n{6i9vhUSRkBB=54-XJPeFJf#;UJ26{*h!3qEAk8-4#$_ z<+J_+Wy_0Dfx+M##K6S|?Hr@eQFniv^c-(SG&t>l`ui`4%a6G5?!Q1_M6gki%A&#V z81}Cm@%KO9KiW48a_z&8{t*+k{kb4(rU3%fI0+iQ(|x{g!y4a4r+wHr5&PUpAGiDX z<(!U*%5$u!&vzWC$2n>;_Rri1iA(H=h1{`kIO#jaRY*_j7)TYodwQeq*xf(nR_N$Cp3wj5p#MN9*A%XkJ(w<^ z&W8O4oLhk^#?No2rk%P4w&Hk0|omhz_|D5@sig6Sm=+_nrsSl8D=-W(tMlp zeZ#r_erJ+{oj((`7}H%p8l=g~x=4Qu8%;FE${B0Csjd}jU7I6k#{&TeSiAr%Sa%?2 zl<2&MnG#Ey@k>$j1ZoBvu)N6`of_?HpLF!?n`B+Dqa(KQnPMdQqsgf$;%hA6-2={l z?BffsypzuFBS&UQwgO+uH%RjdSC}RTTylOXqCJn?@__ec#2Xuuti&Rea#2#N)%>i) zb$$Et9bK2ff7}BN`EVDPoce=#*su`C@p4F+^%ZgxEWP@Cley#90&fz<38eV&$$Xy7 z!@h)rHZT1d+HCYqcKwjkG3iEYfxdk%)}^liz=v5E3sQcFmz`LIZ-(Up7w0Owtlz{o zMe*PhrCdeu`Eox<(*hxox3Y`nt=#7-%UkJl!$bi{93aEY>5ldfW2N-~Nddvntb@UF zvM>@4Ecqwo5#y%D0RK9Un8*m@RVe(ODtJ)%kt(c1;dNEG9t8)rr#4rhaJ4EdM8PKu zgCxdVWqB@-o9FUeJ=70@xAI(37iIhd+j7O0^cFr?5nFweXmAmN_gi@v-Mzd3-w7Jx zFJt6`@^85SCz7i!lY7p*0%%@9nioLxPd`g0!C>e9@{j)$J7U9LeQ%bKvB-sBqlN-( zn~N&@s{q8r3O$4%-^izJ!ie|yRiMO&E7<;kvmHr(2bKPTJ0swjVLB!877>dbxA2Lp@Nd>Va#xP~dum}qF>OiNTxKK#lR!y5+Y2`59Gz?kXZjLu$EnF-BtN-U_84wtgt#DHg^w|@i*U6!F06uRxe zrSts#0r=0NiF?zltqgdeVc2`Th)MF!Uwn?QK@qk#q477SYfR*^^YY|kLgC6Uk;?xq zwxT!(=$rK9-A`*qp3lj<|5cIS1i4w>{XbAOxq0`WQ28u67nsaJaeOW^9%LZKjhVy{ zW*mkYv9?&`oE{BMw;2Oz(Ldjl(IPZ%1{zL7ui=5J$trj@-~adroIe~SyTB}0qHs4a zaGkfqbkyPBJxf#C07zrG)$hCy8LUSU>l*cNR-{~8>|_^h%`69U6>2#U?2xs3YEy_B1@Zw$%Q)70v#!_owA^r9QPoH z1ArX9L~_$AR_*eMP;!7dun<3nECPSSG4FA5P3mvlN5WRsm!vgq5=++n*pp|zg`j~V zamTS=f)u8_@RLH(?oq5w2#!_9La>@R^GVSNg)=p``u+mNU~?q9^U zL;V>X9f>CV@I-IIdU=yXf(QT|_*6%WW1K`Vj3PxG?R!ByQN=O&Di4;M^3NkfA0OX9 z4TMg|$8W%{iZ5dTq__ehx$PQOfg5Zd`ZauSJZF#w)<6{rZ?ez{+LEl~RN-t?d0OL=|_AU(wC%Tlv99H?&JxQQm+(SspFU%PTf5p zq$xLi&xeRnCGV6foWK0o-(SDnji5mXXEYgn|3)GA*RiDI!g7_+Pl+acb$3xmdGXbK zSKnlAVlH*kmE#&P$=8m1#YzTxKY~FtzQusUW4Jx;CirRtu6(nZ;FlZlT!~)^IEJoo zg2n`$!sh4Q_i4mx9;n{zH3AjR_xAA9uLo#_FyK6n5)W&SBa_?%dRPFbot4d-%a`Uu z%$0m|={D~={r%35fzC(vjN>AZXTQXEbn}r5P5ba`FWQ(Z8tAAQ`X-y=wmV?Re8e!EW=m8z1*8h zOSiar@ItU*hyXY=K-`+o55ms;$YH|Y^hdZ~m-o;Cz&1UMY`k<6_I((%e+Q}}`%siB z(K&$b)Uyxmpe$UbH}C#($~u9NSbwGzd1qp3>ejx=`FRhmM~T*q`r0>q13F%=eeXn` zuYLLOeQE(XCij?DK#s1f_*fD(8fu_4jh{0=Bb8~5lz0D2Li-7hG&QO)NPIz-yf=Am zI_u^UDpYTdCk{RL;J9VGx^p# zQ&Up3@l{;%1kU_@6HgJMLH=TeGkgjxN7k8jG3N2_d#Kv(h_muG+U@(d~TdA(9^wH42F^`vnAczq5)!2b`Db$lvD3$H5f6XPW7YARyMAz~f#@ z^=H0BNC%uRcPUOaf|Ks>&i}=$d=ujhWXS=nBV1h@g!~r~1gmeCzu$QhXyYUj07^8T zPEhQxz$7zH(>zL~qH2beufY#Nh6Y`R-#kd#rcq$PxeZ7(*>T4?;9RD+`D5M&ruqm6 zVXIaSHdtS9`+Zl`^1ZI}ZeD;5@`a0#8juMl=kg(d2mt9tQ$2OnHz44#gfh|&PCZ8G+_y937gwP4c5VpaZ(#IShQEpwj7O|4HXU zw4v*y^WWnl2fp7!R`}gU&Ubuq^58EJ!*i2yFooJ`mk!;Hcxj5VWKQD_kQ@iq1e^Bu zk3^(}A^c*PB7YKjy7$w9TRz5}1~LI$TVH*?DR{&7KzHdpTw)24Jn4IfbQ7dJm*#zI zl(JMQm`w783}jn~Ai5EYK^!ze)PPugdUCOdgLB{VYj>|c909@{MrgKw@{UO>T58v5k7Vk6I~@PHP*O> zN@EZ}sx)R+X(h>uVB+!~r|3t7{{|TlPNM}8QCgf-T6pvclzTQjEK5krdzT1iStP|> zP%QaBMD9l88#j{XrLIO^`gc)%opxuRA8-_=iZTa`Tv-+d|V?z6PRmOs7ye*!e_V14_N`e_{=YaqW`{_d!_=K_No9nRNg1I~*D zKk7&X?vdohf}eEXzZ7E%Ykhf3SKhba<{#+AE*lHY*ZTIort`depy4$|YqJpQG>my# zNBEdR;5#{engk{OC;)W>?Goi)a3MMaC!a2M@5P|X$FI75GJX+t3k}js$4?HbUcizN z@#^+~e-l015JI|RUO+ttCEob}awPdB|>bc4!; z1N`sitsaTds+FIyKL&xtJu}=f;y2oM;#_LA)3FRsHtm%l*P>s!W%9bx2z^8wt z|HR0zFaPwx;} z%!8eK*^ee2C(8PV-yK~xidz+zEkuWq(dAx=!qbx4oU{9^5JtXggH0gIC`IgNH|SBg_A^{ zO}6us4qAU%q~rI0)iVW{9njo%K8pc&=Y&`><`EUnWG9{>l1xT*Cb_8A7p8Ql-jG)W z4Jj`Ue{p}E4$M_(mh#i4SCKVj|7+|xbg~Ew77dhr`P3%q(=%DgakQeFc9^J)^Ew*09g%TbV)}3 zap0xpzZMlqC%$z4xhRM&>DkN_#;rTHoM4gWl#(34Z@?Q$wCF?v?t>bT3bh`ppuaDV;Ct zRr&@_QOKUJ$n<%cJ}uL)%Jhpe{ftca%JdU5-67N4WO}nqZ;y!S6UiTDYU76VT>RI(Uj5=B;RP-|TJ< zHN|gU5s7r&h~IrAkVR&1DApOGEY3cS3;uDhQKDS$t$31V6Lte$6g2!AWAn~G_`v4U zuYdO=@AQ6f9V^=Hd*+u*H-GH&A2`9=jf#HCmFe)1D3=V2l;hxQ;%aMI!M(B8uJ%wz z!rk229>i}{La|t9%w14cQ{}CwUdi<8c(|jrD-w)_6MNhRbroAs$FG{*p;$|#v)dgD zcC?06^O~)`+VaYpJ65tlFqQ}hBko9NJnrsnamT~09pRQRejC#iau)zozwf)%Ydx>vNWbh`^;p~UWBWD^SLt=%t7O%>p?9-qzl zgz?#lPYpg*uuJ!+f)h9h0E(9NQoz0J*#DDGYnb+-lM?v74(xINe! zS``m9CBmH@%rnd{kIuoF! zT6TvMZSE%g$jDvPv!VxHj)BW`k_*yv#B%UMjyrru%fw8Ip=ik zc7+q@$GsslK1mC(oe89e?wwr;>V57cH@XwSSZgQ&%c1H<_nvSl(o6+(h#OY#0^z6< zr<4m)%A-Tp_C+3R*_FaCT41eb*I3I(Q|N6eExp-YfKj^Tj#YPH zl=hTt&^8pW>S~H5Rz*AG;U0{{wj15My26MkyY{#@$3jhQ33pwv1K~ct(!FL~;o8C? zWevurqu1WlGA*?m-LZA46yHyJ@3p=c=>5n1<%0b#*zbJe%LRYA;4l9#{pG!$-!Ay` z1%Lj1^Jilvcp-Pe0v9asdv5{UtGyf_dRGUfU&JRDc}jnU&!xyyO7CBBBTs2PK4r*L z+H(nGZOBu4_oevZF!Gf4Ey2M9@{~S-&%?+MBOSr#Ao8O~e}vDMkRL<(&}DcH2=aqS ze}KnLOO(xA9+gey%u^SPw5@k;Z+~V zQ~G6mBFIx(@IlxEc}icv=YHfzk=|SY{g9`$8J{m9kNrIR{0)p9L4F9S_d|>wL!Qzs zJm@)$Jf)A~^8)ge{wW^%Jx%yXuP%h{$W!`Fd?t{m^i!*$JMxr%51-sW6zNq(=u_k= zJ&BJSc}jnS&yC1a8d<|w3G$RytwmoWKZtbeI=u1&`9`GI72~xj$QL2qhfg!|INN6< z_(YM%xjtL99=X6BeGPd^C-6CrJf%2`XU`%} z={kHyk*5@A^XxS8l;V7zy@oucFXJw;KKI_7-r9O!4l zF~k2b4V@eZ%R!v9*xck#j?}(4(_3qzcRqR5AE~xB(@=cU4~hS;pr?)+>h8n?4)mTf z&tDs`1YkwqU~HQS_BFu#fc2VS^h9wKut5`S60lytj+kJLPhtKCtOR`2H3V3}G0d4J z*eSr;02?&H&H~m8Si0+ogb&N~v`k-@>91ru|C^%q)iN!SX+WlpGQCHp56birnf|#< zl?+eH@^dNhmt^^MnNG-bG6gT|NkvJdm&tNr3cN&?%Vk(^{GCkg1ZkS(bOp^g)?EBGbQ;>GLxEu}oF_S7rJ26!?TJ z|4yb0;X`!g%T$!$Q?frV^tZ6cfA#*p!ci8Agc6}r+=0j4^GKb%f4s@z!`<#!Di}Wr zDUXFhmEm2nU~CUdWNis0DueNak8bbdK`AO%bvAcJLVn!oiiGg2!LtOz-Q*^D%bKyh z*%ck&7L4FtZz_YAvMWQu-8L|LCA+dS*ev;iYNxXnJq#*n*IjxK|Evjjuj@{uHZlbd+QSMfN ze5S=i39Td4t~f|xg?hpX1}U_r&W@IF zD;^KfI)dnmZfcJfSDI_O!_6THzXtGFLJKCePj-cy?$QLEr3%W6E0_RpV0chPb(bP9 z4MIV{ z%9?@qAN{28k&jzg`SgHKrcX+H?iS|O52G!8Y(Ts2-H#SL3d8_jP=I83=#<29A1XTJ zITSe5cqn?P_t4;>p+iRx4IdgkG5IgKT>^@v{*mF2=xbblGaPQ&4!$XIU9v(hC zdYFjNsuSnbL++uHAt zEU+BHI&nfvGV^)f;s7fEZKs;v$MKE{!n+iuxm&6m+@))7k`ITvSG5OYO>LVx@GNyl z5T$sqtp!PvQ()2H+V^eXXd1VB1ESH%;- zrn^?rGuqhdW7GZtIyoa@cH)!enA6l2jIpfTxsgshI?cbjI%vlgYNp>DpvGy`a6s1F zcpEloZYx@jlUL>lY>}U9MRDbDO3j^JyCNa5&ef}>3^}SQCkMX;2qsu=ZZV8GFDpk# zr{fDboI(yNWQXa2T(T54ug&46P@IiJy=4x^Vpx3}>gpS+eOg_q-&fX9=`+Iu-rD*K zZ>3i2+oF~E0zN$LUtPMLIZUnUd|C#qtjt*D0j;#A8b4sDuQSul&fFp$dX9l!=BumM z%Dt7426AfUHMQE7%2MVuFzQfM7pSbLCuQo`9HT~wUta0m!Zod{_f}T2xduj6&DL!! z*HrdZ)zog+sw(QLy!EAiO*EKiAe1+NTWM85^H!H>n`^z*Kw7t!&7U4)Lor)0Jw{y( z30cP$rl5H%8%(U&BBR<{TG~+6Q0cArX*CV?TWTt*w`ks4kXUTs1Zrz4Yqm7_w1zsW zhPFPIXH@$F6}D=ZQBA5=`n+g!kpT?gosU`-Hxs+q02BR6I1FmpB?h>xreU)JUuu9A zc1?gSF`x<=(8~;Hz+0x(`D<$71r61u^%XVM>~d>ut*^eJwz`hx8{qPqhFa~m2J};9 zMO8&TyTYh~rR(qT)E-eZYWLRM-2q_-eJXa)x`mTKtC&V=Uu$L0Sd+9bZ-J)>2Pkyr-`&Vb>Zpf-KOrngCpv#!)HvhwBU+*)4VT zwXg|#VYyMoja93Cw7TYwY7C_SsZzHY)~Tu6%vKn97&+cb{J_aaHrk4T$!WpXHJb9a zI(EH*PiCw0`pek|t+3L{`Z88vg>9~9D-DQH$Ql_oS5>eZOekfyH6VI4RAU%avJV** zHHeB8-^WM#Mtk8gx{Qe5wx#blw*=lQ5ovEtG zT2)?N>+=QJ8UyOvRogJcDxlUn1A~AK)yn>r zHE>ioSVa}Qx;PUSdJtnlp{=)~1-zvnMNdkc}judS)#NH?cN5)(=t0!1DBuz?|_ z2+II4O;+p{1C#m`GC&c{jIk*#hMKjbgJ3=;%r;2Sb zl*gzizFWNYei&peOnwDBCRa048W~~)Xna>K9ZCJSh z7AmY+TT))-)k^*Nm17;-l3KlX{RUIDKec-Onzg3t3Zr`K+Ol%Qma+yOTC$9BF#~Lxg|$0sE9!l0r%}nRQng0gTH)0YZtgT{s%vOE2zV=M zy;zs9j~g{=tw;-EvFg)Il~Tsrc{s;EhSMipLwd3L3>sBZAu=D^Wq^f`Ro2M$SRHFJ z>L>ziEA?;L%$lu0XjH^P28{F&A&RCR)?(C%5h}wMRwGp1YE;W5D-2pzA%+>&KZrDK z28vLUcRLFkV5RBp6++Wb7*#$jv9zt!(G7usua@0qR8^w;SVZnrXrpJ@sre7e`CMHASj-ry?4hA^iXyXXKu3mC-a(^F*y28YI0`)GfyX=OBJ zNmvoVc$59eEc|2a3mt3@HGgDY55DJR56K^g&S^&R3lcb(@{3V4o94oUY_7{Ma$KC3 zz4)rdD;8hk1g@iiW#?YK0K4qvY{7z$EXc;`Kz5EJJNF~Y<}O&4Q*p`7%N!qeZd^9U zaR~%;I4UlojI$W6ZeEu4;RPF)T~u+&tyj>i*yj|pEkMsE^!XK+WaZ=Z;3CJ0+)EZ@ zFTHB1>v9|;<$*^9+Rt0UK8P0cFC#JwK!rmWEQ3G`m$8aVRzsi**L!V&Z6N5xSzaMh zhr{uk#fvDRlOTMMS;`Lw{U~Q4pO@84HT(<58|thm`yJ-E_S)9%MO`0lZ7teVdF{1X z4m2(UF44Y)+N7hM{XbB1IT(EqA5K5#Hey>(#g9?0mA-&<;rhR10Xom4ceJ3tdfW@= z<_<|~)44ERs*BZmuy?WRzAW$J{NC)2#jauR;@lGg@51-*rv(ZNSBpP!^txI+ptCx> zu4KdNrai5AMx(Hf)!w`l8DPXW6w{jn@N^2^;jt4hj#(vszqXT~;A-tS!|mSLBVI9p zcY>_qfOTtk3gV2;jlFg5wT1GZoc?~A?7x)M?^V}M<45d0_oGy1!oAiOHo;R@r}5O) zhNrGJdFpDrr>>Tsn!rg^k5LkJo?g>9^LS7a64xrifgRQ@OPp2C(e?rGpR zP5At7ieaOH@g3?3!It_Zp7Fy{50JU|WHa&9p121nAb5x?N)6~9u8xDZ2;s?H9YQZy zA`sm}6gbGRyYO-2V?gjgAX{#M^rA%f91Wb$phTAgZL>415Wb3ftS|)*Av3y#Gz>Me zk!JIoUPe=K7nHGoK;00Q!PDW;J(}Jba7e168F;M*&hQL$wgBgg;KwyZioOD5bcR+D z;0(@y^AK=;B`FK-{{#>xKKNsESYZTDm^OE_t8@r){|ZVgIK+)R!N9>}5KGYgF8t}O z@arEPLam-aiR3o4corr13=*CJPSFfFc@RB11I`NIG|qtYVc-O2z_}ebo*8gjNuC+{ z{j@iQmtVOmTRW?jxXPRLNZ7t49tacWyNajMQN3)`FDLd2LJ=3@t0*^U{`YEteVuEx-U7nPc3>q*sE{2d7{RPG;m+FhtfQ!CZo`PYFi({w} zeL*-B^{f~51^JlJeT%gcCDj*SMqczqM=-%x4n}7v-N(2!NOv0u&FN5}jmrLFJkJ@D1P!nG=zC zyen!*j2GoKP(RZc90iW>AGm3ni)21}4l>VyFhb@g`n93uq~yJp zc?@z2ne76L{;Kfiqsr(nE1tyJQ7|J;sh3(#Pp5Q;YZ@GCPc|eX!soXT$a1MQK)!Cn zcD#1j=yO6=@1+*~o<2s|?YtBeX+AKn^NB5EXqM5=YRwN0LN5<;gl$}E3@%5Fn7=Zw zX>)-y)BF`U2OC}sI&$nJ+M4l0UXvM>ecZS!4776`JN9v*){tYMk;y(}1?u;qbC7wR zE;9m&))HM)WC)ESy}3LgWKQ4j5{2nF`YdB;Nbe)5Loc77?siWge$>kzOr0~0Zn|$PJX5?3 zeHDM>y3y0GgS?R0oz^q)7Igd`y(vBcp1d!JIr}AAO54mup?azO6I5d!Vw z1Y`{$ci`Cq1L6VX%N7Wo`4wP8%y)mB&L;q&wWz_p3y=UL5V~WU0Jgf+is;XQ(>M)| z8kI(WeF=n$6d9hLkFV7s84ZP<7#DHU1{%3%Us@_3Oy6auw+>D7(^q{h{Xhky9 z{vRDnTxP76h5{^f%R0)`2D)fboW@kGQrgEi(w8SbNa}y`qa?t zI(W8qM|wVbkv|K)Xe?VVH7oF@GHRt|P?+g3GC(1s9x_#`7X6J`)J0U=*->J7n zzkdVWmcHMqw?)7Ix3qM~hAMJrJKVsb-nCxj8{`qfH)y>o4Q4{4{-RzI{Y7VI_KRYa z3j&L{T46&_cAg9K3!jg5c6Btjn5F_IAXpo7JExCP_P%%yysYbz^XZGD(1tWl8=qxN z2tZ~L6UZB_mx>7mz!5Qld#nXXt$#*g9AO`~rCt@thK;%nwlwR!GS8>e*@p;{%yf<|^vW#r4Z6%tp>U)Hk4YLAhoC5A&d~3XV%}g> z>P64ntmlw16J#BSJZnJOx>`ec2N_9;KYR-5AL{|~jsb~?Xh;7En_QbHuiDwRh(h@XMka~tg?I*H84neuT%H7&cQQxf{5@;>j)sxlxG$L zXC}|o?UQcTCZBn`S?@u5@tS4eG7bUHB5sWgJt*xXa7gzm64P?M*Y;`F?UQ-rdZw`t z2}ib}FiXjFE5_S&`|yW;)m!NJs8ogCbFh!VAzof^B;PVFyM3tNQ*h41f1>ALpUQKv zPv9Kvv%_j1@ghDM{?%LgM$f@M0*CB#Cv*o<)1~aw3mDa;d)7$p6sC)8YL|33h|CoE zw*e>9_#)BBe}>M%KA!*`F*9=ikuNb622yV{ELuUmJ;V6oIHWtp*c9K8tGGebychP_ ze-8GcF*uWbCeFb=yLJ1}@78cLsl$Ai9_I-d3VNTC;n|gd(Et7B^Si#w9@Oo_kt|=z ze}(`R_Mvqn<&4YjKZIkysNX$UR?QSQzNza){k|(057CP(qd`US252EjtOuIynoEachtrm8M0IUi6?%FIE_)z_I+MH(^I~0JRd3^}UeC z0x2E@5esAk?ZG5Oa!<~RJKY1aP+q^^#{Hm;`|oVrCuYU{9UFIgQr99+@sN%CLLgXm zpPUu?aH;eFJr_^9fybgOPT zzJ`?LGvnNJR{4elM{p^ZO|SDB@573+KHl4uJPK0WqqIA4WgUbFK7UI2hGUtP2ue1+&dclWSCo}MuP;#YC`fUM(n3Kt zG#g$gy(M3H%Xx9%Z{uEM-)-aWo)!0pZQM(2-2FE058AjF%!>Pd&Ethhg7E6OU0u0IGHTD^{*E3iN|lwcbr zA<|p6709*dd2x5!xDVO5(|LlGJ3SL%<=!|e?#pf5kJz}=*@cxmJ%3>3-Zm@l1vc(S zZQN;PZsoqq#yvVK?l;=F)9)26yoyiRxJPWOx8X2soa<4)&9xd`UQ{La*Tp`!7Ig~t3YBkj>yaj&#- zpR{q$wQ5{EcLRT zf~Lbck29-gFv!J6Jd*$xK%G_ z#<{6c`G(_KD-o1zdY#w0ZUTaF%d647zSkCQ25ph{GFzlg7R+W<`HqeIejE3LHtvN6 zciHdnPSfwo=M62C&zm%rK0l$fNaxS*@tIWsea9_7%}&aYS$T^|W~uu^_)n(su6*Nt z)T?+%^;c$pUO%XMIWx{plgc-y@p)aZ^YZx@6lLA#qe>nHDehHTD9DB^o7Y`Ajpdcs z8FZA_nRrRBV=Ldky92kJgVz}{E3Y%jEWNI58r_xGy^neo?^pem*`wC?s9w&DbJM8u zjp^l#dl}Q(7p=QQ?`=ck~=HzLpJUK8}~*V_t$OQ zU9;kT$i{t}jeDDo`-F{q{;asu{dH+Wd7r4!#yx7|K51~5K3_YH&#Uon^q?B=re2mk z=vG>QXX^D{udE8dfa^ZZEMv&5#=A*ose8vXx~uX2KI&E6qxviJSYF?zdO0)BOF8iI{ zJCkX3p?u!ZLixN&Q>jIf(&Byad3w@&CZ9KCRz7c%S?d1gG`cIFe;@TK4ygXh?9b~x zs+Tk4+>}th;kZ6E{OG$0U9a=7bz_iWCQ)WmG_sDge}$-yhNgb+ zofY>Y8~0Hg_c0rHdP9Mg`~F#RztP71l#Tmo8~4*T?t`=9USQ)sY~xPPuS!it1lTZa z<9={f+?U(9AGdKoW#fLt;4bI)e+OiywT(eXt!+%a8|48`>0oOiHeY!*DdP{)SQwT=cb)7j0`2+`bF4MU3a`a zT)n3hZzCogx-Ok3Qn&|AW4NvbL|DU}{u$2q(Gy4>%Nsr&B&Yq_pvw#`=!GUU38h?g zpY1Hh4vw~flb%i;aOhpYL?PQ@|GgfO+y$KDE7d6$+277<0;U|(pS7-_W|j+YnQPMU zPB|B#AjiNGS0}PX08u{($Y%i&&ttnK=}`jm zb3o{#l7O5A*nBJ~gFyeE|^acmwiRfRObK ztG-G&xNyTuO86FsxJ|7V!ad1P4LSvYSoOLY5ET!z=uL(Zt(h?oS{b@;B{zo_g1d$n zG0@w}sbtvsQ^4^Un&Jl-^gy_HTHY-s{2Xz&c*2(f8M4^$aX|7d+(!VR)w1XvRIwL{ zjs@pm03lV4UZ$U04C(Svt9%&(h0N`t_NFL)_ATzzC<(6v&ah4=+Lee?OOK_$ih~jPVtB-vT zkU_n7sQoKM$KpS40YbfF_>T*}no=t?;m_9rGN|iLbZ!D<%))&qAkU)4kZ?C3>hx03 z`7|IN;24_z5#d-g{R$w%7RuiN9*}JoUK$|kX=g$C4**fC zTmd-*NFxXt+((Fx#TqXF!Yr15g<9#Fk{o9Maa;8IH6ZE^i{P~auUj~6>Gw7C0tVn2 zdTjy34WJ>928g=~Z}g>TMRmqi7YT);DEcj4w+XFAb&JvO^yrOJqrfwKwHi2d zB4p_PF+j*$44K;iIclN28xX%mi_ZW8M=-T|5)cy8p!_^Ra2b?e1Ej}7`ImrAL*9Ml7L(Rh&6_<1Z2YE8@B=C1|egW(m)X1J|M{AfDD7AA>n5M z@u0@A*cS;$htNMP3`QWch4NwGxGa!wQY&3AG-odWLYL4ho``icwMSX5rPV(JXUrnc z+kja6A`5{fYSHvsK=Lg;xEhd$!OPI=PC&*it?mKjw1w9f0HMnmDMtWlgun)!mjO9q z@q}?e+AQ2Bsg(uCxdd8REWaEOIwOJr{KMErKzc27ZUclW4SDVaM4h)#OUCvAQoudR zE$IvZBA&rhkgo#LYq9g+0@B7?DegZ3#AV_BFM#xbgQ0ugWw1OThRoLhf<`6@*8$=N zMD#K;Y%?H3NR3vtfEX(x!f6DAMlK8@wfGDmM|B(WRTIXAAN7K=Mhhevv5A7P#vh}V z-=f8nfH0j7VV)++vV~~%Iv`PtHGT=mDILN`WiWNbW#dhLM=e&p7?4~GuWJBlG}CFK zbuV2)3(BnnPSn!sHb5w38~xq{NB}USRTm&=Bylu)#X|^fU_fK!_5sIbq5K6vN-U7a z0GY68@iZX&EjIifAiWmveHD;Fa5wt&4M2Jz7CL4i#+QAQTGc( z?|cFfb=D*xcLNfz@OlW4e4P&WmL_Ow;r=DyxBxL$)Qa9#m~F2fJsvO%)1 zL|onwG_EY^4ikf`1YvsEP20dyULJbMK=lOT|*)A>2Ivd}pT$bL(! zT>NyLMuFi8s{q-rM+u_55s-rxNDUxE7CI3?j_aCItA0S5ks9(G2gI;5;k*LK5u}Fh zq5J_TD4#-*wGq_t75pLrBmgDyLQDw zyHzO??$8@qD4>hYIQUOsG1eaJ!2gD94o0J_Eg09D=s(~w{*OL51N_Gm`X`Zi-vwS- z6mAYci1tt-6!Ql=nj@hY!&{)WCjK@I`I61$g|Scz{)cj*Y6;3(Vowwj@fQdf^&+09 zLgk9qhFw)rz2y$AqMHAwaIMU@xnT?chuOZ`S{tr>9hDFc?CE74HY6EnZ1Cnz^Y|K-UfQ(3I zBgI$H>7ca?ab_LT2+1k;CpwkqJCc>Q^>g}+0V#0Ac zBhA2#>Ti*?l9vMzV67l9(XF_Y~j5Vb(lNAxV zoeN&Pt1}Z`xE(`9<1a|jSaVl25^h5GXwfJJ5=IGzW{Qhzt&z@Me5V9HUMI1g)h5X!zeqniVdA zspzIif-`_lDU;Sr|LPJ=3<&?{mr5367@Pm^IXOlcfnaZ_nVOp1#nw(9S7Bg8ASQ7$ zwUEVFD2l@k4gXaDwe7*4I=nL!J{3nkb{D->oO>8e_rYEGx0iV1JjjGJECj40c4UGS%zU zVM86Rv(@S=>-2bGevkYr;*D2GX2Y7V*$0=|zDI?i<9h9r-BU zH>HaBr@5kxI1u795B@l&(caW!;g zbGTESyLD*0P12Fz;;dF9Z^2N*_g$e_M<}vxtrkQN3WpZc9h5|OhGU%+%IQ}SVqJi! z0%6MPYidQHp&~V)sKpJ4e<=}cHs}YVVKNfjL8CXd!&JLzMvAP_)@VhT;p;+)h7R%m z_GX`&vdhB}%q0k4)`c2%u605cyya1;C}<49z(ILa8>DE0oe;mmO>y2aabnQfLP}v!(MlD|B?|x*7K&hz zUW$1WE0l;HVa4E@-qeOynCJbiVJv@xk=wgMm|askem4Nz`>-mtieU~WI*K^cGT5ZE zhEXdBq9*XIqxmN8<1-%u-!6>)>~Gsk&&TT09zR!os7;}UzMc41M*2Oj;KLRn>OVbT>0`tcA9YRTnn~YK zs>OlS#8|jXZw+8;fF&fGK4!`=OtC^2LusexA>rQ96ql$B1$U(83>u3 z*XmE!sZj|i1{XIBLPlrY5-VU+3e?m=nF5yB$mn*E-Qnv%9JED~>2~D86Zx%g9@??l zrd2!b(bPPEXhAzrSya1)X{R@ftEfKWYa0wJxmmz6v$cbFCWS{i*&v|P?i}m>V4Tmm zne^PAK$WkqW3P-8tr z^LQ0sdWxeYiYOFym6WpQb~iOeFpU{KCp^7L;_14|*kB6GoM+__6@>FS{VNTDm2Hge``N{JrO9|5Y#*vwe^!VuQH$u`bpgt+of z<@BADGNujxu-c6Hi1QIaJ5B#s7E)LXLFG&XN$s?ibEttNmLRl<)VfWR1!SbdXTe!M z`=Xm5)Am=)nBA?G4Uhnu7VPwJre=)_gj0dlt~klC1vZkdTVI`%O9@2uuYEQp7qCus z(@`eQB4Am^MasHStOAtnq*>G}yipV@!j$kXru8WQKbNuz?5Xb)DQ>CdnF=v!14v4c z;RY4YoQdw4VGmR{&6YzFkZ%XJjR5PuhvJZFt|vLfGZ7i)T`nliHkPv!>w3$)tQL_Z zp&JEy=}T;yJBXfjRVX-Eyu;2nl^N)t0}RuOI^luwbgow3hA~Cqzsl4?F^@m z`YC(LGR_=_GDR2b_|R3!6e{hVfzCA@HCT6;n139(x#u++)RKymWEgMMFtVm;A MO~4}9=%M!i0MssNivR!s diff --git a/source/fumoengine/input/ctrl.c b/source/fumoengine/input/ctrl.c index b7f994a..deba581 100644 --- a/source/fumoengine/input/ctrl.c +++ b/source/fumoengine/input/ctrl.c @@ -32,44 +32,36 @@ void FreeController(struct Controller *ctrl) FreeDictionary(&ctrl->binds); } -u32 hash_bind(u16f bind, u16f type) +u32 hash_bind(u16f code, u16f type) { - return bind + (type << 16); + return code | (type << 16); } -struct InputAxis *ControllerMap( - struct Controller *ctrl, - struct ControlMapping *map -) { - struct InputAxis *axis = &ctrl->axes[map->code]; +bool ControllerBind(struct Controller *ctrl, u16 control, u16 code, u16 type) +{ + u32 hash = hash_bind(code, type); - u32 hash = hash_bind(map->bind, map->type); + struct InputAxis *axis = &ctrl->axes[control]; struct InputAxis **bind = DictionarySet(BIND_T, &ctrl->binds, hash, axis); - if (bind == nullptr) { - printf("whar"); - exit(1); - } + if (bind == nullptr) + return false; *bind = axis; - axis->type = map->type; - return axis; + return true; } -bool ControllerMapMulti( +bool ControllerBindMulti( struct Controller *ctrl, usize n, - struct ControlMapping *maps, - struct InputAxis **binds + u16 *controls, + u16 *codes, + u16 *types ) { for (usize i = 0; i < n; i++) { - struct InputAxis *axis = ControllerMap(ctrl, maps + i); - - if (axis == nullptr) + if (!ControllerBind(ctrl, controls[i], codes[i], types[i])) return false; - - binds[i] = axis; } return true; @@ -81,7 +73,7 @@ void dispatch_update(struct InputAxis *axis, struct InputRecord *rec) axis->is_down = true; axis->is_held = true; axis->last_pressed = rec->time; - } else if (rec->is_up) { + } else { axis->is_up = true; axis->is_held = false; axis->last_released = rec->time; @@ -104,7 +96,7 @@ void ControllerPoll(struct Controller *ctrl, struct RecordBuffer *recs) for (usize i = 0; i < recs->head.len; i++) { struct InputRecord *rec = recs->buf + i; - u32 hash = hash_bind(rec->bind, rec->type); + u32 hash = hash_bind(rec->code, rec->type); struct InputAxis *axis = DictionaryFind(BIND_T, &ctrl->binds, hash); if (axis == nullptr) diff --git a/source/fumoengine/input/ctrl.h b/source/fumoengine/input/ctrl.h index 24030c9..fce02e0 100644 --- a/source/fumoengine/input/ctrl.h +++ b/source/fumoengine/input/ctrl.h @@ -4,30 +4,6 @@ #include "input.h" -struct ControlMapping { - u16 code; - u16 bind; - u16 type; -}; - -struct InputAxis { - nsec last_pressed; - nsec last_released; - - union { - struct Button but; - struct Axis axis; - struct Joystick js; - union InputData data; - }; - - u16 type; - - bool is_down; - bool is_held; - bool is_up; -}; - struct Controller { struct InputAxis *pending[IO_BUF_SIZE]; usize pending_len; @@ -43,16 +19,14 @@ bool CreateController(struct Controller *ctrl); void FreeController(struct Controller *ctrl); -struct InputAxis *ControllerMap( - struct Controller *ctrl, - struct ControlMapping *map -); +bool ControllerBind(struct Controller *ctrl, u16 control, u16 code, u16 type); -bool ControllerMapMulti( +bool ControllerBindMulti( struct Controller *ctrl, usize n, - struct ControlMapping *maps, - struct InputAxis **axis_ptrs + u16 *controls, + u16 *codes, + u16 *types ); void ControllerPoll(struct Controller *ctrl, struct RecordBuffer *recs); diff --git a/source/fumoengine/input/input.h b/source/fumoengine/input/input.h index ae4e158..e7f91ce 100644 --- a/source/fumoengine/input/input.h +++ b/source/fumoengine/input/input.h @@ -33,24 +33,30 @@ struct Joystick { }; union InputData { - struct Button input_but; - struct Axis input_axis; - struct Joystick input_js; + struct Button but; + struct Axis axis; + struct Joystick js; }; struct InputRecord { nsec time; - union { - struct Button but; - struct Axis axis; - struct Joystick js; - union InputData data; - }; + union InputData data; - u16 bind; + u16 code; u16 type; + bool is_down; +}; + +struct InputAxis { + nsec last_pressed; + nsec last_released; + + union InputData data; + + u16 type; + bool is_down; bool is_held; bool is_up; diff --git a/source/fumoengine/input/platforms/parseinput.c b/source/fumoengine/input/platforms/parseinput.c index b92717e..d6e6bb8 100644 --- a/source/fumoengine/input/platforms/parseinput.c +++ b/source/fumoengine/input/platforms/parseinput.c @@ -1,30 +1,29 @@ #include "parseinput.h" -void ReadButton(struct InputRecord *rec, u16f bind, bool is_down) +void ReadButton(struct InputRecord *rec, u16f code, bool is_down) { - rec->bind = bind; + rec->code = code; rec->type = BUTTON; rec->is_down = is_down; - rec->is_up = !is_down; } -void ReadAxis(struct InputRecord *rec, u16f bind, u64 value) +void ReadAxis(struct InputRecord *rec, u16f code, u64 value) { - rec->bind = bind; + rec->code = code; rec->type = AXIS; - rec->axis.value = value; + rec->data.axis.value = value; } -void ReadJoystick(struct InputRecord *rec, u16f bind, i32 x, i32 y) +void ReadJoystick(struct InputRecord *rec, u16f code, i32 x, i32 y) { - rec->bind = bind; + rec->code = code; rec->type = JOYSTICK; - rec->js.x = x; - rec->js.y = y; + rec->data.js.x = x; + rec->data.js.y = y; } size_t UCS2ToUTF8(char *buf, u16f ucs2) @@ -40,8 +39,10 @@ size_t UCS2ToUTF8(char *buf, u16f ucs2) return 2; } - buf[0] = 0xE0 + (ucs2 >> 12); - buf[1] = 0x80 + ((ucs2 >> 6) & 0x3F); - buf[2] = 0x80 + (ucs2 & 0x3F); - return 3; + else { + buf[0] = 0xE0 + (ucs2 >> 12); + buf[1] = 0x80 + ((ucs2 >> 6) & 0x3F); + buf[2] = 0x80 + (ucs2 & 0x3F); + return 3; + } } \ No newline at end of file diff --git a/source/fumotris/fumotris.c b/source/fumotris/fumotris.c index 155efd1..ef7cfcc 100644 --- a/source/fumotris/fumotris.c +++ b/source/fumotris/fumotris.c @@ -2,9 +2,6 @@ struct Fumotris { - struct ControlMapping mappings[BINDS_N]; - struct InputAxis *input[BINDS_N]; - struct TetrMap board; struct TetrMap piece; }; @@ -15,7 +12,7 @@ void FumotrisStart(void *inst_arg, void *game_arg) struct FumoInstance *inst = inst_arg; struct Fumotris *game = game_arg; - ControllerMapMulti(&inst->ctrl, BINDS_N, game->mappings, game->input); + ControllerBindMulti(&inst->ctrl, BINDS_N, controls_g, codes_g, types_g); CreateTetrMap(&game->board, 10, 10); CreateTetrMap(&game->piece, 3, 3); @@ -27,9 +24,10 @@ void FumotrisUpdate(void *inst_arg, void *game_arg) struct FumoInstance *inst = inst_arg; struct Fumotris *game = game_arg; - if (game->input[LEFT]->is_down) + if (inst->ctrl.axes[LEFT].is_down) game->piece.x -= 1; - if (game->input[RIGHT]->is_down) + + if (inst->ctrl.axes[RIGHT].is_down) game->piece.x += 1; TetrMapDraw(&game->board, &inst->term); diff --git a/source/fumotris/fumotris.h b/source/fumotris/fumotris.h index 27cdfaa..de2d6f8 100644 --- a/source/fumotris/fumotris.h +++ b/source/fumotris/fumotris.h @@ -5,7 +5,7 @@ #define BINDS_N 12 -enum FumotrisCode { +enum FumotrisControls { LEFT, RIGHT, SOFT_DROP, @@ -15,64 +15,102 @@ enum FumotrisCode { ROTATE_180, SWAP, ESC, + VSCROLL, HSCROLL, + MOUSE }; -struct ControlMapping mappings_global[BINDS_N] = { - { LEFT, 0x25, BUTTON }, - { RIGHT, 0x27, BUTTON }, - { SOFT_DROP, 0x28, BUTTON }, - { HARD_DROP, 0x20, BUTTON }, - { ROTATE_CCW, 'Z', BUTTON }, - { ROTATE_CW, 'X', BUTTON }, - { ROTATE_180, 'A', BUTTON }, - { SWAP, 'C', BUTTON }, - { ESC, 0x1B, BUTTON }, - { VSCROLL, 0, AXIS }, - { HSCROLL, 1, AXIS }, - { MOUSE, 0, JOYSTICK } +u16 controls_g[BINDS_N] = { + LEFT, + RIGHT, + SOFT_DROP, + HARD_DROP, + ROTATE_CCW, + ROTATE_CW, + ROTATE_180, + SWAP, + ESC, + + VSCROLL, + HSCROLL, + + MOUSE, }; -const u8 I[16] = { +u16 codes_g[BINDS_N] = { + 0x25, + 0x27, + 0x28, + 0x20, + 'Z', + 'X', + 'A', + 'C', + 0x1B, + + 0, + 1, + + 0 +}; + +u16 types_g[BINDS_N] = { + BUTTON, + BUTTON, + BUTTON, + BUTTON, + BUTTON, + BUTTON, + BUTTON, + BUTTON, + BUTTON, + + AXIS, + AXIS, + + JOYSTICK +}; + +u8 I[16] = { 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0 }; -const u8 O[4] = { +u8 O[4] = { 1, 1, 1, 1 }; -const u8 T[9] = { +u8 T[9] = { 0, 1, 0, 1, 1, 1, 0, 0, 0 }; -const u8 S[9] = { +u8 S[9] = { 0, 1, 1, 1, 1, 0, 0, 0, 0 }; -const u8 Z[9] = { +u8 Z[9] = { 1, 1, 0, 0, 1, 1, 0, 0, 0 }; -const u8 J[9] = { +u8 J[9] = { 1, 0, 0, 1, 1, 1, 0, 0, 0 }; -const u8 L[9] = { +u8 L[9] = { 0, 0, 1, 1, 1, 1, 0, 0, 0 diff --git a/test.exe b/test.exe deleted file mode 100644 index 4ff9e847e8cdb50732f5dd540788e87fd745ac6d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 88290 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 RAO65}6elNp8q9_8_dmZ;gg^iQ