diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..3c2d763 --- /dev/null +++ b/.gitignore @@ -0,0 +1,8 @@ +build/ +*.3dsx +*.3ds +*.elf + +.DS_Store + +.swp diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..23f8e77 --- /dev/null +++ b/Makefile @@ -0,0 +1,146 @@ +#--------------------------------------------------------------------------------- +.SUFFIXES: +#--------------------------------------------------------------------------------- + +ifeq ($(strip $(DEVKITARM)),) +$(error "Please set DEVKITARM in your environment. export DEVKITARM=devkitARM") +endif + +TOPDIR ?= $(CURDIR) +include $(DEVKITARM)/3ds_rules + +#--------------------------------------------------------------------------------- +# TARGET is the name of the output +# BUILD is the directory where object files & intermediate files will be placed +# SOURCES is a list of directories containing source code +# DATA is a list of directories containing data files +# INCLUDES is a list of directories containing header files +# SPECS is the directory containing the important build and link files +#--------------------------------------------------------------------------------- +export TARGET := $(shell basename $(CURDIR)) +BUILD := build +SOURCES := source source/utils source/utils/shared_font +DATA := data +INCLUDES := source #include + + +#--------------------------------------------------------------------------------- +# options for code generation +#--------------------------------------------------------------------------------- +ARCH := -march=armv6k -mtune=mpcore + +CFLAGS := -g -Wall -O2 -mword-relocations -save-temps \ + -fomit-frame-pointer -ffast-math -mfloat-abi=softfp \ + $(ARCH) + +CFLAGS += $(INCLUDE) -DARM11 -D_3DS + +CXXFLAGS := $(CFLAGS) -fno-rtti -fno-exceptions -std=gnu++11 + +ASFLAGS := -g $(ARCH) +LDFLAGS = -specs=3dsx.specs -g $(ARCH) \ + -Wl,-Map,$(TARGET).map + +LIBS := -lctru -lm + +#--------------------------------------------------------------------------------- +# list of directories containing libraries, this must be the top level containing +# include and lib +#--------------------------------------------------------------------------------- +LIBDIRS := $(CTRULIB) + + +#--------------------------------------------------------------------------------- +# no real need to edit anything past this point unless you need to add additional +# rules for different file extensions +#--------------------------------------------------------------------------------- +ifneq ($(BUILD),$(notdir $(CURDIR))) +#--------------------------------------------------------------------------------- + +export OUTPUT := $(CURDIR)/$(TARGET) +export TOPDIR := $(CURDIR) + +export VPATH := $(foreach dir,$(SOURCES),$(CURDIR)/$(dir)) \ + $(foreach dir,$(DATA),$(CURDIR)/$(dir)) + +export DEPSDIR := $(CURDIR)/$(BUILD) + +CFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.c))) +CPPFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.cpp))) +SFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.s))) +BINFILES := $(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/*.*))) + +#--------------------------------------------------------------------------------- +# use CXX for linking C++ projects, CC for standard C +#--------------------------------------------------------------------------------- +ifeq ($(strip $(CPPFILES)),) +#--------------------------------------------------------------------------------- + export LD := $(CC) +#--------------------------------------------------------------------------------- +else +#--------------------------------------------------------------------------------- + export LD := $(CXX) +#--------------------------------------------------------------------------------- +endif +#--------------------------------------------------------------------------------- + +export OFILES := $(addsuffix .o,$(BINFILES)) \ + $(CPPFILES:.cpp=.o) $(CFILES:.c=.o) $(SFILES:.s=.o) + +export INCLUDE := $(foreach dir,$(INCLUDES),-I$(CURDIR)/$(dir)) \ + $(foreach dir,$(LIBDIRS),-I$(dir)/include) \ + -I$(CURDIR)/$(BUILD) + +export LIBPATHS := $(foreach dir,$(LIBDIRS),-L$(dir)/lib) + +.PHONY: $(BUILD) clean all + +#--------------------------------------------------------------------------------- +all: $(BUILD) + +$(BUILD): + @[ -d $@ ] || mkdir -p $@ + @make --no-print-directory -C $(BUILD) -f $(CURDIR)/Makefile + +#--------------------------------------------------------------------------------- +clean: + @echo clean ... + @rm -fr $(BUILD) $(TARGET).3dsx $(TARGET).elf + + +#--------------------------------------------------------------------------------- +else + +DEPENDS := $(OFILES:.o=.d) + +#--------------------------------------------------------------------------------- +# main targets +#--------------------------------------------------------------------------------- +$(OUTPUT).3dsx : $(OUTPUT).elf +$(OUTPUT).elf : $(OFILES) + +#--------------------------------------------------------------------------------- +# you need a rule like this for each extension you use as binary data +#--------------------------------------------------------------------------------- +%.bin.o : %.bin +#--------------------------------------------------------------------------------- + @echo $(notdir $<) + @$(bin2o) + +# not the right way to do this +#--------------------------------------------------------------------------------- +%.vsh.o : %.vsh +#--------------------------------------------------------------------------------- + @echo $(notdir $<) + @python $(AEMSTRO)/aemstro_as.py $< ../$(notdir $<).shbin + @bin2s ../$(notdir $<).shbin | arm-none-eabi-as -o $@ + @echo "extern const u8" `(echo $(notdir $<).shbin | sed -e 's/^\([0-9]\)/_\1/' | tr . _)`"_end[];" > `(echo $(notdir $<).shbin | tr . _)`.h + @echo "extern const u8" `(echo $(notdir $<).shbin | sed -e 's/^\([0-9]\)/_\1/' | tr . _)`"[];" >> `(echo $(notdir $<).shbin | tr . _)`.h + @echo "extern const u32" `(echo $(notdir $<).shbin | sed -e 's/^\([0-9]\)/_\1/' | tr . _)`_size";" >> `(echo $(notdir $<).shbin | tr . _)`.h + @rm ../$(notdir $<).shbin + +-include $(DEPENDS) + +#--------------------------------------------------------------------------------------- +endif +#--------------------------------------------------------------------------------------- diff --git a/data/font.bin b/data/font.bin new file mode 100644 index 0000000..e876dcf Binary files /dev/null and b/data/font.bin differ diff --git a/send-exec.py b/send-exec.py new file mode 100644 index 0000000..c32080c --- /dev/null +++ b/send-exec.py @@ -0,0 +1,21 @@ +#!/usr/bin/env python + +### TO USE: +#### Press Y on the HBMenu (opens the NetLoader) +#### Change host/port combination +#### Run the script + +import socket +import sys +import time + +TCP_IP = '192.168.xx.xx' +TCP_PORT = 9000 +MESSAGE = open("citra-3dsutils.3dsx", "rb").read(); + +s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) +s.connect((TCP_IP, TCP_PORT)) +s.send(MESSAGE) +time.sleep(10) +s.close() + diff --git a/source/font.cpp b/source/font.cpp new file mode 100644 index 0000000..20f7ae7 --- /dev/null +++ b/source/font.cpp @@ -0,0 +1,9 @@ +#include <3ds.h> +#include "font.h" + +font_s fontDefault = { + font1Data, + font1Desc, + 16, + { 0xFF, 0xFF, 0xFF } +}; diff --git a/source/font.h b/source/font.h new file mode 100644 index 0000000..b0dc182 --- /dev/null +++ b/source/font.h @@ -0,0 +1,34 @@ +#pragma once + +struct Glyph { + // Glyph representation + char c; + + // x and y origin of the character. + int x, y; + + // width and height in pixels. + int w, h; + + // x and y offset + int xo, yo; + + // Pixels after this character to begin + // drawing the next one. + int xa; + + // Glyph data. + u8* data; +}; + +struct font_s { + u8* data; + Glyph* desc; + u8 height; + u8 color[3]; +}; + +extern u8 font1Data[]; +extern Glyph font1Desc[]; + +extern font_s fontDefault; diff --git a/source/font1.cpp b/source/font1.cpp new file mode 100644 index 0000000..b589d0d --- /dev/null +++ b/source/font1.cpp @@ -0,0 +1,261 @@ +#include <3ds.h> +#include "font.h" +Glyph font1Desc[] = { + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {' ', 240, 8, 5, 3, -2, 13, 3, &font1Data[0]}, + {'!', 63, 0, 5, 11, -1, 2, 3, &font1Data[15]}, + {'"', 137, 9, 6, 5, -1, 2, 4, &font1Data[70]}, + {'#', 30, 53, 9, 10, -1, 2, 7, &font1Data[100]}, + {'$', 246, 0, 8, 13, -1, 1, 6, &font1Data[190]}, + {'%', 192, 15, 12, 11, -1, 2, 10, &font1Data[294]}, + {'&', 48, 29, 11, 11, -1, 2, 8, &font1Data[426]}, + {'\'', 144, 9, 5, 5, -1, 2, 3, &font1Data[547]}, + {'(', 78, 15, 6, 13, -1, 2, 4, &font1Data[572]}, + {')', 99, 15, 5, 13, -1, 2, 4, &font1Data[650]}, + {'*', 103, 9, 7, 6, -1, 2, 5, &font1Data[715]}, + {'+', 28, 12, 8, 7, 0, 5, 8, &font1Data[757]}, + {',', 251, 39, 4, 5, -1, 10, 3, &font1Data[813]}, + {'-', 214, 9, 7, 3, -1, 7, 5, &font1Data[833]}, + {'.', 234, 9, 5, 3, -1, 10, 3, &font1Data[854]}, + {'/', 146, 15, 8, 12, -2, 2, 5, &font1Data[869]}, + {'0', 174, 51, 8, 11, -1, 2, 6, &font1Data[965]}, + {'1', 56, 0, 6, 11, -1, 2, 5, &font1Data[1053]}, + {'2', 183, 51, 8, 11, -1, 2, 6, &font1Data[1119]}, + {'3', 192, 51, 8, 11, -1, 2, 6, &font1Data[1207]}, + {'4', 189, 27, 9, 11, -1, 2, 7, &font1Data[1295]}, + {'5', 201, 51, 8, 11, -1, 2, 6, &font1Data[1394]}, + {'6', 210, 51, 8, 11, -1, 2, 6, &font1Data[1482]}, + {'7', 206, 39, 8, 11, -1, 2, 6, &font1Data[1570]}, + {'8', 219, 51, 8, 11, -1, 2, 6, &font1Data[1658]}, + {'9', 228, 51, 8, 11, -1, 2, 6, &font1Data[1746]}, + {':', 232, 0, 5, 8, -1, 5, 3, &font1Data[1834]}, + {';', 83, 53, 5, 10, -1, 5, 3, &font1Data[1874]}, + {'<', 10, 12, 8, 7, 0, 5, 8, &font1Data[1924]}, + {'=', 111, 9, 8, 5, 0, 6, 8, &font1Data[1980]}, + {'>', 19, 12, 8, 7, 0, 5, 8, &font1Data[2020]}, + {'?', 26, 0, 7, 11, -1, 2, 5, &font1Data[2076]}, + {'@', 111, 15, 13, 12, -1, 2, 11, &font1Data[2153]}, + {'A', 83, 29, 10, 11, -1, 2, 8, &font1Data[2309]}, + {'B', 50, 41, 9, 11, -1, 2, 7, &font1Data[2419]}, + {'C', 138, 28, 10, 11, -1, 2, 7, &font1Data[2518]}, + {'D', 127, 28, 10, 11, -1, 2, 8, &font1Data[2628]}, + {'E', 237, 51, 8, 11, -1, 2, 6, &font1Data[2738]}, + {'F', 246, 51, 8, 11, -1, 2, 6, &font1Data[2826]}, + {'G', 116, 28, 10, 11, -1, 2, 8, &font1Data[2914]}, + {'H', 72, 29, 10, 11, -1, 2, 8, &font1Data[3024]}, + {'I', 81, 0, 5, 11, -1, 2, 3, &font1Data[3134]}, + {'J', 34, 0, 7, 11, -2, 2, 4, &font1Data[3189]}, + {'K', 150, 40, 9, 11, -1, 2, 7, &font1Data[3266]}, + {'L', 9, 0, 8, 11, -1, 2, 6, &font1Data[3365]}, + {'M', 218, 15, 12, 11, -1, 2, 10, &font1Data[3453]}, + {'N', 24, 29, 11, 11, -1, 2, 9, &font1Data[3585]}, + {'O', 60, 29, 11, 11, -1, 2, 9, &font1Data[3706]}, + {'P', 40, 41, 9, 11, -1, 2, 7, &font1Data[3827]}, + {'Q', 125, 15, 11, 12, -1, 2, 9, &font1Data[3926]}, + {'R', 209, 27, 9, 11, -1, 2, 7, &font1Data[4058]}, + {'S', 170, 39, 8, 11, -1, 2, 6, &font1Data[4157]}, + {'T', 239, 27, 9, 11, -1, 2, 6, &font1Data[4245]}, + {'U', 94, 29, 10, 11, -1, 2, 8, &font1Data[4344]}, + {'V', 105, 29, 10, 11, -1, 2, 7, &font1Data[4454]}, + {'W', 164, 15, 13, 11, -1, 2, 11, &font1Data[4564]}, + {'X', 30, 41, 9, 11, -1, 2, 7, &font1Data[4707]}, + {'Y', 149, 28, 9, 11, -1, 2, 7, &font1Data[4806]}, + {'Z', 159, 28, 9, 11, -1, 2, 7, &font1Data[4905]}, + {'[', 85, 15, 6, 13, -1, 2, 4, &font1Data[5004]}, + {'\\', 155, 15, 8, 12, -2, 2, 4, &font1Data[5082]}, + {']', 105, 15, 5, 13, -1, 2, 4, &font1Data[5178]}, + {'^', 46, 12, 8, 7, 0, 2, 8, &font1Data[5243]}, + {'_', 188, 9, 9, 3, -2, 12, 5, &font1Data[5299]}, + {'`', 172, 9, 5, 4, -1, 2, 3, &font1Data[5326]}, + {'a', 162, 0, 8, 8, -1, 5, 6, &font1Data[5346]}, + {'b', 179, 27, 9, 11, -1, 2, 7, &font1Data[5410]}, + {'c', 180, 0, 8, 8, -1, 5, 5, &font1Data[5509]}, + {'d', 160, 40, 9, 11, -1, 2, 7, &font1Data[5573]}, + {'e', 189, 0, 8, 8, -1, 5, 6, &font1Data[5672]}, + {'f', 179, 39, 8, 11, -2, 2, 4, &font1Data[5736]}, + {'g', 219, 27, 9, 11, -1, 5, 7, &font1Data[5824]}, + {'h', 229, 27, 9, 11, -1, 2, 7, &font1Data[5923]}, + {'i', 69, 0, 5, 11, -1, 2, 3, &font1Data[6022]}, + {'j', 204, 0, 7, 14, -3, 2, 3, &font1Data[6077]}, + {'k', 188, 39, 8, 11, -1, 2, 6, &font1Data[6175]}, + {'l', 75, 0, 5, 11, -1, 2, 3, &font1Data[6263]}, + {'m', 87, 0, 12, 8, -1, 5, 10, &font1Data[6318]}, + {'n', 122, 0, 9, 8, -1, 5, 7, &font1Data[6414]}, + {'o', 132, 0, 9, 8, -1, 5, 7, &font1Data[6486]}, + {'p', 60, 41, 9, 11, -1, 5, 7, &font1Data[6558]}, + {'q', 199, 27, 9, 11, -1, 5, 7, &font1Data[6657]}, + {'r', 216, 0, 7, 8, -1, 5, 4, &font1Data[6756]}, + {'s', 224, 0, 7, 8, -1, 5, 5, &font1Data[6812]}, + {'t', 67, 53, 7, 10, -2, 3, 4, &font1Data[6868]}, + {'u', 142, 0, 9, 8, -1, 5, 7, &font1Data[6938]}, + {'v', 171, 0, 8, 8, -1, 5, 6, &font1Data[7010]}, + {'w', 100, 0, 11, 8, -1, 5, 8, &font1Data[7074]}, + {'x', 198, 0, 8, 8, -1, 5, 5, &font1Data[7162]}, + {'y', 197, 39, 8, 11, -1, 5, 6, &font1Data[7226]}, + {'z', 207, 0, 8, 8, -1, 5, 5, &font1Data[7314]}, + {'{', 92, 15, 6, 13, -1, 2, 4, &font1Data[7378]}, + {'|', 234, 0, 5, 14, -1, 2, 3, &font1Data[7456]}, + {'}', 71, 15, 6, 13, -1, 2, 4, &font1Data[7526]}, + {'~', 156, 9, 8, 4, 0, 6, 8, &font1Data[7604]}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {' ', 222, 9, 5, 3, -2, 13, 3, &font1Data[7636]}, + {'¡', 89, 53, 5, 10, -1, 5, 3, &font1Data[7651]}, + {'¢', 40, 53, 8, 10, -1, 3, 6, &font1Data[7701]}, + {'£', 169, 27, 9, 11, -1, 2, 6, &font1Data[7781]}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, + {0, 0, 0, 0, 0, 0, 0, 0, nullptr}, +}; +u8 font1Data[] = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x13, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x13, 0x0, 0x0, 0xce, 0x0, 0x0, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0xb5, 0x0, 0x0, 0x5e, 0x0, 0x0, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x43, 0x43, 0x43, 0x0, 0x0, 0xa7, 0xa7, 0xa7, 0x0, 0x0, 0xa7, 0xa7, 0xa7, 0x0, 0x0, 0x43, 0x43, 0x43, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xb3, 0x0, 0x0, 0x5e, 0x0, 0x0, 0x0, 0x0, 0x80, 0x5e, 0xff, 0x13, 0x13, 0xff, 0x0, 0x0, 0x0, 0x0, 0x43, 0x5e, 0xff, 0x82, 0x9c, 0xff, 0x52, 0x43, 0x0, 0x0, 0x52, 0x43, 0xff, 0x13, 0x13, 0xff, 0x43, 0x80, 0x0, 0x0, 0x43, 0x80, 0xff, 0x9c, 0x9b, 0xff, 0x5e, 0x22, 0x0, 0x0, 0x0, 0x0, 0xff, 0x13, 0x22, 0xff, 0x5e, 0x9b, 0x0, 0x0, 0x0, 0x0, 0x5e, 0x0, 0x0, 0xb3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x43, 0x0, 0x0, 0x0, 0x0, 0x13, 0x43, 0x22, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf3, 0x0, 0x0, 0x0, 0x22, 0xce, 0xa7, 0xb5, 0x5e, 0x0, 0x0, 0x0, 0x43, 0xff, 0x43, 0x43, 0x43, 0xe6, 0x9c, 0x43, 0x56, 0xff, 0x43, 0x0, 0x0, 0x52, 0xff, 0x65, 0x52, 0xa9, 0xe6, 0x52, 0x52, 0x52, 0xff, 0x52, 0x0, 0x0, 0x0, 0x5e, 0xb5, 0xa7, 0xce, 0x22, 0x0, 0x0, 0x0, 0xb3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x22, 0x43, 0x13, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x22, 0x80, 0x80, 0x13, 0x0, 0x0, 0x22, 0x0, 0x0, 0x0, 0x0, 0xe6, 0x43, 0x43, 0xce, 0x0, 0x0, 0xb5, 0x5e, 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, 0xff, 0x0, 0x0, 0x13, 0x8c, 0x9b, 0x43, 0x0, 0xce, 0x5e, 0x5e, 0xce, 0x0, 0x0, 0x0, 0x0, 0x22, 0xa7, 0x80, 0x35, 0x5e, 0x5e, 0x13, 0x0, 0x0, 0x43, 0x9b, 0x9b, 0x43, 0x43, 0x9b, 0x5e, 0x13, 0x0, 0x0, 0x0, 0xf3, 0x22, 0x22, 0xf3, 0x0, 0x0, 0x5e, 0x9c, 0x43, 0x0, 0x0, 0xff, 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, 0x13, 0xa7, 0x0, 0x0, 0xb3, 0x80, 0x80, 0xb3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x43, 0x43, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x43, 0x5e, 0x13, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8c, 0xc2, 0x8c, 0xc2, 0x13, 0x13, 0x5e, 0x43, 0x0, 0x0, 0x0, 0xff, 0x13, 0x0, 0x43, 0xce, 0xb5, 0x8c, 0xa7, 0x8c, 0x0, 0x0, 0xff, 0x0, 0x0, 0x5e, 0xe6, 0x44, 0x0, 0x0, 0xff, 0x0, 0x0, 0xff, 0x0, 0x5e, 0xe6, 0x22, 0xda, 0x22, 0x43, 0xff, 0x0, 0x0, 0xb3, 0x5e, 0xe6, 0x22, 0x0, 0x43, 0x9b, 0xc2, 0x5e, 0x0, 0x0, 0x5e, 0xce, 0x9c, 0x43, 0x22, 0x0, 0x0, 0x13, 0x0, 0x0, 0x0, 0xf3, 0x13, 0x43, 0x80, 0x9b, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x43, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x13, 0x13, 0x13, 0x0, 0x0, 0xb5, 0xb5, 0xb5, 0x0, 0x0, 0x22, 0x22, 0x22, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x22, 0x43, 0x43, 0x22, 0x22, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5e, 0x9b, 0xb5, 0xa7, 0x80, 0x9b, 0xb5, 0x9b, 0x5e, 0x0, 0x0, 0x0, 0xa7, 0x8c, 0x22, 0x13, 0x0, 0x0, 0x0, 0x13, 0x22, 0x8c, 0xa7, 0x0, 0x0, 0x43, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x43, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xa7, 0x13, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x13, 0xa7, 0x0, 0x0, 0x43, 0x9c, 0x80, 0x43, 0x22, 0x22, 0x22, 0x43, 0x80, 0x9c, 0x43, 0x0, 0x0, 0x0, 0x13, 0x43, 0x80, 0x9b, 0x9b, 0x9b, 0x80, 0x43, 0x13, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x22, 0x0, 0x8c, 0x0, 0x0, 0x0, 0xb5, 0x43, 0xda, 0x13, 0x0, 0x0, 0x26, 0xe7, 0x9c, 0x9c, 0x0, 0x0, 0x9c, 0x43, 0xce, 0x13, 0x0, 0x0, 0x13, 0x0, 0x5e, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xb3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, 0x5e, 0x5e, 0xff, 0x5e, 0x5e, 0x0, 0x0, 0x5e, 0x5e, 0xff, 0x5e, 0x5e, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xb3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x9b, 0x5e, 0x43, 0x0, 0x0, 0x22, 0x5e, 0xa7, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x43, 0x0, 0x0, 0xf3, 0x0, 0x0, 0xff, 0x0, 0x0, 0xe6, 0x0, 0x0, 0x22, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5e, 0x0, 0x0, 0xce, 0x0, 0x0, 0x13, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x22, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x9b, 0x80, 0x43, 0x13, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x43, 0x80, 0xb5, 0x5e, 0x22, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x22, 0x5e, 0xb5, 0x80, 0x43, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x13, 0x43, 0xa7, 0x9b, 0x5e, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x22, 0x8c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x43, 0x5e, 0x80, 0x80, 0x8c, 0x5e, 0x22, 0x0, 0x0, 0x0, 0x8c, 0xc2, 0x5e, 0x43, 0x43, 0x5e, 0x8c, 0xce, 0x5e, 0x0, 0x0, 0xff, 0x13, 0x0, 0x0, 0x0, 0x0, 0x0, 0x22, 0xff, 0x0, 0x0, 0xf3, 0x22, 0x0, 0x0, 0x0, 0x0, 0x0, 0x22, 0xff, 0x0, 0x0, 0x43, 0xce, 0x8c, 0x5e, 0x5e, 0x5e, 0x8c, 0xce, 0x5e, 0x0, 0x0, 0x0, 0x22, 0x5e, 0x8c, 0x8c, 0x8c, 0x5e, 0x22, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe6, 0x22, 0x0, 0x0, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x65, 0xe6, 0x0, 0x0, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x8c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8c, 0x5e, 0x22, 0x0, 0x0, 0x0, 0x0, 0x43, 0x0, 0x0, 0x0, 0xff, 0x5e, 0xce, 0x22, 0x0, 0x0, 0x0, 0x52, 0xb3, 0x0, 0x0, 0xff, 0x0, 0x22, 0xda, 0x13, 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, 0xff, 0x0, 0x0, 0x43, 0xc2, 0x13, 0x0, 0x13, 0xff, 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, 0x43, 0x9c, 0xa7, 0xb5, 0x5e, 0x0, 0x0, 0x5e, 0x0, 0x0, 0x0, 0x0, 0x13, 0x43, 0x22, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5e, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x22, 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, 0x8c, 0x0, 0x0, 0x0, 0xe6, 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, 0xf3, 0x22, 0x0, 0x43, 0xce, 0x8c, 0x22, 0x43, 0xf3, 0x0, 0x0, 0x43, 0xce, 0xa7, 0xc2, 0x13, 0x8c, 0xb5, 0xc2, 0x43, 0x0, 0x0, 0x0, 0x22, 0x43, 0x13, 0x0, 0x0, 0x13, 0x13, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xb3, 0x43, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x80, 0x80, 0x13, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0x43, 0xb5, 0x43, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, 0x22, 0x80, 0x80, 0x22, 0x0, 0x0, 0x9b, 0x9b, 0xff, 0x9b, 0x9b, 0x9b, 0x9b, 0xce, 0xce, 0x0, 0x0, 0x22, 0x22, 0xff, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x0, 0x0, 0x0, 0x0, 0x5e, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x43, 0x0, 0x0, 0x0, 0x13, 0x13, 0x13, 0x0, 0x0, 0x0, 0x0, 0xf3, 0x0, 0x0, 0x0, 0xce, 0x9c, 0xb5, 0x9b, 0xb3, 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, 0xff, 0x13, 0x22, 0x22, 0xff, 0x0, 0x0, 0xf3, 0x22, 0x0, 0x22, 0xff, 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, 0x43, 0xce, 0x80, 0xce, 0x5e, 0x0, 0x0, 0x0, 0xce, 0x0, 0x0, 0x0, 0x22, 0x43, 0x22, 0x0, 0x0, 0x0, 0x0, 0x13, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x22, 0x5e, 0x5e, 0x5e, 0x5e, 0x22, 0x0, 0x0, 0x0, 0x0, 0x5e, 0xce, 0x8c, 0x8c, 0xe6, 0xa9, 0x9b, 0xb3, 0x0, 0x0, 0x0, 0xff, 0x22, 0x0, 0x0, 0x22, 0xe6, 0x0, 0x5e, 0xb3, 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, 0xff, 0x0, 0x0, 0x8c, 0xa7, 0x5e, 0x5e, 0xb3, 0xb3, 0x0, 0x0, 0xe6, 0x0, 0x0, 0x0, 0x43, 0x8c, 0x8c, 0x5e, 0x0, 0x0, 0x0, 0x22, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8c, 0x0, 0x0, 0x43, 0x22, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, 0x80, 0xb5, 0x9b, 0x5e, 0x22, 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, 0x13, 0x22, 0x5e, 0xb5, 0x80, 0x22, 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x13, 0x43, 0x9b, 0x80, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x43, 0xb3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5e, 0x8c, 0x43, 0x0, 0x13, 0x43, 0x22, 0x0, 0x0, 0x0, 0xb3, 0xb3, 0x5e, 0xc2, 0x43, 0xb5, 0x80, 0xb5, 0x5e, 0x0, 0x0, 0xff, 0x0, 0x0, 0x13, 0xf3, 0x22, 0x0, 0x13, 0xff, 0x0, 0x0, 0xff, 0x0, 0x0, 0x13, 0xf3, 0x22, 0x0, 0x22, 0xff, 0x0, 0x0, 0xb3, 0xb3, 0x5e, 0xc2, 0x43, 0xb5, 0x80, 0xce, 0x5e, 0x0, 0x0, 0x0, 0x5e, 0x8c, 0x43, 0x0, 0x13, 0x43, 0x22, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x22, 0x0, 0x0, 0x0, 0x43, 0x8c, 0x8c, 0x43, 0x0, 0x0, 0x0, 0xe6, 0x0, 0x0, 0x8c, 0xc2, 0x5e, 0x5e, 0xc2, 0x8c, 0x0, 0x0, 0xff, 0x0, 0x0, 0xff, 0x13, 0x0, 0x0, 0x13, 0xff, 0x0, 0x0, 0xce, 0x5e, 0x0, 0xf3, 0x13, 0x0, 0x0, 0x22, 0xff, 0x0, 0x0, 0x13, 0xb3, 0xa7, 0x9c, 0xce, 0x8c, 0x8c, 0xce, 0x5e, 0x0, 0x0, 0x0, 0x0, 0x43, 0x5e, 0x5e, 0x5e, 0x5e, 0x22, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5e, 0x0, 0x0, 0x0, 0x0, 0x5e, 0x0, 0x0, 0xce, 0x0, 0x0, 0x0, 0x0, 0xce, 0x0, 0x0, 0x13, 0x0, 0x0, 0x0, 0x0, 0x13, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x9b, 0x5e, 0x43, 0x0, 0x0, 0x0, 0x0, 0x43, 0x0, 0x0, 0x22, 0x5e, 0xa7, 0x0, 0x0, 0x0, 0x0, 0xda, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x22, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5e, 0x0, 0x0, 0x0, 0x0, 0x0, 0x13, 0xf3, 0x13, 0x0, 0x0, 0x0, 0x0, 0xce, 0x43, 0xce, 0x0, 0x0, 0x0, 0x22, 0xe6, 0x0, 0xf3, 0x13, 0x0, 0x0, 0xe6, 0x22, 0x0, 0x43, 0xce, 0x0, 0x0, 0x8c, 0x0, 0x0, 0x0, 0x8c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xb3, 0x0, 0xb3, 0x0, 0x0, 0xff, 0x0, 0xff, 0x0, 0x0, 0xff, 0x0, 0xff, 0x0, 0x0, 0xff, 0x0, 0xff, 0x0, 0x0, 0xff, 0x0, 0xff, 0x0, 0x0, 0xb3, 0x0, 0xb3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8c, 0x0, 0x0, 0x0, 0x8c, 0x0, 0x0, 0xe6, 0x22, 0x0, 0x43, 0xce, 0x0, 0x0, 0x22, 0xe6, 0x0, 0xf3, 0x13, 0x0, 0x0, 0x0, 0xce, 0x43, 0xce, 0x0, 0x0, 0x0, 0x0, 0x13, 0xf3, 0x13, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x43, 0x0, 0x0, 0x43, 0x0, 0x0, 0x22, 0x13, 0x0, 0x0, 0x0, 0xf3, 0x0, 0x0, 0xda, 0x0, 0x0, 0x9b, 0x9c, 0x43, 0x0, 0x0, 0xff, 0x0, 0x0, 0x22, 0x0, 0x0, 0x0, 0x13, 0xc2, 0x43, 0x43, 0xf3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x13, 0x80, 0xa7, 0x43, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x13, 0x22, 0x22, 0x13, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x13, 0x80, 0x9c, 0x9b, 0x9b, 0x9c, 0x5e, 0x0, 0x0, 0x0, 0x0, 0x13, 0xc2, 0x43, 0x13, 0x0, 0x0, 0x13, 0x5e, 0xb3, 0x0, 0x0, 0x0, 0xce, 0x43, 0x22, 0x80, 0x9b, 0x80, 0x5e, 0x0, 0x8c, 0x8c, 0x0, 0x0, 0xff, 0x0, 0xe6, 0x43, 0x22, 0x43, 0x8c, 0x8c, 0x0, 0xff, 0x0, 0x0, 0xff, 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0x0, 0x0, 0xff, 0x0, 0x72, 0xb3, 0x5e, 0x43, 0x43, 0xf3, 0x0, 0xff, 0x0, 0x0, 0xff, 0x0, 0xce, 0x8c, 0x8c, 0x80, 0xa7, 0xb5, 0x0, 0xff, 0x0, 0x0, 0x5e, 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, 0x13, 0xb3, 0x5e, 0x0, 0x0, 0x0, 0x0, 0x5e, 0x9b, 0x5e, 0x5e, 0x5e, 0x9b, 0x5e, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x22, 0x5e, 0x8c, 0x5e, 0x22, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xb3, 0x43, 0x13, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5e, 0xc2, 0xce, 0x8c, 0x43, 0x13, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x13, 0xff, 0x8c, 0xc2, 0xc2, 0x8c, 0x22, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0x13, 0x43, 0x8c, 0xb6, 0xb3, 0x0, 0x0, 0x0, 0x0, 0xff, 0x13, 0x43, 0x5e, 0xa7, 0xb5, 0x8c, 0x0, 0x0, 0x0, 0x43, 0xff, 0xc2, 0xc2, 0x8c, 0x43, 0x13, 0x0, 0x0, 0x0, 0xb3, 0xc2, 0x8c, 0x43, 0x13, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5e, 0x13, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x0, 0x0, 0xce, 0xb5, 0xb5, 0xb5, 0xce, 0xb5, 0xb5, 0xb5, 0xce, 0x0, 0x0, 0xff, 0x22, 0x22, 0x22, 0xff, 0x22, 0x22, 0x22, 0xff, 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, 0xff, 0x22, 0x0, 0x22, 0xe6, 0x5e, 0x13, 0x43, 0xf3, 0x0, 0x0, 0x5e, 0xce, 0x80, 0xce, 0x22, 0x8c, 0x9c, 0xc2, 0x43, 0x0, 0x0, 0x0, 0x22, 0x43, 0x22, 0x0, 0x0, 0x13, 0x13, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x43, 0x5e, 0x8c, 0x5e, 0x22, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8c, 0xc2, 0x5e, 0x5e, 0x8c, 0xb5, 0x8c, 0x0, 0x0, 0x0, 0x8c, 0xb3, 0x13, 0x0, 0x0, 0x0, 0x13, 0xce, 0x43, 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x13, 0xf3, 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, 0xce, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xce, 0x0, 0x0, 0x13, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x13, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x0, 0x0, 0xe6, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xe6, 0x0, 0x0, 0xff, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0xff, 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, 0xff, 0x13, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, 0x5e, 0xce, 0x13, 0x0, 0x0, 0x0, 0x0, 0xb3, 0x8c, 0x0, 0x0, 0x0, 0x8c, 0xb5, 0x8c, 0x5e, 0x5e, 0xa7, 0xb3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x22, 0x5e, 0x5e, 0x5e, 0x43, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x0, 0x0, 0xce, 0x9c, 0x9c, 0x9c, 0xce, 0x9c, 0x9c, 0x9c, 0xce, 0x0, 0x0, 0xff, 0x13, 0x13, 0x13, 0xff, 0x13, 0x13, 0x13, 0xff, 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, 0xe6, 0x0, 0x0, 0x0, 0xf3, 0x0, 0x0, 0x5e, 0x0, 0x0, 0x0, 0x22, 0x0, 0x0, 0x0, 0x43, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x0, 0x0, 0xb5, 0xb5, 0xb5, 0xb5, 0xce, 0xb5, 0xb5, 0xb5, 0xce, 0x0, 0x0, 0x22, 0x22, 0x22, 0x22, 0xff, 0x22, 0x22, 0x22, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe6, 0x0, 0x0, 0x0, 0xf3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x22, 0x0, 0x0, 0x0, 0x43, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x22, 0x5e, 0x5e, 0x5e, 0x22, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8c, 0xb5, 0x8c, 0x5e, 0x8c, 0xb5, 0x5e, 0x0, 0x0, 0x0, 0x8c, 0xb3, 0x13, 0x0, 0x0, 0x0, 0x13, 0xce, 0x43, 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x13, 0xf3, 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, 0x8c, 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, 0x8c, 0xa7, 0xa7, 0xa7, 0xf3, 0x0, 0x0, 0x0, 0xe6, 0x0, 0x0, 0x0, 0x43, 0x43, 0x43, 0x43, 0x0, 0x0, 0x0, 0x22, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x0, 0x0, 0xb5, 0xb5, 0xb5, 0xb5, 0xe6, 0xb5, 0xb5, 0xb5, 0xb5, 0x0, 0x0, 0x13, 0x13, 0x13, 0x13, 0xff, 0x13, 0x13, 0x13, 0x13, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x13, 0x13, 0x13, 0x13, 0xff, 0x13, 0x13, 0x13, 0x13, 0x0, 0x0, 0xb5, 0xb5, 0xb5, 0xb5, 0xe6, 0xb5, 0xb5, 0xb5, 0xb5, 0x0, 0x0, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x0, 0x0, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x0, 0x0, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x13, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xce, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf3, 0x43, 0x13, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x43, 0xc2, 0xb5, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x0, 0x0, 0x0, 0x13, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x0, 0x0, 0xb5, 0xb5, 0xb5, 0xb5, 0xce, 0xb5, 0xb5, 0xb5, 0xb5, 0x0, 0x0, 0x22, 0x22, 0x22, 0x80, 0xe6, 0xa9, 0x22, 0x22, 0x22, 0x0, 0x0, 0x0, 0x0, 0x8c, 0xb3, 0x22, 0x8c, 0xb3, 0x13, 0x0, 0x0, 0x0, 0x13, 0xb3, 0x8c, 0x0, 0x0, 0x0, 0x5e, 0xc2, 0x22, 0x0, 0x0, 0xce, 0x5e, 0x0, 0x0, 0x0, 0x0, 0x0, 0x43, 0xda, 0x0, 0x0, 0x5e, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x43, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x0, 0x0, 0xce, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0x0, 0x0, 0xff, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5e, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x0, 0x0, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xc2, 0xe6, 0xda, 0x0, 0x0, 0x13, 0x13, 0x13, 0x13, 0x35, 0x72, 0xc2, 0x8c, 0x43, 0x0, 0x0, 0x0, 0x13, 0x43, 0x80, 0xb5, 0x5e, 0x22, 0x0, 0x0, 0x0, 0x0, 0x5e, 0xc2, 0xa7, 0x43, 0x13, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5e, 0xb5, 0x80, 0x43, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x13, 0x43, 0xa7, 0x9b, 0x5e, 0x13, 0x0, 0x0, 0x0, 0x0, 0x13, 0x13, 0x13, 0x13, 0x35, 0x9b, 0xa9, 0x80, 0x22, 0x0, 0x0, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xc2, 0xce, 0xce, 0x0, 0x0, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x0, 0x0, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xce, 0x0, 0x0, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x80, 0xda, 0x5e, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x22, 0xb3, 0xb3, 0x22, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5e, 0xce, 0x5e, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x22, 0xb3, 0xb3, 0x22, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5e, 0xda, 0x72, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x0, 0x0, 0xce, 0xb5, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x0, 0x0, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x22, 0x5e, 0x5e, 0x5e, 0x22, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8c, 0xb5, 0x8c, 0x5e, 0x8c, 0xb5, 0x8c, 0x0, 0x0, 0x0, 0x8c, 0xb3, 0x13, 0x0, 0x0, 0x0, 0x13, 0xce, 0x5e, 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x13, 0xff, 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, 0xff, 0x13, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, 0x5e, 0xce, 0x13, 0x0, 0x0, 0x0, 0x13, 0xb3, 0x8c, 0x0, 0x0, 0x0, 0x8c, 0xb5, 0x8c, 0x5e, 0x8c, 0xb5, 0x8c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x22, 0x5e, 0x5e, 0x5e, 0x22, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x0, 0x0, 0xb5, 0xb5, 0xb5, 0xb5, 0xce, 0xb5, 0xb5, 0xb5, 0xce, 0x0, 0x0, 0x22, 0x22, 0x22, 0x22, 0xff, 0x22, 0x22, 0x22, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf3, 0x22, 0x0, 0x13, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x43, 0xce, 0x80, 0xc2, 0x5e, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x22, 0x43, 0x43, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x22, 0x5e, 0x5e, 0x5e, 0x22, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8c, 0xb5, 0x8c, 0x5e, 0x8c, 0xb5, 0x8c, 0x0, 0x0, 0x0, 0x0, 0x8c, 0xb3, 0x13, 0x0, 0x0, 0x0, 0x13, 0xce, 0x5e, 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x13, 0xff, 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, 0x43, 0xce, 0xb3, 0x13, 0x0, 0x0, 0x0, 0x13, 0xb3, 0x8c, 0x0, 0x0, 0xf3, 0x13, 0x8c, 0xb5, 0x8c, 0x5e, 0x8c, 0xb5, 0x8c, 0x0, 0x0, 0x0, 0xb3, 0x0, 0x0, 0x22, 0x5e, 0x5e, 0x5e, 0x22, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x0, 0x0, 0x9c, 0x9c, 0x9c, 0x9c, 0xce, 0x9c, 0x9c, 0x9c, 0xce, 0x0, 0x0, 0x13, 0x13, 0x13, 0x13, 0xff, 0x13, 0x13, 0x13, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x43, 0xff, 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, 0x22, 0x8c, 0xda, 0xb3, 0x5e, 0x13, 0x43, 0xf3, 0x0, 0x0, 0x8c, 0xb5, 0x5e, 0x22, 0x0, 0xb3, 0xb5, 0xc2, 0x43, 0x0, 0x0, 0x8c, 0x13, 0x0, 0x0, 0x0, 0x0, 0x22, 0x13, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x22, 0x44, 0x0, 0x0, 0x0, 0x13, 0x43, 0x43, 0x0, 0x0, 0x0, 0xe6, 0x22, 0x0, 0x0, 0x13, 0xc2, 0x80, 0xc2, 0x5e, 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, 0xce, 0x43, 0x0, 0x13, 0xff, 0x0, 0x0, 0xff, 0x0, 0x0, 0x43, 0xce, 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, 0x8c, 0xa7, 0x8c, 0xda, 0x13, 0x0, 0x0, 0x0, 0xe6, 0x0, 0x0, 0x0, 0x43, 0x5e, 0x22, 0x0, 0x0, 0x0, 0x0, 0x22, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xb3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, 0x5e, 0x5e, 0x5e, 0x5e, 0x5e, 0x5e, 0x5e, 0x5e, 0xff, 0x0, 0x0, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x22, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x0, 0x0, 0x13, 0xb3, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0x0, 0x0, 0xce, 0x8c, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xce, 0x8c, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x0, 0x0, 0x13, 0x8c, 0x9c, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0x0, 0x0, 0x0, 0x0, 0x13, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x22, 0x5e, 0xa7, 0x0, 0x0, 0x0, 0x0, 0x0, 0x22, 0x5e, 0xa7, 0xb5, 0x8c, 0x43, 0x0, 0x0, 0x22, 0x5e, 0xa7, 0xb5, 0x8c, 0x43, 0x13, 0x0, 0x0, 0x0, 0x0, 0xda, 0xc2, 0x56, 0x13, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x43, 0x80, 0x9c, 0x80, 0x43, 0x13, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x13, 0x43, 0xa7, 0xb5, 0x8c, 0x43, 0x13, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x22, 0x5e, 0xa7, 0xb5, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x22, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x13, 0x22, 0x5e, 0xa7, 0x0, 0x0, 0x0, 0x0, 0x22, 0x43, 0x8c, 0xb5, 0xb5, 0x8c, 0x43, 0x0, 0x0, 0x8c, 0xa7, 0xb5, 0x80, 0x5e, 0x22, 0x13, 0x0, 0x0, 0x0, 0x0, 0xb3, 0xce, 0x8e, 0x43, 0x22, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x22, 0x43, 0x80, 0xb5, 0x9b, 0x5e, 0x43, 0x13, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x13, 0x44, 0x9c, 0xce, 0xb5, 0x0, 0x0, 0x0, 0x13, 0x43, 0x5e, 0xa7, 0xb5, 0x80, 0x5e, 0x22, 0x0, 0x0, 0xb3, 0xb5, 0xa7, 0x5e, 0x43, 0x13, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8c, 0xa7, 0x9b, 0x8c, 0x43, 0x22, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x22, 0x5e, 0x80, 0xb5, 0x9b, 0x8c, 0x43, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x13, 0x22, 0x5e, 0xa7, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xb3, 0x13, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5e, 0x0, 0x0, 0x8c, 0xb5, 0x43, 0x0, 0x0, 0x0, 0x43, 0xa7, 0xb3, 0x0, 0x0, 0x0, 0x22, 0xa7, 0xa7, 0x22, 0x8c, 0xc2, 0x43, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x9c, 0xce, 0xb6, 0x13, 0x0, 0x0, 0x0, 0x0, 0x0, 0x43, 0xa7, 0xb3, 0x22, 0x8c, 0xa7, 0x43, 0x0, 0x0, 0x0, 0xb3, 0xc2, 0x43, 0x0, 0x0, 0x0, 0x43, 0xa7, 0xb3, 0x0, 0x0, 0x8c, 0x13, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5e, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x43, 0xb3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x43, 0xa7, 0xc2, 0x5e, 0x0, 0x0, 0x43, 0x43, 0x43, 0x43, 0xa7, 0xa7, 0x43, 0x13, 0x0, 0x0, 0x0, 0xa7, 0xa7, 0xa7, 0xa7, 0xdb, 0x43, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x43, 0xa7, 0xa7, 0x43, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x43, 0xa7, 0xa7, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x43, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8c, 0x13, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x43, 0x0, 0x0, 0xff, 0x9c, 0x5e, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf3, 0x0, 0x0, 0xff, 0x13, 0x8c, 0xa7, 0x22, 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, 0xff, 0x0, 0x0, 0x43, 0xb5, 0x5e, 0x0, 0x0, 0xff, 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, 0x13, 0x8c, 0x9b, 0x22, 0xff, 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x22, 0x9b, 0xff, 0x0, 0x0, 0x5e, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5e, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x0, 0x0, 0xce, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0xce, 0x0, 0x0, 0xf3, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0xf3, 0x0, 0x0, 0x43, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x43, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x22, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x13, 0x43, 0x80, 0x9b, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x22, 0x5e, 0xb5, 0x80, 0x43, 0x0, 0x0, 0x0, 0x0, 0x13, 0x43, 0x80, 0xb5, 0x5e, 0x22, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5e, 0xb5, 0x80, 0x43, 0x13, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5e, 0x22, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xb3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xb3, 0x0, 0x0, 0xff, 0x5e, 0x5e, 0x5e, 0x5e, 0x5e, 0x5e, 0x5e, 0x5e, 0x5e, 0xff, 0x0, 0x0, 0x5e, 0x5e, 0x5e, 0x5e, 0x5e, 0x5e, 0x5e, 0x5e, 0x5e, 0x5e, 0x5e, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5e, 0x13, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5e, 0x9c, 0x5e, 0x13, 0x0, 0x0, 0x0, 0x0, 0x13, 0x5e, 0x90, 0x8c, 0x0, 0x0, 0x0, 0x13, 0x5e, 0x9c, 0x5e, 0x0, 0x0, 0x5e, 0x9c, 0x5e, 0x13, 0x0, 0x0, 0x0, 0x5e, 0x13, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x22, 0x0, 0x0, 0xe6, 0x0, 0x0, 0xff, 0x0, 0x0, 0xff, 0x0, 0x0, 0xff, 0x0, 0x0, 0xe6, 0x0, 0x0, 0x22, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5e, 0x0, 0x0, 0x5e, 0xb3, 0x0, 0x0, 0x8c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x22, 0x8c, 0x5e, 0x0, 0x0, 0x13, 0x0, 0x0, 0xe6, 0x5e, 0xb3, 0x5e, 0x0, 0xce, 0x0, 0x0, 0xff, 0x0, 0x0, 0xff, 0x0, 0xff, 0x0, 0x0, 0xe6, 0x22, 0x0, 0xff, 0x0, 0xff, 0x0, 0x0, 0x9c, 0xda, 0x80, 0xf3, 0xa7, 0xb3, 0x0, 0x0, 0x43, 0x43, 0x43, 0x43, 0x43, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x0, 0x0, 0xc2, 0xe6, 0xb5, 0xb5, 0xe6, 0xb5, 0xb5, 0xb5, 0xb5, 0x0, 0x0, 0xda, 0x5e, 0x13, 0x13, 0x5e, 0xc1, 0x13, 0x13, 0x13, 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x22, 0x0, 0x0, 0x13, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5e, 0xce, 0x8c, 0x5e, 0xc2, 0x8c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x22, 0x5e, 0x5e, 0x43, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x43, 0x8c, 0x8c, 0x43, 0x0, 0x0, 0x0, 0x5e, 0xc2, 0x5e, 0x5e, 0xda, 0x43, 0x0, 0x0, 0xff, 0x13, 0x0, 0x0, 0x22, 0xf3, 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, 0xe6, 0x0, 0x0, 0x0, 0x0, 0xe6, 0x0, 0x0, 0x22, 0x0, 0x0, 0x0, 0x0, 0x22, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x43, 0x5e, 0x5e, 0x22, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8c, 0xc2, 0x5e, 0x5e, 0xce, 0x5e, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x13, 0x0, 0x0, 0x22, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0xb3, 0x5e, 0x0, 0x0, 0x43, 0xce, 0x0, 0x0, 0x0, 0x0, 0x0, 0x9b, 0xe6, 0x9b, 0x9b, 0xda, 0xa9, 0x9b, 0x9b, 0x9b, 0x0, 0x0, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x43, 0x8c, 0x8c, 0x43, 0x0, 0x0, 0x0, 0x8c, 0xc2, 0x5e, 0xff, 0xa7, 0x5e, 0x0, 0x0, 0xff, 0x13, 0x0, 0xff, 0x0, 0xff, 0x0, 0x0, 0xff, 0x0, 0x0, 0xff, 0x0, 0xff, 0x0, 0x0, 0xe6, 0x0, 0x0, 0xff, 0x8c, 0xb3, 0x0, 0x0, 0x22, 0x0, 0x0, 0x8c, 0x5e, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x13, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xce, 0x0, 0x0, 0x0, 0x0, 0x0, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0xff, 0x9b, 0xa7, 0x43, 0x0, 0x0, 0x22, 0x22, 0x22, 0x22, 0x22, 0xff, 0x22, 0x43, 0xf3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8c, 0x0, 0x0, 0xce, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x13, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x22, 0x0, 0x0, 0x0, 0x43, 0x5e, 0x5e, 0x22, 0x0, 0x0, 0x0, 0xe6, 0x0, 0x0, 0x8c, 0xc2, 0x5e, 0x5e, 0xce, 0x5e, 0x0, 0x0, 0xff, 0x0, 0x0, 0xff, 0x13, 0x0, 0x0, 0x22, 0xff, 0x0, 0x0, 0xff, 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, 0xce, 0x8c, 0x13, 0xb3, 0x5e, 0x0, 0x0, 0x43, 0xce, 0x0, 0x0, 0x13, 0xb3, 0xb5, 0x9b, 0xe6, 0x9b, 0x9b, 0xda, 0xa9, 0x0, 0x0, 0x0, 0x0, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x0, 0x0, 0xb5, 0xb5, 0xb5, 0xb5, 0xe6, 0xb5, 0xb5, 0xb5, 0xb5, 0x0, 0x0, 0x13, 0x13, 0x13, 0x13, 0x8c, 0x9b, 0x13, 0x13, 0x13, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x22, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x9b, 0x9b, 0x9b, 0x9b, 0xce, 0x8c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x22, 0x22, 0x22, 0x22, 0x22, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x0, 0x0, 0x22, 0x0, 0x0, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x0, 0x0, 0xce, 0x0, 0x0, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x0, 0x0, 0x22, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5e, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe6, 0x5e, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x0, 0x0, 0x22, 0x0, 0x0, 0x22, 0xb3, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x0, 0x0, 0xce, 0x0, 0x0, 0x0, 0x0, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x0, 0x0, 0x22, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x0, 0x0, 0x9c, 0x9c, 0xa9, 0xce, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x0, 0x0, 0x13, 0x26, 0xce, 0xe6, 0x35, 0x13, 0x13, 0x13, 0x13, 0x0, 0x0, 0x22, 0xc2, 0x43, 0x22, 0xce, 0x22, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe6, 0x43, 0x0, 0x0, 0x22, 0xda, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5e, 0x0, 0x0, 0x0, 0x0, 0x43, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x0, 0x0, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x0, 0x0, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x0, 0x0, 0x9b, 0x9b, 0x9b, 0xb5, 0xda, 0xa9, 0x0, 0x0, 0x0, 0x0, 0x0, 0x13, 0x43, 0xce, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, 0x5e, 0x5e, 0x5e, 0x5e, 0x8c, 0xce, 0x0, 0x0, 0x8c, 0x8c, 0x8c, 0x8c, 0xe6, 0x56, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x22, 0xf3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x13, 0xff, 0x0, 0x0, 0x80, 0x80, 0x80, 0xa7, 0xc2, 0xb3, 0x0, 0x0, 0x43, 0x43, 0x43, 0x43, 0x43, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x0, 0x0, 0xb5, 0xb5, 0xb5, 0xb5, 0xe6, 0xb5, 0x0, 0x0, 0x13, 0x13, 0x13, 0x13, 0x5e, 0xc1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x22, 0xff, 0x0, 0x0, 0x9b, 0x9b, 0x9b, 0x9b, 0xce, 0x5e, 0x0, 0x0, 0x22, 0x22, 0x22, 0x22, 0x22, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x43, 0x5e, 0x5e, 0x43, 0x0, 0x0, 0x0, 0x5e, 0xda, 0x5e, 0x5e, 0xda, 0x43, 0x0, 0x0, 0xff, 0x22, 0x0, 0x0, 0x22, 0xf3, 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, 0xf3, 0x13, 0x0, 0x0, 0x13, 0xff, 0x0, 0x0, 0x43, 0xc2, 0x5e, 0x5e, 0xc2, 0x5e, 0x0, 0x0, 0x0, 0x43, 0x5e, 0x5e, 0x43, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x0, 0x0, 0xb5, 0xb5, 0xb5, 0xb5, 0xe6, 0xb5, 0xb5, 0xe6, 0xb5, 0x0, 0x0, 0x13, 0x13, 0x13, 0xc1, 0x5e, 0x13, 0x13, 0x5e, 0xc1, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x22, 0x0, 0x0, 0x13, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5e, 0xce, 0x8c, 0x5e, 0xc2, 0x8c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x22, 0x5e, 0x5e, 0x43, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x43, 0x5e, 0x5e, 0x43, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8c, 0xc2, 0x5e, 0x5e, 0xda, 0x5e, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x13, 0x0, 0x0, 0x22, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0xb3, 0x5e, 0x0, 0x0, 0x43, 0xce, 0x0, 0x0, 0x9b, 0x9b, 0x9b, 0x9b, 0xe6, 0x9b, 0x9b, 0xda, 0xa9, 0x0, 0x0, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x0, 0x0, 0x9b, 0x9b, 0x9b, 0xb5, 0xda, 0xa9, 0x0, 0x0, 0x0, 0x0, 0x0, 0x13, 0x43, 0xce, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x22, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x43, 0x26, 0x0, 0x22, 0x5e, 0x13, 0x0, 0x0, 0xf3, 0x13, 0x0, 0xe6, 0x5e, 0xce, 0x0, 0x0, 0xff, 0x0, 0x8c, 0x8c, 0x0, 0xff, 0x0, 0x0, 0xce, 0x5e, 0xf3, 0x0, 0x0, 0xf3, 0x0, 0x0, 0x13, 0x5e, 0x43, 0x0, 0x0, 0x43, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x13, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x13, 0x13, 0x13, 0xce, 0x13, 0x13, 0x0, 0x0, 0x8c, 0x9b, 0xb5, 0xb5, 0xb5, 0xff, 0xb5, 0xb5, 0x0, 0x0, 0xff, 0x22, 0x22, 0x22, 0x22, 0xff, 0x22, 0x22, 0x0, 0x0, 0x8c, 0x0, 0x0, 0x0, 0x0, 0x8c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x22, 0x22, 0x22, 0x22, 0x22, 0x0, 0x0, 0x5e, 0xce, 0x9b, 0x9b, 0x9b, 0x9b, 0x0, 0x0, 0xff, 0x22, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc1, 0x5e, 0x13, 0x13, 0x13, 0x13, 0x0, 0x0, 0xb5, 0xe6, 0xb5, 0xb5, 0xb5, 0xb5, 0x0, 0x0, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x22, 0x5e, 0xa7, 0x0, 0x0, 0x13, 0x43, 0x80, 0xb5, 0x8c, 0x43, 0x0, 0x0, 0xce, 0x9c, 0x43, 0x13, 0x0, 0x0, 0x0, 0x0, 0x5e, 0x9b, 0xa7, 0x43, 0x13, 0x0, 0x0, 0x0, 0x0, 0x0, 0x43, 0x80, 0x9c, 0x8c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x13, 0x5e, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x22, 0x5e, 0xa7, 0x0, 0x0, 0x43, 0x8c, 0x9b, 0x9b, 0x5e, 0x43, 0x0, 0x0, 0xc2, 0xa9, 0x65, 0x13, 0x0, 0x0, 0x0, 0x0, 0x13, 0x43, 0x80, 0x9c, 0x80, 0x43, 0x0, 0x0, 0x0, 0x13, 0x22, 0x72, 0xce, 0xc2, 0x0, 0x0, 0x8c, 0xa9, 0x9b, 0x5e, 0x22, 0x13, 0x0, 0x0, 0x8c, 0xa9, 0x80, 0x43, 0x22, 0x0, 0x0, 0x0, 0x0, 0x13, 0x43, 0x80, 0xb5, 0xa7, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x13, 0x43, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xb3, 0x13, 0x0, 0x0, 0x13, 0xb3, 0x0, 0x0, 0x5e, 0xb5, 0x22, 0x43, 0xb5, 0x8c, 0x0, 0x0, 0x0, 0x35, 0xe6, 0xf3, 0x22, 0x0, 0x0, 0x0, 0x43, 0xb5, 0x5e, 0x5e, 0x9b, 0x22, 0x0, 0x0, 0xc2, 0x22, 0x0, 0x0, 0x22, 0xce, 0x0, 0x0, 0x13, 0x0, 0x0, 0x0, 0x0, 0x22, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xb3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x22, 0x5e, 0xa7, 0x0, 0x0, 0xe6, 0x5e, 0x13, 0x13, 0x43, 0x80, 0xb5, 0x8c, 0x43, 0x0, 0x0, 0x22, 0xb3, 0xb5, 0xce, 0x8e, 0x43, 0x13, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x22, 0x5e, 0x9c, 0x80, 0x43, 0x13, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x13, 0x43, 0xa7, 0xb5, 0x8c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x22, 0x5e, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8c, 0x0, 0x0, 0x0, 0x0, 0x5e, 0x0, 0x0, 0xff, 0x9b, 0x22, 0x0, 0x0, 0xff, 0x0, 0x0, 0xff, 0x22, 0xce, 0x22, 0x0, 0xff, 0x0, 0x0, 0xff, 0x0, 0x22, 0xb5, 0x43, 0xff, 0x0, 0x0, 0xff, 0x0, 0x0, 0x13, 0xa7, 0xff, 0x0, 0x0, 0x8c, 0x0, 0x0, 0x0, 0x0, 0x8c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x43, 0x8c, 0x80, 0x80, 0xa7, 0x5e, 0xa7, 0x80, 0x80, 0x8c, 0x43, 0x0, 0x0, 0xe7, 0x5e, 0x43, 0x43, 0x43, 0x0, 0x43, 0x43, 0x43, 0x5e, 0xe7, 0x0, 0x0, 0x43, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x43, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x0, 0x0, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0x0, 0x0, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8c, 0x0, 0x0, 0xb3, 0x9b, 0x9b, 0x9b, 0x80, 0x13, 0x80, 0x9b, 0x9b, 0x9b, 0xb3, 0x0, 0x0, 0x0, 0x22, 0x22, 0x22, 0x43, 0xb5, 0x43, 0x22, 0x22, 0x22, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x22, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x9b, 0x43, 0x0, 0x0, 0x22, 0xf3, 0x0, 0x0, 0x22, 0xe6, 0x0, 0x0, 0xe6, 0x22, 0x0, 0x0, 0xf3, 0x22, 0x0, 0x0, 0x43, 0x9b, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x13, 0x0, 0x0, 0xa7, 0xa7, 0xa7, 0x9b, 0x9b, 0x9b, 0x0, 0xce, 0x0, 0x0, 0x43, 0x43, 0x43, 0x22, 0x22, 0x22, 0x0, 0x5e, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x22, 0x22, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x13, 0xb3, 0xb5, 0xb5, 0xb3, 0x0, 0x0, 0x0, 0x0, 0x0, 0xce, 0x5e, 0x13, 0x13, 0x8c, 0xb3, 0x0, 0x0, 0x0, 0x80, 0xff, 0x80, 0x80, 0x80, 0x80, 0xff, 0x80, 0x0, 0x0, 0x43, 0xff, 0x43, 0x43, 0x43, 0x43, 0xff, 0x43, 0x0, 0x0, 0x0, 0x5e, 0x0, 0x0, 0x0, 0x0, 0x8c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8c, 0x0, 0x0, 0x0, 0x5e, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xa7, 0x43, 0x43, 0xff, 0x43, 0x43, 0x22, 0x0, 0x0, 0x0, 0xff, 0x43, 0xa7, 0xa7, 0xff, 0xa7, 0xa7, 0xce, 0x5e, 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, 0x22, 0xff, 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, 0x8c, 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, 0xce, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5e, 0x0, 0x0, 0x13, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x00}; diff --git a/source/main.cpp b/source/main.cpp new file mode 100644 index 0000000..04b77f0 --- /dev/null +++ b/source/main.cpp @@ -0,0 +1,60 @@ +// Copyright 2014 Citra Emulator Project +// Licensed under GPLv2 +// Refer to the license.txt file included. + +#include +#include +#include <3ds.h> + +#include "output.h" +#include "utils/shared_font/shared_font.h" + +static unsigned int util_counter = 0; +static void (*utils[]) (void) = { + SharedFont::Dump, +}; + +int main() +{ + srvInit(); + aptInit(); + hidInit(NULL); + fsInit(); + gfxInit(); + gfxSet3D(false); + + clearScreens(); + print(GFX_TOP, "Press A to begin...\n"); + + while (aptMainLoop()) { + drawFrames(); + + hidScanInput(); + if (hidKeysDown() & KEY_START) { + break; + } else if (hidKeysDown() & KEY_A) { + clearScreen(GFX_TOP); + + if (util_counter < (sizeof(utils) / sizeof(utils[0]))) { + utils[util_counter](); + util_counter++; + } else { + break; + } + + print(GFX_TOP, "\n"); + print(GFX_TOP, "Press A to continue...\n"); + } + + gspWaitForEvent(GSPEVENT_VBlank0, false); + } + + clearScreens(); + + gfxExit(); + fsExit(); + hidExit(); + aptExit(); + srvExit(); + return 0; +} diff --git a/source/output.cpp b/source/output.cpp new file mode 100644 index 0000000..7c77ce5 --- /dev/null +++ b/source/output.cpp @@ -0,0 +1,98 @@ +#include "output.h" + +#include +#include +#include +#include +#include +#include + +#include <3ds.h> + +#include "text.h" + +static std::string bufferTop; +static std::string bufferBottom; + +static int countLines(const std::string& str) +{ + if (str.empty()) + return 0; + + return 1 + std::count_if(str.begin(), str.end(), [](char c) { return c == '\n'; }); +} + +static void deleteFirstLine(std::string* str) +{ + if (str->empty()) + return; + + size_t linebreak = str->find_first_of('\n'); + + if (linebreak == std::string::npos || linebreak + 1 > str->length()) { + *str = {}; + return; + } + + *str = str->substr(linebreak + 1); +} + +static void drawFrame(gfxScreen_t screen, char b, char g, char r) +{ + int screenHeight = 240; + int screenWidth = (screen == GFX_TOP) ? 400 : 320; + std::string& textBuffer = (screen == GFX_TOP) ? bufferTop : bufferBottom; + + u8* bufAdr = gfxGetFramebuffer(screen, GFX_LEFT, nullptr, nullptr); + for (int i = 0; i < screenWidth * screenHeight * 3; i += 3) { + bufAdr[i] = b; + bufAdr[i+1] = g; + bufAdr[i+2] = r; + } + + int lines = countLines(textBuffer); + while (lines > (screenHeight / fontDefault.height - 3)) { + deleteFirstLine(&textBuffer); + lines--; + } + gfxDrawText(screen, GFX_LEFT, nullptr, textBuffer, screenHeight - fontDefault.height * 3, 10); +} + +void drawFrames() +{ + drawFrame(GFX_TOP, 0x88, 0x66, 0x00); + drawFrame(GFX_BOTTOM, 0x00, 0x00, 0x00); + gfxFlushBuffers(); + gfxSwapBuffers(); +} + +void print(gfxScreen_t screen, const char* format, ...) +{ + std::string& textBuffer = (screen == GFX_TOP) ? bufferTop : bufferBottom; + + va_list arguments; + char *vaStr; + + va_start(arguments, format); + vasprintf(&vaStr, format, arguments); + va_end(arguments); + + textBuffer += std::string(vaStr); + svcOutputDebugString(vaStr, strlen(vaStr)); + free(vaStr); + + drawFrames(); +} + +void clearScreen(gfxScreen_t screen) +{ + std::string& textBuffer = (screen == GFX_TOP) ? bufferTop : bufferBottom; + textBuffer.clear(); + drawFrames(); +} + +void clearScreens() +{ + clearScreen(GFX_TOP); + clearScreen(GFX_BOTTOM); +} diff --git a/source/output.h b/source/output.h new file mode 100644 index 0000000..6ce9cf8 --- /dev/null +++ b/source/output.h @@ -0,0 +1,8 @@ +#pragma once + +#include <3ds.h> + +void drawFrames(); +void print(gfxScreen_t screen, const char* format, ...); +void clearScreen(gfxScreen_t screen); +void clearScreens(); diff --git a/source/text.cpp b/source/text.cpp new file mode 100644 index 0000000..1dcf8aa --- /dev/null +++ b/source/text.cpp @@ -0,0 +1,80 @@ +#include +#include +#include +#include <3ds.h> +#include "text.h" + +#include "font.h" + +//this code is not meant to be readable +int drawCharacter(u8* fb, font_s* font, char c, s16 x, s16 y, u16 w, u16 h) +{ + Glyph* cd = &font->desc[(int)c]; + + if (!cd->data) + return 0; + + x += cd->xo; y += font->height - cd->yo - cd->h; + + if (x < 0 || x + cd->w >= w || y < -cd->h || y >= h + cd->h) + return 0; + + u8* charData = cd->data; + s16 cy = y, ch = cd->h, cyo = 0; + + if (y < 0) { + cy = 0; + cyo = -y; + ch = cd->h-cyo; + } else if (y + ch > h) { + ch = h - y; + } + + fb += (x * h + cy) * 3; + const u8 r = font->color[0]; + const u8 g = font->color[1]; + const u8 b = font->color[2]; + + for (int i = 0; i < cd->w; i++) { + charData += cyo; + for (int j = 0; j < ch; j++) { + u8 v = *(charData++); + if (v) { + fb[0] = (fb[0] * (0xFF - v) + (b * v)) >> 8; + fb[1] = (fb[1] * (0xFF - v) + (g * v)) >> 8; + fb[2] = (fb[2] * (0xFF - v) + (r * v)) >> 8; + } + fb += 3; + } + charData += (cd->h - (cyo + ch)); + fb += (h - ch) * 3; + } + return cd->xa; +} + +void drawString(u8* fb, font_s* f, const std::string& str, s16 x, s16 y, u16 w, u16 h) +{ + if (!f || !fb) + return; + + int dx = 0, dy = 0; + for (const char& c : str) + { + dx += drawCharacter(fb, f, c, x + dx, y + dy, w, h); + if (c == '\n') { + dx = 0; + dy -= f->height; + } + } +} + +void gfxDrawText(gfxScreen_t screen, gfx3dSide_t side, font_s* font, const std::string& str, s16 x, s16 y) +{ + if (!font) + font = &fontDefault; + + u16 fbWidth, fbHeight; + u8* fbAdr = gfxGetFramebuffer(screen, side, &fbWidth, &fbHeight); + + drawString(fbAdr, font, str, y, x, fbHeight, fbWidth); +} diff --git a/source/text.h b/source/text.h new file mode 100644 index 0000000..719d5c3 --- /dev/null +++ b/source/text.h @@ -0,0 +1,9 @@ +#pragma once + +#include + +#include "font.h" + +int drawCharacter(u8* fb, font_s* f, char c, s16 x, s16 y, u16 w, u16 h); +void drawString(u8* fb, font_s* f, const std::string& str, s16 x, s16 y, u16 w, u16 h); +void gfxDrawText(gfxScreen_t screen, gfx3dSide_t side, font_s* f, const std::string& str, s16 x, s16 y); diff --git a/source/utils/shared_font/shared_font.cpp b/source/utils/shared_font/shared_font.cpp new file mode 100644 index 0000000..fa73fb8 --- /dev/null +++ b/source/utils/shared_font/shared_font.cpp @@ -0,0 +1,61 @@ +// Copyright 2014 Citra Emulator Project +// Licensed under GPLv2 +// Refer to the license.txt file included. + +#include <3ds.h> + +#include "output.h" +#include "utils/shared_font/shared_font.h" + +namespace SharedFont { + +static const u32 SHARED_FONT_ADDR = 0x18000000; +static const u32 SHARED_FONT_SIZE = 0x300000; + +void Dump() { + static const char* path = "/shared_font.bin"; + + print(GFX_TOP, "Dumping shared system font (%s)... ", path); + + // Connect to APT service... + + Handle apt_handle; + srvGetServiceHandle(&apt_handle, "APT:U"); + u32* cmdbuf=getThreadCommandBuffer(); + + // Call APT::GetSharedFont function to load font into memory... + + cmdbuf[0] = 0x00440000; + svcSendSyncRequest(apt_handle); + Handle mem_handle = cmdbuf[4]; + + // Close APT handle... + + svcCloseHandle(apt_handle); + + // Map shared font memory... + + svcMapMemoryBlock(mem_handle, 0, MEMPERM_READ, MEMPERM_MAX); + + // Dump shared font to SDMC... + + Handle file_handle; + u32 bytes_written = 0; + static const FS_path fs_path = FS_makePath(PATH_CHAR, path); + FS_archive sdmc_archive = (FS_archive) { 0x00000009, { PATH_EMPTY, 1, (u8*) "" } }; + + FSUSER_OpenArchive(NULL, &sdmc_archive); + FSUSER_OpenFile(NULL, &file_handle, sdmc_archive, fs_path, FS_OPEN_CREATE | FS_OPEN_WRITE, FS_ATTRIBUTE_NONE); + Result res = FSFILE_Write(file_handle, &bytes_written, 0x0, (u32*)SHARED_FONT_ADDR, SHARED_FONT_SIZE, FS_WRITE_FLUSH); + FSFILE_Close(file_handle); + FSUSER_CloseArchive(NULL, &sdmc_archive); + + // Check result... + + if (res == 0 && bytes_written == SHARED_FONT_SIZE) + print(GFX_TOP, "Done!\n"); + else + print(GFX_TOP, "Failed!\n"); +} + +} // namespace diff --git a/source/utils/shared_font/shared_font.h b/source/utils/shared_font/shared_font.h new file mode 100644 index 0000000..a733d22 --- /dev/null +++ b/source/utils/shared_font/shared_font.h @@ -0,0 +1,11 @@ +// Copyright 2014 Citra Emulator Project +// Licensed under GPLv2 +// Refer to the license.txt file included. + +#pragma once + +namespace SharedFont { + +void Dump(); + +}