diff options
Diffstat (limited to 'arm9')
| -rw-r--r-- | arm9/arm9.lcf | 34 | ||||
| -rw-r--r-- | arm9/global.inc | 37 | ||||
| -rw-r--r-- | arm9/modules/79/asm/module_79_arm.s | 4890 | ||||
| -rw-r--r-- | arm9/modules/79/asm/module_79_thumb.s | 851 | ||||
| -rw-r--r-- | arm9/undefined_syms.txt | 1 | 
5 files changed, 5810 insertions, 3 deletions
| diff --git a/arm9/arm9.lcf b/arm9/arm9.lcf index f4ba6edf..610a68c2 100644 --- a/arm9/arm9.lcf +++ b/arm9/arm9.lcf @@ -3036,7 +3036,24 @@ SECTIONS {  		SDK_OVERLAY_MODULE_79_ID = 79;  		SDK_OVERLAY.MODULE_79.ID = 79;  		SDK_OVERLAY.MODULE_79.START = .; -		FILE_2D9E00.o (.text) /* 0x2D5E00 */ +		module_79_thumb.o (.text) +		module_79_arm.o (.text) +		module_79_thumb.o (.rodata) +		module_79_arm.o (.rodata) +		module_79_thumb.o (.init) +		module_79_arm.o (.init) +		SDK_OVERLAY.MODULE_79.SINIT_START = .; +		module_79_thumb.o (.ctor) +		module_79_arm.o (.ctor) +		module_79_thumb.o (.sinit) +		module_79_arm.o (.sinit) +		WRITEW 0; +		SDK_OVERLAY.MODULE_79.SINIT_END = .; +		. = ALIGN(32); +		module_79_thumb.o (.sdata) +		module_79_arm.o (.sdata) +		module_79_thumb.o (.data) +		module_79_arm.o (.data)  		. = ALIGN(32);  		SDK_OVERLAY.MODULE_79.END = .;  		SDK_OVERLAY.MODULE_79.SIZE = SDK_OVERLAY.MODULE_79.END - SDK_OVERLAY.MODULE_79.START; @@ -3046,7 +3063,10 @@ SECTIONS {  	{  		ALIGNALL(4); . = ALIGN(32);  		SDK_OVERLAY.MODULE_79.BSS_START = .; -		FILE_2D9E00.o (.bss) +		module_79_thumb.o (.bss) +		module_79_arm.o (.bss) +		module_79_thumb.o (.sbss) +		module_79_arm.o (.sbss)  		. = ALIGN(32);  		SDK_OVERLAY.MODULE_79.BSS_END = .;  		SDK_OVERLAY.MODULE_79.BSS_SIZE = SDK_OVERLAY.MODULE_79.BSS_END - SDK_OVERLAY.MODULE_79.BSS_START; @@ -4035,7 +4055,15 @@ SECTIONS {  		WRITEW 78;  		WRITEW 0; -		OVERLAY_TABLE(MODULE_79, 79) +		WRITEW 79; +		WRITEW ADDR(.MODULE_79); +		WRITEW SDK_OVERLAY.MODULE_79.SIZE; +		WRITEW SDK_OVERLAY.MODULE_79.BSS_SIZE; +		WRITEW SDK_OVERLAY.MODULE_79.SINIT_START; +		WRITEW SDK_OVERLAY.MODULE_79.SINIT_END; +		WRITEW 79; +		WRITEW 0; +  		OVERLAY_TABLE(MODULE_80, 80)  		OVERLAY_TABLE(MODULE_81, 81)  		OVERLAY_TABLE(MODULE_82, 82) diff --git a/arm9/global.inc b/arm9/global.inc index 9278357b..abbdb3ea 100644 --- a/arm9/global.inc +++ b/arm9/global.inc @@ -5802,6 +5802,43 @@  .extern MOD04_021D8640
  .extern MOD04_021D8678
  .extern FUN_02029B08
 +.extern FUN_021EB550
 +.extern MOD04_021DD904
 +.extern MOD04_021DD944
 +.extern MOD04_021EB3B8
 +.extern MOD04_021EB524
 +.extern MOD04_021EB59C
 +.extern MOD04_021EF820
 +.extern strncat
 +.extern fclose
 +.extern fread
 +.extern fseek
 +.extern ftell
 +.extern MOD04_021DD82C
 +.extern MOD04_021DD844
 +.extern MOD04_021DD860
 +.extern MOD04_021EEFA8
 +.extern MOD04_021EEFFC
 +.extern MOD04_021EF06C
 +.extern MOD04_021EF074
 +.extern MOD04_021EF0E4
 +.extern MOD04_021EFB28
 +.extern MOD04_021EFB38
 +.extern MOD04_021EFC24
 +.extern MOD04_021EFC78
 +.extern MOD04_021EFCE4
 +.extern MOD04_021EFD80
 +.extern MOD04_021EFD9C
 +.extern MOD04_021EFDB8
 +.extern MOD04_021EFF5C
 +.extern MOD04_021F0130
 +.extern MOD04_021F017C
 +.extern MOD04_021F0208
 +.extern MOD04_021F024C
 +.extern MOD04_021F0250
 +.extern MOD04_021F025C
 +.extern rewind
 +.extern strspn
  .extern FUN_02029B40
  .extern FUN_02029C00
  .extern FUN_02088D1C
 diff --git a/arm9/modules/79/asm/module_79_arm.s b/arm9/modules/79/asm/module_79_arm.s new file mode 100644 index 00000000..3b45bc8c --- /dev/null +++ b/arm9/modules/79/asm/module_79_arm.s @@ -0,0 +1,4890 @@ +	.include "asm/macros.inc" +	.include "global.inc" +	.section .text +	.balign 4, 0 + +	arm_func_start MOD79_0221248C +MOD79_0221248C: ; 0x0221248C +	stmdb sp!, {r4, r5, r6, r7, lr} +	sub sp, sp, #4 +	movs r7, r0 +	mov r6, r1 +	mov r5, r2 +	bne _022124B8 +	ldr r0, _02212544 ; =0x02216858 +	ldr r1, _02212548 ; =0x0221686C +	ldr r3, _0221254C ; =0x000001B7 +	mov r2, #0 +	bl __msl_assertion_failed +_022124B8: +	cmp r5, #0 +	bne _022124D4 +	ldr r0, _02212550 ; =0x0221687C +	ldr r1, _02212548 ; =0x0221686C +	mov r2, #0 +	mov r3, #0x1b8 +	bl __msl_assertion_failed +_022124D4: +	ldr r4, [r5] +	cmp r4, #0 +	addeq sp, sp, #4 +	moveq r0, #0 +	ldmeqia sp!, {r4, r5, r6, r7, pc} +	ldr r3, [r7, #0x10] +	ldr r0, [r7, #0xc] +	sub r0, r0, r3 +	cmp r0, #0 +	addle sp, sp, #4 +	movle r0, #0 +	ldmleia sp!, {r4, r5, r6, r7, pc} +	ldr r1, [r7, #4] +	cmp r4, r0 +	movge r4, r0 +	mov r0, r6 +	mov r2, r4 +	add r1, r1, r3 +	bl memcpy +	mov r0, #0 +	strb r0, [r6, r4] +	str r4, [r5] +	ldr r1, [r7, #0x10] +	mov r0, #1 +	add r1, r1, r4 +	str r1, [r7, #0x10] +	add sp, sp, #4 +	ldmia sp!, {r4, r5, r6, r7, pc} +	.align 2, 0 +_02212544: .word 0x02216858 +_02212548: .word 0x0221686C +_0221254C: .word 0x000001B7 +_02212550: .word 0x0221687C +	arm_func_end MOD79_0221248C + +	arm_func_start MOD79_02212554 +MOD79_02212554: ; 0x02212554 +	stmdb sp!, {r4, r5, r6, r7, r8, sb, lr} +	sub sp, sp, #0xc +	mov r8, r0 +	add r6, sp, #0 +	add r5, sp, #4 +	add r4, r8, #0x60 +	mov r7, #0 +	mvn sb, #0 +_02212574: +	ldr r0, [r8, #0x48] +	mov r1, r7 +	mov r2, r6 +	mov r3, r5 +	bl MOD04_021EFF5C +	cmp r0, sb +	beq _0221259C +	ldr r0, [sp, #4] +	cmp r0, #0 +	beq _022125C4 +_0221259C: +	mov r0, #1 +	str r0, [r8, #0xfc] +	mov r0, #5 +	str r0, [r8, #0x38] +	ldr r0, [r8, #0x48] +	bl MOD04_021EFB28 +	str r0, [r8, #0x4c] +	add sp, sp, #0xc +	mov r0, #0 +	ldmia sp!, {r4, r5, r6, r7, r8, sb, pc} +_022125C4: +	ldr r0, [sp] +	cmp r0, #0 +	addeq sp, sp, #0xc +	moveq r0, #1 +	ldmeqia sp!, {r4, r5, r6, r7, r8, sb, pc} +	ldr r3, [r8, #0x60] +	ldr r1, [r8, #0x54] +	ldr r2, [r8, #0x5c] +	mov r0, r8 +	add r1, r1, r3 +	sub r2, r2, r3 +	bl MOD79_02212F68 +	cmp r0, sb +	addeq sp, sp, #0xc +	moveq r0, #0 +	ldmeqia sp!, {r4, r5, r6, r7, r8, sb, pc} +	ldr r1, [r4] +	add r0, r1, r0 +	str r0, [r4] +	ldr r1, [r8, #0x60] +	ldr r0, [r8, #0x5c] +	cmp r1, r0 +	blt _02212574 +	mov r0, #1 +	add sp, sp, #0xc +	ldmia sp!, {r4, r5, r6, r7, r8, sb, pc} +	arm_func_end MOD79_02212554 + +	arm_func_start MOD79_0221262C +MOD79_0221262C: ; 0x0221262C +	stmdb sp!, {r4, lr} +	movs r4, r0 +	bne _0221264C +	ldr r0, _02212664 ; =0x02216888 +	ldr r1, _02212668 ; =0x0221686C +	mov r2, #0 +	mov r3, #0x16c +	bl __msl_assertion_failed +_0221264C: +	mov r1, #0 +	str r1, [r4, #0xc] +	str r1, [r4, #0x10] +	ldr r0, [r4, #4] +	strb r1, [r0] +	ldmia sp!, {r4, pc} +	.align 2, 0 +_02212664: .word 0x02216888 +_02212668: .word 0x0221686C +	arm_func_end MOD79_0221262C + +	arm_func_start MOD79_0221266C +MOD79_0221266C: ; 0x0221266C +	stmdb sp!, {r4, lr} +	sub sp, sp, #0x10 +	mov r2, r1 +	mov r4, r0 +	ldr r1, _022126A0 ; =0x02216890 +	add r0, sp, #0 +	bl sprintf +	add r1, sp, #0 +	mov r0, r4 +	mov r2, #0 +	bl MOD79_02212794 +	add sp, sp, #0x10 +	ldmia sp!, {r4, pc} +	.align 2, 0 +_022126A0: .word 0x02216890 +	arm_func_end MOD79_0221266C + +	arm_func_start MOD79_022126A4 +MOD79_022126A4: ; 0x022126A4 +	stmdb sp!, {r4, lr} +	sub sp, sp, #8 +	movs r4, r0 +	strb r1, [sp] +	bne _022126CC +	ldr r0, _022126F4 ; =0x02216888 +	ldr r1, _022126F8 ; =0x0221686C +	ldr r3, _022126FC ; =0x00000131 +	mov r2, #0 +	bl __msl_assertion_failed +_022126CC: +	cmp r4, #0 +	addeq sp, sp, #8 +	moveq r0, #0 +	ldmeqia sp!, {r4, pc} +	add r1, sp, #0 +	mov r0, r4 +	mov r2, #1 +	bl MOD79_02212794 +	add sp, sp, #8 +	ldmia sp!, {r4, pc} +	.align 2, 0 +_022126F4: .word 0x02216888 +_022126F8: .word 0x0221686C +_022126FC: .word 0x00000131 +	arm_func_end MOD79_022126A4 + +	arm_func_start MOD79_02212700 +MOD79_02212700: ; 0x02212700 +	stmdb sp!, {r4, r5, lr} +	sub sp, sp, #4 +	mov r4, r2 +	mov r2, #0 +	mov r5, r0 +	bl MOD79_02212794 +	cmp r0, #0 +	addeq sp, sp, #4 +	moveq r0, #0 +	ldmeqia sp!, {r4, r5, pc} +	ldr r1, _0221278C ; =0x02216894 +	mov r0, r5 +	mov r2, #2 +	bl MOD79_02212794 +	cmp r0, #0 +	addeq sp, sp, #4 +	moveq r0, #0 +	ldmeqia sp!, {r4, r5, pc} +	mov r0, r5 +	mov r1, r4 +	mov r2, #0 +	bl MOD79_02212794 +	cmp r0, #0 +	addeq sp, sp, #4 +	moveq r0, #0 +	ldmeqia sp!, {r4, r5, pc} +	ldr r1, _02212790 ; =0x02216898 +	mov r0, r5 +	mov r2, #2 +	bl MOD79_02212794 +	cmp r0, #0 +	movne r0, #1 +	moveq r0, #0 +	add sp, sp, #4 +	ldmia sp!, {r4, r5, pc} +	.align 2, 0 +_0221278C: .word 0x02216894 +_02212790: .word 0x02216898 +	arm_func_end MOD79_02212700 + +	arm_func_start MOD79_02212794 +MOD79_02212794: ; 0x02212794 +	stmdb sp!, {r0, r1, r2, r3} +	stmdb sp!, {r4, r5, r6, r7, lr} +	sub sp, sp, #0xc +	movs r7, r0 +	mov r6, r1 +	ldr r5, [r7] +	bne _022127C4 +	ldr r0, _02212A40 ; =0x02216888 +	ldr r1, _02212A44 ; =0x0221686C +	mov r2, #0 +	mov r3, #0xb7 +	bl __msl_assertion_failed +_022127C4: +	cmp r6, #0 +	bne _022127E0 +	ldr r0, _02212A48 ; =0x0221689C +	ldr r1, _02212A44 ; =0x0221686C +	mov r2, #0 +	mov r3, #0xb8 +	bl __msl_assertion_failed +_022127E0: +	ldr r0, [sp, #0x28] +	cmp r0, #0 +	bge _02212800 +	ldr r0, _02212A4C ; =0x022168A4 +	ldr r1, _02212A44 ; =0x0221686C +	mov r2, #0 +	mov r3, #0xb9 +	bl __msl_assertion_failed +_02212800: +	cmp r7, #0 +	addeq sp, sp, #0xc +	moveq r0, #0 +	ldmeqia sp!, {r4, r5, r6, r7, lr} +	addeq sp, sp, #0x10 +	bxeq lr +	cmp r6, #0 +	addeq sp, sp, #0xc +	moveq r0, #0 +	ldmeqia sp!, {r4, r5, r6, r7, lr} +	addeq sp, sp, #0x10 +	bxeq lr +	ldr r0, [sp, #0x28] +	cmp r0, #0 +	addlt sp, sp, #0xc +	movlt r0, #0 +	ldmltia sp!, {r4, r5, r6, r7, lr} +	addlt sp, sp, #0x10 +	bxlt lr +	cmp r0, #0 +	bne _02212860 +	mov r0, r6 +	bl strlen +	str r0, [sp, #0x28] +_02212860: +	ldr r0, [r7, #0x20] +	cmp r0, #1 +	bne _02212968 +	ldr r0, [r5, #0x168] +	cmp r0, #0 +	bne _0221288C +	ldr r0, _02212A50 ; =0x022168B4 +	ldr r1, _02212A44 ; =0x0221686C +	mov r2, #0 +	mov r3, #0xce +	bl __msl_assertion_failed +_0221288C: +	ldr r2, [r7, #8] +	ldr r1, [r7, #0xc] +	add r0, sp, #8 +	sub r1, r2, r1 +	str r1, [sp, #8] +	ldr r2, [r7, #4] +	ldr r1, [r7, #0xc] +	add r3, sp, #0x28 +	add r1, r2, r1 +	str r1, [sp] +	str r0, [sp, #4] +	ldr r4, [r5, #0x17c] +	mov r0, r5 +	mov r2, r6 +	add r1, r5, #0x164 +	.word 0xE12FFF34 +	mov r4, r0 +	cmp r4, #2 +	bne _0221294C +	ldr r0, [r7, #0x18] +	cmp r0, #0 +	beq _02212910 +	ldr r0, [r7] +	mov r1, #1 +	str r1, [r0, #0xfc] +	ldr r0, [r7] +	mov r1, #2 +	str r1, [r0, #0x38] +	add sp, sp, #0xc +	mov r0, #0 +	ldmia sp!, {r4, r5, r6, r7, lr} +	add sp, sp, #0x10 +	bx lr +_02212910: +	ldr r1, [r7, #0x14] +	mov r0, r7 +	bl MOD79_02212CF0 +	cmp r0, #0 +	beq _0221295C +	ldr r0, [r7] +	mov r2, #1 +	str r2, [r0, #0xfc] +	ldr r1, [r7] +	add sp, sp, #0xc +	str r2, [r1, #0x38] +	mov r0, #0 +	ldmia sp!, {r4, r5, r6, r7, lr} +	add sp, sp, #0x10 +	bx lr +_0221294C: +	ldr r1, [r7, #0xc] +	ldr r0, [sp, #8] +	add r0, r1, r0 +	str r0, [r7, #0xc] +_0221295C: +	cmp r4, #2 +	beq _0221288C +	b _02212A2C +_02212968: +	ldr r2, [r7, #0xc] +	ldr r1, [sp, #0x28] +	ldr r0, [r7, #8] +	add r4, r2, r1 +	cmp r4, r0 +	blt _02212A00 +_02212980: +	ldr r0, [r7, #0x18] +	cmp r0, #0 +	beq _022129B8 +	ldr r0, [r7] +	mov r1, #1 +	str r1, [r0, #0xfc] +	ldr r0, [r7] +	mov r1, #2 +	str r1, [r0, #0x38] +	add sp, sp, #0xc +	mov r0, #0 +	ldmia sp!, {r4, r5, r6, r7, lr} +	add sp, sp, #0x10 +	bx lr +_022129B8: +	ldr r1, [r7, #0x14] +	mov r0, r7 +	bl MOD79_02212CF0 +	cmp r0, #0 +	bne _022129F4 +	ldr r0, [r7] +	mov r2, #1 +	str r2, [r0, #0xfc] +	ldr r1, [r7] +	add sp, sp, #0xc +	str r2, [r1, #0x38] +	mov r0, #0 +	ldmia sp!, {r4, r5, r6, r7, lr} +	add sp, sp, #0x10 +	bx lr +_022129F4: +	ldr r0, [r7, #8] +	cmp r4, r0 +	bge _02212980 +_02212A00: +	ldr r3, [r7, #4] +	ldr r0, [r7, #0xc] +	ldr r2, [sp, #0x28] +	mov r1, r6 +	add r0, r3, r0 +	bl memcpy +	str r4, [r7, #0xc] +	ldr r1, [r7, #4] +	ldr r0, [r7, #0xc] +	mov r2, #0 +	strb r2, [r1, r0] +_02212A2C: +	mov r0, #1 +	add sp, sp, #0xc +	ldmia sp!, {r4, r5, r6, r7, lr} +	add sp, sp, #0x10 +	bx lr +	.align 2, 0 +_02212A40: .word 0x02216888 +_02212A44: .word 0x0221686C +_02212A48: .word 0x0221689C +_02212A4C: .word 0x022168A4 +_02212A50: .word 0x022168B4 +	arm_func_end MOD79_02212794 + +	arm_func_start MOD79_02212A54 +MOD79_02212A54: ; 0x02212A54 +	stmdb sp!, {r4, lr} +	movs r4, r0 +	bne _02212A74 +	ldr r0, _02212AAC ; =0x02216888 +	ldr r1, _02212AB0 ; =0x0221686C +	mov r2, #0 +	mov r3, #0x9b +	bl __msl_assertion_failed +_02212A74: +	cmp r4, #0 +	ldmeqia sp!, {r4, pc} +	ldr r0, [r4, #4] +	cmp r0, #0 +	ldmeqia sp!, {r4, pc} +	ldr r1, [r4, #0x1c] +	cmp r1, #0 +	bne _02212A98 +	bl MOD04_021DD82C +_02212A98: +	mov r0, r4 +	mov r1, #0 +	mov r2, #0x24 +	bl Call_FillMemWithValue +	ldmia sp!, {r4, pc} +	.align 2, 0 +_02212AAC: .word 0x02216888 +_02212AB0: .word 0x0221686C +	arm_func_end MOD79_02212A54 + +	arm_func_start MOD79_02212AB4 +MOD79_02212AB4: ; 0x02212AB4 +	stmdb sp!, {r4, r5, r6, r7, lr} +	sub sp, sp, #4 +	movs r7, r0 +	mov r6, r1 +	mov r5, r2 +	mov r4, r3 +	bne _02212AE4 +	ldr r0, _02212BB0 ; =0x022168F0 +	ldr r1, _02212BB4 ; =0x0221686C +	mov r2, #0 +	mov r3, #0x74 +	bl __msl_assertion_failed +_02212AE4: +	cmp r6, #0 +	bne _02212B00 +	ldr r0, _02212BB8 ; =0x02216888 +	ldr r1, _02212BB4 ; =0x0221686C +	mov r2, #0 +	mov r3, #0x75 +	bl __msl_assertion_failed +_02212B00: +	cmp r5, #0 +	bne _02212B1C +	ldr r0, _02212BBC ; =0x022168FC +	ldr r1, _02212BB4 ; =0x0221686C +	mov r2, #0 +	mov r3, #0x76 +	bl __msl_assertion_failed +_02212B1C: +	cmp r4, #0 +	bgt _02212B38 +	ldr r0, _02212BC0 ; =0x02216908 +	ldr r1, _02212BB4 ; =0x0221686C +	mov r2, #0 +	mov r3, #0x77 +	bl __msl_assertion_failed +_02212B38: +	cmp r7, #0 +	addeq sp, sp, #4 +	moveq r0, #0 +	ldmeqia sp!, {r4, r5, r6, r7, pc} +	cmp r6, #0 +	addeq sp, sp, #4 +	moveq r0, #0 +	ldmeqia sp!, {r4, r5, r6, r7, pc} +	cmp r5, #0 +	addeq sp, sp, #4 +	moveq r0, #0 +	ldmeqia sp!, {r4, r5, r6, r7, pc} +	cmp r4, #0 +	addle sp, sp, #4 +	movle r0, #0 +	ldmleia sp!, {r4, r5, r6, r7, pc} +	str r7, [r6] +	str r5, [r6, #4] +	str r4, [r6, #8] +	mov r2, #0 +	str r2, [r6, #0xc] +	str r2, [r6, #0x14] +	mov r0, #1 +	str r0, [r6, #0x18] +	str r0, [r6, #0x1c] +	str r2, [r6, #0x20] +	ldr r1, [r6, #4] +	strb r2, [r1] +	add sp, sp, #4 +	ldmia sp!, {r4, r5, r6, r7, pc} +	.align 2, 0 +_02212BB0: .word 0x022168F0 +_02212BB4: .word 0x0221686C +_02212BB8: .word 0x02216888 +_02212BBC: .word 0x022168FC +_02212BC0: .word 0x02216908 +	arm_func_end MOD79_02212AB4 + +	arm_func_start MOD79_02212BC4 +MOD79_02212BC4: ; 0x02212BC4 +	stmdb sp!, {r4, r5, r6, r7, lr} +	sub sp, sp, #4 +	movs r7, r0 +	mov r6, r1 +	mov r5, r2 +	mov r4, r3 +	bne _02212BF4 +	ldr r0, _02212CDC ; =0x022168F0 +	ldr r1, _02212CE0 ; =0x0221686C +	mov r2, #0 +	mov r3, #0x43 +	bl __msl_assertion_failed +_02212BF4: +	cmp r6, #0 +	bne _02212C10 +	ldr r0, _02212CE4 ; =0x02216888 +	ldr r1, _02212CE0 ; =0x0221686C +	mov r2, #0 +	mov r3, #0x44 +	bl __msl_assertion_failed +_02212C10: +	cmp r5, #0 +	bgt _02212C2C +	ldr r0, _02212CE8 ; =0x02216914 +	ldr r1, _02212CE0 ; =0x0221686C +	mov r2, #0 +	mov r3, #0x45 +	bl __msl_assertion_failed +_02212C2C: +	cmp r4, #0 +	bgt _02212C48 +	ldr r0, _02212CEC ; =0x02216924 +	ldr r1, _02212CE0 ; =0x0221686C +	mov r2, #0 +	mov r3, #0x46 +	bl __msl_assertion_failed +_02212C48: +	cmp r7, #0 +	addeq sp, sp, #4 +	moveq r0, #0 +	ldmeqia sp!, {r4, r5, r6, r7, pc} +	cmp r6, #0 +	addeq sp, sp, #4 +	moveq r0, #0 +	ldmeqia sp!, {r4, r5, r6, r7, pc} +	cmp r5, #0 +	addle sp, sp, #4 +	movle r0, #0 +	ldmleia sp!, {r4, r5, r6, r7, pc} +	cmp r4, #0 +	addle sp, sp, #4 +	movle r0, #0 +	ldmleia sp!, {r4, r5, r6, r7, pc} +	str r7, [r6] +	mov r2, #0 +	str r2, [r6, #4] +	str r2, [r6, #8] +	str r2, [r6, #0xc] +	str r2, [r6, #0x10] +	str r4, [r6, #0x14] +	str r2, [r6, #0x18] +	str r2, [r6, #0x1c] +	mov r0, r6 +	mov r1, r5 +	str r2, [r6, #0x20] +	bl MOD79_02212CF0 +	cmp r0, #0 +	moveq r0, #0 +	ldrne r0, [r6, #4] +	movne r1, #0 +	strneb r1, [r0] +	movne r0, #1 +	add sp, sp, #4 +	ldmia sp!, {r4, r5, r6, r7, pc} +	.align 2, 0 +_02212CDC: .word 0x022168F0 +_02212CE0: .word 0x0221686C +_02212CE4: .word 0x02216888 +_02212CE8: .word 0x02216914 +_02212CEC: .word 0x02216924 +	arm_func_end MOD79_02212BC4 + +	arm_func_start MOD79_02212CF0 +MOD79_02212CF0: ; 0x02212CF0 +	stmdb sp!, {r4, r5, lr} +	sub sp, sp, #4 +	movs r5, r0 +	mov r4, r1 +	bne _02212D18 +	ldr r0, _02212D84 ; =0x02216888 +	ldr r1, _02212D88 ; =0x0221686C +	mov r2, #0 +	mov r3, #0x20 +	bl __msl_assertion_failed +_02212D18: +	cmp r4, #0 +	bgt _02212D34 +	ldr r0, _02212D8C ; =0x02216924 +	ldr r1, _02212D88 ; =0x0221686C +	mov r2, #0 +	mov r3, #0x21 +	bl __msl_assertion_failed +_02212D34: +	cmp r5, #0 +	addeq sp, sp, #4 +	moveq r0, #0 +	ldmeqia sp!, {r4, r5, pc} +	cmp r4, #0 +	addle sp, sp, #4 +	movle r0, #0 +	ldmleia sp!, {r4, r5, pc} +	ldr r1, [r5, #8] +	ldr r0, [r5, #4] +	add r4, r1, r4 +	mov r1, r4 +	bl MOD04_021DD844 +	cmp r0, #0 +	moveq r0, #0 +	strne r0, [r5, #4] +	strne r4, [r5, #8] +	movne r0, #1 +	add sp, sp, #4 +	ldmia sp!, {r4, r5, pc} +	.align 2, 0 +_02212D84: .word 0x02216888 +_02212D88: .word 0x0221686C +_02212D8C: .word 0x02216924 +	arm_func_end MOD79_02212CF0 + +	arm_func_start MOD79_02212D90 +MOD79_02212D90: ; 0x02212D90 +	stmdb sp!, {r4, lr} +	sub sp, sp, #8 +	movs r4, r0 +	bne _02212DB4 +	ldr r0, _02212DF8 ; =0x02216938 +	ldr r1, _02212DFC ; =0x02216944 +	mov r2, #0 +	mov r3, #0x5e +	bl __msl_assertion_failed +_02212DB4: +	ldr r0, [r4, #0x150] +	cmp r0, #0 +	addeq sp, sp, #8 +	ldmeqia sp!, {r4, pc} +	ldr r0, [r4, #0x140] +	bl MOD04_021EF06C +	str r0, [sp] +	ldr r0, [r4, #0x44] +	str r0, [sp, #4] +	ldr r0, [r4, #4] +	ldr r1, [r4, #0x148] +	ldr r2, [r4, #0x14c] +	ldr r3, [r4, #0x144] +	ldr ip, [r4, #0x150] +	.word 0xE12FFF3C +	add sp, sp, #8 +	ldmia sp!, {r4, pc} +	.align 2, 0 +_02212DF8: .word 0x02216938 +_02212DFC: .word 0x02216944 +	arm_func_end MOD79_02212D90 + +	arm_func_start MOD79_02212E00 +MOD79_02212E00: ; 0x02212E00 +	stmdb sp!, {r4, r5, r6, lr} +	sub sp, sp, #0x10 +	movs r6, r0 +	mov r5, r1 +	mov r4, r2 +	bne _02212E2C +	ldr r0, _02212E70 ; =0x02216938 +	ldr r1, _02212E74 ; =0x02216944 +	mov r2, #0 +	mov r3, #0x45 +	bl __msl_assertion_failed +_02212E2C: +	ldr ip, [r6, #0x3c] +	cmp ip, #0 +	addeq sp, sp, #0x10 +	ldmeqia sp!, {r4, r5, r6, pc} +	ldr r0, [r6, #0x100] +	mov r2, r5 +	str r0, [sp] +	ldr r0, [r6, #0x104] +	mov r3, r4 +	str r0, [sp, #4] +	ldr r0, [r6, #0x44] +	str r0, [sp, #8] +	ldr r0, [r6, #4] +	ldr r1, [r6, #0x10] +	.word 0xE12FFF3C +	add sp, sp, #0x10 +	ldmia sp!, {r4, r5, r6, pc} +	.align 2, 0 +_02212E70: .word 0x02216938 +_02212E74: .word 0x02216944 +	arm_func_end MOD79_02212E00 + +	arm_func_start MOD79_02212E78 +MOD79_02212E78: ; 0x02212E78 +	stmdb sp!, {r4, r5, lr} +	sub sp, sp, #4 +	movs r5, r0 +	bne _02212E9C +	ldr r0, _02212EFC ; =0x02216938 +	ldr r1, _02212F00 ; =0x02216944 +	mov r2, #0 +	mov r3, #0x1b +	bl __msl_assertion_failed +_02212E9C: +	ldr ip, [r5, #0x40] +	cmp ip, #0 +	addeq sp, sp, #4 +	ldmeqia sp!, {r4, r5, pc} +	ldr r0, [r5, #0xc] +	cmp r0, #0 +	movne r4, #0 +	movne r3, r4 +	ldreq r4, [r5, #0xc0] +	ldreq r3, [r5, #0x100] +	ldr r0, [r5, #0x44] +	mov r2, r4 +	str r0, [sp] +	ldr r0, [r5, #4] +	ldr r1, [r5, #0x38] +	.word 0xE12FFF3C +	cmp r4, #0 +	addeq sp, sp, #4 +	ldmeqia sp!, {r4, r5, pc} +	cmp r0, #0 +	moveq r0, #1 +	streq r0, [r5, #0xd8] +	add sp, sp, #4 +	ldmia sp!, {r4, r5, pc} +	.align 2, 0 +_02212EFC: .word 0x02216938 +_02212F00: .word 0x02216944 +	arm_func_end MOD79_02212E78 + +	arm_func_start MOD79_02212F04 +MOD79_02212F04: ; 0x02212F04 +	stmdb sp!, {r4, r5, r6, lr} +	mov r6, r0 +	ldr r3, [r6, #0x5c] +	mov r5, r1 +	mov r4, r2 +	cmp r3, #0 +	mov r3, #0 +	bne _02212F48 +	bl MOD79_02212F68 +	mov r3, r0 +	mvn r0, #0 +	cmp r3, r0 +	moveq r0, #0 +	ldmeqia sp!, {r4, r5, r6, pc} +	cmp r3, r4 +	moveq r0, #1 +	ldmeqia sp!, {r4, r5, r6, pc} +_02212F48: +	add r0, r6, #0x50 +	add r1, r5, r3 +	sub r2, r4, r3 +	bl MOD79_02212794 +	cmp r0, #0 +	moveq r0, #0 +	movne r0, #2 +	ldmia sp!, {r4, r5, r6, pc} +	arm_func_end MOD79_02212F04 + +	arm_func_start MOD79_02212F68 +MOD79_02212F68: ; 0x02212F68 +	stmdb sp!, {r4, lr} +	mov r4, r0 +	ldr r0, [r4, #0x48] +	mov r3, #0 +	bl MOD04_021EFC24 +	mvn r1, #0 +	cmp r0, r1 +	bne _02212FD8 +	ldr r0, [r4, #0x48] +	bl MOD04_021EFB28 +	mvn r1, #5 +	cmp r0, r1 +	beq _02212FB4 +	mvn r1, #0x19 +	cmp r0, r1 +	beq _02212FB4 +	mvn r1, #0x4b +	cmp r0, r1 +	bne _02212FBC +_02212FB4: +	mov r0, #0 +	ldmia sp!, {r4, pc} +_02212FBC: +	mov r1, #1 +	str r1, [r4, #0xfc] +	mov r1, #5 +	str r1, [r4, #0x38] +	str r0, [r4, #0x4c] +	mvn r0, #0 +	ldmia sp!, {r4, pc} +_02212FD8: +	ldr r1, [r4, #0x10] +	cmp r1, #4 +	ldreq r1, [r4, #0x148] +	addeq r1, r1, r0 +	streq r1, [r4, #0x148] +	ldmia sp!, {r4, pc} +	arm_func_end MOD79_02212F68 + +	arm_func_start MOD79_02212FF0 +MOD79_02212FF0: ; 0x02212FF0 +	stmdb sp!, {r4, r5, r6, r7, lr} +	sub sp, sp, #4 +	mov r7, r0 +	mov r5, r2 +	ldr r2, [r5] +	ldr r0, [r7, #0x134] +	mov r6, r1 +	cmp r0, #0 +	sub r4, r2, #1 +	beq _02213050 +	bl MOD04_021F025C +	ldr r1, _02213230 ; =0x02216958 +	ldr r2, [r7, #0x138] +	ldr r1, [r1] +	add r1, r2, r1 +	cmp r0, r1 +	addlo sp, sp, #4 +	movlo r0, #1 +	ldmloia sp!, {r4, r5, r6, r7, pc} +	ldr r1, _02213234 ; =0x0221695C +	str r0, [r7, #0x138] +	ldr r0, [r1] +	cmp r4, r0 +	movge r4, r0 +_02213050: +	ldr r1, [r7, #0x84] +	ldr r0, [r7, #0x80] +	cmp r1, r0 +	bge _02213098 +	mov r1, r6 +	mov r2, r5 +	add r0, r7, #0x74 +	bl MOD79_0221248C +	ldr r1, [r7, #0x84] +	ldr r0, [r7, #0x80] +	add sp, sp, #4 +	cmp r1, r0 +	ldreq r0, [r7, #0xf8] +	streq r0, [r7, #0x80] +	ldreq r0, [r7, #0xf8] +	streq r0, [r7, #0x84] +	mov r0, #0 +	ldmia sp!, {r4, r5, r6, r7, pc} +_02213098: +	ldr r0, [r7, #0x48] +	mov r1, r6 +	mov r2, r4 +	mov r3, #0 +	bl MOD04_021EFC78 +	mov r2, r0 +	mvn r0, #0 +	str r2, [sp] +	cmp r2, r0 +	bne _0221311C +	ldr r0, [r7, #0x48] +	bl MOD04_021EFB28 +	mvn r1, #5 +	cmp r0, r1 +	beq _022130EC +	mvn r1, #0x19 +	cmp r0, r1 +	beq _022130EC +	mvn r1, #0x4b +	cmp r0, r1 +	bne _022130F8 +_022130EC: +	add sp, sp, #4 +	mov r0, #1 +	ldmia sp!, {r4, r5, r6, r7, pc} +_022130F8: +	mov r2, #1 +	str r2, [r7, #0xfc] +	mov r1, #5 +	str r1, [r7, #0x38] +	str r0, [r7, #0x4c] +	add sp, sp, #4 +	str r2, [r7, #0x130] +	mov r0, #3 +	ldmia sp!, {r4, r5, r6, r7, pc} +_0221311C: +	cmp r2, #0 +	moveq r0, #1 +	streq r0, [r7, #0x130] +	addeq sp, sp, #4 +	moveq r0, #2 +	ldmeqia sp!, {r4, r5, r6, r7, pc} +	ldr r0, [r7, #0x168] +	cmp r0, #0 +	beq _0221320C +	mov r1, r6 +	add r0, r7, #0x98 +	bl MOD79_02212794 +	cmp r0, #0 +	addeq sp, sp, #4 +	moveq r0, #3 +	ldmeqia sp!, {r4, r5, r6, r7, pc} +	mov r0, r7 +	bl MOD79_02213238 +	cmp r0, #0 +	bne _02213188 +	mov r0, #1 +	str r0, [r7, #0xfc] +	mov r0, #0x11 +	str r0, [r7, #0x38] +	add sp, sp, #4 +	mov r0, #3 +	ldmia sp!, {r4, r5, r6, r7, pc} +_02213188: +	ldr r1, [r7, #0x80] +	ldr r0, [r7, #0x84] +	sub r0, r1, r0 +	cmp r0, #0 +	movle r0, #0 +	strleb r0, [r6] +	strle r0, [r5] +	addle sp, sp, #4 +	movle r0, #1 +	ldmleia sp!, {r4, r5, r6, r7, pc} +	ldr r0, [r5] +	add r2, sp, #0 +	sub r3, r0, #1 +	mov r1, r6 +	add r0, r7, #0x74 +	str r3, [sp] +	bl MOD79_0221248C +	cmp r0, #0 +	addeq sp, sp, #4 +	moveq r0, #3 +	ldmeqia sp!, {r4, r5, r6, r7, pc} +	ldr r1, [r7, #0x84] +	ldr r0, [r7, #0x80] +	cmp r1, r0 +	ldreq r0, [r7, #0xf8] +	streq r0, [r7, #0x80] +	ldreq r0, [r7, #0xf8] +	streq r0, [r7, #0x84] +	ldr r2, [sp] +	cmp r2, #0 +	addle sp, sp, #4 +	movle r0, #1 +	ldmleia sp!, {r4, r5, r6, r7, pc} +_0221320C: +	mov r0, #0 +	strb r0, [r6, r2] +	ldr r1, [sp] +	str r1, [r5] +	ldr r1, [sp] +	cmp r1, #0 +	movle r0, #1 +	add sp, sp, #4 +	ldmia sp!, {r4, r5, r6, r7, pc} +	.align 2, 0 +_02213230: .word 0x02216958 +_02213234: .word 0x0221695C +	arm_func_end MOD79_02212FF0 + +	arm_func_start MOD79_02213238 +MOD79_02213238: ; 0x02213238 +	stmdb sp!, {r4, r5, r6, r7, r8, sb, lr} +	sub sp, sp, #0x14 +	mov r1, #0 +	mov r4, r0 +	str r1, [sp, #8] +	str r1, [sp, #0xc] +	add r8, sp, #0xc +	add r6, sp, #8 +	add r5, r4, #0x74 +	add r7, r4, #0x164 +_02213260: +	ldr ip, [r4, #0xa8] +	ldr r0, [r4, #0xa4] +	ldr r2, [r4, #0x9c] +	sub r0, r0, ip +	str r0, [sp, #8] +	ldr r3, [r4, #0x80] +	ldr r0, [r4, #0x7c] +	ldr r1, [r4, #0x78] +	sub r0, r0, r3 +	str r0, [sp, #0xc] +	add r0, r1, r3 +	str r0, [sp] +	str r8, [sp, #4] +	ldr sb, [r4, #0x180] +	mov r0, r4 +	mov r1, r7 +	mov r3, r6 +	add r2, r2, ip +	.word 0xE12FFF39 +	mov sb, r0 +	cmp sb, #2 +	bne _022132D4 +	ldr r1, [r4, #0x88] +	mov r0, r5 +	bl MOD79_02212CF0 +	cmp r0, #0 +	addeq sp, sp, #0x14 +	moveq r0, #0 +	ldmeqia sp!, {r4, r5, r6, r7, r8, sb, pc} +_022132D4: +	cmp sb, #2 +	bne _022132E8 +	ldr r0, [sp, #0xc] +	cmp r0, #0 +	beq _02213260 +_022132E8: +	ldr r1, [r4, #0xa8] +	ldr r0, [sp, #8] +	add r0, r1, r0 +	str r0, [r4, #0xa8] +	ldr r1, [r4, #0x80] +	ldr r0, [sp, #0xc] +	add r0, r1, r0 +	str r0, [r4, #0x80] +	ldr r1, [r4, #0xa8] +	cmp r1, #0xff +	ble _02213348 +	ldr r0, [r4, #0xa4] +	subs r5, r0, r1 +	bne _0221332C +	add r0, r4, #0x98 +	bl MOD79_0221262C +	b _02213348 +_0221332C: +	ldr r0, [r4, #0x9c] +	mov r2, r5 +	add r1, r0, r1 +	bl memmove +	mov r0, #0 +	str r0, [r4, #0xa8] +	str r5, [r4, #0xa4] +_02213348: +	cmp sb, #3 +	addne sp, sp, #0x14 +	movne r0, #1 +	ldmneia sp!, {r4, r5, r6, r7, r8, sb, pc} +	mov r0, #1 +	str r0, [r4, #0xfc] +	mov r0, #0x11 +	str r0, [r4, #0x38] +	mov r0, #0 +	add sp, sp, #0x14 +	ldmia sp!, {r4, r5, r6, r7, r8, sb, pc} +	arm_func_end MOD79_02213238 + +	arm_func_start MOD79_02213374 +MOD79_02213374: ; 0x02213374 +	bx lr +	arm_func_end MOD79_02213374 + +	arm_func_start MOD79_02213378 +MOD79_02213378: ; 0x02213378 +	bx lr +	arm_func_end MOD79_02213378 + +	arm_func_start MOD79_0221337C +MOD79_0221337C: ; 0x0221337C +	bx lr +	arm_func_end MOD79_0221337C + +	arm_func_start MOD79_02213380 +MOD79_02213380: ; 0x02213380 +	bx lr +	arm_func_end MOD79_02213380 + +	arm_func_start MOD79_02213384 +MOD79_02213384: ; 0x02213384 +	stmdb sp!, {r4, r5, r6, lr} +	ldr r0, _02213400 ; =0x02217138 +	ldr r0, [r0] +	cmp r0, #0 +	ldmeqia sp!, {r4, r5, r6, pc} +	ldr r0, _02213404 ; =MOD79_02213638 +	bl MOD79_02213510 +	ldr r5, _02213408 ; =0x0221712C +	mov r6, #0 +	ldr r0, [r5] +	cmp r0, #0 +	ble _022133D4 +	ldr r4, _02213400 ; =0x02217138 +_022133B8: +	ldr r0, [r4] +	ldr r0, [r0, r6, lsl #2] +	bl MOD04_021DD82C +	ldr r0, [r5] +	add r6, r6, #1 +	cmp r6, r0 +	blt _022133B8 +_022133D4: +	ldr r0, _02213400 ; =0x02217138 +	ldr r0, [r0] +	bl MOD04_021DD82C +	ldr r2, _02213400 ; =0x02217138 +	mov r3, #0 +	ldr r1, _02213408 ; =0x0221712C +	ldr r0, _0221340C ; =0x02217130 +	str r3, [r2] +	str r3, [r1] +	str r3, [r0] +	ldmia sp!, {r4, r5, r6, pc} +	.align 2, 0 +_02213400: .word 0x02217138 +_02213404: .word MOD79_02213638 +_02213408: .word 0x0221712C +_0221340C: .word 0x02217130 +	arm_func_end MOD79_02213384 + +	arm_func_start MOD79_02213410 +MOD79_02213410: ; 0x02213410 +	stmdb sp!, {r4, lr} +	movs r4, r0 +	bne _02213430 +	ldr r0, _022134FC ; =0x02216960 +	ldr r1, _02213500 ; =0x0221696C +	ldr r3, _02213504 ; =0x00000132 +	mov r2, #0 +	bl __msl_assertion_failed +_02213430: +	ldr r0, [r4, #0x108] +	cmp r0, #0 +	bne _02213450 +	ldr r0, _02213508 ; =0x02216980 +	ldr r1, _02213500 ; =0x0221696C +	ldr r3, _0221350C ; =0x00000133 +	mov r2, #0 +	bl __msl_assertion_failed +_02213450: +	mov r0, #0 +	str r0, [r4, #0x10] +	ldr r0, [r4, #0x14] +	bl MOD04_021DD82C +	ldr r1, [r4, #0x108] +	mov r0, #0 +	str r1, [r4, #0x14] +	str r0, [r4, #0x108] +	ldr r0, [r4, #0x18] +	bl MOD04_021DD82C +	mov r0, #0 +	str r0, [r4, #0x18] +	str r0, [r4, #0x1c] +	strh r0, [r4, #0x20] +	ldr r0, [r4, #0x24] +	bl MOD04_021DD82C +	mov r0, #0 +	str r0, [r4, #0x24] +	ldr r0, [r4, #0x48] +	mov r1, #2 +	bl MOD04_021EFD80 +	ldr r0, [r4, #0x48] +	bl MOD04_021EFD9C +	mvn r1, #0 +	add r0, r4, #0x50 +	str r1, [r4, #0x48] +	bl MOD79_0221262C +	add r0, r4, #0x74 +	bl MOD79_0221262C +	add r0, r4, #0x98 +	bl MOD79_0221262C +	mov r0, #0 +	str r0, [r4, #0xe4] +	str r0, [r4, #0xe8] +	str r0, [r4, #0xec] +	str r0, [r4, #0xf0] +	str r0, [r4, #0xf4] +	str r0, [r4, #0xf8] +	str r0, [r4, #0x130] +	ldr r0, [r4, #0x10c] +	add r0, r0, #1 +	str r0, [r4, #0x10c] +	ldmia sp!, {r4, pc} +	.align 2, 0 +_022134FC: .word 0x02216960 +_02213500: .word 0x0221696C +_02213504: .word 0x00000132 +_02213508: .word 0x02216980 +_0221350C: .word 0x00000133 +	arm_func_end MOD79_02213410 + +	arm_func_start MOD79_02213510 +MOD79_02213510: ; 0x02213510 +	stmdb sp!, {r4, r5, r6, r7, lr} +	sub sp, sp, #4 +	ldr r1, _02213580 ; =0x02217130 +	mov r5, r0 +	ldr r0, [r1] +	cmp r0, #0 +	addle sp, sp, #4 +	ldmleia sp!, {r4, r5, r6, r7, pc} +	bl MOD79_02213378 +	ldr r7, _02213584 ; =0x0221712C +	mov r4, #0 +	ldr r0, [r7] +	cmp r0, #0 +	ble _02213574 +	ldr r6, _02213588 ; =0x02217138 +_0221354C: +	ldr r0, [r6] +	ldr r0, [r0, r4, lsl #2] +	ldr r1, [r0] +	cmp r1, #0 +	beq _02213564 +	.word 0xE12FFF35 +_02213564: +	ldr r0, [r7] +	add r4, r4, #1 +	cmp r4, r0 +	blt _0221354C +_02213574: +	bl MOD79_02213374 +	add sp, sp, #4 +	ldmia sp!, {r4, r5, r6, r7, pc} +	.align 2, 0 +_02213580: .word 0x02217130 +_02213584: .word 0x0221712C +_02213588: .word 0x02217138 +	arm_func_end MOD79_02213510 + +	arm_func_start MOD79_0221358C +MOD79_0221358C: ; 0x0221358C +	stmdb sp!, {r4, lr} +	movs r4, r0 +	bpl _022135AC +	ldr r0, _0221361C ; =0x02216998 +	ldr r1, _02213620 ; =0x0221696C +	ldr r3, _02213624 ; =0x00000101 +	mov r2, #0 +	bl __msl_assertion_failed +_022135AC: +	ldr r0, _02213628 ; =0x0221712C +	ldr r0, [r0] +	cmp r4, r0 +	blt _022135D0 +	ldr r0, _0221362C ; =0x022169A8 +	ldr r1, _02213620 ; =0x0221696C +	ldr r3, _02213630 ; =0x00000102 +	mov r2, #0 +	bl __msl_assertion_failed +_022135D0: +	bl MOD79_02213378 +	cmp r4, #0 +	blt _022135EC +	ldr r0, _02213628 ; =0x0221712C +	ldr r0, [r0] +	cmp r4, r0 +	blt _022135F8 +_022135EC: +	bl MOD79_02213374 +	mov r0, #0 +	ldmia sp!, {r4, pc} +_022135F8: +	ldr r0, _02213634 ; =0x02217138 +	ldr r0, [r0] +	ldr r4, [r0, r4, lsl #2] +	ldr r0, [r4] +	cmp r0, #0 +	moveq r4, #0 +	bl MOD79_02213374 +	mov r0, r4 +	ldmia sp!, {r4, pc} +	.align 2, 0 +_0221361C: .word 0x02216998 +_02213620: .word 0x0221696C +_02213624: .word 0x00000101 +_02213628: .word 0x0221712C +_0221362C: .word 0x022169A8 +_02213630: .word 0x00000102 +_02213634: .word 0x02217138 +	arm_func_end MOD79_0221358C + +	arm_func_start MOD79_02213638 +MOD79_02213638: ; 0x02213638 +	stmdb sp!, {r4, lr} +	movs r4, r0 +	bne _02213658 +	ldr r0, _02213800 ; =0x02216960 +	ldr r1, _02213804 ; =0x0221696C +	mov r2, #0 +	mov r3, #0xb3 +	bl __msl_assertion_failed +_02213658: +	ldr r0, [r4, #4] +	cmp r0, #0 +	bge _02213678 +	ldr r0, _02213808 ; =0x022169C4 +	ldr r1, _02213804 ; =0x0221696C +	mov r2, #0 +	mov r3, #0xb4 +	bl __msl_assertion_failed +_02213678: +	ldr r0, _0221380C ; =0x0221712C +	ldr r1, [r4, #4] +	ldr r0, [r0] +	cmp r1, r0 +	blt _022136A0 +	ldr r0, _02213810 ; =0x022169E0 +	ldr r1, _02213804 ; =0x0221696C +	mov r2, #0 +	mov r3, #0xb5 +	bl __msl_assertion_failed +_022136A0: +	ldr r0, [r4] +	cmp r0, #0 +	bne _022136C0 +	ldr r0, _02213814 ; =0x02216A08 +	ldr r1, _02213804 ; =0x0221696C +	mov r2, #0 +	mov r3, #0xb6 +	bl __msl_assertion_failed +_022136C0: +	cmp r4, #0 +	moveq r0, #0 +	ldmeqia sp!, {r4, pc} +	ldr r0, [r4] +	cmp r0, #0 +	moveq r0, #0 +	ldmeqia sp!, {r4, pc} +	ldr r1, [r4, #4] +	cmp r1, #0 +	movlt r0, #0 +	ldmltia sp!, {r4, pc} +	ldr r0, _0221380C ; =0x0221712C +	ldr r0, [r0] +	cmp r1, r0 +	movge r0, #0 +	ldmgeia sp!, {r4, pc} +	bl MOD79_02213378 +	ldr r0, [r4, #0x14] +	bl MOD04_021DD82C +	ldr r0, [r4, #0x18] +	bl MOD04_021DD82C +	ldr r0, [r4, #0x24] +	bl MOD04_021DD82C +	ldr r0, [r4, #0x28] +	bl MOD04_021DD82C +	ldr r0, [r4, #0x108] +	bl MOD04_021DD82C +	ldr r0, [r4, #0x15c] +	bl MOD04_021DD82C +	ldr r0, [r4, #0x48] +	mvn r1, #0 +	cmp r0, r1 +	beq _02213754 +	mov r1, #2 +	bl MOD04_021EFD80 +	ldr r0, [r4, #0x48] +	bl MOD04_021EFD9C +_02213754: +	add r0, r4, #0x50 +	bl MOD79_02212A54 +	add r0, r4, #0x74 +	bl MOD79_02212A54 +	add r0, r4, #0x98 +	bl MOD79_02212A54 +	add r0, r4, #0xbc +	bl MOD79_02212A54 +	ldr r0, [r4, #0x140] +	cmp r0, #0 +	beq _02213788 +	mov r0, r4 +	bl MOD79_022149E4 +_02213788: +	ldr r0, [r4, #0x13c] +	cmp r0, #0 +	beq _022137B0 +	bl MOD79_02215074 +	cmp r0, #0 +	beq _022137B0 +	ldr r0, [r4, #0x13c] +	bl MOD79_02215058 +	mov r0, #0 +	str r0, [r4, #0x13c] +_022137B0: +	ldr r0, [r4, #0x16c] +	cmp r0, #0 +	beq _022137DC +	ldr r2, [r4, #0x178] +	cmp r2, #0 +	beq _022137D4 +	mov r0, r4 +	add r1, r4, #0x164 +	.word 0xE12FFF32 +_022137D4: +	mov r0, #0 +	str r0, [r4, #0x16c] +_022137DC: +	mov r1, #0 +	ldr r0, _02213818 ; =0x02217130 +	str r1, [r4] +	ldr r1, [r0] +	sub r1, r1, #1 +	str r1, [r0] +	bl MOD79_02213374 +	mov r0, #1 +	ldmia sp!, {r4, pc} +	.align 2, 0 +_02213800: .word 0x02216960 +_02213804: .word 0x0221696C +_02213808: .word 0x022169C4 +_0221380C: .word 0x0221712C +_02213810: .word 0x022169E0 +_02213814: .word 0x02216A08 +_02213818: .word 0x02217130 +	arm_func_end MOD79_02213638 + +	arm_func_start MOD79_0221381C +MOD79_0221381C: ; 0x0221381C +	stmdb sp!, {r4, r5, lr} +	sub sp, sp, #4 +	bl MOD79_02213378 +	bl MOD79_022139CC +	mov r5, r0 +	mvn r0, #0 +	cmp r5, r0 +	bne _0221384C +	bl MOD79_02213374 +	add sp, sp, #4 +	mov r0, #0 +	ldmia sp!, {r4, r5, pc} +_0221384C: +	ldr r0, _022139C0 ; =0x02217138 +	mov r1, #0 +	ldr r0, [r0] +	mov r2, #0x184 +	ldr r4, [r0, r5, lsl #2] +	mov r0, r4 +	bl Call_FillMemWithValue +	mov r0, #1 +	str r0, [r4] +	ldr r0, _022139C4 ; =0x02217134 +	str r5, [r4, #4] +	ldr r2, [r0] +	mov ip, #0 +	add r1, r2, #1 +	str r1, [r0] +	str r2, [r4, #8] +	str ip, [r4, #0xc] +	str ip, [r4, #0x10] +	str ip, [r4, #0x14] +	str ip, [r4, #0x18] +	str ip, [r4, #0x1c] +	strh ip, [r4, #0x20] +	str ip, [r4, #0x24] +	str ip, [r4, #0x28] +	str ip, [r4, #0x2c] +	str ip, [r4, #0x30] +	str ip, [r4, #0x34] +	str ip, [r4, #0x38] +	str ip, [r4, #0x3c] +	str ip, [r4, #0x40] +	str ip, [r4, #0x44] +	mvn r0, #0 +	str r0, [r4, #0x48] +	str ip, [r4, #0x4c] +	str ip, [r4, #0xe0] +	str ip, [r4, #0xe4] +	str ip, [r4, #0xe8] +	str ip, [r4, #0xec] +	str ip, [r4, #0xf0] +	str ip, [r4, #0xf4] +	str ip, [r4, #0xf8] +	str ip, [r4, #0xfc] +	str ip, [r4, #0x100] +	str r0, [r4, #0x104] +	str ip, [r4, #0x108] +	str ip, [r4, #0x10c] +	str ip, [r4, #0x110] +	str ip, [r4, #0x12c] +	str ip, [r4, #0x134] +	str ip, [r4, #0x138] +	str ip, [r4, #0x13c] +	mov r0, #0x1f4 +	str r0, [r4, #0x158] +	add r0, r4, #0x100 +	mov r1, #0x50 +	strh r1, [r0, #0x60] +	str ip, [r4, #0x15c] +	mov r0, r4 +	add r1, r4, #0x50 +	mov r2, #0x800 +	mov r3, #0x1000 +	str ip, [r4, #0x164] +	bl MOD79_02212BC4 +	cmp r0, #0 +	beq _02213964 +	mov r2, #0x800 +	mov r0, r4 +	mov r3, r2 +	add r1, r4, #0x74 +	bl MOD79_02212BC4 +_02213964: +	cmp r0, #0 +	beq _02213980 +	mov r0, r4 +	add r1, r4, #0x98 +	mov r2, #0x800 +	mov r3, #0x400 +	bl MOD79_02212BC4 +_02213980: +	cmp r0, #0 +	bne _022139A0 +	mov r0, r4 +	bl MOD79_02213638 +	bl MOD79_02213374 +	add sp, sp, #4 +	mov r0, #0 +	ldmia sp!, {r4, r5, pc} +_022139A0: +	ldr r0, _022139C8 ; =0x02217130 +	ldr r1, [r0] +	add r1, r1, #1 +	str r1, [r0] +	bl MOD79_02213374 +	mov r0, r4 +	add sp, sp, #4 +	ldmia sp!, {r4, r5, pc} +	.align 2, 0 +_022139C0: .word 0x02217138 +_022139C4: .word 0x02217134 +_022139C8: .word 0x02217130 +	arm_func_end MOD79_0221381C + +	arm_func_start MOD79_022139CC +MOD79_022139CC: ; 0x022139CC +	stmdb sp!, {r4, r5, r6, r7, r8, sb, lr} +	sub sp, sp, #4 +	ldr r1, _02213AF4 ; =0x0221712C +	mov r0, #0 +	ldr r2, [r1] +	cmp r2, #0 +	ble _02213A10 +	ldr r1, _02213AF8 ; =0x02217138 +	ldr r3, [r1] +_022139F0: +	ldr r1, [r3, r0, lsl #2] +	ldr r1, [r1] +	cmp r1, #0 +	addeq sp, sp, #4 +	ldmeqia sp!, {r4, r5, r6, r7, r8, sb, pc} +	add r0, r0, #1 +	cmp r0, r2 +	blt _022139F0 +_02213A10: +	ldr r0, _02213AFC ; =0x02217130 +	ldr r0, [r0] +	cmp r0, r2 +	beq _02213A34 +	ldr r0, _02213B00 ; =0x02216A1C +	ldr r1, _02213B04 ; =0x0221696C +	mov r2, #0 +	mov r3, #0x33 +	bl __msl_assertion_failed +_02213A34: +	ldr r1, _02213AF4 ; =0x0221712C +	ldr r0, _02213AF8 ; =0x02217138 +	ldr r7, [r1] +	ldr r0, [r0] +	add r6, r7, #4 +	mov r1, r6, lsl #2 +	bl MOD04_021DD844 +	cmp r0, #0 +	addeq sp, sp, #4 +	mvneq r0, #0 +	ldmeqia sp!, {r4, r5, r6, r7, r8, sb, pc} +	ldr r8, _02213AF8 ; =0x02217138 +	mov r5, r7 +	str r0, [r8] +	cmp r7, r6 +	bge _02213AE0 +	mov sb, #0 +	mov r4, #0x184 +_02213A7C: +	mov r0, r4 +	bl MOD04_021DD860 +	ldr r1, [r8] +	str r0, [r1, r5, lsl #2] +	ldr r0, [r8] +	ldr r0, [r0, r5, lsl #2] +	cmp r0, #0 +	bne _02213AD0 +	sub r5, r5, #1 +	cmp r5, r7 +	blt _02213AC4 +	ldr r4, _02213AF8 ; =0x02217138 +_02213AAC: +	ldr r0, [r4] +	ldr r0, [r0, r5, lsl #2] +	bl MOD04_021DD82C +	sub r5, r5, #1 +	cmp r5, r7 +	bge _02213AAC +_02213AC4: +	add sp, sp, #4 +	mvn r0, #0 +	ldmia sp!, {r4, r5, r6, r7, r8, sb, pc} +_02213AD0: +	add r5, r5, #1 +	str sb, [r0] +	cmp r5, r6 +	blt _02213A7C +_02213AE0: +	ldr r1, _02213AF4 ; =0x0221712C +	mov r0, r7 +	str r6, [r1] +	add sp, sp, #4 +	ldmia sp!, {r4, r5, r6, r7, r8, sb, pc} +	.align 2, 0 +_02213AF4: .word 0x0221712C +_02213AF8: .word 0x02217138 +_02213AFC: .word 0x02217130 +_02213B00: .word 0x02216A1C +_02213B04: .word 0x0221696C +	arm_func_end MOD79_022139CC + +	arm_func_start MOD79_02213B08 +MOD79_02213B08: ; 0x02213B08 +	ldr ip, _02213B14 ; =MOD79_02213510 +	ldr r0, _02213B18 ; =MOD79_02213E84 +	bx ip +	.align 2, 0 +_02213B14: .word MOD79_02213510 +_02213B18: .word MOD79_02213E84 +	arm_func_end MOD79_02213B08 + +	arm_func_start MOD79_02213B1C +MOD79_02213B1C: ; 0x02213B1C +	stmdb sp!, {r4, r5, r6, r7, r8, lr} +	movs r8, r0 +	mov r7, r1 +	mov r6, r2 +	mov r5, r3 +	beq _02213B40 +	ldrsb r0, [r8] +	cmp r0, #0 +	bne _02213B54 +_02213B40: +	ldr r0, _02213D64 ; =0x02216A50 +	ldr r1, _02213D68 ; =0x02216A44 +	mov r2, #0 +	mov r3, #0x128 +	bl __msl_assertion_failed +_02213B54: +	cmp r5, #0 +	bge _02213B70 +	ldr r0, _02213D6C ; =0x02216A60 +	ldr r1, _02213D68 ; =0x02216A44 +	ldr r3, _02213D70 ; =0x00000129 +	mov r2, #0 +	bl __msl_assertion_failed +_02213B70: +	cmp r6, #0 +	beq _02213B94 +	cmp r5, #0 +	bne _02213B94 +	ldr r0, _02213D74 ; =0x02216A70 +	ldr r1, _02213D68 ; =0x02216A44 +	ldr r3, _02213D78 ; =0x0000012A +	mov r2, #0 +	bl __msl_assertion_failed +_02213B94: +	cmp r8, #0 +	beq _02213BA8 +	ldrsb r0, [r8] +	cmp r0, #0 +	bne _02213BB0 +_02213BA8: +	mvn r0, #0 +	ldmia sp!, {r4, r5, r6, r7, r8, pc} +_02213BB0: +	cmp r5, #0 +	mvnlt r0, #0 +	ldmltia sp!, {r4, r5, r6, r7, r8, pc} +	cmp r6, #0 +	beq _02213BD0 +	cmp r5, #0 +	mvneq r0, #0 +	ldmeqia sp!, {r4, r5, r6, r7, r8, pc} +_02213BD0: +	ldr r0, _02213D7C ; =0x0221713C +	ldr r0, [r0] +	cmp r0, #0 +	bne _02213BE4 +	bl MOD79_02213E24 +_02213BE4: +	bl MOD79_0221381C +	movs r4, r0 +	mvneq r0, #0 +	ldmeqia sp!, {r4, r5, r6, r7, r8, pc} +	mov r1, #0 +	mov r0, r8 +	str r1, [r4, #0xc] +	bl MOD04_021F0208 +	str r0, [r4, #0x14] +	ldr r0, [r4, #0x14] +	cmp r0, #0 +	bne _02213C24 +	mov r0, r4 +	bl MOD79_02213638 +	mvn r0, #0 +	ldmia sp!, {r4, r5, r6, r7, r8, pc} +_02213C24: +	cmp r7, #0 +	beq _02213C60 +	ldrsb r0, [r7] +	cmp r0, #0 +	beq _02213C60 +	mov r0, r7 +	bl MOD04_021F0208 +	str r0, [r4, #0x28] +	ldr r0, [r4, #0x28] +	cmp r0, #0 +	bne _02213C60 +	mov r0, r4 +	bl MOD79_02213638 +	mvn r0, #0 +	ldmia sp!, {r4, r5, r6, r7, r8, pc} +_02213C60: +	ldr r1, [sp, #0x18] +	ldr r0, [sp, #0x20] +	str r1, [r4, #0x13c] +	str r0, [r4, #0x30] +	ldr r1, [sp, #0x24] +	ldr r0, [sp, #0x28] +	str r1, [r4, #0x3c] +	str r0, [r4, #0x40] +	ldr r1, [sp, #0x2c] +	ldr r0, [sp, #0x1c] +	str r1, [r4, #0x44] +	str r0, [r4, #0x134] +	cmp r6, #0 +	movne r0, #1 +	moveq r0, #0 +	str r0, [r4, #0xe0] +	ldr r0, [r4, #0xe0] +	cmp r0, #0 +	beq _02213CC4 +	mov r0, r4 +	mov r2, r6 +	mov r3, r5 +	add r1, r4, #0xbc +	bl MOD79_02212AB4 +	b _02213CD8 +_02213CC4: +	mov r2, #0x800 +	mov r0, r4 +	mov r3, r2 +	add r1, r4, #0xbc +	bl MOD79_02212BC4 +_02213CD8: +	cmp r0, #0 +	bne _02213CF0 +	mov r0, r4 +	bl MOD79_02213638 +	mvn r0, #0 +	ldmia sp!, {r4, r5, r6, r7, r8, pc} +_02213CF0: +	ldr r0, [sp, #0x18] +	cmp r0, #0 +	beq _02213D1C +	mov r0, r4 +	bl MOD79_02214A60 +	cmp r0, #0 +	bne _02213D1C +	mov r0, r4 +	bl MOD79_02213638 +	mvn r0, #0 +	ldmia sp!, {r4, r5, r6, r7, r8, pc} +_02213D1C: +	ldr r0, [sp, #0x20] +	cmp r0, #0 +	beq _02213D5C +	mov r0, r4 +	bl MOD79_02213E84 +	cmp r0, #0 +	bne _02213D54 +	mov r5, #0xa +_02213D3C: +	mov r0, r5 +	bl MOD04_021F0250 +	mov r0, r4 +	bl MOD79_02213E84 +	cmp r0, #0 +	beq _02213D3C +_02213D54: +	mov r0, #0 +	ldmia sp!, {r4, r5, r6, r7, r8, pc} +_02213D5C: +	ldr r0, [r4, #4] +	ldmia sp!, {r4, r5, r6, r7, r8, pc} +	.align 2, 0 +_02213D64: .word 0x02216A50 +_02213D68: .word 0x02216A44 +_02213D6C: .word 0x02216A60 +_02213D70: .word 0x00000129 +_02213D74: .word 0x02216A70 +_02213D78: .word 0x0000012A +_02213D7C: .word 0x0221713C +	arm_func_end MOD79_02213B1C + +	arm_func_start MOD79_02213D80 +MOD79_02213D80: ; 0x02213D80 +	stmdb sp!, {lr} +	sub sp, sp, #0x1c +	mov ip, #0 +	str ip, [sp] +	str ip, [sp, #4] +	str r1, [sp, #8] +	str ip, [sp, #0xc] +	str r2, [sp, #0x10] +	str r3, [sp, #0x14] +	mov r1, ip +	mov r2, ip +	mov r3, ip +	bl MOD79_02213B1C +	add sp, sp, #0x1c +	ldmia sp!, {pc} +	arm_func_end MOD79_02213D80 + +	arm_func_start MOD79_02213DBC +MOD79_02213DBC: ; 0x02213DBC +	stmdb sp!, {lr} +	sub sp, sp, #4 +	bl MOD79_02213378 +	ldr r0, _02213E1C ; =0x0221713C +	ldr r1, [r0] +	subs r1, r1, #1 +	str r1, [r0] +	bne _02213E10 +	bl MOD79_02213384 +	ldr r0, _02213E20 ; =0x02217128 +	ldr r0, [r0] +	cmp r0, #0 +	beq _02213E00 +	bl MOD04_021DD82C +	ldr r0, _02213E20 ; =0x02217128 +	mov r1, #0 +	str r1, [r0] +_02213E00: +	bl MOD79_02213374 +	bl MOD79_0221337C +	add sp, sp, #4 +	ldmia sp!, {pc} +_02213E10: +	bl MOD79_02213374 +	add sp, sp, #4 +	ldmia sp!, {pc} +	.align 2, 0 +_02213E1C: .word 0x0221713C +_02213E20: .word 0x02217128 +	arm_func_end MOD79_02213DBC + +	arm_func_start MOD79_02213E24 +MOD79_02213E24: ; 0x02213E24 +	stmdb sp!, {lr} +	sub sp, sp, #4 +	bl MOD79_02213378 +	ldr r0, _02213E78 ; =0x0221713C +	ldr r1, [r0] +	add r1, r1, #1 +	str r1, [r0] +	cmp r1, #1 +	bne _02213E6C +	bl MOD79_02213380 +	ldr r1, _02213E7C ; =0x0221695C +	mov r3, #0x7d +	ldr r0, _02213E80 ; =0x02216958 +	mov r2, #0xfa +	str r3, [r1] +	str r2, [r0] +	add sp, sp, #4 +	ldmia sp!, {pc} +_02213E6C: +	bl MOD79_02213374 +	add sp, sp, #4 +	ldmia sp!, {pc} +	.align 2, 0 +_02213E78: .word 0x0221713C +_02213E7C: .word 0x0221695C +_02213E80: .word 0x02216958 +	arm_func_end MOD79_02213E24 + +	arm_func_start MOD79_02213E84 +MOD79_02213E84: ; 0x02213E84 +	stmdb sp!, {r4, r5, lr} +	sub sp, sp, #4 +	movs r4, r0 +	bne _02213EA8 +	ldr r0, _02213FE8 ; =0x02216A88 +	ldr r1, _02213FEC ; =0x02216A44 +	mov r2, #0 +	mov r3, #0x5b +	bl __msl_assertion_failed +_02213EA8: +	ldr r0, [r4, #4] +	bl MOD79_0221358C +	cmp r0, r4 +	beq _02213ECC +	ldr r0, _02213FF0 ; =0x02216A94 +	ldr r1, _02213FEC ; =0x02216A44 +	mov r2, #0 +	mov r3, #0x5c +	bl __msl_assertion_failed +_02213ECC: +	ldr r0, [r4, #0x12c] +	cmp r0, #0 +	addne sp, sp, #4 +	movne r0, #0 +	ldmneia sp!, {r4, r5, pc} +	mov r0, #1 +	str r0, [r4, #0x12c] +	ldr r0, [r4, #0x10] +	cmp r0, #0 +	bne _02213EFC +	mov r0, r4 +	bl MOD79_02216478 +_02213EFC: +	ldr r0, [r4, #0x10] +	cmp r0, #1 +	bne _02213F10 +	mov r0, r4 +	bl MOD79_0221621C +_02213F10: +	ldr r0, [r4, #0x10] +	cmp r0, #2 +	bne _02213F24 +	mov r0, r4 +	bl MOD79_022160C0 +_02213F24: +	ldr r0, [r4, #0x10] +	cmp r0, #3 +	bne _02213F38 +	mov r0, r4 +	bl MOD79_02215E40 +_02213F38: +	ldr r0, [r4, #0x10] +	cmp r0, #4 +	bne _02213F4C +	mov r0, r4 +	bl MOD79_02215DA8 +_02213F4C: +	ldr r0, [r4, #0x10] +	cmp r0, #5 +	bne _02213F60 +	mov r0, r4 +	bl MOD79_02215D28 +_02213F60: +	ldr r0, [r4, #0x10] +	cmp r0, #6 +	bne _02213F74 +	mov r0, r4 +	bl MOD79_02215AA8 +_02213F74: +	ldr r0, [r4, #0x10] +	cmp r0, #7 +	bne _02213F88 +	mov r0, r4 +	bl MOD79_02215174 +_02213F88: +	ldr r0, [r4, #0x10] +	cmp r0, #8 +	bne _02213F9C +	mov r0, r4 +	bl MOD79_0221507C +_02213F9C: +	ldr r0, [r4, #0x108] +	cmp r0, #0 +	beq _02213FB0 +	mov r0, r4 +	bl MOD79_02213410 +_02213FB0: +	ldr r5, [r4, #0xfc] +	cmp r5, #0 +	moveq r0, #0 +	streq r0, [r4, #0x12c] +	beq _02213FDC +	mov r0, r4 +	bl MOD79_02213FF4 +	mov r0, r4 +	bl MOD79_02212E78 +	mov r0, r4 +	bl MOD79_02213638 +_02213FDC: +	mov r0, r5 +	add sp, sp, #4 +	ldmia sp!, {r4, r5, pc} +	.align 2, 0 +_02213FE8: .word 0x02216A88 +_02213FEC: .word 0x02216A44 +_02213FF0: .word 0x02216A94 +	arm_func_end MOD79_02213E84 + +	arm_func_start MOD79_02213FF4 +MOD79_02213FF4: ; 0x02213FF4 +	stmdb sp!, {lr} +	sub sp, sp, #4 +	ldr lr, [r0, #0xec] +	ldr r3, _022140CC ; =0x51EB851F +	mov r1, lr, lsr #0x1f +	smull r2, ip, r3, lr +	mov ip, ip, asr #5 +	add ip, r1, ip +	cmp ip, #5 +	addls pc, pc, ip, lsl #2 +	b _022140C4 +_02214020: ; jump table +	b _022140C4 ; case 0 +	b _02214038 ; case 1 +	b _02214038 ; case 2 +	b _02214038 ; case 3 +	b _02214040 ; case 4 +	b _022140BC ; case 5 +_02214038: +	add sp, sp, #4 +	ldmia sp!, {pc} +_02214040: +	ldr r1, _022140D0 ; =0x00000191 +	sub r1, lr, r1 +	cmp r1, #9 +	addls pc, pc, r1, lsl #2 +	b _022140AC +_02214054: ; jump table +	b _0221407C ; case 0 +	b _022140AC ; case 1 +	b _0221408C ; case 2 +	b _0221409C ; case 3 +	b _022140AC ; case 4 +	b _022140AC ; case 5 +	b _022140AC ; case 6 +	b _022140AC ; case 7 +	b _022140AC ; case 8 +	b _0221409C ; case 9 +_0221407C: +	mov r1, #9 +	str r1, [r0, #0x38] +	add sp, sp, #4 +	ldmia sp!, {pc} +_0221408C: +	mov r1, #0xa +	str r1, [r0, #0x38] +	add sp, sp, #4 +	ldmia sp!, {pc} +_0221409C: +	mov r1, #0xb +	str r1, [r0, #0x38] +	add sp, sp, #4 +	ldmia sp!, {pc} +_022140AC: +	mov r1, #8 +	str r1, [r0, #0x38] +	add sp, sp, #4 +	ldmia sp!, {pc} +_022140BC: +	mov r1, #0xc +	str r1, [r0, #0x38] +_022140C4: +	add sp, sp, #4 +	ldmia sp!, {pc} +	.align 2, 0 +_022140CC: .word 0x51EB851F +_022140D0: .word 0x00000191 +	arm_func_end MOD79_02213FF4 + +	arm_func_start MOD79_022140D4 +MOD79_022140D4: ; 0x022140D4 +	stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} +	sub sp, sp, #4 +	movs sl, r0 +	bne _022140F8 +	ldr r0, _02214330 ; =0x02216AD0 +	ldr r1, _02214334 ; =0x02216ADC +	ldr r3, _02214338 ; =0x00000404 +	mov r2, #0 +	bl __msl_assertion_failed +_022140F8: +	ldr r0, [sl, #0x13c] +	cmp r0, #0 +	bne _02214118 +	ldr r0, _0221433C ; =0x02216AE8 +	ldr r1, _02214334 ; =0x02216ADC +	ldr r3, _02214340 ; =0x00000405 +	mov r2, #0 +	bl __msl_assertion_failed +_02214118: +	ldr r0, [sl, #0x140] +	cmp r0, #0 +	bne _02214138 +	ldr r0, _02214344 ; =0x02216AFC +	ldr r1, _02214334 ; =0x02216ADC +	ldr r3, _02214348 ; =0x00000406 +	mov r2, #0 +	bl __msl_assertion_failed +_02214138: +	ldr r0, [sl, #0x13c] +	ldr r0, [r0] +	bl MOD04_021EF06C +	mov r4, r0 +	ldr r0, [sl, #0x140] +	bl MOD04_021EF06C +	cmp r4, r0 +	beq _0221416C +	ldr r0, _0221434C ; =0x02216B1C +	ldr r1, _02214334 ; =0x02216ADC +	ldr r3, _02214350 ; =0x00000407 +	mov r2, #0 +	bl __msl_assertion_failed +_0221416C: +	ldr r0, [sl, #0x144] +	cmp r0, #0 +	bge _0221418C +	ldr r0, _02214354 ; =0x02216B70 +	ldr r1, _02214334 ; =0x02216ADC +	ldr r3, _02214358 ; =0x00000408 +	mov r2, #0 +	bl __msl_assertion_failed +_0221418C: +	ldr r0, [sl, #0x140] +	bl MOD04_021EF06C +	ldr r1, [sl, #0x144] +	cmp r1, r0 +	ble _022141B4 +	ldr r0, _0221435C ; =0x02216B94 +	ldr r1, _02214334 ; =0x02216ADC +	ldr r3, _02214360 ; =0x00000409 +	mov r2, #0 +	bl __msl_assertion_failed +_022141B4: +	ldr r0, [sl, #0x140] +	add sb, sl, #0x140 +	bl MOD04_021EF06C +	ldr r1, [sl, #0x5c] +	mov r7, r0 +	cmp r1, #0 +	beq _0221421C +	mov r0, sl +	bl MOD79_02212554 +	cmp r0, #0 +	addeq sp, sp, #4 +	moveq r0, #0 +	ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +	ldr r1, [sl, #0x60] +	ldr r0, [sl, #0x5c] +	cmp r1, r0 +	addlt sp, sp, #4 +	movlt r0, #2 +	ldmltia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +	add r0, sl, #0x50 +	bl MOD79_0221262C +	ldr r0, [sl, #0x144] +	cmp r0, r7 +	addeq sp, sp, #4 +	moveq r0, #1 +	ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +_0221421C: +	ldr r1, [sb, #4] +	cmp r1, r7 +	bge _022142E0 +	ldr r6, _02214364 ; =0x02216BE4 +	ldr fp, _02214334 ; =0x02216ADC +	mov r5, #0 +	mov r4, #1 +_02214238: +	ldr r0, [sb] +	bl MOD04_021EEFFC +	movs r8, r0 +	bne _0221425C +	ldr r3, _02214368 ; =0x0000042F +	mov r0, r6 +	mov r1, fp +	mov r2, r5 +	bl __msl_assertion_failed +_0221425C: +	ldr r0, [sb, #4] +	mov r1, sl +	cmp r0, #0 +	moveq r2, r4 +	movne r2, r5 +	mov r0, r8 +	bl MOD79_02214378 +	cmp r0, #0 +	bne _022142B8 +	ldr r0, [sl, #0xfc] +	cmp r0, #0 +	beq _02214298 +	ldr r0, [sl, #0x38] +	cmp r0, #0 +	bne _022142AC +_02214298: +	ldr r0, _0221436C ; =0x02216BF0 +	ldr r1, _02214334 ; =0x02216ADC +	ldr r3, _02214370 ; =0x0000043B +	mov r2, #0 +	bl __msl_assertion_failed +_022142AC: +	add sp, sp, #4 +	mov r0, #0 +	ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +_022142B8: +	cmp r0, #2 +	addeq sp, sp, #4 +	moveq r0, #2 +	ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +	ldr r0, [sb, #4] +	add r0, r0, #1 +	str r0, [sb, #4] +	ldr r1, [sb, #4] +	cmp r1, r7 +	blt _02214238 +_022142E0: +	ldr r0, [sl, #0x13c] +	ldr r0, [r0, #0xc] +	cmp r0, #0 +	beq _02214318 +	ldr r0, _02214374 ; =0x02216C1C +	bl strlen +	mov r2, r0 +	ldr r1, _02214374 ; =0x02216C1C +	mov r0, sl +	bl MOD79_02212F04 +	cmp r0, #0 +	addeq sp, sp, #4 +	moveq r0, #0 +	ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +_02214318: +	ldr r0, [sl, #0x5c] +	cmp r0, #0 +	movne r0, #2 +	moveq r0, #1 +	add sp, sp, #4 +	ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +	.align 2, 0 +_02214330: .word 0x02216AD0 +_02214334: .word 0x02216ADC +_02214338: .word 0x00000404 +_0221433C: .word 0x02216AE8 +_02214340: .word 0x00000405 +_02214344: .word 0x02216AFC +_02214348: .word 0x00000406 +_0221434C: .word 0x02216B1C +_02214350: .word 0x00000407 +_02214354: .word 0x02216B70 +_02214358: .word 0x00000408 +_0221435C: .word 0x02216B94 +_02214360: .word 0x00000409 +_02214364: .word 0x02216BE4 +_02214368: .word 0x0000042F +_0221436C: .word 0x02216BF0 +_02214370: .word 0x0000043B +_02214374: .word 0x02216C1C +	arm_func_end MOD79_022140D4 + +	arm_func_start MOD79_02214378 +MOD79_02214378: ; 0x02214378 +	stmdb sp!, {r4, r5, r6, lr} +	ldr ip, _02214554 ; =0x00000808 +	sub sp, sp, ip +	mov r6, r0 +	ldr r3, [r6, #4] +	mvn r0, #0 +	mov r5, r1 +	mov r4, r2 +	cmp r3, r0 +	bne _022144D8 +	mov r2, #0 +	str r2, [r6, #4] +	ldr r0, [r5, #0x13c] +	ldr r0, [r0, #0xc] +	cmp r0, #0 +	bne _02214410 +	ldr r0, [r6] +	ldr r0, [r0] +	cmp r0, #0 +	beq _022143D8 +	ldr r0, _02214558 ; =0x02216C48 +	ldr r1, _0221455C ; =0x02216ADC +	ldr r3, _02214560 ; =0x000003A9 +	bl __msl_assertion_failed +_022143D8: +	cmp r4, #0 +	beq _022143F8 +	ldr r1, [r6] +	add r0, sp, #8 +	ldr r2, [r1, #4] +	ldr r1, _02214564 ; =0x02216C68 +	bl sprintf +	b _02214498 +_022143F8: +	ldr r1, [r6] +	add r0, sp, #8 +	ldr r2, [r1, #4] +	ldr r1, _02214568 ; =0x02216C6C +	bl sprintf +	b _02214498 +_02214410: +	ldr r3, [r6] +	ldr r1, [r3] +	cmp r1, #0 +	bne _02214440 +	cmp r4, #0 +	ldrne r2, _0221456C ; =0x02216C74 +	ldr r3, [r3, #4] +	ldreq r2, _02214570 ; =0x02216C9C +	ldr r1, _02214574 ; =0x02216CC8 +	add r0, sp, #8 +	bl sprintf +	b _02214498 +_02214440: +	sub r0, r1, #1 +	cmp r0, #1 +	bhi _02214488 +	cmp r1, #1 +	ldreq r1, [r3, #0xc] +	ldreq r0, [r3, #0x10] +	ldrne r1, [r3, #0x10] +	ldrne r0, [r3, #0x14] +	cmp r4, #0 +	str r1, [sp] +	str r0, [sp, #4] +	ldrne r2, _0221456C ; =0x02216C74 +	ldr r3, [r3, #4] +	ldreq r2, _02214570 ; =0x02216C9C +	ldr r1, _02214578 ; =0x02216CF8 +	add r0, sp, #8 +	bl sprintf +	b _02214498 +_02214488: +	ldr r0, _0221457C ; =0x02216D4C +	ldr r1, _0221455C ; =0x02216ADC +	mov r3, #0x3dc +	bl __msl_assertion_failed +_02214498: +	add r0, sp, #8 +	bl strlen +	mov r2, r0 +	add r1, sp, #8 +	mov r0, r5 +	bl MOD79_02212F04 +	cmp r0, #0 +	ldreq ip, _02214554 ; =0x00000808 +	moveq r0, #0 +	addeq sp, sp, ip +	ldmeqia sp!, {r4, r5, r6, pc} +	cmp r0, #2 +	ldreq ip, _02214554 ; =0x00000808 +	moveq r0, #2 +	addeq sp, sp, ip +	ldmeqia sp!, {r4, r5, r6, pc} +_022144D8: +	ldr r0, [r6] +	ldr r0, [r0] +	cmp r0, #0 +	bne _02214500 +	mov r0, r6 +	mov r1, r5 +	bl MOD79_022147E8 +	ldr ip, _02214554 ; =0x00000808 +	add sp, sp, ip +	ldmia sp!, {r4, r5, r6, pc} +_02214500: +	cmp r0, #1 +	bne _02214520 +	mov r0, r6 +	mov r1, r5 +	bl MOD79_0221467C +	ldr ip, _02214554 ; =0x00000808 +	add sp, sp, ip +	ldmia sp!, {r4, r5, r6, pc} +_02214520: +	cmp r0, #2 +	beq _0221453C +	ldr r0, _02214580 ; =0x02216D50 +	ldr r1, _0221455C ; =0x02216ADC +	ldr r3, _02214584 ; =0x000003F5 +	mov r2, #0 +	bl __msl_assertion_failed +_0221453C: +	mov r0, r6 +	mov r1, r5 +	bl MOD79_02214588 +	ldr ip, _02214554 ; =0x00000808 +	add sp, sp, ip +	ldmia sp!, {r4, r5, r6, pc} +	.align 2, 0 +_02214554: .word 0x00000808 +_02214558: .word 0x02216C48 +_0221455C: .word 0x02216ADC +_02214560: .word 0x000003A9 +_02214564: .word 0x02216C68 +_02214568: .word 0x02216C6C +_0221456C: .word 0x02216C74 +_02214570: .word 0x02216C9C +_02214574: .word 0x02216CC8 +_02214578: .word 0x02216CF8 +_0221457C: .word 0x02216D4C +_02214580: .word 0x02216D50 +_02214584: .word 0x000003F5 +	arm_func_end MOD79_02214378 + +	arm_func_start MOD79_02214588 +MOD79_02214588: ; 0x02214588 +	stmdb sp!, {r4, r5, lr} +	sub sp, sp, #4 +	mov r5, r0 +	ldr r0, [r5, #4] +	mov r4, r1 +	cmp r0, #0 +	bge _022145B8 +	ldr r0, _02214668 ; =0x02216D74 +	ldr r1, _0221466C ; =0x02216ADC +	ldr r3, _02214670 ; =0x0000036E +	mov r2, #0 +	bl __msl_assertion_failed +_022145B8: +	ldr r0, [r5] +	ldr r1, [r0, #0xc] +	cmp r1, #0 +	addeq sp, sp, #4 +	moveq r0, #1 +	ldmeqia sp!, {r4, r5, pc} +	ldr r0, [r5, #4] +	cmp r0, r1 +	blt _022145F0 +	ldr r0, _02214674 ; =0x02216D84 +	ldr r1, _0221466C ; =0x02216ADC +	ldr r3, _02214678 ; =0x00000375 +	mov r2, #0 +	bl __msl_assertion_failed +_022145F0: +	ldr r1, [r5] +	ldr r3, [r5, #4] +	ldr r0, [r1, #0xc] +	ldr r1, [r1, #8] +	sub r2, r0, r3 +	cmp r2, #0x8000 +	movge r2, #0x8000 +	mov r0, r4 +	add r1, r1, r3 +	bl MOD79_02212F68 +	mvn r1, #0 +	cmp r0, r1 +	addeq sp, sp, #4 +	moveq r0, #0 +	ldmeqia sp!, {r4, r5, pc} +	ldr r1, [r5, #4] +	add r1, r1, r0 +	str r1, [r5, #4] +	ldr r2, [r5] +	ldr r1, [r5, #4] +	ldr r2, [r2, #0xc] +	cmp r2, r1 +	addeq sp, sp, #4 +	moveq r0, #1 +	ldmeqia sp!, {r4, r5, pc} +	cmp r0, #0 +	bne _022145F0 +	mov r0, #2 +	add sp, sp, #4 +	ldmia sp!, {r4, r5, pc} +	.align 2, 0 +_02214668: .word 0x02216D74 +_0221466C: .word 0x02216ADC +_02214670: .word 0x0000036E +_02214674: .word 0x02216D84 +_02214678: .word 0x00000375 +	arm_func_end MOD79_02214588 + +	arm_func_start MOD79_0221467C +MOD79_0221467C: ; 0x0221467C +	stmdb sp!, {r4, r5, lr} +	ldr ip, _022147CC ; =0x00001004 +	sub sp, sp, ip +	mov r5, r0 +	ldr r0, [r5, #4] +	mov r4, r1 +	cmp r0, #0 +	bge _022146B0 +	ldr r0, _022147D0 ; =0x02216D74 +	ldr r1, _022147D4 ; =0x02216ADC +	ldr r3, _022147D8 ; =0x00000336 +	mov r2, #0 +	bl __msl_assertion_failed +_022146B0: +	ldr r1, [r5, #4] +	ldr r0, [r5, #0xc] +	cmp r1, r0 +	blt _022146D4 +	ldr r0, _022147DC ; =0x02216DB4 +	ldr r1, _022147D4 ; =0x02216ADC +	ldr r3, _022147E0 ; =0x00000337 +	mov r2, #0 +	bl __msl_assertion_failed +_022146D4: +	ldr r0, [r5, #8] +	bl ftell +	ldr r1, [r5, #4] +	cmp r1, r0 +	beq _022146FC +	ldr r0, _022147E4 ; =0x02216DDC +	ldr r1, _022147D4 ; =0x02216ADC +	mov r2, #0 +	mov r3, #0x338 +	bl __msl_assertion_failed +_022146FC: +	ldr r3, [r5, #8] +	add r0, sp, #0 +	mov r1, #1 +	mov r2, #0x1000 +	bl fread +	mov r2, r0 +	cmp r2, #0 +	bgt _0221473C +	ldr ip, _022147CC ; =0x00001004 +	mov r0, #1 +	str r0, [r4, #0xfc] +	mov r0, #0xe +	str r0, [r4, #0x38] +	add sp, sp, ip +	mov r0, #0 +	ldmia sp!, {r4, r5, pc} +_0221473C: +	ldr r0, [r5, #4] +	add r0, r0, r2 +	str r0, [r5, #4] +	ldr r1, [r5, #4] +	ldr r0, [r5, #0xc] +	cmp r1, r0 +	ble _02214778 +	ldr ip, _022147CC ; =0x00001004 +	mov r0, #1 +	str r0, [r4, #0xfc] +	mov r0, #0xe +	str r0, [r4, #0x38] +	add sp, sp, ip +	mov r0, #0 +	ldmia sp!, {r4, r5, pc} +_02214778: +	add r1, sp, #0 +	mov r0, r4 +	bl MOD79_02212F04 +	cmp r0, #0 +	ldreq ip, _022147CC ; =0x00001004 +	moveq r0, #0 +	addeq sp, sp, ip +	ldmeqia sp!, {r4, r5, pc} +	ldr r2, [r5, #4] +	ldr r1, [r5, #0xc] +	cmp r2, r1 +	ldreq ip, _022147CC ; =0x00001004 +	moveq r0, #1 +	addeq sp, sp, ip +	ldmeqia sp!, {r4, r5, pc} +	cmp r0, #1 +	beq _022146FC +	mov r0, #2 +	ldr ip, _022147CC ; =0x00001004 +	add sp, sp, ip +	ldmia sp!, {r4, r5, pc} +	.align 2, 0 +_022147CC: .word 0x00001004 +_022147D0: .word 0x02216D74 +_022147D4: .word 0x02216ADC +_022147D8: .word 0x00000336 +_022147DC: .word 0x02216DB4 +_022147E0: .word 0x00000337 +_022147E4: .word 0x02216DDC +	arm_func_end MOD79_0221467C + +	arm_func_start MOD79_022147E8 +MOD79_022147E8: ; 0x022147E8 +	stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} +	sub sp, sp, #4 +	mov r4, r0 +	ldr r0, [r4, #4] +	mov sl, r1 +	cmp r0, #0 +	bge _02214818 +	ldr r0, _022149BC ; =0x02216D74 +	ldr r1, _022149C0 ; =0x02216ADC +	ldr r3, _022149C4 ; =0x000002E7 +	mov r2, #0 +	bl __msl_assertion_failed +_02214818: +	ldr r0, [r4] +	ldr r1, [r0, #0xc] +	cmp r1, #0 +	addeq sp, sp, #4 +	moveq r0, #1 +	ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +	ldr r0, [r4, #4] +	cmp r0, r1 +	blt _02214850 +	ldr r0, _022149C8 ; =0x02216E14 +	ldr r1, _022149C0 ; =0x02216ADC +	ldr r3, _022149CC ; =0x000002EE +	mov r2, #0 +	bl __msl_assertion_failed +_02214850: +	ldr r0, [sl, #0x13c] +	ldr r0, [r0, #0xc] +	cmp r0, #0 +	bne _02214968 +	ldr r1, [r4] +	ldr r0, [r1, #0x10] +	cmp r0, #0 +	beq _02214968 +	ldr r0, _022149D0 ; =0x02216738 +	ldr r7, [r1, #8] +	ldrb r3, [r0] +	ldrb r2, [r0, #1] +	ldrb r1, [r0, #2] +	ldrb r0, [r0, #3] +	strb r3, [sp] +	strb r2, [sp, #1] +	strb r1, [sp, #2] +	strb r0, [sp, #3] +	ldrsb r8, [r7] +	mov sb, #0 +	cmp r8, #0 +	beq _0221495C +	mov fp, sb +	mov r4, #3 +	mov r5, #0x2b +_022148B4: +	ldr r0, _022149D4 ; =0x02216E40 +	mov r1, r8 +	bl strchr +	cmp r0, #0 +	beq _022148D8 +	mov r1, r8 +	add r0, sl, #0x50 +	bl MOD79_022126A4 +	b _0221494C +_022148D8: +	cmp r8, #0x20 +	bne _022148F0 +	mov r1, r5 +	add r0, sl, #0x50 +	bl MOD79_022126A4 +	b _0221494C +_022148F0: +	mov r0, r8, asr #3 +	add r0, r8, r0, lsr #28 +	mov r6, r0, asr #4 +	cmp r6, #0x10 +	blt _02214918 +	ldr r0, _022149D8 ; =0x02216E84 +	ldr r1, _022149C0 ; =0x02216ADC +	ldr r3, _022149DC ; =0x0000030D +	mov r2, fp +	bl __msl_assertion_failed +_02214918: +	ldr r0, _022149E0 ; =0x02216E94 +	mov r1, r8, lsr #0x1f +	ldrsb r2, [r0, r6] +	rsb r0, r1, r8, lsl #28 +	add r1, r1, r0, ror #28 +	ldr r0, _022149E0 ; =0x02216E94 +	strb r2, [sp, #1] +	ldrsb r2, [r0, r1] +	add r1, sp, #0 +	add r0, sl, #0x50 +	strb r2, [sp, #2] +	mov r2, r4 +	bl MOD79_02212794 +_0221494C: +	add sb, sb, #1 +	ldrsb r8, [r7, sb] +	cmp r8, #0 +	bne _022148B4 +_0221495C: +	add sp, sp, #4 +	mov r0, #1 +	ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +_02214968: +	ldr r1, [r4] +	ldr r0, [r4, #4] +	ldr r2, [r1, #0xc] +	ldr r1, [r1, #8] +	sub r5, r2, r0 +	mov r0, sl +	mov r2, r5 +	bl MOD79_02212F68 +	mvn r1, #0 +	cmp r0, r1 +	addeq sp, sp, #4 +	moveq r0, #0 +	ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +	ldr r1, [r4, #4] +	cmp r0, r5 +	add r0, r1, r0 +	str r0, [r4, #4] +	moveq r0, #1 +	movne r0, #2 +	add sp, sp, #4 +	ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +	.align 2, 0 +_022149BC: .word 0x02216D74 +_022149C0: .word 0x02216ADC +_022149C4: .word 0x000002E7 +_022149C8: .word 0x02216E14 +_022149CC: .word 0x000002EE +_022149D0: .word 0x02216738 +_022149D4: .word 0x02216E40 +_022149D8: .word 0x02216E84 +_022149DC: .word 0x0000030D +_022149E0: .word 0x02216E94 +	arm_func_end MOD79_022147E8 + +	arm_func_start MOD79_022149E4 +MOD79_022149E4: ; 0x022149E4 +	stmdb sp!, {r4, r5, r6, lr} +	mov r6, r0 +	ldr r0, [r6, #0x140] +	cmp r0, #0 +	beq _02214A38 +	bl MOD04_021EF06C +	mov r4, r0 +	cmp r4, #0 +	mov r5, #0 +	ble _02214A28 +_02214A0C: +	ldr r0, [r6, #0x140] +	mov r1, r5 +	bl MOD04_021EEFFC +	bl MOD79_02214BF4 +	add r5, r5, #1 +	cmp r5, r4 +	blt _02214A0C +_02214A28: +	ldr r0, [r6, #0x140] +	bl MOD04_021EF074 +	mov r0, #0 +	str r0, [r6, #0x140] +_02214A38: +	ldr r0, [r6, #0x13c] +	cmp r0, #0 +	ldmeqia sp!, {r4, r5, r6, pc} +	ldr r1, [r0, #0x10] +	cmp r1, #0 +	ldmeqia sp!, {r4, r5, r6, pc} +	bl MOD79_02215058 +	mov r0, #0 +	str r0, [r6, #0x13c] +	ldmia sp!, {r4, r5, r6, pc} +	arm_func_end MOD79_022149E4 + +	arm_func_start MOD79_02214A60 +MOD79_02214A60: ; 0x02214A60 +	stmdb sp!, {r4, r5, r6, r7, r8, lr} +	sub sp, sp, #0x10 +	mov r4, r0 +	ldr r0, [r4, #0x13c] +	cmp r0, #0 +	bne _02214A8C +	ldr r0, _02214BE4 ; =0x02216AE8 +	ldr r1, _02214BE8 ; =0x02216ADC +	mov r2, #0 +	mov r3, #0x278 +	bl __msl_assertion_failed +_02214A8C: +	ldr r0, [r4, #0x13c] +	cmp r0, #0 +	addeq sp, sp, #0x10 +	moveq r0, #0 +	ldmeqia sp!, {r4, r5, r6, r7, r8, pc} +	mov r0, #0 +	str r0, [r4, #0x144] +	str r0, [r4, #0x148] +	str r0, [r4, #0x14c] +	ldr r0, [r4, #0x13c] +	ldr r0, [r0, #4] +	str r0, [r4, #0x150] +	ldr r0, [r4, #0x13c] +	ldr r0, [r0, #8] +	str r0, [r4, #0x154] +	ldr r0, [r4, #0x13c] +	ldr r0, [r0] +	bl MOD04_021EF06C +	mov r7, r0 +	mov r1, r7 +	mov r0, #0x10 +	mov r2, #0 +	bl MOD04_021EF0E4 +	str r0, [r4, #0x140] +	ldr r0, [r4, #0x140] +	cmp r0, #0 +	addeq sp, sp, #0x10 +	moveq r0, #0 +	ldmeqia sp!, {r4, r5, r6, r7, r8, pc} +	cmp r7, #0 +	mov r8, #0 +	ble _02214B98 +	add r6, sp, #0 +	mov r5, r8 +_02214B14: +	ldr r0, [r4, #0x13c] +	mov r1, r8 +	ldr r0, [r0] +	bl MOD04_021EEFFC +	str r5, [r6] +	str r5, [r6, #4] +	str r5, [r6, #8] +	str r5, [r6, #0xc] +	str r0, [sp] +	mov r0, r6 +	bl MOD79_02214C5C +	cmp r0, #0 +	bne _02214B80 +	subs r8, r8, #1 +	bmi _02214B68 +_02214B50: +	ldr r0, [r4, #0x140] +	mov r1, r8 +	bl MOD04_021EEFFC +	bl MOD79_02214BF4 +	subs r8, r8, #1 +	bpl _02214B50 +_02214B68: +	ldr r0, [r4, #0x140] +	bl MOD04_021EF074 +	mov r0, #0 +	add sp, sp, #0x10 +	str r0, [r4, #0x140] +	ldmia sp!, {r4, r5, r6, r7, r8, pc} +_02214B80: +	ldr r0, [r4, #0x140] +	mov r1, r6 +	bl MOD04_021EEFA8 +	add r8, r8, #1 +	cmp r8, r7 +	blt _02214B14 +_02214B98: +	ldr r0, [r4, #0x13c] +	ldr r0, [r0] +	bl MOD04_021EF06C +	mov r5, r0 +	ldr r0, [r4, #0x140] +	bl MOD04_021EF06C +	cmp r5, r0 +	beq _02214BCC +	ldr r0, _02214BEC ; =0x02216B1C +	ldr r1, _02214BE8 ; =0x02216ADC +	ldr r3, _02214BF0 ; =0x000002B1 +	mov r2, #0 +	bl __msl_assertion_failed +_02214BCC: +	mov r0, r4 +	bl MOD79_02214D0C +	str r0, [r4, #0x14c] +	mov r0, #1 +	add sp, sp, #0x10 +	ldmia sp!, {r4, r5, r6, r7, r8, pc} +	.align 2, 0 +_02214BE4: .word 0x02216AE8 +_02214BE8: .word 0x02216ADC +_02214BEC: .word 0x02216B1C +_02214BF0: .word 0x000002B1 +	arm_func_end MOD79_02214A60 + +	arm_func_start MOD79_02214BF4 +MOD79_02214BF4: ; 0x02214BF4 +	stmdb sp!, {r4, lr} +	mov r4, r0 +	ldr r0, [r4] +	ldr r0, [r0] +	cmp r0, #0 +	ldmeqia sp!, {r4, pc} +	cmp r0, #1 +	bne _02214C30 +	ldr r0, [r4, #8] +	cmp r0, #0 +	beq _02214C24 +	bl fclose +_02214C24: +	mov r0, #0 +	str r0, [r4, #8] +	ldmia sp!, {r4, pc} +_02214C30: +	cmp r0, #2 +	ldmeqia sp!, {r4, pc} +	ldr r0, _02214C50 ; =0x02216D4C +	ldr r1, _02214C54 ; =0x02216ADC +	ldr r3, _02214C58 ; =0x00000269 +	mov r2, #0 +	bl __msl_assertion_failed +	ldmia sp!, {r4, pc} +	.align 2, 0 +_02214C50: .word 0x02216D4C +_02214C54: .word 0x02216ADC +_02214C58: .word 0x00000269 +	arm_func_end MOD79_02214BF4 + +	arm_func_start MOD79_02214C5C +MOD79_02214C5C: ; 0x02214C5C +	stmdb sp!, {r4, lr} +	mov r4, r0 +	ldr r1, [r4] +	mvn r0, #0 +	ldr r1, [r1] +	str r0, [r4, #4] +	cmp r1, #0 +	beq _02214CFC +	cmp r1, #1 +	bne _02214CD8 +	ldr r0, [r4, #8] +	cmp r0, #0 +	moveq r0, #0 +	ldmeqia sp!, {r4, pc} +	mov r1, #0 +	mov r2, #2 +	bl fseek +	cmp r0, #0 +	movne r0, #0 +	ldmneia sp!, {r4, pc} +	ldr r0, [r4, #8] +	bl ftell +	str r0, [r4, #0xc] +	ldr r1, [r4, #0xc] +	mvn r0, #0 +	cmp r1, r0 +	moveq r0, #0 +	ldmeqia sp!, {r4, pc} +	ldr r0, [r4, #8] +	bl rewind +	b _02214CFC +_02214CD8: +	cmp r1, #2 +	beq _02214CFC +	ldr r0, _02214D04 ; =0x02216D4C +	ldr r1, _02214D08 ; =0x02216ADC +	mov r2, #0 +	mov r3, #0x244 +	bl __msl_assertion_failed +	mov r0, #0 +	ldmia sp!, {r4, pc} +_02214CFC: +	mov r0, #1 +	ldmia sp!, {r4, pc} +	.align 2, 0 +_02214D04: .word 0x02216D4C +_02214D08: .word 0x02216ADC +	arm_func_end MOD79_02214C5C + +	arm_func_start MOD79_02214D0C +MOD79_02214D0C: ; 0x02214D0C +	stmdb sp!, {r4, r5, lr} +	sub sp, sp, #4 +	mov r5, r0 +	ldr r4, [r5, #0x13c] +	cmp r4, #0 +	bne _02214D38 +	ldr r0, _02214D74 ; =0x02216EA8 +	ldr r1, _02214D78 ; =0x02216ADC +	mov r2, #0 +	mov r3, #0x20c +	bl __msl_assertion_failed +_02214D38: +	cmp r4, #0 +	addeq sp, sp, #4 +	moveq r0, #0 +	ldmeqia sp!, {r4, r5, pc} +	ldr r0, [r4, #0xc] +	cmp r0, #0 +	beq _02214D64 +	mov r0, r5 +	bl MOD79_02214D7C +	add sp, sp, #4 +	ldmia sp!, {r4, r5, pc} +_02214D64: +	mov r0, r5 +	bl MOD79_02214F48 +	add sp, sp, #4 +	ldmia sp!, {r4, r5, pc} +	.align 2, 0 +_02214D74: .word 0x02216EA8 +_02214D78: .word 0x02216ADC +	arm_func_end MOD79_02214D0C + +	arm_func_start MOD79_02214D7C +MOD79_02214D7C: ; 0x02214D7C +	stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} +	sub sp, sp, #4 +	ldr r1, _02214F24 ; =0x0221714C +	mov r8, r0 +	ldr r0, [r1] +	ldr r7, [r8, #0x13c] +	cmp r0, #0 +	mov r4, #0 +	bne _02214DD4 +	ldr r0, _02214F28 ; =0x02216EB0 +	bl strlen +	ldr r5, _02214F24 ; =0x0221714C +	ldr r3, _02214F2C ; =0x02217148 +	add sl, r0, #0x2f +	ldr r2, _02214F30 ; =0x02217144 +	add sb, r0, #0x4c +	ldr r1, _02214F34 ; =0x02217140 +	add r6, r0, #4 +	str r0, [r5] +	str sl, [r3] +	str sb, [r2] +	str r6, [r1] +_02214DD4: +	ldr r0, [r7] +	bl MOD04_021EF06C +	mov r5, r0 +	cmp r5, #0 +	mov r6, #0 +	ble _02214F10 +	mov fp, r6 +	mov sb, #0x1ec +_02214DF4: +	ldr r0, [r7] +	mov r1, r6 +	bl MOD04_021EEFFC +	mov sl, r0 +	ldr r0, [sl] +	cmp r0, #0 +	bne _02214E34 +	ldr r0, _02214F2C ; =0x02217148 +	ldr r1, [r0] +	ldr r0, [sl, #4] +	add r4, r4, r1 +	bl strlen +	add r1, r4, r0 +	ldr r0, [sl, #0xc] +	add r4, r1, r0 +	b _02214F04 +_02214E34: +	cmp r0, #1 +	bne _02214EA0 +	ldr r0, _02214F30 ; =0x02217144 +	ldr r1, [r0] +	ldr r0, [sl, #4] +	add r4, r4, r1 +	bl strlen +	add r4, r4, r0 +	ldr r0, [sl, #0xc] +	bl strlen +	add r4, r4, r0 +	ldr r0, [sl, #0x10] +	bl strlen +	add r4, r4, r0 +	ldr r0, [r8, #0x140] +	mov r1, r6 +	bl MOD04_021EEFFC +	movs sl, r0 +	bne _02214E94 +	ldr r0, _02214F38 ; =0x02216ED8 +	ldr r1, _02214F3C ; =0x02216ADC +	mov r2, fp +	mov r3, sb +	bl __msl_assertion_failed +_02214E94: +	ldr r0, [sl, #0xc] +	add r4, r4, r0 +	b _02214F04 +_02214EA0: +	cmp r0, #2 +	bne _02214EE4 +	ldr r0, _02214F30 ; =0x02217144 +	ldr r1, [r0] +	ldr r0, [sl, #4] +	add r4, r4, r1 +	bl strlen +	add r4, r4, r0 +	ldr r0, [sl, #0x10] +	bl strlen +	add r4, r4, r0 +	ldr r0, [sl, #0x14] +	bl strlen +	add r1, r4, r0 +	ldr r0, [sl, #0xc] +	add r4, r1, r0 +	b _02214F04 +_02214EE4: +	ldr r0, _02214F40 ; =0x02216D4C +	ldr r1, _02214F3C ; =0x02216ADC +	ldr r3, _02214F44 ; =0x000001F9 +	mov r2, #0 +	bl __msl_assertion_failed +	add sp, sp, #4 +	mov r0, #0 +	ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +_02214F04: +	add r6, r6, #1 +	cmp r6, r5 +	blt _02214DF4 +_02214F10: +	ldr r0, _02214F34 ; =0x02217140 +	ldr r0, [r0] +	add r0, r4, r0 +	add sp, sp, #4 +	ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +	.align 2, 0 +_02214F24: .word 0x0221714C +_02214F28: .word 0x02216EB0 +_02214F2C: .word 0x02217148 +_02214F30: .word 0x02217144 +_02214F34: .word 0x02217140 +_02214F38: .word 0x02216ED8 +_02214F3C: .word 0x02216ADC +_02214F40: .word 0x02216D4C +_02214F44: .word 0x000001F9 +	arm_func_end MOD79_02214D7C + +	arm_func_start MOD79_02214F48 +MOD79_02214F48: ; 0x02214F48 +	stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} +	sub sp, sp, #4 +	ldr sl, [r0, #0x13c] +	mov r6, #0 +	ldr r0, [sl] +	bl MOD04_021EF06C +	movs r7, r0 +	addeq sp, sp, #4 +	moveq r0, r6 +	ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +	cmp r7, #0 +	mov r8, r6 +	ble _02214FE4 +	ldr fp, _02214FF4 ; =0x02216EE0 +	mov r5, r8 +	mov r4, #0x1b0 +_02214F88: +	ldr r0, [sl] +	mov r1, r8 +	bl MOD04_021EEFFC +	mov sb, r0 +	ldr r0, [sb] +	cmp r0, #0 +	beq _02214FB8 +	ldr r1, _02214FF8 ; =0x02216ADC +	mov r0, fp +	mov r2, r5 +	mov r3, r4 +	bl __msl_assertion_failed +_02214FB8: +	ldr r0, [sb, #4] +	bl strlen +	add r8, r8, #1 +	ldr r1, [sb, #0xc] +	add r2, r6, r0 +	ldr r0, [sb, #0x14] +	add r1, r2, r1 +	add r0, r1, r0, lsl #1 +	cmp r8, r7 +	add r6, r0, #1 +	blt _02214F88 +_02214FE4: +	sub r0, r7, #1 +	add r0, r6, r0 +	add sp, sp, #4 +	ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +	.align 2, 0 +_02214FF4: .word 0x02216EE0 +_02214FF8: .word 0x02216ADC +	arm_func_end MOD79_02214F48 + +	arm_func_start MOD79_02214FFC +MOD79_02214FFC: ; 0x02214FFC +	stmdb sp!, {r4, lr} +	ldr r4, [r0, #0x13c] +	cmp r4, #0 +	bne _02215020 +	ldr r0, _02215040 ; =0x02216EA8 +	ldr r1, _02215044 ; =0x02216ADC +	ldr r3, _02215048 ; =0x00000192 +	mov r2, #0 +	bl __msl_assertion_failed +_02215020: +	cmp r4, #0 +	ldreq r0, _0221504C ; =0x02216EF8 +	ldmeqia sp!, {r4, pc} +	ldr r0, [r4, #0xc] +	cmp r0, #0 +	ldrne r0, _02215050 ; =0x02216EFC +	ldreq r0, _02215054 ; =0x02216F40 +	ldmia sp!, {r4, pc} +	.align 2, 0 +_02215040: .word 0x02216EA8 +_02215044: .word 0x02216ADC +_02215048: .word 0x00000192 +_0221504C: .word 0x02216EF8 +_02215050: .word 0x02216EFC +_02215054: .word 0x02216F40 +	arm_func_end MOD79_02214FFC + +	arm_func_start MOD79_02215058 +MOD79_02215058: ; 0x02215058 +	stmdb sp!, {r4, lr} +	mov r4, r0 +	ldr r0, [r4] +	bl MOD04_021EF074 +	mov r0, r4 +	bl MOD04_021DD82C +	ldmia sp!, {r4, pc} +	arm_func_end MOD79_02215058 + +	arm_func_start MOD79_02215074 +MOD79_02215074: ; 0x02215074 +	ldr r0, [r0, #0x10] +	bx lr +	arm_func_end MOD79_02215074 + +	arm_func_start MOD79_0221507C +MOD79_0221507C: ; 0x0221507C +	stmdb sp!, {r4, r5, r6, r7, r8, lr} +	ldr ip, _02215170 ; =0x00002008 +	sub sp, sp, ip +	mov r5, r0 +	bl MOD04_021F025C +	mov r4, r0 +	mov r1, #0 +	mov r8, #0x2000 +	add r7, sp, #4 +	add r6, sp, #0 +	b _02215144 +_022150A8: +	mov r0, r5 +	mov r1, r7 +	mov r2, r6 +	str r8, [sp] +	bl MOD79_02212FF0 +	cmp r0, #3 +	ldreq ip, _02215170 ; =0x00002008 +	addeq sp, sp, ip +	ldmeqia sp!, {r4, r5, r6, r7, r8, pc} +	cmp r0, #1 +	ldreq ip, _02215170 ; =0x00002008 +	addeq sp, sp, ip +	ldmeqia sp!, {r4, r5, r6, r7, r8, pc} +	cmp r0, #2 +	bne _0221511C +	mov r0, #1 +	str r0, [r5, #0xfc] +	ldr r1, [r5, #0x104] +	cmp r1, #0 +	ldrle ip, _02215170 ; =0x00002008 +	addle sp, sp, ip +	ldmleia sp!, {r4, r5, r6, r7, r8, pc} +	ldr r0, [r5, #0x100] +	ldr ip, _02215170 ; =0x00002008 +	cmp r0, r1 +	movlt r0, #0xf +	add sp, sp, ip +	strlt r0, [r5, #0x38] +	ldmia sp!, {r4, r5, r6, r7, r8, pc} +_0221511C: +	ldr r2, [sp] +	mov r0, r5 +	mov r1, r7 +	bl MOD79_02215640 +	cmp r0, #0 +	ldreq ip, _02215170 ; =0x00002008 +	addeq sp, sp, ip +	ldmeqia sp!, {r4, r5, r6, r7, r8, pc} +	bl MOD04_021F025C +	sub r1, r0, r4 +_02215144: +	ldr r0, [r5, #0xfc] +	cmp r0, #0 +	ldrne ip, _02215170 ; =0x00002008 +	addne sp, sp, ip +	ldmneia sp!, {r4, r5, r6, r7, r8, pc} +	ldr r0, [r5, #0x158] +	cmp r1, r0 +	blo _022150A8 +	ldr ip, _02215170 ; =0x00002008 +	add sp, sp, ip +	ldmia sp!, {r4, r5, r6, r7, r8, pc} +	.align 2, 0 +_02215170: .word 0x00002008 +	arm_func_end MOD79_0221507C + +	arm_func_start MOD79_02215174 +MOD79_02215174: ; 0x02215174 +	stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} +	ldr ip, _02215618 ; =0x00001018 +	sub sp, sp, ip +	mov r3, #0x1000 +	add r1, sp, #0x13 +	add r2, sp, #4 +	mov r6, r0 +	str r3, [sp, #4] +	bl MOD79_02212FF0 +	mov r4, r0 +	cmp r4, #3 +	ldreq ip, _02215618 ; =0x00001018 +	addeq sp, sp, ip +	ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} +	cmp r4, #1 +	bne _022151CC +	ldr r1, [r6, #0x84] +	ldr r0, [r6, #0x80] +	cmp r1, r0 +	ldreq ip, _02215618 ; =0x00001018 +	addeq sp, sp, ip +	ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} +_022151CC: +	cmp r4, #0 +	bne _022151F4 +	ldr r2, [sp, #4] +	add r1, sp, #0x13 +	add r0, r6, #0x74 +	bl MOD79_02212794 +	cmp r0, #0 +	ldreq ip, _02215618 ; =0x00001018 +	addeq sp, sp, ip +	ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} +_022151F4: +	ldr r2, [r6, #0x84] +	ldr r0, [r6, #0x78] +	ldr r1, _0221561C ; =0x02216F64 +	add r5, r0, r2 +	mov r0, r5 +	str r2, [r6, #0xf4] +	bl strstr +	cmp r0, #0 +	bne _02215224 +	ldr r1, _02215620 ; =0x02216F6C +	mov r0, r5 +	bl strstr +_02215224: +	cmp r0, #0 +	beq _022155E0 +	mov r1, #0 +	strb r1, [r0, #2] +	ldr r7, [r6, #0x78] +	add r3, r0, #2 +	ldr r1, [r6, #0x80] +	sub r2, r3, r7 +	str r2, [r6, #0x80] +	ldr r2, [r6, #0x78] +	add r4, r0, #4 +	sub r0, r3, r2 +	str r0, [r6, #0xf8] +	ldr r0, [r6, #0xf8] +	sub r8, r4, r7 +	str r0, [r6, #0x84] +	ldr r2, [r6, #0xec] +	ldr r3, _02215624 ; =0x51EB851F +	mov r0, r2, lsr #0x1f +	smull r2, r7, r3, r2 +	mov r7, r7, asr #5 +	add r7, r0, r7 +	cmp r7, #1 +	sub sl, r1, r8 +	bne _022152DC +	cmp sl, #0 +	beq _022152B0 +	ldr r0, [r6, #0x78] +	mov r1, r4 +	add r2, sl, #1 +	bl memmove +	str sl, [r6, #0x80] +	mov r0, #0 +	str r0, [r6, #0x84] +	b _022152B8 +_022152B0: +	add r0, r6, #0x74 +	bl MOD79_0221262C +_022152B8: +	mov r1, #0 +	mov r3, #6 +	mov r0, r6 +	mov r2, r1 +	str r3, [r6, #0x10] +	bl MOD79_02212E00 +	ldr ip, _02215618 ; =0x00001018 +	add sp, sp, ip +	ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} +_022152DC: +	cmp r7, #3 +	bne _02215448 +	ldr r0, [r6, #0x10c] +	cmp r0, #0xa +	ldrgt ip, _02215618 ; =0x00001018 +	movgt r0, #1 +	strgt r0, [r6, #0xfc] +	movgt r0, #0xb +	addgt sp, sp, ip +	strgt r0, [r6, #0x38] +	ldmgtia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} +	ldr r1, _02215628 ; =0x02216F70 +	mov r0, r5 +	bl strstr +	cmp r0, #0 +	beq _02215448 +	add r4, r0, #9 +	ldr r1, _0221562C ; =0x0210430C +	mov r2, #0 +	b _02215330 +_0221532C: +	add r4, r4, #1 +_02215330: +	ldrsb r0, [r4] +	cmp r0, #0 +	blt _02215344 +	cmp r0, #0x80 +	blt _0221534C +_02215344: +	mov r0, r2 +	b _02215358 +_0221534C: +	mov r0, r0, lsl #1 +	ldrh r0, [r1, r0] +	and r0, r0, #0x100 +_02215358: +	cmp r0, #0 +	bne _0221532C +	mov r3, r4 +	ldr r1, _0221562C ; =0x0210430C +	mov r2, #0 +	b _02215374 +_02215370: +	add r3, r3, #1 +_02215374: +	ldrsb r0, [r3] +	cmp r0, #0 +	beq _022153AC +	cmp r0, #0 +	blt _02215390 +	cmp r0, #0x80 +	blt _02215398 +_02215390: +	mov r0, r2 +	b _022153A4 +_02215398: +	mov r0, r0, lsl #1 +	ldrh r0, [r1, r0] +	and r0, r0, #0x100 +_022153A4: +	cmp r0, #0 +	beq _02215370 +_022153AC: +	mov r0, #0 +	strb r0, [r3] +	ldrsb r0, [r4] +	cmp r0, #0x2f +	bne _0221541C +	ldr r0, [r6, #0x18] +	bl strlen +	mov r5, r0 +	mov r0, r4 +	bl strlen +	add r1, r5, #0xe +	add r0, r1, r0 +	bl MOD04_021DD860 +	str r0, [r6, #0x108] +	ldr r0, [r6, #0x108] +	ldr r1, _02215630 ; =0x02216F7C +	cmp r0, #0 +	moveq r0, #1 +	streq r0, [r6, #0xfc] +	streq r0, [r6, #0x38] +	str r4, [sp] +	ldrh r3, [r6, #0x20] +	ldr r0, [r6, #0x108] +	ldr r2, [r6, #0x18] +	bl sprintf +	ldr ip, _02215618 ; =0x00001018 +	add sp, sp, ip +	ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} +_0221541C: +	mov r0, r4 +	bl MOD04_021F0208 +	str r0, [r6, #0x108] +	ldr r0, [r6, #0x108] +	ldr ip, _02215618 ; =0x00001018 +	cmp r0, #0 +	moveq r0, #1 +	streq r0, [r6, #0xfc] +	add sp, sp, ip +	streq r0, [r6, #0x38] +	ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} +_02215448: +	ldr r1, _02215634 ; =0x02216F8C +	mov r0, r5 +	bl strstr +	movs sb, r0 +	beq _02215530 +	ldr r7, _02215638 ; =0x0221673C +	add r3, sp, #8 +	mov r2, #5 +_02215468: +	ldrb r1, [r7], #1 +	ldrb r0, [r7], #1 +	subs r2, r2, #1 +	strb r1, [r3], #1 +	strb r0, [r3], #1 +	bne _02215468 +	ldrb r1, [r7] +	add r8, sb, #0x10 +	add r0, sp, #8 +	mov r7, r8 +	strb r1, [r3] +	bl strlen +	b _022154A0 +_0221549C: +	add r7, r7, #1 +_022154A0: +	cmp r7, #0 +	beq _022154CC +	ldrsb r1, [r7] +	cmp r1, #0 +	beq _022154CC +	cmp r1, #0xa +	beq _022154CC +	cmp r1, #0xd +	beq _022154CC +	cmp r1, #0x20 +	bne _0221549C +_022154CC: +	sub r2, r7, r8 +	cmp r2, r0 +	ldrgt ip, _02215618 ; =0x00001018 +	movgt r0, #1 +	strgt r0, [r6, #0xfc] +	movgt r0, #0x10 +	addgt sp, sp, ip +	strgt r0, [r6, #0x38] +	ldmgtia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} +	cmp r0, r2 +	bne _02215524 +	add r1, sp, #8 +	mov r0, r8 +	bl strncmp +	cmp r0, #0 +	ldrge ip, _02215618 ; =0x00001018 +	movge r0, #1 +	strge r0, [r6, #0xfc] +	movge r0, #0x10 +	addge sp, sp, ip +	strge r0, [r6, #0x38] +	ldmgeia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} +_02215524: +	mov r0, r8 +	bl atol +	str r0, [r6, #0x104] +_02215530: +	ldr r1, _0221563C ; =0x02216F9C +	mov r0, r5 +	bl strstr +	cmp r0, #0 +	movne r0, #1 +	moveq r0, #0 +	str r0, [r6, #0x110] +	ldr r0, [r6, #0x110] +	cmp r0, #0 +	movne r0, #0 +	strneb r0, [r6, #0x114] +	strne r0, [r6, #0x120] +	strne r0, [r6, #0x124] +	strne r0, [r6, #0x128] +	ldr r0, [r6, #0xc] +	sub r0, r0, #3 +	cmp r0, #1 +	ldrls ip, _02215618 ; =0x00001018 +	movls r0, #1 +	addls sp, sp, ip +	strls r0, [r6, #0xfc] +	ldmlsia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} +	mov r0, #8 +	str r0, [r6, #0x10] +	cmp sb, #0 +	beq _022155B4 +	ldr r0, [r6, #0x104] +	cmp r0, #0 +	ldreq ip, _02215618 ; =0x00001018 +	moveq r0, #1 +	addeq sp, sp, ip +	streq r0, [r6, #0xfc] +	ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} +_022155B4: +	cmp sl, #0 +	ldrle ip, _02215618 ; =0x00001018 +	addle sp, sp, ip +	ldmleia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} +	mov r0, r6 +	mov r1, r4 +	mov r2, sl +	bl MOD79_02215640 +	ldr ip, _02215618 ; =0x00001018 +	add sp, sp, ip +	ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} +_022155E0: +	cmp r4, #2 +	ldrne ip, _02215618 ; =0x00001018 +	addne sp, sp, ip +	ldmneia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} +	mov r0, #1 +	str r0, [r6, #0xfc] +	mov r0, #7 +	str r0, [r6, #0x38] +	ldr r0, [r6, #0x48] +	bl MOD04_021EFB28 +	str r0, [r6, #0x4c] +	ldr ip, _02215618 ; =0x00001018 +	add sp, sp, ip +	ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} +	.align 2, 0 +_02215618: .word 0x00001018 +_0221561C: .word 0x02216F64 +_02215620: .word 0x02216F6C +_02215624: .word 0x51EB851F +_02215628: .word 0x02216F70 +_0221562C: .word 0x0210430C +_02215630: .word 0x02216F7C +_02215634: .word 0x02216F8C +_02215638: .word 0x0221673C +_0221563C: .word 0x02216F9C +	arm_func_end MOD79_02215174 + +	arm_func_start MOD79_02215640 +MOD79_02215640: ; 0x02215640 +	stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} +	sub sp, sp, #0xc +	movs r6, r0 +	mov r5, r1 +	mov r4, r2 +	bne _0221566C +	ldr r0, _02215884 ; =0x02216FB8 +	ldr r1, _02215888 ; =0x02216FC4 +	ldr r3, _0221588C ; =0x0000035D +	mov r2, #0 +	bl __msl_assertion_failed +_0221566C: +	cmp r5, #0 +	bne _02215688 +	ldr r0, _02215890 ; =0x02216FD4 +	ldr r1, _02215888 ; =0x02216FC4 +	ldr r3, _02215894 ; =0x0000035E +	mov r2, #0 +	bl __msl_assertion_failed +_02215688: +	cmp r4, #0 +	bgt _022156A4 +	ldr r0, _02215898 ; =0x02216FDC +	ldr r1, _02215888 ; =0x02216FC4 +	ldr r3, _0221589C ; =0x0000035F +	mov r2, #0 +	bl __msl_assertion_failed +_022156A4: +	ldr r0, [r6, #0x110] +	cmp r0, #0 +	beq _0221586C +	cmp r4, #0 +	ble _02215860 +	mov r0, #2 +	str r0, [sp, #4] +	mov r0, #1 +	add r8, r6, #0x124 +	mov sl, #0xa +	mov r7, #0 +	str r0, [sp] +	mov fp, #3 +_022156D8: +	ldr r0, [r6, #0x128] +	cmp r0, #0 +	bne _02215780 +	mov r0, r5 +	mov r1, sl +	bl strchr +	movs sb, r0 +	beq _02215764 +	mov r0, r6 +	mov r1, r5 +	sub r2, sb, r5 +	bl MOD79_022158A8 +	add r1, sb, #1 +	sub r2, r1, r5 +	mov r0, r6 +	mov r5, r1 +	sub r4, r4, r2 +	bl MOD79_02215984 +	str r0, [r6, #0x124] +	ldr r1, [r6, #0x124] +	mvn r0, #0 +	cmp r1, r0 +	bne _02215750 +	mov r0, #1 +	str r0, [r6, #0xfc] +	mov r0, #7 +	str r0, [r6, #0x38] +	add sp, sp, #0xc +	mov r0, #0 +	ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +_02215750: +	cmp r1, #0 +	ldrne r0, [sp] +	streq fp, [r6, #0x128] +	strne r0, [r6, #0x128] +	b _02215858 +_02215764: +	mov r0, r6 +	mov r1, r5 +	mov r2, r4 +	bl MOD79_022158A8 +	add sp, sp, #0xc +	mov r0, #1 +	ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +_02215780: +	cmp r0, #1 +	bne _022157DC +	ldr sb, [r6, #0x124] +	mov r0, r6 +	cmp sb, r4 +	movge sb, r4 +	mov r1, r5 +	mov r2, sb +	bl MOD79_022159E4 +	cmp r0, #0 +	addeq sp, sp, #0xc +	moveq r0, #0 +	ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +	ldr r0, [r8] +	add r5, r5, sb +	sub r0, r0, sb +	str r0, [r8] +	ldr r0, [r6, #0x124] +	sub r4, r4, sb +	cmp r0, #0 +	ldreq r0, [sp, #4] +	streq r0, [r6, #0x128] +	b _02215858 +_022157DC: +	cmp r0, #2 +	bne _02215824 +	mov r0, r5 +	mov r1, sl +	bl strchr +	cmp r0, #0 +	addeq sp, sp, #0xc +	moveq r0, #1 +	ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +	strb r7, [r6, #0x114] +	str r7, [r6, #0x120] +	add r0, r0, #1 +	sub r1, r0, r5 +	str r7, [r6, #0x124] +	mov r5, r0 +	str r7, [r6, #0x128] +	sub r4, r4, r1 +	b _02215858 +_02215824: +	cmp r0, #3 +	moveq r0, #1 +	addeq sp, sp, #0xc +	streq r0, [r6, #0xfc] +	ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +	ldr r0, _022158A0 ; =0x02216FE4 +	ldr r1, _02215888 ; =0x02216FC4 +	ldr r3, _022158A4 ; =0x000003E3 +	mov r2, #0 +	bl __msl_assertion_failed +	add sp, sp, #0xc +	mov r0, #0 +	ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +_02215858: +	cmp r4, #0 +	bgt _022156D8 +_02215860: +	add sp, sp, #0xc +	mov r0, #1 +	ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +_0221586C: +	mov r0, r6 +	mov r1, r5 +	mov r2, r4 +	bl MOD79_022159E4 +	add sp, sp, #0xc +	ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +	.align 2, 0 +_02215884: .word 0x02216FB8 +_02215888: .word 0x02216FC4 +_0221588C: .word 0x0000035D +_02215890: .word 0x02216FD4 +_02215894: .word 0x0000035E +_02215898: .word 0x02216FDC +_0221589C: .word 0x0000035F +_022158A0: .word 0x02216FE4 +_022158A4: .word 0x000003E3 +	arm_func_end MOD79_02215640 + +	arm_func_start MOD79_022158A8 +MOD79_022158A8: ; 0x022158A8 +	stmdb sp!, {r4, r5, r6, r7, lr} +	sub sp, sp, #4 +	movs r4, r0 +	mov r7, r1 +	mov r6, r2 +	bne _022158D4 +	ldr r0, _0221596C ; =0x02216FB8 +	ldr r1, _02215970 ; =0x02216FC4 +	ldr r3, _02215974 ; =0x00000333 +	mov r2, #0 +	bl __msl_assertion_failed +_022158D4: +	cmp r7, #0 +	bne _022158F0 +	ldr r0, _02215978 ; =0x02216FD4 +	ldr r1, _02215970 ; =0x02216FC4 +	mov r2, #0 +	mov r3, #0x334 +	bl __msl_assertion_failed +_022158F0: +	cmp r6, #0 +	bge _0221590C +	ldr r0, _0221597C ; =0x02216FE8 +	ldr r1, _02215970 ; =0x02216FC4 +	ldr r3, _02215980 ; =0x00000335 +	mov r2, #0 +	bl __msl_assertion_failed +_0221590C: +	cmp r6, #0 +	addeq sp, sp, #4 +	ldmeqia sp!, {r4, r5, r6, r7, pc} +	ldr r3, [r4, #0x120] +	cmp r3, #0xa +	addge sp, sp, #4 +	ldmgeia sp!, {r4, r5, r6, r7, pc} +	rsb r5, r3, #0xa +	cmp r5, r6 +	movge r5, r6 +	add r0, r4, #0x114 +	mov r1, r7 +	mov r2, r5 +	add r0, r0, r3 +	bl memcpy +	ldr r0, [r4, #0x120] +	mov r1, #0 +	add r0, r0, r5 +	str r0, [r4, #0x120] +	ldr r0, [r4, #0x120] +	add r0, r4, r0 +	strb r1, [r0, #0x114] +	add sp, sp, #4 +	ldmia sp!, {r4, r5, r6, r7, pc} +	.align 2, 0 +_0221596C: .word 0x02216FB8 +_02215970: .word 0x02216FC4 +_02215974: .word 0x00000333 +_02215978: .word 0x02216FD4 +_0221597C: .word 0x02216FE8 +_02215980: .word 0x00000335 +	arm_func_end MOD79_022158A8 + +	arm_func_start MOD79_02215984 +MOD79_02215984: ; 0x02215984 +	stmdb sp!, {r4, lr} +	sub sp, sp, #8 +	ldr r1, [r0, #0x120] +	add r4, r0, #0x114 +	cmp r1, #0 +	bne _022159B0 +	ldr r0, _022159D4 ; =0x02216FF4 +	ldr r1, _022159D8 ; =0x02216FC4 +	ldr r3, _022159DC ; =0x00000321 +	mov r2, #0 +	bl __msl_assertion_failed +_022159B0: +	ldr r1, _022159E0 ; =0x02216FF8 +	add r2, sp, #0 +	mov r0, r4 +	bl sscanf +	cmp r0, #1 +	mvnne r0, #0 +	ldreq r0, [sp] +	add sp, sp, #8 +	ldmia sp!, {r4, pc} +	.align 2, 0 +_022159D4: .word 0x02216FF4 +_022159D8: .word 0x02216FC4 +_022159DC: .word 0x00000321 +_022159E0: .word 0x02216FF8 +	arm_func_end MOD79_02215984 + +	arm_func_start MOD79_022159E4 +MOD79_022159E4: ; 0x022159E4 +	stmdb sp!, {r4, lr} +	mov r4, r0 +	ldr r0, [r4, #0x100] +	mov lr, #0 +	add r0, r0, r2 +	str r0, [r4, #0x100] +	ldr r3, [r4, #0x100] +	ldr r0, [r4, #0x104] +	mov ip, lr +	cmp r3, r0 +	beq _02215A1C +	ldr r0, [r4, #0x130] +	cmp r0, #0 +	beq _02215A24 +_02215A1C: +	mov r0, #1 +	str r0, [r4, #0xfc] +_02215A24: +	ldr r0, [r4, #0xc] +	cmp r0, #0 +	bne _02215A50 +	add r0, r4, #0xbc +	bl MOD79_02212794 +	cmp r0, #0 +	moveq r0, #0 +	ldmeqia sp!, {r4, pc} +	ldr lr, [r4, #0xc0] +	ldr ip, [r4, #0xc8] +	b _02215A90 +_02215A50: +	cmp r0, #1 +	bne _02215A84 +	cmp r2, #0 +	beq _02215A78 +	mov r0, #1 +	str r0, [r4, #0xfc] +	mov r0, #0xd +	str r0, [r4, #0x38] +	mov r0, #0 +	ldmia sp!, {r4, pc} +_02215A78: +	mov lr, r1 +	mov ip, r2 +	b _02215A90 +_02215A84: +	cmp r0, #2 +	moveq lr, r1 +	moveq ip, r2 +_02215A90: +	mov r0, r4 +	mov r1, lr +	mov r2, ip +	bl MOD79_02212E00 +	mov r0, #1 +	ldmia sp!, {r4, pc} +	arm_func_end MOD79_022159E4 + +	arm_func_start MOD79_02215AA8 +MOD79_02215AA8: ; 0x02215AA8 +	stmdb sp!, {r4, r5, lr} +	ldr ip, _02215BD0 ; =0x00000404 +	sub sp, sp, ip +	mov r3, #0x400 +	add r1, sp, #4 +	add r2, sp, #0 +	mov r4, r0 +	str r3, [sp] +	bl MOD79_02212FF0 +	mov r5, r0 +	cmp r5, #3 +	ldreq ip, _02215BD0 ; =0x00000404 +	addeq sp, sp, ip +	ldmeqia sp!, {r4, r5, pc} +	cmp r5, #1 +	bne _02215B00 +	ldr r1, [r4, #0x84] +	ldr r0, [r4, #0x80] +	cmp r1, r0 +	ldreq ip, _02215BD0 ; =0x00000404 +	addeq sp, sp, ip +	ldmeqia sp!, {r4, r5, pc} +_02215B00: +	cmp r5, #0 +	bne _02215B28 +	ldr r2, [sp] +	add r1, sp, #4 +	add r0, r4, #0x74 +	bl MOD79_02212794 +	cmp r0, #0 +	ldreq ip, _02215BD0 ; =0x00000404 +	addeq sp, sp, ip +	ldmeqia sp!, {r4, r5, pc} +_02215B28: +	ldr r0, [r4, #0x78] +	ldr r1, _02215BD4 ; =0x02216FFC +	bl strstr +	cmp r0, #0 +	beq _02215B98 +	mov r1, #0 +	strb r1, [r0] +	ldr r1, [r4, #0x78] +	sub r5, r0, r1 +	add r1, r5, #1 +	mov r0, r4 +	str r1, [r4, #0xf8] +	bl MOD79_02215BD8 +	cmp r0, #0 +	ldreq ip, _02215BD0 ; =0x00000404 +	addeq sp, sp, ip +	ldmeqia sp!, {r4, r5, pc} +	add r3, r5, #2 +	mov r1, #0 +	str r3, [r4, #0x84] +	mov r3, #7 +	mov r0, r4 +	mov r2, r1 +	str r3, [r4, #0x10] +	bl MOD79_02212E00 +	ldr ip, _02215BD0 ; =0x00000404 +	add sp, sp, ip +	ldmia sp!, {r4, r5, pc} +_02215B98: +	cmp r5, #2 +	ldrne ip, _02215BD0 ; =0x00000404 +	addne sp, sp, ip +	ldmneia sp!, {r4, r5, pc} +	mov r0, #1 +	str r0, [r4, #0xfc] +	mov r0, #7 +	str r0, [r4, #0x38] +	ldr r0, [r4, #0x48] +	bl MOD04_021EFB28 +	str r0, [r4, #0x4c] +	ldr ip, _02215BD0 ; =0x00000404 +	add sp, sp, ip +	ldmia sp!, {r4, r5, pc} +	.align 2, 0 +_02215BD0: .word 0x00000404 +_02215BD4: .word 0x02216FFC +	arm_func_end MOD79_02215AA8 + +	arm_func_start MOD79_02215BD8 +MOD79_02215BD8: ; 0x02215BD8 +	stmdb sp!, {r4, lr} +	sub sp, sp, #0x18 +	movs r4, r0 +	bne _02215BFC +	ldr r0, _02215D0C ; =0x02216FB8 +	ldr r1, _02215D10 ; =0x02216FC4 +	ldr r3, _02215D14 ; =0x0000024E +	mov r2, #0 +	bl __msl_assertion_failed +_02215BFC: +	ldr r0, [r4, #0x80] +	cmp r0, #0 +	bgt _02215C1C +	ldr r0, _02215D18 ; =0x02217000 +	ldr r1, _02215D10 ; =0x02216FC4 +	ldr r3, _02215D1C ; =0x0000024F +	mov r2, #0 +	bl __msl_assertion_failed +_02215C1C: +	add r1, sp, #0x10 +	str r1, [sp] +	add r0, sp, #0x14 +	str r0, [sp, #4] +	ldr r0, [r4, #0x78] +	ldr r1, _02215D20 ; =0x02217020 +	add r2, sp, #8 +	add r3, sp, #0xc +	bl sscanf +	mov r3, #0 +	mov ip, #1 +	ldr r2, _02215D24 ; =0x0210430C +	b _02215C5C +_02215C50: +	ldr r1, [sp, #0x14] +	add r1, r1, #1 +	str r1, [sp, #0x14] +_02215C5C: +	ldr lr, [r4, #0x78] +	ldr r1, [sp, #0x14] +	ldrsb lr, [lr, r1] +	cmp lr, #0 +	beq _02215CA0 +	mov r1, ip +	cmp lr, #0 +	blt _02215C84 +	cmp lr, #0x80 +	movlt r1, r3 +_02215C84: +	cmp r1, #0 +	movne r1, r3 +	moveq r1, lr, lsl #1 +	ldreqh r1, [r2, r1] +	andeq r1, r1, #0x100 +	cmp r1, #0 +	bne _02215C50 +_02215CA0: +	cmp r0, #3 +	bne _02215CC8 +	ldr r1, [sp, #8] +	cmp r1, #1 +	blt _02215CC8 +	ldr r0, [sp, #0x10] +	cmp r0, #0x64 +	blt _02215CC8 +	cmp r0, #0x258 +	blt _02215CE4 +_02215CC8: +	mov r0, #1 +	str r0, [r4, #0xfc] +	mov r0, #7 +	str r0, [r4, #0x38] +	add sp, sp, #0x18 +	mov r0, #0 +	ldmia sp!, {r4, pc} +_02215CE4: +	str r1, [r4, #0xe4] +	ldr r1, [sp, #0xc] +	mov r0, #1 +	str r1, [r4, #0xe8] +	ldr r1, [sp, #0x10] +	str r1, [r4, #0xec] +	ldr r1, [sp, #0x14] +	str r1, [r4, #0xf0] +	add sp, sp, #0x18 +	ldmia sp!, {r4, pc} +	.align 2, 0 +_02215D0C: .word 0x02216FB8 +_02215D10: .word 0x02216FC4 +_02215D14: .word 0x0000024E +_02215D18: .word 0x02217000 +_02215D1C: .word 0x0000024F +_02215D20: .word 0x02217020 +_02215D24: .word 0x0210430C +	arm_func_end MOD79_02215BD8 + +	arm_func_start MOD79_02215D28 +MOD79_02215D28: ; 0x02215D28 +	stmdb sp!, {r4, lr} +	sub sp, sp, #8 +	mov r4, r0 +	mov r2, #0 +	ldr r0, [r4, #0x48] +	add r1, sp, #0 +	mov r3, r2 +	bl MOD04_021EFF5C +	mvn r1, #0 +	cmp r0, r1 +	bne _02215D78 +	mov r0, #1 +	str r0, [r4, #0xfc] +	mov r0, #5 +	str r0, [r4, #0x38] +	ldr r0, [r4, #0x48] +	bl MOD04_021EFB28 +	add sp, sp, #8 +	str r0, [r4, #0x4c] +	ldmia sp!, {r4, pc} +_02215D78: +	ldr r0, [sp] +	cmp r0, #0 +	addeq sp, sp, #8 +	ldmeqia sp!, {r4, pc} +	mov r1, #0 +	mov r3, #6 +	mov r0, r4 +	mov r2, r1 +	str r3, [r4, #0x10] +	bl MOD79_02212E00 +	add sp, sp, #8 +	ldmia sp!, {r4, pc} +	arm_func_end MOD79_02215D28 + +	arm_func_start MOD79_02215DA8 +MOD79_02215DA8: ; 0x02215DA8 +	stmdb sp!, {r4, r5, r6, lr} +	mov r6, r0 +	ldr r4, [r6, #0x148] +	bl MOD79_022140D4 +	movs r5, r0 +	bne _02215DF8 +	ldr r0, [r6, #0xfc] +	cmp r0, #0 +	beq _02215DD8 +	ldr r0, [r6, #0x38] +	cmp r0, #0 +	bne _02215DEC +_02215DD8: +	ldr r0, _02215E38 ; =0x02217030 +	ldr r1, _02215E3C ; =0x02216FC4 +	mov r2, #0 +	mov r3, #0x200 +	bl __msl_assertion_failed +_02215DEC: +	mov r0, r6 +	bl MOD79_022149E4 +	ldmia sp!, {r4, r5, r6, pc} +_02215DF8: +	ldr r0, [r6, #0x148] +	cmp r4, r0 +	beq _02215E0C +	mov r0, r6 +	bl MOD79_02212D90 +_02215E0C: +	cmp r5, #1 +	ldmneia sp!, {r4, r5, r6, pc} +	mov r0, r6 +	bl MOD79_022149E4 +	mov r1, #0 +	mov r3, #5 +	mov r0, r6 +	mov r2, r1 +	str r3, [r6, #0x10] +	bl MOD79_02212E00 +	ldmia sp!, {r4, r5, r6, pc} +	.align 2, 0 +_02215E38: .word 0x02217030 +_02215E3C: .word 0x02216FC4 +	arm_func_end MOD79_02215DA8 + +	arm_func_start MOD79_02215E40 +MOD79_02215E40: ; 0x02215E40 +	stmdb sp!, {r4, r5, lr} +	sub sp, sp, #0x14 +	mov r5, r0 +	ldr r0, [r5, #0x5c] +	cmp r0, #0 +	bne _02216020 +	ldr r0, [r5, #0x13c] +	add r4, r5, #0x50 +	cmp r0, #0 +	ldrne r1, _02216080 ; =0x0221705C +	bne _02215E7C +	ldr r0, [r5, #0xc] +	cmp r0, #3 +	ldreq r1, _02216084 ; =0x02217064 +	ldrne r1, _02216088 ; =0x0221706C +_02215E7C: +	mov r0, r4 +	mov r2, #0 +	bl MOD79_02212794 +	ldr r0, [r5, #0x15c] +	cmp r0, #0 +	bne _02215EA4 +	ldr r0, _0221608C ; =0x02217128 +	ldr r0, [r0] +	cmp r0, #0 +	beq _02215EB8 +_02215EA4: +	ldr r1, [r5, #0x14] +	mov r0, r4 +	mov r2, #0 +	bl MOD79_02212794 +	b _02215EC8 +_02215EB8: +	ldr r1, [r5, #0x24] +	mov r0, r4 +	mov r2, #0 +	bl MOD79_02212794 +_02215EC8: +	ldr r1, _02216090 ; =0x02217074 +	mov r0, r4 +	mov r2, #0 +	bl MOD79_02212794 +	ldrh r0, [r5, #0x20] +	cmp r0, #0x50 +	bne _02215EF8 +	ldr r2, [r5, #0x18] +	ldr r1, _02216094 ; =0x02217080 +	mov r0, r4 +	bl MOD79_02212700 +	b _02215F40 +_02215EF8: +	ldr r1, _02216098 ; =0x02217088 +	mov r0, r4 +	mov r2, #0 +	bl MOD79_02212794 +	ldr r1, [r5, #0x18] +	mov r0, r4 +	mov r2, #0 +	bl MOD79_02212794 +	mov r0, r4 +	mov r1, #0x3a +	bl MOD79_022126A4 +	ldrh r1, [r5, #0x20] +	mov r0, r4 +	bl MOD79_0221266C +	mov r0, r4 +	ldr r1, _0221609C ; =0x02216FFC +	mov r2, #2 +	bl MOD79_02212794 +_02215F40: +	ldr r0, [r5, #0x28] +	cmp r0, #0 +	beq _02215F5C +	ldr r1, _022160A0 ; =0x02217090 +	bl strstr +	cmp r0, #0 +	bne _02215F6C +_02215F5C: +	ldr r1, _022160A0 ; =0x02217090 +	ldr r2, _022160A4 ; =0x0221709C +	mov r0, r4 +	bl MOD79_02212700 +_02215F6C: +	ldr r0, [r5, #0x34] +	cmp r0, #0 +	beq _02215F8C +	ldr r1, _022160A8 ; =0x022170AC +	ldr r2, _022160AC ; =0x022170B8 +	mov r0, r4 +	bl MOD79_02212700 +	b _02215F9C +_02215F8C: +	ldr r1, _022160A8 ; =0x022170AC +	ldr r2, _022160B0 ; =0x022170C4 +	mov r0, r4 +	bl MOD79_02212700 +_02215F9C: +	ldr r0, [r5, #0x13c] +	cmp r0, #0 +	beq _02215FE0 +	ldr r2, [r5, #0x14c] +	ldr r1, _022160B4 ; =0x022170CC +	add r0, sp, #0 +	bl sprintf +	ldr r1, _022160B8 ; =0x022170D0 +	add r2, sp, #0 +	mov r0, r4 +	bl MOD79_02212700 +	mov r0, r5 +	bl MOD79_02214FFC +	mov r2, r0 +	ldr r1, _022160BC ; =0x022170E0 +	mov r0, r4 +	bl MOD79_02212700 +_02215FE0: +	ldr r1, [r5, #0x28] +	cmp r1, #0 +	beq _02215FF8 +	mov r0, r4 +	mov r2, #0 +	bl MOD79_02212794 +_02215FF8: +	ldr r1, _0221609C ; =0x02216FFC +	mov r0, r4 +	mov r2, #2 +	bl MOD79_02212794 +	add r0, r5, #0x50 +	cmp r4, r0 +	beq _02216020 +	ldr r1, [r4, #4] +	ldr r2, [r4, #0xc] +	bl MOD79_02212794 +_02216020: +	mov r0, r5 +	bl MOD79_02212554 +	cmp r0, #0 +	addeq sp, sp, #0x14 +	ldmeqia sp!, {r4, r5, pc} +	ldr r1, [r5, #0x60] +	ldr r0, [r5, #0x5c] +	cmp r1, r0 +	addlt sp, sp, #0x14 +	ldmltia sp!, {r4, r5, pc} +	add r0, r5, #0x50 +	bl MOD79_0221262C +	ldr r0, [r5, #0x13c] +	mov r1, #0 +	cmp r0, #0 +	movne r0, #4 +	strne r0, [r5, #0x10] +	moveq r0, #5 +	streq r0, [r5, #0x10] +	mov r0, r5 +	mov r2, r1 +	bl MOD79_02212E00 +	add sp, sp, #0x14 +	ldmia sp!, {r4, r5, pc} +	.align 2, 0 +_02216080: .word 0x0221705C +_02216084: .word 0x02217064 +_02216088: .word 0x0221706C +_0221608C: .word 0x02217128 +_02216090: .word 0x02217074 +_02216094: .word 0x02217080 +_02216098: .word 0x02217088 +_0221609C: .word 0x02216FFC +_022160A0: .word 0x02217090 +_022160A4: .word 0x0221709C +_022160A8: .word 0x022170AC +_022160AC: .word 0x022170B8 +_022160B0: .word 0x022170C4 +_022160B4: .word 0x022170CC +_022160B8: .word 0x022170D0 +_022160BC: .word 0x022170E0 +	arm_func_end MOD79_02215E40 + +	arm_func_start MOD79_022160C0 +MOD79_022160C0: ; 0x022160C0 +	stmdb sp!, {r4, lr} +	ldr ip, _02216208 ; =0x00000408 +	sub sp, sp, ip +	mov r4, r0 +	ldr r1, [r4, #0x168] +	cmp r1, #0 +	bne _02216130 +	ldr r0, [r4, #0x14] +	ldr r1, _0221620C ; =0x022170F0 +	mov r2, #8 +	bl strncmp +	cmp r0, #0 +	ldreq ip, _02216208 ; =0x00000408 +	moveq r0, #1 +	streq r0, [r4, #0xfc] +	moveq r0, #0x11 +	addeq sp, sp, ip +	streq r0, [r4, #0x38] +	ldmeqia sp!, {r4, pc} +	mov r1, #0 +	mov r3, #3 +	mov r0, r4 +	mov r2, r1 +	str r3, [r4, #0x10] +	bl MOD79_02212E00 +	ldr ip, _02216208 ; =0x00000408 +	add sp, sp, ip +	ldmia sp!, {r4, pc} +_02216130: +	ldr r1, [r4, #0x170] +	cmp r1, #0 +	beq _0221615C +	mov r1, #0 +	mov r3, #3 +	mov r2, r1 +	str r3, [r4, #0x10] +	bl MOD79_02212E00 +	ldr ip, _02216208 ; =0x00000408 +	add sp, sp, ip +	ldmia sp!, {r4, pc} +_0221615C: +	ldr r1, [r4, #0x16c] +	cmp r1, #0 +	bne _0221619C +	ldr r2, [r4, #0x174] +	add r1, r4, #0x164 +	.word 0xE12FFF32 +	cmp r0, #3 +	bne _0221619C +	ldr r0, _02216210 ; =0x02216FE4 +	ldr r1, _02216214 ; =0x02216FC4 +	ldr r3, _02216218 ; =0x00000146 +	mov r2, #0 +	bl __msl_assertion_failed +	ldr ip, _02216208 ; =0x00000408 +	add sp, sp, ip +	ldmia sp!, {r4, pc} +_0221619C: +	ldr r1, [r4, #0x60] +	ldr r0, [r4, #0x5c] +	cmp r1, r0 +	bge _022161E4 +	mov r0, r4 +	bl MOD79_02212554 +	cmp r0, #0 +	ldreq ip, _02216208 ; =0x00000408 +	addeq sp, sp, ip +	ldmeqia sp!, {r4, pc} +	ldr r1, [r4, #0x60] +	ldr r0, [r4, #0x5c] +	cmp r1, r0 +	ldrlt ip, _02216208 ; =0x00000408 +	addlt sp, sp, ip +	ldmltia sp!, {r4, pc} +	add r0, r4, #0x50 +	bl MOD79_0221262C +_022161E4: +	mov r3, #0x400 +	add r1, sp, #4 +	add r2, sp, #0 +	mov r0, r4 +	str r3, [sp] +	bl MOD79_02212FF0 +	ldr ip, _02216208 ; =0x00000408 +	add sp, sp, ip +	ldmia sp!, {r4, pc} +	.align 2, 0 +_02216208: .word 0x00000408 +_0221620C: .word 0x022170F0 +_02216210: .word 0x02216FE4 +_02216214: .word 0x02216FC4 +_02216218: .word 0x00000146 +	arm_func_end MOD79_022160C0 + +	arm_func_start MOD79_0221621C +MOD79_0221621C: ; 0x0221621C +	stmdb sp!, {r4, lr} +	sub sp, sp, #0x10 +	mov r4, r0 +	ldr r1, [r4, #0x48] +	mvn r0, #0 +	cmp r1, r0 +	bne _022163D4 +	mov r0, #2 +	mov r1, #1 +	mov r2, #0 +	bl MOD04_021EFDB8 +	str r0, [r4, #0x48] +	ldr r0, [r4, #0x48] +	mvn r1, #0 +	cmp r0, r1 +	bne _02216280 +	mov r0, #1 +	str r0, [r4, #0xfc] +	mov r0, #5 +	str r0, [r4, #0x38] +	ldr r0, [r4, #0x48] +	bl MOD04_021EFB28 +	add sp, sp, #0x10 +	str r0, [r4, #0x4c] +	ldmia sp!, {r4, pc} +_02216280: +	mov r1, #0 +	bl MOD04_021F017C +	cmp r0, #0 +	bne _022162B4 +	mov r0, #1 +	str r0, [r4, #0xfc] +	mov r0, #5 +	str r0, [r4, #0x38] +	ldr r0, [r4, #0x48] +	bl MOD04_021EFB28 +	add sp, sp, #0x10 +	str r0, [r4, #0x4c] +	ldmia sp!, {r4, pc} +_022162B4: +	ldr r0, [r4, #0x134] +	cmp r0, #0 +	beq _022162D0 +	ldr r1, _0221646C ; =0x0221695C +	ldr r0, [r4, #0x48] +	ldr r1, [r1] +	bl MOD04_021F0130 +_022162D0: +	add r1, sp, #0 +	mov r0, #0 +	str r0, [r1] +	str r0, [r1, #4] +	mov r0, #2 +	strb r0, [sp, #1] +	ldr r0, [r4, #0x15c] +	cmp r0, #0 +	beq _02216318 +	add r0, r4, #0x100 +	ldrh r0, [r0, #0x60] +	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, #2] +	b _02216368 +_02216318: +	ldr r0, _02216470 ; =0x02217128 +	ldr r0, [r0] +	cmp r0, #0 +	beq _0221634C +	ldr r0, _02216474 ; =0x02217124 +	ldrh r0, [r0] +	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, #2] +	b _02216368 +_0221634C: +	ldrh r0, [r4, #0x20] +	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, #2] +_02216368: +	ldr r0, [r4, #0x1c] +	add r1, sp, #0 +	str r0, [sp, #4] +	ldr r0, [r4, #0x48] +	mov r2, #8 +	bl MOD04_021EFCE4 +	mvn r1, #0 +	cmp r0, r1 +	bne _022163D4 +	ldr r0, [r4, #0x48] +	bl MOD04_021EFB28 +	mvn r1, #5 +	cmp r0, r1 +	beq _022163D4 +	mvn r1, #0x19 +	cmp r0, r1 +	beq _022163D4 +	mvn r1, #0x4b +	cmp r0, r1 +	beq _022163D4 +	mov r1, #1 +	str r1, [r4, #0xfc] +	mov r1, #6 +	str r1, [r4, #0x38] +	add sp, sp, #0x10 +	str r0, [r4, #0x4c] +	ldmia sp!, {r4, pc} +_022163D4: +	ldr r0, [r4, #0x48] +	add r2, sp, #8 +	add r3, sp, #0xc +	mov r1, #0 +	bl MOD04_021EFF5C +	cmp r0, #0 +	movgt r1, #1 +	movle r1, #0 +	mvn r0, #0 +	cmp r1, r0 +	beq _0221640C +	ldr r0, [sp, #0xc] +	cmp r0, #0 +	beq _0221643C +_0221640C: +	mov r0, #1 +	str r0, [r4, #0xfc] +	mov r0, #6 +	cmp r1, #0 +	addne sp, sp, #0x10 +	str r0, [r4, #0x38] +	ldmneia sp!, {r4, pc} +	ldr r0, [r4, #0x48] +	bl MOD04_021EFB28 +	add sp, sp, #0x10 +	str r0, [r4, #0x4c] +	ldmia sp!, {r4, pc} +_0221643C: +	ldr r0, [sp, #8] +	cmp r0, #0 +	addeq sp, sp, #0x10 +	ldmeqia sp!, {r4, pc} +	mov r1, #0 +	mov r3, #2 +	mov r0, r4 +	mov r2, r1 +	str r3, [r4, #0x10] +	bl MOD79_02212E00 +	add sp, sp, #0x10 +	ldmia sp!, {r4, pc} +	.align 2, 0 +_0221646C: .word 0x0221695C +_02216470: .word 0x02217128 +_02216474: .word 0x02217124 +	arm_func_end MOD79_0221621C + +	arm_func_start MOD79_02216478 +MOD79_02216478: ; 0x02216478 +	stmdb sp!, {r4, r5, lr} +	sub sp, sp, #4 +	mov r1, #0 +	mov r4, r0 +	mov r2, r1 +	bl MOD79_02212E00 +	bl MOD04_021F024C +	mov r0, r4 +	bl MOD79_02216548 +	cmp r0, #0 +	moveq r0, #1 +	streq r0, [r4, #0xfc] +	moveq r0, #3 +	addeq sp, sp, #4 +	streq r0, [r4, #0x38] +	ldmeqia sp!, {r4, r5, pc} +	ldr r5, [r4, #0x15c] +	cmp r5, #0 +	bne _022164D4 +	ldr r0, _02216544 ; =0x02217128 +	ldr r5, [r0] +	cmp r5, #0 +	ldreq r5, [r4, #0x18] +_022164D4: +	mov r0, r5 +	bl MOD04_021EFB38 +	str r0, [r4, #0x1c] +	ldr r1, [r4, #0x1c] +	mvn r0, #0 +	cmp r1, r0 +	bne _02216524 +	mov r0, r5 +	bl FUN_0209A6EC +	cmp r0, #0 +	moveq r0, #1 +	streq r0, [r4, #0xfc] +	moveq r0, #4 +	addeq sp, sp, #4 +	streq r0, [r4, #0x38] +	ldmeqia sp!, {r4, r5, pc} +	ldr r0, [r0, #0xc] +	ldr r0, [r0] +	ldr r0, [r0] +	str r0, [r4, #0x1c] +_02216524: +	mov r1, #0 +	mov r3, #1 +	mov r0, r4 +	mov r2, r1 +	str r3, [r4, #0x10] +	bl MOD79_02212E00 +	add sp, sp, #4 +	ldmia sp!, {r4, r5, pc} +	.align 2, 0 +_02216544: .word 0x02217128 +	arm_func_end MOD79_02216478 + +	arm_func_start MOD79_02216548 +MOD79_02216548: ; 0x02216548 +	stmdb sp!, {r4, r5, r6, r7, r8, sb, lr} +	sub sp, sp, #4 +	movs r7, r0 +	bne _0221656C +	ldr r0, _02216704 ; =0x02216FB8 +	ldr r1, _02216708 ; =0x02216FC4 +	mov r2, #0 +	mov r3, #0x25 +	bl __msl_assertion_failed +_0221656C: +	cmp r7, #0 +	addeq sp, sp, #4 +	moveq r0, #0 +	ldmeqia sp!, {r4, r5, r6, r7, r8, sb, pc} +	ldr r0, [r7, #0x14] +	cmp r0, #0 +	bne _0221659C +	ldr r0, _0221670C ; =0x022170FC +	ldr r1, _02216708 ; =0x02216FC4 +	mov r2, #0 +	mov r3, #0x2b +	bl __msl_assertion_failed +_0221659C: +	ldr r6, [r7, #0x14] +	cmp r6, #0 +	addeq sp, sp, #4 +	moveq r0, #0 +	ldmeqia sp!, {r4, r5, r6, r7, r8, sb, pc} +	ldr r1, _02216710 ; =0x0221710C +	mov r0, r6 +	mov r2, #7 +	bl strncmp +	cmp r0, #0 +	addeq r6, r6, #7 +	moveq r4, #0 +	beq _022165FC +	ldr r1, _02216714 ; =0x022170F0 +	mov r0, r6 +	mov r2, #8 +	bl strncmp +	cmp r0, #0 +	addeq r6, r6, #8 +	moveq r4, #1 +	beq _022165FC +	add sp, sp, #4 +	mov r0, #0 +	ldmia sp!, {r4, r5, r6, r7, r8, sb, pc} +_022165FC: +	ldr r1, _02216718 ; =0x02217114 +	mov r0, r6 +	bl strspn +	mov r8, r0 +	ldrsb r5, [r6, r8] +	mov r1, #0 +	mov r0, r6 +	strb r1, [r6, r8] +	add sb, r6, r8 +	bl MOD04_021F0208 +	str r0, [r7, #0x18] +	ldr r0, [r7, #0x18] +	cmp r0, #0 +	addeq sp, sp, #4 +	moveq r0, #0 +	ldmeqia sp!, {r4, r5, r6, r7, r8, sb, pc} +	strb r5, [sb] +	ldrsb r0, [r6, r8]! +	cmp r0, #0x3a +	bne _02216688 +	add r6, r6, #1 +	mov r0, r6 +	bl atol +	strh r0, [r7, #0x20] +	ldrh r0, [r7, #0x20] +	cmp r0, #0 +	addeq sp, sp, #4 +	moveq r0, #0 +	ldmeqia sp!, {r4, r5, r6, r7, r8, sb, pc} +_02216670: +	ldrsb r0, [r6, #1]! +	cmp r0, #0 +	beq _0221669C +	cmp r0, #0x2f +	bne _02216670 +	b _0221669C +_02216688: +	cmp r4, #0 +	ldrne r0, _0221671C ; =0x000001BB +	strneh r0, [r7, #0x20] +	moveq r0, #0x50 +	streqh r0, [r7, #0x20] +_0221669C: +	ldrsb r0, [r6] +	cmp r0, #0 +	ldreq r6, _02216720 ; =0x02217118 +	mov r0, r6 +	bl MOD04_021F0208 +	str r0, [r7, #0x24] +	ldr r6, [r7, #0x24] +	mov r1, #0x20 +	mov r0, r6 +	bl strchr +	cmp r0, #0 +	beq _022166F0 +	mov r5, #0x2b +	mov r4, #0x20 +_022166D4: +	strb r5, [r0] +	ldr r6, [r7, #0x24] +	mov r1, r4 +	mov r0, r6 +	bl strchr +	cmp r0, #0 +	bne _022166D4 +_022166F0: +	cmp r6, #0 +	movne r0, #1 +	moveq r0, #0 +	add sp, sp, #4 +	ldmia sp!, {r4, r5, r6, r7, r8, sb, pc} +	.align 2, 0 +_02216704: .word 0x02216FB8 +_02216708: .word 0x02216FC4 +_0221670C: .word 0x022170FC +_02216710: .word 0x0221710C +_02216714: .word 0x022170F0 +_02216718: .word 0x02217114 +_0221671C: .word 0x000001BB +_02216720: .word 0x02217118 +	arm_func_end MOD79_02216548 +	; 0x02216724 + +	.section .rodata +	; 0x02216738 +	.incbin "baserom.nds", 0x2DE6D8, 0x10 + +	.section .data +	; 0x0221686C +	.incbin "baserom.nds", 0x2DE80C, 0x8B4 diff --git a/arm9/modules/79/asm/module_79_thumb.s b/arm9/modules/79/asm/module_79_thumb.s new file mode 100644 index 00000000..ac0c1188 --- /dev/null +++ b/arm9/modules/79/asm/module_79_thumb.s @@ -0,0 +1,851 @@ +	.include "asm/macros.inc" +	.include "global.inc" +	.section .text +	.balign 4, 0 + +	thumb_func_start MOD79_02211E60 +MOD79_02211E60: ; 0x02211E60 +	lsl r1, r0, #0x10 +	orr r1, r0 +	ldr r0, _02211E6C ; =0x02217120 +	str r1, [r0] +	bx lr +	nop +_02211E6C: .word 0x02217120 +	thumb_func_end MOD79_02211E60 + +	thumb_func_start MOD79_02211E70 +MOD79_02211E70: ; 0x02211E70 +	ldr r1, _02211E8C ; =0x02217120 +	mov r0, #0x45 +	ldr r2, [r1] +	add r3, r2, #0 +	mul r3, r0 +	ldr r0, _02211E90 ; =0x00001111 +	add r2, r3, r0 +	ldr r0, _02211E94 ; =0x7FFFFFFF +	and r0, r2 +	str r0, [r1] +	asr r0, r0, #0x10 +	lsl r0, r0, #0x18 +	lsr r0, r0, #0x18 +	bx lr +	.align 2, 0 +_02211E8C: .word 0x02217120 +_02211E90: .word 0x00001111 +_02211E94: .word 0x7FFFFFFF +	thumb_func_end MOD79_02211E70 + +	thumb_func_start MOD79_02211E98 +MOD79_02211E98: ; 0x02211E98 +	push {r3, r4, r5, r6, r7, lr} +	sub sp, #0x18 +	add r4, r0, #0 +	mov r0, #0 +	add r5, r2, #0 +	str r0, [sp, #0x14] +	add r0, r5, #0 +	str r0, [sp, #0x10] +	add r0, #8 +	add r7, r1, #0 +	str r3, [sp] +	str r0, [sp, #0x10] +	bl MOD79_02211FA4 +	ldr r1, [sp, #0x30] +	add r0, r0, #1 +	cmp r1, r0 +	bge _02211EC2 +	add sp, #0x18 +	mov r0, #2 +	pop {r3, r4, r5, r6, r7, pc} +_02211EC2: +	ldr r1, [sp, #0x10] +	mov r0, #0xa +	bl MOD04_021DD944 +	add r6, r0, #0 +	bne _02211ED4 +	add sp, #0x18 +	mov r0, #1 +	pop {r3, r4, r5, r6, r7, pc} +_02211ED4: +	lsr r0, r4, #0x18 +	lsl r0, r0, #0x18 +	lsr r0, r0, #0x18 +	str r0, [sp, #4] +	lsl r0, r0, #0x18 +	lsr r1, r0, #0x18 +	ldr r0, [sp, #0x14] +	add r0, r0, r1 +	lsr r1, r4, #0x10 +	lsl r1, r1, #0x18 +	lsr r1, r1, #0x18 +	str r1, [sp, #8] +	lsl r1, r1, #0x18 +	lsr r1, r1, #0x18 +	add r0, r0, r1 +	lsr r1, r4, #8 +	lsl r1, r1, #0x18 +	lsr r1, r1, #0x18 +	str r1, [sp, #0xc] +	lsl r1, r1, #0x18 +	lsr r1, r1, #0x18 +	add r0, r0, r1 +	lsl r1, r4, #0x18 +	lsr r4, r1, #0x18 +	lsl r1, r4, #0x18 +	lsr r1, r1, #0x18 +	add r0, r0, r1 +	str r0, [sp, #0x14] +	mov r0, #0 +	cmp r5, #0 +	ble _02211F20 +_02211F12: +	ldrb r2, [r7, r0] +	ldr r1, [sp, #0x14] +	add r0, r0, #1 +	add r1, r1, r2 +	str r1, [sp, #0x14] +	cmp r0, r5 +	blt _02211F12 +_02211F20: +	ldr r0, [sp, #0x14] +	bl MOD79_02211E60 +	bl MOD79_02211E70 +	eor r0, r4 +	strb r0, [r6, #4] +	bl MOD79_02211E70 +	ldr r1, [sp, #0xc] +	eor r0, r1 +	strb r0, [r6, #5] +	bl MOD79_02211E70 +	ldr r1, [sp, #8] +	eor r0, r1 +	strb r0, [r6, #6] +	bl MOD79_02211E70 +	ldr r1, [sp, #4] +	mov r4, #0 +	eor r0, r1 +	strb r0, [r6, #7] +	cmp r5, #0 +	ble _02211F64 +_02211F52: +	bl MOD79_02211E70 +	ldrb r1, [r7, r4] +	eor r1, r0 +	add r0, r6, r4 +	add r4, r4, #1 +	strb r1, [r0, #8] +	cmp r4, r5 +	blt _02211F52 +_02211F64: +	ldr r1, _02211FA0 ; =0x4A3B2C1D +	ldr r0, [sp, #0x14] +	add r5, #8 +	eor r1, r0 +	lsr r0, r1, #0x18 +	strb r0, [r6] +	lsr r0, r1, #0x10 +	strb r0, [r6, #1] +	lsr r0, r1, #8 +	strb r0, [r6, #2] +	strb r1, [r6, #3] +	ldr r1, [sp] +	add r0, r6, #0 +	add r2, r5, #0 +	mov r3, #2 +	bl MOD04_021EF820 +	ldr r0, [sp, #0x10] +	bl MOD79_02211FA4 +	ldr r1, [sp] +	mov r2, #0 +	strb r2, [r1, r0] +	mov r0, #0xa +	add r1, r6, #0 +	bl MOD04_021DD904 +	mov r0, #0 +	add sp, #0x18 +	pop {r3, r4, r5, r6, r7, pc} +	.align 2, 0 +_02211FA0: .word 0x4A3B2C1D +	thumb_func_end MOD79_02211E98 + +	thumb_func_start MOD79_02211FA4 +MOD79_02211FA4: ; 0x02211FA4 +	push {r3, r4, r5, lr} +	mov r1, #3 +	add r5, r0, #0 +	bl _u32_div_f +	cmp r1, #0 +	beq _02211FB6 +	mov r4, #1 +	b _02211FB8 +_02211FB6: +	mov r4, #0 +_02211FB8: +	add r0, r5, #0 +	mov r1, #3 +	bl _u32_div_f +	add r0, r0, r4 +	lsl r0, r0, #2 +	pop {r3, r4, r5, pc} +	.align 2, 0 +	thumb_func_end MOD79_02211FA4 + +	thumb_func_start MOD79_02211FC8 +MOD79_02211FC8: ; 0x02211FC8 +	add r0, #8 +	cmp r0, #7 +	bhi _02212022 +	add r0, r0, r0 +	add r0, pc +	ldrh r0, [r0, #6] +	lsl r0, r0, #0x10 +	asr r0, r0, #0x10 +	add pc, r0 +_02211FDA: ; jump table +	.short _02211FEA - _02211FDA - 2 ; case 0 +	.short _02212022 - _02211FDA - 2 ; case 1 +	.short _02211FF2 - _02211FDA - 2 ; case 2 +	.short _02211FFA - _02211FDA - 2 ; case 3 +	.short _02212002 - _02211FDA - 2 ; case 4 +	.short _0221200A - _02211FDA - 2 ; case 5 +	.short _02212012 - _02211FDA - 2 ; case 6 +	.short _0221201A - _02211FDA - 2 ; case 7 +_02211FEA: +	ldr r0, _0221202C ; =0x02216760 +	mov r1, #0 +	str r1, [r0, #8] +	bx lr +_02211FF2: +	ldr r0, _0221202C ; =0x02216760 +	mov r1, #1 +	str r1, [r0, #8] +	bx lr +_02211FFA: +	ldr r0, _0221202C ; =0x02216760 +	mov r1, #2 +	str r1, [r0, #8] +	bx lr +_02212002: +	ldr r0, _0221202C ; =0x02216760 +	mov r1, #3 +	str r1, [r0, #8] +	bx lr +_0221200A: +	ldr r0, _0221202C ; =0x02216760 +	mov r1, #4 +	str r1, [r0, #8] +	bx lr +_02212012: +	ldr r0, _0221202C ; =0x02216760 +	mov r1, #5 +	str r1, [r0, #8] +	bx lr +_0221201A: +	ldr r0, _0221202C ; =0x02216760 +	mov r1, #6 +	str r1, [r0, #8] +	bx lr +_02212022: +	ldr r0, _0221202C ; =0x02216760 +	mov r1, #0 +	str r1, [r0, #8] +	bx lr +	nop +_0221202C: .word 0x02216760 +	thumb_func_end MOD79_02211FC8 + +	thumb_func_start MOD79_02212030 +MOD79_02212030: ; 0x02212030 +	push {r4, r5, r6, r7, lr} +	sub sp, #0x4c +	add r4, r1, #0 +	mov r3, #0 +	ldr r1, _022122B8 ; =0x02216760 +	mvn r3, r3 +	str r3, [r1, #4] +	ldr r3, [r1] +	add r6, r0, #0 +	cmp r3, #1 +	bne _02212048 +	b _022122B2 +_02212048: +	cmp r2, #0 +	beq _0221204E +	b _02212202 +_0221204E: +	cmp r3, #4 +	beq _0221205A +	cmp r3, #6 +	beq _02212126 +	add sp, #0x4c +	pop {r4, r5, r6, r7, pc} +_0221205A: +	cmp r4, #0x20 +	bne _0221211E +	ldr r5, [r1, #0x28] +	ldr r3, _022122BC ; =0x02216724 +	add r5, #0x14 +	add r2, sp, #4 +	mov r1, #0x11 +_02212068: +	ldrb r0, [r3] +	add r3, r3, #1 +	strb r0, [r2] +	add r2, r2, #1 +	sub r1, r1, #1 +	bne _02212068 +	add r3, sp, #0x14 +	ldr r2, _022122C0 ; =0x02216794 +	add r3, #1 +	mov r1, #0x15 +_0221207C: +	ldrb r0, [r2] +	add r2, r2, #1 +	strb r0, [r3] +	add r3, r3, #1 +	sub r1, r1, #1 +	bne _0221207C +	add r0, sp, #0x14 +	add r0, #1 +	add r1, r6, #0 +	add r2, r4, #0 +	bl strncat +	add r0, sp, #0x14 +	add r0, #1 +	bl strlen +	add r1, sp, #0x14 +	add r2, r0, #0 +	add r0, r5, #0 +	add r1, #1 +	bl MATH_CalcSHA1 +	ldr r0, _022122B8 ; =0x02216760 +	ldr r1, _022122C4 ; =0x022167AC +	ldr r0, [r0, #0x24] +	bl strcat +	mov r2, #0 +	ldr r4, _022122B8 ; =0x02216760 +	add r3, r2, #0 +	add r1, sp, #4 +	mov r7, #0xf +_022120BC: +	ldrb r0, [r5, r2] +	asr r0, r0, #4 +	ldrsb r6, [r1, r0] +	ldr r0, [r4, #0x28] +	strb r6, [r0, r3] +	ldrb r0, [r5, r2] +	ldr r6, [r4, #0x28] +	add r2, r2, #1 +	and r0, r7 +	ldrsb r0, [r1, r0] +	add r6, r6, r3 +	add r3, r3, #2 +	strb r0, [r6, #1] +	cmp r2, #0x14 +	blt _022120BC +	ldr r0, _022122B8 ; =0x02216760 +	mov r2, #0 +	ldr r1, [r0, #0x28] +	add r1, #0x28 +	strb r2, [r1] +	ldr r0, [r0, #0x24] +	ldr r1, _022122C8 ; =0x022167B4 +	bl strcat +	ldr r3, _022122B8 ; =0x02216760 +	ldr r0, [r3, #0x30] +	str r0, [sp] +	ldr r0, [r3, #0x10] +	ldr r1, [r3, #0x14] +	ldr r2, [r3, #0x18] +	ldr r3, [r3, #0x2c] +	bl MOD79_02211E98 +	cmp r0, #0 +	beq _02212114 +	cmp r0, #1 +	beq _0221210A +	cmp r0, #2 +	bne _02212114 +_0221210A: +	ldr r0, _022122B8 ; =0x02216760 +	mov r1, #1 +	str r1, [r0] +	add sp, #0x4c +	pop {r4, r5, r6, r7, pc} +_02212114: +	ldr r0, _022122B8 ; =0x02216760 +	mov r1, #5 +	str r1, [r0] +	add sp, #0x4c +	pop {r4, r5, r6, r7, pc} +_0221211E: +	mov r0, #1 +	str r0, [r1] +	add sp, #0x4c +	pop {r4, r5, r6, r7, pc} +_02212126: +	cmp r4, #0x16 +	bne _022121D0 +	ldr r1, _022122CC ; =0x022167BC +	mov r2, #0x16 +	bl strncmp +	cmp r0, #0 +	bne _02212144 +	ldr r0, _022122B8 ; =0x02216760 +	mov r1, #1 +	str r1, [r0] +	mov r1, #0x1a +	str r1, [r0, #8] +	add sp, #0x4c +	pop {r4, r5, r6, r7, pc} +_02212144: +	ldr r1, _022122D0 ; =0x022167D4 +	add r0, r6, #0 +	mov r2, #0x16 +	bl strncmp +	cmp r0, #0 +	bne _02212160 +	ldr r0, _022122B8 ; =0x02216760 +	mov r1, #1 +	str r1, [r0] +	mov r1, #0x1b +	str r1, [r0, #8] +	add sp, #0x4c +	pop {r4, r5, r6, r7, pc} +_02212160: +	ldr r1, _022122D4 ; =0x022167EC +	add r0, r6, #0 +	mov r2, #0x16 +	bl strncmp +	cmp r0, #0 +	bne _0221217C +	ldr r0, _022122B8 ; =0x02216760 +	mov r1, #1 +	str r1, [r0] +	mov r1, #0x1c +	str r1, [r0, #8] +	add sp, #0x4c +	pop {r4, r5, r6, r7, pc} +_0221217C: +	ldr r1, _022122D8 ; =0x02216804 +	add r0, r6, #0 +	mov r2, #0x16 +	bl strncmp +	cmp r0, #0 +	bne _02212198 +	ldr r0, _022122B8 ; =0x02216760 +	mov r1, #1 +	str r1, [r0] +	mov r1, #0x1d +	str r1, [r0, #8] +	add sp, #0x4c +	pop {r4, r5, r6, r7, pc} +_02212198: +	ldr r1, _022122DC ; =0x0221681C +	add r0, r6, #0 +	mov r2, #0x16 +	bl strncmp +	cmp r0, #0 +	bne _022121B4 +	ldr r0, _022122B8 ; =0x02216760 +	mov r1, #1 +	str r1, [r0] +	mov r1, #0x1e +	str r1, [r0, #8] +	add sp, #0x4c +	pop {r4, r5, r6, r7, pc} +_022121B4: +	ldr r1, _022122E0 ; =0x02216834 +	add r0, r6, #0 +	mov r2, #0x16 +	bl strncmp +	cmp r0, #0 +	bne _022121D0 +	ldr r0, _022122B8 ; =0x02216760 +	mov r1, #1 +	str r1, [r0] +	mov r1, #0x1f +	str r1, [r0, #8] +	add sp, #0x4c +	pop {r4, r5, r6, r7, pc} +_022121D0: +	ldr r0, _022122B8 ; =0x02216760 +	ldr r2, [r0, #0x20] +	cmp r4, r2 +	ldr r0, [r0, #0x1c] +	bgt _022121EA +	add r1, r6, #0 +	add r2, r4, #0 +	bl memcpy +	ldr r0, _022122B8 ; =0x02216760 +	mov r1, #7 +	str r1, [r0] +	b _022121FA +_022121EA: +	add r1, r6, #0 +	bl memcpy +	ldr r0, _022122B8 ; =0x02216760 +	mov r1, #1 +	str r1, [r0] +	mov r1, #0x20 +	str r1, [r0, #8] +_022121FA: +	ldr r0, _022122B8 ; =0x02216760 +	add sp, #0x4c +	str r4, [r0, #0xc] +	pop {r4, r5, r6, r7, pc} +_02212202: +	mov r0, #1 +	str r0, [r1] +	cmp r2, #0x13 +	bhi _022122B2 +	add r0, r2, r2 +	add r0, pc +	ldrh r0, [r0, #6] +	lsl r0, r0, #0x10 +	asr r0, r0, #0x10 +	add pc, r0 +_02212216: ; jump table +	.short _022122B2 - _02212216 - 2 ; case 0 +	.short _0221223E - _02212216 - 2 ; case 1 +	.short _02212246 - _02212216 - 2 ; case 2 +	.short _0221224E - _02212216 - 2 ; case 3 +	.short _02212256 - _02212216 - 2 ; case 4 +	.short _0221225E - _02212216 - 2 ; case 5 +	.short _02212266 - _02212216 - 2 ; case 6 +	.short _0221226E - _02212216 - 2 ; case 7 +	.short _02212276 - _02212216 - 2 ; case 8 +	.short _0221227E - _02212216 - 2 ; case 9 +	.short _02212286 - _02212216 - 2 ; case 10 +	.short _0221228E - _02212216 - 2 ; case 11 +	.short _02212296 - _02212216 - 2 ; case 12 +	.short _022122B2 - _02212216 - 2 ; case 13 +	.short _022122B2 - _02212216 - 2 ; case 14 +	.short _0221229E - _02212216 - 2 ; case 15 +	.short _022122A6 - _02212216 - 2 ; case 16 +	.short _022122B2 - _02212216 - 2 ; case 17 +	.short _022122B2 - _02212216 - 2 ; case 18 +	.short _022122AE - _02212216 - 2 ; case 19 +_0221223E: +	mov r0, #8 +	str r0, [r1, #8] +	add sp, #0x4c +	pop {r4, r5, r6, r7, pc} +_02212246: +	mov r0, #9 +	str r0, [r1, #8] +	add sp, #0x4c +	pop {r4, r5, r6, r7, pc} +_0221224E: +	mov r0, #0xa +	str r0, [r1, #8] +	add sp, #0x4c +	pop {r4, r5, r6, r7, pc} +_02212256: +	mov r0, #0xb +	str r0, [r1, #8] +	add sp, #0x4c +	pop {r4, r5, r6, r7, pc} +_0221225E: +	mov r0, #0xc +	str r0, [r1, #8] +	add sp, #0x4c +	pop {r4, r5, r6, r7, pc} +_02212266: +	mov r0, #0xd +	str r0, [r1, #8] +	add sp, #0x4c +	pop {r4, r5, r6, r7, pc} +_0221226E: +	mov r0, #0xe +	str r0, [r1, #8] +	add sp, #0x4c +	pop {r4, r5, r6, r7, pc} +_02212276: +	mov r0, #0xf +	str r0, [r1, #8] +	add sp, #0x4c +	pop {r4, r5, r6, r7, pc} +_0221227E: +	mov r0, #0x10 +	str r0, [r1, #8] +	add sp, #0x4c +	pop {r4, r5, r6, r7, pc} +_02212286: +	mov r0, #0x11 +	str r0, [r1, #8] +	add sp, #0x4c +	pop {r4, r5, r6, r7, pc} +_0221228E: +	mov r0, #0x12 +	str r0, [r1, #8] +	add sp, #0x4c +	pop {r4, r5, r6, r7, pc} +_02212296: +	mov r0, #0x13 +	str r0, [r1, #8] +	add sp, #0x4c +	pop {r4, r5, r6, r7, pc} +_0221229E: +	mov r0, #0x16 +	str r0, [r1, #8] +	add sp, #0x4c +	pop {r4, r5, r6, r7, pc} +_022122A6: +	mov r0, #0x17 +	str r0, [r1, #8] +	add sp, #0x4c +	pop {r4, r5, r6, r7, pc} +_022122AE: +	mov r0, #0x19 +	str r0, [r1, #8] +_022122B2: +	add sp, #0x4c +	pop {r4, r5, r6, r7, pc} +	nop +_022122B8: .word 0x02216760 +_022122BC: .word 0x02216724 +_022122C0: .word 0x02216794 +_022122C4: .word 0x022167AC +_022122C8: .word 0x022167B4 +_022122CC: .word 0x022167BC +_022122D0: .word 0x022167D4 +_022122D4: .word 0x022167EC +_022122D8: .word 0x02216804 +_022122DC: .word 0x0221681C +_022122E0: .word 0x02216834 +	thumb_func_end MOD79_02212030 + +	thumb_func_start MOD79_022122E4 +MOD79_022122E4: ; 0x022122E4 +	push {r3, lr} +	ldr r0, _02212304 ; =0x02216760 +	mov r1, #2 +	str r1, [r0] +	sub r1, r1, #3 +	str r1, [r0, #4] +	mov r0, #0 +	bl MOD04_021EB59C +	cmp r0, #0 +	bne _02212300 +	ldr r0, _02212304 ; =0x02216760 +	mov r1, #1 +	str r1, [r0] +_02212300: +	pop {r3, pc} +	nop +_02212304: .word 0x02216760 +	thumb_func_end MOD79_022122E4 + +	thumb_func_start MOD79_02212308 +MOD79_02212308: ; 0x02212308 +	push {r3, r4, r5, r6, r7, lr} +	add r5, r1, #0 +	ldr r1, _02212398 ; =0x02216760 +	add r4, r3, #0 +	ldr r3, [r1] +	add r7, r0, #0 +	cmp r3, #2 +	beq _0221231C +	mov r0, #1 +	pop {r3, r4, r5, r6, r7, pc} +_0221231C: +	str r5, [r1, #0x10] +	str r2, [r1, #0x14] +	str r4, [r1, #0x18] +	ldr r2, [sp, #0x18] +	add r4, #8 +	str r2, [r1, #0x1c] +	ldr r2, [sp, #0x1c] +	str r2, [r1, #0x20] +	bl strlen +	add r6, r0, #0 +	add r0, r4, #0 +	bl MOD79_02211FA4 +	add r1, r0, #0 +	add r6, #0x45 +	mov r0, #0xa +	add r1, r6, r1 +	bl MOD04_021DD944 +	ldr r1, _02212398 ; =0x02216760 +	cmp r0, #0 +	str r0, [r1, #0x24] +	bne _02212350 +	mov r0, #2 +	pop {r3, r4, r5, r6, r7, pc} +_02212350: +	ldr r1, _0221239C ; =0x0221684C +	add r2, r7, #0 +	add r3, r5, #0 +	bl sprintf +	ldr r0, _02212398 ; =0x02216760 +	ldr r5, [r0, #0x24] +	add r0, r5, #0 +	bl strlen +	add r6, r0, #0 +	ldr r0, _022123A0 ; =0x022167AC +	bl strlen +	add r1, r5, r6 +	add r1, r1, r0 +	ldr r0, _02212398 ; =0x02216760 +	str r1, [r0, #0x28] +	ldr r0, _022123A4 ; =0x022167B4 +	bl strlen +	ldr r1, _02212398 ; =0x02216760 +	ldr r2, [r1, #0x28] +	add r2, #0x28 +	add r0, r2, r0 +	str r0, [r1, #0x2c] +	add r0, r4, #0 +	bl MOD79_02211FA4 +	add r1, r0, #1 +	ldr r0, _02212398 ; =0x02216760 +	str r1, [r0, #0x30] +	mov r1, #3 +	str r1, [r0] +	mov r0, #0 +	pop {r3, r4, r5, r6, r7, pc} +	.align 2, 0 +_02212398: .word 0x02216760 +_0221239C: .word 0x0221684C +_022123A0: .word 0x022167AC +_022123A4: .word 0x022167B4 +	thumb_func_end MOD79_02212308 + +	thumb_func_start MOD79_022123A8 +MOD79_022123A8: ; 0x022123A8 +	push {r3, lr} +	ldr r1, _02212440 ; =0x02216760 +	ldr r0, [r1] +	cmp r0, #7 +	bhi _02212438 +	add r0, r0, r0 +	add r0, pc +	ldrh r0, [r0, #6] +	lsl r0, r0, #0x10 +	asr r0, r0, #0x10 +	add pc, r0 +_022123BE: ; jump table +	.short _02212438 - _022123BE - 2 ; case 0 +	.short _02212438 - _022123BE - 2 ; case 1 +	.short _02212438 - _022123BE - 2 ; case 2 +	.short _022123CE - _022123BE - 2 ; case 3 +	.short _022123F4 - _022123BE - 2 ; case 4 +	.short _02212404 - _022123BE - 2 ; case 5 +	.short _0221242A - _022123BE - 2 ; case 6 +	.short _02212438 - _022123BE - 2 ; case 7 +_022123CE: +	ldr r0, [r1, #0x24] +	ldr r1, _02212444 ; =MOD79_02212030 +	ldr r2, _02212448 ; =0x02216760 +	bl MOD04_021EB3B8 +	ldr r1, _02212440 ; =0x02216760 +	str r0, [r1, #4] +	bl MOD79_02211FC8 +	ldr r0, _02212440 ; =0x02216760 +	ldr r1, [r0, #4] +	cmp r1, #0 +	blt _022123EE +	mov r1, #4 +	str r1, [r0] +	b _02212438 +_022123EE: +	mov r1, #1 +	str r1, [r0] +	b _02212438 +_022123F4: +	bl MOD04_021EB524 +	cmp r0, #0 +	bne _02212438 +	ldr r0, _02212440 ; =0x02216760 +	mov r1, #1 +	str r1, [r0] +	b _02212438 +_02212404: +	ldr r0, [r1, #0x24] +	ldr r1, _02212444 ; =MOD79_02212030 +	ldr r2, _02212448 ; =0x02216760 +	bl MOD04_021EB3B8 +	ldr r1, _02212440 ; =0x02216760 +	str r0, [r1, #4] +	bl MOD79_02211FC8 +	ldr r0, _02212440 ; =0x02216760 +	ldr r1, [r0, #4] +	cmp r1, #0 +	blt _02212424 +	mov r1, #6 +	str r1, [r0] +	b _02212438 +_02212424: +	mov r1, #1 +	str r1, [r0] +	b _02212438 +_0221242A: +	bl MOD04_021EB524 +	cmp r0, #0 +	bne _02212438 +	ldr r0, _02212440 ; =0x02216760 +	mov r1, #1 +	str r1, [r0] +_02212438: +	ldr r0, _02212440 ; =0x02216760 +	ldr r0, [r0] +	pop {r3, pc} +	nop +_02212440: .word 0x02216760 +_02212444: .word MOD79_02212030 +_02212448: .word 0x02216760 +	thumb_func_end MOD79_022123A8 + +	thumb_func_start MOD79_0221244C +MOD79_0221244C: ; 0x0221244C +	push {r3, lr} +	ldr r0, _02212470 ; =0x02216760 +	ldr r1, [r0, #0x24] +	cmp r1, #0 +	beq _02212464 +	mov r0, #0xa +	mov r2, #0 +	bl MOD04_021DD904 +	ldr r0, _02212470 ; =0x02216760 +	mov r1, #0 +	str r1, [r0, #0x24] +_02212464: +	blx FUN_021EB550 +	ldr r0, _02212470 ; =0x02216760 +	mov r1, #1 +	str r1, [r0] +	pop {r3, pc} +	.align 2, 0 +_02212470: .word 0x02216760 +	thumb_func_end MOD79_0221244C + +	thumb_func_start MOD79_02212474 +MOD79_02212474: ; 0x02212474 +	ldr r0, _0221247C ; =0x02216760 +	ldr r0, [r0, #8] +	bx lr +	nop +_0221247C: .word 0x02216760 +	thumb_func_end MOD79_02212474 + +	thumb_func_start MOD79_02212480 +MOD79_02212480: ; 0x02212480 +	ldr r0, _02212488 ; =0x02216760 +	ldr r0, [r0, #0xc] +	bx lr +	nop +_02212488: .word 0x02216760 +	thumb_func_end MOD79_02212480 + +	.section .rodata +	; 0x02216724 +	.incbin "baserom.nds", 0x2DE6C4, 0x14 +	 +	.section .data +	; 0x02216760 +	.incbin "baserom.nds", 0x2DE700, 0x10C + +	.section .bss +	; 0x2217120 +	.space 0x40 diff --git a/arm9/undefined_syms.txt b/arm9/undefined_syms.txt index 4cca1421..6a81ad19 100644 --- a/arm9/undefined_syms.txt +++ b/arm9/undefined_syms.txt @@ -1,5 +1,6 @@  // Overlay +FUN_021EB550 = 0x021EB550;  FUN_0222DAEC = 0x0222DAEC;  FUN_0222DD1C = 0x0222DD1C;  FUN_0222DD38 = 0x0222DD38; | 
