diff options
author | Revo <projectrevotpp@hotmail.com> | 2020-04-30 19:43:15 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-04-30 19:43:15 -0400 |
commit | 2ac877a24f241d3bc9d875a1338c40d7325929c6 (patch) | |
tree | ea91f20d1cd1ab5ae06880d1dd2e5a2c61f4db59 | |
parent | 67560155c2204ec8b4a01b57d73a641fc15254d3 (diff) | |
parent | 16739b91a8f633a56552b90a70f4d7325c3d8dff (diff) |
Merge pull request #46 from red031000/os_lib
sync os_lib with master
-rw-r--r-- | .gitignore | 8 | ||||
-rw-r--r-- | .travis.yml | 22 | ||||
-rw-r--r-- | INSTALL.md | 8 | ||||
-rw-r--r-- | Makefile | 11 | ||||
-rw-r--r-- | arm7/Makefile | 18 | ||||
-rw-r--r-- | arm7/arm7.lcf | 49 | ||||
-rw-r--r-- | arm7/arm7.lsf | 28 | ||||
-rw-r--r-- | arm7/arm7.sha1 | 2 | ||||
-rw-r--r-- | arm7/asm/crt0.s | 8 | ||||
-rw-r--r-- | arm7/asm/dtcm2.s | 24 | ||||
-rw-r--r-- | arm7/asm/dtcm_bss.s | 470 | ||||
-rw-r--r-- | arm7/asm/ext.s | 61 | ||||
-rw-r--r-- | arm7/asm/itcm.s | 16 | ||||
-rw-r--r-- | arm7/global.inc | 12 | ||||
-rw-r--r-- | arm7/undefined_syms.txt | 186 | ||||
-rw-r--r-- | arm9/Makefile | 17 | ||||
-rw-r--r-- | arm9/arm9.lcf | 59 | ||||
-rw-r--r-- | arm9/arm9.lsf | 492 | ||||
-rw-r--r-- | arm9/arm9.sha1 | 2 | ||||
-rw-r--r-- | arm9/asm/libcard.s (renamed from arm9/asm/CARD_arm9.s) | 0 | ||||
-rw-r--r-- | arm9/asm/libcp.s (renamed from arm9/asm/CP_arm9.s) | 0 | ||||
-rw-r--r-- | arm9/asm/libctrdg.s (renamed from arm9/asm/CTRDG_arm9.s) | 0 | ||||
-rw-r--r-- | arm9/asm/libdgt.s (renamed from arm9/asm/DGT_arm9.s) | 0 | ||||
-rw-r--r-- | arm9/asm/libfs.s (renamed from arm9/asm/FS_arm9.s) | 0 | ||||
-rw-r--r-- | arm9/asm/libmath.s (renamed from arm9/asm/MATH_arm9.s) | 0 | ||||
-rw-r--r-- | arm9/asm/libmi.s (renamed from arm9/asm/MI_arm9.s) | 0 | ||||
-rw-r--r-- | arm9/asm/libpm.s (renamed from arm9/asm/PM_arm9.s) | 0 | ||||
-rw-r--r-- | arm9/asm/libpxi.s (renamed from arm9/asm/PXI_arm9.s) | 0 | ||||
-rw-r--r-- | arm9/asm/librtc.s (renamed from arm9/asm/RTC_arm9.s) | 0 | ||||
-rw-r--r-- | arm9/asm/libsnd.s (renamed from arm9/asm/SND_arm9.s) | 0 | ||||
-rw-r--r-- | arm9/asm/libspi.s (renamed from arm9/asm/SPI_arm9.s) | 0 | ||||
-rw-r--r-- | arm9/asm/libstd.s (renamed from arm9/asm/STD_arm9.s) | 0 | ||||
-rw-r--r-- | arm9/asm/libwm.s (renamed from arm9/asm/WM_arm9.s) | 0 | ||||
-rw-r--r-- | arm9/asm/secure.s | 7 | ||||
-rw-r--r-- | arm9/asm/unk_02006864.s | 8 | ||||
-rw-r--r-- | arm9/asm/unk_02046030.s | 2 | ||||
-rw-r--r-- | arm9/asm/unk_0208AC14.s | 4 | ||||
-rw-r--r-- | arm9/global.inc | 211 | ||||
-rw-r--r-- | arm9/modules/01/src/module_01.c | 12 | ||||
-rw-r--r-- | arm9/modules/04/asm/arm_04.s | 58947 | ||||
-rw-r--r-- | arm9/modules/04/asm/thumb_04.s | 3128 | ||||
-rw-r--r-- | arm9/undefined_syms.txt | 4 | ||||
-rw-r--r-- | global.inc | 2 |
43 files changed, 63461 insertions, 357 deletions
@@ -4,6 +4,9 @@ # Compilers tools/mwccarm/** +# SDK +tools/bin/** + # Build folder build/** arm*/build/** @@ -26,3 +29,8 @@ cmake-build-debug/ # For asmdiff arm*/baserom.* *.dump + +*.lcf.template + +# Working files +arm9/modules/module_*.{s,sbin,cfg} diff --git a/.travis.yml b/.travis.yml index 867a5198..bf0c9a04 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,15 +1,27 @@ -dist: xenial - +dist: bionic +sudo: false language: c - +addons: + apt: + packages: + - gcc-multilib + - linux-libc-dev + - binutils-arm-none-eabi + - wine32 + - wine-stable +cache: + apt: true install: - - sudo apt update - - sudo apt install binutils-arm-none-eabi wine # These files are only accessible from Travis CI IP Addresses to prevent piracy. - wget http://private.martmists.com/mwccarm.zip - wget http://private.martmists.com/baserom.nds + - wget http://private.martmists.com/nitro.zip - unzip mwccarm.zip - mv mwccarm tools + - unzip nitro.zip + - mv NITRO\ SDK\ v3.0/tools/bin tools + - mv NITRO\ SDK\ v3.0/include/nitro/specfiles/ARM7-TS.lcf.template arm7 + - mv NITRO\ SDK\ v3.0/include/nitro/specfiles/ARM9-TS.lcf.template arm9 script: - export LM_LICENSE_FILE="$(pwd)/tools/mwccarm/license.dat" @@ -8,7 +8,11 @@ The build system requires the use of the Metrowerk C Compiler 2.0/base to compil In the future, a GCC option will be available so MWCC is not required to build, however it is required for a matching ROM. -### 3. Dependencies +### 3. Install Nitro SDK + +As with the compiler, the Nitro SDK is proprietary and cannot be distributed here. Opened the pinned Mega folder in the PRET discord and download "NITRO SDK v3.0.zip" and "NITRO SDK V3.0 Plus 2.zip" from the "SDK System Libraries" folder. Extract v3.0.zip into a separate folder, then extract v3.0 Plus 2.zip into the same folder, overwriting when prompted. Copy the contents of tools/bin from the Nitro SDK to tools/bin in your pokediamond clone. Finally, copy include/nitro/specfiles/ARM7-TS.lcf.template into the arm7 subdirectory, and include/nitro/specfiles/ARM9-TS.lcf.template into the arm9 subdirectory. + +### 4. Dependencies #### Linux @@ -46,7 +50,7 @@ You will still require the following packages: Install them using either the Cygwin package manager or using pacman on Msys2. -### 4. Build ROM +### 5. Build ROM Run `make` to build the ROM. @@ -54,8 +54,8 @@ S_FILES := $(foreach dir,$(ASM_DIRS),$(wildcard $(dir)/*.s)) O_FILES := $(foreach file,$(C_FILES),$(BUILD_DIR)/$(file:.c=.o)) \ $(foreach file,$(S_FILES),$(BUILD_DIR)/$(file:.s=.o)) \ -ARM9BIN := arm9/build/arm9.bin -ARM7BIN := arm7/build/arm7.bin +ARM9BIN := arm9/build/arm9.sbin +ARM7BIN := arm7/build/arm7.sbin ##################### Compiler Options ####################### @@ -94,7 +94,7 @@ JSONPROC = $(TOOLS_DIR)/jsonproc/jsonproc GFX = $(TOOLS_DIR)/nitrogfx/nitrogfx MWASMARM_PATCHER = $(TOOLS_DIR)/mwasmarm_patcher/mwasmarm_patcher$(EXE) -q -TOOLDIRS = $(filter-out $(TOOLS_DIR)/mwccarm,$(wildcard $(TOOLS_DIR)/*)) +TOOLDIRS = $(filter-out $(TOOLS_DIR)/mwccarm $(TOOLS_DIR)/bin,$(wildcard $(TOOLS_DIR)/*)) TOOLBASE = $(TOOLDIRS:$(TOOLS_DIR)/%=%) TOOLS = $(foreach tool,$(TOOLBASE),$(TOOLS_DIR)/$(tool)/$(tool)$(EXE)) @@ -161,7 +161,10 @@ $(BUILD_DIR)/$(LD_SCRIPT): $(LD_SCRIPT) undefined_syms.txt $(CPP) $(VERSION_CFLAGS) -MMD -MP -MT $@ -MF $@.d -I include/ -I . -DBUILD_DIR=$(BUILD_DIR) -o $@ $< $(ELF): $(O_FILES) $(BUILD_DIR)/$(LD_SCRIPT) $(ARM9BIN) $(ARM7BIN) - $(LD) $(LDFLAGS) $(BUILD_DIR)/$(LD_SCRIPT) -o $(ELF) $(O_FILES) $(ARM9BIN) $(ARM7BIN) + # Hack because mwldarm doesn't like the sbin suffix + cp $(ARM7BIN) $(BUILD_DIR)/arm7.bin + cp $(ARM9BIN) $(BUILD_DIR)/arm9.bin + $(LD) $(LDFLAGS) $(BUILD_DIR)/$(LD_SCRIPT) -o $(ELF) $(O_FILES) $(BUILD_DIR)/arm7.bin $(BUILD_DIR)/arm9.bin $(ROM): $(ELF) $(OBJCOPY) -O binary --gap-fill=0xFF --pad-to=0x04000000 $< $@ diff --git a/arm7/Makefile b/arm7/Makefile index c2e69fe2..cdbb27d7 100644 --- a/arm7/Makefile +++ b/arm7/Makefile @@ -39,9 +39,11 @@ BUILD_DIR := build TARGET := arm7 -ROM := $(BUILD_DIR)/$(TARGET).bin +ROM := $(BUILD_DIR)/$(TARGET).sbin ELF := $(BUILD_DIR)/$(TARGET).elf -LD_SCRIPT := arm7.lcf +LD_SCRIPT := $(TARGET).lcf +LD_SPEC := $(TARGET).lsf +LD_TEMPLATE := ARM7-TS.lcf.template # Directories containing source files SRC_DIRS := src @@ -69,6 +71,7 @@ MWCCARM := $(TOOLS_DIR)/mwccarm/$(MWCCVERSION)/mwccarm.exe # only dependency should be MWCCARM. MWLDARM := $(TOOLS_DIR)/mwccarm/$(MWCCVERSION)/mwldarm.exe MWASMARM := $(TOOLS_DIR)/mwccarm/$(MWCCVERSION)/mwasmarm.exe +MAKELSF := $(WINE) $(TOOLS_DIR)/bin/makelcf.exe AS := $(WINE) $(MWASMARM) CC := $(WINE) $(MWCCARM) @@ -91,7 +94,7 @@ JSONPROC = $(TOOLS_DIR)/jsonproc/jsonproc GFX = $(TOOLS_DIR)/nitrogfx/nitrogfx MWASMARM_PATCHER = $(TOOLS_DIR)/mwasmarm_patcher/mwasmarm_patcher$(EXE) -q -TOOLDIRS = $(filter-out $(TOOLS_DIR)/mwccarm,$(wildcard $(TOOLS_DIR)/*)) +TOOLDIRS = $(filter-out $(TOOLS_DIR)/mwccarm $(TOOLS_DIR)/bin,$(wildcard $(TOOLS_DIR)/*)) TOOLBASE = $(TOOLDIRS:$(TOOLS_DIR)/%=%) TOOLS = $(foreach tool,$(TOOLBASE),$(TOOLS_DIR)/$(tool)/$(tool)$(EXE)) @@ -141,15 +144,12 @@ $(BUILD_DIR)/%.o: %.c $(BUILD_DIR)/%.o: %.s $(AS) $(ASFLAGS) $< -o $@ -$(BUILD_DIR)/$(LD_SCRIPT): $(LD_SCRIPT) undefined_syms.txt - $(CPP) $(VERSION_CFLAGS) -MMD -MP -MT $@ -MF $@.d -I include/ -I . -DBUILD_DIR=$(BUILD_DIR) -o $@ $< +$(BUILD_DIR)/$(LD_SCRIPT): $(LD_SPEC) $(LD_TEMPLATE) + $(MAKELSF) $< $(LD_TEMPLATE) $@ -$(ELF): $(O_FILES) $(BUILD_DIR)/$(LD_SCRIPT) +$(ROM): $(O_FILES) $(BUILD_DIR)/$(LD_SCRIPT) $(LD) $(LDFLAGS) $(BUILD_DIR)/$(LD_SCRIPT) -o $(ELF) $(O_FILES) -$(ROM): $(ELF) - $(OBJCOPY) -O binary --gap-fill=0xFF $< $@ - # Make sure build directory exists before compiling anything DUMMY != mkdir -p $(ALL_DIRS) diff --git a/arm7/arm7.lcf b/arm7/arm7.lcf deleted file mode 100644 index 0a861ce6..00000000 --- a/arm7/arm7.lcf +++ /dev/null @@ -1,49 +0,0 @@ -MEMORY { - .text (RX) : ORIGIN=0x02380000, LENGTH=0 - .sbss (RWX) : ORIGIN=AFTER(.text), LENGTH=0 - .itcm (RWX) : ORIGIN=0x027E0000, LENGTH=0 - .dtcm (RWX) : ORIGIN=0x037F8000, LENGTH=0 - .dtcm.bss (RWX) : ORIGIN=0x0380770C, LENGTH=0 - .ewram (RW) : ORIGIN=0x06000000, LENGTH=0 - .autoload (R) : ORIGIN=0x023A92F8, LENGTH=0 -} - -SECTIONS { -#include "undefined_syms.txt" - .text : AT (0x0) { - crt0.o (.text) - } > .text - - .sbss : { - SDK_STATIC_BSS_START = .; - SDK_STATIC_BSS_END = .; - } > .sbss - - SDK_AUTOLOAD_START = .; - .itcm : AT (0x1b0) { - itcm.o (.text) - } > .itcm - - .dtcm : AT (0x28C) { - dtcm.o (.text) - libsyscall.o (.text) - dtcm2.o (.text) - dtcm_data.o (.data) - } > .dtcm - - .ewram : AT (0xF998) { - ext.o (.text) - } > .ewram - - .autoload : AT (0x292F8) { - WRITEW SDK_AUTOLOAD_ITCM_START; - WRITEW SDK_AUTOLOAD_ITCM_SIZE; - WRITEW SDK_AUTOLOAD_ITCM_BSS_SIZE; - WRITEW SDK_AUTOLOAD_DTCM_START; - WRITEW SDK_AUTOLOAD_DTCM_SIZE; - WRITEW SDK_AUTOLOAD_DTCM_BSS_SIZE; - WRITEW SDK_AUTOLOAD_EXT_START; - WRITEW SDK_AUTOLOAD_EXT_SIZE; - WRITEW SDK_AUTOLOAD_EXT_BSS_SIZE; - } > .autoload -} diff --git a/arm7/arm7.lsf b/arm7/arm7.lsf new file mode 100644 index 00000000..9ab7cc9a --- /dev/null +++ b/arm7/arm7.lsf @@ -0,0 +1,28 @@ + +Static arm7 +{ + Address 0x02380000 + StackSize 1024 512 +} + +Autoload MAIN +{ + Address 0x027E0000 + Object itcm.o +} + +Autoload WRAM +{ + Address 0x037F8000 + Object dtcm.o + Object libsyscall.o + Object dtcm2.o + Object dtcm_data.o + Object dtcm_bss.o +} + +Autoload EXT +{ + Address 0x06000000 + Object ext.o +} diff --git a/arm7/arm7.sha1 b/arm7/arm7.sha1 index e3bf79ef..e9afff54 100644 --- a/arm7/arm7.sha1 +++ b/arm7/arm7.sha1 @@ -1 +1 @@ -39aacbf97ae65b17783057aeed06b80049b18dee build/arm7.bin +39aacbf97ae65b17783057aeed06b80049b18dee build/arm7.sbin diff --git a/arm7/asm/crt0.s b/arm7/asm/crt0.s index d25a70dd..4e671676 100644 --- a/arm7/asm/crt0.s +++ b/arm7/asm/crt0.s @@ -1,6 +1,6 @@ .include "asm/macros.inc" .include "global.inc" - .global ARM7AutoLoad + .global _start_AutoloadDoneCallback .section .text arm_func_start _start @@ -102,9 +102,9 @@ _02380140: bcc _02380140 beq _02380110 _02380150: - b ARM7AutoLoad + b _start_AutoloadDoneCallback _2380154: .word _2380198 -ARM7AutoLoad: +_start_AutoloadDoneCallback: bx lr arm_func_end FUN_2380100 @@ -135,5 +135,3 @@ _2380198: .word SDK_AUTOLOAD_START .word SDK_STATIC_BSS_START .word SDK_STATIC_BSS_END - - .balign 16, 0 diff --git a/arm7/asm/dtcm2.s b/arm7/asm/dtcm2.s index 40b14c39..9f70a313 100644 --- a/arm7/asm/dtcm2.s +++ b/arm7/asm/dtcm2.s @@ -6284,28 +6284,28 @@ _03806664: .word _0380A3F0 arm_func_start FUN_03806668 FUN_03806668: ;@ 0x03806668 - ldr pc, _0380666C ;@ =_06006978 -_0380666C: .word _06006978 + ldr pc, _0380666C ;@ =FUN_06006978 +_0380666C: .word FUN_06006978 arm_func_start FUN_03806670 FUN_03806670: ;@ 0x03806670 - ldr pc, _03806674 ;@ =_060009A4 -_03806674: .word _060009A4 + ldr pc, _03806674 ;@ =FUN_060009A4 +_03806674: .word FUN_060009A4 arm_func_start FUN_03806678 FUN_03806678: ;@ 0x03806678 - ldr pc, _0380667C ;@ =_06000204 -_0380667C: .word _06000204 + ldr pc, _0380667C ;@ =FUN_06000204 +_0380667C: .word FUN_06000204 arm_func_start FUN_03806680 FUN_03806680: ;@ 0x03806680 - ldr pc, _03806684 ;@ =_06008CC4 -_03806684: .word _06008CC4 + ldr pc, _03806684 ;@ =FUN_06008CC4 +_03806684: .word FUN_06008CC4 arm_func_start FUN_03806688 FUN_03806688: ;@ 0x03806688 - ldr pc, _0380668C ;@ =_060001F8 -_0380668C: .word _060001F8 + ldr pc, _0380668C ;@ =FUN_060001F8 +_0380668C: .word FUN_060001F8 arm_func_start FUN_03806690 FUN_03806690: ;@ 0x03806690 @@ -6613,8 +6613,8 @@ _03806A8C: .word _0380A4A4 arm_func_start FUN_03806A90 FUN_03806A90: ;@ 0x03806A90 - ldr pc, _03806A94 ;@ =_06000798 -_03806A94: .word _06000798 + ldr pc, _03806A94 ;@ =FUN_06000798 +_03806A94: .word FUN_06000798 arm_func_start FUN_03806A98 FUN_03806A98: ;@ 0x03806A98 diff --git a/arm7/asm/dtcm_bss.s b/arm7/asm/dtcm_bss.s new file mode 100644 index 00000000..4cc9fe9f --- /dev/null +++ b/arm7/asm/dtcm_bss.s @@ -0,0 +1,470 @@ + .include "asm/macros.inc" + .include "global.inc" + .section .bss + .global _0380770C +_0380770C: ;0x0380770C + .space 0x03807714 - 0x0380770C + + .global _03807714 +_03807714: ;0x03807714 + .space 0x03807718 - 0x03807714 + + .global _03807718 +_03807718: ;0x03807718 + .space 0x0380771C - 0x03807718 + + .global _0380771C +_0380771C: ;0x0380771C + .space 0x03807744 - 0x0380771C + + .global _03807744 +_03807744: ;0x03807744 + .space 0x03807748 - 0x03807744 + + .global _03807748 +_03807748: ;0x03807748 + .space 0x0380774C - 0x03807748 + + .global _0380774C +_0380774C: ;0x0380774C + .space 0x03807774 - 0x0380774C + + .global _03807774 +_03807774: ;0x03807774 + .space 0x03807780 - 0x03807774 + + .global _03807780 +_03807780: ;0x03807780 + .space 0x03807784 - 0x03807780 + + .global _03807784 +_03807784: ;0x03807784 + .space 0x03807788 - 0x03807784 + + .global _03807788 +_03807788: ;0x03807788 + .space 0x0380778C - 0x03807788 + + .global _0380778C +_0380778C: ;0x0380778C + .space 0x03807790 - 0x0380778C + + .global _03807790 +_03807790: ;0x03807790 + .space 0x03807794 - 0x03807790 + + .global _03807794 +_03807794: ;0x03807794 + .space 0x03807798 - 0x03807794 + + .global _03807798 +_03807798: ;0x03807798 + .space 0x0380779C - 0x03807798 + + .global _0380779C +_0380779C: ;0x0380779C + .space 0x038077A0 - 0x0380779C + + .global _038077A0 +_038077A0: ;0x038077A0 + .space 0x038077AC - 0x038077A0 + + .global _038077AC +_038077AC: ;0x038077AC + .space 0x03807850 - 0x038077AC + + .global _03807850 +_03807850: ;0x03807850 + .space 0x038078F4 - 0x03807850 + + .global _038078F4 +_038078F4: ;0x038078F4 + .space 0x038078F8 - 0x038078F4 + + .global _038078F8 +_038078F8: ;0x038078F8 + .space 0x0380791C - 0x038078F8 + + .global _0380791C +_0380791C: ;0x0380791C + .space 0x03807920 - 0x0380791C + + .global _03807920 +_03807920: ;0x03807920 + .space 0x03807924 - 0x03807920 + + .global _03807924 +_03807924: ;0x03807924 + .space 0x03807928 - 0x03807924 + + .global _03807928 +_03807928: ;0x03807928 + .space 0x03807930 - 0x03807928 + + .global _03807930 +_03807930: ;0x03807930 + .space 0x03807934 - 0x03807930 + + .global _03807934 +_03807934: ;0x03807934 + .space 0x0380793C - 0x03807934 + + .global _0380793C +_0380793C: ;0x0380793C + .space 0x03807940 - 0x0380793C + + .global _03807940 +_03807940: ;0x03807940 + .space 0x03807944 - 0x03807940 + + .global _03807944 +_03807944: ;0x03807944 + .space 0x03807948 - 0x03807944 + + .global _03807948 +_03807948: ;0x03807948 + .space 0x03807950 - 0x03807948 + + .global _03807950 +_03807950: ;0x03807950 + .space 0x03807954 - 0x03807950 + + .global _03807954 +_03807954: ;0x03807954 + .space 0x03807958 - 0x03807954 + + .global _03807958 +_03807958: ;0x03807958 + .space 0x0380795C - 0x03807958 + + .global _0380795C +_0380795C: ;0x0380795C + .space 0x038079DC - 0x0380795C + + .global _038079DC +_038079DC: ;0x038079DC + .space 0x038079E0 - 0x038079DC + + .global _038079E0 +_038079E0: ;0x038079E0 + .space 0x03807A0C - 0x038079E0 + + .global _03807A0C +_03807A0C: ;0x03807A0C + .space 0x03807A10 - 0x03807A0C + + .global _03807A10 +_03807A10: ;0x03807A10 + .space 0x03807A20 - 0x03807A10 + + .global _03807A20 +_03807A20: ;0x03807A20 + .space 0x03807A30 - 0x03807A20 + + .global _03807A30 +_03807A30: ;0x03807A30 + .space 0x03807A34 - 0x03807A30 + + .global _03807A34 +_03807A34: ;0x03807A34 + .space 0x03807A54 - 0x03807A34 + + .global _03807A54 +_03807A54: ;0x03807A54 + .space 0x03807A74 - 0x03807A54 + + .global _03807A74 +_03807A74: ;0x03807A74 + .space 0x03807AA0 - 0x03807A74 + + .global _03807AA0 +_03807AA0: ;0x03807AA0 + .space 0x03807F44 - 0x03807AA0 + + .global _03807F44 +_03807F44: ;0x03807F44 + .space 0x03807F48 - 0x03807F44 + + .global _03807F48 +_03807F48: ;0x03807F48 + .space 0x03807F4C - 0x03807F48 + + .global _03807F4C +_03807F4C: ;0x03807F4C + .space 0x03807F50 - 0x03807F4C + + .global _03807F50 +_03807F50: ;0x03807F50 + .space 0x03807F58 - 0x03807F50 + + .global _03807F58 +_03807F58: ;0x03807F58 + .space 0x03807F68 - 0x03807F58 + + .global _03807F68 +_03807F68: ;0x03807F68 + .space 0x03807F6C - 0x03807F68 + + .global _03807F6C +_03807F6C: ;0x03807F6C + .space 0x038084AC - 0x03807F6C + + .global _038084AC +_038084AC: ;0x038084AC + .space 0x038086EC - 0x038084AC + + .global _038086EC +_038086EC: ;0x038086EC + .space 0x03808EEC - 0x038086EC + + .global _03808EEC +_03808EEC: ;0x03808EEC + .space 0x038090EC - 0x03808EEC + + .global _038090EC +_038090EC: ;0x038090EC + .space 0x0380910C - 0x038090EC + + .global _0380910C +_0380910C: ;0x0380910C + .space 0x0380912C - 0x0380910C + + .global _0380912C +_0380912C: ;0x0380912C + .space 0x03809140 - 0x0380912C + + .global _03809140 +_03809140: ;0x03809140 + .space 0x03809188 - 0x03809140 + + .global _03809188 +_03809188: ;0x03809188 + .space 0x03809760 - 0x03809188 + + .global _03809760 +_03809760: ;0x03809760 + .space 0x03809764 - 0x03809760 + + .global _03809764 +_03809764: ;0x03809764 + .space 0x03809774 - 0x03809764 + + .global _03809774 +_03809774: ;0x03809774 + .space 0x03809780 - 0x03809774 + + .global _03809780 +_03809780: ;0x03809780 + .space 0x038099A0 - 0x03809780 + + .global _038099A0 +_038099A0: ;0x038099A0 + .space 0x038099A4 - 0x038099A0 + + .global _038099A4 +_038099A4: ;0x038099A4 + .space 0x038099A8 - 0x038099A4 + + .global _038099A8 +_038099A8: ;0x038099A8 + .space 0x038099AC - 0x038099A8 + + .global _038099AC +_038099AC: ;0x038099AC + .space 0x038099B0 - 0x038099AC + + .global _038099B0 +_038099B0: ;0x038099B0 + .space 0x038099B8 - 0x038099B0 + + .global _038099B8 +_038099B8: ;0x038099B8 + .space 0x03809C5C - 0x038099B8 + + .global _03809C5C +_03809C5C: ;0x03809C5C + .space 0x03809C7C - 0x03809C5C + + .global _03809C7C +_03809C7C: ;0x03809C7C + .space 0x03809CBC - 0x03809C7C + + .global _03809CBC +_03809CBC: ;0x03809CBC + .space 0x03809CC0 - 0x03809CBC + + .global _03809CC0 +_03809CC0: ;0x03809CC0 + .space 0x03809E40 - 0x03809CC0 + + .global _03809E40 +_03809E40: ;0x03809E40 + .space 0x03809E4C - 0x03809E40 + + .global _03809E4C +_03809E4C: ;0x03809E4C + .space 0x03809E50 - 0x03809E4C + + .global _03809E50 +_03809E50: ;0x03809E50 + .space 0x03809E54 - 0x03809E50 + + .global _03809E54 +_03809E54: ;0x03809E54 + .space 0x03809E80 - 0x03809E54 + + .global _03809E80 +_03809E80: ;0x03809E80 + .space 0x03809F28 - 0x03809E80 + + .global _03809F28 +_03809F28: ;0x03809F28 + .space 0x03809F2C - 0x03809F28 + + .global _03809F2C +_03809F2C: ;0x03809F2C + .space 0x03809F30 - 0x03809F2C + + .global _03809F30 +_03809F30: ;0x03809F30 + .space 0x03809F34 - 0x03809F30 + + .global _03809F34 +_03809F34: ;0x03809F34 + .space 0x03809F38 - 0x03809F34 + + .global _03809F38 +_03809F38: ;0x03809F38 + .space 0x03809F64 - 0x03809F38 + + .global _03809F64 +_03809F64: ;0x03809F64 + .space 0x03809F68 - 0x03809F64 + + .global _03809F68 +_03809F68: ;0x03809F68 + .space 0x03809F6C - 0x03809F68 + + .global _03809F6C +_03809F6C: ;0x03809F6C + .space 0x03809FA8 - 0x03809F6C + + .global _03809FA8 +_03809FA8: ;0x03809FA8 + .space 0x03809FB8 - 0x03809FA8 + + .global _03809FB8 +_03809FB8: ;0x03809FB8 + .space 0x03809FBC - 0x03809FB8 + + .global _03809FBC +_03809FBC: ;0x03809FBC + .space 0x03809FC0 - 0x03809FBC + + .global _03809FC0 +_03809FC0: ;0x03809FC0 + .space 0x03809FC4 - 0x03809FC0 + + .global _03809FC4 +_03809FC4: ;0x03809FC4 + .space 0x03809FC8 - 0x03809FC4 + + .global _03809FC8 +_03809FC8: ;0x03809FC8 + .space 0x03809FCC - 0x03809FC8 + + .global _03809FCC +_03809FCC: ;0x03809FCC + .space 0x03809FD0 - 0x03809FCC + + .global _03809FD0 +_03809FD0: ;0x03809FD0 + .space 0x03809FD4 - 0x03809FD0 + + .global _03809FD4 +_03809FD4: ;0x03809FD4 + .space 0x03809FEC - 0x03809FD4 + + .global _03809FEC +_03809FEC: ;0x03809FEC + .space 0x0380A018 - 0x03809FEC + + .global _0380A018 +_0380A018: ;0x0380A018 + .space 0x0380A038 - 0x0380A018 + + .global _0380A038 +_0380A038: ;0x0380A038 + .space 0x0380A03C - 0x0380A038 + + .global _0380A03C +_0380A03C: ;0x0380A03C + .space 0x0380A05C - 0x0380A03C + + .global _0380A05C +_0380A05C: ;0x0380A05C + .space 0x0380A06C - 0x0380A05C + + .global _0380A06C +_0380A06C: ;0x0380A06C + .space 0x0380A13C - 0x0380A06C + + .global _0380A13C +_0380A13C: ;0x0380A13C + .space 0x0380A210 - 0x0380A13C + + .global _0380A210 +_0380A210: ;0x0380A210 + .space 0x0380A3F0 - 0x0380A210 + + .global _0380A3F0 +_0380A3F0: ;0x0380A3F0 + .space 0x0380A3F4 - 0x0380A3F0 + + .global _0380A3F4 +_0380A3F4: ;0x0380A3F4 + .space 0x0380A3F8 - 0x0380A3F4 + + .global _0380A3F8 +_0380A3F8: ;0x0380A3F8 + .space 0x0380A3FC - 0x0380A3F8 + + .global _0380A3FC +_0380A3FC: ;0x0380A3FC + .space 0x0380A400 - 0x0380A3FC + + .global _0380A400 +_0380A400: ;0x0380A400 + .space 0x0380A4A4 - 0x0380A400 + + .global _0380A4A4 +_0380A4A4: ;0x0380A4A4 + .space 0x0380AA64 - 0x0380A4A4 + + .global _0380AA64 +_0380AA64: ;0x0380AA64 + .space 0x0380B064 - 0x0380AA64 + + .global _0380B064 +_0380B064: ;0x0380B064 + .space 0x0380B764 - 0x0380B064 + + .global _0380B764 +_0380B764: ;0x0380B764 + .space 0x0380B808 - 0x0380B764 + + .global _0380B808 +_0380B808: ;0x0380B808 + .space 0x0380B8AC - 0x0380B808 + + .global _0380B8AC +_0380B8AC: ;0x0380B8AC + .space 0x0380B8D8 - 0x0380B8AC + + .global _0380B8D8 +_0380B8D8: ;0x0380B8D8 + .space 0x0380B904 - 0x0380B8D8 + + .global _0380B904 +_0380B904: ;0x0380B904 + .space 0x0380B92C - 0x0380B904 diff --git a/arm7/asm/ext.s b/arm7/asm/ext.s index 070645ea..2cb1a3a5 100644 --- a/arm7/asm/ext.s +++ b/arm7/asm/ext.s @@ -3,18 +3,6 @@ .section .text .balign 4, 0 - ; This file's BSS - ; Linking of BSS is a work in progress - .extern _06019980 - .extern _06019988 - .extern _060199A8 - .extern _060199B8 - .extern _060199D8 - .extern _060199E8 - .extern _06019A08 - .extern _0601AA88 - .extern _0601AEB4 - arm_func_start FUN_06000000 FUN_06000000: ; 0x06000000 ldr r1, _0600002C ; =_0601A960 @@ -29589,23 +29577,32 @@ _06019958: .word 0x00040001 .word 0x00000008 -; .section .bss -; .balign 16, 0 -; _06019980: -; .space 8 -; _06019988: -; .space 32 -; _060199A8: -; .space 16 -; _060199B8: -; .space 32 -; _060199D8: -; .space 16 -; _060199E8: -; .space 32 -; _06019A08: -; .space 16 -; _0601AA88: -; .space 1068 -; _0601AEB4: -; .space 92 + .section .bss + .balign 16, 0 + .global _06019960 +_06019960: + .space 32 +_06019980: + .space 8 +_06019988: + .space 32 +_060199A8: + .space 16 +_060199B8: + .space 32 +_060199D8: + .space 16 +_060199E8: + .space 32 +_06019A08: + .space 0xF58 + .global _0601A960 +_0601A960: + .space 0x128 +_0601AA88: + .space 0x400 + .global _0601AE88 +_0601AE88: + .space 0x2C +_0601AEB4: + .space 60 diff --git a/arm7/asm/itcm.s b/arm7/asm/itcm.s index 6f2996be..32f4cf3d 100644 --- a/arm7/asm/itcm.s +++ b/arm7/asm/itcm.s @@ -6,9 +6,9 @@ arm_func_start FUN_027E0000 FUN_027E0000: ; 0x027E0000 load at 0x023801B0 stmdb sp!, {r4, r5, r6, lr} - ldr r6, [pc, #180] ; 0x270 - ldr r3, [pc, #180] ; 0x274 - ldr r0, [pc, #180] ; 0x278 + ldr r6, _027E00C0 ; =0x023801B0 + ldr r3, _027E00C4 ; =0x023A92F8 + ldr r0, _027E00C8 ; =0x023A931C b _027E00B0 _027E0014: mov r2, r3 @@ -19,19 +19,19 @@ _027E0014: ldr r1, [r2] cmp r1, #100663296 ; 0x6000000 bne _027E00AC - ldr r3, [pc, #144] ; 0x27c - ldr r0, [pc, #144] ; 0x280 + ldr r3, _027E00CC ; =0x027E00DC + ldr r0, _027E00D0 ; =0x0380A3F4 str r3, [r0] add r2, r5, r4 - ldr r0, [pc, #136] ; 0x284 + ldr r0, _027E00D4 ; =0x0380A3FC str r2, [r0] - ldr r1, [pc, #132] ; 0x288 + ldr r1, _027E00D8 ; =0x027FAFCC add r0, r3, r2 cmp r1, r0 beq _027E0060 bl FUN_037FB1F0 _027E0060: - ldr r0, [pc, #104] ; 0x280 + ldr r0, _027E00D0 ; =0x0380A3F4 ldr r3, [r0] mov r2, #0 mov r1, r5, lsr #2 diff --git a/arm7/global.inc b/arm7/global.inc index f3405bf1..9debfbf3 100644 --- a/arm7/global.inc +++ b/arm7/global.inc @@ -297,12 +297,12 @@ .extern _0380B064
; .ext
-.extern _060001F8
-.extern _06000204
-.extern _06000798
-.extern _060009A4
-.extern _06006978
-.extern _06008CC4
+.extern FUN_060001F8
+.extern FUN_06000204
+.extern FUN_06000798
+.extern FUN_060009A4
+.extern FUN_06006978
+.extern FUN_06008CC4
.extern _06019960
.extern _0601A960
.extern _0601AE88
diff --git a/arm7/undefined_syms.txt b/arm7/undefined_syms.txt deleted file mode 100644 index c364f417..00000000 --- a/arm7/undefined_syms.txt +++ /dev/null @@ -1,186 +0,0 @@ - -// ??? -// DTCM -// EWRAM -SDK_AUTOLOAD_ITCM_BSS_SIZE = 0x00000000; -SDK_SYS_STACKSIZE = 0x00000000; -CONST_34 = 0x00000034; -CONST_3F = 0x0000003F; -SDK_AUTOLOAD_ITCM_SIZE = 0x000000DC; -SDK_IRQ_STACKSIZE = 0x00000400; -SDK_AUTOLOAD_EXT_BSS_SIZE = 0x00001590; -SDK_AUTOLOAD_DTCM_BSS_SIZE = 0x00004220; -SDK_AUTOLOAD_DTCM_SIZE = 0x0000F70C; -SDK_AUTOLOAD_EXT_SIZE = 0x00019960; -SDK_MAIN_ARENA_LO = 0x0225FFA0; -SDK_AUTOLOAD_LIST = 0x023A92F8; -SDK_SECTION_ARENA_EX_START = 0x023E0000; -SDK_AUTOLOAD_ITCM_START = 0x027E0000; -gUnk027FFC20 = 0x027FFC20; -SDK_AUTOLOAD_DTCM_START = 0x037F8000; -FUN_037F90B8 = 0x037F90B8; -FUN_037F9B68 = 0x037F9B68; -FUN_037FB300 = 0x037FB300; -FUN_037FB318 = 0x037FB318; -SVC_SoftReset = 0x038010D4; -SVC_WaitByLoop = 0x038010D8; -SVC_WaitIntr = 0x038010DC; -FUN_038010E6 = 0x038010E6; -SVC_Halt = 0x038010F2; -SVC_Stop = 0x038010F6; -SVC_SoundBias = 0x038010FA; -SVC_SoundBiasSet = 0x038010FE; -SVC_SoundBiasReset = 0x03801106; -SVC_Div = 0x0380110E; -SVC_DivRem = 0x03801112; -SVC_CpuSet = 0x03801118; -SVC_CpuFastSet = 0x0380111C; -SVC_Sqrt = 0x03801120; -SVC_GetCRC16 = 0x03801124; -SVC_IsDebugger = 0x03801128; -SVC_BitUnPack = 0x0380112C; -SVC_LZ77UnCompWram = 0x03801130; -SVC_LZ77UnCompVramWithReadCB = 0x03801134; -SVC_HuffUnCompWithReadCB = 0x03801138; -SVC_RLUnCompWram = 0x0380113C; -SVC_RLUnCompVramWithReadCB = 0x03801140; -SVC_GetSineTable = 0x03801144; -SVC_GetPitchTable = 0x03801148; -SVC_GetVolumeTable = 0x0380114C; -_0380770C = 0x0380770C; -_03807714 = 0x03807714; -_03807718 = 0x03807718; -_0380771C = 0x0380771C; -_03807744 = 0x03807744; -_03807748 = 0x03807748; -_0380774C = 0x0380774C; -_03807774 = 0x03807774; -_03807780 = 0x03807780; -_03807784 = 0x03807784; -_03807788 = 0x03807788; -_0380778C = 0x0380778C; -_03807790 = 0x03807790; -_03807794 = 0x03807794; -_03807798 = 0x03807798; -_0380779C = 0x0380779C; -_038077A0 = 0x038077A0; -_038077AC = 0x038077AC; -_03807850 = 0x03807850; -_038078F4 = 0x038078F4; -_038078F8 = 0x038078F8; -_0380791C = 0x0380791C; -_03807920 = 0x03807920; -_03807924 = 0x03807924; -_03807928 = 0x03807928; -_03807930 = 0x03807930; -_03807934 = 0x03807934; -_0380793C = 0x0380793C; -_03807940 = 0x03807940; -_03807944 = 0x03807944; -_03807948 = 0x03807948; -_03807950 = 0x03807950; -_03807954 = 0x03807954; -_03807958 = 0x03807958; -_0380795C = 0x0380795C; -_038079DC = 0x038079DC; -_038079E0 = 0x038079E0; -_03807A0C = 0x03807A0C; -_03807A10 = 0x03807A10; -_03807A20 = 0x03807A20; -_03807A30 = 0x03807A30; -_03807A34 = 0x03807A34; -_03807A54 = 0x03807A54; -_03807A74 = 0x03807A74; -_03807AA0 = 0x03807AA0; -_03807F44 = 0x03807F44; -_03807F48 = 0x03807F48; -_03807F4C = 0x03807F4C; -_03807F50 = 0x03807F50; -_03807F58 = 0x03807F58; -_03807F68 = 0x03807F68; -_03807F6C = 0x03807F6C; -_038084AC = 0x038084AC; -_038086EC = 0x038086EC; -_03808EEC = 0x03808EEC; -_038090EC = 0x038090EC; -_0380910C = 0x0380910C; -_0380912C = 0x0380912C; -_03809140 = 0x03809140; -_03809188 = 0x03809188; -_03809760 = 0x03809760; -_03809764 = 0x03809764; -_03809774 = 0x03809774; -_03809780 = 0x03809780; -_038099A0 = 0x038099A0; -_038099A4 = 0x038099A4; -_038099A8 = 0x038099A8; -_038099AC = 0x038099AC; -_038099B0 = 0x038099B0; -_038099B8 = 0x038099B8; -_03809C5C = 0x03809C5C; -_03809C7C = 0x03809C7C; -_03809CBC = 0x03809CBC; -_03809CC0 = 0x03809CC0; -_03809E40 = 0x03809E40; -_03809E4C = 0x03809E4C; -_03809E50 = 0x03809E50; -_03809E54 = 0x03809E54; -_03809E80 = 0x03809E80; -_03809F28 = 0x03809F28; -_03809F2C = 0x03809F2C; -_03809F30 = 0x03809F30; -_03809F34 = 0x03809F34; -_03809F38 = 0x03809F38; -_03809F64 = 0x03809F64; -_03809F68 = 0x03809F68; -_03809F6C = 0x03809F6C; -_03809FA8 = 0x03809FA8; -_03809FB8 = 0x03809FB8; -_03809FBC = 0x03809FBC; -_03809FC0 = 0x03809FC0; -_03809FC4 = 0x03809FC4; -_03809FC8 = 0x03809FC8; -_03809FCC = 0x03809FCC; -_03809FD0 = 0x03809FD0; -_03809FD4 = 0x03809FD4; -_03809FEC = 0x03809FEC; -_0380A018 = 0x0380A018; -_0380A038 = 0x0380A038; -_0380A03C = 0x0380A03C; -_0380A05C = 0x0380A05C; -_0380A06C = 0x0380A06C; -_0380A13C = 0x0380A13C; -_0380A210 = 0x0380A210; -_0380A3F0 = 0x0380A3F0; -_0380A3F4 = 0x0380A3F4; -_0380A3F8 = 0x0380A3F8; -_0380A3FC = 0x0380A3FC; -_0380A400 = 0x0380A400; -_0380A4A4 = 0x0380A4A4; -_0380AA64 = 0x0380AA64; -_0380B064 = 0x0380B064; -_0380B764 = 0x0380B764; -_0380B808 = 0x0380B808; -_0380B8AC = 0x0380B8AC; -_0380B8D8 = 0x0380B8D8; -_0380B904 = 0x0380B904; -SDK_AUTOLOAD_EXT_START = 0x06000000; -_060001F8 = 0x060001F8; -_06000204 = 0x06000204; -_06000798 = 0x06000798; -_060009A4 = 0x060009A4; -_06006978 = 0x06006978; -_06008CC4 = 0x06008CC4; -_06019960 = 0x06019960; -_06019980 = 0x06019980; -_06019988 = 0x06019988; -_060199A8 = 0x060199A8; -_060199B8 = 0x060199B8; -_060199D8 = 0x060199D8; -_060199E8 = 0x060199E8; -_06019A08 = 0x06019A08; -_0601A960 = 0x0601A960; -_0601AA88 = 0x0601AA88; -_0601AE88 = 0x0601AE88; -_0601AEB4 = 0x0601AEB4; -SDK_AUTOLOAD_LIST_END = SDK_AUTOLOAD_LIST + 0x24; diff --git a/arm9/Makefile b/arm9/Makefile index 6c576804..3d2b8fef 100644 --- a/arm9/Makefile +++ b/arm9/Makefile @@ -39,13 +39,15 @@ BUILD_DIR := build TARGET := arm9 -ROM := $(BUILD_DIR)/$(TARGET).bin +ROM := $(BUILD_DIR)/$(TARGET).sbin ELF := $(BUILD_DIR)/$(TARGET).elf -LD_SCRIPT := arm9.lcf +LD_SCRIPT := $(TARGET).lcf +LD_SPEC := $(TARGET).lsf +LD_TEMPLATE := ARM9-TS.lcf.template # Directories containing source files -SRC_DIRS := src lib lib/src -ASM_DIRS := asm data files +SRC_DIRS := src lib lib/src $(wildcard modules/*/src) +ASM_DIRS := asm data files $(wildcard modules/*/asm) C_FILES := $(foreach dir,$(SRC_DIRS),$(wildcard $(dir)/*.c)) S_FILES := $(foreach dir,$(ASM_DIRS),$(wildcard $(dir)/*.s)) @@ -73,6 +75,8 @@ MWCCARM := $(TOOLS_DIR)/mwccarm/$(MWCCVERSION)/mwccarm.exe # only dependency should be MWCCARM. MWLDARM := $(TOOLS_DIR)/mwccarm/$(MWCCVERSION)/mwldarm.exe MWASMARM := $(TOOLS_DIR)/mwccarm/$(MWCCVERSION)/mwasmarm.exe +MAKELSF := $(WINE) $(TOOLS_DIR)/bin/makelcf.exe +MAKELSF_FLAGS := -DCONST_34=0x34 -DCONST_3F=0x3F AS := $(WINE) $(MWASMARM) CC := $(WINE) $(MWCCARM) @@ -95,7 +99,7 @@ JSONPROC = $(TOOLS_DIR)/jsonproc/jsonproc GFX = $(TOOLS_DIR)/nitrogfx/nitrogfx MWASMARM_PATCHER = $(TOOLS_DIR)/mwasmarm_patcher/mwasmarm_patcher$(EXE) -q -TOOLDIRS = $(filter-out $(TOOLS_DIR)/mwccarm,$(wildcard $(TOOLS_DIR)/*)) +TOOLDIRS = $(filter-out $(TOOLS_DIR)/mwccarm $(TOOLS_DIR)/bin,$(wildcard $(TOOLS_DIR)/*)) TOOLBASE = $(TOOLDIRS:$(TOOLS_DIR)/%=%) TOOLS = $(foreach tool,$(TOOLBASE),$(TOOLS_DIR)/$(tool)/$(tool)$(EXE)) @@ -153,7 +157,8 @@ $(BUILD_DIR)/%.o: %.c $(BUILD_DIR)/%.o: %.s $(AS) $(ASFLAGS) $< -o $@ -$(BUILD_DIR)/$(LD_SCRIPT): $(LD_SCRIPT) undefined_syms.txt macros.lcf.inc +$(BUILD_DIR)/$(LD_SCRIPT): $(LD_SCRIPT) $(LD_TEMPLATE) undefined_syms.txt macros.lcf.inc + # $(MAKELSF) $(MAKELSF_FLAGS) $< $(LD_TEMPLATE) $@ $(CPP) $(VERSION_CFLAGS) -MMD -MP -MT $@ -MF $@.d -I include/ -I . -DBUILD_DIR=$(BUILD_DIR) -o $@ $< $(ELF): $(O_FILES) $(BUILD_DIR)/$(LD_SCRIPT) $(BIN_FILES) diff --git a/arm9/arm9.lcf b/arm9/arm9.lcf index dbcec8b2..ad1f4958 100644 --- a/arm9/arm9.lcf +++ b/arm9/arm9.lcf @@ -11,10 +11,10 @@ MEMORY { .dtcm (RW) : ORIGIN=0x027E0000, LENGTH=0 .overlay (RX) : ORIGIN=0, LENGTH=0 MODULE_00 (RWX) : ORIGIN=0, LENGTH=0 - MODULE_01 (RWX) : ORIGIN=0, LENGTH=0 + MODULE_01 (RWX) : ORIGIN=0x021D74E0, LENGTH=0 MODULE_02 (RWX) : ORIGIN=0, LENGTH=0 MODULE_03 (RWX) : ORIGIN=0, LENGTH=0 - MODULE_04 (RWX) : ORIGIN=0, LENGTH=0 + MODULE_04 (RWX) : ORIGIN=0x021D74E0, LENGTH=0 MODULE_05 (RWX) : ORIGIN=0, LENGTH=0 MODULE_06 (RWX) : ORIGIN=0, LENGTH=0 MODULE_07 (RWX) : ORIGIN=0, LENGTH=0 @@ -168,20 +168,20 @@ SECTIONS { OS_vramExclusive.o (.text) OS_entropy.o (.text) OS_terminate_proc.o (.text) - MI_arm9.o (.text) - SND_arm9.o (.text) - PXI_arm9.o (.text) - FS_arm9.o (.text) - DGT_arm9.o (.text) - CP_arm9.o (.text) - SPI_arm9.o (.text) - PM_arm9.o (.text) - RTC_arm9.o (.text) - CARD_arm9.o (.text) - WM_arm9.o (.text) - CTRDG_arm9.o (.text) - MATH_arm9.o (.text) - STD_arm9.o (.text) + libmi.o (.text) + libsnd.o (.text) + libpxi.o (.text) + libfs.o (.text) + libdgt.o (.text) + libcp.o (.text) + libspi.o (.text) + libpm.o (.text) + librtc.o (.text) + libcard.o (.text) + libwm.o (.text) + libctrdg.o (.text) + libmath.o (.text) + libstd.o (.text) /* C standard library */ libc.o (.text) /* MWCC library */ @@ -325,10 +325,33 @@ SECTIONS { } > .overlay OVERLAY_FILE(00, 0x108400, FILE_10C400.o) - OVERLAY_FILE(01, 0x108600, FILE_10C600.o) + + .MODULE.01 : AT (0x108600) + { + module_01.o (.text) + module_01.o (.sdata) + module_01.o (.data) + } > MODULE_01 + .MODULE.01.bss : + { + module_01.o (.sbss) + module_01.o (.bss) + } >> MODULE_01 + OVERLAY_FILE(02, 0x108800, FILE_10C800.o) OVERLAY_FILE(03, 0x108A00, FILE_10CA00.o) - OVERLAY_FILE(04, 0x108C00, FILE_10CC00.o) + + .MODULE.04 : AT (0x108C00) + { + thumb_04.o (.text) + arm_04.o (.text) + arm_04.o (.data) + } > MODULE_04 + .MODULE.04.bss : + { + arm_04.o (.bss) + } >> MODULE_04 + OVERLAY_FILE(05, 0x141400, FILE_145400.o) OVERLAY_FILE(06, 0x167600, FILE_16B600.o) OVERLAY_FILE(07, 0x180400, FILE_184400.o) diff --git a/arm9/arm9.lsf b/arm9/arm9.lsf new file mode 100644 index 00000000..3df64d7d --- /dev/null +++ b/arm9/arm9.lsf @@ -0,0 +1,492 @@ + +Static arm9 +{ + Address 0x02000000 + Object main.o + Object FUN_02000DF4.o + Object unk_02000E0C.o + Object rom2.o + Object string_util.o + Object unk_020023C0.o + Object filesystem.o + Object unk_02006864.o + Object script.o + Object unk_02038C78.o + Object scrcmd.o + Object unk_02046030.o + Object unk_0208AC14.o + Object unk_020AF030.o + Library libfx.a + Library libgx.a + Library libos.a + Library libmi.a + Library libsnd.a + Library libpxi.a + Library libfs.a + Library libdgt.a + Library libcp.a + Library libspi.a + Library libpm.a + Library librtc.a + Library libcard.a + Library libwm.a + Library libctrdg.a + Library libmath.a + Library libstd.a + Library libc.a + Library libmwcc.a + Object rom2_2.o +} + +Autoload ITCM +{ + Address 0x01FF8000 + Object arm9_itcm.o +} + +Autoload DTCM +{ + Address 0x027E0000 + Library libos.a +} + +Autoload EXT +{ + Address 0x02400000 +} + +Overlay overlay_00 +{ + Address 0x021D74E0 + Object FILE_10C400.o +} +Overlay overlay_01 +{ + Address 0x021D74E0 + Object FILE_10C600.o +} +Overlay overlay_02 +{ + Address 0x021D7520 + Object FILE_10C800.o +} +Overlay overlay_03 +{ + Address 0x01FF8700 + Object FILE_10CA00.o +} +Overlay overlay_04 +{ + Address 0x021D74E0 + Object FILE_10CC00.o +} +Overlay overlay_05 +{ + Address 0x021D74E0 + Object FILE_145400.o +} +Overlay overlay_06 +{ + Address 0x022396A0 + Object FILE_16B600.o +} +Overlay overlay_07 +{ + Address 0x02211E60 + Object FILE_184400.o +} +Overlay overlay_08 +{ + Address 0x02211E60 + Object FILE_187800.o +} +Overlay overlay_09 +{ + Address 0x02211E60 + Object FILE_1A3000.o +} +Overlay overlay_10 +{ + Address 0x021D74E0 + Object FILE_1AD200.o +} +Overlay overlay_11 +{ + Address 0x0222D5C0 + Object FILE_1AD400.o +} +Overlay overlay_12 +{ + Address 0x0222D5C0 + Object FILE_1DFE00.o +} +Overlay overlay_13 +{ + Address 0x02211E60 + Object FILE_1F9200.o +} +Overlay overlay_14 +{ + Address 0x021D74E0 + Object FILE_227E00.o +} +Overlay overlay_15 +{ + Address 0x021D74E0 + Object FILE_237400.o +} +Overlay overlay_16 +{ + Address 0x021D74E0 + Object FILE_23BC00.o +} +Overlay overlay_17 +{ + Address 0x021D74E0 + Object FILE_264200.o +} +Overlay overlay_18 +{ + Address 0x022396A0 + Object FILE_26B200.o +} +Overlay overlay_19 +{ + Address 0x02252440 + Object FILE_283000.o +} +Overlay overlay_20 +{ + Address 0x02252440 + Object FILE_283200.o +} +Overlay overlay_21 +{ + Address 0x02254840 + Object FILE_285600.o +} +Overlay overlay_22 +{ + Address 0x02254840 + Object FILE_285C00.o +} +Overlay overlay_23 +{ + Address 0x02254840 + Object FILE_286C00.o +} +Overlay overlay_24 +{ + Address 0x02254840 + Object FILE_288600.o +} +Overlay overlay_25 +{ + Address 0x02254840 + Object FILE_289000.o +} +Overlay overlay_26 +{ + Address 0x02254840 + Object FILE_289600.o +} +Overlay overlay_27 +{ + Address 0x02254840 + Object FILE_289E00.o +} +Overlay overlay_28 +{ + Address 0x02254840 + Object FILE_28AA00.o +} +Overlay overlay_29 +{ + Address 0x02254840 + Object FILE_28C200.o +} +Overlay overlay_30 +{ + Address 0x02254840 + Object FILE_28CC00.o +} +Overlay overlay_31 +{ + Address 0x02254840 + Object FILE_28D200.o +} +Overlay overlay_32 +{ + Address 0x02254840 + Object FILE_28D800.o +} +Overlay overlay_33 +{ + Address 0x02254840 + Object FILE_28DE00.o +} +Overlay overlay_34 +{ + Address 0x02254840 + Object FILE_28E200.o +} +Overlay overlay_35 +{ + Address 0x02254840 + Object FILE_28E800.o +} +Overlay overlay_36 +{ + Address 0x02254840 + Object FILE_28F200.o +} +Overlay overlay_37 +{ + Address 0x02254840 + Object FILE_290000.o +} +Overlay overlay_38 +{ + Address 0x02254840 + Object FILE_290600.o +} +Overlay overlay_39 +{ + Address 0x02254840 + Object FILE_291200.o +} +Overlay overlay_40 +{ + Address 0x02254840 + Object FILE_292000.o +} +Overlay overlay_41 +{ + Address 0x02254840 + Object FILE_292E00.o +} +Overlay overlay_42 +{ + Address 0x02254840 + Object FILE_294000.o +} +Overlay overlay_43 +{ + Address 0x02254840 + Object FILE_294A00.o +} +Overlay overlay_44 +{ + Address 0x02254840 + Object FILE_295400.o +} +Overlay overlay_45 +{ + Address 0x02254840 + Object FILE_295A00.o +} +Overlay overlay_46 +{ + Address 0x02254840 + Object FILE_296400.o +} +Overlay overlay_47 +{ + Address 0x02254840 + Object FILE_296800.o +} +Overlay overlay_48 +{ + Address 0x02254840 + Object FILE_297600.o +} +Overlay overlay_49 +{ + Address 0x02254840 + Object FILE_298000.o +} +Overlay overlay_50 +{ + Address 0x02254840 + Object FILE_298600.o +} +Overlay overlay_51 +{ + Address 0x02254840 + Object FILE_298A00.o +} +Overlay overlay_52 +{ + Address 0x021D74E0 + Object FILE_299A00.o +} +Overlay overlay_53 +{ + Address 0x021D74E0 + Object FILE_299E00.o +} +Overlay overlay_54 +{ + Address 0x021D74E0 + Object FILE_29C400.o +} +Overlay overlay_55 +{ + Address 0x021D74E0 + Object FILE_29E800.o +} +Overlay overlay_56 +{ + Address 0x02211E60 + Object FILE_2A1A00.o +} +Overlay overlay_57 +{ + Address 0x021D74E0 + Object FILE_2A6200.o +} +Overlay overlay_58 +{ + Address 0x021D9A20 + Object FILE_2A8800.o +} +Overlay overlay_59 +{ + Address 0x021D74E0 + Object FILE_2A9E00.o +} +Overlay overlay_60 +{ + Address 0x021D74E0 + Object FILE_2ACC00.o +} +Overlay overlay_61 +{ + Address 0x021D74E0 + Object FILE_2ADA00.o +} +Overlay overlay_62 +{ + Address 0x0222D5C0 + Object FILE_2AEC00.o +} +Overlay overlay_63 +{ + Address 0x021D74E0 + Object FILE_2B2A00.o +} +Overlay overlay_64 +{ + Address 0x021D74E0 + Object FILE_2B7600.o +} +Overlay overlay_65 +{ + Address 0x021D74E0 + Object FILE_2B9400.o +} +Overlay overlay_66 +{ + Address 0x021D74E0 + Object FILE_2BC400.o +} +Overlay overlay_67 +{ + Address 0x021D74E0 + Object FILE_2BEC00.o +} +Overlay overlay_68 +{ + Address 0x021D74E0 + Object FILE_2C1200.o +} +Overlay overlay_69 +{ + Address 0x0222D5C0 + Object FILE_2C2800.o +} +Overlay overlay_70 +{ + Address 0x021D74E0 + Object FILE_2C4C00.o +} +Overlay overlay_71 +{ + Address 0x0222D5C0 + Object FILE_2C5C00.o +} +Overlay overlay_72 +{ + Address 0x021D74E0 + Object FILE_2C9C00.o +} +Overlay overlay_73 +{ + Address 0x021D74E0 + Object FILE_2C9E00.o +} +Overlay overlay_74 +{ + Address 0x021D74E0 + Object FILE_2CEA00.o +} +Overlay overlay_75 +{ + Address 0x021E6BA0 + Object FILE_2CFE00.o +} +Overlay overlay_76 +{ + Address 0x021D74E0 + Object FILE_2D5C00.o +} +Overlay overlay_77 +{ + Address 0x021D74E0 + Object FILE_2D7C00.o +} +Overlay overlay_78 +{ + Address 0x021D74E0 + Object FILE_2D9800.o +} +Overlay overlay_79 +{ + Address 0x02211E60 + Object FILE_2D9E00.o +} +Overlay overlay_80 +{ + Address 0x0222D5C0 + Object FILE_2DF200.o +} +Overlay overlay_81 +{ + Address 0x02237E40 + Object FILE_2E9A00.o +} +Overlay overlay_82 +{ + Address 0x0222D5C0 + Object FILE_2EF000.o +} +Overlay overlay_83 +{ + Address 0x0222D5C0 + Object FILE_2F1600.o +} +Overlay overlay_84 +{ + Address 0x021D74E0 + Object FILE_2FFA00.o +} +Overlay overlay_85 +{ + Address 0x021D74E0 + Object FILE_303400.o +} +Overlay overlay_86 +{ + Address 0x021D74E0 + Object FILE_30C600.o +} diff --git a/arm9/arm9.sha1 b/arm9/arm9.sha1 index 3bc27b8a..dd825541 100644 --- a/arm9/arm9.sha1 +++ b/arm9/arm9.sha1 @@ -1 +1 @@ -f72681568e075a56beb25b584734a35d118468a1 build/arm9.bin +f72681568e075a56beb25b584734a35d118468a1 build/arm9.sbin diff --git a/arm9/asm/CARD_arm9.s b/arm9/asm/libcard.s index 664e85f5..664e85f5 100644 --- a/arm9/asm/CARD_arm9.s +++ b/arm9/asm/libcard.s diff --git a/arm9/asm/CP_arm9.s b/arm9/asm/libcp.s index c756e8e2..c756e8e2 100644 --- a/arm9/asm/CP_arm9.s +++ b/arm9/asm/libcp.s diff --git a/arm9/asm/CTRDG_arm9.s b/arm9/asm/libctrdg.s index 301ea233..301ea233 100644 --- a/arm9/asm/CTRDG_arm9.s +++ b/arm9/asm/libctrdg.s diff --git a/arm9/asm/DGT_arm9.s b/arm9/asm/libdgt.s index d5ef358d..d5ef358d 100644 --- a/arm9/asm/DGT_arm9.s +++ b/arm9/asm/libdgt.s diff --git a/arm9/asm/FS_arm9.s b/arm9/asm/libfs.s index d9b791b8..d9b791b8 100644 --- a/arm9/asm/FS_arm9.s +++ b/arm9/asm/libfs.s diff --git a/arm9/asm/MATH_arm9.s b/arm9/asm/libmath.s index 02dcfbcf..02dcfbcf 100644 --- a/arm9/asm/MATH_arm9.s +++ b/arm9/asm/libmath.s diff --git a/arm9/asm/MI_arm9.s b/arm9/asm/libmi.s index 82747b38..82747b38 100644 --- a/arm9/asm/MI_arm9.s +++ b/arm9/asm/libmi.s diff --git a/arm9/asm/PM_arm9.s b/arm9/asm/libpm.s index 331c0fa9..331c0fa9 100644 --- a/arm9/asm/PM_arm9.s +++ b/arm9/asm/libpm.s diff --git a/arm9/asm/PXI_arm9.s b/arm9/asm/libpxi.s index ab3af5de..ab3af5de 100644 --- a/arm9/asm/PXI_arm9.s +++ b/arm9/asm/libpxi.s diff --git a/arm9/asm/RTC_arm9.s b/arm9/asm/librtc.s index 8116f8de..8116f8de 100644 --- a/arm9/asm/RTC_arm9.s +++ b/arm9/asm/librtc.s diff --git a/arm9/asm/SND_arm9.s b/arm9/asm/libsnd.s index 99351712..99351712 100644 --- a/arm9/asm/SND_arm9.s +++ b/arm9/asm/libsnd.s diff --git a/arm9/asm/SPI_arm9.s b/arm9/asm/libspi.s index 915bb22c..915bb22c 100644 --- a/arm9/asm/SPI_arm9.s +++ b/arm9/asm/libspi.s diff --git a/arm9/asm/STD_arm9.s b/arm9/asm/libstd.s index 39946c46..39946c46 100644 --- a/arm9/asm/STD_arm9.s +++ b/arm9/asm/libstd.s diff --git a/arm9/asm/WM_arm9.s b/arm9/asm/libwm.s index cc3e7998..cc3e7998 100644 --- a/arm9/asm/WM_arm9.s +++ b/arm9/asm/libwm.s diff --git a/arm9/asm/secure.s b/arm9/asm/secure.s index f9d8f159..632f43bc 100644 --- a/arm9/asm/secure.s +++ b/arm9/asm/secure.s @@ -5,11 +5,11 @@ .incbin "baserom.nds", 0x4000, 0x19E - non_word_aligned_thumb_func_start FUN_0200019E -FUN_0200019E: ; 0x0200019E + non_word_aligned_thumb_func_start SVC_Sqrt +SVC_Sqrt: ; 0x0200019E swi 13 bx lr - thumb_func_end FUN_0200019E + thumb_func_end SVC_Sqrt .incbin "baserom.nds", 0x41A2, 0x15C @@ -20,7 +20,6 @@ FUN_020002FE: ; 0x020002FE .incbin "baserom.nds", 0x4302, 0x2F0 - non_word_aligned_thumb_func_start SVC_WaitByLoop SVC_WaitByLoop: swi 3 diff --git a/arm9/asm/unk_02006864.s b/arm9/asm/unk_02006864.s index f212d36f..fbfb90df 100644 --- a/arm9/asm/unk_02006864.s +++ b/arm9/asm/unk_02006864.s @@ -95240,7 +95240,7 @@ _02031CEE: bl FUN_02033590
cmp r0, #0x0
beq _02031D04
- blx FUN_021DDB08
+ bl FUN_021DDB08
mov r1, #0x3
sub r0, r1, r0
bl FUN_02033EEC
@@ -98149,10 +98149,10 @@ _020333AA: bne _020333C8
add r0, sp, #0x4
add r1, sp, #0x0
- blx FUN_021DD718
+ bl FUN_021DD718
cmp r0, #0x0
beq _020333E4
- blx FUN_021DD6F0
+ bl FUN_021DD6F0
add sp, #0x8
mov r0, #0x1
pop {r3, pc}
@@ -98161,7 +98161,7 @@ _020333C8: bne _020333E4
add r0, sp, #0x4
add r1, sp, #0x0
- blx FUN_021DD718
+ bl FUN_021DD718
cmp r0, #0x0
beq _020333E4
ldr r0, [sp, #0x0]
diff --git a/arm9/asm/unk_02046030.s b/arm9/asm/unk_02046030.s index 30b8ee4c..b70ef94e 100644 --- a/arm9/asm/unk_02046030.s +++ b/arm9/asm/unk_02046030.s @@ -107533,7 +107533,7 @@ FUN_020799F4: ; 0x020799F4 mul r0, r1
add r0, r2, r0
lsl r0, r0, #0x4
- bl FUN_0200019E
+ bl SVC_Sqrt
lsr r0, r0, #0x2
pop {r3, pc}
.balign 4
diff --git a/arm9/asm/unk_0208AC14.s b/arm9/asm/unk_0208AC14.s index 0adafb8b..8fbcff45 100644 --- a/arm9/asm/unk_0208AC14.s +++ b/arm9/asm/unk_0208AC14.s @@ -13644,7 +13644,9 @@ _02096C6C: mov r0, #0x0 add sp, sp, #0x4 ldmia sp!, {r4-r7,pc} -_02096C78: ; 0x02096C78 + + arm_func_start FUN_02096C78 +FUN_02096C78: ; 0x02096C78 ldr ip, _02096C8C ; =FUN_02097218 mov r3, r0 mov r0, r1 diff --git a/arm9/global.inc b/arm9/global.inc index ea11120a..3fe0bd01 100644 --- a/arm9/global.inc +++ b/arm9/global.inc @@ -50,7 +50,6 @@ .extern FS_UnloadOverlay
.extern FS_WaitAsync
.extern FUNRTC_Init
-.extern FUN_0200019E
.extern FUN_020002FE
.extern FUN_02000DF4
.extern FUN_02000E7C
@@ -611,6 +610,7 @@ .extern FUN_02022610
.extern FUN_0202263C
.extern FUN_02022720
+.extern FUN_020227A0
.extern FUN_020227FC
.extern FUN_02022800
.extern FUN_02022804
@@ -798,7 +798,10 @@ .extern FUN_02028174
.extern FUN_02028190
.extern FUN_020281B8
+.extern FUN_02028228
+.extern FUN_0202838C
.extern FUN_02028448
+.extern FUN_02028664
.extern FUN_020286EC
.extern FUN_02028700
.extern FUN_02028754
@@ -1027,6 +1030,7 @@ .extern FUN_020335B8
.extern FUN_020335F0
.extern FUN_02033678
+.extern FUN_020336A0
.extern FUN_020337E8
.extern FUN_0203384C
.extern FUN_02033E74
@@ -2379,16 +2383,106 @@ .extern FUN_0208B4A0
.extern FUN_02090CC8
.extern FUN_02090DB8
+.extern FUN_02095EC8
+.extern FUN_02095FA8
+.extern FUN_02096570
+.extern FUN_02096710
+.extern FUN_02096760
.extern FUN_02096B14
.extern FUN_02096B78
+.extern FUN_02096C78
+.extern FUN_02096C90
.extern FUN_02096CCC
.extern FUN_02096D2C
.extern FUN_02096DA0
+.extern FUN_02096EB4
+.extern FUN_02096EC0
.extern FUN_02096F18
.extern FUN_02096F80
.extern FUN_02096FB0
+.extern FUN_02097000
.extern FUN_0209700C
+.extern FUN_0209702C
+.extern FUN_0209703C
+.extern FUN_0209705C
+.extern FUN_020970CC
+.extern FUN_02097218
.extern FUN_020973B4
+.extern FUN_02097414
+.extern FUN_02097484
+.extern FUN_02097490
+.extern FUN_02097508
+.extern FUN_02099A94
+.extern FUN_02099C78
+.extern FUN_02099D88
+.extern FUN_0209A0AC
+.extern FUN_0209A174
+.extern FUN_0209A224
+.extern FUN_0209A27C
+.extern FUN_0209A2C0
+.extern FUN_0209A4B4
+.extern FUN_0209A504
+.extern FUN_0209A588
+.extern FUN_0209A594
+.extern FUN_0209A60C
+.extern FUN_0209A650
+.extern FUN_0209A6EC
+.extern FUN_0209A7D0
+.extern FUN_0209A858
+.extern FUN_0209A880
+.extern FUN_0209A91C
+.extern FUN_0209A944
+.extern FUN_0209A9A4
+.extern FUN_0209A9D0
+.extern FUN_0209AAD0
+.extern FUN_0209BF4C
+.extern FUN_0209BF9C
+.extern FUN_0209C030
+.extern FUN_0209C52C
+.extern FUN_0209C638
+.extern FUN_0209C7AC
+.extern FUN_0209C840
+.extern FUN_0209C934
+.extern FUN_0209CB24
+.extern FUN_0209CB44
+.extern FUN_0209CB78
+.extern FUN_0209CC10
+.extern FUN_0209CC28
+.extern FUN_020A02EC
+.extern FUN_020A136C
+.extern FUN_020A3688
+.extern FUN_020A374C
+.extern FUN_020A71F8
+.extern FUN_020A722C
+.extern FUN_020A7488
+.extern FUN_020A75C0
+.extern FUN_020A7820
+.extern FUN_020A7A90
+.extern FUN_020A7AC8
+.extern FUN_020A7BD4
+.extern FUN_020A7E0C
+.extern FUN_020A7E80
+.extern FUN_020A87E0
+.extern FUN_020A8850
+.extern FUN_020A8BA4
+.extern FUN_020A8BB0
+.extern FUN_020A8BBC
+.extern FUN_020AA760
+.extern FUN_020AA770
+.extern FUN_020AA7A0
+.extern FUN_020AA824
+.extern FUN_020AABDC
+.extern FUN_020AACFC
+.extern FUN_020AADCC
+.extern FUN_020ACAB0
+.extern FUN_020ACBA0
+.extern FUN_020ACC84
+.extern FUN_020ACD54
+.extern FUN_020AD144
+.extern FUN_020AD834
+.extern FUN_020AD8A8
+.extern FUN_020AD904
+.extern FUN_020AD93C
.extern FUN_020ADA84
.extern FUN_020ADA98
.extern FUN_020ADAB0
@@ -2528,6 +2622,12 @@ .extern FUN_020C10A4
.extern FUN_020C1148
.extern FUN_020C1180
+.extern FUN_020C13C4
+.extern FUN_020C1430
+.extern FUN_020C14AC
+.extern FUN_020C1674
+.extern FUN_020C169C
+.extern FUN_020C16FC
.extern FUN_020C1E58
.extern FUN_020C1E68
.extern FUN_020C1EA4
@@ -2555,31 +2655,72 @@ .extern FUN_020C6034
.extern FUN_020C605C
.extern FUN_021D74E0
+.extern FUN_021D7660
.extern FUN_021D76AC
.extern FUN_021D77C4
+.extern FUN_021D77E0
.extern FUN_021D7800
.extern FUN_021D78FC
.extern FUN_021D79B4
+.extern FUN_021D7A7C
+.extern FUN_021D7B14
+.extern FUN_021D7B48
+.extern FUN_021D7B6C
+.extern FUN_021D7B70
+.extern FUN_021D7BBC
+.extern FUN_021D7BC0
+.extern FUN_021D7C30
+.extern FUN_021D7C4C
.extern FUN_021D7CA4
+.extern FUN_021D7D68
+.extern FUN_021D7DA8
+.extern FUN_021D7DEC
+.extern FUN_021D7E18
+.extern FUN_021D7F20
.extern FUN_021D7F8C
.extern FUN_021D8018
+.extern FUN_021D8044
+.extern FUN_021D8058
.extern FUN_021D8164
.extern FUN_021D82BC
.extern FUN_021D8320
.extern FUN_021D836C
.extern FUN_021D83A8
.extern FUN_021D83C0
+.extern FUN_021D83F0
.extern FUN_021D844C
.extern FUN_021D8494
+.extern FUN_021D8558
+.extern FUN_021D8590
+.extern FUN_021D85A0
+.extern FUN_021D85B4
.extern FUN_021D85FC
.extern FUN_021D8624
.extern FUN_021D865C
+.extern FUN_021D868C
+.extern FUN_021D872C
+.extern FUN_021D8730
.extern FUN_021D8758
+.extern FUN_021D87D0
+.extern FUN_021D8818
.extern FUN_021D8820
+.extern FUN_021D8860
.extern FUN_021D88E4
+.extern FUN_021D8910
+.extern FUN_021D8944
.extern FUN_021D89CC
+.extern FUN_021D8A54
+.extern FUN_021D8A7C
.extern FUN_021D8B64
+.extern FUN_021D8BF0
+.extern FUN_021D8C08
.extern FUN_021D8C24
+.extern FUN_021D8C58
+.extern FUN_021D8C6C
+.extern FUN_021D8CC8
+.extern FUN_021D8CF0
+.extern FUN_021D8D04
+.extern FUN_021D8F08
.extern FUN_021D917C
.extern FUN_021D959C
.extern FUN_021D967C
@@ -2588,6 +2729,12 @@ .extern FUN_021D971C
.extern FUN_021D9820
.extern FUN_021D99F8
+.extern FUN_021D9C2C
+.extern FUN_021D9F78
+.extern FUN_021DA2F4
+.extern FUN_021DA334
+.extern FUN_021DA388
+.extern FUN_021DA3DC
.extern FUN_021DA464
.extern FUN_021DA4EC
.extern FUN_021DA54C
@@ -2598,6 +2745,7 @@ .extern FUN_021DA5D8
.extern FUN_021DA7B4
.extern FUN_021DAAA4
+.extern FUN_021DAB68
.extern FUN_021DAC70
.extern FUN_021DAE40
.extern FUN_021DAED4
@@ -2608,9 +2756,29 @@ .extern FUN_021DB7E8
.extern FUN_021DB858
.extern FUN_021DC174
+.extern FUN_021DCA84
.extern FUN_021DD6F0
.extern FUN_021DD718
+.extern FUN_021DD968
.extern FUN_021DDB08
+.extern FUN_021DDBBC
+.extern FUN_021DDC1C
+.extern FUN_021DDCE8
+.extern FUN_021DDD7C
+.extern FUN_021DDDCC
+.extern FUN_021DDE7C
+.extern FUN_021DDEE0
+.extern FUN_021DF95C
+.extern FUN_021DF978
+.extern FUN_021DFA40
+.extern FUN_021DFAF8
+.extern FUN_021DFB20
+.extern FUN_021DFD18
+.extern FUN_021DFDBC
+.extern FUN_021DFE64
+.extern FUN_021DFF74
+.extern FUN_021E0200
+.extern FUN_021E0374
.extern FUN_021E1374
.extern FUN_021E1858
.extern FUN_021E1994
@@ -2621,7 +2789,10 @@ .extern FUN_021E1F34
.extern FUN_021E1F58
.extern FUN_021E1F60
+.extern FUN_021E242C
+.extern FUN_021E2454
.extern FUN_021E2464
+.extern FUN_021E2578
.extern FUN_021E2608
.extern FUN_021E26CC
.extern FUN_021E27E8
@@ -2685,8 +2856,15 @@ .extern FUN_021E8588
.extern FUN_021E85E4
.extern FUN_021E85FC
+.extern FUN_021EA530
+.extern FUN_021EACF8
+.extern FUN_021EADD8
+.extern FUN_021EADF8
+.extern FUN_021EAE18
+.extern FUN_021EAE38
.extern FUN_021EAE90
.extern FUN_021EB044
+.extern FUN_021EB0FC
.extern FUN_021EC57C
.extern FUN_021EC71C
.extern FUN_021EC854
@@ -2747,6 +2925,10 @@ .extern FUN_021F61DC
.extern FUN_021F61E8
.extern FUN_02211E60
+.extern FUN_02213B08
+.extern FUN_02213D80
+.extern FUN_02213DBC
+.extern FUN_02213E24
.extern FUN_0222D5C0
.extern FUN_0222DAEC
.extern FUN_0222DD1C
@@ -3149,8 +3331,10 @@ .extern MATHi_CRC8InitTable
.extern MATHi_CalcHMAC
.extern MIC_DoSamplingAsync
+.extern MIC_GetLastSamplingAddress
.extern MIC_Init
.extern MIC_StartAutoSampling
+.extern MIC_StartAutoSamplingAsync
.extern MIC_StopAutoSampling
.extern MI_Copy36B
.extern MI_Copy48B
@@ -3259,6 +3443,7 @@ .extern OS_IrqHandler
.extern OS_IsAlarmAvailable
.extern OS_IsRunOnEmulator
+.extern OS_IsThreadAvailable
.extern OS_IsThreadTerminated
.extern OS_IsTickAvailable
.extern OS_JamMessage
@@ -3276,6 +3461,7 @@ .extern OS_RestoreInterrupts
.extern OS_RestoreInterrupts_IrqAndFiq
.extern OS_SNPrintf
+.extern OS_SPrintf
.extern OS_SaveContext
.extern OS_SendMessage
.extern OS_SetAlarm
@@ -3313,8 +3499,8 @@ .extern OSi_HeapInfo
.extern OSi_IdleThread
.extern OSi_IdleThreadStack
-.extern OSi_Initialized
.extern OSi_InitVramExclusive
+.extern OSi_Initialized
.extern OSi_IrqCallbackInfo
.extern OSi_IrqCallbackInfoIndex
.extern OSi_IrqDma0
@@ -3448,6 +3634,7 @@ .extern SND_UnlockChannel
.extern SND_WaitForCommandProc
.extern STD_CopyLString
+.extern SVC_Sqrt
.extern SVC_WaitByLoop
.extern ScriptCall
.extern ScriptJump
@@ -3463,6 +3650,7 @@ .extern StringLength
.extern StringNotEqual
.extern StringNotEqualN
+.extern THUNK_FUN_02099BC8
.extern TP_CheckError
.extern TP_GetCalibratedPoint
.extern TP_GetLatestIndexInAuto
@@ -3529,6 +3717,7 @@ .extern __call_static_initializers
.extern __close_console
.extern __destroy_global_chain
+.extern __msl_assertion_failed
.extern __read_console
.extern __write_console
.extern _d2f
@@ -3575,14 +3764,29 @@ .extern _u32_div_not_0_f
.extern _ull_mod
.extern abs
+.extern atod
+.extern atol
.extern cardi_common
.extern gScriptCmdTable
.extern memcmp
.extern memcpy
.extern memmove
+.extern rand
+.extern snprintf
+.extern sprintf
+.extern srand
+.extern sscanf
+.extern strcat
+.extern strchr
.extern strcmp
.extern strcpy
.extern strlen
+.extern strncmp
+.extern strncpy
+.extern strnicmp
+.extern strstr
+.extern strtold2
+.extern strtoul
.extern sys_exit
.extern sys_readc
.extern sys_writec
@@ -3590,8 +3794,11 @@ .extern tempName_NNS_FndCreateExpHeapEx
.extern thunk_FUN_02096e4c
.extern thunk_FUN_02097190
+.extern thunk_FUN_020995dc
+.extern thunk_FUN_0209996c
.extern thunk_FUN_020adc8c
.extern thunk_FUN_020adc8c_2
.extern thunk_FUN_020afda0
.extern thunk_FUN_020afda0_2
.extern thunk_FUN_020b5040
+.extern wcslen
diff --git a/arm9/modules/01/src/module_01.c b/arm9/modules/01/src/module_01.c new file mode 100644 index 00000000..86e50785 --- /dev/null +++ b/arm9/modules/01/src/module_01.c @@ -0,0 +1,12 @@ +#include "global.h" + +u32 UNK_021D7500[8]; + +void MOD01_021D74E0(void) +{ + UNK_021D7500[1]++; +} + +void (*UNK_021D74F0[4])(void) = { + MOD01_021D74E0 +}; diff --git a/arm9/modules/04/asm/arm_04.s b/arm9/modules/04/asm/arm_04.s new file mode 100644 index 00000000..8d1d699b --- /dev/null +++ b/arm9/modules/04/asm/arm_04.s @@ -0,0 +1,58947 @@ + .include "asm/macros.inc" + .include "global.inc" + .section .text + .balign 4, 0 + + arm_func_start FUN_021D8D18 +FUN_021D8D18: ; 0x021D8D18 + stmdb sp!, {r4, lr} + ldr r2, _021D8D58 ; =0x02210468 + ldr r1, _021D8D5C ; =0x000013D8 + ldr r2, [r2] + mov r4, r0 + add r0, r2, r1 + bl OS_LockMutex + ldr r2, _021D8D58 ; =0x02210468 + ldr r1, _021D8D5C ; =0x000013D8 + ldr r0, [r2] + add r0, r0, #0x1000 + str r4, [r0, #4] + ldr r0, [r2] + add r0, r0, r1 + bl OS_UnlockMutex + ldmia sp!, {r4, pc} + .align 2, 0 +_021D8D58: .word 0x02210468 +_021D8D5C: .word 0x000013D8 + + arm_func_start FUN_021D8D60 +FUN_021D8D60: ; 0x021D8D60 + stmdb sp!, {r4, r5, r6, lr} + sub sp, sp, #0x98 + ldr r4, _021D8EE0 ; =0x0221046C + mov r3, #0 + ldr r5, [r4, #4] + ldr ip, [r4] + cmp r5, r3 + mov r5, r0 + mov r6, r1 + mov r4, r2 + cmpeq ip, r3 + bne _021D8DC0 + ldr r0, _021D8EE4 ; =0x0220BEF8 + bl strlen + mov r3, r0 + ldr r1, _021D8EE8 ; =0x0220BF04 + ldr r2, _021D8EE4 ; =0x0220BEF8 + mov r0, r5 + bl FUN_021DAB68 + cmp r0, #0 + beq _021D8E18 + add sp, sp, #0x98 + mov r0, #8 + ldmia sp!, {r4, r5, r6, pc} +_021D8DC0: + ldr r0, _021D8EEC ; =0x0220BF0C + bl strlen + mov r3, r0 + ldr r1, _021D8EE8 ; =0x0220BF04 + ldr r2, _021D8EEC ; =0x0220BF0C + mov r0, r5 + bl FUN_021DAB68 + cmp r0, #0 + addne sp, sp, #0x98 + movne r0, #8 + ldmneia sp!, {r4, r5, r6, pc} + mov r0, r6 + bl strlen + mov r3, r0 + ldr r1, _021D8EF0 ; =0x0220BF14 + mov r0, r5 + mov r2, r6 + bl FUN_021DAB68 + cmp r0, #0 + addne sp, sp, #0x98 + movne r0, #8 + ldmneia sp!, {r4, r5, r6, pc} +_021D8E18: + ldr r1, _021D8EE0 ; =0x0221046C + add r0, sp, #0 + bl FUN_021D9F78 + cmp r0, #0 + addeq sp, sp, #0x98 + moveq r0, #5 + ldmeqia sp!, {r4, r5, r6, pc} + ldr r0, _021D8EF4 ; =0x0221048C + add r1, sp, #0 + ldr r2, [r0] + mov r0, r5 + bl FUN_021D9C2C + cmp r0, #0 + addeq sp, sp, #0x98 + moveq r0, #8 + ldmeqia sp!, {r4, r5, r6, pc} + ldr r0, _021D8EF8 ; =0x02210460 + ldr r0, [r0] + cmp r0, #1 + bne _021D8E94 + ldr r0, _021D8EFC ; =0x0220BF1C + bl strlen + mov r3, r0 + ldr r1, _021D8F00 ; =0x0220BF20 + ldr r2, _021D8EFC ; =0x0220BF1C + mov r0, r5 + bl FUN_021DAB68 + cmp r0, #0 + addne sp, sp, #0x98 + movne r0, #8 + ldmneia sp!, {r4, r5, r6, pc} +_021D8E94: + mov r0, r4 + bl wcslen + cmp r0, #0 + beq _021D8ED4 + mov r0, r4 + bl wcslen + mov r3, r0 + ldr r1, _021D8F04 ; =0x0220BF28 + mov r0, r5 + mov r2, r4 + mov r3, r3, lsl #1 + bl FUN_021DAB68 + cmp r0, #0 + addne sp, sp, #0x98 + movne r0, #8 + ldmneia sp!, {r4, r5, r6, pc} +_021D8ED4: + mov r0, #0 + add sp, sp, #0x98 + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +_021D8EE0: .word 0x0221046C +_021D8EE4: .word 0x0220BEF8 +_021D8EE8: .word 0x0220BF04 +_021D8EEC: .word 0x0220BF0C +_021D8EF0: .word 0x0220BF14 +_021D8EF4: .word 0x0221048C +_021D8EF8: .word 0x02210460 +_021D8EFC: .word 0x0220BF1C +_021D8F00: .word 0x0220BF20 +_021D8F04: .word 0x0220BF28 + + arm_func_start FUN_021D8F08 +FUN_021D8F08: ; 0x021D8F08 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #4 + ldr r0, _021D91BC ; =0x02210468 + mov r1, #0 + ldr r0, [r0] + str r1, [sp] + add r0, r0, #0x1000 + ldr r0, [r0, #0x314] + ldr r1, _021D91C0 ; =0x0220BF34 + bl FUN_021DA388 + str r0, [sp] + cmp r0, #0 + beq _021D8F40 + bl FUN_021DCA84 +_021D8F40: + ldr r0, _021D91BC ; =0x02210468 + mov r2, #0 + ldr r1, [r0] + ldr r0, _021D91C4 ; =0x021D74A8 + str r2, [sp] + str r2, [r0] + add r0, r1, #0x1000 + ldr r0, [r0, #0x314] + ldr r1, _021D91C8 ; =0x0220BF3C + bl FUN_021DA388 + bl atol + ldr r1, _021D91C4 ; =0x021D74A8 + ldr r1, [r1] + cmp r1, #0x22 + bne _021D8F9C + ldr r0, _021D91BC ; =0x02210468 + ldr r2, _021D91CC ; =0x00004E85 + ldr r1, [r0] + add sp, sp, #4 + add r1, r1, #0x1000 + str r2, [r1, #8] + mov r0, #0xc + ldmia sp!, {r4, r5, pc} +_021D8F9C: + cmp r0, #0xc8 + beq _021D8FC8 + ldr r2, _021D91BC ; =0x02210468 + ldr r1, _021D91D0 ; =0x000059D8 + ldr r2, [r2] + add r1, r0, r1 + add r0, r2, #0x1000 + str r1, [r0, #8] + add sp, sp, #4 + mov r0, #0x12 + ldmia sp!, {r4, r5, pc} +_021D8FC8: + ldr r0, _021D91BC ; =0x02210468 + ldr r2, _021D91D4 ; =0x0000100C + ldr r3, [r0] + ldr r1, _021D91D8 ; =0x0220BF48 + add r0, r3, #0x1000 + ldr r0, [r0, #0x314] + add r2, r3, r2 + mov r3, #4 + bl FUN_021DA334 + cmp r0, #0 + bgt _021D9014 + ldr r0, _021D91BC ; =0x02210468 + ldr r2, _021D91CC ; =0x00004E85 + ldr r1, [r0] + add sp, sp, #4 + add r1, r1, #0x1000 + str r2, [r1, #8] + mov r0, #0xe + ldmia sp!, {r4, r5, pc} +_021D9014: + ldr r1, _021D91BC ; =0x02210468 + ldr r0, _021D91D4 ; =0x0000100C + ldr r2, [r1] + add r1, sp, #0 + add r0, r2, r0 + mov r2, #0xa + bl strtold2 + ldr r2, _021D91BC ; =0x02210468 + ldr r1, _021D91D4 ; =0x0000100C + ldr r5, [r2] + mov r4, r0 + add r0, r5, r1 + bl strlen + ldr r1, _021D91D4 ; =0x0000100C + ldr r2, [sp] + add r1, r5, r1 + add r0, r1, r0 + cmp r2, r0 + ldrne r1, _021D91CC ; =0x00004E85 + addne r0, r5, #0x1000 + strne r1, [r0, #8] + addne sp, sp, #4 + movne r0, #0xc + ldmneia sp!, {r4, r5, pc} + ldr r0, _021D91DC ; =0x00004E20 + add r1, r5, #0x1000 + add r0, r4, r0 + str r0, [r1, #8] + cmp r4, #0x64 + bge _021D91B0 + ldr ip, _021D91BC ; =0x02210468 + mov r0, #0 + ldr r1, [ip] + ldr r5, _021D91E0 ; =0x00001052 + add r1, r1, #0x1000 + strb r0, [r1, #0x52] + ldr r2, [ip] + ldr r1, _021D91E4 ; =0x0220BF54 + add r2, r2, #0x1000 + strb r0, [r2, #0x1f] + ldr r2, [ip] + ldr r3, _021D91E8 ; =0x0000012D + add r2, r2, #0x1000 + strb r0, [r2, #0x17f] + ldr r2, [ip] + add r2, r2, #0x1000 + strb r0, [r2, #0x10] + ldr r2, [ip] + add r2, r2, #0x1000 + strb r0, [r2, #0x188] + ldr r2, [ip] + add r0, r2, #0x1000 + ldr r0, [r0, #0x314] + add r2, r2, r5 + bl FUN_021DA334 + ldr r0, _021D91BC ; =0x02210468 + ldr r2, _021D91EC ; =0x0000101F + ldr r3, [r0] + ldr r1, _021D91F0 ; =0x0220BF5C + add r0, r3, #0x1000 + add r2, r3, r2 + ldr r0, [r0, #0x314] + mov r3, #0x33 + bl FUN_021DA334 + ldr r0, _021D91BC ; =0x02210468 + ldr r2, _021D91F4 ; =0x0000117F + ldr r3, [r0] + ldr r1, _021D91F8 ; =0x0220BF64 + add r0, r3, #0x1000 + add r2, r3, r2 + ldr r0, [r0, #0x314] + mov r3, #9 + bl FUN_021DA334 + ldr r0, _021D91BC ; =0x02210468 + ldr r2, _021D91FC ; =0x00001010 + ldr r3, [r0] + ldr r1, _021D9200 ; =0x0220BF70 + add r0, r3, #0x1000 + add r2, r3, r2 + ldr r0, [r0, #0x314] + mov r3, #0xf + bl FUN_021DA334 + ldr r0, _021D91BC ; =0x02210468 + ldr r2, _021D9204 ; =0x00001188 + ldr r3, [r0] + ldr r1, _021D9208 ; =0x0220BF7C + add r0, r3, #0x1000 + add r2, r3, r2 + ldr r0, [r0, #0x314] + mov r3, #0x41 + bl FUN_021DA2F4 + ldr r0, _021D91BC ; =0x02210468 + mov r1, #0 + ldr r0, [r0] + cmp r4, #0x28 + add r0, r0, #0x1000 + strb r1, [r0, #0x1b3] + ldrne r0, _021D920C ; =0x02210464 + movne r1, #1 + strne r1, [r0] + ldreq r0, _021D920C ; =0x02210464 + moveq r1, #2 + streq r1, [r0] +_021D91B0: + mov r0, #0 + add sp, sp, #4 + ldmia sp!, {r4, r5, pc} + .align 2, 0 +_021D91BC: .word 0x02210468 +_021D91C0: .word 0x0220BF34 +_021D91C4: .word 0x021D74A8 +_021D91C8: .word 0x0220BF3C +_021D91CC: .word 0x00004E85 +_021D91D0: .word 0x000059D8 +_021D91D4: .word 0x0000100C +_021D91D8: .word 0x0220BF48 +_021D91DC: .word 0x00004E20 +_021D91E0: .word 0x00001052 +_021D91E4: .word 0x0220BF54 +_021D91E8: .word 0x0000012D +_021D91EC: .word 0x0000101F +_021D91F0: .word 0x0220BF5C +_021D91F4: .word 0x0000117F +_021D91F8: .word 0x0220BF64 +_021D91FC: .word 0x00001010 +_021D9200: .word 0x0220BF70 +_021D9204: .word 0x00001188 +_021D9208: .word 0x0220BF7C +_021D920C: .word 0x02210464 + + arm_func_start FUN_021D9210 +FUN_021D9210: ; 0x021D9210 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #4 + ldr r0, _021D93F4 ; =0x02210468 + mov r1, #0 + ldr r0, [r0] + add r2, r0, #0x1000 + ldr r0, [r2, #0x314] + ldr r5, [r2, #0x20c] + ldr r4, [r2, #0x210] + bl FUN_021DA3DC + cmp r0, #1 + beq _021D9260 + ldr r0, _021D93F4 ; =0x02210468 + ldr r2, _021D93F8 ; =0x00004E84 + ldr r1, [r0] + add sp, sp, #4 + add r1, r1, #0x1000 + str r2, [r1, #8] + mov r0, #0xe + ldmia sp!, {r4, r5, pc} +_021D9260: + bl FUN_021D8F08 + cmp r0, #0 + addne sp, sp, #4 + movne r0, #0xe + ldmneia sp!, {r4, r5, pc} + ldr r0, _021D93F4 ; =0x02210468 + ldr r1, _021D93F8 ; =0x00004E84 + ldr r0, [r0] + add r0, r0, #0x1000 + ldr r2, [r0, #8] + cmp r2, r1 + bge _021D9334 + ldr r0, _021D93FC ; =0x00004E22 + cmp r2, r0 + bne _021D9328 + ldr r0, _021D9400 ; =0x0220BF88 + ldr r1, _021D9404 ; =0x0000071F + blx r5 + movs r5, r0 + bne _021D92D0 + ldr r0, _021D93F4 ; =0x02210468 + ldr r2, _021D93F8 ; =0x00004E84 + ldr r1, [r0] + add sp, sp, #4 + add r1, r1, #0x1000 + str r2, [r1, #8] + mov r0, #2 + ldmia sp!, {r4, r5, pc} +_021D92D0: + add r1, r5, #0x1f + ldr r0, _021D9408 ; =0x0221046C + bic r1, r1, #0x1f + bl FUN_02096710 + cmp r0, #1 + beq _021D9318 + ldr r0, _021D940C ; =0x0220BF98 + mov r1, r5 + mov r2, #0 + blx r4 + ldr r0, _021D93F4 ; =0x02210468 + ldr r2, _021D93F8 ; =0x00004E84 + ldr r1, [r0] + add sp, sp, #4 + add r1, r1, #0x1000 + str r2, [r1, #8] + mov r0, #0xf + ldmia sp!, {r4, r5, pc} +_021D9318: + ldr r0, _021D940C ; =0x0220BF98 + mov r1, r5 + mov r2, #0 + blx r4 +_021D9328: + add sp, sp, #4 + mov r0, #0x15 + ldmia sp!, {r4, r5, pc} +_021D9334: + ldr r0, _021D9410 ; =0x00004E88 + cmp r2, r0 + beq _021D9350 + ldr r0, _021D9414 ; =0x00004E8C + cmp r2, r0 + beq _021D9378 + b _021D93E8 +_021D9350: + ldr r0, _021D9408 ; =0x0221046C + bl FUN_02096570 + ldr r0, _021D93F4 ; =0x02210468 + ldr r2, _021D9410 ; =0x00004E88 + ldr r1, [r0] + add sp, sp, #4 + add r1, r1, #0x1000 + str r2, [r1, #8] + mov r0, #0x10 + ldmia sp!, {r4, r5, pc} +_021D9378: + ldr r0, _021D9400 ; =0x0220BF88 + mov r1, #0x700 + blx r5 + movs r5, r0 + bne _021D93AC + ldr r0, _021D93F4 ; =0x02210468 + ldr r2, _021D9414 ; =0x00004E8C + ldr r1, [r0] + add sp, sp, #4 + add r1, r1, #0x1000 + str r2, [r1, #8] + mov r0, #0x11 + ldmia sp!, {r4, r5, pc} +_021D93AC: + add r0, r5, #0x1f + bic r0, r0, #0x1f + bl FUN_02096760 + ldr r0, _021D940C ; =0x0220BF98 + mov r1, r5 + mov r2, #0 + blx r4 + ldr r0, _021D93F4 ; =0x02210468 + ldr r2, _021D9414 ; =0x00004E8C + ldr r1, [r0] + add sp, sp, #4 + add r1, r1, #0x1000 + str r2, [r1, #8] + mov r0, #0x11 + ldmia sp!, {r4, r5, pc} +_021D93E8: + mov r0, #0x12 + add sp, sp, #4 + ldmia sp!, {r4, r5, pc} + .align 2, 0 +_021D93F4: .word 0x02210468 +_021D93F8: .word 0x00004E84 +_021D93FC: .word 0x00004E22 +_021D9400: .word 0x0220BF88 +_021D9404: .word 0x0000071F +_021D9408: .word 0x0221046C +_021D940C: .word 0x0220BF98 +_021D9410: .word 0x00004E88 +_021D9414: .word 0x00004E8C + + arm_func_start FUN_021D9418 +FUN_021D9418: ; 0x021D9418 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x14 + mov sb, #0 + mov r0, #1 + ldr r7, _021D96D4 ; =0x00001388 + ldr fp, _021D96D8 ; =0x000082EA + ldr r5, _021D96DC ; =0x02210468 + ldr r4, _021D96E0 ; =0x000013D8 + mov r6, sb + str sb, [sp, #8] + str sb, [sp, #0xc] + str r0, [sp, #4] +_021D9448: + ldr r0, [r5] + add r0, r0, #0x1000 + ldr r1, [r0, #0x314] + add r0, r1, #0x1000 + ldr r0, [r0, #0xba0] + cmp r0, #0 + beq _021D9470 + ldr r0, _021D96E4 ; =0x00001B34 + add r0, r1, r0 + bl OS_JoinThread +_021D9470: + ldr r0, [r5] + add r1, r0, #0x1000 + ldr r0, [r1, #0x314] + add r0, r0, #0x1000 + ldr r0, [r0, #0x20] + cmp r0, #8 + beq _021D9518 + ldr r0, _021D96E8 ; =0x00004E84 + str r0, [r1, #8] + ldr r0, [r5] + add r0, r0, #0x1000 + ldr r0, [r0, #0x314] + add r0, r0, #0x1000 + ldr r0, [r0, #0x20] + cmp r0, #7 + bne _021D94C0 + mov r0, #0x14 + bl FUN_021D8D18 + add sp, sp, #0x14 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +_021D94C0: + cmp sb, #2 + ble _021D9508 + cmp r0, #2 + bne _021D94E0 + mov r0, #9 + bl FUN_021D8D18 + add sp, sp, #0x14 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +_021D94E0: + cmp r0, #3 + bne _021D94F8 + mov r0, #0xb + bl FUN_021D8D18 + add sp, sp, #0x14 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +_021D94F8: + mov r0, #0xd + bl FUN_021D8D18 + add sp, sp, #0x14 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +_021D9508: + ldr r0, [sp, #4] + add sb, sb, #1 + str r0, [sp] + b _021D9598 +_021D9518: + bl FUN_021D9210 + cmp r0, #0x10 + beq _021D9544 + cmp r0, #0x11 + beq _021D956C + cmp r0, #0x15 + bne _021D9578 + mov r0, #0x15 + bl FUN_021D8D18 + add sp, sp, #0x14 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +_021D9544: + cmp sb, #2 + ble _021D955C + mov r0, #0x10 + bl FUN_021D8D18 + add sp, sp, #0x14 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +_021D955C: + ldr r0, [sp, #8] + add sb, sb, #1 + str r0, [sp] + b _021D9598 +_021D956C: + bl FUN_021D8D18 + add sp, sp, #0x14 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +_021D9578: + cmp sb, #2 + blt _021D958C + bl FUN_021D8D18 + add sp, sp, #0x14 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +_021D958C: + ldr r0, [sp, #4] + add sb, sb, #1 + str r0, [sp] +_021D9598: + bl OS_GetTick + mov r8, r0 + mov sl, r1 + bl OS_GetTick + subs r2, r0, r8 + sbc r0, r1, sl + mov r1, r0, lsl #6 + ldr r3, [sp, #0xc] + orr r1, r1, r2, lsr #26 + mov r0, r2, lsl #6 + mov r2, fp + bl _ll_udiv + cmp r1, #0 + cmpeq r0, r7 + bhs _021D965C +_021D95D4: + ldr r0, [r5] + add r0, r0, r4 + bl OS_LockMutex + ldr r2, [r5] + add r1, r2, #0x1000 + ldr r0, [r1, #0x3f0] + cmp r0, #1 + bne _021D961C + ldr r2, _021D96E8 ; =0x00004E84 + ldr r0, _021D96E0 ; =0x000013D8 + str r2, [r1, #8] + ldr r1, [r5] + add r0, r1, r0 + bl OS_UnlockMutex + mov r0, #0x14 + bl FUN_021D8D18 + add sp, sp, #0x14 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +_021D961C: + add r0, r2, r4 + bl OS_UnlockMutex + mov r0, r7 + bl OS_Sleep + bl OS_GetTick + subs r2, r0, r8 + sbc r0, r1, sl + mov r1, r0, lsl #6 + orr r1, r1, r2, lsr #26 + mov r0, r2, lsl #6 + mov r2, fp + mov r3, r6 + bl _ll_udiv + cmp r1, #0 + cmpeq r0, r7 + blo _021D95D4 +_021D965C: + ldr r0, [r5] + add r0, r0, #0x1000 + ldr r0, [r0, #0x314] + bl FUN_021DAE4C + ldr r0, [r5] + add r0, r0, r4 + bl OS_LockMutex + ldr r0, [sp] + bl FUN_021D96EC + ldr r1, [r5] + add r1, r1, #0x1000 + str r0, [r1, #4] + ldr r2, [r5] + add r1, r2, #0x1000 + ldr r0, [r1, #4] + cmp r0, #0 + beq _021D96C0 + ldr r2, _021D96E8 ; =0x00004E84 + ldr r0, _021D96E0 ; =0x000013D8 + str r2, [r1, #8] + ldr r1, [r5] + add r0, r1, r0 + bl OS_UnlockMutex + add sp, sp, #0x14 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +_021D96C0: + add r0, r2, r4 + bl OS_UnlockMutex + b _021D9448 + + arm_func_start FUN_021D96CC +FUN_021D96CC: ; 0x021D96CC + add sp, sp, #0x14 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_021D96D4: .word 0x00001388 +_021D96D8: .word 0x000082EA +_021D96DC: .word 0x02210468 +_021D96E0: .word 0x000013D8 +_021D96E4: .word 0x00001B34 +_021D96E8: .word 0x00004E84 + + arm_func_start FUN_021D96EC +FUN_021D96EC: ; 0x021D96EC + stmdb sp!, {r4, lr} + ldr r1, _021D97E0 ; =0x0220BEB4 + mov r4, r0 + ldr r0, [r1] + ldr r1, _021D97E4 ; =0x0220BFA4 + bl strcmp + cmp r0, #0 + ldrne r0, _021D97E0 ; =0x0220BEB4 + movne r1, #1 + strne r1, [r0, #0x14] + ldr r0, _021D97E8 ; =0x02210468 + ldr r1, _021D97E0 ; =0x0220BEB4 + ldr r0, [r0] + add r0, r0, #0x1000 + ldr r2, [r0, #0x20c] + str r2, [r1, #0xc] + ldr r2, [r0, #0x210] + str r2, [r1, #0x10] + ldr r0, [r0, #0x314] + bl FUN_021DB608 + cmp r0, #0 + movne r0, #4 + ldmneia sp!, {r4, pc} + cmp r4, #1 + bne _021D9758 + ldr r0, _021D97EC ; =0x0221046C + bl FUN_02095EC8 +_021D9758: + ldr r0, _021D97E8 ; =0x02210468 + ldr r2, _021D97F0 ; =0x000011CC + ldr r3, [r0] + add r0, r3, #0x1000 + ldr r0, [r0, #0x314] + add r1, r3, #0x1200 + add r2, r3, r2 + bl FUN_021D8D60 + ldr r2, _021D97E8 ; =0x02210468 + ldr r1, [r2] + add r1, r1, #0x1000 + str r0, [r1, #4] + ldr r0, [r2] + add r0, r0, #0x1000 + ldr r1, [r0, #4] + cmp r1, #0 + movne r0, #4 + ldmneia sp!, {r4, pc} + ldr r0, [r0, #0x314] + bl FUN_021DB570 + cmp r0, #0 + movne r0, #4 + ldmneia sp!, {r4, pc} + ldr r0, _021D97F4 ; =0x021D3498 + ldr r0, [r0, #4] + bl OS_GetThreadPriority + ldr r1, _021D97E8 ; =0x02210468 + ldr r2, [r1] + sub r1, r0, #1 + add r0, r2, #0x1000 + ldr r0, [r0, #0x314] + bl FUN_021DB4A4 + mov r0, #0 + ldmia sp!, {r4, pc} + .align 2, 0 +_021D97E0: .word 0x0220BEB4 +_021D97E4: .word 0x0220BFA4 +_021D97E8: .word 0x02210468 +_021D97EC: .word 0x0221046C +_021D97F0: .word 0x000011CC +_021D97F4: .word 0x021D3498 + + arm_func_start FUN_021D97F8 +FUN_021D97F8: ; 0x021D97F8 + stmdb sp!, {r4, lr} + ldr r1, _021D9874 ; =0x02210468 + mov r4, r0 + ldr r1, [r1] + cmp r1, #0 + bne _021D981C + mov r1, #0 + mov r2, #0x1c4 + bl MI_CpuFill8 +_021D981C: + ldr r1, _021D9874 ; =0x02210468 + ldr r0, _021D9878 ; =0x00001008 + ldr r2, [r1] + mov r1, r4 + add r0, r2, r0 + mov r2, #0x1c4 + bl MI_CpuCopy8 + ldr r1, [r4] + ldr r0, _021D987C ; =0x00004E20 + cmp r1, r0 + blt _021D9854 + ldr r0, _021D9880 ; =0x00007530 + cmp r1, r0 + blt _021D985C +_021D9854: + ldr r0, _021D9884 ; =0x00005206 + str r0, [r4] +_021D985C: + ldr r1, [r4] + ldr r0, _021D9888 ; =0x00004E84 + cmp r1, r0 + rsbge r0, r1, #0 + strge r0, [r4] + ldmia sp!, {r4, pc} + .align 2, 0 +_021D9874: .word 0x02210468 +_021D9878: .word 0x00001008 +_021D987C: .word 0x00004E20 +_021D9880: .word 0x00007530 +_021D9884: .word 0x00005206 +_021D9888: .word 0x00004E84 + + arm_func_start FUN_021D988C +FUN_021D988C: ; 0x021D988C + stmdb sp!, {r4, lr} + ldr r0, _021D98D4 ; =0x02210468 + ldr r1, [r0] + cmp r1, #0 + moveq r0, #0x16 + ldmeqia sp!, {r4, pc} + ldr r0, _021D98D8 ; =0x000013D8 + add r0, r1, r0 + bl OS_LockMutex + ldr r1, _021D98D4 ; =0x02210468 + ldr r0, _021D98D8 ; =0x000013D8 + ldr r2, [r1] + add r1, r2, #0x1000 + add r0, r2, r0 + ldr r4, [r1, #4] + bl OS_UnlockMutex + mov r0, r4 + ldmia sp!, {r4, pc} + .align 2, 0 +_021D98D4: .word 0x02210468 +_021D98D8: .word 0x000013D8 + + arm_func_start FUN_021D98DC +FUN_021D98DC: ; 0x021D98DC + stmdb sp!, {lr} + sub sp, sp, #4 + ldr r0, _021D9914 ; =0x02210468 + ldr r1, [r0] + add r0, r1, #0x1000 + ldr r0, [r0, #0x384] + cmp r0, #0 + addeq sp, sp, #4 + ldmeqia sp!, {pc} + ldr r0, _021D9918 ; =0x00001318 + add r0, r1, r0 + bl OS_JoinThread + add sp, sp, #4 + ldmfd sp!, {pc} + .align 2, 0 +_021D9914: .word 0x02210468 +_021D9918: .word 0x00001318 + + arm_func_start FUN_021D991C +FUN_021D991C: ; 0x021D991C + stmdb sp!, {r4, lr} + ldr r0, _021D996C ; =0x02210468 + ldr r0, [r0] + cmp r0, #0 + ldmeqia sp!, {r4, pc} + add r1, r0, #0x1000 + ldr r0, [r1, #0x314] + ldr r4, [r1, #0x210] + cmp r0, #0 + beq _021D9948 + bl FUN_021DAE4C +_021D9948: + ldr r1, _021D996C ; =0x02210468 + ldr r0, _021D9970 ; =0x0220BFC4 + ldr r1, [r1] + mov r2, #0 + blx r4 + ldr r0, _021D996C ; =0x02210468 + mov r1, #0 + str r1, [r0] + ldmia sp!, {r4, pc} + .align 2, 0 +_021D996C: .word 0x02210468 +_021D9970: .word 0x0220BFC4 + + arm_func_start FUN_021D9974 +FUN_021D9974: ; 0x021D9974 + stmdb sp!, {lr} + sub sp, sp, #4 + ldr r0, _021D9A0C ; =0x02210468 + ldr r1, [r0] + cmp r1, #0 + addeq sp, sp, #4 + ldmeqia sp!, {pc} + ldr r0, _021D9A10 ; =0x000013D8 + add r0, r1, r0 + bl OS_LockMutex + ldr r2, _021D9A0C ; =0x02210468 + mov r3, #1 + ldr r0, [r2] + ldr r1, _021D9A10 ; =0x000013D8 + add r0, r0, #0x1000 + str r3, [r0, #0x3f0] + ldr r0, [r2] + add r0, r0, r1 + bl OS_UnlockMutex + ldr r0, _021D9A0C ; =0x02210468 + ldr r0, [r0] + add r0, r0, #0x1000 + ldr r0, [r0, #0x314] + cmp r0, #0 + beq _021D99DC + bl FUN_021DB440 +_021D99DC: + ldr r0, _021D9A0C ; =0x02210468 + ldr r1, [r0] + add r0, r1, #0x1000 + ldr r0, [r0, #0x384] + cmp r0, #0 + addeq sp, sp, #4 + ldmeqia sp!, {pc} + ldr r0, _021D9A14 ; =0x00001318 + add r0, r1, r0 + bl OS_JoinThread + add sp, sp, #4 + ldmfd sp!, {pc} + .align 2, 0 +_021D9A0C: .word 0x02210468 +_021D9A10: .word 0x000013D8 +_021D9A14: .word 0x00001318 + + arm_func_start FUN_021D9A18 +FUN_021D9A18: ; 0x021D9A18 + stmdb sp!, {lr} + sub sp, sp, #0xc + ldr r1, _021D9ABC ; =0x02210468 + ldr r0, _021D9AC0 ; =0x000013D8 + ldr r1, [r1] + add r0, r1, r0 + bl OS_InitMutex + ldr r1, _021D9ABC ; =0x02210468 + mov r2, #0 + ldr r0, [r1] + add r0, r0, #0x1000 + str r2, [r0, #0x3f0] + ldr r1, [r1] + add r0, r1, #0x1000 + ldr r0, [r0, #0x384] + cmp r0, #0 + beq _021D9A74 + ldr r0, _021D9AC4 ; =0x00001318 + add r0, r1, r0 + bl OS_IsThreadTerminated + cmp r0, #0 + addeq sp, sp, #0xc + ldmeqia sp!, {pc} +_021D9A74: + ldr r2, _021D9ABC ; =0x02210468 + ldr r0, _021D9AC4 ; =0x00001318 + ldr lr, [r2] + mov r3, #0x1000 + ldr r1, _021D9AC8 ; =FUN_021D9418 + str r3, [sp] + mov ip, #0x10 + add r0, lr, r0 + add r3, lr, #0x1000 + str ip, [sp, #4] + bl OS_CreateThread + ldr r1, _021D9ABC ; =0x02210468 + ldr r0, _021D9AC4 ; =0x00001318 + ldr r1, [r1] + add r0, r1, r0 + bl OS_WakeupThreadDirect + add sp, sp, #0xc + ldmfd sp!, {pc} + .align 2, 0 +_021D9ABC: .word 0x02210468 +_021D9AC0: .word 0x000013D8 +_021D9AC4: .word 0x00001318 +_021D9AC8: .word FUN_021D9418 + + arm_func_start FUN_021D9ACC +FUN_021D9ACC: ; 0x021D9ACC + stmdb sp!, {r4, r5, lr} + sub sp, sp, #4 + ldr r2, _021D9BFC ; =0x02210468 + mov r5, r0 + ldr r0, [r2] + mov r4, r1 + cmp r0, #0 + addne sp, sp, #4 + ldr r2, [r5, #0x40] + movne r0, #2 + ldmneia sp!, {r4, r5, pc} + ldr r0, _021D9C00 ; =0x0220BFD4 + ldr r1, _021D9C04 ; =0x000013F4 + blx r2 + ldr r1, _021D9BFC ; =0x02210468 + cmp r0, #0 + str r0, [r1] + addeq sp, sp, #4 + moveq r0, #2 + ldmeqia sp!, {r4, r5, pc} + ldr r2, _021D9C04 ; =0x000013F4 + mov r1, #0 + bl MI_CpuFill8 + ldr r1, _021D9BFC ; =0x02210468 + ldr r2, _021D9C08 ; =0x00001008 + ldr r0, [r1] + ldr r3, _021D9C0C ; =0x02210464 + add r0, r0, #0x1000 + str r4, [r0, #0x314] + ldr r0, [r1] + mov r1, #0 + add r0, r0, r2 + mov r2, #0x1c4 + str r1, [r3] + bl MI_CpuFill8 + ldr r2, _021D9BFC ; =0x02210468 + ldr r3, _021D9C10 ; =0x00004E84 + ldr r0, [r2] + ldr r1, _021D9C14 ; =0x000011CC + add r0, r0, #0x1000 + str r3, [r0, #8] + ldr lr, [r2] + mov r4, #4 + add ip, lr, r1 +_021D9B7C: + ldmia r5!, {r0, r1, r2, r3} + stmia ip!, {r0, r1, r2, r3} + subs r4, r4, #1 + bne _021D9B7C + ldmia r5, {r0, r1} + stmia ip, {r0, r1} + add r0, lr, #0x1100 + mov r2, #0 + strh r2, [r0, #0xfe] + ldr r1, _021D9BFC ; =0x02210468 + mov r0, #1 + ldr r1, [r1] + add r1, r1, #0x1000 + strb r2, [r1, #0x20b] + bl FUN_021D96EC + ldr r2, _021D9BFC ; =0x02210468 + ldr r1, [r2] + add r1, r1, #0x1000 + str r0, [r1, #4] + ldr r0, [r2] + add r0, r0, #0x1000 + ldr r0, [r0, #4] + cmp r0, #0 + addne sp, sp, #4 + ldmneia sp!, {r4, r5, pc} + ldr r0, _021D9C18 ; =0x02210460 + mov r1, #0 + str r1, [r0] + bl FUN_021D9A18 + mov r0, #0 + add sp, sp, #4 + ldmia sp!, {r4, r5, pc} + .align 2, 0 +_021D9BFC: .word 0x02210468 +_021D9C00: .word 0x0220BFD4 +_021D9C04: .word 0x000013F4 +_021D9C08: .word 0x00001008 +_021D9C0C: .word 0x02210464 +_021D9C10: .word 0x00004E84 +_021D9C14: .word 0x000011CC +_021D9C18: .word 0x02210460 + + arm_func_start FUN_021D9C1C +FUN_021D9C1C: ; 0x021D9C1C + ldr r1, _021D9C28 ; =0x0220BEB4 + str r0, [r1] + bx lr + .align 2, 0 +_021D9C28: .word 0x0220BEB4 + + arm_func_start FUN_021D9C2C +FUN_021D9C2C: ; 0x021D9C2C + stmdb sp!, {r4, r5, r6, lr} + sub sp, sp, #0x28 + mov r4, r2 + mov r6, r0 + mov r5, r1 + mov ip, #2 + ldr r2, _021D9F30 ; =0x0220BFE4 + add r0, sp, #4 + mov r1, #0x21 + mov r3, #1 + str ip, [sp] + bl OS_SNPrintf + add r0, sp, #4 + bl strlen + mov r3, r0 + ldr r1, _021D9F34 ; =0x0220BFF0 + mov r0, r6 + add r2, sp, #4 + bl FUN_021DAB68 + cmp r0, #0 + addne sp, sp, #0x28 + movne r0, #0 + ldmneia sp!, {r4, r5, r6, pc} + mov r0, r5 + bl strlen + mov r3, r0 + ldr r1, _021D9F38 ; =0x0220BFF8 + mov r0, r6 + mov r2, r5 + bl FUN_021DAB68 + cmp r0, #0 + addne sp, sp, #0x28 + movne r0, #0 + ldmneia sp!, {r4, r5, r6, pc} + add r0, r5, #0xe + bl strlen + mov r3, r0 + ldr r1, _021D9F3C ; =0x0220C000 + mov r0, r6 + add r2, r5, #0xe + bl FUN_021DAB68 + cmp r0, #0 + addne sp, sp, #0x28 + movne r0, #0 + ldmneia sp!, {r4, r5, r6, pc} + add r0, r5, #0x41 + bl strlen + mov r3, r0 + ldr r1, _021D9F40 ; =0x0220C008 + mov r0, r6 + add r2, r5, #0x41 + bl FUN_021DAB68 + cmp r0, #0 + addne sp, sp, #0x28 + movne r0, #0 + ldmneia sp!, {r4, r5, r6, pc} + add r0, r5, #0x6f + bl strlen + mov r3, r0 + ldr r1, _021D9F44 ; =0x0220C010 + mov r0, r6 + add r2, r5, #0x6f + bl FUN_021DAB68 + cmp r0, #0 + addne sp, sp, #0x28 + movne r0, #0 + ldmneia sp!, {r4, r5, r6, pc} + add r0, r5, #0x15 + bl strlen + mov r3, r0 + ldr r1, _021D9F48 ; =0x0220C018 + mov r0, r6 + add r2, r5, #0x15 + bl FUN_021DAB68 + cmp r0, #0 + addne sp, sp, #0x28 + movne r0, #0 + ldmneia sp!, {r4, r5, r6, pc} + add r0, r5, #0x1a + bl strlen + mov r3, r0 + ldr r1, _021D9F4C ; =0x0220C020 + mov r0, r6 + add r2, r5, #0x1a + bl FUN_021DAB68 + cmp r0, #0 + addne sp, sp, #0x28 + movne r0, #0 + ldmneia sp!, {r4, r5, r6, pc} + add r0, r5, #0x1d + bl strlen + mov r3, r0 + ldr r1, _021D9F50 ; =0x0220C028 + mov r0, r6 + add r2, r5, #0x1d + bl FUN_021DAB68 + cmp r0, #0 + addne sp, sp, #0x28 + movne r0, #0 + ldmneia sp!, {r4, r5, r6, pc} + add r0, r5, #0x1f + bl strlen + mov r3, r0 + ldr r1, _021D9F54 ; =0x0220C030 + mov r0, r6 + add r2, r5, #0x1f + bl FUN_021DAB68 + cmp r0, #0 + addne sp, sp, #0x28 + movne r0, #0 + ldmneia sp!, {r4, r5, r6, pc} + add r0, r5, #0x2c + bl strlen + mov r3, r0 + ldr r1, _021D9F58 ; =0x0220C038 + mov r0, r6 + add r2, r5, #0x2c + bl FUN_021DAB68 + cmp r0, #0 + addne sp, sp, #0x28 + movne r0, #0 + ldmneia sp!, {r4, r5, r6, pc} + add r0, r5, #0x2f + bl strlen + mov r3, r0 + ldr r1, _021D9F5C ; =0x0220C040 + mov r0, r6 + add r2, r5, #0x2f + bl FUN_021DAB68 + cmp r0, #0 + addne sp, sp, #0x28 + movne r0, #0 + ldmneia sp!, {r4, r5, r6, pc} + add r0, r5, #0x34 + bl strlen + mov r3, r0 + ldr r1, _021D9F60 ; =0x0220C048 + mov r0, r6 + add r2, r5, #0x34 + bl FUN_021DAB68 + cmp r0, #0 + addne sp, sp, #0x28 + movne r0, #0 + ldmneia sp!, {r4, r5, r6, pc} + add r0, r5, #0x7e + bl wcslen + mov r3, r0 + ldr r1, _021D9F64 ; =0x0220C050 + mov r0, r6 + add r2, r5, #0x7e + mov r3, r3, lsl #1 + bl FUN_021DAB68 + cmp r0, #0 + addne sp, sp, #0x28 + movne r0, #0 + ldmneia sp!, {r4, r5, r6, pc} + cmp r4, #1 + bne _021D9ED0 + add r0, r5, #0x4e + bl strlen + mov r3, r0 + ldr r1, _021D9F68 ; =0x0220C058 + mov r0, r6 + add r2, r5, #0x4e + bl FUN_021DAB68 + cmp r0, #0 + addne sp, sp, #0x28 + movne r0, #0 + ldmneia sp!, {r4, r5, r6, pc} +_021D9ED0: + ldr r2, _021D9F6C ; =0x0220C060 + mov ip, #2 + add r0, sp, #4 + mov r1, #0x21 + mov r3, #1 + str ip, [sp] + bl OS_SNPrintf + ldr r1, _021D9F70 ; =0x0220C078 + add r2, sp, #4 + mov r0, r6 + bl FUN_021DAC98 + cmp r0, #0 + addne sp, sp, #0x28 + movne r0, #0 + ldmneia sp!, {r4, r5, r6, pc} + ldr r1, _021D9F74 ; =0x0220C084 + mov r0, r6 + add r2, r5, #0x15 + bl FUN_021DAC98 + cmp r0, #0 + moveq r0, #1 + movne r0, #0 + add sp, sp, #0x28 + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +_021D9F30: .word 0x0220BFE4 +_021D9F34: .word 0x0220BFF0 +_021D9F38: .word 0x0220BFF8 +_021D9F3C: .word 0x0220C000 +_021D9F40: .word 0x0220C008 +_021D9F44: .word 0x0220C010 +_021D9F48: .word 0x0220C018 +_021D9F4C: .word 0x0220C020 +_021D9F50: .word 0x0220C028 +_021D9F54: .word 0x0220C030 +_021D9F58: .word 0x0220C038 +_021D9F5C: .word 0x0220C040 +_021D9F60: .word 0x0220C048 +_021D9F64: .word 0x0220C050 +_021D9F68: .word 0x0220C058 +_021D9F6C: .word 0x0220C060 +_021D9F70: .word 0x0220C078 +_021D9F74: .word 0x0220C084 + + arm_func_start FUN_021D9F78 +FUN_021D9F78: ; 0x021D9F78 + stmdb sp!, {r4, r5, r6, r7, r8, sb, lr} + sub sp, sp, #0x8c + mov r6, r1 + mov r1, #0 + mov r2, #0x94 + mov r4, r0 + bl MI_CpuFill8 + ldr r3, [r6] + ldr r5, [r6, #4] + mov r0, #0 + cmp r5, r0 + cmpeq r3, r0 + beq _021D9FC4 + ldr r2, _021DA218 ; =0x0220C094 + mov r0, r4 + mov r1, #0xe + str r5, [sp] + bl OS_SNPrintf + b _021D9FE0 +_021D9FC4: + ldr r3, [r6, #8] + ldr r5, [r6, #0xc] + ldr r2, _021DA218 ; =0x0220C094 + mov r0, r4 + mov r1, #0xe + str r5, [sp] + bl OS_SNPrintf +_021D9FE0: + ldrh r3, [r6, #0x10] + ldr r2, _021DA21C ; =0x0220C09C + add r0, r4, #0xe + mov r1, #7 + bl OS_SNPrintf + ldr r0, _021DA220 ; =0x027FFE0C + ldrb r0, [r0] + cmp r0, #0 + bne _021DA008 + bl OS_Terminate +_021DA008: + ldr r0, _021DA220 ; =0x027FFE0C + add r1, r4, #0x15 + mov r2, #4 + bl MI_CpuCopy8 + ldr r0, _021DA224 ; =0x027FFE10 + ldrb r0, [r0] + cmp r0, #0 + bne _021DA02C + bl OS_Terminate +_021DA02C: + ldr r0, _021DA224 ; =0x027FFE10 + add r1, r4, #0x1a + mov r2, #2 + bl MI_CpuCopy8 + mov r1, #0x30 + add r0, sp, #0x16 + strb r1, [r4, #0x1d] + bl OS_GetMacAddress + ldr r5, _021DA228 ; =0x0220C0A4 + add r7, sp, #0x16 + add r6, r4, #0x1f + mov r8, #0 +_021DA05C: + ldrb r2, [r7] + mov r0, r6 + mov r1, r5 + bl OS_SPrintf + add r8, r8, #1 + cmp r8, #6 + add r7, r7, #1 + add r6, r6, #2 + blt _021DA05C + add r0, sp, #0x38 + bl OS_GetOwnerInfo + ldrb r0, [sp, #0x38] + ldr r2, _021DA228 ; =0x0220C0A4 + mov r1, #3 + cmp r0, #6 + movhi r0, #1 + strhib r0, [sp, #0x38] + ldrb r3, [sp, #0x38] + add r0, r4, #0x2c + bl OS_SNPrintf + add r0, sp, #0x3c + add r1, r4, #0x7e + mov r2, #0x14 + bl MI_CpuCopy8 + ldrb r1, [sp, #0x3b] + ldr r2, _021DA22C ; =0x0220C0AC + add r0, r4, #0x2f + str r1, [sp] + ldrb r3, [sp, #0x3a] + mov r1, #5 + bl OS_SNPrintf + add r0, sp, #0x1c + bl RTC_GetDate + cmp r0, #0 + bne _021DA0F8 + add r0, sp, #0x2c + bl RTC_GetTime + cmp r0, #0 + beq _021DA104 +_021DA0F8: + add sp, sp, #0x8c + mov r0, #0 + ldmia sp!, {r4, r5, r6, r7, r8, sb, pc} +_021DA104: + ldr r0, [sp, #0x20] + ldr r2, _021DA230 ; =0x0220C0B8 + str r0, [sp] + ldr r1, [sp, #0x24] + add r0, r4, #0x34 + str r1, [sp, #4] + ldr r3, [sp, #0x2c] + mov r1, #0xd + str r3, [sp, #8] + ldr r3, [sp, #0x30] + str r3, [sp, #0xc] + ldr r3, [sp, #0x34] + str r3, [sp, #0x10] + ldr r3, [sp, #0x1c] + bl OS_SNPrintf + bl OS_DisableInterrupts + mov sb, r0 + bl FUN_020A8850 + mov r8, r0 + mov r1, #6 + bl DC_InvalidateRange + cmp r8, #0 + bne _021DA174 + mov r0, sb + bl OS_RestoreInterrupts + add sp, sp, #0x8c + mov r0, #0 + ldmia sp!, {r4, r5, r6, r7, r8, sb, pc} +_021DA174: + add r7, r4, #0x41 + mov r6, #0 + ldr r5, _021DA228 ; =0x0220C0A4 +_021DA180: + ldrb r2, [r8, r6] + mov r0, r7 + mov r1, r5 + bl OS_SPrintf + add r6, r6, #1 + cmp r6, #6 + add r7, r7, #2 + blt _021DA180 + bl FUN_021EBAB8 + mov r3, r0 + ldr r2, _021DA234 ; =0x0220C0D4 + add r0, r4, #0x6f + mov r1, #0xe + bl OS_SNPrintf + add r0, sp, #0x14 + bl FUN_020A87E0 + mov r5, r0 + mov r1, #0x20 + bl DC_InvalidateRange + cmp r5, #0 + bne _021DA1E8 + mov r0, sb + bl OS_RestoreInterrupts + add sp, sp, #0x8c + mov r0, #0 + ldmia sp!, {r4, r5, r6, r7, r8, sb, pc} +_021DA1E8: + mov r0, r5 + add r1, r4, #0x72 + bl FUN_021EE5F4 + mov r0, r5 + add r1, r4, #0x4e + mov r2, #0x20 + bl MI_CpuCopy8 + mov r0, sb + bl OS_RestoreInterrupts + mov r0, #1 + add sp, sp, #0x8c + ldmia sp!, {r4, r5, r6, r7, r8, sb, pc} + .align 2, 0 +_021DA218: .word 0x0220C094 +_021DA21C: .word 0x0220C09C +_021DA220: .word 0x027FFE0C +_021DA224: .word 0x027FFE10 +_021DA228: .word 0x0220C0A4 +_021DA22C: .word 0x0220C0AC +_021DA230: .word 0x0220C0B8 +_021DA234: .word 0x0220C0D4 + + arm_func_start FUN_021DA238 +FUN_021DA238: ; 0x021DA238 + stmdb sp!, {r4, lr} + sub sp, sp, #0x18 + mov r4, r0 + add r0, sp, #0 + bl FUN_02095EC8 + add r1, sp, #0 + mov r0, r4 + bl FUN_021D9F78 + add sp, sp, #0x18 + ldmia sp!, {r4, pc} + + arm_func_start FUN_021DA260 +FUN_021DA260: ; 0x021DA260 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #4 + add r0, r0, #0x1000 + mov sb, r2 + cmp sb, #0 + ldr r8, [r0, #0x14] + mov sl, r1 + mov r7, #0 + addle sp, sp, #4 + ldmleia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + mov r6, r7 + mov r5, r7 + mov fp, r7 + mov r4, r7 +_021DA298: + ldr r1, [sl, r7, lsl #3] + cmp r1, #0 + beq _021DA2B4 + ldr r0, _021DA2EC ; =0x0220C110 + mov r2, r6 + blx r8 + str r5, [sl, r7, lsl #3] +_021DA2B4: + add r0, sl, r7, lsl #3 + ldr r1, [r0, #4] + cmp r1, #0 + beq _021DA2D8 + ldr r0, _021DA2F0 ; =0x0220C12C + mov r2, fp + blx r8 + add r0, sl, r7, lsl #3 + str r4, [r0, #4] +_021DA2D8: + add r7, r7, #1 + cmp r7, sb + blt _021DA298 + add sp, sp, #4 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_021DA2EC: .word 0x0220C110 +_021DA2F0: .word 0x0220C12C + + arm_func_start FUN_021DA2F4 +FUN_021DA2F4: ; 0x021DA2F4 + stmdb sp!, {r4, r5, r6, lr} + mov r6, r2 + mov r5, r3 + bl FUN_021DA388 + movs r4, r0 + moveq r0, #0 + ldmeqia sp!, {r4, r5, r6, pc} + bl strlen + cmp r0, r5 + movge r0, #0 + ldmgeia sp!, {r4, r5, r6, pc} + mov r0, r6 + mov r1, r4 + bl strcpy + mov r0, #1 + ldmia sp!, {r4, r5, r6, pc} + + arm_func_start FUN_021DA334 +FUN_021DA334: ; 0x021DA334 + stmdb sp!, {r4, r5, r6, lr} + mov r6, r2 + mov r5, r3 + bl FUN_021DA388 + movs r4, r0 + moveq r0, #0 + ldmeqia sp!, {r4, r5, r6, pc} + bl strlen + mov r1, r0 + mov r0, r4 + mov r2, r6 + mov r3, r5 + bl FUN_021DD36C + mvn r1, #0 + cmp r0, r1 + ldmeqia sp!, {r4, r5, r6, pc} + cmp r0, r5 + ldmhsia sp!, {r4, r5, r6, pc} + mov r1, #0 + strb r1, [r6, r0] + ldmia sp!, {r4, r5, r6, pc} + + arm_func_start FUN_021DA388 +FUN_021DA388: ; 0x021DA388 + stmdb sp!, {r4, r5, r6, lr} + mov r6, r0 + mov r5, r1 + mov r4, #0 +_021DA398: + add r0, r6, r4, lsl #3 + add r0, r0, #0x1000 + ldr r1, [r0, #0xa34] + cmp r1, #0 + beq _021DA3D4 + mov r0, r5 + bl strcmp + cmp r0, #0 + addeq r0, r6, r4, lsl #3 + addeq r0, r0, #0x1000 + ldreq r0, [r0, #0xa38] + ldmeqia sp!, {r4, r5, r6, pc} + add r4, r4, #1 + cmp r4, #0x20 + blt _021DA398 +_021DA3D4: + mov r0, #0 + ldmia sp!, {r4, r5, r6, pc} + + arm_func_start FUN_021DA3DC +FUN_021DA3DC: ; 0x021DA3DC + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x14 + ldr r2, _021DA668 ; =0x00001A34 + mov fp, r0 + add r0, fp, r2 + mov r6, r1 + mov r3, #0x20 + mov r1, #0 + mov r2, #0x100 + str r0, [sp, #8] + str r3, [sp, #0xc] + str r1, [sp, #0x10] + bl MI_CpuFill8 + add r0, fp, #0x1000 + ldr r5, [r0, #0xa04] + ldr r1, _021DA66C ; =0x0220C148 + mov r0, r5 + bl strstr + str r0, [sp] + cmp r0, #0 + addeq sp, sp, #0x14 + moveq r0, #0 + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + add r0, r0, #4 + bl strlen + ldr r1, [sp] + add r1, r1, #4 + add r0, r1, r0 + str r0, [sp, #4] + ldr r1, _021DA670 ; =0x0220C150 + mov r0, r5 + bl strstr + cmp r0, #0 + addeq sp, sp, #0x14 + moveq r0, #0 + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + add r8, r0, #1 + ldrsb r7, [r8, #3] + ldr r2, _021DA674 ; =0x0220C154 + mov r5, #0 + add r1, sp, #8 + mov r0, fp + mov r3, r8 + strb r5, [r8, #3] + bl FUN_021DA68C + cmp r0, #1 + addne sp, sp, #0x14 + strneb r7, [r8, #3] + movne r0, r5 + ldmneia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + strb r7, [r8, #3] + cmp r6, #1 + beq _021DA4C8 + ldr r1, _021DA678 ; =0x0220C160 + mov r0, r8 + mov r2, #3 + bl strncmp + cmp r0, #0 + beq _021DA4D4 +_021DA4C8: + add sp, sp, #0x14 + mov r0, #1 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +_021DA4D4: + ldr r1, _021DA67C ; =0x0220C164 + add r0, r8, #4 + bl strstr + cmp r0, #0 + addeq sp, sp, #0x14 + moveq r0, r5 + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + add sb, r0, #2 + mov r6, r5 + b _021DA580 +_021DA4FC: + ldr r1, _021DA680 ; =0x0220C168 + mov r0, sb + bl strstr + movs r7, r0 + beq _021DA598 + ldrsb sl, [r7] + add r8, r7, #2 + ldr r1, _021DA67C ; =0x0220C164 + mov r0, r8 + strb r6, [r7] + bl strstr + movs r5, r0 + streqb sl, [r7] + beq _021DA598 + ldrsb r4, [r5] + mov r0, fp + mov r2, sb + strb r6, [r5] + add r1, sp, #8 + mov r3, r8 + bl FUN_021DA68C + cmp r0, #1 + strneb sl, [r7] + addne sp, sp, #0x14 + strneb r4, [r5] + movne r0, #0 + ldmneia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + mov r0, r8 + bl strlen + strb sl, [r7] + add r0, r8, r0 + strb r4, [r5] + add sb, r0, #2 +_021DA580: + ldrsb r0, [sb] + cmp r0, #0xd + beq _021DA598 + ldrsb r0, [sb, #1] + cmp r0, #0xa + bne _021DA4FC +_021DA598: + ldr r0, [sp] + add r8, r0, #4 + ldr r0, [sp, #4] + cmp r8, r0 + bhs _021DA65C + mov r5, #0 +_021DA5B0: + ldr r1, _021DA684 ; =0x0220C16C + mov r0, r8 + bl strstr + movs sl, r0 + beq _021DA65C + ldrsb r7, [sl] + add sb, sl, #1 + ldr r1, _021DA688 ; =0x0220C170 + mov r0, sb + strb r5, [sl] + bl strstr + movs r6, r0 + bne _021DA5F4 + ldr r1, _021DA67C ; =0x0220C164 + mov r0, sb + bl strstr + mov r6, r0 +_021DA5F4: + cmp r6, #0 + ldrnesb r4, [r6] + mov r0, fp + mov r2, r8 + add r1, sp, #8 + mov r3, sb + strneb r5, [r6] + bl FUN_021DA68C + cmp r0, #1 + beq _021DA634 + strb r7, [sl] + cmp r6, #0 + add sp, sp, #0x14 + strneb r4, [r6] + mov r0, #0 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +_021DA634: + mov r0, sb + bl strlen + add r0, sb, r0 + add r8, r0, #1 + ldr r0, [sp, #4] + strb r7, [sl] + cmp r6, #0 + strneb r4, [r6] + cmp r8, r0 + blo _021DA5B0 +_021DA65C: + mov r0, #1 + add sp, sp, #0x14 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_021DA668: .word 0x00001A34 +_021DA66C: .word 0x0220C148 +_021DA670: .word 0x0220C150 +_021DA674: .word 0x0220C154 +_021DA678: .word 0x0220C160 +_021DA67C: .word 0x0220C164 +_021DA680: .word 0x0220C168 +_021DA684: .word 0x0220C16C +_021DA688: .word 0x0220C170 + + arm_func_start FUN_021DA68C +FUN_021DA68C: ; 0x021DA68C + stmdb sp!, {r4, r5, r6, r7, r8, lr} + mov r8, r1 + ldr r4, [r8, #8] + ldr r1, [r8, #4] + add r0, r0, #0x1000 + cmp r4, r1 + ldr r5, [r0, #0x10] + ldr r4, [r0, #0x14] + mov r7, r2 + mov r6, r3 + movgt r0, #0 + ldmgtia sp!, {r4, r5, r6, r7, r8, pc} + mov r0, r7 + bl strlen + mov r1, r0 + ldr r0, _021DA7D8 ; =0x0220C174 + add r1, r1, #1 + blx r5 + ldr r2, [r8] + ldr r1, [r8, #8] + str r0, [r2, r1, lsl #3] + ldr r3, [r8, #8] + ldr r2, [r8] + ldr r0, [r2, r3, lsl #3] + cmp r0, #0 + beq _021DA770 + mov r0, r6 + bl strlen + mov r1, r0 + ldr r0, _021DA7DC ; =0x0220C194 + add r1, r1, #1 + blx r5 + ldr r2, [r8] + ldr r1, [r8, #8] + add r1, r2, r1, lsl #3 + str r0, [r1, #4] + ldr r3, [r8, #8] + ldr r2, [r8] + mov r1, r3, lsl #3 + add r0, r2, r3, lsl #3 + ldr r0, [r0, #4] + cmp r0, #0 + beq _021DA770 + ldr r0, [r2, r1] + mov r1, r7 + bl strcpy + ldr r2, [r8] + ldr r0, [r8, #8] + mov r1, r6 + add r0, r2, r0, lsl #3 + ldr r0, [r0, #4] + bl strcpy + ldr r1, [r8, #8] + mov r0, #1 + add r1, r1, #1 + str r1, [r8, #8] + ldmia sp!, {r4, r5, r6, r7, r8, pc} +_021DA770: + ldr r1, [r2, r3, lsl #3] + cmp r1, #0 + beq _021DA798 + ldr r0, _021DA7E0 ; =0x0220C1B4 + mov r2, #0 + blx r4 + ldr r1, [r8] + ldr r0, [r8, #8] + mov r2, #0 + str r2, [r1, r0, lsl #3] +_021DA798: + ldr r1, [r8] + ldr r0, [r8, #8] + add r0, r1, r0, lsl #3 + ldr r1, [r0, #4] + cmp r1, #0 + beq _021DA7D0 + ldr r0, _021DA7E4 ; =0x0220C1D0 + mov r2, #0 + blx r4 + ldr r1, [r8] + ldr r0, [r8, #8] + mov r2, #0 + add r0, r1, r0, lsl #3 + str r2, [r0, #4] +_021DA7D0: + mov r0, #0 + ldmia sp!, {r4, r5, r6, r7, r8, pc} + .align 2, 0 +_021DA7D8: .word 0x0220C174 +_021DA7DC: .word 0x0220C194 +_021DA7E0: .word 0x0220C1B4 +_021DA7E4: .word 0x0220C1D0 + + arm_func_start FUN_021DA7E8 +FUN_021DA7E8: ; 0x021DA7E8 + stmdb sp!, {r4, r5, r6, lr} + mov r6, r1 + mov r5, r0 + mov r0, r6 + mov r4, #0 + bl strlen + cmp r0, #0x100 + movhs r0, r4 + ldmhsia sp!, {r4, r5, r6, pc} + ldr r0, _021DA934 ; =0x00001024 + mov r1, r6 + add r0, r5, r0 + mov r2, #0x100 + bl strncpy + mov r0, r6 + bl strlen + ldr r1, _021DA934 ; =0x00001024 + mov r6, r0 + add r0, r5, r1 + bl strlen + cmp r6, r0 + movne r0, r4 + ldmneia sp!, {r4, r5, r6, pc} + ldr r0, _021DA934 ; =0x00001024 + ldr r1, _021DA938 ; =0x0220C1EC + add r0, r5, r0 + bl strstr + cmp r0, #0 + beq _021DA884 + ldr r0, _021DA93C ; =0x0000102B + add r1, r5, #0x1000 + add r0, r5, r0 + str r0, [r1, #0x124] + mov r0, r4 + str r0, [r1, #0x12c] + add r0, r5, #0x1100 + mov r1, #0x50 + strh r1, [r0, #0x30] + b _021DA8C0 +_021DA884: + ldr r0, _021DA934 ; =0x00001024 + ldr r1, _021DA940 ; =0x0220C1F4 + add r0, r5, r0 + bl strstr + cmp r0, #0 + moveq r0, r4 + ldmeqia sp!, {r4, r5, r6, pc} + add r1, r0, #8 + add r0, r5, #0x1000 + str r1, [r0, #0x124] + mov r2, #1 + ldr r1, _021DA944 ; =0x000001BB + str r2, [r0, #0x12c] + add r0, r5, #0x1100 + strh r1, [r0, #0x30] +_021DA8C0: + add r0, r5, #0x1000 + ldr r0, [r0, #0x124] + ldr r1, _021DA948 ; =0x0220C200 + bl strstr + cmp r0, #0 + movne r1, #0 + strneb r1, [r0] + addne r4, r0, #1 + add r0, r5, #0x1000 + ldr r0, [r0, #0x124] + ldr r1, _021DA94C ; =0x0220C204 + bl strstr + cmp r0, #0 + addeq r0, r5, #0x1000 + moveq r1, #0 + streq r1, [r0, #0x128] + movne r1, #0 + strneb r1, [r0] + addne r1, r0, #1 + addne r0, r5, #0x1000 + strne r1, [r0, #0x128] + cmp r4, #0 + beq _021DA92C + mov r0, r4 + bl atol + add r1, r5, #0x1100 + strh r0, [r1, #0x30] +_021DA92C: + mov r0, #1 + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +_021DA934: .word 0x00001024 +_021DA938: .word 0x0220C1EC +_021DA93C: .word 0x0000102B +_021DA940: .word 0x0220C1F4 +_021DA944: .word 0x000001BB +_021DA948: .word 0x0220C200 +_021DA94C: .word 0x0220C204 + + arm_func_start FUN_021DA950 +FUN_021DA950: ; 0x021DA950 + stmdb sp!, {r4, r5, r6, r7, lr} + sub sp, sp, #4 + add r0, r0, #0x1000 + mov r5, r2 + cmp r5, #0 + ldr r7, [r0, #0x14] + ldr r2, [r0, #0x10] + mov r6, r1 + addle sp, sp, #4 + movle r0, #0 + ldmleia sp!, {r4, r5, r6, r7, pc} + ldr r1, [r6, #0xc] + ldr r0, _021DAA08 ; =0x0220C208 + add r1, r1, r5 + blx r2 + movs r4, r0 + addeq sp, sp, #4 + moveq r0, #0 + ldmeqia sp!, {r4, r5, r6, r7, pc} + ldr r0, [r6] + ldr r2, [r6, #0xc] + mov r1, r4 + bl MI_CpuCopy8 + ldr r1, [r6] + ldr r0, _021DAA0C ; =0x0220C218 + mov r2, #0 + blx r7 + cmp r4, #0 + addeq sp, sp, #4 + moveq r0, #0 + ldmeqia sp!, {r4, r5, r6, r7, pc} + ldr r0, [r6] + ldr r1, [r6, #4] + sub r0, r4, r0 + add r0, r1, r0 + str r0, [r6, #4] + ldr r1, [r6, #0xc] + mov r0, #1 + add r1, r1, r5 + str r1, [r6, #0xc] + str r4, [r6] + ldr r1, [r6, #0xc] + add r1, r4, r1 + str r1, [r6, #8] + add sp, sp, #4 + ldmia sp!, {r4, r5, r6, r7, pc} + .align 2, 0 +_021DAA08: .word 0x0220C208 +_021DAA0C: .word 0x0220C218 + + arm_func_start FUN_021DAA10 +FUN_021DAA10: ; 0x021DAA10 + stmdb sp!, {r4, lr} + mov r4, r1 + ldr r1, [r4] + add r0, r0, #0x1000 + cmp r1, #0 + ldr r3, [r0, #0x14] + beq _021DAA38 + ldr r0, _021DAA4C ; =0x0220C218 + mov r2, #0 + blx r3 +_021DAA38: + mov r0, r4 + mov r1, #0 + mov r2, #0x10 + bl MI_CpuFill8 + ldmia sp!, {r4, pc} + .align 2, 0 +_021DAA4C: .word 0x0220C218 + + arm_func_start FUN_021DAA50 +FUN_021DAA50: ; 0x021DAA50 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #4 + movs r5, r2 + add r0, r0, #0x1000 + ldr r2, [r0, #0x10] + mov r4, r1 + addeq sp, sp, #4 + moveq r0, #0 + ldmeqia sp!, {r4, r5, pc} + ldr r0, _021DAABC ; =0x0220C22C + mov r1, r5 + blx r2 + str r0, [r4] + ldr r0, [r4] + cmp r0, #0 + addeq sp, sp, #4 + moveq r0, #0 + ldmeqia sp!, {r4, r5, pc} + str r0, [r4, #4] + str r5, [r4, #0xc] + ldr r2, [r4] + ldr r1, [r4, #0xc] + mov r0, #1 + add r1, r2, r1 + str r1, [r4, #8] + add sp, sp, #4 + ldmia sp!, {r4, r5, pc} + .align 2, 0 +_021DAABC: .word 0x0220C22C + + arm_func_start FUN_021DAAC0 +FUN_021DAAC0: ; 0x021DAAC0 + ands r1, r0, #0x8000 + bicne r0, r0, #0x8000 + bx lr + + arm_func_start FUN_021DAACC +FUN_021DAACC: ; 0x021DAACC + stmdb sp!, {r4, r5, r6, r7, lr} + sub sp, sp, #4 + ldr r2, _021DAB60 ; =0x000019F4 + mov r7, r0 + mov r6, r1 + mov r0, r6 + add r4, r7, r2 + bl strlen + mov r5, r0 + ldr r0, [r4, #4] + ldr r1, [r4, #8] + sub r1, r1, r0 + cmp r5, r1 + ble _021DAB34 + sub r2, r5, r1 + mov r0, r7 + mov r1, r4 + add r2, r2, #1 + bl FUN_021DA950 + cmp r0, #0 + addeq sp, sp, #4 + moveq r0, #1 + ldmeqia sp!, {r4, r5, r6, r7, pc} + ldr r0, [r4, #4] + ldr r1, [r4, #8] + sub r1, r1, r0 +_021DAB34: + ldr r2, _021DAB64 ; =0x0220C240 + mov r3, r6 + bl OS_SNPrintf + cmp r0, r5 + ldreq r1, [r4, #4] + movne r0, #1 + addeq r0, r1, r0 + streq r0, [r4, #4] + moveq r0, #0 + add sp, sp, #4 + ldmia sp!, {r4, r5, r6, r7, pc} + .align 2, 0 +_021DAB60: .word 0x000019F4 +_021DAB64: .word 0x0220C240 + + arm_func_start FUN_021DAB68 +FUN_021DAB68: ; 0x021DAB68 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #4 + mov sl, r0 + add r0, sl, #0x1000 + ldr r4, [r0, #0x9f0] + ldr r0, _021DAC8C ; =0x000019F4 + cmp r4, #0 + ldreq r6, _021DAC90 ; =0x0220C244 + mov r8, r2 + add r5, sl, #0x1000 + add r4, sl, r0 + ldr r0, [r5, #0x9f0] + mov r7, r3 + add fp, r0, #1 + mov r2, #0 + mov sb, r1 + ldrne r6, _021DAC94 ; =0x0220C248 + mov r0, r8 + mov r1, r7 + mov r3, r2 + str fp, [r5, #0x9f0] + bl FUN_021DD4FC + mov r5, r0 + mov r0, r6 + bl strlen + mov fp, r0 + mov r0, sb + bl strlen + sub r1, fp, #2 + add r2, r1, r0 + ldr r0, [r4, #4] + ldr r1, [r4, #8] + add r2, r5, r2 + sub r1, r1, r0 + cmp r2, r1 + ble _021DAC28 + sub r2, r2, r1 + mov r0, sl + mov r1, r4 + add r2, r2, #1 + bl FUN_021DA950 + cmp r0, #0 + addeq sp, sp, #4 + moveq r0, #1 + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + ldr r0, [r4, #4] + ldr r1, [r4, #8] + sub r1, r1, r0 +_021DAC28: + mov r2, r6 + mov r3, sb + bl OS_SNPrintf + ldr r2, [r4, #4] + mov r1, r7 + add r0, r2, r0 + str r0, [r4, #4] + ldr r2, [r4, #4] + ldr r3, [r4, #8] + mov r0, r8 + sub r3, r3, r2 + sub r3, r3, #1 + bl FUN_021DD4FC + cmp r0, #0 + addlt sp, sp, #4 + movlt r0, #1 + ldmltia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + ldr r1, [r4, #4] + mov r0, #0 + add r1, r1, r5 + str r1, [r4, #4] + ldr r1, [r4, #4] + strb r0, [r1] + add sp, sp, #4 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_021DAC8C: .word 0x000019F4 +_021DAC90: .word 0x0220C244 +_021DAC94: .word 0x0220C248 + + arm_func_start FUN_021DAC98 +FUN_021DAC98: ; 0x021DAC98 + stmdb sp!, {r4, r5, r6, r7, r8, sb, lr} + sub sp, sp, #4 + mov r6, r2 + mov r8, r0 + ldr r2, _021DAD7C ; =0x000019F4 + mov r0, r6 + mov r7, r1 + add r5, r8, r2 + bl strlen + mov r4, r0 + ldr r0, _021DAD80 ; =0x0220C250 + bl strlen + mov sb, r0 + mov r0, r7 + bl strlen + sub r1, sb, #4 + add r0, r1, r0 + add r4, r4, r0 + ldr r2, [r5, #8] + ldr r1, [r5, #4] + add r0, r4, #1 + sub r1, r2, r1 + cmp r0, r1 + ble _021DAD1C + sub r2, r4, r1 + mov r0, r8 + mov r1, r5 + add r2, r2, #1 + bl FUN_021DA950 + cmp r0, #0 + addeq sp, sp, #4 + moveq r0, #1 + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, pc} +_021DAD1C: + ldr r0, [r5] + ldr r1, _021DAD84 ; =0x0220C148 + bl strstr + add r8, r0, #2 + ldrsb sb, [r0, #2] + mov r0, r8 + bl strlen + add r2, r0, #1 + add r0, r8, r4 + mov r1, r8 + bl memmove + ldr r2, _021DAD80 ; =0x0220C250 + str r6, [sp] + mov r3, r7 + mov r0, r8 + add r1, r4, #1 + bl OS_SNPrintf + strb sb, [r8, r0] + ldr r1, [r5, #4] + mov r0, #0 + add r1, r1, r4 + str r1, [r5, #4] + add sp, sp, #4 + ldmia sp!, {r4, r5, r6, r7, r8, sb, pc} + .align 2, 0 +_021DAD7C: .word 0x000019F4 +_021DAD80: .word 0x0220C250 +_021DAD84: .word 0x0220C148 + + arm_func_start FUN_021DAD88 +FUN_021DAD88: ; 0x021DAD88 + stmdb sp!, {r4, r5, r6, r7, r8, lr} + sub sp, sp, #8 + mov r7, r0 + add r0, r7, #0x1000 + ldr r1, [r0, #8] + ldr r0, _021DAE40 ; =0x000019F4 + cmp r1, #0 + ldreq r6, _021DAE44 ; =0x0220C25C + add r5, r7, r0 + add r0, r7, #0x1000 + ldrne r6, _021DAE48 ; =0x0220C2B0 + ldr r0, [r0, #0x124] + bl strlen + mov r4, r0 + mov r0, r6 + bl strlen + add r1, r7, #0x1000 + mov r8, r0 + ldr r0, [r1, #0x128] + bl strlen + sub r1, r8, #4 + add r0, r1, r0 + add r1, r4, r0 + ldr r0, _021DAE40 ; =0x000019F4 + add r2, r1, #0x400 + add r1, r7, r0 + mov r0, r7 + bl FUN_021DAA50 + cmp r0, #1 + addne sp, sp, #8 + movne r0, #1 + ldmneia sp!, {r4, r5, r6, r7, r8, pc} + add r3, r7, #0x1000 + ldr r0, [r3, #0x124] + mov r2, r6 + str r0, [sp] + ldr r0, [r5, #4] + ldr r1, [r5, #0xc] + ldr r3, [r3, #0x128] + bl OS_SNPrintf + ldr r1, [r5, #4] + add r0, r1, r0 + str r0, [r5, #4] + mov r0, #0 + add sp, sp, #8 + ldmia sp!, {r4, r5, r6, r7, r8, pc} + .align 2, 0 +_021DAE40: .word 0x000019F4 +_021DAE44: .word 0x0220C25C +_021DAE48: .word 0x0220C2B0 + + arm_func_start FUN_021DAE4C +FUN_021DAE4C: ; 0x021DAE4C + stmdb sp!, {r4, r5, lr} + sub sp, sp, #4 + movs r5, r0 + add r1, r5, #0x1000 + ldr r4, [r1, #0x14] + addeq sp, sp, #4 + ldmeqia sp!, {r4, r5, pc} + ldr r1, _021DAF00 ; =0x00001A34 + mov r2, #0x20 + add r1, r5, r1 + bl FUN_021DA260 + ldr r1, _021DAF04 ; =0x00001A04 + mov r0, r5 + add r1, r5, r1 + bl FUN_021DAA10 + ldr r1, _021DAF08 ; =0x000019F4 + mov r0, r5 + add r1, r5, r1 + bl FUN_021DAA10 + add r0, r5, #0x1000 + ldr r1, [r0, #0x9c8] + cmp r1, #0 + beq _021DAEC0 + ldr r0, _021DAF0C ; =0x0220C2D0 + mov r2, #0 + blx r4 + add r0, r5, #0x1000 + mov r1, #0 + str r1, [r0, #0x9c8] +_021DAEC0: + add r0, r5, #0x1000 + ldr r1, [r0, #0x9cc] + cmp r1, #0 + beq _021DAEE8 + ldr r0, _021DAF10 ; =0x0220C2E8 + mov r2, #0 + blx r4 + add r0, r5, #0x1000 + mov r1, #0 + str r1, [r0, #0x9cc] +_021DAEE8: + ldr r2, _021DAF14 ; =0x00001C10 + mov r0, r5 + mov r1, #0 + bl MI_CpuFill8 + add sp, sp, #4 + ldmia sp!, {r4, r5, pc} + .align 2, 0 +_021DAF00: .word 0x00001A34 +_021DAF04: .word 0x00001A04 +_021DAF08: .word 0x000019F4 +_021DAF0C: .word 0x0220C2D0 +_021DAF10: .word 0x0220C2E8 +_021DAF14: .word 0x00001C10 + + arm_func_start FUN_021DAF18 +FUN_021DAF18: ; 0x021DAF18 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0xc + mov sl, r0 + add r0, sl, #0x1000 + ldr fp, [r0, #0x1c] + ldr r0, _021DB224 ; =0x00001134 + ldr r1, _021DB228 ; =0x00001198 + ldr r2, _021DB22C ; =0x00001A04 + add r8, sl, r0 + cmp fp, #0 + mov r0, sl + add r6, sl, r1 + add r7, sl, r2 + mov r5, #0 + ldrle fp, _021DB230 ; =0x0000EA60 + bl FUN_021DB35C + mov r0, sl + bl FUN_021DB348 + movs r4, r0 + addeq r0, sl, #0x1000 + moveq r1, #2 + streq r1, [r0, #0x20] + addeq sp, sp, #0xc + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + bl FUN_0209CB44 + add r0, sl, #0x1000 + ldr r0, [r0, #0x12c] + cmp r0, #1 + bne _021DAFC8 + mov r0, r6 + mov r1, #0 + mov r2, #0x830 + bl MI_CpuFill8 + ldr r1, _021DB234 ; =FUN_021DAAC0 + add r0, sl, #0x1000 + str r1, [r6, #0x810] + ldr r1, [r0, #0x124] + ldr r0, _021DB238 ; =0x0220C0E4 + str r1, [r6, #0x800] + mov r1, #0xb + str r6, [r8, #0xc] + bl FUN_020A3688 + mov r0, #1 + bl FUN_020A02EC +_021DAFC8: + add r0, sl, #0x1100 + ldrh r1, [r0, #0x30] + mov r2, r4 + mov r0, #0 + bl FUN_0209CB78 + bl FUN_0209C934 + cmp r0, #0 + beq _021DB004 + add r0, sl, #0x1000 + mov r1, #3 + str r1, [r0, #0x20] + bl FUN_0209CB24 + bl FUN_0209CC10 + add sp, sp, #0xc + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +_021DB004: + add r0, sl, #0x1000 + ldr r4, [r0, #0x9f4] + mov r0, r4 + bl strlen + mov r1, r0 + mov r0, r4 + bl FUN_0209C030 + cmp r0, #0 + str r0, [sp, #8] + addle r0, sl, #0x1000 + movle r1, #5 + strle r1, [r0, #0x20] + ble _021DB20C + bl FUN_0209BF4C + mov r0, sl + bl FUN_021DB3B8 + cmp r0, #0 + addeq r0, sl, #0x1000 + moveq r1, #7 + streq r1, [r0, #0x20] + beq _021DB20C + ldr r0, [r7] + str r0, [r7, #4] + ldr r1, [r7] + ldr r0, [r7, #0xc] + add r0, r1, r0 + str r0, [r7, #8] + bl OS_GetTick + mov r6, r0 + mov r0, fp, asr #0x1f + mov r8, r1 + str r0, [sp, #4] + mov r4, #0 +_021DB088: + ldr r0, _021DB23C ; =0x021C8F04 + ldr r0, [r0] + cmp r0, #0 + addeq r0, sl, #0x1000 + moveq r1, #5 + streq r1, [r0, #0x20] + beq _021DB20C + bl FUN_0209BF9C + str r0, [sp, #8] + cmp r0, #0 + blt _021DB1E8 + cmp r0, #0 + ble _021DB16C + bl OS_GetTick + mov r6, r0 + add r0, sp, #8 + mov r8, r1 + bl FUN_0209C638 + cmp r0, #0 + beq _021DB1E8 + ldr r2, [r7, #8] + ldr r1, [r7, #4] + sub r2, r2, #1 + ldr sb, [sp, #8] + sub r2, r2, r1 + cmp sb, r2 + movge sb, r2 + mov r2, sb + bl MI_CpuCopy8 + ldr r0, [r7, #4] + cmp r5, #1 + add r0, r0, sb + str r0, [r7, #4] + ldr r0, [r7, #4] + strb r4, [r0] + bne _021DB144 + ldr r0, _021DB240 ; =0x00001A14 + add r0, sl, r0 + bl OS_LockMutex + add r1, sl, #0x1000 + ldr r2, [r1, #0xa30] + ldr r0, _021DB240 ; =0x00001A14 + add r2, r2, sb + add r0, sl, r0 + str r2, [r1, #0xa30] + bl OS_UnlockMutex + b _021DB150 +_021DB144: + mov r0, sl + bl FUN_021DB248 + mov r5, r0 +_021DB150: + ldr r0, [sp, #8] + cmp r0, sb + bls _021DB164 + bl FUN_0209C52C + b _021DB1E8 +_021DB164: + mov r0, sb + bl FUN_0209C52C +_021DB16C: + add r0, sl, #0x1000 + ldr r1, [r0, #0xa2c] + cmp r1, #0 + blt _021DB188 + ldr r0, [r0, #0xa30] + cmp r0, r1 + bge _021DB1E8 +_021DB188: + bl OS_GetTick + subs r2, r0, r6 + sbc r0, r1, r8 + mov r1, r0, lsl #6 + orr r1, r1, r2, lsr #26 + mov r0, r2, lsl #6 + ldr r2, _021DB244 ; =0x000082EA + mov r3, r4 + bl _ll_udiv + ldr r2, [sp, #4] + cmp r1, r2 + cmpeq r0, fp + addhi r0, sl, #0x1000 + movhi r1, #6 + strhi r1, [r0, #0x20] + bhi _021DB20C + mov r0, sl + bl FUN_021DB3B8 + cmp r0, #0 + bne _021DB088 + add r0, sl, #0x1000 + mov r1, #7 + str r1, [r0, #0x20] + b _021DB20C +_021DB1E8: + bl FUN_0209C840 + bl FUN_0209C7AC + bl FUN_0209CB24 + bl FUN_0209CC10 + add r0, sl, #0x1000 + mov r1, #8 + str r1, [r0, #0x20] + add sp, sp, #0xc + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +_021DB20C: + bl FUN_0209C840 + bl FUN_0209C7AC + bl FUN_0209CB24 + bl FUN_0209CC10 + add sp, sp, #0xc + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_021DB224: .word 0x00001134 +_021DB228: .word 0x00001198 +_021DB22C: .word 0x00001A04 +_021DB230: .word 0x0000EA60 +_021DB234: .word FUN_021DAAC0 +_021DB238: .word 0x0220C0E4 +_021DB23C: .word 0x021C8F04 +_021DB240: .word 0x00001A14 +_021DB244: .word 0x000082EA + + arm_func_start FUN_021DB248 +FUN_021DB248: ; 0x021DB248 + stmdb sp!, {r4, r5, r6, r7, lr} + sub sp, sp, #4 + mov r5, r0 + add r0, r5, #0x1000 + ldr r6, [r0, #0xa04] + ldr r2, _021DB334 ; =0x00001A04 + ldr r1, _021DB338 ; =0x0220C148 + mov r0, r6 + add r4, r5, r2 + bl strstr + cmp r0, #0 + addeq sp, sp, #4 + moveq r0, #0 + ldmeqia sp!, {r4, r5, r6, r7, pc} + ldr r1, _021DB338 ; =0x0220C148 + mov r0, r6 + bl strstr + ldr r1, _021DB33C ; =0x00001A14 + add r6, r0, #4 + add r0, r5, r1 + bl OS_LockMutex + ldr r0, [r4, #4] + ldr r1, _021DB33C ; =0x00001A14 + sub r2, r0, r6 + add r0, r5, #0x1000 + str r2, [r0, #0xa30] + add r0, r5, r1 + bl OS_UnlockMutex + ldr r0, [r4] + ldr r1, _021DB340 ; =0x0220C300 + bl strstr + movs r4, r0 + addeq sp, sp, #4 + moveq r0, #1 + ldmeqia sp!, {r4, r5, r6, r7, pc} + ldr r0, _021DB340 ; =0x0220C300 + bl strlen + add r7, r4, r0 + ldr r1, _021DB344 ; =0x0220C164 + mov r0, r7 + bl strstr + mov r4, r0 + ldr r0, _021DB33C ; =0x00001A14 + ldrsb r6, [r4] + mov r1, #0 + add r0, r5, r0 + strb r1, [r4] + bl OS_LockMutex + mov r0, r7 + bl atol + add r1, r5, #0x1000 + ldr r2, _021DB33C ; =0x00001A14 + str r0, [r1, #0xa2c] + add r0, r5, r2 + bl OS_UnlockMutex + strb r6, [r4] + mov r0, #1 + add sp, sp, #4 + ldmia sp!, {r4, r5, r6, r7, pc} + .align 2, 0 +_021DB334: .word 0x00001A04 +_021DB338: .word 0x0220C148 +_021DB33C: .word 0x00001A14 +_021DB340: .word 0x0220C300 +_021DB344: .word 0x0220C164 + + arm_func_start FUN_021DB348 +FUN_021DB348: ; 0x021DB348 + ldr ip, _021DB358 ; =0x0209AB80 + add r0, r0, #0x1000 + ldr r0, [r0, #0x124] + bx ip + .align 2, 0 +_021DB358: .word 0x0209AB80 + + arm_func_start FUN_021DB35C +FUN_021DB35C: ; 0x021DB35C + stmdb sp!, {r4, lr} + ldr r1, _021DB3AC ; =0x00001134 + mov r4, r0 + add r0, r4, r1 + mov r1, #0 + mov r2, #0x64 + bl MI_CpuFill8 + ldr r0, _021DB3B0 ; =0x00000B68 + add r1, r4, #0x1000 + str r0, [r1, #0x170] + ldr r3, [r1, #0x9c8] + ldr r0, _021DB3AC ; =0x00001134 + ldr r2, _021DB3B4 ; =0x000005EA + str r3, [r1, #0x174] + str r2, [r1, #0x17c] + ldr r2, [r1, #0x9cc] + add r0, r4, r0 + str r2, [r1, #0x180] + bl FUN_0209CC28 + ldmia sp!, {r4, pc} + .align 2, 0 +_021DB3AC: .word 0x00001134 +_021DB3B0: .word 0x00000B68 +_021DB3B4: .word 0x000005EA + + arm_func_start FUN_021DB3B8 +FUN_021DB3B8: ; 0x021DB3B8 + stmdb sp!, {r4, lr} + mov r4, r0 + add r0, r4, #0x1000 + ldr r0, [r0, #0x12c] + cmp r0, #1 + bne _021DB3EC + ldr r0, _021DB438 ; =0x000019D0 + add r0, r4, r0 + bl OS_GetLowEntropyData + ldr r0, _021DB438 ; =0x000019D0 + mov r1, #0x20 + add r0, r4, r0 + bl FUN_020A136C +_021DB3EC: + ldr r0, _021DB43C ; =0x00001BF4 + add r0, r4, r0 + bl OS_LockMutex + add r0, r4, #0x1000 + ldr r0, [r0, #0xc0c] + cmp r0, #1 + bne _021DB41C + ldr r0, _021DB43C ; =0x00001BF4 + add r0, r4, r0 + bl OS_UnlockMutex + mov r0, #0 + ldmia sp!, {r4, pc} +_021DB41C: + ldr r0, _021DB43C ; =0x00001BF4 + add r0, r4, r0 + bl OS_UnlockMutex + mov r0, #0xa + bl OS_Sleep + mov r0, #1 + ldmia sp!, {r4, pc} + .align 2, 0 +_021DB438: .word 0x000019D0 +_021DB43C: .word 0x00001BF4 + + arm_func_start FUN_021DB440 +FUN_021DB440: ; 0x021DB440 + stmdb sp!, {r4, lr} + mov r4, r0 + add r0, r4, #0x1000 + ldrb r0, [r0] + cmp r0, #0xff + ldmneia sp!, {r4, pc} + ldr r0, _021DB49C ; =0x00001BF4 + add r0, r4, r0 + bl OS_LockMutex + ldr r0, _021DB49C ; =0x00001BF4 + add r1, r4, #0x1000 + mov r2, #1 + add r0, r4, r0 + str r2, [r1, #0xc0c] + bl OS_UnlockMutex + add r0, r4, #0x1000 + ldr r0, [r0, #0xba0] + cmp r0, #0 + ldmeqia sp!, {r4, pc} + ldr r0, _021DB4A0 ; =0x00001B34 + add r0, r4, r0 + bl OS_JoinThread + ldmia sp!, {r4, pc} + .align 2, 0 +_021DB49C: .word 0x00001BF4 +_021DB4A0: .word 0x00001B34 + + arm_func_start FUN_021DB4A4 +FUN_021DB4A4: ; 0x021DB4A4 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #0xc + ldr r3, _021DB55C ; =0x00001BF4 + mov r5, r0 + add r2, r5, #0x1000 + mov ip, #0 + add r0, r5, r3 + mov r4, r1 + str ip, [r2, #0xc0c] + bl OS_InitMutex + ldr r0, _021DB560 ; =0x00001A14 + add r0, r5, r0 + bl OS_InitMutex + add r0, r5, #0x1000 + ldr r0, [r0, #0x18] + cmp r0, #1 + ldreq r0, _021DB564 ; =0x02210480 + moveq r1, #1 + streq r1, [r0] + ldrne r0, _021DB564 ; =0x02210480 + movne r1, #0 + strne r1, [r0] + add r0, r5, #0x1000 + ldr r0, [r0, #0xba0] + cmp r0, #0 + beq _021DB524 + ldr r0, _021DB568 ; =0x00001B34 + add r0, r5, r0 + bl OS_IsThreadTerminated + cmp r0, #0 + addeq sp, sp, #0xc + ldmeqia sp!, {r4, r5, pc} +_021DB524: + ldr r0, _021DB568 ; =0x00001B34 + mov r1, #0x1000 + str r1, [sp] + ldr r1, _021DB56C ; =FUN_021DAF18 + mov r2, r5 + add r0, r5, r0 + add r3, r5, #0x1000 + str r4, [sp, #4] + bl OS_CreateThread + ldr r0, _021DB568 ; =0x00001B34 + add r0, r5, r0 + bl OS_WakeupThreadDirect + add sp, sp, #0xc + ldmia sp!, {r4, r5, pc} + .align 2, 0 +_021DB55C: .word 0x00001BF4 +_021DB560: .word 0x00001A14 +_021DB564: .word 0x02210480 +_021DB568: .word 0x00001B34 +_021DB56C: .word FUN_021DAF18 + + arm_func_start FUN_021DB570 +FUN_021DB570: ; 0x021DB570 + stmdb sp!, {r4, lr} + sub sp, sp, #8 + ldr r1, _021DB5F4 ; =0x0220C314 + ldr r2, _021DB5F8 ; =0x0220C320 + mov r4, r0 + bl FUN_021DAC98 + cmp r0, #0 + addne sp, sp, #8 + movne r0, #1 + ldmneia sp!, {r4, pc} + add r0, r4, #0x1000 + ldr r0, [r0, #0x9f4] + ldr r1, _021DB5FC ; =0x0220C148 + bl strstr + add r0, r0, #4 + bl strlen + movs r3, r0 + beq _021DB5E8 + ldr r2, _021DB600 ; =0x0220C328 + add r0, sp, #0 + mov r1, #7 + bl OS_SNPrintf + ldr r1, _021DB604 ; =0x0220C32C + add r2, sp, #0 + mov r0, r4 + bl FUN_021DAC98 + cmp r0, #0 + addne sp, sp, #8 + movne r0, #1 + ldmneia sp!, {r4, pc} +_021DB5E8: + mov r0, #0 + add sp, sp, #8 + ldmia sp!, {r4, pc} + .align 2, 0 +_021DB5F4: .word 0x0220C314 +_021DB5F8: .word 0x0220C320 +_021DB5FC: .word 0x0220C148 +_021DB600: .word 0x0220C328 +_021DB604: .word 0x0220C32C + + arm_func_start FUN_021DB608 +FUN_021DB608: ; 0x021DB608 + stmdb sp!, {r4, r5, r6, lr} + mov r5, r1 + ldr r2, _021DB714 ; =0x00001C10 + mov r6, r0 + ldr r4, [r5, #0xc] + mov r1, #0 + bl MI_CpuFill8 + ldr r1, _021DB718 ; =0x00001004 + add r0, r6, #0x1000 + mvn r2, #0 + str r2, [r0, #0xa2c] + mov lr, r5 + str r2, [r0, #0xa30] + add ip, r6, r1 + ldmia lr!, {r0, r1, r2, r3} + stmia ip!, {r0, r1, r2, r3} + ldmia lr, {r0, r1, r2} + stmia ip, {r0, r1, r2} + ldr r0, _021DB71C ; =0x0220C33C + ldr r1, _021DB720 ; =0x00000B68 + blx r4 + add r1, r6, #0x1000 + str r0, [r1, #0x9c8] + ldr r0, [r1, #0x9c8] + cmp r0, #0 + moveq r0, #1 + streq r0, [r1, #0x20] + ldmeqia sp!, {r4, r5, r6, pc} + ldr r0, _021DB724 ; =0x0220C354 + ldr r1, _021DB728 ; =0x000005EA + blx r4 + add r2, r6, #0x1000 + str r0, [r2, #0x9cc] + ldr r0, [r2, #0x9cc] + cmp r0, #0 + moveq r0, #1 + streq r0, [r2, #0x20] + ldmeqia sp!, {r4, r5, r6, pc} + ldr r1, _021DB72C ; =0x00001A04 + ldr r2, [r2, #0xc] + mov r0, r6 + add r1, r6, r1 + bl FUN_021DAA50 + cmp r0, #0 + addeq r1, r6, #0x1000 + moveq r0, #1 + streq r0, [r1, #0x20] + ldmeqia sp!, {r4, r5, r6, pc} + ldr r1, [r5] + mov r0, r6 + bl FUN_021DA7E8 + cmp r0, #0 + addeq r1, r6, #0x1000 + moveq r0, #1 + streq r0, [r1, #0x20] + ldmeqia sp!, {r4, r5, r6, pc} + mov r0, r6 + bl FUN_021DAD88 + add r1, r6, #0x1000 + str r0, [r1, #0x20] + ldr r0, [r1, #0x20] + cmp r0, #0 + moveq r0, #0xff + streqb r0, [r1] + add r0, r6, #0x1000 + ldr r0, [r0, #0x20] + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +_021DB714: .word 0x00001C10 +_021DB718: .word 0x00001004 +_021DB71C: .word 0x0220C33C +_021DB720: .word 0x00000B68 +_021DB724: .word 0x0220C354 +_021DB728: .word 0x000005EA +_021DB72C: .word 0x00001A04 + + arm_func_start FUN_021DB730 +FUN_021DB730: ; 0x021DB730 + stmdb sp!, {r4, lr} + ldr r2, _021DB770 ; =0x02210484 + ldr r1, _021DB774 ; =0x000011DC + ldr r2, [r2] + mov r4, r0 + add r0, r2, r1 + bl OS_LockMutex + ldr r2, _021DB770 ; =0x02210484 + ldr r1, _021DB774 ; =0x000011DC + ldr r0, [r2] + add r0, r0, #0x1000 + str r4, [r0] + ldr r0, [r2] + add r0, r0, r1 + bl OS_UnlockMutex + ldmia sp!, {r4, pc} + .align 2, 0 +_021DB770: .word 0x02210484 +_021DB774: .word 0x000011DC + + arm_func_start FUN_021DB778 +FUN_021DB778: ; 0x021DB778 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x2d4 + ldr r5, _021DC670 ; =0x02210484 + mov r0, #0 + str r0, [sp] + ldr r0, [r5] + ldr r7, [sp] + add r0, r0, #0x1000 + ldr sb, [r0, #0x108] + ldr r8, [r0, #0x10c] + mov r0, r7 + str r0, [sp, #8] + str r0, [sp, #0x1c] + mvn r0, #2 + str r0, [sp, #0x20] + mov r0, r7 + str r0, [sp, #0x24] + mvn r0, #3 + str r0, [sp, #0x28] + mov r0, r7 + str r0, [sp, #0x2c] + mov r0, #0x1000 + str r0, [sp, #0x14] + mov r0, #5 + str r0, [sp, #0x30] + mov r0, r7 + str r0, [sp, #0x34] + str r0, [sp, #0x38] + str r0, [sp, #0x3c] + mov r0, #4 + str r0, [sp, #0x40] + mov r0, r7 + str r0, [sp, #0x44] + str r0, [sp, #0x48] + str r0, [sp, #0x4c] + str r0, [sp, #0x50] + str r0, [sp, #0x58] + str r0, [sp, #0x54] + mvn r0, #4 + str r0, [sp, #0x5c] + mov r0, r7 + str r0, [sp, #0x60] + mvn r0, #1 + ldr r4, _021DC674 ; =0x02210490 + mov r6, #1 + str r0, [sp, #0x18] +_021DB830: + ldr r0, _021DC678 ; =0x02210494 + ldr r1, [sp, #0x14] + str r6, [r0, #4] + str r1, [r0, #8] + ldr r1, _021DC67C ; =0x00004E20 + str sb, [r0, #0xc] + str r1, [r0, #0x18] + str r8, [r0, #0x10] + ldr r0, _021DC680 ; =0x0220C36C + ldr r1, [r5] + ldr r2, [r0] + ldr r0, _021DC678 ; =0x02210494 + add r1, r1, #0x1000 + str r2, [r0] + ldr r0, [sp, #0x18] + str r0, [r1, #4] + ldr r0, [r4] + ldr r1, _021DC678 ; =0x02210494 + bl FUN_021DB608 + cmp r0, #0 + beq _021DB89C + ldr r0, _021DC674 ; =0x02210490 + ldr r0, [r0] + bl FUN_021DAE4C + mov r0, #1 + bl FUN_021DB730 + b _021DC614 +_021DB89C: + ldr r0, [r4] + bl FUN_021DB570 + cmp r0, #0 + beq _021DB8C4 + ldr r0, _021DC674 ; =0x02210490 + ldr r0, [r0] + bl FUN_021DAE4C + mov r0, #1 + bl FUN_021DB730 + b _021DC614 +_021DB8C4: + ldr r0, _021DC684 ; =0x021D3498 + ldr r0, [r0, #4] + bl OS_GetThreadPriority + sub r1, r0, #1 + ldr r0, [r4] + bl FUN_021DB4A4 + ldr r1, [r4] + add r0, r1, #0x1000 + ldr r0, [r0, #0xba0] + cmp r0, #0 + beq _021DB8FC + ldr r0, _021DC688 ; =0x00001B34 + add r0, r1, r0 + bl OS_JoinThread +_021DB8FC: + ldr r0, [r4] + add r1, r0, #0x1000 + ldr r1, [r1, #0x20] + cmp r1, #2 + beq _021DB91C + cmp r1, #8 + beq _021DB948 + b _021DB930 +_021DB91C: + ldr r0, _021DC670 ; =0x02210484 + mvn r1, #0 + ldr r0, [r0] + add r0, r0, #0x1000 + str r1, [r0, #4] +_021DB930: + ldr r0, _021DC674 ; =0x02210490 + ldr r0, [r0] + bl FUN_021DAE4C + mov r0, #3 + bl FUN_021DB730 + b _021DC614 +_021DB948: + ldr r1, [sp, #0x1c] + bl FUN_021DA3DC + cmp r0, #1 + beq _021DB970 + ldr r0, _021DC674 ; =0x02210490 + ldr r0, [r0] + bl FUN_021DAE4C + mov r0, #2 + bl FUN_021DB730 + b _021DC614 +_021DB970: + ldr r0, [r4] + ldr r1, _021DC68C ; =0x0220C418 + bl FUN_021DA388 + bl atol + mov sl, r0 + ldr r0, _021DC690 ; =0x021D74A8 + ldr r0, [r0] + cmp r0, #0x22 + bne _021DB9A0 + mov r0, #2 + bl FUN_021DB730 + b _021DC614 +_021DB9A0: + cmp sl, #0xc8 + beq _021DBCB4 + ldr r0, _021DC694 ; =0x0000012E + cmp sl, r0 + bne _021DBC9C + ldr r0, _021DC698 ; =0x0221048C + str r6, [r0] + ldr r0, [r5] + add r0, r0, #0x1000 + ldr r1, [r0, #0x118] + cmp r1, #0 + beq _021DBC0C + ldr r1, _021DC674 ; =0x02210490 + mvn r2, #5 + str r2, [r0, #4] + ldr r0, [r1] + bl FUN_021DAE4C + ldr r2, _021DC678 ; =0x02210494 + ldr r0, _021DC69C ; =0x0220BEB4 + ldr r3, _021DC67C ; =0x00004E20 + ldr r0, [r0] + mov r5, #0 + mov r4, #0x200 + ldr r1, _021DC6A0 ; =0x0220C424 + str r0, [r2] + str r5, [r2, #4] + str r4, [r2, #8] + str sb, [r2, #0xc] + str r8, [r2, #0x10] + str r3, [r2, #0x18] + bl strcmp + cmp r0, #0 + ldrne r0, _021DC678 ; =0x02210494 + movne r1, #1 + strne r1, [r0, #0x14] + ldr r0, _021DC674 ; =0x02210490 + ldr r1, _021DC678 ; =0x02210494 + ldr r0, [r0] + bl FUN_021DB608 + cmp r0, #0 + beq _021DBA5C + ldr r0, _021DC674 ; =0x02210490 + ldr r0, [r0] + bl FUN_021DAE4C + mov r0, #1 + bl FUN_021DB730 + b _021DC614 +_021DBA5C: + add r0, sp, #0x240 + bl FUN_021DA238 + cmp r0, #0 + beq _021DBA88 + ldr r0, _021DC674 ; =0x02210490 + add r1, sp, #0x240 + ldr r0, [r0] + mov r2, #1 + bl FUN_021D9C2C + cmp r0, #0 + bne _021DBAA0 +_021DBA88: + ldr r0, _021DC674 ; =0x02210490 + ldr r0, [r0] + bl FUN_021DAE4C + mov r0, #8 + bl FUN_021DB730 + b _021DC614 +_021DBAA0: + ldr r0, _021DC674 ; =0x02210490 + ldr r1, _021DC6A4 ; =0x0220C444 + ldr r0, [r0] + ldr r2, _021DC6A8 ; =0x0220C44C + mov r3, #7 + bl FUN_021DAB68 + cmp r0, #0 + bne _021DBAF8 + ldr r0, _021DC670 ; =0x02210484 + ldr r0, [r0] + add r0, r0, #0x1000 + ldr r4, [r0, #0x118] + mov r0, r4 + bl strlen + ldr r1, _021DC674 ; =0x02210490 + mov r3, r0 + ldr r0, [r1] + ldr r1, _021DC6AC ; =0x0220C454 + mov r2, r4 + bl FUN_021DAB68 + cmp r0, #0 + beq _021DBB10 +_021DBAF8: + ldr r0, _021DC674 ; =0x02210490 + ldr r0, [r0] + bl FUN_021DAE4C + mov r0, #8 + bl FUN_021DB730 + b _021DC614 +_021DBB10: + ldr r1, _021DC670 ; =0x02210484 + ldr r0, _021DC6B0 ; =0x0220C464 + ldr r1, [r1] + mov r2, #0 + add r1, r1, #0x1000 + ldr r1, [r1, #0x118] + blx r8 + ldr r0, _021DC670 ; =0x02210484 + mov r2, #0 + ldr r0, [r0] + ldr r1, _021DC674 ; =0x02210490 + add r0, r0, #0x1000 + str r2, [r0, #0x118] + ldr r0, [r1] + bl FUN_021DB570 + cmp r0, #0 + beq _021DBB6C + ldr r0, _021DC674 ; =0x02210490 + ldr r0, [r0] + bl FUN_021DAE4C + mov r0, #1 + bl FUN_021DB730 + b _021DC614 +_021DBB6C: + ldr r0, _021DC684 ; =0x021D3498 + ldr r0, [r0, #4] + bl OS_GetThreadPriority + ldr r2, _021DC674 ; =0x02210490 + sub r1, r0, #1 + ldr r0, [r2] + bl FUN_021DB4A4 + ldr r0, _021DC674 ; =0x02210490 + ldr r1, [r0] + add r0, r1, #0x1000 + ldr r0, [r0, #0xba0] + cmp r0, #0 + beq _021DBBAC + ldr r0, _021DC688 ; =0x00001B34 + add r0, r1, r0 + bl OS_JoinThread +_021DBBAC: + ldr r0, _021DC674 ; =0x02210490 + ldr r0, [r0] + add r1, r0, #0x1000 + ldr r1, [r1, #0x20] + cmp r1, #2 + beq _021DBBD0 + cmp r1, #8 + beq _021DBBFC + b _021DBBE4 +_021DBBD0: + ldr r0, _021DC670 ; =0x02210484 + mvn r1, #0 + ldr r0, [r0] + add r0, r0, #0x1000 + str r1, [r0, #4] +_021DBBE4: + ldr r0, _021DC674 ; =0x02210490 + ldr r0, [r0] + bl FUN_021DAE4C + mov r0, #3 + bl FUN_021DB730 + b _021DC614 +_021DBBFC: + bl FUN_021DAE4C + mov r0, #7 + bl FUN_021DB730 + b _021DC614 +_021DBC0C: + ldr r0, [r4] + add r1, r0, #0x1000 + ldr fp, [r1, #0xa04] + cmp fp, #0 + bne _021DBC30 + bl FUN_021DAE4C + mov r0, #2 + bl FUN_021DB730 + b _021DC614 +_021DBC30: + mov r0, fp + bl strlen + add r1, r0, #1 + ldr r0, _021DC6B4 ; =0x0220C394 + blx sb + ldr r1, [r5] + add r1, r1, #0x1000 + str r0, [r1, #0x114] + ldr r0, [r5] + add r0, r0, #0x1000 + ldr r0, [r0, #0x114] + str r0, [sp, #0xc] + cmp r0, #0 + bne _021DBC80 + ldr r0, _021DC674 ; =0x02210490 + ldr r0, [r0] + bl FUN_021DAE4C + mov r0, #4 + bl FUN_021DB730 + b _021DC614 +_021DBC80: + mov r0, fp + bl strlen + mov r2, r0 + ldr r0, [sp, #0xc] + mov r1, fp + bl strncpy + b _021DBCB4 +_021DBC9C: + ldr r0, _021DC674 ; =0x02210490 + ldr r0, [r0] + bl FUN_021DAE4C + mov r0, #0xa + bl FUN_021DB730 + b _021DC614 +_021DBCB4: + ldr r0, [r4] + bl FUN_021DAE4C + add r0, sp, #0x68 + bl FUN_02095EC8 + ldr r2, [sp, #0x68] + ldr r1, [sp, #0x6c] + mov r0, #0 + cmp r1, r0 + cmpeq r2, r0 + bne _021DBDEC + ldr r1, [r5] + ldr r0, _021DC6B8 ; =0x022104B0 + add r2, r1, #0x1000 + ldr r1, [sp, #0x20] + str r1, [r2, #4] + ldr r2, [sp, #0x24] + mov r1, r0 + strh r2, [r1] + strb r2, [r1, #0x34] + ldr r2, [r5] + ldr r1, [r4] + add r3, r2, #0x1000 + ldr fp, [r3, #0x108] + mov r2, r0 + str fp, [r2, #0x40] + ldr r3, [r3, #0x10c] + str r3, [r2, #0x44] + bl FUN_021D9ACC + cmp r0, #0 + beq _021DBD38 + mov r0, #5 + bl FUN_021DB730 + b _021DC614 +_021DBD38: + bl FUN_021D98DC + bl FUN_021D988C + cmp r0, #0x15 + beq _021DBDE8 + bl FUN_021D988C + cmp r0, #9 + bne _021DBD6C + ldr r0, _021DC670 ; =0x02210484 + mvn r1, #0 + ldr r0, [r0] + add r0, r0, #0x1000 + str r1, [r0, #4] + b _021DBDD8 +_021DBD6C: + add r0, sp, #0x7c + bl FUN_021D97F8 + ldr r0, _021DC6BC ; =0x02210488 + ldr r0, [r0] + cmp r0, #1 + bne _021DBDC4 + ldr r1, [sp, #0x7c] + ldr r0, _021DC6C0 ; =0xFFFFA4FA + cmp r1, r0 + beq _021DBDA0 + bl FUN_021D988C + cmp r0, #0xb + bne _021DBDC4 +_021DBDA0: + ldr r0, _021DC670 ; =0x02210484 + mov r1, #0 + ldr r0, [r0] + add r0, r0, #0x1000 + str r1, [r0, #4] + bl FUN_021D991C + mov r0, #0xb + bl FUN_021DB730 + b _021DC614 +_021DBDC4: + ldr r0, _021DC670 ; =0x02210484 + ldr r1, [sp, #0x7c] + ldr r0, [r0] + add r0, r0, #0x1000 + str r1, [r0, #4] +_021DBDD8: + bl FUN_021D991C + mov r0, #6 + bl FUN_021DB730 + b _021DC614 +_021DBDE8: + bl FUN_021D991C +_021DBDEC: + cmp sl, #0xc8 + bne _021DBE14 + ldr r0, _021DC670 ; =0x02210484 + mov r2, #0 + ldr r1, [r0] + mov r0, #0xb + add r1, r1, #0x1000 + str r2, [r1, #4] + bl FUN_021DB730 + b _021DC614 +_021DBE14: + ldr r0, [r5] + ldr r1, _021DC6A0 ; =0x0220C424 + add r2, r0, #0x1000 + ldr r0, [sp, #0x28] + str r0, [r2, #4] + ldr r0, _021DC678 ; =0x02210494 + ldr r2, [sp, #0x2c] + str sb, [r0, #0xc] + str r2, [r0, #4] + ldr r2, [sp, #0x14] + str r8, [r0, #0x10] + str r2, [r0, #8] + ldr r2, _021DC6C4 ; =0x00009C40 + str r2, [r0, #0x18] + ldr r0, _021DC69C ; =0x0220BEB4 + ldr r2, _021DC678 ; =0x02210494 + ldr r0, [r0] + str r0, [r2] + bl strcmp + cmp r0, #0 + ldrne r0, _021DC678 ; =0x02210494 + ldr r1, _021DC678 ; =0x02210494 + strne r6, [r0, #0x14] + ldr r0, [r4] + bl FUN_021DB608 + cmp r0, #0 + beq _021DBE98 + ldr r0, _021DC674 ; =0x02210490 + ldr r0, [r0] + bl FUN_021DAE4C + mov r0, #1 + bl FUN_021DB730 + b _021DC614 +_021DBE98: + add r0, sp, #0x240 + bl FUN_021DA238 + cmp r0, #0 + beq _021DBEC0 + ldr r0, [r4] + add r1, sp, #0x240 + mov r2, r6 + bl FUN_021D9C2C + cmp r0, #0 + bne _021DBED8 +_021DBEC0: + ldr r0, _021DC674 ; =0x02210490 + ldr r0, [r0] + bl FUN_021DAE4C + mov r0, #8 + bl FUN_021DB730 + b _021DC614 +_021DBED8: + ldr r0, [r4] + ldr r1, _021DC6A4 ; =0x0220C444 + ldr r2, _021DC6C8 ; =0x0220C484 + ldr r3, [sp, #0x30] + bl FUN_021DAB68 + cmp r0, #0 + bne _021DBF24 + ldr r0, [r5] + add r0, r0, #0x1000 + ldr sl, [r0, #0x114] + mov r0, sl + bl strlen + mov r3, r0 + ldr r0, [r4] + ldr r1, _021DC6CC ; =0x0220C48C + mov r2, sl + bl FUN_021DAB68 + cmp r0, #0 + beq _021DBF3C +_021DBF24: + ldr r0, _021DC674 ; =0x02210490 + ldr r0, [r0] + bl FUN_021DAE4C + mov r0, #8 + bl FUN_021DB730 + b _021DC614 +_021DBF3C: + ldr r1, [r5] + ldr r0, _021DC6D0 ; =0x0220C3B0 + add r1, r1, #0x1000 + ldr r2, [sp, #0x34] + ldr r1, [r1, #0x114] + blx r8 + ldr r0, [r5] + add r1, r0, #0x1000 + ldr r0, [sp, #0x38] + str r0, [r1, #0x114] + ldr r0, [r4] + bl FUN_021DB570 + cmp r0, #0 + beq _021DBF8C + ldr r0, _021DC674 ; =0x02210490 + ldr r0, [r0] + bl FUN_021DAE4C + mov r0, #1 + bl FUN_021DB730 + b _021DC614 +_021DBF8C: + ldr r0, _021DC684 ; =0x021D3498 + ldr r0, [r0, #4] + bl OS_GetThreadPriority + sub r1, r0, #1 + ldr r0, [r4] + bl FUN_021DB4A4 + ldr r1, [r4] + add r0, r1, #0x1000 + ldr r0, [r0, #0xba0] + cmp r0, #0 + beq _021DBFC4 + ldr r0, _021DC688 ; =0x00001B34 + add r0, r1, r0 + bl OS_JoinThread +_021DBFC4: + ldr r0, [r4] + add r1, r0, #0x1000 + ldr r1, [r1, #0x20] + cmp r1, #2 + beq _021DC02C + cmp r1, #3 + beq _021DBFEC + cmp r1, #8 + beq _021DC058 + b _021DC040 +_021DBFEC: + bl FUN_021DAE4C + ldr r0, _021DC6BC ; =0x02210488 + ldr r0, [r0] + cmp r0, #1 + bne _021DC020 + ldr r0, _021DC670 ; =0x02210484 + mov r2, #0 + ldr r1, [r0] + mov r0, #0xb + add r1, r1, #0x1000 + str r2, [r1, #4] + bl FUN_021DB730 + b _021DC614 +_021DC020: + mov r0, #3 + bl FUN_021DB730 + b _021DC614 +_021DC02C: + ldr r0, _021DC670 ; =0x02210484 + mvn r1, #0 + ldr r0, [r0] + add r0, r0, #0x1000 + str r1, [r0, #4] +_021DC040: + ldr r0, _021DC674 ; =0x02210490 + ldr r0, [r0] + bl FUN_021DAE4C + mov r0, #3 + bl FUN_021DB730 + b _021DC614 +_021DC058: + ldr r1, [sp, #0x3c] + bl FUN_021DA3DC + cmp r0, #1 + beq _021DC080 + ldr r0, _021DC674 ; =0x02210490 + ldr r0, [r0] + bl FUN_021DAE4C + mov r0, #2 + bl FUN_021DB730 + b _021DC614 +_021DC080: + ldr r0, [r4] + ldr r1, _021DC68C ; =0x0220C418 + bl FUN_021DA388 + bl atol + mov sl, r0 + ldr r0, _021DC690 ; =0x021D74A8 + ldr r0, [r0] + cmp r0, #0x22 + bne _021DC0BC + ldr r0, _021DC674 ; =0x02210490 + ldr r0, [r0] + bl FUN_021DAE4C + mov r0, #2 + bl FUN_021DB730 + b _021DC614 +_021DC0BC: + cmp sl, #0xc8 + beq _021DC118 + ldr r0, _021DC674 ; =0x02210490 + ldr r0, [r0] + bl FUN_021DAE4C + ldr r0, _021DC6BC ; =0x02210488 + ldr r0, [r0] + cmp r0, #1 + bne _021DC10C + ldr r0, _021DC694 ; =0x0000012E + cmp sl, r0 + bne _021DC10C + ldr r0, _021DC670 ; =0x02210484 + mov r2, #0 + ldr r1, [r0] + mov r0, #0xb + add r1, r1, #0x1000 + str r2, [r1, #4] + bl FUN_021DB730 + b _021DC614 +_021DC10C: + mov r0, #2 + bl FUN_021DB730 + b _021DC614 +_021DC118: + ldr r0, [r4] + ldr r1, _021DC6D4 ; =0x0220C494 + ldr r3, [sp, #0x40] + add r2, sp, #0x64 + bl FUN_021DA334 + cmp r0, #0 + bgt _021DC14C + ldr r0, _021DC674 ; =0x02210490 + ldr r0, [r0] + bl FUN_021DAE4C + mov r0, #9 + bl FUN_021DB730 + b _021DC614 +_021DC14C: + add r0, sp, #0x64 + bl atol + ldr r1, _021DC690 ; =0x021D74A8 + ldr r1, [r1] + cmp r1, #0x22 + bne _021DC17C + ldr r0, _021DC674 ; =0x02210490 + ldr r0, [r0] + bl FUN_021DAE4C + mov r0, #9 + bl FUN_021DB730 + b _021DC614 +_021DC17C: + ldr r1, _021DC6BC ; =0x02210488 + ldr r1, [r1] + cmp r1, #1 + bne _021DC1B4 + cmp r0, #0x72 + bne _021DC1B4 + ldr r0, _021DC670 ; =0x02210484 + mov r2, #0 + ldr r1, [r0] + mov r0, #0xb + add r1, r1, #0x1000 + str r2, [r1, #4] + bl FUN_021DB730 + b _021DC614 +_021DC1B4: + cmp r0, #0x64 + blt _021DC1D4 + ldr r0, _021DC674 ; =0x02210490 + ldr r0, [r0] + bl FUN_021DAE4C + mov r0, #6 + bl FUN_021DB730 + b _021DC614 +_021DC1D4: + ldr r2, [sp, #0x44] + ldr r0, [r4] + ldr r1, _021DC6D8 ; =0x0220C4A0 + mov r3, r2 + bl FUN_021DA334 + mov fp, r0 + cmp fp, #0 + bgt _021DC20C + ldr r0, _021DC674 ; =0x02210490 + ldr r0, [r0] + bl FUN_021DAE4C + mov r0, #9 + bl FUN_021DB730 + b _021DC614 +_021DC20C: + ldr r2, [sp, #0x48] + ldr r0, [r4] + ldr r1, _021DC6DC ; =0x0220C4A4 + mov r3, r2 + bl FUN_021DA334 + str r0, [sp, #4] + cmp r0, #0 + bgt _021DC244 + ldr r0, _021DC674 ; =0x02210490 + ldr r0, [r0] + bl FUN_021DAE4C + mov r0, #9 + bl FUN_021DB730 + b _021DC614 +_021DC244: + ldr r2, [sp, #0x4c] + ldr r0, [r4] + ldr r1, _021DC6E0 ; =0x0220C4AC + mov r3, r2 + bl FUN_021DA334 + mov sl, r0 + ldr r0, _021DC6E4 ; =0x0220C3CC + add r1, fp, #1 + blx sb + str r0, [sp] + cmp r0, #0 + bne _021DC28C + ldr r0, _021DC674 ; =0x02210490 + ldr r0, [r0] + bl FUN_021DAE4C + mov r0, #4 + bl FUN_021DB730 + b _021DC614 +_021DC28C: + ldr r1, [sp, #4] + ldr r0, _021DC6E8 ; =0x0220C3D8 + add r1, r1, #1 + blx sb + movs r7, r0 + bne _021DC2BC + ldr r0, _021DC674 ; =0x02210490 + ldr r0, [r0] + bl FUN_021DAE4C + mov r0, #4 + bl FUN_021DB730 + b _021DC614 +_021DC2BC: + cmp sl, #0 + ble _021DC2F4 + ldr r0, _021DC6EC ; =0x0220C3E8 + add r1, sl, #1 + blx sb + str r0, [sp, #8] + cmp r0, #0 + bne _021DC2F4 + ldr r0, _021DC674 ; =0x02210490 + ldr r0, [r0] + bl FUN_021DAE4C + mov r0, #4 + bl FUN_021DB730 + b _021DC614 +_021DC2F4: + ldr r0, [r4] + ldr r1, _021DC6D8 ; =0x0220C4A0 + ldr r2, [sp] + add r3, fp, #1 + bl FUN_021DA334 + cmp r0, #0 + bge _021DC328 + ldr r0, _021DC674 ; =0x02210490 + ldr r0, [r0] + bl FUN_021DAE4C + mov r0, #9 + bl FUN_021DB730 + b _021DC614 +_021DC328: + ldr r1, [sp, #4] + ldr r2, [sp, #0x50] + add r3, r1, #1 + ldr r1, [sp] + strb r2, [r1, r0] + ldr r0, [r4] + ldr r1, _021DC6DC ; =0x0220C4A4 + mov r2, r7 + bl FUN_021DA334 + cmp r0, #0 + bge _021DC36C + ldr r0, _021DC674 ; =0x02210490 + ldr r0, [r0] + bl FUN_021DAE4C + mov r0, #9 + bl FUN_021DB730 + b _021DC614 +_021DC36C: + ldr r1, [sp, #0x54] + cmp sl, #0 + strb r1, [r7, r0] + mov fp, r1 + ble _021DC404 + ldr r0, [r4] + ldr r1, _021DC6E0 ; =0x0220C4AC + ldr r2, [sp, #8] + add r3, sl, #1 + bl FUN_021DA334 + cmp r0, #0 + bge _021DC3B4 + ldr r0, _021DC674 ; =0x02210490 + ldr r0, [r0] + bl FUN_021DAE4C + mov r0, #9 + bl FUN_021DB730 + b _021DC614 +_021DC3B4: + ldr r2, [sp, #0x58] + ldr r1, [sp, #8] + strb r2, [r1, r0] + mov r0, r1 + bl atol + ldr r1, _021DC690 ; =0x021D74A8 + ldr r1, [r1] + cmp r1, #0x22 + bne _021DC3F0 + ldr r0, _021DC674 ; =0x02210490 + ldr r0, [r0] + bl FUN_021DAE4C + mov r0, #9 + bl FUN_021DB730 + b _021DC614 +_021DC3F0: + mov r1, #0x3e8 + mul fp, r0, r1 + ldr r0, _021DC6F0 ; =0x0002BF20 + cmp fp, r0 + movgt fp, r0 +_021DC404: + ldr r0, [r4] + bl FUN_021DAE4C + ldr r0, [r5] + ldr r1, _021DC678 ; =0x02210494 + add r2, r0, #0x1000 + ldr r0, [sp, #0x5c] + str r0, [r2, #4] + mov r0, r1 + ldr r2, [sp] + str sb, [r0, #0xc] + str r2, [r0] + ldr r2, [sp, #0x60] + str r8, [r0, #0x10] + str r2, [r0, #4] + ldr r2, [sp, #0x14] + str r2, [r0, #8] + ldr r2, _021DC6F4 ; =0x0001D4C0 + str r2, [r0, #0x18] + ldr r0, [r4] + bl FUN_021DB608 + cmp r0, #0 + beq _021DC474 + ldr r0, _021DC674 ; =0x02210490 + ldr r0, [r0] + bl FUN_021DAE4C + mov r0, #1 + bl FUN_021DB730 + b _021DC614 +_021DC474: + ldr r0, [r4] + mov r1, r7 + bl FUN_021DAACC + cmp r0, #0 + beq _021DC4A0 + ldr r0, _021DC674 ; =0x02210490 + ldr r0, [r0] + bl FUN_021DAE4C + mov r0, #8 + bl FUN_021DB730 + b _021DC614 +_021DC4A0: + ldr r0, [r4] + bl FUN_021DB570 + cmp r0, #0 + beq _021DC4C8 + ldr r0, _021DC674 ; =0x02210490 + ldr r0, [r0] + bl FUN_021DAE4C + mov r0, #1 + bl FUN_021DB730 + b _021DC614 +_021DC4C8: + ldr r0, _021DC684 ; =0x021D3498 + ldr r0, [r0, #4] + bl OS_GetThreadPriority + sub r1, r0, #1 + ldr r0, [r4] + bl FUN_021DB4A4 + ldr r1, [r4] + add r0, r1, #0x1000 + ldr r0, [r0, #0xba0] + cmp r0, #0 + beq _021DC500 + ldr r0, _021DC688 ; =0x00001B34 + add r0, r1, r0 + bl OS_JoinThread +_021DC500: + ldr r0, [r4] + add r1, r0, #0x1000 + ldr r1, [r1, #0x20] + cmp r1, #2 + beq _021DC520 + cmp r1, #8 + beq _021DC54C + b _021DC534 +_021DC520: + ldr r0, _021DC670 ; =0x02210484 + mvn r1, #0 + ldr r0, [r0] + add r0, r0, #0x1000 + str r1, [r0, #4] +_021DC534: + ldr r0, _021DC674 ; =0x02210490 + ldr r0, [r0] + bl FUN_021DAE4C + mov r0, #3 + bl FUN_021DB730 + b _021DC614 +_021DC54C: + mov r1, r6 + bl FUN_021DA3DC + cmp r0, #1 + beq _021DC574 + ldr r0, _021DC674 ; =0x02210490 + ldr r0, [r0] + bl FUN_021DAE4C + mov r0, #2 + bl FUN_021DB730 + b _021DC614 +_021DC574: + ldr r0, [r4] + add r1, r0, #0x1000 + ldr sl, [r1, #0xa04] + cmp sl, #0 + bne _021DC598 + bl FUN_021DAE4C + mov r0, #2 + bl FUN_021DB730 + b _021DC614 +_021DC598: + mov r0, sl + bl strlen + add r1, r0, #1 + ldr r0, _021DC6F8 ; =0x0220C3F8 + blx sb + ldr r1, [r5] + add r1, r1, #0x1000 + str r0, [r1, #0x118] + ldr r0, [r5] + add r0, r0, #0x1000 + ldr r0, [r0, #0x118] + str r0, [sp, #0x10] + cmp r0, #0 + bne _021DC5E8 + ldr r0, _021DC674 ; =0x02210490 + ldr r0, [r0] + bl FUN_021DAE4C + mov r0, #4 + bl FUN_021DB730 + b _021DC614 +_021DC5E8: + mov r0, sl + bl strlen + mov r2, r0 + ldr r0, [sp, #0x10] + mov r1, sl + bl strncpy + ldr r0, [r4] + bl FUN_021DAE4C + mov r0, fp + bl OS_Sleep + b _021DB830 +_021DC614: + ldr r0, [sp] + cmp r0, #0 + beq _021DC630 + ldr r0, _021DC6FC ; =0x0220C4B4 + ldr r1, [sp] + mov r2, #0 + blx r8 +_021DC630: + cmp r7, #0 + beq _021DC648 + ldr r0, _021DC700 ; =0x0220C4C0 + mov r1, r7 + mov r2, #0 + blx r8 +_021DC648: + ldr r0, [sp, #8] + cmp r0, #0 + addeq sp, sp, #0x2d4 + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + ldr r0, _021DC704 ; =0x0220C4CC + ldr r1, [sp, #8] + mov r2, #0 + blx r8 + add sp, sp, #0x2d4 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_021DC670: .word 0x02210484 +_021DC674: .word 0x02210490 +_021DC678: .word 0x02210494 +_021DC67C: .word 0x00004E20 +_021DC680: .word 0x0220C36C +_021DC684: .word 0x021D3498 +_021DC688: .word 0x00001B34 +_021DC68C: .word 0x0220C418 +_021DC690: .word 0x021D74A8 +_021DC694: .word 0x0000012E +_021DC698: .word 0x0221048C +_021DC69C: .word 0x0220BEB4 +_021DC6A0: .word 0x0220C424 +_021DC6A4: .word 0x0220C444 +_021DC6A8: .word 0x0220C44C +_021DC6AC: .word 0x0220C454 +_021DC6B0: .word 0x0220C464 +_021DC6B4: .word 0x0220C394 +_021DC6B8: .word 0x022104B0 +_021DC6BC: .word 0x02210488 +_021DC6C0: .word 0xFFFFA4FA +_021DC6C4: .word 0x00009C40 +_021DC6C8: .word 0x0220C484 +_021DC6CC: .word 0x0220C48C +_021DC6D0: .word 0x0220C3B0 +_021DC6D4: .word 0x0220C494 +_021DC6D8: .word 0x0220C4A0 +_021DC6DC: .word 0x0220C4A4 +_021DC6E0: .word 0x0220C4AC +_021DC6E4: .word 0x0220C3CC +_021DC6E8: .word 0x0220C3D8 +_021DC6EC: .word 0x0220C3E8 +_021DC6F0: .word 0x0002BF20 +_021DC6F4: .word 0x0001D4C0 +_021DC6F8: .word 0x0220C3F8 +_021DC6FC: .word 0x0220C4B4 +_021DC700: .word 0x0220C4C0 +_021DC704: .word 0x0220C4CC + + arm_func_start FUN_021DC708 +FUN_021DC708: ; 0x021DC708 + stmdb sp!, {lr} + sub sp, sp, #0xc + ldr r0, _021DC788 ; =0x02210484 + ldr r1, [r0] + add r0, r1, #0x1000 + ldr r0, [r0, #0x188] + cmp r0, #0 + beq _021DC740 + ldr r0, _021DC78C ; =0x0000111C + add r0, r1, r0 + bl OS_IsThreadTerminated + cmp r0, #0 + addeq sp, sp, #0xc + ldmeqia sp!, {pc} +_021DC740: + ldr r1, _021DC788 ; =0x02210484 + ldr r0, _021DC78C ; =0x0000111C + ldr r2, [r1] + mov r3, #0x1000 + ldr r1, _021DC790 ; =FUN_021DB778 + str r3, [sp] + mov ip, #0x10 + add r0, r2, r0 + add r3, r2, #0x1000 + str ip, [sp, #4] + bl OS_CreateThread + ldr r1, _021DC788 ; =0x02210484 + ldr r0, _021DC78C ; =0x0000111C + ldr r1, [r1] + add r0, r1, r0 + bl OS_WakeupThreadDirect + add sp, sp, #0xc + ldmfd sp!, {pc} + .align 2, 0 +_021DC788: .word 0x02210484 +_021DC78C: .word 0x0000111C +_021DC790: .word FUN_021DB778 + + arm_func_start FUN_021DC794 +FUN_021DC794: ; 0x021DC794 + ldr r0, _021DC7A8 ; =0x02210484 + ldr r0, [r0] + add r0, r0, #0x1000 + ldr r0, [r0, #4] + bx lr + .align 2, 0 +_021DC7A8: .word 0x02210484 + + arm_func_start FUN_021DC7AC +FUN_021DC7AC: ; 0x021DC7AC + stmdb sp!, {r4, lr} + ldr r1, _021DC7E8 ; =0x02210484 + ldr r0, _021DC7EC ; =0x000011DC + ldr r1, [r1] + add r0, r1, r0 + bl OS_LockMutex + ldr r1, _021DC7E8 ; =0x02210484 + ldr r0, _021DC7EC ; =0x000011DC + ldr r2, [r1] + add r1, r2, #0x1000 + add r0, r2, r0 + ldr r4, [r1] + bl OS_UnlockMutex + mov r0, r4 + ldmia sp!, {r4, pc} + .align 2, 0 +_021DC7E8: .word 0x02210484 +_021DC7EC: .word 0x000011DC + + arm_func_start FUN_021DC7F0 +FUN_021DC7F0: ; 0x021DC7F0 + stmdb sp!, {lr} + sub sp, sp, #4 + ldr r0, _021DC864 ; =0x02210484 + ldr r0, [r0] + cmp r0, #0 + addeq sp, sp, #4 + ldmeqia sp!, {pc} + ldr r0, _021DC868 ; =0x02210490 + ldr r0, [r0] + cmp r0, #0 + beq _021DC820 + bl FUN_021DB440 +_021DC820: + bl FUN_021D9974 + ldr r0, _021DC864 ; =0x02210484 + ldr r1, [r0] + add r0, r1, #0x1000 + ldr r0, [r0, #0x188] + cmp r0, #0 + beq _021DC848 + ldr r0, _021DC86C ; =0x0000111C + add r0, r1, r0 + bl OS_JoinThread +_021DC848: + ldr r0, _021DC864 ; =0x02210484 + mvn r1, #6 + ldr r0, [r0] + add r0, r0, #0x1000 + str r1, [r0, #4] + add sp, sp, #4 + ldmfd sp!, {pc} + .align 2, 0 +_021DC864: .word 0x02210484 +_021DC868: .word 0x02210490 +_021DC86C: .word 0x0000111C + + arm_func_start FUN_021DC870 +FUN_021DC870: ; 0x021DC870 + stmdb sp!, {r4, lr} + ldr r1, _021DC958 ; =0x02210484 + ldr r0, _021DC95C ; =0x02210490 + ldr r1, [r1] + ldr r0, [r0] + add r1, r1, #0x1000 + cmp r0, #0 + ldr r4, [r1, #0x10c] + beq _021DC8B8 + bl FUN_021DAE4C + ldr r1, _021DC95C ; =0x02210490 + ldr r0, _021DC960 ; =0x0220C4D8 + ldr r1, [r1] + mov r2, #0 + blx r4 + ldr r0, _021DC95C ; =0x02210490 + mov r1, #0 + str r1, [r0] +_021DC8B8: + bl FUN_021D991C + ldr r0, _021DC958 ; =0x02210484 + ldr r0, [r0] + cmp r0, #0 + ldmeqia sp!, {r4, pc} + add r0, r0, #0x1000 + ldr r1, [r0, #0x114] + cmp r1, #0 + beq _021DC8FC + ldr r0, _021DC964 ; =0x0220C3B0 + mov r2, #0 + blx r4 + ldr r0, _021DC958 ; =0x02210484 + mov r1, #0 + ldr r0, [r0] + add r0, r0, #0x1000 + str r1, [r0, #0x114] +_021DC8FC: + ldr r0, _021DC958 ; =0x02210484 + ldr r0, [r0] + add r0, r0, #0x1000 + ldr r1, [r0, #0x118] + cmp r1, #0 + beq _021DC934 + ldr r0, _021DC968 ; =0x0220C464 + mov r2, #0 + blx r4 + ldr r0, _021DC958 ; =0x02210484 + mov r1, #0 + ldr r0, [r0] + add r0, r0, #0x1000 + str r1, [r0, #0x118] +_021DC934: + ldr r1, _021DC958 ; =0x02210484 + ldr r0, _021DC96C ; =0x0220C4E8 + ldr r1, [r1] + mov r2, #0 + blx r4 + ldr r0, _021DC958 ; =0x02210484 + mov r1, #0 + str r1, [r0] + ldmia sp!, {r4, pc} + .align 2, 0 +_021DC958: .word 0x02210484 +_021DC95C: .word 0x02210490 +_021DC960: .word 0x0220C4D8 +_021DC964: .word 0x0220C3B0 +_021DC968: .word 0x0220C464 +_021DC96C: .word 0x0220C4E8 + + arm_func_start FUN_021DC970 +FUN_021DC970: ; 0x021DC970 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #4 + ldr r1, _021DCA5C ; =0x02210484 + mov r5, r0 + ldr r0, [r1] + ldr r4, [r5] + cmp r0, #0 + addne sp, sp, #4 + movne r0, #4 + ldmneia sp!, {r4, r5, pc} + ldr r0, _021DCA60 ; =0x0220C4FC + ldr r1, _021DCA64 ; =0x000011F4 + blx r4 + ldr r1, _021DCA5C ; =0x02210484 + cmp r0, #0 + str r0, [r1] + addeq sp, sp, #4 + moveq r0, #4 + ldmeqia sp!, {r4, r5, pc} + ldr r2, _021DCA64 ; =0x000011F4 + mov r1, #0 + bl MI_CpuFill8 + ldr r1, _021DCA5C ; =0x02210484 + ldr r2, _021DCA68 ; =0xFFFE7961 + ldr r0, [r1] + ldr r3, _021DCA6C ; =0x00001108 + add r0, r0, #0x1000 + str r2, [r0, #4] + ldr ip, [r1] + ldmia r5, {r0, r1, r2} + add r3, ip, r3 + stmia r3, {r0, r1, r2} + ldr r0, _021DCA70 ; =0x02210490 + ldr r0, [r0] + cmp r0, #0 + addne sp, sp, #4 + movne r0, #4 + ldmneia sp!, {r4, r5, pc} + ldr r0, _021DCA74 ; =0x0220C510 + ldr r1, _021DCA78 ; =0x00001C10 + blx r4 + ldr r1, _021DCA70 ; =0x02210490 + cmp r0, #0 + str r0, [r1] + addeq sp, sp, #4 + moveq r0, #4 + ldmeqia sp!, {r4, r5, pc} + ldr r1, _021DCA5C ; =0x02210484 + ldr r0, _021DCA7C ; =0x000011DC + ldr r2, [r1] + ldr r1, _021DCA80 ; =0x0221048C + mov r3, #0 + add r0, r2, r0 + str r3, [r1] + bl OS_InitMutex + bl FUN_021DC708 + mov r0, #0 + add sp, sp, #4 + ldmia sp!, {r4, r5, pc} + .align 2, 0 +_021DCA5C: .word 0x02210484 +_021DCA60: .word 0x0220C4FC +_021DCA64: .word 0x000011F4 +_021DCA68: .word 0xFFFE7961 +_021DCA6C: .word 0x00001108 +_021DCA70: .word 0x02210490 +_021DCA74: .word 0x0220C510 +_021DCA78: .word 0x00001C10 +_021DCA7C: .word 0x000011DC +_021DCA80: .word 0x0221048C + + arm_func_start FUN_021DCA84 +FUN_021DCA84: ; 0x021DCA84 + stmdb sp!, {r4, r5, r6, r7, r8, lr} + sub sp, sp, #0x40 + mov r6, r0 + bl strlen + mov r4, r0 + ldr r0, _021DCCB4 ; =0x0220C580 + bl strlen + cmp r4, r0 + bne _021DCCA8 + ldrsb r0, [r6, #7] + cmp r0, #0x20 + bne _021DCCA8 + ldrsb r0, [r6, #0xb] + cmp r0, #0x20 + bne _021DCCA8 + ldrsb r0, [r6, #0x10] + cmp r0, #0x20 + bne _021DCCA8 + ldrsb r0, [r6, #0x13] + cmp r0, #0x3a + bne _021DCCA8 + ldrsb r0, [r6, #0x16] + cmp r0, #0x3a + bne _021DCCA8 + ldrsb r0, [r6, #0x19] + cmp r0, #0x20 + bne _021DCCA8 + add r0, sp, #0 + bl RTC_GetDate + cmp r0, #0 + bne _021DCCA8 + add r0, sp, #0x10 + bl RTC_GetTime + cmp r0, #0 + bne _021DCCA8 + add r0, sp, #0 + add r1, sp, #0x10 + bl RTC_ConvertDateTimeToSecond + mov r4, r0 + mov r5, r1 + mvn r0, #0 + cmp r5, r0 + cmpeq r4, r0 + beq _021DCCA8 + add r0, sp, #0x1c + mov r1, r6 + bl strcpy + mov r2, #0 + ldr r1, _021DCCB8 ; =0x021D74A8 + add r0, sp, #0x28 + strb r2, [sp, #0x23] + strb r2, [sp, #0x27] + strb r2, [sp, #0x2c] + strb r2, [sp, #0x2f] + strb r2, [sp, #0x32] + strb r2, [sp, #0x35] + str r2, [r1] + bl atol + ldr r1, _021DCCB8 ; =0x021D74A8 + str r0, [sp] + ldr r1, [r1] + cmp r1, #0x22 + beq _021DCCA8 + sub r1, r0, #0x7d0 + mov r0, #0xd + str r1, [sp] + str r0, [sp, #4] + mov r8, #0 + ldr r7, _021DCCBC ; =0x0220C550 + add r6, sp, #0x24 +_021DCB9C: + ldr r0, [r7, r8, lsl #2] + mov r1, r6 + bl strcmp + cmp r0, #0 + addeq r0, r8, #1 + streq r0, [sp, #4] + beq _021DCBC4 + add r8, r8, #1 + cmp r8, #0xc + blt _021DCB9C +_021DCBC4: + ldr r0, [sp, #4] + cmp r0, #0xc + bhi _021DCCA8 + ldr r1, _021DCCB8 ; =0x021D74A8 + mov r2, #0 + add r0, sp, #0x21 + str r2, [r1] + bl atol + ldr r1, _021DCCB8 ; =0x021D74A8 + str r0, [sp, #8] + ldr r0, [r1] + cmp r0, #0x22 + beq _021DCCA8 + mov r2, #0 + add r0, sp, #0x2d + str r2, [r1] + bl atol + ldr r1, _021DCCB8 ; =0x021D74A8 + str r0, [sp, #0x10] + ldr r0, [r1] + cmp r0, #0x22 + beq _021DCCA8 + mov r2, #0 + add r0, sp, #0x30 + str r2, [r1] + bl atol + ldr r1, _021DCCB8 ; =0x021D74A8 + str r0, [sp, #0x14] + ldr r0, [r1] + cmp r0, #0x22 + beq _021DCCA8 + mov r2, #0 + add r0, sp, #0x33 + str r2, [r1] + bl atol + ldr r1, _021DCCB8 ; =0x021D74A8 + str r0, [sp, #0x18] + ldr r0, [r1] + cmp r0, #0x22 + beq _021DCCA8 + add r0, sp, #0 + add r1, sp, #0x10 + bl RTC_ConvertDateTimeToSecond + mvn r2, #0 + cmp r1, r2 + cmpeq r0, r2 + beq _021DCCA8 + subs r4, r4, r0 + ldr r2, _021DCCC0 ; =0x022104FC + sbc r3, r5, r1 + ldr r1, _021DCCC4 ; =0x022104F8 + mov r0, #1 + str r3, [r2, #4] + str r0, [r1] + add sp, sp, #0x40 + str r4, [r2] + ldmia sp!, {r4, r5, r6, r7, r8, pc} +_021DCCA8: + mov r0, #0 + add sp, sp, #0x40 + ldmia sp!, {r4, r5, r6, r7, r8, pc} + .align 2, 0 +_021DCCB4: .word 0x0220C580 +_021DCCB8: .word 0x021D74A8 +_021DCCBC: .word 0x0220C550 +_021DCCC0: .word 0x022104FC +_021DCCC4: .word 0x022104F8 + + arm_func_start FUN_021DCCC8 +FUN_021DCCC8: ; 0x021DCCC8 + stmdb sp!, {r4, lr} + sub sp, sp, #8 + ldr r0, _021DCED4 ; =0x02210504 + mov r1, #0 + ldr r0, [r0] + add r4, r0, #8 + mov r0, r4 + bl FUN_021DA3DC + cmp r0, #0 + bne _021DCD08 + ldr r1, _021DCED8 ; =0xFFFF9DF3 + mov r0, #0x10 + bl FUN_021DD6B0 + add sp, sp, #8 + mov r0, #0 + ldmia sp!, {r4, pc} +_021DCD08: + ldr r1, _021DCEDC ; =0x0220C5A0 + mov r0, r4 + bl FUN_021DA388 + cmp r0, #0 + beq _021DCD20 + bl FUN_021DCA84 +_021DCD20: + ldr r1, _021DCEE0 ; =0x0220C5A8 + mov r0, r4 + bl FUN_021DA388 + cmp r0, #0 + bne _021DCD4C + ldr r1, _021DCED8 ; =0xFFFF9DF3 + mov r0, #0x10 + bl FUN_021DD6B0 + add sp, sp, #8 + mov r0, #0 + ldmia sp!, {r4, pc} +_021DCD4C: + bl atol + ldr r1, _021DCEE4 ; =0x021D74A8 + mov r2, r0 + ldr r0, [r1] + cmp r0, #0x22 + bne _021DCD7C + ldr r1, _021DCED8 ; =0xFFFF9DF3 + mov r0, #0x10 + bl FUN_021DD6B0 + add sp, sp, #8 + mov r0, #0 + ldmia sp!, {r4, pc} +_021DCD7C: + cmp r2, #0xc8 + beq _021DCDA0 + ldr r1, _021DCEE8 ; =0xFFFF9E58 + mov r0, #0x10 + sub r1, r1, r2 + bl FUN_021DD6B0 + add sp, sp, #8 + mov r0, #0 + ldmia sp!, {r4, pc} +_021DCDA0: + ldr r1, _021DCEEC ; =0x0220C5B4 + add r2, sp, #0 + mov r0, r4 + mov r3, #4 + bl FUN_021DA334 + cmp r0, #0 + bgt _021DCDD4 + ldr r1, _021DCED8 ; =0xFFFF9DF3 + mov r0, #0x10 + bl FUN_021DD6B0 + add sp, sp, #8 + mov r0, #0 + ldmia sp!, {r4, pc} +_021DCDD4: + add r0, sp, #0 + bl atol + ldr r1, _021DCEE4 ; =0x021D74A8 + mov r2, r0 + ldr r0, [r1] + cmp r0, #0x22 + bne _021DCE08 + ldr r1, _021DCED8 ; =0xFFFF9DF3 + mov r0, #0x10 + bl FUN_021DD6B0 + add sp, sp, #8 + mov r0, #0 + ldmia sp!, {r4, pc} +_021DCE08: + cmp r2, #0x64 + blt _021DCE2C + ldr r1, _021DCEF0 ; =0xFFFFA240 + mov r0, #0x10 + sub r1, r1, r2 + bl FUN_021DD6B0 + add sp, sp, #8 + mov r0, #0 + ldmia sp!, {r4, pc} +_021DCE2C: + ldr r0, _021DCED4 ; =0x02210504 + ldr r1, _021DCEF4 ; =0x0220C5C0 + ldr r2, [r0] + mov r0, r4 + add r2, r2, #0x1000 + ldr r2, [r2, #0xc18] + mov r3, #0x40 + add r2, r2, #4 + bl FUN_021DA334 + ldr r0, _021DCED4 ; =0x02210504 + ldr r1, _021DCEF8 ; =0x0220C5C8 + ldr r2, [r0] + mov r0, r4 + add r2, r2, #0x1000 + ldr r2, [r2, #0xc18] + mov r3, #0x12c + add r2, r2, #0x45 + bl FUN_021DA334 + ldr r1, _021DCEFC ; =0x0220C5D8 + add r2, sp, #0 + mov r0, r4 + mov r3, #1 + bl FUN_021DA334 + ldrsb r0, [sp] + cmp r0, #0x59 + bne _021DCEB0 + ldr r0, _021DCED4 ; =0x02210504 + mov r1, #1 + ldr r0, [r0] + add r0, r0, #0x1000 + ldr r0, [r0, #0xc18] + str r1, [r0] + b _021DCEC8 +_021DCEB0: + ldr r0, _021DCED4 ; =0x02210504 + mov r1, #0 + ldr r0, [r0] + add r0, r0, #0x1000 + ldr r0, [r0, #0xc18] + str r1, [r0] +_021DCEC8: + mov r0, #1 + add sp, sp, #8 + ldmia sp!, {r4, pc} + .align 2, 0 +_021DCED4: .word 0x02210504 +_021DCED8: .word 0xFFFF9DF3 +_021DCEDC: .word 0x0220C5A0 +_021DCEE0: .word 0x0220C5A8 +_021DCEE4: .word 0x021D74A8 +_021DCEE8: .word 0xFFFF9E58 +_021DCEEC: .word 0x0220C5B4 +_021DCEF0: .word 0xFFFFA240 +_021DCEF4: .word 0x0220C5C0 +_021DCEF8: .word 0x0220C5C8 +_021DCEFC: .word 0x0220C5D8 + + arm_func_start FUN_021DCF00 +FUN_021DCF00: ; 0x021DCF00 + stmdb sp!, {lr} + sub sp, sp, #4 + ldr r0, _021DCFF0 ; =0x02210504 + ldr r1, [r0] + cmp r1, #0 + addeq sp, sp, #4 + moveq r0, #0 + ldmeqia sp!, {pc} + add r0, r1, #0x1000 + ldr r0, [r0, #0xba8] + cmp r0, #0 + addeq sp, sp, #4 + moveq r0, #1 + ldmeqia sp!, {pc} + ldr r0, _021DCFF4 ; =0x00001B3C + add r0, r1, r0 + bl OS_IsThreadTerminated + cmp r0, #1 + bne _021DCFE4 + ldr r0, _021DCFF0 ; =0x02210504 + ldr r1, [r0] + add r0, r1, #0x1000 + ldr r0, [r0, #0x28] + cmp r0, #7 + beq _021DCFB0 + cmp r0, #8 + bne _021DCFC4 + bl FUN_021DCCC8 + cmp r0, #0 + bne _021DCF94 + ldr r0, _021DCFF0 ; =0x02210504 + ldr r0, [r0] + add r0, r0, #8 + bl FUN_021DAE4C + add sp, sp, #4 + mov r0, #4 + ldmfd sp!, {pc} +_021DCF94: + ldr r0, _021DCFF0 ; =0x02210504 + ldr r0, [r0] + add r0, r0, #8 + bl FUN_021DAE4C + add sp, sp, #4 + mov r0, #3 + ldmfd sp!, {pc} +_021DCFB0: + add r0, r1, #8 + bl FUN_021DAE4C + add sp, sp, #4 + mov r0, #5 + ldmfd sp!, {pc} +_021DCFC4: + add r0, r1, #8 + bl FUN_021DAE4C + ldr r1, _021DCFF8 ; =0xFFFFA1DB + mov r0, #0x11 + bl FUN_021DD6B0 + add sp, sp, #4 + mov r0, #4 + ldmfd sp!, {pc} +_021DCFE4: + mov r0, #2 + add sp, sp, #4 + ldmfd sp!, {pc} + .align 2, 0 +_021DCFF0: .word 0x02210504 +_021DCFF4: .word 0x00001B3C +_021DCFF8: .word 0xFFFFA1DB + + arm_func_start FUN_021DCFFC +FUN_021DCFFC: ; 0x021DCFFC + stmdb sp!, {r4, r5, lr} + sub sp, sp, #0xb4 + ldr r2, _021DD244 ; =0x02210504 + mov r5, r0 + ldr r2, [r2] + mov r0, r1 + add r2, r2, #0x1000 + str r1, [r2, #0xc18] + mov r1, #0 + mov r2, #0x174 + bl MI_CpuFill8 + ldr r0, _021DD244 ; =0x02210504 + ldr r1, [r0] + add r0, r1, #0x1000 + ldr r0, [r0, #0xba8] + cmp r0, #0 + beq _021DD058 + ldr r0, _021DD248 ; =0x00001B3C + add r0, r1, r0 + bl OS_IsThreadTerminated + cmp r0, #0 + bne _021DD058 + bl OS_Terminate +_021DD058: + ldr r0, _021DD24C ; =0x0220BEB4 + ldr r1, _021DD244 ; =0x02210504 + ldr r0, [r0] + mov r3, #0 + ldr r4, [r1] + mov r2, #0x1000 + str r0, [sp] + str r3, [sp, #4] + str r2, [sp, #8] + ldr r2, [r4] + ldr r1, _021DD250 ; =0x0220C5E4 + str r2, [sp, #0xc] + ldr r2, [r4, #4] + str r2, [sp, #0x10] + bl strcmp + cmp r0, #0 + movne r0, #1 + strne r0, [sp, #0x14] + moveq r0, #0 + ldr r2, _021DD254 ; =0x00004E20 + streq r0, [sp, #0x14] + add r1, sp, #0 + add r0, r4, #8 + str r2, [sp, #0x18] + bl FUN_021DB608 + cmp r0, #0 + beq _021DD0DC + ldr r1, _021DD258 ; =0xFFFFA1DC + mov r0, #9 + bl FUN_021DD6B0 + add sp, sp, #0xb4 + mov r0, #0 + ldmia sp!, {r4, r5, pc} +_021DD0DC: + add r0, sp, #0x1c + bl FUN_021DA238 + cmp r0, #0 + beq _021DD10C + ldr r0, _021DD244 ; =0x02210504 + add r1, sp, #0x1c + ldr r0, [r0] + mov r2, #0 + add r0, r0, #8 + bl FUN_021D9C2C + cmp r0, #0 + bne _021DD134 +_021DD10C: + ldr r0, _021DD244 ; =0x02210504 + ldr r0, [r0] + add r0, r0, #8 + bl FUN_021DAE4C + ldr r1, _021DD258 ; =0xFFFFA1DC + mov r0, #9 + bl FUN_021DD6B0 + add sp, sp, #0xb4 + mov r0, #0 + ldmia sp!, {r4, r5, pc} +_021DD134: + ldr r0, _021DD244 ; =0x02210504 + ldr r1, _021DD25C ; =0x0220C604 + ldr r0, [r0] + ldr r2, _021DD260 ; =0x0220C60C + add r0, r0, #8 + mov r3, #6 + bl FUN_021DAB68 + cmp r0, #0 + bne _021DD17C + ldr r0, _021DD244 ; =0x02210504 + ldr r1, _021DD264 ; =0x0220C614 + ldr r0, [r0] + mov r2, r5 + add r0, r0, #8 + mov r3, #4 + bl FUN_021DAB68 + cmp r0, #0 + beq _021DD1A4 +_021DD17C: + ldr r0, _021DD244 ; =0x02210504 + ldr r0, [r0] + add r0, r0, #8 + bl FUN_021DAE4C + ldr r1, _021DD258 ; =0xFFFFA1DC + mov r0, #9 + bl FUN_021DD6B0 + add sp, sp, #0xb4 + mov r0, #0 + ldmia sp!, {r4, r5, pc} +_021DD1A4: + ldr r0, _021DD244 ; =0x02210504 + ldr r0, [r0] + add r0, r0, #8 + bl FUN_021DB570 + cmp r0, #0 + beq _021DD1E4 + ldr r0, _021DD244 ; =0x02210504 + ldr r0, [r0] + add r0, r0, #8 + bl FUN_021DAE4C + ldr r1, _021DD258 ; =0xFFFFA1DC + mov r0, #9 + bl FUN_021DD6B0 + add sp, sp, #0xb4 + mov r0, #0 + ldmia sp!, {r4, r5, pc} +_021DD1E4: + ldr r0, _021DD268 ; =0x021D3498 + ldr r0, [r0, #4] + bl OS_GetThreadPriority + ldr r1, _021DD244 ; =0x02210504 + ldr r2, [r1] + sub r1, r0, #1 + add r0, r2, #8 + bl FUN_021DB4A4 + ldr r0, _021DD244 ; =0x02210504 + ldr r1, [r0] + add r0, r1, #0x1000 + ldr r0, [r0, #0xba8] + cmp r0, #0 + addne sp, sp, #0xb4 + movne r0, #1 + ldmneia sp!, {r4, r5, pc} + add r0, r1, #8 + bl FUN_021DAE4C + ldr r1, _021DD258 ; =0xFFFFA1DC + mov r0, #9 + bl FUN_021DD6B0 + mov r0, #0 + add sp, sp, #0xb4 + ldmia sp!, {r4, r5, pc} + .align 2, 0 +_021DD244: .word 0x02210504 +_021DD248: .word 0x00001B3C +_021DD24C: .word 0x0220BEB4 +_021DD250: .word 0x0220C5E4 +_021DD254: .word 0x00004E20 +_021DD258: .word 0xFFFFA1DC +_021DD25C: .word 0x0220C604 +_021DD260: .word 0x0220C60C +_021DD264: .word 0x0220C614 +_021DD268: .word 0x021D3498 + + arm_func_start FUN_021DD26C +FUN_021DD26C: ; 0x021DD26C + stmdb sp!, {lr} + sub sp, sp, #4 + ldr r0, _021DD2BC ; =0x02210504 + ldr r0, [r0] + cmp r0, #0 + addeq sp, sp, #4 + ldmeqia sp!, {pc} + add r0, r0, #8 + bl FUN_021DAE4C + ldr r1, _021DD2BC ; =0x02210504 + ldr r0, _021DD2C0 ; =0x0220C618 + ldr r1, [r1] + mov r2, #0 + ldr r3, [r1, #4] + blx r3 + ldr r0, _021DD2BC ; =0x02210504 + mov r1, #0 + str r1, [r0] + add sp, sp, #4 + ldmfd sp!, {pc} + .align 2, 0 +_021DD2BC: .word 0x02210504 +_021DD2C0: .word 0x0220C618 + + arm_func_start FUN_021DD2C4 +FUN_021DD2C4: ; 0x021DD2C4 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #4 + ldr r2, _021DD35C ; =0x02210504 + mov r5, r0 + ldr r0, [r2] + mov r4, r1 + cmp r0, #0 + beq _021DD2FC + ldr r1, _021DD360 ; =0xFFFFA1DC + mov r0, #9 + bl FUN_021DD6B0 + add sp, sp, #4 + mov r0, #0 + ldmia sp!, {r4, r5, pc} +_021DD2FC: + ldr r0, _021DD364 ; =0x0220C628 + ldr r1, _021DD368 ; =0x00001C1C + blx r5 + ldr r1, _021DD35C ; =0x02210504 + cmp r0, #0 + str r0, [r1] + bne _021DD330 + ldr r1, _021DD360 ; =0xFFFFA1DC + mov r0, #9 + bl FUN_021DD6B0 + add sp, sp, #4 + mov r0, #0 + ldmia sp!, {r4, r5, pc} +_021DD330: + ldr r2, _021DD368 ; =0x00001C1C + mov r1, #0 + bl MI_CpuFill8 + ldr r1, _021DD35C ; =0x02210504 + mov r0, #1 + ldr r2, [r1] + str r5, [r2] + ldr r1, [r1] + str r4, [r1, #4] + add sp, sp, #4 + ldmia sp!, {r4, r5, pc} + .align 2, 0 +_021DD35C: .word 0x02210504 +_021DD360: .word 0xFFFFA1DC +_021DD364: .word 0x0220C628 +_021DD368: .word 0x00001C1C + + arm_func_start FUN_021DD36C +FUN_021DD36C: ; 0x021DD36C + stmdb sp!, {r4, r5, r6, r7, r8, lr} + sub sp, sp, #8 + ands r4, r1, #3 + addne sp, sp, #8 + mvnne r0, #0 + ldmneia sp!, {r4, r5, r6, r7, r8, pc} + mov r6, #0 + mov r5, r6 + cmp r1, #0 + bls _021DD3AC +_021DD394: + ldrsb r4, [r0, r5] + add r5, r5, #1 + cmp r4, #0x2a + addne r6, r6, #6 + cmp r5, r1 + blo _021DD394 +_021DD3AC: + cmp r2, #0 + moveq r0, r6, asr #2 + addeq r0, r6, r0, lsr #29 + addeq sp, sp, #8 + moveq r0, r0, asr #3 + ldmeqia sp!, {r4, r5, r6, r7, r8, pc} + mov r4, r6, asr #2 + add r4, r6, r4, lsr #29 + mov r4, r4, asr #3 + cmp r3, r4 + addlo sp, sp, #8 + mvnlo r0, #0 + ldmloia sp!, {r4, r5, r6, r7, r8, pc} + cmp r1, #0 + moveq r0, #0 + streqb r0, [r2] + addeq sp, sp, #8 + ldmeqia sp!, {r4, r5, r6, r7, r8, pc} + mov r6, r2 + add ip, sp, #0 + mov lr, #0 + mov r1, #0x3f + mov r3, #0x3e +_021DD408: + mov r8, lr + mov r5, ip +_021DD410: + ldrsb r7, [r0, r8] + cmp r7, #0x41 + blt _021DD42C + cmp r7, #0x5a + suble r7, r7, #0x41 + strleb r7, [r5] + ble _021DD474 +_021DD42C: + cmp r7, #0x61 + blt _021DD444 + cmp r7, #0x7a + suble r7, r7, #0x47 + strleb r7, [r5] + ble _021DD474 +_021DD444: + cmp r7, #0x30 + blt _021DD45C + cmp r7, #0x39 + addle r7, r7, #4 + strleb r7, [r5] + ble _021DD474 +_021DD45C: + cmp r7, #0x2e + streqb r3, [r5] + beq _021DD474 + cmp r7, #0x2d + streqb r1, [r5] + strneb lr, [r5] +_021DD474: + add r8, r8, #1 + cmp r8, #4 + add r5, r5, #1 + blt _021DD410 + ldrsb r8, [sp] + ldrsb r7, [sp, #1] + add r5, r6, #1 + mov r8, r8, lsl #2 + orr r7, r8, r7, asr #4 + sub r5, r5, r2 + strb r7, [r6] + cmp r5, r4 + add r0, r0, #4 + bge _021DD4F0 + ldrsb r8, [sp, #1] + ldrsb r7, [sp, #2] + add r5, r6, #2 + mov r8, r8, lsl #4 + orr r7, r8, r7, asr #2 + sub r5, r5, r2 + strb r7, [r6, #1] + cmp r5, r4 + bge _021DD4F0 + ldrsb r7, [sp, #2] + ldrsb r5, [sp, #3] + orr r5, r5, r7, lsl #6 + strb r5, [r6, #2] + add r6, r6, #3 + sub r5, r6, r2 + cmp r5, r4 + blt _021DD408 +_021DD4F0: + mov r0, r5 + add sp, sp, #8 + ldmia sp!, {r4, r5, r6, r7, r8, pc} + + arm_func_start FUN_021DD4FC +FUN_021DD4FC: ; 0x021DD4FC + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0xc + ldr r4, _021DD69C ; =0xAAAAAAAB + str r2, [sp] + umull r4, r5, r1, r4 + ldr r6, _021DD6A0 ; =0x00000003 + mov r5, r5, lsr #1 + umull r4, r5, r6, r5 + mov sl, r0 + subs r5, r1, r4 + movne r4, #4 + ldr r2, _021DD69C ; =0xAAAAAAAB + ldr r0, [sp] + moveq r4, #0 + cmp r0, #0 + umull r0, r2, r1, r2 + mov r2, r2, lsr #1 + addeq sp, sp, #0xc + add r0, r4, r2, lsl #2 + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + cmp r3, r0 + addlo sp, sp, #0xc + mvnlo r0, #0 + ldmloia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + add r7, sl, r1 + ldr r6, [sp] + cmp sl, r7 + beq _021DD68C + mov r0, #1 + mov r5, #0 + str r0, [sp, #4] + mov fp, #3 + mov r4, #0x2a +_021DD580: + sub sb, r7, sl + ldr r1, _021DD6A4 ; =0x2AAAAAAB + mov r0, sb, lsl #3 + smull r2, r3, r1, r0 + ldr r1, _021DD6A8 ; =0x00000006 + add r3, r3, r0, lsr #31 + smull r2, r3, r1, r3 + subs r3, r0, r2 + ldr r1, _021DD6A4 ; =0x2AAAAAAB + ldrne r8, [sp, #4] + smull r2, r3, r1, r0 + moveq r8, r5 + add r3, r3, r0, lsr #31 + cmp sb, #3 + movge sb, fp + add r0, sp, #8 + mov r1, r5 + mov r2, fp + add r8, r3, r8 + bl MI_CpuFill8 + mov r0, sl + add r1, sp, #8 + mov r2, sb + bl MI_CpuCopy8 + ldr r0, _021DD6AC ; =0x0220C638 + cmp r8, #2 + ldr r1, [r0] + ldrb r0, [sp, #8] + mov r0, r0, asr #2 + ldrsb r0, [r1, r0] + strb r0, [r6] + strltb r4, [r6, #1] + blt _021DD628 + ldrb r2, [sp, #8] + ldr r0, _021DD6AC ; =0x0220C638 + ldrb r1, [sp, #9] + mov r2, r2, lsl #4 + and r2, r2, #0x3f + ldr r0, [r0] + orr r1, r2, r1, asr #4 + ldrsb r0, [r0, r1] + strb r0, [r6, #1] +_021DD628: + cmp r8, #3 + strltb r4, [r6, #2] + blt _021DD658 + ldrb r2, [sp, #9] + ldr r0, _021DD6AC ; =0x0220C638 + ldrb r1, [sp, #0xa] + mov r2, r2, lsl #2 + and r2, r2, #0x3f + ldr r0, [r0] + orr r1, r2, r1, asr #6 + ldrsb r0, [r0, r1] + strb r0, [r6, #2] +_021DD658: + cmp r8, #4 + strltb r4, [r6, #3] + blt _021DD67C + ldr r0, _021DD6AC ; =0x0220C638 + ldrb r1, [sp, #0xa] + ldr r2, [r0] + and r0, r1, #0x3f + ldrsb r0, [r2, r0] + strb r0, [r6, #3] +_021DD67C: + add sl, sl, sb + cmp sl, r7 + add r6, r6, #4 + bne _021DD580 +_021DD68C: + ldr r0, [sp] + sub r0, r6, r0 + add sp, sp, #0xc + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_021DD69C: .word 0xAAAAAAAB +_021DD6A0: .word 0x00000003 +_021DD6A4: .word 0x2AAAAAAB +_021DD6A8: .word 0x00000006 +_021DD6AC: .word 0x0220C638 + + arm_func_start FUN_021DD6B0 +FUN_021DD6B0: ; 0x021DD6B0 + ldr r3, _021DD6CC ; =0x02210508 + ldr r2, [r3] + cmp r2, #9 + ldrne r2, _021DD6D0 ; =0x0221050C + strne r0, [r3] + strne r1, [r2] + bx lr + .align 2, 0 +_021DD6CC: .word 0x02210508 +_021DD6D0: .word 0x0221050C + + arm_func_start FUN_021DD6D4 +FUN_021DD6D4: ; 0x021DD6D4 + ldr r0, _021DD6EC ; =0x02210508 + ldr r0, [r0] + cmp r0, #0 + movne r0, #1 + moveq r0, #0 + bx lr + .align 2, 0 +_021DD6EC: .word 0x02210508 + + arm_func_start FUN_021DD6F0 +FUN_021DD6F0: ; 0x021DD6F0 + ldr r1, _021DD710 ; =0x02210508 + ldr r0, [r1] + cmp r0, #9 + movne r2, #0 + ldrne r0, _021DD714 ; =0x0221050C + strne r2, [r1] + strne r2, [r0] + bx lr + .align 2, 0 +_021DD710: .word 0x02210508 +_021DD714: .word 0x0221050C + + arm_func_start FUN_021DD718 +FUN_021DD718: ; 0x021DD718 + cmp r0, #0 + ldrne r2, _021DD800 ; =0x0221050C + ldrne r2, [r2] + strne r2, [r0] + cmp r1, #0 + beq _021DD7F4 + ldr r0, _021DD804 ; =0x02210508 + ldr r0, [r0] + cmp r0, #0x11 + addls pc, pc, r0, lsl #2 + b _021DD7EC +_021DD744: ; jump table + b _021DD7EC ; case 0 + b _021DD7BC ; case 1 + b _021DD78C ; case 2 + b _021DD78C ; case 3 + b _021DD78C ; case 4 + b _021DD78C ; case 5 + b _021DD798 ; case 6 + b _021DD7A4 ; case 7 + b _021DD78C ; case 8 + b _021DD7BC ; case 9 + b _021DD7B0 ; case 10 + b _021DD7B0 ; case 11 + b _021DD7B0 ; case 12 + b _021DD7B0 ; case 13 + b _021DD7C8 ; case 14 + b _021DD7D4 ; case 15 + b _021DD7E0 ; case 16 + b _021DD7D4 ; case 17 +_021DD78C: + mov r0, #6 + str r0, [r1] + b _021DD7F4 +_021DD798: + mov r0, #3 + str r0, [r1] + b _021DD7F4 +_021DD7A4: + mov r0, #4 + str r0, [r1] + b _021DD7F4 +_021DD7B0: + mov r0, #1 + str r0, [r1] + b _021DD7F4 +_021DD7BC: + mov r0, #7 + str r0, [r1] + b _021DD7F4 +_021DD7C8: + mov r0, #5 + str r0, [r1] + b _021DD7F4 +_021DD7D4: + mov r0, #6 + str r0, [r1] + b _021DD7F4 +_021DD7E0: + mov r0, #2 + str r0, [r1] + b _021DD7F4 +_021DD7EC: + mov r0, #0 + str r0, [r1] +_021DD7F4: + ldr r0, _021DD804 ; =0x02210508 + ldr r0, [r0] + bx lr + .align 2, 0 +_021DD800: .word 0x0221050C +_021DD804: .word 0x02210508 + + arm_func_start FUN_021DD808 +FUN_021DD808: ; 0x021DD808 + cmp r0, #0 + ldrne r1, _021DD824 ; =0x0221050C + ldrne r1, [r1] + strne r1, [r0] + ldr r0, _021DD828 ; =0x02210508 + ldr r0, [r0] + bx lr + .align 2, 0 +_021DD824: .word 0x0221050C +_021DD828: .word 0x02210508 + + arm_func_start FUN_021DD82C +FUN_021DD82C: ; 0x021DD82C + ldr ip, _021DD840 ; =FUN_021DD904 + mov r1, r0 + mov r0, #5 + mov r2, #0 + bx ip + .align 2, 0 +_021DD840: .word FUN_021DD904 + + arm_func_start FUN_021DD844 +FUN_021DD844: ; 0x021DD844 + ldr ip, _021DD85C ; =FUN_021DD8E8 + mov r2, r1 + mov r1, r0 + mov r3, r2 + mov r0, #5 + bx ip + .align 2, 0 +_021DD85C: .word FUN_021DD8E8 + + arm_func_start FUN_021DD860 +FUN_021DD860: ; 0x021DD860 + ldr ip, _021DD870 ; =FUN_021DD944 + mov r1, r0 + mov r0, #5 + bx ip + .align 2, 0 +_021DD870: .word FUN_021DD944 + + arm_func_start FUN_021DD874 +FUN_021DD874: ; 0x021DD874 + stmdb sp!, {r4, r5, r6, r7, r8, lr} + ldr ip, _021DD8E0 ; =0x02210514 + mov r4, r2 + mov r7, r3 + mov r5, r1 + ldr r2, [sp, #0x18] + ldr r3, [ip] + mov r1, r7 + mov r8, r0 + blx r3 + movs r6, r0 + moveq r0, #0 + ldmeqia sp!, {r4, r5, r6, r7, r8, pc} + cmp r5, #0 + beq _021DD8D8 + mov r0, r5 + mov r1, r6 + mov r2, r7 + bl MI_CpuCopy8 + ldr r1, _021DD8E4 ; =0x02210510 + mov r0, r8 + ldr r3, [r1] + mov r1, r5 + mov r2, r4 + blx r3 +_021DD8D8: + mov r0, r6 + ldmia sp!, {r4, r5, r6, r7, r8, pc} + .align 2, 0 +_021DD8E0: .word 0x02210514 +_021DD8E4: .word 0x02210510 + + arm_func_start FUN_021DD8E8 +FUN_021DD8E8: ; 0x021DD8E8 + stmdb sp!, {lr} + sub sp, sp, #4 + mov ip, #0x20 + str ip, [sp] + bl FUN_021DD874 + add sp, sp, #4 + ldmfd sp!, {pc} + + arm_func_start FUN_021DD904 +FUN_021DD904: ; 0x021DD904 + stmdb sp!, {lr} + sub sp, sp, #4 + ldr r3, _021DD920 ; =0x02210510 + ldr r3, [r3] + blx r3 + add sp, sp, #4 + ldmfd sp!, {pc} + .align 2, 0 +_021DD920: .word 0x02210510 + + arm_func_start FUN_021DD924 +FUN_021DD924: ; 0x021DD924 + stmdb sp!, {lr} + sub sp, sp, #4 + ldr r3, _021DD940 ; =0x02210514 + ldr r3, [r3] + blx r3 + add sp, sp, #4 + ldmfd sp!, {pc} + .align 2, 0 +_021DD940: .word 0x02210514 + + arm_func_start FUN_021DD944 +FUN_021DD944: ; 0x021DD944 + stmdb sp!, {lr} + sub sp, sp, #4 + ldr r3, _021DD964 ; =0x02210514 + mov r2, #0x20 + ldr r3, [r3] + blx r3 + add sp, sp, #4 + ldmfd sp!, {pc} + .align 2, 0 +_021DD964: .word 0x02210514 + + arm_func_start FUN_021DD968 +FUN_021DD968: ; 0x021DD968 + ldr r3, _021DD97C ; =0x02210514 + ldr r2, _021DD980 ; =0x02210510 + str r0, [r3] + str r1, [r2] + bx lr + .align 2, 0 +_021DD97C: .word 0x02210514 +_021DD980: .word 0x02210510 + + arm_func_start FUN_021DD984 +FUN_021DD984: ; 0x021DD984 + stmdb sp!, {lr} + sub sp, sp, #4 + bl FUN_021DDCE8 + bl FUN_021DDB14 + cmp r0, #0 + beq _021DD9CC + bl FUN_021EBAB8 + mov r2, r0 + cmp r2, #0x63 + ldr r1, _021DD9D8 ; =0xFFFF2D10 + movhi r2, #0x63 + mov r0, #8 + sub r1, r1, r2 + bl FUN_021DD6B0 + bl FUN_021DDBBC + add sp, sp, #4 + mov r0, #1 + ldmfd sp!, {pc} +_021DD9CC: + mov r0, #0 + add sp, sp, #4 + ldmfd sp!, {pc} + .align 2, 0 +_021DD9D8: .word 0xFFFF2D10 + + arm_func_start FUN_021DD9DC +FUN_021DD9DC: ; 0x021DD9DC + stmdb sp!, {r4, r5, r6, lr} + sub sp, sp, #0x18 + mov r1, #0 + mov r2, #0x3c + mov r4, r0 + bl MI_CpuFill8 + mov r0, #0xff + str r0, [r4, #4] + bl FUN_021DDC1C + cmp r0, #4 + addne sp, sp, #0x18 + movne r0, #0 + ldmneia sp!, {r4, r5, r6, pc} + bl FUN_021EBAB8 + str r0, [r4] + bl OS_DisableInterrupts + mov r6, r0 + bl FUN_020A8850 + mov r5, r0 + mov r1, #6 + bl DC_InvalidateRange + cmp r5, #0 + bne _021DDA4C + mov r0, r6 + bl OS_RestoreInterrupts + add sp, sp, #0x18 + mov r0, #0 + ldmia sp!, {r4, r5, r6, pc} +_021DDA4C: + mov r0, r5 + add r1, r4, #0x33 + mov r2, #6 + bl MI_CpuCopy8 + ldr r0, [r4] + cmp r0, #0 + blt _021DDAB0 + cmp r0, #3 + bge _021DDAB0 + add r0, sp, #0 + bl FUN_020A87E0 + mov r5, r0 + mov r1, #0x20 + bl DC_InvalidateRange + cmp r5, #0 + bne _021DDAA0 + mov r0, r6 + bl OS_RestoreInterrupts + add sp, sp, #0x18 + mov r0, #0 + ldmia sp!, {r4, r5, r6, pc} +_021DDAA0: + ldrh r2, [sp] + mov r0, r5 + add r1, r4, #0x12 + bl MI_CpuCopy8 +_021DDAB0: + mov r0, r6 + bl OS_RestoreInterrupts + add r0, sp, #2 + mov r1, #0 + mov r2, #0x10 + bl MI_CpuFill8 + add r0, sp, #2 + bl FUN_021EBA28 + cmp r0, #1 + bne _021DDAFC + ldrb r1, [sp, #8] + cmp r1, #0 + beq _021DDAFC + sub r3, r1, #0x30 + add r0, sp, #9 + add r1, r4, #8 + mov r2, #9 + str r3, [r4, #4] + bl MI_CpuCopy8 +_021DDAFC: + mov r0, #1 + add sp, sp, #0x18 + ldmia sp!, {r4, r5, r6, pc} + + arm_func_start FUN_021DDB08 +FUN_021DDB08: ; 0x021DDB08 + ldr ip, _021DDB10 ; =0x020A8B28 + bx ip + .align 2, 0 +_021DDB10: .word 0x020A8B28 + + arm_func_start FUN_021DDB14 +FUN_021DDB14: ; 0x021DDB14 + ldr r0, _021DDB3C ; =0x02210518 + ldr r0, [r0] + cmp r0, #0 + beq _021DDB34 + ldrh r0, [r0, #4] + cmp r0, #6 + moveq r0, #1 + bxeq lr +_021DDB34: + mov r0, #0 + bx lr + .align 2, 0 +_021DDB3C: .word 0x02210518 + + arm_func_start FUN_021DDB40 +FUN_021DDB40: ; 0x021DDB40 + stmdb sp!, {lr} + sub sp, sp, #4 + ldr r0, _021DDBB8 ; =0x02210518 + ldr r2, [r0] + cmp r2, #0 + addeq sp, sp, #4 + moveq r0, #1 + ldmeqia sp!, {pc} + ldrh r1, [r2, #4] + cmp r1, #8 + addeq sp, sp, #4 + moveq r0, #0 + ldmeqia sp!, {pc} + cmp r1, #1 + moveq r1, #0 + streq r1, [r0] + addeq sp, sp, #4 + moveq r0, #1 + ldmeqia sp!, {pc} + mov r0, #5 + strh r0, [r2, #4] + bl FUN_021EB9D8 + cmp r0, #0 + ldrne r0, _021DDBB8 ; =0x02210518 + movne r1, #0 + strne r1, [r0] + movne r0, #1 + moveq r0, #0 + add sp, sp, #4 + ldmfd sp!, {pc} + .align 2, 0 +_021DDBB8: .word 0x02210518 + + arm_func_start FUN_021DDBBC +FUN_021DDBBC: ; 0x021DDBBC + stmdb sp!, {r4, lr} + ldr r0, _021DDC18 ; =0x02210518 + ldr r1, [r0] + cmp r1, #0 + ldmeqia sp!, {r4, pc} + ldrh r1, [r1, #4] + cmp r1, #1 + moveq r1, #0 + streq r1, [r0] + ldmeqia sp!, {r4, pc} + bl FUN_021EB9D8 + cmp r0, #0 + bne _021DDC08 + mov r4, #0xa +_021DDBF4: + mov r0, r4 + bl OS_Sleep + bl FUN_021EB9D8 + cmp r0, #0 + beq _021DDBF4 +_021DDC08: + ldr r0, _021DDC18 ; =0x02210518 + mov r1, #0 + str r1, [r0] + ldmia sp!, {r4, pc} + .align 2, 0 +_021DDC18: .word 0x02210518 + + arm_func_start FUN_021DDC1C +FUN_021DDC1C: ; 0x021DDC1C + stmdb sp!, {lr} + sub sp, sp, #4 + ldr r0, _021DDCE4 ; =0x02210518 + ldr r0, [r0] + cmp r0, #0 + addeq sp, sp, #4 + moveq r0, #0 + ldmeqia sp!, {pc} + ldrh r0, [r0, #4] + cmp r0, #1 + addeq sp, sp, #4 + ldmeqia sp!, {pc} + bl FUN_021EBAE8 + mov r1, r0 + cmp r1, #5 + bne _021DDC80 + ldr r1, _021DDCE4 ; =0x02210518 + mov r0, #4 + ldr r3, [r1] + mov r2, #1 + strh r0, [r3, #4] + ldr r1, [r1] + add sp, sp, #4 + strh r2, [r1, #6] + ldmfd sp!, {pc} +_021DDC80: + cmp r1, #0 + bge _021DDCD8 + mvn r0, #9 + cmp r1, r0 + blt _021DDCB8 + sub r1, r1, #0x2bc + mov r0, #9 + bl FUN_021DD6B0 + ldr r1, _021DDCE4 ; =0x02210518 + mov r0, #8 + ldr r1, [r1] + add sp, sp, #4 + strh r0, [r1, #4] + ldmfd sp!, {pc} +_021DDCB8: + mov r0, #5 + bl FUN_021DD6B0 + ldr r1, _021DDCE4 ; =0x02210518 + mov r0, #7 + ldr r1, [r1] + add sp, sp, #4 + strh r0, [r1, #4] + ldmfd sp!, {pc} +_021DDCD8: + mov r0, #2 + add sp, sp, #4 + ldmfd sp!, {pc} + .align 2, 0 +_021DDCE4: .word 0x02210518 + + arm_func_start FUN_021DDCE8 +FUN_021DDCE8: ; 0x021DDCE8 + stmdb sp!, {lr} + sub sp, sp, #4 + ldr r0, _021DDD78 ; =0x02210518 + ldr r1, [r0] + cmp r1, #0 + addeq sp, sp, #4 + ldmeqia sp!, {pc} + ldrh r0, [r1, #4] + cmp r0, #2 + bne _021DDD28 + bl FUN_021EBB80 + ldr r1, _021DDD78 ; =0x02210518 + add sp, sp, #4 + ldr r1, [r1] + str r0, [r1] + ldmfd sp!, {pc} +_021DDD28: + cmp r0, #4 + addne sp, sp, #4 + ldmneia sp!, {pc} + ldrh r0, [r1, #6] + cmp r0, #0 + addeq sp, sp, #4 + ldmeqia sp!, {pc} + bl FUN_020A71F8 + cmp r0, #9 + addeq sp, sp, #4 + ldmeqia sp!, {pc} + ldr r0, _021DDD78 ; =0x02210518 + mov r3, #0 + ldr r2, [r0] + mov r1, #6 + strh r3, [r2, #6] + ldr r0, [r0] + strh r1, [r0, #4] + add sp, sp, #4 + ldmfd sp!, {pc} + .align 2, 0 +_021DDD78: .word 0x02210518 + + arm_func_start FUN_021DDD7C +FUN_021DDD7C: ; 0x021DDD7C + stmdb sp!, {lr} + sub sp, sp, #4 + ldr r0, _021DDDC8 ; =0x02210518 + ldr r1, [r0] + cmp r1, #0 + addeq sp, sp, #4 + moveq r0, #0 + ldmeqia sp!, {pc} + ldr r0, [r1] + cmp r0, #0 + addeq sp, sp, #4 + moveq r0, #0 + ldmeqia sp!, {pc} + mov r0, #3 + strh r0, [r1, #4] + bl FUN_021DDC1C + mov r0, #1 + add sp, sp, #4 + ldmfd sp!, {pc} + .align 2, 0 +_021DDDC8: .word 0x02210518 + + arm_func_start FUN_021DDDCC +FUN_021DDDCC: ; 0x021DDDCC + stmdb sp!, {lr} + sub sp, sp, #0xc + ldr r0, _021DDE70 ; =0x02210518 + ldr r0, [r0] + cmp r0, #0 + beq _021DDE5C + ldrh r0, [r0, #4] + cmp r0, #1 + addne sp, sp, #0xc + ldmneia sp!, {pc} + add r0, sp, #0 + mov r1, #0 + mov r2, #0xc + bl MI_CpuFill8 + ldr r0, _021DDE70 ; =0x02210518 + ldr r3, _021DDE74 ; =FUN_021DD944 + ldr lr, [r0] + ldr r2, _021DDE78 ; =FUN_021DD904 + ldrh ip, [lr, #8] + add r0, sp, #0 + mov r1, #2 + strb ip, [sp, #8] + ldrh ip, [lr, #0xa] + strb ip, [sp, #9] + str r3, [sp] + str r2, [sp, #4] + strh r1, [lr, #4] + bl FUN_021EBC60 + cmp r0, #0 + addne sp, sp, #0xc + ldmneia sp!, {pc} + mov r0, #9 + mvn r1, #5 + bl FUN_021DD6B0 + add sp, sp, #0xc + ldmfd sp!, {pc} +_021DDE5C: + mov r0, #9 + mvn r1, #3 + bl FUN_021DD6B0 + add sp, sp, #0xc + ldmfd sp!, {pc} + .align 2, 0 +_021DDE70: .word 0x02210518 +_021DDE74: .word FUN_021DD944 +_021DDE78: .word FUN_021DD904 + + arm_func_start FUN_021DDE7C +FUN_021DDE7C: ; 0x021DDE7C + stmdb sp!, {lr} + sub sp, sp, #4 + cmp r0, #0 + beq _021DDEA4 + cmp r0, #1 + beq _021DDEB4 + cmp r0, #2 + beq _021DDEC4 + add sp, sp, #4 + ldmfd sp!, {pc} +_021DDEA4: + ldr r0, _021DDED4 ; =0x0220D280 + bl FUN_021D9C1C + add sp, sp, #4 + ldmfd sp!, {pc} +_021DDEB4: + ldr r0, _021DDED8 ; =0x0220D2A8 + bl FUN_021D9C1C + add sp, sp, #4 + ldmfd sp!, {pc} +_021DDEC4: + ldr r0, _021DDEDC ; =0x0220D2CC + bl FUN_021D9C1C + add sp, sp, #4 + ldmfd sp!, {pc} + .align 2, 0 +_021DDED4: .word 0x0220D280 +_021DDED8: .word 0x0220D2A8 +_021DDEDC: .word 0x0220D2CC + + arm_func_start FUN_021DDEE0 +FUN_021DDEE0: ; 0x021DDEE0 + stmdb sp!, {r4, r5, r6, lr} + ldr r2, _021DDF3C ; =0x02210518 + mov r6, r0 + ldr r2, [r2] + mov r5, r1 + mov r4, r3 + cmp r2, #0 + ldmneia sp!, {r4, r5, r6, pc} + mov r1, #0 + mov r2, #0xc + bl MI_CpuFill8 + strh r5, [r6, #8] + mov r0, #1 + strh r0, [r6, #0xa] + strh r0, [r6, #4] + mov r0, #0 + ldr r1, _021DDF3C ; =0x02210518 + strh r0, [r6, #6] + str r6, [r1] + bl FUN_021DDE7C + mov r0, r4 + bl FUN_020A374C + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +_021DDF3C: .word 0x02210518 + + arm_func_start FUN_021DDF40 +FUN_021DDF40: ; 0x021DDF40 + ldr ip, _021DDF48 ; =FUN_021D9974 + bx ip + .align 2, 0 +_021DDF48: .word FUN_021D9974 + + arm_func_start FUN_021DDF4C +FUN_021DDF4C: ; 0x021DDF4C + stmdb sp!, {lr} + sub sp, sp, #0x1c4 + ldr r0, _021DE054 ; =0x0221051C + ldr r0, [r0] + cmp r0, #0 + addeq sp, sp, #0x1c4 + moveq r0, #0 + ldmeqia sp!, {pc} + add r0, r0, #0x1000 + ldr r0, [r0, #0xba0] + cmp r0, #0 + addeq sp, sp, #0x1c4 + moveq r0, #1 + ldmeqia sp!, {pc} + bl FUN_021D988C + cmp r0, #0 + beq _021DDFA4 + cmp r0, #0x14 + beq _021DDFE0 + cmp r0, #0x15 + beq _021DDFB0 + b _021DE010 +_021DDFA4: + add sp, sp, #0x1c4 + mov r0, #2 + ldmfd sp!, {pc} +_021DDFB0: + bl FUN_021D991C + ldr r0, _021DE054 ; =0x0221051C + ldr r2, _021DE058 ; =0x00001E1C + ldr r1, [r0] + mov r0, #4 + bl FUN_021DD904 + ldr r0, _021DE054 ; =0x0221051C + mov r1, #0 + str r1, [r0] + add sp, sp, #0x1c4 + mov r0, #3 + ldmfd sp!, {pc} +_021DDFE0: + bl FUN_021D991C + ldr r0, _021DE054 ; =0x0221051C + ldr r2, _021DE058 ; =0x00001E1C + ldr r1, [r0] + mov r0, #4 + bl FUN_021DD904 + ldr r0, _021DE054 ; =0x0221051C + mov r1, #0 + str r1, [r0] + add sp, sp, #0x1c4 + mov r0, #5 + ldmfd sp!, {pc} +_021DE010: + add r0, sp, #0 + bl FUN_021D97F8 + bl FUN_021D991C + ldr r0, _021DE054 ; =0x0221051C + ldr r2, _021DE058 ; =0x00001E1C + ldr r1, [r0] + mov r0, #4 + bl FUN_021DD904 + ldr r1, [sp] + ldr r2, _021DE054 ; =0x0221051C + mov r3, #0 + mov r0, #2 + str r3, [r2] + bl FUN_021DD6B0 + mov r0, #4 + add sp, sp, #0x1c4 + ldmfd sp!, {pc} + .align 2, 0 +_021DE054: .word 0x0221051C +_021DE058: .word 0x00001E1C + + arm_func_start FUN_021DE05C +FUN_021DE05C: ; 0x021DE05C + stmdb sp!, {lr} + sub sp, sp, #4 + ldr r0, _021DE130 ; =0x0221051C + ldr r0, [r0] + cmp r0, #0 + beq _021DE078 + bl OS_Terminate +_021DE078: + ldr r1, _021DE134 ; =0x00001E1C + mov r0, #4 + bl FUN_021DD944 + ldr r1, _021DE130 ; =0x0221051C + cmp r0, #0 + str r0, [r1] + bne _021DE0AC + ldr r1, _021DE138 ; =0xFFFFB17C + mov r0, #9 + bl FUN_021DD6B0 + add sp, sp, #4 + mov r0, #0 + ldmfd sp!, {pc} +_021DE0AC: + ldr r2, _021DE134 ; =0x00001E1C + mov r1, #0 + bl MI_CpuFill8 + ldr r0, _021DE130 ; =0x0221051C + ldr r1, _021DE13C ; =0x00001C44 + ldr r2, [r0] + ldr r0, _021DE140 ; =0x0220D2EC + add r1, r2, r1 + mov r2, #9 + bl MI_CpuCopy8 + ldr r1, _021DE130 ; =0x0221051C + ldr r2, _021DE144 ; =FUN_021DD944 + ldr r0, [r1] + ldr r3, _021DE148 ; =FUN_021DD904 + add r0, r0, #0x1000 + str r2, [r0, #0xc50] + ldr r0, [r1] + ldr r2, _021DE14C ; =0x00001C10 + add r0, r0, #0x1000 + str r3, [r0, #0xc54] + ldr r1, [r1] + add r0, r1, r2 + bl FUN_021D9ACC + cmp r0, #0 + addeq sp, sp, #4 + moveq r0, #1 + ldmeqia sp!, {pc} + ldr r1, _021DE138 ; =0xFFFFB17C + mov r0, #9 + bl FUN_021DD6B0 + mov r0, #0 + add sp, sp, #4 + ldmfd sp!, {pc} + .align 2, 0 +_021DE130: .word 0x0221051C +_021DE134: .word 0x00001E1C +_021DE138: .word 0xFFFFB17C +_021DE13C: .word 0x00001C44 +_021DE140: .word 0x0220D2EC +_021DE144: .word FUN_021DD944 +_021DE148: .word FUN_021DD904 +_021DE14C: .word 0x00001C10 + + arm_func_start FUN_021DE150 +FUN_021DE150: ; 0x021DE150 + stmdb sp!, {r4, lr} + bl FUN_021DCF00 + mov r4, r0 + sub r0, r4, #3 + cmp r0, #2 + bhi _021DE16C + bl FUN_021DD26C +_021DE16C: + mov r0, r4 + ldmia sp!, {r4, pc} + + arm_func_start FUN_021DE174 +FUN_021DE174: ; 0x021DE174 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #4 + mov r5, r0 + mov r4, r1 + ldr r0, _021DE1EC ; =FUN_021DD944 + ldr r1, _021DE1F0 ; =FUN_021DD904 + bl FUN_021DD2C4 + cmp r0, #0 + addeq sp, sp, #4 + moveq r0, #0 + ldmeqia sp!, {r4, r5, pc} + mov r0, r5 + bl strlen + cmp r0, #0 + bne _021DE1C0 + ldr r0, _021DE1F4 ; =0x0220D2F0 + mov r1, r4 + bl FUN_021DCFFC + b _021DE1CC +_021DE1C0: + mov r0, r5 + mov r1, r4 + bl FUN_021DCFFC +_021DE1CC: + cmp r0, #0 + addne sp, sp, #4 + movne r0, #1 + ldmneia sp!, {r4, r5, pc} + bl FUN_021DD26C + mov r0, #0 + add sp, sp, #4 + ldmia sp!, {r4, r5, pc} + .align 2, 0 +_021DE1EC: .word FUN_021DD944 +_021DE1F0: .word FUN_021DD904 +_021DE1F4: .word 0x0220D2F0 + + arm_func_start FUN_021DE1F8 +FUN_021DE1F8: ; 0x021DE1F8 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #4 + ldr r2, _021DE2C4 ; =0x022104F8 + mov r5, r0 + ldr r2, [r2] + mov r4, r1 + cmp r2, #0 + addeq sp, sp, #4 + moveq r0, #0 + ldmeqia sp!, {r4, r5, pc} + bl RTC_GetDate + cmp r0, #0 + bne _021DE23C + mov r0, r4 + bl RTC_GetTime + cmp r0, #0 + beq _021DE248 +_021DE23C: + add sp, sp, #4 + mov r0, #0 + ldmia sp!, {r4, r5, pc} +_021DE248: + mov r0, r5 + mov r1, r4 + bl RTC_ConvertDateTimeToSecond + mvn r2, #0 + cmp r1, r2 + cmpeq r0, r2 + addeq sp, sp, #4 + moveq r0, #0 + ldmeqia sp!, {r4, r5, pc} + ldr r2, _021DE2C8 ; =0x022104FC + mov ip, #0 + ldr lr, [r2] + ldr r3, [r2, #4] + subs r2, r0, lr + sbc r3, r1, r3 + subs r0, r2, ip + sbcs r0, r3, ip + blt _021DE2A0 + ldr r0, _021DE2CC ; =0xBC19137F + subs r0, r0, r2 + sbcs r0, ip, r3 + bge _021DE2AC +_021DE2A0: + add sp, sp, #4 + mov r0, #0 + ldmia sp!, {r4, r5, pc} +_021DE2AC: + mov r0, r5 + mov r1, r4 + bl RTC_ConvertSecondToDateTime + mov r0, #1 + add sp, sp, #4 + ldmia sp!, {r4, r5, pc} + .align 2, 0 +_021DE2C4: .word 0x022104F8 +_021DE2C8: .word 0x022104FC +_021DE2CC: .word 0xBC19137F + + arm_func_start FUN_021DE2D0 +FUN_021DE2D0: ; 0x021DE2D0 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #4 + mov r5, r0 + mov r4, r1 + bl FUN_021DD6D4 + cmp r0, #0 + addne sp, sp, #4 + movne r0, #0 + ldmneia sp!, {r4, r5, pc} + mov r0, r5 + mov r1, r4 + bl FUN_02207330 + add sp, sp, #4 + ldmia sp!, {r4, r5, pc} + + arm_func_start FUN_021DE308 +FUN_021DE308: ; 0x021DE308 + stmdb sp!, {lr} + sub sp, sp, #4 + bl FUN_021DD6D4 + cmp r0, #0 + addne sp, sp, #4 + movne r0, #0 + ldmneia sp!, {pc} + bl FUN_02207158 + add sp, sp, #4 + ldmfd sp!, {pc} + stmdb sp!, {r4, r5, r6, lr} + mov r6, r0 + mov r5, r1 + mov r4, r2 + bl FUN_021DD6D4 + cmp r0, #0 + movne r0, #0 + ldmneia sp!, {r4, r5, r6, pc} + mov r0, r6 + mov r1, r5 + mov r2, r4 + bl FUN_0220733C + ldmia sp!, {r4, r5, r6, pc} + + arm_func_start FUN_021DE364 +FUN_021DE364: ; 0x021DE364 + stmdb sp!, {r4, r5, r6, lr} + mov r6, r0 + mov r5, r1 + mov r4, r2 + bl FUN_021DD6D4 + cmp r0, #0 + movne r0, #0 + ldmneia sp!, {r4, r5, r6, pc} + mov r0, #0xb0 + mul r2, r4, r0 + mov r0, r6 + mov r1, #0 + bl MI_CpuFill8 + mov r0, r6 + mov r1, r5 + mov r2, r4 + bl FUN_022074EC + ldmia sp!, {r4, r5, r6, pc} + + arm_func_start FUN_021DE3AC +FUN_021DE3AC: ; 0x021DE3AC + stmdb sp!, {r4, lr} + mov r4, r0 + bl FUN_021DD6D4 + cmp r0, #0 + movne r0, #0 + ldmneia sp!, {r4, pc} + mov r0, r4 + bl FUN_022077A8 + ldmia sp!, {r4, pc} + + arm_func_start FUN_021DE3D0 +FUN_021DE3D0: ; 0x021DE3D0 + stmdb sp!, {r4, r5, r6, lr} + mov r6, r0 + mov r5, r1 + mov r4, r2 + bl FUN_021DD6D4 + cmp r0, #0 + movne r0, #0 + ldmneia sp!, {r4, r5, r6, pc} + mov r0, r6 + mov r1, r5 + mov r2, r4 + bl FUN_022069DC + ldmia sp!, {r4, r5, r6, pc} + + arm_func_start FUN_021DE404 +FUN_021DE404: ; 0x021DE404 + stmdb sp!, {lr} + sub sp, sp, #4 + ldr r1, _021DE454 ; =0x02210520 + ldr r2, [r1] + cmp r2, #0 + addeq sp, sp, #4 + moveq r0, #0 + ldmeqia sp!, {pc} + str r0, [r2, #4] + ldr r0, [r1] + ldr r0, [r0, #0x48] + cmp r0, #0 + bne _021DE440 + bl FUN_021DE730 + b _021DE448 +_021DE440: + ldr r0, _021DE458 ; =FUN_021DE730 + bl FUN_02206E6C +_021DE448: + mov r0, #1 + add sp, sp, #4 + ldmfd sp!, {pc} + .align 2, 0 +_021DE454: .word 0x02210520 +_021DE458: .word FUN_021DE730 + + arm_func_start FUN_021DE45C +FUN_021DE45C: ; 0x021DE45C + stmdb sp!, {r4, r5, r6, lr} + sub sp, sp, #8 + mov r6, r0 + mov r5, r1 + mov r4, r2 + bl FUN_021DD6D4 + cmp r0, #0 + addne sp, sp, #8 + movne r0, #0 + ldmneia sp!, {r4, r5, r6, pc} + mov r0, #0xa80 + mov r1, #0x20 + bl FUN_021DE884 + ldr r2, _021DE568 ; =0x02210520 + mov r1, #0 + str r0, [r2] + str r1, [r0, #0x48] + ldr r0, [r2] + mov r2, #0xa80 + bl MI_CpuFill8 + ldr r0, _021DE568 ; =0x02210520 + mov r1, r5 + ldr r3, [r0] + mov r2, #0x1f + str r6, [r3] + ldr r0, [r0] + add r0, r0, #8 + bl strncpy + ldr r0, _021DE568 ; =0x02210520 + mov r1, r4 + ldr r0, [r0] + mov r2, #0x1f + add r0, r0, #0x28 + bl strncpy + ldr r1, _021DE568 ; =0x02210520 + ldr r0, _021DE56C ; =0x0220D2F8 + ldr r1, [r1] + add r1, r1, #0x4c + bl FUN_021DE174 + cmp r0, #0 + bne _021DE520 + ldr r0, _021DE568 ; =0x02210520 + ldr r0, [r0] + bl FUN_021DE86C + ldr r1, _021DE568 ; =0x02210520 + mov r0, #0 + str r0, [r1] + add sp, sp, #8 + ldmia sp!, {r4, r5, r6, pc} +_021DE520: + ldr r0, _021DE568 ; =0x02210520 + mov r2, #0x800 + ldr r0, [r0] + ldr r1, _021DE570 ; =FUN_021DE574 + add r0, r0, #0x9c0 + mov r3, r0 + str r2, [sp] + mov ip, #0x10 + mov r2, #0 + str ip, [sp, #4] + bl OS_CreateThread + ldr r0, _021DE568 ; =0x02210520 + ldr r0, [r0] + add r0, r0, #0x9c0 + bl OS_WakeupThreadDirect + mov r0, #1 + add sp, sp, #8 + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +_021DE568: .word 0x02210520 +_021DE56C: .word 0x0220D2F8 +_021DE570: .word FUN_021DE574 + + arm_func_start FUN_021DE574 +FUN_021DE574: ; 0x021DE574 + stmdb sp!, {r4, r5, r6, r7, lr} + sub sp, sp, #0x2a4 + mov r7, #0 + mov r6, #6 + mvn r5, #0 + mov r4, #0x64 +_021DE58C: + bl FUN_021DE150 + cmp r0, #3 + bne _021DE6AC + ldr r0, _021DE718 ; =0x02210520 + ldr r5, [r0] + add r0, r5, #0x50 + bl strlen + mov r4, r0 + ldr r0, _021DE71C ; =0x0220D300 + bl strlen + add r0, r4, r0 + cmp r0, #0xff + bls _021DE5D8 + mov r0, #0 + mov r1, #8 + mvn r2, #0 + bl FUN_021DE774 + add sp, sp, #0x2a4 + ldmia sp!, {r4, r5, r6, r7, pc} +_021DE5D8: + ldr r2, _021DE720 ; =0x0220D314 + add r0, sp, #0x10 + add r3, r5, #0x50 + mov r1, #0x100 + bl OS_SNPrintf + ldr r0, _021DE718 ; =0x02210520 + ldr r4, [r0] + add r0, r4, #0x91 + bl strlen + mov r1, r0 + add r2, sp, #0x110 + add r0, r4, #0x91 + mov r3, #0x190 + bl FUN_021DD4FC + cmp r0, #0 + bge _021DE630 + mov r0, #0 + mov r1, #8 + mvn r2, #0 + bl FUN_021DE774 + add sp, sp, #0x2a4 + ldmia sp!, {r4, r5, r6, r7, pc} +_021DE630: + ldr r0, _021DE718 ; =0x02210520 + ldr r4, _021DE724 ; =FUN_021DE774 + ldr r2, [r0] + ldr r0, _021DE728 ; =FUN_021DE884 + add r1, r2, #8 + str r1, [sp] + add r1, r2, #0x28 + str r1, [sp, #4] + ldr r1, _021DE72C ; =FUN_021DE86C + add r2, sp, #0x10 + add r3, sp, #0x110 + str r4, [sp, #8] + bl FUN_02206EFC + cmp r0, #0 + bne _021DE684 + mov r0, #0 + mov r1, #8 + mvn r2, #0 + bl FUN_021DE774 + add sp, sp, #0x2a4 + ldmia sp!, {r4, r5, r6, r7, pc} +_021DE684: + ldr r1, _021DE718 ; =0x02210520 + mov r0, #0 + ldr r3, [r1] + mov r4, #1 + mov r1, r0 + mvn r2, #0 + str r4, [r3, #0x48] + bl FUN_021DE774 + add sp, sp, #0x2a4 + ldmia sp!, {r4, r5, r6, r7, pc} +_021DE6AC: + cmp r0, #4 + bne _021DE6EC + add r0, sp, #0xc + bl FUN_021DD808 + ldr r1, [sp, #0xc] + mov r0, #0xe + bl FUN_021DD6B0 + ldr r1, _021DE718 ; =0x02210520 + mov r0, #0 + ldr r2, [r1] + mov r1, #3 + ldr r3, [r2] + mvn r2, #0 + blx r3 + add sp, sp, #0x2a4 + ldmia sp!, {r4, r5, r6, r7, pc} +_021DE6EC: + cmp r0, #5 + bne _021DE704 + mov r0, r7 + mov r1, r6 + mov r2, r5 + bl FUN_021DE774 +_021DE704: + mov r0, r4 + bl OS_Sleep + b _021DE58C + + arm_func_start FUN_021DE710 +FUN_021DE710: ; 0x021DE710 + add sp, sp, #0x2a4 + ldmia sp!, {r4, r5, r6, r7, pc} + .align 2, 0 +_021DE718: .word 0x02210520 +_021DE71C: .word 0x0220D300 +_021DE720: .word 0x0220D314 +_021DE724: .word FUN_021DE774 +_021DE728: .word FUN_021DE884 +_021DE72C: .word FUN_021DE86C + + arm_func_start FUN_021DE730 +FUN_021DE730: ; 0x021DE730 + stmdb sp!, {r4, lr} + ldr r0, _021DE770 ; =0x02210520 + ldr r0, [r0] + add r0, r0, #0x9c0 + bl OS_JoinThread + ldr r0, _021DE770 ; =0x02210520 + ldr r0, [r0] + ldr r4, [r0, #4] + bl FUN_021DE86C + ldr r0, _021DE770 ; =0x02210520 + mov r1, #0 + str r1, [r0] + cmp r4, #0 + ldmeqia sp!, {r4, pc} + blx r4 + ldmia sp!, {r4, pc} + .align 2, 0 +_021DE770: .word 0x02210520 + + arm_func_start FUN_021DE774 +FUN_021DE774: ; 0x021DE774 + stmdb sp!, {r4, r5, r6, lr} + movs r5, r1 + mov r6, r0 + mov r4, r2 + bne _021DE79C + ldr r3, _021DE854 ; =0x02210520 + ldr r3, [r3] + ldr r3, [r3] + blx r3 + ldmia sp!, {r4, r5, r6, pc} +_021DE79C: + cmp r5, #8 + addls pc, pc, r5, lsl #2 + b _021DE830 +_021DE7A8: ; jump table + b _021DE830 ; case 0 + b _021DE7CC ; case 1 + b _021DE7DC ; case 2 + b _021DE7E4 ; case 3 + b _021DE7F4 ; case 4 + b _021DE804 ; case 5 + b _021DE834 ; case 6 + b _021DE818 ; case 7 + b _021DE820 ; case 8 +_021DE7CC: + ldr r1, _021DE858 ; =0xFFFF86E7 + mov r0, #9 + bl FUN_021DD6B0 + b _021DE834 +_021DE7DC: + bl OS_Terminate + b _021DE834 +_021DE7E4: + ldr r1, _021DE85C ; =0xFFFF86D4 + mov r0, #0xf + bl FUN_021DD6B0 + b _021DE834 +_021DE7F4: + ldr r1, _021DE860 ; =0xFFFF86CA + mov r0, #0xe + bl FUN_021DD6B0 + b _021DE834 +_021DE804: + ldr r1, _021DE864 ; =0xFFFF86E8 + mov r0, #0xe + sub r1, r1, r4 + bl FUN_021DD6B0 + b _021DE834 +_021DE818: + bl OS_Terminate + b _021DE834 +_021DE820: + ldr r1, _021DE868 ; =0xFFFF86DF + mov r0, #9 + bl FUN_021DD6B0 + b _021DE834 +_021DE830: + bl OS_Terminate +_021DE834: + ldr r1, _021DE854 ; =0x02210520 + mov r0, r6 + ldr r2, [r1] + mov r1, r5 + ldr r3, [r2] + mov r2, r4 + blx r3 + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +_021DE854: .word 0x02210520 +_021DE858: .word 0xFFFF86E7 +_021DE85C: .word 0xFFFF86D4 +_021DE860: .word 0xFFFF86CA +_021DE864: .word 0xFFFF86E8 +_021DE868: .word 0xFFFF86DF + + arm_func_start FUN_021DE86C +FUN_021DE86C: ; 0x021DE86C + ldr ip, _021DE880 ; =FUN_021DD904 + mov r1, r0 + mov r0, #6 + mov r2, #0 + bx ip + .align 2, 0 +_021DE880: .word FUN_021DD904 + + arm_func_start FUN_021DE884 +FUN_021DE884: ; 0x021DE884 + ldr ip, _021DE898 ; =FUN_021DD924 + mov r2, r1 + mov r1, r0 + mov r0, #6 + bx ip + .align 2, 0 +_021DE898: .word FUN_021DD924 + + arm_func_start FUN_021DE89C +FUN_021DE89C: ; 0x021DE89C + ldrh r1, [r0] + mov r2, #0 + cmp r1, #0 + beq _021DE8C0 +_021DE8AC: + add r2, r2, #1 + mov r1, r2, lsl #1 + ldrh r1, [r0, r1] + cmp r1, #0 + bne _021DE8AC +_021DE8C0: + mov r0, r2 + bx lr + + arm_func_start FUN_021DE8C8 +FUN_021DE8C8: ; 0x021DE8C8 + stmdb sp!, {r4, lr} + sub sp, sp, #8 + ldr r2, _021DE9E4 ; =0x02210524 + mov r1, #0 + ldr r3, [r2, #4] + ldr ip, [r2] + cmp r3, r1 + mov r4, r0 + cmpeq ip, r1 + bne _021DE98C + ldr r0, [r2, #0xc] + ldr r3, [r2, #8] + cmp r0, r1 + cmpeq r3, r1 + bne _021DE98C + ldr r0, [r2, #0x14] + ldr r2, [r2, #0x10] + cmp r0, r1 + cmpeq r2, r1 + bne _021DE98C + add r0, sp, #0 + bl OS_GetMacAddress + bl OS_GetTick + ldr r2, [sp] + ldr r3, [sp, #4] + mov lr, r2, lsr #0x18 + mov r2, r1, lsl #0x18 + orr lr, lr, r3, lsl #8 + mvn r1, #0xff000000 + mov ip, r3, lsr #0x18 + and r1, lr, r1 + orr r3, r1, r0, lsl #24 + and r1, ip, #0 + orr r2, r2, r0, lsr #8 + orr r1, r1, r2 + str r1, [sp, #4] + ldr ip, _021DE9E4 ; =0x02210524 + add r0, sp, #0 + str r3, [sp] + ldmia r0, {r2, r3} + stmia ip, {r2, r3} + ldr r3, _021DE9E8 ; =0x6C078965 + ldr r2, _021DE9EC ; =0x5D588B65 + ldr r1, _021DE9F0 ; =0x00269EC3 + mov r0, #0 + str r3, [ip, #8] + str r2, [ip, #0xc] + str r1, [ip, #0x10] + str r0, [ip, #0x14] +_021DE98C: + ldr r1, _021DE9E4 ; =0x02210524 + ldr r3, [r1, #8] + ldr r2, [r1] + ldr r0, [r1, #4] + umull lr, ip, r3, r2 + mla ip, r3, r0, ip + ldr r0, [r1, #0xc] + ldr r3, [r1, #0x10] + mla ip, r0, r2, ip + adds r2, r3, lr + ldr r0, [r1, #0x14] + str r2, [r1] + adc r0, r0, ip + cmp r4, #0 + str r0, [r1, #4] + movne r3, #0 + umullne r2, r1, r0, r4 + mlane r1, r0, r3, r1 + mlane r1, r3, r4, r1 + movne r0, r1 + add sp, sp, #8 + ldmia sp!, {r4, pc} + .align 2, 0 +_021DE9E4: .word 0x02210524 +_021DE9E8: .word 0x6C078965 +_021DE9EC: .word 0x5D588B65 +_021DE9F0: .word 0x00269EC3 + + arm_func_start FUN_021DE9F4 +FUN_021DE9F4: ; 0x021DE9F4 + stmdb sp!, {r4, r5, r6, r7, lr} + sub sp, sp, #4 + movs r4, r1 + mov r7, r0 + mov r6, r3 + addeq sp, sp, #4 + mvneq r0, #0 + ldmeqia sp!, {r4, r5, r6, r7, pc} + mov r0, r2 + mov r1, r6 + bl strchr + movs r5, r0 + addeq sp, sp, #4 + mvneq r0, #0 + ldmeqia sp!, {r4, r5, r6, r7, pc} +_021DEA30: + mov r0, r7 + bl strlen + mov r2, r0 + mov r1, r7 + add r0, r5, #1 + bl strncmp + cmp r0, #0 + bne _021DEA68 + mov r0, r7 + bl strlen + add r0, r0, r5 + ldrsb r0, [r0, #1] + cmp r6, r0 + beq _021DEAA4 +_021DEA68: + mov r1, r6 + add r0, r5, #1 + bl strchr + cmp r0, #0 + addeq sp, sp, #4 + mvneq r0, #0 + ldmeqia sp!, {r4, r5, r6, r7, pc} + mov r1, r6 + add r0, r0, #1 + bl strchr + movs r5, r0 + bne _021DEA30 + add sp, sp, #4 + mvn r0, #0 + ldmia sp!, {r4, r5, r6, r7, pc} +_021DEAA4: + mov r1, r6 + add r0, r5, #1 + bl strchr + movs r5, r0 + addeq sp, sp, #4 + mvneq r0, #0 + ldmeqia sp!, {r4, r5, r6, r7, pc} + mov r1, r6 + add r0, r5, #1 + bl strchr + cmp r0, #0 + addne r1, r5, #1 + subne r6, r0, r1 + bne _021DEAE8 + add r0, r5, #1 + bl strlen + mov r6, r0 +_021DEAE8: + mov r0, r4 + mov r2, r6 + add r1, r5, #1 + bl strncpy + mov r1, #0 + mov r0, r6 + strb r1, [r4, r6] + add sp, sp, #4 + ldmia sp!, {r4, r5, r6, r7, pc} + + arm_func_start FUN_021DEB0C +FUN_021DEB0C: ; 0x021DEB0C + stmdb sp!, {r4, r5, r6, r7, lr} + sub sp, sp, #4 + mov r5, r2 + mov r7, r0 + mov r6, r1 + mov r4, r3 + mov r0, r5 + mov r1, #0 + bl strchr + mov r2, r0 + mov r0, r7 + mov r1, r6 + mov r3, r4 + bl FUN_021DEB54 + mov r0, r5 + bl strlen + add sp, sp, #4 + ldmia sp!, {r4, r5, r6, r7, pc} + + arm_func_start FUN_021DEB54 +FUN_021DEB54: ; 0x021DEB54 + stmdb sp!, {r4, lr} + sub sp, sp, #0x10 + str r0, [sp] + mov r4, r2 + str r3, [sp, #4] + str r1, [sp, #8] + ldr r2, _021DEB8C ; =0x0220D328 + mov r0, r4 + mov r1, #0x1000 + bl OS_SNPrintf + mov r0, r4 + bl strlen + add sp, sp, #0x10 + ldmia sp!, {r4, pc} + .align 2, 0 +_021DEB8C: .word 0x0220D328 + + arm_func_start FUN_021DEB90 +FUN_021DEB90: ; 0x021DEB90 + stmdb sp!, {lr} + sub sp, sp, #4 + bl FUN_021FD43C + bl FUN_021EFB28 + ldr r2, _021DEBCC ; =0x02210540 + ldr r1, _021DEBD0 ; =0xFFFE8515 + str r0, [r2] + mov r0, #9 + bl FUN_021DD6B0 + ldr r0, _021DEBD4 ; =0x0221053C + mov r1, #0 + ldr r0, [r0] + str r1, [r0] + add sp, sp, #4 + ldmfd sp!, {pc} + .align 2, 0 +_021DEBCC: .word 0x02210540 +_021DEBD0: .word 0xFFFE8515 +_021DEBD4: .word 0x0221053C + + arm_func_start FUN_021DEBD8 +FUN_021DEBD8: ; 0x021DEBD8 + ldr ip, _021DEBE0 ; =FUN_021EAC1C + bx ip + .align 2, 0 +_021DEBE0: .word FUN_021EAC1C + + arm_func_start FUN_021DEBE4 +FUN_021DEBE4: ; 0x021DEBE4 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0xc + mov r7, #0 + mov fp, r0 + mov sb, r1 + mov sl, r7 + bl FUN_021E852C + cmp r0, #0 + addne sp, sp, #0xc + ldmneia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + cmp sb, #4 + addls pc, pc, sb, lsl #2 + b _021DEC48 +_021DEC18: ; jump table + b _021DEC2C ; case 0 + b _021DEC2C ; case 1 + b _021DEC34 ; case 2 + b _021DEC34 ; case 3 + b _021DEC40 ; case 4 +_021DEC2C: + mov r4, r7 + b _021DEC48 +_021DEC34: + mov r4, #6 + ldr r6, _021DEF4C ; =0xFFFFE250 + b _021DEC48 +_021DEC40: + ldr r6, _021DEF50 ; =0xFFFFE24F + mov r4, #9 +_021DEC48: + cmp r4, #0 + bne _021DED00 + mov r0, fp + bl FUN_021FD3C4 + movs r7, r0 + addeq sp, sp, #0xc + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + ldr r0, _021DEF54 ; =0x0221053C + ldrb r8, [r7, #1] + ldr r1, [r0] + mov r5, #1 + mov r0, r5,lsl r8 + ldr r1, [r1, #0x644] + ands r0, r1, r0 + mov r0, r8 + moveq r5, #0 + bl FUN_021EA9D8 + ldr r0, _021DEF54 ; =0x0221053C + ldr r1, [r0] + ldrb r0, [r1, #0x369] + cmp r0, #2 + bne _021DECA8 + cmp sb, #0 + beq _021DECBC +_021DECA8: + ldrb r0, [r1, #0x369] + cmp r0, #3 + bne _021DECC0 + cmp r8, #0 + bne _021DECC0 +_021DECBC: + mov sl, #1 +_021DECC0: + mov r0, r8 + bl FUN_021DF56C + ldr r1, _021DEF54 ; =0x0221053C + ldrb r7, [r7] + ldr r2, _021DEF58 ; =0x02210544 + mov fp, #0 + ldr r3, [r1] + str fp, [r2, r7, lsl #2] + ldrb r2, [r3, #0x361] + mov r7, r0 + sub r0, r2, #1 + strb r0, [r3, #0x361] + ldr r1, [r1] + ldrb r0, [r1, #0x368] + sub r0, r0, #1 + strb r0, [r1, #0x368] +_021DED00: + ldr r0, _021DEF54 ; =0x0221053C + ldr r1, [r0] + ldrb r0, [r1, #0x2d] + cmp r0, #0 + bne _021DED58 + ldr r0, [r1, #0x24] + cmp r0, #6 + bne _021DED58 + cmp r5, #0 + bne _021DED58 + ldrb r0, [r1, #0x369] + cmp r0, #2 + addne sp, sp, #0xc + ldmneia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + cmp r4, #0 + addne sp, sp, #0xc + ldmneia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + bl FUN_021E85D4 + mov r0, r7 + bl FUN_021E8A50 + add sp, sp, #0xc + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +_021DED58: + mov r0, r4 + mov r1, r6 + mov r2, r7 + bl FUN_021E8A74 + cmp r0, #0 + addne sp, sp, #0xc + ldmneia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + cmp r4, #0 + beq _021DED90 + mov r0, r4 + mov r1, r6 + bl FUN_021DD6B0 + add sp, sp, #0xc + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +_021DED90: + ldr r0, _021DEF54 ; =0x0221053C + ldr r1, [r0] + ldrb r0, [r1, #0x2d] + cmp r0, #0 + bne _021DEE04 + ldrb r0, [r1, #0x369] + cmp r0, #2 + beq _021DEDBC + ldrb r0, [r1, #0x369] + cmp r0, #3 + bne _021DEE04 +_021DEDBC: + ldr r2, _021DEF54 ; =0x0221053C + ldr r1, [r2] + ldrb r0, [r1, #0x361] + add r6, r0, #2 + add r3, r1, r6, lsl #2 + ldr r3, [r3, #0x448] + cmp r3, #0 + beq _021DEE04 + add r3, r1, r6 + ldrb r3, [r3, #0x624] + add r0, r0, #1 + add r0, r1, r0 + strb r3, [r0, #0x624] + ldr r0, [r2] + ldrb r1, [r0, #0x361] + add r0, r1, #1 + add r1, r1, #3 + bl FUN_021E8830 +_021DEE04: + ldr r0, _021DEF54 ; =0x0221053C + ldr r1, [r0] + ldrb r0, [r1, #0x369] + cmp r0, #2 + bne _021DEE4C + ldrb r0, [r1, #0x2d] + cmp r0, #0 + bne _021DEE2C + bl FUN_021E85D4 + b _021DEE68 +_021DEE2C: + ldrb r0, [r1, #0x361] + cmp r0, #0 + bne _021DEE68 + ldr r1, _021DEF5C ; =0x0220D334 + mov r0, #1 + mov r2, #0 + bl FUN_021E1E30 + b _021DEE68 +_021DEE4C: + ldrb r0, [r1, #0x361] + cmp r0, #0 + bne _021DEE68 + ldr r1, _021DEF5C ; =0x0220D334 + mov r0, #1 + mov r2, #0 + bl FUN_021E1E30 +_021DEE68: + ldr r0, _021DEF54 ; =0x0221053C + ldr r1, [r0] + ldrb r0, [r1, #0x369] + cmp r0, #0 + beq _021DEE88 + ldrb r0, [r1, #0x369] + cmp r0, #1 + bne _021DEEA4 +_021DEE88: + ldr r0, _021DEF54 ; =0x0221053C + ldr r2, [r0] + ldrb r1, [r2, #0x368] + strb r1, [r2, #0x36a] + ldr r0, [r0] + ldr r0, [r0, #0x364] + bl FUN_02202308 +_021DEEA4: + ldr r0, _021DEF54 ; =0x0221053C + ldr r6, [r0] + ldr r0, [r6, #0x90] + cmp r0, #0 + beq _021DEF00 + cmp r5, #0 + beq _021DEF00 + cmp sb, #0 + moveq r5, #1 + mov r0, r7 + movne r5, #0 + bl FUN_021E1F18 + str r0, [sp] + ldr r1, [r6, #0x94] + ldr r0, _021DEF54 ; =0x0221053C + str r1, [sp, #4] + ldr r1, [r0] + mov r0, r4 + ldr r4, [r1, #0x90] + mov r1, r5 + mov r2, sl + mov r3, r8 + blx r4 +_021DEF00: + ldr r0, _021DEF54 ; =0x0221053C + ldr r1, [r0] + ldrb r0, [r1, #0x2d] + cmp r0, #0 + bne _021DEF24 + ldrb r0, [r1, #0x369] + cmp r0, #2 + addeq sp, sp, #0xc + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +_021DEF24: + ldrb r0, [r1, #0x361] + cmp r0, #0 + addne sp, sp, #0xc + ldmneia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + bl FUN_02200D6C + bl FUN_021E8DC0 + mov r0, #3 + bl FUN_021DF5CC + add sp, sp, #0xc + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_021DEF4C: .word 0xFFFFE250 +_021DEF50: .word 0xFFFFE24F +_021DEF54: .word 0x0221053C +_021DEF58: .word 0x02210544 +_021DEF5C: .word 0x0220D334 + + arm_func_start FUN_021DEF60 +FUN_021DEF60: ; 0x021DEF60 + ldr ip, _021DEF68 ; =FUN_021EAC5C + bx ip + .align 2, 0 +_021DEF68: .word FUN_021EAC5C + + arm_func_start FUN_021DEF6C +FUN_021DEF6C: ; 0x021DEF6C + stmdb sp!, {r4, r5, r6, r7, lr} + sub sp, sp, #0xc + add r4, sp, #0 + mov r3, #0 + strb r3, [r4] + strb r3, [r4, #1] + strb r3, [r4, #2] + strb r3, [r4, #3] + strb r3, [r4, #4] + strb r3, [r4, #5] + strb r3, [r4, #6] + strb r3, [r4, #7] + strb r3, [r4, #8] + strb r3, [r4, #9] + strb r3, [r4, #0xa] + mov r5, r1 + strb r3, [r4, #0xb] + ldr r4, [r5, #8] + mov r6, r0 + bl FUN_021E2068 + cmp r0, #0 + addne sp, sp, #0xc + ldmneia sp!, {r4, r5, r6, r7, pc} + ldr r0, _021DF0C8 ; =0x0220D338 + bl strlen + mov r2, r0 + ldr r1, _021DF0C8 ; =0x0220D338 + mov r0, r4 + bl memcmp + cmp r0, #0 + addne sp, sp, #0xc + ldmneia sp!, {r4, r5, r6, r7, pc} + ldr r0, _021DF0C8 ; =0x0220D338 + bl strlen + add r4, r4, r0 + mov r0, r4 + mov r1, #0x76 + bl strchr + sub r7, r0, r4 + add r0, sp, #0 + mov r1, r4 + mov r2, r7 + bl strncpy + cmp r7, #0xa + addhi sp, sp, #0xc + ldmhiia sp!, {r4, r5, r6, r7, pc} + add r0, sp, #0 + mov r1, #0 + mov r2, #0xa + bl strtoul + cmp r0, #3 + addne sp, sp, #0xc + ldmneia sp!, {r4, r5, r6, r7, pc} + ldr r0, _021DF0CC ; =0x0220D340 + add r1, r7, #1 + add r4, r4, r1 + bl strlen + mov r2, r0 + ldr r1, _021DF0CC ; =0x0220D340 + mov r0, r4 + bl memcmp + cmp r0, #0 + addne sp, sp, #0xc + ldmneia sp!, {r4, r5, r6, r7, pc} + ldr r0, _021DF0D0 ; =0x0221053C + ldr r1, [r0] + ldr r0, [r1, #0x24] + cmp r0, #5 + beq _021DF0A8 + cmp r0, #6 + addne sp, sp, #0xc + ldmneia sp!, {r4, r5, r6, r7, pc} + ldrb r0, [r1, #0x369] + cmp r0, #2 + beq _021DF0A8 + ldrb r0, [r1, #0x369] + cmp r0, #3 + addne sp, sp, #0xc + ldmneia sp!, {r4, r5, r6, r7, pc} +_021DF0A8: + ldr r0, _021DF0CC ; =0x0220D340 + bl strlen + add r2, r4, r0 + ldr r1, [r5] + mov r0, r6 + bl FUN_021E8EF4 + add sp, sp, #0xc + ldmia sp!, {r4, r5, r6, r7, pc} + .align 2, 0 +_021DF0C8: .word 0x0220D338 +_021DF0CC: .word 0x0220D340 +_021DF0D0: .word 0x0221053C + + arm_func_start FUN_021DF0D4 +FUN_021DF0D4: ; 0x021DF0D4 + stmdb sp!, {lr} + sub sp, sp, #4 + ldr r1, [r1, #4] + ldr r0, _021DF120 ; =0x00000603 + cmp r1, r0 + addeq sp, sp, #4 + ldmeqia sp!, {pc} + ldr r0, _021DF124 ; =0x00000901 + cmp r1, r0 + addeq sp, sp, #4 + ldmeqia sp!, {pc} + ldr r0, _021DF128 ; =0x00000B01 + cmp r1, r0 + addeq sp, sp, #4 + ldmeqia sp!, {pc} + mov r0, #3 + bl FUN_021DF414 + add sp, sp, #4 + ldmfd sp!, {pc} + .align 2, 0 +_021DF120: .word 0x00000603 +_021DF124: .word 0x00000901 +_021DF128: .word 0x00000B01 + + arm_func_start FUN_021DF12C +FUN_021DF12C: ; 0x021DF12C + stmdb sp!, {r4, r5, r6, r7, lr} + sub sp, sp, #0xc + movs r7, r0 + mov r6, r1 + mov r5, r2 + mov r4, r3 + bne _021DF174 + cmp r6, #0 + beq _021DF174 + ldr r0, _021DF2AC ; =0x0221053C + ldr r0, [r0] + ldr r0, [r0, #0x4f4] + cmp r0, #0 + bne _021DF1D8 + bl FUN_021E8DC0 + mov r0, #3 + bl FUN_021DF5CC + b _021DF1D8 +_021DF174: + cmp r7, #0 + bne _021DF1D8 + mov r0, #6 + bl FUN_021DF5CC + ldr r1, _021DF2AC ; =0x0221053C + mov r0, #0 + ldr r3, [r1] + ldrb r1, [r3, #0x361] + cmp r1, #0 + blt _021DF1D8 + ldr r2, [r3, #0x64] +_021DF1A0: + add r1, r3, r0, lsl #2 + ldr r1, [r1, #0x448] + cmp r2, r1 + bne _021DF1C8 + ldr r1, _021DF2AC ; =0x0221053C + ldr r1, [r1] + add r0, r1, r0 + ldrb r0, [r0, #0x624] + strb r0, [r1, #0x2c] + b _021DF1D8 +_021DF1C8: + ldrb r1, [r3, #0x361] + add r0, r0, #1 + cmp r0, r1 + ble _021DF1A0 +_021DF1D8: + ldr r1, _021DF2AC ; =0x0221053C + ldr r0, _021DF2B0 ; =0x00000624 + ldr r2, [r1] + ldrb r1, [r2, #0x361] + add r0, r2, r0 + add r1, r1, #1 + bl FUN_021DF530 + ldr r1, _021DF2AC ; =0x0221053C + ldr r1, [r1] + str r0, [r1, #0x644] + bl FUN_021E8780 + ldr r0, _021DF2AC ; =0x0221053C + ldr r1, [r0] + ldrb r0, [r1, #0x369] + cmp r0, #2 + beq _021DF224 + ldrb r0, [r1, #0x369] + cmp r0, #3 + bne _021DF258 +_021DF224: + ldr r0, _021DF2AC ; =0x0221053C + ldr r1, [sp, #0x20] + ldr r3, [r0] + mov r0, r7 + str r1, [sp] + ldr r2, [r3, #0x8c] + mov r1, r6 + str r2, [sp, #4] + ldr r6, [r3, #0x88] + mov r2, r5 + mov r3, r4 + blx r6 + b _021DF26C +_021DF258: + ldr r2, [r1, #0x84] + ldr r3, [r1, #0x80] + mov r0, r7 + mov r1, r6 + blx r3 +_021DF26C: + cmp r7, #0 + addeq sp, sp, #0xc + ldmeqia sp!, {r4, r5, r6, r7, pc} + ldr r0, _021DF2AC ; =0x0221053C + ldr r0, [r0] + cmp r0, #0 + addeq sp, sp, #0xc + ldmeqia sp!, {r4, r5, r6, r7, pc} + ldr r0, [r0, #0x24] + cmp r0, #5 + addne sp, sp, #0xc + ldmneia sp!, {r4, r5, r6, r7, pc} + mov r0, #3 + bl FUN_021DF5CC + add sp, sp, #0xc + ldmia sp!, {r4, r5, r6, r7, pc} + .align 2, 0 +_021DF2AC: .word 0x0221053C +_021DF2B0: .word 0x00000624 + + arm_func_start FUN_021DF2B4 +FUN_021DF2B4: ; 0x021DF2B4 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #4 + ldr r2, _021DF300 ; =0x0221053C + mov r5, r0 + ldr r0, [r2] + mov r4, r1 + ldr r0, [r0, #0x28] + cmp r0, #4 + beq _021DF2DC + bl FUN_021DF5CC +_021DF2DC: + ldr r1, _021DF300 ; =0x0221053C + mov r0, r5 + ldr r3, [r1] + mov r1, r4 + ldr r2, [r3, #0x7c] + ldr r3, [r3, #0x78] + blx r3 + add sp, sp, #4 + ldmia sp!, {r4, r5, pc} + .align 2, 0 +_021DF300: .word 0x0221053C + + arm_func_start FUN_021DF304 +FUN_021DF304: ; 0x021DF304 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #4 + movs r5, r0 + mov r4, r1 + bne _021DF334 + ldr r1, _021DF36C ; =0x0221053C + mov r0, #3 + ldr r1, [r1] + str r4, [r1, #0x64] + bl FUN_021DF5CC + bl FUN_021E1ED4 + b _021DF33C +_021DF334: + mov r0, #0 + bl FUN_021DF5CC +_021DF33C: + ldr r0, _021DF36C ; =0x0221053C + ldr r0, [r0] + ldr r3, [r0, #0x70] + cmp r3, #0 + addeq sp, sp, #4 + ldmeqia sp!, {r4, r5, pc} + ldr r2, [r0, #0x74] + mov r0, r5 + mov r1, r4 + blx r3 + add sp, sp, #4 + ldmia sp!, {r4, r5, pc} + .align 2, 0 +_021DF36C: .word 0x0221053C + + arm_func_start FUN_021DF370 +FUN_021DF370: ; 0x021DF370 + stmdb sp!, {r4, lr} + movs r4, r0 + moveq r0, #0 + ldmeqia sp!, {r4, pc} + cmp r4, #7 + addls pc, pc, r4, lsl #2 + b _021DF3F4 +_021DF38C: ; jump table + b _021DF3F4 ; case 0 + b _021DF3AC ; case 1 + b _021DF3B8 ; case 2 + b _021DF3C8 ; case 3 + b _021DF3D4 ; case 4 + b _021DF3B8 ; case 5 + b _021DF3E0 ; case 6 + b _021DF3EC ; case 7 +_021DF3AC: + mov r0, #9 + mvn r2, #0 + b _021DF3F4 +_021DF3B8: + mov r0, #0 + mov r2, r0 + mov r4, r0 + b _021DF3F4 +_021DF3C8: + mov r0, #6 + mvn r2, #9 + b _021DF3F4 +_021DF3D4: + mov r0, #6 + mvn r2, #0x1d + b _021DF3F4 +_021DF3E0: + mov r0, #6 + mvn r2, #0x45 + b _021DF3F4 +_021DF3EC: + mov r0, #6 + mvn r2, #0x4f +_021DF3F4: + cmp r0, #0 + beq _021DF408 + ldr r1, _021DF410 ; =0xFFFEFA48 + add r1, r2, r1 + bl FUN_021E0EAC +_021DF408: + mov r0, r4 + ldmia sp!, {r4, pc} + .align 2, 0 +_021DF410: .word 0xFFFEFA48 + + arm_func_start FUN_021DF414 +FUN_021DF414: ; 0x021DF414 + stmdb sp!, {r4, r5, r6, lr} + movs r6, r0 + moveq r0, #0 + ldmeqia sp!, {r4, r5, r6, pc} + cmp r6, #4 + addls pc, pc, r6, lsl #2 + b _021DF470 +_021DF430: ; jump table + b _021DF470 ; case 0 + b _021DF444 ; case 1 + b _021DF450 ; case 2 + b _021DF45C ; case 3 + b _021DF468 ; case 4 +_021DF444: + mov r4, #9 + mvn r5, #0 + b _021DF470 +_021DF450: + mov r4, #9 + mvn r5, #1 + b _021DF470 +_021DF45C: + mov r4, #6 + mvn r5, #9 + b _021DF470 +_021DF468: + mov r4, #6 + mvn r5, #0x13 +_021DF470: + ldr r0, _021DF51C ; =0x0221053C + ldr r1, [r0] + ldr r0, [r1, #0x24] + cmp r0, #5 + addls pc, pc, r0, lsl #2 + b _021DF500 +_021DF488: ; jump table + b _021DF500 ; case 0 + b _021DF4A0 ; case 1 + b _021DF4B8 ; case 2 + b _021DF500 ; case 3 + b _021DF4F4 ; case 4 + b _021DF4DC ; case 5 +_021DF4A0: + ldr r1, _021DF520 ; =0xFFFF11B8 + mov r0, r4 + add r5, r5, r1 + mov r1, r5 + bl FUN_021E0EAC + b _021DF508 +_021DF4B8: + ldr r1, [r1, #0x9c] + ldr r0, _021DF520 ; =0xFFFF11B8 + cmp r1, #1 + add r5, r5, r0 + bge _021DF508 + mov r0, r4 + mov r1, r5 + bl FUN_021E0EAC + b _021DF508 +_021DF4DC: + ldr r1, _021DF524 ; =0xFFFEC398 + mov r0, r4 + add r5, r5, r1 + mov r1, r5 + bl FUN_021E8E08 + b _021DF508 +_021DF4F4: + ldr r0, _021DF528 ; =0xFFFEEAA8 + add r5, r5, r0 + b _021DF508 +_021DF500: + ldr r0, _021DF52C ; =0xFFFE9C88 + add r5, r5, r0 +_021DF508: + mov r0, r4 + mov r1, r5 + bl FUN_021E2114 + mov r0, r6 + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +_021DF51C: .word 0x0221053C +_021DF520: .word 0xFFFF11B8 +_021DF524: .word 0xFFFEC398 +_021DF528: .word 0xFFFEEAA8 +_021DF52C: .word 0xFFFE9C88 + + arm_func_start FUN_021DF530 +FUN_021DF530: ; 0x021DF530 + stmdb sp!, {lr} + sub sp, sp, #4 + mov lr, #0 + mov ip, lr + cmp r1, #0 + ble _021DF560 + mov r3, #1 +_021DF54C: + ldrb r2, [r0, ip] + add ip, ip, #1 + cmp ip, r1 + orr lr, lr, r3, lsl r2 + blt _021DF54C +_021DF560: + mov r0, lr + add sp, sp, #4 + ldmfd sp!, {pc} + + arm_func_start FUN_021DF56C +FUN_021DF56C: ; 0x021DF56C + stmdb sp!, {r4, lr} + sub sp, sp, #8 + mov r4, r0 + add r0, sp, #0 + bl FUN_021E874C + mov r1, r0 + cmp r1, #0 + mov r0, #0 + ble _021DF5B0 + ldr r3, [sp] +_021DF594: + ldrb r2, [r3] + cmp r4, r2 + beq _021DF5B0 + add r0, r0, #1 + cmp r0, r1 + add r3, r3, #1 + blt _021DF594 +_021DF5B0: + cmp r0, r1 + addeq sp, sp, #8 + moveq r0, #0 + ldmeqia sp!, {r4, pc} + bl FUN_021E8830 + add sp, sp, #8 + ldmia sp!, {r4, pc} + + arm_func_start FUN_021DF5CC +FUN_021DF5CC: ; 0x021DF5CC + ldr r1, _021DF5E8 ; =0x0221053C + ldr r3, [r1] + ldr r2, [r3, #0x24] + str r2, [r3, #0x28] + ldr r1, [r1] + str r0, [r1, #0x24] + bx lr + .align 2, 0 +_021DF5E8: .word 0x0221053C + + arm_func_start FUN_021DF5EC +FUN_021DF5EC: ; 0x021DF5EC + bx lr + + arm_func_start FUN_021DF5F0 +FUN_021DF5F0: ; 0x021DF5F0 + stmdb sp!, {r4, r5, r6, lr} + mov r6, r0 + mov r5, #0 + ldr r4, _021DF634 ; =0x02210544 +_021DF600: + ldr r0, [r4, r5, lsl #2] + cmp r0, #0 + beq _021DF620 + bl FUN_021FD3C4 + ldrb r0, [r0, #1] + cmp r6, r0 + moveq r0, #1 + ldmeqia sp!, {r4, r5, r6, pc} +_021DF620: + add r5, r5, #1 + cmp r5, #0x20 + blt _021DF600 + mov r0, #0 + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +_021DF634: .word 0x02210544 + + arm_func_start FUN_021DF638 +FUN_021DF638: ; 0x021DF638 + ldr r1, _021DF644 ; =0x022105C4 + add r0, r1, r0, lsl #3 + bx lr + .align 2, 0 +_021DF644: .word 0x022105C4 + + arm_func_start FUN_021DF648 +FUN_021DF648: ; 0x021DF648 + stmdb sp!, {lr} + sub sp, sp, #4 + cmp r1, #0 + mov ip, #0 + ble _021DF684 + ldr r2, _021DF6B8 ; =0x0221053C + ldr r3, [r2] +_021DF664: + add r2, r3, ip, lsl #2 + ldr r2, [r2, #0x448] + cmp r0, r2 + beq _021DF684 + add r2, ip, #1 + and ip, r2, #0xff + cmp ip, r1 + blt _021DF664 +_021DF684: + cmp ip, r1 + addge sp, sp, #4 + movge r0, #0 + ldmgeia sp!, {pc} + ldr r0, _021DF6B8 ; =0x0221053C + ldr r0, [r0] + add r0, r0, ip + ldrb r0, [r0, #0x624] + bl FUN_021DF760 + bl FUN_021DF730 + bl FUN_021DF6BC + add sp, sp, #4 + ldmfd sp!, {pc} + .align 2, 0 +_021DF6B8: .word 0x0221053C + + arm_func_start FUN_021DF6BC +FUN_021DF6BC: ; 0x021DF6BC + ldr r1, _021DF6C8 ; =0x02210544 + add r0, r1, r0, lsl #2 + bx lr + .align 2, 0 +_021DF6C8: .word 0x02210544 + + arm_func_start FUN_021DF6CC +FUN_021DF6CC: ; 0x021DF6CC + stmdb sp!, {lr} + sub sp, sp, #4 + ldr r1, _021DF6FC ; =0x02210544 + mov r0, #0 + mov r2, #0x80 + bl MIi_CpuClear32 + ldr r1, _021DF700 ; =0x022105C4 + mov r0, #0 + mov r2, #0x100 + bl MIi_CpuClear32 + add sp, sp, #4 + ldmfd sp!, {pc} + .align 2, 0 +_021DF6FC: .word 0x02210544 +_021DF700: .word 0x022105C4 + + arm_func_start FUN_021DF704 +FUN_021DF704: ; 0x021DF704 + ldr r2, _021DF72C ; =0x02210544 + mov r0, #0 +_021DF70C: + ldr r1, [r2, r0, lsl #2] + cmp r1, #0 + bxeq lr + add r0, r0, #1 + cmp r0, #0x20 + blt _021DF70C + mvn r0, #0 + bx lr + .align 2, 0 +_021DF72C: .word 0x02210544 + + arm_func_start FUN_021DF730 +FUN_021DF730: ; 0x021DF730 + stmdb sp!, {lr} + sub sp, sp, #4 + bl FUN_021FD3C4 + ldrb r0, [r0] + add sp, sp, #4 + ldmfd sp!, {pc} + + arm_func_start FUN_021DF748 +FUN_021DF748: ; 0x021DF748 + stmdb sp!, {lr} + sub sp, sp, #4 + bl FUN_021FD3C4 + ldrb r0, [r0, #1] + add sp, sp, #4 + ldmfd sp!, {pc} + + arm_func_start FUN_021DF760 +FUN_021DF760: ; 0x021DF760 + stmdb sp!, {r4, r5, r6, lr} + ldr r1, _021DF7BC ; =0x0221053C + mov r6, r0 + ldr r0, [r1] + cmp r0, #0 + moveq r0, #0 + ldmeqia sp!, {r4, r5, r6, pc} + ldr r4, _021DF7C0 ; =0x02210544 + mov r5, #0 +_021DF784: + ldr r0, [r4, r5, lsl #2] + cmp r0, #0 + beq _021DF7A8 + bl FUN_021FD3C4 + ldrb r0, [r0, #1] + cmp r6, r0 + ldreq r0, _021DF7C0 ; =0x02210544 + ldreq r0, [r0, r5, lsl #2] + ldmeqia sp!, {r4, r5, r6, pc} +_021DF7A8: + add r5, r5, #1 + cmp r5, #0x20 + blt _021DF784 + mov r0, #0 + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +_021DF7BC: .word 0x0221053C +_021DF7C0: .word 0x02210544 + + arm_func_start FUN_021DF7C4 +FUN_021DF7C4: ; 0x021DF7C4 + stmdb sp!, {r4, lr} + sub sp, sp, #8 + ldr r0, _021DF87C ; =0x0221053C + ldr r0, [r0] + ldr r0, [r0] + cmp r0, #0 + addne sp, sp, #8 + movne r0, #0 + ldmneia sp!, {r4, pc} + mov r0, #0x4000 + bl FUN_021DE8C8 + add r0, r0, #0xc000 + mov r1, r0, lsl #0x10 + ldr r3, _021DF87C ; =0x0221053C + mov r0, #0 + mov r2, r0 + mov r1, r1, lsr #0x10 + ldr r4, [r3] + bl FUN_021FFEB0 + ldr r1, _021DF880 ; =FUN_021DEB90 + ldr r2, _021DF87C ; =0x0221053C + str r1, [sp] + mov r1, r0 + ldr r0, [r2] + ldr r2, [r4, #0x14] + ldr r3, [r4, #0x18] + bl FUN_021FD71C + mov r4, r0 + bl FUN_021DF370 + cmp r0, #0 + addne sp, sp, #8 + movne r0, r4 + ldmneia sp!, {r4, pc} + ldr r0, _021DF87C ; =0x0221053C + ldr r1, _021DF884 ; =FUN_021E9204 + ldr r0, [r0] + ldr r0, [r0] + bl FUN_021FD6C8 + ldr r0, _021DF87C ; =0x0221053C + ldr r1, _021DF888 ; =FUN_021E9464 + ldr r0, [r0] + ldr r0, [r0] + bl FUN_021FD434 + mov r0, r4 + add sp, sp, #8 + ldmia sp!, {r4, pc} + .align 2, 0 +_021DF87C: .word 0x0221053C +_021DF880: .word FUN_021DEB90 +_021DF884: .word FUN_021E9204 +_021DF888: .word FUN_021E9464 + + arm_func_start FUN_021DF88C +FUN_021DF88C: ; 0x021DF88C + ldr r0, _021DF8A4 ; =0x0221053C + ldr r0, [r0] + cmp r0, #0 + ldrne r0, [r0, #0x24] + moveq r0, #0 + bx lr + .align 2, 0 +_021DF8A4: .word 0x0221053C + + arm_func_start FUN_021DF8A8 +FUN_021DF8A8: ; 0x021DF8A8 + stmdb sp!, {lr} + sub sp, sp, #4 + ldr r1, _021DF8F0 ; =0x0221053C + ldr r2, [r1] + cmp r2, #0 + addeq sp, sp, #4 + moveq r0, #0 + ldmeqia sp!, {pc} + mov r1, #1 + mov r1, r1,lsl r0 + ldr r2, [r2, #0x644] + ands r1, r2, r1 + addeq sp, sp, #4 + moveq r0, #0 + ldmeqia sp!, {pc} + bl FUN_021DF5F0 + add sp, sp, #4 + ldmfd sp!, {pc} + .align 2, 0 +_021DF8F0: .word 0x0221053C + + arm_func_start FUN_021DF8F4 +FUN_021DF8F4: ; 0x021DF8F4 + stmdb sp!, {lr} + sub sp, sp, #4 + ldr r2, _021DF954 ; =0x0221053C + ldr r3, [r2] + cmp r3, #0 + addeq sp, sp, #4 + moveq r0, #0 + ldmeqia sp!, {pc} + ldr r1, _021DF958 ; =0x00000624 + add r1, r3, r1 + str r1, [r0] + ldr r2, [r2] + ldrb r1, [r2, #0x369] + cmp r1, #2 + beq _021DF93C + ldrb r1, [r2, #0x369] + cmp r1, #3 + bne _021DF948 +_021DF93C: + bl FUN_021E86A4 + add sp, sp, #4 + ldmfd sp!, {pc} +_021DF948: + bl FUN_021E874C + add sp, sp, #4 + ldmfd sp!, {pc} + .align 2, 0 +_021DF954: .word 0x0221053C +_021DF958: .word 0x00000624 + + arm_func_start FUN_021DF95C +FUN_021DF95C: ; 0x021DF95C + ldr r0, _021DF974 ; =0x0221053C + ldr r0, [r0] + cmp r0, #0 + ldrneb r0, [r0, #0x2c] + moveq r0, #0 + bx lr + .align 2, 0 +_021DF974: .word 0x0221053C + + arm_func_start FUN_021DF978 +FUN_021DF978: ; 0x021DF978 + stmdb sp!, {lr} + sub sp, sp, #4 + ldr r0, _021DF9D0 ; =0x0221053C + ldr r1, [r0] + cmp r1, #0 + addeq sp, sp, #4 + moveq r0, #0 + ldmeqia sp!, {pc} + ldrb r0, [r1, #0x369] + cmp r0, #2 + beq _021DF9B0 + ldrb r0, [r1, #0x369] + cmp r0, #3 + bne _021DF9C0 +_021DF9B0: + bl FUN_021E87D8 + add sp, sp, #4 + add r0, r0, #1 + ldmfd sp!, {pc} +_021DF9C0: + bl FUN_021E8804 + add r0, r0, #1 + add sp, sp, #4 + ldmfd sp!, {pc} + .align 2, 0 +_021DF9D0: .word 0x0221053C + + arm_func_start FUN_021DF9D4 +FUN_021DF9D4: ; 0x021DF9D4 + stmdb sp!, {r4, lr} + ldr r1, _021DFA3C ; =0x0221053C + mov r4, r0 + ldr r0, [r1] + cmp r0, #0 + beq _021DFA14 + bl FUN_021DD6D4 + cmp r0, #0 + bne _021DFA14 + ldr r0, _021DFA3C ; =0x0221053C + ldr r0, [r0] + ldr r0, [r0, #0x24] + cmp r0, #5 + beq _021DFA1C + cmp r0, #6 + beq _021DFA1C +_021DFA14: + mvn r0, #0 + ldmia sp!, {r4, pc} +_021DFA1C: + mov r0, r4 + bl FUN_021DF760 + cmp r0, #0 + mvneq r0, #1 + ldmeqia sp!, {r4, pc} + bl FUN_021FD488 + mov r0, #0 + ldmia sp!, {r4, pc} + .align 2, 0 +_021DFA3C: .word 0x0221053C + + arm_func_start FUN_021DFA40 +FUN_021DFA40: ; 0x021DFA40 + stmdb sp!, {lr} + sub sp, sp, #4 + ldr r0, _021DFAF0 ; =0x0221053C + ldr r0, [r0] + cmp r0, #0 + beq _021DFA80 + bl FUN_021DD6D4 + cmp r0, #0 + bne _021DFA80 + ldr r0, _021DFAF0 ; =0x0221053C + ldr r2, [r0] + ldr r0, [r2, #0x24] + cmp r0, #5 + beq _021DFA8C + cmp r0, #6 + beq _021DFA8C +_021DFA80: + add sp, sp, #4 + mvn r0, #0 + ldmfd sp!, {pc} +_021DFA8C: + ldrb r0, [r2, #0x361] + cmp r0, #0 + bne _021DFAC0 + ldr r1, _021DFAF4 ; =0x0220D334 + mov r0, #1 + mov r2, #0 + bl FUN_021E1E30 + bl FUN_02200D6C + mov r0, #3 + bl FUN_021DF5CC + add sp, sp, #4 + mov r0, #1 + ldmfd sp!, {pc} +_021DFAC0: + mov r1, #1 + ldr r0, _021DFAF0 ; =0x0221053C + strb r1, [r2, #0x2d] + ldr r0, [r0] + ldr r0, [r0] + bl FUN_021FD45C + ldr r1, _021DFAF0 ; =0x0221053C + mov r0, #0 + ldr r1, [r1] + strb r0, [r1, #0x2d] + add sp, sp, #4 + ldmfd sp!, {pc} + .align 2, 0 +_021DFAF0: .word 0x0221053C +_021DFAF4: .word 0x0220D334 + + arm_func_start FUN_021DFAF8 +FUN_021DFAF8: ; 0x021DFAF8 + ldr r2, _021DFB1C ; =0x0221053C + ldr r3, [r2] + cmp r3, #0 + moveq r0, #0 + strne r0, [r3, #0x90] + ldrne r2, [r2] + movne r0, #1 + strne r1, [r2, #0x94] + bx lr + .align 2, 0 +_021DFB1C: .word 0x0221053C + + arm_func_start FUN_021DFB20 +FUN_021DFB20: ; 0x021DFB20 + stmdb sp!, {r4, r5, r6, r7, lr} + sub sp, sp, #0x224 + mvn ip, #0 + mov r7, r0 + mov r6, r1 + mov r4, r2 + mov r5, r3 + str ip, [sp, #8] + bl FUN_021DD6D4 + cmp r0, #0 + bne _021DFB60 + ldr r0, _021DFD04 ; =0x0221053C + ldr r0, [r0] + ldr r0, [r0, #0x24] + cmp r0, #3 + beq _021DFB6C +_021DFB60: + add sp, sp, #0x224 + mov r0, #0 + ldmia sp!, {r4, r5, r6, r7, pc} +_021DFB6C: + bl FUN_021DF6CC + ldr r1, _021DFD04 ; =0x0221053C + mov r0, #5 + ldr r2, [r1] + str r6, [r2, #0x88] + ldr r1, [r1] + str r4, [r1, #0x8c] + bl FUN_021DF5CC + mov r0, r7 + bl FUN_021E1F84 + movs r4, r0 + beq _021DFBB8 + ldr r0, _021DFD04 ; =0x0221053C + mov r1, r4 + ldr r0, [r0] + add r0, r0, #0x1c + bl FUN_021F05F4 + cmp r0, #0 + bne _021DFBC0 +_021DFBB8: + mov r5, #0xb + b _021DFC8C +_021DFBC0: + ldr r0, _021DFD04 ; =0x0221053C + add r2, sp, #8 + ldr r0, [r0] + mov r1, r4 + add r0, r0, #0x1c + bl FUN_021F0664 + ldr r0, _021DFD04 ; =0x0221053C + ldr r1, [sp, #8] + ldr r0, [r0] + add r2, sp, #0x10 + add r0, r0, #0x1c + bl FUN_021F06E4 + ldr r0, [sp, #0x14] + cmp r0, #6 + movne r5, #0xb + bne _021DFC8C + ldr r0, _021DFD08 ; =0x0220D344 + mov r6, #0x30 + add r1, sp, #0xc + add r2, sp, #0x18 + mov r3, #0x2f + strb r6, [sp, #0xc] + bl FUN_021DE9F4 + add r0, sp, #0xc + mov r1, #0 + mov r2, #0xa + bl strtoul + and r6, r0, #0xff + ldr r0, _021DFD0C ; =0x0220D348 + add r1, sp, #0xc + add r2, sp, #0x18 + mov r3, #0x2f + bl FUN_021DE9F4 + add r0, sp, #0xc + mov r1, #0 + mov r2, #0xa + bl strtoul + and r0, r0, #0xff + cmp r0, r6 + moveq r5, #0xd + beq _021DFC8C + ldr r6, [sp, #0x238] + ldr r1, _021DFD10 ; =FUN_021DF12C + mov r0, r4 + mov r3, r5 + mov r2, #0 + str r6, [sp] + bl FUN_021E9FD0 + add sp, sp, #0x224 + mov r0, #1 + ldmia sp!, {r4, r5, r6, r7, pc} +_021DFC8C: + mov r0, r5 + mov r1, #0 + bl FUN_021DD6B0 + ldr r0, _021DFD04 ; =0x0221053C + mov r1, #0 + ldr r4, [r0] + mov r0, r5 + str r1, [sp] + ldr r2, [r4, #0x8c] + mov r3, r1 + str r2, [sp, #4] + ldr r4, [r4, #0x88] + mov r2, #1 + blx r4 + ldr r0, _021DFD04 ; =0x0221053C + ldr r0, [r0] + cmp r0, #0 + beq _021DFCF8 + ldr r0, [r0, #0x24] + cmp r0, #5 + bne _021DFCF8 + mov r0, #3 + bl FUN_021DF5CC + ldr r1, _021DFD14 ; =0x0220D334 + mov r0, #1 + mov r2, #0 + bl FUN_021E1E30 +_021DFCF8: + mov r0, #1 + add sp, sp, #0x224 + ldmia sp!, {r4, r5, r6, r7, pc} + .align 2, 0 +_021DFD04: .word 0x0221053C +_021DFD08: .word 0x0220D344 +_021DFD0C: .word 0x0220D348 +_021DFD10: .word FUN_021DF12C +_021DFD14: .word 0x0220D334 + + arm_func_start FUN_021DFD18 +FUN_021DFD18: ; 0x021DFD18 + stmdb sp!, {r4, r5, r6, r7, lr} + sub sp, sp, #4 + mov r7, r0 + mov r6, r1 + mov r5, r2 + mov r4, r3 + bl FUN_021DD6D4 + cmp r0, #0 + bne _021DFD50 + ldr r0, _021DFDB4 ; =0x0221053C + ldr r0, [r0] + ldr r0, [r0, #0x24] + cmp r0, #3 + beq _021DFD5C +_021DFD50: + add sp, sp, #4 + mov r0, #0 + ldmia sp!, {r4, r5, r6, r7, pc} +_021DFD5C: + bl FUN_021DF6CC + ldr r1, _021DFDB4 ; =0x0221053C + mov r2, #0 + ldr r3, [r1] + mov r0, #5 + str r6, [r3, #0x88] + ldr r3, [r1] + str r5, [r3, #0x8c] + ldr r1, [r1] + strb r2, [r1, #0x2c] + bl FUN_021DF5CC + sub r0, r7, #1 + ldr r5, [sp, #0x18] + ldr r1, _021DFDB8 ; =FUN_021DF12C + mov r3, r4 + and r0, r0, #0xff + mov r2, #0 + str r5, [sp] + bl FUN_021EA138 + mov r0, #1 + add sp, sp, #4 + ldmia sp!, {r4, r5, r6, r7, pc} + .align 2, 0 +_021DFDB4: .word 0x0221053C +_021DFDB8: .word FUN_021DF12C + + arm_func_start FUN_021DFDBC +FUN_021DFDBC: ; 0x021DFDBC + stmdb sp!, {r4, r5, r6, lr} + sub sp, sp, #0x10 + mov r6, r1 + mov r5, r2 + mov r4, r3 + bl FUN_021DD6D4 + cmp r0, #0 + bne _021DFDF8 + ldr r0, _021DFE5C ; =0x0221053C + ldr r2, [r0] + ldr r1, [r2, #0x24] + cmp r1, #3 + blt _021DFDF8 + cmp r1, #4 + bne _021DFE04 +_021DFDF8: + add sp, sp, #0x10 + mov r0, #0 + ldmia sp!, {r4, r5, r6, pc} +_021DFE04: + str r6, [r2, #0x78] + ldr r1, [r0] + mov r0, #4 + str r5, [r1, #0x7c] + bl FUN_021DF5CC + ldr r0, _021DFE5C ; =0x0221053C + ldr r1, [sp, #0x20] + ldr r3, [r0] + ldr r0, [sp, #0x24] + str r4, [sp] + str r1, [sp, #4] + ldr r4, [sp, #0x28] + str r0, [sp, #8] + ldr r2, _021DFE60 ; =FUN_021DF2B4 + add r0, r3, #0xe0 + add r1, r3, #0x1e0 + mov r3, #0 + str r4, [sp, #0xc] + bl FUN_021E2174 + mov r0, #1 + add sp, sp, #0x10 + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +_021DFE5C: .word 0x0221053C +_021DFE60: .word FUN_021DF2B4 + + arm_func_start FUN_021DFE64 +FUN_021DFE64: ; 0x021DFE64 + stmdb sp!, {r4, r5, r6, lr} + movs r4, r0 + mov r6, r2 + mov r5, r3 + moveq r0, #0 + ldmeqia sp!, {r4, r5, r6, pc} + bl FUN_021DD6D4 + cmp r0, #0 + bne _021DFE9C + ldr r0, _021DFF6C ; =0x0221053C + ldr r2, [r0] + ldr r1, [r2, #0x24] + cmp r1, #0 + beq _021DFEA4 +_021DFE9C: + mov r0, #0 + ldmia sp!, {r4, r5, r6, pc} +_021DFEA4: + str r6, [r2, #0x70] + ldr r1, [r0] + cmp r4, #0 + str r5, [r1, #0x74] + beq _021DFEC4 + ldrh r1, [r4] + cmp r1, #0 + bne _021DFECC +_021DFEC4: + mov r5, #0 + b _021DFF18 +_021DFECC: + ldr r1, [r0] + mov r0, #0 + add r1, r1, #0x2e + mov r2, #0x34 + bl MIi_CpuClear16 + mov r0, r4 + bl FUN_021DE89C + cmp r0, #0x19 + movhi r5, #0x19 + bhi _021DFF00 + mov r0, r4 + bl FUN_021DE89C + mov r5, r0 +_021DFF00: + ldr r1, _021DFF6C ; =0x0221053C + mov r0, r4 + ldr r1, [r1] + mov r2, r5, lsl #1 + add r1, r1, #0x2e + bl MIi_CpuCopy16 +_021DFF18: + ldr r0, _021DFF6C ; =0x0221053C + mov r1, #0 + ldr r0, [r0] + add r0, r0, r5, lsl #1 + strh r1, [r0, #0x2e] + bl FUN_021DDC1C + cmp r0, #4 + beq _021DFF4C + ldr r1, _021DFF70 ; =0xFFFF1596 + mov r0, #2 + bl FUN_021E0EAC + mov r0, #1 + ldmia sp!, {r4, r5, r6, pc} +_021DFF4C: + mov r0, #1 + bl FUN_021DF5CC + ldr r0, _021DFF6C ; =0x0221053C + ldr r0, [r0] + ldr r0, [r0, #0x68] + bl FUN_021EE898 + mov r0, #1 + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +_021DFF6C: .word 0x0221053C +_021DFF70: .word 0xFFFF1596 + + arm_func_start FUN_021DFF74 +FUN_021DFF74: ; 0x021DFF74 + stmdb sp!, {lr} + sub sp, sp, #4 + bl FUN_021DD984 + cmp r0, #0 + beq _021DFF8C + bl FUN_021DF5EC +_021DFF8C: + ldr r0, _021E01E4 ; =0x0221053C + ldr r0, [r0] + cmp r0, #0 + addeq sp, sp, #4 + ldmeqia sp!, {pc} + ldr r0, [r0, #0x24] + cmp r0, #0 + addeq sp, sp, #4 + ldmeqia sp!, {pc} + bl FUN_021DD6D4 + cmp r0, #0 + addne sp, sp, #4 + ldmneia sp!, {pc} + ldr r0, _021E01E4 ; =0x0221053C + ldr r0, [r0] + ldr r0, [r0, #0x24] + cmp r0, #6 + addls pc, pc, r0, lsl #2 + b _021E0194 +_021DFFD8: ; jump table + b _021E0194 ; case 0 + b _021DFFF4 ; case 1 + b _021E0124 ; case 2 + b _021E012C ; case 3 + b _021E012C ; case 4 + b _021E013C ; case 5 + b _021E014C ; case 6 +_021DFFF4: + bl FUN_021EE6A0 + cmp r0, #1 + beq _021E0014 + cmp r0, #2 + beq _021E00FC + cmp r0, #3 + beq _021E0110 + b _021E0194 +_021E0014: + ldr r0, _021E01E4 ; =0x0221053C + mov r2, #0 + ldr r0, [r0] + ldr r1, [r0, #0xa0] + add r0, r0, #0x1c + bl FUN_021F0F94 + bl FUN_021DF414 + cmp r0, #0 + addne sp, sp, #4 + ldmneia sp!, {pc} + ldr r0, _021E01E4 ; =0x0221053C + mov r1, #0 + ldr r0, [r0] + ldr r2, _021E01E8 ; =FUN_021DF0D4 + mov r3, r1 + add r0, r0, #0x1c + bl FUN_021F0EB0 + bl FUN_021DF414 + cmp r0, #0 + addne sp, sp, #4 + ldmneia sp!, {pc} + ldr r0, _021E01E4 ; =0x0221053C + ldr r2, _021E01EC ; =FUN_021DEF6C + ldr r0, [r0] + mov r1, #3 + add r0, r0, #0x1c + mov r3, #0 + bl FUN_021F0EB0 + bl FUN_021DF414 + cmp r0, #0 + addne sp, sp, #4 + ldmneia sp!, {pc} + ldr r0, _021E01E4 ; =0x0221053C + ldr r2, _021E01F0 ; =FUN_021E20C8 + ldr r0, [r0] + mov r1, #1 + add r0, r0, #0x1c + mov r3, #0 + bl FUN_021F0EB0 + bl FUN_021DF414 + cmp r0, #0 + addne sp, sp, #4 + ldmneia sp!, {pc} + ldr r0, _021E01E4 ; =0x0221053C + ldr r2, _021E01F4 ; =FUN_021E1FE4 + ldr r0, [r0] + mov r1, #2 + add r0, r0, #0x1c + mov r3, #0 + bl FUN_021F0EB0 + bl FUN_021DF414 + cmp r0, #0 + addne sp, sp, #4 + ldmneia sp!, {pc} + mov r0, #2 + bl FUN_021DF5CC + bl FUN_021E1034 + b _021E0194 +_021E00FC: + ldr r1, _021E01F8 ; =0xFFFFB172 + mov r0, #3 + bl FUN_021E0EAC + add sp, sp, #4 + ldmfd sp!, {pc} +_021E0110: + ldr r1, _021E01FC ; =0xFFFFB17B + mov r0, #4 + bl FUN_021E0EAC + add sp, sp, #4 + ldmfd sp!, {pc} +_021E0124: + bl FUN_021E0F1C + b _021E0194 +_021E012C: + bl FUN_021E2228 + mov r0, #0 + bl FUN_021E9568 + b _021E0194 +_021E013C: + mov r0, #1 + bl FUN_021E9568 + bl FUN_021E2228 + b _021E0194 +_021E014C: + bl FUN_021EAA64 + bl FUN_021E2228 + ldr r0, _021E01E4 ; =0x0221053C + ldr r1, [r0] + ldrb r0, [r1, #0x369] + cmp r0, #2 + beq _021E0174 + ldrb r0, [r1, #0x369] + cmp r0, #3 + bne _021E0180 +_021E0174: + mov r0, #1 + bl FUN_021E9568 + b _021E0194 +_021E0180: + ldr r0, [r1] + cmp r0, #0 + beq _021E0194 + mov r0, #0 + bl FUN_021E9568 +_021E0194: + ldr r0, _021E01E4 ; =0x0221053C + ldr r1, [r0] + ldrb r0, [r1, #0x36c] + cmp r0, #1 + addne sp, sp, #4 + ldmneia sp!, {pc} + ldr r0, [r1, #0x364] + cmp r0, #0 + beq _021E01CC + bl FUN_02202280 + ldr r0, _021E01E4 ; =0x0221053C + mov r1, #0 + ldr r0, [r0] + str r1, [r0, #0x364] +_021E01CC: + ldr r0, _021E01E4 ; =0x0221053C + mov r1, #0 + ldr r0, [r0] + strb r1, [r0, #0x36c] + add sp, sp, #4 + ldmfd sp!, {pc} + .align 2, 0 +_021E01E4: .word 0x0221053C +_021E01E8: .word FUN_021DF0D4 +_021E01EC: .word FUN_021DEF6C +_021E01F0: .word FUN_021E20C8 +_021E01F4: .word FUN_021E1FE4 +_021E01F8: .word 0xFFFFB172 +_021E01FC: .word 0xFFFFB17B + + arm_func_start FUN_021E0200 +FUN_021E0200: ; 0x021E0200 + stmdb sp!, {lr} + sub sp, sp, #4 + ldr r0, _021E0370 ; =0x0221053C + ldr r0, [r0] + cmp r0, #0 + addeq sp, sp, #4 + ldmeqia sp!, {pc} + ldr r0, [r0, #0x364] + cmp r0, #0 + beq _021E023C + bl FUN_02202280 + ldr r0, _021E0370 ; =0x0221053C + mov r1, #0 + ldr r0, [r0] + str r1, [r0, #0x364] +_021E023C: + ldr r0, _021E0370 ; =0x0221053C + mov r2, #0 + ldr r1, [r0] + strb r2, [r1, #0x36c] + ldr r0, [r0] + ldr r0, [r0, #0x438] + cmp r0, #0 + beq _021E0270 + bl FUN_02203E80 + ldr r0, _021E0370 ; =0x0221053C + mov r1, #0 + ldr r0, [r0] + str r1, [r0, #0x438] +_021E0270: + bl FUN_02200D6C + bl FUN_021FBE7C + ldr r0, _021E0370 ; =0x0221053C + ldr ip, [r0] + ldr r0, [ip, #0x1c] + cmp r0, #0 + beq _021E0324 + mov r1, #0 + mov r2, r1 + mov r3, r1 + add r0, ip, #0x1c + bl FUN_021F0EB0 + ldr r0, _021E0370 ; =0x0221053C + mov r2, #0 + ldr r0, [r0] + mov r3, r2 + add r0, r0, #0x1c + mov r1, #3 + bl FUN_021F0EB0 + ldr r0, _021E0370 ; =0x0221053C + mov r2, #0 + ldr r0, [r0] + mov r3, r2 + add r0, r0, #0x1c + mov r1, #1 + bl FUN_021F0EB0 + ldr r0, _021E0370 ; =0x0221053C + mov r2, #0 + ldr r0, [r0] + mov r1, #2 + add r0, r0, #0x1c + mov r3, r2 + bl FUN_021F0EB0 + ldr r0, _021E0370 ; =0x0221053C + ldr r0, [r0] + add r0, r0, #0x1c + bl FUN_021F0F18 + ldr r0, _021E0370 ; =0x0221053C + ldr r0, [r0] + add r0, r0, #0x1c + bl FUN_021F0F64 + mov r1, #0 + ldr r0, _021E0370 ; =0x0221053C + ldr r0, [r0] + str r1, [r0, #0x1c] +_021E0324: + bl FUN_021E0E48 + bl FUN_021E1D90 + bl FUN_021E854C + bl FUN_021EA9C4 + ldr r0, _021E0370 ; =0x0221053C + ldr r0, [r0] + ldr r0, [r0] + cmp r0, #0 + beq _021E035C + bl FUN_021FD704 + ldr r0, _021E0370 ; =0x0221053C + mov r1, #0 + ldr r0, [r0] + str r1, [r0] +_021E035C: + ldr r0, _021E0370 ; =0x0221053C + mov r1, #0 + str r1, [r0] + add sp, sp, #4 + ldmfd sp!, {pc} + .align 2, 0 +_021E0370: .word 0x0221053C + + arm_func_start FUN_021E0374 +FUN_021E0374: ; 0x021E0374 + stmdb sp!, {r4, r5, r6, lr} + sub sp, sp, #0x10 + ldr ip, _021E05D8 ; =0x0221053C + mov r6, r1 + mov r5, r2 + mov r4, r3 + str r0, [ip] + bl FUN_021DD6F0 + ldr r0, _021E05D8 ; =0x0221053C + mov r2, #0 + ldr r1, [r0] + ldr r3, _021E05DC ; =FUN_021E8F80 + str r2, [r1] + ldr r1, [r0] + ldr r2, _021E05E0 ; =FUN_021DEF60 + str r3, [r1, #4] + ldr r1, [r0] + ldr ip, [sp, #0x24] + str r2, [r1, #8] + cmp ip, #0 + ldr r2, [r0] + ldr r3, _021E05E4 ; =FUN_021DEBE4 + ldr r1, _021E05E8 ; =FUN_021DEBD8 + str r3, [r2, #0xc] + ldr r0, [r0] + ldr r3, [sp, #0x28] + str r1, [r0, #0x10] + ldr r0, _021E05D8 ; =0x0221053C + moveq ip, #0x2000 + ldr r0, [r0] + cmp r3, #0 + str ip, [r0, #0x14] + moveq r3, #0x2000 + ldr r1, _021E05D8 ; =0x0221053C + mov r0, #0 + ldr r2, [r1] + ldr ip, _021E05EC ; =0x02210F94 + str r3, [r2, #0x18] + ldr r2, [r1] + ldr r3, _021E05F0 ; =0x02211094 + str r0, [r2, #0x1c] + ldr r2, [r1] + str r6, [r2, #0x20] + ldr r2, [r1] + str r0, [r2, #0x24] + ldr r2, [r1] + str r0, [r2, #0x28] + ldr r2, [r1] + strb r0, [r2, #0x2c] + ldr r2, [r1] + strb r0, [r2, #0x2d] + ldr r2, [r1] + str r0, [r2, #0x64] + ldr r2, [r1] + str ip, [r2, #0x68] + ldr r2, [r1] + str r3, [r2, #0x6c] + ldr r2, [r1] + str r0, [r2, #0x70] + ldr r2, [r1] + str r0, [r2, #0x74] + ldr r2, [r1] + str r0, [r2, #0x78] + ldr r2, [r1] + str r0, [r2, #0x7c] + ldr r2, [r1] + str r0, [r2, #0x80] + ldr r2, [r1] + str r0, [r2, #0x84] + ldr r2, [r1] + str r0, [r2, #0x88] + ldr r2, [r1] + str r0, [r2, #0x8c] + ldr r2, [r1] + str r0, [r2, #0x90] + ldr r1, [r1] + str r0, [r1, #0x94] + bl FUN_021DF6CC + ldr r0, _021E05D8 ; =0x0221053C + mov r3, r5 + ldr r2, [r0] + ldr r1, [r6, #0x24] + ldr r0, _021E05F4 ; =FUN_021DF304 + str r1, [sp] + add r1, r2, #0x2e + str r1, [sp, #4] + str r0, [sp, #8] + mov r5, #0 + add r0, r2, #0x98 + mov r1, r6 + add r2, r2, #0x1c + str r5, [sp, #0xc] + bl FUN_021E1074 + ldr r0, _021E05D8 ; =0x0221053C + ldr r2, [sp, #0x30] + ldr r5, [r0] + ldr r3, [sp, #0x2c] + str r2, [sp] + add r0, r5, #0x2f8 + add r1, r5, #0x1c + add r2, r5, #0x2e + bl FUN_021E234C + ldr r0, _021E05D8 ; =0x0221053C + ldr r1, _021E05EC ; =0x02210F94 + ldr r2, [r0] + ldr r0, _021E05F0 ; =0x02211094 + str r1, [sp] + str r0, [sp, #4] + ldr r1, [sp, #0x2c] + ldr r0, [sp, #0x30] + str r1, [sp, #8] + str r0, [sp, #0xc] + add r0, r2, #0x354 + add r1, r2, #0x1c + add r3, r2, #4 + bl FUN_021EA368 + ldr r1, _021E05D8 ; =0x0221053C + ldr r0, _021E05F8 ; =0x000007D8 + ldr r1, [r1] + add r0, r1, r0 + bl FUN_021EACB4 + mov r0, r4 + bl strlen + cmp r0, #0x100 + movhs r5, #0xff + bhs _021E0578 + mov r0, r4 + bl strlen + mov r5, r0 +_021E0578: + ldr r1, _021E05EC ; =0x02210F94 + mov r0, r4 + mov r2, r5 + bl MI_CpuCopy8 + ldr r0, [sp, #0x20] + ldr r1, _021E05EC ; =0x02210F94 + mov r2, #0 + strb r2, [r1, r5] + bl strlen + cmp r0, #0x100 + movhs r4, #0xff + bhs _021E05B4 + ldr r0, [sp, #0x20] + bl strlen + mov r4, r0 +_021E05B4: + ldr r0, [sp, #0x20] + ldr r1, _021E05F0 ; =0x02211094 + mov r2, r4 + bl MI_CpuCopy8 + ldr r0, _021E05F0 ; =0x02211094 + mov r1, #0 + strb r1, [r0, r4] + add sp, sp, #0x10 + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +_021E05D8: .word 0x0221053C +_021E05DC: .word FUN_021E8F80 +_021E05E0: .word FUN_021DEF60 +_021E05E4: .word FUN_021DEBE4 +_021E05E8: .word FUN_021DEBD8 +_021E05EC: .word 0x02210F94 +_021E05F0: .word 0x02211094 +_021E05F4: .word FUN_021DF304 +_021E05F8: .word 0x000007D8 + + arm_func_start FUN_021E05FC +FUN_021E05FC: ; 0x021E05FC + ldr r0, _021E0624 ; =0x022106C8 + ldr r0, [r0] + cmp r0, #0 + beq _021E061C + ldr r0, [r0, #4] + cmp r0, #5 + moveq r0, #1 + bxeq lr +_021E061C: + mov r0, #0 + bx lr + .align 2, 0 +_021E0624: .word 0x022106C8 + + arm_func_start FUN_021E0628 +FUN_021E0628: ; 0x021E0628 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #0x4c + mov r4, r1 + ldr r1, [r4] + mov r5, r0 + cmp r1, #0 + addne sp, sp, #0x4c + ldmneia sp!, {r4, r5, pc} + ldr r1, _021E07CC ; =0x022106C8 + ldr r2, [r1] + ldr r1, [r2, #4] + cmp r1, #3 + bne _021E0704 + ldrsb r1, [r4, #0x8e] + cmp r1, #0 + bne _021E06DC + ldr r0, [r2, #0x1c] + ldr r1, [r2, #0xc] + add r2, sp, #8 + add r0, r0, #4 + bl FUN_02097218 + ldr r1, _021E07D0 ; =0x00000705 + add r2, sp, #8 + mov r0, r5 + bl FUN_021F0B30 + bl FUN_021E0DB0 + cmp r0, #0 + addne sp, sp, #0x4c + ldmneia sp!, {r4, r5, pc} + ldr r0, _021E07CC ; =0x022106C8 + mov r3, #4 + ldr r1, [r0] + ldr r0, _021E07D4 ; =FUN_021E0628 + str r3, [r1, #4] + mov r2, #0 + str r0, [sp] + str r2, [sp, #4] + ldr r1, [r4, #4] + mov r0, r5 + mov r3, r2 + bl FUN_021F0B9C + bl FUN_021E0DB0 + add sp, sp, #0x4c + cmp r0, #0 + ldmia sp!, {r4, r5, pc} +_021E06DC: + bl FUN_021F0D54 + ldr r0, _021E07D8 ; =FUN_021E0C80 + mov r1, #0 + bl FUN_021E0A00 + ldr r0, _021E07CC ; =0x022106C8 + mov r1, #1 + ldr r0, [r0] + add sp, sp, #0x4c + str r1, [r0, #4] + ldmia sp!, {r4, r5, pc} +_021E0704: + cmp r1, #4 + addne sp, sp, #0x4c + ldmneia sp!, {r4, r5, pc} + ldr r0, [r2, #0x1c] + ldr r1, [r2, #0xc] + add r2, sp, #0x1d + add r0, r0, #4 + bl FUN_02097218 + add r1, sp, #0x1d + add r0, r4, #0x8e + bl strcmp + cmp r0, #0 + bne _021E079C + ldr r0, _021E07CC ; =0x022106C8 + add r2, sp, #0x32 + ldr r0, [r0] + ldr r1, [r0, #0xc] + add r0, r0, #0x3c + bl FUN_02097218 + ldr r0, _021E07CC ; =0x022106C8 + ldr r2, [r4, #4] + ldr r1, [r0] + ldr r0, [r1, #0x1c] + add r1, r1, #0x3c + bl FUN_02096EC0 + mov r0, r5 + bl FUN_021F0D54 + ldr r0, _021E07CC ; =0x022106C8 + ldr r1, _021E07DC ; =0x022106C4 + ldr r4, [r0] + ldr r0, _021E07E0 ; =0x022106CC + ldr r2, [r1] + ldr r3, [r0] + add r0, r4, #0x48 + add r1, r4, #0x148 + blx r3 + add sp, sp, #0x4c + ldmia sp!, {r4, r5, pc} +_021E079C: + ldr r0, _021E07D4 ; =FUN_021E0628 + mov r2, #0 + str r0, [sp] + str r2, [sp, #4] + ldr r1, [r4, #4] + mov r0, r5 + mov r3, r2 + bl FUN_021F0B9C + bl FUN_021E0DB0 + cmp r0, #0 + add sp, sp, #0x4c + ldmia sp!, {r4, r5, pc} + .align 2, 0 +_021E07CC: .word 0x022106C8 +_021E07D0: .word 0x00000705 +_021E07D4: .word FUN_021E0628 +_021E07D8: .word FUN_021E0C80 +_021E07DC: .word 0x022106C4 +_021E07E0: .word 0x022106CC + + arm_func_start FUN_021E07E4 +FUN_021E07E4: ; 0x021E07E4 + stmdb sp!, {lr} + sub sp, sp, #0x3d4 + bl FUN_021D988C + cmp r0, #0x15 + bne _021E08BC + add r0, sp, #0 + bl FUN_021D97F8 + ldr r0, _021E09DC ; =0x022106C8 + add r1, sp, #0x4a + ldr r0, [r0] + add r0, r0, #0x48 + bl strcpy + ldr r0, _021E09DC ; =0x022106C8 + add r1, sp, #0x100 + ldr r0, [r0] + add r1, r1, #0x77 + add r0, r0, #0x148 + bl strcpy + bl FUN_021D991C + ldr r1, _021E09DC ; =0x022106C8 + mov r0, #0 + ldr r1, [r1] + mov r2, r0 + ldr r1, [r1, #0x24] + bl FUN_021DD904 + ldr r0, _021E09DC ; =0x022106C8 + mov r2, #0 + ldr r1, [r0] + str r2, [r1, #0x24] + ldr r0, [r0] + ldr r0, [r0, #0x1c] + bl FUN_0209702C + cmp r0, #0 + beq _021E0898 + ldr r0, _021E09DC ; =0x022106C8 + ldr r1, _021E09E0 ; =0x022106C4 + ldr ip, [r0] + ldr r0, _021E09E4 ; =0x022106CC + ldr r2, [r1] + ldr r3, [r0] + add r0, ip, #0x48 + add r1, ip, #0x148 + blx r3 + add sp, sp, #0x3d4 + ldmfd sp!, {pc} +_021E0898: + ldr r0, _021E09DC ; =0x022106C8 + ldr r2, _021E09E8 ; =FUN_021E0C98 + ldr r1, [r0] + mov r3, #3 + add r0, r1, #0x48 + add r1, r1, #0x148 + bl FUN_021E0BE0 + add sp, sp, #0x3d4 + ldmfd sp!, {pc} +_021E08BC: + bl FUN_021D988C + cmp r0, #0 + addeq sp, sp, #0x3d4 + ldmeqia sp!, {pc} + bl OS_GetTick + ldr r3, _021E09DC ; =0x022106C8 + ldr r2, _021E09EC ; =0x000082EA + ldr ip, [r3] + mov r3, #0 + ldr lr, [ip, #0x28] + ldr ip, [ip, #0x2c] + subs lr, r0, lr + sbc r0, r1, ip + mov r1, r0, lsl #6 + orr r1, r1, lr, lsr #26 + mov r0, lr, lsl #6 + bl _ll_udiv + ldr r2, _021E09F0 ; =0x00002710 + cmp r1, #0 + cmpeq r0, r2 + bls _021E0958 + add r0, sp, #0x1c4 + bl FUN_021D97F8 + bl FUN_021D991C + ldr r1, _021E09DC ; =0x022106C8 + mov r0, #0 + ldr r1, [r1] + mov r2, r0 + ldr r1, [r1, #0x24] + bl FUN_021DD904 + ldr r0, _021E09DC ; =0x022106C8 + mov r2, #0 + ldr r1, [r0] + mov r0, #2 + str r2, [r1, #0x24] + ldr r1, [sp, #0x1c4] + bl FUN_021E0EAC + add sp, sp, #0x3d4 + ldmfd sp!, {pc} +_021E0958: + bl FUN_021D991C + add r0, sp, #0x388 + mov r1, #0 + mov r2, #0x48 + bl MI_CpuFill8 + ldr r0, _021E09DC ; =0x022106C8 + ldr r0, [r0] + ldr r0, [r0, #0x10] + bl FUN_021DE89C + ldr r1, _021E09DC ; =0x022106C8 + mov r2, r0, lsl #1 + ldr r1, [r1] + add r2, r2, #2 + ldr r0, [r1, #0x10] + add r1, sp, #0x388 + bl MI_CpuCopy8 + ldr r0, _021E09DC ; =0x022106C8 + ldr r1, _021E09F4 ; =0x00000251 + ldr r2, [r0] + add r0, sp, #0x3bc + add r1, r2, r1 + bl strcpy + ldr r2, _021E09F8 ; =FUN_021DD944 + ldr r0, _021E09DC ; =0x022106C8 + str r2, [sp, #0x3c8] + ldr r2, _021E09FC ; =FUN_021DD904 + ldr r1, [r0] + str r2, [sp, #0x3cc] + ldr r1, [r1, #0x24] + add r0, sp, #0x388 + bl FUN_021D9ACC + add sp, sp, #0x3d4 + ldmfd sp!, {pc} + .align 2, 0 +_021E09DC: .word 0x022106C8 +_021E09E0: .word 0x022106C4 +_021E09E4: .word 0x022106CC +_021E09E8: .word FUN_021E0C98 +_021E09EC: .word 0x000082EA +_021E09F0: .word 0x00002710 +_021E09F4: .word 0x00000251 +_021E09F8: .word FUN_021DD944 +_021E09FC: .word FUN_021DD904 + + arm_func_start FUN_021E0A00 +FUN_021E0A00: ; 0x021E0A00 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #0x4c + mov r5, r0 + mov r4, r1 + add r0, sp, #0 + mov r1, #0 + mov r2, #0x48 + bl MI_CpuFill8 + ldr r0, _021E0BB8 ; =0x022106C8 + ldr r2, _021E0BBC ; =0x022106CC + ldr r1, _021E0BC0 ; =0x022106C4 + ldr r0, [r0] + str r5, [r2] + str r4, [r1] + ldr r0, [r0, #0x1c] + bl FUN_0209702C + cmp r0, #0 + beq _021E0A68 + ldr r0, _021E0BB8 ; =0x022106C8 + ldr r1, [r0] + ldr r0, [r1, #0x1c] + add r2, r1, #0x248 + ldr r1, [r0, #0x24] + add r0, r0, #0x10 + bl FUN_02097218 + b _021E0B1C +_021E0A68: + ldr r0, _021E0BB8 ; =0x022106C8 + ldr r0, [r0] + add r0, r0, #0x3c + bl FUN_0209703C + cmp r0, #0 + bne _021E0AD0 + ldr r0, _021E0BB8 ; =0x022106C8 + ldr r0, [r0] + ldr r0, [r0, #0x1c] + add r0, r0, #4 + bl FUN_0209705C + cmp r0, #0 + beq _021E0ABC + ldr r0, _021E0BB8 ; =0x022106C8 + ldr r1, [r0] + ldr r0, [r1, #0x1c] + add r3, r1, #0x3c + add r0, r0, #4 + ldmia r0, {r0, r1, r2} + stmia r3, {r0, r1, r2} + b _021E0B04 +_021E0ABC: + ldr r0, _021E0BB8 ; =0x022106C8 + ldr r0, [r0] + add r0, r0, #0x3c + bl FUN_020970CC + b _021E0B04 +_021E0AD0: + bl OS_GetTick + ldr r2, _021E0BC4 ; =0x6C078965 + ldr r3, _021E0BC8 ; =0x5D588B65 + umull ip, r4, r0, r2 + mla r4, r0, r3, r4 + ldr r3, _021E0BB8 ; =0x022106C8 + ldr r0, _021E0BCC ; =0x00269EC3 + mla r4, r1, r2, r4 + adds r0, ip, r0 + ldr r3, [r3] + adc r1, r4, #0 + add r0, r3, #0x3c + bl FUN_02097508 +_021E0B04: + ldr r0, _021E0BB8 ; =0x022106C8 + ldr r2, [r0] + ldr r1, [r2, #0xc] + add r0, r2, #0x3c + add r2, r2, #0x248 + bl FUN_02097218 +_021E0B1C: + ldr r0, _021E0BB8 ; =0x022106C8 + ldr r0, [r0] + ldr r0, [r0, #0x10] + bl FUN_021DE89C + ldr r1, _021E0BB8 ; =0x022106C8 + mov r2, r0, lsl #1 + ldr r1, [r1] + add r2, r2, #2 + ldr r0, [r1, #0x10] + add r1, sp, #0 + bl MI_CpuCopy8 + ldr r0, _021E0BB8 ; =0x022106C8 + ldr r1, _021E0BD0 ; =0x00000251 + ldr r2, [r0] + add r0, sp, #0x34 + add r1, r2, r1 + bl strcpy + ldr r4, _021E0BD4 ; =FUN_021DD944 + ldr r3, _021E0BD8 ; =FUN_021DD904 + ldr r1, _021E0BDC ; =0x00001C10 + mov r0, #0 + mov r2, #4 + str r4, [sp, #0x40] + str r3, [sp, #0x44] + bl FUN_021DD924 + ldr r1, _021E0BB8 ; =0x022106C8 + mov r4, r0 + ldr r0, [r1] + str r4, [r0, #0x24] + bl OS_GetTick + ldr r2, _021E0BB8 ; =0x022106C8 + ldr r2, [r2] + str r0, [r2, #0x28] + str r1, [r2, #0x2c] + mov r1, r4 + add r0, sp, #0 + bl FUN_021D9ACC + add sp, sp, #0x4c + ldmia sp!, {r4, r5, pc} + .align 2, 0 +_021E0BB8: .word 0x022106C8 +_021E0BBC: .word 0x022106CC +_021E0BC0: .word 0x022106C4 +_021E0BC4: .word 0x6C078965 +_021E0BC8: .word 0x5D588B65 +_021E0BCC: .word 0x00269EC3 +_021E0BD0: .word 0x00000251 +_021E0BD4: .word FUN_021DD944 +_021E0BD8: .word FUN_021DD904 +_021E0BDC: .word 0x00001C10 + + arm_func_start FUN_021E0BE0 +FUN_021E0BE0: ; 0x021E0BE0 + stmdb sp!, {r4, r5, r6, lr} + sub sp, sp, #0x10 + ldr r4, _021E0C7C ; =0x022106C8 + mov r6, r1 + ldr r4, [r4] + mov r1, r0 + add r0, r4, #0x48 + mov r5, r2 + mov r4, r3 + bl strcpy + ldr r0, _021E0C7C ; =0x022106C8 + mov r1, r6 + ldr r0, [r0] + add r0, r0, #0x148 + bl strcpy + ldr r0, _021E0C7C ; =0x022106C8 + ldr r6, [r0] + bl OS_GetTick + str r0, [r6, #0x34] + str r1, [r6, #0x38] + mov r3, #1 + ldr r0, _021E0C7C ; =0x022106C8 + str r3, [r6, #0x30] + ldr r2, [r0] + mov r1, #0 + str r1, [sp] + str r5, [sp, #4] + str r1, [sp, #8] + ldr r0, [r2] + add r1, r2, #0x48 + add r2, r2, #0x148 + bl FUN_021F0D8C + bl FUN_021E0DB0 + cmp r0, #0 + ldreq r0, _021E0C7C ; =0x022106C8 + ldreq r0, [r0] + streq r4, [r0, #4] + add sp, sp, #0x10 + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +_021E0C7C: .word 0x022106C8 + + arm_func_start FUN_021E0C80 +FUN_021E0C80: ; 0x021E0C80 + ldr ip, _021E0C90 ; =FUN_021E0BE0 + ldr r2, _021E0C94 ; =FUN_021E0C98 + mov r3, #2 + bx ip + .align 2, 0 +_021E0C90: .word FUN_021E0BE0 +_021E0C94: .word FUN_021E0C98 + + arm_func_start FUN_021E0C98 +FUN_021E0C98: ; 0x021E0C98 + stmdb sp!, {r4, lr} + sub sp, sp, #8 + ldr r3, _021E0DA0 ; =0x022106C8 + mov r2, #0 + ldr ip, [r3] + mov r4, r1 + str r2, [ip, #0x30] + ldr r1, [r4] + cmp r1, #0 + bne _021E0D90 + ldr ip, [r3] + ldr r1, [ip, #4] + cmp r1, #2 + bne _021E0D5C + ldr r1, [ip, #0x1c] + ldr r0, [r4, #4] + ldr r1, [r1, #0x1c] + cmp r1, r0 + bne _021E0D48 + ldr r1, _021E0DA4 ; =0x0220D34C + mov r3, #5 + mov r0, #1 + str r3, [ip, #4] + bl FUN_021E1E30 + bl FUN_021E0DB0 + cmp r0, #0 + addne sp, sp, #8 + ldmneia sp!, {r4, pc} + ldr r0, _021E0DA0 ; =0x022106C8 + ldr r1, [r4, #4] + ldr r3, [r0] + mov r0, #0 + ldr r2, [r3, #0x18] + ldr r3, [r3, #0x14] + blx r3 + bl FUN_021DF7C4 + cmp r0, #0 + addne sp, sp, #8 + ldmneia sp!, {r4, pc} + ldr r0, [r4, #4] + bl FUN_021EA1E0 + add sp, sp, #8 + cmp r0, #0 + ldmia sp!, {r4, pc} +_021E0D48: + ldr r1, _021E0DA8 ; =0xFFFF15A0 + mov r0, #6 + bl FUN_021E0EAC + add sp, sp, #8 + ldmia sp!, {r4, pc} +_021E0D5C: + cmp r1, #3 + addne sp, sp, #8 + ldmneia sp!, {r4, pc} + ldr r1, _021E0DAC ; =FUN_021E0628 + mov r3, r2 + str r1, [sp] + str r2, [sp, #4] + ldr r1, [r4, #4] + bl FUN_021F0B9C + bl FUN_021E0DB0 + add sp, sp, #8 + cmp r0, #0 + ldmia sp!, {r4, pc} +_021E0D90: + mov r0, r1 + bl FUN_021E0DB0 + add sp, sp, #8 + ldmia sp!, {r4, pc} + .align 2, 0 +_021E0DA0: .word 0x022106C8 +_021E0DA4: .word 0x0220D34C +_021E0DA8: .word 0xFFFF15A0 +_021E0DAC: .word FUN_021E0628 + + arm_func_start FUN_021E0DB0 +FUN_021E0DB0: ; 0x021E0DB0 + stmdb sp!, {r4, lr} + movs r4, r0 + moveq r0, #0 + ldmeqia sp!, {r4, pc} + cmp r4, #4 + addls pc, pc, r4, lsl #2 + b _021E0E0C +_021E0DCC: ; jump table + b _021E0E0C ; case 0 + b _021E0DE0 ; case 1 + b _021E0DEC ; case 2 + b _021E0DF8 ; case 3 + b _021E0E04 ; case 4 +_021E0DE0: + mov r0, #9 + mvn r2, #0 + b _021E0E0C +_021E0DEC: + mov r0, #9 + mvn r2, #1 + b _021E0E0C +_021E0DF8: + mov r0, #6 + mvn r2, #9 + b _021E0E0C +_021E0E04: + mov r0, #6 + mvn r2, #0x13 +_021E0E0C: + ldr r1, _021E0E20 ; =0xFFFF11B8 + add r1, r2, r1 + bl FUN_021E0EAC + mov r0, r4 + ldmia sp!, {r4, pc} + .align 2, 0 +_021E0E20: .word 0xFFFF11B8 + + arm_func_start FUN_021E0E24 +FUN_021E0E24: ; 0x021E0E24 + ldr r0, _021E0E44 ; =0x022106C8 + ldr r2, [r0] + cmp r2, #0 + movne r1, #0 + strne r1, [r2, #4] + ldrne r0, [r0] + strne r1, [r0, #0x30] + bx lr + .align 2, 0 +_021E0E44: .word 0x022106C8 + + arm_func_start FUN_021E0E48 +FUN_021E0E48: ; 0x021E0E48 + stmdb sp!, {lr} + sub sp, sp, #4 + ldr r0, _021E0EA8 ; =0x022106C8 + ldr r0, [r0] + ldr r0, [r0, #0x24] + cmp r0, #0 + beq _021E0E94 + bl FUN_021D9974 + bl FUN_021D991C + ldr r1, _021E0EA8 ; =0x022106C8 + mov r0, #0 + ldr r1, [r1] + mov r2, r0 + ldr r1, [r1, #0x24] + bl FUN_021DD904 + ldr r0, _021E0EA8 ; =0x022106C8 + mov r1, #0 + ldr r0, [r0] + str r1, [r0, #0x24] +_021E0E94: + ldr r0, _021E0EA8 ; =0x022106C8 + mov r1, #0 + str r1, [r0] + add sp, sp, #4 + ldmfd sp!, {pc} + .align 2, 0 +_021E0EA8: .word 0x022106C8 + + arm_func_start FUN_021E0EAC +FUN_021E0EAC: ; 0x021E0EAC + stmdb sp!, {r4, lr} + ldr r2, _021E0EFC ; =0x022106C8 + mov r4, r0 + ldr r2, [r2] + cmp r2, #0 + ldmeqia sp!, {r4, pc} + cmp r4, #0 + ldmeqia sp!, {r4, pc} + bl FUN_021DD6B0 + ldr r0, _021E0EFC ; =0x022106C8 + ldr r0, [r0] + ldr r3, [r0, #0x14] + cmp r3, #0 + beq _021E0EF4 + ldr r2, [r0, #0x18] + mov r0, r4 + mov r1, #0 + blx r3 +_021E0EF4: + bl FUN_021E0E24 + ldmia sp!, {r4, pc} + .align 2, 0 +_021E0EFC: .word 0x022106C8 + + arm_func_start FUN_021E0F00 +FUN_021E0F00: ; 0x021E0F00 + ldr r0, _021E0F18 ; =0x022106C8 + ldr r0, [r0] + cmp r0, #0 + ldrne r0, [r0, #0x1c] + moveq r0, #0 + bx lr + .align 2, 0 +_021E0F18: .word 0x022106C8 + + arm_func_start FUN_021E0F1C +FUN_021E0F1C: ; 0x021E0F1C + stmdb sp!, {lr} + sub sp, sp, #4 + ldr r0, _021E1024 ; =0x022106C8 + ldr r0, [r0] + cmp r0, #0 + addeq sp, sp, #4 + ldmeqia sp!, {pc} + bl FUN_021DD6D4 + cmp r0, #0 + addne sp, sp, #4 + ldmneia sp!, {pc} + ldr r0, _021E1024 ; =0x022106C8 + ldr r1, [r0] + ldr r0, [r1, #4] + cmp r0, #5 + addls pc, pc, r0, lsl #2 + b _021E101C +_021E0F60: ; jump table + b _021E101C ; case 0 + b _021E0F78 ; case 1 + b _021E0F84 ; case 2 + b _021E0F84 ; case 3 + b _021E0F84 ; case 4 + b _021E101C ; case 5 +_021E0F78: + bl FUN_021E07E4 + add sp, sp, #4 + ldmfd sp!, {pc} +_021E0F84: + ldr r0, [r1] + cmp r0, #0 + beq _021E0FA0 + ldr r1, [r0] + cmp r1, #0 + beq _021E0FA0 + bl FUN_021F0F18 +_021E0FA0: + ldr r0, _021E1024 ; =0x022106C8 + ldr r0, [r0] + ldr r0, [r0, #0x30] + cmp r0, #0 + addeq sp, sp, #4 + ldmeqia sp!, {pc} + bl OS_GetTick + ldr r3, _021E1024 ; =0x022106C8 + ldr r2, _021E1028 ; =0x000082EA + ldr ip, [r3] + mov r3, #0 + ldr lr, [ip, #0x34] + ldr ip, [ip, #0x38] + subs lr, r0, lr + sbc r0, r1, ip + mov r1, r0, lsl #6 + orr r1, r1, lr, lsr #26 + mov r0, lr, lsl #6 + bl _ll_udiv + ldr r2, _021E102C ; =0x0000EA60 + cmp r1, #0 + cmpeq r0, r2 + addls sp, sp, #4 + ldmlsia sp!, {pc} + ldr r1, _021E1030 ; =0xFFFF1172 + mov r0, #6 + bl FUN_021E0EAC + ldr r0, _021E1024 ; =0x022106C8 + mov r1, #0 + ldr r0, [r0] + str r1, [r0, #0x30] +_021E101C: + add sp, sp, #4 + ldmfd sp!, {pc} + .align 2, 0 +_021E1024: .word 0x022106C8 +_021E1028: .word 0x000082EA +_021E102C: .word 0x0000EA60 +_021E1030: .word 0xFFFF1172 + + arm_func_start FUN_021E1034 +FUN_021E1034: ; 0x021E1034 + stmdb sp!, {lr} + sub sp, sp, #4 + ldr r0, _021E106C ; =FUN_021E0C80 + mov r1, #0 + bl FUN_021E0A00 + ldr r0, _021E1070 ; =0x022106C8 + mov r3, #1 + ldr r2, [r0] + mov r1, #0 + str r3, [r2, #4] + ldr r0, [r0] + str r1, [r0, #0x30] + add sp, sp, #4 + ldmfd sp!, {pc} + .align 2, 0 +_021E106C: .word FUN_021E0C80 +_021E1070: .word 0x022106C8 + + arm_func_start FUN_021E1074 +FUN_021E1074: ; 0x021E1074 + stmdb sp!, {r4, r5, r6, lr} + ldr ip, _021E10F4 ; =0x022106C8 + mov r6, r1 + mov r5, r2 + mov r1, #0 + mov r2, #0x260 + mov r4, r3 + str r0, [ip] + bl MI_CpuFill8 + ldr r0, _021E10F4 ; =0x022106C8 + mov r2, #0 + ldr r1, [r0] + ldr ip, [sp, #0x10] + str r5, [r1] + ldr r1, [r0] + ldr r5, [sp, #0x14] + str r2, [r1, #4] + ldr r1, [r0] + ldr r3, [sp, #0x18] + str r4, [r1, #8] + ldr r1, [r0] + ldr r2, [sp, #0x1c] + str ip, [r1, #0xc] + ldr r1, [r0] + str r5, [r1, #0x10] + ldr r1, [r0] + str r3, [r1, #0x14] + ldr r1, [r0] + str r2, [r1, #0x18] + ldr r0, [r0] + str r6, [r0, #0x1c] + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +_021E10F4: .word 0x022106C8 + + arm_func_start FUN_021E10F8 +FUN_021E10F8: ; 0x021E10F8 + ldr r0, _021E1108 ; =0x022106D0 + ldr r0, [r0] + ldr r0, [r0, #0x20] + bx lr + .align 2, 0 +_021E1108: .word 0x022106D0 + + arm_func_start FUN_021E110C +FUN_021E110C: ; 0x021E110C + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x24 + mov sl, r1 + ldr r0, [sl] + mov r8, #0 + cmp r0, #0 + mov r0, #1 + str r0, [sp] + addne sp, sp, #0x24 + ldmneia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + ldr r4, _021E12B4 ; =0x022106D0 + mov sb, r8 + ldr r2, [r4] + ldr r1, [r2, #0x14] + cmp r1, #0 + ble _021E1274 + mov r7, r8 + str r0, [sp, #4] + mov fp, r8 + mov r5, r0 +_021E115C: + ldr r0, [r2, #0x18] + add r0, r0, r7 + bl FUN_02097484 + cmp r0, #1 + bne _021E11C8 + bl FUN_021E0F00 + ldr r1, [r4] + add r2, sp, #8 + ldr r1, [r1, #0x18] + add r1, r1, r7 + bl FUN_02096C78 + add r0, sp, #8 + add r1, sl, #0x8e + bl strcmp + cmp r0, #0 + bne _021E125C + ldr r0, [r4] + ldr r1, [sl, #4] + ldr r0, [r0, #0x18] + add r0, r0, r7 + bl FUN_02096C90 + ldr r0, [r4] + ldr r0, [r0, #0x18] + add r0, r0, r7 + bl FUN_02097414 + mov r8, r5 + b _021E125C +_021E11C8: + ldr r0, [r4] + ldr r0, [r0, #0x18] + add r0, r0, r7 + bl FUN_02097484 + cmp r0, #3 + beq _021E11F8 + ldr r0, [r4] + ldr r0, [r0, #0x18] + add r0, r0, r7 + bl FUN_02097484 + cmp r0, #2 + bne _021E125C +_021E11F8: + ldr r0, [r4] + ldr r0, [r0, #0x18] + add r0, r0, r7 + bl FUN_02097490 + cmp r0, #1 + streq fp, [sp] + beq _021E125C + ldr r6, [sl, #4] + bl FUN_021E0F00 + ldr r1, [r4] + ldr r1, [r1, #0x18] + add r1, r1, r7 + bl FUN_02096DA0 + cmp r6, r0 + bne _021E125C + ldr r0, [r4] + mov r1, r6 + ldr r0, [r0, #0x18] + add r0, r0, r7 + bl FUN_02096C90 + ldr r0, [r4] + ldr r0, [r0, #0x18] + add r0, r0, r7 + bl FUN_02097414 + ldr r8, [sp, #4] +_021E125C: + ldr r2, [r4] + add sb, sb, #1 + ldr r1, [r2, #0x14] + add r7, r7, #0xc + cmp sb, r1 + blt _021E115C +_021E1274: + cmp r8, #0 + addeq sp, sp, #0x24 + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + ldr r0, [r2, #0x18] + ldr r2, [sl, #4] + bl FUN_021E17F0 + ldr r1, [sp] + cmp r1, #0 + beq _021E129C + bl FUN_021E1DA4 +_021E129C: + ldr r0, _021E12B4 ; =0x022106D0 + mov r1, #1 + ldr r0, [r0] + strb r1, [r0, #0x1d] + add sp, sp, #0x24 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_021E12B4: .word 0x022106D0 + + arm_func_start FUN_021E12B8 +FUN_021E12B8: ; 0x021E12B8 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x1c + mov sb, r1 + ldr r1, [sb] + mov sl, r0 + cmp r1, #0 + mov fp, #0 + addne sp, sp, #0x1c + ldmneia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + ldr r4, _021E1410 ; =0x022106D0 + mov r8, fp + ldr r1, [r4] + ldr r0, [r1, #0x14] + cmp r0, #0 + ble _021E13E4 + add r0, sb, #0x8e + mov r7, fp + mov r5, #1 + str r0, [sp] +_021E1304: + ldr r0, [r1, #0x18] + add r0, r0, r7 + bl FUN_02097484 + cmp r0, #1 + bne _021E136C + bl FUN_021E0F00 + ldr r1, [r4] + add r2, sp, #4 + ldr r1, [r1, #0x18] + add r1, r1, r7 + bl FUN_02096C78 + ldr r1, [sp] + add r0, sp, #4 + bl strcmp + cmp r0, #0 + bne _021E13CC + ldr r1, [sb, #4] + mov r0, sl + bl FUN_021F0944 + ldr r0, [r4] + ldr r1, [sb, #4] + ldr r0, [r0, #0x18] + add r0, r0, r7 + bl FUN_02096C90 + mov fp, r5 + b _021E13CC +_021E136C: + ldr r0, [r4] + ldr r0, [r0, #0x18] + add r0, r0, r7 + bl FUN_02097484 + cmp r0, #3 + beq _021E139C + ldr r0, [r4] + ldr r0, [r0, #0x18] + add r0, r0, r7 + bl FUN_02097484 + cmp r0, #2 + bne _021E13CC +_021E139C: + ldr r6, [sb, #4] + bl FUN_021E0F00 + ldr r1, [r4] + ldr r1, [r1, #0x18] + add r1, r1, r7 + bl FUN_02096DA0 + cmp r6, r0 + bne _021E13CC + mov r0, sl + mov r1, r6 + bl FUN_021F0944 + mov fp, r5 +_021E13CC: + ldr r1, [r4] + add r8, r8, #1 + ldr r0, [r1, #0x14] + add r7, r7, #0xc + cmp r8, r0 + blt _021E1304 +_021E13E4: + cmp fp, #0 + beq _021E13FC + ldr r0, [sb, #4] + bl FUN_021E17BC + add sp, sp, #0x1c + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +_021E13FC: + ldr r1, [sb, #4] + mov r0, sl + bl FUN_021F0864 + add sp, sp, #0x1c + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_021E1410: .word 0x022106D0 + + arm_func_start FUN_021E1414 +FUN_021E1414: ; 0x021E1414 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #4 + mov sb, r1 + ldr r1, [sb] + mov sl, r0 + mov r8, r2 + cmp r1, #0 + bne _021E15FC + ldr r0, [sb, #4] + cmp r0, #0 + beq _021E15FC + mov r0, #0xc + ldr r1, _021E1670 ; =0x022106D0 + mul r6, r8, r0 + ldr r0, [r1] + ldr r0, [r0, #0x18] + add r0, r0, r6 + bl FUN_02097484 + cmp r0, #0 + beq _021E15FC + ldr r7, _021E1670 ; =0x022106D0 + ldr r1, [r7] + ldr r0, [r1] + cmp r0, #1 + addne sp, sp, #4 + ldmneia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + mov r0, #1 + strb r0, [r1, #0x1d] + ldr r0, [sb, #4] + mov r5, #0 + cmp r0, #0 + ble _021E14FC + mov r4, r5 +_021E1498: + ldr r0, [r7] + ldr r1, [sb, #0xc] + ldr r0, [r0, #0x18] + ldr r2, [r1, r4] + mov r1, r8 + bl FUN_021E1900 + cmp r0, #0 + beq _021E14E8 + ldr r0, _021E1670 ; =0x022106D0 + mov r2, #1 + ldr r4, [r0] + ldr r1, _021E1674 ; =0x00000601 + ldrb r3, [r4, #0x1c] + add sp, sp, #4 + add r3, r3, #1 + strb r3, [r4, #0x1c] + ldr r0, [r0] + strb r2, [r0, #0x1e] + str r1, [sb, #8] + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +_021E14E8: + ldr r0, [sb, #4] + add r5, r5, #1 + cmp r5, r0 + add r4, r4, #0xac + blt _021E1498 +_021E14FC: + cmp r0, #0 + mov r5, #0 + ble _021E15C4 + mov r7, r5 + add fp, sp, #0 + mvn r4, #0 +_021E1514: + ldr r1, [sb, #0xc] + mov r0, sl + ldr r1, [r1, r7] + mov r2, fp + bl FUN_021F0664 + bl FUN_021E1678 + ldr r0, [sp] + cmp r0, r4 + bne _021E1548 + ldr r0, [sb, #0xc] + ldr r0, [r0, r7] + bl FUN_021E17BC + b _021E15B0 +_021E1548: + ldr r0, _021E1670 ; =0x022106D0 + ldr r1, [sb, #0xc] + ldr r0, [r0] + ldr r1, [r1] + ldr r0, [r0, #0x18] + add r0, r0, r6 + bl FUN_02096C90 + ldr r0, _021E1670 ; =0x022106D0 + ldr r0, [r0] + ldr r0, [r0, #0x18] + add r0, r0, r6 + bl FUN_02097414 + mov r0, r8 + bl FUN_021E1DA4 + ldr r0, _021E1670 ; =0x022106D0 + mov r2, #1 + ldr r4, [r0] + ldr r1, _021E1674 ; =0x00000601 + ldrb r3, [r4, #0x1c] + add sp, sp, #4 + add r3, r3, #1 + strb r3, [r4, #0x1c] + ldr r0, [r0] + strb r2, [r0, #0x1e] + str r1, [sb, #8] + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +_021E15B0: + ldr r0, [sb, #4] + add r5, r5, #1 + cmp r5, r0 + add r7, r7, #0xac + blt _021E1514 +_021E15C4: + ldr r0, [sb, #8] + cmp r0, #0x600 + addeq sp, sp, #4 + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + ldr r0, _021E1670 ; =0x022106D0 + mov r1, #1 + ldr r3, [r0] + add sp, sp, #4 + ldrb r2, [r3, #0x1c] + add r2, r2, #1 + strb r2, [r3, #0x1c] + ldr r0, [r0] + strb r1, [r0, #0x1e] + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +_021E15FC: + ldr r0, [sb] + cmp r0, #0 + beq _021E1618 + bl FUN_021E1678 + add sp, sp, #4 + cmp r0, #0 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +_021E1618: + ldr r0, _021E1670 ; =0x022106D0 + ldr r1, [r0] + ldr r0, [r1] + cmp r0, #1 + beq _021E1648 + ldr r1, [r1, #0x18] + mov r0, #0xc + mla r0, r8, r0, r1 + bl FUN_02097484 + cmp r0, #0 + addne sp, sp, #4 + ldmneia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +_021E1648: + ldr r0, _021E1670 ; =0x022106D0 + mov r1, #1 + ldr r3, [r0] + ldrb r2, [r3, #0x1c] + add r2, r2, #1 + strb r2, [r3, #0x1c] + ldr r0, [r0] + strb r1, [r0, #0x1e] + add sp, sp, #4 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_021E1670: .word 0x022106D0 +_021E1674: .word 0x00000601 + + arm_func_start FUN_021E1678 +FUN_021E1678: ; 0x021E1678 + stmdb sp!, {r4, lr} + movs r4, r0 + moveq r0, #0 + ldmeqia sp!, {r4, pc} + cmp r4, #4 + addls pc, pc, r4, lsl #2 + b _021E16D4 +_021E1694: ; jump table + b _021E16D4 ; case 0 + b _021E16A8 ; case 1 + b _021E16B4 ; case 2 + b _021E16C0 ; case 3 + b _021E16CC ; case 4 +_021E16A8: + mov r0, #9 + mvn r2, #0 + b _021E16D4 +_021E16B4: + mov r0, #9 + mvn r2, #1 + b _021E16D4 +_021E16C0: + mov r0, #6 + mvn r2, #9 + b _021E16D4 +_021E16CC: + mov r0, #6 + mvn r2, #0x13 +_021E16D4: + ldr r1, _021E16E8 ; =0xFFFEEAA8 + add r1, r2, r1 + bl FUN_021E2114 + mov r0, r4 + ldmia sp!, {r4, pc} + .align 2, 0 +_021E16E8: .word 0xFFFEEAA8 + + arm_func_start FUN_021E16EC +FUN_021E16EC: ; 0x021E16EC + stmdb sp!, {r4, r5, lr} + sub sp, sp, #4 + ldr r2, _021E17B8 ; =0x022106D0 + mov r3, #0 + ldr r2, [r2] + mov r5, r0 + mov r4, r1 + str r3, [sp] + cmp r2, #0 + beq _021E1720 + bl FUN_021E05FC + cmp r0, #0 + bne _021E172C +_021E1720: + add sp, sp, #4 + mov r0, #0 + ldmia sp!, {r4, r5, pc} +_021E172C: + bl FUN_021E0F00 + mov r1, r5 + bl FUN_02096DA0 + mov r5, r0 + cmp r5, #0 + ble _021E176C + ldr r0, _021E17B8 ; =0x022106D0 + add r2, sp, #0 + ldr r0, [r0] + mov r1, r5 + ldr r0, [r0, #4] + bl FUN_021F0664 + cmp r0, #0 + addne sp, sp, #4 + movne r0, #0 + ldmneia sp!, {r4, r5, pc} +_021E176C: + cmp r5, #0 + ble _021E1784 + ldr r1, [sp] + mvn r0, #0 + cmp r1, r0 + bne _021E1790 +_021E1784: + add sp, sp, #4 + mov r0, #0 + ldmia sp!, {r4, r5, pc} +_021E1790: + ldr r0, _021E17B8 ; =0x022106D0 + mov r2, r4 + ldr r0, [r0] + ldr r0, [r0, #4] + bl FUN_021F06E4 + cmp r0, #0 + movne r0, #0 + moveq r0, #1 + add sp, sp, #4 + ldmia sp!, {r4, r5, pc} + .align 2, 0 +_021E17B8: .word 0x022106D0 + + arm_func_start FUN_021E17BC +FUN_021E17BC: ; 0x021E17BC + stmdb sp!, {r4, lr} + ldr r2, _021E17E8 ; =0x022106D0 + mov r1, r0 + ldr r0, [r2] + ldr r2, _021E17EC ; =0x0220D350 + ldr r0, [r0, #4] + bl FUN_021F09B0 + mov r4, r0 + bl FUN_021E1678 + mov r0, r4 + ldmia sp!, {r4, pc} + .align 2, 0 +_021E17E8: .word 0x022106D0 +_021E17EC: .word 0x0220D350 + + arm_func_start FUN_021E17F0 +FUN_021E17F0: ; 0x021E17F0 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0xc + mov sl, r1 + mov fp, r0 + mvn r0, #0 + str r2, [sp] + cmp sl, #0 + str r0, [sp, #4] + mov r8, #0 + ble _021E18F0 + mov r6, fp + mov r5, fp + mov r0, #1 + str r0, [sp, #8] +_021E1828: + mov r0, r8 + bl FUN_021E1F84 + movs sb, r0 + beq _021E18DC + ldr r0, [sp] + add r7, r8, #1 + cmp sb, r0 + streq r8, [sp, #4] + cmp r7, sl + bge _021E18DC + mov r0, #0xc + mla r4, r7, r0, fp +_021E1858: + mov r0, r7 + bl FUN_021E1F84 + cmp sb, r0 + bne _021E18CC + mov r0, r6 + bl FUN_02097484 + cmp r0, #2 + bne _021E1894 + mov r0, r4 + bl FUN_02097484 + cmp r0, #3 + bne _021E1894 + mov r0, r5 + mov r1, sb + bl FUN_02096C90 +_021E1894: + mov r0, r4 + bl FUN_02097490 + cmp r0, #0 + beq _021E18AC + mov r0, r5 + bl FUN_02097414 +_021E18AC: + mov r0, fp + mov r1, r7 + mov r2, r8 + bl FUN_021E19B8 + ldr r0, _021E18FC ; =0x022106D0 + ldr r1, [r0] + ldr r0, [sp, #8] + strb r0, [r1, #0x1d] +_021E18CC: + add r7, r7, #1 + cmp r7, sl + add r4, r4, #0xc + blt _021E1858 +_021E18DC: + add r8, r8, #1 + cmp r8, sl + add r6, r6, #0xc + add r5, r5, #0xc + blt _021E1828 +_021E18F0: + ldr r0, [sp, #4] + add sp, sp, #0xc + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_021E18FC: .word 0x022106D0 + + arm_func_start FUN_021E1900 +FUN_021E1900: ; 0x021E1900 + stmdb sp!, {r4, r5, r6, r7, lr} + sub sp, sp, #4 + mov r6, r1 + mov r7, r0 + mov r5, r2 + cmp r6, #0 + mov r4, #0 + ble _021E19A8 +_021E1920: + mov r0, r4 + bl FUN_021E1F84 + cmp r0, #0 + beq _021E199C + cmp r0, r5 + bne _021E199C + mov r0, #0xc + mla r0, r6, r0, r7 + bl FUN_02097490 + cmp r0, #0 + beq _021E1974 + mov r0, #0xc + mla r0, r4, r0, r7 + bl FUN_02097490 + cmp r0, #0 + bne _021E1974 + mov r0, r7 + mov r1, r4 + mov r2, r6 + bl FUN_021E19B8 + b _021E1984 +_021E1974: + mov r0, r7 + mov r1, r6 + mov r2, r4 + bl FUN_021E19B8 +_021E1984: + ldr r1, _021E19B4 ; =0x022106D0 + mov r0, #1 + ldr r1, [r1] + add sp, sp, #4 + strb r0, [r1, #0x1d] + ldmia sp!, {r4, r5, r6, r7, pc} +_021E199C: + add r4, r4, #1 + cmp r4, r6 + blt _021E1920 +_021E19A8: + mov r0, #0 + add sp, sp, #4 + ldmia sp!, {r4, r5, r6, r7, pc} + .align 2, 0 +_021E19B4: .word 0x022106D0 + + arm_func_start FUN_021E19B8 +FUN_021E19B8: ; 0x021E19B8 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #4 + ldr r3, _021E1A1C ; =0x022106D0 + mov r5, r1 + ldr r1, [r3] + mov r4, r2 + cmp r1, #0 + addeq sp, sp, #4 + ldmeqia sp!, {r4, r5, pc} + mov r2, #0xc + mla r0, r5, r2, r0 + mov r1, #0 + bl MI_CpuFill8 + ldr r0, _021E1A1C ; =0x022106D0 + ldr r0, [r0] + ldr r3, [r0, #0x3c] + cmp r3, #0 + addeq sp, sp, #4 + ldmeqia sp!, {r4, r5, pc} + ldr r2, [r0, #0x40] + mov r0, r5 + mov r1, r4 + blx r3 + add sp, sp, #4 + ldmia sp!, {r4, r5, pc} + .align 2, 0 +_021E1A1C: .word 0x022106D0 + + arm_func_start FUN_021E1A20 +FUN_021E1A20: ; 0x021E1A20 + stmdb sp!, {lr} + sub sp, sp, #4 + ldr r1, _021E1A5C ; =0x022106D0 + mov r0, #0 + ldr r3, [r1] + ldrb r1, [r3, #0x1d] + ldr r2, [r3, #0x30] + ldr r3, [r3, #0x2c] + blx r3 + ldr r0, _021E1A5C ; =0x022106D0 + mov r1, #2 + ldr r0, [r0] + str r1, [r0] + add sp, sp, #4 + ldmfd sp!, {pc} + .align 2, 0 +_021E1A5C: .word 0x022106D0 + + arm_func_start FUN_021E1A60 +FUN_021E1A60: ; 0x021E1A60 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x24c + ldr r2, _021E1CC4 ; =0x022106D0 + mov r6, r0 + ldr r2, [r2] + mov r5, r1 + ldrb r0, [r2, #0x1e] + cmp r0, #0 + bne _021E1B8C + ldr r0, [r2, #4] + add r1, sp, #0x18 + bl FUN_021F0828 + bl FUN_021E1678 + ldr r0, [sp, #0x18] + mov fp, #0 + str fp, [sp, #0x1c] + cmp r0, #0 + ble _021E1B7C + ldr r8, _021E1CC4 ; =0x022106D0 + mov sb, #1 + mov r7, #0xc +_021E1AB4: + ldr r0, [r8] + ldr r1, [sp, #0x1c] + ldr r0, [r0, #4] + add r2, sp, #0x38 + bl FUN_021F06E4 + bl FUN_021E1678 + mov r4, fp + cmp r5, #0 + ble _021E1B30 +_021E1AD8: + mov r0, r4 + bl FUN_021E1F84 + ldr r1, [sp, #0x38] + cmp r1, r0 + bne _021E1B24 + mul sl, r4, r7 + add r0, r6, sl + bl FUN_02097490 + cmp r0, #0 + bne _021E1B30 + add sl, r6, sl + ldr r1, [sp, #0x38] + mov r0, sl + bl FUN_02096C90 + mov r0, sl + bl FUN_02097414 + ldr r0, [r8] + strb sb, [r0, #0x1d] + b _021E1B30 +_021E1B24: + add r4, r4, #1 + cmp r4, r5 + blt _021E1AD8 +_021E1B30: + cmp r4, r5 + bne _021E1B64 + ldr r0, [r8] + ldr r1, [sp, #0x38] + ldr r0, [r0, #4] + bl FUN_021F0580 + bl FUN_021E1678 + ldr r1, [sp, #0x18] + ldr r0, [sp, #0x1c] + sub r1, r1, #1 + sub r0, r0, #1 + str r1, [sp, #0x18] + str r0, [sp, #0x1c] +_021E1B64: + ldr r1, [sp, #0x1c] + ldr r0, [sp, #0x18] + add r1, r1, #1 + str r1, [sp, #0x1c] + cmp r1, r0 + blt _021E1AB4 +_021E1B7C: + ldr r0, _021E1CC4 ; =0x022106D0 + mov r1, #1 + ldr r0, [r0] + strb r1, [r0, #0x1e] +_021E1B8C: + ldr sl, _021E1CC4 ; =0x022106D0 + ldr r0, [sl] + ldrb r0, [r0, #0x1c] + cmp r0, r5 + addge sp, sp, #0x24c + ldmgeia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + add r4, sp, #0x1c + mov r8, #0xc + mvn sb, #0 +_021E1BB0: + bl FUN_021E1F84 + movs r7, r0 + beq _021E1C08 + ldr r1, [sl] + mov r0, r6 + ldrb r1, [r1, #0x1c] + mov r2, r7 + bl FUN_021E1900 + cmp r0, #0 + bne _021E1C9C + ldr r0, [sl] + mov r1, r7 + ldr r0, [r0, #4] + mov r2, r4 + bl FUN_021F0664 + bl FUN_021E1678 + ldr r0, [sp, #0x1c] + cmp r0, sb + bne _021E1C9C + mov r0, r7 + bl FUN_021E17BC + b _021E1C9C +_021E1C08: + bl FUN_021E0F00 + ldr r1, [sl] + ldrb r2, [r1, #0x1c] + mla r1, r2, r8, r6 + bl FUN_02096DA0 + cmp r0, sb + bne _021E1C9C + bl FUN_021E0F00 + ldr r2, _021E1CC4 ; =0x022106D0 + mov r1, #0xc + ldr r3, [r2] + add r2, sp, #0x20 + ldrb r3, [r3, #0x1c] + mla r1, r3, r1, r6 + bl FUN_02096C78 + ldr r0, _021E1CC4 ; =0x022106D0 + mov r1, #0 + ldr r4, [r0] + add r2, sp, #0x20 + str r1, [sp] + str r2, [sp, #4] + str r1, [sp, #8] + ldr r0, _021E1CC8 ; =FUN_021E1414 + str r1, [sp, #0xc] + str r0, [sp, #0x10] + ldrb r0, [r4, #0x1c] + mov r2, r1 + mov r3, r1 + str r0, [sp, #0x14] + ldr r0, [r4, #4] + bl FUN_021F0C84 + ldr r0, _021E1CC4 ; =0x022106D0 + mov r1, #2 + ldr r0, [r0] + add sp, sp, #0x24c + strb r1, [r0, #0x1e] + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +_021E1C9C: + ldr r1, [sl] + ldrb r0, [r1, #0x1c] + add r0, r0, #1 + strb r0, [r1, #0x1c] + ldr r0, [sl] + ldrb r0, [r0, #0x1c] + cmp r0, r5 + blt _021E1BB0 + add sp, sp, #0x24c + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_021E1CC4: .word 0x022106D0 +_021E1CC8: .word FUN_021E1414 + + arm_func_start FUN_021E1CCC +FUN_021E1CCC: ; 0x021E1CCC + ldr r0, _021E1CF8 ; =0x022106D0 + ldr r1, [r0] + cmp r1, #0 + bxeq lr + mov r2, #0 + str r2, [r1] + ldr r1, [r0] + strb r2, [r1, #0x1e] + ldr r0, [r0] + strb r2, [r0, #0x1f] + bx lr + .align 2, 0 +_021E1CF8: .word 0x022106D0 + + arm_func_start FUN_021E1CFC +FUN_021E1CFC: ; 0x021E1CFC + stmdb sp!, {r4, r5, lr} + sub sp, sp, #4 + ldr r0, _021E1D88 ; =0x022106D0 + mov r5, #0 + ldr r4, [r0] + bl OS_GetTick + ldr r3, [r4, #0xc] + ldr r2, [r4, #0x10] + subs r3, r0, r3 + sbc r0, r1, r2 + mov r1, r0, lsl #6 + ldr r2, _021E1D8C ; =0x000082EA + orr r1, r1, r3, lsr #26 + mov r0, r3, lsl #6 + mov r3, r5 + bl _ll_udiv + cmp r1, #0 + cmpeq r0, #0x12c + blo _021E1D7C + ldr r1, [r4, #8] + ldr r0, _021E1D88 ; =0x022106D0 + add r1, r1, #1 + str r1, [r4, #8] + ldr r0, [r0] + ldr r0, [r0, #4] + bl FUN_021F0F18 + mov r5, r0 + bl OS_GetTick + ldr r2, _021E1D88 ; =0x022106D0 + ldr r2, [r2] + str r0, [r2, #0xc] + str r1, [r2, #0x10] +_021E1D7C: + mov r0, r5 + add sp, sp, #4 + ldmia sp!, {r4, r5, pc} + .align 2, 0 +_021E1D88: .word 0x022106D0 +_021E1D8C: .word 0x000082EA + + arm_func_start FUN_021E1D90 +FUN_021E1D90: ; 0x021E1D90 + ldr r0, _021E1DA0 ; =0x022106D0 + mov r1, #0 + str r1, [r0] + bx lr + .align 2, 0 +_021E1DA0: .word 0x022106D0 + + arm_func_start FUN_021E1DA4 +FUN_021E1DA4: ; 0x021E1DA4 + stmdb sp!, {r4, lr} + sub sp, sp, #0x210 + ldr r1, _021E1E2C ; =0x022106D0 + mov r4, r0 + ldr r3, [r1] + ldr r2, [r3, #0x44] + cmp r2, #0 + beq _021E1DD8 + ldr r1, [r3] + cmp r1, #1 + beq _021E1DD8 + ldr r1, [r3, #0x48] + blx r2 +_021E1DD8: + ldr r0, _021E1E2C ; =0x022106D0 + ldr r1, [r0] + ldr r0, [r1, #0x34] + cmp r0, #0 + addeq sp, sp, #0x210 + ldmeqia sp!, {r4, pc} + ldr r1, [r1, #0x18] + mov r0, #0xc + mla r0, r4, r0, r1 + add r1, sp, #0x108 + bl FUN_021E26B8 + ldr r2, _021E1E2C ; =0x022106D0 + mov r1, r0 + ldr r0, [r2] + add r2, sp, #0x108 + ldr r3, [r0, #0x38] + ldr ip, [r0, #0x34] + mov r0, r4 + blx ip + add sp, sp, #0x210 + ldmia sp!, {r4, pc} + .align 2, 0 +_021E1E2C: .word 0x022106D0 + + arm_func_start FUN_021E1E30 +FUN_021E1E30: ; 0x021E1E30 + stmdb sp!, {r4, r5, r6, lr} + ldr r3, _021E1ED0 ; =0x022106D0 + mov r6, r0 + ldr r0, [r3] + mov r5, r1 + mov r4, r2 + cmp r0, #0 + beq _021E1E5C + bl FUN_021E05FC + cmp r0, #0 + bne _021E1E64 +_021E1E5C: + mov r0, #0 + ldmia sp!, {r4, r5, r6, pc} +_021E1E64: + mvn r0, #0 + cmp r6, r0 + ldreq r0, _021E1ED0 ; =0x022106D0 + ldreq r0, [r0] + ldreq r0, [r0, #4] + ldreq r0, [r0] + ldreq r6, [r0, #0x214] + cmp r5, #0 + ldreq r0, _021E1ED0 ; =0x022106D0 + mov r1, r6 + ldreq r0, [r0] + ldreq r0, [r0, #4] + ldreq r0, [r0] + addeq r5, r0, #0x218 + cmp r4, #0 + ldreq r0, _021E1ED0 ; =0x022106D0 + mov r2, r5 + ldreq r0, [r0] + ldreq r0, [r0, #4] + ldreq r0, [r0] + addeq r4, r0, #0x318 + ldr r0, _021E1ED0 ; =0x022106D0 + mov r3, r4 + ldr r0, [r0] + ldr r0, [r0, #4] + bl FUN_021F034C + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +_021E1ED0: .word 0x022106D0 + + arm_func_start FUN_021E1ED4 +FUN_021E1ED4: ; 0x021E1ED4 + stmdb sp!, {lr} + sub sp, sp, #4 + ldr r0, _021E1F14 ; =0x022106D0 + ldr r1, [r0] + cmp r1, #0 + addeq sp, sp, #4 + ldmeqia sp!, {pc} + mov r0, #0 + str r0, [r1, #8] + bl OS_GetTick + ldr r2, _021E1F14 ; =0x022106D0 + ldr r2, [r2] + str r0, [r2, #0xc] + str r1, [r2, #0x10] + add sp, sp, #4 + ldmfd sp!, {pc} + .align 2, 0 +_021E1F14: .word 0x022106D0 + + arm_func_start FUN_021E1F18 +FUN_021E1F18: ; 0x021E1F18 + stmdb sp!, {r4, r5, r6, lr} + ldr r4, _021E1F80 ; =0x022106D0 + mov r6, r0 + ldr r0, [r4] + cmp r0, #0 + beq _021E1F38 + cmp r6, #0 + bne _021E1F40 +_021E1F38: + mvn r0, #0 + ldmia sp!, {r4, r5, r6, pc} +_021E1F40: + ldr r0, [r0, #0x14] + mov r5, #0 + cmp r0, #0 + ble _021E1F78 +_021E1F50: + mov r0, r5 + bl FUN_021E1F84 + cmp r6, r0 + moveq r0, r5 + ldmeqia sp!, {r4, r5, r6, pc} + ldr r0, [r4] + add r5, r5, #1 + ldr r0, [r0, #0x14] + cmp r5, r0 + blt _021E1F50 +_021E1F78: + mvn r0, #0 + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +_021E1F80: .word 0x022106D0 + + arm_func_start FUN_021E1F84 +FUN_021E1F84: ; 0x021E1F84 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #4 + ldr r1, _021E1FE0 ; =0x022106D0 + mov r5, r0 + ldr r0, [r1] + ldr r4, [r0, #0x18] + cmp r4, #0 + addeq sp, sp, #4 + moveq r0, #0 + ldmeqia sp!, {r4, r5, pc} + bl FUN_021E0F00 + mov r1, #0xc + mla r1, r5, r1, r4 + bl FUN_02096DA0 + cmp r0, #0 + beq _021E1FD4 + mvn r1, #0 + cmp r0, r1 + addne sp, sp, #4 + ldmneia sp!, {r4, r5, pc} +_021E1FD4: + mov r0, #0 + add sp, sp, #4 + ldmia sp!, {r4, r5, pc} + .align 2, 0 +_021E1FE0: .word 0x022106D0 + + arm_func_start FUN_021E1FE4 +FUN_021E1FE4: ; 0x021E1FE4 + stmdb sp!, {r4, r5, r6, lr} + sub sp, sp, #0x210 + ldr r2, _021E2064 ; =0x022106D0 + mov r6, r0 + ldr r0, [r2] + mov r5, r1 + ldr r0, [r0, #0x34] + cmp r0, #0 + addeq sp, sp, #0x210 + ldmeqia sp!, {r4, r5, r6, pc} + ldr r0, [r5] + bl FUN_021E1F18 + mov r4, r0 + mvn r0, #0 + cmp r4, r0 + addeq sp, sp, #0x210 + ldmeqia sp!, {r4, r5, r6, pc} + ldr r1, [r5, #8] + add r2, sp, #0 + mov r0, r6 + bl FUN_021F06E4 + ldr r0, _021E2064 ; =0x022106D0 + ldr r1, [sp, #4] + ldr r0, [r0] + add r2, sp, #0x108 + ldr r3, [r0, #0x38] + ldr ip, [r0, #0x34] + mov r0, r4 + and r1, r1, #0xff + blx ip + add sp, sp, #0x210 + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +_021E2064: .word 0x022106D0 + + arm_func_start FUN_021E2068 +FUN_021E2068: ; 0x021E2068 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #0xc + mov r4, r1 + mov r5, r0 + ldr r0, [r4, #8] + ldr r1, _021E20C0 ; =0x0220D354 + bl strcmp + cmp r0, #0 + addne sp, sp, #0xc + movne r0, #0 + ldmneia sp!, {r4, r5, pc} + ldr r0, _021E20C4 ; =FUN_021E110C + mov r2, #0 + str r0, [sp] + str r2, [sp, #4] + ldr r1, [r4] + mov r0, r5 + mov r3, r2 + bl FUN_021F0B9C + mov r0, #1 + add sp, sp, #0xc + ldmia sp!, {r4, r5, pc} + .align 2, 0 +_021E20C0: .word 0x0220D354 +_021E20C4: .word FUN_021E110C + + arm_func_start FUN_021E20C8 +FUN_021E20C8: ; 0x021E20C8 + stmdb sp!, {lr} + sub sp, sp, #0xc + ldr r2, _021E210C ; =0x022106D0 + ldr r2, [r2] + ldr r2, [r2, #0x18] + cmp r2, #0 + addeq sp, sp, #0xc + ldmeqia sp!, {pc} + ldr r3, _021E2110 ; =FUN_021E12B8 + mov r2, #0 + str r3, [sp] + str r2, [sp, #4] + ldr r1, [r1] + mov r3, r2 + bl FUN_021F0B9C + add sp, sp, #0xc + ldmfd sp!, {pc} + .align 2, 0 +_021E210C: .word 0x022106D0 +_021E2110: .word FUN_021E12B8 + + arm_func_start FUN_021E2114 +FUN_021E2114: ; 0x021E2114 + stmdb sp!, {r4, lr} + ldr r2, _021E2170 ; =0x022106D0 + mov r4, r0 + ldr r2, [r2] + cmp r2, #0 + ldmeqia sp!, {r4, pc} + cmp r4, #0 + ldmeqia sp!, {r4, pc} + bl FUN_021DD6B0 + ldr r0, _021E2170 ; =0x022106D0 + ldr r3, [r0] + ldr r0, [r3] + cmp r0, #0 + beq _021E2168 + cmp r0, #2 + beq _021E2168 + ldrb r1, [r3, #0x1d] + ldr r2, [r3, #0x30] + ldr r3, [r3, #0x2c] + mov r0, r4 + blx r3 +_021E2168: + bl FUN_021E1CCC + ldmia sp!, {r4, pc} + .align 2, 0 +_021E2170: .word 0x022106D0 + + arm_func_start FUN_021E2174 +FUN_021E2174: ; 0x021E2174 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #4 + ldr r0, _021E2224 ; =0x022106D0 + ldr r5, [sp, #0x10] + ldr r1, [r0] + ldr r4, [sp, #0x14] + str r2, [r1, #0x2c] + ldr r1, [r0] + ldr lr, [sp, #0x18] + str r3, [r1, #0x30] + ldr r1, [r0] + ldr ip, [sp, #0x1c] + str r5, [r1, #0x34] + ldr r1, [r0] + mov r3, #0 + str r4, [r1, #0x38] + ldr r1, [r0] + mov r2, #1 + str lr, [r1, #0x3c] + ldr r1, [r0] + str ip, [r1, #0x40] + ldr r1, [r0] + strb r3, [r1, #0x1d] + ldr r1, [r0] + strb r3, [r1, #0x1e] + ldr r1, [r0] + strb r3, [r1, #0x1f] + ldr r1, [r0] + strb r3, [r1, #0x1c] + ldr r1, [r0] + str r2, [r1] + ldr r1, [r0] + ldr r0, [r1, #0x18] + cmp r0, #0 + ldreqb r0, [r1, #0x1f] + addeq r0, r0, #1 + streqb r0, [r1, #0x1f] + ldr r0, _021E2224 ; =0x022106D0 + ldr r1, [r0] + ldrb r0, [r1, #0x1f] + add r0, r0, #1 + strb r0, [r1, #0x1f] + add sp, sp, #4 + ldmia sp!, {r4, r5, pc} + .align 2, 0 +_021E2224: .word 0x022106D0 + + arm_func_start FUN_021E2228 +FUN_021E2228: ; 0x021E2228 + stmdb sp!, {lr} + sub sp, sp, #4 + ldr r0, _021E2348 ; =0x022106D0 + ldr r0, [r0] + cmp r0, #0 + addeq sp, sp, #4 + ldmeqia sp!, {pc} + ldr r0, [r0, #0x18] + cmp r0, #0 + addeq sp, sp, #4 + ldmeqia sp!, {pc} + bl FUN_021DD6D4 + cmp r0, #0 + addne sp, sp, #4 + ldmneia sp!, {pc} + bl FUN_021E10F8 + cmp r0, #0 + bne _021E227C + bl FUN_021FBE5C + cmp r0, #0 + beq _021E2280 +_021E227C: + bl FUN_021FBD00 +_021E2280: + ldr r0, _021E2348 ; =0x022106D0 + ldr r0, [r0] + ldr r0, [r0, #4] + cmp r0, #0 + beq _021E231C + ldr r0, [r0] + cmp r0, #0 + beq _021E231C + bl FUN_021E1CFC + cmp r0, #0 + addne sp, sp, #4 + ldmneia sp!, {pc} + ldr r0, _021E2348 ; =0x022106D0 + ldr r3, [r0] + ldr r0, [r3, #0x18] + cmp r0, #0 + beq _021E231C + ldrb r2, [r3, #0x1e] + cmp r2, #3 + beq _021E231C + ldr r1, [r3, #8] + cmp r1, #7 + bls _021E231C + cmp r2, #1 + bhi _021E22EC + ldr r1, [r3, #0x14] + bl FUN_021E1A60 +_021E22EC: + ldr r0, _021E2348 ; =0x022106D0 + ldr r3, [r0] + ldrb r2, [r3, #0x1c] + ldr r1, [r3, #0x14] + cmp r2, r1 + blt _021E231C + mov r1, #3 + strb r1, [r3, #0x1e] + ldr r1, [r0] + ldrb r0, [r1, #0x1f] + add r0, r0, #1 + strb r0, [r1, #0x1f] +_021E231C: + ldr r0, _021E2348 ; =0x022106D0 + ldr r1, [r0] + ldrb r0, [r1, #0x1f] + cmp r0, #2 + addlo sp, sp, #4 + ldmloia sp!, {pc} + mov r0, #0 + strb r0, [r1, #0x1f] + bl FUN_021E1A20 + add sp, sp, #4 + ldmfd sp!, {pc} + .align 2, 0 +_021E2348: .word 0x022106D0 + + arm_func_start FUN_021E234C +FUN_021E234C: ; 0x021E234C + stmdb sp!, {r4, lr} + ldr lr, _021E2428 ; =0x022106D0 + mov ip, #0 + str r0, [lr] + str ip, [r0] + ldr r4, [lr] + ldr r0, [sp, #8] + str r1, [r4, #4] + ldr r1, [lr] + str ip, [r1, #8] + ldr r1, [lr] + str ip, [r1, #0xc] + str ip, [r1, #0x10] + str r0, [r1, #0x14] + ldr r0, [lr] + str r3, [r0, #0x18] + ldr r0, [lr] + strb ip, [r0, #0x1c] + ldr r0, [lr] + strb ip, [r0, #0x1d] + ldr r0, [lr] + strb ip, [r0, #0x1e] + ldr r0, [lr] + strb ip, [r0, #0x1f] + ldr r0, [lr] + str ip, [r0, #0x20] + ldr r0, [lr] + str ip, [r0, #0x24] + ldr r0, [lr] + str r2, [r0, #0x28] + ldr r0, [lr] + str ip, [r0, #0x2c] + ldr r0, [lr] + str ip, [r0, #0x30] + ldr r0, [lr] + str ip, [r0, #0x34] + ldr r0, [lr] + str ip, [r0, #0x38] + ldr r0, [lr] + str ip, [r0, #0x3c] + ldr r0, [lr] + str ip, [r0, #0x40] + ldr r0, [lr] + str ip, [r0, #0x44] + ldr r0, [lr] + str ip, [r0, #0x48] + ldr r0, [lr] + str ip, [r0, #0x4c] + ldr r0, [lr] + str ip, [r0, #0x50] + ldr r0, [lr] + str ip, [r0, #0x54] + ldr r0, [lr] + str ip, [r0, #0x58] + ldmia sp!, {r4, pc} + .align 2, 0 +_021E2428: .word 0x022106D0 + + arm_func_start FUN_021E242C +FUN_021E242C: ; 0x021E242C + ldr r2, _021E2450 ; =0x022106D0 + ldr r3, [r2] + cmp r3, #0 + moveq r0, #0 + strne r0, [r3, #0x44] + ldrne r2, [r2] + movne r0, #1 + strne r1, [r2, #0x48] + bx lr + .align 2, 0 +_021E2450: .word 0x022106D0 + + arm_func_start FUN_021E2454 +FUN_021E2454: ; 0x021E2454 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #0x104 + ldr r2, _021E24DC ; =0x022106D0 + mov r5, r0 + ldr r0, [r2] + mov r4, r1 + cmp r0, #0 + beq _021E2480 + bl FUN_021E05FC + cmp r0, #0 + bne _021E248C +_021E2480: + add sp, sp, #0x104 + mov r0, #0 + ldmia sp!, {r4, r5, pc} +_021E248C: + add r2, sp, #0 + mov r0, r5 + mov r1, r4 + mov r3, #0xff + bl FUN_021DD4FC + mvn r3, #0 + cmp r0, r3 + addeq sp, sp, #0x104 + moveq r0, #0 + ldmeqia sp!, {r4, r5, pc} + add r2, sp, #0 + mov r1, #0 + strb r1, [r2, r0] + mov r0, r3 + bl FUN_021E1E30 + cmp r0, #0 + moveq r0, #1 + movne r0, #0 + add sp, sp, #0x104 + ldmia sp!, {r4, r5, pc} + .align 2, 0 +_021E24DC: .word 0x022106D0 + + arm_func_start FUN_021E24E0 +FUN_021E24E0: ; 0x021E24E0 + stmdb sp!, {r4, r5, r6, lr} + sub sp, sp, #0x100 + mov r6, r3 + add r3, sp, #0 + ldr r4, [sp, #0x110] + bl FUN_021E259C + movs r5, r0 + mvneq r1, #0 + addeq sp, sp, #0x100 + streq r1, [r4] + ldmeqia sp!, {r4, r5, r6, pc} + add r0, sp, #0 + bl strlen + mov r2, #0 + mov r1, r0 + add r0, sp, #0 + mov r3, r2 + bl FUN_021DD36C + str r0, [r4] + cmp r6, #0 + beq _021E2544 + ldr r4, [r4] + mvn r0, #0 + cmp r4, r0 + bne _021E2550 +_021E2544: + add sp, sp, #0x100 + mov r0, r5 + ldmia sp!, {r4, r5, r6, pc} +_021E2550: + add r0, sp, #0 + bl strlen + mov r1, r0 + add r0, sp, #0 + mov r2, r6 + mov r3, r4 + bl FUN_021DD36C + mov r0, r5 + add sp, sp, #0x100 + ldmia sp!, {r4, r5, r6, pc} + + arm_func_start FUN_021E2578 +FUN_021E2578: ; 0x021E2578 + stmdb sp!, {lr} + sub sp, sp, #4 + mov r3, r1 + mov r1, #0 + str r2, [sp] + mov r2, r1 + bl FUN_021E24E0 + add sp, sp, #4 + ldmfd sp!, {pc} + + arm_func_start FUN_021E259C +FUN_021E259C: ; 0x021E259C + stmdb sp!, {r4, r5, r6, lr} + sub sp, sp, #0x218 + mov r6, r1 + add r1, sp, #4 + mov r4, r2 + mov r5, r3 + bl FUN_021E16EC + cmp r0, #0 + beq _021E268C + ldr r0, [sp, #8] + cmp r0, #6 + bne _021E2650 + cmp r6, #0 + beq _021E260C + ldr r0, _021E26B0 ; =0x0220D38C + add r1, sp, #0 + add r2, sp, #0xc + mov r3, #0x2f + bl FUN_021DE9F4 + cmp r0, #0 + movle r0, #0 + strleb r0, [r6] + ble _021E260C + add r0, sp, #0 + mov r1, #0 + mov r2, #0xa + bl strtoul + strb r0, [r6] +_021E260C: + cmp r4, #0 + beq _021E2668 + ldr r0, _021E26B4 ; =0x0220D390 + add r1, sp, #0 + add r2, sp, #0xc + mov r3, #0x2f + bl FUN_021DE9F4 + cmp r0, #0 + movle r0, #0 + strleb r0, [r4] + ble _021E2668 + add r0, sp, #0 + mov r1, #0 + mov r2, #0xa + bl strtoul + strb r0, [r4] + b _021E2668 +_021E2650: + cmp r6, #0 + movne r0, #0 + strneb r0, [r6] + cmp r4, #0 + movne r0, #0 + strneb r0, [r4] +_021E2668: + cmp r5, #0 + beq _021E267C + add r1, sp, #0x10c + mov r0, r5 + bl strcpy +_021E267C: + ldr r0, [sp, #8] + add sp, sp, #0x218 + and r0, r0, #0xff + ldmia sp!, {r4, r5, r6, pc} +_021E268C: + cmp r6, #0 + movne r0, #0 + strneb r0, [r6] + cmp r4, #0 + movne r0, #0 + strneb r0, [r4] + mov r0, #0 + add sp, sp, #0x218 + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +_021E26B0: .word 0x0220D38C +_021E26B4: .word 0x0220D390 + + arm_func_start FUN_021E26B8 +FUN_021E26B8: ; 0x021E26B8 + ldr ip, _021E26CC ; =FUN_021E259C + mov r3, r1 + mov r1, #0 + mov r2, r1 + bx ip + .align 2, 0 +_021E26CC: .word FUN_021E259C + + arm_func_start FUN_021E26D0 +FUN_021E26D0: ; 0x021E26D0 + ldr r1, _021E26E0 ; =0x022106D8 + ldr r1, [r1] + str r0, [r1, #0x1a0] + bx lr + .align 2, 0 +_021E26E0: .word 0x022106D8 + + arm_func_start FUN_021E26E4 +FUN_021E26E4: ; 0x021E26E4 + ldr r0, _021E26F0 ; =0x022106D8 + ldr r0, [r0] + bx lr + .align 2, 0 +_021E26F0: .word 0x022106D8 + + arm_func_start FUN_021E26F4 +FUN_021E26F4: ; 0x021E26F4 + ldr r1, _021E2700 ; =0x022106D8 + str r0, [r1] + bx lr + .align 2, 0 +_021E2700: .word 0x022106D8 + + arm_func_start FUN_021E2704 +FUN_021E2704: ; 0x021E2704 + stmdb sp!, {lr} + sub sp, sp, #4 + cmp r0, #0 + addne sp, sp, #4 + movne r0, #1 + ldmneia sp!, {pc} + bl FUN_021E26E4 + ldrb r0, [r0, #0x15] + cmp r0, #3 + beq _021E273C + bl FUN_021E26E4 + ldrb r1, [r0, #0x17d] + add r1, r1, #1 + strb r1, [r0, #0x17d] +_021E273C: + bl FUN_021E26E4 + ldrb r0, [r0, #0x15] + cmp r0, #3 + beq _021E275C + bl FUN_021E26E4 + ldrb r0, [r0, #0x17d] + cmp r0, #5 + blo _021E2774 +_021E275C: + ldr r1, _021E2780 ; =0xFFFEAE6C + mov r0, #6 + bl FUN_021E8E08 + add sp, sp, #4 + mov r0, #0 + ldmfd sp!, {pc} +_021E2774: + mov r0, #1 + add sp, sp, #4 + ldmfd sp!, {pc} + .align 2, 0 +_021E2780: .word 0xFFFEAE6C + + arm_func_start FUN_021E2784 +FUN_021E2784: ; 0x021E2784 + stmdb sp!, {r4, r5, r6, lr} + sub sp, sp, #0x20 + mov r5, r0 + mov r6, r2 + mov r4, r3 + bl FUN_021E26E4 + ldr r0, [r0, #0x1a0] + cmp r0, #6 + beq _021E27BC + bl FUN_021E26E4 + ldr r0, [r0, #0x1a0] + cmp r0, #0xb + addne sp, sp, #0x20 + ldmneia sp!, {r4, r5, r6, pc} +_021E27BC: + cmp r4, #0 + addeq sp, sp, #0x20 + ldmeqia sp!, {r4, r5, r6, pc} + cmp r5, #0 + bne _021E29B8 + mov r0, #0 + str r0, [r4, #8] + bl FUN_021E26E4 + ldrb r1, [r0, #0x14] + add r1, r1, #1 + strb r1, [r0, #0x14] + bl FUN_021E26E4 + ldrb r1, [r4] + ldrb r5, [r0, #0x14] + cmp r1, #0 + beq _021E2950 + bl FUN_021E26E4 + ldr r1, [r6, #4] + add r0, r0, r5, lsl #2 + str r1, [r0, #0x210] + ldrh r4, [r6, #2] + bl FUN_021E26E4 + mov r2, r4, asr #8 + mov r1, r4, lsl #8 + add r0, r0, r5, lsl #1 + and r2, r2, #0xff + and r1, r1, #0xff00 + orr r1, r2, r1 + add r0, r0, #0x200 + strh r1, [r0, #0x90] + bl FUN_021E26E4 + mov r1, #0 + strb r1, [r0, #0x17c] + bl FUN_021E26E4 + mov r1, #0 + str r1, [r0, #0x180] + bl FUN_021E26E4 + mov r1, #0 + str r1, [r0, #0x184] + str r1, [r0, #0x188] + bl FUN_021E26E4 + ldr r0, [r0, #0x1a0] + cmp r0, #0xb + bne _021E2878 + mov r0, #0xc + bl FUN_021E26D0 + b _021E2880 +_021E2878: + mov r0, #7 + bl FUN_021E26D0 +_021E2880: + bl FUN_021E26E4 + mov r1, #0 + strb r1, [r0, #0xc] + bl FUN_021E26E4 + ldr r3, [r0, #0x200] + ldr r2, _021E2B58 ; =0x0220D394 + add r0, sp, #0x10 + mov r1, #0xc + bl OS_SNPrintf + bl FUN_021E26E4 + mov r4, r0 + bl FUN_021E26E4 + mov r6, r0 + bl FUN_021E26E4 + add r1, r6, r5, lsl #2 + mov r2, r0 + ldr r0, [r1, #0x210] + add r1, r2, r5, lsl #1 + add r1, r1, #0x200 + ldrh r1, [r1, #0x90] + mov r2, #0 + bl FUN_021FFEB0 + mov r6, r0 + bl FUN_021E26E4 + mvn r1, #0 + str r1, [sp] + ldr r3, _021E2B5C ; =0x00001388 + mov r1, #0 + str r3, [sp, #4] + ldr r0, [r0, #8] + mov r2, r6 + str r0, [sp, #8] + str r1, [sp, #0xc] + ldr r0, [r4, #4] + add r3, sp, #0x10 + ldr r0, [r0] + bl FUN_021FD52C + cmp r0, #1 + bne _021E2928 + bl FUN_021E36B0 + add sp, sp, #0x20 + ldmia sp!, {r4, r5, r6, pc} +_021E2928: + cmp r0, #0 + addeq sp, sp, #0x20 + ldmeqia sp!, {r4, r5, r6, pc} + bl FUN_021E26E4 + add r0, r0, r5, lsl #2 + ldr r0, [r0, #0xf4] + bl FUN_021E59D4 + add sp, sp, #0x20 + cmp r0, #0 + ldmia sp!, {r4, r5, r6, pc} +_021E2950: + cmp r6, #0 + beq _021E2994 + sub r4, r5, #1 + bl FUN_021E26E4 + ldr r1, [r6, #4] + add r0, r0, r4, lsl #2 + str r1, [r0, #0x210] + ldrh r5, [r6, #2] + bl FUN_021E26E4 + mov r2, r5, asr #8 + mov r1, r5, lsl #8 + add r0, r0, r4, lsl #1 + and r2, r2, #0xff + and r1, r1, #0xff00 + orr r1, r2, r1 + add r0, r0, #0x200 + strh r1, [r0, #0x90] +_021E2994: + bl FUN_021E26E4 + mov r4, r0 + bl OS_GetTick + str r0, [r4, #0x18c] + mov r0, #7 + str r1, [r4, #0x190] + bl FUN_021E26D0 + add sp, sp, #0x20 + ldmia sp!, {r4, r5, r6, pc} +_021E29B8: + ldr r0, [r4, #8] + cmp r0, #0 + addeq sp, sp, #0x20 + ldmeqia sp!, {r4, r5, r6, pc} + mov r0, r5 + bl FUN_021E3754 + mov r6, r0 + cmp r6, #2 + beq _021E29E8 + cmp r6, #1 + addne sp, sp, #0x20 + ldmneia sp!, {r4, r5, r6, pc} +_021E29E8: + ldrb r0, [r4] + cmp r0, #0 + bne _021E2A74 + cmp r6, #1 + beq _021E2A10 + cmp r6, #2 + bne _021E2A50 + ldrb r0, [r4, #1] + cmp r0, #1 + blo _021E2A50 +_021E2A10: + mov r0, #0 + str r0, [r4, #8] + bl FUN_021E2704 + cmp r0, #0 + addeq sp, sp, #0x20 + ldmeqia sp!, {r4, r5, r6, pc} + bl FUN_021E26E4 + mov r4, r0 + bl FUN_021E26E4 + ldrb r0, [r0, #0xd] + add r0, r4, r0, lsl #2 + ldr r0, [r0, #0xf4] + bl FUN_021E5908 + add sp, sp, #0x20 + cmp r0, #0 + ldmia sp!, {r4, r5, r6, pc} +_021E2A50: + ldrb r1, [r4, #1] + mov r0, r4 + add r1, r1, #1 + strb r1, [r4, #1] + bl FUN_021E7A44 + bl FUN_021E37A4 + add sp, sp, #0x20 + cmp r0, #0 + ldmia sp!, {r4, r5, r6, pc} +_021E2A74: + bl FUN_021E26E4 + mov r5, r0 + bl OS_GetTick + str r0, [r5, #0x184] + str r1, [r5, #0x188] + cmp r6, #1 + beq _021E2AB0 + cmp r6, #2 + addne sp, sp, #0x20 + ldmneia sp!, {r4, r5, r6, pc} + bl FUN_021E26E4 + ldrb r0, [r0, #0x17c] + cmp r0, #1 + addlo sp, sp, #0x20 + ldmloia sp!, {r4, r5, r6, pc} +_021E2AB0: + mov r0, #0 + str r0, [r4, #8] + bl FUN_021E26E4 + ldrb r0, [r0, #0x15] + cmp r0, #3 + beq _021E2AD8 + bl FUN_021E26E4 + ldrb r0, [r0, #0x15] + cmp r0, #2 + bne _021E2AF0 +_021E2AD8: + mov r0, #1 + bl FUN_021E2704 + cmp r0, #0 + bne _021E2B04 + add sp, sp, #0x20 + ldmia sp!, {r4, r5, r6, pc} +_021E2AF0: + mov r0, #0 + bl FUN_021E2704 + cmp r0, #0 + addeq sp, sp, #0x20 + ldmeqia sp!, {r4, r5, r6, pc} +_021E2B04: + bl FUN_021E26E4 + mov r1, #0 + strb r1, [r0, #0x17c] + bl FUN_021E26E4 + mov r1, #0 + str r1, [r0, #0x180] + bl FUN_021E26E4 + mov r1, #0 + str r1, [r0, #0x184] + str r1, [r0, #0x188] + bl FUN_021E26E4 + mov r4, r0 + bl FUN_021E26E4 + ldrb r0, [r0, #0xd] + add r0, r0, #1 + add r0, r4, r0, lsl #2 + ldr r0, [r0, #0xf4] + bl FUN_021E59D4 + cmp r0, #0 + add sp, sp, #0x20 + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +_021E2B58: .word 0x0220D394 +_021E2B5C: .word 0x00001388 + + arm_func_start FUN_021E2B60 +FUN_021E2B60: ; 0x021E2B60 + bx lr + + arm_func_start FUN_021E2B64 +FUN_021E2B64: ; 0x021E2B64 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x9c + mov sl, r0 + mov sb, r1 + mov r8, #0 + bl FUN_021DF88C + cmp r0, #5 + beq _021E2BB8 + bl FUN_021DF88C + cmp r0, #6 + addne sp, sp, #0x9c + ldmneia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + bl FUN_021E26E4 + ldrb r0, [r0, #0x15] + cmp r0, #2 + beq _021E2BB8 + bl FUN_021E26E4 + ldrb r0, [r0, #0x15] + cmp r0, #3 + addne sp, sp, #0x9c + ldmneia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +_021E2BB8: + cmp sb, #0x14 + addlo sp, sp, #0x9c + ldmloia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + add r4, sp, #0x1c + add fp, sp, #8 + add r5, sl, #0x14 + mov r7, #0x14 + mov r6, #4 +_021E2BD8: + mov r0, sl + mov r1, fp + mov r2, r7 + bl MI_CpuCopy8 + ldr r1, _021E2C74 ; =0x0220D398 + mov r0, fp + mov r2, r6 + bl strncmp + cmp r0, #0 + addne sp, sp, #0x9c + ldmneia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + ldr r0, [sp, #0xc] + cmp r0, #3 + addne sp, sp, #0x9c + ldmneia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + ldrb r2, [sp, #0x11] + mov r0, r5 + mov r1, r4 + bl MI_CpuCopy8 + str r4, [sp] + ldrb r0, [sp, #0x11] + mov r0, r0, asr #2 + str r0, [sp, #4] + ldrb r0, [sp, #0x10] + ldrh r3, [sp, #0x12] + ldr r1, [sp, #0x18] + ldr r2, [sp, #0x14] + bl FUN_021E6730 + cmp r0, #0 + addeq sp, sp, #0x9c + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + ldrb r0, [sp, #0x11] + add r0, r0, #0x14 + add r8, r8, r0 + add r0, r8, #0x14 + cmp r0, sb + bls _021E2BD8 + add sp, sp, #0x9c + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_021E2C74: .word 0x0220D398 + + arm_func_start FUN_021E2C78 +FUN_021E2C78: ; 0x021E2C78 + stmdb sp!, {r4, lr} + mov r4, r0 + bl FUN_021E26E4 + ldr r0, [r0, #0x1a0] + cmp r0, #1 + bne _021E2C9C + mov r0, #6 + bl FUN_021E26D0 + b _021E2CBC +_021E2C9C: + bl FUN_021E26E4 + ldr r0, [r0, #0x1a0] + cmp r0, #6 + beq _021E2CBC + bl FUN_021E26E4 + ldr r0, [r0, #0x1a0] + cmp r0, #0xb + ldmneia sp!, {r4, pc} +_021E2CBC: + bl FUN_021E26E4 + ldr r0, [r0, #0x180] + cmp r4, r0 + bne _021E2CE0 + bl FUN_021E26E4 + ldrb r1, [r0, #0x17c] + add r1, r1, #1 + strb r1, [r0, #0x17c] + b _021E2CF4 +_021E2CE0: + bl FUN_021E26E4 + mov r1, #0 + strb r1, [r0, #0x17c] + bl FUN_021E26E4 + str r4, [r0, #0x180] +_021E2CF4: + bl FUN_021E26E4 + mov r2, #0 + str r2, [r0, #0x184] + str r2, [r0, #0x188] + mov r1, r4 + mov r0, #1 + bl FUN_021E7B04 + bl FUN_021E37A4 + cmp r0, #0 + ldmneia sp!, {r4, pc} + bl FUN_021E26E4 + mov r1, #0xff + strb r1, [r0, #0x3cc] + ldmia sp!, {r4, pc} + + arm_func_start FUN_021E2D2C +FUN_021E2D2C: ; 0x021E2D2C + stmdb sp!, {r4, r5, lr} + sub sp, sp, #4 + mov r5, r0 + mov r4, r1 + bl FUN_021E26E4 + str r5, [r0, #0x1c] + bl FUN_021E26E4 + strh r4, [r0, #0x1a] + add sp, sp, #4 + ldmia sp!, {r4, r5, pc} + + arm_func_start FUN_021E2D54 +FUN_021E2D54: ; 0x021E2D54 + ldr ip, _021E2D5C ; =FUN_021E3800 + bx ip + .align 2, 0 +_021E2D5C: .word FUN_021E3800 + + arm_func_start FUN_021E2D60 +FUN_021E2D60: ; 0x021E2D60 + mov r0, #0 + bx lr + + arm_func_start FUN_021E2D68 +FUN_021E2D68: ; 0x021E2D68 + stmdb sp!, {r4, r5, r6, lr} + mov r6, r1 + cmp r0, #0 + beq _021E2D88 + cmp r0, #1 + ldmeqia sp!, {r4, r5, r6, pc} + cmp r0, #2 + ldmia sp!, {r4, r5, r6, pc} +_021E2D88: + mov r0, r6 + mov r1, #8 + bl FUN_02202254 + mov r0, r6 + mov r1, #0xa + bl FUN_02202254 + mov r0, r6 + mov r1, #0x32 + bl FUN_02202254 + mov r0, r6 + mov r1, #0x33 + bl FUN_02202254 + mov r0, r6 + mov r1, #0x34 + bl FUN_02202254 + mov r0, r6 + mov r1, #0x35 + bl FUN_02202254 + mov r0, r6 + mov r1, #0x36 + bl FUN_02202254 + ldr r4, _021E2E0C ; =0x02210704 + mov r5, #0 +_021E2DE4: + ldrb r1, [r4] + cmp r1, #0 + beq _021E2DF8 + mov r0, r6 + bl FUN_02202254 +_021E2DF8: + add r5, r5, #1 + cmp r5, #0x9a + add r4, r4, #0xc + blt _021E2DE4 + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +_021E2E0C: .word 0x02210704 + + arm_func_start FUN_021E2E10 +FUN_021E2E10: ; 0x021E2E10 + bx lr + + arm_func_start FUN_021E2E14 +FUN_021E2E14: ; 0x021E2E14 + bx lr + + arm_func_start FUN_021E2E18 +FUN_021E2E18: ; 0x021E2E18 + stmdb sp!, {r4, lr} + mov r4, r1 + cmp r0, #0x32 + bgt _021E2E54 + cmp r0, #0x32 + bge _021E2E9C + cmp r0, #0xa + bgt _021E2EF8 + cmp r0, #8 + blt _021E2EF8 + cmp r0, #8 + beq _021E2E74 + cmp r0, #0xa + beq _021E2E88 + b _021E2EF8 +_021E2E54: + sub r1, r0, #0x33 + cmp r1, #3 + addls pc, pc, r1, lsl #2 + b _021E2EF8 +_021E2E64: ; jump table + b _021E2EB0 ; case 0 + b _021E2EC4 ; case 1 + b _021E2ED8 ; case 2 + b _021E2EE8 ; case 3 +_021E2E74: + bl FUN_021E26E4 + ldrb r1, [r0, #0x14] + mov r0, r4 + bl FUN_02202220 + ldmia sp!, {r4, pc} +_021E2E88: + bl FUN_021E26E4 + ldrb r1, [r0, #0x16] + mov r0, r4 + bl FUN_02202220 + ldmia sp!, {r4, pc} +_021E2E9C: + bl FUN_021E26E4 + ldr r1, [r0, #0x200] + mov r0, r4 + bl FUN_02202220 + ldmia sp!, {r4, pc} +_021E2EB0: + bl FUN_021E26E4 + ldrb r1, [r0, #0x15] + mov r0, r4 + bl FUN_02202220 + ldmia sp!, {r4, pc} +_021E2EC4: + bl FUN_021E26E4 + ldr r1, [r0, #0x20] + mov r0, r4 + bl FUN_02202220 + ldmia sp!, {r4, pc} +_021E2ED8: + mov r0, r4 + mov r1, #3 + bl FUN_02202220 + ldmia sp!, {r4, pc} +_021E2EE8: + mov r0, r4 + mov r1, #1 + bl FUN_02202220 + ldmia sp!, {r4, pc} +_021E2EF8: + subs r1, r0, #0x64 + ldmmiia sp!, {r4, pc} + cmp r1, #0x9a + ldmgeia sp!, {r4, pc} + mov r0, #0xc + mul r2, r1, r0 + ldr r0, _021E2F5C ; =0x02210704 + ldrb r0, [r0, r2] + cmp r0, #0 + ldmeqia sp!, {r4, pc} + ldr r0, _021E2F60 ; =0x02210705 + ldrb r0, [r0, r2] + cmp r0, #0 + beq _021E2F44 + ldr r1, _021E2F64 ; =0x0221070C + mov r0, r4 + ldr r1, [r1, r2] + bl FUN_022021C0 + ldmia sp!, {r4, pc} +_021E2F44: + ldr r1, _021E2F64 ; =0x0221070C + mov r0, r4 + ldr r1, [r1, r2] + ldr r1, [r1] + bl FUN_02202220 + ldmia sp!, {r4, pc} + .align 2, 0 +_021E2F5C: .word 0x02210704 +_021E2F60: .word 0x02210705 +_021E2F64: .word 0x0221070C + + arm_func_start FUN_021E2F68 +FUN_021E2F68: ; 0x021E2F68 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x1c + mov r8, #0 + mov r7, r8 + bl FUN_021E26E4 + ldr r0, [r0, #0xe4] + bl FUN_02203BE4 + cmp r0, #1 + addle sp, sp, #0x1c + ldmleia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + mov sb, r8 + bl FUN_021E26E4 + ldr r0, [r0, #0xe4] + bl FUN_02203BE4 + cmp r0, #0 + ble _021E2FF8 + ldr r4, _021E30D8 ; =0x0220BAC4 + ldr r6, _021E30DC ; =0x0220D3A0 + mvn r5, #0 +_021E2FB4: + bl FUN_021E26E4 + ldr r0, [r0, #0xe4] + mov r1, sb + bl FUN_02203BF4 + mov r1, r6 + mov r2, r5 + bl FUN_0220394C + cmp r0, r8 + movgt r8, r0 + ldr r0, [r4, sb, lsl #2] + add sb, sb, #1 + add r7, r7, r0 + bl FUN_021E26E4 + ldr r0, [r0, #0xe4] + bl FUN_02203BE4 + cmp sb, r0 + blt _021E2FB4 +_021E2FF8: + mov r0, #0x64 + bl FUN_021DE8C8 + mov sb, r0 + mov r6, #0 + bl FUN_021E26E4 + ldr r0, [r0, #0xe4] + bl FUN_02203BE4 + cmp r0, #0 + ble _021E3090 + add r5, sp, #0 + mov fp, r6 + mov r4, #0x64 +_021E3028: + bl FUN_021E26E4 + ldr r0, [r0, #0xe4] + bl FUN_02203BE4 + sub r0, r0, #1 + cmp r6, r0 + beq _021E3090 + cmp r6, #0 + subgt r0, r6, #1 + ldrgt sl, [r5, r0, lsl #2] + ldr r0, _021E30D8 ; =0x0220BAC4 + movle sl, fp + ldr r2, [r0, r6, lsl #2] + mov r1, r7 + mul r0, r2, r4 + bl _s32_div_f + add r0, r0, sl + str r0, [r5, r6, lsl #2] + ldr r0, [r5, r6, lsl #2] + cmp sb, r0 + blo _021E3090 + add r6, r6, #1 + bl FUN_021E26E4 + ldr r0, [r0, #0xe4] + bl FUN_02203BE4 + cmp r6, r0 + blt _021E3028 +_021E3090: + mvn r0, #0x80000000 + cmp r8, r0 + addlt r8, r8, #1 + bl FUN_021E26E4 + ldr r0, [r0, #0xe4] + mov r1, r6 + bl FUN_02203BF4 + ldr r1, _021E30DC ; =0x0220D3A0 + mov r2, r8 + bl FUN_02203A48 + bl FUN_021E26E4 + mov r1, #0 + ldr r0, [r0, #0xe4] + ldr r2, _021E30DC ; =0x0220D3A0 + mov r3, r1 + bl FUN_02203BD4 + add sp, sp, #0x1c + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_021E30D8: .word 0x0220BAC4 +_021E30DC: .word 0x0220D3A0 + + arm_func_start FUN_021E30E0 +FUN_021E30E0: ; 0x021E30E0 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0xc + mov r1, #0 + str r1, [sp, #4] + str r0, [sp] + mov r8, r1 + bl FUN_021E26E4 + ldr r0, [r0, #0xe4] + bl FUN_02203BE4 + cmp r0, #0 + ble _021E3268 + mov r0, #0x80 + mov r4, #1 + mov r5, r8 + str r0, [sp, #8] + mov fp, #0x100 +_021E3120: + bl FUN_021E26E4 + ldr r0, [r0, #0xe4] + mov r1, r8 + bl FUN_02203BF4 + mov r6, r0 + bl FUN_021E26E4 + ldrb r0, [r0, #0x15] + cmp r0, #0 + bne _021E31BC + ldr r1, _021E32D4 ; =0x0220D3AC + mov r0, r6 + mov r2, r5 + bl FUN_0220394C + mov sb, r0 + mov sl, r5 + mov r7, r4 + bl FUN_021E26E4 + ldrb r0, [r0, #0xd] + cmp r0, #1 + blt _021E31B4 +_021E3170: + bl FUN_021E26E4 + add r0, r0, r7, lsl #2 + ldr r0, [r0, #0xf4] + cmp sb, r0 + bne _021E31A0 + bl FUN_021E26E4 + ldr r0, [r0, #0xe4] + mov r1, r6 + bl FUN_02203C50 + mov sl, r4 + sub r8, r8, #1 + b _021E31B4 +_021E31A0: + add r7, r7, #1 + bl FUN_021E26E4 + ldrb r0, [r0, #0xd] + cmp r7, r0 + ble _021E3170 +_021E31B4: + cmp sl, #0 + bne _021E3250 +_021E31BC: + bl FUN_021E26E4 + ldr r0, [r0, #0x474] + cmp r0, #0 + beq _021E3238 + bl FUN_021E26E4 + mov r7, r0 + bl FUN_021E26E4 + ldr r1, [r0, #0x478] + ldr r2, [r7, #0x474] + mov r0, r8 + blx r2 + mov r7, r0 + cmp r7, #0 + ble _021E321C + ldr r0, _021E32D8 ; =0x007FFFFF + cmp r7, r0 + movgt r7, r0 + mov r0, fp + bl FUN_021DE8C8 + orr r2, r0, r7, lsl #8 + ldr r1, _021E32DC ; =0x0220D3A0 + mov r0, r6 + bl FUN_02203A48 + b _021E3250 +_021E321C: + bl FUN_021E26E4 + ldr r0, [r0, #0xe4] + mov r1, r6 + bl FUN_02203C50 + str r4, [sp, #4] + sub r8, r8, #1 + b _021E3250 +_021E3238: + ldr r0, [sp, #8] + bl FUN_021DE8C8 + mov r2, r0 + ldr r1, _021E32DC ; =0x0220D3A0 + mov r0, r6 + bl FUN_02203A48 +_021E3250: + add r8, r8, #1 + bl FUN_021E26E4 + ldr r0, [r0, #0xe4] + bl FUN_02203BE4 + cmp r8, r0 + blt _021E3120 +_021E3268: + ldr r0, [sp] + cmp r0, #0 + beq _021E32A0 + bl FUN_021E26E4 + ldr r0, [r0, #0xe4] + bl FUN_02203BE4 + cmp r0, #0 + beq _021E32A0 + bl FUN_021E26E4 + mov r1, #0 + ldr r0, [r0, #0xe4] + ldr r2, _021E32DC ; =0x0220D3A0 + mov r3, r1 + bl FUN_02203BD4 +_021E32A0: + ldr r0, [sp, #4] + cmp r0, #0 + beq _021E32C8 + bl FUN_021E26E4 + ldr r0, [r0, #0xe4] + bl FUN_02203BE4 + cmp r0, #0 + addeq sp, sp, #0xc + moveq r0, #0 + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +_021E32C8: + mov r0, #1 + add sp, sp, #0xc + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_021E32D4: .word 0x0220D3AC +_021E32D8: .word 0x007FFFFF +_021E32DC: .word 0x0220D3A0 + + arm_func_start FUN_021E32E0 +FUN_021E32E0: ; 0x021E32E0 + bx lr + + arm_func_start FUN_021E32E4 +FUN_021E32E4: ; 0x021E32E4 + stmdb sp!, {r4, r5, r6, r7, lr} + sub sp, sp, #4 + mov r6, r0 + cmp r1, #0 + beq _021E330C + cmp r1, #4 + beq _021E331C + add sp, sp, #4 + cmp r1, #5 + ldmia sp!, {r4, r5, r6, r7, pc} +_021E330C: + mov r0, r2 + bl FUN_021E32E0 + add sp, sp, #4 + ldmia sp!, {r4, r5, r6, r7, pc} +_021E331C: + mov r5, #0 + bl FUN_02203BE4 + cmp r0, #0 + ble _021E336C +_021E332C: + mov r0, r6 + mov r1, r5 + bl FUN_02203BF4 + mov r4, r0 + bl FUN_021E3F98 + cmp r0, #0 + bne _021E3358 + mov r0, r6 + mov r1, r4 + bl FUN_02203C50 + sub r5, r5, #1 +_021E3358: + mov r0, r6 + add r5, r5, #1 + bl FUN_02203BE4 + cmp r5, r0 + blt _021E332C +_021E336C: + bl FUN_021E26E4 + ldr r0, [r0, #0x1a0] + cmp r0, #2 + beq _021E3394 + cmp r0, #3 + beq _021E348C + cmp r0, #5 + beq _021E3508 + add sp, sp, #4 + ldmia sp!, {r4, r5, r6, r7, pc} +_021E3394: + mov r0, r6 + mov r5, #0 + bl FUN_02203BE4 + cmp r0, #0 + ble _021E3424 +_021E33A8: + mov r0, r6 + mov r1, r5 + bl FUN_02203BF4 + mov r4, r0 + bl FUN_021E26E4 + ldr r0, [r0, #0x1c] + cmp r0, #0 + beq _021E3410 + bl FUN_021E26E4 + mov r7, r0 + mov r0, r4 + bl FUN_02203908 + ldr r1, [r7, #0x1c] + cmp r1, r0 + bne _021E3410 + bl FUN_021E26E4 + ldrh r0, [r0, #0x1a] + cmp r0, #0 + beq _021E3410 + bl FUN_021E26E4 + mov r7, r0 + mov r0, r4 + bl FUN_022038E4 + ldrh r1, [r7, #0x1a] + cmp r1, r0 + beq _021E3424 +_021E3410: + mov r0, r6 + add r5, r5, #1 + bl FUN_02203BE4 + cmp r5, r0 + blt _021E33A8 +_021E3424: + mov r0, r6 + bl FUN_02203BE4 + cmp r5, r0 + bge _021E3464 + mov r0, #3 + bl FUN_021E26D0 + bl FUN_021E26E4 + mov r1, #0 + str r1, [r0, #0x204] + bl FUN_021E26E4 + ldr r0, [r0, #0x204] + bl FUN_021E7E5C + bl FUN_021E38E8 + add sp, sp, #4 + cmp r0, #0 + ldmia sp!, {r4, r5, r6, r7, pc} +_021E3464: + bl FUN_021E26E4 + mov r1, #2 + str r1, [r0, #0xe8] + bl FUN_021E26E4 + mov r4, r0 + bl OS_GetTick + str r0, [r4, #0xec] + add sp, sp, #4 + str r1, [r4, #0xf0] + ldmia sp!, {r4, r5, r6, r7, pc} +_021E348C: + mov r0, #1 + bl FUN_021E30E0 + bl FUN_021E2F68 + mov r0, r6 + bl FUN_02203BE4 + cmp r0, #0 + beq _021E34E0 + mov r0, #0 + mov r1, r0 + bl FUN_021E6038 + bl FUN_021E61EC + cmp r0, #0 + addne sp, sp, #4 + ldmneia sp!, {r4, r5, r6, r7, pc} + mov r0, #4 + bl FUN_021E26D0 + bl FUN_021E26E4 + mov r1, #0 + str r1, [r0, #0xe8] + add sp, sp, #4 + ldmia sp!, {r4, r5, r6, r7, pc} +_021E34E0: + bl FUN_021E26E4 + mov r1, #2 + str r1, [r0, #0xe8] + bl FUN_021E26E4 + mov r4, r0 + bl OS_GetTick + str r0, [r4, #0xec] + add sp, sp, #4 + str r1, [r4, #0xf0] + ldmia sp!, {r4, r5, r6, r7, pc} +_021E3508: + mov r0, r6 + bl FUN_02203BE4 + cmp r0, #0 + beq _021E3580 + mov r4, #0 +_021E351C: + mov r0, r6 + mov r1, r4 + bl FUN_02203BF4 + mov r5, r0 + bl FUN_02203908 + mov r7, r0 + bl FUN_021E26E4 + ldr r0, [r0, #0x1b8] + cmp r7, r0 + bne _021E3564 + mov r0, r5 + bl FUN_022038E4 + mov r7, r0 + bl FUN_021E26E4 + add r0, r0, #0x100 + ldrh r0, [r0, #0xb4] + cmp r7, r0 + beq _021E3580 +_021E3564: + mov r0, r6 + mov r1, r5 + bl FUN_02203C50 + mov r0, r6 + bl FUN_02203BE4 + cmp r0, #0 + bne _021E351C +_021E3580: + mov r0, r6 + bl FUN_02203BE4 + cmp r0, #0 + beq _021E3684 + mov r0, r6 + mov r1, #0 + bl FUN_02203BF4 + ldr r1, _021E36AC ; =0x0220D3AC + mov r2, #0 + bl FUN_0220394C + mov r4, r0 + bl FUN_021E26E4 + ldrb r0, [r0, #0x15] + cmp r0, #1 + bne _021E3650 + bl FUN_021E26E4 + ldr r0, [r0, #0xf4] + cmp r4, r0 + bne _021E3650 + mov r0, #0 + bl FUN_021E30E0 + cmp r0, #0 + beq _021E3604 + bl FUN_021E26E4 + ldrb r0, [r0, #0xd] + cmp r0, #0 + beq _021E3650 + bl FUN_021E5824 + bl FUN_021E61EC + cmp r0, #0 + beq _021E3650 + add sp, sp, #4 + ldmia sp!, {r4, r5, r6, r7, pc} +_021E3604: + bl FUN_021E26E4 + ldr r0, [r0, #0xf4] + bl FUN_021E5BF0 + bl FUN_021E61EC + cmp r0, #0 + addne sp, sp, #4 + ldmneia sp!, {r4, r5, r6, r7, pc} + mov r0, #4 + bl FUN_021E26D0 + bl FUN_021E26E4 + mov r1, r0 + mov r0, #0 + ldr r2, [r1, #0xf4] + mov r1, r0 + bl FUN_021E5D30 + bl FUN_021E61EC + add sp, sp, #4 + cmp r0, #0 + ldmia sp!, {r4, r5, r6, r7, pc} +_021E3650: + mov r0, #6 + bl FUN_021E26D0 + mov r0, r6 + mov r1, #0 + bl FUN_02203BF4 + mov r2, r0 + mov r0, #0 + mov r1, r0 + bl FUN_021E7B04 + bl FUN_021E37A4 + add sp, sp, #4 + cmp r0, #0 + ldmia sp!, {r4, r5, r6, r7, pc} +_021E3684: + bl FUN_021E26E4 + mov r1, #2 + str r1, [r0, #0xe8] + bl FUN_021E26E4 + mov r4, r0 + bl OS_GetTick + str r0, [r4, #0xec] + str r1, [r4, #0xf0] + add sp, sp, #4 + ldmia sp!, {r4, r5, r6, r7, pc} + .align 2, 0 +_021E36AC: .word 0x0220D3AC + + arm_func_start FUN_021E36B0 +FUN_021E36B0: ; 0x021E36B0 + stmdb sp!, {r4, lr} + movs r4, r0 + moveq r0, #0 + ldmeqia sp!, {r4, pc} + cmp r4, #7 + addls pc, pc, r4, lsl #2 + b _021E3734 +_021E36CC: ; jump table + b _021E3734 ; case 0 + b _021E36EC ; case 1 + b _021E36F8 ; case 2 + b _021E3708 ; case 3 + b _021E3714 ; case 4 + b _021E36F8 ; case 5 + b _021E3720 ; case 6 + b _021E372C ; case 7 +_021E36EC: + mov r0, #9 + mvn r2, #0 + b _021E3734 +_021E36F8: + mov r0, #0 + mov r2, r0 + mov r4, r0 + b _021E3734 +_021E3708: + mov r0, #6 + mvn r2, #9 + b _021E3734 +_021E3714: + mov r0, #6 + mvn r2, #0x1d + b _021E3734 +_021E3720: + mov r0, #6 + mvn r2, #0x45 + b _021E3734 +_021E372C: + mov r0, #6 + mvn r2, #0x4f +_021E3734: + cmp r0, #0 + beq _021E3748 + ldr r1, _021E3750 ; =0xFFFEAC28 + add r1, r2, r1 + bl FUN_021E8E08 +_021E3748: + mov r0, r4 + ldmia sp!, {r4, pc} + .align 2, 0 +_021E3750: .word 0xFFFEAC28 + + arm_func_start FUN_021E3754 +FUN_021E3754: ; 0x021E3754 + stmdb sp!, {r4, lr} + movs r4, r0 + moveq r0, #0 + ldmeqia sp!, {r4, pc} + cmp r4, #1 + beq _021E3778 + cmp r4, #2 + beq _021E3780 + b _021E3788 +_021E3778: + mov r0, #1 + ldmia sp!, {r4, pc} +_021E3780: + mov r0, #2 + ldmia sp!, {r4, pc} +_021E3788: + movs r0, #6 + beq _021E3798 + ldr r1, _021E37A0 ; =0xFFFEB007 + bl FUN_021E8E08 +_021E3798: + mov r0, r4 + ldmia sp!, {r4, pc} + .align 2, 0 +_021E37A0: .word 0xFFFEB007 + + arm_func_start FUN_021E37A4 +FUN_021E37A4: ; 0x021E37A4 + stmdb sp!, {r4, lr} + movs r4, r0 + moveq r0, #0 + ldmeqia sp!, {r4, pc} + cmp r4, #1 + beq _021E37D4 + cmp r4, #2 + beq _021E37E0 + cmp r4, #3 + moveq r0, #6 + mvneq r2, #0x1d + b _021E37E8 +_021E37D4: + mov r0, #9 + mvn r2, #0 + b _021E37E8 +_021E37E0: + mov r0, #6 + mvn r2, #0x31 +_021E37E8: + ldr r1, _021E37FC ; =0xFFFEB010 + add r1, r2, r1 + bl FUN_021E8E08 + mov r0, r4 + ldmia sp!, {r4, pc} + .align 2, 0 +_021E37FC: .word 0xFFFEB010 + + arm_func_start FUN_021E3800 +FUN_021E3800: ; 0x021E3800 + stmdb sp!, {r4, r5, r6, lr} + movs r6, r0 + moveq r0, #0 + ldmeqia sp!, {r4, r5, r6, pc} + cmp r6, #5 + addls pc, pc, r6, lsl #2 + b _021E386C +_021E381C: ; jump table + b _021E386C ; case 0 + b _021E3834 ; case 1 + b _021E3840 ; case 2 + b _021E384C ; case 3 + b _021E3858 ; case 4 + b _021E3864 ; case 5 +_021E3834: + mov r4, #6 + mvn r5, #0x31 + b _021E386C +_021E3840: + mov r4, #6 + mvn r5, #0x3b + b _021E386C +_021E384C: + mov r4, #6 + mvn r5, #0x1d + b _021E386C +_021E3858: + mov r4, #6 + mvn r5, #0x4f + b _021E386C +_021E3864: + mov r4, #6 + mvn r5, #0x13 +_021E386C: + bl FUN_021DF88C + cmp r0, #2 + beq _021E388C + cmp r0, #4 + beq _021E389C + cmp r0, #5 + beq _021E38B0 + b _021E38C4 +_021E388C: + mov r0, r4 + sub r1, r5, #0xfa00 + bl FUN_021E0EAC + b _021E38D4 +_021E389C: + ldr r1, _021E38DC ; =0xFFFEDEF0 + mov r0, r4 + add r1, r5, r1 + bl FUN_021E2114 + b _021E38D4 +_021E38B0: + ldr r1, _021E38E0 ; =0xFFFEB7E0 + mov r0, r4 + add r1, r5, r1 + bl FUN_021E8E08 + b _021E38D4 +_021E38C4: + ldr r1, _021E38E4 ; =0xFFFE90D0 + mov r0, r4 + add r1, r5, r1 + bl FUN_021DD6B0 +_021E38D4: + mov r0, r6 + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +_021E38DC: .word 0xFFFEDEF0 +_021E38E0: .word 0xFFFEB7E0 +_021E38E4: .word 0xFFFE90D0 + + arm_func_start FUN_021E38E8 +FUN_021E38E8: ; 0x021E38E8 + stmdb sp!, {r4, lr} + movs r4, r0 + moveq r0, #0 + ldmeqia sp!, {r4, pc} + cmp r4, #6 + addls pc, pc, r4, lsl #2 + b _021E3964 +_021E3904: ; jump table + b _021E3964 ; case 0 + b _021E3920 ; case 1 + b _021E392C ; case 2 + b _021E3938 ; case 3 + b _021E3944 ; case 4 + b _021E3950 ; case 5 + b _021E395C ; case 6 +_021E3920: + mov r0, #6 + mvn r2, #0x31 + b _021E3964 +_021E392C: + mov r0, #6 + mvn r2, #0x1d + b _021E3964 +_021E3938: + mov r0, #6 + mvn r2, #0x13 + b _021E3964 +_021E3944: + mov r0, #6 + mvn r2, #0x27 + b _021E3964 +_021E3950: + mov r0, #9 + mvn r2, #0 + b _021E3964 +_021E395C: + mov r0, #9 + mvn r2, #1 +_021E3964: + ldr r1, _021E3978 ; =0xFFFEB3F8 + add r1, r2, r1 + bl FUN_021E8E08 + mov r0, r4 + ldmia sp!, {r4, pc} + .align 2, 0 +_021E3978: .word 0xFFFEB3F8 + + arm_func_start FUN_021E397C +FUN_021E397C: ; 0x021E397C + stmdb sp!, {r4, lr} + movs r4, r0 + moveq r0, #0 + ldmeqia sp!, {r4, pc} + cmp r4, #4 + addls pc, pc, r4, lsl #2 + b _021E39D8 +_021E3998: ; jump table + b _021E39D8 ; case 0 + b _021E39AC ; case 1 + b _021E39B8 ; case 2 + b _021E39C4 ; case 3 + b _021E39D0 ; case 4 +_021E39AC: + mov r0, #9 + mvn r2, #0 + b _021E39D8 +_021E39B8: + mov r0, #9 + mvn r2, #1 + b _021E39D8 +_021E39C4: + mov r0, #6 + mvn r2, #9 + b _021E39D8 +_021E39D0: + mov r0, #6 + mvn r2, #0x13 +_021E39D8: + ldr r1, _021E39EC ; =0xFFFEC398 + add r1, r2, r1 + bl FUN_021E8E08 + mov r0, r4 + ldmia sp!, {r4, pc} + .align 2, 0 +_021E39EC: .word 0xFFFEC398 + + arm_func_start FUN_021E39F0 +FUN_021E39F0: ; 0x021E39F0 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} + sub sp, sp, #8 + ldr r0, _021E3E1C ; =0x022106D4 + ldr r0, [r0] + cmp r0, #0 + addeq sp, sp, #8 + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + ldrb r0, [r0] + cmp r0, #0 + addeq sp, sp, #8 + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + bl FUN_021E26E4 + ldrb r0, [r0, #0x15] + cmp r0, #2 + addeq sp, sp, #8 + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + bl FUN_021E26E4 + ldrb r0, [r0, #0x15] + cmp r0, #3 + addeq sp, sp, #8 + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + bl FUN_021E26E4 + ldr r0, [r0, #0x1a0] + cmp r0, #0x13 + bne _021E3C58 + mov r0, #0 + bl FUN_021E3EC4 + ldr r1, _021E3E1C ; =0x022106D4 + ldr r5, [r1] + ldr r1, [r5, #8] + cmp r1, r0 + bne _021E3B2C + ldr r1, [r5, #0xc] + cmp r1, r0 + bne _021E3AB8 + bl FUN_021E26E4 + mov r4, r0 + bl FUN_021E26E4 + ldrb r0, [r0, #0xd] + strb r0, [r4, #0x16] + bl FUN_021E26E4 + mov r4, r0 + bl FUN_021E26E4 + ldrb r1, [r0, #0xd] + mov r0, #0 + sub r1, r1, #1 + strb r1, [r4, #0x1a4] + bl FUN_021E51C0 + add sp, sp, #8 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} +_021E3AB8: + bl OS_GetTick + str r0, [r5, #0x18] + str r1, [r5, #0x1c] + mov r0, #0 + str r0, [r5, #8] + bl FUN_021E26E4 + ldrb r0, [r0, #0x15] + cmp r0, #0 + bne _021E3B0C + mov r0, #3 + bl FUN_021E26D0 + bl FUN_021E26E4 + mov r1, #2 + str r1, [r0, #0xe8] + bl FUN_021E26E4 + mov r4, r0 + bl OS_GetTick + str r0, [r4, #0xec] + add sp, sp, #8 + str r1, [r4, #0xf0] + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} +_021E3B0C: + mov r0, #4 + bl FUN_021E26D0 + mov r1, #0 + mov r2, r1 + mov r0, #1 + bl FUN_021E5D30 + add sp, sp, #8 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} +_021E3B2C: + ldrb r4, [r5, #2] + bl OS_GetTick + ldr r3, [r5, #0x18] + ldr r2, [r5, #0x1c] + subs r3, r0, r3 + sbc r0, r1, r2 + mov r1, r0, lsl #6 + ldr r2, _021E3E20 ; =0x000082EA + orr r1, r1, r3, lsr #26 + mov r0, r3, lsl #6 + mov r3, #0 + bl _ll_udiv + ldr r2, _021E3E24 ; =0x00001770 + mul r2, r4, r2 + cmp r1, r2, asr #31 + cmpeq r0, r2 + addlo sp, sp, #8 + ldmloia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + cmp r4, #5 + bls _021E3B98 + mov r0, #1 + bl FUN_021E3E28 + bl FUN_021E4B40 + mov r0, #1 + bl FUN_021E4CF8 + add sp, sp, #8 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} +_021E3B98: + mov r7, #1 + bl FUN_021E26E4 + ldrb r0, [r0, #0xd] + cmp r0, #1 + blt _021E3C3C + ldr r8, _021E3E1C ; =0x022106D4 + mov r5, #0 + mov r4, #0x11 + mov r6, r7 +_021E3BBC: + bl FUN_021E26E4 + add r0, r0, r7 + ldrb r0, [r0, #0x2d0] + ldr r1, [r8] + mov r0, r6,lsl r0 + ldr r1, [r1, #8] + ands r0, r1, r0 + bne _021E3C28 + bl FUN_021E26E4 + mov sl, r0 + bl FUN_021E26E4 + mov sb, r0 + bl FUN_021E26E4 + str r5, [sp] + str r5, [sp, #4] + add r0, r0, r7, lsl #1 + add r1, sl, r7, lsl #2 + add r2, sb, r7, lsl #2 + ldrh r3, [r0, #0xa4] + ldr r1, [r1, #0xf4] + ldr r2, [r2, #0x24] + mov r0, r4 + bl FUN_021E7884 + bl FUN_021E61EC + cmp r0, #0 + addne sp, sp, #8 + ldmneia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} +_021E3C28: + add r7, r7, #1 + bl FUN_021E26E4 + ldrb r0, [r0, #0xd] + cmp r7, r0 + ble _021E3BBC +_021E3C3C: + ldr r0, _021E3E1C ; =0x022106D4 + add sp, sp, #8 + ldr r1, [r0] + ldrb r0, [r1, #2] + add r0, r0, #1 + strb r0, [r1, #2] + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} +_021E3C58: + bl FUN_021E26E4 + ldr r0, [r0, #0x1a0] + cmp r0, #4 + beq _021E3C7C + bl FUN_021E26E4 + ldr r0, [r0, #0x1a0] + cmp r0, #3 + addne sp, sp, #8 + ldmneia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} +_021E3C7C: + ldr r0, _021E3E1C ; =0x022106D4 + ldr r4, [r0] + bl FUN_021E26E4 + ldrb r1, [r4, #1] + ldrb r2, [r0, #0xd] + sub r0, r1, #1 + cmp r2, r0 + addlt sp, sp, #8 + ldmltia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + ldrb r0, [r4, #2] + cmp r0, #0 + bne _021E3CF0 + ldr r0, _021E3E1C ; =0x022106D4 + ldr r4, [r0] + bl OS_GetTick + ldr r3, [r4, #0x10] + ldr r2, [r4, #0x14] + subs r3, r0, r3 + sbc r0, r1, r2 + mov r1, r0, lsl #6 + ldr r2, _021E3E20 ; =0x000082EA + orr r1, r1, r3, lsr #26 + mov r0, r3, lsl #6 + mov r3, #0 + bl _ll_udiv + ldr r2, [r4, #4] + cmp r1, #0 + cmpeq r0, r2 + bhs _021E3D48 +_021E3CF0: + ldrb r0, [r4, #2] + cmp r0, #0 + addeq sp, sp, #8 + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + ldr r0, _021E3E1C ; =0x022106D4 + ldr r4, [r0] + bl OS_GetTick + ldr r3, [r4, #0x18] + ldr r2, [r4, #0x1c] + subs r3, r0, r3 + sbc r0, r1, r2 + mov r1, r0, lsl #6 + ldr r2, _021E3E20 ; =0x000082EA + orr r1, r1, r3, lsr #26 + mov r0, r3, lsl #6 + mov r3, #0 + bl _ll_udiv + ldr r2, [r4, #4] + cmp r1, #0 + cmpeq r0, r2, lsr #2 + addlo sp, sp, #8 + ldmloia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} +_021E3D48: + bl FUN_021E26E4 + ldr r0, [r0, #0x204] + cmp r0, #0 + beq _021E3D74 + bl FUN_021E26E4 + ldr r0, [r0, #0x204] + bl FUN_021E5BF0 + bl FUN_021E61EC + cmp r0, #0 + addne sp, sp, #8 + ldmneia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} +_021E3D74: + mov r0, #0x13 + bl FUN_021E26D0 + mov r4, #1 + bl FUN_021E26E4 + ldrb r0, [r0, #0xd] + cmp r0, #1 + blt _021E3DF8 + mov r6, #0 + mov r5, #0x11 +_021E3D98: + bl FUN_021E26E4 + mov r8, r0 + bl FUN_021E26E4 + mov r7, r0 + bl FUN_021E26E4 + str r6, [sp] + str r6, [sp, #4] + add r0, r0, r4, lsl #1 + add r1, r8, r4, lsl #2 + add r2, r7, r4, lsl #2 + ldrh r3, [r0, #0xa4] + ldr r1, [r1, #0xf4] + ldr r2, [r2, #0x24] + mov r0, r5 + bl FUN_021E7884 + bl FUN_021E61EC + cmp r0, #0 + addne sp, sp, #8 + ldmneia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + add r4, r4, #1 + bl FUN_021E26E4 + ldrb r0, [r0, #0xd] + cmp r4, r0 + ble _021E3D98 +_021E3DF8: + ldr r0, _021E3E1C ; =0x022106D4 + ldr r4, [r0] + bl OS_GetTick + str r0, [r4, #0x18] + str r1, [r4, #0x1c] + mov r0, #1 + strb r0, [r4, #2] + add sp, sp, #8 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + .align 2, 0 +_021E3E1C: .word 0x022106D4 +_021E3E20: .word 0x000082EA +_021E3E24: .word 0x00001770 + + arm_func_start FUN_021E3E28 +FUN_021E3E28: ; 0x021E3E28 + stmdb sp!, {r4, lr} + ldr r1, _021E3E98 ; =0x022106D4 + mov r4, r0 + ldr r3, [r1] + cmp r3, #0 + ldmeqia sp!, {r4, pc} + ldrb r0, [r3] + cmp r0, #0 + ldmeqia sp!, {r4, pc} + mov r2, #0 + str r2, [r3, #8] + ldr r0, [r1] + str r2, [r0, #0xc] + ldr r0, [r1] + strb r2, [r0, #2] + bl OS_GetTick + ldr r2, _021E3E98 ; =0x022106D4 + cmp r4, #0 + ldr r2, [r2] + str r0, [r2, #0x18] + str r1, [r2, #0x1c] + ldmneia sp!, {r4, pc} + bl OS_GetTick + ldr r2, _021E3E98 ; =0x022106D4 + ldr r2, [r2] + str r0, [r2, #0x10] + str r1, [r2, #0x14] + ldmia sp!, {r4, pc} + .align 2, 0 +_021E3E98: .word 0x022106D4 + + arm_func_start FUN_021E3E9C +FUN_021E3E9C: ; 0x021E3E9C + stmdb sp!, {r4, lr} + bl FUN_021E26E4 + mov r1, #0 + strb r1, [r0, #0x1ad] + bl FUN_021E26E4 + mov r4, r0 + bl OS_GetTick + str r0, [r4, #0x1f8] + str r1, [r4, #0x1fc] + ldmia sp!, {r4, pc} + + arm_func_start FUN_021E3EC4 +FUN_021E3EC4: ; 0x021E3EC4 + stmdb sp!, {r4, r5, r6, lr} + cmp r0, #0 + mov r6, #0 + beq _021E3EE4 + bl FUN_021E26E4 + ldr r0, [r0, #0x2f0] + bic r0, r0, #1 + ldmia sp!, {r4, r5, r6, pc} +_021E3EE4: + mov r5, #1 + bl FUN_021E26E4 + ldrb r0, [r0, #0xd] + cmp r0, #1 + blt _021E3F20 + mov r4, r5 +_021E3EFC: + bl FUN_021E26E4 + add r0, r0, r5 + ldrb r0, [r0, #0x2d0] + add r5, r5, #1 + orr r6, r6, r4, lsl r0 + bl FUN_021E26E4 + ldrb r0, [r0, #0xd] + cmp r5, r0 + ble _021E3EFC +_021E3F20: + mov r0, r6 + ldmia sp!, {r4, r5, r6, pc} + + arm_func_start FUN_021E3F28 +FUN_021E3F28: ; 0x021E3F28 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #4 + cmp r1, #0 + moveq r4, #1 + mov r5, r0 + movne r4, #0 + bl FUN_021E26E4 + ldrb r0, [r0, #0xd] + cmp r4, r0 + bgt _021E3F8C +_021E3F50: + bl FUN_021E26E4 + add r0, r0, r4, lsl #2 + ldr r0, [r0, #0xf4] + cmp r5, r0 + bne _021E3F78 + bl FUN_021E26E4 + add r0, r0, r4 + add sp, sp, #4 + ldrb r0, [r0, #0x2d0] + ldmia sp!, {r4, r5, pc} +_021E3F78: + add r4, r4, #1 + bl FUN_021E26E4 + ldrb r0, [r0, #0xd] + cmp r4, r0 + ble _021E3F50 +_021E3F8C: + mov r0, #0xff + add sp, sp, #4 + ldmia sp!, {r4, r5, pc} + + arm_func_start FUN_021E3F98 +FUN_021E3F98: ; 0x021E3F98 + stmdb sp!, {r4, lr} + ldr r1, _021E405C ; =0x0220D3B4 + mvn r2, #0 + mov r4, r0 + bl FUN_0220394C + mvn r2, #0 + cmp r0, r2 + moveq r0, #0 + ldmeqia sp!, {r4, pc} + ldr r1, _021E4060 ; =0x0220D3C0 + mov r0, r4 + bl FUN_0220394C + mvn r2, #0 + cmp r0, r2 + moveq r0, #0 + ldmeqia sp!, {r4, pc} + ldr r1, _021E4064 ; =0x0220D3CC + mov r0, r4 + bl FUN_0220394C + mvn r2, #0 + cmp r0, r2 + moveq r0, #0 + ldmeqia sp!, {r4, pc} + ldr r1, _021E4068 ; =0x0220D3D8 + mov r0, r4 + bl FUN_0220394C + mvn r1, #0 + cmp r0, r1 + bne _021E4028 + ldr r1, _021E4068 ; =0x0220D3D8 + mov r0, r4 + mov r2, #0 + bl FUN_0220394C + cmp r0, #0 + moveq r0, #0 + ldmeqia sp!, {r4, pc} +_021E4028: + ldr r1, _021E406C ; =0x0220D3E4 + mov r0, r4 + mvn r2, #0 + bl FUN_0220394C + mvn r1, #0 + cmp r0, r1 + moveq r0, #0 + ldmeqia sp!, {r4, pc} + ldr r1, _021E4070 ; =0x0220D3AC + mov r0, r4 + mov r2, #0 + bl FUN_0220394C + ldmia sp!, {r4, pc} + .align 2, 0 +_021E405C: .word 0x0220D3B4 +_021E4060: .word 0x0220D3C0 +_021E4064: .word 0x0220D3CC +_021E4068: .word 0x0220D3D8 +_021E406C: .word 0x0220D3E4 +_021E4070: .word 0x0220D3AC + + arm_func_start FUN_021E4074 +FUN_021E4074: ; 0x021E4074 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #4 + mov r5, r0 + bl FUN_021E26E4 + ldr r0, [r0, #0x2fc] + cmp r0, #0 + addeq sp, sp, #4 + moveq r0, #0 + ldmeqia sp!, {r4, r5, pc} + mov r4, #0 + bl FUN_021E26E4 + ldr r0, [r0, #0x344] + cmp r0, #0 + ble _021E40E8 +_021E40AC: + bl FUN_021E26E4 + add r0, r0, r4 + ldrb r0, [r0, #0x304] + bl FUN_021E1F84 + cmp r0, #0 + ble _021E40D4 + cmp r0, r5 + addeq sp, sp, #4 + moveq r0, #1 + ldmeqia sp!, {r4, r5, pc} +_021E40D4: + add r4, r4, #1 + bl FUN_021E26E4 + ldr r0, [r0, #0x344] + cmp r4, r0 + blt _021E40AC +_021E40E8: + mov r0, #0 + add sp, sp, #4 + ldmia sp!, {r4, r5, pc} + + arm_func_start FUN_021E40F4 +FUN_021E40F4: ; 0x021E40F4 + stmdb sp!, {r4, r5, r6, lr} + mov r6, #0 + mov r4, r6 +_021E4100: + mov r5, r4 + bl FUN_021E26E4 + ldrb r0, [r0, #0x14] + cmp r0, #0 + blt _021E413C +_021E4114: + bl FUN_021E26E4 + add r0, r0, r5 + ldrb r0, [r0, #0x2d0] + cmp r6, r0 + beq _021E413C + add r5, r5, #1 + bl FUN_021E26E4 + ldrb r0, [r0, #0x14] + cmp r5, r0 + ble _021E4114 +_021E413C: + bl FUN_021E26E4 + ldrb r0, [r0, #0x14] + cmp r5, r0 + bgt _021E415C + add r0, r6, #1 + and r6, r0, #0xff + cmp r6, #0x20 + blo _021E4100 +_021E415C: + mov r0, r6 + ldmia sp!, {r4, r5, r6, pc} + + arm_func_start FUN_021E4164 +FUN_021E4164: ; 0x021E4164 + stmdb sp!, {r4, r5, r6, r7, lr} + sub sp, sp, #4 + ldr r6, _021E41BC ; =0x02210704 + mov r7, #0 + mov r4, r7 + mov r5, #4 +_021E417C: + ldr r1, [r6, #4] + cmp r1, #0 + beq _021E4194 + mov r0, r5 + mov r2, r4 + bl FUN_021DD904 +_021E4194: + add r7, r7, #1 + cmp r7, #0x9a + add r6, r6, #0xc + blt _021E417C + ldr r1, _021E41BC ; =0x02210704 + ldr r2, _021E41C0 ; =0x00000738 + mov r0, #0 + bl MIi_CpuClear32 + add sp, sp, #4 + ldmia sp!, {r4, r5, r6, r7, pc} + .align 2, 0 +_021E41BC: .word 0x02210704 +_021E41C0: .word 0x00000738 + + arm_func_start FUN_021E41C4 +FUN_021E41C4: ; 0x021E41C4 + stmdb sp!, {r4, r5, r6, r7, lr} + sub sp, sp, #4 + bl FUN_021E26E4 + ldr r0, [r0, #0x1a0] + cmp r0, #8 + beq _021E41FC + bl FUN_021E26E4 + ldr r0, [r0, #0x1a0] + cmp r0, #0xe + beq _021E41FC + bl FUN_021E26E4 + ldr r0, [r0, #0x1a0] + cmp r0, #0xf + bne _021E4240 +_021E41FC: + bl OS_GetTick + mov r4, r0 + mov r5, r1 + bl FUN_021E26E4 + ldr r1, [r0, #0x1e8] + ldr r0, [r0, #0x1ec] + subs r3, r4, r1 + sbc r0, r5, r0 + mov r1, r0, lsl #6 + ldr r2, _021E43D8 ; =0x000082EA + orr r1, r1, r3, lsr #26 + mov r0, r3, lsl #6 + mov r3, #0 + bl _ll_udiv + mov r4, r0 + mov r5, r1 + b _021E424C +_021E4240: + add sp, sp, #4 + mov r0, #1 + ldmia sp!, {r4, r5, r6, r7, pc} +_021E424C: + bl FUN_021E26E4 + ldr r0, [r0, #0x1a0] + cmp r0, #8 + beq _021E4270 + cmp r0, #0xe + beq _021E42A4 + cmp r0, #0xf + beq _021E43AC + b _021E43CC +_021E4270: + ldr r0, _021E43DC ; =0x00001770 + cmp r5, #0 + cmpeq r4, r0 + bls _021E43CC + bl FUN_021E26E4 + ldr r0, [r0, #0xf4] + mov r1, #0xe + bl FUN_021E4604 + cmp r0, #0 + bne _021E43CC + add sp, sp, #4 + mov r0, #0 + ldmia sp!, {r4, r5, r6, r7, pc} +_021E42A4: + ldr r0, _021E43DC ; =0x00001770 + cmp r5, #0 + cmpeq r4, r0 + bls _021E43CC + bl FUN_021E26E4 + ldrb r1, [r0, #0x1ac] + add r1, r1, #1 + strb r1, [r0, #0x1ac] + bl FUN_021E26E4 + ldrb r0, [r0, #0x1ac] + cmp r0, #5 + bls _021E4330 + bl FUN_021E26E4 + ldr r0, [r0, #0x1d8] + bl FUN_021E4A00 + cmp r0, #0 + addeq sp, sp, #4 + moveq r0, #0 + ldmeqia sp!, {r4, r5, r6, r7, pc} + bl FUN_021E26E4 + ldrb r0, [r0, #0xd] + cmp r0, #0 + beq _021E4324 + bl FUN_021E26E4 + mov r1, #0 + strb r1, [r0, #0x1ac] + bl FUN_021E26E4 + mov r4, r0 + bl OS_GetTick + str r0, [r4, #0x1e8] + str r1, [r4, #0x1ec] + b _021E43CC +_021E4324: + mov r0, #2 + bl FUN_021E4CF8 + b _021E43CC +_021E4330: + mov r4, #1 + bl FUN_021E26E4 + ldrb r0, [r0, #0xd] + cmp r0, #1 + blt _021E43CC + mov r5, #0xd + mov r6, r4 +_021E434C: + bl FUN_021E26E4 + mov r7, r0 + bl FUN_021E26E4 + add r0, r0, r4 + ldrb r0, [r0, #0x2d0] + ldr r1, [r7, #0x1d8] + mov r0, r6,lsl r0 + ands r0, r1, r0 + bne _021E4394 + bl FUN_021E26E4 + add r0, r0, r4, lsl #2 + ldr r0, [r0, #0xf4] + mov r1, r5 + bl FUN_021E4604 + cmp r0, #0 + addeq sp, sp, #4 + moveq r0, #0 + ldmeqia sp!, {r4, r5, r6, r7, pc} +_021E4394: + add r4, r4, #1 + bl FUN_021E26E4 + ldrb r0, [r0, #0xd] + cmp r4, r0 + ble _021E434C + b _021E43CC +_021E43AC: + bl FUN_021E26E4 + add r0, r0, #0x100 + ldrh r0, [r0, #0xb2] + cmp r5, r0, asr #31 + cmpeq r4, r0 + bls _021E43CC + mov r0, #2 + bl FUN_021E4CF8 +_021E43CC: + mov r0, #1 + add sp, sp, #4 + ldmia sp!, {r4, r5, r6, r7, pc} + .align 2, 0 +_021E43D8: .word 0x000082EA +_021E43DC: .word 0x00001770 + + arm_func_start FUN_021E43E0 +FUN_021E43E0: ; 0x021E43E0 + stmdb sp!, {r4, r5, r6, lr} + mov r6, r0 + mov r5, r1 + mov r4, r2 + bl FUN_021DF88C + cmp r0, #6 + movne r0, #1 + ldmneia sp!, {r4, r5, r6, pc} + cmp r5, #0xd + beq _021E441C + cmp r5, #0xe + beq _021E4458 + cmp r5, #0xf + beq _021E45E0 + b _021E45F8 +_021E441C: + bl FUN_021E26E4 + ldr r0, [r0, #0x1a0] + cmp r0, #8 + beq _021E443C + mov r0, #8 + bl FUN_021E26D0 + mov r0, r4 + bl FUN_021E4B78 +_021E443C: + mov r0, r6 + mov r1, #0xe + bl FUN_021E4604 + cmp r0, #0 + bne _021E45F8 + mov r0, #0 + ldmia sp!, {r4, r5, r6, pc} +_021E4458: + bl FUN_021E26E4 + ldr r0, [r0, #0x1a0] + cmp r0, #0xe + bne _021E45C4 + bl OS_GetTick + mov r4, r0 + mov r5, r1 + bl FUN_021E26E4 + ldr r1, [r0, #0x1e8] + ldr r0, [r0, #0x1ec] + subs r3, r4, r1 + sbc r0, r5, r0 + mov r1, r0, lsl #6 + ldr r2, _021E4600 ; =0x000082EA + orr r1, r1, r3, lsr #26 + mov r0, r3, lsl #6 + mov r3, #0 + bl _ll_udiv + mov r2, r0, lsr #1 + mov r0, r1, lsr #1 + cmp r0, #0 + orr r2, r2, r1, lsl #31 + cmpeq r2, #0x12c + bls _021E4524 + bl FUN_021E26E4 + ldr r1, [r0, #0x1e8] + ldr r0, [r0, #0x1ec] + subs r3, r4, r1 + sbc r0, r5, r0 + mov r1, r0, lsl #6 + ldr r2, _021E4600 ; =0x000082EA + orr r1, r1, r3, lsr #26 + mov r0, r3, lsl #6 + mov r3, #0 + bl _ll_udiv + mov r3, r0, lsr #1 + mov r0, #0x12c + orr r3, r3, r1, lsl #31 + rsb r0, r0, #0 + mvn r2, #0 + adds r5, r3, r0 + adc r4, r2, r1, lsr #1 + bl FUN_021E26E4 + add r0, r0, #0x100 + ldrh r0, [r0, #0xb2] + cmp r4, r0, asr #31 + cmpeq r5, r0 + bls _021E4524 + bl FUN_021E26E4 + add r0, r0, #0x100 + strh r5, [r0, #0xb2] +_021E4524: + mov r0, r6 + mov r1, #0 + bl FUN_021E3F28 + mov r4, r0 + cmp r4, #0xff + beq _021E4550 + bl FUN_021E26E4 + ldr r2, [r0, #0x1d8] + mov r1, #1 + orr r1, r2, r1, lsl r4 + str r1, [r0, #0x1d8] +_021E4550: + mov r0, #1 + bl FUN_021E3EC4 + mov r4, r0 + bl FUN_021E26E4 + ldr r0, [r0, #0x1d8] + cmp r4, r0 + bne _021E45F8 + mov r5, #1 + bl FUN_021E26E4 + ldrb r0, [r0, #0xd] + cmp r0, #1 + blt _021E45B8 + mov r4, #0xf +_021E4584: + bl FUN_021E26E4 + add r0, r0, r5, lsl #2 + ldr r0, [r0, #0xf4] + mov r1, r4 + bl FUN_021E4604 + cmp r0, #0 + moveq r0, #0 + ldmeqia sp!, {r4, r5, r6, pc} + add r5, r5, #1 + bl FUN_021E26E4 + ldrb r0, [r0, #0xd] + cmp r5, r0 + ble _021E4584 +_021E45B8: + mov r0, #0xf + bl FUN_021E26D0 + b _021E45F8 +_021E45C4: + mov r0, r6 + mov r1, #0xf + bl FUN_021E4604 + cmp r0, #0 + bne _021E45F8 + mov r0, #0 + ldmia sp!, {r4, r5, r6, pc} +_021E45E0: + bl FUN_021E26E4 + ldr r0, [r0, #0x1a0] + cmp r0, #8 + bne _021E45F8 + mov r0, #2 + bl FUN_021E4CF8 +_021E45F8: + mov r0, #1 + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +_021E4600: .word 0x000082EA + + arm_func_start FUN_021E4604 +FUN_021E4604: ; 0x021E4604 + stmdb sp!, {r4, r5, r6, lr} + sub sp, sp, #0x10 + mov r5, r1 + cmp r5, #0xd + mov r6, r0 + movne r4, #0 + bne _021E4630 + bl FUN_021E26E4 + ldr r0, [r0, #0x20c] + mov r4, #1 + str r0, [sp, #8] +_021E4630: + add r0, sp, #8 + str r0, [sp] + mov r2, #0 + mov r0, r5 + mov r1, r6 + mov r3, r2 + str r4, [sp, #4] + bl FUN_021E7884 + bl FUN_021E61EC + cmp r0, #0 + addne sp, sp, #0x10 + movne r0, #0 + ldmneia sp!, {r4, r5, r6, pc} + bl FUN_021E26E4 + mov r4, r0 + bl OS_GetTick + str r0, [r4, #0x1e8] + str r1, [r4, #0x1ec] + mov r0, #1 + add sp, sp, #0x10 + ldmia sp!, {r4, r5, r6, pc} + + arm_func_start FUN_021E4684 +FUN_021E4684: ; 0x021E4684 + stmdb sp!, {r4, r5, r6, r7, lr} + sub sp, sp, #4 + bl FUN_021E26E4 + ldr r0, [r0, #0x1a0] + cmp r0, #9 + beq _021E46BC + bl FUN_021E26E4 + ldr r0, [r0, #0x1a0] + cmp r0, #0x10 + beq _021E46BC + bl FUN_021E26E4 + ldr r0, [r0, #0x1a0] + cmp r0, #0x11 + bne _021E4700 +_021E46BC: + bl OS_GetTick + mov r4, r0 + mov r5, r1 + bl FUN_021E26E4 + ldr r1, [r0, #0x1e0] + ldr r0, [r0, #0x1e4] + subs r3, r4, r1 + sbc r0, r5, r0 + mov r1, r0, lsl #6 + ldr r2, _021E4908 ; =0x000082EA + orr r1, r1, r3, lsr #26 + mov r0, r3, lsl #6 + mov r3, #0 + bl _ll_udiv + mov r4, r0 + mov r5, r1 + b _021E470C +_021E4700: + add sp, sp, #4 + mov r0, #1 + ldmia sp!, {r4, r5, r6, r7, pc} +_021E470C: + bl FUN_021E26E4 + ldr r0, [r0, #0x1a0] + cmp r0, #9 + beq _021E4730 + cmp r0, #0x10 + beq _021E47A0 + cmp r0, #0x11 + beq _021E48DC + b _021E48FC +_021E4730: + ldr r0, _021E490C ; =0x00001770 + cmp r5, #0 + cmpeq r4, r0 + bls _021E48FC + bl FUN_021DF88C + cmp r0, #5 + bne _021E477C + bl FUN_021E26E4 + ldrb r0, [r0, #0x1ad] + cmp r0, #5 + blo _021E477C + bl FUN_021E26E4 + ldr r0, [r0, #0xf4] + bl FUN_021E5908 + cmp r0, #0 + bne _021E48FC + add sp, sp, #4 + mov r0, #0 + ldmia sp!, {r4, r5, r6, r7, pc} +_021E477C: + bl FUN_021E26E4 + ldrb r1, [r0, #0x1ad] + add r1, r1, #1 + strb r1, [r0, #0x1ad] + bl FUN_021E26E4 + ldrb r0, [r0, #0x2d0] + mov r1, #3 + bl FUN_021E4910 + b _021E48FC +_021E47A0: + ldr r0, _021E490C ; =0x00001770 + cmp r5, #0 + cmpeq r4, r0 + bls _021E48FC + bl FUN_021E26E4 + ldrb r1, [r0, #0x1ab] + add r1, r1, #1 + strb r1, [r0, #0x1ab] + bl FUN_021E26E4 + ldrb r0, [r0, #0x1ab] + cmp r0, #5 + bls _021E4870 + bl FUN_021E26E4 + ldrb r0, [r0, #0x15] + cmp r0, #0 + beq _021E47F0 + bl FUN_021E26E4 + ldrb r0, [r0, #0x15] + cmp r0, #1 + bne _021E4800 +_021E47F0: + bl FUN_021E4B40 + mov r0, #1 + bl FUN_021E4CF8 + b _021E48FC +_021E4800: + bl FUN_021E26E4 + ldr r0, [r0, #0x1d4] + bl FUN_021E4A00 + cmp r0, #0 + addeq sp, sp, #4 + moveq r0, #0 + ldmeqia sp!, {r4, r5, r6, r7, pc} + bl FUN_021E26E4 + ldrb r0, [r0, #0xd] + cmp r0, #0 + beq _021E4850 + bl FUN_021E26E4 + mov r1, #0 + strb r1, [r0, #0x1ab] + bl FUN_021E26E4 + mov r4, r0 + bl OS_GetTick + str r0, [r4, #0x1e0] + str r1, [r4, #0x1e4] + b _021E48FC +_021E4850: + bl FUN_021E26E4 + ldr r0, [r0, #0x20c] + bl FUN_021E59D4 + cmp r0, #0 + bne _021E48FC + add sp, sp, #4 + mov r0, #0 + ldmia sp!, {r4, r5, r6, r7, pc} +_021E4870: + mov r4, #1 + bl FUN_021E26E4 + ldrb r0, [r0, #0xd] + cmp r0, #1 + blt _021E48FC + mov r5, #2 + mov r6, r4 +_021E488C: + bl FUN_021E26E4 + mov r7, r0 + bl FUN_021E26E4 + add r0, r0, r4 + ldrb r0, [r0, #0x2d0] + ldr r1, [r7, #0x1d4] + mov r0, r6,lsl r0 + ands r0, r1, r0 + bne _021E48C4 + bl FUN_021E26E4 + add r0, r0, r4 + ldrb r0, [r0, #0x2d0] + mov r1, r5 + bl FUN_021E4910 +_021E48C4: + add r4, r4, #1 + bl FUN_021E26E4 + ldrb r0, [r0, #0xd] + cmp r4, r0 + ble _021E488C + b _021E48FC +_021E48DC: + bl FUN_021E26E4 + add r0, r0, #0x100 + ldrh r0, [r0, #0xb0] + cmp r5, r0, asr #31 + cmpeq r4, r0 + bls _021E48FC + mov r0, #4 + bl FUN_021E51C0 +_021E48FC: + mov r0, #1 + add sp, sp, #4 + ldmia sp!, {r4, r5, r6, r7, pc} + .align 2, 0 +_021E4908: .word 0x000082EA +_021E490C: .word 0x00001770 + + arm_func_start FUN_021E4910 +FUN_021E4910: ; 0x021E4910 + stmdb sp!, {r4, r5, r6, lr} + sub sp, sp, #8 + mov r4, r1 + mov r5, r0 + cmp r4, #2 + beq _021E4934 + cmp r4, #3 + beq _021E49AC + b _021E49D0 +_021E4934: + bl FUN_021E26E4 + mov r6, r0 + bl FUN_021E26E4 + ldrb r0, [r0, #0xd] + add r0, r6, r0 + ldrb r0, [r0, #0x2d0] + mov r6, #1 + cmp r5, r0 + moveq r0, #1 + streqb r0, [sp] + movne r0, #0 + strneb r0, [sp] + bl FUN_021E26E4 + ldrb r0, [r0, #0xd] + cmp r0, #1 + blo _021E49D0 +_021E4974: + bl FUN_021E26E4 + add r0, r0, r6 + ldrb r0, [r0, #0x2d0] + cmp r5, r0 + streqb r6, [sp, #1] + streqb r5, [sp, #2] + beq _021E49D0 + add r0, r6, #1 + and r6, r0, #0xff + bl FUN_021E26E4 + ldrb r0, [r0, #0xd] + cmp r6, r0 + bls _021E4974 + b _021E49D0 +_021E49AC: + bl FUN_021E26E4 + add r0, r0, #0x100 + ldrh r0, [r0, #0xb0] + strb r0, [sp] + bl FUN_021E26E4 + add r0, r0, #0x100 + ldrh r0, [r0, #0xb0] + mov r0, r0, asr #8 + strb r0, [sp, #1] +_021E49D0: + add r2, sp, #0 + mov r0, r4 + mov r1, r5 + mov r3, #4 + bl FUN_021EAF20 + bl FUN_021E26E4 + mov r4, r0 + bl OS_GetTick + str r0, [r4, #0x1e0] + str r1, [r4, #0x1e4] + add sp, sp, #8 + ldmia sp!, {r4, r5, r6, pc} + + arm_func_start FUN_021E4A00 +FUN_021E4A00: ; 0x021E4A00 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} + sub sp, sp, #0x108 + mov sb, #0 + mov sl, r0 + mov r8, sb + mov r7, #1 + bl FUN_021E26E4 + ldrb r0, [r0, #0xd] + cmp r0, #1 + blt _021E4A8C + add r4, sp, #8 + add r5, sp, #0x88 + mov r6, r7 +_021E4A34: + bl FUN_021E26E4 + add r0, r0, r7 + ldrb r0, [r0, #0x2d0] + mov r0, r6,lsl r0 + ands r0, sl, r0 + beq _021E4A64 + bl FUN_021E26E4 + add r0, r0, r7, lsl #2 + ldr r0, [r0, #0xf4] + str r0, [r5, r8, lsl #2] + add r8, r8, #1 + b _021E4A78 +_021E4A64: + bl FUN_021E26E4 + add r0, r0, r7, lsl #2 + ldr r0, [r0, #0xf4] + str r0, [r4, sb, lsl #2] + add sb, sb, #1 +_021E4A78: + add r7, r7, #1 + bl FUN_021E26E4 + ldrb r0, [r0, #0xd] + cmp r7, r0 + ble _021E4A34 +_021E4A8C: + cmp r8, #0 + mov sl, #0 + ble _021E4AE4 + add r7, sp, #8 + add r5, sp, #0x88 + mov r4, sl + mov r6, #0x10 +_021E4AA8: + str r7, [sp] + str sb, [sp, #4] + ldr r1, [r5, sl, lsl #2] + mov r0, r6 + mov r2, r4 + mov r3, r4 + bl FUN_021E7884 + bl FUN_021E61EC + cmp r0, #0 + addne sp, sp, #0x108 + movne r0, #0 + ldmneia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + add sl, sl, #1 + cmp sl, r8 + blt _021E4AA8 +_021E4AE4: + bl FUN_021E26E4 + mov r1, #2 + strb r1, [r0, #0x1a8] + cmp sb, #0 + mov r6, #0 + ble _021E4B28 + add r5, sp, #8 + mov r4, r6 +_021E4B04: + ldr r0, [r5, r6, lsl #2] + mov r1, r4 + bl FUN_021E3F28 + cmp r0, #0xff + beq _021E4B1C + bl FUN_021DF9D4 +_021E4B1C: + add r6, r6, #1 + cmp r6, sb + blt _021E4B04 +_021E4B28: + bl FUN_021E26E4 + mov r1, #0 + strb r1, [r0, #0x1a8] + mov r0, #1 + add sp, sp, #0x108 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + + arm_func_start FUN_021E4B40 +FUN_021E4B40: ; 0x021E4B40 + stmdb sp!, {lr} + sub sp, sp, #4 + bl FUN_021E26E4 + mov r1, #2 + strb r1, [r0, #0x1a8] + bl FUN_021E26E4 + ldr r0, [r0, #4] + ldr r0, [r0] + bl FUN_021FD45C + bl FUN_021E26E4 + mov r1, #0 + strb r1, [r0, #0x1a8] + add sp, sp, #4 + ldmfd sp!, {pc} + + arm_func_start FUN_021E4B78 +FUN_021E4B78: ; 0x021E4B78 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #4 + mov r5, r0 + bl FUN_021E26E4 + str r5, [r0, #0x20c] + bl FUN_021E26E4 + ldrb r1, [r0, #0xd] + mov r0, r5 + add r1, r1, #1 + bl FUN_021DF648 + movs r4, r0 + beq _021E4BD4 + bl FUN_021E26E4 + mov r1, #2 + strb r1, [r0, #0x1a8] + ldr r0, [r4] + bl FUN_021FD488 + bl FUN_021E26E4 + mov r1, #0 + strb r1, [r0, #0x1a8] + add sp, sp, #4 + mov r0, #1 + ldmia sp!, {r4, r5, pc} +_021E4BD4: + bl FUN_021E26E4 + ldrb r1, [r0, #0xd] + mov r0, r5 + add r1, r1, #1 + bl FUN_021E89EC + mov r0, #0 + add sp, sp, #4 + ldmia sp!, {r4, r5, pc} + + arm_func_start FUN_021E4BF4 +FUN_021E4BF4: ; 0x021E4BF4 + stmdb sp!, {r4, lr} + bl FUN_021E26E4 + mov r1, #0 + strb r1, [r0, #0x17] + bl FUN_021E26E4 + mov r1, #0 + str r1, [r0, #0x20] + bl FUN_021E26E4 + mov r1, #0 + strb r1, [r0, #0x1a8] + bl FUN_021E26E4 + ldr r0, [r0, #0x208] + cmp r0, #0 + beq _021E4CA4 + bl FUN_021E26E4 + ldrb r0, [r0, #0x15] + cmp r0, #0 + bne _021E4C64 + mov r0, #3 + bl FUN_021E26D0 + mov r0, #0 + bl FUN_021E7E5C + mov r4, r0 + bl FUN_021E38E8 + cmp r0, #0 + beq _021E4CAC + mov r0, r4 + ldmia sp!, {r4, pc} +_021E4C64: + bl FUN_021E26E4 + ldrb r0, [r0, #0x15] + cmp r0, #1 + bne _021E4CAC + mov r0, #4 + bl FUN_021E26D0 + bl FUN_021E26E4 + ldr r0, [r0, #0x208] + mov r1, #0 + bl FUN_021E6038 + mov r4, r0 + bl FUN_021E61EC + cmp r0, #0 + beq _021E4CAC + mov r0, r4 + ldmia sp!, {r4, pc} +_021E4CA4: + mov r0, #1 + bl FUN_021E4CF8 +_021E4CAC: + mov r0, #0 + ldmia sp!, {r4, pc} + + arm_func_start FUN_021E4CB4 +FUN_021E4CB4: ; 0x021E4CB4 + stmdb sp!, {lr} + sub sp, sp, #4 + bl FUN_021E26E4 + ldrb r0, [r0, #0x15] + cmp r0, #2 + addeq sp, sp, #4 + ldmeqia sp!, {pc} + bl FUN_021E26E4 + ldrb r0, [r0, #0x15] + cmp r0, #3 + addeq sp, sp, #4 + ldmeqia sp!, {pc} + bl FUN_021E4B40 + mov r0, #1 + bl FUN_021E4CF8 + add sp, sp, #4 + ldmfd sp!, {pc} + + arm_func_start FUN_021E4CF8 +FUN_021E4CF8: ; 0x021E4CF8 + stmdb sp!, {r4, r5, r6, lr} + sub sp, sp, #8 + movs r4, r0 + bne _021E4D14 + bl FUN_021E4ED4 + add sp, sp, #8 + ldmia sp!, {r4, r5, r6, pc} +_021E4D14: + bl FUN_021E8174 + bl FUN_021E26E4 + ldrb r0, [r0, #0x15] + cmp r0, #2 + beq _021E4D38 + bl FUN_021E26E4 + ldrb r0, [r0, #0x15] + cmp r0, #3 + bne _021E4D94 +_021E4D38: + bl FUN_021E26E4 + ldr r0, [r0, #0x20c] + cmp r0, #0 + moveq r6, #1 + movne r6, #0 + bl FUN_021E26E4 + mov r5, r0 + bl FUN_021E26E4 + ldr r0, [r0, #0x20c] + bl FUN_021E1F18 + mov r4, r0 + bl FUN_021E26E4 + str r4, [sp] + ldr r1, [r0, #0x468] + mov r0, #0 + str r1, [sp, #4] + ldr ip, [r5, #0x464] + mov r2, r6 + mov r1, #1 + mov r3, r0 + blx ip + add sp, sp, #8 + ldmia sp!, {r4, r5, r6, pc} +_021E4D94: + bl FUN_021E26E4 + ldrb r0, [r0, #0x15] + cmp r0, #0 + bne _021E4DC8 + cmp r4, #1 + addne sp, sp, #8 + ldmneia sp!, {r4, r5, r6, pc} + mov r0, #0 + bl FUN_021E7E5C + bl FUN_021E38E8 + add sp, sp, #8 + cmp r0, #0 + ldmia sp!, {r4, r5, r6, pc} +_021E4DC8: + bl FUN_021E26E4 + ldrb r0, [r0, #0x15] + cmp r0, #1 + addne sp, sp, #8 + ldmneia sp!, {r4, r5, r6, pc} + cmp r4, #1 + addne sp, sp, #8 + ldmneia sp!, {r4, r5, r6, pc} + mov r0, #0 + mov r1, r0 + mov r2, r0 + bl FUN_021E5D30 + add sp, sp, #8 + ldmia sp!, {r4, r5, r6, pc} + + arm_func_start FUN_021E4E00 +FUN_021E4E00: ; 0x021E4E00 + stmdb sp!, {r4, r5, r6, r7, lr} + sub sp, sp, #0xc + mov r4, #0 + str r4, [sp, #8] + bl FUN_021E26E4 + ldrb r0, [r0, #0x17] + cmp r0, #0 + beq _021E4EC8 + bl FUN_021E26E4 + ldr r0, [r0, #0x20] + cmp r0, #0 + beq _021E4EC8 + bl FUN_021E26E4 + mov r5, r0 + bl FUN_021E26E4 + ldr r1, [r5, #0x20] + ldr r0, [r0, #0x200] + cmp r1, r0 + beq _021E4EC8 + bl FUN_021E26E4 + mov r7, r0 + bl FUN_021E26E4 + mov r5, r0 + bl FUN_021E26E4 + mov r6, r0 + bl FUN_021E26E4 + mov r4, r0 + bl FUN_021E26E4 + add r2, sp, #8 + mov r1, #1 + str r2, [sp] + str r1, [sp, #4] + ldrb r3, [r0, #0xd] + ldrb r2, [r6, #0xd] + ldr r1, [r7, #0x20] + add r3, r3, #1 + add r2, r2, #1 + add r3, r4, r3, lsl #1 + add r2, r5, r2, lsl #2 + ldrh r3, [r3, #0xa4] + ldr r2, [r2, #0x24] + mov r0, #0xc + bl FUN_021E7884 + mov r4, r0 + bl FUN_021E26E4 + mov r1, #0 + strb r1, [r0, #0x17] + bl FUN_021E26E4 + mov r1, #0 + str r1, [r0, #0x20] +_021E4EC8: + mov r0, r4 + add sp, sp, #0xc + ldmia sp!, {r4, r5, r6, r7, pc} + + arm_func_start FUN_021E4ED4 +FUN_021E4ED4: ; 0x021E4ED4 + stmdb sp!, {r4, r5, r6, r7, lr} + sub sp, sp, #0xc + ldr r1, _021E4F90 ; =0x0220D3F0 + mov r0, #1 + mov r2, #0 + bl FUN_021E1E30 + bl FUN_021E397C + cmp r0, #0 + addne sp, sp, #0xc + ldmneia sp!, {r4, r5, r6, r7, pc} + bl FUN_021E8034 + bl FUN_021E26E4 + ldr r0, [r0, #0x20c] + cmp r0, #0 + movne r6, #1 + bne _021E4F28 + bl FUN_021E26E4 + ldrb r0, [r0, #0x15] + cmp r0, #2 + moveq r6, #1 + movne r6, #0 +_021E4F28: + bl FUN_021E26E4 + ldr r0, [r0, #0x20c] + cmp r0, #0 + moveq r7, #1 + movne r7, #0 + bl FUN_021E26E4 + mov r5, r0 + bl FUN_021E26E4 + ldr r0, [r0, #0x20c] + bl FUN_021E1F18 + mov r4, r0 + bl FUN_021E26E4 + str r4, [sp] + ldr r1, [r0, #0x468] + mov r2, r7 + str r1, [sp, #4] + ldr ip, [r5, #0x464] + mov r3, r6 + mov r0, #0 + mov r1, #1 + blx ip + bl FUN_021E26E4 + mov r1, #0 + strb r1, [r0, #0x1a9] + add sp, sp, #0xc + ldmia sp!, {r4, r5, r6, r7, pc} + .align 2, 0 +_021E4F90: .word 0x0220D3F0 + + arm_func_start FUN_021E4F94 +FUN_021E4F94: ; 0x021E4F94 + stmdb sp!, {lr} + sub sp, sp, #4 + bl FUN_021E26E4 + mov r1, #0 + str r1, [r0, #0x20c] + bl FUN_021E26E4 + ldr r0, [r0, #0x1a0] + cmp r0, #2 + bne _021E4FC4 + bl FUN_021E4ED4 + add sp, sp, #4 + ldmfd sp!, {pc} +_021E4FC4: + bl FUN_021E26E4 + mov r1, #1 + strb r1, [r0, #0x1a9] + bl FUN_021E26E4 + ldrb r0, [r0, #0x15] + cmp r0, #3 + bne _021E5038 + bl FUN_021E26E4 + mov r1, #1 + strb r1, [r0, #0x1a9] + bl FUN_021E26E4 + ldrb r0, [r0, #0xd] + cmp r0, #0 + beq _021E5010 + bl FUN_021E26E4 + ldr r0, [r0, #4] + ldr r0, [r0] + bl FUN_021FD45C + b _021E502C +_021E5010: + bl FUN_021E26E4 + ldr r0, [r0, #0xf4] + bl FUN_021E5BF0 + bl FUN_021E61EC + cmp r0, #0 + addne sp, sp, #4 + ldmneia sp!, {pc} +_021E502C: + bl FUN_021E4ED4 + add sp, sp, #4 + ldmfd sp!, {pc} +_021E5038: + bl FUN_021E26E4 + ldr r0, [r0, #0x1a0] + cmp r0, #4 + beq _021E5098 + bl FUN_021E26E4 + ldr r0, [r0, #0x1a0] + cmp r0, #5 + beq _021E5098 + bl FUN_021E26E4 + ldr r0, [r0, #0x1a0] + cmp r0, #6 + beq _021E5098 + bl FUN_021E26E4 + ldr r0, [r0, #0x1a0] + cmp r0, #7 + beq _021E5098 + bl FUN_021E26E4 + ldr r0, [r0, #0x1a0] + cmp r0, #0xb + beq _021E5098 + bl FUN_021E26E4 + ldr r0, [r0, #0x1a0] + cmp r0, #0xc + bne _021E50D8 +_021E5098: + bl FUN_021E26E4 + ldr r0, [r0, #0x204] + cmp r0, #0 + beq _021E50C4 + bl FUN_021E26E4 + ldr r0, [r0, #0xf4] + bl FUN_021E5BF0 + bl FUN_021E61EC + cmp r0, #0 + addne sp, sp, #4 + ldmneia sp!, {pc} +_021E50C4: + bl FUN_021E4E00 + bl FUN_021E61EC + cmp r0, #0 + addne sp, sp, #4 + ldmneia sp!, {pc} +_021E50D8: + bl FUN_021E26E4 + ldr r0, [r0, #0x19c] + cmp r0, #0 + beq _021E5100 + bl FUN_021E26E4 + ldr r0, [r0, #0x19c] + bl FUN_022006B4 + bl FUN_021E26E4 + mov r1, #0 + str r1, [r0, #0x19c] +_021E5100: + bl FUN_021E26E4 + ldrb r0, [r0, #0xd] + cmp r0, #0 + beq _021E512C + bl FUN_021E26E4 + mov r1, #1 + strb r1, [r0, #0x1a9] + bl FUN_021E26E4 + ldr r0, [r0, #4] + ldr r0, [r0] + bl FUN_021FD45C +_021E512C: + bl FUN_021E4ED4 + add sp, sp, #4 + ldmfd sp!, {pc} + + arm_func_start FUN_021E5138 +FUN_021E5138: ; 0x021E5138 + stmdb sp!, {r4, r5, r6, lr} + mov r6, r0 + mov r5, r1 + bl FUN_021E26E4 + ldrb r0, [r0, #0x1a6] + cmp r0, #0 + beq _021E5168 + bl FUN_021E26E4 + ldr r0, [r0, #0x1a0] + cmp r0, #4 + moveq r0, #1 + ldmeqia sp!, {r4, r5, r6, pc} +_021E5168: + cmp r5, #0 + mov r4, #0 + bls _021E51B8 +_021E5174: + ldr r0, [r6, r4, lsl #2] + bl FUN_021E4074 + cmp r0, #0 + moveq r0, #0 + ldmeqia sp!, {r4, r5, r6, pc} + bl FUN_021E26E4 + ldrb r0, [r0, #0x1a6] + cmp r0, #0 + beq _021E51AC + bl FUN_021E26E4 + ldr r0, [r0, #0x1a0] + cmp r0, #1 + moveq r0, #1 + ldmeqia sp!, {r4, r5, r6, pc} +_021E51AC: + add r4, r4, #1 + cmp r4, r5 + blo _021E5174 +_021E51B8: + mov r0, #1 + ldmia sp!, {r4, r5, r6, pc} + + arm_func_start FUN_021E51C0 +FUN_021E51C0: ; 0x021E51C0 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} + sub sp, sp, #0x20 + cmp r0, #4 + mov r5, #3 + mov r4, #0 + addls pc, pc, r0, lsl #2 + b _021E57E8 +_021E51DC: ; jump table + b _021E51F0 ; case 0 + b _021E5594 ; case 1 + b _021E55D8 ; case 2 + b _021E569C ; case 3 + b _021E56BC ; case 4 +_021E51F0: + bl FUN_021E26E4 + mov r6, r0 + bl FUN_021E26E4 + ldrb r0, [r0, #0xd] + ldrb r1, [r6, #0x1a4] + sub r0, r0, #1 + cmp r1, r0 + bge _021E52B0 + mov r0, #0xd + bl FUN_021E26D0 + bl FUN_021E26E4 + mov r5, r0 + bl FUN_021E26E4 + ldrb r0, [r0, #0x1a4] + add r0, r0, #1 + add r0, r5, r0, lsl #2 + ldr r0, [r0, #0xf4] + str r0, [sp, #8] + bl FUN_021E26E4 + ldrb r0, [r0, #0x1a4] + add r0, r0, #1 + str r0, [sp, #0xc] + bl FUN_021E26E4 + mov r5, r0 + bl FUN_021E26E4 + ldrb r0, [r0, #0x1a4] + add r0, r0, #1 + add r0, r5, r0 + ldrb r0, [r0, #0x2d0] + str r0, [sp, #0x10] + bl FUN_021E26E4 + mov r5, r0 + bl FUN_021E26E4 + ldrb r0, [r0, #0x1a4] + add r0, r0, #1 + add r0, r5, r0, lsl #2 + ldr r0, [r0, #0x24] + str r0, [sp, #0x14] + bl FUN_021E26E4 + mov r6, r0 + bl FUN_021E26E4 + ldrb r0, [r0, #0x1a4] + mov r5, #5 + add r0, r0, #1 + add r0, r6, r0, lsl #1 + ldrh r0, [r0, #0xa4] + str r0, [sp, #0x18] + b _021E54FC +_021E52B0: + bl FUN_021E26E4 + mov r1, r4 + strb r1, [r0, #0x17] + bl FUN_021E26E4 + mov r1, r4 + str r1, [r0, #0x20] + bl FUN_021E26E4 + ldr r0, [r0, #0x10] + bl FUN_02202308 + bl FUN_021E26E4 + ldrb r0, [r0, #0x15] + cmp r0, #0 + bne _021E52F0 + mov r0, r5 + bl FUN_021E26D0 + b _021E5314 +_021E52F0: + bl FUN_021E26E4 + ldrb r0, [r0, #0x15] + cmp r0, #1 + bne _021E530C + mov r0, #4 + bl FUN_021E26D0 + b _021E5314 +_021E530C: + mov r0, #0xa + bl FUN_021E26D0 +_021E5314: + bl FUN_021E26E4 + mov r1, #0 + strb r1, [r0, #0x1a4] + bl FUN_021E26E4 + ldrb r0, [r0, #0x15] + cmp r0, #2 + beq _021E534C + bl FUN_021E26E4 + mov r6, r0 + bl FUN_021E26E4 + ldrb r1, [r6, #0xd] + ldrb r0, [r0, #0x16] + cmp r1, r0 + bne _021E53FC +_021E534C: + bl FUN_021E26E4 + ldrb r0, [r0, #0x15] + cmp r0, #2 + bne _021E5384 + bl FUN_021E26E4 + mov r7, r0 + bl FUN_021E26E4 + mov r6, r0 + bl FUN_021E26E4 + ldrb r0, [r0, #0xd] + add r0, r6, r0, lsl #2 + ldr r0, [r0, #0xf4] + str r0, [r7, #0x20c] + b _021E53A4 +_021E5384: + bl FUN_021E26E4 + mov r1, #0 + str r1, [r0, #0x20c] + bl FUN_021E26E4 + mov r6, r0 + bl FUN_021E26E4 + ldr r0, [r0, #0x200] + str r0, [r6, #0xf4] +_021E53A4: + mov r0, #0x10 + bl FUN_021E26D0 + bl FUN_021E26E4 + mov r1, #0 + str r1, [r0, #0x1d4] + mov r7, #1 + bl FUN_021E26E4 + ldrb r0, [r0, #0xd] + cmp r0, #1 + blt _021E54EC + mov r6, #2 +_021E53D0: + bl FUN_021E26E4 + add r0, r0, r7 + ldrb r0, [r0, #0x2d0] + mov r1, r6 + bl FUN_021E4910 + add r7, r7, #1 + bl FUN_021E26E4 + ldrb r0, [r0, #0xd] + cmp r7, r0 + ble _021E53D0 + b _021E54EC +_021E53FC: + mov r0, #0 + str r0, [sp, #8] + bl FUN_021E26E4 + ldrb r0, [r0, #0xd] + str r0, [sp, #0xc] + bl FUN_021E26E4 + mov r6, r0 + bl FUN_021E26E4 + ldrb r0, [r0, #0xd] + add r0, r6, r0 + ldrb r0, [r0, #0x2d0] + str r0, [sp, #0x10] + bl FUN_021E26E4 + ldrb r0, [r0, #0x15] + cmp r0, #0 + bne _021E5460 + bl FUN_021E26E4 + mov r1, #2 + str r1, [r0, #0xe8] + bl FUN_021E26E4 + mov r6, r0 + bl OS_GetTick + str r0, [r6, #0xec] + str r1, [r6, #0xf0] + b _021E54EC +_021E5460: + bl FUN_021E26E4 + ldrb r0, [r0, #0x15] + cmp r0, #1 + bne _021E54EC + mov r1, #0 + mov r2, r1 + mov r0, #1 + bl FUN_021E5D30 + bl FUN_021E26E4 + ldrb r0, [r0, #0x1a6] + cmp r0, #0 + bne _021E54EC + bl FUN_021E26E4 + ldrb r0, [r0, #0xd] + cmp r0, #2 + blo _021E54EC + bl FUN_021E26E4 + mov r8, r0 + mov r0, #0 + bl FUN_021E3EC4 + mov r6, r0 + bl FUN_021E26E4 + mov r7, r0 + bl FUN_021E26E4 + ldrb r0, [r0, #0xd] + mov r1, #1 + ldr r2, [r8, #0x1dc] + add r0, r7, r0 + ldrb r0, [r0, #0x2d0] + mvn r0, r1, lsl r0 + and r0, r6, r0 + cmp r2, r0 + beq _021E54EC + bl FUN_021E4CB4 + b _021E57E8 +_021E54EC: + bl FUN_021E26E4 + ldrb r0, [r0, #0x15] + cmp r0, #2 + movne r4, #1 +_021E54FC: + bl FUN_021E26E4 + ldr r0, [r0, #0x1a0] + cmp r0, #0x10 + beq _021E57E8 + bl FUN_021E26E4 + mov sl, r0 + bl FUN_021E26E4 + mov sb, r0 + bl FUN_021E26E4 + mov r8, r0 + bl FUN_021E26E4 + mov r7, r0 + bl FUN_021E26E4 + mov r6, r0 + bl FUN_021E26E4 + add r1, sp, #8 + str r1, [sp] + str r5, [sp, #4] + mov ip, r0 + ldrb r3, [sb, #0xd] + ldrb r2, [r7, #0xd] + ldrb r1, [ip, #0xd] + add r5, sl, r3, lsl #2 + add r2, r8, r2, lsl #2 + add r3, r6, r1, lsl #1 + ldrh r3, [r3, #0xa4] + ldr r1, [r5, #0xf4] + ldr r2, [r2, #0x24] + mov r0, #8 + bl FUN_021E7884 + bl FUN_021E61EC + cmp r0, #0 + addne sp, sp, #0x20 + ldmneia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + bl FUN_021E26E4 + mov r1, #0 + strb r1, [r0, #0x3cd] + b _021E57E8 +_021E5594: + mov r0, #1 + bl FUN_021E26D0 + bl FUN_021E26E4 + ldrb r0, [r0, #0x15] + cmp r0, #3 + bne _021E55D0 + bl FUN_021E26E4 + mov r5, r0 + bl FUN_021E26E4 + mov r4, r0 + bl FUN_021E26E4 + ldrb r0, [r0, #0xd] + add r0, r4, r0, lsl #2 + ldr r0, [r0, #0xf4] + str r0, [r5, #0x20c] +_021E55D0: + mov r4, #1 + b _021E57E8 +_021E55D8: + mov r0, #1 + bl FUN_021E26D0 + bl FUN_021E26E4 + ldrb r0, [r0, #0x15] + cmp r0, #0 + beq _021E5600 + bl FUN_021E26E4 + ldrb r0, [r0, #0x15] + cmp r0, #1 + bne _021E5620 +_021E5600: + bl FUN_021E26E4 + mov r1, #1 + strb r1, [r0, #0x17] + bl FUN_021E26E4 + mov r5, r0 + bl FUN_021E26E4 + ldr r0, [r0, #0x200] + str r0, [r5, #0x20] +_021E5620: + bl FUN_021E3E9C + bl FUN_021E26E4 + ldrb r0, [r0, #0xd] + cmp r0, #1 + bls _021E57E8 + bl FUN_021E26E4 + mov r7, r0 + bl FUN_021E26E4 + mov r6, r0 + bl FUN_021E26E4 + mov r5, r0 + bl FUN_021E26E4 + mov r8, r0 + bl FUN_021E26E4 + add r3, r8, #0xf4 + ldrb r2, [r0, #0xd] + mov r1, #1 + mov r0, #9 + sub r2, r2, #1 + add r2, r3, r2, lsl #2 + str r2, [sp] + str r1, [sp, #4] + ldr r1, [r7, #0xf4] + ldr r2, [r6, #0x24] + ldrh r3, [r5, #0xa4] + bl FUN_021E7884 + bl FUN_021E61EC + cmp r0, #0 + beq _021E57E8 + add sp, sp, #0x20 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} +_021E569C: + mov r0, #1 + bl FUN_021E26D0 + bl FUN_021E3E9C + bl FUN_021E26E4 + mov r1, r4 + str r1, [r0, #0x20c] + mov r4, #1 + b _021E57E8 +_021E56BC: + bl FUN_021E26E4 + ldrb r0, [r0, #0x15] + cmp r0, #2 + beq _021E56DC + ldr r1, _021E581C ; =0x0220D3F0 + mov r0, #2 + mov r2, r4 + bl FUN_021E1E30 +_021E56DC: + bl FUN_021E26E4 + ldr r0, [r0, #0x20c] + cmp r0, #0 + moveq r7, #1 + movne r7, #0 + bl FUN_021E26E4 + mov r6, r0 + bl FUN_021E26E4 + ldr r0, [r0, #0x20c] + bl FUN_021E1F18 + mov r5, r0 + bl FUN_021E26E4 + str r5, [sp] + ldr r1, [r0, #0x468] + mov r0, #0 + str r1, [sp, #4] + ldr r5, [r6, #0x464] + mov r2, r7 + mov r1, r0 + mov r3, r0 + blx r5 + bl FUN_021E26E4 + ldrb r0, [r0, #0x15] + cmp r0, #0 + beq _021E5750 + bl FUN_021E26E4 + ldrb r0, [r0, #0x15] + cmp r0, #1 + bne _021E5758 +_021E5750: + bl FUN_021E8034 + b _021E57DC +_021E5758: + bl FUN_021E26E4 + ldr r0, [r0, #0xe4] + cmp r0, #0 + beq _021E5780 + bl FUN_021E26E4 + ldr r0, [r0, #0xe4] + bl FUN_02203E80 + bl FUN_021E26E4 + mov r1, #0 + str r1, [r0, #0xe4] +_021E5780: + bl FUN_02200D6C + bl FUN_021E26E4 + ldrb r0, [r0, #0x15] + cmp r0, #2 + bne _021E57C8 + bl FUN_021E85D4 + bl FUN_021E397C + cmp r0, #0 + addne sp, sp, #0x20 + ldmneia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + ldr r0, _021E5820 ; =0x022106DC + ldrb r1, [r0] + cmp r1, #1 + moveq r1, #1 + streqb r1, [r0, #1] + mov r0, #0xa + bl FUN_021E26D0 + b _021E57D0 +_021E57C8: + mov r0, #1 + bl FUN_021E26D0 +_021E57D0: + bl FUN_021E26E4 + mov r1, #0 + str r1, [r0, #0x20c] +_021E57DC: + bl FUN_021E26E4 + mov r1, #0 + strb r1, [r0, #0x1a9] +_021E57E8: + cmp r4, #0 + addeq sp, sp, #0x20 + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + bl FUN_021E26E4 + ldrb r0, [r0, #0x15] + cmp r0, #3 + addeq sp, sp, #0x20 + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + bl FUN_021E26E4 + ldr r0, [r0, #0xe4] + bl FUN_02203C04 + add sp, sp, #0x20 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + .align 2, 0 +_021E581C: .word 0x0220D3F0 +_021E5820: .word 0x022106DC + + arm_func_start FUN_021E5824 +FUN_021E5824: ; 0x021E5824 + stmdb sp!, {r4, r5, r6, r7, r8, sb, lr} + sub sp, sp, #0xc + mov r4, #1 + bl FUN_021E26E4 + ldrb r0, [r0, #0xd] + cmp r0, #1 + blt _021E58BC + mov r5, #0xa +_021E5844: + bl FUN_021E26E4 + mov sb, r0 + bl FUN_021E26E4 + mov r8, r0 + bl FUN_021E26E4 + mov r7, r0 + bl FUN_021E26E4 + mov r6, r0 + bl FUN_021E26E4 + add r1, r6, #0x348 + str r1, [sp] + ldr ip, [r0, #0x348] + add r3, r7, r4, lsl #1 + add ip, ip, #1 + str ip, [sp, #4] + add r1, sb, r4, lsl #2 + add r2, r8, r4, lsl #2 + ldrh r3, [r3, #0xa4] + ldr r1, [r1, #0xf4] + ldr r2, [r2, #0x24] + mov r0, r5 + bl FUN_021E7884 + cmp r0, #0 + addne sp, sp, #0xc + ldmneia sp!, {r4, r5, r6, r7, r8, sb, pc} + add r4, r4, #1 + bl FUN_021E26E4 + ldrb r0, [r0, #0xd] + cmp r4, r0 + ble _021E5844 +_021E58BC: + bl FUN_021E26E4 + mov r1, #0 + strb r1, [r0, #0x17] + bl FUN_021E26E4 + mov r1, #0 + str r1, [r0, #0x20] + bl FUN_021E26E4 + mov r1, #1 + strb r1, [r0, #0x1a8] + bl FUN_021E26E4 + ldr r0, [r0, #4] + ldr r0, [r0] + bl FUN_021FD45C + bl FUN_021E26E4 + mov r1, #0 + strb r1, [r0, #0x1a8] + mov r0, r1 + add sp, sp, #0xc + ldmia sp!, {r4, r5, r6, r7, r8, sb, pc} + + arm_func_start FUN_021E5908 +FUN_021E5908: ; 0x021E5908 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #4 + mov r4, #1 + bl FUN_021E26E4 + ldrb r0, [r0, #0x15] + cmp r0, #3 + bne _021E5950 + bl FUN_021E26E4 + ldrb r0, [r0, #0xd] + cmp r0, #0 + beq _021E5938 + bl FUN_021E4B40 +_021E5938: + ldr r1, _021E59D0 ; =0xFFFEC5D2 + mov r0, #6 + bl FUN_021E8E08 + add sp, sp, #4 + mov r0, #0 + ldmia sp!, {r4, r5, pc} +_021E5950: + bl FUN_021E26E4 + mov r5, r0 + bl FUN_021E26E4 + ldrb r0, [r0, #0xd] + strb r0, [r5, #0x14] + bl FUN_021E26E4 + mov r1, #0 + str r1, [r0, #0x208] + bl FUN_021E26E4 + ldr r0, [r0, #0x19c] + cmp r0, #0 + beq _021E5998 + bl FUN_021E26E4 + ldr r0, [r0, #0x19c] + bl FUN_022006B4 + bl FUN_021E26E4 + mov r1, #0 + str r1, [r0, #0x19c] +_021E5998: + bl FUN_021E26E4 + ldrb r0, [r0, #0xd] + cmp r0, #0 + beq _021E59B0 + bl FUN_021E4CB4 + b _021E59C4 +_021E59B0: + mov r0, #4 + bl FUN_021E26D0 + mov r0, #0 + bl FUN_021E5C44 + mov r4, r0 +_021E59C4: + mov r0, r4 + add sp, sp, #4 + ldmia sp!, {r4, r5, pc} + .align 2, 0 +_021E59D0: .word 0xFFFEC5D2 + + arm_func_start FUN_021E59D4 +FUN_021E59D4: ; 0x021E59D4 + stmdb sp!, {r4, r5, r6, lr} + mov r5, r0 + bl FUN_021E26E4 + ldrb r0, [r0, #0x17] + cmp r0, #0 + beq _021E5A0C + bl FUN_021E26E4 + mov r4, r0 + bl FUN_021E26E4 + ldr r1, [r4, #0x20] + ldr r0, [r0, #0x200] + cmp r1, r0 + moveq r4, #0 + beq _021E5A10 +_021E5A0C: + mov r4, #1 +_021E5A10: + cmp r4, #0 + beq _021E5A3C + bl FUN_021E26E4 + mov r1, #0 + strb r1, [r0, #0x17] + bl FUN_021E26E4 + mov r1, #0 + str r1, [r0, #0x20] + bl FUN_021E26E4 + ldr r0, [r0, #0x10] + bl FUN_02202308 +_021E5A3C: + bl FUN_021E26E4 + ldrb r0, [r0, #0xd] + cmp r0, #0x1f + bhs _021E5A6C + bl FUN_021E26E4 + mov r6, r0 + bl FUN_021E26E4 + ldrb r0, [r0, #0xd] + mov r1, #0 + add r0, r0, #1 + add r0, r6, r0, lsl #2 + str r1, [r0, #0xf4] +_021E5A6C: + bl FUN_021E26E4 + mov r1, #0xff + strb r1, [r0, #0x3cc] + bl FUN_021E26E4 + ldr r0, [r0, #0x19c] + cmp r0, #0 + beq _021E5AA0 + bl FUN_021E26E4 + ldr r0, [r0, #0x19c] + bl FUN_022006B4 + bl FUN_021E26E4 + mov r1, #0 + str r1, [r0, #0x19c] +_021E5AA0: + bl FUN_021E26E4 + mov r6, r0 + bl FUN_021E26E4 + ldrb r0, [r0, #0xd] + strb r0, [r6, #0x14] + bl FUN_021E26E4 + mov r1, #0 + str r1, [r0, #0x204] + cmp r4, #0 + bne _021E5AE0 + bl FUN_021E26E4 + ldrb r0, [r0, #0x15] + cmp r0, #3 + beq _021E5BE8 + bl FUN_021E4CB4 + b _021E5BE8 +_021E5AE0: + bl FUN_021E26E4 + ldrb r0, [r0, #0x15] + cmp r0, #0 + bne _021E5B1C + mov r0, #3 + bl FUN_021E26D0 + bl FUN_021E26E4 + mov r1, #2 + str r1, [r0, #0xe8] + bl FUN_021E26E4 + mov r4, r0 + bl OS_GetTick + str r0, [r4, #0xec] + str r1, [r4, #0xf0] + b _021E5BE8 +_021E5B1C: + bl FUN_021E26E4 + ldrb r0, [r0, #0x15] + cmp r0, #1 + bne _021E5B48 + mov r0, #4 + bl FUN_021E26D0 + mov r1, #0 + mov r2, r1 + mov r0, #1 + bl FUN_021E5D30 + b _021E5BE8 +_021E5B48: + bl FUN_021E26E4 + ldrb r0, [r0, #0x15] + cmp r0, #2 + bne _021E5BE8 + mov r0, #0xe + bl FUN_021E26D0 + bl FUN_021E26E4 + mov r1, #0 + str r1, [r0, #0x1d8] + bl FUN_021E26E4 + add r1, r0, #0x100 + mov r2, #0 + mov r0, r5 + strh r2, [r1, #0xb2] + bl FUN_021E4B78 + mov r5, #1 + bl FUN_021E26E4 + ldrb r0, [r0, #0xd] + cmp r0, #1 + blt _021E5BD0 + mov r4, #0xd +_021E5B9C: + bl FUN_021E26E4 + add r0, r0, r5, lsl #2 + ldr r0, [r0, #0xf4] + mov r1, r4 + bl FUN_021E4604 + cmp r0, #0 + moveq r0, #0 + ldmeqia sp!, {r4, r5, r6, pc} + add r5, r5, #1 + bl FUN_021E26E4 + ldrb r0, [r0, #0xd] + cmp r5, r0 + ble _021E5B9C +_021E5BD0: + bl FUN_021E26E4 + ldrb r0, [r0, #0xd] + cmp r0, #0 + bne _021E5BE8 + mov r0, #2 + bl FUN_021E4CF8 +_021E5BE8: + mov r0, #1 + ldmia sp!, {r4, r5, r6, pc} + + arm_func_start FUN_021E5BF0 +FUN_021E5BF0: ; 0x021E5BF0 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #0xc + mov r5, r0 + bl FUN_021E26E4 + mov r4, r0 + bl FUN_021E26E4 + mov r1, #0 + str r1, [sp] + str r1, [sp, #4] + ldrh r3, [r0, #0xa4] + ldr r2, [r4, #0x24] + mov r1, r5 + mov r0, #5 + bl FUN_021E7884 + mov r4, r0 + bl FUN_021E26E4 + mov r1, #0 + str r1, [r0, #0x204] + mov r0, r4 + add sp, sp, #0xc + ldmia sp!, {r4, r5, pc} + + arm_func_start FUN_021E5C44 +FUN_021E5C44: ; 0x021E5C44 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #4 + mov r5, r0 + bl FUN_021E26E4 + mov r1, #0 + str r1, [r0, #0x208] + bl FUN_021E26E4 + mov r1, #0 + str r1, [r0, #0x204] + bl FUN_021E26E4 + mov r1, #0 + strb r1, [r0, #0x1a7] + bl FUN_021E26E4 + mov r4, r0 + bl OS_GetTick + str r0, [r4, #0x1cc] + str r1, [r4, #0x1d0] + bl FUN_021E26E4 + ldrb r0, [r0, #0x15] + cmp r0, #0 + bne _021E5CC0 + mov r0, #3 + bl FUN_021E26D0 + mov r0, #0 + bl FUN_021E7E5C + bl FUN_021E38E8 + cmp r0, #0 + beq _021E5D20 + add sp, sp, #4 + mov r0, #0 + ldmia sp!, {r4, r5, pc} +_021E5CC0: + bl FUN_021E26E4 + ldrb r0, [r0, #0x15] + cmp r0, #1 + bne _021E5CF8 + mov r0, #0 + mov r1, r0 + mov r2, r5 + bl FUN_021E5D30 + bl FUN_021E61EC + cmp r0, #0 + beq _021E5D20 + add sp, sp, #4 + mov r0, #0 + ldmia sp!, {r4, r5, pc} +_021E5CF8: + bl FUN_021E26E4 + ldrb r0, [r0, #0x15] + cmp r0, #3 + bne _021E5D20 + ldr r1, _021E5D2C ; =0xFFFEC5E6 + mov r0, #6 + bl FUN_021E8E08 + add sp, sp, #4 + mov r0, #0 + ldmia sp!, {r4, r5, pc} +_021E5D20: + mov r0, #1 + add sp, sp, #4 + ldmia sp!, {r4, r5, pc} + .align 2, 0 +_021E5D2C: .word 0xFFFEC5E6 + + arm_func_start FUN_021E5D30 +FUN_021E5D30: ; 0x021E5D30 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x23c + movs r4, r1 + str r0, [sp] + str r2, [sp, #4] + beq _021E5D58 + bl FUN_021E26E4 + ldrb r0, [r0, #0x1a5] + str r0, [sp, #0xc] + b _021E5D90 +_021E5D58: + bl FUN_021E26E4 + mov r5, r0 + bl FUN_021E26E4 + ldr r0, [r0, #0x344] + ldrb r1, [r5, #0x1a5] + sub r0, r0, #1 + cmp r1, r0 + movge r0, #0 + strge r0, [sp, #0xc] + bge _021E5D90 + bl FUN_021E26E4 + ldrb r0, [r0, #0x1a5] + add r0, r0, #1 + str r0, [sp, #0xc] +_021E5D90: + cmp r4, #0 + moveq r0, #1 + mov sb, #0 + streq r0, [sp, #8] + strne sb, [sp, #8] + mov r7, #1 + mov r8, #0 + mov r5, #0x2f + mov r4, #0xa +_021E5DB4: + ldr r0, [sp, #8] + cmp r0, #0 + bne _021E5DC8 + cmp sb, #0 + beq _021E5DFC +_021E5DC8: + bl FUN_021E26E4 + ldrb r1, [r0, #0x1a5] + add r1, r1, #1 + strb r1, [r0, #0x1a5] + bl FUN_021E26E4 + mov r6, r0 + bl FUN_021E26E4 + ldrb r1, [r6, #0x1a5] + ldr r0, [r0, #0x344] + cmp r1, r0 + blt _021E5DFC + bl FUN_021E26E4 + strb r8, [r0, #0x1a5] +_021E5DFC: + cmp sb, #0 + beq _021E5E50 + bl FUN_021E26E4 + ldrb r1, [r0, #0x1a5] + ldr r0, [sp, #0xc] + cmp r0, r1 + bne _021E5E50 + bl FUN_021E26E4 + ldr r1, _021E6028 ; =0x00000BB8 + str r1, [r0, #0x1c8] + bl FUN_021E26E4 + mov r4, r0 + bl OS_GetTick + str r0, [r4, #0x1cc] + str r1, [r4, #0x1d0] + bl FUN_021E26E4 + mov r1, #0 + str r1, [r0, #0x1bc] + add sp, sp, #0x23c + mov r0, r1 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +_021E5E50: + mov sb, r7 + bl FUN_021E0F00 + mov fp, r0 + bl FUN_021E26E4 + mov sl, r0 + bl FUN_021E26E4 + mov r6, r0 + bl FUN_021E26E4 + mov r1, r0 + ldrb r2, [r1, #0x1a5] + ldr r3, [sl, #0x2fc] + mov r1, #0xc + add r2, r6, r2 + ldrb r2, [r2, #0x304] + mov r0, fp + mla r1, r2, r1, r3 + bl FUN_02096DA0 + movs sl, r0 + beq _021E5DB4 + mvn r0, #0 + cmp sl, r0 + beq _021E5DB4 + bl FUN_021E26E4 + mov r6, r0 + bl FUN_021E26E4 + mov fp, r0 + bl FUN_021E26E4 + ldr r2, [r6, #0x2fc] + ldrb r1, [r0, #0x1a5] + mov r0, #0xc + add r1, fp, r1 + ldrb r1, [r1, #0x304] + mla r0, r1, r0, r2 + bl FUN_02097000 + cmp r0, #0 + beq _021E5DB4 + mov r6, r7 + bl FUN_021E26E4 + ldrb r0, [r0, #0xd] + cmp r0, #1 + blt _021E5F1C +_021E5EF4: + bl FUN_021E26E4 + add r0, r0, r6, lsl #2 + ldr r0, [r0, #0xf4] + cmp sl, r0 + beq _021E5F1C + add r6, r6, #1 + bl FUN_021E26E4 + ldrb r0, [r0, #0xd] + cmp r6, r0 + ble _021E5EF4 +_021E5F1C: + bl FUN_021E26E4 + ldrb r0, [r0, #0xd] + cmp r6, r0 + ble _021E5DB4 + bl FUN_021E26E4 + ldr r0, [r0] + mov r1, sl + add r2, sp, #0x18 + bl FUN_021F0664 + mov r6, r0 + bl FUN_021E26E4 + ldr r0, [r0] + ldr r1, [sp, #0x18] + add r2, sp, #0x28 + bl FUN_021F06E4 + orrs r0, r6, r0 + bne _021E5DB4 + ldr r0, [sp, #0x2c] + cmp r0, #4 + bne _021E5DB4 + ldr r0, _021E602C ; =0x0220D3F4 + add r1, sp, #0x1c + add r2, sp, #0x30 + mov r3, r5 + bl FUN_021DE9F4 + mov r6, r0 + ldr r0, _021E6030 ; =0x0220D3F8 + add r1, sp, #0x12 + add r2, sp, #0x30 + mov r3, r5 + bl FUN_021DE9F4 + mov fp, r0 + ldr r0, _021E6034 ; =0x0220D3FC + add r1, sp, #0x10 + add r2, sp, #0x30 + mov r3, r5 + bl FUN_021DE9F4 + cmp r6, #0 + ble _021E5DB4 + cmp fp, #0 + ble _021E5DB4 + cmp r0, #0 + ble _021E5DB4 + add r0, sp, #0x1c + mov r1, r8 + mov r2, r4 + bl strtoul + cmp r0, #3 + bne _021E5DB4 + add r0, sp, #0x12 + mov r1, r8 + mov r2, r4 + bl strtoul + mov r6, r0 + bl FUN_021E26E4 + ldrb r0, [r0, #0x16] + cmp r6, r0 + bne _021E5DB4 + ldr r0, [sp, #4] + cmp sl, r0 + moveq r0, #1 + streq r0, [sp] + ldr r1, [sp] + mov r0, sl + bl FUN_021E6038 + add sp, sp, #0x23c + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_021E6028: .word 0x00000BB8 +_021E602C: .word 0x0220D3F4 +_021E6030: .word 0x0220D3F8 +_021E6034: .word 0x0220D3FC + + arm_func_start FUN_021E6038 +FUN_021E6038: ; 0x021E6038 + stmdb sp!, {r4, r5, r6, r7, lr} + sub sp, sp, #0x14 + mov r5, r0 + cmp r1, #0 + bne _021E606C + bl FUN_021E26E4 + ldr r0, [r0, #0x1c] + cmp r0, #0 + bne _021E60A0 + bl FUN_021E26E4 + ldrh r0, [r0, #0x1a] + cmp r0, #0 + bne _021E60A0 +_021E606C: + bl FUN_021E26E4 + mov r1, #1 + str r1, [r0, #0x1bc] + bl FUN_021E26E4 + mov r4, r0 + bl OS_GetTick + str r0, [r4, #0x1c0] + str r1, [r4, #0x1c4] + bl FUN_021E26E4 + str r5, [r0, #0xf4] + add sp, sp, #0x14 + mov r0, #0 + ldmia sp!, {r4, r5, r6, r7, pc} +_021E60A0: + bl FUN_021E26E4 + ldrb r0, [r0, #0x15] + cmp r0, #0 + bne _021E6124 + bl FUN_021E26E4 + ldr r0, [r0, #0xe4] + mov r1, #0 + bl FUN_02203BF4 + mov r6, r0 + bl FUN_021E26E4 + mov r4, r0 + ldr r1, _021E61E4 ; =0x0220D3AC + mov r0, r6 + mov r2, #0 + bl FUN_0220394C + str r0, [r4, #0xf4] + bl FUN_021E26E4 + mov r4, r0 + mov r0, r6 + bl FUN_02203908 + str r0, [r4, #0x24] + bl FUN_021E26E4 + mov r4, r0 + mov r0, r6 + bl FUN_022038E4 + strh r0, [r4, #0xa4] + bl FUN_021E26E4 + mov r6, r0 + bl FUN_021E26E4 + ldr r0, [r0, #0xf4] + mov r4, #1 + str r0, [r6, #0x204] + b _021E6160 +_021E6124: + bl FUN_021E26E4 + ldrb r0, [r0, #0x15] + cmp r0, #1 + bne _021E613C + bl FUN_021E26E4 + str r5, [r0, #0xf4] +_021E613C: + bl FUN_021E26E4 + str r5, [r0, #0x204] + bl FUN_021E26E4 + ldr r0, [r0, #0x1c] + str r0, [sp, #0xc] + bl FUN_021E26E4 + ldrh r0, [r0, #0x1a] + mov r4, #3 + str r0, [sp, #0x10] +_021E6160: + bl FUN_021E26E4 + ldr r1, _021E61E8 ; =0x00001770 + str r1, [r0, #0x1c8] + bl FUN_021E26E4 + mov r6, r0 + bl OS_GetTick + str r0, [r6, #0x1cc] + str r1, [r6, #0x1d0] + bl FUN_021E26E4 + mov r1, #0 + str r1, [r0, #0x1bc] + bl FUN_021E26E4 + ldr r0, [r0, #0x208] + cmp r0, #0 + movne r7, #0xb + moveq r7, #1 + bl FUN_021E26E4 + ldrb r0, [r0, #0x15] + str r0, [sp, #8] + bl FUN_021E26E4 + mov r6, r0 + bl FUN_021E26E4 + add r2, sp, #8 + str r2, [sp] + mov r3, r0 + str r4, [sp, #4] + ldrh r3, [r3, #0xa4] + ldr r2, [r6, #0x24] + mov r1, r5 + mov r0, r7 + bl FUN_021E7884 + add sp, sp, #0x14 + ldmia sp!, {r4, r5, r6, r7, pc} + .align 2, 0 +_021E61E4: .word 0x0220D3AC +_021E61E8: .word 0x00001770 + + arm_func_start FUN_021E61EC +FUN_021E61EC: ; 0x021E61EC + stmdb sp!, {r4, lr} + mov r4, r0 + bl FUN_021E26E4 + ldrb r0, [r0, #0x15] + cmp r0, #0 + bne _021E6210 + mov r0, r4 + bl FUN_021E38E8 + ldmia sp!, {r4, pc} +_021E6210: + mov r0, r4 + bl FUN_021E397C + ldmia sp!, {r4, pc} + + arm_func_start FUN_021E621C +FUN_021E621C: ; 0x021E621C + stmdb sp!, {r4, r5, r6, lr} + mov r5, r1 + ldr r1, [r5] + mov r6, r0 + add r4, r1, #2 + cmp r4, #2 + bls _021E6250 + bl FUN_021E26E4 + sub r2, r4, #2 + add r1, r0, #0x350 + add r0, r5, #4 + mov r2, r2, lsl #2 + bl MIi_CpuCopy32 +_021E6250: + bl FUN_021E26E4 + sub r1, r4, #1 + str r1, [r0, #0x348] + bl FUN_021E26E4 + str r6, [r0, #0x34c] + ldmia sp!, {r4, r5, r6, pc} + + arm_func_start FUN_021E6268 +FUN_021E6268: ; 0x021E6268 + stmdb sp!, {r4, r5, r6, r7, r8, sb, lr} + sub sp, sp, #0x14 + mov r6, r0 + mov r5, r1 + mov r4, r2 + bl FUN_021E26E4 + ldrb r0, [r0, #0x17] + cmp r0, #0 + beq _021E62A4 + bl FUN_021E26E4 + ldr r0, [r0, #0x20] + cmp r6, r0 + addeq sp, sp, #0x14 + moveq r0, #0 + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, pc} +_021E62A4: + bl FUN_021E26E4 + mov r1, #1 + strb r1, [r0, #0x17] + bl FUN_021E26E4 + str r6, [r0, #0x20] + bl FUN_021E26E4 + mov r1, #0 + str r1, [r0, #0x1bc] + bl FUN_021E26E4 + mov r1, #0 + str r1, [r0, #0x1c8] + bl FUN_021E26E4 + ldr r0, [r0, #0x10] + bl FUN_02202308 + bl FUN_021E26E4 + mov r1, #0 + str r1, [r0, #0x204] + bl FUN_021E26E4 + mov r7, r0 + bl FUN_021E26E4 + ldrb r0, [r0, #0x14] + add r0, r0, #1 + add r0, r7, r0, lsl #2 + str r6, [r0, #0xf4] + bl FUN_021E26E4 + mov r7, r0 + bl FUN_021E26E4 + ldrb r0, [r0, #0x14] + add r0, r0, #1 + add r0, r7, r0, lsl #2 + str r5, [r0, #0x24] + bl FUN_021E26E4 + mov r7, r0 + bl FUN_021E26E4 + ldrb r0, [r0, #0x14] + add r0, r0, #1 + add r0, r7, r0, lsl #1 + strh r4, [r0, #0xa4] + bl FUN_021E26E4 + str r5, [r0, #0x1b8] + bl FUN_021E26E4 + add r0, r0, #0x100 + strh r4, [r0, #0xb4] + bl FUN_021E26E4 + mov r5, r0 + bl FUN_021E26E4 + mov r4, r0 + bl FUN_021E40F4 + ldrb r1, [r4, #0x14] + add r1, r1, #1 + add r1, r5, r1 + strb r0, [r1, #0x2d0] + str r6, [sp, #8] + bl FUN_021E26E4 + mov r4, r0 + bl FUN_021E26E4 + ldrb r0, [r0, #0x14] + mov r7, #1 + add r0, r0, #1 + add r0, r4, r0 + ldrb r0, [r0, #0x2d0] + str r0, [sp, #0xc] + bl FUN_021E26E4 + ldrb r0, [r0, #0x14] + cmp r0, #1 + blt _021E6414 + add r6, sp, #8 + mov r5, #2 + mov r4, #7 +_021E63B8: + bl FUN_021E26E4 + mov sb, r0 + bl FUN_021E26E4 + mov r8, r0 + bl FUN_021E26E4 + str r6, [sp] + str r5, [sp, #4] + add r0, r0, r7, lsl #1 + add r1, sb, r7, lsl #2 + add r2, r8, r7, lsl #2 + ldrh r3, [r0, #0xa4] + ldr r1, [r1, #0xf4] + ldr r2, [r2, #0x24] + mov r0, r4 + bl FUN_021E7884 + cmp r0, #0 + addne sp, sp, #0x14 + ldmneia sp!, {r4, r5, r6, r7, r8, sb, pc} + add r7, r7, #1 + bl FUN_021E26E4 + ldrb r0, [r0, #0x14] + cmp r7, r0 + ble _021E63B8 +_021E6414: + mov r0, #1 + bl FUN_021E3E28 + mov r0, #0 + add sp, sp, #0x14 + ldmia sp!, {r4, r5, r6, r7, r8, sb, pc} + + arm_func_start FUN_021E6428 +FUN_021E6428: ; 0x021E6428 + stmdb sp!, {r4, r5, r6, r7, r8, lr} + mov r7, r0 + mov r6, r1 + mov r5, r2 + mov r8, r3 + bl FUN_021E26E4 + ldrb r0, [r0, #0x15] + cmp r0, #0 + beq _021E6490 + cmp r0, #1 + beq _021E6460 + cmp r0, #2 + beq _021E6670 + b _021E6724 +_021E6460: + bl FUN_021E26E4 + ldr r0, [r0] + mov r1, r7 + bl FUN_021F05F4 + cmp r0, #0 + moveq r4, #0xff + beq _021E6724 + mov r0, r7 + bl FUN_021E4074 + cmp r0, #0 + moveq r4, #3 + beq _021E6724 +_021E6490: + bl FUN_021E26E4 + ldrb r0, [r0, #0x15] + cmp r8, r0 + bne _021E64F8 + bl FUN_021E26E4 + ldrb r0, [r0, #0x1a9] + cmp r0, #0 + bne _021E64F8 + bl FUN_021E26E4 + mov r4, r0 + bl FUN_021E26E4 + ldrb r1, [r4, #0x14] + ldrb r0, [r0, #0x16] + cmp r1, r0 + beq _021E64F8 + bl FUN_021E26E4 + ldrb r0, [r0, #0x17] + cmp r0, #0 + beq _021E655C + bl FUN_021E26E4 + mov r4, r0 + bl FUN_021E26E4 + ldr r1, [r4, #0x20] + ldr r0, [r0, #0x200] + cmp r1, r0 + bne _021E655C +_021E64F8: + mov r4, #3 + bl FUN_021E26E4 + ldrb r0, [r0, #0x15] + cmp r0, #0 + bne _021E6724 + bl FUN_021E26E4 + ldr r0, [r0, #0x10] + ldr r0, [r0, #0xb4] + cmp r0, #0 + bne _021E6724 + bl FUN_021E26E4 + ldrb r0, [r0, #0x17] + cmp r0, #0 + beq _021E6724 + bl FUN_021E26E4 + mov r5, r0 + bl FUN_021E26E4 + ldr r1, [r5, #0x20] + ldr r0, [r0, #0x200] + cmp r1, r0 + bne _021E6724 + bl FUN_021E26E4 + ldr r0, [r0, #0x10] + bl FUN_02202308 + b _021E6724 +_021E655C: + bl FUN_021E26E4 + ldr r0, [r0, #0x1a0] + cmp r0, #3 + beq _021E657C + bl FUN_021E26E4 + ldr r0, [r0, #0x1a0] + cmp r0, #4 + bne _021E65AC +_021E657C: + bl FUN_021E26E4 + ldr r0, [r0, #0x1c] + cmp r0, #0 + bne _021E659C + bl FUN_021E26E4 + ldrh r0, [r0, #0x1a] + cmp r0, #0 + beq _021E65AC +_021E659C: + cmp r6, #0 + bne _021E65B4 + cmp r5, #0 + bne _021E65B4 +_021E65AC: + mov r4, #4 + b _021E6724 +_021E65B4: + bl FUN_021E26E4 + ldr r0, [r0, #0x204] + cmp r0, #0 + beq _021E6668 + bl FUN_021E26E4 + ldr r0, [r0, #0x204] + cmp r7, r0 + bne _021E6610 + ldr r0, [sp, #0x18] + cmp r0, #0 + bne _021E6600 + bl FUN_021E26E4 + ldr r0, [r0, #0x200] + cmp r0, r7 + bge _021E6608 + bl FUN_021E26E4 + ldr r0, [r0, #0x208] + cmp r7, r0 + beq _021E6608 +_021E6600: + mov r4, #2 + b _021E6724 +_021E6608: + mov r4, #0xff + b _021E6724 +_021E6610: + ldr r0, [sp, #0x18] + cmp r0, #0 + bne _021E663C + bl FUN_021E26E4 + ldr r0, [r0, #0x200] + cmp r0, r7 + bge _021E6660 + bl FUN_021E26E4 + ldr r0, [r0, #0x208] + cmp r0, #0 + bne _021E6660 +_021E663C: + bl FUN_021E26E4 + ldr r0, [r0, #0x204] + bl FUN_021E5BF0 + bl FUN_021E61EC + cmp r0, #0 + movne r0, #0xff + ldmneia sp!, {r4, r5, r6, r7, r8, pc} + mov r4, #2 + b _021E6724 +_021E6660: + mov r4, #3 + b _021E6724 +_021E6668: + mov r4, #2 + b _021E6724 +_021E6670: + bl FUN_021E26E4 + ldr r0, [r0] + mov r1, r7 + bl FUN_021F05F4 + cmp r0, #0 + moveq r4, #0xff + beq _021E6724 + cmp r8, #3 + bne _021E66B0 + bl FUN_021E26E4 + mov r4, r0 + bl FUN_021E26E4 + ldrb r1, [r4, #0x14] + ldrb r0, [r0, #0x16] + cmp r1, r0 + bne _021E66B8 +_021E66B0: + mov r4, #3 + b _021E6724 +_021E66B8: + ldr r0, _021E672C ; =0x022106DC + ldrb r1, [r0] + cmp r1, #1 + bne _021E66D8 + ldrb r0, [r0, #1] + cmp r0, #1 + moveq r4, #0x13 + beq _021E6724 +_021E66D8: + bl FUN_021E26E4 + ldr r0, [r0, #0x1a0] + cmp r0, #0xa + bne _021E6718 + bl FUN_021E26E4 + ldr r0, [r0, #0x1c] + cmp r0, #0 + bne _021E6708 + bl FUN_021E26E4 + ldrh r0, [r0, #0x1a] + cmp r0, #0 + beq _021E6718 +_021E6708: + cmp r6, #0 + bne _021E6720 + cmp r5, #0 + bne _021E6720 +_021E6718: + mov r4, #4 + b _021E6724 +_021E6720: + mov r4, #2 +_021E6724: + mov r0, r4 + ldmia sp!, {r4, r5, r6, r7, r8, pc} + .align 2, 0 +_021E672C: .word 0x022106DC + + arm_func_start FUN_021E6730 +FUN_021E6730: ; 0x021E6730 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} + sub sp, sp, #0x118 + mov sb, r0 + mov r8, r1 + mov r7, r2 + mov sl, r3 + ldr r6, [sp, #0x138] + ldr r5, [sp, #0x13c] + mov r4, #0 + bl FUN_021E26E4 + cmp r0, #0 + beq _021E6770 + bl FUN_021E26E4 + ldr r0, [r0, #0x1a0] + cmp r0, #0 + bne _021E677C +_021E6770: + add sp, sp, #0x118 + mov r0, #1 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} +_021E677C: + bl FUN_021DF88C + cmp r0, #5 + bne _021E67AC + bl FUN_021E26E4 + ldr r0, [r0, #0x1a0] + cmp r0, #1 + bne _021E67AC + bl FUN_021E26E4 + ldr r0, [r0, #0xf4] + cmp r8, r0 + bne _021E67AC + bl FUN_021E3E9C +_021E67AC: + cmp sb, #0x40 + bgt _021E684C + cmp sb, #0x40 + bge _021E7594 + cmp sb, #0x20 + addls pc, pc, sb, lsl #2 + b _021E7608 +_021E67C8: ; jump table + b _021E7608 ; case 0 + b _021E6854 ; case 1 + b _021E6A20 ; case 2 + b _021E6BF8 ; case 3 + b _021E6C58 ; case 4 + b _021E6D78 ; case 5 + b _021E6DF4 ; case 6 + b _021E6F04 ; case 7 + b _021E701C ; case 8 + b _021E719C ; case 9 + b _021E71F0 ; case 10 + b _021E6854 ; case 11 + b _021E7298 ; case 12 + b _021E730C ; case 13 + b _021E730C ; case 14 + b _021E730C ; case 15 + b _021E7330 ; case 16 + b _021E7380 ; case 17 + b _021E7424 ; case 18 + b _021E7480 ; case 19 + b _021E7608 ; case 20 + b _021E7608 ; case 21 + b _021E7608 ; case 22 + b _021E7608 ; case 23 + b _021E7608 ; case 24 + b _021E7608 ; case 25 + b _021E7608 ; case 26 + b _021E7608 ; case 27 + b _021E7608 ; case 28 + b _021E7608 ; case 29 + b _021E7608 ; case 30 + b _021E7608 ; case 31 + b _021E7498 ; case 32 +_021E684C: + cmp sb, #0x41 + b _021E7608 +_021E6854: + bl FUN_021E26E4 + ldrb r0, [r0, #0x15] + cmp r0, #0 + ldrne r0, [r6, #8] + ldrne r7, [r6, #4] + movne r0, r0, lsl #0x10 + movne sl, r0, lsr #0x10 + cmp sb, #0xb + moveq r0, #1 + movne r0, #0 + str r0, [sp] + ldr r3, [r6] + mov r0, r8 + mov r1, r7 + mov r2, sl + bl FUN_021E6428 + mov r5, r0 + cmp r5, #2 + bne _021E6994 + bl FUN_021E26E4 + mov r1, #0 + str r1, [r0, #0x1dc] + mov r0, r8 + mov r1, r7 + mov r2, sl + bl FUN_021E6268 + bl FUN_021E61EC + cmp r0, #0 + addne sp, sp, #0x118 + movne r0, #0 + ldmneia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + bl FUN_021E26E4 + ldrb r0, [r0, #0x15] + cmp r0, #2 + bne _021E6918 + bl FUN_021E26E4 + ldr r0, [r0, #0x46c] + cmp r0, #0 + beq _021E6918 + bl FUN_021E26E4 + mov r6, r0 + mov r0, r8 + bl FUN_021E1F18 + mov r4, r0 + bl FUN_021E26E4 + ldr r1, [r0, #0x470] + ldr r2, [r6, #0x46c] + mov r0, r4 + blx r2 +_021E6918: + bl FUN_021E26E4 + ldrb r0, [r0, #0x14] + mov r4, #1 + str r0, [sp, #0x14] + bl FUN_021E26E4 + ldrb r0, [r0, #0x14] + cmp r0, #1 + blt _021E6960 + add r6, sp, #0x14 +_021E693C: + bl FUN_021E26E4 + add r0, r0, r4, lsl #2 + ldr r0, [r0, #0xf4] + str r0, [r6, r4, lsl #2] + add r4, r4, #1 + bl FUN_021E26E4 + ldrb r0, [r0, #0x14] + cmp r4, r0 + ble _021E693C +_021E6960: + bl FUN_021E26E4 + ldr r1, [r0, #0x1c] + add r0, sp, #0x14 + str r1, [r0, r4, lsl #2] + bl FUN_021E26E4 + ldrh r2, [r0, #0x1a] + add r3, r4, #1 + add r1, sp, #0x14 + mov r0, #0xb + str r2, [r1, r3, lsl #2] + add r4, r4, #2 + bl FUN_021E26D0 + b _021E69E0 +_021E6994: + cmp r5, #3 + bne _021E69E0 + bl FUN_021E26E4 + ldrb r0, [r0, #0x16] + cmp r0, #0 + beq _021E69E0 + bl FUN_021E26E4 + mov r6, r0 + bl FUN_021E26E4 + ldrb r1, [r6, #0x14] + ldrb r0, [r0, #0x16] + cmp r1, r0 + bne _021E69E0 + bl FUN_021E26E4 + ldrb r0, [r0, #0x15] + cmp r0, #2 + moveq r0, #0x10 + streq r0, [sp, #0x14] + moveq r4, #1 +_021E69E0: + cmp r5, #0xff + beq _021E7608 + add r1, sp, #0x14 + str r1, [sp] + mov r0, r5 + mov r1, r8 + mov r2, r7 + mov r3, sl + str r4, [sp, #4] + bl FUN_021E7884 + bl FUN_021E61EC + cmp r0, #0 + beq _021E7608 + add sp, sp, #0x118 + mov r0, #0 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} +_021E6A20: + bl FUN_021E26E4 + ldr r0, [r0, #0x1a0] + cmp r0, #4 + bne _021E7608 + bl FUN_021E26E4 + ldr r0, [r0, #0x204] + cmp r8, r0 + bne _021E7608 + bl FUN_021E26E4 + mov r1, #0 + str r1, [r0, #0x208] + bl FUN_021E26E4 + mov r1, #0 + strb r1, [r0, #0x1a7] + bl FUN_021E26E4 + mov r1, #0 + str r1, [r0, #0x1c8] + bl FUN_021E26E4 + mov r1, #0 + str r1, [r0, #0x1bc] + bl FUN_021E26E4 + ldr r1, [r6] + add r1, r6, r1, lsl #2 + ldr r1, [r1, #4] + str r1, [r0, #0x24] + bl FUN_021E26E4 + ldr r1, [r6] + add r1, r6, r1, lsl #2 + ldr r1, [r1, #8] + strh r1, [r0, #0xa4] + bl FUN_021E26E4 + ldr r1, [r6] + add r1, r6, r1, lsl #2 + ldr r1, [r1, #4] + str r1, [r0, #0x1b8] + bl FUN_021E26E4 + ldr r1, [r6] + add r0, r0, #0x100 + add r1, r6, r1, lsl #2 + ldr r1, [r1, #8] + strh r1, [r0, #0xb4] + bl FUN_021E26E4 + ldrb r0, [r0, #0x15] + cmp r0, #1 + bne _021E6B4C + ldr r1, [r6] + add r0, r6, #4 + bl FUN_021E5138 + cmp r0, #0 + beq _021E6B08 + bl FUN_021E26E4 + ldrb r0, [r0, #0xd] + cmp r0, #0 + beq _021E6B4C + mov r0, r8 + mov r1, r6 + bl FUN_021E621C + b _021E6B4C +_021E6B08: + mov r0, r8 + bl FUN_021E5BF0 + bl FUN_021E61EC + cmp r0, #0 + addne sp, sp, #0x118 + movne r0, #0 + ldmneia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + mov r0, #0 + mov r1, r0 + mov r2, r8 + bl FUN_021E5D30 + bl FUN_021E61EC + cmp r0, #0 + beq _021E7608 + add sp, sp, #0x118 + mov r0, #0 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} +_021E6B4C: + bl FUN_021E26E4 + ldrb r0, [r0, #0x15] + cmp r0, #0 + bne _021E6BD0 + bl FUN_021E26E4 + ldrb r0, [r0, #0xd] + cmp r0, #0 + beq _021E6B90 + mov r0, r8 + mov r1, r6 + bl FUN_021E621C + bl FUN_021E5824 + bl FUN_021E61EC + cmp r0, #0 + addne sp, sp, #0x118 + movne r0, #0 + ldmneia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} +_021E6B90: + mov r0, #6 + bl FUN_021E26D0 + bl FUN_021E26E4 + ldr r0, [r0, #0xe4] + mov r1, #0 + bl FUN_02203BF4 + mov r2, r0 + mov r0, #0 + mov r1, r0 + bl FUN_021E7B04 + bl FUN_021E37A4 + cmp r0, #0 + beq _021E7608 + add sp, sp, #0x118 + mov r0, #0 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} +_021E6BD0: + mov r0, #5 + bl FUN_021E26D0 + mov r0, r8 + bl FUN_021E7E5C + bl FUN_021E38E8 + cmp r0, #0 + beq _021E7608 + add sp, sp, #0x118 + mov r0, #0 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} +_021E6BF8: + bl FUN_021E26E4 + ldr r0, [r0, #0x1a0] + cmp r0, #4 + bne _021E7608 + bl FUN_021E26E4 + ldr r0, [r0, #0x204] + cmp r8, r0 + bne _021E7608 + cmp r5, #0 + ble _021E6C44 + ldr r0, [r6] + cmp r0, #0x10 + bne _021E6C44 + mov r0, #0xd + mov r1, #0 + bl FUN_021E8E08 + add sp, sp, #0x118 + mov r0, #0 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} +_021E6C44: + bl FUN_021E26E4 + ldr r0, [r0, #0x204] + bl FUN_021E5C44 + add sp, sp, #0x118 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} +_021E6C58: + bl FUN_021E26E4 + ldr r0, [r0, #0x1a0] + cmp r0, #4 + bne _021E7608 + bl FUN_021E26E4 + ldr r0, [r0, #0x204] + cmp r8, r0 + bne _021E7608 + bl FUN_021E26E4 + mov r4, r0 + bl OS_GetTick + str r0, [r4, #0x1cc] + str r1, [r4, #0x1d0] + bl FUN_021E26E4 + ldr r0, [r0, #0x208] + cmp r0, #0 + beq _021E6CAC + bl FUN_021E26E4 + ldrb r0, [r0, #0x1a7] + cmp r0, #0x10 + blo _021E6CBC +_021E6CAC: + bl FUN_021E26E4 + ldrb r0, [r0, #0x15] + cmp r0, #3 + bne _021E6D00 +_021E6CBC: + bl FUN_021E26E4 + mov r1, #1 + str r1, [r0, #0x1bc] + bl FUN_021E26E4 + mov r4, r0 + bl OS_GetTick + str r0, [r4, #0x1c0] + str r1, [r4, #0x1c4] + bl FUN_021E26E4 + ldrb r0, [r0, #0x15] + cmp r0, #3 + beq _021E7608 + bl FUN_021E26E4 + ldrb r1, [r0, #0x1a7] + add r1, r1, #1 + strb r1, [r0, #0x1a7] + b _021E7608 +_021E6D00: + bl FUN_021E26E4 + mov r1, #0 + str r1, [r0, #0x208] + bl FUN_021E26E4 + mov r1, #0 + strb r1, [r0, #0x1a7] + bl FUN_021E26E4 + ldrb r0, [r0, #0x15] + cmp r0, #0 + bne _021E6D54 + mov r0, #3 + bl FUN_021E26D0 + bl FUN_021E26E4 + mov r1, #1 + str r1, [r0, #0xe8] + bl FUN_021E26E4 + mov r4, r0 + bl OS_GetTick + str r0, [r4, #0xec] + str r1, [r4, #0xf0] + b _021E7608 +_021E6D54: + bl FUN_021E26E4 + ldrb r0, [r0, #0x15] + cmp r0, #1 + bne _021E7608 + mov r1, #0 + mov r2, r1 + mov r0, #1 + bl FUN_021E5D30 + b _021E7608 +_021E6D78: + bl FUN_021E26E4 + ldrb r0, [r0, #0x17] + cmp r0, #0 + beq _021E7608 + bl FUN_021E26E4 + ldr r0, [r0, #0x20] + cmp r8, r0 + bne _021E7608 + bl FUN_021E26E4 + ldrb r0, [r0, #0x15] + cmp r0, #2 + bne _021E6DD8 + bl FUN_021E26E4 + ldrb r0, [r0, #0xd] + cmp r0, #1 + bne _021E6DD8 + bl FUN_021E26E4 + ldr r0, [r0, #0xf8] + cmp r8, r0 + bne _021E6DD8 + bl FUN_021E26E4 + ldr r0, [r0, #4] + ldr r0, [r0] + bl FUN_021FD45C +_021E6DD8: + mov r0, r8 + bl FUN_021E59D4 + cmp r0, #0 + bne _021E7608 + add sp, sp, #0x118 + mov r0, #0 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} +_021E6DF4: + ldr r0, [r6, #4] + ldr r4, [r6] + mov r0, r0, lsl #0x10 + mov r5, r0, lsr #0x10 + bl FUN_021E26E4 + ldr r0, [r0, #0x1a0] + cmp r0, #1 + bne _021E6E20 + mov r0, #6 + bl FUN_021E26D0 + b _021E6E50 +_021E6E20: + bl FUN_021E26E4 + ldr r0, [r0, #0x1a0] + cmp r0, #6 + beq _021E6E40 + bl FUN_021E26E4 + ldr r0, [r0, #0x1a0] + cmp r0, #0xb + bne _021E7608 +_021E6E40: + bl FUN_021E26E4 + ldr r0, [r0, #0x20] + cmp r8, r0 + bne _021E7608 +_021E6E50: + bl FUN_021E26E4 + mov r1, #0xff + strb r1, [r0, #0x3cc] + bl FUN_021E26E4 + mov r6, r0 + bl FUN_021E26E4 + ldrb r0, [r0, #0xd] + add r0, r0, #1 + add r0, r6, r0, lsl #2 + ldr r0, [r0, #0xf4] + cmp r8, r0 + beq _021E6E9C + bl FUN_021E26E4 + mov r6, r0 + bl FUN_021E26E4 + ldrb r0, [r0, #0xd] + add r0, r0, #1 + add r0, r6, r0, lsl #2 + str r8, [r0, #0xf4] +_021E6E9C: + mov r1, r5, asr #8 + mov r0, r5, lsl #8 + and r1, r1, #0xff + and r0, r0, #0xff00 + orr r0, r1, r0 + str r4, [sp, #0x10] + strh r0, [sp, #0xe] + bl FUN_021E26E4 + mov r1, #1 + strb r1, [r0, #0x194] + bl FUN_021E26E4 + ldr r0, [r0, #4] + ldr r0, [r0] + bl FUN_021FD43C + mov r4, r0 + bl FUN_021E26E4 + add r3, r0, #0x194 + mov r1, r4 + mov r0, #0 + add r2, sp, #0xc + bl FUN_021E2784 + bl FUN_021E26E4 + mov r1, #0 + str r1, [r0, #0x18c] + str r1, [r0, #0x190] + b _021E7608 +_021E6F04: + bl FUN_021E26E4 + ldr r0, [r0, #0x1a0] + cmp r0, #1 + bne _021E7608 + bl FUN_021E26E4 + ldr r0, [r0, #0xf4] + cmp r8, r0 + bne _021E7608 + ldr r0, [r6] + str r0, [sp, #8] + ldr r0, [r6, #4] + and r4, r0, #0xff + bl FUN_021E26E4 + ldrb r0, [r0, #0x15] + cmp r0, #1 + bne _021E6F98 + bl FUN_021E26E4 + ldrb r0, [r0, #0x1a6] + cmp r0, #0 + bne _021E6F98 + ldr r0, [sp, #8] + bl FUN_021E4074 + str r0, [sp, #0x14] + add r0, sp, #0x14 + str r0, [sp] + mov r5, #1 + mov r1, r8 + mov r2, r7 + mov r3, sl + mov r0, #0x20 + str r5, [sp, #4] + bl FUN_021E7884 + bl FUN_021E61EC + cmp r0, #0 + addne sp, sp, #0x118 + movne r0, #0 + ldmneia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} +_021E6F98: + bl FUN_021E26E4 + mov r5, r0 + bl FUN_021E26E4 + ldrb r0, [r0, #0x14] + ldr r1, [sp, #8] + add r0, r0, #1 + add r0, r5, r0, lsl #2 + str r1, [r0, #0xf4] + bl FUN_021E26E4 + mov r5, r0 + bl FUN_021E26E4 + ldrb r0, [r0, #0x14] + add r0, r0, #1 + add r0, r5, r0 + strb r4, [r0, #0x2d0] + bl FUN_021E26E4 + ldr r0, [r0, #0x10] + bl FUN_02202308 + bl FUN_021E26E4 + ldr r0, [r0, #0x46c] + cmp r0, #0 + beq _021E7608 + bl FUN_021E26E4 + mov r5, r0 + ldr r0, [sp, #8] + bl FUN_021E1F18 + mov r4, r0 + bl FUN_021E26E4 + ldr r1, [r0, #0x470] + ldr r2, [r5, #0x46c] + mov r0, r4 + blx r2 + b _021E7608 +_021E701C: + bl FUN_021E26E4 + ldr r0, [r0, #0x1a0] + cmp r0, #1 + bne _021E7608 + bl FUN_021E26E4 + ldr r0, [r0, #0xf4] + cmp r8, r0 + bne _021E7608 + ldr r0, [r6] + str r0, [sp, #8] + cmp r0, #0 + bne _021E7084 + ldr r5, [r6, #4] + ldr r4, [r6, #8] + bl FUN_021E26E4 + add r0, r5, r0 + strb r4, [r0, #0x2d0] + bl FUN_021E26E4 + mov r4, r0 + bl FUN_021E26E4 + ldr r2, [r0, #0x200] + add r1, r4, r5, lsl #2 + mov r0, #3 + str r2, [r1, #0xf4] + bl FUN_021E51C0 + b _021E7608 +_021E7084: + ldr r0, [r6, #8] + ldr r4, [r6, #4] + and r5, r0, #0xff + bl FUN_021E26E4 + add r0, r0, r4, lsl #2 + ldr r1, [sp, #8] + ldr r0, [r0, #0xf4] + cmp r1, r0 + bne _021E7104 + bl FUN_021E26E4 + ldrb r0, [r0, #0xd] + sub r0, r0, #1 + cmp r4, r0 + bne _021E7104 + bl FUN_021E26E4 + mov r4, r0 + bl FUN_021E26E4 + add r1, sp, #8 + str r1, [sp] + mov r1, #1 + str r1, [sp, #4] + ldrh r3, [r0, #0xa4] + ldr r2, [r4, #0x24] + mov r1, r8 + mov r0, #9 + bl FUN_021E7884 + bl FUN_021E61EC + cmp r0, #0 + beq _021E7608 + add sp, sp, #0x118 + mov r0, #0 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} +_021E7104: + bl FUN_021E26E4 + ldr r1, [sp, #8] + add r0, r0, r4, lsl #2 + str r1, [r0, #0xf4] + bl FUN_021E26E4 + add r0, r4, r0 + strb r5, [r0, #0x2d0] + bl FUN_021E26E4 + ldr r1, [r6, #0xc] + add r0, r0, r4, lsl #2 + str r1, [r0, #0x24] + bl FUN_021E26E4 + ldr r1, [r6, #0x10] + add r0, r0, r4, lsl #1 + strh r1, [r0, #0xa4] + bl FUN_021E26E4 + ldr r1, [r6, #0xc] + str r1, [r0, #0x1b8] + bl FUN_021E26E4 + add r1, r0, #0x100 + ldr r2, [r6, #0x10] + mov r0, #5 + strh r2, [r1, #0xb4] + bl FUN_021E26D0 + ldr r0, [sp, #8] + bl FUN_021E7E5C + bl FUN_021E38E8 + cmp r0, #0 + addne sp, sp, #0x118 + movne r0, #0 + ldmneia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + bl FUN_021E26E4 + mov r1, #0 + str r1, [r0, #0x1c8] + bl FUN_021E26E4 + mov r1, #0 + str r1, [r0, #0x1bc] + b _021E7608 +_021E719C: + bl FUN_021E26E4 + ldr r0, [r0, #0x1a0] + cmp r0, #0xd + bne _021E7608 + bl FUN_021E26E4 + mov r4, r0 + bl FUN_021E26E4 + ldrb r0, [r0, #0x1a4] + ldr r1, [r6] + add r0, r0, #1 + add r0, r4, r0, lsl #2 + ldr r0, [r0, #0xf4] + cmp r1, r0 + bne _021E7608 + bl FUN_021E26E4 + ldrb r1, [r0, #0x1a4] + add r1, r1, #1 + strb r1, [r0, #0x1a4] + mov r0, #0 + bl FUN_021E51C0 + b _021E7608 +_021E71F0: + bl FUN_021E26E4 + ldr r0, [r0, #0x1a0] + cmp r0, #1 + beq _021E7210 + bl FUN_021E26E4 + ldr r0, [r0, #0x1a0] + cmp r0, #0x12 + bne _021E7608 +_021E7210: + bl FUN_021E26E4 + ldrb r0, [r0, #0x15] + cmp r0, #0 + beq _021E7234 + ldr r1, [r6] + add r0, r6, #4 + bl FUN_021E5138 + cmp r0, #0 + beq _021E7250 +_021E7234: + bl FUN_021E26E4 + ldr r1, [r6, #4] + str r1, [r0, #0x208] + bl FUN_021E26E4 + mov r1, #0 + strb r1, [r0, #0x1a7] + b _021E725C +_021E7250: + bl FUN_021E26E4 + mov r1, #0 + str r1, [r0, #0x208] +_021E725C: + bl FUN_021E26E4 + ldrb r0, [r0, #0xd] + cmp r0, #0 + beq _021E7280 + bl FUN_021E26E4 + ldr r0, [r0, #4] + ldr r0, [r0] + bl FUN_021FD45C + b _021E7608 +_021E7280: + bl FUN_021E4BF4 + cmp r0, #0 + beq _021E7608 + add sp, sp, #0x118 + mov r0, #0 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} +_021E7298: + bl FUN_021E26E4 + ldr r0, [r0, #0xf4] + cmp r8, r0 + bne _021E7608 + bl FUN_021E26E4 + ldrb r0, [r0, #0x15] + cmp r0, #0 + beq _021E72C8 + bl FUN_021E26E4 + ldrb r0, [r0, #0x15] + cmp r0, #1 + bne _021E72E4 +_021E72C8: + mov r0, r8 + bl FUN_021E5908 + cmp r0, #0 + bne _021E7608 + add sp, sp, #0x118 + mov r0, #0 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} +_021E72E4: + bl FUN_021E26E4 + ldrb r0, [r0, #0x15] + cmp r0, #3 + bne _021E7608 + bl FUN_021E26E4 + str r8, [r0, #0x20c] + bl FUN_021E4B40 + mov r0, #0 + bl FUN_021E4CF8 + b _021E7608 +_021E730C: + ldr r2, [r6] + mov r0, r8 + mov r1, sb + bl FUN_021E43E0 + cmp r0, #0 + bne _021E7608 + add sp, sp, #0x118 + mov r0, #0 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} +_021E7330: + bl FUN_021E26E4 + ldr r0, [r0, #0xf4] + cmp r8, r0 + addne sp, sp, #0x118 + movne r0, #1 + ldmneia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + cmp r5, #0 + mov r7, #0 + ble _021E7608 + mov r4, r7 +_021E7358: + ldr r0, [r6, r7, lsl #2] + mov r1, r4 + bl FUN_021E3F28 + cmp r0, #0xff + beq _021E7370 + bl FUN_021DF9D4 +_021E7370: + add r7, r7, #1 + cmp r7, r5 + blt _021E7358 + b _021E7608 +_021E7380: + ldr r0, _021E7614 ; =0x022106D4 + ldr r4, [r0] + cmp r4, #0 + beq _021E73E0 + ldrb r0, [r4] + cmp r0, #0 + beq _021E73E0 + bl OS_GetTick + ldr r3, [r4, #0x10] + ldr r2, [r4, #0x14] + subs r3, r0, r3 + sbc r0, r1, r2 + mov r1, r0, lsl #6 + ldr r2, _021E7618 ; =0x000082EA + orr r1, r1, r3, lsr #26 + mov r0, r3, lsl #6 + mov r3, #0 + bl _ll_udiv + ldr r2, [r4, #4] + cmp r1, #0 + cmpeq r0, r2 + movhs r0, #1 + strhs r0, [sp, #0x14] + bhs _021E73E8 +_021E73E0: + mov r0, #0 + str r0, [sp, #0x14] +_021E73E8: + add r0, sp, #0x14 + str r0, [sp] + mov r4, #1 + mov r1, r8 + mov r2, r7 + mov r3, sl + mov r0, #0x12 + str r4, [sp, #4] + bl FUN_021E7884 + bl FUN_021E61EC + cmp r0, #0 + beq _021E7608 + add sp, sp, #0x118 + mov r0, #0 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} +_021E7424: + bl FUN_021E26E4 + ldr r0, [r0, #0x1a0] + cmp r0, #0x13 + bne _021E7608 + mov r0, r8 + mov r1, #0 + bl FUN_021E3F28 + cmp r0, #0xff + beq _021E7608 + ldr r1, _021E7614 ; =0x022106D4 + mov r4, #1 + ldr r3, [r1] + mov r5, r4,lsl r0 + ldr r2, [r3, #8] + orr r0, r2, r4, lsl r0 + str r0, [r3, #8] + ldr r0, [r6] + cmp r0, #0 + ldrne r1, [r1] + ldrne r0, [r1, #0xc] + orrne r0, r0, r5 + strne r0, [r1, #0xc] + b _021E7608 +_021E7480: + mov r0, #0xc + mov r1, #0 + bl FUN_021E8E08 + add sp, sp, #0x118 + mov r0, #0 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} +_021E7498: + bl FUN_021E26E4 + ldrb r0, [r0, #0x15] + cmp r0, #1 + bne _021E7608 + bl FUN_021E26E4 + ldrb r0, [r0, #0x1a6] + cmp r0, #0 + bne _021E7608 + mov r4, #1 + bl FUN_021E26E4 + ldrb r0, [r0, #0xd] + cmp r0, #1 + blt _021E7608 +_021E74CC: + bl FUN_021E26E4 + add r0, r0, r4, lsl #2 + ldr r0, [r0, #0xf4] + cmp r8, r0 + bne _021E757C + ldr r0, [r6] + cmp r0, #0 + bne _021E7554 + bl FUN_021E26E4 + ldr r0, [r0, #0x1a0] + cmp r0, #0xb + beq _021E750C + bl FUN_021E26E4 + ldr r0, [r0, #0x1a0] + cmp r0, #0xc + bne _021E7524 +_021E750C: + bl FUN_021E4E00 + bl FUN_021E61EC + cmp r0, #0 + addne sp, sp, #0x118 + movne r0, #0 + ldmneia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} +_021E7524: + bl FUN_021E26E4 + ldr r0, [r0, #0x19c] + cmp r0, #0 + beq _021E754C + bl FUN_021E26E4 + ldr r0, [r0, #0x19c] + bl FUN_022006B4 + bl FUN_021E26E4 + mov r1, #0 + str r1, [r0, #0x19c] +_021E754C: + bl FUN_021E4CB4 + b _021E7608 +_021E7554: + bl FUN_021E26E4 + mov r4, r0 + mov r0, r8 + mov r1, #0 + bl FUN_021E3F28 + ldr r2, [r4, #0x1dc] + mov r1, #1 + orr r0, r2, r1, lsl r0 + str r0, [r4, #0x1dc] + b _021E7608 +_021E757C: + add r4, r4, #1 + bl FUN_021E26E4 + ldrb r0, [r0, #0xd] + cmp r4, r0 + ble _021E74CC + b _021E7608 +_021E7594: + mov r4, #1 + bl FUN_021E26E4 + ldrb r0, [r0, #0xd] + cmp r0, #1 + blt _021E7608 +_021E75A8: + bl FUN_021E26E4 + add r0, r0, r4, lsl #2 + ldr r0, [r0, #0xf4] + cmp r8, r0 + bne _021E75F4 + mov r4, #0 + str r4, [sp] + mov r1, r8 + mov r2, r7 + mov r3, sl + mov r0, #0x41 + str r4, [sp, #4] + bl FUN_021E7884 + bl FUN_021E61EC + cmp r0, #0 + beq _021E7608 + add sp, sp, #0x118 + mov r0, r4 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} +_021E75F4: + add r4, r4, #1 + bl FUN_021E26E4 + ldrb r0, [r0, #0xd] + cmp r4, r0 + ble _021E75A8 +_021E7608: + mov r0, #1 + add sp, sp, #0x118 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + .align 2, 0 +_021E7614: .word 0x022106D4 +_021E7618: .word 0x000082EA + + arm_func_start FUN_021E761C +FUN_021E761C: ; 0x021E761C + stmdb sp!, {r4, r5, r6, r7, r8, sb, lr} + sub sp, sp, #4 + mov sb, r1 + mov r4, r0 + mov r8, r2 + mov r0, sb + mov r1, #0 + bl strchr + mov r7, r0 + cmp r8, #0 + mov r6, #0 + ble _021E767C + mov r5, #0x2f +_021E7650: + mov r0, sb + mov r1, r5 + bl strchr + cmp r0, #0 + addeq sp, sp, #4 + mvneq r0, #0 + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, pc} + add r6, r6, #1 + cmp r6, r8 + add sb, r0, #1 + blt _021E7650 +_021E767C: + mov r0, sb + mov r1, #0x2f + bl strchr + cmp r0, #0 + moveq r0, r7 + cmp sb, r0 + addeq sp, sp, #4 + mvneq r0, #0 + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, pc} + sub r5, r0, sb + mov r0, sb + mov r1, r4 + mov r2, r5 + bl MI_CpuCopy8 + mov r1, #0 + mov r0, r5 + strb r1, [r4, r5] + add sp, sp, #4 + ldmia sp!, {r4, r5, r6, r7, r8, sb, pc} + + arm_func_start FUN_021E76C8 +FUN_021E76C8: ; 0x021E76C8 + stmdb sp!, {r4, r5, r6, r7, r8, lr} + sub sp, sp, #0x208 + mov r7, r0 + mov r5, r2 + mov r4, r3 + mov r0, #3 + mov r6, r1 + str r0, [sp] + ldr ip, _021E7760 ; =0x0220D410 + ldr r2, _021E7764 ; =0x0220D400 + ldr r3, _021E7768 ; =0x0220D408 + add r0, sp, #8 + mov r1, #0x200 + str ip, [sp, #4] + bl OS_SNPrintf + add r1, sp, #8 + add r2, sp, #9 + strb r6, [r1, r0] + mov r1, #0 + strb r1, [r2, r0] + cmp r4, #0 + add r8, r2, r0 + beq _021E7748 + mov r0, r4 + bl strlen + mov r6, r0 + mov r0, r4 + mov r1, r8 + mov r2, r6 + bl MI_CpuCopy8 + mov r0, #0 + strb r0, [r8, r6] +_021E7748: + add r2, sp, #8 + mov r0, r7 + mov r1, r5 + bl FUN_021F02B8 + add sp, sp, #0x208 + ldmia sp!, {r4, r5, r6, r7, r8, pc} + .align 2, 0 +_021E7760: .word 0x0220D410 +_021E7764: .word 0x0220D400 +_021E7768: .word 0x0220D408 + + arm_func_start FUN_021E776C +FUN_021E776C: ; 0x021E776C + stmdb sp!, {r4, r5, r6, r7, r8, sb, lr} + sub sp, sp, #0x9c + mov r5, r0 + mov r8, r1 + mov r7, r2 + cmp r3, #0 + ldr r4, [sp, #0xb8] + beq _021E77A8 + cmp r4, #0 + beq _021E77A8 + add r1, sp, #0x18 + mov r0, r3 + mov r2, r4, lsl #2 + bl MIi_CpuCopy32 + b _021E77AC +_021E77A8: + mov r4, #0 +_021E77AC: + ldr r6, _021E7880 ; =0x0220D398 + add sb, sp, #4 + ldrb r3, [r6] + ldrb r2, [r6, #1] + mov r0, r4, lsl #2 + mov r1, #3 + strb r3, [sb] + strb r2, [sb, #1] + ldrb r3, [r6, #2] + ldrb r2, [r6, #3] + strb r3, [sb, #2] + strb r2, [sb, #3] + ldrb r2, [r6, #4] + strb r2, [sb, #4] + str r1, [sp, #8] + strb r5, [sp, #0xc] + strb r0, [sp, #0xd] + bl FUN_021E26E4 + ldrh r0, [r0, #0x1a] + strh r0, [sp, #0xe] + bl FUN_021E26E4 + ldr r0, [r0, #0x1c] + str r0, [sp, #0x10] + bl FUN_021E26E4 + ldr r0, [r0, #0x200] + mov r6, #0 + str r0, [sp, #0x14] + mov r4, r6 +_021E781C: + bl FUN_021E26E4 + mov r5, r0 + mov r0, r8 + mov r1, r4 + mov r2, r4 + bl FUN_021FFEB0 + mov r1, r0 + ldrb r0, [sp, #0xd] + mov r2, r7 + mov r3, sb + add r0, r0, #0x14 + str r0, [sp] + ldr r0, [r5, #0xe4] + bl FUN_02203CC4 + cmp r0, #0 + addeq sp, sp, #0x9c + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, pc} + cmp r0, #2 + addne sp, sp, #0x9c + ldmneia sp!, {r4, r5, r6, r7, r8, sb, pc} + add r6, r6, #1 + cmp r6, #5 + blt _021E781C + add sp, sp, #0x9c + ldmia sp!, {r4, r5, r6, r7, r8, sb, pc} + .align 2, 0 +_021E7880: .word 0x0220D398 + + arm_func_start FUN_021E7884 +FUN_021E7884: ; 0x021E7884 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x224 + mov fp, r0 + str r1, [sp, #4] + str r2, [sp, #8] + str r3, [sp, #0xc] + ldr sl, [sp, #0x248] + ldr sb, [sp, #0x24c] + mov r8, #0 + bl FUN_021E26E4 + ldrb r0, [r0, #0x15] + cmp r0, #0 + beq _021E78E0 + bl FUN_021E26E4 + ldrb r0, [r0, #0x15] + cmp r0, #3 + beq _021E78D8 + bl FUN_021E26E4 + ldrb r0, [r0, #0x1a6] + cmp r0, #0 + beq _021E7900 +_021E78D8: + cmp fp, #6 + bne _021E7900 +_021E78E0: + ldr r1, [sp, #8] + ldr r2, [sp, #0xc] + mov r0, fp + mov r3, sl + str sb, [sp] + bl FUN_021E776C + mov r4, r0 + b _021E79A0 +_021E7900: + cmp sl, #0 + beq _021E7978 + cmp sb, #0 + beq _021E7978 + ldr r3, [sl] + ldr r2, _021E7A3C ; =0x0220D394 + add r0, sp, #0x20 + mov r1, #0x200 + bl OS_SNPrintf + mov r8, r0 + cmp sb, #1 + mov r7, #1 + ble _021E7978 + add r6, sp, #0x10 + mov r5, #0x10 +_021E793C: + ldr r3, [sl, r7, lsl #2] + ldr r2, _021E7A40 ; =0x0220D414 + mov r0, r6 + mov r1, r5 + bl OS_SNPrintf + mov r4, r0 + add r1, sp, #0x20 + mov r0, r6 + add r1, r1, r8 + mov r2, r4 + bl MI_CpuCopy8 + add r7, r7, #1 + add r8, r8, r4 + cmp r7, sb + blt _021E793C +_021E7978: + add r0, sp, #0x20 + mov r1, #0 + strb r1, [r0, r8] + bl FUN_021E26E4 + ldr r0, [r0] + ldr r2, [sp, #4] + add r3, sp, #0x20 + mov r1, fp + bl FUN_021E76C8 + mov r4, r0 +_021E79A0: + cmp fp, #2 + beq _021E79C0 + cmp fp, #6 + beq _021E79C0 + add r0, fp, #0xf8 + and r0, r0, #0xff + cmp r0, #1 + bhi _021E7A30 +_021E79C0: + bl FUN_021E26E4 + strb fp, [r0, #0x3cc] + bl FUN_021E26E4 + add r1, r0, #0x300 + ldr r0, [sp, #0xc] + strh r0, [r1, #0xce] + bl FUN_021E26E4 + ldr r1, [sp, #8] + str r1, [r0, #0x3d0] + bl FUN_021E26E4 + ldr r1, [sp, #4] + str r1, [r0, #0x454] + bl FUN_021E26E4 + str sb, [r0, #0x458] + bl FUN_021E26E4 + mov r5, r0 + bl OS_GetTick + str r0, [r5, #0x45c] + str r1, [r5, #0x460] + cmp sl, #0 + beq _021E7A30 + cmp sb, #0 + beq _021E7A30 + bl FUN_021E26E4 + add r1, r0, #0x3d4 + mov r0, sl + mov r2, sb, lsl #2 + bl MIi_CpuCopy32 +_021E7A30: + mov r0, r4 + add sp, sp, #0x224 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_021E7A3C: .word 0x0220D394 +_021E7A40: .word 0x0220D414 + + arm_func_start FUN_021E7A44 +FUN_021E7A44: ; 0x021E7A44 + stmdb sp!, {r4, r5, r6, r7, lr} + sub sp, sp, #0xc + mov r7, r0 + ldrb r0, [r7] + cmp r0, #0 + bne _021E7A9C + bl FUN_021E26E4 + mov r4, r0 + mov r1, #0 + ldr r0, [r7, #4] + mov r2, r1 + bl FUN_021FFEB0 + mov r1, r0 + ldrh r2, [r7, #2] + ldr r0, [r4, #0xe4] + ldr r3, [r7, #8] + bl FUN_02203C7C + bl FUN_021E38E8 + cmp r0, #0 + addne sp, sp, #0xc + movne r0, #2 + ldmneia sp!, {r4, r5, r6, r7, pc} +_021E7A9C: + ldr r5, _021E7AFC ; =FUN_021E2784 + ldr r4, _021E7B00 ; =FUN_021E2B60 + mov r6, #0 +_021E7AA8: + bl FUN_021E26E4 + ldr r0, [r0, #4] + ldr r0, [r0] + bl FUN_021FD43C + str r5, [sp] + str r7, [sp, #4] + ldrb r2, [r7] + ldr r1, [r7, #8] + mov r3, r4 + bl FUN_022006EC + cmp r0, #0 + addeq sp, sp, #0xc + ldmeqia sp!, {r4, r5, r6, r7, pc} + cmp r0, #3 + addne sp, sp, #0xc + ldmneia sp!, {r4, r5, r6, r7, pc} + add r6, r6, #1 + cmp r6, #5 + blt _021E7AA8 + add sp, sp, #0xc + ldmia sp!, {r4, r5, r6, r7, pc} + .align 2, 0 +_021E7AFC: .word FUN_021E2784 +_021E7B00: .word FUN_021E2B60 + + arm_func_start FUN_021E7B04 +FUN_021E7B04: ; 0x021E7B04 + stmdb sp!, {r4, r5, r6, r7, r8, sb, lr} + sub sp, sp, #0x14 + mov r4, r0 + mov r8, r1 + mov r7, r2 + bl FUN_021E26E4 + cmp r4, #0 + ldrb r6, [r0, #0x14] + mov r4, #0 + bne _021E7D48 + bl FUN_021E26E4 + mov r5, r0 + bl FUN_021E26E4 + add r1, r0, #0x100 + ldr r2, [r5, #0x200] + ldr r0, _021E7DEC ; =0x0000FFFF + ldrh r1, [r1, #0x7e] + and r2, r2, r0 + mov r0, r7 + orr r8, r2, r1, lsl #16 + bl FUN_022038C4 + cmp r0, #0 + beq _021E7BC0 + mov r0, r7 + bl FUN_02203908 + mov r5, r0 + bl FUN_021E26E4 + ldr r0, [r0, #0xe4] + bl FUN_02203BCC + cmp r5, r0 + movne r5, #1 + bne _021E7C48 + bl FUN_021E26E4 + mov r5, r0 + mov r0, r7 + bl FUN_022038BC + add r1, r5, r6, lsl #2 + str r0, [r1, #0x210] + bl FUN_021E26E4 + mov r5, r0 + mov r0, r7 + bl FUN_02203898 + add r1, r5, r6, lsl #1 + add r1, r1, #0x200 + strh r0, [r1, #0x90] + mov r5, r4 + b _021E7C48 +_021E7BC0: + bl FUN_0209A60C + mov r0, r0, lsl #0x10 + ldr r1, _021E7DEC ; =0x0000FFFF + ldr r2, _021E7DF0 ; =0x0000A8C0 + and r1, r1, r0, lsr #16 + cmp r1, r2 + mov r0, r0, lsr #0x10 + beq _021E7C08 + and r1, r0, #0xff + cmp r1, #0xac + bne _021E7C00 + and r0, r0, #0xff00 + cmp r0, #0x1000 + blo _021E7C00 + cmp r0, #0x1f00 + bls _021E7C08 +_021E7C00: + cmp r1, #0x10 + bne _021E7C10 +_021E7C08: + mov r5, #1 + b _021E7C48 +_021E7C10: + bl FUN_021E26E4 + mov r5, r0 + mov r0, r7 + bl FUN_02203908 + add r1, r5, r6, lsl #2 + str r0, [r1, #0x210] + bl FUN_021E26E4 + mov r5, r0 + mov r0, r7 + bl FUN_022038E4 + add r1, r5, r6, lsl #1 + add r1, r1, #0x200 + strh r0, [r1, #0x90] + mov r5, #0 +_021E7C48: + cmp r5, #0 + beq _021E7C74 + bl FUN_021E26E4 + mov r6, r0 + mov r0, #0x10000 + bl FUN_021DE8C8 + add r1, r6, #0x100 + strh r0, [r1, #0x7e] + bl FUN_021E26E4 + str r8, [r0, #0x19c] + b _021E7D00 +_021E7C74: + bl FUN_0209A60C + str r0, [sp, #8] + bl FUN_021E26E4 + ldr r0, [r0, #4] + ldr r0, [r0] + bl FUN_021FD454 + str r0, [sp, #0xc] + bl FUN_021E26E4 + mov sb, r0 + mov r0, r7 + bl FUN_02203908 + mov r8, r0 + mov r0, r7 + bl FUN_022038E4 + add r1, sb, r6, lsl #2 + add r6, sp, #8 + mov r3, r0 + mov r0, #2 + str r6, [sp] + str r0, [sp, #4] + ldr r1, [r1, #0xf4] + mov r2, r8 + mov r0, #6 + bl FUN_021E7884 + mov r6, r0 + bl FUN_021E26E4 + mov r1, #0 + cmp r6, #0 + strb r1, [r0, #0x3cd] + addne sp, sp, #0x14 + movne r0, #2 + ldmneia sp!, {r4, r5, r6, r7, r8, sb, pc} + bl FUN_021E26E4 + mov r1, #0 + str r1, [r0, #0x19c] +_021E7D00: + bl FUN_021E26E4 + mov r1, #0 + strb r1, [r0, #0x194] + bl FUN_021E26E4 + mov r1, #0 + strb r1, [r0, #0x195] + bl FUN_021E26E4 + mov r6, r0 + mov r0, r7 + bl FUN_022038E4 + add r1, r6, #0x100 + strh r0, [r1, #0x96] + bl FUN_021E26E4 + mov r6, r0 + mov r0, r7 + bl FUN_02203908 + str r0, [r6, #0x198] + b _021E7D88 +_021E7D48: + bl FUN_021E26E4 + mov r1, #1 + strb r1, [r0, #0x194] + bl FUN_021E26E4 + mov r1, r4 + strb r1, [r0, #0x195] + bl FUN_021E26E4 + add r0, r0, #0x100 + mov r1, r4 + strh r1, [r0, #0x96] + bl FUN_021E26E4 + mov r1, r4 + str r1, [r0, #0x198] + bl FUN_021E26E4 + str r8, [r0, #0x19c] + mov r5, #1 +_021E7D88: + cmp r5, #0 + beq _021E7DA4 + bl FUN_021E26E4 + add r0, r0, #0x194 + bl FUN_021E7A44 + mov r4, r0 + b _021E7DE0 +_021E7DA4: + bl FUN_021E26E4 + ldr r0, [r0, #4] + ldr r0, [r0] + bl FUN_021FD43C + mov r5, r0 + bl FUN_021E26E4 + add r3, r0, #0x194 + mov r0, #0 + mov r1, r5 + mov r2, r0 + bl FUN_021E2784 + bl FUN_021E26E4 + mov r1, #0 + str r1, [r0, #0x18c] + str r1, [r0, #0x190] +_021E7DE0: + mov r0, r4 + add sp, sp, #0x14 + ldmia sp!, {r4, r5, r6, r7, r8, sb, pc} + .align 2, 0 +_021E7DEC: .word 0x0000FFFF +_021E7DF0: .word 0x0000A8C0 + + arm_func_start FUN_021E7DF4 +FUN_021E7DF4: ; 0x021E7DF4 + stmdb sp!, {lr} + sub sp, sp, #0x24 + mov lr, #3 + ldr ip, _021E7E48 ; =0x0220D3AC + str lr, [sp] + str ip, [sp, #4] + str r1, [sp, #8] + str r2, [sp, #0xc] + str r2, [sp, #0x10] + ldr r2, _021E7E4C ; =0x0220D3CC + ldr r1, _021E7E50 ; =0x0220D3D8 + str r2, [sp, #0x14] + str r3, [sp, #0x18] + str r1, [sp, #0x1c] + ldr r2, _021E7E54 ; =0x0220D418 + ldr r3, _021E7E58 ; =0x0220D3E4 + mov r1, #0x100 + str ip, [sp, #0x20] + bl OS_SNPrintf + add sp, sp, #0x24 + ldmfd sp!, {pc} + .align 2, 0 +_021E7E48: .word 0x0220D3AC +_021E7E4C: .word 0x0220D3CC +_021E7E50: .word 0x0220D3D8 +_021E7E54: .word 0x0220D418 +_021E7E58: .word 0x0220D3E4 + + arm_func_start FUN_021E7E5C +FUN_021E7E5C: ; 0x021E7E5C + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} + sub sp, sp, #0x1b0 + mov r7, #8 + mov r6, #0xa + mov r5, #0x32 + mov r4, #0x33 + mov r3, #0x34 + mov r2, #0x35 + mov r1, #0x36 + strb r7, [sp, #0x10c] + strb r6, [sp, #0x10d] + strb r5, [sp, #0x10e] + strb r4, [sp, #0x10f] + strb r3, [sp, #0x110] + strb r2, [sp, #0x111] + strb r1, [sp, #0x112] + mov r5, r0 + mov r4, #7 + bl FUN_021E26E4 + ldrb r0, [r0, #0x15] + cmp r0, #0 + beq _021E7EC4 + bl FUN_021E26E4 + ldrb r0, [r0, #0x15] + cmp r0, #1 + bne _021E7EF4 +_021E7EC4: + add r1, sp, #0x100 + ldr r2, _021E8020 ; =0x02210704 + add r1, r1, #0x13 + mov r3, #0 +_021E7ED4: + ldrb r0, [r2] + add r3, r3, #1 + add r2, r2, #0xc + cmp r0, #0 + strneb r0, [r1], #1 + addne r4, r4, #1 + cmp r3, #0x9a + blt _021E7ED4 +_021E7EF4: + bl FUN_021E26E4 + ldr r0, [r0, #0x1a0] + cmp r0, #5 + addls pc, pc, r0, lsl #2 + b _021E7FAC +_021E7F08: ; jump table + b _021E7FAC ; case 0 + b _021E7FAC ; case 1 + b _021E7F8C ; case 2 + b _021E7F20 ; case 3 + b _021E7F8C ; case 4 + b _021E7F8C ; case 5 +_021E7F20: + bl FUN_021E26E4 + ldr r0, [r0, #0x208] + cmp r0, #0 + bne _021E7F84 + bl FUN_021E26E4 + mov r6, r0 + bl FUN_021E26E4 + mov r5, r0 + bl FUN_021E26E4 + ldr r1, [r6, #0x200] + ldrb r2, [r5, #0x16] + ldrb r3, [r0, #0x15] + add r0, sp, #0xc + bl FUN_021E7DF4 + ldr r0, _021E8024 ; =0x022106E0 + ldr r5, [r0] + cmp r5, #0 + beq _021E7FAC + add r0, sp, #0xc + ldr r2, _021E8028 ; =0x0220D470 + mov r3, r0 + mov r1, #0x100 + str r5, [sp] + bl OS_SNPrintf + b _021E7FAC +_021E7F84: + bl FUN_021E26E4 + ldr r5, [r0, #0x208] +_021E7F8C: + ldr r2, _021E802C ; =0x0220D47C + ldr r3, _021E8030 ; =0x0220D3AC + add r0, sp, #0xc + mov r1, #0x100 + str r5, [sp] + bl OS_SNPrintf + bl FUN_021E26E4 + str r5, [r0, #0x204] +_021E7FAC: + bl FUN_021E26E4 + ldr r0, [r0, #0xe4] + bl FUN_02203C04 + mov sl, #0 + add sb, sp, #0xc + add r5, sp, #0x10c + mov r6, sl + mov r8, #6 + mov r7, #1 +_021E7FD0: + bl FUN_021E26E4 + str r4, [sp] + str sb, [sp, #4] + str r8, [sp, #8] + ldr r0, [r0, #0xe4] + mov r1, r7 + mov r2, r6 + mov r3, r5 + bl FUN_02203D1C + cmp r0, #0 + addeq sp, sp, #0x1b0 + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + cmp r0, #2 + addne sp, sp, #0x1b0 + ldmneia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + add sl, sl, #1 + cmp sl, #5 + blt _021E7FD0 + add sp, sp, #0x1b0 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + .align 2, 0 +_021E8020: .word 0x02210704 +_021E8024: .word 0x022106E0 +_021E8028: .word 0x0220D470 +_021E802C: .word 0x0220D47C +_021E8030: .word 0x0220D3AC + + arm_func_start FUN_021E8034 +FUN_021E8034: ; 0x021E8034 + stmdb sp!, {lr} + sub sp, sp, #4 + bl FUN_021E26E4 + cmp r0, #0 + addeq sp, sp, #4 + ldmeqia sp!, {pc} + bl FUN_021E26E4 + ldr r0, [r0, #0xe4] + cmp r0, #0 + beq _021E8074 + bl FUN_021E26E4 + ldr r0, [r0, #0xe4] + bl FUN_02203E80 + bl FUN_021E26E4 + mov r1, #0 + str r1, [r0, #0xe4] +_021E8074: + bl FUN_02200D6C + mov r0, #0 + bl FUN_021E26D0 + ldr r0, _021E80C0 ; =0x022106E0 + ldr r1, [r0] + cmp r1, #0 + beq _021E80A8 + mov r0, #4 + mov r2, #0 + bl FUN_021DD904 + ldr r0, _021E80C0 ; =0x022106E0 + mov r1, #0 + str r1, [r0] +_021E80A8: + bl FUN_021E4164 + bl FUN_021E26E4 + mov r1, #1 + strb r1, [r0, #0x18] + add sp, sp, #4 + ldmfd sp!, {pc} + .align 2, 0 +_021E80C0: .word 0x022106E0 + + arm_func_start FUN_021E80C4 +FUN_021E80C4: ; 0x021E80C4 + stmdb sp!, {r4, r5, r6, r7, lr} + sub sp, sp, #4 + mov r7, r0 + mov r0, #0 + mov r6, r1 + mov r5, r2 + mov r4, r3 + bl FUN_021E8174 + bl FUN_021E26E4 + strb r7, [r0, #0x15] + bl FUN_021E26E4 + strb r6, [r0, #0x16] + bl FUN_021E26E4 + str r5, [r0, #0x464] + bl FUN_021E26E4 + str r4, [r0, #0x468] + bl FUN_021E26E4 + mov r1, #0 + strb r1, [r0, #0x17d] + bl FUN_021E26E4 + mov r1, #0 + strb r1, [r0, #0x2d0] + mov r0, #0x32 + ldr r1, _021E8160 ; =0x0220D3AC + bl FUN_0220277C + mov r0, #0x33 + ldr r1, _021E8164 ; =0x0220D3CC + bl FUN_0220277C + mov r0, #0x34 + ldr r1, _021E8168 ; =0x0220D3D8 + bl FUN_0220277C + mov r0, #0x35 + ldr r1, _021E816C ; =0x0220D3E4 + bl FUN_0220277C + mov r0, #0x36 + ldr r1, _021E8170 ; =0x0220D3A0 + bl FUN_0220277C + add sp, sp, #4 + ldmia sp!, {r4, r5, r6, r7, pc} + .align 2, 0 +_021E8160: .word 0x0220D3AC +_021E8164: .word 0x0220D3CC +_021E8168: .word 0x0220D3D8 +_021E816C: .word 0x0220D3E4 +_021E8170: .word 0x0220D3A0 + + arm_func_start FUN_021E8174 +FUN_021E8174: ; 0x021E8174 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #4 + mov r4, r0 + bl FUN_021E26E4 + mov r1, #0 + strb r1, [r0, #0xc] + bl FUN_021E26E4 + mov r1, #0 + strb r1, [r0, #0x17c] + bl FUN_021E26E4 + mov r5, r0 + mov r0, #0x10000 + bl FUN_021DE8C8 + add r1, r5, #0x100 + strh r0, [r1, #0x7e] + bl FUN_021E26E4 + mov r1, #0 + str r1, [r0, #0x180] + bl FUN_021E26E4 + mov r1, #0 + str r1, [r0, #0x184] + str r1, [r0, #0x188] + bl FUN_021E26E4 + mov r1, #0 + str r1, [r0, #0x18c] + str r1, [r0, #0x190] + bl FUN_021E26E4 + mov r1, #0 + strb r1, [r0, #0x1a4] + bl FUN_021E26E4 + mov r1, #0 + strb r1, [r0, #0x1a9] + bl FUN_021E26E4 + mov r1, #0 + strb r1, [r0, #0x1aa] + bl FUN_021E26E4 + mov r1, #0 + strb r1, [r0, #0x1ab] + bl FUN_021E26E4 + mov r1, #0 + strb r1, [r0, #0x1ac] + bl FUN_021E26E4 + mov r1, #0 + strb r1, [r0, #0x1a7] + bl FUN_021E26E4 + mov r1, #0 + strb r1, [r0, #0x1a8] + bl FUN_021E26E4 + mov r1, #0 + add r0, r0, #0x100 + strh r1, [r0, #0xb2] + bl FUN_021E26E4 + mov r1, #0 + add r0, r0, #0x100 + strh r1, [r0, #0xb4] + bl FUN_021E26E4 + mov r1, #0 + str r1, [r0, #0x1b8] + bl FUN_021E26E4 + mov r1, #0 + str r1, [r0, #0x1e0] + str r1, [r0, #0x1e4] + bl FUN_021E26E4 + mov r1, #0 + str r1, [r0, #0x1f0] + str r1, [r0, #0x1f4] + bl FUN_021E26E4 + add r1, r0, #0x3cc + mov r0, #0 + mov r2, #0x98 + bl MIi_CpuClear32 + cmp r4, #2 + bne _021E82F0 + bl FUN_021E26E4 + mov r4, r0 + bl FUN_021E26E4 + ldrb r0, [r0, #0xd] + strb r0, [r4, #0x14] + bl FUN_021E26E4 + ldrb r0, [r0, #0x15] + cmp r0, #3 + bne _021E82CC + mov r0, #1 + bl FUN_021E26D0 + add sp, sp, #4 + ldmia sp!, {r4, r5, pc} +_021E82CC: + bl FUN_021E26E4 + ldrb r0, [r0, #0x15] + cmp r0, #2 + addne sp, sp, #4 + ldmneia sp!, {r4, r5, pc} + mov r0, #0xa + bl FUN_021E26D0 + add sp, sp, #4 + ldmia sp!, {r4, r5, pc} +_021E82F0: + bl FUN_021E26E4 + mov r1, #0 + strb r1, [r0, #0xd] + bl FUN_021E26E4 + mov r1, #0 + strb r1, [r0, #0xe] + bl FUN_021E26E4 + mov r1, #0 + strb r1, [r0, #0x14] + bl FUN_021E26E4 + mov r1, #0 + strb r1, [r0, #0x17] + bl FUN_021E26E4 + mov r1, #0 + str r1, [r0, #0x20] + bl FUN_021E26E4 + mov r1, #0 + str r1, [r0, #0xe8] + bl FUN_021E26E4 + mov r1, #0 + strb r1, [r0, #0x1a5] + bl FUN_021E26E4 + mov r1, #0 + add r0, r0, #0x100 + strh r1, [r0, #0xb0] + bl FUN_021E26E4 + mov r1, #0 + str r1, [r0, #0x1bc] + bl FUN_021E26E4 + mov r1, #0 + str r1, [r0, #0x1c0] + str r1, [r0, #0x1c4] + bl FUN_021E26E4 + mov r1, #0 + str r1, [r0, #0x1c8] + bl FUN_021E26E4 + mov r1, #0 + str r1, [r0, #0x1cc] + str r1, [r0, #0x1d0] + bl FUN_021E26E4 + mov r1, #0 + str r1, [r0, #0x1d4] + bl FUN_021E26E4 + mov r1, #0 + str r1, [r0, #0x204] + bl FUN_021E26E4 + mov r1, #0 + str r1, [r0, #0x208] + bl FUN_021E26E4 + mov r1, #0 + str r1, [r0, #0x2f0] + bl FUN_021E26E4 + add r1, r0, #0x24 + mov r0, #0 + mov r2, #0x80 + bl MIi_CpuClear32 + bl FUN_021E26E4 + add r1, r0, #0xa4 + mov r0, #0 + mov r2, #0x40 + bl MIi_CpuClear16 + bl FUN_021E26E4 + add r1, r0, #0xf4 + mov r0, #0 + mov r2, #0x80 + bl MIi_CpuClear32 + bl FUN_021E26E4 + add r1, r0, #0x194 + mov r0, #0 + mov r2, #0xc + bl MIi_CpuClear32 + bl FUN_021E26E4 + add r1, r0, #0x210 + mov r0, #0 + mov r2, #0x80 + bl MIi_CpuClear32 + bl FUN_021E26E4 + add r1, r0, #0x290 + mov r0, #0 + mov r2, #0x40 + bl MIi_CpuClear16 + bl FUN_021E26E4 + add r0, r0, #0x2d0 + mov r1, #0 + mov r2, #0x20 + bl MI_CpuFill8 + bl FUN_021E26E4 + add r1, r0, #0x348 + mov r0, #0 + mov r2, #0x84 + bl MIi_CpuClear32 + cmp r4, #1 + bne _021E84A8 + bl FUN_021E26E4 + ldrb r0, [r0, #0x15] + cmp r0, #0 + bne _021E8484 + mov r0, #3 + bl FUN_021E26D0 + add sp, sp, #4 + ldmia sp!, {r4, r5, pc} +_021E8484: + bl FUN_021E26E4 + ldrb r0, [r0, #0x15] + cmp r0, #1 + addne sp, sp, #4 + ldmneia sp!, {r4, r5, pc} + mov r0, #4 + bl FUN_021E26D0 + add sp, sp, #4 + ldmia sp!, {r4, r5, pc} +_021E84A8: + bl FUN_021E26E4 + mov r1, #0 + strb r1, [r0, #0x15] + bl FUN_021E26E4 + mov r1, #0 + strb r1, [r0, #0x16] + bl FUN_021E26E4 + mov r1, #0 + strb r1, [r0, #0x18] + bl FUN_021E26E4 + mov r1, #0 + str r1, [r0, #0x20c] + bl FUN_021E26E4 + mov r1, #0 + strb r1, [r0, #0x1a6] + bl FUN_021E26E4 + mov r1, #0 + strb r1, [r0, #0x1ae] + bl FUN_021E26E4 + mov r1, #0 + strb r1, [r0, #0x1ad] + bl FUN_021E26E4 + mov r1, #0 + str r1, [r0, #0x1f8] + str r1, [r0, #0x1fc] + bl FUN_021E26E4 + mov r1, #0 + str r1, [r0, #0x46c] + bl FUN_021E26E4 + mov r1, #0 + str r1, [r0, #0x470] + add sp, sp, #4 + ldmia sp!, {r4, r5, pc} + + arm_func_start FUN_021E852C +FUN_021E852C: ; 0x021E852C + stmdb sp!, {lr} + sub sp, sp, #4 + bl FUN_021E26E4 + cmp r0, #0 + moveq r0, #1 + movne r0, #0 + add sp, sp, #4 + ldmfd sp!, {pc} + + arm_func_start FUN_021E854C +FUN_021E854C: ; 0x021E854C + stmdb sp!, {lr} + sub sp, sp, #4 + mov r0, #0 + bl FUN_021E26F4 + ldr r0, _021E85C8 ; =0x022106E0 + ldr r1, [r0] + cmp r1, #0 + beq _021E8584 + mov r0, #4 + mov r2, #0 + bl FUN_021DD904 + ldr r0, _021E85C8 ; =0x022106E0 + mov r1, #0 + str r1, [r0] +_021E8584: + bl FUN_021E4164 + ldr r0, _021E85CC ; =0x022106D4 + ldr r1, [r0] + cmp r1, #0 + beq _021E85B0 + mov r0, #4 + mov r2, #0 + bl FUN_021DD904 + ldr r0, _021E85CC ; =0x022106D4 + mov r1, #0 + str r1, [r0] +_021E85B0: + ldr r0, _021E85D0 ; =0x022106DC + mov r1, #0 + strb r1, [r0] + strb r1, [r0, #1] + add sp, sp, #4 + ldmfd sp!, {pc} + .align 2, 0 +_021E85C8: .word 0x022106E0 +_021E85CC: .word 0x022106D4 +_021E85D0: .word 0x022106DC + + arm_func_start FUN_021E85D4 +FUN_021E85D4: ; 0x021E85D4 + stmdb sp!, {lr} + sub sp, sp, #0x2c + bl FUN_021E26E4 + ldrb r0, [r0, #0x15] + cmp r0, #2 + addne sp, sp, #0x2c + movne r0, #0 + ldmneia sp!, {pc} + bl FUN_021E26E4 + ldrb r1, [r0, #0x16] + ldr r2, _021E8694 ; =0x0220D394 + add r0, sp, #0 + add r3, r1, #1 + mov r1, #0xc + bl OS_SNPrintf + ldr r0, _021E8698 ; =0x0220D484 + add r1, sp, #0 + add r2, sp, #0xc + mov r3, #0x2f + bl FUN_021DEB54 + bl FUN_021E26E4 + ldrb r2, [r0, #0xd] + add r0, sp, #0 + mov r1, #0xc + add r3, r2, #1 + ldr r2, _021E8694 ; =0x0220D394 + bl OS_SNPrintf + ldr r0, _021E869C ; =0x0220D488 + add r1, sp, #0 + add r2, sp, #0xc + mov r3, #0x2f + bl FUN_021DEB0C + ldr r2, _021E8694 ; =0x0220D394 + add r0, sp, #0 + mov r1, #0xc + mov r3, #3 + bl OS_SNPrintf + ldr r0, _021E86A0 ; =0x0220D3F4 + add r1, sp, #0 + add r2, sp, #0xc + mov r3, #0x2f + bl FUN_021DEB0C + mov r0, #6 + add r1, sp, #0xc + mov r2, #0 + bl FUN_021E1E30 + add sp, sp, #0x2c + ldmfd sp!, {pc} + .align 2, 0 +_021E8694: .word 0x0220D394 +_021E8698: .word 0x0220D484 +_021E869C: .word 0x0220D488 +_021E86A0: .word 0x0220D3F4 + + arm_func_start FUN_021E86A4 +FUN_021E86A4: ; 0x021E86A4 + stmdb sp!, {r4, r5, r6, r7, r8, lr} + mov r7, r0 + bl FUN_021E26E4 + cmp r0, #0 + moveq r0, #0 + ldmeqia sp!, {r4, r5, r6, r7, r8, pc} + ldr r0, _021E8748 ; =0x022106E4 + mov r1, #0 + mov r2, #0x20 + bl MI_CpuFill8 + mov r6, #0 + bl FUN_021E26E4 + ldrb r0, [r0, #0xe] + cmp r0, #0 + blt _021E8730 + ldr r5, _021E8748 ; =0x022106E4 + mov r4, #1 +_021E86E8: + bl FUN_021E26E4 + mov r8, r0 + bl FUN_021E26E4 + add r0, r0, r6 + ldrb r0, [r0, #0x2d0] + ldr r1, [r8, #0x2f0] + mov r0, r4,lsl r0 + ands r0, r1, r0 + beq _021E8730 + bl FUN_021E26E4 + add r0, r0, r6 + ldrb r0, [r0, #0x2d0] + add r6, r6, #1 + strb r0, [r5], #1 + bl FUN_021E26E4 + ldrb r0, [r0, #0xe] + cmp r6, r0 + ble _021E86E8 +_021E8730: + ldr r0, _021E8748 ; =0x022106E4 + str r0, [r7] + bl FUN_021E26E4 + ldrb r0, [r0, #0xe] + add r0, r0, #1 + ldmia sp!, {r4, r5, r6, r7, r8, pc} + .align 2, 0 +_021E8748: .word 0x022106E4 + + arm_func_start FUN_021E874C +FUN_021E874C: ; 0x021E874C + stmdb sp!, {r4, lr} + mov r4, r0 + bl FUN_021E26E4 + cmp r0, #0 + moveq r0, #0 + ldmeqia sp!, {r4, pc} + bl FUN_021E26E4 + add r0, r0, #0x2d0 + str r0, [r4] + bl FUN_021E26E4 + ldrb r0, [r0, #0xd] + add r0, r0, #1 + ldmia sp!, {r4, pc} + + arm_func_start FUN_021E8780 +FUN_021E8780: ; 0x021E8780 + stmdb sp!, {r4, r5, r6, lr} + mvn r6, #0 + mov r5, #0 + mov r4, #1 +_021E8790: + bl FUN_021E26E4 + mov r1, r4,lsl r5 + ldr r0, [r0, #0x2f0] + add r5, r5, #1 + ands r0, r1, r0 + addne r6, r6, #1 + cmp r5, #0x20 + blt _021E8790 + mvn r0, #0 + cmp r6, r0 + bne _021E87CC + bl FUN_021E26E4 + mov r1, #0 + strb r1, [r0, #0xe] + ldmia sp!, {r4, r5, r6, pc} +_021E87CC: + bl FUN_021E26E4 + strb r6, [r0, #0xe] + ldmia sp!, {r4, r5, r6, pc} + + arm_func_start FUN_021E87D8 +FUN_021E87D8: ; 0x021E87D8 + stmdb sp!, {lr} + sub sp, sp, #4 + bl FUN_021E26E4 + cmp r0, #0 + addeq sp, sp, #4 + moveq r0, #0 + ldmeqia sp!, {pc} + bl FUN_021E26E4 + ldrb r0, [r0, #0xe] + add sp, sp, #4 + ldmfd sp!, {pc} + + arm_func_start FUN_021E8804 +FUN_021E8804: ; 0x021E8804 + stmdb sp!, {lr} + sub sp, sp, #4 + bl FUN_021E26E4 + cmp r0, #0 + addeq sp, sp, #4 + moveq r0, #0 + ldmeqia sp!, {pc} + bl FUN_021E26E4 + ldrb r0, [r0, #0xd] + add sp, sp, #4 + ldmfd sp!, {pc} + + arm_func_start FUN_021E8830 +FUN_021E8830: ; 0x021E8830 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #4 + mov sb, r0 + mov r8, r1 + bl FUN_021E26E4 + cmp r0, #0 + addeq sp, sp, #4 + moveq r0, #0 + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + bl FUN_021E26E4 + add r0, r0, sb, lsl #2 + ldr fp, [r0, #0xf4] + bl FUN_021E26E4 + mov r4, r0 + bl FUN_021E26E4 + add r0, r0, sb + ldrb r0, [r0, #0x2d0] + mov r1, #1 + ldr r2, [r4, #0x2f0] + mvn r0, r1, lsl r0 + and r0, r2, r0 + str r0, [r4, #0x2f0] + bl FUN_021E8780 + sub r0, r8, #1 + cmp sb, r0 + bge _021E8970 + sub r0, r8, sb + sub r6, r0, #1 + cmp r6, #0 + mov r7, #0 + ble _021E8970 +_021E88AC: + add r4, sb, r7 + add r5, r4, #1 + bl FUN_021E26E4 + mov sl, r0 + bl FUN_021E26E4 + add r0, r0, r5, lsl #2 + ldr r1, [r0, #0x24] + add r0, sl, r4, lsl #2 + str r1, [r0, #0x24] + bl FUN_021E26E4 + mov sl, r0 + bl FUN_021E26E4 + add r0, r0, r5, lsl #1 + ldrh r1, [r0, #0xa4] + add r0, sl, r4, lsl #1 + strh r1, [r0, #0xa4] + bl FUN_021E26E4 + mov sl, r0 + bl FUN_021E26E4 + add r1, sl, r4, lsl #2 + add r0, r0, r5, lsl #2 + ldr r0, [r0, #0xf4] + str r0, [r1, #0xf4] + bl FUN_021E26E4 + mov sl, r0 + bl FUN_021E26E4 + add r1, sl, r4, lsl #2 + add r0, r0, r5, lsl #2 + ldr r0, [r0, #0x210] + str r0, [r1, #0x210] + bl FUN_021E26E4 + mov sl, r0 + bl FUN_021E26E4 + add r1, sl, r4, lsl #1 + add r1, r1, #0x200 + add r0, r0, r5, lsl #1 + add r0, r0, #0x200 + ldrh r0, [r0, #0x90] + strh r0, [r1, #0x90] + bl FUN_021E26E4 + mov sl, r0 + bl FUN_021E26E4 + add r1, r0, r5 + add r0, sl, r4 + ldrb r1, [r1, #0x2d0] + add r7, r7, #1 + cmp r7, r6 + strb r1, [r0, #0x2d0] + blt _021E88AC +_021E8970: + cmp r8, #0 + ble _021E89E0 + sub r4, r8, #1 + bl FUN_021E26E4 + add r0, r0, r4, lsl #2 + mov r1, #0 + str r1, [r0, #0x24] + bl FUN_021E26E4 + add r0, r0, r4, lsl #1 + mov r1, #0 + strh r1, [r0, #0xa4] + bl FUN_021E26E4 + add r0, r0, r4, lsl #2 + mov r1, #0 + str r1, [r0, #0xf4] + bl FUN_021E26E4 + add r0, r0, r4, lsl #2 + mov r1, #0 + str r1, [r0, #0x210] + bl FUN_021E26E4 + add r0, r0, r4, lsl #1 + add r0, r0, #0x200 + mov r1, #0 + strh r1, [r0, #0x90] + bl FUN_021E26E4 + add r0, r0, r4 + mov r1, #0 + strb r1, [r0, #0x2d0] +_021E89E0: + mov r0, fp + add sp, sp, #4 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + + arm_func_start FUN_021E89EC +FUN_021E89EC: ; 0x021E89EC + stmdb sp!, {r4, r5, r6, lr} + mov r6, r0 + mov r5, r1 + bl FUN_021E26E4 + cmp r0, #0 + moveq r0, #0 + ldmeqia sp!, {r4, r5, r6, pc} + cmp r5, #0 + mov r4, #0 + ble _021E8A48 +_021E8A14: + bl FUN_021E26E4 + add r0, r0, r4, lsl #2 + ldr r0, [r0, #0xf4] + cmp r6, r0 + bne _021E8A3C + mov r0, r4 + mov r1, r5 + bl FUN_021E8830 + mov r0, #1 + ldmia sp!, {r4, r5, r6, pc} +_021E8A3C: + add r4, r4, #1 + cmp r4, r5 + blt _021E8A14 +_021E8A48: + mov r0, #0 + ldmia sp!, {r4, r5, r6, pc} + + arm_func_start FUN_021E8A50 +FUN_021E8A50: ; 0x021E8A50 + stmdb sp!, {r4, lr} + mov r4, r0 + bl FUN_021E26E4 + ldrb r0, [r0, #0x1a8] + cmp r0, #2 + ldmeqia sp!, {r4, pc} + mov r0, r4 + bl FUN_021E59D4 + ldmia sp!, {r4, pc} + + arm_func_start FUN_021E8A74 +FUN_021E8A74: ; 0x021E8A74 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #4 + mov r5, r0 + mov r4, r1 + bl FUN_021DF88C + cmp r0, #5 + addne sp, sp, #4 + movne r0, #0 + ldmneia sp!, {r4, r5, pc} + bl FUN_021E26E4 + ldrb r0, [r0, #0x15] + cmp r0, #2 + addeq sp, sp, #4 + moveq r0, #1 + ldmeqia sp!, {r4, r5, pc} + cmp r5, #0 + beq _021E8AD4 + ldr r1, _021E8C00 ; =0xFFFEC780 + mov r0, r5 + add r1, r4, r1 + bl FUN_021E8E08 + add sp, sp, #4 + mov r0, #1 + ldmia sp!, {r4, r5, pc} +_021E8AD4: + bl FUN_021E26E4 + mov r1, #0 + strb r1, [r0, #0x2d0] + bl FUN_021E26E4 + ldrb r0, [r0, #0x1a9] + cmp r0, #1 + beq _021E8B10 + bl FUN_021E26E4 + ldrb r0, [r0, #0x1a8] + cmp r0, #1 + beq _021E8B10 + bl FUN_021E26E4 + ldrb r0, [r0, #0x1a8] + cmp r0, #2 + bne _021E8B1C +_021E8B10: + add sp, sp, #4 + mov r0, #1 + ldmia sp!, {r4, r5, pc} +_021E8B1C: + bl FUN_021E26E4 + ldr r0, [r0, #0x19c] + cmp r0, #0 + beq _021E8B44 + bl FUN_021E26E4 + ldr r0, [r0, #0x19c] + bl FUN_022006B4 + bl FUN_021E26E4 + mov r1, #0 + str r1, [r0, #0x19c] +_021E8B44: + bl FUN_021E26E4 + ldrb r0, [r0, #0xd] + cmp r0, #0 + beq _021E8B84 + bl FUN_021E26E4 + ldrb r0, [r0, #0x1a8] + cmp r0, #0 + bne _021E8BF4 + bl FUN_021E26E4 + mov r1, #3 + strb r1, [r0, #0x1a8] + bl FUN_021E26E4 + ldr r0, [r0, #4] + ldr r0, [r0] + bl FUN_021FD45C + b _021E8BF4 +_021E8B84: + bl FUN_021E26E4 + ldrb r0, [r0, #0x15] + cmp r0, #3 + bne _021E8BA4 + ldr r1, _021E8C04 ; =0xFFFEC5D2 + mov r0, #6 + bl FUN_021E8E08 + b _021E8BF4 +_021E8BA4: + bl FUN_021E26E4 + ldr r0, [r0, #0x208] + cmp r0, #0 + beq _021E8BBC + bl FUN_021E4BF4 + b _021E8BF4 +_021E8BBC: + bl FUN_021E26E4 + ldr r0, [r0, #0x1a0] + cmp r0, #1 + bne _021E8BEC + mov r0, #0x12 + bl FUN_021E26D0 + bl FUN_021E26E4 + mov r4, r0 + bl OS_GetTick + str r0, [r4, #0x1f0] + str r1, [r4, #0x1f4] + b _021E8BF4 +_021E8BEC: + mov r0, #1 + bl FUN_021E4CF8 +_021E8BF4: + mov r0, #1 + add sp, sp, #4 + ldmia sp!, {r4, r5, pc} + .align 2, 0 +_021E8C00: .word 0xFFFEC780 +_021E8C04: .word 0xFFFEC5D2 + + arm_func_start FUN_021E8C08 +FUN_021E8C08: ; 0x021E8C08 + stmdb sp!, {r4, r5, r6, lr} + mov r5, r0 + mov r4, r2 + cmp r1, #2 + beq _021E8C30 + cmp r1, #3 + beq _021E8CDC + cmp r1, #4 + beq _021E8DA4 + ldmia sp!, {r4, r5, r6, pc} +_021E8C30: + bl FUN_021E26E4 + ldr r0, [r0, #0x1a0] + cmp r0, #1 + bne _021E8CCC + ldrb r0, [r4] + cmp r0, #1 + bne _021E8C58 + bl FUN_021E26E4 + mov r1, #0 + str r1, [r0, #0x20c] +_021E8C58: + ldrb r6, [r4, #1] + bl FUN_021E26E4 + ldrb r1, [r4, #2] + add r0, r0, r6 + strb r1, [r0, #0x2d0] + bl FUN_021E26E4 + mov r4, r0 + bl FUN_021E26E4 + ldr r1, [r0, #0x200] + add r0, r4, r6, lsl #2 + str r1, [r0, #0xf4] + bl FUN_021E26E4 + ldrb r0, [r0, #0x15] + cmp r0, #0 + beq _021E8CA4 + bl FUN_021E26E4 + ldrb r0, [r0, #0x15] + cmp r0, #1 + bne _021E8CB8 +_021E8CA4: + bl FUN_021E26E4 + mov r4, r0 + bl FUN_021E26E4 + ldrb r0, [r0, #0xd] + strb r0, [r4, #0x16] +_021E8CB8: + bl FUN_021E26E4 + mov r1, #0 + strb r1, [r0, #0x1ad] + mov r0, #9 + bl FUN_021E26D0 +_021E8CCC: + mov r0, r5 + mov r1, #3 + bl FUN_021E4910 + ldmia sp!, {r4, r5, r6, pc} +_021E8CDC: + bl FUN_021E26E4 + ldr r0, [r0, #0x1a0] + cmp r0, #0x10 + bne _021E8D94 + bl FUN_021E26E4 + ldr r2, [r0, #0x1d4] + mov r1, #1 + orr r1, r2, r1, lsl r5 + str r1, [r0, #0x1d4] + ldrb r1, [r4] + ldrb r0, [r4, #1] + orr r4, r1, r0, lsl #8 + bl FUN_021E26E4 + add r0, r0, #0x100 + ldrh r0, [r0, #0xb0] + cmp r4, r0 + ble _021E8D2C + bl FUN_021E26E4 + add r0, r0, #0x100 + strh r4, [r0, #0xb0] +_021E8D2C: + mov r0, #0 + bl FUN_021E3EC4 + mov r4, r0 + bl FUN_021E26E4 + ldr r0, [r0, #0x1d4] + cmp r4, r0 + ldmneia sp!, {r4, r5, r6, pc} + mov r5, #1 + bl FUN_021E26E4 + ldrb r0, [r0, #0xd] + cmp r0, #1 + blt _021E8D88 + mov r4, #4 +_021E8D60: + bl FUN_021E26E4 + add r0, r0, r5 + ldrb r0, [r0, #0x2d0] + mov r1, r4 + bl FUN_021E4910 + add r5, r5, #1 + bl FUN_021E26E4 + ldrb r0, [r0, #0xd] + cmp r5, r0 + ble _021E8D60 +_021E8D88: + mov r0, #0x11 + bl FUN_021E26D0 + ldmia sp!, {r4, r5, r6, pc} +_021E8D94: + mov r0, r5 + mov r1, #4 + bl FUN_021E4910 + ldmia sp!, {r4, r5, r6, pc} +_021E8DA4: + bl FUN_021E26E4 + ldr r0, [r0, #0x1a0] + cmp r0, #9 + ldmneia sp!, {r4, r5, r6, pc} + mov r0, #4 + bl FUN_021E51C0 + ldmia sp!, {r4, r5, r6, pc} + + arm_func_start FUN_021E8DC0 +FUN_021E8DC0: ; 0x021E8DC0 + stmdb sp!, {lr} + sub sp, sp, #4 + bl FUN_021E26E4 + ldrb r0, [r0, #0x15] + cmp r0, #2 + addeq sp, sp, #4 + ldmeqia sp!, {pc} + bl FUN_021E26E4 + mov r1, #0 + strb r1, [r0, #0x14] + bl FUN_021E26E4 + mov r1, #0 + strb r1, [r0, #0x16] + bl FUN_021E26E4 + ldr r0, [r0, #0x10] + bl FUN_02202308 + add sp, sp, #4 + ldmfd sp!, {pc} + + arm_func_start FUN_021E8E08 +FUN_021E8E08: ; 0x021E8E08 + stmdb sp!, {r4, r5, r6, r7, r8, lr} + sub sp, sp, #8 + mov r4, r0 + mov r5, r1 + bl FUN_021E26E4 + cmp r0, #0 + addeq sp, sp, #8 + ldmeqia sp!, {r4, r5, r6, r7, r8, pc} + cmp r4, #0 + addeq sp, sp, #8 + ldmeqia sp!, {r4, r5, r6, r7, r8, pc} + bl FUN_021E4B40 + mov r0, r4 + mov r1, r5 + bl FUN_021DD6B0 + ldr r1, _021E8EC8 ; =0x0220D3F0 + mov r0, #1 + mov r2, #0 + bl FUN_021E1E30 + bl FUN_021E26E4 + ldrb r0, [r0, #0x15] + cmp r0, #2 + moveq r7, #1 + movne r7, #0 + bl FUN_021E26E4 + ldr r0, [r0, #0x20c] + cmp r0, #0 + moveq r8, #1 + movne r8, #0 + bl FUN_021E26E4 + mov r6, r0 + bl FUN_021E26E4 + ldr r0, [r0, #0x20c] + bl FUN_021E1F18 + mov r5, r0 + bl FUN_021E26E4 + str r5, [sp] + ldr r1, [r0, #0x468] + mov r0, r4 + str r1, [sp, #4] + ldr r4, [r6, #0x464] + mov r2, r8 + mov r3, r7 + mov r1, #0 + blx r4 + bl FUN_021E8034 + add sp, sp, #8 + ldmia sp!, {r4, r5, r6, r7, r8, pc} + .align 2, 0 +_021E8EC8: .word 0x0220D3F0 + + arm_func_start FUN_021E8ECC +FUN_021E8ECC: ; 0x021E8ECC + stmdb sp!, {lr} + sub sp, sp, #4 + bl FUN_021E26E4 + mov r1, #0xff + strb r1, [r0, #0x3cc] + bl FUN_021E26E4 + mov r1, #0 + strb r1, [r0, #0x3cd] + add sp, sp, #4 + ldmfd sp!, {pc} + + arm_func_start FUN_021E8EF4 +FUN_021E8EF4: ; 0x021E8EF4 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x21c + mov fp, r2 + mov sl, #0 + str r1, [sp, #8] + add sb, sp, #0xc + add r5, sp, #0x1c + mov r7, sl + add r8, fp, #1 + mov r6, #0xa + mvn r4, #0 +_021E8F20: + mov r0, sb + mov r1, r8 + mov r2, sl + bl FUN_021E761C + cmp r0, r4 + beq _021E8F58 + mov r0, sb + mov r1, r7 + mov r2, r6 + bl strtoul + str r0, [r5, sl, lsl #2] + add sl, sl, #1 + cmp sl, #0x80 + blt _021E8F20 +_021E8F58: + add r0, sp, #0x1c + str r0, [sp] + str sl, [sp, #4] + ldrb r0, [fp] + mov r2, #0 + ldr r1, [sp, #8] + mov r3, r2 + bl FUN_021E6730 + add sp, sp, #0x21c + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + + arm_func_start FUN_021E8F80 +FUN_021E8F80: ; 0x021E8F80 + stmdb sp!, {r4, r5, r6, r7, lr} + sub sp, sp, #0x1c + mov r6, r0 + mov r4, r1 + bl FUN_021E26E4 + cmp r0, #0 + addeq sp, sp, #0x1c + ldmeqia sp!, {r4, r5, r6, r7, pc} + bl FUN_021E26E4 + ldr r0, [r0, #0x1a0] + cmp r0, #7 + beq _021E8FC4 + bl FUN_021E26E4 + ldr r0, [r0, #0x1a0] + cmp r0, #0xc + addne sp, sp, #0x1c + ldmneia sp!, {r4, r5, r6, r7, pc} +_021E8FC4: + cmp r4, #0 + beq _021E9140 + cmp r4, #5 + addeq sp, sp, #0x1c + ldmeqia sp!, {r4, r5, r6, r7, pc} + cmp r4, #6 + bne _021E9114 + bl FUN_021E26E4 + ldrb r1, [r0, #0xc] + add r1, r1, #1 + strb r1, [r0, #0xc] + bl FUN_021E26E4 + ldrb r0, [r0, #0xc] + cmp r0, #5 + bls _021E9030 + bl FUN_021E26E4 + mov r1, #0 + strb r1, [r0, #0xc] + bl FUN_021E26E4 + mov r4, r0 + bl FUN_021E26E4 + ldrb r0, [r0, #0x14] + add r0, r4, r0, lsl #2 + ldr r0, [r0, #0xf4] + bl FUN_021E59D4 + add sp, sp, #0x1c + ldmia sp!, {r4, r5, r6, r7, pc} +_021E9030: + bl FUN_021E26E4 + ldr r3, [r0, #0x200] + ldr r2, _021E91F8 ; =0x0220D394 + add r0, sp, #0x10 + mov r1, #0xc + bl OS_SNPrintf + bl FUN_021E26E4 + mov r4, r0 + bl FUN_021E26E4 + mov r7, r0 + bl FUN_021E26E4 + mov r6, r0 + bl FUN_021E26E4 + mov r5, r0 + bl FUN_021E26E4 + ldrb r2, [r6, #0x14] + ldrb r1, [r0, #0x14] + add r0, r7, r2, lsl #2 + add r1, r5, r1, lsl #1 + add r1, r1, #0x200 + ldrh r1, [r1, #0x90] + ldr r0, [r0, #0x210] + mov r2, #0 + bl FUN_021FFEB0 + mov r5, r0 + bl FUN_021E26E4 + mvn r1, #0 + str r1, [sp] + ldr r3, _021E91FC ; =0x00001388 + mov r1, #0 + str r3, [sp, #4] + ldr r0, [r0, #8] + mov r2, r5 + str r0, [sp, #8] + str r1, [sp, #0xc] + ldr r0, [r4, #4] + add r3, sp, #0x10 + ldr r0, [r0] + bl FUN_021FD52C + cmp r0, #1 + bne _021E90E0 + bl FUN_021E36B0 + add sp, sp, #0x1c + ldmia sp!, {r4, r5, r6, r7, pc} +_021E90E0: + cmp r0, #0 + addeq sp, sp, #0x1c + ldmeqia sp!, {r4, r5, r6, r7, pc} + bl FUN_021E26E4 + mov r4, r0 + bl FUN_021E26E4 + ldrb r0, [r0, #0x14] + add r0, r4, r0, lsl #2 + ldr r0, [r0, #0xf4] + bl FUN_021E59D4 + add sp, sp, #0x1c + cmp r0, #0 + ldmia sp!, {r4, r5, r6, r7, pc} +_021E9114: + bl FUN_021E26E4 + mov r4, r0 + bl FUN_021E26E4 + ldrb r0, [r0, #0xd] + add r0, r0, #1 + add r0, r4, r0, lsl #2 + ldr r0, [r0, #0xf4] + bl FUN_021E59D4 + add sp, sp, #0x1c + cmp r0, #0 + ldmia sp!, {r4, r5, r6, r7, pc} +_021E9140: + bl FUN_021DF704 + mov r5, r0 + mvn r1, #0 + cmp r5, r1 + bne _021E9168 + ldr r1, _021E9200 ; =0xFFFEABC4 + mov r0, #6 + bl FUN_021E8E08 + add sp, sp, #0x1c + ldmia sp!, {r4, r5, r6, r7, pc} +_021E9168: + bl FUN_021DF6BC + mov r4, r0 + mov r0, r5 + bl FUN_021DF638 + str r6, [r4] + mov r4, r0 + bl FUN_021E26E4 + ldrb r2, [r0, #0xd] + mov r1, #0 + add r2, r2, #1 + strb r2, [r0, #0xd] + strb r5, [r4] + strh r1, [r4, #2] + str r1, [r4, #4] + bl FUN_021E26E4 + mov r5, r0 + bl FUN_021E26E4 + ldrb r2, [r0, #0xd] + mov r0, r6 + mov r1, r4 + add r2, r5, r2 + ldrb r2, [r2, #0x2d0] + strb r2, [r4, #1] + bl FUN_021FD3F8 + bl FUN_021E26E4 + ldr r0, [r0, #0x1a0] + cmp r0, #0xc + bne _021E91E8 + mov r0, #0 + bl FUN_021E51C0 + add sp, sp, #0x1c + ldmia sp!, {r4, r5, r6, r7, pc} +_021E91E8: + mov r0, #1 + bl FUN_021E51C0 + add sp, sp, #0x1c + ldmia sp!, {r4, r5, r6, r7, pc} + .align 2, 0 +_021E91F8: .word 0x0220D394 +_021E91FC: .word 0x00001388 +_021E9200: .word 0xFFFEABC4 + + arm_func_start FUN_021E9204 +FUN_021E9204: ; 0x021E9204 + stmdb sp!, {r4, r5, r6, r7, r8, sb, lr} + sub sp, sp, #4 + mov r8, r1 + mov r7, r2 + mov r6, r3 + bl FUN_021E26E4 + cmp r0, #0 + beq _021E9244 + bl FUN_021E26E4 + ldr r0, [r0, #0x1a0] + cmp r0, #7 + bne _021E9244 + bl FUN_021E26E4 + ldrb r0, [r0, #0x1a9] + cmp r0, #0 + beq _021E925C +_021E9244: + ldr r1, _021E944C ; =0x0220D48C + mov r0, r8 + mvn r2, #0 + bl FUN_021FD6B0 + add sp, sp, #4 + ldmia sp!, {r4, r5, r6, r7, r8, sb, pc} +_021E925C: + bl FUN_021DF704 + mov r5, r0 + mvn r2, #0 + cmp r5, r2 + bne _021E9290 + ldr r1, _021E9450 ; =0x0220D498 + mov r0, r8 + bl FUN_021FD6B0 + ldr r1, _021E9454 ; =0xFFFEABC4 + mov r0, #6 + bl FUN_021E8E08 + add sp, sp, #4 + ldmia sp!, {r4, r5, r6, r7, r8, sb, pc} +_021E9290: + bl FUN_021E26E4 + mov r4, r0 + bl FUN_021E26E4 + ldrb r0, [r0, #0xd] + add r0, r4, r0, lsl #2 + ldr r0, [r0, #0x210] + cmp r7, r0 + bne _021E92D4 + bl FUN_021E26E4 + mov r4, r0 + bl FUN_021E26E4 + ldrb r0, [r0, #0xd] + add r0, r4, r0, lsl #1 + add r0, r0, #0x200 + ldrh r0, [r0, #0x90] + cmp r6, r0 + beq _021E9364 +_021E92D4: + ldr r0, [sp, #0x24] + ldrb r1, [r0] + cmp r1, #0 + beq _021E934C + mov r1, #0 + mov r2, #0xa + bl strtoul + mov r4, r0 + bl FUN_021E26E4 + mov sb, r0 + bl FUN_021E26E4 + ldrb r0, [r0, #0xd] + add r0, sb, r0, lsl #2 + ldr r0, [r0, #0xf4] + cmp r4, r0 + bne _021E934C + bl FUN_021E26E4 + mov r4, r0 + bl FUN_021E26E4 + ldrb r0, [r0, #0xd] + add r0, r4, r0, lsl #2 + str r7, [r0, #0x210] + bl FUN_021E26E4 + mov r4, r0 + bl FUN_021E26E4 + ldrb r0, [r0, #0xd] + add r0, r4, r0, lsl #1 + add r0, r0, #0x200 + strh r6, [r0, #0x90] + b _021E9364 +_021E934C: + ldr r1, _021E9458 ; =0x0220D4A4 + mov r0, r8 + mvn r2, #0 + bl FUN_021FD6B0 + add sp, sp, #4 + ldmia sp!, {r4, r5, r6, r7, r8, sb, pc} +_021E9364: + bl FUN_021E26E4 + mov r1, #0 + str r1, [r0, #0x18c] + str r1, [r0, #0x190] + bl FUN_021E26E4 + ldr r1, [r0, #8] + mov r0, r8 + bl FUN_021FD6BC + cmp r0, #0 + bne _021E93A0 + ldr r1, _021E945C ; =0xFFFEC5E6 + mov r0, #6 + bl FUN_021E8E08 + add sp, sp, #4 + ldmia sp!, {r4, r5, r6, r7, r8, sb, pc} +_021E93A0: + bl FUN_021E8ECC + bl FUN_021E26E4 + ldrb r0, [r0, #0xd] + cmp r0, #0 + bne _021E93D4 + ldr r1, [sp, #0x20] + ldr r0, _021E9460 ; =0x0000FFFF + mov r4, r1, asr #1 + cmp r4, r0 + movge r4, r0 + bl FUN_021E26E4 + add r0, r0, #0x100 + strh r4, [r0, #0xb0] +_021E93D4: + mov r0, r5 + bl FUN_021DF6BC + mov r4, r0 + mov r0, r5 + bl FUN_021DF638 + str r8, [r4] + mov r4, r0 + bl FUN_021E26E4 + ldrb r1, [r0, #0xd] + add r1, r1, #1 + strb r1, [r0, #0xd] + strb r5, [r4] + bl FUN_021E26E4 + mov r5, r0 + bl FUN_021E26E4 + ldrb r1, [r0, #0xd] + mov r0, r8 + mov r2, #0 + sub r1, r1, #1 + add r1, r5, r1 + ldrb r3, [r1, #0x2d0] + mov r1, r4 + strb r3, [r4, #1] + strh r2, [r4, #2] + str r2, [r4, #4] + bl FUN_021FD3F8 + mov r0, #2 + bl FUN_021E51C0 + add sp, sp, #4 + ldmia sp!, {r4, r5, r6, r7, r8, sb, pc} + .align 2, 0 +_021E944C: .word 0x0220D48C +_021E9450: .word 0x0220D498 +_021E9454: .word 0xFFFEABC4 +_021E9458: .word 0x0220D4A4 +_021E945C: .word 0xFFFEC5E6 +_021E9460: .word 0x0000FFFF + + arm_func_start FUN_021E9464 +FUN_021E9464: ; 0x021E9464 + stmdb sp!, {r4, r5, r6, lr} + sub sp, sp, #8 + ldr r0, [sp, #0x18] + mov r5, r1 + mov r6, r2 + mov r4, r3 + cmp r0, #0 + beq _021E948C + cmp r4, #0 + bne _021E9498 +_021E948C: + add sp, sp, #8 + mov r0, #0 + ldmia sp!, {r4, r5, r6, pc} +_021E9498: + add r1, sp, #0 + mov r0, #0 + mov r2, #8 + bl MIi_CpuClear32 + mov r1, r6, asr #8 + mov r0, r6, lsl #8 + mov r2, #2 + and r1, r1, #0xff + and r0, r0, #0xff00 + orr r0, r1, r0 + strb r2, [sp, #1] + strh r0, [sp, #2] + str r5, [sp, #4] + ldrb r5, [r4] + cmp r5, #0xfe + bne _021E94E4 + ldrb r0, [r4, #1] + cmp r0, #0xfd + beq _021E94EC +_021E94E4: + cmp r5, #0x5c + bne _021E9518 +_021E94EC: + bl FUN_021E26E4 + ldr r0, [r0, #0x10] + cmp r0, #0 + beq _021E9558 + bl FUN_021E26E4 + ldr r0, [r0, #0x10] + ldr r2, [sp, #0x18] + add r3, sp, #0 + mov r1, r4 + bl FUN_022011A8 + b _021E9558 +_021E9518: + ldr r1, _021E9564 ; =0x0220F018 + mov r0, r4 + mov r2, #6 + bl memcmp + cmp r0, #0 + bne _021E9544 + ldr r1, [sp, #0x18] + add r2, sp, #0 + mov r0, r4 + bl FUN_021FFF78 + b _021E9558 +_021E9544: + cmp r5, #0xfe + moveq r0, #0 + add sp, sp, #8 + movne r0, #0 + ldmia sp!, {r4, r5, r6, pc} +_021E9558: + mov r0, #1 + add sp, sp, #8 + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +_021E9564: .word 0x0220F018 + + arm_func_start FUN_021E9568 +FUN_021E9568: ; 0x021E9568 + stmdb sp!, {r4, r5, r6, r7, lr} + sub sp, sp, #0xc + mov r4, r0 + bl FUN_021E26E4 + cmp r0, #0 + addeq sp, sp, #0xc + ldmeqia sp!, {r4, r5, r6, r7, pc} + bl FUN_021DD6D4 + cmp r0, #0 + addne sp, sp, #0xc + ldmneia sp!, {r4, r5, r6, r7, pc} + cmp r4, #0 + bne _021E95E4 + bl FUN_021E26E4 + ldr r0, [r0, #0x10] + cmp r0, #0 + beq _021E95B8 + bl FUN_021E26E4 + ldr r0, [r0, #0x10] + bl FUN_02202534 +_021E95B8: + bl FUN_021E26E4 + ldr r0, [r0, #4] + cmp r0, #0 + addeq sp, sp, #0xc + ldmeqia sp!, {r4, r5, r6, r7, pc} + bl FUN_021E26E4 + ldr r0, [r0, #4] + ldr r0, [r0] + bl FUN_021FD6D4 + add sp, sp, #0xc + ldmia sp!, {r4, r5, r6, r7, pc} +_021E95E4: + bl FUN_021E26E4 + ldr r0, [r0, #0x1a0] + cmp r0, #0 + addeq sp, sp, #0xc + ldmeqia sp!, {r4, r5, r6, r7, pc} + bl FUN_021E26E4 + ldr r0, [r0, #0x1a0] + cmp r0, #0xd + addls pc, pc, r0, lsl #2 + b _021E9D04 +_021E960C: ; jump table + b _021E9D04 ; case 0 + b _021E9C0C ; case 1 + b _021E97B8 ; case 2 + b _021E97B8 ; case 3 + b _021E9644 ; case 4 + b _021E97B8 ; case 5 + b _021E9D04 ; case 6 + b _021E9870 ; case 7 + b _021E9D04 ; case 8 + b _021E9D04 ; case 9 + b _021E9D04 ; case 10 + b _021E99F8 ; case 11 + b _021E9D04 ; case 12 + b _021E9AEC ; case 13 +_021E9644: + bl FUN_021E26E4 + ldr r0, [r0, #0x1c8] + cmp r0, #0 + beq _021E9730 + bl OS_GetTick + mov r6, r0 + mov r7, r1 + bl FUN_021E26E4 + mov r5, r0 + bl FUN_021E26E4 + mov r4, r0 + ldr r1, [r5, #0x1cc] + ldr r0, [r5, #0x1d0] + subs r2, r6, r1 + sbc r0, r7, r0 + mov r1, r0, lsl #6 + orr r1, r1, r2, lsr #26 + mov r0, r2, lsl #6 + ldr r2, _021E9EF8 ; =0x000082EA + mov r3, #0 + bl _ll_udiv + cmp r1, #0 + ldr r1, [r4, #0x1c8] + cmpeq r0, r1 + bls _021E9730 + bl FUN_021E26E4 + mov r1, #0 + str r1, [r0, #0x1c8] + bl FUN_021E26E4 + ldrb r0, [r0, #0x15] + cmp r0, #3 + bne _021E971C + bl FUN_021E26E4 + ldrb r1, [r0, #0x1aa] + add r1, r1, #1 + strb r1, [r0, #0x1aa] + bl FUN_021E26E4 + ldrb r0, [r0, #0x1aa] + cmp r0, #5 + bls _021E96F8 + ldr r1, _021E9EFC ; =0xFFFEC5D2 + mov r0, #6 + bl FUN_021E8E08 + add sp, sp, #0xc + ldmia sp!, {r4, r5, r6, r7, pc} +_021E96F8: + bl FUN_021E26E4 + ldr r0, [r0, #0xf4] + mov r1, #0 + bl FUN_021E6038 + bl FUN_021E61EC + cmp r0, #0 + beq _021E9730 + add sp, sp, #0xc + ldmia sp!, {r4, r5, r6, r7, pc} +_021E971C: + mov r0, #0 + bl FUN_021E5C44 + cmp r0, #0 + addeq sp, sp, #0xc + ldmeqia sp!, {r4, r5, r6, r7, pc} +_021E9730: + bl FUN_021E26E4 + ldr r0, [r0, #0x1bc] + cmp r0, #0 + beq _021E9D04 + bl FUN_021E26E4 + ldrb r1, [r0, #0xd] + ldr r0, _021E9F00 ; =0x00000BB8 + mla r5, r1, r0, r0 + bl OS_GetTick + mov r4, r0 + mov r6, r1 + bl FUN_021E26E4 + ldr r1, [r0, #0x1c0] + ldr r0, [r0, #0x1c4] + subs r2, r4, r1 + sbc r0, r6, r0 + mov r1, r0, lsl #6 + orr r1, r1, r2, lsr #26 + mov r0, r2, lsl #6 + ldr r2, _021E9EF8 ; =0x000082EA + mov r3, #0 + bl _ll_udiv + cmp r1, #0 + cmpeq r0, r5 + blo _021E9D04 + bl FUN_021E26E4 + ldr r0, [r0, #0xf4] + mov r1, #0 + bl FUN_021E6038 + bl FUN_021E61EC + cmp r0, #0 + beq _021E9D04 + add sp, sp, #0xc + ldmia sp!, {r4, r5, r6, r7, pc} +_021E97B8: + bl FUN_021E26E4 + ldr r0, [r0, #0xe8] + cmp r0, #0 + ble _021E9D04 + bl FUN_021E26E4 + ldr r0, [r0, #0x1a0] + cmp r0, #3 + bne _021E97EC + bl FUN_021E26E4 + ldrb r1, [r0, #0xd] + ldr r0, _021E9F00 ; =0x00000BB8 + mla r5, r1, r0, r0 + b _021E9800 +_021E97EC: + bl FUN_021E26E4 + ldr r0, [r0, #0xe8] + cmp r0, #1 + moveq r5, #0x3e8 + ldrne r5, _021E9F00 ; =0x00000BB8 +_021E9800: + bl OS_GetTick + mov r4, r0 + mov r6, r1 + bl FUN_021E26E4 + ldr r1, [r0, #0xec] + ldr r0, [r0, #0xf0] + subs r3, r4, r1 + sbc r0, r6, r0 + mov r1, r0, lsl #6 + ldr r2, _021E9EF8 ; =0x000082EA + orr r1, r1, r3, lsr #26 + mov r0, r3, lsl #6 + mov r3, #0 + bl _ll_udiv + cmp r1, #0 + cmpeq r0, r5 + bls _021E9D04 + bl FUN_021E26E4 + ldr r0, [r0, #0x204] + bl FUN_021E7E5C + bl FUN_021E38E8 + cmp r0, #0 + addne sp, sp, #0xc + ldmneia sp!, {r4, r5, r6, r7, pc} + bl FUN_021E26E4 + mov r1, #0 + str r1, [r0, #0xe8] + b _021E9D04 +_021E9870: + bl FUN_021E26E4 + ldr r2, [r0, #0x18c] + ldr r1, [r0, #0x190] + mov r0, #0 + cmp r1, r0 + cmpeq r2, r0 + beq _021E9900 + bl OS_GetTick + mov r4, r0 + mov r5, r1 + bl FUN_021E26E4 + ldr r1, [r0, #0x18c] + ldr r0, [r0, #0x190] + subs r3, r4, r1 + sbc r0, r5, r0 + mov r1, r0, lsl #6 + ldr r2, _021E9EF8 ; =0x000082EA + orr r1, r1, r3, lsr #26 + mov r0, r3, lsl #6 + mov r3, #0 + bl _ll_udiv + ldr r2, _021E9F04 ; =0x000061A8 + cmp r1, #0 + cmpeq r0, r2 + bls _021E9D04 + bl FUN_021E26E4 + mov r1, #0 + str r1, [r0, #0x18c] + str r1, [r0, #0x190] + bl FUN_021E26E4 + ldr r0, [r0, #0xf4] + bl FUN_021E5908 + cmp r0, #0 + bne _021E9D04 + add sp, sp, #0xc + ldmia sp!, {r4, r5, r6, r7, pc} +_021E9900: + bl FUN_021E26E4 + ldrb r0, [r0, #0x3cc] + cmp r0, #6 + bne _021E9D04 + bl OS_GetTick + mov r4, r0 + mov r5, r1 + bl FUN_021E26E4 + ldr r1, [r0, #0x45c] + ldr r0, [r0, #0x460] + subs r3, r4, r1 + sbc r0, r5, r0 + mov r1, r0, lsl #6 + ldr r2, _021E9EF8 ; =0x000082EA + orr r1, r1, r3, lsr #26 + mov r0, r3, lsl #6 + mov r3, #0 + bl _ll_udiv + ldr r2, _021E9F08 ; =0x00001770 + cmp r1, #0 + cmpeq r0, r2 + bls _021E9D04 + bl FUN_021E26E4 + ldrb r1, [r0, #0x3cd] + add r1, r1, #1 + strb r1, [r0, #0x3cd] + bl FUN_021E26E4 + ldrb r0, [r0, #0x3cd] + cmp r0, #5 + bls _021E9998 + bl FUN_021E8ECC + bl FUN_021E26E4 + ldr r0, [r0, #0xf4] + bl FUN_021E5908 + cmp r0, #0 + bne _021E9D04 + add sp, sp, #0xc + ldmia sp!, {r4, r5, r6, r7, pc} +_021E9998: + bl FUN_021E26E4 + mov r7, r0 + bl FUN_021E26E4 + mov r6, r0 + bl FUN_021E26E4 + mov r5, r0 + bl FUN_021E26E4 + mov r4, r0 + bl FUN_021E26E4 + add r1, r4, #0x3d4 + str r1, [sp] + add r3, r5, #0x300 + ldr r1, [r0, #0x458] + mov r0, #6 + str r1, [sp, #4] + ldr r1, [r7, #0x454] + ldr r2, [r6, #0x3d0] + ldrh r3, [r3, #0xce] + bl FUN_021E7884 + bl FUN_021E61EC + cmp r0, #0 + beq _021E9D04 + add sp, sp, #0xc + ldmia sp!, {r4, r5, r6, r7, pc} +_021E99F8: + bl FUN_021E26E4 + ldrb r0, [r0, #0x3cc] + cmp r0, #2 + bne _021E9D04 + bl FUN_021E26E4 + ldrb r0, [r0, #0x15] + cmp r0, #0 + bne _021E9A60 + bl OS_GetTick + mov r4, r0 + mov r5, r1 + bl FUN_021E26E4 + ldr r1, [r0, #0x45c] + ldr r0, [r0, #0x460] + subs r3, r4, r1 + sbc r0, r5, r0 + mov r1, r0, lsl #6 + ldr r2, _021E9EF8 ; =0x000082EA + orr r1, r1, r3, lsr #26 + mov r0, r3, lsl #6 + mov r3, #0 + bl _ll_udiv + ldr r2, _021E9F08 ; =0x00001770 + cmp r1, #0 + cmpeq r0, r2 + bhi _021E9AB8 +_021E9A60: + bl FUN_021E26E4 + ldrb r0, [r0, #0x15] + cmp r0, #0 + beq _021E9D04 + bl OS_GetTick + mov r4, r0 + mov r5, r1 + bl FUN_021E26E4 + ldr r1, [r0, #0x45c] + ldr r0, [r0, #0x460] + subs r3, r4, r1 + sbc r0, r5, r0 + mov r1, r0, lsl #6 + ldr r2, _021E9EF8 ; =0x000082EA + orr r1, r1, r3, lsr #26 + mov r0, r3, lsl #6 + mov r3, #0 + bl _ll_udiv + ldr r2, _021E9F0C ; =0x00004A38 + cmp r1, #0 + cmpeq r0, r2 + bls _021E9D04 +_021E9AB8: + bl FUN_021E8ECC + bl FUN_021E26E4 + mov r4, r0 + bl FUN_021E26E4 + ldrb r0, [r0, #0xd] + add r0, r0, #1 + add r0, r4, r0, lsl #2 + ldr r0, [r0, #0xf4] + bl FUN_021E59D4 + cmp r0, #0 + bne _021E9D04 + add sp, sp, #0xc + ldmia sp!, {r4, r5, r6, r7, pc} +_021E9AEC: + bl FUN_021E26E4 + ldrb r0, [r0, #0x3cc] + cmp r0, #8 + bne _021E9D04 + bl OS_GetTick + mov r4, r0 + mov r5, r1 + bl FUN_021E26E4 + ldr r1, [r0, #0x45c] + ldr r0, [r0, #0x460] + subs r3, r4, r1 + sbc r0, r5, r0 + mov r1, r0, lsl #6 + ldr r2, _021E9EF8 ; =0x000082EA + orr r1, r1, r3, lsr #26 + mov r0, r3, lsl #6 + mov r3, #0 + bl _ll_udiv + ldr r2, _021E9F10 ; =0x00007530 + cmp r1, #0 + cmpeq r0, r2 + bls _021E9D04 + bl FUN_021E26E4 + ldrb r1, [r0, #0x3cd] + add r1, r1, #1 + strb r1, [r0, #0x3cd] + bl FUN_021E26E4 + ldrb r0, [r0, #0x3cd] + cmp r0, #0 + beq _021E9BAC + bl FUN_021E8ECC + bl FUN_021E26E4 + ldrb r0, [r0, #0x15] + cmp r0, #2 + bne _021E9BA4 + bl FUN_021E26E4 + mov r4, r0 + bl FUN_021E26E4 + ldrb r0, [r0, #0xd] + add r0, r4, r0, lsl #2 + ldr r0, [r0, #0xf4] + bl FUN_021E59D4 + cmp r0, #0 + bne _021E9D04 + add sp, sp, #0xc + ldmia sp!, {r4, r5, r6, r7, pc} +_021E9BA4: + bl FUN_021E4CB4 + b _021E9D04 +_021E9BAC: + bl FUN_021E26E4 + mov r7, r0 + bl FUN_021E26E4 + mov r6, r0 + bl FUN_021E26E4 + mov r5, r0 + bl FUN_021E26E4 + mov r4, r0 + bl FUN_021E26E4 + add r1, r4, #0x3d4 + str r1, [sp] + add r3, r5, #0x300 + ldr r1, [r0, #0x458] + mov r0, #8 + str r1, [sp, #4] + ldr r1, [r7, #0x454] + ldr r2, [r6, #0x3d0] + ldrh r3, [r3, #0xce] + bl FUN_021E7884 + bl FUN_021E61EC + cmp r0, #0 + beq _021E9D04 + add sp, sp, #0xc + ldmia sp!, {r4, r5, r6, r7, pc} +_021E9C0C: + bl FUN_021DF88C + cmp r0, #5 + bne _021E9D04 + bl OS_GetTick + mov r4, r0 + mov r5, r1 + bl FUN_021E26E4 + ldr r1, [r0, #0x1f8] + ldr r0, [r0, #0x1fc] + subs r3, r4, r1 + sbc r0, r5, r0 + mov r1, r0, lsl #6 + ldr r2, _021E9EF8 ; =0x000082EA + orr r1, r1, r3, lsr #26 + mov r0, r3, lsl #6 + mov r3, #0 + bl _ll_udiv + ldr r2, _021E9F10 ; =0x00007530 + cmp r1, #0 + cmpeq r0, r2 + bls _021E9D04 + bl FUN_021E26E4 + ldrb r0, [r0, #0x1ad] + cmp r0, #5 + blo _021E9C8C + bl FUN_021E26E4 + ldr r0, [r0, #0xf4] + bl FUN_021E5908 + cmp r0, #0 + bne _021E9D04 + add sp, sp, #0xc + ldmia sp!, {r4, r5, r6, r7, pc} +_021E9C8C: + bl FUN_021E26E4 + mov r5, r0 + bl FUN_021E26E4 + mov r4, r0 + bl FUN_021E26E4 + mov r1, #0 + str r1, [sp] + str r1, [sp, #4] + ldrh r3, [r0, #0xa4] + ldr r1, [r5, #0xf4] + ldr r2, [r4, #0x24] + mov r0, #0x40 + bl FUN_021E7884 + bl FUN_021E61EC + cmp r0, #0 + addne sp, sp, #0xc + ldmneia sp!, {r4, r5, r6, r7, pc} + bl FUN_021E26E4 + ldrb r1, [r0, #0x1ad] + add r1, r1, #1 + strb r1, [r0, #0x1ad] + bl FUN_021E26E4 + mov r4, r0 + bl OS_GetTick + ldr r2, _021E9F14 ; =0xFF403B3A + mvn r3, #0 + adds r0, r0, r2 + str r0, [r4, #0x1f8] + adc r0, r1, r3 + str r0, [r4, #0x1fc] +_021E9D04: + bl FUN_021E26E4 + ldr r0, [r0, #0x1a0] + cmp r0, #0xb + beq _021E9D24 + bl FUN_021E26E4 + ldr r0, [r0, #0x1a0] + cmp r0, #6 + bne _021E9DA0 +_021E9D24: + bl FUN_021E26E4 + ldr r2, [r0, #0x184] + ldr r1, [r0, #0x188] + mov r0, #0 + cmp r1, r0 + cmpeq r2, r0 + beq _021E9DA0 + bl OS_GetTick + mov r4, r0 + mov r5, r1 + bl FUN_021E26E4 + ldr r1, [r0, #0x184] + ldr r0, [r0, #0x188] + subs r3, r4, r1 + sbc r0, r5, r0 + mov r1, r0, lsl #6 + ldr r2, _021E9EF8 ; =0x000082EA + orr r1, r1, r3, lsr #26 + mov r0, r3, lsl #6 + mov r3, #0 + bl _ll_udiv + ldr r2, _021E9F18 ; =0x00002710 + cmp r1, #0 + cmpeq r0, r2 + bls _021E9DA0 + bl FUN_021E26E4 + mov r1, #0 + add r3, r0, #0x194 + mov r2, r1 + mov r0, #1 + bl FUN_021E2784 +_021E9DA0: + bl FUN_021E26E4 + ldr r0, [r0, #0xe4] + cmp r0, #0 + beq _021E9DBC + bl FUN_021E26E4 + ldr r0, [r0, #0xe4] + bl FUN_02203C38 +_021E9DBC: + bl FUN_021E26E4 + ldr r0, [r0, #0x10] + bl FUN_021E9F1C + bl FUN_02200468 + bl FUN_021E26E4 + ldr r0, [r0, #4] + cmp r0, #0 + beq _021E9DEC + bl FUN_021E26E4 + ldr r0, [r0, #4] + ldr r0, [r0] + bl FUN_021FD6D4 +_021E9DEC: + bl FUN_021E26E4 + ldr r0, [r0, #0x1a0] + cmp r0, #0x12 + bne _021E9E54 + bl OS_GetTick + mov r4, r0 + mov r5, r1 + bl FUN_021E26E4 + ldr r1, [r0, #0x1f0] + ldr r0, [r0, #0x1f4] + subs r3, r4, r1 + sbc r0, r5, r0 + mov r1, r0, lsl #6 + ldr r2, _021E9EF8 ; =0x000082EA + orr r1, r1, r3, lsr #26 + mov r0, r3, lsl #6 + mov r3, #0 + bl _ll_udiv + ldr r2, _021E9F00 ; =0x00000BB8 + cmp r1, #0 + cmpeq r0, r2 + bls _021E9E54 + bl FUN_021E4BF4 + cmp r0, #0 + addne sp, sp, #0xc + ldmneia sp!, {r4, r5, r6, r7, pc} +_021E9E54: + bl FUN_021E4684 + cmp r0, #0 + addeq sp, sp, #0xc + ldmeqia sp!, {r4, r5, r6, r7, pc} + bl FUN_021E41C4 + cmp r0, #0 + addeq sp, sp, #0xc + ldmeqia sp!, {r4, r5, r6, r7, pc} + bl FUN_021E39F0 + bl FUN_021E26E4 + ldrb r0, [r0, #0x1ae] + cmp r0, #0 + addeq sp, sp, #0xc + ldmeqia sp!, {r4, r5, r6, r7, pc} + bl FUN_021E26E4 + ldr r0, [r0, #0x1a0] + cmp r0, #0xa + addne sp, sp, #0xc + ldmneia sp!, {r4, r5, r6, r7, pc} + bl FUN_021E26E4 + mov r4, r0 + bl FUN_021E26E4 + ldrb r0, [r0, #0xd] + strb r0, [r4, #0x16] + bl FUN_021E85D4 + bl FUN_021E26E4 + mov r1, #0 + strb r1, [r0, #0x1ae] + bl FUN_021E26E4 + ldr r0, [r0, #0x47c] + cmp r0, #0 + addeq sp, sp, #0xc + ldmeqia sp!, {r4, r5, r6, r7, pc} + bl FUN_021E26E4 + mov r4, r0 + bl FUN_021E26E4 + ldr r0, [r0, #0x480] + ldr r1, [r4, #0x47c] + blx r1 + add sp, sp, #0xc + ldmia sp!, {r4, r5, r6, r7, pc} + .align 2, 0 +_021E9EF8: .word 0x000082EA +_021E9EFC: .word 0xFFFEC5D2 +_021E9F00: .word 0x00000BB8 +_021E9F04: .word 0x000061A8 +_021E9F08: .word 0x00001770 +_021E9F0C: .word 0x00004A38 +_021E9F10: .word 0x00007530 +_021E9F14: .word 0xFF403B3A +_021E9F18: .word 0x00002710 + + arm_func_start FUN_021E9F1C +FUN_021E9F1C: ; 0x021E9F1C + stmdb sp!, {r4, lr} + movs r4, r0 + ldmeqia sp!, {r4, pc} + bl FUN_02202534 + ldr r0, [r4, #0xb4] + cmp r0, #0 + ldmneia sp!, {r4, pc} + bl FUN_021E26E4 + ldrb r0, [r0, #0x15] + cmp r0, #0 + beq _021E9F5C + cmp r0, #1 + beq _021E9F5C + cmp r0, #2 + beq _021E9FB0 + ldmia sp!, {r4, pc} +_021E9F5C: + bl FUN_021E26E4 + ldr r0, [r0, #0x1a0] + cmp r0, #0xb + addls pc, pc, r0, lsl #2 + ldmia sp!, {r4, pc} +_021E9F70: ; jump table + ldmia sp!, {r4, pc} ; case 0 + b _021E9FA0 ; case 1 + b _021E9FA0 ; case 2 + b _021E9FA0 ; case 3 + b _021E9FA0 ; case 4 + ldmia sp!, {r4, pc} ; case 5 + b _021E9FA0 ; case 6 + ldmia sp!, {r4, pc} ; case 7 + ldmia sp!, {r4, pc} ; case 8 + ldmia sp!, {r4, pc} ; case 9 + ldmia sp!, {r4, pc} ; case 10 + b _021E9FA0 ; case 11 +_021E9FA0: + bl FUN_021E26E4 + ldr r0, [r0, #0x10] + bl FUN_02202308 + ldmia sp!, {r4, pc} +_021E9FB0: + bl FUN_021E26E4 + ldr r0, [r0, #0x1a0] + cmp r0, #0xb + ldmneia sp!, {r4, pc} + bl FUN_021E26E4 + ldr r0, [r0, #0x10] + bl FUN_02202308 + ldmia sp!, {r4, pc} + + arm_func_start FUN_021E9FD0 +FUN_021E9FD0: ; 0x021E9FD0 + stmdb sp!, {r4, r5, r6, lr} + sub sp, sp, #0x18 + mov r5, r2 + mov r6, r0 + mov r4, r3 + mov r2, r1 + mov r3, r5 + mov r0, #3 + mov r1, #0 + bl FUN_021E80C4 + bl FUN_021E26E4 + str r4, [r0, #0x46c] + bl FUN_021E26E4 + ldr r1, [sp, #0x28] + str r1, [r0, #0x470] + bl FUN_021E26E4 + mov r1, #1 + strb r1, [r0, #0x17] + bl FUN_021E26E4 + mov r4, r0 + bl FUN_021E26E4 + ldr r0, [r0, #0x200] + str r0, [r4, #0x20] + bl FUN_021E26E4 + str r6, [r0, #0xf4] + mov r0, #4 + bl FUN_021E26D0 + bl FUN_021E26E4 + ldr r0, [r0, #0xe4] + cmp r0, #0 + bne _021EA0A4 + bl FUN_021E26E4 + mov r6, r0 + bl FUN_021E26E4 + mov r5, r0 + bl FUN_021E26E4 + mov r4, r0 + bl FUN_021E26E4 + mov r2, r0 + mov r0, #0x14 + str r0, [sp] + mov r0, #1 + str r0, [sp, #4] + mov r3, #0 + str r3, [sp, #8] + ldr r0, _021EA130 ; =FUN_021E32E4 + str r0, [sp, #0xc] + str r3, [sp, #0x10] + ldr r0, [r5, #0x2f4] + ldr r1, [r4, #0x2f4] + ldr r2, [r2, #0x2f8] + bl FUN_02203EA4 + str r0, [r6, #0xe4] +_021EA0A4: + bl FUN_021E26E4 + ldr r0, [r0, #0xe4] + cmp r0, #0 + bne _021EA0C8 + mov r0, #5 + bl FUN_021E38E8 + cmp r0, #0 + addne sp, sp, #0x18 + ldmneia sp!, {r4, r5, r6, pc} +_021EA0C8: + ldr r1, _021EA134 ; =0x0220D3F0 + mov r0, #5 + mov r2, #0 + bl FUN_021E1E30 + bl FUN_021E397C + cmp r0, #0 + addne sp, sp, #0x18 + ldmneia sp!, {r4, r5, r6, pc} + bl FUN_021E26E4 + ldr r0, [r0, #0x10] + cmp r0, #0 + bne _021EA110 + bl FUN_021E26E4 + ldr r0, [r0, #0x200] + bl FUN_021EA1E0 + cmp r0, #0 + addne sp, sp, #0x18 + ldmneia sp!, {r4, r5, r6, pc} +_021EA110: + bl FUN_021E26E4 + ldr r0, [r0, #0xf4] + mov r1, #0 + bl FUN_021E6038 + bl FUN_021E61EC + cmp r0, #0 + add sp, sp, #0x18 + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +_021EA130: .word FUN_021E32E4 +_021EA134: .word 0x0220D3F0 + + arm_func_start FUN_021EA138 +FUN_021EA138: ; 0x021EA138 + stmdb sp!, {r4, lr} + mov lr, r1 + mov ip, r2 + mov r4, r3 + mov r1, r0 + mov r2, lr + mov r3, ip + mov r0, #2 + bl FUN_021E80C4 + bl FUN_021E26E4 + str r4, [r0, #0x46c] + bl FUN_021E26E4 + ldr r1, [sp, #8] + str r1, [r0, #0x470] + bl FUN_021E26E4 + mov r4, r0 + bl FUN_021E26E4 + ldr r0, [r0, #0x200] + str r0, [r4, #0xf4] + bl FUN_021E26E4 + mov r1, #1 + str r1, [r0, #0x2f0] + bl FUN_021E26E4 + mov r2, #0 + strb r2, [r0, #0xe] + ldr r1, _021EA1DC ; =0x022106DC + mov r0, #0xa + strb r2, [r1, #1] + bl FUN_021E26D0 + bl FUN_021E85D4 + bl FUN_021E397C + cmp r0, #0 + ldmneia sp!, {r4, pc} + bl FUN_021E26E4 + ldr r0, [r0, #0x10] + cmp r0, #0 + ldmneia sp!, {r4, pc} + bl FUN_021E26E4 + ldr r0, [r0, #0x200] + bl FUN_021EA1E0 + ldmia sp!, {r4, pc} + .align 2, 0 +_021EA1DC: .word 0x022106DC + + arm_func_start FUN_021EA1E0 +FUN_021EA1E0: ; 0x021EA1E0 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x2c + mov r4, r0 + bl FUN_021E26E4 + ldr r0, [r0, #0x10] + cmp r0, #0 + addne sp, sp, #0x2c + movne r0, #0 + ldmneia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + bl FUN_021E26E4 + str r4, [r0, #0x200] + mov sl, #0 + ldr fp, _021EA344 ; =FUN_021E2E18 + mov r4, sl + mov r5, #1 +_021EA21C: + bl FUN_021E26E4 + mov sb, r0 + bl FUN_021E26E4 + ldr r0, [r0, #4] + ldr r0, [r0] + bl FUN_021FD43C + mov r8, r0 + bl FUN_021E26E4 + ldr r0, [r0, #4] + ldr r0, [r0] + bl FUN_021FD454 + mov r7, r0 + bl FUN_021E26E4 + mov r6, r0 + bl FUN_021E26E4 + ldr r3, [r0, #0x2f8] + mov r1, r8 + str r3, [sp] + str r5, [sp, #4] + str r5, [sp, #8] + ldr r3, _021EA348 ; =FUN_021E2E14 + str fp, [sp, #0xc] + str r3, [sp, #0x10] + ldr r3, _021EA34C ; =FUN_021E2E10 + mov r2, r7 + str r3, [sp, #0x14] + ldr r3, _021EA350 ; =FUN_021E2D68 + add r0, sb, #0x10 + str r3, [sp, #0x18] + ldr r3, _021EA354 ; =FUN_021E2D60 + str r3, [sp, #0x1c] + ldr r3, _021EA358 ; =FUN_021E2D54 + str r3, [sp, #0x20] + str r4, [sp, #0x24] + ldr r3, [r6, #0x2f4] + bl FUN_022025B0 + movs r6, r0 + beq _021EA2E4 + cmp r6, #3 + bne _021EA2C4 + cmp sl, #4 + bne _021EA2D8 +_021EA2C4: + mov r0, r6 + bl FUN_021E3800 + add sp, sp, #0x2c + mov r0, r6 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +_021EA2D8: + add sl, sl, #1 + cmp sl, #5 + blt _021EA21C +_021EA2E4: + bl FUN_021E26E4 + mov r1, #0 + str r1, [r0, #0x1c] + bl FUN_021E26E4 + mov r1, #0 + strh r1, [r0, #0x1a] + bl FUN_021E26E4 + ldr r0, [r0, #0x10] + ldr r1, _021EA35C ; =FUN_021E2D2C + bl FUN_02202568 + bl FUN_021E26E4 + ldr r0, [r0, #0x10] + ldr r1, _021EA360 ; =FUN_021E2C78 + bl FUN_02202598 + bl FUN_021E26E4 + ldr r0, [r0, #0x10] + ldr r1, _021EA364 ; =FUN_021E2B64 + bl FUN_02202580 + bl FUN_021E26E4 + ldr r0, [r0, #0x10] + bl FUN_02202308 + mov r0, r6 + add sp, sp, #0x2c + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_021EA344: .word FUN_021E2E18 +_021EA348: .word FUN_021E2E14 +_021EA34C: .word FUN_021E2E10 +_021EA350: .word FUN_021E2D68 +_021EA354: .word FUN_021E2D60 +_021EA358: .word FUN_021E2D54 +_021EA35C: .word FUN_021E2D2C +_021EA360: .word FUN_021E2C78 +_021EA364: .word FUN_021E2B64 + + arm_func_start FUN_021EA368 +FUN_021EA368: ; 0x021EA368 + stmdb sp!, {r4, r5, r6, lr} + mov r6, r1 + mov r5, r2 + mov r4, r3 + bl FUN_021E26F4 + bl FUN_021E26E4 + str r6, [r0] + bl FUN_021E26E4 + str r5, [r0, #4] + bl FUN_021E26E4 + str r4, [r0, #8] + bl FUN_021E26E4 + mov r1, #0 + str r1, [r0, #0x10] + bl FUN_021E26E4 + mov r1, #0 + str r1, [r0, #0x1c] + bl FUN_021E26E4 + mov r1, #0 + strh r1, [r0, #0x1a] + bl FUN_021E26E4 + mov r1, #0 + str r1, [r0, #0xe4] + mov r0, r1 + bl FUN_021E26D0 + bl FUN_021E26E4 + mov r1, #0 + strb r1, [r0, #0xf] + bl FUN_021E26E4 + mov r1, #0 + strb r1, [r0, #0x19] + bl FUN_021E26E4 + mov r1, #0 + strb r1, [r0, #0x1af] + bl FUN_021E26E4 + mov r1, #0 + add r0, r0, #0x100 + strh r1, [r0, #0xb6] + bl FUN_021E26E4 + mov r1, #0 + str r1, [r0, #0x1dc] + bl FUN_021E26E4 + mov r1, #0 + str r1, [r0, #0x200] + bl FUN_021E26E4 + ldr r1, [sp, #0x10] + str r1, [r0, #0x2f4] + bl FUN_021E26E4 + ldr r1, [sp, #0x14] + str r1, [r0, #0x2f8] + bl FUN_021E26E4 + ldr r1, [sp, #0x18] + str r1, [r0, #0x2fc] + bl FUN_021E26E4 + ldr r1, [sp, #0x1c] + str r1, [r0, #0x300] + bl FUN_021E26E4 + add r0, r0, #0x304 + mov r1, #0 + mov r2, #0x40 + bl MI_CpuFill8 + bl FUN_021E26E4 + mov r1, #0 + str r1, [r0, #0x344] + bl FUN_021E26E4 + mov r1, #0 + str r1, [r0, #0x464] + bl FUN_021E26E4 + mov r1, #0 + str r1, [r0, #0x468] + bl FUN_021E26E4 + mov r1, #0 + str r1, [r0, #0x474] + bl FUN_021E26E4 + mov r1, #0 + str r1, [r0, #0x478] + bl FUN_021E26E4 + mov r1, #0 + str r1, [r0, #0x47c] + bl FUN_021E26E4 + mov r1, #0 + str r1, [r0, #0x480] + bl FUN_021E4164 + ldr r1, _021EA4D0 ; =0x022106DC + mov r0, #0 + strb r0, [r1] + strb r0, [r1, #1] + strh r0, [r1, #2] + bl FUN_021E8174 + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +_021EA4D0: .word 0x022106DC + + arm_func_start FUN_021EA4D4 +FUN_021EA4D4: ; 0x021EA4D4 + stmdb sp!, {lr} + sub sp, sp, #4 + bl FUN_021DD6D4 + cmp r0, #0 + addne sp, sp, #4 + movne r0, #0 + ldmneia sp!, {pc} + bl FUN_021E26E4 + cmp r0, #0 + beq _021EA518 + bl FUN_021DF88C + cmp r0, #5 + bne _021EA518 + bl FUN_021E26E4 + ldrb r0, [r0, #0x1a9] + cmp r0, #0 + beq _021EA524 +_021EA518: + add sp, sp, #4 + mov r0, #0 + ldmfd sp!, {pc} +_021EA524: + mov r0, #1 + add sp, sp, #4 + ldmfd sp!, {pc} + + arm_func_start FUN_021EA530 +FUN_021EA530: ; 0x021EA530 + stmdb sp!, {lr} + sub sp, sp, #4 + bl FUN_021EA4D4 + cmp r0, #0 + addeq sp, sp, #4 + moveq r0, #0 + ldmeqia sp!, {pc} + bl FUN_021E4F94 + mov r0, #1 + add sp, sp, #4 + ldmfd sp!, {pc} + + arm_func_start FUN_021EA55C +FUN_021EA55C: ; 0x021EA55C + stmdb sp!, {lr} + sub sp, sp, #4 + bl FUN_021DF760 + bl FUN_021FD444 + ldr r1, _021EA584 ; =0xFFFFFDF9 + add r0, r0, r1 + cmp r0, #0 + movle r0, #0 + add sp, sp, #4 + ldmfd sp!, {pc} + .align 2, 0 +_021EA584: .word 0xFFFFFDF9 + + arm_func_start FUN_021EA588 +FUN_021EA588: ; 0x021EA588 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #4 + mov r5, r0 + mov r4, r1 + bl FUN_021EA9AC + ldrb r1, [r0, #0x1e] + strb r1, [r0, #0x1d] + ldrh r1, [r0, #0x22] + cmp r1, #2 + beq _021EA5C4 + cmp r1, #3 + beq _021EA5C4 + cmp r1, #4 + addne sp, sp, #4 + ldmneia sp!, {r4, r5, pc} +_021EA5C4: + mov r0, r5 + mov r2, r4 + bl FUN_021E8C08 + add sp, sp, #4 + ldmia sp!, {r4, r5, pc} + + arm_func_start FUN_021EA5D8 +FUN_021EA5D8: ; 0x021EA5D8 + stmdb sp!, {r4, r5, r6, r7, lr} + sub sp, sp, #4 + ldr r3, _021EA6D0 ; =0x02210E3C + mov r7, r0 + ldr r4, [r3] + mov r3, #0x30 + mla r4, r7, r3, r4 + mov r6, r1 + mov r5, r2 + bl FUN_021EA974 + cmp r0, #2 + bne _021EA644 + ldr r3, [r4, #0x10] + ldr r0, [r4, #8] + add r1, r3, r5 + cmp r1, r0 + ble _021EA630 + ldr r1, _021EA6D4 ; =0xFFFE82AC + mov r0, #6 + bl FUN_021DD6B0 + add sp, sp, #4 + ldmia sp!, {r4, r5, r6, r7, pc} +_021EA630: + ldr r1, [r4, #4] + mov r0, r6 + mov r2, r5 + add r1, r1, r3 + bl MI_CpuCopy8 +_021EA644: + ldr r0, [r4, #0x10] + add r0, r0, r5 + str r0, [r4, #0x10] + ldr r2, [r4, #0x18] + ldr r0, [r4, #0x10] + cmp r0, r2 + bne _021EA694 + mov r0, #1 + strb r0, [r4, #0x1d] + mov r1, #0 + str r1, [r4, #0x10] + ldr r0, _021EA6D0 ; =0x02210E3C + str r1, [r4, #0x18] + ldr r0, [r0] + ldr r3, [r0, #0x604] + cmp r3, #0 + beq _021EA694 + ldr r1, [r4, #4] + mov r0, r7 + blx r3 +_021EA694: + ldr r0, _021EA6D0 ; =0x02210E3C + ldr r0, [r0] + ldr r0, [r0, #0x608] + cmp r0, #0 + addeq sp, sp, #4 + ldmeqia sp!, {r4, r5, r6, r7, pc} + ldr r0, [r4, #0x2c] + cmp r0, #0 + addeq sp, sp, #4 + ldmeqia sp!, {r4, r5, r6, r7, pc} + bl OS_GetTick + str r0, [r4, #0x24] + str r1, [r4, #0x28] + add sp, sp, #4 + ldmia sp!, {r4, r5, r6, r7, pc} + .align 2, 0 +_021EA6D0: .word 0x02210E3C +_021EA6D4: .word 0xFFFE82AC + + arm_func_start FUN_021EA6D8 +FUN_021EA6D8: ; 0x021EA6D8 + stmdb sp!, {r4, r5, r6, r7, lr} + sub sp, sp, #0xc + ldr r4, _021EA79C ; =0x02210E3C + mov r3, #0x30 + ldr r4, [r4] + mov r7, r1 + mla r5, r0, r3, r4 + mov r6, r2 + bl FUN_021EA974 + strb r0, [r5, #0x1e] + mov r0, r7 + bl FUN_021EAD6C + mov r4, r0 + cmp r4, #4 + addls pc, pc, r4, lsl #2 + b _021EA790 +_021EA718: ; jump table + b _021EA790 ; case 0 + b _021EA72C ; case 1 + b _021EA788 ; case 2 + b _021EA788 ; case 3 + b _021EA788 ; case 4 +_021EA72C: + cmp r6, #8 + addne sp, sp, #0xc + ldmneia sp!, {r4, r5, r6, r7, pc} + add r1, sp, #0 + mov r0, r7 + mov r2, #8 + bl MI_CpuCopy8 + ldr r1, [sp] + mov r0, #0 + str r1, [r5, #0x18] + str r0, [r5, #0x10] + ldr r0, [r5, #4] + cmp r0, #0 + beq _021EA77C + ldr r1, [r5, #8] + ldr r0, [r5, #0x18] + cmp r1, r0 + movge r0, #2 + strgeb r0, [r5, #0x1d] + bge _021EA790 +_021EA77C: + mov r0, #4 + strb r0, [r5, #0x1d] + b _021EA790 +_021EA788: + mov r0, #3 + strb r0, [r5, #0x1d] +_021EA790: + strh r4, [r5, #0x22] + add sp, sp, #0xc + ldmia sp!, {r4, r5, r6, r7, pc} + .align 2, 0 +_021EA79C: .word 0x02210E3C + + arm_func_start FUN_021EA7A0 +FUN_021EA7A0: ; 0x021EA7A0 + stmdb sp!, {r4, r5, r6, r7, lr} + sub sp, sp, #4 + mov r7, r1 + mov r6, r2 + bl FUN_021DF748 + ldr r1, _021EA854 ; =0x02210E3C + mov r4, r0 + ldr r1, [r1] + mov r0, #0x30 + mla r5, r4, r0, r1 + ldr r1, [r5, #4] + cmp r1, #0 + addeq sp, sp, #4 + ldmeqia sp!, {r4, r5, r6, r7, pc} + ldr r0, [r5, #8] + cmp r0, r6 + addlt sp, sp, #4 + ldmltia sp!, {r4, r5, r6, r7, pc} + mov r0, r7 + mov r2, r6 + bl MI_CpuCopy8 + ldr r0, _021EA854 ; =0x02210E3C + ldr r0, [r0] + ldr r3, [r0, #0x604] + cmp r3, #0 + beq _021EA818 + ldr r1, [r5, #4] + mov r0, r4 + mov r2, r6 + blx r3 +_021EA818: + ldr r0, _021EA854 ; =0x02210E3C + ldr r0, [r0] + ldr r0, [r0, #0x608] + cmp r0, #0 + addeq sp, sp, #4 + ldmeqia sp!, {r4, r5, r6, r7, pc} + ldr r0, [r5, #0x2c] + cmp r0, #0 + addeq sp, sp, #4 + ldmeqia sp!, {r4, r5, r6, r7, pc} + bl OS_GetTick + str r0, [r5, #0x24] + str r1, [r5, #0x28] + add sp, sp, #4 + ldmia sp!, {r4, r5, r6, r7, pc} + .align 2, 0 +_021EA854: .word 0x02210E3C + + arm_func_start FUN_021EA858 +FUN_021EA858: ; 0x021EA858 + stmdb sp!, {r4, r5, r6, lr} + mov r6, r1 + mov r5, r2 + bl FUN_021DF748 + mov r4, r0 + bl FUN_021EA974 + cmp r0, #4 + addls pc, pc, r0, lsl #2 + b _021EA934 +_021EA87C: ; jump table + b _021EA890 ; case 0 + b _021EA8BC ; case 1 + b _021EA8D0 ; case 2 + b _021EA8E4 ; case 3 + b _021EA8F8 ; case 4 +_021EA890: + mov r0, r6 + bl FUN_021EAD6C + cmp r0, #2 + ldmloia sp!, {r4, r5, r6, pc} + cmp r0, #4 + ldmhiia sp!, {r4, r5, r6, pc} + mov r0, r4 + mov r1, r6 + mov r2, r5 + bl FUN_021EA6D8 + ldmia sp!, {r4, r5, r6, pc} +_021EA8BC: + mov r0, r4 + mov r1, r6 + mov r2, r5 + bl FUN_021EA6D8 + ldmia sp!, {r4, r5, r6, pc} +_021EA8D0: + mov r0, r4 + mov r1, r6 + mov r2, r5 + bl FUN_021EA5D8 + ldmia sp!, {r4, r5, r6, pc} +_021EA8E4: + mov r0, r4 + mov r1, r6 + mov r2, r5 + bl FUN_021EA588 + ldmia sp!, {r4, r5, r6, pc} +_021EA8F8: + mov r0, #0x30 + mul ip, r4, r0 + ldr r0, _021EA944 ; =0x02210E3C + mov r3, #1 + ldr r1, [r0] + mov r2, #0 + add r1, r1, ip + strb r3, [r1, #0x1d] + ldr r1, [r0] + add r1, r1, ip + str r2, [r1, #0x10] + ldr r0, [r0] + add r0, r0, ip + str r2, [r0, #0x18] + ldmia sp!, {r4, r5, r6, pc} +_021EA934: + ldr r1, _021EA948 ; =0xFFFE82B6 + mov r0, #6 + bl FUN_021DD6B0 + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +_021EA944: .word 0x02210E3C +_021EA948: .word 0xFFFE82B6 + + arm_func_start FUN_021EA94C +FUN_021EA94C: ; 0x021EA94C + stmdb sp!, {r4, r5, r6, lr} + mov r6, r1 + mov r5, r2 + mov r4, r3 + bl FUN_021DF760 + mov r1, r6 + mov r2, r5 + mov r3, r4 + bl FUN_021FD498 + ldmia sp!, {r4, r5, r6, pc} + + arm_func_start FUN_021EA974 +FUN_021EA974: ; 0x021EA974 + ldr r2, _021EA98C ; =0x02210E3C + mov r1, #0x30 + ldr r2, [r2] + mla r1, r0, r1, r2 + ldrb r0, [r1, #0x1d] + bx lr + .align 2, 0 +_021EA98C: .word 0x02210E3C + + arm_func_start FUN_021EA990 +FUN_021EA990: ; 0x021EA990 + ldr r2, _021EA9A8 ; =0x02210E3C + mov r1, #0x30 + ldr r2, [r2] + mla r1, r0, r1, r2 + ldrb r0, [r1, #0x1c] + bx lr + .align 2, 0 +_021EA9A8: .word 0x02210E3C + + arm_func_start FUN_021EA9AC +FUN_021EA9AC: ; 0x021EA9AC + ldr r2, _021EA9C0 ; =0x02210E3C + mov r1, #0x30 + ldr r2, [r2] + mla r0, r1, r0, r2 + bx lr + .align 2, 0 +_021EA9C0: .word 0x02210E3C + + arm_func_start FUN_021EA9C4 +FUN_021EA9C4: ; 0x021EA9C4 + ldr r0, _021EA9D4 ; =0x02210E3C + mov r1, #0 + str r1, [r0] + bx lr + .align 2, 0 +_021EA9D4: .word 0x02210E3C + + arm_func_start FUN_021EA9D8 +FUN_021EA9D8: ; 0x021EA9D8 + ldr r2, _021EAA60 ; =0x02210E3C + ldr r3, [r2] + cmp r3, #0 + bxeq lr + mov r1, #0x30 + mul r1, r0, r1 + add r0, r3, r1 + mov r3, #0 + str r3, [r0, #0xc] + ldr r0, [r2] + add r0, r0, r1 + str r3, [r0, #0x10] + ldr r0, [r2] + add r0, r0, r1 + str r3, [r0, #0x14] + ldr r0, [r2] + add r0, r0, r1 + str r3, [r0, #0x18] + ldr r0, [r2] + add r0, r0, r1 + strb r3, [r0, #0x1c] + ldr r0, [r2] + add r2, r0, #0x1d + ldrb r0, [r2, r1] + add r2, r2, r1 + cmp r0, #0 + movne r0, #1 + strneb r0, [r2] + ldr r0, _021EAA60 ; =0x02210E3C + mov r2, #0 + ldr r0, [r0] + add r0, r0, r1 + strh r2, [r0, #0x22] + bx lr + .align 2, 0 +_021EAA60: .word 0x02210E3C + + arm_func_start FUN_021EAA64 +FUN_021EAA64: ; 0x021EAA64 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0xc + ldr r0, _021EAC14 ; =0x02210E3C + ldr r0, [r0] + cmp r0, #0 + addeq sp, sp, #0xc + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + add r0, sp, #8 + bl FUN_021DF8F4 + mov sb, r0 + cmp sb, #0 + mov r8, #0 + addle sp, sp, #0xc + ldmleia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + ldr r4, _021EAC14 ; =0x02210E3C + str r8, [sp] + str r8, [sp, #4] + mov fp, #1 +_021EAAAC: + ldr r0, [sp, #8] + ldrb r7, [r0, r8] + mov r0, r7 + bl FUN_021DF8A8 + cmp r0, #0 + beq _021EAB44 + mov r0, r7 + bl FUN_021EA9AC + ldr r1, [r4] + mov r6, r0 + ldr r0, [r1, #0x608] + cmp r0, #0 + beq _021EAB44 + ldr r0, [r6, #0x2c] + cmp r0, #0 + beq _021EAB44 + bl OS_GetTick + mov sl, r1 + ldr r2, [r6, #0x24] + mov r5, r0 + subs r2, r5, r2 + ldr r1, [r6, #0x28] + mov r0, r2, lsl #6 + sbc r1, sl, r1 + mov r1, r1, lsl #6 + orr r1, r1, r2, lsr #26 + ldr r2, _021EAC18 ; =0x000082EA + ldr r3, [sp] + bl _ll_udiv + ldr r1, [r6, #0x2c] + cmp r0, r1 + bls _021EAB44 + ldr r1, [r4] + mov r0, r7 + ldr r1, [r1, #0x608] + blx r1 + str r5, [r6, #0x24] + str sl, [r6, #0x28] +_021EAB44: + bl FUN_021DF95C + cmp r7, r0 + beq _021EAC00 + mov r0, r7 + bl FUN_021EA990 + cmp r0, #1 + bne _021EAC00 + mov r0, r7 + bl FUN_021EA9AC + mov r5, r0 + ldr r0, [r4] + ldr r2, [r5, #0x14] + add r0, r0, #0x600 + ldr r1, [r5, #0xc] + ldrh r6, [r0, #0x10] + sub r0, r2, r1 + cmp r0, r6 + movle r6, r0 + mov r0, r7 + bl FUN_021EA55C + cmp r0, r6 + blt _021EAC00 + ldr r3, [r5] + ldr r1, [r5, #0xc] + mov r0, r7 + mov r2, r6 + add r1, r3, r1 + mov r3, fp + bl FUN_021EA94C + ldr r0, [r5, #0xc] + add r0, r0, r6 + str r0, [r5, #0xc] + ldr r0, [r5, #0x14] + ldr r1, [r5, #0xc] + cmp r1, r0 + bne _021EAC00 + ldr r1, [sp, #4] + strb r1, [r5, #0x1c] + str r1, [r5] + str r1, [r5, #0xc] + str r1, [r5, #0x14] + ldr r1, [r4] + ldr r2, [r1, #0x600] + cmp r2, #0 + beq _021EAC00 + mov r1, r7 + blx r2 +_021EAC00: + add r8, r8, #1 + cmp r8, sb + blt _021EAAAC + add sp, sp, #0xc + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_021EAC14: .word 0x02210E3C +_021EAC18: .word 0x000082EA + + arm_func_start FUN_021EAC1C +FUN_021EAC1C: ; 0x021EAC1C + stmdb sp!, {r4, lr} + ldr r2, _021EAC58 ; =0x02210E3C + mov r4, r1 + ldr r1, [r2] + ldr r1, [r1, #0x60c] + cmp r1, #0 + ldmeqia sp!, {r4, pc} + bl FUN_021DF748 + ldr r2, _021EAC58 ; =0x02210E3C + mov r1, r0 + ldr r2, [r2] + mov r0, r4 + ldr r2, [r2, #0x60c] + blx r2 + ldmia sp!, {r4, pc} + .align 2, 0 +_021EAC58: .word 0x02210E3C + + arm_func_start FUN_021EAC5C +FUN_021EAC5C: ; 0x021EAC5C + stmdb sp!, {lr} + sub sp, sp, #4 + ldr ip, _021EACB0 ; =0x02210E3C + ldr ip, [ip] + cmp ip, #0 + addeq sp, sp, #4 + ldmeqia sp!, {pc} + cmp r1, #0 + addeq sp, sp, #4 + ldmeqia sp!, {pc} + cmp r2, #0 + addeq sp, sp, #4 + ldmeqia sp!, {pc} + cmp r3, #0 + beq _021EACA4 + bl FUN_021EA858 + add sp, sp, #4 + ldmfd sp!, {pc} +_021EACA4: + bl FUN_021EA7A0 + add sp, sp, #4 + ldmfd sp!, {pc} + .align 2, 0 +_021EACB0: .word 0x02210E3C + + arm_func_start FUN_021EACB4 +FUN_021EACB4: ; 0x021EACB4 + stmdb sp!, {lr} + sub sp, sp, #4 + ldr r3, _021EACEC ; =0x02210E3C + ldr r2, _021EACF0 ; =0x00000614 + mov r1, #0 + str r0, [r3] + bl MI_CpuFill8 + ldr r0, _021EACEC ; =0x02210E3C + ldr r1, _021EACF4 ; =0x000005B9 + ldr r0, [r0] + add r0, r0, #0x600 + strh r1, [r0, #0x10] + add sp, sp, #4 + ldmfd sp!, {pc} + .align 2, 0 +_021EACEC: .word 0x02210E3C +_021EACF0: .word 0x00000614 +_021EACF4: .word 0x000005B9 + + arm_func_start FUN_021EACF8 +FUN_021EACF8: ; 0x021EACF8 + stmdb sp!, {r4, lr} + ldr r2, _021EAD40 ; =0x02210E3C + ldr r3, [r2] + cmp r3, #0 + moveq r0, #0 + ldmeqia sp!, {r4, pc} + mov r2, #0x30 + mul r4, r0, r2 + add r0, r3, r4 + str r1, [r0, #0x2c] + bl OS_GetTick + ldr r2, _021EAD40 ; =0x02210E3C + ldr r2, [r2] + add r2, r2, r4 + str r0, [r2, #0x24] + str r1, [r2, #0x28] + mov r0, #1 + ldmia sp!, {r4, pc} + .align 2, 0 +_021EAD40: .word 0x02210E3C + + arm_func_start FUN_021EAD44 +FUN_021EAD44: ; 0x021EAD44 + cmp r0, #2 + beq _021EAD5C + cmp r0, #3 + beq _021EAD5C + cmp r0, #4 + bne _021EAD64 +_021EAD5C: + mov r0, #0xc + bx lr +_021EAD64: + mov r0, #8 + bx lr + + arm_func_start FUN_021EAD6C +FUN_021EAD6C: ; 0x021EAD6C + stmdb sp!, {lr} + sub sp, sp, #0xc + add r1, sp, #0 + mov r2, #8 + bl MI_CpuCopy8 + ldr r1, _021EADA4 ; =0x0220D4BC + add r0, sp, #6 + mov r2, #2 + bl memcmp + cmp r0, #0 + ldreqh r0, [sp, #4] + movne r0, #0 + add sp, sp, #0xc + ldmfd sp!, {pc} + .align 2, 0 +_021EADA4: .word 0x0220D4BC + + arm_func_start FUN_021EADA8 +FUN_021EADA8: ; 0x021EADA8 + stmdb sp!, {r4, r5, r6, lr} + mov r6, r0 + mov r5, r1 + mov r4, r2 + ldr r1, _021EADD4 ; =0x0220D4BC + add r0, r6, #6 + mov r2, #2 + bl strncpy + strh r5, [r6, #4] + str r4, [r6] + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +_021EADD4: .word 0x0220D4BC + + arm_func_start FUN_021EADD8 +FUN_021EADD8: ; 0x021EADD8 + ldr r1, _021EADF4 ; =0x02210E3C + ldr r1, [r1] + cmp r1, #0 + moveq r0, #0 + strne r0, [r1, #0x608] + movne r0, #1 + bx lr + .align 2, 0 +_021EADF4: .word 0x02210E3C + + arm_func_start FUN_021EADF8 +FUN_021EADF8: ; 0x021EADF8 + ldr r1, _021EAE14 ; =0x02210E3C + ldr r1, [r1] + cmp r1, #0 + moveq r0, #0 + strne r0, [r1, #0x604] + movne r0, #1 + bx lr + .align 2, 0 +_021EAE14: .word 0x02210E3C + + arm_func_start FUN_021EAE18 +FUN_021EAE18: ; 0x021EAE18 + ldr r1, _021EAE34 ; =0x02210E3C + ldr r1, [r1] + cmp r1, #0 + moveq r0, #0 + strne r0, [r1, #0x600] + movne r0, #1 + bx lr + .align 2, 0 +_021EAE34: .word 0x02210E3C + + arm_func_start FUN_021EAE38 +FUN_021EAE38: ; 0x021EAE38 + stmdb sp!, {r4, r5, r6, r7, lr} + sub sp, sp, #4 + mov r7, r0 + mov r6, r1 + mov r5, r2 + bl FUN_021EA9AC + mov r4, r0 + mov r0, r7 + bl FUN_021EA974 + cmp r0, #2 + addeq sp, sp, #4 + moveq r0, #0 + ldmeqia sp!, {r4, r5, r6, r7, pc} + str r6, [r4, #4] + str r5, [r4, #8] + mov r0, #1 + strb r0, [r4, #0x1d] + mov r1, #0 + str r1, [r4, #0x10] + str r1, [r4, #0x18] + add sp, sp, #4 + ldmia sp!, {r4, r5, r6, r7, pc} + + arm_func_start FUN_021EAE90 +FUN_021EAE90: ; 0x021EAE90 + stmdb sp!, {r4, r5, r6, lr} + mov r5, r0 + mov r6, r1 + mov r4, r2 + bl FUN_021DD6D4 + cmp r0, #0 + movne r0, #0 + ldmneia sp!, {r4, r5, r6, pc} + mov r0, r5 + bl FUN_021DF8A8 + cmp r0, #0 + moveq r0, #0 + ldmeqia sp!, {r4, r5, r6, pc} + ldr r0, _021EAF1C ; =0x02210E3C + ldr r0, [r0] + add r0, r0, #0x600 + ldrh r0, [r0, #0x10] + cmp r4, r0 + movgt r0, #0 + ldmgtia sp!, {r4, r5, r6, pc} + mov r0, r5 + mov r1, r6 + mov r2, r4 + mov r3, #0 + bl FUN_021EA94C + ldr r0, _021EAF1C ; =0x02210E3C + ldr r0, [r0] + ldr r2, [r0, #0x600] + cmp r2, #0 + beq _021EAF14 + mov r0, r4 + mov r1, r5 + blx r2 +_021EAF14: + mov r0, #1 + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +_021EAF1C: .word 0x02210E3C + + arm_func_start FUN_021EAF20 +FUN_021EAF20: ; 0x021EAF20 + stmdb sp!, {r4, r5, r6, r7, r8, sb, lr} + sub sp, sp, #0xc + mov r7, r1 + mov r8, r0 + mov r0, r7 + mov r6, r2 + mov r5, r3 + bl FUN_021EA9AC + mov r4, r0 + mov r0, r7 + mov r1, r8 + bl FUN_021EB06C + cmp r0, #0 + addeq sp, sp, #0xc + moveq r0, #0 + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, pc} + mov r0, #1 + strb r0, [r4, #0x1c] + str r6, [r4] + mov r0, #0 + str r0, [r4, #0xc] + add r0, sp, #0 + mov r1, r8 + mov r2, r5 + str r5, [r4, #0x14] + bl FUN_021EADA8 + add r1, sp, #0 + mov r0, r7 + mov r2, #8 + mov r3, #1 + bl FUN_021EA94C + ldr r0, _021EB040 ; =0x02210E3C + ldr r0, [r0] + add r0, r0, #0x600 + ldrh sb, [r0, #0x10] + mov r0, r7 + cmp r5, sb + movle sb, r5 + bl FUN_021EA55C + cmp sb, r0 + addgt sp, sp, #0xc + movgt r0, #1 + ldmgtia sp!, {r4, r5, r6, r7, r8, sb, pc} + mov r0, r7 + mov r1, r6 + mov r2, sb + mov r3, #1 + bl FUN_021EA94C + ldr r0, [r4, #0xc] + add r0, r0, sb + str r0, [r4, #0xc] + ldr r0, [r4, #0x14] + ldr r1, [r4, #0xc] + cmp r1, r0 + bne _021EB034 + mov r2, #0 + strb r2, [r4, #0x1c] + str r2, [r4] + str r2, [r4, #0xc] + ldr r1, _021EB040 ; =0x02210E3C + str r2, [r4, #0x14] + ldr r1, [r1] + ldr r2, [r1, #0x600] + cmp r2, #0 + beq _021EB034 + cmp r8, #1 + bne _021EB034 + mov r1, r7 + blx r2 +_021EB034: + mov r0, #1 + add sp, sp, #0xc + ldmia sp!, {r4, r5, r6, r7, r8, sb, pc} + .align 2, 0 +_021EB040: .word 0x02210E3C + + arm_func_start FUN_021EB044 +FUN_021EB044: ; 0x021EB044 + stmdb sp!, {lr} + sub sp, sp, #4 + mov ip, r1 + mov r3, r2 + mov r1, r0 + mov r2, ip + mov r0, #1 + bl FUN_021EAF20 + add sp, sp, #4 + ldmfd sp!, {pc} + + arm_func_start FUN_021EB06C +FUN_021EB06C: ; 0x021EB06C + stmdb sp!, {r4, r5, lr} + sub sp, sp, #4 + mov r4, r0 + mov r5, r1 + bl FUN_021DD6D4 + cmp r0, #0 + bne _021EB0B0 + cmp r5, #1 + bne _021EB0A0 + mov r0, r4 + bl FUN_021DF8A8 + cmp r0, #0 + beq _021EB0B0 +_021EB0A0: + mov r0, r4 + bl FUN_021DF5F0 + cmp r0, #0 + bne _021EB0BC +_021EB0B0: + add sp, sp, #4 + mov r0, #0 + ldmia sp!, {r4, r5, pc} +_021EB0BC: + mov r0, r4 + bl FUN_021EA990 + cmp r0, #1 + addeq sp, sp, #4 + moveq r0, #0 + ldmeqia sp!, {r4, r5, pc} + mov r0, r4 + bl FUN_021EA55C + mov r4, r0 + mov r0, r5 + bl FUN_021EAD44 + cmp r4, r0 + movge r0, #1 + movlt r0, #0 + add sp, sp, #4 + ldmia sp!, {r4, r5, pc} + + arm_func_start FUN_021EB0FC +FUN_021EB0FC: ; 0x021EB0FC + ldr ip, _021EB108 ; =FUN_021EB06C + mov r1, #1 + bx ip + .align 2, 0 +_021EB108: .word FUN_021EB06C + + arm_func_start FUN_021EB10C +FUN_021EB10C: ; 0x021EB10C + stmdb sp!, {r4, r5, r6, r7, lr} + sub sp, sp, #4 + ldr r0, _021EB178 ; =0x02210E40 + ldr r7, [r0] + cmp r7, #0 + beq _021EB164 + mov r5, #4 + mov r4, #0 +_021EB12C: + mov r6, r7 + ldr r1, [r6, #0x10] + ldr r7, [r7, #0x18] + cmp r1, #0 + beq _021EB14C + mov r0, r5 + mov r2, r4 + bl FUN_021DD904 +_021EB14C: + mov r0, r5 + mov r1, r6 + mov r2, r4 + bl FUN_021DD904 + cmp r7, #0 + bne _021EB12C +_021EB164: + ldr r0, _021EB178 ; =0x02210E40 + mov r1, #0 + str r1, [r0] + add sp, sp, #4 + ldmia sp!, {r4, r5, r6, r7, pc} + .align 2, 0 +_021EB178: .word 0x02210E40 + + arm_func_start FUN_021EB17C +FUN_021EB17C: ; 0x021EB17C + stmdb sp!, {r4, lr} + ldr r1, _021EB1FC ; =0x02210E40 + ldr r1, [r1] + cmp r1, #0 + ldmeqia sp!, {r4, pc} + cmp r1, r0 + bne _021EB1B4 + mov r0, #4 + mov r2, #0 + ldr r4, [r1, #0x18] + bl FUN_021DD904 + ldr r0, _021EB1FC ; =0x02210E40 + str r4, [r0] + ldmia sp!, {r4, pc} +_021EB1B4: + ldr r2, [r1, #0x18] + cmp r2, #0 + ldmeqia sp!, {r4, pc} +_021EB1C0: + cmp r2, r0 + movne r1, r2 + bne _021EB1EC + ldr ip, [r1, #0x18] + mov r0, #4 + ldr r3, [ip, #0x18] + mov r2, #0 + str r3, [r1, #0x18] + mov r1, ip + bl FUN_021DD904 + ldmia sp!, {r4, pc} +_021EB1EC: + ldr r2, [r2, #0x18] + cmp r2, #0 + bne _021EB1C0 + ldmia sp!, {r4, pc} + .align 2, 0 +_021EB1FC: .word 0x02210E40 + + arm_func_start FUN_021EB200 +FUN_021EB200: ; 0x021EB200 + stmdb sp!, {r4, lr} + mov r4, r0 + mov r0, #4 + mov r1, #0x1c + bl FUN_021DD944 + movs ip, r0 + moveq r0, #0 + ldmeqia sp!, {r4, pc} + ldmia r4, {r0, r1, r2, r3} + stmia ip, {r0, r1, r2, r3} + mov r0, #0 + str r0, [ip, #0x18] + ldr r1, _021EB258 ; =0x02210E40 + str r0, [ip, #0x10] + ldr r0, [r1] + cmp r0, #0 + moveq r0, ip + streq ip, [r1] + strne r0, [ip, #0x18] + movne r0, ip + strne ip, [r1] + ldmia sp!, {r4, pc} + .align 2, 0 +_021EB258: .word 0x02210E40 + + arm_func_start FUN_021EB25C +FUN_021EB25C: ; 0x021EB25C + stmdb sp!, {r4, lr} + movs r4, r0 + mov r0, #7 + ldr r1, _021EB39C ; =0xFFFE8130 + moveq r0, #0 + ldmeqia sp!, {r4, pc} + add r2, r4, #7 + cmp r2, #0x1a + addls pc, pc, r2, lsl #2 + b _021EB390 +_021EB284: ; jump table + b _021EB2F0 ; case 0 + b _021EB2F8 ; case 1 + b _021EB304 ; case 2 + b _021EB30C ; case 3 + b _021EB30C ; case 4 + b _021EB30C ; case 5 + b _021EB314 ; case 6 + b _021EB390 ; case 7 + b _021EB320 ; case 8 + b _021EB32C ; case 9 + b _021EB334 ; case 10 + b _021EB340 ; case 11 + b _021EB348 ; case 12 + b _021EB350 ; case 13 + b _021EB358 ; case 14 + b _021EB360 ; case 15 + b _021EB360 ; case 16 + b _021EB360 ; case 17 + b _021EB350 ; case 18 + b _021EB350 ; case 19 + b _021EB36C ; case 20 + b _021EB36C ; case 21 + b _021EB374 ; case 22 + b _021EB380 ; case 23 + b _021EB388 ; case 24 + b _021EB390 ; case 25 + b _021EB320 ; case 26 +_021EB2F0: + sub r1, r1, #0x320 + b _021EB390 +_021EB2F8: + ldr r2, _021EB3A0 ; =0xFFFFFCD6 + add r1, r1, r2 + b _021EB390 +_021EB304: + sub r1, r1, #0x348 + b _021EB390 +_021EB30C: + sub r1, r1, #0x334 + b _021EB390 +_021EB314: + ldr r2, _021EB3A4 ; =0xFFFFFCC2 + add r1, r1, r2 + b _021EB390 +_021EB320: + sub r1, r1, #1 + mov r0, #9 + b _021EB390 +_021EB32C: + sub r1, r1, #0x348 + b _021EB390 +_021EB334: + ldr r2, _021EB3A8 ; =0xFFFFFCAE + add r1, r1, r2 + b _021EB390 +_021EB340: + sub r1, r1, #0x1e + b _021EB390 +_021EB348: + sub r1, r1, #0x32 + b _021EB390 +_021EB350: + sub r1, r1, #0x14 + b _021EB390 +_021EB358: + sub r1, r1, #0x35c + b _021EB390 +_021EB360: + ldr r2, _021EB3AC ; =0xFFFFFC9A + add r1, r1, r2 + b _021EB390 +_021EB36C: + sub r1, r1, #0x370 + b _021EB390 +_021EB374: + ldr r2, _021EB3B0 ; =0xFFFFFC86 + add r1, r1, r2 + b _021EB390 +_021EB380: + sub r1, r1, #0x384 + b _021EB390 +_021EB388: + ldr r2, _021EB3B4 ; =0xFFFFFC72 + add r1, r1, r2 +_021EB390: + bl FUN_021DD6B0 + mov r0, r4 + ldmia sp!, {r4, pc} + .align 2, 0 +_021EB39C: .word 0xFFFE8130 +_021EB3A0: .word 0xFFFFFCD6 +_021EB3A4: .word 0xFFFFFCC2 +_021EB3A8: .word 0xFFFFFCAE +_021EB3AC: .word 0xFFFFFC9A +_021EB3B0: .word 0xFFFFFC86 +_021EB3B4: .word 0xFFFFFC72 + + arm_func_start FUN_021EB3B8 +FUN_021EB3B8: ; 0x021EB3B8 + stmdb sp!, {r4, r5, r6, r7, lr} + sub sp, sp, #0x14 + mov r5, r0 + mov r7, r1 + mov r6, r2 + bl FUN_021DD6D4 + cmp r0, #0 + addne sp, sp, #0x14 + mvnne r0, #7 + ldmneia sp!, {r4, r5, r6, r7, pc} + mov r2, #0 + mov r1, #1 + add r0, sp, #0 + str r6, [sp] + str r7, [sp, #4] + str r2, [sp, #8] + str r1, [sp, #0xc] + bl FUN_021EB200 + movs r4, r0 + bne _021EB430 + mvn r0, #4 + bl FUN_021EB25C + mov r0, #0 + mov r1, r0 + mov r3, r6 + mvn r2, #4 + blx r7 + add sp, sp, #0x14 + mvn r0, #4 + ldmia sp!, {r4, r5, r6, r7, pc} +_021EB430: + ldr r2, _021EB47C ; =FUN_021EB480 + mov r0, r5 + mov r3, r4 + mov r1, #0 + bl FUN_02213D80 + movs r5, r0 + bpl _021EB46C + bl FUN_021EB25C + mov r0, #0 + mov r1, r0 + mov r2, r5 + mov r3, r6 + blx r7 + mov r0, r4 + bl FUN_021EB17C +_021EB46C: + mov r0, r5 + str r5, [r4, #0x14] + add sp, sp, #0x14 + ldmia sp!, {r4, r5, r6, r7, pc} + .align 2, 0 +_021EB47C: .word FUN_021EB480 + + arm_func_start FUN_021EB480 +FUN_021EB480: ; 0x021EB480 + stmdb sp!, {r4, r5, r6, r7, lr} + sub sp, sp, #4 + ldr r6, [sp, #0x18] + mov r7, r1 + ldr r5, [r6, #4] + ldr r4, [r6, #0xc] + cmp r5, #0 + beq _021EB4DC + cmp r7, #0 + bne _021EB4C0 + mov r1, r3 + mov r0, r2 + ldr r3, [r6] + mov r2, r7 + blx r5 + b _021EB4DC +_021EB4C0: + mov r0, r7 + bl FUN_021EB25C + mov r0, #0 + ldr r3, [r6] + mov r1, r0 + mov r2, r7 + blx r5 +_021EB4DC: + cmp r7, #0 + bne _021EB4EC + cmp r4, #1 + bne _021EB508 +_021EB4EC: + ldr r1, [r6, #0x10] + cmp r1, #0 + moveq r4, #1 + beq _021EB508 + mov r0, #4 + mov r2, #0 + bl FUN_021DD904 +_021EB508: + mov r0, r6 + bl FUN_021EB17C + cmp r4, #0 + movne r0, #1 + moveq r0, #0 + add sp, sp, #4 + ldmia sp!, {r4, r5, r6, r7, pc} + + arm_func_start FUN_021EB524 +FUN_021EB524: ; 0x021EB524 + stmdb sp!, {lr} + sub sp, sp, #4 + bl FUN_021DD6D4 + cmp r0, #0 + addne sp, sp, #4 + movne r0, #0 + ldmneia sp!, {pc} + bl FUN_02213B08 + mov r0, #1 + add sp, sp, #4 + ldmfd sp!, {pc} + stmdb sp!, {lr} + sub sp, sp, #4 + ldr r0, _021EB598 ; =0x02210E44 + ldr r0, [r0] + cmp r0, #0 + addle sp, sp, #4 + movle r0, #1 + ldmleia sp!, {pc} + bl FUN_02213DBC + ldr r0, _021EB598 ; =0x02210E44 + ldr r1, [r0] + subs r1, r1, #1 + str r1, [r0] + bne _021EB58C + bl FUN_021EB10C +_021EB58C: + mov r0, #1 + add sp, sp, #4 + ldmfd sp!, {pc} + .align 2, 0 +_021EB598: .word 0x02210E44 + + arm_func_start FUN_021EB59C +FUN_021EB59C: ; 0x021EB59C + stmdb sp!, {lr} + sub sp, sp, #4 + bl FUN_02213E24 + ldr r1, _021EB5C4 ; =0x02210E44 + mov r0, #1 + ldr r2, [r1] + add r2, r2, #1 + str r2, [r1] + add sp, sp, #4 + ldmfd sp!, {pc} + .align 2, 0 +_021EB5C4: .word 0x02210E44 + + arm_func_start FUN_021EB5C8 +FUN_021EB5C8: ; 0x021EB5C8 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} + ldr r1, _021EB660 ; =0x02210E48 + ldr r0, _021EB664 ; =0x00000474 + ldr sl, [r1] + mov r4, #0xc0 + ldrb r7, [sl, #0xd13] + add r5, sl, r0 + ldrb r0, [sl, #0xd0d] + mla sb, r7, r4, r5 + cmp r0, #6 + movhs r0, #1 + ldmhsia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + ldrb r6, [sl, #0xd12] + mov r8, #0 + cmp r6, #0 + bls _021EB658 +_021EB608: + cmp r8, r7 + beq _021EB648 + add r0, sl, r8, lsl #2 + ldrb r0, [r0, #0x445] + cmp r0, #6 + bhs _021EB648 + mul r1, r8, r4 + add r0, sl, r1 + add r0, r0, #0x400 + ldrh r2, [r0, #0x7a] + mov r0, sb + add r1, r5, r1 + bl strncmp + cmp r0, #0 + moveq r0, #2 + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} +_021EB648: + add r0, r8, #1 + and r8, r0, #0xff + cmp r8, r6 + blo _021EB608 +_021EB658: + mov r0, #1 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + .align 2, 0 +_021EB660: .word 0x02210E48 +_021EB664: .word 0x00000474 + + arm_func_start FUN_021EB668 +FUN_021EB668: ; 0x021EB668 + stmdb sp!, {lr} + sub sp, sp, #4 + ldr r1, _021EB6A0 ; =0x02210E54 + mov r0, #8 + ldr r1, [r1] + mov r2, #0xc + bl FUN_021EB910 + ldr r0, _021EB6A4 ; =0x02210E48 + ldr r2, _021EB6A8 ; =0x00000D18 + ldr r1, [r0] + mov r0, #0x10 + bl FUN_021EB910 + add sp, sp, #4 + ldmfd sp!, {pc} + .align 2, 0 +_021EB6A0: .word 0x02210E54 +_021EB6A4: .word 0x02210E48 +_021EB6A8: .word 0x00000D18 + + arm_func_start FUN_021EB6AC +FUN_021EB6AC: ; 0x021EB6AC + cmp r0, #2 + subhi r0, r0, #3 + andhi r0, r0, #0xff + bx lr + + arm_func_start FUN_021EB6BC +FUN_021EB6BC: ; 0x021EB6BC + stmdb sp!, {lr} + sub sp, sp, #4 + bl FUN_021EB6AC + ldr r1, _021EB6DC ; =0x02210E58 + ldr r1, [r1] + strb r0, [r1, #0x17] + add sp, sp, #4 + ldmfd sp!, {pc} + .align 2, 0 +_021EB6DC: .word 0x02210E58 + + arm_func_start FUN_021EB6E0 +FUN_021EB6E0: ; 0x021EB6E0 + ldr r0, _021EB6F0 ; =0x02210E58 + ldr r0, [r0] + ldr r0, [r0, #0xc] + bx lr + .align 2, 0 +_021EB6F0: .word 0x02210E58 + + arm_func_start FUN_021EB6F4 +FUN_021EB6F4: ; 0x021EB6F4 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #4 + mov r5, r0 + mov r0, #1 + bl FUN_021EB798 + mov r4, r0 + str r5, [r4, #0xc] + bl FUN_021EB720 + strb r0, [r4, #0xa] + add sp, sp, #4 + ldmia sp!, {r4, r5, pc} + + arm_func_start FUN_021EB720 +FUN_021EB720: ; 0x021EB720 + ldr r0, _021EB730 ; =0x02210E58 + ldr r0, [r0] + ldrb r0, [r0, #9] + bx lr + .align 2, 0 +_021EB730: .word 0x02210E58 + + arm_func_start FUN_021EB734 +FUN_021EB734: ; 0x021EB734 + stmdb sp!, {r4, r5, r6, lr} + mov r6, r0 + mov r0, #1 + bl FUN_021EB798 + mov r5, r0 + mov r0, #0x10 + bl FUN_021EB798 + mov r4, r0 + strb r6, [r5, #9] + cmp r6, #0x10 + ldmhsia sp!, {r4, r5, r6, pc} + ldrb r0, [r5, #0x16] + cmp r6, r0 + ldmlsia sp!, {r4, r5, r6, pc} + strb r6, [r5, #0x16] + cmp r6, #7 + ldmlsia sp!, {r4, r5, r6, pc} + ldrb r0, [r4, #0xd0d] + bl FUN_021EB6AC + strb r0, [r5, #0x15] + ldrb r0, [r4, #0xd13] + add r0, r4, r0, lsl #2 + ldrb r0, [r0, #0x444] + strb r0, [r5, #0x14] + ldmia sp!, {r4, r5, r6, pc} + + arm_func_start FUN_021EB798 +FUN_021EB798: ; 0x021EB798 + ands r1, r0, #1 + ldrne r0, _021EB7EC ; =0x02210E58 + ldrne r0, [r0] + bxne lr + ands r1, r0, #2 + ldrne r0, _021EB7F0 ; =0x02210E4C + ldrne r0, [r0] + bxne lr + ands r1, r0, #4 + ldrne r0, _021EB7F4 ; =0x02210E50 + ldrne r0, [r0] + bxne lr + ands r1, r0, #8 + ldrne r0, _021EB7F8 ; =0x02210E54 + ldrne r0, [r0] + bxne lr + ands r0, r0, #0x10 + ldrne r0, _021EB7FC ; =0x02210E48 + ldrne r0, [r0] + moveq r0, #0 + bx lr + .align 2, 0 +_021EB7EC: .word 0x02210E58 +_021EB7F0: .word 0x02210E4C +_021EB7F4: .word 0x02210E50 +_021EB7F8: .word 0x02210E54 +_021EB7FC: .word 0x02210E48 + + arm_func_start FUN_021EB800 +FUN_021EB800: ; 0x021EB800 + stmdb sp!, {r4, lr} + mov r0, #1 + bl FUN_021EB798 + mov r4, r0 + ldrb r0, [r4, #8] + ands r0, r0, #0x10 + beq _021EB844 + mov r0, #0x10 + bl FUN_021EB798 + ldrb r3, [r4, #8] + mov r1, r0 + ldr r2, _021EB90C ; =0x00000D18 + bic r0, r3, #0x10 + strb r0, [r4, #8] + ldr r3, [r4, #4] + mov r0, #0x10 + blx r3 +_021EB844: + ldrb r0, [r4, #8] + ands r0, r0, #8 + beq _021EB878 + mov r0, #8 + bl FUN_021EB798 + ldrb r2, [r4, #8] + mov r1, r0 + mov r0, #8 + bic r2, r2, #8 + strb r2, [r4, #8] + ldr r3, [r4, #4] + mov r2, #0xc + blx r3 +_021EB878: + ldrb r0, [r4, #8] + ands r0, r0, #4 + beq _021EB8AC + mov r0, #4 + bl FUN_021EB798 + ldrb r2, [r4, #8] + mov r1, r0 + mov r0, #4 + bic r2, r2, #4 + strb r2, [r4, #8] + ldr r3, [r4, #4] + mov r2, #0x58 + blx r3 +_021EB8AC: + ldrb r0, [r4, #8] + ands r0, r0, #2 + beq _021EB8E0 + mov r0, #2 + bl FUN_021EB798 + ldrb r2, [r4, #8] + mov r1, r0 + mov r0, #2 + bic r2, r2, #2 + strb r2, [r4, #8] + ldr r3, [r4, #4] + mov r2, #0x2300 + blx r3 +_021EB8E0: + ldrb r0, [r4, #8] + ands r1, r0, #1 + ldmeqia sp!, {r4, pc} + bic r0, r0, #1 + strb r0, [r4, #8] + ldr r3, [r4, #4] + mov r1, r4 + mov r0, #1 + mov r2, #0x18 + blx r3 + ldmia sp!, {r4, pc} + .align 2, 0 +_021EB90C: .word 0x00000D18 + + arm_func_start FUN_021EB910 +FUN_021EB910: ; 0x021EB910 + stmdb sp!, {r4, r5, r6, lr} + mov r6, r0 + mov r0, #1 + mov r5, r1 + mov r4, r2 + bl FUN_021EB798 + ldrb r2, [r0, #8] + ands r1, r2, r6 + ldmeqia sp!, {r4, r5, r6, pc} + mvn r1, r6 + and r1, r2, r1 + strb r1, [r0, #8] + ldr r3, [r0, #4] + mov r0, r6 + mov r1, r5 + mov r2, r4 + blx r3 + ldmia sp!, {r4, r5, r6, pc} + + arm_func_start FUN_021EB958 +FUN_021EB958: ; 0x021EB958 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #4 + mov r5, r0 + mov r0, #1 + mov r4, r1 + bl FUN_021EB798 + ldrb r1, [r0, #8] + ands r2, r1, r5 + addne sp, sp, #4 + movne r0, #0 + ldmneia sp!, {r4, r5, pc} + orr r1, r1, r5 + strb r1, [r0, #8] + ldr r2, [r0] + mov r0, r5 + mov r1, r4 + blx r2 + add sp, sp, #4 + ldmia sp!, {r4, r5, pc} + + arm_func_start FUN_021EB9A4 +FUN_021EB9A4: ; 0x021EB9A4 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #4 + mov r5, r0 + mov r0, #0x10 + mov r4, r1 + bl FUN_021EB798 + mov r1, r0 + mov r0, r4 + add r1, r1, r5, lsl #8 + mov r2, #0xf0 + bl MIi_CpuCopy32 + add sp, sp, #4 + ldmia sp!, {r4, r5, pc} + + arm_func_start FUN_021EB9D8 +FUN_021EB9D8: ; 0x021EB9D8 + stmdb sp!, {lr} + sub sp, sp, #4 + bl FUN_021EB720 + strb r0, [sp] + ldrb r0, [sp] + cmp r0, #0 + beq _021EB9FC + cmp r0, #0x12 + bne _021EBA0C +_021EB9FC: + bl FUN_021EB800 + add sp, sp, #4 + mov r0, #1 + ldmfd sp!, {pc} +_021EBA0C: + add r0, sp, #0 + bl FUN_021ECB38 + ldrb r0, [sp] + bl FUN_021EB734 + mov r0, #0 + add sp, sp, #4 + ldmfd sp!, {pc} + + arm_func_start FUN_021EBA28 +FUN_021EBA28: ; 0x021EBA28 + stmdb sp!, {r4, r5, r6, lr} + mov r6, r0 + mov r0, #1 + bl FUN_021EB798 + mov r5, r0 + bl FUN_021EB720 + cmp r0, #0xa + blo _021EBAB0 + cmp r0, #0x10 + bhi _021EBAB0 + bl FUN_020A8850 + mov r4, r0 + mov r1, #6 + bl DC_InvalidateRange + cmp r4, #0 + moveq r0, #0 + ldmeqia sp!, {r4, r5, r6, pc} + mov r0, r4 + mov r1, r6 + mov r2, #6 + bl MI_CpuCopy8 + ldrb r0, [r5, #0x17] + cmp r0, #4 + bne _021EBAA8 + mov r0, #0 + bl FUN_020A87E0 + mov r4, r0 + mov r1, #0x20 + bl DC_InvalidateRange + mov r0, r4 + add r1, r6, #6 + bl FUN_021EE5F4 +_021EBAA8: + mov r0, #1 + ldmia sp!, {r4, r5, r6, pc} +_021EBAB0: + mov r0, #0 + ldmia sp!, {r4, r5, r6, pc} + + arm_func_start FUN_021EBAB8 +FUN_021EBAB8: ; 0x021EBAB8 + stmdb sp!, {r4, lr} + mov r4, #0xff + bl FUN_021EB720 + cmp r0, #0xa + blo _021EBADC + cmp r0, #0x10 + ldrls r0, _021EBAE4 ; =0x02210E58 + ldrls r0, [r0] + ldrlsb r4, [r0, #0x17] +_021EBADC: + mov r0, r4 + ldmia sp!, {r4, pc} + .align 2, 0 +_021EBAE4: .word 0x02210E58 + + arm_func_start FUN_021EBAE8 +FUN_021EBAE8: ; 0x021EBAE8 + stmdb sp!, {lr} + sub sp, sp, #4 + bl FUN_021EB720 + cmp r0, #1 + addls sp, sp, #4 + movls r0, #0 + ldmlsia sp!, {pc} + cmp r0, #7 + addlo sp, sp, #4 + movlo r0, #1 + ldmloia sp!, {pc} + cmp r0, #9 + addeq sp, sp, #4 + moveq r0, #4 + ldmeqia sp!, {pc} + cmp r0, #0xa + addlo sp, sp, #4 + movlo r0, #2 + ldmloia sp!, {pc} + cmp r0, #0xb + addeq sp, sp, #4 + moveq r0, #4 + ldmeqia sp!, {pc} + cmp r0, #0x10 + addlo sp, sp, #4 + movlo r0, #3 + ldmloia sp!, {pc} + cmp r0, #0x10 + addeq sp, sp, #4 + moveq r0, #5 + ldmeqia sp!, {pc} + cmp r0, #0x11 + addeq sp, sp, #4 + moveq r0, #4 + ldmeqia sp!, {pc} + bl FUN_021ECD54 + add sp, sp, #4 + ldmfd sp!, {pc} + + arm_func_start FUN_021EBB80 +FUN_021EBB80: ; 0x021EBB80 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #4 + bl FUN_021EB720 + mov r5, r0 + cmp r5, #1 + bne _021EBBA4 + bl FUN_021EDB44 + mov r5, r0 + b _021EBC18 +_021EBBA4: + cmp r5, #7 + bhs _021EBBCC + bl OS_DisableInterrupts + mov r4, r0 + bl FUN_021EDA70 + mov r5, r0 + bl FUN_021EB734 + mov r0, r4 + bl OS_RestoreInterrupts + b _021EBC18 +_021EBBCC: + cmp r5, #9 + bhs _021EBBE0 + bl FUN_021ECA08 + mov r5, r0 + b _021EBC18 +_021EBBE0: + cmp r5, #0xa + bhs _021EBBF4 + bl FUN_021ED218 + mov r5, r0 + b _021EBC18 +_021EBBF4: + cmp r5, #0x10 + bhs _021EBC08 + bl FUN_021EDFBC + mov r5, r0 + b _021EBC18 +_021EBC08: + cmp r5, #0x11 + bne _021EBC18 + bl FUN_021ECDA8 + mov r5, r0 +_021EBC18: + mov r0, r5 + bl FUN_021EB734 + cmp r5, #0x10 + bne _021EBC40 + bl FUN_021EB5C8 + mov r4, r0 + bl FUN_021EB668 + add sp, sp, #4 + mov r0, r4 + ldmia sp!, {r4, r5, pc} +_021EBC40: + cmp r5, #0x12 + addne sp, sp, #4 + movne r0, #0 + ldmneia sp!, {r4, r5, pc} + bl FUN_021EB668 + mvn r0, #0 + add sp, sp, #4 + ldmia sp!, {r4, r5, pc} + + arm_func_start FUN_021EBC60 +FUN_021EBC60: ; 0x021EBC60 + stmdb sp!, {r4, lr} + mov r4, r0 + ldr r2, [r4] + mov r0, #1 + mov r1, #0x18 + blx r2 + mov r1, r0 + ldr r3, _021EBE08 ; =0x02210E58 + mov r0, #0 + mov r2, #0x18 + str r1, [r3] + bl MIi_CpuClear32 + ldr r0, _021EBE08 ; =0x02210E58 + ldr r1, [r4] + ldr r3, [r0] + mov r2, #1 + str r1, [r3] + ldr r0, [r4, #4] + ldr r1, _021EBE0C ; =0x00000D18 + str r0, [r3, #4] + strb r2, [r3, #9] + strb r2, [r3, #0x16] + mov r0, #0x10 + strb r2, [r3, #8] + bl FUN_021EB958 + ldr r2, _021EBE10 ; =0x02210E48 + mov r1, #0x2300 + str r0, [r2] + mov r0, #2 + bl FUN_021EB958 + ldr r2, _021EBE14 ; =0x02210E4C + mov r1, #0x58 + str r0, [r2] + mov r0, #4 + bl FUN_021EB958 + ldr r2, _021EBE18 ; =0x02210E50 + mov r1, #0xc + str r0, [r2] + mov r0, #8 + bl FUN_021EB958 + ldr r2, _021EBE1C ; =0x02210E54 + ldr r1, _021EBE10 ; =0x02210E48 + str r0, [r2] + ldr r1, [r1] + mov r0, #0 + ldr r2, _021EBE0C ; =0x00000D18 + bl MIi_CpuClear32 + mov r0, #0 + ldr r1, _021EBE14 ; =0x02210E4C + mov r2, #0x2300 + ldr r1, [r1] + bl MIi_CpuClear32 + mov r0, #0 + ldr r1, _021EBE18 ; =0x02210E50 + mov r2, #0x58 + ldr r1, [r1] + bl MIi_CpuClear32 + mov r0, #0 + ldr r1, _021EBE1C ; =0x02210E54 + mov r2, #0xc + ldr r1, [r1] + bl MIi_CpuClear32 + ldr r0, _021EBE10 ; =0x02210E48 + ldrb r1, [r4, #8] + ldr r0, [r0] + strb r1, [r0, #0xd0a] + ldrb r2, [r0, #0xd0b] + ldrb r1, [r4, #9] + bic r2, r2, #3 + and r1, r1, #3 + orr r1, r2, r1 + strb r1, [r0, #0xd0b] + ldr r1, _021EBE1C ; =0x02210E54 + ldr r2, [r4] + ldr r3, [r1] + mov r1, #0 + str r2, [r3] + ldr r2, [r4, #4] + str r2, [r3, #4] + str r1, [r3, #8] + ldrb r2, [r0, #0xd0c] + ldrb r1, [r4, #0xa] + bic r2, r2, #0xf + and r1, r1, #0xf + orr r1, r2, r1 + strb r1, [r0, #0xd0c] + ldrb r2, [r0, #0xd0c] + ldrb r1, [r4, #0xb] + bic r2, r2, #0x30 + and r1, r1, #3 + orr r1, r2, r1, lsl #4 + strb r1, [r0, #0xd0c] + bl FUN_02095FA8 + ldr r0, _021EBE14 ; =0x02210E4C + mov r1, #0x2300 + ldr r0, [r0] + bl FUN_020A7E80 + cmp r0, #1 + beq _021EBDF4 + cmp r0, #4 + blt _021EBE00 +_021EBDF4: + bl FUN_021EB800 + mov r0, #0 + ldmia sp!, {r4, pc} +_021EBE00: + mov r0, #1 + ldmia sp!, {r4, pc} + .align 2, 0 +_021EBE08: .word 0x02210E58 +_021EBE0C: .word 0x00000D18 +_021EBE10: .word 0x02210E48 +_021EBE14: .word 0x02210E4C +_021EBE18: .word 0x02210E50 +_021EBE1C: .word 0x02210E54 + + arm_func_start FUN_021EBE20 +FUN_021EBE20: ; 0x021EBE20 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0xcc + ldr r2, _021EBF1C ; =0x00000444 + mov sl, r0 + add r0, r1, #0x470 + add r8, r1, r2 + str r0, [sp] + subs sb, sl, #1 + bmi _021EBEF0 + mov r4, #0xc0 + mla r6, sb, r4, r0 + add r7, r8, sb, lsl #2 + mov r5, #4 +_021EBE54: + add r1, r8, sl, lsl #2 + add r0, r8, sb, lsl #2 + ldrb r1, [r1, #2] + ldrb r0, [r0, #2] + cmp r1, r0 + blo _021EBEF0 + mov r0, r7 + add r1, sp, #4 + mov r2, r5 + bl MIi_CpuCopy32 + add fp, r8, sl, lsl #2 + mov r0, fp + mov r1, r7 + mov r2, r5 + bl MIi_CpuCopy32 + mov r1, fp + add r0, sp, #4 + mov r2, r5 + bl MIi_CpuCopy32 + mov r0, r6 + add r1, sp, #8 + mov r2, r4 + bl MIi_CpuCopy32 + ldr r0, [sp] + mov r1, #0xc0 + mla fp, sl, r1, r0 + mov r0, fp + mov r1, r6 + mov r2, r4 + bl MIi_CpuCopy32 + mov r1, fp + add r0, sp, #8 + mov r2, r4 + bl MIi_CpuCopy32 + mov sl, sb + sub r7, r7, #4 + sub r6, r6, #0xc0 + subs sb, sb, #1 + bpl _021EBE54 +_021EBEF0: + add r1, r8, #0x28 + mov r0, #0 + mov r2, #4 + bl MIi_CpuClear32 + ldr r0, [sp] + mov r2, #0xc0 + add r1, r0, #0x780 + mov r0, #0 + bl MIi_CpuClear32 + add sp, sp, #0xcc + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_021EBF1C: .word 0x00000444 + + arm_func_start FUN_021EBF20 +FUN_021EBF20: ; 0x021EBF20 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #4 + ldrh r4, [r1, #2] + ldr lr, _021EBF9C ; =0x00000444 + add r5, r3, #0x470 + mov ip, #0xc0 + add r3, r3, lr + mla ip, r0, ip, r5 + add r0, r3, r0, lsl #2 + ands r3, r4, #2 + movne r3, r4, asr #2 + andne r4, r3, #0xff + moveq r3, r4, asr #2 + addeq r3, r3, #0x19 + andeq r4, r3, #0xff + ldrb r3, [r0, #2] + and lr, r4, #0xff + cmp lr, r3 + bls _021EBF84 + strb lr, [r0, #2] + ldrb r3, [r0, #3] + and r2, r2, #0x7f + bic r3, r3, #0x7f + orr r2, r3, r2 + strb r2, [r0, #3] +_021EBF84: + mov r0, r1 + mov r1, ip + mov r2, #0xc0 + bl MIi_CpuCopy32 + add sp, sp, #4 + ldmia sp!, {r4, r5, pc} + .align 2, 0 +_021EBF9C: .word 0x00000444 + + arm_func_start FUN_021EBFA0 +FUN_021EBFA0: ; 0x021EBFA0 + stmdb sp!, {lr} + sub sp, sp, #4 + ldr lr, _021EC004 ; =0x0000046C + add ip, r3, #0xbf0 + add r3, r3, lr + strb r0, [r3, #1] + ldrh lr, [r1, #2] + and r2, r2, #0x7f + ands r0, lr, #2 + movne r0, lr, asr #2 + andne r0, r0, #0xff + moveq r0, lr, asr #2 + addeq r0, r0, #0x19 + andeq r0, r0, #0xff + strb r0, [r3, #2] + ldrb lr, [r3, #3] + mov r0, r1 + bic r1, lr, #0x7f + orr lr, r1, r2 + mov r1, ip + mov r2, #0xc0 + strb lr, [r3, #3] + bl MIi_CpuCopy32 + add sp, sp, #4 + ldmfd sp!, {pc} + .align 2, 0 +_021EC004: .word 0x0000046C + + arm_func_start FUN_021EC008 +FUN_021EC008: ; 0x021EC008 + stmdb sp!, {r4, r5, r6, r7, r8, lr} + mov r6, r3 + ldrb r3, [r6, #0xd12] + mvn r4, #0 + mov r5, #0 + cmp r3, #0 + ble _021EC0A0 + ldr lr, _021EC0E4 ; =0x00000474 + ldrb ip, [r1, #4] + add lr, r6, lr +_021EC030: + ldrb r7, [lr] + cmp ip, r7 + bne _021EC090 + ldrb r8, [r1, #5] + ldrb r7, [lr, #1] + cmp r8, r7 + bne _021EC090 + ldrb r8, [r1, #6] + ldrb r7, [lr, #2] + cmp r8, r7 + bne _021EC090 + ldrb r8, [r1, #7] + ldrb r7, [lr, #3] + cmp r8, r7 + bne _021EC090 + ldrb r8, [r1, #8] + ldrb r7, [lr, #4] + cmp r8, r7 + bne _021EC090 + ldrb r8, [r1, #9] + ldrb r7, [lr, #5] + cmp r8, r7 + moveq r4, r5 + beq _021EC0A0 +_021EC090: + add r5, r5, #1 + cmp r5, r3 + add lr, lr, #0xc0 + blt _021EC030 +_021EC0A0: + mvn r3, #0 + cmp r4, r3 + bne _021EC0D0 + mov r3, r6 + and r0, r0, #0xff + bl FUN_021EBFA0 + ldrb r0, [r6, #0xd12] + mov r4, #0xa + cmp r0, #0xa + addlo r0, r0, #1 + strlob r0, [r6, #0xd12] + b _021EC0DC +_021EC0D0: + mov r0, r4 + mov r3, r6 + bl FUN_021EBF20 +_021EC0DC: + mov r0, r4 + ldmia sp!, {r4, r5, r6, r7, r8, pc} + .align 2, 0 +_021EC0E4: .word 0x00000474 + + arm_func_start FUN_021EC0E8 +FUN_021EC0E8: ; 0x021EC0E8 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} + mov r4, r0 + ldrh r2, [r4, #0xa] + mov sl, r1 + cmp r2, #0x20 + bne _021EC10C + bl FUN_021EC210 + cmp r0, #0 + ldmgtia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} +_021EC10C: + ldrb r5, [sl, #0xd12] + mov sb, #0 + cmp r5, #0 + ble _021EC174 + ldr r0, _021EC17C ; =0x0000047C + ldrh r6, [r4, #0xa] + mov r8, sl + add r7, sl, r0 + add r4, r4, #0xc +_021EC130: + add r0, r8, #0x400 + ldrh r0, [r0, #0x7a] + cmp r6, r0 + bne _021EC160 + mov r0, r4 + mov r1, r7 + mov r2, r6 + bl strncmp + cmp r0, #0 + addeq r0, sl, sb, lsl #2 + ldreqb r0, [r0, #0x445] + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} +_021EC160: + add sb, sb, #1 + cmp sb, r5 + add r8, r8, #0xc0 + add r7, r7, #0xc0 + blt _021EC130 +_021EC174: + mvn r0, #0 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + .align 2, 0 +_021EC17C: .word 0x0000047C + + arm_func_start FUN_021EC180 +FUN_021EC180: ; 0x021EC180 + stmdb sp!, {r4, r5, r6, r7, r8, sb, lr} + sub sp, sp, #4 + mov r6, r0 + ldrh r3, [r6, #0xa] + mov r5, r1 + mov r4, r2 + cmp r3, #0x20 + bne _021EC1B0 + bl FUN_021EC210 + cmp r0, #0 + addgt sp, sp, #4 + ldmgtia sp!, {r4, r5, r6, r7, r8, sb, pc} +_021EC1B0: + cmp r5, #0 + mov sb, #0 + ble _021EC204 + ldrh r8, [r6, #0xa] + add r6, r6, #0xc + and r7, r8, #0xff +_021EC1C8: + ldrb r0, [r4, #3] + cmp r7, r0 + bne _021EC1F4 + mov r0, r6 + mov r2, r8 + add r1, r4, #4 + bl strncmp + cmp r0, #0 + addeq sp, sp, #4 + ldreqb r0, [r4, #1] + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, pc} +_021EC1F4: + add sb, sb, #1 + cmp sb, r5 + add r4, r4, #0x24 + blt _021EC1C8 +_021EC204: + mvn r0, #0 + add sp, sp, #4 + ldmia sp!, {r4, r5, r6, r7, r8, sb, pc} + + arm_func_start FUN_021EC210 +FUN_021EC210: ; 0x021EC210 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #4 + mov r5, r0 + mov r0, #0x10 + bl FUN_021EB798 + mov r4, r0 + ldrb r0, [r4, #0xd0c] + mov r0, r0, lsl #0x1c + movs r0, r0, lsr #0x1c + beq _021EC240 + cmp r0, #4 + bne _021EC270 +_021EC240: + ldrh r0, [r5, #0x2c] + mov r0, r0, asr #4 + and r0, r0, #1 + and r0, r0, #0xff + cmp r0, #1 + bne _021EC270 + add r0, r5, #0xc + bl FUN_021EE5C8 + cmp r0, #1 + addeq sp, sp, #4 + moveq r0, #6 + ldmeqia sp!, {r4, r5, pc} +_021EC270: + ldrb r0, [r4, #0xd0c] + mov r0, r0, lsl #0x1c + movs r0, r0, lsr #0x1c + beq _021EC288 + cmp r0, #5 + bne _021EC2B8 +_021EC288: + ldrh r0, [r5, #0x2c] + mov r0, r0, asr #4 + and r0, r0, #1 + and r0, r0, #0xff + cmp r0, #1 + bne _021EC2B8 + add r0, r5, #0xc + bl FUN_021EE668 + cmp r0, #1 + addeq sp, sp, #4 + moveq r0, #7 + ldmeqia sp!, {r4, r5, pc} +_021EC2B8: + mvn r0, #0 + add sp, sp, #4 + ldmia sp!, {r4, r5, pc} + + arm_func_start FUN_021EC2C4 +FUN_021EC2C4: ; 0x021EC2C4 + stmdb sp!, {r4, r5, r6, r7, lr} + sub sp, sp, #4 + mov r7, r0 + mov r0, #0x10 + mvn r6, #0 + bl FUN_021EB798 + mov r4, r0 + mov r0, #1 + bl FUN_021EB798 + mov r1, #1 + strb r1, [r0, #0xb] + bl FUN_021EB720 + cmp r0, #3 + beq _021EC314 + cmp r0, #4 + beq _021EC384 + cmp r0, #5 + beq _021EC3D0 + add sp, sp, #4 + ldmia sp!, {r4, r5, r6, r7, pc} +_021EC314: + ldrh r1, [r7, #0xa] + ldrb r5, [r4, #0xd11] + cmp r1, #0 + beq _021EC330 + ldrb r0, [r7, #0xc] + cmp r0, #0 + bne _021EC33C +_021EC330: + ldrh r0, [r7, #0x36] + bl FUN_021EDA3C + b _021EC418 +_021EC33C: + cmp r1, #1 + beq _021EC34C + cmp r0, #0x20 + bne _021EC36C +_021EC34C: + ldrh r0, [r7, #0x36] + bl FUN_021EDA3C + ldrb r1, [r4, #0xd10] + mov r0, r7 + add r2, r4, #0x300 + bl FUN_021EC180 + mov r6, r0 + b _021EC418 +_021EC36C: + ldrb r1, [r4, #0xd10] + mov r0, r7 + add r2, r4, #0x300 + bl FUN_021EC180 + mov r6, r0 + b _021EC418 +_021EC384: + ldrb r2, [r4, #0xd0f] + mov r1, #0xc0 + mov r0, r7 + mla r1, r2, r1, r4 + add r1, r1, #0x400 + ldrh r2, [r1, #0xa6] + mov r1, r4 + sub r2, r2, #1 + and r5, r2, #0xff + bl FUN_021EC0E8 + movs r6, r0 + bmi _021EC418 + ldr r0, _021EC448 ; =0x00000447 + ldrb r1, [r4, #0xd0f] + add r2, r4, r0 + ldrb r0, [r2, r1, lsl #2] + orr r0, r0, #0x80 + strb r0, [r2, r1, lsl #2] + b _021EC418 +_021EC3D0: + ldrb r1, [r4, #0xd0f] + add r2, r4, #0x300 + mov r0, #0x24 + mla r2, r1, r0, r2 + mov r0, r7 + mov r1, #1 + ldrb r5, [r4, #0xd11] + bl FUN_021EC180 + movs r6, r0 + bmi _021EC418 + ldrb r1, [r4, #0xd0f] + mov r0, #0x24 + add r3, r4, #0x300 + mul r2, r1, r0 + ldrb r0, [r3, r2] + bic r0, r0, #0xf + orr r0, r0, #1 + strb r0, [r3, r2] +_021EC418: + cmp r6, #0 + addlt sp, sp, #4 + ldmltia sp!, {r4, r5, r6, r7, pc} + mov r0, r6 + mov r1, r7 + mov r2, r5 + mov r3, r4 + bl FUN_021EC008 + mov r1, r4 + bl FUN_021EBE20 + add sp, sp, #4 + ldmia sp!, {r4, r5, r6, r7, pc} + .align 2, 0 +_021EC448: .word 0x00000447 + + arm_func_start FUN_021EC44C +FUN_021EC44C: ; 0x021EC44C + stmdb sp!, {r4, lr} + mov r4, r0 + mov r0, #0x10 + bl FUN_021EB798 + ldrsh r1, [r4] + cmp r1, #5 + bne _021EC4C4 + ldrsh r1, [r4, #2] + cmp r1, #0 + ldmeqia sp!, {r4, pc} + ldr r1, [r4, #8] + cmp r1, #0xd + beq _021EC494 + cmp r1, #0xf + beq _021EC4A0 + cmp r1, #0x11 + beq _021EC4AC + b _021EC4B8 +_021EC494: + mov r1, #1 + strb r1, [r0, #0xd14] + ldmia sp!, {r4, pc} +_021EC4A0: + mov r1, #2 + strb r1, [r0, #0xd14] + ldmia sp!, {r4, pc} +_021EC4AC: + mov r1, #3 + strb r1, [r0, #0xd14] + ldmia sp!, {r4, pc} +_021EC4B8: + mov r1, #4 + strb r1, [r0, #0xd14] + ldmia sp!, {r4, pc} +_021EC4C4: + cmp r1, #7 + ldmneia sp!, {r4, pc} + ldr r0, [r4, #4] + bl FUN_021EC2C4 + ldmia sp!, {r4, pc} + + arm_func_start FUN_021EC4D8 +FUN_021EC4D8: ; 0x021EC4D8 + stmdb sp!, {r4, lr} + mov r4, r2 + cmp r1, #9 + addls pc, pc, r1, lsl #2 + b _021EC5B8 +_021EC4EC: ; jump table + b _021EC51C ; case 0 + b _021EC518 ; case 1 + b _021EC514 ; case 2 + b _021EC548 ; case 3 + b _021EC544 ; case 4 + b _021EC540 ; case 5 + b _021EC56C ; case 6 + b _021EC594 ; case 7 + b _021EC5B8 ; case 8 + b _021EC5B8 ; case 9 +_021EC514: + add r0, r0, #0x100 +_021EC518: + add r0, r0, #0x100 +_021EC51C: + ldrb r2, [r0, #0xe6] + add r0, r0, #0x80 + add r1, r4, #2 + mov r2, r2, lsl #0x1e + mov r3, r2, lsr #0x1e + mov r2, #0x50 + strb r3, [r4] + bl MI_CpuCopy8 + b _021EC5B8 +_021EC540: + add r0, r0, #0x100 +_021EC544: + add r0, r0, #0x100 +_021EC548: + mov r3, #1 + add r0, r0, #0xd1 + add r1, r4, #2 + mov r2, #0x14 + strb r3, [r4] + bl MI_CpuCopy8 + mov r0, #0 + strb r0, [r4, #0x16] + b _021EC5B8 +_021EC56C: + mov r1, #2 + strb r1, [r4] + ldr r1, _021EC5CC ; =0x0000047C + ldrb r2, [r0, #0xd13] + add r1, r0, r1 + mov r0, #0xc0 + mla r0, r2, r0, r1 + add r1, r4, #2 + bl FUN_021EE5B8 + b _021EC5B8 +_021EC594: + mov r1, #2 + strb r1, [r4] + ldr r1, _021EC5CC ; =0x0000047C + ldrb r2, [r0, #0xd13] + add r1, r0, r1 + mov r0, #0xc0 + mla r0, r2, r0, r1 + add r1, r4, #2 + bl FUN_021EE640 +_021EC5B8: + ldrb r0, [r4] + cmp r0, #0 + movne r0, #1 + moveq r0, #0 + ldmia sp!, {r4, pc} + .align 2, 0 +_021EC5CC: .word 0x0000047C + + arm_func_start FUN_021EC5D0 +FUN_021EC5D0: ; 0x021EC5D0 + ldrb r0, [r0, #0xd0b] + mov r0, r0, lsl #0x1c + mov r0, r0, lsr #0x1e + cmp r0, #1 + moveq r0, #0xc0000 + movne r0, #0x80000 + bx lr + + arm_func_start FUN_021EC5EC +FUN_021EC5EC: ; 0x021EC5EC + ldrb r0, [r0, #0xd0b] + mov r0, r0, lsl #0x1e + mov r0, r0, lsr #0x1e + cmp r0, #1 + moveq r0, #0x30000 + movne r0, #0x20000 + bx lr + + arm_func_start FUN_021EC608 +FUN_021EC608: ; 0x021EC608 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #4 + mov sl, r0 + ldrb r2, [sl, #0xd13] + ldrb r1, [sl, #0xd0c] + add r3, sl, #0x470 + mov r0, #0xc0 + mla sb, r2, r0, r3 + mov r0, r1, lsl #0x18 + movs r0, r0, lsr #0x1e + mov r0, #0 + str r0, [sp] + bne _021EC72C + ldrh r0, [sb, #0xa] + ldr r7, [sp] + cmp r0, #0x20 + bne _021EC66C + mov r0, sb + bl FUN_021EC210 + cmp r0, #0 + str r0, [sp] + movle r0, #0 + addgt r7, r7, #1 + strle r0, [sp] + b _021EC690 +_021EC66C: + cmp r0, #8 + bne _021EC690 + mov r0, sb + bl FUN_021ED12C + cmp r0, #0 + str r0, [sp] + moveq r0, #0 + addne r7, r7, #1 + streq r0, [sp] +_021EC690: + ldrb r0, [sl, #0xd10] + mov r8, #0 + cmp r0, #0 + ble _021EC79C + mov r6, sl + add r5, sl, #0x304 + add r4, sl, #0x300 + ldr r0, _021EC7AC ; =0x00000D0C + add fp, sl, r0 +_021EC6B4: + ldrh r2, [sb, #0xa] + ldrb r0, [r6, #0x303] + cmp r2, r0 + bne _021EC70C + mov r1, r5 + add r0, sb, #0xc + bl strncmp + cmp r0, #0 + bne _021EC70C + cmp r7, #0 + ldreqb r0, [r6, #0x301] + streq r0, [sp] + beq _021EC708 + ldrb r0, [r4] + bic r0, r0, #0xf0 + orr r0, r0, #0x10 + strb r0, [r4] + ldrb r0, [fp] + bic r0, r0, #0xc0 + orr r0, r0, #0x40 + strb r0, [fp] +_021EC708: + add r7, r7, #1 +_021EC70C: + ldrb r0, [sl, #0xd10] + add r8, r8, #1 + add r6, r6, #0x24 + cmp r8, r0 + add r5, r5, #0x24 + add r4, r4, #0x24 + blt _021EC6B4 + b _021EC79C +_021EC72C: + ldrb r0, [sl, #0xd10] + ldr r2, [sp] + mov r3, r2 + cmp r0, #0 + ble _021EC78C + mov r4, sl + add r5, sl, #0x300 +_021EC748: + ldrb r0, [r5] + mov r1, r0, lsl #0x18 + mov r1, r1, lsr #0x1c + cmp r1, #1 + bne _021EC774 + cmp r3, #0 + biceq r0, r0, #0xf0 + streqb r0, [r5] + ldreqb r0, [r4, #0x301] + add r3, r3, #1 + streq r0, [sp] +_021EC774: + ldrb r0, [sl, #0xd10] + add r2, r2, #1 + add r5, r5, #0x24 + cmp r2, r0 + add r4, r4, #0x24 + blt _021EC748 +_021EC78C: + cmp r3, #1 + ldreqb r0, [sl, #0xd0c] + biceq r0, r0, #0xc0 + streqb r0, [sl, #0xd0c] +_021EC79C: + ldr r0, [sp] + and r0, r0, #0xff + add sp, sp, #4 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_021EC7AC: .word 0x00000D0C + + arm_func_start FUN_021EC7B0 +FUN_021EC7B0: ; 0x021EC7B0 + stmdb sp!, {r4, r5, r6, lr} + mov r6, r0 + bl FUN_020A71F8 + ldrb r2, [r6, #0xd13] + add r3, r6, #0x470 + mov r1, #0xc0 + mla r5, r2, r1, r3 + cmp r0, #3 + bne _021EC8BC + mov r0, r6 + bl FUN_021EC5EC + ldrb r1, [r6, #0xd15] + mov r4, r0 + add r0, r1, #1 + strb r0, [r6, #0xd15] + ldrb r1, [r6, #0xd15] + cmp r1, #3 + bls _021EC818 + mov r0, #0 + strb r0, [r6, #0xd15] + ldrb r1, [r6, #0xd13] + mov r2, #1 + mov r0, #9 + add r1, r6, r1, lsl #2 + strb r2, [r1, #0x444] + ldmia sp!, {r4, r5, r6, pc} +_021EC818: + cmp r1, #1 + beq _021EC898 + ldrb r0, [r6, #0xd14] + cmp r0, #1 + ldreqb r0, [r6, #0xd0b] + biceq r0, r0, #0xc + streqb r0, [r6, #0xd0b] + beq _021EC898 + cmp r0, #2 + bne _021EC860 + mov r0, #0 + strb r0, [r6, #0xd15] + ldrb r1, [r6, #0xd13] + mov r2, #3 + mov r0, #9 + add r1, r6, r1, lsl #2 + strb r2, [r1, #0x444] + ldmia sp!, {r4, r5, r6, pc} +_021EC860: + cmp r0, #3 + bne _021EC888 + mov r0, #0 + strb r0, [r6, #0xd15] + ldrb r1, [r6, #0xd13] + mov r2, #4 + mov r0, #9 + add r1, r6, r1, lsl #2 + strb r2, [r1, #0x444] + ldmia sp!, {r4, r5, r6, pc} +_021EC888: + cmp r1, #3 + ldreqb r0, [r6, #0xd0b] + biceq r0, r0, #0xc + streqb r0, [r6, #0xd0b] +_021EC898: + mov r0, r6 + bl FUN_021EC5D0 + mov r2, r0 + ldr r1, _021EC8E8 ; =0x00000CB8 + mov r0, r5 + add r1, r6, r1 + orr r2, r4, r2 + bl FUN_020A75C0 + b _021EC8E0 +_021EC8BC: + cmp r0, #9 + bne _021EC8E0 + mov r0, #0 + strb r0, [r6, #0xd15] + bl OS_GetTick + str r0, [r6, #0xcb0] + str r1, [r6, #0xcb4] + mov r0, #0xa + ldmia sp!, {r4, r5, r6, pc} +_021EC8E0: + mov r0, #8 + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +_021EC8E8: .word 0x00000CB8 + + arm_func_start FUN_021EC8EC +FUN_021EC8EC: ; 0x021EC8EC + stmdb sp!, {r4, r5, lr} + sub sp, sp, #4 + mov r5, r0 + ldrb r2, [r5, #0xd13] + add r3, r5, #0x470 + mov r1, #0xc0 + mla r4, r2, r1, r3 + bl FUN_021EC608 + ldr r1, _021ECA04 ; =0x00000CB8 + strb r0, [r5, #0xd0d] + add r0, r5, r1 + mov r1, #0 + mov r2, #0x52 + bl MI_CpuFill8 + ldr r2, _021ECA04 ; =0x00000CB8 + ldrb r1, [r5, #0xd0d] + mov r0, r5 + add r2, r5, r2 + bl FUN_021EC4D8 + cmp r0, #0 + beq _021EC9B0 + ldrb r0, [r5, #0xd0b] + bic r0, r0, #0xc + orr r0, r0, #4 + strb r0, [r5, #0xd0b] + ldrh r0, [r4, #0x2c] + mov r0, r0, asr #4 + ands r0, r0, #1 + bne _021EC97C + ldrb r1, [r5, #0xd13] + mov r2, #3 + add sp, sp, #4 + add r1, r5, r1, lsl #2 + strb r2, [r1, #0x444] + mov r0, #9 + ldmia sp!, {r4, r5, pc} +_021EC97C: + ldrb r0, [r5, #0xd0d] + cmp r0, #6 + bne _021EC9EC + ldrb r0, [r4, #0x15] + cmp r0, #0 + bne _021EC9EC + ldrb r1, [r5, #0xd13] + mov r2, #3 + add sp, sp, #4 + add r1, r5, r1, lsl #2 + strb r2, [r1, #0x444] + mov r0, #9 + ldmia sp!, {r4, r5, pc} +_021EC9B0: + ldrb r0, [r5, #0xd0b] + bic r0, r0, #0xc + strb r0, [r5, #0xd0b] + ldrh r0, [r4, #0x2c] + mov r0, r0, asr #4 + and r0, r0, #1 + cmp r0, #1 + bne _021EC9EC + ldrb r1, [r5, #0xd13] + mov r2, #3 + add sp, sp, #4 + add r1, r5, r1, lsl #2 + strb r2, [r1, #0x444] + mov r0, #9 + ldmia sp!, {r4, r5, pc} +_021EC9EC: + mov r0, #0 + strb r0, [r5, #0xd15] + strb r0, [r5, #0xd14] + mov r0, #8 + add sp, sp, #4 + ldmia sp!, {r4, r5, pc} + .align 2, 0 +_021ECA04: .word 0x00000CB8 + + arm_func_start FUN_021ECA08 +FUN_021ECA08: ; 0x021ECA08 + stmdb sp!, {r4, lr} + bl FUN_021EB720 + mov r4, r0 + mov r0, #0x10 + bl FUN_021EB798 + cmp r4, #7 + beq _021ECA30 + cmp r4, #8 + beq _021ECA3C + b _021ECA44 +_021ECA30: + bl FUN_021EC8EC + mov r4, r0 + b _021ECA44 +_021ECA3C: + bl FUN_021EC7B0 + mov r4, r0 +_021ECA44: + mov r0, r4 + ldmia sp!, {r4, pc} + + arm_func_start FUN_021ECA4C +FUN_021ECA4C: ; 0x021ECA4C + stmdb sp!, {lr} + sub sp, sp, #4 + bl FUN_02099A94 + cmp r0, #0 + addne sp, sp, #4 + movne r0, #0 + ldmneia sp!, {pc} + bl THUNK_FUN_02099BC8 + cmp r0, #0 + beq _021ECA80 + mvn r1, #0x26 + cmp r0, r1 + bne _021ECA8C +_021ECA80: + add sp, sp, #4 + mov r0, #1 + ldmfd sp!, {pc} +_021ECA8C: + mov r0, #0 + add sp, sp, #4 + ldmfd sp!, {pc} + + arm_func_start FUN_021ECA98 +FUN_021ECA98: ; 0x021ECA98 + stmdb sp!, {lr} + sub sp, sp, #4 + bl FUN_020A71F8 + cmp r0, #0xc + addls pc, pc, r0, lsl #2 + b _021ECB2C +_021ECAB0: ; jump table + b _021ECAE4 ; case 0 + b _021ECAF0 ; case 1 + b _021ECB2C ; case 2 + b _021ECAF8 ; case 3 + b _021ECB2C ; case 4 + b _021ECB2C ; case 5 + b _021ECB00 ; case 6 + b _021ECB2C ; case 7 + b _021ECB2C ; case 8 + b _021ECB08 ; case 9 + b _021ECB2C ; case 10 + b _021ECB18 ; case 11 + b _021ECB10 ; case 12 +_021ECAE4: + add sp, sp, #4 + mov r0, #1 + ldmfd sp!, {pc} +_021ECAF0: + bl FUN_020A7E0C + b _021ECB2C +_021ECAF8: + bl FUN_020A7AC8 + b _021ECB2C +_021ECB00: + bl FUN_020A7820 + b _021ECB2C +_021ECB08: + bl FUN_020A7488 + b _021ECB2C +_021ECB10: + bl FUN_020A722C + b _021ECB2C +_021ECB18: + mov r0, #0 + bl FUN_021EB6F4 + add sp, sp, #4 + mvn r0, #0 + ldmfd sp!, {pc} +_021ECB2C: + mov r0, #0 + add sp, sp, #4 + ldmfd sp!, {pc} + + arm_func_start FUN_021ECB38 +FUN_021ECB38: ; 0x021ECB38 + stmdb sp!, {r4, lr} + mov r4, r0 + ldrb r0, [r4] + cmp r0, #0xa + bhi _021ECB80 + bl FUN_021ECA98 + cmp r0, #1 + moveq r0, #0 + streqb r0, [r4] + moveq r0, #1 + ldmeqia sp!, {r4, pc} + mvn r1, #0 + cmp r0, r1 + bne _021ECBB4 + mov r0, #0x12 + strb r0, [r4] + mov r0, #1 + ldmia sp!, {r4, pc} +_021ECB80: + cmp r0, #0xe + bne _021ECB9C + bl FUN_021DC7F0 + bl FUN_021DC870 + mov r0, #0xc + strb r0, [r4] + b _021ECBB4 +_021ECB9C: + cmp r0, #0x12 + bhs _021ECBB4 + bl FUN_021ECA4C + cmp r0, #1 + moveq r0, #0xa + streqb r0, [r4] +_021ECBB4: + mov r0, #0 + ldmia sp!, {r4, pc} + + arm_func_start FUN_021ECBBC +FUN_021ECBBC: ; 0x021ECBBC + ldrb r1, [r0, #0x16] + cmp r1, #0xa + bhs _021ECC04 + ldrb r1, [r0, #0x14] + cmp r1, #3 + ldreqb r1, [r0, #0x15] + ldreq r0, _021ECCC4 ; =0xFFFF3864 + subeq r2, r0, r1 + beq _021ECCBC + cmp r1, #4 + ldreqb r1, [r0, #0x15] + moveq r0, #0xc800 + rsbeq r0, r0, #0 + subeq r2, r0, r1 + ldrneb r1, [r0, #0x15] + ldrne r0, _021ECCC8 ; =0xFFFF379C + subne r2, r0, r1 + b _021ECCBC +_021ECC04: + cmp r1, #0xd + ldrlob r1, [r0, #0x15] + ldrlo r0, _021ECCCC ; =0xFFFF34E0 + sublo r2, r0, r1 + blo _021ECCBC + ldr r2, [r0, #0x10] + cmp r2, #0 + ldreqb r1, [r0, #0x15] + ldreq r0, _021ECCD0 ; =0xFFFF3CB0 + subeq r2, r0, r1 + beq _021ECCBC + mvn r1, #0 + cmp r2, r1 + ldreqb r1, [r0, #0x15] + ldreq r0, _021ECCD4 ; =0xFFFF347C + subeq r2, r0, r1 + beq _021ECCBC + mvn r1, #1 + cmp r2, r1 + ldreqb r1, [r0, #0x15] + ldreq r0, _021ECCD8 ; =0xFFFF3418 + subeq r2, r0, r1 + beq _021ECCBC + mvn r1, #2 + cmp r2, r1 + ldreqb r1, [r0, #0x15] + ldreq r0, _021ECCDC ; =0xFFFF33B4 + subeq r2, r0, r1 + beq _021ECCBC + mvn r1, #3 + cmp r2, r1 + ldreqb r1, [r0, #0x15] + ldreq r0, _021ECCE0 ; =0xFFFF30F8 + subeq r2, r0, r1 + beq _021ECCBC + mvn r1, #4 + cmp r2, r1 + ldreqb r1, [r0, #0x15] + ldreq r0, _021ECCE4 ; =0xFFFF3094 + subeq r2, r0, r1 + beq _021ECCBC + mvn r1, #5 + cmp r2, r1 + ldreqb r1, [r0, #0x15] + ldreq r0, _021ECCE8 ; =0xFFFF3030 + subeq r2, r0, r1 +_021ECCBC: + mov r0, r2 + bx lr + .align 2, 0 +_021ECCC4: .word 0xFFFF3864 +_021ECCC8: .word 0xFFFF379C +_021ECCCC: .word 0xFFFF34E0 +_021ECCD0: .word 0xFFFF3CB0 +_021ECCD4: .word 0xFFFF347C +_021ECCD8: .word 0xFFFF3418 +_021ECCDC: .word 0xFFFF33B4 +_021ECCE0: .word 0xFFFF30F8 +_021ECCE4: .word 0xFFFF3094 +_021ECCE8: .word 0xFFFF3030 + + arm_func_start FUN_021ECCEC +FUN_021ECCEC: ; 0x021ECCEC + ldrb r0, [r0, #0xb] + cmp r0, #0 + ldreq r0, _021ECD00 ; =0xFFFF3C4D + ldrne r0, _021ECD04 ; =0xFFFF3865 + bx lr + .align 2, 0 +_021ECD00: .word 0xFFFF3C4D +_021ECD04: .word 0xFFFF3865 + + arm_func_start FUN_021ECD08 +FUN_021ECD08: ; 0x021ECD08 + mvn r0, #5 + bx lr + + arm_func_start FUN_021ECD10 +FUN_021ECD10: ; 0x021ECD10 + cmp r0, #3 + addls pc, pc, r0, lsl #2 + b _021ECD4C +_021ECD1C: ; jump table + b _021ECD34 ; case 0 + b _021ECD2C ; case 1 + b _021ECD3C ; case 2 + b _021ECD44 ; case 3 +_021ECD2C: + mvn r0, #8 + bx lr +_021ECD34: + mvn r0, #9 + bx lr +_021ECD3C: + mvn r0, #7 + bx lr +_021ECD44: + mvn r0, #6 + bx lr +_021ECD4C: + mov r0, #0 + bx lr + + arm_func_start FUN_021ECD54 +FUN_021ECD54: ; 0x021ECD54 + stmdb sp!, {r4, lr} + mov r0, #1 + bl FUN_021EB798 + mov r4, r0 + bl FUN_021EB6E0 + cmp r0, #4 + bge _021ECD78 + bl FUN_021ECD10 + ldmia sp!, {r4, pc} +_021ECD78: + cmp r0, #5 + bge _021ECD88 + bl FUN_021ECD08 + ldmia sp!, {r4, pc} +_021ECD88: + cmp r0, #5 + bne _021ECD9C + mov r0, r4 + bl FUN_021ECCEC + ldmia sp!, {r4, pc} +_021ECD9C: + mov r0, r4 + bl FUN_021ECBBC + ldmia sp!, {r4, pc} + + arm_func_start FUN_021ECDA8 +FUN_021ECDA8: ; 0x021ECDA8 + stmdb sp!, {lr} + sub sp, sp, #4 + mov r0, #1 + bl FUN_021EB798 + add r0, r0, #0xa + bl FUN_021ECB38 + cmp r0, #1 + moveq r0, #0x12 + movne r0, #0x11 + add sp, sp, #4 + ldmfd sp!, {pc} + + arm_func_start FUN_021ECDD4 +FUN_021ECDD4: ; 0x021ECDD4 + ldrb r2, [r0, #0xd12] + mov r3, #0 + mov ip, r3 + cmp r2, #0 + bls _021ECE10 +_021ECDE8: + add r1, r0, ip, lsl #2 + ldrb r1, [r1, #0x447] + mov r1, r1, lsl #0x18 + movs r1, r1, lsr #0x1f + moveq r3, ip + beq _021ECE10 + add r1, ip, #1 + and ip, r1, #0xff + cmp ip, r2 + blo _021ECDE8 +_021ECE10: + mov r0, r3 + bx lr + + arm_func_start FUN_021ECE18 +FUN_021ECE18: ; 0x021ECE18 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #4 + ldrb r1, [r0, #0xd12] + mov r3, #0 + mov ip, r3 + cmp r1, #0 + ble _021ECEA0 + ldr r2, _021ECEAC ; =0x00000447 + mov r1, r0 + add r2, r0, r2 +_021ECE40: + add r4, r0, ip, lsl #2 + ldrb r4, [r4, #0x444] + cmp r4, #0 + bne _021ECE7C + add lr, r1, #0x400 + ldrh r4, [lr, #0xa6] + ldrb lr, [r2] + sub r5, r4, #1 + mov r4, lr, lsl #0x19 + cmp r5, r4, lsr #25 + bicne lr, lr, #0x80 + addne r3, r3, #1 + strneb lr, [r2] + andne r3, r3, #0xff + bne _021ECE88 +_021ECE7C: + ldrb lr, [r2] + orr lr, lr, #0x80 + strb lr, [r2] +_021ECE88: + ldrb lr, [r0, #0xd12] + add ip, ip, #1 + add r2, r2, #4 + cmp ip, lr + add r1, r1, #0xc0 + blt _021ECE40 +_021ECEA0: + mov r0, r3 + add sp, sp, #4 + ldmia sp!, {r4, r5, pc} + .align 2, 0 +_021ECEAC: .word 0x00000447 + + arm_func_start FUN_021ECEB0 +FUN_021ECEB0: ; 0x021ECEB0 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} + mov r5, #0 + mov r4, r0 + mov r6, r5 + add lr, r0, #0x300 + mov ip, r5 + mov r2, r5 + mov r1, r5 + mov r7, r5 + mov r3, #1 +_021ECED8: + ldrb r8, [r0, #0xd0c] + mov r8, r8, lsl #0x1c + movs sb, r8, lsr #0x1c + beq _021ECEF4 + add r8, r6, #1 + cmp sb, r8 + bne _021ECFB0 +_021ECEF4: + ldrb r8, [r4, #0xe7] + cmp r8, #0xff + beq _021ECFB0 + mov sb, ip +_021ECF04: + add r8, r4, sb + ldrb sl, [r8, #0x40] + cmp sl, #0 + beq _021ECF2C + add r8, sb, #1 + add sb, lr, sb + strb sl, [sb, #4] + and sb, r8, #0xff + cmp sb, #0x20 + blo _021ECF04 +_021ECF2C: + cmp sb, #0 + strneb sb, [lr, #3] + movne r8, r3 + strneb r6, [lr, #1] + moveq r8, r2 + cmp r8, #0 + addne r5, r5, #1 + ldrb r8, [r4, #0xe7] + andne r5, r5, #0xff + addne lr, lr, #0x24 + cmp r8, #1 + bne _021ECFB0 + mov sb, r1 +_021ECF60: + add r8, r4, sb + ldrb sl, [r8, #0x60] + cmp sl, #0 + beq _021ECF88 + add r8, sb, #1 + add sb, lr, sb + strb sl, [sb, #4] + and sb, r8, #0xff + cmp sb, #0x20 + blo _021ECF60 +_021ECF88: + cmp sb, #0 + strneb sb, [lr, #3] + movne sb, r3 + addne r8, r6, #3 + moveq sb, r7 + strneb r8, [lr, #1] + cmp sb, #0 + addne r5, r5, #1 + andne r5, r5, #0xff + addne lr, lr, #0x24 +_021ECFB0: + add r6, r6, #1 + cmp r6, #3 + add r4, r4, #0x100 + blt _021ECED8 + mov r0, r5 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + + arm_func_start FUN_021ECFC8 +FUN_021ECFC8: ; 0x021ECFC8 + stmdb sp!, {r4, r5, r6, lr} + mov r6, r0 + add r4, r6, #0x300 + bl FUN_021ECEB0 + ldrb r1, [r6, #0xd0c] + mov r5, r0 + mov r0, #0x24 + mov r1, r1, lsl #0x1c + mla r4, r5, r0, r4 + movs r0, r1, lsr #0x1c + beq _021ECFFC + cmp r0, #4 + bne _021ED028 +_021ECFFC: + ldr r0, _021ED0B4 ; =0x0220D4C0 + add r1, r4, #4 + mov r2, #8 + bl MI_CpuCopy8 + mov r1, #8 + add r0, r5, #1 + strb r1, [r4, #3] + mov r1, #6 + strb r1, [r4, #1] + and r5, r0, #0xff + add r4, r4, #0x24 +_021ED028: + ldrb r0, [r6, #0xd0c] + mov r0, r0, lsl #0x1c + movs r0, r0, lsr #0x1c + beq _021ED040 + cmp r0, #7 + bne _021ED06C +_021ED040: + ldr r0, _021ED0B8 ; =0x0220BADC + add r1, r4, #4 + mov r2, #8 + bl MI_CpuCopy8 + mov r1, #8 + add r0, r5, #1 + strb r1, [r4, #3] + mov r1, #9 + strb r1, [r4, #1] + and r5, r0, #0xff + add r4, r4, #0x24 +_021ED06C: + ldrb r0, [r6, #0xd0c] + mov r0, r0, lsl #0x1c + movs r0, r0, lsr #0x1c + beq _021ED084 + cmp r0, #8 + bne _021ED0AC +_021ED084: + ldr r0, _021ED0BC ; =0x0220BAEC + add r1, r4, #4 + mov r2, #0xb + bl MI_CpuCopy8 + mov r1, #0xb + add r0, r5, #1 + strb r1, [r4, #3] + mov r1, #0xa + strb r1, [r4, #1] + and r5, r0, #0xff +_021ED0AC: + mov r0, r5 + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +_021ED0B4: .word 0x0220D4C0 +_021ED0B8: .word 0x0220BADC +_021ED0BC: .word 0x0220BAEC + + arm_func_start FUN_021ED0C0 +FUN_021ED0C0: ; 0x021ED0C0 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #4 + mov r5, r0 + add r4, r5, #0x300 + bl FUN_021ECEB0 + ldrb r1, [r5, #0xd0c] + mov r5, r0 + mov r0, #0x24 + mov r1, r1, lsl #0x1c + mla r4, r5, r0, r4 + movs r0, r1, lsr #0x1c + beq _021ED0F8 + cmp r0, #6 + bne _021ED11C +_021ED0F8: + ldr r0, _021ED128 ; =0x0220BAE4 + add r1, r4, #4 + mov r2, #8 + bl MI_CpuCopy8 + mov r1, #8 + strb r1, [r4, #3] + add r0, r5, #1 + strb r1, [r4, #1] + and r5, r0, #0xff +_021ED11C: + mov r0, r5 + add sp, sp, #4 + ldmia sp!, {r4, r5, pc} + .align 2, 0 +_021ED128: .word 0x0220BAE4 + + arm_func_start FUN_021ED12C +FUN_021ED12C: ; 0x021ED12C + stmdb sp!, {r4, lr} + mov r4, r0 + mov r0, #0x10 + bl FUN_021EB798 + ldrb r0, [r0, #0xd0c] + mov r0, r0, lsl #0x1c + movs r0, r0, lsr #0x1c + beq _021ED154 + cmp r0, #6 + bne _021ED170 +_021ED154: + ldr r1, _021ED178 ; =0x0220BAE4 + add r0, r4, #0xc + mov r2, #8 + bl strncmp + cmp r0, #0 + moveq r0, #8 + ldmeqia sp!, {r4, pc} +_021ED170: + mov r0, #0 + ldmia sp!, {r4, pc} + .align 2, 0 +_021ED178: .word 0x0220BAE4 + + arm_func_start FUN_021ED17C +FUN_021ED17C: ; 0x021ED17C + stmdb sp!, {r4, r5, lr} + sub sp, sp, #4 + mov r5, r0 + mov r0, #0x10 + bl FUN_021EB798 + mov r4, r0 + cmp r5, #0 + beq _021ED1B0 + cmp r5, #1 + beq _021ED1D0 + cmp r5, #2 + beq _021ED1E8 + b _021ED20C +_021ED1B0: + add r1, r4, #0x300 + mov r0, #0 + mov r2, #0x144 + bl MIi_CpuClear32 + mov r0, r4 + bl FUN_021ED0C0 + strb r0, [r4, #0xd10] + b _021ED20C +_021ED1D0: + bl FUN_021ECE18 + strb r0, [r4, #0xd10] + mov r0, r4 + bl FUN_021ECDD4 + strb r0, [r4, #0xd0f] + b _021ED20C +_021ED1E8: + add r1, r4, #0x300 + mov r0, #0 + mov r2, #0x144 + bl MIi_CpuClear32 + mov r1, #0 + mov r0, r4 + strb r1, [r4, #0xd0f] + bl FUN_021ECFC8 + strb r0, [r4, #0xd10] +_021ED20C: + ldrb r0, [r4, #0xd10] + add sp, sp, #4 + ldmia sp!, {r4, r5, pc} + + arm_func_start FUN_021ED218 +FUN_021ED218: ; 0x021ED218 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #4 + mov r0, #0x10 + bl FUN_021EB798 + mov r4, r0 + mov r5, #9 + bl FUN_020A71F8 + cmp r0, #0xc + addls pc, pc, r0, lsl #2 + b _021ED2F0 +_021ED240: ; jump table + b _021ED2F0 ; case 0 + b _021ED2F0 ; case 1 + b _021ED2F0 ; case 2 + b _021ED274 ; case 3 + b _021ED2F0 ; case 4 + b _021ED2F0 ; case 5 + b _021ED2C0 ; case 6 + b _021ED2F0 ; case 7 + b _021ED2F0 ; case 8 + b _021ED2C8 ; case 9 + b _021ED2F0 ; case 10 + b _021ED2E4 ; case 11 + b _021ED2D0 ; case 12 +_021ED274: + ldrb r0, [r4, #0xd0c] + ldrb r5, [r4, #0xd0e] + mov r0, r0, lsl #0x18 + mov r0, r0, lsr #0x1e + cmp r0, #1 + bne _021ED2A4 + ldrb r0, [r4, #0xd13] + mov r1, #0 + mov r5, #7 + add r0, r4, r0, lsl #2 + strb r1, [r0, #0x444] + b _021ED2F0 +_021ED2A4: + cmp r5, #3 + blo _021ED2F0 + cmp r5, #5 + bhi _021ED2F0 + mov r0, r5 + bl FUN_021ED8D4 + b _021ED2F0 +_021ED2C0: + bl FUN_020A7820 + b _021ED2F0 +_021ED2C8: + bl FUN_020A7488 + b _021ED2F0 +_021ED2D0: + bl FUN_020A722C + mov r0, #4 + bl FUN_021EB6F4 + mov r5, #0x11 + b _021ED2F0 +_021ED2E4: + mov r0, #0 + bl FUN_021EB6F4 + mov r5, #0x11 +_021ED2F0: + mov r0, r5 + add sp, sp, #4 + ldmia sp!, {r4, r5, pc} + + arm_func_start FUN_021ED2FC +FUN_021ED2FC: ; 0x021ED2FC + stmdb sp!, {lr} + sub sp, sp, #4 + ldr ip, _021ED324 ; =0x0220BAF8 + cmp r2, #0xc + movgt r2, #0xc + ldr r2, [ip, r2, lsl #2] + orr r2, r3, r2 + bl FUN_020A7A90 + add sp, sp, #4 + ldmfd sp!, {pc} + .align 2, 0 +_021ED324: .word 0x0220BAF8 + + arm_func_start FUN_021ED328 +FUN_021ED328: ; 0x021ED328 + stmdb sp!, {r4, lr} + mov r4, r0 + add r0, r4, #0xd00 + ldrh r0, [r0, #0x16] + cmp r0, #0 + beq _021ED364 + mov r0, #2 + bl FUN_021ED17C + cmp r0, #0 + beq _021ED364 + mov r0, #0 + bl FUN_021ED9D0 + strb r0, [r4, #0xd11] + mov r0, #5 + ldmia sp!, {r4, pc} +_021ED364: + ldrb r0, [r4, #0xd0b] + mov r0, r0, lsl #0x18 + mov r0, r0, lsr #0x1c + cmp r0, #1 + movhs r0, #6 + ldmhsia sp!, {r4, pc} + mov r0, r4 + bl FUN_021ED798 + ldmia sp!, {r4, pc} + + arm_func_start FUN_021ED388 +FUN_021ED388: ; 0x021ED388 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #4 + mov r4, r1 + cmp r4, #0x11 + mov r5, r0 + addeq sp, sp, #4 + moveq r0, r4 + ldmeqia sp!, {r4, r5, pc} + ldrb r1, [r5, #0xd12] + mov r2, #0 + cmp r1, #0 + bls _021ED3D8 +_021ED3B8: + add r0, r5, r2, lsl #2 + ldrb r0, [r0, #0x444] + cmp r0, #0 + beq _021ED3D8 + add r0, r2, #1 + and r2, r0, #0xff + cmp r2, r1 + blo _021ED3B8 +_021ED3D8: + cmp r4, #6 + bne _021ED410 + cmp r1, r2 + bne _021ED448 + cmp r2, #0 + bne _021ED3FC + mov r0, #5 + bl FUN_021EB6F4 + b _021ED404 +_021ED3FC: + mov r0, #6 + bl FUN_021EB6F4 +_021ED404: + add sp, sp, #4 + mov r0, #0x11 + ldmia sp!, {r4, r5, pc} +_021ED410: + cmp r1, #0 + addeq sp, sp, #4 + moveq r0, r4 + ldmeqia sp!, {r4, r5, pc} + cmp r1, r2 + addeq sp, sp, #4 + moveq r0, r4 + ldmeqia sp!, {r4, r5, pc} + add r0, r5, r2, lsl #2 + ldrb r0, [r0, #0x446] + cmp r0, #0x14 + addlo sp, sp, #4 + movlo r0, r4 + ldmloia sp!, {r4, r5, pc} +_021ED448: + strb r2, [r5, #0xd13] + bl FUN_020A7820 + cmp r0, #1 + strneb r4, [r5, #0xd0e] + movne r4, #7 + mov r0, r4 + add sp, sp, #4 + ldmia sp!, {r4, r5, pc} + + arm_func_start FUN_021ED468 +FUN_021ED468: ; 0x021ED468 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #4 + mov r4, r1 + mov r5, r0 + cmp r4, #3 + beq _021ED494 + cmp r4, #4 + beq _021ED4F8 + cmp r4, #5 + beq _021ED504 + b _021ED524 +_021ED494: + ldrb r1, [r5, #0xd12] + cmp r1, #0 + bne _021ED4B0 + add r1, r5, #0xd00 + ldrh r1, [r1, #0x16] + cmp r1, #0 + beq _021ED4D4 +_021ED4B0: + mov r0, #1 + bl FUN_021ED17C + cmp r0, #0 + movne r4, #4 + bne _021ED524 + mov r0, r5 + bl FUN_021ED328 + mov r4, r0 + b _021ED524 +_021ED4D4: + ldrb r1, [r5, #0xd0b] + mov r1, r1, lsl #0x18 + mov r1, r1, lsr #0x1c + cmp r1, #1 + movhs r4, #6 + bhs _021ED524 + bl FUN_021ED798 + mov r4, r0 + b _021ED524 +_021ED4F8: + bl FUN_021ED328 + mov r4, r0 + b _021ED524 +_021ED504: + ldrb r1, [r5, #0xd0b] + mov r1, r1, lsl #0x18 + mov r1, r1, lsr #0x1c + cmp r1, #1 + movhs r4, #6 + bhs _021ED524 + bl FUN_021ED798 + mov r4, r0 +_021ED524: + mov r0, r4 + bl FUN_021ED8D4 + mov r0, r4 + add sp, sp, #4 + ldmia sp!, {r4, r5, pc} + + arm_func_start FUN_021ED538 +FUN_021ED538: ; 0x021ED538 + stmdb sp!, {r4, lr} + mov r4, r0 + bl OS_GetTick + ldr r3, [r4, #0xcb0] + ldr r2, [r4, #0xcb4] + subs r3, r0, r3 + sbc r0, r1, r2 + mov r1, r0, lsl #6 + ldr r2, _021ED650 ; =0x000082EA + orr r1, r1, r3, lsr #26 + mov r0, r3, lsl #6 + mov r3, #0 + bl _ll_udiv + cmp r1, #0 + cmpeq r0, #0x96 + bhs _021ED598 + ldrb r1, [r4, #0xd0f] + mov r0, #0x24 + mla r0, r1, r0, r4 + ldrb r0, [r0, #0x300] + mov r0, r0, lsl #0x1c + mov r0, r0, lsr #0x1c + cmp r0, #1 + bne _021ED648 +_021ED598: + ldrb r1, [r4, #0xd0f] + mov r0, #0x24 + add r3, r4, #0x300 + mul r2, r1, r0 + ldrb r0, [r3, r2] + bic r0, r0, #0xf + strb r0, [r3, r2] + ldrb r0, [r4, #0xd0f] + add r0, r0, #1 + strb r0, [r4, #0xd0f] + ldrb r1, [r4, #0xd10] + ldrb r0, [r4, #0xd0f] + cmp r1, r0 + bhi _021ED5F0 + ldrb r1, [r4, #0xd15] + mov r0, #0 + add r1, r1, #1 + strb r1, [r4, #0xd15] + strb r0, [r4, #0xd0f] + ldrb r0, [r4, #0xd15] + bl FUN_021ED9D0 + strb r0, [r4, #0xd11] +_021ED5F0: + add r0, r4, #0xd00 + ldrsb r0, [r0, #0x11] + cmp r0, #0 + bge _021ED618 + mov r2, #0 + mov r0, r4 + mov r1, #5 + strb r2, [r4, #0xd15] + bl FUN_021ED468 + ldmia sp!, {r4, pc} +_021ED618: + bl OS_GetTick + str r0, [r4, #0xcb0] + str r1, [r4, #0xcb4] + ldrb r3, [r4, #0xd0f] + add r1, r4, #0x304 + mov r0, #0x24 + add r2, r4, #0xd00 + mla r1, r3, r0, r1 + ldrsb r2, [r2, #0x11] + ldr r0, _021ED654 ; =0x020FF590 + mov r3, #0x300000 + bl FUN_021ED2FC +_021ED648: + mov r0, #5 + ldmia sp!, {r4, pc} + .align 2, 0 +_021ED650: .word 0x000082EA +_021ED654: .word 0x020FF590 + + arm_func_start FUN_021ED658 +FUN_021ED658: ; 0x021ED658 + stmdb sp!, {r4, lr} + mov r4, r0 + bl OS_GetTick + ldr r3, [r4, #0xcb0] + ldr r2, [r4, #0xcb4] + subs r3, r0, r3 + sbc r0, r1, r2 + mov r1, r0, lsl #6 + ldr r2, _021ED784 ; =0x000082EA + orr r1, r1, r3, lsr #26 + mov r0, r3, lsl #6 + mov r3, #0 + bl _ll_udiv + cmp r1, #0 + cmpeq r0, #0x96 + bhs _021ED6B4 + ldrb r0, [r4, #0xd0f] + add r0, r4, r0, lsl #2 + ldrb r0, [r0, #0x447] + mov r0, r0, lsl #0x18 + mov r0, r0, lsr #0x1f + cmp r0, #1 + bne _021ED77C +_021ED6B4: + ldr r0, _021ED788 ; =0x00000447 + ldrb r1, [r4, #0xd0f] + add r2, r4, r0 + ldrb r0, [r2, r1, lsl #2] + orr r0, r0, #0x80 + strb r0, [r2, r1, lsl #2] + ldrb r2, [r4, #0xd12] + ldrb r3, [r4, #0xd0f] + cmp r3, r2 + bhs _021ED714 + ldr r0, _021ED78C ; =0x00000D0F + add r1, r4, r0 +_021ED6E4: + add r0, r4, r3, lsl #2 + ldrb r0, [r0, #0x447] + mov r0, r0, lsl #0x18 + movs r0, r0, lsr #0x1f + beq _021ED714 + ldrb r0, [r1] + add r0, r0, #1 + strb r0, [r1] + ldrb r2, [r4, #0xd12] + ldrb r3, [r4, #0xd0f] + cmp r3, r2 + blo _021ED6E4 +_021ED714: + cmp r2, r3 + bhi _021ED734 + mov r2, #0 + mov r0, r4 + mov r1, #4 + strb r2, [r4, #0xd0f] + bl FUN_021ED468 + ldmia sp!, {r4, pc} +_021ED734: + bl OS_GetTick + str r0, [r4, #0xcb0] + str r1, [r4, #0xcb4] + ldrb r2, [r4, #0xd0f] + mov r0, #0xc0 + ldr r1, _021ED790 ; =0x00000474 + mul ip, r2, r0 + add r0, r4, ip + add r0, r0, #0x400 + ldrh r2, [r0, #0xa6] + ldr r0, _021ED794 ; =0x0000047C + add r3, r4, r1 + add r1, r4, r0 + add r0, r3, ip + add r1, r1, ip + sub r2, r2, #1 + mov r3, #0x300000 + bl FUN_021ED2FC +_021ED77C: + mov r0, #4 + ldmia sp!, {r4, pc} + .align 2, 0 +_021ED784: .word 0x000082EA +_021ED788: .word 0x00000447 +_021ED78C: .word 0x00000D0F +_021ED790: .word 0x00000474 +_021ED794: .word 0x0000047C + + arm_func_start FUN_021ED798 +FUN_021ED798: ; 0x021ED798 + stmdb sp!, {r4, lr} + mov r4, r0 + mov r0, #0 + strb r0, [r4, #0xd15] + ldrb r2, [r4, #0xd0b] + mov r1, r2, lsl #0x18 + mov r1, r1, lsr #0x1c + add r1, r1, #1 + and r1, r1, #0xff + bic r2, r2, #0xf0 + and r1, r1, #0xf + orr r1, r2, r1, lsl #4 + strb r1, [r4, #0xd0b] + bl FUN_021ED17C + mov r0, #1 + strb r0, [r4, #0xd11] + mov r0, #3 + ldmia sp!, {r4, pc} + + arm_func_start FUN_021ED7E0 +FUN_021ED7E0: ; 0x021ED7E0 + stmdb sp!, {r4, lr} + mov r4, r0 + bl OS_GetTick + ldr r3, [r4, #0xcb0] + ldr r2, [r4, #0xcb4] + subs r3, r0, r3 + sbc r0, r1, r2 + mov r1, r0, lsl #6 + ldr r2, _021ED878 ; =0x000082EA + orr r1, r1, r3, lsr #26 + mov r0, r3, lsl #6 + mov r3, #0 + bl _ll_udiv + cmp r1, #0 + cmpeq r0, #0x12c + blo _021ED870 + add r0, r4, #0xd00 + ldrsb r1, [r0, #0x11] + add r1, r1, #2 + strb r1, [r4, #0xd11] + ldrsb r0, [r0, #0x11] + cmp r0, #0xd + blt _021ED84C + mov r0, r4 + mov r1, #3 + bl FUN_021ED468 + ldmia sp!, {r4, pc} +_021ED84C: + bl OS_GetTick + str r0, [r4, #0xcb0] + str r1, [r4, #0xcb4] + add r0, r4, #0xd00 + ldrsb r2, [r0, #0x11] + ldr r0, _021ED87C ; =0x020FF590 + ldr r1, _021ED880 ; =0x020FF598 + mov r3, #0x200000 + bl FUN_021ED2FC +_021ED870: + mov r0, #3 + ldmia sp!, {r4, pc} + .align 2, 0 +_021ED878: .word 0x000082EA +_021ED87C: .word 0x020FF590 +_021ED880: .word 0x020FF598 + + arm_func_start FUN_021ED884 +FUN_021ED884: ; 0x021ED884 + stmdb sp!, {r4, lr} + mov r4, r0 + bl OS_GetTick + str r0, [r4, #0xcb0] + str r1, [r4, #0xcb4] + mov r0, #0 + strb r0, [r4, #0xd11] + bl OS_GetTick + str r0, [r4, #0xcb0] + str r1, [r4, #0xcb4] + add r0, r4, #0xd00 + ldrsb r2, [r0, #0x11] + ldr r0, _021ED8CC ; =0x020FF590 + ldr r1, _021ED8D0 ; =0x020FF598 + mov r3, #0x200000 + bl FUN_021ED2FC + mov r0, #3 + ldmia sp!, {r4, pc} + .align 2, 0 +_021ED8CC: .word 0x020FF590 +_021ED8D0: .word 0x020FF598 + + arm_func_start FUN_021ED8D4 +FUN_021ED8D4: ; 0x021ED8D4 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #4 + mov r5, r0 + mov r0, #0x10 + bl FUN_021EB798 + mov r4, r0 + cmp r5, #3 + beq _021ED90C + cmp r5, #4 + beq _021ED938 + cmp r5, #5 + beq _021ED988 + add sp, sp, #4 + ldmia sp!, {r4, r5, pc} +_021ED90C: + bl OS_GetTick + str r0, [r4, #0xcb0] + str r1, [r4, #0xcb4] + add r0, r4, #0xd00 + ldrsb r2, [r0, #0x11] + ldr r0, _021ED9C0 ; =0x020FF590 + ldr r1, _021ED9C4 ; =0x020FF598 + mov r3, #0x200000 + bl FUN_021ED2FC + add sp, sp, #4 + ldmia sp!, {r4, r5, pc} +_021ED938: + bl OS_GetTick + str r0, [r4, #0xcb0] + str r1, [r4, #0xcb4] + ldrb r2, [r4, #0xd0f] + mov r0, #0xc0 + ldr r1, _021ED9C8 ; =0x00000474 + mul ip, r2, r0 + add r0, r4, ip + add r0, r0, #0x400 + ldrh r2, [r0, #0xa6] + ldr r0, _021ED9CC ; =0x0000047C + add r3, r4, r1 + add r1, r4, r0 + add r0, r3, ip + add r1, r1, ip + sub r2, r2, #1 + mov r3, #0x300000 + bl FUN_021ED2FC + add sp, sp, #4 + ldmia sp!, {r4, r5, pc} +_021ED988: + bl OS_GetTick + str r0, [r4, #0xcb0] + str r1, [r4, #0xcb4] + ldrb r3, [r4, #0xd0f] + add r1, r4, #0x304 + mov r0, #0x24 + add r2, r4, #0xd00 + mla r1, r3, r0, r1 + ldrsb r2, [r2, #0x11] + ldr r0, _021ED9C0 ; =0x020FF590 + mov r3, #0x300000 + bl FUN_021ED2FC + add sp, sp, #4 + ldmia sp!, {r4, r5, pc} + .align 2, 0 +_021ED9C0: .word 0x020FF590 +_021ED9C4: .word 0x020FF598 +_021ED9C8: .word 0x00000474 +_021ED9CC: .word 0x0000047C + + arm_func_start FUN_021ED9D0 +FUN_021ED9D0: ; 0x021ED9D0 + stmdb sp!, {r4, lr} + mov r4, r0 + mov r0, #0x10 + bl FUN_021EB798 + add r0, r0, #0xd00 + ldrh r2, [r0, #0x16] + cmp r2, #0 + mvneq r0, #0 + ldmeqia sp!, {r4, pc} + mov ip, #0 + mov r3, ip + mov r1, #1 +_021EDA00: + mov r0, r1,lsl ip + ands r0, r2, r0 + beq _021EDA24 + cmp r3, r4 + moveq r0, ip, lsl #0x18 + moveq r0, r0, asr #0x18 + ldmeqia sp!, {r4, pc} + add r0, r3, #1 + and r3, r0, #0xff +_021EDA24: + add r0, ip, #1 + and ip, r0, #0xff + cmp ip, #0xd + blo _021EDA00 + mvn r0, #0 + ldmia sp!, {r4, pc} + + arm_func_start FUN_021EDA3C +FUN_021EDA3C: ; 0x021EDA3C + stmdb sp!, {r4, lr} + mov r4, r0 + mov r0, #0x10 + bl FUN_021EB798 + add r0, r0, #0xd00 + cmp r4, #0xd + movhi r4, #0xd + ldrh r3, [r0, #0x16] + sub r1, r4, #1 + mov r2, #1 + orr r1, r3, r2, lsl r1 + strh r1, [r0, #0x16] + ldmia sp!, {r4, pc} + + arm_func_start FUN_021EDA70 +FUN_021EDA70: ; 0x021EDA70 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #4 + mov r0, #0x10 + bl FUN_021EB798 + mov r5, r0 + bl FUN_021EB720 + mov r4, r0 + bl FUN_020A71F8 + cmp r4, #2 + bne _021EDAB0 + cmp r0, #3 + bne _021EDAB0 + mov r0, r5 + bl FUN_021ED884 + mov r4, r0 + b _021EDB38 +_021EDAB0: + cmp r4, #6 + bne _021EDACC + mov r0, r5 + mov r1, r4 + bl FUN_021ED388 + mov r4, r0 + b _021EDB38 +_021EDACC: + cmp r0, #3 + beq _021EDADC + cmp r0, #6 + bne _021EDB38 +_021EDADC: + mov r0, r5 + mov r1, r4 + bl FUN_021ED388 + mov r4, r0 + cmp r4, #7 + beq _021EDB38 + cmp r4, #3 + bne _021EDB0C + mov r0, r5 + bl FUN_021ED7E0 + mov r4, r0 + b _021EDB38 +_021EDB0C: + cmp r4, #4 + bne _021EDB24 + mov r0, r5 + bl FUN_021ED658 + mov r4, r0 + b _021EDB38 +_021EDB24: + cmp r4, #5 + bne _021EDB38 + mov r0, r5 + bl FUN_021ED538 + mov r4, r0 +_021EDB38: + mov r0, r4 + add sp, sp, #4 + ldmia sp!, {r4, r5, pc} + + arm_func_start FUN_021EDB44 +FUN_021EDB44: ; 0x021EDB44 + stmdb sp!, {r4, lr} + sub sp, sp, #0x10 + bl FUN_020A71F8 + mov r4, r0 + mov r0, #0x10 + bl FUN_021EB798 + cmp r4, #1 + bne _021EDBB0 + ldrb r1, [r0, #0xd0a] + mov r0, #0 + str r1, [sp] + str r0, [sp, #4] + str r0, [sp, #8] + str r0, [sp, #0xc] + bl FUN_021ED17C + ldr r1, _021EDBC8 ; =FUN_021EC44C + add r0, sp, #0 + bl FUN_020A7BD4 + cmp r0, #1 + beq _021EDB9C + cmp r0, #4 + blt _021EDBBC +_021EDB9C: + mov r0, #1 + bl FUN_021EB6F4 + add sp, sp, #0x10 + mov r0, #0x11 + ldmia sp!, {r4, pc} +_021EDBB0: + add sp, sp, #0x10 + mov r0, #1 + ldmia sp!, {r4, pc} +_021EDBBC: + mov r0, #2 + add sp, sp, #0x10 + ldmia sp!, {r4, pc} + .align 2, 0 +_021EDBC8: .word FUN_021EC44C + + arm_func_start FUN_021EDBCC +FUN_021EDBCC: ; 0x021EDBCC + stmdb sp!, {r4, lr} + sub sp, sp, #8 + mov r4, r0 + ldrb r0, [r4, #0xd0d] + cmp r0, #6 + addhs sp, sp, #8 + ldmhsia sp!, {r4, pc} + bl FUN_021EB6AC + add r4, r4, r0, lsl #8 + ldrb r0, [r4, #0xc0] + ldrb r2, [r4, #0xc8] + ldrb r1, [r4, #0xc9] + cmp r0, #0 + ldrb r3, [r4, #0xca] + add r1, r2, r1 + ldrb r2, [r4, #0xcb] + add r1, r3, r1 + addne sp, sp, #8 + add r0, r2, r1 + ldmneia sp!, {r4, pc} + cmp r0, #0 + addeq sp, sp, #8 + ldmeqia sp!, {r4, pc} + add r0, r4, #0xc8 + bl FUN_021EDCA8 + str r0, [sp] + add r0, r4, #0xcc + bl FUN_021EDCA8 + str r0, [sp, #4] + add r0, sp, #0 + add r1, sp, #4 + bl FUN_0209A594 + add sp, sp, #8 + ldmia sp!, {r4, pc} + + arm_func_start FUN_021EDC54 +FUN_021EDC54: ; 0x021EDC54 + rsb r0, r0, #0x20 + cmp r0, #0 + mvn r3, #0 + mov r1, #0 + ble _021EDC78 +_021EDC68: + add r1, r1, #1 + cmp r1, r0 + mov r3, r3, lsl #1 + blt _021EDC68 +_021EDC78: + mov r1, r3, lsr #0x18 + mov r0, r3, lsr #8 + mov r2, r3, lsl #8 + mov r3, r3, lsl #0x18 + and r1, r1, #0xff + and r0, r0, #0xff00 + and r2, r2, #0xff0000 + orr r0, r1, r0 + and r1, r3, #0xff000000 + orr r0, r2, r0 + orr r0, r1, r0 + bx lr + + arm_func_start FUN_021EDCA8 +FUN_021EDCA8: ; 0x021EDCA8 + ldrb r1, [r0] + ldrb r2, [r0, #1] + mov r3, #0 + orr r3, r3, r1, lsl #24 + ldrb r1, [r0, #2] + orr r2, r3, r2, lsl #16 + ldrb r0, [r0, #3] + orr r1, r2, r1, lsl #8 + orr r3, r1, r0 + mov r1, r3, lsr #0x18 + mov r0, r3, lsr #8 + mov r2, r3, lsl #8 + mov r3, r3, lsl #0x18 + and r1, r1, #0xff + and r0, r0, #0xff00 + and r2, r2, #0xff0000 + orr r0, r1, r0 + and r1, r3, #0xff000000 + orr r0, r2, r0 + orr r0, r1, r0 + bx lr + + arm_func_start FUN_021EDCFC +FUN_021EDCFC: ; 0x021EDCFC + stmdb sp!, {r4, r5, r6, lr} + mov r6, r0 + mov r4, r2 + mov r5, r1 + ldr r0, _021EDDB8 ; =0x0220BB2C + mov r1, r4 + mov r2, #0x58 + bl MI_CpuCopy8 + ldr r0, [r6] + str r0, [r4, #4] + ldr r0, [r6, #4] + str r0, [r4, #8] + ldrb r0, [r5, #0xd0d] + cmp r0, #6 + ldmhsia sp!, {r4, r5, r6, pc} + bl FUN_021EB6AC + add r5, r5, r0, lsl #8 + ldrb r0, [r5, #0xc0] + cmp r0, #0 + beq _021EDD94 + mov r0, #0 + str r0, [r4, #0xc] + add r0, r5, #0xc0 + bl FUN_021EDCA8 + str r0, [r4, #0x10] + ldrb r0, [r5, #0xd0] + bl FUN_021EDC54 + str r0, [r4, #0x14] + add r0, r5, #0xc4 + bl FUN_021EDCA8 + str r0, [r4, #0x18] + add r0, r5, #0xc8 + bl FUN_021EDCA8 + str r0, [r4, #0x1c] + add r0, r5, #0xcc + bl FUN_021EDCA8 + str r0, [r4, #0x20] + ldmia sp!, {r4, r5, r6, pc} +_021EDD94: + mov r0, #1 + str r0, [r4, #0xc] + mov r0, #0 + str r0, [r4, #0x10] + str r0, [r4, #0x14] + str r0, [r4, #0x18] + str r0, [r4, #0x1c] + str r0, [r4, #0x20] + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +_021EDDB8: .word 0x0220BB2C + + arm_func_start FUN_021EDDBC +FUN_021EDDBC: ; 0x021EDDBC + stmdb sp!, {lr} + sub sp, sp, #4 + bl FUN_02099A94 + cmp r0, #0 + addne sp, sp, #4 + movne r0, #0xb + ldmneia sp!, {pc} + bl THUNK_FUN_02099BC8 + cmp r0, #0 + beq _021EDDF0 + mvn r1, #0x26 + cmp r0, r1 + bne _021EDDFC +_021EDDF0: + add sp, sp, #4 + mov r0, #9 + ldmfd sp!, {pc} +_021EDDFC: + mov r0, #0xb + add sp, sp, #4 + ldmfd sp!, {pc} + + arm_func_start FUN_021EDE08 +FUN_021EDE08: ; 0x021EDE08 + stmdb sp!, {lr} + sub sp, sp, #4 + ldrb r0, [r0, #0xd0d] + bl FUN_021EB6BC + mov r0, #0x10 + add sp, sp, #4 + ldmfd sp!, {pc} + + arm_func_start FUN_021EDE24 +FUN_021EDE24: ; 0x021EDE24 + stmdb sp!, {r4, r5, r6, lr} + mov r6, r0 + mov r0, #1 + bl FUN_021EB798 + mov r4, r0 + bl FUN_021DC7AC + movs r5, r0 + beq _021EDE88 + ldrb r0, [r6, #0xd0d] + bl FUN_021EB6AC + ldrb r1, [r4, #0x15] + cmp r1, r0 + bne _021EDE60 + bl FUN_021DC794 + str r0, [r4, #0x10] +_021EDE60: + bl FUN_021DC870 + cmp r5, #0xb + moveq r0, #0xf + ldmeqia sp!, {r4, r5, r6, pc} + ldrb r1, [r6, #0xd13] + mov r2, #1 + mov r0, #0xb + add r1, r6, r1, lsl #2 + strb r2, [r1, #0x444] + ldmia sp!, {r4, r5, r6, pc} +_021EDE88: + mov r0, #0xe + ldmia sp!, {r4, r5, r6, pc} + + arm_func_start FUN_021EDE90 +FUN_021EDE90: ; 0x021EDE90 + stmdb sp!, {lr} + sub sp, sp, #4 + mov r0, #8 + bl FUN_021EB798 + bl FUN_021DC970 + cmp r0, #0 + addeq sp, sp, #4 + moveq r0, #0xe + ldmeqia sp!, {pc} + mov r0, #3 + bl FUN_021EB6F4 + mov r0, #0x11 + add sp, sp, #4 + ldmfd sp!, {pc} + + arm_func_start FUN_021EDEC8 +FUN_021EDEC8: ; 0x021EDEC8 + stmdb sp!, {r4, lr} + mov r4, r0 + bl FUN_0209A60C + cmp r0, #0 + beq _021EDF00 + mov r0, r4 + bl FUN_021EDBCC + ldrb r0, [r4, #0xd0c] + mov r0, r0, lsl #0x1a + mov r0, r0, lsr #0x1e + cmp r0, #1 + moveq r0, #0xf + movne r0, #0xd + ldmia sp!, {r4, pc} +_021EDF00: + bl OS_GetTick + ldr r3, [r4, #0xcb0] + ldr r2, [r4, #0xcb4] + subs r3, r0, r3 + sbc r0, r1, r2 + mov r1, r0, lsl #6 + ldr r2, _021EDF54 ; =0x01FF6210 + orr r1, r1, r3, lsr #26 + mov r0, r3, lsl #6 + mov r3, #0 + bl _ll_udiv + cmp r1, #0 + cmpeq r0, #0xa + movlo r0, #0xc + ldmloia sp!, {r4, pc} + ldrb r1, [r4, #0xd13] + mov r2, #1 + mov r0, #0xb + add r1, r4, r1, lsl #2 + strb r2, [r1, #0x444] + ldmia sp!, {r4, pc} + .align 2, 0 +_021EDF54: .word 0x01FF6210 + + arm_func_start FUN_021EDF58 +FUN_021EDF58: ; 0x021EDF58 + stmdb sp!, {r4, r5, r6, lr} + mov r6, r0 + mov r0, #1 + bl FUN_021EB798 + mov r5, r0 + mov r0, #4 + bl FUN_021EB798 + mov r4, r0 + mov r0, r5 + mov r1, r6 + mov r2, r4 + bl FUN_021EDCFC + ldr r1, _021EDFB8 ; =0x021C8CC4 + mov r2, #4 + mov r0, r4 + str r2, [r1] + bl FUN_0209A2C0 + cmp r0, #0 + moveq r0, #0xc + ldmeqia sp!, {r4, r5, r6, pc} + mov r0, #2 + bl FUN_021EB6F4 + mov r0, #0x11 + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +_021EDFB8: .word 0x021C8CC4 + + arm_func_start FUN_021EDFBC +FUN_021EDFBC: ; 0x021EDFBC + stmdb sp!, {r4, r5, lr} + sub sp, sp, #4 + bl FUN_021EB720 + mov r5, r0 + mov r0, #0x10 + bl FUN_021EB798 + mov r4, r0 + bl FUN_020A71F8 + cmp r0, #9 + bne _021EE064 + sub r0, r5, #0xa + cmp r0, #5 + addls pc, pc, r0, lsl #2 + b _021EE0B4 +_021EDFF4: ; jump table + b _021EE00C ; case 0 + b _021EE058 ; case 1 + b _021EE01C ; case 2 + b _021EE02C ; case 3 + b _021EE038 ; case 4 + b _021EE048 ; case 5 +_021EE00C: + mov r0, r4 + bl FUN_021EDF58 + mov r5, r0 + b _021EE0B4 +_021EE01C: + mov r0, r4 + bl FUN_021EDEC8 + mov r5, r0 + b _021EE0B4 +_021EE02C: + bl FUN_021EDE90 + mov r5, r0 + b _021EE0B4 +_021EE038: + mov r0, r4 + bl FUN_021EDE24 + mov r5, r0 + b _021EE0B4 +_021EE048: + mov r0, r4 + bl FUN_021EDE08 + mov r5, r0 + b _021EE0B4 +_021EE058: + bl FUN_021EDDBC + mov r5, r0 + b _021EE0B4 +_021EE064: + cmp r5, #0xb + beq _021EE08C + cmp r5, #0xe + beq _021EE098 + cmp r5, #0xf + bne _021EE0A0 + mov r0, r4 + bl FUN_021EDE08 + mov r5, r0 + b _021EE0B4 +_021EE08C: + bl FUN_021EDDBC + mov r5, r0 + b _021EE0B4 +_021EE098: + bl FUN_021DC7F0 + bl FUN_021DC870 +_021EE0A0: + ldrb r0, [r4, #0xd13] + mov r1, #2 + mov r5, #0xb + add r0, r4, r0, lsl #2 + strb r1, [r0, #0x444] +_021EE0B4: + mov r0, r5 + add sp, sp, #4 + ldmia sp!, {r4, r5, pc} + + arm_func_start FUN_021EE0C0 +FUN_021EE0C0: ; 0x021EE0C0 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x1c + mov r4, #3 + mul r4, r2, r4 + mov r4, r4, lsr #2 + mov sl, r0 + mov r0, r4 + cmp r3, r0 + andhs fp, r2, #3 + subhs r0, r2, fp + str r4, [sp, #4] + mov sb, r1 + strhs r0, [sp] + bhs _021EE104 + add sp, sp, #0x1c + mvn r0, #0 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +_021EE104: + cmp r0, #0 + mov r7, #0 + ble _021EE190 + mov r5, r7 + add r4, sp, #0x10 + str r7, [sp, #0xc] + str r7, [sp, #8] +_021EE120: + ldr r8, [sp, #8] + mov r6, r8 +_021EE128: + add r0, r7, r6 + ldrb r0, [sl, r0] + bl FUN_021EE234 + rsb r2, r6, #3 + mov r1, #6 + mul r1, r2, r1 + orr r8, r8, r0, lsl r1 + add r6, r6, #1 + cmp r6, #4 + blt _021EE128 + mov r0, #3 + mul r1, r5, r0 + ldr r2, [sp, #0xc] + str r8, [sp, #0x10] +_021EE160: + rsb r0, r2, #2 + ldrb r0, [r4, r0] + add r2, r2, #1 + cmp r2, #3 + strb r0, [sb, r1] + add r1, r1, #1 + blt _021EE160 + ldr r0, [sp] + add r7, r7, #4 + cmp r7, r0 + add r5, r5, #1 + blt _021EE120 +_021EE190: + cmp fp, #0 + beq _021EE228 + mov r5, #0 + mov r4, r5 + str r5, [sp, #0x14] + cmp fp, #0 + ble _021EE1E4 + mov r6, #6 +_021EE1B0: + ldr r0, [sp] + add r0, r0, r4 + ldrb r0, [sl, r0] + bl FUN_021EE234 + rsb r1, r4, #3 + mul r2, r1, r6 + orr r5, r5, r0, lsl r2 + ldr r0, [sp, #0x14] + add r4, r4, #1 + orr r0, r0, r5 + cmp r4, fp + str r0, [sp, #0x14] + blt _021EE1B0 +_021EE1E4: + cmp fp, #0 + mov r2, #0 + ble _021EE228 + ldr r0, [sp] + mov r1, #3 + mul r1, r0, r1 + mov r0, r1, asr #1 + add r0, r1, r0, lsr #30 + mov r3, r0, asr #2 + add r1, sp, #0x14 +_021EE20C: + rsb r0, r2, #2 + ldrb r0, [r1, r0] + add r2, r2, #1 + cmp r2, fp + strb r0, [sb, r3] + add r3, r3, #1 + blt _021EE20C +_021EE228: + ldr r0, [sp, #4] + add sp, sp, #0x1c + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + + arm_func_start FUN_021EE234 +FUN_021EE234: ; 0x021EE234 + cmp r0, #0x41 + blo _021EE248 + cmp r0, #0x5a + subls r0, r0, #0x41 + bxls lr +_021EE248: + cmp r0, #0x61 + blo _021EE260 + cmp r0, #0x7a + subls r0, r0, #0x61 + addls r0, r0, #0x1a + bxls lr +_021EE260: + cmp r0, #0x30 + blo _021EE278 + cmp r0, #0x39 + subls r0, r0, #0x30 + addls r0, r0, #0x34 + bxls lr +_021EE278: + cmp r0, #0x2b + moveq r0, #0x3e + bxeq lr + cmp r0, #0x2f + moveq r0, #0x3f + bxeq lr + cmp r0, #0x3d + movne r0, #1 + moveq r0, #0 + rsb r0, r0, #0 + bx lr + + arm_func_start FUN_021EE2A4 +FUN_021EE2A4: ; 0x021EE2A4 + stmdb sp!, {r4, lr} + sub sp, sp, #0x10 + mov r4, r1 + mov r1, #0 + ldr lr, _021EE454 ; =0x92492493 + ldr ip, _021EE458 ; =0x00000007 +_021EE2BC: + smull r2, r3, lr, r1 + add r3, r1, r3 + mov r3, r3, asr #2 + mov r2, r1, lsr #0x1f + add r3, r2, r3 + smull r2, r3, ip, r3 + sub r3, r1, r2 + add r2, r3, #0xd + ldrb r3, [r0, r1] + ldrb r2, [r0, r2] + eor r2, r3, r2 + strb r2, [r4, r1] + add r1, r1, #1 + cmp r1, #0xd + blt _021EE2BC + mov ip, #0 +_021EE2FC: + add r3, ip, #3 + add r1, ip, #0xd + ldrb r2, [r4, r3] + ldrb r1, [r0, r1] + add ip, ip, #1 + cmp ip, #7 + eor r1, r2, r1 + strb r1, [r4, r3] + blt _021EE2FC + ldr r0, _021EE45C ; =0x0220D4DC + mov r3, #0 +_021EE328: + ldr r1, [r0] + ldrb r2, [r4, r3] + ldrsb r1, [r1, r3] + eor r1, r2, r1 + strb r1, [r4, r3] + add r3, r3, #1 + cmp r3, #0xd + blt _021EE328 + add r1, sp, #0 + mov r0, r4 + mov r2, #0xd + bl MI_CpuCopy8 + ldr r3, _021EE460 ; =0x0220BB84 + add ip, sp, #0 + mov r2, #0 +_021EE364: + ldrb r1, [ip] + ldrb r0, [r3] + add r2, r2, #1 + cmp r2, #0xd + strb r1, [r4, r0] + add ip, ip, #1 + add r3, r3, #1 + blt _021EE364 + ldr r0, _021EE464 ; =0x0220D4E0 + mov r3, #0 +_021EE38C: + ldr r1, [r0] + ldrb r2, [r4, r3] + ldrsb r1, [r1, r3] + eor r1, r2, r1 + strb r1, [r4, r3] + add r3, r3, #1 + cmp r3, #0xd + blt _021EE38C + ldr r2, _021EE468 ; =0x0220BB94 + mov ip, #0 +_021EE3B4: + ldrb r3, [r4, ip] + mov r0, r3, asr #4 + and r1, r0, #0xf + and r0, r3, #0xf + ldrb r1, [r2, r1] + ldrb r0, [r2, r0] + orr r0, r0, r1, lsl #4 + strb r0, [r4, ip] + add ip, ip, #1 + cmp ip, #0xd + blt _021EE3B4 + mov r0, #0 +_021EE3E4: + add lr, r0, #6 + ldrb r2, [r4, r0] + ldrb r1, [r4, lr] + add ip, r0, #9 + add r3, r0, #3 + eor r1, r2, r1 + strb r1, [r4, r0] + ldrb r2, [r4, r3] + ldrb r1, [r4, ip] + eor r1, r2, r1 + strb r1, [r4, r3] + ldrb r2, [r4, lr] + ldrb r1, [r4, r3] + eor r1, r2, r1 + strb r1, [r4, lr] + ldrb r2, [r4, ip] + ldrb r1, [r4, r0] + eor r1, r2, r1 + strb r1, [r4, ip] + ldrb r1, [r4, r0] + ldrb r2, [r4, #0xc] + add r0, r0, #1 + cmp r0, #3 + eor r1, r2, r1 + strb r1, [r4, #0xc] + blt _021EE3E4 + add sp, sp, #0x10 + ldmia sp!, {r4, pc} + .align 2, 0 +_021EE454: .word 0x92492493 +_021EE458: .word 0x00000007 +_021EE45C: .word 0x0220D4DC +_021EE460: .word 0x0220BB84 +_021EE464: .word 0x0220D4E0 +_021EE468: .word 0x0220BB94 + + arm_func_start FUN_021EE46C +FUN_021EE46C: ; 0x021EE46C + stmdb sp!, {r4, r5, lr} + sub sp, sp, #0x6c + mov r5, r0 + add r0, sp, #0x14 + mov r4, r1 + bl DGT_Hash1Reset + add r0, sp, #0x14 + mov r1, r5 + mov r2, #0x18 + bl DGT_Hash1SetSource + add r0, sp, #0 + add r1, sp, #0x14 + bl DGT_Hash1GetDigest_R + add r0, sp, #3 + mov r1, r4 + mov r2, #0xd + bl MI_CpuCopy8 + add sp, sp, #0x6c + ldmia sp!, {r4, r5, pc} + + arm_func_start FUN_021EE4B8 +FUN_021EE4B8: ; 0x021EE4B8 + stmdb sp!, {r4, r5, r6, r7, lr} + sub sp, sp, #0x1c + ldr lr, _021EE5AC ; =0x0220BBA4 + add ip, sp, #0 + mov r4, r1 + mov r3, #0xc +_021EE4D0: + ldrb r2, [lr], #1 + ldrb r1, [lr], #1 + subs r3, r3, #1 + strb r2, [ip], #1 + strb r1, [ip], #1 + bne _021EE4D0 + mov r1, r4 + mov r2, #0x20 + mov r3, #0x18 + bl FUN_021EE0C0 + mov r3, #0 + ldr r0, _021EE5B0 ; =0x0220D4E4 +_021EE500: + ldr r1, [r0] + ldrb r2, [r4, r3] + ldrsb r1, [r1, r3] + eor r1, r2, r1 + strb r1, [r4, r3] + add r3, r3, #1 + cmp r3, #0x18 + blt _021EE500 + mov lr, #0 + add ip, sp, #0 + mov r1, #0xff +_021EE52C: + and r7, lr, #0xff + ldrb r0, [ip, r7] + mov r6, r7 + ldrb r5, [r4, lr] + cmp r0, #0xff + beq _021EE570 +_021EE544: + add r3, ip, r6 + ldrb r6, [ip, r6] + ldrb r0, [ip, r7] + ldrb r2, [r4, r6] + mov r7, r6 + strb r5, [r4, r0] + strb r1, [r3] + ldrb r0, [ip, r6] + mov r5, r2 + cmp r0, #0xff + bne _021EE544 +_021EE570: + add lr, lr, #1 + cmp lr, #0x18 + blt _021EE52C + ldr r0, _021EE5B4 ; =0x0220D4D8 + mov r3, #0 +_021EE584: + ldr r1, [r0] + ldrb r2, [r4, r3] + ldrsb r1, [r1, r3] + eor r1, r2, r1 + strb r1, [r4, r3] + add r3, r3, #1 + cmp r3, #0x18 + blt _021EE584 + add sp, sp, #0x1c + ldmia sp!, {r4, r5, r6, r7, pc} + .align 2, 0 +_021EE5AC: .word 0x0220BBA4 +_021EE5B0: .word 0x0220D4E4 +_021EE5B4: .word 0x0220D4D8 + + arm_func_start FUN_021EE5B8 +FUN_021EE5B8: ; 0x021EE5B8 + ldr ip, _021EE5C4 ; =FUN_021EE2A4 + add r0, r0, #0xc + bx ip + .align 2, 0 +_021EE5C4: .word FUN_021EE2A4 + + arm_func_start FUN_021EE5C8 +FUN_021EE5C8: ; 0x021EE5C8 + stmdb sp!, {lr} + sub sp, sp, #4 + ldr r1, _021EE5F0 ; =0x0220D540 + mov r2, #8 + bl memcmp + cmp r0, #0 + moveq r0, #1 + movne r0, #0 + add sp, sp, #4 + ldmfd sp!, {pc} + .align 2, 0 +_021EE5F0: .word 0x0220D540 + + arm_func_start FUN_021EE5F4 +FUN_021EE5F4: ; 0x021EE5F4 + stmdb sp!, {r4, lr} + sub sp, sp, #0x18 + mov r4, r1 + add r1, sp, #0 + bl FUN_021EE4B8 + ldr r1, _021EE63C ; =0x0220D54C + add r0, sp, #0 + mov r2, #8 + bl memcmp + cmp r0, #0 + addne sp, sp, #0x18 + ldmneia sp!, {r4, pc} + add r0, sp, #8 + mov r1, r4 + mov r2, #0xa + bl MI_CpuCopy8 + add sp, sp, #0x18 + ldmia sp!, {r4, pc} + .align 2, 0 +_021EE63C: .word 0x0220D54C + + arm_func_start FUN_021EE640 +FUN_021EE640: ; 0x021EE640 + stmdb sp!, {r4, lr} + sub sp, sp, #0x18 + mov r4, r1 + add r1, sp, #0 + bl FUN_021EE4B8 + add r0, sp, #0 + mov r1, r4 + bl FUN_021EE46C + add sp, sp, #0x18 + ldmia sp!, {r4, pc} + + arm_func_start FUN_021EE668 +FUN_021EE668: ; 0x021EE668 + stmdb sp!, {lr} + sub sp, sp, #0x1c + add r1, sp, #0 + bl FUN_021EE4B8 + ldr r1, _021EE69C ; =0x0220D54C + add r0, sp, #0 + mov r2, #8 + bl memcmp + cmp r0, #0 + moveq r0, #1 + movne r0, #0 + add sp, sp, #0x1c + ldmfd sp!, {pc} + .align 2, 0 +_021EE69C: .word 0x0220D54C + + arm_func_start FUN_021EE6A0 +FUN_021EE6A0: ; 0x021EE6A0 + stmdb sp!, {lr} + sub sp, sp, #0x5c + ldr r0, _021EE7D4 ; =0x02210EE0 + mov r2, #8 + ldr r0, [r0] + mvn r1, #0 + cmp r0, r1 + ldreq r1, _021EE7D8 ; =0x02210E5C + moveq r0, #1 + str r2, [sp, #0x10] + streq r0, [r1] + addeq sp, sp, #0x5c + ldmeqia sp!, {pc} + bl FUN_021EFF2C + cmp r0, #0 + beq _021EE774 + add r0, sp, #8 + str r0, [sp] + add r1, sp, #0x10 + str r1, [sp, #4] + ldr r0, _021EE7D4 ; =0x02210EE0 + add r1, sp, #0x18 + ldr r0, [r0] + mov r2, #0x40 + mov r3, #0 + bl FUN_021EFC40 + mov r1, r0 + add r0, sp, #0x18 + add r2, sp, #8 + add r3, sp, #0x14 + bl FUN_021EE7DC + cmp r0, #0 + bne _021EE774 + ldr r0, _021EE7D4 ; =0x02210EE0 + ldr r0, [r0] + bl FUN_021EFD9C + ldr r1, [sp, #0x14] + ands r0, r1, #1 + ldrne r0, _021EE7D8 ; =0x02210E5C + movne r1, #2 + strne r1, [r0] + bne _021EE764 + ands r0, r1, #2 + ldrne r0, _021EE7D8 ; =0x02210E5C + movne r1, #3 + strne r1, [r0] + ldreq r0, _021EE7D8 ; =0x02210E5C + moveq r1, #1 + streq r1, [r0] +_021EE764: + ldr r0, _021EE7D8 ; =0x02210E5C + add sp, sp, #0x5c + ldr r0, [r0] + ldmfd sp!, {pc} +_021EE774: + bl FUN_021F025C + ldr r1, _021EE7D4 ; =0x02210EE0 + ldr r2, [r1, #0x50] + add r2, r2, #0x7d0 + cmp r0, r2 + bls _021EE7C8 + ldr r0, [r1, #0x54] + cmp r0, #1 + bne _021EE7B4 + ldr r0, [r1] + bl FUN_021EFD9C + ldr r1, _021EE7D8 ; =0x02210E5C + mov r0, #1 + str r0, [r1] + add sp, sp, #0x5c + ldmfd sp!, {pc} +_021EE7B4: + bl FUN_021EE990 + ldr r0, _021EE7D4 ; =0x02210EE0 + ldr r1, [r0, #0x54] + add r1, r1, #1 + str r1, [r0, #0x54] +_021EE7C8: + mov r0, #0 + add sp, sp, #0x5c + ldmfd sp!, {pc} + .align 2, 0 +_021EE7D4: .word 0x02210EE0 +_021EE7D8: .word 0x02210E5C + + arm_func_start FUN_021EE7DC +FUN_021EE7DC: ; 0x021EE7DC + stmdb sp!, {r4, r5, r6, lr} + mov r5, r0 + cmp r1, #7 + mov r6, r2 + mov r4, r3 + movlt r0, #1 + ldmltia sp!, {r4, r5, r6, pc} + ldr r1, _021EE88C ; =0x02210EE8 + add r0, r6, #4 + mov r2, #4 + bl memcmp + cmp r0, #0 + movne r0, #1 + ldmneia sp!, {r4, r5, r6, pc} + ldr r0, _021EE890 ; =0x02210EE0 + ldrh r1, [r6, #2] + ldrh r0, [r0, #6] + cmp r1, r0 + movne r0, #1 + ldmneia sp!, {r4, r5, r6, pc} + ldr r1, _021EE894 ; =0x0220D558 + mov r0, r5 + mov r2, #3 + bl memcmp + cmp r0, #0 + movne r0, #1 + ldmneia sp!, {r4, r5, r6, pc} + ldrsb r2, [r5, #3] + ldrsb r0, [r5, #4] + ldrsb r1, [r5, #5] + mov r3, r2, lsl #0x18 + mov r2, r0, lsl #0x10 + ldrsb r0, [r5, #6] + mov r1, r1, lsl #8 + and r3, r3, #0xff000000 + and r2, r2, #0xff0000 + orr r2, r3, r2 + and r1, r1, #0xff00 + orr r1, r2, r1 + and r0, r0, #0xff + orr r0, r1, r0 + str r0, [r4] + mov r0, #0 + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +_021EE88C: .word 0x02210EE8 +_021EE890: .word 0x02210EE0 +_021EE894: .word 0x0220D558 + + arm_func_start FUN_021EE898 +FUN_021EE898: ; 0x021EE898 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #0x44 + mov r4, r0 + ldr r0, _021EE974 ; =0x02210EA0 + mov r1, r4 + bl strcpy + ldr r0, _021EE978 ; =0x02210EE0 + mvn r1, #0 + str r1, [r0] + bl FUN_021F024C + ldr r0, _021EE97C ; =0x02210E60 + ldrsb r5, [r0] + cmp r5, #0 + bne _021EE8E0 + ldr r1, _021EE980 ; =0x0220D55C + add r0, sp, #0 + mov r2, r4 + bl sprintf +_021EE8E0: + cmp r5, #0 + ldrne r0, _021EE97C ; =0x02210E60 + ldr r1, _021EE984 ; =0x00006CFC + ldr r2, _021EE988 ; =0x02210EE4 + addeq r0, sp, #0 + bl FUN_021EE9E0 + cmp r0, #0 + addeq sp, sp, #0x44 + ldmeqia sp!, {r4, r5, pc} + mov r0, #2 + mov r1, r0 + mov r2, #0 + bl FUN_021EFDB8 + ldr r2, _021EE978 ; =0x02210EE0 + mvn r1, #0 + cmp r0, r1 + str r0, [r2] + addeq sp, sp, #0x44 + ldmeqia sp!, {r4, r5, pc} + mov r1, #9 + mov r0, r4 + strb r1, [r2, #0xc] + bl strlen + mov r5, r0 + ldr r0, _021EE98C ; =0x02210EF1 + mov r1, r4 + add r2, r5, #1 + bl memcpy + ldr r0, _021EE978 ; =0x02210EE0 + add r1, r5, #6 + str r1, [r0, #0x4c] + bl FUN_021EE990 + ldr r0, _021EE978 ; =0x02210EE0 + mov r1, #0 + str r1, [r0, #0x54] + add sp, sp, #0x44 + ldmia sp!, {r4, r5, pc} + .align 2, 0 +_021EE974: .word 0x02210EA0 +_021EE978: .word 0x02210EE0 +_021EE97C: .word 0x02210E60 +_021EE980: .word 0x0220D55C +_021EE984: .word 0x00006CFC +_021EE988: .word 0x02210EE4 +_021EE98C: .word 0x02210EF1 + + arm_func_start FUN_021EE990 +FUN_021EE990: ; 0x021EE990 + stmdb sp!, {lr} + sub sp, sp, #0xc + ldr r1, _021EE9D4 ; =0x02210EE4 + mov r0, #8 + str r1, [sp] + ldr r1, _021EE9D8 ; =0x02210EE0 + str r0, [sp, #4] + ldr r0, [r1] + ldr r2, [r1, #0x4c] + ldr r1, _021EE9DC ; =0x02210EEC + mov r3, #0 + bl FUN_021EFBD4 + bl FUN_021F025C + ldr r1, _021EE9D8 ; =0x02210EE0 + str r0, [r1, #0x50] + add sp, sp, #0xc + ldmfd sp!, {pc} + .align 2, 0 +_021EE9D4: .word 0x02210EE4 +_021EE9D8: .word 0x02210EE0 +_021EE9DC: .word 0x02210EEC + + arm_func_start FUN_021EE9E0 +FUN_021EE9E0: ; 0x021EE9E0 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #4 + mov r1, r1, lsl #0x10 + mov r1, r1, lsr #0x10 + mov r3, r1, asr #8 + mov r1, r1, lsl #8 + mov r4, r2 + mov ip, #2 + and r2, r3, #0xff + and r1, r1, #0xff00 + strb ip, [r4, #1] + orr r1, r2, r1 + strh r1, [r4, #2] + mov r5, r0 + bl FUN_021EFB38 + str r0, [r4, #4] + ldr r1, [r4, #4] + mvn r0, #0 + cmp r1, r0 + bne _021EEA58 + mov r0, r5 + bl FUN_0209A6EC + cmp r0, #0 + addeq sp, sp, #4 + moveq r0, #0 + ldmeqia sp!, {r4, r5, pc} + ldr r0, [r0, #0xc] + ldr r0, [r0] + ldr r0, [r0] + str r0, [r4, #4] +_021EEA58: + mov r0, #1 + add sp, sp, #4 + ldmia sp!, {r4, r5, pc} + + arm_func_start FUN_021EEA64 +FUN_021EEA64: ; 0x021EEA64 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #4 + ldr r7, [sp, #0x2c] + mov r6, #0 + str r0, [sp] + mov sl, r1 + mov sb, r3 + str r6, [r7] + subs r5, r2, #1 + ldr r8, [sp, #0x28] + bmi _021EEAC4 + mov fp, #1 +_021EEA94: + add r0, r6, r5 + mov r4, r0, asr #1 + mla r0, r4, sb, sl + ldr r1, [sp] + blx r8 + cmp r0, #0 + streq fp, [r7] + cmp r0, #0 + addlt r6, r4, #1 + subge r5, r4, #1 + cmp r6, r5 + ble _021EEA94 +_021EEAC4: + mla r0, r6, sb, sl + add sp, sp, #4 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + + arm_func_start FUN_021EEAD0 +FUN_021EEAD0: ; 0x021EEAD0 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} + mov r8, r2 + mov sl, r0 + mov sb, r1 + mov r7, r3 + cmp r8, #0 + ldr r6, [sp, #0x20] + mov r5, #0 + ble _021EEB20 + mov r4, r5 +_021EEAF8: + mov r0, sl + add r1, sb, r4 + blx r6 + cmp r0, #0 + mlaeq r0, r7, r5, sb + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + add r5, r5, #1 + cmp r5, r8 + add r4, r4, r7 + blt _021EEAF8 +_021EEB20: + mov r0, #0 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + + arm_func_start FUN_021EEB28 +FUN_021EEB28: ; 0x021EEB28 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #4 + mov r5, r0 + bl FUN_021EF06C + subs r4, r0, #1 + addmi sp, sp, #4 + ldmmiia sp!, {r4, r5, pc} +_021EEB44: + mov r0, r5 + mov r1, r4 + bl FUN_021EED84 + subs r4, r4, #1 + bpl _021EEB44 + add sp, sp, #4 + ldmia sp!, {r4, r5, pc} + + arm_func_start FUN_021EEB60 +FUN_021EEB60: ; 0x021EEB60 + stmdb sp!, {r4, r5, r6, r7, r8, lr} + movs r7, r1 + mov r8, r0 + mov r6, r2 + bne _021EEB88 + ldr r0, _021EEBC8 ; =0x0220D580 + ldr r1, _021EEBCC ; =0x0220D584 + ldr r3, _021EEBD0 ; =0x00000121 + mov r2, #0 + bl __msl_assertion_failed +_021EEB88: + ldr r0, [r8] + subs r5, r0, #1 + bmi _021EEBC0 +_021EEB94: + mov r0, r8 + mov r1, r5 + bl FUN_021EEFFC + mov r1, r6 + mov r4, r0 + blx r7 + cmp r0, #0 + moveq r0, r4 + ldmeqia sp!, {r4, r5, r6, r7, r8, pc} + subs r5, r5, #1 + bpl _021EEB94 +_021EEBC0: + mov r0, #0 + ldmia sp!, {r4, r5, r6, r7, r8, pc} + .align 2, 0 +_021EEBC8: .word 0x0220D580 +_021EEBCC: .word 0x0220D584 +_021EEBD0: .word 0x00000121 + + arm_func_start FUN_021EEBD4 +FUN_021EEBD4: ; 0x021EEBD4 + stmdb sp!, {r4, r5, r6, r7, lr} + sub sp, sp, #4 + movs r6, r1 + mov r7, r0 + mov r5, r2 + bne _021EEC00 + ldr r0, _021EEC34 ; =0x0220D580 + ldr r1, _021EEC38 ; =0x0220D584 + mov r2, #0 + mov r3, #0x104 + bl __msl_assertion_failed +_021EEC00: + ldr r0, [r7] + subs r4, r0, #1 + addmi sp, sp, #4 + ldmmiia sp!, {r4, r5, r6, r7, pc} +_021EEC10: + mov r0, r7 + mov r1, r4 + bl FUN_021EEFFC + mov r1, r5 + blx r6 + subs r4, r4, #1 + bpl _021EEC10 + add sp, sp, #4 + ldmia sp!, {r4, r5, r6, r7, pc} + .align 2, 0 +_021EEC34: .word 0x0220D580 +_021EEC38: .word 0x0220D584 + + arm_func_start FUN_021EEC3C +FUN_021EEC3C: ; 0x021EEC3C + stmdb sp!, {r4, r5, r6, r7, r8, lr} + sub sp, sp, #0x10 + mov ip, #1 + movs r7, r0 + mov r6, r1 + mov r5, r2 + mov r4, r3 + str ip, [sp, #8] + beq _021EEC6C + ldr r8, [r7] + cmp r8, #0 + bne _021EEC78 +_021EEC6C: + add sp, sp, #0x10 + mvn r0, #0 + ldmia sp!, {r4, r5, r6, r7, r8, pc} +_021EEC78: + ldr r1, [sp, #0x28] + cmp r1, #0 + beq _021EECB0 + mov r1, r4 + bl FUN_021EEFFC + add r1, sp, #8 + str r5, [sp] + str r1, [sp, #4] + mov r1, r0 + ldr r3, [r7, #8] + mov r0, r6 + sub r2, r8, r4 + bl FUN_021EEA64 + b _021EECD0 +_021EECB0: + mov r1, r4 + bl FUN_021EEFFC + str r5, [sp] + mov r1, r0 + ldr r3, [r7, #8] + mov r0, r6 + sub r2, r8, r4 + bl FUN_021EEAD0 +_021EECD0: + cmp r0, #0 + beq _021EECFC + ldr r1, [sp, #8] + cmp r1, #0 + beq _021EECFC + ldr r2, [r7, #0x14] + ldr r1, [r7, #8] + sub r0, r0, r2 + bl _s32_div_f + add sp, sp, #0x10 + ldmia sp!, {r4, r5, r6, r7, r8, pc} +_021EECFC: + mvn r0, #0 + add sp, sp, #0x10 + ldmia sp!, {r4, r5, r6, r7, r8, pc} + + arm_func_start FUN_021EED08 +FUN_021EED08: ; 0x021EED08 + ldr ip, _021EED24 ; =0x020E1888 + mov r2, r0 + mov r3, r1 + ldr r0, [r2, #0x14] + ldr r1, [r2] + ldr r2, [r2, #8] + bx ip + .align 2, 0 +_021EED24: .word 0x020E1888 + + arm_func_start FUN_021EED28 +FUN_021EED28: ; 0x021EED28 + stmdb sp!, {r4, r5, r6, lr} + movs r4, r2 + mov r6, r0 + mov r5, r1 + bmi _021EED48 + ldr r0, [r6] + cmp r4, r0 + blt _021EED5C +_021EED48: + ldr r0, _021EED7C ; =0x0220D590 + ldr r1, _021EED80 ; =0x0220D584 + mov r2, #0 + mov r3, #0xd3 + bl __msl_assertion_failed +_021EED5C: + mov r0, r6 + mov r1, r4 + bl FUN_021EF240 + mov r0, r6 + mov r1, r5 + mov r2, r4 + bl FUN_021EF1B8 + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +_021EED7C: .word 0x0220D590 +_021EED80: .word 0x0220D584 + + arm_func_start FUN_021EED84 +FUN_021EED84: ; 0x021EED84 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #4 + movs r4, r1 + mov r5, r0 + bmi _021EEDA4 + ldr r0, [r5] + cmp r4, r0 + blt _021EEDB8 +_021EEDA4: + ldr r0, _021EEDD8 ; =0x0220D590 + ldr r1, _021EEDDC ; =0x0220D584 + mov r2, #0 + mov r3, #0xca + bl __msl_assertion_failed +_021EEDB8: + mov r0, r5 + mov r1, r4 + bl FUN_021EF240 + mov r0, r5 + mov r1, r4 + bl FUN_021EEDE0 + add sp, sp, #4 + ldmia sp!, {r4, r5, pc} + .align 2, 0 +_021EEDD8: .word 0x0220D590 +_021EEDDC: .word 0x0220D584 + + arm_func_start FUN_021EEDE0 +FUN_021EEDE0: ; 0x021EEDE0 + stmdb sp!, {r4, r5, r6, r7, lr} + sub sp, sp, #4 + movs r7, r1 + mov r4, r0 + bmi _021EEE00 + ldr r0, [r4] + cmp r7, r0 + blt _021EEE14 +_021EEE00: + ldr r0, _021EEE6C ; =0x0220D590 + ldr r1, _021EEE70 ; =0x0220D584 + mov r2, #0 + mov r3, #0xc0 + bl __msl_assertion_failed +_021EEE14: + ldr r0, [r4] + sub r6, r0, #1 + cmp r7, r6 + bge _021EEE58 + mov r0, r4 + mov r1, r7 + bl FUN_021EEFFC + mov r5, r0 + mov r0, r4 + add r1, r7, #1 + bl FUN_021EEFFC + mov r1, r0 + ldr r3, [r4, #8] + sub r0, r6, r7 + mul r2, r3, r0 + mov r0, r5 + bl memmove +_021EEE58: + ldr r0, [r4] + sub r0, r0, #1 + str r0, [r4] + add sp, sp, #4 + ldmia sp!, {r4, r5, r6, r7, pc} + .align 2, 0 +_021EEE6C: .word 0x0220D590 +_021EEE70: .word 0x0220D584 + + arm_func_start FUN_021EEE74 +FUN_021EEE74: ; 0x021EEE74 + stmdb sp!, {r4, r5, r6, lr} + sub sp, sp, #0x10 + movs r4, r2 + mov r6, r0 + mov r5, r1 + bne _021EEEA0 + ldr r0, _021EEEE8 ; =0x0220D5B0 + ldr r1, _021EEEEC ; =0x0220D584 + mov r2, #0 + mov r3, #0xb7 + bl __msl_assertion_failed +_021EEEA0: + add r0, sp, #8 + str r4, [sp] + str r0, [sp, #4] + ldr r1, [r6, #0x14] + ldr r2, [r6] + ldr r3, [r6, #8] + mov r0, r5 + bl FUN_021EEA64 + ldr r2, [r6, #0x14] + ldr r1, [r6, #8] + sub r0, r0, r2 + bl _s32_div_f + mov r2, r0 + mov r0, r6 + mov r1, r5 + bl FUN_021EEEF0 + add sp, sp, #0x10 + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +_021EEEE8: .word 0x0220D5B0 +_021EEEEC: .word 0x0220D584 + + arm_func_start FUN_021EEEF0 +FUN_021EEEF0: ; 0x021EEEF0 + stmdb sp!, {r4, r5, r6, r7, r8, lr} + movs r4, r2 + mov r6, r0 + mov r5, r1 + bmi _021EEF10 + ldr r0, [r6] + cmp r4, r0 + ble _021EEF24 +_021EEF10: + ldr r0, _021EEFA0 ; =0x0220D5BC + ldr r1, _021EEFA4 ; =0x0220D584 + mov r2, #0 + mov r3, #0xa7 + bl __msl_assertion_failed +_021EEF24: + ldr r1, [r6] + ldr r0, [r6, #4] + cmp r1, r0 + bne _021EEF3C + mov r0, r6 + bl FUN_021EF1E4 +_021EEF3C: + ldr r0, [r6] + add r0, r0, #1 + str r0, [r6] + ldr r0, [r6] + sub r8, r0, #1 + cmp r4, r8 + bge _021EEF8C + mov r0, r6 + add r1, r4, #1 + bl FUN_021EEFFC + mov r7, r0 + mov r0, r6 + mov r1, r4 + bl FUN_021EEFFC + mov r1, r0 + ldr r3, [r6, #8] + sub r0, r8, r4 + mul r2, r3, r0 + mov r0, r7 + bl memmove +_021EEF8C: + mov r0, r6 + mov r1, r5 + mov r2, r4 + bl FUN_021EF1B8 + ldmia sp!, {r4, r5, r6, r7, r8, pc} + .align 2, 0 +_021EEFA0: .word 0x0220D5BC +_021EEFA4: .word 0x0220D584 + + arm_func_start FUN_021EEFA8 +FUN_021EEFA8: ; 0x021EEFA8 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #4 + movs r5, r0 + mov r4, r1 + bne _021EEFD0 + ldr r0, _021EEFF4 ; =0x0220D5DC + ldr r1, _021EEFF8 ; =0x0220D584 + mov r2, #0 + mov r3, #0xa0 + bl __msl_assertion_failed +_021EEFD0: + cmp r5, #0 + addeq sp, sp, #4 + ldmeqia sp!, {r4, r5, pc} + ldr r2, [r5] + mov r0, r5 + mov r1, r4 + bl FUN_021EEEF0 + add sp, sp, #4 + ldmia sp!, {r4, r5, pc} + .align 2, 0 +_021EEFF4: .word 0x0220D5DC +_021EEFF8: .word 0x0220D584 + + arm_func_start FUN_021EEFFC +FUN_021EEFFC: ; 0x021EEFFC + stmdb sp!, {r4, r5, lr} + sub sp, sp, #4 + movs r4, r1 + mov r5, r0 + bmi _021EF01C + ldr r0, [r5] + cmp r4, r0 + blt _021EF030 +_021EF01C: + ldr r0, _021EF064 ; =0x0220D590 + ldr r1, _021EF068 ; =0x0220D584 + mov r2, #0 + mov r3, #0x94 + bl __msl_assertion_failed +_021EF030: + cmp r4, #0 + blt _021EF044 + ldr r0, [r5] + cmp r4, r0 + blt _021EF050 +_021EF044: + add sp, sp, #4 + mov r0, #0 + ldmia sp!, {r4, r5, pc} +_021EF050: + ldr r0, [r5, #0x14] + ldr r1, [r5, #8] + mla r0, r1, r4, r0 + add sp, sp, #4 + ldmia sp!, {r4, r5, pc} + .align 2, 0 +_021EF064: .word 0x0220D590 +_021EF068: .word 0x0220D584 + + arm_func_start FUN_021EF06C +FUN_021EF06C: ; 0x021EF06C + ldr r0, [r0] + bx lr + + arm_func_start FUN_021EF074 +FUN_021EF074: ; 0x021EF074 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #4 + movs r5, r0 + bne _021EF098 + ldr r0, _021EF0DC ; =0x0220D5DC + ldr r1, _021EF0E0 ; =0x0220D584 + mov r2, #0 + mov r3, #0x69 + bl __msl_assertion_failed +_021EF098: + ldr r0, [r5] + mov r4, #0 + cmp r0, #0 + ble _021EF0C4 +_021EF0A8: + mov r0, r5 + mov r1, r4 + bl FUN_021EF240 + ldr r0, [r5] + add r4, r4, #1 + cmp r4, r0 + blt _021EF0A8 +_021EF0C4: + ldr r0, [r5, #0x14] + bl FUN_021DD82C + mov r0, r5 + bl FUN_021DD82C + add sp, sp, #4 + ldmia sp!, {r4, r5, pc} + .align 2, 0 +_021EF0DC: .word 0x0220D5DC +_021EF0E0: .word 0x0220D584 + + arm_func_start FUN_021EF0E4 +FUN_021EF0E4: ; 0x021EF0E4 + stmdb sp!, {r4, r5, r6, r7, lr} + sub sp, sp, #4 + mov r7, r0 + mov r0, #0x18 + mov r6, r1 + mov r5, r2 + bl FUN_021DD860 + movs r4, r0 + bne _021EF11C + ldr r0, _021EF1A8 ; =0x0220D5DC + ldr r1, _021EF1AC ; =0x0220D584 + mov r2, #0 + mov r3, #0x52 + bl __msl_assertion_failed +_021EF11C: + cmp r7, #0 + bne _021EF138 + ldr r0, _021EF1B0 ; =0x0220D5E4 + ldr r1, _021EF1AC ; =0x0220D584 + mov r2, #0 + mov r3, #0x53 + bl __msl_assertion_failed +_021EF138: + mov r0, #0 + cmp r6, #0 + moveq r6, #8 + str r0, [r4] + str r6, [r4, #4] + str r7, [r4, #8] + str r6, [r4, #0xc] + str r5, [r4, #0x10] + ldr r1, [r4, #4] + cmp r1, #0 + beq _021EF198 + ldr r0, [r4, #8] + mul r0, r1, r0 + bl FUN_021DD860 + str r0, [r4, #0x14] + ldr r0, [r4, #0x14] + cmp r0, #0 + bne _021EF19C + ldr r0, _021EF1B4 ; =0x0220D5F0 + ldr r1, _021EF1AC ; =0x0220D584 + mov r2, #0 + mov r3, #0x5e + bl __msl_assertion_failed + b _021EF19C +_021EF198: + str r0, [r4, #0x14] +_021EF19C: + mov r0, r4 + add sp, sp, #4 + ldmia sp!, {r4, r5, r6, r7, pc} + .align 2, 0 +_021EF1A8: .word 0x0220D5DC +_021EF1AC: .word 0x0220D584 +_021EF1B0: .word 0x0220D5E4 +_021EF1B4: .word 0x0220D5F0 + + arm_func_start FUN_021EF1B8 +FUN_021EF1B8: ; 0x021EF1B8 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #4 + mov r4, r1 + mov r5, r0 + mov r1, r2 + bl FUN_021EEFFC + ldr r2, [r5, #8] + mov r1, r4 + bl memcpy + add sp, sp, #4 + ldmia sp!, {r4, r5, pc} + + arm_func_start FUN_021EF1E4 +FUN_021EF1E4: ; 0x021EF1E4 + stmdb sp!, {r4, lr} + mov r4, r0 + ldr r1, [r4, #4] + ldr r0, [r4, #0xc] + add r0, r1, r0 + str r0, [r4, #4] + ldr r2, [r4, #4] + ldr r1, [r4, #8] + ldr r0, [r4, #0x14] + mul r1, r2, r1 + bl FUN_021DD844 + str r0, [r4, #0x14] + ldr r0, [r4, #0x14] + cmp r0, #0 + ldmneia sp!, {r4, pc} + ldr r0, _021EF238 ; =0x0220D5F0 + ldr r1, _021EF23C ; =0x0220D584 + mov r2, #0 + mov r3, #0x41 + bl __msl_assertion_failed + ldmia sp!, {r4, pc} + .align 2, 0 +_021EF238: .word 0x0220D5F0 +_021EF23C: .word 0x0220D584 + + arm_func_start FUN_021EF240 +FUN_021EF240: ; 0x021EF240 + stmdb sp!, {r4, lr} + mov r4, r0 + ldr r2, [r4, #0x10] + cmp r2, #0 + ldmeqia sp!, {r4, pc} + bl FUN_021EEFFC + ldr r1, [r4, #0x10] + blx r1 + ldmia sp!, {r4, pc} + + arm_func_start FUN_021EF264 +FUN_021EF264: ; 0x021EF264 + stmdb sp!, {r4, r5, r6, r7, lr} + sub sp, sp, #4 + movs r6, r1 + mov r7, r0 + mov r5, r2 + bne _021EF290 + ldr r0, _021EF2DC ; =0x0220D5FC + ldr r1, _021EF2E0 ; =0x0220D600 + mov r2, #0 + mov r3, #0xd3 + bl __msl_assertion_failed +_021EF290: + ldr r0, [r7, #4] + mov r4, #0 + cmp r0, #0 + ble _021EF2D0 +_021EF2A0: + ldr r0, [r7] + mov r1, r6 + ldr r0, [r0, r4, lsl #2] + mov r2, r5 + bl FUN_021EEB60 + cmp r0, #0 + addne sp, sp, #4 + ldmneia sp!, {r4, r5, r6, r7, pc} + ldr r0, [r7, #4] + add r4, r4, #1 + cmp r4, r0 + blt _021EF2A0 +_021EF2D0: + mov r0, #0 + add sp, sp, #4 + ldmia sp!, {r4, r5, r6, r7, pc} + .align 2, 0 +_021EF2DC: .word 0x0220D5FC +_021EF2E0: .word 0x0220D600 + + arm_func_start FUN_021EF2E4 +FUN_021EF2E4: ; 0x021EF2E4 + stmdb sp!, {r4, r5, r6, r7, lr} + sub sp, sp, #4 + movs r6, r1 + mov r7, r0 + mov r5, r2 + bne _021EF310 + ldr r0, _021EF350 ; =0x0220D5FC + ldr r1, _021EF354 ; =0x0220D600 + mov r2, #0 + mov r3, #0xb6 + bl __msl_assertion_failed +_021EF310: + ldr r0, [r7, #4] + mov r4, #0 + cmp r0, #0 + addle sp, sp, #4 + ldmleia sp!, {r4, r5, r6, r7, pc} +_021EF324: + ldr r0, [r7] + mov r1, r6 + ldr r0, [r0, r4, lsl #2] + mov r2, r5 + bl FUN_021EEBD4 + ldr r0, [r7, #4] + add r4, r4, #1 + cmp r4, r0 + blt _021EF324 + add sp, sp, #4 + ldmia sp!, {r4, r5, r6, r7, pc} + .align 2, 0 +_021EF350: .word 0x0220D5FC +_021EF354: .word 0x0220D600 + + arm_func_start FUN_021EF358 +FUN_021EF358: ; 0x021EF358 + stmdb sp!, {r4, r5, r6, lr} + sub sp, sp, #8 + movs r6, r0 + mov r5, r1 + bne _021EF380 + ldr r0, _021EF3EC ; =0x0220D60C + ldr r1, _021EF3F0 ; =0x0220D600 + mov r2, #0 + mov r3, #0x94 + bl __msl_assertion_failed +_021EF380: + cmp r6, #0 + addeq sp, sp, #8 + moveq r0, #0 + ldmeqia sp!, {r4, r5, r6, pc} + ldr r1, [r6, #4] + ldr r2, [r6, #0xc] + mov r0, r5 + blx r2 + mov r3, #0 + str r3, [sp] + ldr r1, [r6] + mov r4, r0 + ldr r0, [r1, r4, lsl #2] + ldr r2, [r6, #0x10] + mov r1, r5 + bl FUN_021EEC3C + mov r1, r0 + mvn r0, #0 + cmp r1, r0 + addeq sp, sp, #8 + moveq r0, #0 + ldmeqia sp!, {r4, r5, r6, pc} + ldr r0, [r6] + ldr r0, [r0, r4, lsl #2] + bl FUN_021EEFFC + add sp, sp, #8 + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +_021EF3EC: .word 0x0220D60C +_021EF3F0: .word 0x0220D600 + + arm_func_start FUN_021EF3F4 +FUN_021EF3F4: ; 0x021EF3F4 + stmdb sp!, {r4, r5, r6, lr} + sub sp, sp, #8 + movs r6, r0 + mov r5, r1 + bne _021EF41C + ldr r0, _021EF48C ; =0x0220D60C + ldr r1, _021EF490 ; =0x0220D600 + mov r2, #0 + mov r3, #0x82 + bl __msl_assertion_failed +_021EF41C: + cmp r6, #0 + addeq sp, sp, #8 + moveq r0, #0 + ldmeqia sp!, {r4, r5, r6, pc} + ldr r1, [r6, #4] + ldr r2, [r6, #0xc] + mov r0, r5 + blx r2 + mov r3, #0 + str r3, [sp] + ldr r1, [r6] + mov r4, r0 + ldr r0, [r1, r4, lsl #2] + ldr r2, [r6, #0x10] + mov r1, r5 + bl FUN_021EEC3C + mov r1, r0 + mvn r0, #0 + cmp r1, r0 + addeq sp, sp, #8 + moveq r0, #0 + ldmeqia sp!, {r4, r5, r6, pc} + ldr r0, [r6] + ldr r0, [r0, r4, lsl #2] + bl FUN_021EED84 + mov r0, #1 + add sp, sp, #8 + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +_021EF48C: .word 0x0220D60C +_021EF490: .word 0x0220D600 + + arm_func_start FUN_021EF494 +FUN_021EF494: ; 0x021EF494 + stmdb sp!, {r4, r5, r6, lr} + sub sp, sp, #8 + movs r6, r0 + mov r5, r1 + bne _021EF4BC + ldr r0, _021EF538 ; =0x0220D60C + ldr r1, _021EF53C ; =0x0220D600 + mov r2, #0 + mov r3, #0x71 + bl __msl_assertion_failed +_021EF4BC: + cmp r6, #0 + addeq sp, sp, #8 + ldmeqia sp!, {r4, r5, r6, pc} + ldr r1, [r6, #4] + ldr r2, [r6, #0xc] + mov r0, r5 + blx r2 + mov r3, #0 + str r3, [sp] + ldr r1, [r6] + mov r4, r0 + ldr r0, [r1, r4, lsl #2] + ldr r2, [r6, #0x10] + mov r1, r5 + bl FUN_021EEC3C + mov r2, r0 + mvn r0, #0 + cmp r2, r0 + bne _021EF520 + ldr r0, [r6] + mov r1, r5 + ldr r0, [r0, r4, lsl #2] + bl FUN_021EEFA8 + add sp, sp, #8 + ldmia sp!, {r4, r5, r6, pc} +_021EF520: + ldr r0, [r6] + mov r1, r5 + ldr r0, [r0, r4, lsl #2] + bl FUN_021EED28 + add sp, sp, #8 + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +_021EF538: .word 0x0220D60C +_021EF53C: .word 0x0220D600 + + arm_func_start FUN_021EF540 +FUN_021EF540: ; 0x021EF540 + stmdb sp!, {r4, r5, r6, lr} + movs r6, r0 + mov r4, #0 + bne _021EF564 + ldr r0, _021EF5A8 ; =0x0220D60C + ldr r1, _021EF5AC ; =0x0220D600 + mov r2, r4 + mov r3, #0x61 + bl __msl_assertion_failed +_021EF564: + cmp r6, #0 + moveq r0, #0 + ldmeqia sp!, {r4, r5, r6, pc} + ldr r0, [r6, #4] + mov r5, #0 + cmp r0, #0 + ble _021EF5A0 +_021EF580: + ldr r0, [r6] + ldr r0, [r0, r5, lsl #2] + bl FUN_021EF06C + ldr r1, [r6, #4] + add r5, r5, #1 + cmp r5, r1 + add r4, r4, r0 + blt _021EF580 +_021EF5A0: + mov r0, r4 + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +_021EF5A8: .word 0x0220D60C +_021EF5AC: .word 0x0220D600 + + arm_func_start FUN_021EF5B0 +FUN_021EF5B0: ; 0x021EF5B0 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #4 + movs r5, r0 + bne _021EF5D4 + ldr r0, _021EF624 ; =0x0220D60C + ldr r1, _021EF628 ; =0x0220D600 + mov r2, #0 + mov r3, #0x51 + bl __msl_assertion_failed +_021EF5D4: + cmp r5, #0 + addeq sp, sp, #4 + ldmeqia sp!, {r4, r5, pc} + ldr r0, [r5, #4] + mov r4, #0 + cmp r0, #0 + ble _021EF60C +_021EF5F0: + ldr r0, [r5] + ldr r0, [r0, r4, lsl #2] + bl FUN_021EF074 + ldr r0, [r5, #4] + add r4, r4, #1 + cmp r4, r0 + blt _021EF5F0 +_021EF60C: + ldr r0, [r5] + bl FUN_021DD82C + mov r0, r5 + bl FUN_021DD82C + add sp, sp, #4 + ldmia sp!, {r4, r5, pc} + .align 2, 0 +_021EF624: .word 0x0220D60C +_021EF628: .word 0x0220D600 + + arm_func_start FUN_021EF62C +FUN_021EF62C: ; 0x021EF62C + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} + movs r7, r3 + mov sl, r0 + mov sb, r1 + mov r8, r2 + ldr r6, [sp, #0x24] + bne _021EF65C + ldr r0, _021EF750 ; =0x0220D614 + ldr r1, _021EF754 ; =0x0220D600 + mov r2, #0 + mov r3, #0x38 + bl __msl_assertion_failed +_021EF65C: + ldr r0, [sp, #0x20] + cmp r0, #0 + bne _021EF67C + ldr r0, _021EF758 ; =0x0220D61C + ldr r1, _021EF754 ; =0x0220D600 + mov r2, #0 + mov r3, #0x39 + bl __msl_assertion_failed +_021EF67C: + cmp sl, #0 + bne _021EF698 + ldr r0, _021EF75C ; =0x0220D624 + ldr r1, _021EF754 ; =0x0220D600 + mov r2, #0 + mov r3, #0x3a + bl __msl_assertion_failed +_021EF698: + cmp sb, #0 + bne _021EF6B4 + ldr r0, _021EF760 ; =0x0220D630 + ldr r1, _021EF754 ; =0x0220D600 + mov r2, #0 + mov r3, #0x3b + bl __msl_assertion_failed +_021EF6B4: + mov r0, #0x14 + bl FUN_021DD860 + movs r5, r0 + bne _021EF6D8 + ldr r0, _021EF764 ; =0x0220D60C + ldr r1, _021EF754 ; =0x0220D600 + mov r2, #0 + mov r3, #0x3e + bl __msl_assertion_failed +_021EF6D8: + mov r0, sb, lsl #2 + bl FUN_021DD860 + str r0, [r5] + ldr r0, [r5] + cmp r0, #0 + bne _021EF704 + ldr r0, _021EF768 ; =0x0220D63C + ldr r1, _021EF754 ; =0x0220D600 + mov r2, #0 + mov r3, #0x41 + bl __msl_assertion_failed +_021EF704: + cmp sb, #0 + mov r4, #0 + ble _021EF734 +_021EF710: + mov r0, sl + mov r1, r8 + mov r2, r6 + bl FUN_021EF0E4 + ldr r1, [r5] + str r0, [r1, r4, lsl #2] + add r4, r4, #1 + cmp r4, sb + blt _021EF710 +_021EF734: + str sb, [r5, #4] + ldr r0, [sp, #0x20] + str r6, [r5, #8] + str r0, [r5, #0x10] + mov r0, r5 + str r7, [r5, #0xc] + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + .align 2, 0 +_021EF750: .word 0x0220D614 +_021EF754: .word 0x0220D600 +_021EF758: .word 0x0220D61C +_021EF75C: .word 0x0220D624 +_021EF760: .word 0x0220D630 +_021EF764: .word 0x0220D60C +_021EF768: .word 0x0220D63C + + arm_func_start FUN_021EF76C +FUN_021EF76C: ; 0x021EF76C + stmdb sp!, {lr} + sub sp, sp, #0xc + ldr ip, [sp, #0x10] + str r3, [sp] + mov r3, r2 + mov r2, #4 + str ip, [sp, #4] + bl FUN_021EF62C + add sp, sp, #0xc + ldmfd sp!, {pc} + + arm_func_start FUN_021EF794 +FUN_021EF794: ; 0x021EF794 + stmdb sp!, {r4, r5, r6, lr} + sub sp, sp, #0x68 + mov r6, r0 + add r0, sp, #0x10 + mov r5, r1 + mov r4, r2 + bl FUN_020A8BBC + add r0, sp, #0x10 + mov r1, r6 + mov r2, r5 + bl FUN_020A8BB0 + add r0, sp, #0 + add r1, sp, #0x10 + bl FUN_020A8BA4 + add r0, sp, #0 + mov r1, r4 + bl FUN_021EF7E0 + add sp, sp, #0x68 + ldmia sp!, {r4, r5, r6, pc} + + arm_func_start FUN_021EF7E0 +FUN_021EF7E0: ; 0x021EF7E0 + stmdb sp!, {r4, r5, r6, r7, r8, lr} + mov r6, #0 + mov r8, r0 + mov r7, r1 + mov r5, r6 + ldr r4, _021EF81C ; =0x0220D64C +_021EF7F8: + ldrb r2, [r8, r6] + mov r1, r4 + add r0, r7, r5 + bl sprintf + add r6, r6, #1 + cmp r6, #0x10 + add r5, r5, #2 + blo _021EF7F8 + ldmia sp!, {r4, r5, r6, r7, r8, pc} + .align 2, 0 +_021EF81C: .word 0x0220D64C + + arm_func_start FUN_021EF820 +FUN_021EF820: ; 0x021EF820 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} + mov r7, r1 + mov r6, r2 + mov sl, r0 + mov r4, r7 + mov sb, r6 + cmp r3, #1 + beq _021EF84C + cmp r3, #2 + beq _021EF854 + b _021EF85C +_021EF84C: + ldr r5, _021EF948 ; =0x0220BBBC + b _021EF860 +_021EF854: + ldr r5, _021EF94C ; =0x0220BBC0 + b _021EF860 +_021EF85C: + ldr r5, _021EF950 ; =0x0220BBC4 +_021EF860: + cmp r6, #0 + ble _021EF898 + mov r8, #3 +_021EF86C: + cmp r6, #3 + movge r2, r8 + movlt r2, r6 + mov r0, sl + mov r1, r7 + bl FUN_021EF95C + sub sb, sb, #3 + cmp sb, #0 + add r7, r7, #4 + add sl, sl, #3 + bgt _021EF86C +_021EF898: + ldr r1, _021EF954 ; =0x55555556 + ldr r2, _021EF958 ; =0x00000003 + smull r0, r3, r1, r6 + add r3, r3, r6, lsr #31 + smull r0, r1, r2, r3 + sub r3, r6, r0 + mov r1, r7 + cmp r3, #1 + subeq r1, r7, #2 + beq _021EF8C8 + cmp r3, #2 + subeq r1, r7, #1 +_021EF8C8: + mov r0, #0 + strb r0, [r7] + cmp r7, r4 + ldmlsia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} +_021EF8D8: + sub r7, r7, #1 + cmp r7, r1 + ldrhssb r0, [r5, #2] + strhsb r0, [r7] + bhs _021EF93C + ldrsb r0, [r7] + cmp r0, #0x19 + addle r0, r0, #0x41 + strleb r0, [r7] + ble _021EF93C + cmp r0, #0x33 + addle r0, r0, #0x47 + strleb r0, [r7] + ble _021EF93C + cmp r0, #0x3d + suble r0, r0, #4 + strleb r0, [r7] + ble _021EF93C + cmp r0, #0x3e + ldreqsb r0, [r5] + streqb r0, [r7] + beq _021EF93C + cmp r0, #0x3f + ldreqsb r0, [r5, #1] + streqb r0, [r7] +_021EF93C: + cmp r7, r4 + bhi _021EF8D8 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + .align 2, 0 +_021EF948: .word 0x0220BBBC +_021EF94C: .word 0x0220BBC0 +_021EF950: .word 0x0220BBC4 +_021EF954: .word 0x55555556 +_021EF958: .word 0x00000003 + + arm_func_start FUN_021EF95C +FUN_021EF95C: ; 0x021EF95C + stmdb sp!, {lr} + sub sp, sp, #4 + cmp r2, #0 + mov lr, #0 + ble _021EF988 + add ip, sp, #0 +_021EF974: + ldrsb r3, [r0, lr] + add lr, lr, #1 + cmp lr, r2 + strb r3, [ip], #1 + blt _021EF974 +_021EF988: + cmp lr, #3 + bge _021EF9AC + add r0, sp, #0 + add r2, r0, lr + mov r0, #0 +_021EF99C: + add lr, lr, #1 + cmp lr, #3 + strb r0, [r2], #1 + blt _021EF99C +_021EF9AC: + ldrb r0, [sp] + mov r0, r0, asr #2 + strb r0, [r1] + ldrb r2, [sp] + ldrb r0, [sp, #1] + and r2, r2, #3 + mov r2, r2, lsl #4 + orr r0, r2, r0, asr #4 + strb r0, [r1, #1] + ldrb r2, [sp, #1] + ldrb r0, [sp, #2] + and r2, r2, #0xf + mov r2, r2, lsl #2 + orr r0, r2, r0, asr #6 + strb r0, [r1, #2] + ldrb r0, [sp, #2] + and r0, r0, #0x3f + strb r0, [r1, #3] + add sp, sp, #4 + ldmfd sp!, {pc} + + arm_func_start FUN_021EF9FC +FUN_021EF9FC: ; 0x021EF9FC + stmdb sp!, {r4, r5, lr} + sub sp, sp, #4 + mov r5, r0 + subs r4, r1, r5 + addeq sp, sp, #4 + ldmeqia sp!, {r4, r5, pc} + bl FUN_021EFA48 + mov r1, r4 + bl _s32_div_f + add r0, r1, r5 + add sp, sp, #4 + ldmia sp!, {r4, r5, pc} + + arm_func_start FUN_021EFA2C +FUN_021EFA2C: ; 0x021EFA2C + cmp r0, #0 + bicne r1, r0, #0x80000000 + ldr r0, _021EFA44 ; =0x0220D654 + moveq r1, #1 + str r1, [r0] + bx lr + .align 2, 0 +_021EFA44: .word 0x0220D654 + + arm_func_start FUN_021EFA48 +FUN_021EFA48: ; 0x021EFA48 + stmdb sp!, {lr} + sub sp, sp, #4 + ldr r0, _021EFA6C ; =0x0220D654 + ldr r0, [r0] + bl FUN_021EFA70 + ldr r1, _021EFA6C ; =0x0220D654 + str r0, [r1] + add sp, sp, #4 + ldmfd sp!, {pc} + .align 2, 0 +_021EFA6C: .word 0x0220D654 + + arm_func_start FUN_021EFA70 +FUN_021EFA70: ; 0x021EFA70 + ldr r1, _021EFABC ; =0x0000FFFF + ldr r2, _021EFAC0 ; =0x000041A7 + mov r3, r0, lsr #0x10 + and r1, r0, r1 + mul ip, r3, r2 + mul r2, r1, r2 + ldr r0, _021EFAC4 ; =0x00007FFF + mvn r1, #0x80000000 + and r0, ip, r0 + add r0, r2, r0, lsl #16 + cmp r0, r1 + bichi r0, r0, #0x80000000 + addhi r0, r0, #1 + add r0, r0, ip, lsr #15 + mvn r1, #0x80000000 + cmp r0, r1 + bichi r0, r0, #0x80000000 + addhi r0, r0, #1 + bx lr + .align 2, 0 +_021EFABC: .word 0x0000FFFF +_021EFAC0: .word 0x000041A7 +_021EFAC4: .word 0x00007FFF + + arm_func_start FUN_021EFAC8 +FUN_021EFAC8: ; 0x021EFAC8 + stmdb sp!, {r4, lr} + mov r4, r0 + bl OS_IsTickAvailable + cmp r0, #1 + beq _021EFAF0 + ldr r0, _021EFB18 ; =0x0220D658 + ldr r1, _021EFB1C ; =0x0220D678 + ldr r3, _021EFB20 ; =0x00000667 + mov r2, #0 + bl __msl_assertion_failed +_021EFAF0: + bl OS_GetTick + mov r1, r1, lsl #6 + orr r1, r1, r0, lsr #26 + ldr r2, _021EFB24 ; =0x01FF6210 + mov r0, r0, lsl #6 + mov r3, #0 + bl _ll_udiv + cmp r4, #0 + strne r0, [r4] + ldmia sp!, {r4, pc} + .align 2, 0 +_021EFB18: .word 0x0220D658 +_021EFB1C: .word 0x0220D678 +_021EFB20: .word 0x00000667 +_021EFB24: .word 0x01FF6210 + + arm_func_start FUN_021EFB28 +FUN_021EFB28: ; 0x021EFB28 + ldr r0, _021EFB34 ; =0x02210F3C + ldr r0, [r0] + bx lr + .align 2, 0 +_021EFB34: .word 0x02210F3C + + arm_func_start FUN_021EFB38 +FUN_021EFB38: ; 0x021EFB38 + stmdb sp!, {lr} + sub sp, sp, #4 + add r1, sp, #0 + bl FUN_0209A224 + cmp r0, #0 + mvneq r0, #0 + ldrne r0, [sp] + add sp, sp, #4 + ldmfd sp!, {pc} + + arm_func_start FUN_021EFB5C +FUN_021EFB5C: ; 0x021EFB5C + stmdb sp!, {r4, r5, lr} + sub sp, sp, #4 + mov r4, r2 + ldr r2, [r4] + mov r5, r1 + strb r2, [r5] + bl FUN_0209A650 + ldrb r2, [r5] + mvn r1, #0 + str r2, [r4] + bl FUN_021EFDD4 + add sp, sp, #4 + ldmia sp!, {r4, r5, pc} + + arm_func_start FUN_021EFB90 +FUN_021EFB90: ; 0x021EFB90 + ldr ip, _021EFBA0 ; =FUN_021EFDD4 + mov r0, #0 + mvn r1, #0 + bx ip + .align 2, 0 +_021EFBA0: .word FUN_021EFDD4 + + arm_func_start FUN_021EFBA4 +FUN_021EFBA4: ; 0x021EFBA4 + stmdb sp!, {lr} + sub sp, sp, #4 + ldr r1, [sp, #8] + mov r0, r3 + ldr r2, [r1] + mov r1, #0 + bl MI_CpuFill8 + mov r0, #0 + mvn r1, #0 + bl FUN_021EFDD4 + add sp, sp, #4 + ldmfd sp!, {pc} + + arm_func_start FUN_021EFBD4 +FUN_021EFBD4: ; 0x021EFBD4 + stmdb sp!, {r4, r5, r6, lr} + sub sp, sp, #0x10 + ldr r5, [sp, #0x20] + add r6, sp, #4 + mov r4, #4 +_021EFBE8: + ldrb lr, [r5], #1 + ldrb ip, [r5], #1 + subs r4, r4, #1 + strb lr, [r6], #1 + strb ip, [r6], #1 + bne _021EFBE8 + ldr lr, [sp, #0x24] + add ip, sp, #4 + strb lr, [sp, #4] + str ip, [sp] + bl FUN_0209A7D0 + mvn r1, #0 + bl FUN_021EFDD4 + add sp, sp, #0x10 + ldmia sp!, {r4, r5, r6, pc} + + arm_func_start FUN_021EFC24 +FUN_021EFC24: ; 0x021EFC24 + stmdb sp!, {lr} + sub sp, sp, #4 + bl FUN_0209A858 + mvn r1, #0 + bl FUN_021EFDD4 + add sp, sp, #4 + ldmfd sp!, {pc} + + arm_func_start FUN_021EFC40 +FUN_021EFC40: ; 0x021EFC40 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #4 + ldr r4, [sp, #0x14] + ldr r5, [sp, #0x10] + ldr ip, [r4] + strb ip, [r5] + str r5, [sp] + bl FUN_0209A880 + ldrb r2, [r5] + mvn r1, #0 + str r2, [r4] + bl FUN_021EFDD4 + add sp, sp, #4 + ldmia sp!, {r4, r5, pc} + + arm_func_start FUN_021EFC78 +FUN_021EFC78: ; 0x021EFC78 + stmdb sp!, {lr} + sub sp, sp, #4 + bl FUN_0209A91C + mvn r1, #0 + bl FUN_021EFDD4 + add sp, sp, #4 + ldmfd sp!, {pc} + + arm_func_start FUN_021EFC94 +FUN_021EFC94: ; 0x021EFC94 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #4 + mov r4, r2 + ldr r2, [r4] + mov r5, r1 + strb r2, [r5] + bl FUN_0209A504 + ldrb r2, [r5] + mvn r1, #0 + str r2, [r4] + bl FUN_021EFDD4 + add sp, sp, #4 + ldmia sp!, {r4, r5, pc} + + arm_func_start FUN_021EFCC8 +FUN_021EFCC8: ; 0x021EFCC8 + stmdb sp!, {lr} + sub sp, sp, #4 + bl FUN_0209A588 + mvn r1, #0 + bl FUN_021EFDD4 + add sp, sp, #4 + ldmfd sp!, {pc} + + arm_func_start FUN_021EFCE4 +FUN_021EFCE4: ; 0x021EFCE4 + stmdb sp!, {r4, lr} + sub sp, sp, #8 + add r4, sp, #0 + mov lr, #4 +_021EFCF4: + ldrb ip, [r1], #1 + ldrb r3, [r1], #1 + subs lr, lr, #1 + strb ip, [r4], #1 + strb r3, [r4], #1 + bne _021EFCF4 + add r1, sp, #0 + strb r2, [sp] + bl FUN_0209A944 + mvn r1, #0 + bl FUN_021EFDD4 + add sp, sp, #8 + ldmia sp!, {r4, pc} + + arm_func_start FUN_021EFD28 +FUN_021EFD28: ; 0x021EFD28 + stmdb sp!, {r4, lr} + sub sp, sp, #8 + ldrh r3, [r1, #2] + cmp r3, #0 + addeq sp, sp, #8 + moveq r0, #0 + ldmeqia sp!, {r4, pc} + add r4, sp, #0 + mov lr, #4 +_021EFD4C: + ldrb ip, [r1], #1 + ldrb r3, [r1], #1 + subs lr, lr, #1 + strb ip, [r4], #1 + strb r3, [r4], #1 + bne _021EFD4C + add r1, sp, #0 + strb r2, [sp] + bl FUN_0209A9A4 + mvn r1, #0 + bl FUN_021EFDD4 + add sp, sp, #8 + ldmia sp!, {r4, pc} + + arm_func_start FUN_021EFD80 +FUN_021EFD80: ; 0x021EFD80 + stmdb sp!, {lr} + sub sp, sp, #4 + bl thunk_FUN_020995dc + mvn r1, #0 + bl FUN_021EFDD4 + add sp, sp, #4 + ldmfd sp!, {pc} + + arm_func_start FUN_021EFD9C +FUN_021EFD9C: ; 0x021EFD9C + stmdb sp!, {lr} + sub sp, sp, #4 + bl thunk_FUN_0209996c + mvn r1, #0 + bl FUN_021EFDD4 + add sp, sp, #4 + ldmfd sp!, {pc} + + arm_func_start FUN_021EFDB8 +FUN_021EFDB8: ; 0x021EFDB8 + stmdb sp!, {lr} + sub sp, sp, #4 + bl FUN_0209A9D0 + mvn r1, #0 + bl FUN_021EFDD4 + add sp, sp, #4 + ldmfd sp!, {pc} + + arm_func_start FUN_021EFDD4 +FUN_021EFDD4: ; 0x021EFDD4 + cmp r0, #0 + ldrlt r2, _021EFDE8 ; =0x02210F3C + strlt r0, [r2] + movlt r0, r1 + bx lr + .align 2, 0 +_021EFDE8: .word 0x02210F3C + + arm_func_start FUN_021EFDEC +FUN_021EFDEC: ; 0x021EFDEC + ldr r3, [r0] + mov r1, r3, lsr #0x18 + mov r0, r3, lsr #8 + mov r2, r3, lsl #8 + and r1, r1, #0xff + and r0, r0, #0xff00 + mov r3, r3, lsl #0x18 + orr r0, r1, r0 + and r2, r2, #0xff0000 + and r1, r3, #0xff000000 + orr r0, r2, r0 + orr r1, r1, r0 + mov r0, r1, lsr #0x18 + and r2, r0, #0xff + mov r0, r1, lsr #0x10 + and r0, r0, #0xff + cmp r2, #0xa + moveq r0, #1 + bxeq lr + cmp r2, #0xac + bne _021EFE54 + cmp r0, #0x10 + blt _021EFE54 + cmp r0, #0x1f + movle r0, #1 + bxle lr +_021EFE54: + cmp r2, #0xc0 + bne _021EFE68 + cmp r0, #0xa8 + moveq r0, #1 + bxeq lr +_021EFE68: + mov r0, #0 + bx lr + + arm_func_start FUN_021EFE70 +FUN_021EFE70: ; 0x021EFE70 + stmdb sp!, {r4, lr} + ldr r4, _021EFEE8 ; =0x0220D684 + ldr r1, _021EFEEC ; =0x02210F40 + ldr lr, _021EFEF0 ; =0x02210F38 + ldr r2, _021EFEF4 ; =0x02210F64 + mov ip, #2 + mov r3, #0 + ldr r0, _021EFEF8 ; =0x02210F50 + str r4, [r1] + str lr, [r1, #4] + strh ip, [r1, #8] + strh r3, [r1, #0xa] + str r2, [r1, #0xc] + str r3, [r0] + bl FUN_02099C78 + ldr r1, _021EFEF8 ; =0x02210F50 + bl FUN_0209A174 + ldr r2, _021EFEF8 ; =0x02210F50 + ldr r0, [r2] + cmp r0, #0 + moveq r0, #0 + ldmeqia sp!, {r4, pc} + ldr r1, _021EFEF4 ; =0x02210F64 + mov r3, #0 + ldr r0, _021EFEEC ; =0x02210F40 + mov ip, #4 + str r2, [r1] + strh ip, [r0, #0xa] + str r3, [r1, #4] + ldmia sp!, {r4, pc} + .align 2, 0 +_021EFEE8: .word 0x0220D684 +_021EFEEC: .word 0x02210F40 +_021EFEF0: .word 0x02210F38 +_021EFEF4: .word 0x02210F64 +_021EFEF8: .word 0x02210F50 + + arm_func_start FUN_021EFEFC +FUN_021EFEFC: ; 0x021EFEFC + stmdb sp!, {lr} + sub sp, sp, #4 + mov r1, #0 + add r2, sp, #0 + mov r3, r1 + str r1, [sp] + bl FUN_021EFF5C + cmp r0, #1 + ldreq r0, [sp] + movne r0, #0 + add sp, sp, #4 + ldmfd sp!, {pc} + + arm_func_start FUN_021EFF2C +FUN_021EFF2C: ; 0x021EFF2C + stmdb sp!, {lr} + sub sp, sp, #4 + mov r2, #0 + add r1, sp, #0 + mov r3, r2 + str r2, [sp] + bl FUN_021EFF5C + cmp r0, #1 + ldreq r0, [sp] + movne r0, #0 + add sp, sp, #4 + ldmfd sp!, {pc} + + arm_func_start FUN_021EFF5C +FUN_021EFF5C: ; 0x021EFF5C + stmdb sp!, {r4, r5, r6, lr} + sub sp, sp, #8 + movs r6, r1 + mov r1, #0 + strh r1, [sp, #4] + str r0, [sp] + ldrnesh r0, [sp, #4] + mov r5, r2 + mov r2, #0 + orrne r0, r0, #1 + strneh r0, [sp, #4] + cmp r5, #0 + ldrnesh r0, [sp, #4] + mov r4, r3 + mov r3, r2 + orrne r0, r0, #8 + strneh r0, [sp, #4] + add r0, sp, #0 + mov r1, #1 + strh r2, [sp, #6] + bl FUN_0209A0AC + cmp r0, #0 + addlt sp, sp, #8 + mvnlt r0, #0 + ldmltia sp!, {r4, r5, r6, pc} + cmp r6, #0 + beq _021EFFEC + cmp r0, #0 + ble _021EFFE4 + ldrsh r1, [sp, #6] + ands r1, r1, #0x41 + movne r1, #1 + strne r1, [r6] + bne _021EFFEC +_021EFFE4: + mov r1, #0 + str r1, [r6] +_021EFFEC: + cmp r5, #0 + beq _021F0018 + cmp r0, #0 + ble _021F0010 + ldrsh r1, [sp, #6] + ands r1, r1, #8 + movne r1, #1 + strne r1, [r5] + bne _021F0018 +_021F0010: + mov r1, #0 + str r1, [r5] +_021F0018: + cmp r4, #0 + addeq sp, sp, #8 + ldmeqia sp!, {r4, r5, r6, pc} + cmp r0, #0 + ble _021F0044 + ldrsh r1, [sp, #6] + ands r1, r1, #0x20 + movne r1, #1 + addne sp, sp, #8 + strne r1, [r4] + ldmneia sp!, {r4, r5, r6, pc} +_021F0044: + mov r1, #0 + str r1, [r4] + add sp, sp, #8 + ldmia sp!, {r4, r5, r6, pc} + + arm_func_start FUN_021F0054 +FUN_021F0054: ; 0x021F0054 + stmdb sp!, {lr} + sub sp, sp, #0xc + mov r1, #4 + str r1, [sp, #8] + add ip, sp, #8 + ldr r1, _021F0094 ; =0x0000FFFF + ldr r2, _021F0098 ; =0x00001001 + add r3, sp, #4 + str ip, [sp] + bl FUN_021EFBA4 + mvn r1, #0 + cmp r0, r1 + ldrne r1, [sp, #4] + mov r0, r1 + add sp, sp, #0xc + ldmfd sp!, {pc} + .align 2, 0 +_021F0094: .word 0x0000FFFF +_021F0098: .word 0x00001001 + + arm_func_start FUN_021F009C +FUN_021F009C: ; 0x021F009C + stmdb sp!, {lr} + sub sp, sp, #0xc + mov r1, #4 + str r1, [sp, #8] + add ip, sp, #8 + ldr r1, _021F00DC ; =0x0000FFFF + ldr r2, _021F00E0 ; =0x00001002 + add r3, sp, #4 + str ip, [sp] + bl FUN_021EFBA4 + mvn r1, #0 + cmp r0, r1 + ldrne r1, [sp, #4] + mov r0, r1 + add sp, sp, #0xc + ldmfd sp!, {pc} + .align 2, 0 +_021F00DC: .word 0x0000FFFF +_021F00E0: .word 0x00001002 + + arm_func_start FUN_021F00E4 +FUN_021F00E4: ; 0x021F00E4 + stmdb sp!, {r0, r1, r2, r3} + stmdb sp!, {lr} + sub sp, sp, #4 + ldr r1, _021F0128 ; =0x0000FFFF + mov ip, #4 + ldr r2, _021F012C ; =0x00001001 + add r3, sp, #0xc + str ip, [sp] + bl FUN_021EFB90 + mvn r1, #0 + cmp r0, r1 + movne r0, #1 + moveq r0, #0 + add sp, sp, #4 + ldmia sp!, {lr} + add sp, sp, #0x10 + bx lr + .align 2, 0 +_021F0128: .word 0x0000FFFF +_021F012C: .word 0x00001001 + + arm_func_start FUN_021F0130 +FUN_021F0130: ; 0x021F0130 + stmdb sp!, {r0, r1, r2, r3} + stmdb sp!, {lr} + sub sp, sp, #4 + ldr r1, _021F0174 ; =0x0000FFFF + mov ip, #4 + ldr r2, _021F0178 ; =0x00001002 + add r3, sp, #0xc + str ip, [sp] + bl FUN_021EFB90 + mvn r1, #0 + cmp r0, r1 + movne r0, #1 + moveq r0, #0 + add sp, sp, #4 + ldmia sp!, {lr} + add sp, sp, #0x10 + bx lr + .align 2, 0 +_021F0174: .word 0x0000FFFF +_021F0178: .word 0x00001002 + + arm_func_start FUN_021F017C +FUN_021F017C: ; 0x021F017C + stmdb sp!, {r4, r5, lr} + sub sp, sp, #4 + mov r4, r1 + mov r1, #3 + mov r2, #0 + mov r5, r0 + bl FUN_0209A4B4 + cmp r4, #0 + bicne r2, r0, #4 + orreq r2, r0, #4 + mov r0, r5 + mov r1, #4 + bl FUN_0209A4B4 + cmp r0, #0 + moveq r0, #1 + movne r0, #0 + add sp, sp, #4 + ldmia sp!, {r4, r5, pc} + + arm_func_start FUN_021F01C4 +FUN_021F01C4: ; 0x021F01C4 + ldrsb r3, [r0] + mov r2, r0 + cmp r3, #0 + beq _021F01FC + ldr r1, _021F0204 ; =0x0210420C +_021F01D8: + cmp r3, #0 + blt _021F01EC + cmp r3, #0x80 + bge _021F01EC + ldrb r3, [r1, r3] +_021F01EC: + strb r3, [r0] + ldrsb r3, [r0, #1]! + cmp r3, #0 + bne _021F01D8 +_021F01FC: + mov r0, r2 + bx lr + .align 2, 0 +_021F0204: .word 0x0210420C + + arm_func_start FUN_021F0208 +FUN_021F0208: ; 0x021F0208 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #4 + movs r5, r0 + addeq sp, sp, #4 + moveq r0, #0 + ldmeqia sp!, {r4, r5, pc} + bl strlen + add r0, r0, #1 + bl FUN_021DD860 + movs r4, r0 + beq _021F023C + mov r1, r5 + bl strcpy +_021F023C: + mov r0, r4 + add sp, sp, #4 + ldmia sp!, {r4, r5, pc} + + arm_func_start FUN_021F0248 +FUN_021F0248: ; 0x021F0248 + bx lr + + arm_func_start FUN_021F024C +FUN_021F024C: ; 0x021F024C + bx lr + + arm_func_start FUN_021F0250 +FUN_021F0250: ; 0x021F0250 + ldr ip, _021F0258 ; =0x020CAFC0 + bx ip + .align 2, 0 +_021F0258: .word 0x020CAFC0 + + arm_func_start FUN_021F025C +FUN_021F025C: ; 0x021F025C + stmdb sp!, {lr} + sub sp, sp, #4 + bl OS_IsTickAvailable + cmp r0, #1 + beq _021F0284 + ldr r0, _021F02A8 ; =0x0220D658 + ldr r1, _021F02AC ; =0x0220D678 + ldr r3, _021F02B0 ; =0x00000109 + mov r2, #0 + bl __msl_assertion_failed +_021F0284: + bl OS_GetTick + mov r1, r1, lsl #6 + orr r1, r1, r0, lsr #26 + ldr r2, _021F02B4 ; =0x000082EA + mov r0, r0, lsl #6 + mov r3, #0 + bl _ll_udiv + add sp, sp, #4 + ldmfd sp!, {pc} + .align 2, 0 +_021F02A8: .word 0x0220D658 +_021F02AC: .word 0x0220D678 +_021F02B0: .word 0x00000109 +_021F02B4: .word 0x000082EA + + arm_func_start FUN_021F02B8 +FUN_021F02B8: ; 0x021F02B8 + stmdb sp!, {lr} + sub sp, sp, #4 + mov r3, r2 + cmp r0, #0 + beq _021F02D8 + ldr ip, [r0] + cmp ip, #0 + bne _021F02E4 +_021F02D8: + add sp, sp, #4 + mov r0, #2 + ldmfd sp!, {pc} +_021F02E4: + ldr r2, [ip, #0x108] + cmp r2, #0 + addne sp, sp, #4 + movne r0, #0 + ldmneia sp!, {pc} + ldr r2, [ip, #0x1d8] + cmp r2, #4 + bne _021F0318 + ldr r1, _021F0344 ; =0x0220D690 + bl FUN_021FAEEC + add sp, sp, #4 + mov r0, #2 + ldmfd sp!, {pc} +_021F0318: + cmp r3, #0 + bne _021F0334 + ldr r1, _021F0348 ; =0x0220D6E4 + bl FUN_021FAEEC + add sp, sp, #4 + mov r0, #2 + ldmfd sp!, {pc} +_021F0334: + mov r2, #1 + bl FUN_021F1A64 + add sp, sp, #4 + ldmfd sp!, {pc} + .align 2, 0 +_021F0344: .word 0x0220D690 +_021F0348: .word 0x0220D6E4 + + arm_func_start FUN_021F034C +FUN_021F034C: ; 0x021F034C + stmdb sp!, {r4, r5, r6, r7, lr} + sub sp, sp, #0x204 + movs r7, r0 + mov r6, r1 + mov r5, r3 + beq _021F0370 + ldr r4, [r7] + cmp r4, #0 + bne _021F037C +_021F0370: + add sp, sp, #0x204 + mov r0, #2 + ldmia sp!, {r4, r5, r6, r7, pc} +_021F037C: + ldr r1, [r4, #0x108] + cmp r1, #0 + addne sp, sp, #0x204 + movne r0, #0 + ldmneia sp!, {r4, r5, r6, r7, pc} + ldr r1, [r4, #0x1d8] + cmp r1, #4 + bne _021F03B0 + ldr r1, _021F0560 ; =0x0220D690 + bl FUN_021FAEEC + add sp, sp, #0x204 + mov r0, #2 + ldmia sp!, {r4, r5, r6, r7, pc} +_021F03B0: + cmp r2, #0 + bne _021F03CC + ldr r1, _021F0564 ; =0x0220D6F8 + bl FUN_021FAEEC + add sp, sp, #0x204 + mov r0, #2 + ldmia sp!, {r4, r5, r6, r7, pc} +_021F03CC: + cmp r5, #0 + bne _021F03E8 + ldr r1, _021F0568 ; =0x0220D710 + bl FUN_021FAEEC + add sp, sp, #0x204 + mov r0, #2 + ldmia sp!, {r4, r5, r6, r7, pc} +_021F03E8: + mov r1, r2 + add r0, sp, #0 + mov r2, #0x100 + bl FUN_021FB3DC + ldrsb r0, [sp] + cmp r0, #0 + beq _021F0424 + add r2, sp, #0 + mov r1, #0x2f +_021F040C: + ldrsb r0, [r2] + cmp r0, #0x5c + streqb r1, [r2] + ldrsb r0, [r2, #1]! + cmp r0, #0 + bne _021F040C +_021F0424: + add r0, sp, #0x100 + mov r1, r5 + mov r2, #0x100 + bl FUN_021FB3DC + add r0, sp, #0x100 + ldrsb r0, [r0] + cmp r0, #0 + beq _021F0464 + add r2, sp, #0x100 + mov r1, #0x2f +_021F044C: + ldrsb r0, [r2] + cmp r0, #0x5c + streqb r1, [r2] + ldrsb r0, [r2, #1]! + cmp r0, #0 + bne _021F044C +_021F0464: + ldr r0, [r4, #0x214] + cmp r6, r0 + bne _021F04A0 + add r0, sp, #0 + add r1, r4, #0x218 + bl strcmp + cmp r0, #0 + bne _021F04A0 + add r0, sp, #0x100 + add r1, r4, #0x318 + bl strcmp + cmp r0, #0 + addeq sp, sp, #0x204 + moveq r0, #0 + ldmeqia sp!, {r4, r5, r6, r7, pc} +_021F04A0: + add r1, sp, #0 + add r0, r4, #0x218 + mov r2, #0x100 + str r6, [r4, #0x214] + bl FUN_021FB3DC + add r1, sp, #0x100 + add r0, r4, #0x318 + mov r2, #0x100 + bl FUN_021FB3DC + ldr r2, _021F056C ; =0x0220D728 + mov r0, r7 + add r1, r4, #0x1f4 + bl FUN_021F2F9C + mov r0, r7 + mov r2, r6 + add r1, r4, #0x1f4 + bl FUN_021F2F64 + ldr r2, _021F0570 ; =0x0220D6C0 + mov r0, r7 + add r1, r4, #0x1f4 + bl FUN_021F2F9C + ldr r2, [r4, #0x198] + mov r0, r7 + add r1, r4, #0x1f4 + bl FUN_021F2F64 + ldr r2, _021F0574 ; =0x0220D734 + mov r0, r7 + add r1, r4, #0x1f4 + bl FUN_021F2F9C + mov r0, r7 + add r1, r4, #0x1f4 + add r2, sp, #0 + bl FUN_021F2F9C + ldr r2, _021F0578 ; =0x0220D744 + mov r0, r7 + add r1, r4, #0x1f4 + bl FUN_021F2F9C + mov r0, r7 + add r1, r4, #0x1f4 + add r2, sp, #0x100 + bl FUN_021F2F9C + ldr r2, _021F057C ; =0x0220D6CC + mov r0, r7 + add r1, r4, #0x1f4 + bl FUN_021F2F9C + mov r0, #0 + add sp, sp, #0x204 + ldmia sp!, {r4, r5, r6, r7, pc} + .align 2, 0 +_021F0560: .word 0x0220D690 +_021F0564: .word 0x0220D6F8 +_021F0568: .word 0x0220D710 +_021F056C: .word 0x0220D728 +_021F0570: .word 0x0220D6C0 +_021F0574: .word 0x0220D734 +_021F0578: .word 0x0220D744 +_021F057C: .word 0x0220D6CC + + arm_func_start FUN_021F0580 +FUN_021F0580: ; 0x021F0580 + stmdb sp!, {lr} + sub sp, sp, #4 + cmp r0, #0 + beq _021F059C + ldr r3, [r0] + cmp r3, #0 + bne _021F05A8 +_021F059C: + add sp, sp, #4 + mov r0, #2 + ldmfd sp!, {pc} +_021F05A8: + ldr r2, [r3, #0x108] + cmp r2, #0 + addne sp, sp, #4 + movne r0, #0 + ldmneia sp!, {pc} + ldr r2, [r3, #0x1d8] + cmp r2, #4 + bne _021F05DC + ldr r1, _021F05F0 ; =0x0220D690 + bl FUN_021FAEEC + add sp, sp, #4 + mov r0, #2 + ldmfd sp!, {pc} +_021F05DC: + bl FUN_021F17B0 + cmp r0, #0 + moveq r0, #0 + add sp, sp, #4 + ldmfd sp!, {pc} + .align 2, 0 +_021F05F0: .word 0x0220D690 + + arm_func_start FUN_021F05F4 +FUN_021F05F4: ; 0x021F05F4 + stmdb sp!, {lr} + sub sp, sp, #4 + cmp r0, #0 + beq _021F0610 + ldr r2, [r0] + cmp r2, #0 + bne _021F061C +_021F0610: + add sp, sp, #4 + mov r0, #0 + ldmfd sp!, {pc} +_021F061C: + ldr r2, [r2, #0x108] + cmp r2, #0 + addne sp, sp, #4 + movne r0, #0 + ldmneia sp!, {pc} + add r2, sp, #0 + bl FUN_021F85E8 + cmp r0, #0 + beq _021F0658 + ldr r0, [sp] + ldr r0, [r0, #8] + cmp r0, #0 + addne sp, sp, #4 + movne r0, #1 + ldmneia sp!, {pc} +_021F0658: + mov r0, #0 + add sp, sp, #4 + ldmfd sp!, {pc} + + arm_func_start FUN_021F0664 +FUN_021F0664: ; 0x021F0664 + stmdb sp!, {r4, lr} + sub sp, sp, #8 + mov r4, r2 + cmp r0, #0 + beq _021F0684 + ldr r2, [r0] + cmp r2, #0 + bne _021F0690 +_021F0684: + add sp, sp, #8 + mov r0, #2 + ldmia sp!, {r4, pc} +_021F0690: + ldr r2, [r2, #0x108] + cmp r2, #0 + movne r0, #0 + addne sp, sp, #8 + strne r0, [r4] + ldmneia sp!, {r4, pc} + add r2, sp, #0 + bl FUN_021F85E8 + cmp r0, #0 + beq _021F06D0 + ldr r0, [sp] + ldr r0, [r0, #8] + cmp r0, #0 + ldrne r0, [r0] + strne r0, [r4] + bne _021F06D8 +_021F06D0: + mvn r0, #0 + str r0, [r4] +_021F06D8: + mov r0, #0 + add sp, sp, #8 + ldmia sp!, {r4, pc} + + arm_func_start FUN_021F06E4 +FUN_021F06E4: ; 0x021F06E4 + stmdb sp!, {r4, r5, r6, lr} + movs r5, r0 + mov r4, r2 + beq _021F0700 + ldr r3, [r5] + cmp r3, #0 + bne _021F0708 +_021F0700: + mov r0, #2 + ldmia sp!, {r4, r5, r6, pc} +_021F0708: + ldr r2, [r3, #0x108] + cmp r2, #0 + beq _021F072C + mov r0, r4 + mov r1, #0 + mov r2, #0x210 + bl Call_FillMemWithValue + mov r0, #0 + ldmia sp!, {r4, r5, r6, pc} +_021F072C: + cmp r4, #0 + bne _021F0744 + ldr r1, _021F0814 ; =0x0220D750 + bl FUN_021FAEEC + mov r0, #2 + ldmia sp!, {r4, r5, r6, pc} +_021F0744: + cmp r1, #0 + ldr r2, [r3, #0x430] + blt _021F0758 + cmp r1, r2 + blt _021F076C +_021F0758: + ldr r1, _021F0818 ; =0x0220D760 + mov r0, r5 + bl FUN_021FAEEC + mov r0, #2 + ldmia sp!, {r4, r5, r6, pc} +_021F076C: + bl FUN_021F8430 + movs r6, r0 + bne _021F078C + ldr r1, _021F0818 ; =0x0220D760 + mov r0, r5 + bl FUN_021FAEEC + mov r0, #2 + ldmia sp!, {r4, r5, r6, pc} +_021F078C: + ldr r5, [r6, #8] + cmp r5, #0 + bne _021F07AC + ldr r0, _021F081C ; =0x0220D770 + ldr r1, _021F0820 ; =0x0220D77C + ldr r3, _021F0824 ; =0x000005CF + mov r2, #0 + bl __msl_assertion_failed +_021F07AC: + ldr r0, [r6] + str r0, [r4] + ldr r0, [r5, #4] + str r0, [r4, #4] + ldr r1, [r5, #8] + cmp r1, #0 + moveq r0, #0 + streqb r0, [r1] + beq _021F07DC + add r0, r4, #8 + mov r2, #0x100 + bl FUN_021FB3DC +_021F07DC: + ldr r1, [r5, #0xc] + cmp r1, #0 + moveq r0, #0 + streqb r0, [r1] + beq _021F07FC + add r0, r4, #0x108 + mov r2, #0x100 + bl FUN_021FB3DC +_021F07FC: + ldr r1, [r5, #0x10] + mov r0, #0 + str r1, [r4, #0x208] + ldr r1, [r5, #0x14] + str r1, [r4, #0x20c] + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +_021F0814: .word 0x0220D750 +_021F0818: .word 0x0220D760 +_021F081C: .word 0x0220D770 +_021F0820: .word 0x0220D77C +_021F0824: .word 0x000005CF + + arm_func_start FUN_021F0828 +FUN_021F0828: ; 0x021F0828 + cmp r0, #0 + beq _021F083C + ldr r2, [r0] + cmp r2, #0 + bne _021F0844 +_021F083C: + mov r0, #2 + bx lr +_021F0844: + ldr r0, [r2, #0x108] + cmp r0, #0 + movne r0, #0 + strne r0, [r1] + ldreq r2, [r2, #0x430] + moveq r0, #0 + streq r2, [r1] + bx lr + + arm_func_start FUN_021F0864 +FUN_021F0864: ; 0x021F0864 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #4 + movs r4, r0 + beq _021F0880 + ldr r5, [r4] + cmp r5, #0 + bne _021F088C +_021F0880: + add sp, sp, #4 + mov r0, #2 + ldmia sp!, {r4, r5, pc} +_021F088C: + ldr r2, [r5, #0x108] + cmp r2, #0 + addne sp, sp, #4 + movne r0, #0 + ldmneia sp!, {r4, r5, pc} + ldr r2, [r5, #0x1d8] + cmp r2, #4 + bne _021F08C0 + ldr r1, _021F0940 ; =0x0220D690 + bl FUN_021FAEEC + add sp, sp, #4 + mov r0, #2 + ldmia sp!, {r4, r5, pc} +_021F08C0: + add r2, sp, #0 + bl FUN_021F85E8 + cmp r0, #0 + addeq sp, sp, #4 + moveq r0, #0 + ldmeqia sp!, {r4, r5, pc} + ldr r1, [sp] + ldr r0, [r1, #0x14] + sub r0, r0, #1 + str r0, [r1, #0x14] + ldr r0, [r5, #0x100] + cmp r0, #0 + bne _021F0934 + ldr r1, [sp] + ldr r0, [r1, #0x14] + cmp r0, #0 + bgt _021F0934 + ldr r0, [r1, #0x10] + bl FUN_021DD82C + ldr r0, [sp] + mov r1, #0 + str r1, [r0, #0x10] + ldr r0, [sp] + bl FUN_021F83EC + cmp r0, #0 + beq _021F0934 + ldr r1, [sp] + mov r0, r4 + bl FUN_021F85A0 +_021F0934: + mov r0, #0 + add sp, sp, #4 + ldmia sp!, {r4, r5, pc} + .align 2, 0 +_021F0940: .word 0x0220D690 + + arm_func_start FUN_021F0944 +FUN_021F0944: ; 0x021F0944 + stmdb sp!, {lr} + sub sp, sp, #4 + cmp r0, #0 + beq _021F0960 + ldr r3, [r0] + cmp r3, #0 + bne _021F096C +_021F0960: + add sp, sp, #4 + mov r0, #2 + ldmfd sp!, {pc} +_021F096C: + ldr r2, [r3, #0x108] + cmp r2, #0 + addne sp, sp, #4 + movne r0, #0 + ldmneia sp!, {pc} + ldr r2, [r3, #0x1d8] + cmp r2, #4 + bne _021F09A0 + ldr r1, _021F09AC ; =0x0220D690 + bl FUN_021FAEEC + add sp, sp, #4 + mov r0, #2 + ldmfd sp!, {pc} +_021F09A0: + bl FUN_021F1984 + add sp, sp, #4 + ldmfd sp!, {pc} + .align 2, 0 +_021F09AC: .word 0x0220D690 + + arm_func_start FUN_021F09B0 +FUN_021F09B0: ; 0x021F09B0 + stmdb sp!, {r4, r5, r6, lr} + ldr ip, _021F0B0C ; =0x00000408 + sub sp, sp, ip + movs r6, r0 + mov r5, r1 + beq _021F09D4 + ldr r4, [r6] + cmp r4, #0 + bne _021F09E4 +_021F09D4: + ldr ip, _021F0B0C ; =0x00000408 + mov r0, #2 + add sp, sp, ip + ldmia sp!, {r4, r5, r6, pc} +_021F09E4: + ldr r1, [r4, #0x108] + cmp r1, #0 + ldrne ip, _021F0B0C ; =0x00000408 + movne r0, #0 + addne sp, sp, ip + ldmneia sp!, {r4, r5, r6, pc} + ldr r1, [r4, #0x1d8] + cmp r1, #4 + bne _021F0A20 + ldr r1, _021F0B10 ; =0x0220D690 + bl FUN_021FAEEC + ldr ip, _021F0B0C ; =0x00000408 + mov r0, #2 + add sp, sp, ip + ldmia sp!, {r4, r5, r6, pc} +_021F0A20: + cmp r2, #0 + bne _021F0A40 + ldr r1, _021F0B14 ; =0x0220D784 + bl FUN_021FAEEC + ldr ip, _021F0B0C ; =0x00000408 + mov r0, #2 + add sp, sp, ip + ldmia sp!, {r4, r5, r6, pc} +_021F0A40: + mov r1, r2 + ldr r2, _021F0B18 ; =0x00000401 + add r0, sp, #0 + bl FUN_021FB3DC + ldrsb r0, [sp] + cmp r0, #0 + beq _021F0A7C + add r2, sp, #0 + mov r1, #0x2f +_021F0A64: + ldrsb r0, [r2] + cmp r0, #0x5c + streqb r1, [r2] + ldrsb r0, [r2, #1]! + cmp r0, #0 + bne _021F0A64 +_021F0A7C: + ldr r2, _021F0B1C ; =0x0220D794 + mov r0, r6 + add r1, r4, #0x1f4 + bl FUN_021F2F9C + ldr r2, _021F0B20 ; =0x0220D6C0 + mov r0, r6 + add r1, r4, #0x1f4 + bl FUN_021F2F9C + ldr r2, [r4, #0x198] + mov r0, r6 + add r1, r4, #0x1f4 + bl FUN_021F2F64 + ldr r2, _021F0B24 ; =0x0220D7A0 + mov r0, r6 + add r1, r4, #0x1f4 + bl FUN_021F2F9C + mov r2, r5 + mov r0, r6 + add r1, r4, #0x1f4 + bl FUN_021F2F64 + ldr r2, _021F0B28 ; =0x0220D7B0 + mov r0, r6 + add r1, r4, #0x1f4 + bl FUN_021F2F9C + mov r0, r6 + add r1, r4, #0x1f4 + add r2, sp, #0 + bl FUN_021F2F9C + ldr r2, _021F0B2C ; =0x0220D6CC + mov r0, r6 + add r1, r4, #0x1f4 + bl FUN_021F2F9C + mov r0, #0 + ldr ip, _021F0B0C ; =0x00000408 + add sp, sp, ip + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +_021F0B0C: .word 0x00000408 +_021F0B10: .word 0x0220D690 +_021F0B14: .word 0x0220D784 +_021F0B18: .word 0x00000401 +_021F0B1C: .word 0x0220D794 +_021F0B20: .word 0x0220D6C0 +_021F0B24: .word 0x0220D7A0 +_021F0B28: .word 0x0220D7B0 +_021F0B2C: .word 0x0220D6CC + + arm_func_start FUN_021F0B30 +FUN_021F0B30: ; 0x021F0B30 + stmdb sp!, {lr} + sub sp, sp, #4 + cmp r0, #0 + beq _021F0B4C + ldr ip, [r0] + cmp ip, #0 + bne _021F0B58 +_021F0B4C: + add sp, sp, #4 + mov r0, #2 + ldmfd sp!, {pc} +_021F0B58: + ldr r3, [ip, #0x108] + cmp r3, #0 + addne sp, sp, #4 + movne r0, #0 + ldmneia sp!, {pc} + ldr r3, [ip, #0x1d8] + cmp r3, #4 + bne _021F0B8C + ldr r1, _021F0B98 ; =0x0220D690 + bl FUN_021FAEEC + add sp, sp, #4 + mov r0, #2 + ldmfd sp!, {pc} +_021F0B8C: + bl FUN_021F50B8 + add sp, sp, #4 + ldmfd sp!, {pc} + .align 2, 0 +_021F0B98: .word 0x0220D690 + + arm_func_start FUN_021F0B9C +FUN_021F0B9C: ; 0x021F0B9C + stmdb sp!, {r4, r5, lr} + sub sp, sp, #0x20c + movs r5, r0 + beq _021F0BC0 + ldr r4, [r5] + cmp r4, #0 + beq _021F0BC0 + cmp r1, #0 + bne _021F0BCC +_021F0BC0: + add sp, sp, #0x20c + mov r0, #2 + ldmia sp!, {r4, r5, pc} +_021F0BCC: + ldr lr, [sp, #0x218] + cmp lr, #0 + bne _021F0BEC + ldr r1, _021F0C7C ; =0x0220D6D4 + bl FUN_021FAEEC + add sp, sp, #0x20c + mov r0, #2 + ldmia sp!, {r4, r5, pc} +_021F0BEC: + ldr ip, [r4, #0x108] + cmp ip, #0 + beq _021F0C44 + mov r0, #0 + add lr, sp, #8 + mov r1, r0 + mov r2, r0 + mov r3, r0 + mov ip, #0x10 +_021F0C10: + stmia lr!, {r0, r1, r2, r3} + stmia lr!, {r0, r1, r2, r3} + subs ip, ip, #1 + bne _021F0C10 + ldr r2, [sp, #0x21c] + str r0, [lr] + ldr r3, [sp, #0x218] + add r1, sp, #8 + mov r0, r5 + blx r3 + add sp, sp, #0x20c + mov r0, #0 + ldmia sp!, {r4, r5, pc} +_021F0C44: + ldr ip, [r4, #0x1d8] + cmp ip, #4 + bne _021F0C64 + ldr r1, _021F0C80 ; =0x0220D690 + bl FUN_021FAEEC + add sp, sp, #0x20c + mov r0, #2 + ldmia sp!, {r4, r5, pc} +_021F0C64: + ldr ip, [sp, #0x21c] + str lr, [sp] + str ip, [sp, #4] + bl FUN_021F4E64 + add sp, sp, #0x20c + ldmia sp!, {r4, r5, pc} + .align 2, 0 +_021F0C7C: .word 0x0220D6D4 +_021F0C80: .word 0x0220D690 + + arm_func_start FUN_021F0C84 +FUN_021F0C84: ; 0x021F0C84 + stmdb sp!, {r4, lr} + sub sp, sp, #0x30 + cmp r0, #0 + beq _021F0CA0 + ldr r4, [r0] + cmp r4, #0 + bne _021F0CAC +_021F0CA0: + add sp, sp, #0x30 + mov r0, #2 + ldmia sp!, {r4, pc} +_021F0CAC: + ldr ip, [sp, #0x48] + cmp ip, #0 + bne _021F0CCC + ldr r1, _021F0D4C ; =0x0220D6D4 + bl FUN_021FAEEC + add sp, sp, #0x30 + mov r0, #2 + ldmia sp!, {r4, pc} +_021F0CCC: + ldr r4, [r4, #0x108] + cmp r4, #0 + beq _021F0D0C + add r1, sp, #0x1c + mov r4, #0 + str r4, [r1] + str r4, [r1, #4] + str r4, [r1, #8] + ldr r2, [sp, #0x4c] + ldr r3, _021F0D50 ; =0x00000601 + str r4, [r1, #0xc] + str r3, [sp, #0x24] + blx ip + add sp, sp, #0x30 + mov r0, r4 + ldmia sp!, {r4, pc} +_021F0D0C: + ldr r4, [sp, #0x38] + ldr lr, [sp, #0x3c] + str r4, [sp] + ldr r4, [sp, #0x40] + str lr, [sp, #4] + str r4, [sp, #8] + mov r4, #0 + ldr lr, [sp, #0x44] + str r4, [sp, #0xc] + str lr, [sp, #0x10] + ldr lr, [sp, #0x4c] + str ip, [sp, #0x14] + str lr, [sp, #0x18] + bl FUN_021FA770 + add sp, sp, #0x30 + ldmia sp!, {r4, pc} + .align 2, 0 +_021F0D4C: .word 0x0220D6D4 +_021F0D50: .word 0x00000601 + + arm_func_start FUN_021F0D54 +FUN_021F0D54: ; 0x021F0D54 + stmdb sp!, {r4, lr} + movs r4, r0 + ldmeqia sp!, {r4, pc} + ldr r1, [r4] + cmp r1, #0 + ldmeqia sp!, {r4, pc} + ldr r1, [r1, #0x108] + cmp r1, #0 + ldmneia sp!, {r4, pc} + mov r1, #1 + bl FUN_021F35F4 + mov r0, r4 + bl FUN_021F14C0 + ldmia sp!, {r4, pc} + + arm_func_start FUN_021F0D8C +FUN_021F0D8C: ; 0x021F0D8C + stmdb sp!, {r4, lr} + sub sp, sp, #0x48 + movs lr, r0 + beq _021F0DA8 + ldr ip, [lr] + cmp ip, #0 + bne _021F0DB4 +_021F0DA8: + add sp, sp, #0x48 + mov r0, #2 + ldmia sp!, {r4, pc} +_021F0DB4: + cmp r1, #0 + beq _021F0DC8 + ldrsb r4, [r1] + cmp r4, #0 + bne _021F0DD4 +_021F0DC8: + add sp, sp, #0x48 + mov r0, #2 + ldmia sp!, {r4, pc} +_021F0DD4: + cmp r2, #0 + beq _021F0DE8 + ldrsb r4, [r2] + cmp r4, #0 + bne _021F0DF4 +_021F0DE8: + add sp, sp, #0x48 + mov r0, #2 + ldmia sp!, {r4, pc} +_021F0DF4: + ldr r4, [sp, #0x54] + cmp r4, #0 + bne _021F0E14 + ldr r1, _021F0EA8 ; =0x0220D6D4 + bl FUN_021FAEEC + add sp, sp, #0x48 + mov r0, #2 + ldmia sp!, {r4, pc} +_021F0E14: + ldr ip, [ip, #0x108] + cmp ip, #0 + beq _021F0E5C + add r3, sp, #0x24 + mov r0, #0 + mov r2, r3 + mov r1, r0 + stmia r2!, {r0, r1} + stmia r2!, {r0, r1} + stmia r2!, {r0, r1} + stmia r2, {r0, r1} + ldr r2, [sp, #0x58] + mov r0, lr + mov r1, r3 + blx r4 + add sp, sp, #0x48 + mov r0, #0 + ldmia sp!, {r4, pc} +_021F0E5C: + ldr lr, _021F0EAC ; =0x0220D7BC + mov ip, #0 + str lr, [sp] + str r1, [sp, #4] + str r2, [sp, #8] + str ip, [sp, #0xc] + str r3, [sp, #0x10] + ldr r1, [sp, #0x50] + str ip, [sp, #0x14] + str r1, [sp, #0x18] + ldr ip, [sp, #0x58] + str r4, [sp, #0x1c] + mov r1, lr + mov r2, lr + mov r3, lr + str ip, [sp, #0x20] + bl FUN_021F4670 + add sp, sp, #0x48 + ldmia sp!, {r4, pc} + .align 2, 0 +_021F0EA8: .word 0x0220D6D4 +_021F0EAC: .word 0x0220D7BC + + arm_func_start FUN_021F0EB0 +FUN_021F0EB0: ; 0x021F0EB0 + stmdb sp!, {lr} + sub sp, sp, #4 + cmp r0, #0 + beq _021F0ECC + ldr ip, [r0] + cmp ip, #0 + bne _021F0ED8 +_021F0ECC: + add sp, sp, #4 + mov r0, #2 + ldmfd sp!, {pc} +_021F0ED8: + cmp r1, #0 + blt _021F0EE8 + cmp r1, #6 + blt _021F0EFC +_021F0EE8: + ldr r1, _021F0F14 ; =0x0220D7C0 + bl FUN_021FAEEC + add sp, sp, #4 + mov r0, #2 + ldmfd sp!, {pc} +_021F0EFC: + add r0, ip, r1, lsl #3 + str r2, [r0, #0x1a4] + str r3, [r0, #0x1a8] + mov r0, #0 + add sp, sp, #4 + ldmfd sp!, {pc} + .align 2, 0 +_021F0F14: .word 0x0220D7C0 + + arm_func_start FUN_021F0F18 +FUN_021F0F18: ; 0x021F0F18 + stmdb sp!, {lr} + sub sp, sp, #4 + cmp r0, #0 + beq _021F0F34 + ldr r1, [r0] + cmp r1, #0 + bne _021F0F40 +_021F0F34: + add sp, sp, #4 + mov r0, #2 + ldmfd sp!, {pc} +_021F0F40: + ldr r1, [r1, #0x108] + cmp r1, #0 + addne sp, sp, #4 + movne r0, #0 + ldmneia sp!, {pc} + mov r1, #0 + bl FUN_021F0FD4 + add sp, sp, #4 + ldmfd sp!, {pc} + + arm_func_start FUN_021F0F64 +FUN_021F0F64: ; 0x021F0F64 + stmdb sp!, {lr} + sub sp, sp, #4 + cmp r0, #0 + addeq sp, sp, #4 + ldmeqia sp!, {pc} + ldr r1, [r0] + cmp r1, #0 + addeq sp, sp, #4 + ldmeqia sp!, {pc} + bl FUN_021F1620 + add sp, sp, #4 + ldmfd sp!, {pc} + + arm_func_start FUN_021F0F94 +FUN_021F0F94: ; 0x021F0F94 + stmdb sp!, {lr} + sub sp, sp, #4 + ldr r3, _021F0FD0 ; =0x02210E5C + ldr r3, [r3] + cmp r3, #1 + addne sp, sp, #4 + movne r0, #2 + ldmneia sp!, {pc} + cmp r0, #0 + addeq sp, sp, #4 + moveq r0, #2 + ldmeqia sp!, {pc} + bl FUN_021F1668 + add sp, sp, #4 + ldmfd sp!, {pc} + .align 2, 0 +_021F0FD0: .word 0x02210E5C + + arm_func_start FUN_021F0FD4 +FUN_021F0FD4: ; 0x021F0FD4 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #4 + mov sl, r0 + ldr r7, [sl] + mov sb, r1 + ldr r0, [r7, #0x1d8] + mov r6, #0 + cmp r0, #4 + bls _021F100C + ldr r0, _021F117C ; =0x0220D7D0 + ldr r1, _021F1180 ; =0x0220D8C8 + ldr r3, _021F1184 ; =0x000001B5 + mov r2, r6 + bl __msl_assertion_failed +_021F100C: + ldr r0, [r7, #0x1d8] + cmp r0, #1 + bne _021F10A8 + mov r4, #0 + mov r5, #1 + mov fp, #0xa +_021F1024: + mov r0, sl + bl FUN_021F3880 + movs r6, r0 + bne _021F104C + cmp sb, #0 + beq _021F104C + ldr r0, [r7, #0x1d8] + cmp r0, #1 + moveq r8, r5 + beq _021F1050 +_021F104C: + mov r8, r4 +_021F1050: + cmp r8, #0 + beq _021F1060 + mov r0, fp + bl FUN_021F0250 +_021F1060: + cmp r8, #0 + bne _021F1024 + cmp r6, #0 + beq _021F10A8 + add r1, sp, #0 + mov r0, sl + mov r2, #1 + bl FUN_021F6C38 + cmp r0, #0 + ldrne r0, [sp] + movne r1, #4 + strne r1, [r0, #0x1c] + bne _021F10A8 + ldr r0, _021F1188 ; =0x0220D8D0 + ldr r1, _021F1180 ; =0x0220D8C8 + ldr r3, _021F118C ; =0x000001DB + mov r2, #0 + bl __msl_assertion_failed +_021F10A8: + ldr r0, [r7, #0x1d8] + sub r0, r0, #2 + cmp r0, #1 + bhi _021F10E0 + cmp r6, #0 + bne _021F10CC + mov r0, sl + bl FUN_021F1190 + mov r6, r0 +_021F10CC: + cmp r6, #0 + bne _021F10E0 + mov r0, sl + bl FUN_021F775C + mov r6, r0 +_021F10E0: + cmp r6, #0 + bne _021F10F4 + mov r0, sl + bl FUN_021F8974 + mov r6, r0 +_021F10F4: + ldr r1, [r7, #0x424] + str r1, [sp] + cmp r1, #0 + beq _021F1140 +_021F1104: + ldr r0, [r1, #0x1c] + cmp r0, #0 + ldreq r0, [r1, #0x20] + streq r0, [sp] + beq _021F1134 + mov r0, sl + bl FUN_021F6E44 + ldr r1, [sp] + mov r0, sl + ldr r2, [r1, #0x20] + str r2, [sp] + bl FUN_021F6C84 +_021F1134: + ldr r1, [sp] + cmp r1, #0 + bne _021F1104 +_021F1140: + mov r0, sl + mov r1, sb + bl FUN_021F3170 + cmp r0, #0 + addne sp, sp, #4 + ldmneia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + ldr r0, [r7, #0x41c] + cmp r0, #0 + beq _021F1170 + mov r0, sl + mov r1, #0 + bl FUN_021F35F4 +_021F1170: + mov r0, r6 + add sp, sp, #4 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_021F117C: .word 0x0220D7D0 +_021F1180: .word 0x0220D8C8 +_021F1184: .word 0x000001B5 +_021F1188: .word 0x0220D8D0 +_021F118C: .word 0x000001DB + + arm_func_start FUN_021F1190 +FUN_021F1190: ; 0x021F1190 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x1c + mov fp, #0 + mov r5, r0 + str fp, [sp, #0x18] + ldr r4, [r5] + mov r0, #0x800 + str r0, [sp, #8] + add sb, r4, #0x1f0 + add r8, r4, #0x1e4 + mov sl, #1 + mov r0, #4 + str r0, [sp, #0xc] + mov r6, #0xa +_021F11C8: + mov r0, r5 + add r1, r4, #0x1f4 + bl FUN_021F5DF8 + ldr r0, _021F1494 ; =0x0220D8D4 + str sl, [sp] + str r0, [sp, #4] + ldr r1, [r4, #0x1d4] + mov r0, r5 + add r2, r4, #0x1f4 + add r3, sp, #0x18 + bl FUN_021F28AC + cmp r0, #0 + addne sp, sp, #0x1c + ldmneia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + add r0, sp, #0x18 + str r0, [sp] + ldr r0, _021F1494 ; =0x0220D8D4 + add r2, r4, #0x1dc + str r0, [sp, #4] + ldr r1, [r4, #0x1d4] + mov r0, r5 + add r3, sp, #0x14 + bl FUN_021F2A2C + cmp r0, #0 + beq _021F1264 + cmp r0, #3 + addne sp, sp, #0x1c + ldmneia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + ldr r2, _021F1498 ; =0x0220D8D8 + mov r0, r5 + mov r1, #5 + bl FUN_021FAF00 + mov r0, r5 + mov r1, #3 + mov r2, #1 + bl FUN_021F3500 + add sp, sp, #0x1c + mov r0, #3 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +_021F1264: + ldr r0, [r4, #0x1dc] + ldr r1, _021F149C ; =0x0220D904 + bl strstr + movs r7, r0 + beq _021F1428 +_021F1278: + strb fp, [r7] + ldr r1, _021F14A0 ; =0x0220D90C + ldr r2, [r4, #0x1dc] + mov r0, r5 + bl FUN_021FB3D0 + ldr r0, [r4, #0x1dc] + sub r1, r7, r0 + str r1, [sp, #0x14] + ldr r0, [r4, #0x1f0] + cmp r1, r0 + ble _021F12EC + cmp r1, #0x800 + ldrlt r1, [sp, #8] + ldr r0, [sb] + add r0, r0, r1 + str r0, [sb] + ldr r1, [r4, #0x1f0] + ldr r0, [r4, #0x1ec] + add r1, r1, #1 + bl FUN_021DD844 + cmp r0, #0 + bne _021F12E8 + ldr r1, _021F14A4 ; =0x0220D918 + mov r0, r5 + bl FUN_021FAEEC + add sp, sp, #0x1c + mov r0, #1 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +_021F12E8: + str r0, [r4, #0x1ec] +_021F12EC: + ldr r2, [sp, #0x14] + ldr r0, [r4, #0x1ec] + ldr r1, [r4, #0x1dc] + add r2, r2, #1 + bl memcpy + ldr r0, [r4, #0x1dc] + add r1, r7, #7 + ldr r2, [r8] + sub r0, r1, r0 + sub r0, r2, r0 + str r0, [r8] + ldr r2, [r4, #0x1e4] + ldr r0, [r4, #0x1dc] + add r2, r2, #1 + bl memmove + ldr r7, [r4, #0x1ec] + ldr r1, _021F14A8 ; =0x0220D928 + mov r0, r7 + bl strstr + cmp r0, #0 + beq _021F1398 + add r0, r0, #4 + bl atol + mov r7, r0 + mov r0, r5 + add r1, sp, #0x10 + mov r2, r7 + bl FUN_021F6C38 + cmp r0, #0 + bne _021F1378 + ldr r1, _021F14AC ; =0x0220D930 + mov r2, r7 + mov r0, r5 + bl FUN_021FB3D0 + b _021F1414 +_021F1378: + mov r0, r5 + ldr r1, [sp, #0x10] + ldr r2, [r4, #0x1ec] + bl FUN_021F6B50 + cmp r0, #0 + beq _021F1414 + add sp, sp, #0x1c + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +_021F1398: + mov r1, r7 + mov r0, r5 + mov r2, sl + bl FUN_021FB2F8 + cmp r0, #0 + addne sp, sp, #0x1c + movne r0, #4 + ldmneia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + ldr r7, [r4, #0x1ec] + ldr r1, _021F14B0 ; =0x0220D958 + ldr r2, [sp, #0xc] + mov r0, r7 + bl strncmp + cmp r0, #0 + bne _021F13F0 + mov r1, r7 + mov r0, r5 + bl FUN_021F1C48 + cmp r0, #0 + beq _021F1414 + add sp, sp, #0x1c + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +_021F13F0: + ldr r1, _021F14B4 ; =0x0220D960 + mov r0, r7 + mov r2, r6 + bl strncmp + cmp r0, #0 + beq _021F1414 + ldr r1, _021F14B8 ; =0x0220D968 + mov r0, r5 + bl FUN_021FB3D0 +_021F1414: + ldr r0, [r4, #0x1dc] + ldr r1, _021F149C ; =0x0220D904 + bl strstr + movs r7, r0 + bne _021F1278 +_021F1428: + ldr r0, [sp, #0x18] + cmp r0, #0 + beq _021F1468 + ldr r2, _021F14BC ; =0x0220D998 + mov r3, #4 + mov r0, r5 + mov r1, #7 + str r3, [r4, #0x1d8] + bl FUN_021FAF00 + mov r0, r5 + mov r1, #3 + mov r2, #1 + bl FUN_021F3500 + add sp, sp, #0x1c + mov r0, #0 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +_021F1468: + mov r0, r5 + bl FUN_021F6BF8 + movs r7, r0 + beq _021F1480 + mov r0, r6 + bl FUN_021F0250 +_021F1480: + cmp r7, #0 + bne _021F11C8 + mov r0, #0 + add sp, sp, #0x1c + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_021F1494: .word 0x0220D8D4 +_021F1498: .word 0x0220D8D8 +_021F149C: .word 0x0220D904 +_021F14A0: .word 0x0220D90C +_021F14A4: .word 0x0220D918 +_021F14A8: .word 0x0220D928 +_021F14AC: .word 0x0220D930 +_021F14B0: .word 0x0220D958 +_021F14B4: .word 0x0220D960 +_021F14B8: .word 0x0220D968 +_021F14BC: .word 0x0220D998 + + arm_func_start FUN_021F14C0 +FUN_021F14C0: ; 0x021F14C0 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #4 + mov r5, r0 + ldr r4, [r5] + mov r1, #0 + strb r1, [r4, #0x110] + strb r1, [r4, #0x12f] + strb r1, [r4, #0x144] + mvn r0, #0 + str r0, [r4, #0x1d4] + str r1, [r4, #0x1d8] + str r1, [r4, #0x1e4] + str r1, [r4, #0x1e8] + str r1, [r4, #0x1e0] + ldr r0, [r4, #0x1dc] + bl FUN_021DD82C + mov r0, #0 + str r0, [r4, #0x1dc] + str r0, [r4, #0x1dc] + str r0, [r4, #0x1f0] + ldr r0, [r4, #0x1ec] + bl FUN_021DD82C + mov r0, #0 + str r0, [r4, #0x1ec] + str r0, [r4, #0x1ec] + str r0, [r4, #0x1fc] + str r0, [r4, #0x200] + str r0, [r4, #0x1f8] + ldr r0, [r4, #0x1f4] + bl FUN_021DD82C + mov r0, #0 + str r0, [r4, #0x1f4] + str r0, [r4, #0x1f4] + str r0, [r4, #0x448] + str r0, [r4, #0x44c] + str r0, [r4, #0x444] + ldr r0, [r4, #0x440] + bl FUN_021DD82C + mov r0, #0 + str r0, [r4, #0x440] + str r0, [r4, #0x440] + str r0, [r4, #0x458] + str r0, [r4, #0x45c] + str r0, [r4, #0x454] + ldr r0, [r4, #0x450] + bl FUN_021DD82C + mov r0, #0 + str r0, [r4, #0x450] + str r0, [r4, #0x450] + mvn r0, #0 + str r0, [r4, #0x204] + mov r0, #2 + str r0, [r4, #0x20c] + ldr r1, [r4, #0x424] + cmp r1, #0 + beq _021F15B4 +_021F15A0: + mov r0, r5 + bl FUN_021F6C84 + ldr r1, [r4, #0x424] + cmp r1, #0 + bne _021F15A0 +_021F15B4: + mov r2, #0 + str r2, [r4, #0x424] + ldr r1, _021F1600 ; =FUN_021F1604 + mov r0, r5 + str r2, [r4, #0x430] + bl FUN_021F848C + mov r0, #0 + str r0, [r4, #0x19c] + str r0, [r4, #0x1a0] + str r0, [r4, #0x198] + str r0, [r4, #0x210] + str r0, [r4, #0x41c] + str r0, [r4, #0x434] + mvn r1, #0 + str r1, [r4, #0x214] + strb r0, [r4, #0x218] + strb r0, [r4, #0x318] + add sp, sp, #4 + ldmia sp!, {r4, r5, pc} + .align 2, 0 +_021F1600: .word FUN_021F1604 + + arm_func_start FUN_021F1604 +FUN_021F1604: ; 0x021F1604 + mov r0, #0 + str r0, [r1, #8] + str r0, [r1, #0x10] + str r0, [r1, #0x14] + str r0, [r1, #0x18] + mov r0, #1 + bx lr + + arm_func_start FUN_021F1620 +FUN_021F1620: ; 0x021F1620 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #4 + mov r5, r0 + ldr r4, [r5] + mov r1, #1 + bl FUN_021F35F4 + ldr r0, [r4, #0x460] + bl FUN_021DD82C + mov r0, #0 + str r0, [r4, #0x460] + ldr r0, [r4, #0x428] + bl FUN_021EF5B0 + mov r0, r4 + bl FUN_021DD82C + mov r0, #0 + str r0, [r5] + add sp, sp, #4 + ldmia sp!, {r4, r5, pc} + + arm_func_start FUN_021F1668 +FUN_021F1668: ; 0x021F1668 + stmdb sp!, {r4, r5, r6, lr} + sub sp, sp, #8 + mov r6, r0 + mov r0, #0 + str r0, [r6] + mov r0, #0x490 + mov r5, r1 + mov r4, r2 + bl FUN_021DD860 + str r0, [sp] + cmp r0, #0 + addeq sp, sp, #8 + moveq r0, #1 + ldmeqia sp!, {r4, r5, r6, pc} + mov r1, #0 + mov r2, #0x490 + bl Call_FillMemWithValue + ldr r0, [sp] + mov r3, #0 + strb r3, [r0] + ldr r0, [sp] + mov r2, #1 + str r3, [r0, #0x418] + ldr r1, [sp] + add r0, sp, #0 + str r2, [r1, #0x100] + ldr r1, [sp] + str r3, [r1, #0x104] + ldr r1, [sp] + str r3, [r1, #0x108] + ldr r1, [sp] + str r3, [r1, #0x10c] + ldr r1, [sp] + str r5, [r1, #0x46c] + ldr r1, [sp] + str r4, [r1, #0x470] + bl FUN_021F8870 + cmp r0, #0 + bne _021F1720 + ldr r0, [sp] + bl FUN_021DD82C + mov r0, #0 + str r0, [sp] + add sp, sp, #8 + mov r0, #1 + ldmia sp!, {r4, r5, r6, pc} +_021F1720: + ldr r0, [sp] + mov r1, #0 + str r1, [r0, #0x420] + mov r3, r1 +_021F1730: + ldr r0, [sp] + add r0, r0, r1, lsl #3 + str r3, [r0, #0x1a4] + ldr r0, [sp] + add r0, r0, r1, lsl #3 + add r1, r1, #1 + str r3, [r0, #0x1a8] + cmp r1, #6 + blt _021F1730 + ldr r2, [sp] + ldr r1, _021F17AC ; =0x0220D9C0 + add r0, sp, #0 + str r3, [r2, #0x460] + bl FUN_021FB3D0 + add r0, sp, #0 + bl FUN_021F14C0 + movs r4, r0 + beq _021F178C + add r0, sp, #0 + bl FUN_021F1620 + add sp, sp, #8 + mov r0, r4 + ldmia sp!, {r4, r5, r6, pc} +_021F178C: + bl FUN_021F024C + bl FUN_021F025C + bl srand + ldr r1, [sp] + mov r0, #0 + str r1, [r6] + add sp, sp, #8 + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +_021F17AC: .word 0x0220D9C0 + + arm_func_start FUN_021F17B0 +FUN_021F17B0: ; 0x021F17B0 + stmdb sp!, {r4, r5, r6, lr} + sub sp, sp, #8 + mov r6, r0 + add r2, sp, #0 + ldr r5, [r6] + bl FUN_021F85E8 + cmp r0, #0 + bne _021F17E8 + ldr r1, _021F1938 ; =0x0220D9E4 + mov r0, r6 + bl FUN_021FAEEC + add sp, sp, #8 + mov r0, #2 + ldmia sp!, {r4, r5, r6, pc} +_021F17E8: + ldr r2, _021F193C ; =0x0220D9F8 + mov r0, r6 + add r1, r5, #0x1f4 + bl FUN_021F2F9C + ldr r2, _021F1940 ; =0x0220DA04 + mov r0, r6 + add r1, r5, #0x1f4 + bl FUN_021F2F9C + ldr r2, [r5, #0x198] + mov r0, r6 + add r1, r5, #0x1f4 + bl FUN_021F2F64 + ldr r2, _021F1944 ; =0x0220DA10 + mov r0, r6 + add r1, r5, #0x1f4 + bl FUN_021F2F9C + mov r0, r6 + add r1, r5, #0x1f4 + ldr r2, [sp] + ldr r2, [r2] + bl FUN_021F2F64 + mov r0, r6 + add r1, r5, #0x1f4 + ldr r2, _021F1948 ; =0x0220DA20 + bl FUN_021F2F9C + ldr r0, [sp] + ldr r0, [r0, #8] + cmp r0, #0 + beq _021F192C + ldr r4, [r0] + cmp r4, #0 + bge _021F187C + ldr r0, _021F194C ; =0x0220DA28 + ldr r1, _021F1950 ; =0x0220DA34 + ldr r3, _021F1954 ; =0x000001FD + mov r2, #0 + bl __msl_assertion_failed +_021F187C: + ldr r0, [sp] + ldr r0, [r0, #8] + ldr r0, [r0, #8] + bl FUN_021DD82C + ldr r0, [sp] + mov r1, #0 + ldr r0, [r0, #8] + str r1, [r0, #8] + ldr r0, [sp] + ldr r0, [r0, #8] + ldr r0, [r0, #0xc] + bl FUN_021DD82C + ldr r0, [sp] + mov r1, #0 + ldr r0, [r0, #8] + str r1, [r0, #0xc] + ldr r0, [sp] + ldr r0, [r0, #8] + bl FUN_021DD82C + ldr r0, [sp] + mov r1, #0 + str r1, [r0, #8] + ldr r0, [sp] + bl FUN_021F83EC + cmp r0, #0 + beq _021F18F0 + ldr r1, [sp] + mov r0, r6 + bl FUN_021F85A0 +_021F18F0: + ldr r0, [r5, #0x430] + sub r0, r0, #1 + str r0, [r5, #0x430] + ldr r0, [r5, #0x430] + cmp r0, #0 + bge _021F191C + ldr r0, _021F1958 ; =0x0220DA40 + ldr r1, _021F1950 ; =0x0220DA34 + mov r2, #0 + mov r3, #0x204 + bl __msl_assertion_failed +_021F191C: + ldr r1, _021F195C ; =FUN_021F1960 + mov r0, r6 + mov r2, r4 + bl FUN_021F848C +_021F192C: + mov r0, #0 + add sp, sp, #8 + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +_021F1938: .word 0x0220D9E4 +_021F193C: .word 0x0220D9F8 +_021F1940: .word 0x0220DA04 +_021F1944: .word 0x0220DA10 +_021F1948: .word 0x0220DA20 +_021F194C: .word 0x0220DA28 +_021F1950: .word 0x0220DA34 +_021F1954: .word 0x000001FD +_021F1958: .word 0x0220DA40 +_021F195C: .word FUN_021F1960 + + arm_func_start FUN_021F1960 +FUN_021F1960: ; 0x021F1960 + ldr r1, [r1, #8] + cmp r1, #0 + beq _021F197C + ldr r0, [r1] + cmp r0, r2 + subgt r0, r0, #1 + strgt r0, [r1] +_021F197C: + mov r0, #1 + bx lr + + arm_func_start FUN_021F1984 +FUN_021F1984: ; 0x021F1984 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #4 + mov r4, r0 + add r2, sp, #0 + ldr r5, [r4] + bl FUN_021F85E8 + cmp r0, #0 + bne _021F19BC + ldr r1, _021F1A60 ; =0x0220D9E4 + mov r0, r4 + bl FUN_021FAEEC + add sp, sp, #4 + mov r0, #2 + ldmia sp!, {r4, r5, pc} +_021F19BC: + ldr r1, [sp] + ldr r0, [r1, #0x10] + cmp r0, #0 + bne _021F19E4 + ldr r1, _021F1A60 ; =0x0220D9E4 + mov r0, r4 + bl FUN_021FAEEC + add sp, sp, #4 + mov r0, #2 + ldmia sp!, {r4, r5, pc} +_021F19E4: + mov r0, r4 + bl FUN_021F265C + cmp r0, #0 + addne sp, sp, #4 + ldmneia sp!, {r4, r5, pc} + ldr r1, [sp] + ldr r0, [r1, #0x14] + sub r0, r0, #1 + str r0, [r1, #0x14] + ldr r0, [r5, #0x100] + cmp r0, #0 + bne _021F1A54 + ldr r1, [sp] + ldr r0, [r1, #0x14] + cmp r0, #0 + bgt _021F1A54 + ldr r0, [r1, #0x10] + bl FUN_021DD82C + ldr r0, [sp] + mov r1, #0 + str r1, [r0, #0x10] + ldr r0, [sp] + bl FUN_021F83EC + cmp r0, #0 + beq _021F1A54 + ldr r1, [sp] + mov r0, r4 + bl FUN_021F85A0 +_021F1A54: + mov r0, #0 + add sp, sp, #4 + ldmia sp!, {r4, r5, pc} + .align 2, 0 +_021F1A60: .word 0x0220D9E4 + + arm_func_start FUN_021F1A64 +FUN_021F1A64: ; 0x021F1A64 + stmdb sp!, {r4, r5, r6, r7, r8, lr} + sub sp, sp, #8 + mov r7, r0 + mov r6, r1 + mov r5, r2 + mov r4, r3 + bl FUN_021F7720 + movs r8, r0 + bne _021F1B3C + add r2, sp, #0 + mov r0, r7 + mov r1, r6 + bl FUN_021F85E8 + cmp r0, #0 + beq _021F1ABC + ldr r0, [sp] + ldr r0, [r0, #8] + cmp r0, #0 + beq _021F1ABC + ldr r0, [r0, #0x14] + cmp r0, #0 + bne _021F1AD8 +_021F1ABC: + mov r0, r7 + mov r1, r6 + mov r2, r5 + mov r3, r4 + bl FUN_021F1B60 + add sp, sp, #8 + ldmia sp!, {r4, r5, r6, r7, r8, pc} +_021F1AD8: + mov r0, r7 + mov r1, r6 + mov r2, #1 + bl FUN_021F7674 + movs r8, r0 + addeq sp, sp, #8 + moveq r0, #1 + ldmeqia sp!, {r4, r5, r6, r7, r8, pc} + ldr r0, [sp] + ldr r0, [r0, #0x18] + cmp r0, #0 + bne _021F1B24 + mov r0, r7 + mov r1, r8 + bl FUN_021F7610 + cmp r0, #0 + beq _021F1B3C + add sp, sp, #8 + ldmia sp!, {r4, r5, r6, r7, r8, pc} +_021F1B24: + mov r0, r7 + mov r1, r8 + bl FUN_021F7478 + cmp r0, #0 + addne sp, sp, #8 + ldmneia sp!, {r4, r5, r6, r7, r8, pc} +_021F1B3C: + mov r0, r7 + mov r1, r8 + mov r2, r5 + mov r3, r4 + bl FUN_021F72EC + cmp r0, #0 + moveq r0, #0 + add sp, sp, #8 + ldmia sp!, {r4, r5, r6, r7, r8, pc} + + arm_func_start FUN_021F1B60 +FUN_021F1B60: ; 0x021F1B60 + stmdb sp!, {r4, r5, r6, r7, lr} + ldr ip, _021F1C2C ; =0x00000DB4 + sub sp, sp, ip + mov r7, r0 + mov r5, r2 + mov r6, r1 + ldr r2, _021F1C30 ; =0x00000DAD + add r0, sp, #0 + mov r1, r3 + ldr r4, [r7] + bl FUN_021FB3DC + ldr r2, _021F1C34 ; =0x0220DA6C + mov r0, r7 + add r1, r4, #0x1f4 + bl FUN_021F2F9C + mov r0, r7 + mov r2, r5 + add r1, r4, #0x1f4 + bl FUN_021F2F64 + ldr r2, _021F1C38 ; =0x0220DA04 + mov r0, r7 + add r1, r4, #0x1f4 + bl FUN_021F2F9C + ldr r2, [r4, #0x198] + mov r0, r7 + add r1, r4, #0x1f4 + bl FUN_021F2F64 + ldr r2, _021F1C3C ; =0x0220DA74 + mov r0, r7 + add r1, r4, #0x1f4 + bl FUN_021F2F9C + mov r2, r6 + mov r0, r7 + add r1, r4, #0x1f4 + bl FUN_021F2F64 + ldr r2, _021F1C40 ; =0x0220DA78 + mov r0, r7 + add r1, r4, #0x1f4 + bl FUN_021F2F9C + mov r0, r7 + add r1, r4, #0x1f4 + add r2, sp, #0 + bl FUN_021F2F9C + ldr r2, _021F1C44 ; =0x0220DA20 + mov r0, r7 + add r1, r4, #0x1f4 + bl FUN_021F2F9C + mov r0, #0 + ldr ip, _021F1C2C ; =0x00000DB4 + add sp, sp, ip + ldmia sp!, {r4, r5, r6, r7, pc} + .align 2, 0 +_021F1C2C: .word 0x00000DB4 +_021F1C30: .word 0x00000DAD +_021F1C34: .word 0x0220DA6C +_021F1C38: .word 0x0220DA04 +_021F1C3C: .word 0x0220DA74 +_021F1C40: .word 0x0220DA78 +_021F1C44: .word 0x0220DA20 + + arm_func_start FUN_021F1C48 +FUN_021F1C48: ; 0x021F1C48 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + ldr ip, _021F2618 ; =0x0000113C + sub sp, sp, ip + mov r4, r1 + mov sl, r0 + ldr r1, _021F261C ; =0x0220DA6C + add r2, sp, #0x38 + mov r0, r4 + mov r3, #0x1000 + ldr r6, [sl] + bl FUN_021FB1F0 + cmp r0, #0 + bne _021F1CAC + ldr r2, _021F2620 ; =0x0220DA80 + mov r0, sl + mov r1, #1 + bl FUN_021FAF00 + mov r0, sl + mov r1, #3 + mov r2, #1 + bl FUN_021F3500 + ldr ip, _021F2618 ; =0x0000113C + mov r0, #3 + add sp, sp, ip + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +_021F1CAC: + add r0, sp, #0x38 + bl atol + mov r5, r0 + ldr r1, _021F2624 ; =0x0220DAB0 + add r2, sp, #0x38 + mov r0, r4 + mov r3, #0x1000 + bl FUN_021FB1F0 + cmp r0, #0 + bne _021F1D04 + ldr r2, _021F2620 ; =0x0220DA80 + mov r0, sl + mov r1, #1 + bl FUN_021FAF00 + mov r0, sl + mov r1, #3 + mov r2, #1 + bl FUN_021F3500 + ldr ip, _021F2618 ; =0x0000113C + mov r0, #3 + add sp, sp, ip + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +_021F1D04: + add r0, sp, #0x38 + bl atol + mov r8, r0 + ldr r1, _021F2628 ; =0x0220DAB4 + add r2, sp, #0x38 + mov r0, r4 + mov r3, #0x1000 + bl FUN_021FB1F0 + cmp r0, #0 + beq _021F1D3C + add r0, sp, #0x38 + bl atol + mov sb, r0 + b _021F1D48 +_021F1D3C: + mov r0, #0 + bl FUN_021EFAC8 + mov sb, r0 +_021F1D48: + cmp r5, #0x64 + bgt _021F1D7C + cmp r5, #0x64 + bge _021F2078 + cmp r5, #2 + bgt _021F2608 + cmp r5, #1 + blt _021F2608 + cmp r5, #1 + beq _021F1DA0 + cmp r5, #2 + beq _021F1EB4 + b _021F2608 +_021F1D7C: + cmp r5, #0x66 + bgt _021F2608 + cmp r5, #0x65 + blt _021F2608 + cmp r5, #0x65 + beq _021F2408 + cmp r5, #0x66 + beq _021F25A8 + b _021F2608 +_021F1DA0: + ldr r1, [r6, #0x1bc] + ldr r0, [r6, #0x1c0] + cmp r1, #0 + str r1, [sp, #8] + str r0, [sp, #0xc] + beq _021F2608 + mov r0, #0xc + bl FUN_021DD860 + movs r5, r0 + bne _021F1DE4 + ldr r1, _021F262C ; =0x0220DABC + mov r0, sl + bl FUN_021FAEEC + ldr ip, _021F2618 ; =0x0000113C + mov r0, #1 + add sp, sp, ip + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +_021F1DE4: + ldr r1, _021F2630 ; =0x0220DA78 + add r2, sp, #0x38 + mov r0, r4 + mov r3, #0x1000 + bl FUN_021FB1F0 + cmp r0, #0 + bne _021F1E30 + ldr r2, _021F2620 ; =0x0220DA80 + mov r0, sl + mov r1, #1 + bl FUN_021FAF00 + mov r0, sl + mov r1, #3 + mov r2, #1 + bl FUN_021F3500 + ldr ip, _021F2618 ; =0x0000113C + mov r0, #3 + add sp, sp, ip + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +_021F1E30: + add r0, sp, #0x38 + bl strlen + add r0, r0, #1 + bl FUN_021DD860 + str r0, [r5, #8] + ldr r0, [r5, #8] + cmp r0, #0 + bne _021F1E6C + ldr r1, _021F262C ; =0x0220DABC + mov r0, sl + bl FUN_021FAEEC + ldr ip, _021F2618 ; =0x0000113C + mov r0, #1 + add sp, sp, ip + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +_021F1E6C: + add r1, sp, #0x38 + bl strcpy + str r8, [r5] + str sb, [r5, #4] + mov r0, #0 + str r0, [sp] + mov r0, #2 + str r0, [sp, #4] + add r1, sp, #8 + mov r0, sl + mov r3, r5 + ldmia r1, {r1, r2} + bl FUN_021F3454 + cmp r0, #0 + beq _021F2608 + ldr ip, _021F2618 ; =0x0000113C + add sp, sp, ip + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +_021F1EB4: + mov r0, sl + mov r1, r8 + bl FUN_021F8624 + movs r5, r0 + bne _021F1EE4 + ldr r1, _021F262C ; =0x0220DABC + mov r0, sl + bl FUN_021FAEEC + ldr ip, _021F2618 ; =0x0000113C + mov r0, #1 + add sp, sp, ip + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +_021F1EE4: + ldr r1, _021F2630 ; =0x0220DA78 + add r2, sp, #0x38 + mov r0, r4 + mov r3, #0x1000 + bl FUN_021FB1F0 + cmp r0, #0 + bne _021F1F30 + ldr r2, _021F2620 ; =0x0220DA80 + mov r0, sl + mov r1, #1 + bl FUN_021FAF00 + mov r0, sl + mov r1, #3 + mov r2, #1 + bl FUN_021F3500 + ldr ip, _021F2618 ; =0x0000113C + mov r0, #3 + add sp, sp, ip + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +_021F1F30: + ldr r1, _021F2634 ; =0x0220DACC + add r0, sp, #0x38 + bl strstr + movs r4, r0 + bne _021F1F74 + ldr r2, _021F2620 ; =0x0220DA80 + mov r0, sl + mov r1, #1 + bl FUN_021FAF00 + mov r0, sl + mov r1, #3 + mov r2, #1 + bl FUN_021F3500 + ldr ip, _021F2618 ; =0x0000113C + mov r0, #3 + add sp, sp, ip + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +_021F1F74: + mov r1, #0 + add r0, r4, #8 + strb r1, [r4] + bl strlen + cmp r0, #0x20 + beq _021F1FBC + ldr r2, _021F2620 ; =0x0220DA80 + mov r0, sl + mov r1, #1 + bl FUN_021FAF00 + mov r0, sl + mov r1, #3 + mov r2, #1 + bl FUN_021F3500 + ldr ip, _021F2618 ; =0x0000113C + mov r0, #3 + add sp, sp, ip + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +_021F1FBC: + ldr r0, [r5, #0x10] + bl FUN_021DD82C + mov r0, #0 + str r0, [r5, #0x10] + add r0, r4, #8 + bl FUN_021F0208 + str r0, [r5, #0x10] + ldr r0, [r5, #0x14] + add r0, r0, #1 + str r0, [r5, #0x14] + ldr r1, [r6, #0x1ac] + ldr r0, [r6, #0x1b0] + cmp r1, #0 + str r1, [sp, #0x20] + str r0, [sp, #0x24] + beq _021F2608 + ldr r0, _021F2638 ; =0x0000040C + bl FUN_021DD860 + movs r4, r0 + bne _021F2028 + ldr r1, _021F262C ; =0x0220DABC + mov r0, sl + bl FUN_021FAEEC + ldr ip, _021F2618 ; =0x0000113C + mov r0, #1 + add sp, sp, ip + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +_021F2028: + ldr r2, _021F263C ; =0x00000401 + add r1, sp, #0x38 + add r0, r4, #8 + bl FUN_021FB3DC + str r8, [r4] + str sb, [r4, #4] + mov r0, #0 + str r0, [sp] + mov r0, #6 + str r0, [sp, #4] + add r1, sp, #0x20 + mov r0, sl + mov r3, r4 + ldmia r1, {r1, r2} + bl FUN_021F3454 + cmp r0, #0 + beq _021F2608 + ldr ip, _021F2618 ; =0x0000113C + add sp, sp, ip + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +_021F2078: + mov r0, sl + mov r1, r8 + bl FUN_021F8624 + movs r5, r0 + bne _021F20A8 + ldr r1, _021F262C ; =0x0220DABC + mov r0, sl + bl FUN_021FAEEC + ldr ip, _021F2618 ; =0x0000113C + mov r0, #1 + add sp, sp, ip + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +_021F20A8: + ldr r0, [r5, #8] + cmp r0, #0 + bne _021F211C + mov r0, #0x18 + bl FUN_021DD860 + str r0, [r5, #8] + ldr r2, [r5, #8] + cmp r2, #0 + bne _021F20E8 + ldr r1, _021F262C ; =0x0220DABC + mov r0, sl + bl FUN_021FAEEC + ldr ip, _021F2618 ; =0x0000113C + mov r0, #1 + add sp, sp, ip + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +_021F20E8: + mov r1, #6 + mov r0, #0 +_021F20F0: + strb r0, [r2], #1 + strb r0, [r2], #1 + strb r0, [r2], #1 + strb r0, [r2], #1 + subs r1, r1, #1 + bne _021F20F0 + ldr r1, [r6, #0x430] + add r0, r1, #1 + str r0, [r6, #0x430] + ldr r0, [r5, #8] + str r1, [r0] +_021F211C: + ldr r1, _021F2630 ; =0x0220DA78 + add r2, sp, #0x38 + mov r0, r4 + mov r3, #0x1000 + ldr r7, [r5, #8] + bl FUN_021FB1F0 + cmp r0, #0 + bne _021F216C + ldr r2, _021F2620 ; =0x0220DA80 + mov r0, sl + mov r1, #1 + bl FUN_021FAF00 + mov r0, sl + mov r1, #3 + mov r2, #1 + bl FUN_021F3500 + ldr ip, _021F2618 ; =0x0000113C + mov r0, #3 + add sp, sp, ip + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +_021F216C: + ldr r1, _021F2640 ; =0x0220DAD8 + add r0, sp, #0x38 + add r2, sp, #0x28 + mov r3, #0x10 + bl FUN_021FB1F0 + cmp r0, #0 + bne _021F21B8 + ldr r2, _021F2620 ; =0x0220DA80 + mov r0, sl + mov r1, #1 + bl FUN_021FAF00 + mov r0, sl + mov r1, #3 + mov r2, #1 + bl FUN_021F3500 + ldr ip, _021F2618 ; =0x0000113C + mov r0, #3 + add sp, sp, ip + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +_021F21B8: + add r0, sp, #0x28 + bl atol + str r0, [r7, #4] + ldr r0, [r7, #8] + bl FUN_021DD82C + mov r0, #0 + add r2, sp, #0x1000 + str r0, [r7, #8] + ldr r1, _021F2644 ; =0x0220DADC + add r0, sp, #0x38 + add r2, r2, #0x38 + mov r3, #0x100 + bl FUN_021FB1F0 + cmp r0, #0 + addeq r0, sp, #0x1000 + moveq r1, #0 + addeq r0, r0, #8 + streqb r1, [r0, #0x30] + add r0, sp, #0x1000 + add r0, r0, #0x38 + bl FUN_021F0208 + str r0, [r7, #8] + ldr r0, [r7, #8] + cmp r0, #0 + bne _021F2238 + ldr r1, _021F262C ; =0x0220DABC + mov r0, sl + bl FUN_021FAEEC + ldr ip, _021F2618 ; =0x0000113C + mov r0, #1 + add sp, sp, ip + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +_021F2238: + ldr r0, [r7, #0xc] + bl FUN_021DD82C + add r2, sp, #0x1000 + mov r4, #0 + ldr r1, _021F2648 ; =0x0220DAE4 + add r0, sp, #0x38 + add r2, r2, #0x38 + mov r3, #0x100 + str r4, [r7, #0xc] + bl FUN_021FB1F0 + cmp r0, #0 + addeq r0, sp, #0x1000 + moveq r1, r4 + addeq r0, r0, #8 + streqb r1, [r0, #0x30] + add r0, sp, #0x1000 + add r0, r0, #0x38 + bl FUN_021F0208 + str r0, [r7, #0xc] + ldr r0, [r7, #0xc] + cmp r0, #0 + bne _021F22AC + ldr r1, _021F262C ; =0x0220DABC + mov r0, sl + bl FUN_021FAEEC + ldr ip, _021F2618 ; =0x0000113C + mov r0, #1 + add sp, sp, ip + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +_021F22AC: + ldr r1, _021F264C ; =0x0220DAEC + add r0, sp, #0x38 + add r2, sp, #0x28 + mov r3, #0x10 + bl FUN_021FB1F0 + cmp r0, #0 + moveq r0, #0 + streq r0, [r7, #0x10] + beq _021F232C + add r0, sp, #0x28 + bl atol + mov r5, r0 + add r0, sp, #0x28 + bl atol + mov r4, r0 + add r0, sp, #0x28 + bl atol + mov fp, r0 + add r0, sp, #0x28 + bl atol + mov r1, fp, lsr #0x18 + mov r0, r0, lsr #8 + mov r2, r4, lsl #8 + and r1, r1, #0xff + and r0, r0, #0xff00 + mov r3, r5, lsl #0x18 + orr r0, r1, r0 + and r2, r2, #0xff0000 + and r1, r3, #0xff000000 + orr r0, r2, r0 + orr r0, r1, r0 + str r0, [r7, #0x10] +_021F232C: + ldr r1, _021F2650 ; =0x0220DAF4 + add r0, sp, #0x38 + add r2, sp, #0x28 + mov r3, #0x10 + bl FUN_021FB1F0 + cmp r0, #0 + moveq r0, #0 + streq r0, [r7, #0x14] + beq _021F2380 + add r0, sp, #0x28 + bl atol + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + mov r1, r0, asr #8 + mov r0, r0, lsl #8 + and r1, r1, #0xff + and r0, r0, #0xff00 + orr r0, r1, r0 + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + str r0, [r7, #0x14] +_021F2380: + ldr r1, [r6, #0x1b4] + ldr r0, [r6, #0x1b8] + cmp r1, #0 + str r1, [sp, #0x18] + str r0, [sp, #0x1c] + beq _021F2608 + mov r0, #0xc + bl FUN_021DD860 + movs r3, r0 + bne _021F23C4 + ldr r1, _021F262C ; =0x0220DABC + mov r0, sl + bl FUN_021FAEEC + ldr ip, _021F2618 ; =0x0000113C + mov r0, #1 + add sp, sp, ip + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +_021F23C4: + str r8, [r3] + ldr r1, [r7] + mov r0, #0 + str r1, [r3, #8] + str sb, [r3, #4] + str r0, [sp] + mov r0, #5 + str r0, [sp, #4] + add r1, sp, #0x18 + mov r0, sl + ldmia r1, {r1, r2} + bl FUN_021F3454 + cmp r0, #0 + beq _021F2608 + ldr ip, _021F2618 ; =0x0000113C + add sp, sp, ip + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +_021F2408: + ldr r1, _021F2630 ; =0x0220DA78 + add r2, sp, #0x38 + mov r0, r4 + mov r3, #0x1000 + bl FUN_021FB1F0 + cmp r0, #0 + bne _021F2454 + ldr r2, _021F2620 ; =0x0220DA80 + mov r0, sl + mov r1, #1 + bl FUN_021FAF00 + mov r0, sl + mov r1, #3 + mov r2, #1 + bl FUN_021F3500 + ldr ip, _021F2618 ; =0x0000113C + mov r0, #3 + add sp, sp, ip + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +_021F2454: + ldr r1, _021F2650 ; =0x0220DAF4 + add r0, sp, #0x38 + bl strstr + cmp r0, #0 + bne _021F2498 + ldr r2, _021F2620 ; =0x0220DA80 + mov r0, sl + mov r1, #1 + bl FUN_021FAF00 + mov r0, sl + mov r1, #3 + mov r2, #1 + bl FUN_021F3500 + ldr ip, _021F2618 ; =0x0000113C + mov r0, #3 + add sp, sp, ip + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +_021F2498: + ldrsb r1, [r0, #3] + cmp r1, #0 + bne _021F24D4 + ldr r2, _021F2620 ; =0x0220DA80 + mov r0, sl + mov r1, #1 + bl FUN_021FAF00 + mov r0, sl + mov r1, #3 + mov r2, #1 + bl FUN_021F3500 + ldr ip, _021F2618 ; =0x0000113C + mov r0, #3 + add sp, sp, ip + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +_021F24D4: + add r0, r0, #3 + bl atol + mov r4, r0 + ldr r1, _021F2654 ; =0x0220DAF8 + add r0, sp, #0x38 + bl strstr + movs r1, r0 + addeq r0, sp, #0x1000 + moveq r1, #0 + addeq r0, r0, #8 + streqb r1, [r0, #0x30] + beq _021F2518 + add r0, sp, #0x1000 + add r0, r0, #0x38 + add r1, r1, #3 + mov r2, #0x100 + bl FUN_021FB3DC +_021F2518: + ldr r1, [r6, #0x1c4] + ldr r0, [r6, #0x1c8] + cmp r1, #0 + str r1, [sp, #0x10] + str r0, [sp, #0x14] + beq _021F2608 + mov r0, #0x108 + bl FUN_021DD860 + movs r5, r0 + bne _021F255C + ldr r1, _021F262C ; =0x0220DABC + mov r0, sl + bl FUN_021FAEEC + ldr ip, _021F2618 ; =0x0000113C + mov r0, #1 + add sp, sp, ip + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +_021F255C: + add r1, sp, #0x1000 + str r8, [r5] + add r1, r1, #0x38 + add r0, r5, #8 + str r4, [r5, #4] + bl strcpy + mov r0, #0 + str r0, [sp] + str r0, [sp, #4] + add r1, sp, #0x10 + mov r0, sl + mov r3, r5 + ldmia r1, {r1, r2} + bl FUN_021F3454 + cmp r0, #0 + beq _021F2608 + ldr ip, _021F2618 ; =0x0000113C + add sp, sp, ip + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +_021F25A8: + ldr r1, _021F2630 ; =0x0220DA78 + add r2, sp, #0x38 + mov r0, r4 + mov r3, #0x1000 + bl FUN_021FB1F0 + cmp r0, #0 + bne _021F25F4 + ldr r2, _021F2620 ; =0x0220DA80 + mov r0, sl + mov r1, #1 + bl FUN_021FAF00 + mov r0, sl + mov r1, #3 + mov r2, #1 + bl FUN_021F3500 + ldr ip, _021F2618 ; =0x0000113C + mov r0, #3 + add sp, sp, ip + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +_021F25F4: + ldr r3, _021F2658 ; =0x0220DAFC + mov r0, sl + mov r1, r8 + mov r2, #0x67 + bl FUN_021F1A64 +_021F2608: + mov r0, #0 + ldr ip, _021F2618 ; =0x0000113C + add sp, sp, ip + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_021F2618: .word 0x0000113C +_021F261C: .word 0x0220DA6C +_021F2620: .word 0x0220DA80 +_021F2624: .word 0x0220DAB0 +_021F2628: .word 0x0220DAB4 +_021F262C: .word 0x0220DABC +_021F2630: .word 0x0220DA78 +_021F2634: .word 0x0220DACC +_021F2638: .word 0x0000040C +_021F263C: .word 0x00000401 +_021F2640: .word 0x0220DAD8 +_021F2644: .word 0x0220DADC +_021F2648: .word 0x0220DAE4 +_021F264C: .word 0x0220DAEC +_021F2650: .word 0x0220DAF4 +_021F2654: .word 0x0220DAF8 +_021F2658: .word 0x0220DAFC + + arm_func_start FUN_021F265C +FUN_021F265C: ; 0x021F265C + stmdb sp!, {r4, r5, r6, lr} + mov r6, r0 + ldr r4, [r6] + ldr r2, _021F26F0 ; =0x0220DB00 + mov r5, r1 + add r1, r4, #0x1f4 + bl FUN_021F2F9C + ldr r2, _021F26F4 ; =0x0220DA04 + mov r0, r6 + add r1, r4, #0x1f4 + bl FUN_021F2F9C + ldr r2, [r4, #0x198] + mov r0, r6 + add r1, r4, #0x1f4 + bl FUN_021F2F64 + ldr r2, _021F26F8 ; =0x0220DB0C + mov r0, r6 + add r1, r4, #0x1f4 + bl FUN_021F2F9C + mov r0, r6 + add r1, r4, #0x1f4 + ldr r2, [r5] + bl FUN_021F2F64 + mov r0, r6 + add r1, r4, #0x1f4 + ldr r2, _021F26FC ; =0x0220DB1C + bl FUN_021F2F9C + ldr r2, [r5, #0x10] + mov r0, r6 + add r1, r4, #0x1f4 + bl FUN_021F2F9C + mov r0, r6 + add r1, r4, #0x1f4 + ldr r2, _021F2700 ; =0x0220DA20 + bl FUN_021F2F9C + mov r0, #0 + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +_021F26F0: .word 0x0220DB00 +_021F26F4: .word 0x0220DA04 +_021F26F8: .word 0x0220DB0C +_021F26FC: .word 0x0220DB1C +_021F2700: .word 0x0220DA20 + + arm_func_start FUN_021F2704 +FUN_021F2704: ; 0x021F2704 + stmdb sp!, {r4, lr} + movs r4, r1 + beq _021F2728 + ldr r0, [r4] + cmp r0, #0 + beq _021F2728 + ldr r1, [r4, #0xc] + cmp r1, #0 + bne _021F2730 +_021F2728: + mov r0, #0 + ldmia sp!, {r4, pc} +_021F2730: + ldr r0, [r4, #8] + sub r0, r0, r1 + str r0, [r4, #8] + ldr r2, [r4, #8] + cmp r2, #0 + beq _021F2758 + ldr r0, [r4] + ldr r1, [r4, #0xc] + add r1, r0, r1 + bl memmove +_021F2758: + ldr r2, [r4] + ldr r1, [r4, #8] + mov r0, #0 + strb r0, [r2, r1] + str r0, [r4, #0xc] + ldmia sp!, {r4, pc} + + arm_func_start FUN_021F2770 +FUN_021F2770: ; 0x021F2770 + stmdb sp!, {r4, r5, r6, r7, lr} + sub sp, sp, #0x14 + mov r5, r2 + mov r0, #0 + mov r6, r1 + str r0, [r5] + ldr r1, [r6, #8] + mov r7, r3 + cmp r1, #5 + addlt sp, sp, #0x14 + ldmltia sp!, {r4, r5, r6, r7, pc} + ldr r0, [r6] + mov r1, #0xa + bl strchr + movs r4, r0 + beq _021F2894 + ldr r1, _021F28A0 ; =0x0220DB24 + sub r0, r4, #5 + mov r2, #5 + bl strncmp + cmp r0, #0 + addne sp, sp, #0x14 + movne r0, #3 + ldmneia sp!, {r4, r5, r6, r7, pc} + mov r0, #0 + strb r0, [r4] + ldr r0, [r6] + ldr r1, _021F28A4 ; =0x0220DB2C + add r2, sp, #0 + mov r3, #0x10 + bl FUN_021FB1F0 + cmp r0, #0 + addeq sp, sp, #0x14 + moveq r0, #3 + ldmeqia sp!, {r4, r5, r6, r7, pc} + add r0, sp, #0 + bl atol + str r0, [r7] + ldr r0, [r6] + ldr r1, _021F28A8 ; =0x0220DB30 + add r2, sp, #0 + mov r3, #0x10 + bl FUN_021FB1F0 + cmp r0, #0 + addeq sp, sp, #0x14 + moveq r0, #3 + ldmeqia sp!, {r4, r5, r6, r7, pc} + add r0, sp, #0 + bl atol + ldr r2, [r6] + add r1, r0, #1 + sub r2, r4, r2 + ldr r3, [r6, #8] + add r2, r1, r2 + cmp r3, r2 + ble _021F288C + ldrsb r2, [r4, r1] + cmp r2, #0 + addne sp, sp, #0x14 + movne r0, #3 + ldmneia sp!, {r4, r5, r6, r7, pc} + add r3, r4, #1 + ldr r2, [sp, #0x28] + str r3, [r5] + str r0, [r2] + ldr r0, [r6] + sub r0, r4, r0 + add r0, r1, r0 + add r0, r0, #1 + str r0, [r6, #0xc] + b _021F2894 +_021F288C: + mov r0, #0xa + strb r0, [r4] +_021F2894: + mov r0, #0 + add sp, sp, #0x14 + ldmia sp!, {r4, r5, r6, r7, pc} + .align 2, 0 +_021F28A0: .word 0x0220DB24 +_021F28A4: .word 0x0220DB2C +_021F28A8: .word 0x0220DB30 + + arm_func_start FUN_021F28AC +FUN_021F28AC: ; 0x021F28AC + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x1c + mov sl, r0 + str r2, [sp, #0xc] + mov sb, r1 + str r3, [sp, #0x10] + movs r0, r2 + ldr r8, [sp, #0x44] + bne _021F28E4 + ldr r0, _021F2A0C ; =0x0220DB38 + ldr r1, _021F2A10 ; =0x0220DB50 + ldr r3, _021F2A14 ; =0x000001B9 + mov r2, #0 + bl __msl_assertion_failed +_021F28E4: + ldr r0, [sp, #0xc] + mov r7, #0 + ldr fp, [r0, #8] + ldr r4, [r0, #0xc] + ldr r5, [r0] + subs r6, fp, r4 + addeq sp, sp, #0x1c + moveq r0, r7 + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +_021F2908: + add r1, sp, #0x14 + str r1, [sp] + add r0, sp, #0x18 + str r0, [sp, #4] + add r2, r4, r7 + mov r0, sl + mov r1, sb + mov r3, r6 + add r2, r5, r2 + str r8, [sp, #8] + bl FUN_021F2E68 + cmp r0, #0 + addne sp, sp, #0x1c + ldmneia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + ldr r0, [sp, #0x18] + cmp r0, #0 + addne r7, r7, r0 + subne r6, r6, r0 + cmp r0, #0 + beq _021F2960 + cmp r6, #0 + bne _021F2908 +_021F2960: + ldr r0, [sp, #0x40] + cmp r0, #0 + beq _021F298C + cmp r7, #0 + ble _021F2990 + mov r0, r5 + add r1, r5, r7 + add r2, r6, #1 + bl memmove + sub fp, fp, r7 + b _021F2990 +_021F298C: + add r4, r4, r7 +_021F2990: + cmp fp, #0 + bge _021F29AC + ldr r0, _021F2A18 ; =0x0220DB5C + ldr r1, _021F2A10 ; =0x0220DB50 + ldr r3, _021F2A1C ; =0x000001DE + mov r2, #0 + bl __msl_assertion_failed +_021F29AC: + cmp r4, #0 + bge _021F29C8 + ldr r0, _021F2A20 ; =0x0220DB68 + ldr r1, _021F2A10 ; =0x0220DB50 + ldr r3, _021F2A24 ; =0x000001DF + mov r2, #0 + bl __msl_assertion_failed +_021F29C8: + cmp r4, fp + ble _021F29E4 + ldr r0, _021F2A28 ; =0x0220DB74 + ldr r1, _021F2A10 ; =0x0220DB50 + mov r2, #0 + mov r3, #0x1e0 + bl __msl_assertion_failed +_021F29E4: + ldr r0, [sp, #0xc] + str fp, [r0, #8] + str r4, [r0, #0xc] + ldr r0, [sp, #0x10] + cmp r0, #0 + ldrne r1, [sp, #0x14] + strne r1, [r0] + mov r0, #0 + add sp, sp, #0x1c + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_021F2A0C: .word 0x0220DB38 +_021F2A10: .word 0x0220DB50 +_021F2A14: .word 0x000001B9 +_021F2A18: .word 0x0220DB5C +_021F2A1C: .word 0x000001DE +_021F2A20: .word 0x0220DB68 +_021F2A24: .word 0x000001DF +_021F2A28: .word 0x0220DB74 + + arm_func_start FUN_021F2A2C +FUN_021F2A2C: ; 0x021F2A2C + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x14 + mov fp, r0 + ldr r0, [sp, #0x3c] + mov sl, r1 + mvn r1, #0 + str r2, [sp] + str r3, [sp, #4] + cmp sl, r1 + str r0, [sp, #0x3c] + bne _021F2A6C + ldr r0, _021F2C28 ; =0x0220DB80 + ldr r1, _021F2C2C ; =0x0220DB50 + mov r2, #0 + mov r3, #0x150 + bl __msl_assertion_failed +_021F2A6C: + ldr r0, [sp] + cmp r0, #0 + bne _021F2A8C + ldr r0, _021F2C30 ; =0x0220DB98 + ldr r1, _021F2C2C ; =0x0220DB50 + ldr r3, _021F2C34 ; =0x00000151 + mov r2, #0 + bl __msl_assertion_failed +_021F2A8C: + ldr r0, [sp, #4] + cmp r0, #0 + bne _021F2AAC + ldr r0, _021F2C38 ; =0x0220DBAC + ldr r1, _021F2C2C ; =0x0220DB50 + ldr r3, _021F2C3C ; =0x00000152 + mov r2, #0 + bl __msl_assertion_failed +_021F2AAC: + ldr r0, [sp, #0x38] + cmp r0, #0 + bne _021F2ACC + ldr r0, _021F2C40 ; =0x0220DBC0 + ldr r1, _021F2C2C ; =0x0220DB50 + ldr r3, _021F2C44 ; =0x00000153 + mov r2, #0 + bl __msl_assertion_failed +_021F2ACC: + ldr r0, [sp] + mov r5, #0 + ldr sb, [r0] + ldr r8, [r0, #8] + ldr r7, [r0, #4] + mov r0, #1 + mov r4, r5 + str r5, [sp, #8] + str r5, [sp, #0x10] + str r0, [sp, #0xc] +_021F2AF4: + add r0, r8, #0x800 + cmp r0, r7 + ble _021F2B30 + mov r7, r0 + add r1, r0, #1 + mov r0, sb + bl FUN_021DD844 + movs sb, r0 + bne _021F2B30 + ldr r1, _021F2C48 ; =0x0220DBD4 + mov r0, fp + bl FUN_021FAEEC + add sp, sp, #0x14 + mov r0, #1 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +_021F2B30: + ldr r3, [sp, #8] + mov r0, sl + add r1, sb, r8 + sub r2, r7, r8 + bl FUN_021EFC78 + mov r6, r0 + mvn r0, #0 + cmp r6, r0 + bne _021F2B98 + mov r0, sl + bl FUN_021EFB28 + mvn r1, #5 + cmp r0, r1 + beq _021F2BBC + mvn r1, #0x19 + cmp r0, r1 + beq _021F2BBC + mvn r1, #0x4b + cmp r0, r1 + beq _021F2BBC + ldr r1, _021F2C4C ; =0x0220DBE4 + mov r0, fp + bl FUN_021FAEEC + add sp, sp, #0x14 + mov r0, #3 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +_021F2B98: + cmp r6, #0 + addne r8, r8, r6 + addne r5, r5, r6 + bne _021F2BBC + ldr r1, _021F2C50 ; =0x0220DC10 + ldr r2, [sp, #0x3c] + mov r0, fp + ldr r4, [sp, #0xc] + bl FUN_021FB3D0 +_021F2BBC: + ldr r0, [sp, #0x10] + strb r0, [sb, r8] + mvn r0, #0 + cmp r6, r0 + beq _021F2BE0 + cmp r4, #0 + bne _021F2BE0 + cmp r5, #0x20000 + blt _021F2AF4 +_021F2BE0: + cmp r5, #0 + beq _021F2BFC + ldr r1, _021F2C54 ; =0x0220DC34 + ldr r2, [sp, #0x3c] + mov r0, fp + mov r3, r5 + bl FUN_021FB3D0 +_021F2BFC: + ldr r0, [sp] + ldr r1, [sp, #0x38] + str sb, [r0] + str r8, [r0, #8] + str r7, [r0, #4] + ldr r0, [sp, #4] + str r5, [r0] + str r4, [r1] + mov r0, #0 + add sp, sp, #0x14 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_021F2C28: .word 0x0220DB80 +_021F2C2C: .word 0x0220DB50 +_021F2C30: .word 0x0220DB98 +_021F2C34: .word 0x00000151 +_021F2C38: .word 0x0220DBAC +_021F2C3C: .word 0x00000152 +_021F2C40: .word 0x0220DBC0 +_021F2C44: .word 0x00000153 +_021F2C48: .word 0x0220DBD4 +_021F2C4C: .word 0x0220DBE4 +_021F2C50: .word 0x0220DC10 +_021F2C54: .word 0x0220DC34 + + arm_func_start FUN_021F2C58 +FUN_021F2C58: ; 0x021F2C58 + stmdb sp!, {r4, r5, r6, lr} + mov r4, r2 + mov r6, r0 + mov r5, r1 + mov r0, r4 + bl strlen + mov r3, r0 + mov r0, r6 + mov r1, r5 + mov r2, r4 + bl FUN_021F2C88 + ldmia sp!, {r4, r5, r6, pc} + + arm_func_start FUN_021F2C88 +FUN_021F2C88: ; 0x021F2C88 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x14 + mov sb, r1 + ldr r1, [sb, #0x28] + mov sl, r0 + mov r8, r2 + mov r7, r3 + cmp r1, #0 + bne _021F2CC0 + ldr r0, _021F2D80 ; =0x0220DC4C + ldr r1, _021F2D84 ; =0x0220DB50 + mov r2, #0 + mov r3, #0xfb + bl __msl_assertion_failed +_021F2CC0: + cmp r7, #0 + mov r6, #0 + addeq sp, sp, #0x14 + moveq r0, r6 + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + ldr r1, [sb, #0x30] + ldr r0, [sb, #0x34] + subs r0, r1, r0 + bne _021F2D4C + ldr r0, [sb, #0x38] + bl FUN_021EF06C + cmp r0, #0 + bne _021F2D4C + ldr fp, _021F2D88 ; =0x0220DC70 + add r5, sp, #0xc + add r4, sp, #0x10 +_021F2D00: + str r5, [sp] + str r4, [sp, #4] + str fp, [sp, #8] + ldr r1, [sb, #8] + mov r0, sl + mov r3, r7 + add r2, r8, r6 + bl FUN_021F2E68 + cmp r0, #0 + addne sp, sp, #0x14 + ldmneia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + ldr r0, [sp, #0x10] + cmp r0, #0 + addne r6, r6, r0 + subne r7, r7, r0 + cmp r0, #0 + beq _021F2D4C + cmp r7, #0 + bne _021F2D00 +_021F2D4C: + cmp r7, #0 + beq _021F2D74 + mov r0, sl + mov r3, r7 + add r1, sb, #0x28 + add r2, r8, r6 + bl FUN_021F2FCC + cmp r0, #0 + addne sp, sp, #0x14 + ldmneia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +_021F2D74: + mov r0, #0 + add sp, sp, #0x14 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_021F2D80: .word 0x0220DC4C +_021F2D84: .word 0x0220DB50 +_021F2D88: .word 0x0220DC70 + + arm_func_start FUN_021F2D8C +FUN_021F2D8C: ; 0x021F2D8C + stmdb sp!, {r0, r1, r2, r3} + stmdb sp!, {r4, r5, lr} + sub sp, sp, #0x14 + mov r4, r1 + ldr r1, [r4, #0x28] + mov r5, r0 + cmp r1, #0 + bne _021F2DC0 + ldr r0, _021F2E5C ; =0x0220DC4C + ldr r1, _021F2E60 ; =0x0220DB50 + mov r2, #0 + mov r3, #0xde + bl __msl_assertion_failed +_021F2DC0: + ldr r1, [r4, #0x30] + ldr r0, [r4, #0x34] + subs r0, r1, r0 + bne _021F2E3C + ldr r0, [r4, #0x38] + bl FUN_021EF06C + cmp r0, #0 + bne _021F2E3C + add r0, sp, #0xc + str r0, [sp] + add r1, sp, #0x10 + ldr r0, _021F2E64 ; =0x0220DC70 + str r1, [sp, #4] + str r0, [sp, #8] + ldr r1, [r4, #8] + add r2, sp, #0x28 + mov r0, r5 + mov r3, #1 + bl FUN_021F2E68 + cmp r0, #0 + addne sp, sp, #0x14 + ldmneia sp!, {r4, r5, lr} + addne sp, sp, #0x10 + bxne lr + ldr r0, [sp, #0x10] + cmp r0, #0 + addne sp, sp, #0x14 + movne r0, #0 + ldmneia sp!, {r4, r5, lr} + addne sp, sp, #0x10 + bxne lr +_021F2E3C: + ldrsb r2, [sp, #0x28] + mov r0, r5 + add r1, r4, #0x28 + bl FUN_021F30D4 + add sp, sp, #0x14 + ldmia sp!, {r4, r5, lr} + add sp, sp, #0x10 + bx lr + .align 2, 0 +_021F2E5C: .word 0x0220DC4C +_021F2E60: .word 0x0220DB50 +_021F2E64: .word 0x0220DC70 + + arm_func_start FUN_021F2E68 +FUN_021F2E68: ; 0x021F2E68 + stmdb sp!, {r4, r5, r6, r7, r8, lr} + mov r8, r1 + mov r7, r0 + mov r1, r2 + mov r2, r3 + mov r0, r8 + mov r3, #0 + ldr r6, [sp, #0x18] + ldr r5, [sp, #0x1c] + ldr r4, [sp, #0x20] + bl FUN_021EFC24 + mvn r1, #0 + cmp r0, r1 + bne _021F2F20 + mov r0, r8 + bl FUN_021EFB28 + mvn r1, #5 + cmp r0, r1 + beq _021F2F10 + mvn r1, #0x19 + cmp r0, r1 + beq _021F2F10 + mvn r1, #0x4b + cmp r0, r1 + beq _021F2F10 + ldrsb r0, [r4] + cmp r0, #0x50 + bne _021F2EE8 + ldrsb r0, [r4, #1] + cmp r0, #0x52 + moveq r0, #3 + ldmeqia sp!, {r4, r5, r6, r7, r8, pc} +_021F2EE8: + ldr r2, _021F2F5C ; =0x0220DC74 + mov r0, r7 + mov r1, #5 + bl FUN_021FAF00 + mov r0, r7 + mov r1, #3 + mov r2, #0 + bl FUN_021F3500 + mov r0, #3 + ldmia sp!, {r4, r5, r6, r7, r8, pc} +_021F2F10: + mov r0, #0 + str r0, [r5] + str r0, [r6] + b _021F2F54 +_021F2F20: + cmp r0, #0 + strne r0, [r5] + movne r0, #0 + strne r0, [r6] + bne _021F2F54 + ldr r1, _021F2F60 ; =0x0220DC9C + mov r0, r7 + mov r2, r4 + bl FUN_021FB3D0 + mov r0, #0 + str r0, [r5] + mov r0, #1 + str r0, [r6] +_021F2F54: + mov r0, #0 + ldmia sp!, {r4, r5, r6, r7, r8, pc} + .align 2, 0 +_021F2F5C: .word 0x0220DC74 +_021F2F60: .word 0x0220DC9C + + arm_func_start FUN_021F2F64 +FUN_021F2F64: ; 0x021F2F64 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #0x14 + mov r4, r1 + mov r5, r0 + ldr r1, _021F2F98 ; =0x0220DC48 + add r0, sp, #0 + bl sprintf + add r2, sp, #0 + mov r0, r5 + mov r1, r4 + bl FUN_021F2F9C + add sp, sp, #0x14 + ldmia sp!, {r4, r5, pc} + .align 2, 0 +_021F2F98: .word 0x0220DC48 + + arm_func_start FUN_021F2F9C +FUN_021F2F9C: ; 0x021F2F9C + stmdb sp!, {r4, r5, r6, lr} + mov r4, r2 + mov r6, r0 + mov r5, r1 + mov r0, r4 + bl strlen + mov r3, r0 + mov r0, r6 + mov r1, r5 + mov r2, r4 + bl FUN_021F2FCC + ldmia sp!, {r4, r5, r6, pc} + + arm_func_start FUN_021F2FCC +FUN_021F2FCC: ; 0x021F2FCC + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} + movs r8, r2 + mov sl, r0 + mov sb, r1 + mov r7, r3 + bne _021F2FF8 + ldr r0, _021F30C0 ; =0x0220DCC0 + ldr r1, _021F30C4 ; =0x0220DB50 + mov r2, #0 + mov r3, #0x51 + bl __msl_assertion_failed +_021F2FF8: + cmp r7, #0 + bge _021F3014 + ldr r0, _021F30C8 ; =0x0220DCD0 + ldr r1, _021F30C4 ; =0x0220DB50 + mov r2, #0 + mov r3, #0x52 + bl __msl_assertion_failed +_021F3014: + cmp sb, #0 + bne _021F3030 + ldr r0, _021F30CC ; =0x0220DB38 + ldr r1, _021F30C4 ; =0x0220DB50 + mov r2, #0 + mov r3, #0x53 + bl __msl_assertion_failed +_021F3030: + cmp r8, #0 + moveq r0, #0 + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + ldr r6, [sb, #8] + ldr r5, [sb, #4] + ldr r4, [sb] + sub r0, r5, r6 + cmp r0, r7 + bge _021F308C + cmp r7, #0x800 + movlt r0, #0x800 + movge r0, r7 + add r5, r5, r0 + mov r0, r4 + add r1, r5, #1 + bl FUN_021DD844 + movs r4, r0 + bne _021F308C + ldr r1, _021F30D0 ; =0x0220DBD4 + mov r0, sl + bl FUN_021FAEEC + mov r0, #1 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} +_021F308C: + mov r1, r8 + mov r2, r7 + add r0, r4, r6 + bl memcpy + add r1, r6, r7 + mov r0, #0 + strb r0, [r4, r1] + ldr r1, [sb, #8] + add r1, r1, r7 + str r1, [sb, #8] + str r5, [sb, #4] + str r4, [sb] + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + .align 2, 0 +_021F30C0: .word 0x0220DCC0 +_021F30C4: .word 0x0220DB50 +_021F30C8: .word 0x0220DCD0 +_021F30CC: .word 0x0220DB38 +_021F30D0: .word 0x0220DBD4 + + arm_func_start FUN_021F30D4 +FUN_021F30D4: ; 0x021F30D4 + stmdb sp!, {r4, r5, r6, r7, r8, lr} + movs r4, r1 + mov r8, r0 + mov r7, r2 + bne _021F30FC + ldr r0, _021F3164 ; =0x0220DB38 + ldr r1, _021F3168 ; =0x0220DB50 + mov r2, #0 + mov r3, #0x25 + bl __msl_assertion_failed +_021F30FC: + ldr r6, [r4, #8] + ldr r5, [r4, #4] + ldr r0, [r4] + cmp r5, r6 + bne _021F3138 + add r5, r5, #0x800 + add r1, r5, #1 + bl FUN_021DD844 + cmp r0, #0 + bne _021F3138 + ldr r1, _021F316C ; =0x0220DBD4 + mov r0, r8 + bl FUN_021FAEEC + mov r0, #1 + ldmia sp!, {r4, r5, r6, r7, r8, pc} +_021F3138: + strb r7, [r0, r6] + add r1, r6, #1 + mov r2, #0 + strb r2, [r0, r1] + ldr r1, [r4, #8] + add r1, r1, #1 + str r1, [r4, #8] + str r5, [r4, #4] + str r0, [r4] + mov r0, r2 + ldmia sp!, {r4, r5, r6, r7, r8, pc} + .align 2, 0 +_021F3164: .word 0x0220DB38 +_021F3168: .word 0x0220DB50 +_021F316C: .word 0x0220DBD4 + + arm_func_start FUN_021F3170 +FUN_021F3170: ; 0x021F3170 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} + mov sl, r0 + movs sb, r1 + ldr r8, [sl] + beq _021F3214 + ldr r7, [r8, #0x438] + ldr r6, [r8, #0x43c] + mov r5, #0 + str r5, [r8, #0x438] + mov r1, r7 + str r5, [r8, #0x43c] + cmp r7, #0 + beq _021F31F0 +_021F31A4: + ldr r0, [r1, #0x10] + ldr r4, [r1, #0x14] + cmp r0, sb + beq _021F31C0 + ldr r0, [r1, #0xc] + cmp r0, #1 + bne _021F31E0 +_021F31C0: + mov r0, sl + cmp r5, #0 + strne r4, [r5, #0x14] + moveq r7, r4 + cmp r6, r1 + moveq r6, r5 + bl FUN_021F3260 + b _021F31E4 +_021F31E0: + mov r5, r1 +_021F31E4: + mov r1, r4 + cmp r4, #0 + bne _021F31A4 +_021F31F0: + ldr r0, [r8, #0x438] + cmp r0, #0 + ldrne r0, [r8, #0x43c] + strne r7, [r0, #0x14] + strne r6, [r8, #0x43c] + streq r7, [r8, #0x438] + streq r6, [r8, #0x43c] + mov r0, #0 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} +_021F3214: + ldr r1, [r8, #0x438] + cmp r1, #0 + beq _021F3258 + mov r4, #0 +_021F3224: + str r4, [r8, #0x438] + str r4, [r8, #0x43c] + cmp r1, #0 + beq _021F324C +_021F3234: + ldr r5, [r1, #0x14] + mov r0, sl + bl FUN_021F3260 + mov r1, r5 + cmp r5, #0 + bne _021F3234 +_021F324C: + ldr r1, [r8, #0x438] + cmp r1, #0 + bne _021F3224 +_021F3258: + mov r0, #0 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + + arm_func_start FUN_021F3260 +FUN_021F3260: ; 0x021F3260 + stmdb sp!, {r4, r5, r6, r7, r8, lr} + mov r7, r1 + ldr r1, [r7] + mov r4, r0 + cmp r1, #0 + bne _021F328C + ldr r0, _021F3448 ; =0x0220DCE0 + ldr r1, _021F344C ; =0x0220DD00 + mov r2, #0 + mov r3, #0x6e + bl __msl_assertion_failed +_021F328C: + ldr r0, [r7, #8] + cmp r0, #0 + bne _021F32AC + ldr r0, _021F3450 ; =0x0220DD10 + ldr r1, _021F344C ; =0x0220DD00 + mov r2, #0 + mov r3, #0x6f + bl __msl_assertion_failed +_021F32AC: + ldr r1, [r7, #8] + ldr r2, [r7, #4] + ldr r3, [r7] + mov r0, r4 + blx r3 + ldr r0, [r7, #0xc] + cmp r0, #2 + bne _021F32E8 + ldr r0, [r7, #8] + ldr r0, [r0, #8] + bl FUN_021DD82C + ldr r0, [r7, #8] + mov r1, #0 + str r1, [r0, #8] + b _021F342C +_021F32E8: + cmp r0, #3 + bne _021F3368 + ldr r5, [r7, #8] + mov r6, #0 + ldr r0, [r5, #0x38] + cmp r0, #0 + ble _021F3344 + mov r4, r6 + mov r8, r6 +_021F330C: + ldr r0, [r5, #0x3c] + ldr r0, [r0, r6, lsl #2] + bl FUN_021DD82C + ldr r0, [r5, #0x3c] + str r4, [r0, r6, lsl #2] + ldr r0, [r5, #0x40] + ldr r0, [r0, r6, lsl #2] + bl FUN_021DD82C + ldr r0, [r5, #0x40] + str r8, [r0, r6, lsl #2] + ldr r0, [r5, #0x38] + add r6, r6, #1 + cmp r6, r0 + blt _021F330C +_021F3344: + ldr r0, [r5, #0x3c] + bl FUN_021DD82C + mov r0, #0 + str r0, [r5, #0x3c] + ldr r0, [r5, #0x40] + bl FUN_021DD82C + mov r0, #0 + str r0, [r5, #0x40] + b _021F342C +_021F3368: + cmp r0, #4 + bne _021F3388 + ldr r4, [r7, #8] + ldr r0, [r4, #0xc] + bl FUN_021DD82C + mov r0, #0 + str r0, [r4, #0xc] + b _021F342C +_021F3388: + cmp r0, #7 + bne _021F33B0 + ldr r4, [r7, #8] + ldr r0, [r4, #0x10] + cmp r0, #0 + beq _021F342C + bl FUN_021DD82C + mov r0, #0 + str r0, [r4, #0x10] + b _021F342C +_021F33B0: + cmp r0, #8 + bne _021F33D8 + ldr r4, [r7, #8] + ldr r0, [r4, #8] + cmp r0, #0 + beq _021F342C + bl FUN_021DD82C + mov r0, #0 + str r0, [r4, #8] + b _021F342C +_021F33D8: + cmp r0, #9 + bne _021F342C + ldr r4, [r7, #8] + mov r5, #0 + ldr r0, [r4, #4] + cmp r0, #0 + ble _021F341C + mov r6, r5 +_021F33F8: + ldr r0, [r4, #8] + ldr r0, [r0, r5, lsl #2] + bl FUN_021DD82C + ldr r0, [r4, #8] + str r6, [r0, r5, lsl #2] + ldr r0, [r4, #4] + add r5, r5, #1 + cmp r5, r0 + blt _021F33F8 +_021F341C: + ldr r0, [r4, #8] + bl FUN_021DD82C + mov r0, #0 + str r0, [r4, #8] +_021F342C: + ldr r0, [r7, #8] + bl FUN_021DD82C + mov r1, #0 + mov r0, r7 + str r1, [r7, #8] + bl FUN_021DD82C + ldmia sp!, {r4, r5, r6, r7, r8, pc} + .align 2, 0 +_021F3448: .word 0x0220DCE0 +_021F344C: .word 0x0220DD00 +_021F3450: .word 0x0220DD10 + + arm_func_start FUN_021F3454 +FUN_021F3454: ; 0x021F3454 + stmdb sp!, {r0, r1, r2, r3} + stmdb sp!, {r4, r5, r6, lr} + mov r6, r0 + mov r0, #0x18 + mov r5, r3 + ldr r4, [r6] + bl FUN_021DD860 + cmp r0, #0 + bne _021F3494 + ldr r1, _021F34FC ; =0x0220DD24 + mov r0, r6 + bl FUN_021FAEEC + mov r0, #1 + ldmia sp!, {r4, r5, r6, lr} + add sp, sp, #0x10 + bx lr +_021F3494: + ldr r3, [sp, #0x14] + ldr r2, [sp, #0x18] + ldr r1, [sp, #0x20] + str r3, [r0] + str r2, [r0, #4] + str r5, [r0, #8] + cmp r1, #0 + ldrne r1, [r1, #0x18] + ldr r2, [sp, #0x24] + strne r1, [r0, #0x10] + moveq r1, #0 + streq r1, [r0, #0x10] + mov r1, #0 + str r2, [r0, #0xc] + str r1, [r0, #0x14] + ldr r1, [r4, #0x438] + cmp r1, #0 + streq r0, [r4, #0x438] + ldr r1, [r4, #0x43c] + cmp r1, #0 + strne r0, [r1, #0x14] + str r0, [r4, #0x43c] + mov r0, #0 + ldmia sp!, {r4, r5, r6, lr} + add sp, sp, #0x10 + bx lr + .align 2, 0 +_021F34FC: .word 0x0220DD24 + + arm_func_start FUN_021F3500 +FUN_021F3500: ; 0x021F3500 + stmdb sp!, {r4, r5, r6, r7, lr} + sub sp, sp, #0x14 + mov r4, r0 + ldr r5, [r4] + mov r7, r1 + mov r6, r2 + cmp r5, #0 + bne _021F3534 + ldr r0, _021F35E4 ; =0x0220DD34 + ldr r1, _021F35E8 ; =0x0220DD00 + mov r2, #0 + mov r3, #0x23 + bl __msl_assertion_failed +_021F3534: + cmp r7, #0 + bne _021F3550 + ldr r0, _021F35EC ; =0x0220DD48 + ldr r1, _021F35E8 ; =0x0220DD00 + mov r2, #0 + mov r3, #0x24 + bl __msl_assertion_failed +_021F3550: + cmp r6, #1 + beq _021F3574 + cmp r6, #0 + beq _021F3574 + ldr r0, _021F35F0 ; =0x0220DD60 + ldr r1, _021F35E8 ; =0x0220DD00 + mov r2, #0 + mov r3, #0x25 + bl __msl_assertion_failed +_021F3574: + cmp r6, #1 + moveq r0, #1 + streq r0, [r5, #0x41c] + ldr r1, [r5, #0x1a4] + ldr r0, [r5, #0x1a8] + cmp r1, #0 + str r1, [sp, #8] + str r0, [sp, #0xc] + addeq sp, sp, #0x14 + ldmeqia sp!, {r4, r5, r6, r7, pc} + mov r0, #0x10 + bl FUN_021DD860 + movs r3, r0 + strne r7, [r3] + strne r6, [r3, #0xc] + ldrne r0, [r5, #0x418] + add r1, sp, #8 + strne r0, [r3, #4] + strne r5, [r3, #8] + mov r0, #0 + str r0, [sp] + mov r0, #1 + str r0, [sp, #4] + mov r0, r4 + ldmia r1, {r1, r2} + bl FUN_021F3454 + add sp, sp, #0x14 + ldmia sp!, {r4, r5, r6, r7, pc} + .align 2, 0 +_021F35E4: .word 0x0220DD34 +_021F35E8: .word 0x0220DD00 +_021F35EC: .word 0x0220DD48 +_021F35F0: .word 0x0220DD60 + + arm_func_start FUN_021F35F4 +FUN_021F35F4: ; 0x021F35F4 + stmdb sp!, {r4, r5, r6, lr} + sub sp, sp, #0x10 + mov r5, r0 + ldr r4, [r5] + ldr r2, [r4, #0x1d8] + cmp r2, #4 + addeq sp, sp, #0x10 + ldmeqia sp!, {r4, r5, r6, pc} + cmp r2, #0 + beq _021F36E0 + cmp r1, #0 + beq _021F3658 + cmp r2, #3 + bne _021F3658 + ldr r2, _021F37A8 ; =0x0220DDD0 + add r1, r4, #0x1f4 + bl FUN_021F2F9C + ldr r2, [r4, #0x198] + mov r0, r5 + add r1, r4, #0x1f4 + bl FUN_021F2F64 + ldr r2, _021F37AC ; =0x0220DDE4 + mov r0, r5 + add r1, r4, #0x1f4 + bl FUN_021F2F9C +_021F3658: + mov r1, #1 + ldr r0, _021F37B0 ; =0x0220DDEC + str r1, [sp] + str r0, [sp, #4] + ldr r1, [r4, #0x1d4] + add r3, sp, #8 + mov r0, r5 + add r2, r4, #0x1f4 + bl FUN_021F28AC + ldr r0, [r4, #0x1d4] + mvn r1, #0 + cmp r0, r1 + beq _021F36A4 + mov r1, #2 + bl FUN_021EFD80 + ldr r0, [r4, #0x1d4] + bl FUN_021EFD9C + mvn r0, #0 + str r0, [r4, #0x1d4] +_021F36A4: + ldr r0, [r4, #0x204] + mvn r1, #0 + cmp r0, r1 + beq _021F36CC + mov r1, #2 + bl FUN_021EFD80 + ldr r0, [r4, #0x204] + bl FUN_021EFD9C + mvn r0, #0 + str r0, [r4, #0x204] +_021F36CC: + mov r0, #4 + str r0, [r4, #0x1d8] + mov r0, #0 + str r0, [r4, #0x19c] + str r0, [r4, #0x1a0] +_021F36E0: + ldr r0, [r4, #0x1dc] + bl FUN_021DD82C + mov r0, #0 + str r0, [r4, #0x1dc] + ldr r0, [r4, #0x1ec] + bl FUN_021DD82C + mov r0, #0 + str r0, [r4, #0x1ec] + ldr r0, [r4, #0x1f4] + bl FUN_021DD82C + mov r0, #0 + str r0, [r4, #0x1f4] + ldr r0, [r4, #0x440] + bl FUN_021DD82C + mov r0, #0 + str r0, [r4, #0x440] + ldr r0, [r4, #0x450] + bl FUN_021DD82C + mov r0, #0 + str r0, [r4, #0x450] + ldr r1, [r4, #0x424] + cmp r1, #0 + beq _021F3750 +_021F373C: + mov r0, r5 + bl FUN_021F6C84 + ldr r1, [r4, #0x424] + cmp r1, #0 + bne _021F373C +_021F3750: + mov r0, #0 + str r0, [r4, #0x424] + ldr r6, [r4, #0x434] + cmp r6, #0 + beq _021F377C +_021F3764: + mov r1, r6 + ldr r6, [r6, #0x3c] + mov r0, r5 + bl FUN_021F79E0 + cmp r6, #0 + bne _021F3764 +_021F377C: + mov r6, #0 + str r6, [r4, #0x434] + ldr r4, _021F37B4 ; =FUN_021F37B8 +_021F3788: + mov r0, r5 + mov r1, r4 + mov r2, r6 + bl FUN_021F848C + cmp r0, #0 + beq _021F3788 + add sp, sp, #0x10 + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +_021F37A8: .word 0x0220DDD0 +_021F37AC: .word 0x0220DDE4 +_021F37B0: .word 0x0220DDEC +_021F37B4: .word FUN_021F37B8 + + arm_func_start FUN_021F37B8 +FUN_021F37B8: ; 0x021F37B8 + stmdb sp!, {r4, r5, r6, lr} + mov r5, r1 + ldr r1, [r5, #8] + mov r6, r0 + cmp r1, #0 + ldr r4, [r6] + beq _021F381C + ldr r0, [r4, #0x104] + cmp r0, #0 + bne _021F381C + ldr r0, [r1, #8] + bl FUN_021DD82C + ldr r0, [r5, #8] + mov r1, #0 + str r1, [r0, #8] + ldr r0, [r5, #8] + ldr r0, [r0, #0xc] + bl FUN_021DD82C + ldr r0, [r5, #8] + mov r1, #0 + str r1, [r0, #0xc] + ldr r0, [r5, #8] + bl FUN_021DD82C + mov r0, #0 + str r0, [r5, #8] +_021F381C: + ldr r0, [r5, #0x10] + bl FUN_021DD82C + mov r0, #0 + str r0, [r5, #0x10] + ldr r0, [r5, #0x18] + bl FUN_021DD82C + mov r0, #0 + str r0, [r5, #0x18] + str r0, [r5, #0x14] + ldr r0, [r5, #0xc] + cmp r0, #0 + beq _021F3864 + ldr r0, [r4, #0x104] + cmp r0, #1 + bne _021F3878 + ldr r0, [r5, #8] + cmp r0, #0 + bne _021F3878 +_021F3864: + mov r0, r6 + mov r1, r5 + bl FUN_021F85A0 + mov r0, #0 + ldmia sp!, {r4, r5, r6, pc} +_021F3878: + mov r0, #1 + ldmia sp!, {r4, r5, r6, pc} + + arm_func_start FUN_021F3880 +FUN_021F3880: ; 0x021F3880 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #4 + mov r5, r0 + ldr r4, [r5] + add r2, sp, #0 + ldr r1, [r4, #0x1d4] + bl FUN_021FB0FC + cmp r0, #0 + addne sp, sp, #4 + ldmneia sp!, {r4, r5, pc} + ldr r0, [sp] + cmp r0, #4 + bne _021F38E0 + ldr r1, _021F3920 ; =0x00000107 + ldr r2, _021F3924 ; =0x0220DDF0 + mov r0, r5 + bl FUN_021FAF00 + mov r0, r5 + mov r1, #4 + mov r2, #1 + bl FUN_021F3500 + add sp, sp, #4 + mov r0, #4 + ldmia sp!, {r4, r5, pc} +_021F38E0: + cmp r0, #0 + addeq sp, sp, #4 + moveq r0, #0 + ldmeqia sp!, {r4, r5, pc} + cmp r0, #3 + beq _021F390C + ldr r0, _021F3928 ; =0x0220DE18 + ldr r1, _021F392C ; =0x0220DE30 + ldr r3, _021F3930 ; =0x000002EF + mov r2, #0 + bl __msl_assertion_failed +_021F390C: + mov r0, #2 + str r0, [r4, #0x1d8] + mov r0, #0 + add sp, sp, #4 + ldmia sp!, {r4, r5, pc} + .align 2, 0 +_021F3920: .word 0x00000107 +_021F3924: .word 0x0220DDF0 +_021F3928: .word 0x0220DE18 +_021F392C: .word 0x0220DE30 +_021F3930: .word 0x000002EF + + arm_func_start FUN_021F3934 +FUN_021F3934: ; 0x021F3934 + stmdb sp!, {r4, r5, r6, r7, r8, lr} + sub sp, sp, #0x2a0 + mov r6, r2 + mov r8, r0 + mov r7, r1 + mov r1, r6 + mov r2, #0 + ldr r5, [r8] + bl FUN_021FB2F8 + cmp r0, #0 + beq _021F3A34 + ldr r2, [r5, #0x418] + ldr r0, _021F3FC0 ; =0x00000106 + cmp r2, r0 + bne _021F3994 + ldr r1, [r5, #0x1a0] + cmp r1, #0 + beq _021F3994 + mov r0, r8 + bl FUN_021F85B4 + mov r0, #0 + str r0, [r5, #0x19c] + str r0, [r5, #0x1a0] + b _021F39C8 +_021F3994: + ldr r0, _021F3FC4 ; =0x00000201 + cmp r2, r0 + bne _021F39C8 + ldr r1, _021F3FC8 ; =0x0220DE40 + add r2, sp, #0x4e + mov r0, r6 + mov r3, #0x200 + bl FUN_021FB1F0 + cmp r0, #0 + beq _021F39C8 + add r0, sp, #0x4e + bl atol + str r0, [r5, #0x1a0] +_021F39C8: + ldr r1, _021F3FCC ; =0x0220DE48 + mov r0, r6 + bl strstr + cmp r0, #0 + beq _021F3A08 + ldr r1, [r5, #0x418] + mov r0, r8 + mov r2, r5 + bl FUN_021FAF00 + mov r0, r8 + mov r1, #4 + mov r2, #1 + bl FUN_021F3500 + add sp, sp, #0x2a0 + mov r0, #4 + ldmia sp!, {r4, r5, r6, r7, r8, pc} +_021F3A08: + ldr r1, [r5, #0x418] + mov r0, r8 + mov r2, r5 + bl FUN_021FAF00 + mov r0, r8 + mov r1, #4 + mov r2, #0 + bl FUN_021F3500 + add sp, sp, #0x2a0 + mov r0, #4 + ldmia sp!, {r4, r5, r6, r7, r8, pc} +_021F3A34: + ldr r0, [r7, #0x14] + ldr r4, [r7, #4] + cmp r0, #1 + beq _021F3A58 + cmp r0, #2 + beq _021F3C48 + cmp r0, #3 + beq _021F3B38 + b _021F3FB4 +_021F3A58: + ldr r1, _021F3FD0 ; =0x0220DE50 + mov r0, r6 + mov r2, #5 + bl strncmp + cmp r0, #0 + beq _021F3A9C + ldr r2, _021F3FD4 ; =0x0220DE58 + mov r0, r8 + mov r1, #1 + bl FUN_021FAF00 + mov r0, r8 + mov r1, #3 + mov r2, #1 + bl FUN_021F3500 + add sp, sp, #0x2a0 + mov r0, #3 + ldmia sp!, {r4, r5, r6, r7, r8, pc} +_021F3A9C: + ldr r1, _021F3FD8 ; =0x0220DE88 + mov r0, r6 + mov r2, r4 + mov r3, #0x80 + bl FUN_021FB1F0 + cmp r0, #0 + bne _021F3AE4 + ldr r2, _021F3FD4 ; =0x0220DE58 + mov r0, r8 + mov r1, #1 + bl FUN_021FAF00 + mov r0, r8 + mov r1, #3 + mov r2, #1 + bl FUN_021F3500 + add sp, sp, #0x2a0 + mov r0, #3 + ldmia sp!, {r4, r5, r6, r7, r8, pc} +_021F3AE4: + ldr r0, [r4, #0x304] + cmp r0, #0 + beq _021F3B14 + mov r0, r8 + mov r1, r4 + bl FUN_021F401C + cmp r0, #0 + addne sp, sp, #0x2a0 + ldmneia sp!, {r4, r5, r6, r7, r8, pc} + mov r0, #3 + str r0, [r7, #0x14] + b _021F3FB4 +_021F3B14: + mov r0, r8 + mov r1, r4 + bl FUN_021F42B8 + cmp r0, #0 + addne sp, sp, #0x2a0 + ldmneia sp!, {r4, r5, r6, r7, r8, pc} + mov r0, #2 + str r0, [r7, #0x14] + b _021F3FB4 +_021F3B38: + ldr r1, _021F3FDC ; =0x0220DE94 + mov r0, r6 + mov r2, #5 + bl strncmp + cmp r0, #0 + beq _021F3B7C + ldr r2, _021F3FD4 ; =0x0220DE58 + mov r0, r8 + mov r1, #1 + bl FUN_021FAF00 + mov r0, r8 + mov r1, #3 + mov r2, #1 + bl FUN_021F3500 + add sp, sp, #0x2a0 + mov r0, #3 + ldmia sp!, {r4, r5, r6, r7, r8, pc} +_021F3B7C: + ldr r1, _021F3FE0 ; =0x0220DE9C + add r2, sp, #0x4e + mov r0, r6 + mov r3, #0x200 + bl FUN_021FB1F0 + cmp r0, #0 + bne _021F3BC4 + ldr r2, _021F3FE4 ; =0x0220DEA8 + mov r0, r8 + mov r1, #1 + bl FUN_021FAF00 + mov r0, r8 + mov r1, #3 + mov r2, #1 + bl FUN_021F3500 + add sp, sp, #0x2a0 + mov r0, #3 + ldmia sp!, {r4, r5, r6, r7, r8, pc} +_021F3BC4: + add r0, sp, #0x4e + bl atol + str r0, [r5, #0x19c] + ldr r1, _021F3FE8 ; =0x0220DED8 + add r2, sp, #0x4e + mov r0, r6 + mov r3, #0x200 + bl FUN_021FB1F0 + cmp r0, #0 + bne _021F3C18 + ldr r2, _021F3FE4 ; =0x0220DEA8 + mov r0, r8 + mov r1, #1 + bl FUN_021FAF00 + mov r0, r8 + mov r1, #3 + mov r2, #1 + bl FUN_021F3500 + add sp, sp, #0x2a0 + mov r0, #3 + ldmia sp!, {r4, r5, r6, r7, r8, pc} +_021F3C18: + add r0, sp, #0x4e + bl atol + str r0, [r5, #0x1a0] + mov r0, r8 + mov r1, r4 + bl FUN_021F42B8 + cmp r0, #0 + addne sp, sp, #0x2a0 + ldmneia sp!, {r4, r5, r6, r7, r8, pc} + mov r0, #2 + str r0, [r7, #0x14] + b _021F3FB4 +_021F3C48: + ldr r1, _021F3FEC ; =0x0220DEE4 + mov r0, r6 + mov r2, #5 + bl strncmp + cmp r0, #0 + beq _021F3C8C + ldr r2, _021F3FD4 ; =0x0220DE58 + mov r0, r8 + mov r1, #1 + bl FUN_021FAF00 + mov r0, r8 + mov r1, #3 + mov r2, #1 + bl FUN_021F3500 + add sp, sp, #0x2a0 + mov r0, #3 + ldmia sp!, {r4, r5, r6, r7, r8, pc} +_021F3C8C: + ldr r1, _021F3FF0 ; =0x0220DEEC + add r2, sp, #0x4e + mov r0, r6 + mov r3, #0x200 + bl FUN_021FB1F0 + cmp r0, #0 + bne _021F3CD4 + ldr r2, _021F3FE4 ; =0x0220DEA8 + mov r0, r8 + mov r1, #1 + bl FUN_021FAF00 + mov r0, r8 + mov r1, #3 + mov r2, #1 + bl FUN_021F3500 + add sp, sp, #0x2a0 + mov r0, #3 + ldmia sp!, {r4, r5, r6, r7, r8, pc} +_021F3CD4: + add r0, sp, #0x4e + bl atol + str r0, [r5, #0x198] + ldr r1, _021F3FE0 ; =0x0220DE9C + add r2, sp, #0x4e + mov r0, r6 + mov r3, #0x200 + bl FUN_021FB1F0 + cmp r0, #0 + bne _021F3D28 + ldr r2, _021F3FE4 ; =0x0220DEA8 + mov r0, r8 + mov r1, #1 + bl FUN_021FAF00 + mov r0, r8 + mov r1, #3 + mov r2, #1 + bl FUN_021F3500 + add sp, sp, #0x2a0 + mov r0, #3 + ldmia sp!, {r4, r5, r6, r7, r8, pc} +_021F3D28: + add r0, sp, #0x4e + bl atol + str r0, [r5, #0x19c] + ldr r1, _021F3FE8 ; =0x0220DED8 + add r2, sp, #0x4e + mov r0, r6 + mov r3, #0x200 + bl FUN_021FB1F0 + cmp r0, #0 + bne _021F3D7C + ldr r2, _021F3FE4 ; =0x0220DEA8 + mov r0, r8 + mov r1, #1 + bl FUN_021FAF00 + mov r0, r8 + mov r1, #3 + mov r2, #1 + bl FUN_021F3500 + add sp, sp, #0x2a0 + mov r0, #3 + ldmia sp!, {r4, r5, r6, r7, r8, pc} +_021F3D7C: + add r0, sp, #0x4e + bl atol + str r0, [r5, #0x1a0] + ldr r1, _021F3FF4 ; =0x0220DEF8 + add r2, sp, #0x39 + mov r0, r6 + mov r3, #0x15 + bl FUN_021FB1F0 + ldr r2, _021F3FF8 ; =0x00000474 + cmp r0, #0 + moveq r0, #0 + streqb r0, [sp, #0x39] + ldr r1, _021F3FFC ; =0x0220DF08 + mov r0, r6 + add r2, r5, r2 + mov r3, #0x19 + bl FUN_021FB1F0 + cmp r0, #0 + moveq r0, #0 + streqb r0, [r5, #0x474] + ldrsb r0, [r4, #0xc2] + cmp r0, #0 + addne r0, r4, #0xc2 + bne _021F3E14 + add r0, r5, #0x100 + ldrsb r0, [r0, #0x2f] + cmp r0, #0 + ldrne r0, _021F4000 ; =0x0000012F + addne r0, r5, r0 + bne _021F3E14 + add r0, sp, #0x200 + ldr r1, _021F4004 ; =0x0220DF10 + add r0, r0, #0x4e + add r2, r5, #0x110 + add r3, r5, #0x144 + bl sprintf + add r0, sp, #0x200 + add r0, r0, #0x4e +_021F3E14: + str r0, [sp] + str r4, [sp, #4] + add r2, r4, #0x80 + str r2, [sp, #8] + add r2, r4, #0xa1 + ldr r1, _021F4008 ; =0x0220DF18 + ldr r3, _021F400C ; =0x0220DF28 + add r0, sp, #0x4e + str r2, [sp, #0xc] + bl sprintf + add r0, sp, #0x4e + bl strlen + mov r1, r0 + add r0, sp, #0x4e + add r2, sp, #0x18 + bl FUN_021EF794 + ldr r1, _021F4010 ; =0x0220DF5C + mov r0, r6 + add r2, sp, #0x4e + mov r3, #0x200 + bl FUN_021FB1F0 + cmp r0, #0 + bne _021F3E9C + ldr r2, _021F3FE4 ; =0x0220DEA8 + mov r0, r8 + mov r1, #1 + bl FUN_021FAF00 + mov r0, r8 + mov r1, #3 + mov r2, #1 + bl FUN_021F3500 + add sp, sp, #0x2a0 + mov r0, #3 + ldmia sp!, {r4, r5, r6, r7, r8, pc} +_021F3E9C: + add r0, sp, #0x18 + add r1, sp, #0x4e + mov r2, #0x20 + bl memcmp + cmp r0, #0 + beq _021F3EE0 + ldr r2, _021F4014 ; =0x0220DF64 + mov r0, r8 + mov r1, #0x108 + bl FUN_021FAF00 + mov r0, r8 + mov r1, #3 + mov r2, #1 + bl FUN_021F3500 + add sp, sp, #0x2a0 + mov r0, #3 + ldmia sp!, {r4, r5, r6, r7, r8, pc} +_021F3EE0: + ldr r0, [r5, #0x100] + cmp r0, #0 + beq _021F3F08 + ldr r1, [r5, #0x1a0] + mov r0, r8 + bl FUN_021F8624 + ldr r1, [r5, #0x1a0] + str r1, [r0] + ldr r1, [r5, #0x19c] + str r1, [r0, #4] +_021F3F08: + mov r0, #3 + str r0, [r5, #0x1d8] + ldr r1, [r7, #0xc] + ldr r0, [r7, #0x10] + cmp r1, #0 + str r1, [sp, #0x10] + str r0, [sp, #0x14] + beq _021F3FA8 + mov r0, #0x20 + bl FUN_021DD860 + movs r4, r0 + bne _021F3F50 + ldr r1, _021F4018 ; =0x0220DF84 + mov r0, r8 + bl FUN_021FAEEC + add sp, sp, #0x2a0 + mov r0, #1 + ldmia sp!, {r4, r5, r6, r7, r8, pc} +_021F3F50: + mov r1, #0 + mov r2, #0x20 + bl Call_FillMemWithValue + ldr r1, [r5, #0x1a0] + mov r0, #0 + str r1, [r4, #4] + str r0, [r4] + add r1, sp, #0x39 + add r0, r4, #8 + mov r2, #0x15 + bl FUN_021FB3DC + str r7, [sp] + mov r0, #0 + str r0, [sp, #4] + add r1, sp, #0x10 + mov r0, r8 + mov r3, r4 + ldmia r1, {r1, r2} + bl FUN_021F3454 + cmp r0, #0 + addne sp, sp, #0x2a0 + ldmneia sp!, {r4, r5, r6, r7, r8, pc} +_021F3FA8: + mov r0, r8 + mov r1, r7 + bl FUN_021F6C84 +_021F3FB4: + mov r0, #0 + add sp, sp, #0x2a0 + ldmia sp!, {r4, r5, r6, r7, r8, pc} + .align 2, 0 +_021F3FC0: .word 0x00000106 +_021F3FC4: .word 0x00000201 +_021F3FC8: .word 0x0220DE40 +_021F3FCC: .word 0x0220DE48 +_021F3FD0: .word 0x0220DE50 +_021F3FD4: .word 0x0220DE58 +_021F3FD8: .word 0x0220DE88 +_021F3FDC: .word 0x0220DE94 +_021F3FE0: .word 0x0220DE9C +_021F3FE4: .word 0x0220DEA8 +_021F3FE8: .word 0x0220DED8 +_021F3FEC: .word 0x0220DEE4 +_021F3FF0: .word 0x0220DEEC +_021F3FF4: .word 0x0220DEF8 +_021F3FF8: .word 0x00000474 +_021F3FFC: .word 0x0220DF08 +_021F4000: .word 0x0000012F +_021F4004: .word 0x0220DF10 +_021F4008: .word 0x0220DF18 +_021F400C: .word 0x0220DF28 +_021F4010: .word 0x0220DF5C +_021F4014: .word 0x0220DF64 +_021F4018: .word 0x0220DF84 + + arm_func_start FUN_021F401C +FUN_021F401C: ; 0x021F401C + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0xec + mov fp, r0 + ldr r4, [fp] + ldr r0, _021F4278 ; =0x00000177 + mov r5, r1 + add r0, r4, r0 + bl strlen + mov sb, r0 + ldr r0, _021F427C ; =0x79707367 + bl FUN_021EFA2C + cmp sb, #0 + mov sl, #0 + bls _021F4090 + add r8, sp, #0 + mov r7, sl + mov r6, #0xff +_021F4060: + mov r0, r7 + mov r1, r6 + bl FUN_021EF9FC + add r1, r4, sl + add r1, r1, #0x100 + add sl, sl, #1 + ldrsb r1, [r1, #0x77] + mov r0, r0, lsl #0x18 + cmp sl, sb + eor r0, r1, r0, asr #24 + strb r0, [r8], #1 + blo _021F4060 +_021F4090: + add r0, sp, #0 + mov r6, #0 + add r1, sp, #0x1f + mov r2, sb + mov r3, #1 + strb r6, [r0, sl] + bl FUN_021EF820 + ldr r2, _021F4280 ; =0x0220DF94 + mov r0, fp + add r1, r4, #0x1f4 + bl FUN_021F2F9C + ldr r2, _021F4284 ; =0x0220DFA0 + mov r0, fp + add r1, r4, #0x1f4 + bl FUN_021F2F9C + mov r0, fp + add r1, r4, #0x1f4 + add r2, r4, #0x144 + bl FUN_021F2F9C + ldr r2, _021F4288 ; =0x0220DFA8 + mov r0, fp + add r1, r4, #0x1f4 + bl FUN_021F2F9C + mov r0, fp + add r1, r4, #0x1f4 + add r2, r4, #0x110 + bl FUN_021F2F9C + ldr r2, _021F428C ; =0x0220DFB0 + mov r0, fp + add r1, r4, #0x1f4 + bl FUN_021F2F9C + mov r0, fp + add r1, r4, #0x1f4 + add r2, sp, #0x1f + bl FUN_021F2F9C + ldr r2, _021F4290 ; =0x0220DFC0 + mov r0, fp + add r1, r4, #0x1f4 + bl FUN_021F2F9C + ldr r2, [r4, #0x46c] + mov r0, fp + add r1, r4, #0x1f4 + bl FUN_021F2F64 + ldr r2, _021F4294 ; =0x0220DFCC + mov r0, fp + add r1, r4, #0x1f4 + bl FUN_021F2F9C + ldr r2, _021F4298 ; =0x02210EA0 + mov r0, fp + add r1, r4, #0x1f4 + bl FUN_021F2F9C + ldr r2, _021F429C ; =0x0220DFD8 + mov r0, fp + add r1, r4, #0x1f4 + bl FUN_021F2F9C + ldr r2, [r4, #0x470] + mov r0, fp + add r1, r4, #0x1f4 + bl FUN_021F2F64 + ldr r2, _021F42A0 ; =0x0220DEF8 + mov r0, fp + add r1, r4, #0x1f4 + bl FUN_021F2F9C + ldr r2, _021F42A4 ; =0x0000012F + mov r0, fp + add r1, r4, #0x1f4 + add r2, r4, r2 + bl FUN_021F2F9C + add r0, r5, #0x200 + ldrsb r0, [r0, #0xc2] + cmp r0, #0 + beq _021F424C + ldr r0, _021F42A8 ; =0x000002C2 + add r0, r5, r0 + bl strlen + mov sl, r0 + ldr r0, _021F427C ; =0x79707367 + bl FUN_021EFA2C + cmp sl, #0 + mov r8, r6 + bls _021F4210 + add sb, sp, #0x4c + mov r7, r8 + mov r6, #0xff +_021F41E0: + mov r0, r7 + mov r1, r6 + bl FUN_021EF9FC + add r1, r5, r8 + add r1, r1, #0x200 + add r8, r8, #1 + ldrsb r1, [r1, #0xc2] + mov r0, r0, lsl #0x18 + cmp r8, sl + eor r0, r1, r0, asr #24 + strb r0, [sb], #1 + blo _021F41E0 +_021F4210: + add r0, sp, #0x4c + mov r5, #0 + add r1, sp, #0x8d + mov r2, sl + mov r3, #1 + strb r5, [r0, r8] + bl FUN_021EF820 + ldr r2, _021F42AC ; =0x0220DFE8 + mov r0, fp + add r1, r4, #0x1f4 + bl FUN_021F2F9C + add r2, sp, #0x8d + mov r0, fp + add r1, r4, #0x1f4 + bl FUN_021F2F9C +_021F424C: + ldr r2, _021F42B0 ; =0x0220DFF4 + mov r0, fp + add r1, r4, #0x1f4 + bl FUN_021F2F9C + ldr r2, _021F42B4 ; =0x0220DDE4 + mov r0, fp + add r1, r4, #0x1f4 + bl FUN_021F2F9C + mov r0, #0 + add sp, sp, #0xec + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_021F4278: .word 0x00000177 +_021F427C: .word 0x79707367 +_021F4280: .word 0x0220DF94 +_021F4284: .word 0x0220DFA0 +_021F4288: .word 0x0220DFA8 +_021F428C: .word 0x0220DFB0 +_021F4290: .word 0x0220DFC0 +_021F4294: .word 0x0220DFCC +_021F4298: .word 0x02210EA0 +_021F429C: .word 0x0220DFD8 +_021F42A0: .word 0x0220DEF8 +_021F42A4: .word 0x0000012F +_021F42A8: .word 0x000002C2 +_021F42AC: .word 0x0220DFE8 +_021F42B0: .word 0x0220DFF4 +_021F42B4: .word 0x0220DDE4 + + arm_func_start FUN_021F42B8 +FUN_021F42B8: ; 0x021F42B8 + stmdb sp!, {r4, r5, r6, r7, lr} + sub sp, sp, #0x28c + mov r5, r1 + mov r6, r0 + add r0, r5, #0x80 + mov r1, #0x20 + ldr r4, [r6] + bl FUN_021F4C48 + add r0, r5, #0x100 + ldrsb r0, [r0, #0xc2] + cmp r0, #0 + ldrne r0, _021F4614 ; =0x000001C2 + addne r7, r5, r0 + ldreq r0, _021F4618 ; =0x00000177 + addeq r7, r4, r0 + mov r0, r7 + bl strlen + mov r1, r0 + mov r0, r7 + add r2, r5, #0xa1 + bl FUN_021EF794 + ldrsb r0, [r5, #0xc2] + cmp r0, #0 + addne r0, r5, #0xc2 + bne _021F4354 + add r0, r4, #0x100 + ldrsb r0, [r0, #0x2f] + cmp r0, #0 + ldrne r0, _021F461C ; =0x0000012F + addne r0, r4, r0 + bne _021F4354 + add r0, sp, #0x200 + ldr r1, _021F4620 ; =0x0220DF10 + add r0, r0, #0x35 + add r2, r4, #0x110 + add r3, r4, #0x144 + bl sprintf + add r0, sp, #0x200 + add r0, r0, #0x35 +_021F4354: + str r0, [sp] + add r0, r5, #0x80 + str r0, [sp, #4] + ldr r1, _021F4624 ; =0x0220DF18 + ldr r3, _021F4628 ; =0x0220DF28 + add r0, sp, #0x35 + str r5, [sp, #8] + add r2, r5, #0xa1 + str r2, [sp, #0xc] + bl sprintf + add r0, sp, #0x35 + bl strlen + mov r1, r0 + add r0, sp, #0x35 + add r2, sp, #0x14 + bl FUN_021EF794 + ldr r0, [r4, #0x100] + cmp r0, #0 + beq _021F43D0 + add r3, sp, #0x10 + mov r0, r6 + add r1, r4, #0x110 + add r2, r4, #0x144 + bl FUN_021F84F4 + ldr r0, [sp, #0x10] + cmp r0, #0 + ldrne r0, [r0, #4] + strne r0, [r4, #0x19c] + ldrne r0, [sp, #0x10] + ldrne r0, [r0] + strne r0, [r4, #0x1a0] +_021F43D0: + ldr r2, _021F462C ; =0x0220DFFC + mov r0, r6 + add r1, r4, #0x1f4 + bl FUN_021F2F9C + ldr r2, _021F4630 ; =0x0220DE88 + mov r0, r6 + add r1, r4, #0x1f4 + bl FUN_021F2F9C + mov r0, r6 + add r1, r4, #0x1f4 + add r2, r5, #0x80 + bl FUN_021F2F9C + ldrsb r0, [r5, #0xc2] + cmp r0, #0 + beq _021F4430 + ldr r2, _021F4634 ; =0x0220E004 + mov r0, r6 + add r1, r4, #0x1f4 + bl FUN_021F2F9C + mov r0, r6 + add r1, r4, #0x1f4 + add r2, r5, #0xc2 + bl FUN_021F2F9C + b _021F44A8 +_021F4430: + add r0, r4, #0x100 + ldrsb r0, [r0, #0x2f] + cmp r0, #0 + beq _021F4468 + ldr r2, _021F4638 ; =0x0220DEF8 + mov r0, r6 + add r1, r4, #0x1f4 + bl FUN_021F2F9C + ldr r2, _021F461C ; =0x0000012F + mov r0, r6 + add r1, r4, #0x1f4 + add r2, r4, r2 + bl FUN_021F2F9C + b _021F44A8 +_021F4468: + ldr r2, _021F463C ; =0x0220E010 + mov r0, r6 + add r1, r4, #0x1f4 + bl FUN_021F2F9C + mov r0, r6 + add r1, r4, #0x1f4 + add r2, r4, #0x110 + bl FUN_021F2F9C + ldr r2, _021F4640 ; =0x0220E018 + mov r0, r6 + add r1, r4, #0x1f4 + bl FUN_021F2F9C + mov r0, r6 + add r1, r4, #0x1f4 + add r2, r4, #0x144 + bl FUN_021F2F9C +_021F44A8: + ldr r0, [r4, #0x19c] + cmp r0, #0 + beq _021F44D4 + ldr r2, _021F4644 ; =0x0220DE9C + mov r0, r6 + add r1, r4, #0x1f4 + bl FUN_021F2F9C + ldr r2, [r4, #0x19c] + mov r0, r6 + add r1, r4, #0x1f4 + bl FUN_021F2F64 +_021F44D4: + ldr r0, [r4, #0x1a0] + cmp r0, #0 + beq _021F4500 + ldr r2, _021F4648 ; =0x0220DED8 + mov r0, r6 + add r1, r4, #0x1f4 + bl FUN_021F2F9C + ldr r2, [r4, #0x1a0] + mov r0, r6 + add r1, r4, #0x1f4 + bl FUN_021F2F64 +_021F4500: + ldr r2, _021F464C ; =0x0220E01C + mov r0, r6 + add r1, r4, #0x1f4 + bl FUN_021F2F9C + add r2, sp, #0x14 + mov r0, r6 + add r1, r4, #0x1f4 + bl FUN_021F2F9C + ldr r0, [r4, #0x10c] + cmp r0, #1 + bne _021F453C + ldr r2, _021F4650 ; =0x0220E028 + mov r0, r6 + add r1, r4, #0x1f4 + bl FUN_021F2F9C +_021F453C: + ldr r2, _021F4654 ; =0x0220E034 + mov r0, r6 + add r1, r4, #0x1f4 + bl FUN_021F2F9C + ldr r1, [r4, #0x208] + mov r0, r6 + mov r1, r1, lsl #0x10 + mov r1, r1, lsr #0x10 + mov r2, r1, asr #8 + mov r1, r1, lsl #8 + and r2, r2, #0xff + and r1, r1, #0xff00 + orr r1, r2, r1 + mov r1, r1, lsl #0x10 + mov r1, r1, lsr #0x10 + mov r2, r1, lsl #0x10 + add r1, r4, #0x1f4 + mov r2, r2, asr #0x10 + bl FUN_021F2F64 + ldr r2, _021F4658 ; =0x0220DFC0 + mov r0, r6 + add r1, r4, #0x1f4 + bl FUN_021F2F9C + ldr r2, [r4, #0x46c] + mov r0, r6 + add r1, r4, #0x1f4 + bl FUN_021F2F64 + mov r0, r6 + add r1, r4, #0x1f4 + ldr r2, _021F465C ; =0x0220DFCC + bl FUN_021F2F9C + mov r0, r6 + add r1, r4, #0x1f4 + ldr r2, _021F4660 ; =0x02210EA0 + bl FUN_021F2F9C + mov r0, r6 + add r1, r4, #0x1f4 + ldr r2, _021F4664 ; =0x0220DFD8 + bl FUN_021F2F9C + mov r0, r6 + add r1, r4, #0x1f4 + ldr r2, [r4, #0x470] + bl FUN_021F2F64 + mov r0, r6 + add r1, r4, #0x1f4 + ldr r2, _021F4668 ; =0x0220DFF4 + bl FUN_021F2F9C + mov r0, r6 + add r1, r4, #0x1f4 + ldr r2, _021F466C ; =0x0220DDE4 + bl FUN_021F2F9C + mov r0, #0 + add sp, sp, #0x28c + ldmia sp!, {r4, r5, r6, r7, pc} + .align 2, 0 +_021F4614: .word 0x000001C2 +_021F4618: .word 0x00000177 +_021F461C: .word 0x0000012F +_021F4620: .word 0x0220DF10 +_021F4624: .word 0x0220DF18 +_021F4628: .word 0x0220DF28 +_021F462C: .word 0x0220DFFC +_021F4630: .word 0x0220DE88 +_021F4634: .word 0x0220E004 +_021F4638: .word 0x0220DEF8 +_021F463C: .word 0x0220E010 +_021F4640: .word 0x0220E018 +_021F4644: .word 0x0220DE9C +_021F4648: .word 0x0220DED8 +_021F464C: .word 0x0220E01C +_021F4650: .word 0x0220E028 +_021F4654: .word 0x0220E034 +_021F4658: .word 0x0220DFC0 +_021F465C: .word 0x0220DFCC +_021F4660: .word 0x02210EA0 +_021F4664: .word 0x0220DFD8 +_021F4668: .word 0x0220DFF4 +_021F466C: .word 0x0220DDE4 + + arm_func_start FUN_021F4670 +FUN_021F4670: ; 0x021F4670 + stmdb sp!, {r4, r5, r6, r7, r8, lr} + sub sp, sp, #0x10 + mov r8, r0 + ldr r4, [r8] + mov r7, r1 + ldr r1, [r4, #0x1d8] + mov r6, r2 + mov r5, r3 + cmp r1, #4 + bne _021F46A8 + bl FUN_021F14C0 + cmp r0, #0 + addne sp, sp, #0x10 + ldmneia sp!, {r4, r5, r6, r7, r8, pc} +_021F46A8: + ldr r0, [r4, #0x1d8] + cmp r0, #0 + beq _021F46CC + ldr r1, _021F48AC ; =0x0220E03C + mov r0, r8 + bl FUN_021FAEEC + add sp, sp, #0x10 + mov r0, #2 + ldmia sp!, {r4, r5, r6, r7, r8, pc} +_021F46CC: + ldr r0, [sp, #0x38] + cmp r0, #0 + beq _021F46EC + cmp r0, #1 + bne _021F46F8 + mov r0, #1 + str r0, [r4, #0x10c] + b _021F4710 +_021F46EC: + mov r0, #0 + str r0, [r4, #0x10c] + b _021F4710 +_021F46F8: + ldr r1, _021F48B0 ; =0x0220E050 + mov r0, r8 + bl FUN_021FAEEC + add sp, sp, #0x10 + mov r0, #2 + ldmia sp!, {r4, r5, r6, r7, r8, pc} +_021F4710: + mov r3, #1 + mov r1, r7 + add r0, r4, #0x110 + mov r2, #0x1f + str r3, [r4, #0x10c] + bl FUN_021FB3DC + ldr r0, _021F48B4 ; =0x0000012F + mov r1, r6 + add r0, r4, r0 + mov r2, #0x15 + bl FUN_021FB3DC + mov r1, r5 + add r0, r4, #0x144 + mov r2, #0x33 + bl FUN_021FB3DC + ldr r0, _021F48B8 ; =0x00000177 + ldr r1, [sp, #0x28] + add r0, r4, r0 + mov r2, #0x1f + bl FUN_021FB3DC + add r0, r4, #0x144 + bl FUN_021F01C4 + mov r0, #0x308 + bl FUN_021DD860 + movs r4, r0 + bne _021F4790 + ldr r1, _021F48BC ; =0x0220DF84 + mov r0, r8 + bl FUN_021FAEEC + add sp, sp, #0x10 + mov r0, #1 + ldmia sp!, {r4, r5, r6, r7, r8, pc} +_021F4790: + mov r1, #0 + mov r2, #0x308 + bl Call_FillMemWithValue + ldr r0, [sp, #0x3c] + ldr r1, [sp, #0x2c] + str r0, [r4, #0x304] + ldrsb r0, [r1] + cmp r0, #0 + beq _021F47E4 + ldr r0, [sp, #0x30] + ldrsb r0, [r0] + cmp r0, #0 + beq _021F47E4 + add r0, r4, #0xc2 + mov r2, #0x100 + bl FUN_021FB3DC + ldr r0, _021F48C0 ; =0x000001C2 + ldr r1, [sp, #0x30] + add r0, r4, r0 + mov r2, #0x100 + bl FUN_021FB3DC +_021F47E4: + ldr r1, [sp, #0x34] + cmp r1, #0 + beq _021F4800 + ldr r0, _021F48C4 ; =0x000002C2 + mov r2, #0x41 + add r0, r4, r0 + bl FUN_021FB3DC +_021F4800: + ldr r1, [sp, #0x40] + ldr r0, [sp, #0x44] + str r1, [sp] + str r0, [sp, #4] + ldr r5, [sp, #0x48] + add r3, sp, #0xc + mov r0, r8 + mov r2, r4 + mov r1, #0 + str r5, [sp, #8] + bl FUN_021F6D8C + cmp r0, #0 + addne sp, sp, #0x10 + ldmneia sp!, {r4, r5, r6, r7, r8, pc} + ldr r1, [sp, #0xc] + mov r0, r8 + bl FUN_021F48C8 + movs r4, r0 + beq _021F4878 + ldr r1, [sp, #0xc] + mov r0, r8 + str r4, [r1, #0x1c] + ldr r1, [sp, #0xc] + bl FUN_021F6E44 + mov r0, r8 + mov r1, #0 + bl FUN_021F35F4 + add sp, sp, #0x10 + mov r0, r4 + ldmia sp!, {r4, r5, r6, r7, r8, pc} +_021F4878: + ldr r1, [sp, #0xc] + ldr r0, [r1, #8] + cmp r0, #0 + beq _021F48A0 + ldr r1, [r1, #0x18] + mov r0, r8 + bl FUN_021F0FD4 + cmp r0, #0 + addne sp, sp, #0x10 + ldmneia sp!, {r4, r5, r6, r7, r8, pc} +_021F48A0: + mov r0, #0 + add sp, sp, #0x10 + ldmia sp!, {r4, r5, r6, r7, r8, pc} + .align 2, 0 +_021F48AC: .word 0x0220E03C +_021F48B0: .word 0x0220E050 +_021F48B4: .word 0x0000012F +_021F48B8: .word 0x00000177 +_021F48BC: .word 0x0220DF84 +_021F48C0: .word 0x000001C2 +_021F48C4: .word 0x000002C2 + + arm_func_start FUN_021F48C8 +FUN_021F48C8: ; 0x021F48C8 + stmdb sp!, {r4, r5, r6, lr} + sub sp, sp, #0x10 + mov r6, r0 + ldr r4, [r6] + mov r5, r1 + ldr r0, [r4, #0x10c] + cmp r0, #0 + bne _021F4A70 + mov r0, #2 + mov r1, #1 + mov r2, #0 + bl FUN_021EFDB8 + str r0, [r4, #0x204] + ldr r0, [r4, #0x204] + mvn r1, #0 + cmp r0, r1 + bne _021F4938 + ldr r2, _021F4C1C ; =0x0220E064 + mov r0, r6 + mov r1, #5 + bl FUN_021FAF00 + mov r0, r6 + mov r1, #3 + mov r2, #1 + bl FUN_021F3500 + add sp, sp, #0x10 + mov r0, #3 + ldmia sp!, {r4, r5, r6, pc} +_021F4938: + mov r1, #0 + bl FUN_021F017C + cmp r0, #0 + bne _021F4974 + ldr r2, _021F4C20 ; =0x0220E08C + mov r0, r6 + mov r1, #5 + bl FUN_021FAF00 + mov r0, r6 + mov r1, #3 + mov r2, #1 + bl FUN_021F3500 + add sp, sp, #0x10 + mov r0, #3 + ldmia sp!, {r4, r5, r6, pc} +_021F4974: + add r1, sp, #0 + mov r0, #0 + str r0, [r1] + str r0, [r1, #4] + mov r0, #2 + strb r0, [sp, #1] + ldr r0, [r4, #0x204] + mov r2, #8 + bl FUN_021EFD28 + mvn r1, #0 + cmp r0, r1 + bne _021F49D0 + ldr r2, _021F4C24 ; =0x0220E0C0 + mov r0, r6 + mov r1, #5 + bl FUN_021FAF00 + mov r0, r6 + mov r1, #3 + mov r2, #1 + bl FUN_021F3500 + add sp, sp, #0x10 + mov r0, #3 + ldmia sp!, {r4, r5, r6, pc} +_021F49D0: + ldr r0, [r4, #0x204] + mov r1, #5 + bl FUN_021EFCC8 + mvn r1, #0 + cmp r0, r1 + bne _021F4A14 + ldr r2, _021F4C28 ; =0x0220E0E8 + mov r0, r6 + mov r1, #5 + bl FUN_021FAF00 + mov r0, r6 + mov r1, #3 + mov r2, #1 + bl FUN_021F3500 + add sp, sp, #0x10 + mov r0, #3 + ldmia sp!, {r4, r5, r6, pc} +_021F4A14: + mov r0, #8 + str r0, [sp, #8] + ldr r0, [r4, #0x204] + add r1, sp, #0 + add r2, sp, #8 + bl FUN_021EFB5C + mvn r1, #0 + cmp r0, r1 + bne _021F4A64 + ldr r2, _021F4C2C ; =0x0220E114 + mov r0, r6 + mov r1, #5 + bl FUN_021FAF00 + mov r0, r6 + mov r1, #3 + mov r2, #1 + bl FUN_021F3500 + add sp, sp, #0x10 + mov r0, #3 + ldmia sp!, {r4, r5, r6, pc} +_021F4A64: + ldrh r0, [sp, #2] + str r0, [r4, #0x208] + b _021F4A80 +_021F4A70: + mvn r0, #0 + str r0, [r4, #0x204] + mov r0, #0 + str r0, [r4, #0x208] +_021F4A80: + mov r0, #2 + mov r1, #1 + mov r2, #0 + bl FUN_021EFDB8 + str r0, [r4, #0x1d4] + ldr r0, [r4, #0x1d4] + mvn r1, #0 + cmp r0, r1 + bne _021F4AD0 + ldr r2, _021F4C1C ; =0x0220E064 + mov r0, r6 + mov r1, #5 + bl FUN_021FAF00 + mov r0, r6 + mov r1, #3 + mov r2, #1 + bl FUN_021F3500 + add sp, sp, #0x10 + mov r0, #3 + ldmia sp!, {r4, r5, r6, pc} +_021F4AD0: + mov r1, #0 + bl FUN_021F017C + cmp r0, #0 + bne _021F4B0C + ldr r2, _021F4C20 ; =0x0220E08C + mov r0, r6 + mov r1, #5 + bl FUN_021FAF00 + mov r0, r6 + mov r1, #3 + mov r2, #1 + bl FUN_021F3500 + add sp, sp, #0x10 + mov r0, #3 + ldmia sp!, {r4, r5, r6, pc} +_021F4B0C: + ldr r0, _021F4C30 ; =0x0220DD90 + bl FUN_0209A6EC + cmp r0, #0 + bne _021F4B48 + ldr r2, _021F4C34 ; =0x0220E144 + mov r0, r6 + mov r1, #5 + bl FUN_021FAF00 + mov r0, r6 + mov r1, #3 + mov r2, #1 + bl FUN_021F3500 + add sp, sp, #0x10 + mov r0, #3 + ldmia sp!, {r4, r5, r6, pc} +_021F4B48: + add r1, sp, #0 + mov r2, #0 + str r2, [r1] + str r2, [r1, #4] + mov r1, #2 + strb r1, [sp, #1] + ldr r0, [r0, #0xc] + ldr r0, [r0] + ldr r0, [r0] + str r0, [sp, #4] + cmp r0, #0 + bne _021F4B88 + ldr r0, _021F4C38 ; =0x0220E178 + ldr r1, _021F4C3C ; =0x0220DE30 + mov r3, #0x90 + bl __msl_assertion_failed +_021F4B88: + ldr r0, _021F4C40 ; =0x0000CC74 + add r1, sp, #0 + strh r0, [sp, #2] + ldr r0, [r4, #0x1d4] + mov r2, #8 + bl FUN_021EFCE4 + mvn r1, #0 + cmp r0, r1 + bne _021F4C04 + ldr r0, [r4, #0x1d4] + bl FUN_021EFB28 + mvn r1, #5 + cmp r0, r1 + beq _021F4C04 + mvn r1, #0x19 + cmp r0, r1 + beq _021F4C04 + mvn r1, #0x4b + cmp r0, r1 + beq _021F4C04 + ldr r2, _021F4C44 ; =0x0220E198 + mov r0, r6 + mov r1, #5 + bl FUN_021FAF00 + mov r0, r6 + mov r1, #3 + mov r2, #1 + bl FUN_021F3500 + add sp, sp, #0x10 + mov r0, #3 + ldmia sp!, {r4, r5, r6, pc} +_021F4C04: + mov r0, #1 + str r0, [r5, #0x14] + str r0, [r4, #0x1d8] + mov r0, #0 + add sp, sp, #0x10 + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +_021F4C1C: .word 0x0220E064 +_021F4C20: .word 0x0220E08C +_021F4C24: .word 0x0220E0C0 +_021F4C28: .word 0x0220E0E8 +_021F4C2C: .word 0x0220E114 +_021F4C30: .word 0x0220DD90 +_021F4C34: .word 0x0220E144 +_021F4C38: .word 0x0220E178 +_021F4C3C: .word 0x0220DE30 +_021F4C40: .word 0x0000CC74 +_021F4C44: .word 0x0220E198 + + arm_func_start FUN_021F4C48 +FUN_021F4C48: ; 0x021F4C48 + stmdb sp!, {r4, r5, r6, r7, r8, sb, lr} + sub sp, sp, #4 + mov r8, r1 + mov sb, r0 + cmp r8, #0 + mov r7, #0 + ble _021F4CA0 + ldr r6, _021F4CB0 ; =0x0220E1C0 + ldr r5, _021F4CB4 ; =0x08421085 + ldr r4, _021F4CB8 ; =0x0000003E +_021F4C70: + bl rand + umull r1, r2, r0, r5 + sub r1, r0, r2 + add r2, r2, r1, lsr #1 + mov r2, r2, lsr #5 + umull r1, r2, r4, r2 + sub r2, r0, r1 + ldrsb r0, [r6, r2] + strb r0, [sb, r7] + add r7, r7, #1 + cmp r7, r8 + blt _021F4C70 +_021F4CA0: + mov r0, #0 + strb r0, [sb, r7] + add sp, sp, #4 + ldmia sp!, {r4, r5, r6, r7, r8, sb, pc} + .align 2, 0 +_021F4CB0: .word 0x0220E1C0 +_021F4CB4: .word 0x08421085 +_021F4CB8: .word 0x0000003E + + arm_func_start FUN_021F4CBC +FUN_021F4CBC: ; 0x021F4CBC + stmdb sp!, {r4, lr} + mov r4, r0 + ldr r0, [r4, #0xc] + cmp r0, #0 + ldmeqia sp!, {r4, pc} + ldr r0, [r0] + bl FUN_021DD82C + ldr r0, [r4, #0xc] + mov r1, #0 + str r1, [r0] + ldr r0, [r4, #0xc] + ldr r0, [r0, #4] + bl FUN_021DD82C + ldr r0, [r4, #0xc] + mov r1, #0 + str r1, [r0, #4] + ldr r0, [r4, #0xc] + ldr r0, [r0, #8] + bl FUN_021DD82C + ldr r0, [r4, #0xc] + mov r1, #0 + str r1, [r0, #8] + ldr r0, [r4, #0xc] + ldr r0, [r0, #0xc] + bl FUN_021DD82C + ldr r0, [r4, #0xc] + mov r1, #0 + str r1, [r0, #0xc] + ldr r0, [r4, #0xc] + ldr r0, [r0, #0x10] + bl FUN_021DD82C + ldr r0, [r4, #0xc] + mov r1, #0 + str r1, [r0, #0x10] + ldr r0, [r4, #0xc] + ldr r0, [r0, #0x14] + bl FUN_021DD82C + ldr r0, [r4, #0xc] + mov r1, #0 + str r1, [r0, #0x14] + ldr r0, [r4, #0xc] + ldr r0, [r0, #0xc8] + bl FUN_021DD82C + ldr r0, [r4, #0xc] + mov r1, #0 + str r1, [r0, #0xc8] + ldr r0, [r4, #0xc] + bl FUN_021DD82C + mov r0, #0 + str r0, [r4, #0xc] + ldmia sp!, {r4, pc} + + arm_func_start FUN_021F4D88 +FUN_021F4D88: ; 0x021F4D88 + stmdb sp!, {r4, r5, r6, lr} + ldr r0, [r0] + mov r5, r1 + ldr r0, [r0, #0x100] + mov r4, r2 + cmp r0, #0 + moveq r0, #1 + ldmeqia sp!, {r4, r5, r6, pc} + mov r0, r5 + bl FUN_021F4CBC + mov r0, #0xf0 + bl FUN_021DD860 + str r0, [r5, #0xc] + ldr r6, [r5, #0xc] + cmp r6, #0 + beq _021F4E50 + mov lr, r4 + mov ip, #0xf +_021F4DD0: + ldmia lr!, {r0, r1, r2, r3} + stmia r6!, {r0, r1, r2, r3} + subs ip, ip, #1 + bne _021F4DD0 + ldr r0, [r4] + bl FUN_021F0208 + ldr r1, [r5, #0xc] + str r0, [r1] + ldr r0, [r4, #4] + bl FUN_021F0208 + ldr r1, [r5, #0xc] + str r0, [r1, #4] + ldr r0, [r4, #8] + bl FUN_021F0208 + ldr r1, [r5, #0xc] + str r0, [r1, #8] + ldr r0, [r4, #0xc] + bl FUN_021F0208 + ldr r1, [r5, #0xc] + str r0, [r1, #0xc] + ldr r0, [r4, #0x10] + bl FUN_021F0208 + ldr r1, [r5, #0xc] + str r0, [r1, #0x10] + ldr r0, [r4, #0x14] + bl FUN_021F0208 + ldr r1, [r5, #0xc] + str r0, [r1, #0x14] + ldr r0, [r4, #0xc8] + bl FUN_021F0208 + ldr r1, [r5, #0xc] + str r0, [r1, #0xc8] +_021F4E50: + ldr r0, [r5, #0xc] + cmp r0, #0 + movne r0, #1 + moveq r0, #0 + ldmia sp!, {r4, r5, r6, pc} + + arm_func_start FUN_021F4E64 +FUN_021F4E64: ; 0x021F4E64 + stmdb sp!, {r4, r5, r6, r7, r8, lr} + sub sp, sp, #0x20 + mov r8, r0 + ldr r0, [r8] + mov r4, #0 + str r4, [sp, #0x10] + ldr r5, [sp, #0x38] + cmp r2, #1 + ldr r0, [r0, #0x100] + moveq r4, #1 + cmp r0, #0 + moveq r4, #0 + mov r7, r1 + mov r6, r3 + cmp r5, #0 + beq _021F4F94 + cmp r4, #0 + beq _021F4F94 + add r2, sp, #0xc + mov r0, r8 + mov r1, r7 + bl FUN_021F85E8 + cmp r0, #0 + beq _021F4F94 + ldr r0, [sp, #0xc] + ldr r0, [r0, #0xc] + cmp r0, #0 + beq _021F4F94 + mov r0, #0x204 + bl FUN_021DD860 + movs r4, r0 + bne _021F4EFC + ldr r1, _021F5014 ; =0x0220E200 + mov r0, r8 + bl FUN_021FAEEC + add sp, sp, #0x20 + mov r0, #1 + ldmia sp!, {r4, r5, r6, r7, r8, pc} +_021F4EFC: + ldr r0, [sp, #0xc] + mov r1, r4 + ldr r0, [r0, #0xc] + bl FUN_021F66D4 + mov r2, #0 + str r2, [r4] + str r7, [r4, #4] + ldr r7, [sp, #0x3c] + str r5, [sp, #0x14] + str r7, [sp, #0x18] + mov r0, #1 + str r0, [sp] + str r5, [sp, #4] + add r3, sp, #0x10 + mov r0, r8 + mov r1, #2 + str r7, [sp, #8] + bl FUN_021F6D8C + cmp r0, #0 + addne sp, sp, #0x20 + ldmneia sp!, {r4, r5, r6, r7, r8, pc} + ldr r2, [sp, #0x10] + mov r0, #0 + ldr r5, [r2, #0x18] + add r1, sp, #0x14 + str r2, [sp] + str r0, [sp, #4] + mov r0, r8 + mov r3, r4 + ldmia r1, {r1, r2} + bl FUN_021F3454 + cmp r0, #0 + addne sp, sp, #0x20 + ldmneia sp!, {r4, r5, r6, r7, r8, pc} + ldr r1, [sp, #0x10] + mov r0, r8 + bl FUN_021F6C84 + b _021F4FE8 +_021F4F94: + str r6, [sp] + ldr r4, [sp, #0x3c] + str r5, [sp, #4] + add r3, sp, #0x10 + mov r0, r8 + mov r1, #2 + mov r2, #0 + str r4, [sp, #8] + bl FUN_021F6D8C + cmp r0, #0 + addne sp, sp, #0x20 + ldmneia sp!, {r4, r5, r6, r7, r8, pc} + ldr r1, [sp, #0x10] + mov r0, r8 + ldr r5, [r1, #0x18] + mov r1, r7 + mov r2, r5 + bl FUN_021F5018 + cmp r0, #0 + addne sp, sp, #0x20 + ldmneia sp!, {r4, r5, r6, r7, r8, pc} +_021F4FE8: + cmp r6, #0 + beq _021F5008 + mov r0, r8 + mov r1, r5 + bl FUN_021F0FD4 + cmp r0, #0 + addne sp, sp, #0x20 + ldmneia sp!, {r4, r5, r6, r7, r8, pc} +_021F5008: + mov r0, #0 + add sp, sp, #0x20 + ldmia sp!, {r4, r5, r6, r7, r8, pc} + .align 2, 0 +_021F5014: .word 0x0220E200 + + arm_func_start FUN_021F5018 +FUN_021F5018: ; 0x021F5018 + stmdb sp!, {r4, r5, r6, r7, lr} + sub sp, sp, #4 + mov r7, r0 + ldr r4, [r7] + mov r5, r2 + mov r6, r1 + ldr r2, _021F50A8 ; =0x0220E210 + add r1, r4, #0x1f4 + bl FUN_021F2F9C + ldr r2, [r4, #0x198] + mov r0, r7 + add r1, r4, #0x1f4 + bl FUN_021F2F64 + ldr r2, _021F50AC ; =0x0220E228 + mov r0, r7 + add r1, r4, #0x1f4 + bl FUN_021F2F9C + mov r2, r6 + mov r0, r7 + add r1, r4, #0x1f4 + bl FUN_021F2F64 + mov r0, r7 + add r1, r4, #0x1f4 + ldr r2, _021F50B0 ; =0x0220E234 + bl FUN_021F2F9C + mov r2, r5 + mov r0, r7 + add r1, r4, #0x1f4 + bl FUN_021F2F64 + mov r0, r7 + add r1, r4, #0x1f4 + ldr r2, _021F50B4 ; =0x0220E23C + bl FUN_021F2F9C + mov r0, #0 + add sp, sp, #4 + ldmia sp!, {r4, r5, r6, r7, pc} + .align 2, 0 +_021F50A8: .word 0x0220E210 +_021F50AC: .word 0x0220E228 +_021F50B0: .word 0x0220E234 +_021F50B4: .word 0x0220E23C + + arm_func_start FUN_021F50B8 +FUN_021F50B8: ; 0x021F50B8 + stmdb sp!, {r4, r5, r6, lr} + sub sp, sp, #0x100 + mov r6, r0 + movs r5, r2 + ldr r4, [r6] + bne _021F50E4 + ldr r1, _021F5810 ; =0x0220E264 + bl FUN_021FAEEC + add sp, sp, #0x100 + mov r0, #2 + ldmia sp!, {r4, r5, r6, pc} +_021F50E4: + sub r1, r1, #0x700 + cmp r1, #0x1e + addls pc, pc, r1, lsl #2 + b _021F57EC +_021F50F4: ; jump table + b _021F5170 ; case 0 + b _021F51D0 ; case 1 + b _021F5234 ; case 2 + b _021F529C ; case 3 + b _021F5300 ; case 4 + b _021F5330 ; case 5 + b _021F54BC ; case 6 + b _021F5360 ; case 7 + b _021F5390 ; case 8 + b _021F53C0 ; case 9 + b _021F57EC ; case 10 + b _021F5418 ; case 11 + b _021F57EC ; case 12 + b _021F54EC ; case 13 + b _021F5514 ; case 14 + b _021F553C ; case 15 + b _021F556C ; case 16 + b _021F5594 ; case 17 + b _021F55C4 ; case 18 + b _021F57EC ; case 19 + b _021F55EC ; case 20 + b _021F5614 ; case 21 + b _021F563C ; case 22 + b _021F566C ; case 23 + b _021F569C ; case 24 + b _021F56CC ; case 25 + b _021F56FC ; case 26 + b _021F572C ; case 27 + b _021F575C ; case 28 + b _021F578C ; case 29 + b _021F57BC ; case 30 +_021F5170: + ldrsb r1, [r5] + cmp r1, #0 + bne _021F5190 + ldr r1, _021F5810 ; =0x0220E264 + bl FUN_021FAEEC + add sp, sp, #0x100 + mov r0, #2 + ldmia sp!, {r4, r5, r6, pc} +_021F5190: + add r0, sp, #0 + mov r1, r5 + mov r2, #0x1f + bl FUN_021FB3DC + add r1, sp, #0 + add r0, r4, #0x110 + mov r2, #0x1f + bl FUN_021FB3DC + ldr r1, _021F5814 ; =0x0220E274 + add r2, sp, #0 + mov r0, r6 + bl FUN_021F5DB8 + cmp r0, #0 + beq _021F5804 + add sp, sp, #0x100 + ldmia sp!, {r4, r5, r6, pc} +_021F51D0: + ldrsb r1, [r5] + cmp r1, #0 + bne _021F51F0 + ldr r1, _021F5810 ; =0x0220E264 + bl FUN_021FAEEC + add sp, sp, #0x100 + mov r0, #2 + ldmia sp!, {r4, r5, r6, pc} +_021F51F0: + add r0, sp, #0 + mov r1, r5 + mov r2, #0x15 + bl FUN_021FB3DC + ldr r0, _021F5818 ; =0x0000012F + add r1, sp, #0 + add r0, r4, r0 + mov r2, #0x15 + bl FUN_021FB3DC + ldr r1, _021F581C ; =0x0220E27C + add r2, sp, #0 + mov r0, r6 + bl FUN_021F5DB8 + cmp r0, #0 + beq _021F5804 + add sp, sp, #0x100 + ldmia sp!, {r4, r5, r6, pc} +_021F5234: + ldrsb r1, [r5] + cmp r1, #0 + bne _021F5254 + ldr r1, _021F5810 ; =0x0220E264 + bl FUN_021FAEEC + add sp, sp, #0x100 + mov r0, #2 + ldmia sp!, {r4, r5, r6, pc} +_021F5254: + add r0, sp, #0 + mov r1, r5 + mov r2, #0x33 + bl FUN_021FB3DC + add r0, sp, #0 + bl FUN_021F01C4 + add r1, sp, #0 + add r0, r4, #0x144 + mov r2, #0x33 + bl FUN_021FB3DC + ldr r1, _021F5820 ; =0x0220E28C + add r2, sp, #0 + mov r0, r6 + bl FUN_021F5D78 + cmp r0, #0 + beq _021F5804 + add sp, sp, #0x100 + ldmia sp!, {r4, r5, r6, pc} +_021F529C: + ldrsb r1, [r5] + cmp r1, #0 + bne _021F52BC + ldr r1, _021F5810 ; =0x0220E264 + bl FUN_021FAEEC + add sp, sp, #0x100 + mov r0, #2 + ldmia sp!, {r4, r5, r6, pc} +_021F52BC: + add r0, sp, #0 + mov r1, r5 + mov r2, #0x1f + bl FUN_021FB3DC + ldr r0, _021F5824 ; =0x00000177 + add r1, sp, #0 + add r0, r4, r0 + mov r2, #0x1f + bl FUN_021FB3DC + ldr r1, _021F5828 ; =0x0220E294 + add r2, sp, #0 + mov r0, r6 + bl FUN_021F5D78 + cmp r0, #0 + beq _021F5804 + add sp, sp, #0x100 + ldmia sp!, {r4, r5, r6, pc} +_021F5300: + add r0, sp, #0 + mov r1, r5 + mov r2, #0x1f + bl FUN_021FB3DC + ldr r1, _021F582C ; =0x0220E2A0 + add r2, sp, #0 + mov r0, r6 + bl FUN_021F5DB8 + cmp r0, #0 + beq _021F5804 + add sp, sp, #0x100 + ldmia sp!, {r4, r5, r6, pc} +_021F5330: + add r0, sp, #0 + mov r1, r5 + mov r2, #0x1f + bl FUN_021FB3DC + ldr r1, _021F5830 ; =0x0220E2AC + add r2, sp, #0 + mov r0, r6 + bl FUN_021F5DB8 + cmp r0, #0 + beq _021F5804 + add sp, sp, #0x100 + ldmia sp!, {r4, r5, r6, pc} +_021F5360: + add r0, sp, #0 + mov r1, r5 + mov r2, #0x4c + bl FUN_021FB3DC + ldr r1, _021F5834 ; =0x0220E2B8 + add r2, sp, #0 + mov r0, r6 + bl FUN_021F5DB8 + cmp r0, #0 + beq _021F5804 + add sp, sp, #0x100 + ldmia sp!, {r4, r5, r6, pc} +_021F5390: + add r0, sp, #0 + mov r1, r5 + mov r2, #0xb + bl FUN_021FB3DC + ldr r1, _021F5838 ; =0x0220E2C4 + add r2, sp, #0 + mov r0, r6 + bl FUN_021F5DB8 + cmp r0, #0 + beq _021F5804 + add sp, sp, #0x100 + ldmia sp!, {r4, r5, r6, pc} +_021F53C0: + mov r0, r5 + bl strlen + cmp r0, #2 + beq _021F53E8 + ldr r1, _021F583C ; =0x0220E2D0 + mov r0, r6 + bl FUN_021FAEEC + add sp, sp, #0x100 + mov r0, #2 + ldmia sp!, {r4, r5, r6, pc} +_021F53E8: + add r0, sp, #0 + mov r1, r5 + mov r2, #3 + bl FUN_021FB3DC + ldr r1, _021F5840 ; =0x0220E2E8 + add r2, sp, #0 + mov r0, r6 + bl FUN_021F5DB8 + cmp r0, #0 + beq _021F5804 + add sp, sp, #0x100 + ldmia sp!, {r4, r5, r6, pc} +_021F5418: + ldrsb r1, [r5] + cmp r1, #0 + blt _021F5434 + cmp r1, #0x80 + bge _021F5434 + ldr r0, _021F5844 ; =0x0210428C + ldrb r1, [r0, r1] +_021F5434: + mov r0, r1, lsl #0x18 + mov r0, r0, asr #0x18 + cmp r0, #0x4d + bne _021F5460 + ldr r0, _021F5848 ; =0x0220E2F8 + add r2, sp, #0 + ldrb r1, [r0] + ldrb r0, [r0, #1] + strb r1, [r2] + strb r0, [r2, #1] + b _021F549C +_021F5460: + cmp r0, #0x46 + bne _021F5484 + ldr r0, _021F584C ; =0x0220E2FC + add r2, sp, #0 + ldrb r1, [r0] + ldrb r0, [r0, #1] + strb r1, [r2] + strb r0, [r2, #1] + b _021F549C +_021F5484: + ldr r0, _021F5850 ; =0x0220E300 + add r2, sp, #0 + ldrb r1, [r0] + ldrb r0, [r0, #1] + strb r1, [r2] + strb r0, [r2, #1] +_021F549C: + ldr r1, _021F5854 ; =0x0220E304 + add r2, sp, #0 + mov r0, r6 + bl FUN_021F5DB8 + cmp r0, #0 + beq _021F5804 + add sp, sp, #0x100 + ldmia sp!, {r4, r5, r6, pc} +_021F54BC: + add r0, sp, #0 + mov r1, r5 + mov r2, #0x100 + bl FUN_021FB3DC + ldr r1, _021F5858 ; =0x0220E30C + add r2, sp, #0 + mov r0, r6 + bl FUN_021F5DB8 + cmp r0, #0 + beq _021F5804 + add sp, sp, #0x100 + ldmia sp!, {r4, r5, r6, pc} +_021F54EC: + mov r0, r5 + bl atol + mov r2, r0 + ldr r1, _021F585C ; =0x0000070D + mov r0, r6 + bl FUN_021F58A0 + cmp r0, #0 + beq _021F5804 + add sp, sp, #0x100 + ldmia sp!, {r4, r5, r6, pc} +_021F5514: + mov r0, r5 + bl atol + mov r2, r0 + ldr r1, _021F5860 ; =0x0000070E + mov r0, r6 + bl FUN_021F58A0 + cmp r0, #0 + beq _021F5804 + add sp, sp, #0x100 + ldmia sp!, {r4, r5, r6, pc} +_021F553C: + add r0, sp, #0 + mov r1, r5 + mov r2, #0x100 + bl FUN_021FB3DC + ldr r1, _021F5864 ; =0x0220E318 + add r2, sp, #0 + mov r0, r6 + bl FUN_021F5DB8 + cmp r0, #0 + beq _021F5804 + add sp, sp, #0x100 + ldmia sp!, {r4, r5, r6, pc} +_021F556C: + mov r0, r5 + bl atol + mov r2, r0 + mov r0, r6 + mov r1, #0x710 + bl FUN_021F58A0 + cmp r0, #0 + beq _021F5804 + add sp, sp, #0x100 + ldmia sp!, {r4, r5, r6, pc} +_021F5594: + add r0, sp, #0 + mov r1, r5 + mov r2, #0x100 + bl FUN_021FB3DC + ldr r1, _021F5868 ; =0x0220E32C + add r2, sp, #0 + mov r0, r6 + bl FUN_021F5DB8 + cmp r0, #0 + beq _021F5804 + add sp, sp, #0x100 + ldmia sp!, {r4, r5, r6, pc} +_021F55C4: + mov r0, r5 + bl atol + mov r2, r0 + ldr r1, _021F586C ; =0x00000712 + mov r0, r6 + bl FUN_021F58A0 + cmp r0, #0 + beq _021F5804 + add sp, sp, #0x100 + ldmia sp!, {r4, r5, r6, pc} +_021F55EC: + mov r0, r5 + bl atol + mov r2, r0 + ldr r1, _021F5870 ; =0x00000714 + mov r0, r6 + bl FUN_021F58A0 + cmp r0, #0 + beq _021F5804 + add sp, sp, #0x100 + ldmia sp!, {r4, r5, r6, pc} +_021F5614: + mov r0, r5 + bl atol + mov r2, r0 + ldr r1, _021F5874 ; =0x00000715 + mov r0, r6 + bl FUN_021F58A0 + cmp r0, #0 + beq _021F5804 + add sp, sp, #0x100 + ldmia sp!, {r4, r5, r6, pc} +_021F563C: + add r0, sp, #0 + mov r1, r5 + mov r2, #0x100 + bl FUN_021FB3DC + ldr r1, _021F5878 ; =0x0220E340 + add r2, sp, #0 + mov r0, r6 + bl FUN_021F5DB8 + cmp r0, #0 + beq _021F5804 + add sp, sp, #0x100 + ldmia sp!, {r4, r5, r6, pc} +_021F566C: + add r0, sp, #0 + mov r1, r5 + mov r2, #0x33 + bl FUN_021FB3DC + ldr r1, _021F587C ; =0x0220E34C + add r2, sp, #0 + mov r0, r6 + bl FUN_021F5DB8 + cmp r0, #0 + beq _021F5804 + add sp, sp, #0x100 + ldmia sp!, {r4, r5, r6, pc} +_021F569C: + add r0, sp, #0 + mov r1, r5 + mov r2, #0x100 + bl FUN_021FB3DC + ldr r1, _021F5880 ; =0x0220E354 + add r2, sp, #0 + mov r0, r6 + bl FUN_021F5DB8 + cmp r0, #0 + beq _021F5804 + add sp, sp, #0x100 + ldmia sp!, {r4, r5, r6, pc} +_021F56CC: + add r0, sp, #0 + mov r1, r5 + mov r2, #0x100 + bl FUN_021FB3DC + ldr r1, _021F5884 ; =0x0220E35C + add r2, sp, #0 + mov r0, r6 + bl FUN_021F5DB8 + cmp r0, #0 + beq _021F5804 + add sp, sp, #0x100 + ldmia sp!, {r4, r5, r6, pc} +_021F56FC: + add r0, sp, #0 + mov r1, r5 + mov r2, #0x100 + bl FUN_021FB3DC + ldr r1, _021F5888 ; =0x0220E364 + add r2, sp, #0 + mov r0, r6 + bl FUN_021F5DB8 + cmp r0, #0 + beq _021F5804 + add sp, sp, #0x100 + ldmia sp!, {r4, r5, r6, pc} +_021F572C: + add r0, sp, #0 + mov r1, r5 + mov r2, #0x100 + bl FUN_021FB3DC + ldr r1, _021F588C ; =0x0220E36C + add r2, sp, #0 + mov r0, r6 + bl FUN_021F5DB8 + cmp r0, #0 + beq _021F5804 + add sp, sp, #0x100 + ldmia sp!, {r4, r5, r6, pc} +_021F575C: + add r0, sp, #0 + mov r1, r5 + mov r2, #0x100 + bl FUN_021FB3DC + ldr r1, _021F5890 ; =0x0220E374 + add r2, sp, #0 + mov r0, r6 + bl FUN_021F5DB8 + cmp r0, #0 + beq _021F5804 + add sp, sp, #0x100 + ldmia sp!, {r4, r5, r6, pc} +_021F578C: + add r0, sp, #0 + mov r1, r5 + mov r2, #0x100 + bl FUN_021FB3DC + ldr r1, _021F5894 ; =0x0220E37C + add r2, sp, #0 + mov r0, r6 + bl FUN_021F5DB8 + cmp r0, #0 + beq _021F5804 + add sp, sp, #0x100 + ldmia sp!, {r4, r5, r6, pc} +_021F57BC: + add r0, sp, #0 + mov r1, r5 + mov r2, #0x100 + bl FUN_021FB3DC + ldr r1, _021F5898 ; =0x0220E384 + add r2, sp, #0 + mov r0, r6 + bl FUN_021F5DB8 + cmp r0, #0 + beq _021F5804 + add sp, sp, #0x100 + ldmia sp!, {r4, r5, r6, pc} +_021F57EC: + ldr r1, _021F589C ; =0x0220E248 + mov r0, r6 + bl FUN_021FAEEC + add sp, sp, #0x100 + mov r0, #2 + ldmia sp!, {r4, r5, r6, pc} +_021F5804: + mov r0, #0 + add sp, sp, #0x100 + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +_021F5810: .word 0x0220E264 +_021F5814: .word 0x0220E274 +_021F5818: .word 0x0000012F +_021F581C: .word 0x0220E27C +_021F5820: .word 0x0220E28C +_021F5824: .word 0x00000177 +_021F5828: .word 0x0220E294 +_021F582C: .word 0x0220E2A0 +_021F5830: .word 0x0220E2AC +_021F5834: .word 0x0220E2B8 +_021F5838: .word 0x0220E2C4 +_021F583C: .word 0x0220E2D0 +_021F5840: .word 0x0220E2E8 +_021F5844: .word 0x0210428C +_021F5848: .word 0x0220E2F8 +_021F584C: .word 0x0220E2FC +_021F5850: .word 0x0220E300 +_021F5854: .word 0x0220E304 +_021F5858: .word 0x0220E30C +_021F585C: .word 0x0000070D +_021F5860: .word 0x0000070E +_021F5864: .word 0x0220E318 +_021F5868: .word 0x0220E32C +_021F586C: .word 0x00000712 +_021F5870: .word 0x00000714 +_021F5874: .word 0x00000715 +_021F5878: .word 0x0220E340 +_021F587C: .word 0x0220E34C +_021F5880: .word 0x0220E354 +_021F5884: .word 0x0220E35C +_021F5888: .word 0x0220E364 +_021F588C: .word 0x0220E36C +_021F5890: .word 0x0220E374 +_021F5894: .word 0x0220E37C +_021F5898: .word 0x0220E384 +_021F589C: .word 0x0220E248 + + arm_func_start FUN_021F58A0 +FUN_021F58A0: ; 0x021F58A0 + stmdb sp!, {r4, lr} + sub sp, sp, #0x10 + ldr r3, _021F5D08 ; =0x00000706 + mov r4, r0 + sub r1, r1, r3 + cmp r1, #0x18 + addls pc, pc, r1, lsl #2 + b _021F5CE4 +_021F58C0: ; jump table + b _021F59F8 ; case 0 + b _021F5CE4 ; case 1 + b _021F5924 ; case 2 + b _021F5CE4 ; case 3 + b _021F5CE4 ; case 4 + b _021F596C ; case 5 + b _021F5A24 ; case 6 + b _021F5A50 ; case 7 + b _021F5A7C ; case 8 + b _021F5CE4 ; case 9 + b _021F5AB4 ; case 10 + b _021F5CE4 ; case 11 + b _021F5AEC ; case 12 + b _021F5B24 ; case 13 + b _021F5B50 ; case 14 + b _021F5B7C ; case 15 + b _021F5CE4 ; case 16 + b _021F5CE4 ; case 17 + b _021F5BB0 ; case 18 + b _021F5BDC ; case 19 + b _021F5C08 ; case 20 + b _021F5C34 ; case 21 + b _021F5C60 ; case 22 + b _021F5C8C ; case 23 + b _021F5CB8 ; case 24 +_021F5924: + cmp r2, #0 + bge _021F5940 + ldr r1, _021F5D0C ; =0x0220E38C + bl FUN_021FAEEC + add sp, sp, #0x10 + mov r0, #2 + ldmia sp!, {r4, pc} +_021F5940: + ldr r1, _021F5D10 ; =0x0220E244 + add r0, sp, #0 + bl sprintf + ldr r1, _021F5D14 ; =0x0220E2C4 + add r2, sp, #0 + mov r0, r4 + bl FUN_021F5DB8 + cmp r0, #0 + beq _021F5CFC + add sp, sp, #0x10 + ldmia sp!, {r4, pc} +_021F596C: + cmp r2, #0x500 + beq _021F5990 + ldr r1, _021F5D18 ; =0x00000501 + cmp r2, r1 + beq _021F59AC + ldr r1, _021F5D1C ; =0x00000502 + cmp r2, r1 + beq _021F59C8 + b _021F59E4 +_021F5990: + ldr r1, _021F5D20 ; =0x0220E304 + ldr r2, _021F5D24 ; =0x0220E2F8 + bl FUN_021F5DB8 + cmp r0, #0 + beq _021F5CFC + add sp, sp, #0x10 + ldmia sp!, {r4, pc} +_021F59AC: + ldr r1, _021F5D20 ; =0x0220E304 + ldr r2, _021F5D28 ; =0x0220E2FC + bl FUN_021F5DB8 + cmp r0, #0 + beq _021F5CFC + add sp, sp, #0x10 + ldmia sp!, {r4, pc} +_021F59C8: + ldr r1, _021F5D20 ; =0x0220E304 + ldr r2, _021F5D2C ; =0x0220E300 + bl FUN_021F5DB8 + cmp r0, #0 + beq _021F5CFC + add sp, sp, #0x10 + ldmia sp!, {r4, pc} +_021F59E4: + ldr r1, _021F5D30 ; =0x0220E3A0 + bl FUN_021FAEEC + add sp, sp, #0x10 + mov r0, #2 + ldmia sp!, {r4, pc} +_021F59F8: + ldr r1, _021F5D10 ; =0x0220E244 + add r0, sp, #0 + bl sprintf + ldr r1, _021F5D34 ; =0x0220E30C + add r2, sp, #0 + mov r0, r4 + bl FUN_021F5DB8 + cmp r0, #0 + beq _021F5CFC + add sp, sp, #0x10 + ldmia sp!, {r4, pc} +_021F5A24: + ldr r1, _021F5D10 ; =0x0220E244 + add r0, sp, #0 + bl sprintf + ldr r1, _021F5D38 ; =0x0220E3B0 + add r2, sp, #0 + mov r0, r4 + bl FUN_021F5D78 + cmp r0, #0 + beq _021F5CFC + add sp, sp, #0x10 + ldmia sp!, {r4, pc} +_021F5A50: + ldr r1, _021F5D10 ; =0x0220E244 + add r0, sp, #0 + bl sprintf + ldr r1, _021F5D3C ; =0x0220E3C0 + add r2, sp, #0 + mov r0, r4 + bl FUN_021F5D78 + cmp r0, #0 + beq _021F5CFC + add sp, sp, #0x10 + ldmia sp!, {r4, pc} +_021F5A7C: + mov r0, r2, asr #3 + add r2, r2, r0, lsr #28 + ldr r1, _021F5D10 ; =0x0220E244 + add r0, sp, #0 + mov r2, r2, asr #4 + bl sprintf + ldr r1, _021F5D40 ; =0x0220E3CC + add r2, sp, #0 + mov r0, r4 + bl FUN_021F5D78 + cmp r0, #0 + beq _021F5CFC + add sp, sp, #0x10 + ldmia sp!, {r4, pc} +_021F5AB4: + mov r0, r2, asr #1 + add r2, r2, r0, lsr #30 + ldr r1, _021F5D10 ; =0x0220E244 + add r0, sp, #0 + mov r2, r2, asr #2 + bl sprintf + ldr r1, _021F5D44 ; =0x0220E3D8 + add r2, sp, #0 + mov r0, r4 + bl FUN_021F5D78 + cmp r0, #0 + beq _021F5CFC + add sp, sp, #0x10 + ldmia sp!, {r4, pc} +_021F5AEC: + mov r0, r2, asr #1 + add r2, r2, r0, lsr #30 + ldr r1, _021F5D10 ; =0x0220E244 + add r0, sp, #0 + mov r2, r2, asr #2 + bl sprintf + ldr r1, _021F5D48 ; =0x0220E3E8 + add r2, sp, #0 + mov r0, r4 + bl FUN_021F5D78 + cmp r0, #0 + beq _021F5CFC + add sp, sp, #0x10 + ldmia sp!, {r4, pc} +_021F5B24: + ldr r1, _021F5D10 ; =0x0220E244 + add r0, sp, #0 + bl sprintf + ldr r1, _021F5D4C ; =0x0220E3F8 + add r2, sp, #0 + mov r0, r4 + bl FUN_021F5D78 + cmp r0, #0 + beq _021F5CFC + add sp, sp, #0x10 + ldmia sp!, {r4, pc} +_021F5B50: + ldr r1, _021F5D10 ; =0x0220E244 + add r0, sp, #0 + bl sprintf + ldr r1, _021F5D50 ; =0x0220E408 + add r2, sp, #0 + mov r0, r4 + bl FUN_021F5D78 + cmp r0, #0 + beq _021F5CFC + add sp, sp, #0x10 + ldmia sp!, {r4, pc} +_021F5B7C: + ldr r1, _021F5D10 ; =0x0220E244 + cmp r2, #0 + movne r2, #1 + add r0, sp, #0 + bl sprintf + ldr r1, _021F5D54 ; =0x0220E41C + add r2, sp, #0 + mov r0, r4 + bl FUN_021F5D78 + cmp r0, #0 + beq _021F5CFC + add sp, sp, #0x10 + ldmia sp!, {r4, pc} +_021F5BB0: + ldr r1, _021F5D10 ; =0x0220E244 + add r0, sp, #0 + bl sprintf + ldr r1, _021F5D58 ; =0x0220E354 + add r2, sp, #0 + mov r0, r4 + bl FUN_021F5DB8 + cmp r0, #0 + beq _021F5CFC + add sp, sp, #0x10 + ldmia sp!, {r4, pc} +_021F5BDC: + ldr r1, _021F5D10 ; =0x0220E244 + add r0, sp, #0 + bl sprintf + ldr r1, _021F5D5C ; =0x0220E35C + add r2, sp, #0 + mov r0, r4 + bl FUN_021F5DB8 + cmp r0, #0 + beq _021F5CFC + add sp, sp, #0x10 + ldmia sp!, {r4, pc} +_021F5C08: + ldr r1, _021F5D10 ; =0x0220E244 + add r0, sp, #0 + bl sprintf + ldr r1, _021F5D60 ; =0x0220E364 + add r2, sp, #0 + mov r0, r4 + bl FUN_021F5DB8 + cmp r0, #0 + beq _021F5CFC + add sp, sp, #0x10 + ldmia sp!, {r4, pc} +_021F5C34: + ldr r1, _021F5D10 ; =0x0220E244 + add r0, sp, #0 + bl sprintf + ldr r1, _021F5D64 ; =0x0220E36C + add r2, sp, #0 + mov r0, r4 + bl FUN_021F5DB8 + cmp r0, #0 + beq _021F5CFC + add sp, sp, #0x10 + ldmia sp!, {r4, pc} +_021F5C60: + ldr r1, _021F5D10 ; =0x0220E244 + add r0, sp, #0 + bl sprintf + ldr r1, _021F5D68 ; =0x0220E374 + add r2, sp, #0 + mov r0, r4 + bl FUN_021F5DB8 + cmp r0, #0 + beq _021F5CFC + add sp, sp, #0x10 + ldmia sp!, {r4, pc} +_021F5C8C: + ldr r1, _021F5D10 ; =0x0220E244 + add r0, sp, #0 + bl sprintf + ldr r1, _021F5D6C ; =0x0220E37C + add r2, sp, #0 + mov r0, r4 + bl FUN_021F5DB8 + cmp r0, #0 + beq _021F5CFC + add sp, sp, #0x10 + ldmia sp!, {r4, pc} +_021F5CB8: + ldr r1, _021F5D10 ; =0x0220E244 + add r0, sp, #0 + bl sprintf + ldr r1, _021F5D70 ; =0x0220E384 + add r2, sp, #0 + mov r0, r4 + bl FUN_021F5DB8 + cmp r0, #0 + beq _021F5CFC + add sp, sp, #0x10 + ldmia sp!, {r4, pc} +_021F5CE4: + ldr r1, _021F5D74 ; =0x0220E248 + mov r0, r4 + bl FUN_021FAEEC + add sp, sp, #0x10 + mov r0, #2 + ldmia sp!, {r4, pc} +_021F5CFC: + mov r0, #0 + add sp, sp, #0x10 + ldmia sp!, {r4, pc} + .align 2, 0 +_021F5D08: .word 0x00000706 +_021F5D0C: .word 0x0220E38C +_021F5D10: .word 0x0220E244 +_021F5D14: .word 0x0220E2C4 +_021F5D18: .word 0x00000501 +_021F5D1C: .word 0x00000502 +_021F5D20: .word 0x0220E304 +_021F5D24: .word 0x0220E2F8 +_021F5D28: .word 0x0220E2FC +_021F5D2C: .word 0x0220E300 +_021F5D30: .word 0x0220E3A0 +_021F5D34: .word 0x0220E30C +_021F5D38: .word 0x0220E3B0 +_021F5D3C: .word 0x0220E3C0 +_021F5D40: .word 0x0220E3CC +_021F5D44: .word 0x0220E3D8 +_021F5D48: .word 0x0220E3E8 +_021F5D4C: .word 0x0220E3F8 +_021F5D50: .word 0x0220E408 +_021F5D54: .word 0x0220E41C +_021F5D58: .word 0x0220E354 +_021F5D5C: .word 0x0220E35C +_021F5D60: .word 0x0220E364 +_021F5D64: .word 0x0220E36C +_021F5D68: .word 0x0220E374 +_021F5D6C: .word 0x0220E37C +_021F5D70: .word 0x0220E384 +_021F5D74: .word 0x0220E248 + + arm_func_start FUN_021F5D78 +FUN_021F5D78: ; 0x021F5D78 + stmdb sp!, {r4, r5, r6, lr} + mov r6, r0 + ldr r4, [r6] + mov r5, r2 + mov r2, r1 + add r1, r4, #0x450 + bl FUN_021F2F9C + cmp r0, #0 + ldmneia sp!, {r4, r5, r6, pc} + mov r0, r6 + mov r2, r5 + add r1, r4, #0x450 + bl FUN_021F2F9C + cmp r0, #0 + moveq r0, #0 + ldmia sp!, {r4, r5, r6, pc} + + arm_func_start FUN_021F5DB8 +FUN_021F5DB8: ; 0x021F5DB8 + stmdb sp!, {r4, r5, r6, lr} + mov r6, r0 + ldr r4, [r6] + mov r5, r2 + mov r2, r1 + add r1, r4, #0x440 + bl FUN_021F2F9C + cmp r0, #0 + ldmneia sp!, {r4, r5, r6, pc} + mov r0, r6 + mov r2, r5 + add r1, r4, #0x440 + bl FUN_021F2F9C + cmp r0, #0 + moveq r0, #0 + ldmia sp!, {r4, r5, r6, pc} + + arm_func_start FUN_021F5DF8 +FUN_021F5DF8: ; 0x021F5DF8 + stmdb sp!, {r4, r5, r6, lr} + mov r6, r0 + ldr r4, [r6] + mov r5, r1 + ldr r2, [r4, #0x448] + cmp r2, #0 + ble _021F5E54 + ldr r2, _021F5EB0 ; =0x0220E42C + bl FUN_021F2F9C + ldr r2, [r4, #0x198] + mov r0, r6 + mov r1, r5 + bl FUN_021F2F64 + ldr r2, [r4, #0x440] + mov r0, r6 + mov r1, r5 + bl FUN_021F2F9C + ldr r2, _021F5EB4 ; =0x0220E23C + mov r0, r6 + mov r1, r5 + bl FUN_021F2F9C + mov r0, #0 + str r0, [r4, #0x448] +_021F5E54: + ldr r0, [r4, #0x458] + cmp r0, #0 + ble _021F5EA8 + ldr r2, _021F5EB8 ; =0x0220E444 + mov r0, r6 + mov r1, r5 + bl FUN_021F2F9C + ldr r2, [r4, #0x198] + mov r0, r6 + mov r1, r5 + bl FUN_021F2F64 + ldr r2, [r4, #0x450] + mov r0, r6 + mov r1, r5 + bl FUN_021F2F9C + ldr r2, _021F5EB4 ; =0x0220E23C + mov r0, r6 + mov r1, r5 + bl FUN_021F2F9C + mov r0, #0 + str r0, [r4, #0x458] +_021F5EA8: + mov r0, #0 + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +_021F5EB0: .word 0x0220E42C +_021F5EB4: .word 0x0220E23C +_021F5EB8: .word 0x0220E444 + + arm_func_start FUN_021F5EBC +FUN_021F5EBC: ; 0x021F5EBC + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x26c + mov r4, r2 + mov sl, r0 + mov fp, r1 + mov r1, r4 + mov r2, #1 + ldr r8, [sl] + bl FUN_021FB2F8 + cmp r0, #0 + addne sp, sp, #0x26c + movne r0, #4 + ldmneia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + ldr r1, _021F6648 ; =0x0220E458 + mov r0, r4 + mov r2, #4 + bl strncmp + cmp r0, #0 + beq _021F5F34 + ldr r2, _021F664C ; =0x0220E460 + mov r0, sl + mov r1, #1 + bl FUN_021FAF00 + mov r0, sl + mov r1, #3 + mov r2, #1 + bl FUN_021F3500 + add sp, sp, #0x26c + mov r0, #3 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +_021F5F34: + ldr r1, _021F6650 ; =0x0220E228 + add r2, sp, #0x14 + mov r0, r4 + mov r3, #0x40 + bl FUN_021FB1F0 + cmp r0, #0 + bne _021F5F7C + ldr r2, _021F664C ; =0x0220E460 + mov r0, sl + mov r1, #1 + bl FUN_021FAF00 + mov r0, sl + mov r1, #3 + mov r2, #1 + bl FUN_021F3500 + add sp, sp, #0x26c + mov r0, #3 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +_021F5F7C: + add r0, sp, #0x14 + bl atol + mov sb, r0 + cmp sb, #0 + bgt _021F5FA4 + ldr r0, _021F6654 ; =0x0220E490 + ldr r1, _021F6658 ; =0x0220E4A0 + ldr r3, _021F665C ; =0x0000015A + mov r2, #0 + bl __msl_assertion_failed +_021F5FA4: + add r2, sp, #8 + mov r0, sl + mov r1, sb + bl FUN_021F85E8 + mov r0, #0 + add r6, sp, #0x12c + mov r1, r0 + mov r2, r0 + mov r3, r0 + mov r5, #7 +_021F5FCC: + stmia r6!, {r0, r1, r2, r3} + stmia r6!, {r0, r1, r2, r3} + subs r5, r5, #1 + bne _021F5FCC + stmia r6!, {r0, r1, r2, r3} + add r3, sp, #0x73 + add r1, sp, #0xbb + add r2, sp, #0x54 + add r5, sp, #0x88 + add r0, sp, #0xda + str r3, [sp, #0x130] + add r3, sp, #0x21c + str r1, [sp, #0x138] + str r5, [sp, #0x134] + add r5, sp, #0xf9 + str r0, [sp, #0x13c] + str r3, [sp, #0x140] + ldr r1, _021F6660 ; =0x0220E274 + mov r0, r4 + mov r3, #0x1f + str r2, [sp, #0x12c] + str r5, [sp, #0x1f4] + bl FUN_021FB1F0 + cmp r0, #0 + ldreq r0, [sp, #0x12c] + moveq r1, #0 + streqb r1, [r0] + ldr r2, [sp, #0x130] + ldr r1, _021F6664 ; =0x0220E27C + mov r0, r4 + mov r3, #0x15 + bl FUN_021FB1F0 + cmp r0, #0 + ldreq r0, [sp, #0x130] + moveq r1, #0 + streqb r1, [r0] + ldr r2, [sp, #0x134] + ldr r1, _021F6668 ; =0x0220E28C + mov r0, r4 + mov r3, #0x33 + bl FUN_021FB1F0 + cmp r0, #0 + ldreq r0, [sp, #0x134] + moveq r1, #0 + streqb r1, [r0] + ldr r2, [sp, #0x138] + ldr r1, _021F666C ; =0x0220E2A0 + mov r0, r4 + mov r3, #0x1f + bl FUN_021FB1F0 + cmp r0, #0 + ldreq r0, [sp, #0x138] + moveq r1, #0 + streqb r1, [r0] + ldr r2, [sp, #0x13c] + ldr r1, _021F6670 ; =0x0220E2AC + mov r0, r4 + mov r3, #0x1f + bl FUN_021FB1F0 + cmp r0, #0 + ldreq r0, [sp, #0x13c] + moveq r1, #0 + streqb r1, [r0] + ldr r1, _021F6674 ; =0x0220E30C + add r2, sp, #0x14 + mov r0, r4 + mov r3, #0x40 + bl FUN_021FB1F0 + cmp r0, #0 + mvneq r0, #0 + streq r0, [sp, #0x144] + beq _021F60F8 + add r0, sp, #0x14 + bl atol + str r0, [sp, #0x144] +_021F60F8: + ldr r2, [sp, #0x140] + ldr r1, _021F6678 ; =0x0220E2B8 + mov r0, r4 + mov r3, #0x4c + bl FUN_021FB1F0 + cmp r0, #0 + ldreq r0, [sp, #0x140] + moveq r1, #0 + streqb r1, [r0] + ldr r1, _021F667C ; =0x0220E2C4 + add r2, sp, #0x148 + mov r0, r4 + mov r3, #0xb + bl FUN_021FB1F0 + cmp r0, #0 + moveq r0, #0 + add r2, sp, #0x100 + streqb r0, [sp, #0x148] + ldr r1, _021F6680 ; =0x0220E2E8 + add r2, r2, #0x53 + mov r0, r4 + mov r3, #3 + bl FUN_021FB1F0 + cmp r0, #0 + moveq r0, #0 + streqb r0, [sp, #0x153] + ldr r1, _021F6684 ; =0x0220E4AC + add r2, sp, #0x14 + mov r0, r4 + mov r3, #0x40 + bl FUN_021FB1F0 + cmp r0, #0 + moveq r0, #0 + streq r0, [sp, #0x158] + beq _021F6194 + add r0, sp, #0x14 + bl atod + bl _d2f + str r0, [sp, #0x158] +_021F6194: + ldr r1, _021F6688 ; =0x0220E4B4 + add r2, sp, #0x14 + mov r0, r4 + mov r3, #0x40 + bl FUN_021FB1F0 + cmp r0, #0 + moveq r0, #0 + streq r0, [sp, #0x15c] + beq _021F61C8 + add r0, sp, #0x14 + bl atod + bl _d2f + str r0, [sp, #0x15c] +_021F61C8: + ldr r1, _021F668C ; =0x0220E4BC + add r2, sp, #0x160 + mov r0, r4 + mov r3, #0x80 + bl FUN_021FB1F0 + cmp r0, #0 + moveq r0, #0 + streqb r0, [sp, #0x160] + ldr r1, _021F6690 ; =0x0220E258 + add r2, sp, #0x14 + mov r0, r4 + mov r3, #0x40 + bl FUN_021FB1F0 + cmp r0, #0 + moveq r0, #0 + streq r0, [sp, #0x1e0] + streq r0, [sp, #0x1e4] + streq r0, [sp, #0x1e8] + beq _021F6244 + add r0, sp, #0x14 + bl atol + add r5, sp, #0x1e8 + mov r1, r0 + add r2, sp, #0x1e0 + add r3, sp, #0x1e4 + mov r0, sl + str r5, [sp] + bl FUN_021F68D8 + cmp r0, #0 + addne sp, sp, #0x26c + ldmneia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +_021F6244: + ldr r1, _021F6694 ; =0x0220E304 + add r2, sp, #0x14 + mov r0, r4 + mov r3, #0x40 + bl FUN_021FB1F0 + cmp r0, #0 + ldreq r0, _021F6698 ; =0x00000502 + streq r0, [sp, #0x1ec] + beq _021F6290 + ldrsb r0, [sp, #0x14] + cmp r0, #0x30 + moveq r0, #0x500 + streq r0, [sp, #0x1ec] + beq _021F6290 + cmp r0, #0x31 + ldreq r0, _021F669C ; =0x00000501 + streq r0, [sp, #0x1ec] + ldrne r0, _021F6698 ; =0x00000502 + strne r0, [sp, #0x1ec] +_021F6290: + ldr r1, _021F66A0 ; =0x0220E4C4 + add r2, sp, #0x14 + mov r0, r4 + mov r3, #0x40 + bl FUN_021FB1F0 + cmp r0, #0 + mvneq r0, #0 + streq r0, [sp, #0x1f0] + beq _021F62C0 + add r0, sp, #0x14 + bl atol + str r0, [sp, #0x1f0] +_021F62C0: + ldr r2, [sp, #0x1f4] + ldr r1, _021F66A4 ; =0x0220E34C + mov r0, r4 + mov r3, #0x33 + bl FUN_021FB1F0 + cmp r0, #0 + ldreq r0, [sp, #0x1f4] + moveq r1, #0 + streqb r1, [r0] + ldr r1, _021F66A8 ; =0x0220E354 + add r2, sp, #0x14 + mov r0, r4 + mov r3, #0x40 + bl FUN_021FB1F0 + cmp r0, #0 + moveq r0, #0 + streq r0, [sp, #0x1f8] + beq _021F6314 + add r0, sp, #0x14 + bl atol + str r0, [sp, #0x1f8] +_021F6314: + ldr r1, _021F66AC ; =0x0220E35C + add r2, sp, #0x14 + mov r0, r4 + mov r3, #0x40 + bl FUN_021FB1F0 + cmp r0, #0 + moveq r0, #0 + streq r0, [sp, #0x1fc] + beq _021F6344 + add r0, sp, #0x14 + bl atol + str r0, [sp, #0x1fc] +_021F6344: + ldr r1, _021F66B0 ; =0x0220E364 + add r2, sp, #0x14 + mov r0, r4 + mov r3, #0x40 + bl FUN_021FB1F0 + cmp r0, #0 + moveq r0, #0 + streq r0, [sp, #0x200] + beq _021F6374 + add r0, sp, #0x14 + bl atol + str r0, [sp, #0x200] +_021F6374: + ldr r1, _021F66B4 ; =0x0220E36C + add r2, sp, #0x14 + mov r0, r4 + mov r3, #0x40 + bl FUN_021FB1F0 + cmp r0, #0 + moveq r0, #0 + streq r0, [sp, #0x204] + beq _021F63A4 + add r0, sp, #0x14 + bl atol + str r0, [sp, #0x204] +_021F63A4: + ldr r1, _021F66B8 ; =0x0220E374 + add r2, sp, #0x14 + mov r0, r4 + mov r3, #0x40 + bl FUN_021FB1F0 + cmp r0, #0 + moveq r0, #0 + streq r0, [sp, #0x208] + beq _021F63D4 + add r0, sp, #0x14 + bl atol + str r0, [sp, #0x208] +_021F63D4: + ldr r1, _021F66BC ; =0x0220E37C + add r2, sp, #0x14 + mov r0, r4 + mov r3, #0x40 + bl FUN_021FB1F0 + cmp r0, #0 + moveq r0, #0 + streq r0, [sp, #0x20c] + beq _021F6404 + add r0, sp, #0x14 + bl atol + str r0, [sp, #0x20c] +_021F6404: + ldr r1, _021F66C0 ; =0x0220E384 + add r2, sp, #0x14 + mov r0, r4 + mov r3, #0x40 + bl FUN_021FB1F0 + cmp r0, #0 + moveq r0, #0 + streq r0, [sp, #0x210] + beq _021F6434 + add r0, sp, #0x14 + bl atol + str r0, [sp, #0x210] +_021F6434: + ldr r1, _021F66C4 ; =0x0220E4CC + add r2, sp, #0x14 + mov r0, r4 + mov r3, #0x40 + bl FUN_021FB1F0 + cmp r0, #0 + moveq r0, #0 + streq r0, [sp, #0x214] + beq _021F6464 + add r0, sp, #0x14 + bl atol + str r0, [sp, #0x214] +_021F6464: + ldr r1, _021F66C8 ; =0x0220E4D4 + add r2, sp, #0x14 + mov r0, r4 + mov r3, #0x40 + bl FUN_021FB1F0 + cmp r0, #0 + moveq r0, #0 + streq r0, [sp, #0x218] + beq _021F6494 + add r0, sp, #0x14 + bl atol + str r0, [sp, #0x218] +_021F6494: + ldr r1, _021F66CC ; =0x0220E4DC + add r2, sp, #0x14 + mov r0, r4 + mov r3, #0x40 + bl FUN_021FB1F0 + cmp r0, #0 + bne _021F64DC + ldr r2, _021F664C ; =0x0220E460 + mov r0, sl + mov r1, #1 + bl FUN_021FAF00 + mov r0, sl + mov r1, #3 + mov r2, #1 + bl FUN_021F3500 + add sp, sp, #0x26c + mov r0, #3 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +_021F64DC: + ldr r7, [r8, #0x434] + ldr r6, [r8, #0x100] + cmp r7, #0 + beq _021F653C + mov r5, #0x66 + mov r4, #1 +_021F64F4: + ldr r0, [r7, #0xc] + cmp r0, sb + bne _021F6530 + ldr r0, [r7] + cmp r0, #0x65 + bne _021F6530 + ldr r0, [sp, #8] + cmp r0, #0 + bne _021F6528 + mov r0, sl + mov r1, sb + bl FUN_021F8624 + str r0, [sp, #8] +_021F6528: + mov r6, r4 + str r5, [r7] +_021F6530: + ldr r7, [r7, #0x3c] + cmp r7, #0 + bne _021F64F4 +_021F653C: + ldr r0, [sp, #8] + cmp r0, #0 + bne _021F6564 + ldr r0, [r8, #0x100] + cmp r0, #0 + beq _021F6564 + mov r0, sl + mov r1, sb + bl FUN_021F8624 + str r0, [sp, #8] +_021F6564: + cmp r6, #0 + beq _021F6594 + ldr r0, [sp, #8] + ldr r0, [r0, #0x18] + bl FUN_021DD82C + ldr r1, [sp, #8] + mov r2, #0 + add r0, sp, #0x14 + str r2, [r1, #0x18] + bl FUN_021F0208 + ldr r1, [sp, #8] + str r0, [r1, #0x18] +_021F6594: + ldr r0, [r8, #0x100] + cmp r0, #0 + beq _021F65B0 + ldr r1, [sp, #8] + add r2, sp, #0x12c + mov r0, sl + bl FUN_021F4D88 +_021F65B0: + ldr r1, [fp, #0xc] + ldr r0, [fp, #0x10] + cmp r1, #0 + str r1, [sp, #0xc] + str r0, [sp, #0x10] + beq _021F6630 + mov r0, #0x204 + bl FUN_021DD860 + movs r4, r0 + bne _021F65F0 + ldr r1, _021F66D0 ; =0x0220E200 + mov r0, sl + bl FUN_021FAEEC + add sp, sp, #0x26c + mov r0, #1 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +_021F65F0: + add r0, sp, #0x12c + mov r1, r4 + bl FUN_021F66D4 + mov r0, #0 + str r0, [r4] + str sb, [r4, #4] + str fp, [sp] + str r0, [sp, #4] + add r1, sp, #0xc + mov r0, sl + mov r3, r4 + ldmia r1, {r1, r2} + bl FUN_021F3454 + cmp r0, #0 + addne sp, sp, #0x26c + ldmneia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +_021F6630: + mov r0, sl + mov r1, fp + bl FUN_021F6C84 + mov r0, #0 + add sp, sp, #0x26c + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_021F6648: .word 0x0220E458 +_021F664C: .word 0x0220E460 +_021F6650: .word 0x0220E228 +_021F6654: .word 0x0220E490 +_021F6658: .word 0x0220E4A0 +_021F665C: .word 0x0000015A +_021F6660: .word 0x0220E274 +_021F6664: .word 0x0220E27C +_021F6668: .word 0x0220E28C +_021F666C: .word 0x0220E2A0 +_021F6670: .word 0x0220E2AC +_021F6674: .word 0x0220E30C +_021F6678: .word 0x0220E2B8 +_021F667C: .word 0x0220E2C4 +_021F6680: .word 0x0220E2E8 +_021F6684: .word 0x0220E4AC +_021F6688: .word 0x0220E4B4 +_021F668C: .word 0x0220E4BC +_021F6690: .word 0x0220E258 +_021F6694: .word 0x0220E304 +_021F6698: .word 0x00000502 +_021F669C: .word 0x00000501 +_021F66A0: .word 0x0220E4C4 +_021F66A4: .word 0x0220E34C +_021F66A8: .word 0x0220E354 +_021F66AC: .word 0x0220E35C +_021F66B0: .word 0x0220E364 +_021F66B4: .word 0x0220E36C +_021F66B8: .word 0x0220E374 +_021F66BC: .word 0x0220E37C +_021F66C0: .word 0x0220E384 +_021F66C4: .word 0x0220E4CC +_021F66C8: .word 0x0220E4D4 +_021F66CC: .word 0x0220E4DC +_021F66D0: .word 0x0220E200 + + arm_func_start FUN_021F66D4 +FUN_021F66D4: ; 0x021F66D4 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #4 + mov r5, r0 + mov r4, r1 + ldr r1, [r5] + cmp r1, #0 + moveq r0, #0 + streqb r0, [r4, #8] + beq _021F6704 + add r0, r4, #8 + mov r2, #0x1f + bl FUN_021FB3DC +_021F6704: + ldr r1, [r5, #4] + cmp r1, #0 + moveq r0, #0 + streqb r0, [r4, #0x27] + beq _021F6724 + add r0, r4, #0x27 + mov r2, #0x15 + bl FUN_021FB3DC +_021F6724: + ldr r1, [r5, #8] + cmp r1, #0 + moveq r0, #0 + streqb r0, [r4, #0x3c] + beq _021F6744 + add r0, r4, #0x3c + mov r2, #0x33 + bl FUN_021FB3DC +_021F6744: + ldr r1, [r5, #0xc] + cmp r1, #0 + moveq r0, #0 + streqb r0, [r4, #0x6f] + beq _021F6764 + add r0, r4, #0x6f + mov r2, #0x1f + bl FUN_021FB3DC +_021F6764: + ldr r1, [r5, #0x10] + cmp r1, #0 + moveq r0, #0 + streqb r0, [r4, #0x8e] + beq _021F6784 + add r0, r4, #0x8e + mov r2, #0x1f + bl FUN_021FB3DC +_021F6784: + ldr r1, [r5, #0x14] + cmp r1, #0 + moveq r0, #0 + streqb r0, [r4, #0xad] + beq _021F67A4 + add r0, r4, #0xad + mov r2, #0x4c + bl FUN_021FB3DC +_021F67A4: + ldr r3, [r5, #0x18] + add r0, r4, #0x100 + add r1, r5, #0x1c + mov r2, #0xb + str r3, [r4, #0xfc] + bl FUN_021FB3DC + ldr r0, _021F68D4 ; =0x0000010B + add r1, r5, #0x27 + add r0, r4, r0 + mov r2, #3 + bl FUN_021FB3DC + ldr r0, [r5, #0x2c] + adds r1, r5, #0x34 + str r0, [r4, #0x110] + ldr r0, [r5, #0x30] + str r0, [r4, #0x114] + moveq r0, #0 + streqb r0, [r4, #0x118] + beq _021F67FC + add r0, r4, #0x118 + mov r2, #0x80 + bl FUN_021FB3DC +_021F67FC: + ldr r0, [r5, #0xb4] + str r0, [r4, #0x198] + ldr r0, [r5, #0xb8] + str r0, [r4, #0x19c] + ldr r0, [r5, #0xbc] + str r0, [r4, #0x1a0] + ldr r0, [r5, #0xc0] + str r0, [r4, #0x1a4] + ldr r0, [r5, #0xc4] + str r0, [r4, #0x1a8] + ldr r1, [r5, #0xc8] + cmp r1, #0 + moveq r0, #0 + streqb r0, [r4, #0x1ac] + beq _021F6844 + add r0, r4, #0x1ac + mov r2, #0x33 + bl FUN_021FB3DC +_021F6844: + ldr r0, [r5, #0x18] + str r0, [r4, #0xfc] + ldr r0, [r5, #0x2c] + str r0, [r4, #0x110] + ldr r0, [r5, #0x30] + str r0, [r4, #0x114] + ldr r0, [r5, #0xb4] + str r0, [r4, #0x198] + ldr r0, [r5, #0xb8] + str r0, [r4, #0x19c] + ldr r0, [r5, #0xbc] + str r0, [r4, #0x1a0] + ldr r0, [r5, #0xc0] + str r0, [r4, #0x1a4] + ldr r0, [r5, #0xc4] + str r0, [r4, #0x1a8] + ldr r0, [r5, #0xcc] + str r0, [r4, #0x1e0] + ldr r0, [r5, #0xd0] + str r0, [r4, #0x1e4] + ldr r0, [r5, #0xd4] + str r0, [r4, #0x1e8] + ldr r0, [r5, #0xd8] + str r0, [r4, #0x1ec] + ldr r0, [r5, #0xdc] + str r0, [r4, #0x1f0] + ldr r0, [r5, #0xe0] + str r0, [r4, #0x1f4] + ldr r0, [r5, #0xe4] + str r0, [r4, #0x1f8] + ldr r0, [r5, #0xe8] + str r0, [r4, #0x1fc] + ldr r0, [r5, #0xec] + str r0, [r4, #0x200] + add sp, sp, #4 + ldmia sp!, {r4, r5, pc} + .align 2, 0 +_021F68D4: .word 0x0000010B + + arm_func_start FUN_021F68D8 +FUN_021F68D8: ; 0x021F68D8 + stmdb sp!, {r4, r5, r6, r7, r8, sb, lr} + sub sp, sp, #4 + ldr ip, _021F6978 ; =0x0000FFFF + mov r4, r1, asr #0x18 + mov lr, r1, asr #0x10 + and r7, r4, #0xff + mov r4, r0 + and r6, lr, #0xff + and r5, r1, ip + mov sb, r2 + mov r0, r7 + mov r1, r6 + mov r2, r5 + mov r8, r3 + bl FUN_021F6988 + cmp r0, #0 + bne _021F6930 + ldr r0, _021F697C ; =0x0220E4E4 + ldr r1, _021F6980 ; =0x0220E4A0 + mov r2, #0 + mov r3, #0xb7 + bl __msl_assertion_failed +_021F6930: + mov r0, r7 + mov r1, r6 + mov r2, r5 + bl FUN_021F6988 + cmp r0, #0 + strne r7, [sb] + ldrne r0, [sp, #0x20] + strne r6, [r8] + strne r5, [r0] + addne sp, sp, #4 + movne r0, #0 + ldmneia sp!, {r4, r5, r6, r7, r8, sb, pc} + ldr r1, _021F6984 ; =0x0220E4FC + mov r0, r4 + bl FUN_021FAEEC + mov r0, #2 + add sp, sp, #4 + ldmia sp!, {r4, r5, r6, r7, r8, sb, pc} + .align 2, 0 +_021F6978: .word 0x0000FFFF +_021F697C: .word 0x0220E4E4 +_021F6980: .word 0x0220E4A0 +_021F6984: .word 0x0220E4FC + + arm_func_start FUN_021F6988 +FUN_021F6988: ; 0x021F6988 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #4 + cmp r0, #0 + bne _021F69B0 + cmp r1, #0 + bne _021F69B0 + cmp r2, #0 + addeq sp, sp, #4 + moveq r0, #1 + ldmeqia sp!, {r4, r5, pc} +_021F69B0: + cmp r0, #0 + blt _021F69C8 + cmp r1, #0 + blt _021F69C8 + cmp r2, #0 + bge _021F69D4 +_021F69C8: + add sp, sp, #4 + mov r0, #0 + ldmia sp!, {r4, r5, pc} +_021F69D4: + cmp r1, #0xc + addls pc, pc, r1, lsl #2 + b _021F6ACC +_021F69E0: ; jump table + b _021F6A14 ; case 0 + b _021F6A28 ; case 1 + b _021F6A50 ; case 2 + b _021F6A28 ; case 3 + b _021F6A3C ; case 4 + b _021F6A28 ; case 5 + b _021F6A3C ; case 6 + b _021F6A28 ; case 7 + b _021F6A28 ; case 8 + b _021F6A3C ; case 9 + b _021F6A28 ; case 10 + b _021F6A3C ; case 11 + b _021F6A28 ; case 12 +_021F6A14: + cmp r0, #0 + beq _021F6AD8 + add sp, sp, #4 + mov r0, #0 + ldmia sp!, {r4, r5, pc} +_021F6A28: + cmp r0, #0x1f + ble _021F6AD8 + add sp, sp, #4 + mov r0, #0 + ldmia sp!, {r4, r5, pc} +_021F6A3C: + cmp r0, #0x1e + ble _021F6AD8 + add sp, sp, #4 + mov r0, #0 + ldmia sp!, {r4, r5, pc} +_021F6A50: + mov r4, r2, lsr #0x1f + rsb r3, r4, r2, lsl #30 + adds r3, r4, r3, ror #30 + bne _021F6A80 + ldr ip, _021F6B3C ; =0x51EB851F + ldr lr, _021F6B40 ; =0x00000064 + smull r3, r5, ip, r2 + mov r5, r5, asr #5 + add r5, r4, r5 + smull r3, ip, lr, r5 + subs r5, r2, r3 + bne _021F6AA4 +_021F6A80: + ldr lr, _021F6B3C ; =0x51EB851F + mov r3, r2, lsr #0x1f + smull ip, r4, lr, r2 + mov r4, r4, asr #7 + ldr lr, _021F6B44 ; =0x00000190 + add r4, r3, r4 + smull r3, ip, lr, r4 + subs r4, r2, r3 + bne _021F6AB8 +_021F6AA4: + cmp r0, #0x1d + ble _021F6AD8 + add sp, sp, #4 + mov r0, #0 + ldmia sp!, {r4, r5, pc} +_021F6AB8: + cmp r0, #0x1c + ble _021F6AD8 + add sp, sp, #4 + mov r0, #0 + ldmia sp!, {r4, r5, pc} +_021F6ACC: + add sp, sp, #4 + mov r0, #0 + ldmia sp!, {r4, r5, pc} +_021F6AD8: + ldr r3, _021F6B48 ; =0x0000076C + cmp r2, r3 + addlt sp, sp, #4 + movlt r0, #0 + ldmltia sp!, {r4, r5, pc} + ldr r3, _021F6B4C ; =0x0000081F + cmp r2, r3 + addgt sp, sp, #4 + movgt r0, #0 + ldmgtia sp!, {r4, r5, pc} + cmp r2, r3 + bne _021F6B30 + cmp r1, #6 + addgt sp, sp, #4 + movgt r0, #0 + ldmgtia sp!, {r4, r5, pc} + cmp r1, #6 + bne _021F6B30 + cmp r0, #6 + addgt sp, sp, #4 + movgt r0, #0 + ldmgtia sp!, {r4, r5, pc} +_021F6B30: + mov r0, #1 + add sp, sp, #4 + ldmia sp!, {r4, r5, pc} + .align 2, 0 +_021F6B3C: .word 0x51EB851F +_021F6B40: .word 0x00000064 +_021F6B44: .word 0x00000190 +_021F6B48: .word 0x0000076C +_021F6B4C: .word 0x0000081F + + arm_func_start FUN_021F6B50 +FUN_021F6B50: ; 0x021F6B50 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #4 + mov r5, r1 + ldr r3, [r5] + mov r4, #0 + cmp r3, #4 + addls pc, pc, r3, lsl #2 + b _021F6BB4 +_021F6B70: ; jump table + b _021F6B84 ; case 0 + b _021F6B90 ; case 1 + b _021F6B9C ; case 2 + b _021F6BB4 ; case 3 + b _021F6BA8 ; case 4 +_021F6B84: + bl FUN_021F3934 + mov r4, r0 + b _021F6BD4 +_021F6B90: + bl FUN_021F8710 + mov r4, r0 + b _021F6BD4 +_021F6B9C: + bl FUN_021F5EBC + mov r4, r0 + b _021F6BD4 +_021F6BA8: + bl FUN_021FADE8 + mov r4, r0 + b _021F6BD4 +_021F6BB4: + ldr r1, _021F6BE8 ; =0x0220E50C + mov r2, r3 + bl FUN_021FB3D0 + ldr r0, _021F6BEC ; =0x0220E554 + ldr r1, _021F6BF0 ; =0x0220E558 + ldr r3, _021F6BF4 ; =0x00000146 + mov r2, #0 + bl __msl_assertion_failed +_021F6BD4: + cmp r4, #0 + strne r4, [r5, #0x1c] + mov r0, r4 + add sp, sp, #4 + ldmia sp!, {r4, r5, pc} + .align 2, 0 +_021F6BE8: .word 0x0220E50C +_021F6BEC: .word 0x0220E554 +_021F6BF0: .word 0x0220E558 +_021F6BF4: .word 0x00000146 + + arm_func_start FUN_021F6BF8 +FUN_021F6BF8: ; 0x021F6BF8 + ldr r0, [r0] + ldr r1, [r0, #0x424] + cmp r1, #0 + beq _021F6C30 +_021F6C08: + ldr r0, [r1, #8] + cmp r0, #0 + beq _021F6C24 + ldr r0, [r1] + cmp r0, #3 + movne r0, #1 + bxne lr +_021F6C24: + ldr r1, [r1, #0x20] + cmp r1, #0 + bne _021F6C08 +_021F6C30: + mov r0, #0 + bx lr + + arm_func_start FUN_021F6C38 +FUN_021F6C38: ; 0x021F6C38 + ldr r0, [r0] + ldr r3, [r0, #0x424] + cmp r3, #0 + beq _021F6C70 +_021F6C48: + ldr r0, [r3, #0x18] + cmp r0, r2 + bne _021F6C64 + cmp r1, #0 + strne r3, [r1] + mov r0, #1 + bx lr +_021F6C64: + ldr r3, [r3, #0x20] + cmp r3, #0 + bne _021F6C48 +_021F6C70: + cmp r1, #0 + movne r0, #0 + strne r0, [r1] + mov r0, #0 + bx lr + + arm_func_start FUN_021F6C84 +FUN_021F6C84: ; 0x021F6C84 + stmdb sp!, {lr} + sub sp, sp, #4 + ldr ip, [r0] + mov r3, #0 + ldr r2, [ip, #0x424] + cmp r2, #0 + addeq sp, sp, #4 + ldmeqia sp!, {pc} +_021F6CA4: + cmp r2, r1 + bne _021F6CCC + cmp r3, #0 + ldreq r2, [r2, #0x20] + streq r2, [ip, #0x424] + ldrne r2, [r1, #0x20] + strne r2, [r3, #0x20] + bl FUN_021F6CE4 + add sp, sp, #4 + ldmfd sp!, {pc} +_021F6CCC: + mov r3, r2 + ldr r2, [r2, #0x20] + cmp r2, #0 + bne _021F6CA4 + add sp, sp, #4 + ldmfd sp!, {pc} + + arm_func_start FUN_021F6CE4 +FUN_021F6CE4: ; 0x021F6CE4 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #4 + mov r5, r1 + ldr r1, [r5] + ldr r2, [r0] + cmp r1, #3 + bne _021F6D64 + ldr r0, [r2, #0x210] + ldr r4, [r5, #4] + sub r0, r0, #1 + str r0, [r2, #0x210] + ldr r0, [r2, #0x210] + cmp r0, #0 + bge _021F6D30 + ldr r0, _021F6D84 ; =0x0220E568 + ldr r1, _021F6D88 ; =0x0220E558 + mov r2, #0 + mov r3, #0xb6 + bl __msl_assertion_failed +_021F6D30: + ldr r0, [r4, #4] + mov r1, #2 + bl FUN_021EFD80 + ldr r0, [r4, #4] + bl FUN_021EFD9C + ldr r0, [r4, #0x18] + bl FUN_021DD82C + mov r0, #0 + str r0, [r4, #0x18] + ldr r0, [r4, #8] + bl FUN_021DD82C + mov r0, #0 + str r0, [r4, #8] +_021F6D64: + ldr r0, [r5, #4] + bl FUN_021DD82C + mov r1, #0 + mov r0, r5 + str r1, [r5, #4] + bl FUN_021DD82C + add sp, sp, #4 + ldmia sp!, {r4, r5, pc} + .align 2, 0 +_021F6D84: .word 0x0220E568 +_021F6D88: .word 0x0220E558 + + arm_func_start FUN_021F6D8C +FUN_021F6D8C: ; 0x021F6D8C + stmdb sp!, {r4, r5, r6, r7, r8, lr} + mov r8, r0 + mov r0, #0x24 + mov r7, r1 + mov r6, r2 + mov r5, r3 + ldr r4, [r8] + bl FUN_021DD860 + cmp r0, #0 + bne _021F6DC8 + ldr r1, _021F6E40 ; =0x0220E588 + mov r0, r8 + bl FUN_021FAEEC + mov r0, #1 + ldmia sp!, {r4, r5, r6, r7, r8, pc} +_021F6DC8: + str r7, [r0] + ldr r1, [sp, #0x18] + str r6, [r0, #4] + str r1, [r0, #8] + mov r1, #0 + str r1, [r0, #0x14] + cmp r7, #0 + moveq r1, #1 + streq r1, [r0, #0x18] + beq _021F6E10 + ldr r2, [r4, #0x20c] + add r1, r2, #1 + str r1, [r4, #0x20c] + str r2, [r0, #0x18] + ldr r1, [r4, #0x20c] + cmp r1, #2 + movlt r1, #2 + strlt r1, [r4, #0x20c] +_021F6E10: + mov r3, #0 + ldr r2, [sp, #0x1c] + str r3, [r0, #0x1c] + ldr r1, [sp, #0x20] + str r2, [r0, #0xc] + str r1, [r0, #0x10] + ldr r1, [r4, #0x424] + str r1, [r0, #0x20] + str r0, [r4, #0x424] + str r0, [r5] + mov r0, r3 + ldmia sp!, {r4, r5, r6, r7, r8, pc} + .align 2, 0 +_021F6E40: .word 0x0220E588 + + arm_func_start FUN_021F6E44 +FUN_021F6E44: ; 0x021F6E44 + stmdb sp!, {r4, r5, r6, r7, lr} + sub sp, sp, #0x14 + movs r7, r0 + mov r6, r1 + ldr r5, [r7] + bne _021F6E70 + ldr r0, _021F7168 ; =0x0220E598 + ldr r1, _021F716C ; =0x0220E558 + mov r2, #0 + mov r3, #0x22 + bl __msl_assertion_failed +_021F6E70: + ldr r0, [r7] + cmp r0, #0 + bne _021F6E90 + ldr r0, _021F7170 ; =0x0220E5AC + ldr r1, _021F716C ; =0x0220E558 + mov r2, #0 + mov r3, #0x23 + bl __msl_assertion_failed +_021F6E90: + cmp r6, #0 + bne _021F6EAC + ldr r0, _021F7174 ; =0x0220E5C0 + ldr r1, _021F716C ; =0x0220E558 + mov r2, #0 + mov r3, #0x24 + bl __msl_assertion_failed +_021F6EAC: + ldr r1, [r6, #0xc] + ldr r0, [r6, #0x10] + cmp r1, #0 + str r1, [sp, #8] + str r0, [sp, #0xc] + beq _021F715C + ldr r0, [r6] + cmp r0, #4 + addls pc, pc, r0, lsl #2 + b _021F7148 +_021F6ED4: ; jump table + b _021F6EE8 ; case 0 + b _021F6F70 ; case 1 + b _021F6FEC ; case 2 + b _021F7058 ; case 3 + b _021F70DC ; case 4 +_021F6EE8: + mov r0, #0x20 + bl FUN_021DD860 + movs r4, r0 + bne _021F6F10 + ldr r1, _021F7178 ; =0x0220E588 + mov r0, r7 + bl FUN_021FAEEC + add sp, sp, #0x14 + mov r0, #1 + ldmia sp!, {r4, r5, r6, r7, pc} +_021F6F10: + mov r1, #0 + mov r2, #0x20 + bl Call_FillMemWithValue + ldr r1, [r6, #0x1c] + ldr r0, _021F717C ; =0x00000201 + str r1, [r4] + ldr r1, [r5, #0x418] + mov r3, r4 + cmp r1, r0 + ldreq r1, [r5, #0x1a0] + moveq r0, #0 + streq r1, [r4, #4] + streq r0, [r5, #0x1a0] + str r6, [sp] + mov r0, #0 + str r0, [sp, #4] + add r1, sp, #8 + mov r0, r7 + ldmia r1, {r1, r2} + bl FUN_021F3454 + cmp r0, #0 + beq _021F715C + add sp, sp, #0x14 + ldmia sp!, {r4, r5, r6, r7, pc} +_021F6F70: + mov r0, #8 + bl FUN_021DD860 + movs r3, r0 + bne _021F6F98 + ldr r1, _021F7178 ; =0x0220E588 + mov r0, r7 + bl FUN_021FAEEC + add sp, sp, #0x14 + mov r0, #1 + ldmia sp!, {r4, r5, r6, r7, pc} +_021F6F98: + mov r2, #0 + strb r2, [r3] + strb r2, [r3, #1] + strb r2, [r3, #2] + strb r2, [r3, #3] + strb r2, [r3, #4] + strb r2, [r3, #5] + strb r2, [r3, #6] + strb r2, [r3, #7] + ldr r0, [r6, #0x1c] + add r1, sp, #8 + str r0, [r3] + str r6, [sp] + str r2, [sp, #4] + mov r0, r7 + ldmia r1, {r1, r2} + bl FUN_021F3454 + cmp r0, #0 + beq _021F715C + add sp, sp, #0x14 + ldmia sp!, {r4, r5, r6, r7, pc} +_021F6FEC: + mov r0, #0x204 + bl FUN_021DD860 + movs r4, r0 + bne _021F7014 + ldr r1, _021F7178 ; =0x0220E588 + mov r0, r7 + bl FUN_021FAEEC + add sp, sp, #0x14 + mov r0, #1 + ldmia sp!, {r4, r5, r6, r7, pc} +_021F7014: + mov r1, #0 + mov r2, #0x204 + bl Call_FillMemWithValue + ldr r1, [r6, #0x1c] + mov r0, #0 + str r1, [r4] + str r6, [sp] + str r0, [sp, #4] + add r1, sp, #8 + mov r0, r7 + mov r3, r4 + ldmia r1, {r1, r2} + bl FUN_021F3454 + cmp r0, #0 + beq _021F715C + add sp, sp, #0x14 + ldmia sp!, {r4, r5, r6, r7, pc} +_021F7058: + mov r0, #0x10 + bl FUN_021DD860 + movs r3, r0 + bne _021F7080 + ldr r1, _021F7178 ; =0x0220E588 + mov r0, r7 + bl FUN_021FAEEC + add sp, sp, #0x14 + mov r0, #1 + ldmia sp!, {r4, r5, r6, r7, pc} +_021F7080: + mov r2, r3 + mov r1, #4 + mov r0, #0 +_021F708C: + strb r0, [r2], #1 + strb r0, [r2], #1 + strb r0, [r2], #1 + strb r0, [r2], #1 + subs r1, r1, #1 + bne _021F708C + ldr r1, [r6, #0x1c] + mov r0, #0 + str r1, [r3] + str r0, [r3, #0xc] + str r6, [sp] + str r0, [sp, #4] + add r1, sp, #8 + mov r0, r7 + ldmia r1, {r1, r2} + bl FUN_021F3454 + cmp r0, #0 + beq _021F715C + add sp, sp, #0x14 + ldmia sp!, {r4, r5, r6, r7, pc} +_021F70DC: + mov r0, #4 + bl FUN_021DD860 + movs r3, r0 + bne _021F7104 + ldr r1, _021F7178 ; =0x0220E588 + mov r0, r7 + bl FUN_021FAEEC + add sp, sp, #0x14 + mov r0, #1 + ldmia sp!, {r4, r5, r6, r7, pc} +_021F7104: + mov r2, #0 + strb r2, [r3] + strb r2, [r3, #1] + strb r2, [r3, #2] + strb r2, [r3, #3] + ldr r0, [r6, #0x1c] + add r1, sp, #8 + str r0, [r3] + str r6, [sp] + str r2, [sp, #4] + mov r0, r7 + ldmia r1, {r1, r2} + bl FUN_021F3454 + cmp r0, #0 + beq _021F715C + add sp, sp, #0x14 + ldmia sp!, {r4, r5, r6, r7, pc} +_021F7148: + ldr r0, _021F7180 ; =0x0220E554 + ldr r1, _021F716C ; =0x0220E558 + mov r2, #0 + mov r3, #0x6b + bl __msl_assertion_failed +_021F715C: + mov r0, #0 + add sp, sp, #0x14 + ldmia sp!, {r4, r5, r6, r7, pc} + .align 2, 0 +_021F7168: .word 0x0220E598 +_021F716C: .word 0x0220E558 +_021F7170: .word 0x0220E5AC +_021F7174: .word 0x0220E5C0 +_021F7178: .word 0x0220E588 +_021F717C: .word 0x00000201 +_021F7180: .word 0x0220E554 + + arm_func_start FUN_021F7184 +FUN_021F7184: ; 0x021F7184 + stmdb sp!, {r4, r5, r6, r7, lr} + sub sp, sp, #0x24 + movs r6, r1 + mov r7, r0 + mov r5, r2 + mov r4, r3 + bne _021F71B4 + ldr r0, _021F7258 ; =0x0220E5D4 + ldr r1, _021F725C ; =0x0220E5E4 + ldr r3, _021F7260 ; =0x00000389 + mov r2, #0 + bl __msl_assertion_failed +_021F71B4: + mvn r0, #0 + cmp r5, #0 + ldreq r5, _021F7264 ; =0x0220E5F0 + cmp r4, r0 + bne _021F71D4 + mov r0, r5 + bl strlen + mov r4, r0 +_021F71D4: + ldr r1, _021F7268 ; =0x0220E5F4 + add r0, sp, #0 + mov r2, r4 + bl sprintf + add r2, sp, #0 + mov r0, r7 + mov r1, r6 + bl FUN_021F2C58 + cmp r0, #0 + addne sp, sp, #0x24 + ldmneia sp!, {r4, r5, r6, r7, pc} + mov r0, r7 + mov r1, r6 + mov r2, r5 + mov r3, r4 + bl FUN_021F2C88 + cmp r0, #0 + addne sp, sp, #0x24 + ldmneia sp!, {r4, r5, r6, r7, pc} + mov r0, r7 + mov r1, r6 + mov r2, #0 + bl FUN_021F2D8C + cmp r0, #0 + addne sp, sp, #0x24 + ldmneia sp!, {r4, r5, r6, r7, pc} + mov r0, #0 + bl FUN_021EFAC8 + add r0, r0, #0x12c + str r0, [r6, #0x10] + mov r0, #0 + add sp, sp, #0x24 + ldmia sp!, {r4, r5, r6, r7, pc} + .align 2, 0 +_021F7258: .word 0x0220E5D4 +_021F725C: .word 0x0220E5E4 +_021F7260: .word 0x00000389 +_021F7264: .word 0x0220E5F0 +_021F7268: .word 0x0220E5F4 + + arm_func_start FUN_021F726C +FUN_021F726C: ; 0x021F726C + stmdb sp!, {r4, r5, r6, r7, r8, sb, lr} + sub sp, sp, #0x4c + mov sb, r0 + mov r8, r1 + mov r7, r2 + cmp r3, #0 + ldr r6, [r3, #4] + ldr r5, [r3] + ldr r4, [r3, #8] + bne _021F72A8 + ldr r0, _021F72DC ; =0x0220E604 + ldr r1, _021F72E0 ; =0x0220E5E4 + ldr r3, _021F72E4 ; =0x00000376 + mov r2, #0 + bl __msl_assertion_failed +_021F72A8: + ldr r1, _021F72E8 ; =0x0220E610 + str r6, [sp] + add r0, sp, #8 + mov r2, r7 + mov r3, r5 + str r4, [sp, #4] + bl sprintf + add r2, sp, #8 + mov r0, sb + mov r1, r8 + bl FUN_021F2C58 + add sp, sp, #0x4c + ldmia sp!, {r4, r5, r6, r7, r8, sb, pc} + .align 2, 0 +_021F72DC: .word 0x0220E604 +_021F72E0: .word 0x0220E5E4 +_021F72E4: .word 0x00000376 +_021F72E8: .word 0x0220E610 + + arm_func_start FUN_021F72EC +FUN_021F72EC: ; 0x021F72EC + stmdb sp!, {r4, r5, r6, r7, r8, lr} + sub sp, sp, #0x18 + movs r7, r1 + mov r8, r0 + mov r6, r2 + mov r5, r3 + bne _021F731C + ldr r0, _021F745C ; =0x0220E5D4 + ldr r1, _021F7460 ; =0x0220E5E4 + mov r2, #0 + mov r3, #0x340 + bl __msl_assertion_failed +_021F731C: + cmp r5, #0 + bne _021F7338 + ldr r0, _021F7464 ; =0x0220E624 + ldr r1, _021F7460 ; =0x0220E5E4 + ldr r3, _021F7468 ; =0x00000341 + mov r2, #0 + bl __msl_assertion_failed +_021F7338: + mov r0, r5 + bl strlen + add r1, sp, #0 + mov r2, #0 + str r2, [r1] + str r2, [r1, #4] + str r2, [r1, #8] + str r2, [r1, #0xc] + str r2, [r1, #0x10] + str r2, [r1, #0x14] + mov r4, r0 + ldr r2, _021F746C ; =0x0220E634 + mov r0, r8 + str r6, [sp, #0x10] + bl FUN_021F2F9C + cmp r0, #0 + addne sp, sp, #0x18 + ldmneia sp!, {r4, r5, r6, r7, r8, pc} + add r1, sp, #0 + mov r0, r8 + mov r2, r6 + bl FUN_021F2F64 + cmp r0, #0 + addne sp, sp, #0x18 + ldmneia sp!, {r4, r5, r6, r7, r8, pc} + ldr r2, _021F7470 ; =0x0220E638 + add r1, sp, #0 + mov r0, r8 + bl FUN_021F2F9C + cmp r0, #0 + addne sp, sp, #0x18 + ldmneia sp!, {r4, r5, r6, r7, r8, pc} + add r1, sp, #0 + mov r0, r8 + mov r2, r4 + bl FUN_021F2F64 + cmp r0, #0 + addne sp, sp, #0x18 + ldmneia sp!, {r4, r5, r6, r7, r8, pc} + ldr r2, _021F7474 ; =0x0220E640 + add r1, sp, #0 + mov r0, r8 + bl FUN_021F2F9C + cmp r0, #0 + addne sp, sp, #0x18 + ldmneia sp!, {r4, r5, r6, r7, r8, pc} + ldr ip, [sp, #8] + add r1, sp, #0 + mov r0, r8 + mov r2, r5 + mov r3, r4 + str ip, [sp, #0x14] + bl FUN_021F2FCC + cmp r0, #0 + addne sp, sp, #0x18 + ldmneia sp!, {r4, r5, r6, r7, r8, pc} + add r1, sp, #0 + mov r0, r8 + mov r2, #0 + bl FUN_021F30D4 + cmp r0, #0 + addne sp, sp, #0x18 + ldmneia sp!, {r4, r5, r6, r7, r8, pc} + ldr r0, [r7, #0x38] + add r1, sp, #0 + bl FUN_021EEFA8 + mov r0, #0 + bl FUN_021EFAC8 + add r0, r0, #0x12c + str r0, [r7, #0x10] + mov r0, #0 + add sp, sp, #0x18 + ldmia sp!, {r4, r5, r6, r7, r8, pc} + .align 2, 0 +_021F745C: .word 0x0220E5D4 +_021F7460: .word 0x0220E5E4 +_021F7464: .word 0x0220E624 +_021F7468: .word 0x00000341 +_021F746C: .word 0x0220E634 +_021F7470: .word 0x0220E638 +_021F7474: .word 0x0220E640 + + arm_func_start FUN_021F7478 +FUN_021F7478: ; 0x021F7478 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #0xc + mov r4, r1 + ldr r1, [r4, #0xc] + add r2, sp, #8 + mov r5, r0 + bl FUN_021F85E8 + cmp r0, #0 + bne _021F74B4 + ldr r1, _021F7600 ; =0x0220E648 + mov r0, r5 + bl FUN_021FAEEC + add sp, sp, #0xc + mov r0, #3 + ldmia sp!, {r4, r5, pc} +_021F74B4: + mov r0, #2 + mov r1, #1 + mov r2, #0 + bl FUN_021EFDB8 + str r0, [r4, #8] + ldr r0, [r4, #8] + mvn r1, #0 + cmp r0, r1 + bne _021F7504 + ldr r2, _021F7604 ; =0x0220E664 + mov r0, r5 + mov r1, #5 + bl FUN_021FAF00 + mov r0, r5 + mov r1, #3 + mov r2, #0 + bl FUN_021F3500 + add sp, sp, #0xc + mov r0, #3 + ldmia sp!, {r4, r5, pc} +_021F7504: + mov r1, #0 + bl FUN_021F017C + cmp r0, #0 + bne _021F7540 + ldr r2, _021F7608 ; =0x0220E68C + mov r0, r5 + mov r1, #5 + bl FUN_021FAF00 + mov r0, r5 + mov r1, #3 + mov r2, #0 + bl FUN_021F3500 + add sp, sp, #0xc + mov r0, #3 + ldmia sp!, {r4, r5, pc} +_021F7540: + ldr r0, [r4, #8] + bl FUN_021F7854 + add r1, sp, #0 + mov r0, #0 + str r0, [r1] + str r0, [r1, #4] + mov r0, #2 + ldr r3, [sp, #8] + strb r0, [sp, #1] + ldr r0, [r3, #8] + mov r2, #8 + ldr r0, [r0, #0x10] + str r0, [sp, #4] + ldr r0, [r3, #8] + ldr r0, [r0, #0x14] + strh r0, [sp, #2] + ldr r0, [r4, #8] + bl FUN_021EFCE4 + mvn r1, #0 + cmp r0, r1 + bne _021F75EC + ldr r0, [r4, #8] + bl FUN_021EFB28 + mvn r1, #5 + cmp r0, r1 + beq _021F75EC + mvn r1, #0x19 + cmp r0, r1 + beq _021F75EC + mvn r1, #0x4b + cmp r0, r1 + beq _021F75EC + ldr r2, _021F760C ; =0x0220E6C0 + mov r0, r5 + mov r1, #5 + bl FUN_021FAF00 + mov r0, r5 + mov r1, #3 + mov r2, #1 + bl FUN_021F3500 + add sp, sp, #0xc + mov r0, #3 + ldmia sp!, {r4, r5, pc} +_021F75EC: + mov r0, #0x67 + str r0, [r4] + mov r0, #0 + add sp, sp, #0xc + ldmia sp!, {r4, r5, pc} + .align 2, 0 +_021F7600: .word 0x0220E648 +_021F7604: .word 0x0220E664 +_021F7608: .word 0x0220E68C +_021F760C: .word 0x0220E6C0 + + arm_func_start FUN_021F7610 +FUN_021F7610: ; 0x021F7610 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #0x14 + mov r2, #0 + str r2, [sp] + mov r4, r1 + str r2, [sp, #4] + add r3, sp, #0xc + mov r1, #2 + mov r5, r0 + str r2, [sp, #8] + bl FUN_021F6D8C + cmp r0, #0 + addne sp, sp, #0x14 + ldmneia sp!, {r4, r5, pc} + ldr r0, [sp, #0xc] + ldr r1, [r4, #0xc] + ldr r2, [r0, #0x18] + mov r0, r5 + bl FUN_021F5018 + cmp r0, #0 + moveq r0, #0x65 + streq r0, [r4] + moveq r0, #0 + add sp, sp, #0x14 + ldmia sp!, {r4, r5, pc} + + arm_func_start FUN_021F7674 +FUN_021F7674: ; 0x021F7674 + stmdb sp!, {r4, r5, r6, r7, lr} + sub sp, sp, #4 + ldr r5, [r0] + mov r0, #0x40 + mov r7, r1 + mov r6, r2 + bl FUN_021DD860 + movs r4, r0 + addeq sp, sp, #4 + moveq r0, #0 + ldmeqia sp!, {r4, r5, r6, r7, pc} + mov r1, #0 + mov r2, #0x40 + bl Call_FillMemWithValue + mov r0, #0x64 + str r0, [r4] + str r6, [r4, #4] + mvn r0, #0 + str r0, [r4, #8] + mov r0, #0 + str r7, [r4, #0xc] + bl FUN_021EFAC8 + add r0, r0, #0x12c + str r0, [r4, #0x10] + ldr r3, [r5, #0x434] + ldr r2, _021F7700 ; =FUN_021F7704 + mov r0, #0x18 + mov r1, #0 + str r3, [r4, #0x3c] + bl FUN_021EF0E4 + str r0, [r4, #0x38] + mov r0, r4 + str r4, [r5, #0x434] + add sp, sp, #4 + ldmia sp!, {r4, r5, r6, r7, pc} + .align 2, 0 +_021F7700: .word FUN_021F7704 + + arm_func_start FUN_021F7704 +FUN_021F7704: ; 0x021F7704 + stmdb sp!, {r4, lr} + mov r4, r0 + ldr r0, [r4] + bl FUN_021DD82C + mov r0, #0 + str r0, [r4] + ldmia sp!, {r4, pc} + + arm_func_start FUN_021F7720 +FUN_021F7720: ; 0x021F7720 + ldr r0, [r0] + ldr r0, [r0, #0x434] + cmp r0, #0 + beq _021F7754 +_021F7730: + ldr r2, [r0, #0xc] + cmp r2, r1 + bne _021F7748 + ldr r2, [r0] + cmp r2, #0x69 + bxeq lr +_021F7748: + ldr r0, [r0, #0x3c] + cmp r0, #0 + bne _021F7730 +_021F7754: + mov r0, #0 + bx lr + + arm_func_start FUN_021F775C +FUN_021F775C: ; 0x021F775C + stmdb sp!, {r4, r5, r6, r7, lr} + sub sp, sp, #4 + mov r4, r0 + ldr r7, [r4] + mvn r1, #0 + ldr r0, [r7, #0x204] + cmp r0, r1 + beq _021F77E8 + bl FUN_021EFF2C + cmp r0, #0 + beq _021F77E8 + mov r1, #0 + ldr r0, [r7, #0x204] + mov r2, r1 + bl FUN_021EFC94 + mov r6, r0 + mvn r1, #0 + cmp r6, r1 + beq _021F77E8 + mov r0, r4 + mov r2, #0 + bl FUN_021F7674 + movs r5, r0 + beq _021F77E0 + mov r0, #0x68 + str r0, [r5] + mov r0, r6 + str r6, [r5, #8] + mov r1, #0 + bl FUN_021F017C + ldr r0, [r5, #8] + bl FUN_021F7854 + b _021F77E8 +_021F77E0: + mov r0, r6 + bl FUN_021EFD9C +_021F77E8: + ldr r6, [r7, #0x434] + cmp r6, #0 + beq _021F7848 + mov r5, #0 +_021F77F8: + mov r0, r4 + mov r1, r6 + ldr r7, [r6, #0x3c] + bl FUN_021F7A40 + ldr r1, [r6] + cmp r1, #0x6a + beq _021F7830 + cmp r0, #0 + bne _021F7830 + mov r0, r5 + bl FUN_021EFAC8 + ldr r1, [r6, #0x10] + cmp r0, r1 + ble _021F783C +_021F7830: + mov r0, r4 + mov r1, r6 + bl FUN_021F78CC +_021F783C: + mov r6, r7 + cmp r7, #0 + bne _021F77F8 +_021F7848: + mov r0, #0 + add sp, sp, #4 + ldmia sp!, {r4, r5, r6, r7, pc} + + arm_func_start FUN_021F7854 +FUN_021F7854: ; 0x021F7854 + stmdb sp!, {r4, lr} + mov r4, r0 + mov r1, #0x4000 + bl FUN_021F0130 + mov r0, r4 + mov r1, #0x8000 + bl FUN_021F0130 + mov r0, r4 + mov r1, #0x10000 + bl FUN_021F0130 + mov r0, r4 + mov r1, #0x20000 + bl FUN_021F0130 + mov r0, r4 + mov r1, #0x40000 + bl FUN_021F0130 + mov r0, r4 + mov r1, #0x4000 + bl FUN_021F00E4 + mov r0, r4 + mov r1, #0x8000 + bl FUN_021F00E4 + mov r0, r4 + mov r1, #0x10000 + bl FUN_021F00E4 + mov r0, r4 + bl FUN_021F009C + mov r0, r4 + bl FUN_021F0054 + ldmia sp!, {r4, pc} + + arm_func_start FUN_021F78CC +FUN_021F78CC: ; 0x021F78CC + stmdb sp!, {r4, r5, r6, lr} + mov r5, r0 + movs r4, r1 + ldr r6, [r5] + bne _021F78F4 + ldr r0, _021F79C8 ; =0x0220E5D4 + ldr r1, _021F79CC ; =0x0220E5E4 + ldr r3, _021F79D0 ; =0x00000213 + mov r2, #0 + bl __msl_assertion_failed +_021F78F4: + ldr r1, [r6, #0x434] + cmp r1, r4 + ldreq r0, [r4, #0x3c] + streq r0, [r6, #0x434] + beq _021F7958 + ldr r0, [r1, #0x3c] + cmp r0, r4 + beq _021F7950 +_021F7914: + cmp r0, #0 + bne _021F7940 + ldr r0, _021F79D4 ; =0x0220E6E8 + ldr r1, _021F79CC ; =0x0220E5E4 + ldr r3, _021F79D8 ; =0x00000225 + mov r2, #0 + bl __msl_assertion_failed + ldr r1, _021F79DC ; =0x0220E6EC + mov r0, r5 + bl FUN_021FB3D0 + ldmia sp!, {r4, r5, r6, pc} +_021F7940: + mov r1, r0 + ldr r0, [r0, #0x3c] + cmp r0, r4 + bne _021F7914 +_021F7950: + ldr r0, [r4, #0x3c] + str r0, [r1, #0x3c] +_021F7958: + ldr r0, [r4, #0x38] + bl FUN_021EF06C + cmp r0, #0 + beq _021F79B8 + mov r6, #0 +_021F796C: + ldr r0, [r4, #0x38] + mov r1, r6 + bl FUN_021EEFFC + ldr r2, [r0, #0x10] + cmp r2, #0x64 + bge _021F799C + ldr ip, [r0] + ldr r3, [r0, #0x14] + ldr r1, [r4, #0xc] + mov r0, r5 + add r3, ip, r3 + bl FUN_021F1B60 +_021F799C: + ldr r0, [r4, #0x38] + mov r1, r6 + bl FUN_021EED84 + ldr r0, [r4, #0x38] + bl FUN_021EF06C + cmp r0, #0 + bne _021F796C +_021F79B8: + mov r0, r5 + mov r1, r4 + bl FUN_021F79E0 + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +_021F79C8: .word 0x0220E5D4 +_021F79CC: .word 0x0220E5E4 +_021F79D0: .word 0x00000213 +_021F79D4: .word 0x0220E6E8 +_021F79D8: .word 0x00000225 +_021F79DC: .word 0x0220E6EC + + arm_func_start FUN_021F79E0 +FUN_021F79E0: ; 0x021F79E0 + stmdb sp!, {r4, lr} + mov r4, r1 + ldr r0, [r4, #8] + mov r1, #2 + bl FUN_021EFD80 + ldr r0, [r4, #8] + bl FUN_021EFD9C + ldr r0, [r4, #0x18] + bl FUN_021DD82C + mov r0, #0 + str r0, [r4, #0x18] + ldr r0, [r4, #0x28] + bl FUN_021DD82C + mov r0, #0 + str r0, [r4, #0x28] + ldr r0, [r4, #0x38] + cmp r0, #0 + beq _021F7A34 + bl FUN_021EF074 + mov r0, #0 + str r0, [r4, #0x38] +_021F7A34: + mov r0, r4 + bl FUN_021DD82C + ldmia sp!, {r4, pc} + + arm_func_start FUN_021F7A40 +FUN_021F7A40: ; 0x021F7A40 + stmdb sp!, {r4, r5, r6, lr} + mov r5, r1 + ldr r1, [r5] + mov r6, r0 + cmp r1, #0x64 + mov r4, #0 + bne _021F7A70 + ldr r0, _021F7AD8 ; =0x0220E710 + ldr r1, _021F7ADC ; =0x0220E5E4 + ldr r3, _021F7AE0 ; =0x000001D9 + mov r2, r4 + bl __msl_assertion_failed +_021F7A70: + ldr r0, [r5] + cmp r0, #0x69 + beq _021F7AAC + ldr r0, [r5, #4] + cmp r0, #0 + beq _021F7A9C + mov r0, r6 + mov r1, r5 + bl FUN_021F8088 + mov r4, r0 + b _021F7AAC +_021F7A9C: + mov r0, r6 + mov r1, r5 + bl FUN_021F7E3C + mov r4, r0 +_021F7AAC: + cmp r4, #0 + bne _021F7AD0 + ldr r0, [r5] + cmp r0, #0x69 + bne _021F7AD0 + mov r0, r6 + mov r1, r5 + bl FUN_021F7AE4 + mov r4, r0 +_021F7AD0: + mov r0, r4 + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +_021F7AD8: .word 0x0220E710 +_021F7ADC: .word 0x0220E5E4 +_021F7AE0: .word 0x000001D9 + + arm_func_start FUN_021F7AE4 +FUN_021F7AE4: ; 0x021F7AE4 + stmdb sp!, {r4, r5, r6, r7, lr} + sub sp, sp, #0x24 + mov r6, r1 + ldr r1, [r6, #0x30] + mov r7, r0 + cmp r1, #0 + ldr r5, [r7] + beq _021F7B4C + mov r2, #1 + str r2, [sp] + ldr r1, _021F7D60 ; =0x0220E738 + add r3, sp, #0xc + str r1, [sp, #4] + ldr r1, [r6, #8] + add r2, r6, #0x28 + bl FUN_021F28AC + ldr r1, [sp, #0xc] + cmp r1, #0 + bne _021F7B38 + cmp r0, #0 + beq _021F7B4C +_021F7B38: + mov r0, #0x6a + str r0, [r6] + add sp, sp, #0x24 + mov r0, #0 + ldmia sp!, {r4, r5, r6, r7, pc} +_021F7B4C: + ldr r0, [r6, #0x30] + cmp r0, #0 + bne _021F7B84 + mov r0, r7 + mov r1, r6 + bl FUN_021F7D6C + cmp r0, #0 + addne sp, sp, #0x24 + ldmneia sp!, {r4, r5, r6, r7, pc} + ldr r0, [r6] + cmp r0, #0x6a + addeq sp, sp, #0x24 + moveq r0, #0 + ldmeqia sp!, {r4, r5, r6, r7, pc} +_021F7B84: + add r1, sp, #0xc + ldr r0, _021F7D60 ; =0x0220E738 + str r1, [sp] + str r0, [sp, #4] + ldr r1, [r6, #8] + add r3, sp, #8 + mov r0, r7 + add r2, r6, #0x18 + bl FUN_021F2A2C + cmp r0, #0 + movne r0, #0x6a + strne r0, [r6] + addne sp, sp, #0x24 + movne r0, #0 + ldmneia sp!, {r4, r5, r6, r7, pc} + ldr r0, [sp, #8] + cmp r0, #0 + ble _021F7BDC + mov r0, #0 + bl FUN_021EFAC8 + add r0, r0, #0x12c + str r0, [r6, #0x10] +_021F7BDC: + add r4, sp, #0x20 + add r2, sp, #0x18 + add r3, sp, #0x1c + mov r0, r7 + add r1, r6, #0x18 + str r4, [sp] + bl FUN_021F2770 + cmp r0, #0 + addne sp, sp, #0x24 + ldmneia sp!, {r4, r5, r6, r7, pc} + ldr r1, [sp, #0x18] + cmp r1, #0 + beq _021F7D38 + ldr r2, [sp, #0x1c] + cmp r2, #0x66 + bgt _021F7C30 + cmp r2, #0x66 + bge _021F7CF8 + cmp r2, #1 + beq _021F7C64 + b _021F7D2C +_021F7C30: + sub r0, r2, #0xc8 + cmp r0, #8 + addls pc, pc, r0, lsl #2 + b _021F7D2C +_021F7C40: ; jump table + b _021F7D10 ; case 0 + b _021F7D10 ; case 1 + b _021F7D10 ; case 2 + b _021F7D10 ; case 3 + b _021F7D10 ; case 4 + b _021F7D10 ; case 5 + b _021F7D10 ; case 6 + b _021F7D10 ; case 7 + b _021F7D10 ; case 8 +_021F7C64: + ldr r1, [r5, #0x1bc] + ldr r0, [r5, #0x1c0] + cmp r1, #0 + str r1, [sp, #0x10] + str r0, [sp, #0x14] + beq _021F7D2C + mov r0, #0xc + bl FUN_021DD860 + movs r4, r0 + bne _021F7CA4 + ldr r1, _021F7D64 ; =0x0220E73C + mov r0, r7 + bl FUN_021FAEEC + add sp, sp, #0x24 + mov r0, #1 + ldmia sp!, {r4, r5, r6, r7, pc} +_021F7CA4: + ldr r0, [r6, #0xc] + str r0, [r4] + ldr r0, [sp, #0x18] + bl FUN_021F0208 + str r0, [r4, #8] + mov r0, #0 + bl FUN_021EFAC8 + str r0, [r4, #4] + mov r0, #0 + str r0, [sp] + mov r0, #2 + str r0, [sp, #4] + add r1, sp, #0x10 + mov r0, r7 + mov r3, r4 + ldmia r1, {r1, r2} + bl FUN_021F3454 + cmp r0, #0 + beq _021F7D2C + add sp, sp, #0x24 + ldmia sp!, {r4, r5, r6, r7, pc} +_021F7CF8: + ldr r1, [r6, #0xc] + ldr r3, _021F7D68 ; =0x0220E74C + mov r0, r7 + mov r2, #0x67 + bl FUN_021F1A64 + b _021F7D2C +_021F7D10: + str r1, [sp] + ldr r1, [sp, #0x20] + mov r0, r7 + str r1, [sp, #4] + ldr r3, [r6, #0x18] + mov r1, r6 + bl FUN_021FACC0 +_021F7D2C: + mov r0, r7 + add r1, r6, #0x18 + bl FUN_021F2704 +_021F7D38: + ldr r0, [sp, #0x18] + cmp r0, #0 + bne _021F7BDC + ldr r0, [sp, #0xc] + cmp r0, #0 + movne r0, #0x6a + strne r0, [r6] + mov r0, #0 + add sp, sp, #0x24 + ldmia sp!, {r4, r5, r6, r7, pc} + .align 2, 0 +_021F7D60: .word 0x0220E738 +_021F7D64: .word 0x0220E73C +_021F7D68: .word 0x0220E74C + + arm_func_start FUN_021F7D6C +FUN_021F7D6C: ; 0x021F7D6C + stmdb sp!, {r4, r5, r6, r7, r8, sb, lr} + sub sp, sp, #0xc + mov r8, r1 + ldr r1, [r8, #0x30] + mov sb, r0 + cmp r1, #0 + addne sp, sp, #0xc + movne r0, #0 + ldmneia sp!, {r4, r5, r6, r7, r8, sb, pc} + ldr r0, [r8, #0x38] + bl FUN_021EF06C + cmp r0, #0 + beq _021F7E2C + ldr r5, _021F7E38 ; =0x0220E738 + add r4, sp, #8 + mov r7, #0 +_021F7DAC: + ldr r0, [r8, #0x38] + mov r1, r7 + bl FUN_021EEFFC + mov r6, r0 + str r7, [sp] + str r5, [sp, #4] + ldr r1, [r8, #8] + mov r0, sb + mov r2, r6 + mov r3, r4 + bl FUN_021F28AC + ldr r1, [sp, #8] + cmp r1, #0 + bne _021F7DEC + cmp r0, #0 + beq _021F7E00 +_021F7DEC: + mov r0, #0x6a + str r0, [r8] + add sp, sp, #0xc + mov r0, #0 + ldmia sp!, {r4, r5, r6, r7, r8, sb, pc} +_021F7E00: + ldr r1, [r6, #0xc] + ldr r0, [r6, #8] + cmp r1, r0 + bne _021F7E2C + ldr r0, [r8, #0x38] + mov r1, r7 + bl FUN_021EED84 + ldr r0, [r8, #0x38] + bl FUN_021EF06C + cmp r0, #0 + bne _021F7DAC +_021F7E2C: + mov r0, #0 + add sp, sp, #0xc + ldmia sp!, {r4, r5, r6, r7, r8, sb, pc} + .align 2, 0 +_021F7E38: .word 0x0220E738 + + arm_func_start FUN_021F7E3C +FUN_021F7E3C: ; 0x021F7E3C + stmdb sp!, {r4, r5, r6, r7, lr} + sub sp, sp, #0x184 + mov r5, r1 + ldr r1, [r5] + mov r6, r0 + cmp r1, #0x68 + ldr r4, [r6] + beq _021F7E70 + ldr r0, _021F8058 ; =0x0220E750 + ldr r1, _021F805C ; =0x0220E5E4 + mov r2, #0 + mov r3, #0xc1 + bl __msl_assertion_failed +_021F7E70: + add r1, sp, #0xc + ldr r0, _021F8060 ; =0x0220E738 + str r1, [sp] + str r0, [sp, #4] + ldr r1, [r5, #8] + add r3, sp, #8 + mov r0, r6 + add r2, r5, #0x18 + bl FUN_021F2A2C + cmp r0, #0 + addne sp, sp, #0x184 + ldmneia sp!, {r4, r5, r6, r7, pc} + ldr r0, [sp, #0xc] + cmp r0, #0 + movne r0, #0x6a + strne r0, [r5] + addne sp, sp, #0x184 + movne r0, #0 + ldmneia sp!, {r4, r5, r6, r7, pc} + ldr r0, [r5, #0x18] + ldr r1, _021F8064 ; =0x0220E770 + bl strstr + cmp r0, #0 + beq _021F804C + mov r1, #0 + strb r1, [r0] + ldr r7, [r5, #0x18] + ldr r1, _021F8068 ; =0x0220E778 + mov r0, r7 + mov r2, #6 + bl strncmp + cmp r0, #0 + bne _021F8030 + ldr r1, _021F806C ; =0x0220E780 + add r2, sp, #0x10 + mov r0, r7 + mov r3, #0x10 + bl FUN_021FB1F0 + cmp r0, #0 + moveq r0, #0x6a + streq r0, [r5] + addeq sp, sp, #0x184 + moveq r0, #0 + ldmeqia sp!, {r4, r5, r6, r7, pc} + add r0, sp, #0x10 + bl atol + mov r7, r0 + ldr r0, [r5, #0x18] + ldr r1, _021F8070 ; =0x0220E788 + add r2, sp, #0x20 + mov r3, #0x1f + bl FUN_021FB1F0 + cmp r0, #0 + moveq r0, #0x6a + streq r0, [r5] + addeq sp, sp, #0x184 + moveq r0, #0 + ldmeqia sp!, {r4, r5, r6, r7, pc} + ldr r0, [r5, #0x18] + ldr r1, _021F8074 ; =0x0220E790 + add r2, sp, #0x3f + mov r3, #0x21 + bl FUN_021FB1F0 + cmp r0, #0 + moveq r0, #0x6a + streq r0, [r5] + addeq sp, sp, #0x184 + moveq r0, #0 + ldmeqia sp!, {r4, r5, r6, r7, pc} + str r7, [sp] + ldr r2, _021F8078 ; =0x00000177 + ldr r3, [r4, #0x1a0] + ldr r1, _021F807C ; =0x0220E798 + add r0, sp, #0x81 + add r2, r4, r2 + bl sprintf + add r0, sp, #0x81 + bl strlen + mov r1, r0 + add r0, sp, #0x81 + add r2, sp, #0x60 + bl FUN_021EF794 + add r0, sp, #0x3f + add r1, sp, #0x60 + bl strcmp + cmp r0, #0 + beq _021F8000 + ldr r2, _021F8080 ; =0x0220E7A0 + mov r0, r6 + add r1, r5, #0x28 + bl FUN_021F2F9C + ldr r2, _021F8064 ; =0x0220E770 + mov r0, r6 + add r1, r5, #0x28 + bl FUN_021F2F9C + mov r0, #0x6a + str r0, [r5] + add sp, sp, #0x184 + mov r0, #0 + ldmia sp!, {r4, r5, r6, r7, pc} +_021F8000: + ldr r2, _021F8084 ; =0x0220E7A8 + mov r0, r6 + add r1, r5, #0x28 + bl FUN_021F2F9C + ldr r2, _021F8064 ; =0x0220E770 + mov r0, r6 + add r1, r5, #0x28 + bl FUN_021F2F9C + mov r0, #0x69 + str r0, [r5] + str r7, [r5, #0xc] + b _021F8044 +_021F8030: + mov r0, #0x6a + str r0, [r5] + add sp, sp, #0x184 + mov r0, #0 + ldmia sp!, {r4, r5, r6, r7, pc} +_021F8044: + mov r0, #0 + str r0, [r5, #0x20] +_021F804C: + mov r0, #0 + add sp, sp, #0x184 + ldmia sp!, {r4, r5, r6, r7, pc} + .align 2, 0 +_021F8058: .word 0x0220E750 +_021F805C: .word 0x0220E5E4 +_021F8060: .word 0x0220E738 +_021F8064: .word 0x0220E770 +_021F8068: .word 0x0220E778 +_021F806C: .word 0x0220E780 +_021F8070: .word 0x0220E788 +_021F8074: .word 0x0220E790 +_021F8078: .word 0x00000177 +_021F807C: .word 0x0220E798 +_021F8080: .word 0x0220E7A0 +_021F8084: .word 0x0220E7A8 + + arm_func_start FUN_021F8088 +FUN_021F8088: ; 0x021F8088 + stmdb sp!, {r4, r5, r6, r7, lr} + sub sp, sp, #0x1c + mov r6, r1 + ldr r2, [r6] + mov r7, r0 + sub r2, r2, #0x65 + ldr r5, [r7] + cmp r2, #3 + addls pc, pc, r2, lsl #2 + b _021F834C +_021F80B0: ; jump table + b _021F8360 ; case 0 + b _021F80C0 ; case 1 + b _021F80D4 ; case 2 + b _021F8258 ; case 3 +_021F80C0: + bl FUN_021F7478 + cmp r0, #0 + beq _021F8360 + add sp, sp, #0x1c + ldmia sp!, {r4, r5, r6, r7, pc} +_021F80D4: + ldr r1, [r6, #8] + add r2, sp, #8 + bl FUN_021FB0FC + cmp r0, #0 + addne sp, sp, #0x1c + ldmneia sp!, {r4, r5, r6, r7, pc} + ldr r0, [sp, #8] + cmp r0, #4 + bne _021F8110 + ldr r1, _021F83B8 ; =0x0220E648 + mov r0, r7 + bl FUN_021FAEEC + add sp, sp, #0x1c + mov r0, #3 + ldmia sp!, {r4, r5, r6, r7, pc} +_021F8110: + cmp r0, #3 + bne _021F8360 + ldr r1, [r6, #0xc] + add r2, sp, #0x14 + mov r0, r7 + mov r4, #1 + bl FUN_021F85E8 + cmp r0, #0 + bne _021F814C + ldr r1, _021F83B8 ; =0x0220E648 + mov r0, r7 + bl FUN_021FAEEC + add sp, sp, #0x1c + mov r0, #3 + ldmia sp!, {r4, r5, r6, r7, pc} +_021F814C: + ldr r2, _021F83BC ; =0x0220E778 + mov r0, r7 + add r1, r6, #0x28 + bl FUN_021F2F9C + ldr r2, _021F83C0 ; =0x0220E780 + mov r0, r7 + add r1, r6, #0x28 + bl FUN_021F2F9C + ldr r2, [r5, #0x1a0] + mov r0, r7 + add r1, r6, #0x28 + bl FUN_021F2F64 + ldr r2, _021F83C4 ; =0x0220E788 + mov r0, r7 + add r1, r6, #0x28 + bl FUN_021F2F9C + mov r0, r7 + add r1, r6, #0x28 + add r2, r5, #0x110 + bl FUN_021F2F9C + mov r0, r7 + add r1, r6, #0x28 + ldr r2, _021F83C8 ; =0x0220E790 + bl FUN_021F2F9C + mov r0, r7 + add r1, r6, #0x28 + ldr r2, [sp, #0x14] + ldr r2, [r2, #0x18] + bl FUN_021F2F9C + mov r0, r7 + add r1, r6, #0x28 + ldr r2, _021F83CC ; =0x0220E770 + bl FUN_021F2F9C + ldr r3, [r5, #0x434] + cmp r3, #0 + beq _021F8210 + ldr r2, [r6, #0xc] + mov r0, #0 +_021F81E4: + ldr r1, [r3, #0xc] + cmp r1, r2 + bne _021F8204 + cmp r3, r6 + beq _021F8204 + ldr r1, [r3] + cmp r1, #0x67 + movle r4, r0 +_021F8204: + ldr r3, [r3, #0x3c] + cmp r3, #0 + bne _021F81E4 +_021F8210: + cmp r4, #0 + beq _021F824C + ldr r0, [sp, #0x14] + ldr r0, [r0, #0x18] + bl FUN_021DD82C + ldr r0, [sp, #0x14] + mov r1, #0 + str r1, [r0, #0x18] + ldr r0, [sp, #0x14] + bl FUN_021F83EC + cmp r0, #0 + beq _021F824C + ldr r1, [sp, #0x14] + mov r0, r7 + bl FUN_021F85A0 +_021F824C: + mov r0, #0x68 + str r0, [r6] + b _021F8360 +_021F8258: + add r2, sp, #0x10 + str r2, [sp] + ldr r1, _021F83D0 ; =0x0220E738 + add r3, sp, #0xc + str r1, [sp, #4] + ldr r1, [r6, #8] + add r2, r6, #0x18 + bl FUN_021F2A2C + cmp r0, #0 + addne sp, sp, #0x1c + ldmneia sp!, {r4, r5, r6, r7, pc} + ldr r0, [r6, #0x18] + ldr r1, _021F83CC ; =0x0220E770 + bl strstr + cmp r0, #0 + beq _021F8360 + mov r1, #0 + strb r1, [r0] + ldr r4, [r6, #0x18] + ldr r1, _021F83D4 ; =0x0220E7A0 + mov r0, r4 + mov r2, #7 + bl strncmp + cmp r0, #0 + bne _021F8308 + ldr r0, [r6, #0x14] + add r0, r0, #1 + str r0, [r6, #0x14] + ldr r0, [r6, #0x14] + cmp r0, #1 + ble _021F82EC + ldr r1, _021F83D8 ; =0x0220E7B0 + mov r0, r7 + bl FUN_021FAEEC + add sp, sp, #0x1c + mov r0, #3 + ldmia sp!, {r4, r5, r6, r7, pc} +_021F82EC: + mov r0, r7 + mov r1, r6 + bl FUN_021F7610 + cmp r0, #0 + beq _021F8338 + add sp, sp, #0x1c + ldmia sp!, {r4, r5, r6, r7, pc} +_021F8308: + ldr r1, _021F83DC ; =0x0220E7A8 + mov r0, r4 + mov r2, #6 + bl strncmp + cmp r0, #0 + beq _021F8338 + ldr r1, _021F83E0 ; =0x0220E7D4 + mov r0, r7 + bl FUN_021FAEEC + add sp, sp, #0x1c + mov r0, #3 + ldmia sp!, {r4, r5, r6, r7, pc} +_021F8338: + mov r0, #0x69 + str r0, [r6] + mov r0, #0 + str r0, [r6, #0x20] + b _021F8360 +_021F834C: + ldr r0, _021F83E4 ; =0x0220E6E8 + ldr r1, _021F83E8 ; =0x0220E5E4 + mov r2, #0 + mov r3, #0x9f + bl __msl_assertion_failed +_021F8360: + ldr r0, [r6, #0x30] + cmp r0, #0 + ble _021F83AC + mov r1, #1 + ldr r0, _021F83D0 ; =0x0220E738 + str r1, [sp] + str r0, [sp, #4] + ldr r1, [r6, #8] + add r3, sp, #0x10 + mov r0, r7 + add r2, r6, #0x28 + bl FUN_021F28AC + ldr r1, [sp, #0x10] + cmp r1, #0 + bne _021F83A4 + cmp r0, #0 + beq _021F83AC +_021F83A4: + mov r0, #0x6a + str r0, [r6] +_021F83AC: + mov r0, #0 + add sp, sp, #0x1c + ldmia sp!, {r4, r5, r6, r7, pc} + .align 2, 0 +_021F83B8: .word 0x0220E648 +_021F83BC: .word 0x0220E778 +_021F83C0: .word 0x0220E780 +_021F83C4: .word 0x0220E788 +_021F83C8: .word 0x0220E790 +_021F83CC: .word 0x0220E770 +_021F83D0: .word 0x0220E738 +_021F83D4: .word 0x0220E7A0 +_021F83D8: .word 0x0220E7B0 +_021F83DC: .word 0x0220E7A8 +_021F83E0: .word 0x0220E7D4 +_021F83E4: .word 0x0220E6E8 +_021F83E8: .word 0x0220E5E4 + + arm_func_start FUN_021F83EC +FUN_021F83EC: ; 0x021F83EC + cmp r0, #0 + beq _021F8428 + ldr r1, [r0, #0xc] + cmp r1, #0 + bne _021F8428 + ldr r1, [r0, #8] + cmp r1, #0 + bne _021F8428 + ldr r1, [r0, #0x18] + cmp r1, #0 + bne _021F8428 + ldr r0, [r0, #0x10] + cmp r0, #0 + moveq r0, #1 + bxeq lr +_021F8428: + mov r0, #0 + bx lr + + arm_func_start FUN_021F8430 +FUN_021F8430: ; 0x021F8430 + stmdb sp!, {lr} + sub sp, sp, #0xc + str r1, [sp] + mov r3, #0 + ldr r1, _021F845C ; =FUN_021F8460 + add r2, sp, #0 + str r3, [sp, #4] + bl FUN_021F848C + ldr r0, [sp, #4] + add sp, sp, #0xc + ldmfd sp!, {pc} + .align 2, 0 +_021F845C: .word FUN_021F8460 + + arm_func_start FUN_021F8460 +FUN_021F8460: ; 0x021F8460 + ldr r0, [r1, #8] + cmp r0, #0 + beq _021F8484 + ldr r3, [r2] + ldr r0, [r0] + cmp r3, r0 + streq r1, [r2, #4] + moveq r0, #0 + bxeq lr +_021F8484: + mov r0, #1 + bx lr + + arm_func_start FUN_021F848C +FUN_021F848C: ; 0x021F848C + stmdb sp!, {lr} + sub sp, sp, #0xc + ldr r3, [r0] + str r1, [sp, #4] + str r2, [sp, #8] + str r0, [sp] + ldr r0, [r3, #0x428] + ldr r1, _021F84C8 ; =FUN_021F84CC + add r2, sp, #0 + bl FUN_021EF264 + cmp r0, #0 + moveq r0, #1 + movne r0, #0 + add sp, sp, #0xc + ldmfd sp!, {pc} + .align 2, 0 +_021F84C8: .word FUN_021F84CC + + arm_func_start FUN_021F84CC +FUN_021F84CC: ; 0x021F84CC + stmdb sp!, {lr} + sub sp, sp, #4 + mov ip, r0 + ldr r0, [r1] + ldr r2, [r1, #8] + ldr r3, [r1, #4] + mov r1, ip + blx r3 + add sp, sp, #4 + ldmfd sp!, {pc} + + arm_func_start FUN_021F84F4 +FUN_021F84F4: ; 0x021F84F4 + stmdb sp!, {r4, lr} + sub sp, sp, #0x10 + str r1, [sp] + mov ip, #0 + str r2, [sp, #4] + mov r4, r3 + ldr r1, _021F853C ; =FUN_021F8540 + add r2, sp, #0 + str ip, [sp, #0xc] + str r4, [sp, #8] + bl FUN_021F848C + ldr r0, [sp, #0xc] + cmp r0, #0 + moveq r0, #0 + streq r0, [r4] + mov r0, #0 + add sp, sp, #0x10 + ldmia sp!, {r4, pc} + .align 2, 0 +_021F853C: .word FUN_021F8540 + + arm_func_start FUN_021F8540 +FUN_021F8540: ; 0x021F8540 + stmdb sp!, {r4, r5, r6, lr} + mov r6, r1 + ldr r4, [r6, #0xc] + mov r5, r2 + cmp r4, #0 + beq _021F8598 + ldr r0, [r5] + ldr r1, [r4] + bl strcmp + cmp r0, #0 + bne _021F8598 + ldr r0, [r5, #4] + ldr r1, [r4, #8] + bl strcmp + cmp r0, #0 + bne _021F8598 + ldr r1, [r5, #8] + mov r0, #1 + str r6, [r1] + str r0, [r5, #0xc] + mov r0, #0 + ldmia sp!, {r4, r5, r6, pc} +_021F8598: + mov r0, #1 + ldmia sp!, {r4, r5, r6, pc} + + arm_func_start FUN_021F85A0 +FUN_021F85A0: ; 0x021F85A0 + ldr r0, [r0] + ldr ip, _021F85B0 ; =FUN_021EF3F4 + ldr r0, [r0, #0x428] + bx ip + .align 2, 0 +_021F85B0: .word FUN_021EF3F4 + + arm_func_start FUN_021F85B4 +FUN_021F85B4: ; 0x021F85B4 + stmdb sp!, {r4, lr} + sub sp, sp, #8 + add r2, sp, #0 + ldr r4, [r0] + bl FUN_021F85E8 + cmp r0, #0 + addeq sp, sp, #8 + ldmeqia sp!, {r4, pc} + ldr r0, [r4, #0x428] + ldr r1, [sp] + bl FUN_021EF3F4 + add sp, sp, #8 + ldmia sp!, {r4, pc} + + arm_func_start FUN_021F85E8 +FUN_021F85E8: ; 0x021F85E8 + stmdb sp!, {r4, lr} + sub sp, sp, #0x20 + ldr r0, [r0] + mov r4, r2 + str r1, [sp] + ldr r0, [r0, #0x428] + add r1, sp, #0 + bl FUN_021EF358 + cmp r4, #0 + strne r0, [r4] + cmp r0, #0 + movne r0, #1 + moveq r0, #0 + add sp, sp, #0x20 + ldmia sp!, {r4, pc} + + arm_func_start FUN_021F8624 +FUN_021F8624: ; 0x021F8624 + stmdb sp!, {r4, r5, r6, lr} + sub sp, sp, #0x20 + mov r5, r0 + ldr r2, [r5] + ldr r0, _021F8700 ; =0x00000428 + mov r4, r1 + cmp r4, #0 + add r6, r2, r0 + bgt _021F865C + ldr r0, _021F8704 ; =0x0220E7F4 + ldr r1, _021F8708 ; =0x0220E7FC + ldr r3, _021F870C ; =0x000002B5 + mov r2, #0 + bl __msl_assertion_failed +_021F865C: + cmp r4, #0 + addle sp, sp, #0x20 + movle r0, #0 + ldmleia sp!, {r4, r5, r6, pc} + add r2, sp, #0 + mov r0, r5 + mov r1, r4 + bl FUN_021F85E8 + cmp r0, #0 + ldrne r0, [sp] + addne sp, sp, #0x20 + ldmneia sp!, {r4, r5, r6, pc} + add r1, sp, #4 + mov r0, #0 + str r0, [r1] + str r0, [r1, #4] + str r0, [r1, #8] + str r0, [r1, #0xc] + str r0, [r1, #0x10] + str r0, [r1, #0x14] + str r0, [r1, #0x18] + str r4, [sp, #4] + str r0, [sp, #8] + str r0, [sp, #0x10] + str r0, [sp, #0x14] + str r0, [sp, #0x1c] + str r0, [sp, #0x18] + ldr r0, [r6] + bl FUN_021EF494 + ldr r0, [r6, #4] + add r2, sp, #0 + add r3, r0, #1 + mov r0, r5 + mov r1, r4 + str r3, [r6, #4] + bl FUN_021F85E8 + cmp r0, #0 + ldrne r0, [sp] + moveq r0, #0 + add sp, sp, #0x20 + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +_021F8700: .word 0x00000428 +_021F8704: .word 0x0220E7F4 +_021F8708: .word 0x0220E7FC +_021F870C: .word 0x000002B5 + + arm_func_start FUN_021F8710 +FUN_021F8710: ; 0x021F8710 + stmdb sp!, {r4, r5, r6, lr} + sub sp, sp, #0x20 + mov r6, r2 + mov r4, r1 + mov r1, r6 + mov r2, #1 + mov r5, r0 + bl FUN_021FB2F8 + cmp r0, #0 + addne sp, sp, #0x20 + movne r0, #4 + ldmneia sp!, {r4, r5, r6, pc} + ldr r1, _021F8860 ; =0x0220E80C + mov r0, r6 + mov r2, #5 + bl strncmp + cmp r0, #0 + beq _021F8784 + ldr r2, _021F8864 ; =0x0220E814 + mov r0, r5 + mov r1, #1 + bl FUN_021FAF00 + mov r0, r5 + mov r1, #3 + mov r2, #1 + bl FUN_021F3500 + add sp, sp, #0x20 + mov r0, #3 + ldmia sp!, {r4, r5, r6, pc} +_021F8784: + ldr r1, _021F8868 ; =0x0220E844 + add r2, sp, #0x10 + mov r0, r6 + mov r3, #0x10 + bl FUN_021FB1F0 + cmp r0, #0 + bne _021F87CC + ldr r2, _021F8864 ; =0x0220E814 + mov r0, r5 + mov r1, #1 + bl FUN_021FAF00 + mov r0, r5 + mov r1, #3 + mov r2, #1 + bl FUN_021F3500 + add sp, sp, #0x20 + mov r0, #3 + ldmia sp!, {r4, r5, r6, pc} +_021F87CC: + add r0, sp, #0x10 + bl atol + ldr r2, [r4, #0xc] + ldr r1, [r4, #0x10] + mov r6, r0 + str r2, [sp, #8] + str r1, [sp, #0xc] + cmp r2, #0 + beq _021F8848 + mov r0, #8 + bl FUN_021DD860 + movs r3, r0 + bne _021F8818 + ldr r1, _021F886C ; =0x0220E850 + mov r0, r5 + bl FUN_021FAEEC + add sp, sp, #0x20 + mov r0, #1 + ldmia sp!, {r4, r5, r6, pc} +_021F8818: + str r6, [r3, #4] + mov r0, #0 + str r0, [r3] + str r4, [sp] + str r0, [sp, #4] + add r1, sp, #8 + mov r0, r5 + ldmia r1, {r1, r2} + bl FUN_021F3454 + cmp r0, #0 + addne sp, sp, #0x20 + ldmneia sp!, {r4, r5, r6, pc} +_021F8848: + mov r0, r5 + mov r1, r4 + bl FUN_021F6C84 + mov r0, #0 + add sp, sp, #0x20 + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +_021F8860: .word 0x0220E80C +_021F8864: .word 0x0220E814 +_021F8868: .word 0x0220E844 +_021F886C: .word 0x0220E850 + + arm_func_start FUN_021F8870 +FUN_021F8870: ; 0x021F8870 + stmdb sp!, {r4, lr} + sub sp, sp, #8 + ldr r4, [r0] + mov r1, #0 + str r1, [r4, #0x430] + str r1, [r4, #0x42c] + ldr r0, _021F88C0 ; =FUN_021F88CC + ldr r2, _021F88C4 ; =FUN_021F8958 + str r0, [sp] + ldr r3, _021F88C8 ; =FUN_021F8948 + mov r0, #0x1c + mov r1, #4 + bl FUN_021EF76C + str r0, [r4, #0x428] + ldr r0, [r4, #0x428] + cmp r0, #0 + movne r0, #1 + moveq r0, #0 + add sp, sp, #8 + ldmia sp!, {r4, pc} + .align 2, 0 +_021F88C0: .word FUN_021F88CC +_021F88C4: .word FUN_021F8958 +_021F88C8: .word FUN_021F8948 + + arm_func_start FUN_021F88CC +FUN_021F88CC: ; 0x021F88CC + stmdb sp!, {r4, lr} + mov r4, r0 + ldr r0, [r4, #8] + cmp r0, #0 + beq _021F891C + ldr r0, [r0, #8] + bl FUN_021DD82C + ldr r0, [r4, #8] + mov r1, #0 + str r1, [r0, #8] + ldr r0, [r4, #8] + ldr r0, [r0, #0xc] + bl FUN_021DD82C + ldr r0, [r4, #8] + mov r1, #0 + str r1, [r0, #0xc] + ldr r0, [r4, #8] + bl FUN_021DD82C + mov r0, #0 + str r0, [r4, #8] +_021F891C: + mov r0, r4 + bl FUN_021F4CBC + ldr r0, [r4, #0x10] + bl FUN_021DD82C + mov r0, #0 + str r0, [r4, #0x10] + ldr r0, [r4, #0x18] + bl FUN_021DD82C + mov r0, #0 + str r0, [r4, #0x18] + ldmia sp!, {r4, pc} + + arm_func_start FUN_021F8948 +FUN_021F8948: ; 0x021F8948 + ldr r2, [r0] + ldr r0, [r1] + sub r0, r2, r0 + bx lr + + arm_func_start FUN_021F8958 +FUN_021F8958: ; 0x021F8958 + stmdb sp!, {lr} + sub sp, sp, #4 + ldr r0, [r0] + bl _s32_div_f + mov r0, r1 + add sp, sp, #4 + ldmfd sp!, {pc} + + arm_func_start FUN_021F8974 +FUN_021F8974: ; 0x021F8974 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #4 + mov sl, r0 + ldr sb, [sl] + mov r6, #0 + ldr r0, [sb, #0x210] + cmp r0, #0 + ble _021F8AB4 + mov r0, r0, lsl #2 + bl FUN_021DD860 + movs r8, r0 + bne _021F89BC + ldr r1, _021F8AC0 ; =0x0220E8A0 + mov r0, sl + bl FUN_021FAEEC + add sp, sp, #4 + mov r0, #1 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +_021F89BC: + ldr r7, [sb, #0x424] + cmp r7, #0 + beq _021F8A38 + ldr fp, _021F8AC4 ; =0x0220E8B0 + mov r5, r6 + mov r4, #1 +_021F89D4: + ldr r0, [r7] + cmp r0, #3 + bne _021F8A2C + ldr r0, [r7, #0x14] + cmp r0, #5 + beq _021F8A2C + ldr r0, [r7, #4] + ldr r0, [r0, #0x13c] + cmp r0, #0 + bne _021F8A2C + ldr r0, [sb, #0x210] + cmp r6, r0 + blt _021F8A1C + ldr r1, _021F8AC8 ; =0x0220E8D0 + ldr r3, _021F8ACC ; =0x00000563 + mov r0, fp + mov r2, r5 + bl __msl_assertion_failed +_021F8A1C: + str r7, [r8, r6, lsl #2] + ldr r0, [r7, #4] + add r6, r6, #1 + str r4, [r0, #0x13c] +_021F8A2C: + ldr r7, [r7, #0x20] + cmp r7, #0 + bne _021F89D4 +_021F8A38: + cmp r6, #0 + mov r4, #0 + ble _021F8A68 +_021F8A44: + ldr r1, [r8, r4, lsl #2] + mov r0, sl + bl FUN_021F8AD0 + cmp r0, #0 + ldrne r1, [r8, r4, lsl #2] + add r4, r4, #1 + strne r0, [r1, #0x1c] + cmp r4, r6 + blt _021F8A44 +_021F8A68: + cmp r6, #0 + mov r4, #0 + ble _021F8AAC + mov r5, r4 +_021F8A78: + ldr r0, [r8, r4, lsl #2] + mov r1, r4, lsl #2 + ldr r0, [r0, #4] + str r5, [r0, #0x13c] + ldr r0, [r0, #0x140] + cmp r0, #0 + beq _021F8AA0 + ldr r1, [r8, r1] + mov r0, sl + bl FUN_021F6C84 +_021F8AA0: + add r4, r4, #1 + cmp r4, r6 + blt _021F8A78 +_021F8AAC: + mov r0, r8 + bl FUN_021DD82C +_021F8AB4: + mov r0, #0 + add sp, sp, #4 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_021F8AC0: .word 0x0220E8A0 +_021F8AC4: .word 0x0220E8B0 +_021F8AC8: .word 0x0220E8D0 +_021F8ACC: .word 0x00000563 + + arm_func_start FUN_021F8AD0 +FUN_021F8AD0: ; 0x021F8AD0 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + ldr ip, _021F99B4 ; =0x000004EC + sub sp, sp, ip + mov sl, r0 + ldr r0, [sl] + str r1, [sp, #0x1c] + ldr r1, [r1, #8] + str r0, [sp, #0x24] + ldr r0, [sp, #0x1c] + cmp r1, #0 + movne r4, #1 + ldr sb, [r0, #4] + moveq r4, #0 +_021F8B04: + mov r1, #1 + ldr r0, _021F99B8 ; =0x0220E8DC + str r1, [sp] + str r0, [sp, #4] + ldr r1, [sb, #4] + add r3, sp, #0xa0 + mov r0, sl + add r2, sb, #0x18 + bl FUN_021F28AC + cmp r0, #0 + ldrne ip, _021F99B4 ; =0x000004EC + addne sp, sp, ip + ldmneia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + ldr r0, [sp, #0x1c] + ldr r0, [r0, #0x14] + cmp r0, #1 + bne _021F9174 + ldr r1, [sb, #4] + add r2, sp, #0x8c + mov r0, sl + bl FUN_021FB0FC + cmp r0, #0 + ldrne ip, _021F99B4 ; =0x000004EC + addne sp, sp, ip + ldmneia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + ldr r0, [sp, #0x8c] + cmp r0, #4 + bne _021F8BA4 + ldr r1, _021F99BC ; =0x00000D01 + ldr r2, _021F99C0 ; =0x0220E8E0 + mov r0, sl + bl FUN_021FAF00 + mov r0, sl + mov r1, #4 + mov r2, #0 + bl FUN_021F3500 + ldr ip, _021F99B4 ; =0x000004EC + mov r0, #4 + add sp, sp, ip + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +_021F8BA4: + cmp r0, #3 + bne _021FA704 + ldr r0, [sb] + cmp r0, #1 + bne _021F8D6C + ldr r2, _021F99C4 ; =0x0220E90C + mov r0, sl + add r1, sb, #0x18 + bl FUN_021F2F9C + ldr r2, _021F99C8 ; =0x0220E918 + mov r0, sl + add r1, sb, #0x18 + bl FUN_021F2F9C + ldr r0, [sp, #0x24] + add r1, sb, #0x18 + ldr r2, [r0, #0x198] + mov r0, sl + bl FUN_021F2F64 + ldr r2, _021F99CC ; =0x0220E924 + mov r0, sl + add r1, sb, #0x18 + bl FUN_021F2F9C + ldr r2, [sp, #0x24] + mov r0, sl + ldr r2, [r2, #0x1a0] + add r1, sb, #0x18 + bl FUN_021F2F64 + ldr r2, _021F99D0 ; =0x0220E930 + mov r0, sl + add r1, sb, #0x18 + bl FUN_021F2F9C + ldr r2, [sp, #0x24] + mov r0, sl + ldr r2, [r2, #0x470] + add r1, sb, #0x18 + bl FUN_021F2F64 + ldrsb r0, [sb, #0x28] + cmp r0, #0 + beq _021F8C60 + ldr r2, _021F99D4 ; =0x0220E940 + mov r0, sl + add r1, sb, #0x18 + bl FUN_021F2F9C + mov r0, sl + add r1, sb, #0x18 + add r2, sb, #0x28 + bl FUN_021F2F9C +_021F8C60: + ldrsb r0, [sb, #0x47] + cmp r0, #0 + beq _021F8C8C + ldr r2, _021F99D8 ; =0x0220E948 + mov r0, sl + add r1, sb, #0x18 + bl FUN_021F2F9C + mov r0, sl + add r1, sb, #0x18 + add r2, sb, #0x47 + bl FUN_021F2F9C +_021F8C8C: + ldrsb r0, [sb, #0x5c] + cmp r0, #0 + beq _021F8CB8 + ldr r2, _021F99DC ; =0x0220E958 + mov r0, sl + add r1, sb, #0x18 + bl FUN_021F2F9C + mov r0, sl + add r1, sb, #0x18 + add r2, sb, #0x5c + bl FUN_021F2F9C +_021F8CB8: + ldrsb r0, [sb, #0x8f] + cmp r0, #0 + beq _021F8CE4 + ldr r2, _021F99E0 ; =0x0220E960 + mov r0, sl + add r1, sb, #0x18 + bl FUN_021F2F9C + mov r0, sl + add r1, sb, #0x18 + add r2, sb, #0x8f + bl FUN_021F2F9C +_021F8CE4: + ldrsb r0, [sb, #0xae] + cmp r0, #0 + beq _021F8D10 + ldr r2, _021F99E4 ; =0x0220E96C + mov r0, sl + add r1, sb, #0x18 + bl FUN_021F2F9C + mov r0, sl + add r1, sb, #0x18 + add r2, sb, #0xae + bl FUN_021F2F9C +_021F8D10: + ldr r0, [sb, #0x130] + cmp r0, #0 + beq _021F8D3C + ldr r2, _021F99E8 ; =0x0220E978 + mov r0, sl + add r1, sb, #0x18 + bl FUN_021F2F9C + ldr r2, [sb, #0x130] + mov r0, sl + add r1, sb, #0x18 + bl FUN_021F2F64 +_021F8D3C: + ldr r0, [sb, #0x134] + cmp r0, #0 + ble _021F9134 + ldr r2, _021F99EC ; =0x0220E984 + mov r0, sl + add r1, sb, #0x18 + bl FUN_021F2F9C + ldr r2, [sb, #0x134] + mov r0, sl + add r1, sb, #0x18 + bl FUN_021F2F64 + b _021F9134 +_021F8D6C: + cmp r0, #2 + bne _021F8DA8 + ldr r2, _021F99F0 ; =0x0220E98C + mov r0, sl + add r1, sb, #0x18 + bl FUN_021F2F9C + ldr r2, _021F99DC ; =0x0220E958 + mov r0, sl + add r1, sb, #0x18 + bl FUN_021F2F9C + mov r0, sl + add r1, sb, #0x18 + add r2, sb, #0x5c + bl FUN_021F2F9C + b _021F9134 +_021F8DA8: + cmp r0, #3 + bne _021F8E28 + ldr r2, _021F99F4 ; =0x0220E994 + mov r0, sl + add r1, sb, #0x18 + bl FUN_021F2F9C + ldr r2, _021F99DC ; =0x0220E958 + mov r0, sl + add r1, sb, #0x18 + bl FUN_021F2F9C + mov r0, sl + add r1, sb, #0x18 + add r2, sb, #0x5c + bl FUN_021F2F9C + ldr r2, _021F99F8 ; =0x0220E99C + mov r0, sl + add r1, sb, #0x18 + bl FUN_021F2F9C + mov r0, sl + add r1, sb, #0x18 + add r2, sb, #0xcd + bl FUN_021F2F9C + ldr r2, _021F99D0 ; =0x0220E930 + mov r0, sl + add r1, sb, #0x18 + bl FUN_021F2F9C + ldr r2, [sp, #0x24] + mov r0, sl + ldr r2, [r2, #0x470] + add r1, sb, #0x18 + bl FUN_021F2F64 + b _021F9134 +_021F8E28: + cmp r0, #4 + bne _021F8EAC + ldr r2, _021F99FC ; =0x0220E9A4 + mov r0, sl + add r1, sb, #0x18 + bl FUN_021F2F9C + ldr r2, _021F99C8 ; =0x0220E918 + mov r0, sl + add r1, sb, #0x18 + bl FUN_021F2F9C + ldr r0, [sp, #0x24] + add r1, sb, #0x18 + ldr r2, [r0, #0x198] + mov r0, sl + bl FUN_021F2F64 + ldr r2, _021F99CC ; =0x0220E924 + mov r0, sl + add r1, sb, #0x18 + bl FUN_021F2F9C + ldr r2, [sp, #0x24] + mov r0, sl + ldr r2, [r2, #0x1a0] + add r1, sb, #0x18 + bl FUN_021F2F64 + ldr r2, _021F9A00 ; =0x0220E9B0 + mov r0, sl + add r1, sb, #0x18 + bl FUN_021F2F9C + ldr r2, [sb, #0x138] + mov r0, sl + add r1, sb, #0x18 + bl FUN_021F2F64 + b _021F9134 +_021F8EAC: + cmp r0, #5 + bne _021F8F28 + ldr r2, _021F9A04 ; =0x0220E9BC + mov r0, sl + add r1, sb, #0x18 + bl FUN_021F2F9C + ldr r2, _021F99D4 ; =0x0220E940 + mov r0, sl + add r1, sb, #0x18 + bl FUN_021F2F9C + mov r0, sl + add r1, sb, #0x18 + add r2, sb, #0x28 + bl FUN_021F2F9C + mov r0, sl + add r1, sb, #0x18 + ldr r2, _021F99DC ; =0x0220E958 + bl FUN_021F2F9C + mov r0, sl + add r1, sb, #0x18 + add r2, sb, #0x5c + bl FUN_021F2F9C + mov r0, sl + add r1, sb, #0x18 + ldr r2, _021F99F8 ; =0x0220E99C + bl FUN_021F2F9C + mov r0, sl + add r1, sb, #0x18 + add r2, sb, #0xcd + bl FUN_021F2F9C + b _021F9134 +_021F8F28: + cmp r0, #6 + bne _021F9038 + ldr r2, _021F9A08 ; =0x0220E9C4 + mov r0, sl + add r1, sb, #0x18 + bl FUN_021F2F9C + ldr r2, _021F99D4 ; =0x0220E940 + mov r0, sl + add r1, sb, #0x18 + bl FUN_021F2F9C + mov r0, sl + add r1, sb, #0x18 + add r2, sb, #0x28 + bl FUN_021F2F9C + ldr r2, _021F99DC ; =0x0220E958 + mov r0, sl + add r1, sb, #0x18 + bl FUN_021F2F9C + mov r0, sl + add r1, sb, #0x18 + add r2, sb, #0x5c + bl FUN_021F2F9C + ldr r2, _021F99F8 ; =0x0220E99C + mov r0, sl + add r1, sb, #0x18 + bl FUN_021F2F9C + mov r0, sl + add r1, sb, #0x18 + add r2, sb, #0xcd + bl FUN_021F2F9C + ldr r2, _021F9A0C ; =0x0220E9D0 + mov r0, sl + add r1, sb, #0x18 + bl FUN_021F2F9C + ldr r2, [sp, #0x24] + mov r0, sl + ldr r2, [r2, #0x46c] + add r1, sb, #0x18 + bl FUN_021F2F64 + ldr r2, _021F99D0 ; =0x0220E930 + mov r0, sl + add r1, sb, #0x18 + bl FUN_021F2F9C + ldr r2, [sp, #0x24] + mov r0, sl + ldr r2, [r2, #0x470] + add r1, sb, #0x18 + bl FUN_021F2F64 + ldr r2, _021F99D8 ; =0x0220E948 + mov r0, sl + add r1, sb, #0x18 + bl FUN_021F2F9C + mov r0, sl + add r1, sb, #0x18 + add r2, sb, #0x47 + bl FUN_021F2F9C + ldrsb r0, [sb, #0xec] + cmp r0, #0 + beq _021F9134 + ldr r2, _021F9A10 ; =0x0220E9DC + mov r0, sl + add r1, sb, #0x18 + bl FUN_021F2F9C + mov r0, sl + add r1, sb, #0x18 + add r2, sb, #0xec + bl FUN_021F2F9C + b _021F9134 +_021F9038: + cmp r0, #7 + bne _021F90C0 + ldr r2, _021F9A14 ; =0x0220E9E4 + mov r0, sl + add r1, sb, #0x18 + bl FUN_021F2F9C + ldr r2, _021F99C8 ; =0x0220E918 + mov r0, sl + add r1, sb, #0x18 + bl FUN_021F2F9C + ldr r0, [sp, #0x24] + add r1, sb, #0x18 + ldr r2, [r0, #0x198] + mov r0, sl + bl FUN_021F2F64 + ldr r2, _021F99CC ; =0x0220E924 + mov r0, sl + add r1, sb, #0x18 + bl FUN_021F2F9C + ldr r2, [sp, #0x24] + mov r0, sl + ldr r2, [r2, #0x1a0] + add r1, sb, #0x18 + bl FUN_021F2F64 + ldr r2, _021F99D0 ; =0x0220E930 + mov r0, sl + add r1, sb, #0x18 + bl FUN_021F2F9C + ldr r2, [sp, #0x24] + mov r0, sl + ldr r2, [r2, #0x470] + add r1, sb, #0x18 + bl FUN_021F2F64 + b _021F9134 +_021F90C0: + cmp r0, #8 + bne _021F9120 + ldr r2, _021F9A18 ; =0x0220E9F0 + mov r0, sl + add r1, sb, #0x18 + bl FUN_021F2F9C + ldr r2, _021F9A1C ; =0x0220EA00 + mov r0, sl + add r1, sb, #0x18 + bl FUN_021F2F9C + mov r0, sl + add r1, sb, #0x18 + add r2, sb, #0x47 + bl FUN_021F2F9C + ldr r2, _021F99D0 ; =0x0220E930 + mov r0, sl + add r1, sb, #0x18 + bl FUN_021F2F9C + ldr r2, [sp, #0x24] + mov r0, sl + ldr r2, [r2, #0x470] + add r1, sb, #0x18 + bl FUN_021F2F64 + b _021F9134 +_021F9120: + ldr r0, _021F9A20 ; =0x0220EA10 + ldr r1, _021F9A24 ; =0x0220E8D0 + ldr r3, _021F9A28 ; =0x00000275 + mov r2, #0 + bl __msl_assertion_failed +_021F9134: + ldr r2, _021F9A2C ; =0x0220EA14 + mov r0, sl + add r1, sb, #0x18 + bl FUN_021F2F9C + ldr r2, _021F9A30 ; =0x02210EA0 + mov r0, sl + add r1, sb, #0x18 + bl FUN_021F2F9C + ldr r2, _021F9A34 ; =0x0220EA20 + mov r0, sl + add r1, sb, #0x18 + bl FUN_021F2F9C + ldr r0, [sp, #0x1c] + mov r1, #4 + str r1, [r0, #0x14] + b _021FA704 +_021F9174: + cmp r0, #4 + bne _021FA704 + add r1, sp, #0xa0 + ldr r0, _021F99B8 ; =0x0220E8DC + str r1, [sp] + str r0, [sp, #4] + ldr r1, [sb, #4] + add r3, sp, #0x9c + mov r0, sl + add r2, sb, #8 + bl FUN_021F2A2C + cmp r0, #0 + beq _021F91E8 + cmp r0, #3 + ldrne ip, _021F99B4 ; =0x000004EC + addne sp, sp, ip + ldmneia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + ldr r1, _021F99BC ; =0x00000D01 + ldr r2, _021F9A38 ; =0x0220EA28 + mov r0, sl + bl FUN_021FAF00 + mov r0, sl + mov r1, #3 + mov r2, #0 + bl FUN_021F3500 + ldr ip, _021F99B4 ; =0x000004EC + mov r0, #3 + add sp, sp, ip + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +_021F91E8: + ldr r0, [sb, #8] + ldr r1, _021F9A34 ; =0x0220EA20 + bl strstr + cmp r0, #0 + beq _021FA704 + mov r0, #0 + str r0, [sp, #0x90] + ldr r0, [sp, #0x1c] + mov r1, #5 + str r1, [r0, #0x14] + ldr r1, [sb, #8] + mov r0, sl + mov r2, #1 + bl FUN_021FB2F8 + cmp r0, #0 + ldrne ip, _021F99B4 ; =0x000004EC + movne r0, #1 + strne r0, [sb, #0x140] + addne sp, sp, ip + movne r0, #4 + ldmneia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + ldr r0, [sb] + cmp r0, #1 + bne _021F9600 + mov r0, #0 + str r0, [sp, #0x20] + str r0, [sp, #0xdc] + str r0, [sp, #0xe0] + str r0, [sp, #0xe8] + mov r0, #1 + str r0, [sp, #0x3c] + mov r0, #0x33 + str r0, [sp, #0x50] + mov r0, #0x15 + str r0, [sp, #0x4c] + mov r0, #0x600 + str r0, [sp, #0x38] + ldr r0, [sp, #0x20] + ldr r1, _021F9A3C ; =0x00000601 + str r0, [sp, #0x40] + mov r0, #0xac + str r0, [sp, #0x44] + ldr r0, [sp, #0x20] + str r1, [sp, #0xe4] + add r5, sp, #0xec + add r6, sp, #0x2ec + mov r4, #0x1f + str r0, [sp, #0x48] +_021F92A8: + str r6, [sp] + ldr r1, [sb, #8] + mov r0, sl + add r2, sp, #0x90 + mov r3, r5 + bl FUN_021FAF2C + cmp r0, #0 + ldrne ip, _021F99B4 ; =0x000004EC + addne sp, sp, ip + ldmneia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + ldr r1, _021F9A40 ; =0x0220EA54 + mov r0, r5 + bl strcmp + cmp r0, #0 + bne _021F9344 + str r6, [sp] + ldr r1, [sb, #8] + mov r0, sl + add r2, sp, #0x90 + mov r3, r5 + bl FUN_021FAF2C + cmp r0, #0 + ldrne ip, _021F99B4 ; =0x000004EC + addne sp, sp, ip + ldmneia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + ldr r1, _021F9A44 ; =0x0220EA5C + mov r0, r5 + bl strcmp + cmp r0, #0 + bne _021F9338 + ldr r1, _021F9A20 ; =0x0220EA10 + mov r0, r6 + bl strcmp + cmp r0, #0 + ldrne r0, [sp, #0x38] + strne r0, [sp, #0xe4] +_021F9338: + ldr r0, [sp, #0x3c] + str r0, [sp, #0x20] + b _021F9530 +_021F9344: + ldr r1, _021F9A48 ; =0x0220EA64 + mov r0, r5 + bl strcmp + cmp r0, #0 + bne _021F9500 + ldr r1, [sp, #0xe0] + ldr r0, [sp, #0xe8] + add r2, r1, #1 + mov r1, #0xac + mul r1, r2, r1 + str r2, [sp, #0xe0] + bl FUN_021DD844 + movs r8, r0 + str r8, [sp, #0xe8] + bne _021F939C + ldr r1, _021F9A4C ; =0x0220E8A0 + mov r0, sl + bl FUN_021FAEEC + ldr ip, _021F99B4 ; =0x000004EC + mov r0, #1 + add sp, sp, ip + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +_021F939C: + ldr r1, [sp, #0xe0] + mov r0, #0xac + sub r1, r1, #1 + mul fp, r1, r0 + add r7, r8, fp + ldr r1, [sp, #0x40] + ldr r2, [sp, #0x44] + mov r0, r7 + bl Call_FillMemWithValue + mov r0, r6 + bl atol + str r0, [r8, fp] + ldr r8, [sp, #0x48] +_021F93D0: + ldr fp, [sp, #0x90] + mov r0, sl + str r6, [sp] + ldr r1, [sb, #8] + add r2, sp, #0x90 + mov r3, r5 + bl FUN_021FAF2C + cmp r0, #0 + ldrne ip, _021F99B4 ; =0x000004EC + addne sp, sp, ip + ldmneia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + ldr r1, _021F9A50 ; =0x0220EA68 + mov r0, r5 + bl strcmp + cmp r0, #0 + bne _021F9424 + add r0, r7, #4 + mov r1, r6 + mov r2, r4 + bl FUN_021FB3DC + b _021F94F4 +_021F9424: + ldr r1, _021F9A54 ; =0x0220EA70 + mov r0, r5 + bl strcmp + cmp r0, #0 + bne _021F944C + ldr r2, [sp, #0x4c] + add r0, r7, #0x23 + mov r1, r6 + bl FUN_021FB3DC + b _021F94F4 +_021F944C: + ldr r1, _021F9A58 ; =0x0220EA7C + mov r0, r5 + bl strcmp + cmp r0, #0 + bne _021F9474 + add r0, r7, #0x38 + mov r1, r6 + mov r2, r4 + bl FUN_021FB3DC + b _021F94F4 +_021F9474: + ldr r1, _021F9A5C ; =0x0220EA88 + mov r0, r5 + bl strcmp + cmp r0, #0 + bne _021F949C + add r0, r7, #0x57 + mov r1, r6 + mov r2, r4 + bl FUN_021FB3DC + b _021F94F4 +_021F949C: + ldr r1, _021F9A60 ; =0x0220EA94 + mov r0, r5 + bl strcmp + cmp r0, #0 + bne _021F94C4 + ldr r2, [sp, #0x50] + add r0, r7, #0x76 + mov r1, r6 + bl FUN_021FB3DC + b _021F94F4 +_021F94C4: + ldr r1, _021F9A48 ; =0x0220EA64 + mov r0, r5 + bl strcmp + cmp r0, #0 + beq _021F94EC + ldr r1, _021F9A40 ; =0x0220EA54 + mov r0, r5 + bl strcmp + cmp r0, #0 + bne _021F94F4 +_021F94EC: + ldr r8, [sp, #0x3c] + str fp, [sp, #0x90] +_021F94F4: + cmp r8, #0 + beq _021F93D0 + b _021F9530 +_021F9500: + ldr r2, _021F9A64 ; =0x0220EA9C + mov r0, sl + mov r1, #1 + bl FUN_021FAF00 + mov r0, sl + mov r1, #3 + mov r2, #1 + bl FUN_021F3500 + ldr ip, _021F99B4 ; =0x000004EC + mov r0, #3 + add sp, sp, ip + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +_021F9530: + ldr r0, [sp, #0x20] + cmp r0, #0 + beq _021F92A8 + ldr r0, [sp, #0x1c] + ldr r4, [sp, #0xe4] + ldr r3, [r0, #0xc] + ldr r2, [r0, #0x10] + cmp r3, #0 + str r3, [sp, #0x94] + str r2, [sp, #0x98] + beq _021F9568 + add r1, sp, #0xdc + mov r0, sl + blx r3 +_021F9568: + cmp r4, #0x600 + bne _021F95EC + ldr r0, [sp, #0xe4] + cmp r0, #0x600 + bne _021F95EC + add r0, sb, #0x8f + str r0, [sp] + add r0, sb, #0xae + str r0, [sp, #4] + ldr r1, [sb, #0x130] + mov r0, sl + str r1, [sp, #8] + ldr r3, [sp, #0xe0] + ldr r2, [sb, #0x134] + add r1, sb, #0x28 + add r2, r3, r2 + str r2, [sp, #0xc] + ldr r2, [sp, #0x1c] + ldr r3, [r2, #8] + add r2, sb, #0x47 + str r3, [sp, #0x10] + ldr r3, [sp, #0x1c] + ldr r4, [r3, #0xc] + add r3, sb, #0x5c + str r4, [sp, #0x14] + ldr r4, [sp, #0x1c] + ldr r4, [r4, #0x10] + str r4, [sp, #0x18] + bl FUN_021FA770 + cmp r0, #0 + ldrne ip, _021F99B4 ; =0x000004EC + addne sp, sp, ip + ldmneia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +_021F95EC: + ldr r0, [sp, #0xe8] + bl FUN_021DD82C + mov r0, #0 + str r0, [sp, #0xe8] + b _021FA6F8 +_021F9600: + cmp r0, #2 + bne _021F972C + ldr r0, [sp, #0x1c] + ldr r1, [r0, #0xc] + ldr r0, [r0, #0x10] + cmp r1, #0 + str r1, [sp, #0xd4] + str r0, [sp, #0xd8] + beq _021FA6F8 + add r0, sp, #0x2ec + str r0, [sp] + ldr r1, [sb, #8] + add r2, sp, #0x90 + add r3, sp, #0xec + mov r0, sl + bl FUN_021FAF2C + cmp r0, #0 + ldrne ip, _021F99B4 ; =0x000004EC + addne sp, sp, ip + ldmneia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + ldr r1, _021F9A68 ; =0x0220EAC4 + add r0, sp, #0xec + bl strcmp + cmp r0, #0 + beq _021F9694 + ldr r2, _021F9A64 ; =0x0220EA9C + mov r0, sl + mov r1, #1 + bl FUN_021FAF00 + mov r0, sl + mov r1, #3 + mov r2, #1 + bl FUN_021F3500 + ldr ip, _021F99B4 ; =0x000004EC + mov r0, #3 + add sp, sp, ip + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +_021F9694: + mov r0, #0x3c + bl FUN_021DD860 + movs r4, r0 + bne _021F96C0 + ldr r1, _021F9A4C ; =0x0220E8A0 + mov r0, sl + bl FUN_021FAEEC + ldr ip, _021F99B4 ; =0x000004EC + mov r0, #1 + add sp, sp, ip + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +_021F96C0: + mov r0, #0 + str r0, [r4] + add r0, r4, #4 + add r1, sb, #0x5c + mov r2, #0x33 + bl FUN_021FB3DC + add r0, sp, #0x28c + ldrsb r0, [r0, #0x60] + add r1, sp, #0xd4 + mov r3, r4 + cmp r0, #0x30 + moveq r0, #0 + streq r0, [r4, #0x38] + movne r0, #1 + strne r0, [r4, #0x38] + ldr r0, [sp, #0x1c] + str r0, [sp] + mov r0, #0 + str r0, [sp, #4] + mov r0, sl + ldmia r1, {r1, r2} + bl FUN_021F3454 + cmp r0, #0 + beq _021FA6F8 + ldr ip, _021F99B4 ; =0x000004EC + add sp, sp, ip + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +_021F972C: + cmp r0, #3 + bne _021F9AFC + ldr r0, [sp, #0x1c] + ldr r1, [r0, #0xc] + ldr r0, [r0, #0x10] + cmp r1, #0 + str r1, [sp, #0xcc] + str r0, [sp, #0xd0] + beq _021FA6F8 + mov r0, #0x44 + bl FUN_021DD860 + movs r8, r0 + bne _021F977C + ldr r1, _021F9A4C ; =0x0220E8A0 + mov r0, sl + bl FUN_021FAEEC + ldr ip, _021F99B4 ; =0x000004EC + mov r0, #1 + add sp, sp, ip + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +_021F977C: + mov r2, #0 + add r0, r8, #4 + add r1, sb, #0x5c + str r2, [r8] + bl strcpy + mov r1, #0 + str r1, [r8, #0x38] + str r1, [r8, #0x3c] + add r0, sp, #0x2ec + str r1, [r8, #0x40] + str r0, [sp] + ldr r1, [sb, #8] + add r2, sp, #0x90 + add r3, sp, #0xec + mov r0, sl + bl FUN_021FAF2C + cmp r0, #0 + ldrne ip, _021F99B4 ; =0x000004EC + addne sp, sp, ip + ldmneia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + ldr r1, _021F9A6C ; =0x0220EAC8 + add r0, sp, #0xec + bl strcmp + cmp r0, #0 + beq _021F9810 + ldr r2, _021F9A64 ; =0x0220EA9C + mov r0, sl + mov r1, #1 + bl FUN_021FAF00 + mov r0, sl + mov r1, #3 + mov r2, #1 + bl FUN_021F3500 + ldr ip, _021F99B4 ; =0x000004EC + mov r0, #3 + add sp, sp, ip + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +_021F9810: + mov r0, #1 + mov r7, #0 + add r6, sp, #0xec + add fp, sp, #0x2ec + mov r5, #0x1f + mov r4, #0x15 + str r0, [sp, #0x54] +_021F982C: + str fp, [sp] + ldr r1, [sb, #8] + mov r0, sl + add r2, sp, #0x90 + mov r3, r6 + bl FUN_021FAF2C + cmp r0, #0 + ldrne ip, _021F99B4 ; =0x000004EC + addne sp, sp, ip + ldmneia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + ldr r1, _021F9A50 ; =0x0220EA68 + mov r0, r6 + bl strcmp + cmp r0, #0 + bne _021F9904 + ldr r0, [r8, #0x3c] + ldr r1, [r8, #0x38] + add r1, r1, #1 + mov r1, r1, lsl #2 + bl FUN_021DD844 + cmp r0, #0 + bne _021F98A0 + ldr r1, _021F9A4C ; =0x0220E8A0 + mov r0, sl + bl FUN_021FAEEC + ldr ip, _021F99B4 ; =0x000004EC + mov r0, #1 + add sp, sp, ip + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +_021F98A0: + str r0, [r8, #0x3c] + mov r0, r5 + bl FUN_021DD860 + cmp r0, #0 + bne _021F98D0 + ldr r1, _021F9A4C ; =0x0220E8A0 + mov r0, sl + bl FUN_021FAEEC + ldr ip, _021F99B4 ; =0x000004EC + mov r0, #1 + add sp, sp, ip + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +_021F98D0: + ldr r3, [r8, #0x3c] + ldr r2, [r8, #0x38] + mov r1, fp + str r0, [r3, r2, lsl #2] + ldr r3, [r8, #0x3c] + ldr r0, [r8, #0x38] + mov r2, r5 + ldr r0, [r3, r0, lsl #2] + bl FUN_021FB3DC + ldr r0, [r8, #0x38] + add r0, r0, #1 + str r0, [r8, #0x38] + b _021F9ABC +_021F9904: + ldr r1, _021F9A54 ; =0x0220EA70 + mov r0, r6 + bl strcmp + cmp r0, #0 + bne _021F9A74 + ldr r0, [r8, #0x38] + cmp r0, #0 + ble _021F9ABC + mov r1, r0, lsl #2 + ldr r0, [r8, #0x40] + bl FUN_021DD844 + cmp r0, #0 + bne _021F9954 + ldr r1, _021F9A4C ; =0x0220E8A0 + mov r0, sl + bl FUN_021FAEEC + ldr ip, _021F99B4 ; =0x000004EC + mov r0, #1 + add sp, sp, ip + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +_021F9954: + str r0, [r8, #0x40] + mov r0, r4 + bl FUN_021DD860 + cmp r0, #0 + bne _021F9984 + ldr r1, _021F9A4C ; =0x0220E8A0 + mov r0, sl + bl FUN_021FAEEC + ldr ip, _021F99B4 ; =0x000004EC + mov r0, #1 + add sp, sp, ip + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +_021F9984: + ldr r3, [r8, #0x40] + ldr r2, [r8, #0x38] + mov r1, fp + sub r2, r2, #1 + str r0, [r3, r2, lsl #2] + ldr r3, [r8, #0x40] + ldr r0, [r8, #0x38] + mov r2, r4 + sub r0, r0, #1 + ldr r0, [r3, r0, lsl #2] + bl FUN_021FB3DC + b _021F9ABC + .align 2, 0 +_021F99B4: .word 0x000004EC +_021F99B8: .word 0x0220E8DC +_021F99BC: .word 0x00000D01 +_021F99C0: .word 0x0220E8E0 +_021F99C4: .word 0x0220E90C +_021F99C8: .word 0x0220E918 +_021F99CC: .word 0x0220E924 +_021F99D0: .word 0x0220E930 +_021F99D4: .word 0x0220E940 +_021F99D8: .word 0x0220E948 +_021F99DC: .word 0x0220E958 +_021F99E0: .word 0x0220E960 +_021F99E4: .word 0x0220E96C +_021F99E8: .word 0x0220E978 +_021F99EC: .word 0x0220E984 +_021F99F0: .word 0x0220E98C +_021F99F4: .word 0x0220E994 +_021F99F8: .word 0x0220E99C +_021F99FC: .word 0x0220E9A4 +_021F9A00: .word 0x0220E9B0 +_021F9A04: .word 0x0220E9BC +_021F9A08: .word 0x0220E9C4 +_021F9A0C: .word 0x0220E9D0 +_021F9A10: .word 0x0220E9DC +_021F9A14: .word 0x0220E9E4 +_021F9A18: .word 0x0220E9F0 +_021F9A1C: .word 0x0220EA00 +_021F9A20: .word 0x0220EA10 +_021F9A24: .word 0x0220E8D0 +_021F9A28: .word 0x00000275 +_021F9A2C: .word 0x0220EA14 +_021F9A30: .word 0x02210EA0 +_021F9A34: .word 0x0220EA20 +_021F9A38: .word 0x0220EA28 +_021F9A3C: .word 0x00000601 +_021F9A40: .word 0x0220EA54 +_021F9A44: .word 0x0220EA5C +_021F9A48: .word 0x0220EA64 +_021F9A4C: .word 0x0220E8A0 +_021F9A50: .word 0x0220EA68 +_021F9A54: .word 0x0220EA70 +_021F9A58: .word 0x0220EA7C +_021F9A5C: .word 0x0220EA88 +_021F9A60: .word 0x0220EA94 +_021F9A64: .word 0x0220EA9C +_021F9A68: .word 0x0220EAC4 +_021F9A6C: .word 0x0220EAC8 +_021F9A70: .word 0x0220EACC +_021F9A74: + ldr r1, _021F9A70 ; =0x0220EACC + mov r0, r6 + bl strcmp + cmp r0, #0 + ldreq r7, [sp, #0x54] + beq _021F9ABC + ldr r2, _021F9A64 ; =0x0220EA9C + mov r0, sl + mov r1, #1 + bl FUN_021FAF00 + mov r0, sl + mov r1, #3 + mov r2, #1 + bl FUN_021F3500 + ldr ip, _021F99B4 ; =0x000004EC + mov r0, #3 + add sp, sp, ip + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +_021F9ABC: + cmp r7, #0 + beq _021F982C + ldr r0, [sp, #0x1c] + add r1, sp, #0xcc + str r0, [sp] + mov r0, #3 + str r0, [sp, #4] + mov r0, sl + mov r3, r8 + ldmia r1, {r1, r2} + bl FUN_021F3454 + cmp r0, #0 + beq _021FA6F8 + ldr ip, _021F99B4 ; =0x000004EC + add sp, sp, ip + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +_021F9AFC: + cmp r0, #4 + bne _021F9DE0 + ldr r0, [sp, #0x1c] + ldr r1, [r0, #0xc] + ldr r0, [r0, #0x10] + cmp r1, #0 + str r1, [sp, #0xc4] + str r0, [sp, #0xc8] + beq _021FA6F8 + mov r0, #0x10 + bl FUN_021DD860 + str r0, [sp, #0x28] + cmp r0, #0 + bne _021F9B50 + ldr r1, _021F9A4C ; =0x0220E8A0 + mov r0, sl + bl FUN_021FAEEC + ldr ip, _021F99B4 ; =0x000004EC + mov r0, #1 + add sp, sp, ip + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +_021F9B50: + mov r0, #0 + str r0, [sp, #0x34] + ldr r1, [sb, #0x138] + ldr r0, [sp, #0x28] + add r4, sp, #0xec + str r1, [r0, #4] + ldr r1, [sp, #0x34] + add r5, sp, #0x2ec + str r1, [r0] + str r1, [r0, #8] + str r1, [r0, #0xc] + mov r0, #0x1f + str r0, [sp, #0x68] + mov r0, #0x100 + str r0, [sp, #0x64] + mov r0, r1 + str r0, [sp, #0x58] + mov r0, #0x128 + str r0, [sp, #0x5c] + mov r0, r1 + mov fp, #1 + str r0, [sp, #0x60] +_021F9BA8: + str r5, [sp] + ldr r1, [sb, #8] + mov r0, sl + add r2, sp, #0x90 + mov r3, r4 + bl FUN_021FAF2C + cmp r0, #0 + ldrne ip, _021F99B4 ; =0x000004EC + addne sp, sp, ip + ldmneia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + ldr r1, _021FA72C ; =0x0220EAD4 + mov r0, r4 + bl strcmp + cmp r0, #0 + streq fp, [sp, #0x34] + beq _021F9D9C + ldr r1, _021FA730 ; =0x0220EADC + mov r0, r4 + bl strcmp + cmp r0, #0 + bne _021F9D6C + ldr r0, [sp, #0x28] + mov r2, #0x128 + ldr r0, [r0, #8] + add r1, r0, #1 + ldr r0, [sp, #0x28] + str r1, [r0, #8] + ldr r1, [sp, #0x28] + ldr r0, [r0, #0xc] + ldr r3, [r1, #8] + mul r1, r3, r2 + bl FUN_021DD844 + ldr r1, [sp, #0x28] + str r0, [r1, #0xc] + mov r0, r1 + ldr r6, [r0, #0xc] + cmp r6, #0 + bne _021F9C5C + ldr r1, _021F9A4C ; =0x0220E8A0 + mov r0, sl + bl FUN_021FAEEC + ldr ip, _021F99B4 ; =0x000004EC + mov r0, #1 + add sp, sp, ip + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +_021F9C5C: + ldr r1, [r0, #8] + mov r0, #0x128 + sub r1, r1, #1 + mul r7, r1, r0 + add r8, r6, r7 + ldr r1, [sp, #0x58] + ldr r2, [sp, #0x5c] + mov r0, r8 + bl Call_FillMemWithValue + mov r0, r5 + str fp, [r8, #0x24] + bl atol + str r0, [r6, r7] + ldr r7, [sp, #0x60] +_021F9C94: + ldr r6, [sp, #0x90] + mov r0, sl + str r5, [sp] + ldr r1, [sb, #8] + add r2, sp, #0x90 + mov r3, r4 + bl FUN_021FAF2C + cmp r0, #0 + ldrne ip, _021F99B4 ; =0x000004EC + addne sp, sp, ip + ldmneia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + ldr r1, _021FA734 ; =0x0220EAE0 + mov r0, r4 + bl strcmp + cmp r0, #0 + bne _021F9CE8 + ldr r2, [sp, #0x64] + add r0, r8, #0x28 + mov r1, r5 + bl FUN_021FB3DC + b _021F9D0C +_021F9CE8: + ldr r1, _021F9A50 ; =0x0220EA68 + mov r0, r4 + bl strcmp + cmp r0, #0 + bne _021F9D0C + ldr r2, [sp, #0x68] + add r0, r8, #4 + mov r1, r5 + bl FUN_021FB3DC +_021F9D0C: + ldr r1, _021FA738 ; =0x0220EAE8 + mov r0, r4 + bl strcmp + cmp r0, #0 + bne _021F9D30 + mov r0, r5 + bl atol + str r0, [r8, #0x24] + b _021F9D60 +_021F9D30: + ldr r1, _021FA730 ; =0x0220EADC + mov r0, r4 + bl strcmp + cmp r0, #0 + beq _021F9D58 + ldr r1, _021FA72C ; =0x0220EAD4 + mov r0, r4 + bl strcmp + cmp r0, #0 + bne _021F9D60 +_021F9D58: + str r6, [sp, #0x90] + mov r7, fp +_021F9D60: + cmp r7, #0 + beq _021F9C94 + b _021F9D9C +_021F9D6C: + ldr r2, _021F9A64 ; =0x0220EA9C + mov r0, sl + mov r1, #1 + bl FUN_021FAF00 + mov r0, sl + mov r1, #3 + mov r2, #1 + bl FUN_021F3500 + ldr ip, _021F99B4 ; =0x000004EC + mov r0, #3 + add sp, sp, ip + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +_021F9D9C: + ldr r0, [sp, #0x34] + cmp r0, #0 + beq _021F9BA8 + ldr r0, [sp, #0x1c] + ldr r3, [sp, #0x28] + str r0, [sp] + mov r0, #4 + str r0, [sp, #4] + add r1, sp, #0xc4 + mov r0, sl + ldmia r1, {r1, r2} + bl FUN_021F3454 + cmp r0, #0 + beq _021FA6F8 + ldr ip, _021F99B4 ; =0x000004EC + add sp, sp, ip + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +_021F9DE0: + cmp r0, #5 + bne _021F9F50 + ldr r0, [sp, #0x1c] + ldr r1, [r0, #0xc] + ldr r0, [r0, #0x10] + cmp r1, #0 + str r1, [sp, #0xbc] + str r0, [sp, #0xc0] + beq _021FA6F8 + add r0, sp, #0x2ec + str r0, [sp] + ldr r1, [sb, #8] + add r2, sp, #0x90 + add r3, sp, #0xec + mov r0, sl + bl FUN_021FAF2C + cmp r0, #0 + ldrne ip, _021F99B4 ; =0x000004EC + addne sp, sp, ip + ldmneia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + ldr r1, _021FA73C ; =0x0220EAF4 + add r0, sp, #0xec + bl strcmp + cmp r0, #0 + beq _021F9E74 + ldr r2, _021F9A64 ; =0x0220EA9C + mov r0, sl + mov r1, #1 + bl FUN_021FAF00 + mov r0, sl + mov r1, #3 + mov r2, #1 + bl FUN_021F3500 + ldr ip, _021F99B4 ; =0x000004EC + mov r0, #3 + add sp, sp, ip + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +_021F9E74: + add r0, sp, #0x2ec + bl atol + movs r5, r0 + ldrne r0, [sp, #0x24] + movne r4, #0 + strne r5, [r0, #0x418] + bne _021F9EE8 + ldr r0, [sb, #8] + ldr r1, _021FA740 ; =0x0220EAF8 + add r2, sp, #0x2ec + mov r3, #0x200 + bl FUN_021FB1F0 + cmp r0, #0 + bne _021F9EDC + ldr r2, _021F9A64 ; =0x0220EA9C + mov r0, sl + mov r1, #1 + bl FUN_021FAF00 + mov r0, sl + mov r1, #3 + mov r2, #1 + bl FUN_021F3500 + ldr ip, _021F99B4 ; =0x000004EC + mov r0, #3 + add sp, sp, ip + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +_021F9EDC: + add r0, sp, #0x2ec + bl atol + mov r4, r0 +_021F9EE8: + mov r0, #8 + bl FUN_021DD860 + movs r3, r0 + bne _021F9F14 + ldr r1, _021F9A4C ; =0x0220E8A0 + mov r0, sl + bl FUN_021FAEEC + ldr ip, _021F99B4 ; =0x000004EC + mov r0, #1 + add sp, sp, ip + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +_021F9F14: + str r5, [r3] + ldr r0, [sp, #0x1c] + str r4, [r3, #4] + str r0, [sp] + mov r0, #0 + str r0, [sp, #4] + add r1, sp, #0xbc + mov r0, sl + ldmia r1, {r1, r2} + bl FUN_021F3454 + cmp r0, #0 + beq _021FA6F8 + ldr ip, _021F99B4 ; =0x000004EC + add sp, sp, ip + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +_021F9F50: + cmp r0, #6 + bne _021FA0C8 + ldr r0, [sp, #0x1c] + ldr r1, [r0, #0xc] + ldr r0, [r0, #0x10] + cmp r1, #0 + str r1, [sp, #0xb4] + str r0, [sp, #0xb8] + beq _021FA6F8 + add r0, sp, #0x2ec + str r0, [sp] + ldr r1, [sb, #8] + add r2, sp, #0x90 + add r3, sp, #0xec + mov r0, sl + bl FUN_021FAF2C + cmp r0, #0 + ldrne ip, _021F99B4 ; =0x000004EC + addne sp, sp, ip + ldmneia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + ldr r1, _021FA744 ; =0x0220EB00 + add r0, sp, #0xec + bl strcmp + cmp r0, #0 + beq _021F9FE4 + ldr r2, _021F9A64 ; =0x0220EA9C + mov r0, sl + mov r1, #1 + bl FUN_021FAF00 + mov r0, sl + mov r1, #3 + mov r2, #1 + bl FUN_021F3500 + ldr ip, _021F99B4 ; =0x000004EC + mov r0, #3 + add sp, sp, ip + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +_021F9FE4: + add r0, sp, #0x2ec + bl atol + movs r5, r0 + ldrne r0, [sp, #0x24] + ldr r1, _021FA740 ; =0x0220EAF8 + strne r5, [r0, #0x418] + ldr r0, [sb, #8] + add r2, sp, #0x2ec + mov r3, #0x200 + bl FUN_021FB1F0 + cmp r0, #0 + bne _021FA054 + cmp r5, #0 + bne _021FA04C + ldr r2, _021F9A64 ; =0x0220EA9C + mov r0, sl + mov r1, #1 + bl FUN_021FAF00 + mov r0, sl + mov r1, #3 + mov r2, #1 + bl FUN_021F3500 + ldr ip, _021F99B4 ; =0x000004EC + mov r0, #3 + add sp, sp, ip + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +_021FA04C: + mov r4, #0 + b _021FA060 +_021FA054: + add r0, sp, #0x2ec + bl atol + mov r4, r0 +_021FA060: + mov r0, #8 + bl FUN_021DD860 + movs r3, r0 + bne _021FA08C + ldr r1, _021F9A4C ; =0x0220E8A0 + mov r0, sl + bl FUN_021FAEEC + ldr ip, _021F99B4 ; =0x000004EC + mov r0, #1 + add sp, sp, ip + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +_021FA08C: + str r5, [r3] + ldr r0, [sp, #0x1c] + str r4, [r3, #4] + str r0, [sp] + mov r0, #0 + str r0, [sp, #4] + add r1, sp, #0xb4 + mov r0, sl + ldmia r1, {r1, r2} + bl FUN_021F3454 + cmp r0, #0 + beq _021FA6F8 + ldr ip, _021F99B4 ; =0x000004EC + add sp, sp, ip + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +_021FA0C8: + cmp r0, #7 + bne _021FA474 + ldr r0, [sp, #0x1c] + ldr r1, [r0, #0xc] + ldr r0, [r0, #0x10] + cmp r1, #0 + str r1, [sp, #0xac] + str r0, [sp, #0xb0] + beq _021FA6F8 + mov r0, #0xc + bl FUN_021DD860 + str r0, [sp, #0x2c] + cmp r0, #0 + bne _021FA11C + ldr r1, _021F9A4C ; =0x0220E8A0 + mov r0, sl + bl FUN_021FAEEC + ldr ip, _021F99B4 ; =0x000004EC + mov r0, #1 + add sp, sp, ip + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +_021FA11C: + mov r2, #0 + str r2, [r0] + str r2, [r0, #4] + str r2, [r0, #8] + add r1, sp, #0x2ec + str r1, [sp] + ldr r1, [sb, #8] + add r2, sp, #0x90 + add r3, sp, #0xec + mov r0, sl + bl FUN_021FAF2C + cmp r0, #0 + ldrne ip, _021F99B4 ; =0x000004EC + addne sp, sp, ip + ldmneia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + ldr r1, _021FA748 ; =0x0220EB04 + add r0, sp, #0xec + bl strcmp + cmp r0, #0 + beq _021FA19C + ldr r2, _021F9A64 ; =0x0220EA9C + mov r0, sl + mov r1, #1 + bl FUN_021FAF00 + mov r0, sl + mov r1, #3 + mov r2, #1 + bl FUN_021F3500 + ldr ip, _021F99B4 ; =0x000004EC + mov r0, #3 + add sp, sp, ip + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +_021FA19C: + mov r0, #0 + str r0, [sp, #0x30] + mov r0, #1 + str r0, [sp, #0x6c] + mov r0, #0x33 + str r0, [sp, #0x80] + mov r0, #0x15 + str r0, [sp, #0x7c] + ldr r0, [sp, #0x30] + add r5, sp, #0xec + str r0, [sp, #0x70] + mov r0, #0xac + str r0, [sp, #0x74] + ldr r0, [sp, #0x30] + add r6, sp, #0x2ec + mov r4, #0x1f + str r0, [sp, #0x78] +_021FA1E0: + str r6, [sp] + ldr r1, [sb, #8] + mov r0, sl + add r2, sp, #0x90 + mov r3, r5 + bl FUN_021FAF2C + cmp r0, #0 + ldrne ip, _021F99B4 ; =0x000004EC + addne sp, sp, ip + ldmneia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + ldr r1, _021FA74C ; =0x0220EB0C + mov r0, r5 + bl strcmp + cmp r0, #0 + ldreq r0, [sp, #0x6c] + streq r0, [sp, #0x30] + beq _021FA430 + ldr r1, _021FA750 ; =0x0220EB14 + mov r0, r5 + bl strcmp + cmp r0, #0 + bne _021FA400 + ldr r1, [sp, #0x2c] + ldr r0, [sp, #0x2c] + ldr r2, [r1, #4] + mov r1, #0xac + add r2, r2, #1 + mul r1, r2, r1 + ldr r0, [r0, #8] + bl FUN_021DD844 + cmp r0, #0 + bne _021FA27C + ldr r1, _021F9A4C ; =0x0220E8A0 + mov r0, sl + bl FUN_021FAEEC + ldr ip, _021F99B4 ; =0x000004EC + mov r0, #1 + add sp, sp, ip + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +_021FA27C: + ldr r1, [sp, #0x2c] + ldr r2, [sp, #0x74] + str r0, [r1, #8] + mov r0, r1 + ldr r1, [r0, #4] + ldr r7, [r0, #8] + mov r0, #0xac + mul fp, r1, r0 + add r8, r7, fp + ldr r1, [sp, #0x70] + mov r0, r8 + bl Call_FillMemWithValue + ldr r0, [sp, #0x2c] + ldr r1, [r0, #4] + mov r0, r6 + add r2, r1, #1 + ldr r1, [sp, #0x2c] + str r2, [r1, #4] + bl atol + str r0, [r7, fp] + ldr r7, [sp, #0x78] +_021FA2D0: + ldr fp, [sp, #0x90] + mov r0, sl + str r6, [sp] + ldr r1, [sb, #8] + add r2, sp, #0x90 + mov r3, r5 + bl FUN_021FAF2C + cmp r0, #0 + ldrne ip, _021F99B4 ; =0x000004EC + addne sp, sp, ip + ldmneia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + ldr r1, _021F9A50 ; =0x0220EA68 + mov r0, r5 + bl strcmp + cmp r0, #0 + bne _021FA324 + add r0, r8, #4 + mov r1, r6 + mov r2, r4 + bl FUN_021FB3DC + b _021FA3F4 +_021FA324: + ldr r1, _021F9A54 ; =0x0220EA70 + mov r0, r5 + bl strcmp + cmp r0, #0 + bne _021FA34C + ldr r2, [sp, #0x7c] + add r0, r8, #0x23 + mov r1, r6 + bl FUN_021FB3DC + b _021FA3F4 +_021FA34C: + ldr r1, _021FA754 ; =0x0220EB18 + mov r0, r5 + bl strcmp + cmp r0, #0 + bne _021FA374 + add r0, r8, #0x38 + mov r1, r6 + mov r2, r4 + bl FUN_021FB3DC + b _021FA3F4 +_021FA374: + ldr r1, _021FA758 ; =0x0220EB20 + mov r0, r5 + bl strcmp + cmp r0, #0 + bne _021FA39C + add r0, r8, #0x57 + mov r1, r6 + mov r2, r4 + bl FUN_021FB3DC + b _021FA3F4 +_021FA39C: + ldr r1, _021F9A60 ; =0x0220EA94 + mov r0, r5 + bl strcmp + cmp r0, #0 + bne _021FA3C4 + ldr r2, [sp, #0x80] + add r0, r8, #0x76 + mov r1, r6 + bl FUN_021FB3DC + b _021FA3F4 +_021FA3C4: + ldr r1, _021FA750 ; =0x0220EB14 + mov r0, r5 + bl strcmp + cmp r0, #0 + beq _021FA3EC + ldr r1, _021FA74C ; =0x0220EB0C + mov r0, r5 + bl strcmp + cmp r0, #0 + bne _021FA3F4 +_021FA3EC: + ldr r7, [sp, #0x6c] + str fp, [sp, #0x90] +_021FA3F4: + cmp r7, #0 + beq _021FA2D0 + b _021FA430 +_021FA400: + ldr r2, _021F9A64 ; =0x0220EA9C + mov r0, sl + mov r1, #1 + bl FUN_021FAF00 + mov r0, sl + mov r1, #3 + mov r2, #1 + bl FUN_021F3500 + ldr ip, _021F99B4 ; =0x000004EC + mov r0, #3 + add sp, sp, ip + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +_021FA430: + ldr r0, [sp, #0x30] + cmp r0, #0 + beq _021FA1E0 + ldr r0, [sp, #0x1c] + ldr r3, [sp, #0x2c] + str r0, [sp] + mov r0, #8 + str r0, [sp, #4] + add r1, sp, #0xac + mov r0, sl + ldmia r1, {r1, r2} + bl FUN_021F3454 + cmp r0, #0 + beq _021FA6F8 + ldr ip, _021F99B4 ; =0x000004EC + add sp, sp, ip + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +_021FA474: + cmp r0, #8 + bne _021FA6E4 + ldr r0, [sp, #0x1c] + ldr r1, [r0, #0xc] + ldr r0, [r0, #0x10] + cmp r1, #0 + str r1, [sp, #0xa4] + str r0, [sp, #0xa8] + beq _021FA6F8 + mov r0, #0xc + mov r8, #0 + bl FUN_021DD860 + movs r7, r0 + bne _021FA4C8 + ldr r1, _021F9A4C ; =0x0220E8A0 + mov r0, sl + bl FUN_021FAEEC + ldr ip, _021F99B4 ; =0x000004EC + mov r0, #1 + add sp, sp, ip + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +_021FA4C8: + mov r1, r8 + str r1, [r7] + str r1, [r7, #4] + add r0, sp, #0x2ec + str r1, [r7, #8] + str r0, [sp] + ldr r1, [sb, #8] + add r2, sp, #0x90 + add r3, sp, #0xec + mov r0, sl + bl FUN_021FAF2C + cmp r0, #0 + ldrne ip, _021F99B4 ; =0x000004EC + addne sp, sp, ip + ldmneia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + ldr r1, _021FA75C ; =0x0220EB28 + add r0, sp, #0xec + bl strcmp + cmp r0, #0 + beq _021FA548 + ldr r2, _021F9A64 ; =0x0220EA9C + mov r0, sl + mov r1, #1 + bl FUN_021FAF00 + mov r0, sl + mov r1, #3 + mov r2, #1 + bl FUN_021F3500 + ldr ip, _021F99B4 ; =0x000004EC + mov r0, #3 + add sp, sp, ip + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +_021FA548: + add r0, sp, #0x2ec + bl atol + str r0, [r7, #4] + ldr r0, [r7, #4] + mov r0, r0, lsl #2 + bl FUN_021DD860 + str r0, [r7, #8] + ldr r0, [r7, #8] + cmp r0, #0 + bne _021FA58C + ldr r1, _021F9A4C ; =0x0220E8A0 + mov r0, sl + bl FUN_021FAEEC + ldr ip, _021F99B4 ; =0x000004EC + mov r0, #1 + add sp, sp, ip + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +_021FA58C: + mov r6, r8 + mov r0, #1 + add r5, sp, #0xec + add fp, sp, #0x2ec + mov r4, #0x15 + str r6, [sp, #0x84] + str r0, [sp, #0x88] +_021FA5A8: + str fp, [sp] + ldr r1, [sb, #8] + mov r0, sl + add r2, sp, #0x90 + mov r3, r5 + bl FUN_021FAF2C + cmp r0, #0 + ldrne ip, _021F99B4 ; =0x000004EC + addne sp, sp, ip + ldmneia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + ldr r1, _021F9A50 ; =0x0220EA68 + mov r0, r5 + bl strcmp + cmp r0, #0 + bne _021FA634 + mov r0, r4 + bl FUN_021DD860 + ldr r1, [r7, #8] + str r0, [r1, r8, lsl #2] + ldr r0, [r7, #8] + ldr r0, [r0, r8, lsl #2] + cmp r0, #0 + bne _021FA620 + ldr r1, _021F9A4C ; =0x0220E8A0 + mov r0, sl + bl FUN_021FAEEC + ldr ip, _021F99B4 ; =0x000004EC + mov r0, #1 + add sp, sp, ip + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +_021FA620: + mov r1, fp + mov r2, r4 + bl FUN_021FB3DC + add r8, r8, #1 + b _021FA6A4 +_021FA634: + ldr r1, _021FA760 ; =0x0220EB2C + mov r0, r5 + bl strcmp + cmp r0, #0 + bne _021FA674 + ldr r0, [r7, #4] + cmp r8, r0 + beq _021FA668 + ldr r0, _021FA764 ; =0x0220EB34 + ldr r1, _021F9A24 ; =0x0220E8D0 + ldr r2, [sp, #0x84] + ldr r3, _021FA768 ; =0x00000515 + bl __msl_assertion_failed +_021FA668: + str r8, [r7, #4] + ldr r6, [sp, #0x88] + b _021FA6A4 +_021FA674: + ldr r2, _021F9A64 ; =0x0220EA9C + mov r0, sl + mov r1, #1 + bl FUN_021FAF00 + mov r0, sl + mov r1, #3 + mov r2, #1 + bl FUN_021F3500 + ldr ip, _021F99B4 ; =0x000004EC + mov r0, #3 + add sp, sp, ip + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +_021FA6A4: + cmp r6, #0 + beq _021FA5A8 + ldr r0, [sp, #0x1c] + add r1, sp, #0xa4 + str r0, [sp] + mov r0, #9 + str r0, [sp, #4] + mov r0, sl + mov r3, r7 + ldmia r1, {r1, r2} + bl FUN_021F3454 + cmp r0, #0 + beq _021FA6F8 + ldr ip, _021F99B4 ; =0x000004EC + add sp, sp, ip + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +_021FA6E4: + ldr r0, _021F9A20 ; =0x0220EA10 + ldr r1, _021F9A24 ; =0x0220E8D0 + ldr r3, _021FA76C ; =0x0000052A + mov r2, #0 + bl __msl_assertion_failed +_021FA6F8: + mov r0, #1 + str r0, [sb, #0x140] + mov r4, #0 +_021FA704: + cmp r4, #0 + beq _021FA714 + mov r0, #0xa + bl FUN_021F0250 +_021FA714: + cmp r4, #0 + bne _021F8B04 + mov r0, #0 + ldr ip, _021F99B4 ; =0x000004EC + add sp, sp, ip + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_021FA72C: .word 0x0220EAD4 +_021FA730: .word 0x0220EADC +_021FA734: .word 0x0220EAE0 +_021FA738: .word 0x0220EAE8 +_021FA73C: .word 0x0220EAF4 +_021FA740: .word 0x0220EAF8 +_021FA744: .word 0x0220EB00 +_021FA748: .word 0x0220EB04 +_021FA74C: .word 0x0220EB0C +_021FA750: .word 0x0220EB14 +_021FA754: .word 0x0220EB18 +_021FA758: .word 0x0220EB20 +_021FA75C: .word 0x0220EB28 +_021FA760: .word 0x0220EB2C +_021FA764: .word 0x0220EB34 +_021FA768: .word 0x00000515 +_021FA76C: .word 0x0000052A + + arm_func_start FUN_021FA770 +FUN_021FA770: ; 0x021FA770 + stmdb sp!, {r4, r5, r6, r7, r8, sb, lr} + sub sp, sp, #0xc + movs r8, r1 + mov sb, r0 + mov r7, r2 + mov r6, r3 + ldr r5, [sp, #0x28] + ldr r4, [sp, #0x2c] + beq _021FA7A0 + ldrsb r0, [r8] + cmp r0, #0 + bne _021FA814 +_021FA7A0: + cmp r6, #0 + beq _021FA7B4 + ldrsb r0, [r6] + cmp r0, #0 + bne _021FA814 +_021FA7B4: + cmp r5, #0 + beq _021FA7C8 + ldrsb r0, [r5] + cmp r0, #0 + bne _021FA814 +_021FA7C8: + cmp r4, #0 + beq _021FA7DC + ldrsb r0, [r4] + cmp r0, #0 + bne _021FA814 +_021FA7DC: + ldr r0, [sp, #0x30] + cmp r0, #0 + bne _021FA814 + cmp r7, #0 + beq _021FA7FC + ldrsb r0, [r7] + cmp r0, #0 + bne _021FA814 +_021FA7FC: + ldr r1, _021FA958 ; =0x0220EB54 + mov r0, sb + bl FUN_021FAEEC + add sp, sp, #0xc + mov r0, #2 + ldmia sp!, {r4, r5, r6, r7, r8, sb, pc} +_021FA814: + add r1, sp, #4 + mov r0, sb + mov r2, #1 + bl FUN_021FA9F0 + cmp r0, #0 + addne sp, sp, #0xc + ldmneia sp!, {r4, r5, r6, r7, r8, sb, pc} + cmp r8, #0 + ldreq r0, [sp, #4] + moveq r1, #0 + streqb r1, [r0, #0x28] + beq _021FA858 + ldr r0, [sp, #4] + mov r1, r8 + add r0, r0, #0x28 + mov r2, #0x1f + bl FUN_021FB3DC +_021FA858: + cmp r7, #0 + ldreq r0, [sp, #4] + moveq r1, #0 + streqb r1, [r0, #0x47] + beq _021FA880 + ldr r0, [sp, #4] + mov r1, r7 + add r0, r0, #0x47 + mov r2, #0x15 + bl FUN_021FB3DC +_021FA880: + cmp r6, #0 + ldreq r0, [sp, #4] + moveq r1, #0 + streqb r1, [r0, #0x5c] + beq _021FA8A8 + ldr r0, [sp, #4] + mov r1, r6 + add r0, r0, #0x5c + mov r2, #0x33 + bl FUN_021FB3DC +_021FA8A8: + ldr r0, [sp, #4] + add r0, r0, #0x5c + bl FUN_021F01C4 + cmp r5, #0 + ldreq r0, [sp, #4] + moveq r1, #0 + streqb r1, [r0, #0x8f] + beq _021FA8DC + ldr r0, [sp, #4] + mov r1, r5 + add r0, r0, #0x8f + mov r2, #0x1f + bl FUN_021FB3DC +_021FA8DC: + cmp r4, #0 + ldreq r0, [sp, #4] + moveq r1, #0 + streqb r1, [r0, #0xae] + beq _021FA904 + ldr r0, [sp, #4] + mov r1, r4 + add r0, r0, #0xae + mov r2, #0x1f + bl FUN_021FB3DC +_021FA904: + ldr r0, [sp, #0x34] + ldr r2, [sp, #0x30] + ldr r1, [sp, #4] + cmp r0, #0 + movlt r0, #0 + strlt r0, [sp, #0x34] + str r2, [r1, #0x130] + ldr r2, [sp, #0x34] + ldr r1, [sp, #4] + ldr r0, [sp, #0x40] + str r2, [r1, #0x134] + str r0, [sp] + ldr r1, [sp, #4] + ldr r2, [sp, #0x38] + ldr r3, [sp, #0x3c] + mov r0, sb + bl FUN_021FA95C + cmp r0, #0 + moveq r0, #0 + add sp, sp, #0xc + ldmia sp!, {r4, r5, r6, r7, r8, sb, pc} + .align 2, 0 +_021FA958: .word 0x0220EB54 + + arm_func_start FUN_021FA95C +FUN_021FA95C: ; 0x021FA95C + stmdb sp!, {r4, r5, lr} + sub sp, sp, #0x14 + mov r5, r0 + ldr r4, [r5] + ldr ip, [sp, #0x20] + ldr lr, [r4, #0x210] + add lr, lr, #1 + str lr, [r4, #0x210] + str r2, [sp] + str r3, [sp, #4] + mov r2, r1 + add r3, sp, #0xc + mov r1, #3 + str ip, [sp, #8] + bl FUN_021F6D8C + cmp r0, #0 + addne sp, sp, #0x14 + ldmneia sp!, {r4, r5, pc} + ldr r1, [sp, #0xc] + mov r0, r5 + bl FUN_021FAAB4 + cmp r0, #0 + addne sp, sp, #0x14 + ldmneia sp!, {r4, r5, pc} + ldr r1, [sp, #0xc] + ldr r0, [r1, #8] + cmp r0, #0 + beq _021FA9E4 + ldr r1, [r1, #0x18] + mov r0, r5 + bl FUN_021F0FD4 + cmp r0, #0 + addne sp, sp, #0x14 + ldmneia sp!, {r4, r5, pc} +_021FA9E4: + mov r0, #0 + add sp, sp, #0x14 + ldmia sp!, {r4, r5, pc} + + arm_func_start FUN_021FA9F0 +FUN_021FA9F0: ; 0x021FA9F0 + stmdb sp!, {r4, r5, r6, r7, lr} + sub sp, sp, #4 + mov r6, r0 + mov r0, #0x144 + mov r5, r1 + mov r7, r2 + bl FUN_021DD860 + movs r4, r0 + bne _021FAA2C + ldr r1, _021FAAB0 ; =0x0220E8A0 + mov r0, r6 + bl FUN_021FAEEC + add sp, sp, #4 + mov r0, #1 + ldmia sp!, {r4, r5, r6, r7, pc} +_021FAA2C: + mov r1, #0 + mov r2, #0x144 + bl Call_FillMemWithValue + str r7, [r4] + mvn r0, #0 + str r0, [r4, #4] + mov r0, #0 + str r0, [r4, #8] + str r0, [r4, #0x10] + str r0, [r4, #0x14] + str r0, [r4, #0xc] + str r0, [r4, #0x20] + str r0, [r4, #0x24] + mov r0, #0x1000 + str r0, [r4, #0x1c] + ldr r0, [r4, #0x1c] + add r0, r0, #1 + bl FUN_021DD860 + str r0, [r4, #0x18] + ldr r0, [r4, #0x18] + cmp r0, #0 + movne r0, #0 + strne r0, [r4, #0x13c] + strne r0, [r4, #0x140] + addne sp, sp, #4 + strne r4, [r5] + ldmneia sp!, {r4, r5, r6, r7, pc} + ldr r1, _021FAAB0 ; =0x0220E8A0 + mov r0, r6 + bl FUN_021FAEEC + mov r0, #1 + add sp, sp, #4 + ldmia sp!, {r4, r5, r6, r7, pc} + .align 2, 0 +_021FAAB0: .word 0x0220E8A0 + + arm_func_start FUN_021FAAB4 +FUN_021FAAB4: ; 0x021FAAB4 + stmdb sp!, {r4, r5, r6, lr} + sub sp, sp, #8 + mov r5, r1 + ldr r4, [r5, #4] + mov r1, #0x1000 + str r1, [r4, #0xc] + ldr r1, [r4, #0xc] + mov r6, r0 + add r0, r1, #1 + bl FUN_021DD860 + str r0, [r4, #8] + ldr r0, [r4, #8] + cmp r0, #0 + bne _021FAB04 + ldr r1, _021FAC9C ; =0x0220E8A0 + mov r0, r6 + bl FUN_021FAEEC + add sp, sp, #8 + mov r0, #1 + ldmia sp!, {r4, r5, r6, pc} +_021FAB04: + mov r0, #2 + mov r1, #1 + mov r2, #0 + bl FUN_021EFDB8 + str r0, [r4, #4] + ldr r0, [r4, #4] + mvn r1, #0 + cmp r0, r1 + bne _021FAB54 + ldr r2, _021FACA0 ; =0x0220EB68 + mov r0, r6 + mov r1, #5 + bl FUN_021FAF00 + mov r0, r6 + mov r1, #3 + mov r2, #1 + bl FUN_021F3500 + add sp, sp, #8 + mov r0, #3 + ldmia sp!, {r4, r5, r6, pc} +_021FAB54: + mov r1, #0 + bl FUN_021F017C + cmp r0, #0 + bne _021FAB90 + ldr r2, _021FACA4 ; =0x0220EB90 + mov r0, r6 + mov r1, #5 + bl FUN_021FAF00 + mov r0, r6 + mov r1, #3 + mov r2, #1 + bl FUN_021F3500 + add sp, sp, #8 + mov r0, #3 + ldmia sp!, {r4, r5, r6, pc} +_021FAB90: + ldr r0, _021FACA8 ; =0x0220E860 + bl FUN_0209A6EC + cmp r0, #0 + bne _021FABCC + ldr r2, _021FACAC ; =0x0220EBC4 + mov r0, r6 + mov r1, #5 + bl FUN_021FAF00 + mov r0, r6 + mov r1, #3 + mov r2, #1 + bl FUN_021F3500 + add sp, sp, #8 + mov r0, #3 + ldmia sp!, {r4, r5, r6, pc} +_021FABCC: + add r1, sp, #0 + mov r2, #0 + str r2, [r1] + str r2, [r1, #4] + mov r1, #2 + strb r1, [sp, #1] + ldr r0, [r0, #0xc] + ldr r0, [r0] + ldr r0, [r0] + str r0, [sp, #4] + cmp r0, #0 + bne _021FAC0C + ldr r0, _021FACB0 ; =0x0220EBF4 + ldr r1, _021FACB4 ; =0x0220E8D0 + mov r3, #0x59 + bl __msl_assertion_failed +_021FAC0C: + ldr r0, _021FACB8 ; =0x0000CD74 + add r1, sp, #0 + strh r0, [sp, #2] + ldr r0, [r4, #4] + mov r2, #8 + bl FUN_021EFCE4 + mvn r1, #0 + cmp r0, r1 + bne _021FAC88 + ldr r0, [r4, #4] + bl FUN_021EFB28 + mvn r1, #5 + cmp r0, r1 + beq _021FAC88 + mvn r1, #0x19 + cmp r0, r1 + beq _021FAC88 + mvn r1, #0x4b + cmp r0, r1 + beq _021FAC88 + ldr r2, _021FACBC ; =0x0220EC14 + mov r0, r6 + mov r1, #5 + bl FUN_021FAF00 + mov r0, r6 + mov r1, #3 + mov r2, #1 + bl FUN_021F3500 + add sp, sp, #8 + mov r0, #3 + ldmia sp!, {r4, r5, r6, pc} +_021FAC88: + mov r0, #1 + str r0, [r5, #0x14] + mov r0, #0 + add sp, sp, #8 + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +_021FAC9C: .word 0x0220E8A0 +_021FACA0: .word 0x0220EB68 +_021FACA4: .word 0x0220EB90 +_021FACA8: .word 0x0220E860 +_021FACAC: .word 0x0220EBC4 +_021FACB0: .word 0x0220EBF4 +_021FACB4: .word 0x0220E8D0 +_021FACB8: .word 0x0000CD74 +_021FACBC: .word 0x0220EC14 + + arm_func_start FUN_021FACC0 +FUN_021FACC0: ; 0x021FACC0 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #0x54 + mov r4, r1 + mov r5, r0 + mov r0, r3 + ldr r1, _021FAD3C ; =0x0220EC3C + add r2, sp, #4 + mov r3, #0x40 + bl FUN_021FB1F0 + cmp r0, #0 + addeq sp, sp, #0x54 + ldmeqia sp!, {r4, r5, pc} + ldr r1, _021FAD40 ; =0x0220EC44 + add ip, sp, #0x4c + add r0, sp, #4 + add r2, sp, #0x44 + add r3, sp, #0x48 + str ip, [sp] + bl sscanf + cmp r0, #3 + addne sp, sp, #0x54 + ldmneia sp!, {r4, r5, pc} + mov ip, #0 + add r1, sp, #0x44 + mov r0, r5 + mov r2, r4 + mov r3, #2 + str ip, [sp] + bl FUN_021FAD44 + add sp, sp, #0x54 + ldmia sp!, {r4, r5, pc} + .align 2, 0 +_021FAD3C: .word 0x0220EC3C +_021FAD40: .word 0x0220EC44 + + arm_func_start FUN_021FAD44 +FUN_021FAD44: ; 0x021FAD44 + stmdb sp!, {r4, r5, r6, lr} + sub sp, sp, #0x20 + ldr ip, [sp, #0x30] + mov r5, r2 + mov r6, r0 + cmp ip, #0 + ldreq r0, _021FADE0 ; =0x0220EC50 + mov lr, r1 + mov r4, r3 + streq r0, [sp, #0x30] + mov r0, r6 + mov r1, r5 + mov r3, lr + mov r2, #0xc9 + bl FUN_021F726C + cmp r0, #0 + addne sp, sp, #0x20 + ldmneia sp!, {r4, r5, r6, pc} + ldr r1, _021FADE4 ; =0x0220EC54 + add r0, sp, #0 + mov r3, r4 + mov r2, #1 + bl sprintf + add r2, sp, #0 + mov r0, r6 + mov r1, r5 + bl FUN_021F2C58 + cmp r0, #0 + addne sp, sp, #0x20 + ldmneia sp!, {r4, r5, r6, pc} + ldr r2, [sp, #0x30] + mov r0, r6 + mov r1, r5 + mvn r3, #0 + bl FUN_021F7184 + cmp r0, #0 + moveq r0, #0 + add sp, sp, #0x20 + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +_021FADE0: .word 0x0220EC50 +_021FADE4: .word 0x0220EC54 + + arm_func_start FUN_021FADE8 +FUN_021FADE8: ; 0x021FADE8 + stmdb sp!, {r4, r5, r6, lr} + sub sp, sp, #0x10 + mov r4, r2 + mov r5, r1 + mov r1, r4 + mov r2, #1 + mov r6, r0 + bl FUN_021FB2F8 + cmp r0, #0 + addne sp, sp, #0x10 + movne r0, #4 + ldmneia sp!, {r4, r5, r6, pc} + ldr r1, _021FAEE0 ; =0x0220EC6C + mov r0, r4 + mov r2, #4 + bl strncmp + cmp r0, #0 + beq _021FAE5C + ldr r2, _021FAEE4 ; =0x0220EC74 + mov r0, r6 + mov r1, #1 + bl FUN_021FAF00 + mov r0, r6 + mov r1, #3 + mov r2, #1 + bl FUN_021F3500 + add sp, sp, #0x10 + mov r0, #3 + ldmia sp!, {r4, r5, r6, pc} +_021FAE5C: + ldr r1, [r5, #0xc] + ldr r0, [r5, #0x10] + cmp r1, #0 + str r1, [sp, #8] + str r0, [sp, #0xc] + beq _021FAEC8 + mov r0, #4 + bl FUN_021DD860 + movs r3, r0 + bne _021FAE9C + ldr r1, _021FAEE8 ; =0x0220ECA4 + mov r0, r6 + bl FUN_021FAEEC + add sp, sp, #0x10 + mov r0, #1 + ldmia sp!, {r4, r5, r6, pc} +_021FAE9C: + mov r0, #0 + str r0, [r3] + str r5, [sp] + str r0, [sp, #4] + add r1, sp, #8 + mov r0, r6 + ldmia r1, {r1, r2} + bl FUN_021F3454 + cmp r0, #0 + addne sp, sp, #0x10 + ldmneia sp!, {r4, r5, r6, pc} +_021FAEC8: + mov r0, r6 + mov r1, r5 + bl FUN_021F6C84 + mov r0, #0 + add sp, sp, #0x10 + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +_021FAEE0: .word 0x0220EC6C +_021FAEE4: .word 0x0220EC74 +_021FAEE8: .word 0x0220ECA4 + + arm_func_start FUN_021FAEEC +FUN_021FAEEC: ; 0x021FAEEC + ldr ip, _021FAEFC ; =FUN_021FB3DC + ldr r0, [r0] + mov r2, #0x100 + bx ip + .align 2, 0 +_021FAEFC: .word FUN_021FB3DC + + arm_func_start FUN_021FAF00 +FUN_021FAF00: ; 0x021FAF00 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #4 + ldr r4, [r0] + mov r5, r1 + mov r1, r2 + mov r0, r4 + mov r2, #0x100 + bl FUN_021FB3DC + str r5, [r4, #0x418] + add sp, sp, #4 + ldmia sp!, {r4, r5, pc} + + arm_func_start FUN_021FAF2C +FUN_021FAF2C: ; 0x021FAF2C + stmdb sp!, {r4, r5, r6, r7, r8, lr} + movs r7, r1 + mov r8, r0 + mov r6, r2 + mov r5, r3 + ldr r4, [sp, #0x18] + bne _021FAF5C + ldr r0, _021FB0D8 ; =0x0220ECB4 + ldr r1, _021FB0DC ; =0x0220ECC4 + ldr r3, _021FB0E0 ; =0x00000199 + mov r2, #0 + bl __msl_assertion_failed +_021FAF5C: + cmp r5, #0 + bne _021FAF78 + ldr r0, _021FB0E4 ; =0x0220ECD4 + ldr r1, _021FB0DC ; =0x0220ECC4 + ldr r3, _021FB0E8 ; =0x0000019A + mov r2, #0 + bl __msl_assertion_failed +_021FAF78: + cmp r4, #0 + bne _021FAF94 + ldr r0, _021FB0EC ; =0x0220ECE0 + ldr r1, _021FB0DC ; =0x0220ECC4 + ldr r3, _021FB0F0 ; =0x0000019B + mov r2, #0 + bl __msl_assertion_failed +_021FAF94: + ldr r1, [r6] + ldrsb r0, [r7, r1] + add r3, r7, r1 + cmp r0, #0x5c + beq _021FAFD0 + ldr r2, _021FB0F4 ; =0x0220ECF0 + mov r0, r8 + mov r1, #1 + bl FUN_021FAF00 + mov r0, r8 + mov r1, #3 + mov r2, #1 + bl FUN_021F3500 + mov r0, #3 + ldmia sp!, {r4, r5, r6, r7, r8, pc} +_021FAFD0: + ldrsb r2, [r3, #1] + add r7, r3, #2 + mov r1, #0 + cmp r2, #0x5c + beq _021FB05C + ldr r0, _021FB0F8 ; =0x000001FF +_021FAFE8: + cmp r2, #0 + bne _021FB018 + ldr r2, _021FB0F4 ; =0x0220ECF0 + mov r0, r8 + mov r1, #1 + bl FUN_021FAF00 + mov r0, r8 + mov r1, #3 + mov r2, #1 + bl FUN_021F3500 + mov r0, #3 + ldmia sp!, {r4, r5, r6, r7, r8, pc} +_021FB018: + cmp r1, r0 + bne _021FB048 + ldr r2, _021FB0F4 ; =0x0220ECF0 + mov r0, r8 + mov r1, #1 + bl FUN_021FAF00 + mov r0, r8 + mov r1, #3 + mov r2, #1 + bl FUN_021F3500 + mov r0, #3 + ldmia sp!, {r4, r5, r6, r7, r8, pc} +_021FB048: + strb r2, [r5], #1 + ldrsb r2, [r7], #1 + add r1, r1, #1 + cmp r2, #0x5c + bne _021FAFE8 +_021FB05C: + mov r2, #0 + strb r2, [r5] + ldr r0, _021FB0F8 ; =0x000001FF + b _021FB0A4 +_021FB06C: + cmp r2, r0 + bne _021FB09C + ldr r2, _021FB0F4 ; =0x0220ECF0 + mov r0, r8 + mov r1, #1 + bl FUN_021FAF00 + mov r0, r8 + mov r1, #3 + mov r2, #1 + bl FUN_021F3500 + mov r0, #3 + ldmia sp!, {r4, r5, r6, r7, r8, pc} +_021FB09C: + strb r1, [r4], #1 + add r2, r2, #1 +_021FB0A4: + ldrsb r1, [r7], #1 + cmp r1, #0x5c + beq _021FB0B8 + cmp r1, #0 + bne _021FB06C +_021FB0B8: + mov r0, #0 + strb r0, [r4] + sub r1, r7, r3 + ldr r2, [r6] + sub r1, r1, #1 + add r1, r2, r1 + str r1, [r6] + ldmia sp!, {r4, r5, r6, r7, r8, pc} + .align 2, 0 +_021FB0D8: .word 0x0220ECB4 +_021FB0DC: .word 0x0220ECC4 +_021FB0E0: .word 0x00000199 +_021FB0E4: .word 0x0220ECD4 +_021FB0E8: .word 0x0000019A +_021FB0EC: .word 0x0220ECE0 +_021FB0F0: .word 0x0000019B +_021FB0F4: .word 0x0220ECF0 +_021FB0F8: .word 0x000001FF + + arm_func_start FUN_021FB0FC +FUN_021FB0FC: ; 0x021FB0FC + stmdb sp!, {r4, r5, lr} + sub sp, sp, #0xc + mov ip, #0 + mov r4, r2 + mov r5, r0 + mov r0, r1 + add r2, sp, #0 + add r3, sp, #4 + mov r1, ip + str ip, [sp] + str ip, [sp, #4] + bl FUN_021EFF5C + mvn r1, #0 + cmp r0, r1 + bne _021FB170 + ldr r1, _021FB1E0 ; =0x0220ED00 + mov r0, r5 + bl FUN_021FB3D0 + ldr r2, _021FB1E4 ; =0x0220ED14 + mov r0, r5 + mov r1, #5 + bl FUN_021FAF00 + mov r0, r5 + mov r1, #3 + mov r2, #1 + bl FUN_021F3500 + add sp, sp, #0xc + mov r0, #3 + ldmia sp!, {r4, r5, pc} +_021FB170: + cmp r0, #0 + ble _021FB1D0 + ldr r0, [sp, #4] + cmp r0, #0 + beq _021FB1A4 + ldr r1, _021FB1E8 ; =0x0220ED4C + mov r0, r5 + bl FUN_021FB3D0 + mov r0, #4 + str r0, [r4] + add sp, sp, #0xc + mov r0, #0 + ldmia sp!, {r4, r5, pc} +_021FB1A4: + ldr r0, [sp] + cmp r0, #0 + beq _021FB1D0 + ldr r1, _021FB1EC ; =0x0220ED64 + mov r0, r5 + bl FUN_021FB3D0 + mov r0, #3 + str r0, [r4] + add sp, sp, #0xc + mov r0, #0 + ldmia sp!, {r4, r5, pc} +_021FB1D0: + mov r0, #0 + str r0, [r4] + add sp, sp, #0xc + ldmia sp!, {r4, r5, pc} + .align 2, 0 +_021FB1E0: .word 0x0220ED00 +_021FB1E4: .word 0x0220ED14 +_021FB1E8: .word 0x0220ED4C +_021FB1EC: .word 0x0220ED64 + + arm_func_start FUN_021FB1F0 +FUN_021FB1F0: ; 0x021FB1F0 + stmdb sp!, {r4, r5, r6, r7, r8, lr} + movs r5, r0 + mov r8, r1 + mov r4, r2 + mov r7, r3 + bne _021FB21C + ldr r0, _021FB2D8 ; =0x0220ED7C + ldr r1, _021FB2DC ; =0x0220ECC4 + ldr r3, _021FB2E0 ; =0x0000010D + mov r2, #0 + bl __msl_assertion_failed +_021FB21C: + cmp r8, #0 + bne _021FB238 + ldr r0, _021FB2E4 ; =0x0220ECD4 + ldr r1, _021FB2DC ; =0x0220ECC4 + ldr r3, _021FB2E8 ; =0x0000010E + mov r2, #0 + bl __msl_assertion_failed +_021FB238: + cmp r4, #0 + bne _021FB254 + ldr r0, _021FB2EC ; =0x0220ECE0 + ldr r1, _021FB2DC ; =0x0220ECC4 + ldr r3, _021FB2F0 ; =0x0000010F + mov r2, #0 + bl __msl_assertion_failed +_021FB254: + cmp r7, #0 + bgt _021FB270 + ldr r0, _021FB2F4 ; =0x0220ED8C + ldr r1, _021FB2DC ; =0x0220ECC4 + mov r2, #0 + mov r3, #0x110 + bl __msl_assertion_failed +_021FB270: + ldrsb r6, [r8] + mov r0, r5 + mov r1, r8 + bl strstr + movs r5, r0 + moveq r0, #0 + ldmeqia sp!, {r4, r5, r6, r7, r8, pc} + mov r0, r8 + bl strlen + add r3, r5, r0 + sub r0, r7, #1 + mov r2, #0 + b _021FB2AC +_021FB2A4: + strb r1, [r4, r2] + add r2, r2, #1 +_021FB2AC: + cmp r2, r0 + bge _021FB2C8 + ldrsb r1, [r3, r2] + cmp r1, #0 + beq _021FB2C8 + cmp r1, r6 + bne _021FB2A4 +_021FB2C8: + mov r0, #0 + strb r0, [r4, r2] + mov r0, #1 + ldmia sp!, {r4, r5, r6, r7, r8, pc} + .align 2, 0 +_021FB2D8: .word 0x0220ED7C +_021FB2DC: .word 0x0220ECC4 +_021FB2E0: .word 0x0000010D +_021FB2E4: .word 0x0220ECD4 +_021FB2E8: .word 0x0000010E +_021FB2EC: .word 0x0220ECE0 +_021FB2F0: .word 0x0000010F +_021FB2F4: .word 0x0220ED8C + + arm_func_start FUN_021FB2F8 +FUN_021FB2F8: ; 0x021FB2F8 + stmdb sp!, {r4, r5, r6, r7, lr} + sub sp, sp, #0x14 + mov r6, r1 + mov r7, r0 + mov r5, r2 + ldr r1, _021FB3C0 ; =0x0220ED94 + mov r0, r6 + mov r2, #7 + ldr r4, [r7] + bl strncmp + cmp r0, #0 + bne _021FB3B4 + ldr r1, _021FB3C4 ; =0x0220ED9C + add r2, sp, #0 + mov r0, r6 + mov r3, #0x10 + bl FUN_021FB1F0 + cmp r0, #0 + beq _021FB350 + add r0, sp, #0 + bl atol + str r0, [r4, #0x418] +_021FB350: + ldr r1, _021FB3C8 ; =0x0220EDA4 + mov r0, r6 + mov r2, r4 + mov r3, #0x100 + bl FUN_021FB1F0 + cmp r0, #0 + moveq r0, #0 + streqb r0, [r4] + cmp r5, #0 + beq _021FB3A8 + ldr r1, _021FB3CC ; =0x0220EDB0 + mov r0, r6 + bl strstr + cmp r0, #0 + movne r0, #1 + moveq r0, #0 + cmp r0, #0 + movne r2, #1 + moveq r2, #0 + mov r0, r7 + mov r1, #4 + bl FUN_021F3500 +_021FB3A8: + add sp, sp, #0x14 + mov r0, #1 + ldmia sp!, {r4, r5, r6, r7, pc} +_021FB3B4: + mov r0, #0 + add sp, sp, #0x14 + ldmia sp!, {r4, r5, r6, r7, pc} + .align 2, 0 +_021FB3C0: .word 0x0220ED94 +_021FB3C4: .word 0x0220ED9C +_021FB3C8: .word 0x0220EDA4 +_021FB3CC: .word 0x0220EDB0 + + arm_func_start FUN_021FB3D0 +FUN_021FB3D0: ; 0x021FB3D0 + stmdb sp!, {r0, r1, r2, r3} + add sp, sp, #0x10 + bx lr + + arm_func_start FUN_021FB3DC +FUN_021FB3DC: ; 0x021FB3DC + stmdb sp!, {r4, r5, r6, lr} + movs r6, r0 + mov r5, r1 + mov r4, r2 + bne _021FB404 + ldr r0, _021FB440 ; =0x0220EDB8 + ldr r1, _021FB444 ; =0x0220ECC4 + mov r2, #0 + mov r3, #0x2f + bl __msl_assertion_failed +_021FB404: + cmp r5, #0 + bne _021FB420 + ldr r0, _021FB448 ; =0x0220EDC8 + ldr r1, _021FB444 ; =0x0220ECC4 + mov r2, #0 + mov r3, #0x30 + bl __msl_assertion_failed +_021FB420: + mov r0, r6 + mov r1, r5 + mov r2, r4 + bl strncpy + add r0, r6, r4 + mov r1, #0 + strb r1, [r0, #-1] + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +_021FB440: .word 0x0220EDB8 +_021FB444: .word 0x0220ECC4 +_021FB448: .word 0x0220EDC8 + + arm_func_start FUN_021FB44C +FUN_021FB44C: ; 0x021FB44C + stmdb sp!, {r4, r5, r6, r7, r8, sb, lr} + sub sp, sp, #0x24 + ldr r0, _021FB520 ; =0x02210F84 + ldr r0, [r0] + cmp r0, #0 + addeq sp, sp, #0x24 + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, pc} + bl FUN_021EF06C + subs r4, r0, #1 + bmi _021FB500 + ldr r5, _021FB524 ; =0x0220BBC8 + add r3, sp, #0x14 + mov r2, #8 +_021FB480: + ldrb r1, [r5], #1 + ldrb r0, [r5], #1 + subs r2, r2, #1 + strb r1, [r3], #1 + strb r0, [r3], #1 + bne _021FB480 + ldr sb, _021FB528 ; =0x0220EDEC + ldr r5, _021FB52C ; =0x0220EDD8 + add r8, sp, #4 + mov r7, #0xf + mov r6, #0 +_021FB4AC: + add ip, sp, #0x14 + add r3, sp, #4 + mov r2, #8 +_021FB4B8: + ldrb r1, [ip], #1 + ldrb r0, [ip], #1 + subs r2, r2, #1 + strb r1, [r3], #1 + strb r0, [r3], #1 + bne _021FB4B8 + mov r0, r8 + mov r1, r7 + str sb, [r5] + bl FUN_021FBCB8 + mov r0, r4 + mov r1, r6 + mov r2, r6 + mov r3, r8 + str r6, [sp] + bl FUN_021FB530 + subs r4, r4, #1 + bpl _021FB4AC +_021FB500: + ldr r0, _021FB520 ; =0x02210F84 + ldr r0, [r0] + bl FUN_021EF074 + ldr r0, _021FB520 ; =0x02210F84 + mov r1, #0 + str r1, [r0] + add sp, sp, #0x24 + ldmia sp!, {r4, r5, r6, r7, r8, sb, pc} + .align 2, 0 +_021FB520: .word 0x02210F84 +_021FB524: .word 0x0220BBC8 +_021FB528: .word 0x0220EDEC +_021FB52C: .word 0x0220EDD8 + + arm_func_start FUN_021FB530 +FUN_021FB530: ; 0x021FB530 + stmdb sp!, {r4, r5, r6, r7, lr} + sub sp, sp, #0x14 + movs r7, r0 + mov r6, r1 + mov r5, r2 + mov r4, r3 + addmi sp, sp, #0x14 + ldmmiia sp!, {r4, r5, r6, r7, pc} + ldr r0, _021FB650 ; =0x02210F84 + ldr r0, [r0] + bl FUN_021EF06C + cmp r7, r0 + addge sp, sp, #0x14 + ldmgeia sp!, {r4, r5, r6, r7, pc} + ldr r0, _021FB650 ; =0x02210F84 + mov r1, r7 + ldr r0, [r0] + bl FUN_021EEFFC + mov r3, r0 + ldr ip, [r3, #0x18] + cmp ip, #0 + beq _021FB638 + ldr r0, [r3] + cmp r0, #3 + addls pc, pc, r0, lsl #2 + b _021FB638 +_021FB598: ; jump table + b _021FB5A8 ; case 0 + b _021FB5C8 ; case 1 + b _021FB5FC ; case 2 + b _021FB624 ; case 3 +_021FB5A8: + ldr r0, [r3, #0x14] + mov r2, r6 + str r0, [sp] + ldr r0, [r3, #4] + ldr r1, [r3, #8] + mov r3, r4 + blx ip + b _021FB638 +_021FB5C8: + str r6, [sp] + str r5, [sp, #4] + ldr r0, [sp, #0x28] + str r4, [sp, #8] + str r0, [sp, #0xc] + ldr r0, [r3, #0x14] + str r0, [sp, #0x10] + ldr r0, [r3, #4] + ldr r1, [r3, #8] + ldr r2, [r3, #0xc] + ldr r3, [r3, #0x10] + blx ip + b _021FB638 +_021FB5FC: + str r6, [sp] + str r5, [sp, #4] + ldr r0, [r3, #0x14] + str r0, [sp, #8] + ldr r0, [r3, #4] + ldr r1, [r3, #8] + ldr r2, [r3, #0xc] + ldr r3, [r3, #0x10] + blx ip + b _021FB638 +_021FB624: + ldr r0, [r3, #4] + ldr r1, [r3, #8] + ldr r3, [r3, #0x14] + mov r2, r6 + blx ip +_021FB638: + ldr r0, _021FB650 ; =0x02210F84 + mov r1, r7 + ldr r0, [r0] + bl FUN_021EED84 + add sp, sp, #0x14 + ldmia sp!, {r4, r5, r6, r7, pc} + .align 2, 0 +_021FB650: .word 0x02210F84 + + arm_func_start FUN_021FB654 +FUN_021FB654: ; 0x021FB654 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} + mov sb, r1 + mov sl, r0 + mov r7, sb + bl FUN_021FBB3C + mov r8, r0 + ldr r5, _021FB6D4 ; =0x0220EDDC + ldr r4, _021FB6D8 ; =0x0220EDD8 + b _021FB6BC +_021FB678: + sub r6, r8, sl + mov r0, sl + mov r1, r6 + str r5, [r4] + bl FUN_021FBCB8 + mov r0, sl + mov r1, r6 + bl FUN_021FB6DC + add r0, r6, #7 + sub sb, sb, r0 + cmp sb, #0 + add sl, r8, #7 + ble _021FB6BC + mov r0, sl + mov r1, sb + bl FUN_021FBB3C + mov r8, r0 +_021FB6BC: + cmp sb, #0 + ble _021FB6CC + cmp r8, #0 + bne _021FB678 +_021FB6CC: + sub r0, r7, sb + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + .align 2, 0 +_021FB6D4: .word 0x0220EDDC +_021FB6D8: .word 0x0220EDD8 + + arm_func_start FUN_021FB6DC +FUN_021FB6DC: ; 0x021FB6DC + stmdb sp!, {r4, r5, lr} + sub sp, sp, #4 + mov r4, r1 + ldr r1, _021FB7D0 ; =0x0220EDFC + mov r5, r0 + mov r3, #0 + mov r2, #8 + strb r3, [r5, r4] + bl strncmp + cmp r0, #0 + bne _021FB71C + mov r0, r5 + mov r1, r4 + bl FUN_021FBA00 + add sp, sp, #4 + ldmia sp!, {r4, r5, pc} +_021FB71C: + ldr r1, _021FB7D4 ; =0x0220EE08 + mov r0, r5 + mov r2, #9 + bl strncmp + cmp r0, #0 + bne _021FB748 + mov r0, r5 + mov r1, r4 + bl FUN_021FB968 + add sp, sp, #4 + ldmia sp!, {r4, r5, pc} +_021FB748: + ldr r1, _021FB7D4 ; =0x0220EE08 + mov r0, r5 + mov r2, #9 + bl strncmp + cmp r0, #0 + bne _021FB774 + mov r0, r5 + mov r1, r4 + bl FUN_021FB968 + add sp, sp, #4 + ldmia sp!, {r4, r5, pc} +_021FB774: + ldr r1, _021FB7D8 ; =0x0220EE14 + mov r0, r5 + mov r2, #8 + bl strncmp + cmp r0, #0 + bne _021FB7A0 + mov r0, r5 + mov r1, r4 + bl FUN_021FB884 + add sp, sp, #4 + ldmia sp!, {r4, r5, pc} +_021FB7A0: + ldr r1, _021FB7DC ; =0x0220EE20 + mov r0, r5 + mov r2, #8 + bl strncmp + cmp r0, #0 + addne sp, sp, #4 + ldmneia sp!, {r4, r5, pc} + mov r0, r5 + mov r1, r4 + bl FUN_021FB7E0 + add sp, sp, #4 + ldmia sp!, {r4, r5, pc} + .align 2, 0 +_021FB7D0: .word 0x0220EDFC +_021FB7D4: .word 0x0220EE08 +_021FB7D8: .word 0x0220EE14 +_021FB7DC: .word 0x0220EE20 + + arm_func_start FUN_021FB7E0 +FUN_021FB7E0: ; 0x021FB7E0 + stmdb sp!, {r4, r5, r6, r7, lr} + sub sp, sp, #4 + ldr r1, _021FB874 ; =0x0220EE2C + mov r7, r0 + bl FUN_021FBBC8 + bl atol + mov r6, r0 + ldr r1, _021FB878 ; =0x0220EE34 + mov r0, r7 + bl FUN_021FBBC8 + bl atol + mov r5, r0 + ldr r1, _021FB87C ; =0x0220EE38 + mov r0, r7 + bl FUN_021FBBC8 + bl atol + mov r4, r0 + ldr r1, _021FB880 ; =0x0220EE3C + mov r0, r7 + bl FUN_021FBBC8 + bl atol + mov r1, r4 + mov r4, r0 + mov r2, r5 + mov r0, #2 + bl FUN_021FBAB0 + mvn r1, #0 + cmp r0, r1 + addeq sp, sp, #4 + ldmeqia sp!, {r4, r5, r6, r7, pc} + mov r3, #0 + mov r1, r6 + mov r2, r4 + str r3, [sp] + bl FUN_021FB530 + add sp, sp, #4 + ldmia sp!, {r4, r5, r6, r7, pc} + .align 2, 0 +_021FB874: .word 0x0220EE2C +_021FB878: .word 0x0220EE34 +_021FB87C: .word 0x0220EE38 +_021FB880: .word 0x0220EE3C + + arm_func_start FUN_021FB884 +FUN_021FB884: ; 0x021FB884 + stmdb sp!, {r4, r5, r6, r7, r8, lr} + sub sp, sp, #8 + ldr r1, _021FB94C ; =0x0220EE40 + mov r4, r0 + bl FUN_021FBBC8 + bl atol + mov r7, r0 + ldr r1, _021FB950 ; =0x0220EE38 + mov r0, r4 + bl FUN_021FBBC8 + bl atol + mov r6, r0 + ldr r1, _021FB954 ; =0x0220EE34 + mov r0, r4 + bl FUN_021FBBC8 + bl atol + mov r5, r0 + ldr r1, _021FB958 ; =0x0220EE3C + mov r0, r4 + bl FUN_021FBBC8 + bl atol + mov r2, r5 + mov r5, r0 + mov r1, r6 + mov r0, #1 + bl FUN_021FBAB0 + mov r8, r0 + mvn r0, #0 + cmp r8, r0 + addeq sp, sp, #8 + ldmeqia sp!, {r4, r5, r6, r7, r8, pc} + ldr r1, _021FB95C ; =0x0220EE48 + mov r0, r4 + bl FUN_021FBBC8 + bl atol + mov r6, r0 + ldr r1, _021FB960 ; =0x0220EE50 + mov r0, r4 + bl strstr + cmp r0, #0 + ldreq r3, _021FB964 ; =0x0220EE58 + moveq r6, #0 + addne r3, r0, #6 + mov r0, r8 + mov r1, r7 + mov r2, r5 + str r6, [sp] + bl FUN_021FB530 + add sp, sp, #8 + ldmia sp!, {r4, r5, r6, r7, r8, pc} + .align 2, 0 +_021FB94C: .word 0x0220EE40 +_021FB950: .word 0x0220EE38 +_021FB954: .word 0x0220EE34 +_021FB958: .word 0x0220EE3C +_021FB95C: .word 0x0220EE48 +_021FB960: .word 0x0220EE50 +_021FB964: .word 0x0220EE58 + + arm_func_start FUN_021FB968 +FUN_021FB968: ; 0x021FB968 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #4 + ldr r1, _021FB9F4 ; =0x0220EE5C + mov r5, r0 + bl FUN_021FBBC8 + bl atol + mov r4, r0 + ldr r1, _021FB9F8 ; =0x0220EE38 + mov r0, r5 + bl FUN_021FBBC8 + bl atol + mov r1, r0 + mov r0, #3 + mov r2, #0 + bl FUN_021FBAB0 + mov r5, r0 + mvn r0, #0 + cmp r5, r0 + addeq sp, sp, #4 + ldmeqia sp!, {r4, r5, pc} + ldr r0, _021FB9FC ; =0x02210F84 + mov r1, r5 + ldr r0, [r0] + bl FUN_021EEFFC + cmp r4, #0 + movgt r1, #1 + mov r2, #0 + str r4, [r0, #8] + movle r1, #0 + mov r0, r5 + mov r3, r2 + str r2, [sp] + bl FUN_021FB530 + add sp, sp, #4 + ldmia sp!, {r4, r5, pc} + .align 2, 0 +_021FB9F4: .word 0x0220EE5C +_021FB9F8: .word 0x0220EE38 +_021FB9FC: .word 0x02210F84 + + arm_func_start FUN_021FBA00 +FUN_021FBA00: ; 0x021FBA00 + stmdb sp!, {r4, r5, r6, lr} + sub sp, sp, #8 + ldr r1, _021FBAA0 ; =0x0220EE64 + mov r6, r0 + bl FUN_021FBBC8 + bl atol + mov r5, r0 + ldr r1, _021FBAA4 ; =0x0220EE38 + mov r0, r6 + bl FUN_021FBBC8 + bl atol + mov r4, r0 + ldr r1, _021FBAA8 ; =0x0220EE6C + mov r0, r6 + bl FUN_021FBBC8 + mov r1, r4 + mov r4, r0 + mov r0, #0 + mov r2, r0 + bl FUN_021FBAB0 + mov r6, r0 + mvn r0, #0 + cmp r6, r0 + addeq sp, sp, #8 + ldmeqia sp!, {r4, r5, r6, pc} + ldr r0, _021FBAAC ; =0x02210F84 + mov r1, r6 + ldr r0, [r0] + bl FUN_021EEFFC + cmp r5, #0 + movgt r1, #1 + str r5, [r0, #8] + mov r2, #0 + movle r1, #0 + mov r0, r6 + mov r3, r4 + str r2, [sp] + bl FUN_021FB530 + add sp, sp, #8 + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +_021FBAA0: .word 0x0220EE64 +_021FBAA4: .word 0x0220EE38 +_021FBAA8: .word 0x0220EE6C +_021FBAAC: .word 0x02210F84 + + arm_func_start FUN_021FBAB0 +FUN_021FBAB0: ; 0x021FBAB0 + stmdb sp!, {r4, r5, r6, r7, r8, lr} + ldr r3, _021FBB38 ; =0x02210F84 + mov r7, r0 + ldr r0, [r3] + mov r6, r1 + cmp r0, #0 + mov r5, r2 + mvneq r0, #0 + ldmeqia sp!, {r4, r5, r6, r7, r8, pc} + mov r4, #0 + bl FUN_021EF06C + cmp r0, #0 + ble _021FBB30 + ldr r8, _021FBB38 ; =0x02210F84 +_021FBAE8: + ldr r0, [r8] + mov r1, r4 + bl FUN_021EEFFC + ldr r1, [r0] + cmp r1, r7 + bne _021FBB1C + ldr r1, [r0, #4] + cmp r1, r6 + bne _021FBB1C + ldr r0, [r0, #8] + cmp r0, r5 + moveq r0, r4 + ldmeqia sp!, {r4, r5, r6, r7, r8, pc} +_021FBB1C: + ldr r0, [r8] + add r4, r4, #1 + bl FUN_021EF06C + cmp r4, r0 + blt _021FBAE8 +_021FBB30: + mvn r0, #0 + ldmia sp!, {r4, r5, r6, r7, r8, pc} + .align 2, 0 +_021FBB38: .word 0x02210F84 + + arm_func_start FUN_021FBB3C +FUN_021FBB3C: ; 0x021FBB3C + sub r2, r1, #6 + mov r3, r0 + cmp r2, #0 + ble _021FBBB4 +_021FBB4C: + ldrsb r1, [r3] + cmp r1, #0x5c + bne _021FBBA4 + ldrsb r1, [r3, #1] + cmp r1, #0x66 + bne _021FBBA4 + ldrsb r1, [r3, #2] + cmp r1, #0x69 + bne _021FBBA4 + ldrsb r1, [r3, #3] + cmp r1, #0x6e + bne _021FBBA4 + ldrsb r1, [r3, #4] + cmp r1, #0x61 + bne _021FBBA4 + ldrsb r1, [r3, #5] + cmp r1, #0x6c + bne _021FBBA4 + ldrsb r1, [r3, #6] + cmp r1, #0x5c + moveq r0, r3 + bxeq lr +_021FBBA4: + add r3, r3, #1 + sub r1, r3, r0 + cmp r1, r2 + blt _021FBB4C +_021FBBB4: + mov r0, #0 + bx lr + + arm_func_start FUN_021FBBBC +FUN_021FBBBC: ; 0x021FBBBC + ldr ip, _021FBBC4 ; =FUN_021EFF2C + bx ip + .align 2, 0 +_021FBBC4: .word FUN_021EFF2C + + arm_func_start FUN_021FBBC8 +FUN_021FBBC8: ; 0x021FBBC8 + stmdb sp!, {lr} + sub sp, sp, #4 + bl FUN_021FBBE8 + cmp r0, #0 + ldreq r0, _021FBBE4 ; =0x0220EE58 + add sp, sp, #4 + ldmfd sp!, {pc} + .align 2, 0 +_021FBBE4: .word 0x0220EE58 + + arm_func_start FUN_021FBBE8 +FUN_021FBBE8: ; 0x021FBBE8 + stmdb sp!, {r4, lr} + sub sp, sp, #0x100 + ldr lr, _021FBCA8 ; =0x0220BBD8 + add ip, sp, #0 + mov r4, r0 + mov r3, #0x80 +_021FBC00: + ldrb r2, [lr], #1 + ldrb r0, [lr], #1 + subs r3, r3, #1 + strb r2, [ip], #1 + strb r0, [ip], #1 + bne _021FBC00 + ldr r2, _021FBCAC ; =0x02210F8C + add r0, sp, #0 + ldr r3, [r2] + eor r3, r3, #1 + str r3, [r2] + bl strcat + ldr r1, _021FBCB0 ; =0x0220EE74 + add r0, sp, #0 + bl strcat + add r1, sp, #0 + mov r0, r4 + bl strstr + movs r4, r0 + addeq sp, sp, #0x100 + moveq r0, #0 + ldmeqia sp!, {r4, pc} + add r0, sp, #0 + bl strlen + ldr r1, _021FBCAC ; =0x02210F8C + ldr r2, _021FBCB4 ; =0x02211194 + ldr r1, [r1] + add r3, r4, r0 + add r0, r2, r1, lsl #8 + mov r2, r0 + b _021FBC84 +_021FBC7C: + ldrsb r1, [r3], #1 + strb r1, [r2], #1 +_021FBC84: + ldrsb r1, [r3] + cmp r1, #0 + beq _021FBC98 + cmp r1, #0x5c + bne _021FBC7C +_021FBC98: + mov r1, #0 + strb r1, [r2] + add sp, sp, #0x100 + ldmia sp!, {r4, pc} + .align 2, 0 +_021FBCA8: .word 0x0220BBD8 +_021FBCAC: .word 0x02210F8C +_021FBCB0: .word 0x0220EE74 +_021FBCB4: .word 0x02211194 + + arm_func_start FUN_021FBCB8 +FUN_021FBCB8: ; 0x021FBCB8 + stmdb sp!, {r4, lr} + ldr r2, _021FBCFC ; =0x0220EDD8 + mov r4, #0 + cmp r1, #0 + ldr lr, [r2] + ldmleia sp!, {r4, pc} +_021FBCD0: + ldrsb ip, [r0, r4] + ldrsb r3, [lr] + eor r3, ip, r3 + strb r3, [r0, r4] + ldrsb r3, [lr, #1]! + add r4, r4, #1 + cmp r3, #0 + ldreq lr, [r2] + cmp r4, r1 + blt _021FBCD0 + ldmia sp!, {r4, pc} + .align 2, 0 +_021FBCFC: .word 0x0220EDD8 + + arm_func_start FUN_021FBD00 +FUN_021FBD00: ; 0x021FBD00 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} + ldr r0, _021FBE48 ; =0x0220EDD4 + mvn r1, #0 + ldr r0, [r0] + cmp r0, r1 + moveq r0, #0 + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + ldr r1, _021FBE4C ; =0x02210F88 + ldr r1, [r1] + cmp r1, #5 + movne r0, #0 + ldmneia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + bl FUN_021FBBBC + cmp r0, #0 + beq _021FBE2C + ldr r8, _021FBE50 ; =0x02210F80 + ldr sl, _021FBE54 ; =0x02210F90 + ldr sb, _021FBE58 ; =0x02210F7C + ldr r7, _021FBE48 ; =0x0220EDD4 + mov r6, #0x100 + mov r5, #0 +_021FBD54: + ldr r1, [sl] + ldr r0, [sb] + sub r0, r1, r0 + cmp r0, #0x80 + bge _021FBD98 + cmp r1, #0x100 + strlt r6, [sl] + movge r0, r1, lsl #1 + strge r0, [sl] + ldr r1, [sl] + ldr r0, [r8] + add r1, r1, #1 + bl FUN_021DD844 + str r0, [r8] + cmp r0, #0 + moveq r0, #0 + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} +_021FBD98: + ldr r4, [sb] + ldr r1, [r8] + ldr r2, [sl] + ldr r0, [r7] + mov r3, r5 + add r1, r1, r4 + sub r2, r2, r4 + bl FUN_021EFC78 + cmp r0, #0 + bgt _021FBDCC + bl FUN_021FBE7C + mov r0, #0 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} +_021FBDCC: + ldr r2, [sb] + ldr r1, [r8] + add r0, r2, r0 + str r0, [sb] + strb r5, [r1, r0] + ldr r0, [r8] + ldr r1, [sb] + bl FUN_021FB654 + ldr r1, [sb] + mov r4, r0 + cmp r4, r1 + streq r5, [sb] + beq _021FBE1C + ldr r0, [r8] + sub r2, r1, r4 + add r1, r0, r4 + bl memmove + ldr r0, [sb] + sub r0, r0, r4 + str r0, [sb] +_021FBE1C: + ldr r0, [r7] + bl FUN_021FBBBC + cmp r0, #0 + bne _021FBD54 +_021FBE2C: + ldr r1, _021FBE48 ; =0x0220EDD4 + mvn r0, #0 + ldr r1, [r1] + cmp r1, r0 + movne r0, #1 + moveq r0, #0 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + .align 2, 0 +_021FBE48: .word 0x0220EDD4 +_021FBE4C: .word 0x02210F88 +_021FBE50: .word 0x02210F80 +_021FBE54: .word 0x02210F90 +_021FBE58: .word 0x02210F7C + + arm_func_start FUN_021FBE5C +FUN_021FBE5C: ; 0x021FBE5C + ldr r1, _021FBE78 ; =0x0220EDD4 + mvn r0, #0 + ldr r1, [r1] + cmp r1, r0 + movne r0, #1 + moveq r0, #0 + bx lr + .align 2, 0 +_021FBE78: .word 0x0220EDD4 + + arm_func_start FUN_021FBE7C +FUN_021FBE7C: ; 0x021FBE7C + stmdb sp!, {lr} + sub sp, sp, #4 + ldr r0, _021FBEF8 ; =0x0220EDD4 + mvn r1, #0 + ldr r0, [r0] + cmp r0, r1 + beq _021FBEAC + mov r1, #2 + bl FUN_021EFD80 + ldr r0, _021FBEF8 ; =0x0220EDD4 + ldr r0, [r0] + bl FUN_021EFD9C +_021FBEAC: + ldr r0, _021FBEF8 ; =0x0220EDD4 + mvn r1, #0 + str r1, [r0] + bl FUN_021FB44C + ldr r0, _021FBEFC ; =0x02210F80 + ldr r0, [r0] + cmp r0, #0 + addeq sp, sp, #4 + ldmeqia sp!, {pc} + bl FUN_021DD82C + ldr r2, _021FBEFC ; =0x02210F80 + mov r3, #0 + ldr r1, _021FBF00 ; =0x02210F90 + ldr r0, _021FBF04 ; =0x02210F7C + str r3, [r2] + str r3, [r1] + str r3, [r0] + add sp, sp, #4 + ldmfd sp!, {pc} + .align 2, 0 +_021FBEF8: .word 0x0220EDD4 +_021FBEFC: .word 0x02210F80 +_021FBF00: .word 0x02210F90 +_021FBF04: .word 0x02210F7C + + arm_func_start FUN_021FBF08 +FUN_021FBF08: ; 0x021FBF08 + mov ip, #0 +_021FBF0C: + cmp ip, #0 + beq _021FBF30 + cmp ip, #0xd + beq _021FBF30 + ldrb r3, [r0, ip] + ldrb r2, [r1, ip] + cmp r3, r2 + movne r0, #0 + bxne lr +_021FBF30: + add ip, ip, #1 + cmp ip, #0x20 + blt _021FBF0C + mov r0, #1 + bx lr + + arm_func_start FUN_021FBF44 +FUN_021FBF44: ; 0x021FBF44 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #4 + mov r5, r0 + ldr r0, _021FC06C ; =0x0220EE78 + mov r4, r1 + bl strlen + mov r8, r0 + mov r0, r4 + bl FUN_021FC1BC + mov sl, #0 + mov fp, r0 + mov r7, sl +_021FBF74: + cmp fp, #0 + beq _021FBF8C + cmp sl, #0 + beq _021FBF8C + cmp sl, #0xd + bne _021FBFBC +_021FBF8C: + bl rand + ldr r1, _021FC070 ; =0x2C0B02C1 + smull r2, r3, r1, r0 + mov r3, r3, asr #4 + mov r1, r0, lsr #0x1f + add r3, r1, r3 + ldr r1, _021FC074 ; =0x0000005D + smull r2, r3, r1, r3 + sub r3, r0, r2 + add r0, r3, #0x21 + strb r0, [r5, sl] + b _021FC04C +_021FBFBC: + cmp sl, #1 + beq _021FBFCC + cmp sl, #0xe + bne _021FBFD4 +_021FBFCC: + ldrsb sb, [r4, sl] + b _021FBFDC +_021FBFD4: + sub r0, sl, #1 + ldrsb sb, [r4, r0] +_021FBFDC: + ldrb r6, [r4, sl] + mov r1, r8 + add r0, sl, r6 + bl _s32_div_f + mul r0, sb, r7 + mov sb, r1 + mov r1, r8 + bl _s32_div_f + ldr r0, _021FC06C ; =0x0220EE78 + ldrsb r3, [r0, sb] + ldrsb r2, [r0, r1] + mla r0, sl, r6, r3 + mov r1, r0, lsr #0x1f + rsb r0, r1, r0, lsl #27 + add r0, r1, r0, ror #27 + ldrb r0, [r4, r0] + eor r0, r0, r2 + bl abs + ldr r1, _021FC070 ; =0x2C0B02C1 + smull r2, r3, r1, r0 + mov r3, r3, asr #4 + mov r1, r0, lsr #0x1f + add r3, r1, r3 + ldr r1, _021FC074 ; =0x0000005D + smull r2, r3, r1, r3 + sub r3, r0, r2 + add r0, r3, #0x21 + strb r0, [r5, sl] +_021FC04C: + ldr r0, _021FC078 ; =0x00004647 + add sl, sl, #1 + cmp sl, #0x20 + add r7, r7, r0 + blt _021FBF74 + mov r0, r5 + add sp, sp, #4 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_021FC06C: .word 0x0220EE78 +_021FC070: .word 0x2C0B02C1 +_021FC074: .word 0x0000005D +_021FC078: .word 0x00004647 + + arm_func_start FUN_021FC07C +FUN_021FC07C: ; 0x021FC07C + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #4 + movs sl, r0 + bne _021FC0A0 + ldr r0, _021FC1AC ; =0x0220EE9C + ldr r1, _021FC1B0 ; =0x0220EEA4 + mov r2, #0 + mov r3, #0x2b + bl __msl_assertion_failed +_021FC0A0: + bl FUN_021F025C + bl srand + bl rand + ldr r1, _021FC1B4 ; =0x2C0B02C1 + mov r2, r0, lsr #0x1f + smull r3, r4, r1, r0 + mov r8, #0 + mov r4, r4, asr #4 + mov sb, #1 + ldr r1, _021FC1B8 ; =0x0000005D + add r4, r2, r4 + smull r2, r3, r1, r4 + sub r4, r0, r2 + add r0, r4, #0x21 + strb r0, [sl] + mov r5, r8 + mov r6, sb + mov fp, r8 + mov r4, sb +_021FC0EC: + sub r0, sb, #1 + ldrb r2, [sl, r0] + ldrb r3, [sl] + add r7, sl, sb + cmp r2, r3 + eor r2, sb, r2 + movlo r0, r6 + and r2, r2, #1 + movhs r0, r5 + cmp r3, #0x4f + movlo r1, r4 + and r3, r3, #1 + eor r2, r8, r2 + movhs r1, fp + eor r2, r3, r2 + eor r1, r2, r1 + eor r8, r1, r0 + bl rand + ldr r2, _021FC1B4 ; =0x2C0B02C1 + cmp r8, #0 + smull r3, r1, r2, r0 + mov r1, r1, asr #4 + mov r2, r0, lsr #0x1f + add r1, r2, r1 + ldr r2, _021FC1B8 ; =0x0000005D + smull r1, r3, r2, r1 + sub r1, r0, r1 + add r0, r1, #0x21 + strb r0, [sl, sb] + beq _021FC170 + ldrb r0, [r7] + ands r0, r0, #1 + beq _021FC188 +_021FC170: + cmp r8, #0 + bne _021FC194 + ldrb r0, [r7] + and r0, r0, #1 + cmp r0, #1 + bne _021FC194 +_021FC188: + ldrb r0, [r7] + add r0, r0, #1 + strb r0, [r7] +_021FC194: + add sb, sb, #1 + cmp sb, #0x20 + blt _021FC0EC + mov r0, sl + add sp, sp, #4 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_021FC1AC: .word 0x0220EE9C +_021FC1B0: .word 0x0220EEA4 +_021FC1B4: .word 0x2C0B02C1 +_021FC1B8: .word 0x0000005D + + arm_func_start FUN_021FC1BC +FUN_021FC1BC: ; 0x021FC1BC + stmdb sp!, {r4, r5, r6, r7, r8, sb, lr} + sub sp, sp, #4 + ldrb r4, [r0] + mov r6, #0 + mov r5, #1 + and lr, r4, #1 + mov r3, r6 + mov ip, r5 + mov r1, r6 + mov r2, r5 +_021FC1E4: + sub r7, r5, #1 + ldrb sb, [r0, r7] + cmp sb, r4 + eor sb, r5, sb + movlo r7, ip + and sb, sb, #1 + movhs r7, r3 + cmp r4, #0x4f + movlo r8, r2 + eor r6, r6, sb + movhs r8, r1 + eor r6, lr, r6 + eor r6, r6, r8 + eors r6, r6, r7 + beq _021FC22C + ldrb r7, [r0, r5] + ands r7, r7, #1 + beq _021FC244 +_021FC22C: + cmp r6, #0 + bne _021FC250 + ldrb r7, [r0, r5] + and r7, r7, #1 + cmp r7, #1 + bne _021FC250 +_021FC244: + add sp, sp, #4 + mov r0, #0 + ldmia sp!, {r4, r5, r6, r7, r8, sb, pc} +_021FC250: + add r5, r5, #1 + cmp r5, #0x20 + blt _021FC1E4 + mov r0, #1 + add sp, sp, #4 + ldmia sp!, {r4, r5, r6, r7, r8, sb, pc} + + arm_func_start FUN_021FC268 +FUN_021FC268: ; 0x021FC268 + stmdb sp!, {r4, r5, r6, lr} + mov r5, r1 + mvn r1, #0 + mov r6, r0 + cmp r5, r1 + ldreq r0, [r6, #8] + mov r4, r2 + subeq r5, r0, r4 + ldr r0, [r6, #8] + cmp r5, r0 + ble _021FC2A8 + ldr r0, _021FC2F8 ; =0x0220EEB0 + ldr r1, _021FC2FC ; =0x0220EEC8 + mov r2, #0 + mov r3, #0x4f + bl __msl_assertion_failed +_021FC2A8: + ldr r0, [r6, #8] + sub r0, r0, r5 + cmp r4, r0 + ble _021FC2CC + ldr r0, _021FC300 ; =0x0220EED4 + ldr r1, _021FC2FC ; =0x0220EEC8 + mov r2, #0 + mov r3, #0x50 + bl __msl_assertion_failed +_021FC2CC: + ldr r0, [r6] + ldr r1, [r6, #8] + add r0, r0, r5 + sub r2, r1, r5 + add r1, r0, r4 + sub r2, r2, r4 + bl memmove + ldr r0, [r6, #8] + sub r0, r0, r4 + str r0, [r6, #8] + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +_021FC2F8: .word 0x0220EEB0 +_021FC2FC: .word 0x0220EEC8 +_021FC300: .word 0x0220EED4 + + arm_func_start FUN_021FC304 +FUN_021FC304: ; 0x021FC304 + stmdb sp!, {r4, r5, r6, lr} + movs r5, r1 + mov r6, r0 + mov r4, r2 + ldmeqia sp!, {r4, r5, r6, pc} + cmp r4, #0 + ldmeqia sp!, {r4, r5, r6, pc} + mvn r0, #0 + cmp r4, r0 + bne _021FC338 + mov r0, r5 + bl strlen + mov r4, r0 +_021FC338: + ldr r1, [r6, #8] + ldr r0, [r6, #4] + add r1, r1, r4 + cmp r1, r0 + ble _021FC360 + ldr r0, _021FC388 ; =0x0220EEF8 + ldr r1, _021FC38C ; =0x0220EEC8 + mov r2, #0 + mov r3, #0x40 + bl __msl_assertion_failed +_021FC360: + ldr r3, [r6] + ldr r0, [r6, #8] + mov r1, r5 + mov r2, r4 + add r0, r3, r0 + bl memcpy + ldr r0, [r6, #8] + add r0, r0, r4 + str r0, [r6, #8] + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +_021FC388: .word 0x0220EEF8 +_021FC38C: .word 0x0220EEC8 + + arm_func_start FUN_021FC390 +FUN_021FC390: ; 0x021FC390 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #4 + mov r5, r0 + ldr r2, [r5, #8] + ldr r0, [r5, #4] + add r2, r2, #2 + mov r4, r1 + cmp r2, r0 + ble _021FC3C8 + ldr r0, _021FC3FC ; =0x0220EF1C + ldr r1, _021FC400 ; =0x0220EEC8 + mov r2, #0 + mov r3, #0x2e + bl __msl_assertion_failed +_021FC3C8: + ldr r2, [r5, #8] + mov r1, r4, asr #8 + add r0, r2, #1 + str r0, [r5, #8] + ldr r0, [r5] + strb r1, [r0, r2] + ldr r1, [r5, #8] + add r0, r1, #1 + str r0, [r5, #8] + ldr r0, [r5] + strb r4, [r0, r1] + add sp, sp, #4 + ldmia sp!, {r4, r5, pc} + .align 2, 0 +_021FC3FC: .word 0x0220EF1C +_021FC400: .word 0x0220EEC8 + + arm_func_start FUN_021FC404 +FUN_021FC404: ; 0x021FC404 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #4 + mov r5, r0 + ldr r2, [r5, #8] + ldr r0, [r5, #4] + mov r4, r1 + cmp r2, r0 + blt _021FC438 + ldr r0, _021FC454 ; =0x0220EF40 + ldr r1, _021FC458 ; =0x0220EEC8 + mov r2, #0 + mov r3, #0x23 + bl __msl_assertion_failed +_021FC438: + ldr r1, [r5, #8] + add r0, r1, #1 + str r0, [r5, #8] + ldr r0, [r5] + strb r4, [r0, r1] + add sp, sp, #4 + ldmia sp!, {r4, r5, pc} + .align 2, 0 +_021FC454: .word 0x0220EF40 +_021FC458: .word 0x0220EEC8 + + arm_func_start FUN_021FC45C +FUN_021FC45C: ; 0x021FC45C + ldr r1, [r0, #4] + ldr r0, [r0, #8] + sub r0, r1, r0 + bx lr + + arm_func_start FUN_021FC46C +FUN_021FC46C: ; 0x021FC46C + stmdb sp!, {r4, r5, lr} + sub sp, sp, #4 + mov r4, r1 + mov r5, r0 + mov r0, r4 + bl FUN_021DD860 + str r0, [r5] + ldr r0, [r5] + cmp r0, #0 + moveq r0, #0 + strne r4, [r5, #4] + movne r0, #1 + add sp, sp, #4 + ldmia sp!, {r4, r5, pc} + + arm_func_start FUN_021FC4A4 +FUN_021FC4A4: ; 0x021FC4A4 + stmdb sp!, {r4, r5, r6, r7, r8, lr} + sub sp, sp, #8 + ldr r4, [sp, #0x24] + mov r6, r2 + mov r2, #0 + movs r8, r0 + mov r7, r1 + mov r5, r3 + str r2, [r4] + bne _021FC4DC + ldr r0, _021FC590 ; =0x0220EF5C + ldr r1, _021FC594 ; =0x0220EF64 + ldr r3, _021FC598 ; =0x00000197 + bl __msl_assertion_failed +_021FC4DC: + cmp r8, #0 + addeq sp, sp, #8 + moveq r0, #1 + ldmeqia sp!, {r4, r5, r6, r7, r8, pc} + ldr r0, [r8, #0x30] + cmp r0, #0 + addeq sp, sp, #8 + moveq r0, #1 + ldmeqia sp!, {r4, r5, r6, r7, r8, pc} + ldr r0, [sp, #0x20] + cmp r0, #0 + beq _021FC514 + cmp r5, #0 + bne _021FC51C +_021FC514: + mov r5, #0 + str r5, [sp, #0x20] +_021FC51C: + ldr r1, [r8, #0x1c] + ldr r0, [sp, #0x20] + add r1, r1, #1 + str r1, [r8, #0x1c] + str r0, [sp] + ldr ip, [r8, #0x30] + mov r0, r8 + mov r1, r7 + mov r2, r6 + mov r3, r5 + blx ip + str r0, [r4] + ldr r0, [r8, #0x1c] + sub r0, r0, #1 + str r0, [r8, #0x1c] + ldr r0, [r8, #0x14] + cmp r0, #0 + beq _021FC584 + ldr r0, [r8, #0x1c] + cmp r0, #0 + bne _021FC584 + mov r0, r8 + bl FUN_021FF9CC + add sp, sp, #8 + mov r0, #0 + ldmia sp!, {r4, r5, r6, r7, r8, pc} +_021FC584: + mov r0, #1 + add sp, sp, #8 + ldmia sp!, {r4, r5, r6, r7, r8, pc} + .align 2, 0 +_021FC590: .word 0x0220EF5C +_021FC594: .word 0x0220EF64 +_021FC598: .word 0x00000197 + + arm_func_start FUN_021FC59C +FUN_021FC59C: ; 0x021FC59C + stmdb sp!, {r4, r5, r6, r7, lr} + sub sp, sp, #0xc + movs r7, r0 + mov r6, r1 + mov r5, r2 + mov r4, r3 + bne _021FC5CC + ldr r0, _021FC6BC ; =0x0220EF5C + ldr r1, _021FC6C0 ; =0x0220EF64 + mov r2, #0 + mov r3, #0x160 + bl __msl_assertion_failed +_021FC5CC: + cmp r7, #0 + addeq sp, sp, #0xc + moveq r0, #1 + ldmeqia sp!, {r4, r5, r6, r7, pc} + ldr r0, [sp, #0x2c] + cmp r0, #0 + ldrne ip, [r7, #0x28] + ldreq ip, [r7, #0x2c] + cmp ip, #0 + addeq sp, sp, #0xc + moveq r0, #1 + ldmeqia sp!, {r4, r5, r6, r7, pc} + ldr r0, [sp, #0x28] + cmp r0, #0 + beq _021FC614 + ldr r0, [sp, #0x24] + cmp r0, #0 + bne _021FC620 +_021FC614: + mov r0, #0 + str r0, [sp, #0x24] + str r0, [sp, #0x28] +_021FC620: + ldr r0, [r7, #0x1c] + cmp r6, #0 + add r0, r0, #1 + str r0, [r7, #0x1c] + ldrne r0, [r6, #0x24] + ldr r1, [sp, #0x20] + addne r0, r0, #1 + strne r0, [r6, #0x24] + str r1, [sp] + ldr r0, [sp, #0x24] + ldr lr, [sp, #0x28] + str r0, [sp, #4] + mov r0, r7 + mov r1, r6 + mov r2, r5 + mov r3, r4 + str lr, [sp, #8] + blx ip + ldr r0, [r7, #0x1c] + cmp r6, #0 + sub r0, r0, #1 + str r0, [r7, #0x1c] + ldrne r0, [r6, #0x24] + subne r0, r0, #1 + strne r0, [r6, #0x24] + ldr r0, [r7, #0x14] + cmp r0, #0 + beq _021FC6B0 + ldr r0, [r7, #0x1c] + cmp r0, #0 + bne _021FC6B0 + mov r0, r7 + bl FUN_021FF9CC + add sp, sp, #0xc + mov r0, #0 + ldmia sp!, {r4, r5, r6, r7, pc} +_021FC6B0: + mov r0, #1 + add sp, sp, #0xc + ldmia sp!, {r4, r5, r6, r7, pc} + .align 2, 0 +_021FC6BC: .word 0x0220EF5C +_021FC6C0: .word 0x0220EF64 + + arm_func_start FUN_021FC6C4 +FUN_021FC6C4: ; 0x021FC6C4 + stmdb sp!, {r4, r5, r6, r7, lr} + sub sp, sp, #4 + movs r7, r0 + mov r6, r1 + mov r5, r2 + mov r4, r3 + bne _021FC6F4 + ldr r0, _021FC7C8 ; =0x0220EF74 + ldr r1, _021FC7CC ; =0x0220EF64 + ldr r3, _021FC7D0 ; =0x0000012D + mov r2, #0 + bl __msl_assertion_failed +_021FC6F4: + cmp r7, #0 + addeq sp, sp, #4 + moveq r0, #1 + ldmeqia sp!, {r4, r5, r6, r7, pc} + ldr r0, [r7, #0x9c] + mov r1, r6 + bl FUN_021EEFFC + movs lr, r0 + addeq sp, sp, #4 + moveq r0, #1 + ldmeqia sp!, {r4, r5, r6, r7, pc} + cmp r4, #0 + beq _021FC730 + cmp r5, #0 + bne _021FC738 +_021FC730: + mov r5, #0 + mov r4, r5 +_021FC738: + ldr r0, [r7, #0x24] + ldr r2, [sp, #0x18] + add r0, r0, #1 + str r0, [r7, #0x24] + ldr ip, [r7, #8] + mov r0, r7 + ldr r3, [ip, #0x1c] + mov r1, r6 + add r3, r3, #1 + str r3, [ip, #0x1c] + str r2, [sp] + ldr r6, [lr] + mov r2, r5 + mov r3, r4 + blx r6 + ldr r0, [r7, #0x24] + sub r0, r0, #1 + str r0, [r7, #0x24] + ldr r1, [r7, #8] + ldr r0, [r1, #0x1c] + sub r0, r0, #1 + str r0, [r1, #0x1c] + ldr r0, [r7, #8] + ldr r1, [r0, #0x14] + cmp r1, #0 + beq _021FC7BC + ldr r1, [r0, #0x1c] + cmp r1, #0 + bne _021FC7BC + bl FUN_021FF9CC + add sp, sp, #4 + mov r0, #0 + ldmia sp!, {r4, r5, r6, r7, pc} +_021FC7BC: + mov r0, #1 + add sp, sp, #4 + ldmia sp!, {r4, r5, r6, r7, pc} + .align 2, 0 +_021FC7C8: .word 0x0220EF74 +_021FC7CC: .word 0x0220EF64 +_021FC7D0: .word 0x0000012D + + arm_func_start FUN_021FC7D4 +FUN_021FC7D4: ; 0x021FC7D4 + stmdb sp!, {r4, r5, r6, r7, lr} + sub sp, sp, #4 + movs r7, r0 + mov r6, r1 + mov r5, r2 + mov r4, r3 + bne _021FC804 + ldr r0, _021FC8D8 ; =0x0220EF74 + ldr r1, _021FC8DC ; =0x0220EF64 + ldr r3, _021FC8E0 ; =0x00000101 + mov r2, #0 + bl __msl_assertion_failed +_021FC804: + cmp r7, #0 + addeq sp, sp, #4 + moveq r0, #1 + ldmeqia sp!, {r4, r5, r6, r7, pc} + ldr r0, [r7, #0x98] + mov r1, r6 + bl FUN_021EEFFC + movs lr, r0 + addeq sp, sp, #4 + moveq r0, #1 + ldmeqia sp!, {r4, r5, r6, r7, pc} + cmp r4, #0 + beq _021FC840 + cmp r5, #0 + bne _021FC848 +_021FC840: + mov r5, #0 + mov r4, r5 +_021FC848: + ldr r0, [r7, #0x24] + ldr r2, [sp, #0x18] + add r0, r0, #1 + str r0, [r7, #0x24] + ldr ip, [r7, #8] + mov r0, r7 + ldr r3, [ip, #0x1c] + mov r1, r6 + add r3, r3, #1 + str r3, [ip, #0x1c] + str r2, [sp] + ldr r6, [lr] + mov r2, r5 + mov r3, r4 + blx r6 + ldr r0, [r7, #0x24] + sub r0, r0, #1 + str r0, [r7, #0x24] + ldr r1, [r7, #8] + ldr r0, [r1, #0x1c] + sub r0, r0, #1 + str r0, [r1, #0x1c] + ldr r0, [r7, #8] + ldr r1, [r0, #0x14] + cmp r1, #0 + beq _021FC8CC + ldr r1, [r0, #0x1c] + cmp r1, #0 + bne _021FC8CC + bl FUN_021FF9CC + add sp, sp, #4 + mov r0, #0 + ldmia sp!, {r4, r5, r6, r7, pc} +_021FC8CC: + mov r0, #1 + add sp, sp, #4 + ldmia sp!, {r4, r5, r6, r7, pc} + .align 2, 0 +_021FC8D8: .word 0x0220EF74 +_021FC8DC: .word 0x0220EF64 +_021FC8E0: .word 0x00000101 + + arm_func_start FUN_021FC8E4 +FUN_021FC8E4: ; 0x021FC8E4 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #4 + movs r4, r0 + mov r5, r1 + bne _021FC90C + ldr r0, _021FC9B0 ; =0x0220EF74 + ldr r1, _021FC9B4 ; =0x0220EF64 + mov r2, #0 + mov r3, #0xd9 + bl __msl_assertion_failed +_021FC90C: + cmp r4, #0 + addeq sp, sp, #4 + moveq r0, #1 + ldmeqia sp!, {r4, r5, pc} + ldr r0, [r4, #0x34] + cmp r0, #0 + addeq sp, sp, #4 + moveq r0, #1 + ldmeqia sp!, {r4, r5, pc} + ldr r1, [r4, #0x24] + mov r0, r4 + add r1, r1, #1 + str r1, [r4, #0x24] + ldr r3, [r4, #8] + mov r1, r5 + ldr r2, [r3, #0x1c] + add r2, r2, #1 + str r2, [r3, #0x1c] + ldr r2, [r4, #0x34] + blx r2 + ldr r0, [r4, #0x24] + sub r0, r0, #1 + str r0, [r4, #0x24] + ldr r1, [r4, #8] + ldr r0, [r1, #0x1c] + sub r0, r0, #1 + str r0, [r1, #0x1c] + ldr r0, [r4, #8] + ldr r1, [r0, #0x14] + cmp r1, #0 + beq _021FC9A4 + ldr r1, [r0, #0x1c] + cmp r1, #0 + bne _021FC9A4 + bl FUN_021FF9CC + add sp, sp, #4 + mov r0, #0 + ldmia sp!, {r4, r5, pc} +_021FC9A4: + mov r0, #1 + add sp, sp, #4 + ldmia sp!, {r4, r5, pc} + .align 2, 0 +_021FC9B0: .word 0x0220EF74 +_021FC9B4: .word 0x0220EF64 + + arm_func_start FUN_021FC9B8 +FUN_021FC9B8: ; 0x021FC9B8 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #4 + movs r4, r0 + mov r5, r1 + bne _021FC9E0 + ldr r0, _021FCA84 ; =0x0220EF74 + ldr r1, _021FCA88 ; =0x0220EF64 + mov r2, #0 + mov r3, #0xba + bl __msl_assertion_failed +_021FC9E0: + cmp r4, #0 + addeq sp, sp, #4 + moveq r0, #1 + ldmeqia sp!, {r4, r5, pc} + ldr r0, [r4, #0x30] + cmp r0, #0 + addeq sp, sp, #4 + moveq r0, #1 + ldmeqia sp!, {r4, r5, pc} + ldr r1, [r4, #0x24] + mov r0, r4 + add r1, r1, #1 + str r1, [r4, #0x24] + ldr r3, [r4, #8] + mov r1, r5 + ldr r2, [r3, #0x1c] + add r2, r2, #1 + str r2, [r3, #0x1c] + ldr r2, [r4, #0x30] + blx r2 + ldr r0, [r4, #0x24] + sub r0, r0, #1 + str r0, [r4, #0x24] + ldr r1, [r4, #8] + ldr r0, [r1, #0x1c] + sub r0, r0, #1 + str r0, [r1, #0x1c] + ldr r0, [r4, #8] + ldr r1, [r0, #0x14] + cmp r1, #0 + beq _021FCA78 + ldr r1, [r0, #0x1c] + cmp r1, #0 + bne _021FCA78 + bl FUN_021FF9CC + add sp, sp, #4 + mov r0, #0 + ldmia sp!, {r4, r5, pc} +_021FCA78: + mov r0, #1 + add sp, sp, #4 + ldmia sp!, {r4, r5, pc} + .align 2, 0 +_021FCA84: .word 0x0220EF74 +_021FCA88: .word 0x0220EF64 + + arm_func_start FUN_021FCA8C +FUN_021FCA8C: ; 0x021FCA8C + stmdb sp!, {r4, r5, r6, r7, lr} + sub sp, sp, #4 + movs r7, r0 + mov r6, r1 + mov r5, r2 + mov r4, r3 + bne _021FCABC + ldr r0, _021FCB80 ; =0x0220EF74 + ldr r1, _021FCB84 ; =0x0220EF64 + mov r2, #0 + mov r3, #0x94 + bl __msl_assertion_failed +_021FCABC: + cmp r7, #0 + addeq sp, sp, #4 + moveq r0, #1 + ldmeqia sp!, {r4, r5, r6, r7, pc} + ldr r0, [r7, #0x2c] + cmp r0, #0 + addeq sp, sp, #4 + moveq r0, #1 + ldmeqia sp!, {r4, r5, r6, r7, pc} + cmp r5, #0 + beq _021FCAF0 + cmp r6, #0 + bne _021FCAF8 +_021FCAF0: + mov r6, #0 + mov r5, r6 +_021FCAF8: + ldr r1, [r7, #0x24] + mov r0, r7 + add r1, r1, #1 + str r1, [r7, #0x24] + ldr ip, [r7, #8] + mov r1, r6 + ldr r3, [ip, #0x1c] + mov r2, r5 + add r3, r3, #1 + str r3, [ip, #0x1c] + ldr r5, [r7, #0x2c] + mov r3, r4 + blx r5 + ldr r0, [r7, #0x24] + sub r0, r0, #1 + str r0, [r7, #0x24] + ldr r1, [r7, #8] + ldr r0, [r1, #0x1c] + sub r0, r0, #1 + str r0, [r1, #0x1c] + ldr r0, [r7, #8] + ldr r1, [r0, #0x14] + cmp r1, #0 + beq _021FCB74 + ldr r1, [r0, #0x1c] + cmp r1, #0 + bne _021FCB74 + bl FUN_021FF9CC + add sp, sp, #4 + mov r0, #0 + ldmia sp!, {r4, r5, r6, r7, pc} +_021FCB74: + mov r0, #1 + add sp, sp, #4 + ldmia sp!, {r4, r5, r6, r7, pc} + .align 2, 0 +_021FCB80: .word 0x0220EF74 +_021FCB84: .word 0x0220EF64 + + arm_func_start FUN_021FCB88 +FUN_021FCB88: ; 0x021FCB88 + stmdb sp!, {r4, r5, r6, r7, lr} + sub sp, sp, #4 + movs r7, r0 + mov r6, r1 + mov r5, r2 + mov r4, r3 + bne _021FCBB8 + ldr r0, _021FCC80 ; =0x0220EF74 + ldr r1, _021FCC84 ; =0x0220EF64 + mov r2, #0 + mov r3, #0x69 + bl __msl_assertion_failed +_021FCBB8: + cmp r7, #0 + addeq sp, sp, #4 + moveq r0, #1 + ldmeqia sp!, {r4, r5, r6, r7, pc} + str r6, [r7, #0x18] + ldr r0, [r7, #0x28] + cmp r0, #0 + addeq sp, sp, #4 + moveq r0, #1 + ldmeqia sp!, {r4, r5, r6, r7, pc} + cmp r4, #0 + beq _021FCBF0 + cmp r5, #0 + bne _021FCBF8 +_021FCBF0: + mov r5, #0 + mov r4, r5 +_021FCBF8: + ldr r1, [r7, #0x24] + mov r0, r7 + add r1, r1, #1 + str r1, [r7, #0x24] + ldr ip, [r7, #8] + mov r1, r6 + ldr r3, [ip, #0x1c] + mov r2, r5 + add r3, r3, #1 + str r3, [ip, #0x1c] + ldr r5, [r7, #0x28] + mov r3, r4 + blx r5 + ldr r0, [r7, #0x24] + sub r0, r0, #1 + str r0, [r7, #0x24] + ldr r1, [r7, #8] + ldr r0, [r1, #0x1c] + sub r0, r0, #1 + str r0, [r1, #0x1c] + ldr r0, [r7, #8] + ldr r1, [r0, #0x14] + cmp r1, #0 + beq _021FCC74 + ldr r1, [r0, #0x1c] + cmp r1, #0 + bne _021FCC74 + bl FUN_021FF9CC + add sp, sp, #4 + mov r0, #0 + ldmia sp!, {r4, r5, r6, r7, pc} +_021FCC74: + mov r0, #1 + add sp, sp, #4 + ldmia sp!, {r4, r5, r6, r7, pc} + .align 2, 0 +_021FCC80: .word 0x0220EF74 +_021FCC84: .word 0x0220EF64 + + arm_func_start FUN_021FCC88 +FUN_021FCC88: ; 0x021FCC88 + stmdb sp!, {r4, r5, r6, r7, lr} + sub sp, sp, #0xc + movs r7, r0 + mov r6, r1 + mov r5, r2 + mov r4, r3 + beq _021FCCAC + cmp r6, #0 + bne _021FCCC0 +_021FCCAC: + ldr r0, _021FCDAC ; =0x0220EF80 + ldr r1, _021FCDB0 ; =0x0220EF64 + mov r2, #0 + mov r3, #0x3d + bl __msl_assertion_failed +_021FCCC0: + cmp r7, #0 + beq _021FCCD0 + cmp r6, #0 + bne _021FCCDC +_021FCCD0: + add sp, sp, #0xc + mov r0, #1 + ldmia sp!, {r4, r5, r6, r7, pc} +_021FCCDC: + ldr r0, [r7, #0x20] + cmp r0, #0 + addeq sp, sp, #0xc + moveq r0, #1 + ldmeqia sp!, {r4, r5, r6, r7, pc} + ldr r0, [sp, #0x28] + cmp r0, #0 + beq _021FCD08 + ldr r0, [sp, #0x24] + cmp r0, #0 + bne _021FCD14 +_021FCD08: + mov r0, #0 + str r0, [sp, #0x24] + str r0, [sp, #0x28] +_021FCD14: + ldr r1, [r7, #0x1c] + ldr r0, [sp, #0x20] + add r1, r1, #1 + str r1, [r7, #0x1c] + ldr r2, [r6, #0x24] + ldr r1, [sp, #0x24] + add r2, r2, #1 + str r2, [r6, #0x24] + str r0, [sp] + ldr r0, [sp, #0x28] + str r1, [sp, #4] + str r0, [sp, #8] + ldr ip, [r7, #0x20] + mov r0, r7 + mov r1, r6 + mov r2, r5 + mov r3, r4 + blx ip + ldr r0, [r7, #0x1c] + sub r0, r0, #1 + str r0, [r7, #0x1c] + ldr r0, [r6, #0x24] + sub r0, r0, #1 + str r0, [r6, #0x24] + ldr r0, [r7, #0x14] + cmp r0, #0 + beq _021FCDA0 + ldr r0, [r7, #0x1c] + cmp r0, #0 + bne _021FCDA0 + mov r0, r7 + bl FUN_021FF9CC + add sp, sp, #0xc + mov r0, #0 + ldmia sp!, {r4, r5, r6, r7, pc} +_021FCDA0: + mov r0, #1 + add sp, sp, #0xc + ldmia sp!, {r4, r5, r6, r7, pc} + .align 2, 0 +_021FCDAC: .word 0x0220EF80 +_021FCDB0: .word 0x0220EF64 + + arm_func_start FUN_021FCDB4 +FUN_021FCDB4: ; 0x021FCDB4 + stmdb sp!, {r4, lr} + movs r4, r0 + bne _021FCDD4 + ldr r0, _021FCE44 ; =0x0220EF5C + ldr r1, _021FCE48 ; =0x0220EF64 + mov r2, #0 + mov r3, #0x1b + bl __msl_assertion_failed +_021FCDD4: + cmp r4, #0 + moveq r0, #1 + ldmeqia sp!, {r4, pc} + ldr r0, [r4, #0x24] + cmp r0, #0 + moveq r0, #1 + ldmeqia sp!, {r4, pc} + ldr r1, [r4, #0x1c] + mov r0, r4 + add r1, r1, #1 + str r1, [r4, #0x1c] + ldr r1, [r4, #0x24] + blx r1 + ldr r0, [r4, #0x1c] + sub r0, r0, #1 + str r0, [r4, #0x1c] + ldr r0, [r4, #0x14] + cmp r0, #0 + beq _021FCE3C + ldr r0, [r4, #0x1c] + cmp r0, #0 + bne _021FCE3C + mov r0, r4 + bl FUN_021FF9CC + mov r0, #0 + ldmia sp!, {r4, pc} +_021FCE3C: + mov r0, #1 + ldmia sp!, {r4, pc} + .align 2, 0 +_021FCE44: .word 0x0220EF5C +_021FCE48: .word 0x0220EF64 + + arm_func_start FUN_021FCE4C +FUN_021FCE4C: ; 0x021FCE4C + stmdb sp!, {r4, lr} + mov r4, r0 + ldr r0, [r4, #0x38] + cmp r0, #0 + beq _021FCE64 + bl FUN_021DD82C +_021FCE64: + ldr r0, [r4, #0x44] + cmp r0, #0 + beq _021FCE74 + bl FUN_021DD82C +_021FCE74: + ldr r0, [r4, #0x50] + cmp r0, #0 + beq _021FCE84 + bl FUN_021DD82C +_021FCE84: + ldr r0, [r4, #0x5c] + cmp r0, #0 + beq _021FCE94 + bl FUN_021EF074 +_021FCE94: + ldr r0, [r4, #0x60] + cmp r0, #0 + beq _021FCEA4 + bl FUN_021EF074 +_021FCEA4: + ldr r0, [r4, #0x98] + cmp r0, #0 + beq _021FCEB4 + bl FUN_021EF074 +_021FCEB4: + ldr r0, [r4, #0x9c] + cmp r0, #0 + beq _021FCEC4 + bl FUN_021EF074 +_021FCEC4: + mov r0, r4 + bl FUN_021DD82C + ldmia sp!, {r4, pc} + + arm_func_start FUN_021FCED0 +FUN_021FCED0: ; 0x021FCED0 + stmdb sp!, {r0, r1, r2, r3} + stmdb sp!, {lr} + sub sp, sp, #4 + ldr r1, [sp, #8] + ldr r0, [r1, #0xc] + cmp r0, #7 + addeq sp, sp, #4 + ldmeqia sp!, {lr} + addeq sp, sp, #0x10 + bxeq lr + mov r0, #7 + str r0, [r1, #0xc] + ldr r0, [sp, #8] + add r1, sp, #8 + ldr r0, [r0, #8] + ldr r0, [r0, #0xc] + bl FUN_021EF3F4 + ldr r0, [sp, #8] + add r1, sp, #8 + ldr r0, [r0, #8] + ldr r0, [r0, #0x10] + bl FUN_021EEFA8 + add sp, sp, #4 + ldmia sp!, {lr} + add sp, sp, #0x10 + bx lr + + arm_func_start FUN_021FCF38 +FUN_021FCF38: ; 0x021FCF38 + stmdb sp!, {r4, lr} + mov r4, r0 + cmp r1, #0 + beq _021FCF78 + ldr r1, [r4, #0xc] + cmp r1, #7 + ldmgeia sp!, {r4, pc} + bl FUN_021FCED0 + mov r0, r4 + bl FUN_021FD828 + mov r0, r4 + mov r1, #0 + bl FUN_021FC9B8 + mov r0, r4 + bl FUN_021FF6BC + ldmia sp!, {r4, pc} +_021FCF78: + mov r1, #6 + str r1, [r4, #0xc] + bl FUN_021FDA74 + ldmia sp!, {r4, pc} + + arm_func_start FUN_021FCF88 +FUN_021FCF88: ; 0x021FCF88 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #4 + mov r5, r0 + mov r4, r1 + bl FUN_021FD108 + cmp r0, #0 + addeq sp, sp, #4 + moveq r0, #0 + ldmeqia sp!, {r4, r5, pc} + mov r0, r5 + mov r1, r4 + bl FUN_021FD004 + cmp r0, #0 + addeq sp, sp, #4 + moveq r0, #0 + ldmeqia sp!, {r4, r5, pc} + mov r0, r5 + mov r1, r4 + bl FUN_021FD090 + cmp r0, #0 + addeq sp, sp, #4 + moveq r0, #0 + ldmeqia sp!, {r4, r5, pc} + mov r0, r5 + mov r1, r4 + bl FUN_021FD044 + cmp r0, #0 + movne r0, #1 + moveq r0, #0 + add sp, sp, #4 + ldmia sp!, {r4, r5, pc} + + arm_func_start FUN_021FD004 +FUN_021FD004: ; 0x021FD004 + stmdb sp!, {lr} + sub sp, sp, #4 + ldr r3, [r0, #0x88] + ldr r2, _021FD040 ; =0x00007530 + sub r1, r1, r3 + cmp r1, r2 + bls _021FD034 + bl FUN_021FDA18 + cmp r0, #0 + addeq sp, sp, #4 + moveq r0, #0 + ldmeqia sp!, {pc} +_021FD034: + mov r0, #1 + add sp, sp, #4 + ldmfd sp!, {pc} + .align 2, 0 +_021FD040: .word 0x00007530 + + arm_func_start FUN_021FD044 +FUN_021FD044: ; 0x021FD044 + stmdb sp!, {lr} + sub sp, sp, #4 + ldr r2, [r0, #0x90] + cmp r2, #0 + addeq sp, sp, #4 + moveq r0, #1 + ldmeqia sp!, {pc} + ldr r2, [r0, #0x94] + sub r1, r1, r2 + cmp r1, #0x64 + bls _021FD084 + bl FUN_021FD8E4 + cmp r0, #0 + addeq sp, sp, #4 + moveq r0, #0 + ldmeqia sp!, {pc} +_021FD084: + mov r0, #1 + add sp, sp, #4 + ldmfd sp!, {pc} + + arm_func_start FUN_021FD090 +FUN_021FD090: ; 0x021FD090 + stmdb sp!, {r4, r5, r6, r7, lr} + sub sp, sp, #4 + mov r7, r0 + ldr r0, [r7, #0x60] + mov r6, r1 + bl FUN_021EF06C + mov r4, r0 + cmp r4, #0 + mov r5, #0 + ble _021FD0FC +_021FD0B8: + ldr r0, [r7, #0x60] + mov r1, r5 + bl FUN_021EEFFC + mov r1, r0 + ldr r0, [r1, #0xc] + sub r0, r6, r0 + cmp r0, #0x3e8 + bls _021FD0F0 + mov r0, r7 + bl FUN_021FD760 + cmp r0, #0 + addeq sp, sp, #4 + moveq r0, #0 + ldmeqia sp!, {r4, r5, r6, r7, pc} +_021FD0F0: + add r5, r5, #1 + cmp r5, r4 + blt _021FD0B8 +_021FD0FC: + mov r0, #1 + add sp, sp, #4 + ldmia sp!, {r4, r5, r6, r7, pc} + + arm_func_start FUN_021FD108 +FUN_021FD108: ; 0x021FD108 + stmdb sp!, {r4, lr} + mov r4, r0 + ldr r2, [r4, #0xc] + cmp r2, #5 + bge _021FD1A0 + ldr r0, [r4, #0x10] + mov r3, #0 + cmp r0, #0 + beq _021FD14C + ldr r2, [r4, #0x20] + cmp r2, #0 + beq _021FD168 + ldr r0, [r4, #0x1c] + sub r0, r1, r0 + cmp r0, r2 + movhi r3, #1 + b _021FD168 +_021FD14C: + cmp r2, #4 + bge _021FD168 + ldr r2, [r4, #0x1c] + ldr r0, _021FD1A8 ; =0x0000EA60 + sub r1, r1, r2 + cmp r1, r0 + movhi r3, #1 +_021FD168: + cmp r3, #0 + beq _021FD1A0 + mov r0, r4 + bl FUN_021FD828 + mov r0, r4 + bl FUN_021FCED0 + mov r2, #0 + mov r0, r4 + mov r3, r2 + mov r1, #6 + bl FUN_021FCB88 + cmp r0, #0 + moveq r0, #0 + ldmeqia sp!, {r4, pc} +_021FD1A0: + mov r0, #1 + ldmia sp!, {r4, pc} + .align 2, 0 +_021FD1A8: .word 0x0000EA60 + + arm_func_start FUN_021FD1AC +FUN_021FD1AC: ; 0x021FD1AC + stmdb sp!, {r4, lr} + sub sp, sp, #8 + mov r4, r0 + str r2, [sp] + mov r3, r1 + ldrh r2, [r4, #4] + ldr r0, [r4, #8] + ldr r1, [r4] + bl FUN_021FF50C + cmp r0, #0 + addeq sp, sp, #8 + moveq r0, #0 + ldmeqia sp!, {r4, pc} + bl FUN_021F025C + str r0, [r4, #0x88] + mov r0, #1 + add sp, sp, #8 + ldmia sp!, {r4, pc} + + arm_func_start FUN_021FD1F4 +FUN_021FD1F4: ; 0x021FD1F4 + stmdb sp!, {r0, r1, r2, r3} + stmdb sp!, {r4, lr} + mov r4, r0 + mov r0, #0 + str r0, [r4, #0x14] + ldr r0, [r4, #0xc] + cmp r0, #4 + ldmneia sp!, {r4, lr} + addne sp, sp, #0x10 + bxne lr + add r0, sp, #0xc + add r1, sp, #0x10 + bl FUN_021FFCDC + ldr r1, [sp, #0xc] + ldr r2, [sp, #0x10] + mov r0, r4 + bl FUN_021FDAD0 + mov r0, #6 + str r0, [r4, #0xc] + ldmia sp!, {r4, lr} + add sp, sp, #0x10 + bx lr + + arm_func_start FUN_021FD24C +FUN_021FD24C: ; 0x021FD24C + stmdb sp!, {r4, r5, lr} + sub sp, sp, #4 + mov r5, r0 + ldr r2, [r5, #0x14] + mov r4, r1 + cmp r2, #0 + movne r0, #0 + addne sp, sp, #4 + strne r0, [r5, #0x14] + ldmneia sp!, {r4, r5, pc} + mov r2, #0 + str r2, [r5, #0x14] + ldr r1, [r5, #0xc] + cmp r1, #4 + addne sp, sp, #4 + movne r0, r2 + ldmneia sp!, {r4, r5, pc} + bl FUN_021FDB44 + mov r0, #5 + cmp r4, #0 + str r0, [r5, #0xc] + addne ip, r5, #0x28 + ldmneia r4, {r0, r1, r2, r3} + stmneia ip, {r0, r1, r2, r3} + mov r0, #1 + add sp, sp, #4 + ldmia sp!, {r4, r5, pc} + + arm_func_start FUN_021FD2B8 +FUN_021FD2B8: ; 0x021FD2B8 + stmdb sp!, {r0, r1, r2, r3} + stmdb sp!, {r4, r5, lr} + sub sp, sp, #0x24 + mov r5, r0 + add r0, sp, #0x34 + add r1, sp, #0x38 + mov r4, r3 + bl FUN_021FFCDC + ldr r0, [sp, #0x38] + cmp r0, #0 + ble _021FD31C + bl FUN_021DD860 + str r0, [r5, #0x38] + ldr r0, [r5, #0x38] + cmp r0, #0 + addeq sp, sp, #0x24 + moveq r0, #1 + ldmeqia sp!, {r4, r5, lr} + addeq sp, sp, #0x10 + bxeq lr + ldr r1, [sp, #0x34] + ldr r2, [sp, #0x38] + bl memcpy + ldr r0, [sp, #0x38] + str r0, [r5, #0x3c] +_021FD31C: + cmp r4, #0 + addne ip, r5, #0x28 + ldmneia r4, {r0, r1, r2, r3} + stmneia ip, {r0, r1, r2, r3} + add r0, sp, #0 + bl FUN_021FC07C + add r1, sp, #0 + add r0, r5, #0x68 + bl FUN_021FBF44 + add r1, sp, #0 + mov r0, r5 + bl FUN_021FDCB4 + mov r0, #0 + str r0, [r5, #0xc] + add sp, sp, #0x24 + ldmia sp!, {r4, r5, lr} + add sp, sp, #0x10 + bx lr + + arm_func_start FUN_021FD364 +FUN_021FD364: ; 0x021FD364 + stmdb sp!, {r4, lr} + mov r4, r1 + bl FUN_021FF790 + cmp r0, #0 + ldmneia sp!, {r4, pc} + ldr r0, [r4] + mov r1, #2 + str r1, [r0, #0xc] + ldr r1, [r4] + mov r0, #0 + str r0, [r1, #0x10] + ldmia sp!, {r4, pc} + + arm_func_start FUN_021FD394 +FUN_021FD394: ; 0x021FD394 + stmdb sp!, {r4, lr} + mov r4, r1 + bl FUN_021FF790 + cmp r0, #0 + ldmneia sp!, {r4, pc} + ldr r1, [r4] + mov r0, #0 + str r0, [r1, #0xc] + ldr r1, [r4] + mov r2, #1 + str r2, [r1, #0x10] + ldmia sp!, {r4, pc} + + arm_func_start FUN_021FD3C4 +FUN_021FD3C4: ; 0x021FD3C4 + stmdb sp!, {r4, lr} + movs r4, r0 + bne _021FD3E4 + ldr r0, _021FD3EC ; =0x0220EF98 + ldr r1, _021FD3F0 ; =0x0220EFA4 + ldr r3, _021FD3F4 ; =0x000001A3 + mov r2, #0 + bl __msl_assertion_failed +_021FD3E4: + ldr r0, [r4, #0x40] + ldmia sp!, {r4, pc} + .align 2, 0 +_021FD3EC: .word 0x0220EF98 +_021FD3F0: .word 0x0220EFA4 +_021FD3F4: .word 0x000001A3 + + arm_func_start FUN_021FD3F8 +FUN_021FD3F8: ; 0x021FD3F8 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #4 + movs r5, r0 + mov r4, r1 + bne _021FD420 + ldr r0, _021FD42C ; =0x0220EF98 + ldr r1, _021FD430 ; =0x0220EFA4 + mov r2, #0 + mov r3, #0x19c + bl __msl_assertion_failed +_021FD420: + str r4, [r5, #0x40] + add sp, sp, #4 + ldmia sp!, {r4, r5, pc} + .align 2, 0 +_021FD42C: .word 0x0220EF98 +_021FD430: .word 0x0220EFA4 + + arm_func_start FUN_021FD434 +FUN_021FD434: ; 0x021FD434 + str r1, [r0, #0x30] + bx lr + + arm_func_start FUN_021FD43C +FUN_021FD43C: ; 0x021FD43C + ldr r0, [r0] + bx lr + + arm_func_start FUN_021FD444 +FUN_021FD444: ; 0x021FD444 + ldr r1, [r0, #0x54] + ldr r0, [r0, #0x58] + sub r0, r1, r0 + bx lr + + arm_func_start FUN_021FD454 +FUN_021FD454: ; 0x021FD454 + ldrh r0, [r0, #8] + bx lr + + arm_func_start FUN_021FD45C +FUN_021FD45C: ; 0x021FD45C + ldr ip, _021FD470 ; =FUN_021EF2E4 + ldr r0, [r0, #0xc] + ldr r1, _021FD474 ; =FUN_021FD478 + mov r2, #0 + bx ip + .align 2, 0 +_021FD470: .word FUN_021EF2E4 +_021FD474: .word FUN_021FD478 + + arm_func_start FUN_021FD478 +FUN_021FD478: ; 0x021FD478 + ldr ip, _021FD484 ; =FUN_021FD488 + ldr r0, [r0] + bx ip + .align 2, 0 +_021FD484: .word FUN_021FD488 + + arm_func_start FUN_021FD488 +FUN_021FD488: ; 0x021FD488 + ldr ip, _021FD494 ; =FUN_021FCF38 + mov r1, #1 + bx ip + .align 2, 0 +_021FD494: .word FUN_021FCF38 + + arm_func_start FUN_021FD498 +FUN_021FD498: ; 0x021FD498 + stmdb sp!, {r0, r1, r2, r3} + stmdb sp!, {r4, r5, lr} + sub sp, sp, #4 + mov r5, r0 + ldr r0, [r5, #0xc] + mov r4, r3 + cmp r0, #5 + addne sp, sp, #4 + ldmneia sp!, {r4, r5, lr} + addne sp, sp, #0x10 + bxne lr + add r0, sp, #0x14 + add r1, sp, #0x18 + bl FUN_021FFCDC + ldr r0, [r5, #0x98] + bl FUN_021EF06C + cmp r0, #0 + beq _021FD508 + str r4, [sp] + ldr r2, [sp, #0x14] + ldr r3, [sp, #0x18] + mov r0, r5 + mov r1, #0 + bl FUN_021FC7D4 + add sp, sp, #4 + ldmia sp!, {r4, r5, lr} + add sp, sp, #0x10 + bx lr +_021FD508: + ldr r1, [sp, #0x14] + ldr r2, [sp, #0x18] + mov r0, r5 + mov r3, r4 + bl FUN_021FD738 + add sp, sp, #4 + ldmia sp!, {r4, r5, lr} + add sp, sp, #0x10 + bx lr + + arm_func_start FUN_021FD52C +FUN_021FD52C: ; 0x021FD52C + stmdb sp!, {r4, r5, r6, r7, r8, lr} + sub sp, sp, #0x10 + mov r6, r0 + mov r5, r1 + mov r0, r2 + add r1, sp, #8 + add r2, sp, #0 + mov r4, r3 + bl FUN_021FFD28 + cmp r0, #0 + beq _021FD570 + ldr r2, [sp, #8] + cmp r2, #0 + beq _021FD570 + ldrh r3, [sp] + cmp r3, #0 + bne _021FD57C +_021FD570: + add sp, sp, #0x10 + mov r0, #4 + ldmia sp!, {r4, r5, r6, r7, r8, pc} +_021FD57C: + mov r1, r2, lsr #0x18 + mov r0, r2, lsr #8 + mov r7, r2, lsl #8 + and r1, r1, #0xff + and r0, r0, #0xff00 + mov ip, r2, lsl #0x18 + orr r0, r1, r0 + and r7, r7, #0xff0000 + and r1, ip, #0xff000000 + orr r0, r7, r0 + orr r0, r1, r0 + and r0, r0, #0xe0000000 + cmp r0, #-0x20000000 + addeq sp, sp, #0x10 + moveq r0, #4 + ldmeqia sp!, {r4, r5, r6, r7, r8, pc} + add r1, sp, #4 + mov r0, r6 + bl FUN_021FD394 + cmp r0, #0 + addne sp, sp, #0x10 + ldmneia sp!, {r4, r5, r6, r7, r8, pc} + ldr r1, [sp, #0x2c] + ldr r0, [sp, #4] + ldr r2, [sp, #0x28] + str r1, [r0, #0x20] + ldr r0, [sp, #4] + ldr r3, [sp, #0x30] + mov r1, r4 + bl FUN_021FD2B8 + movs r4, r0 + beq _021FD610 + ldr r0, [sp, #4] + bl FUN_021FF6BC + add sp, sp, #0x10 + mov r0, r4 + ldmia sp!, {r4, r5, r6, r7, r8, pc} +_021FD610: + ldr r0, [sp, #0x34] + cmp r0, #0 + bne _021FD634 + cmp r5, #0 + ldrne r0, [sp, #4] + add sp, sp, #0x10 + strne r0, [r5] + mov r0, #0 + ldmia sp!, {r4, r5, r6, r7, r8, pc} +_021FD634: + ldr r1, [sp, #4] + ldr r0, [r1, #0x24] + add r0, r0, #1 + str r0, [r1, #0x24] + mov r4, #0 + mov r7, #1 +_021FD64C: + mov r0, r6 + bl FUN_021FD6D4 + ldr r0, [sp, #4] + ldr r0, [r0, #0xc] + cmp r0, #5 + movge r8, r7 + movlt r8, r4 + cmp r8, #0 + bne _021FD678 + mov r0, r7 + bl FUN_021F0250 +_021FD678: + cmp r8, #0 + beq _021FD64C + ldr r1, [sp, #4] + ldr r0, [r1, #0x24] + sub r0, r0, #1 + str r0, [r1, #0x24] + ldr r1, [sp, #4] + ldr r0, [r1, #0xc] + cmp r0, #5 + streq r1, [r5] + ldr r0, [sp, #4] + ldr r0, [r0, #0x18] + add sp, sp, #0x10 + ldmia sp!, {r4, r5, r6, r7, r8, pc} + + arm_func_start FUN_021FD6B0 +FUN_021FD6B0: ; 0x021FD6B0 + ldr ip, _021FD6B8 ; =FUN_021FD1F4 + bx ip + .align 2, 0 +_021FD6B8: .word FUN_021FD1F4 + + arm_func_start FUN_021FD6BC +FUN_021FD6BC: ; 0x021FD6BC + ldr ip, _021FD6C4 ; =FUN_021FD24C + bx ip + .align 2, 0 +_021FD6C4: .word FUN_021FD24C + + arm_func_start FUN_021FD6C8 +FUN_021FD6C8: ; 0x021FD6C8 + ldr ip, _021FD6D0 ; =FUN_021FF9C4 + bx ip + .align 2, 0 +_021FD6D0: .word FUN_021FF9C4 + + arm_func_start FUN_021FD6D4 +FUN_021FD6D4: ; 0x021FD6D4 + stmdb sp!, {r4, lr} + mov r4, r0 + bl FUN_021FDF60 + cmp r0, #0 + ldmeqia sp!, {r4, pc} + mov r0, r4 + bl FUN_021FF470 + cmp r0, #0 + ldmeqia sp!, {r4, pc} + mov r0, r4 + bl FUN_021FF42C + ldmia sp!, {r4, pc} + + arm_func_start FUN_021FD704 +FUN_021FD704: ; 0x021FD704 + stmdb sp!, {r4, lr} + mov r4, r0 + bl FUN_021FD45C + mov r0, r4 + bl FUN_021FF9CC + ldmia sp!, {r4, pc} + + arm_func_start FUN_021FD71C +FUN_021FD71C: ; 0x021FD71C + stmdb sp!, {lr} + sub sp, sp, #4 + ldr ip, [sp, #8] + str ip, [sp] + bl FUN_021FFA10 + add sp, sp, #4 + ldmfd sp!, {pc} + + arm_func_start FUN_021FD738 +FUN_021FD738: ; 0x021FD738 + stmdb sp!, {lr} + sub sp, sp, #4 + cmp r3, #0 + beq _021FD754 + bl FUN_021FDD24 + add sp, sp, #4 + ldmfd sp!, {pc} +_021FD754: + bl FUN_021FD94C + add sp, sp, #4 + ldmfd sp!, {pc} + + arm_func_start FUN_021FD760 +FUN_021FD760: ; 0x021FD760 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #4 + mov r4, r0 + mov r5, r1 + ldr r1, [r5] + ldrh r2, [r4, #0x66] + ldr r0, [r4, #0x50] + add r1, r1, #5 + bl FUN_021FF3BC + ldr r3, [r4, #0x50] + ldr r1, [r5] + ldr r2, [r5, #4] + mov r0, r4 + add r1, r3, r1 + bl FUN_021FD1AC + cmp r0, #0 + addeq sp, sp, #4 + moveq r0, #0 + ldmeqia sp!, {r4, r5, pc} + ldr r0, [r4, #0x88] + str r0, [r5, #0xc] + ldr r0, [r5] + ldr r1, [r4, #0x50] + add r0, r0, #2 + ldrb r0, [r1, r0] + cmp r0, #2 + ldreq r0, [r4, #0x88] + streq r0, [r4, #0x8c] + mov r0, #1 + add sp, sp, #4 + ldmia sp!, {r4, r5, pc} + + arm_func_start FUN_021FD7DC +FUN_021FD7DC: ; 0x021FD7DC + stmdb sp!, {r4, r5, lr} + sub sp, sp, #0xc + ldr r4, _021FD824 ; =0x0220EFB0 + add r3, sp, #4 + ldrb r5, [r4] + ldrb r4, [r4, #1] + mov lr, #0x68 + mov ip, #3 + strb r5, [r3] + strb r4, [r3, #1] + strb lr, [sp, #6] + str ip, [sp] + bl FUN_021FF50C + cmp r0, #0 + movne r0, #1 + moveq r0, #0 + add sp, sp, #0xc + ldmia sp!, {r4, r5, pc} + .align 2, 0 +_021FD824: .word 0x0220EFB0 + + arm_func_start FUN_021FD828 +FUN_021FD828: ; 0x021FD828 + ldr ip, _021FD840 ; =FUN_021FD7DC + mov r1, r0 + ldrh r2, [r1, #4] + ldr r0, [r1, #8] + ldr r1, [r1] + bx ip + .align 2, 0 +_021FD840: .word FUN_021FD7DC + + arm_func_start FUN_021FD844 +FUN_021FD844: ; 0x021FD844 + ldr ip, _021FD854 ; =FUN_021FD1AC + mov r3, #0x67 + strb r3, [r1, #2] + bx ip + .align 2, 0 +_021FD854: .word FUN_021FD1AC + + arm_func_start FUN_021FD858 +FUN_021FD858: ; 0x021FD858 + stmdb sp!, {r4, r5, r6, r7, lr} + sub sp, sp, #0xc + ldr r3, _021FD8E0 ; =0x0220EFB0 + mov r4, r0 + ldrb ip, [r3] + ldrb r3, [r3, #1] + add r0, sp, #0 + mov r7, r1 + strb ip, [r0] + mov r6, r2 + strb r3, [r0, #1] + mov r3, #0x65 + mov r2, r7 + mov r5, #0 + mov r1, #3 + strb r3, [sp, #2] + bl FUN_021FF3BC + cmp r7, r6 + add r5, r5, #5 + beq _021FD8BC + add r0, sp, #0 + mov r1, r5 + mov r2, r6 + bl FUN_021FF3BC + add r5, r5, #2 +_021FD8BC: + add r1, sp, #0 + mov r0, r4 + mov r2, r5 + bl FUN_021FD1AC + cmp r0, #0 + moveq r0, #0 + movne r0, #1 + add sp, sp, #0xc + ldmia sp!, {r4, r5, r6, r7, pc} + .align 2, 0 +_021FD8E0: .word 0x0220EFB0 + + arm_func_start FUN_021FD8E4 +FUN_021FD8E4: ; 0x021FD8E4 + stmdb sp!, {r4, lr} + sub sp, sp, #8 + ldr r1, _021FD948 ; =0x0220EFB0 + mov r4, r0 + ldrb r3, [r1] + ldrb r2, [r1, #1] + add r0, sp, #0 + mov r1, #0x64 + strb r3, [r0] + strb r2, [r0, #1] + strb r1, [sp, #2] + ldrh r2, [r4, #0x66] + mov r1, #3 + bl FUN_021FF3BC + add r1, sp, #0 + mov r0, r4 + mov r2, #5 + bl FUN_021FD1AC + cmp r0, #0 + moveq r0, #0 + movne r0, #0 + strne r0, [r4, #0x90] + movne r0, #1 + add sp, sp, #8 + ldmia sp!, {r4, pc} + .align 2, 0 +_021FD948: .word 0x0220EFB0 + + arm_func_start FUN_021FD94C +FUN_021FD94C: ; 0x021FD94C + stmdb sp!, {r4, r5, r6, r7, r8, lr} + mov r6, r2 + mov r8, r0 + mov r7, r1 + cmp r6, #2 + blt _021FD97C + ldr r1, _021FDA14 ; =0x0220EFB0 + mov r0, r7 + mov r2, #2 + bl memcmp + cmp r0, #0 + beq _021FD99C +_021FD97C: + mov r0, r8 + mov r1, r7 + mov r2, r6 + bl FUN_021FD1AC + cmp r0, #0 + moveq r0, #0 + movne r0, #1 + ldmia sp!, {r4, r5, r6, r7, r8, pc} +_021FD99C: + add r5, r6, #2 + add r0, r8, #0x50 + bl FUN_021FC45C + cmp r0, r5 + movlt r0, #1 + ldmltia sp!, {r4, r5, r6, r7, r8, pc} + ldr ip, [r8, #0x50] + ldr r3, [r8, #0x58] + ldr r1, _021FDA14 ; =0x0220EFB0 + add r0, r8, #0x50 + mov r2, #2 + add r4, ip, r3 + bl FUN_021FC304 + mov r1, r7 + mov r2, r6 + add r0, r8, #0x50 + bl FUN_021FC304 + mov r0, r8 + mov r1, r4 + mov r2, r5 + bl FUN_021FD1AC + cmp r0, #0 + moveq r0, #0 + ldmeqia sp!, {r4, r5, r6, r7, r8, pc} + mov r2, r5 + add r0, r8, #0x50 + mvn r1, #0 + bl FUN_021FC268 + mov r0, #1 + ldmia sp!, {r4, r5, r6, r7, r8, pc} + .align 2, 0 +_021FDA14: .word 0x0220EFB0 + + arm_func_start FUN_021FDA18 +FUN_021FDA18: ; 0x021FDA18 + stmdb sp!, {r4, lr} + sub sp, sp, #8 + mov r1, #7 + add r3, sp, #0 + mov r2, r1 + mov r4, r0 + bl FUN_021FDE18 + cmp r0, #0 + addeq sp, sp, #8 + moveq r0, #0 + ldmeqia sp!, {r4, pc} + ldr r0, [sp] + cmp r0, #0 + addne sp, sp, #8 + movne r0, #1 + ldmneia sp!, {r4, pc} + mov r0, r4 + bl FUN_021FDD98 + cmp r0, #0 + movne r0, #1 + moveq r0, #0 + add sp, sp, #8 + ldmia sp!, {r4, pc} + + arm_func_start FUN_021FDA74 +FUN_021FDA74: ; 0x021FDA74 + stmdb sp!, {r4, lr} + sub sp, sp, #8 + add r3, sp, #0 + mov r1, #6 + mov r2, #7 + mov r4, r0 + bl FUN_021FDE18 + cmp r0, #0 + addeq sp, sp, #8 + moveq r0, #0 + ldmeqia sp!, {r4, pc} + ldr r0, [sp] + cmp r0, #0 + addne sp, sp, #8 + movne r0, #1 + ldmneia sp!, {r4, pc} + mov r0, r4 + bl FUN_021FDD98 + cmp r0, #0 + movne r0, #1 + moveq r0, #0 + add sp, sp, #8 + ldmia sp!, {r4, pc} + + arm_func_start FUN_021FDAD0 +FUN_021FDAD0: ; 0x021FDAD0 + stmdb sp!, {r4, r5, r6, lr} + sub sp, sp, #8 + mov r4, r2 + mov r5, r1 + add r3, sp, #0 + add r2, r4, #7 + mov r1, #5 + mov r6, r0 + bl FUN_021FDE18 + cmp r0, #0 + addeq sp, sp, #8 + moveq r0, #0 + ldmeqia sp!, {r4, r5, r6, pc} + ldr r0, [sp] + cmp r0, #0 + addne sp, sp, #8 + movne r0, #1 + ldmneia sp!, {r4, r5, r6, pc} + mov r1, r5 + mov r2, r4 + add r0, r6, #0x50 + bl FUN_021FC304 + mov r0, r6 + bl FUN_021FDD98 + cmp r0, #0 + movne r0, #1 + moveq r0, #0 + add sp, sp, #8 + ldmia sp!, {r4, r5, r6, pc} + + arm_func_start FUN_021FDB44 +FUN_021FDB44: ; 0x021FDB44 + stmdb sp!, {r4, lr} + sub sp, sp, #8 + add r3, sp, #0 + mov r1, #4 + mov r2, #7 + mov r4, r0 + bl FUN_021FDE18 + cmp r0, #0 + addeq sp, sp, #8 + moveq r0, #0 + ldmeqia sp!, {r4, pc} + ldr r0, [sp] + cmp r0, #0 + addne sp, sp, #8 + movne r0, #1 + ldmneia sp!, {r4, pc} + mov r0, r4 + bl FUN_021FDD98 + cmp r0, #0 + movne r0, #1 + moveq r0, #0 + add sp, sp, #8 + ldmia sp!, {r4, pc} + + arm_func_start FUN_021FDBA0 +FUN_021FDBA0: ; 0x021FDBA0 + stmdb sp!, {r4, r5, r6, r7, lr} + sub sp, sp, #4 + mov r4, r3 + mov r6, r1 + mov r5, r2 + add r3, sp, #0 + add r2, r4, #0x27 + mov r1, #3 + mov r7, r0 + bl FUN_021FDE18 + cmp r0, #0 + addeq sp, sp, #4 + moveq r0, #0 + ldmeqia sp!, {r4, r5, r6, r7, pc} + ldr r0, [sp] + cmp r0, #0 + addne sp, sp, #4 + movne r0, #1 + ldmneia sp!, {r4, r5, r6, r7, pc} + mov r1, r6 + add r0, r7, #0x50 + mov r2, #0x20 + bl FUN_021FC304 + mov r1, r5 + mov r2, r4 + add r0, r7, #0x50 + bl FUN_021FC304 + mov r0, r7 + bl FUN_021FDD98 + cmp r0, #0 + movne r0, #1 + moveq r0, #0 + add sp, sp, #4 + ldmia sp!, {r4, r5, r6, r7, pc} + + arm_func_start FUN_021FDC28 +FUN_021FDC28: ; 0x021FDC28 + stmdb sp!, {r4, r5, r6, lr} + sub sp, sp, #8 + mov r5, r1 + mov r4, r2 + add r3, sp, #0 + mov r1, #2 + mov r2, #0x47 + mov r6, r0 + bl FUN_021FDE18 + cmp r0, #0 + addeq sp, sp, #8 + moveq r0, #0 + ldmeqia sp!, {r4, r5, r6, pc} + ldr r0, [sp] + cmp r0, #0 + addne sp, sp, #8 + movne r0, #1 + ldmneia sp!, {r4, r5, r6, pc} + mov r1, r5 + add r0, r6, #0x50 + mov r2, #0x20 + bl FUN_021FC304 + mov r1, r4 + add r0, r6, #0x50 + mov r2, #0x20 + bl FUN_021FC304 + mov r0, r6 + bl FUN_021FDD98 + cmp r0, #0 + ldrne r1, [r6, #0x88] + moveq r0, #0 + movne r0, #1 + strne r1, [r6, #0x8c] + add sp, sp, #8 + ldmia sp!, {r4, r5, r6, pc} + + arm_func_start FUN_021FDCB4 +FUN_021FDCB4: ; 0x021FDCB4 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #4 + mov r4, r1 + add r3, sp, #0 + mov r1, #1 + mov r2, #0x27 + mov r5, r0 + bl FUN_021FDE18 + cmp r0, #0 + addeq sp, sp, #4 + moveq r0, #0 + ldmeqia sp!, {r4, r5, pc} + ldr r0, [sp] + cmp r0, #0 + addne sp, sp, #4 + movne r0, #1 + ldmneia sp!, {r4, r5, pc} + mov r1, r4 + add r0, r5, #0x50 + mov r2, #0x20 + bl FUN_021FC304 + mov r0, r5 + bl FUN_021FDD98 + cmp r0, #0 + movne r0, #1 + moveq r0, #0 + add sp, sp, #4 + ldmia sp!, {r4, r5, pc} + + arm_func_start FUN_021FDD24 +FUN_021FDD24: ; 0x021FDD24 + stmdb sp!, {r4, r5, r6, lr} + sub sp, sp, #8 + mov r4, r2 + mov r5, r1 + add r3, sp, #0 + add r2, r4, #7 + mov r1, #0 + mov r6, r0 + bl FUN_021FDE18 + cmp r0, #0 + addeq sp, sp, #8 + moveq r0, #0 + ldmeqia sp!, {r4, r5, r6, pc} + ldr r0, [sp] + cmp r0, #0 + addne sp, sp, #8 + movne r0, #1 + ldmneia sp!, {r4, r5, r6, pc} + mov r1, r5 + mov r2, r4 + add r0, r6, #0x50 + bl FUN_021FC304 + mov r0, r6 + bl FUN_021FDD98 + cmp r0, #0 + movne r0, #1 + moveq r0, #0 + add sp, sp, #8 + ldmia sp!, {r4, r5, r6, pc} + + arm_func_start FUN_021FDD98 +FUN_021FDD98: ; 0x021FDD98 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #4 + mov r5, r0 + ldr r0, [r5, #0x60] + bl FUN_021EF06C + mov r4, r0 + cmp r4, #0 + bgt _021FDDCC + ldr r0, _021FDE0C ; =0x0220EFBC + ldr r1, _021FDE10 ; =0x0220EFC4 + ldr r3, _021FDE14 ; =0x00000475 + mov r2, #0 + bl __msl_assertion_failed +_021FDDCC: + ldr r0, [r5, #0x60] + sub r1, r4, #1 + bl FUN_021EEFFC + ldr r3, [r5, #0x50] + ldr r1, [r0] + ldr r2, [r0, #4] + mov r0, r5 + add r1, r3, r1 + bl FUN_021FD1AC + cmp r0, #0 + moveq r0, #0 + movne r0, #0 + strne r0, [r5, #0x90] + movne r0, #1 + add sp, sp, #4 + ldmia sp!, {r4, r5, pc} + .align 2, 0 +_021FDE0C: .word 0x0220EFBC +_021FDE10: .word 0x0220EFC4 +_021FDE14: .word 0x00000475 + + arm_func_start FUN_021FDE18 +FUN_021FDE18: ; 0x021FDE18 + stmdb sp!, {r4, r5, r6, r7, lr} + sub sp, sp, #4 + mov r7, r0 + mov r5, r2 + add r0, r7, #0x50 + mov r6, r1 + mov r4, r3 + bl FUN_021FC45C + cmp r0, r5 + bge _021FDE60 + mov r0, r7 + bl FUN_021FF2D8 + cmp r0, #0 + moveq r0, #0 + movne r0, #1 + add sp, sp, #4 + strne r0, [r4] + ldmia sp!, {r4, r5, r6, r7, pc} +_021FDE60: + ldrh r1, [r7, #0x64] + mov r0, r7 + mov r2, r5 + bl FUN_021FDEEC + cmp r0, #0 + bne _021FDE98 + mov r0, r7 + bl FUN_021FF2D8 + cmp r0, #0 + moveq r0, #0 + movne r0, #1 + add sp, sp, #4 + strne r0, [r4] + ldmia sp!, {r4, r5, r6, r7, pc} +_021FDE98: + ldr r1, _021FDEE8 ; =0x0220EFB0 + add r0, r7, #0x50 + mov r2, #2 + bl FUN_021FC304 + add r0, r7, #0x50 + and r1, r6, #0xff + bl FUN_021FC404 + ldrh r1, [r7, #0x64] + add r0, r7, #0x50 + add r2, r1, #1 + strh r2, [r7, #0x64] + bl FUN_021FC390 + ldrh r1, [r7, #0x66] + add r0, r7, #0x50 + bl FUN_021FC390 + mov r0, #0 + str r0, [r4] + mov r0, #1 + add sp, sp, #4 + ldmia sp!, {r4, r5, r6, r7, pc} + .align 2, 0 +_021FDEE8: .word 0x0220EFB0 + + arm_func_start FUN_021FDEEC +FUN_021FDEEC: ; 0x021FDEEC + stmdb sp!, {r4, r5, lr} + sub sp, sp, #0x14 + add r4, sp, #0 + mov r3, #0 + str r3, [r4] + str r3, [r4, #4] + str r3, [r4, #8] + mov r5, r0 + str r3, [r4, #0xc] + ldr r0, [r5, #0x58] + str r0, [sp] + str r2, [sp, #4] + strh r1, [sp, #8] + bl FUN_021F025C + str r0, [sp, #0xc] + ldr r0, [r5, #0x60] + bl FUN_021EF06C + mov r4, r0 + ldr r0, [r5, #0x60] + add r1, sp, #0 + bl FUN_021EEFA8 + ldr r0, [r5, #0x60] + bl FUN_021EF06C + add r1, r4, #1 + cmp r1, r0 + moveq r0, #1 + movne r0, #0 + add sp, sp, #0x14 + ldmia sp!, {r4, r5, pc} + + arm_func_start FUN_021FDF60 +FUN_021FDF60: ; 0x021FDF60 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + ldr ip, _021FE0AC ; =0x000005F4 + sub sp, sp, ip + mov sl, r0 + ldr r0, [sl] + bl FUN_021EFF2C + cmp r0, #0 + beq _021FE09C + ldr fp, _021FE0B0 ; =0x000005DC + add r6, sp, #0x14 + add r8, sp, #8 + add r7, sp, #0x10 + mov sb, #8 + mov r5, #0 + mvn r4, #0xe +_021FDF9C: + str sb, [sp, #0x10] + str r8, [sp] + str r7, [sp, #4] + ldr r0, [sl] + mov r1, r6 + mov r2, fp + mov r3, r5 + bl FUN_021EFC40 + mov r2, r0 + mvn r0, #0 + cmp r2, r0 + bne _021FE044 + ldr r0, [sl] + bl FUN_021EFB28 + cmp r0, r4 + bne _021FE020 + ldrh r2, [sp, #0xa] + ldr r1, [sp, #0xc] + mov r0, sl + mov r3, r2, asr #8 + mov r2, r2, lsl #8 + and r3, r3, #0xff + and r2, r2, #0xff00 + orr r2, r3, r2 + mov r2, r2, lsl #0x10 + mov r2, r2, lsr #0x10 + bl FUN_021FE0B4 + cmp r0, #0 + bne _021FE08C + ldr ip, _021FE0AC ; =0x000005F4 + mov r0, #0 + add sp, sp, ip + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +_021FE020: + mvn r1, #0x22 + cmp r0, r1 + beq _021FE08C + mov r0, sl + bl FUN_021FF3F0 + ldr ip, _021FE0AC ; =0x000005F4 + mov r0, #0 + add sp, sp, ip + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +_021FE044: + ldrh ip, [sp, #0xa] + mov r0, sl + mov r1, r6 + mov r3, ip, asr #8 + mov ip, ip, lsl #8 + and r3, r3, #0xff + and ip, ip, #0xff00 + orr r3, r3, ip + mov r3, r3, lsl #0x10 + mov r3, r3, lsr #0x10 + str r3, [sp] + ldr r3, [sp, #0xc] + bl FUN_021FE1B4 + cmp r0, #0 + ldreq ip, _021FE0AC ; =0x000005F4 + moveq r0, #0 + addeq sp, sp, ip + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +_021FE08C: + ldr r0, [sl] + bl FUN_021EFF2C + cmp r0, #0 + bne _021FDF9C +_021FE09C: + mov r0, #1 + ldr ip, _021FE0AC ; =0x000005F4 + add sp, sp, ip + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_021FE0AC: .word 0x000005F4 +_021FE0B0: .word 0x000005DC + + arm_func_start FUN_021FE0B4 +FUN_021FE0B4: ; 0x021FE0B4 + stmdb sp!, {r4, r5, r6, r7, lr} + sub sp, sp, #0x14 + mov r7, r0 + mov r6, r1 + mov r5, r2 + bl FUN_021FFC3C + ldr r1, [r7, #0x2c] + mov r4, r0 + cmp r1, #0 + beq _021FE118 + mov r0, #1 + str r0, [sp] + mov ip, #0 + str ip, [sp, #4] + str ip, [sp, #8] + mov r0, r7 + mov r1, r4 + mov r2, r6 + mov r3, r5 + str ip, [sp, #0xc] + bl FUN_021FC59C + cmp r0, #0 + addeq sp, sp, #0x14 + moveq r0, #0 + ldmeqia sp!, {r4, r5, r6, r7, pc} +_021FE118: + cmp r4, #0 + addeq sp, sp, #0x14 + moveq r0, #1 + ldmeqia sp!, {r4, r5, r6, r7, pc} + ldr r0, [r4, #0xc] + cmp r0, #0 + bne _021FE188 + ldr r0, [r4, #0x20] + cmp r0, #0 + beq _021FE158 + bl FUN_021F025C + ldr r2, [r4, #0x1c] + ldr r1, [r4, #0x20] + sub r0, r0, r2 + cmp r0, r1 + bhs _021FE164 +_021FE158: + add sp, sp, #0x14 + mov r0, #1 + ldmia sp!, {r4, r5, r6, r7, pc} +_021FE164: + mov r0, r4 + mov r1, #6 + mov r2, #1 + bl FUN_021FF318 + cmp r0, #0 + bne _021FE1A8 + add sp, sp, #0x14 + mov r0, #0 + ldmia sp!, {r4, r5, r6, r7, pc} +_021FE188: + mov r0, r4 + mov r1, #2 + mov r2, #1 + bl FUN_021FF318 + cmp r0, #0 + addeq sp, sp, #0x14 + moveq r0, #0 + ldmeqia sp!, {r4, r5, r6, r7, pc} +_021FE1A8: + mov r0, #1 + add sp, sp, #0x14 + ldmia sp!, {r4, r5, r6, r7, pc} + + arm_func_start FUN_021FE1B4 +FUN_021FE1B4: ; 0x021FE1B4 + stmdb sp!, {r4, r5, r6, r7, r8, sb, lr} + sub sp, sp, #0x1c + ldr r5, [sp, #0x38] + mov r6, r3 + mov r8, r1 + mov r7, r2 + mov r1, r6 + mov r2, r5 + mov sb, r0 + bl FUN_021FFC3C + str r0, [sp, #0x10] + ldr r0, [sb, #0x2c] + cmp r0, #0 + beq _021FE224 + mov r0, #0 + str r0, [sp] + str r8, [sp, #4] + str r7, [sp, #8] + str r0, [sp, #0xc] + ldr r1, [sp, #0x10] + mov r0, sb + mov r2, r6 + mov r3, r5 + bl FUN_021FC59C + cmp r0, #0 + addeq sp, sp, #0x1c + moveq r0, #0 + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, pc} +_021FE224: + cmp r7, #2 + ble _021FE248 + ldr r1, _021FE470 ; =0x0220EFB0 + mov r0, r8 + mov r2, #2 + bl memcmp + cmp r0, #0 + moveq r4, #1 + beq _021FE24C +_021FE248: + mov r4, #0 +_021FE24C: + ldr r0, [sp, #0x10] + cmp r0, #0 + bne _021FE354 + add ip, sp, #0x14 + str r7, [sp] + mov r0, sb + mov r1, r6 + mov r2, r5 + mov r3, r8 + str ip, [sp, #4] + bl FUN_021FC4A4 + cmp r0, #0 + addeq sp, sp, #0x1c + moveq r0, #0 + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, pc} + ldr r0, [sp, #0x14] + cmp r0, #0 + addne sp, sp, #0x1c + movne r0, #1 + ldmneia sp!, {r4, r5, r6, r7, r8, sb, pc} + cmp r4, #0 + beq _021FE2B0 + ldrb r0, [r8, #2] + cmp r0, #1 + beq _021FE2F0 +_021FE2B0: + cmp r4, #0 + beq _021FE2C4 + ldrb r0, [r8, #2] + cmp r0, #0x68 + beq _021FE2E4 +_021FE2C4: + mov r0, sb + mov r1, r6 + mov r2, r5 + bl FUN_021FD7DC + cmp r0, #0 + addeq sp, sp, #0x1c + moveq r0, #0 + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, pc} +_021FE2E4: + add sp, sp, #0x1c + mov r0, #1 + ldmia sp!, {r4, r5, r6, r7, r8, sb, pc} +_021FE2F0: + ldr r0, [sb, #0x20] + cmp r0, #0 + addeq sp, sp, #0x1c + moveq r0, #1 + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, pc} + add r1, sp, #0x10 + mov r0, sb + mov r2, r6 + mov r3, r5 + bl FUN_021FD364 + cmp r0, #0 + beq _021FE354 + cmp r0, #5 + beq _021FE348 + mov r0, sb + mov r1, r6 + mov r2, r5 + bl FUN_021FD7DC + cmp r0, #0 + addeq sp, sp, #0x1c + moveq r0, #0 + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, pc} +_021FE348: + add sp, sp, #0x1c + mov r0, #1 + ldmia sp!, {r4, r5, r6, r7, r8, sb, pc} +_021FE354: + ldr r5, [sp, #0x10] + ldr r0, [r5, #0xc] + cmp r0, #7 + bne _021FE39C + cmp r4, #0 + beq _021FE378 + ldrb r0, [r8, #2] + cmp r0, #0x68 + beq _021FE390 +_021FE378: + mov r0, r5 + bl FUN_021FD828 + cmp r0, #0 + addeq sp, sp, #0x1c + moveq r0, #0 + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, pc} +_021FE390: + add sp, sp, #0x1c + mov r0, #1 + ldmia sp!, {r4, r5, r6, r7, r8, sb, pc} +_021FE39C: + cmp r4, #0 + beq _021FE3CC + cmp r7, #4 + blt _021FE3CC + ldr r1, _021FE470 ; =0x0220EFB0 + add r0, r8, #2 + mov r2, #2 + bl memcmp + cmp r0, #0 + addeq r8, r8, #2 + subeq r7, r7, #2 + moveq r4, #0 +_021FE3CC: + cmp r4, #0 + bne _021FE3F8 + mov r0, r5 + mov r1, r8 + mov r2, r7 + bl FUN_021FF134 + cmp r0, #0 + movne r0, #1 + add sp, sp, #0x1c + moveq r0, #0 + ldmia sp!, {r4, r5, r6, r7, r8, sb, pc} +_021FE3F8: + ldrb r1, [r8, #2] + cmp r1, #0 + bge _021FE420 + mov r0, r5 + bl FUN_021FF304 + cmp r0, #0 + movne r0, #1 + add sp, sp, #0x1c + moveq r0, #0 + ldmia sp!, {r4, r5, r6, r7, r8, sb, pc} +_021FE420: + cmp r1, #8 + bge _021FE44C + mov r0, r5 + mov r2, r8 + mov r3, r7 + bl FUN_021FE780 + cmp r0, #0 + movne r0, #1 + add sp, sp, #0x1c + moveq r0, #0 + ldmia sp!, {r4, r5, r6, r7, r8, sb, pc} +_021FE44C: + mov r0, r5 + mov r2, r8 + mov r3, r7 + bl FUN_021FE474 + cmp r0, #0 + movne r0, #1 + moveq r0, #0 + add sp, sp, #0x1c + ldmia sp!, {r4, r5, r6, r7, r8, sb, pc} + .align 2, 0 +_021FE470: .word 0x0220EFB0 + + arm_func_start FUN_021FE474 +FUN_021FE474: ; 0x021FE474 + stmdb sp!, {lr} + sub sp, sp, #4 + cmp r1, #0x64 + add lr, r2, #3 + sub ip, r3, #3 + bne _021FE4AC + mov r1, lr + mov r2, ip + bl FUN_021FE734 + cmp r0, #0 + bne _021FE540 + add sp, sp, #4 + mov r0, #0 + ldmfd sp!, {pc} +_021FE4AC: + cmp r1, #0x65 + bne _021FE4D4 + mov r1, lr + mov r2, ip + bl FUN_021FE648 + cmp r0, #0 + bne _021FE540 + add sp, sp, #4 + mov r0, #0 + ldmfd sp!, {pc} +_021FE4D4: + cmp r1, #0x66 + bne _021FE4FC + mov r1, r2 + mov r2, r3 + bl FUN_021FE63C + cmp r0, #0 + bne _021FE540 + add sp, sp, #4 + mov r0, #0 + ldmfd sp!, {pc} +_021FE4FC: + cmp r1, #0x67 + bne _021FE524 + mov r1, lr + mov r2, ip + bl FUN_021FE590 + cmp r0, #0 + bne _021FE540 + add sp, sp, #4 + mov r0, #0 + ldmfd sp!, {pc} +_021FE524: + cmp r1, #0x68 + bne _021FE540 + bl FUN_021FE54C + cmp r0, #0 + addeq sp, sp, #4 + moveq r0, #0 + ldmeqia sp!, {pc} +_021FE540: + mov r0, #1 + add sp, sp, #4 + ldmfd sp!, {pc} + + arm_func_start FUN_021FE54C +FUN_021FE54C: ; 0x021FE54C + stmdb sp!, {lr} + sub sp, sp, #4 + ldr r1, [r0, #0xc] + cmp r1, #7 + addeq sp, sp, #4 + moveq r0, #1 + ldmeqia sp!, {pc} + cmp r1, #6 + moveq r2, #0 + movne r2, #1 + mov r1, #2 + bl FUN_021FF318 + cmp r0, #0 + moveq r0, #0 + movne r0, #1 + add sp, sp, #4 + ldmfd sp!, {pc} + + arm_func_start FUN_021FE590 +FUN_021FE590: ; 0x021FE590 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #4 + mov r4, r0 + ldr r0, [r4, #0x34] + mov r5, r1 + cmp r0, #0 + addeq sp, sp, #4 + moveq r0, #1 + ldmeqia sp!, {r4, r5, pc} + cmp r2, #8 + addne sp, sp, #4 + movne r0, #1 + ldmneia sp!, {r4, r5, pc} + ldr r1, _021FE638 ; =0x0220EFB4 + mov r0, r5 + mov r2, #4 + bl memcmp + cmp r0, #0 + addne sp, sp, #4 + movne r0, #1 + ldmneia sp!, {r4, r5, pc} + add r2, r5, #4 + ldrb r1, [r5, #4] + ldrb r0, [r2, #1] + add r3, sp, #0 + strb r1, [r3] + strb r0, [r3, #1] + ldrb r1, [r2, #2] + ldrb r0, [r2, #3] + strb r1, [r3, #2] + strb r0, [r3, #3] + bl FUN_021F025C + mov r2, r0 + ldr r1, [sp] + mov r0, r4 + sub r1, r2, r1 + bl FUN_021FC8E4 + cmp r0, #0 + movne r0, #1 + moveq r0, #0 + add sp, sp, #4 + ldmia sp!, {r4, r5, pc} + .align 2, 0 +_021FE638: .word 0x0220EFB4 + + arm_func_start FUN_021FE63C +FUN_021FE63C: ; 0x021FE63C + ldr ip, _021FE644 ; =FUN_021FD844 + bx ip + .align 2, 0 +_021FE644: .word FUN_021FD844 + + arm_func_start FUN_021FE648 +FUN_021FE648: ; 0x021FE648 + stmdb sp!, {r4, r5, r6, r7, r8, sb, lr} + sub sp, sp, #4 + mov r6, r1 + mov r4, r0 + mov r0, r6 + mov r1, #0 + mov r5, r2 + bl FUN_021FF3D0 + mov sb, r0 + cmp r5, #2 + moveq r8, sb + beq _021FE6B0 + cmp r5, #4 + bne _021FE694 + mov r0, r6 + mov r1, #2 + bl FUN_021FF3D0 + mov r8, r0 + b _021FE6B0 +_021FE694: + mov r0, r4 + bl FUN_021FF304 + cmp r0, #0 + movne r0, #1 + add sp, sp, #4 + moveq r0, #0 + ldmia sp!, {r4, r5, r6, r7, r8, sb, pc} +_021FE6B0: + ldr r0, [r4, #0x60] + bl FUN_021EF06C + mov r7, r0 + cmp r7, #0 + mov r6, #0 + ble _021FE728 +_021FE6C8: + ldr r0, [r4, #0x60] + mov r1, r6 + bl FUN_021EEFFC + mov r5, r0 + ldrh r0, [r5, #8] + mov r1, sb + bl FUN_021FF3AC + cmp r0, #0 + blt _021FE71C + ldrh r0, [r5, #8] + mov r1, r8 + bl FUN_021FF3AC + cmp r0, #0 + bgt _021FE71C + mov r0, r4 + mov r1, r5 + bl FUN_021FD760 + cmp r0, #0 + addeq sp, sp, #4 + moveq r0, #0 + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, pc} +_021FE71C: + add r6, r6, #1 + cmp r6, r7 + blt _021FE6C8 +_021FE728: + mov r0, #1 + add sp, sp, #4 + ldmia sp!, {r4, r5, r6, r7, r8, sb, pc} + + arm_func_start FUN_021FE734 +FUN_021FE734: ; 0x021FE734 + stmdb sp!, {r4, lr} + mov r4, r0 + cmp r2, #2 + beq _021FE758 + bl FUN_021FF304 + cmp r0, #0 + movne r0, #1 + moveq r0, #0 + ldmia sp!, {r4, pc} +_021FE758: + mov r0, r1 + mov r1, #0 + bl FUN_021FF3D0 + mov r1, r0 + mov r0, r4 + bl FUN_021FF1C8 + cmp r0, #0 + movne r0, #1 + moveq r0, #0 + ldmia sp!, {r4, pc} + + arm_func_start FUN_021FE780 +FUN_021FE780: ; 0x021FE780 + stmdb sp!, {r4, r5, r6, r7, r8, lr} + sub sp, sp, #0x10 + mov r6, r3 + mov r4, r0 + mov r8, r1 + mov r7, r2 + cmp r6, #7 + bge _021FE7B8 + bl FUN_021FF304 + cmp r0, #0 + movne r0, #1 + add sp, sp, #0x10 + moveq r0, #0 + ldmia sp!, {r4, r5, r6, r7, r8, pc} +_021FE7B8: + mov r0, r7 + mov r1, #3 + bl FUN_021FF3D0 + mov r5, r0 + mov r0, r7 + mov r1, #5 + bl FUN_021FF3D0 + mov r1, r0 + mov r0, r4 + bl FUN_021FF1C8 + cmp r0, #0 + addeq sp, sp, #0x10 + moveq r0, #0 + ldmeqia sp!, {r4, r5, r6, r7, r8, pc} + ldrh r1, [r4, #0x66] + cmp r5, r1 + bne _021FE844 + mov r0, r4 + bl FUN_021FE8CC + mov r0, r4 + mov r1, r8 + add r2, r7, #7 + sub r3, r6, #7 + bl FUN_021FEBD0 + cmp r0, #0 + addeq sp, sp, #0x10 + moveq r0, #0 + ldmeqia sp!, {r4, r5, r6, r7, r8, pc} + mov r0, r4 + bl FUN_021FE8F4 + cmp r0, #0 + movne r0, #1 + add sp, sp, #0x10 + moveq r0, #0 + ldmia sp!, {r4, r5, r6, r7, r8, pc} +_021FE844: + mov r0, r5 + bl FUN_021FF3AC + cmp r0, #0 + bge _021FE868 + mov r0, r4 + bl FUN_021FE8CC + add sp, sp, #0x10 + mov r0, #1 + ldmia sp!, {r4, r5, r6, r7, r8, pc} +_021FE868: + sub r0, r6, #7 + str r0, [sp] + add ip, sp, #8 + mov r0, r4 + mov r1, r8 + mov r2, r5 + add r3, r7, #7 + str ip, [sp, #4] + bl FUN_021FEA0C + cmp r0, #0 + addeq sp, sp, #0x10 + moveq r0, #0 + ldmeqia sp!, {r4, r5, r6, r7, r8, pc} + ldr r0, [sp, #8] + cmp r0, #0 + beq _021FE8C0 + mov r0, r4 + bl FUN_021FF2D8 + cmp r0, #0 + addeq sp, sp, #0x10 + moveq r0, #0 + ldmeqia sp!, {r4, r5, r6, r7, r8, pc} +_021FE8C0: + mov r0, #1 + add sp, sp, #0x10 + ldmia sp!, {r4, r5, r6, r7, r8, pc} + + arm_func_start FUN_021FE8CC +FUN_021FE8CC: ; 0x021FE8CC + stmdb sp!, {r4, lr} + mov r4, r0 + ldr r0, [r4, #0x90] + cmp r0, #0 + ldmneia sp!, {r4, pc} + mov r0, #1 + str r0, [r4, #0x90] + bl FUN_021F025C + str r0, [r4, #0x94] + ldmia sp!, {r4, pc} + + arm_func_start FUN_021FE8F4 +FUN_021FE8F4: ; 0x021FE8F4 + stmdb sp!, {r4, r5, r6, lr} + mov r6, r0 +_021FE8FC: + ldr r0, [r6, #0x5c] + bl FUN_021EF06C + subs r5, r0, #1 + bmi _021FE970 +_021FE90C: + ldr r0, [r6, #0x5c] + mov r1, r5 + bl FUN_021EEFFC + mov r4, r0 + ldrh r1, [r4, #0xc] + ldrh r0, [r6, #0x66] + cmp r1, r0 + bne _021FE968 + ldr ip, [r6, #0x44] + ldr r2, [r4] + ldr r1, [r4, #8] + ldr r3, [r4, #4] + mov r0, r6 + add r2, ip, r2 + bl FUN_021FEBD0 + cmp r0, #0 + moveq r0, #0 + ldmeqia sp!, {r4, r5, r6, pc} + mov r0, r6 + mov r1, r4 + mov r2, r5 + bl FUN_021FE978 + b _021FE8FC +_021FE968: + subs r5, r5, #1 + bpl _021FE90C +_021FE970: + mov r0, #1 + ldmia sp!, {r4, r5, r6, pc} + + arm_func_start FUN_021FE978 +FUN_021FE978: ; 0x021FE978 + stmdb sp!, {r4, r5, r6, r7, r8, sb, lr} + sub sp, sp, #4 + mov sb, r0 + ldr r0, [sb, #0x5c] + ldr r7, [r1] + ldr r6, [r1, #4] + mov r1, r2 + mov r8, #0 + bl FUN_021EED84 + ldr r0, [sb, #0x5c] + bl FUN_021EF06C + mov r5, r0 + cmp r5, #0 + mov r4, r8 + ble _021FE9F4 +_021FE9B4: + ldr r0, [sb, #0x5c] + mov r1, r4 + bl FUN_021EEFFC + ldr r1, [r0] + cmp r1, r7 + ble _021FE9E8 + sub r1, r1, r6 + str r1, [r0] + ldr r1, [r0] + ldr r0, [r0, #4] + add r0, r1, r0 + cmp r8, r0 + movle r8, r0 +_021FE9E8: + add r4, r4, #1 + cmp r4, r5 + blt _021FE9B4 +_021FE9F4: + mov r1, r7 + mov r2, r6 + add r0, sb, #0x44 + bl FUN_021FC268 + add sp, sp, #4 + ldmia sp!, {r4, r5, r6, r7, r8, sb, pc} + + arm_func_start FUN_021FEA0C +FUN_021FEA0C: ; 0x021FEA0C + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} + sub sp, sp, #0x10 + mov sb, r0 + ldr r0, [sb, #0x5c] + mov r8, r1 + mov r7, r2 + mov r6, r3 + ldr r5, [sp, #0x34] + bl FUN_021EF06C + mov r4, r0 + cmp r4, #0 + mov sl, #0 + ble _021FEA84 +_021FEA40: + ldr r0, [sb, #0x5c] + mov r1, sl + bl FUN_021EEFFC + ldrh r0, [r0, #0xc] + cmp r0, r7 + moveq r0, #0 + streq r0, [r5] + addeq sp, sp, #0x10 + moveq r0, #1 + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + mov r1, r7 + bl FUN_021FF3AC + cmp r0, #0 + bgt _021FEA84 + add sl, sl, #1 + cmp sl, r4 + blt _021FEA40 +_021FEA84: + add r0, sb, #0x44 + bl FUN_021FC45C + ldr r2, [sp, #0x30] + cmp r0, r2 + movlt r0, #1 + addlt sp, sp, #0x10 + strlt r0, [r5] + ldmltia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + ldr r0, [sb, #0x4c] + add r1, sp, #0 + str r2, [sp, #4] + str r8, [sp, #8] + strh r7, [sp, #0xc] + str r0, [sp] + ldr r0, [sb, #0x5c] + ldr r2, _021FEBB8 ; =FUN_021FEBBC + bl FUN_021EEE74 + ldr r0, [sb, #0x5c] + bl FUN_021EF06C + add r1, r4, #1 + cmp r1, r0 + movne r0, #1 + addne sp, sp, #0x10 + strne r0, [r5] + ldmneia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + ldr r2, [sp, #0x30] + mov r1, r6 + add r0, sb, #0x44 + bl FUN_021FC304 + cmp r4, #0 + bne _021FEB2C + sub r0, r7, #1 + mov r2, r0, lsl #0x10 + ldrh r1, [sb, #0x66] + mov r0, sb + mov r2, r2, lsr #0x10 + bl FUN_021FD858 + cmp r0, #0 + bne _021FEBA4 + add sp, sp, #0x10 + mov r0, #0 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} +_021FEB2C: + ldr r0, [sb, #0x5c] + mov r1, r4 + bl FUN_021EEFFC + ldrh r0, [r0, #0xc] + cmp r0, r7 + bne _021FEBA4 + ldr r0, [sb, #0x5c] + sub r1, r4, #1 + bl FUN_021EEFFC + mov r4, r0 + ldrh r1, [r4, #0xc] + mov r0, r7 + bl FUN_021FF3AC + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + cmp r0, #1 + bls _021FEBA4 + ldrh r1, [r4, #0xc] + sub r0, r7, #1 + mov r2, r0, lsl #0x10 + add r0, r1, #1 + mov r1, r0, lsl #0x10 + mov r0, sb + mov r1, r1, lsr #0x10 + mov r2, r2, lsr #0x10 + bl FUN_021FD858 + cmp r0, #0 + addeq sp, sp, #0x10 + moveq r0, #0 + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} +_021FEBA4: + mov r0, #0 + str r0, [r5] + mov r0, #1 + add sp, sp, #0x10 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + .align 2, 0 +_021FEBB8: .word FUN_021FEBBC + + arm_func_start FUN_021FEBBC +FUN_021FEBBC: ; 0x021FEBBC + ldr ip, _021FEBCC ; =FUN_021FF3AC + ldrh r0, [r0, #0xc] + ldrh r1, [r1, #0xc] + bx ip + .align 2, 0 +_021FEBCC: .word FUN_021FF3AC + + arm_func_start FUN_021FEBD0 +FUN_021FEBD0: ; 0x021FEBD0 + stmdb sp!, {lr} + sub sp, sp, #4 + ldrh ip, [r0, #0x66] + cmp r1, #0 + add ip, ip, #1 + strh ip, [r0, #0x66] + bne _021FEC0C + mov r1, r2 + mov r2, r3 + bl FUN_021FF084 + cmp r0, #0 + bne _021FECE8 + add sp, sp, #4 + mov r0, #0 + ldmfd sp!, {pc} +_021FEC0C: + cmp r1, #1 + bne _021FEC34 + mov r1, r2 + mov r2, r3 + bl FUN_021FEFEC + cmp r0, #0 + bne _021FECE8 + add sp, sp, #4 + mov r0, #0 + ldmfd sp!, {pc} +_021FEC34: + cmp r1, #2 + bne _021FEC5C + mov r1, r2 + mov r2, r3 + bl FUN_021FEF10 + cmp r0, #0 + bne _021FECE8 + add sp, sp, #4 + mov r0, #0 + ldmfd sp!, {pc} +_021FEC5C: + cmp r1, #3 + bne _021FEC84 + mov r1, r2 + mov r2, r3 + bl FUN_021FEDFC + cmp r0, #0 + bne _021FECE8 + add sp, sp, #4 + mov r0, #0 + ldmfd sp!, {pc} +_021FEC84: + cmp r1, #4 + bne _021FECA4 + bl FUN_021FEDA4 + cmp r0, #0 + bne _021FECE8 + add sp, sp, #4 + mov r0, #0 + ldmfd sp!, {pc} +_021FECA4: + cmp r1, #5 + bne _021FECCC + mov r1, r2 + mov r2, r3 + bl FUN_021FED38 + cmp r0, #0 + bne _021FECE8 + add sp, sp, #4 + mov r0, #0 + ldmfd sp!, {pc} +_021FECCC: + cmp r1, #6 + bne _021FECE8 + bl FUN_021FECF4 + cmp r0, #0 + addeq sp, sp, #4 + moveq r0, #0 + ldmeqia sp!, {pc} +_021FECE8: + mov r0, #1 + add sp, sp, #4 + ldmfd sp!, {pc} + + arm_func_start FUN_021FECF4 +FUN_021FECF4: ; 0x021FECF4 + stmdb sp!, {r4, lr} + mov r4, r0 + bl FUN_021FD828 + cmp r0, #0 + moveq r0, #0 + ldmeqia sp!, {r4, pc} + ldr r0, [r4, #0xc] + mov r1, #2 + cmp r0, #6 + moveq r2, #0 + movne r2, #1 + mov r0, r4 + bl FUN_021FF318 + cmp r0, #0 + moveq r0, #0 + movne r0, #1 + ldmia sp!, {r4, pc} + + arm_func_start FUN_021FED38 +FUN_021FED38: ; 0x021FED38 + stmdb sp!, {r4, r5, r6, lr} + mov r6, r0 + ldr r3, [r6, #0xc] + mov r5, r1 + mov r4, r2 + cmp r3, #1 + beq _021FED68 + bl FUN_021FF304 + cmp r0, #0 + movne r0, #1 + moveq r0, #0 + ldmia sp!, {r4, r5, r6, pc} +_021FED68: + bl FUN_021FCED0 + mov r0, r6 + bl FUN_021FD828 + cmp r0, #0 + moveq r0, #0 + ldmeqia sp!, {r4, r5, r6, pc} + mov r0, r6 + mov r2, r5 + mov r3, r4 + mov r1, #2 + bl FUN_021FCB88 + cmp r0, #0 + movne r0, #1 + moveq r0, #0 + ldmia sp!, {r4, r5, r6, pc} + + arm_func_start FUN_021FEDA4 +FUN_021FEDA4: ; 0x021FEDA4 + stmdb sp!, {lr} + sub sp, sp, #4 + ldr r1, [r0, #0xc] + cmp r1, #1 + beq _021FEDD0 + bl FUN_021FF304 + cmp r0, #0 + movne r0, #1 + add sp, sp, #4 + moveq r0, #0 + ldmfd sp!, {pc} +_021FEDD0: + mov r1, #0 + mov ip, #5 + mov r2, r1 + mov r3, r1 + str ip, [r0, #0xc] + bl FUN_021FCB88 + cmp r0, #0 + movne r0, #1 + moveq r0, #0 + add sp, sp, #4 + ldmfd sp!, {pc} + + arm_func_start FUN_021FEDFC +FUN_021FEDFC: ; 0x021FEDFC + stmdb sp!, {r4, r5, r6, lr} + sub sp, sp, #0x10 + mov r6, r0 + ldr r3, [r6, #0xc] + mov r5, r1 + mov r4, r2 + cmp r3, #3 + beq _021FEE34 + bl FUN_021FF304 + cmp r0, #0 + movne r0, #1 + add sp, sp, #0x10 + moveq r0, #0 + ldmia sp!, {r4, r5, r6, pc} +_021FEE34: + cmp r4, #0x20 + bge _021FEE54 + bl FUN_021FF304 + cmp r0, #0 + movne r0, #1 + add sp, sp, #0x10 + moveq r0, #0 + ldmia sp!, {r4, r5, r6, pc} +_021FEE54: + mov r0, r5 + add r1, r6, #0x68 + bl FUN_021FBF08 + cmp r0, #0 + bne _021FEE84 + mov r0, r6 + bl FUN_021FF304 + cmp r0, #0 + movne r0, #1 + add sp, sp, #0x10 + moveq r0, #0 + ldmia sp!, {r4, r5, r6, pc} +_021FEE84: + ldr r0, [r6, #8] + ldr r0, [r0, #0x20] + cmp r0, #0 + bne _021FEEC0 + mov r0, r6 + bl FUN_021FD828 + cmp r0, #0 + addeq sp, sp, #0x10 + moveq r0, #0 + ldmeqia sp!, {r4, r5, r6, pc} + mov r0, r6 + bl FUN_021FCED0 + add sp, sp, #0x10 + mov r0, #1 + ldmia sp!, {r4, r5, r6, pc} +_021FEEC0: + mov r0, #4 + str r0, [r6, #0xc] + bl FUN_021F025C + ldr r2, [r6, #0x8c] + add r1, r5, #0x20 + sub r0, r0, r2 + str r0, [sp] + str r1, [sp, #4] + sub r0, r4, #0x20 + str r0, [sp, #8] + ldrh r3, [r6, #4] + ldr r0, [r6, #8] + ldr r2, [r6] + mov r1, r6 + bl FUN_021FCC88 + cmp r0, #0 + movne r0, #1 + moveq r0, #0 + add sp, sp, #0x10 + ldmia sp!, {r4, r5, r6, pc} + + arm_func_start FUN_021FEF10 +FUN_021FEF10: ; 0x021FEF10 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #0x24 + mov r5, r0 + ldr r3, [r5, #0xc] + mov r4, r1 + cmp r3, #0 + beq _021FEF44 + bl FUN_021FF304 + cmp r0, #0 + movne r0, #1 + add sp, sp, #0x24 + moveq r0, #0 + ldmia sp!, {r4, r5, pc} +_021FEF44: + cmp r2, #0x40 + bge _021FEF64 + bl FUN_021FF304 + cmp r0, #0 + movne r0, #1 + add sp, sp, #0x24 + moveq r0, #0 + ldmia sp!, {r4, r5, pc} +_021FEF64: + mov r0, r4 + add r1, r5, #0x68 + bl FUN_021FBF08 + cmp r0, #0 + bne _021FEF94 + mov r0, r5 + bl FUN_021FF304 + cmp r0, #0 + movne r0, #1 + add sp, sp, #0x24 + moveq r0, #0 + ldmia sp!, {r4, r5, pc} +_021FEF94: + add r0, sp, #0 + add r1, r4, #0x20 + bl FUN_021FBF44 + ldr r2, [r5, #0x38] + ldr r3, [r5, #0x3c] + add r1, sp, #0 + mov r0, r5 + bl FUN_021FDBA0 + cmp r0, #0 + addeq sp, sp, #0x24 + moveq r0, #0 + ldmeqia sp!, {r4, r5, pc} + ldr r0, [r5, #0x38] + cmp r0, #0 + beq _021FEFDC + bl FUN_021DD82C + mov r0, #0 + str r0, [r5, #0x38] +_021FEFDC: + mov r0, #1 + str r0, [r5, #0xc] + add sp, sp, #0x24 + ldmia sp!, {r4, r5, pc} + + arm_func_start FUN_021FEFEC +FUN_021FEFEC: ; 0x021FEFEC + stmdb sp!, {r4, lr} + sub sp, sp, #0x40 + mov r4, r0 + ldr r3, [r4, #0xc] + cmp r3, #2 + beq _021FF01C + bl FUN_021FF304 + cmp r0, #0 + movne r0, #1 + add sp, sp, #0x40 + moveq r0, #0 + ldmia sp!, {r4, pc} +_021FF01C: + cmp r2, #0x20 + bge _021FF03C + bl FUN_021FF304 + cmp r0, #0 + movne r0, #1 + add sp, sp, #0x40 + moveq r0, #0 + ldmia sp!, {r4, pc} +_021FF03C: + add r0, sp, #0 + bl FUN_021FBF44 + add r0, sp, #0x20 + bl FUN_021FC07C + add r1, sp, #0x20 + add r0, r4, #0x68 + bl FUN_021FBF44 + add r1, sp, #0 + add r2, sp, #0x20 + mov r0, r4 + bl FUN_021FDC28 + cmp r0, #0 + moveq r0, #0 + movne r0, #3 + strne r0, [r4, #0xc] + movne r0, #1 + add sp, sp, #0x40 + ldmia sp!, {r4, pc} + + arm_func_start FUN_021FF084 +FUN_021FF084: ; 0x021FF084 + stmdb sp!, {r4, r5, r6, lr} + sub sp, sp, #8 + mov r6, r0 + ldr r3, [r6, #0xc] + mov r5, r1 + mov r4, r2 + cmp r3, #5 + beq _021FF0C4 + cmp r3, #6 + beq _021FF0C4 + bl FUN_021FF304 + cmp r0, #0 + bne _021FF128 + add sp, sp, #8 + mov r0, #0 + ldmia sp!, {r4, r5, r6, pc} +_021FF0C4: + ldr r0, [r6, #0x9c] + bl FUN_021EF06C + cmp r0, #0 + beq _021FF104 + mov ip, #1 + mov r0, r6 + mov r2, r5 + mov r3, r4 + mov r1, #0 + str ip, [sp] + bl FUN_021FC6C4 + cmp r0, #0 + movne r0, #1 + add sp, sp, #8 + moveq r0, #0 + ldmia sp!, {r4, r5, r6, pc} +_021FF104: + mov r0, r6 + mov r1, r5 + mov r2, r4 + mov r3, #1 + bl FUN_021FCA8C + cmp r0, #0 + addeq sp, sp, #8 + moveq r0, #0 + ldmeqia sp!, {r4, r5, r6, pc} +_021FF128: + mov r0, #1 + add sp, sp, #8 + ldmia sp!, {r4, r5, r6, pc} + + arm_func_start FUN_021FF134 +FUN_021FF134: ; 0x021FF134 + stmdb sp!, {r4, r5, r6, lr} + sub sp, sp, #8 + mov r6, r0 + ldr r0, [r6, #0xc] + mov r5, r1 + mov r4, r2 + cmp r0, #5 + beq _021FF164 + cmp r0, #6 + addne sp, sp, #8 + movne r0, #1 + ldmneia sp!, {r4, r5, r6, pc} +_021FF164: + ldr r0, [r6, #0x9c] + bl FUN_021EF06C + cmp r0, #0 + beq _021FF1A0 + mov r1, #0 + mov r0, r6 + mov r2, r5 + mov r3, r4 + str r1, [sp] + bl FUN_021FC6C4 + cmp r0, #0 + movne r0, #1 + add sp, sp, #8 + moveq r0, #0 + ldmia sp!, {r4, r5, r6, pc} +_021FF1A0: + mov r0, r6 + mov r1, r5 + mov r2, r4 + mov r3, #0 + bl FUN_021FCA8C + cmp r0, #0 + movne r0, #1 + moveq r0, #0 + add sp, sp, #8 + ldmia sp!, {r4, r5, r6, pc} + + arm_func_start FUN_021FF1C8 +FUN_021FF1C8: ; 0x021FF1C8 + stmdb sp!, {r4, r5, r6, r7, lr} + sub sp, sp, #4 + mov r4, r0 + ldr r0, [r4, #0x60] + mov r7, r1 + bl FUN_021EF06C + movs r6, r0 + addeq sp, sp, #4 + moveq r0, #1 + ldmeqia sp!, {r4, r5, r6, r7, pc} + cmp r6, #0 + mov r5, #0 + ble _021FF228 +_021FF1FC: + ldr r0, [r4, #0x60] + mov r1, r5 + bl FUN_021EEFFC + ldrh r0, [r0, #8] + mov r1, r7 + bl FUN_021FF3AC + cmp r0, #0 + bge _021FF228 + add r5, r5, #1 + cmp r5, r6 + blt _021FF1FC +_021FF228: + cmp r5, #0 + addeq sp, sp, #4 + moveq r0, #1 + ldmeqia sp!, {r4, r5, r6, r7, pc} + cmp r5, #0 + sub r5, r5, #1 + beq _021FF25C +_021FF244: + ldr r0, [r4, #0x60] + mov r1, r5 + bl FUN_021EED84 + cmp r5, #0 + sub r5, r5, #1 + bne _021FF244 +_021FF25C: + ldr r0, [r4, #0x60] + bl FUN_021EF06C + movs r6, r0 + moveq r0, #0 + streq r0, [r4, #0x58] + addeq sp, sp, #4 + moveq r0, #1 + ldmeqia sp!, {r4, r5, r6, r7, pc} + ldr r0, [r4, #0x60] + mov r1, #0 + bl FUN_021EEFFC + cmp r6, #0 + ldr r7, [r0] + mov r5, #0 + ble _021FF2BC +_021FF298: + ldr r0, [r4, #0x60] + mov r1, r5 + bl FUN_021EEFFC + ldr r1, [r0] + add r5, r5, #1 + sub r1, r1, r7 + str r1, [r0] + cmp r5, r6 + blt _021FF298 +_021FF2BC: + mov r2, r7 + add r0, r4, #0x50 + mov r1, #0 + bl FUN_021FC268 + mov r0, #1 + add sp, sp, #4 + ldmia sp!, {r4, r5, r6, r7, pc} + + arm_func_start FUN_021FF2D8 +FUN_021FF2D8: ; 0x021FF2D8 + stmdb sp!, {r4, lr} + mov r4, r0 + bl FUN_021FD828 + cmp r0, #0 + moveq r0, #0 + ldmeqia sp!, {r4, pc} + mov r0, r4 + mov r1, #1 + mov r2, #4 + bl FUN_021FF318 + ldmia sp!, {r4, pc} + + arm_func_start FUN_021FF304 +FUN_021FF304: ; 0x021FF304 + ldr ip, _021FF314 ; =FUN_021FF318 + mov r1, #7 + mov r2, #2 + bx ip + .align 2, 0 +_021FF314: .word FUN_021FF318 + + arm_func_start FUN_021FF318 +FUN_021FF318: ; 0x021FF318 + stmdb sp!, {r4, r5, r6, lr} + mov r6, r0 + ldr r3, [r6, #0xc] + mov r5, r1 + mov r4, r2 + cmp r3, #5 + bge _021FF380 + ldr r1, [r6, #0x10] + cmp r1, #0 + beq _021FF368 + bl FUN_021FCED0 + mov r2, #0 + mov r0, r6 + mov r1, r5 + mov r3, r2 + bl FUN_021FCB88 + cmp r0, #0 + bne _021FF3A4 + mov r0, #0 + ldmia sp!, {r4, r5, r6, pc} +_021FF368: + cmp r3, #4 + moveq r0, #1 + streq r0, [r6, #0x14] + mov r0, r6 + bl FUN_021FCED0 + b _021FF3A4 +_021FF380: + cmp r3, #7 + beq _021FF3A4 + bl FUN_021FCED0 + mov r0, r6 + mov r1, r4 + bl FUN_021FC9B8 + cmp r0, #0 + moveq r0, #0 + ldmeqia sp!, {r4, r5, r6, pc} +_021FF3A4: + mov r0, #1 + ldmia sp!, {r4, r5, r6, pc} + + arm_func_start FUN_021FF3AC +FUN_021FF3AC: ; 0x021FF3AC + sub r0, r0, r1 + mov r0, r0, lsl #0x10 + mov r0, r0, asr #0x10 + bx lr + + arm_func_start FUN_021FF3BC +FUN_021FF3BC: ; 0x021FF3BC + mov r3, r2, asr #8 + strb r3, [r0, r1] + add r1, r1, #1 + strb r2, [r0, r1] + bx lr + + arm_func_start FUN_021FF3D0 +FUN_021FF3D0: ; 0x021FF3D0 + ldrb r2, [r0, r1] + add r1, r1, #1 + ldrb r1, [r0, r1] + mov r0, r2, lsl #8 + and r0, r0, #0xff00 + mov r0, r0, lsl #0x10 + orr r0, r1, r0, lsr #16 + bx lr + + arm_func_start FUN_021FF3F0 +FUN_021FF3F0: ; 0x021FF3F0 + stmdb sp!, {r4, lr} + mov r4, r0 + ldr r1, [r4, #0x18] + cmp r1, #0 + ldmneia sp!, {r4, pc} + mov r1, #1 + str r1, [r4, #0x18] + bl FUN_021FD45C + mov r0, r4 + bl FUN_021FCDB4 + cmp r0, #0 + ldmeqia sp!, {r4, pc} + mov r0, r4 + bl FUN_021FF9CC + ldmia sp!, {r4, pc} + + arm_func_start FUN_021FF42C +FUN_021FF42C: ; 0x021FF42C + stmdb sp!, {r4, r5, lr} + sub sp, sp, #4 + mov r5, r0 + ldr r0, [r5, #0x10] + bl FUN_021EF06C + subs r4, r0, #1 + addmi sp, sp, #4 + ldmmiia sp!, {r4, r5, pc} +_021FF44C: + ldr r0, [r5, #0x10] + mov r1, r4 + bl FUN_021EEFFC + ldr r0, [r0] + bl FUN_021FF6BC + subs r4, r4, #1 + bpl _021FF44C + add sp, sp, #4 + ldmia sp!, {r4, r5, pc} + + arm_func_start FUN_021FF470 +FUN_021FF470: ; 0x021FF470 + stmdb sp!, {r4, lr} + sub sp, sp, #8 + mov r4, r0 + bl FUN_021F025C + str r0, [sp] + ldr r0, [r4, #0xc] + ldr r1, _021FF4A8 ; =FUN_021FF4AC + add r2, sp, #0 + bl FUN_021EF264 + cmp r0, #0 + moveq r0, #1 + movne r0, #0 + add sp, sp, #8 + ldmia sp!, {r4, pc} + .align 2, 0 +_021FF4A8: .word FUN_021FF4AC + + arm_func_start FUN_021FF4AC +FUN_021FF4AC: ; 0x021FF4AC + stmdb sp!, {r4, lr} + ldr r4, [r0] + ldr r1, [r1] + ldr r0, [r4, #0xc] + cmp r0, #7 + beq _021FF4D8 + mov r0, r4 + bl FUN_021FCF88 + cmp r0, #0 + moveq r0, #0 + ldmeqia sp!, {r4, pc} +_021FF4D8: + ldr r0, [r4, #0xc] + cmp r0, #7 + bne _021FF504 + ldr r0, [r4, #0x14] + cmp r0, #0 + bne _021FF504 + ldr r0, [r4, #0x24] + cmp r0, #0 + bne _021FF504 + mov r0, r4 + bl FUN_021FF6BC +_021FF504: + mov r0, #1 + ldmia sp!, {r4, pc} + + arm_func_start FUN_021FF50C +FUN_021FF50C: ; 0x021FF50C + stmdb sp!, {r0, r1, r2, r3} + stmdb sp!, {r4, r5, r6, lr} + sub sp, sp, #0x18 + mov r6, r0 + mov r5, r1 + add r0, sp, #0x34 + add r1, sp, #0x38 + mov r4, r2 + bl FUN_021FFCDC + ldr r0, [r6] + bl FUN_021EFEFC + cmp r0, #0 + addeq sp, sp, #0x18 + moveq r0, #1 + ldmeqia sp!, {r4, r5, r6, lr} + addeq sp, sp, #0x10 + bxeq lr + mov r1, r4, asr #8 + mov r0, r4, lsl #8 + add ip, sp, #0x10 + mov r3, #0 + str r3, [ip] + str r3, [ip, #4] + mov r2, #2 + and r1, r1, #0xff + and r0, r0, #0xff00 + orr r0, r1, r0 + strh r0, [sp, #0x12] + strb r2, [sp, #0x11] + str r5, [sp, #0x14] + str ip, [sp] + mov r0, #8 + str r0, [sp, #4] + ldr r0, [r6] + ldr r1, [sp, #0x34] + ldr r2, [sp, #0x38] + bl FUN_021EFBD4 + mvn r1, #0 + cmp r0, r1 + bne _021FF640 + ldr r0, [r6] + bl FUN_021EFB28 + mvn r1, #0xe + cmp r0, r1 + bne _021FF5EC + mov r0, r6 + mov r1, r5 + mov r2, r4 + bl FUN_021FE0B4 + cmp r0, #0 + bne _021FF6A8 + add sp, sp, #0x18 + mov r0, #0 + ldmia sp!, {r4, r5, r6, lr} + add sp, sp, #0x10 + bx lr +_021FF5EC: + mvn r1, #0x29 + cmp r0, r1 + beq _021FF604 + mvn r1, #5 + cmp r0, r1 + bne _021FF618 +_021FF604: + add sp, sp, #0x18 + mov r0, #1 + ldmia sp!, {r4, r5, r6, lr} + add sp, sp, #0x10 + bx lr +_021FF618: + mvn r1, #0x22 + cmp r0, r1 + beq _021FF6A8 + mov r0, r6 + bl FUN_021FF3F0 + add sp, sp, #0x18 + mov r0, #0 + ldmia sp!, {r4, r5, r6, lr} + add sp, sp, #0x10 + bx lr +_021FF640: + ldr r0, [r6, #0x28] + cmp r0, #0 + beq _021FF6A8 + mov r0, r6 + mov r1, r5 + mov r2, r4 + bl FUN_021FFC3C + mov r1, #0 + str r1, [sp] + ldr r2, [sp, #0x34] + mov r1, r0 + str r2, [sp, #4] + ldr ip, [sp, #0x38] + mov r3, r4 + mov r0, r6 + mov r2, r5 + str ip, [sp, #8] + mov r4, #1 + str r4, [sp, #0xc] + bl FUN_021FC59C + cmp r0, #0 + addeq sp, sp, #0x18 + moveq r0, #0 + ldmeqia sp!, {r4, r5, r6, lr} + addeq sp, sp, #0x10 + bxeq lr +_021FF6A8: + mov r0, #1 + add sp, sp, #0x18 + ldmia sp!, {r4, r5, r6, lr} + add sp, sp, #0x10 + bx lr + + arm_func_start FUN_021FF6BC +FUN_021FF6BC: ; 0x021FF6BC + stmdb sp!, {r0, r1, r2, r3} + stmdb sp!, {r4, r5, r6, lr} + ldr r1, [sp, #0x10] + ldr r0, [r1, #0x14] + cmp r0, #0 + ldmneia sp!, {r4, r5, r6, lr} + addne sp, sp, #0x10 + bxne lr + ldr r0, [r1, #0x24] + cmp r0, #0 + ldmneia sp!, {r4, r5, r6, lr} + addne sp, sp, #0x10 + bxne lr + ldr r0, [r1, #0xc] + cmp r0, #7 + bne _021FF774 + ldr r0, [r1, #8] + ldr r0, [r0, #0x10] + bl FUN_021EF06C + mov r6, r0 + mov r5, #0 + cmp r6, #0 + ldmleia sp!, {r4, r5, r6, lr} + addle sp, sp, #0x10 + bxle lr +_021FF720: + ldr r4, [sp, #0x10] + mov r1, r5 + ldr r0, [r4, #8] + ldr r0, [r0, #0x10] + bl FUN_021EEFFC + ldr r0, [r0] + cmp r4, r0 + bne _021FF75C + ldr r0, [r4, #8] + mov r1, r5 + ldr r0, [r0, #0x10] + bl FUN_021EED84 + ldmia sp!, {r4, r5, r6, lr} + add sp, sp, #0x10 + bx lr +_021FF75C: + add r5, r5, #1 + cmp r5, r6 + blt _021FF720 + ldmia sp!, {r4, r5, r6, lr} + add sp, sp, #0x10 + bx lr +_021FF774: + ldr r0, [r1, #8] + add r1, sp, #0x10 + ldr r0, [r0, #0xc] + bl FUN_021EF3F4 + ldmia sp!, {r4, r5, r6, lr} + add sp, sp, #0x10 + bx lr + + arm_func_start FUN_021FF790 +FUN_021FF790: ; 0x021FF790 + stmdb sp!, {r4, r5, r6, r7, lr} + sub sp, sp, #4 + mov r4, r3 + mov r5, r2 + mov r6, r1 + mov r3, #0 + mov r1, r5 + mov r2, r4 + mov r7, r0 + str r3, [sp] + bl FUN_021FFC3C + cmp r0, #0 + addne sp, sp, #4 + movne r0, #5 + ldmneia sp!, {r4, r5, r6, r7, pc} + bl FUN_021FF9B4 + str r0, [sp] + cmp r0, #0 + beq _021FF930 + mov r1, #0 + mov r2, #0xa0 + bl Call_FillMemWithValue + ldr r0, [sp] + str r5, [r0] + ldr r0, [sp] + strh r4, [r0, #4] + ldr r0, [sp] + str r7, [r0, #8] + bl FUN_021F025C + ldr r2, [sp] + mov r1, #0 + str r0, [r2, #0x1c] + ldr r2, [sp] + ldr r0, [r2, #0x1c] + str r0, [r2, #0x88] + ldr r0, [sp] + strh r1, [r0, #0x64] + ldr r0, [sp] + strh r1, [r0, #0x66] + ldr r0, [sp] + ldr r1, [r7, #0x3c] + add r0, r0, #0x44 + bl FUN_021FC46C + cmp r0, #0 + beq _021FF930 + ldr r0, [sp] + ldr r1, [r7, #0x38] + add r0, r0, #0x50 + bl FUN_021FC46C + cmp r0, #0 + beq _021FF930 + mov r0, #0x10 + mov r1, #0x40 + mov r2, #0 + bl FUN_021EF0E4 + ldr r1, [sp] + str r0, [r1, #0x5c] + ldr r0, [sp] + ldr r0, [r0, #0x5c] + cmp r0, #0 + beq _021FF930 + mov r0, #0x10 + mov r1, #0x40 + mov r2, #0 + bl FUN_021EF0E4 + ldr r1, [sp] + str r0, [r1, #0x60] + ldr r0, [sp] + ldr r0, [r0, #0x60] + cmp r0, #0 + beq _021FF930 + mov r0, #4 + mov r1, #2 + mov r2, #0 + bl FUN_021EF0E4 + ldr r1, [sp] + str r0, [r1, #0x98] + ldr r0, [sp] + ldr r0, [r0, #0x98] + cmp r0, #0 + beq _021FF930 + mov r0, #4 + mov r1, #2 + mov r2, #0 + bl FUN_021EF0E4 + ldr r1, [sp] + str r0, [r1, #0x9c] + ldr r0, [sp] + ldr r0, [r0, #0x9c] + cmp r0, #0 + beq _021FF930 + ldr r0, [r7, #0xc] + add r1, sp, #0 + bl FUN_021EF494 + mov r0, r7 + mov r1, r5 + mov r2, r4 + bl FUN_021FFC3C + str r0, [r6] + ldr r0, [r6] + cmp r0, #0 + addne sp, sp, #4 + movne r0, #0 + ldmneia sp!, {r4, r5, r6, r7, pc} +_021FF930: + ldr r0, [sp] + cmp r0, #0 + beq _021FF9A8 + ldr r0, [r0, #0x44] + bl FUN_021DD82C + ldr r0, [sp] + ldr r0, [r0, #0x50] + bl FUN_021DD82C + ldr r0, [sp] + ldr r0, [r0, #0x5c] + cmp r0, #0 + beq _021FF964 + bl FUN_021EF074 +_021FF964: + ldr r0, [sp] + ldr r0, [r0, #0x60] + cmp r0, #0 + beq _021FF978 + bl FUN_021EF074 +_021FF978: + ldr r0, [sp] + ldr r0, [r0, #0x98] + cmp r0, #0 + beq _021FF98C + bl FUN_021EF074 +_021FF98C: + ldr r0, [sp] + ldr r0, [r0, #0x9c] + cmp r0, #0 + beq _021FF9A0 + bl FUN_021EF074 +_021FF9A0: + ldr r0, [sp] + bl FUN_021DD82C +_021FF9A8: + mov r0, #1 + add sp, sp, #4 + ldmia sp!, {r4, r5, r6, r7, pc} + + arm_func_start FUN_021FF9B4 +FUN_021FF9B4: ; 0x021FF9B4 + ldr ip, _021FF9C0 ; =FUN_021DD860 + mov r0, #0xa0 + bx ip + .align 2, 0 +_021FF9C0: .word FUN_021DD860 + + arm_func_start FUN_021FF9C4 +FUN_021FF9C4: ; 0x021FF9C4 + str r1, [r0, #0x20] + bx lr + + arm_func_start FUN_021FF9CC +FUN_021FF9CC: ; 0x021FF9CC + stmdb sp!, {r4, lr} + mov r4, r0 + ldr r0, [r4, #0x1c] + cmp r0, #0 + movne r0, #1 + strne r0, [r4, #0x14] + ldmneia sp!, {r4, pc} + ldr r0, [r4] + bl FUN_021EFD9C + ldr r0, [r4, #0xc] + bl FUN_021EF5B0 + ldr r0, [r4, #0x10] + bl FUN_021EF074 + mov r0, r4 + bl FUN_021DD82C + bl FUN_021F0248 + ldmia sp!, {r4, pc} + + arm_func_start FUN_021FFA10 +FUN_021FFA10: ; 0x021FFA10 + stmdb sp!, {r4, r5, r6, r7, lr} + sub sp, sp, #0x1c + mov r4, r1 + mov r6, r3 + mov r5, r0 + mov r7, r2 + bl FUN_021F024C + cmp r6, #0 + moveq r6, #0x10000 + cmp r7, #0 + add r1, sp, #0x14 + add r2, sp, #8 + mov r0, r4 + moveq r7, #0x10000 + bl FUN_021FFD28 + cmp r0, #0 + addeq sp, sp, #0x1c + moveq r0, #4 + ldmeqia sp!, {r4, r5, r6, r7, pc} + mov r0, #0x44 + bl FUN_021DD860 + movs r4, r0 + addeq sp, sp, #0x1c + moveq r0, #1 + ldmeqia sp!, {r4, r5, r6, r7, pc} + mov r1, #0 + mov r2, #0x44 + bl Call_FillMemWithValue + mvn r0, #0 + str r0, [r4] + str r6, [r4, #0x3c] + ldr r1, [sp, #0x30] + str r7, [r4, #0x38] + ldr r0, _021FFC30 ; =FUN_021FFC84 + str r1, [r4, #0x24] + str r0, [sp] + mov r0, #0 + ldr r3, _021FFC34 ; =FUN_021FFCB4 + str r0, [sp, #4] + mov r0, #4 + mov r1, #0x20 + mov r2, #2 + bl FUN_021EF62C + str r0, [r4, #0xc] + ldr r0, [r4, #0xc] + cmp r0, #0 + bne _021FFAE0 + mov r0, r4 + bl FUN_021DD82C + add sp, sp, #0x1c + mov r0, #1 + ldmia sp!, {r4, r5, r6, r7, pc} +_021FFAE0: + mov r0, #4 + ldr r2, _021FFC38 ; =0x021FFC74 + mov r1, r0 + bl FUN_021EF0E4 + str r0, [r4, #0x10] + ldr r0, [r4, #0x10] + cmp r0, #0 + bne _021FFB1C + ldr r0, [r4, #0xc] + bl FUN_021EF5B0 + mov r0, r4 + bl FUN_021DD82C + add sp, sp, #0x1c + mov r0, #1 + ldmia sp!, {r4, r5, r6, r7, pc} +_021FFB1C: + mov r0, #2 + mov r1, r0 + mov r2, #0 + bl FUN_021EFDB8 + str r0, [r4] + ldr r1, [r4] + mvn r0, #0 + cmp r1, r0 + bne _021FFB64 + ldr r0, [r4, #0xc] + bl FUN_021EF5B0 + ldr r0, [r4, #0x10] + bl FUN_021EF074 + mov r0, r4 + bl FUN_021DD82C + add sp, sp, #0x1c + mov r0, #3 + ldmia sp!, {r4, r5, r6, r7, pc} +_021FFB64: + add r1, sp, #0xc + mov r0, #0 + str r0, [r1] + str r0, [r1, #4] + ldrh r0, [sp, #8] + ldr r3, [sp, #0x14] + mov ip, #2 + mov r2, r0, asr #8 + mov r0, r0, lsl #8 + and r2, r2, #0xff + and r0, r0, #0xff00 + orr r0, r2, r0 + strb ip, [sp, #0xd] + str r3, [sp, #0x10] + strh r0, [sp, #0xe] + ldr r0, [r4] + mov r2, #8 + bl FUN_021EFD28 + mvn r1, #0 + cmp r0, r1 + bne _021FFBE4 + ldr r0, [r4] + bl FUN_021EFD9C + ldr r0, [r4, #0xc] + bl FUN_021EF5B0 + ldr r0, [r4, #0x10] + bl FUN_021EF074 + mov r0, r4 + bl FUN_021DD82C + add sp, sp, #0x1c + mov r0, #3 + ldmia sp!, {r4, r5, r6, r7, pc} +_021FFBE4: + mov r0, #8 + str r0, [sp, #0x18] + ldr r0, [r4] + add r1, sp, #0xc + add r2, sp, #0x18 + bl FUN_021EFB5C + ldr r1, [sp, #0x10] + mov r0, #0 + str r1, [r4, #4] + ldrh r1, [sp, #0xe] + mov r2, r1, asr #8 + mov r1, r1, lsl #8 + and r2, r2, #0xff + and r1, r1, #0xff00 + orr r1, r2, r1 + strh r1, [r4, #8] + str r4, [r5] + add sp, sp, #0x1c + ldmia sp!, {r4, r5, r6, r7, pc} + .align 2, 0 +_021FFC30: .word FUN_021FFC84 +_021FFC34: .word FUN_021FFCB4 +_021FFC38: .word 0x021FFC74 + + arm_func_start FUN_021FFC3C +FUN_021FFC3C: ; 0x021FFC3C + stmdb sp!, {lr} + sub sp, sp, #0xa4 + add r3, sp, #4 + str r1, [sp, #4] + strh r2, [sp, #8] + str r3, [sp] + ldr r0, [r0, #0xc] + add r1, sp, #0 + bl FUN_021EF358 + cmp r0, #0 + ldrne r0, [r0] + moveq r0, #0 + add sp, sp, #0xa4 + ldmfd sp!, {pc} + ldr ip, _021FFC80 ; =FUN_021FCE4C + ldr r0, [r0] + bx ip + .align 2, 0 +_021FFC80: .word FUN_021FCE4C + + arm_func_start FUN_021FFC84 +FUN_021FFC84: ; 0x021FFC84 + ldr r3, [r0] + ldr r2, [r1] + ldr r0, [r3] + ldr r1, [r2] + cmp r0, r1 + subne r0, r0, r1 + ldreqh r1, [r3, #4] + ldreqh r0, [r2, #4] + subeq r0, r1, r0 + moveq r0, r0, lsl #0x10 + moveq r0, r0, asr #0x10 + bx lr + + arm_func_start FUN_021FFCB4 +FUN_021FFCB4: ; 0x021FFCB4 + stmdb sp!, {lr} + sub sp, sp, #4 + ldr r2, [r0] + ldrh r0, [r2, #4] + ldr r2, [r2] + mul r0, r2, r0 + bl _u32_div_f + mov r0, r1 + add sp, sp, #4 + ldmfd sp!, {pc} + + arm_func_start FUN_021FFCDC +FUN_021FFCDC: ; 0x021FFCDC + stmdb sp!, {r4, lr} + ldr r2, [r0] + mov r4, r1 + cmp r2, #0 + ldreq r2, _021FFD24 ; =0x0220EFD4 + moveq r1, #0 + streq r2, [r0] + streq r1, [r4] + ldmeqia sp!, {r4, pc} + ldr r1, [r4] + mvn r0, #0 + cmp r1, r0 + ldmneia sp!, {r4, pc} + mov r0, r2 + bl strlen + add r0, r0, #1 + str r0, [r4] + ldmia sp!, {r4, pc} + .align 2, 0 +_021FFD24: .word 0x0220EFD4 + + arm_func_start FUN_021FFD28 +FUN_021FFD28: ; 0x021FFD28 + stmdb sp!, {r4, r5, r6, r7, r8, sb, lr} + sub sp, sp, #0x104 + movs r8, r0 + mov r7, r1 + mov r6, r2 + beq _021FFD4C + ldrsb r1, [r8] + cmp r1, #0 + bne _021FFD58 +_021FFD4C: + mov r5, #0 + mov r4, r5 + b _021FFE84 +_021FFD58: + mov r1, #0x3a + bl strchr + movs r4, r0 + moveq r4, #0 + beq _021FFE40 + cmp r4, r8 + moveq r8, #0 + moveq r5, r8 + beq _021FFDB8 + sub sb, r4, r8 + cmp sb, #0x100 + blt _021FFD9C + ldr r0, _021FFEA0 ; =0x0220EFD8 + ldr r1, _021FFEA4 ; =0x0220EFF8 + mov r2, #0 + mov r3, #0x81 + bl __msl_assertion_failed +_021FFD9C: + add r0, sp, #0 + mov r1, r8 + mov r2, sb + bl memcpy + add r8, sp, #0 + mov r0, #0 + strb r0, [r8, sb] +_021FFDB8: + ldrsb r0, [r4, #1] + add r3, r4, #1 + cmp r0, #0 + beq _021FFE10 + ldr r1, _021FFEA8 ; =0x0210430C + mov r2, #0 +_021FFDD0: + cmp r0, #0 + blt _021FFDE0 + cmp r0, #0x80 + blt _021FFDE8 +_021FFDE0: + mov r0, r2 + b _021FFDF4 +_021FFDE8: + mov r0, r0, lsl #1 + ldrh r0, [r1, r0] + and r0, r0, #8 +_021FFDF4: + cmp r0, #0 + addeq sp, sp, #0x104 + moveq r0, #0 + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, pc} + ldrsb r0, [r3, #1]! + cmp r0, #0 + bne _021FFDD0 +_021FFE10: + add r0, r4, #1 + bl atol + cmp r0, #0 + blt _021FFE2C + ldr r1, _021FFEAC ; =0x0000FFFF + cmp r0, r1 + ble _021FFE38 +_021FFE2C: + add sp, sp, #0x104 + mov r0, #0 + ldmia sp!, {r4, r5, r6, r7, r8, sb, pc} +_021FFE38: + mov r0, r0, lsl #0x10 + mov r4, r0, lsr #0x10 +_021FFE40: + cmp r8, #0 + beq _021FFE84 + mov r0, r8 + bl FUN_021EFB38 + mov r5, r0 + mvn r0, #0 + cmp r5, r0 + bne _021FFE84 + mov r0, r8 + bl FUN_0209A6EC + cmp r0, #0 + addeq sp, sp, #0x104 + moveq r0, #0 + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, pc} + ldr r0, [r0, #0xc] + ldr r0, [r0] + ldr r5, [r0] +_021FFE84: + cmp r7, #0 + strne r5, [r7] + cmp r6, #0 + strneh r4, [r6] + mov r0, #1 + add sp, sp, #0x104 + ldmia sp!, {r4, r5, r6, r7, r8, sb, pc} + .align 2, 0 +_021FFEA0: .word 0x0220EFD8 +_021FFEA4: .word 0x0220EFF8 +_021FFEA8: .word 0x0210430C +_021FFEAC: .word 0x0000FFFF + + arm_func_start FUN_021FFEB0 +FUN_021FFEB0: ; 0x021FFEB0 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #4 + movs r5, r2 + mov r4, r1 + bne _021FFEE0 + ldr r2, _021FFF64 ; =0x02211394 + ldr r3, _021FFF68 ; =0x02211398 + ldr ip, [r2] + mov r1, #0x16 + eor ip, ip, #1 + mla r5, ip, r1, r3 + str ip, [r2] +_021FFEE0: + cmp r0, #0 + beq _021FFF38 + str r0, [sp] + cmp r4, #0 + beq _021FFF18 + add r0, sp, #0 + ldmia r0, {r0} + bl FUN_0209A27C + mov r2, r0 + ldr r1, _021FFF6C ; =0x0220F008 + mov r0, r5 + mov r3, r4 + bl sprintf + b _021FFF58 +_021FFF18: + add r0, sp, #0 + ldmia r0, {r0} + bl FUN_0209A27C + mov r2, r0 + ldr r1, _021FFF70 ; =0x0220F010 + mov r0, r5 + bl sprintf + b _021FFF58 +_021FFF38: + cmp r4, #0 + moveq r0, #0 + streqb r0, [r5] + beq _021FFF58 + ldr r1, _021FFF74 ; =0x0220F014 + mov r0, r5 + mov r2, r4 + bl sprintf +_021FFF58: + mov r0, r5 + add sp, sp, #4 + ldmia sp!, {r4, r5, pc} + .align 2, 0 +_021FFF64: .word 0x02211394 +_021FFF68: .word 0x02211398 +_021FFF6C: .word 0x0220F008 +_021FFF70: .word 0x0220F010 +_021FFF74: .word 0x0220F014 + + arm_func_start FUN_021FFF78 +FUN_021FFF78: ; 0x021FFF78 + stmdb sp!, {r4, r5, r6, r7, lr} + sub sp, sp, #0x2c + mov r6, r0 + mov r7, r1 + mov r5, r2 + bl FUN_02200D40 + cmp r0, #0 + addeq sp, sp, #0x2c + ldmeqia sp!, {r4, r5, r6, r7, pc} + ldrb r4, [r6, #7] + cmp r4, #5 + beq _021FFFB0 + cmp r4, #7 + bne _0220004C +_021FFFB0: + cmp r7, #0x14 + addlt sp, sp, #0x2c + ldmltia sp!, {r4, r5, r6, r7, pc} + add r3, sp, #0 + mov r2, #0xa +_021FFFC4: + ldrb r1, [r6], #1 + ldrb r0, [r6], #1 + subs r2, r2, #1 + strb r1, [r3], #1 + strb r0, [r3], #1 + bne _021FFFC4 + ldr r3, [sp, #8] + mov r1, r3, lsr #0x18 + mov r0, r3, lsr #8 + mov r2, r3, lsl #8 + and r1, r1, #0xff + and r0, r0, #0xff00 + mov r3, r3, lsl #0x18 + orr r0, r1, r0 + and r2, r2, #0xff0000 + and r1, r3, #0xff000000 + orr r0, r2, r0 + orr r0, r1, r0 + bl FUN_02200ED4 + cmp r0, #0 + addeq sp, sp, #0x2c + ldmeqia sp!, {r4, r5, r6, r7, pc} + cmp r4, #5 + bne _02200038 + add r1, sp, #0 + mov r2, r5 + bl FUN_022002CC + add sp, sp, #0x2c + ldmia sp!, {r4, r5, r6, r7, pc} +_02200038: + add r1, sp, #0 + mov r2, r5 + bl FUN_022001E4 + add sp, sp, #0x2c + ldmia sp!, {r4, r5, r6, r7, pc} +_0220004C: + cmp r7, #0x15 + addlt sp, sp, #0x2c + ldmltia sp!, {r4, r5, r6, r7, pc} + add r3, sp, #0x14 + mov r2, #0xa +_02200060: + ldrb r1, [r6], #1 + ldrb r0, [r6], #1 + subs r2, r2, #1 + strb r1, [r3], #1 + strb r0, [r3], #1 + bne _02200060 + ldrb r0, [r6] + strb r0, [r3] + ldr r3, [sp, #0x1c] + mov r1, r3, lsr #0x18 + mov r0, r3, lsr #8 + mov r2, r3, lsl #8 + and r1, r1, #0xff + and r0, r0, #0xff00 + mov r3, r3, lsl #0x18 + orr r0, r1, r0 + and r2, r2, #0xff0000 + and r1, r3, #0xff000000 + orr r0, r2, r0 + orr r0, r1, r0 + bl FUN_02200ED4 + cmp r0, #0 + addeq sp, sp, #0x2c + ldmeqia sp!, {r4, r5, r6, r7, pc} + add r1, sp, #0x14 + mov r2, r5 + bl FUN_022000D4 + add sp, sp, #0x2c + ldmia sp!, {r4, r5, r6, r7, pc} + + arm_func_start FUN_022000D4 +FUN_022000D4: ; 0x022000D4 + stmdb sp!, {r4, lr} + sub sp, sp, #8 + mov r3, r1 + ldrb r1, [r3, #7] + mov r4, r0 + cmp r1, #1 + beq _02200100 + cmp r1, #2 + beq _0220019C + add sp, sp, #8 + ldmia sp!, {r4, pc} +_02200100: + ldrb r0, [r3, #0xc] + cmp r0, #2 + addhi sp, sp, #8 + ldmhiia sp!, {r4, pc} + add r0, r4, r0, lsl #2 + mov r1, #1 + str r1, [r0, #0x14] + ldr r0, [r4, #0x10] + cmp r0, #0 + addne sp, sp, #8 + ldmneia sp!, {r4, pc} + ldr r0, [r4, #0x18] + cmp r0, #0 + addeq sp, sp, #8 + ldmeqia sp!, {r4, pc} + ldr r0, [r4, #0x1c] + cmp r0, #0 + addeq sp, sp, #8 + ldmeqia sp!, {r4, pc} + ldr r1, [r4, #4] + mvn r0, #0 + cmp r1, r0 + beq _0220016C + ldr r0, [r4, #0x14] + cmp r0, #0 + addeq sp, sp, #8 + ldmeqia sp!, {r4, pc} +_0220016C: + mov r0, #1 + str r0, [r4, #0x10] + bl FUN_021F025C + ldr r1, _022001E0 ; =0x00002710 + add r0, r0, r1 + str r0, [r4, #0x28] + ldr r0, [r4, #0x10] + ldr r1, [r4, #0x3c] + ldr r2, [r4, #0x34] + blx r2 + add sp, sp, #8 + ldmia sp!, {r4, pc} +_0220019C: + mov r0, #3 + strb r0, [r3, #7] + ldrh r0, [r2, #2] + mov ip, #0x15 + mov r1, r0, asr #8 + mov r0, r0, lsl #8 + str ip, [sp] + and r1, r1, #0xff + and r0, r0, #0xff00 + orr r0, r1, r0 + mov ip, r0, lsl #0x10 + ldr r1, [r2, #4] + ldr r0, [r4] + mov r2, ip, lsr #0x10 + bl FUN_02200CEC + add sp, sp, #8 + ldmia sp!, {r4, pc} + .align 2, 0 +_022001E0: .word 0x00002710 + + arm_func_start FUN_022001E4 +FUN_022001E4: ; 0x022001E4 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #4 + mov r5, r0 + ldr r3, [r5, #0x10] + mov r4, r2 + cmp r3, #2 + addlt sp, sp, #4 + ldmltia sp!, {r4, r5, pc} + ldr r3, [r4, #4] + mov r2, #1 + str r3, [r5, #0x2c] + ldrh r3, [r4, #2] + mov ip, r3, asr #8 + mov r3, r3, lsl #8 + and ip, ip, #0xff + and r3, r3, #0xff00 + orr r3, ip, r3 + strh r3, [r5, #0x30] + strb r2, [r5, #0x32] + ldrb r2, [r1, #0x12] + cmp r2, #0 + bne _02200248 + bl FUN_022008D8 + add sp, sp, #4 + ldmia sp!, {r4, r5, pc} +_02200248: + ldr r2, [r5, #0x10] + cmp r2, #2 + bne _022002AC + ldrb r1, [r5, #0x33] + cmp r1, #0 + bne _02200264 + bl FUN_022008D8 +_02200264: + mov r0, #3 + str r0, [r5, #0x10] + bl FUN_021F025C + ldr r1, _022002C8 ; =0x00001388 + mvn r2, #0 + add r0, r0, r1 + str r0, [r5, #0x28] + ldr r1, [r5, #4] + cmp r1, r2 + addeq sp, sp, #4 + ldmeqia sp!, {r4, r5, pc} + ldr r3, [r5, #0x3c] + ldr r5, [r5, #0x38] + mov r2, r4 + mov r0, #0 + blx r5 + add sp, sp, #4 + ldmia sp!, {r4, r5, pc} +_022002AC: + ldrb r1, [r1, #0x13] + cmp r1, #0 + addne sp, sp, #4 + ldmneia sp!, {r4, r5, pc} + bl FUN_022008D8 + add sp, sp, #4 + ldmia sp!, {r4, r5, pc} + .align 2, 0 +_022002C8: .word 0x00001388 + + arm_func_start FUN_022002CC +FUN_022002CC: ; 0x022002CC + stmdb sp!, {r4, r5, lr} + sub sp, sp, #4 + mov r5, r1 + ldrb r1, [r5, #0x13] + mov r4, r0 + cmp r1, #0 + bne _022002F0 + mov r1, r2 + bl FUN_0220039C +_022002F0: + ldr r0, [r4, #0x10] + cmp r0, #2 + addge sp, sp, #4 + ldmgeia sp!, {r4, r5, pc} + ldrb r1, [r5, #0x13] + cmp r1, #0 + beq _02200348 + mov r0, #3 + cmp r1, #1 + moveq r0, #1 + beq _02200324 + cmp r1, #2 + moveq r0, #2 +_02200324: + ldr r3, [r4, #0x3c] + ldr ip, [r4, #0x38] + mvn r1, #0 + mov r2, #0 + blx ip + ldr r0, [r4, #8] + bl FUN_022006B4 + add sp, sp, #4 + ldmia sp!, {r4, r5, pc} +_02200348: + ldr r0, [r5, #0xc] + mov r1, #0 + str r0, [r4, #0x2c] + ldrh r2, [r5, #0x10] + mov r0, #2 + mov r3, r2, asr #8 + mov r2, r2, lsl #8 + and r3, r3, #0xff + and r2, r2, #0xff00 + orr r2, r3, r2 + strh r2, [r4, #0x30] + str r1, [r4, #0x20] + str r0, [r4, #0x10] + ldr r0, [r4, #0x10] + ldr r1, [r4, #0x3c] + ldr r2, [r4, #0x34] + blx r2 + mov r0, r4 + bl FUN_022008D8 + add sp, sp, #4 + ldmia sp!, {r4, r5, pc} + + arm_func_start FUN_0220039C +FUN_0220039C: ; 0x0220039C + stmdb sp!, {r4, r5, r6, lr} + sub sp, sp, #0x20 + ldr r6, _02200464 ; =0x0220F018 + add r3, sp, #4 + ldrb ip, [r6] + ldrb r2, [r6, #1] + mov r5, #2 + mov r4, #6 + strb ip, [r3] + strb r2, [r3, #1] + ldrb lr, [r6, #2] + ldrb ip, [r6, #3] + mov r2, #0x15 + strb lr, [r3, #2] + strb ip, [r3, #3] + ldrb lr, [r6, #4] + ldrb ip, [r6, #5] + strb lr, [r3, #4] + strb ip, [r3, #5] + strb r5, [sp, #0xa] + strb r4, [sp, #0xb] + ldr r4, [r0, #0xc] + strb r4, [sp, #0x11] + ldr r5, [r0, #8] + mov lr, r5, lsr #0x18 + mov ip, r5, lsr #8 + mov r4, r5, lsl #8 + mov r5, r5, lsl #0x18 + and lr, lr, #0xff + and ip, ip, #0xff00 + and r4, r4, #0xff0000 + orr ip, lr, ip + and r5, r5, #0xff000000 + orr r4, r4, ip + orr r4, r5, r4 + str r4, [sp, #0xc] + ldrh lr, [r1, #2] + str r2, [sp] + mov ip, lr, asr #8 + mov r2, lr, lsl #8 + and ip, ip, #0xff + and r2, r2, #0xff00 + orr r2, ip, r2 + mov r2, r2, lsl #0x10 + ldr r0, [r0] + ldr r1, [r1, #4] + mov r2, r2, lsr #0x10 + bl FUN_02200CEC + add sp, sp, #0x20 + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +_02200464: .word 0x0220F018 + + arm_func_start FUN_02200468 +FUN_02200468: ; 0x02200468 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #4 + ldr r0, _022004B8 ; =0x022113D4 + ldr r0, [r0] + cmp r0, #0 + addeq sp, sp, #4 + ldmeqia sp!, {r4, r5, pc} + bl FUN_021EF06C + subs r5, r0, #1 + addmi sp, sp, #4 + ldmmiia sp!, {r4, r5, pc} + ldr r4, _022004B8 ; =0x022113D4 +_02200498: + ldr r0, [r4] + mov r1, r5 + bl FUN_021EEFFC + bl FUN_022004BC + subs r5, r5, #1 + bpl _02200498 + add sp, sp, #4 + ldmia sp!, {r4, r5, pc} + .align 2, 0 +_022004B8: .word 0x022113D4 + + arm_func_start FUN_022004BC +FUN_022004BC: ; 0x022004BC + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} + sub sp, sp, #0x20 + mov r1, #8 + mov sb, r0 + str r1, [sp, #0x10] + ldr r1, [sb, #0x10] + cmp r1, #4 + bne _022004E8 + bl FUN_02200DA4 + add sp, sp, #0x20 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} +_022004E8: + ldr r0, [sb] + mvn sl, #0 + cmp r0, sl + beq _02200564 + ldr r6, _022006B0 ; =0x022113D8 + add r8, sp, #8 + add r7, sp, #0x10 + mov r5, #0x200 + mov r4, #0 +_0220050C: + bl FUN_021EFF2C + cmp r0, #0 + beq _02200564 + str r8, [sp] + str r7, [sp, #4] + ldr r0, [sb] + mov r1, r6 + mov r2, r5 + mov r3, r4 + bl FUN_021EFC40 + mov r1, r0 + cmp r1, sl + beq _02200564 + mov r0, r6 + mov r2, r8 + bl FUN_021FFF78 + ldr r0, [sb, #0x10] + cmp r0, #4 + beq _02200564 + ldr r0, [sb] + cmp r0, sl + bne _0220050C +_02200564: + ldr r0, [sb, #0x10] + cmp r0, #0 + beq _02200578 + cmp r0, #2 + bne _022005E4 +_02200578: + bl FUN_021F025C + ldr r1, [sb, #0x28] + cmp r0, r1 + bls _022005E4 + ldr r1, [sb, #0x20] + ldr r0, [sb, #0x24] + cmp r1, r0 + ble _022005BC + ldr r3, [sb, #0x3c] + ldr r4, [sb, #0x38] + mov r0, #2 + mvn r1, #0 + mov r2, #0 + blx r4 + ldr r0, [sb, #8] + bl FUN_022006B4 + b _022005E4 +_022005BC: + add r0, r1, #1 + str r0, [sb, #0x20] + ldr r0, [sb, #0x10] + cmp r0, #0 + bne _022005DC + mov r0, sb + bl FUN_022009F8 + b _022005E4 +_022005DC: + mov r0, sb + bl FUN_022008D8 +_022005E4: + ldr r0, [sb, #0x10] + cmp r0, #3 + bne _02200664 + bl FUN_021F025C + ldr r1, [sb, #0x28] + cmp r0, r1 + bls _02200664 + ldr r1, [sb, #4] + mvn r0, #0 + cmp r1, r0 + bne _0220065C + mov r0, #2 + strb r0, [sp, #0x15] + ldrh r1, [sb, #0x30] + add r2, sp, #0x14 + mov r0, #0 + mov r3, r1, asr #8 + mov r1, r1, lsl #8 + and r3, r3, #0xff + and r1, r1, #0xff00 + orr r1, r3, r1 + strh r1, [sp, #0x16] + ldr r1, [sb, #0x2c] + str r1, [sp, #0x18] + ldr r1, [sb] + ldr r3, [sb, #0x3c] + ldr r4, [sb, #0x38] + blx r4 + mvn r0, #0 + str r0, [sb] +_0220065C: + ldr r0, [sb, #8] + bl FUN_022006B4 +_02200664: + ldr r0, [sb, #0x10] + cmp r0, #1 + addne sp, sp, #0x20 + ldmneia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + bl FUN_021F025C + ldr r1, [sb, #0x28] + cmp r0, r1 + addls sp, sp, #0x20 + ldmlsia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + ldr r3, [sb, #0x3c] + ldr r4, [sb, #0x38] + mov r0, #1 + mvn r1, #0 + mov r2, #0 + blx r4 + ldr r0, [sb, #8] + bl FUN_022006B4 + add sp, sp, #0x20 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + .align 2, 0 +_022006B0: .word 0x022113D8 + + arm_func_start FUN_022006B4 +FUN_022006B4: ; 0x022006B4 + stmdb sp!, {r4, lr} + bl FUN_02200ED4 + movs r4, r0 + ldmeqia sp!, {r4, pc} + ldr r0, [r4] + mvn r1, #0 + cmp r0, r1 + beq _022006D8 + bl FUN_021EFD9C +_022006D8: + mvn r0, #0 + str r0, [r4] + mov r0, #4 + str r0, [r4, #0x10] + ldmia sp!, {r4, pc} + + arm_func_start FUN_022006EC +FUN_022006EC: ; 0x022006EC + stmdb sp!, {r4, r5, r6, r7, r8, lr} + ldr ip, _022007B4 ; =0x02210E5C + mov r8, r0 + ldr r0, [ip] + mov r7, r1 + cmp r0, #1 + mov r6, r2 + mov r5, r3 + movne r0, #2 + ldmneia sp!, {r4, r5, r6, r7, r8, pc} + bl FUN_022007B8 + cmp r0, #0 + moveq r0, #3 + ldmeqia sp!, {r4, r5, r6, r7, r8, pc} + bl FUN_02200E0C + movs r4, r0 + moveq r0, #1 + ldmeqia sp!, {r4, r5, r6, r7, r8, pc} + str r8, [r4, #4] + str r6, [r4, #0xc] + str r7, [r4, #8] + ldr r1, [sp, #0x18] + str r5, [r4, #0x34] + mov r0, #2 + ldr r2, [sp, #0x1c] + str r1, [r4, #0x38] + mov r1, r0 + str r2, [r4, #0x3c] + mov r2, #0 + bl FUN_021EFDB8 + str r0, [r4] + mov r0, #0 + str r0, [r4, #0x20] + strb r0, [r4, #0x32] + strb r0, [r4, #0x33] + str r0, [r4, #0x2c] + strh r0, [r4, #0x30] + str r0, [r4, #0x24] + ldr r1, [r4] + mvn r0, #0 + cmp r1, r0 + bne _022007A4 + mov r0, r4 + bl FUN_02200DA4 + mov r0, #2 + ldmia sp!, {r4, r5, r6, r7, r8, pc} +_022007A4: + mov r0, r4 + bl FUN_022009F8 + mov r0, #0 + ldmia sp!, {r4, r5, r6, r7, r8, pc} + .align 2, 0 +_022007B4: .word 0x02210E5C + + arm_func_start FUN_022007B8 +FUN_022007B8: ; 0x022007B8 + stmdb sp!, {lr} + sub sp, sp, #4 + ldr r0, _02200848 ; =0x022113D0 + ldr r0, [r0] + cmp r0, #0 + bne _022007E8 + ldr r0, _0220084C ; =0x022113C8 + ldr r1, _02200850 ; =0x0220F020 + ldr r0, [r0] + bl FUN_02200860 + ldr r1, _02200848 ; =0x022113D0 + str r0, [r1] +_022007E8: + ldr r0, _02200854 ; =0x022113CC + ldr r0, [r0] + cmp r0, #0 + bne _02200810 + ldr r0, _02200858 ; =0x022113C4 + ldr r1, _0220085C ; =0x0220F03C + ldr r0, [r0] + bl FUN_02200860 + ldr r1, _02200854 ; =0x022113CC + str r0, [r1] +_02200810: + ldr r0, _02200848 ; =0x022113D0 + ldr r0, [r0] + cmp r0, #0 + beq _02200830 + ldr r0, _02200854 ; =0x022113CC + ldr r0, [r0] + cmp r0, #0 + bne _0220083C +_02200830: + add sp, sp, #4 + mov r0, #0 + ldmfd sp!, {pc} +_0220083C: + mov r0, #1 + add sp, sp, #4 + ldmfd sp!, {pc} + .align 2, 0 +_02200848: .word 0x022113D0 +_0220084C: .word 0x022113C8 +_02200850: .word 0x0220F020 +_02200854: .word 0x022113CC +_02200858: .word 0x022113C4 +_0220085C: .word 0x0220F03C + + arm_func_start FUN_02200860 +FUN_02200860: ; 0x02200860 + stmdb sp!, {lr} + sub sp, sp, #0x84 + cmp r0, #0 + bne _0220088C + ldr r2, _02200898 ; =0x0220F058 + str r1, [sp] + ldr r3, _0220089C ; =0x02210EA0 + add r0, sp, #4 + mov r1, #0x80 + bl snprintf + add r0, sp, #4 +_0220088C: + bl FUN_022008A0 + add sp, sp, #0x84 + ldmfd sp!, {pc} + .align 2, 0 +_02200898: .word 0x0220F058 +_0220089C: .word 0x02210EA0 + + arm_func_start FUN_022008A0 +FUN_022008A0: ; 0x022008A0 + stmdb sp!, {r4, lr} + mov r4, r0 + bl FUN_021EFB38 + mvn r1, #0 + cmp r0, r1 + ldmneia sp!, {r4, pc} + mov r0, r4 + bl FUN_0209A6EC + cmp r0, #0 + moveq r0, #0 + ldrne r0, [r0, #0xc] + ldrne r0, [r0] + ldrne r0, [r0] + ldmia sp!, {r4, pc} + + arm_func_start FUN_022008D8 +FUN_022008D8: ; 0x022008D8 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #0x1c + ldr lr, _022009F4 ; =0x0220F018 + add r5, sp, #4 + ldrb r4, [lr] + ldrb r3, [lr, #1] + mov r2, #2 + mov r1, #7 + strb r4, [r5] + strb r3, [r5, #1] + ldrb ip, [lr, #2] + ldrb r3, [lr, #3] + mov r4, r0 + strb ip, [r5, #2] + strb r3, [r5, #3] + ldrb r3, [lr, #4] + ldrb r0, [lr, #5] + strb r3, [r5, #4] + strb r0, [r5, #5] + strb r2, [sp, #0xa] + strb r1, [sp, #0xb] + ldr r3, [r4, #8] + mov r1, r3, lsr #0x18 + mov r0, r3, lsr #8 + mov r2, r3, lsl #8 + and r1, r1, #0xff + and r0, r0, #0xff00 + mov r3, r3, lsl #0x18 + orr r0, r1, r0 + and r2, r2, #0xff0000 + and r1, r3, #0xff000000 + orr r0, r2, r0 + orr r0, r1, r0 + str r0, [sp, #0xc] + ldr r0, [r4, #0x2c] + add r3, sp, #4 + str r0, [sp, #0x10] + ldrh r0, [r4, #0x30] + mov r1, r0, asr #8 + mov r0, r0, lsl #8 + and r1, r1, #0xff + and r0, r0, #0xff00 + orr r0, r1, r0 + strh r0, [sp, #0x14] + ldrb r0, [r4, #0x32] + mvn r1, #0 + strb r0, [sp, #0x16] + ldr r0, [r4, #0x10] + cmp r0, #2 + movne r0, #1 + moveq r0, #0 + strb r0, [sp, #0x17] + ldr r0, [r4, #4] + cmp r0, r1 + ldreq r0, [r4] + mov r1, #0x14 + str r1, [sp] + ldrh r2, [r4, #0x30] + ldr r1, [r4, #0x2c] + bl FUN_02200CEC + bl FUN_021F025C + add r0, r0, #0x2bc + str r0, [r4, #0x28] + mov r0, #0xc + str r0, [r4, #0x24] + ldrb r0, [r4, #0x32] + cmp r0, #0 + movne r0, #1 + strneb r0, [r4, #0x33] + add sp, sp, #0x1c + ldmia sp!, {r4, r5, pc} + .align 2, 0 +_022009F4: .word 0x0220F018 + + arm_func_start FUN_022009F8 +FUN_022009F8: ; 0x022009F8 + stmdb sp!, {r4, r5, r6, r7, r8, lr} + sub sp, sp, #0x60 + ldr r7, _02200C30 ; =0x0220F018 + mov r6, r0 + ldrb r4, [r7] + ldrb r3, [r7, #1] + add r5, sp, #4 + mov r2, #2 + strb r4, [r5] + strb r3, [r5, #1] + ldrb r4, [r7, #2] + ldrb r3, [r7, #3] + mov r1, #0 + mvn r0, #0 + strb r4, [r5, #2] + strb r3, [r5, #3] + ldrb r4, [r7, #4] + ldrb r3, [r7, #5] + strb r4, [r5, #4] + strb r3, [r5, #5] + strb r2, [r5, #6] + strb r1, [r5, #7] + ldr r2, [r6, #0xc] + strb r2, [r5, #0xd] + ldr r7, [r6, #8] + mov r3, r7, lsr #0x18 + mov r2, r7, lsr #8 + mov r4, r7, lsl #8 + and r3, r3, #0xff + and r2, r2, #0xff00 + mov r7, r7, lsl #0x18 + orr r2, r3, r2 + and r4, r4, #0xff0000 + and r3, r7, #0xff000000 + orr r2, r4, r2 + orr r2, r3, r2 + str r2, [r5, #8] + ldr r2, [r6, #4] + cmp r2, r0 + movne r1, #1 + strb r1, [r5, #0xe] + bl FUN_02200C78 + mov r7, r0 + bl FUN_02200C78 + mov r8, r0 + bl FUN_02200C78 + mov r4, r0 + bl FUN_02200C78 + mov r2, #0 + mov r1, r7, lsl #0x18 + and r7, r1, #0xff000000 + mov r1, r8, lsl #8 + mov r0, r0, lsr #8 + and r3, r1, #0xff0000 + mov r1, r4, lsr #0x18 + and r1, r1, #0xff + and r0, r0, #0xff00 + orr r0, r1, r0 + orr r0, r3, r0 + orr r3, r7, r0 + mov r1, r3, lsr #0x18 + strb r1, [sp, #0x13] + mov r1, r3, lsr #8 + mov r0, r3, lsr #0x10 + strb r1, [sp, #0x15] + strb r0, [sp, #0x14] + ldr r1, _02200C34 ; =0x02210EA0 + add r0, sp, #0x19 + strb r3, [sp, #0x16] + strb r2, [sp, #0x17] + strb r2, [sp, #0x18] + bl strcpy + ldr r0, _02200C34 ; =0x02210EA0 + bl strlen + ldrb r1, [r5, #0xe] + add r4, r0, #0x16 + cmp r1, #0 + beq _02200B60 + ldr r0, [r6, #0x14] + cmp r0, #0 + bne _02200B60 + mov r0, #0 + strb r0, [r5, #0xc] + str r4, [sp] + ldr r1, _02200C38 ; =0x022113D0 + ldr r0, [r6, #4] + ldr r1, [r1] + ldr r2, _02200C3C ; =0x00006CFD + mov r3, r5 + bl FUN_02200CEC +_02200B60: + ldr r0, [r6, #0x18] + cmp r0, #0 + bne _02200B90 + mov r0, #1 + strb r0, [r5, #0xc] + str r4, [sp] + ldr r1, _02200C38 ; =0x022113D0 + ldr r0, [r6] + ldr r1, [r1] + ldr r2, _02200C3C ; =0x00006CFD + mov r3, r5 + bl FUN_02200CEC +_02200B90: + ldrb r0, [r5, #0xe] + cmp r0, #0 + ldrne r8, [r6, #4] + ldreq r8, [r6] + cmp r0, #0 + ldrne r0, [r6, #4] + ldreq r0, [r6] + bl FUN_02200C44 + mov r7, r0 + mov r0, r8 + bl FUN_02200C44 + mov r1, r7, asr #8 + mov r0, r0, lsl #8 + and r1, r1, #0xff + and r0, r0, #0xff00 + orr r0, r1, r0 + mov r0, r0, lsl #0x10 + mov r1, r0, lsr #0x10 + mov r0, r1, asr #8 + strb r1, [sp, #0x18] + strb r0, [sp, #0x17] + ldr r0, [r6, #0x1c] + cmp r0, #0 + bne _02200C14 + mov r0, #2 + strb r0, [r5, #0xc] + str r4, [sp] + ldr r1, _02200C40 ; =0x022113CC + ldr r0, [r6] + ldr r1, [r1] + ldr r2, _02200C3C ; =0x00006CFD + mov r3, r5 + bl FUN_02200CEC +_02200C14: + bl FUN_021F025C + add r0, r0, #0x1f4 + str r0, [r6, #0x28] + mov r0, #0x1e + str r0, [r6, #0x24] + add sp, sp, #0x60 + ldmia sp!, {r4, r5, r6, r7, r8, pc} + .align 2, 0 +_02200C30: .word 0x0220F018 +_02200C34: .word 0x02210EA0 +_02200C38: .word 0x022113D0 +_02200C3C: .word 0x00006CFD +_02200C40: .word 0x022113CC + + arm_func_start FUN_02200C44 +FUN_02200C44: ; 0x02200C44 + stmdb sp!, {lr} + sub sp, sp, #0xc + mov r3, #8 + add r1, sp, #0 + add r2, sp, #8 + str r3, [sp, #8] + bl FUN_021EFB5C + mvn r1, #0 + cmp r0, r1 + moveq r0, #0 + ldrneh r0, [sp, #2] + add sp, sp, #0xc + ldmfd sp!, {pc} + + arm_func_start FUN_02200C78 +FUN_02200C78: ; 0x02200C78 + stmdb sp!, {r4, r5, r6, r7, lr} + sub sp, sp, #4 + mov r5, #0 + bl FUN_021EFE70 + movs r6, r0 + addeq sp, sp, #4 + moveq r0, r5 + ldmeqia sp!, {r4, r5, r6, r7, pc} + ldr r4, _02200CE8 ; =0x0100007F + mov r7, r5 +_02200CA0: + ldr r0, [r6, #0xc] + ldr r0, [r0, r7, lsl #2] + cmp r0, #0 + beq _02200CDC + ldr r1, [r0] + cmp r1, r4 + beq _02200CD4 + mov r5, r1 + bl FUN_021EFDEC + cmp r0, #0 + addne sp, sp, #4 + movne r0, r5 + ldmneia sp!, {r4, r5, r6, r7, pc} +_02200CD4: + add r7, r7, #1 + b _02200CA0 +_02200CDC: + mov r0, r5 + add sp, sp, #4 + ldmia sp!, {r4, r5, r6, r7, pc} + .align 2, 0 +_02200CE8: .word 0x0100007F + + arm_func_start FUN_02200CEC +FUN_02200CEC: ; 0x02200CEC + stmdb sp!, {lr} + sub sp, sp, #0x14 + mov ip, r2, asr #8 + mov r2, r2, lsl #8 + str r1, [sp, #0xc] + mov r1, r3 + and r3, ip, #0xff + and r2, r2, #0xff00 + orr r2, r3, r2 + mov lr, #2 + strh r2, [sp, #0xa] + add r3, sp, #8 + strb lr, [sp, #9] + str r3, [sp] + mov ip, #8 + ldr r2, [sp, #0x18] + mov r3, #0 + str ip, [sp, #4] + bl FUN_021EFBD4 + add sp, sp, #0x14 + ldmfd sp!, {pc} + + arm_func_start FUN_02200D40 +FUN_02200D40: ; 0x02200D40 + stmdb sp!, {lr} + sub sp, sp, #4 + ldr r1, _02200D68 ; =0x0220F018 + mov r2, #6 + bl memcmp + cmp r0, #0 + moveq r0, #1 + movne r0, #0 + add sp, sp, #4 + ldmfd sp!, {pc} + .align 2, 0 +_02200D68: .word 0x0220F018 + + arm_func_start FUN_02200D6C +FUN_02200D6C: ; 0x02200D6C + stmdb sp!, {lr} + sub sp, sp, #4 + ldr r0, _02200DA0 ; =0x022113D4 + ldr r0, [r0] + cmp r0, #0 + addeq sp, sp, #4 + ldmeqia sp!, {pc} + bl FUN_021EF074 + ldr r0, _02200DA0 ; =0x022113D4 + mov r1, #0 + str r1, [r0] + add sp, sp, #4 + ldmfd sp!, {pc} + .align 2, 0 +_02200DA0: .word 0x022113D4 + + arm_func_start FUN_02200DA4 +FUN_02200DA4: ; 0x02200DA4 + stmdb sp!, {r4, r5, r6, lr} + ldr r1, _02200E08 ; =0x022113D4 + mov r6, r0 + ldr r0, [r1] + mov r5, #0 + bl FUN_021EF06C + cmp r0, #0 + ldmleia sp!, {r4, r5, r6, pc} + ldr r4, _02200E08 ; =0x022113D4 +_02200DC8: + ldr r0, [r4] + mov r1, r5 + bl FUN_021EEFFC + cmp r6, r0 + bne _02200DF0 + ldr r0, _02200E08 ; =0x022113D4 + mov r1, r5 + ldr r0, [r0] + bl FUN_021EEDE0 + ldmia sp!, {r4, r5, r6, pc} +_02200DF0: + ldr r0, [r4] + add r5, r5, #1 + bl FUN_021EF06C + cmp r5, r0 + blt _02200DC8 + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +_02200E08: .word 0x022113D4 + + arm_func_start FUN_02200E0C +FUN_02200E0C: ; 0x02200E0C + stmdb sp!, {lr} + sub sp, sp, #0x44 + mov r0, #0 + add r2, sp, #0 + mov r1, r0 + stmia r2!, {r0, r1} + stmia r2!, {r0, r1} + stmia r2!, {r0, r1} + stmia r2!, {r0, r1} + stmia r2!, {r0, r1} + stmia r2!, {r0, r1} + stmia r2!, {r0, r1} + stmia r2, {r0, r1} + ldr r0, _02200E9C ; =0x022113D4 + ldr r0, [r0] + cmp r0, #0 + bne _02200E68 + ldr r2, _02200EA0 ; =FUN_02200EA4 + mov r0, #0x40 + mov r1, #4 + bl FUN_021EF0E4 + ldr r1, _02200E9C ; =0x022113D4 + str r0, [r1] +_02200E68: + ldr r0, _02200E9C ; =0x022113D4 + add r1, sp, #0 + ldr r0, [r0] + bl FUN_021EEFA8 + ldr r0, _02200E9C ; =0x022113D4 + ldr r0, [r0] + bl FUN_021EF06C + ldr r2, _02200E9C ; =0x022113D4 + sub r1, r0, #1 + ldr r0, [r2] + bl FUN_021EEFFC + add sp, sp, #0x44 + ldmfd sp!, {pc} + .align 2, 0 +_02200E9C: .word 0x022113D4 +_02200EA0: .word FUN_02200EA4 + + arm_func_start FUN_02200EA4 +FUN_02200EA4: ; 0x02200EA4 + stmdb sp!, {r4, lr} + mov r4, r0 + ldr r0, [r4] + mvn r1, #0 + cmp r0, r1 + beq _02200EC0 + bl FUN_021EFD9C +_02200EC0: + mvn r0, #0 + str r0, [r4] + mov r0, #4 + str r0, [r4, #0x10] + ldmia sp!, {r4, pc} + + arm_func_start FUN_02200ED4 +FUN_02200ED4: ; 0x02200ED4 + stmdb sp!, {r4, r5, r6, lr} + ldr r1, _02200F38 ; =0x022113D4 + mov r6, r0 + ldr r0, [r1] + cmp r0, #0 + moveq r0, #0 + ldmeqia sp!, {r4, r5, r6, pc} + mov r5, #0 + bl FUN_021EF06C + cmp r0, #0 + ble _02200F30 + ldr r4, _02200F38 ; =0x022113D4 +_02200F04: + ldr r0, [r4] + mov r1, r5 + bl FUN_021EEFFC + ldr r1, [r0, #8] + cmp r1, r6 + ldmeqia sp!, {r4, r5, r6, pc} + ldr r0, [r4] + add r5, r5, #1 + bl FUN_021EF06C + cmp r5, r0 + blt _02200F04 +_02200F30: + mov r0, #0 + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +_02200F38: .word 0x022113D4 + + arm_func_start FUN_02200F3C +FUN_02200F3C: ; 0x02200F3C + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + ldr ip, _02201120 ; =0x0000082C + sub sp, sp, ip + mov sl, r0 + mov sb, r1 + mov r3, #0 + add r0, sp, #0x24 + add r2, sl, #0x84 + mov r1, #3 + str r3, [sp, #0x824] + bl FUN_02201DCC + ldr r4, _02201124 ; =0x022115D8 + mov r8, #0 + ldr r0, [r4] + cmp r0, #0 + ble _02200FD0 + ldr fp, _02201128 ; =0x0220F174 + ldr r5, _0220112C ; =0x022115DC + add r7, sp, #0x10 + add r6, sp, #0x24 +_02200F8C: + mov r0, r7 + mov r1, fp + mov r2, r8 + bl sprintf + mov r0, r6 + mov r1, r7 + bl FUN_022021C0 + add r0, r5, r8, lsl #2 + ldmia r0, {r0} + bl FUN_0209A27C + mov r1, r0 + mov r0, r6 + bl FUN_022021C0 + add r8, r8, #1 + ldr r0, [r4] + cmp r8, r0 + blt _02200F8C +_02200FD0: + ldr r1, _02201130 ; =0x0220F180 + add r0, sp, #0x24 + bl FUN_022021C0 + ldr r1, [sl, #0xc0] + add r0, sp, #0x24 + bl FUN_02202220 + ldr r1, _02201134 ; =0x0220F18C + add r0, sp, #0x24 + bl FUN_022021C0 + ldr r0, [sl, #0xc8] + cmp r0, #0 + ldrne r1, _02201138 ; =0x0220F194 + add r0, sp, #0x24 + ldreq r1, _0220113C ; =0x0220F198 + bl FUN_022021C0 + cmp sb, #0 + beq _0220102C + ldr r1, _02201140 ; =0x0220F19C + add r0, sp, #0x24 + bl FUN_022021C0 + add r0, sp, #0x24 + mov r1, sb + bl FUN_02202220 +_0220102C: + ldr r1, _02201144 ; =0x0220F1AC + add r0, sp, #0x24 + bl FUN_022021C0 + add r0, sp, #0x24 + add r1, sl, #4 + bl FUN_022021C0 + ldr r0, [sl, #0xa8] + cmp r0, #0 + beq _02201084 + ldr r1, _02201148 ; =0x0220F1B8 + add r0, sp, #0x24 + bl FUN_022021C0 + ldr r1, [sl, #0x104] + add r0, sp, #0x24 + bl FUN_02202220 + ldr r1, _0220114C ; =0x0220F1C4 + add r0, sp, #0x24 + bl FUN_022021C0 + add r0, sl, #0x100 + ldrh r1, [r0, #8] + add r0, sp, #0x24 + bl FUN_02202220 +_02201084: + cmp sb, #2 + beq _022010B4 + mov r2, #0xff + str r2, [sp] + mov r3, #0 + str r3, [sp, #4] + str r2, [sp, #8] + add r1, sp, #0x24 + mov r0, sl + str r3, [sp, #0xc] + bl FUN_022019B4 + b _022010D4 +_022010B4: + ldr r2, [sp, #0x824] + rsb r0, r2, #0x800 + cmp r0, #1 + addge r1, r2, #1 + strge r1, [sp, #0x824] + addge r0, sp, #0x24 + movge r1, #0 + strgeb r1, [r0, r2] +_022010D4: + add r0, sl, #0xcc + str r0, [sp] + mov r0, #8 + str r0, [sp, #4] + ldr r0, [sl] + ldr r2, [sp, #0x824] + add r1, sp, #0x24 + mov r3, #0 + bl FUN_021EFBD4 + bl FUN_021F025C + str r0, [sl, #0xac] + ldr r0, [sl, #0xac] + cmp sb, #0 + str r0, [sl, #0xb0] + movne r0, #0 + strne r0, [sl, #0xb4] + ldr ip, _02201120 ; =0x0000082C + add sp, sp, ip + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_02201120: .word 0x0000082C +_02201124: .word 0x022115D8 +_02201128: .word 0x0220F174 +_0220112C: .word 0x022115DC +_02201130: .word 0x0220F180 +_02201134: .word 0x0220F18C +_02201138: .word 0x0220F194 +_0220113C: .word 0x0220F198 +_02201140: .word 0x0220F19C +_02201144: .word 0x0220F1AC +_02201148: .word 0x0220F1B8 +_0220114C: .word 0x0220F1C4 + + arm_func_start FUN_02201150 +FUN_02201150: ; 0x02201150 + stmdb sp!, {r4, lr} + sub sp, sp, #0x810 + mov r4, r0 + mov r3, #0 + add r0, sp, #8 + add r2, r4, #0x84 + mov r1, #8 + str r3, [sp, #0x808] + bl FUN_02201DCC + add r0, r4, #0xcc + str r0, [sp] + mov r0, #8 + str r0, [sp, #4] + ldr r0, [r4] + ldr r2, [sp, #0x808] + add r1, sp, #8 + mov r3, #0 + bl FUN_021EFBD4 + bl FUN_021F025C + str r0, [r4, #0xb0] + add sp, sp, #0x810 + ldmia sp!, {r4, pc} + + arm_func_start FUN_022011A8 +FUN_022011A8: ; 0x022011A8 + stmdb sp!, {r4, r5, r6, r7, r8, sb, lr} + ldr ip, _02201504 ; =0x00000814 + sub sp, sp, ip + movs r8, r0 + mov r0, #0 + str r0, [sp, #0x80c] + ldreq r0, _02201508 ; =0x0220F060 + mov r7, r2 + ldreq r8, [r0] + ldrsb r0, [r1] + mov r6, r3 + cmp r0, #0x3b + bne _0220120C + ldr r3, [r8, #0xd4] + cmp r3, #0 + ldreq ip, _02201504 ; =0x00000814 + addeq sp, sp, ip + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, pc} + mov r0, r1 + mov r1, r7 + mov r2, r6 + blx r3 + ldr ip, _02201504 ; =0x00000814 + add sp, sp, ip + ldmia sp!, {r4, r5, r6, r7, r8, sb, pc} +_0220120C: + cmp r0, #0x5c + bne _0220124C + add r1, sp, #0xc + mov r0, r8 + bl FUN_022016A8 + str r6, [sp] + mov r0, #8 + str r0, [sp, #4] + ldr r0, [r8] + ldr r2, [sp, #0x80c] + add r1, sp, #0xc + mov r3, #0 + bl FUN_021EFBD4 + ldr ip, _02201504 ; =0x00000814 + add sp, sp, ip + ldmia sp!, {r4, r5, r6, r7, r8, sb, pc} +_0220124C: + cmp r7, #7 + ldrlt ip, _02201504 ; =0x00000814 + addlt sp, sp, ip + ldmltia sp!, {r4, r5, r6, r7, r8, sb, pc} + and r0, r0, #0xff + cmp r0, #0xfe + ldrne ip, _02201504 ; =0x00000814 + addne sp, sp, ip + ldmneia sp!, {r4, r5, r6, r7, r8, sb, pc} + ldrb r0, [r1, #1] + cmp r0, #0xfd + ldrne ip, _02201504 ; =0x00000814 + addne sp, sp, ip + ldmneia sp!, {r4, r5, r6, r7, r8, sb, pc} + ldr r0, [r8, #0xb8] + add r5, r1, #3 + cmp r0, #0 + movgt r0, #0 + strgt r0, [r8, #0xb8] + ldrsb sb, [r1, #2] + add r4, r1, #7 + add r0, sp, #0xc + mov r1, sb + mov r2, r5 + sub r7, r7, #7 + bl FUN_02201DCC + cmp sb, #8 + addls pc, pc, sb, lsl #2 + b _022014CC +_022012C0: ; jump table + b _022012E4 ; case 0 + b _022012FC ; case 1 + b _02201338 ; case 2 + b _022014CC ; case 3 + b _02201370 ; case 4 + b _022014CC ; case 5 + b _022013F8 ; case 6 + b _022014CC ; case 7 + b _022014CC ; case 8 +_022012E4: + add r1, sp, #0xc + mov r0, r8 + mov r2, r4 + mov r3, r7 + bl FUN_022018F0 + b _022014D8 +_022012FC: + cmp r7, #0xd + blt _02201320 + ldr r0, [r8, #0xa8] + cmp r0, #0 + beq _02201320 + add r1, r4, r7 + mov r0, r8 + sub r1, r1, #0xd + bl FUN_02201C70 +_02201320: + add r1, sp, #0xc + mov r0, r8 + mov r2, r4 + mov r3, r7 + bl FUN_02201D2C + b _022014D8 +_02201338: + ldr r0, [sp, #0x80c] + cmp r7, #0x20 + movgt r7, #0x20 + add r3, sp, #0xc + mov r5, #5 + mov r1, r4 + mov r2, r7 + add r0, r3, r0 + strb r5, [sp, #0xc] + bl memcpy + ldr r0, [sp, #0x80c] + add r0, r0, r7 + str r0, [sp, #0x80c] + b _022014D8 +_02201370: + ldr r1, [r8, #0xb8] + mvn r0, #0 + cmp r1, r0 + ldreq ip, _02201504 ; =0x00000814 + addeq sp, sp, ip + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, pc} + mov r0, #0 + str r0, [sp, #8] +_02201390: + ldr r2, [sp, #8] + add r0, r8, r2 + ldrsb r1, [r5, r2] + ldrsb r0, [r0, #0x84] + cmp r1, r0 + ldrne ip, _02201504 ; =0x00000814 + addne sp, sp, ip + ldmneia sp!, {r4, r5, r6, r7, r8, sb, pc} + add r0, r2, #1 + str r0, [sp, #8] + cmp r0, #4 + blt _02201390 + cmp r7, #2 + ldrlt ip, _02201504 ; =0x00000814 + addlt sp, sp, ip + ldmltia sp!, {r4, r5, r6, r7, r8, sb, pc} + mvn r0, #0 + str r0, [r8, #0xb8] + ldrsb r0, [r4] + ldr r2, [r8, #0x10c] + ldr r3, [r8, #0x9c] + add r1, r4, #1 + blx r3 + ldr ip, _02201504 ; =0x00000814 + add sp, sp, ip + ldmia sp!, {r4, r5, r6, r7, r8, sb, pc} +_022013F8: + mov r0, #0 + str r0, [sp, #8] +_02201400: + ldr r2, [sp, #8] + add r0, r8, r2 + ldrsb r1, [r5, r2] + ldrsb r0, [r0, #0x84] + cmp r1, r0 + ldrne ip, _02201504 ; =0x00000814 + addne sp, sp, ip + ldmneia sp!, {r4, r5, r6, r7, r8, sb, pc} + add r0, r2, #1 + str r0, [sp, #8] + cmp r0, #4 + blt _02201400 + cmp r7, #4 + ldrlt ip, _02201504 ; =0x00000814 + addlt sp, sp, ip + ldmltia sp!, {r4, r5, r6, r7, r8, sb, pc} + mov r0, #7 + strb r0, [sp, #0xc] + ldrb r1, [r4] + ldrb r0, [r4, #1] + ldr r2, [sp, #0x80c] + add r5, sp, #0xc + strb r1, [r5, r2] + add r5, r5, r2 + strb r0, [r5, #1] + ldrb r2, [r4, #2] + ldrb r1, [r4, #3] + add r3, sp, #8 + mov r0, r8 + strb r2, [r5, #2] + strb r1, [r5, #3] + ldr r1, [sp, #0x80c] + add r1, r1, #4 + str r1, [sp, #0x80c] + ldrb r2, [r4] + ldrb r1, [r4, #1] + strb r2, [r3] + strb r1, [r3, #1] + ldrb r2, [r4, #2] + ldrb r1, [r4, #3] + strb r2, [r3, #2] + strb r1, [r3, #3] + ldr r1, [sp, #8] + bl FUN_0220150C + cmp r0, #0 + bne _022014D8 + mov r0, r8 + add r1, r4, #4 + sub r2, r7, #4 + bl FUN_0220157C + b _022014D8 +_022014CC: + ldr ip, _02201504 ; =0x00000814 + add sp, sp, ip + ldmia sp!, {r4, r5, r6, r7, r8, sb, pc} +_022014D8: + str r6, [sp] + mov r0, #8 + str r0, [sp, #4] + ldr r0, [r8] + ldr r2, [sp, #0x80c] + add r1, sp, #0xc + mov r3, #0 + bl FUN_021EFBD4 + ldr ip, _02201504 ; =0x00000814 + add sp, sp, ip + ldmia sp!, {r4, r5, r6, r7, r8, sb, pc} + .align 2, 0 +_02201504: .word 0x00000814 +_02201508: .word 0x0220F060 + + arm_func_start FUN_0220150C +FUN_0220150C: ; 0x0220150C + stmdb sp!, {r4, lr} + mov r3, #0 +_02201514: + add r2, r0, r3, lsl #2 + ldr r2, [r2, #0xd8] + cmp r1, r2 + moveq r0, #1 + ldmeqia sp!, {r4, pc} + add r3, r3, #1 + cmp r3, #0xa + blt _02201514 + ldr r2, [r0, #0x100] + ldr r3, _02201574 ; =0x66666667 + add lr, r2, #1 + smull r2, r4, r3, lr + mov r4, r4, asr #2 + mov r2, lr, lsr #0x1f + ldr ip, _02201578 ; =0x0000000A + add r4, r2, r4 + smull r2, r3, ip, r4 + sub r4, lr, r2 + str r4, [r0, #0x100] + ldr r2, [r0, #0x100] + add r0, r0, r2, lsl #2 + str r1, [r0, #0xd8] + mov r0, #0 + ldmia sp!, {r4, pc} + .align 2, 0 +_02201574: .word 0x66666667 +_02201578: .word 0x0000000A + + arm_func_start FUN_0220157C +FUN_0220157C: ; 0x0220157C + stmdb sp!, {r4, r5, r6, r7, lr} + sub sp, sp, #0xc + ldr ip, _022016A4 ; =0x0220BCD8 + mov r3, r0 + ldrb r7, [ip] + ldrb r6, [ip, #1] + ldrb r5, [ip, #2] + ldrb r4, [ip, #3] + ldrb lr, [ip, #4] + ldrb r0, [ip, #5] + strb r5, [sp, #2] + strb r4, [sp, #3] + strb r7, [sp] + strb r6, [sp, #1] + strb lr, [sp, #4] + strb r0, [sp, #5] + cmp r2, #0xa + add r4, sp, #0 + mov r5, #1 + blt _022015F8 + mov r6, #0 +_022015D0: + ldrb ip, [r4] + ldrb r0, [r1, r6] + cmp ip, r0 + movne r5, #0 + bne _022015FC + add r6, r6, #1 + cmp r6, #6 + add r4, r4, #1 + blt _022015D0 + b _022015FC +_022015F8: + mov r5, #0 +_022015FC: + cmp r5, #0 + beq _0220167C + add r2, r1, #6 + ldrb r1, [r1, #6] + ldrb r0, [r2, #1] + add ip, sp, #8 + strb r1, [ip] + strb r0, [ip, #1] + ldrb r1, [r2, #2] + ldrb r0, [r2, #3] + strb r1, [ip, #2] + strb r0, [ip, #3] + ldr r2, [r3, #0xa0] + cmp r2, #0 + addeq sp, sp, #0xc + ldmeqia sp!, {r4, r5, r6, r7, pc} + ldr lr, [sp, #8] + ldr r1, [r3, #0x10c] + mov r3, lr, lsr #0x18 + mov r0, lr, lsr #8 + mov ip, lr, lsl #8 + and r3, r3, #0xff + and r0, r0, #0xff00 + mov lr, lr, lsl #0x18 + orr r0, r3, r0 + and ip, ip, #0xff0000 + and r3, lr, #0xff000000 + orr r0, ip, r0 + orr r0, r3, r0 + blx r2 + add sp, sp, #0xc + ldmia sp!, {r4, r5, r6, r7, pc} +_0220167C: + ldr ip, [r3, #0xa4] + cmp ip, #0 + addeq sp, sp, #0xc + ldmeqia sp!, {r4, r5, r6, r7, pc} + mov r0, r1 + mov r1, r2 + ldr r2, [r3, #0x10c] + blx ip + add sp, sp, #0xc + ldmia sp!, {r4, r5, r6, r7, pc} + .align 2, 0 +_022016A4: .word 0x0220BCD8 + + arm_func_start FUN_022016A8 +FUN_022016A8: ; 0x022016A8 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #4 + mov r4, r1 + mov r2, #1 + mov r5, r0 + str r2, [r4, #0x800] + mov r3, #0x5c + mov r2, #0 + strb r3, [r4] + bl FUN_02201714 + mov r0, r5 + mov r1, r4 + mov r2, #1 + bl FUN_02201714 + mov r0, r5 + mov r1, r4 + mov r2, #2 + bl FUN_02201714 + ldr r1, _02201710 ; =0x0220F1D0 + mov r0, r4 + bl FUN_022021C0 + ldr r0, [r4, #0x800] + sub r0, r0, #1 + str r0, [r4, #0x800] + add sp, sp, #4 + ldmia sp!, {r4, r5, pc} + .align 2, 0 +_02201710: .word 0x0220F1D0 + + arm_func_start FUN_02201714 +FUN_02201714: ; 0x02201714 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x194 + mov r8, r2 + sub r2, r8, #1 + mov r3, #0 + mov sl, r0 + cmp r2, #1 + movhi r0, #1 + mov sb, r1 + str r3, [sp, #0x18c] + strhi r0, [sp] + bhi _02201758 + ldr r1, [sl, #0x10c] + ldr r2, [sl, #0x98] + mov r0, r8 + blx r2 + str r0, [sp] +_02201758: + ldr r2, [sl, #0x10c] + ldr r3, [sl, #0x94] + add r1, sp, #0x8c + mov r0, r8 + blx r3 + ldr r1, [sp, #0x18c] + mov r0, #0 + str r0, [sp, #4] + cmp r1, #0 + addle sp, sp, #0x194 + ldmleia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + add r6, sp, #0x8c + str r0, [sp, #8] + mov r4, #0x5c +_02201790: + ldrb r1, [r6] + ldr r0, _022018E0 ; =0x0220F3A8 + ldr fp, [r0, r1, lsl #2] + cmp fp, #0 + ldreq fp, _022018E4 ; =0x0220F1E4 + cmp r8, #0 + bne _02201804 + mov r1, fp + mov r0, sb + bl FUN_022021C0 + ldr r0, [sb, #0x800] + mov r1, sb + sub r0, r0, #1 + strb r4, [sb, r0] + ldr r5, [sb, #0x800] + ldrb r0, [r6] + ldr r2, [sl, #0x10c] + ldr r3, [sl, #0x88] + blx r3 + ldr r0, [sb, #0x800] + cmp r5, r0 + bne _022017F4 + ldr r1, _022018E8 ; =0x0220F1EC + mov r0, sb + bl FUN_022021C0 +_022017F4: + ldr r0, [sb, #0x800] + sub r0, r0, #1 + strb r4, [sb, r0] + b _022018BC +_02201804: + ldr r0, [sp] + ldr r7, [sp, #8] + cmp r0, #0 + ble _022018BC +_02201814: + ldr r1, _022018EC ; =0x0220F1F0 + add r0, sp, #0xc + mov r2, fp + mov r3, r7 + bl sprintf + mov r0, sb + add r1, sp, #0xc + bl FUN_022021C0 + ldr r0, [sb, #0x800] + cmp r8, #1 + sub r0, r0, #1 + strb r4, [sb, r0] + ldr r5, [sb, #0x800] + bne _02201868 + ldrb r0, [r6] + mov r1, r7 + mov r2, sb + ldr r3, [sl, #0x10c] + ldr ip, [sl, #0x8c] + blx ip + b _02201888 +_02201868: + cmp r8, #2 + bne _02201888 + ldrb r0, [r6] + mov r1, r7 + mov r2, sb + ldr r3, [sl, #0x10c] + ldr ip, [sl, #0x90] + blx ip +_02201888: + ldr r0, [sb, #0x800] + cmp r5, r0 + bne _022018A0 + ldr r1, _022018E8 ; =0x0220F1EC + mov r0, sb + bl FUN_022021C0 +_022018A0: + ldr r0, [sb, #0x800] + add r7, r7, #1 + sub r0, r0, #1 + strb r4, [sb, r0] + ldr r0, [sp] + cmp r7, r0 + blt _02201814 +_022018BC: + ldr r0, [sp, #4] + ldr r1, [sp, #0x18c] + add r0, r0, #1 + add r6, r6, #1 + str r0, [sp, #4] + cmp r0, r1 + blt _02201790 + add sp, sp, #0x194 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_022018E0: .word 0x0220F3A8 +_022018E4: .word 0x0220F1E4 +_022018E8: .word 0x0220F1EC +_022018EC: .word 0x0220F1F0 + + arm_func_start FUN_022018F0 +FUN_022018F0: ; 0x022018F0 + stmdb sp!, {r4, r5, r6, r7, lr} + sub sp, sp, #0x14 + mov r4, #0 + cmp r3, #3 + addlt sp, sp, #0x14 + mov lr, r4 + mov ip, r4 + ldmltia sp!, {r4, r5, r6, r7, pc} + ldrb r7, [r2], #1 + sub r3, r3, #1 + cmp r7, #0 + beq _02201930 + cmp r7, #0xff + movne r4, r2 + addne r2, r2, r7 + subne r3, r3, r7 +_02201930: + cmp r3, #2 + addlt sp, sp, #0x14 + ldmltia sp!, {r4, r5, r6, r7, pc} + ldrb r6, [r2], #1 + sub r3, r3, #1 + cmp r6, #0 + beq _0220195C + cmp r6, #0xff + movne lr, r2 + addne r2, r2, r6 + subne r3, r3, r6 +_0220195C: + cmp r3, #1 + addlt sp, sp, #0x14 + ldmltia sp!, {r4, r5, r6, r7, pc} + ldrb r5, [r2] + sub r3, r3, #1 + cmp r5, #0 + beq _02201984 + cmp r5, #0xff + addne ip, r2, #1 + subne r3, r3, r5 +_02201984: + cmp r3, #0 + addlt sp, sp, #0x14 + ldmltia sp!, {r4, r5, r6, r7, pc} + str r6, [sp] + str lr, [sp, #4] + str r5, [sp, #8] + mov r2, r7 + mov r3, r4 + str ip, [sp, #0xc] + bl FUN_022019B4 + add sp, sp, #0x14 + ldmia sp!, {r4, r5, r6, r7, pc} + + arm_func_start FUN_022019B4 +FUN_022019B4: ; 0x022019B4 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #4 + str r3, [sp] + mov r3, r2 + mov r2, #0 + mov r5, r0 + mov r4, r1 + bl FUN_02201A14 + ldr ip, [sp, #0x14] + ldr r3, [sp, #0x10] + mov r0, r5 + mov r1, r4 + mov r2, #1 + str ip, [sp] + bl FUN_02201A14 + ldr r0, [sp, #0x1c] + ldr r3, [sp, #0x18] + str r0, [sp] + mov r0, r5 + mov r1, r4 + mov r2, #2 + bl FUN_02201A14 + add sp, sp, #4 + ldmia sp!, {r4, r5, pc} + + arm_func_start FUN_02201A14 +FUN_02201A14: ; 0x02201A14 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x114 + movs fp, r3 + mov r3, #0 + ldr r7, [sp, #0x138] + str r3, [sp, #0x10c] + mov sl, r0 + mov sb, r1 + mov r8, r2 + addeq sp, sp, #0x114 + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + sub r0, r8, #1 + cmp r0, #1 + bhi _02201AC0 + ldr r0, [sb, #0x800] + rsb r0, r0, #0x800 + cmp r0, #2 + addlo sp, sp, #0x114 + ldmloia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + ldr r1, [sl, #0x10c] + ldr r2, [sl, #0x98] + mov r0, r8 + blx r2 + str r0, [sp] + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + mov r1, r0, asr #8 + mov r0, r0, lsl #8 + and r1, r1, #0xff + and r0, r0, #0xff00 + orr r0, r1, r0 + strh r0, [sp, #8] + add r0, sp, #8 + ldrb r1, [r0] + ldr r2, [sb, #0x800] + ldrb r0, [r0, #1] + add r3, sb, r2 + strb r1, [sb, r2] + strb r0, [r3, #1] + ldr r0, [sb, #0x800] + add r0, r0, #2 + str r0, [sb, #0x800] + b _02201AC8 +_02201AC0: + mov r0, #1 + str r0, [sp] +_02201AC8: + cmp fp, #0xff + bne _02201B9C + ldr r2, [sl, #0x10c] + ldr r3, [sl, #0x94] + add r1, sp, #0xc + mov r0, r8 + blx r3 + ldr r0, [sp, #0x10c] + mov r7, #0 + cmp r0, #0 + ble _02201B64 + ldr fp, _02201C64 ; =0x0220F1E4 + ldr r4, _02201C68 ; =0x0220F3A8 + add r5, sp, #0xc +_02201B00: + ldrb r0, [r5] + ldr r1, [r4, r0, lsl #2] + mov r0, sb + cmp r1, #0 + moveq r1, fp + bl FUN_022021C0 + cmp r8, #0 + bne _02201B50 + ldrb r0, [r5] + ldr r2, [sl, #0x10c] + ldr r3, [sl, #0x88] + mov r1, sb + ldr r6, [sb, #0x800] + blx r3 + ldr r0, [sb, #0x800] + cmp r6, r0 + bne _02201B50 + ldr r1, _02201C6C ; =0x0220F1EC + mov r0, sb + bl FUN_022021C0 +_02201B50: + ldr r0, [sp, #0x10c] + add r7, r7, #1 + cmp r7, r0 + add r5, r5, #1 + blt _02201B00 +_02201B64: + ldr r1, [sb, #0x800] + rsb r0, r1, #0x800 + cmp r0, #1 + addlt sp, sp, #0x114 + ldmltia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + add r0, r1, #1 + str r0, [sb, #0x800] + mov r0, #0 + strb r0, [sb, r1] + ldr fp, [sp, #0x10c] + cmp r8, #0 + add r7, sp, #0xc + addeq sp, sp, #0x114 + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +_02201B9C: + ldr r0, [sp] + mov r6, #0 + cmp r0, #0 + addle sp, sp, #0x114 + ldmleia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + str r6, [sp, #4] +_02201BB4: + ldr r5, [sp, #4] + cmp fp, #0 + ble _02201C4C +_02201BC0: + cmp r8, #0 + ldr r4, [sb, #0x800] + bne _02201BE4 + ldrb r0, [r7, r5] + ldr r2, [sl, #0x10c] + ldr r3, [sl, #0x88] + mov r1, sb + blx r3 + b _02201C28 +_02201BE4: + cmp r8, #1 + bne _02201C08 + ldrb r0, [r7, r5] + ldr r3, [sl, #0x10c] + ldr ip, [sl, #0x8c] + mov r1, r6 + mov r2, sb + blx ip + b _02201C28 +_02201C08: + cmp r8, #2 + bne _02201C28 + ldrb r0, [r7, r5] + ldr r3, [sl, #0x10c] + ldr ip, [sl, #0x90] + mov r1, r6 + mov r2, sb + blx ip +_02201C28: + ldr r0, [sb, #0x800] + cmp r4, r0 + bne _02201C40 + ldr r1, _02201C6C ; =0x0220F1EC + mov r0, sb + bl FUN_022021C0 +_02201C40: + add r5, r5, #1 + cmp r5, fp + blt _02201BC0 +_02201C4C: + ldr r0, [sp] + add r6, r6, #1 + cmp r6, r0 + blt _02201BB4 + add sp, sp, #0x114 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_02201C64: .word 0x0220F1E4 +_02201C68: .word 0x0220F3A8 +_02201C6C: .word 0x0220F1EC + + arm_func_start FUN_02201C70 +FUN_02201C70: ; 0x02201C70 + stmdb sp!, {r4, lr} + sub sp, sp, #8 + mov r4, r0 + mov r0, r1 + ldr r1, _02201D28 ; =0x0220F1F8 + add r2, sp, #0 + add r3, sp, #4 + bl sscanf + ldr r0, [sp] + ldr lr, [sp, #4] + mov r2, r0, lsr #0x18 + mov r1, r0, lsr #8 + mov r3, r0, lsl #8 + mov ip, r0, lsl #0x18 + and r2, r2, #0xff + and r1, r1, #0xff00 + orr r1, r2, r1 + and r3, r3, #0xff0000 + and r2, ip, #0xff000000 + orr r1, r3, r1 + orrs r2, r2, r1 + mov r0, lr, lsl #0x10 + str r2, [sp] + addeq sp, sp, #8 + mov r1, r0, lsr #0x10 + ldmeqia sp!, {r4, pc} + cmp r1, #0 + addeq sp, sp, #8 + ldmeqia sp!, {r4, pc} + ldr r0, [r4, #0x104] + cmp r0, r2 + bne _02201D04 + add r0, r4, #0x100 + ldrh r0, [r0, #8] + cmp r0, r1 + addeq sp, sp, #8 + ldmeqia sp!, {r4, pc} +_02201D04: + str r2, [r4, #0x104] + add r0, r4, #0x100 + strh r1, [r0, #8] + ldr r0, [sp] + ldr r2, [r4, #0x10c] + ldr r3, [r4, #0xa8] + blx r3 + add sp, sp, #8 + ldmia sp!, {r4, pc} + .align 2, 0 +_02201D28: .word 0x0220F1F8 + + arm_func_start FUN_02201D2C +FUN_02201D2C: ; 0x02201D2C + stmdb sp!, {r4, r5, r6, lr} + sub sp, sp, #0x48 + mov r5, r3 + cmp r5, #1 + mov r6, r0 + mov r4, r1 + addlt sp, sp, #0x48 + ldmltia sp!, {r4, r5, r6, pc} + cmp r5, #0x41 + addgt sp, sp, #0x48 + ldmgtia sp!, {r4, r5, r6, pc} + sub r0, r5, #1 + ldrsb r0, [r2, r0] + cmp r0, #0 + addne sp, sp, #0x48 + ldmneia sp!, {r4, r5, r6, pc} + add r0, sp, #0 + mov r1, r2 + bl strcpy + add r0, r6, #0x44 + bl strlen + mov r1, r0 + add r2, sp, #0 + add r0, r6, #0x44 + sub r3, r5, #1 + bl FUN_02201E0C + ldr r2, [r4, #0x800] + sub r1, r5, #1 + add r0, sp, #0 + add r2, r4, r2 + bl FUN_02201F50 + ldr r0, [r4, #0x800] + add r0, r4, r0 + bl strlen + ldr r1, [r4, #0x800] + add r0, r0, #1 + add r0, r1, r0 + str r0, [r4, #0x800] + add sp, sp, #0x48 + ldmia sp!, {r4, r5, r6, pc} + + arm_func_start FUN_02201DCC +FUN_02201DCC: ; 0x02201DCC + stmdb sp!, {lr} + sub sp, sp, #4 + strb r1, [r0] + ldrb ip, [r2] + ldrb r3, [r2, #1] + add lr, r0, #1 + mov r1, #5 + strb ip, [r0, #1] + strb r3, [lr, #1] + ldrb r3, [r2, #2] + ldrb r2, [r2, #3] + strb r3, [lr, #2] + strb r2, [lr, #3] + str r1, [r0, #0x800] + add sp, sp, #4 + ldmfd sp!, {pc} + + arm_func_start FUN_02201E0C +FUN_02201E0C: ; 0x02201E0C + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x104 + str r1, [sp] + add r4, sp, #4 + mov sl, r0 + mov sb, r2 + mov r8, r3 + mov r1, #0 +_02201E2C: + add r0, r1, #1 + mov r0, r0, lsl #0x10 + strb r1, [r4], #1 + mov r1, r0, asr #0x10 + cmp r1, #0x100 + blt _02201E2C + mov r7, #0 + add r5, sp, #4 + mov r6, r7 + mov r4, r7 + mov fp, r5 +_02201E58: + ldrb r3, [r5] + ldrb r2, [sl, r7] + ldr r1, [sp] + add r0, r7, #1 + add r2, r3, r2 + add r2, r6, r2 + mov r3, r2, lsr #0x1f + rsb r2, r3, r2, lsl #24 + add r2, r3, r2, ror #24 + and r6, r2, #0xff + bl _s32_div_f + and r7, r1, #0xff + mov r0, r5 + add r1, fp, r6 + bl FUN_0220206C + add r0, r4, #1 + mov r0, r0, lsl #0x10 + mov r4, r0, asr #0x10 + cmp r4, #0x100 + add r5, r5, #1 + blt _02201E58 + mov r6, #0 + cmp r8, #0 + mov r5, r6 + mov r7, r6 + addle sp, sp, #0x104 + ldmleia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + add r4, sp, #4 +_02201EC8: + ldrb r0, [sb, r7] + add r0, r6, r0 + add r0, r0, #1 + mov r1, r0, lsr #0x1f + rsb r0, r1, r0, lsl #24 + add r0, r1, r0, ror #24 + and r6, r0, #0xff + ldrb r1, [r4, r6] + add r0, r4, r6 + add r1, r1, r5 + mov r2, r1, lsr #0x1f + rsb r1, r2, r1, lsl #24 + add r1, r2, r1, ror #24 + and r5, r1, #0xff + add r1, r4, r5 + bl FUN_0220206C + ldrb r2, [r4, r6] + ldrb r1, [r4, r5] + add r3, r7, #1 + ldrb r0, [sb, r7] + add r1, r2, r1 + mov r2, r1, lsr #0x1f + rsb r1, r2, r1, lsl #24 + add r1, r2, r1, ror #24 + and r1, r1, #0xff + ldrb r2, [r4, r1] + mov r1, r3, lsl #0x10 + eor r0, r0, r2 + strb r0, [sb, r7] + mov r7, r1, asr #0x10 + cmp r7, r8 + blt _02201EC8 + add sp, sp, #0x104 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + + arm_func_start FUN_02201F50 +FUN_02201F50: ; 0x02201F50 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0xc + mov sb, r1 + mov sl, r0 + mov r8, r2 + cmp sb, #0 + mov r7, #0 + ble _02202010 + mov r4, r7 + str r7, [sp] + mov fp, r7 +_02201F7C: + mov r2, fp + add r1, sp, #4 +_02201F84: + cmp r7, sb + ldrltb r0, [sl], #1 + add r2, r2, #1 + add r7, r7, #1 + strltb r0, [r1] + strgeb r4, [r1] + cmp r2, #2 + add r1, r1, #1 + ble _02201F84 + ldrb r5, [sp, #4] + ldrb r3, [sp, #5] + ldrb r2, [sp, #6] + and r1, r5, #3 + and r0, r3, #0xf + mov r5, r5, asr #2 + mov r1, r1, lsl #4 + strb r5, [sp, #7] + add r3, r1, r3, asr #4 + mov r0, r0, lsl #2 + add r1, r0, r2, asr #6 + and r0, r2, #0x3f + ldr r5, [sp] + add r6, sp, #7 + strb r3, [sp, #8] + strb r1, [sp, #9] + strb r0, [sp, #0xa] +_02201FEC: + ldrb r0, [r6] + bl FUN_02202020 + add r5, r5, #1 + cmp r5, #3 + strb r0, [r8], #1 + add r6, r6, #1 + ble _02201FEC + cmp r7, sb + blt _02201F7C +_02202010: + mov r0, #0 + strb r0, [r8] + add sp, sp, #0xc + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + + arm_func_start FUN_02202020 +FUN_02202020: ; 0x02202020 + cmp r0, #0x1a + addlo r0, r0, #0x41 + andlo r0, r0, #0xff + bxlo lr + cmp r0, #0x34 + addlo r0, r0, #0x47 + andlo r0, r0, #0xff + bxlo lr + cmp r0, #0x3e + sublo r0, r0, #4 + andlo r0, r0, #0xff + bxlo lr + cmp r0, #0x3e + moveq r0, #0x2b + bxeq lr + cmp r0, #0x3f + moveq r0, #0x2f + movne r0, #0 + bx lr + + arm_func_start FUN_0220206C +FUN_0220206C: ; 0x0220206C + ldrb r3, [r0] + ldrb r2, [r1] + strb r2, [r0] + strb r3, [r1] + bx lr + + arm_func_start FUN_02202080 +FUN_02202080: ; 0x02202080 + stmdb sp!, {r4, r5, r6, r7, lr} + sub sp, sp, #4 + mov r1, r1, lsl #0x10 + mov r1, r1, lsr #0x10 + mov r4, r1, asr #8 + mov r1, r1, lsl #8 + mov r6, r2 + mov r5, #2 + and r2, r4, #0xff + and r1, r1, #0xff00 + strb r5, [r6, #1] + orr r1, r2, r1 + strh r1, [r6, #2] + mov r4, #0 + movs r7, r0 + mov r5, r3 + streq r4, [r6, #4] + beq _022020D0 + bl FUN_021EFB38 + str r0, [r6, #4] +_022020D0: + ldr r1, [r6, #4] + mvn r0, #0 + cmp r1, r0 + bne _0220211C + ldr r1, _02202130 ; =0x0220F204 + mov r0, r7 + bl strcmp + cmp r0, #0 + beq _0220211C + mov r0, r7 + bl FUN_0209A6EC + movs r4, r0 + addeq sp, sp, #4 + moveq r0, #0 + ldmeqia sp!, {r4, r5, r6, r7, pc} + ldr r0, [r4, #0xc] + ldr r0, [r0] + ldr r0, [r0] + str r0, [r6, #4] +_0220211C: + cmp r5, #0 + strne r4, [r5] + mov r0, #1 + add sp, sp, #4 + ldmia sp!, {r4, r5, r6, r7, pc} + .align 2, 0 +_02202130: .word 0x0220F204 + + arm_func_start FUN_02202134 +FUN_02202134: ; 0x02202134 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #4 + bl FUN_021EFE70 + cmp r0, #0 + addeq sp, sp, #4 + ldmeqia sp!, {r4, r5, pc} + ldr r1, _022021B8 ; =0x022115D8 + mov r2, #0 + str r2, [r1] + ldr ip, _022021BC ; =0x022115DC +_0220215C: + ldr r3, [r1] + ldr r2, [r0, #0xc] + mov r5, r3, lsl #2 + ldr r4, [r2, r3, lsl #2] + cmp r4, #0 + addeq sp, sp, #4 + ldmeqia sp!, {r4, r5, pc} + ldrb r3, [r4] + ldrb r2, [r4, #1] + add lr, ip, r5 + strb r3, [ip, r5] + strb r2, [lr, #1] + ldrb r3, [r4, #2] + ldrb r2, [r4, #3] + strb r3, [lr, #2] + strb r2, [lr, #3] + ldr r2, [r1] + add r2, r2, #1 + str r2, [r1] + cmp r2, #5 + blt _0220215C + add sp, sp, #4 + ldmia sp!, {r4, r5, pc} + .align 2, 0 +_022021B8: .word 0x022115D8 +_022021BC: .word 0x022115DC + + arm_func_start FUN_022021C0 +FUN_022021C0: ; 0x022021C0 + stmdb sp!, {r4, r5, r6, lr} + mov r6, r1 + mov r4, r0 + mov r0, r6 + bl strlen + ldr r3, [r4, #0x800] + add r5, r0, #1 + rsb r0, r3, #0x800 + cmp r5, r0 + movgt r5, r0 + cmp r5, #0 + ldmeqia sp!, {r4, r5, r6, pc} + mov r1, r6 + mov r2, r5 + add r0, r4, r3 + bl memcpy + ldr r0, [r4, #0x800] + mov r1, #0 + add r0, r0, r5 + str r0, [r4, #0x800] + ldr r0, [r4, #0x800] + sub r0, r0, #1 + strb r1, [r4, r0] + ldmia sp!, {r4, r5, r6, pc} + + arm_func_start FUN_02202220 +FUN_02202220: ; 0x02202220 + stmdb sp!, {r4, lr} + sub sp, sp, #0x18 + mov r2, r1 + mov r4, r0 + ldr r1, _02202250 ; =0x0220F214 + add r0, sp, #0 + bl sprintf + add r1, sp, #0 + mov r0, r4 + bl FUN_022021C0 + add sp, sp, #0x18 + ldmia sp!, {r4, pc} + .align 2, 0 +_02202250: .word 0x0220F214 + + arm_func_start FUN_02202254 +FUN_02202254: ; 0x02202254 + ldr r3, [r0, #0x100] + cmp r3, #0xfe + bxge lr + cmp r1, #1 + bxlt lr + cmp r1, #0xfe + bxgt lr + add r2, r3, #1 + str r2, [r0, #0x100] + strb r1, [r0, r3] + bx lr + + arm_func_start FUN_02202280 +FUN_02202280: ; 0x02202280 + stmdb sp!, {r4, lr} + movs r4, r0 + ldreq r0, _02202300 ; =0x0220F060 + ldreq r4, [r0] + ldr r0, [r4, #0xbc] + cmp r0, #0 + beq _022022A8 + mov r0, r4 + mov r1, #2 + bl FUN_02200F3C +_022022A8: + ldr r0, [r4] + mvn r1, #0 + cmp r0, r1 + beq _022022C8 + ldr r1, [r4, #0xc4] + cmp r1, #0 + beq _022022C8 + bl FUN_021EFD9C +_022022C8: + mvn r0, #0 + str r0, [r4] + mov r0, #0 + str r0, [r4, #0xac] + ldr r0, [r4, #0xc4] + cmp r0, #0 + beq _022022E8 + bl FUN_021F0248 +_022022E8: + ldr r0, _02202304 ; =0x0220F064 + cmp r4, r0 + ldmeqia sp!, {r4, pc} + mov r0, r4 + bl FUN_021DD82C + ldmia sp!, {r4, pc} + .align 2, 0 +_02202300: .word 0x0220F060 +_02202304: .word 0x0220F064 + + arm_func_start FUN_02202308 +FUN_02202308: ; 0x02202308 + stmdb sp!, {r4, lr} + movs r4, r0 + ldreq r0, _0220235C ; =0x0220F060 + ldreq r4, [r0] + ldr r0, [r4, #0xbc] + cmp r0, #0 + ldmeqia sp!, {r4, pc} + bl FUN_021F025C + ldr r2, [r4, #0xac] + ldr r1, _02202360 ; =0x00002710 + sub r0, r0, r2 + cmp r0, r1 + movlo r0, #1 + strlo r0, [r4, #0xb4] + ldmloia sp!, {r4, pc} + mov r0, r4 + mov r1, #1 + bl FUN_02200F3C + mov r0, #0 + str r0, [r4, #0xb4] + ldmia sp!, {r4, pc} + .align 2, 0 +_0220235C: .word 0x0220F060 +_02202360: .word 0x00002710 + + arm_func_start FUN_02202364 +FUN_02202364: ; 0x02202364 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #4 + mov r5, r0 + bl FUN_021F025C + ldr r2, [r5] + mvn r1, #0 + cmp r2, r1 + mov r4, r0 + addeq sp, sp, #4 + ldmeqia sp!, {r4, r5, pc} + ldr r2, [r5, #0xb8] + cmp r2, #0 + ble _022023F4 + ldr r1, [r5, #0xac] + ldr r0, _0220247C ; =0x00002710 + sub r1, r4, r1 + cmp r1, r0 + bls _022023F4 + cmp r2, #4 + blt _022023D8 + mov r0, #0 + str r0, [r5, #0xb8] + ldr r2, [r5, #0x10c] + ldr r3, [r5, #0x9c] + ldr r1, _02202480 ; =0x0220F218 + mov r0, #5 + blx r3 + add sp, sp, #4 + ldmia sp!, {r4, r5, pc} +_022023D8: + mov r0, r5 + mov r1, #3 + bl FUN_02200F3C + ldr r0, [r5, #0xb8] + add r0, r0, #1 + str r0, [r5, #0xb8] + b _02202454 +_022023F4: + ldr r0, [r5, #0xb4] + cmp r0, #0 + beq _02202424 + ldr r1, [r5, #0xac] + ldr r0, _0220247C ; =0x00002710 + sub r1, r4, r1 + cmp r1, r0 + bls _02202424 + mov r0, r5 + mov r1, #1 + bl FUN_02200F3C + b _02202454 +_02202424: + ldr r2, [r5, #0xac] + ldr r0, _02202484 ; =0x0000EA60 + sub r1, r4, r2 + cmp r1, r0 + bhi _02202448 + cmp r2, #0 + beq _02202448 + cmp r4, r2 + bhs _02202454 +_02202448: + mov r0, r5 + mov r1, #0 + bl FUN_02200F3C +_02202454: + ldr r1, [r5, #0xb0] + ldr r0, _02202488 ; =0x00004E20 + sub r1, r4, r1 + cmp r1, r0 + addls sp, sp, #4 + ldmlsia sp!, {r4, r5, pc} + mov r0, r5 + bl FUN_02201150 + add sp, sp, #4 + ldmia sp!, {r4, r5, pc} + .align 2, 0 +_0220247C: .word 0x00002710 +_02202480: .word 0x0220F218 +_02202484: .word 0x0000EA60 +_02202488: .word 0x00004E20 + + arm_func_start FUN_0220248C +FUN_0220248C: ; 0x0220248C + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} + sub sp, sp, #0x18 + mov r1, #8 + mov r4, r0 + str r1, [sp, #0x10] + ldr r0, [r4, #0xc4] + cmp r0, #0 + addeq sp, sp, #0x18 + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + ldr r0, [r4] + bl FUN_021EFF2C + cmp r0, #0 + addeq sp, sp, #0x18 + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + ldr r8, _02202530 ; =0x02211630 + add sl, sp, #8 + add sb, sp, #0x10 + mov r6, #0 + mov r7, #0xff + mvn r5, #0 +_022024DC: + str sl, [sp] + str sb, [sp, #4] + ldr r0, [r4] + mov r1, r8 + mov r2, r7 + mov r3, r6 + bl FUN_021EFC40 + mov r2, r0 + cmp r2, r5 + beq _02202518 + mov r0, r4 + mov r1, r8 + mov r3, sl + strb r6, [r8, r2] + bl FUN_022011A8 +_02202518: + ldr r0, [r4] + bl FUN_021EFF2C + cmp r0, #0 + bne _022024DC + add sp, sp, #0x18 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + .align 2, 0 +_02202530: .word 0x02211630 + + arm_func_start FUN_02202534 +FUN_02202534: ; 0x02202534 + stmdb sp!, {r4, lr} + movs r4, r0 + ldreq r0, _02202564 ; =0x0220F060 + ldreq r4, [r0] + ldr r0, [r4, #0xbc] + cmp r0, #0 + beq _02202558 + mov r0, r4 + bl FUN_02202364 +_02202558: + mov r0, r4 + bl FUN_0220248C + ldmia sp!, {r4, pc} + .align 2, 0 +_02202564: .word 0x0220F060 + + arm_func_start FUN_02202568 +FUN_02202568: ; 0x02202568 + cmp r0, #0 + ldreq r0, _0220257C ; =0x0220F060 + ldreq r0, [r0] + str r1, [r0, #0xa8] + bx lr + .align 2, 0 +_0220257C: .word 0x0220F060 + + arm_func_start FUN_02202580 +FUN_02202580: ; 0x02202580 + cmp r0, #0 + ldreq r0, _02202594 ; =0x0220F060 + ldreq r0, [r0] + str r1, [r0, #0xa4] + bx lr + .align 2, 0 +_02202594: .word 0x0220F060 + + arm_func_start FUN_02202598 +FUN_02202598: ; 0x02202598 + cmp r0, #0 + ldreq r0, _022025AC ; =0x0220F060 + ldreq r0, [r0] + str r1, [r0, #0xa0] + bx lr + .align 2, 0 +_022025AC: .word 0x0220F060 + + arm_func_start FUN_022025B0 +FUN_022025B0: ; 0x022025B0 + stmdb sp!, {r4, r5, r6, r7, r8, lr} + sub sp, sp, #0x40 + movs r5, r0 + mov r8, r1 + mov r4, r2 + mov r7, r3 + ldreq r5, _02202760 ; =0x0220F064 + beq _022025E0 + mov r0, #0x110 + bl FUN_021DD860 + str r0, [r5] + ldr r5, [r5] +_022025E0: + bl FUN_021F025C + bl srand + mov r1, r7 + add r0, r5, #4 + bl strcpy + ldr r1, [sp, #0x58] + add r0, r5, #0x44 + bl strcpy + str r4, [r5, #0xc0] + mov r6, #0 + str r6, [r5, #0xac] + str r6, [r5, #0xb0] + str r8, [r5] + mov r1, #1 + ldr r0, [sp, #0x7c] + str r1, [r5, #0xb8] + ldr r1, [sp, #0x64] + str r0, [r5, #0x10c] + ldr r0, [sp, #0x68] + str r1, [r5, #0x88] + ldr r1, [sp, #0x6c] + str r0, [r5, #0x8c] + ldr r0, [sp, #0x70] + str r1, [r5, #0x90] + ldr r1, [sp, #0x74] + str r0, [r5, #0x94] + ldr r0, [sp, #0x78] + str r1, [r5, #0x98] + str r0, [r5, #0x9c] + str r6, [r5, #0xa0] + str r6, [r5, #0xa4] + ldr r0, [sp, #0x5c] + str r6, [r5, #0xd4] + str r0, [r5, #0xbc] + ldr r0, [sp, #0x60] + str r6, [r5, #0xc4] + str r0, [r5, #0xc8] + str r6, [r5, #0x104] + add r0, r5, #0x100 + strh r6, [r0, #8] + str r6, [r5, #0xa8] + str r6, [r5, #0xb4] + ldr r4, _02202764 ; =0x80808081 + ldr r8, _02202768 ; =0x000000FF +_02202690: + bl rand + smull r1, r2, r4, r0 + add r2, r0, r2 + add r3, r5, r6 + add r6, r6, #1 + mov r2, r2, asr #7 + mov r1, r0, lsr #0x1f + add r2, r1, r2 + smull r1, r2, r8, r2 + sub r2, r0, r1 + strb r2, [r3, #0x84] + cmp r6, #4 + blt _02202690 + mov r2, #0 + mvn r1, #0 +_022026CC: + add r0, r5, r2, lsl #2 + add r2, r2, #1 + str r1, [r0, #0xd8] + cmp r2, #0xa + blt _022026CC + mov r1, #0 + ldr r0, _0220276C ; =0x022115D8 + str r1, [r5, #0x100] + ldr r0, [r0] + cmp r0, #0 + bne _022026FC + bl FUN_02202134 +_022026FC: + ldr r0, [sp, #0x5c] + cmp r0, #0 + beq _02202748 + ldr r0, _02202770 ; =0x022115F0 + ldrsb r4, [r0] + cmp r4, #0 + bne _02202728 + ldr r1, _02202774 ; =0x0220F250 + add r0, sp, #0 + mov r2, r7 + bl sprintf +_02202728: + cmp r4, #0 + ldrne r0, _02202770 ; =0x022115F0 + ldr r1, _02202778 ; =0x00006CFC + addeq r0, sp, #0 + add r2, r5, #0xcc + mov r3, #0 + bl FUN_02202080 + b _0220274C +_02202748: + mov r0, #1 +_0220274C: + cmp r0, #0 + movne r0, #0 + moveq r0, #3 + add sp, sp, #0x40 + ldmia sp!, {r4, r5, r6, r7, r8, pc} + .align 2, 0 +_02202760: .word 0x0220F064 +_02202764: .word 0x80808081 +_02202768: .word 0x000000FF +_0220276C: .word 0x022115D8 +_02202770: .word 0x022115F0 +_02202774: .word 0x0220F250 +_02202778: .word 0x00006CFC + + arm_func_start FUN_0220277C +FUN_0220277C: ; 0x0220277C + cmp r0, #0x32 + bxlt lr + cmp r0, #0xfe + bxgt lr + ldr r2, _02202798 ; =0x0220F3A8 + str r1, [r2, r0, lsl #2] + bx lr + .align 2, 0 +_02202798: .word 0x0220F3A8 + + arm_func_start FUN_0220279C +FUN_0220279C: ; 0x0220279C + stmdb sp!, {r4, r5, r6, r7, lr} + sub sp, sp, #4 + mov r5, r2 + cmp r5, #0 + mov r7, r0 + mov r6, r1 + mov r4, #0 + addle sp, sp, #4 + ldmleia sp!, {r4, r5, r6, r7, pc} +_022027C0: + ldrb r1, [r6, r4] + mov r0, r7 + bl FUN_022027E4 + strb r0, [r6, r4] + add r4, r4, #1 + cmp r4, r5 + blt _022027C0 + add sp, sp, #4 + ldmia sp!, {r4, r5, r6, r7, pc} + + arm_func_start FUN_022027E4 +FUN_022027E4: ; 0x022027E4 + stmdb sp!, {r4, lr} + ldrb r4, [r0, #0x100] + add r2, r4, #1 + strb r2, [r0, #0x100] + ldrb r3, [r0, #0x101] + ldrb r2, [r0, r4] + add r2, r3, r2 + strb r2, [r0, #0x101] + ldrb r3, [r0, #0x104] + ldrb r2, [r0, #0x101] + ldrb r4, [r0, r3] + ldrb r2, [r0, r2] + strb r2, [r0, r3] + ldrb r3, [r0, #0x103] + ldrb r2, [r0, #0x101] + ldrb r3, [r0, r3] + strb r3, [r0, r2] + ldrb r3, [r0, #0x100] + ldrb r2, [r0, #0x103] + ldrb r3, [r0, r3] + strb r3, [r0, r2] + ldrb r2, [r0, #0x100] + strb r4, [r0, r2] + ldrb r3, [r0, #0x102] + ldrb r2, [r0, r4] + add r2, r3, r2 + strb r2, [r0, #0x102] + ldrb r3, [r0, #0x103] + ldrb r2, [r0, #0x104] + ldrb ip, [r0, #0x101] + ldrb r4, [r0, #0x102] + ldrb lr, [r0, #0x100] + ldrb r3, [r0, r3] + ldrb r2, [r0, r2] + ldrb ip, [r0, ip] + ldrb r4, [r0, r4] + add r2, r3, r2 + ldrb r3, [r0, lr] + add r2, ip, r2 + and r2, r2, #0xff + add r3, r4, r3 + ldrb r2, [r0, r2] + and r3, r3, #0xff + ldrb r3, [r0, r3] + ldrb r2, [r0, r2] + eor r3, r1, r3 + eor r2, r3, r2 + strb r2, [r0, #0x103] + strb r1, [r0, #0x104] + ldrb r0, [r0, #0x103] + ldmia sp!, {r4, pc} + + arm_func_start FUN_022028B0 +FUN_022028B0: ; 0x022028B0 + stmdb sp!, {r4, r5, r6, r7, r8, sb, lr} + sub sp, sp, #0x14 + mov r7, r2 + mov sb, r0 + mov r8, r1 + cmp r7, #1 + bhs _022028D8 + bl FUN_02202978 + add sp, sp, #0x14 + ldmia sp!, {r4, r5, r6, r7, r8, sb, pc} +_022028D8: + mov r0, #0 +_022028DC: + strb r0, [sb, r0] + add r0, r0, #1 + cmp r0, #0x100 + blt _022028DC + mov r0, #0 + str r0, [sp, #0xc] + strb r0, [sp, #8] + mov r6, #0xff + add r5, sp, #8 + add r4, sp, #0xc +_02202904: + str r5, [sp] + mov r0, sb + mov r1, r6 + mov r2, r8 + mov r3, r7 + str r4, [sp, #4] + bl FUN_022029C0 + ldrb r2, [sb, r6] + ldrb r1, [sb, r0] + strb r1, [sb, r6] + strb r2, [sb, r0] + subs r6, r6, #1 + bpl _02202904 + ldrb r1, [sb, #1] + mov r0, #0 + strb r1, [sb, #0x100] + ldrb r1, [sb, #3] + strb r1, [sb, #0x101] + ldrb r1, [sb, #5] + strb r1, [sb, #0x102] + ldrb r1, [sb, #7] + strb r1, [sb, #0x103] + ldrb r1, [sp, #8] + ldrb r1, [sb, r1] + strb r1, [sb, #0x104] + strb r0, [sp, #8] + str r0, [sp, #0xc] + add sp, sp, #0x14 + ldmia sp!, {r4, r5, r6, r7, r8, sb, pc} + + arm_func_start FUN_02202978 +FUN_02202978: ; 0x02202978 + mov r1, #1 + strb r1, [r0, #0x100] + mov r1, #3 + strb r1, [r0, #0x101] + mov r1, #5 + strb r1, [r0, #0x102] + mov r1, #7 + strb r1, [r0, #0x103] + mov r1, #0xb + strb r1, [r0, #0x104] + mov r2, #0 + mov r1, #0xff +_022029A8: + strb r1, [r0, r2] + add r2, r2, #1 + cmp r2, #0x100 + sub r1, r1, #1 + blt _022029A8 + bx lr + + arm_func_start FUN_022029C0 +FUN_022029C0: ; 0x022029C0 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #4 + ldr r8, [sp, #0x28] + ldr r7, [sp, #0x2c] + movs sl, r1 + mov fp, r0 + str r2, [sp] + mov sb, r3 + addeq sp, sp, #4 + moveq r0, #0 + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + cmp sl, #1 + mov r6, #0 + mov r5, #1 + bls _02202A0C +_022029FC: + mov r0, r5, lsl #1 + add r5, r0, #1 + cmp r5, sl + blo _022029FC +_02202A0C: + mov r4, #0 +_02202A10: + ldr r2, [r7] + add r6, r6, #1 + add r0, r2, #1 + str r0, [r7] + ldrb r1, [r8] + ldr r0, [sp] + ldrb r0, [r0, r2] + ldrb r1, [fp, r1] + add r0, r1, r0 + strb r0, [r8] + ldr r0, [r7] + cmp r0, sb + strhs r4, [r7] + ldrhsb r0, [r8] + addhs r0, r0, sb + strhsb r0, [r8] + ldrb r0, [r8] + cmp r6, #0xb + and r0, r5, r0 + bls _02202A6C + mov r1, sl + bl _u32_div_f + mov r0, r1 +_02202A6C: + cmp r0, sl + bhi _02202A10 + and r0, r0, #0xff + add sp, sp, #4 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + + arm_func_start FUN_02202A80 +FUN_02202A80: ; 0x02202A80 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #4 + mov r5, r0 + add r0, r5, #8 + mov r4, r1 + bl FUN_022032AC + cmp r0, #0 + addne sp, sp, #4 + ldmneia sp!, {r4, r5, pc} + mov r1, r4 + add r0, r5, #0x14 + bl FUN_022032AC + add sp, sp, #4 + ldmia sp!, {r4, r5, pc} + + arm_func_start FUN_02202AB8 +FUN_02202AB8: ; 0x02202AB8 + ldr r3, [r0, #0x40] + cmp r3, #0x14 + addlt r2, r3, #1 + strlt r2, [r0, #0x40] + addlt r0, r0, r3 + strltb r1, [r0, #0x2c] + bx lr + + arm_func_start FUN_02202AD4 +FUN_02202AD4: ; 0x02202AD4 + stmdb sp!, {r4, lr} + mov r4, r0 + ldr r1, [r4, #0x10] + cmp r1, #0 + ldmeqia sp!, {r4, pc} + mov r1, #0 + bl FUN_02202C14 + mov r0, r4 + bl FUN_02202B84 + ldr r0, [r4, #0x1c] + cmp r0, #0 + ble _02202B0C + mov r0, r4 + bl FUN_02202B34 +_02202B0C: + ldr r0, [r4, #0x10] + cmp r0, #0 + ldmneia sp!, {r4, pc} + ldr r3, [r4, #0x48] + ldr ip, [r4, #0x44] + mov r0, r4 + mov r1, #2 + mov r2, #0 + blx ip + ldmia sp!, {r4, pc} + + arm_func_start FUN_02202B34 +FUN_02202B34: ; 0x02202B34 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #4 + mov r5, r0 + add r4, r5, #0x14 + b _02202B5C +_02202B48: + mov r0, r4 + bl FUN_02203318 + mov r1, r0 + mov r0, r5 + bl FUN_022030C0 +_02202B5C: + ldr r1, [r5, #0x10] + ldr r0, [r5, #4] + cmp r1, r0 + addge sp, sp, #4 + ldmgeia sp!, {r4, r5, pc} + ldr r0, [r5, #0x1c] + cmp r0, #0 + bgt _02202B48 + add sp, sp, #4 + ldmia sp!, {r4, r5, pc} + + arm_func_start FUN_02202B84 +FUN_02202B84: ; 0x02202B84 + stmdb sp!, {r4, r5, r6, r7, r8, lr} + mov r6, r0 + bl FUN_021F025C + ldr r3, [r6, #8] + mov r5, r0 + cmp r3, #0 + ldmeqia sp!, {r4, r5, r6, r7, r8, pc} + ldr r4, _02202C10 ; =0x000009C4 + add r7, r6, #8 + mov r8, #1 +_02202BAC: + ldr r0, [r3, #0x1c] + add r0, r0, r4 + cmp r5, r0 + ldmlsia sp!, {r4, r5, r6, r7, r8, pc} + ldrb r2, [r3, #0x15] + mov r0, r6 + mov r1, r8 + orr r2, r2, #0x10 + strb r2, [r3, #0x15] + ldr r2, [r6, #8] + str r4, [r2, #0x1c] + ldr r3, [r6, #8] + ldrb r2, [r3, #0x15] + and r2, r2, #0xd3 + strb r2, [r3, #0x15] + ldr r2, [r6, #8] + ldr r3, [r6, #0x48] + ldr ip, [r6, #0x44] + blx ip + mov r0, r7 + bl FUN_02203318 + ldr r3, [r6, #8] + cmp r3, #0 + bne _02202BAC + ldmia sp!, {r4, r5, r6, r7, r8, pc} + .align 2, 0 +_02202C10: .word 0x000009C4 + + arm_func_start FUN_02202C14 +FUN_02202C14: ; 0x02202C14 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + ldr ip, _02202DB0 ; =0x00000814 + sub sp, sp, ip + movs sb, r1 + mov r1, #8 + mov sl, r0 + str r1, [sp, #0x10] + ldrne r8, [sl, #0x24] + ldreq r8, [sl, #0x20] + mov r0, r8 + bl FUN_021EFF2C + cmp r0, #0 + ldreq ip, _02202DB0 ; =0x00000814 + addeq sp, sp, ip + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + add r5, sp, #0x14 + add fp, sp, #8 + mov r4, #0 +_02202C5C: + ldr r2, _02202DB4 ; =0x000007FF + str fp, [sp] + add r6, sp, #0x10 + mov r0, r8 + mov r1, r5 + mov r3, r4 + str r6, [sp, #4] + bl FUN_021EFC40 + mov r7, r0 + mvn r0, #0 + cmp r7, r0 + ldreq ip, _02202DB0 ; =0x00000814 + addeq sp, sp, ip + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + strb r4, [r5, r7] + ldr r6, [sl, #8] + cmp r6, #0 + beq _02202D94 +_02202CA4: + cmp sb, #0 + beq _02202CC8 + ldrb r0, [r6, #0x15] + ands r0, r0, #8 + beq _02202CC8 + ldr r1, [r6, #0x10] + ldr r0, [sp, #0xc] + cmp r1, r0 + beq _02202D24 +_02202CC8: + ldr r0, [sp, #0xc] + ldr r3, [r6] + cmp r3, r0 + bne _02202CF0 + ldrh r2, [r6, #4] + ldrh r1, [sp, #0xa] + cmp r2, r1 + beq _02202D24 + cmp sb, #0 + bne _02202D24 +_02202CF0: + ldr r1, [sl, #0x28] + cmp r3, r1 + bne _02202D88 + ldrb r1, [r6, #0x15] + ands r1, r1, #2 + beq _02202D88 + ldr r1, [r6, #8] + cmp r1, r0 + bne _02202D88 + ldrh r1, [r6, #0xc] + ldrh r0, [sp, #0xa] + cmp r1, r0 + bne _02202D88 +_02202D24: + cmp sb, #0 + beq _02202D4C + mov r0, sl + mov r1, r6 + mov r2, r5 + mov r3, r7 + bl FUN_02202DB8 + cmp r0, #0 + beq _02202D88 + b _02202D94 +_02202D4C: + ldr r0, [sl] + cmp r0, #1 + bne _02202D70 + mov r0, sl + mov r1, r6 + mov r2, r5 + mov r3, r7 + bl FUN_02202E68 + b _02202D94 +_02202D70: + mov r0, sl + mov r1, r6 + mov r2, r5 + mov r3, r7 + bl FUN_02202DC0 + b _02202D94 +_02202D88: + ldr r6, [r6, #0x20] + cmp r6, #0 + bne _02202CA4 +_02202D94: + mov r0, r8 + bl FUN_021EFF2C + cmp r0, #0 + bne _02202C5C + ldr ip, _02202DB0 ; =0x00000814 + add sp, sp, ip + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_02202DB0: .word 0x00000814 +_02202DB4: .word 0x000007FF + + arm_func_start FUN_02202DB8 +FUN_02202DB8: ; 0x02202DB8 + mov r0, #1 + bx lr + + arm_func_start FUN_02202DC0 +FUN_02202DC0: ; 0x02202DC0 + stmdb sp!, {r4, r5, r6, r7, lr} + sub sp, sp, #4 + mov r4, r1 + mov r7, r2 + mov r5, r0 + ldr r1, _02202E64 ; =0x0220F7A0 + mov r0, r7 + bl strstr + cmp r0, #0 + movne r6, #1 + moveq r6, #0 + mov r0, r4 + mov r1, r7 + bl FUN_02203738 + cmp r6, #0 + addeq sp, sp, #4 + ldmeqia sp!, {r4, r5, r6, r7, pc} + ldrb r0, [r4, #0x14] + ands r1, r0, #4 + orrne r0, r0, #0x41 + strneb r0, [r4, #0x14] + orreq r0, r0, #0x42 + streqb r0, [r4, #0x14] + ldrb r0, [r4, #0x14] + and r0, r0, #0xf3 + strb r0, [r4, #0x14] + bl FUN_021F025C + ldr r2, [r4, #0x1c] + mov r1, r4 + sub r0, r0, r2 + str r0, [r4, #0x1c] + add r0, r5, #8 + bl FUN_022032AC + ldr r3, [r5, #0x48] + ldr ip, [r5, #0x44] + mov r0, r5 + mov r2, r4 + mov r1, #0 + blx ip + add sp, sp, #4 + ldmia sp!, {r4, r5, r6, r7, pc} + .align 2, 0 +_02202E64: .word 0x0220F7A0 + + arm_func_start FUN_02202E68 +FUN_02202E68: ; 0x02202E68 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} + mov r8, r2 + ldrsb r2, [r8] + mov sl, r0 + mov sb, r1 + mov r7, r3 + cmp r2, #0 + ldmneia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + ldrb r0, [sb, #0x14] + add r8, r8, #5 + sub r7, r7, #5 + ands r0, r0, #4 + beq _02202F04 + ldr r0, [sl, #0x40] + mov r6, #0 + cmp r0, #0 + ble _02202EF4 + ldr r4, _02202F64 ; =0x0220F3A8 +_02202EB0: + mov r0, r8 + mov r1, r7 + bl FUN_02206378 + movs r5, r0 + bmi _02202EF4 + add r0, sl, r6 + ldrb r1, [r0, #0x2c] + mov r0, sb + mov r2, r8 + ldr r1, [r4, r1, lsl #2] + bl FUN_02203A80 + ldr r0, [sl, #0x40] + add r6, r6, #1 + cmp r6, r0 + add r8, r8, r5 + sub r7, r7, r5 + blt _02202EB0 +_02202EF4: + ldrb r0, [sb, #0x14] + orr r0, r0, #0x41 + strb r0, [sb, #0x14] + b _02202F20 +_02202F04: + mov r0, sb + mov r1, r8 + mov r2, r7 + bl FUN_02203554 + ldrb r0, [sb, #0x14] + orr r0, r0, #0x43 + strb r0, [sb, #0x14] +_02202F20: + ldrb r0, [sb, #0x14] + and r0, r0, #0xf3 + strb r0, [sb, #0x14] + bl FUN_021F025C + ldr r2, [sb, #0x1c] + mov r1, sb + sub r0, r0, r2 + str r0, [sb, #0x1c] + add r0, sl, #8 + bl FUN_022032AC + ldr r3, [sl, #0x48] + ldr r4, [sl, #0x44] + mov r0, sl + mov r2, sb + mov r1, #0 + blx r4 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + .align 2, 0 +_02202F64: .word 0x0220F3A8 + + arm_func_start FUN_02202F68 +FUN_02202F68: ; 0x02202F68 + stmdb sp!, {lr} + sub sp, sp, #4 + ldrb ip, [r1, #0x14] + add lr, r1, #0x14 + cmp r3, #0 + and ip, ip, #0xc3 + strb ip, [r1, #0x14] + ldreqb r3, [lr] + orreq r3, r3, #4 + streqb r3, [lr] + beq _02202FB4 + cmp r3, #1 + ldreqb r3, [lr] + orreq r3, r3, #8 + streqb r3, [lr] + beq _02202FB4 + cmp r3, #2 + addeq sp, sp, #4 + ldmeqia sp!, {pc} +_02202FB4: + ldr ip, [r0, #0x10] + ldr r3, [r0, #4] + cmp ip, r3 + bge _02202FD0 + bl FUN_022030C0 + add sp, sp, #4 + ldmfd sp!, {pc} +_02202FD0: + cmp r2, #0 + beq _02202FE8 + add r0, r0, #0x14 + bl FUN_02203350 + add sp, sp, #4 + ldmfd sp!, {pc} +_02202FE8: + add r0, r0, #0x14 + bl FUN_02203378 + add sp, sp, #4 + ldmfd sp!, {pc} + + arm_func_start FUN_02202FF8 +FUN_02202FF8: ; 0x02202FF8 + stmdb sp!, {r4, lr} + mov r4, r0 + ldr r0, [r4, #0x20] + bl FUN_021EFD9C + mvn r1, #0 + add r0, r4, #0x14 + str r1, [r4, #0x20] + bl FUN_02203294 + add r0, r4, #8 + bl FUN_02203294 + ldmia sp!, {r4, pc} + + arm_func_start FUN_02203024 +FUN_02203024: ; 0x02203024 + stmdb sp!, {r4, lr} + mov r4, r0 + add r0, r4, #0x14 + bl FUN_02203294 + add r0, r4, #8 + bl FUN_02203294 + ldmia sp!, {r4, pc} + + arm_func_start FUN_02203040 +FUN_02203040: ; 0x02203040 + str r1, [r0, #0x28] + bx lr + + arm_func_start FUN_02203048 +FUN_02203048: ; 0x02203048 + stmdb sp!, {r4, r5, r6, lr} + mov r6, r0 + mov r5, r1 + mov r4, r2 + cmp r3, #0 + bne _02203070 + ldr r0, _022030BC ; =0x02210E5C + ldr r0, [r0] + cmp r0, #1 + ldmneia sp!, {r4, r5, r6, pc} +_02203070: + bl FUN_021F024C + str r4, [r6] + mov r0, #2 + str r5, [r6, #4] + mov r2, #0 + ldr r3, [sp, #0x10] + str r2, [r6, #0x40] + ldr r1, [sp, #0x14] + str r3, [r6, #0x44] + str r1, [r6, #0x48] + mov r1, r0 + str r2, [r6, #0x28] + bl FUN_021EFDB8 + str r0, [r6, #0x20] + add r0, r6, #0x14 + bl FUN_02203294 + add r0, r6, #8 + bl FUN_02203294 + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +_022030BC: .word 0x02210E5C + + arm_func_start FUN_022030C0 +FUN_022030C0: ; 0x022030C0 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #0x114 + mov r5, r0 + mov r4, r1 + add r0, r5, #8 + bl FUN_02203378 + bl FUN_021F025C + str r0, [r4, #0x1c] + mov r0, #2 + strb r0, [sp, #9] + ldrb r1, [r4, #0x14] + ands r0, r1, #0x20 + addne sp, sp, #0x114 + ldmneia sp!, {r4, r5, pc} + ldr r0, [r5] + cmp r0, #1 + bne _022031C8 + mov r2, #0xfe + mov r1, #0xfd + mov r0, #0 + strb r2, [sp, #0x10] + strb r1, [sp, #0x11] + strb r0, [sp, #0x12] + add r3, r4, #0x1c + ldrb r2, [r4, #0x1c] + ldrb r1, [r3, #1] + add ip, sp, #0x13 + strb r2, [ip] + strb r1, [ip, #1] + ldrb r2, [r3, #2] + ldrb r1, [r3, #3] + strb r2, [ip, #2] + strb r1, [ip, #3] + ldrb r1, [r4, #0x14] + ands r1, r1, #4 + beq _022031B0 + ldr r1, [r5, #0x40] + strb r1, [sp, #0x17] + ldr r2, [r5, #0x40] + cmp r2, #0 + ble _02203188 + add r1, sp, #0x10 +_02203168: + add r2, r5, r0 + ldrb r3, [r2, #0x2c] + add r2, r0, #8 + add r0, r0, #1 + strb r3, [r1, r2] + ldr r2, [r5, #0x40] + cmp r0, r2 + blt _02203168 +_02203188: + add r0, r2, #8 + add r1, sp, #0x10 + mov r2, #0 + strb r2, [r1, r0] + ldr r0, [r5, #0x40] + add r0, r0, #9 + strb r2, [r1, r0] + ldr r0, [r5, #0x40] + add r2, r0, #0xa + b _0220322C +_022031B0: + mov r0, #0xff + strb r0, [sp, #0x17] + strb r0, [sp, #0x18] + strb r0, [sp, #0x19] + mov r2, #0xa + b _0220322C +_022031C8: + ands r0, r1, #4 + beq _02203204 + ldr r3, _0220328C ; =0x0220F7A8 + add ip, sp, #0x10 + mov r2, #6 +_022031DC: + ldrb r1, [r3], #1 + ldrb r0, [r3], #1 + subs r2, r2, #1 + strb r1, [ip], #1 + strb r0, [ip], #1 + bne _022031DC + ldrb r0, [r3] + mov r2, #0xd + strb r0, [ip] + b _0220322C +_02203204: + ldr r3, _02203290 ; =0x0220F7B8 + add ip, sp, #0x10 + mov r2, #4 +_02203210: + ldrb r1, [r3], #1 + ldrb r0, [r3], #1 + subs r2, r2, #1 + strb r1, [ip], #1 + strb r0, [ip], #1 + bne _02203210 + mov r2, #8 +_0220322C: + ldr r1, [r4] + ldr r0, [r5, #0x28] + cmp r1, r0 + bne _02203258 + ldrb r0, [r4, #0x15] + ands r0, r0, #2 + ldrne r0, [r4, #8] + strne r0, [sp, #0xc] + ldrneh r0, [r4, #0xc] + strneh r0, [sp, #0xa] + bne _02203264 +_02203258: + str r1, [sp, #0xc] + ldrh r0, [r4, #4] + strh r0, [sp, #0xa] +_02203264: + add r1, sp, #8 + str r1, [sp] + mov r0, #8 + str r0, [sp, #4] + ldr r0, [r5, #0x20] + add r1, sp, #0x10 + mov r3, #0 + bl FUN_021EFBD4 + add sp, sp, #0x114 + ldmia sp!, {r4, r5, pc} + .align 2, 0 +_0220328C: .word 0x0220F7A8 +_02203290: .word 0x0220F7B8 + + arm_func_start FUN_02203294 +FUN_02203294: ; 0x02203294 + mov r2, #0 + str r2, [r0, #4] + ldr r1, [r0, #4] + str r1, [r0] + str r2, [r0, #8] + bx lr + + arm_func_start FUN_022032AC +FUN_022032AC: ; 0x022032AC + ldr r3, [r0] + mov r2, #0 + cmp r3, #0 + beq _02203310 +_022032BC: + cmp r3, r1 + bne _02203300 + cmp r2, #0 + ldrne r1, [r3, #0x20] + strne r1, [r2, #0x20] + ldr r1, [r0] + cmp r1, r3 + ldreq r1, [r3, #0x20] + streq r1, [r0] + ldr r1, [r0, #4] + cmp r1, r3 + streq r2, [r0, #4] + ldr r1, [r0, #8] + sub r1, r1, #1 + str r1, [r0, #8] + mov r0, #1 + bx lr +_02203300: + mov r2, r3 + ldr r3, [r3, #0x20] + cmp r3, #0 + bne _022032BC +_02203310: + mov r0, #0 + bx lr + + arm_func_start FUN_02203318 +FUN_02203318: ; 0x02203318 + ldr r2, [r0] + cmp r2, #0 + beq _02203348 + ldr r1, [r2, #0x20] + str r1, [r0] + ldr r1, [r0] + cmp r1, #0 + moveq r1, #0 + streq r1, [r0, #4] + ldr r1, [r0, #8] + sub r1, r1, #1 + str r1, [r0, #8] +_02203348: + mov r0, r2 + bx lr + + arm_func_start FUN_02203350 +FUN_02203350: ; 0x02203350 + ldr r2, [r0] + str r2, [r1, #0x20] + str r1, [r0] + ldr r2, [r0, #4] + cmp r2, #0 + streq r1, [r0, #4] + ldr r1, [r0, #8] + add r1, r1, #1 + str r1, [r0, #8] + bx lr + + arm_func_start FUN_02203378 +FUN_02203378: ; 0x02203378 + ldr r2, [r0, #4] + cmp r2, #0 + strne r1, [r2, #0x20] + str r1, [r0, #4] + mov r2, #0 + str r2, [r1, #0x20] + ldr r2, [r0] + cmp r2, #0 + streq r1, [r0] + ldr r1, [r0, #8] + add r1, r1, #1 + str r1, [r0, #8] + bx lr + + arm_func_start FUN_022033AC +FUN_022033AC: ; 0x022033AC + ldr r1, _022033C4 ; =0x02211738 + ldr r1, [r1] + cmp r0, r1 + moveq r0, #1 + movne r0, #0 + bx lr + .align 2, 0 +_022033C4: .word 0x02211738 + + arm_func_start FUN_022033C8 +FUN_022033C8: ; 0x022033C8 + ldrb r0, [r0, #0x14] + bx lr + + arm_func_start FUN_022033D0 +FUN_022033D0: ; 0x022033D0 + strb r1, [r0, #0x14] + bx lr + + arm_func_start FUN_022033D8 +FUN_022033D8: ; 0x022033D8 + str r1, [r0, #0x10] + bx lr + + arm_func_start FUN_022033E0 +FUN_022033E0: ; 0x022033E0 + str r1, [r0, #8] + strh r2, [r0, #0xc] + bx lr + + arm_func_start FUN_022033EC +FUN_022033EC: ; 0x022033EC + strb r1, [r0, #0x15] + bx lr + + arm_func_start FUN_022033F4 +FUN_022033F4: ; 0x022033F4 + stmdb sp!, {r4, r5, r6, lr} + sub sp, sp, #8 + mov r0, #0x24 + mov r6, r1 + mov r5, r2 + bl FUN_021DD860 + movs r4, r0 + addeq sp, sp, #8 + moveq r0, #0 + ldmeqia sp!, {r4, r5, r6, pc} + ldr r0, _02203498 ; =FUN_022034AC + ldr r2, _0220349C ; =FUN_022034D0 + str r0, [sp] + mov r0, #8 + ldr r3, _022034A0 ; =FUN_022034C0 + mov r1, r0 + str r2, [sp, #4] + mov r2, #4 + bl FUN_021EF62C + str r0, [r4, #0x18] + ldr r0, [r4, #0x18] + cmp r0, #0 + bne _02203464 + mov r0, r4 + bl FUN_021DD82C + add sp, sp, #8 + mov r0, #0 + ldmia sp!, {r4, r5, r6, pc} +_02203464: + mov r1, #0 + strb r1, [r4, #0x14] + strb r1, [r4, #0x15] + str r1, [r4, #0x20] + str r1, [r4, #0x1c] + str r1, [r4, #0x10] + str r6, [r4] + strh r5, [r4, #4] + str r1, [r4, #8] + mov r0, r4 + strh r1, [r4, #0xc] + add sp, sp, #8 + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +_02203498: .word FUN_022034AC +_0220349C: .word FUN_022034D0 +_022034A0: .word FUN_022034C0 + + arm_func_start FUN_022034A4 +FUN_022034A4: ; 0x022034A4 + ldr r0, [r0, #0x1c] + bx lr + + arm_func_start FUN_022034AC +FUN_022034AC: ; 0x022034AC + ldr ip, _022034BC ; =0x020E9B38 + ldr r0, [r0] + ldr r1, [r1] + bx ip + .align 2, 0 +_022034BC: .word 0x020E9B38 + + arm_func_start FUN_022034C0 +FUN_022034C0: ; 0x022034C0 + ldr ip, _022034CC ; =FUN_022034F4 + ldr r0, [r0] + bx ip + .align 2, 0 +_022034CC: .word FUN_022034F4 + + arm_func_start FUN_022034D0 +FUN_022034D0: ; 0x022034D0 + stmdb sp!, {r4, lr} + mov r4, r0 + ldr r1, [r4] + mov r0, #0 + bl FUN_022063A8 + ldr r1, [r4, #4] + mov r0, #0 + bl FUN_022063A8 + ldmia sp!, {r4, pc} + + arm_func_start FUN_022034F4 +FUN_022034F4: ; 0x022034F4 + stmdb sp!, {lr} + sub sp, sp, #4 + ldrsb lr, [r0] + mov ip, #0 + cmp lr, #0 + beq _02203538 + ldr r3, _0220354C ; =0x0210420C + ldr r2, _02203550 ; =0x9CCF9319 +_02203514: + cmp lr, #0 + blt _02203528 + cmp lr, #0x80 + bge _02203528 + ldrb lr, [r3, lr] +_02203528: + mla ip, r2, ip, lr + ldrsb lr, [r0, #1]! + cmp lr, #0 + bne _02203514 +_02203538: + mov r0, ip + bl _u32_div_f + mov r0, r1 + add sp, sp, #4 + ldmfd sp!, {pc} + .align 2, 0 +_0220354C: .word 0x0210420C +_02203550: .word 0x9CCF9319 + + arm_func_start FUN_02203554 +FUN_02203554: ; 0x02203554 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x9c + mov sl, r1 + ldrsb r1, [sl] + mov fp, r0 + mov sb, r2 + cmp r1, #0 + beq _022035D4 +_02203574: + mov r0, sl + mov r1, sb + bl FUN_02206378 + cmp r0, #0 + addlt sp, sp, #0x9c + ldmltia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + mov r4, sl + sub sb, sb, r0 + add sl, sl, r0 + mov r0, sl + mov r1, sb + bl FUN_02206378 + cmp r0, #0 + addlt sp, sp, #0x9c + ldmltia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + mov r2, sl + mov r1, r4 + add sl, sl, r0 + sub sb, sb, r0 + mov r0, fp + bl FUN_02203A80 + ldrsb r0, [sl] + cmp r0, #0 + bne _02203574 +_022035D4: + mov r0, #0 + add sl, sl, #1 + sub sb, sb, #1 + str r0, [sp, #4] + str r0, [sp, #0x10] + str r0, [sp, #8] + str r0, [sp, #0xc] +_022035F0: + cmp sb, #2 + addlt sp, sp, #0x9c + ldmltia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + ldrb r2, [sl] + ldrb r1, [sl, #1] + add r0, sp, #0x14 + add sl, sl, #2 + strb r2, [r0] + strb r1, [r0, #1] + ldrh r2, [sp, #0x14] + str sl, [sp] + ldr r8, [sp, #8] + mov r0, r2, asr #8 + and r1, r0, #0xff + mov r0, r2, lsl #8 + and r0, r0, #0xff00 + orr r0, r1, r0 + strh r0, [sp, #0x14] + ldrsb r0, [sl] + sub sb, sb, #2 + cmp r0, #0 + beq _02203680 +_02203648: + mov r0, sl + mov r1, sb + bl FUN_02206378 + cmp r0, #0 + addlt sp, sp, #0x9c + ldmltia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + cmp r0, #0x64 + addgt sp, sp, #0x9c + ldmgtia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + ldrsb r1, [sl, r0]! + sub sb, sb, r0 + add r8, r8, #1 + cmp r1, #0 + bne _02203648 +_02203680: + ldrh r0, [sp, #0x14] + ldr r7, [sp, #0xc] + add sl, sl, #1 + cmp r0, #0 + sub sb, sb, #1 + ble _02203718 +_02203698: + ldr r5, [sp] + cmp r8, #0 + ldr r6, [sp, #0x10] + ble _02203708 +_022036A8: + mov r0, sl + mov r1, sb + bl FUN_02206378 + movs r4, r0 + addmi sp, sp, #0x9c + ldmmiia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + ldr r1, _02203734 ; =0x0220F7D4 + add r0, sp, #0x16 + mov r2, r5 + mov r3, r7 + bl sprintf + mov r0, fp + add r1, sp, #0x16 + mov r2, sl + bl FUN_02203A80 + mov r0, r5 + add sl, sl, r4 + sub sb, sb, r4 + bl strlen + add r0, r0, #1 + add r6, r6, #1 + add r5, r5, r0 + cmp r6, r8 + blt _022036A8 +_02203708: + ldrh r0, [sp, #0x14] + add r7, r7, #1 + cmp r7, r0 + blt _02203698 +_02203718: + ldr r0, [sp, #4] + add r0, r0, #1 + str r0, [sp, #4] + cmp r0, #2 + blt _022035F0 + add sp, sp, #0x9c + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_02203734: .word 0x0220F7D4 + + arm_func_start FUN_02203738 +FUN_02203738: ; 0x02203738 + stmdb sp!, {r4, r5, r6, r7, r8, sb, lr} + sub sp, sp, #4 + mov sb, r0 + add r0, r1, #1 + mov r1, #0x5c + bl FUN_022037BC + movs r8, r0 + addeq sp, sp, #4 + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, pc} + ldr r4, _022037B8 ; =0x0220F7DC + mov r6, #0 + mov r5, #0x5c +_02203768: + mov r0, r6 + mov r1, r5 + bl FUN_022037BC + movs r7, r0 + mov r0, r8 + moveq r7, r4 + bl FUN_02203828 + cmp r0, #0 + beq _0220379C + mov r0, sb + mov r1, r8 + mov r2, r7 + bl FUN_02203A80 +_0220379C: + mov r0, r6 + mov r1, r5 + bl FUN_022037BC + movs r8, r0 + bne _02203768 + add sp, sp, #4 + ldmia sp!, {r4, r5, r6, r7, r8, sb, pc} + .align 2, 0 +_022037B8: .word 0x0220F7DC + + arm_func_start FUN_022037BC +FUN_022037BC: ; 0x022037BC + cmp r0, #0 + ldrne r2, _02203824 ; =0x02211730 + strne r0, [r2] + ldr r2, _02203824 ; =0x02211730 + ldr r0, [r2] + b _022037E0 +_022037D4: + ldr r3, [r2] + add r3, r3, #1 + str r3, [r2] +_022037E0: + ldr ip, [r2] + ldrsb r3, [ip] + cmp r3, #0 + beq _022037F8 + cmp r3, r1 + bne _022037D4 +_022037F8: + cmp ip, r0 + moveq r0, #0 + cmp r3, #0 + bxeq lr + ldr r1, _02203824 ; =0x02211730 + mov r2, #0 + ldr r3, [r1] + add r3, r3, #1 + str r3, [r1] + strb r2, [ip] + bx lr + .align 2, 0 +_02203824: .word 0x02211730 + + arm_func_start FUN_02203828 +FUN_02203828: ; 0x02203828 + stmdb sp!, {r4, r5, r6, lr} + sub sp, sp, #8 + ldr r1, _02203884 ; =0x0220BCE0 + add r4, sp, #0 + ldr r2, [r1] + ldr r1, [r1, #4] + mov r6, r0 + str r2, [sp] + str r1, [sp, #4] + mov r5, #0 +_02203850: + ldr r1, [r4, r5, lsl #2] + mov r0, r6 + bl strcmp + cmp r0, #0 + addeq sp, sp, #8 + moveq r0, #0 + ldmeqia sp!, {r4, r5, r6, pc} + add r5, r5, #1 + cmp r5, #2 + blo _02203850 + mov r0, #1 + add sp, sp, #8 + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +_02203884: .word 0x0220BCE0 + + arm_func_start FUN_02203888 +FUN_02203888: ; 0x02203888 + ldr r0, [r0, #0x20] + bx lr + + arm_func_start FUN_02203890 +FUN_02203890: ; 0x02203890 + str r1, [r0, #0x20] + bx lr + + arm_func_start FUN_02203898 +FUN_02203898: ; 0x02203898 + ldrh r0, [r0, #0xc] + mov r1, r0, asr #8 + mov r0, r0, lsl #8 + and r1, r1, #0xff + and r0, r0, #0xff00 + orr r0, r1, r0 + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + bx lr + + arm_func_start FUN_022038BC +FUN_022038BC: ; 0x022038BC + ldr r0, [r0, #8] + bx lr + + arm_func_start FUN_022038C4 +FUN_022038C4: ; 0x022038C4 + ldrb r0, [r0, #0x15] + and r0, r0, #2 + cmp r0, #2 + moveq r0, #1 + movne r0, #0 + bx lr + + arm_func_start FUN_022038DC +FUN_022038DC: ; 0x022038DC + ldrh r0, [r0, #4] + bx lr + + arm_func_start FUN_022038E4 +FUN_022038E4: ; 0x022038E4 + ldrh r0, [r0, #4] + mov r1, r0, asr #8 + mov r0, r0, lsl #8 + and r1, r1, #0xff + and r0, r0, #0xff00 + orr r0, r1, r0 + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + bx lr + + arm_func_start FUN_02203908 +FUN_02203908: ; 0x02203908 + ldr r0, [r0] + bx lr + + arm_func_start FUN_02203910 +FUN_02203910: ; 0x02203910 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #4 + mov r5, r2 + mov r2, #0 + mov r4, r3 + bl FUN_022039E0 + cmp r0, #0 + beq _0220393C + bl atod + mov r5, r0 + mov r4, r1 +_0220393C: + mov r0, r5 + mov r1, r4 + add sp, sp, #4 + ldmia sp!, {r4, r5, pc} + + arm_func_start FUN_0220394C +FUN_0220394C: ; 0x0220394C + stmdb sp!, {r4, r5, r6, lr} + mov r5, r1 + mov r6, r0 + ldr r1, _022039D8 ; =0x0220F7E0 + mov r0, r5 + mov r4, r2 + bl strcmp + cmp r0, #0 + bne _0220397C + mov r0, r6 + bl FUN_022034A4 + ldmia sp!, {r4, r5, r6, pc} +_0220397C: + mov r0, r6 + mov r1, r5 + mov r2, #0 + bl FUN_022039E0 + cmp r0, #0 + beq _022039C8 + ldrb r2, [r0] + cmp r2, #0 + blt _022039A8 + cmp r2, #0x80 + blt _022039B0 +_022039A8: + mov r1, #0 + b _022039C0 +_022039B0: + ldr r1, _022039DC ; =0x0210430C + mov r2, r2, lsl #1 + ldrh r1, [r1, r2] + and r1, r1, #8 +_022039C0: + cmp r1, #0 + bne _022039D0 +_022039C8: + mov r0, r4 + ldmia sp!, {r4, r5, r6, pc} +_022039D0: + bl atol + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +_022039D8: .word 0x0220F7E0 +_022039DC: .word 0x0210430C + + arm_func_start FUN_022039E0 +FUN_022039E0: ; 0x022039E0 + stmdb sp!, {r4, r5, r6, lr} + sub sp, sp, #8 + movs r6, r0 + mov r5, r1 + mov r4, r2 + bne _02203A0C + ldr r0, _02203A40 ; =0x0220F7E8 + ldr r1, _02203A44 ; =0x0220F7F0 + mov r2, #0 + mov r3, #0x97 + bl __msl_assertion_failed +_02203A0C: + cmp r6, #0 + addeq sp, sp, #8 + moveq r0, #0 + ldmeqia sp!, {r4, r5, r6, pc} + str r5, [sp] + ldr r0, [r6, #0x18] + add r1, sp, #0 + bl FUN_021EF358 + cmp r0, #0 + ldrne r4, [r0, #4] + mov r0, r4 + add sp, sp, #8 + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +_02203A40: .word 0x0220F7E8 +_02203A44: .word 0x0220F7F0 + + arm_func_start FUN_02203A48 +FUN_02203A48: ; 0x02203A48 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #0x14 + mov r4, r1 + mov r5, r0 + ldr r1, _02203A7C ; =0x0220F7FC + add r0, sp, #0 + bl sprintf + add r2, sp, #0 + mov r0, r5 + mov r1, r4 + bl FUN_02203A80 + add sp, sp, #0x14 + ldmia sp!, {r4, r5, pc} + .align 2, 0 +_02203A7C: .word 0x0220F7FC + + arm_func_start FUN_02203A80 +FUN_02203A80: ; 0x02203A80 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #0xc + mov r5, r0 + mov r4, r2 + mov r0, #0 + bl FUN_02206428 + str r0, [sp] + mov r1, r4 + mov r0, #0 + bl FUN_02206428 + str r0, [sp, #4] + ldr r0, [r5, #0x18] + add r1, sp, #0 + bl FUN_021EF494 + add sp, sp, #0xc + ldmia sp!, {r4, r5, pc} + + arm_func_start FUN_02203AC0 +FUN_02203AC0: ; 0x02203AC0 + stmdb sp!, {r4, lr} + ldr r4, [r0] + ldr r0, [r4, #0x18] + bl FUN_021EF5B0 + mov r1, #0 + mov r0, r4 + str r1, [r4, #0x18] + bl FUN_021DD82C + ldmia sp!, {r4, pc} + + arm_func_start FUN_02203AE4 +FUN_02203AE4: ; 0x02203AE4 + stmdb sp!, {lr} + sub sp, sp, #4 + ldr r0, _02203B30 ; =0x02211734 + ldr r0, [r0] + cmp r0, #0 + addeq sp, sp, #4 + ldmeqia sp!, {pc} + bl FUN_021EF540 + cmp r0, #0 + addne sp, sp, #4 + ldmneia sp!, {pc} + ldr r0, _02203B30 ; =0x02211734 + ldr r0, [r0] + bl FUN_021EF5B0 + ldr r0, _02203B30 ; =0x02211734 + mov r1, #0 + str r1, [r0] + add sp, sp, #4 + ldmfd sp!, {pc} + .align 2, 0 +_02203B30: .word 0x02211734 + + arm_func_start FUN_02203B34 +FUN_02203B34: ; 0x02203B34 + stmdb sp!, {lr} + sub sp, sp, #0xc + ldr r0, _02203B88 ; =0x02211734 + ldr r0, [r0] + cmp r0, #0 + bne _02203B78 + ldr r0, _02203B8C ; =FUN_02203BA8 + ldr ip, _02203B90 ; =FUN_02203B98 + str r0, [sp] + ldr r3, _02203B94 ; =FUN_02203BBC + mov r0, #8 + mov r1, #0x64 + mov r2, #2 + str ip, [sp, #4] + bl FUN_021EF62C + ldr r1, _02203B88 ; =0x02211734 + str r0, [r1] +_02203B78: + ldr r0, _02203B88 ; =0x02211734 + ldr r0, [r0] + add sp, sp, #0xc + ldmfd sp!, {pc} + .align 2, 0 +_02203B88: .word 0x02211734 +_02203B8C: .word FUN_02203BA8 +_02203B90: .word FUN_02203B98 +_02203B94: .word FUN_02203BBC + + arm_func_start FUN_02203B98 +FUN_02203B98: ; 0x02203B98 + ldr ip, _02203BA4 ; =FUN_021DD82C + ldr r0, [r0] + bx ip + .align 2, 0 +_02203BA4: .word FUN_021DD82C + + arm_func_start FUN_02203BA8 +FUN_02203BA8: ; 0x02203BA8 + ldr ip, _02203BB8 ; =0x020E9B38 + ldr r0, [r0] + ldr r1, [r1] + bx ip + .align 2, 0 +_02203BB8: .word 0x020E9B38 + + arm_func_start FUN_02203BBC +FUN_02203BBC: ; 0x02203BBC + ldr ip, _02203BC8 ; =FUN_022034F4 + ldr r0, [r0] + bx ip + .align 2, 0 +_02203BC8: .word FUN_022034F4 + + arm_func_start FUN_02203BCC +FUN_02203BCC: ; 0x02203BCC + ldr r0, [r0, #0x4ec] + bx lr + + arm_func_start FUN_02203BD4 +FUN_02203BD4: ; 0x02203BD4 + ldr ip, _02203BE0 ; =FUN_02206740 + add r0, r0, #0x4c + bx ip + .align 2, 0 +_02203BE0: .word FUN_02206740 + + arm_func_start FUN_02203BE4 +FUN_02203BE4: ; 0x02203BE4 + ldr ip, _02203BF0 ; =0x0220658C + add r0, r0, #0x4c + bx ip + .align 2, 0 +_02203BF0: .word 0x0220658C + + arm_func_start FUN_02203BF4 +FUN_02203BF4: ; 0x02203BF4 + ldr ip, _02203C00 ; =FUN_02206570 + add r0, r0, #0x4c + bx ip + .align 2, 0 +_02203C00: .word FUN_02206570 + + arm_func_start FUN_02203C04 +FUN_02203C04: ; 0x02203C04 + stmdb sp!, {r4, lr} + mov r4, r0 + bl FUN_02203C1C + add r0, r4, #0x4c + bl FUN_022064BC + ldmia sp!, {r4, pc} + + arm_func_start FUN_02203C1C +FUN_02203C1C: ; 0x02203C1C + stmdb sp!, {r4, lr} + mov r4, r0 + add r0, r4, #0x4c + bl FUN_02205994 + mov r0, r4 + bl FUN_02203024 + ldmia sp!, {r4, pc} + + arm_func_start FUN_02203C38 +FUN_02203C38: ; 0x02203C38 + stmdb sp!, {r4, lr} + mov r4, r0 + bl FUN_02202AD4 + add r0, r4, #0x4c + bl FUN_022041FC + ldmia sp!, {r4, pc} + + arm_func_start FUN_02203C50 +FUN_02203C50: ; 0x02203C50 + stmdb sp!, {r4, lr} + mov r4, r0 + add r0, r4, #0x4c + bl FUN_022066A4 + mov r1, r0 + mvn r0, #0 + cmp r1, r0 + ldmeqia sp!, {r4, pc} + add r0, r4, #0x4c + bl FUN_0220659C + ldmia sp!, {r4, pc} + + arm_func_start FUN_02203C7C +FUN_02203C7C: ; 0x02203C7C + stmdb sp!, {r4, r5, r6, lr} + mov r5, r0 + mov r6, r2 + mov r0, r1 + mov r4, r3 + bl FUN_021EFB38 + mov r3, r6, asr #8 + mov r2, r6, lsl #8 + mov r1, r0 + and r3, r3, #0xff + and r0, r2, #0xff00 + orr r0, r3, r0 + mov r2, r0, lsl #0x10 + mov r3, r4 + add r0, r5, #0x4c + mov r2, r2, lsr #0x10 + bl FUN_02204380 + ldmia sp!, {r4, r5, r6, pc} + + arm_func_start FUN_02203CC4 +FUN_02203CC4: ; 0x02203CC4 + stmdb sp!, {r4, r5, r6, lr} + sub sp, sp, #8 + mov r5, r0 + mov r6, r2 + mov r0, r1 + mov r4, r3 + bl FUN_021EFB38 + mov r3, r6, asr #8 + mov r2, r6, lsl #8 + ldr ip, [sp, #0x18] + mov r1, r0 + str ip, [sp] + and r3, r3, #0xff + and r0, r2, #0xff00 + orr r0, r3, r0 + mov r2, r0, lsl #0x10 + mov r3, r4 + add r0, r5, #0x4c + mov r2, r2, lsr #0x10 + bl FUN_02204438 + add sp, sp, #8 + ldmia sp!, {r4, r5, r6, pc} + + arm_func_start FUN_02203D1C +FUN_02203D1C: ; 0x02203D1C + stmdb sp!, {lr} + sub sp, sp, #0x14 + ldr lr, [sp, #0x18] + ldr ip, [sp, #0x1c] + str lr, [sp] + str ip, [sp, #4] + mov lr, #0x80 + ldr ip, [sp, #0x20] + str lr, [sp, #8] + str ip, [sp, #0xc] + bl FUN_02203D50 + add sp, sp, #0x14 + ldmfd sp!, {pc} + + arm_func_start FUN_02203D50 +FUN_02203D50: ; 0x02203D50 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x10c + ldr r8, [sp, #0x130] + mov sl, r0 + str r1, [sp, #4] + add r4, sp, #8 + mov sb, r3 + mov r1, #0x40 + mov r0, #0 +_02203D74: + strb r0, [r4], #1 + strb r0, [r4], #1 + strb r0, [r4], #1 + strb r0, [r4], #1 + subs r1, r1, #1 + bne _02203D74 + mov r7, #0 + str r2, [sl, #0x620] + mov r6, r7 + str r7, [sl, #0x40] + cmp r8, #0 + ble _02203DFC + ldr fp, _02203E78 ; =0x0220F3A8 +_02203DA8: + ldrb r0, [sb, r6] + add r4, sb, r6 + ldr r5, [fp, r0, lsl #2] + mov r0, r5 + bl strlen + add r0, r7, r0 + add r0, r0, #1 + cmp r0, #0x100 + bge _02203DFC + add r0, sp, #8 + ldr r1, _02203E7C ; =0x0220F800 + mov r2, r5 + add r0, r0, r7 + bl sprintf + add r7, r7, r0 + ldrb r1, [r4] + mov r0, sl + bl FUN_02202AB8 + add r6, r6, #1 + cmp r6, r8 + blt _02203DA8 +_02203DFC: + ldr r4, [sp, #0x13c] + ldr r2, [sp, #0x134] + ldr r3, [sp, #0x138] + add r1, sp, #8 + add r0, sl, #0x4c + str r4, [sp] + bl FUN_02205AB4 + cmp r0, #0 + addne sp, sp, #0x10c + ldmneia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + ldr r1, [sp, #4] + cmp r1, #0 + addne sp, sp, #0x10c + ldmneia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + mov r4, #0xa + b _02203E4C +_02203E3C: + mov r0, r4 + bl FUN_021F0250 + mov r0, sl + bl FUN_02203C38 +_02203E4C: + ldr r1, [sl, #0x4c] + cmp r1, #3 + beq _02203E3C + ldr r1, [sl, #0x10] + cmp r1, #0 + addle sp, sp, #0x10c + ldmleia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + cmp r0, #0 + beq _02203E3C + add sp, sp, #0x10c + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_02203E78: .word 0x0220F3A8 +_02203E7C: .word 0x0220F800 + + arm_func_start FUN_02203E80 +FUN_02203E80: ; 0x02203E80 + stmdb sp!, {r4, lr} + mov r4, r0 + add r0, r4, #0x4c + bl FUN_0220595C + mov r0, r4 + bl FUN_02202FF8 + mov r0, r4 + bl FUN_021DD82C + ldmia sp!, {r4, pc} + + arm_func_start FUN_02203EA4 +FUN_02203EA4: ; 0x02203EA4 + stmdb sp!, {r4, r5, r6, r7, r8, lr} + sub sp, sp, #0x10 + ldr r4, [sp, #0x30] + mov r8, r0 + mov r7, r1 + mov r6, r2 + mov r5, r3 + cmp r4, #0 + bne _02203EE0 + ldr r0, _02203F68 ; =0x02210E5C + ldr r0, [r0] + cmp r0, #1 + addne sp, sp, #0x10 + movne r0, #0 + ldmneia sp!, {r4, r5, r6, r7, r8, pc} +_02203EE0: + ldr r0, _02203F6C ; =0x00000638 + bl FUN_021DD860 + movs r4, r0 + addeq sp, sp, #0x10 + moveq r0, #0 + ldmeqia sp!, {r4, r5, r6, r7, r8, pc} + ldr r1, [sp, #0x34] + ldr r0, [sp, #0x38] + str r1, [r4, #0x630] + str r0, [r4, #0x634] + mov r0, #0 + str r0, [r4, #0x624] + ldr r1, [sp, #0x30] + str r5, [sp] + ldr r0, _02203F70 ; =FUN_02204028 + str r1, [sp, #4] + str r0, [sp, #8] + mov r1, r8 + mov r2, r7 + mov r3, r6 + add r0, r4, #0x4c + str r4, [sp, #0xc] + bl FUN_02206248 + ldr r0, _02203F74 ; =FUN_02203F78 + ldr r1, [sp, #0x28] + str r0, [sp] + ldr r2, [sp, #0x2c] + ldr r3, [sp, #0x30] + mov r0, r4 + str r4, [sp, #4] + bl FUN_02203048 + mov r0, r4 + add sp, sp, #0x10 + ldmia sp!, {r4, r5, r6, r7, r8, pc} + .align 2, 0 +_02203F68: .word 0x02210E5C +_02203F6C: .word 0x00000638 +_02203F70: .word FUN_02204028 +_02203F74: .word FUN_02203F78 + + arm_func_start FUN_02203F78 +FUN_02203F78: ; 0x02203F78 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #4 + mov r5, r2 + mov r4, r3 + cmp r1, #0 + beq _02203FBC + cmp r1, #1 + beq _02203FA4 + cmp r1, #2 + beq _02203FD4 + b _02203FE8 +_02203FA4: + ldr r3, [r4, #0x634] + ldr ip, [r4, #0x630] + mov r0, r4 + mov r1, #2 + blx ip + b _02203FE8 +_02203FBC: + ldr r3, [r4, #0x634] + ldr ip, [r4, #0x630] + mov r0, r4 + mov r1, #1 + blx ip + b _02203FE8 +_02203FD4: + ldr r3, [r4, #0x634] + ldr ip, [r4, #0x630] + mov r0, r4 + mov r1, #4 + blx ip +_02203FE8: + cmp r5, #0 + addeq sp, sp, #4 + ldmeqia sp!, {r4, r5, pc} + ldr r1, [r5] + ldr r0, [r4, #0x628] + cmp r1, r0 + addne sp, sp, #4 + ldmneia sp!, {r4, r5, pc} + add r0, r4, #0x600 + ldrh r1, [r5, #4] + ldrh r0, [r0, #0x2c] + cmp r1, r0 + moveq r0, #0 + streq r0, [r4, #0x628] + add sp, sp, #4 + ldmia sp!, {r4, r5, pc} + + arm_func_start FUN_02204028 +FUN_02204028: ; 0x02204028 + stmdb sp!, {r4, r5, r6, lr} + mov r6, r0 + mov r5, r2 + mov r4, r3 + cmp r1, #6 + addls pc, pc, r1, lsl #2 + b _022041C8 +_02204044: ; jump table + b _02204060 ; case 0 + b _022040E8 ; case 1 + b _02204124 ; case 2 + b _02204158 ; case 3 + b _022041C8 ; case 4 + b _022041A0 ; case 5 + b _022041BC ; case 6 +_02204060: + ldr r3, [r4, #0x634] + ldr ip, [r4, #0x630] + mov r0, r4 + mov r1, #0 + blx ip + ldrb r1, [r5, #0x14] + ands r0, r1, #3 + beq _02204088 + ands r0, r1, #0x40 + bne _022041C8 +_02204088: + ands r0, r1, #0x2c + bne _022041C8 + ldr r0, [r4, #0x624] + cmp r0, #0 + bne _022041C8 + ldrb r0, [r5, #0x15] + ands r0, r0, #1 + beq _022040D0 + ldr r0, [r4, #0x4c] + cmp r0, #0 + beq _022040C0 + ldr r0, [r4, #0x40] + cmp r0, #0 + bne _022040C8 +_022040C0: + mov r3, #1 + b _022040D4 +_022040C8: + mov r3, #0 + b _022040D4 +_022040D0: + mov r3, #2 +_022040D4: + mov r0, r4 + mov r1, r5 + mov r2, #0 + bl FUN_02202F68 + b _022041C8 +_022040E8: + ldrb r0, [r5, #0x14] + ands r0, r0, #0x43 + bne _0220410C + ldr r3, [r4, #0x634] + ldr ip, [r4, #0x630] + mov r0, r4 + mov r1, #2 + blx ip + b _022041C8 +_0220410C: + ldr r3, [r4, #0x634] + ldr ip, [r4, #0x630] + mov r0, r4 + mov r1, #1 + blx ip + b _022041C8 +_02204124: + ldrb r0, [r5, #0x14] + ands r0, r0, #0x2c + beq _0220413C + mov r0, r4 + mov r1, r5 + bl FUN_02202A80 +_0220413C: + ldr r3, [r4, #0x634] + ldr ip, [r4, #0x630] + mov r0, r4 + mov r2, r5 + mov r1, #3 + blx ip + b _022041C8 +_02204158: + ldr r1, [r4, #0x620] + cmp r1, #0 + beq _02204168 + bl FUN_02205994 +_02204168: + ldr r0, [r6, #4] + bl FUN_021EF06C + cmp r0, #0 + beq _02204184 + ldr r0, [r4, #0x10] + cmp r0, #0 + bne _022041C8 +_02204184: + ldr r3, [r4, #0x634] + ldr ip, [r4, #0x630] + mov r0, r4 + mov r1, #4 + mov r2, #0 + blx ip + b _022041C8 +_022041A0: + ldr r3, [r4, #0x634] + ldr ip, [r4, #0x630] + mov r0, r4 + mov r1, #5 + mov r2, #0 + blx ip + b _022041C8 +_022041BC: + ldr r1, [r4, #0x4ec] + mov r0, r4 + bl FUN_02203040 +_022041C8: + cmp r5, #0 + ldmeqia sp!, {r4, r5, r6, pc} + ldr r1, [r5] + ldr r0, [r4, #0x628] + cmp r1, r0 + ldmneia sp!, {r4, r5, r6, pc} + add r0, r4, #0x600 + ldrh r1, [r5, #4] + ldrh r0, [r0, #0x2c] + cmp r1, r0 + moveq r0, #0 + streq r0, [r4, #0x628] + ldmia sp!, {r4, r5, r6, pc} + + arm_func_start FUN_022041FC +FUN_022041FC: ; 0x022041FC + stmdb sp!, {r4, lr} + mov r4, r0 + bl FUN_02206514 + ldr r0, [r4] + cmp r0, #3 + addls pc, pc, r0, lsl #2 + b _02204240 +_02204218: ; jump table + b _02204234 ; case 0 + b _02204240 ; case 1 + b _02204228 ; case 2 + b _02204228 ; case 3 +_02204228: + mov r0, r4 + bl FUN_02204560 + ldmia sp!, {r4, pc} +_02204234: + mov r0, r4 + bl FUN_02204248 + ldmia sp!, {r4, pc} +_02204240: + mov r0, #0 + ldmia sp!, {r4, pc} + + arm_func_start FUN_02204248 +FUN_02204248: ; 0x02204248 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + ldr ip, _02204374 ; =0x000005F4 + sub sp, sp, ip + mov r1, #8 + mov sl, r0 + str r1, [sp, #0x10] + ldr r0, [sl, #0x4b0] + bl FUN_021EFF2C + cmp r0, #0 + beq _0220431C + add sb, sp, #8 + add r8, sp, #0x10 + add fp, sp, #0x14 + mov r5, #0x11 + mov r7, #0 + mvn r4, #0 +_02204288: + str sb, [sp] + str r8, [sp, #4] + ldr r0, [sl, #0x4b0] + ldr r2, _02204378 ; =0x000005DB + mov r1, fp + mov r3, r7 + bl FUN_021EFC40 + mvn r1, #0 + cmp r0, r1 + beq _0220430C + ldrh r2, [sp, #0xa] + ldr r1, [sp, #0xc] + mov r0, sl + bl FUN_02206628 + cmp r0, r4 + bne _0220430C + ldrh r2, [sp, #0xa] + ldr r1, [sp, #0xc] + mov r0, sl + bl FUN_022033F4 + mov r6, r0 + bl FUN_022033AC + cmp r0, #0 + ldrne ip, _02204374 ; =0x000005F4 + movne r0, #5 + addne sp, sp, ip + ldmneia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + mov r0, r6 + mov r1, r5 + bl FUN_022033EC + mov r0, sl + mov r1, r6 + bl FUN_02206704 +_0220430C: + ldr r0, [sl, #0x4b0] + bl FUN_021EFF2C + cmp r0, #0 + bne _02204288 +_0220431C: + bl FUN_021F025C + ldr r1, [sl, #0x4b4] + sub r0, r0, r1 + cmp r0, #0x7d0 + bls _02204364 + ldr r0, [sl, #0x4b0] + bl FUN_021EFD9C + mvn r0, #0 + str r0, [sl, #0x4b0] + mov r0, #1 + str r0, [sl] + ldr r0, _0220437C ; =0x02211738 + ldr r3, [sl, #0x494] + ldr r2, [r0] + ldr r4, [sl, #0x488] + mov r0, sl + mov r1, #3 + blx r4 +_02204364: + mov r0, #0 + ldr ip, _02204374 ; =0x000005F4 + add sp, sp, ip + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_02204374: .word 0x000005F4 +_02204378: .word 0x000005DB +_0220437C: .word 0x02211738 + + arm_func_start FUN_02204380 +FUN_02204380: ; 0x02204380 + stmdb sp!, {r0, r1, r2, r3} + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} + sub sp, sp, #0x10 + ldr r3, [sp, #0x3c] + mov r7, #0xfd + mov sb, r3, lsr #0x18 + mov r8, r3, lsr #8 + mov sl, r3, lsl #8 + and sb, sb, #0xff + and r8, r8, #0xff00 + mov r6, #0xfc + mov r5, #0x1e + mov r4, #0x66 + mov lr, #0x6a + mov ip, #0xb2 + strb r7, [sp, #4] + mov r3, r3, lsl #0x18 + orr r8, sb, r8 + and sl, sl, #0xff0000 + and sb, r3, #0xff000000 + orr r3, sl, r8 + orr r3, sb, r3 + str r3, [sp, #0x3c] + add r8, sp, #0x3c + strb r6, [sp, #5] + strb r5, [sp, #6] + strb r4, [sp, #7] + strb lr, [sp, #8] + strb ip, [sp, #9] + ldrb r5, [r8] + ldrb r4, [r8, #1] + add r7, sp, #0xa + add r3, sp, #4 + strb r5, [r7] + strb r4, [r7, #1] + ldrb r6, [r8, #2] + ldrb r5, [r8, #3] + mov r4, #0xa + strb r6, [r7, #2] + strb r5, [r7, #3] + str r4, [sp] + bl FUN_02204438 + add sp, sp, #0x10 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, lr} + add sp, sp, #0x10 + bx lr + + arm_func_start FUN_02204438 +FUN_02204438: ; 0x02204438 + stmdb sp!, {r0, r1, r2, r3} + stmdb sp!, {r4, r5, r6, lr} + sub sp, sp, #0x18 + mov r5, r0 + ldr r1, [r5] + mov r4, r3 + cmp r1, #1 + bne _0220446C + mov r1, #0 + mov r2, r1 + mov r3, #2 + str r1, [sp] + bl FUN_02205AB4 +_0220446C: + ldr r0, [r5] + cmp r0, #1 + addeq sp, sp, #0x18 + moveq r0, #3 + ldmeqia sp!, {r4, r5, r6, lr} + addeq sp, sp, #0x10 + bxeq lr + ldr r0, [sp, #0x38] + add r1, sp, #4 + add r0, r0, #9 + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + mov r2, r0, asr #8 + mov r0, r0, lsl #8 + and r2, r2, #0xff + and r0, r0, #0xff00 + orr r0, r2, r0 + strh r0, [sp, #4] + ldrb r3, [r1] + ldrb r2, [r1, #1] + add r1, sp, #6 + mov r0, #2 + strb r3, [r1] + strb r2, [r1, #1] + add lr, sp, #0x2c + strb r0, [sp, #8] + ldrb r3, [lr] + ldrb r0, [lr, #1] + add r6, sp, #9 + add r2, sp, #0x30 + strb r3, [r6] + strb r0, [r6, #1] + ldrb ip, [lr, #2] + ldrb r3, [lr, #3] + add lr, sp, #0xd + mov r0, r5 + strb ip, [r6, #2] + strb r3, [r6, #3] + ldrb ip, [r2] + ldrb r3, [r2, #1] + mov r2, #9 + strb ip, [lr] + strb r3, [lr, #1] + bl FUN_02205D28 + cmp r0, #0 + addne sp, sp, #0x18 + ldmneia sp!, {r4, r5, r6, lr} + addne sp, sp, #0x10 + bxne lr + ldr r0, [r5, #0x4b0] + ldr r2, [sp, #0x38] + mov r1, r4 + mov r3, #0 + bl FUN_021EFC24 + cmp r0, #0 + movlt r0, #3 + movge r0, #0 + add sp, sp, #0x18 + ldmia sp!, {r4, r5, r6, lr} + add sp, sp, #0x10 + bx lr + + arm_func_start FUN_02204560 +FUN_02204560: ; 0x02204560 + stmdb sp!, {r4, r5, r6, lr} + mov r6, r0 + ldr r0, [r6, #0x4b0] + bl FUN_021EFF2C + cmp r0, #0 + moveq r0, #0 + ldmeqia sp!, {r4, r5, r6, pc} + ldr r4, [r6, #0x80] + ldr r1, [r6, #0x7c] + ldr r0, [r6, #0x4b0] + add r1, r1, r4 + rsb r2, r4, #0x1000 + mov r3, #0 + bl FUN_021EFC78 + add r1, r0, #1 + cmp r1, #1 + bhi _022045B4 + mov r0, r6 + bl FUN_02206184 + mov r0, #3 + ldmia sp!, {r4, r5, r6, pc} +_022045B4: + ldr r1, [r6, #0x80] + mov r5, #0 + add r0, r1, r0 + str r0, [r6, #0x80] + ldr r0, [r6] + cmp r0, #2 + beq _022045DC + ldr r0, [r6, #0x5c8] + cmp r0, #0 + ble _022045F8 +_022045DC: + ldr r1, [r6, #0x7c] + ldr r2, [r6, #0x80] + ldr r0, _02204648 ; =0x000004BC + add r1, r1, r4 + add r0, r6, r0 + sub r2, r2, r4 + bl FUN_0220279C +_022045F8: + ldr r0, [r6] + cmp r0, #3 + bne _02204610 + mov r0, r6 + bl FUN_02204DF0 + mov r5, r0 +_02204610: + cmp r5, #0 + movne r0, r5 + ldmneia sp!, {r4, r5, r6, pc} + ldr r0, [r6] + cmp r0, #2 + bne _02204640 + ldr r0, [r6, #0x80] + cmp r0, #0 + ble _02204640 + mov r0, r6 + bl FUN_0220464C + ldmia sp!, {r4, r5, r6, pc} +_02204640: + mov r0, #0 + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +_02204648: .word 0x000004BC + + arm_func_start FUN_0220464C +FUN_0220464C: ; 0x0220464C + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #4 + mov sb, r0 + ldr r0, [sb, #0x80] + mov r8, #0 + cmp r0, #3 + blt _02204800 + ldr sl, _0220481C ; =0x0220F818 + ldr fp, _02204820 ; =0x0220F830 + add r7, sp, #0 + mov r6, r8 + mov r4, r8 + add r5, sb, #0x80 +_02204680: + ldr r0, [sb, #0x7c] + ldrb r1, [r0] + ldrb r0, [r0, #1] + strb r1, [r7] + strb r0, [r7, #1] + ldrh r0, [sp] + mov r1, r0, asr #8 + mov r0, r0, lsl #8 + and r1, r1, #0xff + and r0, r0, #0xff00 + orr r0, r1, r0 + strh r0, [sp] + ldrh r2, [sp] + cmp r2, #0x1000 + movhi r8, #4 + bhi _02204800 + ldr r0, [sb, #0x80] + cmp r0, r2 + addlt sp, sp, #4 + movlt r0, #0 + ldmltia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + ldr r1, [sb, #0x7c] + ldrsb r0, [r1, #2] + cmp r0, #6 + addls pc, pc, r0, lsl #2 + b _02204798 +_022046E8: ; jump table + b _02204798 ; case 0 + b _02204704 ; case 1 + b _0220471C ; case 2 + b _02204734 ; case 3 + b _02204754 ; case 4 + b _0220476C ; case 5 + b _02204784 ; case 6 +_02204704: + mov r0, sb + add r1, r1, #3 + sub r2, r2, #3 + bl FUN_02204D10 + mov r8, r0 + b _02204798 +_0220471C: + mov r0, sb + add r1, r1, #3 + sub r2, r2, #3 + bl FUN_02204828 + mov r8, r0 + b _02204798 +_02204734: + ldr r0, [sb, #0x4b0] + mov r3, r6 + bl FUN_021EFC24 + cmp r0, #0 + bgt _02204798 + add sp, sp, #4 + mov r0, #3 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +_02204754: + mov r0, sb + add r1, r1, #3 + sub r2, r2, #3 + bl FUN_02204920 + mov r8, r0 + b _02204798 +_0220476C: + mov r0, sb + add r1, r1, #3 + sub r2, r2, #3 + bl FUN_022049B0 + mov r8, r0 + b _02204798 +_02204784: + mov r0, sb + add r1, r1, #3 + sub r2, r2, #3 + bl FUN_02204B40 + mov r8, r0 +_02204798: + ldrh r0, [sp] + ldr r1, [r5] + sub r0, r1, r0 + str r0, [r5] + ldr r0, [sb, #0x80] + cmp r0, #0 + bge _022047C8 + ldr r3, _02204824 ; =0x000005B4 + mov r0, sl + mov r1, fp + mov r2, r4 + bl __msl_assertion_failed +_022047C8: + ldr r2, [sb, #0x80] + cmp r2, #0 + beq _022047EC + ldr r0, [sb, #0x7c] + cmp r0, #0 + beq _022047EC + ldrh r1, [sp] + add r1, r0, r1 + bl memmove +_022047EC: + cmp r8, #0 + bne _02204800 + ldr r0, [sb, #0x80] + cmp r0, #3 + bge _02204680 +_02204800: + cmp r8, #0 + beq _02204810 + mov r0, sb + bl FUN_02206184 +_02204810: + mov r0, r8 + add sp, sp, #4 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_0220481C: .word 0x0220F818 +_02204820: .word 0x0220F830 +_02204824: .word 0x000005B4 + + arm_func_start FUN_02204828 +FUN_02204828: ; 0x02204828 + stmdb sp!, {r4, r5, r6, r7, r8, lr} + sub sp, sp, #0x10 + mov r6, r2 + cmp r6, #5 + mov r8, r0 + mov r7, r1 + addlt sp, sp, #0x10 + movlt r0, #4 + ldmltia sp!, {r4, r5, r6, r7, r8, pc} + add r4, sp, #4 + add r3, sp, #8 + str r4, [sp] + bl FUN_02205650 + ldrh r2, [sp, #4] + ldr r1, [sp, #8] + mov r0, r8 + bl FUN_02206628 + mov r4, r0 + mvn r0, #0 + cmp r4, r0 + bne _022048A8 + ldrh r2, [sp, #4] + ldr r1, [sp, #8] + mov r0, r8 + bl FUN_022033F4 + mov r5, r0 + bl FUN_022033AC + cmp r0, #0 + beq _022048B8 + add sp, sp, #0x10 + mov r0, #5 + ldmia sp!, {r4, r5, r6, r7, r8, pc} +_022048A8: + mov r0, r8 + mov r1, r4 + bl FUN_02206570 + mov r5, r0 +_022048B8: + mov ip, #0 + mov r0, r8 + mov r1, r5 + mov r2, r7 + mov r3, r6 + str ip, [sp] + bl FUN_02205378 + cmp r0, #0 + addlt sp, sp, #0x10 + movlt r0, #4 + ldmltia sp!, {r4, r5, r6, r7, r8, pc} + mvn r0, #0 + cmp r4, r0 + bne _022048FC + mov r0, r8 + mov r1, r5 + bl FUN_02206704 +_022048FC: + ldr r3, [r8, #0x494] + ldr r4, [r8, #0x488] + mov r0, r8 + mov r2, r5 + mov r1, #1 + blx r4 + mov r0, #0 + add sp, sp, #0x10 + ldmia sp!, {r4, r5, r6, r7, r8, pc} + + arm_func_start FUN_02204920 +FUN_02204920: ; 0x02204920 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #0xc + cmp r2, #6 + mov r4, r0 + addlt sp, sp, #0xc + movlt r0, #4 + ldmltia sp!, {r4, r5, pc} + ldrb ip, [r1] + ldrb r2, [r1, #1] + add r5, sp, #4 + add r3, r1, #4 + strb ip, [r5] + strb r2, [r5, #1] + ldrb lr, [r1, #2] + ldrb r2, [r1, #3] + add ip, sp, #0 + strb lr, [r5, #2] + strb r2, [r5, #3] + ldrb r2, [r1, #4] + ldrb r1, [r3, #1] + strb r2, [ip] + strb r1, [ip, #1] + ldrh r2, [sp] + ldr r1, [sp, #4] + bl FUN_02206628 + mov r1, r0 + mvn r0, #0 + cmp r1, r0 + addeq sp, sp, #0xc + moveq r0, #0 + ldmeqia sp!, {r4, r5, pc} + mov r0, r4 + bl FUN_0220659C + mov r0, #0 + add sp, sp, #0xc + ldmia sp!, {r4, r5, pc} + + arm_func_start FUN_022049B0 +FUN_022049B0: ; 0x022049B0 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x54 + mov r8, r2 + cmp r8, #0xb + mov sl, r0 + mov sb, r1 + addlt sp, sp, #0x54 + movlt r0, #4 + ldmltia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + ldrb r3, [sb] + ldrb r2, [sb, #1] + add r5, sp, #0x10 + add r1, sb, #4 + strb r3, [r5] + strb r2, [r5, #1] + ldrb r4, [sb, #2] + ldrb r2, [sb, #3] + add r3, sp, #8 + strb r4, [r5, #2] + strb r2, [r5, #3] + ldrb r2, [sb, #4] + ldrb r1, [r1, #1] + strb r2, [r3] + strb r1, [r3, #1] + ldrh r2, [sp, #8] + ldr r1, [sp, #0x10] + bl FUN_02206628 + mov r1, r0 + mvn r0, #0 + cmp r1, r0 + addeq sp, sp, #0x54 + moveq r0, #0 + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + mov r0, sl + bl FUN_02206570 + add r3, sb, #6 + ldrb r2, [sb, #6] + ldrb r1, [r3, #1] + add r4, sp, #0xc + mov fp, r0 + strb r2, [r4] + strb r1, [r4, #1] + ldrb r1, [r3, #2] + ldrb r0, [r3, #3] + sub r8, r8, #0xb + mov r6, #0 + strb r1, [r4, #2] + strb r0, [r4, #3] + ldr r0, [sp, #0xc] + add r5, sp, #0x14 + mov r2, r0, lsr #0x18 + mov r1, r0, lsr #8 + mov r3, r0, lsl #8 + and r2, r2, #0xff + and r1, r1, #0xff00 + mov r0, r0, lsl #0x18 + orr r1, r2, r1 + and r3, r3, #0xff0000 + and r2, r0, #0xff000000 + orr r0, r3, r1 + orr r0, r2, r0 + str r0, [sp, #0xc] + ldrb r7, [sb, #0xa] + add sb, sb, #0xb + mvn r4, #0 + b _02204AEC +_02204AB8: + cmp r8, #1 + blt _02204AFC + mov r0, sb + mov r1, r8 + bl FUN_02206378 + cmp r0, r4 + addeq sp, sp, #0x54 + moveq r0, #4 + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + str sb, [r5, r6, lsl #2] + add sb, sb, r0 + sub r8, r8, r0 + add r6, r6, #1 +_02204AEC: + cmp r6, r7 + bge _02204AFC + cmp r6, #0x10 + blt _02204AB8 +_02204AFC: + ldr r4, [sl, #0x48c] + cmp r4, #0 + addeq sp, sp, #0x54 + moveq r0, #0 + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + add r1, sp, #0x14 + str r1, [sp] + ldr r2, [sl, #0x494] + mov r0, sl + str r2, [sp, #4] + ldr r2, [sp, #0xc] + mov r1, fp + mov r3, r6 + blx r4 + mov r0, #0 + add sp, sp, #0x54 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + + arm_func_start FUN_02204B40 +FUN_02204B40: ; 0x02204B40 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x24 + mov r7, r2 + cmp r7, #2 + mov sb, r0 + mov r8, r1 + addlt sp, sp, #0x24 + movlt r0, #4 + ldmltia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + ldrb r0, [r8, #1] + sub r7, r7, #2 + mov r6, #0 + str r0, [sp, #0x10] + ldrb r0, [r8] + add r8, r8, #2 + str r0, [sp, #0xc] + ldr r0, [sp, #0x10] + cmp r0, #0 + ble _02204CD0 + add r5, sp, #0x18 + add r4, sp, #0x1c +_02204B94: + mov r0, r8 + mov r1, r7 + mov fp, r8 + bl FUN_02206378 + mvn r1, #0 + cmp r0, r1 + addeq sp, sp, #0x24 + moveq r0, #4 + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + sub r2, r7, r0 + cmp r2, #0xb + add lr, r8, r0 + addlt sp, sp, #0x24 + movlt r0, #4 + ldmltia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + ldrb r1, [lr] + ldrb r0, [lr, #1] + sub r7, r2, #0xa + add r3, lr, #6 + strb r1, [r5] + strb r0, [r5, #1] + ldrb r2, [lr, #2] + ldrb r1, [lr, #3] + add r0, lr, #4 + add r8, lr, #0xa + strb r2, [r5, #2] + strb r1, [r5, #3] + ldrb sl, [r0, #1] + ldrb ip, [lr, #4] + add r2, sp, #0x14 + mov r0, r8 + strb ip, [r2] + strb sl, [r2, #1] + ldrb sl, [lr, #6] + ldrb r2, [r3, #1] + mov r1, r7 + strb sl, [r4] + strb r2, [r4, #1] + ldrb sl, [r3, #2] + ldrb r2, [r3, #3] + strb sl, [r4, #2] + strb r2, [r4, #3] + ldr ip, [sp, #0x1c] + mov r3, ip, lsl #0x18 + mov r2, ip, lsr #0x18 + and sl, r3, #0xff000000 + mov r3, ip, lsl #8 + mov ip, ip, lsr #8 + and r2, r2, #0xff + and ip, ip, #0xff00 + and r3, r3, #0xff0000 + orr r2, r2, ip + orr r2, r3, r2 + orr r2, sl, r2 + str r2, [sp, #0x1c] + bl FUN_02206378 + mov sl, r0 + mvn r0, #0 + cmp sl, r0 + addeq sp, sp, #0x24 + moveq r0, #4 + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + ldr r1, [sp, #0x1c] + mov r0, sb + str r1, [sp] + str r8, [sp, #4] + ldr r2, [sb, #0x494] + mov r1, fp + str r2, [sp, #8] + ldrh r3, [sp, #0x14] + ldr r2, [sp, #0x18] + ldr fp, [sb, #0x490] + blx fp + ldr r0, [sp, #0x10] + add r6, r6, #1 + cmp r6, r0 + add r8, r8, sl + sub r7, r7, sl + blt _02204B94 +_02204CD0: + ldr r0, [sp, #0xc] + cmp r0, #0 + beq _02204D04 + mov r1, #0 + str r1, [sp] + str r1, [sp, #4] + ldr r2, [sb, #0x494] + mov r0, sb + str r2, [sp, #8] + ldr r4, [sb, #0x490] + mov r2, r1 + mov r3, r1 + blx r4 +_02204D04: + mov r0, #0 + add sp, sp, #0x24 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + + arm_func_start FUN_02204D10 +FUN_02204D10: ; 0x02204D10 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0xc + mov sl, r0 + ldr r3, [sl, #8] + mov sb, r1 + mov r8, r2 + cmp r3, #0 + sub r8, r8, #1 + ldrb r6, [sb], #1 + beq _02204D3C + bl FUN_022059F8 +_02204D3C: + mov r1, r6 + mov r0, #8 + mov r2, #0 + bl FUN_021EF0E4 + str r0, [sl, #8] + ldr r0, [sl, #8] + cmp r0, #0 + addeq sp, sp, #0xc + moveq r0, #5 + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + cmp r6, #0 + mov r7, #0 + ble _02204DE4 + add fp, sp, #0 + mvn r4, #0 +_02204D78: + cmp r8, #2 + addlt sp, sp, #0xc + movlt r0, #4 + ldmltia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + add r0, sb, #1 + sub r1, r8, #1 + bl FUN_02206378 + mov r5, r0 + cmp r5, r4 + addeq sp, sp, #0xc + moveq r0, #4 + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + ldrb r2, [sb] + mov r0, sl + add r1, sb, #1 + str r2, [sp, #4] + bl FUN_02206428 + str r0, [sp] + ldr r0, [sl, #8] + mov r1, fp + bl FUN_021EEFA8 + add r0, r5, #1 + add r7, r7, #1 + cmp r7, r6 + add sb, sb, r0 + sub r8, r8, r0 + blt _02204D78 +_02204DE4: + mov r0, #0 + add sp, sp, #0xc + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + + arm_func_start FUN_02204DF0 +FUN_02204DF0: ; 0x02204DF0 + stmdb sp!, {r4, r5, r6, r7, r8, sb, lr} + sub sp, sp, #0xc + mov r8, r0 + ldr r1, [r8, #0x5c8] + ldr r7, [r8, #0x7c] + ldr r6, [r8, #0x80] + cmp r1, #4 + addls pc, pc, r1, lsl #2 + b _022051D0 +_02204E14: ; jump table + b _02204E28 ; case 0 + b _02204E88 ; case 1 + b _02204F98 ; case 2 + b _0220508C ; case 3 + b _02205140 ; case 4 +_02204E28: + cmp r6, #1 + blt _022051D0 + ldrb r1, [r7] + eor r1, r1, #0xec + add r3, r1, #2 + cmp r6, r3 + blt _022051D0 + sub r1, r3, #1 + ldrb r1, [r7, r1] + eor r2, r1, #0xea + add r4, r3, r2 + cmp r6, r4 + blt _022051D0 + add r1, r7, r3 + bl FUN_022058B0 + ldr r0, _02205224 ; =0x000004BC + add r7, r7, r4 + sub r6, r6, r4 + mov r3, #1 + mov r1, r7 + mov r2, r6 + add r0, r8, r0 + str r3, [r8, #0x5c8] + bl FUN_0220279C +_02204E88: + cmp r6, #6 + blt _022051D0 + ldrb r1, [r7] + ldrb r0, [r7, #1] + add r5, r8, #0x4a0 + ldr r2, _02205228 ; =0x02211738 + strb r1, [r8, #0x4a0] + strb r0, [r5, #1] + ldrb r4, [r7, #2] + ldrb r3, [r7, #3] + mov r0, r8 + mov r1, #6 + strb r4, [r5, #2] + strb r3, [r5, #3] + ldr r2, [r2] + ldr r3, [r8, #0x494] + ldr r4, [r8, #0x488] + blx r4 + add r1, r7, #4 + ldr r0, _0220522C ; =0x000004A8 + ldrb r2, [r7, #4] + ldrb r1, [r1, #1] + add r3, r8, r0 + add r0, r8, #0x400 + strb r2, [r8, #0x4a8] + strb r1, [r3, #1] + ldrh r1, [r0, #0xa8] + ldr r0, _02205230 ; =0x0000FFFF + cmp r1, r0 + bne _02204F4C + add r0, r7, #6 + sub r1, r6, #6 + bl FUN_02206378 + mvn r1, #0 + cmp r0, r1 + beq _022051D0 + mov r0, r8 + add r1, r7, #6 + bl FUN_02205240 + ldr r0, _02205228 ; =0x02211738 + ldr r3, [r8, #0x494] + ldr r2, [r0] + ldr r4, [r8, #0x488] + mov r0, r8 + mov r1, #5 + blx r4 + ldr r0, [r8, #0x7c] + cmp r0, #0 + beq _022051D0 +_02204F4C: + ldr r0, [r8, #0x5c4] + add r7, r7, #6 + sub r6, r6, #6 + ands r0, r0, #2 + bne _02204F74 + add r0, r8, #0x400 + ldrh r1, [r0, #0xa8] + ldr r0, _02205230 ; =0x0000FFFF + cmp r1, r0 + bne _02204F88 +_02204F74: + mov r0, #5 + str r0, [r8, #0x5c8] + mov r0, #2 + str r0, [r8] + b _022051D0 +_02204F88: + mov r0, #2 + str r0, [r8, #0x5c8] + mvn r0, #0 + str r0, [r8, #0x484] +_02204F98: + ldr r1, [r8, #0x484] + mvn r0, #0 + cmp r1, r0 + bne _02204FE8 + cmp r6, #1 + blt _022051D0 + ldrb r1, [r7] + mov r0, #8 + mov r2, #0 + str r1, [r8, #0x484] + ldr r1, [r8, #0x484] + bl FUN_021EF0E4 + str r0, [r8, #8] + ldr r0, [r8, #8] + cmp r0, #0 + addeq sp, sp, #0xc + moveq r0, #5 + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, pc} + add r7, r7, #1 + sub r6, r6, #1 +_02204FE8: + ldr r0, [r8, #8] + bl FUN_021EF06C + ldr r1, [r8, #0x484] + cmp r1, r0 + ble _02205068 + add r5, sp, #0 + mvn r4, #0 +_02205004: + cmp r6, #2 + blt _02205068 + add r0, r7, #1 + sub r1, r6, #1 + bl FUN_02206378 + mov sb, r0 + cmp sb, r4 + beq _02205068 + ldrb r2, [r7] + mov r0, r8 + add r1, r7, #1 + str r2, [sp, #4] + bl FUN_02206428 + str r0, [sp] + ldr r0, [r8, #8] + mov r1, r5 + bl FUN_021EEFA8 + add r1, sb, #1 + ldr r0, [r8, #8] + add r7, r7, r1 + sub r6, r6, r1 + bl FUN_021EF06C + ldr r1, [r8, #0x484] + cmp r1, r0 + bgt _02205004 +_02205068: + ldr r0, [r8, #8] + bl FUN_021EF06C + ldr r1, [r8, #0x484] + cmp r1, r0 + bgt _022051D0 + mov r0, #3 + str r0, [r8, #0x5c8] + mvn r0, #0 + str r0, [r8, #0x484] +_0220508C: + ldr r1, [r8, #0x484] + mvn r0, #0 + cmp r1, r0 + bne _022050BC + cmp r6, #1 + blt _022051D0 + ldrb r1, [r7] + mov r0, #0 + add r7, r7, #1 + str r1, [r8, #0x484] + str r0, [r8, #0x480] + sub r6, r6, #1 +_022050BC: + ldr r1, [r8, #0x484] + ldr r0, [r8, #0x480] + cmp r1, r0 + ble _02205128 + add r4, r8, #0x480 + mvn sb, #0 +_022050D4: + mov r0, r7 + mov r1, r6 + bl FUN_02206378 + mov r5, r0 + cmp r5, sb + beq _02205128 + mov r0, r8 + mov r1, r7 + bl FUN_02206428 + ldr r1, [r4] + ldr r2, [r8, #0x480] + add r1, r1, #1 + str r1, [r4] + add r1, r8, r2, lsl #2 + str r0, [r1, #0x84] + ldr r1, [r8, #0x484] + ldr r0, [r8, #0x480] + add r7, r7, r5 + cmp r1, r0 + sub r6, r6, r5 + bgt _022050D4 +_02205128: + ldr r1, [r8, #0x484] + ldr r0, [r8, #0x480] + cmp r1, r0 + bgt _022051D0 + mov r0, #4 + str r0, [r8, #0x5c8] +_02205140: + cmp r6, #5 + blt _022051D0 + mov sb, #0 + mvn r4, #0 + mvn r5, #1 +_02205154: + mov r0, r8 + mov r1, r7 + mov r2, r6 + bl FUN_02205248 + cmp r0, r5 + addeq sp, sp, #0xc + moveq r0, #5 + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, pc} + cmp r0, r4 + bne _022051B4 + mov r0, #5 + str r0, [r8, #0x5c8] + mov r0, #2 + str r0, [r8] + ldr r0, _02205228 ; =0x02211738 + ldr r3, [r8, #0x494] + ldr r2, [r0] + ldr r4, [r8, #0x488] + mov r0, r8 + mov r1, #3 + sub r6, r6, #5 + add r7, r7, #5 + blx r4 + b _022051D0 +_022051B4: + ldr r1, [r8, #0x7c] + add r7, r7, r0 + cmp r1, #0 + sub r6, r6, r0 + moveq r0, sb + cmp r0, #0 + bne _02205154 +_022051D0: + cmp r6, #0 + bge _022051EC + ldr r0, _02205234 ; =0x0220F840 + ldr r1, _02205238 ; =0x0220F830 + ldr r3, _0220523C ; =0x000004AF + mov r2, #0 + bl __msl_assertion_failed +_022051EC: + ldr r0, [r8, #0x7c] + cmp r0, #0 + addeq sp, sp, #0xc + moveq r0, #0 + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, pc} + cmp r6, #0 + beq _02205214 + mov r1, r7 + mov r2, r6 + bl memmove +_02205214: + str r6, [r8, #0x80] + mov r0, #0 + add sp, sp, #0xc + ldmia sp!, {r4, r5, r6, r7, r8, sb, pc} + .align 2, 0 +_02205224: .word 0x000004BC +_02205228: .word 0x02211738 +_0220522C: .word 0x000004A8 +_02205230: .word 0x0000FFFF +_02205234: .word 0x0220F840 +_02205238: .word 0x0220F830 +_0220523C: .word 0x000004AF + + arm_func_start FUN_02205240 +FUN_02205240: ; 0x02205240 + str r1, [r0, #0x4ac] + bx lr + + arm_func_start FUN_02205248 +FUN_02205248: ; 0x02205248 + stmdb sp!, {r4, r5, r6, r7, r8, lr} + sub sp, sp, #0x10 + mov r4, r2 + cmp r4, #1 + mov r6, r0 + mov r5, r1 + addlt sp, sp, #0x10 + movlt r0, #0 + ldmltia sp!, {r4, r5, r6, r7, r8, pc} + ldrb r7, [r5] + mov r0, r7 + bl FUN_02205884 + mov r8, r0 + cmp r4, r8 + addlt sp, sp, #0x10 + movlt r0, #0 + ldmltia sp!, {r4, r5, r6, r7, r8, pc} + ands r0, r7, #0x40 + beq _022052B4 + mov r0, r6 + add r1, r5, r8 + sub r2, r4, r8 + bl FUN_022056DC + cmp r0, #0 + addeq sp, sp, #0x10 + moveq r0, #0 + ldmeqia sp!, {r4, r5, r6, r7, r8, pc} +_022052B4: + ands r0, r7, #0x80 + beq _022052D8 + add r0, r5, r8 + sub r1, r4, r8 + bl FUN_022057EC + cmp r0, #0 + addeq sp, sp, #0x10 + moveq r0, #0 + ldmeqia sp!, {r4, r5, r6, r7, r8, pc} +_022052D8: + ldr r1, _02205374 ; =0x0220F84C + add r0, r5, #1 + mov r2, #4 + bl memcmp + cmp r0, #0 + addeq sp, sp, #0x10 + mvneq r0, #0 + ldmeqia sp!, {r4, r5, r6, r7, r8, pc} + add r7, sp, #4 + add r3, sp, #8 + mov r0, r6 + mov r1, r5 + mov r2, r4 + str r7, [sp] + bl FUN_02205650 + ldrh r2, [sp, #4] + ldr r1, [sp, #8] + mov r0, r6 + bl FUN_022033F4 + mov r7, r0 + bl FUN_022033AC + cmp r0, #0 + addne sp, sp, #0x10 + mvnne r0, #1 + ldmneia sp!, {r4, r5, r6, r7, r8, pc} + mov ip, #1 + mov r0, r6 + mov r1, r7 + mov r2, r5 + mov r3, r4 + str ip, [sp] + bl FUN_02205378 + mov r4, r0 + mov r0, r6 + mov r1, r7 + bl FUN_02206704 + mov r0, r4 + add sp, sp, #0x10 + ldmia sp!, {r4, r5, r6, r7, r8, pc} + .align 2, 0 +_02205374: .word 0x0220F84C + + arm_func_start FUN_02205378 +FUN_02205378: ; 0x02205378 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x14 + mov r8, r2 + ldrb r2, [r8] + mov sb, r1 + mov sl, r0 + mov r7, r3 + str r2, [sp, #4] + mov r0, sb + mov r1, r2 + str r7, [sp] + ldr r6, [sp, #0x38] + bl FUN_022033EC + ldr r0, [sp, #4] + add r8, r8, #5 + ands r0, r0, #0x10 + sub r7, r7, #5 + ldr r0, [sp, #4] + addne r8, r8, #2 + subne r7, r7, #2 + ands r0, r0, #2 + moveq r0, #0 + streq r0, [sp, #0xc] + beq _02205404 + ldrb r1, [r8] + ldrb r0, [r8, #1] + add r2, sp, #0xc + sub r7, r7, #4 + strb r1, [r2] + strb r0, [r2, #1] + ldrb r1, [r8, #2] + ldrb r0, [r8, #3] + add r8, r8, #4 + strb r1, [r2, #2] + strb r0, [r2, #3] +_02205404: + ldr r0, [sp, #4] + ands r0, r0, #0x20 + addeq r0, sl, #0x400 + ldreqh r0, [r0, #0xa8] + streqh r0, [sp, #0xa] + beq _02205438 + ldrb r1, [r8] + ldrb r0, [r8, #1] + add r2, sp, #0xa + add r8, r8, #2 + strb r1, [r2] + strb r0, [r2, #1] + sub r7, r7, #2 +_02205438: + ldrh r2, [sp, #0xa] + ldr r1, [sp, #0xc] + mov r0, sb + bl FUN_022033E0 + ldr r0, [sp, #4] + ands r0, r0, #8 + beq _0220548C + ldrb r2, [r8] + ldrb r1, [r8, #1] + add r3, sp, #0xc + mov r0, sb + strb r2, [r3] + strb r1, [r3, #1] + ldrb r2, [r8, #2] + ldrb r1, [r8, #3] + add r8, r8, #4 + sub r7, r7, #4 + strb r2, [r3, #2] + strb r1, [r3, #3] + ldr r1, [sp, #0xc] + bl FUN_022033D8 +_0220548C: + ldr r0, [sp, #4] + ands r0, r0, #0x40 + beq _022055C4 + ldr r0, [sl, #8] + bl FUN_021EF06C + mov r5, r0 + cmp r5, #0 + mov r4, #0 + ble _022055AC + mov fp, #0xff +_022054B4: + ldr r0, [sl, #8] + mov r1, r4 + bl FUN_021EEFFC + mov r1, r0 + ldr r0, [r1, #4] + cmp r0, #0 + beq _0220554C + cmp r0, #1 + beq _022054E4 + cmp r0, #2 + beq _02205500 + b _022055A0 +_022054E4: + ldrb r2, [r8] + ldr r1, [r1] + mov r0, sb + bl FUN_02203A48 + add r8, r8, #1 + sub r7, r7, #1 + b _022055A0 +_02205500: + ldrb ip, [r8] + ldrb r3, [r8, #1] + add r2, sp, #8 + mov r0, sb + strb ip, [r2] + strb r3, [r2, #1] + ldrh r3, [sp, #8] + ldr r1, [r1] + mov r2, r3, asr #8 + mov r3, r3, lsl #8 + and r2, r2, #0xff + and r3, r3, #0xff00 + orr r2, r2, r3 + mov r2, r2, lsl #0x10 + mov r2, r2, lsr #0x10 + bl FUN_02203A48 + add r8, r8, #2 + sub r7, r7, #2 + b _022055A0 +_0220554C: + cmp r6, #0 + ldrneb r0, [r8], #1 + subne r7, r7, #1 + moveq r0, fp + cmp r0, #0xff + bne _0220558C + ldr r1, [r1] + mov r0, sb + mov r2, r8 + bl FUN_02203A80 + mov r0, r8 + bl strlen + add r0, r0, #1 + add r8, r8, r0 + sub r7, r7, r0 + b _022055A0 +_0220558C: + add r0, sl, r0, lsl #2 + ldr r1, [r1] + ldr r2, [r0, #0x84] + mov r0, sb + bl FUN_02203A80 +_022055A0: + add r4, r4, #1 + cmp r4, r5 + blt _022054B4 +_022055AC: + mov r0, sb + bl FUN_022033C8 + orr r1, r0, #1 + mov r0, sb + and r1, r1, #0xff + bl FUN_022033D0 +_022055C4: + ldr r0, [sp, #4] + ands r0, r0, #0x80 + beq _02205640 + b _02205610 +_022055D4: + mov r0, r8 + mov r4, r8 + bl strlen + add r3, r0, #1 + add r8, r8, r3 + mov r0, sb + mov r1, r4 + mov r2, r8 + sub r7, r7, r3 + bl FUN_02203A80 + mov r0, r8 + bl strlen + add r0, r0, #1 + add r8, r8, r0 + sub r7, r7, r0 +_02205610: + ldrsb r0, [r8] + cmp r0, #0 + beq _02205624 + cmp r7, #0 + bgt _022055D4 +_02205624: + mov r0, sb + sub r7, r7, #1 + bl FUN_022033C8 + orr r1, r0, #2 + mov r0, sb + and r1, r1, #0xff + bl FUN_022033D0 +_02205640: + ldr r0, [sp] + sub r0, r0, r7 + add sp, sp, #0x14 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + + arm_func_start FUN_02205650 +FUN_02205650: ; 0x02205650 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #4 + cmp r2, #5 + addlt sp, sp, #4 + ldmltia sp!, {r4, r5, pc} + add r5, r1, #1 + ldrb ip, [r1] + ldrb r4, [r1, #1] + ldrb lr, [r5, #1] + ands ip, ip, #0x10 + strb r4, [r3] + strb lr, [r3, #1] + ldrb lr, [r5, #2] + ldrb ip, [r5, #3] + strb lr, [r3, #2] + strb ip, [r3, #3] + beq _022056C4 + sub r0, r2, #5 + cmp r0, #2 + addlt sp, sp, #4 + ldmltia sp!, {r4, r5, pc} + add r0, r1, #5 + ldrb r1, [r1, #5] + ldr r2, [sp, #0x10] + ldrb r0, [r0, #1] + add sp, sp, #4 + strb r1, [r2] + strb r0, [r2, #1] + ldmia sp!, {r4, r5, pc} +_022056C4: + add r0, r0, #0x400 + ldrh r1, [r0, #0xa8] + ldr r0, [sp, #0x10] + strh r1, [r0] + add sp, sp, #4 + ldmia sp!, {r4, r5, pc} + + arm_func_start FUN_022056DC +FUN_022056DC: ; 0x022056DC + stmdb sp!, {r4, r5, r6, r7, r8, sb, lr} + sub sp, sp, #4 + mov r8, r0 + ldr r0, [r8, #8] + mov r7, r1 + mov r6, r2 + bl FUN_021EF06C + mov r5, r0 + cmp r5, #0 + mov r4, #0 + ble _022057D4 + mvn sb, #0 +_0220570C: + ldr r0, [r8, #8] + mov r1, r4 + bl FUN_021EEFFC + ldr r0, [r0, #4] + cmp r0, #0 + beq _02205750 + cmp r0, #1 + beq _02205738 + cmp r0, #2 + beq _02205744 + b _02205798 +_02205738: + add r7, r7, #1 + sub r6, r6, #1 + b _022057B8 +_02205744: + add r7, r7, #2 + sub r6, r6, #2 + b _022057B8 +_02205750: + cmp r6, #1 + addlt sp, sp, #4 + movlt r0, #0 + ldmltia sp!, {r4, r5, r6, r7, r8, sb, pc} + ldrb r0, [r7], #1 + sub r6, r6, #1 + cmp r0, #0xff + bne _022057B8 + mov r0, r7 + mov r1, r6 + bl FUN_02206378 + cmp r0, sb + addeq sp, sp, #4 + moveq r0, #0 + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, pc} + add r7, r7, r0 + sub r6, r6, r0 + b _022057B8 +_02205798: + ldr r0, _022057E0 ; =0x0220F854 + ldr r1, _022057E4 ; =0x0220F830 + ldr r3, _022057E8 ; =0x00000317 + mov r2, #0 + bl __msl_assertion_failed + add sp, sp, #4 + mov r0, #0 + ldmia sp!, {r4, r5, r6, r7, r8, sb, pc} +_022057B8: + cmp r6, #0 + addlt sp, sp, #4 + movlt r0, #0 + ldmltia sp!, {r4, r5, r6, r7, r8, sb, pc} + add r4, r4, #1 + cmp r4, r5 + blt _0220570C +_022057D4: + mov r0, #1 + add sp, sp, #4 + ldmia sp!, {r4, r5, r6, r7, r8, sb, pc} + .align 2, 0 +_022057E0: .word 0x0220F854 +_022057E4: .word 0x0220F830 +_022057E8: .word 0x00000317 + + arm_func_start FUN_022057EC +FUN_022057EC: ; 0x022057EC + stmdb sp!, {r4, r5, lr} + sub sp, sp, #4 + mov r5, r0 + mov r4, r1 + b _02205848 +_02205800: + mov r0, r5 + mov r1, r4 + bl FUN_02206378 + cmp r0, #0 + addlt sp, sp, #4 + movlt r0, #0 + ldmltia sp!, {r4, r5, pc} + sub r4, r4, r0 + add r5, r5, r0 + mov r0, r5 + mov r1, r4 + bl FUN_02206378 + cmp r0, #0 + addlt sp, sp, #4 + movlt r0, #0 + ldmltia sp!, {r4, r5, pc} + add r5, r5, r0 + sub r4, r4, r0 +_02205848: + cmp r4, #0 + ble _0220585C + ldrsb r0, [r5] + cmp r0, #0 + bne _02205800 +_0220585C: + cmp r4, #0 + addeq sp, sp, #4 + moveq r0, #0 + ldmeqia sp!, {r4, r5, pc} + ldrsb r0, [r5] + cmp r0, #0 + moveq r0, #1 + movne r0, #0 + add sp, sp, #4 + ldmia sp!, {r4, r5, pc} + + arm_func_start FUN_02205884 +FUN_02205884: ; 0x02205884 + mov r2, #5 + ands r1, r0, #2 + addne r2, r2, #4 + ands r1, r0, #8 + addne r2, r2, #4 + ands r1, r0, #0x10 + addne r2, r2, #2 + ands r0, r0, #0x20 + addne r2, r2, #2 + mov r0, r2 + bx lr + + arm_func_start FUN_022058B0 +FUN_022058B0: ; 0x022058B0 + stmdb sp!, {r4, r5, r6, r7, r8, sb, lr} + sub sp, sp, #4 + mov sb, r0 + mov r7, r2 + add r0, sb, #0x54 + mov r8, r1 + bl strlen + mov r5, r0 + cmp r7, #0 + add r4, sb, #0x54 + mov r6, #0 + ble _0220593C +_022058E0: + mov r0, r6 + mov r1, r5 + bl _s32_div_f + ldrsb r1, [r4, r1] + mov r2, r6, lsr #0x1f + rsb r0, r2, r6, lsl #29 + mul r3, r6, r1 + mov r1, r3, lsr #0x1f + add r2, r2, r0, ror #29 + rsb r0, r1, r3, lsl #29 + add r2, sb, r2 + add r3, r1, r0, ror #29 + ldrsb r0, [r8, r6] + ldrsb r1, [r2, #0x74] + add r2, sb, r3 + add r6, r6, #1 + eor r0, r1, r0 + ldrsb r1, [r2, #0x74] + mov r0, r0, lsl #0x18 + cmp r6, r7 + eor r0, r1, r0, asr #24 + strb r0, [r2, #0x74] + blt _022058E0 +_0220593C: + ldr r0, _02205958 ; =0x000004BC + add r1, sb, #0x74 + add r0, sb, r0 + mov r2, #8 + bl FUN_022028B0 + add sp, sp, #4 + ldmia sp!, {r4, r5, r6, r7, r8, sb, pc} + .align 2, 0 +_02205958: .word 0x000004BC + + arm_func_start FUN_0220595C +FUN_0220595C: ; 0x0220595C + stmdb sp!, {r4, lr} + mov r4, r0 + bl FUN_02205994 + mov r0, r4 + bl FUN_022064BC + mov r0, r4 + bl FUN_02203AE4 + ldr r0, [r4, #4] + cmp r0, #0 + beq _02205988 + bl FUN_021EF074 +_02205988: + mov r0, #0 + str r0, [r4, #4] + ldmia sp!, {r4, pc} + + arm_func_start FUN_02205994 +FUN_02205994: ; 0x02205994 + stmdb sp!, {r4, lr} + mov r4, r0 + ldr r0, [r4, #0x7c] + cmp r0, #0 + beq _022059AC + bl FUN_021DD82C +_022059AC: + mov r0, #0 + str r0, [r4, #0x7c] + str r0, [r4, #0x80] + ldr r0, [r4, #0x4b0] + mvn r1, #0 + cmp r0, r1 + beq _022059CC + bl FUN_021EFD9C +_022059CC: + mvn r1, #0 + mov r0, r4 + str r1, [r4, #0x4b0] + mov r1, #1 + str r1, [r4] + bl FUN_022059F8 + mvn r1, #0 + mov r0, r4 + str r1, [r4, #0x484] + bl FUN_02205A68 + ldmia sp!, {r4, pc} + + arm_func_start FUN_022059F8 +FUN_022059F8: ; 0x022059F8 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #4 + mov r5, r0 + ldr r0, [r5, #8] + cmp r0, #0 + addeq sp, sp, #4 + ldmeqia sp!, {r4, r5, pc} + mov r4, #0 + bl FUN_021EF06C + cmp r0, #0 + ble _02205A50 +_02205A24: + ldr r0, [r5, #8] + mov r1, r4 + bl FUN_021EEFFC + ldr r1, [r0] + mov r0, r5 + bl FUN_022063A8 + ldr r0, [r5, #8] + add r4, r4, #1 + bl FUN_021EF06C + cmp r4, r0 + blt _02205A24 +_02205A50: + ldr r0, [r5, #8] + bl FUN_021EF074 + mov r0, #0 + str r0, [r5, #8] + add sp, sp, #4 + ldmia sp!, {r4, r5, pc} + + arm_func_start FUN_02205A68 +FUN_02205A68: ; 0x02205A68 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #4 + mov r5, r0 + ldr r0, [r5, #0x480] + mov r4, #0 + cmp r0, #0 + ble _02205AA4 +_02205A84: + add r0, r5, r4, lsl #2 + ldr r1, [r0, #0x84] + mov r0, r5 + bl FUN_022063A8 + ldr r0, [r5, #0x480] + add r4, r4, #1 + cmp r4, r0 + blt _02205A84 +_02205AA4: + mov r0, #0 + str r0, [r5, #0x480] + add sp, sp, #4 + ldmia sp!, {r4, r5, pc} + + arm_func_start FUN_02205AB4 +FUN_02205AB4: ; 0x02205AB4 + stmdb sp!, {r4, r5, r6, r7, lr} + sub sp, sp, #0x30c + mov r5, r0 + ldr r0, [r5] + mov r7, r1 + mov r6, r2 + mov r4, r3 + cmp r0, #1 + beq _02205AEC + ldr r0, _02205D18 ; =0x0220F858 + ldr r1, _02205D1C ; =0x0220F830 + ldr r3, _02205D20 ; =0x0000020A + mov r2, #0 + bl __msl_assertion_failed +_02205AEC: + cmp r7, #0 + ldreq r7, _02205D24 ; =0x0220F878 + cmp r6, #0 + ldreq r6, _02205D24 ; =0x0220F878 + mov r0, r7 + bl strlen + cmp r0, #0x100 + addhi sp, sp, #0x30c + movhi r0, #6 + ldmhiia sp!, {r4, r5, r6, r7, pc} + mov r0, r6 + bl strlen + cmp r0, #0x100 + addhi sp, sp, #0x30c + movhi r0, #6 + ldmhiia sp!, {r4, r5, r6, r7, pc} + mov r0, r5 + bl FUN_02205FF0 + cmp r0, #0 + addne sp, sp, #0x30c + ldmneia sp!, {r4, r5, r6, r7, pc} + mov r0, r5 + str r4, [r5, #0x5c4] + bl FUN_02205DCC + add r3, sp, #0xe + mov ip, #2 + add r0, sp, #8 + add r2, sp, #4 + mov r1, #0 + str ip, [sp, #4] + str r3, [sp, #8] + bl FUN_02205F74 + add r0, sp, #8 + add r2, sp, #4 + mov r1, #1 + bl FUN_02205F74 + add r0, sp, #8 + mov r1, #3 + add r2, sp, #4 + bl FUN_02205F74 + ldr r1, [r5, #0x4b8] + add r0, sp, #8 + add r2, sp, #4 + bl FUN_02205F18 + add r0, sp, #8 + add r1, r5, #0xc + add r2, sp, #4 + bl FUN_02205F98 + add r0, sp, #8 + add r1, r5, #0x30 + add r2, sp, #4 + bl FUN_02205F98 + add r0, sp, #8 + add r1, r5, #0x74 + mov r2, #8 + add r3, sp, #4 + bl FUN_02205EE4 + mov r1, r6 + add r0, sp, #8 + add r2, sp, #4 + bl FUN_02205F98 + mov r1, r7 + add r0, sp, #8 + add r2, sp, #4 + bl FUN_02205F98 + mov r1, r4, lsl #0x18 + and ip, r1, #0xff000000 + mov r1, r4, lsl #8 + and r3, r1, #0xff0000 + mov r1, r4, lsr #0x18 + and r2, r1, #0xff + mov r1, r4, lsr #8 + and r1, r1, #0xff00 + orr r1, r2, r1 + orr r1, r3, r1 + add r0, sp, #8 + orr r1, ip, r1 + add r2, sp, #4 + bl FUN_02205F18 + ldr r0, [r5, #0x5c4] + ands r0, r0, #8 + beq _02205C44 + ldr r1, [r5, #0x4a4] + add r0, sp, #8 + add r2, sp, #4 + bl FUN_02205F18 +_02205C44: + ldr r0, [r5, #0x5c4] + ands r0, r0, #0x80 + beq _02205C60 + ldr r1, [sp, #0x320] + add r0, sp, #8 + add r2, sp, #4 + bl FUN_02205F18 +_02205C60: + ldr r0, [sp, #4] + add r1, sp, #0 + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + mov r2, r0, asr #8 + mov r0, r0, lsl #8 + and r2, r2, #0xff + and r0, r0, #0xff00 + orr r0, r2, r0 + strh r0, [sp] + ldrb r2, [r1] + ldrb r0, [r1, #1] + add r1, sp, #0xc + mov r3, #0 + strb r2, [r1] + strb r0, [r1, #1] + ldr r0, [r5, #0x4b0] + ldr r2, [sp, #4] + bl FUN_021EFC24 + cmp r0, #0 + bgt _02205CC8 + mov r0, r5 + bl FUN_02205994 + add sp, sp, #0x30c + mov r0, #3 + ldmia sp!, {r4, r5, r6, r7, pc} +_02205CC8: + mov r0, #3 + str r0, [r5] + mov r0, #0 + str r0, [r5, #0x5c8] + ldr r0, [r5, #0x7c] + cmp r0, #0 + bne _02205D0C + mov r0, #0x1000 + bl FUN_021DD860 + str r0, [r5, #0x7c] + ldr r0, [r5, #0x7c] + cmp r0, #0 + addeq sp, sp, #0x30c + moveq r0, #5 + ldmeqia sp!, {r4, r5, r6, r7, pc} + mov r0, #0 + str r0, [r5, #0x80] +_02205D0C: + mov r0, #0 + add sp, sp, #0x30c + ldmia sp!, {r4, r5, r6, r7, pc} + .align 2, 0 +_02205D18: .word 0x0220F858 +_02205D1C: .word 0x0220F830 +_02205D20: .word 0x0000020A +_02205D24: .word 0x0220F878 + + arm_func_start FUN_02205D28 +FUN_02205D28: ; 0x02205D28 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #4 + mov sl, r0 + mov sb, r1 + mov r8, r2 + mov r6, #1 + mov r5, #0 + mov r4, #2 +_02205D48: + ldr r0, [sl, #0x4b0] + mov r1, sb + mov r2, r8 + mov r3, r5 + sub r6, r6, #1 + bl FUN_021EFC24 + mov r7, r0 + cmp r7, #0 + bgt _02205DB8 + cmp r6, #0 + blt _02205DB8 + mov r0, sl + bl FUN_02205994 + mov r0, sl + mov r1, r5 + mov r2, r5 + mov r3, r4 + str r5, [sp] + bl FUN_02205AB4 + movs fp, r0 + beq _02205DB0 + mov r0, sl + bl FUN_02206184 + add sp, sp, #4 + mov r0, fp + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +_02205DB0: + cmp r6, #0 + bge _02205D48 +_02205DB8: + cmp r7, #0 + movle r0, #3 + movgt r0, #0 + add sp, sp, #4 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + + arm_func_start FUN_02205DCC +FUN_02205DCC: ; 0x02205DCC + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #4 + mov sl, r0 + bl rand + ldr r1, _02205EDC ; =0x2C0B02C1 + mov r8, #0 + smull r3, r4, r1, r0 + mov r2, r0, lsr #0x1f + mov r4, r4, asr #4 + ldr r1, _02205EE0 ; =0x0000005D + add r4, r2, r4 + smull r2, r3, r1, r4 + sub r4, r0, r2 + add r0, r4, #0x21 + mov sb, #1 + strb r0, [sl, #0x74] + mov r5, r8 + mov r6, sb + mov fp, r8 + mov r4, sb +_02205E1C: + sub r0, sb, #1 + add r0, sl, r0 + ldrsb r2, [r0, #0x74] + ldrsb r3, [sl, #0x74] + add r7, sl, sb + cmp r2, r3 + eor r2, sb, r2 + movlt r0, r6 + and r2, r2, #1 + movge r0, r5 + cmp r3, #0x4f + movlt r1, r4 + and r3, r3, #1 + eor r2, r8, r2 + movge r1, fp + eor r2, r3, r2 + eor r1, r2, r1 + eor r8, r1, r0 + bl rand + ldr r2, _02205EDC ; =0x2C0B02C1 + cmp r8, #0 + smull r3, r1, r2, r0 + mov r1, r1, asr #4 + mov r2, r0, lsr #0x1f + add r1, r2, r1 + ldr r2, _02205EE0 ; =0x0000005D + smull r1, r3, r2, r1 + sub r1, r0, r1 + add r0, r1, #0x21 + strb r0, [r7, #0x74] + beq _02205EA4 + ldrsb r0, [r7, #0x74] + ands r0, r0, #1 + beq _02205EBC +_02205EA4: + cmp r8, #0 + bne _02205EC8 + ldrsb r0, [r7, #0x74] + and r0, r0, #1 + cmp r0, #1 + bne _02205EC8 +_02205EBC: + ldrsb r0, [r7, #0x74] + add r0, r0, #1 + strb r0, [r7, #0x74] +_02205EC8: + add sb, sb, #1 + cmp sb, #8 + blt _02205E1C + add sp, sp, #4 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_02205EDC: .word 0x2C0B02C1 +_02205EE0: .word 0x0000005D + + arm_func_start FUN_02205EE4 +FUN_02205EE4: ; 0x02205EE4 + stmdb sp!, {r4, r5, r6, lr} + mov r6, r0 + ldr r0, [r6] + mov r4, r3 + mov r5, r2 + bl memcpy + ldr r0, [r4] + add r0, r0, r5 + str r0, [r4] + ldr r0, [r6] + add r0, r0, r5 + str r0, [r6] + ldmia sp!, {r4, r5, r6, pc} + + arm_func_start FUN_02205F18 +FUN_02205F18: ; 0x02205F18 + stmdb sp!, {r0, r1, r2, r3} + stmdb sp!, {lr} + sub sp, sp, #4 + add ip, sp, #0xc + ldrb r3, [ip] + ldrb r1, [ip, #1] + ldr lr, [r0] + strb r3, [lr] + strb r1, [lr, #1] + ldrb r3, [ip, #2] + ldrb r1, [ip, #3] + strb r3, [lr, #2] + strb r1, [lr, #3] + ldr r1, [r2] + add r1, r1, #4 + str r1, [r2] + ldr r1, [r0] + add r1, r1, #4 + str r1, [r0] + add sp, sp, #4 + ldmia sp!, {lr} + add sp, sp, #0x10 + bx lr + + arm_func_start FUN_02205F74 +FUN_02205F74: ; 0x02205F74 + ldr r3, [r0] + strb r1, [r3] + ldr r1, [r2] + add r1, r1, #1 + str r1, [r2] + ldr r1, [r0] + add r1, r1, #1 + str r1, [r0] + bx lr + + arm_func_start FUN_02205F98 +FUN_02205F98: ; 0x02205F98 + stmdb sp!, {r4, r5, r6, r7, lr} + sub sp, sp, #4 + movs r7, r1 + ldreq r7, _02205FEC ; =0x0220F878 + mov r4, r0 + mov r0, r7 + mov r6, r2 + bl strlen + add r5, r0, #1 + ldr r0, [r4] + mov r1, r7 + mov r2, r5 + bl memcpy + ldr r0, [r6] + add r0, r0, r5 + str r0, [r6] + ldr r0, [r4] + add r0, r0, r5 + str r0, [r4] + add sp, sp, #4 + ldmia sp!, {r4, r5, r6, r7, pc} + .align 2, 0 +_02205FEC: .word 0x0220F878 + + arm_func_start FUN_02205FF0 +FUN_02205FF0: ; 0x02205FF0 + stmdb sp!, {r4, lr} + sub sp, sp, #0x88 + mov r4, r0 + add r0, r4, #0xc + mov r1, #0x14 + bl FUN_02206124 + ldr r1, _02206118 ; =0x0221173C + mov r3, r0 + ldr r1, [r1] + cmp r1, #0 + beq _02206028 + add r0, sp, #8 + bl strcpy + b _02206038 +_02206028: + ldr r1, _0220611C ; =0x0220F87C + add r0, sp, #8 + add r2, r4, #0xc + bl sprintf +_02206038: + ldr r1, _02206120 ; =0x0000EE70 + mov r2, #2 + add r0, sp, #8 + strb r2, [sp, #1] + strh r1, [sp, #2] + bl FUN_021EFB38 + mvn r1, #0 + str r0, [sp, #4] + cmp r0, r1 + bne _022060A4 + add r0, sp, #8 + bl FUN_0209A6EC + cmp r0, #0 + addeq sp, sp, #0x88 + moveq r0, #2 + ldmeqia sp!, {r4, pc} + ldr r0, [r0, #0xc] + add r3, sp, #4 + ldr r2, [r0] + ldrb r1, [r2] + ldrb r0, [r2, #1] + strb r1, [r3] + strb r0, [r3, #1] + ldrb r1, [r2, #2] + ldrb r0, [r2, #3] + strb r1, [r3, #2] + strb r0, [r3, #3] +_022060A4: + ldr r0, [r4, #0x4b0] + mvn r1, #0 + cmp r0, r1 + bne _022060E0 + mov r0, #2 + mov r1, #1 + mov r2, #0 + bl FUN_021EFDB8 + str r0, [r4, #0x4b0] + ldr r0, [r4, #0x4b0] + mvn r1, #0 + cmp r0, r1 + addeq sp, sp, #0x88 + moveq r0, #1 + ldmeqia sp!, {r4, pc} +_022060E0: + add r1, sp, #0 + mov r2, #8 + bl FUN_021EFCE4 + cmp r0, #0 + addeq sp, sp, #0x88 + moveq r0, #0 + ldmeqia sp!, {r4, pc} + ldr r0, [r4, #0x4b0] + bl FUN_021EFD9C + mvn r0, #0 + str r0, [r4, #0x4b0] + mov r0, #3 + add sp, sp, #0x88 + ldmia sp!, {r4, pc} + .align 2, 0 +_02206118: .word 0x0221173C +_0220611C: .word 0x0220F87C +_02206120: .word 0x0000EE70 + + arm_func_start FUN_02206124 +FUN_02206124: ; 0x02206124 + stmdb sp!, {lr} + sub sp, sp, #4 + ldrsb lr, [r0] + mov ip, #0 + cmp lr, #0 + beq _02206168 + ldr r3, _0220617C ; =0x0210420C + ldr r2, _02206180 ; =0x9CCF9319 +_02206144: + cmp lr, #0 + blt _02206158 + cmp lr, #0x80 + bge _02206158 + ldrb lr, [r3, lr] +_02206158: + mla ip, r2, ip, lr + ldrsb lr, [r0, #1]! + cmp lr, #0 + bne _02206144 +_02206168: + mov r0, ip + bl _u32_div_f + mov r0, r1 + add sp, sp, #4 + ldmfd sp!, {pc} + .align 2, 0 +_0220617C: .word 0x0210420C +_02206180: .word 0x9CCF9319 + + arm_func_start FUN_02206184 +FUN_02206184: ; 0x02206184 + stmdb sp!, {r4, r5, r6, r7, lr} + sub sp, sp, #4 + mov r4, r0 + ldr r5, [r4, #0x80] + cmp r5, #0 + ble _02206214 + ldr r0, _02206240 ; =0x0220F804 + ldr r6, [r0] + mov r0, r6 + bl strlen + cmp r5, r0 + bls _02206214 + ldr r0, _02206240 ; =0x0220F804 + ldr r7, [r4, #0x7c] + ldr r5, [r0] + mov r0, r5 + bl strlen + mov r2, r0 + mov r0, r7 + mov r1, r5 + bl strncmp + cmp r0, #0 + bne _02206214 + mov r0, r6 + bl strlen + mov r1, r0 + mov r0, r4 + add r1, r7, r1 + bl FUN_02205240 + ldr r0, _02206244 ; =0x02211738 + ldr r3, [r4, #0x494] + ldr r2, [r0] + ldr ip, [r4, #0x488] + mov r0, r4 + mov r1, #5 + blx ip +_02206214: + ldr r0, _02206244 ; =0x02211738 + ldr r3, [r4, #0x494] + ldr r2, [r0] + ldr ip, [r4, #0x488] + mov r0, r4 + mov r1, #4 + blx ip + mov r0, r4 + bl FUN_02205994 + add sp, sp, #4 + ldmia sp!, {r4, r5, r6, r7, pc} + .align 2, 0 +_02206240: .word 0x0220F804 +_02206244: .word 0x02211738 + + arm_func_start FUN_02206248 +FUN_02206248: ; 0x02206248 + stmdb sp!, {r4, r5, r6, r7, lr} + sub sp, sp, #4 + movs r7, r0 + mov r6, r1 + mov r5, r2 + mov r4, r3 + bne _02206278 + ldr r0, _02206360 ; =0x0220F898 + ldr r1, _02206364 ; =0x0220F830 + mov r2, #0 + mov r3, #0x11c + bl __msl_assertion_failed +_02206278: + ldr r0, [sp, #0x1c] + cmp r0, #0 + bne _02206298 + ldr r0, _02206368 ; =0x02210E5C + ldr r0, [r0] + cmp r0, #1 + addne sp, sp, #4 + ldmneia sp!, {r4, r5, r6, r7, pc} +_02206298: + mov r1, #1 + mov r0, r7 + str r1, [r7] + bl FUN_02206494 + mov r0, r7 + bl FUN_02203B34 + mov r1, r6 + add r0, r7, #0xc + bl strcpy + mov r1, r5 + add r0, r7, #0x30 + bl strcpy + mov r1, r4 + add r0, r7, #0x54 + bl strcpy + ldr r0, [sp, #0x20] + mov r2, #0 + str r0, [r7, #0x488] + cmp r0, #0 + str r2, [r7, #0x48c] + bne _022062FC + ldr r0, _0220636C ; =0x0220F8A8 + ldr r1, _02206364 ; =0x0220F830 + ldr r3, _02206370 ; =0x00000132 + bl __msl_assertion_failed +_022062FC: + ldr r0, [sp, #0x24] + ldr r1, _02206374 ; =0x0220F878 + str r0, [r7, #0x494] + str r1, [r7, #0x498] + mov r3, #0 + str r3, [r7, #0x4a0] + mvn r0, #0 + str r0, [r7, #0x4b0] + str r3, [r7, #0x7c] + str r3, [r7, #0x80] + str r3, [r7, #8] + str r0, [r7, #0x484] + str r3, [r7, #0x480] + ldr r2, [sp, #0x18] + str r3, [r7, #0x4a4] + mov r0, r7 + str r2, [r7, #0x4b8] + bl FUN_02205240 + mov r0, #0 + str r0, [r7, #0x5cc] + bl FUN_021F025C + bl srand + bl FUN_021F024C + add sp, sp, #4 + ldmia sp!, {r4, r5, r6, r7, pc} + .align 2, 0 +_02206360: .word 0x0220F898 +_02206364: .word 0x0220F830 +_02206368: .word 0x02210E5C +_0220636C: .word 0x0220F8A8 +_02206370: .word 0x00000132 +_02206374: .word 0x0220F878 + + arm_func_start FUN_02206378 +FUN_02206378: ; 0x02206378 + cmp r1, #0 + mov r3, #0 + ble _022063A0 +_02206384: + ldrsb r2, [r0, r3] + cmp r2, #0 + addeq r0, r3, #1 + bxeq lr + add r3, r3, #1 + cmp r3, r1 + blt _02206384 +_022063A0: + mvn r0, #0 + bx lr + + arm_func_start FUN_022063A8 +FUN_022063A8: ; 0x022063A8 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #0xc + mov r5, r0 + str r1, [sp] + bl FUN_02203B34 + add r1, sp, #0 + bl FUN_021EF358 + movs r4, r0 + bne _022063E0 + ldr r0, _02206420 ; =0x0220F8BC + ldr r1, _02206424 ; =0x0220F830 + mov r2, #0 + mov r3, #0xf4 + bl __msl_assertion_failed +_022063E0: + cmp r4, #0 + addeq sp, sp, #0xc + ldmeqia sp!, {r4, r5, pc} + ldr r0, [r4, #4] + sub r0, r0, #1 + str r0, [r4, #4] + ldr r0, [r4, #4] + cmp r0, #0 + addne sp, sp, #0xc + ldmneia sp!, {r4, r5, pc} + mov r0, r5 + bl FUN_02203B34 + add r1, sp, #0 + bl FUN_021EF3F4 + add sp, sp, #0xc + ldmia sp!, {r4, r5, pc} + .align 2, 0 +_02206420: .word 0x0220F8BC +_02206424: .word 0x0220F830 + + arm_func_start FUN_02206428 +FUN_02206428: ; 0x02206428 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #0xc + mov r4, r1 + mov r5, r0 + str r4, [sp] + bl FUN_02203B34 + add r1, sp, #0 + bl FUN_021EF358 + cmp r0, #0 + ldrne r1, [r0, #4] + addne sp, sp, #0xc + addne r1, r1, #1 + strne r1, [r0, #4] + ldrne r0, [r0] + ldmneia sp!, {r4, r5, pc} + mov r0, r4 + bl FUN_021F0208 + str r0, [sp] + mov r1, #1 + mov r0, r5 + str r1, [sp, #4] + bl FUN_02203B34 + add r1, sp, #0 + bl FUN_021EF494 + ldr r0, [sp] + add sp, sp, #0xc + ldmia sp!, {r4, r5, pc} + + arm_func_start FUN_02206494 +FUN_02206494: ; 0x02206494 + stmdb sp!, {r4, lr} + mov r4, r0 + mov r0, #4 + mov r1, #0x64 + mov r2, #0 + bl FUN_021EF0E4 + str r0, [r4, #4] + mov r0, #0 + str r0, [r4, #0x5d0] + ldmia sp!, {r4, pc} + + arm_func_start FUN_022064BC +FUN_022064BC: ; 0x022064BC + stmdb sp!, {r4, r5, r6, lr} + mov r6, r0 + ldr r0, [r6, #4] + bl FUN_021EF06C + mov r4, r0 + cmp r4, #0 + mov r5, #0 + ble _02206500 +_022064DC: + ldr r0, [r6, #4] + mov r1, r5 + bl FUN_021EEFFC + ldr r1, [r0] + mov r0, r6 + bl FUN_022065E8 + add r5, r5, #1 + cmp r5, r4 + blt _022064DC +_02206500: + ldr r0, [r6, #4] + bl FUN_021EEB28 + mov r0, r6 + bl FUN_02206514 + ldmia sp!, {r4, r5, r6, pc} + + arm_func_start FUN_02206514 +FUN_02206514: ; 0x02206514 + stmdb sp!, {r4, r5, r6, lr} + sub sp, sp, #8 + mov r6, r0 + ldr r0, [r6, #0x5d0] + cmp r0, #0 + addeq sp, sp, #8 + ldmeqia sp!, {r4, r5, r6, pc} + str r0, [sp] + cmp r0, #0 + beq _02206560 + add r4, sp, #0 +_02206540: + ldr r0, [sp] + bl FUN_02203888 + mov r5, r0 + mov r0, r4 + bl FUN_02203AC0 + str r5, [sp] + cmp r5, #0 + bne _02206540 +_02206560: + mov r0, #0 + str r0, [r6, #0x5d0] + add sp, sp, #8 + ldmia sp!, {r4, r5, r6, pc} + + arm_func_start FUN_02206570 +FUN_02206570: ; 0x02206570 + stmdb sp!, {lr} + sub sp, sp, #4 + ldr r0, [r0, #4] + bl FUN_021EEFFC + ldr r0, [r0] + add sp, sp, #4 + ldmfd sp!, {pc} + ldr ip, _02206598 ; =FUN_021EF06C + ldr r0, [r0, #4] + bx ip + .align 2, 0 +_02206598: .word FUN_021EF06C + + arm_func_start FUN_0220659C +FUN_0220659C: ; 0x0220659C + stmdb sp!, {r4, r5, r6, lr} + mov r6, r0 + ldr r0, [r6, #4] + mov r5, r1 + bl FUN_021EEFFC + ldr r4, [r0] + ldr r3, [r6, #0x494] + ldr ip, [r6, #0x488] + mov r0, r6 + mov r2, r4 + mov r1, #2 + blx ip + ldr r0, [r6, #4] + mov r1, r5 + bl FUN_021EED84 + mov r0, r6 + mov r1, r4 + bl FUN_022065E8 + ldmia sp!, {r4, r5, r6, pc} + + arm_func_start FUN_022065E8 +FUN_022065E8: ; 0x022065E8 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #4 + mov r5, r0 + mov r4, r1 + ldr r1, [r5, #0x5d0] + cmp r1, #0 + bne _02206614 + mov r0, r4 + mov r1, #0 + bl FUN_02203890 + b _0220661C +_02206614: + mov r0, r4 + bl FUN_02203890 +_0220661C: + str r4, [r5, #0x5d0] + add sp, sp, #4 + ldmia sp!, {r4, r5, pc} + + arm_func_start FUN_02206628 +FUN_02206628: ; 0x02206628 + stmdb sp!, {r4, r5, r6, r7, r8, sb, lr} + sub sp, sp, #4 + mov sb, r0 + ldr r0, [sb, #4] + mov r8, r1 + mov r7, r2 + bl FUN_021EF06C + mov r6, r0 + cmp r6, #0 + mov r4, #0 + ble _02206698 +_02206654: + ldr r0, [sb, #4] + mov r1, r4 + bl FUN_021EEFFC + ldr r5, [r0] + mov r0, r5 + bl FUN_02203908 + cmp r8, r0 + bne _0220668C + mov r0, r5 + bl FUN_022038DC + cmp r7, r0 + addeq sp, sp, #4 + moveq r0, r4 + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, pc} +_0220668C: + add r4, r4, #1 + cmp r4, r6 + blt _02206654 +_02206698: + mvn r0, #0 + add sp, sp, #4 + ldmia sp!, {r4, r5, r6, r7, r8, sb, pc} + + arm_func_start FUN_022066A4 +FUN_022066A4: ; 0x022066A4 + stmdb sp!, {r4, r5, r6, r7, lr} + sub sp, sp, #4 + mov r7, r0 + ldr r0, [r7, #4] + mov r6, r1 + bl FUN_021EF06C + mov r5, r0 + cmp r5, #0 + mov r4, #0 + ble _022066F8 +_022066CC: + ldr r0, [r7, #4] + mov r1, r4 + bl FUN_021EEFFC + ldr r0, [r0] + cmp r6, r0 + addeq sp, sp, #4 + moveq r0, r4 + ldmeqia sp!, {r4, r5, r6, r7, pc} + add r4, r4, #1 + cmp r4, r5 + blt _022066CC +_022066F8: + mvn r0, #0 + add sp, sp, #4 + ldmia sp!, {r4, r5, r6, r7, pc} + + arm_func_start FUN_02206704 +FUN_02206704: ; 0x02206704 + stmdb sp!, {r0, r1, r2, r3} + stmdb sp!, {r4, lr} + mov r4, r0 + ldr r0, [r4, #4] + add r1, sp, #0xc + bl FUN_021EEFA8 + ldr r2, [sp, #0xc] + ldr r3, [r4, #0x494] + ldr ip, [r4, #0x488] + mov r0, r4 + mov r1, #0 + blx ip + ldmia sp!, {r4, lr} + add sp, sp, #0x10 + bx lr + + arm_func_start FUN_02206740 +FUN_02206740: ; 0x02206740 + cmp r3, #3 + addls pc, pc, r3, lsl #2 + b _0220677C +_0220674C: ; jump table + b _0220675C ; case 0 + b _02206764 ; case 1 + b _0220676C ; case 2 + b _02206774 ; case 3 +_0220675C: + ldr r3, _022067A0 ; =FUN_02206978 + b _02206780 +_02206764: + ldr r3, _022067A4 ; =FUN_02206898 + b _02206780 +_0220676C: + ldr r3, _022067A8 ; =FUN_02206828 + b _02206780 +_02206774: + ldr r3, _022067AC ; =FUN_022067B8 + b _02206780 +_0220677C: + ldr r3, _022067AC ; =FUN_022067B8 +_02206780: + str r2, [r0, #0x498] + str r1, [r0, #0x49c] + ldr r2, _022067B0 ; =0x02211740 + ldr ip, _022067B4 ; =FUN_021EED08 + str r0, [r2] + mov r1, r3 + ldr r0, [r0, #4] + bx ip + .align 2, 0 +_022067A0: .word FUN_02206978 +_022067A4: .word FUN_02206898 +_022067A8: .word FUN_02206828 +_022067AC: .word FUN_022067B8 +_022067B0: .word 0x02211740 +_022067B4: .word FUN_021EED08 + + arm_func_start FUN_022067B8 +FUN_022067B8: ; 0x022067B8 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #4 + ldr r2, _02206820 ; =0x02211740 + mov r5, r1 + ldr r1, [r2] + ldr r0, [r0] + ldr r1, [r1, #0x498] + ldr r2, _02206824 ; =0x0220F878 + bl FUN_022039E0 + ldr r1, _02206820 ; =0x02211740 + mov r4, r0 + ldr r1, [r1] + ldr r0, [r5] + ldr r1, [r1, #0x498] + ldr r2, _02206824 ; =0x0220F878 + bl FUN_022039E0 + mov r1, r0 + mov r0, r4 + bl strnicmp + ldr r1, _02206820 ; =0x02211740 + ldr r1, [r1] + ldr r1, [r1, #0x49c] + cmp r1, #0 + rsbeq r0, r0, #0 + add sp, sp, #4 + ldmia sp!, {r4, r5, pc} + .align 2, 0 +_02206820: .word 0x02211740 +_02206824: .word 0x0220F878 + + arm_func_start FUN_02206828 +FUN_02206828: ; 0x02206828 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #4 + ldr r2, _02206890 ; =0x02211740 + mov r5, r1 + ldr r1, [r2] + ldr r0, [r0] + ldr r1, [r1, #0x498] + ldr r2, _02206894 ; =0x0220F878 + bl FUN_022039E0 + ldr r1, _02206890 ; =0x02211740 + mov r4, r0 + ldr r1, [r1] + ldr r0, [r5] + ldr r1, [r1, #0x498] + ldr r2, _02206894 ; =0x0220F878 + bl FUN_022039E0 + mov r1, r0 + mov r0, r4 + bl strcmp + ldr r1, _02206890 ; =0x02211740 + ldr r1, [r1] + ldr r1, [r1, #0x49c] + cmp r1, #0 + rsbeq r0, r0, #0 + add sp, sp, #4 + ldmia sp!, {r4, r5, pc} + .align 2, 0 +_02206890: .word 0x02211740 +_02206894: .word 0x0220F878 + + arm_func_start FUN_02206898 +FUN_02206898: ; 0x02206898 + stmdb sp!, {r4, r5, r6, lr} + ldr r3, _02206974 ; =0x02211740 + mov r2, #0 + ldr r3, [r3] + ldr r5, [r1] + ldr r0, [r0] + ldr r1, [r3, #0x498] + mov r3, r2 + bl FUN_02203910 + ldr r3, _02206974 ; =0x02211740 + mov r2, #0 + mov r4, r0 + ldr r0, [r3] + mov r6, r1 + ldr r1, [r0, #0x498] + mov r0, r5 + mov r3, r2 + bl FUN_02203910 + mov r2, r0 + mov r3, r1 + mov r0, r4 + mov r1, r6 + bl _dsub + ldr r2, _02206974 ; =0x02211740 + mov r4, r0 + ldr r0, [r2] + mov r5, r1 + ldr r0, [r0, #0x49c] + cmp r0, #0 + bne _0220692C + mov r0, #0 + mov r1, r0 + mov r2, r4 + mov r3, r5 + bl _dsub + mov r4, r0 + mov r5, r1 +_0220692C: + mov r0, r4 + mov r1, r5 + bl _d2f + mov r1, #0 + bl _fgr + cmp r0, #0 + movne r0, #1 + ldmneia sp!, {r4, r5, r6, pc} + mov r0, r4 + mov r1, r5 + bl _d2f + mov r1, #0 + bl _fls + cmp r0, #0 + movne r0, #1 + moveq r0, #0 + rsb r0, r0, #0 + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +_02206974: .word 0x02211740 + + arm_func_start FUN_02206978 +FUN_02206978: ; 0x02206978 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #4 + ldr r2, _022069D8 ; =0x02211740 + ldr r0, [r0] + ldr r2, [r2] + ldr r5, [r1] + ldr r1, [r2, #0x498] + mov r2, #0 + bl FUN_0220394C + ldr r1, _022069D8 ; =0x02211740 + mov r4, r0 + ldr r1, [r1] + mov r0, r5 + ldr r1, [r1, #0x498] + mov r2, #0 + bl FUN_0220394C + ldr r1, _022069D8 ; =0x02211740 + sub r0, r4, r0 + ldr r1, [r1] + ldr r1, [r1, #0x49c] + cmp r1, #0 + rsbeq r0, r0, #0 + add sp, sp, #4 + ldmia sp!, {r4, r5, pc} + .align 2, 0 +_022069D8: .word 0x02211740 + + arm_func_start FUN_022069DC +FUN_022069DC: ; 0x022069DC + stmdb sp!, {r4, r5, r6, lr} + mov r6, r0 + mov r5, r1 + mov r4, r2 + bl FUN_02208364 + bl FUN_02206B14 + mov r1, r6 + mov r0, #0 + bl FUN_02206A4C + cmp r0, #0 + beq _02206A3C + mov r1, r5 + mov r0, #1 + bl FUN_02206A4C + cmp r0, #0 + beq _02206A3C + mov r1, r4 + mov r0, #2 + bl FUN_02206A4C + cmp r0, #0 + beq _02206A3C + bl FUN_02208350 + mov r0, #1 + ldmia sp!, {r4, r5, r6, pc} +_02206A3C: + bl FUN_02206B14 + bl FUN_02208350 + mov r0, #0 + ldmia sp!, {r4, r5, r6, pc} + + arm_func_start FUN_02206A4C +FUN_02206A4C: ; 0x02206A4C + stmdb sp!, {r4, r5, r6, lr} + mov r6, r1 + ldrsb r1, [r6] + mov r4, r0 + cmp r1, #0 + beq _02206B00 + mov r0, r6 + bl FUN_022083D4 + cmp r0, #0xa + ldrgt r0, _02206B08 ; =0x02211760 + movgt r1, #7 + strgt r1, [r0] + movgt r0, #0 + ldmgtia sp!, {r4, r5, r6, pc} + mov r0, r6 + bl FUN_022083D4 + mov r5, r0 + cmp r5, #0xa + ldrgt r0, _02206B08 ; =0x02211760 + movgt r1, #7 + strgt r1, [r0] + movgt r0, #0 + ldmgtia sp!, {r4, r5, r6, pc} + bl FUN_02206DA4 + ldr r1, _02206B0C ; =0x02211750 + add r0, r0, #1 + ldr r2, [r1] + mov r1, #4 + blx r2 + ldr r1, _02206B10 ; =0x02211778 + str r0, [r1, r4, lsl #2] + ldr r0, [r1, r4, lsl #2] + cmp r0, #0 + ldreq r0, _02206B08 ; =0x02211760 + moveq r1, #1 + streq r1, [r0] + moveq r0, #0 + ldmeqia sp!, {r4, r5, r6, pc} + mov r1, r6 + mov r2, r5 + bl FUN_02206C98 + ldr r1, _02206B10 ; =0x02211778 + mov r2, #0 + ldr r1, [r1, r4, lsl #2] + strb r2, [r1, r0] +_02206B00: + mov r0, #1 + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +_02206B08: .word 0x02211760 +_02206B0C: .word 0x02211750 +_02206B10: .word 0x02211778 + + arm_func_start FUN_02206B14 +FUN_02206B14: ; 0x02206B14 + stmdb sp!, {r4, r5, r6, r7, lr} + sub sp, sp, #4 + mov r7, #0 + ldr r4, _02206B58 ; =0x02211764 + ldr r6, _02206B5C ; =0x02211778 + mov r5, r7 +_02206B2C: + ldr r0, [r6, r7, lsl #2] + cmp r0, #0 + beq _02206B44 + ldr r1, [r4] + blx r1 + str r5, [r6, r7, lsl #2] +_02206B44: + add r7, r7, #1 + cmp r7, #3 + blt _02206B2C + add sp, sp, #4 + ldmia sp!, {r4, r5, r6, r7, pc} + .align 2, 0 +_02206B58: .word 0x02211764 +_02206B5C: .word 0x02211778 + + arm_func_start FUN_02206B60 +FUN_02206B60: ; 0x02206B60 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0xc + mov sl, r0 + mov r8, r2 + add r0, sp, #4 + mov r2, #4 + mov r5, #0 + mov sb, r1 + bl FUN_02206E28 + mov r7, r5 + mov r6, r0 + mov r4, r7 + str r7, [sp] + mov fp, #4 + b _02206C74 +_02206B9C: + ldrb r0, [sp, #4] + strb r4, [sp, #8] + strb r4, [sp, #9] + strb r4, [sp, #0xa] + bl FUN_02206DD0 + movs r7, r0 + bmi _02206C20 + ldrb r0, [sp, #5] + mov r1, r7, lsl #2 + strb r1, [sp, #8] + bl FUN_02206DD0 + movs r7, r0 + bmi _02206C20 + ldrsb r2, [sp, #8] + ldrb r0, [sp, #6] + mov r1, r7, lsl #4 + strb r1, [sp, #9] + orr r1, r2, r7, asr #4 + strb r1, [sp, #8] + bl FUN_02206DD0 + movs r7, r0 + bmi _02206C20 + ldrsb r2, [sp, #9] + ldrb r0, [sp, #7] + mov r1, r7, lsl #6 + strb r1, [sp, #0xa] + orr r1, r2, r7, asr #2 + strb r1, [sp, #9] + bl FUN_02206DD0 + movs r7, r0 + ldrplsb r0, [sp, #0xa] + orrpl r0, r0, r7 + strplb r0, [sp, #0xa] +_02206C20: + sub r1, r6, #1 + ldr r3, [sp] + cmp r1, #0 + ble _02206C48 + add r2, sp, #8 +_02206C34: + ldrsb r0, [r2], #1 + add r3, r3, #1 + cmp r3, r1 + strb r0, [sl], #1 + blt _02206C34 +_02206C48: + sub r0, r6, #1 + sub r8, r8, #4 + cmp r8, #0 + add sb, sb, r6 + add r5, r5, r0 + ble _02206C84 + add r0, sp, #4 + mov r1, sb + mov r2, fp + bl FUN_02206E28 + mov r6, r0 +_02206C74: + cmp r6, #0 + ble _02206C84 + cmp r7, #0 + bge _02206B9C +_02206C84: + mov r1, #0 + mov r0, r5 + strb r1, [sl] + add sp, sp, #0xc + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + + arm_func_start FUN_02206C98 +FUN_02206C98: ; 0x02206C98 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #4 + mov r8, r2 + mov sb, r1 + mov sl, r0 + cmp r8, #3 + movgt r2, #3 + add r0, sp, #0 + mov r1, sb + mov r7, #0 + bl FUN_02206E28 + cmp r0, #0 + ble _02206D8C + ldr r5, _02206DA0 ; =0x0220BCE8 + mov r6, #0 + mov r4, #0x2a + mov fp, #3 +_02206CDC: + ldrb r3, [sp] + cmp r8, #3 + strltb r6, [sp, #2] + mov r1, r3, asr #2 + cmp r8, #2 + strltb r6, [sp, #1] + and r1, r1, #0xff + ldrb ip, [sp, #1] + mov r3, r3, lsl #4 + ldrb r2, [sp, #2] + ldrsb r1, [r5, r1] + orr r3, r3, ip, asr #4 + cmp r0, #1 + strb r1, [sl] + and r1, r3, #0x3f + and r1, r1, #0xff + mov r3, ip, lsl #2 + orr r3, r3, r2, asr #6 + ldrsb r1, [r5, r1] + and r2, r2, #0x3f + and r3, r3, #0x3f + strb r1, [sl, #1] + and r1, r3, #0xff + ldrgtsb r1, [r5, r1] + and r2, r2, #0xff + add sb, sb, r0 + movle r1, r4 + strb r1, [sl, #2] + cmp r0, #2 + ldrgtsb r2, [r5, r2] + add r7, r7, #4 + movle r2, r4 + strb r2, [sl, #3] + add sl, sl, #4 + subs r8, r8, r0 + beq _02206D8C + cmp r8, #3 + movgt r2, fp + movle r2, r8 + add r0, sp, #0 + mov r1, sb + bl FUN_02206E28 + cmp r0, #0 + bgt _02206CDC +_02206D8C: + mov r1, #0 + mov r0, r7 + strb r1, [sl] + add sp, sp, #4 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_02206DA0: .word 0x0220BCE8 + + arm_func_start FUN_02206DA4 +FUN_02206DA4: ; 0x02206DA4 + ldr r1, _02206DBC ; =0x55555556 + add r2, r0, #2 + smull r0, r3, r1, r2 + add r3, r3, r2, lsr #31 + mov r0, r3, lsl #2 + bx lr + .align 2, 0 +_02206DBC: .word 0x55555556 + + arm_func_start FUN_02206DC0 +FUN_02206DC0: ; 0x02206DC0 + mov r1, r0, asr #2 + mov r0, #3 + mul r0, r1, r0 + bx lr + + arm_func_start FUN_02206DD0 +FUN_02206DD0: ; 0x02206DD0 + cmp r0, #0x41 + blo _02206DE4 + cmp r0, #0x5a + subls r0, r0, #0x41 + bxls lr +_02206DE4: + cmp r0, #0x61 + blo _02206DF8 + cmp r0, #0x7a + subls r0, r0, #0x47 + bxls lr +_02206DF8: + cmp r0, #0x30 + blo _02206E0C + cmp r0, #0x39 + addls r0, r0, #4 + bxls lr +_02206E0C: + cmp r0, #0x2e + moveq r0, #0x3e + bxeq lr + cmp r0, #0x2d + moveq r0, #0x3f + mvnne r0, #0 + bx lr + + arm_func_start FUN_02206E28 +FUN_02206E28: ; 0x02206E28 + stmdb sp!, {r4, lr} + mov lr, #0 + mov r4, lr + cmp r2, #0 + ble _02206E64 + mov r3, lr +_02206E40: + ldrsb ip, [r1] + add r4, r4, #1 + cmp ip, #0 + strneb ip, [r0], #1 + addne lr, lr, #1 + addne r1, r1, #1 + streqb r3, [r0], #1 + cmp r4, r2 + blt _02206E40 +_02206E64: + mov r0, lr + ldmia sp!, {r4, pc} + + arm_func_start FUN_02206E6C +FUN_02206E6C: ; 0x02206E6C + ldr r1, _02206E8C ; =0x02211744 + ldr r2, _02206E90 ; =0x02211758 + str r0, [r1] + mov r1, #0 + ldr ip, _02206E94 ; =FUN_02208570 + ldr r0, _02206E98 ; =FUN_02206E9C + str r1, [r2] + bx ip + .align 2, 0 +_02206E8C: .word 0x02211744 +_02206E90: .word 0x02211758 +_02206E94: .word FUN_02208570 +_02206E98: .word FUN_02206E9C + + arm_func_start FUN_02206E9C +FUN_02206E9C: ; 0x02206E9C + stmdb sp!, {lr} + sub sp, sp, #4 + bl FUN_02206B14 + bl FUN_02208378 + bl FUN_0220831C + ldr r0, _02206EEC ; =0x0221174C + ldr r1, _02206EF0 ; =0x02211764 + ldr r0, [r0] + ldr r1, [r1] + blx r1 + ldr r0, _02206EF4 ; =0x02211754 + ldr r1, _02206EF0 ; =0x02211764 + ldr r0, [r0] + ldr r1, [r1] + blx r1 + ldr r0, _02206EF8 ; =0x02211744 + ldr r0, [r0] + blx r0 + add sp, sp, #4 + ldmfd sp!, {pc} + .align 2, 0 +_02206EEC: .word 0x0221174C +_02206EF0: .word 0x02211764 +_02206EF4: .word 0x02211754 +_02206EF8: .word 0x02211744 + + arm_func_start FUN_02206EFC +FUN_02206EFC: ; 0x02206EFC + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #4 + mov r7, r0 + ldr sb, _022070D0 ; =0x02211750 + ldr ip, [sp, #0x30] + ldr r0, _022070D4 ; =0x0221175C + mov r6, r1 + str ip, [r0] + ldr r5, _022070D8 ; =0x02211764 + str r7, [sb] + str r6, [r5] + ldr r4, _022070DC ; =0x02211760 + mov r1, #0 + ldr r8, _022070E0 ; =0x02211778 + ldr lr, _022070E4 ; =0x02211748 + ldr sl, _022070E8 ; =0x0221174C + ldr fp, _022070EC ; =0x02211754 + str r1, [r4] + ldr ip, _022070F0 ; =0x02211768 + mvn sb, #0 + ldr r0, _022070F4 ; =0x02211784 + mov r5, r2 + mov r4, r3 + str r1, [r8] + str r1, [r8, #4] + str r1, [r8, #8] + str r1, [lr] + str sb, [ip] + str r1, [sl] + str r1, [fp] + bl FUN_02208228 + ldr r0, _022070F8 ; =0x022117CC + bl FUN_02207194 + mov r0, r5 + bl FUN_0220710C + mov r1, fp + cmp r0, #0 + str r0, [r1] + beq _02207080 + mov r0, r4 + bl FUN_0220710C + mov r1, sl + cmp r0, #0 + str r0, [r1] + beq _02207080 + ldr r1, [sp, #0x28] + ldr r0, _022070FC ; =0x0221176C + mov r2, #4 + bl FUN_02206C98 + ldr r1, _022070FC ; =0x0221176C + mov r2, #0 + strb r2, [r1, r0] + ldr r1, [sp, #0x2c] + ldr r0, _02207100 ; =0x022117B0 + mov r2, #0x10 + bl FUN_02206C98 + ldr r1, _02207100 ; =0x022117B0 + mov r2, #0 + strb r2, [r1, r0] + bl FUN_02208320 + cmp r0, #0 + beq _02207040 + bl FUN_0220837C + cmp r0, #0 + beq _02207040 + mov r0, r7 + mov r1, r6 + mov r2, #0xa + bl FUN_022085B8 + cmp r0, #0 + beq _0220703C + ldr r0, _02207104 ; =0x02211798 + bl FUN_0220724C + ldr r2, _022070E4 ; =0x02211748 + ldr r1, _02207108 ; =0x02211758 + str r0, [r2] + mov r0, #1 + str r0, [r1] + add sp, sp, #4 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +_0220703C: + bl FUN_02208378 +_02207040: + ldr r0, _022070E8 ; =0x0221174C + ldr r1, _022070D8 ; =0x02211764 + ldr r0, [r0] + ldr r1, [r1] + blx r1 + ldr r0, _022070EC ; =0x02211754 + ldr r1, _022070D8 ; =0x02211764 + ldr r0, [r0] + ldr r1, [r1] + blx r1 + ldr r0, _022070DC ; =0x02211760 + mov r1, #8 + str r1, [r0] + add sp, sp, #4 + mov r0, #0 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +_02207080: + ldr r0, _022070E8 ; =0x0221174C + ldr r0, [r0] + cmp r0, #0 + beq _0220709C + ldr r1, _022070D8 ; =0x02211764 + ldr r1, [r1] + blx r1 +_0220709C: + ldr r0, _022070EC ; =0x02211754 + ldr r0, [r0] + cmp r0, #0 + beq _022070B8 + ldr r1, _022070D8 ; =0x02211764 + ldr r1, [r1] + blx r1 +_022070B8: + ldr r0, _022070DC ; =0x02211760 + mov r1, #1 + str r1, [r0] + mov r0, #0 + add sp, sp, #4 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_022070D0: .word 0x02211750 +_022070D4: .word 0x0221175C +_022070D8: .word 0x02211764 +_022070DC: .word 0x02211760 +_022070E0: .word 0x02211778 +_022070E4: .word 0x02211748 +_022070E8: .word 0x0221174C +_022070EC: .word 0x02211754 +_022070F0: .word 0x02211768 +_022070F4: .word 0x02211784 +_022070F8: .word 0x022117CC +_022070FC: .word 0x0221176C +_02207100: .word 0x022117B0 +_02207104: .word 0x02211798 +_02207108: .word 0x02211758 + + arm_func_start FUN_0220710C +FUN_0220710C: ; 0x0220710C + stmdb sp!, {r4, r5, r6, lr} + mov r6, r0 + bl FUN_022083D4 + ldr r1, _02207154 ; =0x02211750 + mov r4, r0 + ldr r2, [r1] + add r0, r4, #1 + mov r1, #4 + blx r2 + movs r5, r0 + beq _0220714C + mov r1, r6 + mov r2, r4 + bl FUN_0220839C + mov r0, #0 + strb r0, [r5, r4] +_0220714C: + mov r0, r5 + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +_02207154: .word 0x02211750 + + arm_func_start FUN_02207158 +FUN_02207158: ; 0x02207158 + stmdb sp!, {r4, lr} + bl FUN_022082D4 + cmp r0, #0 + bne _02207184 + bl FUN_02208364 + ldr r0, _02207190 ; =0x02211768 + ldr r4, [r0] + bl FUN_02208350 + mov r0, r4 + bl FUN_02209218 + ldmia sp!, {r4, pc} +_02207184: + bl FUN_022082A0 + mov r0, #0 + ldmia sp!, {r4, pc} + .align 2, 0 +_02207190: .word 0x02211768 + + arm_func_start FUN_02207194 +FUN_02207194: ; 0x02207194 + stmdb sp!, {lr} + sub sp, sp, #4 + ldr r2, _022071BC ; =0x0220F9B0 + mov ip, #2 + mov r1, #0x21 + mov r3, #1 + str ip, [sp] + bl OS_SNPrintf + add sp, sp, #4 + ldmfd sp!, {pc} + .align 2, 0 +_022071BC: .word 0x0220F9B0 + + arm_func_start FUN_022071C0 +FUN_022071C0: ; 0x022071C0 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #0x24 + mov r5, r0 + mov r4, r1 + add r0, sp, #0 + mov r1, #0x14 + bl FUN_022083B4 + add r0, sp, #0 + bl FUN_02095EC8 + ldr r1, [sp] + ldr r2, [sp, #4] + mov r0, #0 + cmp r2, r0 + cmpeq r1, r0 + addeq sp, sp, #0x24 + ldmeqia sp!, {r4, r5, pc} + add r0, sp, #0x14 + mov r3, #0xd + bl FUN_0220844C + cmp r0, #0 + addlt sp, sp, #0x24 + movlt r0, #0 + ldmltia sp!, {r4, r5, pc} + add r1, sp, #0x14 + mov r0, r4 + mov r2, #0xd + bl FUN_02206C98 + ldr r1, _02207248 ; =0x027FFE0C + mov r0, r5 + mov r2, #4 + bl FUN_02206C98 + mov r0, #1 + add sp, sp, #0x24 + ldmia sp!, {r4, r5, pc} + .align 2, 0 +_02207248: .word 0x027FFE0C + + arm_func_start FUN_0220724C +FUN_0220724C: ; 0x0220724C + stmdb sp!, {r4, lr} + sub sp, sp, #0x10 + ldr ip, _02207324 ; =0x0220BD2C + add r3, sp, #0 + mov r4, r0 + mov r2, #6 +_02207264: + ldrb r1, [ip], #1 + ldrb r0, [ip], #1 + subs r2, r2, #1 + strb r1, [r3], #1 + strb r0, [r3], #1 + bne _02207264 + ldrb r1, [ip] + ldr r0, _02207328 ; =0x022117F0 + strb r1, [r3] + bl FUN_021DD9DC + cmp r0, #0 + beq _02207318 + ldr r0, _02207328 ; =0x022117F0 + ldr r1, [r0] + cmp r1, #0x63 + bgt _022072B8 + cmp r1, #0xa + blt _022072B8 + add r0, sp, #0 + bl FUN_02208558 + b _022072CC +_022072B8: + cmp r1, #0 + addgt r0, r1, #0x30 + movgt r1, #0x30 + strgtb r1, [sp] + strgtb r0, [sp, #1] +_022072CC: + ldr r0, _02207328 ; =0x022117F0 + ldr r1, [r0, #4] + cmp r1, #0 + blt _022072FC + cmp r1, #0xa + bge _022072FC + add r3, r1, #0x30 + ldr r1, _0220732C ; =0x022117F8 + add r0, sp, #4 + mov r2, #9 + strb r3, [sp, #3] + bl FUN_0220839C +_022072FC: + add r1, sp, #0 + mov r0, r4 + mov r2, #0xd + bl FUN_02206C98 + add sp, sp, #0x10 + mov r0, #1 + ldmia sp!, {r4, pc} +_02207318: + mov r0, #0 + add sp, sp, #0x10 + ldmia sp!, {r4, pc} + .align 2, 0 +_02207324: .word 0x0220BD2C +_02207328: .word 0x022117F0 +_0220732C: .word 0x022117F8 + + arm_func_start FUN_02207330 +FUN_02207330: ; 0x02207330 + ldr ip, _02207338 ; =FUN_0220B55C + bx ip + .align 2, 0 +_02207338: .word FUN_0220B55C + + arm_func_start FUN_0220733C +FUN_0220733C: ; 0x0220733C + stmdb sp!, {r4, r5, r6, r7, r8, lr} + sub sp, sp, #0x10 + mov r8, r0 + ldr r3, [r8, #0xac] + mov r7, r1 + cmp r2, r3 + ldrlo r0, _022074D8 ; =0x02211760 + movlo r1, #7 + strlo r1, [r0] + addlo sp, sp, #0x10 + movlo r0, #0 + ldmloia sp!, {r4, r5, r6, r7, r8, pc} + bl FUN_022083D4 + mov r5, r0 + cmp r5, #0x20 + ldrgt r0, _022074D8 ; =0x02211760 + movgt r1, #7 + strgt r1, [r0] + addgt sp, sp, #0x10 + movgt r0, #0 + ldmgtia sp!, {r4, r5, r6, r7, r8, pc} + cmp r5, #0 + movle r6, #0 + ble _022073A4 + bl FUN_02206DA4 + mov r6, r0 +_022073A4: + ldr r1, _022074DC ; =0x02211750 + add r0, r6, #1 + ldr r2, [r1] + mov r1, #4 + blx r2 + movs r4, r0 + ldreq r0, _022074D8 ; =0x02211760 + moveq r1, #1 + streq r1, [r0] + addeq sp, sp, #0x10 + moveq r0, #0 + ldmeqia sp!, {r4, r5, r6, r7, r8, pc} + ldr ip, [r8, #0xac] + ldr r2, _022074E0 ; =0x0220BD54 + add r0, sp, #4 + add r1, sp, #8 + mov r3, r7 + str ip, [sp] + bl FUN_0220788C + cmp r0, #0 + bne _02207414 + ldr r1, _022074E4 ; =0x02211764 + mov r0, r4 + ldr r1, [r1] + blx r1 + add sp, sp, #0x10 + mov r0, #0 + ldmia sp!, {r4, r5, r6, r7, r8, pc} +_02207414: + cmp r6, #0 + ble _0220744C + mov r0, r4 + mov r1, r8 + mov r2, r5 + bl FUN_02206C98 + mov r1, #0 + strb r1, [r4, r0] + ldr r0, [sp, #8] + ldr r1, _022074E8 ; =0x0220F9CC + mov r2, r4 + bl FUN_022086F0 + cmp r0, #0 + beq _022074A4 +_0220744C: + ldr r0, [sp, #4] + mov r1, #3 + str r1, [r0, #4] + ldr r0, [sp, #4] + str r4, [r0, #0x10] + ldr r1, [r8, #0xac] + ldr r0, [sp, #4] + str r1, [r0, #0x14] + ldr r0, [sp, #4] + ldr r1, [sp, #8] + bl FUN_0220781C + cmp r0, #0 + addne sp, sp, #0x10 + movne r0, #1 + ldmneia sp!, {r4, r5, r6, r7, r8, pc} + ldr r1, _022074E4 ; =0x02211764 + mov r0, r4 + ldr r1, [r1] + blx r1 + add sp, sp, #0x10 + mov r0, #0 + ldmia sp!, {r4, r5, r6, r7, r8, pc} +_022074A4: + ldr r0, [sp, #4] + ldr r1, [sp, #8] + bl FUN_02207BB4 + ldr r1, _022074E4 ; =0x02211764 + mov r0, r4 + ldr r1, [r1] + blx r1 + ldr r0, _022074D8 ; =0x02211760 + mov r1, #1 + str r1, [r0] + mov r0, #0 + add sp, sp, #0x10 + ldmia sp!, {r4, r5, r6, r7, r8, pc} + .align 2, 0 +_022074D8: .word 0x02211760 +_022074DC: .word 0x02211750 +_022074E0: .word 0x0220BD54 +_022074E4: .word 0x02211764 +_022074E8: .word 0x0220F9CC + + arm_func_start FUN_022074EC +FUN_022074EC: ; 0x022074EC + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} + sub sp, sp, #0x18 + mov r7, r2 + mov r4, r1 + ldr r1, _02207790 ; =0x02211750 + mov r6, r7, lsl #8 + cmp r6, #0x80 + ldr r2, [r1] + movlt r6, #0x80 + mov r8, r0 + mov r0, r6 + mov r1, #4 + blx r2 + movs r5, r0 + ldreq r0, _02207794 ; =0x02211760 + moveq r1, #1 + streq r1, [r0] + addeq sp, sp, #0x18 + moveq r0, #0 + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + add r0, sp, #0xc + mov r1, r4 + bl FUN_02208558 + mov sb, r0 + bl FUN_02206DA4 + ldr r1, _02207790 ; =0x02211750 + add r0, r0, #1 + ldr r2, [r1] + mov r1, #4 + blx r2 + movs r4, r0 + bne _02207594 + ldr r1, _02207798 ; =0x02211764 + mov r0, r5 + ldr r1, [r1] + blx r1 + ldr r0, _02207794 ; =0x02211760 + mov r1, #1 + str r1, [r0] + add sp, sp, #0x18 + mov r0, #0 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} +_02207594: + add r1, sp, #0xc + mov r2, sb + bl FUN_02206C98 + mov r1, #0 + strb r1, [r4, r0] + add r0, sp, #0xc + mov r1, r7 + bl FUN_02208558 + mov sb, r0 + bl FUN_02206DA4 + ldr r1, _02207790 ; =0x02211750 + add r0, r0, #1 + ldr r2, [r1] + mov r1, #4 + blx r2 + movs sl, r0 + bne _02207610 + ldr r1, _02207798 ; =0x02211764 + mov r0, r4 + ldr r1, [r1] + blx r1 + ldr r1, _02207798 ; =0x02211764 + mov r0, r5 + ldr r1, [r1] + blx r1 + ldr r0, _02207794 ; =0x02211760 + mov r1, #1 + str r1, [r0] + add sp, sp, #0x18 + mov r0, #0 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} +_02207610: + add r1, sp, #0xc + mov r2, sb + bl FUN_02206C98 + mov r1, #0 + strb r1, [sl, r0] + ldr r2, _0220779C ; =0x0220BD3C + add r0, sp, #4 + add r1, sp, #8 + mov r3, r5 + str r6, [sp] + bl FUN_0220788C + cmp r0, #0 + bne _02207680 + ldr r1, _02207798 ; =0x02211764 + mov r0, sl + ldr r1, [r1] + blx r1 + ldr r1, _02207798 ; =0x02211764 + mov r0, r4 + ldr r1, [r1] + blx r1 + ldr r1, _02207798 ; =0x02211764 + mov r0, r5 + ldr r1, [r1] + blx r1 + add sp, sp, #0x18 + mov r0, #0 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} +_02207680: + ldr r0, [sp, #8] + ldr r1, _022077A0 ; =0x0220F9D8 + mov r2, r4 + bl FUN_022086F0 + cmp r0, #0 + beq _0220773C + ldr r0, [sp, #8] + ldr r1, _022077A4 ; =0x0220F9E0 + mov r2, sl + bl FUN_022086F0 + cmp r0, #0 + beq _0220773C + ldr r0, [sp, #4] + mov r1, #2 + str r1, [r0, #4] + ldr r0, [sp, #4] + str r8, [r0, #0x10] + ldr r0, [sp, #4] + str r4, [r0, #0x1c] + ldr r0, [sp, #4] + str sl, [r0, #0x20] + ldr r0, [sp, #4] + str r7, [r0, #0x14] + ldr r0, [sp, #4] + str r5, [r0, #0x18] + ldr r0, [sp, #4] + ldr r1, [sp, #8] + bl FUN_0220781C + cmp r0, #0 + addne sp, sp, #0x18 + movne r0, #1 + ldmneia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + ldr r1, _02207798 ; =0x02211764 + mov r0, sl + ldr r1, [r1] + blx r1 + ldr r1, _02207798 ; =0x02211764 + mov r0, r4 + ldr r1, [r1] + blx r1 + ldr r1, _02207798 ; =0x02211764 + mov r0, r5 + ldr r1, [r1] + blx r1 + add sp, sp, #0x18 + mov r0, #0 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} +_0220773C: + ldr r1, _02207798 ; =0x02211764 + mov r0, sl + ldr r1, [r1] + blx r1 + ldr r1, _02207798 ; =0x02211764 + mov r0, r4 + ldr r1, [r1] + blx r1 + ldr r1, _02207798 ; =0x02211764 + mov r0, r5 + ldr r1, [r1] + blx r1 + ldr r0, [sp, #4] + ldr r1, [sp, #8] + bl FUN_02207BB4 + ldr r0, _02207794 ; =0x02211760 + mov r1, #1 + str r1, [r0] + mov r0, #0 + add sp, sp, #0x18 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + .align 2, 0 +_02207790: .word 0x02211750 +_02207794: .word 0x02211760 +_02207798: .word 0x02211764 +_0220779C: .word 0x0220BD3C +_022077A0: .word 0x0220F9D8 +_022077A4: .word 0x0220F9E0 + + arm_func_start FUN_022077A8 +FUN_022077A8: ; 0x022077A8 + stmdb sp!, {r4, lr} + sub sp, sp, #0x10 + ldr r2, _02207814 ; =0x0220BD48 + mov r4, r0 + mov ip, #0x80 + ldr r3, _02207818 ; =0x02211850 + add r0, sp, #4 + add r1, sp, #8 + str ip, [sp] + bl FUN_0220788C + cmp r0, #0 + addeq sp, sp, #0x10 + moveq r0, #0 + ldmeqia sp!, {r4, pc} + ldr r0, [sp, #4] + mov r1, #1 + str r1, [r0, #4] + ldr r0, [sp, #4] + str r4, [r0, #0x10] + ldr r0, [sp, #4] + ldr r1, [sp, #8] + bl FUN_0220781C + cmp r0, #0 + movne r0, #1 + moveq r0, #0 + add sp, sp, #0x10 + ldmia sp!, {r4, pc} + .align 2, 0 +_02207814: .word 0x0220BD48 +_02207818: .word 0x02211850 + + arm_func_start FUN_0220781C +FUN_0220781C: ; 0x0220781C + stmdb sp!, {r4, r5, lr} + sub sp, sp, #4 + mov r4, r1 + mov r5, r0 + bl FUN_02208364 + mov r0, r4 + bl FUN_022092A0 + str r0, [r5] + ldr r1, [r5] + ldr r0, _02207884 ; =0x02211768 + str r1, [r0] + bl FUN_02208350 + ldr r0, [r5] + cmp r0, #0 + addge sp, sp, #4 + movge r0, #1 + ldmgeia sp!, {r4, r5, pc} + mov r0, r5 + mov r1, r4 + bl FUN_02207BB4 + ldr r0, _02207888 ; =0x02211760 + mov r1, #3 + str r1, [r0] + mov r0, #0 + add sp, sp, #4 + ldmia sp!, {r4, r5, pc} + .align 2, 0 +_02207884: .word 0x02211768 +_02207888: .word 0x02211760 + + arm_func_start FUN_0220788C +FUN_0220788C: ; 0x0220788C + stmdb sp!, {r4, r5, r6, r7, r8, lr} + sub sp, sp, #8 + mov r8, r0 + mov r7, r1 + ldr r0, _02207B40 ; =0x0221182C + ldr r1, _02207B44 ; =0x02211838 + mov r6, r2 + mov r4, r3 + bl FUN_022071C0 + cmp r0, #0 + ldreq r0, _02207B48 ; =0x02211760 + moveq r1, #8 + streq r1, [r0] + addeq sp, sp, #8 + moveq r0, #0 + ldmeqia sp!, {r4, r5, r6, r7, r8, pc} + ldr r1, _02207B4C ; =0x02211750 + mov r0, #0x24 + ldr r2, [r1] + mov r1, #4 + blx r2 + movs r5, r0 + ldreq r0, _02207B48 ; =0x02211760 + moveq r1, #1 + streq r1, [r0] + addeq sp, sp, #8 + moveq r0, #0 + ldmeqia sp!, {r4, r5, r6, r7, r8, pc} + ldr r0, _02207B50 ; =0x0221175C + mov r1, #0 + ldr r0, [r0] + str r0, [r5, #8] + str r1, [r5, #0xc] + bl FUN_022082D4 + cmp r0, #0 + bne _02207944 + ldr r1, _02207B54 ; =0x02211764 + mov r0, r5 + ldr r1, [r1] + blx r1 + ldr r0, _02207B48 ; =0x02211760 + mov r1, #2 + str r1, [r0] + add sp, sp, #8 + mov r0, #0 + ldmia sp!, {r4, r5, r6, r7, r8, pc} +_02207944: + ldr r1, _02207B58 ; =FUN_02207BE0 + ldr r0, _02207B5C ; =0x02211754 + str r1, [sp] + str r5, [sp, #4] + ldr r0, [r0] + ldr r3, [sp, #0x20] + mov r2, r4 + mov r1, #1 + bl FUN_02209438 + movs r4, r0 + bne _0220799C + bl FUN_022082A0 + ldr r1, _02207B54 ; =0x02211764 + mov r0, r5 + ldr r1, [r1] + blx r1 + ldr r0, _02207B48 ; =0x02211760 + mov r1, #3 + str r1, [r0] + add sp, sp, #8 + mov r0, #0 + ldmia sp!, {r4, r5, r6, r7, r8, pc} +_0220799C: + ldr r1, _02207B60 ; =0x0220F9C8 + str r5, [r8] + mov r2, #1 + str r4, [r7] + bl FUN_022086D4 + cmp r0, #0 + beq _02207B1C + ldr r1, _02207B64 ; =0x0220F9E4 + ldr r2, _02207B68 ; =0x022117CC + mov r0, r4 + bl FUN_02208764 + cmp r0, #0 + beq _02207B1C + ldr r1, _02207B6C ; =0x0220F9F0 + ldr r2, _02207B70 ; =0x0221176C + mov r0, r4 + bl FUN_022086F0 + cmp r0, #0 + beq _02207B1C + ldr r1, _02207B74 ; =0x0220F9F8 + ldr r2, _02207B40 ; =0x0221182C + mov r0, r4 + bl FUN_022086F0 + cmp r0, #0 + beq _02207B1C + ldr r1, _02207B78 ; =0x0220FA04 + ldr r2, _02207B7C ; =0x022117B0 + mov r0, r4 + bl FUN_022086F0 + cmp r0, #0 + beq _02207B1C + ldr r0, _02207B80 ; =0x0221174C + ldr r1, _02207B84 ; =0x0220FA0C + ldr r2, [r0] + mov r0, r4 + bl FUN_022086F0 + cmp r0, #0 + beq _02207B1C + ldr r1, _02207B88 ; =0x0220FA14 + ldr r2, _02207B44 ; =0x02211838 + mov r0, r4 + bl FUN_022086F0 + cmp r0, #0 + beq _02207B1C + ldr r1, _02207B8C ; =0x0220FA1C + ldr r2, _02207B90 ; =0x02211784 + mov r0, r4 + bl FUN_022086F0 + cmp r0, #0 + beq _02207B1C + ldr r1, _02207B94 ; =0x0220FA24 + mov r0, r4 + mov r2, r6 + bl FUN_022086F0 + cmp r0, #0 + beq _02207B1C + ldr r0, _02207B98 ; =0x02211778 + ldr r2, [r0] + cmp r2, #0 + beq _02207AA0 + ldr r1, _02207B9C ; =0x0220FA2C + mov r0, r4 + bl FUN_022086F0 + cmp r0, #0 + beq _02207B1C +_02207AA0: + ldr r0, _02207B98 ; =0x02211778 + ldr r2, [r0, #4] + cmp r2, #0 + beq _02207AC4 + ldr r1, _02207BA0 ; =0x0220FA34 + mov r0, r4 + bl FUN_022086F0 + cmp r0, #0 + beq _02207B1C +_02207AC4: + ldr r0, _02207B98 ; =0x02211778 + ldr r2, [r0, #8] + cmp r2, #0 + beq _02207AE8 + ldr r1, _02207BA4 ; =0x0220FA3C + mov r0, r4 + bl FUN_022086F0 + cmp r0, #0 + beq _02207B1C +_02207AE8: + ldr r0, _02207BA8 ; =0x02211748 + ldr r0, [r0] + cmp r0, #0 + beq _02207B10 + ldr r1, _02207BAC ; =0x0220FA44 + ldr r2, _02207BB0 ; =0x02211798 + mov r0, r4 + bl FUN_022086F0 + cmp r0, #0 + beq _02207B1C +_02207B10: + add sp, sp, #8 + mov r0, #1 + ldmia sp!, {r4, r5, r6, r7, r8, pc} +_02207B1C: + mov r0, r5 + mov r1, r4 + bl FUN_02207BB4 + ldr r0, _02207B48 ; =0x02211760 + mov r1, #1 + str r1, [r0] + mov r0, #0 + add sp, sp, #8 + ldmia sp!, {r4, r5, r6, r7, r8, pc} + .align 2, 0 +_02207B40: .word 0x0221182C +_02207B44: .word 0x02211838 +_02207B48: .word 0x02211760 +_02207B4C: .word 0x02211750 +_02207B50: .word 0x0221175C +_02207B54: .word 0x02211764 +_02207B58: .word FUN_02207BE0 +_02207B5C: .word 0x02211754 +_02207B60: .word 0x0220F9C8 +_02207B64: .word 0x0220F9E4 +_02207B68: .word 0x022117CC +_02207B6C: .word 0x0220F9F0 +_02207B70: .word 0x0221176C +_02207B74: .word 0x0220F9F8 +_02207B78: .word 0x0220FA04 +_02207B7C: .word 0x022117B0 +_02207B80: .word 0x0221174C +_02207B84: .word 0x0220FA0C +_02207B88: .word 0x0220FA14 +_02207B8C: .word 0x0220FA1C +_02207B90: .word 0x02211784 +_02207B94: .word 0x0220FA24 +_02207B98: .word 0x02211778 +_02207B9C: .word 0x0220FA2C +_02207BA0: .word 0x0220FA34 +_02207BA4: .word 0x0220FA3C +_02207BA8: .word 0x02211748 +_02207BAC: .word 0x0220FA44 +_02207BB0: .word 0x02211798 + + arm_func_start FUN_02207BB4 +FUN_02207BB4: ; 0x02207BB4 + stmdb sp!, {r4, lr} + mov r4, r0 + mov r0, r1 + bl FUN_02209410 + bl FUN_022082A0 + ldr r1, _02207BDC ; =0x02211764 + mov r0, r4 + ldr r1, [r1] + blx r1 + ldmia sp!, {r4, pc} + .align 2, 0 +_02207BDC: .word 0x02211764 + + arm_func_start FUN_02207BE0 +FUN_02207BE0: ; 0x02207BE0 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x1c + mov sl, r2 + str r1, [sp] + ldr r1, [sl, #8] + cmp r0, #0 + str r1, [sp, #4] + ldr r1, [sl, #0xc] + ldr fp, [sl, #4] + str r1, [sp, #8] + mvn r1, #0 + str r1, [sp, #0xc] + beq _02207C28 + cmp r0, #6 + beq _02207E10 + cmp r0, #8 + beq _02207E08 + b _02207E18 +_02207C28: + ldr r1, _02207F04 ; =0x0220FA4C + ldr r0, [sp] + add r2, sp, #0x10 + bl FUN_02209A98 + cmp r0, #3 + movne r4, #3 + bne _02207E1C + ldr r0, [sp, #0x10] + mov r1, #3 + bl FUN_02208564 + ldr r1, _02207F08 ; =0x0000012E + cmp r0, r1 + bne _02207D80 + ldr r0, [sp] + add r1, sp, #0x14 + mov sb, #0 + bl FUN_02209A68 + movs r8, r0 + movmi r4, #3 + bmi _02207E1C + cmp r8, #0 + mov r7, sb + ble _02207D6C + mov r4, r7 + mov r6, #8 + mov r5, #1 +_02207C90: + ldr r1, [sp, #0x14] + mov r3, r7 + add r2, r1, r7 + b _02207CA8 +_02207CA0: + add r2, r2, #1 + add r7, r7, #1 +_02207CA8: + ldrsb r0, [r2] + cmp r0, #0x3d + beq _02207CBC + cmp r7, r8 + blt _02207CA0 +_02207CBC: + sub r0, r7, r3 + cmp r0, #8 + add r7, r7, #1 + bne _02207CE8 + add r0, r1, r3 + ldr r1, _02207F0C ; =0x0220FA5C + mov r2, r6 + bl FUN_022083C8 + cmp r0, #0 + moveq sb, r5 + movne sb, r4 +_02207CE8: + ldr r3, [sp, #0x14] + mov r1, r7 + add r2, r3, r7 + b _02207D00 +_02207CF8: + add r2, r2, #1 + add r7, r7, #1 +_02207D00: + ldrsb r0, [r2] + cmp r0, #0x26 + beq _02207D24 + cmp r0, #0xd + beq _02207D24 + cmp r0, #0 + beq _02207D24 + cmp r7, r8 + blt _02207CF8 +_02207D24: + cmp sb, #0 + sub r2, r7, r1 + add r7, r7, #1 + beq _02207D64 + cmp r2, #4 + bne _02207D6C + add r0, sp, #0x18 + add r1, r3, r1 + bl FUN_02206B60 + mov r1, r0 + add r0, sp, #0x18 + mov r2, #0 + strb r2, [r0, r1] + bl FUN_02208564 + str r0, [sp, #0xc] + b _02207D6C +_02207D64: + cmp r7, r8 + blt _02207C90 +_02207D6C: + ldr r0, [sp, #0xc] + cmp r0, #0 + movlt r4, #3 + movge r4, #5 + b _02207E1C +_02207D80: + cmp r0, #0 + ble _02207D90 + cmp r0, #0xc8 + beq _02207D98 +_02207D90: + mov r4, #3 + b _02207E1C +_02207D98: + cmp fp, #1 + beq _02207DB4 + cmp fp, #2 + beq _02207DD0 + cmp fp, #3 + beq _02207DEC + b _02207E1C +_02207DB4: + ldr r0, [sp] + mov r1, sl + bl FUN_02207F1C + cmp r0, #0 + movne r4, #0 + moveq r4, #3 + b _02207E1C +_02207DD0: + ldr r0, [sp] + mov r1, sl + bl FUN_02207F9C + cmp r0, #0 + movne r4, #0 + moveq r4, #3 + b _02207E1C +_02207DEC: + ldr r0, [sp] + mov r1, sl + bl FUN_02207F70 + cmp r0, #0 + movne r4, #0 + moveq r4, #3 + b _02207E1C +_02207E08: + mov r4, #6 + b _02207E1C +_02207E10: + mov r4, #4 + b _02207E1C +_02207E18: + mov r4, #3 +_02207E1C: + cmp fp, #1 + beq _02207E8C + cmp fp, #2 + beq _02207E38 + cmp fp, #3 + beq _02207E7C + b _02207E8C +_02207E38: + ldr r0, [sl, #0x20] + cmp r0, #0 + beq _02207E50 + ldr r1, _02207F10 ; =0x02211764 + ldr r1, [r1] + blx r1 +_02207E50: + ldr r0, [sl, #0x1c] + cmp r0, #0 + beq _02207E68 + ldr r1, _02207F10 ; =0x02211764 + ldr r1, [r1] + blx r1 +_02207E68: + ldr r1, _02207F10 ; =0x02211764 + ldr r0, [sl, #0x18] + ldr r1, [r1] + blx r1 + b _02207E8C +_02207E7C: + ldr r1, _02207F10 ; =0x02211764 + ldr r0, [sl, #0x10] + ldr r1, [r1] + blx r1 +_02207E8C: + bl FUN_02208364 + ldr r0, _02207F14 ; =0x02211768 + mvn r1, #0 + str r1, [r0] + bl FUN_02208350 + ldr r0, [sp] + bl FUN_02209CC4 + ldr r1, _02207F10 ; =0x02211764 + mov r0, sl + ldr r1, [r1] + blx r1 + bl FUN_022082A0 + cmp r4, #0 + ldrne r0, _02207F18 ; =0x02211760 + strne r4, [r0] + ldr r0, [sp, #4] + cmp r0, #0 + beq _02207EE8 + ldr r2, [sp, #0xc] + ldr r3, [sp, #4] + mov r0, fp + mov r1, r4 + blx r3 +_02207EE8: + ldr r0, [sp, #8] + cmp r0, #0 + addeq sp, sp, #0x1c + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + bl FUN_0220828C + add sp, sp, #0x1c + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_02207F04: .word 0x0220FA4C +_02207F08: .word 0x0000012E +_02207F0C: .word 0x0220FA5C +_02207F10: .word 0x02211764 +_02207F14: .word 0x02211768 +_02207F18: .word 0x02211760 + + arm_func_start FUN_02207F1C +FUN_02207F1C: ; 0x02207F1C + stmdb sp!, {r4, lr} + sub sp, sp, #8 + mov r4, r1 + add r1, sp, #0 + bl FUN_02209A68 + movs r1, r0 + bmi _02207F64 + ldr r0, [sp] + bl FUN_02208564 + ldr r1, [r4, #0x10] + add sp, sp, #8 + str r0, [r1] + ldr r0, [r4, #0x10] + ldr r0, [r0] + cmp r0, #0 + movge r0, #1 + movlt r0, #0 + ldmia sp!, {r4, pc} +_02207F64: + mov r0, #0 + add sp, sp, #8 + ldmia sp!, {r4, pc} + + arm_func_start FUN_02207F70 +FUN_02207F70: ; 0x02207F70 + stmdb sp!, {r4, lr} + sub sp, sp, #8 + mov r4, r1 + add r1, sp, #0 + bl FUN_02209A68 + ldr r1, [r4, #0x14] + cmp r0, r1 + moveq r0, #1 + movne r0, #0 + add sp, sp, #8 + ldmia sp!, {r4, pc} + + arm_func_start FUN_02207F9C +FUN_02207F9C: ; 0x02207F9C + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x24 + ldr r2, [r1, #0x14] + str r1, [sp] + mov r1, #0xb0 + mul r1, r2, r1 + mov r4, r0 + ldr r0, [sp] + mov r2, #0 + ldr r0, [r0, #0x10] + str r2, [sp, #4] + bl FUN_022083B4 + ldr r1, _02208224 ; =0x0220FA68 + add r2, sp, #0x1c + mov r0, r4 + bl FUN_02209A98 + cmp r0, #0 + ble _02208008 + ldr r1, [sp, #0x1c] + ldrsb r0, [r1] + cmp r0, #0x30 + bne _02208008 + ldrsb r0, [r1, #1] + cmp r0, #0 + addeq sp, sp, #0x24 + moveq r0, #1 + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +_02208008: + add r1, sp, #0x18 + mov r0, r4 + bl FUN_02209A68 + mov sb, r0 + cmp sb, #0 + ble _02208218 + ldr r0, [sp] + mov r8, #0 + ldr r0, [r0, #0x14] + str r8, [sp, #8] + cmp r0, #0 + ble _02208218 + str r8, [sp, #0xc] + mov fp, r8 + str r8, [sp, #0x14] + str r8, [sp, #0x10] + mov sl, #1 +_0220804C: + cmp r8, sb + movge r0, #1 + strge r0, [sp, #4] + bge _02208218 + ldr r0, [sp] + ldr r7, [sp, #0x10] + ldr r2, [r0, #0x10] + mov r0, r7 + str r0, [sp, #4] + ldr r0, [sp, #0xc] + mov r6, r8 + mov r1, r7 + add r5, r2, r0 + cmp r8, sb + bge _022081F0 +_02208088: + ldr r0, [sp, #0x18] + ldrsb r2, [r0, r8] + cmp r2, #0xd + moveq r1, sl + beq _022081E4 + cmp r1, #0 + beq _022080F0 + cmp r2, #0xa + bne _022081E0 + cmp r7, #5 + bne _022080D8 + sub r1, r8, #1 + sub r1, r1, r6 + cmp r1, #8 + bgt _02208218 + add r0, r0, r6 + bl FUN_02208564 + cmp r0, #0 + blt _02208218 + str r0, [r5, #0xac] +_022080D8: + cmp r7, #5 + ldrlt r0, [sp, #0x14] + strge sl, [sp, #4] + add r8, r8, #1 + strlt r0, [sp, #4] + b _022081F0 +_022080F0: + cmp r2, #9 + bne _022081E0 + cmp r7, #5 + addls pc, pc, r7, lsl #2 + b _022081D8 +_02208104: ; jump table + b _0220811C ; case 0 + b _02208138 ; case 1 + b _02208164 ; case 2 + b _02208180 ; case 3 + b _0220819C ; case 4 + b _022081B8 ; case 5 +_0220811C: + sub r2, r8, r6 + cmp r2, #0x20 + bhs _02208218 + add r1, r0, r6 + mov r0, r5 + bl FUN_0220839C + b _022081D8 +_02208138: + sub r4, r8, r6 + mov r0, r4 + bl FUN_02206DC0 + cmp r0, #0x64 + bhs _02208218 + mov r2, r4 + add r0, r5, #0x22 + ldr r1, [sp, #0x18] + add r1, r1, r6 + bl FUN_02206B60 + b _022081D8 +_02208164: + sub r2, r8, r6 + cmp r2, #0xa + bhs _02208218 + add r1, r0, r6 + add r0, r5, #0x88 + bl FUN_0220839C + b _022081D8 +_02208180: + sub r2, r8, r6 + cmp r2, #0xa + bhs _02208218 + add r1, r0, r6 + add r0, r5, #0x93 + bl FUN_0220839C + b _022081D8 +_0220819C: + sub r2, r8, r6 + cmp r2, #0xa + bhs _02208218 + add r1, r0, r6 + add r0, r5, #0x9e + bl FUN_0220839C + b _022081D8 +_022081B8: + sub r1, r8, r6 + cmp r1, #8 + bgt _02208218 + add r0, r0, r6 + bl FUN_02208564 + cmp r0, #0 + blt _02208218 + str r0, [r5, #0xac] +_022081D8: + add r7, r7, #1 + add r6, r8, #1 +_022081E0: + mov r1, fp +_022081E4: + add r8, r8, #1 + cmp r8, sb + blt _02208088 +_022081F0: + ldr r0, [sp] + ldr r1, [r0, #0x14] + ldr r0, [sp, #8] + add r0, r0, #1 + str r0, [sp, #8] + cmp r0, r1 + ldr r0, [sp, #0xc] + add r0, r0, #0xb0 + str r0, [sp, #0xc] + blt _0220804C +_02208218: + ldr r0, [sp, #4] + add sp, sp, #0x24 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_02208224: .word 0x0220FA68 + + arm_func_start FUN_02208228 +FUN_02208228: ; 0x02208228 + stmdb sp!, {r4, r5, r6, r7, r8, sb, lr} + sub sp, sp, #0x14 + mov sb, r0 + add r0, sp, #0 + bl OS_GetMacAddress + mov r8, #0 + add r7, sp, #0 + mov r6, r8 + add r5, sp, #6 + mov r4, #2 +_02208250: + ldrb r1, [r7] + mov r2, r4 + add r0, r5, r6 + bl FUN_022083E0 + add r8, r8, #1 + cmp r8, #6 + add r7, r7, #1 + add r6, r6, #2 + blt _02208250 + add r1, sp, #6 + mov r0, sb + mov r2, #0xc + bl FUN_02206C98 + add sp, sp, #0x14 + ldmia sp!, {r4, r5, r6, r7, r8, sb, pc} + + arm_func_start FUN_0220828C +FUN_0220828C: ; 0x0220828C + ldr ip, _0220829C ; =0x020CBDC4 + mov r1, #0 + mov r2, r1 + bx ip + .align 2, 0 +_0220829C: .word 0x020CBDC4 + + arm_func_start FUN_022082A0 +FUN_022082A0: ; 0x022082A0 + stmdb sp!, {lr} + sub sp, sp, #4 + ldr r0, _022082CC ; =0x022118D4 + bl OS_LockMutex + ldr r1, _022082D0 ; =0x022118D0 + mov r2, #0 + ldr r0, _022082CC ; =0x022118D4 + str r2, [r1] + bl OS_UnlockMutex + add sp, sp, #4 + ldmfd sp!, {pc} + .align 2, 0 +_022082CC: .word 0x022118D4 +_022082D0: .word 0x022118D0 + + arm_func_start FUN_022082D4 +FUN_022082D4: ; 0x022082D4 + stmdb sp!, {r4, lr} + ldr r0, _02208314 ; =0x022118D4 + bl OS_LockMutex + ldr r0, _02208318 ; =0x022118D0 + ldr r0, [r0] + cmp r0, #0 + moveq r4, #1 + movne r4, #0 + cmp r4, #0 + ldrne r0, _02208318 ; =0x022118D0 + movne r1, #1 + strne r1, [r0] + ldr r0, _02208314 ; =0x022118D4 + bl OS_UnlockMutex + mov r0, r4 + ldmia sp!, {r4, pc} + .align 2, 0 +_02208314: .word 0x022118D4 +_02208318: .word 0x022118D0 + + arm_func_start FUN_0220831C +FUN_0220831C: ; 0x0220831C + bx lr + + arm_func_start FUN_02208320 +FUN_02208320: ; 0x02208320 + stmdb sp!, {lr} + sub sp, sp, #4 + ldr r0, _02208348 ; =0x022118D4 + bl OS_InitMutex + ldr r0, _0220834C ; =0x022118D0 + mov r1, #0 + str r1, [r0] + mov r0, #1 + add sp, sp, #4 + ldmfd sp!, {pc} + .align 2, 0 +_02208348: .word 0x022118D4 +_0220834C: .word 0x022118D0 + + arm_func_start FUN_02208350 +FUN_02208350: ; 0x02208350 + ldr ip, _0220835C ; =0x020CBFA0 + ldr r0, _02208360 ; =0x022118EC + bx ip + .align 2, 0 +_0220835C: .word 0x020CBFA0 +_02208360: .word 0x022118EC + + arm_func_start FUN_02208364 +FUN_02208364: ; 0x02208364 + ldr ip, _02208370 ; =0x020CC010 + ldr r0, _02208374 ; =0x022118EC + bx ip + .align 2, 0 +_02208370: .word 0x020CC010 +_02208374: .word 0x022118EC + + arm_func_start FUN_02208378 +FUN_02208378: ; 0x02208378 + bx lr + + arm_func_start FUN_0220837C +FUN_0220837C: ; 0x0220837C + stmdb sp!, {lr} + sub sp, sp, #4 + ldr r0, _02208398 ; =0x022118EC + bl OS_InitMutex + mov r0, #1 + add sp, sp, #4 + ldmfd sp!, {pc} + .align 2, 0 +_02208398: .word 0x022118EC + + arm_func_start FUN_0220839C +FUN_0220839C: ; 0x0220839C + ldr ip, _022083B0 ; =0x020CE3E0 + mov r3, r0 + mov r0, r1 + mov r1, r3 + bx ip + .align 2, 0 +_022083B0: .word 0x020CE3E0 + + arm_func_start FUN_022083B4 +FUN_022083B4: ; 0x022083B4 + ldr ip, _022083C4 ; =0x020CE34C + mov r2, r1 + mov r1, #0 + bx ip + .align 2, 0 +_022083C4: .word 0x020CE34C + + arm_func_start FUN_022083C8 +FUN_022083C8: ; 0x022083C8 + ldr ip, _022083D0 ; =0x020DE03C + bx ip + .align 2, 0 +_022083D0: .word 0x020DE03C + + arm_func_start FUN_022083D4 +FUN_022083D4: ; 0x022083D4 + ldr ip, _022083DC ; =0x020DE0BC + bx ip + .align 2, 0 +_022083DC: .word 0x020DE0BC + + arm_func_start FUN_022083E0 +FUN_022083E0: ; 0x022083E0 + stmdb sp!, {lr} + sub sp, sp, #4 + cmp r2, #8 + addgt sp, sp, #4 + mov ip, #0 + mvngt r0, #0 + ldmgtia sp!, {pc} + cmp r2, #1 + mov lr, #1 + blt _02208440 +_02208408: + sub r3, r2, lr + mov r3, r3, lsl #2 + mov r3, r1,lsr r3 + and r3, r3, #0xf + cmp r3, #0xa + addlo r3, r3, #0x30 + strlob r3, [r0, ip] + addlo ip, ip, #1 + addhs r3, r3, #0x57 + strhsb r3, [r0, ip] + add lr, lr, #1 + addhs ip, ip, #1 + cmp lr, r2 + ble _02208408 +_02208440: + mov r0, ip + add sp, sp, #4 + ldmfd sp!, {pc} + + arm_func_start FUN_0220844C +FUN_0220844C: ; 0x0220844C + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0xc + ldr r4, _02208554 ; =0x0220BD64 + mov r6, #0 + ldr r5, [r4] + mov r7, #0xa + umull r4, sl, r5, r7 + mla sl, r5, r6, sl + ldr r5, _02208554 ; =0x0220BD64 + mov sb, r1 + ldr r5, [r5, #4] + mov r8, r2 + mla sl, r5, r7, sl + cmp r8, sl + mov sl, r0 + cmpeq sb, r4 + str r3, [sp] + addhs sp, sp, #0xc + mvnhs r0, #0 + ldmhsia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + mov r7, r6 + mov r0, r6 + mov fp, #0x30 + mov r1, #1 + str r1, [sp, #4] +_022084B0: + ldr r1, _02208554 ; =0x0220BD64 + add r1, r1, r7, lsl #3 + ldr r4, [r1, #4] + ldr r1, _02208554 ; =0x0220BD64 + cmp r8, r4 + ldr r5, [r1, r7, lsl #3] + cmpeq sb, r5 + blo _02208510 + mov r0, sb + mov r1, r8 + mov r2, r5 + mov r3, r4 + bl _ll_udiv + umull r2, r1, r0, r5 + mla r1, r0, r4, r1 + add r0, r0, #0x30 + strb r0, [sl, r6] + mov r0, #0 + mla r1, r0, r5, r1 + subs sb, sb, r2 + ldr r0, [sp, #4] + sbc r8, r8, r1 + add r6, r6, #1 + b _02208530 +_02208510: + cmp r0, #0 + bne _02208528 + ldr r1, [sp] + rsb r2, r7, #0x11 + cmp r2, r1 + bgt _02208530 +_02208528: + strb fp, [sl, r6] + add r6, r6, #1 +_02208530: + add r7, r7, #1 + cmp r7, #0x10 + blt _022084B0 + mov r0, #0x30 + adds r0, sb, r0 + strb r0, [sl, r6] + add r0, r6, #1 + add sp, sp, #0xc + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_02208554: .word 0x0220BD64 + + arm_func_start FUN_02208558 +FUN_02208558: ; 0x02208558 + ldr ip, _02208560 ; =FUN_0220B788 + bx ip + .align 2, 0 +_02208560: .word FUN_0220B788 + + arm_func_start FUN_02208564 +FUN_02208564: ; 0x02208564 + ldr ip, _0220856C ; =FUN_0220B844 + bx ip + .align 2, 0 +_0220856C: .word FUN_0220B844 + + arm_func_start FUN_02208570 +FUN_02208570: ; 0x02208570 + stmdb sp!, {r4, lr} + mov r4, r0 + bl FUN_022091BC + bl FUN_02208C24 + ldr r0, _022085AC ; =0x0221191C + ldr r1, _022085B0 ; =0x02211904 + ldr r0, [r0] + ldr r1, [r1] + blx r1 + bl FUN_02208CF4 + ldr r0, _022085B4 ; =0x02211920 + mov r1, #0 + str r1, [r0] + blx r4 + ldmia sp!, {r4, pc} + .align 2, 0 +_022085AC: .word 0x0221191C +_022085B0: .word 0x02211904 +_022085B4: .word 0x02211920 + + arm_func_start FUN_022085B8 +FUN_022085B8: ; 0x022085B8 + stmdb sp!, {r4, r5, r6, r7, lr} + sub sp, sp, #4 + ldr r3, _022086B0 ; =0x02211908 + mov r7, #0 + ldr r6, _022086B4 ; =0x02211924 + ldr r5, _022086B8 ; =0x02211904 + ldr lr, _022086BC ; =0x02211910 + ldr ip, _022086C0 ; =0x02211914 + str r7, [r3] + ldr r4, _022086C4 ; =0x0221190C + ldr r3, _022086C8 ; =0x02211918 + str r7, [r4] + mov r4, r2 + str r0, [r6] + str r1, [r5] + str r7, [lr] + str r7, [ip] + str r7, [r3] + bl FUN_02208CF8 + cmp r0, #0 + ldreq r0, _022086B0 ; =0x02211908 + moveq r1, #9 + streq r1, [r0] + addeq sp, sp, #4 + moveq r0, r7 + ldmeqia sp!, {r4, r5, r6, r7, pc} + mov r1, r6 + ldr r2, [r1] + mov r0, #0x2000 + mov r1, #8 + blx r2 + movs r1, r0 + ldr r0, _022086CC ; =0x0221191C + str r1, [r0] + bne _02208660 + ldr r0, _022086B0 ; =0x02211908 + mov r1, #1 + str r1, [r0] + bl FUN_02208CF4 + add sp, sp, #4 + mov r0, r7 + ldmia sp!, {r4, r5, r6, r7, pc} +_02208660: + mov r0, r4 + bl FUN_02208C54 + cmp r0, #0 + ldrne r1, _022086D0 ; =0x02211920 + movne r0, #1 + strne r0, [r1] + addne sp, sp, #4 + ldmneia sp!, {r4, r5, r6, r7, pc} + ldr r0, _022086CC ; =0x0221191C + mov r1, r5 + ldr r2, [r1] + ldr r0, [r0] + ldr r1, _022086B0 ; =0x02211908 + mov r3, #9 + str r3, [r1] + blx r2 + bl FUN_02208CF4 + mov r0, r7 + add sp, sp, #4 + ldmia sp!, {r4, r5, r6, r7, pc} + .align 2, 0 +_022086B0: .word 0x02211908 +_022086B4: .word 0x02211924 +_022086B8: .word 0x02211904 +_022086BC: .word 0x02211910 +_022086C0: .word 0x02211914 +_022086C4: .word 0x0221190C +_022086C8: .word 0x02211918 +_022086CC: .word 0x0221191C +_022086D0: .word 0x02211920 + + arm_func_start FUN_022086D4 +FUN_022086D4: ; 0x022086D4 + ldr r3, [r0] + cmp r3, #0 + movne r0, #0 + streq r1, [r0, #0x1c] + streq r2, [r0, #0x18] + moveq r0, #1 + bx lr + + arm_func_start FUN_022086F0 +FUN_022086F0: ; 0x022086F0 + stmdb sp!, {r4, r5, r6, r7, r8, lr} + mov r8, r0 + ldr r0, [r8] + mov r7, r1 + mov r6, r2 + mov r5, #0 + cmp r0, #0 + movne r0, r5 + ldmneia sp!, {r4, r5, r6, r7, r8, pc} + mov r0, r6 + bl FUN_02209FBC + mov r4, r0 + mov r0, r8 + mov r1, r6 + mov r2, r4 + bl FUN_02208794 + cmp r0, #0 + beq _0220875C + mov r1, r7 + mov r2, r6 + add r0, r8, #0x38 + mov r3, #0x18 + bl FUN_022088CC + movs r5, r0 + ldrne r0, [r8, #0x38] + ldrne r0, [r0] + strne r4, [r0, #0x10] +_0220875C: + mov r0, r5 + ldmia sp!, {r4, r5, r6, r7, r8, pc} + + arm_func_start FUN_02208764 +FUN_02208764: ; 0x02208764 + stmdb sp!, {lr} + sub sp, sp, #4 + ldr r3, [r0] + cmp r3, #0 + addne sp, sp, #4 + movne r0, #0 + ldmneia sp!, {pc} + add r0, r0, #0x34 + mov r3, #0x18 + bl FUN_022088CC + add sp, sp, #4 + ldmfd sp!, {pc} + + arm_func_start FUN_02208794 +FUN_02208794: ; 0x02208794 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #4 + str r0, [sp] + mov sb, r2 + mov sl, r1 + ldr r2, [sp] + mov r0, sl + mov r1, sb + add r2, r2, #0x46 + mov r3, #0x12 + bl FUN_0220B604 + cmp r0, #0 + addlt sp, sp, #4 + movlt r0, #1 + ldmltia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + ldr r7, _02208850 ; =0x0220BDF7 + mov fp, #0x13 + ldr r0, [sp] + add r5, r0, #0x46 + mov r4, #0x12 +_022087E4: + ldr r0, [sp] + add r6, r0, fp + ldrsb r8, [r6, #0x44] +_022087F0: + and r0, r8, #0xff + bl FUN_02208854 + mov r8, r0 + strb r8, [r6, #0x44] + ldrsb r0, [r7] + cmp r8, r0 + beq _02208834 + mov r0, sl + mov r1, sb + mov r2, r5 + mov r3, r4 + bl FUN_0220B604 + cmp r0, #0 + bge _022087F0 + add sp, sp, #4 + mov r0, #1 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +_02208834: + sub fp, fp, #1 + cmp fp, #2 + sub r7, r7, #1 + bge _022087E4 + mov r0, #0 + add sp, sp, #4 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_02208850: .word 0x0220BDF7 + + arm_func_start FUN_02208854 +FUN_02208854: ; 0x02208854 + add r0, r0, #1 + and r0, r0, #0xff + cmp r0, #0x7b + moveq r0, #0x30 + beq _0220887C + cmp r0, #0x5b + moveq r0, #0x61 + beq _0220887C + cmp r0, #0x3a + moveq r0, #0x41 +_0220887C: + mov r0, r0, lsl #0x18 + mov r0, r0, asr #0x18 + bx lr + + arm_func_start FUN_02208888 +FUN_02208888: ; 0x02208888 + ldr r3, [r0] + cmp r3, #0 + beq _022088C4 + ldr r2, [r3] + cmp r3, r2 + moveq r1, #0 + streq r1, [r0] + beq _022088C4 + ldr r1, [r3, #4] + str r1, [r2, #4] + ldr r2, [r3] + ldr r1, [r3, #4] + str r2, [r1] + ldr r1, [r3, #4] + str r1, [r0] +_022088C4: + mov r0, r3 + bx lr + + arm_func_start FUN_022088CC +FUN_022088CC: ; 0x022088CC + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} + mov sb, r0 + ldr sl, [sb] + mov r8, r1 + mov r7, r2 + mov r6, r3 + cmp sl, #0 + mov r5, #0 + beq _02208948 + ldr r1, [sl, #8] + mov r0, r8 + mov r4, sl + bl FUN_0220B704 + cmp r0, #0 + beq _02208944 + ldr r4, [sl, #4] + ldr r0, [sb] + cmp r4, r0 + beq _02208948 +_02208918: + ldr r1, [r4, #8] + mov r0, r8 + bl FUN_0220B704 + cmp r0, #0 + moveq r5, #1 + beq _02208948 + ldr r4, [r4, #4] + ldr r0, [sb] + cmp r4, r0 + bne _02208918 + b _02208948 +_02208944: + mov r5, #1 +_02208948: + cmp r5, #0 + strne r7, [r4, #0xc] + bne _022089D0 + ldr r1, _022089D8 ; =0x02211924 + mov r0, r6 + ldr r2, [r1] + mov r1, #4 + blx r2 + cmp r0, #0 + ldreq r0, _022089DC ; =0x02211908 + moveq r1, #1 + streq r1, [r0] + moveq r0, #0 + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + str r8, [r0, #8] + str r7, [r0, #0xc] + mov r1, #0 + str r1, [r0, #0x10] + str r1, [r0, #0x14] + ldr r1, [sb] + cmp r1, #0 + streq r0, [r0, #4] + streq r0, [r0] + streq r0, [sb] + beq _022089D0 + ldr r1, [r1] + str r1, [r0] + ldr r1, [sb] + str r1, [r0, #4] + ldr r1, [sb] + ldr r1, [r1] + str r0, [r1, #4] + ldr r1, [sb] + str r0, [r1] +_022089D0: + mov r0, #1 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + .align 2, 0 +_022089D8: .word 0x02211924 +_022089DC: .word 0x02211908 + + arm_func_start FUN_022089E0 +FUN_022089E0: ; 0x022089E0 + ldr ip, _022089EC ; =FUN_02208888 + ldr r0, _022089F0 ; =0x02211910 + bx ip + .align 2, 0 +_022089EC: .word FUN_02208888 +_022089F0: .word 0x02211910 + + arm_func_start FUN_022089F4 +FUN_022089F4: ; 0x022089F4 + stmdb sp!, {r4, lr} + ldr r4, _02208A20 ; =0x02211910 + ldr r0, [r4] + cmp r0, #0 + ldmeqia sp!, {r4, pc} +_02208A08: + ldr r0, [r0, #8] + bl FUN_02208A24 + ldr r0, [r4] + cmp r0, #0 + bne _02208A08 + ldmia sp!, {r4, pc} + .align 2, 0 +_02208A20: .word 0x02211910 + + arm_func_start FUN_02208A24 +FUN_02208A24: ; 0x02208A24 + stmdb sp!, {r4, r5, r6, r7, lr} + sub sp, sp, #4 + mov r5, #0 + bl FUN_02208AD0 + movs r4, r0 + beq _02208ABC + ldr r0, _02208AC8 ; =0x02211910 + ldr r2, [r0] + ldr r1, [r2] + cmp r2, r1 + beq _02208A7C + ldr r2, [r4, #4] + ldr r1, [r4] + str r2, [r1, #4] + ldr r2, [r4] + ldr r1, [r4, #4] + str r2, [r1] + ldr r1, [r0] + cmp r1, r4 + ldreq r1, [r4, #4] + streq r1, [r0] + b _02208A84 +_02208A7C: + mov r1, r5 + str r1, [r0] +_02208A84: + ldr r0, [r4, #0xc] + ldr r7, [r0, #0x3c] + ldr r6, [r0, #0x30] + ldr r5, [r0, #0x2c] + bl FUN_02209338 + ldr r1, _02208ACC ; =0x02211904 + mov r0, r4 + ldr r1, [r1] + blx r1 + mov r1, r6 + mov r2, r5 + mov r0, #8 + blx r7 + mov r5, #1 +_02208ABC: + mov r0, r5 + add sp, sp, #4 + ldmia sp!, {r4, r5, r6, r7, pc} + .align 2, 0 +_02208AC8: .word 0x02211910 +_02208ACC: .word 0x02211904 + + arm_func_start FUN_02208AD0 +FUN_02208AD0: ; 0x02208AD0 + ldr r1, _02208B24 ; =0x02211910 + mov ip, #0 + ldr r3, [r1] + cmp r3, #0 + beq _02208B1C + ldr r1, [r3, #8] + cmp r1, r0 + moveq ip, r3 + beq _02208B1C + ldr r2, [r3, #4] + cmp r2, r3 + beq _02208B1C +_02208B00: + ldr r1, [r2, #8] + cmp r1, r0 + moveq ip, r2 + beq _02208B1C + ldr r2, [r2, #4] + cmp r2, r3 + bne _02208B00 +_02208B1C: + mov r0, ip + bx lr + .align 2, 0 +_02208B24: .word 0x02211910 + + arm_func_start FUN_02208B28 +FUN_02208B28: ; 0x02208B28 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #4 + ldr r1, _02208BD8 ; =0x02211924 + mov r4, r0 + ldr r2, [r1] + mov r0, #0x14 + mov r1, #4 + mvn r5, #0 + blx r2 + cmp r0, #0 + beq _02208BCC + ldr r1, _02208BDC ; =0x02211910 + ldr r2, [r1] + cmp r2, #0 + streq r0, [r0] + streq r0, [r0, #4] + streq r0, [r1] + beq _02208B94 + ldr r2, [r2] + str r2, [r0] + ldr r2, [r1] + str r2, [r0, #4] + ldr r2, [r1] + ldr r2, [r2] + str r0, [r2, #4] + ldr r1, [r1] + str r0, [r1] +_02208B94: + ldr r1, _02208BE0 ; =0x0221190C + mvn r2, #0 + ldr ip, [r1] + ldr r3, [r1] + add r3, r3, #1 + str r3, [r1] + str ip, [r0, #8] + str r4, [r0, #0xc] + str r2, [r0, #0x10] + ldr r2, [r1] + ldr r5, [r0, #8] + cmp r2, #0 + movlt r0, #0 + strlt r0, [r1] +_02208BCC: + mov r0, r5 + add sp, sp, #4 + ldmia sp!, {r4, r5, pc} + .align 2, 0 +_02208BD8: .word 0x02211924 +_02208BDC: .word 0x02211910 +_02208BE0: .word 0x0221190C + + arm_func_start FUN_02208BE4 +FUN_02208BE4: ; 0x02208BE4 + ldr ip, _02208BF8 ; =0x020CBDC4 + mov r1, #0 + ldr r0, _02208BFC ; =0x02211944 + mov r2, r1 + bx ip + .align 2, 0 +_02208BF8: .word 0x020CBDC4 +_02208BFC: .word 0x02211944 + + arm_func_start FUN_02208C00 +FUN_02208C00: ; 0x02208C00 + stmdb sp!, {lr} + sub sp, sp, #4 + ldr r0, _02208C20 ; =0x02211944 + add r1, sp, #0 + mov r2, #1 + bl OS_ReceiveMessage + add sp, sp, #4 + ldmfd sp!, {pc} + .align 2, 0 +_02208C20: .word 0x02211944 + + arm_func_start FUN_02208C24 +FUN_02208C24: ; 0x02208C24 + stmdb sp!, {lr} + sub sp, sp, #4 + ldr r0, _02208C4C ; =0x02211918 + mov r1, #1 + str r1, [r0] + bl FUN_02208BE4 + ldr r0, _02208C50 ; =0x02211964 + bl OS_JoinThread + add sp, sp, #4 + ldmfd sp!, {pc} + .align 2, 0 +_02208C4C: .word 0x02211918 +_02208C50: .word 0x02211964 + + arm_func_start FUN_02208C54 +FUN_02208C54: ; 0x02208C54 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #0xc + mov r5, r0 + mov r4, r1 + bl OS_IsThreadAvailable + cmp r0, #0 + addeq sp, sp, #0xc + moveq r0, #0 + ldmeqia sp!, {r4, r5, pc} + ldr r0, _02208CBC ; =0x02211944 + ldr r1, _02208CC0 ; =0x02211928 + mov r2, #1 + bl OS_InitMessageQueue + mov r0, #0x2000 + str r0, [sp] + ldr r0, _02208CC4 ; =0x02211964 + ldr r1, _02208CC8 ; =FUN_0220A044 + add r3, r4, #0x2000 + mov r2, #0 + str r5, [sp, #4] + bl OS_CreateThread + ldr r0, _02208CC4 ; =0x02211964 + bl OS_WakeupThreadDirect + mov r0, #1 + add sp, sp, #0xc + ldmia sp!, {r4, r5, pc} + .align 2, 0 +_02208CBC: .word 0x02211944 +_02208CC0: .word 0x02211928 +_02208CC4: .word 0x02211964 +_02208CC8: .word FUN_0220A044 + + arm_func_start FUN_02208CCC +FUN_02208CCC: ; 0x02208CCC + ldr ip, _02208CD8 ; =0x020CBFA0 + ldr r0, _02208CDC ; =0x0221192C + bx ip + .align 2, 0 +_02208CD8: .word 0x020CBFA0 +_02208CDC: .word 0x0221192C + + arm_func_start FUN_02208CE0 +FUN_02208CE0: ; 0x02208CE0 + ldr ip, _02208CEC ; =0x020CC010 + ldr r0, _02208CF0 ; =0x0221192C + bx ip + .align 2, 0 +_02208CEC: .word 0x020CC010 +_02208CF0: .word 0x0221192C + + arm_func_start FUN_02208CF4 +FUN_02208CF4: ; 0x02208CF4 + bx lr + + arm_func_start FUN_02208CF8 +FUN_02208CF8: ; 0x02208CF8 + stmdb sp!, {lr} + sub sp, sp, #4 + ldr r0, _02208D14 ; =0x0221192C + bl OS_InitMutex + mov r0, #1 + add sp, sp, #4 + ldmfd sp!, {pc} + .align 2, 0 +_02208D14: .word 0x0221192C + + arm_func_start FUN_02208D18 +FUN_02208D18: ; 0x02208D18 + stmdb sp!, {r4, r5, r6, r7, r8, lr} + sub sp, sp, #8 + mov r8, r0 + ldr r4, [r8, #0x30] + mov r6, r2 + mov r7, r1 + mov r0, r4 + mov r1, r6 + mov r5, r3 + bl FUN_02208DB8 + cmp r0, #0 + addne sp, sp, #8 + ldrne r0, _02208D84 ; =0xFFFFFC15 + ldmneia sp!, {r4, r5, r6, r7, r8, pc} + ldr r0, [r4, #0xc] + ldr r1, [sp, #0x20] + sub r3, r0, r6 + str r1, [sp] + ldr r2, [r4, #0x18] + cmp r5, r3 + movle r3, r5 + mov r0, r8 + mov r1, r7 + add r2, r2, r6 + bl FUN_02209DB4 + add sp, sp, #8 + ldmia sp!, {r4, r5, r6, r7, r8, pc} + .align 2, 0 +_02208D84: .word 0xFFFFFC15 + + arm_func_start FUN_02208D88 +FUN_02208D88: ; 0x02208D88 + stmdb sp!, {lr} + sub sp, sp, #4 + ldr ip, [r0, #0x30] + mov lr, r2 + str r3, [sp] + ldr r2, [ip, #0x18] + ldr r3, [ip, #0xc] + add r2, r2, lr + sub r3, r3, lr + bl FUN_02209DB4 + add sp, sp, #4 + ldmfd sp!, {pc} + + arm_func_start FUN_02208DB8 +FUN_02208DB8: ; 0x02208DB8 + ldr r0, [r0, #0xc] + cmp r0, r1 + movls r0, #1 + movhi r0, #0 + bx lr + + arm_func_start FUN_02208DCC +FUN_02208DCC: ; 0x02208DCC + stmdb sp!, {r4, r5, r6, r7, r8, sb, lr} + sub sp, sp, #4 + mov r4, r0 + mov r7, r2 + mov r6, r3 + ldr r0, [r4] + add r2, r7, r6 + mov r8, r1 + cmp r2, r0 + bgt _02208EB4 + cmp r6, #0 + beq _02208EA8 + cmp r7, #0x400 + bge _02208E30 + rsb r5, r7, #0x400 + cmp r6, r5 + movle r5, r6 + add r1, r4, #0x20 + mov r0, r8 + mov r2, r5 + add r1, r1, r7 + bl FUN_02209F90 + add r7, r7, r5 + sub r6, r6, r5 + add r8, r8, r5 +_02208E30: + cmp r6, #0 + beq _02208EA8 + sub r2, r7, #0x400 + ldr r0, _02208EC0 ; =0x000001FF + movs r1, r2, asr #9 + and r7, r2, r0 + sub r0, r1, #1 + ldr r5, [r4, #0x1c] + beq _02208E64 +_02208E54: + cmp r0, #0 + sub r0, r0, #1 + ldr r5, [r5] + bne _02208E54 +_02208E64: + cmp r6, #0 + beq _02208EA8 + ldr sb, _02208EC0 ; =0x000001FF +_02208E70: + rsb r4, r7, #0x200 + cmp r6, r4 + movle r4, r6 + add r1, r5, #4 + mov r0, r8 + mov r2, r4 + add r1, r1, r7 + bl FUN_02209F90 + add r0, r7, r4 + and r7, r0, sb + subs r6, r6, r4 + add r8, r8, r4 + ldr r5, [r5] + bne _02208E70 +_02208EA8: + add sp, sp, #4 + mov r0, #1 + ldmia sp!, {r4, r5, r6, r7, r8, sb, pc} +_02208EB4: + mov r0, #0 + add sp, sp, #4 + ldmia sp!, {r4, r5, r6, r7, r8, sb, pc} + .align 2, 0 +_02208EC0: .word 0x000001FF + + arm_func_start FUN_02208EC4 +FUN_02208EC4: ; 0x02208EC4 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0xc + mov sb, r1 + mov r4, r2 + mov sl, r0 + mov r8, r3 + cmp sb, r4 + ldr r7, [sp, #0x30] + bge _02208F98 + add r2, sp, #0 + add r3, sp, #4 + bl FUN_02209158 + add r1, sp, #0 + add r2, sp, #4 + mov r0, sl + bl FUN_022090E4 + sub r6, r4, #1 + mov r4, #1 + add fp, sp, #0 + mov r5, #0 + b _02208F5C +_02208F18: + cmp r1, #0 + beq _02208F38 + cmp r1, #0x20 + beq _02208F38 + cmp r1, r7 + beq _02208F38 + cmp sb, r6 + bne _02208F44 +_02208F38: + add sp, sp, #0xc + mov r0, #0 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +_02208F44: + mov r0, sl + mov r1, fp + add r2, sp, #4 + bl FUN_022090E4 + add sb, sb, #1 + add r8, r8, #1 +_02208F5C: + ldrsb r1, [r8] + mov r2, r5 + cmp r1, #0x41 + blt _02208F74 + cmp r1, #0x5a + movle r2, r4 +_02208F74: + cmp r2, #0 + addne r2, r1, #0x20 + moveq r2, r1 + cmp r0, #0x41 + blt _02208F90 + cmp r0, #0x5a + addle r0, r0, #0x20 +_02208F90: + cmp r0, r2 + beq _02208F18 +_02208F98: + mvn r0, #0 + add sp, sp, #0xc + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + + arm_func_start FUN_02208FA4 +FUN_02208FA4: ; 0x02208FA4 + stmdb sp!, {r4, r5, r6, r7, r8, lr} + sub sp, sp, #8 + mov r7, r1 + mov r6, r2 + mov r8, r0 + cmp r7, r6 + bge _02209008 + add r2, sp, #0 + add r3, sp, #4 + bl FUN_02209158 + cmp r7, r6 + bge _02209008 + add r5, sp, #0 + add r4, sp, #4 +_02208FDC: + mov r0, r8 + mov r1, r5 + mov r2, r4 + bl FUN_022090E4 + cmp r0, #0x20 + addne sp, sp, #8 + movne r0, r7 + ldmneia sp!, {r4, r5, r6, r7, r8, pc} + add r7, r7, #1 + cmp r7, r6 + blt _02208FDC +_02209008: + mvn r0, #0 + add sp, sp, #8 + ldmia sp!, {r4, r5, r6, r7, r8, pc} + + arm_func_start FUN_02209014 +FUN_02209014: ; 0x02209014 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0xc + movs r7, r3 + mov sl, r0 + mvnne r0, #0 + mov sb, r1 + mov r8, r2 + strne r0, [r7] + mov r6, #0 + cmp sb, r8 + bge _022090D8 + add r2, sp, #0 + add r3, sp, #4 + mov r0, sl + mov r1, sb + bl FUN_02209158 + cmp sb, r8 + bge _022090D8 + add fp, sp, #0 + mov r4, #0 + mov r5, #1 +_02209068: + mov r0, sl + mov r1, fp + add r2, sp, #4 + bl FUN_022090E4 + cmp r0, #0x3a + bne _02209094 + cmp r7, #0 + beq _02209094 + ldr r1, [r7] + cmp r1, #0 + strlt sb, [r7] +_02209094: + cmp r6, #0 + bne _022090A8 + cmp r0, #0xd + moveq r6, r5 + b _022090CC +_022090A8: + cmp r0, #0xa + bne _022090C8 + sub r0, r8, #1 + cmp sb, r0 + moveq r0, #0 + add sp, sp, #0xc + addne r0, sb, #1 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +_022090C8: + mov r6, r4 +_022090CC: + add sb, sb, #1 + cmp sb, r8 + blt _02209068 +_022090D8: + mvn r0, #0 + add sp, sp, #0xc + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + + arm_func_start FUN_022090E4 +FUN_022090E4: ; 0x022090E4 + ldr r3, [r1] + cmp r3, #0 + bne _02209120 + ldr r3, [r2] + cmp r3, #0x400 + addlt r1, r3, #1 + strlt r1, [r2] + addlt r0, r0, r3 + ldrltsb r0, [r0, #0x20] + bxlt lr + mov r3, #0 + str r3, [r2] + ldr r0, [r0, #0x1c] + str r0, [r1] + b _0220913C +_02209120: + ldr r0, [r2] + cmp r0, #0x200 + moveq r0, #0 + streq r0, [r2] + ldreq r0, [r1] + ldreq r0, [r0] + streq r0, [r1] +_0220913C: + ldr r3, [r2] + add r0, r3, #1 + str r0, [r2] + ldr r0, [r1] + add r0, r0, r3 + ldrsb r0, [r0, #4] + bx lr + + arm_func_start FUN_02209158 +FUN_02209158: ; 0x02209158 + stmdb sp!, {lr} + sub sp, sp, #4 + cmp r1, #0x400 + movlt r0, #0 + strlt r0, [r2] + strlt r1, [r3] + addlt sp, sp, #4 + ldmltia sp!, {pc} + sub ip, r1, #0x400 + movs ip, ip, asr #9 + sub lr, ip, #1 + ldr ip, [r0, #0x1c] + beq _0220919C +_0220918C: + cmp lr, #0 + sub lr, lr, #1 + ldr ip, [ip] + bne _0220918C +_0220919C: + ldr r0, _022091B8 ; =0x000001FF + sub r1, r1, #0x400 + str ip, [r2] + and r0, r1, r0 + str r0, [r3] + add sp, sp, #4 + ldmfd sp!, {pc} + .align 2, 0 +_022091B8: .word 0x000001FF + + arm_func_start FUN_022091BC +FUN_022091BC: ; 0x022091BC + stmdb sp!, {lr} + sub sp, sp, #4 + bl FUN_02208CE0 + ldr r0, _02209214 ; =0x02211914 + ldr r2, [r0] + cmp r2, #0 + beq _02209204 + ldr r1, [r2, #0xc] + ldr r1, [r1, #4] + cmp r1, #0 + bne _02209204 + ldr r1, [r2, #0xc] + mov r2, #1 + str r2, [r1, #4] + ldr r1, [r0] + ldr r0, [r1, #0xc] + ldr r1, [r1, #0x10] + bl FUN_02209D40 +_02209204: + bl FUN_022089F4 + bl FUN_02208CCC + add sp, sp, #4 + ldmfd sp!, {pc} + .align 2, 0 +_02209214: .word 0x02211914 + + arm_func_start FUN_02209218 +FUN_02209218: ; 0x02209218 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #4 + mov r4, r0 + mov r5, #0 + bl FUN_02208CE0 + ldr r0, _0220929C ; =0x02211914 + ldr r2, [r0] + cmp r2, #0 + beq _02209278 + ldr r1, [r2, #8] + cmp r1, r4 + bne _02209278 + ldr r1, [r2, #0xc] + ldr r1, [r1, #4] + cmp r1, #0 + bne _02209278 + ldr r1, [r2, #0xc] + mov r2, #1 + str r2, [r1, #4] + ldr r1, [r0] + ldr r0, [r1, #0xc] + ldr r1, [r1, #0x10] + bl FUN_02209D40 + mov r5, #1 +_02209278: + cmp r5, #0 + bne _0220928C + mov r0, r4 + bl FUN_02208A24 + mov r5, r0 +_0220928C: + bl FUN_02208CCC + mov r0, r5 + add sp, sp, #4 + ldmia sp!, {r4, r5, pc} + .align 2, 0 +_0220929C: .word 0x02211914 + + arm_func_start FUN_022092A0 +FUN_022092A0: ; 0x022092A0 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #4 + mov r5, r0 + ldr r0, [r5] + cmp r0, #0 + ldrne r0, _02209334 ; =0x02211908 + movne r1, #0xb + strne r1, [r0] + addne sp, sp, #4 + mvnne r0, #0 + ldmneia sp!, {r4, r5, pc} + ldr r0, [r5, #0x40] + cmp r0, #1 + bne _022092F8 + ldr r0, [r5, #0x38] + cmp r0, #0 + ldreq r0, _02209334 ; =0x02211908 + moveq r1, #0xb + streq r1, [r0] + addeq sp, sp, #4 + mvneq r0, #0 + ldmeqia sp!, {r4, r5, pc} +_022092F8: + bl FUN_02208CE0 + mov r0, r5 + bl FUN_02208B28 + movs r4, r0 + ldrmi r0, _02209334 ; =0x02211908 + movmi r1, #1 + strmi r1, [r0] + bmi _02209324 + mov r0, #1 + str r0, [r5] + bl FUN_02208BE4 +_02209324: + bl FUN_02208CCC + mov r0, r4 + add sp, sp, #4 + ldmia sp!, {r4, r5, pc} + .align 2, 0 +_02209334: .word 0x02211908 + + arm_func_start FUN_02209338 +FUN_02209338: ; 0x02209338 + stmdb sp!, {r4, lr} + mov r4, r0 + ldr r0, [r4, #0x34] + bl FUN_022093B0 + ldr r0, [r4, #0x38] + bl FUN_022093B0 + ldr r0, [r4, #0x20] + cmp r0, #0 + beq _02209384 + ldr r0, [r0, #0x800] + cmp r0, #0 + beq _02209374 + ldr r1, _022093AC ; =0x02211904 + ldr r1, [r1] + blx r1 +_02209374: + ldr r1, _022093AC ; =0x02211904 + ldr r0, [r4, #0x20] + ldr r1, [r1] + blx r1 +_02209384: + ldr r1, _022093AC ; =0x02211904 + ldr r0, [r4, #0x24] + ldr r1, [r1] + blx r1 + ldr r1, _022093AC ; =0x02211904 + mov r0, r4 + ldr r1, [r1] + blx r1 + mov r0, #1 + ldmia sp!, {r4, pc} + .align 2, 0 +_022093AC: .word 0x02211904 + + arm_func_start FUN_022093B0 +FUN_022093B0: ; 0x022093B0 + stmdb sp!, {r4, r5, r6, r7, lr} + sub sp, sp, #4 + movs r7, r0 + addeq sp, sp, #4 + ldmeqia sp!, {r4, r5, r6, r7, pc} + ldr r4, _0220940C ; =0x02211904 + mov r5, #0 +_022093CC: + ldr r0, [r7] + cmp r7, r0 + beq _022093EC + ldr r6, [r0] + ldr r1, [r4] + blx r1 + str r6, [r7] + b _022093FC +_022093EC: + ldr r1, [r4] + mov r0, r7 + blx r1 + mov r7, r5 +_022093FC: + cmp r7, #0 + bne _022093CC + add sp, sp, #4 + ldmia sp!, {r4, r5, r6, r7, pc} + .align 2, 0 +_0220940C: .word 0x02211904 + + arm_func_start FUN_02209410 +FUN_02209410: ; 0x02209410 + stmdb sp!, {r4, lr} + ldr r1, _02209434 ; =0x02211904 + mov r4, r0 + ldr r0, [r4, #0x30] + ldr r1, [r1] + blx r1 + mov r0, r4 + bl FUN_02209338 + ldmia sp!, {r4, pc} + .align 2, 0 +_02209434: .word 0x02211904 + + arm_func_start FUN_02209438 +FUN_02209438: ; 0x02209438 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0xc + mov fp, r0 + str r1, [sp] + mov r5, r2 + mov r4, r3 + movs r0, r1 + mov r7, #0 + beq _02209478 + cmp r0, #1 + beq _02209478 + cmp r0, #2 + ldrne r0, _022099A0 ; =0x02211908 + movne r1, #0xb + strne r1, [r0] + bne _02209918 +_02209478: + cmp r4, #0 + ldreq r0, _022099A0 ; =0x02211908 + moveq r1, #0xb + streq r1, [r0] + beq _02209918 + ldr r1, _022099A4 ; =0x02211924 + mov r0, #0x58 + ldr r2, [r1] + mov r1, #4 + blx r2 + movs r7, r0 + ldreq r0, _022099A0 ; =0x02211908 + moveq r1, #1 + streq r1, [r0] + beq _02209918 + mov r1, #0x58 + bl FUN_02209FA8 + ldr r1, _022099A4 ; =0x02211924 + mov r0, #0x420 + ldr r2, [r1] + mov r1, #4 + blx r2 + str r0, [r7, #0x30] + ldr r0, [r7, #0x30] + cmp r0, #0 + ldreq r0, _022099A0 ; =0x02211908 + moveq r1, #1 + streq r1, [r0] + beq _02209918 + mov r1, #0x420 + bl FUN_02209FA8 + ldr r1, [r7, #0x30] + mov r0, fp + str r5, [r1, #0x18] + ldr r1, [r7, #0x30] + str r4, [r1, #0xc] + bl FUN_02209FBC + mov r4, r0 + cmp r4, #7 + ldrle r0, _022099A0 ; =0x02211908 + movle r1, #4 + strle r1, [r0] + ble _02209918 + mov sl, #7 + mov r3, #0x50 + ldr r1, _022099A8 ; =0x0220FA78 + mov r0, fp + mov r2, sl + str r3, [r7, #0x28] + bl FUN_02209FC8 + cmp r0, #0 + beq _02209580 + ldr r1, _022099AC ; =0x0220FA80 + mov r0, fp + mov r2, #8 + bl FUN_02209FC8 + cmp r0, #0 + ldrne r0, _022099A0 ; =0x02211908 + movne r1, #4 + strne r1, [r0] + bne _02209918 + mov r1, #1 + ldr r0, _022099B0 ; =0x000001BB + str r1, [r7, #8] + str r0, [r7, #0x28] + mov sl, #8 +_02209580: + sub r0, r4, sl + cmp r0, #0 + str r0, [sp, #4] + ldrle r0, _022099A0 ; =0x02211908 + movle r1, #4 + add r8, fp, sl + strle r1, [r0] + ble _02209918 + mov sb, #0 + mov r6, sb + mov r5, sb + mov r4, #2 + b _02209614 +_022095B4: + cmp r5, #2 + subeq r5, r5, #1 + beq _02209610 + cmp r5, #1 + bne _02209604 + sub r0, sb, #1 + mov r1, r4 + add r0, r8, r0 + bl FUN_0220B8E4 + mov r0, r0, lsl #0x18 + movs r0, r0, asr #0x18 + ldrmi r0, _022099A0 ; =0x02211908 + movmi r1, #4 + sub r5, r5, #1 + strmi r1, [r0] + bmi _02209918 + cmp r0, #0x2f + bne _02209610 + sub r6, r6, #1 + b _0220962C +_02209604: + cmp r0, #0x25 + moveq r5, r4 + addeq r6, r6, #1 +_02209610: + add sb, sb, #1 +_02209614: + ldr r0, [sp, #4] + cmp sb, r0 + bge _0220962C + ldrsb r0, [r8, sb] + cmp r0, #0x2f + bne _022095B4 +_0220962C: + cmp r5, #0 + ldrne r0, _022099A0 ; =0x02211908 + movne r1, #4 + strne r1, [r0] + bne _02209918 + ldr r0, [sp, #4] + ldr r1, _022099A4 ; =0x02211924 + add r0, sl, r0 + sub r0, r0, r6, lsl #1 + ldr r2, [r1] + add r0, r0, #1 + mov r1, #4 + blx r2 + str r0, [r7, #0x24] + ldr r0, [r7, #0x24] + cmp r0, #0 + ldreq r0, _022099A0 ; =0x02211908 + moveq r1, #1 + streq r1, [r0] + beq _02209918 + mov r1, fp + mov r2, sl + bl FUN_02209F90 + mov r6, #0 + ldr r0, [sp, #4] + mov sb, r6 + mov r5, r6 + str r6, [sp, #8] + cmp r0, #0 + ble _0220973C + mov r4, #1 + mov fp, #2 +_022096AC: + cmp r5, #2 + subeq r5, r5, #1 + beq _0220972C + cmp r5, #1 + bne _022096F8 + sub r0, r6, #1 + mov r1, fp + add r0, r8, r0 + bl FUN_0220B8E4 + mov r0, r0, lsl #0x18 + mov r3, r0, asr #0x18 + add r1, sl, sb + cmp r3, #0x2f + ldr r2, [r7, #0x24] + sub r0, r1, #1 + strb r3, [r2, r0] + sub r5, r5, #1 + streq r4, [sp, #8] + b _0220972C +_022096F8: + ldrsb r2, [r8, r6] + cmp r2, #0x2f + streq r4, [sp, #8] + ldr r0, [sp, #8] + cmp r0, #0 + bne _0220971C + cmp r2, #0x25 + moveq r5, fp + beq _02209728 +_0220971C: + ldr r1, [r7, #0x24] + add r0, sl, sb + strb r2, [r1, r0] +_02209728: + add sb, sb, #1 +_0220972C: + ldr r0, [sp, #4] + add r6, r6, #1 + cmp r6, r0 + blt _022096AC +_0220973C: + ldr r1, [r7, #0x24] + add r0, sl, sb + mov r2, #0 + strb r2, [r1, r0] + ldr r0, [r7, #0x24] + cmp sb, #0 + add r1, r0, sl + ble _02209788 +_0220975C: + ldrsb r0, [r1, r2] + cmp r0, #0x2f + beq _02209770 + cmp r0, #0x3a + bne _0220977C +_02209770: + add r0, r2, sl + str r0, [r7, #0xc] + b _02209788 +_0220977C: + add r2, r2, #1 + cmp r2, sb + blt _0220975C +_02209788: + cmp r2, sb + addeq r0, r2, sl + streq r0, [r7, #0xc] + ldreq r0, [r7, #0xc] + streq r0, [r7, #0x10] + beq _02209840 + ldrsb r0, [r1, r2] + cmp r0, #0x2f + ldreq r0, [r7, #0xc] + streq r0, [r7, #0x10] + beq _02209840 + cmp r0, #0x3a + bne _02209840 + cmp r2, sb + bge _022097E4 +_022097C4: + ldrsb r0, [r1, r2] + cmp r0, #0x2f + addeq r0, r2, sl + streq r0, [r7, #0x10] + beq _022097E4 + add r2, r2, #1 + cmp r2, sb + blt _022097C4 +_022097E4: + cmp r2, sb + addeq r0, r2, sl + streq r0, [r7, #0x10] + beq _02209840 + ldr r1, [r7, #0xc] + ldr r0, [r7, #0x24] + add r2, r1, #1 + ldr r1, [r7, #0x10] + add r0, r0, r2 + sub r1, r1, r2 + bl FUN_0220B688 + cmp r0, #0 + ldrlt r0, [r7, #0x28] + blt _02209834 + ldr r1, _022099B4 ; =0x0000FFFF + cmp r0, r1 + ldrgt r0, _022099A0 ; =0x02211908 + movgt r1, #4 + strgt r1, [r0] + bgt _02209918 +_02209834: + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + str r0, [r7, #0x28] +_02209840: + ldr r0, [r7, #8] + cmp r0, #0 + beq _022098E4 + ldr r0, _022099A4 ; =0x02211924 + ldr r3, [r7, #0xc] + ldr r2, [r0] + mov r0, #0x830 + mov r1, #4 + sub r4, r3, sl + blx r2 + str r0, [r7, #0x20] + ldr r0, [r7, #0x20] + cmp r0, #0 + ldreq r0, _022099A0 ; =0x02211908 + moveq r1, #1 + streq r1, [r0] + beq _02209918 + mov r1, #0x830 + bl FUN_02209FA8 + ldr r1, _022099A4 ; =0x02211924 + add r0, r4, #1 + ldr r2, [r1] + mov r1, #4 + blx r2 + ldr r1, [r7, #0x20] + str r0, [r1, #0x800] + ldr r0, [r7, #0x20] + ldr r0, [r0, #0x800] + cmp r0, #0 + ldreq r0, _022099A0 ; =0x02211908 + moveq r1, #1 + streq r1, [r0] + beq _02209918 + ldr r1, [r7, #0x24] + mov r2, r4 + add r1, r1, sl + bl FUN_02209F90 + ldr r0, [r7, #0x20] + mov r1, #0 + ldr r0, [r0, #0x800] + strb r1, [r0, r4] +_022098E4: + ldr r1, _022099B8 ; =0x0220BDE4 + add r0, r7, #0x44 + mov r2, #0x14 + bl FUN_02209F90 + ldr r0, [sp, #0x34] + ldr r1, [sp, #0x30] + str r0, [r7, #0x2c] + ldr r0, [sp] + add sp, sp, #0xc + str r0, [r7, #0x40] + mov r0, r7 + str r1, [r7, #0x3c] + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +_02209918: + cmp r7, #0 + beq _02209994 + ldr r0, [r7, #0x20] + cmp r0, #0 + beq _02209954 + ldr r0, [r0, #0x800] + cmp r0, #0 + beq _02209944 + ldr r1, _022099BC ; =0x02211904 + ldr r1, [r1] + blx r1 +_02209944: + ldr r1, _022099BC ; =0x02211904 + ldr r0, [r7, #0x20] + ldr r1, [r1] + blx r1 +_02209954: + ldr r0, [r7, #0x24] + cmp r0, #0 + beq _0220996C + ldr r1, _022099BC ; =0x02211904 + ldr r1, [r1] + blx r1 +_0220996C: + ldr r0, [r7, #0x30] + cmp r0, #0 + beq _02209984 + ldr r1, _022099BC ; =0x02211904 + ldr r1, [r1] + blx r1 +_02209984: + ldr r1, _022099BC ; =0x02211904 + mov r0, r7 + ldr r1, [r1] + blx r1 +_02209994: + mov r0, #0 + add sp, sp, #0xc + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_022099A0: .word 0x02211908 +_022099A4: .word 0x02211924 +_022099A8: .word 0x0220FA78 +_022099AC: .word 0x0220FA80 +_022099B0: .word 0x000001BB +_022099B4: .word 0x0000FFFF +_022099B8: .word 0x0220BDE4 +_022099BC: .word 0x02211904 + + arm_func_start FUN_022099C0 +FUN_022099C0: ; 0x022099C0 + stmdb sp!, {r4, r5, r6, lr} + sub sp, sp, #8 + mov r5, r0 + ldr r2, [r5, #0x24] + ldr r1, [r5, #0xc] + mov r0, #0 + ldrsb r4, [r2, r1] + strb r0, [r2, r1] + ldr r0, [r5, #8] + add r1, sp, #0 + cmp r0, #0 + movne r2, #8 + ldr r0, [r5, #0x24] + moveq r2, #7 + add r6, r0, r2 + mov r0, r6 + bl FUN_0209A224 + cmp r0, #0 + ldrne r0, [sp] + bne _02209A54 + mov r0, r6 + bl FUN_02099D88 + cmp r0, #0 + addeq sp, sp, #8 + moveq r0, #0 + ldmeqia sp!, {r4, r5, r6, pc} + mov r2, r0, lsr #0x18 + mov r1, r0, lsr #8 + mov r3, r0, lsl #8 + mov ip, r0, lsl #0x18 + and r2, r2, #0xff + and r0, r1, #0xff00 + and r1, r3, #0xff0000 + orr r0, r2, r0 + and r2, ip, #0xff000000 + orr r0, r1, r0 + orr r0, r2, r0 +_02209A54: + ldr r2, [r5, #0x24] + ldr r1, [r5, #0xc] + strb r4, [r2, r1] + add sp, sp, #8 + ldmia sp!, {r4, r5, r6, pc} + + arm_func_start FUN_02209A68 +FUN_02209A68: ; 0x02209A68 + ldr r2, [r0, #8] + cmp r2, #0 + beq _02209A80 + ldr r2, [r0, #4] + cmp r2, #0 + bne _02209A88 +_02209A80: + mvn r0, #0 + bx lr +_02209A88: + ldr r2, [r0, #0x18] + str r2, [r1] + ldr r0, [r0, #4] + bx lr + + arm_func_start FUN_02209A98 +FUN_02209A98: ; 0x02209A98 + stmdb sp!, {r4, r5, r6, r7, lr} + sub sp, sp, #4 + mov r7, r0 + ldr r0, [r7, #8] + mov r6, r1 + cmp r0, #0 + mov r5, r2 + addeq sp, sp, #4 + mvneq r0, #0 + ldmeqia sp!, {r4, r5, r6, r7, pc} + ldr r0, [r7, #0x14] + cmp r0, #0 + beq _02209AE0 + ldr r1, _02209BAC ; =0x02211904 + ldr r1, [r1] + blx r1 + mov r0, #0 + str r0, [r7, #0x14] +_02209AE0: + add r2, sp, #0 + mov r0, r7 + mov r1, r6 + bl FUN_02209BB8 + movs r4, r0 + bmi _02209B44 + ldr r1, _02209BB0 ; =0x02211924 + add r0, r4, #1 + ldr r2, [r1] + mov r1, #4 + blx r2 + str r0, [r7, #0x14] + ldr r0, [r7, #0x14] + mov r1, #0 + strb r1, [r0, r4] + ldr r1, [r7, #0x14] + ldr r2, [sp] + mov r0, r7 + mov r3, r4 + bl FUN_02208DCC + ldr r1, [r7, #0x14] + add sp, sp, #4 + mov r0, r4 + str r1, [r5] + ldmia sp!, {r4, r5, r6, r7, pc} +_02209B44: + ldr r0, _02209BB4 ; =0x0220FA8C + mov r1, r6 + bl FUN_0220A038 + cmp r0, #0 + addne sp, sp, #4 + mvnne r0, #0 + ldmneia sp!, {r4, r5, r6, r7, pc} + ldr r1, _02209BB0 ; =0x02211924 + mov r0, #4 + ldr r2, [r1] + mov r1, r0 + blx r2 + str r0, [r7, #0x14] + ldr r0, [r7, #0x14] + mov r1, #0 + strb r1, [r0, #3] + ldr r1, [r7, #0x14] + mov r0, r7 + mov r2, #9 + mov r3, #3 + bl FUN_02208DCC + ldr r1, [r7, #0x14] + mov r0, #3 + str r1, [r5] + add sp, sp, #4 + ldmia sp!, {r4, r5, r6, r7, pc} + .align 2, 0 +_02209BAC: .word 0x02211904 +_02209BB0: .word 0x02211924 +_02209BB4: .word 0x0220FA8C + + arm_func_start FUN_02209BB8 +FUN_02209BB8: ; 0x02209BB8 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} + sub sp, sp, #8 + mov r5, r0 + mov r4, r2 + mov sl, r1 + ldr r2, [r5] + add r3, sp, #4 + mov r1, #0xc + bl FUN_02209014 + mov sb, r0 + cmp sb, #0 + ble _02209CB8 + add r7, sp, #4 + mov r6, #0 +_02209BF0: + ldr r2, [r5] + mov r0, r5 + mov r1, sb + mov r3, r7 + bl FUN_02209014 + ldr r2, [sp, #4] + mov r8, r0 + cmp r2, #0 + ble _02209CAC + mov r0, r5 + mov r1, sb + mov r3, sl + str r6, [sp] + bl FUN_02208EC4 + cmp r0, #0 + bne _02209CAC + ldr r1, [sp, #4] + ldr r0, [r5] + add r1, r1, #1 + cmp r1, r0 + bge _02209CA0 + ldr r2, [r5] + mov r0, r5 + mov r3, #0 + bl FUN_02209014 + cmp r0, #0 + ldrle r6, [r5] + ble _02209C74 + cmp r0, #2 + addlt sp, sp, #8 + mvnlt r0, #0 + ldmltia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + sub r6, r0, #2 +_02209C74: + ldr r1, [sp, #4] + mov r0, r5 + mov r2, r6 + add r1, r1, #1 + bl FUN_02208FA4 + cmp r0, #0 + movlt r0, r6 + str r0, [r4] + add sp, sp, #8 + sub r0, r6, r0 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} +_02209CA0: + add sp, sp, #8 + mov r0, #0 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} +_02209CAC: + mov sb, r8 + cmp r8, #0 + bgt _02209BF0 +_02209CB8: + mvn r0, #0 + add sp, sp, #8 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + + arm_func_start FUN_02209CC4 +FUN_02209CC4: ; 0x02209CC4 + stmdb sp!, {r4, r5, r6, lr} + mov r4, r0 + ldr r0, [r4, #0x1c] + cmp r0, #0 + beq _02209CF8 + ldr r5, _02209D3C ; =0x02211904 +_02209CDC: + ldr r6, [r0] + ldr r1, [r5] + blx r1 + str r6, [r4, #0x1c] + ldr r0, [r4, #0x1c] + cmp r0, #0 + bne _02209CDC +_02209CF8: + ldr r0, [r4, #0x10] + cmp r0, #0 + beq _02209D10 + ldr r1, _02209D3C ; =0x02211904 + ldr r1, [r1] + blx r1 +_02209D10: + ldr r0, [r4, #0x14] + cmp r0, #0 + beq _02209D28 + ldr r1, _02209D3C ; =0x02211904 + ldr r1, [r1] + blx r1 +_02209D28: + ldr r1, _02209D3C ; =0x02211904 + mov r0, r4 + ldr r1, [r1] + blx r1 + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +_02209D3C: .word 0x02211904 + + arm_func_start FUN_02209D40 +FUN_02209D40: ; 0x02209D40 + stmdb sp!, {lr} + sub sp, sp, #4 + cmp r1, #0 + addlt sp, sp, #4 + ldmltia sp!, {pc} + mov r0, r1 + mov r1, #2 + bl thunk_FUN_020995dc + add sp, sp, #4 + ldmfd sp!, {pc} + + arm_func_start FUN_02209D68 +FUN_02209D68: ; 0x02209D68 + stmdb sp!, {r4, lr} + mov r4, r0 + mov r0, r1 + mov r1, r2 + mov r2, r3 + ldr r3, [sp, #8] + bl FUN_0209A858 + cmp r0, #0 + ldmgeia sp!, {r4, pc} + ldr r1, [r4, #4] + cmp r1, #0 + ldrne r0, _02209DB0 ; =0xFFFFFC16 + ldmneia sp!, {r4, pc} + mvn r1, #0x37 + cmp r0, r1 + moveq r0, #0 + mvnne r0, #0x3e8 + ldmia sp!, {r4, pc} + .align 2, 0 +_02209DB0: .word 0xFFFFFC16 + + arm_func_start FUN_02209DB4 +FUN_02209DB4: ; 0x02209DB4 + stmdb sp!, {r4, lr} + mov r4, r0 + mov r0, r1 + mov r1, r2 + mov r2, r3 + ldr r3, [sp, #8] + bl FUN_0209A91C + cmp r0, #0 + ldmgeia sp!, {r4, pc} + ldr r1, [r4, #4] + cmp r1, #0 + ldrne r0, _02209DFC ; =0xFFFFFC16 + ldmneia sp!, {r4, pc} + mvn r1, #0x37 + cmp r0, r1 + moveq r0, #0 + mvnne r0, #0x3e8 + ldmia sp!, {r4, pc} + .align 2, 0 +_02209DFC: .word 0xFFFFFC16 + + arm_func_start FUN_02209E00 +FUN_02209E00: ; 0x02209E00 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #0xc + mov r3, r3, lsl #0x10 + mov r3, r3, lsr #0x10 + mov ip, r3, asr #8 + mov r4, r0 + mov r5, #8 + mov lr, #2 + mov r3, r3, lsl #8 + mov r0, r1 + and ip, ip, #0xff + and r1, r3, #0xff00 + orr r3, ip, r1 + add r1, sp, #0 + strb r5, [sp] + strb lr, [sp, #1] + strh r3, [sp, #2] + str r2, [sp, #4] + bl FUN_0209A944 + cmp r0, #0 + bge _02209E6C + ldr r0, [r4, #4] + add sp, sp, #0xc + cmp r0, #0 + ldrne r0, _02209E78 ; =0xFFFFFC16 + mvneq r0, #0x3e8 + ldmia sp!, {r4, r5, pc} +_02209E6C: + mov r0, #0 + add sp, sp, #0xc + ldmia sp!, {r4, r5, pc} + .align 2, 0 +_02209E78: .word 0xFFFFFC16 + + arm_func_start FUN_02209E7C +FUN_02209E7C: ; 0x02209E7C + stmdb sp!, {r4, r5, r6, r7, r8, lr} + mov r8, r1 + mov r0, r8 + bl thunk_FUN_0209996c + cmp r0, #0 + ldmneia sp!, {r4, r5, r6, r7, r8, pc} + mov r7, #0 + mov r6, #0x1f4 + ldr r4, _02209ED0 ; =0x00002710 + mvn r5, #0x19 + b _02209EB4 +_02209EA8: + mov r0, r6 + bl OS_Sleep + add r7, r7, #0x1f4 +_02209EB4: + mov r0, r8 + bl thunk_FUN_0209996c + cmp r0, r5 + ldmneia sp!, {r4, r5, r6, r7, r8, pc} + cmp r7, r4 + ble _02209EA8 + ldmia sp!, {r4, r5, r6, r7, r8, pc} + .align 2, 0 +_02209ED0: .word 0x00002710 + + arm_func_start FUN_02209ED4 +FUN_02209ED4: ; 0x02209ED4 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #4 + mov r5, r0 + mov r0, #2 + mov r1, #1 + mov r2, #0 + bl FUN_0209A9D0 + movs r4, r0 + bmi _02209F4C + ldr r0, [r5, #8] + cmp r0, #0 + beq _02209F4C + bl FUN_02209F5C + ldr r1, [r5, #0x1c] + ldr r0, [r5, #0x20] + ldr r2, _02209F58 ; =FUN_02209F84 + str r1, [r0, #0x814] + ldr r3, [r5, #0x18] + ldr r1, [r5, #0x20] + mov r0, r4 + str r3, [r1, #0x818] + ldr r1, [r5, #0x20] + str r2, [r1, #0x810] + ldr r1, [r5, #0x20] + bl FUN_0209AAD0 + cmp r0, #0 + bge _02209F4C + mov r0, r4 + bl thunk_FUN_0209996c + mvn r4, #0 +_02209F4C: + mov r0, r4 + add sp, sp, #4 + ldmia sp!, {r4, r5, pc} + .align 2, 0 +_02209F58: .word FUN_02209F84 + + arm_func_start FUN_02209F5C +FUN_02209F5C: ; 0x02209F5C + stmdb sp!, {lr} + sub sp, sp, #4 + ldr r0, _02209F80 ; =0x02211A24 + bl OS_GetLowEntropyData + ldr r0, _02209F80 ; =0x02211A24 + mov r1, #0x20 + bl FUN_020A136C + add sp, sp, #4 + ldmfd sp!, {pc} + .align 2, 0 +_02209F80: .word 0x02211A24 + + arm_func_start FUN_02209F84 +FUN_02209F84: ; 0x02209F84 + ands r1, r0, #0x8000 + bicne r0, r0, #0x8000 + bx lr + + arm_func_start FUN_02209F90 +FUN_02209F90: ; 0x02209F90 + ldr ip, _02209FA4 ; =0x020CE3E0 + mov r3, r0 + mov r0, r1 + mov r1, r3 + bx ip + .align 2, 0 +_02209FA4: .word 0x020CE3E0 + + arm_func_start FUN_02209FA8 +FUN_02209FA8: ; 0x02209FA8 + ldr ip, _02209FB8 ; =0x020CE34C + mov r2, r1 + mov r1, #0 + bx ip + .align 2, 0 +_02209FB8: .word 0x020CE34C + + arm_func_start FUN_02209FBC +FUN_02209FBC: ; 0x02209FBC + ldr ip, _02209FC4 ; =0x020DE0BC + bx ip + .align 2, 0 +_02209FC4: .word 0x020DE0BC + + arm_func_start FUN_02209FC8 +FUN_02209FC8: ; 0x02209FC8 + cmp r2, #0 + ble _0220A030 +_02209FD0: + ldrsb ip, [r0], #1 + ldrsb r3, [r1], #1 + cmp ip, #0 + beq _02209FE8 + cmp r3, #0 + bne _02209FFC +_02209FE8: + cmp ip, #0 + bne _0220A030 + cmp r3, #0 + moveq r2, #0 + b _0220A030 +_02209FFC: + cmp r3, #0x41 + blt _0220A00C + cmp r3, #0x5a + addle r3, r3, #0x20 +_0220A00C: + cmp ip, #0x41 + blt _0220A01C + cmp ip, #0x5a + addle ip, ip, #0x20 +_0220A01C: + cmp ip, r3 + bne _0220A030 + sub r2, r2, #1 + cmp r2, #0 + bgt _02209FD0 +_0220A030: + mov r0, r2 + bx lr + + arm_func_start FUN_0220A038 +FUN_0220A038: ; 0x0220A038 + ldr ip, _0220A040 ; =0x020DE090 + bx ip + .align 2, 0 +_0220A040: .word 0x020DE090 + + arm_func_start FUN_0220A044 +FUN_0220A044: ; 0x0220A044 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x124 + mov r0, #0 + str r0, [sp, #0x14] + ldr r0, _0220AFFC ; =0x02211918 + mvn r5, #0 + ldr r1, [r0] + ldr r0, [sp, #0x14] + str r5, [sp, #0x10] + str r0, [sp, #8] + str r0, [sp, #0x18] + cmp r1, #0 + addne sp, sp, #0x124 + ldmneia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + mov r0, #0x26 + str r0, [sp, #0x74] + mov r0, #3 + str r0, [sp, #0x3c] + mov r0, #0x4b + str r0, [sp, #0x78] + mov r0, #0x14 + str r0, [sp, #0x70] + mov r0, #1 + str r0, [sp, #0x2c] + ldr r0, [sp, #0x14] + add r8, sp, #0x108 + str r0, [sp, #0x80] + str r0, [sp, #0x7c] + str r0, [sp, #0x84] + mov r0, #4 + str r0, [sp, #0x24] + mov r0, #0x10 + str r0, [sp, #0x6c] + mov r0, #0x31 + str r0, [sp, #0x68] + mov r0, #0x12 + str r0, [sp, #0x64] + ldr r0, [sp, #0x14] + mov r7, #2 + str r0, [sp, #0x5c] + mov r0, #0x2c + str r0, [sp, #0x60] + mov r0, #7 + str r0, [sp, #0x54] + mov r0, #8 + str r0, [sp, #0x50] + mov r0, #6 + str r0, [sp, #0x58] + mov r0, #0xb + str r0, [sp, #0x4c] + mov r0, #5 + str r0, [sp, #0x44] + mov r0, #0xa + str r0, [sp, #0x34] + ldr r0, [sp, #0x14] + add r6, sp, #0x114 + str r0, [sp, #0x40] + str r0, [sp, #0x48] + str r0, [sp, #0x30] + mov r0, #0x204 + str r0, [sp, #0x90] + ldr r0, [sp, #0x14] + str r5, [sp, #0x38] + str r0, [sp, #0x94] + str r0, [sp, #0x98] + str r0, [sp, #0x8c] + str r0, [sp, #0xe0] + str r0, [sp, #0xe8] + str r0, [sp, #0xe4] + str r0, [sp, #0xdc] + str r0, [sp, #0xf8] + str r0, [sp, #0xf0] + str r0, [sp, #0x28] + str r0, [sp, #0x88] + str r0, [sp, #0xb8] + str r0, [sp, #0xbc] + str r0, [sp, #0xc0] + str r0, [sp, #0xb4] + str r0, [sp, #0xb0] + mov r0, #0x3b + str r0, [sp, #0xc8] + ldr r0, [sp, #0x14] + str r5, [sp, #0x20] + str r0, [sp, #0xcc] + str r0, [sp, #0xd0] + str r0, [sp, #0xc4] + str r0, [sp, #0xd4] + str r0, [sp, #0xf4] + str r0, [sp, #0xec] + str r0, [sp, #0xd8] + str r0, [sp, #0xa8] + mov r0, #0xc + str r0, [sp, #0xa4] + ldr r0, [sp, #0x14] + str r5, [sp, #0xac] + str r0, [sp, #0x9c] + mov r0, #0xe + str r0, [sp, #0xa0] + ldr r0, [sp, #0x14] + str r5, [sp, #0x100] + str r0, [sp, #0xfc] + str r0, [sp, #0x104] +_0220A1DC: + bl FUN_02208CE0 + bl FUN_022089E0 + cmp r0, #0 + ldrne sb, [r0, #8] + ldrne r4, [r0, #0xc] + ldrne r1, _0220B000 ; =0x02211914 + ldreq sb, [sp, #0x20] + strne r0, [r1] + bl FUN_02208CCC + cmp sb, #0 + bge _0220A210 + bl FUN_02208C00 + b _0220B3E8 +_0220A210: + ldr fp, [r4, #0x30] + ldr r0, [r4, #4] + cmp r0, #0 + bne _0220B348 + mov r0, r4 + bl FUN_022099C0 + str r0, [sp, #0xc] + cmp r0, #0 + ldreq r0, [sp, #0x24] + streq r0, [sp, #4] + beq _0220B348 + mov r1, r0 + ldr r0, [sp, #0x10] + ldr r2, [sp, #0x28] + cmp r1, r0 + bne _0220A268 + ldr r1, [r4, #8] + ldr r0, [sp, #0x18] + cmp r1, r0 + bne _0220A268 + cmp r1, #0 + ldreq r2, [sp, #0x2c] +_0220A268: + ldr r0, [sp, #8] + and r0, r0, r2 + str r0, [sp, #8] + ldr r0, [sp, #0xc] + str r0, [sp, #0x10] + ldr r0, [r4, #8] + str r0, [sp, #0x18] +_0220A284: + ldr r0, [sp, #8] + cmp r0, #0 + ldr r0, [sp, #0x30] + str r0, [sp, #4] + bne _0220A32C + cmp r5, #0 + blt _0220A2C8 + mov r1, r5 + mov r0, r4 + bl FUN_02209E7C + cmp r0, #0 + ldrlt r0, [sp, #0x34] + ldr r5, [sp, #0x38] + strlt r0, [sp, #4] + ldr r0, [sp, #4] + cmp r0, #0 + bne _0220B348 +_0220A2C8: + mov r0, r4 + bl FUN_02209ED4 + movs r5, r0 + ldrmi r0, [sp, #0x3c] + strmi r0, [sp, #4] + bmi _0220B348 + bl FUN_02208CE0 + ldr r0, _0220B000 ; =0x02211914 + ldr r0, [r0] + str r5, [r0, #0x10] + bl FUN_02208CCC + ldr r0, [r4, #4] + cmp r0, #0 + bne _0220B348 + ldr r2, [sp, #0xc] + ldr r3, [r4, #0x28] + mov r0, r4 + mov r1, r5 + bl FUN_02209E00 + cmp r0, #0 + ldrge r0, [sp, #0x2c] + strge r0, [sp, #8] + ldrlt r0, [sp, #0x40] + strlt r0, [sp, #8] + b _0220A344 +_0220A32C: + bl FUN_02209F5C + bl FUN_02208CE0 + ldr r0, _0220B000 ; =0x02211914 + ldr r0, [r0] + str r5, [r0, #0x10] + bl FUN_02208CCC +_0220A344: + ldr r0, [r4, #4] + cmp r0, #0 + bne _0220B348 + ldr r0, [sp, #8] + cmp r0, #0 + ldreq r0, [sp, #0x44] + streq r0, [sp, #4] + beq _0220B348 + ldr r0, [sp, #0x48] + str r0, [sp, #0x108] + str r0, [sp, #8] + ldr r0, [r4, #0x24] + bl FUN_02209FBC + mov sb, r0 + ldr r0, [sp, #0x34] + str r0, [sp, #4] + ldr r0, [r4, #0x40] + cmp r0, #0 + beq _0220A3A4 + cmp r0, #1 + beq _0220A3D4 + cmp r0, #2 + beq _0220A404 + b _0220A430 +_0220A3A4: + ldr r0, [sp, #0x24] + ldr r3, _0220B004 ; =0x0220FA9C + str r0, [sp] + mov r0, r4 + mov r1, r5 + mov r2, r8 + bl FUN_0220B490 + cmp r0, #0 + blt _0220B348 + cmp r0, #0 + bne _0220A430 + b _0220A284 +_0220A3D4: + ldr r0, [sp, #0x44] + ldr r3, _0220B008 ; =0x0220FAA4 + str r0, [sp] + mov r0, r4 + mov r1, r5 + mov r2, r8 + bl FUN_0220B490 + cmp r0, #0 + blt _0220B348 + cmp r0, #0 + bne _0220A430 + b _0220A284 +_0220A404: + ldr r0, [sp, #0x44] + ldr r3, _0220B00C ; =0x0220FAAC + str r0, [sp] + mov r0, r4 + mov r1, r5 + mov r2, r8 + bl FUN_0220B490 + cmp r0, #0 + blt _0220B348 + cmp r0, #0 + beq _0220A284 +_0220A430: + ldr sl, [r4, #0x10] + cmp sb, sl + ble _0220A474 + subs r0, sb, sl + beq _0220A4A0 + str r0, [sp] + mov r0, r4 + mov r1, r5 + mov r2, r8 + ldr r3, [r4, #0x24] + add r3, r3, sl + bl FUN_0220B490 + cmp r0, #0 + blt _0220B348 + cmp r0, #0 + bne _0220A4A0 + b _0220A284 +_0220A474: + ldr r0, [sp, #0x2c] + ldr r3, _0220B010 ; =0x0220FAB4 + str r0, [sp] + mov r0, r4 + mov r1, r5 + mov r2, r8 + bl FUN_0220B490 + cmp r0, #0 + blt _0220B348 + cmp r0, #0 + beq _0220A284 +_0220A4A0: + ldr r0, [sp, #0x4c] + ldr r3, _0220B014 ; =0x0220FAB8 + str r0, [sp] + mov r0, r4 + mov r1, r5 + mov r2, r8 + bl FUN_0220B490 + cmp r0, #0 + blt _0220B348 + cmp r0, #0 + beq _0220A284 + ldr r0, [r4, #8] + ldr r3, _0220B018 ; =0x0220FAC4 + cmp r0, #0 + ldrne r0, [sp, #0x50] + mov r1, r5 + ldreq r0, [sp, #0x54] + mov r2, r8 + str r0, [sp, #0x10c] + ldr r0, [sp, #0x58] + str r0, [sp] + mov r0, r4 + bl FUN_0220B490 + cmp r0, #0 + blt _0220B348 + cmp r0, #0 + beq _0220A284 + ldr sb, [sp, #0x10c] + ldr r0, [r4, #0xc] + subs r0, r0, sb + beq _0220A548 + str r0, [sp] + mov r0, r4 + mov r1, r5 + mov r2, r8 + ldr r3, [r4, #0x24] + add r3, r3, sb + bl FUN_0220B490 + cmp r0, #0 + blt _0220B348 + cmp r0, #0 + beq _0220A284 +_0220A548: + ldr r3, _0220B01C ; =0x0220FACC + mov r0, r4 + mov r1, r5 + mov r2, r8 + str r7, [sp] + bl FUN_0220B490 + cmp r0, #0 + blt _0220B348 + cmp r0, #0 + beq _0220A284 + add r0, r4, #0x34 + bl FUN_02208888 + movs sb, r0 + beq _0220A660 +_0220A580: + ldr r0, [sb, #8] + bl FUN_02209FBC + cmp r0, #0 + beq _0220A5B8 + str r0, [sp] + mov r0, r4 + mov r1, r5 + mov r2, r8 + ldr r3, [sb, #8] + bl FUN_0220B490 + cmp r0, #0 + blt _0220B348 + cmp r0, #0 + beq _0220A284 +_0220A5B8: + ldr r3, _0220B020 ; =0x0220FAD0 + mov r0, r4 + mov r1, r5 + mov r2, r8 + str r7, [sp] + bl FUN_0220B490 + cmp r0, #0 + blt _0220B348 + cmp r0, #0 + beq _0220A284 + ldr r0, [sb, #0xc] + bl FUN_02209FBC + cmp r0, #0 + beq _0220A618 + str r0, [sp] + mov r0, r4 + mov r1, r5 + mov r2, r8 + ldr r3, [sb, #0xc] + bl FUN_0220B490 + cmp r0, #0 + blt _0220B348 + cmp r0, #0 + beq _0220A284 +_0220A618: + ldr r3, _0220B01C ; =0x0220FACC + mov r0, r4 + mov r1, r5 + mov r2, r8 + str r7, [sp] + bl FUN_0220B490 + cmp r0, #0 + blt _0220B348 + cmp r0, #0 + beq _0220A284 + ldr r1, _0220B024 ; =0x02211904 + mov r0, sb + ldr r1, [r1] + blx r1 + add r0, r4, #0x34 + bl FUN_02208888 + movs sb, r0 + bne _0220A580 +_0220A660: + ldr r0, [r4, #0x40] + cmp r0, #1 + bne _0220A8A0 + ldr sl, [sp, #0x5c] + ldr sb, [r4, #0x38] + mov r0, sl + str r0, [sp, #0x14] + cmp sb, #0 + mov r1, sb + beq _0220A6B4 +_0220A688: + ldr r0, [r1, #0x14] + cmp r0, #0 + ldrne r0, [sp, #0x2c] + strne r0, [sp, #0x14] + bne _0220A6B4 + ldr r0, [sb] + cmp r1, r0 + beq _0220A6B4 + ldr r1, [r1, #4] + cmp r1, #0 + bne _0220A688 +_0220A6B4: + ldr r0, [sp, #0x14] + cmp r0, #0 + beq _0220A79C + cmp sb, #0 + beq _0220A714 +_0220A6C8: + ldr r0, [sb, #8] + add sl, sl, #0x16 + bl FUN_02209FBC + add r0, r0, #0x29 + add sl, sl, r0 + ldr r0, [sb, #0x14] + ldr r1, [sb, #0x10] + cmp r0, #0 + ldr r0, [r4, #0x38] + addne sl, sl, #0x4b + add r2, sl, #2 + ldr r0, [r0] + add r1, r2, r1 + add sl, r1, #2 + cmp sb, r0 + beq _0220A714 + ldr sb, [sb, #4] + cmp sb, #0 + bne _0220A6C8 +_0220A714: + ldr r0, [sp, #0x60] + ldr r3, _0220B028 ; =0x0220FAD4 + str r0, [sp] + mov r0, r4 + mov r1, r5 + mov r2, r8 + add sl, sl, #0x18 + bl FUN_0220B490 + cmp r0, #0 + blt _0220B348 + cmp r0, #0 + beq _0220A284 + ldr r0, [sp, #0x64] + mov r1, r5 + str r0, [sp] + mov r0, r4 + mov r2, r8 + add r3, r4, #0x46 + bl FUN_0220B490 + cmp r0, #0 + blt _0220B348 + cmp r0, #0 + beq _0220A284 + ldr r3, _0220B01C ; =0x0220FACC + mov r0, r4 + mov r1, r5 + mov r2, r8 + str r7, [sp] + bl FUN_0220B490 + cmp r0, #0 + blt _0220B348 + cmp r0, #0 + bne _0220A80C + b _0220A284 +_0220A79C: + cmp sb, #0 + beq _0220A7E0 +_0220A7A4: + ldr r0, [sb, #8] + bl FUN_0220BA58 + add r0, sl, r0 + add sl, r0, #1 + ldr r0, [sb, #0xc] + bl FUN_0220BA58 + add sl, sl, r0 + ldr r0, [r4, #0x38] + ldr r0, [r0] + cmp sb, r0 + beq _0220A7E0 + add sl, sl, #1 + ldr sb, [sb, #4] + cmp sb, #0 + bne _0220A7A4 +_0220A7E0: + ldr r0, [sp, #0x68] + ldr r3, _0220B02C ; =0x0220FB04 + str r0, [sp] + mov r0, r4 + mov r1, r5 + mov r2, r8 + bl FUN_0220B490 + cmp r0, #0 + blt _0220B348 + cmp r0, #0 + beq _0220A284 +_0220A80C: + ldr r0, [sp, #0x6c] + ldr r3, _0220B030 ; =0x0220FB38 + str r0, [sp] + mov r0, r4 + mov r1, r5 + mov r2, r8 + bl FUN_0220B490 + cmp r0, #0 + blt _0220B348 + cmp r0, #0 + beq _0220A284 + mov r1, sl + mov r0, r6 + bl FUN_0220B788 + str r0, [sp, #0x10c] + cmp r0, #0 + beq _0220A878 + str r0, [sp] + mov r0, r4 + mov r1, r5 + mov r2, r8 + mov r3, r6 + bl FUN_0220B490 + cmp r0, #0 + blt _0220B348 + cmp r0, #0 + beq _0220A284 +_0220A878: + ldr r3, _0220B01C ; =0x0220FACC + mov r0, r4 + mov r1, r5 + mov r2, r8 + str r7, [sp] + bl FUN_0220B490 + cmp r0, #0 + blt _0220B348 + cmp r0, #0 + beq _0220A284 +_0220A8A0: + ldr r3, _0220B01C ; =0x0220FACC + mov r0, r4 + mov r1, r5 + mov r2, r8 + str r7, [sp] + bl FUN_0220B490 + cmp r0, #0 + blt _0220B348 + cmp r0, #0 + beq _0220A284 + ldr r0, [r4, #0x40] + cmp r0, #1 + bne _0220AC54 + ldr r0, [sp, #0x14] + cmp r0, #0 + beq _0220AB04 + ldr sb, [r4, #0x38] + cmp sb, #0 + beq _0220AAA8 +_0220A8EC: + ldr r0, [sp, #0x70] + mov r1, r5 + str r0, [sp] + mov r0, r4 + mov r2, r8 + add r3, r4, #0x44 + bl FUN_0220B490 + cmp r0, #0 + blt _0220B348 + cmp r0, #0 + beq _0220A284 + ldr r3, _0220B01C ; =0x0220FACC + mov r0, r4 + mov r1, r5 + mov r2, r8 + str r7, [sp] + bl FUN_0220B490 + cmp r0, #0 + blt _0220B348 + cmp r0, #0 + beq _0220A284 + ldr r0, [sp, #0x74] + ldr r3, _0220B034 ; =0x0220BDFC + str r0, [sp] + mov r0, r4 + mov r1, r5 + mov r2, r8 + bl FUN_0220B490 + cmp r0, #0 + blt _0220B348 + cmp r0, #0 + beq _0220A284 + ldr r0, [sb, #8] + bl FUN_02209FBC + cmp r0, #0 + beq _0220A9A4 + str r0, [sp] + mov r0, r4 + mov r1, r5 + mov r2, r8 + ldr r3, [sb, #8] + bl FUN_0220B490 + cmp r0, #0 + blt _0220B348 + cmp r0, #0 + beq _0220A284 +_0220A9A4: + ldr r0, [sp, #0x3c] + ldr r3, _0220B038 ; =0x0220FB4C + str r0, [sp] + mov r0, r4 + mov r1, r5 + mov r2, r8 + bl FUN_0220B490 + cmp r0, #0 + blt _0220B348 + cmp r0, #0 + beq _0220A284 + ldr r0, [sb, #0x14] + cmp r0, #0 + beq _0220AA08 + ldr r0, [sp, #0x78] + ldr r3, _0220B03C ; =0x0220BE24 + str r0, [sp] + mov r0, r4 + mov r1, r5 + mov r2, r8 + bl FUN_0220B490 + cmp r0, #0 + blt _0220B348 + cmp r0, #0 + beq _0220A284 +_0220AA08: + ldr r3, _0220B01C ; =0x0220FACC + mov r0, r4 + mov r1, r5 + mov r2, r8 + str r7, [sp] + bl FUN_0220B490 + cmp r0, #0 + blt _0220B348 + cmp r0, #0 + beq _0220A284 + ldr r0, [sb, #0x10] + cmp r0, #0 + beq _0220AA64 + str r0, [sp] + mov r0, r4 + mov r1, r5 + mov r2, r8 + ldr r3, [sb, #0xc] + bl FUN_0220B490 + cmp r0, #0 + blt _0220B348 + cmp r0, #0 + beq _0220A284 +_0220AA64: + ldr r3, _0220B01C ; =0x0220FACC + mov r0, r4 + mov r1, r5 + mov r2, r8 + str r7, [sp] + bl FUN_0220B490 + cmp r0, #0 + blt _0220B348 + cmp r0, #0 + beq _0220A284 + ldr r0, [r4, #0x38] + ldr r0, [r0] + cmp sb, r0 + beq _0220AAA8 + ldr sb, [sb, #4] + cmp sb, #0 + bne _0220A8EC +_0220AAA8: + ldr r0, [sp, #0x70] + mov r1, r5 + str r0, [sp] + mov r0, r4 + mov r2, r8 + add r3, r4, #0x44 + bl FUN_0220B490 + cmp r0, #0 + blt _0220B348 + cmp r0, #0 + beq _0220A284 + ldr r0, [sp, #0x24] + ldr r3, _0220B040 ; =0x0220FB50 + str r0, [sp] + mov r0, r4 + mov r1, r5 + mov r2, r8 + bl FUN_0220B490 + cmp r0, #0 + blt _0220B348 + cmp r0, #0 + bne _0220AC54 + b _0220A284 +_0220AB04: + ldr sl, [r4, #0x38] + cmp sl, #0 + beq _0220AC54 +_0220AB10: + ldr r1, [sl, #8] + ldr sb, [sp, #0x7c] + ldrsb r0, [r1] + cmp r0, #0 + beq _0220AB78 +_0220AB24: + ldrsb r1, [r1, sb] + mov r0, r6 + bl FUN_0220B9CC + str r0, [sp, #0x10c] + cmp r0, #0 + beq _0220AB64 + str r0, [sp] + mov r0, r4 + mov r1, r5 + mov r2, r8 + mov r3, r6 + bl FUN_0220B490 + cmp r0, #0 + blt _0220B348 + cmp r0, #0 + beq _0220A284 +_0220AB64: + add sb, sb, #1 + ldr r1, [sl, #8] + ldrsb r0, [r1, sb] + cmp r0, #0 + bne _0220AB24 +_0220AB78: + ldr r0, [sp, #0x2c] + ldr r3, _0220B044 ; =0x0220FB58 + str r0, [sp] + mov r0, r4 + mov r1, r5 + mov r2, r8 + bl FUN_0220B490 + cmp r0, #0 + blt _0220B348 + cmp r0, #0 + beq _0220A284 + ldr r1, [sl, #0xc] + ldr sb, [sp, #0x80] + ldrsb r0, [r1] + cmp r0, #0 + beq _0220AC0C +_0220ABB8: + ldrsb r1, [r1, sb] + mov r0, r6 + bl FUN_0220B9CC + str r0, [sp, #0x10c] + cmp r0, #0 + beq _0220ABF8 + str r0, [sp] + mov r0, r4 + mov r1, r5 + mov r2, r8 + mov r3, r6 + bl FUN_0220B490 + cmp r0, #0 + blt _0220B348 + cmp r0, #0 + beq _0220A284 +_0220ABF8: + add sb, sb, #1 + ldr r1, [sl, #0xc] + ldrsb r0, [r1, sb] + cmp r0, #0 + bne _0220ABB8 +_0220AC0C: + ldr r0, [r4, #0x38] + ldr r0, [r0] + cmp sl, r0 + beq _0220AC54 + ldr r0, [sp, #0x2c] + ldr r3, _0220B048 ; =0x0220FB5C + str r0, [sp] + mov r0, r4 + mov r1, r5 + mov r2, r8 + bl FUN_0220B490 + cmp r0, #0 + blt _0220B348 + cmp r0, #0 + beq _0220A284 + ldr sl, [sl, #4] + cmp sl, #0 + bne _0220AB10 +_0220AC54: + ldr r3, [sp, #0x108] + cmp r3, #0 + ble _0220AC88 + ldr r0, [sp, #0x84] + ldr r2, _0220B04C ; =0x02211A44 + str r0, [sp] + mov r0, r4 + mov r1, r5 + bl FUN_02209D68 + cmp r0, #0 + blt _0220B348 + cmp r0, #0 + beq _0220A284 +_0220AC88: + ldr r0, [sp, #0x88] + str r0, [fp] + strb r0, [sp, #0x114] + strb r0, [sp, #0x115] + strb r0, [sp, #0x116] + strb r0, [sp, #0x117] + ldr r0, [sp, #0x54] + ldr sb, [fp, #0x1c] + str r0, [sp, #4] + ldr r0, [sp, #0x88] + str r0, [sp, #0x108] +_0220ACB4: + ldr r0, [r4, #4] + cmp r0, #0 + bne _0220B348 + ldr r3, [sp, #0x108] + cmp r3, #0x400 + bge _0220AD04 + ldr r0, [sp, #0x8c] + add r2, fp, #0x20 + add r2, r2, r3 + str r0, [sp] + ldr r3, [sp, #0x2c] + mov r0, r4 + mov r1, r5 + bl FUN_02209DB4 + ldr r3, [sp, #0x108] + add r1, fp, r3 + ldrsb r2, [r1, #0x20] + and r1, r3, #3 + strb r2, [r6, r1] + b _0220ADA0 +_0220AD04: + ldr r0, _0220B050 ; =0x000001FF + ands sl, r3, r0 + bne _0220AD6C + cmp sb, #0 + beq _0220AD38 + ldr r2, _0220B054 ; =0x02211924 + ldr r0, [sp, #0x90] + ldr r1, [sp, #0x24] + ldr r2, [r2] + blx r2 + str r0, [sb] + ldr sb, [sb] + b _0220AD54 +_0220AD38: + ldr r2, _0220B054 ; =0x02211924 + ldr r0, [sp, #0x90] + ldr r1, [sp, #0x24] + ldr r2, [r2] + blx r2 + mov sb, r0 + str sb, [fp, #0x1c] +_0220AD54: + cmp sb, #0 + ldreq r0, [sp, #0x2c] + streq r0, [sp, #4] + beq _0220B348 + ldr r0, [sp, #0x94] + str r0, [sb] +_0220AD6C: + ldr r0, [sp, #0x98] + add r2, sb, #4 + str r0, [sp] + ldr r3, [sp, #0x2c] + mov r0, r4 + mov r1, r5 + add r2, r2, sl + bl FUN_02209DB4 + add r1, sb, sl + ldrsb r2, [r1, #4] + ldr r1, [sp, #0x108] + and r1, r1, #3 + strb r2, [r6, r1] +_0220ADA0: + cmp r0, #0 + ldrle r0, [sp, #0x34] + strle r0, [sp, #4] + ble _0220B348 + ldr r1, [sp, #0x108] + add r0, r1, r0 + str r0, [sp, #0x108] + sub r1, r0, #4 + and r1, r1, #3 + ldrsb r1, [r6, r1] + cmp r1, #0xd + bne _0220ACB4 + sub r1, r0, #3 + and r1, r1, #3 + ldrsb r1, [r6, r1] + cmp r1, #0xa + bne _0220ACB4 + sub r1, r0, #2 + and r1, r1, #3 + ldrsb r1, [r6, r1] + cmp r1, #0xd + bne _0220ACB4 + sub r1, r0, #1 + and r1, r1, #3 + ldrsb r1, [r6, r1] + cmp r1, #0xa + bne _0220ACB4 + str r0, [fp] + ldr r0, [fp] + cmp r0, #0 + beq _0220B348 + ldr r1, _0220B04C ; =0x02211A44 + ldr r2, [sp, #0x9c] + ldr r3, [sp, #0xa0] + mov r0, fp + bl FUN_02208DCC + cmp r0, #0 + beq _0220B348 + ldr r0, _0220B04C ; =0x02211A44 + ldr r1, _0220B058 ; =0x0220FB60 + ldr r2, [sp, #0x44] + bl FUN_02209FC8 + cmp r0, #0 + bne _0220B348 + ldr r0, _0220B04C ; =0x02211A44 + ldrsb r0, [r0, #8] + cmp r0, #0x20 + bne _0220B348 + ldr r0, _0220B05C ; =0x02211A4D + ldr r1, [sp, #0x3c] + bl FUN_0220B844 + cmp r0, #0 + blt _0220B348 + ldr r1, [sp, #0xa4] + ldr r2, [fp] + mov r0, fp + add r3, sp, #0x110 + bl FUN_02209014 + cmp r0, #0 + blt _0220B348 + ldr r1, _0220B060 ; =0x0220FB68 + mov r0, fp + add r2, sp, #0x10c + bl FUN_02209BB8 + movs sb, r0 + ldreq r0, [sp, #0xa8] + streq r0, [sp, #4] + beq _0220B348 + cmp sb, #0x400 + bgt _0220B348 + cmp sb, #0 + ble _0220AEF8 + ldr r1, _0220B04C ; =0x02211A44 + ldr r2, [sp, #0x10c] + mov r0, fp + mov r3, sb + bl FUN_02208DCC + cmp r0, #0 + beq _0220B348 + ldr r0, _0220B04C ; =0x02211A44 + mov r1, sb + bl FUN_0220B844 + movs sb, r0 + bmi _0220B348 + str sb, [r4, #0x14] + b _0220AF00 +_0220AEF8: + ldr r0, [sp, #0xac] + str r0, [r4, #0x14] +_0220AF00: + ldr r0, [r4, #8] + cmp r0, #0 + ldrne r0, [sp, #0xb0] + strne r0, [sp, #8] + bne _0220AF88 + ldr r1, _0220B064 ; =0x0220FB78 + mov r0, fp + add r2, sp, #0x10c + bl FUN_02209BB8 + str r0, [sp, #8] + cmp r0, #0 + beq _0220B348 + cmp r0, #0x400 + ldrgt r0, [sp, #0xb4] + strgt r0, [sp, #8] + bgt _0220AF88 + cmp r0, #0 + ble _0220AF80 + ldr r1, [sp, #0x10c] + ldr r3, [sp, #0xb8] + ldr r2, [sp, #8] + str r3, [sp] + ldr r3, _0220B068 ; =0x0220FB84 + mov r0, fp + add r2, r1, r2 + bl FUN_02208EC4 + cmp r0, #0 + ldreq r0, [sp, #0x2c] + streq r0, [sp, #8] + ldrne r0, [sp, #0xbc] + strne r0, [sp, #8] + b _0220AF88 +_0220AF80: + ldr r0, [sp, #0xc0] + str r0, [sp, #8] +_0220AF88: + ldr r1, _0220B06C ; =0x0220FB90 + mov r0, fp + add r2, sp, #0x10c + bl FUN_02209BB8 + movs r2, r0 + beq _0220B348 + cmp r2, #0x400 + ldrgt r1, [sp, #0xc4] + bgt _0220AFE4 + cmp r2, #0 + ble _0220AFE0 + ldr r1, [sp, #0x10c] + ldr r3, [sp, #0xc8] + mov r0, fp + str r3, [sp] + ldr r3, _0220B070 ; =0x0220FBA4 + add r2, r1, r2 + bl FUN_02208EC4 + cmp r0, #0 + ldreq r1, [sp, #0x2c] + ldrne r1, [sp, #0xcc] + b _0220AFE4 +_0220AFE0: + ldr r1, [sp, #0xd0] +_0220AFE4: + ldr r0, [r4, #0x40] + cmp r0, #2 + beq _0220B348 + cmp sb, #0 + blt _0220B104 + b _0220B0B0 + .align 2, 0 +_0220AFFC: .word 0x02211918 +_0220B000: .word 0x02211914 +_0220B004: .word 0x0220FA9C +_0220B008: .word 0x0220FAA4 +_0220B00C: .word 0x0220FAAC +_0220B010: .word 0x0220FAB4 +_0220B014: .word 0x0220FAB8 +_0220B018: .word 0x0220FAC4 +_0220B01C: .word 0x0220FACC +_0220B020: .word 0x0220FAD0 +_0220B024: .word 0x02211904 +_0220B028: .word 0x0220FAD4 +_0220B02C: .word 0x0220FB04 +_0220B030: .word 0x0220FB38 +_0220B034: .word 0x0220BDFC +_0220B038: .word 0x0220FB4C +_0220B03C: .word 0x0220BE24 +_0220B040: .word 0x0220FB50 +_0220B044: .word 0x0220FB58 +_0220B048: .word 0x0220FB5C +_0220B04C: .word 0x02211A44 +_0220B050: .word 0x000001FF +_0220B054: .word 0x02211924 +_0220B058: .word 0x0220FB60 +_0220B05C: .word 0x02211A4D +_0220B060: .word 0x0220FB68 +_0220B064: .word 0x0220FB78 +_0220B068: .word 0x0220FB84 +_0220B06C: .word 0x0220FB90 +_0220B070: .word 0x0220FBA4 +_0220B074: + ldr r0, [sp, #0xd4] + mov r1, r5 + str r0, [sp] + ldr r2, [fp, #4] + mov r0, r4 + mov r3, sb + bl FUN_02208D18 + cmp r0, #0 + blt _0220B348 + cmp r0, #0 + beq _0220B0CC + ldr r1, [fp, #4] + sub sb, sb, r0 + add r0, r1, r0 + str r0, [fp, #4] +_0220B0B0: + cmp sb, #0 + ble _0220B0CC + mov r0, fp + ldr r1, [fp, #4] + bl FUN_02208DB8 + cmp r0, #0 + beq _0220B074 +_0220B0CC: + cmp sb, #0 + beq _0220B0F8 + ldr r1, [fp, #4] + mov r0, fp + bl FUN_02208DB8 + cmp r0, #0 + ldrne r0, [sp, #0x58] + strne r0, [sp, #4] + ldreq r0, [sp, #0x34] + streq r0, [sp, #4] + b _0220B348 +_0220B0F8: + ldr r0, [sp, #0xd8] + str r0, [sp, #4] + b _0220B348 +_0220B104: + ldr r0, [sp, #0x34] + cmp r1, #0 + str r0, [sp, #4] + beq _0220B2A0 +_0220B114: + ldr r0, [sp, #0xdc] + strb r0, [sp, #0x114] + strb r0, [sp, #0x115] + str r0, [sp, #0x108] +_0220B124: + ldr r0, [sp, #0xe0] + ldr r2, _0220B04C ; =0x02211A44 + str r0, [sp] + ldr sb, [sp, #0x108] + ldr r3, [sp, #0x2c] + mov r0, r4 + mov r1, r5 + add r2, r2, sb + bl FUN_02209DB4 + cmp r0, #0 + blt _0220B348 + ldr r2, [sp, #0x108] + ldr r0, _0220B04C ; =0x02211A44 + and r1, r2, #1 + ldrsb r0, [r0, r2] + strb r0, [r6, r1] + ldrsb r1, [r6, r1] + cmp r1, #0x3b + beq _0220B18C + cmp r1, #0xa + bne _0220B1D8 + sub r0, r2, #1 + and r0, r0, #1 + ldrsb r0, [r6, r0] + cmp r0, #0xd + bne _0220B1D8 +_0220B18C: + cmp r1, #0xa + subeq r0, r2, #1 + streq r0, [sp, #0x10c] + beq _0220B1B4 + str r2, [sp, #0x10c] + mov r0, r4 + mov r1, r5 + bl FUN_0220B404 + cmp r0, #0 + ble _0220B348 +_0220B1B4: + ldr r1, [sp, #0x10c] + cmp r1, #0 + beq _0220B348 + ldr r0, _0220B04C ; =0x02211A44 + bl FUN_0220B8E4 + str r0, [sp, #0x1c] + cmp r0, #0 + bge _0220B1EC + b _0220B348 +_0220B1D8: + ldr r0, [sp, #0x108] + add r0, r0, #1 + str r0, [sp, #0x108] + cmp r0, #0x400 + blt _0220B124 +_0220B1EC: + ldr r0, [sp, #0x108] + cmp r0, #0x400 + ldreq r0, [sp, #0x54] + streq r0, [sp, #4] + beq _0220B348 + ldr r0, [sp, #0x1c] + cmp r0, #0 + ble _0220B288 + cmp r0, #0 + ble _0220B114 +_0220B214: + ldr r0, [sp, #0xe4] + ldr r3, [sp, #0x1c] + str r0, [sp] + ldr r2, [fp, #4] + mov r0, r4 + mov r1, r5 + bl FUN_02208D18 + cmp r0, #0 + ble _0220B348 + ldr r1, [sp, #0x1c] + ldr r2, [fp, #4] + subs r1, r1, r0 + add r0, r2, r0 + str r1, [sp, #0x1c] + str r0, [fp, #4] + bne _0220B278 + ldr r0, [sp, #0xe8] + ldr r2, _0220B04C ; =0x02211A44 + str r0, [sp] + mov r0, r4 + mov r1, r5 + mov r3, r7 + bl FUN_02209DB4 + cmp r0, #0 + ble _0220B348 +_0220B278: + ldr r0, [sp, #0x1c] + cmp r0, #0 + bgt _0220B214 + b _0220B114 +_0220B288: + mov r0, r4 + mov r1, r5 + bl FUN_0220B404 + ldr r0, [sp, #0xec] + str r0, [sp, #4] + b _0220B348 +_0220B2A0: + mov r0, fp + ldr r1, [fp, #4] + bl FUN_02208DB8 + cmp r0, #0 + bne _0220B348 +_0220B2B4: + ldr r2, [fp, #4] + ldr r3, [sp, #0xf0] + mov r0, r4 + mov r1, r5 + bl FUN_02208D88 + cmp r0, #0 + blt _0220B348 + cmp r0, #0 + ldreq r0, [sp, #0xf4] + streq r0, [sp, #4] + beq _0220B348 + ldr r1, [fp, #4] + add r0, r1, r0 + str r0, [fp, #4] + mov r0, fp + ldr r1, [fp, #4] + bl FUN_02208DB8 + cmp r0, #0 + beq _0220B334 + ldr r0, [sp, #0xf8] + ldr r2, _0220B04C ; =0x02211A44 + str r0, [sp] + ldr r3, [sp, #0x2c] + mov r0, r4 + mov r1, r5 + bl FUN_02209DB4 + cmp r0, #0 + blt _0220B348 + cmp r0, #0 + ldrne r0, [sp, #0x58] + strne r0, [sp, #4] + bne _0220B348 +_0220B334: + mov r0, fp + ldr r1, [fp, #4] + bl FUN_02208DB8 + cmp r0, #0 + beq _0220B2B4 +_0220B348: + bl FUN_02208CE0 + ldr r0, _0220B000 ; =0x02211914 + ldr r1, _0220B024 ; =0x02211904 + ldr r0, [r0] + ldr r1, [r1] + blx r1 + ldr r1, [sp, #0xfc] + ldr r0, _0220B000 ; =0x02211914 + str r1, [r0] + bl FUN_02208CCC + ldr r0, [r4, #4] + cmp r0, #0 + ldrne r0, [sp, #0x50] + strne r0, [sp, #4] + cmp r5, #0 + blt _0220B3A4 + mov r1, r5 + mov r0, r4 + bl FUN_02209E7C + cmp r0, #0 + ldrlt r0, [sp, #0x34] + ldr r5, [sp, #0x100] + strlt r0, [sp, #4] +_0220B3A4: + ldr r0, [sp, #4] + cmp r0, #0 + ldreq r0, [sp, #0x2c] + ldrne r1, [sp, #4] + streq r0, [fp, #8] + ldrne r0, [sp, #0x104] + strne r0, [fp, #8] + ldrne r0, _0220B400 ; =0x02211908 + strne r1, [r0] + ldr sl, [r4, #0x2c] + mov r0, r4 + ldr sb, [r4, #0x3c] + bl FUN_02209338 + ldr r0, [sp, #4] + mov r1, fp + mov r2, sl + blx sb +_0220B3E8: + ldr r0, _0220AFFC ; =0x02211918 + ldr r0, [r0] + cmp r0, #0 + beq _0220A1DC + add sp, sp, #0x124 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_0220B400: .word 0x02211908 + + arm_func_start FUN_0220B404 +FUN_0220B404: ; 0x0220B404 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} + sub sp, sp, #8 + mov r7, #0 + mov sl, r0 + mov sb, r1 + mov r8, r7 + mov r6, r7 + strb r7, [sp, #4] + strb r7, [sp, #5] + mov r5, #1 + add r4, sp, #4 + b _0220B45C +_0220B434: + mov r0, sl + mov r1, sb + mov r3, r5 + str r6, [sp] + bl FUN_02209DB4 + cmp r0, #0 + addle sp, sp, #8 + ldmleia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + add r7, r7, r0 + add r8, r8, #1 +_0220B45C: + and r1, r8, #1 + ldrsb r0, [r4, r1] + add r2, r4, r1 + cmp r0, #0xd + bne _0220B434 + sub r0, r8, #1 + and r0, r0, #1 + ldrsb r0, [r4, r0] + cmp r0, #0xa + bne _0220B434 + mov r0, r7 + add sp, sp, #8 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + + arm_func_start FUN_0220B490 +FUN_0220B490: ; 0x0220B490 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #4 + ldr r7, [sp, #0x28] + mov sl, r0 + mov fp, r1 + mov sb, r2 + mov r8, r3 + cmp r7, #0 + ble _0220B54C + mov r5, #0 + mov r4, #0x400 +_0220B4BC: + ldr r0, [sl, #4] + cmp r0, #0 + addne sp, sp, #4 + mvnne r0, #0 + ldmneia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + ldr r3, [sb] + ldr r0, _0220B558 ; =0x02211A44 + rsb r6, r3, #0x400 + cmp r7, r6 + movle r6, r7 + mov r1, r8 + mov r2, r6 + add r0, r0, r3 + bl FUN_02209F90 + ldr r0, [sb] + add r8, r8, r6 + add r0, r0, r6 + str r0, [sb] + ldr r0, [sb] + sub r7, r7, r6 + cmp r0, #0x400 + bne _0220B544 + ldr r2, _0220B558 ; =0x02211A44 + mov r0, sl + mov r1, fp + mov r3, r4 + str r5, [sp] + bl FUN_02209D68 + cmp r0, #0 + addle sp, sp, #4 + ldmleia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + ldr r1, [sb] + sub r0, r1, r0 + str r0, [sb] +_0220B544: + cmp r7, #0 + bgt _0220B4BC +_0220B54C: + ldr r0, [sp, #0x28] + add sp, sp, #4 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_0220B558: .word 0x02211A44 + + arm_func_start FUN_0220B55C +FUN_0220B55C: ; 0x0220B55C + stmdb sp!, {r4, r5, lr} + sub sp, sp, #4 + mov r5, r0 + mov r0, #0 + mov r4, r1 + str r0, [r5] + str r0, [r4] + bl FUN_02208CE0 + ldr r1, _0220B5FC ; =0x02211914 + ldr r2, [r1] + cmp r2, #0 + beq _0220B5D8 + ldr r0, [r2, #0xc] + ldr r0, [r0, #0x14] + cmp r0, #0 + beq _0220B5D0 + ldr r2, [r2, #0xc] + mvn r0, #0 + ldr r2, [r2, #0x30] + ldr r2, [r2, #4] + str r2, [r5] + ldr r2, [r1] + ldr r1, [r2, #0xc] + ldr r1, [r1, #0x14] + cmp r1, r0 + moveq r0, #0 + ldrne r0, [r2, #0xc] + ldrne r0, [r0, #0x14] + str r0, [r4] +_0220B5D0: + mov r4, #1 + b _0220B5EC +_0220B5D8: + ldr r0, _0220B600 ; =0x02211910 + ldr r0, [r0] + cmp r0, #0 + movne r4, #1 + moveq r4, #0 +_0220B5EC: + bl FUN_02208CCC + mov r0, r4 + add sp, sp, #4 + ldmia sp!, {r4, r5, pc} + .align 2, 0 +_0220B5FC: .word 0x02211914 +_0220B600: .word 0x02211910 + + arm_func_start FUN_0220B604 +FUN_0220B604: ; 0x0220B604 + stmdb sp!, {r4, r5, r6, r7, r8, lr} + cmp r1, r3 + mvnlt r0, #0 + ldmltia sp!, {r4, r5, r6, r7, r8, pc} + sub r1, r1, r3 + add r4, r1, #1 + cmp r4, #0 + mov r8, #0 + ble _0220B680 + ldrsb r5, [r2] + mov lr, #1 +_0220B630: + ldrsb r1, [r0, r8] + cmp r5, r1 + bne _0220B674 + mov r7, lr + cmp r3, #1 + add r6, r0, r8 + ble _0220B668 +_0220B64C: + ldrsb ip, [r6, r7] + ldrsb r1, [r2, r7] + cmp ip, r1 + bne _0220B668 + add r7, r7, #1 + cmp r7, r3 + blt _0220B64C +_0220B668: + cmp r7, r3 + moveq r0, #0 + ldmeqia sp!, {r4, r5, r6, r7, r8, pc} +_0220B674: + add r8, r8, #1 + cmp r8, r4 + blt _0220B630 +_0220B680: + mvn r0, #0 + ldmia sp!, {r4, r5, r6, r7, r8, pc} + + arm_func_start FUN_0220B688 +FUN_0220B688: ; 0x0220B688 + stmdb sp!, {lr} + sub sp, sp, #4 + mov ip, #0 + cmp r1, #0 + mov lr, ip + sub r1, r1, #1 + beq _0220B6F0 + mov r2, #0xa +_0220B6A8: + ldrsb r3, [r0] + cmp r3, #0x20 + beq _0220B6E0 + cmp r3, #0x30 + blt _0220B6E0 + cmp r3, #0x39 + bgt _0220B6E0 + mla r3, lr, r2, r3 + add ip, ip, #1 + cmp ip, #9 + addgt sp, sp, #4 + sub lr, r3, #0x30 + mvngt r0, #0 + ldmgtia sp!, {pc} +_0220B6E0: + cmp r1, #0 + add r0, r0, #1 + sub r1, r1, #1 + bne _0220B6A8 +_0220B6F0: + cmp ip, #0 + mvneq lr, #0 + mov r0, lr + add sp, sp, #4 + ldmfd sp!, {pc} + + arm_func_start FUN_0220B704 +FUN_0220B704: ; 0x0220B704 + stmdb sp!, {r4, lr} + mov r2, #1 + mov r3, #0 + b _0220B734 +_0220B714: + cmp ip, #0 + beq _0220B724 + cmp ip, #0x20 + bne _0220B72C +_0220B724: + mov r0, #0 + ldmia sp!, {r4, pc} +_0220B72C: + add r0, r0, #1 + add r1, r1, #1 +_0220B734: + ldrsb r4, [r1] + mov ip, r3 + cmp r4, #0x41 + blt _0220B74C + cmp r4, #0x5a + movle ip, r2 +_0220B74C: + cmp ip, #0 + ldrsb ip, [r0] + addne r4, r4, #0x20 + mov lr, r3 + cmp ip, #0x41 + blt _0220B76C + cmp ip, #0x5a + movle lr, r2 +_0220B76C: + cmp lr, #0 + addne lr, ip, #0x20 + moveq lr, ip + cmp lr, r4 + beq _0220B714 + mvn r0, #0 + ldmia sp!, {r4, pc} + + arm_func_start FUN_0220B788 +FUN_0220B788: ; 0x0220B788 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x24 + ldr r6, _0220B840 ; =0x0220BE70 + add r4, sp, #0 + mov sl, r0 + mov sb, r1 + ldmia r6!, {r0, r1, r2, r3} + mov r5, r4 + stmia r4!, {r0, r1, r2, r3} + ldmia r6!, {r0, r1, r2, r3} + stmia r4!, {r0, r1, r2, r3} + mov r7, #0 + ldr r0, [r6] + mov r8, r7 + str r0, [r4] + mov r1, r7 + mov fp, #1 + mov r4, #0x30 +_0220B7D0: + ldr r6, [r5, r8, lsl #2] + cmp sb, r6 + blo _0220B808 + mov r0, sb + mov r1, r6 + bl _u32_div_f + mul r2, r0, r6 + cmp sl, #0 + addne r0, r0, #0x30 + strneb r0, [sl, r7] + mov r1, fp + sub sb, sb, r2 + add r7, r7, #1 + b _0220B81C +_0220B808: + cmp r1, #0 + beq _0220B81C + cmp sl, #0 + strneb r4, [sl, r7] + add r7, r7, #1 +_0220B81C: + add r8, r8, #1 + cmp r8, #9 + blt _0220B7D0 + cmp sl, #0 + addne r0, sb, #0x30 + strneb r0, [sl, r7] + add r0, r7, #1 + add sp, sp, #0x24 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_0220B840: .word 0x0220BE70 + + arm_func_start FUN_0220B844 +FUN_0220B844: ; 0x0220B844 + stmdb sp!, {r4, r5, r6, lr} + cmp r1, #0xa + mvngt r0, #0 + ldmgtia sp!, {r4, r5, r6, pc} + mov r6, #0 + mov r5, r6 + mov r4, r6 + cmp r1, #0 + ble _0220B8DC + mov ip, #1 + mov r2, #0xa +_0220B870: + cmp r4, #0 + ldrsb r3, [r0, r6] + beq _0220B88C + cmp r3, #0x20 + beq _0220B8DC + cmp r3, #0 + beq _0220B8DC +_0220B88C: + cmp r4, #0 + bne _0220B89C + cmp r3, #0x20 + beq _0220B8D0 +_0220B89C: + cmp r3, #0x30 + blt _0220B8AC + cmp r3, #0x39 + ble _0220B8B4 +_0220B8AC: + mvn r0, #0 + ldmia sp!, {r4, r5, r6, pc} +_0220B8B4: + mla r3, r5, r2, r3 + mov lr, r5 + sub r5, r3, #0x30 + cmp lr, r5 + mov r4, ip + mvngt r0, #0 + ldmgtia sp!, {r4, r5, r6, pc} +_0220B8D0: + add r6, r6, #1 + cmp r6, r1 + blt _0220B870 +_0220B8DC: + mov r0, r5 + ldmia sp!, {r4, r5, r6, pc} + + arm_func_start FUN_0220B8E4 +FUN_0220B8E4: ; 0x0220B8E4 + stmdb sp!, {r4, r5, r6, lr} + cmp r1, #8 + mvngt r0, #0 + ldmgtia sp!, {r4, r5, r6, pc} + cmp r1, #8 + bne _0220B90C + ldrsb r2, [r0] + cmp r2, #0x37 + mvngt r0, #0 + ldmgtia sp!, {r4, r5, r6, pc} +_0220B90C: + mov r5, #0 + mov r4, r5 + mov lr, r5 + cmp r1, #0 + ble _0220B9C4 + mov ip, r5 + mov r3, #1 +_0220B928: + ldrsb r6, [r0, r5] + mov r2, ip + cmp r6, #0x41 + blt _0220B940 + cmp r6, #0x5a + movle r2, r3 +_0220B940: + cmp r2, #0 + addne r6, r6, #0x20 + mov r2, r6, lsl #0x18 + mov r2, r2, asr #0x18 + cmp r2, #0x30 + blt _0220B96C + cmp r2, #0x39 + addle r2, r2, r4, lsl #4 + movle lr, r3 + suble r4, r2, #0x30 + ble _0220B9B8 +_0220B96C: + cmp r2, #0x61 + blt _0220B988 + cmp r2, #0x66 + addle r2, r2, r4, lsl #4 + movle lr, r3 + suble r4, r2, #0x57 + ble _0220B9B8 +_0220B988: + cmp lr, #0 + beq _0220B9A0 + cmp r2, #0x20 + beq _0220B9C4 + cmp r2, #0 + beq _0220B9C4 +_0220B9A0: + cmp lr, #0 + bne _0220B9B0 + cmp r2, #0x20 + beq _0220B9B8 +_0220B9B0: + mvn r0, #0 + ldmia sp!, {r4, r5, r6, pc} +_0220B9B8: + add r5, r5, #1 + cmp r5, r1 + blt _0220B928 +_0220B9C4: + mov r0, r4 + ldmia sp!, {r4, r5, r6, pc} + + arm_func_start FUN_0220B9CC +FUN_0220B9CC: ; 0x0220B9CC + cmp r1, #0x20 + moveq r1, #0x2b + streqb r1, [r0] + moveq r0, #1 + bxeq lr + cmp r1, #0x30 + blt _0220B9F0 + cmp r1, #0x39 + ble _0220BA10 +_0220B9F0: + cmp r1, #0x41 + blt _0220BA00 + cmp r1, #0x5a + ble _0220BA10 +_0220BA00: + cmp r1, #0x61 + blt _0220BA1C + cmp r1, #0x7a + bgt _0220BA1C +_0220BA10: + strb r1, [r0] + mov r0, #1 + bx lr +_0220BA1C: + mov r2, r1, asr #4 + and r3, r2, #0xf + mov r2, #0x25 + strb r2, [r0] + cmp r3, #0xa + addlt r2, r3, #0x30 + addge r2, r3, #0x37 + and r1, r1, #0xf + cmp r1, #0xa + addlt r1, r1, #0x30 + strb r2, [r0, #1] + addge r1, r1, #0x37 + strb r1, [r0, #2] + mov r0, #3 + bx lr + + arm_func_start FUN_0220BA58 +FUN_0220BA58: ; 0x0220BA58 + ldrsb r1, [r0], #1 + mov r2, #0 + cmp r1, #0 + beq _0220BAB8 +_0220BA68: + cmp r1, #0x30 + blt _0220BA78 + cmp r1, #0x39 + ble _0220BAA0 +_0220BA78: + cmp r1, #0x41 + blt _0220BA88 + cmp r1, #0x5a + ble _0220BAA0 +_0220BA88: + cmp r1, #0x61 + blt _0220BA98 + cmp r1, #0x7a + ble _0220BAA0 +_0220BA98: + cmp r1, #0x20 + bne _0220BAA8 +_0220BAA0: + add r2, r2, #1 + b _0220BAAC +_0220BAA8: + add r2, r2, #3 +_0220BAAC: + ldrsb r1, [r0], #1 + cmp r1, #0 + bne _0220BA68 +_0220BAB8: + mov r0, r2 + bx lr + + .section .data + ; 0x0220BAC0 + .incbin "baserom.nds", 0x1411e0, 0x4100 + + .section .bss + ; 0x0220FBC0 + .space 0x22a0 diff --git a/arm9/modules/04/asm/thumb_04.s b/arm9/modules/04/asm/thumb_04.s new file mode 100644 index 00000000..51ee9793 --- /dev/null +++ b/arm9/modules/04/asm/thumb_04.s @@ -0,0 +1,3128 @@ + .include "asm/macros.inc" + .include "global.inc" + .section .text + .balign 4, 0 + + thumb_func_start MOD04_021D74E0 +MOD04_021D74E0: ; 0x021D74E0 + push {r4, r5, r6, lr} + add r5, r0, #0 + ldr r0, _021D7644 ; =0x0220FBC0 + add r4, r1, #0 + ldr r0, [r0, #4] + cmp r0, #0 + beq _021D74F2 + bl ErrorHandling +_021D74F2: + ldr r1, _021D7648 ; =0x00001FAC + add r0, r4, #0 + bl FUN_02016998 + ldr r2, _021D7644 ; =0x0220FBC0 + mov r1, #0x1f + str r0, [r2, #4] + add r0, #0x1f + bic r0, r1 + mov r1, #0x1f + lsl r1, r1, #8 + str r0, [r2] + str r5, [r0, r1] + add r3, r1, #0 + ldr r6, [r2] + mov r0, #0 + add r3, #0xc + str r0, [r6, r3] + add r3, r1, #0 + ldr r6, [r2] + add r3, #0x10 + str r0, [r6, r3] + add r3, r1, #0 + ldr r6, [r2] + add r3, #0x14 + str r0, [r6, r3] + add r3, r1, #0 + ldr r6, [r2] + add r3, #0x44 + str r0, [r6, r3] + ldr r0, [r2] + add r1, #0x54 + str r4, [r0, r1] + ldr r1, _021D764C ; =0x0002B020 + add r0, r4, #0 + bl FUN_02016998 + ldr r2, _021D7644 ; =0x0220FBC0 + ldr r1, _021D7650 ; =0x00001F04 + ldr r3, [r2] + str r0, [r3, r1] + ldr r0, [r2] + mov r2, #0 + ldr r0, [r0, r1] + mov r1, #0x1f + add r0, #0x1f + bic r0, r1 + mov r1, #0x2b + lsl r1, r1, #0xc + bl tempName_NNS_FndCreateExpHeapEx + ldr r1, _021D7644 ; =0x0220FBC0 + ldr r3, _021D7654 ; =0x00001F08 + ldr r2, [r1] + str r0, [r2, r3] + add r0, r3, #0 + ldr r4, [r1] + mov r2, #0 + add r0, #0x64 + str r2, [r4, r0] + add r4, r3, #0 + ldr r6, [r1] + sub r0, r2, #1 + add r4, #0x54 + str r0, [r6, r4] + add r4, r3, #0 + ldr r6, [r1] + add r4, #0x38 + str r2, [r6, r4] + add r4, r3, #0 + ldr r6, [r1] + add r4, #0x48 + str r0, [r6, r4] + add r4, r3, #0 + ldr r6, [r1] + add r4, #0x58 + str r0, [r6, r4] + add r0, r3, #0 + ldr r4, [r1] + add r0, #0x5c + str r2, [r4, r0] + add r4, r3, #0 + ldr r6, [r1] + mov r0, #1 + add r4, #0x60 + str r0, [r6, r4] + add r4, r3, #0 + ldr r6, [r1] + add r4, #0x7a + strb r2, [r6, r4] + add r4, r3, #0 + ldr r6, [r1] + add r4, #0x78 + strb r2, [r6, r4] + add r4, r3, #0 + ldr r6, [r1] + add r4, #0x79 + strb r2, [r6, r4] + add r2, r3, #0 + ldr r4, [r1] + add r2, #0x70 + str r0, [r4, r2] + add r2, r3, #0 + add r2, #0x74 + ldr r4, [r1] + cmp r5, #0 + str r0, [r4, r2] + beq _021D75FA + ldr r0, [r1] + sub r3, #8 + ldr r0, [r0, r3] + bl FUN_020286EC + bl FUN_02028228 + ldr r2, _021D7644 ; =0x0220FBC0 + ldr r1, _021D7658 ; =0x00001EF0 + ldr r3, [r2] + str r0, [r3, r1] + ldr r0, [r2] + add r1, #0x10 + ldr r0, [r0, r1] + bl FUN_020286EC + mov r1, #0 + bl FUN_0202838C + ldr r1, _021D7644 ; =0x0220FBC0 + ldr r2, [r1] + mov r1, #0x11 + lsl r1, r1, #8 + str r0, [r2, r1] +_021D75FA: + ldr r2, _021D7644 ; =0x0220FBC0 + mov r0, #0 + ldr r3, [r2] + ldr r1, _021D765C ; =0x00001F38 + add r4, r0, #0 + str r0, [r3, r1] + sub r1, #0x20 +_021D7608: + ldr r3, [r2] + add r3, r3, r0 + add r0, r0, #1 + strb r4, [r3, r1] + cmp r0, #0x20 + blt _021D7608 + bl FUN_021D85B4 + ldr r0, _021D7644 ; =0x0220FBC0 + ldr r1, [r0] + ldr r0, _021D7658 ; =0x00001EF0 + ldr r0, [r1, r0] + bl FUN_02096F80 + cmp r0, #0 + bne _021D762C + mov r0, #1 + pop {r4, r5, r6, pc} +_021D762C: + ldr r0, _021D7644 ; =0x0220FBC0 + ldr r1, [r0] + ldr r0, _021D7658 ; =0x00001EF0 + ldr r0, [r1, r0] + bl FUN_02096F18 + cmp r0, #0 + beq _021D7640 + mov r0, #0 + pop {r4, r5, r6, pc} +_021D7640: + mov r0, #2 + pop {r4, r5, r6, pc} + .align 2, 0 +_021D7644: .word 0x0220FBC0 +_021D7648: .word 0x00001FAC +_021D764C: .word 0x0002B020 +_021D7650: .word 0x00001F04 +_021D7654: .word 0x00001F08 +_021D7658: .word 0x00001EF0 +_021D765C: .word 0x00001F38 + + thumb_func_start FUN_021D7660 +FUN_021D7660: ; 0x021D7660 + push {r3, lr} + ldr r0, _021D76A0 ; =0x0220FBC0 + ldr r1, [r0] + cmp r1, #0 + beq _021D7698 + ldr r0, _021D76A4 ; =0x00001F08 + ldr r0, [r1, r0] + bl thunk_FUN_020adc8c + ldr r0, _021D76A0 ; =0x0220FBC0 + ldr r1, _021D76A8 ; =0x00001F54 + ldr r2, [r0] + ldr r0, [r2, r1] + sub r1, #0x50 + ldr r1, [r2, r1] + bl FUN_02016A8C + ldr r1, _021D76A0 ; =0x0220FBC0 + ldr r0, _021D76A8 ; =0x00001F54 + ldr r2, [r1] + ldr r1, [r1, #4] + ldr r0, [r2, r0] + bl FUN_02016A8C + ldr r0, _021D76A0 ; =0x0220FBC0 + mov r1, #0 + str r1, [r0, #4] + str r1, [r0] +_021D7698: + bl FUN_021DD6F0 + pop {r3, pc} + nop +_021D76A0: .word 0x0220FBC0 +_021D76A4: .word 0x00001F08 +_021D76A8: .word 0x00001F54 + + thumb_func_start FUN_021D76AC +FUN_021D76AC: ; 0x021D76AC + push {lr} + sub sp, #0x64 + ldr r0, _021D779C ; =0x0220FBC0 + ldr r1, [r0] + ldr r0, _021D77A0 ; =0x00001F44 + ldr r0, [r1, r0] + cmp r0, #4 + bhi _021D7794 + add r0, r0, r0 + add r0, pc + ldrh r0, [r0, #6] + lsl r0, r0, #0x10 + asr r0, r0, #0x10 + add pc, r0 +_021D76C8: ; jump table + .short _021D76D2 - _021D76C8 - 2 ; case 0 + .short _021D7708 - _021D76C8 - 2 ; case 1 + .short _021D7736 - _021D76C8 - 2 ; case 2 + .short _021D7784 - _021D76C8 - 2 ; case 3 + .short _021D778A - _021D76C8 - 2 ; case 4 +_021D76D2: + ldr r0, _021D77A4 ; =FUN_021D7DA8 + ldr r1, _021D77A8 ; =FUN_021D7DEC + bl FUN_021DD968 + ldr r0, _021D779C ; =0x0220FBC0 + mov r2, #1 + ldr r1, [r0] + ldr r0, _021D77AC ; =0x00001EF4 + mov r3, #0x14 + add r0, r1, r0 + mov r1, #2 + bl FUN_021DDEE0 + mov r0, #2 + bl FUN_021DDE7C + bl FUN_021DDDCC + ldr r1, _021D779C ; =0x0220FBC0 + ldr r0, _021D77A0 ; =0x00001F44 + ldr r2, [r1] + mov r3, #1 + str r3, [r2, r0] + ldr r1, [r1] + mov r2, #0 + add r0, #0x14 + str r2, [r1, r0] +_021D7708: + bl FUN_021DDD7C + cmp r0, #0 + beq _021D7730 + bl FUN_021DDC1C + cmp r0, #4 + bne _021D7724 + ldr r0, _021D779C ; =0x0220FBC0 + mov r2, #2 + ldr r1, [r0] + ldr r0, _021D77A0 ; =0x00001F44 + str r2, [r1, r0] + b _021D7736 +_021D7724: + ldr r0, _021D779C ; =0x0220FBC0 + mov r2, #0xb + ldr r1, [r0] + ldr r0, _021D77A0 ; =0x00001F44 + str r2, [r1, r0] + b _021D7736 +_021D7730: + bl FUN_021DDCE8 + b _021D7794 +_021D7736: + bl FUN_021D7E18 + cmp r0, #0 + blt _021D7798 + ldr r0, _021D779C ; =0x0220FBC0 + ldr r3, _021D77B0 ; =0x0220BEA0 + ldr r1, [r0] + ldr r0, _021D77B4 ; =0x0220BEAC + str r0, [sp] + mov r0, #0 + str r0, [sp, #4] + str r0, [sp, #8] + mov r0, #0x11 + lsl r0, r0, #8 + ldr r2, [r1, r0] + add r0, r0, #4 + str r2, [sp, #0xc] + mov r2, #0x20 + str r2, [sp, #0x10] + ldr r2, _021D77B8 ; =0x00001EF0 + add r0, r1, r0 + ldr r1, [r1, r2] + ldr r2, _021D77BC ; =0x000029E7 + bl FUN_021E0374 + add r0, sp, #0x14 + bl OS_GetOwnerInfo + mov r1, #0 + ldr r2, _021D77C0 ; =FUN_021D7A7C + add r0, sp, #0x18 + add r3, r1, #0 + bl FUN_021DFE64 + ldr r0, _021D779C ; =0x0220FBC0 + mov r2, #3 + ldr r1, [r0] + ldr r0, _021D77A0 ; =0x00001F44 + str r2, [r1, r0] +_021D7784: + bl FUN_021DFF74 + b _021D7794 +_021D778A: + bl FUN_021DFF74 + add sp, #0x64 + mov r0, #1 + pop {pc} +_021D7794: + bl FUN_021D7E18 +_021D7798: + add sp, #0x64 + pop {pc} + .align 2, 0 +_021D779C: .word 0x0220FBC0 +_021D77A0: .word 0x00001F44 +_021D77A4: .word FUN_021D7DA8 +_021D77A8: .word FUN_021D7DEC +_021D77AC: .word 0x00001EF4 +_021D77B0: .word 0x0220BEA0 +_021D77B4: .word 0x0220BEAC +_021D77B8: .word 0x00001EF0 +_021D77BC: .word 0x000029E7 +_021D77C0: .word FUN_021D7A7C + + thumb_func_start FUN_021D77C4 +FUN_021D77C4: ; 0x021D77C4 + push {r3, r4} + ldr r3, _021D77D8 ; =0x0220FBC0 + ldr r2, _021D77DC ; =0x00001F0C + ldr r4, [r3] + str r0, [r4, r2] + ldr r3, [r3] + add r0, r2, #4 + str r1, [r3, r0] + pop {r3, r4} + bx lr + .align 2, 0 +_021D77D8: .word 0x0220FBC0 +_021D77DC: .word 0x00001F0C + + thumb_func_start FUN_021D77E0 +FUN_021D77E0: ; 0x021D77E0 + ldr r0, _021D77F8 ; =0x0220FBC0 + ldr r2, [r0] + ldr r0, _021D77FC ; =0x00001F44 + ldr r1, [r2, r0] + cmp r1, #9 + bne _021D77F2 + mov r1, #0xa + str r1, [r2, r0] + bx lr +_021D77F2: + mov r1, #8 + str r1, [r2, r0] + bx lr + .align 2, 0 +_021D77F8: .word 0x0220FBC0 +_021D77FC: .word 0x00001F44 + + thumb_func_start FUN_021D7800 +FUN_021D7800: ; 0x021D7800 + push {r3, r4, r5, lr} + ldr r2, _021D78EC ; =0x0220FBC0 + ldr r1, _021D78F0 ; =0x00001F44 + ldr r4, [r2] + ldr r3, [r4, r1] + cmp r3, #0xb + bhi _021D78E4 + add r5, r3, r3 + add r5, pc + ldrh r5, [r5, #6] + lsl r5, r5, #0x10 + asr r5, r5, #0x10 + add pc, r5 +_021D781A: ; jump table + .short _021D78E4 - _021D781A - 2 ; case 0 + .short _021D78E4 - _021D781A - 2 ; case 1 + .short _021D78E4 - _021D781A - 2 ; case 2 + .short _021D78E4 - _021D781A - 2 ; case 3 + .short _021D78E4 - _021D781A - 2 ; case 4 + .short _021D7832 - _021D781A - 2 ; case 5 + .short _021D7864 - _021D781A - 2 ; case 6 + .short _021D7886 - _021D781A - 2 ; case 7 + .short _021D78AA - _021D781A - 2 ; case 8 + .short _021D7864 - _021D781A - 2 ; case 9 + .short _021D78C4 - _021D781A - 2 ; case 10 + .short _021D78DE - _021D781A - 2 ; case 11 +_021D7832: + cmp r0, #0 + beq _021D783A + mov r0, #6 + str r0, [r4, r1] +_021D783A: + ldr r0, _021D78EC ; =0x0220FBC0 + ldr r2, _021D78F4 ; =0x00001F48 + ldr r0, [r0] + ldr r1, [r0, r2] + cmp r1, #2 + bne _021D78E4 + add r1, r2, #0 + add r1, #0x14 + ldr r1, [r0, r1] + cmp r1, #0 + blt _021D78E4 + add r3, r0, r1 + add r1, r2, #0 + sub r1, #0x30 + ldrb r1, [r3, r1] + cmp r1, #6 + beq _021D78E4 + mov r3, #9 + sub r1, r2, #4 + str r3, [r0, r1] + b _021D78E4 +_021D7864: + cmp r3, #0 + bne _021D786E + bl FUN_021EA530 + b _021D78E4 +_021D786E: + bl FUN_021DFA40 + cmp r0, #1 + bne _021D787C + bl FUN_021D77E0 + b _021D78E4 +_021D787C: + cmp r0, #0 + beq _021D78E4 + bl FUN_021D77E0 + b _021D78E4 +_021D7886: + mov r0, #1 + add r1, #0x40 + strh r0, [r4, r1] + bl FUN_021D8058 + ldr r0, _021D78EC ; =0x0220FBC0 + ldr r2, [r0] + ldr r0, _021D78F8 ; =0x00001F68 + ldr r1, [r2, r0] + cmp r1, #0 + beq _021D78A0 + mov r1, #1 + b _021D78A2 +_021D78A0: + mov r1, #0 +_021D78A2: + add r0, #0x10 + str r1, [r2, r0] + mov r0, #1 + pop {r3, r4, r5, pc} +_021D78AA: + mov r0, #4 + str r0, [r4, r1] + add r0, r1, #0 + ldr r3, [r2] + mov r4, #0 + add r0, #8 + str r4, [r3, r0] + ldr r0, [r2] + sub r3, r4, #1 + add r1, #0x1c + str r3, [r0, r1] + mov r0, #2 + pop {r3, r4, r5, pc} +_021D78C4: + mov r0, #4 + str r0, [r4, r1] + add r0, r1, #0 + ldr r3, [r2] + mov r4, #0 + add r0, #8 + str r4, [r3, r0] + ldr r0, [r2] + sub r3, r4, #1 + add r1, #0x1c + str r3, [r0, r1] + mov r0, #3 + pop {r3, r4, r5, pc} +_021D78DE: + bl FUN_021D7E18 + pop {r3, r4, r5, pc} +_021D78E4: + bl FUN_021D7F8C + pop {r3, r4, r5, pc} + nop +_021D78EC: .word 0x0220FBC0 +_021D78F0: .word 0x00001F44 +_021D78F4: .word 0x00001F48 +_021D78F8: .word 0x00001F68 + + thumb_func_start FUN_021D78FC +FUN_021D78FC: ; 0x021D78FC + push {r4, r5, r6, lr} + add r5, r0, #0 + mov r0, #1 + add r4, r1, #0 + lsl r0, r0, #8 + cmp r4, r0 + blt _021D790E + mov r0, #0 + pop {r4, r5, r6, pc} +_021D790E: + bl FUN_021DF95C + cmp r0, #0 + bne _021D7930 + ldr r0, _021D79A0 ; =0x0220FBC0 + ldr r1, [r0] + ldr r0, _021D79A4 ; =0x00001F0C + ldr r3, [r1, r0] + cmp r3, #0 + beq _021D792C + lsl r2, r4, #0x10 + mov r0, #0 + add r1, r5, #0 + lsr r2, r2, #0x10 + blx r3 +_021D792C: + mov r0, #1 + pop {r4, r5, r6, pc} +_021D7930: + ldr r0, _021D79A0 ; =0x0220FBC0 + ldr r1, [r0] + ldr r0, _021D79A8 ; =0x00001F4C + ldr r0, [r1, r0] + cmp r0, #0 + bne _021D7946 + mov r0, #0 + bl FUN_021EB0FC + cmp r0, #0 + bne _021D794A +_021D7946: + mov r0, #0 + pop {r4, r5, r6, pc} +_021D794A: + ldr r1, _021D79A0 ; =0x0220FBC0 + ldr r0, _021D79AC ; =0x00001F78 + ldr r3, [r1] + mov r6, #1 + ldr r2, [r3, r0] + lsl r2, r2, #8 + orr r2, r6 + lsl r6, r6, #0xc + str r2, [r3, r6] + add r3, r0, #0 + ldr r2, [r1] + add r3, #8 + ldrb r3, [r2, r3] + add r6, r3, #1 + add r3, r0, #0 + add r3, #8 + strb r6, [r2, r3] + ldr r3, [r1] + add r0, #8 + ldrb r0, [r3, r0] + ldr r2, _021D79B0 ; =0x00001002 + strb r0, [r3, r2] + ldr r3, [r1] + add r1, r2, #2 + add r0, r5, #0 + add r1, r3, r1 + add r2, r4, #0 + bl MI_CpuCopy8 + ldr r1, _021D79A0 ; =0x0220FBC0 + ldr r0, _021D79A8 ; =0x00001F4C + ldr r2, [r1] + mov r3, #1 + str r3, [r2, r0] + ldr r2, [r1] + lsl r1, r3, #0xc + add r1, r2, r1 + mov r0, #0 + add r2, r4, #4 + bl FUN_021EB044 + mov r0, #1 + pop {r4, r5, r6, pc} + .align 2, 0 +_021D79A0: .word 0x0220FBC0 +_021D79A4: .word 0x00001F0C +_021D79A8: .word 0x00001F4C +_021D79AC: .word 0x00001F78 +_021D79B0: .word 0x00001002 + + thumb_func_start FUN_021D79B4 +FUN_021D79B4: ; 0x021D79B4 + push {r4, r5, r6, lr} + add r5, r0, #0 + mov r0, #1 + add r4, r1, #0 + lsl r0, r0, #8 + cmp r4, r0 + blt _021D79C6 + mov r0, #0 + pop {r4, r5, r6, pc} +_021D79C6: + bl FUN_021DF95C + cmp r0, #0 + beq _021D79D2 + mov r0, #0 + pop {r4, r5, r6, pc} +_021D79D2: + ldr r0, _021D7A68 ; =0x0220FBC0 + ldr r1, [r0] + ldr r0, _021D7A6C ; =0x00001F4C + ldr r0, [r1, r0] + cmp r0, #0 + bne _021D79E8 + mov r0, #1 + bl FUN_021EB0FC + cmp r0, #0 + bne _021D79EC +_021D79E8: + mov r0, #0 + pop {r4, r5, r6, pc} +_021D79EC: + ldr r1, _021D7A68 ; =0x0220FBC0 + ldr r0, _021D7A70 ; =0x00001F78 + ldr r3, [r1] + mov r6, #1 + ldr r2, [r3, r0] + lsl r2, r2, #8 + orr r2, r6 + lsl r6, r6, #0xc + str r2, [r3, r6] + add r3, r0, #0 + ldr r2, [r1] + add r3, #8 + ldrb r3, [r2, r3] + add r6, r3, #1 + add r3, r0, #0 + add r3, #8 + strb r6, [r2, r3] + ldr r3, [r1] + add r0, #8 + ldrb r0, [r3, r0] + ldr r2, _021D7A74 ; =0x00001002 + strb r0, [r3, r2] + ldr r3, [r1] + add r1, r2, #2 + add r0, r5, #0 + add r1, r3, r1 + add r2, r4, #0 + bl MI_CpuCopy8 + ldr r2, _021D7A68 ; =0x0220FBC0 + ldr r1, _021D7A6C ; =0x00001F4C + ldr r3, [r2] + mov r0, #1 + str r0, [r3, r1] + ldr r2, [r2] + lsl r1, r0, #0xc + add r1, r2, r1 + add r2, r4, #4 + bl FUN_021EB044 + cmp r0, #0 + bne _021D7A4C + ldr r1, _021D7A68 ; =0x0220FBC0 + mov r0, #0 + ldr r2, [r1] + ldr r1, _021D7A6C ; =0x00001F4C + str r0, [r2, r1] + pop {r4, r5, r6, pc} +_021D7A4C: + ldr r0, _021D7A68 ; =0x0220FBC0 + ldr r1, [r0] + ldr r0, _021D7A78 ; =0x00001F10 + ldr r3, [r1, r0] + cmp r3, #0 + beq _021D7A62 + lsl r2, r4, #0x10 + mov r0, #0 + add r1, r5, #0 + lsr r2, r2, #0x10 + blx r3 +_021D7A62: + mov r0, #1 + pop {r4, r5, r6, pc} + nop +_021D7A68: .word 0x0220FBC0 +_021D7A6C: .word 0x00001F4C +_021D7A70: .word 0x00001F78 +_021D7A74: .word 0x00001002 +_021D7A78: .word 0x00001F10 + + thumb_func_start FUN_021D7A7C +FUN_021D7A7C: ; 0x021D7A7C + push {r4, r5, lr} + sub sp, #0xc + add r5, r0, #0 + ldr r0, _021D7AF8 ; =0x0220FBC0 + add r4, r2, #0 + ldr r1, [r0] + ldr r0, _021D7AFC ; =0x00001EF0 + ldr r0, [r1, r0] + bl FUN_02096EB4 + cmp r0, #0 + beq _021D7AB0 + ldr r0, _021D7AF8 ; =0x0220FBC0 + ldr r1, [r0] + ldr r0, _021D7AFC ; =0x00001EF0 + ldr r0, [r1, r0] + bl thunk_FUN_02096e4c + ldr r0, _021D7AF8 ; =0x0220FBC0 + ldr r1, [r0] + mov r0, #0x1f + lsl r0, r0, #8 + ldr r0, [r1, r0] + mov r1, #0 + bl FUN_020227A0 +_021D7AB0: + cmp r5, #0 + bne _021D7AE8 + ldr r0, _021D7B00 ; =FUN_021D7B70 + str r4, [sp] + str r0, [sp, #4] + ldr r2, _021D7AF8 ; =0x0220FBC0 + str r4, [sp, #8] + ldr r3, [r2] + ldr r2, _021D7AFC ; =0x00001EF0 + ldr r1, _021D7B04 ; =FUN_021D7B48 + ldr r2, [r3, r2] + ldr r3, _021D7B08 ; =FUN_021D7B6C + mov r0, #0 + bl FUN_021DFDBC + cmp r0, #0 + bne _021D7ADC + mov r0, #1 + bl FUN_020336A0 + add sp, #0xc + pop {r4, r5, pc} +_021D7ADC: + ldr r0, _021D7B0C ; =FUN_021D7BBC + mov r1, #0 + bl FUN_021E242C + add sp, #0xc + pop {r4, r5, pc} +_021D7AE8: + ldr r0, _021D7AF8 ; =0x0220FBC0 + mov r2, #0xb + ldr r1, [r0] + ldr r0, _021D7B10 ; =0x00001F44 + str r2, [r1, r0] + add sp, #0xc + pop {r4, r5, pc} + nop +_021D7AF8: .word 0x0220FBC0 +_021D7AFC: .word 0x00001EF0 +_021D7B00: .word FUN_021D7B70 +_021D7B04: .word FUN_021D7B48 +_021D7B08: .word FUN_021D7B6C +_021D7B0C: .word FUN_021D7BBC +_021D7B10: .word 0x00001F44 + + thumb_func_start FUN_021D7B14 +FUN_021D7B14: ; 0x021D7B14 + push {r3, lr} + ldr r0, _021D7B3C ; =0x0220FBC0 + ldr r1, [r0] + ldr r0, _021D7B40 ; =0x00001F70 + ldr r0, [r1, r0] + cmp r0, #0 + beq _021D7B3A + bl FUN_021DFA40 + ldr r1, _021D7B3C ; =0x0220FBC0 + mov r3, #0 + ldr r2, [r1] + ldr r0, _021D7B44 ; =0x00001F60 + mvn r3, r3 + str r3, [r2, r0] + ldr r1, [r1] + mov r2, #0x11 + sub r0, #0x1c + str r2, [r1, r0] +_021D7B3A: + pop {r3, pc} + .align 2, 0 +_021D7B3C: .word 0x0220FBC0 +_021D7B40: .word 0x00001F70 +_021D7B44: .word 0x00001F60 + + thumb_func_start FUN_021D7B48 +FUN_021D7B48: ; 0x021D7B48 + cmp r0, #0 + bne _021D7B58 + ldr r0, _021D7B64 ; =0x0220FBC0 + mov r2, #4 + ldr r1, [r0] + ldr r0, _021D7B68 ; =0x00001F44 + str r2, [r1, r0] + bx lr +_021D7B58: + ldr r0, _021D7B64 ; =0x0220FBC0 + mov r2, #0xb + ldr r1, [r0] + ldr r0, _021D7B68 ; =0x00001F44 + str r2, [r1, r0] + bx lr + .align 2, 0 +_021D7B64: .word 0x0220FBC0 +_021D7B68: .word 0x00001F44 + + thumb_func_start FUN_021D7B6C +FUN_021D7B6C: ; 0x021D7B6C + bx lr + .align 2, 0 + + thumb_func_start FUN_021D7B70 +FUN_021D7B70: ; 0x021D7B70 + push {r3, r4, r5, lr} + add r5, r0, #0 + ldr r0, _021D7BB8 ; =0x0220FBC0 + add r4, r1, #0 + ldr r1, [r0] + mov r0, #0x1f + lsl r0, r0, #8 + ldr r0, [r1, r0] + bl FUN_020286EC + mov r1, #0 + bl FUN_0202838C + add r1, r0, #0 + ldr r0, _021D7BB8 ; =0x0220FBC0 + ldr r2, [r0] + mov r0, #0x11 + lsl r0, r0, #8 + ldr r0, [r2, r0] + mov r2, #6 + lsl r2, r2, #6 + bl MI_CpuCopy8 + ldr r0, _021D7BB8 ; =0x0220FBC0 + ldr r1, [r0] + mov r0, #0x1f + lsl r0, r0, #8 + ldr r0, [r1, r0] + bl FUN_020286EC + add r1, r5, #0 + add r2, r4, #0 + bl FUN_02028664 + pop {r3, r4, r5, pc} + nop +_021D7BB8: .word 0x0220FBC0 + + thumb_func_start FUN_021D7BBC +FUN_021D7BBC: ; 0x021D7BBC + bx lr + .align 2, 0 + + thumb_func_start FUN_021D7BC0 +FUN_021D7BC0: ; 0x021D7BC0 + push {r3, lr} + ldr r0, _021D7C1C ; =0x0220FBC0 + mov r2, #7 + ldr r1, [r0] + ldr r0, _021D7C20 ; =0x00001F44 + str r2, [r1, r0] + bl FUN_021DF95C + cmp r0, #0 + bne _021D7BDA + mov r2, #1 + ldr r0, _021D7C1C ; =0x0220FBC0 + b _021D7BDE +_021D7BDA: + ldr r0, _021D7C1C ; =0x0220FBC0 + mov r2, #0 +_021D7BDE: + ldr r1, [r0] + ldr r0, _021D7C24 ; =0x00001F50 + str r2, [r1, r0] + ldr r0, _021D7C1C ; =0x0220FBC0 + mov r2, #1 + ldr r1, [r0] + ldr r0, _021D7C24 ; =0x00001F50 + lsl r2, r2, #0xc + ldr r0, [r1, r0] + lsl r0, r0, #0x18 + lsr r0, r0, #0x18 + bl FUN_021EAE38 + ldr r0, _021D7C1C ; =0x0220FBC0 + ldr r1, [r0] + ldr r0, _021D7C24 ; =0x00001F50 + ldr r0, [r1, r0] + ldr r1, _021D7C28 ; =0x00002710 + lsl r0, r0, #0x18 + lsr r0, r0, #0x18 + bl FUN_021EACF8 + ldr r1, _021D7C1C ; =0x0220FBC0 + ldr r0, _021D7C2C ; =0x00001F70 + ldr r2, [r1] + mov r3, #0 + str r3, [r2, r0] + ldr r1, [r1] + add r0, r0, #4 + str r3, [r1, r0] + pop {r3, pc} + .align 2, 0 +_021D7C1C: .word 0x0220FBC0 +_021D7C20: .word 0x00001F44 +_021D7C24: .word 0x00001F50 +_021D7C28: .word 0x00002710 +_021D7C2C: .word 0x00001F70 + + thumb_func_start FUN_021D7C30 +FUN_021D7C30: ; 0x021D7C30 + ldr r1, _021D7C44 ; =0x0220FBC0 + ldr r0, _021D7C48 ; =0x00001F4C + ldr r2, [r1] + mov r3, #0 + str r3, [r2, r0] + ldr r1, [r1] + add r0, #0x28 + str r3, [r1, r0] + bx lr + nop +_021D7C44: .word 0x0220FBC0 +_021D7C48: .word 0x00001F4C + + thumb_func_start FUN_021D7C4C +FUN_021D7C4C: ; 0x021D7C4C + push {r3, r4, r5, r6, r7, lr} + sub sp, #8 + str r0, [sp] + add r4, r1, #0 + ldrb r5, [r4, #1] + ldrb r3, [r4] + str r2, [sp, #4] + lsl r5, r5, #8 + mov ip, r5 + ldrb r5, [r4, #3] + add r7, r3, #0 + ldr r3, _021D7D54 ; =0x0220FBC0 + lsl r6, r5, #0x18 + ldrb r5, [r4, #2] + lsl r5, r5, #0x10 + orr r5, r6 + mov r6, ip + orr r5, r6 + orr r7, r5 + ldr r6, [r3] + ldr r5, _021D7D58 ; =0x00001F70 + mov r3, #1 + str r3, [r6, r5] + lsl r3, r7, #0x18 + lsr r3, r3, #0x18 + cmp r3, #1 + bne _021D7CB4 + mov r0, #1 + add r0, #0xff + tst r0, r7 + beq _021D7C96 + ldr r0, _021D7D54 ; =0x0220FBC0 + add r5, #0xc + ldr r1, [r0] + mov r0, #1 + str r0, [r1, r5] + b _021D7CA0 +_021D7C96: + ldr r0, _021D7D54 ; =0x0220FBC0 + mov r1, #0 + ldr r0, [r0] + add r5, #0xc + str r1, [r0, r5] +_021D7CA0: + ldr r3, _021D7D54 ; =0x0220FBC0 + ldr r1, _021D7D5C ; =0x00001F84 + ldr r2, [r3] + mov r0, #0 + strh r0, [r2, r1] + ldrb r6, [r4, #2] + ldr r5, [r3] + sub r2, r1, #3 + strb r6, [r5, r2] + b _021D7CE4 +_021D7CB4: + bl FUN_021D8A54 + cmp r0, #0 + bne _021D7D4E + mov r0, #1 + lsl r0, r0, #8 + tst r0, r7 + beq _021D7CD4 + ldr r0, _021D7D54 ; =0x0220FBC0 + mov r2, #1 + ldr r1, [r0] + add r0, r5, #0 + add r0, #0xc + str r2, [r1, r0] + add sp, #8 + pop {r3, r4, r5, r6, r7, pc} +_021D7CD4: + ldr r0, _021D7D54 ; =0x0220FBC0 + mov r2, #0 + ldr r1, [r0] + add r0, r5, #0 + add r0, #0xc + str r2, [r1, r0] + add sp, #8 + pop {r3, r4, r5, r6, r7, pc} +_021D7CE4: + ldr r5, [r4] + ldr r2, [r3] + add r1, r1, #4 + str r5, [r2, r1] + ldr r1, [sp, #4] + mov r2, #4 + sub r6, r1, #4 + add r1, r6, #0 + bl FUN_021D7DA8 + add r5, r0, #0 + beq _021D7D4E + add r0, r4, #4 + add r1, r5, #0 + add r2, r6, #0 + bl MI_CpuCopy8 + bl FUN_021DF95C + cmp r0, #0 + bne _021D7D2A + ldr r0, _021D7D54 ; =0x0220FBC0 + ldr r1, [r0] + ldr r0, _021D7D60 ; =0x00001F0C + ldr r3, [r1, r0] + cmp r3, #0 + beq _021D7D44 + ldr r2, [sp, #4] + ldr r0, [sp] + sub r2, r2, #4 + lsl r2, r2, #0x10 + add r1, r5, #0 + lsr r2, r2, #0x10 + blx r3 + b _021D7D44 +_021D7D2A: + ldr r0, _021D7D54 ; =0x0220FBC0 + ldr r1, [r0] + ldr r0, _021D7D64 ; =0x00001F10 + ldr r3, [r1, r0] + cmp r3, #0 + beq _021D7D44 + ldr r2, [sp, #4] + ldr r0, [sp] + sub r2, r2, #4 + lsl r2, r2, #0x10 + add r1, r5, #0 + lsr r2, r2, #0x10 + blx r3 +_021D7D44: + mov r0, #0 + add r1, r5, #0 + add r2, r6, #0 + bl FUN_021D7DEC +_021D7D4E: + add sp, #8 + pop {r3, r4, r5, r6, r7, pc} + nop +_021D7D54: .word 0x0220FBC0 +_021D7D58: .word 0x00001F70 +_021D7D5C: .word 0x00001F84 +_021D7D60: .word 0x00001F0C +_021D7D64: .word 0x00001F10 + + thumb_func_start FUN_021D7D68 +FUN_021D7D68: ; 0x021D7D68 + push {r3, lr} + cmp r0, #0 + bne _021D7D9A + bl FUN_021DF978 + cmp r0, #1 + bne _021D7D9A + ldr r0, _021D7D9C ; =0x0220FBC0 + ldr r2, [r0] + ldr r0, _021D7DA0 ; =0x00001F44 + ldr r1, [r2, r0] + cmp r1, #6 + bne _021D7D86 + mov r1, #8 + b _021D7D88 +_021D7D86: + mov r1, #0x10 +_021D7D88: + str r1, [r2, r0] + ldr r0, _021D7D9C ; =0x0220FBC0 + ldr r1, [r0] + ldr r0, _021D7DA4 ; =0x00001F58 + ldr r0, [r1, r0] + cmp r0, #0 + beq _021D7D9A + bl FUN_021D8C6C +_021D7D9A: + pop {r3, pc} + .align 2, 0 +_021D7D9C: .word 0x0220FBC0 +_021D7DA0: .word 0x00001F44 +_021D7DA4: .word 0x00001F58 + + thumb_func_start FUN_021D7DA8 +FUN_021D7DA8: ; 0x021D7DA8 + push {r4, r5, r6, lr} + add r5, r1, #0 + add r6, r2, #0 + bl OS_DisableInterrupts + add r4, r0, #0 + ldr r0, _021D7DE4 ; =0x0220FBC0 + add r2, r6, #0 + ldr r1, [r0] + ldr r0, _021D7DE8 ; =0x00001F08 + ldr r0, [r1, r0] + add r1, r5, #0 + bl tempName_NNS_FndAllocFromExpHeapEx + add r5, r0, #0 + bne _021D7DD8 + mov r0, #1 + bl FUN_020336A0 + add r0, r4, #0 + bl OS_RestoreInterrupts + mov r0, #0 + pop {r4, r5, r6, pc} +_021D7DD8: + add r0, r4, #0 + bl OS_RestoreInterrupts + add r0, r5, #0 + pop {r4, r5, r6, pc} + nop +_021D7DE4: .word 0x0220FBC0 +_021D7DE8: .word 0x00001F08 + + thumb_func_start FUN_021D7DEC +FUN_021D7DEC: ; 0x021D7DEC + push {r3, r4, r5, lr} + add r5, r1, #0 + beq _021D7E0C + bl OS_DisableInterrupts + add r4, r0, #0 + ldr r0, _021D7E10 ; =0x0220FBC0 + ldr r1, [r0] + ldr r0, _021D7E14 ; =0x00001F08 + ldr r0, [r1, r0] + add r1, r5, #0 + bl FUN_020ADDF0 + add r0, r4, #0 + bl OS_RestoreInterrupts +_021D7E0C: + pop {r3, r4, r5, pc} + nop +_021D7E10: .word 0x0220FBC0 +_021D7E14: .word 0x00001F08 + + thumb_func_start FUN_021D7E18 +FUN_021D7E18: ; 0x021D7E18 + push {r4, lr} + sub sp, #8 + add r0, sp, #4 + add r1, sp, #0 + bl FUN_021DD718 + add r4, r0, #0 + beq _021D7EFA + ldr r0, [sp] + cmp r0, #7 + bhi _021D7EFA + add r0, r0, r0 + add r0, pc + ldrh r0, [r0, #6] + lsl r0, r0, #0x10 + asr r0, r0, #0x10 + add pc, r0 +_021D7E3A: ; jump table + .short _021D7EFA - _021D7E3A - 2 ; case 0 + .short _021D7E4A - _021D7E3A - 2 ; case 1 + .short _021D7EFA - _021D7E3A - 2 ; case 2 + .short _021D7E66 - _021D7E3A - 2 ; case 3 + .short _021D7EFA - _021D7E3A - 2 ; case 4 + .short _021D7EFA - _021D7E3A - 2 ; case 5 + .short _021D7E66 - _021D7E3A - 2 ; case 6 + .short _021D7ECE - _021D7E3A - 2 ; case 7 +_021D7E4A: + bl FUN_021DD6F0 + cmp r4, #0xa + blt _021D7E58 + add sp, #8 + add r0, r4, #0 + pop {r4, pc} +_021D7E58: + ldr r0, [sp, #4] + cmp r0, #0 + bne _021D7EFA + mov r0, #0 + add sp, #8 + mvn r0, r0 + pop {r4, pc} +_021D7E66: + ldr r0, _021D7F14 ; =0x0220FBC0 + ldr r1, [r0] + cmp r1, #0 + beq _021D7EB2 + ldr r0, _021D7F18 ; =0x00001F44 + ldr r0, [r1, r0] + cmp r0, #0x11 + bhi _021D7EAE + add r0, r0, r0 + add r0, pc + ldrh r0, [r0, #6] + lsl r0, r0, #0x10 + asr r0, r0, #0x10 + add pc, r0 +_021D7E82: ; jump table + .short _021D7EAA - _021D7E82 - 2 ; case 0 + .short _021D7EAA - _021D7E82 - 2 ; case 1 + .short _021D7EAA - _021D7E82 - 2 ; case 2 + .short _021D7EA6 - _021D7E82 - 2 ; case 3 + .short _021D7EA6 - _021D7E82 - 2 ; case 4 + .short _021D7EA6 - _021D7E82 - 2 ; case 5 + .short _021D7EA6 - _021D7E82 - 2 ; case 6 + .short _021D7EA6 - _021D7E82 - 2 ; case 7 + .short _021D7EA6 - _021D7E82 - 2 ; case 8 + .short _021D7EAE - _021D7E82 - 2 ; case 9 + .short _021D7EAE - _021D7E82 - 2 ; case 10 + .short _021D7EA6 - _021D7E82 - 2 ; case 11 + .short _021D7EAE - _021D7E82 - 2 ; case 12 + .short _021D7EAE - _021D7E82 - 2 ; case 13 + .short _021D7EAE - _021D7E82 - 2 ; case 14 + .short _021D7EA6 - _021D7E82 - 2 ; case 15 + .short _021D7EA6 - _021D7E82 - 2 ; case 16 + .short _021D7EA6 - _021D7E82 - 2 ; case 17 +_021D7EA6: + bl FUN_021E0200 +_021D7EAA: + bl FUN_021DDBBC +_021D7EAE: + bl FUN_021DD6F0 +_021D7EB2: + ldr r0, _021D7F14 ; =0x0220FBC0 + ldr r2, [r0] + cmp r2, #0 + beq _021D7EC0 + ldr r0, _021D7F18 ; =0x00001F44 + mov r1, #0xd + str r1, [r2, r0] +_021D7EC0: + ldr r0, [sp, #4] + cmp r0, #0 + bne _021D7F10 + mov r0, #0 + add sp, #8 + mvn r0, r0 + pop {r4, pc} +_021D7ECE: + ldr r1, _021D7F14 ; =0x0220FBC0 + ldr r3, [r1] + cmp r3, #0 + beq _021D7EEC + ldr r0, _021D7F18 ; =0x00001F44 + mov r2, #0xe + str r2, [r3, r0] + ldr r1, [r1] + sub r0, #0x30 + ldr r1, [r1, r0] + cmp r1, #0 + beq _021D7EEC + ldr r0, [sp, #4] + neg r0, r0 + blx r1 +_021D7EEC: + ldr r0, [sp, #4] + cmp r0, #0 + bne _021D7F10 + mov r0, #0 + add sp, #8 + mvn r0, r0 + pop {r4, pc} +_021D7EFA: + ldr r0, _021D7F14 ; =0x0220FBC0 + ldr r1, [r0] + ldr r0, _021D7F1C ; =0x00001F82 + ldrb r0, [r1, r0] + cmp r0, #0 + beq _021D7F0E + mov r0, #1 + add sp, #8 + mvn r0, r0 + pop {r4, pc} +_021D7F0E: + mov r0, #0 +_021D7F10: + add sp, #8 + pop {r4, pc} + .align 2, 0 +_021D7F14: .word 0x0220FBC0 +_021D7F18: .word 0x00001F44 +_021D7F1C: .word 0x00001F82 + + thumb_func_start FUN_021D7F20 +FUN_021D7F20: ; 0x021D7F20 + push {r3, r4, r5, lr} + ldr r0, _021D7F80 ; =0x0220FBC0 + ldr r1, [r0] + ldr r0, _021D7F84 ; =0x00001F4C + ldr r0, [r1, r0] + cmp r0, #0 + bne _021D7F7E + bl FUN_021DF95C + mov r1, #1 + sub r0, r1, r0 + lsl r0, r0, #0x18 + lsr r0, r0, #0x18 + bl FUN_021EB0FC + cmp r0, #0 + beq _021D7F7E + ldr r4, _021D7F80 ; =0x0220FBC0 + ldr r2, _021D7F84 ; =0x00001F4C + ldr r0, [r4] + mov r1, #1 + str r1, [r0, r2] + add r1, r2, #0 + ldr r0, [r4] + add r1, #0x2c + ldr r1, [r0, r1] + mov r3, #2 + lsl r1, r1, #8 + add r5, r1, #0 + orr r5, r3 + lsl r1, r3, #0xb + str r5, [r0, r1] + add r0, r2, #4 + ldr r1, [r4] + lsl r2, r3, #0xb + ldr r0, [r1, r0] + add r1, r1, r2 + lsl r0, r0, #0x18 + lsr r0, r0, #0x18 + mov r2, #4 + bl FUN_021EB044 + add r0, r4, #0 + ldr r1, [r0] + ldr r0, _021D7F88 ; =0x00001F74 + mov r2, #0 + str r2, [r1, r0] +_021D7F7E: + pop {r3, r4, r5, pc} + .align 2, 0 +_021D7F80: .word 0x0220FBC0 +_021D7F84: .word 0x00001F4C +_021D7F88: .word 0x00001F74 + + thumb_func_start FUN_021D7F8C +FUN_021D7F8C: ; 0x021D7F8C + push {r3, r4, r5, lr} + bl FUN_021DFF74 + bl FUN_021D83F0 + ldr r0, _021D800C ; =0x0220FBC0 + ldr r1, _021D8010 ; =0x00001F58 + ldr r2, [r0] + ldr r0, [r2, r1] + cmp r0, #0 + beq _021D7FC2 + add r0, r1, #0 + add r0, #0x20 + ldr r0, [r2, r0] + cmp r0, #1 + bne _021D7FBA + add r1, #0x24 + ldr r0, [r2, r1] + cmp r0, #1 + bne _021D7FBA + bl FUN_021D8D04 + b _021D7FBE +_021D7FBA: + bl FUN_021D8CF0 +_021D7FBE: + bl FUN_021D8944 +_021D7FC2: + ldr r4, _021D800C ; =0x0220FBC0 + ldr r3, _021D8014 ; =0x00001F44 + ldr r1, [r4] + ldr r0, [r1, r3] + cmp r0, #0x11 + bne _021D7FD2 + mov r0, #1 + pop {r3, r4, r5, pc} +_021D7FD2: + cmp r0, #0x10 + bne _021D7FDA + mov r0, #2 + pop {r3, r4, r5, pc} +_021D7FDA: + cmp r0, #7 + bne _021D8004 + add r2, r3, #0 + add r2, #0x30 + add r0, r3, #0 + ldr r2, [r1, r2] + add r0, #0x30 + add r5, r2, #1 + add r2, r3, #0 + ldr r0, [r1, r0] + add r2, #0x30 + str r5, [r1, r2] + cmp r0, #0x78 + blt _021D8004 + ldr r0, [r4] + add r3, #8 + ldr r0, [r0, r3] + cmp r0, #0 + bne _021D8004 + bl FUN_021D7F20 +_021D8004: + bl FUN_021D7E18 + pop {r3, r4, r5, pc} + nop +_021D800C: .word 0x0220FBC0 +_021D8010: .word 0x00001F58 +_021D8014: .word 0x00001F44 + + thumb_func_start FUN_021D8018 +FUN_021D8018: ; 0x021D8018 + push {r3, lr} + ldr r0, _021D803C ; =0x0220FBC0 + ldr r1, [r0] + cmp r1, #0 + beq _021D8034 + ldr r0, _021D8040 ; =0x00001F44 + ldr r0, [r1, r0] + cmp r0, #7 + beq _021D802E + cmp r0, #0xf + bne _021D8034 +_021D802E: + bl FUN_021DF95C + pop {r3, pc} +_021D8034: + mov r0, #0 + mvn r0, r0 + pop {r3, pc} + nop +_021D803C: .word 0x0220FBC0 +_021D8040: .word 0x00001F44 + + thumb_func_start FUN_021D8044 +FUN_021D8044: ; 0x021D8044 + ldr r0, _021D8050 ; =0x0220FBC0 + mov r2, #0 + ldr r1, [r0] + ldr r0, _021D8054 ; =0x00001F58 + str r2, [r1, r0] + bx lr + .align 2, 0 +_021D8050: .word 0x0220FBC0 +_021D8054: .word 0x00001F58 + + thumb_func_start FUN_021D8058 +FUN_021D8058: ; 0x021D8058 + push {r3, lr} + ldr r0, _021D80CC ; =0x0220FBC0 + ldr r2, _021D80D0 ; =0x00001F6C + ldr r0, [r0] + ldr r1, [r0, r2] + cmp r1, #5 + bhi _021D80AE + add r1, r1, r1 + add r1, pc + ldrh r1, [r1, #6] + lsl r1, r1, #0x10 + asr r1, r1, #0x10 + add pc, r1 +_021D8072: ; jump table + .short _021D80AE - _021D8072 - 2 ; case 0 + .short _021D80AE - _021D8072 - 2 ; case 1 + .short _021D807E - _021D8072 - 2 ; case 2 + .short _021D808A - _021D8072 - 2 ; case 3 + .short _021D8096 - _021D8072 - 2 ; case 4 + .short _021D80A2 - _021D8072 - 2 ; case 5 +_021D807E: + sub r2, #0x18 + ldr r0, [r0, r2] + mov r1, #1 + bl FUN_021D8A7C + b _021D80B8 +_021D808A: + sub r2, #0x18 + ldr r0, [r0, r2] + mov r1, #2 + bl FUN_021D8A7C + b _021D80B8 +_021D8096: + sub r2, #0x18 + ldr r0, [r0, r2] + mov r1, #3 + bl FUN_021D8A7C + b _021D80B8 +_021D80A2: + sub r2, #0x18 + ldr r0, [r0, r2] + mov r1, #4 + bl FUN_021D8A7C + b _021D80B8 +_021D80AE: + ldr r1, _021D80D4 ; =0x00001F54 + ldr r0, [r0, r1] + mov r1, #4 + bl FUN_021D8A7C +_021D80B8: + ldr r0, _021D80D8 ; =FUN_021D8044 + bl FUN_021D8C58 + ldr r0, _021D80CC ; =0x0220FBC0 + mov r2, #1 + ldr r1, [r0] + ldr r0, _021D80DC ; =0x00001F58 + str r2, [r1, r0] + pop {r3, pc} + nop +_021D80CC: .word 0x0220FBC0 +_021D80D0: .word 0x00001F6C +_021D80D4: .word 0x00001F54 +_021D80D8: .word FUN_021D8044 +_021D80DC: .word 0x00001F58 + + thumb_func_start FUN_021D80E0 +FUN_021D80E0: ; 0x021D80E0 + push {r3, r4, r5, lr} + mov r1, #0x64 + add r5, r0, #0 + bl _s32_div_f + mov r1, #0xfa + add r4, r0, #0 + add r0, r5, #0 + lsl r1, r1, #2 + bl _s32_div_f + ldr r2, _021D8270 ; =0x00004E84 + cmp r5, r2 + bne _021D8100 + mov r0, #0 + pop {r3, r4, r5, pc} +_021D8100: + add r1, r2, #2 + cmp r5, r1 + blt _021D8110 + add r1, r2, #7 + cmp r5, r1 + bgt _021D8110 + mov r0, #0 + pop {r3, r4, r5, pc} +_021D8110: + ldr r1, _021D8274 ; =0x00004E8D + cmp r5, r1 + bne _021D811A + mov r0, #0 + pop {r3, r4, r5, pc} +_021D811A: + add r1, r1, #2 + cmp r5, r1 + blt _021D812A + ldr r1, _021D8278 ; =0x00005207 + cmp r5, r1 + bgt _021D812A + mov r0, #0 + pop {r3, r4, r5, pc} +_021D812A: + ldr r1, _021D827C ; =0x0000CB24 + cmp r5, r1 + blt _021D813A + add r1, #0x5f + cmp r5, r1 + bgt _021D813A + mov r0, #0 + pop {r3, r4, r5, pc} +_021D813A: + ldr r1, _021D8280 ; =0x0000CB88 + cmp r5, r1 + blt _021D814A + add r1, #0x5f + cmp r5, r1 + bgt _021D814A + mov r0, #0 + pop {r3, r4, r5, pc} +_021D814A: + ldr r1, _021D8284 ; =0x0000CBEC + cmp r5, r1 + blt _021D815A + add r1, #0x5f + cmp r5, r1 + bgt _021D815A + mov r0, #0 + pop {r3, r4, r5, pc} +_021D815A: + ldr r1, _021D8288 ; =0x0000020B + cmp r4, r1 + bne _021D8164 + mov r0, #0 + pop {r3, r4, r5, pc} +_021D8164: + add r2, r1, #7 + cmp r4, r2 + bne _021D816E + mov r0, #0 + pop {r3, r4, r5, pc} +_021D816E: + add r2, r1, #0 + add r2, #8 + cmp r4, r2 + bne _021D817A + mov r0, #0 + pop {r3, r4, r5, pc} +_021D817A: + add r2, r1, #0 + add r2, #9 + cmp r4, r2 + bne _021D8186 + mov r0, #0 + pop {r3, r4, r5, pc} +_021D8186: + ldr r3, _021D828C ; =0x00004E85 + cmp r5, r3 + bne _021D8190 + mov r0, #1 + pop {r3, r4, r5, pc} +_021D8190: + cmp r0, #0x17 + bne _021D8198 + mov r0, #1 + pop {r3, r4, r5, pc} +_021D8198: + add r2, r3, #7 + cmp r5, r2 + bne _021D81A2 + mov r0, #2 + pop {r3, r4, r5, pc} +_021D81A2: + add r3, #9 + cmp r5, r3 + bne _021D81AC + mov r0, #3 + pop {r3, r4, r5, pc} +_021D81AC: + add r2, r1, #0 + sub r2, #0xb + cmp r4, r2 + bne _021D81B8 + mov r0, #4 + pop {r3, r4, r5, pc} +_021D81B8: + sub r1, #0x17 + cmp r4, r1 + bne _021D81C2 + mov r0, #5 + pop {r3, r4, r5, pc} +_021D81C2: + ldr r1, _021D8290 ; =0x0000C738 + cmp r5, r1 + blt _021D81D2 + add r1, #0x66 + cmp r5, r1 + bgt _021D81D2 + mov r0, #6 + pop {r3, r4, r5, pc} +_021D81D2: + ldr r1, _021D8294 ; =0x0000C7A0 + cmp r5, r1 + blt _021D81E2 + add r1, #0x5f + cmp r5, r1 + bgt _021D81E2 + mov r0, #6 + pop {r3, r4, r5, pc} +_021D81E2: + ldr r1, _021D8298 ; =0x00000201 + cmp r4, r1 + bne _021D81EC + mov r0, #6 + pop {r3, r4, r5, pc} +_021D81EC: + ldr r1, _021D829C ; =0x0000C79F + cmp r5, r1 + bne _021D81F6 + mov r0, #7 + pop {r3, r4, r5, pc} +_021D81F6: + ldr r1, _021D82A0 ; =0x0000CB20 + cmp r5, r1 + blt _021D8206 + add r1, r1, #3 + cmp r5, r1 + bgt _021D8206 + mov r0, #8 + pop {r3, r4, r5, pc} +_021D8206: + ldr r1, _021D82A4 ; =0x0000CB84 + cmp r5, r1 + blt _021D8216 + add r1, r1, #3 + cmp r5, r1 + bgt _021D8216 + mov r0, #8 + pop {r3, r4, r5, pc} +_021D8216: + ldr r1, _021D82A8 ; =0x0000CBE8 + cmp r5, r1 + blt _021D8226 + add r1, r1, #3 + cmp r5, r1 + bgt _021D8226 + mov r0, #8 + pop {r3, r4, r5, pc} +_021D8226: + ldr r1, _021D82AC ; =0x00013A2E + cmp r5, r1 + bne _021D8230 + mov r0, #9 + pop {r3, r4, r5, pc} +_021D8230: + cmp r0, #0x18 + bne _021D8238 + mov r0, #0xa + pop {r3, r4, r5, pc} +_021D8238: + cmp r0, #0x19 + bne _021D8240 + mov r0, #0xa + pop {r3, r4, r5, pc} +_021D8240: + cmp r0, #0x1f + bne _021D8248 + mov r0, #0xa + pop {r3, r4, r5, pc} +_021D8248: + cmp r0, #0x36 + bne _021D8250 + mov r0, #0xa + pop {r3, r4, r5, pc} +_021D8250: + ldr r0, _021D82B0 ; =0x0000EA60 + cmp r5, r0 + blt _021D8260 + ldr r0, _021D82B4 ; =0x0001869F + cmp r5, r0 + bgt _021D8260 + mov r0, #0xa + pop {r3, r4, r5, pc} +_021D8260: + ldr r0, _021D82B8 ; =0x00002710 + cmp r5, r0 + bge _021D826A + mov r0, #0xb + pop {r3, r4, r5, pc} +_021D826A: + mov r0, #0 + mvn r0, r0 + pop {r3, r4, r5, pc} + .align 2, 0 +_021D8270: .word 0x00004E84 +_021D8274: .word 0x00004E8D +_021D8278: .word 0x00005207 +_021D827C: .word 0x0000CB24 +_021D8280: .word 0x0000CB88 +_021D8284: .word 0x0000CBEC +_021D8288: .word 0x0000020B +_021D828C: .word 0x00004E85 +_021D8290: .word 0x0000C738 +_021D8294: .word 0x0000C7A0 +_021D8298: .word 0x00000201 +_021D829C: .word 0x0000C79F +_021D82A0: .word 0x0000CB20 +_021D82A4: .word 0x0000CB84 +_021D82A8: .word 0x0000CBE8 +_021D82AC: .word 0x00013A2E +_021D82B0: .word 0x0000EA60 +_021D82B4: .word 0x0001869F +_021D82B8: .word 0x00002710 + + thumb_func_start FUN_021D82BC +FUN_021D82BC: ; 0x021D82BC + push {r3, lr} + cmp r0, #0 + bne _021D8346 + ldr r0, _021D8364 ; =0x0220FBC0 + ldr r2, _021D8368 ; =0x00001F44 + ldr r0, [r0] + ldr r1, [r0, r2] + cmp r1, #0x11 + bhi _021D835E + add r1, r1, r1 + add r1, pc + ldrh r1, [r1, #6] + lsl r1, r1, #0x10 + asr r1, r1, #0x10 + add pc, r1 +_021D82DA: ; jump table + .short _021D835E - _021D82DA - 2 ; case 0 + .short _021D835E - _021D82DA - 2 ; case 1 + .short _021D835E - _021D82DA - 2 ; case 2 + .short _021D835E - _021D82DA - 2 ; case 3 + .short _021D8342 - _021D82DA - 2 ; case 4 + .short _021D82FE - _021D82DA - 2 ; case 5 + .short _021D835E - _021D82DA - 2 ; case 6 + .short _021D82FE - _021D82DA - 2 ; case 7 + .short _021D835E - _021D82DA - 2 ; case 8 + .short _021D835E - _021D82DA - 2 ; case 9 + .short _021D835E - _021D82DA - 2 ; case 10 + .short _021D835E - _021D82DA - 2 ; case 11 + .short _021D835E - _021D82DA - 2 ; case 12 + .short _021D8342 - _021D82DA - 2 ; case 13 + .short _021D835E - _021D82DA - 2 ; case 14 + .short _021D8328 - _021D82DA - 2 ; case 15 + .short _021D8342 - _021D82DA - 2 ; case 16 + .short _021D8342 - _021D82DA - 2 ; case 17 +_021D82FE: + add r2, #0x14 + ldr r0, [r0, r2] + cmp r0, #0 + beq _021D8316 + bl FUN_021D8C08 + ldr r0, _021D8364 ; =0x0220FBC0 + mov r2, #0xf + ldr r1, [r0] + ldr r0, _021D8368 ; =0x00001F44 + str r2, [r1, r0] + b _021D835E +_021D8316: + bl FUN_021DFA40 + ldr r0, _021D8364 ; =0x0220FBC0 + mov r2, #0x10 + ldr r1, [r0] + ldr r0, _021D8368 ; =0x00001F44 + str r2, [r1, r0] + mov r0, #1 + pop {r3, pc} +_021D8328: + add r2, #0x14 + ldr r0, [r0, r2] + cmp r0, #0 + bne _021D835E + bl FUN_021DFA40 + ldr r0, _021D8364 ; =0x0220FBC0 + mov r2, #0x10 + ldr r1, [r0] + ldr r0, _021D8368 ; =0x00001F44 + str r2, [r1, r0] + mov r0, #1 + pop {r3, pc} +_021D8342: + mov r0, #1 + pop {r3, pc} +_021D8346: + ldr r0, _021D8364 ; =0x0220FBC0 + ldr r1, [r0] + ldr r0, _021D8368 ; =0x00001F44 + ldr r0, [r1, r0] + cmp r0, #4 + beq _021D835A + cmp r0, #0x10 + beq _021D835A + cmp r0, #0x11 + bne _021D835E +_021D835A: + mov r0, #1 + pop {r3, pc} +_021D835E: + mov r0, #0 + pop {r3, pc} + nop +_021D8364: .word 0x0220FBC0 +_021D8368: .word 0x00001F44 + + thumb_func_start FUN_021D836C +FUN_021D836C: ; 0x021D836C + push {r3, r4} + ldr r2, _021D83A0 ; =0x0220FBC0 + ldr r1, _021D83A4 ; =0x00001F44 + ldr r3, [r2] + ldr r0, [r3, r1] + sub r0, #0x10 + cmp r0, #1 + bhi _021D8398 + mov r4, #0 + add r0, r1, #0 + mvn r4, r4 + add r0, #0xc + str r4, [r3, r0] + ldr r0, [r2] + mov r3, #4 + str r3, [r0, r1] + ldr r0, [r2] + add r1, #0x1c + str r4, [r0, r1] + mov r0, #1 + pop {r3, r4} + bx lr +_021D8398: + mov r0, #0 + pop {r3, r4} + bx lr + nop +_021D83A0: .word 0x0220FBC0 +_021D83A4: .word 0x00001F44 + + thumb_func_start FUN_021D83A8 +FUN_021D83A8: ; 0x021D83A8 + ldr r1, _021D83B8 ; =0x0220FBC0 + ldr r2, [r1] + cmp r2, #0 + beq _021D83B4 + ldr r1, _021D83BC ; =0x00001F14 + str r0, [r2, r1] +_021D83B4: + bx lr + nop +_021D83B8: .word 0x0220FBC0 +_021D83BC: .word 0x00001F14 + + thumb_func_start FUN_021D83C0 +FUN_021D83C0: ; 0x021D83C0 + push {r3, lr} + bl FUN_021E0200 + bl FUN_021DDBBC + bl FUN_021D8C6C + bl FUN_021D7660 + pop {r3, pc} + + thumb_func_start FUN_021D83D4 +FUN_021D83D4: ; 0x021D83D4 + push {r3, r4} + ldr r3, _021D83E8 ; =0x0220FBC0 + ldr r2, _021D83EC ; =0x00001F38 + ldr r4, [r3] + str r0, [r4, r2] + ldr r3, [r3] + add r0, r2, #4 + str r1, [r3, r0] + pop {r3, r4} + bx lr + .align 2, 0 +_021D83E8: .word 0x0220FBC0 +_021D83EC: .word 0x00001F38 + + thumb_func_start FUN_021D83F0 +FUN_021D83F0: ; 0x021D83F0 + push {r3, r4, r5, r6, r7, lr} + ldr r6, _021D8468 ; =0x0220FBC0 + ldr r0, _021D846C ; =0x00001F38 + ldr r1, [r6] + ldr r0, [r1, r0] + cmp r0, #0 + beq _021D8464 + mov r7, #0 +_021D8400: + mov r1, #0x7d + ldr r0, [r6] + lsl r1, r1, #6 + ldr r2, [r0, r1] + mov r1, #0x1f + add r5, r2, #0 + and r5, r1 + mov r1, #0xc + add r4, r5, #0 + mul r4, r1 + mov r1, #0x11 + lsl r1, r1, #8 + ldr r0, [r0, r1] + add r0, r0, r4 + bl FUN_02097490 + cmp r0, #0 + beq _021D844A + mov r0, #0x11 + ldr r2, [r6] + ldr r1, _021D846C ; =0x00001F38 + lsl r0, r0, #8 + ldr r0, [r2, r0] + ldr r3, _021D8470 ; =0x00001F3C + ldr r1, [r2, r1] + ldr r2, [r2, r3] + add r0, r0, r4 + add r3, r2, #0 + mul r3, r5 + add r1, r1, r3 + add r2, sp, #0 + bl FUN_021E2578 + ldr r1, [r6] + add r2, r1, r5 + ldr r1, _021D8474 ; =0x00001F18 + strb r0, [r2, r1] +_021D844A: + mov r1, #0x7d + ldr r0, [r6] + lsl r1, r1, #6 + ldr r1, [r0, r1] + add r7, r7, #1 + add r2, r1, #1 + mov r1, #0x1f + and r2, r1 + mov r1, #0x7d + lsl r1, r1, #6 + str r2, [r0, r1] + cmp r7, #4 + blt _021D8400 +_021D8464: + pop {r3, r4, r5, r6, r7, pc} + nop +_021D8468: .word 0x0220FBC0 +_021D846C: .word 0x00001F38 +_021D8470: .word 0x00001F3C +_021D8474: .word 0x00001F18 + + thumb_func_start FUN_021D8478 +FUN_021D8478: ; 0x021D8478 + ldr r3, _021D847C ; =FUN_021E2454 + bx r3 + .align 2, 0 +_021D847C: .word FUN_021E2454 + + thumb_func_start FUN_021D8480 +FUN_021D8480: ; 0x021D8480 + ldr r1, _021D848C ; =0x0220FBC0 + ldr r1, [r1] + add r1, r1, r0 + ldr r0, _021D8490 ; =0x00001F18 + ldrb r0, [r1, r0] + bx lr + .align 2, 0 +_021D848C: .word 0x0220FBC0 +_021D8490: .word 0x00001F18 + + thumb_func_start FUN_021D8494 +FUN_021D8494: ; 0x021D8494 + push {r3, lr} + ldr r1, _021D8510 ; =0x0220FBC0 + ldr r3, [r1] + ldr r1, _021D8514 ; =0x00001F44 + ldr r2, [r3, r1] + cmp r2, #4 + beq _021D84A6 + mov r0, #0 + pop {r3, pc} +_021D84A6: + add r1, #0x18 + str r0, [r3, r1] + cmp r0, #0 + bge _021D84C2 + ldr r1, _021D8518 ; =FUN_021D8558 + mov r2, #0 + ldr r3, _021D851C ; =FUN_021D85A0 + mov r0, #2 + str r2, [sp] + bl FUN_021DFD18 + mov r2, #1 + ldr r0, _021D8510 ; =0x0220FBC0 + b _021D84D2 +_021D84C2: + ldr r1, _021D8520 ; =FUN_021D8590 + mov r2, #0 + ldr r3, _021D851C ; =FUN_021D85A0 + str r2, [sp] + bl FUN_021DFB20 + ldr r0, _021D8510 ; =0x0220FBC0 + mov r2, #2 +_021D84D2: + ldr r1, [r0] + ldr r0, _021D8524 ; =0x00001F48 + str r2, [r1, r0] + ldr r0, _021D8510 ; =0x0220FBC0 + mov r2, #5 + ldr r1, [r0] + ldr r0, _021D8514 ; =0x00001F44 + str r2, [r1, r0] + ldr r0, _021D8528 ; =FUN_021D7C30 + bl FUN_021EAE18 + ldr r0, _021D852C ; =FUN_021D7C4C + bl FUN_021EADF8 + ldr r0, _021D8530 ; =FUN_021D7D68 + mov r1, #0 + bl FUN_021DFAF8 + ldr r0, _021D8534 ; =FUN_021D7B14 + bl FUN_021EADD8 + ldr r1, _021D8510 ; =0x0220FBC0 + ldr r0, _021D8538 ; =0x00001F4C + ldr r2, [r1] + mov r3, #0 + str r3, [r2, r0] + ldr r1, [r1] + add r0, #0x3c + str r3, [r1, r0] + mov r0, #1 + pop {r3, pc} + .align 2, 0 +_021D8510: .word 0x0220FBC0 +_021D8514: .word 0x00001F44 +_021D8518: .word FUN_021D8558 +_021D851C: .word FUN_021D85A0 +_021D8520: .word FUN_021D8590 +_021D8524: .word 0x00001F48 +_021D8528: .word FUN_021D7C30 +_021D852C: .word FUN_021D7C4C +_021D8530: .word FUN_021D7D68 +_021D8534: .word FUN_021D7B14 +_021D8538: .word 0x00001F4C + + thumb_func_start FUN_021D853C +FUN_021D853C: ; 0x021D853C + ldr r0, _021D8550 ; =0x0220FBC0 + ldr r1, [r0] + cmp r1, #0 + beq _021D854A + ldr r0, _021D8554 ; =0x00001F5C + ldr r0, [r1, r0] + bx lr +_021D854A: + mov r0, #0 + mvn r0, r0 + bx lr + .align 2, 0 +_021D8550: .word 0x0220FBC0 +_021D8554: .word 0x00001F5C + + thumb_func_start FUN_021D8558 +FUN_021D8558: ; 0x021D8558 + push {r3, lr} + cmp r0, #0 + bne _021D8582 + cmp r1, #0 + bne _021D8572 + ldr r0, _021D8584 ; =0x0220FBC0 + ldr r2, [sp, #8] + ldr r1, [r0] + ldr r0, _021D8588 ; =0x00001F5C + str r2, [r1, r0] + bl FUN_021D7BC0 + pop {r3, pc} +_021D8572: + cmp r2, #0 + bne _021D8582 + ldr r0, _021D8584 ; =0x0220FBC0 + mov r2, #0 + ldr r1, [r0] + ldr r0, _021D858C ; =0x00001F60 + mvn r2, r2 + str r2, [r1, r0] +_021D8582: + pop {r3, pc} + .align 2, 0 +_021D8584: .word 0x0220FBC0 +_021D8588: .word 0x00001F5C +_021D858C: .word 0x00001F60 + + thumb_func_start FUN_021D8590 +FUN_021D8590: ; 0x021D8590 + push {r3, lr} + cmp r0, #0 + bne _021D859E + cmp r1, #0 + bne _021D859E + bl FUN_021D7BC0 +_021D859E: + pop {r3, pc} + + thumb_func_start FUN_021D85A0 +FUN_021D85A0: ; 0x021D85A0 + ldr r1, _021D85AC ; =0x0220FBC0 + ldr r2, [r1] + ldr r1, _021D85B0 ; =0x00001F60 + str r0, [r2, r1] + bx lr + nop +_021D85AC: .word 0x0220FBC0 +_021D85B0: .word 0x00001F60 + + thumb_func_start FUN_021D85B4 +FUN_021D85B4: ; 0x021D85B4 + push {r3, r4, r5, r6, r7, lr} + sub sp, #0x18 + ldr r0, _021D8614 ; =0x0220FBC0 + ldr r1, [r0] + ldr r0, _021D8618 ; =0x00001EF0 + ldr r0, [r1, r0] + bl FUN_02096F80 + cmp r0, #0 + bne _021D85D8 + ldr r0, _021D8614 ; =0x0220FBC0 + ldr r1, [r0] + ldr r0, _021D8618 ; =0x00001EF0 + ldr r0, [r1, r0] + add r1, sp, #0xc + bl FUN_02096CCC + b _021D85E6 +_021D85D8: + ldr r0, _021D8614 ; =0x0220FBC0 + ldr r1, [r0] + ldr r0, _021D8618 ; =0x00001EF0 + ldr r0, [r1, r0] + add r1, sp, #0 + bl FUN_02096CCC +_021D85E6: + mov r4, #0 + mov r7, #0x11 + ldr r6, _021D8614 ; =0x0220FBC0 + add r5, r4, #0 + lsl r7, r7, #8 +_021D85F0: + mov r0, #0x11 + ldr r1, [r6] + lsl r0, r0, #8 + ldr r0, [r1, r0] + add r0, r0, r5 + bl FUN_02097484 + ldr r0, [r6] + ldr r0, [r0, r7] + add r0, r0, r5 + bl FUN_02097490 + add r4, r4, #1 + add r5, #0xc + cmp r4, #0x20 + blt _021D85F0 + add sp, #0x18 + pop {r3, r4, r5, r6, r7, pc} + .align 2, 0 +_021D8614: .word 0x0220FBC0 +_021D8618: .word 0x00001EF0 + + thumb_func_start FUN_021D861C +FUN_021D861C: ; 0x021D861C + ldr r3, _021D8620 ; =FUN_021D8CC8 + bx r3 + .align 2, 0 +_021D8620: .word FUN_021D8CC8 + + thumb_func_start FUN_021D8624 +FUN_021D8624: ; 0x021D8624 + ldr r0, _021D8638 ; =0x0220FBC0 + ldr r1, [r0] + cmp r1, #0 + beq _021D8632 + ldr r0, _021D863C ; =0x00001F68 + ldr r0, [r1, r0] + bx lr +_021D8632: + mov r0, #0 + bx lr + nop +_021D8638: .word 0x0220FBC0 +_021D863C: .word 0x00001F68 + + thumb_func_start FUN_021D8640 +FUN_021D8640: ; 0x021D8640 + ldr r0, _021D8654 ; =0x0220FBC0 + ldr r1, [r0] + cmp r1, #0 + beq _021D864E + ldr r0, _021D8658 ; =0x00001F60 + ldr r0, [r1, r0] + bx lr +_021D864E: + mov r0, #0 + bx lr + nop +_021D8654: .word 0x0220FBC0 +_021D8658: .word 0x00001F60 + + thumb_func_start FUN_021D865C +FUN_021D865C: ; 0x021D865C + ldr r0, _021D8670 ; =0x0220FBC0 + ldr r2, [r0] + cmp r2, #0 + beq _021D866C + mov r1, #0 + ldr r0, _021D8674 ; =0x00001F60 + mvn r1, r1 + str r1, [r2, r0] +_021D866C: + bx lr + nop +_021D8670: .word 0x0220FBC0 +_021D8674: .word 0x00001F60 + + thumb_func_start FUN_021D8678 +FUN_021D8678: ; 0x021D8678 + ldr r1, _021D8684 ; =0x0220FBC0 + ldr r2, [r1] + ldr r1, _021D8688 ; =0x00001F68 + str r0, [r2, r1] + bx lr + nop +_021D8684: .word 0x0220FBC0 +_021D8688: .word 0x00001F68 + + thumb_func_start FUN_021D868C +FUN_021D868C: ; 0x021D868C + push {r3, r4, r5, lr} + bl MIC_Init + bl PM_Init + mov r0, #1 + bl PM_SetAmp + mov r0, #3 + bl PM_SetAmpGain + ldr r0, _021D8718 ; =0x0220FBC8 + mov r2, #0 + ldr r1, [r0, #4] + ldr r3, _021D871C ; =0x00003584 + add r5, r2, #0 + str r2, [r1, r3] + add r1, r3, #0 + ldr r4, [r0, #4] + add r1, #0xc + str r2, [r4, r1] + ldr r4, [r0, #4] + add r1, r3, #4 + str r2, [r4, r1] + add r1, r3, #0 + ldr r4, [r0, #4] + add r1, #8 + str r2, [r4, r1] + ldr r1, [r0, #4] + add r3, #0x10 + str r2, [r1, r3] + ldr r3, _021D8720 ; =0x00003598 + add r1, r2, #0 +_021D86CE: + ldr r4, [r0, #4] + add r2, r2, #1 + add r4, r4, r5 + add r5, r5, #2 + strh r1, [r4, r3] + cmp r2, #0x10 + blt _021D86CE + ldr r0, _021D8718 ; =0x0220FBC8 + ldr r2, [r0, #4] + ldr r0, _021D8724 ; =0x000035B8 + str r1, [r2, r0] + mov r0, #1 + bl FUN_020AA770 + bl FUN_020C01D0 + ldr r0, _021D8718 ; =0x0220FBC8 + ldr r1, [r0, #4] + ldr r0, _021D8728 ; =0x00003504 + add r0, r1, r0 + bl FUN_020C16FC + ldr r1, _021D8718 ; =0x0220FBC8 + mov r0, #0 + ldr r2, [r1, #4] + mov r1, #0xb1 + lsl r1, r1, #6 + add r1, r2, r1 + mov r2, #0x22 + lsl r2, r2, #6 + bl MIi_CpuClearFast + ldr r0, _021D8718 ; =0x0220FBC8 + mov r1, #0 + str r1, [r0, #8] + pop {r3, r4, r5, pc} + nop +_021D8718: .word 0x0220FBC8 +_021D871C: .word 0x00003584 +_021D8720: .word 0x00003598 +_021D8724: .word 0x000035B8 +_021D8728: .word 0x00003504 + + thumb_func_start FUN_021D872C +FUN_021D872C: ; 0x021D872C + bx lr + .align 2, 0 + + thumb_func_start FUN_021D8730 +FUN_021D8730: ; 0x021D8730 + push {r4, r5, r6, lr} + add r6, r2, #0 + add r5, r3, #0 + ldr r4, [sp, #0x14] + cmp r0, #0 + bne _021D8748 + ldr r0, [r6] + mov r1, #0 + add r2, r5, #0 + bl MI_CpuFill8 + pop {r4, r5, r6, pc} +_021D8748: + ldr r0, _021D87B8 ; =0x0220FBC8 + ldr r2, [r0, #4] + ldr r0, _021D87BC ; =0x00003565 + ldrb r1, [r2, r0] + cmp r1, #0 + beq _021D876A + add r0, r0, #3 + add r0, r2, r0 + ldr r1, _021D87C0 ; =FUN_021D872C + mov r2, #0 + bl MIC_StartAutoSamplingAsync + ldr r0, _021D87B8 ; =0x0220FBC8 + mov r2, #0 + ldr r1, [r0, #4] + ldr r0, _021D87BC ; =0x00003565 + strb r2, [r1, r0] +_021D876A: + bl MIC_GetLastSamplingAddress + sub r0, r0, r4 + cmp r0, r5 + bhs _021D8776 + add r4, r4, r5 +_021D8776: + ldr r0, _021D87C4 ; =0x027FFFA8 + ldrh r1, [r0] + mov r0, #2 + lsl r0, r0, #0xe + and r0, r1 + asr r0, r0, #0xf + beq _021D878E + ldr r0, _021D87B8 ; =0x0220FBC8 + ldr r1, [r0, #4] + mov r0, #0xb1 + lsl r0, r0, #6 + add r4, r1, r0 +_021D878E: + ldr r0, _021D87B8 ; =0x0220FBC8 + ldr r1, [r0, #4] + ldr r0, _021D87C8 ; =0x000034FC + ldr r0, [r1, r0] + cmp r0, #0 + bne _021D87A2 + add r0, r4, #0 + add r1, r5, #0 + bl FUN_020AABDC +_021D87A2: + ldr r0, [r6] + add r1, r5, #0 + mov r2, #0 + bl FUN_020AA824 + ldr r0, _021D87B8 ; =0x0220FBC8 + mov r2, #2 + ldr r1, [r0, #4] + ldr r0, _021D87CC ; =0x00003564 + strb r2, [r1, r0] + pop {r4, r5, r6, pc} + .align 2, 0 +_021D87B8: .word 0x0220FBC8 +_021D87BC: .word 0x00003565 +_021D87C0: .word FUN_021D872C +_021D87C4: .word 0x027FFFA8 +_021D87C8: .word 0x000034FC +_021D87CC: .word 0x00003564 + + thumb_func_start FUN_021D87D0 +FUN_021D87D0: ; 0x021D87D0 + push {r4, lr} + ldr r1, _021D8810 ; =0x0220FBC8 + ldr r2, [r1, #4] + ldr r1, _021D8814 ; =0x00003560 + ldr r1, [r2, r1] + cmp r1, #0 + bne _021D880A + bl FUN_020ACD54 + add r4, r0, #0 + bne _021D87EA + mov r0, #0 + pop {r4, pc} +_021D87EA: + mov r1, #0 + bl FUN_020ACBA0 + cmp r0, #0 + beq _021D87FE + add r0, r4, #0 + bl FUN_020ACC84 + mov r0, #0 + pop {r4, pc} +_021D87FE: + ldr r0, _021D8810 ; =0x0220FBC8 + ldr r1, [r0, #4] + ldr r0, _021D8814 ; =0x00003560 + str r4, [r1, r0] + mov r0, #1 + pop {r4, pc} +_021D880A: + mov r0, #0 + pop {r4, pc} + nop +_021D8810: .word 0x0220FBC8 +_021D8814: .word 0x00003560 + + thumb_func_start FUN_021D8818 +FUN_021D8818: ; 0x021D8818 + push {r3, lr} + ldr r0, _021D8858 ; =0x0220FBC8 + ldr r1, [r0, #4] + ldr r0, _021D885C ; =0x00003560 + ldr r0, [r1, r0] + cmp r0, #0 + beq _021D8852 + ldr r1, [r0, #0xc] + cmp r1, #4 + bne _021D8852 + mov r1, #0 + bl FUN_020ACAB0 + cmp r0, #0 + beq _021D883A + mov r0, #0 + pop {r3, pc} +_021D883A: + ldr r0, _021D8858 ; =0x0220FBC8 + ldr r1, [r0, #4] + ldr r0, _021D885C ; =0x00003560 + ldr r0, [r1, r0] + bl FUN_020AADCC + cmp r0, #0 + beq _021D884E + mov r0, #1 + pop {r3, pc} +_021D884E: + mov r0, #0 + pop {r3, pc} +_021D8852: + mov r0, #0 + pop {r3, pc} + nop +_021D8858: .word 0x0220FBC8 +_021D885C: .word 0x00003560 + + thumb_func_start FUN_021D8860 +FUN_021D8860: ; 0x021D8860 + push {r4, lr} + add r4, r2, #0 + cmp r1, #0xc + bhi _021D8902 + add r0, r1, r1 + add r0, pc + ldrh r0, [r0, #6] + lsl r0, r0, #0x10 + asr r0, r0, #0x10 + add pc, r0 +_021D8874: ; jump table + .short _021D8902 - _021D8874 - 2 ; case 0 + .short _021D888E - _021D8874 - 2 ; case 1 + .short _021D88F4 - _021D8874 - 2 ; case 2 + .short _021D88FC - _021D8874 - 2 ; case 3 + .short _021D88CE - _021D8874 - 2 ; case 4 + .short _021D8902 - _021D8874 - 2 ; case 5 + .short _021D8902 - _021D8874 - 2 ; case 6 + .short _021D88DE - _021D8874 - 2 ; case 7 + .short _021D88AE - _021D8874 - 2 ; case 8 + .short _021D88C2 - _021D8874 - 2 ; case 9 + .short _021D8902 - _021D8874 - 2 ; case 10 + .short _021D88FC - _021D8874 - 2 ; case 11 + .short _021D88FC - _021D8874 - 2 ; case 12 +_021D888E: + ldr r0, _021D8904 ; =0x0220FBC8 + ldr r2, [r0, #4] + ldr r0, _021D8908 ; =0x00003560 + ldr r1, [r2, r0] + cmp r1, #0 + beq _021D88AA + add r0, r4, #0 + mov r1, #3 + bl FUN_020ACAB0 + add r0, r4, #0 + bl FUN_020ACC84 + pop {r4, pc} +_021D88AA: + str r4, [r2, r0] + pop {r4, pc} +_021D88AE: + add r0, r4, #0 + mov r1, #0 + bl FUN_020ACAB0 + add r0, r4, #0 + bl FUN_021D8910 + bl FUN_021D8C6C + pop {r4, pc} +_021D88C2: + add r0, r4, #0 + bl FUN_021D8910 + bl FUN_021D8C6C + pop {r4, pc} +_021D88CE: + add r0, r4, #0 + mov r1, #4 + bl FUN_020ACAB0 + add r0, r4, #0 + bl FUN_021D8910 + pop {r4, pc} +_021D88DE: + add r0, r4, #0 + bl FUN_020AADCC + cmp r0, #0 + beq _021D8902 + ldr r0, _021D8904 ; =0x0220FBC8 + mov r2, #2 + ldr r1, [r0, #4] + ldr r0, _021D890C ; =0x000034F8 + str r2, [r1, r0] + pop {r4, pc} +_021D88F4: + add r0, r4, #0 + bl FUN_021D8910 + pop {r4, pc} +_021D88FC: + add r0, r4, #0 + bl FUN_021D8910 +_021D8902: + pop {r4, pc} + .align 2, 0 +_021D8904: .word 0x0220FBC8 +_021D8908: .word 0x00003560 +_021D890C: .word 0x000034F8 + + thumb_func_start FUN_021D8910 +FUN_021D8910: ; 0x021D8910 + push {r4, lr} + ldr r1, _021D893C ; =0x0220FBC8 + add r4, r0, #0 + ldr r2, [r1, #4] + ldr r1, _021D8940 ; =0x00003560 + ldr r1, [r2, r1] + cmp r4, r1 + bne _021D8936 + bl FUN_020AACFC + add r0, r4, #0 + bl FUN_020ACC84 + ldr r0, _021D893C ; =0x0220FBC8 + mov r2, #0 + ldr r1, [r0, #4] + ldr r0, _021D8940 ; =0x00003560 + str r2, [r1, r0] + pop {r4, pc} +_021D8936: + bl FUN_020ACC84 + pop {r4, pc} + .align 2, 0 +_021D893C: .word 0x0220FBC8 +_021D8940: .word 0x00003560 + + thumb_func_start FUN_021D8944 +FUN_021D8944: ; 0x021D8944 + push {r4, r5, r6, lr} + bl OS_GetTick + add r4, r0, #0 + ldr r0, _021D8A3C ; =0x0220FBC8 + add r5, r1, #0 + ldr r0, [r0, #0xc] + sub r1, r4, r0 + mov r0, #0xfa + lsl r0, r0, #8 + mul r0, r1 + ldr r1, _021D8A40 ; =0x000082EA + bl _u32_div_f + ldr r1, _021D8A3C ; =0x0220FBC8 + ldr r3, _021D8A44 ; =0x0000411A + ldr r2, [r1, #8] + sub r0, r0, r3 + add r2, r2, r0 + ldr r0, _021D8A48 ; =0xFFFFD8F0 + str r2, [r1, #8] + cmp r2, r0 + bge _021D8976 + mov r0, #0 + str r0, [r1, #8] +_021D8976: + ldr r0, _021D8A3C ; =0x0220FBC8 + str r4, [r0, #0xc] + str r5, [r0, #0x10] + bl FUN_020AD8A8 + ldr r4, _021D8A3C ; =0x0220FBC8 + ldr r0, _021D8A44 ; =0x0000411A + ldr r1, [r4, #8] + cmp r1, r0 + blt _021D899C + add r6, r0, #0 + add r5, r0, #0 +_021D898E: + bl FUN_020AD8A8 + ldr r0, [r4, #8] + sub r0, r0, r6 + str r0, [r4, #8] + cmp r0, r5 + bge _021D898E +_021D899C: + ldr r0, _021D8A3C ; =0x0220FBC8 + ldr r2, [r0, #4] + ldr r0, _021D8A4C ; =0x0000358C + ldr r1, [r2, r0] + cmp r1, #0 + beq _021D89EC + sub r0, r0, #4 + ldr r0, [r2, r0] + cmp r0, #3 + bhi _021D89E2 + add r0, r0, r0 + add r0, pc + ldrh r0, [r0, #6] + lsl r0, r0, #0x10 + asr r0, r0, #0x10 + add pc, r0 +_021D89BC: ; jump table + .short _021D89C4 - _021D89BC - 2 ; case 0 + .short _021D89CC - _021D89BC - 2 ; case 1 + .short _021D89D4 - _021D89BC - 2 ; case 2 + .short _021D89DC - _021D89BC - 2 ; case 3 +_021D89C4: + mov r0, #3 + bl PM_SetAmpGain + b _021D89E2 +_021D89CC: + mov r0, #2 + bl PM_SetAmpGain + b _021D89E2 +_021D89D4: + mov r0, #1 + bl PM_SetAmpGain + b _021D89E2 +_021D89DC: + mov r0, #0 + bl PM_SetAmpGain +_021D89E2: + ldr r0, _021D8A3C ; =0x0220FBC8 + mov r2, #0 + ldr r1, [r0, #4] + ldr r0, _021D8A4C ; =0x0000358C + str r2, [r1, r0] +_021D89EC: + ldr r0, _021D8A3C ; =0x0220FBC8 + ldr r1, [r0, #4] + ldr r0, _021D8A50 ; =0x000034F8 + ldr r0, [r1, r0] + cmp r0, #0 + beq _021D8A00 + cmp r0, #1 + beq _021D8A3A + cmp r0, #2 + pop {r4, r5, r6, pc} +_021D8A00: + bl FUN_021D8018 + cmp r0, #0 + bne _021D8A1E + mov r0, #1 + bl FUN_021D87D0 + cmp r0, #0 + beq _021D8A3A + ldr r0, _021D8A3C ; =0x0220FBC8 + mov r2, #1 + ldr r1, [r0, #4] + ldr r0, _021D8A50 ; =0x000034F8 + str r2, [r1, r0] + pop {r4, r5, r6, pc} +_021D8A1E: + bl FUN_021D8018 + cmp r0, #1 + bne _021D8A3A + mov r0, #0 + bl FUN_021D8818 + cmp r0, #0 + beq _021D8A3A + ldr r0, _021D8A3C ; =0x0220FBC8 + mov r2, #2 + ldr r1, [r0, #4] + ldr r0, _021D8A50 ; =0x000034F8 + str r2, [r1, r0] +_021D8A3A: + pop {r4, r5, r6, pc} + .align 2, 0 +_021D8A3C: .word 0x0220FBC8 +_021D8A40: .word 0x000082EA +_021D8A44: .word 0x0000411A +_021D8A48: .word 0xFFFFD8F0 +_021D8A4C: .word 0x0000358C +_021D8A50: .word 0x000034F8 + + thumb_func_start FUN_021D8A54 +FUN_021D8A54: ; 0x021D8A54 + push {r3, lr} + ldr r3, _021D8A78 ; =0x0220FBC8 + ldr r3, [r3, #4] + cmp r3, #0 + bne _021D8A62 + mov r0, #0 + pop {r3, pc} +_021D8A62: + lsl r0, r0, #0x18 + lsr r0, r0, #0x18 + bl FUN_020AD834 + cmp r0, #0 + beq _021D8A72 + mov r0, #1 + pop {r3, pc} +_021D8A72: + mov r0, #0 + pop {r3, pc} + nop +_021D8A78: .word 0x0220FBC8 + + thumb_func_start FUN_021D8A7C +FUN_021D8A7C: ; 0x021D8A7C + push {r4, r5, r6, r7, lr} + sub sp, #0x34 + ldr r2, _021D8BC8 ; =0x0220BAC0 + add r4, r1, #0 + ldrb r3, [r2] + add r1, sp, #0x10 + add r5, r0, #0 + strb r3, [r1] + ldrb r3, [r2, #1] + ldrb r2, [r2, #2] + strb r3, [r1, #1] + strb r2, [r1, #2] + ldr r1, _021D8BCC ; =0x0220FBC8 + ldr r1, [r1, #4] + cmp r1, #0 + bne _021D8ACA + ldr r1, _021D8BD0 ; =0x000035DC + bl FUN_02016998 + ldr r2, _021D8BCC ; =0x0220FBC8 + mov r1, #0x35 + str r0, [r2] + add r0, #0x1f + lsr r0, r0, #5 + lsl r0, r0, #5 + str r0, [r2, #4] + lsl r1, r1, #8 + str r5, [r0, r1] + add r0, r1, #0 + ldr r5, _021D8BD4 ; =0x0220FBE0 + ldr r3, [r2, #4] + sub r0, #0x40 + str r5, [r3, r0] + ldr r0, [r2, #4] + mov r3, #0 + sub r1, #0x3c + str r3, [r0, r1] + bl FUN_021D868C +_021D8ACA: + ldr r5, _021D8BCC ; =0x0220FBC8 + mov r7, #0x11 + ldr r0, [r5, #4] + ldr r3, _021D8BD8 ; =0x00003568 + mov r1, #3 + str r1, [r0, r3] + add r1, r3, #0 + ldr r0, [r5, #4] + sub r1, #0xa8 + ldr r2, [r0, r1] + add r1, r3, #4 + str r2, [r0, r1] + lsl r7, r7, #6 + add r0, r3, #0 + ldr r1, [r5, #4] + lsl r2, r7, #1 + add r0, #8 + str r2, [r1, r0] + mov r2, #0x41 + add r0, r3, #0 + ldr r1, [r5, #4] + lsl r2, r2, #6 + add r0, #0xc + str r2, [r1, r0] + add r0, r3, #0 + ldr r2, [r5, #4] + mov r1, #1 + add r0, #0x10 + str r1, [r2, r0] + add r2, r3, #0 + ldr r6, [r5, #4] + mov r0, #0 + add r2, #0x14 + str r0, [r6, r2] + add r2, r3, #0 + ldr r6, [r5, #4] + add r2, #0x18 + str r0, [r6, r2] + sub r0, r3, #3 + ldr r2, [r5, #4] + sub r3, #0x64 + strb r1, [r2, r0] + ldr r0, [r5, #4] + add r2, sp, #0x10 + add r0, r0, r3 + bl FUN_020C169C + add r0, r5, #0 + ldr r1, [r0, #4] + ldr r0, _021D8BDC ; =0x00003504 + add r0, r1, r0 + mov r1, #0 + bl FUN_020C13C4 + mov r0, #0x41 + str r0, [sp] + mov r0, #2 + str r0, [sp, #4] + ldr r0, _021D8BE0 ; =FUN_021D8730 + add r1, r5, #0 + str r0, [sp, #8] + mov r0, #0xd3 + ldr r2, [r1, #4] + lsl r0, r0, #6 + ldr r2, [r2, r0] + add r0, #0x44 + str r2, [sp, #0xc] + ldr r3, [r1, #4] + mov r2, #0x8f + lsl r2, r2, #6 + add r0, r3, r0 + add r2, r3, r2 + mov r1, #1 + lsl r3, r7, #1 + bl FUN_020C14AC + ldr r2, _021D8BCC ; =0x0220FBC8 + ldr r1, _021D8BE4 ; =0x000034F8 + ldr r0, [r2, #4] + mov r5, #0 + str r5, [r0, r1] + add r0, r1, #0 + ldr r3, [r2, #4] + add r0, #0x68 + str r5, [r3, r0] + mov r0, #1 + str r0, [sp, #0x1c] + ldr r0, [r2, #4] + sub r1, #0x30 + add r0, r0, r1 + str r0, [sp, #0x14] + mov r0, #2 + str r0, [sp, #0x18] + bl FUN_021D8018 + add r1, sp, #0x10 + strb r0, [r1, #0x10] + ldr r0, _021D8BE8 ; =FUN_021D8860 + str r0, [sp, #0x2c] + add r0, r5, #0 + str r0, [sp, #0x30] + ldr r0, _021D8BCC ; =0x0220FBC8 + ldr r0, [r0, #4] + str r0, [sp, #0x24] + mov r0, #0x8f + lsl r0, r0, #6 + str r0, [sp, #0x28] + add r0, sp, #0x14 + bl FUN_020AD93C + cmp r0, #0 + ldr r0, _021D8BCC ; =0x0220FBC8 + add r2, r5, #0 + ldr r1, [r0, #4] + ldr r0, _021D8BEC ; =0x000034FC + str r2, [r1, r0] + add r0, r4, #0 + bl FUN_020AA7A0 + bl FUN_021D8BF0 + mov r0, #1 + bl FUN_020AA760 + add sp, #0x34 + pop {r4, r5, r6, r7, pc} + nop +_021D8BC8: .word 0x0220BAC0 +_021D8BCC: .word 0x0220FBC8 +_021D8BD0: .word 0x000035DC +_021D8BD4: .word 0x0220FBE0 +_021D8BD8: .word 0x00003568 +_021D8BDC: .word 0x00003504 +_021D8BE0: .word FUN_021D8730 +_021D8BE4: .word 0x000034F8 +_021D8BE8: .word FUN_021D8860 +_021D8BEC: .word 0x000034FC + + thumb_func_start FUN_021D8BF0 +FUN_021D8BF0: ; 0x021D8BF0 + ldr r0, _021D8BFC ; =0x0220FBC8 + ldr r3, _021D8C00 ; =0x020C1458 + ldr r1, [r0, #4] + ldr r0, _021D8C04 ; =0x00003504 + add r0, r1, r0 + bx r3 + .align 2, 0 +_021D8BFC: .word 0x0220FBC8 +_021D8C00: .word 0x020C1458 +_021D8C04: .word 0x00003504 + + thumb_func_start FUN_021D8C08 +FUN_021D8C08: ; 0x021D8C08 + push {r3, lr} + ldr r0, _021D8C50 ; =0x0220FBC8 + ldr r1, _021D8C54 ; =0x00003560 + ldr r2, [r0, #4] + ldr r0, [r2, r1] + cmp r0, #0 + beq _021D8C1E + sub r1, #0x68 + ldr r1, [r2, r1] + cmp r1, #0 + bne _021D8C24 +_021D8C1E: + bl FUN_021D8C6C + pop {r3, pc} +_021D8C24: + cmp r1, #1 + bne _021D8C38 + mov r1, #2 + bl FUN_020ACBA0 + cmp r0, #0 + beq _021D8C38 + bl FUN_021D8C6C + pop {r3, pc} +_021D8C38: + ldr r0, _021D8C50 ; =0x0220FBC8 + ldr r1, [r0, #4] + ldr r0, _021D8C54 ; =0x00003560 + ldr r0, [r1, r0] + mov r1, #1 + bl FUN_020ACBA0 + cmp r0, #0 + beq _021D8C4E + bl FUN_021D8C6C +_021D8C4E: + pop {r3, pc} + .align 2, 0 +_021D8C50: .word 0x0220FBC8 +_021D8C54: .word 0x00003560 + + thumb_func_start FUN_021D8C58 +FUN_021D8C58: ; 0x021D8C58 + ldr r1, _021D8C64 ; =0x0220FBC8 + ldr r2, [r1, #4] + ldr r1, _021D8C68 ; =0x000034C4 + str r0, [r2, r1] + bx lr + nop +_021D8C64: .word 0x0220FBC8 +_021D8C68: .word 0x000034C4 + + thumb_func_start FUN_021D8C6C +FUN_021D8C6C: ; 0x021D8C6C + push {r4, lr} + ldr r0, _021D8CBC ; =0x0220FBC8 + ldr r1, [r0] + cmp r1, #0 + beq _021D8CBA + ldr r1, [r0, #4] + ldr r0, _021D8CC0 ; =0x000034C4 + ldr r4, [r1, r0] + bl MIC_StopAutoSampling + ldr r0, _021D8CBC ; =0x0220FBC8 + ldr r1, [r0, #4] + ldr r0, _021D8CC4 ; =0x00003504 + add r0, r1, r0 + bl FUN_020C1430 + ldr r0, _021D8CBC ; =0x0220FBC8 + ldr r1, [r0, #4] + ldr r0, _021D8CC4 ; =0x00003504 + add r0, r1, r0 + bl FUN_020C1674 + bl FUN_020AD904 + ldr r1, _021D8CBC ; =0x0220FBC8 + mov r0, #0x35 + ldr r2, [r1, #4] + lsl r0, r0, #8 + ldr r0, [r2, r0] + ldr r1, [r1] + bl FUN_02016A8C + mov r1, #0 + ldr r0, _021D8CBC ; =0x0220FBC8 + cmp r4, #0 + str r1, [r0] + str r1, [r0, #4] + beq _021D8CBA + blx r4 +_021D8CBA: + pop {r4, pc} + .align 2, 0 +_021D8CBC: .word 0x0220FBC8 +_021D8CC0: .word 0x000034C4 +_021D8CC4: .word 0x00003504 + + thumb_func_start FUN_021D8CC8 +FUN_021D8CC8: ; 0x021D8CC8 + push {r3, lr} + sub sp, #0x10 + ldr r0, _021D8CEC ; =0x0220FBC8 + ldr r0, [r0, #4] + cmp r0, #0 + beq _021D8CE6 + add r0, sp, #0 + bl FUN_020AD144 + ldr r0, [sp, #4] + cmp r0, #2 + ble _021D8CE6 + ldr r0, [sp] + add sp, #0x10 + pop {r3, pc} +_021D8CE6: + mov r0, #0 + add sp, #0x10 + pop {r3, pc} + .align 2, 0 +_021D8CEC: .word 0x0220FBC8 + + thumb_func_start FUN_021D8CF0 +FUN_021D8CF0: ; 0x021D8CF0 + ldr r0, _021D8CFC ; =0x0220FBC8 + mov r2, #1 + ldr r1, [r0, #4] + ldr r0, _021D8D00 ; =0x000034FC + str r2, [r1, r0] + bx lr + .align 2, 0 +_021D8CFC: .word 0x0220FBC8 +_021D8D00: .word 0x000034FC + + thumb_func_start FUN_021D8D04 +FUN_021D8D04: ; 0x021D8D04 + ldr r0, _021D8D10 ; =0x0220FBC8 + mov r2, #0 + ldr r1, [r0, #4] + ldr r0, _021D8D14 ; =0x000034FC + str r2, [r1, r0] + bx lr + .align 2, 0 +_021D8D10: .word 0x0220FBC8 +_021D8D14: .word 0x000034FC diff --git a/arm9/undefined_syms.txt b/arm9/undefined_syms.txt index 37c87728..9cf93c34 100644 --- a/arm9/undefined_syms.txt +++ b/arm9/undefined_syms.txt @@ -497,6 +497,10 @@ FUN_0224F12C = 0x0224F12C; FUN_02252534 = 0x02252534; FUN_02252538 = 0x02252538; FUN_022567E0 = 0x022567E0; +FUN_02213B08 = 0x02213B08; +FUN_02213D80 = 0x02213D80; +FUN_02213DBC = 0x02213DBC; +FUN_02213E24 = 0x02213E24; // ??? SDK_MAIN_ARENA_LO = 0x0225FFA0; @@ -50,7 +50,7 @@ .extern FS_UnloadOverlay
.extern FS_WaitAsync
.extern FUNRTC_Init
-.extern FUN_0200019E
+.extern SVC_Sqrt
.extern FUN_020002FE
.extern SVC_WaitByLoop
.extern OSi_ReferSymbol
|