Initial Code
This commit is contained in:
		
							
								
								
									
										5
									
								
								build.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								build.sh
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,5 @@ | ||||
| #Script to build | ||||
| echo "Building with g++..." | ||||
| g++ -g -o npi-build source/main.cpp source/samplefiles.cpp source/helper.cpp source/banner_audio.cpp source/logo_lz11.cpp source/icon.cpp source/banner.cpp -I include | ||||
| echo "installing..." | ||||
| sudo cp npi-build /usr/local/bin/ | ||||
							
								
								
									
										16
									
								
								cformat.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								cformat.sh
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,16 @@ | ||||
| #!/bin/bash | ||||
|  | ||||
| THIS_PATH="$(realpath "$0")" | ||||
| THIS_DIR="$(dirname "$THIS_PATH")" | ||||
|  | ||||
| # Find all files in THIS_DIR which end in .ino, .cpp, etc., as specified | ||||
| # in the regular expression just below | ||||
| FILE_LIST="$(find "$THIS_DIR" | grep -E ".*(\.ino|\.cpp|\.c|\.h|\.hpp|\.hh)$" | grep -v "json.hpp")" | ||||
|  | ||||
| echo -e "Files found to format = \n\"\"\"\n$FILE_LIST\n\"\"\"" | ||||
|  | ||||
| # Format each file. | ||||
| # - NB: do NOT put quotes around `$FILE_LIST` below or else the `clang-format` command will  | ||||
| #   mistakenly see the entire blob of newline-separated file names as a SINGLE file name instead  | ||||
| #   of as a new-line separated list of *many* file names! | ||||
| clang-format --verbose -i --style=file $FILE_LIST | ||||
							
								
								
									
										5
									
								
								include/banner.hpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								include/banner.hpp
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,5 @@ | ||||
| #pragma once | ||||
| #include <cstddef> | ||||
|  | ||||
| extern unsigned char banner[]; | ||||
| extern size_t banner_size; | ||||
							
								
								
									
										5
									
								
								include/banner_audio.hpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								include/banner_audio.hpp
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,5 @@ | ||||
| #pragma once | ||||
| #include <cstddef> | ||||
|  | ||||
| extern unsigned char banner_audio[]; | ||||
| extern size_t banner_audio_size; | ||||
							
								
								
									
										70
									
								
								include/fileHash.hpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										70
									
								
								include/fileHash.hpp
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,70 @@ | ||||
| #pragma once | ||||
| #include <chrono> | ||||
| #include <cstdlib> | ||||
| #include <filesystem> | ||||
| #include <fstream> | ||||
| #include <iostream> | ||||
| #include <map> | ||||
| #include <string> | ||||
| #include <vector> | ||||
|  | ||||
| inline std::string fix_path(const std::string &path) | ||||
| { | ||||
|   if (path.find('\\') == path.npos) | ||||
|     return path; | ||||
|   std::string ret = path; | ||||
|   std::replace(ret.begin(), ret.end(), '\\', '/'); | ||||
|   return ret; | ||||
| } | ||||
|  | ||||
| inline std::string stupid_hash(const std::string &file) | ||||
| { | ||||
|   std::ifstream iff(file); | ||||
|   if(!iff.is_open()) { | ||||
|     return std::to_string(rand()); | ||||
|   } | ||||
|   unsigned long long check_sum = 0x0ULL; | ||||
|   char tmp; | ||||
|   while (iff.get(tmp)) | ||||
|   { | ||||
|     check_sum += (unsigned long long)tmp; | ||||
|   } | ||||
|   iff.close(); | ||||
|   std::stringstream ret; | ||||
|   ret << std::hex << check_sum; | ||||
|   return ret.str(); | ||||
| } | ||||
|  | ||||
| inline std::map<std::string, std::string> | ||||
| createHashes(const std::vector<std::string> &dirs, | ||||
|              const std::string &extension) | ||||
| { | ||||
|   std::map<std::string, std::string> hashes; | ||||
|   for (auto const &it : dirs) | ||||
|   { | ||||
|     for (const auto &file : std::filesystem::directory_iterator(it)) | ||||
|     { | ||||
|       if (file.is_regular_file() && file.path().extension() == extension) | ||||
|       { | ||||
|         std::string path = fix_path(file.path().string()); | ||||
|         hashes[path] = stupid_hash(path); | ||||
|       } | ||||
|     } | ||||
|   } | ||||
|   return hashes; | ||||
| } | ||||
|  | ||||
| inline std::vector<std::filesystem::path> | ||||
| getChangedFiles(const std::map<std::string, std::string> &oldHashes) | ||||
| { | ||||
|   std::vector<std::filesystem::path> changedFiles; | ||||
|   for (const auto &file : oldHashes) | ||||
|   { | ||||
|     std::string newHash = stupid_hash(file.first); | ||||
|     if (newHash != file.second) | ||||
|     { | ||||
|       changedFiles.push_back(std::filesystem::path(file.first)); | ||||
|     } | ||||
|   } | ||||
|   return changedFiles; | ||||
| } | ||||
							
								
								
									
										11
									
								
								include/helper.hpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								include/helper.hpp
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,11 @@ | ||||
| #pragma once | ||||
| #include <prj_def.hpp> | ||||
| #include <string> | ||||
|  | ||||
| namespace helper { | ||||
| std::string GenerateUniqueId(); | ||||
| void ArrayToFile(unsigned char *array_, size_t size_, std::string filename); | ||||
| void GenerateTemplateFile(std::string path, NpiProject prj); | ||||
| void CompileProject(std::string path); | ||||
| void CleanProject(std::string path); | ||||
| } // namespace helper | ||||
							
								
								
									
										5
									
								
								include/icon.hpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								include/icon.hpp
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,5 @@ | ||||
| #pragma once | ||||
| #include <cstddef> | ||||
|  | ||||
| extern unsigned char icon[]; | ||||
| extern size_t icon_size; | ||||
							
								
								
									
										24651
									
								
								include/json.hpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										24651
									
								
								include/json.hpp
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										5
									
								
								include/logo_lz11.hpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								include/logo_lz11.hpp
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,5 @@ | ||||
| #pragma once | ||||
| #include <cstddef> | ||||
|  | ||||
| extern unsigned char logo_lz11[]; | ||||
| extern size_t logo_lz11_size; | ||||
							
								
								
									
										111
									
								
								include/prj_def.hpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										111
									
								
								include/prj_def.hpp
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,111 @@ | ||||
| #pragma once | ||||
|  | ||||
| #include <string> | ||||
| #include <vector> | ||||
|  | ||||
| struct NpiProject { | ||||
|   std::string name; | ||||
|   std::string author; | ||||
|   std::string description; | ||||
|   int vmajor; | ||||
|   int vminor; | ||||
|   int vbuild; | ||||
|   std::vector<std::string> source_dirs; | ||||
|   std::vector<std::string> include_dirs; | ||||
|   std::vector<std::string> libraries; | ||||
|   std::vector<std::string> lib_dirs; | ||||
|  | ||||
|   std::string icon_path; | ||||
|   std::string banner_path; | ||||
|   std::string banner_a_path; | ||||
|   std::string rsf_path; | ||||
|   std::string logo_lz11_path; | ||||
|  | ||||
|   std::string dir_gfx; | ||||
|   std::string dir_gfxbuild; | ||||
|   std::string dir_romfs; | ||||
|  | ||||
|   std::string unique_id; | ||||
|   std::string prod; | ||||
|   std::string platform; // Platforms: 3ds, desktop | ||||
|  | ||||
|   std::vector<std::string> arch_flags; | ||||
|   std::vector<std::string> c_flags; | ||||
|   std::vector<std::string> cxx_flags; | ||||
|   std::vector<std::string> as_flags; | ||||
|   std::vector<std::string> linker_flags; | ||||
|  | ||||
|   std::string cxx_compiler; | ||||
|   std::string c_compiler; | ||||
|   std::string linker; | ||||
|   std::string asm_compiler; | ||||
| }; | ||||
|  | ||||
| inline void Prj_InitDefault(NpiProject &project) { | ||||
|   project.name = "Sample"; | ||||
|   project.author = "Sample"; | ||||
|   project.description = "Description"; | ||||
|   project.vmajor = 1; | ||||
|   project.vminor = 0; | ||||
|   project.vbuild = 0; | ||||
|  | ||||
|   project.source_dirs.push_back("source"); | ||||
|   project.include_dirs.push_back("include"); | ||||
|  | ||||
|   project.libraries.push_back("m"); | ||||
|   project.libraries.push_back("stdc++"); | ||||
|   project.libraries.push_back("citro2d"); | ||||
|   project.libraries.push_back("citro3d"); | ||||
|   project.libraries.push_back("ctru"); | ||||
|  | ||||
|   project.arch_flags.push_back("march=armv6k"); | ||||
|   project.arch_flags.push_back("mtune=mpcore"); | ||||
|   project.arch_flags.push_back("mfloat-abi=hard"); | ||||
|   project.arch_flags.push_back("mtp=soft"); | ||||
|  | ||||
|   project.c_flags.push_back("g"); | ||||
|   project.c_flags.push_back("Wall"); | ||||
|   project.c_flags.push_back("Wno-psabi"); | ||||
|   project.c_flags.push_back("O2"); | ||||
|   project.c_flags.push_back("mword-relocations"); | ||||
|   project.c_flags.push_back("fomit-frame-pointer"); | ||||
|   project.c_flags.push_back("ffunction-sections"); | ||||
|   project.c_flags.push_back("[arch_flags]"); | ||||
|   project.c_flags.push_back("D__3DS__"); | ||||
|   project.c_flags.push_back("D_GNU_SOURCE=1"); | ||||
|  | ||||
|   project.cxx_flags.push_back("[c_flags]"); | ||||
|   project.cxx_flags.push_back("fno-rtti"); | ||||
|   project.cxx_flags.push_back("fno-exceptions"); | ||||
|   project.cxx_flags.push_back("std=gnu++20"); | ||||
|  | ||||
|   project.as_flags.push_back("g"); | ||||
|   project.as_flags.push_back("[arch_flags]"); | ||||
|  | ||||
|   project.linker_flags.push_back("specs=3dsx.specs"); | ||||
|   project.linker_flags.push_back("g"); | ||||
|   project.linker_flags.push_back("[arch_flags]"); | ||||
|   project.linker_flags.push_back("Wl,-Map,./build/code.map"); | ||||
|  | ||||
|   project.lib_dirs.push_back("{DEVKITPRO}/portlibs/3ds/"); | ||||
|   project.lib_dirs.push_back("{DEVKITPRO}/libctru/"); | ||||
|  | ||||
|   project.cxx_compiler = "{DEVKITPRO}/devkitARM/bin/arm-none-eabi-g++"; | ||||
|   project.linker = "{DEVKITPRO}/devkitARM/bin/arm-none-eabi-g++"; | ||||
|   project.c_compiler = "{DEVKITPRO}/devkitARM/bin/arm-none-eabi-gcc"; | ||||
|   project.asm_compiler = "{DEVKITPRO}/devkitARM/bin/arm-none-eabi-gcc"; | ||||
|  | ||||
|   project.icon_path = "app/icon.png"; | ||||
|   project.banner_path = "app/banner.png"; | ||||
|   project.banner_a_path = "app/banner_audio.wav"; | ||||
|   project.rsf_path = "app/build-cia.rsf"; | ||||
|   project.logo_lz11_path = "app/logo.lz11"; | ||||
|  | ||||
|   project.dir_gfx = "gfx/"; | ||||
|   project.dir_gfxbuild = "romfs/gfx/"; | ||||
|   project.dir_romfs = "romfs/"; | ||||
|  | ||||
|   project.unique_id = "0xff3ff"; | ||||
|   project.prod = "NPI7"; | ||||
|   project.platform = "3ds"; | ||||
| } | ||||
							
								
								
									
										7
									
								
								include/samplefiles.hpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								include/samplefiles.hpp
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,7 @@ | ||||
| #pragma once | ||||
|  | ||||
| extern const char *default_title; | ||||
| extern const char *default_code; | ||||
| extern const char *default_unique_id; | ||||
| extern const char *default_romfs_path; | ||||
| extern const char *ciaRSF; | ||||
							
								
								
									
										519
									
								
								source/banner.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										519
									
								
								source/banner.cpp
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,519 @@ | ||||
| #include <banner.hpp> | ||||
|  | ||||
| unsigned char banner[] = { | ||||
|     0x89, 0x50, 0x4e, 0x47, 0xd,  0xa,  0x1a, 0xa,  0x0,  0x0,  0x0,  0xd, | ||||
|     0x49, 0x48, 0x44, 0x52, 0x0,  0x0,  0x1,  0x0,  0x0,  0x0,  0x0,  0x80, | ||||
|     0x8,  0x6,  0x0,  0x0,  0x0,  0xe4, 0xb5, 0xb7, 0xa,  0x0,  0x0,  0x1, | ||||
|     0x84, 0x69, 0x43, 0x43, 0x50, 0x49, 0x43, 0x43, 0x20, 0x70, 0x72, 0x6f, | ||||
|     0x66, 0x69, 0x6c, 0x65, 0x0,  0x0,  0x28, 0x91, 0x7d, 0x91, 0x3d, 0x48, | ||||
|     0xc3, 0x40, 0x1c, 0xc5, 0x5f, 0x53, 0xa5, 0x22, 0x95, 0xe,  0x2d, 0x28, | ||||
|     0xe2, 0x90, 0xa1, 0x3a, 0x59, 0x10, 0x15, 0x75, 0xd4, 0x2a, 0x14, 0xa1, | ||||
|     0x42, 0xa8, 0x15, 0x5a, 0x75, 0x30, 0xb9, 0xf4, 0xb,  0x9a, 0x34, 0x24, | ||||
|     0x29, 0x2e, 0x8e, 0x82, 0x6b, 0xc1, 0xc1, 0x8f, 0xc5, 0xaa, 0x83, 0x8b, | ||||
|     0xb3, 0xae, 0xe,  0xae, 0x82, 0x20, 0xf8, 0x1,  0xe2, 0xea, 0xe2, 0xa4, | ||||
|     0xe8, 0x22, 0x25, 0xfe, 0xaf, 0x29, 0xb4, 0x88, 0xf1, 0xe0, 0xb8, 0x1f, | ||||
|     0xef, 0xee, 0x3d, 0xee, 0xde, 0x1,  0x42, 0xbd, 0xcc, 0x34, 0xab, 0x6b, | ||||
|     0xc,  0xd0, 0x74, 0xdb, 0x4c, 0x25, 0xe2, 0x62, 0x26, 0xbb, 0x2a, 0x6, | ||||
|     0x5e, 0x21, 0x20, 0x8c, 0x10, 0xfa, 0x31, 0x2d, 0x33, 0xcb, 0x98, 0x93, | ||||
|     0xa4, 0x24, 0x3c, 0xc7, 0xd7, 0x3d, 0x7c, 0x7c, 0xbd, 0x8b, 0xf1, 0x2c, | ||||
|     0xef, 0x73, 0x7f, 0x8e, 0x3e, 0x35, 0x67, 0x31, 0xc0, 0x27, 0x12, 0xcf, | ||||
|     0x32, 0xc3, 0xb4, 0x89, 0x37, 0x88, 0xa7, 0x36, 0x6d, 0x83, 0xf3, 0x3e, | ||||
|     0x71, 0x84, 0x15, 0x65, 0x95, 0xf8, 0x9c, 0x78, 0xd4, 0xa4, 0xb,  0x12, | ||||
|     0x3f, 0x72, 0x5d, 0x71, 0xf9, 0x8d, 0x73, 0xa1, 0xc9, 0x2,  0xcf, 0x8c, | ||||
|     0x98, 0xe9, 0xd4, 0x3c, 0x71, 0x84, 0x58, 0x2c, 0x74, 0xb0, 0xd2, 0xc1, | ||||
|     0xac, 0x68, 0x6a, 0xc4, 0x93, 0xc4, 0x51, 0x55, 0xd3, 0x29, 0x5f, 0xc8, | ||||
|     0xb8, 0xac, 0x72, 0xde, 0xe2, 0xac, 0x95, 0xab, 0xac, 0x75, 0x4f, 0xfe, | ||||
|     0xc2, 0x60, 0x4e, 0x5f, 0x59, 0xe6, 0x3a, 0xcd, 0x21, 0x24, 0xb0, 0x88, | ||||
|     0x25, 0x48, 0x10, 0xa1, 0xa0, 0x8a, 0x12, 0xca, 0xb0, 0x11, 0xa3, 0x55, | ||||
|     0x27, 0xc5, 0x42, 0x8a, 0xf6, 0xe3, 0x1e, 0xfe, 0xc1, 0xa6, 0x5f, 0x22, | ||||
|     0x97, 0x42, 0xae, 0x12, 0x18, 0x39, 0x16, 0x50, 0x81, 0x6,  0xb9, 0xe9, | ||||
|     0x7,  0xff, 0x83, 0xdf, 0xdd, 0x5a, 0xf9, 0x89, 0x71, 0x37, 0x29, 0x18, | ||||
|     0x7,  0xba, 0x5f, 0x1c, 0xe7, 0x63, 0x18, 0x8,  0xec, 0x2,  0x8d, 0x9a, | ||||
|     0xe3, 0x7c, 0x1f, 0x3b, 0x4e, 0xe3, 0x4,  0xf0, 0x3f, 0x3,  0x57, 0x7a, | ||||
|     0xdb, 0x5f, 0xa9, 0x3,  0x33, 0x9f, 0xa4, 0xd7, 0xda, 0x5a, 0xf4, 0x8, | ||||
|     0x8,  0x6d, 0x3,  0x17, 0xd7, 0x6d, 0x4d, 0xd9, 0x3,  0x2e, 0x77, 0x80, | ||||
|     0x81, 0x27, 0x43, 0x36, 0xe5, 0xa6, 0xe4, 0xa7, 0x29, 0xe4, 0xf3, 0xc0, | ||||
|     0xfb, 0x19, 0x7d, 0x53, 0x16, 0x8,  0xdf, 0x2,  0xbd, 0x6b, 0x6e, 0x6f, | ||||
|     0xad, 0x7d, 0x9c, 0x3e, 0x0,  0x69, 0xea, 0x2a, 0x79, 0x3,  0x1c, 0x1c, | ||||
|     0x2,  0x23, 0x5,  0xca, 0x5e, 0xf7, 0x78, 0x77, 0x4f, 0x67, 0x6f, 0xff, | ||||
|     0x9e, 0x69, 0xf5, 0xf7, 0x3,  0x8e, 0x4a, 0x72, 0xb2, 0x26, 0x87, 0xf8, | ||||
|     0xc8, 0x0,  0x0,  0x0,  0x6,  0x62, 0x4b, 0x47, 0x44, 0x0,  0xff, 0x0, | ||||
|     0xff, 0x0,  0xff, 0xa0, 0xbd, 0xa7, 0x93, 0x0,  0x0,  0x0,  0x9,  0x70, | ||||
|     0x48, 0x59, 0x73, 0x0,  0x0,  0x2e, 0x23, 0x0,  0x0,  0x2e, 0x23, 0x1, | ||||
|     0x78, 0xa5, 0x3f, 0x76, 0x0,  0x0,  0x0,  0x7,  0x74, 0x49, 0x4d, 0x45, | ||||
|     0x7,  0xe7, 0x2,  0x13, 0xf,  0x1a, 0x1f, 0xc9, 0x80, 0x9a, 0x98, 0x0, | ||||
|     0x0,  0x0,  0x19, 0x74, 0x45, 0x58, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x65, | ||||
|     0x6e, 0x74, 0x0,  0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x20, 0x77, | ||||
|     0x69, 0x74, 0x68, 0x20, 0x47, 0x49, 0x4d, 0x50, 0x57, 0x81, 0xe,  0x17, | ||||
|     0x0,  0x0,  0x15, 0xeb, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda, 0xed, 0x9d, | ||||
|     0x79, 0x98, 0x5c, 0x55, 0x95, 0xc0, 0x7f, 0xd5, 0xdd, 0x9,  0x9,  0x21, | ||||
|     0x10, 0x8,  0x61, 0x93, 0x2d, 0x12, 0x82, 0x83, 0xe,  0x6,  0x88, 0x4, | ||||
|     0x8,  0x89, 0xca, 0xa6, 0xa0, 0x80, 0x8c, 0xa2, 0x84, 0x9d, 0x18, 0x70, | ||||
|     0x86, 0x0,  0xe,  0x3a, 0xb2, 0x38, 0x22, 0x8b, 0xcc, 0x27, 0xfb, 0x26, | ||||
|     0x28, 0x4b, 0xc,  0x60, 0x14, 0x44, 0x12, 0x2,  0xc3, 0x30, 0x8,  0xe, | ||||
|     0x61, 0x93, 0xdd, 0x4,  0x8,  0x10, 0x89, 0x81, 0x90, 0x90, 0x34, 0xc1, | ||||
|     0x90, 0x85, 0xac, 0x9d, 0xf4, 0x52, 0xe5, 0x1f, 0xe7, 0xd4, 0xf4, 0xad, | ||||
|     0xd7, 0xef, 0xbe, 0x7a, 0xaf, 0xea, 0xd5, 0xd2, 0xdd, 0xe7, 0xf7, 0x7d, | ||||
|     0xef, 0xeb, 0xaf, 0xeb, 0xd5, 0xab, 0xfb, 0xde, 0x7d, 0xe7, 0x9e, 0x7b, | ||||
|     0xee, 0xb9, 0xe7, 0x9e, 0xb,  0x86, 0x61, 0x18, 0x86, 0x61, 0x18, 0x86, | ||||
|     0x61, 0x18, 0x86, 0x61, 0x18, 0x86, 0x61, 0x18, 0x86, 0x61, 0x18, 0x86, | ||||
|     0x61, 0x18, 0x86, 0x61, 0x18, 0x86, 0x61, 0x18, 0x86, 0x61, 0x18, 0x86, | ||||
|     0x61, 0x18, 0x86, 0x61, 0x18, 0x86, 0x61, 0x18, 0x86, 0x61, 0x18, 0x86, | ||||
|     0x61, 0x18, 0x86, 0x61, 0x18, 0x86, 0x61, 0x18, 0x86, 0x61, 0x18, 0x86, | ||||
|     0x61, 0x18, 0x86, 0x61, 0x18, 0x86, 0x61, 0x18, 0x75, 0xc6, 0x66, 0xc0, | ||||
|     0xb5, 0xc0, 0x42, 0xa0, 0x15, 0x58, 0x2,  0xdc, 0x1,  0x6c, 0x6b, 0x55, | ||||
|     0x63, 0x24, 0x60, 0xa,  0x90, 0xb,  0x39, 0x9e, 0x1,  0x1a, 0xac, 0x7a, | ||||
|     0xea, 0x97, 0x5f, 0x7a, 0x5e, 0xdc, 0xe3, 0xf6, 0xe2, 0x8c, 0xee, 0xae, | ||||
|     0x0,  0x92, 0x14, 0x3c, 0x4c, 0x7b, 0xc0, 0x9c, 0xe7, 0xe8, 0x0,  0x4e, | ||||
|     0x2e, 0xa1, 0xfc, 0x67, 0x42, 0x7e, 0x6b, 0x23, 0xb0, 0x53, 0x1d, 0xbc, | ||||
|     0xb4, 0x26, 0xe0, 0xcb, 0x9e, 0x73, 0x63, 0x80, 0x1,  0x15, 0x2e, 0x7f, | ||||
|     0x67, 0xe0, 0x3c, 0x60, 0x3a, 0x30, 0x17, 0x58, 0x5,  0xb4, 0x3,  0x6b, | ||||
|     0x81, 0x66, 0xe0, 0x65, 0x60, 0x12, 0xf0, 0x3d, 0x60, 0x17, 0x6b, 0x63, | ||||
|     0x46, 0x25, 0x29, 0xa6, 0x0,  0x72, 0xc0, 0xfb, 0xc0, 0x16, 0x3d, 0x4c, | ||||
|     0x1,  0xfc, 0xd5, 0xf3, 0xac, 0xeb, 0x75, 0x78, 0x50, 0x9,  0xb6, 0x7, | ||||
|     0xee, 0x89, 0x51, 0xdf, 0xee, 0x91, 0x5,  0xde, 0x0,  0x7e, 0xa4, 0xd7, | ||||
|     0x1b, 0x66, 0x1,  0xa4, 0x6a, 0x1,  0xc4, 0x61, 0x17, 0xe0, 0x7,  0x3d, | ||||
|     0xe8, 0xa5, 0xb5, 0x3,  0x4f, 0x7a, 0xce, 0x3d, 0xab, 0x4a, 0x20, 0x6d, | ||||
|     0xf6, 0x7,  0x66, 0x1,  0xa7, 0x0,  0x7d, 0x12, 0x5c, 0x97, 0x1,  0xf6, | ||||
|     0x2,  0xae, 0x56, 0x9f, 0x45, 0xc6, 0xda, 0x9c, 0x51, 0x6d, 0xb,  0x20, | ||||
|     0xa7, 0x66, 0xea, 0xd0, 0x1e, 0x62, 0x1,  0xa0, 0x66, 0xfe, 0xd5, 0x88, | ||||
|     0x13, 0xb0, 0xd,  0xf8, 0x8,  0xb8, 0x1d, 0x18, 0x52, 0x81, 0xb2, 0x86, | ||||
|     0x3,  0x4b, 0x13, 0xf4, 0xfa, 0x61, 0x47, 0x3b, 0x30, 0xd6, 0xc4, 0xd5, | ||||
|     0x2c, 0x80, 0x5a, 0x29, 0x80, 0x1c, 0xf0, 0xbb, 0x98, 0x3d, 0x50, 0x77, | ||||
|     0x50, 0x0,  0xd5, 0xb4, 0xc6, 0xfe, 0xb7, 0xcc, 0xc6, 0x9f, 0x3,  0xfe, | ||||
|     0x2,  0x34, 0x5a, 0x7b, 0x33, 0x5,  0x10, 0x77, 0x8c, 0x5b, 0x9,  0xbe, | ||||
|     0xd,  0xdc, 0x6,  0x3c, 0x67, 0xef, 0x3d, 0x36, 0x9f, 0x5,  0xe,  0xf5, | ||||
|     0x9c, 0x6b, 0x1,  0x7e, 0x5,  0x3c, 0x6,  0x2c, 0x3,  0x36, 0x57, 0x5, | ||||
|     0x39, 0xa,  0x38, 0x5c, 0x2d, 0x87, 0x8c, 0xa,  0xd4, 0xed, 0x88, 0x43, | ||||
|     0xd6, 0x30, 0x6a, 0x66, 0x1,  0xe4, 0x80, 0x17, 0x63, 0x28, 0x18, 0xb3, | ||||
|     0x0,  0x3a, 0x39, 0xcf, 0x53, 0x8f, 0x6d, 0xc0, 0x91, 0x45, 0xae, 0xdd, | ||||
|     0x1b, 0xb8, 0x19, 0x78, 0x87, 0x64, 0x4e, 0x58, 0xa3, 0x97, 0x5b, 0x0, | ||||
|     0xe5, 0x16, 0x9c, 0x3,  0x96, 0x7b, 0xce, 0xed, 0x7,  0x9c, 0x58, 0xc5, | ||||
|     0xca, 0x9c, 0x1e, 0x18, 0x76, 0xc,  0xd5, 0xb1, 0xfb, 0x2c, 0xf5, 0x4b, | ||||
|     0xb4, 0x1,  0x1f, 0x3,  0x33, 0x80, 0xef, 0x6b, 0x2f, 0x5a, 0x4f, 0x2f, | ||||
|     0xee, 0x9f, 0x3c, 0x9f, 0xcf, 0x44, 0x62, 0xe,  0xa2, 0x78, 0xd,  0x38, | ||||
|     0x57, 0x7f, 0x63, 0x55, 0x82, 0x32, 0xf7, 0xd4, 0xeb, 0x7e, 0x83, 0xcc, | ||||
|     0x20, 0x2c, 0x51, 0x6b, 0xa3, 0x4d, 0xdf, 0xeb, 0x6c, 0x7d, 0xfe, 0x53, | ||||
|     0x80, 0x81, 0x65, 0xbc, 0x9f, 0x2c, 0x30, 0xc1, 0x39, 0xdf, 0x8,  0x1c, | ||||
|     0x81, 0xc4, 0x58, 0xcc, 0x56, 0xab, 0xa6, 0x4d, 0xef, 0xfd, 0x2d, 0xe0, | ||||
|     0x6e, 0xe0, 0x18, 0xcf, 0x50, 0x66, 0x3b, 0xe0, 0x6c, 0xe0, 0x11, 0x60, | ||||
|     0x3e, 0xb0, 0x4e, 0x3b, 0x8c, 0x66, 0xe0, 0x9,  0xc4, 0x9,  0x3d, 0xb8, | ||||
|     0xe,  0xe5, 0x28, 0x2d, 0x46, 0x2,  0x3f, 0x57, 0xf9, 0xcb, 0xbf, 0xaf, | ||||
|     0x56, 0xbd, 0xa7, 0x57, 0xb5, 0x4e, 0x8f, 0xa8, 0x84, 0x75, 0x1f, 0x66, | ||||
|     0x1,  0x64, 0x81, 0xff, 0x0,  0x56, 0x7b, 0x1a, 0xc9, 0x2,  0x60, 0x50, | ||||
|     0x5,  0x2c, 0x80, 0xb0, 0x17, 0xb7, 0x14, 0xe8, 0xaf, 0x2f, 0xef, 0x6c, | ||||
|     0x15, 0x8c, 0x28, 0xb,  0xa5, 0x39, 0x46, 0xcf, 0x5a, 0x4d, 0x5,  0xf0, | ||||
|     0x7b, 0x4f, 0x39, 0x8f, 0x92, 0xae, 0x47, 0x7f, 0x53, 0x60, 0x22, 0xf0, | ||||
|     0xa6, 0xbe, 0xbf, 0xb8, 0x16, 0xdd, 0xa,  0xe0, 0x87, 0x31, 0x5,  0x2b, | ||||
|     0xac, 0xce, 0xa6, 0xea, 0x73, 0xec, 0xa3, 0x8d, 0xbe, 0x58, 0xd9, 0xf9, | ||||
|     0x69, 0xcd, 0x7f, 0x76, 0x94, 0xc6, 0x4f, 0x91, 0x99, 0x97, 0x62, 0xf7, | ||||
|     0xba, 0x1c, 0x38, 0xbe, 0xc4, 0xfb, 0xac, 0x57, 0x39, 0xda, 0x1b, 0x78, | ||||
|     0x3a, 0xe6, 0x3b, 0xcb, 0x22, 0x71, 0x23, 0x47, 0x57, 0x63, 0x8,  0x70, | ||||
|     0x12, 0xf0, 0x33, 0xcf, 0x8d, 0x65, 0xf5, 0x5c, 0x35, 0x14, 0x40, 0x3b, | ||||
|     0x70, 0x10, 0x70, 0xb9, 0x8e, 0x81, 0xe3, 0x8,  0xf5, 0x46, 0xe0, 0x84, | ||||
|     0x3a, 0x51, 0x0,  0x77, 0x79, 0xca, 0xf9, 0x8,  0xd8, 0x2a, 0xa5, 0x32, | ||||
|     0x1a, 0x81, 0xe7, 0xcb, 0x70, 0x30, 0x66, 0xb5, 0x21, 0xf7, 0x2d, 0xb1, | ||||
|     0x61, 0x8d, 0x1,  0x56, 0x26, 0x2c, 0xf3, 0x23, 0x60, 0x77, 0xe0, 0xd6, | ||||
|     0x84, 0xa,  0xab, 0x2d, 0x86, 0x12, 0xe8, 0x2e, 0x72, 0x34, 0x1,  0xd8, | ||||
|     0x50, 0xc2, 0xfb, 0xea, 0x0,  0xae, 0x49, 0x4b, 0x4e, 0x7d, 0xa,  0xe0, | ||||
|     0x5f, 0xb5, 0x97, 0x5f, 0xe0, 0xb9, 0x89, 0xd5, 0xc0, 0x6e, 0x55, 0x50, | ||||
|     0x0,  0x39, 0xed, 0x31, 0xda, 0x13, 0x56, 0xd2, 0x5a, 0xed, 0x95, 0x6a, | ||||
|     0xad, 0x0,  0xfe, 0x33, 0xa2, 0xd1, 0x3d, 0x46, 0x7a, 0xd3, 0x8e, 0x13, | ||||
|     0x13, 0x36, 0xa4, 0xb0, 0xfb, 0xb9, 0xbc, 0x44, 0x61, 0xaf, 0xf6, 0xb1, | ||||
|     0xa4, 0x88, 0xf2, 0xec, 0xe,  0x72, 0x74, 0x4a, 0x9,  0xf7, 0x12, 0x7c, | ||||
|     0x5f, 0x57, 0x54, 0xca, 0x7,  0x0,  0x12, 0xd,  0xf7, 0x9,  0x70, 0x89, | ||||
|     0x16, 0x16, 0x64, 0xa0, 0x5a, 0x1,  0xd5, 0x8,  0x4c, 0xd9, 0x8b, 0xe4, | ||||
|     0x53, 0x60, 0x3,  0x80, 0x1b, 0xa8, 0xfd, 0xd4, 0xd9, 0x93, 0x84, 0x7b, | ||||
|     0xef, 0x33, 0xc0, 0x57, 0x81, 0xb7, 0xd5, 0x24, 0xdd, 0xa4, 0xcc, 0x72, | ||||
|     0xee, 0x41, 0x62, 0x1a, 0x4a, 0x25, 0xa3, 0x63, 0xdf, 0xee, 0x10, 0x6d, | ||||
|     0xb8, 0x2d, 0x70, 0x5c, 0x37, 0x96, 0xa3, 0xcf, 0x0,  0xb7, 0x94, 0xf9, | ||||
|     0x9b, 0x19, 0xe0, 0x7c, 0x60, 0x74, 0xa5, 0x14, 0x40, 0x3e, 0x1e, 0xfe, | ||||
|     0x77, 0xc0, 0x4b, 0x9e, 0xef, 0x1c, 0xa7, 0xe6, 0x5f, 0xb5, 0xf8, 0x8, | ||||
|     0xb8, 0x8,  0x9,  0x88, 0x19, 0x9,  0x7c, 0xc7, 0xb1, 0x34, 0xc2, 0x18, | ||||
|     0xd,  0x1c, 0x50, 0x63, 0x61, 0x7d, 0x15, 0xf8, 0x73, 0xc4, 0xf9, 0x21, | ||||
|     0xc0, 0x2f, 0x80, 0x39, 0x6a, 0x12, 0x96, 0xaa, 0x8,  0xd6, 0x2,  0xd7, | ||||
|     0x3b, 0x3d, 0xc4, 0x5c, 0xe0, 0x26, 0xe0, 0x34, 0xe0, 0x4b, 0x3a, 0xd6, | ||||
|     0x1c, 0xad, 0xe3, 0xfd, 0xc5, 0x9e, 0xdf, 0x18, 0x8,  0x7c, 0xad, 0x8c, | ||||
|     0x67, 0x5d, 0xf,  0x5c, 0x7,  0x1c, 0xa2, 0xbd, 0xe6, 0xf1, 0xea, 0xc8, | ||||
|     0x8c, 0xc3, 0x5f, 0xd5, 0xea, 0x1c, 0x85, 0x44, 0x4d, 0x5e, 0xac, 0x56, | ||||
|     0xa6, 0x4f, 0xf8, 0xf,  0xef, 0xa6, 0x72, 0x94, 0x1,  0xae, 0xf4, 0x38, | ||||
|     0x5f, 0x73, 0x2a, 0x2f, 0x67, 0x6a, 0x3d, 0x8c, 0x4,  0xbe, 0x5,  0xdc, | ||||
|     0xe7, 0xe9, 0x44, 0xfa, 0x0,  0x3f, 0x2e, 0xb7, 0xbd, 0xfb, 0x86, 0x0, | ||||
|     0x57, 0x3b, 0xdf, 0x39, 0x8,  0xff, 0x54, 0xe1, 0x4b, 0x74, 0xd,  0x6d, | ||||
|     0x4d, 0x7b, 0x8,  0x90, 0x3,  0x3e, 0x4,  0x76, 0xf5, 0x8c, 0x7f, 0xa7, | ||||
|     0x44, 0x98, 0xbf, 0x37, 0xd7, 0x78, 0x8,  0x90, 0xef, 0x79, 0x56, 0xc7, | ||||
|     0x34, 0xed, 0x16, 0xaa, 0x39, 0x5f, 0x8a, 0x22, 0x18, 0xa0, 0xde, 0xff, | ||||
|     0x3d, 0x8a, 0x7c, 0x6f, 0x57, 0x75, 0xa8, 0x85, 0x95, 0x7f, 0x47, 0x89, | ||||
|     0xef, 0x67, 0x3,  0x70, 0x70, 0xc8, 0x35, 0x83, 0x90, 0x69, 0xcc, 0xa8, | ||||
|     0x67, 0x7e, 0xc1, 0xd3, 0x20, 0x8e, 0x8a, 0x30, 0x93, 0xe7, 0x44, 0x38, | ||||
|     0x2e, 0xeb, 0x59, 0x8e, 0xf6, 0xd4, 0x76, 0x10, 0x66, 0xd2, 0xdf, 0x16, | ||||
|     0x61, 0x15, 0x9c, 0xe1, 0xf1, 0x5d, 0xac, 0x7,  0x3e, 0x55, 0x9,  0x5, | ||||
|     0x70, 0x6b, 0x40, 0x6b, 0x4d, 0x89, 0x70, 0x48, 0x9c, 0x1e, 0xa2, 0x0, | ||||
|     0x9e, 0x4e, 0x51, 0x1,  0x64, 0xb5, 0xe7, 0xf2, 0xb1, 0x9d, 0x7a, 0xb3, | ||||
|     0xc3, 0xae, 0x7d, 0xdd, 0x23, 0x28, 0xd5, 0x9e, 0xbf, 0x3d, 0x46, 0x7b, | ||||
|     0xe9, 0xb8, 0x63, 0xbc, 0x79, 0xc0, 0xd7, 0x2b, 0x68, 0x99, 0x4c, 0x2b, | ||||
|     0x61, 0x76, 0x22, 0xaa, 0x61, 0x4d, 0x29, 0xd1, 0x3f, 0xd1, 0x16, 0xd1, | ||||
|     0xbb, 0x36, 0x22, 0x2b, 0x23, 0x7d, 0x33, 0x2,  0x7d, 0xbb, 0xa1, 0x1c, | ||||
|     0x5d, 0x14, 0x31, 0xeb, 0x30, 0xb0, 0x88, 0x63, 0xfd, 0x39, 0xcf, 0x33, | ||||
|     0x1d, 0x5b, 0xc9, 0x21, 0x40, 0xde, 0x34, 0xb9, 0x98, 0xf0, 0xb9, 0xe8, | ||||
|     0x6,  0xe0, 0x52, 0xa,  0xa7, 0x5,  0xf3, 0x8d, 0x3d, 0x2d, 0xda, 0x80, | ||||
|     0x87, 0x8a, 0x98, 0x74, 0x4f, 0x78, 0xce, 0xed, 0x8e, 0x4c, 0x91, 0xd5, | ||||
|     0x9a, 0x87, 0xb5, 0x87, 0x7c, 0x2f, 0x81, 0x62, 0x7e, 0x18, 0xf8, 0x35, | ||||
|     0x95, 0x59, 0x9e, 0xbc, 0xc2, 0xf3, 0x79, 0x29, 0x96, 0x47, 0x16, 0xb8, | ||||
|     0x37, 0xe2, 0xfc, 0xf3, 0xf8, 0xa3, 0x18, 0xe7, 0xa8, 0xd9, 0x1b, 0x46, | ||||
|     0x47, 0xc4, 0xf0, 0xa9, 0x5f, 0x9,  0xfe, 0xa7, 0x5a, 0xcb, 0x51, 0x46, | ||||
|     0xad, 0xe9, 0x30, 0x9e, 0x1,  0xd6, 0x14, 0xa9, 0xe3, 0xa7, 0x3c, 0xbf, | ||||
|     0x39, 0xbc, 0x12, 0xa,  0x20, 0xf8, 0xb0, 0xb,  0xd4, 0x19, 0x12, 0x36, | ||||
|     0x4e, 0xda, 0x9,  0x59, 0xae, 0xea, 0x2a, 0x80, 0x96, 0x14, 0x85, 0x75, | ||||
|     0x19, 0xb0, 0xa8, 0xc8, 0x77, 0x5e, 0xf6, 0x7c, 0xde, 0x87, 0xf2, 0xa3, | ||||
|     0xf,  0x77, 0x6,  0x3e, 0x17, 0xf3, 0xd8, 0x2e, 0xe2, 0x77, 0x5e, 0x1, | ||||
|     0x46, 0x0,  0x57, 0x11, 0x6f, 0xc5, 0x61, 0x3,  0x30, 0x1e, 0x9,  0x8e, | ||||
|     0x89, 0xbb, 0x44, 0x79, 0x4,  0xf0, 0x13, 0x55, 0x1e, 0x73, 0xb4, 0xa7, | ||||
|     0x6c, 0xd,  0xe9, 0x81, 0x27, 0x44, 0x8,  0x69, 0xd2, 0x86, 0xd5, 0x1a, | ||||
|     0xd1, 0x88, 0x41, 0xbc, 0xf6, 0x3e, 0x5,  0xf0, 0x92, 0x9a, 0xf9, 0x3e, | ||||
|     0x16, 0x45, 0xd4, 0x4d, 0x77, 0x93, 0xa3, 0x26, 0x75, 0x0,  0x86, 0x31, | ||||
|     0x2e, 0x86, 0x55, 0x78, 0xb1, 0xe7, 0xda, 0xad, 0xc2, 0xa,  0x4a, 0xc3, | ||||
|     0x59, 0x11, 0xe4, 0x7a, 0x64, 0xfa, 0xe2, 0xd3, 0x21, 0xdf, 0x3d, 0x7, | ||||
|     0x99, 0xf3, 0x7e, 0xd7, 0x71, 0x8,  0xa5, 0xe9, 0xfc, 0x2b, 0x16, 0x7, | ||||
|     0xbf, 0x40, 0x2b, 0x29, 0x13, 0x22, 0x28, 0xe5, 0xce, 0xb7, 0xdf, 0xa2, | ||||
|     0xe3, 0xd1, 0x38, 0xdc, 0x88, 0x84, 0xff, 0x46, 0x39, 0xeb, 0x2e, 0xd4, | ||||
|     0x21, 0xd6, 0xf9, 0xda, 0xc0, 0x8b, 0xf5, 0x2c, 0x5f, 0x52, 0x87, 0xde, | ||||
|     0x84, 0x22, 0x8e, 0xaa, 0x6b, 0xd5, 0x79, 0x54, 0xed, 0x25, 0xc3, 0x4b, | ||||
|     0x89, 0x8e, 0x54, 0xdc, 0x10, 0x71, 0xdf, 0xef, 0x16, 0xf9, 0xed, 0x96, | ||||
|     0x1e, 0x24, 0x47, 0x8d, 0x54, 0x26, 0xe5, 0x5c, 0xdf, 0x4a, 0x58, 0x0, | ||||
|     0x61, 0xac, 0x51, 0x2d, 0xe4, 0x9b, 0x16, 0xbc, 0xc2, 0xa9, 0xb8, 0x75, | ||||
|     0x29, 0x96, 0xbb, 0x36, 0x42, 0x80, 0x8a, 0x7d, 0x27, 0xa3, 0xe6, 0x62, | ||||
|     0xbd, 0xb1, 0x48, 0x95, 0xe6, 0x30, 0x55, 0xac, 0xeb, 0x8a, 0x28, 0xe3, | ||||
|     0x53, 0x22, 0xc6, 0xca, 0xe3, 0x91, 0x10, 0xd6, 0xfd, 0xa9, 0x4d, 0xbe, | ||||
|     0x80, 0x8f, 0x3d, 0x32, 0x11, 0x87, 0x55, 0x55, 0xbc, 0xcf, 0x5a, 0xcb, | ||||
|     0xd1, 0xa6, 0x54, 0x6e, 0xa1, 0x5e, 0x55, 0x14, 0x0,  0xc0, 0xfd, 0x3a, | ||||
|     0xa6, 0xb,  0xe3, 0x9b, 0xc0, 0x17, 0x2b, 0xa0, 0xb9, 0xfb, 0xd4, 0xf8, | ||||
|     0x99, 0x2b, 0xc9, 0x12, 0x75, 0x4c, 0xed, 0x81, 0xc4, 0xee, 0x67, 0x23, | ||||
|     0xcc, 0xc7, 0x53, 0x43, 0x3e, 0xdf, 0x57, 0xad, 0x89, 0xbe, 0x35, 0x7c, | ||||
|     0x86, 0xd,  0x31, 0x1a, 0x96, 0x8f, 0x8d, 0x55, 0xbc, 0xcf, 0x5a, 0xcb, | ||||
|     0x51, 0xd5, 0x64, 0xb4, 0x92, 0x5,  0x75, 0xa8, 0xe9, 0xda, 0xe6, 0x11, | ||||
|     0xd2, 0xab, 0xb4, 0xa2, 0x37, 0xa4, 0x58, 0xe6, 0x66, 0x31, 0x9e, 0x69, | ||||
|     0xa0, 0xa7, 0xf7, 0x4b, 0xdb, 0x1f, 0x51, 0x29, 0x9a, 0xb5, 0x81, 0x9f, | ||||
|     0x19, 0x31, 0x26, 0xde, 0x8f, 0xc2, 0x69, 0xa2, 0x8c, 0xe,  0x27, 0x7c, | ||||
|     0x3d, 0xd3, 0xdf, 0x11, 0xaf, 0xf3, 0x48, 0xc4, 0x49, 0xdb, 0xe8, 0x8c, | ||||
|     0xf1, 0x27, 0xa5, 0x2c, 0x13, 0xdd, 0x81, 0x5a, 0xcb, 0x51, 0x4b, 0x84, | ||||
|     0x82, 0x3f, 0xdf, 0x79, 0x37, 0x49, 0x8f, 0xf3, 0xaa, 0xad, 0x69, 0x5e, | ||||
|     0x6,  0x7e, 0xeb, 0x39, 0x37, 0x52, 0xcd, 0xd5, 0x34, 0x15, 0xc0, 0x8e, | ||||
|     0x14, 0x8f, 0x9a, 0x1a, 0xea, 0x79, 0x71, 0x59, 0x75, 0xfe, 0x74, 0x17, | ||||
|     0x26, 0x23, 0x81, 0x1f, 0x61, 0x6c, 0x1f, 0xa8, 0x87, 0xfe, 0x48, 0xd0, | ||||
|     0x8d, 0x6f, 0x5c, 0x3e, 0x6,  0x9,  0x3a, 0x99, 0xa9, 0xa6, 0x76, 0xb6, | ||||
|     0x88, 0x8f, 0xa7, 0xa7, 0x53, 0x6b, 0x39, 0x6a, 0x8d, 0xf8, 0x8d, 0xe1, | ||||
|     0xdd, 0xc9, 0xd4, 0xc8, 0x21, 0x53, 0x7f, 0x2b, 0x3d, 0x65, 0x5f, 0xa2, | ||||
|     0xc2, 0x99, 0x16, 0x3,  0x91, 0x0,  0x8a, 0xa8, 0x31, 0xf2, 0x81, 0x11, | ||||
|     0x26, 0xe6, 0xe2, 0x32, 0xcb, 0x3f, 0xba, 0x1c, 0x6d, 0x5c, 0x42, 0xdd, | ||||
|     0xbe, 0xe8, 0x39, 0xd7, 0x18, 0x22, 0xd0, 0xbe, 0xd9, 0x81, 0xbb, 0x90, | ||||
|     0x58, 0x2,  0x1f, 0x83, 0x7b, 0xa1, 0x2,  0xa8, 0xb5, 0x1c, 0xb5, 0x23, | ||||
|     0x41, 0x51, 0x61, 0x1c, 0x9a, 0x66, 0x9b, 0xa9, 0xc6, 0x58, 0xe3, 0x3, | ||||
|     0xc4, 0xeb, 0x9c, 0xf3, 0x68, 0xda, 0x9,  0x29, 0x96, 0xd5, 0x84, 0x84, | ||||
|     0x44, 0xfa, 0xd8, 0x81, 0xf0, 0x28, 0x34, 0x90, 0xa9, 0xb0, 0x5a, 0xd, | ||||
|     0x1,  0x36, 0x1,  0xfe, 0x1d, 0xd8, 0x26, 0xe1, 0x75, 0xbe, 0x54, 0xe0, | ||||
|     0xcb, 0x3,  0xbd, 0xf8, 0x80, 0x88, 0x9e, 0x3c, 0x6a, 0x5d, 0xc0, 0x10, | ||||
|     0xfc, 0xf3, 0xd1, 0x3d, 0x99, 0x5a, 0xcb, 0x51, 0x3e, 0x40, 0xc8, 0xf7, | ||||
|     0xce, 0x27, 0x74, 0x27, 0x5,  0x0,  0x12, 0x1e, 0xf9, 0xae, 0x47, 0x93, | ||||
|     0xe,  0x4a, 0xb9, 0xac, 0x7f, 0x43, 0xe6, 0xd9, 0xc3, 0x7a, 0xc5, 0xab, | ||||
|     0xf1, 0x47, 0x51, 0xcd, 0xa8, 0xe1, 0x18, 0xb5, 0x9,  0x49, 0xf2, 0xb0, | ||||
|     0x10, 0x78, 0x0,  0x89, 0x6,  0x2c, 0x16, 0x68, 0xb3, 0x1b, 0x5d, 0x23, | ||||
|     0x2b, 0xf3, 0xbc, 0x19, 0xf0, 0xf,  0xac, 0xc7, 0xef, 0x7c, 0x3b, 0xc0, | ||||
|     0xa3, 0x1c, 0x6,  0x21, 0xb,  0x87, 0xb6, 0xa6, 0x77, 0x52, 0x6b, 0x39, | ||||
|     0x9a, 0xa6, 0x43, 0x81, 0xb0, 0x36, 0x73, 0x15, 0x12, 0xf,  0x50, 0x8c, | ||||
|     0x3e, 0x48, 0xae, 0x82, 0xff, 0xf6, 0x59, 0x2c, 0x4d, 0x55, 0xaa, 0xcc, | ||||
|     0xb5, 0xc8, 0x72, 0xd7, 0xdf, 0x57, 0x41, 0xe9, 0x6c, 0x89, 0xa4, 0xec, | ||||
|     0xfe, 0x5,  0xb2, 0xc2, 0x6e, 0x35, 0x12, 0x8f, 0x70, 0x96, 0x6a, 0xed, | ||||
|     0x30, 0x61, 0x6f, 0xd3, 0x7b, 0xab, 0x35, 0xfd, 0xb4, 0xe7, 0xf9, 0x96, | ||||
|     0x8e, 0xc5, 0xff, 0x8c, 0x84, 0x4a, 0xcf, 0x43, 0xa6, 0xd0, 0xd6, 0x6a, | ||||
|     0x83, 0x1c, 0xad, 0xcf, 0xb3, 0x8d, 0x67, 0xc,  0x3a, 0x35, 0xf0, 0xd9, | ||||
|     0x87, 0xea, 0x6b, 0x9,  0xf3, 0x6e, 0x9f, 0xa8, 0xca, 0xe2, 0x3e, 0xf5, | ||||
|     0x7,  0xc,  0x56, 0x9f, 0xc0, 0x99, 0xda, 0xd3, 0xf5, 0x56, 0x6a, 0x2d, | ||||
|     0x47, 0x73, 0x81, 0x7,  0x9,  0xcf, 0x69, 0xd0, 0x1f, 0x59, 0x7c, 0x37, | ||||
|     0x1e, 0x99, 0x6d, 0x9b, 0xa3, 0xb2, 0xb1, 0x89, 0xca, 0xc4, 0xee, 0xaa, | ||||
|     0xd8, 0xf,  0xd3, 0xe7, 0xe8, 0x50, 0x2b, 0xbc, 0x2c, 0x7c, 0x6b, 0x1, | ||||
|     0x1e, 0x88, 0x79, 0x7d, 0xa3, 0x56, 0x64, 0xdc, 0x4,  0xb,  0xa5, 0x2e, | ||||
|     0x6,  0x2a, 0xe5, 0x98, 0x46, 0xf2, 0xb8, 0xf6, 0x34, 0xd7, 0x2,  0xc, | ||||
|     0x50, 0xb3, 0x31, 0x8d, 0x67, 0x79, 0x2d, 0xc4, 0x7a, 0x68, 0xd0, 0x9e, | ||||
|     0x29, 0xcd, 0x3a, 0x7b, 0x32, 0xe2, 0xf9, 0x4b, 0xad, 0xb3, 0x2d, 0x22, | ||||
|     0xea, 0xe1, 0xd4, 0x22, 0x75, 0xf8, 0x3d, 0xcf, 0x75, 0x2d, 0x11, 0xd6, | ||||
|     0x54, 0xbd, 0xcb, 0xd1, 0x8e, 0x48, 0x50, 0x52, 0xb9, 0xf7, 0xe5, 0x4d, | ||||
|     0x15, 0x5f, 0xcd, 0x39, 0xf1, 0xe,  0xe0, 0x2,  0x8f, 0x59, 0x53, 0x4b, | ||||
|     0x96, 0x21, 0xe1, 0xc9, 0x39, 0xba, 0x3f, 0x9f, 0x68, 0xaf, 0xb0, 0x31, | ||||
|     0xc4, 0x2a, 0x98, 0x44, 0xf2, 0x20, 0x9c, 0x1c, 0xb2, 0xc6, 0xe0, 0x6f, | ||||
|     0x18, 0xb5, 0x90, 0xa3, 0xc5, 0x48, 0xa6, 0xa1, 0xb5, 0x95, 0xba, 0xe9, | ||||
|     0x6a, 0x7,  0xc5, 0xcc, 0xd4, 0x71, 0x65, 0xa5, 0xb8, 0x49, 0xcd, 0xb6, | ||||
|     0xb8, 0xac, 0x51, 0x13, 0x6b, 0x7e, 0xf,  0x10, 0xc0, 0x7c, 0x6e, 0x3a, | ||||
|     0xdf, 0xba, 0xfa, 0x3f, 0x20, 0x6b, 0x5,  0x72, 0x9,  0x1a, 0xff, 0x83, | ||||
|     0xc8, 0xa,  0xbd, 0xe9, 0xbd, 0xac, 0x31, 0xd7, 0x93, 0x1c, 0xcd, 0x40, | ||||
|     0x72, 0x2f, 0x34, 0xf7, 0x4,  0x5,  0x90, 0x3,  0x2e, 0xc3, 0x9f, 0x49, | ||||
|     0xb8, 0x5c, 0x6,  0x6b, 0x23, 0x98, 0x1c, 0xa3, 0xb7, 0x7b, 0x7,  0x99, | ||||
|     0x1b, 0x7f, 0xb2, 0xe,  0x4,  0x6e, 0x3,  0x92, 0xb0, 0xe1, 0xed, 0x12, | ||||
|     0x7a, 0x90, 0x16, 0x24, 0x13, 0xec, 0xde, 0xf8, 0xa7, 0x5,  0x51, 0x33, | ||||
|     0xf0, 0x84, 0x98, 0x96, 0x40, 0xbb, 0x8e, 0x19, 0xc7, 0xa9, 0x35, 0x31, | ||||
|     0x9d, 0xe8, 0x85, 0x38, 0x3d, 0x8d, 0x7a, 0x93, 0xa3, 0x67, 0x81, 0xcf, | ||||
|     0x23, 0xeb, 0x47, 0x92, 0x5a, 0x3,  0x2b, 0xf5, 0x5d, 0xce, 0xe,  0x3b, | ||||
|     0xd9, 0x54, 0x83, 0xca, 0x6d, 0x46, 0xbc, 0x98, 0x57, 0x91, 0x7e, 0x90, | ||||
|     0xc9, 0x10, 0xc4, 0xe3, 0xfd, 0x5d, 0x64, 0x7e, 0xfb, 0xc,  0xc4, 0xfb, | ||||
|     0xb9, 0xa3, 0x3a, 0xc0, 0x3e, 0x46, 0xd2, 0x3b, 0xdf, 0xaf, 0xce, 0x9a, | ||||
|     0x7a, 0x19, 0x8e, 0x74, 0x20, 0x2b, 0x28, 0x6f, 0x40, 0x56, 0x81, 0x1d, | ||||
|     0x8c, 0x44, 0xf3, 0xd,  0x47, 0xa6, 0x7d, 0x36, 0x47, 0xe2, 0xc3, 0x3b, | ||||
|     0xd4, 0xcc, 0x5f, 0x84, 0x78, 0xfa, 0x9f, 0xd6, 0x5e, 0x3d, 0xae, 0x42, | ||||
|     0x5d, 0x8f, 0x38, 0xf7, 0xee, 0xd4, 0xbf, 0x63, 0xb5, 0x6e, 0xfa, 0xaa, | ||||
|     0x93, 0x6b, 0xbe, 0xa,  0xdb, 0x64, 0x55, 0x46, 0x79, 0x66, 0x21, 0x8b, | ||||
|     0x5f, 0x86, 0xf5, 0x12, 0x5,  0x50, 0x8f, 0x72, 0xb4, 0x1c, 0x89, 0x1d, | ||||
|     0xb9, 0x14, 0x89, 0x37, 0x39, 0x4,  0x49, 0x20, 0xb3, 0xb,  0x32, 0x23, | ||||
|     0xd1, 0xa8, 0x9d, 0xc1, 0x72, 0x64, 0x36, 0xe9, 0x75, 0x24, 0x9d, 0xfc, | ||||
|     0xc,  0xba, 0x47, 0x84, 0x6b, 0x22, 0x7c, 0xe,  0x95, 0xa7, 0xe9, 0xbe, | ||||
|     0xb1, 0xfe, 0x86, 0xc9, 0x51, 0xd5, 0xe9, 0x69, 0xf,  0x69, 0x3b, 0xe2, | ||||
|     0x1a, 0x26, 0x47, 0xbd, 0x58, 0x1,  0x18, 0x86, 0x61, 0xa,  0xc0, 0x30, | ||||
|     0xc,  0x53, 0x0,  0x86, 0x61, 0x98, 0x2,  0x30, 0xc,  0xc3, 0x14, 0x80, | ||||
|     0x61, 0x18, 0xa6, 0x0,  0xc,  0xc3, 0x30, 0x5,  0xd0, 0x95, 0x6d, 0x91, | ||||
|     0x20, 0x8b, 0x59, 0x48, 0x68, 0x67, 0x3b, 0x92, 0x2a, 0x6b, 0x2a, 0x92, | ||||
|     0x44, 0x33, 0xc8, 0x10, 0x8a, 0xef, 0xd8, 0x7a, 0x49, 0x44, 0x79, 0x9f, | ||||
|     0x43, 0x2,  0x7f, 0x5e, 0x43, 0x82, 0x7b, 0x3a, 0x90, 0xa8, 0xb3, 0x47, | ||||
|     0x2a, 0xf0, 0x5e, 0x8e, 0xd7, 0x32, 0x8a, 0x2d, 0xb4, 0x4a, 0x5a, 0x7, | ||||
|     0x20, 0x41, 0x28, 0x17, 0x22, 0xf9, 0x1f, 0x57, 0x6a, 0x9d, 0x2c, 0x42, | ||||
|     0x2,  0x64, 0xe,  0x31, 0xb1, 0x32, 0x2a, 0x41, 0x9a, 0x2b, 0xf4, 0x32, | ||||
|     0xc8, 0x4a, 0xb3, 0xa8, 0x6d, 0xab, 0x5b, 0xe9, 0x9a, 0x84, 0x61, 0xf, | ||||
|     0xfc, 0xdb, 0xa0, 0x45, 0x29, 0x80, 0x26, 0x64, 0x3d, 0x79, 0x1b, 0x95, | ||||
|     0x5f, 0x65, 0xb8, 0x9,  0x92, 0x8b, 0xc1, 0xdd, 0x2a, 0x2a, 0x4c, 0x1, | ||||
|     0x94, 0x5a, 0x7,  0xdb, 0xd1, 0x19, 0xbe, 0xec, 0xdb, 0xd,  0xea, 0xe2, | ||||
|     0x5e, 0x22, 0x47, 0x46, 0x37, 0xa5, 0x1f, 0x85, 0xfb, 0x13, 0x7e, 0x82, | ||||
|     0xec, 0xa,  0x73, 0xf,  0x92, 0x89, 0xd7, 0xdd, 0xe6, 0x7c, 0x67, 0xe7, | ||||
|     0xba, 0x3,  0xe9, 0xdc, 0x8f, 0x6e, 0x25, 0x70, 0x3b, 0xb2, 0x67, 0x9b, | ||||
|     0x7b, 0x7c, 0x3d, 0xa4, 0xa1, 0x5d, 0x47, 0xe7, 0xe6, 0x1b, 0x59, 0xed, | ||||
|     0x2d, 0xa7, 0x23, 0x31, 0xfa, 0x77, 0x93, 0x5e, 0x88, 0xf4, 0xae, 0xc8, | ||||
|     0x5e, 0x7a, 0xc1, 0x8d, 0x3e, 0xc2, 0x14, 0x40, 0xa9, 0x75, 0x70, 0x3, | ||||
|     0x85, 0x4b, 0x4e, 0x9f, 0x44, 0x32, 0x16, 0x2f, 0xa4, 0x70, 0x2f, 0xc0, | ||||
|     0x61, 0x26, 0x66, 0x46, 0x3d, 0xb3, 0xd,  0xf0, 0x16, 0x92, 0x77, 0x7f, | ||||
|     0xb,  0xe7, 0xf3, 0xa1, 0x48, 0x1e, 0xfe, 0x7c, 0x63, 0x3d, 0xc9, 0x39, | ||||
|     0x77, 0x94, 0xd3, 0xb8, 0x5e, 0x88, 0xd9, 0x63, 0xec, 0xe7, 0x58, 0xd, | ||||
|     0x6b, 0x80, 0x93, 0x8b, 0x5c, 0x77, 0xb2, 0xd3, 0x7b, 0x77, 0x0,  0xdf, | ||||
|     0xe,  0x28, 0x93, 0x5b, 0x9d, 0x7b, 0x58, 0x45, 0xe7, 0x6e, 0x32, 0x87, | ||||
|     0x23, 0xc9, 0x3d, 0xf2, 0xf7, 0x3d, 0xcb, 0x51, 0x56, 0xbe, 0x21, 0x40, | ||||
|     0xd2, 0x3a, 0xc8, 0x20, 0xb1, 0xe6, 0xf9, 0x86, 0xfe, 0x5f, 0xce, 0x35, | ||||
|     0x5b, 0x22, 0x6b, 0x3e, 0xf2, 0xd7, 0xc4, 0xd9, 0x49, 0xf8, 0xab, 0xce, | ||||
|     0xb3, 0x5e, 0x86, 0xe4, 0x48, 0xb8, 0xe,  0x49, 0x66, 0xb2, 0x11, 0x49, | ||||
|     0x7a, 0x71, 0x1e, 0x9d, 0xeb, 0x57, 0x4a, 0xad, 0x1b, 0xc3, 0x8,  0x25, | ||||
|     0x2c, 0x5f, 0x7e, 0x1f, 0xe0, 0x7d, 0x47, 0xc8, 0xbf, 0xeb, 0x9c, 0x3b, | ||||
|     0xdd, 0xf9, 0x7c, 0x6a, 0xcc, 0x32, 0xee, 0x70, 0x1a, 0xc5, 0xb9, 0x31, | ||||
|     0x7d, 0x34, 0xf,  0x39, 0xe5, 0xbc, 0x4f, 0x67, 0xa,  0xb5, 0x3,  0xe8, | ||||
|     0xdc, 0x3d, 0x36, 0x8b, 0xe4, 0x14, 0xc4, 0x39, 0xb7, 0x46, 0x1b, 0xc6, | ||||
|     0xf5, 0x3a, 0x7e, 0x6f, 0x8b, 0xe1, 0x3,  0x48, 0x5a, 0x7,  0x93, 0x9d, | ||||
|     0xcf, 0x7f, 0x1c, 0xb0, 0x28, 0x16, 0xd0, 0xb9, 0xa9, 0xe7, 0x88, 0x84, | ||||
|     0xa,  0x60, 0x26, 0xb2, 0xbf, 0x5d, 0xd8, 0x6,  0x97, 0x77, 0x6a, 0x3, | ||||
|     0x2f, 0xb5, 0x6e, 0xc,  0x23, 0x36, 0xc3, 0xe8, 0x74, 0xf4, 0xb5, 0x7, | ||||
|     0x1c, 0x61, 0xe7, 0x3b, 0xc2, 0xb7, 0x54, 0x9d, 0x65, 0xad, 0x6a, 0x32, | ||||
|     0x3f, 0x80, 0x6c, 0xd3, 0x15, 0x6c, 0x48, 0xf3, 0xf5, 0xfb, 0xeb, 0x90, | ||||
|     0x9c, 0x7e, 0xb7, 0x20, 0x19, 0x5f, 0x36, 0x22, 0x9b, 0x81, 0x5e, 0x89, | ||||
|     0xac, 0xfc, 0x73, 0xd9, 0x29, 0xd0, 0x9b, 0x5f, 0xab, 0x63, 0xfb, 0x57, | ||||
|     0x9c, 0xf2, 0x9f, 0xa2, 0x6b, 0xba, 0xaf, 0x7f, 0xa1, 0x33, 0xb1, 0xe5, | ||||
|     0x81, 0x31, 0x2c, 0x80, 0x52, 0xea, 0xe0, 0xb,  0x8e, 0x75, 0xb0, 0x6, | ||||
|     0x38, 0x1b, 0x59, 0xc1, 0xf8, 0xa0, 0xde, 0x6b, 0x16, 0xc9, 0x92, 0xd3, | ||||
|     0x90, 0x50, 0x1,  0xe4, 0x7b, 0xf5, 0x3f, 0xe9, 0xb0, 0xe8, 0x83, 0xc0, | ||||
|     0x50, 0xe3, 0xb0, 0x32, 0xeb, 0xc6, 0x30, 0x8a, 0xd2, 0x84, 0x6c, 0x9c, | ||||
|     0x99, 0x17, 0xa4, 0x97, 0x28, 0x4c, 0xb7, 0x7d, 0x2d, 0xc5, 0xd3, 0x30, | ||||
|     0xb9, 0xbd, 0xfc, 0xe,  0x4e, 0x43, 0x5a, 0x80, 0xe4, 0xfb, 0xb,  0xbb, | ||||
|     0xee, 0x45, 0xba, 0xee, 0xf2, 0x3b, 0xde, 0x69, 0x1c, 0xeb, 0xe9, 0x5c, | ||||
|     0xd3, 0x9f, 0x1f, 0xaf, 0xef, 0x51, 0xe4, 0x59, 0xc6, 0x94, 0xa8, 0x0, | ||||
|     0x8a, 0xd5, 0x1,  0xea, 0xe7, 0x58, 0xe1, 0x79, 0xfe, 0xdb, 0x89, 0xbf, | ||||
|     0x53, 0xae, 0xab, 0x0,  0xb2, 0xc0, 0x4f, 0x9d, 0x73, 0x43, 0x2,  0x7e, | ||||
|     0x85, 0xbb, 0x53, 0xac, 0x1b, 0xc3, 0x8,  0x35, 0xbd, 0x6f, 0x74, 0x4, | ||||
|     0x69, 0x35, 0xb0, 0x4f, 0xe0, 0x3b, 0x7,  0x23, 0x6b, 0xf2, 0x67, 0x22, | ||||
|     0x53, 0x5e, 0x93, 0xd5, 0x17, 0xe0, 0xf6, 0x62, 0xeb, 0xe9, 0xdc, 0xc8, | ||||
|     0x61, 0x1f, 0xa,  0x3d, 0xff, 0x59, 0xbd, 0x76, 0x32, 0xb2, 0x63, 0x6e, | ||||
|     0x36, 0x62, 0x78, 0xd0, 0x0,  0xfc, 0x8f, 0xc7, 0x24, 0xfe, 0x7e, 0x8c, | ||||
|     0xe7, 0x19, 0x5b, 0x82, 0x2,  0x88, 0x53, 0x7,  0xf9, 0xc6, 0x39, 0x2d, | ||||
|     0xc4, 0xd9, 0x38, 0x8f, 0xce, 0xed, 0xdf, 0x92, 0x2a, 0x80, 0xd6, 0x10, | ||||
|     0xc7, 0xa1, 0xeb, 0x70, 0x7c, 0xcd, 0x51, 0x44, 0xe5, 0xd6, 0x8d, 0x61, | ||||
|     0x14, 0x90, 0x4f, 0xbb, 0x9c, 0x75, 0x1a, 0xf1, 0xd1, 0x9,  0xae, 0x3f, | ||||
|     0x8a, 0xc2, 0xe9, 0xc1, 0x1f, 0xea, 0xe7, 0xa3, 0x9d, 0x46, 0x98, 0x45, | ||||
|     0xa6, 0x2,  0xf3, 0xde, 0xfe, 0x46, 0x3a, 0xd3, 0x75, 0xe5, 0x80, 0x3f, | ||||
|     0xd2, 0x75, 0x26, 0x60, 0x28, 0x5d, 0xa7, 0xe9, 0x9e, 0x21, 0x5e, 0x52, | ||||
|     0x97, 0xa4, 0xa,  0x20, 0x6e, 0x1d, 0xec, 0xe5, 0x98, 0xe7, 0x59, 0xe0, | ||||
|     0x9,  0xed, 0x9d, 0x5b, 0x1d, 0x2b, 0xe0, 0x72, 0xe2, 0xcd, 0x6a, 0xb8, | ||||
|     0xa,  0xa0, 0x25, 0xc4, 0x72, 0x38, 0xdb, 0x79, 0xee, 0xf,  0x2,  0x66, | ||||
|     0x7d, 0x39, 0x75, 0x63, 0x18, 0x5,  0xbd, 0xde, 0x75, 0x81, 0x5e, 0xef, | ||||
|     0xc8, 0x84, 0xbf, 0xd1, 0x88, 0x78, 0xdd, 0xf3, 0x82, 0x78, 0x43, 0x88, | ||||
|     0x5,  0xb0, 0x91, 0xae, 0x9b, 0x7a, 0x4c, 0x70, 0xae, 0x79, 0x23, 0x44, | ||||
|     0x78, 0xc7, 0x3a, 0x8e, 0xad, 0xfc, 0xf1, 0x2e, 0xe2, 0x71, 0x4f, 0x53, | ||||
|     0x1,  0xc4, 0xad, 0x83, 0xbe, 0x6a, 0x1,  0xe5, 0xc7, 0xeb, 0x67, 0x3b, | ||||
|     0xd,  0x7d, 0x84, 0xde, 0x5b, 0xfe, 0xdc, 0x29, 0x25, 0x28, 0x80, 0x60, | ||||
|     0xde, 0xfd, 0x73, 0x9d, 0xe7, 0x5e, 0x18, 0x50, 0x0,  0xe5, 0xd4, 0x8d, | ||||
|     0x61, 0xfc, 0x7f, 0xc3, 0x75, 0xa7, 0x8e, 0x96, 0x6a, 0xaf, 0x5d, 0x8a, | ||||
|     0xef, 0xe0, 0x75, 0x47, 0x10, 0x7f, 0xa6, 0x9f, 0x6f, 0x4d, 0xe7, 0x6, | ||||
|     0x1d, 0x6d, 0xc0, 0xa8, 0xc0, 0x75, 0x13, 0x9d, 0x6b, 0xfe, 0x12, 0x18, | ||||
|     0x6b, 0xf,  0x44, 0xa6, 0xc1, 0xf2, 0x3d, 0xad, 0x3b, 0x56, 0xbe, 0x2d, | ||||
|     0x46, 0xf,  0x1b, 0x57, 0x1,  0x24, 0xa9, 0x83, 0xbd, 0x1c, 0x85, 0xf6, | ||||
|     0x5e, 0x88, 0xa3, 0xed, 0x3b, 0xce, 0xef, 0x3c, 0x1e, 0xe3, 0x1e, 0x83, | ||||
|     0x43, 0x80, 0xe0, 0xa6, 0x1c, 0x37, 0x3b, 0xf5, 0x33, 0xd3, 0xa9, 0x9f, | ||||
|     0x72, 0xeb, 0xc6, 0x30, 0x68, 0x42, 0xd2, 0x5f, 0x67, 0x1d, 0x81, 0xde, | ||||
|     0xb3, 0x88, 0xb2, 0x18, 0x7,  0x6c, 0x15, 0x72, 0xee, 0x68, 0xa7, 0x61, | ||||
|     0x74, 0x38, 0xa6, 0x73, 0x3,  0x85, 0x53, 0x5b, 0xf,  0x39, 0xbd, 0xfc, | ||||
|     0x26, 0x48, 0x2e, 0xbe, 0x30, 0x27, 0x17, 0xc8, 0x54, 0x5e, 0xfe, 0xde, | ||||
|     0x9a, 0x91, 0xb9, 0xf8, 0x76, 0x47, 0x99, 0x7c, 0x25, 0x5,  0x5,  0x90, | ||||
|     0xb4, 0xe,  0x46, 0x39, 0xcf, 0xb9, 0x26, 0xc4, 0xd9, 0x76, 0xa5, 0xf3, | ||||
|     0x5b, 0x51, 0x7b, 0x8,  0xf8, 0x9c, 0x80, 0xd7, 0x4,  0xfc, 0xc,  0x8b, | ||||
|     0x9c, 0xfa, 0xb9, 0x33, 0xc5, 0xba, 0x31, 0x7a, 0x39, 0x7d, 0x91, 0x1d, | ||||
|     0x8c, 0xb3, 0x4e, 0xa3, 0x7d, 0x98, 0xae, 0x51, 0x7d, 0xb7, 0x21, 0xa1, | ||||
|     0xbd, 0xd,  0x7a, 0x4d, 0xb3, 0xf6, 0x54, 0xaf, 0xea, 0xf5, 0x93, 0x80, | ||||
|     0xe7, 0x1c, 0xe1, 0xcb, 0x9b, 0xf2, 0xfd, 0x2,  0x42, 0xee, 0xfa, 0x1, | ||||
|     0x66, 0x23, 0x49, 0x27, 0xe7, 0x38, 0xe5, 0xb7, 0x51, 0xb8, 0x89, 0x83, | ||||
|     0x6b, 0xde, 0x76, 0x20, 0x21, 0xbb, 0x19, 0x2d, 0x33, 0xe7, 0x34, 0xd6, | ||||
|     0x2d, 0xcb, 0x50, 0x0,  0xa5, 0xd4, 0xc1, 0xe6, 0x14, 0x6e, 0x5a, 0xf1, | ||||
|     0x9,  0x32, 0xfd, 0x39, 0x9,  0x99, 0xc9, 0x70, 0x9d, 0x9a, 0x17, 0x24, | ||||
|     0x1c, 0x2,  0xe4, 0xef, 0xe1, 0x29, 0xad, 0x9f, 0x5,  0xce, 0xe7, 0x6d, | ||||
|     0xc8, 0xac, 0x46, 0x5a, 0x75, 0x63, 0xf4, 0x72, 0x7c, 0x3b, 0x1e, 0x85, | ||||
|     0x1d, 0x73, 0xb4, 0xa7, 0xcc, 0x2b, 0x80, 0xa8, 0xef, 0xbe, 0x1f, 0xd2, | ||||
|     0x83, 0x66, 0xb4, 0x31, 0xb4, 0xe3, 0x9f, 0x3a, 0xfc, 0x89, 0x63, 0xb6, | ||||
|     0xba, 0xe6, 0x6d, 0xe,  0xf8, 0x3f, 0xc7, 0xf4, 0xdd, 0x11, 0xc9, 0x4e, | ||||
|     0x9b, 0x6f, 0x64, 0xb7, 0x47, 0x98, 0xbb, 0xc5, 0x14, 0x40, 0x29, 0x75, | ||||
|     0x0,  0x12, 0x67, 0xb0, 0x3e, 0xe2, 0xbb, 0x59, 0xc4, 0x43, 0xdf, 0x3f, | ||||
|     0xa1, 0x2,  0xf8, 0x98, 0xc2, 0x69, 0x3f, 0xf7, 0xf7, 0x6e, 0xd4, 0xe7, | ||||
|     0x4c, 0xab, 0x6e, 0xc,  0x53, 0x0,  0x89, 0x85, 0x3f, 0x83, 0x84, 0x9e, | ||||
|     0x4e, 0x45, 0x82, 0x7b, 0x5a, 0x54, 0x78, 0x57, 0x22, 0xab, 0xe2, 0x2e, | ||||
|     0xa0, 0x30, 0x9c, 0x36, 0xc8, 0x68, 0x64, 0x6f, 0xb7, 0xf,  0xb4, 0x41, | ||||
|     0x2e, 0x45, 0x36, 0x70, 0xc,  0xae, 0x9e, 0x73, 0x9d, 0x71, 0xeb, 0x42, | ||||
|     0xc6, 0xc5, 0x13, 0x3,  0x96, 0xc3, 0x11, 0x55, 0x56, 0x0,  0x20, 0x21, | ||||
|     0xb6, 0xbf, 0xd4, 0xcf, 0xd7, 0x69, 0x39, 0x4b, 0x91, 0x99, 0x8c, 0x13, | ||||
|     0xe8, 0x1a, 0x37, 0x10, 0x57, 0x1,  0xc,  0xd5, 0x3a, 0x5a, 0xa1, 0xf7, | ||||
|     0x3c, 0x1b, 0xd9, 0xfe, 0xab, 0x21, 0xe5, 0xba, 0x31, 0xc,  0xa3, 0xe, | ||||
|     0x70, 0x15, 0xc0, 0x7a, 0x8a, 0xef, 0x8e, 0x6c, 0xa4, 0x80, 0x2d, 0x79, | ||||
|     0x34, 0xea, 0x11, 0x33, 0xd7, 0x4d, 0x1,  0x18, 0x86, 0x61, 0xa,  0xc0, | ||||
|     0x30, 0xc,  0x53, 0x0,  0x86, 0x61, 0xd8, 0x58, 0x2b, 0x9,  0xc3, 0x10, | ||||
|     0xcf, 0x74, 0xb1, 0xa5, 0xa0, 0xf9, 0xe9, 0xb7, 0x75, 0x88, 0xc7, 0xb9, | ||||
|     0x19, 0x59, 0xc8, 0x32, 0xb,  0x99, 0x87, 0x9e, 0x63, 0x62, 0x62, 0x18, | ||||
|     0xdd, 0x53, 0x1,  0xc4, 0x9d, 0xda, 0x8a, 0x9a, 0xc7, 0x7e, 0x13, 0x59, | ||||
|     0x72, 0xda, 0x68, 0x55, 0x6a, 0x18, 0xbd, 0x4b, 0x1,  0xb8, 0x8a, 0xe0, | ||||
|     0x4f, 0x58, 0x44, 0x99, 0x61, 0xf4, 0x4a, 0x5,  0x90, 0x3f, 0xa6, 0x63, | ||||
|     0x7e, 0x13, 0xc3, 0xe8, 0xb5, 0xa,  0xa0, 0x1d, 0x49, 0x4,  0x62, 0x18, | ||||
|     0x3d, 0x82, 0xde, 0x9a, 0x30, 0xe1, 0x42, 0xe0, 0x51, 0xe7, 0xff, 0x3e, | ||||
|     0xc0, 0x60, 0x24, 0x9c, 0xf4, 0x38, 0x24, 0xa9, 0x64, 0x98, 0x83, 0xb4, | ||||
|     0x11, 0xc9, 0xb5, 0x37, 0xc3, 0x44, 0xc7, 0x30, 0xba, 0xaf, 0x5,  0x70, | ||||
|     0x62, 0xc4, 0x75, 0x19, 0x24, 0xc5, 0x75, 0xd6, 0x73, 0xed, 0xd3, 0x36, | ||||
|     0xc,  0x30, 0x7a, 0xa,  0x26, 0xc8, 0x5d, 0xc9, 0x21, 0x6b, 0xd9, 0x57, | ||||
|     0x78, 0xce, 0x6f, 0x41, 0xfc, 0xe9, 0xd3, 0x3d, 0x91, 0x4c, 0x36, 0xbf, | ||||
|     0x41, 0x96, 0x6,  0x2f, 0x41, 0x16, 0xe,  0xb5, 0x1,  0xcb, 0x91, 0x5, | ||||
|     0x2e, 0x53, 0x90, 0x8c, 0x39, 0x3,  0x13, 0xdc, 0x63, 0x70, 0x47, 0x9b, | ||||
|     0x2c, 0x70, 0x5a, 0xe0, 0x3b, 0x9f, 0x45, 0x56, 0x16, 0x3e, 0x8b, 0xac, | ||||
|     0xa5, 0xdf, 0x80, 0x4c, 0x75, 0xfe, 0xd,  0xb8, 0x17, 0x38, 0x36, 0x81, | ||||
|     0x5,  0x58, 0xed, 0xf2, 0xc2, 0x18, 0x9,  0xfc, 0x1c, 0x49, 0xf5, 0x95, | ||||
|     0xaf, 0xc7, 0x56, 0x64, 0xe1, 0xd0, 0xab, 0xc8, 0x82, 0xa4, 0x23, 0xca, | ||||
|     0x7c, 0xa6, 0x6f, 0x6,  0xbe, 0xd3, 0x7,  0x49, 0xff, 0xfe, 0x84, 0x96, | ||||
|     0x93, 0x5f, 0xab, 0x70, 0xab, 0x35, 0x93, 0x9e, 0x6b, 0x1,  0xe4, 0x87, | ||||
|     0x46, 0x6f, 0xe1, 0xcf, 0xda, 0x1b, 0x35, 0x25, 0xb8, 0x29, 0xb2, 0x12, | ||||
|     0xed, 0xcd, 0x8,  0x2b, 0x22, 0xec, 0x58, 0x81, 0xe4, 0xf,  0x6c, 0x2a, | ||||
|     0x41, 0x78, 0x73, 0xaa, 0x64, 0xd0, 0xa1, 0xcc, 0x7d, 0x14, 0xae, 0xad, | ||||
|     0xf7, 0xcd, 0x6c, 0xbc, 0x41, 0x78, 0xa2, 0xcf, 0x5a, 0x97, 0xe7, 0xb2, | ||||
|     0xb7, 0x5a, 0x5d, 0x71, 0xea, 0x32, 0xb,  0xcc, 0x25, 0x5e, 0xe,  0xc7, | ||||
|     0xb0, 0x67, 0xba, 0x26, 0xa0, 0xd0, 0xde, 0xf0, 0x94, 0x7b, 0x99, 0x35, | ||||
|     0xaf, 0x9e, 0xad, 0x0,  0x36, 0xa5, 0x73, 0x3d, 0x79, 0xf0, 0xb8, 0x37, | ||||
|     0xe2, 0xba, 0x46, 0x64, 0x39, 0x70, 0x39, 0xd3, 0x8d, 0x53, 0x9,  0xdf, | ||||
|     0xa0, 0xa3, 0x98, 0xf0, 0xce, 0x47, 0x36, 0xf7, 0x7c, 0x2d, 0x61, 0x99, | ||||
|     0x9f, 0xa8, 0xcf, 0xa3, 0x9e, 0xca, 0xcb, 0x33, 0x81, 0xe2, 0x1b, 0xb0, | ||||
|     0xfa, 0xf6, 0x24, 0xbc, 0xa6, 0x88, 0x85, 0x3b, 0x25, 0x62, 0x78, 0x37, | ||||
|     0xa,  0x58, 0x16, 0xf1, 0xfb, 0xe7, 0x58, 0xf3, 0xea, 0xd9, 0xa,  0xe0, | ||||
|     0x2c, 0x4f, 0x8f, 0x96, 0x45, 0x82, 0x82, 0xa2, 0x98, 0x98, 0xb0, 0xe7, | ||||
|     0xf,  0x2b, 0xe3, 0xf2, 0x12, 0x1a, 0x64, 0x3b, 0x85, 0x9,  0x32, 0x92, | ||||
|     0x1c, 0x73, 0xe9, 0xba, 0x17, 0x41, 0x2d, 0xcb, 0x43, 0x87, 0x45, 0xed, | ||||
|     0x65, 0xd6, 0xe3, 0x15, 0x9,  0x9f, 0x69, 0x25, 0x92, 0xc6, 0x7d, 0x71, | ||||
|     0x91, 0xdf, 0x1d, 0x67, 0xcd, 0xab, 0x67, 0x29, 0x80, 0xc,  0xb2, 0xad, | ||||
|     0xd4, 0xfe, 0x48, 0x8e, 0xb9, 0x8d, 0x9e, 0xeb, 0x16, 0x10, 0x9d, 0xe8, | ||||
|     0x3,  0x60, 0x33, 0xa,  0xb7, 0xd2, 0x2a, 0xe5, 0x58, 0x5,  0x6c, 0x9f, | ||||
|     0x50, 0x78, 0xcb, 0xd,  0x74, 0x3a, 0xb9, 0x8e, 0xca, 0xfb, 0xc,  0x92, | ||||
|     0x8d, 0xb8, 0xdc, 0x72, 0x5a, 0xf1, 0x27, 0x35, 0x9d, 0xe2, 0xb1, 0x1c, | ||||
|     0x16, 0xc4, 0xb0, 0x2e, 0x2c, 0xcf, 0x60, 0x37, 0x57, 0x0,  0xa5, 0x1c, | ||||
|     0x2d, 0x48, 0xd2, 0x8a, 0x38, 0x9c, 0x43, 0xe7, 0xd6, 0x58, 0xef, 0x20, | ||||
|     0x69, 0xac, 0x4e, 0x45, 0x36, 0xca, 0x18, 0x81, 0x6c, 0xd5, 0xf5, 0x3, | ||||
|     0xa,  0x13, 0x5d, 0x6,  0x1b, 0xc8, 0x84, 0x32, 0x1a, 0x64, 0x1b, 0xb2, | ||||
|     0xb3, 0xef, 0x31, 0x5a, 0xde, 0x18, 0x24, 0x3b, 0xf1, 0x9a, 0x88, 0x6b, | ||||
|     0xa6, 0xd6, 0x49, 0x79, 0x19, 0xa,  0xf7, 0xfc, 0xb,  0xd6, 0xcb, 0x2b, | ||||
|     0xc0, 0x19, 0xc8, 0x46, 0xab, 0xfb, 0xaa, 0xe3, 0xee, 0xde, 0x8,  0x6b, | ||||
|     0xe1, 0x51, 0xcf, 0x50, 0xa0, 0x54, 0xa5, 0xd6, 0x86, 0x6c, 0x89, 0x66, | ||||
|     0xf4, 0x12, 0x5,  0x90, 0x45, 0xd2, 0x74, 0x8f, 0x49, 0x50, 0xf6, 0x0, | ||||
|     0xc4, 0xfb, 0x5f, 0x6c, 0x5b, 0xaa, 0x5d, 0x91, 0xd9, 0x80, 0xb0, 0x72, | ||||
|     0xef, 0x28, 0xb1, 0x41, 0xb6, 0x21, 0x29, 0xb9, 0xc3, 0x38, 0x2a, 0xa2, | ||||
|     0xa1, 0xcc, 0x8d, 0x70, 0x40, 0x56, 0xb3, 0xbc, 0x3d, 0x3d, 0x16, 0x58, | ||||
|     0x3e, 0xcd, 0xb7, 0xcf, 0x1,  0x7b, 0x86, 0x67, 0xd8, 0xb6, 0x1e, 0xf8, | ||||
|     0x54, 0x89, 0xa,  0xe0, 0x3d, 0x64, 0x66, 0x63, 0x24, 0x92, 0x1,  0xba, | ||||
|     0x49, 0x7f, 0xab, 0x9f, 0x35, 0xaf, 0xde, 0xa1, 0x0,  0x3a, 0x90, 0x29, | ||||
|     0x9f, 0xa1, 0x15, 0xbc, 0xcf, 0x69, 0x11, 0x3d, 0x57, 0xa6, 0x84, 0x6, | ||||
|     0xf9, 0x50, 0xc4, 0x75, 0xd,  0xf8, 0xf7, 0x24, 0x5c, 0x8d, 0x3f, 0xd, | ||||
|     0x57, 0x35, 0xcb, 0xbb, 0xc8, 0xf3, 0xfd, 0x66, 0xa2, 0xa7, 0x4a, 0x1b, | ||||
|     0x90, 0xac, 0xcc, 0x61, 0x8a, 0xe3, 0xd8, 0x84, 0xcf, 0x94, 0x45, 0xa6, | ||||
|     0x15, 0x7b, 0x7c, 0x43, 0xb7, 0x38, 0x80, 0xe2, 0xf5, 0x73, 0x16, 0x32, | ||||
|     0x97, 0x3d, 0x5,  0xd8, 0xae, 0x2,  0x65, 0xf8, 0xe2, 0xd,  0x4a, 0xc9, | ||||
|     0x89, 0x97, 0x55, 0x53, 0x3c, 0x17, 0x71, 0xfe, 0x59, 0xcf, 0xb9, 0x3e, | ||||
|     0x14, 0x9f, 0x7d, 0xa8, 0x74, 0x79, 0x19, 0xe0, 0x20, 0xcf, 0xf7, 0x9f, | ||||
|     0xd1, 0x21, 0x45, 0xd4, 0xbd, 0x3c, 0xe5, 0x19, 0x52, 0xc,  0x4f, 0xf8, | ||||
|     0x5c, 0xf,  0x23, 0x3b, 0x1d, 0x6d, 0xe8, 0xe9, 0x2,  0x6e, 0x7b, 0xa7, | ||||
|     0xc5, 0xaf, 0xa7, 0x93, 0x90, 0xe9, 0xa1, 0x2f, 0x22, 0x81, 0x28, 0xc5, | ||||
|     0x18, 0x81, 0xec, 0x9c, 0xfb, 0x5,  0x60, 0x77, 0x64, 0xca, 0x6c, 0x20, | ||||
|     0x9d, 0x59, 0x85, 0x8b, 0x91, 0xd1, 0x23, 0x97, 0xe0, 0x3e, 0xdb, 0x90, | ||||
|     0x38, 0x85, 0x28, 0x3e, 0x48, 0xb1, 0x43, 0x48, 0xbb, 0xbc, 0x26, 0x75, | ||||
|     0x0,  0x86, 0x31, 0x8e, 0xd2, 0xbd, 0xef, 0x5b, 0x25, 0xf8, 0x6e, 0x3b, | ||||
|     0x70, 0xa9, 0x2a, 0x14, 0x4c, 0x1,  0xf4, 0x4c, 0x82, 0x6b, 0x1,  0x32, | ||||
|     0x3a, 0x6e, 0xff, 0x34, 0x70, 0xb8, 0x8e, 0x69, 0xc3, 0xcc, 0xbf, 0xdd, | ||||
|     0x81, 0x9b, 0xf4, 0xbc, 0xaf, 0x61, 0x8e, 0x46, 0xb6, 0xe,  0x1f, 0x45, | ||||
|     0xf5, 0x13, 0xae, 0x2c, 0x8b, 0xb0, 0x28, 0xf2, 0xb4, 0xd4, 0x71, 0x79, | ||||
|     0x8d, 0xaa, 0x28, 0xd3, 0x26, 0x89, 0x65, 0xd3, 0x4c, 0x2f, 0x4a, 0x2, | ||||
|     0xd3, 0x5b, 0x15, 0xc0, 0x62, 0x24, 0xd2, 0x2f, 0xc8, 0x4b, 0x88, 0x47, | ||||
|     0xf9, 0x4e, 0xe0, 0x31, 0xcf, 0x98, 0xf3, 0x68, 0xf5, 0x2f, 0xcc, 0xb, | ||||
|     0x39, 0x37, 0x1e, 0xf8, 0x55, 0x9,  0xa6, 0x74, 0x5a, 0xfc, 0x5d, 0xfd, | ||||
|     0x16, 0xdd, 0xb5, 0xbc, 0x4d, 0xeb, 0x40, 0x26, 0x97, 0xf4, 0x96, 0xde, | ||||
|     0xdf, 0x7c, 0x0,  0x7e, 0x9e, 0x47, 0x36, 0xa3, 0xf4, 0xf5, 0x26, 0x63, | ||||
|     0x43, 0x3e, 0xdf, 0x17, 0x71, 0x18, 0xf6, 0xad, 0xe1, 0x7d, 0xb7, 0x24, | ||||
|     0x1c, 0x32, 0xd4, 0x5b, 0x79, 0xf5, 0x20, 0x8f, 0xad, 0x55, 0xae, 0x43, | ||||
|     0x53, 0x0,  0x75, 0xca, 0x1f, 0x3d, 0xbd, 0x5b, 0x98, 0x53, 0x29, 0xa3, | ||||
|     0xc3, 0x8a, 0x7e, 0x11, 0x3d, 0xe5, 0x45, 0xc8, 0x74, 0xd2, 0x20, 0x35, | ||||
|     0x75, 0xf3, 0x63, 0xfc, 0x49, 0x29, 0xde, 0x73, 0x47, 0x95, 0xeb, 0x28, | ||||
|     0xed, 0xf2, 0x5a, 0x22, 0x7a, 0xdf, 0xf3, 0x9d, 0x3a, 0x4b, 0x7a, 0x9c, | ||||
|     0x67, 0xe2, 0x6c, 0x43, 0x80, 0xa4, 0xac, 0x52, 0x61, 0xc,  0x9b, 0x77, | ||||
|     0xde, 0x3c, 0xf0, 0x7f, 0x7f, 0xba, 0x6e, 0xeb, 0x95, 0x67, 0x29, 0x12, | ||||
|     0x43, 0x30, 0xcf, 0x73, 0xde, 0x36, 0xc1, 0x28, 0xec, 0x7d, 0x97, 0x11, | ||||
|     0xbe, 0x7b, 0xf1, 0x70, 0xab, 0x1e, 0xb3, 0x0,  0xaa, 0xc9, 0xe,  0xf8, | ||||
|     0x83, 0x4e, 0xda, 0x3,  0xff, 0xef, 0x88, 0x84, 0x0,  0x87, 0x71, 0x57, | ||||
|     0x44, 0xe3, 0x7,  0x59, 0x4d, 0x67, 0x74, 0xd6, 0xeb, 0x3b, 0x9e, 0x73, | ||||
|     0x87, 0x12, 0x6f, 0x93, 0x51, 0xc3, 0x14, 0x40, 0x2a, 0x7c, 0x23, 0xa2, | ||||
|     0x7e, 0x9a, 0x3,  0xff, 0xf,  0x88, 0xe8, 0xc9, 0x17, 0x46, 0x94, 0x31, | ||||
|     0x4,  0xff, 0xbc, 0x77, 0x6f, 0x24, 0x87, 0xcc, 0xf7, 0x87, 0xb1, 0xb, | ||||
|     0xd1, 0xe1, 0xd1, 0x86, 0x29, 0x80, 0xd4, 0xf8, 0xa,  0x92, 0x8,  0x22, | ||||
|     0x8c, 0x2c, 0x92, 0x80, 0xc2, 0x25, 0xbf, 0x45, 0x76, 0x18, 0xbe, 0xf4, | ||||
|     0x62, 0x83, 0x90, 0x20, 0x9a, 0xad, 0xad, 0xba, 0xb,  0x98, 0xa6, 0x43, | ||||
|     0x81, 0xb0, 0xa1, 0xd2, 0x55, 0xc4, 0x8b, 0x5,  0xe8, 0x3,  0x1c, 0x89, | ||||
|     0xec, 0xb8, 0x7c, 0xa0, 0x55, 0xa9, 0xf9, 0x0,  0x8,  0x31, 0xd9, 0x83, | ||||
|     0xdb, 0x49, 0xf7, 0x3,  0x76, 0x3,  0xbe, 0x86, 0xcc, 0xf3, 0xfb, 0xbc, | ||||
|     0xf9, 0x8b, 0x80, 0x17, 0x2,  0x9f, 0x7d, 0x88, 0x44, 0x8d, 0x85, 0x6d, | ||||
|     0x42, 0x72, 0xa2, 0x9a, 0xb6, 0xf7, 0xa9, 0x3f, 0x60, 0xb0, 0xfa, 0x4, | ||||
|     0xce, 0xd4, 0x61, 0x86, 0x51, 0xc8, 0x5c, 0xe0, 0x41, 0xe0, 0xf8, 0x90, | ||||
|     0x73, 0xfd, 0x91, 0x2d, 0xc3, 0xc7, 0x3,  0xf7, 0x23, 0xf3, 0xf5, 0x6b, | ||||
|     0x91, 0xa8, 0xc9, 0x6d, 0x90, 0x38, 0x8d, 0x3,  0x80, 0xc3, 0x90, 0x14, | ||||
|     0xee, 0x1d, 0x48, 0x4c, 0x86, 0x61, 0xa,  0xa0, 0x80, 0x2b, 0xf5, 0x48, | ||||
|     0x4a, 0x56, 0x7b, 0xa1, 0x60, 0x70, 0xcb, 0x3a, 0x64, 0xc1, 0xd0, 0x97, | ||||
|     0x3d, 0x56, 0xd6, 0xe9, 0x11, 0x16, 0x85, 0xd1, 0x75, 0x18, 0xf0, 0x23, | ||||
|     0xad, 0xcb, 0x6d, 0x3d, 0x96, 0xc0, 0xa1, 0x7a, 0x18, 0x36, 0x4,  0xa8, | ||||
|     0xaa, 0x60, 0x3e, 0x48, 0xf8, 0x2a, 0xbd, 0x2c, 0x32, 0x9d, 0x97, 0x2d, | ||||
|     0xe1, 0x37, 0x7f, 0x8d, 0xac, 0x35, 0x30, 0x3a, 0x59, 0xc,  0x9c, 0xa0, | ||||
|     0xbd, 0xbb, 0x61, 0xa,  0xa0, 0x2e, 0x1a, 0xff, 0x14, 0x24, 0x89, 0x85, | ||||
|     0x6f, 0xee, 0xfb, 0xf,  0xc0, 0x23, 0xc4, 0xf,  0x22, 0xc9, 0x2b, 0x94, | ||||
|     0x89, 0xc8, 0x86, 0x23, 0x46, 0x21, 0x33, 0x74, 0x38, 0xd6, 0x6c, 0x55, | ||||
|     0x61, 0xa,  0xa0, 0x96, 0xd,  0x7f, 0xe,  0xb2, 0x57, 0xc0, 0x69, 0x44, | ||||
|     0xaf, 0xe,  0x6b, 0xd7, 0x5e, 0x2b, 0x8e, 0x25, 0xd0, 0xae, 0x63, 0xd3, | ||||
|     0x71, 0xc8, 0xda, 0xf7, 0xe9, 0x74, 0x9d, 0x5a, 0x34, 0x64, 0x25, 0xe1, | ||||
|     0xe7, 0x91, 0x84, 0x2a, 0x49, 0xad, 0x81, 0x95, 0x5a, 0xc7, 0xb3, 0xad, | ||||
|     0x1a, 0xcd, 0x7,  0x10, 0xb7, 0xb1, 0x6f, 0x40, 0x92, 0x81, 0xce, 0x43, | ||||
|     0x32, 0xcf, 0x3c, 0x8a, 0x38, 0xfc, 0xe2, 0xf6, 0xea, 0xeb, 0x11, 0xe7, | ||||
|     0xde, 0x9d, 0xfa, 0x77, 0x2c, 0xe2, 0x70, 0xec, 0x8b, 0xac, 0x7f, 0x9f, | ||||
|     0xaf, 0x42, 0x3d, 0x19, 0x78, 0xdb, 0xb9, 0x6e, 0x16, 0x92, 0x8a, 0x6a, | ||||
|     0x98, 0xbd, 0x86, 0x2e, 0x2c, 0x47, 0x22, 0xf9, 0x2e, 0x45, 0xd6, 0x61, | ||||
|     0x1c, 0x2,  0xec, 0x85, 0x4c, 0xb,  0xe,  0x44, 0x62, 0x35, 0x5a, 0xf4, | ||||
|     0x7b, 0xb,  0x81, 0xd7, 0x81, 0xc7, 0xd5, 0x82, 0x68, 0xb1, 0xea, 0x33, | ||||
|     0xc,  0xc3, 0x30, 0xc,  0xc3, 0x30, 0xc,  0xc3, 0x30, 0xc,  0xc3, 0x30, | ||||
|     0xc,  0xc3, 0x30, 0xc,  0xc3, 0x30, 0xc,  0xc3, 0x30, 0xc,  0xc3, 0x30, | ||||
|     0xc,  0xc3, 0x30, 0xc,  0xc3, 0x30, 0xc,  0xc3, 0x30, 0xc,  0xc3, 0x30, | ||||
|     0xc,  0xc3, 0x30, 0xc,  0xc3, 0x30, 0xc,  0xa3, 0x9b, 0xf2, 0xf,  0x1, | ||||
|     0xd8, 0xa5, 0x1a, 0xeb, 0x29, 0x91, 0x30, 0x0,  0x0,  0x0,  0x0,  0x49, | ||||
|     0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82}; | ||||
|  | ||||
| size_t banner_size = 0x1813; | ||||
							
								
								
									
										14796
									
								
								source/banner_audio.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14796
									
								
								source/banner_audio.cpp
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										729
									
								
								source/helper.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										729
									
								
								source/helper.cpp
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,729 @@ | ||||
| #include <condition_variable> | ||||
| #include <filesystem> | ||||
| #include <fstream> | ||||
| #include <future> | ||||
| #include <iomanip> | ||||
| #include <iostream> | ||||
| #include <math.h> | ||||
| #include <mutex> | ||||
| #include <random> | ||||
| #include <sstream> | ||||
| #include <stack> | ||||
| #include <string> | ||||
| #include <thread> | ||||
|  | ||||
| #include <json.hpp> | ||||
|  | ||||
| #include <fileHash.hpp> | ||||
| #include <helper.hpp> | ||||
|  | ||||
| #define CCRED "\033[31m" | ||||
| #define CCGREEN "\033[32m" | ||||
| #define CCYELLOW "\033[33m" | ||||
| #define CCBLUE "\033[34m" | ||||
| #define CCMAGENTA "\033[35m" | ||||
| #define CCCYAN "\033[36m" | ||||
| #define CCRESET "\033[0m" | ||||
|  | ||||
| #define veccmp(vec1, vec2) (vec1.size() == vec2.size()) | ||||
|  | ||||
| void updateProgressBar(float progress) | ||||
| { | ||||
|   std::cout << CCYELLOW << "[" << static_cast<int>(progress * 100.0) << " %]  " | ||||
|             << CCRESET; | ||||
| } | ||||
|  | ||||
| std::string catch_str(nlohmann::json js, std::string at) | ||||
| { | ||||
|   if (!js.contains(at) || js[at].is_null()) | ||||
|   { | ||||
|     throw std::invalid_argument("required_key is null or missing: " + at); | ||||
|   } | ||||
|  | ||||
|   return js[at].get<std::string>(); | ||||
| } | ||||
|  | ||||
| int catch_int(nlohmann::json js, std::string at) | ||||
| { | ||||
|   if (!js.contains(at) || js[at].is_null()) | ||||
|   { | ||||
|     throw std::invalid_argument("required_key is null or missing: " + at); | ||||
|   } | ||||
|  | ||||
|   return js[at].get<int>(); | ||||
| } | ||||
|  | ||||
| std::vector<std::filesystem::path> | ||||
| get_files_in_dir(const std::vector<std::string> &dir_paths, | ||||
|                  const std::string &extension) | ||||
| { | ||||
|   std::vector<std::filesystem::path> files; | ||||
|  | ||||
|   for (const auto &dir_path : dir_paths) | ||||
|   { | ||||
|     if (!std::filesystem::exists(dir_path)) | ||||
|       continue; | ||||
|     for (const auto &entry : std::filesystem::directory_iterator(dir_path)) | ||||
|     { | ||||
|       if (std::filesystem::is_regular_file(entry.path()) && | ||||
|           entry.path().extension() == extension) | ||||
|       { | ||||
|         files.push_back(fix_path(entry.path().string())); | ||||
|       } | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   return files; | ||||
| } | ||||
|  | ||||
| void Js2Vec(std::vector<std::string> &vec, nlohmann::json js) | ||||
| { | ||||
|   vec.clear(); | ||||
|   for (auto const &it : js) | ||||
|   { | ||||
|     vec.push_back(it.get<std::string>()); | ||||
|   } | ||||
| } | ||||
|  | ||||
| void Vec2Json(std::vector<std::string> vec, nlohmann::json &js, | ||||
|               NpiProject ref) | ||||
| { | ||||
|   int indx = 0; | ||||
|   for (auto const &it : vec) | ||||
|   { | ||||
|     js[indx] = it; | ||||
|     indx++; | ||||
|   } | ||||
| } | ||||
|  | ||||
| std::string Flags2Str(std::vector<std::string> flags) | ||||
| { | ||||
|   std::string res = ""; | ||||
|   for (auto const &it : flags) | ||||
|     res += "-" + it + " "; | ||||
|   return res; | ||||
| } | ||||
|  | ||||
| std::string IncludeDirs(std::vector<std::string> dirs) | ||||
| { | ||||
|   std::string res = ""; | ||||
|   for (auto const &it : dirs) | ||||
|     res += "-I " + it + " "; | ||||
|   return res; | ||||
| } | ||||
|  | ||||
| std::string LibIncludes(std::vector<std::string> dirs) | ||||
| { | ||||
|   std::string res = ""; | ||||
|   for (auto const &it : dirs) | ||||
|     res += "-I " + it + "include/ "; | ||||
|   return res; | ||||
| } | ||||
|  | ||||
| void VecGetExtra(std::vector<std::string> &result, | ||||
|                  std::vector<std::string> input, NpiProject ref) | ||||
| { | ||||
|   result.clear(); | ||||
|   for (auto const &it : input) | ||||
|   { | ||||
|     if (it == "[arch_flags]") | ||||
|     { | ||||
|       for (auto const &af : ref.arch_flags) | ||||
|       { | ||||
|         result.push_back(af); | ||||
|       } | ||||
|     } | ||||
|     else if (it == "[c_flags]") | ||||
|     { | ||||
|       for (auto const &cf : ref.c_flags) | ||||
|       { | ||||
|         result.push_back(cf); | ||||
|       } | ||||
|     } | ||||
|     else | ||||
|     { | ||||
|       result.push_back(it); | ||||
|     } | ||||
|   } | ||||
| } | ||||
|  | ||||
| void ReplVariables(std::string &str, const std::string &from, | ||||
|                    const std::string &to) | ||||
| { | ||||
|   if (from.empty()) | ||||
|     return; | ||||
|   size_t start_pos = 0; | ||||
|   while ((start_pos = str.find(from, start_pos)) != std::string::npos) | ||||
|   { | ||||
|     str.replace(start_pos, from.length(), to); | ||||
|     start_pos += to.length(); // In case 'to' contains 'from', like replacing | ||||
|                               // 'x' with 'yx' | ||||
|   } | ||||
| } | ||||
|  | ||||
| void AutoRepl(std::string &str) | ||||
| { | ||||
|   std::string dkp_env = getenv("DEVKITPRO"); | ||||
|   std::string cwd = std::filesystem::current_path().string(); | ||||
|   ReplVariables(str, "{DEVKITPRO}", dkp_env); | ||||
|   ReplVariables(str, "{cwd}", cwd); | ||||
| } | ||||
|  | ||||
| void ReplVector(std::vector<std::string> &vec, const std::string &from, | ||||
|                 const std::string &to) | ||||
| { | ||||
|   for (size_t i = 0; i < vec.size(); i++) | ||||
|     ReplVariables(vec[i], from, to); | ||||
| } | ||||
|  | ||||
| void AutoVecRepl(std::vector<std::string> &strs) | ||||
| { | ||||
|   for (size_t i = 0; i < strs.size(); i++) | ||||
|     AutoRepl(strs[i]); | ||||
| } | ||||
|  | ||||
| void ProcessPrj2Cmp(NpiProject *prj, NpiProject src) | ||||
| { | ||||
|   VecGetExtra(prj->arch_flags, src.arch_flags, src); | ||||
|   VecGetExtra(prj->c_flags, src.c_flags, src); | ||||
|   VecGetExtra(prj->cxx_flags, src.cxx_flags, | ||||
|               prj[0]); // Use Prj as ref cause arch_flags already written | ||||
|   VecGetExtra(prj->as_flags, src.as_flags, src); | ||||
|   VecGetExtra(prj->linker_flags, src.linker_flags, src); | ||||
| } | ||||
|  | ||||
| std::string LinkerInput(std::vector<std::filesystem::path> o_files, | ||||
|                         std::vector<std::filesystem::path> d_files) | ||||
| { | ||||
|   std::string res = ""; | ||||
|   /*if (o_files.size() != d_files.size()) { | ||||
|     std::cerr << "The Number of .d and .o files is wrong"; | ||||
|     return ""; | ||||
|   }*/ | ||||
|   for (size_t i = 0; i < o_files.size(); i++) | ||||
|     res += o_files[i].string() + " "; // + d_files[i].string() + " "; | ||||
|   return res; | ||||
| } | ||||
|  | ||||
| std::string Libs(std::vector<std::string> libs) | ||||
| { | ||||
|   std::string res = ""; | ||||
|   for (auto const &it : libs) | ||||
|     res += "-l" + it + " "; | ||||
|   return res; | ||||
| } | ||||
|  | ||||
| std::string LibPaths(std::vector<std::string> libs) | ||||
| { | ||||
|   std::string res = ""; | ||||
|   for (auto const &it : libs) | ||||
|     res += "-L" + it + "lib/ "; | ||||
|   return res; | ||||
| } | ||||
|  | ||||
| void DeleteFiles(std::string path, std::vector<std::string> extensions) | ||||
| { | ||||
|   for (const auto &entry : std::filesystem::directory_iterator(path)) | ||||
|   { | ||||
|     if (std::filesystem::is_directory(entry)) | ||||
|     { | ||||
|       DeleteFiles(fix_path(entry.path().string()), extensions); | ||||
|     } | ||||
|     else | ||||
|     { | ||||
|       for (const auto &ext : extensions) | ||||
|       { | ||||
|         if (entry.path().extension() == ext) | ||||
|         { | ||||
|           std::filesystem::remove(entry); | ||||
|           std::cout << CCRED << "[*] Deleted file: " << fix_path(entry.path().string()) | ||||
|                     << CCRESET << std::endl; | ||||
|           break; | ||||
|         } | ||||
|       } | ||||
|     } | ||||
|   } | ||||
| } | ||||
|  | ||||
| void DeleteDirectory(std::string path) | ||||
| { | ||||
|   for (const auto &entry : std::filesystem::directory_iterator(path)) | ||||
|   { | ||||
|     if (std::filesystem::is_directory(entry)) | ||||
|     { | ||||
|       DeleteDirectory(fix_path(entry.path().string())); | ||||
|     } | ||||
|     else | ||||
|     { | ||||
|       std::filesystem::remove(entry); | ||||
|       std::cout << CCRED << "[*] Deleted file: " << fix_path(entry.path().string()) | ||||
|                 << CCRESET << std::endl; | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   std::filesystem::remove(path); | ||||
|   std::cout << CCRED << "[*] Deleted directory: " << path << CCRESET | ||||
|             << std::endl; | ||||
| } | ||||
|  | ||||
| void GenerateHashes(NpiProject prj, std::string dir_) | ||||
| { | ||||
|   auto cpp_hashes = createHashes(prj.source_dirs, ".cpp"); | ||||
|   auto c_hashes = createHashes(prj.source_dirs, ".c"); | ||||
|   auto hpp_hashes = createHashes(prj.include_dirs, ".hpp"); | ||||
|   auto h_hashes = createHashes(prj.include_dirs, ".h"); | ||||
|   auto v_pica_hashes = createHashes(prj.source_dirs, ".v.pica"); | ||||
|   auto shlist_hashes = createHashes(prj.source_dirs, ".shlist"); | ||||
|   auto s_hashes = createHashes(prj.source_dirs, ".s"); | ||||
|   auto t3s_hashes = createHashes({std::string(dir_ + "/gfx")}, ".t3s"); | ||||
|  | ||||
|   nlohmann::json jscpp_hashes; | ||||
|   for (auto const &it : cpp_hashes) | ||||
|     jscpp_hashes[it.first] = it.second; | ||||
|   nlohmann::json jsc_hashes; | ||||
|   for (auto const &it : c_hashes) | ||||
|     jsc_hashes[it.first] = it.second; | ||||
|   nlohmann::json jshpp_hashes; | ||||
|   for (auto const &it : hpp_hashes) | ||||
|     jshpp_hashes[it.first] = it.second; | ||||
|   nlohmann::json jsh_hashes; | ||||
|   for (auto const &it : h_hashes) | ||||
|     jsh_hashes[it.first] = it.second; | ||||
|   nlohmann::json jsv_pica_hashes; | ||||
|   for (auto const &it : v_pica_hashes) | ||||
|     jsv_pica_hashes[it.first] = it.second; | ||||
|   nlohmann::json jsshlist_hashes; | ||||
|   for (auto const &it : shlist_hashes) | ||||
|     jsshlist_hashes[it.first] = it.second; | ||||
|   nlohmann::json jss_hashes; | ||||
|   for (auto const &it : s_hashes) | ||||
|     jss_hashes[it.first] = it.second; | ||||
|   nlohmann::json jst3s_hashes; | ||||
|   for (auto const &it : t3s_hashes) | ||||
|     jst3s_hashes[it.first] = it.second; | ||||
|  | ||||
|   nlohmann::json hashes; | ||||
|   hashes["cpp"] = jscpp_hashes; | ||||
|   hashes["c"] = jsc_hashes; | ||||
|   hashes["hpp"] = jshpp_hashes; | ||||
|   hashes["h"] = jsh_hashes; | ||||
|   hashes["v_pica"] = jsv_pica_hashes; | ||||
|   hashes["shlist"] = jsshlist_hashes; | ||||
|   hashes["s"] = jss_hashes; | ||||
|   hashes["t3s"] = jst3s_hashes; | ||||
|  | ||||
|   std::ofstream hashes_file(dir_ + "/" + "build/hashes.json"); | ||||
|   hashes_file << hashes.dump(4); | ||||
|   hashes_file.close(); | ||||
| } | ||||
|  | ||||
| std::map<std::string, std::string> GetHashMap(std::string dir_, | ||||
|                                               std::string extension) | ||||
| { | ||||
|   nlohmann::json js; | ||||
|   std::ifstream is(dir_ + "/build/hashes.json"); | ||||
|   if (!is) | ||||
|   { | ||||
|     std::cerr << "[-]hashes.json not in " << dir_ + "/build/" | ||||
|               << "!\n"; | ||||
|     exit(-1); | ||||
|   } | ||||
|   is >> js; | ||||
|   is.close(); | ||||
|  | ||||
|   std::string mod_ext = extension.substr(1); | ||||
|   std::replace(mod_ext.begin(), mod_ext.end(), '.', '_'); | ||||
|  | ||||
|   std::map<std::string, std::string> res; | ||||
|   for (auto &[filename, hash] : js[mod_ext].items()) | ||||
|   { | ||||
|     res[filename] = hash; | ||||
|   } | ||||
|   return res; | ||||
| } | ||||
|  | ||||
| void CompileProject(NpiProject &prj, std::string dir_) | ||||
| { | ||||
| #ifdef _WIN32 | ||||
|   std::string dkp_env = "C:/devkitPro/"; | ||||
|   std::cout << CCYELLOW << "[+] Warning: Windows Usage Detected!\n[+] Make sure you have devkitpro installed at <C:/devkitPro>!" << CCRESET << std::endl; | ||||
| #else | ||||
|   std::string dkp_env = getenv("DEVKITPRO"); | ||||
| #endif | ||||
|   bool any_errors = false; | ||||
|  | ||||
|   AutoVecRepl(prj.source_dirs); | ||||
|   AutoVecRepl(prj.include_dirs); | ||||
|  | ||||
|   std::vector<std::filesystem::path> cpp_files = | ||||
|       get_files_in_dir(prj.source_dirs, ".cpp"); | ||||
|   std::vector<std::filesystem::path> c_files = | ||||
|       get_files_in_dir(prj.source_dirs, ".c"); | ||||
|   std::vector<std::filesystem::path> hpp_files = | ||||
|       get_files_in_dir(prj.include_dirs, ".hpp"); | ||||
|   std::vector<std::filesystem::path> h_files = | ||||
|       get_files_in_dir(prj.include_dirs, ".h"); | ||||
|   std::vector<std::filesystem::path> v_pica_files = | ||||
|       get_files_in_dir(prj.source_dirs, ".v.pica"); | ||||
|   std::vector<std::filesystem::path> shlist_files = | ||||
|       get_files_in_dir(prj.source_dirs, ".shlist"); | ||||
|   std::vector<std::filesystem::path> t3s_files = | ||||
|       get_files_in_dir({std::string(dir_ + "/gfx")}, ".t3s"); | ||||
|   std::vector<std::filesystem::path> s_files = | ||||
|       get_files_in_dir(prj.source_dirs, ".s"); | ||||
|  | ||||
|   std::filesystem::create_directories(dir_ + "/build"); | ||||
|  | ||||
|   std::vector<std::filesystem::path> cpp_files_; | ||||
|   std::vector<std::filesystem::path> c_files_; | ||||
|   std::vector<std::filesystem::path> v_pica_files_; | ||||
|   std::vector<std::filesystem::path> shlist_files_; | ||||
|   std::vector<std::filesystem::path> s_files_; | ||||
|   std::vector<std::filesystem::path> t3s_files_; | ||||
|  | ||||
|   if (!std::filesystem::exists( | ||||
|           std::filesystem::path(dir_ + "/build/hashes.json"))) | ||||
|   { | ||||
|     GenerateHashes(prj, dir_); | ||||
|     cpp_files_ = get_files_in_dir(prj.source_dirs, ".cpp"); | ||||
|     c_files_ = get_files_in_dir(prj.source_dirs, ".c"); | ||||
|     v_pica_files_ = get_files_in_dir(prj.source_dirs, ".v.pica"); | ||||
|     shlist_files_ = get_files_in_dir(prj.source_dirs, ".shlist"); | ||||
|     s_files_ = get_files_in_dir(prj.source_dirs, ".s"); | ||||
|     t3s_files_ = get_files_in_dir({std::string(dir_ + "/gfx")}, ".t3s"); | ||||
|   } | ||||
|   else | ||||
|   { | ||||
|     cpp_files_ = getChangedFiles(GetHashMap(dir_, ".cpp")); | ||||
|     c_files_ = getChangedFiles(GetHashMap(dir_, ".c")); | ||||
|     v_pica_files_ = getChangedFiles(GetHashMap(dir_, ".v.pica")); | ||||
|     shlist_files_ = getChangedFiles(GetHashMap(dir_, ".shlist")); | ||||
|     s_files_ = getChangedFiles(GetHashMap(dir_, ".s")); | ||||
|     t3s_files_ = getChangedFiles(GetHashMap(dir_, ".t3s")); | ||||
|     if ((getChangedFiles(GetHashMap(dir_, ".hpp")).size() != 0) || | ||||
|         (getChangedFiles(GetHashMap(dir_, ".hpp")).size() != 0)) | ||||
|     { | ||||
|       cpp_files_ = get_files_in_dir(prj.source_dirs, ".cpp"); | ||||
|       c_files_ = get_files_in_dir(prj.source_dirs, ".c"); | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   if (GetHashMap(dir_, ".cpp").size() != cpp_files.size() || | ||||
|       GetHashMap(dir_, ".c").size() != c_files.size()) | ||||
|   { | ||||
|     cpp_files_ = get_files_in_dir(prj.source_dirs, ".cpp"); | ||||
|     c_files_ = get_files_in_dir(prj.source_dirs, ".c"); | ||||
|   } | ||||
|   if (GetHashMap(dir_, ".hpp").size() != hpp_files.size() || | ||||
|       GetHashMap(dir_, ".h").size() != h_files.size()) | ||||
|   { | ||||
|     cpp_files_ = get_files_in_dir(prj.source_dirs, ".cpp"); | ||||
|     c_files_ = get_files_in_dir(prj.source_dirs, ".c"); | ||||
|   } | ||||
|  | ||||
|   ReplVector(prj.lib_dirs, "{DEVKITPRO}", dkp_env); | ||||
|  | ||||
|   ReplVariables(prj.cxx_compiler, "{DEVKITPRO}", dkp_env); | ||||
|   ReplVariables(prj.c_compiler, "{DEVKITPRO}", dkp_env); | ||||
|   ReplVariables(prj.asm_compiler, "{DEVKITPRO}", dkp_env); | ||||
|   ReplVariables(prj.linker, "{DEVKITPRO}", dkp_env); | ||||
|  | ||||
|   int prgc = 0; | ||||
|   int prga = cpp_files_.size() + c_files_.size(); | ||||
|   if (prga <= 0) | ||||
|   { | ||||
|     prgc = 1; | ||||
|     prga = 1; | ||||
|     std::cout << CCGREEN << "[+] Everything is Up to date..." << CCRESET | ||||
|               << std::endl; | ||||
|     return; | ||||
|   } | ||||
|  | ||||
|   for (auto const &it : t3s_files_) | ||||
|   { | ||||
|     std::string command = dkp_env + "/tools/bin/tex3ds -i " + fix_path(it.string()) + | ||||
|                           " -H " + dir_ + "/build/" + fix_path(it.stem().string()) + | ||||
|                           ".h" + " -d " + dir_ + "/build/" + | ||||
|                           fix_path(it.stem().string()) + ".d" + " -o " + dir_ + | ||||
|                           "/romfs/gfx//" + fix_path(it.stem().string()) + ".t3x"; | ||||
|     std::cout << CCMAGENTA << "Generating: " << CCCYAN << fix_path(it.filename().string()) | ||||
|               << std::endl; | ||||
|     int reqres = system(command.c_str()); | ||||
|     std::cout << (reqres == 0 ? CCGREEN : CCRED) | ||||
|               << (reqres == 0 ? "[+] " : "[-] ") << fix_path(it.filename().string()) | ||||
|               << std::endl; | ||||
|     if (reqres != 0) | ||||
|       any_errors = true; | ||||
|   } | ||||
|  | ||||
|   for (auto const &it : cpp_files_) | ||||
|   { | ||||
|     std::string command = | ||||
|         prj.cxx_compiler + " -MMD -MP -MF " + dir_ + "/build/" + | ||||
|         fix_path(it.stem().string()) + ".d " + "-c " + fix_path(it.string()) + " -o " + dir_ + | ||||
|         "/build/" + fix_path(it.stem().string()) + ".o " + Flags2Str(prj.cxx_flags) + | ||||
|         " " + IncludeDirs(prj.include_dirs) + " " + LibIncludes(prj.lib_dirs); | ||||
|     std::cout << CCMAGENTA << "Compiling: " << CCCYAN << fix_path(it.filename().string()) | ||||
|               << std::endl; | ||||
|     int reqres = system(command.c_str()); | ||||
|     std::cout << (reqres == 0 ? CCGREEN : CCRED) | ||||
|               << (reqres == 0 ? "[+] " : "[-] ") << fix_path(it.filename().string()) | ||||
|               << std::endl; | ||||
|     if (reqres != 0) | ||||
|       any_errors = true; | ||||
|   } | ||||
|  | ||||
|   for (auto const &it : c_files_) | ||||
|   { | ||||
|     std::string command = | ||||
|         prj.c_compiler + " -MMD -MP -MF " + dir_ + "/build/" + | ||||
|         fix_path(it.stem().string()) + ".d " + "-c " + fix_path(it.string()) + " -o " + dir_ + | ||||
|         "/build/" + fix_path(it.stem().string()) + ".o " + Flags2Str(prj.c_flags) + " " + | ||||
|         IncludeDirs(prj.include_dirs) + " " + LibIncludes(prj.lib_dirs); | ||||
|     std::cout << CCMAGENTA << "Compiling: " << CCCYAN << fix_path(it.filename().string()) | ||||
|               << std::endl; | ||||
|     int reqres = system(command.c_str()); | ||||
|     std::cout << (reqres == 0 ? CCGREEN : CCRED) | ||||
|               << (reqres == 0 ? "[+] " : "[-] ") << fix_path(it.filename().string()) | ||||
|               << std::endl; | ||||
|     if (reqres != 0) | ||||
|       any_errors = true; | ||||
|   } | ||||
|  | ||||
|   std::vector<std::filesystem::path> o_files = | ||||
|       get_files_in_dir({dir_ + "/build/"}, ".o"); | ||||
|   std::vector<std::filesystem::path> d_files = | ||||
|       get_files_in_dir({dir_ + "/build/"}, ".d"); | ||||
|  | ||||
|   if (!any_errors) | ||||
|   { | ||||
|     std::string command = prj.linker + " -o " + dir_ + "/" + prj.name + | ||||
|                           ".elf " + LinkerInput(o_files, d_files) + " " + | ||||
|                           Libs(prj.libraries) + " " + LibPaths(prj.lib_dirs) + | ||||
|                           " " + Flags2Str(prj.linker_flags); | ||||
|     std::cout << CCBLUE << "[+] Linking..." << CCRESET << std::endl; | ||||
|     int reqres = system(command.c_str()); | ||||
|     if (reqres != 0) | ||||
|       any_errors = true; | ||||
|     command = "bannertool makebanner -i \"app/banner.png\" -a " | ||||
|               "\"app/BannerAudio.wav\" -o \"build/banner.bin\""; | ||||
|     std::cout << CCBLUE << "[+] Creating Banner..." << CCRESET << std::endl; | ||||
|     reqres = system(command.c_str()); | ||||
|     std::cout << (reqres == 0 ? CCGREEN : CCRED) | ||||
|               << (reqres == 0 ? "[+] " : "[-] ") << "Banner" << std::endl; | ||||
|     command = "bannertool makesmdh -i \"app/icon.png\" -s \"" + prj.name + | ||||
|               "\" -l \"Description\" -p \"" + prj.author + | ||||
|               "\" -o \"build/icon.bin\""; | ||||
|     std::cout << CCBLUE << "[+] Creating smdh..." << CCRESET << std::endl; | ||||
|     reqres = system(command.c_str()); | ||||
|     std::cout << (reqres == 0 ? CCGREEN : CCRED) | ||||
|               << (reqres == 0 ? "[+] " : "[-] ") << "Icon" << std::endl; | ||||
|     command = dkp_env += "/tools/bin/3dsxtool " + dir_ + "/" + prj.name + | ||||
|                          ".elf " + dir_ + "/" + prj.name + ".3dsx " + | ||||
|                          "--smdh=" + dir_ + "/build/icon.bin" + | ||||
|                          " --romfs=" + dir_ + "/romfs"; | ||||
|     std::cout << CCBLUE << "[+] Creating 3dsx..." << CCRESET << std::endl; | ||||
|     reqres = system(command.c_str()); | ||||
|     std::cout << (reqres == 0 ? CCGREEN : CCRED) | ||||
|               << (reqres == 0 ? "[+] " : "[-] ") << prj.name + ".3dsx " | ||||
|               << std::endl; | ||||
|     command = | ||||
|         "makerom -f cia -target t -exefslogo -o " + dir_ + "/" + prj.name + | ||||
|         ".cia -elf " + dir_ + "/" + prj.name + ".elf " + " -rsf " + dir_ + "/" + | ||||
|         prj.rsf_path + " -banner " + dir_ + "/build/banner.bin" + " -icon " + | ||||
|         dir_ + "/build/icon.bin" + " -logo " + dir_ + "/" + prj.logo_lz11_path + | ||||
|         " -DAPP_ROMFS=" + dir_ + "/" + prj.dir_romfs + " -major " + | ||||
|         std::to_string(prj.vmajor) + " -minor " + std::to_string(prj.vminor) + | ||||
|         " -micro " + std::to_string(prj.vbuild) + | ||||
|         " -DAPP_VERSION_MAJOR=" + std::to_string(prj.vmajor); | ||||
|     std::cout << CCBLUE << "[+] Creating Cia..." << CCRESET << std::endl; | ||||
|     reqres = system(command.c_str()); | ||||
|     std::cout << (reqres == 0 ? CCGREEN : CCRED) | ||||
|               << (reqres == 0 ? "[+] " : "[-] ") << prj.name + ".cia " | ||||
|               << std::endl; | ||||
|   } | ||||
|  | ||||
|   if (any_errors) | ||||
|   { | ||||
|     std::cout | ||||
|         << CCRED | ||||
|         << "\nErrors Happened!\nTake a look at the Top of this Message...\n" | ||||
|         << CCRESET; | ||||
|   } | ||||
|  | ||||
|   GenerateHashes(prj, dir_); | ||||
|  | ||||
|   std::cout << CCRESET << std::endl; | ||||
| } | ||||
|  | ||||
| namespace helper | ||||
| { | ||||
|   std::string GenerateUniqueId() | ||||
|   { | ||||
|     std::random_device rd; | ||||
|     std::mt19937 gen(rd()); | ||||
|     std::uniform_int_distribution<> dis(0, 15); | ||||
|  | ||||
|     std::stringstream ss; | ||||
|     ss << "0x"; | ||||
|     for (int i = 0; i < 5; ++i) | ||||
|     { | ||||
|       ss << std::hex << dis(gen); | ||||
|     } | ||||
|  | ||||
|     std::string hex_str = ss.str(); | ||||
|     return hex_str; | ||||
|   } | ||||
|  | ||||
|   void ArrayToFile(unsigned char *array_, size_t size_, std::string filename) | ||||
|   { | ||||
|     std::ofstream file(filename, std::ios::binary); | ||||
|  | ||||
|     if (!file.is_open()) | ||||
|     { | ||||
|       std::cerr << CCRED << "[-]: Could not open file" << CCRESET << std::endl; | ||||
|       return; | ||||
|     } | ||||
|  | ||||
|     file.write(reinterpret_cast<char *>(array_), size_); | ||||
|  | ||||
|     file.close(); | ||||
|   } | ||||
|  | ||||
|   void GenerateTemplateFile(std::string path, NpiProject prj) | ||||
|   { | ||||
|     nlohmann::ordered_json js; | ||||
|     js["project_name"] = prj.name; | ||||
|     js["author"] = prj.author; | ||||
|     js["description"] = prj.description; | ||||
|     js["vmajor"] = prj.vmajor; | ||||
|     js["vminor"] = prj.vminor; | ||||
|     js["vbuild"] = prj.vbuild; | ||||
|     js["unique_id"] = prj.unique_id; | ||||
|     js["prod_code"] = prj.prod; | ||||
|     js["platform"] = prj.platform; | ||||
|  | ||||
|     nlohmann::json source_dirs; | ||||
|     Vec2Json(prj.source_dirs, source_dirs, prj); | ||||
|     js["source_dirs"] = source_dirs; | ||||
|  | ||||
|     nlohmann::json include_dirs; | ||||
|     Vec2Json(prj.include_dirs, include_dirs, prj); | ||||
|     js["include_dirs"] = include_dirs; | ||||
|  | ||||
|     nlohmann::json libraries; | ||||
|     Vec2Json(prj.libraries, libraries, prj); | ||||
|     js["libraries"] = libraries; | ||||
|  | ||||
|     nlohmann::json lib_dirs; | ||||
|     Vec2Json(prj.lib_dirs, lib_dirs, prj); | ||||
|     js["lib_dirs"] = lib_dirs; | ||||
|  | ||||
|     js["icon_path"] = prj.icon_path; | ||||
|     js["banner_path"] = prj.banner_path; | ||||
|     js["banner_a_path"] = prj.banner_a_path; | ||||
|     js["rsf_path"] = prj.rsf_path; | ||||
|     js["logo_lz11_path"] = prj.logo_lz11_path; | ||||
|  | ||||
|     js["dir_gfx"] = prj.dir_gfx; | ||||
|     js["dir_gfxbuild"] = prj.dir_gfxbuild; | ||||
|     js["dir_romfs"] = prj.dir_romfs; | ||||
|  | ||||
|     nlohmann::json arch_flags; | ||||
|     Vec2Json(prj.arch_flags, arch_flags, prj); | ||||
|     js["arch_flags"] = arch_flags; | ||||
|  | ||||
|     nlohmann::json c_flags; | ||||
|     Vec2Json(prj.c_flags, c_flags, prj); | ||||
|     js["c_flags"] = c_flags; | ||||
|  | ||||
|     nlohmann::json cxx_flags; | ||||
|     Vec2Json(prj.cxx_flags, cxx_flags, prj); | ||||
|     js["cxx_flags"] = cxx_flags; | ||||
|  | ||||
|     nlohmann::json as_flags; | ||||
|     Vec2Json(prj.as_flags, as_flags, prj); | ||||
|     js["as_flags"] = as_flags; | ||||
|  | ||||
|     nlohmann::json linker_flags; | ||||
|     Vec2Json(prj.linker_flags, linker_flags, prj); | ||||
|     js["linker_flags"] = linker_flags; | ||||
|  | ||||
|     js["cxx_compiler"] = prj.cxx_compiler; | ||||
|     js["c_compiler"] = prj.c_compiler; | ||||
|     js["asm_compiler"] = prj.asm_compiler; | ||||
|     js["linker"] = prj.linker; | ||||
|  | ||||
|     std::ofstream fout(path); | ||||
|     fout << js.dump(4); | ||||
|     fout.close(); | ||||
|   } | ||||
|  | ||||
|   void CompileProject(std::string path) | ||||
|   { | ||||
|     std::string dkp_env = getenv("DEVKITPRO"); | ||||
|     if (dkp_env.c_str() == NULL) | ||||
|     { | ||||
|       std::cerr << CCRED << "[-] Please set DEVKITPRO ENV Variable!\n" | ||||
|                 << CCRESET; | ||||
|       return; | ||||
|     } | ||||
|     nlohmann::json js; | ||||
|     std::ifstream is(path + "/build.json"); | ||||
|     if (!is) | ||||
|     { | ||||
|       std::cerr << CCRED << "[-] build.json not in " << path << "!\n" | ||||
|                 << CCRESET; | ||||
|       return; | ||||
|     } | ||||
|     is >> js; | ||||
|  | ||||
|     is.close(); | ||||
|  | ||||
|     std::cout << CCBLUE << "[+] Compiling at " << path << " ...\n" | ||||
|               << CCRESET; | ||||
|  | ||||
|     NpiProject prj; | ||||
|     prj.name = catch_str(js, "project_name"); | ||||
|     prj.author = catch_str(js, "author"); | ||||
|     prj.vmajor = catch_int(js, "vmajor"); | ||||
|     prj.vminor = catch_int(js, "vminor"); | ||||
|     prj.vbuild = catch_int(js, "vbuild"); | ||||
|     prj.description = catch_str(js, "description"); | ||||
|     prj.unique_id = catch_str(js, "unique_id"); | ||||
|     prj.prod = catch_str(js, "prod_code"); | ||||
|     prj.platform = catch_str(js, "platform"); | ||||
|  | ||||
|     prj.icon_path = catch_str(js, "icon_path"); | ||||
|     prj.banner_path = catch_str(js, "banner_path"); | ||||
|     prj.banner_a_path = catch_str(js, "banner_a_path"); | ||||
|     prj.rsf_path = catch_str(js, "rsf_path"); | ||||
|     prj.logo_lz11_path = catch_str(js, "logo_lz11_path"); | ||||
|     prj.dir_gfx = catch_str(js, "dir_gfx"); | ||||
|     prj.dir_gfxbuild = catch_str(js, "dir_gfxbuild"); | ||||
|     prj.dir_romfs = catch_str(js, "dir_romfs"); | ||||
|  | ||||
|     Js2Vec(prj.arch_flags, js["arch_flags"]); | ||||
|     Js2Vec(prj.linker_flags, js["linker_flags"]); | ||||
|     Js2Vec(prj.c_flags, js["c_flags"]); | ||||
|     Js2Vec(prj.cxx_flags, js["cxx_flags"]); | ||||
|     Js2Vec(prj.as_flags, js["as_flags"]); | ||||
|     Js2Vec(prj.source_dirs, js["source_dirs"]); | ||||
|     Js2Vec(prj.include_dirs, js["include_dirs"]); | ||||
|     Js2Vec(prj.lib_dirs, js["lib_dirs"]); | ||||
|     Js2Vec(prj.libraries, js["libraries"]); | ||||
|     prj.cxx_compiler = catch_str(js, "cxx_compiler"); | ||||
|     prj.c_compiler = catch_str(js, "c_compiler"); | ||||
|     prj.asm_compiler = catch_str(js, "asm_compiler"); | ||||
|     prj.linker = catch_str(js, "linker"); | ||||
|     NpiProject _2build = prj; | ||||
|     ProcessPrj2Cmp(&_2build, prj); | ||||
|     CompileProject(_2build, path); | ||||
|   } | ||||
|   void CleanProject(std::string path) | ||||
|   { | ||||
|     DeleteFiles(path, {".3dsx", ".cia", ".elf"}); | ||||
|     DeleteFiles(path + "/" + "romfs", {".t3x"}); | ||||
|     DeleteDirectory(path + "/build"); | ||||
|   } | ||||
| } // namespace helper | ||||
							
								
								
									
										1296
									
								
								source/icon.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1296
									
								
								source/icon.cpp
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										688
									
								
								source/logo_lz11.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										688
									
								
								source/logo_lz11.cpp
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,688 @@ | ||||
| #include <logo_lz11.hpp> | ||||
|  | ||||
| unsigned char logo_lz11[] = { | ||||
|     0x11, 0x40, 0xe6, 0x0,  0x0,  0x64, 0x61, 0x72, 0x63, 0xff, 0xfe, 0x1c, | ||||
|     0x0,  0x0,  0x0,  0x0,  0x0,  0x1,  0x20, 0xe6, 0x0,  0x0,  0x83, 0x30, | ||||
|     0x9,  0x64, 0x3,  0x0,  0x0,  0x80, 0x20, 0x3,  0x30, 0x13, 0xab, 0x30, | ||||
|     0x18, 0x11, 0x20, 0x1d, 0x2,  0xa0, 0xb,  0x6,  0x20, 0x2b, 0x30, 0x18, | ||||
|     0x5a, 0x9,  0x20, 0x35, 0x10, 0x20, 0x39, 0x30, 0x2b, 0xac, 0x20, 0x20, | ||||
|     0x54, 0xaa, 0x20, 0x45, 0x40, 0x20, 0x1c, 0xc,  0x20, 0x2c, 0x98, 0x20, | ||||
|     0x51, 0x60, 0x55, 0x8,  0x50, 0x38, 0xdc, 0x30, 0xb,  0xa,  0x50, 0x23, | ||||
|     0x20, 0x20, 0x51, 0x5,  0x20, 0xd,  0x0,  0x0,  0xe8, 0x20, 0x50, 0x64, | ||||
|     0x30, 0xb,  0xa5, 0x20, 0x40, 0x78, 0x20, 0x6f, 0xa8, 0x1,  0x50, 0x53, | ||||
|     0xe,  0x20, 0x89, 0x40, 0xb2, 0x30, 0x75, 0x14, 0x0,  0x0,  0x28, 0x4, | ||||
|     0x0,  0x24, 0x0,  0xc8, 0x20, 0x81, 0x80, 0x18, 0x20, 0xb,  0x80, 0x0, | ||||
|     0x28, 0x0,  0xe4, 0x30, 0x8d, 0x99, 0x20, 0x17, 0x20, 0x0,  0x0,  0x53, | ||||
|     0xfa, 0x30, 0x17, 0xb9, 0x50, 0xb,  0x12, 0x2,  0x50, 0x8f, 0x30, 0xa7, | ||||
|     0x48, 0x1c, 0x20, 0xa8, 0xc0, 0xd9, 0x20, 0xbf, 0x5,  0x0,  0x0,  0x41, | ||||
|     0x4c, 0x20, 0xb4, 0x40, 0xdf, 0x0,  0x0,  0xe0, 0x20, 0xb0, 0x10, 0x0, | ||||
|     0x0,  0x2e, 0x20, 0xe3, 0x61, 0x0,  0x6e, 0x0,  0x14, 0x69, 0x0,  0x6d, | ||||
|     0x20, 0xed, 0x4e, 0x20, 0x7,  0x6e, 0x0,  0x10, 0x74, 0x0,  0x65, 0x20, | ||||
|     0x11, 0x64, 0x0,  0x6f, 0x0,  0x51, 0x4c, 0x20, 0x3,  0x67, 0x20, 0x7, | ||||
|     0x5f, 0x0,  0x44, 0x20, 0x3,  0x41, 0x30, 0x20, 0x1,  0x5f, 0x0,  0x53, | ||||
|     0x0,  0x63, 0x40, 0x1f, 0x5,  0x65, 0x0,  0x4f, 0x0,  0x75, 0x20, 0x2b, | ||||
|     0x41, 0x20, 0x43, 0x5a, 0x62, 0x20, 0x13, 0x6c, 0x40, 0x47, 0x2,  0x50, | ||||
|     0x43, 0x42, 0x3,  0x20, 0x43, 0x43, 0xbd, 0x1,  0x80, 0x87, 0x55, 0x4, | ||||
|     0xc0, 0x43, 0x1,  0x90, 0xcb, 0x0,  0x90, 0x87, 0xf1, 0x53, 0x74, 0x41, | ||||
|     0x9f, 0x51, 0x67, 0x22, 0x8f, 0x6d, 0x21, 0xad, 0x73, 0x0,  0x6b, 0x81, | ||||
|     0x73, 0xaa, 0x51, 0xb7, 0x62, 0x21, 0x89, 0x62, 0x21, 0x85, 0x6c, 0x21, | ||||
|     0xb9, 0x73, 0xb5, 0xe0, 0x1b, 0x6c, 0x61, 0xc3, 0xd0, 0x31, 0x77, 0x21, | ||||
|     0xf5, 0x76, 0x0,  0x20, 0x2d, 0xbf, 0x30, 0x43, 0x79, 0x22, 0x1,  0x1, | ||||
|     0x32, 0xb,  0x71, 0xf7, 0x0,  0xf0, 0x2f, 0x71, 0x6f, 0xd0, 0x2f, 0x81, | ||||
|     0x0,  0xb0, 0x2,  0x43, 0x4c, 0x41, 0x4e, 0xff, 0xfe, 0x22, 0xec, 0x18, | ||||
|     0x0,  0x2,  0x2,  0x33, 0x43, 0x23, 0x67, 0x0,  0x70, 0x61, 0x1a, 0x74, | ||||
|     0x31, 0x3c, 0x63, 0x7e, 0x33, 0x99, 0x28, 0x23, 0x9d, 0xa1, 0x20, 0x0, | ||||
|     0xf0, 0x43, 0x8c, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x8,  0x4f, 0x75, 0x74, | ||||
|     0x41, 0x23, 0xb1, 0x47, 0x5f, 0x41, 0x10, 0x5f, 0x30, 0x30, 0xd0, 0x60, | ||||
|     0x70, 0x61, 0x69, 0x31, 0x54, 0x5c, 0x23, 0xac, 0x50, 0x43, 0xbe, 0x6, | ||||
|     0x33, 0x46, 0x0,  0x2c, 0xb5, 0x23, 0xdd, 0xcc, 0x33, 0xab, 0x23, 0xcd, | ||||
|     0x54, 0x23, 0xd1, 0xc4, 0x23, 0xd5, 0x43, 0x10, 0x23, 0xd0, 0x6d, 0x61, | ||||
|     0x73, 0x6b, 0xf0, 0x40, 0x33, 0xf0, 0x85, 0x34, 0xd,  0x43, 0x4c, 0x56, | ||||
|     0x43, 0x33, 0xfc, 0xc,  0x34, 0x19, 0xf2, 0x20, 0x2c, 0x33, 0xeb, 0x40, | ||||
|     0xb,  0x44, 0x16, 0x7f, 0x43, 0x20, 0x51, 0xc1, 0xf9, 0x23, 0xcd, 0x30, | ||||
|     0x86, 0x30, 0x5d, 0xa0, 0xb,  0x34, 0x4a, 0x82, 0x42, 0x0,  0x10, 0xb, | ||||
|     0x5c, 0x7f, 0x20, 0x13, 0x8a, 0x20, 0x17, 0x30, 0x3b, 0x90, 0xb,  0xab, | ||||
|     0xaa, 0x5c, 0xe2, 0x20, 0x47, 0x9c, 0x40, 0x2f, 0xb0, 0xb,  0x34, 0x90, | ||||
|     0x62, 0x75, 0x6,  0x62, 0x62, 0x6c, 0x65, 0x73, 0xc0, 0xe3, 0xa0, 0x9f, | ||||
|     0x49, 0xf9, 0x80, 0x9f, 0x24, 0xa6, 0x31, 0x37, 0x90, 0x9f, 0x34, 0xce, | ||||
|     0x8c, 0x42, 0x34, 0xbc, 0xbc, 0x80, 0x43, 0x31, 0x2,  0x90, 0x43, 0x0, | ||||
|     0x41, 0x27, 0x25, 0x19, 0x51, 0x27, 0x54, 0x53, 0x8d, 0x81, 0x27, 0x1, | ||||
|     0x2,  0x0,  0x24, 0x76, 0x61, 0x27, 0x1c, 0x21, 0x3,  0x2d, 0x60, 0xc0, | ||||
|     0x51, 0xfe, 0x44, 0xe0, 0xb,  0x72, 0x14, 0xa0, 0xe0, 0xb,  0x3,  0x90, | ||||
|     0xc0, 0x29, 0xa5, 0x14, 0xbe, 0x0,  0x40, 0xf7, 0x0,  0x60, 0x6f, 0x8a, | ||||
|     0xf0, 0xf7, 0x75, 0x64, 0x4f, 0x22, 0x3a, 0x9e, 0x21, 0x7f, 0x80, 0x79, | ||||
|     0x3f, 0x30, 0xb,  0x0,  0x40, 0xff, 0x1,  0x50, 0x4b, 0x20, 0x3f, 0xcf, | ||||
|     0x3b, 0x90, 0x4b, 0xff, 0x30, 0xb,  0x0,  0xd2, 0xbf, 0x35, 0xf7, 0xb2, | ||||
|     0xbf, 0x25, 0xd2, 0x82, 0xbf, 0x20, 0xeb, 0xc2, 0xbf, 0x8b, 0x32, 0x20, | ||||
|     0x47, 0x5f, 0x42, 0x0,  0x42, 0xbf, 0xbc, 0x26, 0x75, 0x50, 0x2d, 0xaa, | ||||
|     0x92, 0xbf, 0x6c, 0x26, 0xa1, 0xa8, 0x26, 0xa5, 0xe4, 0x26, 0xa9, 0x24, | ||||
|     0xbf, 0x26, 0x95, 0x70, 0x26, 0x99, 0x1,  0xb2, 0xbf, 0x92, 0x2b, 0x93, | ||||
|     0x90, 0x1,  0xb2, 0x5f, 0xb0, 0x3f, 0xf7, 0x1,  0xf2, 0x57, 0xf0, 0x3b, | ||||
|     0x1,  0xb2, 0x4f, 0x92, 0xe3, 0x48, 0x23, 0x73, 0x52, 0x4f, 0x2,  0xb2, | ||||
|     0x1f, 0x14, 0xcd, 0xcc, 0x4c, 0x24, 0x5a, 0x20, 0x23, 0xbf, 0x0,  0x40, | ||||
|     0xec, 0x30, 0xb,  0x2,  0xa2, 0x1f, 0x20, 0x4b, 0xcc, 0x22, 0x1f, 0x30, | ||||
|     0x4b, 0x80, 0x3f, 0xfc, 0x50, 0xb,  0x0,  0xd4, 0xdf, 0x38, 0x44, 0xb4, | ||||
|     0xdf, 0x31, 0x95, 0x74, 0xdf, 0xf1, 0x0,  0x62, 0xff, 0xc4, 0xdf, 0x30, | ||||
|     0xa0, 0x47, 0x5f, 0x43, 0x0,  0x44, 0xdf, 0xb0, 0xaa, 0x28, 0x95, 0xf, | ||||
|     0xe4, 0xdf, 0x78, 0x28, 0xc1, 0xb4, 0x28, 0xc5, 0xf0, 0xb1, 0x28, 0xc9, | ||||
|     0x30, 0x2,  0x22, 0x1f, 0xf4, 0x3f, 0xdb, 0xb6, 0x91, 0x25, 0x62, 0x4c, | ||||
|     0x60, 0x25, 0x66, 0x7f, 0x43, 0x30, 0xb,  0x2,  0x52, 0x2b, 0x60, 0x41, | ||||
|     0xfc, 0x2,  0x92, 0x2b, 0x50, 0x3b, 0x2,  0x52, 0x2b, 0x39, 0xce, 0x2, | ||||
|     0x14, 0x4b, 0x95, 0x4f, 0x80, 0xbf, 0xfe, 0x51, 0xd3, 0x1,  0xd2, 0x1f, | ||||
|     0x0,  0x30, 0x3f, 0x0,  0xb6, 0xdf, 0x2,  0x71, 0xff, 0x36, 0xdf, 0x51, | ||||
|     0xff, 0x8,  0xb5, 0x46, 0xdf, 0x34, 0x3a, 0x83, 0x2a, 0xc1, 0xbc, 0x2a, | ||||
|     0xc5, 0xf8, 0x30, 0xf,  0xae, 0x2a, 0xb5, 0x74, 0x2a, 0xb9, 0xb4, 0x35, | ||||
|     0xa3, 0x1,  0xe6, 0xe7, 0x0,  0xf2, 0x7,  0x6c, 0x1c, 0x6f, 0x67, 0x6f, | ||||
|     0x0,  0xa7, 0x33, 0x1,  0x52, 0x7,  0xd,  0xe2, 0x43, 0x77, 0x61, 0x7f, | ||||
|     0x76, 0xe7, 0xc5, 0xd7, 0x3f, 0x38, 0xf3, 0x3c, 0x47, 0x56, 0x27, 0xf2, | ||||
|     0x87, 0x44, 0xb3, 0x60, 0xbc, 0xd6, 0xeb, 0x40, 0x17, 0x40, 0xd,  0xd7, | ||||
|     0xa3, 0xbb, 0x87, 0x37, 0x67, 0x66, 0x66, 0xe6, 0x3f, 0xc8, 0x2f, 0x2, | ||||
|     0x62, 0xab, 0x0,  0xf9, 0x9f, 0xde, 0x3c, 0xb3, 0x3,  0x36, 0xdf, 0x98, | ||||
|     0x2d, 0x4c, 0x57, 0xd,  0x92, 0xbf, 0x3a, 0x87, 0xb0, 0xb7, 0x2d, 0x85, | ||||
|     0xec, 0x39, 0xef, 0x2d, 0x75, 0x68, 0x62, 0xbf, 0x3c, 0xc3, 0x2,  0xf6, | ||||
|     0xe7, 0xff, 0x2,  0x52, 0xb3, 0xe6, 0xe7, 0xe,  0xa7, 0x23, 0x1,  0x72, | ||||
|     0xbf, 0x34, 0x87, 0x3f, 0x29, 0xea, 0x8b, 0x37, 0x67, 0xfd, 0x24, 0x9a, | ||||
|     0x47, 0x73, 0x82, 0xcb, 0x9a, 0x27, 0x50, 0x23, 0x52, 0xcb, 0x20, 0x82, | ||||
|     0xcb, 0xe0, 0x6a, 0x1b, 0x32, 0xe3, 0x29, 0x83, 0xf0, 0x42, 0xcd, 0xcc, | ||||
|     0xc,  0x7f, 0x40, 0x5c, 0x4a, 0x57, 0xbb, 0x32, 0xfb, 0x4,  0xf7, 0xbb, | ||||
|     0xfc, 0x9f, 0x3f, 0xa7, 0x3,  0x3c, 0x9f, 0x75, 0x28, 0x2f, 0xef, 0x5c, | ||||
|     0x9f, 0x95, 0xbf, 0xd4, 0x2f, 0xfb, 0x18, 0x2f, 0xf7, 0x77, 0x5c, 0x39, | ||||
|     0xfb, 0x6c, 0x9f, 0x3c, 0xc7, 0xdc, 0x9,  0x2c, 0xa7, 0x1,  0xb6, 0x13, | ||||
|     0x1,  0xc,  0xa7, 0xff, 0x10, 0x2,  0xac, 0xeb, 0x2,  0xd3, 0xa7, 0x4d, | ||||
|     0x2f, 0x28, 0x42, 0x3d, 0x3b, 0x4d, 0x47, 0x46, 0x73, 0x22, 0xf2, 0x84, | ||||
|     0xce, 0x57, 0xe1, 0x65, 0x2d, 0x3e, 0x33, 0xa7, 0xa4, 0x70, 0x7c, 0xd, | ||||
|     0x63, 0x8f, 0x40, 0x2f, 0x2,  0xf3, 0x8f, 0x1,  0x4d, 0x6b, 0x4,  0x30, | ||||
|     0x13, 0xff, 0xff, 0x30, 0xff, 0xff, 0x3f, 0x3b, 0x10, 0x13, 0x70, 0x7, | ||||
|     0x77, 0x77, 0x77, 0x77, 0x60, 0x6e, 0xa0, 0x7,  0x0,  0xf0, 0x1f, 0xbb, | ||||
|     0xbb, 0x55, 0x55, 0x3,  0x12, 0x23, 0x23, 0x23, 0x70, 0x7,  0xdd, 0xdd, | ||||
|     0x20, 0xf,  0x5b, 0x1c, 0x5b, 0x5b, 0xfd, 0x60, 0x7,  0x0,  0x70, 0x1f, | ||||
|     0x70, 0x27, 0xaa, 0xaa, 0x8c, 0x20, 0x3f, 0x8b, 0x8b, 0x8b, 0x70, 0x7, | ||||
|     0x40, 0x4f, 0xc3, 0xc3, 0x60, 0xc3, 0x70, 0x7,  0x0,  0xf0, 0x1f, 0x11, | ||||
|     0x11, 0x11, 0x11, 0x2,  0x0,  0xf8, 0xf8, 0xf8, 0x11, 0x0,  0x11, 0x11, | ||||
|     0xa,  0xfe, 0x20, 0x7,  0x4a, 0x81, 0xa0, 0x7,  0x70, 0x17, 0x70, 0x27, | ||||
|     0xf0, 0x1f, 0xa,  0xf0, 0xf,  0x43, 0x12, 0x4c, 0x49, 0x4d, 0x7f, 0x9f, | ||||
|     0x28, 0x4,  0x5f, 0x1f, 0x69, 0x15, 0x6d, 0x61, 0x67, 0x3b, 0x8f, 0x10, | ||||
|     0x2d, 0x55, 0xa,  0x3f, 0xfb, 0xe0, 0x20, 0x17, 0x10, 0x19, 0x74, 0x7f, | ||||
|     0x10, 0x26, 0x72, 0x4f, 0x7f, 0xbb, 0xff, 0x37, 0xb,  0x10, 0x2,  0x2, | ||||
|     0x2,  0x7a, 0x4f, 0x1,  0xfe, 0x3,  0x0,  0x0,  0x62, 0x21, 0x21, 0x21, | ||||
|     0x33, 0x33, 0x33, 0x33, 0x0,  0xb6, 0x18, 0x18, 0x18, 0x33, 0x33, 0xff, | ||||
|     0xff, 0x10, 0x1,  0x3,  0x3,  0x2e, 0x41, 0x11, 0x1,  0x2,  0x30, 0xfd, | ||||
|     0x5f, 0xd8, 0x30, 0x7,  0x70, 0x17, 0x90, 0x1f, 0x50, 0x17, 0x0,  0x0, | ||||
|     0x1f, 0x73, 0x0,  0x0,  0x1f, 0x40, 0x10, 0x40, 0x3f, 0xbb, 0x33, 0x73, | ||||
|     0xaa, 0x1f, 0x1f, 0xd,  0x1f, 0xff, 0xff, 0xf7, 0x4a, 0xc7, 0x20, 0x5f, | ||||
|     0x11, 0x30, 0x5f, 0x6,  0x3,  0xff, 0x10, 0xff, 0x57, 0x27, 0xdc, 0x10, | ||||
|     0x25, 0x76, 0x5f, 0xe,  0x37, 0x0,  0x1f, 0x43, 0xd7, 0x7e, 0x4f, 0xf, | ||||
|     0x20, 0x1,  0xb3, 0xe7, 0x4,  0xf0, 0x7,  0x5e, 0xf0, 0x2e, 0xc8, 0x0, | ||||
|     0x0,  0x20, 0xf,  0x10, 0x25, 0x7a, 0x5f, 0x73, 0xef, 0x10, 0x2f, 0x73, | ||||
|     0xff, 0x1,  0x10, 0x0,  0xef, 0xe,  0x10, 0x2d, 0xb7, 0xff, 0xbc, 0x8, | ||||
|     0xce, 0x88, 0x8,  0x4a, 0x13, 0x13, 0x13, 0xff, 0x6f, 0x0,  0x0,  0x88, | ||||
|     0x70, 0x88, 0x5f, 0xef, 0x50, 0x7,  0x4,  0x0,  0x1f, 0x80, 0x88, 0x88, | ||||
|     0xa,  0x0,  0x37, 0x37, 0x37, 0xcb, 0xff, 0xec, 0xff, 0x42, 0x18, 0x16, | ||||
|     0x16, 0x16, 0x10, 0x25, 0x7f, 0xef, 0x10, 0x7,  0xf,  0x57, 0x7f, 0xff, | ||||
|     0x7f, 0x40, 0x6,  0x0,  0x2f, 0xff, 0xb7, 0xbb, 0x37, 0x33, 0x6a, 0xa, | ||||
|     0x0,  0xa,  0xa,  0xbb, 0xbb, 0x33, 0x33, 0x5,  0x2,  0x38, 0x2,  0x2, | ||||
|     0xff, 0xff, 0x70, 0x17, 0x2,  0x80, 0x1f, 0x7b, 0x33, 0x77, 0x1,  0x4e, | ||||
|     0x1f, 0x1f, 0x1f, 0xf7, 0xff, 0xf7, 0x10, 0x25, 0xd5, 0x67, 0x1,  0xe8, | ||||
|     0xff, 0x1,  0x6b, 0x11, 0x11, 0x11, 0x8f, 0xff, 0x44, 0xf,  0x2c, 0xef, | ||||
|     0x3,  0x3,  0x3,  0x5,  0x7d, 0x5f, 0x1e, 0xff, 0x18, 0x10, 0xff, 0x6b, | ||||
|     0x24, 0x57, 0x7d, 0xcf, 0xf,  0xff, 0x0,  0x7,  0xff, 0x20, 0x20, 0x20, | ||||
|     0x20, 0x10, 0x25, 0x89, 0x6f, 0x63, 0xef, 0x6,  0x73, 0xff, 0xc1, 0x73, | ||||
|     0xef, 0x7,  0x73, 0xff, 0x7f, 0xb3, 0x7f, 0x37, 0xa,  0x0,  0x28, 0xdf, | ||||
|     0x4,  0x31, 0x33, 0x9d, 0xd9, 0x21, 0x2e, 0x87, 0x11, 0x11, 0x1c, 0xdd, | ||||
|     0xdd, 0xa1, 0x0,  0x2e, 0x8f, 0x70, 0x17, 0x1,  0x20, 0x1f, 0x9d, 0x81, | ||||
|     0x80, 0x0,  0x2e, 0xcf, 0xdd, 0x7b, 0x31, 0x73, 0x4e, 0x1e, 0x1e, 0x41, | ||||
|     0x1e, 0x10, 0x25, 0xf3, 0xff, 0xcf, 0x1,  0xf,  0xf8, 0x40, 0xa3, 0xcf, | ||||
|     0x0,  0xf,  0x0,  0xf,  0xf,  0x82, 0x1b, 0x1b, 0x1b, 0xa0, 0x5,  0x28, | ||||
|     0xff, 0x10, 0x39, 0x5f, 0xfe, 0xff, 0xf0, 0xff, 0x22, 0x15, 0x16, 0x16, | ||||
|     0x16, 0x79, 0x6f, 0xf0, 0x20, 0xf,  0xa2, 0x20, 0xf,  0x84, 0x10, 0x15, | ||||
|     0x8f, 0xff, 0xf0, 0xff, 0x8,  0x4,  0xbf, 0xcf, 0xde, 0xff, 0x4,  0xce, | ||||
|     0xe,  0x1,  0x1,  0x1,  0xfb, 0xff, 0x88, 0xcc, 0x0,  0x8e, 0x88, 0xb, | ||||
|     0x34, 0x34, 0x34, 0xcc, 0xcc, 0x78, 0x88, 0x40, 0x7,  0xfc, 0x1f, 0x70, | ||||
|     0x17, 0x1,  0xf0, 0x1f, 0xf,  0xff, 0x80, 0xd0, 0x4b, 0xef, 0x20, 0x56, | ||||
|     0xe8, 0x30, 0x5f, 0xfd, 0xff, 0xfc, 0xff, 0x1f, 0x62, 0xf,  0xf,  0x2c, | ||||
|     0x85, 0x5,  0x5f, 0xff, 0x73, 0xef, 0x6,  0x23, 0xff, 0xc3, 0xef, 0x83, | ||||
|     0x10, 0x1,  0x73, 0xff, 0xb7, 0xdd, 0x37, 0x13, 0x6a, 0x2e, 0x2f, 0x2, | ||||
|     0xa9, 0x7f, 0x84, 0x0,  0x49, 0xbf, 0x33, 0x13, 0xdd, 0xfd, 0x39, 0xdf, | ||||
|     0x7b, 0xff, 0x75, 0x73, 0x5,  0xc2, 0x7f, 0x10, 0x6,  0xfe, 0xe7, 0x0, | ||||
|     0x23, 0xff, 0x7,  0x10, 0x7,  0xb3, 0xff, 0x1,  0x29, 0x91, 0xf8, 0x3e, | ||||
|     0x87, 0x7f, 0xff, 0x39, 0xa1, 0xc,  0xbe, 0x7f, 0x10, 0x5,  0xfd, 0xff, | ||||
|     0x7f, 0x0,  0xf,  0x22, 0xff, 0x20, 0xbf, 0xcf, 0xfe, 0xff, 0xee, 0x0, | ||||
|     0x38, 0xff, 0xcc, 0x8,  0xcc, 0xce, 0xcc, 0x61, 0x2c, 0xa8, 0xee, 0xee, | ||||
|     0xff, 0x38, 0xff, 0x1,  0x0,  0x2d, 0x17, 0x70, 0x17, 0x1,  0xf0, 0x1f, | ||||
|     0xff, 0xff, 0xf8, 0x20, 0xff, 0x4b, 0x28, 0xef, 0xcc, 0xee, 0xec, 0xfe, | ||||
|     0x63, 0x1e, 0x24, 0x24, 0x24, 0xf,  0xff, 0xff, 0x73, 0xef, 0x10, 0x14, | ||||
|     0x73, 0xff, 0x10, 0x8,  0xff, 0x67, 0x8,  0x80, 0xe7, 0xff, 0xce, 0xcc, | ||||
|     0xef, 0x88, 0x4b, 0x2c, 0x2c, 0x64, 0x2c, 0x3,  0x9e, 0x7f, 0x57, 0xff, | ||||
|     0xcc, 0x8c, 0x5e, 0xd7, 0xcb, 0xff, 0x1a, 0xe8, 0xff, 0x47, 0x10, 0x0, | ||||
|     0xad, 0x7f, 0x10, 0x26, 0x25, 0x17, 0x7f, 0xcf, 0xff, 0xef, 0x0,  0xff, | ||||
|     0xf,  0xa,  0x2,  0x2,  0x2,  0x17, 0x33, 0x10, 0x17, 0x11, 0x71, 0x20, | ||||
|     0x7,  0x11, 0x11, 0x11, 0x11, 0x7e, 0xa3, 0x4e, 0xaf, 0xdd, 0x17, 0x70, | ||||
|     0x17, 0x90, 0x1f, 0xde, 0xcf, 0x1,  0x70, 0x1f, 0xff, 0xd,  0x7d, 0x11, | ||||
|     0x71, 0x65, 0x20, 0x6f, 0xaf, 0xf,  0xf0, 0x5d, 0x8f, 0x54, 0xf7, 0xcf, | ||||
|     0xff, 0xfe, 0x2e, 0xc7, 0x42, 0x10, 0x24, 0x35, 0x37, 0xf,  0xff, 0x7, | ||||
|     0xf,  0x12, 0x3,  0x3,  0x3,  0xf0, 0xf,  0x0,  0x1d, 0x7,  0x3,  0xdd, | ||||
|     0x17, 0xd0, 0xf3, 0xef, 0xf3, 0xff, 0xf0, 0x23, 0xef, 0x82, 0x1d, 0x1d, | ||||
|     0x1d, 0xe0, 0x7f, 0xff, 0xf0, 0xf,  0x10, 0x4c, 0x3,  0xff, 0xf7, 0xff, | ||||
|     0x77, 0xa,  0x1,  0x0,  0x1,  0x1,  0x77, 0x77, 0x77, 0x77, 0xda, 0x8, | ||||
|     0x38, 0x8,  0x8,  0xff, 0xff, 0x70, 0x17, 0x0,  0xf0, 0x1f, 0xff, 0x7f, | ||||
|     0x77, 0x30, 0xf7, 0x7,  0x2a, 0xbf, 0x10, 0x2,  0x87, 0xff, 0xcf, 0xff, | ||||
|     0xf,  0xcb, 0xd4, 0x21, 0x7f, 0x0,  0x17, 0xff, 0x1,  0x6,  0xc7, 0xff, | ||||
|     0xf7, 0x10, 0xb,  0xeb, 0xff, 0x1,  0x0,  0x0,  0x13, 0x0,  0x62, 0x22, | ||||
|     0x22, 0x22, 0x33, 0x33, 0x3,  0x0,  0x0,  0x3,  0x29, 0x29, 0x29, 0xfe, | ||||
|     0x5f, 0x70, 0x17, 0xe0, 0x90, 0x1f, 0xde, 0x5f, 0x0,  0xf0, 0x1f, 0x1e, | ||||
|     0xff, 0x10, 0xff, 0x6b, 0x10, 0xa,  0xa,  0xa,  0x7f, 0xff, 0xf,  0xff, | ||||
|     0x0,  0xff, 0x8,  0x20, 0x20, 0x20, 0x20, 0x10, 0x0,  0xf,  0xff, 0xef, | ||||
|     0xff, 0xef, 0x40, 0xe,  0x0,  0x2f, 0x4f, 0xce, 0xc8, 0xce, 0x88, 0x4f, | ||||
|     0x2c, 0x0,  0x2c, 0x2c, 0x88, 0x88, 0xaa, 0xaa, 0x1b, 0x34, 0x38, 0x34, | ||||
|     0x34, 0xff, 0x77, 0x70, 0x17, 0x2,  0xa0, 0x1f, 0x8a, 0x17, 0x35, 0x1, | ||||
|     0x35, 0x35, 0xcc, 0xe8, 0x88, 0xe8, 0x4b, 0x20, 0x67, 0xbf, 0x0,  0x1f, | ||||
|     0xd7, 0xfe, 0x10, 0xc,  0xcf, 0xe7, 0x4,  0xfe, 0x5f, 0xf3, 0xef, 0x10, | ||||
|     0x0,  0x83, 0xff, 0x10, 0x16, 0x6f, 0x4f, 0xfe, 0x5f, 0x0,  0xa,  0x0, | ||||
|     0x8f, 0x0,  0xb,  0x37, 0x37, 0x37, 0x81, 0x4,  0x93, 0xff, 0x80, 0xff, | ||||
|     0x4b, 0x1f, 0x1f, 0x1f, 0x10, 0x27, 0x73, 0xff, 0xb3, 0x2f, 0xff, 0xee, | ||||
|     0x3f, 0xef, 0x20, 0x6,  0xee, 0x43, 0x0,  0x4d, 0xd7, 0x70, 0x17, 0xab, | ||||
|     0x0,  0xe0, 0x1f, 0xef, 0x0,  0x50, 0x3f, 0xfe, 0x2a, 0x3f, 0x22, 0x10, | ||||
|     0x27, 0x53, 0xe7, 0x10, 0x1,  0xdd, 0xc7, 0x0,  0xe9, 0xff, 0x1,  0x6b, | ||||
|     0xa,  0xa,  0xa,  0xf7, 0x1,  0x77, 0x77, 0x77, 0x5a, 0x8,  0x8,  0x8, | ||||
|     0x20, 0x6,  0x21, 0x77, 0xda, 0x20, 0x7,  0x0,  0x0,  0x70, 0x7,  0xbd, | ||||
|     0x2f, 0xf0, 0x70, 0x17, 0x90, 0x1f, 0xdd, 0x37, 0x70, 0x37, 0xff, 0xf7, | ||||
|     0x77, 0xf7, 0x8,  0x4e, 0xf,  0xf,  0xf,  0x8d, 0x67, 0x10, 0x0,  0xd0, | ||||
|     0x8,  0x43, 0x29, 0x29, 0x29, 0xff, 0xef, 0xfb, 0xff, 0xf1, 0x30, 0xff, | ||||
|     0xf,  0x45, 0x8f, 0x10, 0x25, 0xed, 0x1f, 0xf,  0xff, 0xff, 0x0,  0x1d, | ||||
|     0x3,  0x3,  0x3,  0xf0, 0xf,  0x3,  0x7d, 0x7,  0x2f, 0xfa, 0xf0, 0x0, | ||||
|     0x30, 0xf,  0x0,  0xf0, 0xff, 0xf0, 0xff, 0x82, 0x1d, 0x1d, 0x1d, 0xe8, | ||||
|     0x7f, 0xff, 0xf0, 0xf,  0x10, 0x2c, 0xa3, 0xff, 0x70, 0x10, 0x7,  0xc3, | ||||
|     0xff, 0xbf, 0xff, 0x3f, 0xc0, 0x5f, 0x7,  0x8f, 0xff, 0xf,  0xa,  0x2, | ||||
|     0x2,  0x2,  0x1,  0x0,  0xef, 0x13, 0x11, 0x82, 0x21, 0x21, 0x21, 0x11, | ||||
|     0x1c, 0x11, 0x11, 0x11, 0x0,  0x36, 0x7,  0x70, 0x17, 0x1,  0x0,  0x1f, | ||||
|     0x10, 0x11, 0x4,  0x11, 0xa,  0x37, 0x37, 0x37, 0xfa, 0x1f, 0x3d, 0xff, | ||||
|     0x1f, 0x71, 0xff, 0x8b, 0x20, 0x67, 0x95, 0xff, 0x26, 0x87, 0x2a, 0x5f, | ||||
|     0x10, 0x6,  0xf,  0x2f, 0x8,  0x0,  0xff, 0x8,  0xc,  0xa1, 0x87, 0xff, | ||||
|     0xdf, 0xff, 0x30, 0xcf, 0xe,  0x3b, 0xe4, 0xeb, 0xcf, 0xcc, 0xcc, 0xce, | ||||
|     0xcc, 0x0,  0x61, 0x20, 0x20, 0x20, 0xee, 0xee, 0xff, 0xff, 0x74, 0x1, | ||||
|     0x0,  0x28, 0x17, 0x70, 0x17, 0x0,  0x0,  0x1f, 0x80, 0xd0, 0x1f, 0xcc, | ||||
|     0xed, 0x1,  0xcc, 0xec, 0xaa, 0x1f, 0x1f, 0x1f, 0xf3, 0x27, 0xff, 0x63, | ||||
|     0x57, 0x3c, 0x1f, 0x6f, 0xff, 0xfe, 0xff, 0xfe, 0x10, 0x6,  0x7f, 0xff, | ||||
|     0x43, 0xef, 0xfc, 0xf3, 0xff, 0x3,  0xa9, 0xff, 0x0,  0x4a, 0x47, 0xf3, | ||||
|     0xef, 0x10, 0x6,  0x83, 0xff, 0xe,  0xef, 0x6f, 0xb7, 0xbb, 0x0,  0x37, | ||||
|     0x33, 0x6a, 0xa,  0xa,  0xa,  0xff, 0xef, 0xa7, 0x82, 0xf7, 0x10, 0x3c, | ||||
|     0xf7, 0x77, 0x77, 0x24, 0xe7, 0x2d, 0x17, 0x70, 0x7,  0x38, 0x0,  0x0, | ||||
|     0x77, 0x7,  0x57, 0xf,  0x70, 0x1f, 0xbb, 0xbb, 0x33, 0x30, 0x73, 0x5, | ||||
|     0x43, 0x2f, 0xd0, 0x1f, 0xbb, 0x7b, 0x33, 0xf7, 0x6a, 0xb,  0xad, 0x57, | ||||
|     0x20, 0x3f, 0x1,  0x3d, 0x4f, 0xfe, 0x2c, 0xf7, 0x4b, 0xda, 0xa4, 0xf7, | ||||
|     0xf,  0x73, 0xff, 0xf,  0x26, 0x88, 0x26, 0x5e, 0x20, 0x10, 0x15, 0xac, | ||||
|     0xf7, 0xf,  0x70, 0x16, 0xac, 0xe7, 0xf0, 0xf,  0x3,  0x96, 0xe7, 0xf0, | ||||
|     0xff, 0xa2, 0x16, 0x31, 0x16, 0x16, 0xf0, 0xf,  0x7,  0x8f, 0xff, 0xef, | ||||
|     0xff, 0xef, 0x30, 0x9c, 0x80, 0xff, 0xff, 0x8a, 0xcc, 0x8e, 0x88, 0xb, | ||||
|     0x34, 0x34, 0xf,  0x34, 0xcc, 0xcc, 0x88, 0x40, 0x7,  0xff, 0xff, 0x70, | ||||
|     0x17, 0x1,  0x0,  0x1f, 0x41, 0x8c, 0x0,  0x50, 0x3f, 0xc9, 0xff, 0xec, | ||||
|     0xff, 0x62, 0x7,  0xb1, 0x7,  0xc0, 0x10, 0x1e, 0x73, 0xff, 0x10, 0x1e, | ||||
|     0x70, 0x87, 0xbf, 0xff, 0x8f, 0x4f, 0xf,  0xf,  0x0,  0xf,  0x8,  0x8, | ||||
|     0x8c, 0x88, 0x62, 0x29, 0x29, 0x43, 0x29, 0xff, 0xff, 0x0,  0x0,  0x88, | ||||
|     0x88, 0x5e, 0xff, 0x50, 0x7,  0x80, 0x2,  0x0,  0x1f, 0x80, 0x0,  0xa8, | ||||
|     0xf,  0x36, 0x36, 0x36, 0x7,  0xfd, 0xff, 0xf8, 0xff, 0x43, 0x20, 0x67, | ||||
|     0x10, 0x27, 0x3,  0xef, 0xb,  0xee, 0x57, 0x1,  0x43, 0x4c, 0x49, 0x4d, | ||||
|     0xff, 0xfe, 0x14, 0x3f, 0xa5, 0x2,  0x2,  0x28, 0x80, 0x0,  0x0,  0x1, | ||||
|     0x2f, 0xfb, 0x69, 0x8,  0x6d, 0x61, 0x67, 0x10, 0x3f, 0xb8, 0x1,  0x0, | ||||
|     0x1,  0x70, 0xa,  0x54, 0x83, 0x44, 0xc9, 0x4,  0x30, 0x5,  0x1f, 0xa2, | ||||
|     0xff, 0x11, 0x0,  0x7d, 0x17, 0x17, 0x17, 0xcc, 0xdc, 0x55, 0x55, 0x0, | ||||
|     0xc9, 0x3d, 0x3d, 0x3d, 0xff, 0xf0, 0xf,  0xf,  0x60, 0x70, 0x20, 0x7, | ||||
|     0x3f, 0xb9, 0x2,  0xf8, 0xf8, 0xf8, 0x1b, 0x1,  0xff, 0x71, 0xff, 0x59, | ||||
|     0x14, 0x14, 0x14, 0x85, 0x4f, 0x1,  0xf0, 0xf0, 0xf0, 0xe4, 0x91, 0x91, | ||||
|     0x91, 0x10, 0x7,  0xff, 0xdf, 0x0,  0xbf, 0x93, 0x3f, 0x37, 0x18, 0x4, | ||||
|     0x4,  0x4,  0xc0, 0x7f, 0xff, 0x2f, 0x16, 0xf,  0x70, 0x8,  0x8,  0x8, | ||||
|     0x99, 0x0,  0x99, 0x55, 0x55, 0xed, 0x2c, 0x2c, 0x2c, 0x2a, 0x10, 0xf1, | ||||
|     0x11, 0xff, 0x31, 0xe7, 0xf0, 0xff, 0x0,  0x0,  0x40, 0x22, 0x21, 0xc3, | ||||
|     0xf,  0xff, 0xf0, 0xf0, 0x8c, 0xd3, 0x3c, 0xd3, 0xd3, 0x10, 0xf,  0xd, | ||||
|     0xb7, 0xe3, 0xef, 0xf3, 0xff, 0x83, 0xef, 0x77, 0x7f, 0x20, 0x77, 0x12, | ||||
|     0x2f, 0xf7, 0x3,  0x55, 0x50, 0x77, 0xcd, 0x0,  0x7e, 0x7e, 0x7e, 0x9d, | ||||
|     0xee, 0x55, 0x11, 0xa5, 0x82, 0x20, 0x7,  0xff, 0x7f, 0x77, 0x77, 0x26, | ||||
|     0x22, 0x67, 0xff, 0x20, 0xff, 0xf7, 0x4f, 0xff, 0xcc, 0x8c, 0x11, 0x11, | ||||
|     0xed, 0x0,  0x9e, 0x9e, 0x9e, 0xae, 0x51, 0x10, 0xf5, 0xb9, 0x10, 0x3b, | ||||
|     0x3b, 0x3b, 0xff, 0xff, 0xfb, 0xff, 0xf3, 0xff, 0x41, 0x62, 0x29, 0xaf, | ||||
|     0x7f, 0x93, 0x7f, 0x37, 0xb8, 0x2d, 0xb7, 0x90, 0x20, 0x36, 0x77, 0x6, | ||||
|     0x2f, 0xff, 0x77, 0xff, 0x77, 0x77, 0x40, 0x66, 0x22, 0xaf, 0x95, 0xea, | ||||
|     0x57, 0x1,  0xb1, 0x5d, 0x0,  0x5d, 0x5d, 0x0,  0x0,  0xdd, 0xdd, 0xe1, | ||||
|     0x9f, 0x35, 0x9f, 0x9f, 0x40, 0x17, 0x29, 0xdf, 0xf7, 0x20, 0x5f, 0x22, | ||||
|     0x3d, 0xe4, 0x5c, 0x40, 0x50, 0x17, 0xaa, 0xf0, 0x5f, 0x20, 0x40, 0x35, | ||||
|     0x2b, 0x7b, 0xff, 0x10, 0x73, 0xff, 0x82, 0x2a, 0xf,  0xc3, 0xd1, 0x1f, | ||||
|     0x13, 0x0,  0x98, 0x2a, 0x2a, 0x2a, 0x77, 0x77, 0x77, 0x77, 0x60, 0x6e, | ||||
|     0x2f, 0xff, 0x70, 0x3f, 0x33, 0x73, 0xdd, 0xdd, 0x81, 0x0,  0x8f, 0x8f, | ||||
|     0x8f, 0x4a, 0xd5, 0x50, 0x57, 0xad, 0x8,  0x3c, 0x3c, 0x3c, 0x7f, 0x20, | ||||
|     0xd7, 0x2a, 0x1,  0x1,  0x41, 0x1,  0x70, 0x67, 0x9d, 0xea, 0x57, 0x11, | ||||
|     0xa9, 0x20, 0xdf, 0xe0, 0x70, 0x67, 0x70, 0x77, 0x7f, 0xff, 0x8e, 0x54, | ||||
|     0x10, 0xf7, 0xd5, 0x80, 0x2a, 0x67, 0x55, 0xa8, 0x7f, 0x15, 0xb5, 0x2b, | ||||
|     0x2b, 0x2e, 0x2b, 0xf7, 0x20, 0x60, 0x2e, 0x30, 0x3f, 0x21, 0x7,  0x30, | ||||
|     0xa7, 0x35, 0x8,  0x22, 0x55, 0x11, 0x85, 0x20, 0x5f, 0xaa, 0x1b, 0x11, | ||||
|     0x4,  0x51, 0x8d, 0x8e, 0x8e, 0x8e, 0xff, 0xff, 0x39, 0x7b, 0x0,  0x73, | ||||
|     0xf3, 0xcc, 0x61, 0x61, 0x61, 0xff, 0x7f, 0x38, 0xff, 0x7f, 0x31, 0x4f, | ||||
|     0x7f, 0xff, 0x70, 0x47, 0x93, 0x9b, 0x37, 0x6,  0x33, 0xd8, 0x38, 0x38, | ||||
|     0x38, 0x70, 0x47, 0x21, 0x16, 0x77, 0x41, 0x2e, 0x23, 0xc7, 0x7f, 0xf7, | ||||
|     0x77, 0xff, 0x3,  0x20, 0xa7, 0x10, 0x0,  0x0,  0x5d, 0x50, 0xff, 0x59, | ||||
|     0x11, 0x75, 0xad, 0xc0, 0x31, 0x7f, 0xe3, 0xef, 0x39, 0xff, 0x73, 0xf7, | ||||
|     0xf0, 0x51, 0x30, 0x51, 0x51, 0x73, 0xff, 0xb3, 0xef, 0x6c, 0xd4, 0xd4, | ||||
|     0xd4, 0x80, 0x73, 0xff, 0x23, 0x10, 0xc4, 0xfd, 0xa1, 0xcf, 0xcf, 0x57, | ||||
|     0xcf, 0x31, 0x1f, 0x96, 0x61, 0x7f, 0xa6, 0x4b, 0x2f, 0x51, 0x77, 0x0, | ||||
|     0x70, 0xff, 0xf7, 0x71, 0x77, 0x71, 0xc7, 0x71, 0x77, 0x71, 0x67, 0xc1, | ||||
|     0x61, 0x77, 0x71, 0x67, 0x81, 0x3f, 0x80, 0x61, 0xe7, 0xe,  0x15, 0x50, | ||||
|     0x77, 0xb5, 0x28, 0x28, 0x5a, 0x28, 0x21, 0xe7, 0x11, 0x31, 0xe7, 0x20, | ||||
|     0xd7, 0xf7, 0xb1, 0x5f, 0x1d, 0x0,  0x3c, 0x31, 0xf1, 0xb0, 0xa2, 0xa2, | ||||
|     0xa2, 0xb7, 0x83, 0x22, 0x1f, 0x78, 0x15, 0x15, 0x15, 0x7f, 0x22, 0x1f, | ||||
|     0x30, 0xf7, 0x8d, 0x82, 0x1f, 0xaa, 0x57, 0x11, 0x30, 0xf7, 0x22, 0x1f, | ||||
|     0x5d, 0x42, 0x1f, 0xc2, 0x61, 0x77, 0x7f, 0x87, 0x22, 0x53, 0x11, 0x55, | ||||
|     0x31, 0x7f, 0xbd, 0x1,  0x39, 0x33, 0x73, 0xd8, 0x83, 0x83, 0x83, 0x31, | ||||
|     0x67, 0xc0, 0x42, 0x5f, 0x62, 0x7,  0x9f, 0xe9, 0x97, 0x1f, 0x30, 0x5, | ||||
|     0x1,  0x5,  0x5,  0xfb, 0xff, 0x1d, 0x11, 0x85, 0x21, 0x9f, 0x60, 0x7f, | ||||
|     0x22, 0x38, 0xbf, 0xbf, 0x9d, 0x3c, 0x31, 0x71, 0xd4, 0x0,  0xa3, 0xa3, | ||||
|     0xa3, 0xf7, 0x6f, 0xf7, 0x1f, 0x22, 0xda, 0x32, 0x17, 0x22, 0xf7, 0x7, | ||||
|     0x32, 0x1f, 0x20, 0xa7, 0x66, 0x2f, 0xfc, 0xe1, 0x0,  0xdd, 0x1f, 0x11, | ||||
|     0xb4, 0x6b, 0x6b, 0x6b, 0xee, 0x1,  0x50, 0x11, 0xf1, 0xb5, 0x6c, 0x6c, | ||||
|     0x6c, 0xff, 0xff, 0x40, 0x79, 0x32, 0xdf, 0x16, 0x16, 0x16, 0xff, 0x83, | ||||
|     0xff, 0x31, 0x1f, 0x14, 0x22, 0xdf, 0xf0, 0x3f, 0xa5, 0xaa, 0x1d, 0x40, | ||||
|     0xbf, 0x0,  0x1d, 0x1e, 0x11, 0xf1, 0xd0, 0xb4, 0xb4, 0xb4, 0x83, 0xff, | ||||
|     0xff, 0x99, 0x99, 0x99, 0x99, 0x23, 0xa0, 0x7,  0x5,  0x0,  0x1f, 0xa0, | ||||
|     0x97, 0xef, 0xbf, 0x0,  0x33, 0xff, 0x7f, 0xb7, 0x0,  0x88, 0x13, 0x10, | ||||
|     0xf5, 0xf5, 0xf5, 0x21, 0xf9, 0xbb, 0x1d, 0xf9, 0xf9, 0x2,  0xf9, 0xcf, | ||||
|     0xed, 0xe0, 0xec, 0x94, 0x27, 0xff, 0xef, 0x10, 0xfe, 0xee, 0xee, 0x33, | ||||
|     0xf7, 0x3b, 0xf7, 0x88, 0x0,  0x0,  0x86, 0xe2, 0xe2, 0xe2, 0x0,  0x1f, | ||||
|     0x1f, 0xf0, 0x0,  0xe,  0xfd, 0xfd, 0xfd, 0x3e, 0xf0, 0xe,  0xe,  0x41, | ||||
|     0x8c, 0x23, 0xbf, 0xff, 0x1f, 0x0,  0x10, 0x7,  0x28, 0x2b, 0x0,  0xfe, | ||||
|     0xbf, 0xf0, 0x3f, 0x68, 0x40, 0x40, 0x40, 0x0,  0xc3, 0x1,  0x17, 0x13, | ||||
|     0xb4, 0x6e, 0x6e, 0x6e, 0x4,  0xfe, 0xe3, 0xf0, 0xf,  0x8c, 0x21, 0x97, | ||||
|     0xe1, 0x0,  0x0,  0xf,  0x8f, 0x80, 0xdf, 0xdf, 0xdf, 0x0,  0xb7, 0x10, | ||||
|     0x1,  0x80, 0x26, 0x2f, 0xfc, 0x57, 0xbb, 0x80, 0xaa, 0x0,  0x35, 0xe7, | ||||
|     0xe7, 0xe7, 0x0,  0xe3, 0xf0, 0xe0, 0x0,  0x10, 0xfa, 0xfa, 0xfa, 0xf1, | ||||
|     0xff, 0xf0, 0xff, 0x40, 0x93, 0x21, 0x47, 0xb9, 0xf7, 0x8c, 0x0,  0x35, | ||||
|     0xea, 0x1,  0xea, 0xea, 0x0,  0xde, 0xff, 0x10, 0x6,  0x2f, 0xfc, 0x0, | ||||
|     0xde, 0x3c, 0xce, 0xe,  0x54, 0x6,  0x6,  0x6,  0x0,  0x32, 0x33, 0xe, | ||||
|     0x0,  0x13, 0xf7, 0xf7, 0xf7, 0x5,  0x1c, 0x79, 0x71, 0xf3, 0xd0, 0x22, | ||||
|     0x2f, 0xff, 0x26, 0xef, 0x0,  0x68, 0x4e, 0x4e, 0x4e, 0x1f, 0x3c, 0x70, | ||||
|     0xf0, 0xc,  0x54, 0xe6, 0xe6, 0xe6, 0x70, 0xf,  0x78, 0xc7, 0x80, 0xb3, | ||||
|     0x19, 0x88, 0x88, 0x32, 0x20, 0x9f, 0x20, 0x97, 0x0,  0x6,  0x28, 0xc3, | ||||
|     0x4,  0xe1, 0xc1, 0xe0, 0xee, 0xb4, 0x22, 0x67, 0xcc, 0x4c, 0x10, 0xbb, | ||||
|     0xbb, 0xd,  0x20, 0x6f, 0x7b, 0x0,  0x8,  0xff, 0x0,  0x22, 0xf1, 0xf1, | ||||
|     0xf1, 0xee, 0x1e, 0xfe, 0xe,  0x0,  0x8f, 0x1e, 0x1e, 0x1e, 0x3e, 0x0, | ||||
|     0xf,  0xef, 0x0,  0x80, 0xaf, 0xaf, 0xaf, 0x0,  0x7e, 0x10, 0x11, 0x80, | ||||
|     0x30, 0x9f, 0x45, 0x80, 0x91, 0x88, 0x35, 0xfc, 0xfc, 0x2,  0xfc, 0xcc, | ||||
|     0xe0, 0x0,  0xf0, 0x6f, 0x20, 0x77, 0xc1, 0x8,  0xef, 0xe0, 0xee, 0xd0, | ||||
|     0x20, 0xd7, 0x88, 0x44, 0xbb, 0x0,  0x19, 0x15, 0xfb, 0xfb, 0xfb, 0x0, | ||||
|     0x0,  0x8,  0x21, 0xdd, 0x22, 0x35, 0x3f, 0x10, 0xee, 0xe,  0x58, 0x27, | ||||
|     0x87, 0x4,  0xce, 0xcc, 0xf,  0x0,  0x4b, 0x20, 0x9f, 0x1e, 0x7c, 0x0, | ||||
|     0x70, 0xf0, 0x70, 0xe5, 0xe5, 0xe5, 0xb7, 0xc3, 0x10, 0x37, 0x1f, 0x34, | ||||
|     0x20, 0xb7, 0x10, 0xff, 0xff, 0xf0, 0x41, 0x10, 0x29, 0x57, 0xc1, 0xe1, | ||||
|     0x1f, 0x7,  0x70, 0x24, 0x3f, 0x0,  0xe9, 0xfe, 0x3,  0x0,  0x86, 0xdb, | ||||
|     0xdb, 0xdb, 0x6,  0x4c, 0xa0, 0x0,  0xea, 0x79, 0x20, 0xf7, 0x79, 0x77, | ||||
|     0xbd, 0x0,  0xb8, 0x70, 0x33, 0x78, 0xc5, 0xc5, 0xc5, 0xbb, 0x8,  0x5b, | ||||
|     0xaa, 0xaa, 0x51, 0x20, 0x3f, 0x39, 0xff, 0xc,  0x0,  0x0,  0x33, 0xf6, | ||||
|     0xf6, 0xf6, 0x11, 0x31, 0x55, 0x0,  0x45, 0x3d, 0x19, 0x19, 0x19, 0xcb, | ||||
|     0x0,  0x7,  0x0,  0xff, 0x80, 0xbf, 0xbf, 0xbf, 0xce, 0x3c, 0x10, 0x0, | ||||
|     0x71, 0x74, 0xe9, 0xe9, 0xe9, 0x8,  0xff, 0x73, 0x4,  0xf,  0x50, 0x18, | ||||
|     0x18, 0x18, 0x21, 0x77, 0xf0, 0xa,  0xc2, 0x31, 0xaf, 0x29, 0xc8, 0xd0, | ||||
|     0x48, 0x48, 0x48, 0x77, 0xef, 0xbf, 0x1,  0x93, 0x80, 0xc8, 0x3a, 0xf4, | ||||
|     0xf4, 0xf4, 0xf4, 0xf,  0x6,  0xf5, 0x5f, 0xa8, 0x8a, 0x31, 0x20, 0x9f, | ||||
|     0x2f, 0x3f, 0xc,  0x41, 0xc4, 0x21, 0x8f, 0xfe, 0xef, 0xfe, 0xef, 0x26, | ||||
|     0x2f, 0xff, 0x4,  0x1e, 0x3c, 0x8f, 0xe,  0x90, 0x25, 0x1f, 0x0,  0x10, | ||||
|     0x10, 0x0,  0x70, 0x67, 0x21, 0x17, 0x3c, 0xfd, 0xf1, 0xf1, 0x8,  0xa4, | ||||
|     0x70, 0x70, 0x70, 0x7a, 0x17, 0x3c, 0xfc, 0x70, 0x4,  0xf1, 0x88, 0xb2, | ||||
|     0xb2, 0xb2, 0x91, 0x67, 0xf,  0xb0, 0xe0, 0x46, 0x3f, 0x61, 0x87, 0x71, | ||||
|     0x67, 0xdc, 0x1,  0x11, 0x11, 0x2a, 0x82, 0x2a, 0x33, 0x80, 0x0,  0x89, | ||||
|     0x88, 0x3a, 0x2f, 0xfc, 0x1f, 0x0,  0xe8, 0x80, 0xee, 0xb9, 0xc6, 0xc6, | ||||
|     0xc6, 0xd9, 0x0,  0xee, 0xea, 0xee, 0xad, 0x60, 0x60, 0x60, 0x87, 0x8, | ||||
|     0xbe, 0x88, 0x30, 0x6c, 0x20, 0xe7, 0x87, 0xfe, 0x1f, 0x0,  0x0,  0xd1, | ||||
|     0xad, 0xad, 0xad, 0xff, 0xc6, 0xee, 0x27, 0xf,  0x90, 0x23, 0xf7, 0x37, | ||||
|     0x33, 0x21, 0x3f, 0x20, 0xd7, 0x2f, 0x7f, 0x0,  0xe8, 0x37, 0xfe, 0xfe, | ||||
|     0xfe, 0x15, 0x19, 0xa0, 0x20, 0xaa, 0x79, 0x24, 0xbf, 0x0,  0x38, 0xff, | ||||
|     0x70, 0x14, 0x84, 0x21, 0x6f, 0x12, 0x11, 0x54, 0x55, 0x31, 0x7,  0x1b, | ||||
|     0xf7, 0x10, 0x8e, 0x0,  0x39, 0x22, 0x1f, 0xef, 0x9e, 0x0,  0x30, 0x41, | ||||
|     0x32, 0x22, 0xa7, 0x8b, 0x83, 0x37, 0x7,  0xcc, 0x44, 0x1f, 0x20, 0xee, | ||||
|     0xdf, 0x40, 0xa7, 0x16, 0x71, 0xcf, 0xb0, 0x52, 0x1,  0x52, 0x52, 0x3c, | ||||
|     0x0,  0xe,  0x8,  0xa4, 0x21, 0x2f, 0x0,  0x3c, 0xfc, 0xf0, 0xf1, 0x8c, | ||||
|     0xc2, 0xc2, 0xc2, 0x0,  0x3c, 0x78, 0x8f, 0xe,  0xb0, 0x4d, 0x4d, 0x4d, | ||||
|     0x4,  0xef, 0x3e, 0x0,  0x70, 0x70, 0x21, 0x3f, 0x7a, 0xef, 0x0,  0xf0, | ||||
|     0xff, 0x2f, 0x9,  0x9,  0x9,  0x33, 0x52, 0x10, 0x0,  0xf0, 0x67, 0x22, | ||||
|     0x6f, 0x3c, 0xbb, 0xf0, 0x33, 0x0,  0xa4, 0x50, 0x50, 0x50, 0x3e, 0xf0, | ||||
|     0xf,  0xe,  0x41, 0x90, 0x20, 0x27, 0xff, 0x3f, 0x0,  0x70, 0xa,  0x21, | ||||
|     0x7f, 0x4,  0xc3, 0xf3, 0x1f, 0x7,  0xa8, 0x22, 0xc7, 0xff, 0xef, 0x82, | ||||
|     0x52, 0x47, 0x7c, 0xff, 0xf0, 0xf7, 0x80, 0x20, 0x27, 0x9f, 0x8,  0xe3, | ||||
|     0x3f, 0xf,  0x30, 0x21, 0x7f, 0x3c, 0x78, 0x70, 0x20, 0xf3, 0xb0, 0x21, | ||||
|     0x17, 0xc3, 0xe1, 0xf,  0xf,  0x90, 0x84, 0x2b, 0x4f, 0x1,  0x0,  0x3, | ||||
|     0xff, 0x32, 0x17, 0xc3, 0xe1, 0x11, 0xe0, 0xf8, 0x90, 0x31, 0x2f, 0xa3, | ||||
|     0x0,  0xe0, 0x31, 0xc7, 0x6,  0xc3, 0xfe, 0xf8, 0xfe, 0xac, 0x20, 0x5f, | ||||
|     0x9,  0x27, 0xff, 0xff, 0xec, 0xbb, 0xef, 0xf0, 0xf,  0x81, 0xef, 0xf, | ||||
|     0x53, 0x57, 0x0,  0x0,  0xf,  0x0,  0xf0, 0x2,  0xf,  0x98, 0x84, 0x84, | ||||
|     0x84, 0xff, 0x2a, 0x91, 0x42, 0x0,  0xe3, 0xe3, 0xe3, 0xff, 0x30, 0xf0, | ||||
|     0x8f, 0x8c, 0x0,  0x82, 0x82, 0x82, 0x78, 0xf7, 0xe,  0x0,  0x8c, 0x0, | ||||
|     0xbe, 0xbe, 0xbe, 0x0,  0x0,  0xfe, 0xf0, 0x1c, 0xae, 0x24, 0x57, 0xf0, | ||||
|     0x23, 0xef, 0x42, 0x28, 0x17, 0x41, 0xdf, 0x23, 0x67, 0x38, 0x0,  0xbb, | ||||
|     0x73, 0x77, 0xd6, 0x44, 0x44, 0x44, 0xff, 0xc,  0x0,  0xff, 0xf,  0x1c, | ||||
|     0x2a, 0xd7, 0x2a, 0xd1, 0x0,  0xb3, 0x0,  0xe8, 0xe8, 0xe8, 0x9b, 0xcb, | ||||
|     0x37, 0x17, 0xd4, 0x10, 0x3a, 0x3a, 0x3a, 0x71, 0x57, 0x80, 0xf7, 0xf0, | ||||
|     0xf0, 0x68, 0x30, 0x38, 0xa7, 0x2a, 0xef, 0xc8, 0x23, 0xff, 0x87, 0x87, | ||||
|     0xf0, 0x38, 0xf0, 0x90, 0x4a, 0xd7, 0xe0, 0x97, 0x2c, 0xb7, 0x8c, 0x80, | ||||
|     0x80, 0x44, 0x80, 0x0,  0x10, 0xf,  0xff, 0xf,  0x93, 0x4d, 0x5e, 0xf, | ||||
|     0xff, 0x6e, 0xe0, 0x28, 0x6f, 0x0,  0x0,  0xf,  0xf0, 0x23, 0xef, 0x20, | ||||
|     0x77, 0x23, 0xb6, 0xff, 0xd,  0x60, 0x30, 0x30, 0x30, 0x0,  0x0,  0xf, | ||||
|     0x24, 0x78, 0xc,  0x50, 0x9f, 0x3e, 0xff, 0xa2, 0x30, 0xdf, 0xe0, 0xf, | ||||
|     0x2f, 0xf8, 0x43, 0xef, 0x21, 0x6,  0xf,  0x60, 0xd4, 0x3d, 0x57, 0x63, | ||||
|     0xff, 0x30, 0x7c, 0x8e, 0xe,  0x70, 0x14, 0x1a, 0x1a, 0x1a, 0x2f, 0xf9, | ||||
|     0x7f, 0x3d, 0x67, 0x5f, 0x99, 0x1c, 0x0,  0x88, 0x71, 0x34, 0xe7, 0x34, | ||||
|     0x87, 0x2d, 0x77, 0x8f, 0x70, 0x10, 0x0,  0xf7, 0xf9, 0x26, 0x67, 0xcc, | ||||
|     0xcc, 0xaa, 0xaa, 0x60, 0x31, 0x2d, 0x87, 0x70, 0x7,  0xaa, 0xaa, 0x77, | ||||
|     0x77, 0xb2, 0x14, 0x20, 0x20, 0x20, 0x30, 0x7,  0x96, 0x20, 0x7,  0x77, | ||||
|     0xa1, 0x0,  0x88, 0xf8, 0x95, 0xd6, 0xd6, 0xd6, 0x9,  0xff, 0x10, 0xec, | ||||
|     0xf,  0x90, 0x27, 0x57, 0xbb, 0x72, 0x66, 0xf6, 0xe,  0x11, 0x2,  0x2, | ||||
|     0x2,  0x0,  0x37, 0xff, 0x3b, 0xef, 0x8b, 0xff, 0x38, 0x2,  0x70, 0x70, | ||||
|     0x78, 0xd5, 0xd5, 0xd5, 0x7f, 0xff, 0x87, 0x8,  0xf7, 0xf,  0xf,  0x6c, | ||||
|     0x20, 0x8f, 0xff, 0xdf, 0x77, 0x24, 0x57, 0xd,  0x2c, 0x47, 0x83, 0xc3, | ||||
|     0x73, 0x47, 0xb8, 0xbb, 0xb9, 0x3e, 0x7,  0x87, 0x21, 0x67, 0x3c, 0x2f, | ||||
|     0x2f, 0xf9, 0x80, 0x6,  0x2e, 0x17, 0x43, 0xcf, 0x21, 0x77, 0x88, 0x90, | ||||
|     0x90, 0x90, 0x1,  0x1,  0xff, 0x2e, 0x2f, 0x70, 0x88, 0x31, 0x77, 0x8a, | ||||
|     0x6f, 0xd0, 0xf,  0x7f, 0x7f, 0xf,  0xf,  0x0,  0x10, 0x7,  0x7,  0x7, | ||||
|     0xf8, 0x0,  0xd,  0xff, 0x41, 0x2,  0x25, 0x7f, 0xff, 0x7c, 0xff, 0xf, | ||||
|     0x10, 0x2a, 0x17, 0x50, 0x78, 0x22, 0x50, 0x82, 0x25, 0x17, 0x33, 0x91, | ||||
|     0x0,  0xc8, 0x65, 0x37, 0x24, 0xf7, 0x28, 0x79, 0xaa, 0x3d, 0x3a, 0x8f, | ||||
|     0x3c, 0x53, 0xff, 0x6,  0x2b, 0x62, 0x60, 0x66, 0x59, 0x2c, 0xef, 0x81, | ||||
|     0x1f, 0xac, 0xa1, 0x91, 0x1f, 0x92, 0x21, 0x1f, 0xff, 0x6f, 0x66, 0x66, | ||||
|     0x30, 0xc7, 0x0,  0xcb, 0xe9, 0xec, 0xfc, 0xac, 0x71, 0x71, 0x71, 0x6, | ||||
|     0x9f, 0x3c, 0x8f, 0x8f, 0x54, 0x2d, 0xf,  0x3a, 0x47, 0xa2, 0x84, 0x3f, | ||||
|     0xff, 0x5c, 0xff, 0xf,  0x8b, 0x25, 0xe7, 0x8,  0x0,  0x10, 0x3f, 0x33, | ||||
|     0xb,  0x2f, 0xfc, 0x3c, 0x9b, 0x70, 0x33, 0x9,  0xb4, 0xb6, 0xb6, 0xb6, | ||||
|     0x24, 0x27, 0xff, 0xa0, 0x25, 0x57, 0x4,  0x10, 0xdd, 0xff, 0x11, 0x2, | ||||
|     0x2f, 0xfc, 0xc1, 0x7f, 0x0,  0x3,  0x0,  0xac, 0xce, 0xce, 0xce, 0xc4, | ||||
|     0xc4, 0x10, 0xbb, 0x13, 0x3,  0x2f, 0xfc, 0xcc, 0xa0, 0x0,  0xf0, 0x41, | ||||
|     0x57, 0x25, 0x47, 0xea, 0xf0, 0xee, 0xa,  0x95, 0x20, 0x2f, 0x4,  0xbf, | ||||
|     0xb8, 0x30, 0x71, 0x34, 0x22, 0x97, 0x7,  0x33, 0x14, 0x5f, 0x0,  0xd5, | ||||
|     0x32, 0xcf, 0x10, 0x51, 0xbf, 0x1,  0x0,  0x22, 0xff, 0xfe, 0x47, 0x3f, | ||||
|     0x87, 0x80, 0xf0, 0x30, 0x1f, 0xf5, 0xa0, 0x26, 0xcf, 0x47, 0x2a, 0xf7, | ||||
|     0x83, 0xc1, 0xe0, 0xf8, 0xb4, 0x12, 0xc3, 0xc3, 0xc3, 0x7,  0xfb, 0xff, | ||||
|     0xff, 0x7f, 0x57, 0x17, 0xdf, 0x8,  0x9d, 0xcf, 0xcc, 0x98, 0x2f, 0xef, | ||||
|     0x88, 0x88, 0xaa, 0x36, 0xaa, 0xe5, 0x2f, 0xe7, 0x31, 0xb0, 0xe4, 0x41, | ||||
|     0xe7, 0x5f, 0xff, 0xc9, 0xe,  0xfc, 0xe8, 0xff, 0xc9, 0x31, 0x5f, 0x0, | ||||
|     0x63, 0xff, 0x30, 0x3f, 0xb8, 0x84, 0xa0, 0x3f, 0xff, 0xe0, 0xf0, 0xe0, | ||||
|     0x31, 0xff, 0x3c, 0x39, 0x10, 0x8e, 0x8c, 0xb8, 0x2c, 0xf,  0xad, 0xff, | ||||
|     0xa8, 0xff, 0x0,  0xc3, 0x24, 0x24, 0x24, 0xff, 0xfe, 0xff, 0xee, 0x41, | ||||
|     0xe,  0x2b, 0x77, 0x8,  0x0,  0x88, 0xff, 0x62, 0x27, 0x77, 0x4,  0x10, | ||||
|     0xff, 0x11, 0x11, 0x4a, 0x27, 0xcf, 0xae, 0xd9, 0x10, 0xaf, 0x8a, 0xa9, | ||||
|     0x26, 0x67, 0xdb, 0x55, 0xaa, 0xaa, 0x41, 0x6d, 0x25, 0xa7, 0x1,  0x0, | ||||
|     0x11, 0x1,  0x46, 0x27, 0x97, 0x42, 0x37, 0x26, 0xbf, 0x78, 0xec, 0xec, | ||||
|     0xec, 0x20, 0x16, 0xaa, 0x0,  0x8d, 0xb1, 0xb1, 0xb1, 0xd9, 0xed, 0xcc, | ||||
|     0xec, 0x41, 0xd4, 0x23, 0x8f, 0xcb, 0xfd, 0xe8, 0xfc, 0xa8, 0x45, 0x47, | ||||
|     0xbf, 0x57, 0xff, 0xfe, 0x20, 0x58, 0x3f, 0xff, 0x70, 0xc7, 0xf3, 0xff, | ||||
|     0x70, 0xd7, 0x80, 0x87, 0xa,  0xcf, 0xff, 0xf,  0x87, 0x53, 0xff, 0xef, | ||||
|     0x43, 0xff, 0xdf, 0x20, 0xff, 0xcf, 0x3f, 0xff, 0xcb, 0xdd, 0xab, 0xaa, | ||||
|     0xa5, 0x86, 0x36, 0xef, 0xff, 0xdc, 0xf0, 0xa,  0x27, 0xf7, 0x2f, 0x2f, | ||||
|     0xff, 0x40, 0x93, 0x27, 0x5f, 0x99, 0xa9, 0xaa, 0xea, 0xa5, 0x81, 0x1, | ||||
|     0x81, 0x81, 0xf9, 0xff, 0xf8, 0xff, 0x63, 0x5a, 0x77, 0xa1, 0x73, 0xff, | ||||
|     0xdb, 0x43, 0xff, 0x9f, 0xff, 0x8f, 0x87, 0x29, 0xff, 0x4,  0xba, 0xbb, | ||||
|     0xae, 0xaa, 0x85, 0x2d, 0x37, 0x80, 0xff, 0x40, 0xfd, 0x47, 0xef, 0xf0, | ||||
|     0x58, 0xff, 0x8e, 0xc9, 0x31, 0x3,  0x31, 0x31, 0xdd, 0xfa, 0xaa, 0xfa, | ||||
|     0x30, 0x57, 0x30, 0xa7, 0x82, 0x3c, 0xcf, 0x38, 0x7b, 0x8c, 0x88, 0xc8, | ||||
|     0x52, 0x37, 0x11, 0x40, 0x26, 0x2d, 0x7f, 0xde, 0xdc, 0xef, 0xce, 0x58, | ||||
|     0x13, 0x0,  0x13, 0x13, 0xba, 0x55, 0xae, 0x8a, 0x8d, 0xa1, 0x1,  0xa1, | ||||
|     0xa1, 0x32, 0x33, 0xdd, 0x1d, 0x43, 0x44, 0x47, 0x10, 0x11, 0x11, 0xca, | ||||
|     0x24, 0xff, 0x33, 0x33, 0xaa, 0xaa, 0x42, 0x59, 0x2f, 0xb7, 0x55, 0xab, | ||||
|     0xa8, 0xaa, 0x30, 0x1f, 0x1e, 0x8,  0x3e, 0x11, 0xf0, 0x70, 0x23, 0xc7, | ||||
|     0x8f, 0x78, 0x8f, 0x20, 0xf,  0x74, 0x23, 0x47, 0x9d, 0xec, 0xa8, 0xfe, | ||||
|     0xc5, 0xc8, 0x29, 0x6f, 0x91, 0x5f, 0xab, 0x33, 0x3b, 0x1c, 0x0,  0x10, | ||||
|     0x10, 0x22, 0x11, 0x2a, 0x2f, 0xec, 0xae, 0xdd, 0xaf, 0x40, 0xd7, 0xaa, | ||||
|     0xc1, 0x21, 0x5f, 0x31, 0x47, 0xff, 0x0,  0x11, 0x11, 0x56, 0x25, 0x57, | ||||
|     0xb4, 0x21, 0x67, 0xdc, 0x38, 0xbf, 0xa0, 0x5f, 0xea, 0x30, 0x7f, 0x7f, | ||||
|     0xa1, 0x0,  0x0,  0xf8, 0x59, 0xeb, 0xeb, 0xeb, 0x85, 0xff, 0x10, 0xe8, | ||||
|     0xff, 0xcd, 0x20, 0xbf, 0xcd, 0xed, 0xec, 0xfe, 0x68, 0xcc, 0x20, 0xc7, | ||||
|     0x0,  0x35, 0xff, 0x23, 0x2e, 0x2b, 0xde, 0x9d, 0xce, 0xfd, 0xc2, 0x3f, | ||||
|     0xf3, 0xff, 0x81, 0xff, 0x7f, 0xff, 0x21, 0x6f, 0x3d, 0xb7, 0xbc, 0x32, | ||||
|     0x1f, 0x10, 0x5c, 0x5c, 0x5c, 0x7f, 0xff, 0xef, 0xde, 0xef, 0xce, 0x66, | ||||
|     0x16, 0x2d, 0x97, 0x29, 0x97, 0x10, 0x26, 0x32, 0x1f, 0x20, 0xa7, 0x5a, | ||||
|     0x82, 0x29, 0xef, 0x9e, 0xd9, 0xae, 0x8a, 0xb1, 0x25, 0xc7, 0x3b, 0x82, | ||||
|     0x61, 0x7,  0xee, 0xee, 0x11, 0x11, 0x83, 0x29, 0x3f, 0x0,  0x8,  0x1e, | ||||
|     0x11, 0xf0, 0xac, 0x22, 0x1f, 0xd5, 0xaa, 0xaa, 0x25, 0xea, 0x8d, 0x27, | ||||
|     0xdf, 0xdd, 0xea, 0x51, 0x67, 0x1e, 0x2a, 0x47, 0x44, 0x80, 0x34, 0xf, | ||||
|     0xef, 0xff, 0xef, 0x3e, 0x67, 0xed, 0xff, 0x1d, 0xec, 0xff, 0x62, 0xaf, | ||||
|     0xff, 0x78, 0x7,  0x2f, 0xf9, 0xfd, 0x3e, 0xff, 0x6,  0xdf, 0x9c, 0xcf, | ||||
|     0xce, 0x58, 0x2e, 0x97, 0x72, 0xff, 0x97, 0x8,  0xc3, 0xc0, 0xe8, 0x94, | ||||
|     0x25, 0x27, 0xfe, 0x70, 0xff, 0x0,  0xe,  0xb3, 0x35, 0x35, 0x35, 0x8d, | ||||
|     0xfe, 0xa8, 0x61, 0xff, 0x41, 0x5f, 0x60, 0xb7, 0x78, 0x0,  0xe,  0x1c, | ||||
|     0x3a, 0xc7, 0x5,  0xcc, 0xa4, 0x0,  0xf0, 0x2f, 0x28, 0xa7, 0xda, 0x62, | ||||
|     0x37, 0x83, 0x72, 0x27, 0xc3, 0xfd, 0xf8, 0xfc, 0xa4, 0x28, 0xe7, 0x7f, | ||||
|     0xff, 0x1e, 0xfd, 0xff, 0xfc, 0x4e, 0x9f, 0x7,  0x8f, 0xff, 0x7,  0x64, | ||||
|     0x87, 0x37, 0xdf, 0x2,  0xe7, 0x2f, 0xff, 0xf0, 0xf,  0x2c, 0xa0, 0xff, | ||||
|     0x2,  0xad, 0xdf, 0xf0, 0xf,  0xb,  0x81, 0x47, 0xbb, 0x2f, 0xa8, 0x3, | ||||
|     0x0,  0x20, 0xf,  0x3f, 0x92, 0x31, 0x17, 0xf,  0x29, 0x8,  0x0,  0x30, | ||||
|     0xf,  0xfe, 0x3,  0x70, 0x5f, 0x71, 0x67, 0xf0, 0xf,  0x7,  0xa,  0x9f, | ||||
|     0x29, 0x9f, 0xc2, 0x1f, 0xe0, 0xf,  0x0,  0xbc, 0x29, 0x9f, 0x6,  0xb2, | ||||
|     0x1f, 0xe0, 0xf,  0x10, 0x9,  0x70, 0x7,  0x10, 0x66, 0x73, 0xff, 0x43, | ||||
|     0x4c, 0x4,  0x49, 0x4d, 0xff, 0xfe, 0x14, 0x3a, 0x65, 0x2,  0x28, 0x8, | ||||
|     0x20, 0x0,  0x0,  0x1,  0x2f, 0xe3, 0x69, 0x6d, 0x61, 0x21, 0x67, 0x10, | ||||
|     0x2f, 0xeb, 0xe1, 0x0,  0x28, 0x0,  0x3d, 0x9b, 0x72, 0x0,  0x20, 0x17, | ||||
|     0x4,  0x90, 0x1,  0x2e, 0x47, 0xf8, 0x80, 0x10, 0x5b, 0x80, 0x7,  0x80, | ||||
|     0x0,  0x88, 0x77, 0x77, 0x4a, 0xf8, 0x88, 0x9,  0x84, 0x85, 0x20, 0x7, | ||||
|     0x29, 0xff, 0x8b, 0x4,  0xf6, 0xdf, 0x88, 0x30, 0x17, 0x0,  0xfe, 0x8b, | ||||
|     0x3,  0x4,  0x0,  0xdf, 0xdd, 0x81, 0x11, 0xff, 0x9d, 0x25, 0x0,  0x16, | ||||
|     0xff, 0xdd, 0xdd, 0xa1, 0x40, 0x17, 0xc0, 0x70, 0x7,  0x0,  0x50, 0x1f, | ||||
|     0xee, 0xc8, 0x11, 0x71, 0x45, 0xfe, 0x60, 0x8c, 0x27, 0xb8, 0xf7, 0x3f, | ||||
|     0x77, 0x77, 0x31, 0xff, 0x8c, 0xb,  0x4,  0x88, 0x4c, 0x33, 0x20, 0x7f, | ||||
|     0x8a, 0x2e, 0x52, 0xe0, 0x7f, 0x3,  0x0,  0x77, 0xf7, 0xb,  0xf8, 0x81, | ||||
|     0x2f, 0xfa, 0x10, 0x1c, 0xe7, 0x77, 0x28, 0x80, 0x7f, 0x23, 0x7,  0x89, | ||||
|     0x0,  0x2,  0xe7, 0xcc, 0xe8, 0x77, 0x0,  0x11, 0x45, 0xff, 0x8c, 0x14, | ||||
|     0xfd, 0x6e, 0x11, 0x0,  0x0,  0x45, 0xfe, 0xac, 0x34, 0x80, 0x88, 0x7f, | ||||
|     0x5,  0x77, 0xb,  0xff, 0x81, 0x2,  0x23, 0xaf, 0x17, 0x33, 0xaf, 0x0, | ||||
|     0x1,  0x80, 0xbb, 0xbb, 0xb,  0xf8, 0xde, 0x55, 0x0,  0x44, 0x20, 0x0, | ||||
|     0x22, 0x29, 0xfe, 0xda, 0x40, 0x10, 0x0,  0x20, 0xdd, 0x53, 0xa7, 0x80, | ||||
|     0x11, 0x99, 0x87, 0x0,  0xf8, 0xc2, 0x41, 0x11, 0x0,  0x20, 0x22, 0x45, | ||||
|     0x0,  0xff, 0xba, 0x20, 0x11, 0x1,  0xee, 0x0,  0x22, 0x0,  0xf8, 0xb7, | ||||
|     0xf,  0x44, 0x80, 0x9,  0xc8, 0x2b, 0x0,  0xf1, 0xd6, 0x4c, 0x0,  0x0, | ||||
|     0xbb, 0xbb, 0xd,  0x13, 0xff, 0xdb, 0x51, 0x4d, 0xaf, 0xf8, 0xa8, 0x5d, | ||||
|     0xb7, 0x20, 0x7,  0x20, 0x17, 0x11, 0x20, 0x47, 0xee, 0xca, 0x30, 0x11, | ||||
|     0x11, 0x2,  0x22, 0x22, 0x25, 0xff, 0xca, 0x30, 0xf0, 0x1f, 0x0,  0x1, | ||||
|     0x0,  0x22, 0x22, 0x65, 0xff, 0xca, 0x40, 0x90, 0x7,  0xc3, 0x0,  0x50, | ||||
|     0x1f, 0x0,  0x70, 0x3f, 0x11, 0x71, 0x22, 0x0,  0x30, 0x5f, 0x0,  0x70, | ||||
|     0x7f, 0x0,  0x48, 0xdc, 0x88, 0x99, 0x47, 0xf8, 0xd7, 0x4e, 0x0,  0x2a, | ||||
|     0x12, 0x99, 0x11, 0x47, 0xf8, 0xbb, 0x41, 0x86, 0x80, 0x9f, 0x11, 0x23, | ||||
|     0x22, 0x23, 0x20, 0xbf, 0x74, 0x47, 0x88, 0x0,  0x88, 0x73, 0x77, 0x8a, | ||||
|     0xf8, 0x9e, 0x1f, 0x12, 0x8,  0x51, 0x22, 0x2,  0x21, 0x30, 0xa7, 0x40, | ||||
|     0x88, 0x8,  0x0,  0x69, 0xef, 0xcb, 0x41, 0x8,  0x0,  0xf7, 0xff, 0x40, | ||||
|     0x22, 0xab, 0x9f, 0x2a, 0x12, 0x98, 0x11, 0x47, 0xf1, 0x3b, 0xbb, 0x3a, | ||||
|     0x44, 0x7f, 0x21, 0x47, 0xfb, 0xbf, 0x8,  0x24, 0x5f, 0x0,  0x31, 0x77, | ||||
|     0x80, 0x1,  0x7b, 0xe7, 0x6,  0x44, 0x51, 0x77, 0x49, 0xff, 0x8c, 0x0, | ||||
|     0x15, 0x8,  0x8,  0x77, 0xf7, 0x82, 0xf8, 0x96, 0x41, 0x16, 0x10, 0xc, | ||||
|     0x93, 0x9f, 0xff, 0x77, 0xa,  0xf8, 0x81, 0x2e, 0x6e, 0xa0, 0xdd, 0xff, | ||||
|     0x44, 0x23, 0x8f, 0x2d, 0xff, 0x8b, 0x3,  0x15, 0x0,  0x22, 0xdf, 0xcd, | ||||
|     0x61, 0xff, 0xad, 0x25, 0x0,  0xc8, 0x33, 0x9f, 0x26, 0xaf, 0x84, 0xa8, | ||||
|     0x53, 0x9f, 0xc5, 0x84, 0x91, 0x40, 0x88, 0x32, 0xcf, 0x0,  0x20, 0x88, | ||||
|     0xee, 0x2d, 0xff, 0x28, 0xdb, 0x41, 0x33, 0xc7, 0x65, 0x23, 0xc7, 0x44, | ||||
|     0x80, 0x89, 0x80, 0x43, 0x87, 0x21, 0x22, 0x22, 0x32, 0x23, 0xf8, 0xbe, | ||||
|     0x41, 0x1d, 0xf3, 0x7f, 0x1,  0x0,  0x22, 0x32, 0x43, 0xa0, 0x17, 0xf0, | ||||
|     0x10, 0x1,  0x80, 0x7,  0x64, 0x27, 0x34, 0x17, 0x0,  0x34, 0xbf, 0x8, | ||||
|     0x10, 0xbf, 0x3b, 0x0,  0xf,  0xf8, 0xde, 0x54, 0x22, 0x51, 0xdc, 0xfd, | ||||
|     0xa0, 0x41, 0xaf, 0x10, 0x24, 0xff, 0xff, 0xa8, 0x0,  0x10, 0x11, 0x3, | ||||
|     0x22, 0x0,  0x45, 0xef, 0xba, 0x20, 0x74, 0x57, 0x34, 0x47, 0x89, 0x48, | ||||
|     0xff, 0x40, 0xce, 0x88, 0x35, 0x2f, 0x2a, 0x11, 0x30, 0x2f, 0x20, 0xbd, | ||||
|     0x35, 0x74, 0xbf, 0x8,  0x10, 0x88, 0x19, 0x4b, 0xe8, 0x31, 0xd7, 0x75, | ||||
|     0x3f, 0x20, 0x47, 0x6,  0x20, 0x47, 0xee, 0x8c, 0x10, 0x7,  0x31, 0x85, | ||||
|     0xee, 0x9c, 0x24, 0x74, 0x9f, 0x80, 0x57, 0x60, 0x47, 0xc0, 0x70, 0x57, | ||||
|     0x84, 0x9f, 0x11, 0x98, 0x31, 0x65, 0xff, 0xbd, 0x6,  0x34, 0x8e, 0xcc, | ||||
|     0x11, 0x77, 0x0,  0x44, 0x9f, 0x24, 0x57, 0x86, 0x86, 0x10, 0x1,  0x34, | ||||
|     0x57, 0x80, 0xff, 0x7f, 0x3,  0x0,  0x2f, 0xff, 0x2a, 0xbf, 0x37, 0x0, | ||||
|     0x52, 0xf8, 0x8a, 0x11, 0x8c, 0xee, 0x17, 0x11, 0xd0, 0x4a, 0x7f, 0x20, | ||||
|     0x27, 0x6,  0xa0, 0x17, 0x21, 0xa2, 0x11, 0x89, 0x80, 0x36, 0x1f, 0x44, | ||||
|     0x0,  0xb3, 0xbb, 0x9,  0xff, 0xdb, 0x10, 0x52, 0x4,  0x20, 0x5a, 0xe7, | ||||
|     0x11, 0x88, 0x91, 0x89, 0x5,  0x47, 0xf8, 0xc9, 0x4f, 0x17, 0x23, 0x88, | ||||
|     0x41, 0x22, 0x17, 0x21, 0x1,  0x0,  0x57, 0x3f, 0x4,  0x20, 0xbb, 0xfb, | ||||
|     0x20, 0x27, 0x71, 0x51, 0x77, 0x57, 0xf7, 0x3f, 0x24, 0x20, 0x0,  0x2, | ||||
|     0xf1, 0x10, 0x1,  0xa3, 0xaf, 0xf8, 0x8,  0x64, 0xdf, 0x24, 0xf,  0x38, | ||||
|     0x6f, 0x27, 0xcf, 0x3,  0xe5, 0x7f, 0x10, 0x23, 0x2,  0x0,  0x43, 0xf1, | ||||
|     0xb7, 0x16, 0x11, 0x75, 0x22, 0x0,  0x60, 0x25, 0x49, 0x7,  0xf4, 0x9f, | ||||
|     0x8c, 0x19, 0x4f, 0xf8, 0xd7, 0x2e, 0x4d, 0x22, 0x24, 0x91, 0x8d, 0x24, | ||||
|     0x47, 0x44, 0x9f, 0x44, 0x5f, 0x22, 0x7c, 0x22, 0x36, 0xf,  0x74, 0x27, | ||||
|     0x28, 0xb7, 0x4a, 0x2f, 0x89, 0x4f, 0x44, 0xbb, 0x60, 0x3b, 0x32, 0xbf, | ||||
|     0xf8, 0xff, 0xfe, 0x7f, 0x98, 0x19, 0x27, 0x18, 0xf8, 0xc1, 0x47, 0x80, | ||||
|     0x4f, 0x0,  0x6d, 0xbf, 0x88, 0x88, 0x71, 0xfe, 0x4d, 0xe7, 0x0,  0x4d, | ||||
|     0xff, 0x2e, 0x17, 0x70, 0x7,  0x2,  0x40, 0x1f, 0x0,  0xbe, 0x3f, 0x7a, | ||||
|     0xaf, 0x88, 0x58, 0x91, 0x3a, 0xaf, 0x40, 0xfe, 0x8f, 0x7a, 0xaf, 0xcc, | ||||
|     0xe8, 0x88, 0x30, 0xee, 0x21, 0x27, 0x3f, 0x73, 0x9f, 0x33, 0xab, 0x91, | ||||
|     0x89, 0x5e, 0x27, 0x20, 0x2f, 0x11, 0x27, 0x28, 0x35, 0xb7, 0x73, 0x9f, | ||||
|     0x73, 0xc7, 0x15, 0x3f, 0x21, 0x20, 0x0,  0x5a, 0x7f, 0x27, 0x57, 0x3a, | ||||
|     0x47, 0x10, 0xa,  0xf3, 0x9f, 0x10, 0x0,  0x89, 0x17, 0x68, 0xcf, 0xc1, | ||||
|     0x74, 0x2f, 0x1,  0xfd, 0x9f, 0xca, 0xcc, 0xbf, 0xbb, 0x5,  0x4e, 0x17, | ||||
|     0xe1, 0x0,  0x5e, 0x1f, 0x9e, 0x37, 0x0,  0x5e, 0x3f, 0x15, 0x11, 0x20, | ||||
|     0x22, 0x3d, 0x8f, 0xf8, 0x0,  0x8d, 0xff, 0x6e, 0x8f, 0x77, 0x4f, 0x10, | ||||
|     0x1c, 0x83, 0x87, 0x10, 0x2c, 0x62, 0xd7, 0x43, 0x4c, 0x49, 0x10, 0x4d, | ||||
|     0xff, 0xfe, 0x2f, 0xa6, 0x0,  0x2,  0x2,  0x28, 0xc3, 0x2d, 0xfd, 0x3d, | ||||
|     0xef, 0x69, 0x6d, 0x61, 0x67, 0x2f, 0xfe, 0x20, 0xc,  0x1c, 0x40, 0x0, | ||||
|     0xa,  0x3e, 0x10, 0x4e, 0x15, 0x0,  0x50, 0x3,  0x43, 0x4c, 0x24, 0x59, | ||||
|     0x54, 0x70, 0x3f, 0x80, 0x5,  0x47, 0xae, 0x0,  0x6c, 0x18, 0x79, 0x74, | ||||
|     0x31, 0x30, 0x51, 0x3e, 0x3b, 0x0,  0x0,  0xa0, 0x0,  0x43, 0x0,  0x0, | ||||
|     0x70, 0x43, 0x74, 0x78, 0x6c, 0x32, 0x31, 0x40, 0x2f, 0xed, 0x2b, 0x90, | ||||
|     0x0,  0xc,  0x2f, 0xf5, 0x1a, 0xc0, 0x2f, 0xf9, 0x2b, 0x3c, 0x0,  0x62, | ||||
|     0x75, 0x62, 0x62, 0x6c, 0x0,  0x65, 0x73, 0x2e, 0x62, 0x63, 0x6c, 0x69, | ||||
|     0x6d, 0x4,  0x0,  0x6d, 0x61, 0x73, 0x6b, 0x60, 0xa,  0x77, 0x61, 0x60, | ||||
|     0x76, 0x80, 0x16, 0x2f, 0xfd, 0x6d, 0x61, 0x74, 0x31, 0x8c, 0xcd, 0x2e, | ||||
|     0x8c, 0x2b, 0xb0, 0x0,  0x1c, 0x30, 0x63, 0x2f, 0xf9, 0xd4, 0x2f, 0xfd, | ||||
|     0x66, 0x24, 0x2e, 0xa0, 0x30, 0x35, 0x5f, 0x30, 0x4c, 0x7a, 0xc0, 0xa8, | ||||
|     0xff, 0x56, 0xff, 0x0,  0x50, 0x1,  0x15, 0x40, 0x9b, 0x4,  0x30, 0x4a, | ||||
|     0x2f, 0xff, 0x60, 0x4f, 0xc0, 0x50, 0xdd, 0x80, 0x3f, 0x50, 0x3,  0x80, | ||||
|     0x93, 0x0,  0x0,  0x52, 0x0,  0x60, 0x4f, 0x17, 0x80, 0x55, 0x6,  0x3f, | ||||
|     0x35, 0x5,  0x20, 0xfd, 0xb1, 0x27, 0x90, 0x4f, 0x81, 0x20, 0xb4, 0x22, | ||||
|     0x40, 0x24, 0x2,  0x10, 0x66, 0x2f, 0xfd, 0x47, 0x7,  0x61, 0x4a, 0x1, | ||||
|     0x4,  0x5,  0x50, 0xe2, 0x0,  0x20, 0xb8, 0x0,  0xb0, 0xb7, 0x1e, 0x2, | ||||
|     0x0,  0x5,  0x31, 0x2,  0x31, 0x4a, 0x31, 0x4e, 0x0,  0x50, 0xb7, 0x31, | ||||
|     0x82, 0x4,  0xd0, 0xb7, 0x70, 0x61, 0x6e, 0x31, 0x4c, 0x40, 0xc3, 0xff, | ||||
|     0x0,  0x0,  0x52, 0x6f, 0x6f, 0x74, 0x50, 0x61, 0x6e, 0x78, 0x65, 0x0, | ||||
|     0x92, 0x21, 0xf2, 0x3b, 0x71, 0x67, 0x52, 0x17, 0x70, 0x61, 0x73, 0x21, | ||||
|     0x31, 0x8,  0x2f, 0xfd, 0x70, 0x69, 0x63, 0x31, 0x3d, 0xe5, 0xe0, 0x30, | ||||
|     0x53, 0x0,  0x71, 0x17, 0x2f, 0xfc, 0xc0, 0x80, 0x0,  0x80, 0xbf, 0xa4, | ||||
|     0x0,  0x90, 0x53, 0xf2, 0x22, 0x6b, 0x9a, 0x43, 0x71, 0xf7, 0x6f, 0xbb, | ||||
|     0x5f, 0xe7, 0x40, 0x3,  0x2,  0x62, 0x89, 0x62, 0xc5, 0x61, 0x37, 0x71, | ||||
|     0xf3, 0x31, 0x4b, 0x2e, 0x80, 0x3f, 0x30, 0x7f, 0xa0, 0x60, 0xd3, 0x0, | ||||
|     0x71, 0x47, 0x2f, 0xfc, 0xb8, 0xb,  0x0,  0x0,  0x48, 0x42, 0x22, 0xcf, | ||||
|     0xc1, 0xe3, 0x11, 0x61, 0x8f, 0x5a, 0x80, 0x22, 0xeb, 0x80, 0x80, 0x7f, | ||||
|     0x72, 0x7f, 0x3,  0x21, 0xb5, 0xcd, 0x23, 0xcc, 0x6c, 0x42, 0x5b, 0x33, | ||||
|     0x33, 0x5b, 0x41, 0xb7, 0x50, 0xf,  0x2f, 0x20, 0x40, 0x50, 0xf,  0x20, | ||||
|     0xf0, 0x93, 0xe2, 0x43, 0x0,  0x60, 0x9f, 0x0,  0x12, 0xf2, 0xbb, 0x2, | ||||
|     0x40, 0x9f, 0x1,  0x22, 0x55, 0x2f, 0xff, 0x31, 0x93, 0x3e, 0x50, 0x8b, | ||||
|     0x30, 0x7,  0xbe, 0x30, 0xf,  0x14, 0x60, 0x9b, 0x30, 0x7,  0x1,  0x10, | ||||
|     0x9f, 0x51, 0xbf, 0x0,  0x93, 0x8f, 0x80, 0x3,  0xfd, 0x3f, 0x40, 0x0, | ||||
|     0xfe, 0xf,  0xa1, 0x7f, 0xd3, 0x2b, 0x1,  0x10, 0x7e, 0x1b, 0x44, 0x98, | ||||
|     0x3d, 0xfc, 0x0,  0x1,  0x3f, 0xf9, 0x74, 0x49, 0x23, 0xa3, 0x41, 0xab, | ||||
|     0x50, 0x7,  0xe1, 0x1f, 0x61, 0x65, 0x42, 0x47, 0xc,  0x67, 0x72, 0x70, | ||||
|     0x31, 0x34, 0x1f, 0x32, 0x97, 0x47, 0x72, 0x13, 0x6f, 0x75, 0x70, 0xa4, | ||||
|     0xba, 0x67, 0x72, 0x52, 0x6b, 0x30, 0x23, 0x8f, 0x32, 0xbf, 0x47, 0x5f, | ||||
|     0x41, 0xc4, 0x36, 0x34, 0x9b, 0xf3, 0xfb, 0xf4, 0x5b, 0xd5, 0xf3, 0x63, | ||||
|     0x90, 0x4b, 0x42, 0x3,  0x40, 0x4b, 0x2c, 0x40, 0x97, 0x43, 0xc4, 0xce, | ||||
|     0xcd, 0x35, 0x93, 0xf4, 0xe3, 0x67, 0x72, 0x50, 0xef, 0xb5, 0x7f, 0xe0, | ||||
|     0x24, 0x87, 0x5e, 0x11, 0x0,  0x5,  0x7f, 0xc8, 0x85, 0x7f, 0x33, 0xb3, | ||||
|     0x35, 0x3f, 0x35, 0xdb, 0x1e, 0xa8, 0x2f, 0xff, 0x29, 0x2f, 0xfd, 0x34, | ||||
|     0x0,  0x5,  0x83, 0x6c, 0x6f, 0x67, 0x6f, 0x6f, 0x0,  0xd5, 0x8e, 0x35, | ||||
|     0x8b, 0x30, 0x22, 0x32, 0x34, 0xf0, 0x36, 0x1a, 0x31, 0x63, 0x55, 0xd8, | ||||
|     0x2f, 0xff, 0x5c, 0x26, 0x3c, 0xac, 0x2,  0x65, 0x8f, 0x2,  0x0,  0xa5, | ||||
|     0x8f, 0xfa, 0x30, 0x91, 0x1,  0xb5, 0xdf, 0x35, 0x8f, 0x95, 0xdf, 0x0, | ||||
|     0x15, 0x8f, 0x44, 0x26, 0x44, 0x40, 0x77, 0x24, 0x51, 0x2b, 0xb5, 0x8f, | ||||
|     0x1,  0xf5, 0xf7, 0x6a, 0x65, 0xf7, 0x90, 0xbb, 0x0,  0x25, 0xfb, 0xe1, | ||||
|     0x0,  0x36, 0xf,  0x37, 0x64, 0x26, 0x13, 0x10, 0x24, 0x2,  0x11, 0x3, | ||||
|     0x36, 0x13, 0x7c, 0x3,  0x3,  0xa6, 0x13, 0x4,  0x30, 0xd3, 0x3,  0x56, | ||||
|     0x2f, 0x52, 0xc7, 0x4,  0x36, 0x2f, 0x6e, 0xab, 0x6f, 0xe1, 0xe5, 0xaf, | ||||
|     0x76, 0x2f, 0x48, 0x38, 0x1b, 0x28, 0xb6, 0x40, 0x7,  0x5,  0x86, 0x2f, | ||||
|     0x57, 0x4,  0x6,  0x6,  0x2f, 0x20, 0x1,  0xc6, 0xcf, 0x2,  0x86, 0x2f, | ||||
|     0x4a, 0x1c, 0x77, 0x4f, 0xee, 0x67, 0x4b, 0x46, 0xcb, 0x1,  0xa6, 0x2f, | ||||
|     0xff, 0x0,  0x83, 0xdf, 0x39, 0x94, 0x50, 0x3,  0xf0, 0x86, 0xc6, 0x33, | ||||
|     0xcd, 0xcc, 0x4c, 0x3f, 0x30, 0x3,  0x57, 0x6f, 0x38, 0x7f, 0x42, 0x0, | ||||
|     0x16, 0xcf, 0xb7, 0xef, 0xb,  0x56, 0xaf, 0x3a, 0xef, 0xf6, 0xaf, 0x3a, | ||||
|     0x70, 0xfa, 0x43, 0xef, 0xfa, 0xbb, 0xf5, 0x3b, 0x1,  0x36, 0xcf, 0x5c, | ||||
|     0x0,  0x26, 0xcf, 0x3b, 0x77, 0xfb, 0x17, 0xfa, 0xbf, 0x80, 0x4,  0x36, | ||||
|     0xdf, 0x1f, 0xbc, 0xab, 0xc4, 0xf4, 0xa7, 0x73, 0x0,  0xa,  0x1a, 0x5d, | ||||
|     0x17, 0xe0, 0x62, 0xd,  0xcb, 0x0,  0x15, 0x4b, 0xae, 0x36, 0xe9, 0x22, | ||||
|     0xd6, 0xbc, 0x0,  0x84, 0x95, 0x43, 0x89, 0x8a, 0x34, 0x9f, 0xb6, 0x0, | ||||
|     0x56, 0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0, | ||||
|     0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0, | ||||
|     0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0, | ||||
|     0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0, | ||||
|     0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0, | ||||
|     0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0, | ||||
|     0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0, | ||||
|     0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0, | ||||
|     0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0, | ||||
|     0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0, | ||||
|     0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0, | ||||
|     0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0, | ||||
|     0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0, | ||||
|     0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0, | ||||
|     0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0, | ||||
|     0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0, | ||||
|     0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0, | ||||
|     0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0, | ||||
|     0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0, | ||||
|     0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0, | ||||
|     0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0, | ||||
|     0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0, | ||||
|     0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0, | ||||
|     0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0, | ||||
|     0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0, | ||||
|     0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0, | ||||
|     0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0, | ||||
|     0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0, | ||||
|     0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0, | ||||
|     0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0, | ||||
|     0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0, | ||||
|     0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0, | ||||
|     0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0, | ||||
|     0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0, | ||||
|     0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0, | ||||
|     0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0, | ||||
|     0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0, | ||||
|     0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0, | ||||
|     0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0, | ||||
|     0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0, | ||||
|     0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0, | ||||
|     0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0, | ||||
|     0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0, | ||||
|     0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0, | ||||
|     0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0, | ||||
|     0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0, | ||||
|     0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0, | ||||
|     0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0, | ||||
|     0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0, | ||||
|     0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0, | ||||
|     0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0, | ||||
|     0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0, | ||||
|     0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0, | ||||
|     0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0, | ||||
|     0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0, | ||||
|     0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0, | ||||
|     0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0, | ||||
|     0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0, | ||||
|     0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0, | ||||
|     0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0, | ||||
|     0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0, | ||||
|     0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0, | ||||
|     0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0, | ||||
|     0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0, | ||||
|     0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0, | ||||
|     0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0, | ||||
|     0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0, | ||||
|     0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0, | ||||
|     0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0, | ||||
|     0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0, | ||||
|     0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0, | ||||
|     0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0, | ||||
|     0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0, | ||||
|     0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0, | ||||
|     0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0, | ||||
|     0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0, | ||||
|     0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0, | ||||
|     0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0, | ||||
|     0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0, | ||||
|     0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0, | ||||
|     0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0, | ||||
|     0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0, | ||||
|     0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0, | ||||
|     0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0, | ||||
|     0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0, | ||||
|     0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0, | ||||
|     0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0, | ||||
|     0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0, | ||||
|     0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0, | ||||
|     0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0, | ||||
|     0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0, | ||||
|     0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x0}; | ||||
|  | ||||
| size_t logo_lz11_size = 0x2000; | ||||
							
								
								
									
										232
									
								
								source/main.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										232
									
								
								source/main.cpp
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,232 @@ | ||||
| #include <algorithm> | ||||
| #include <filesystem> | ||||
| #include <fstream> | ||||
| #include <iostream> | ||||
| #include <vector> | ||||
|  | ||||
| #include <banner.hpp> | ||||
| #include <banner_audio.hpp> | ||||
| #include <helper.hpp> | ||||
| #include <icon.hpp> | ||||
| #include <logo_lz11.hpp> | ||||
| #include <samplefiles.hpp> | ||||
| #include <fileHash.hpp> | ||||
|  | ||||
| #define cons_clear std::cout << "\x1B[2J\x1B[H" | ||||
|  | ||||
| void ToUpperCase(std::string &str) { | ||||
|   std::transform(str.begin(), str.end(), str.begin(), | ||||
|                  [](unsigned char c) { return std::toupper(c); }); | ||||
| } | ||||
|  | ||||
| bool isValidHex(const std::string &str) { | ||||
|   for (char c : str) { | ||||
|     if (!isxdigit(c)) { | ||||
|       return false; | ||||
|     } | ||||
|   } | ||||
|   return true; | ||||
| } | ||||
|  | ||||
| void CheckTools() { | ||||
|   std::vector<std::string> installed; | ||||
|   std::vector<std::string> not_installed; | ||||
|   int res = 0; | ||||
|   res = system("makerom"); | ||||
|   if (!res) { | ||||
|     not_installed.push_back("makerom"); | ||||
|   } else { | ||||
|     installed.push_back("makerom"); | ||||
|   } | ||||
|   res = system("bannertool"); | ||||
|   if (!res) { | ||||
|     not_installed.push_back("bannertool"); | ||||
|   } else { | ||||
|     installed.push_back("bannertool"); | ||||
|   } | ||||
|   std::cout << "<DEVKITPRO> is set to: " << getenv("DEVKITPRO") << "\n"; | ||||
|   std::cout << "Tools-Check:\n"; | ||||
|   for (auto const &it : installed) { | ||||
|     std::cout << "[+]" << it << " is installed!\n"; | ||||
|   } | ||||
|   for (auto const &it : not_installed) { | ||||
|     std::cout << "[+]" << it << " is not installed!\n"; | ||||
|   } | ||||
| } | ||||
|  | ||||
| void PrintHelp() { | ||||
|   std::cout << "npi-build v0.1\n"; | ||||
|   std::cout << "Commands:\n"; | ||||
|   std::cout << "help: Display this\n"; | ||||
|   std::cout << "generate <type> <dir>: Create Project Files!\n"; | ||||
|   std::cout << "  type: 3dsx | cia3dsx\n"; | ||||
|   std::cout << "generate-assist: Create Project Files with assistent!\n"; | ||||
|   std::cout << "build: Build the Project!\n"; | ||||
|   std::cout << "clean: Delete all files from build.\n"; | ||||
|   std::cout << "edit-assist: Edit Project files with assist!\n"; | ||||
|   std::cout << "check-tools: Check for Missing Tools!\n"; | ||||
|   return; | ||||
| } | ||||
|  | ||||
| void ProcessArgs(int argc, char *argv[]) { | ||||
|   if (argc < 2) { | ||||
|     PrintHelp(); | ||||
|     return; | ||||
|   } else if (std::string(argv[1]) == "help") { | ||||
|     PrintHelp(); | ||||
|     return; | ||||
|   } else if (std::string(argv[1]) == "generate") { | ||||
|     if (argc < 4) { | ||||
|       std::cout << "Wrong Number of Arguments!\n"; | ||||
|       return; | ||||
|     } | ||||
|     std::string type = std::string(argv[2]); | ||||
|     int res = 1; | ||||
|     int type_ = -1; | ||||
|     if (type == "3dsx" | type == "cia3dsx") { | ||||
|       res = 0; | ||||
|       if (type == "3dsx") | ||||
|         type_ = 0; | ||||
|       else if (type == "cia3dsx") | ||||
|         type_ = 1; | ||||
|     } | ||||
|     if (res) { | ||||
|       std::cout << "Unknown type!\n"; | ||||
|       return; | ||||
|     } | ||||
|     std::string dst_dir = argv[3]; | ||||
|  | ||||
|     std::cout << "\nDestination: " << dst_dir << "/\n"; | ||||
|  | ||||
|     std::filesystem::create_directories( | ||||
|         std::filesystem::path(dst_dir + "/app")); | ||||
|     std::filesystem::create_directories( | ||||
|         std::filesystem::path(dst_dir + "/gfx")); | ||||
|     std::ofstream gfx_keep(dst_dir + "/gfx/.gitkeep"); | ||||
|     gfx_keep.close(); | ||||
|     std::filesystem::create_directories( | ||||
|         std::filesystem::path(dst_dir + "/romfs/gfx")); | ||||
|     std::ofstream rgfx_keep(dst_dir + "/romfs/gfx/.gitkeep"); | ||||
|     rgfx_keep.close(); | ||||
|     if (type_ == 1) { | ||||
|       char *ret = new char[10000]; | ||||
|       std::string uid = helper::GenerateUniqueId(); | ||||
|       sprintf(ret, ciaRSF, default_title, default_code, default_romfs_path, | ||||
|               uid.c_str()); | ||||
|       std::ofstream test(dst_dir + "/app/build-cia.rsf"); | ||||
|       test << ret; | ||||
|       test.close(); | ||||
|       delete[] ret; | ||||
|       helper::ArrayToFile(banner_audio, banner_audio_size, | ||||
|                           dst_dir + "/app/banner_audio.wav"); | ||||
|       helper::ArrayToFile(logo_lz11, logo_lz11_size, | ||||
|                           dst_dir + "/app/logo.lz11"); | ||||
|       helper::ArrayToFile(banner, banner_size, dst_dir + "/app/banner.png"); | ||||
|     } | ||||
|     helper::ArrayToFile(icon, icon_size, dst_dir + "/app/icon.png"); | ||||
|     NpiProject npr; | ||||
|     Prj_InitDefault(npr); | ||||
|     helper::GenerateTemplateFile(dst_dir + "/build.json", npr); | ||||
|   } else if (std::string(argv[1]) == "generate-assist") { | ||||
|     // define vars | ||||
|     std::string prj_name; | ||||
|     std::string prodcode; | ||||
|     std::string unique_id; | ||||
|  | ||||
|     int type_; | ||||
|     std::string dst_dir; | ||||
|  | ||||
|     std::cout << "Npi-Build Project-Assist:"; | ||||
|     std::cout << "\ntype Project Name >"; | ||||
|     std::cin >> prj_name; | ||||
|     std::cout << "\ntype Project Code 4 chars [NPI7] >"; | ||||
|     std::cin >> prodcode; | ||||
|     if (prodcode.length() != 4) { | ||||
|       std::cout << "\nWrong Length!\n"; | ||||
|       return; | ||||
|     } | ||||
|     ToUpperCase(prodcode); | ||||
|     std::cout << "Code set to [" << prodcode << "]"; | ||||
|     std::cout << "\ntype project's unique id [ff3ff]\n or type random to " | ||||
|                  "generate a random one>"; | ||||
|     std::cin >> unique_id; | ||||
|     bool rnd = false; | ||||
|     if (unique_id == "random") { | ||||
|       unique_id = helper::GenerateUniqueId(); | ||||
|       rnd = true; | ||||
|     } | ||||
|     if (unique_id.length() != 5 && !rnd) { | ||||
|       std::cout << "\nWrong Length!\n"; | ||||
|       return; | ||||
|     } | ||||
|     if (!isValidHex(unique_id) && !rnd) { | ||||
|       std::cout << "\nId is not valid\n"; | ||||
|       return; | ||||
|     } | ||||
|     if (!rnd) { | ||||
|       unique_id.insert(0, "0x"); | ||||
|     } | ||||
|  | ||||
|     std::cout << "\nProject type: type 0 for 3dsx\nonly or 1 for cia and 3dsx>"; | ||||
|     std::cin >> type_; | ||||
|     if (!(type_ == 0 | type_ == 1)) { | ||||
|       std::cout << "\nunknown type!\n"; | ||||
|       return; | ||||
|     } | ||||
|     std::cout << "\nProjects Directpry: type . for current>"; | ||||
|     std::cin >> dst_dir; | ||||
|  | ||||
|     std::cout << "\nDestination: " << dst_dir << "/\n"; | ||||
|  | ||||
|     std::filesystem::create_directories( | ||||
|         std::filesystem::path(dst_dir + "/app")); | ||||
|     std::filesystem::create_directories( | ||||
|         std::filesystem::path(dst_dir + "/gfx")); | ||||
|     std::ofstream gfx_keep(dst_dir + "/gfx/.gitkeep"); | ||||
|     gfx_keep.close(); | ||||
|     std::filesystem::create_directories( | ||||
|         std::filesystem::path(dst_dir + "/romfs/gfx")); | ||||
|     std::ofstream rgfx_keep(dst_dir + "/romfs/gfx/.gitkeep"); | ||||
|     rgfx_keep.close(); | ||||
|  | ||||
|     if (type_ == 1) { | ||||
|       char *ret = new char[10000]; | ||||
|       sprintf(ret, ciaRSF, prj_name.c_str(), prodcode.c_str(), | ||||
|               default_romfs_path, unique_id.c_str()); | ||||
|       std::ofstream test(dst_dir + "/app/build-cia.rsf"); | ||||
|       test << ret; | ||||
|       test.close(); | ||||
|       delete[] ret; | ||||
|       helper::ArrayToFile(banner_audio, banner_audio_size, | ||||
|                           dst_dir + "/app/banner_audio.wav"); | ||||
|       helper::ArrayToFile(logo_lz11, logo_lz11_size, | ||||
|                           dst_dir + "/app/logo.lz11"); | ||||
|       helper::ArrayToFile(banner, banner_size, dst_dir + "/app/banner.png"); | ||||
|     } | ||||
|     helper::ArrayToFile(icon, icon_size, dst_dir + "/app/icon.png"); | ||||
|     NpiProject npr; | ||||
|     Prj_InitDefault(npr); | ||||
|     npr.name = prj_name; | ||||
|     npr.prod = prodcode; | ||||
|     npr.unique_id = unique_id; | ||||
|  | ||||
|     helper::GenerateTemplateFile(dst_dir + "/build.json", npr); | ||||
|   } | ||||
|  | ||||
|   else if (std::string(argv[1]) == "build") { | ||||
|     helper::CompileProject(fix_path(std::filesystem::current_path().string())); | ||||
|   } | ||||
|  | ||||
|   else if (std::string(argv[1]) == "check-tools") | ||||
|     CheckTools(); | ||||
|   else if (std::string(argv[1]) == "clean") | ||||
|     helper::CleanProject(fix_path(std::filesystem::current_path().string())); | ||||
| } | ||||
|  | ||||
| int main(int argc, char *argv[]) { | ||||
|   // std::cout << std::filesystem::current_path() << std::endl; | ||||
|   ProcessArgs(argc, argv); | ||||
|  | ||||
|   std::cout << "Exitting...\n"; | ||||
|   return 0; | ||||
| } | ||||
							
								
								
									
										302
									
								
								source/samplefiles.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										302
									
								
								source/samplefiles.cpp
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,302 @@ | ||||
| #include <samplefiles.hpp> | ||||
|  | ||||
| const char *default_title = "Sample"; | ||||
| const char *default_code = "NPI7"; | ||||
| const char *default_unique_id = "0xff3ff"; | ||||
| const char *default_romfs_path = "romfs"; | ||||
| const char *ciaRSF = | ||||
|     "#This File is generated by npi-build!\n" | ||||
|     "#Every Changes made will get overwritten\n" | ||||
|     "#if the name of this file is <build-cia.rsf>\n" | ||||
|     "#To use custom rsf files change the path in build.json\n" | ||||
|     "BasicInfo:\n" | ||||
|     "  Title                   : \"%s\"\n" | ||||
|     "  ProductCode             : \"CTR-H-%s\"\n" | ||||
|     "  Logo                    : Homebrew # Nintendo / Licensed / Distributed " | ||||
|     "/ iQue / iQueForSystem\n" | ||||
|     "\n" | ||||
|     "RomFs:\n" | ||||
|     "  RootPath: \"%s\"\n" | ||||
|     "\n" | ||||
|     "TitleInfo:\n" | ||||
|     "  Category                : Application\n" | ||||
|     "  UniqueId                : %s\n" | ||||
|     "\n" | ||||
|     "Option:\n" | ||||
|     "  UseOnSD                 : true # true if App is to be installed to SD\n" | ||||
|     "  FreeProductCode         : true # Removes limitations on ProductCode\n" | ||||
|     "  MediaFootPadding        : false # If true CCI files are created with " | ||||
|     "padding\n" | ||||
|     "  EnableCrypt             : false # Enables encryption for NCCH and CIA\n" | ||||
|     "  EnableCompress          : true # Compresses where applicable (currently " | ||||
|     "only exefs:/.code)\n" | ||||
|     "  \n" | ||||
|     "AccessControlInfo:\n" | ||||
|     "  CoreVersion                   : 2\n" | ||||
|     "\n" | ||||
|     "  # Exheader Format Version\n" | ||||
|     "  DescVersion                   : 2\n" | ||||
|     "  \n" | ||||
|     "  # Minimum Required Kernel Version (below is for 4.5.0)\n" | ||||
|     "  ReleaseKernelMajor            : \"02\"\n" | ||||
|     "  ReleaseKernelMinor            : \"33\"\n" | ||||
|     "\n" | ||||
|     "  # ExtData\n" | ||||
|     "  UseExtSaveData                : false # enables ExtData       \n" | ||||
|     "  #ExtSaveDataId                : 0x300 # only set this when the ID is " | ||||
|     "different to the UniqueId\n" | ||||
|     "\n" | ||||
|     "  # FS:USER Archive Access Permissions\n" | ||||
|     "  # Uncomment as required\n" | ||||
|     "  FileSystemAccess:\n" | ||||
|     "   - CategorySystemApplication\n" | ||||
|     "   - CategoryHardwareCheck\n" | ||||
|     "   - CategoryFileSystemTool\n" | ||||
|     "   - Debug\n" | ||||
|     "   - TwlCardBackup\n" | ||||
|     "   - TwlNandData\n" | ||||
|     "   #- Boss\n" | ||||
|     "   - DirectSdmc\n" | ||||
|     "   - Core\n" | ||||
|     "   #- CtrNandRo\n" | ||||
|     "   #- CtrNandRw\n" | ||||
|     "   #- CtrNandRoWrite\n" | ||||
|     "   - CategorySystemSettings\n" | ||||
|     "   #- CardBoard\n" | ||||
|     "   #- ExportImportIvs\n" | ||||
|     "   - DirectSdmcWrite\n" | ||||
|     "   #- SwitchCleanup\n" | ||||
|     "   #- SaveDataMove\n" | ||||
|     "   #- Shop\n" | ||||
|     "   #- Shell\n" | ||||
|     "   #- CategoryHomeMenu\n" | ||||
|     "   #- SeedDB\n" | ||||
|     "  IoAccessControl:\n" | ||||
|     "   #- FsMountNand\n" | ||||
|     "   #- FsMountNandRoWrite\n" | ||||
|     "   - FsMountTwln\n" | ||||
|     "   #- FsMountWnand\n" | ||||
|     "   - FsMountCardSpi\n" | ||||
|     "   - UseSdif3\n" | ||||
|     "   #- CreateSeed\n" | ||||
|     "   - UseCardSpi\n" | ||||
|     "\n" | ||||
|     "  # Process Settings\n" | ||||
|     "  MemoryType                    : Application # Application/System/Base\n" | ||||
|     "  SystemMode                    : 64MB # " | ||||
|     "64MB(Default)/96MB/80MB/72MB/32MB\n" | ||||
|     "  IdealProcessor                : 0\n" | ||||
|     "  AffinityMask                  : 1\n" | ||||
|     "  Priority                      : 16\n" | ||||
|     "  MaxCpu                        : 0x9E # Default\n" | ||||
|     "  HandleTableSize               : 0x200\n" | ||||
|     "  DisableDebug                  : false\n" | ||||
|     "  EnableForceDebug              : false\n" | ||||
|     "  CanWriteSharedPage            : true\n" | ||||
|     "  CanUsePrivilegedPriority      : false\n" | ||||
|     "  CanUseNonAlphabetAndNumber    : true\n" | ||||
|     "  PermitMainFunctionArgument    : true\n" | ||||
|     "  CanShareDeviceMemory          : true\n" | ||||
|     "  RunnableOnSleep               : false\n" | ||||
|     "  SpecialMemoryArrange          : true\n" | ||||
|     "\n" | ||||
|     "  # New3DS Exclusive Process Settings\n" | ||||
|     "  SystemModeExt                 : Legacy # Legacy(Default)/124MB/178MB  " | ||||
|     "Legacy:Use Old3DS SystemMode\n" | ||||
|     "  CpuSpeed                      : 804MHz # 268MHz(Default)/804MHz\n" | ||||
|     "  EnableL2Cache                 : true # false(default)/true\n" | ||||
|     "  CanAccessCore2                : true \n" | ||||
|     "\n" | ||||
|     "  # Virtual Address Mappings\n" | ||||
|     "  IORegisterMapping:\n" | ||||
|     "   - 1ff00000-1ff7ffff   # DSP memory\n" | ||||
|     "  MemoryMapping: \n" | ||||
|     "   - 1f000000-1f5fffff:r # VRAM\n" | ||||
|     "\n" | ||||
|     "  # Accessible SVCs, <Name>:<ID>\n" | ||||
|     "  SystemCallAccess: \n" | ||||
|     "    ControlMemory: 1\n" | ||||
|     "    QueryMemory: 2\n" | ||||
|     "    ExitProcess: 3\n" | ||||
|     "    GetProcessAffinityMask: 4\n" | ||||
|     "    SetProcessAffinityMask: 5\n" | ||||
|     "    GetProcessIdealProcessor: 6\n" | ||||
|     "    SetProcessIdealProcessor: 7\n" | ||||
|     "    CreateThread: 8\n" | ||||
|     "    ExitThread: 9\n" | ||||
|     "    SleepThread: 10\n" | ||||
|     "    GetThreadPriority: 11\n" | ||||
|     "    SetThreadPriority: 12\n" | ||||
|     "    GetThreadAffinityMask: 13\n" | ||||
|     "    SetThreadAffinityMask: 14\n" | ||||
|     "    GetThreadIdealProcessor: 15\n" | ||||
|     "    SetThreadIdealProcessor: 16\n" | ||||
|     "    GetCurrentProcessorNumber: 17\n" | ||||
|     "    Run: 18\n" | ||||
|     "    CreateMutex: 19\n" | ||||
|     "    ReleaseMutex: 20\n" | ||||
|     "    CreateSemaphore: 21\n" | ||||
|     "    ReleaseSemaphore: 22\n" | ||||
|     "    CreateEvent: 23\n" | ||||
|     "    SignalEvent: 24\n" | ||||
|     "    ClearEvent: 25\n" | ||||
|     "    CreateTimer: 26\n" | ||||
|     "    SetTimer: 27\n" | ||||
|     "    CancelTimer: 28\n" | ||||
|     "    ClearTimer: 29\n" | ||||
|     "    CreateMemoryBlock: 30\n" | ||||
|     "    MapMemoryBlock: 31\n" | ||||
|     "    UnmapMemoryBlock: 32\n" | ||||
|     "    CreateAddressArbiter: 33\n" | ||||
|     "    ArbitrateAddress: 34\n" | ||||
|     "    CloseHandle: 35\n" | ||||
|     "    WaitSynchronization1: 36\n" | ||||
|     "    WaitSynchronizationN: 37\n" | ||||
|     "    SignalAndWait: 38\n" | ||||
|     "    DuplicateHandle: 39\n" | ||||
|     "    GetSystemTick: 40\n" | ||||
|     "    GetHandleInfo: 41\n" | ||||
|     "    GetSystemInfo: 42\n" | ||||
|     "    GetProcessInfo: 43\n" | ||||
|     "    GetThreadInfo: 44\n" | ||||
|     "    ConnectToPort: 45\n" | ||||
|     "    SendSyncRequest1: 46\n" | ||||
|     "    SendSyncRequest2: 47\n" | ||||
|     "    SendSyncRequest3: 48\n" | ||||
|     "    SendSyncRequest4: 49\n" | ||||
|     "    SendSyncRequest: 50\n" | ||||
|     "    OpenProcess: 51\n" | ||||
|     "    OpenThread: 52\n" | ||||
|     "    GetProcessId: 53\n" | ||||
|     "    GetProcessIdOfThread: 54\n" | ||||
|     "    GetThreadId: 55\n" | ||||
|     "    GetResourceLimit: 56\n" | ||||
|     "    GetResourceLimitLimitValues: 57\n" | ||||
|     "    GetResourceLimitCurrentValues: 58\n" | ||||
|     "    GetThreadContext: 59\n" | ||||
|     "    Break: 60\n" | ||||
|     "    OutputDebugString: 61\n" | ||||
|     "    ControlPerformanceCounter: 62\n" | ||||
|     "    CreatePort: 71\n" | ||||
|     "    CreateSessionToPort: 72\n" | ||||
|     "    CreateSession: 73\n" | ||||
|     "    AcceptSession: 74\n" | ||||
|     "    ReplyAndReceive1: 75\n" | ||||
|     "    ReplyAndReceive2: 76\n" | ||||
|     "    ReplyAndReceive3: 77\n" | ||||
|     "    ReplyAndReceive4: 78\n" | ||||
|     "    ReplyAndReceive: 79\n" | ||||
|     "    BindInterrupt: 80\n" | ||||
|     "    UnbindInterrupt: 81\n" | ||||
|     "    InvalidateProcessDataCache: 82\n" | ||||
|     "    StoreProcessDataCache: 83\n" | ||||
|     "    FlushProcessDataCache: 84\n" | ||||
|     "    StartInterProcessDma: 85\n" | ||||
|     "    StopDma: 86\n" | ||||
|     "    GetDmaState: 87\n" | ||||
|     "    RestartDma: 88\n" | ||||
|     "    DebugActiveProcess: 96\n" | ||||
|     "    BreakDebugProcess: 97\n" | ||||
|     "    TerminateDebugProcess: 98\n" | ||||
|     "    GetProcessDebugEvent: 99\n" | ||||
|     "    ContinueDebugEvent: 100\n" | ||||
|     "    GetProcessList: 101\n" | ||||
|     "    GetThreadList: 102\n" | ||||
|     "    GetDebugThreadContext: 103\n" | ||||
|     "    SetDebugThreadContext: 104\n" | ||||
|     "    QueryDebugProcessMemory: 105\n" | ||||
|     "    ReadProcessMemory: 106\n" | ||||
|     "    WriteProcessMemory: 107\n" | ||||
|     "    SetHardwareBreakPoint: 108\n" | ||||
|     "    GetDebugThreadParam: 109\n" | ||||
|     "    ControlProcessMemory: 112\n" | ||||
|     "    MapProcessMemory: 113\n" | ||||
|     "    UnmapProcessMemory: 114\n" | ||||
|     "    CreateCodeSet: 115\n" | ||||
|     "    CreateProcess: 117\n" | ||||
|     "    TerminateProcess: 118\n" | ||||
|     "    SetProcessResourceLimits: 119\n" | ||||
|     "    CreateResourceLimit: 120\n" | ||||
|     "    SetResourceLimitValues: 121\n" | ||||
|     "    AddCodeSegment: 122\n" | ||||
|     "    Backdoor: 123\n" | ||||
|     "    KernelSetState: 124\n" | ||||
|     "    QueryProcessMemory: 125\n" | ||||
|     "\n" | ||||
|     "  # Service List\n" | ||||
|     "  # Maximum 34 services (32 if firmware is prior to 9.6.0)\n" | ||||
|     "  ServiceAccessControl:\n" | ||||
|     "   - APT:U\n" | ||||
|     "   - ac:u\n" | ||||
|     "   - am:net\n" | ||||
|     "   #- boss:U\n" | ||||
|     "   #- cam:u\n" | ||||
|     "   #- cecd:u\n" | ||||
|     "   #- cfg:nor\n" | ||||
|     "   - cfg:u\n" | ||||
|     "   #- csnd:SND\n" | ||||
|     "   - dsp::DSP\n" | ||||
|     "   #- frd:u\n" | ||||
|     "   - fs:USER\n" | ||||
|     "   - gsp::Gpu\n" | ||||
|     "   - gsp::Lcd\n" | ||||
|     "   - hid:USER\n" | ||||
|     "   - http:C\n" | ||||
|     "   #- ir:rst\n" | ||||
|     "   #- ir:u\n" | ||||
|     "   #- ir:USER\n" | ||||
|     "   #- mic:u\n" | ||||
|     "   #- ndm:u\n" | ||||
|     "   #- news:s\n" | ||||
|     "   - nwm::EXT\n" | ||||
|     "   - nwm::UDS\n" | ||||
|     "   - ptm:sysm\n" | ||||
|     "   - ptm:u\n" | ||||
|     "   - pxi:dev\n" | ||||
|     "   - soc:U\n" | ||||
|     "   - ssl:C\n" | ||||
|     "   #- y2r:u\n" | ||||
|     "\n" | ||||
|     "\n" | ||||
|     "SystemControlInfo:\n" | ||||
|     "  SaveDataSize: 0KB # Change if the app uses savedata\n" | ||||
|     "  RemasterVersion: $(APP_VERSION_MAJOR)\n" | ||||
|     "  StackSize: 0x40000\n" | ||||
|     "\n" | ||||
|     "  # Modules that run services listed above should be included below\n" | ||||
|     "  # Maximum 48 dependencies\n" | ||||
|     "  # <module name>:<module titleid>\n" | ||||
|     "  Dependency:\n" | ||||
|     "    ac: 0x0004013000002402\n" | ||||
|     "    #act: 0x0004013000003802\n" | ||||
|     "    am: 0x0004013000001502\n" | ||||
|     "    boss: 0x0004013000003402\n" | ||||
|     "   camera: 0x0004013000001602\n" | ||||
|     "    cecd: 0x0004013000002602\n" | ||||
|     "   cfg: 0x0004013000001702\n" | ||||
|     "    codec: 0x0004013000001802\n" | ||||
|     "    csnd: 0x0004013000002702\n" | ||||
|     "    dlp: 0x0004013000002802\n" | ||||
|     "    dsp: 0x0004013000001a02\n" | ||||
|     "    friends: 0x0004013000003202\n" | ||||
|     "    gpio: 0x0004013000001b02\n" | ||||
|     "    gsp: 0x0004013000001c02\n" | ||||
|     "    hid: 0x0004013000001d02\n" | ||||
|     "    http: 0x0004013000002902\n" | ||||
|     "    i2c: 0x0004013000001e02\n" | ||||
|     "    ir: 0x0004013000003302\n" | ||||
|     "    mcu: 0x0004013000001f02\n" | ||||
|     "    mic: 0x0004013000002002\n" | ||||
|     "    ndm: 0x0004013000002b02\n" | ||||
|     "    news: 0x0004013000003502\n" | ||||
|     "    #nfc: 0x0004013000004002\n" | ||||
|     "    nim: 0x0004013000002c02\n" | ||||
|     "    nwm: 0x0004013000002d02\n" | ||||
|     "    pdn: 0x0004013000002102\n" | ||||
|     "    ps: 0x0004013000003102\n" | ||||
|     "    ptm: 0x0004013000002202\n" | ||||
|     "    #qtm: 0x0004013020004202\n" | ||||
|     "    ro: 0x0004013000003702\n" | ||||
|     "    socket: 0x0004013000002e02\n" | ||||
|     "    spi: 0x0004013000002302\n" | ||||
|     "    ssl: 0x0004013000002f02\n"; | ||||
							
								
								
									
										43
									
								
								tools/file2array.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										43
									
								
								tools/file2array.cpp
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,43 @@ | ||||
| #include <fstream> | ||||
| #include <iostream> | ||||
| #include <vector> | ||||
|  | ||||
| int main(int argc, char *argv[]) { | ||||
|   if (argc < 3) { | ||||
|     std::cout << "Usage:\nfile2array <file> <dstfilename>\n"; | ||||
|     return 0; | ||||
|   } | ||||
|   std::string file_path = argv[1]; | ||||
|   std::ifstream file(file_path, std::ios::binary); | ||||
|  | ||||
|   if (!file.is_open()) { | ||||
|     std::cerr << "[-] Could not open file" << std::endl; | ||||
|     return 1; | ||||
|   } | ||||
|  | ||||
|   std::vector<unsigned char> buffer(std::istreambuf_iterator<char>(file), {}); | ||||
|  | ||||
|   const size_t array_size = buffer.size(); | ||||
|   std::ofstream fout(std::string(argv[2]) + ".cpp"); | ||||
|   fout << "#include <" << argv[2] << ".hpp>" << std::endl; | ||||
|   fout << "\nunsigned char " << argv[2] << "[] = {"; | ||||
|   for (std::size_t i = 0; i < buffer.size(); ++i) { | ||||
|     if (i != 0) { | ||||
|       fout << ", "; | ||||
|     } | ||||
|     fout << "0x" << std::hex << static_cast<int>(buffer[i]); | ||||
|   } | ||||
|   fout << "};" << std::endl; | ||||
|  | ||||
|   fout << "\nsize_t " << argv[2] << "_size = 0x" << std::hex << array_size | ||||
|        << ";" << std::endl; | ||||
|  | ||||
|   std::ofstream fhead(std::string(argv[2]) + ".hpp"); | ||||
|   fhead << "#pragma once\n#include <cstddef>\n"; | ||||
|   fhead << "\nextern unsigned char " << argv[2] << "[];"; | ||||
|   fhead << "\nextern size_t " << argv[2] << "_size;"; | ||||
|  | ||||
|   file.close(); | ||||
|   fout.close(); | ||||
|   return 0; | ||||
| } | ||||
		Reference in New Issue
	
	Block a user